net/bnxt: consolidate template table processing
[dpdk.git] / drivers / net / bnxt / bnxt_ethdev.c
index 1bb0aa8..b4654ec 100644 (file)
@@ -920,7 +920,9 @@ static int bnxt_dev_info_get_op(struct rte_eth_dev *eth_dev,
        dev_info->rx_offload_capa = BNXT_DEV_RX_OFFLOAD_SUPPORT;
        if (bp->flags & BNXT_FLAG_PTP_SUPPORTED)
                dev_info->rx_offload_capa |= DEV_RX_OFFLOAD_TIMESTAMP;
-       dev_info->tx_offload_capa = BNXT_DEV_TX_OFFLOAD_SUPPORT;
+       dev_info->tx_queue_offload_capa = DEV_TX_OFFLOAD_MBUF_FAST_FREE;
+       dev_info->tx_offload_capa = BNXT_DEV_TX_OFFLOAD_SUPPORT |
+                                   dev_info->tx_queue_offload_capa;
        dev_info->flow_type_rss_offloads = BNXT_ETH_RSS_SUPPORT;
 
        dev_info->speed_capa = bnxt_get_speed_capabilities(bp);
@@ -1191,6 +1193,7 @@ bnxt_transmit_function(__rte_unused struct rte_eth_dev *eth_dev)
 {
 #if defined(RTE_ARCH_X86) || defined(RTE_ARCH_ARM64)
 #ifndef RTE_LIBRTE_IEEE1588
+       uint64_t offloads = eth_dev->data->dev_conf.txmode.offloads;
        struct bnxt *bp = eth_dev->data->dev_private;
 
        /*
@@ -1198,7 +1201,7 @@ bnxt_transmit_function(__rte_unused struct rte_eth_dev *eth_dev)
         * or tx offloads.
         */
        if (!eth_dev->data->scattered_rx &&
-           !eth_dev->data->dev_conf.txmode.offloads &&
+           !(offloads & ~DEV_TX_OFFLOAD_MBUF_FAST_FREE) &&
            !BNXT_TRUFLOW_EN(bp)) {
                PMD_DRV_LOG(INFO, "Using vector mode transmit for port %d\n",
                            eth_dev->data->port_id);
@@ -1210,7 +1213,7 @@ bnxt_transmit_function(__rte_unused struct rte_eth_dev *eth_dev)
                    "Port %d scatter: %d tx offload: %" PRIX64 "\n",
                    eth_dev->data->port_id,
                    eth_dev->data->scattered_rx,
-                   eth_dev->data->dev_conf.txmode.offloads);
+                   offloads);
 #endif
 #endif
        return bnxt_xmit_pkts;
@@ -2685,7 +2688,7 @@ bnxt_txq_info_get_op(struct rte_eth_dev *dev, uint16_t queue_id,
        qinfo->conf.tx_free_thresh = txq->tx_free_thresh;
        qinfo->conf.tx_rs_thresh = 0;
        qinfo->conf.tx_deferred_start = txq->tx_deferred_start;
-       qinfo->conf.offloads = dev->data->dev_conf.txmode.offloads;
+       qinfo->conf.offloads = txq->offloads;
 }
 
 static const struct {
@@ -5205,37 +5208,14 @@ static void bnxt_config_vf_req_fwd(struct bnxt *bp)
        if (!BNXT_PF(bp))
                return;
 
-#define ALLOW_FUNC(x)  \
-       { \
-               uint32_t arg = (x); \
-               bp->pf->vf_req_fwd[((arg) >> 5)] &= \
-               ~rte_cpu_to_le_32(1 << ((arg) & 0x1f)); \
-       }
-
-       /* Forward all requests if firmware is new enough */
-       if (((bp->fw_ver >= ((20 << 24) | (6 << 16) | (100 << 8))) &&
-            (bp->fw_ver < ((20 << 24) | (7 << 16)))) ||
-           ((bp->fw_ver >= ((20 << 24) | (8 << 16))))) {
-               memset(bp->pf->vf_req_fwd, 0xff, sizeof(bp->pf->vf_req_fwd));
-       } else {
-               PMD_DRV_LOG(WARNING,
-                           "Firmware too old for VF mailbox functionality\n");
-               memset(bp->pf->vf_req_fwd, 0, sizeof(bp->pf->vf_req_fwd));
-       }
+       memset(bp->pf->vf_req_fwd, 0, sizeof(bp->pf->vf_req_fwd));
 
-       /*
-        * The following are used for driver cleanup. If we disallow these,
-        * VF drivers can't clean up cleanly.
-        */
-       ALLOW_FUNC(HWRM_FUNC_DRV_UNRGTR);
-       ALLOW_FUNC(HWRM_VNIC_FREE);
-       ALLOW_FUNC(HWRM_RING_FREE);
-       ALLOW_FUNC(HWRM_RING_GRP_FREE);
-       ALLOW_FUNC(HWRM_VNIC_RSS_COS_LB_CTX_FREE);
-       ALLOW_FUNC(HWRM_CFA_L2_FILTER_FREE);
-       ALLOW_FUNC(HWRM_STAT_CTX_FREE);
-       ALLOW_FUNC(HWRM_PORT_PHY_QCFG);
-       ALLOW_FUNC(HWRM_VNIC_TPA_CFG);
+       if (!(bp->fw_cap & BNXT_FW_CAP_LINK_ADMIN))
+               BNXT_HWRM_CMD_TO_FORWARD(HWRM_PORT_PHY_QCFG);
+       BNXT_HWRM_CMD_TO_FORWARD(HWRM_FUNC_CFG);
+       BNXT_HWRM_CMD_TO_FORWARD(HWRM_FUNC_VF_CFG);
+       BNXT_HWRM_CMD_TO_FORWARD(HWRM_CFA_L2_FILTER_ALLOC);
+       BNXT_HWRM_CMD_TO_FORWARD(HWRM_OEM_CMD);
 }
 
 uint16_t
@@ -6186,7 +6166,10 @@ bnxt_uninit_resources(struct bnxt *bp, bool reconfig_dev)
 
        bnxt_free_int(bp);
        bnxt_free_mem(bp, reconfig_dev);
+
        bnxt_hwrm_func_buf_unrgtr(bp);
+       rte_free(bp->pf->vf_req_buf);
+
        rc = bnxt_hwrm_func_driver_unregister(bp, 0);
        bp->flags &= ~BNXT_FLAG_REGISTERED;
        bnxt_free_ctx_mem(bp);