aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/forcedeth.c
diff options
context:
space:
mode:
authorDavid Decotigny <decot@google.com>2011-04-27 14:32:39 -0400
committerDavid S. Miller <davem@davemloft.net>2011-04-29 17:03:00 -0400
commit25db0338813a8915457636b1f6abe6a28fa73f8d (patch)
tree29ea39e45de1342beb4e3c58da0cfbc9915b617e /drivers/net/forcedeth.c
parent8ae6daca85c8bbd6a32c382db5e2a2a989f8bed2 (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/forcedeth.c')
-rw-r--r--drivers/net/forcedeth.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c
index 0e1c76a8c04..d24b3f3e646 100644
--- a/drivers/net/forcedeth.c
+++ b/drivers/net/forcedeth.c
@@ -4029,6 +4029,7 @@ static int nv_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
4029static int nv_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd) 4029static int nv_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
4030{ 4030{
4031 struct fe_priv *np = netdev_priv(dev); 4031 struct fe_priv *np = netdev_priv(dev);
4032 u32 speed = ethtool_cmd_speed(ecmd);
4032 4033
4033 if (ecmd->port != PORT_MII) 4034 if (ecmd->port != PORT_MII)
4034 return -EINVAL; 4035 return -EINVAL;
@@ -4054,7 +4055,7 @@ static int nv_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
4054 /* Note: autonegotiation disable, speed 1000 intentionally 4055 /* Note: autonegotiation disable, speed 1000 intentionally
4055 * forbidden - no one should need that. */ 4056 * forbidden - no one should need that. */
4056 4057
4057 if (ecmd->speed != SPEED_10 && ecmd->speed != SPEED_100) 4058 if (speed != SPEED_10 && speed != SPEED_100)
4058 return -EINVAL; 4059 return -EINVAL;
4059 if (ecmd->duplex != DUPLEX_HALF && ecmd->duplex != DUPLEX_FULL) 4060 if (ecmd->duplex != DUPLEX_HALF && ecmd->duplex != DUPLEX_FULL)
4060 return -EINVAL; 4061 return -EINVAL;
@@ -4138,13 +4139,13 @@ static int nv_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
4138 4139
4139 adv = mii_rw(dev, np->phyaddr, MII_ADVERTISE, MII_READ); 4140 adv = mii_rw(dev, np->phyaddr, MII_ADVERTISE, MII_READ);
4140 adv &= ~(ADVERTISE_ALL | ADVERTISE_100BASE4 | ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM); 4141 adv &= ~(ADVERTISE_ALL | ADVERTISE_100BASE4 | ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM);
4141 if (ecmd->speed == SPEED_10 && ecmd->duplex == DUPLEX_HALF) 4142 if (speed == SPEED_10 && ecmd->duplex == DUPLEX_HALF)
4142 adv |= ADVERTISE_10HALF; 4143 adv |= ADVERTISE_10HALF;
4143 if (ecmd->speed == SPEED_10 && ecmd->duplex == DUPLEX_FULL) 4144 if (speed == SPEED_10 && ecmd->duplex == DUPLEX_FULL)
4144 adv |= ADVERTISE_10FULL; 4145 adv |= ADVERTISE_10FULL;
4145 if (ecmd->speed == SPEED_100 && ecmd->duplex == DUPLEX_HALF) 4146 if (speed == SPEED_100 && ecmd->duplex == DUPLEX_HALF)
4146 adv |= ADVERTISE_100HALF; 4147 adv |= ADVERTISE_100HALF;
4147 if (ecmd->speed == SPEED_100 && ecmd->duplex == DUPLEX_FULL) 4148 if (speed == SPEED_100 && ecmd->duplex == DUPLEX_FULL)
4148 adv |= ADVERTISE_100FULL; 4149 adv |= ADVERTISE_100FULL;
4149 np->pause_flags &= ~(NV_PAUSEFRAME_AUTONEG|NV_PAUSEFRAME_RX_ENABLE|NV_PAUSEFRAME_TX_ENABLE); 4150 np->pause_flags &= ~(NV_PAUSEFRAME_AUTONEG|NV_PAUSEFRAME_RX_ENABLE|NV_PAUSEFRAME_TX_ENABLE);
4150 if (np->pause_flags & NV_PAUSEFRAME_RX_REQ) {/* for rx we set both advertisements but disable tx pause */ 4151 if (np->pause_flags & NV_PAUSEFRAME_RX_REQ) {/* for rx we set both advertisements but disable tx pause */