diff options
author | 2006-12-30 09:38:28 +0000 | |
---|---|---|
committer | 2006-12-30 09:38:28 +0000 | |
commit | f4bd491b2cd4899c52ac557eb236d0b5f96d0c0a (patch) | |
tree | 92d718af249af0f5852c7c58cefc722932985c7b | |
parent | Make mii_phy_auto() advertise flow control if MIIF_DOPAUSE is set. (diff) | |
download | wireguard-openbsd-f4bd491b2cd4899c52ac557eb236d0b5f96d0c0a.tar.xz wireguard-openbsd-f4bd491b2cd4899c52ac557eb236d0b5f96d0c0a.zip |
Add flow control support.
ok brad@
-rw-r--r-- | sys/dev/ic/re.c | 4 | ||||
-rw-r--r-- | sys/dev/mii/rgephy.c | 13 |
2 files changed, 11 insertions, 6 deletions
diff --git a/sys/dev/ic/re.c b/sys/dev/ic/re.c index 7402d9ec58c..26224ffb1e8 100644 --- a/sys/dev/ic/re.c +++ b/sys/dev/ic/re.c @@ -1,4 +1,4 @@ -/* $OpenBSD: re.c,v 1.60 2006/12/21 05:15:06 drahn Exp $ */ +/* $OpenBSD: re.c,v 1.61 2006/12/30 09:38:28 kettenis Exp $ */ /* $FreeBSD: if_re.c,v 1.31 2004/09/04 07:54:05 ru Exp $ */ /* * Copyright (c) 1997, 1998-2003 @@ -1001,7 +1001,7 @@ re_attach(struct rl_softc *sc, const char *intrstr) ifmedia_init(&sc->sc_mii.mii_media, IFM_IMASK, re_ifmedia_upd, re_ifmedia_sts); mii_attach(&sc->sc_dev, &sc->sc_mii, 0xffffffff, MII_PHY_ANY, - MII_OFFSET_ANY, 0); + MII_OFFSET_ANY, MIIF_DOPAUSE); if (LIST_FIRST(&sc->sc_mii.mii_phys) == NULL) { printf("%s: no PHY found!\n", sc->sc_dev.dv_xname); ifmedia_add(&sc->sc_mii.mii_media, diff --git a/sys/dev/mii/rgephy.c b/sys/dev/mii/rgephy.c index e3a36dee75f..dce49fdb088 100644 --- a/sys/dev/mii/rgephy.c +++ b/sys/dev/mii/rgephy.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rgephy.c,v 1.20 2006/12/27 19:11:09 kettenis Exp $ */ +/* $OpenBSD: rgephy.c,v 1.21 2006/12/30 09:38:28 kettenis Exp $ */ /* * Copyright (c) 2003 * Bill Paul <wpaul@windriver.com>. All rights reserved. @@ -334,7 +334,7 @@ rgephy_status(struct mii_softc *sc) mii->mii_media_active |= IFM_10_T; if (bmsr & RL_GMEDIASTAT_FDX) - mii->mii_media_active |= IFM_FDX; + mii->mii_media_active |= mii_phy_flowstatus(sc) | IFM_FDX; else mii->mii_media_active |= IFM_HDX; @@ -348,11 +348,16 @@ rgephy_status(struct mii_softc *sc) int rgephy_mii_phy_auto(struct mii_softc *sc) { + int anar; + rgephy_loop(sc); PHY_RESET(sc); - PHY_WRITE(sc, RGEPHY_MII_ANAR, - BMSR_MEDIA_TO_ANAR(sc->mii_capabilities) | ANAR_CSMA); + anar = BMSR_MEDIA_TO_ANAR(sc->mii_capabilities) | ANAR_CSMA; + if (sc->mii_flags & MIIF_DOPAUSE) + anar |= RGEPHY_ANAR_PC | RGEPHY_ANAR_ASP; + + PHY_WRITE(sc, RGEPHY_MII_ANAR, anar); DELAY(1000); PHY_WRITE(sc, RGEPHY_MII_1000CTL, RGEPHY_1000CTL_AHD | RGEPHY_1000CTL_AFD); |