aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/pch_gbe
diff options
context:
space:
mode:
authorDavid Decotigny <decot@google.com>2011-04-27 14:32:38 -0400
committerDavid S. Miller <davem@davemloft.net>2011-04-29 17:01:30 -0400
commit8ae6daca85c8bbd6a32c382db5e2a2a989f8bed2 (patch)
tree0c85476c2af6568c3d3a73a960d582d2f91a1256 /drivers/net/pch_gbe
parent36504605432996590f889e33d47e2d9c581f7569 (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.c6
-rw-r--r--drivers/net/pch_gbe/pch_gbe_phy.c2
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)
247void pch_gbe_phy_init_setting(struct pch_gbe_hw *hw) 247void 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