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/cxgb4/cxgb4_main.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/cxgb4/cxgb4_main.c')
-rw-r--r-- | drivers/net/cxgb4/cxgb4_main.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/net/cxgb4/cxgb4_main.c b/drivers/net/cxgb4/cxgb4_main.c index bdc868ca47ec..c02b4d3b73fc 100644 --- a/drivers/net/cxgb4/cxgb4_main.c +++ b/drivers/net/cxgb4/cxgb4_main.c | |||
@@ -1460,6 +1460,7 @@ static int set_settings(struct net_device *dev, struct ethtool_cmd *cmd) | |||
1460 | unsigned int cap; | 1460 | unsigned int cap; |
1461 | struct port_info *p = netdev_priv(dev); | 1461 | struct port_info *p = netdev_priv(dev); |
1462 | struct link_config *lc = &p->link_cfg; | 1462 | struct link_config *lc = &p->link_cfg; |
1463 | u32 speed = ethtool_cmd_speed(cmd); | ||
1463 | 1464 | ||
1464 | if (cmd->duplex != DUPLEX_FULL) /* only full-duplex supported */ | 1465 | if (cmd->duplex != DUPLEX_FULL) /* only full-duplex supported */ |
1465 | return -EINVAL; | 1466 | return -EINVAL; |
@@ -1470,16 +1471,16 @@ static int set_settings(struct net_device *dev, struct ethtool_cmd *cmd) | |||
1470 | * being requested. | 1471 | * being requested. |
1471 | */ | 1472 | */ |
1472 | if (cmd->autoneg == AUTONEG_DISABLE && | 1473 | if (cmd->autoneg == AUTONEG_DISABLE && |
1473 | (lc->supported & speed_to_caps(cmd->speed))) | 1474 | (lc->supported & speed_to_caps(speed))) |
1474 | return 0; | 1475 | return 0; |
1475 | return -EINVAL; | 1476 | return -EINVAL; |
1476 | } | 1477 | } |
1477 | 1478 | ||
1478 | if (cmd->autoneg == AUTONEG_DISABLE) { | 1479 | if (cmd->autoneg == AUTONEG_DISABLE) { |
1479 | cap = speed_to_caps(cmd->speed); | 1480 | cap = speed_to_caps(speed); |
1480 | 1481 | ||
1481 | if (!(lc->supported & cap) || cmd->speed == SPEED_1000 || | 1482 | if (!(lc->supported & cap) || (speed == SPEED_1000) || |
1482 | cmd->speed == SPEED_10000) | 1483 | (speed == SPEED_10000)) |
1483 | return -EINVAL; | 1484 | return -EINVAL; |
1484 | lc->requested_speed = cap; | 1485 | lc->requested_speed = cap; |
1485 | lc->advertising = 0; | 1486 | lc->advertising = 0; |