summaryrefslogtreecommitdiffstats
path: root/sys/dev/mii/rlphy.c
diff options
context:
space:
mode:
authormarius <marius@FreeBSD.org>2007-01-13 00:17:39 +0000
committermarius <marius@FreeBSD.org>2007-01-13 00:17:39 +0000
commitaa6513e87bae36fff388d090b4fa9d84b089de4e (patch)
treee5e4fd82fcc2fadf315140cad3259f51a6798359 /sys/dev/mii/rlphy.c
parentb7d2e0ec0c552eebcfd60bfd8afdd791ee33c0eb (diff)
downloadFreeBSD-src-aa6513e87bae36fff388d090b4fa9d84b089de4e.zip
FreeBSD-src-aa6513e87bae36fff388d090b4fa9d84b089de4e.tar.gz
After another thought there is another nail for the mii_phy_dev_probe()-
hammer.
Diffstat (limited to 'sys/dev/mii/rlphy.c')
-rw-r--r--sys/dev/mii/rlphy.c31
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
OpenPOWER on IntegriCloud