| To: | jgarzik@xxxxxxxxx |
|---|---|
| Subject: | [PATCH 8/12 2.4] e1000 - Shutdown PHY while bringing the interface down (if WoL is off) |
| From: | ganesh.venkatesan@xxxxxxxxx |
| Date: | Thu, 29 Jul 2004 08:30:31 -0700 (PDT) |
| Cc: | netdev@xxxxxxxxxxx, <ganesh.venkatesan@xxxxxxxxx> |
| Reply-to: | ganesh.venkatesan@xxxxxxxxx |
| Sender: | netdev-bounce@xxxxxxxxxxx |
diff -up linux-2.4/drivers/net/e1000/e1000_main.c
linux-2.4/drivers/net/e1000.new/e1000_main.c
--- linux-2.4/drivers/net/e1000/e1000_main.c 2004-07-28 08:47:08.177582000
-0700
+++ linux-2.4/drivers/net/e1000.new/e1000_main.c 2004-07-28
08:47:09.559371936 -0700
@@ -256,6 +256,14 @@ e1000_up(struct e1000_adapter *adapter)
/* hardware has been reset, we need to reload some things */
+ /* Reset the PHY if it was previously powered down */
+ if(adapter->hw.media_type == e1000_media_type_copper) {
+ uint16_t mii_reg;
+ e1000_read_phy_reg(&adapter->hw, PHY_CTRL, &mii_reg);
+ if(mii_reg & MII_CR_POWER_DOWN)
+ e1000_phy_reset(&adapter->hw);
+ }
+
e1000_set_multi(netdev);
e1000_restore_vlan(adapter);
@@ -294,6 +302,15 @@ e1000_down(struct e1000_adapter *adapter
e1000_reset(adapter);
e1000_clean_tx_ring(adapter);
e1000_clean_rx_ring(adapter);
+
+ /* If WoL is not enabled
+ * Power down the PHY so no link is implied when interface is down */
+ if(!adapter->wol && adapter->hw.media_type == e1000_media_type_copper) {
+ uint16_t mii_reg;
+ e1000_read_phy_reg(&adapter->hw, PHY_CTRL, &mii_reg);
+ mii_reg |= MII_CR_POWER_DOWN;
+ e1000_write_phy_reg(&adapter->hw, PHY_CTRL, mii_reg);
+ }
}
void
@@ -2544,6 +2521,8 @@ e1000_mii_ioctl(struct net_device *netde
switch (data->reg_num) {
case PHY_CTRL:
if(data->val_in & MII_CR_AUTO_NEG_EN) {
+ if(mii_reg & MII_CR_POWER_DOWN)
+ break;
adapter->hw.autoneg = 1;
adapter->hw.autoneg_advertised = 0x2F;
} else {
@@ -2573,6 +2592,18 @@ e1000_mii_ioctl(struct net_device *netde
return -EIO;
break;
}
+ } else {
+ switch (data->reg_num) {
+ case PHY_CTRL:
+ if(mii_reg & MII_CR_POWER_DOWN)
+ break;
+ if(netif_running(adapter->netdev)) {
+ e1000_down(adapter);
+ e1000_up(adapter);
+ } else
+ e1000_reset(adapter);
+ break;
+ }
}
break;
default:
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| ||
| Previous by Date: | [PATCH 7/12 2.4] e1000 - null patch, ganesh . venkatesan |
|---|---|
| Next by Date: | [PATCH 9/12 2.4] e1000 - Add compiler hints (likely/unlikely), check return codes, related cleanup, ganesh . venkatesan |
| Previous by Thread: | [PATCH 7/12 2.4] e1000 - null patch, ganesh . venkatesan |
| Next by Thread: | [PATCH 9/12 2.4] e1000 - Add compiler hints (likely/unlikely), check return codes, related cleanup, ganesh . venkatesan |
| Indexes: | [Date] [Thread] [Top] [All Lists] |