diff options
Diffstat (limited to 'sys/dev/mii/xmphy.c')
-rw-r--r-- | sys/dev/mii/xmphy.c | 37 |
1 files changed, 16 insertions, 21 deletions
diff --git a/sys/dev/mii/xmphy.c b/sys/dev/mii/xmphy.c index 9867f0e..75d3e27 100644 --- a/sys/dev/mii/xmphy.c +++ b/sys/dev/mii/xmphy.c @@ -84,11 +84,17 @@ static void xmphy_status(struct mii_softc *); static int xmphy_mii_phy_auto(struct mii_softc *); static const struct mii_phydesc xmphys[] = { - { MII_OUI_xxXAQTI, MII_MODEL_XAQTI_XMACII, MII_STR_XAQTI_XMACII }, - MII_PHY_DESC(JATO, BASEX), + MII_PHY_DESC(xxJATO, BASEX), + MII_PHY_DESC(xxXAQTI, XMACII), MII_PHY_END }; +static const struct mii_phy_funcs xmphy_funcs = { + xmphy_service, + xmphy_status, + mii_phy_reset +}; + static int xmphy_probe(device_t dev) { @@ -100,28 +106,17 @@ static int xmphy_attach(device_t dev) { struct mii_softc *sc; - struct mii_attach_args *ma; - struct mii_data *mii; const char *sep = ""; sc = device_get_softc(dev); - ma = device_get_ivars(dev); - sc->mii_dev = device_get_parent(dev); - mii = ma->mii_data; - LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list); - - sc->mii_flags = miibus_get_flags(dev); - sc->mii_inst = mii->mii_instance++; - sc->mii_phy = ma->mii_phyno; - sc->mii_service = xmphy_service; - sc->mii_pdata = mii; - - sc->mii_flags |= MIIF_NOISOLATE; + + mii_phy_dev_attach(dev, MIIF_NOISOLATE | MIIF_NOMANPAUSE, + &xmphy_funcs, 0); sc->mii_anegticks = MII_ANEGTICKS; - mii_phy_reset(sc); + PHY_RESET(sc); -#define ADD(m, c) ifmedia_add(&mii->mii_media, (m), (c), NULL) +#define ADD(m, c) ifmedia_add(&sc->mii_pdata->mii_media, (m), (c), NULL) #define PRINT(s) printf("%s%s", sep, s); sep = ", " device_printf(dev, " "); @@ -134,6 +129,7 @@ xmphy_attach(device_t dev) PRINT("auto"); printf("\n"); + #undef ADD #undef PRINT @@ -170,7 +166,7 @@ xmphy_service(struct mii_softc *sc, struct mii_data *mii, int cmd) (void)xmphy_mii_phy_auto(sc); break; case IFM_1000_SX: - mii_phy_reset(sc); + PHY_RESET(sc); if ((ife->ifm_media & IFM_FDX) != 0) { PHY_WRITE(sc, XMPHY_MII_ANAR, XMPHY_ANAR_FDX); PHY_WRITE(sc, XMPHY_MII_BMCR, XMPHY_BMCR_FDX); @@ -212,7 +208,7 @@ xmphy_service(struct mii_softc *sc, struct mii_data *mii, int cmd) sc->mii_ticks = 0; - mii_phy_reset(sc); + PHY_RESET(sc); xmphy_mii_phy_auto(sc); return (0); } @@ -247,7 +243,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) { |