summaryrefslogtreecommitdiffstats
path: root/sys/dev/mii/gentbi.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/gentbi.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/gentbi.c')
-rw-r--r--sys/dev/mii/gentbi.c29
1 files changed, 2 insertions, 27 deletions
diff --git a/sys/dev/mii/gentbi.c b/sys/dev/mii/gentbi.c
index 19f50e9..05dc3a3 100644
--- a/sys/dev/mii/gentbi.c
+++ b/sys/dev/mii/gentbi.c
@@ -55,7 +55,7 @@
*/
/*
- * Driver for generic ten-bit (1000BASE-SX) interfaces, built in to
+ * Driver for generic ten-bit (1000BASE-SX) interfaces, built into
* many Gigabit Ethernet chips.
*
* All we have to do here is correctly report speed and duplex.
@@ -166,13 +166,11 @@ gentbi_attach(device_t dev)
MII_OUI(ma->mii_id1, ma->mii_id2),
MII_MODEL(ma->mii_id2), MII_REV(ma->mii_id2));
- sc->mii_inst = mii->mii_instance;
+ sc->mii_inst = mii->mii_instance++;
sc->mii_phy = ma->mii_phyno;
sc->mii_service = gentbi_service;
sc->mii_pdata = mii;
- mii->mii_instance++;
-
mii_phy_reset(sc);
/*
@@ -195,30 +193,13 @@ gentbi_attach(device_t dev)
static int
gentbi_service(struct mii_softc *sc, struct mii_data *mii, int cmd)
{
- struct ifmedia_entry *ife = mii->mii_media.ifm_cur;
- int reg;
switch (cmd) {
case MII_POLLSTAT:
- /*
- * If we're not polling our PHY instance, just return.
- */
- if (IFM_INST(ife->ifm_media) != sc->mii_inst)
- return (0);
break;
case MII_MEDIACHG:
/*
- * If the media indicates a different PHY instance,
- * isolate ourselves.
- */
- if (IFM_INST(ife->ifm_media) != sc->mii_inst) {
- reg = PHY_READ(sc, MII_BMCR);
- PHY_WRITE(sc, MII_BMCR, reg | BMCR_ISO);
- return (0);
- }
-
- /*
* If the interface is not up, don't do anything.
*/
if ((mii->mii_ifp->if_flags & IFF_UP) == 0)
@@ -228,12 +209,6 @@ gentbi_service(struct mii_softc *sc, struct mii_data *mii, int cmd)
break;
case MII_TICK:
- /*
- * If we're not currently selected, just return.
- */
- if (IFM_INST(ife->ifm_media) != sc->mii_inst)
- return (0);
-
if (mii_phy_tick(sc) == EJUSTRETURN)
return (0);
break;
OpenPOWER on IntegriCloud