From 0941f2ccbe4ba8430c0df89df32a7749e3d92793 Mon Sep 17 00:00:00 2001 From: Michael Chan Date: Sun, 29 May 2005 14:57:23 -0700 Subject: [PATCH] --- yaml --- r: 1691 b: refs/heads/master c: ca43007a92662621e5819912fc31c346e3a2eed8 h: refs/heads/master i: 1689: ad871b249c959d6e3053e7c82350ed300b94a1b3 1687: 26d93e9af82fb1dd6848d73512945037b575717e v: v3 --- [refs] | 2 +- trunk/drivers/net/tg3.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 2a10bafdb923..f294c1c5cee7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 566f86adb336637d03900f53b886d879aa5f5d56 +refs/heads/master: ca43007a92662621e5819912fc31c346e3a2eed8 diff --git a/trunk/drivers/net/tg3.c b/trunk/drivers/net/tg3.c index ab2fa213b301..30349c5fd73c 100644 --- a/trunk/drivers/net/tg3.c +++ b/trunk/drivers/net/tg3.c @@ -7281,6 +7281,32 @@ static int tg3_test_nvram(struct tg3 *tp) return err; } +#define TG3_SERDES_TIMEOUT_SEC 2 +#define TG3_COPPER_TIMEOUT_SEC 6 + +static int tg3_test_link(struct tg3 *tp) +{ + int i, max; + + if (!netif_running(tp->dev)) + return -ENODEV; + + if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) + max = TG3_SERDES_TIMEOUT_SEC; + else + max = TG3_COPPER_TIMEOUT_SEC; + + for (i = 0; i < max; i++) { + if (netif_carrier_ok(tp->dev)) + return 0; + + if (msleep_interruptible(1000)) + break; + } + + return -EIO; +} + static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest, u64 *data) { @@ -7292,6 +7318,10 @@ static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest, etest->flags |= ETH_TEST_FL_FAILED; data[0] = 1; } + if (tg3_test_link(tp) != 0) { + etest->flags |= ETH_TEST_FL_FAILED; + data[1] = 1; + } } static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)