aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/igb/igb_ethtool.c
diff options
context:
space:
mode:
authorNick Nunley <nicholasx.d.nunley@intel.com>2010-02-16 20:01:59 -0500
committerDavid S. Miller <davem@davemloft.net>2010-02-17 16:21:33 -0500
commit88a268c1a11a2e94b7c55a8cfe97892d845887c8 (patch)
treeb748dcd6491b17376c984145c2dca02165d92547 /drivers/net/igb/igb_ethtool.c
parent53c992fa8497286f24f279ebec5a8c7a58d4e68c (diff)
igb: Power down link when interface is down
This changes the behavior of the driver to power down the link when the associated interface is down, unless management is enabled. Signed-off-by: Nicholas Nunley <nicholasx.d.nunley@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/igb/igb_ethtool.c')
-rw-r--r--drivers/net/igb/igb_ethtool.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/net/igb/igb_ethtool.c b/drivers/net/igb/igb_ethtool.c
index 4eea03b428c..485288303f3 100644
--- a/drivers/net/igb/igb_ethtool.c
+++ b/drivers/net/igb/igb_ethtool.c
@@ -1722,6 +1722,9 @@ static void igb_diag_test(struct net_device *netdev,
1722 1722
1723 dev_info(&adapter->pdev->dev, "offline testing starting\n"); 1723 dev_info(&adapter->pdev->dev, "offline testing starting\n");
1724 1724
1725 /* power up link for link test */
1726 igb_power_up_link(adapter);
1727
1725 /* Link test performed before hardware reset so autoneg doesn't 1728 /* Link test performed before hardware reset so autoneg doesn't
1726 * interfere with test result */ 1729 * interfere with test result */
1727 if (igb_link_test(adapter, &data[4])) 1730 if (igb_link_test(adapter, &data[4]))
@@ -1745,6 +1748,8 @@ static void igb_diag_test(struct net_device *netdev,
1745 eth_test->flags |= ETH_TEST_FL_FAILED; 1748 eth_test->flags |= ETH_TEST_FL_FAILED;
1746 1749
1747 igb_reset(adapter); 1750 igb_reset(adapter);
1751 /* power up link for loopback test */
1752 igb_power_up_link(adapter);
1748 if (igb_loopback_test(adapter, &data[3])) 1753 if (igb_loopback_test(adapter, &data[3]))
1749 eth_test->flags |= ETH_TEST_FL_FAILED; 1754 eth_test->flags |= ETH_TEST_FL_FAILED;
1750 1755
@@ -1763,9 +1768,14 @@ static void igb_diag_test(struct net_device *netdev,
1763 dev_open(netdev); 1768 dev_open(netdev);
1764 } else { 1769 } else {
1765 dev_info(&adapter->pdev->dev, "online testing starting\n"); 1770 dev_info(&adapter->pdev->dev, "online testing starting\n");
1766 /* Online tests */ 1771
1767 if (igb_link_test(adapter, &data[4])) 1772 /* PHY is powered down when interface is down */
1768 eth_test->flags |= ETH_TEST_FL_FAILED; 1773 if (!netif_carrier_ok(netdev)) {
1774 data[4] = 0;
1775 } else {
1776 if (igb_link_test(adapter, &data[4]))
1777 eth_test->flags |= ETH_TEST_FL_FAILED;
1778 }
1769 1779
1770 /* Online tests aren't run; pass by default */ 1780 /* Online tests aren't run; pass by default */
1771 data[0] = 0; 1781 data[0] = 0;