diff options
author | Ido Schimmel <idosch@mellanox.com> | 2020-03-30 22:38:31 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2020-03-31 03:54:59 +0300 |
commit | 39defcbba0cd24ef4d5547370c4d689d4a7863af (patch) | |
tree | 516cf59d3fc8809412bcbdcb441bff1891101ed2 /drivers/net/ethernet/mellanox/mlxsw/spectrum_trap.c | |
parent | d12d8468214ae940f4f42d198b3756f68a6d661e (diff) | |
download | linux-39defcbba0cd24ef4d5547370c4d689d4a7863af.tar.xz |
mlxsw: spectrum_trap: Add support for setting of packet trap group parameters
Implement support for setting of packet trap group parameters by
invoking the trap_group_init() callback with the new parameters.
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Reviewed-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlxsw/spectrum_trap.c')
-rw-r--r-- | drivers/net/ethernet/mellanox/mlxsw/spectrum_trap.c | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_trap.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_trap.c index 4a919121191f..9096ffd89e50 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_trap.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_trap.c @@ -537,8 +537,10 @@ int mlxsw_sp_trap_action_set(struct mlxsw_core *mlxsw_core, return 0; } -int mlxsw_sp_trap_group_init(struct mlxsw_core *mlxsw_core, - const struct devlink_trap_group *group) +static int +__mlxsw_sp_trap_group_init(struct mlxsw_core *mlxsw_core, + const struct devlink_trap_group *group, + u32 policer_id) { struct mlxsw_sp *mlxsw_sp = mlxsw_core_driver_priv(mlxsw_core); u16 hw_policer_id = MLXSW_REG_HTGT_INVALID_POLICER; @@ -570,11 +572,11 @@ int mlxsw_sp_trap_group_init(struct mlxsw_core *mlxsw_core, return -EINVAL; } - if (group->init_policer_id) { + if (policer_id) { struct mlxsw_sp_trap_policer_item *policer_item; - u32 id = group->init_policer_id; - policer_item = mlxsw_sp_trap_policer_item_lookup(mlxsw_sp, id); + policer_item = mlxsw_sp_trap_policer_item_lookup(mlxsw_sp, + policer_id); if (WARN_ON(!policer_item)) return -EINVAL; hw_policer_id = policer_item->hw_id; @@ -584,6 +586,22 @@ int mlxsw_sp_trap_group_init(struct mlxsw_core *mlxsw_core, return mlxsw_reg_write(mlxsw_core, MLXSW_REG(htgt), htgt_pl); } +int mlxsw_sp_trap_group_init(struct mlxsw_core *mlxsw_core, + const struct devlink_trap_group *group) +{ + return __mlxsw_sp_trap_group_init(mlxsw_core, group, + group->init_policer_id); +} + +int mlxsw_sp_trap_group_set(struct mlxsw_core *mlxsw_core, + const struct devlink_trap_group *group, + const struct devlink_trap_policer *policer) +{ + u32 policer_id = policer ? policer->id : 0; + + return __mlxsw_sp_trap_group_init(mlxsw_core, group, policer_id); +} + static struct mlxsw_sp_trap_policer_item * mlxsw_sp_trap_policer_item_init(struct mlxsw_sp *mlxsw_sp, u32 id) { |