bus/dpaa: query queue frame count support
authorHemant Agrawal <hemant.agrawal@nxp.com>
Wed, 10 Jan 2018 10:46:35 +0000 (16:16 +0530)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 16 Jan 2018 17:47:49 +0000 (18:47 +0100)
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
drivers/bus/dpaa/base/qbman/qman.c
drivers/bus/dpaa/include/fsl_qman.h
drivers/bus/dpaa/rte_bus_dpaa_version.map

index d8fb25a..ffb008e 100644 (file)
@@ -1722,6 +1722,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;
index 14f5cc5..5baa689 100644 (file)
@@ -1615,6 +1615,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
index 4e3afda..212c75f 100644 (file)
@@ -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;