summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkettenis <kettenis@openbsd.org>2006-12-30 09:38:28 +0000
committerkettenis <kettenis@openbsd.org>2006-12-30 09:38:28 +0000
commitf4bd491b2cd4899c52ac557eb236d0b5f96d0c0a (patch)
tree92d718af249af0f5852c7c58cefc722932985c7b
parentMake mii_phy_auto() advertise flow control if MIIF_DOPAUSE is set. (diff)
downloadwireguard-openbsd-f4bd491b2cd4899c52ac557eb236d0b5f96d0c0a.tar.xz
wireguard-openbsd-f4bd491b2cd4899c52ac557eb236d0b5f96d0c0a.zip
Add flow control support.
ok brad@
-rw-r--r--sys/dev/ic/re.c4
-rw-r--r--sys/dev/mii/rgephy.c13
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);