Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=309af40b5f4c2065c9a5f74a360ad3d3b0c9c9cd
Commit:     309af40b5f4c2065c9a5f74a360ad3d3b0c9c9cd
Parent:     4e6c709c5ab886be0ddbc96c4f96534e55920e68
Author:     Auke Kok <[EMAIL PROTECTED]>
AuthorDate: Fri Oct 5 15:22:02 2007 -0700
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Wed Oct 10 16:55:25 2007 -0700

    e1000e: restore flow control settings properly
    
    After a cable unplug the forced flow control settings were lost
    accidentally and the flow control settings fell back to the default
    EEPROM determined values. This breaks for people who want to
    run without fc enabled - after a cable reset the driver would
    refuse to run with fc disabled.
    
    Signed-off-by: Auke Kok <[EMAIL PROTECTED]>
    Signed-off-by: Jeff Garzik <[EMAIL PROTECTED]>
---
 drivers/net/e1000e/ethtool.c |    1 +
 drivers/net/e1000e/lib.c     |   12 +++++++++---
 drivers/net/e1000e/netdev.c  |    1 +
 3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/drivers/net/e1000e/ethtool.c b/drivers/net/e1000e/ethtool.c
index 2e8218f..b7a7e2a 100644
--- a/drivers/net/e1000e/ethtool.c
+++ b/drivers/net/e1000e/ethtool.c
@@ -301,6 +301,7 @@ static int e1000_set_pauseparam(struct net_device *netdev,
        hw->mac.original_fc = hw->mac.fc;
 
        if (adapter->fc_autoneg == AUTONEG_ENABLE) {
+               hw->mac.fc = e1000_fc_default;
                if (netif_running(adapter->netdev)) {
                        e1000e_down(adapter);
                        e1000e_up(adapter);
diff --git a/drivers/net/e1000e/lib.c b/drivers/net/e1000e/lib.c
index 3bbfe60..0bdeca3 100644
--- a/drivers/net/e1000e/lib.c
+++ b/drivers/net/e1000e/lib.c
@@ -639,9 +639,15 @@ s32 e1000e_setup_link(struct e1000_hw *hw)
        if (e1000_check_reset_block(hw))
                return 0;
 
-       ret_val = e1000_set_default_fc_generic(hw);
-       if (ret_val)
-               return ret_val;
+       /*
+        * If flow control is set to default, set flow control based on
+        * the EEPROM flow control settings.
+        */
+       if (mac->fc == e1000_fc_default) {
+               ret_val = e1000_set_default_fc_generic(hw);
+               if (ret_val)
+                       return ret_val;
+       }
 
        /* We want to save off the original Flow Control configuration just
         * in case we get disconnected and then reconnected into a different
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
index 600538b..033e124 100644
--- a/drivers/net/e1000e/netdev.c
+++ b/drivers/net/e1000e/netdev.c
@@ -4195,6 +4195,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
 
        /* Initialize link parameters. User can change them with ethtool */
        adapter->hw.mac.autoneg = 1;
+       adapter->fc_autoneg = 1;
        adapter->hw.mac.original_fc = e1000_fc_default;
        adapter->hw.mac.fc = e1000_fc_default;
        adapter->hw.phy.autoneg_advertised = 0x2f;
-
To unsubscribe from this list: send the line "unsubscribe git-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