aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/pch_gbe
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/pch_gbe
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/pch_gbe')
-rw-r--r--drivers/net/pch_gbe/pch_gbe_ethtool.c11
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;