On Tue, Mar 3, 2026 at 12:41 PM Mohammad Shuab Siddique <[email protected]> wrote: > > From: Mohammad Shuab Siddique <[email protected]> > > Add multi-doorbell support to spread doorbell accesses across > multiple doorbell pages for improved performance on P5/P7 chips. > > Detect capability via HWRM_FUNC_QCAPS > Round-robin DPI assignment for NQ rings per device > TX rings inherit DPI from parent NQ > RX/CQ rings use privileged DPI 0 > P7: DPI 0=legacy, DPI 1=push, DPI 2+ for multi-DB > P5: DPI 0=legacy, DPI 1+ for multi-DB > > Cc: [email protected] > > Signed-off-by: Mohammad Shuab Siddique <[email protected]> Acked-by: Kishore Padmanabha <[email protected]> > --- > drivers/net/bnxt/bnxt.h | 13 +++++ > drivers/net/bnxt/bnxt_cpr.h | 1 + > drivers/net/bnxt/bnxt_hwrm.c | 51 +++++++++++++++++-- > drivers/net/bnxt/bnxt_hwrm.h | 2 +- > drivers/net/bnxt/bnxt_mpc.c | 4 +- > drivers/net/bnxt/bnxt_ring.c | 70 ++++++++++++++++++-------- > drivers/net/bnxt/bnxt_ring.h | 3 +- > drivers/net/bnxt/bnxt_rxr.h | 1 + > drivers/net/bnxt/bnxt_txr.h | 1 + > drivers/net/bnxt/hsi_struct_def_dpdk.h | 30 +++++++++++ > 10 files changed, 147 insertions(+), 29 deletions(-) > > diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h > index 83ae151066..30baabcf92 100644 > --- a/drivers/net/bnxt/bnxt.h > +++ b/drivers/net/bnxt/bnxt.h > @@ -433,6 +433,13 @@ struct bnxt_coal { > #define DB_PF_OFFSET 0x10000 > #define DB_VF_OFFSET 0x4000 > > +#define BNXT_PRIVILEGED_DPI 0 > +#define BNXT_RESERVED_DPI_ONE 1 > +#define BNXT_RESERVED_DPI_TWO 2 > +#define BNXT_DEFAULT_DB_PAGE_SIZE 4096 > + > +#define BNXT_KB_TO_BYTES(kb) ((kb) * 1024) > + > #define BNXT_RSS_TBL_SIZE_P5 512U > #define BNXT_RSS_ENTRIES_PER_CTX_P5 64 > #define BNXT_MAX_RSS_CTXTS_P5 \ > @@ -873,6 +880,7 @@ struct bnxt { > #define BNXT_FW_CAP_RX_ALL_PKT_TS BIT(11) > #define BNXT_FW_CAP_BACKING_STORE_V2 BIT(12) > #define BNXT_FW_CAP_RX_RATE_PROFILE BIT(17) > +#define BNXT_FW_CAP_MULTI_DB BIT(18) > #define BNXT_FW_BACKING_STORE_V2_EN(bp) \ > ((bp)->fw_cap & BNXT_FW_CAP_BACKING_STORE_V2) > #define BNXT_FW_BACKING_STORE_V1_EN(bp) \ > @@ -1079,6 +1087,11 @@ struct bnxt { > struct rte_eth_rss_conf rss_conf; /* RSS configuration. */ > uint16_t tunnel_disable_flag; /* tunnel stateless > offloads status */ > uint8_t chip_rev; > + uint16_t l2_db_multi_page_size_kb; /* Multi-L2 > DB BAR size in KB */ > + uint16_t db_page_size; /* DB page > size (typically 4KB) */ > + uint8_t nq_dpi_start; /* Starting > DPI for NQ rings */ > + uint8_t nq_dpi_count; /* Number of > DPI pages for NQ */ > + uint8_t nq_dpi_counter; /* > Round-robin counter for NQ DPI */ > }; > > static > diff --git a/drivers/net/bnxt/bnxt_cpr.h b/drivers/net/bnxt/bnxt_cpr.h > index 94f449e8b5..858ee15c47 100644 > --- a/drivers/net/bnxt/bnxt_cpr.h > +++ b/drivers/net/bnxt/bnxt_cpr.h > @@ -89,6 +89,7 @@ struct bnxt_cp_ring_info { > struct bnxt_ring *cp_ring_struct; > bool valid; > uint32_t epoch; > + uint8_t dpi; > }; > > #define RX_CMP_L2_ERRORS \ > diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c > index 0cef22b5ec..7c58727e59 100644 > --- a/drivers/net/bnxt/bnxt_hwrm.c > +++ b/drivers/net/bnxt/bnxt_hwrm.c > @@ -1254,6 +1254,9 @@ static int __bnxt_hwrm_func_qcaps(struct bnxt *bp) > if (flags_ext3 & > HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT3_RX_RATE_PROFILE_SEL_SUPPORTED) > bp->fw_cap |= BNXT_FW_CAP_RX_RATE_PROFILE; > > + if (flags_ext3 & > HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT3_MULTI_L2_DB_SUPPORTED) > + bp->fw_cap |= BNXT_FW_CAP_MULTI_DB; > + > /* This block should be kept at the end of this function because it > * sends another hwrm msg. > */ > @@ -2176,7 +2179,7 @@ int bnxt_hwrm_ring_alloc(struct bnxt *bp, > struct bnxt_ring *ring, > uint32_t ring_type, uint32_t map_index, > uint32_t stats_ctx_id, uint32_t cmpl_ring_id, > - uint16_t tx_cosq_id) > + uint16_t tx_cosq_id, uint16_t dpi) > { > int rc = 0; > uint32_t enables = 0; > @@ -2280,6 +2283,11 @@ int bnxt_hwrm_ring_alloc(struct bnxt *bp, > HWRM_UNLOCK(); > return -EINVAL; > } > + > + if (bp->fw_cap & BNXT_FW_CAP_MULTI_DB) { > + req.dpi = rte_cpu_to_le_16(dpi); > + enables |= HWRM_RING_ALLOC_INPUT_ENABLES_DPI_VALID; > + } > req.enables = rte_cpu_to_le_32(enables); > > rc = bnxt_hwrm_send_message(bp, &req, sizeof(req), BNXT_USE_CHIMP_MB); > @@ -4195,12 +4203,15 @@ int bnxt_set_hwrm_link_config(struct bnxt *bp, bool > link_up) > > int bnxt_hwrm_func_qcfg(struct bnxt *bp, uint16_t *mtu) > { > - struct hwrm_func_qcfg_input req = {0}; > struct hwrm_func_qcfg_output *resp = bp->hwrm_cmd_resp_addr; > + struct hwrm_func_qcfg_input req = {0}; > + uint16_t l2_db_multi_kb; > + uint16_t total_pages; > + uint16_t svif_info; > uint16_t flags; > int rc = 0; > + > bp->func_svif = BNXT_SVIF_INVALID; > - uint16_t svif_info; > > HWRM_PREP(&req, HWRM_FUNC_QCFG, BNXT_USE_CHIMP_MB); > req.fid = rte_cpu_to_le_16(0xffff); > @@ -4246,9 +4257,39 @@ int bnxt_hwrm_func_qcfg(struct bnxt *bp, uint16_t *mtu) > bp->flags &= ~BNXT_FLAG_NPAR_PF; > break; > } > - > bp->legacy_db_size = > - rte_le_to_cpu_16(resp->legacy_l2_db_size_kb) * 1024; > + > BNXT_KB_TO_BYTES(rte_le_to_cpu_16(resp->legacy_l2_db_size_kb)); > + > + /* Configure multi-doorbell if supported */ > + if (bp->fw_cap & BNXT_FW_CAP_MULTI_DB) { > + l2_db_multi_kb = > rte_le_to_cpu_16(resp->l2_db_multi_page_size_kb); > + bp->l2_db_multi_page_size_kb = l2_db_multi_kb ? > l2_db_multi_kb : > + rte_le_to_cpu_16(resp->l2_doorbell_bar_size_kb); > + > + if (bp->l2_db_multi_page_size_kb > 0) { > + bp->db_page_size = BNXT_DEFAULT_DB_PAGE_SIZE; > + total_pages = > BNXT_KB_TO_BYTES(bp->l2_db_multi_page_size_kb) / > + bp->db_page_size; > + > + /* P7: DPI 0=legacy, DPI 1=push reserved; P5: DPI > 0=legacy */ > + bp->nq_dpi_start = BNXT_CHIP_P7(bp) ? > + BNXT_RESERVED_DPI_TWO : BNXT_RESERVED_DPI_ONE; > + bp->nq_dpi_count = (total_pages > bp->nq_dpi_start) ? > + (total_pages - bp->nq_dpi_start) : 0; > + bp->nq_dpi_counter = 0; > + PMD_DRV_LOG_LINE(INFO, > + "Multi-doorbell: %u KB, " > + "DPI range %u-%u (%u pages)", > + bp->l2_db_multi_page_size_kb, > + bp->nq_dpi_start, > + bp->nq_dpi_start + bp->nq_dpi_count - > 1, > + bp->nq_dpi_count); > + } else { > + PMD_DRV_LOG_LINE(INFO, > + "Multi-doorbell supported " > + "but no pages allocated"); > + } > + } > > HWRM_UNLOCK(); > > diff --git a/drivers/net/bnxt/bnxt_hwrm.h b/drivers/net/bnxt/bnxt_hwrm.h > index ecb6335b3d..fc56223ab4 100644 > --- a/drivers/net/bnxt/bnxt_hwrm.h > +++ b/drivers/net/bnxt/bnxt_hwrm.h > @@ -221,7 +221,7 @@ int bnxt_hwrm_ring_alloc(struct bnxt *bp, > struct bnxt_ring *ring, > uint32_t ring_type, uint32_t map_index, > uint32_t stats_ctx_id, uint32_t cmpl_ring_id, > - uint16_t tx_cosq_id); > + uint16_t tx_cosq_id, uint16_t dpi); > int bnxt_hwrm_ring_free(struct bnxt *bp, > struct bnxt_ring *ring, uint32_t ring_type, > uint16_t cp_ring_id); > diff --git a/drivers/net/bnxt/bnxt_mpc.c b/drivers/net/bnxt/bnxt_mpc.c > index 259066fa61..d77f9dd308 100644 > --- a/drivers/net/bnxt/bnxt_mpc.c > +++ b/drivers/net/bnxt/bnxt_mpc.c > @@ -502,7 +502,7 @@ static int bnxt_mpc_ring_alloc_one(struct bnxt *bp, enum > bnxt_mpc_chnl chnl_id) > map_index, > cpr->hw_stats_ctx_id, > cp_ring->fw_ring_id, > - MPC_HW_COS_ID); > + MPC_HW_COS_ID, BNXT_PRIVILEGED_DPI); > if (rc) { > PMD_DRV_LOG_LINE(ERR, "mpc ring %d tx ring alloc failed > rc:%d!", > chnl_id, rc); > @@ -510,7 +510,7 @@ static int bnxt_mpc_ring_alloc_one(struct bnxt *bp, enum > bnxt_mpc_chnl chnl_id) > } > > bnxt_set_db(bp, &mpr->db, HWRM_RING_ALLOC_INPUT_RING_TYPE_TX, chnl_id, > - ring->fw_ring_id, ring->ring_mask); > + ring->fw_ring_id, ring->ring_mask, BNXT_PRIVILEGED_DPI); > > bnxt_hwrm_set_ring_coal(bp, &coal, cp_ring->fw_ring_id); > > diff --git a/drivers/net/bnxt/bnxt_ring.c b/drivers/net/bnxt/bnxt_ring.c > index b6d411a931..ccca779b97 100644 > --- a/drivers/net/bnxt/bnxt_ring.c > +++ b/drivers/net/bnxt/bnxt_ring.c > @@ -353,8 +353,11 @@ void bnxt_set_db(struct bnxt *bp, > uint32_t ring_type, > uint32_t map_idx, > uint32_t fid, > - uint32_t ring_mask) > + uint32_t ring_mask, > + uint16_t dpi) > { > + uint64_t dpi_offset; > + > if (BNXT_CHIP_P5_P7(bp)) { > int db_offset = DB_PF_OFFSET; > switch (ring_type) { > @@ -379,8 +382,14 @@ void bnxt_set_db(struct bnxt *bp, > } else if (BNXT_VF(bp)) { > db_offset = DB_VF_OFFSET; > } > - > db->doorbell = (char *)bp->doorbell_base + db_offset; > + > + if (bp->fw_cap & BNXT_FW_CAP_MULTI_DB && > + dpi != BNXT_PRIVILEGED_DPI) { > + dpi_offset = (dpi - bp->nq_dpi_start) * > + bp->db_page_size; > + db->doorbell = (char *)db->doorbell + dpi_offset; > + } > db->db_key64 |= (uint64_t)fid << DBR_XID_SFT; > db->db_64 = true; > } else { > @@ -404,32 +413,33 @@ void bnxt_set_db(struct bnxt *bp, > int bnxt_alloc_cmpl_ring(struct bnxt *bp, int queue_index, > struct bnxt_cp_ring_info *cpr) > { > - struct bnxt_ring *cp_ring = cpr->cp_ring_struct; > - uint32_t nq_ring_id = HWRM_NA_SIGNATURE; > int cp_ring_index = queue_index + BNXT_RX_VEC_START; > struct bnxt_cp_ring_info *nqr = bp->rxtx_nq_ring; > + struct bnxt_ring *cp_ring = cpr->cp_ring_struct; > + uint32_t nq_ring_id = HWRM_NA_SIGNATURE; > + uint8_t dpi = BNXT_PRIVILEGED_DPI; > uint8_t ring_type; > int rc = 0; > > ring_type = HWRM_RING_ALLOC_INPUT_RING_TYPE_L2_CMPL; > > if (BNXT_HAS_NQ(bp)) { > - if (nqr) { > - nq_ring_id = nqr->cp_ring_struct->fw_ring_id; > - } else { > + if (!nqr) { > PMD_DRV_LOG_LINE(ERR, "NQ ring is NULL"); > return -EINVAL; > } > + nq_ring_id = nqr->cp_ring_struct->fw_ring_id; > } > > + cpr->dpi = dpi; > rc = bnxt_hwrm_ring_alloc(bp, cp_ring, ring_type, cp_ring_index, > - HWRM_NA_SIGNATURE, nq_ring_id, 0); > + HWRM_NA_SIGNATURE, nq_ring_id, 0, dpi); > if (rc) > return rc; > > cpr->cp_raw_cons = 0; > bnxt_set_db(bp, &cpr->cp_db, ring_type, cp_ring_index, > - cp_ring->fw_ring_id, cp_ring->ring_mask); > + cp_ring->fw_ring_id, cp_ring->ring_mask, dpi); > bnxt_db_cq(cpr); > > return 0; > @@ -437,10 +447,12 @@ int bnxt_alloc_cmpl_ring(struct bnxt *bp, int > queue_index, > > int bnxt_alloc_rxtx_nq_ring(struct bnxt *bp) > { > + int ring_index = BNXT_NUM_ASYNC_CPR(bp); > + uint8_t dpi = BNXT_PRIVILEGED_DPI; > struct bnxt_cp_ring_info *nqr; > struct bnxt_ring *ring; > - int ring_index = BNXT_NUM_ASYNC_CPR(bp); > uint8_t ring_type; > + uint8_t offset; > int rc = 0; > > if (!BNXT_HAS_NQ(bp) || bp->rxtx_nq_ring) > @@ -481,8 +493,18 @@ int bnxt_alloc_rxtx_nq_ring(struct bnxt *bp) > > ring_type = HWRM_RING_ALLOC_INPUT_RING_TYPE_NQ; > > + /* Assign DPI using round-robin if multi-doorbell is enabled */ > + if (bp->fw_cap & BNXT_FW_CAP_MULTI_DB && bp->nq_dpi_count > 0) { > + offset = bp->nq_dpi_counter % bp->nq_dpi_count; > + dpi = bp->nq_dpi_start + offset; > + bp->nq_dpi_counter++; > + PMD_DRV_LOG_LINE(DEBUG, "NQ ring assigned DPI %u", dpi); > + } > + > + nqr->dpi = dpi; > + > rc = bnxt_hwrm_ring_alloc(bp, ring, ring_type, ring_index, > - HWRM_NA_SIGNATURE, HWRM_NA_SIGNATURE, 0); > + HWRM_NA_SIGNATURE, HWRM_NA_SIGNATURE, 0, > dpi); > if (rc) { > rte_free(ring); > rte_free(nqr); > @@ -490,7 +512,7 @@ int bnxt_alloc_rxtx_nq_ring(struct bnxt *bp) > } > > bnxt_set_db(bp, &nqr->cp_db, ring_type, ring_index, > - ring->fw_ring_id, ring->ring_mask); > + ring->fw_ring_id, ring->ring_mask, dpi); > bnxt_db_nq(nqr); > > bp->rxtx_nq_ring = nqr; > @@ -523,13 +545,16 @@ static int bnxt_alloc_rx_ring(struct bnxt *bp, int > queue_index) > struct bnxt_rx_ring_info *rxr = rxq->rx_ring; > struct bnxt_ring *ring = rxr->rx_ring_struct; > uint8_t ring_type; > + uint16_t dpi; > int rc = 0; > > ring_type = HWRM_RING_ALLOC_INPUT_RING_TYPE_RX; > + dpi = BNXT_PRIVILEGED_DPI; > + rxr->dpi = dpi; > > rc = bnxt_hwrm_ring_alloc(bp, ring, ring_type, > queue_index, cpr->hw_stats_ctx_id, > - cp_ring->fw_ring_id, 0); > + cp_ring->fw_ring_id, 0, dpi); > if (rc) > return rc; > > @@ -537,7 +562,7 @@ static int bnxt_alloc_rx_ring(struct bnxt *bp, int > queue_index) > if (BNXT_HAS_RING_GRPS(bp)) > bp->grp_info[queue_index].rx_fw_ring_id = ring->fw_ring_id; > bnxt_set_db(bp, &rxr->rx_db, ring_type, queue_index, ring->fw_ring_id, > - ring->ring_mask); > + ring->ring_mask, dpi); > bnxt_db_write(&rxr->rx_db, rxr->rx_raw_prod); > > return 0; > @@ -568,7 +593,8 @@ static int bnxt_alloc_rx_agg_ring(struct bnxt *bp, int > queue_index) > } > > rc = bnxt_hwrm_ring_alloc(bp, ring, ring_type, map_idx, > - hw_stats_ctx_id, cp_ring->fw_ring_id, 0); > + hw_stats_ctx_id, cp_ring->fw_ring_id, 0, > + BNXT_PRIVILEGED_DPI); > > if (rc) > return rc; > @@ -578,7 +604,7 @@ static int bnxt_alloc_rx_agg_ring(struct bnxt *bp, int > queue_index) > if (BNXT_HAS_RING_GRPS(bp)) > bp->grp_info[queue_index].ag_fw_ring_id = ring->fw_ring_id; > bnxt_set_db(bp, &rxr->ag_db, ring_type, map_idx, ring->fw_ring_id, > - ring->ring_mask); > + ring->ring_mask, BNXT_PRIVILEGED_DPI); > bnxt_db_write(&rxr->ag_db, rxr->ag_raw_prod); > > return 0; > @@ -796,14 +822,16 @@ int bnxt_alloc_async_cp_ring(struct bnxt *bp) > ring_type = HWRM_RING_ALLOC_INPUT_RING_TYPE_L2_CMPL; > > rc = bnxt_hwrm_ring_alloc(bp, cp_ring, ring_type, 0, > - HWRM_NA_SIGNATURE, HWRM_NA_SIGNATURE, 0); > + HWRM_NA_SIGNATURE, HWRM_NA_SIGNATURE, 0, > + BNXT_PRIVILEGED_DPI); > > if (rc) > return rc; > > cpr->cp_raw_cons = 0; > + cpr->dpi = BNXT_PRIVILEGED_DPI; > bnxt_set_db(bp, &cpr->cp_db, ring_type, 0, > - cp_ring->fw_ring_id, cp_ring->ring_mask); > + cp_ring->fw_ring_id, cp_ring->ring_mask, > BNXT_PRIVILEGED_DPI); > > if (BNXT_HAS_NQ(bp)) > bnxt_db_nq(cpr); > @@ -900,17 +928,19 @@ int bnxt_alloc_hwrm_tx_ring(struct bnxt *bp, int > queue_index) > else > tx_cosq_id = bp->tx_cosq_id[0]; > > + /* TX ring inherits DPI from parent NQ */ > + txr->dpi = bp->rxtx_nq_ring ? bp->rxtx_nq_ring->dpi : > BNXT_PRIVILEGED_DPI; > rc = bnxt_hwrm_ring_alloc(bp, ring, > HWRM_RING_ALLOC_INPUT_RING_TYPE_TX, > queue_index, cpr->hw_stats_ctx_id, > cp_ring->fw_ring_id, > - tx_cosq_id); > + tx_cosq_id, txr->dpi); > if (rc) > goto err_out; > > bnxt_set_db(bp, &txr->tx_db, HWRM_RING_ALLOC_INPUT_RING_TYPE_TX, > queue_index, ring->fw_ring_id, > - ring->ring_mask); > + ring->ring_mask, txr->dpi); > txq->index = idx; > > return rc; > diff --git a/drivers/net/bnxt/bnxt_ring.h b/drivers/net/bnxt/bnxt_ring.h > index 3e2bd634a8..496c3e111f 100644 > --- a/drivers/net/bnxt/bnxt_ring.h > +++ b/drivers/net/bnxt/bnxt_ring.h > @@ -89,7 +89,8 @@ void bnxt_set_db(struct bnxt *bp, > uint32_t ring_type, > uint32_t map_idx, > uint32_t fid, > - uint32_t ring_mask); > + uint32_t ring_mask, > + uint16_t dpi); > > static inline void bnxt_db_write(struct bnxt_db_info *db, uint32_t idx) > { > diff --git a/drivers/net/bnxt/bnxt_rxr.h b/drivers/net/bnxt/bnxt_rxr.h > index 7357ca4427..82d6b86fa5 100644 > --- a/drivers/net/bnxt/bnxt_rxr.h > +++ b/drivers/net/bnxt/bnxt_rxr.h > @@ -142,6 +142,7 @@ struct bnxt_rx_ring_info { > > uint32_t ol_flags_table[BNXT_OL_FLAGS_TBL_DIM]; > uint32_t ol_flags_err_table[BNXT_OL_FLAGS_ERR_TBL_DIM]; > + uint8_t dpi; /* Doorbell page index for > multi-doorbell support */ > }; > > uint16_t bnxt_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, > diff --git a/drivers/net/bnxt/bnxt_txr.h b/drivers/net/bnxt/bnxt_txr.h > index 09078d545d..fd92a242c3 100644 > --- a/drivers/net/bnxt/bnxt_txr.h > +++ b/drivers/net/bnxt/bnxt_txr.h > @@ -26,6 +26,7 @@ struct bnxt_tx_ring_info { > > unsigned short *nr_bds; > struct bnxt_ring *tx_ring_struct; > + uint8_t dpi; /* Doorbell page index for > multi-doorbell support */ > }; > > static inline uint32_t bnxt_tx_bds_in_hw(struct bnxt_tx_queue *txq) > diff --git a/drivers/net/bnxt/hsi_struct_def_dpdk.h > b/drivers/net/bnxt/hsi_struct_def_dpdk.h > index 06c61cba8f..26d5e9ca78 100644 > --- a/drivers/net/bnxt/hsi_struct_def_dpdk.h > +++ b/drivers/net/bnxt/hsi_struct_def_dpdk.h > @@ -15744,6 +15744,15 @@ struct __rte_packed_begin hwrm_func_qcaps_output { > */ > #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT3_MIRROR_ON_ROCE_SUPPORTED \ > UINT32_C(0x20) > + /* > + * When this bit is '1', it indicates that, when rx/tx/cq/nq l2 > + * rings are allocated, each ring can be associated with a > + * non-common doorbell page index. When '0', a common doorbell > + * page is used for all rings on a PF. This bit is only set on a > + * PF. > + */ > + #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT3_MULTI_L2_DB_SUPPORTED \ > + UINT32_C(0x200) > /* > * The number of VFs that can be used for RoCE on the function. If > less > * than max_vfs, roce vfs will be assigned to the first VF of the > @@ -16268,6 +16277,12 @@ struct __rte_packed_begin hwrm_func_qcfg_output { > * of the doorbell BAR between L2 and RoCE is required. > */ > uint16_t l2_doorbell_bar_size_kb; > + /* > + * The size of the doorbell BAR in KBytes reserved for multi-L2 > + * doorbell pages. This area is a subset of l2_doorbell_bar_size_kb, > + * which is size of the total doorbell BAR space reserved for L2. > + */ > + uint16_t l2_db_multi_page_size_kb; > /* > * A bitmask indicating the active endpoints. Each bit represents a > * specific endpoint, with bit 0 indicating EP 0 and bit 3 indicating > @@ -45464,6 +45479,13 @@ struct __rte_packed_begin hwrm_ring_alloc_input { > */ > #define HWRM_RING_ALLOC_INPUT_ENABLES_RX_RATE_PROFILE_VALID \ > UINT32_C(0x1000) > + /* > + * This bit must be '1' for the dpi field to be configured. > + * This should only be used when 'multi_l2_db_supported' > + * bit is set in flags_ext3 field of FUNC_QCAPS response. > + */ > + #define HWRM_RING_ALLOC_INPUT_ENABLES_DPI_VALID \ > + UINT32_C(0x2000) > /* Ring Type. */ > uint8_t ring_type; > /* L2 Completion Ring (CR) */ > @@ -45831,6 +45853,14 @@ struct __rte_packed_begin hwrm_ring_alloc_input { > * record. > */ > uint64_t cq_handle; > + /* > + * The "doorbell page index" is specified when allocating a l2 ring. > + * It is applicable for rx/tx/completion/nq rings, and should only be > + * used when 'multi_l2_db_supported' bit is set in flags_ext3 field of > + * FUNC_QCAPS response. > + */ > + uint16_t dpi; > + uint16_t unused_5[3]; > } __rte_packed_end; > > /* hwrm_ring_alloc_output (size:128b/16B) */ > -- > 2.47.3 >
smime.p7s
Description: S/MIME Cryptographic Signature

