From owner-svn-src-all@FreeBSD.ORG Sun Sep 11 20:25:58 2011 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DB3EC1065674; Sun, 11 Sep 2011 20:25:58 +0000 (UTC) (envelope-from marius@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C6A868FC17; Sun, 11 Sep 2011 20:25:58 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p8BKPwc2094556; Sun, 11 Sep 2011 20:25:58 GMT (envelope-from marius@svn.freebsd.org) Received: (from marius@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p8BKPwNN094511; Sun, 11 Sep 2011 20:25:58 GMT (envelope-from marius@svn.freebsd.org) Message-Id: <201109112025.p8BKPwNN094511@svn.freebsd.org> From: Marius Strobl Date: Sun, 11 Sep 2011 20:25:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org X-SVN-Group: stable-7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r225490 - in stable/7/sys: dev/ae dev/age dev/alc dev/ale dev/bce dev/bfe dev/bge dev/dc dev/et dev/fxp dev/jme dev/lge dev/mii dev/nfe dev/nge dev/nve dev/sf dev/sge dev/sis dev/ste de... X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 11 Sep 2011 20:25:59 -0000 Author: marius Date: Sun Sep 11 20:25:57 2011 New Revision: 225490 URL: http://svn.freebsd.org/changeset/base/225490 Log: MFC: r221407 (partial) - Let mii_phy_add_media() also announce the support of IFM_NONE. - Add a PHY-specific reset routine is for lxtphy(4) which disables MII interrupts. - Remove redundant checks in NIC drivers for mii->mii_instance not being zero before calling the reset routines because as soon as one PHY driver attaches mii->mii_instance is incremented and we hardly can end up in their media change callbacks etc if no PHY driver has attached as mii_attach() would have failed in that case and not attach a miibus(4) instance. - Convert the mebers of the MII data structure to unsigned where appropriate. This is partly inspired by NetBSD/OpenBSD. - Add MIIF_NOMANPAUSE and mii_phy_flowstatus() calls to drivers that weren't explicitly converted to support flow control before. It's unclear whether flow control actually works with these but typically it should and their net behavior should be more correct with these changes in place than without if the MAC driver sets MIIF_DOPAUSE. Obtained from: NetBSD (partially) Modified: stable/7/sys/dev/ae/if_ae.c stable/7/sys/dev/age/if_age.c stable/7/sys/dev/alc/if_alc.c stable/7/sys/dev/ale/if_ale.c stable/7/sys/dev/bce/if_bce.c stable/7/sys/dev/bfe/if_bfe.c stable/7/sys/dev/bge/if_bge.c stable/7/sys/dev/dc/dcphy.c stable/7/sys/dev/dc/pnphy.c stable/7/sys/dev/et/if_et.c stable/7/sys/dev/fxp/if_fxp.c stable/7/sys/dev/jme/if_jme.c stable/7/sys/dev/lge/if_lge.c stable/7/sys/dev/mii/acphy.c stable/7/sys/dev/mii/amphy.c stable/7/sys/dev/mii/atphy.c stable/7/sys/dev/mii/brgphy.c stable/7/sys/dev/mii/ciphy.c stable/7/sys/dev/mii/e1000phy.c stable/7/sys/dev/mii/exphy.c stable/7/sys/dev/mii/icsphy.c stable/7/sys/dev/mii/inphy.c stable/7/sys/dev/mii/jmphy.c stable/7/sys/dev/mii/lxtphy.c stable/7/sys/dev/mii/mii.c stable/7/sys/dev/mii/mii.h stable/7/sys/dev/mii/mii_physubr.c stable/7/sys/dev/mii/miivar.h stable/7/sys/dev/mii/mlphy.c stable/7/sys/dev/mii/nsphy.c stable/7/sys/dev/mii/nsphyter.c stable/7/sys/dev/mii/pnaphy.c stable/7/sys/dev/mii/qsphy.c stable/7/sys/dev/mii/rdcphy.c stable/7/sys/dev/mii/rlphy.c stable/7/sys/dev/mii/rlswitch.c stable/7/sys/dev/mii/ruephy.c stable/7/sys/dev/mii/tdkphy.c stable/7/sys/dev/mii/tlphy.c stable/7/sys/dev/mii/truephy.c stable/7/sys/dev/mii/xmphy.c stable/7/sys/dev/nfe/if_nfe.c stable/7/sys/dev/nge/if_nge.c stable/7/sys/dev/nve/if_nve.c stable/7/sys/dev/sf/if_sf.c stable/7/sys/dev/sge/if_sge.c stable/7/sys/dev/sis/if_sis.c stable/7/sys/dev/ste/if_ste.c stable/7/sys/dev/tx/if_tx.c stable/7/sys/dev/usb/if_aue.c stable/7/sys/dev/usb/if_axe.c stable/7/sys/dev/usb/if_rue.c stable/7/sys/dev/usb/if_udav.c stable/7/sys/dev/vr/if_vr.c stable/7/sys/dev/vte/if_vte.c stable/7/sys/pci/if_wb.c Directory Properties: stable/7/sys/ (props changed) stable/7/sys/cddl/contrib/opensolaris/ (props changed) stable/7/sys/contrib/dev/acpica/ (props changed) stable/7/sys/contrib/pf/ (props changed) Modified: stable/7/sys/dev/ae/if_ae.c ============================================================================== --- stable/7/sys/dev/ae/if_ae.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/ae/if_ae.c Sun Sep 11 20:25:57 2011 (r225490) @@ -904,10 +904,8 @@ ae_mediachange(struct ifnet *ifp) KASSERT(sc != NULL, ("[ae, %d]: sc is NULL", __LINE__)); AE_LOCK(sc); mii = device_get_softc(sc->miibus); - if (mii->mii_instance != 0) { - LIST_FOREACH(mii_sc, &mii->mii_phys, mii_list) - mii_phy_reset(mii_sc); - } + LIST_FOREACH(mii_sc, &mii->mii_phys, mii_list) + mii_phy_reset(mii_sc); error = mii_mediachg(mii); AE_UNLOCK(sc); Modified: stable/7/sys/dev/age/if_age.c ============================================================================== --- stable/7/sys/dev/age/if_age.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/age/if_age.c Sun Sep 11 20:25:57 2011 (r225490) @@ -301,10 +301,8 @@ age_mediachange(struct ifnet *ifp) sc = ifp->if_softc; AGE_LOCK(sc); mii = device_get_softc(sc->age_miibus); - if (mii->mii_instance != 0) { - LIST_FOREACH(miisc, &mii->mii_phys, mii_list) - mii_phy_reset(miisc); - } + LIST_FOREACH(miisc, &mii->mii_phys, mii_list) + mii_phy_reset(miisc); error = mii_mediachg(mii); AGE_UNLOCK(sc); Modified: stable/7/sys/dev/alc/if_alc.c ============================================================================== --- stable/7/sys/dev/alc/if_alc.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/alc/if_alc.c Sun Sep 11 20:25:57 2011 (r225490) @@ -365,10 +365,8 @@ alc_mediachange(struct ifnet *ifp) sc = ifp->if_softc; ALC_LOCK(sc); mii = device_get_softc(sc->alc_miibus); - if (mii->mii_instance != 0) { - LIST_FOREACH(miisc, &mii->mii_phys, mii_list) - mii_phy_reset(miisc); - } + LIST_FOREACH(miisc, &mii->mii_phys, mii_list) + mii_phy_reset(miisc); error = mii_mediachg(mii); ALC_UNLOCK(sc); Modified: stable/7/sys/dev/ale/if_ale.c ============================================================================== --- stable/7/sys/dev/ale/if_ale.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/ale/if_ale.c Sun Sep 11 20:25:57 2011 (r225490) @@ -286,10 +286,8 @@ ale_mediachange(struct ifnet *ifp) sc = ifp->if_softc; ALE_LOCK(sc); mii = device_get_softc(sc->ale_miibus); - if (mii->mii_instance != 0) { - LIST_FOREACH(miisc, &mii->mii_phys, mii_list) - mii_phy_reset(miisc); - } + LIST_FOREACH(miisc, &mii->mii_phys, mii_list) + mii_phy_reset(miisc); error = mii_mediachg(mii); ALE_UNLOCK(sc); Modified: stable/7/sys/dev/bce/if_bce.c ============================================================================== --- stable/7/sys/dev/bce/if_bce.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/bce/if_bce.c Sun Sep 11 20:25:57 2011 (r225490) @@ -5813,6 +5813,7 @@ bce_ifmedia_upd_locked(struct ifnet *ifp { struct bce_softc *sc = ifp->if_softc; struct mii_data *mii; + struct mii_softc *miisc; int error; DBENTER(BCE_VERBOSE_PHY); @@ -5825,12 +5826,8 @@ bce_ifmedia_upd_locked(struct ifnet *ifp /* Make sure the MII bus has been enumerated. */ if (mii) { sc->bce_link_up = FALSE; - if (mii->mii_instance) { - struct mii_softc *miisc; - - LIST_FOREACH(miisc, &mii->mii_phys, mii_list) - mii_phy_reset(miisc); - } + LIST_FOREACH(miisc, &mii->mii_phys, mii_list) + mii_phy_reset(miisc); error = mii_mediachg(mii); } Modified: stable/7/sys/dev/bfe/if_bfe.c ============================================================================== --- stable/7/sys/dev/bfe/if_bfe.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/bfe/if_bfe.c Sun Sep 11 20:25:57 2011 (r225490) @@ -1669,18 +1669,15 @@ bfe_ifmedia_upd(struct ifnet *ifp) { struct bfe_softc *sc; struct mii_data *mii; + struct mii_softc *miisc; int error; sc = ifp->if_softc; BFE_LOCK(sc); mii = device_get_softc(sc->bfe_miibus); - if (mii->mii_instance) { - struct mii_softc *miisc; - for (miisc = LIST_FIRST(&mii->mii_phys); miisc != NULL; - miisc = LIST_NEXT(miisc, mii_list)) - mii_phy_reset(miisc); - } + LIST_FOREACH(miisc, &mii->mii_phys, mii_list) + mii_phy_reset(miisc); error = mii_mediachg(mii); BFE_UNLOCK(sc); Modified: stable/7/sys/dev/bge/if_bge.c ============================================================================== --- stable/7/sys/dev/bge/if_bge.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/bge/if_bge.c Sun Sep 11 20:25:57 2011 (r225490) @@ -4950,9 +4950,8 @@ bge_ifmedia_upd_locked(struct ifnet *ifp sc->bge_link_evt++; mii = device_get_softc(sc->bge_miibus); - if (mii->mii_instance) - LIST_FOREACH(miisc, &mii->mii_phys, mii_list) - mii_phy_reset(miisc); + LIST_FOREACH(miisc, &mii->mii_phys, mii_list) + mii_phy_reset(miisc); mii_mediachg(mii); /* Modified: stable/7/sys/dev/dc/dcphy.c ============================================================================== --- stable/7/sys/dev/dc/dcphy.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/dc/dcphy.c Sun Sep 11 20:25:57 2011 (r225490) @@ -157,7 +157,7 @@ dcphy_attach(device_t dev) /* * Apparently, we can neither isolate nor do loopback. */ - sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOLOOP; + sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOLOOP | MIIF_NOMANPAUSE; /*dcphy_reset(sc);*/ dc_sc = mii->mii_ifp->if_softc; Modified: stable/7/sys/dev/dc/pnphy.c ============================================================================== --- stable/7/sys/dev/dc/pnphy.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/dc/pnphy.c Sun Sep 11 20:25:57 2011 (r225490) @@ -133,7 +133,7 @@ pnphy_attach(device_t dev) /* * Apparently, we can neither isolate nor do loopback. */ - sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOLOOP; + sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOLOOP | MIIF_NOMANPAUSE; sc->mii_capabilities = BMSR_100TXFDX | BMSR_100TXHDX | BMSR_10TFDX | BMSR_10THDX; Modified: stable/7/sys/dev/et/if_et.c ============================================================================== --- stable/7/sys/dev/et/if_et.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/et/if_et.c Sun Sep 11 20:25:57 2011 (r225490) @@ -515,13 +515,10 @@ et_ifmedia_upd_locked(struct ifnet *ifp) { struct et_softc *sc = ifp->if_softc; struct mii_data *mii = device_get_softc(sc->sc_miibus); + struct mii_softc *miisc; - if (mii->mii_instance != 0) { - struct mii_softc *miisc; - - LIST_FOREACH(miisc, &mii->mii_phys, mii_list) - mii_phy_reset(miisc); - } + LIST_FOREACH(miisc, &mii->mii_phys, mii_list) + mii_phy_reset(miisc); mii_mediachg(mii); return (0); Modified: stable/7/sys/dev/fxp/if_fxp.c ============================================================================== --- stable/7/sys/dev/fxp/if_fxp.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/fxp/if_fxp.c Sun Sep 11 20:25:57 2011 (r225490) @@ -2549,14 +2549,12 @@ fxp_ifmedia_upd(struct ifnet *ifp) { struct fxp_softc *sc = ifp->if_softc; struct mii_data *mii; + struct mii_softc *miisc; mii = device_get_softc(sc->miibus); FXP_LOCK(sc); - if (mii->mii_instance) { - struct mii_softc *miisc; - LIST_FOREACH(miisc, &mii->mii_phys, mii_list) - mii_phy_reset(miisc); - } + LIST_FOREACH(miisc, &mii->mii_phys, mii_list) + mii_phy_reset(miisc); mii_mediachg(mii); FXP_UNLOCK(sc); return (0); Modified: stable/7/sys/dev/jme/if_jme.c ============================================================================== --- stable/7/sys/dev/jme/if_jme.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/jme/if_jme.c Sun Sep 11 20:25:57 2011 (r225490) @@ -318,10 +318,8 @@ jme_mediachange(struct ifnet *ifp) sc = ifp->if_softc; JME_LOCK(sc); mii = device_get_softc(sc->jme_miibus); - if (mii->mii_instance != 0) { - LIST_FOREACH(miisc, &mii->mii_phys, mii_list) - mii_phy_reset(miisc); - } + LIST_FOREACH(miisc, &mii->mii_phys, mii_list) + mii_phy_reset(miisc); error = mii_mediachg(mii); JME_UNLOCK(sc); Modified: stable/7/sys/dev/lge/if_lge.c ============================================================================== --- stable/7/sys/dev/lge/if_lge.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/lge/if_lge.c Sun Sep 11 20:25:57 2011 (r225490) @@ -1404,18 +1404,15 @@ lge_ifmedia_upd_locked(ifp) { struct lge_softc *sc; struct mii_data *mii; + struct mii_softc *miisc; sc = ifp->if_softc; LGE_LOCK_ASSERT(sc); mii = device_get_softc(sc->lge_miibus); sc->lge_link = 0; - if (mii->mii_instance) { - struct mii_softc *miisc; - for (miisc = LIST_FIRST(&mii->mii_phys); miisc != NULL; - miisc = LIST_NEXT(miisc, mii_list)) - mii_phy_reset(miisc); - } + LIST_FOREACH(miisc, &mii->mii_phys, mii_list) + mii_phy_reset(miisc); mii_mediachg(mii); } Modified: stable/7/sys/dev/mii/acphy.c ============================================================================== --- stable/7/sys/dev/mii/acphy.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/mii/acphy.c Sun Sep 11 20:25:57 2011 (r225490) @@ -138,6 +138,8 @@ acphy_attach(device_t dev) sc->mii_service = acphy_service; sc->mii_pdata = mii; + sc->mii_flags |= MIIF_NOMANPAUSE; + acphy_reset(sc); sc->mii_capabilities = PHY_READ(sc, MII_BMSR) & ma->mii_capmask; @@ -245,7 +247,8 @@ acphy_status(struct mii_softc *sc) mii->mii_media_active |= IFM_10_T; if (diag & AC_DIAG_DUPLEX) - mii->mii_media_active |= IFM_FDX; + mii->mii_media_active |= + IFM_FDX | mii_phy_flowstatus(sc); else mii->mii_media_active |= IFM_HDX; } else Modified: stable/7/sys/dev/mii/amphy.c ============================================================================== --- stable/7/sys/dev/mii/amphy.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/mii/amphy.c Sun Sep 11 20:25:57 2011 (r225490) @@ -115,6 +115,8 @@ amphy_attach(device_t dev) sc->mii_service = amphy_service; sc->mii_pdata = mii; + sc->mii_flags |= MIIF_NOMANPAUSE; + #define ADD(m, c) ifmedia_add(&mii->mii_media, (m), (c), NULL) #if 0 @@ -231,6 +233,8 @@ amphy_status(struct mii_softc *sc) mii->mii_media_active |= IFM_10_T|IFM_HDX; else if (par & DSCSR_10HDX) mii->mii_media_active |= IFM_10_T|IFM_HDX; + if ((mii->mii_media_active & IFM_FDX) != 0) + mii->mii_media_active |= mii_phy_flowstatus(sc); } else mii->mii_media_active = ife->ifm_media; } Modified: stable/7/sys/dev/mii/atphy.c ============================================================================== --- stable/7/sys/dev/mii/atphy.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/mii/atphy.c Sun Sep 11 20:25:57 2011 (r225490) @@ -119,6 +119,8 @@ atphy_attach(device_t dev) sc->mii_service = atphy_service; sc->mii_pdata = mii; + sc->mii_flags |= MIIF_NOMANPAUSE; + asc->mii_oui = MII_OUI(ma->mii_id1, ma->mii_id2); asc->mii_model = MII_MODEL(ma->mii_id2); asc->mii_rev = MII_REV(ma->mii_id2); @@ -318,12 +320,9 @@ static void atphy_reset(struct mii_softc *sc) { struct ifmedia_entry *ife = sc->mii_pdata->mii_media.ifm_cur; - struct atphy_softc *asc; uint32_t reg; int i; - asc = (struct atphy_softc *)sc; - /* Take PHY out of power down mode. */ PHY_WRITE(sc, 29, 0x29); PHY_WRITE(sc, 30, 0); Modified: stable/7/sys/dev/mii/brgphy.c ============================================================================== --- stable/7/sys/dev/mii/brgphy.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/mii/brgphy.c Sun Sep 11 20:25:57 2011 (r225490) @@ -222,9 +222,6 @@ brgphy_attach(device_t dev) /* Handle any special cases based on the PHY ID */ switch (bsc->mii_oui) { - case MII_OUI_BROADCOM: - case MII_OUI_BROADCOM2: - break; case MII_OUI_xxBROADCOM: switch (bsc->mii_model) { case MII_MODEL_xxBROADCOM_BCM5706: @@ -257,11 +254,6 @@ brgphy_attach(device_t dev) break; } break; - case MII_OUI_xxBROADCOM_ALT2: - /* No special handling yet. */ - break; - default: - device_printf(dev, "Unrecognized OUI for PHY!\n"); } ifp = sc->mii_pdata->mii_ifp; @@ -400,8 +392,6 @@ brgphy_service(struct mii_softc *sc, str sc->mii_media_status != mii->mii_media_status || cmd == MII_MEDIACHG) { switch (bsc->mii_oui) { - case MII_OUI_BROADCOM: - break; case MII_OUI_xxBROADCOM: switch (bsc->mii_model) { case MII_MODEL_xxBROADCOM_BCM5400: @@ -419,8 +409,6 @@ brgphy_service(struct mii_softc *sc, str break; } break; - case MII_OUI_xxBROADCOM_ALT1: - break; } } mii_phy_update(sc, cmd); @@ -932,8 +920,6 @@ brgphy_reset(struct mii_softc *sc) /* Handle any PHY specific procedures following the reset. */ switch (bsc->mii_oui) { - case MII_OUI_BROADCOM: - break; case MII_OUI_xxBROADCOM: switch (bsc->mii_model) { case MII_MODEL_xxBROADCOM_BCM5400: @@ -951,9 +937,6 @@ brgphy_reset(struct mii_softc *sc) break; } break; - case MII_OUI_xxBROADCOM_ALT1: - case MII_OUI_xxBROADCOM_ALT2: - break; } ifp = sc->mii_pdata->mii_ifp; Modified: stable/7/sys/dev/mii/ciphy.c ============================================================================== --- stable/7/sys/dev/mii/ciphy.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/mii/ciphy.c Sun Sep 11 20:25:57 2011 (r225490) @@ -122,7 +122,7 @@ ciphy_attach(device_t dev) sc->mii_service = ciphy_service; sc->mii_pdata = mii; - sc->mii_flags |= MIIF_NOISOLATE; + sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOMANPAUSE; ciphy_reset(sc); Modified: stable/7/sys/dev/mii/e1000phy.c ============================================================================== --- stable/7/sys/dev/mii/e1000phy.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/mii/e1000phy.c Sun Sep 11 20:25:57 2011 (r225490) @@ -91,7 +91,7 @@ DRIVER_MODULE(e1000phy, miibus, e1000phy static int e1000phy_service(struct mii_softc *, struct mii_data *, int); static void e1000phy_status(struct mii_softc *); static void e1000phy_reset(struct mii_softc *); -static int e1000phy_mii_phy_auto(struct e1000phy_softc *, int); +static int e1000phy_mii_phy_auto(struct mii_softc *, int); static const struct mii_phydesc e1000phys[] = { MII_PHY_DESC(MARVELL, E1000), @@ -313,7 +313,6 @@ static int e1000phy_service(struct mii_softc *sc, struct mii_data *mii, int cmd) { struct ifmedia_entry *ife = mii->mii_media.ifm_cur; - struct e1000phy_softc *esc = (struct e1000phy_softc *)sc; uint16_t speed, gig; int reg; @@ -329,7 +328,7 @@ e1000phy_service(struct mii_softc *sc, s break; if (IFM_SUBTYPE(ife->ifm_media) == IFM_AUTO) { - e1000phy_mii_phy_auto(esc, ife->ifm_media); + e1000phy_mii_phy_auto(sc, ife->ifm_media); break; } @@ -418,7 +417,7 @@ done: sc->mii_ticks = 0; e1000phy_reset(sc); - e1000phy_mii_phy_auto(esc, ife->ifm_media); + e1000phy_mii_phy_auto(sc, ife->ifm_media); break; } @@ -494,12 +493,10 @@ e1000phy_status(struct mii_softc *sc) } static int -e1000phy_mii_phy_auto(struct e1000phy_softc *esc, int media) +e1000phy_mii_phy_auto(struct mii_softc *sc, int media) { - struct mii_softc *sc; uint16_t reg; - sc = &esc->mii_sc; if ((sc->mii_flags & MIIF_HAVEFIBER) == 0) { reg = PHY_READ(sc, E1000_AR); reg &= ~(E1000_AR_PAUSE | E1000_AR_ASM_DIR); Modified: stable/7/sys/dev/mii/exphy.c ============================================================================== --- stable/7/sys/dev/mii/exphy.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/mii/exphy.c Sun Sep 11 20:25:57 2011 (r225490) @@ -147,7 +147,7 @@ exphy_attach(device_t dev) /* * The 3Com PHY can never be isolated. */ - sc->mii_flags |= MIIF_NOISOLATE; + sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOMANPAUSE; #define ADD(m, c) ifmedia_add(&mii->mii_media, (m), (c), NULL) Modified: stable/7/sys/dev/mii/icsphy.c ============================================================================== --- stable/7/sys/dev/mii/icsphy.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/mii/icsphy.c Sun Sep 11 20:25:57 2011 (r225490) @@ -147,7 +147,7 @@ icsphy_attach(device_t dev) sc->mii_service = icsphy_service; sc->mii_pdata = mii; - sc->mii_flags |= MIIF_NOISOLATE; + sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOMANPAUSE; ifmedia_add(&mii->mii_media, IFM_MAKEWORD(IFM_ETHER, IFM_100_TX, IFM_LOOP, sc->mii_inst), @@ -240,7 +240,8 @@ icsphy_status(struct mii_softc *sc) else mii->mii_media_active |= IFM_10_T; if (qpr & QPR_FDX) - mii->mii_media_active |= IFM_FDX; + mii->mii_media_active |= + IFM_FDX | mii_phy_flowstatus(sc); else mii->mii_media_active |= IFM_HDX; } else Modified: stable/7/sys/dev/mii/inphy.c ============================================================================== --- stable/7/sys/dev/mii/inphy.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/mii/inphy.c Sun Sep 11 20:25:57 2011 (r225490) @@ -114,7 +114,7 @@ inphy_attach(device_t dev) sc->mii_service = inphy_service; sc->mii_pdata = mii; - sc->mii_flags |= MIIF_NOMANPAUSE; + sc->mii_flags |= MIIF_NOMANPAUSE | MIIF_NOMANPAUSE; ifmedia_add(&mii->mii_media, IFM_MAKEWORD(IFM_ETHER, IFM_100_TX, IFM_LOOP, sc->mii_inst), Modified: stable/7/sys/dev/mii/jmphy.c ============================================================================== --- stable/7/sys/dev/mii/jmphy.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/mii/jmphy.c Sun Sep 11 20:25:57 2011 (r225490) @@ -269,12 +269,9 @@ jmphy_status(struct mii_softc *sc) static void jmphy_reset(struct mii_softc *sc) { - struct jmphy_softc *jsc; uint16_t t2cr, val; int i; - jsc = (struct jmphy_softc *)sc; - /* Disable sleep mode. */ PHY_WRITE(sc, JMPHY_TMCTL, PHY_READ(sc, JMPHY_TMCTL) & ~JMPHY_TMCTL_SLEEP_ENB); Modified: stable/7/sys/dev/mii/lxtphy.c ============================================================================== --- stable/7/sys/dev/mii/lxtphy.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/mii/lxtphy.c Sun Sep 11 20:25:57 2011 (r225490) @@ -106,6 +106,7 @@ DRIVER_MODULE(lxtphy, miibus, lxtphy_dri static int lxtphy_service(struct mii_softc *, struct mii_data *, int); static void lxtphy_status(struct mii_softc *); +static void lxtphy_reset(struct mii_softc *); static void lxtphy_set_tp(struct mii_softc *); static void lxtphy_set_fx(struct mii_softc *); @@ -140,7 +141,9 @@ lxtphy_attach(device_t dev) sc->mii_service = lxtphy_service; sc->mii_pdata = mii; - mii_phy_reset(sc); + sc->mii_flags |= MIIF_NOMANPAUSE; + + lxtphy_reset(sc); sc->mii_capabilities = PHY_READ(sc, MII_BMSR) & ma->mii_capmask; device_printf(dev, " "); @@ -248,6 +251,15 @@ lxtphy_status(struct mii_softc *sc) } static void +lxtphy_reset(struct mii_softc *sc) +{ + + mii_phy_reset(sc); + PHY_WRITE(sc, MII_LXTPHY_IER, + PHY_READ(sc, MII_LXTPHY_IER) & ~IER_INTEN); +} + +static void lxtphy_set_tp(struct mii_softc *sc) { int cfg; Modified: stable/7/sys/dev/mii/mii.c ============================================================================== --- stable/7/sys/dev/mii/mii.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/mii/mii.c Sun Sep 11 20:25:57 2011 (r225490) @@ -44,7 +44,7 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include +#include #include #include @@ -87,9 +87,9 @@ static device_method_t miibus_methods[] /* MII interface */ DEVMETHOD(miibus_readreg, miibus_readreg), DEVMETHOD(miibus_writereg, miibus_writereg), - DEVMETHOD(miibus_statchg, miibus_statchg), - DEVMETHOD(miibus_linkchg, miibus_linkchg), - DEVMETHOD(miibus_mediainit, miibus_mediainit), + DEVMETHOD(miibus_statchg, miibus_statchg), + DEVMETHOD(miibus_linkchg, miibus_linkchg), + DEVMETHOD(miibus_mediainit, miibus_mediainit), { 0, 0 } }; @@ -270,7 +270,7 @@ miibus_linkchg(device_t dev) MIIBUS_LINKCHG(parent); mii = device_get_softc(dev); - + if (mii->mii_media_status & IFM_AVALID) { if (mii->mii_media_status & IFM_ACTIVE) link_state = LINK_STATE_UP; @@ -370,7 +370,7 @@ mii_attach(device_t dev, device_t *miibu * has been allocated. */ ma.mii_data = device_get_softc(*miibus); - } + } ma.mii_capmask = capmask; @@ -401,7 +401,7 @@ mii_attach(device_t dev, device_t *miibu * Check to see if there is a PHY at this address. Note, * many braindead PHYs report 0/0 in their ID registers, * so we test for media in the BMSR. - */ + */ bmsr = MIIBUS_READREG(dev, ma.mii_phyno, MII_BMSR); if (bmsr == 0 || bmsr == 0xffff || (bmsr & (BMSR_EXTSTAT | BMSR_MEDIAMASK)) == 0) { @@ -420,7 +420,7 @@ mii_attach(device_t dev, device_t *miibu * Extract the IDs. Braindead PHYs will be handled by * the `ukphy' driver, as we have no ID information to * match on. - */ + */ ma.mii_id1 = MIIBUS_READREG(dev, ma.mii_phyno, MII_PHYIDR1); ma.mii_id2 = MIIBUS_READREG(dev, ma.mii_phyno, MII_PHYIDR2); Modified: stable/7/sys/dev/mii/mii.h ============================================================================== --- stable/7/sys/dev/mii/mii.h Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/mii/mii.h Sun Sep 11 20:25:57 2011 (r225490) @@ -89,15 +89,9 @@ * info available in register 15, but 802.3 section 22.2.4.3 also * states that that all 1000 Mb/s capable PHYs will set this bit to 1. */ -#if 0 -#define BMSR_MEDIAMASK (BMSR_100T4|BMSR_100TXFDX|BMSR_100TXHDX|BMSR_10TFDX| \ - BMSR_10THDX|BMSR_ANEG) -#else -/* NetBSD uses: */ #define BMSR_MEDIAMASK (BMSR_100T4|BMSR_100TXFDX|BMSR_100TXHDX| \ BMSR_10TFDX|BMSR_10THDX|BMSR_100T2FDX|BMSR_100T2HDX) -#endif /* * Convert BMSR media capabilities to ANAR bits for autonegotiation. Modified: stable/7/sys/dev/mii/mii_physubr.c ============================================================================== --- stable/7/sys/dev/mii/mii_physubr.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/mii/mii_physubr.c Sun Sep 11 20:25:57 2011 (r225490) @@ -428,9 +428,11 @@ mii_phy_add_media(struct mii_softc *sc) #define ADD(m, c) ifmedia_add(&mii->mii_media, (m), (c), NULL) #define PRINT(s) printf("%s%s", sep, s); sep = ", " - if ((sc->mii_flags & MIIF_NOISOLATE) == 0) + if ((sc->mii_flags & MIIF_NOISOLATE) == 0) { ADD(IFM_MAKEWORD(IFM_ETHER, IFM_NONE, 0, sc->mii_inst), MII_MEDIA_NONE); + PRINT("none"); + } /* * There are different interpretations for the bits in Modified: stable/7/sys/dev/mii/miivar.h ============================================================================== --- stable/7/sys/dev/mii/miivar.h Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/mii/miivar.h Sun Sep 11 20:25:57 2011 (r225490) @@ -38,7 +38,7 @@ #include /* - * Media Independent Interface configuration defintions. + * Media Independent Interface data structure defintions */ struct mii_softc; @@ -65,13 +65,13 @@ struct mii_data { * request is made. */ LIST_HEAD(mii_listhead, mii_softc) mii_phys; - int mii_instance; + u_int mii_instance; /* * PHY driver fills this in with active media status. */ - int mii_media_status; - int mii_media_active; + u_int mii_media_status; + u_int mii_media_active; /* * Calls from MII layer into network interface driver. @@ -105,19 +105,19 @@ struct mii_softc { LIST_ENTRY(mii_softc) mii_list; /* entry on parent's PHY list */ - int mii_phy; /* our MII address */ - int mii_inst; /* instance for ifmedia */ + u_int mii_phy; /* our MII address */ + u_int mii_inst; /* instance for ifmedia */ mii_downcall_t mii_service; /* our downcall */ struct mii_data *mii_pdata; /* pointer to parent's mii_data */ - int mii_flags; /* misc. flags; see below */ - int mii_capabilities; /* capabilities from BMSR */ - int mii_extcapabilities; /* extended capabilities */ - int mii_ticks; /* MII_TICK counter */ - int mii_anegticks; /* ticks before retrying aneg */ - int mii_media_active; /* last active media */ - int mii_media_status; /* last active status */ + u_int mii_flags; /* misc. flags; see below */ + u_int mii_capabilities; /* capabilities from BMSR */ + u_int mii_extcapabilities; /* extended capabilities */ + u_int mii_ticks; /* MII_TICK counter */ + u_int mii_anegticks; /* ticks before retrying aneg */ + u_int mii_media_active; /* last active media */ + u_int mii_media_status; /* last active status */ }; typedef struct mii_softc mii_softc_t; @@ -161,10 +161,11 @@ typedef struct mii_softc mii_softc_t; */ struct mii_attach_args { struct mii_data *mii_data; /* pointer to parent data */ - int mii_phyno; /* MII address */ - int mii_id1; /* PHY ID register 1 */ - int mii_id2; /* PHY ID register 2 */ - int mii_capmask; /* capability mask from BMSR */ + u_int mii_phyno; /* MII address */ + u_int mii_offset; /* first PHY, second PHY, etc. */ + uint32_t mii_id1; /* PHY ID register 1 */ + uint32_t mii_id2; /* PHY ID register 2 */ + u_int mii_capmask; /* capability mask for BMSR */ }; typedef struct mii_attach_args mii_attach_args_t; @@ -172,8 +173,8 @@ typedef struct mii_attach_args mii_attac * Used to match a PHY. */ struct mii_phydesc { - u_int32_t mpd_oui; /* the PHY's OUI */ - u_int32_t mpd_model; /* the PHY's model */ + uint32_t mpd_oui; /* the PHY's OUI */ + uint32_t mpd_model; /* the PHY's model */ const char *mpd_name; /* the PHY's name */ }; #define MII_PHY_DESC(a, b) { MII_OUI_ ## a, MII_MODEL_ ## a ## _ ## b, \ @@ -184,9 +185,9 @@ struct mii_phydesc { * An array of these structures map MII media types to BMCR/ANAR settings. */ struct mii_media { - int mm_bmcr; /* BMCR settings for this media */ - int mm_anar; /* ANAR settings for this media */ - int mm_gtcr; /* 100base-T2 or 1000base-T CR */ + u_int mm_bmcr; /* BMCR settings for this media */ + u_int mm_anar; /* ANAR settings for this media */ + u_int mm_gtcr; /* 100base-T2 or 1000base-T CR */ }; #define MII_MEDIA_NONE 0 @@ -219,7 +220,7 @@ enum miibus_device_ivars { #define MIIBUS_ACCESSOR(var, ivar, type) \ __BUS_ACCESSOR(miibus, var, MIIBUS, ivar, type) -MIIBUS_ACCESSOR(flags, FLAGS, int) +MIIBUS_ACCESSOR(flags, FLAGS, u_int) extern devclass_t miibus_devclass; extern driver_t miibus_driver; Modified: stable/7/sys/dev/mii/mlphy.c ============================================================================== --- stable/7/sys/dev/mii/mlphy.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/mii/mlphy.c Sun Sep 11 20:25:57 2011 (r225490) @@ -154,6 +154,8 @@ mlphy_attach(dev) sc->mii_service = mlphy_service; sc->mii_pdata = mii; + sc->mii_flags |= MIIF_NOMANPAUSE; + #define ADD(m, c) ifmedia_add(&mii->mii_media, (m), (c), NULL) ADD(IFM_MAKEWORD(IFM_ETHER, IFM_100_TX, IFM_LOOP, sc->mii_inst), Modified: stable/7/sys/dev/mii/nsphy.c ============================================================================== --- stable/7/sys/dev/mii/nsphy.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/mii/nsphy.c Sun Sep 11 20:25:57 2011 (r225490) @@ -139,6 +139,8 @@ nsphy_attach(device_t dev) sc->mii_service = nsphy_service; sc->mii_pdata = mii; + sc->mii_flags |= MIIF_NOMANPAUSE; + nic = device_get_name(device_get_parent(sc->mii_dev)); /* * Am79C971 wedge when isolating all of their external PHYs. @@ -296,6 +298,9 @@ nsphy_status(struct mii_softc *sc) mii->mii_media_active |= IFM_10_T|IFM_HDX; else mii->mii_media_active |= IFM_NONE; + if ((mii->mii_media_active & IFM_FDX) != 0) + mii->mii_media_active |= + mii_phy_flowstatus(sc); return; } Modified: stable/7/sys/dev/mii/nsphyter.c ============================================================================== --- stable/7/sys/dev/mii/nsphyter.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/mii/nsphyter.c Sun Sep 11 20:25:57 2011 (r225490) @@ -110,7 +110,7 @@ static int nsphyter_service(struct mii_s static void nsphyter_status(struct mii_softc *); static void nsphyter_reset(struct mii_softc *); -static const struct mii_phydesc nsphys[] = { +static const struct mii_phydesc nsphyters[] = { MII_PHY_DESC(NATSEMI, DP83815), MII_PHY_DESC(NATSEMI, DP83843), MII_PHY_DESC(NATSEMI, DP83847), @@ -121,7 +121,7 @@ static int nsphyter_probe(device_t dev) { - return (mii_phy_dev_probe(dev, nsphys, BUS_PROBE_DEFAULT)); + return (mii_phy_dev_probe(dev, nsphyters, BUS_PROBE_DEFAULT)); } static int Modified: stable/7/sys/dev/mii/pnaphy.c ============================================================================== --- stable/7/sys/dev/mii/pnaphy.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/mii/pnaphy.c Sun Sep 11 20:25:57 2011 (r225490) @@ -115,7 +115,8 @@ pnaphy_attach(device_t dev) sc->mii_service = pnaphy_service; sc->mii_pdata = mii; - sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOLOOP | MIIF_IS_HPNA; + sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOLOOP | MIIF_IS_HPNA | + MIIF_NOMANPAUSE; mii_phy_reset(sc); Modified: stable/7/sys/dev/mii/qsphy.c ============================================================================== --- stable/7/sys/dev/mii/qsphy.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/mii/qsphy.c Sun Sep 11 20:25:57 2011 (r225490) @@ -139,6 +139,8 @@ qsphy_attach(device_t dev) sc->mii_service = qsphy_service; sc->mii_pdata = mii; + sc->mii_flags |= MIIF_NOMANPAUSE; + qsphy_reset(sc); sc->mii_capabilities = PHY_READ(sc, MII_BMSR) & ma->mii_capmask; @@ -238,6 +240,8 @@ qsphy_status(struct mii_softc *sc) mii->mii_media_active |= IFM_NONE; break; } + if ((mii->mii_media_active & IFM_FDX) != 0) + mii->mii_media_active |= mii_phy_flowstatus(sc); } static void Modified: stable/7/sys/dev/mii/rdcphy.c ============================================================================== --- stable/7/sys/dev/mii/rdcphy.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/mii/rdcphy.c Sun Sep 11 20:25:57 2011 (r225490) @@ -115,6 +115,8 @@ rdcphy_attach(device_t dev) sc->mii_service = rdcphy_service; sc->mii_pdata = mii; + sc->mii_flags |= MIIF_NOMANPAUSE; + rsc->mii_model = MII_MODEL(ma->mii_id2); if (bootverbose) device_printf(dev, "OUI 0x%06x, model 0x%04x, rev. %d\n", Modified: stable/7/sys/dev/mii/rlphy.c ============================================================================== --- stable/7/sys/dev/mii/rlphy.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/mii/rlphy.c Sun Sep 11 20:25:57 2011 (r225490) @@ -150,7 +150,7 @@ rlphy_attach(device_t dev) /* * The RealTek PHY can never be isolated. */ - sc->mii_flags |= MIIF_NOISOLATE; + sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOMANPAUSE; #define ADD(m, c) ifmedia_add(&mii->mii_media, (m), (c), NULL) @@ -259,6 +259,9 @@ rlphy_status(struct mii_softc *phy) mii->mii_media_active |= IFM_10_T|IFM_HDX; else mii->mii_media_active |= IFM_NONE; + if ((mii->mii_media_active & IFM_FDX) != 0) + mii->mii_media_active |= + mii_phy_flowstatus(phy); return; } /* @@ -279,10 +282,10 @@ rlphy_status(struct mii_softc *phy) * To determine the link speed, we have to do one * of two things: * - * - If this is a standalone RealTek RTL8201(L) PHY, - * we can determine the link speed by testing bit 0 - * in the magic, vendor-specific register at offset - * 0x19. + * - If this is a standalone RealTek RTL8201(L) or + * workalike PHY, we can determine the link speed by + * testing bit 0 in the magic, vendor-specific register + * at offset 0x19. * * - If this is a RealTek MAC with integrated PHY, we * can test the 'SPEED10' bit of the MAC's media status Modified: stable/7/sys/dev/mii/rlswitch.c ============================================================================== --- stable/7/sys/dev/mii/rlswitch.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/mii/rlswitch.c Sun Sep 11 20:25:57 2011 (r225490) @@ -129,7 +129,7 @@ rlswitch_attach(device_t dev) /* * We handle all pseudo PHYs in a single instance. */ - sc->mii_flags |= MIIF_NOISOLATE; + sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOMANPAUSE; #define ADD(m, c) ifmedia_add(&mii->mii_media, (m), (c), NULL) @@ -390,7 +390,8 @@ rlswitch_status(struct mii_softc *phy) mii->mii_media_status = IFM_AVALID; mii->mii_media_active = IFM_ETHER; mii->mii_media_status |= IFM_ACTIVE; - mii->mii_media_active |= IFM_100_TX|IFM_FDX; + mii->mii_media_active |= + IFM_100_TX | IFM_FDX | mii_phy_flowstatus(phy); } #ifdef RL_DEBUG Modified: stable/7/sys/dev/mii/ruephy.c ============================================================================== --- stable/7/sys/dev/mii/ruephy.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/mii/ruephy.c Sun Sep 11 20:25:57 2011 (r225490) @@ -120,7 +120,7 @@ ruephy_attach(device_t dev) /* * Apparently, we can neither isolate nor do loopback on this PHY. */ - sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOLOOP; + sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOLOOP | MIIF_NOMANPAUSE; ruephy_reset(sc); @@ -244,7 +244,8 @@ ruephy_status(struct mii_softc *phy) mii->mii_media_active |= IFM_10_T; if (msr & RUEPHY_MSR_DUPLEX) - mii->mii_media_active |= IFM_FDX; + mii->mii_media_active |= + IFM_FDX | mii_phy_flowstatus(phy); else mii->mii_media_active |= IFM_HDX; } else Modified: stable/7/sys/dev/mii/tdkphy.c ============================================================================== --- stable/7/sys/dev/mii/tdkphy.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/mii/tdkphy.c Sun Sep 11 20:25:57 2011 (r225490) @@ -125,7 +125,7 @@ tdkphy_attach(device_t dev) /* * Apparently, we can't do loopback on this PHY. */ - sc->mii_flags |= MIIF_NOLOOP; + sc->mii_flags |= MIIF_NOLOOP | MIIF_NOMANPAUSE; mii_phy_reset(sc); @@ -247,6 +247,8 @@ tdkphy_status(struct mii_softc *phy) mii->mii_media_active |= IFM_10_T; } } + if ((mii->mii_media_active & IFM_FDX) != 0) + mii->mii_media_active |= mii_phy_flowstatus(phy); } else mii->mii_media_active = ife->ifm_media; } Modified: stable/7/sys/dev/mii/tlphy.c ============================================================================== --- stable/7/sys/dev/mii/tlphy.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/mii/tlphy.c Sun Sep 11 20:25:57 2011 (r225490) @@ -153,6 +153,8 @@ tlphy_attach(device_t dev) sc->sc_mii.mii_service = tlphy_service; sc->sc_mii.mii_pdata = mii; + sc->sc_mii.mii_flags |= MIIF_NOMANPAUSE; + /* * Note that if we're on a device that also supports 100baseTX, * we are not going to want to use the built-in 10baseT port, @@ -338,7 +340,8 @@ tlphy_status(struct tlphy_softc *sc) * just have to report what's in the BMCR. */ if (bmcr & BMCR_FDX) - mii->mii_media_active |= IFM_FDX; + mii->mii_media_active |= + IFM_FDX | mii_phy_flowstatus(&sc->sc_mii); else mii->mii_media_active |= IFM_HDX; mii->mii_media_active |= IFM_10_T; Modified: stable/7/sys/dev/mii/truephy.c ============================================================================== --- stable/7/sys/dev/mii/truephy.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/mii/truephy.c Sun Sep 11 20:25:57 2011 (r225490) @@ -157,7 +157,7 @@ truephy_attach(device_t dev) sc->mii_service = truephy_service; sc->mii_pdata = mii; - sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOLOOP; + sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOLOOP | MIIF_NOMANPAUSE; if (MII_MODEL(ma->mii_id2) == MII_MODEL_AGERE_ET1011) mii_phy_reset(sc); @@ -210,7 +210,7 @@ truephy_service(struct mii_softc *sc, st if (IFM_SUBTYPE(ife->ifm_media) == IFM_1000_T) { PHY_WRITE(sc, MII_BMCR, - bmcr | BMCR_AUTOEN | BMCR_STARTNEG); + bmcr | BMCR_AUTOEN | BMCR_STARTNEG); } } break; @@ -326,7 +326,7 @@ truephy_status(struct mii_softc *sc) } if (sr & TRUEPHY_SR_FDX) - mii->mii_media_active |= IFM_FDX; + mii->mii_media_active |= IFM_FDX | mii_phy_flowstatus(sc); else mii->mii_media_active |= IFM_HDX; } Modified: stable/7/sys/dev/mii/xmphy.c ============================================================================== --- stable/7/sys/dev/mii/xmphy.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/mii/xmphy.c Sun Sep 11 20:25:57 2011 (r225490) @@ -116,7 +116,7 @@ xmphy_attach(device_t dev) sc->mii_service = xmphy_service; sc->mii_pdata = mii; - sc->mii_flags |= MIIF_NOISOLATE; + sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOMANPAUSE; sc->mii_anegticks = MII_ANEGTICKS; mii_phy_reset(sc); @@ -134,6 +134,7 @@ xmphy_attach(device_t dev) PRINT("auto"); printf("\n"); + #undef ADD #undef PRINT @@ -247,7 +248,6 @@ xmphy_status(struct mii_softc *sc) if (bmcr & XMPHY_BMCR_LOOP) mii->mii_media_active |= IFM_LOOP; - if (bmcr & XMPHY_BMCR_AUTOEN) { if ((bmsr & XMPHY_BMSR_ACOMP) == 0) { if (bmsr & XMPHY_BMSR_LINK) { Modified: stable/7/sys/dev/nfe/if_nfe.c ============================================================================== --- stable/7/sys/dev/nfe/if_nfe.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/nfe/if_nfe.c Sun Sep 11 20:25:57 2011 (r225490) @@ -3286,14 +3286,10 @@ nfe_set_linkspeed(struct nfe_softc *sc) break; } } - phyno = 0; - if (mii->mii_instance) { - miisc = LIST_FIRST(&mii->mii_phys); - phyno = miisc->mii_phy; - LIST_FOREACH(miisc, &mii->mii_phys, mii_list) - mii_phy_reset(miisc); - } else - return; + miisc = LIST_FIRST(&mii->mii_phys); + phyno = miisc->mii_phy; + LIST_FOREACH(miisc, &mii->mii_phys, mii_list) + mii_phy_reset(miisc); nfe_miibus_writereg(sc->nfe_dev, phyno, MII_100T2CR, 0); nfe_miibus_writereg(sc->nfe_dev, phyno, MII_ANAR, ANAR_TX_FD | ANAR_TX | ANAR_10_FD | ANAR_10 | ANAR_CSMA); Modified: stable/7/sys/dev/nge/if_nge.c ============================================================================== --- stable/7/sys/dev/nge/if_nge.c Sun Sep 11 20:17:44 2011 (r225489) +++ stable/7/sys/dev/nge/if_nge.c Sun Sep 11 20:25:57 2011 (r225490) @@ -2391,10 +2391,8 @@ nge_mediachange(struct ifnet *ifp) sc = ifp->if_softc; *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***