Move the 'ver' data field from 'struct nfp_net_hw' into 'struct nfp_pf_dev', also modify the related logic.
Signed-off-by: Chaoyong He <chaoyong...@corigine.com> Reviewed-by: Long Wu <long...@corigine.com> --- drivers/net/nfp/flower/nfp_flower.c | 30 ++++++------- drivers/net/nfp/flower/nfp_flower_ctrl.c | 8 ++-- drivers/net/nfp/flower/nfp_flower_ctrl.h | 2 +- drivers/net/nfp/nfd3/nfp_nfd3_dp.c | 2 +- drivers/net/nfp/nfdk/nfp_nfdk_dp.c | 2 +- drivers/net/nfp/nfp_ethdev.c | 29 +++++++----- drivers/net/nfp/nfp_ethdev_vf.c | 30 ++++++++++--- drivers/net/nfp/nfp_net_common.c | 56 ++++++++++++++---------- drivers/net/nfp/nfp_net_common.h | 16 ++++--- drivers/net/nfp/nfp_net_meta.c | 5 ++- drivers/net/nfp/nfp_net_meta.h | 5 ++- drivers/net/nfp/nfp_rxtx.c | 10 ++--- 12 files changed, 118 insertions(+), 77 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower.c b/drivers/net/nfp/flower/nfp_flower.c index 8d781658ea..4d91d548f7 100644 --- a/drivers/net/nfp/flower/nfp_flower.c +++ b/drivers/net/nfp/flower/nfp_flower.c @@ -166,15 +166,15 @@ nfp_flower_pf_nfdk_xmit_pkts(void *tx_queue, } static void -nfp_flower_pf_xmit_pkts_register(struct nfp_app_fw_flower *app_fw_flower) +nfp_flower_pf_xmit_pkts_register(struct nfp_pf_dev *pf_dev) { - struct nfp_net_hw *hw; struct nfp_flower_nfd_func *nfd_func; + struct nfp_app_fw_flower *app_fw_flower; - hw = app_fw_flower->pf_hw; + app_fw_flower = pf_dev->app_fw_priv; nfd_func = &app_fw_flower->nfd_func; - if (hw->ver.extend == NFP_NET_CFG_VERSION_DP_NFD3) + if (pf_dev->ver.extend == NFP_NET_CFG_VERSION_DP_NFD3) nfd_func->pf_xmit_t = nfp_flower_pf_nfd3_xmit_pkts; else nfd_func->pf_xmit_t = nfp_flower_pf_nfdk_xmit_pkts; @@ -204,14 +204,12 @@ nfp_flower_init_vnic_common(struct nfp_net_hw_priv *hw_priv, uint64_t rx_bar_off; uint64_t tx_bar_off; struct nfp_pf_dev *pf_dev; - struct rte_pci_device *pci_dev; pf_dev = hw_priv->pf_dev; - pci_dev = pf_dev->pci_dev; PMD_INIT_LOG(DEBUG, "%s vNIC ctrl bar: %p", vnic_type, hw->super.ctrl_bar); - err = nfp_net_common_init(pci_dev, hw); + err = nfp_net_common_init(pf_dev, hw); if (err != 0) return err; @@ -612,15 +610,15 @@ nfp_flower_start_ctrl_vnic(struct nfp_app_fw_flower *app_fw_flower) } static void -nfp_flower_pkt_add_metadata_register(struct nfp_app_fw_flower *app_fw_flower) +nfp_flower_pkt_add_metadata_register(struct nfp_pf_dev *pf_dev) { - struct nfp_net_hw *hw; struct nfp_flower_nfd_func *nfd_func; + struct nfp_app_fw_flower *app_fw_flower; - hw = app_fw_flower->pf_hw; + app_fw_flower = pf_dev->app_fw_priv; nfd_func = &app_fw_flower->nfd_func; - if (hw->ver.extend == NFP_NET_CFG_VERSION_DP_NFD3) + if (pf_dev->ver.extend == NFP_NET_CFG_VERSION_DP_NFD3) nfd_func->pkt_add_metadata_t = nfp_flower_nfd3_pkt_add_metadata; else nfd_func->pkt_add_metadata_t = nfp_flower_nfdk_pkt_add_metadata; @@ -635,11 +633,11 @@ nfp_flower_pkt_add_metadata(struct nfp_app_fw_flower *app_fw_flower, } static void -nfp_flower_nfd_func_register(struct nfp_app_fw_flower *app_fw_flower) +nfp_flower_nfd_func_register(struct nfp_pf_dev *pf_dev) { - nfp_flower_pkt_add_metadata_register(app_fw_flower); - nfp_flower_ctrl_vnic_xmit_register(app_fw_flower); - nfp_flower_pf_xmit_pkts_register(app_fw_flower); + nfp_flower_pkt_add_metadata_register(pf_dev); + nfp_flower_ctrl_vnic_xmit_register(pf_dev); + nfp_flower_pf_xmit_pkts_register(pf_dev); } int @@ -730,7 +728,7 @@ nfp_init_app_fw_flower(struct nfp_net_hw_priv *hw_priv) goto pf_cpp_area_cleanup; } - nfp_flower_nfd_func_register(app_fw_flower); + nfp_flower_nfd_func_register(pf_dev); /* The ctrl vNIC struct comes directly after the PF one */ app_fw_flower->ctrl_hw = pf_hw + 1; diff --git a/drivers/net/nfp/flower/nfp_flower_ctrl.c b/drivers/net/nfp/flower/nfp_flower_ctrl.c index a46b849d1b..9b957e1f1e 100644 --- a/drivers/net/nfp/flower/nfp_flower_ctrl.c +++ b/drivers/net/nfp/flower/nfp_flower_ctrl.c @@ -343,15 +343,15 @@ nfp_flower_ctrl_vnic_nfdk_xmit(struct nfp_app_fw_flower *app_fw_flower, } void -nfp_flower_ctrl_vnic_xmit_register(struct nfp_app_fw_flower *app_fw_flower) +nfp_flower_ctrl_vnic_xmit_register(struct nfp_pf_dev *pf_dev) { - struct nfp_net_hw *hw; struct nfp_flower_nfd_func *nfd_func; + struct nfp_app_fw_flower *app_fw_flower; - hw = app_fw_flower->pf_hw; + app_fw_flower = pf_dev->app_fw_priv; nfd_func = &app_fw_flower->nfd_func; - if (hw->ver.extend == NFP_NET_CFG_VERSION_DP_NFD3) + if (pf_dev->ver.extend == NFP_NET_CFG_VERSION_DP_NFD3) nfd_func->ctrl_vnic_xmit_t = nfp_flower_ctrl_vnic_nfd3_xmit; else nfd_func->ctrl_vnic_xmit_t = nfp_flower_ctrl_vnic_nfdk_xmit; diff --git a/drivers/net/nfp/flower/nfp_flower_ctrl.h b/drivers/net/nfp/flower/nfp_flower_ctrl.h index b5d0036c01..f18c8f4095 100644 --- a/drivers/net/nfp/flower/nfp_flower_ctrl.h +++ b/drivers/net/nfp/flower/nfp_flower_ctrl.h @@ -11,6 +11,6 @@ void nfp_flower_ctrl_vnic_process(struct nfp_net_hw_priv *hw_priv); uint16_t nfp_flower_ctrl_vnic_xmit(struct nfp_app_fw_flower *app_fw_flower, struct rte_mbuf *mbuf); -void nfp_flower_ctrl_vnic_xmit_register(struct nfp_app_fw_flower *app_fw_flower); +void nfp_flower_ctrl_vnic_xmit_register(struct nfp_pf_dev *pf_dev); #endif /* __NFP_FLOWER_CTRL_H__ */ diff --git a/drivers/net/nfp/nfd3/nfp_nfd3_dp.c b/drivers/net/nfp/nfd3/nfp_nfd3_dp.c index ee96cd8e46..4ff1ae63b0 100644 --- a/drivers/net/nfp/nfd3/nfp_nfd3_dp.c +++ b/drivers/net/nfp/nfd3/nfp_nfd3_dp.c @@ -390,7 +390,7 @@ nfp_net_nfd3_tx_queue_setup(struct rte_eth_dev *dev, hw = nfp_net_get_hw(dev); hw_priv = dev->process_private; - nfp_net_tx_desc_limits(hw, hw_priv, &min_tx_desc, &max_tx_desc); + nfp_net_tx_desc_limits(hw_priv, &min_tx_desc, &max_tx_desc); /* Validating number of descriptors */ tx_desc_sz = nb_desc * sizeof(struct nfp_net_nfd3_tx_desc); diff --git a/drivers/net/nfp/nfdk/nfp_nfdk_dp.c b/drivers/net/nfp/nfdk/nfp_nfdk_dp.c index 2cea5688b3..68fcbe93da 100644 --- a/drivers/net/nfp/nfdk/nfp_nfdk_dp.c +++ b/drivers/net/nfp/nfdk/nfp_nfdk_dp.c @@ -424,7 +424,7 @@ nfp_net_nfdk_tx_queue_setup(struct rte_eth_dev *dev, hw = nfp_net_get_hw(dev); hw_priv = dev->process_private; - nfp_net_tx_desc_limits(hw, hw_priv, &min_tx_desc, &max_tx_desc); + nfp_net_tx_desc_limits(hw_priv, &min_tx_desc, &max_tx_desc); /* Validating number of descriptors */ tx_desc_sz = nb_desc * sizeof(struct nfp_net_nfdk_tx_desc); diff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c index 181fd74efe..d85993f70c 100644 --- a/drivers/net/nfp/nfp_ethdev.c +++ b/drivers/net/nfp/nfp_ethdev.c @@ -959,10 +959,10 @@ static const struct eth_dev_ops nfp_net_eth_dev_ops = { }; static inline void -nfp_net_ethdev_ops_mount(struct nfp_net_hw *hw, +nfp_net_ethdev_ops_mount(struct nfp_pf_dev *pf_dev, struct rte_eth_dev *eth_dev) { - if (hw->ver.extend == NFP_NET_CFG_VERSION_DP_NFD3) + if (pf_dev->ver.extend == NFP_NET_CFG_VERSION_DP_NFD3) eth_dev->tx_pkt_burst = nfp_net_nfd3_xmit_pkts; else nfp_net_nfdk_xmit_pkts_set(eth_dev); @@ -1030,7 +1030,7 @@ nfp_net_init(struct rte_eth_dev *eth_dev, PMD_INIT_LOG(DEBUG, "ctrl bar: %p", hw->ctrl_bar); PMD_INIT_LOG(DEBUG, "MAC stats: %p", net_hw->mac_stats); - err = nfp_net_common_init(pci_dev, net_hw); + err = nfp_net_common_init(pf_dev, net_hw); if (err != 0) return err; @@ -1046,7 +1046,7 @@ nfp_net_init(struct rte_eth_dev *eth_dev, return err; } - nfp_net_ethdev_ops_mount(net_hw, eth_dev); + nfp_net_ethdev_ops_mount(pf_dev, eth_dev); net_hw->eth_xstats_base = rte_malloc("rte_eth_xstat", sizeof(struct rte_eth_xstat) * nfp_net_xstats_size(eth_dev), 0); @@ -1074,7 +1074,7 @@ nfp_net_init(struct rte_eth_dev *eth_dev, if ((hw->cap & NFP_NET_CFG_CTRL_LSO2) != 0) hw->cap &= ~NFP_NET_CFG_CTRL_TXVLAN; - nfp_net_log_device_information(net_hw); + nfp_net_log_device_information(net_hw, pf_dev); /* Initializing spinlock for reconfigs */ rte_spinlock_init(&hw->reconfig_lock); @@ -1552,9 +1552,6 @@ nfp_enable_multi_pf(struct nfp_pf_dev *pf_dev) struct nfp_cpp_area *area; char name[RTE_ETH_NAME_MAX_LEN]; - if (!pf_dev->multi_pf.enabled) - return 0; - memset(&net_hw, 0, sizeof(struct nfp_net_hw)); /* Map the symbol table */ @@ -1570,6 +1567,16 @@ nfp_enable_multi_pf(struct nfp_pf_dev *pf_dev) hw = &net_hw.super; hw->ctrl_bar = ctrl_bar; + /* Check the version from firmware */ + if (!nfp_net_version_check(hw, pf_dev)) { + PMD_INIT_LOG(ERR, "Not the valid version."); + err = -EINVAL; + goto end; + } + + if (!pf_dev->multi_pf.enabled) + goto end; + cap_extend = nn_cfg_readl(hw, NFP_NET_CFG_CAP_WORD1); if ((cap_extend & NFP_NET_CFG_CTRL_MULTI_PF) == 0) { PMD_INIT_LOG(ERR, "Loaded firmware doesn't support multiple PF"); @@ -2358,10 +2365,10 @@ static int nfp_secondary_net_init(struct rte_eth_dev *eth_dev, void *para) { - struct nfp_net_hw *net_hw; + struct nfp_net_hw_priv *hw_priv; - net_hw = eth_dev->data->dev_private; - nfp_net_ethdev_ops_mount(net_hw, eth_dev); + hw_priv = para; + nfp_net_ethdev_ops_mount(hw_priv->pf_dev, eth_dev); eth_dev->process_private = para; diff --git a/drivers/net/nfp/nfp_ethdev_vf.c b/drivers/net/nfp/nfp_ethdev_vf.c index cdf5da3af7..2e581c7e45 100644 --- a/drivers/net/nfp/nfp_ethdev_vf.c +++ b/drivers/net/nfp/nfp_ethdev_vf.c @@ -235,10 +235,10 @@ static const struct eth_dev_ops nfp_netvf_eth_dev_ops = { }; static inline void -nfp_netvf_ethdev_ops_mount(struct nfp_net_hw *hw, +nfp_netvf_ethdev_ops_mount(struct nfp_pf_dev *pf_dev, struct rte_eth_dev *eth_dev) { - if (hw->ver.extend == NFP_NET_CFG_VERSION_DP_NFD3) + if (pf_dev->ver.extend == NFP_NET_CFG_VERSION_DP_NFD3) eth_dev->tx_pkt_burst = nfp_net_nfd3_xmit_pkts; else nfp_net_nfdk_xmit_pkts_set(eth_dev); @@ -256,6 +256,7 @@ nfp_netvf_init(struct rte_eth_dev *eth_dev) uint32_t start_q; struct nfp_hw *hw; struct nfp_net_hw *net_hw; + struct nfp_pf_dev *pf_dev; uint64_t tx_bar_off = 0; uint64_t rx_bar_off = 0; struct rte_pci_device *pci_dev; @@ -280,13 +281,27 @@ nfp_netvf_init(struct rte_eth_dev *eth_dev) return -ENODEV; } + pf_dev = rte_zmalloc(NULL, sizeof(*pf_dev), 0); + if (pf_dev == NULL) { + PMD_INIT_LOG(ERR, "Can not allocate memory for the PF device."); + return -ENOMEM; + } + + pf_dev->pci_dev = pci_dev; + + /* Check the version from firmware */ + if (!nfp_net_version_check(hw, pf_dev)) { + err = -EINVAL; + goto pf_dev_free; + } + PMD_INIT_LOG(DEBUG, "ctrl bar: %p", hw->ctrl_bar); - err = nfp_net_common_init(pci_dev, net_hw); + err = nfp_net_common_init(pf_dev, net_hw); if (err != 0) - return err; + goto pf_dev_free; - nfp_netvf_ethdev_ops_mount(net_hw, eth_dev); + nfp_netvf_ethdev_ops_mount(pf_dev, eth_dev); hw_priv = rte_zmalloc(NULL, sizeof(*hw_priv), 0); if (hw_priv == NULL) { @@ -296,6 +311,7 @@ nfp_netvf_init(struct rte_eth_dev *eth_dev) } hw_priv->dev_info = dev_info; + hw_priv->pf_dev = pf_dev; eth_dev->process_private = hw_priv; @@ -330,7 +346,7 @@ nfp_netvf_init(struct rte_eth_dev *eth_dev) if ((hw->cap & NFP_NET_CFG_CTRL_LSO2) != 0) hw->cap &= ~NFP_NET_CFG_CTRL_TXVLAN; - nfp_net_log_device_information(net_hw); + nfp_net_log_device_information(net_hw, pf_dev); /* Initializing spinlock for reconfigs */ rte_spinlock_init(&hw->reconfig_lock); @@ -381,6 +397,8 @@ nfp_netvf_init(struct rte_eth_dev *eth_dev) rte_free(net_hw->eth_xstats_base); hw_priv_free: rte_free(hw_priv); +pf_dev_free: + rte_free(pf_dev); return err; } diff --git a/drivers/net/nfp/nfp_net_common.c b/drivers/net/nfp/nfp_net_common.c index b471fd032a..e4e01d8c79 100644 --- a/drivers/net/nfp/nfp_net_common.c +++ b/drivers/net/nfp/nfp_net_common.c @@ -349,13 +349,14 @@ nfp_net_configure(struct rte_eth_dev *dev) } void -nfp_net_log_device_information(const struct nfp_net_hw *hw) +nfp_net_log_device_information(const struct nfp_net_hw *hw, + struct nfp_pf_dev *pf_dev) { uint32_t cap = hw->super.cap; uint32_t cap_ext = hw->super.cap_ext; PMD_INIT_LOG(INFO, "VER: %u.%u, Maximum supported MTU: %d", - hw->ver.major, hw->ver.minor, hw->max_mtu); + pf_dev->ver.major, pf_dev->ver.minor, hw->max_mtu); PMD_INIT_LOG(INFO, "CAP: %#x", cap); PMD_INIT_LOG(INFO, "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", @@ -1235,14 +1236,13 @@ nfp_net_rx_desc_limits(struct nfp_net_hw_priv *hw_priv, } void -nfp_net_tx_desc_limits(struct nfp_net_hw *hw, - struct nfp_net_hw_priv *hw_priv, +nfp_net_tx_desc_limits(struct nfp_net_hw_priv *hw_priv, uint16_t *min_tx_desc, uint16_t *max_tx_desc) { uint16_t tx_dpp; - if (hw->ver.extend == NFP_NET_CFG_VERSION_DP_NFD3) + if (hw_priv->pf_dev->ver.extend == NFP_NET_CFG_VERSION_DP_NFD3) tx_dpp = NFD3_TX_DESC_PER_PKT; else tx_dpp = NFDK_TX_DESC_PER_SIMPLE_PKT; @@ -1269,7 +1269,7 @@ nfp_net_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) return -EINVAL; nfp_net_rx_desc_limits(hw_priv, &min_rx_desc, &max_rx_desc); - nfp_net_tx_desc_limits(hw, hw_priv, &min_tx_desc, &max_tx_desc); + nfp_net_tx_desc_limits(hw_priv, &min_tx_desc, &max_tx_desc); dev_info->max_rx_queues = (uint16_t)hw->max_rx_queues; dev_info->max_tx_queues = (uint16_t)hw->max_tx_queues; @@ -1373,11 +1373,13 @@ nfp_net_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) } int -nfp_net_common_init(struct rte_pci_device *pci_dev, +nfp_net_common_init(struct nfp_pf_dev *pf_dev, struct nfp_net_hw *hw) { const int stride = 4; + struct rte_pci_device *pci_dev; + pci_dev = pf_dev->pci_dev; hw->device_id = pci_dev->id.device_id; hw->vendor_id = pci_dev->id.vendor_id; hw->subsystem_device_id = pci_dev->id.subsystem_device_id; @@ -1391,11 +1393,7 @@ nfp_net_common_init(struct rte_pci_device *pci_dev, return -ENODEV; } - nfp_net_cfg_read_version(hw); - if (!nfp_net_is_valid_nfd_version(hw->ver)) - return -EINVAL; - - if (nfp_net_check_dma_mask(hw, pci_dev->name) != 0) + if (nfp_net_check_dma_mask(pf_dev, pci_dev->name) != 0) return -ENODEV; /* Get some of the read-only fields from the config BAR */ @@ -1404,10 +1402,10 @@ nfp_net_common_init(struct rte_pci_device *pci_dev, hw->max_mtu = nn_cfg_readl(&hw->super, NFP_NET_CFG_MAX_MTU); hw->flbufsz = DEFAULT_FLBUF_SIZE; - nfp_net_meta_init_format(hw); + nfp_net_meta_init_format(hw, pf_dev); /* Read the Rx offset configured from firmware */ - if (hw->ver.major < 2) + if (pf_dev->ver.major < 2) hw->rx_offset = NFP_NET_RX_OFFSET; else hw->rx_offset = nn_cfg_readl(&hw->super, NFP_NET_CFG_RX_OFFSET); @@ -2118,10 +2116,10 @@ nfp_net_set_vxlan_port(struct nfp_net_hw *net_hw, * than 40 bits. */ int -nfp_net_check_dma_mask(struct nfp_net_hw *hw, +nfp_net_check_dma_mask(struct nfp_pf_dev *pf_dev, char *name) { - if (hw->ver.extend == NFP_NET_CFG_VERSION_DP_NFD3 && + if (pf_dev->ver.extend == NFP_NET_CFG_VERSION_DP_NFD3 && rte_mem_check_dma_mask(40) != 0) { PMD_DRV_LOG(ERR, "Device %s can't be used: restricted dma mask to 40 bits!", name); @@ -2165,16 +2163,28 @@ nfp_net_txrwb_free(struct rte_eth_dev *eth_dev) net_hw->txrwb_mz = NULL; } -void -nfp_net_cfg_read_version(struct nfp_net_hw *hw) +static void +nfp_net_cfg_read_version(struct nfp_hw *hw, + struct nfp_pf_dev *pf_dev) { union { uint32_t whole; struct nfp_net_fw_ver split; } version; - version.whole = nn_cfg_readl(&hw->super, NFP_NET_CFG_VERSION); - hw->ver = version.split; + version.whole = nn_cfg_readl(hw, NFP_NET_CFG_VERSION); + pf_dev->ver = version.split; +} + +bool +nfp_net_version_check(struct nfp_hw *hw, + struct nfp_pf_dev *pf_dev) +{ + nfp_net_cfg_read_version(hw, pf_dev); + if (!nfp_net_is_valid_nfd_version(pf_dev->ver)) + return false; + + return true; } static void @@ -2249,6 +2259,7 @@ nfp_net_firmware_version_get(struct rte_eth_dev *dev, size_t fw_size) { struct nfp_net_hw *hw; + struct nfp_pf_dev *pf_dev; struct nfp_net_hw_priv *hw_priv; char app_name[FW_VER_LEN] = {0}; char mip_name[FW_VER_LEN] = {0}; @@ -2260,6 +2271,7 @@ nfp_net_firmware_version_get(struct rte_eth_dev *dev, hw = nfp_net_get_hw(dev); hw_priv = dev->process_private; + pf_dev = hw_priv->pf_dev; if (hw->fw_version[0] != 0) { snprintf(fw_version, FW_VER_LEN, "%s", hw->fw_version); @@ -2268,8 +2280,8 @@ nfp_net_firmware_version_get(struct rte_eth_dev *dev, if (!rte_eth_dev_is_repr(dev)) { snprintf(vnic_version, FW_VER_LEN, "%d.%d.%d.%d", - hw->ver.extend, hw->ver.class, - hw->ver.major, hw->ver.minor); + pf_dev->ver.extend, pf_dev->ver.class, + pf_dev->ver.major, pf_dev->ver.minor); } else { snprintf(vnic_version, FW_VER_LEN, "*"); } diff --git a/drivers/net/nfp/nfp_net_common.h b/drivers/net/nfp/nfp_net_common.h index 67ec5a2d89..8d0922d48c 100644 --- a/drivers/net/nfp/nfp_net_common.h +++ b/drivers/net/nfp/nfp_net_common.h @@ -108,6 +108,8 @@ struct nfp_pf_dev { enum nfp_app_fw_id app_fw_id; + struct nfp_net_fw_ver ver; + /** Pointer to the app running on the PF */ void *app_fw_priv; @@ -219,7 +221,6 @@ struct nfp_net_hw { const struct rte_memzone *txrwb_mz; /** Info from the firmware */ - struct nfp_net_fw_ver ver; uint32_t max_mtu; uint32_t mtu; uint32_t rx_offset; @@ -276,8 +277,9 @@ nfp_qcp_queue_offset(const struct nfp_dev_info *dev_info, /* Prototypes for common NFP functions */ int nfp_net_mbox_reconfig(struct nfp_net_hw *hw, uint32_t mbox_cmd); int nfp_net_configure(struct rte_eth_dev *dev); -int nfp_net_common_init(struct rte_pci_device *pci_dev, struct nfp_net_hw *hw); -void nfp_net_log_device_information(const struct nfp_net_hw *hw); +int nfp_net_common_init(struct nfp_pf_dev *pf_dev, struct nfp_net_hw *hw); +void nfp_net_log_device_information(const struct nfp_net_hw *hw, + struct nfp_pf_dev *pf_dev); void nfp_net_enable_queues(struct rte_eth_dev *dev); void nfp_net_disable_queues(struct rte_eth_dev *dev); void nfp_net_params_setup(struct nfp_net_hw *hw); @@ -345,12 +347,10 @@ int nfp_net_set_vxlan_port(struct nfp_net_hw *hw, size_t idx, uint16_t port); void nfp_net_rx_desc_limits(struct nfp_net_hw_priv *hw_priv, uint16_t *min_rx_desc, uint16_t *max_rx_desc); -void nfp_net_tx_desc_limits(struct nfp_net_hw *hw, - struct nfp_net_hw_priv *hw_priv, +void nfp_net_tx_desc_limits(struct nfp_net_hw_priv *hw_priv, uint16_t *min_tx_desc, uint16_t *max_tx_desc); -int nfp_net_check_dma_mask(struct nfp_net_hw *hw, char *name); -void nfp_net_cfg_read_version(struct nfp_net_hw *hw); +int nfp_net_check_dma_mask(struct nfp_pf_dev *pf_dev, char *name); int nfp_net_firmware_version_get(struct rte_eth_dev *dev, char *fw_version, size_t fw_size); bool nfp_net_is_valid_nfd_version(struct nfp_net_fw_ver version); struct nfp_net_hw *nfp_net_get_hw(const struct rte_eth_dev *dev); @@ -377,6 +377,8 @@ uint8_t nfp_function_id_get(const struct nfp_pf_dev *pf_dev, uint8_t port_id); int nfp_net_vf_config_app_init(struct nfp_net_hw *net_hw, struct nfp_pf_dev *pf_dev); +bool nfp_net_version_check(struct nfp_hw *hw, + struct nfp_pf_dev *pf_dev); #define NFP_PRIV_TO_APP_FW_NIC(app_fw_priv)\ ((struct nfp_app_fw_nic *)app_fw_priv) diff --git a/drivers/net/nfp/nfp_net_meta.c b/drivers/net/nfp/nfp_net_meta.c index 07c6758d33..5a67f87bee 100644 --- a/drivers/net/nfp/nfp_net_meta.c +++ b/drivers/net/nfp/nfp_net_meta.c @@ -269,14 +269,15 @@ nfp_net_meta_parse(struct nfp_net_rx_desc *rxds, } void -nfp_net_meta_init_format(struct nfp_net_hw *hw) +nfp_net_meta_init_format(struct nfp_net_hw *hw, + struct nfp_pf_dev *pf_dev) { /* * ABI 4.x and ctrl vNIC always use chained metadata, in other cases we allow use of * single metadata if only RSS(v1) is supported by hw capability, and RSS(v2) * also indicate that we are using chained metadata. */ - if (hw->ver.major == 4) { + if (pf_dev->ver.major == 4) { hw->meta_format = NFP_NET_METAFORMAT_CHAINED; } else if ((hw->super.cap & NFP_NET_CFG_CTRL_CHAIN_META) != 0) { hw->meta_format = NFP_NET_METAFORMAT_CHAINED; diff --git a/drivers/net/nfp/nfp_net_meta.h b/drivers/net/nfp/nfp_net_meta.h index 69d08cf3a7..c3d84dff60 100644 --- a/drivers/net/nfp/nfp_net_meta.h +++ b/drivers/net/nfp/nfp_net_meta.h @@ -89,7 +89,10 @@ struct nfp_net_meta_parsed { } vlan[NFP_NET_META_MAX_VLANS]; }; -void nfp_net_meta_init_format(struct nfp_net_hw *hw); +struct nfp_pf_dev; + +void nfp_net_meta_init_format(struct nfp_net_hw *hw, + struct nfp_pf_dev *pf_dev); void nfp_net_meta_parse(struct nfp_net_rx_desc *rxds, struct nfp_net_rxq *rxq, struct nfp_net_hw *hw, diff --git a/drivers/net/nfp/nfp_rxtx.c b/drivers/net/nfp/nfp_rxtx.c index 05218537f7..d101477161 100644 --- a/drivers/net/nfp/nfp_rxtx.c +++ b/drivers/net/nfp/nfp_rxtx.c @@ -816,11 +816,11 @@ nfp_net_tx_queue_setup(struct rte_eth_dev *dev, unsigned int socket_id, const struct rte_eth_txconf *tx_conf) { - struct nfp_net_hw *hw; + struct nfp_net_hw_priv *hw_priv; - hw = nfp_net_get_hw(dev); + hw_priv = dev->process_private; - if (hw->ver.extend == NFP_NET_CFG_VERSION_DP_NFD3) + if (hw_priv->pf_dev->ver.extend == NFP_NET_CFG_VERSION_DP_NFD3) return nfp_net_nfd3_tx_queue_setup(dev, queue_idx, nb_desc, socket_id, tx_conf); else @@ -852,10 +852,10 @@ nfp_net_tx_queue_info_get(struct rte_eth_dev *dev, struct rte_eth_txq_info *info) { struct rte_eth_dev_info dev_info; - struct nfp_net_hw *hw = nfp_net_get_hw(dev); + struct nfp_net_hw_priv *hw_priv = dev->process_private; struct nfp_net_txq *txq = dev->data->tx_queues[queue_id]; - if (hw->ver.extend == NFP_NET_CFG_VERSION_DP_NFD3) + if (hw_priv->pf_dev->ver.extend == NFP_NET_CFG_VERSION_DP_NFD3) info->nb_desc = txq->tx_count / NFD3_TX_DESC_PER_PKT; else info->nb_desc = txq->tx_count / NFDK_TX_DESC_PER_SIMPLE_PKT; -- 2.39.1