summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/dev/mii/icsphy.c
diff options
context:
space:
mode:
Diffstat (limited to 'freebsd/sys/dev/mii/icsphy.c')
-rw-r--r--freebsd/sys/dev/mii/icsphy.c67
1 files changed, 18 insertions, 49 deletions
diff --git a/freebsd/sys/dev/mii/icsphy.c b/freebsd/sys/dev/mii/icsphy.c
index 47474db7..3d5e6384 100644
--- a/freebsd/sys/dev/mii/icsphy.c
+++ b/freebsd/sys/dev/mii/icsphy.c
@@ -85,11 +85,6 @@ __FBSDID("$FreeBSD$");
static int icsphy_probe(device_t dev);
static int icsphy_attach(device_t dev);
-struct icsphy_softc {
- struct mii_softc mii_sc;
- int mii_model;
-};
-
static device_method_t icsphy_methods[] = {
/* device interface */
DEVMETHOD(device_probe, icsphy_probe),
@@ -104,7 +99,7 @@ static devclass_t icsphy_devclass;
static driver_t icsphy_driver = {
"icsphy",
icsphy_methods,
- sizeof(struct icsphy_softc)
+ sizeof(struct mii_softc)
};
DRIVER_MODULE(icsphy, miibus, icsphy_driver, icsphy_devclass, 0, 0);
@@ -114,13 +109,19 @@ static void icsphy_status(struct mii_softc *);
static void icsphy_reset(struct mii_softc *);
static const struct mii_phydesc icsphys[] = {
- MII_PHY_DESC(xxICS, 1889),
- MII_PHY_DESC(xxICS, 1890),
- MII_PHY_DESC(xxICS, 1892),
- MII_PHY_DESC(xxICS, 1893),
+ MII_PHY_DESC(ICS, 1889),
+ MII_PHY_DESC(ICS, 1890),
+ MII_PHY_DESC(ICS, 1892),
+ MII_PHY_DESC(ICS, 1893),
MII_PHY_END
};
+static const struct mii_phy_funcs icsphy_funcs = {
+ icsphy_service,
+ icsphy_status,
+ icsphy_reset
+};
+
static int
icsphy_probe(device_t dev)
{
@@ -131,40 +132,9 @@ icsphy_probe(device_t dev)
static int
icsphy_attach(device_t dev)
{
- struct icsphy_softc *isc;
- struct mii_softc *sc;
- struct mii_attach_args *ma;
- struct mii_data *mii;
-
- isc = device_get_softc(dev);
- sc = &isc->mii_sc;
- 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 = icsphy_service;
- sc->mii_pdata = mii;
-
- sc->mii_flags |= MIIF_NOISOLATE | MIIF_NOMANPAUSE;
-
- ifmedia_add(&mii->mii_media,
- IFM_MAKEWORD(IFM_ETHER, IFM_100_TX, IFM_LOOP, sc->mii_inst),
- MII_MEDIA_100_TX, NULL);
-
- isc->mii_model = MII_MODEL(ma->mii_id2);
- icsphy_reset(sc);
-
- sc->mii_capabilities = PHY_READ(sc, MII_BMSR) & ma->mii_capmask;
- device_printf(dev, " ");
- mii_phy_add_media(sc);
- printf("\n");
-
- MIIBUS_MEDIAINIT(sc->mii_dev);
+ mii_phy_dev_attach(dev, MIIF_NOISOLATE | MIIF_NOMANPAUSE,
+ &icsphy_funcs, 1);
return (0);
}
@@ -193,7 +163,7 @@ icsphy_service(struct mii_softc *sc, struct mii_data *mii, int cmd)
}
/* Update the media status. */
- icsphy_status(sc);
+ PHY_STATUS(sc);
/* Callback if something changed. */
mii_phy_update(sc, cmd);
@@ -253,16 +223,15 @@ icsphy_status(struct mii_softc *sc)
static void
icsphy_reset(struct mii_softc *sc)
{
- struct icsphy_softc *isc = (struct icsphy_softc *)sc;
mii_phy_reset(sc);
/* set powerdown feature */
- switch (isc->mii_model) {
- case MII_MODEL_xxICS_1890:
- case MII_MODEL_xxICS_1893:
+ switch (sc->mii_mpd_model) {
+ case MII_MODEL_ICS_1890:
+ case MII_MODEL_ICS_1893:
PHY_WRITE(sc, MII_ICSPHY_ECR2, ECR2_100AUTOPWRDN);
break;
- case MII_MODEL_xxICS_1892:
+ case MII_MODEL_ICS_1892:
PHY_WRITE(sc, MII_ICSPHY_ECR2,
ECR2_10AUTOPWRDN|ECR2_100AUTOPWRDN);
break;