mlx4_en: Pause parameters per port

Before the change the driver reported the same pause parameters
for all the ports, even only one of them was modified.

Signed-off-by: Yevgeny Petrilin <yevgenyp@mellanox.co.il>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by Yevgeny Petrilin and committed by David S. Miller d53b93f2 a2224ad3

+24 -22
+4 -4
drivers/net/mlx4/en_netdev.c
··· 656 /* Configure port */ 657 err = mlx4_SET_PORT_general(mdev->dev, priv->port, 658 priv->rx_skb_size + ETH_FCS_LEN, 659 - mdev->profile.tx_pause, 660 - mdev->profile.tx_ppp, 661 - mdev->profile.rx_pause, 662 - mdev->profile.rx_ppp); 663 if (err) { 664 mlx4_err(mdev, "Failed setting port general configurations" 665 " for port %d, with error %d\n", priv->port, err);
··· 656 /* Configure port */ 657 err = mlx4_SET_PORT_general(mdev->dev, priv->port, 658 priv->rx_skb_size + ETH_FCS_LEN, 659 + priv->prof->tx_pause, 660 + priv->prof->tx_ppp, 661 + priv->prof->rx_pause, 662 + priv->prof->rx_ppp); 663 if (err) { 664 mlx4_err(mdev, "Failed setting port general configurations" 665 " for port %d, with error %d\n", priv->port, err);
+16 -14
drivers/net/mlx4/en_params.c
··· 90 int mlx4_en_get_profile(struct mlx4_en_dev *mdev) 91 { 92 struct mlx4_en_profile *params = &mdev->profile; 93 94 params->rx_moder_cnt = min_t(int, rx_moder_cnt, MLX4_EN_AUTO_CONF); 95 params->rx_moder_time = min_t(int, rx_moder_time, MLX4_EN_AUTO_CONF); ··· 98 params->rss_xor = (rss_xor != 0); 99 params->rss_mask = rss_mask & 0x1f; 100 params->num_lro = min_t(int, num_lro , MLX4_EN_MAX_LRO_DESCRIPTORS); 101 - params->rx_pause = pprx; 102 - params->rx_ppp = pfcrx; 103 - params->tx_pause = pptx; 104 - params->tx_ppp = pfctx; 105 - if (params->rx_ppp || params->tx_ppp) { 106 params->prof[1].tx_ring_num = MLX4_EN_TX_RING_NUM; 107 params->prof[2].tx_ring_num = MLX4_EN_TX_RING_NUM; 108 } else { ··· 410 struct mlx4_en_dev *mdev = priv->mdev; 411 int err; 412 413 - mdev->profile.tx_pause = pause->tx_pause != 0; 414 - mdev->profile.rx_pause = pause->rx_pause != 0; 415 err = mlx4_SET_PORT_general(mdev->dev, priv->port, 416 priv->rx_skb_size + ETH_FCS_LEN, 417 - mdev->profile.tx_pause, 418 - mdev->profile.tx_ppp, 419 - mdev->profile.rx_pause, 420 - mdev->profile.rx_ppp); 421 if (err) 422 mlx4_err(mdev, "Failed setting pause params to\n"); 423 ··· 428 struct ethtool_pauseparam *pause) 429 { 430 struct mlx4_en_priv *priv = netdev_priv(dev); 431 - struct mlx4_en_dev *mdev = priv->mdev; 432 433 - pause->tx_pause = mdev->profile.tx_pause; 434 - pause->rx_pause = mdev->profile.rx_pause; 435 } 436 437 static void mlx4_en_get_ringparam(struct net_device *dev,
··· 90 int mlx4_en_get_profile(struct mlx4_en_dev *mdev) 91 { 92 struct mlx4_en_profile *params = &mdev->profile; 93 + int i; 94 95 params->rx_moder_cnt = min_t(int, rx_moder_cnt, MLX4_EN_AUTO_CONF); 96 params->rx_moder_time = min_t(int, rx_moder_time, MLX4_EN_AUTO_CONF); ··· 97 params->rss_xor = (rss_xor != 0); 98 params->rss_mask = rss_mask & 0x1f; 99 params->num_lro = min_t(int, num_lro , MLX4_EN_MAX_LRO_DESCRIPTORS); 100 + for (i = 1; i <= MLX4_MAX_PORTS; i++) { 101 + params->prof[i].rx_pause = pprx; 102 + params->prof[i].rx_ppp = pfcrx; 103 + params->prof[i].tx_pause = pptx; 104 + params->prof[i].tx_ppp = pfctx; 105 + } 106 + if (pfcrx || pfctx) { 107 params->prof[1].tx_ring_num = MLX4_EN_TX_RING_NUM; 108 params->prof[2].tx_ring_num = MLX4_EN_TX_RING_NUM; 109 } else { ··· 407 struct mlx4_en_dev *mdev = priv->mdev; 408 int err; 409 410 + priv->prof->tx_pause = pause->tx_pause != 0; 411 + priv->prof->rx_pause = pause->rx_pause != 0; 412 err = mlx4_SET_PORT_general(mdev->dev, priv->port, 413 priv->rx_skb_size + ETH_FCS_LEN, 414 + priv->prof->tx_pause, 415 + priv->prof->tx_ppp, 416 + priv->prof->rx_pause, 417 + priv->prof->rx_ppp); 418 if (err) 419 mlx4_err(mdev, "Failed setting pause params to\n"); 420 ··· 425 struct ethtool_pauseparam *pause) 426 { 427 struct mlx4_en_priv *priv = netdev_priv(dev); 428 429 + pause->tx_pause = priv->prof->tx_pause; 430 + pause->rx_pause = priv->prof->rx_pause; 431 } 432 433 static void mlx4_en_get_ringparam(struct net_device *dev,
+4 -4
drivers/net/mlx4/mlx4_en.h
··· 322 u32 rx_ring_num; 323 u32 tx_ring_size; 324 u32 rx_ring_size; 325 }; 326 327 struct mlx4_en_profile { ··· 337 int rx_moder_cnt; 338 int rx_moder_time; 339 int auto_moder; 340 - u8 rx_pause; 341 - u8 rx_ppp; 342 - u8 tx_pause; 343 - u8 tx_ppp; 344 u8 no_reset; 345 struct mlx4_en_port_profile prof[MLX4_MAX_PORTS + 1]; 346 };
··· 322 u32 rx_ring_num; 323 u32 tx_ring_size; 324 u32 rx_ring_size; 325 + u8 rx_pause; 326 + u8 rx_ppp; 327 + u8 tx_pause; 328 + u8 tx_ppp; 329 }; 330 331 struct mlx4_en_profile { ··· 333 int rx_moder_cnt; 334 int rx_moder_time; 335 int auto_moder; 336 u8 no_reset; 337 struct mlx4_en_port_profile prof[MLX4_MAX_PORTS + 1]; 338 };