Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause 2 : : * Copyright(C) 2021 Marvell. 3 : : */ 4 : : 5 : : #include "cn9k_ethdev.h" 6 : : #include "cn9k_rx.h" 7 : : 8 : : static __rte_used void 9 [ # # ]: 0 : pick_rx_func(struct rte_eth_dev *eth_dev, 10 : : const eth_rx_burst_t rx_burst[NIX_RX_OFFLOAD_MAX]) 11 : : { 12 : : struct cnxk_eth_dev *dev = cnxk_eth_pmd_priv(eth_dev); 13 : : 14 : : /* [TSP] [MARK] [VLAN] [CKSUM] [PTYPE] [RSS] */ 15 : 0 : eth_dev->rx_pkt_burst = 16 : 0 : rx_burst[dev->rx_offload_flags & (NIX_RX_OFFLOAD_MAX - 1)]; 17 : : 18 [ # # ]: 0 : if (eth_dev->data->dev_started) 19 : 0 : rte_eth_fp_ops[eth_dev->data->port_id].rx_pkt_burst = 20 : : eth_dev->rx_pkt_burst; 21 : : 22 : : rte_atomic_thread_fence(__ATOMIC_RELEASE); 23 : 0 : } 24 : : 25 : : void 26 : 0 : cn9k_eth_set_rx_function(struct rte_eth_dev *eth_dev) 27 : : { 28 : : #if defined(RTE_ARCH_ARM64) 29 : : struct cnxk_eth_dev *dev = cnxk_eth_pmd_priv(eth_dev); 30 : : 31 : : const eth_rx_burst_t nix_eth_rx_burst[NIX_RX_OFFLOAD_MAX] = { 32 : : #define R(name, flags)[flags] = cn9k_nix_recv_pkts_##name, 33 : : 34 : : NIX_RX_FASTPATH_MODES 35 : : #undef R 36 : : }; 37 : : 38 : : const eth_rx_burst_t nix_eth_rx_burst_mseg[NIX_RX_OFFLOAD_MAX] = { 39 : : #define R(name, flags)[flags] = cn9k_nix_recv_pkts_mseg_##name, 40 : : 41 : : NIX_RX_FASTPATH_MODES 42 : : #undef R 43 : : }; 44 : : 45 : : const eth_rx_burst_t nix_eth_rx_vec_burst[NIX_RX_OFFLOAD_MAX] = { 46 : : #define R(name, flags)[flags] = cn9k_nix_recv_pkts_vec_##name, 47 : : 48 : : NIX_RX_FASTPATH_MODES 49 : : #undef R 50 : : }; 51 : : 52 : : const eth_rx_burst_t nix_eth_rx_vec_burst_mseg[NIX_RX_OFFLOAD_MAX] = { 53 : : #define R(name, flags)[flags] = cn9k_nix_recv_pkts_vec_mseg_##name, 54 : : 55 : : NIX_RX_FASTPATH_MODES 56 : : #undef R 57 : : }; 58 : : 59 : : /* Copy multi seg version with no offload for tear down sequence */ 60 : : if (rte_eal_process_type() == RTE_PROC_PRIMARY) 61 : : dev->rx_pkt_burst_no_offload = nix_eth_rx_burst_mseg[0]; 62 : : 63 : : if (dev->scalar_ena) { 64 : : if (dev->rx_offloads & RTE_ETH_RX_OFFLOAD_SCATTER) 65 : : return pick_rx_func(eth_dev, nix_eth_rx_burst_mseg); 66 : : return pick_rx_func(eth_dev, nix_eth_rx_burst); 67 : : } 68 : : 69 : : if (dev->rx_offloads & RTE_ETH_RX_OFFLOAD_SCATTER) 70 : : return pick_rx_func(eth_dev, nix_eth_rx_vec_burst_mseg); 71 : : return pick_rx_func(eth_dev, nix_eth_rx_vec_burst); 72 : : #else 73 : : RTE_SET_USED(eth_dev); 74 : : #endif 75 : 0 : }