In the case of virtio, there are many fields in rte_eth_(tx|rxq)_info
struct that aren't set in this function because those fields are
missed in virtqueue struct.

Signed-off-by: Amine Kherbouche <amine.kherbouche at 6wind.com>
---
 drivers/net/virtio/virtio_ethdev.c |   28 ++++++++++++++++++++++++++++
 drivers/net/virtio/virtio_ethdev.h |    4 ++++
 2 files changed, 32 insertions(+)

diff --git a/drivers/net/virtio/virtio_ethdev.c 
b/drivers/net/virtio/virtio_ethdev.c
index 465d3cd..6118913 100644
--- a/drivers/net/virtio/virtio_ethdev.c
+++ b/drivers/net/virtio/virtio_ethdev.c
@@ -580,6 +580,8 @@ static const struct eth_dev_ops virtio_eth_dev_ops = {
        .mac_addr_add            = virtio_mac_addr_add,
        .mac_addr_remove         = virtio_mac_addr_remove,
        .mac_addr_set            = virtio_mac_addr_set,
+       .rxq_info_get            = virtio_rxq_info_get,
+       .txq_info_get            = virtio_txq_info_get,
 };

 static inline int
@@ -1574,4 +1576,30 @@ static struct rte_driver rte_virtio_driver = {
        .init = rte_virtio_pmd_init,
 };

+void
+virtio_rxq_info_get(struct rte_eth_dev *dev, uint16_t queue_id,
+                       struct rte_eth_rxq_info *qinfo)
+{
+       struct virtqueue *rxq;
+
+       rxq = dev->data->rx_queues[queue_id];
+
+       qinfo->nb_desc = rxq->vq_nentries;
+       qinfo->used_desc = rxq->vq_nentries - rxq->vq_free_cnt;
+       qinfo->free_desc= rxq->vq_free_cnt;
+}
+
+void
+virtio_txq_info_get(struct rte_eth_dev *dev, uint16_t queue_id,
+                       struct rte_eth_txq_info *qinfo)
+{
+       struct virtqueue *txq;
+
+       txq = dev->data->tx_queues[queue_id];
+
+       qinfo->nb_desc = txq->vq_nentries;
+       qinfo->used_desc = txq->vq_nentries - txq->vq_free_cnt;
+       qinfo->free_desc= txq->vq_free_cnt;
+}
+
 PMD_REGISTER_DRIVER(rte_virtio_driver);
diff --git a/drivers/net/virtio/virtio_ethdev.h 
b/drivers/net/virtio/virtio_ethdev.h
index 9026d42..1bbe421 100644
--- a/drivers/net/virtio/virtio_ethdev.h
+++ b/drivers/net/virtio/virtio_ethdev.h
@@ -107,7 +107,11 @@ uint16_t virtio_recv_mergeable_pkts(void *rx_queue, struct 
rte_mbuf **rx_pkts,

 uint16_t virtio_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
                uint16_t nb_pkts);
+void virtio_rxq_info_get(struct rte_eth_dev *dev, uint16_t queue_id,
+                        struct rte_eth_rxq_info *qinfo);

+void virtio_txq_info_get(struct rte_eth_dev *dev, uint16_t queue_id,
+                        struct rte_eth_txq_info *qinfo);

 /*
  * The VIRTIO_NET_F_GUEST_TSO[46] features permit the host to send us
-- 
1.7.10.4

Reply via email to