* Initializes Receive Unit. */
| 2824 | * Initializes Receive Unit. |
| 2825 | */ |
| 2826 | int |
| 2827 | ngbe_dev_rx_init(struct rte_eth_dev *dev) |
| 2828 | { |
| 2829 | struct ngbe_hw *hw; |
| 2830 | struct ngbe_rx_queue *rxq; |
| 2831 | uint64_t bus_addr; |
| 2832 | uint32_t fctrl; |
| 2833 | uint32_t hlreg0; |
| 2834 | uint32_t srrctl; |
| 2835 | uint32_t rdrxctl; |
| 2836 | uint32_t rxcsum; |
| 2837 | uint16_t buf_size; |
| 2838 | uint16_t i; |
| 2839 | struct rte_eth_rxmode *rx_conf = &dev->data->dev_conf.rxmode; |
| 2840 | |
| 2841 | PMD_INIT_FUNC_TRACE(); |
| 2842 | hw = ngbe_dev_hw(dev); |
| 2843 | |
| 2844 | /* |
| 2845 | * Make sure receives are disabled while setting |
| 2846 | * up the Rx context (registers, descriptor rings, etc.). |
| 2847 | */ |
| 2848 | wr32m(hw, NGBE_MACRXCFG, NGBE_MACRXCFG_ENA, 0); |
| 2849 | wr32m(hw, NGBE_PBRXCTL, NGBE_PBRXCTL_ENA, 0); |
| 2850 | |
| 2851 | /* Enable receipt of broadcasted frames */ |
| 2852 | fctrl = rd32(hw, NGBE_PSRCTL); |
| 2853 | fctrl |= NGBE_PSRCTL_BCA; |
| 2854 | wr32(hw, NGBE_PSRCTL, fctrl); |
| 2855 | |
| 2856 | /* |
| 2857 | * Configure CRC stripping, if any. |
| 2858 | */ |
| 2859 | hlreg0 = rd32(hw, NGBE_SECRXCTL); |
| 2860 | if (rx_conf->offloads & RTE_ETH_RX_OFFLOAD_KEEP_CRC) |
| 2861 | hlreg0 &= ~NGBE_SECRXCTL_CRCSTRIP; |
| 2862 | else |
| 2863 | hlreg0 |= NGBE_SECRXCTL_CRCSTRIP; |
| 2864 | hlreg0 &= ~NGBE_SECRXCTL_XDSA; |
| 2865 | wr32(hw, NGBE_SECRXCTL, hlreg0); |
| 2866 | |
| 2867 | /* |
| 2868 | * Configure jumbo frame support, if any. |
| 2869 | */ |
| 2870 | wr32m(hw, NGBE_FRMSZ, NGBE_FRMSZ_MAX_MASK, |
| 2871 | NGBE_FRMSZ_MAX(dev->data->mtu + NGBE_ETH_OVERHEAD)); |
| 2872 | |
| 2873 | /* |
| 2874 | * If loopback mode is configured, set LPBK bit. |
| 2875 | */ |
| 2876 | hlreg0 = rd32(hw, NGBE_PSRCTL); |
| 2877 | if (hw->is_pf && dev->data->dev_conf.lpbk_mode) |
| 2878 | hlreg0 |= NGBE_PSRCTL_LBENA; |
| 2879 | else |
| 2880 | hlreg0 &= ~NGBE_PSRCTL_LBENA; |
| 2881 | |
| 2882 | wr32(hw, NGBE_PSRCTL, hlreg0); |
| 2883 |
no test coverage detected