common/cnxk: support bandwidth profiles free
authorSunil Kumar Kori <skori@marvell.com>
Tue, 12 Oct 2021 07:05:49 +0000 (12:35 +0530)
committerJerin Jacob <jerinj@marvell.com>
Tue, 19 Oct 2021 14:22:04 +0000 (16:22 +0200)
Implement RoC interface to free HW bandwidth profiles on
CN10K platform.

Signed-off-by: Sunil Kumar Kori <skori@marvell.com>
Acked-by: Jerin Jacob <jerinj@marvell.com>
drivers/common/cnxk/roc_nix.h
drivers/common/cnxk/roc_nix_bpf.c
drivers/common/cnxk/version.map

index b192a2b..a564233 100644 (file)
@@ -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);
 
index 06394bd..41d31bc 100644 (file)
@@ -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);
+}
index b8863a1..3d474f8 100644 (file)
@@ -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;