diff options
author | Greg Rose <gregory.v.rose@intel.com> | 2012-04-09 21:56:37 -0400 |
---|---|---|
committer | Jeff Kirsher <jeffrey.t.kirsher@intel.com> | 2012-05-03 05:36:07 -0400 |
commit | 31a1b3758e41d225695222793e5947e13ddcaba2 (patch) | |
tree | 3a5bfddeace5f3c0abc15de83b7747354caa95e2 | |
parent | 59aed95263bdd0e2b48eb9be5a94346d2d4abf90 (diff) |
ixgbevf: Add support to recognize 100mb link speed
The X540 10Gig controller is capable of linking at 100Mbits - add
support for reporting that link speed.
Signed-off-by: Greg Rose <gregory.v.rose@intel.com>
Tested-by: Sibai Li <sibai.li@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
-rw-r--r-- | drivers/net/ethernet/intel/ixgbevf/defines.h | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/ixgbevf/ethtool.c | 18 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/ixgbevf/vf.c | 12 |
3 files changed, 25 insertions, 7 deletions
diff --git a/drivers/net/ethernet/intel/ixgbevf/defines.h b/drivers/net/ethernet/intel/ixgbevf/defines.h index 947b5c830735..e09a6cc633bb 100644 --- a/drivers/net/ethernet/intel/ixgbevf/defines.h +++ b/drivers/net/ethernet/intel/ixgbevf/defines.h | |||
@@ -40,6 +40,7 @@ | |||
40 | typedef u32 ixgbe_link_speed; | 40 | typedef u32 ixgbe_link_speed; |
41 | #define IXGBE_LINK_SPEED_1GB_FULL 0x0020 | 41 | #define IXGBE_LINK_SPEED_1GB_FULL 0x0020 |
42 | #define IXGBE_LINK_SPEED_10GB_FULL 0x0080 | 42 | #define IXGBE_LINK_SPEED_10GB_FULL 0x0080 |
43 | #define IXGBE_LINK_SPEED_100_FULL 0x0008 | ||
43 | 44 | ||
44 | #define IXGBE_CTRL_RST 0x04000000 /* Reset (SW) */ | 45 | #define IXGBE_CTRL_RST 0x04000000 /* Reset (SW) */ |
45 | #define IXGBE_RXDCTL_ENABLE 0x02000000 /* Enable specific Rx Queue */ | 46 | #define IXGBE_RXDCTL_ENABLE 0x02000000 /* Enable specific Rx Queue */ |
@@ -48,6 +49,7 @@ typedef u32 ixgbe_link_speed; | |||
48 | #define IXGBE_LINKS_SPEED_82599 0x30000000 | 49 | #define IXGBE_LINKS_SPEED_82599 0x30000000 |
49 | #define IXGBE_LINKS_SPEED_10G_82599 0x30000000 | 50 | #define IXGBE_LINKS_SPEED_10G_82599 0x30000000 |
50 | #define IXGBE_LINKS_SPEED_1G_82599 0x20000000 | 51 | #define IXGBE_LINKS_SPEED_1G_82599 0x20000000 |
52 | #define IXGBE_LINKS_SPEED_100_82599 0x10000000 | ||
51 | 53 | ||
52 | /* Number of Transmit and Receive Descriptors must be a multiple of 8 */ | 54 | /* Number of Transmit and Receive Descriptors must be a multiple of 8 */ |
53 | #define IXGBE_REQ_TX_DESCRIPTOR_MULTIPLE 8 | 55 | #define IXGBE_REQ_TX_DESCRIPTOR_MULTIPLE 8 |
diff --git a/drivers/net/ethernet/intel/ixgbevf/ethtool.c b/drivers/net/ethernet/intel/ixgbevf/ethtool.c index 2bfe0d1d7958..e8dddf572d38 100644 --- a/drivers/net/ethernet/intel/ixgbevf/ethtool.c +++ b/drivers/net/ethernet/intel/ixgbevf/ethtool.c | |||
@@ -107,10 +107,20 @@ static int ixgbevf_get_settings(struct net_device *netdev, | |||
107 | hw->mac.ops.check_link(hw, &link_speed, &link_up, false); | 107 | hw->mac.ops.check_link(hw, &link_speed, &link_up, false); |
108 | 108 | ||
109 | if (link_up) { | 109 | if (link_up) { |
110 | ethtool_cmd_speed_set( | 110 | __u32 speed = SPEED_10000; |
111 | ecmd, | 111 | switch (link_speed) { |
112 | (link_speed == IXGBE_LINK_SPEED_10GB_FULL) ? | 112 | case IXGBE_LINK_SPEED_10GB_FULL: |
113 | SPEED_10000 : SPEED_1000); | 113 | speed = SPEED_10000; |
114 | break; | ||
115 | case IXGBE_LINK_SPEED_1GB_FULL: | ||
116 | speed = SPEED_1000; | ||
117 | break; | ||
118 | case IXGBE_LINK_SPEED_100_FULL: | ||
119 | speed = SPEED_100; | ||
120 | break; | ||
121 | } | ||
122 | |||
123 | ethtool_cmd_speed_set(ecmd, speed); | ||
114 | ecmd->duplex = DUPLEX_FULL; | 124 | ecmd->duplex = DUPLEX_FULL; |
115 | } else { | 125 | } else { |
116 | ethtool_cmd_speed_set(ecmd, -1); | 126 | ethtool_cmd_speed_set(ecmd, -1); |
diff --git a/drivers/net/ethernet/intel/ixgbevf/vf.c b/drivers/net/ethernet/intel/ixgbevf/vf.c index 74be7411242a..ec89b86f7ca4 100644 --- a/drivers/net/ethernet/intel/ixgbevf/vf.c +++ b/drivers/net/ethernet/intel/ixgbevf/vf.c | |||
@@ -404,11 +404,17 @@ static s32 ixgbevf_check_mac_link_vf(struct ixgbe_hw *hw, | |||
404 | else | 404 | else |
405 | *link_up = false; | 405 | *link_up = false; |
406 | 406 | ||
407 | if ((links_reg & IXGBE_LINKS_SPEED_82599) == | 407 | switch (links_reg & IXGBE_LINKS_SPEED_82599) { |
408 | IXGBE_LINKS_SPEED_10G_82599) | 408 | case IXGBE_LINKS_SPEED_10G_82599: |
409 | *speed = IXGBE_LINK_SPEED_10GB_FULL; | 409 | *speed = IXGBE_LINK_SPEED_10GB_FULL; |
410 | else | 410 | break; |
411 | case IXGBE_LINKS_SPEED_1G_82599: | ||
411 | *speed = IXGBE_LINK_SPEED_1GB_FULL; | 412 | *speed = IXGBE_LINK_SPEED_1GB_FULL; |
413 | break; | ||
414 | case IXGBE_LINKS_SPEED_100_82599: | ||
415 | *speed = IXGBE_LINK_SPEED_100_FULL; | ||
416 | break; | ||
417 | } | ||
412 | 418 | ||
413 | return 0; | 419 | return 0; |
414 | } | 420 | } |