|
@@ -167,7 +167,7 @@ static void ixgbe_get_pauseparam(struct net_device *netdev,
|
|
struct ixgbe_adapter *adapter = netdev_priv(netdev);
|
|
struct ixgbe_adapter *adapter = netdev_priv(netdev);
|
|
struct ixgbe_hw *hw = &adapter->hw;
|
|
struct ixgbe_hw *hw = &adapter->hw;
|
|
|
|
|
|
- pause->autoneg = AUTONEG_DISABLE;
|
|
|
|
|
|
+ pause->autoneg = (hw->fc.type == ixgbe_fc_full ? 1 : 0);
|
|
|
|
|
|
if (hw->fc.type == ixgbe_fc_rx_pause) {
|
|
if (hw->fc.type == ixgbe_fc_rx_pause) {
|
|
pause->rx_pause = 1;
|
|
pause->rx_pause = 1;
|
|
@@ -185,10 +185,8 @@ static int ixgbe_set_pauseparam(struct net_device *netdev,
|
|
struct ixgbe_adapter *adapter = netdev_priv(netdev);
|
|
struct ixgbe_adapter *adapter = netdev_priv(netdev);
|
|
struct ixgbe_hw *hw = &adapter->hw;
|
|
struct ixgbe_hw *hw = &adapter->hw;
|
|
|
|
|
|
- if (pause->autoneg == AUTONEG_ENABLE)
|
|
|
|
- return -EINVAL;
|
|
|
|
-
|
|
|
|
- if (pause->rx_pause && pause->tx_pause)
|
|
|
|
|
|
+ if ((pause->autoneg == AUTONEG_ENABLE) ||
|
|
|
|
+ (pause->rx_pause && pause->tx_pause))
|
|
hw->fc.type = ixgbe_fc_full;
|
|
hw->fc.type = ixgbe_fc_full;
|
|
else if (pause->rx_pause && !pause->tx_pause)
|
|
else if (pause->rx_pause && !pause->tx_pause)
|
|
hw->fc.type = ixgbe_fc_rx_pause;
|
|
hw->fc.type = ixgbe_fc_rx_pause;
|
|
@@ -196,6 +194,8 @@ static int ixgbe_set_pauseparam(struct net_device *netdev,
|
|
hw->fc.type = ixgbe_fc_tx_pause;
|
|
hw->fc.type = ixgbe_fc_tx_pause;
|
|
else if (!pause->rx_pause && !pause->tx_pause)
|
|
else if (!pause->rx_pause && !pause->tx_pause)
|
|
hw->fc.type = ixgbe_fc_none;
|
|
hw->fc.type = ixgbe_fc_none;
|
|
|
|
+ else
|
|
|
|
+ return -EINVAL;
|
|
|
|
|
|
hw->fc.original_type = hw->fc.type;
|
|
hw->fc.original_type = hw->fc.type;
|
|
|
|
|