aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/e1000e/es2lan.c
diff options
context:
space:
mode:
authorBruce Allan <bruce.w.allan@intel.com>2009-12-01 10:47:22 -0500
committerDavid S. Miller <davem@davemloft.net>2009-12-02 03:35:52 -0500
commit17f208deb9bf88315aa72c08c866a235c399fb9a (patch)
tree9cc8bc9ce40587590fcea9d80e134adaf54567b2 /drivers/net/e1000e/es2lan.c
parenteb656d4552a6c9de5fdcee4a376b171f57b8a4a2 (diff)
e1000e: provide family-specific PHY power up/down operations
The different families (80003es2lan, 8257x, ICHx/PCH) supported by the driver each have their own conditions when the PHY can be powered down. This patch rewrites the PHY power up/down code to fit with the family- specific style used in the driver. All pre-existing calls to power up or down the PHY remain untouched. A new call to power down the PHY when removing the driver when the interface is down replaces the current call to reset the PHY in order to reduce power consumption. Signed-off-by: Bruce Allan <bruce.w.allan@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/e1000e/es2lan.c')
-rw-r--r--drivers/net/e1000e/es2lan.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/drivers/net/e1000e/es2lan.c b/drivers/net/e1000e/es2lan.c
index 3f435c16608d..c7bc657b5da2 100644
--- a/drivers/net/e1000e/es2lan.c
+++ b/drivers/net/e1000e/es2lan.c
@@ -114,6 +114,7 @@ static s32 e1000_read_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset,
114 u16 *data); 114 u16 *data);
115static s32 e1000_write_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset, 115static s32 e1000_write_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset,
116 u16 data); 116 u16 data);
117static void e1000_power_down_phy_copper_80003es2lan(struct e1000_hw *hw);
117 118
118/** 119/**
119 * e1000_init_phy_params_80003es2lan - Init ESB2 PHY func ptrs. 120 * e1000_init_phy_params_80003es2lan - Init ESB2 PHY func ptrs.
@@ -127,6 +128,9 @@ static s32 e1000_init_phy_params_80003es2lan(struct e1000_hw *hw)
127 if (hw->phy.media_type != e1000_media_type_copper) { 128 if (hw->phy.media_type != e1000_media_type_copper) {
128 phy->type = e1000_phy_none; 129 phy->type = e1000_phy_none;
129 return 0; 130 return 0;
131 } else {
132 phy->ops.power_up = e1000_power_up_phy_copper;
133 phy->ops.power_down = e1000_power_down_phy_copper_80003es2lan;
130 } 134 }
131 135
132 phy->addr = 1; 136 phy->addr = 1;
@@ -1303,6 +1307,23 @@ static s32 e1000_write_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset,
1303} 1307}
1304 1308
1305/** 1309/**
1310 * e1000_power_down_phy_copper_80003es2lan - Remove link during PHY power down
1311 * @hw: pointer to the HW structure
1312 *
1313 * In the case of a PHY power down to save power, or to turn off link during a
1314 * driver unload, or wake on lan is not enabled, remove the link.
1315 **/
1316static void e1000_power_down_phy_copper_80003es2lan(struct e1000_hw *hw)
1317{
1318 /* If the management interface is not enabled, then power down */
1319 if (!(hw->mac.ops.check_mng_mode(hw) ||
1320 hw->phy.ops.check_reset_block(hw)))
1321 e1000_power_down_phy_copper(hw);
1322
1323 return;
1324}
1325
1326/**
1306 * e1000_clear_hw_cntrs_80003es2lan - Clear device specific hardware counters 1327 * e1000_clear_hw_cntrs_80003es2lan - Clear device specific hardware counters
1307 * @hw: pointer to the HW structure 1328 * @hw: pointer to the HW structure
1308 * 1329 *