common/cnxk: support to get policer level to index
authorSunil Kumar Kori <skori@marvell.com>
Tue, 12 Oct 2021 07:05:46 +0000 (12:35 +0530)
committerJerin Jacob <jerinj@marvell.com>
Tue, 19 Oct 2021 14:21:14 +0000 (16:21 +0200)
CN10K platform supports policer up to 3 level of hierarchy.
Implement RoC API to get corresponding index for given level.

Signed-off-by: Sunil Kumar Kori <skori@marvell.com>
Acked-by: Jerin Jacob <jerinj@marvell.com>
drivers/common/cnxk/meson.build
drivers/common/cnxk/roc_nix.h
drivers/common/cnxk/roc_nix_bpf.c [new file with mode: 0644]
drivers/common/cnxk/roc_nix_priv.h
drivers/common/cnxk/roc_utils.c
drivers/common/cnxk/version.map

index 97db5f0..32d3ad5 100644 (file)
@@ -25,6 +25,7 @@ sources = files(
         'roc_mbox.c',
         'roc_model.c',
         'roc_nix.c',
+        'roc_nix_bpf.c',
         'roc_nix_debug.c',
         'roc_nix_fc.c',
         'roc_nix_irq.c',
index b06895a..bf4fd2f 100644 (file)
@@ -6,6 +6,8 @@
 #define _ROC_NIX_H_
 
 /* Constants */
+#define ROC_NIX_BPF_LEVEL_IDX_INVALID 0xFF
+
 enum roc_nix_rss_reta_sz {
        ROC_NIX_RSS_RETA_SZ_64 = 64,
        ROC_NIX_RSS_RETA_SZ_128 = 128,
@@ -29,6 +31,12 @@ enum roc_nix_vlan_type {
        ROC_NIX_VLAN_TYPE_OUTER = 0x02,
 };
 
+enum roc_nix_bpf_level_flag {
+       ROC_NIX_BPF_LEVEL_F_LEAF = BIT(0),
+       ROC_NIX_BPF_LEVEL_F_MID = BIT(1),
+       ROC_NIX_BPF_LEVEL_F_TOP = BIT(2),
+};
+
 struct roc_nix_vlan_config {
        uint32_t type;
        union {
@@ -508,6 +516,10 @@ int __roc_api roc_nix_tm_prepare_rate_limited_tree(struct roc_nix *roc_nix);
 bool __roc_api roc_nix_tm_is_user_hierarchy_enabled(struct roc_nix *nix);
 int __roc_api roc_nix_tm_tree_type_get(struct roc_nix *nix);
 
+/* Ingress Policer API */
+uint8_t __roc_api
+roc_nix_bpf_level_to_idx(enum roc_nix_bpf_level_flag 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
new file mode 100644 (file)
index 0000000..b588cc1
--- /dev/null
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(C) 2021 Marvell.
+ */
+
+#include "roc_api.h"
+#include "roc_priv.h"
+
+uint8_t
+roc_nix_bpf_level_to_idx(enum roc_nix_bpf_level_flag level_f)
+{
+       uint8_t idx;
+
+       if (level_f & ROC_NIX_BPF_LEVEL_F_LEAF)
+               idx = 0;
+       else if (level_f & ROC_NIX_BPF_LEVEL_F_MID)
+               idx = 1;
+       else if (level_f & ROC_NIX_BPF_LEVEL_F_TOP)
+               idx = 2;
+       else
+               idx = ROC_NIX_BPF_LEVEL_IDX_INVALID;
+       return idx;
+}
index 7653c5a..02b1be8 100644 (file)
@@ -187,6 +187,7 @@ enum nix_err_status {
        NIX_ERR_INVALID_RANGE,
        NIX_ERR_INTERNAL,
        NIX_ERR_OP_NOTSUP,
+       NIX_ERR_HW_NOTSUP,
        NIX_ERR_QUEUE_INVALID_RANGE,
        NIX_ERR_AQ_READ_FAILED,
        NIX_ERR_AQ_WRITE_FAILED,
index 751486f..f1b5ef3 100644 (file)
@@ -34,6 +34,9 @@ roc_error_msg_get(int errorcode)
        case NIX_ERR_OP_NOTSUP:
                err_msg = "Operation not supported";
                break;
+       case NIX_ERR_HW_NOTSUP:
+               err_msg = "Hardware does not support";
+               break;
        case NIX_ERR_QUEUE_INVALID_RANGE:
                err_msg = "Invalid Queue range";
                break;
index ccf8ec1..c84c229 100644 (file)
@@ -82,6 +82,7 @@ INTERNAL {
        roc_model;
        roc_se_auth_key_set;
        roc_se_ciph_key_set;
+       roc_nix_bpf_level_to_idx;
        roc_nix_cq_dump;
        roc_nix_cq_fini;
        roc_nix_cq_init;