diff --git a/sys/dev/mii/mii_physubr.c b/sys/dev/mii/mii_physubr.c index fdeddabb4ab..3d71061ac54 100644 --- a/sys/dev/mii/mii_physubr.c +++ b/sys/dev/mii/mii_physubr.c @@ -530,13 +530,21 @@ mii_phy_detach(device_t dev) } const struct mii_phydesc * -mii_phy_match(const struct mii_attach_args *ma, const struct mii_phydesc *mpd) +mii_phy_match_gen(const struct mii_attach_args *ma, + const struct mii_phydesc *mpd, size_t len) { - for (; mpd->mpd_name != NULL; mpd++) { + for (; mpd->mpd_name != NULL; + mpd = (const struct mii_phydesc *) ((const char *) mpd + len)) { if (MII_OUI(ma->mii_id1, ma->mii_id2) == mpd->mpd_oui && MII_MODEL(ma->mii_id2) == mpd->mpd_model) return (mpd); } return (NULL); } + +const struct mii_phydesc * +mii_phy_match(const struct mii_attach_args *ma, const struct mii_phydesc *mpd) +{ + return (mii_phy_match_gen(ma, mpd, sizeof(struct mii_phydesc))); +} diff --git a/sys/dev/mii/miivar.h b/sys/dev/mii/miivar.h index f1d16f705a8..a1017a0b4f7 100644 --- a/sys/dev/mii/miivar.h +++ b/sys/dev/mii/miivar.h @@ -220,7 +220,10 @@ void mii_phy_setmedia(struct mii_softc *sc); void mii_phy_update(struct mii_softc *, int); int mii_phy_tick(struct mii_softc *); -const struct mii_phydesc * mii_phy_match(const struct mii_attach_args *ma, const struct mii_phydesc *mpd); +const struct mii_phydesc * mii_phy_match(const struct mii_attach_args *ma, + const struct mii_phydesc *mpd); +const struct mii_phydesc * mii_phy_match_gen(const struct mii_attach_args *ma, + const struct mii_phydesc *mpd, size_t endlen); void ukphy_status(struct mii_softc *); #endif /* _KERNEL */