Commit 4b6b91ed authored by Petr Machata's avatar Petr Machata Committed by David S. Miller

mlxsw: spectrum: Extract a helper for trap registration

On Spectrum-1, timestamps for PTP packets are delivered through queues
of ingress and egress timestamps. There are two event traps
corresponding to activity on each of those queues. This mechanism is
absent on Spectrum-2, and therefore the traps should only be registered
on Spectrum-1.

Extract out of mlxsw_sp_traps_init() a generic helper,
mlxsw_sp_traps_register(), and likewise with _unregister(). The new helpers
will later be called with Spectrum-1-specific traps.
Signed-off-by: default avatarPetr Machata <petrm@mellanox.com>
Acked-by: default avatarJiri Pirko <jiri@mellanox.com>
Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 41ce78b9
...@@ -4251,22 +4251,16 @@ static int mlxsw_sp_trap_groups_set(struct mlxsw_core *mlxsw_core) ...@@ -4251,22 +4251,16 @@ static int mlxsw_sp_trap_groups_set(struct mlxsw_core *mlxsw_core)
return 0; return 0;
} }
static int mlxsw_sp_traps_init(struct mlxsw_sp *mlxsw_sp) static int mlxsw_sp_traps_register(struct mlxsw_sp *mlxsw_sp,
const struct mlxsw_listener listeners[],
size_t listeners_count)
{ {
int i; int i;
int err; int err;
err = mlxsw_sp_cpu_policers_set(mlxsw_sp->core); for (i = 0; i < listeners_count; i++) {
if (err)
return err;
err = mlxsw_sp_trap_groups_set(mlxsw_sp->core);
if (err)
return err;
for (i = 0; i < ARRAY_SIZE(mlxsw_sp_listener); i++) {
err = mlxsw_core_trap_register(mlxsw_sp->core, err = mlxsw_core_trap_register(mlxsw_sp->core,
&mlxsw_sp_listener[i], &listeners[i],
mlxsw_sp); mlxsw_sp);
if (err) if (err)
goto err_listener_register; goto err_listener_register;
...@@ -4277,23 +4271,47 @@ static int mlxsw_sp_traps_init(struct mlxsw_sp *mlxsw_sp) ...@@ -4277,23 +4271,47 @@ static int mlxsw_sp_traps_init(struct mlxsw_sp *mlxsw_sp)
err_listener_register: err_listener_register:
for (i--; i >= 0; i--) { for (i--; i >= 0; i--) {
mlxsw_core_trap_unregister(mlxsw_sp->core, mlxsw_core_trap_unregister(mlxsw_sp->core,
&mlxsw_sp_listener[i], &listeners[i],
mlxsw_sp); mlxsw_sp);
} }
return err; return err;
} }
static void mlxsw_sp_traps_fini(struct mlxsw_sp *mlxsw_sp) static void mlxsw_sp_traps_unregister(struct mlxsw_sp *mlxsw_sp,
const struct mlxsw_listener listeners[],
size_t listeners_count)
{ {
int i; int i;
for (i = 0; i < ARRAY_SIZE(mlxsw_sp_listener); i++) { for (i = 0; i < listeners_count; i++) {
mlxsw_core_trap_unregister(mlxsw_sp->core, mlxsw_core_trap_unregister(mlxsw_sp->core,
&mlxsw_sp_listener[i], &listeners[i],
mlxsw_sp); mlxsw_sp);
} }
} }
static int mlxsw_sp_traps_init(struct mlxsw_sp *mlxsw_sp)
{
int err;
err = mlxsw_sp_cpu_policers_set(mlxsw_sp->core);
if (err)
return err;
err = mlxsw_sp_trap_groups_set(mlxsw_sp->core);
if (err)
return err;
return mlxsw_sp_traps_register(mlxsw_sp, mlxsw_sp_listener,
ARRAY_SIZE(mlxsw_sp_listener));
}
static void mlxsw_sp_traps_fini(struct mlxsw_sp *mlxsw_sp)
{
mlxsw_sp_traps_unregister(mlxsw_sp, mlxsw_sp_listener,
ARRAY_SIZE(mlxsw_sp_listener));
}
#define MLXSW_SP_LAG_SEED_INIT 0xcafecafe #define MLXSW_SP_LAG_SEED_INIT 0xcafecafe
static int mlxsw_sp_lag_init(struct mlxsw_sp *mlxsw_sp) static int mlxsw_sp_lag_init(struct mlxsw_sp *mlxsw_sp)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment