diff options
author | marius <marius@FreeBSD.org> | 2010-10-02 18:53:12 +0000 |
---|---|---|
committer | marius <marius@FreeBSD.org> | 2010-10-02 18:53:12 +0000 |
commit | 9c329941907d63b275da17ba20294c7f0a2e324b (patch) | |
tree | be43fedc87f2ffc4b3d13f6ff4002bb017799ac5 /sys/dev/mii/ruephy.c | |
parent | e9dc33bfce177d81402bea81ce874ef0bb9f3536 (diff) | |
download | FreeBSD-src-9c329941907d63b275da17ba20294c7f0a2e324b.zip FreeBSD-src-9c329941907d63b275da17ba20294c7f0a2e324b.tar.gz |
- In the spirit of previous simplifications factor out the checks for a
different PHY instance being selected and isolation out into the wrappers
around the service methods rather than duplicating them over and over
again (besides, a PHY driver shouldn't need to care about which instance
it actually is).
- Centralize the check for the need to isolate a non-zero PHY instance not
supporting isolation in mii_mediachg() and just ignore it rather than
panicing, which should sufficient given that a) things are likely to
just work anyway if one doesn't plug in more than one port at a time and
b) refusing to attach in this case just leaves us in a unknown but most
likely also not exactly correct configuration (besides several drivers
setting MIIF_NOISOLATE didn't care about these anyway, probably due to
setting this flag for no real reason).
- Minor fixes like removing unnecessary setting of sc->mii_anegticks,
using sc->mii_anegticks instead of hardcoded values etc.
Diffstat (limited to 'sys/dev/mii/ruephy.c')
-rw-r--r-- | sys/dev/mii/ruephy.c | 31 |
1 files changed, 5 insertions, 26 deletions
diff --git a/sys/dev/mii/ruephy.c b/sys/dev/mii/ruephy.c index a9f2bbd..c1e2741 100644 --- a/sys/dev/mii/ruephy.c +++ b/sys/dev/mii/ruephy.c @@ -109,33 +109,21 @@ ruephy_attach(device_t dev) ma = device_get_ivars(dev); sc->mii_dev = device_get_parent(dev); mii = ma->mii_data; - - /* - * The RealTek PHY can never be isolated, so never allow non-zero - * instances! - */ - if (mii->mii_instance != 0) { - device_printf(dev, "ignoring this PHY, non-zero instance\n"); - return (ENXIO); - } - LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list); - sc->mii_inst = mii->mii_instance; + sc->mii_inst = mii->mii_instance++; sc->mii_phy = ma->mii_phyno; sc->mii_service = ruephy_service; sc->mii_pdata = mii; - mii->mii_instance++; /* - * Apparently, we can't neither isolate nor do loopback on this PHY. + * Apparently, we can neither isolate nor do loopback on this PHY. */ sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOLOOP; ruephy_reset(sc); - sc->mii_capabilities = - PHY_READ(sc, MII_BMSR) & ma->mii_capmask; + sc->mii_capabilities = PHY_READ(sc, MII_BMSR) & ma->mii_capmask; device_printf(dev, " "); mii_phy_add_media(sc); printf("\n"); @@ -150,13 +138,6 @@ ruephy_service(struct mii_softc *sc, struct mii_data *mii, int cmd) struct ifmedia_entry *ife = mii->mii_media.ifm_cur; int reg; - /* - * We can't isolate the RealTek RTL8150 PHY, - * so it has to be the only one! - */ - if (IFM_INST(ife->ifm_media) != sc->mii_inst) - panic("ruephy_service: can't isolate RealTek RTL8150 PHY"); - switch (cmd) { case MII_POLLSTAT: break; @@ -194,10 +175,8 @@ ruephy_service(struct mii_softc *sc, struct mii_data *mii, int cmd) if (reg & RUEPHY_MSR_LINK) break; - /* - * Only retry autonegotiation every 5 seconds. - */ - if (++sc->mii_ticks <= MII_ANEGTICKS) + /* Only retry autonegotiation every mii_anegticks seconds. */ + if (sc->mii_ticks <= sc->mii_anegticks) break; sc->mii_ticks = 0; |