[dpdk-dev] [PATCH v5 05/28] common/cnxk: support RoC API to free bandwidth profiles
skori at marvell.com
skori at marvell.com
Tue Oct 12 09:05:49 CEST 2021
From: Sunil Kumar Kori <skori at marvell.com>
Implement RoC interface to free HW bandwidth profiles on
CN10K platform.
Signed-off-by: Sunil Kumar Kori <skori at 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
More information about the dev
mailing list