common/mlx5: fix default devargs initialization
[dpdk.git] / drivers / net / cnxk / cn10k_rx_select.c
index 5d9be0a..b906f67 100644 (file)
@@ -15,6 +15,10 @@ pick_rx_func(struct rte_eth_dev *eth_dev,
        eth_dev->rx_pkt_burst =
                rx_burst[dev->rx_offload_flags & (NIX_RX_OFFLOAD_MAX - 1)];
 
+       if (eth_dev->data->dev_started)
+               rte_eth_fp_ops[eth_dev->data->port_id].rx_pkt_burst =
+                       eth_dev->rx_pkt_burst;
+
        rte_atomic_thread_fence(__ATOMIC_RELEASE);
 }
 
@@ -37,6 +41,18 @@ cn10k_eth_set_rx_function(struct rte_eth_dev *eth_dev)
 #undef R
        };
 
+       const eth_rx_burst_t nix_eth_rx_burst_reas[NIX_RX_OFFLOAD_MAX] = {
+#define R(name, flags)[flags] = cn10k_nix_recv_pkts_reas_##name,
+               NIX_RX_FASTPATH_MODES
+#undef R
+       };
+
+       const eth_rx_burst_t nix_eth_rx_burst_mseg_reas[NIX_RX_OFFLOAD_MAX] = {
+#define R(name, flags)[flags] = cn10k_nix_recv_pkts_reas_mseg_##name,
+               NIX_RX_FASTPATH_MODES
+#undef R
+       };
+
        const eth_rx_burst_t nix_eth_rx_vec_burst[NIX_RX_OFFLOAD_MAX] = {
 #define R(name, flags)[flags] = cn10k_nix_recv_pkts_vec_##name,
 
@@ -51,17 +67,47 @@ cn10k_eth_set_rx_function(struct rte_eth_dev *eth_dev)
 #undef R
        };
 
+       const eth_rx_burst_t nix_eth_rx_vec_burst_reas[NIX_RX_OFFLOAD_MAX] = {
+#define R(name, flags)[flags] = cn10k_nix_recv_pkts_reas_vec_##name,
+               NIX_RX_FASTPATH_MODES
+#undef R
+       };
+
+       const eth_rx_burst_t nix_eth_rx_vec_burst_mseg_reas[NIX_RX_OFFLOAD_MAX] = {
+#define R(name, flags)[flags] = cn10k_nix_recv_pkts_reas_vec_mseg_##name,
+               NIX_RX_FASTPATH_MODES
+#undef R
+       };
+
        /* Copy multi seg version with no offload for tear down sequence */
        if (rte_eal_process_type() == RTE_PROC_PRIMARY)
                dev->rx_pkt_burst_no_offload = nix_eth_rx_burst_mseg[0];
 
        if (dev->scalar_ena) {
-               if (dev->rx_offloads & RTE_ETH_RX_OFFLOAD_SCATTER)
-                       return pick_rx_func(eth_dev, nix_eth_rx_burst_mseg);
-               return pick_rx_func(eth_dev, nix_eth_rx_burst);
+               if (dev->rx_offloads & RTE_ETH_RX_OFFLOAD_SCATTER) {
+                       if (dev->rx_offload_flags & NIX_RX_REAS_F)
+                               return pick_rx_func(eth_dev,
+                                               nix_eth_rx_burst_mseg_reas);
+                       else
+                               return pick_rx_func(eth_dev,
+                                               nix_eth_rx_burst_mseg);
+               }
+               if (dev->rx_offload_flags & NIX_RX_REAS_F)
+                       return pick_rx_func(eth_dev, nix_eth_rx_burst_reas);
+               else
+                       return pick_rx_func(eth_dev, nix_eth_rx_burst);
+       }
+
+       if (dev->rx_offloads & RTE_ETH_RX_OFFLOAD_SCATTER) {
+               if (dev->rx_offload_flags & NIX_RX_REAS_F)
+                       return pick_rx_func(eth_dev,
+                                       nix_eth_rx_vec_burst_mseg_reas);
+               else
+                       return pick_rx_func(eth_dev, nix_eth_rx_vec_burst_mseg);
        }
 
-       if (dev->rx_offloads & RTE_ETH_RX_OFFLOAD_SCATTER)
-               return pick_rx_func(eth_dev, nix_eth_rx_vec_burst_mseg);
-       return pick_rx_func(eth_dev, nix_eth_rx_vec_burst);
+       if (dev->rx_offload_flags & NIX_RX_REAS_F)
+               return pick_rx_func(eth_dev, nix_eth_rx_vec_burst_reas);
+       else
+               return pick_rx_func(eth_dev, nix_eth_rx_vec_burst);
 }