diff options
author | David Decotigny <decot@google.com> | 2011-04-27 14:32:39 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-04-29 17:03:00 -0400 |
commit | 25db0338813a8915457636b1f6abe6a28fa73f8d (patch) | |
tree | 29ea39e45de1342beb4e3c58da0cfbc9915b617e /drivers/net/mii.c | |
parent | 8ae6daca85c8bbd6a32c382db5e2a2a989f8bed2 (diff) |
ethtool: Use full 32 bit speed range in ethtool's set_settings
This makes sure the ethtool's set_settings() callback of network
drivers don't ignore the 16 most significant bits when ethtool calls
their set_settings().
All drivers compiled with make allyesconfig on x86_64 have been
updated.
Signed-off-by: David Decotigny <decot@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/mii.c')
-rw-r--r-- | drivers/net/mii.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/net/mii.c b/drivers/net/mii.c index 05acca78f63a..e8198edeaa76 100644 --- a/drivers/net/mii.c +++ b/drivers/net/mii.c | |||
@@ -157,10 +157,11 @@ int mii_ethtool_gset(struct mii_if_info *mii, struct ethtool_cmd *ecmd) | |||
157 | int mii_ethtool_sset(struct mii_if_info *mii, struct ethtool_cmd *ecmd) | 157 | int mii_ethtool_sset(struct mii_if_info *mii, struct ethtool_cmd *ecmd) |
158 | { | 158 | { |
159 | struct net_device *dev = mii->dev; | 159 | struct net_device *dev = mii->dev; |
160 | u32 speed = ethtool_cmd_speed(ecmd); | ||
160 | 161 | ||
161 | if (ecmd->speed != SPEED_10 && | 162 | if (speed != SPEED_10 && |
162 | ecmd->speed != SPEED_100 && | 163 | speed != SPEED_100 && |
163 | ecmd->speed != SPEED_1000) | 164 | speed != SPEED_1000) |
164 | return -EINVAL; | 165 | return -EINVAL; |
165 | if (ecmd->duplex != DUPLEX_HALF && ecmd->duplex != DUPLEX_FULL) | 166 | if (ecmd->duplex != DUPLEX_HALF && ecmd->duplex != DUPLEX_FULL) |
166 | return -EINVAL; | 167 | return -EINVAL; |
@@ -172,7 +173,7 @@ int mii_ethtool_sset(struct mii_if_info *mii, struct ethtool_cmd *ecmd) | |||
172 | return -EINVAL; | 173 | return -EINVAL; |
173 | if (ecmd->autoneg != AUTONEG_DISABLE && ecmd->autoneg != AUTONEG_ENABLE) | 174 | if (ecmd->autoneg != AUTONEG_DISABLE && ecmd->autoneg != AUTONEG_ENABLE) |
174 | return -EINVAL; | 175 | return -EINVAL; |
175 | if ((ecmd->speed == SPEED_1000) && (!mii->supports_gmii)) | 176 | if ((speed == SPEED_1000) && (!mii->supports_gmii)) |
176 | return -EINVAL; | 177 | return -EINVAL; |
177 | 178 | ||
178 | /* ignore supported, maxtxpkt, maxrxpkt */ | 179 | /* ignore supported, maxtxpkt, maxrxpkt */ |
@@ -230,9 +231,9 @@ int mii_ethtool_sset(struct mii_if_info *mii, struct ethtool_cmd *ecmd) | |||
230 | bmcr = mii->mdio_read(dev, mii->phy_id, MII_BMCR); | 231 | bmcr = mii->mdio_read(dev, mii->phy_id, MII_BMCR); |
231 | tmp = bmcr & ~(BMCR_ANENABLE | BMCR_SPEED100 | | 232 | tmp = bmcr & ~(BMCR_ANENABLE | BMCR_SPEED100 | |
232 | BMCR_SPEED1000 | BMCR_FULLDPLX); | 233 | BMCR_SPEED1000 | BMCR_FULLDPLX); |
233 | if (ecmd->speed == SPEED_1000) | 234 | if (speed == SPEED_1000) |
234 | tmp |= BMCR_SPEED1000; | 235 | tmp |= BMCR_SPEED1000; |
235 | else if (ecmd->speed == SPEED_100) | 236 | else if (speed == SPEED_100) |
236 | tmp |= BMCR_SPEED100; | 237 | tmp |= BMCR_SPEED100; |
237 | if (ecmd->duplex == DUPLEX_FULL) { | 238 | if (ecmd->duplex == DUPLEX_FULL) { |
238 | tmp |= BMCR_FULLDPLX; | 239 | tmp |= BMCR_FULLDPLX; |