diff options
author | marius <marius@FreeBSD.org> | 2007-01-13 00:17:39 +0000 |
---|---|---|
committer | marius <marius@FreeBSD.org> | 2007-01-13 00:17:39 +0000 |
commit | aa6513e87bae36fff388d090b4fa9d84b089de4e (patch) | |
tree | e5e4fd82fcc2fadf315140cad3259f51a6798359 | |
parent | b7d2e0ec0c552eebcfd60bfd8afdd791ee33c0eb (diff) | |
download | FreeBSD-src-aa6513e87bae36fff388d090b4fa9d84b089de4e.zip FreeBSD-src-aa6513e87bae36fff388d090b4fa9d84b089de4e.tar.gz |
After another thought there is another nail for the mii_phy_dev_probe()-
hammer.
-rw-r--r-- | sys/dev/mii/rlphy.c | 31 |
1 files changed, 12 insertions, 19 deletions
diff --git a/sys/dev/mii/rlphy.c b/sys/dev/mii/rlphy.c index 47d7609..243b608 100644 --- a/sys/dev/mii/rlphy.c +++ b/sys/dev/mii/rlphy.c @@ -82,6 +82,15 @@ DRIVER_MODULE(rlphy, miibus, rlphy_driver, rlphy_devclass, 0, 0); static int rlphy_service(struct mii_softc *, struct mii_data *, int); static void rlphy_status(struct mii_softc *); +/* + * RealTek internal PHYs don't have vendor/device ID registers; + * re(4) and rl(4) fake up a return value of all zeros. + */ +static const struct mii_phydesc rlintphys[] = { + { 0, 0, "RealTek internal media interface" }, + MII_PHY_END +}; + static const struct mii_phydesc rlphys[] = { MII_PHY_DESC(REALTEK, RTL8201L), MII_PHY_END @@ -90,7 +99,6 @@ static const struct mii_phydesc rlphys[] = { static int rlphy_probe(device_t dev) { - struct mii_attach_args *ma; const char *nic; int rv; @@ -98,25 +106,10 @@ rlphy_probe(device_t dev) if (rv <= 0) return (rv); - /* - * RealTek interal PHYs don't have vendor/device ID registers; - * the `re' and `rl' drivers fake up a return value of all zeros. - */ - ma = device_get_ivars(dev); - if (MII_OUI(ma->mii_id1, ma->mii_id2) != 0 || - MII_MODEL(ma->mii_id2) != 0) - return (ENXIO); - - /* - * Make sure the parent is an `rl' or an `re'. - */ nic = device_get_name(device_get_parent(device_get_parent(dev))); - if (strcmp(nic, "rl") != 0 && strcmp(nic, "re") != 0) - return (ENXIO); - - device_set_desc(dev, "RealTek internal media interface"); - - return (BUS_PROBE_DEFAULT); + if (strcmp(nic, "rl") == 0 && strcmp(nic, "re") == 0) + return (mii_phy_dev_probe(dev, rlintphys, BUS_PROBE_DEFAULT)); + return (ENXIO); } static int |