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

Implement RoC interface to free 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     |  6 +++++
 drivers/common/cnxk/roc_nix_bpf.c | 40 +++++++++++++++++++++++++++++++
 drivers/common/cnxk/version.map   |  2 ++
 3 files changed, 48 insertions(+)

diff --git a/drivers/common/cnxk/roc_nix.h b/drivers/common/cnxk/roc_nix.h
index b192a2b217..a5642337b2 100644
--- a/drivers/common/cnxk/roc_nix.h
+++ b/drivers/common/cnxk/roc_nix.h
@@ -533,6 +533,12 @@ int __roc_api roc_nix_bpf_alloc(struct roc_nix *roc_nix, 
uint8_t lvl_mask,
                                uint16_t per_lvl_cnt[ROC_NIX_BPF_LEVEL_MAX],
                                struct roc_nix_bpf_objs *profs /* Out */);
 
+int __roc_api roc_nix_bpf_free(struct roc_nix *roc_nix,
+                              struct roc_nix_bpf_objs *profs,
+                              uint8_t num_prof);
+
+int __roc_api roc_nix_bpf_free_all(struct roc_nix *roc_nix);
+
 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 06394bda07..41d31bc6cd 100644
--- a/drivers/common/cnxk/roc_nix_bpf.c
+++ b/drivers/common/cnxk/roc_nix_bpf.c
@@ -170,3 +170,43 @@ roc_nix_bpf_alloc(struct roc_nix *roc_nix, uint8_t 
lvl_mask,
 exit:
        return rc;
 }
+
+int
+roc_nix_bpf_free(struct roc_nix *roc_nix, struct roc_nix_bpf_objs *profs,
+                uint8_t num_prof)
+{
+       struct mbox *mbox = get_mbox(roc_nix);
+       struct nix_bandprof_free_req *req;
+       uint8_t level;
+       int i, j;
+
+       if (num_prof >= NIX_RX_BAND_PROF_LAYER_MAX)
+               return NIX_ERR_INVALID_RANGE;
+
+       req = mbox_alloc_msg_nix_bandprof_free(mbox);
+       if (req == NULL)
+               return -ENOSPC;
+
+       for (i = 0; i < num_prof; i++) {
+               level = sw_to_hw_lvl_map[profs[i].level];
+               req->prof_count[level] = profs[i].count;
+               for (j = 0; j < profs[i].count; j++)
+                       req->prof_idx[level][j] = profs[i].ids[j];
+       }
+
+       return mbox_process(mbox);
+}
+
+int
+roc_nix_bpf_free_all(struct roc_nix *roc_nix)
+{
+       struct mbox *mbox = get_mbox(roc_nix);
+       struct nix_bandprof_free_req *req;
+
+       req = mbox_alloc_msg_nix_bandprof_free(mbox);
+       if (req == NULL)
+               return -ENOSPC;
+
+       req->free_all = true;
+       return mbox_process(mbox);
+}
diff --git a/drivers/common/cnxk/version.map b/drivers/common/cnxk/version.map
index b8863a1155..3d474f8a96 100644
--- a/drivers/common/cnxk/version.map
+++ b/drivers/common/cnxk/version.map
@@ -84,6 +84,8 @@ INTERNAL {
        roc_se_ciph_key_set;
        roc_nix_bpf_alloc;
        roc_nix_bpf_count_get;
+       roc_nix_bpf_free;
+       roc_nix_bpf_free_all;
        roc_nix_bpf_level_to_idx;
        roc_nix_cq_dump;
        roc_nix_cq_fini;
-- 
2.25.1

Reply via email to