From: Sunil Kumar Kori <sk...@marvell.com>

Implement RoC API to enable or disable HW bandwidth profiles
on CN10K platform.

Signed-off-by: Sunil Kumar Kori <sk...@marvell.com>
---
v5:
 - Fix checkpatch errors
 - Fix patch apply errors

v4:
 - Rebase support on dpdk-next-net-mrvl branch
 - Handled meter action during flow destroy
 - Handled meter cleanup during port shutdown
 
v3:
 - Rebase support on latest DPDK
 - Handled multilevel chaining for tree hierarchy
 - Fix naming convention

v2:
 - Rebase support on latest DPDK
 - Handled multilevel chaining for linear hierarchy
 - Review comments incorporated

 drivers/common/cnxk/roc_nix.h     |  4 ++++
 drivers/common/cnxk/roc_nix_bpf.c | 39 +++++++++++++++++++++++++++++++
 drivers/common/cnxk/version.map   |  1 +
 3 files changed, 44 insertions(+)

diff --git a/drivers/common/cnxk/roc_nix.h b/drivers/common/cnxk/roc_nix.h
index c2cc823516..5b3bf38a82 100644
--- a/drivers/common/cnxk/roc_nix.h
+++ b/drivers/common/cnxk/roc_nix.h
@@ -217,6 +217,7 @@ struct roc_nix_stats_queue {
 struct roc_nix_rq {
        /* Input parameters */
        uint16_t qid;
+       uint16_t bpf_id;
        uint64_t aura_handle;
        bool ipsech_ena;
        uint16_t first_skip;
@@ -602,6 +603,9 @@ int __roc_api roc_nix_bpf_config(struct roc_nix *roc_nix, 
uint16_t id,
                                 enum roc_nix_bpf_level_flag lvl_flag,
                                 struct roc_nix_bpf_cfg *cfg);
 
+int __roc_api roc_nix_bpf_ena_dis(struct roc_nix *roc_nix, uint16_t id,
+                                 struct roc_nix_rq *rq, bool enable);
+
 uint8_t __roc_api
 roc_nix_bpf_level_to_idx(enum roc_nix_bpf_level_flag lvl_flag);
 
diff --git a/drivers/common/cnxk/roc_nix_bpf.c 
b/drivers/common/cnxk/roc_nix_bpf.c
index aa5829ee42..c61a697f1a 100644
--- a/drivers/common/cnxk/roc_nix_bpf.c
+++ b/drivers/common/cnxk/roc_nix_bpf.c
@@ -449,3 +449,42 @@ roc_nix_bpf_config(struct roc_nix *roc_nix, uint16_t id,
 
        return mbox_process(mbox);
 }
+
+int
+roc_nix_bpf_ena_dis(struct roc_nix *roc_nix, uint16_t id, struct roc_nix_rq 
*rq,
+                   bool enable)
+{
+       struct nix *nix = roc_nix_to_nix_priv(roc_nix);
+       struct mbox *mbox = get_mbox(roc_nix);
+       struct nix_cn10k_aq_enq_req *aq;
+       int rc;
+
+       if (roc_model_is_cn9k())
+               return NIX_ERR_HW_NOTSUP;
+
+       if (rq->qid >= nix->nb_rx_queues)
+               return NIX_ERR_QUEUE_INVALID_RANGE;
+
+       aq = mbox_alloc_msg_nix_cn10k_aq_enq(mbox);
+       if (aq == NULL)
+               return -ENOSPC;
+       aq->qidx = rq->qid;
+       aq->ctype = NIX_AQ_CTYPE_RQ;
+       aq->op = NIX_AQ_INSTOP_WRITE;
+
+       aq->rq.policer_ena = enable;
+       aq->rq_mask.policer_ena = ~(aq->rq_mask.policer_ena);
+       if (enable) {
+               aq->rq.band_prof_id = id;
+               aq->rq_mask.band_prof_id = ~(aq->rq_mask.band_prof_id);
+       }
+
+       rc = mbox_process(mbox);
+       if (rc)
+               goto exit;
+
+       rq->bpf_id = id;
+
+exit:
+       return rc;
+}
diff --git a/drivers/common/cnxk/version.map b/drivers/common/cnxk/version.map
index f34fd3b4a4..05b19beaa2 100644
--- a/drivers/common/cnxk/version.map
+++ b/drivers/common/cnxk/version.map
@@ -85,6 +85,7 @@ INTERNAL {
        roc_nix_bpf_alloc;
        roc_nix_bpf_config;
        roc_nix_bpf_count_get;
+       roc_nix_bpf_ena_dis;
        roc_nix_bpf_free;
        roc_nix_bpf_free_all;
        roc_nix_bpf_level_to_idx;
-- 
2.25.1

Reply via email to