1ef270ab1SKenneth D. Merry /*- 2ef270ab1SKenneth D. Merry * Copyright (c) 2017 Broadcom. All rights reserved. 3ef270ab1SKenneth D. Merry * The term "Broadcom" refers to Broadcom Limited and/or its subsidiaries. 4ef270ab1SKenneth D. Merry * 5ef270ab1SKenneth D. Merry * Redistribution and use in source and binary forms, with or without 6ef270ab1SKenneth D. Merry * modification, are permitted provided that the following conditions are met: 7ef270ab1SKenneth D. Merry * 8ef270ab1SKenneth D. Merry * 1. Redistributions of source code must retain the above copyright notice, 9ef270ab1SKenneth D. Merry * this list of conditions and the following disclaimer. 10ef270ab1SKenneth D. Merry * 11ef270ab1SKenneth D. Merry * 2. Redistributions in binary form must reproduce the above copyright notice, 12ef270ab1SKenneth D. Merry * this list of conditions and the following disclaimer in the documentation 13ef270ab1SKenneth D. Merry * and/or other materials provided with the distribution. 14ef270ab1SKenneth D. Merry * 15ef270ab1SKenneth D. Merry * 3. Neither the name of the copyright holder nor the names of its contributors 16ef270ab1SKenneth D. Merry * may be used to endorse or promote products derived from this software 17ef270ab1SKenneth D. Merry * without specific prior written permission. 18ef270ab1SKenneth D. Merry * 19ef270ab1SKenneth D. Merry * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20ef270ab1SKenneth D. Merry * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21ef270ab1SKenneth D. Merry * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22ef270ab1SKenneth D. Merry * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 23ef270ab1SKenneth D. Merry * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24ef270ab1SKenneth D. Merry * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25ef270ab1SKenneth D. Merry * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26ef270ab1SKenneth D. Merry * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27ef270ab1SKenneth D. Merry * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28ef270ab1SKenneth D. Merry * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29ef270ab1SKenneth D. Merry * POSSIBILITY OF SUCH DAMAGE. 30ef270ab1SKenneth D. Merry */ 31ef270ab1SKenneth D. Merry 32ef270ab1SKenneth D. Merry /** 33ef270ab1SKenneth D. Merry * @file 34ef270ab1SKenneth D. Merry * 35ef270ab1SKenneth D. Merry */ 36ef270ab1SKenneth D. Merry 37ef270ab1SKenneth D. Merry #ifndef __OCS_HW_QUEUES_H__ 38ef270ab1SKenneth D. Merry #define __OCS_HW_QUEUES_H__ 39ef270ab1SKenneth D. Merry 40ef270ab1SKenneth D. Merry #define OCS_HW_MQ_DEPTH 128 41ef270ab1SKenneth D. Merry 42ef270ab1SKenneth D. Merry typedef enum { 43ef270ab1SKenneth D. Merry QTOP_EQ = 0, 44ef270ab1SKenneth D. Merry QTOP_CQ, 45ef270ab1SKenneth D. Merry QTOP_WQ, 46ef270ab1SKenneth D. Merry QTOP_RQ, 47ef270ab1SKenneth D. Merry QTOP_MQ, 48ef270ab1SKenneth D. Merry QTOP_LAST, 49ef270ab1SKenneth D. Merry } ocs_hw_qtop_entry_e; 50ef270ab1SKenneth D. Merry 51ef270ab1SKenneth D. Merry typedef struct { 52ef270ab1SKenneth D. Merry ocs_hw_qtop_entry_e entry; 53ef270ab1SKenneth D. Merry uint8_t set_default; 54ef270ab1SKenneth D. Merry uint32_t len; 55ef270ab1SKenneth D. Merry uint8_t class; 56ef270ab1SKenneth D. Merry uint8_t ulp; 57ef270ab1SKenneth D. Merry uint8_t filter_mask; 58ef270ab1SKenneth D. Merry } ocs_hw_qtop_entry_t; 59ef270ab1SKenneth D. Merry 60ef270ab1SKenneth D. Merry typedef struct { 61ef270ab1SKenneth D. Merry struct rq_config { 62ef270ab1SKenneth D. Merry hw_eq_t *eq; 63ef270ab1SKenneth D. Merry uint32_t len; 64ef270ab1SKenneth D. Merry uint8_t class; 65ef270ab1SKenneth D. Merry uint8_t ulp; 66ef270ab1SKenneth D. Merry uint8_t filter_mask; 67ef270ab1SKenneth D. Merry } rq_cfg[16]; 68ef270ab1SKenneth D. Merry uint32_t num_pairs; 69ef270ab1SKenneth D. Merry } ocs_hw_mrq_t; 70ef270ab1SKenneth D. Merry 71ef270ab1SKenneth D. Merry #define MAX_TOKENS 256 72ef270ab1SKenneth D. Merry #define OCS_HW_MAX_QTOP_ENTRIES 200 73ef270ab1SKenneth D. Merry 74ef270ab1SKenneth D. Merry typedef struct { 75ef270ab1SKenneth D. Merry ocs_os_handle_t os; 76ef270ab1SKenneth D. Merry ocs_hw_qtop_entry_t *entries; 77ef270ab1SKenneth D. Merry uint32_t alloc_count; 78ef270ab1SKenneth D. Merry uint32_t inuse_count; 79ef270ab1SKenneth D. Merry uint32_t entry_counts[QTOP_LAST]; 80ef270ab1SKenneth D. Merry uint32_t rptcount[10]; 81ef270ab1SKenneth D. Merry uint32_t rptcount_idx; 82ef270ab1SKenneth D. Merry } ocs_hw_qtop_t; 83ef270ab1SKenneth D. Merry 84ef270ab1SKenneth D. Merry extern ocs_hw_qtop_t *ocs_hw_qtop_parse(ocs_hw_t *hw, const char *qtop_string); 85ef270ab1SKenneth D. Merry extern void ocs_hw_qtop_free(ocs_hw_qtop_t *qtop); 86ef270ab1SKenneth D. Merry extern const char *ocs_hw_qtop_entry_name(ocs_hw_qtop_entry_e entry); 87ef270ab1SKenneth D. Merry extern uint32_t ocs_hw_qtop_eq_count(ocs_hw_t *hw); 88ef270ab1SKenneth D. Merry 89ef270ab1SKenneth D. Merry extern ocs_hw_rtn_e ocs_hw_init_queues(ocs_hw_t *hw, ocs_hw_qtop_t *qtop); 90ef270ab1SKenneth D. Merry extern void hw_thread_eq_handler(ocs_hw_t *hw, hw_eq_t *eq, uint32_t max_isr_time_msec); 91ef270ab1SKenneth D. Merry extern void hw_thread_cq_handler(ocs_hw_t *hw, hw_cq_t *cq); 92ef270ab1SKenneth D. Merry extern hw_wq_t *ocs_hw_queue_next_wq(ocs_hw_t *hw, ocs_hw_io_t *io); 93ef270ab1SKenneth D. Merry 94ef270ab1SKenneth D. Merry #endif /* __OCS_HW_QUEUES_H__ */ 95