common/cnxk: support bandwidth profiles connection
authorSunil Kumar Kori <skori@marvell.com>
Tue, 12 Oct 2021 07:05:54 +0000 (12:35 +0530)
committerJerin Jacob <jerinj@marvell.com>
Tue, 19 Oct 2021 14:23:18 +0000 (16:23 +0200)
To maintain chain of bandwidth profiles, they needs to be
connected. Implement RoC API to connect two bandwidth profiles
at different levels.

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 d125941..be24d20 100644 (file)
@@ -7,6 +7,7 @@
 
 /* Constants */
 #define ROC_NIX_BPF_PER_PFFUNC       64
+#define ROC_NIX_BPF_ID_INVALID       0xFFFF
 #define ROC_NIX_BPF_LEVEL_IDX_INVALID 0xFF
 #define ROC_NIX_BPF_LEVEL_MAX        3
 
@@ -629,6 +630,11 @@ int __roc_api roc_nix_bpf_pre_color_tbl_setup(
        struct roc_nix *roc_nix, uint16_t id,
        enum roc_nix_bpf_level_flag lvl_flag, struct roc_nix_bpf_precolor *tbl);
 
+/* Use ROC_NIX_BPF_ID_INVALID as dst_id to disconnect */
+int __roc_api roc_nix_bpf_connect(struct roc_nix *roc_nix,
+                                 enum roc_nix_bpf_level_flag lvl_flag,
+                                 uint16_t src_id, uint16_t dst_id);
+
 uint8_t __roc_api
 roc_nix_bpf_level_to_idx(enum roc_nix_bpf_level_flag lvl_flag);
 
index 8c84bbb..807723f 100644 (file)
@@ -767,3 +767,39 @@ roc_nix_bpf_pre_color_tbl_setup(struct roc_nix *roc_nix, uint16_t id,
 exit:
        return rc;
 }
+
+int
+roc_nix_bpf_connect(struct roc_nix *roc_nix,
+                   enum roc_nix_bpf_level_flag lvl_flag, uint16_t src_id,
+                   uint16_t dst_id)
+{
+       struct mbox *mbox = get_mbox(roc_nix);
+       struct nix_cn10k_aq_enq_req *aq;
+       uint8_t level_idx;
+
+       if (roc_model_is_cn9k())
+               return NIX_ERR_HW_NOTSUP;
+
+       level_idx = roc_nix_bpf_level_to_idx(lvl_flag);
+       if (level_idx == ROC_NIX_BPF_LEVEL_IDX_INVALID)
+               return NIX_ERR_PARAM;
+
+       aq = mbox_alloc_msg_nix_cn10k_aq_enq(mbox);
+       if (aq == NULL)
+               return -ENOSPC;
+       aq->qidx = (sw_to_hw_lvl_map[level_idx] << 14) | src_id;
+       aq->ctype = NIX_AQ_CTYPE_BAND_PROF;
+       aq->op = NIX_AQ_INSTOP_WRITE;
+
+       if (dst_id == ROC_NIX_BPF_ID_INVALID) {
+               aq->prof.hl_en = false;
+               aq->prof_mask.hl_en = ~(aq->prof_mask.hl_en);
+       } else {
+               aq->prof.hl_en = true;
+               aq->prof.band_prof_id = dst_id;
+               aq->prof_mask.hl_en = ~(aq->prof_mask.hl_en);
+               aq->prof_mask.band_prof_id = ~(aq->prof_mask.band_prof_id);
+       }
+
+       return mbox_process(mbox);
+}
index 836cbec..dfd2cdc 100644 (file)
@@ -84,6 +84,7 @@ INTERNAL {
        roc_se_ciph_key_set;
        roc_nix_bpf_alloc;
        roc_nix_bpf_config;
+       roc_nix_bpf_connect;
        roc_nix_bpf_count_get;
        roc_nix_bpf_dump;
        roc_nix_bpf_ena_dis;