From: Jiri Pirko <j...@mellanox.com>

Introduce extension of mlxsw_afa_ops in order to get/put counter indexes
and implement the ops for Spectrum.

Signed-off-by: Jiri Pirko <j...@mellanox.com>
Reviewed-by: Ido Schimmel <ido...@mellanox.com>
---
 .../ethernet/mellanox/mlxsw/core_acl_flex_actions.h    |  2 ++
 .../mellanox/mlxsw/spectrum_acl_flex_actions.c         | 18 ++++++++++++++++++
 2 files changed, 20 insertions(+)

diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.h 
b/drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.h
index a8d3314c3a24..89f977996ae2 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.h
+++ b/drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.h
@@ -46,6 +46,8 @@ struct mlxsw_afa_ops {
        void (*kvdl_set_del)(void *priv, u32 kvdl_index, bool is_first);
        int (*kvdl_fwd_entry_add)(void *priv, u32 *p_kvdl_index, u8 local_port);
        void (*kvdl_fwd_entry_del)(void *priv, u32 kvdl_index);
+       int (*counter_index_get)(void *priv, unsigned int *p_counter_index);
+       void (*counter_index_put)(void *priv, unsigned int counter_index);
 };
 
 struct mlxsw_afa *mlxsw_afa_create(unsigned int max_acts_per_set,
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_flex_actions.c 
b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_flex_actions.c
index 4d3340ed0291..dae4d020024d 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_flex_actions.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_flex_actions.c
@@ -108,11 +108,29 @@ static void mlxsw_sp_act_kvdl_fwd_entry_del(void *priv, 
u32 kvdl_index)
        mlxsw_sp_kvdl_free(mlxsw_sp, kvdl_index);
 }
 
+static int
+mlxsw_sp_act_counter_index_get(void *priv, unsigned int *p_counter_index)
+{
+       struct mlxsw_sp *mlxsw_sp = priv;
+
+       return mlxsw_sp_flow_counter_alloc(mlxsw_sp, p_counter_index);
+}
+
+static void
+mlxsw_sp_act_counter_index_put(void *priv, unsigned int counter_index)
+{
+       struct mlxsw_sp *mlxsw_sp = priv;
+
+       mlxsw_sp_flow_counter_free(mlxsw_sp, counter_index);
+}
+
 static const struct mlxsw_afa_ops mlxsw_sp_act_afa_ops = {
        .kvdl_set_add           = mlxsw_sp_act_kvdl_set_add,
        .kvdl_set_del           = mlxsw_sp_act_kvdl_set_del,
        .kvdl_fwd_entry_add     = mlxsw_sp_act_kvdl_fwd_entry_add,
        .kvdl_fwd_entry_del     = mlxsw_sp_act_kvdl_fwd_entry_del,
+       .counter_index_get      = mlxsw_sp_act_counter_index_get,
+       .counter_index_put      = mlxsw_sp_act_counter_index_put,
 };
 
 int mlxsw_sp_afa_init(struct mlxsw_sp *mlxsw_sp)
-- 
2.14.3

Reply via email to