mlxsw: Add option to choose trap group
authorNogah Frankel <nogahf@mellanox.com>
Fri, 25 Nov 2016 09:33:39 +0000 (10:33 +0100)
committerDavid S. Miller <davem@davemloft.net>
Sat, 26 Nov 2016 02:22:14 +0000 (21:22 -0500)
Currently, we set the trap group to pre-determined option, based on whether
it is an rx or event trap.
This commit adds a possibility to chose the trap group, so it can be set
to different values in the following patches.

Signed-off-by: Nogah Frankel <nogahf@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/core.h
drivers/net/ethernet/mellanox/mlxsw/spectrum.c
drivers/net/ethernet/mellanox/mlxsw/switchib.c
drivers/net/ethernet/mellanox/mlxsw/switchx2.c

index b5b5b36..d663b8e 100644 (file)
@@ -103,7 +103,8 @@ struct mlxsw_listener {
        bool is_event;
 };
 
-#define MLXSW_RXL(_func, _trap_id, _action, _is_ctrl, _unreg_action)   \
+#define MLXSW_RXL(_func, _trap_id, _action, _is_ctrl, _trap_group,     \
+                 _unreg_action)                                        \
        {                                                               \
                .trap_id = MLXSW_TRAP_ID_##_trap_id,                    \
                .u.rx_listener =                                        \
@@ -114,23 +115,23 @@ struct mlxsw_listener {
                },                                                      \
                .action = MLXSW_REG_HPKT_ACTION_##_action,              \
                .unreg_action = MLXSW_REG_HPKT_ACTION_##_unreg_action,  \
-               .trap_group = MLXSW_REG_HTGT_TRAP_GROUP_RX,             \
+               .trap_group = MLXSW_REG_HTGT_TRAP_GROUP_##_trap_group,  \
                .is_ctrl = _is_ctrl,                                    \
                .is_event = false,                                      \
        }
 
-#define MLXSW_EVENTL(_func, _trap_id)                          \
-       {                                                       \
-               .trap_id = MLXSW_TRAP_ID_##_trap_id,            \
-               .u.event_listener =                             \
-               {                                               \
-                       .func = _func,                          \
-                       .trap_id = MLXSW_TRAP_ID_##_trap_id,    \
-               },                                              \
-               .action = MLXSW_REG_HPKT_ACTION_TRAP_TO_CPU,    \
-               .trap_group = MLXSW_REG_HTGT_TRAP_GROUP_EMAD,   \
-               .is_ctrl = false,                               \
-               .is_event = true,                               \
+#define MLXSW_EVENTL(_func, _trap_id, _trap_group)                     \
+       {                                                               \
+               .trap_id = MLXSW_TRAP_ID_##_trap_id,                    \
+               .u.event_listener =                                     \
+               {                                                       \
+                       .func = _func,                                  \
+                       .trap_id = MLXSW_TRAP_ID_##_trap_id,            \
+               },                                                      \
+               .action = MLXSW_REG_HPKT_ACTION_TRAP_TO_CPU,            \
+               .trap_group = MLXSW_REG_HTGT_TRAP_GROUP_##_trap_group,  \
+               .is_ctrl = false,                                       \
+               .is_event = true,                                       \
        }
 
 int mlxsw_core_rx_listener_register(struct mlxsw_core *mlxsw_core,
index 3582e3f..44243a4 100644 (file)
@@ -2731,16 +2731,16 @@ static void mlxsw_sp_rx_listener_mark_func(struct sk_buff *skb, u8 local_port,
 }
 
 #define MLXSW_SP_RXL_NO_MARK(_trap_id, _action, _is_ctrl)              \
-       MLXSW_RXL(mlxsw_sp_rx_listener_no_mark_func, _trap_id, _action, \
-                 _is_ctrl, DISCARD)
+       MLXSW_RXL(mlxsw_sp_rx_listener_no_mark_func, _trap_id, _action, \
+                 _is_ctrl, RX, DISCARD)
 
 #define MLXSW_SP_RXL_MARK(_trap_id, _action, _is_ctrl)                 \
        MLXSW_RXL(mlxsw_sp_rx_listener_mark_func, _trap_id, _action,    \
-                 _is_ctrl, DISCARD)
+                 _is_ctrl, RX, DISCARD)
 
 static const struct mlxsw_listener mlxsw_sp_listener[] = {
        /* Events */
-       MLXSW_EVENTL(mlxsw_sp_pude_event_func, PUDE),
+       MLXSW_EVENTL(mlxsw_sp_pude_event_func, PUDE, EMAD),
        /* L2 traps */
        MLXSW_SP_RXL_NO_MARK(STP, TRAP_TO_CPU, true),
        MLXSW_SP_RXL_NO_MARK(LACP, TRAP_TO_CPU, true),
index 847cbbf..b798711 100644 (file)
@@ -409,7 +409,7 @@ static void mlxsw_sib_pude_event_func(const struct mlxsw_reg_info *reg,
 }
 
 static const struct mlxsw_listener mlxsw_sib_listener[] = {
-       MLXSW_EVENTL(mlxsw_sib_pude_event_func, PUDE),
+       MLXSW_EVENTL(mlxsw_sib_pude_event_func, PUDE, EMAD),
 };
 
 static int mlxsw_sib_taps_init(struct mlxsw_sib *mlxsw_sib)
index a158756..1bcb391 100644 (file)
@@ -1450,10 +1450,10 @@ err_port_module_info_get:
 
 #define MLXSW_SX_RXL(_trap_id)                                         \
        MLXSW_RXL(mlxsw_sx_rx_listener_func, _trap_id, TRAP_TO_CPU,     \
-                 false, FORWARD)
+                 false, RX, FORWARD)
 
 static const struct mlxsw_listener mlxsw_sx_listener[] = {
-       MLXSW_EVENTL(mlxsw_sx_pude_event_func, PUDE),
+       MLXSW_EVENTL(mlxsw_sx_pude_event_func, PUDE, EMAD),
        MLXSW_SX_RXL(FDB_MC),
        MLXSW_SX_RXL(STP),
        MLXSW_SX_RXL(LACP),