ethdev: move inline device operations
authorFerruh Yigit <ferruh.yigit@intel.com>
Wed, 9 Sep 2020 13:01:43 +0000 (14:01 +0100)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 18 Sep 2020 16:55:08 +0000 (18:55 +0200)
This patch is a preparation to hide the 'struct eth_dev_ops' from
applications by moving some device operations from 'struct eth_dev_ops'
to 'struct rte_eth_dev'.

Mentioned ethdev APIs are in the data path and implemented as inline
because of performance reasons.

Exposing 'struct eth_dev_ops' to applications is bad because it is a
contract between ethdev and PMDs, not really needs to be known by
applications, also changes in the struct causing ABI breakages which
shouldn't.

To be able to both keep APIs inline and hide the 'struct eth_dev_ops',
moving device operations used in ethdev inline APIs to 'struct
rte_eth_dev' to the same level with Rx/Tx burst functions.

The list of dev_ops moved:
eth_rx_queue_count_t       rx_queue_count;
eth_rx_descriptor_done_t   rx_descriptor_done;
eth_rx_descriptor_status_t rx_descriptor_status;
eth_tx_descriptor_status_t tx_descriptor_status;

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
Reviewed-by: Andrew Rybchenko <arybchenko@solarflare.com>
Acked-by: David Marchand <david.marchand@redhat.com>
Acked-by: Sachin Saxena <sachin.saxena@nxp.com>
30 files changed:
doc/guides/nics/features.rst
doc/guides/rel_notes/release_20_11.rst
drivers/net/ark/ark_ethdev.c
drivers/net/atlantic/atl_ethdev.c
drivers/net/axgbe/axgbe_ethdev.c
drivers/net/bnxt/bnxt_ethdev.c
drivers/net/dpaa/dpaa_ethdev.c
drivers/net/dpaa2/dpaa2_ethdev.c
drivers/net/e1000/em_ethdev.c
drivers/net/e1000/igb_ethdev.c
drivers/net/enic/enic_ethdev.c
drivers/net/fm10k/fm10k_ethdev.c
drivers/net/i40e/i40e_ethdev.c
drivers/net/i40e/i40e_ethdev_vf.c
drivers/net/iavf/iavf_ethdev.c
drivers/net/ice/ice_ethdev.c
drivers/net/igc/igc_ethdev.c
drivers/net/ixgbe/ixgbe_ethdev.c
drivers/net/mlx5/linux/mlx5_os.c
drivers/net/mlx5/mlx5_flow.c
drivers/net/netvsc/hn_ethdev.c
drivers/net/nfp/nfp_net.c
drivers/net/octeontx2/otx2_ethdev.c
drivers/net/qede/qede_ethdev.c
drivers/net/sfc/sfc_ethdev.c
drivers/net/thunderx/nicvf_ethdev.c
drivers/net/vhost/rte_eth_vhost.c
drivers/net/virtio/virtio_ethdev.c
lib/librte_ethdev/rte_ethdev.h
lib/librte_ethdev/rte_ethdev_core.h

index edd21c4..dd8c955 100644 (file)
@@ -646,9 +646,9 @@ used, status can be "Available", "Done" or "Unavailable". When
 ``rx_descriptor_done`` is used, status can be "DD bit is set" or "DD bit is
 not set".
 
-* **[implements] eth_dev_ops**: ``rx_descriptor_status``.
+* **[implements] rte_eth_dev**: ``rx_descriptor_status``.
 * **[related]    API**: ``rte_eth_rx_descriptor_status()``.
-* **[implements] eth_dev_ops**: ``rx_descriptor_done``.
+* **[implements] rte_eth_dev**: ``rx_descriptor_done``.
 * **[related]    API**: ``rte_eth_rx_descriptor_done()``.
 
 
@@ -660,7 +660,7 @@ Tx descriptor status
 Supports checking the status of a Tx descriptor. Status can be "Full", "Done"
 or "Unavailable."
 
-* **[implements] eth_dev_ops**: ``tx_descriptor_status``.
+* **[implements] rte_eth_dev**: ``tx_descriptor_status``.
 * **[related]    API**: ``rte_eth_tx_descriptor_status()``.
 
 
index be01926..374b6d3 100644 (file)
@@ -153,6 +153,16 @@ ABI Changes
    Also, make sure to start the actual text at the margin.
    =======================================================
 
+* ``ethdev`` changes
+
+  * Following device operation function pointers moved
+    from ``struct eth_dev_ops`` to ``struct rte_eth_dev``:
+
+    * ``eth_rx_queue_count_t       rx_queue_count;``
+    * ``eth_rx_descriptor_done_t   rx_descriptor_done;``
+    * ``eth_rx_descriptor_status_t rx_descriptor_status;``
+    * ``eth_tx_descriptor_status_t tx_descriptor_status;``
+
 
 Known Issues
 ------------
index 646427d..d472ae5 100644 (file)
@@ -132,7 +132,6 @@ static const struct eth_dev_ops ark_eth_dev_ops = {
        .dev_infos_get = eth_ark_dev_info_get,
 
        .rx_queue_setup = eth_ark_dev_rx_queue_setup,
-       .rx_queue_count = eth_ark_dev_rx_queue_count,
        .tx_queue_setup = eth_ark_tx_queue_setup,
 
        .link_update = eth_ark_dev_link_update,
@@ -318,6 +317,7 @@ eth_ark_dev_init(struct rte_eth_dev *dev)
                return -1;
 
        dev->dev_ops = &ark_eth_dev_ops;
+       dev->rx_queue_count = eth_ark_dev_rx_queue_count;
 
        dev->data->mac_addrs = rte_zmalloc("ark", RTE_ETHER_ADDR_LEN, 0);
        if (!dev->data->mac_addrs) {
index d3b00ab..540b106 100644 (file)
@@ -313,10 +313,6 @@ static const struct eth_dev_ops atl_eth_dev_ops = {
        .rx_queue_intr_enable = atl_dev_rx_queue_intr_enable,
        .rx_queue_intr_disable = atl_dev_rx_queue_intr_disable,
 
-       .rx_queue_count       = atl_rx_queue_count,
-       .rx_descriptor_status = atl_dev_rx_descriptor_status,
-       .tx_descriptor_status = atl_dev_tx_descriptor_status,
-
        /* EEPROM */
        .get_eeprom_length    = atl_dev_get_eeprom_length,
        .get_eeprom           = atl_dev_get_eeprom,
@@ -373,6 +369,11 @@ eth_atl_dev_init(struct rte_eth_dev *eth_dev)
        PMD_INIT_FUNC_TRACE();
 
        eth_dev->dev_ops = &atl_eth_dev_ops;
+
+       eth_dev->rx_queue_count       = atl_rx_queue_count;
+       eth_dev->rx_descriptor_status = atl_dev_rx_descriptor_status;
+       eth_dev->tx_descriptor_status = atl_dev_tx_descriptor_status;
+
        eth_dev->rx_pkt_burst = &atl_recv_pkts;
        eth_dev->tx_pkt_burst = &atl_xmit_pkts;
        eth_dev->tx_pkt_prepare = &atl_prep_pkts;
index 0c25739..02ceb95 100644 (file)
@@ -224,8 +224,6 @@ static const struct eth_dev_ops axgbe_eth_dev_ops = {
        .rxq_info_get                 = axgbe_rxq_info_get,
        .txq_info_get                 = axgbe_txq_info_get,
        .dev_supported_ptypes_get     = axgbe_dev_supported_ptypes_get,
-       .rx_descriptor_status         = axgbe_dev_rx_descriptor_status,
-       .tx_descriptor_status         = axgbe_dev_tx_descriptor_status,
        .mtu_set                = axgb_mtu_set,
 };
 
@@ -1632,6 +1630,9 @@ eth_axgbe_dev_init(struct rte_eth_dev *eth_dev)
 
        eth_dev->dev_ops = &axgbe_eth_dev_ops;
 
+       eth_dev->rx_descriptor_status = axgbe_dev_rx_descriptor_status;
+       eth_dev->tx_descriptor_status = axgbe_dev_tx_descriptor_status;
+
        /*
         * For secondary processes, we don't initialise any further as primary
         * has already done this work.
index 75d055b..4d224bf 100644 (file)
@@ -4246,9 +4246,6 @@ static const struct eth_dev_ops bnxt_dev_ops = {
        .dev_led_off = bnxt_dev_led_off_op,
        .xstats_get_by_id = bnxt_dev_xstats_get_by_id_op,
        .xstats_get_names_by_id = bnxt_dev_xstats_get_names_by_id_op,
-       .rx_queue_count = bnxt_rx_queue_count_op,
-       .rx_descriptor_status = bnxt_rx_descriptor_status_op,
-       .tx_descriptor_status = bnxt_tx_descriptor_status_op,
        .rx_queue_start = bnxt_rx_queue_start,
        .rx_queue_stop = bnxt_rx_queue_stop,
        .tx_queue_start = bnxt_tx_queue_start,
@@ -5681,6 +5678,9 @@ bnxt_dev_init(struct rte_eth_dev *eth_dev, void *params __rte_unused)
                PMD_DRV_LOG(INFO, "%s\n", bnxt_version);
 
        eth_dev->dev_ops = &bnxt_dev_ops;
+       eth_dev->rx_queue_count = bnxt_rx_queue_count_op;
+       eth_dev->rx_descriptor_status = bnxt_rx_descriptor_status_op;
+       eth_dev->tx_descriptor_status = bnxt_tx_descriptor_status_op;
        eth_dev->rx_pkt_burst = &bnxt_recv_pkts;
        eth_dev->tx_pkt_burst = &bnxt_xmit_pkts;
 
index b0f2023..e2c3fd0 100644 (file)
@@ -1421,7 +1421,6 @@ static struct eth_dev_ops dpaa_devops = {
        .tx_queue_setup           = dpaa_eth_tx_queue_setup,
        .rx_queue_release         = dpaa_eth_rx_queue_release,
        .tx_queue_release         = dpaa_eth_tx_queue_release,
-       .rx_queue_count           = dpaa_dev_rx_queue_count,
        .rx_burst_mode_get        = dpaa_dev_rx_burst_mode_get,
        .tx_burst_mode_get        = dpaa_dev_tx_burst_mode_get,
        .rxq_info_get             = dpaa_rxq_info_get,
@@ -1917,6 +1916,7 @@ dpaa_dev_init(struct rte_eth_dev *eth_dev)
 
        /* Populate ethdev structure */
        eth_dev->dev_ops = &dpaa_devops;
+       eth_dev->rx_queue_count = dpaa_dev_rx_queue_count;
        eth_dev->rx_pkt_burst = dpaa_eth_queue_rx;
        eth_dev->tx_pkt_burst = dpaa_eth_tx_drop_all;
 
index 02c2548..38cf0ab 100644 (file)
@@ -2331,7 +2331,6 @@ static struct eth_dev_ops dpaa2_ethdev_ops = {
        .tx_queue_release  = dpaa2_dev_tx_queue_release,
        .rx_burst_mode_get = dpaa2_dev_rx_burst_mode_get,
        .tx_burst_mode_get = dpaa2_dev_tx_burst_mode_get,
-       .rx_queue_count       = dpaa2_dev_rx_queue_count,
        .flow_ctrl_get        = dpaa2_flow_ctrl_get,
        .flow_ctrl_set        = dpaa2_flow_ctrl_set,
        .mac_addr_add         = dpaa2_dev_add_mac_addr,
@@ -2486,6 +2485,7 @@ dpaa2_dev_init(struct rte_eth_dev *eth_dev)
                 * plugged.
                 */
                eth_dev->dev_ops = &dpaa2_ethdev_ops;
+               eth_dev->rx_queue_count = dpaa2_dev_rx_queue_count;
                if (dpaa2_get_devargs(dev->devargs, DRIVER_LOOPBACK_MODE))
                        eth_dev->rx_pkt_burst = dpaa2_dev_loopback_rx;
                else if (dpaa2_get_devargs(dev->devargs,
index 902b1cd..82766da 100644 (file)
@@ -176,10 +176,6 @@ static const struct eth_dev_ops eth_em_ops = {
        .vlan_offload_set     = eth_em_vlan_offload_set,
        .rx_queue_setup       = eth_em_rx_queue_setup,
        .rx_queue_release     = eth_em_rx_queue_release,
-       .rx_queue_count       = eth_em_rx_queue_count,
-       .rx_descriptor_done   = eth_em_rx_descriptor_done,
-       .rx_descriptor_status = eth_em_rx_descriptor_status,
-       .tx_descriptor_status = eth_em_tx_descriptor_status,
        .tx_queue_setup       = eth_em_tx_queue_setup,
        .tx_queue_release     = eth_em_tx_queue_release,
        .rx_queue_intr_enable = eth_em_rx_queue_intr_enable,
@@ -250,6 +246,10 @@ eth_em_dev_init(struct rte_eth_dev *eth_dev)
                E1000_DEV_PRIVATE_TO_VFTA(eth_dev->data->dev_private);
 
        eth_dev->dev_ops = &eth_em_ops;
+       eth_dev->rx_queue_count = eth_em_rx_queue_count;
+       eth_dev->rx_descriptor_done   = eth_em_rx_descriptor_done;
+       eth_dev->rx_descriptor_status = eth_em_rx_descriptor_status;
+       eth_dev->tx_descriptor_status = eth_em_tx_descriptor_status;
        eth_dev->rx_pkt_burst = (eth_rx_burst_t)&eth_em_recv_pkts;
        eth_dev->tx_pkt_burst = (eth_tx_burst_t)&eth_em_xmit_pkts;
        eth_dev->tx_pkt_prepare = (eth_tx_prep_t)&eth_em_prep_pkts;
index a5551e8..fe0cea8 100644 (file)
@@ -380,10 +380,6 @@ static const struct eth_dev_ops eth_igb_ops = {
        .rx_queue_intr_enable = eth_igb_rx_queue_intr_enable,
        .rx_queue_intr_disable = eth_igb_rx_queue_intr_disable,
        .rx_queue_release     = eth_igb_rx_queue_release,
-       .rx_queue_count       = eth_igb_rx_queue_count,
-       .rx_descriptor_done   = eth_igb_rx_descriptor_done,
-       .rx_descriptor_status = eth_igb_rx_descriptor_status,
-       .tx_descriptor_status = eth_igb_tx_descriptor_status,
        .tx_queue_setup       = eth_igb_tx_queue_setup,
        .tx_queue_release     = eth_igb_tx_queue_release,
        .tx_done_cleanup      = eth_igb_tx_done_cleanup,
@@ -441,9 +437,6 @@ static const struct eth_dev_ops igbvf_eth_dev_ops = {
        .dev_supported_ptypes_get = eth_igb_supported_ptypes_get,
        .rx_queue_setup       = eth_igb_rx_queue_setup,
        .rx_queue_release     = eth_igb_rx_queue_release,
-       .rx_descriptor_done   = eth_igb_rx_descriptor_done,
-       .rx_descriptor_status = eth_igb_rx_descriptor_status,
-       .tx_descriptor_status = eth_igb_tx_descriptor_status,
        .tx_queue_setup       = eth_igb_tx_queue_setup,
        .tx_queue_release     = eth_igb_tx_queue_release,
        .tx_done_cleanup      = eth_igb_tx_done_cleanup,
@@ -754,6 +747,10 @@ eth_igb_dev_init(struct rte_eth_dev *eth_dev)
        uint32_t ctrl_ext;
 
        eth_dev->dev_ops = &eth_igb_ops;
+       eth_dev->rx_queue_count = eth_igb_rx_queue_count;
+       eth_dev->rx_descriptor_done   = eth_igb_rx_descriptor_done;
+       eth_dev->rx_descriptor_status = eth_igb_rx_descriptor_status;
+       eth_dev->tx_descriptor_status = eth_igb_tx_descriptor_status;
        eth_dev->rx_pkt_burst = &eth_igb_recv_pkts;
        eth_dev->tx_pkt_burst = &eth_igb_xmit_pkts;
        eth_dev->tx_pkt_prepare = &eth_igb_prep_pkts;
@@ -949,6 +946,9 @@ eth_igbvf_dev_init(struct rte_eth_dev *eth_dev)
        PMD_INIT_FUNC_TRACE();
 
        eth_dev->dev_ops = &igbvf_eth_dev_ops;
+       eth_dev->rx_descriptor_done   = eth_igb_rx_descriptor_done;
+       eth_dev->rx_descriptor_status = eth_igb_rx_descriptor_status;
+       eth_dev->tx_descriptor_status = eth_igb_tx_descriptor_status;
        eth_dev->rx_pkt_burst = &eth_igb_recv_pkts;
        eth_dev->tx_pkt_burst = &eth_igb_xmit_pkts;
        eth_dev->tx_pkt_prepare = &eth_igb_prep_pkts;
index ca75919..2cffa3a 100644 (file)
@@ -1141,8 +1141,6 @@ static const struct eth_dev_ops enicpmd_eth_dev_ops = {
        .tx_queue_stop        = enicpmd_dev_tx_queue_stop,
        .rx_queue_setup       = enicpmd_dev_rx_queue_setup,
        .rx_queue_release     = enicpmd_dev_rx_queue_release,
-       .rx_queue_count       = enicpmd_dev_rx_queue_count,
-       .rx_descriptor_done   = NULL,
        .tx_queue_setup       = enicpmd_dev_tx_queue_setup,
        .tx_queue_release     = enicpmd_dev_tx_queue_release,
        .rx_queue_intr_enable = enicpmd_dev_rx_queue_intr_enable,
@@ -1279,6 +1277,7 @@ static int eth_enicpmd_dev_init(struct rte_eth_dev *eth_dev)
        ENICPMD_FUNC_TRACE();
 
        eth_dev->dev_ops = &enicpmd_eth_dev_ops;
+       eth_dev->rx_queue_count = enicpmd_dev_rx_queue_count;
        eth_dev->rx_pkt_burst = &enic_recv_pkts;
        eth_dev->tx_pkt_burst = &enic_xmit_pkts;
        eth_dev->tx_pkt_prepare = &enic_prep_pkts;
index fd92792..e6043e1 100644 (file)
@@ -2855,10 +2855,6 @@ static const struct eth_dev_ops fm10k_eth_dev_ops = {
        .rx_queue_release       = fm10k_rx_queue_release,
        .tx_queue_setup         = fm10k_tx_queue_setup,
        .tx_queue_release       = fm10k_tx_queue_release,
-       .rx_queue_count         = fm10k_dev_rx_queue_count,
-       .rx_descriptor_done     = fm10k_dev_rx_descriptor_done,
-       .rx_descriptor_status = fm10k_dev_rx_descriptor_status,
-       .tx_descriptor_status = fm10k_dev_tx_descriptor_status,
        .rx_queue_intr_enable   = fm10k_dev_rx_queue_intr_enable,
        .rx_queue_intr_disable  = fm10k_dev_rx_queue_intr_disable,
        .reta_update            = fm10k_reta_update,
@@ -3055,6 +3051,10 @@ eth_fm10k_dev_init(struct rte_eth_dev *dev)
        PMD_INIT_FUNC_TRACE();
 
        dev->dev_ops = &fm10k_eth_dev_ops;
+       dev->rx_queue_count = fm10k_dev_rx_queue_count;
+       dev->rx_descriptor_done = fm10k_dev_rx_descriptor_done;
+       dev->rx_descriptor_status = fm10k_dev_rx_descriptor_status;
+       dev->tx_descriptor_status = fm10k_dev_tx_descriptor_status;
        dev->rx_pkt_burst = &fm10k_recv_pkts;
        dev->tx_pkt_burst = &fm10k_xmit_pkts;
        dev->tx_pkt_prepare = &fm10k_prep_pkts;
index 8414472..80efd06 100644 (file)
@@ -474,10 +474,6 @@ static const struct eth_dev_ops i40e_eth_dev_ops = {
        .rx_queue_intr_enable         = i40e_dev_rx_queue_intr_enable,
        .rx_queue_intr_disable        = i40e_dev_rx_queue_intr_disable,
        .rx_queue_release             = i40e_dev_rx_queue_release,
-       .rx_queue_count               = i40e_dev_rx_queue_count,
-       .rx_descriptor_done           = i40e_dev_rx_descriptor_done,
-       .rx_descriptor_status         = i40e_dev_rx_descriptor_status,
-       .tx_descriptor_status         = i40e_dev_tx_descriptor_status,
        .tx_queue_setup               = i40e_dev_tx_queue_setup,
        .tx_queue_release             = i40e_dev_tx_queue_release,
        .dev_led_on                   = i40e_dev_led_on,
@@ -1448,6 +1444,10 @@ eth_i40e_dev_init(struct rte_eth_dev *dev, void *init_params __rte_unused)
        PMD_INIT_FUNC_TRACE();
 
        dev->dev_ops = &i40e_eth_dev_ops;
+       dev->rx_queue_count = i40e_dev_rx_queue_count;
+       dev->rx_descriptor_done = i40e_dev_rx_descriptor_done;
+       dev->rx_descriptor_status = i40e_dev_rx_descriptor_status;
+       dev->tx_descriptor_status = i40e_dev_tx_descriptor_status;
        dev->rx_pkt_burst = i40e_recv_pkts;
        dev->tx_pkt_burst = i40e_xmit_pkts;
        dev->tx_pkt_prepare = i40e_prep_pkts;
index b755350..be4b28f 100644 (file)
@@ -199,12 +199,8 @@ static const struct eth_dev_ops i40evf_eth_dev_ops = {
        .rx_queue_release     = i40e_dev_rx_queue_release,
        .rx_queue_intr_enable = i40evf_dev_rx_queue_intr_enable,
        .rx_queue_intr_disable = i40evf_dev_rx_queue_intr_disable,
-       .rx_descriptor_done   = i40e_dev_rx_descriptor_done,
-       .rx_descriptor_status = i40e_dev_rx_descriptor_status,
-       .tx_descriptor_status = i40e_dev_tx_descriptor_status,
        .tx_queue_setup       = i40e_dev_tx_queue_setup,
        .tx_queue_release     = i40e_dev_tx_queue_release,
-       .rx_queue_count       = i40e_dev_rx_queue_count,
        .rxq_info_get         = i40e_rxq_info_get,
        .txq_info_get         = i40e_txq_info_get,
        .mac_addr_add         = i40evf_add_mac_addr,
@@ -1561,6 +1557,10 @@ i40evf_dev_init(struct rte_eth_dev *eth_dev)
 
        /* assign ops func pointer */
        eth_dev->dev_ops = &i40evf_eth_dev_ops;
+       eth_dev->rx_queue_count       = i40e_dev_rx_queue_count;
+       eth_dev->rx_descriptor_done   = i40e_dev_rx_descriptor_done;
+       eth_dev->rx_descriptor_status = i40e_dev_rx_descriptor_status;
+       eth_dev->tx_descriptor_status = i40e_dev_tx_descriptor_status;
        eth_dev->rx_pkt_burst = &i40e_recv_pkts;
        eth_dev->tx_pkt_burst = &i40e_xmit_pkts;
 
index 8e1d8a8..e1ff38e 100644 (file)
@@ -117,9 +117,6 @@ static const struct eth_dev_ops iavf_eth_dev_ops = {
        .rss_hash_conf_get          = iavf_dev_rss_hash_conf_get,
        .rxq_info_get               = iavf_dev_rxq_info_get,
        .txq_info_get               = iavf_dev_txq_info_get,
-       .rx_queue_count             = iavf_dev_rxq_count,
-       .rx_descriptor_status       = iavf_dev_rx_desc_status,
-       .tx_descriptor_status       = iavf_dev_tx_desc_status,
        .mtu_set                    = iavf_dev_mtu_set,
        .rx_queue_intr_enable       = iavf_dev_rx_queue_intr_enable,
        .rx_queue_intr_disable      = iavf_dev_rx_queue_intr_disable,
@@ -1383,6 +1380,9 @@ iavf_dev_init(struct rte_eth_dev *eth_dev)
 
        /* assign ops func pointer */
        eth_dev->dev_ops = &iavf_eth_dev_ops;
+       eth_dev->rx_queue_count = iavf_dev_rxq_count;
+       eth_dev->rx_descriptor_status = iavf_dev_rx_desc_status;
+       eth_dev->tx_descriptor_status = iavf_dev_tx_desc_status;
        eth_dev->rx_pkt_burst = &iavf_recv_pkts;
        eth_dev->tx_pkt_burst = &iavf_xmit_pkts;
        eth_dev->tx_pkt_prepare = &iavf_prep_pkts;
index c5dac2e..c8b16c7 100644 (file)
@@ -205,9 +205,6 @@ static const struct eth_dev_ops ice_eth_dev_ops = {
        .tx_burst_mode_get            = ice_tx_burst_mode_get,
        .get_eeprom_length            = ice_get_eeprom_length,
        .get_eeprom                   = ice_get_eeprom,
-       .rx_queue_count               = ice_rx_queue_count,
-       .rx_descriptor_status         = ice_rx_descriptor_status,
-       .tx_descriptor_status         = ice_tx_descriptor_status,
        .stats_get                    = ice_stats_get,
        .stats_reset                  = ice_stats_reset,
        .xstats_get                   = ice_xstats_get,
@@ -2163,6 +2160,9 @@ ice_dev_init(struct rte_eth_dev *dev)
        int ret;
 
        dev->dev_ops = &ice_eth_dev_ops;
+       dev->rx_queue_count = ice_rx_queue_count;
+       dev->rx_descriptor_status = ice_rx_descriptor_status;
+       dev->tx_descriptor_status = ice_tx_descriptor_status;
        dev->rx_pkt_burst = ice_recv_pkts;
        dev->tx_pkt_burst = ice_xmit_pkts;
        dev->tx_pkt_prepare = ice_prep_pkts;
index 6ab3ee9..aa37c11 100644 (file)
@@ -272,10 +272,6 @@ static const struct eth_dev_ops eth_igc_ops = {
 
        .rx_queue_setup         = eth_igc_rx_queue_setup,
        .rx_queue_release       = eth_igc_rx_queue_release,
-       .rx_queue_count         = eth_igc_rx_queue_count,
-       .rx_descriptor_done     = eth_igc_rx_descriptor_done,
-       .rx_descriptor_status   = eth_igc_rx_descriptor_status,
-       .tx_descriptor_status   = eth_igc_tx_descriptor_status,
        .tx_queue_setup         = eth_igc_tx_queue_setup,
        .tx_queue_release       = eth_igc_tx_queue_release,
        .tx_done_cleanup        = eth_igc_tx_done_cleanup,
@@ -1227,6 +1223,10 @@ eth_igc_dev_init(struct rte_eth_dev *dev)
 
        PMD_INIT_FUNC_TRACE();
        dev->dev_ops = &eth_igc_ops;
+       dev->rx_descriptor_done = eth_igc_rx_descriptor_done;
+       dev->rx_queue_count = eth_igc_rx_queue_count;
+       dev->rx_descriptor_status = eth_igc_rx_descriptor_status;
+       dev->tx_descriptor_status = eth_igc_tx_descriptor_status;
 
        /*
         * for secondary processes, we don't initialize any further as primary
index d958247..337ce90 100644 (file)
@@ -545,10 +545,6 @@ static const struct eth_dev_ops ixgbe_eth_dev_ops = {
        .rx_queue_intr_enable = ixgbe_dev_rx_queue_intr_enable,
        .rx_queue_intr_disable = ixgbe_dev_rx_queue_intr_disable,
        .rx_queue_release     = ixgbe_dev_rx_queue_release,
-       .rx_queue_count       = ixgbe_dev_rx_queue_count,
-       .rx_descriptor_done   = ixgbe_dev_rx_descriptor_done,
-       .rx_descriptor_status = ixgbe_dev_rx_descriptor_status,
-       .tx_descriptor_status = ixgbe_dev_tx_descriptor_status,
        .tx_queue_setup       = ixgbe_dev_tx_queue_setup,
        .tx_queue_release     = ixgbe_dev_tx_queue_release,
        .dev_led_on           = ixgbe_dev_led_on,
@@ -622,9 +618,6 @@ static const struct eth_dev_ops ixgbevf_eth_dev_ops = {
        .vlan_offload_set     = ixgbevf_vlan_offload_set,
        .rx_queue_setup       = ixgbe_dev_rx_queue_setup,
        .rx_queue_release     = ixgbe_dev_rx_queue_release,
-       .rx_descriptor_done   = ixgbe_dev_rx_descriptor_done,
-       .rx_descriptor_status = ixgbe_dev_rx_descriptor_status,
-       .tx_descriptor_status = ixgbe_dev_tx_descriptor_status,
        .tx_queue_setup       = ixgbe_dev_tx_queue_setup,
        .tx_queue_release     = ixgbe_dev_tx_queue_release,
        .rx_queue_intr_enable = ixgbevf_dev_rx_queue_intr_enable,
@@ -1091,6 +1084,10 @@ eth_ixgbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)
        ixgbe_dev_macsec_setting_reset(eth_dev);
 
        eth_dev->dev_ops = &ixgbe_eth_dev_ops;
+       eth_dev->rx_queue_count       = ixgbe_dev_rx_queue_count;
+       eth_dev->rx_descriptor_done   = ixgbe_dev_rx_descriptor_done;
+       eth_dev->rx_descriptor_status = ixgbe_dev_rx_descriptor_status;
+       eth_dev->tx_descriptor_status = ixgbe_dev_tx_descriptor_status;
        eth_dev->rx_pkt_burst = &ixgbe_recv_pkts;
        eth_dev->tx_pkt_burst = &ixgbe_xmit_pkts;
        eth_dev->tx_pkt_prepare = &ixgbe_prep_pkts;
@@ -1570,6 +1567,9 @@ eth_ixgbevf_dev_init(struct rte_eth_dev *eth_dev)
        PMD_INIT_FUNC_TRACE();
 
        eth_dev->dev_ops = &ixgbevf_eth_dev_ops;
+       eth_dev->rx_descriptor_done   = ixgbe_dev_rx_descriptor_done;
+       eth_dev->rx_descriptor_status = ixgbe_dev_rx_descriptor_status;
+       eth_dev->tx_descriptor_status = ixgbe_dev_tx_descriptor_status;
        eth_dev->rx_pkt_burst = &ixgbe_recv_pkts;
        eth_dev->tx_pkt_burst = &ixgbe_xmit_pkts;
 
index ae871fe..41db75e 100644 (file)
@@ -602,6 +602,8 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev,
                }
                eth_dev->device = dpdk_dev;
                eth_dev->dev_ops = &mlx5_os_dev_sec_ops;
+               eth_dev->rx_descriptor_status = mlx5_rx_descriptor_status;
+               eth_dev->tx_descriptor_status = mlx5_tx_descriptor_status;
                err = mlx5_proc_priv_init(eth_dev);
                if (err)
                        return NULL;
@@ -1209,6 +1211,9 @@ err_secondary:
        eth_dev->rx_pkt_burst = removed_rx_burst;
        eth_dev->tx_pkt_burst = removed_tx_burst;
        eth_dev->dev_ops = &mlx5_os_dev_ops;
+       eth_dev->rx_descriptor_status = mlx5_rx_descriptor_status;
+       eth_dev->tx_descriptor_status = mlx5_tx_descriptor_status;
+       eth_dev->rx_queue_count = mlx5_rx_queue_count;
        /* Register MAC address. */
        claim_zero(mlx5_mac_addr_add(eth_dev, &mac, 0, 0));
        if (config->vf && config->vf_nl_en)
@@ -2406,13 +2411,10 @@ const struct eth_dev_ops mlx5_os_dev_ops = {
        .rss_hash_update = mlx5_rss_hash_update,
        .rss_hash_conf_get = mlx5_rss_hash_conf_get,
        .filter_ctrl = mlx5_dev_filter_ctrl,
-       .rx_descriptor_status = mlx5_rx_descriptor_status,
-       .tx_descriptor_status = mlx5_tx_descriptor_status,
        .rxq_info_get = mlx5_rxq_info_get,
        .txq_info_get = mlx5_txq_info_get,
        .rx_burst_mode_get = mlx5_rx_burst_mode_get,
        .tx_burst_mode_get = mlx5_tx_burst_mode_get,
-       .rx_queue_count = mlx5_rx_queue_count,
        .rx_queue_intr_enable = mlx5_rx_intr_enable,
        .rx_queue_intr_disable = mlx5_rx_intr_disable,
        .is_removed = mlx5_is_removed,
@@ -2437,8 +2439,6 @@ const struct eth_dev_ops mlx5_os_dev_sec_ops = {
        .rx_queue_stop = mlx5_rx_queue_stop,
        .tx_queue_start = mlx5_tx_queue_start,
        .tx_queue_stop = mlx5_tx_queue_stop,
-       .rx_descriptor_status = mlx5_rx_descriptor_status,
-       .tx_descriptor_status = mlx5_tx_descriptor_status,
        .rxq_info_get = mlx5_rxq_info_get,
        .txq_info_get = mlx5_txq_info_get,
        .rx_burst_mode_get = mlx5_rx_burst_mode_get,
@@ -2490,8 +2490,6 @@ const struct eth_dev_ops mlx5_os_dev_ops_isolate = {
        .vlan_strip_queue_set = mlx5_vlan_strip_queue_set,
        .vlan_offload_set = mlx5_vlan_offload_set,
        .filter_ctrl = mlx5_dev_filter_ctrl,
-       .rx_descriptor_status = mlx5_rx_descriptor_status,
-       .tx_descriptor_status = mlx5_tx_descriptor_status,
        .rxq_info_get = mlx5_rxq_info_get,
        .txq_info_get = mlx5_txq_info_get,
        .rx_burst_mode_get = mlx5_rx_burst_mode_get,
index 9aad24e..972b99a 100644 (file)
@@ -5131,6 +5131,10 @@ mlx5_flow_isolate(struct rte_eth_dev *dev,
                dev->dev_ops = &mlx5_os_dev_ops_isolate;
        else
                dev->dev_ops = &mlx5_os_dev_ops;
+
+       dev->rx_descriptor_status = mlx5_rx_descriptor_status;
+       dev->tx_descriptor_status = mlx5_tx_descriptor_status;
+
        return 0;
 }
 
index fd91c0e..229c1b9 100644 (file)
@@ -871,11 +871,8 @@ static const struct eth_dev_ops hn_eth_dev_ops = {
        .tx_queue_setup         = hn_dev_tx_queue_setup,
        .tx_queue_release       = hn_dev_tx_queue_release,
        .tx_done_cleanup        = hn_dev_tx_done_cleanup,
-       .tx_descriptor_status   = hn_dev_tx_descriptor_status,
        .rx_queue_setup         = hn_dev_rx_queue_setup,
        .rx_queue_release       = hn_dev_rx_queue_release,
-       .rx_queue_count         = hn_dev_rx_queue_count,
-       .rx_descriptor_status   = hn_dev_rx_queue_status,
        .link_update            = hn_dev_link_update,
        .stats_get              = hn_dev_stats_get,
        .stats_reset            = hn_dev_stats_reset,
@@ -936,6 +933,9 @@ eth_hn_dev_init(struct rte_eth_dev *eth_dev)
 
        vmbus = container_of(device, struct rte_vmbus_device, device);
        eth_dev->dev_ops = &hn_eth_dev_ops;
+       eth_dev->rx_queue_count = hn_dev_rx_queue_count;
+       eth_dev->rx_descriptor_status = hn_dev_rx_queue_status;
+       eth_dev->tx_descriptor_status = hn_dev_tx_descriptor_status;
        eth_dev->tx_pkt_burst = &hn_xmit_pkts;
        eth_dev->rx_pkt_burst = &hn_recv_pkts;
 
index 1cf949a..d608003 100644 (file)
@@ -2701,7 +2701,6 @@ static const struct eth_dev_ops nfp_net_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,
-       .rx_queue_count         = nfp_net_rx_queue_count,
        .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,
@@ -2785,6 +2784,7 @@ nfp_net_init(struct rte_eth_dev *eth_dev)
        }
 
        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;
        eth_dev->tx_pkt_burst = &nfp_net_xmit_pkts;
 
index 33b72bd..c06e32f 100644 (file)
@@ -2272,10 +2272,6 @@ static const struct eth_dev_ops otx2_eth_dev_ops = {
        .txq_info_get             = otx2_nix_txq_info_get,
        .rx_burst_mode_get        = otx2_rx_burst_mode_get,
        .tx_burst_mode_get        = otx2_tx_burst_mode_get,
-       .rx_queue_count           = otx2_nix_rx_queue_count,
-       .rx_descriptor_done       = otx2_nix_rx_descriptor_done,
-       .rx_descriptor_status     = otx2_nix_rx_descriptor_status,
-       .tx_descriptor_status     = otx2_nix_tx_descriptor_status,
        .tx_done_cleanup          = otx2_nix_tx_done_cleanup,
        .set_queue_rate_limit     = otx2_nix_tm_set_queue_rate_limit,
        .pool_ops_supported       = otx2_nix_pool_ops_supported,
@@ -2382,6 +2378,10 @@ otx2_eth_dev_init(struct rte_eth_dev *eth_dev)
        int rc, max_entries;
 
        eth_dev->dev_ops = &otx2_eth_dev_ops;
+       eth_dev->rx_descriptor_done = otx2_nix_rx_descriptor_done;
+       eth_dev->rx_queue_count = otx2_nix_rx_queue_count;
+       eth_dev->rx_descriptor_status = otx2_nix_rx_descriptor_status;
+       eth_dev->tx_descriptor_status = otx2_nix_tx_descriptor_status;
 
        /* For secondary processes, the primary has done all the work */
        if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
index 70d48e4..59f1746 100644 (file)
@@ -2386,7 +2386,6 @@ static const struct eth_dev_ops qede_eth_dev_ops = {
        .dev_infos_get = qede_dev_info_get,
        .rx_queue_setup = qede_rx_queue_setup,
        .rx_queue_release = qede_rx_queue_release,
-       .rx_descriptor_status = qede_rx_descriptor_status,
        .tx_queue_setup = qede_tx_queue_setup,
        .tx_queue_release = qede_tx_queue_release,
        .dev_start = qede_dev_start,
@@ -2431,7 +2430,6 @@ static const struct eth_dev_ops qede_eth_vf_dev_ops = {
        .dev_infos_get = qede_dev_info_get,
        .rx_queue_setup = qede_rx_queue_setup,
        .rx_queue_release = qede_rx_queue_release,
-       .rx_descriptor_status = qede_rx_descriptor_status,
        .tx_queue_setup = qede_tx_queue_setup,
        .tx_queue_release = qede_tx_queue_release,
        .dev_start = qede_dev_start,
@@ -2670,6 +2668,7 @@ static int qede_common_dev_init(struct rte_eth_dev *eth_dev, bool is_vf)
        }
 
        eth_dev->dev_ops = (is_vf) ? &qede_eth_vf_dev_ops : &qede_eth_dev_ops;
+       eth_dev->rx_descriptor_status = qede_rx_descriptor_status;
 
        adapter->num_tx_queues = 0;
        adapter->num_rx_queues = 0;
index acee3e4..1a58e0d 100644 (file)
@@ -1819,10 +1819,6 @@ static const struct eth_dev_ops sfc_eth_dev_ops = {
        .tx_queue_stop                  = sfc_tx_queue_stop,
        .rx_queue_setup                 = sfc_rx_queue_setup,
        .rx_queue_release               = sfc_rx_queue_release,
-       .rx_queue_count                 = sfc_rx_queue_count,
-       .rx_descriptor_done             = sfc_rx_descriptor_done,
-       .rx_descriptor_status           = sfc_rx_descriptor_status,
-       .tx_descriptor_status           = sfc_tx_descriptor_status,
        .rx_queue_intr_enable           = sfc_rx_queue_intr_enable,
        .rx_queue_intr_disable          = sfc_rx_queue_intr_disable,
        .tx_queue_setup                 = sfc_tx_queue_setup,
@@ -1977,6 +1973,10 @@ sfc_eth_dev_set_ops(struct rte_eth_dev *dev)
        dev->tx_pkt_prepare = dp_tx->pkt_prepare;
        dev->tx_pkt_burst = dp_tx->pkt_burst;
 
+       dev->rx_queue_count = sfc_rx_queue_count;
+       dev->rx_descriptor_done = sfc_rx_descriptor_done;
+       dev->rx_descriptor_status = sfc_rx_descriptor_status;
+       dev->tx_descriptor_status = sfc_tx_descriptor_status;
        dev->dev_ops = &sfc_eth_dev_ops;
 
        return 0;
@@ -2017,10 +2017,6 @@ sfc_eth_dev_clear_ops(struct rte_eth_dev *dev)
 
 static const struct eth_dev_ops sfc_eth_dev_secondary_ops = {
        .dev_supported_ptypes_get       = sfc_dev_supported_ptypes_get,
-       .rx_queue_count                 = sfc_rx_queue_count,
-       .rx_descriptor_done             = sfc_rx_descriptor_done,
-       .rx_descriptor_status           = sfc_rx_descriptor_status,
-       .tx_descriptor_status           = sfc_tx_descriptor_status,
        .reta_query                     = sfc_dev_rss_reta_query,
        .rss_hash_conf_get              = sfc_dev_rss_hash_conf_get,
        .rxq_info_get                   = sfc_rx_queue_info_get,
@@ -2085,6 +2081,10 @@ sfc_eth_dev_secondary_init(struct rte_eth_dev *dev, uint32_t logtype_main)
        dev->rx_pkt_burst = dp_rx->pkt_burst;
        dev->tx_pkt_prepare = dp_tx->pkt_prepare;
        dev->tx_pkt_burst = dp_tx->pkt_burst;
+       dev->rx_queue_count = sfc_rx_queue_count;
+       dev->rx_descriptor_done = sfc_rx_descriptor_done;
+       dev->rx_descriptor_status = sfc_rx_descriptor_status;
+       dev->tx_descriptor_status = sfc_tx_descriptor_status;
        dev->dev_ops = &sfc_eth_dev_secondary_ops;
 
        return 0;
index d955a7e..959c8e4 100644 (file)
@@ -2029,7 +2029,6 @@ static const struct eth_dev_ops nicvf_eth_dev_ops = {
        .tx_queue_stop            = nicvf_dev_tx_queue_stop,
        .rx_queue_setup           = nicvf_dev_rx_queue_setup,
        .rx_queue_release         = nicvf_dev_rx_queue_release,
-       .rx_queue_count           = nicvf_dev_rx_queue_count,
        .tx_queue_setup           = nicvf_dev_tx_queue_setup,
        .tx_queue_release         = nicvf_dev_tx_queue_release,
        .dev_set_link_up          = nicvf_dev_set_link_up,
@@ -2134,6 +2133,7 @@ nicvf_eth_dev_init(struct rte_eth_dev *eth_dev)
        PMD_INIT_FUNC_TRACE();
 
        eth_dev->dev_ops = &nicvf_eth_dev_ops;
+       eth_dev->rx_queue_count = nicvf_dev_rx_queue_count;
 
        /* For secondary processes, the primary has done all the work */
        if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
index e55278a..fa36560 100644 (file)
@@ -1385,7 +1385,6 @@ static const struct eth_dev_ops ops = {
        .rx_queue_release = eth_queue_release,
        .tx_queue_release = eth_queue_release,
        .tx_done_cleanup = eth_tx_done_cleanup,
-       .rx_queue_count = eth_rx_queue_count,
        .link_update = eth_link_update,
        .stats_get = eth_stats_get,
        .stats_reset = eth_stats_reset,
@@ -1447,6 +1446,7 @@ eth_dev_vhost_create(struct rte_vdev_device *dev, char *iface_name,
        data->all_multicast = 1;
 
        eth_dev->dev_ops = &ops;
+       eth_dev->rx_queue_count = eth_rx_queue_count;
 
        /* finally assign rx and tx ops */
        eth_dev->rx_pkt_burst = eth_vhost_rx;
index dc0093b..4f2fa0d 100644 (file)
@@ -920,7 +920,6 @@ static const struct eth_dev_ops virtio_eth_dev_ops = {
        .rx_queue_intr_enable    = virtio_dev_rx_queue_intr_enable,
        .rx_queue_intr_disable   = virtio_dev_rx_queue_intr_disable,
        .rx_queue_release        = virtio_dev_queue_release,
-       .rx_descriptor_done      = virtio_dev_rx_queue_done,
        .tx_queue_setup          = virtio_dev_tx_queue_setup,
        .tx_queue_release        = virtio_dev_queue_release,
        /* collect stats per queue */
@@ -1903,6 +1902,7 @@ eth_virtio_dev_init(struct rte_eth_dev *eth_dev)
        }
 
        eth_dev->dev_ops = &virtio_eth_dev_ops;
+       eth_dev->rx_descriptor_done = virtio_dev_rx_queue_done;
 
        if (rte_eal_process_type() == RTE_PROC_SECONDARY) {
                if (!hw->virtio_user_dev) {
index eb6cd01..b6f26a5 100644 (file)
@@ -4545,11 +4545,11 @@ rte_eth_rx_queue_count(uint16_t port_id, uint16_t queue_id)
 
        RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -EINVAL);
        dev = &rte_eth_devices[port_id];
-       RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rx_queue_count, -ENOTSUP);
+       RTE_FUNC_PTR_OR_ERR_RET(*dev->rx_queue_count, -ENOTSUP);
        if (queue_id >= dev->data->nb_rx_queues)
                return -EINVAL;
 
-       return (int)(*dev->dev_ops->rx_queue_count)(dev, queue_id);
+       return (int)(*dev->rx_queue_count)(dev, queue_id);
 }
 
 /**
@@ -4573,9 +4573,8 @@ rte_eth_rx_descriptor_done(uint16_t port_id, uint16_t queue_id, uint16_t offset)
 {
        struct rte_eth_dev *dev = &rte_eth_devices[port_id];
        RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
-       RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rx_descriptor_done, -ENOTSUP);
-       return (*dev->dev_ops->rx_descriptor_done)( \
-               dev->data->rx_queues[queue_id], offset);
+       RTE_FUNC_PTR_OR_ERR_RET(*dev->rx_descriptor_done, -ENOTSUP);
+       return (*dev->rx_descriptor_done)(dev->data->rx_queues[queue_id], offset);
 }
 
 #define RTE_ETH_RX_DESC_AVAIL    0 /**< Desc available for hw. */
@@ -4630,10 +4629,10 @@ rte_eth_rx_descriptor_status(uint16_t port_id, uint16_t queue_id,
        if (queue_id >= dev->data->nb_rx_queues)
                return -ENODEV;
 #endif
-       RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rx_descriptor_status, -ENOTSUP);
+       RTE_FUNC_PTR_OR_ERR_RET(*dev->rx_descriptor_status, -ENOTSUP);
        rxq = dev->data->rx_queues[queue_id];
 
-       return (*dev->dev_ops->rx_descriptor_status)(rxq, offset);
+       return (*dev->rx_descriptor_status)(rxq, offset);
 }
 
 #define RTE_ETH_TX_DESC_FULL    0 /**< Desc filled for hw, waiting xmit. */
@@ -4687,10 +4686,10 @@ static inline int rte_eth_tx_descriptor_status(uint16_t port_id,
        if (queue_id >= dev->data->nb_tx_queues)
                return -ENODEV;
 #endif
-       RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->tx_descriptor_status, -ENOTSUP);
+       RTE_FUNC_PTR_OR_ERR_RET(*dev->tx_descriptor_status, -ENOTSUP);
        txq = dev->data->tx_queues[queue_id];
 
-       return (*dev->dev_ops->tx_descriptor_status)(txq, offset);
+       return (*dev->tx_descriptor_status)(txq, offset);
 }
 
 /**
index 78c7902..1ffcb88 100644 (file)
@@ -660,13 +660,6 @@ struct eth_dev_ops {
        eth_queue_stop_t           tx_queue_stop; /**< Stop TX for a queue. */
        eth_rx_queue_setup_t       rx_queue_setup;/**< Set up device RX queue. */
        eth_queue_release_t        rx_queue_release; /**< Release RX queue. */
-       eth_rx_queue_count_t       rx_queue_count;
-       /**< Get the number of used RX descriptors. */
-       eth_rx_descriptor_done_t   rx_descriptor_done; /**< Check rxd DD bit. */
-       eth_rx_descriptor_status_t rx_descriptor_status;
-       /**< Check the status of a Rx descriptor. */
-       eth_tx_descriptor_status_t tx_descriptor_status;
-       /**< Check the status of a Tx descriptor. */
        /*
         * Static inline functions use functions ABOVE this comment.
         * New dev_ops functions should be added BELOW to avoid breaking ABI.
@@ -782,6 +775,12 @@ struct rte_eth_dev {
        eth_rx_burst_t rx_pkt_burst; /**< Pointer to PMD receive function. */
        eth_tx_burst_t tx_pkt_burst; /**< Pointer to PMD transmit function. */
        eth_tx_prep_t tx_pkt_prepare; /**< Pointer to PMD transmit prepare function. */
+
+       eth_rx_queue_count_t       rx_queue_count; /**< Get the number of used RX descriptors. */
+       eth_rx_descriptor_done_t   rx_descriptor_done;   /**< Check rxd DD bit. */
+       eth_rx_descriptor_status_t rx_descriptor_status; /**< Check the status of a Rx descriptor. */
+       eth_tx_descriptor_status_t tx_descriptor_status; /**< Check the status of a Tx descriptor. */
+
        /**
         * Next two fields are per-device data but *data is shared between
         * primary and secondary processes and *process_private is per-process