summaryrefslogtreecommitdiffstats
path: root/sys/dev/mii/ruephy.c
diff options
context:
space:
mode:
authormarius <marius@FreeBSD.org>2010-10-02 18:53:12 +0000
committermarius <marius@FreeBSD.org>2010-10-02 18:53:12 +0000
commit9c329941907d63b275da17ba20294c7f0a2e324b (patch)
treebe43fedc87f2ffc4b3d13f6ff4002bb017799ac5 /sys/dev/mii/ruephy.c
parente9dc33bfce177d81402bea81ce874ef0bb9f3536 (diff)
downloadFreeBSD-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.c31
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;
OpenPOWER on IntegriCloud