From: Gowrishankar Muthukrishnan <gmuthukri...@marvell.com>

Add DMA dev stats.

Signed-off-by: Anoob Joseph <ano...@marvell.com>
Signed-off-by: Gowrishankar Muthukrishnan <gmuthukri...@marvell.com>
Signed-off-by: Vidya Sagar Velumuri <vvelum...@marvell.com>
---
 drivers/dma/odm/odm_dmadev.c | 63 ++++++++++++++++++++++++++++++++++--
 1 file changed, 61 insertions(+), 2 deletions(-)

diff --git a/drivers/dma/odm/odm_dmadev.c b/drivers/dma/odm/odm_dmadev.c
index 8c705978fe..13b2588246 100644
--- a/drivers/dma/odm/odm_dmadev.c
+++ b/drivers/dma/odm/odm_dmadev.c
@@ -87,14 +87,73 @@ odm_dmadev_close(struct rte_dma_dev *dev)
        return 0;
 }
 
+static int
+odm_stats_get(const struct rte_dma_dev *dev, uint16_t vchan, struct 
rte_dma_stats *rte_stats,
+             uint32_t size)
+{
+       struct odm_dev *odm = dev->fp_obj->dev_private;
+
+       if (size < sizeof(rte_stats))
+               return -EINVAL;
+       if (rte_stats == NULL)
+               return -EINVAL;
+
+       if (vchan != RTE_DMA_ALL_VCHAN) {
+               struct rte_dma_stats *stats = (struct rte_dma_stats 
*)&odm->vq[vchan].stats;
+
+               *rte_stats = *stats;
+       } else {
+               int i;
+
+               for (i = 0; i < odm->num_qs; i++) {
+                       struct rte_dma_stats *stats = (struct rte_dma_stats 
*)&odm->vq[i].stats;
+
+                       rte_stats->submitted += stats->submitted;
+                       rte_stats->completed += stats->completed;
+                       rte_stats->errors += stats->errors;
+               }
+       }
+
+       return 0;
+}
+
+static void
+odm_vq_stats_reset(struct vq_stats *vq_stats)
+{
+       vq_stats->completed_offset += vq_stats->completed;
+       vq_stats->completed = 0;
+       vq_stats->errors = 0;
+       vq_stats->submitted = 0;
+}
+
+static int
+odm_stats_reset(struct rte_dma_dev *dev, uint16_t vchan)
+{
+       struct odm_dev *odm = dev->fp_obj->dev_private;
+       struct vq_stats *vq_stats;
+       int i;
+
+       if (vchan != RTE_DMA_ALL_VCHAN) {
+               vq_stats = &odm->vq[vchan].stats;
+               odm_vq_stats_reset(vq_stats);
+       } else {
+               for (i = 0; i < odm->num_qs; i++) {
+                       vq_stats = &odm->vq[i].stats;
+                       odm_vq_stats_reset(vq_stats);
+               }
+       }
+
+       return 0;
+}
+
 static const struct rte_dma_dev_ops odm_dmadev_ops = {
        .dev_close = odm_dmadev_close,
        .dev_configure = odm_dmadev_configure,
        .dev_info_get = odm_dmadev_info_get,
        .dev_start = odm_dmadev_start,
        .dev_stop = odm_dmadev_stop,
-       .stats_get = NULL,
-       .stats_reset = NULL,
+       .stats_get = odm_stats_get,
+       .stats_reset = odm_stats_reset,
        .vchan_setup = odm_dmadev_vchan_setup,
 };
 
-- 
2.25.1

Reply via email to