Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0cf0f6d3 authored by Jiri Pirko's avatar Jiri Pirko Committed by David S. Miller
Browse files

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: default avatarJiri Pirko <jiri@mellanox.com>
Acked-by: default avatarJamal Hadi Salim <jhs@mojatatu.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent bc32afdb
Loading
Loading
Loading
Loading
+31 −25
Original line number Diff line number Diff line
@@ -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 @@ static int mlx5e_setup_tc(struct net_device *netdev, u8 tc)
	return err;
}

static int mlx5e_ndo_setup_tc(struct net_device *dev, enum tc_setup_type type,
static int mlx5e_setup_tc_cls_flower(struct net_device *dev,
				     u32 handle, u32 chain_index, __be16 proto,
			      struct tc_to_netdev *tc)
				     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) {
	switch (cls_flower->command) {
	case TC_CLSFLOWER_REPLACE:
			return mlx5e_configure_flower(priv, proto, tc->cls_flower);
		return mlx5e_configure_flower(priv, proto, cls_flower);
	case TC_CLSFLOWER_DESTROY:
			return mlx5e_delete_flower(priv, tc->cls_flower);
		return mlx5e_delete_flower(priv, cls_flower);
	case TC_CLSFLOWER_STATS:
			return mlx5e_stats_flower(priv, tc->cls_flower);
		}
		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,