From: "Niklas Söderlund" <niklas.soderlund@corigine.com>
To: dev@dpdk.org
Cc: oss-drivers@corigine.com, "Jin Liu" <jin.liu@corigine.com>,
"Chaoyong He" <chaoyong.he@corigine.com>,
"Niklas Söderlund" <niklas.soderlund@corigine.com>
Subject: [PATCH 2/2] net/nfp: optimize ethdev struct
Date: Thu, 22 Sep 2022 15:03:14 +0200 [thread overview]
Message-ID: <20220922130314.694790-3-niklas.soderlund@corigine.com> (raw)
In-Reply-To: <20220922130314.694790-1-niklas.soderlund@corigine.com>
From: Jin Liu <jin.liu@corigine.com>
Before, use two variables to represent the ethdev structure for
firmware with NFDk and NFD3, but only a few field values differ
between the two variables. Now use one variable only, and to
distinguish different firmware versions in specific functions.
Signed-off-by: Jin Liu <jin.liu@corigine.com>
Reviewed-by: Chaoyong He <chaoyong.he@corigine.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@corigine.com>
Signed-off-by: Niklas Söderlund <niklas.soderlund@corigine.com>
---
drivers/net/nfp/nfp_ethdev.c | 36 +++------------------------------
drivers/net/nfp/nfp_ethdev_vf.c | 36 +++------------------------------
drivers/net/nfp/nfp_rxtx.c | 33 ++++++++++++++++++++++++++++--
drivers/net/nfp/nfp_rxtx.h | 5 +----
4 files changed, 38 insertions(+), 72 deletions(-)
diff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c
index bc69840777eb..3cb889bd015f 100644
--- a/drivers/net/nfp/nfp_ethdev.c
+++ b/drivers/net/nfp/nfp_ethdev.c
@@ -313,7 +313,7 @@ nfp_net_close(struct rte_eth_dev *dev)
}
/* Initialise and register driver with DPDK Application */
-static const struct eth_dev_ops nfp_net_nfd3_eth_dev_ops = {
+static const struct eth_dev_ops nfp_net_eth_dev_ops = {
.dev_configure = nfp_net_configure,
.dev_start = nfp_net_start,
.dev_stop = nfp_net_stop,
@@ -336,36 +336,7 @@ static const struct eth_dev_ops nfp_net_nfd3_eth_dev_ops = {
.rss_hash_conf_get = nfp_net_rss_hash_conf_get,
.rx_queue_setup = nfp_net_rx_queue_setup,
.rx_queue_release = nfp_net_rx_queue_release,
- .tx_queue_setup = nfp_net_nfd3_tx_queue_setup,
- .tx_queue_release = nfp_net_tx_queue_release,
- .rx_queue_intr_enable = nfp_rx_queue_intr_enable,
- .rx_queue_intr_disable = nfp_rx_queue_intr_disable,
-};
-
-static const struct eth_dev_ops nfp_net_nfdk_eth_dev_ops = {
- .dev_configure = nfp_net_configure,
- .dev_start = nfp_net_start,
- .dev_stop = nfp_net_stop,
- .dev_set_link_up = nfp_net_set_link_up,
- .dev_set_link_down = nfp_net_set_link_down,
- .dev_close = nfp_net_close,
- .promiscuous_enable = nfp_net_promisc_enable,
- .promiscuous_disable = nfp_net_promisc_disable,
- .link_update = nfp_net_link_update,
- .stats_get = nfp_net_stats_get,
- .stats_reset = nfp_net_stats_reset,
- .dev_infos_get = nfp_net_infos_get,
- .dev_supported_ptypes_get = nfp_net_supported_ptypes_get,
- .mtu_set = nfp_net_dev_mtu_set,
- .mac_addr_set = nfp_net_set_mac_addr,
- .vlan_offload_set = nfp_net_vlan_offload_set,
- .reta_update = nfp_net_reta_update,
- .reta_query = nfp_net_reta_query,
- .rss_hash_update = nfp_net_rss_hash_update,
- .rss_hash_conf_get = nfp_net_rss_hash_conf_get,
- .rx_queue_setup = nfp_net_rx_queue_setup,
- .rx_queue_release = nfp_net_rx_queue_release,
- .tx_queue_setup = nfp_net_nfdk_tx_queue_setup,
+ .tx_queue_setup = nfp_net_tx_queue_setup,
.tx_queue_release = nfp_net_tx_queue_release,
.rx_queue_intr_enable = nfp_rx_queue_intr_enable,
.rx_queue_intr_disable = nfp_rx_queue_intr_disable,
@@ -376,7 +347,6 @@ nfp_net_ethdev_ops_mount(struct nfp_net_hw *hw, struct rte_eth_dev *eth_dev)
{
switch (NFD_CFG_CLASS_VER_of(hw->ver)) {
case NFP_NET_CFG_VERSION_DP_NFD3:
- eth_dev->dev_ops = &nfp_net_nfd3_eth_dev_ops;
eth_dev->tx_pkt_burst = &nfp_net_nfd3_xmit_pkts;
break;
case NFP_NET_CFG_VERSION_DP_NFDK:
@@ -385,7 +355,6 @@ nfp_net_ethdev_ops_mount(struct nfp_net_hw *hw, struct rte_eth_dev *eth_dev)
NFD_CFG_MAJOR_VERSION_of(hw->ver));
return -EINVAL;
}
- eth_dev->dev_ops = &nfp_net_nfdk_eth_dev_ops;
eth_dev->tx_pkt_burst = &nfp_net_nfdk_xmit_pkts;
break;
default:
@@ -393,6 +362,7 @@ nfp_net_ethdev_ops_mount(struct nfp_net_hw *hw, struct rte_eth_dev *eth_dev)
return -EINVAL;
}
+ eth_dev->dev_ops = &nfp_net_eth_dev_ops;
eth_dev->rx_queue_count = nfp_net_rx_queue_count;
eth_dev->rx_pkt_burst = &nfp_net_recv_pkts;
diff --git a/drivers/net/nfp/nfp_ethdev_vf.c b/drivers/net/nfp/nfp_ethdev_vf.c
index affea9d17cdf..96c4d3cca7bb 100644
--- a/drivers/net/nfp/nfp_ethdev_vf.c
+++ b/drivers/net/nfp/nfp_ethdev_vf.c
@@ -218,7 +218,7 @@ nfp_netvf_close(struct rte_eth_dev *dev)
}
/* Initialise and register VF driver with DPDK Application */
-static const struct eth_dev_ops nfp_netvf_nfd3_eth_dev_ops = {
+static const struct eth_dev_ops nfp_netvf_eth_dev_ops = {
.dev_configure = nfp_net_configure,
.dev_start = nfp_netvf_start,
.dev_stop = nfp_netvf_stop,
@@ -241,36 +241,7 @@ static const struct eth_dev_ops nfp_netvf_nfd3_eth_dev_ops = {
.rss_hash_conf_get = nfp_net_rss_hash_conf_get,
.rx_queue_setup = nfp_net_rx_queue_setup,
.rx_queue_release = nfp_net_rx_queue_release,
- .tx_queue_setup = nfp_net_nfd3_tx_queue_setup,
- .tx_queue_release = nfp_net_tx_queue_release,
- .rx_queue_intr_enable = nfp_rx_queue_intr_enable,
- .rx_queue_intr_disable = nfp_rx_queue_intr_disable,
-};
-
-static const struct eth_dev_ops nfp_netvf_nfdk_eth_dev_ops = {
- .dev_configure = nfp_net_configure,
- .dev_start = nfp_netvf_start,
- .dev_stop = nfp_netvf_stop,
- .dev_set_link_up = nfp_netvf_set_link_up,
- .dev_set_link_down = nfp_netvf_set_link_down,
- .dev_close = nfp_netvf_close,
- .promiscuous_enable = nfp_net_promisc_enable,
- .promiscuous_disable = nfp_net_promisc_disable,
- .link_update = nfp_net_link_update,
- .stats_get = nfp_net_stats_get,
- .stats_reset = nfp_net_stats_reset,
- .dev_infos_get = nfp_net_infos_get,
- .dev_supported_ptypes_get = nfp_net_supported_ptypes_get,
- .mtu_set = nfp_net_dev_mtu_set,
- .mac_addr_set = nfp_net_set_mac_addr,
- .vlan_offload_set = nfp_net_vlan_offload_set,
- .reta_update = nfp_net_reta_update,
- .reta_query = nfp_net_reta_query,
- .rss_hash_update = nfp_net_rss_hash_update,
- .rss_hash_conf_get = nfp_net_rss_hash_conf_get,
- .rx_queue_setup = nfp_net_rx_queue_setup,
- .rx_queue_release = nfp_net_rx_queue_release,
- .tx_queue_setup = nfp_net_nfdk_tx_queue_setup,
+ .tx_queue_setup = nfp_net_tx_queue_setup,
.tx_queue_release = nfp_net_tx_queue_release,
.rx_queue_intr_enable = nfp_rx_queue_intr_enable,
.rx_queue_intr_disable = nfp_rx_queue_intr_disable,
@@ -281,7 +252,6 @@ nfp_netvf_ethdev_ops_mount(struct nfp_net_hw *hw, struct rte_eth_dev *eth_dev)
{
switch (NFD_CFG_CLASS_VER_of(hw->ver)) {
case NFP_NET_CFG_VERSION_DP_NFD3:
- eth_dev->dev_ops = &nfp_netvf_nfd3_eth_dev_ops;
eth_dev->tx_pkt_burst = &nfp_net_nfd3_xmit_pkts;
break;
case NFP_NET_CFG_VERSION_DP_NFDK:
@@ -290,7 +260,6 @@ nfp_netvf_ethdev_ops_mount(struct nfp_net_hw *hw, struct rte_eth_dev *eth_dev)
NFD_CFG_MAJOR_VERSION_of(hw->ver));
return -EINVAL;
}
- eth_dev->dev_ops = &nfp_netvf_nfdk_eth_dev_ops;
eth_dev->tx_pkt_burst = &nfp_net_nfdk_xmit_pkts;
break;
default:
@@ -298,6 +267,7 @@ nfp_netvf_ethdev_ops_mount(struct nfp_net_hw *hw, struct rte_eth_dev *eth_dev)
return -EINVAL;
}
+ eth_dev->dev_ops = &nfp_netvf_eth_dev_ops;
eth_dev->rx_queue_count = nfp_net_rx_queue_count;
eth_dev->rx_pkt_burst = &nfp_net_recv_pkts;
diff --git a/drivers/net/nfp/nfp_rxtx.c b/drivers/net/nfp/nfp_rxtx.c
index 8429b44de06d..12db07c276f0 100644
--- a/drivers/net/nfp/nfp_rxtx.c
+++ b/drivers/net/nfp/nfp_rxtx.c
@@ -657,7 +657,7 @@ nfp_net_reset_tx_queue(struct nfp_net_txq *txq)
txq->rd_p = 0;
}
-int
+static int
nfp_net_nfd3_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx,
uint16_t nb_desc, unsigned int socket_id,
const struct rte_eth_txconf *tx_conf)
@@ -991,7 +991,7 @@ nfp_net_nfd3_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pk
return i;
}
-int
+static int
nfp_net_nfdk_tx_queue_setup(struct rte_eth_dev *dev,
uint16_t queue_idx,
uint16_t nb_desc,
@@ -1108,6 +1108,35 @@ nfp_net_nfdk_tx_queue_setup(struct rte_eth_dev *dev,
return 0;
}
+int
+nfp_net_tx_queue_setup(struct rte_eth_dev *dev,
+ uint16_t queue_idx,
+ uint16_t nb_desc,
+ unsigned int socket_id,
+ const struct rte_eth_txconf *tx_conf)
+{
+ struct nfp_net_hw *hw;
+
+ hw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private);
+
+ switch (NFD_CFG_CLASS_VER_of(hw->ver)) {
+ case NFP_NET_CFG_VERSION_DP_NFD3:
+ return nfp_net_nfd3_tx_queue_setup(dev, queue_idx,
+ nb_desc, socket_id, tx_conf);
+ case NFP_NET_CFG_VERSION_DP_NFDK:
+ if (NFD_CFG_MAJOR_VERSION_of(hw->ver) < 5) {
+ PMD_DRV_LOG(ERR, "NFDK must use ABI 5 or newer, found: %d",
+ NFD_CFG_MAJOR_VERSION_of(hw->ver));
+ return -EINVAL;
+ }
+ return nfp_net_nfdk_tx_queue_setup(dev, queue_idx,
+ nb_desc, socket_id, tx_conf);
+ default:
+ PMD_DRV_LOG(ERR, "The version of firmware is not correct.");
+ return -EINVAL;
+ }
+}
+
static inline uint32_t
nfp_net_nfdk_free_tx_desc(struct nfp_net_txq *txq)
{
diff --git a/drivers/net/nfp/nfp_rxtx.h b/drivers/net/nfp/nfp_rxtx.h
index 5c005d74e79b..fa90c3e8e751 100644
--- a/drivers/net/nfp/nfp_rxtx.h
+++ b/drivers/net/nfp/nfp_rxtx.h
@@ -342,12 +342,9 @@ int nfp_net_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx,
struct rte_mempool *mp);
void nfp_net_tx_queue_release(struct rte_eth_dev *dev, uint16_t queue_idx);
void nfp_net_reset_tx_queue(struct nfp_net_txq *txq);
-int nfp_net_nfd3_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx,
- uint16_t nb_desc, unsigned int socket_id,
- const struct rte_eth_txconf *tx_conf);
uint16_t nfp_net_nfd3_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
uint16_t nb_pkts);
-int nfp_net_nfdk_tx_queue_setup(struct rte_eth_dev *dev,
+int nfp_net_tx_queue_setup(struct rte_eth_dev *dev,
uint16_t queue_idx,
uint16_t nb_desc,
unsigned int socket_id,
--
2.37.3
next prev parent reply other threads:[~2022-09-22 13:04 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-22 13:03 [PATCH 0/2] net/nfp: use a single struct eth_dev_ops Niklas Söderlund
2022-09-22 13:03 ` [PATCH 1/2] net/nfp: fix return value of nfp card init function Niklas Söderlund
2022-09-22 13:03 ` Niklas Söderlund [this message]
2022-10-05 16:51 ` [PATCH 0/2] net/nfp: use a single struct eth_dev_ops Ferruh Yigit
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220922130314.694790-3-niklas.soderlund@corigine.com \
--to=niklas.soderlund@corigine.com \
--cc=chaoyong.he@corigine.com \
--cc=dev@dpdk.org \
--cc=jin.liu@corigine.com \
--cc=oss-drivers@corigine.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).