1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2014-2018 Broadcom 3 * All rights reserved. 4 */ 5 6 #ifndef _BNXT_RING_H_ 7 #define _BNXT_RING_H_ 8 9 #include <inttypes.h> 10 11 #include <rte_memory.h> 12 13 #define RING_NEXT(ring, idx) (((idx) + 1) & (ring)->ring_mask) 14 15 #define DB_IDX_MASK 0xffffff 16 #define DB_IDX_VALID (0x1 << 26) 17 #define DB_IRQ_DIS (0x1 << 27) 18 #define DB_KEY_TX (0x0 << 28) 19 #define DB_KEY_RX (0x1 << 28) 20 #define DB_KEY_CP (0x2 << 28) 21 #define DB_KEY_ST (0x3 << 28) 22 #define DB_KEY_TX_PUSH (0x4 << 28) 23 #define DB_LONG_TX_PUSH (0x2 << 24) 24 25 #define DEFAULT_CP_RING_SIZE 256 26 #define DEFAULT_RX_RING_SIZE 256 27 #define DEFAULT_TX_RING_SIZE 256 28 29 #define BNXT_TPA_MAX 64 30 #define AGG_RING_SIZE_FACTOR 2 31 #define AGG_RING_MULTIPLIER 2 32 33 /* These assume 4k pages */ 34 #define MAX_RX_DESC_CNT (8 * 1024) 35 #define MAX_TX_DESC_CNT (4 * 1024) 36 #define MAX_CP_DESC_CNT (16 * 1024) 37 38 #define INVALID_HW_RING_ID ((uint16_t)-1) 39 #define INVALID_STATS_CTX_ID ((uint16_t)-1) 40 41 struct bnxt_ring { 42 void *bd; 43 rte_iova_t bd_dma; 44 uint32_t ring_size; 45 uint32_t ring_mask; 46 47 int vmem_size; 48 void **vmem; 49 50 uint16_t fw_ring_id; /* Ring id filled by Chimp FW */ 51 const void *mem_zone; 52 }; 53 54 struct bnxt_ring_grp_info { 55 uint16_t fw_stats_ctx; 56 uint16_t fw_grp_id; 57 uint16_t rx_fw_ring_id; 58 uint16_t cp_fw_ring_id; 59 uint16_t ag_fw_ring_id; 60 }; 61 62 struct bnxt; 63 struct bnxt_tx_ring_info; 64 struct bnxt_rx_ring_info; 65 struct bnxt_cp_ring_info; 66 void bnxt_free_ring(struct bnxt_ring *ring); 67 int bnxt_init_ring_grps(struct bnxt *bp); 68 int bnxt_alloc_rings(struct bnxt *bp, uint16_t qidx, 69 struct bnxt_tx_queue *txq, 70 struct bnxt_rx_queue *rxq, 71 struct bnxt_cp_ring_info *cp_ring_info, 72 const char *suffix); 73 int bnxt_alloc_hwrm_rx_ring(struct bnxt *bp, int queue_index); 74 int bnxt_alloc_hwrm_rings(struct bnxt *bp); 75 76 #endif 77