summaryrefslogtreecommitdiffstats
path: root/sys/dev/mii/rlswitch.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/mii/rlswitch.c')
-rw-r--r--sys/dev/mii/rlswitch.c38
1 files changed, 13 insertions, 25 deletions
diff --git a/sys/dev/mii/rlswitch.c b/sys/dev/mii/rlswitch.c
index 0c1b62f..67c4ec3 100644
--- a/sys/dev/mii/rlswitch.c
+++ b/sys/dev/mii/rlswitch.c
@@ -91,10 +91,16 @@ static void rlswitch_phydump(device_t dev);
#endif
static const struct mii_phydesc rlswitches[] = {
- MII_PHY_DESC(xxREALTEK, RTL8305SC),
+ MII_PHY_DESC(REALTEK, RTL8305SC),
MII_PHY_END
};
+static const struct mii_phy_funcs rlswitch_funcs = {
+ rlswitch_service,
+ rlswitch_status,
+ mii_phy_reset
+};
+
static int
rlswitch_probe(device_t dev)
{
@@ -111,38 +117,19 @@ static int
rlswitch_attach(device_t dev)
{
struct mii_softc *sc;
- struct mii_attach_args *ma;
- struct mii_data *mii;
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 = rlswitch_service;
- sc->mii_pdata = mii;
/*
* We handle all pseudo PHYs in a single instance.
*/
- sc->mii_flags |= MIIF_NOISOLATE;
-
-#define ADD(m, c) ifmedia_add(&mii->mii_media, (m), (c), NULL)
-
-#if 0
- ADD(IFM_MAKEWORD(IFM_ETHER, IFM_100_TX, IFM_LOOP, sc->mii_inst),
- MII_MEDIA_100_TX);
-#endif
+ mii_phy_dev_attach(dev, MIIF_NOISOLATE | MIIF_NOMANPAUSE,
+ &rlswitch_funcs, 0);
- sc->mii_capabilities = BMSR_100TXFDX & ma->mii_capmask;
+ sc->mii_capabilities = BMSR_100TXFDX & sc->mii_capmask;
device_printf(dev, " ");
mii_phy_add_media(sc);
printf("\n");
-#undef ADD
#ifdef RL_DEBUG
rlswitch_phydump(dev);
#endif
@@ -375,7 +362,7 @@ rlswitch_service(struct mii_softc *sc, struct mii_data *mii, int cmd)
}
/* Update the media status. */
- rlswitch_status(sc);
+ PHY_STATUS(sc);
/* Callback if something changed. */
// mii_phy_update(sc, cmd);
@@ -390,7 +377,8 @@ rlswitch_status(struct mii_softc *phy)
mii->mii_media_status = IFM_AVALID;
mii->mii_media_active = IFM_ETHER;
mii->mii_media_status |= IFM_ACTIVE;
- mii->mii_media_active |= IFM_100_TX|IFM_FDX;
+ mii->mii_media_active |=
+ IFM_100_TX | IFM_FDX | mii_phy_flowstatus(phy);
}
#ifdef RL_DEBUG
OpenPOWER on IntegriCloud