diff options
author | Alexander Duyck <alexander.h.duyck@intel.com> | 2009-10-05 02:35:03 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-10-06 17:59:23 -0400 |
commit | 81fadd81a5bc897c8d0424d1cd90cb999d8e12b0 (patch) | |
tree | f0b71e08c7818f1c5a6e711ea5c2b2e5c71379eb /drivers/net/igb/e1000_phy.c | |
parent | 285b4167458ec7cc49008b2e61cbe0362deed335 (diff) |
igb: move the generic copper link setup code into e1000_phy.c
This patch moves the generic portion of the copper link setup into a
seperate function in e1000_phy.c. This helps to reduce the size of
copper_link_setup_82575 and make it a bit more readable.
Signed-off-by: Alexander Duyck <alexander.h.duyck@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/igb/e1000_phy.c')
-rw-r--r-- | drivers/net/igb/e1000_phy.c | 61 |
1 files changed, 60 insertions, 1 deletions
diff --git a/drivers/net/igb/e1000_phy.c b/drivers/net/igb/e1000_phy.c index d4c928ccb294..b27275d7ff6d 100644 --- a/drivers/net/igb/e1000_phy.c +++ b/drivers/net/igb/e1000_phy.c | |||
@@ -669,7 +669,7 @@ out: | |||
669 | * and restart the negotiation process between the link partner. If | 669 | * and restart the negotiation process between the link partner. If |
670 | * autoneg_wait_to_complete, then wait for autoneg to complete before exiting. | 670 | * autoneg_wait_to_complete, then wait for autoneg to complete before exiting. |
671 | **/ | 671 | **/ |
672 | s32 igb_copper_link_autoneg(struct e1000_hw *hw) | 672 | static s32 igb_copper_link_autoneg(struct e1000_hw *hw) |
673 | { | 673 | { |
674 | struct e1000_phy_info *phy = &hw->phy; | 674 | struct e1000_phy_info *phy = &hw->phy; |
675 | s32 ret_val; | 675 | s32 ret_val; |
@@ -893,6 +893,65 @@ out: | |||
893 | } | 893 | } |
894 | 894 | ||
895 | /** | 895 | /** |
896 | * igb_setup_copper_link - Configure copper link settings | ||
897 | * @hw: pointer to the HW structure | ||
898 | * | ||
899 | * Calls the appropriate function to configure the link for auto-neg or forced | ||
900 | * speed and duplex. Then we check for link, once link is established calls | ||
901 | * to configure collision distance and flow control are called. If link is | ||
902 | * not established, we return -E1000_ERR_PHY (-2). | ||
903 | **/ | ||
904 | s32 igb_setup_copper_link(struct e1000_hw *hw) | ||
905 | { | ||
906 | s32 ret_val; | ||
907 | bool link; | ||
908 | |||
909 | |||
910 | if (hw->mac.autoneg) { | ||
911 | /* | ||
912 | * Setup autoneg and flow control advertisement and perform | ||
913 | * autonegotiation. | ||
914 | */ | ||
915 | ret_val = igb_copper_link_autoneg(hw); | ||
916 | if (ret_val) | ||
917 | goto out; | ||
918 | } else { | ||
919 | /* | ||
920 | * PHY will be set to 10H, 10F, 100H or 100F | ||
921 | * depending on user settings. | ||
922 | */ | ||
923 | hw_dbg("Forcing Speed and Duplex\n"); | ||
924 | ret_val = hw->phy.ops.force_speed_duplex(hw); | ||
925 | if (ret_val) { | ||
926 | hw_dbg("Error Forcing Speed and Duplex\n"); | ||
927 | goto out; | ||
928 | } | ||
929 | } | ||
930 | |||
931 | /* | ||
932 | * Check link status. Wait up to 100 microseconds for link to become | ||
933 | * valid. | ||
934 | */ | ||
935 | ret_val = igb_phy_has_link(hw, | ||
936 | COPPER_LINK_UP_LIMIT, | ||
937 | 10, | ||
938 | &link); | ||
939 | if (ret_val) | ||
940 | goto out; | ||
941 | |||
942 | if (link) { | ||
943 | hw_dbg("Valid link established!!!\n"); | ||
944 | igb_config_collision_dist(hw); | ||
945 | ret_val = igb_config_fc_after_link_up(hw); | ||
946 | } else { | ||
947 | hw_dbg("Unable to establish link!!!\n"); | ||
948 | } | ||
949 | |||
950 | out: | ||
951 | return ret_val; | ||
952 | } | ||
953 | |||
954 | /** | ||
896 | * igb_phy_force_speed_duplex_igp - Force speed/duplex for igp PHY | 955 | * igb_phy_force_speed_duplex_igp - Force speed/duplex for igp PHY |
897 | * @hw: pointer to the HW structure | 956 | * @hw: pointer to the HW structure |
898 | * | 957 | * |