igb: Power down link when interface is down
[deliverable/linux.git] / drivers / net / igb / e1000_82575.c
index 59817bcc7169d3b277fc779d037eb7713520d821..9d7fa2fb85ea0cb9de0b7582da337d03d7b9c917 100644 (file)
@@ -726,6 +726,34 @@ static s32 igb_check_for_link_82575(struct e1000_hw *hw)
        return ret_val;
 }
 
+/**
+ *  igb_power_up_serdes_link_82575 - Power up the serdes link after shutdown
+ *  @hw: pointer to the HW structure
+ **/
+void igb_power_up_serdes_link_82575(struct e1000_hw *hw)
+{
+       u32 reg;
+
+
+       if ((hw->phy.media_type != e1000_media_type_internal_serdes) &&
+           !igb_sgmii_active_82575(hw))
+               return;
+
+       /* Enable PCS to turn on link */
+       reg = rd32(E1000_PCS_CFG0);
+       reg |= E1000_PCS_CFG_PCS_EN;
+       wr32(E1000_PCS_CFG0, reg);
+
+       /* Power up the laser */
+       reg = rd32(E1000_CTRL_EXT);
+       reg &= ~E1000_CTRL_EXT_SDP3_DATA;
+       wr32(E1000_CTRL_EXT, reg);
+
+       /* flush the write to verify completion */
+       wrfl();
+       msleep(1);
+}
+
 /**
  *  igb_get_pcs_speed_and_duplex_82575 - Retrieve current speed/duplex
  *  @hw: pointer to the HW structure
@@ -1165,6 +1193,22 @@ out:
        return ret_val;
 }
 
+/**
+ * igb_power_down_phy_copper_82575 - Remove link during PHY power down
+ * @hw: pointer to the HW structure
+ *
+ * In the case of a PHY power down to save power, or to turn off link during a
+ * driver unload, or wake on lan is not enabled, remove the link.
+ **/
+void igb_power_down_phy_copper_82575(struct e1000_hw *hw)
+{
+       /* If the management interface is not enabled, then power down */
+       if (!(igb_enable_mng_pass_thru(hw) || igb_check_reset_block(hw)))
+               igb_power_down_phy_copper(hw);
+
+       return;
+}
+
 /**
  *  igb_clear_hw_cntrs_82575 - Clear device specific hardware counters
  *  @hw: pointer to the HW structure
This page took 0.05289 seconds and 5 git commands to generate.