diff options
| -rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/en_dcb_nl.c | 8 | ||||
| -rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 10 | ||||
| -rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/fw.c | 1 | ||||
| -rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/mlx4_en.h | 1 | ||||
| -rw-r--r-- | include/linux/mlx4/device.h | 1 | 
5 files changed, 19 insertions, 2 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_dcb_nl.c b/drivers/net/ethernet/mellanox/mlx4/en_dcb_nl.c index b799ab12a29..321553fd58d 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_dcb_nl.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_dcb_nl.c @@ -253,3 +253,11 @@ const struct dcbnl_rtnl_ops mlx4_en_dcbnl_ops = {  	.getdcbx	= mlx4_en_dcbnl_getdcbx,  	.setdcbx	= mlx4_en_dcbnl_setdcbx,  }; + +const struct dcbnl_rtnl_ops mlx4_en_dcbnl_pfc_ops = { +	.ieee_getpfc	= mlx4_en_dcbnl_ieee_getpfc, +	.ieee_setpfc	= mlx4_en_dcbnl_ieee_setpfc, + +	.getdcbx	= mlx4_en_dcbnl_getdcbx, +	.setdcbx	= mlx4_en_dcbnl_setdcbx, +}; diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c index 473c9d2fec1..d2a4f919bf1 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c @@ -2013,8 +2013,14 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port,  	INIT_WORK(&priv->linkstate_task, mlx4_en_linkstate);  	INIT_DELAYED_WORK(&priv->stats_task, mlx4_en_do_get_stats);  #ifdef CONFIG_MLX4_EN_DCB -	if (!mlx4_is_slave(priv->mdev->dev)) -		dev->dcbnl_ops = &mlx4_en_dcbnl_ops; +	if (!mlx4_is_slave(priv->mdev->dev)) { +		if (mdev->dev->caps.flags & MLX4_DEV_CAP_FLAG_SET_ETH_SCHED) { +			dev->dcbnl_ops = &mlx4_en_dcbnl_ops; +		} else { +			en_info(priv, "enabling only PFC DCB ops\n"); +			dev->dcbnl_ops = &mlx4_en_dcbnl_pfc_ops; +		} +	}  #endif  	for (i = 0; i < MLX4_EN_MAC_HASH_SIZE; ++i) diff --git a/drivers/net/ethernet/mellanox/mlx4/fw.c b/drivers/net/ethernet/mellanox/mlx4/fw.c index 876439748cd..ab470d991ad 100644 --- a/drivers/net/ethernet/mellanox/mlx4/fw.c +++ b/drivers/net/ethernet/mellanox/mlx4/fw.c @@ -109,6 +109,7 @@ static void dump_dev_cap_flags(struct mlx4_dev *dev, u64 flags)  		[41] = "Unicast VEP steering support",  		[42] = "Multicast VEP steering support",  		[48] = "Counters support", +		[53] = "Port ETS Scheduler support",  		[55] = "Port link type sensing support",  		[59] = "Port management change event support",  		[61] = "64 byte EQE support", diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h index f710b7ce0dc..d4cb5d3b28a 100644 --- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h +++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h @@ -624,6 +624,7 @@ int mlx4_en_QUERY_PORT(struct mlx4_en_dev *mdev, u8 port);  #ifdef CONFIG_MLX4_EN_DCB  extern const struct dcbnl_rtnl_ops mlx4_en_dcbnl_ops; +extern const struct dcbnl_rtnl_ops mlx4_en_dcbnl_pfc_ops;  #endif  int mlx4_en_setup_tc(struct net_device *dev, u8 up); diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h index 811f91cf5e8..1bc5a750b33 100644 --- a/include/linux/mlx4/device.h +++ b/include/linux/mlx4/device.h @@ -140,6 +140,7 @@ enum {  	MLX4_DEV_CAP_FLAG_VEP_UC_STEER	= 1LL << 41,  	MLX4_DEV_CAP_FLAG_VEP_MC_STEER	= 1LL << 42,  	MLX4_DEV_CAP_FLAG_COUNTERS	= 1LL << 48, +	MLX4_DEV_CAP_FLAG_SET_ETH_SCHED = 1LL << 53,  	MLX4_DEV_CAP_FLAG_SENSE_SUPPORT	= 1LL << 55,  	MLX4_DEV_CAP_FLAG_PORT_MNG_CHG_EV = 1LL << 59,  	MLX4_DEV_CAP_FLAG_64B_EQE	= 1LL << 61,  |