Signed-off-by: Hemant Agrawal <hemant.agra...@nxp.com>
---
 drivers/bus/dpaa/base/qbman/qman.c        | 22 ++++++++++++++++++++++
 drivers/bus/dpaa/include/fsl_qman.h       |  7 +++++++
 drivers/bus/dpaa/rte_bus_dpaa_version.map |  1 +
 3 files changed, 30 insertions(+)

diff --git a/drivers/bus/dpaa/base/qbman/qman.c 
b/drivers/bus/dpaa/base/qbman/qman.c
index 6ae4bb3..b2f82a3 100644
--- a/drivers/bus/dpaa/base/qbman/qman.c
+++ b/drivers/bus/dpaa/base/qbman/qman.c
@@ -1750,6 +1750,28 @@ int qman_query_fq_np(struct qman_fq *fq, struct 
qm_mcr_queryfq_np *np)
        return 0;
 }
 
+int qman_query_fq_frm_cnt(struct qman_fq *fq, u32 *frm_cnt)
+{
+       struct qm_mc_command *mcc;
+       struct qm_mc_result *mcr;
+       struct qman_portal *p = get_affine_portal();
+
+       mcc = qm_mc_start(&p->p);
+       mcc->queryfq.fqid = cpu_to_be32(fq->fqid);
+       qm_mc_commit(&p->p, QM_MCC_VERB_QUERYFQ_NP);
+       while (!(mcr = qm_mc_result(&p->p)))
+               cpu_relax();
+       DPAA_ASSERT((mcr->verb & QM_MCR_VERB_MASK) == QM_MCR_VERB_QUERYFQ_NP);
+
+       if (mcr->result == QM_MCR_RESULT_OK)
+               *frm_cnt = be24_to_cpu(mcr->queryfq_np.frm_cnt);
+       else if (mcr->result == QM_MCR_RESULT_ERR_FQID)
+               return -ERANGE;
+       else if (mcr->result != QM_MCR_RESULT_OK)
+               return -EIO;
+       return 0;
+}
+
 int qman_query_wq(u8 query_dedicated, struct qm_mcr_querywq *wq)
 {
        struct qm_mc_command *mcc;
diff --git a/drivers/bus/dpaa/include/fsl_qman.h 
b/drivers/bus/dpaa/include/fsl_qman.h
index c5aef2d..9090b63 100644
--- a/drivers/bus/dpaa/include/fsl_qman.h
+++ b/drivers/bus/dpaa/include/fsl_qman.h
@@ -1649,6 +1649,13 @@ int qman_query_fq_has_pkts(struct qman_fq *fq);
 int qman_query_fq_np(struct qman_fq *fq, struct qm_mcr_queryfq_np *np);
 
 /**
+ * qman_query_fq_frmcnt - Queries fq frame count
+ * @fq: the frame queue object to be queried
+ * @frm_cnt: number of frames in the queue
+ */
+int qman_query_fq_frm_cnt(struct qman_fq *fq, u32 *frm_cnt);
+
+/**
  * qman_query_wq - Queries work queue lengths
  * @query_dedicated: If non-zero, query length of WQs in the channel dedicated
  *             to this software portal. Otherwise, query length of WQs in a
diff --git a/drivers/bus/dpaa/rte_bus_dpaa_version.map 
b/drivers/bus/dpaa/rte_bus_dpaa_version.map
index 4e3afda..212c75f 100644
--- a/drivers/bus/dpaa/rte_bus_dpaa_version.map
+++ b/drivers/bus/dpaa/rte_bus_dpaa_version.map
@@ -73,6 +73,7 @@ DPDK_18.02 {
        qman_create_cgr;
        qman_delete_cgr;
        qman_modify_cgr;
+       qman_query_fq_frm_cnt;
        qman_release_cgrid_range;
        rte_dpaa_portal_fq_close;
        rte_dpaa_portal_fq_init;
-- 
2.7.4

Reply via email to