diff options
author | David Decotigny <decot@google.com> | 2011-04-27 14:32:38 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-04-29 17:01:30 -0400 |
commit | 8ae6daca85c8bbd6a32c382db5e2a2a989f8bed2 (patch) | |
tree | 0c85476c2af6568c3d3a73a960d582d2f91a1256 /drivers/net/pch_gbe | |
parent | 36504605432996590f889e33d47e2d9c581f7569 (diff) |
ethtool: Call ethtool's get/set_settings callbacks with cleaned data
This makes sure that when a driver calls the ethtool's
get/set_settings() callback of another driver, the data passed to it
is clean. This guarantees that speed_hi will be zeroed correctly if
the called callback doesn't explicitely set it: we are sure we don't
get a corrupted speed from the underlying driver. We also take care of
setting the cmd field appropriately (ETHTOOL_GSET/SSET).
This applies to dev_ethtool_get_settings(), which now makes sure it
sets up that ethtool command parameter correctly before passing it to
drivers. This also means that whoever calls dev_ethtool_get_settings()
does not have to clean the ethtool command parameter. This function
also becomes an exported symbol instead of an inline.
All drivers visible to make allyesconfig under 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_main.c | 6 | ||||
-rw-r--r-- | drivers/net/pch_gbe/pch_gbe_phy.c | 2 |
2 files changed, 4 insertions, 4 deletions
diff --git a/drivers/net/pch_gbe/pch_gbe_main.c b/drivers/net/pch_gbe/pch_gbe_main.c index 4cc9872f5ec4..f3e4b0adae93 100644 --- a/drivers/net/pch_gbe/pch_gbe_main.c +++ b/drivers/net/pch_gbe/pch_gbe_main.c | |||
@@ -888,12 +888,12 @@ static void pch_gbe_watchdog(unsigned long data) | |||
888 | struct pch_gbe_adapter *adapter = (struct pch_gbe_adapter *)data; | 888 | struct pch_gbe_adapter *adapter = (struct pch_gbe_adapter *)data; |
889 | struct net_device *netdev = adapter->netdev; | 889 | struct net_device *netdev = adapter->netdev; |
890 | struct pch_gbe_hw *hw = &adapter->hw; | 890 | struct pch_gbe_hw *hw = &adapter->hw; |
891 | struct ethtool_cmd cmd; | ||
892 | 891 | ||
893 | pr_debug("right now = %ld\n", jiffies); | 892 | pr_debug("right now = %ld\n", jiffies); |
894 | 893 | ||
895 | pch_gbe_update_stats(adapter); | 894 | pch_gbe_update_stats(adapter); |
896 | if ((mii_link_ok(&adapter->mii)) && (!netif_carrier_ok(netdev))) { | 895 | if ((mii_link_ok(&adapter->mii)) && (!netif_carrier_ok(netdev))) { |
896 | struct ethtool_cmd cmd = { .cmd = ETHTOOL_GSET }; | ||
897 | netdev->tx_queue_len = adapter->tx_queue_len; | 897 | netdev->tx_queue_len = adapter->tx_queue_len; |
898 | /* mii library handles link maintenance tasks */ | 898 | /* mii library handles link maintenance tasks */ |
899 | if (mii_ethtool_gset(&adapter->mii, &cmd)) { | 899 | if (mii_ethtool_gset(&adapter->mii, &cmd)) { |
@@ -903,7 +903,7 @@ static void pch_gbe_watchdog(unsigned long data) | |||
903 | PCH_GBE_WATCHDOG_PERIOD)); | 903 | PCH_GBE_WATCHDOG_PERIOD)); |
904 | return; | 904 | return; |
905 | } | 905 | } |
906 | hw->mac.link_speed = cmd.speed; | 906 | hw->mac.link_speed = ethtool_cmd_speed(&cmd); |
907 | hw->mac.link_duplex = cmd.duplex; | 907 | hw->mac.link_duplex = cmd.duplex; |
908 | /* Set the RGMII control. */ | 908 | /* Set the RGMII control. */ |
909 | pch_gbe_set_rgmii_ctrl(adapter, hw->mac.link_speed, | 909 | pch_gbe_set_rgmii_ctrl(adapter, hw->mac.link_speed, |
@@ -913,7 +913,7 @@ static void pch_gbe_watchdog(unsigned long data) | |||
913 | hw->mac.link_duplex); | 913 | hw->mac.link_duplex); |
914 | netdev_dbg(netdev, | 914 | netdev_dbg(netdev, |
915 | "Link is Up %d Mbps %s-Duplex\n", | 915 | "Link is Up %d Mbps %s-Duplex\n", |
916 | cmd.speed, | 916 | hw->mac.link_speed, |
917 | cmd.duplex == DUPLEX_FULL ? "Full" : "Half"); | 917 | cmd.duplex == DUPLEX_FULL ? "Full" : "Half"); |
918 | netif_carrier_on(netdev); | 918 | netif_carrier_on(netdev); |
919 | netif_wake_queue(netdev); | 919 | netif_wake_queue(netdev); |
diff --git a/drivers/net/pch_gbe/pch_gbe_phy.c b/drivers/net/pch_gbe/pch_gbe_phy.c index 923a687acd30..9a8207f686fd 100644 --- a/drivers/net/pch_gbe/pch_gbe_phy.c +++ b/drivers/net/pch_gbe/pch_gbe_phy.c | |||
@@ -247,7 +247,7 @@ inline void pch_gbe_phy_set_rgmii(struct pch_gbe_hw *hw) | |||
247 | void pch_gbe_phy_init_setting(struct pch_gbe_hw *hw) | 247 | void pch_gbe_phy_init_setting(struct pch_gbe_hw *hw) |
248 | { | 248 | { |
249 | struct pch_gbe_adapter *adapter; | 249 | struct pch_gbe_adapter *adapter; |
250 | struct ethtool_cmd cmd; | 250 | struct ethtool_cmd cmd = { .cmd = ETHTOOL_GSET }; |
251 | int ret; | 251 | int ret; |
252 | u16 mii_reg; | 252 | u16 mii_reg; |
253 | 253 | ||