summaryrefslogtreecommitdiffstats
path: root/sys/dev/sf
diff options
context:
space:
mode:
authoryongari <yongari@FreeBSD.org>2012-02-23 06:35:18 +0000
committeryongari <yongari@FreeBSD.org>2012-02-23 06:35:18 +0000
commite09c5145431a7769c75f7652ee525b370ab153a1 (patch)
tree695a66430e734da854ff655ad93372df87eceae9 /sys/dev/sf
parent80037c4e254c4dd5e5ef356ec0bc0240e4c74963 (diff)
downloadFreeBSD-src-e09c5145431a7769c75f7652ee525b370ab153a1.zip
FreeBSD-src-e09c5145431a7769c75f7652ee525b370ab153a1.tar.gz
With r232015, sf(4) gets correct speed/duplex of established link.
Add more strict speed check in sf_miibus_statchg() and do not touch MAC config registers when driver lost a link.
Diffstat (limited to 'sys/dev/sf')
-rw-r--r--sys/dev/sf/if_sf.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/sys/dev/sf/if_sf.c b/sys/dev/sf/if_sf.c
index abea0bc..4174886 100644
--- a/sys/dev/sf/if_sf.c
+++ b/sys/dev/sf/if_sf.c
@@ -403,11 +403,19 @@ sf_miibus_statchg(device_t dev)
(ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
return;
- if (mii->mii_media_status & IFM_ACTIVE) {
- if (IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE)
+ sc->sf_link = 0;
+ if ((mii->mii_media_status & (IFM_ACTIVE | IFM_AVALID)) ==
+ (IFM_ACTIVE | IFM_AVALID)) {
+ switch (IFM_SUBTYPE(mii->mii_media_active)) {
+ case IFM_10_T:
+ case IFM_100_TX:
+ case IFM_100_FX:
sc->sf_link = 1;
- } else
- sc->sf_link = 0;
+ break;
+ }
+ }
+ if (sc->sf_link == 0)
+ return;
val = csr_read_4(sc, SF_MACCFG_1);
val &= ~SF_MACCFG1_FULLDUPLEX;
OpenPOWER on IntegriCloud