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 * $FreeBSD$ 32ef270ab1SKenneth D. Merry */ 33ef270ab1SKenneth D. Merry 34ef270ab1SKenneth D. Merry /** 35ef270ab1SKenneth D. Merry * @file 36ef270ab1SKenneth D. Merry * 37ef270ab1SKenneth D. Merry */ 38ef270ab1SKenneth D. Merry 39ef270ab1SKenneth D. Merry #ifndef __OCS_HW_QUEUES_H__ 40ef270ab1SKenneth D. Merry #define __OCS_HW_QUEUES_H__ 41ef270ab1SKenneth D. Merry 42ef270ab1SKenneth D. Merry #define OCS_HW_MQ_DEPTH 128 43ef270ab1SKenneth D. Merry 44ef270ab1SKenneth D. Merry typedef enum { 45ef270ab1SKenneth D. Merry QTOP_EQ = 0, 46ef270ab1SKenneth D. Merry QTOP_CQ, 47ef270ab1SKenneth D. Merry QTOP_WQ, 48ef270ab1SKenneth D. Merry QTOP_RQ, 49ef270ab1SKenneth D. Merry QTOP_MQ, 50ef270ab1SKenneth D. Merry QTOP_LAST, 51ef270ab1SKenneth D. Merry } ocs_hw_qtop_entry_e; 52ef270ab1SKenneth D. Merry 53ef270ab1SKenneth D. Merry typedef struct { 54ef270ab1SKenneth D. Merry ocs_hw_qtop_entry_e entry; 55ef270ab1SKenneth D. Merry uint8_t set_default; 56ef270ab1SKenneth D. Merry uint32_t len; 57ef270ab1SKenneth D. Merry uint8_t class; 58ef270ab1SKenneth D. Merry uint8_t ulp; 59ef270ab1SKenneth D. Merry uint8_t filter_mask; 60ef270ab1SKenneth D. Merry } ocs_hw_qtop_entry_t; 61ef270ab1SKenneth D. Merry 62ef270ab1SKenneth D. Merry typedef struct { 63ef270ab1SKenneth D. Merry struct rq_config { 64ef270ab1SKenneth D. Merry hw_eq_t *eq; 65ef270ab1SKenneth D. Merry uint32_t len; 66ef270ab1SKenneth D. Merry uint8_t class; 67ef270ab1SKenneth D. Merry uint8_t ulp; 68ef270ab1SKenneth D. Merry uint8_t filter_mask; 69ef270ab1SKenneth D. Merry } rq_cfg[16]; 70ef270ab1SKenneth D. Merry uint32_t num_pairs; 71ef270ab1SKenneth D. Merry } ocs_hw_mrq_t; 72ef270ab1SKenneth D. Merry 73ef270ab1SKenneth D. Merry 74ef270ab1SKenneth D. Merry #define MAX_TOKENS 256 75ef270ab1SKenneth D. Merry #define OCS_HW_MAX_QTOP_ENTRIES 200 76ef270ab1SKenneth D. Merry 77ef270ab1SKenneth D. Merry typedef struct { 78ef270ab1SKenneth D. Merry ocs_os_handle_t os; 79ef270ab1SKenneth D. Merry ocs_hw_qtop_entry_t *entries; 80ef270ab1SKenneth D. Merry uint32_t alloc_count; 81ef270ab1SKenneth D. Merry uint32_t inuse_count; 82ef270ab1SKenneth D. Merry uint32_t entry_counts[QTOP_LAST]; 83ef270ab1SKenneth D. Merry uint32_t rptcount[10]; 84ef270ab1SKenneth D. Merry uint32_t rptcount_idx; 85ef270ab1SKenneth D. Merry } ocs_hw_qtop_t; 86ef270ab1SKenneth D. Merry 87ef270ab1SKenneth D. Merry extern ocs_hw_qtop_t *ocs_hw_qtop_parse(ocs_hw_t *hw, const char *qtop_string); 88ef270ab1SKenneth D. Merry extern void ocs_hw_qtop_free(ocs_hw_qtop_t *qtop); 89ef270ab1SKenneth D. Merry extern const char *ocs_hw_qtop_entry_name(ocs_hw_qtop_entry_e entry); 90ef270ab1SKenneth D. Merry extern uint32_t ocs_hw_qtop_eq_count(ocs_hw_t *hw); 91ef270ab1SKenneth D. Merry 92ef270ab1SKenneth D. Merry extern ocs_hw_rtn_e ocs_hw_init_queues(ocs_hw_t *hw, ocs_hw_qtop_t *qtop); 93ef270ab1SKenneth D. Merry extern void hw_thread_eq_handler(ocs_hw_t *hw, hw_eq_t *eq, uint32_t max_isr_time_msec); 94ef270ab1SKenneth D. Merry extern void hw_thread_cq_handler(ocs_hw_t *hw, hw_cq_t *cq); 95ef270ab1SKenneth D. Merry extern hw_wq_t *ocs_hw_queue_next_wq(ocs_hw_t *hw, ocs_hw_io_t *io); 96ef270ab1SKenneth D. Merry 97ef270ab1SKenneth D. Merry #endif /* __OCS_HW_QUEUES_H__ */ 98