diff options
author | Nick Nunley <nicholasx.d.nunley@intel.com> | 2010-02-16 20:01:59 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-02-17 16:21:33 -0500 |
commit | 88a268c1a11a2e94b7c55a8cfe97892d845887c8 (patch) | |
tree | b748dcd6491b17376c984145c2dca02165d92547 /drivers/net/igb/igb_ethtool.c | |
parent | 53c992fa8497286f24f279ebec5a8c7a58d4e68c (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.c | 16 |
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; |