ChangeSet 1.2199.14.18, 2005/03/23 11:12:04-08:00, [EMAIL PROTECTED] [TG3]: Fix ethtool set functions Fix all relevant ethtool set functions to properly handle the not-netif_running() case. In most cases, the new settings are accepted without setting the hardware if not-netif_running(). The new settings will take effect when the device is subsequently brought up. tg3_nway_reset() is the exception where it will return -EAGAIN if not-netif_running(). Signed-off-by: Michael Chan <[EMAIL PROTECTED]> ACKed-by: Jeff Garzik <[EMAIL PROTECTED]> Signed-off-by: David S. Miller <[EMAIL PROTECTED]>
tg3.c | 47 ++++++++++++++++++++++++++++------------------- 1 files changed, 28 insertions(+), 19 deletions(-) diff -Nru a/drivers/net/tg3.c b/drivers/net/tg3.c --- a/drivers/net/tg3.c 2005-03-26 17:21:31 -08:00 +++ b/drivers/net/tg3.c 2005-03-26 17:21:31 -08:00 @@ -6544,10 +6544,6 @@ { struct tg3 *tp = netdev_priv(dev); - if (!(tp->tg3_flags & TG3_FLAG_INIT_COMPLETE) || - tp->link_config.phy_is_low_power) - return -EAGAIN; - cmd->supported = (SUPPORTED_Autoneg); if (!(tp->tg3_flags & TG3_FLAG_10_100_ONLY)) @@ -6564,8 +6560,10 @@ cmd->supported |= SUPPORTED_FIBRE; cmd->advertising = tp->link_config.advertising; - cmd->speed = tp->link_config.active_speed; - cmd->duplex = tp->link_config.active_duplex; + if (netif_running(dev)) { + cmd->speed = tp->link_config.active_speed; + cmd->duplex = tp->link_config.active_duplex; + } cmd->port = 0; cmd->phy_address = PHY_ADDR; cmd->transceiver = 0; @@ -6579,10 +6577,6 @@ { struct tg3 *tp = netdev_priv(dev); - if (!(tp->tg3_flags & TG3_FLAG_INIT_COMPLETE) || - tp->link_config.phy_is_low_power) - return -EAGAIN; - if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) { /* These are the only valid advertisement bits allowed. */ if (cmd->autoneg == AUTONEG_ENABLE && @@ -6607,7 +6601,9 @@ tp->link_config.duplex = cmd->duplex; } - tg3_setup_phy(tp, 1); + if (netif_running(dev)) + tg3_setup_phy(tp, 1); + spin_unlock(&tp->tx_lock); spin_unlock_irq(&tp->lock); @@ -6687,6 +6683,9 @@ u32 bmcr; int r; + if (!netif_running(dev)) + return -EAGAIN; + spin_lock_irq(&tp->lock); r = -EINVAL; tg3_readphy(tp, MII_BMCR, &bmcr); @@ -6723,7 +6722,9 @@ (ering->tx_pending > TG3_TX_RING_SIZE - 1)) return -EINVAL; - tg3_netif_stop(tp); + if (netif_running(dev)) + tg3_netif_stop(tp); + spin_lock_irq(&tp->lock); spin_lock(&tp->tx_lock); @@ -6735,9 +6736,12 @@ tp->rx_jumbo_pending = ering->rx_jumbo_pending; tp->tx_pending = ering->tx_pending; - tg3_halt(tp); - tg3_init_hw(tp); - tg3_netif_start(tp); + if (netif_running(dev)) { + tg3_halt(tp); + tg3_init_hw(tp); + tg3_netif_start(tp); + } + spin_unlock(&tp->tx_lock); spin_unlock_irq(&tp->lock); @@ -6757,7 +6761,9 @@ { struct tg3 *tp = netdev_priv(dev); - tg3_netif_stop(tp); + if (netif_running(dev)) + tg3_netif_stop(tp); + spin_lock_irq(&tp->lock); spin_lock(&tp->tx_lock); if (epause->autoneg) @@ -6772,9 +6778,12 @@ tp->tg3_flags |= TG3_FLAG_TX_PAUSE; else tp->tg3_flags &= ~TG3_FLAG_TX_PAUSE; - tg3_halt(tp); - tg3_init_hw(tp); - tg3_netif_start(tp); + + if (netif_running(dev)) { + tg3_halt(tp); + tg3_init_hw(tp); + tg3_netif_start(tp); + } spin_unlock(&tp->tx_lock); spin_unlock_irq(&tp->lock); - To unsubscribe from this list: send the line "unsubscribe bk-commits-head" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html