common/cnxk: support bandwidth profile stats to index
authorSunil Kumar Kori <skori@marvell.com>
Tue, 12 Oct 2021 07:05:55 +0000 (12:35 +0530)
committerJerin Jacob <jerinj@marvell.com>
Tue, 19 Oct 2021 14:23:32 +0000 (16:23 +0200)
CN10K platform supports different stats for HW bandwidth profiles.
Implement RoC API to get index for given stats type.

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 be24d20..c6cf42e 100644 (file)
@@ -10,6 +10,7 @@
 #define ROC_NIX_BPF_ID_INVALID       0xFFFF
 #define ROC_NIX_BPF_LEVEL_IDX_INVALID 0xFF
 #define ROC_NIX_BPF_LEVEL_MAX        3
+#define ROC_NIX_BPF_STATS_MAX        12
 
 enum roc_nix_rss_reta_sz {
        ROC_NIX_RSS_RETA_SZ_64 = 64,
@@ -71,6 +72,21 @@ enum roc_nix_bpf_action {
        ROC_NIX_BPF_ACTION_RED
 };
 
+enum roc_nix_bpf_stats {
+       ROC_NIX_BPF_GREEN_PKT_F_PASS = BIT_ULL(0),
+       ROC_NIX_BPF_GREEN_OCTS_F_PASS = BIT_ULL(1),
+       ROC_NIX_BPF_GREEN_PKT_F_DROP = BIT_ULL(2),
+       ROC_NIX_BPF_GREEN_OCTS_F_DROP = BIT_ULL(3),
+       ROC_NIX_BPF_YELLOW_PKT_F_PASS = BIT_ULL(4),
+       ROC_NIX_BPF_YELLOW_OCTS_F_PASS = BIT_ULL(5),
+       ROC_NIX_BPF_YELLOW_PKT_F_DROP = BIT_ULL(6),
+       ROC_NIX_BPF_YELLOW_OCTS_F_DROP = BIT_ULL(7),
+       ROC_NIX_BPF_RED_PKT_F_PASS = BIT_ULL(8),
+       ROC_NIX_BPF_RED_OCTS_F_PASS = BIT_ULL(9),
+       ROC_NIX_BPF_RED_PKT_F_DROP = BIT_ULL(10),
+       ROC_NIX_BPF_RED_OCTS_F_DROP = BIT_ULL(11),
+};
+
 struct roc_nix_bpf_cfg {
        enum roc_nix_bpf_algo alg;
        enum roc_nix_bpf_lmode lmode;
@@ -638,6 +654,8 @@ int __roc_api roc_nix_bpf_connect(struct roc_nix *roc_nix,
 uint8_t __roc_api
 roc_nix_bpf_level_to_idx(enum roc_nix_bpf_level_flag lvl_flag);
 
+uint8_t __roc_api roc_nix_bpf_stats_to_idx(enum roc_nix_bpf_stats lvl_flag);
+
 /* MAC */
 int __roc_api roc_nix_mac_rxtx_start_stop(struct roc_nix *roc_nix, bool start);
 int __roc_api roc_nix_mac_link_event_start_stop(struct roc_nix *roc_nix,
index 807723f..7c1ac9d 100644 (file)
@@ -300,6 +300,40 @@ roc_nix_bpf_level_to_idx(enum roc_nix_bpf_level_flag level_f)
        return idx;
 }
 
+uint8_t
+roc_nix_bpf_stats_to_idx(enum roc_nix_bpf_stats level_f)
+{
+       uint8_t idx;
+
+       if (level_f & ROC_NIX_BPF_GREEN_PKT_F_PASS)
+               idx = 0;
+       else if (level_f & ROC_NIX_BPF_GREEN_OCTS_F_PASS)
+               idx = 1;
+       else if (level_f & ROC_NIX_BPF_GREEN_PKT_F_DROP)
+               idx = 2;
+       else if (level_f & ROC_NIX_BPF_GREEN_OCTS_F_DROP)
+               idx = 3;
+       else if (level_f & ROC_NIX_BPF_YELLOW_PKT_F_PASS)
+               idx = 4;
+       else if (level_f & ROC_NIX_BPF_YELLOW_OCTS_F_PASS)
+               idx = 5;
+       else if (level_f & ROC_NIX_BPF_YELLOW_PKT_F_DROP)
+               idx = 6;
+       else if (level_f & ROC_NIX_BPF_YELLOW_OCTS_F_DROP)
+               idx = 7;
+       else if (level_f & ROC_NIX_BPF_RED_PKT_F_PASS)
+               idx = 8;
+       else if (level_f & ROC_NIX_BPF_RED_OCTS_F_PASS)
+               idx = 9;
+       else if (level_f & ROC_NIX_BPF_RED_PKT_F_DROP)
+               idx = 10;
+       else if (level_f & ROC_NIX_BPF_RED_OCTS_F_DROP)
+               idx = 11;
+       else
+               idx = ROC_NIX_BPF_STATS_MAX;
+       return idx;
+}
+
 int
 roc_nix_bpf_count_get(struct roc_nix *roc_nix, uint8_t lvl_mask,
                      uint16_t count[ROC_NIX_BPF_LEVEL_MAX])
index dfd2cdc..e9643f7 100644 (file)
@@ -92,6 +92,7 @@ INTERNAL {
        roc_nix_bpf_free_all;
        roc_nix_bpf_level_to_idx;
        roc_nix_bpf_pre_color_tbl_setup;
+       roc_nix_bpf_stats_to_idx;
        roc_nix_cq_dump;
        roc_nix_cq_fini;
        roc_nix_cq_init;