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/pch_gbe | |
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/pch_gbe')
-rw-r--r-- | drivers/net/pch_gbe/pch_gbe_ethtool.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/net/pch_gbe/pch_gbe_ethtool.c b/drivers/net/pch_gbe/pch_gbe_ethtool.c index c35d105ab285..ea2d8e41887a 100644 --- a/drivers/net/pch_gbe/pch_gbe_ethtool.c +++ b/drivers/net/pch_gbe/pch_gbe_ethtool.c | |||
@@ -92,7 +92,7 @@ static int pch_gbe_get_settings(struct net_device *netdev, | |||
92 | ecmd->advertising &= ~(ADVERTISED_TP | ADVERTISED_1000baseT_Half); | 92 | ecmd->advertising &= ~(ADVERTISED_TP | ADVERTISED_1000baseT_Half); |
93 | 93 | ||
94 | if (!netif_carrier_ok(adapter->netdev)) | 94 | if (!netif_carrier_ok(adapter->netdev)) |
95 | ecmd->speed = -1; | 95 | ethtool_cmd_speed_set(ecmd, -1); |
96 | return ret; | 96 | return ret; |
97 | } | 97 | } |
98 | 98 | ||
@@ -109,12 +109,15 @@ static int pch_gbe_set_settings(struct net_device *netdev, | |||
109 | { | 109 | { |
110 | struct pch_gbe_adapter *adapter = netdev_priv(netdev); | 110 | struct pch_gbe_adapter *adapter = netdev_priv(netdev); |
111 | struct pch_gbe_hw *hw = &adapter->hw; | 111 | struct pch_gbe_hw *hw = &adapter->hw; |
112 | u32 speed = ethtool_cmd_speed(ecmd); | ||
112 | int ret; | 113 | int ret; |
113 | 114 | ||
114 | pch_gbe_hal_write_phy_reg(hw, MII_BMCR, BMCR_RESET); | 115 | pch_gbe_hal_write_phy_reg(hw, MII_BMCR, BMCR_RESET); |
115 | 116 | ||
116 | if (ecmd->speed == USHRT_MAX) { | 117 | /* when set_settings() is called with a ethtool_cmd previously |
117 | ecmd->speed = SPEED_1000; | 118 | * filled by get_settings() on a down link, speed is -1: */ |
119 | if (speed == UINT_MAX) { | ||
120 | speed = SPEED_1000; | ||
118 | ecmd->duplex = DUPLEX_FULL; | 121 | ecmd->duplex = DUPLEX_FULL; |
119 | } | 122 | } |
120 | ret = mii_ethtool_sset(&adapter->mii, ecmd); | 123 | ret = mii_ethtool_sset(&adapter->mii, ecmd); |
@@ -122,7 +125,7 @@ static int pch_gbe_set_settings(struct net_device *netdev, | |||
122 | pr_err("Error: mii_ethtool_sset\n"); | 125 | pr_err("Error: mii_ethtool_sset\n"); |
123 | return ret; | 126 | return ret; |
124 | } | 127 | } |
125 | hw->mac.link_speed = ecmd->speed; | 128 | hw->mac.link_speed = speed; |
126 | hw->mac.link_duplex = ecmd->duplex; | 129 | hw->mac.link_duplex = ecmd->duplex; |
127 | hw->phy.autoneg_advertised = ecmd->advertising; | 130 | hw->phy.autoneg_advertised = ecmd->advertising; |
128 | hw->mac.autoneg = ecmd->autoneg; | 131 | hw->mac.autoneg = ecmd->autoneg; |