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

Reply via email to