mlxsw: spectrum: Extract mlxsw_sp_stp_spms_state()
Instead of duplicating the decision regarding port forwarding state made by mlxsw_sp_port_vid_stp_set(), extract the decision-making into a new function and reuse. Signed-off-by: Petr Machata <petrm@mellanox.com> Signed-off-by: Ido Schimmel <idosch@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
4d4fd36126
commit
541e11595c
|
@ -441,29 +441,29 @@ static void mlxsw_sp_txhdr_construct(struct sk_buff *skb,
|
||||||
mlxsw_tx_hdr_type_set(txhdr, MLXSW_TXHDR_TYPE_CONTROL);
|
mlxsw_tx_hdr_type_set(txhdr, MLXSW_TXHDR_TYPE_CONTROL);
|
||||||
}
|
}
|
||||||
|
|
||||||
int mlxsw_sp_port_vid_stp_set(struct mlxsw_sp_port *mlxsw_sp_port, u16 vid,
|
enum mlxsw_reg_spms_state mlxsw_sp_stp_spms_state(u8 state)
|
||||||
u8 state)
|
|
||||||
{
|
{
|
||||||
struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
|
|
||||||
enum mlxsw_reg_spms_state spms_state;
|
|
||||||
char *spms_pl;
|
|
||||||
int err;
|
|
||||||
|
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case BR_STATE_FORWARDING:
|
case BR_STATE_FORWARDING:
|
||||||
spms_state = MLXSW_REG_SPMS_STATE_FORWARDING;
|
return MLXSW_REG_SPMS_STATE_FORWARDING;
|
||||||
break;
|
|
||||||
case BR_STATE_LEARNING:
|
case BR_STATE_LEARNING:
|
||||||
spms_state = MLXSW_REG_SPMS_STATE_LEARNING;
|
return MLXSW_REG_SPMS_STATE_LEARNING;
|
||||||
break;
|
|
||||||
case BR_STATE_LISTENING: /* fall-through */
|
case BR_STATE_LISTENING: /* fall-through */
|
||||||
case BR_STATE_DISABLED: /* fall-through */
|
case BR_STATE_DISABLED: /* fall-through */
|
||||||
case BR_STATE_BLOCKING:
|
case BR_STATE_BLOCKING:
|
||||||
spms_state = MLXSW_REG_SPMS_STATE_DISCARDING;
|
return MLXSW_REG_SPMS_STATE_DISCARDING;
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
BUG();
|
BUG();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int mlxsw_sp_port_vid_stp_set(struct mlxsw_sp_port *mlxsw_sp_port, u16 vid,
|
||||||
|
u8 state)
|
||||||
|
{
|
||||||
|
enum mlxsw_reg_spms_state spms_state = mlxsw_sp_stp_spms_state(state);
|
||||||
|
struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
|
||||||
|
char *spms_pl;
|
||||||
|
int err;
|
||||||
|
|
||||||
spms_pl = kmalloc(MLXSW_REG_SPMS_LEN, GFP_KERNEL);
|
spms_pl = kmalloc(MLXSW_REG_SPMS_LEN, GFP_KERNEL);
|
||||||
if (!spms_pl)
|
if (!spms_pl)
|
||||||
|
|
|
@ -364,6 +364,7 @@ int __mlxsw_sp_port_headroom_set(struct mlxsw_sp_port *mlxsw_sp_port, int mtu,
|
||||||
int mlxsw_sp_port_ets_maxrate_set(struct mlxsw_sp_port *mlxsw_sp_port,
|
int mlxsw_sp_port_ets_maxrate_set(struct mlxsw_sp_port *mlxsw_sp_port,
|
||||||
enum mlxsw_reg_qeec_hr hr, u8 index,
|
enum mlxsw_reg_qeec_hr hr, u8 index,
|
||||||
u8 next_index, u32 maxrate);
|
u8 next_index, u32 maxrate);
|
||||||
|
enum mlxsw_reg_spms_state mlxsw_sp_stp_spms_state(u8 stp_state);
|
||||||
int mlxsw_sp_port_vid_stp_set(struct mlxsw_sp_port *mlxsw_sp_port, u16 vid,
|
int mlxsw_sp_port_vid_stp_set(struct mlxsw_sp_port *mlxsw_sp_port, u16 vid,
|
||||||
u8 state);
|
u8 state);
|
||||||
int mlxsw_sp_port_vp_mode_set(struct mlxsw_sp_port *mlxsw_sp_port, bool enable);
|
int mlxsw_sp_port_vp_mode_set(struct mlxsw_sp_port *mlxsw_sp_port, bool enable);
|
||||||
|
|
Loading…
Reference in New Issue