net/bnxt: register TruFlow flow API ops
[dpdk.git] / drivers / net / bnxt / bnxt_ethdev.c
index c4bbf1d..783e6a4 100644 (file)
@@ -904,6 +904,10 @@ static int bnxt_dev_start_op(struct rte_eth_dev *eth_dev)
        pthread_mutex_lock(&bp->def_cp_lock);
        bnxt_schedule_fw_health_check(bp);
        pthread_mutex_unlock(&bp->def_cp_lock);
+
+       if (bp->truflow)
+               bnxt_ulp_init(bp);
+
        return 0;
 
 error:
@@ -947,6 +951,9 @@ static void bnxt_dev_stop_op(struct rte_eth_dev *eth_dev)
        struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev);
        struct rte_intr_handle *intr_handle = &pci_dev->intr_handle;
 
+       if (bp->truflow)
+               bnxt_ulp_deinit(bp);
+
        eth_dev->data->dev_started = 0;
        /* Prevent crashes when queues are still in use */
        eth_dev->rx_pkt_burst = &bnxt_dummy_recv_pkts;
@@ -3281,6 +3288,7 @@ bnxt_filter_ctrl_op(struct rte_eth_dev *dev,
                    enum rte_filter_type filter_type,
                    enum rte_filter_op filter_op, void *arg)
 {
+       struct bnxt *bp = dev->data->dev_private;
        int ret = 0;
 
        ret = is_bnxt_in_error(dev->data->dev_private);
@@ -3304,7 +3312,10 @@ bnxt_filter_ctrl_op(struct rte_eth_dev *dev,
        case RTE_ETH_FILTER_GENERIC:
                if (filter_op != RTE_ETH_FILTER_GET)
                        return -EINVAL;
-               *(const void **)arg = &bnxt_flow_ops;
+               if (bp->truflow)
+                       *(const void **)arg = &bnxt_ulp_rte_flow_ops;
+               else
+                       *(const void **)arg = &bnxt_flow_ops;
                break;
        default:
                PMD_DRV_LOG(ERR,