diff options
author | yongari <yongari@FreeBSD.org> | 2012-02-23 06:35:18 +0000 |
---|---|---|
committer | yongari <yongari@FreeBSD.org> | 2012-02-23 06:35:18 +0000 |
commit | e09c5145431a7769c75f7652ee525b370ab153a1 (patch) | |
tree | 695a66430e734da854ff655ad93372df87eceae9 /sys/dev/sf | |
parent | 80037c4e254c4dd5e5ef356ec0bc0240e4c74963 (diff) | |
download | FreeBSD-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.c | 16 |
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; |