[dpdk-dev] [PATCH v3 11/27] common/cnxk: support RoC API to get stats to index
From: <hidden>
Date: 2021-09-30 09:10:07
Subsystem:
the rest · Maintainer:
Linus Torvalds
From: Sunil Kumar Kori <redacted> 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 <redacted> --- 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 | 18 ++++++++++++++++ drivers/common/cnxk/roc_nix_bpf.c | 34 +++++++++++++++++++++++++++++++ drivers/common/cnxk/version.map | 1 + 3 files changed, 53 insertions(+)
diff --git a/drivers/common/cnxk/roc_nix.h b/drivers/common/cnxk/roc_nix.h
index af76068030..7bff69d39f 100644
--- a/drivers/common/cnxk/roc_nix.h
+++ b/drivers/common/cnxk/roc_nix.h@@ -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;
@@ -595,6 +611,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,
diff --git a/drivers/common/cnxk/roc_nix_bpf.c b/drivers/common/cnxk/roc_nix_bpf.c
index f5822136d1..8f45650d18 100644
--- a/drivers/common/cnxk/roc_nix_bpf.c
+++ b/drivers/common/cnxk/roc_nix_bpf.c@@ -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])
diff --git a/drivers/common/cnxk/version.map b/drivers/common/cnxk/version.map
index c04a8ca9da..5d4bdd57a9 100644
--- a/drivers/common/cnxk/version.map
+++ b/drivers/common/cnxk/version.map@@ -87,6 +87,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;
--
2.25.1