diff options
-rw-r--r-- | drivers/net/ethernet/intel/igb/igb_ethtool.c | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c index ce9b5a9e480c..48cbc833b051 100644 --- a/drivers/net/ethernet/intel/igb/igb_ethtool.c +++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c | |||
@@ -172,10 +172,7 @@ static int igb_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd) | |||
172 | SUPPORTED_Autoneg | | 172 | SUPPORTED_Autoneg | |
173 | SUPPORTED_Pause); | 173 | SUPPORTED_Pause); |
174 | ecmd->advertising = ADVERTISED_FIBRE; | 174 | ecmd->advertising = ADVERTISED_FIBRE; |
175 | if (hw->mac.type == e1000_i354) { | 175 | |
176 | ecmd->supported |= SUPPORTED_2500baseX_Full; | ||
177 | ecmd->advertising |= ADVERTISED_2500baseX_Full; | ||
178 | } | ||
179 | if ((eth_flags->e1000_base_lx) || (eth_flags->e1000_base_sx)) { | 176 | if ((eth_flags->e1000_base_lx) || (eth_flags->e1000_base_sx)) { |
180 | ecmd->supported |= SUPPORTED_1000baseT_Full; | 177 | ecmd->supported |= SUPPORTED_1000baseT_Full; |
181 | ecmd->advertising |= ADVERTISED_1000baseT_Full; | 178 | ecmd->advertising |= ADVERTISED_1000baseT_Full; |
@@ -209,16 +206,23 @@ static int igb_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd) | |||
209 | status = rd32(E1000_STATUS); | 206 | status = rd32(E1000_STATUS); |
210 | 207 | ||
211 | if (status & E1000_STATUS_LU) { | 208 | if (status & E1000_STATUS_LU) { |
212 | if ((hw->mac.type == e1000_i354) && | 209 | if (hw->mac.type == e1000_i354) { |
213 | (status & E1000_STATUS_2P5_SKU) && | 210 | if ((status & E1000_STATUS_2P5_SKU) && |
214 | !(status & E1000_STATUS_2P5_SKU_OVER)) | 211 | !(status & E1000_STATUS_2P5_SKU_OVER)) { |
215 | ecmd->speed = SPEED_2500; | 212 | ecmd->supported = SUPPORTED_2500baseX_Full; |
216 | else if (status & E1000_STATUS_SPEED_1000) | 213 | ecmd->advertising = ADVERTISED_2500baseX_Full; |
214 | ecmd->speed = SPEED_2500; | ||
215 | } else { | ||
216 | ecmd->supported = SUPPORTED_1000baseT_Full; | ||
217 | ecmd->advertising = ADVERTISED_1000baseT_Full; | ||
218 | } | ||
219 | } else if (status & E1000_STATUS_SPEED_1000) { | ||
217 | ecmd->speed = SPEED_1000; | 220 | ecmd->speed = SPEED_1000; |
218 | else if (status & E1000_STATUS_SPEED_100) | 221 | } else if (status & E1000_STATUS_SPEED_100) { |
219 | ecmd->speed = SPEED_100; | 222 | ecmd->speed = SPEED_100; |
220 | else | 223 | } else { |
221 | ecmd->speed = SPEED_10; | 224 | ecmd->speed = SPEED_10; |
225 | } | ||
222 | if ((status & E1000_STATUS_FD) || | 226 | if ((status & E1000_STATUS_FD) || |
223 | hw->phy.media_type != e1000_media_type_copper) | 227 | hw->phy.media_type != e1000_media_type_copper) |
224 | ecmd->duplex = DUPLEX_FULL; | 228 | ecmd->duplex = DUPLEX_FULL; |