igb: Get speed and duplex for 1G non_copper devices
authorAkeem G Abodunrin <akeem.g.abodunrin@intel.com>
Wed, 28 Aug 2013 02:23:09 +0000 (02:23 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Wed, 4 Sep 2013 12:28:31 +0000 (05:28 -0700)
This patch changes how we get speed/duplex for non_copper devices; it
now uses pcs register to get current speed and duplex instead of using
generic status register that we use to detect speed/duplex for copper
devices.

Signed-off-by: Akeem G Abodunrin <akeem.g.abodunrin@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/igb/e1000_82575.c

index 68dd7c8624c92a28cbcdedf65b591b6b4559d03e..79b58353d849177219f4e84e05bfabd64819d44a 100644 (file)
@@ -1140,6 +1140,31 @@ static s32 igb_get_cfg_done_82575(struct e1000_hw *hw)
        return ret_val;
 }
 
+/**
+ *  igb_get_link_up_info_82575 - Get link speed/duplex info
+ *  @hw: pointer to the HW structure
+ *  @speed: stores the current speed
+ *  @duplex: stores the current duplex
+ *
+ *  This is a wrapper function, if using the serial gigabit media independent
+ *  interface, use PCS to retrieve the link speed and duplex information.
+ *  Otherwise, use the generic function to get the link speed and duplex info.
+ **/
+static s32 igb_get_link_up_info_82575(struct e1000_hw *hw, u16 *speed,
+                                       u16 *duplex)
+{
+       s32 ret_val;
+
+       if (hw->phy.media_type != e1000_media_type_copper)
+               ret_val = igb_get_pcs_speed_and_duplex_82575(hw, speed,
+                                                              duplex);
+       else
+               ret_val = igb_get_speed_and_duplex_copper(hw, speed,
+                                                                   duplex);
+
+       return ret_val;
+}
+
 /**
  *  igb_check_for_link_82575 - Check for link
  *  @hw: pointer to the HW structure
@@ -2723,7 +2748,7 @@ static struct e1000_mac_operations e1000_mac_ops_82575 = {
        .check_for_link       = igb_check_for_link_82575,
        .rar_set              = igb_rar_set,
        .read_mac_addr        = igb_read_mac_addr_82575,
-       .get_speed_and_duplex = igb_get_speed_and_duplex_copper,
+       .get_speed_and_duplex = igb_get_link_up_info_82575,
 #ifdef CONFIG_IGB_HWMON
        .get_thermal_sensor_data = igb_get_thermal_sensor_data_generic,
        .init_thermal_sensor_thresh = igb_init_thermal_sensor_thresh_generic,