mlx5e: push cls_flower and mqprio setup_tc processing into separate functions
Let mlx5e_setup_tc (former mlx5e_ndo_setup_tc) be a splitter for specific setup_tc types and push out cls_flower and mqprio specific codes into separate functions. Also change the return values so they are the same as in the rest of the drivers. Signed-off-by: Jiri Pirko <jiri@mellanox.com> Acked-by: Jamal Hadi Salim <jhs@mojatatu.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
bc32afdb2b
commit
0cf0f6d3d3
@ -2998,12 +2998,16 @@ static int mlx5e_modify_channels_vsd(struct mlx5e_channels *chs, bool vsd)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mlx5e_setup_tc(struct net_device *netdev, u8 tc)
|
||||
static int mlx5e_setup_tc_mqprio(struct net_device *netdev,
|
||||
struct tc_mqprio_qopt *mqprio)
|
||||
{
|
||||
struct mlx5e_priv *priv = netdev_priv(netdev);
|
||||
struct mlx5e_channels new_channels = {};
|
||||
u8 tc = mqprio->num_tc;
|
||||
int err = 0;
|
||||
|
||||
mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
|
||||
|
||||
if (tc && tc != MLX5E_MAX_NUM_TC)
|
||||
return -EINVAL;
|
||||
|
||||
@ -3027,39 +3031,41 @@ out:
|
||||
return err;
|
||||
}
|
||||
|
||||
static int mlx5e_ndo_setup_tc(struct net_device *dev, enum tc_setup_type type,
|
||||
u32 handle, u32 chain_index, __be16 proto,
|
||||
struct tc_to_netdev *tc)
|
||||
static int mlx5e_setup_tc_cls_flower(struct net_device *dev,
|
||||
u32 handle, u32 chain_index, __be16 proto,
|
||||
struct tc_cls_flower_offload *cls_flower)
|
||||
{
|
||||
struct mlx5e_priv *priv = netdev_priv(dev);
|
||||
|
||||
if (TC_H_MAJ(handle) != TC_H_MAJ(TC_H_INGRESS))
|
||||
goto mqprio;
|
||||
|
||||
if (chain_index)
|
||||
if (TC_H_MAJ(handle) != TC_H_MAJ(TC_H_INGRESS) ||
|
||||
chain_index)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
switch (type) {
|
||||
case TC_SETUP_CLSFLOWER:
|
||||
switch (tc->cls_flower->command) {
|
||||
case TC_CLSFLOWER_REPLACE:
|
||||
return mlx5e_configure_flower(priv, proto, tc->cls_flower);
|
||||
case TC_CLSFLOWER_DESTROY:
|
||||
return mlx5e_delete_flower(priv, tc->cls_flower);
|
||||
case TC_CLSFLOWER_STATS:
|
||||
return mlx5e_stats_flower(priv, tc->cls_flower);
|
||||
}
|
||||
switch (cls_flower->command) {
|
||||
case TC_CLSFLOWER_REPLACE:
|
||||
return mlx5e_configure_flower(priv, proto, cls_flower);
|
||||
case TC_CLSFLOWER_DESTROY:
|
||||
return mlx5e_delete_flower(priv, cls_flower);
|
||||
case TC_CLSFLOWER_STATS:
|
||||
return mlx5e_stats_flower(priv, cls_flower);
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
}
|
||||
|
||||
mqprio:
|
||||
if (type != TC_SETUP_MQPRIO)
|
||||
return -EINVAL;
|
||||
|
||||
tc->mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
|
||||
|
||||
return mlx5e_setup_tc(dev, tc->mqprio->num_tc);
|
||||
static int mlx5e_setup_tc(struct net_device *dev, enum tc_setup_type type,
|
||||
u32 handle, u32 chain_index, __be16 proto,
|
||||
struct tc_to_netdev *tc)
|
||||
{
|
||||
switch (type) {
|
||||
case TC_SETUP_CLSFLOWER:
|
||||
return mlx5e_setup_tc_cls_flower(dev, handle, chain_index,
|
||||
proto, tc->cls_flower);
|
||||
case TC_SETUP_MQPRIO:
|
||||
return mlx5e_setup_tc_mqprio(dev, tc->mqprio);
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
@ -3695,7 +3701,7 @@ static const struct net_device_ops mlx5e_netdev_ops_basic = {
|
||||
.ndo_open = mlx5e_open,
|
||||
.ndo_stop = mlx5e_close,
|
||||
.ndo_start_xmit = mlx5e_xmit,
|
||||
.ndo_setup_tc = mlx5e_ndo_setup_tc,
|
||||
.ndo_setup_tc = mlx5e_setup_tc,
|
||||
.ndo_select_queue = mlx5e_select_queue,
|
||||
.ndo_get_stats64 = mlx5e_get_stats,
|
||||
.ndo_set_rx_mode = mlx5e_set_rx_mode,
|
||||
@ -3720,7 +3726,7 @@ static const struct net_device_ops mlx5e_netdev_ops_sriov = {
|
||||
.ndo_open = mlx5e_open,
|
||||
.ndo_stop = mlx5e_close,
|
||||
.ndo_start_xmit = mlx5e_xmit,
|
||||
.ndo_setup_tc = mlx5e_ndo_setup_tc,
|
||||
.ndo_setup_tc = mlx5e_setup_tc,
|
||||
.ndo_select_queue = mlx5e_select_queue,
|
||||
.ndo_get_stats64 = mlx5e_get_stats,
|
||||
.ndo_set_rx_mode = mlx5e_set_rx_mode,
|
||||
|
Loading…
x
Reference in New Issue
Block a user