summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorbenno <benno@FreeBSD.org>2002-07-05 11:07:24 +0000
committerbenno <benno@FreeBSD.org>2002-07-05 11:07:24 +0000
commit816c1df8f39dec113df1a70f36c93baf0e40b076 (patch)
treeb0470d6b081c28e04589fb46dbbde164a9ac7c9c /sys
parent5738aca9a3af0e8a826359c76de9cf66e02a9909 (diff)
downloadFreeBSD-src-816c1df8f39dec113df1a70f36c93baf0e40b076.zip
FreeBSD-src-816c1df8f39dec113df1a70f36c93baf0e40b076.tar.gz
Add a driver for the Broadcom BCM52xx "mini-theta" PHY. This includes the
internal PHY on the 3COM 3C905B and 3C905C parts, however I've rigged it so that xlphy (aka exphy) takes precedence for the time being. If people try this with their xl cards and decide that it's a better choice, we can switch this later. This is the PHY used in various iMacs and possibly other GMAC-equipped Macintoshes with 10/100 PHYs (the ones with 10/100/1000 appear to use brgphy). Obtained from: NetBSD
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/mii/bmtphy.c298
-rw-r--r--sys/dev/mii/bmtphyreg.h182
-rw-r--r--sys/dev/mii/miidevs3
3 files changed, 483 insertions, 0 deletions
diff --git a/sys/dev/mii/bmtphy.c b/sys/dev/mii/bmtphy.c
new file mode 100644
index 0000000..bcf2895
--- /dev/null
+++ b/sys/dev/mii/bmtphy.c
@@ -0,0 +1,298 @@
+/*
+ * Copyright (c) 1998, 1999, 2000, 2001 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
+ * NASA Ames Research Center.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the NetBSD
+ * Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Copyright (c) 1997 Manuel Bouyer. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Manuel Bouyer.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * from: NetBSD: bmtphy.c,v 1.8 2002/07/03 06:25:50 simonb Exp
+ *
+ * $FreeBSD$
+ */
+
+/*
+ * Driver for the Broadcom BCM5201/BCM5202 "Mini-Theta" PHYs. This also
+ * drives the PHY on the 3Com 3c905C. The 3c905C's PHY is described in
+ * the 3c905C data sheet.
+ */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/malloc.h>
+#include <sys/socket.h>
+#include <sys/bus.h>
+
+#include <net/if.h>
+#include <net/if_media.h>
+
+#include <dev/mii/mii.h>
+#include <dev/mii/miivar.h>
+#include <dev/mii/miidevs.h>
+
+#include <dev/mii/bmtphyreg.h>
+
+#include "miibus_if.h"
+
+static int bmtphy_probe(device_t);
+static int bmtphy_attach(device_t);
+
+static device_method_t bmtphy_methods[] = {
+ /* Device interface */
+ DEVMETHOD(device_probe, bmtphy_probe),
+ DEVMETHOD(device_attach, bmtphy_attach),
+ DEVMETHOD(device_detach, mii_phy_detach),
+ DEVMETHOD(device_shutdown, bus_generic_shutdown),
+
+ { 0, 0 }
+};
+
+static devclass_t bmtphy_devclass;
+
+static driver_t bmtphy_driver = {
+ "bmtphy",
+ bmtphy_methods,
+ sizeof(struct mii_softc)
+};
+
+DRIVER_MODULE(bmtphy, miibus, bmtphy_driver, bmtphy_devclass, 0, 0);
+
+static int bmtphy_service(struct mii_softc *, struct mii_data *, int);
+static void bmtphy_status(struct mii_softc *);
+
+static int
+bmtphy_probe(device_t dev)
+{
+ struct mii_attach_args *ma;
+ int rval;
+
+ ma = device_get_ivars(dev);
+ rval = 0;
+
+ if (MII_OUI(ma->mii_id1, ma->mii_id2) != MII_OUI_BROADCOM)
+ return (ENXIO);
+
+ switch (MII_MODEL(ma->mii_id2)) {
+ case MII_MODEL_BROADCOM_3C905B:
+ device_set_desc(dev, MII_STR_BROADCOM_3C905B);
+ rval = -10; /* Let exphy take precedence. */
+ break;
+ case MII_MODEL_BROADCOM_3C905C:
+ device_set_desc(dev, MII_STR_BROADCOM_3C905C);
+ rval = -10; /* Let exphy take precedence. */
+ break;
+ case MII_MODEL_BROADCOM_BCM5201:
+ device_set_desc(dev, MII_STR_BROADCOM_BCM5201);
+ break;
+ case MII_MODEL_BROADCOM_BCM5221:
+ device_set_desc(dev, MII_STR_BROADCOM_BCM5221);
+ break;
+ default:
+ return (ENXIO);
+ break;
+ }
+
+ return (rval);
+}
+
+static int
+bmtphy_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 = device_get_softc(sc->mii_dev);
+ LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
+
+ sc->mii_inst = mii->mii_instance;
+ sc->mii_phy = ma->mii_phyno;
+ sc->mii_service = bmtphy_service;
+ sc->mii_pdata = mii;
+
+ mii_phy_reset(sc);
+
+ mii->mii_instance++;
+
+ sc->mii_capabilities =
+ PHY_READ(sc, MII_BMSR) & ma->mii_capmask;
+ device_printf(dev, " ");
+ if ((sc->mii_capabilities & BMSR_MEDIAMASK) == 0)
+ printf("no media present");
+ else
+ mii_phy_add_media(sc);
+
+ printf("\n");
+
+ MIIBUS_MEDIAINIT(sc->mii_dev);
+
+ return (0);
+}
+
+static int
+bmtphy_service(struct mii_softc *sc, struct mii_data *mii, int cmd)
+{
+ struct ifmedia_entry *ife;
+ int reg;
+
+ ife = mii->mii_media.ifm_cur;
+
+ switch (cmd) {
+ case MII_POLLSTAT:
+ /*
+ * If we're not polling our PHY instance, just return.
+ */
+ if (IFM_INST(ife->ifm_media) != sc->mii_inst)
+ return (0);
+ break;
+
+ case MII_MEDIACHG:
+ /*
+ * If the media indicates a different PHY instance,
+ * isolate ourselves.
+ */
+ if (IFM_INST(ife->ifm_media) != sc->mii_inst) {
+ reg = PHY_READ(sc, MII_BMCR);
+ PHY_WRITE(sc, MII_BMCR, reg | BMCR_ISO);
+ return (0);
+ }
+
+ /*
+ * If the interface is not up, don't do anything.
+ */
+ if ((mii->mii_ifp->if_flags & IFF_UP) == 0)
+ break;
+
+ mii_phy_setmedia(sc);
+ break;
+
+ case MII_TICK:
+ /*
+ * If we're not currently selected, just return.
+ */
+ if (IFM_INST(ife->ifm_media) != sc->mii_inst)
+ return (0);
+ if (mii_phy_tick(sc) == EJUSTRETURN)
+ return (0);
+ break;
+ }
+
+ /* Update the media status. */
+ bmtphy_status(sc);
+
+ /* Callback if something changed. */
+ mii_phy_update(sc, cmd);
+
+ return (0);
+}
+
+static void
+bmtphy_status(struct mii_softc *sc)
+{
+ struct mii_data *mii;
+ struct ifmedia_entry *ife;
+ int bmsr, bmcr, aux_csr;
+
+ mii = sc->mii_pdata;
+ ife = mii->mii_media.ifm_cur;
+
+ mii->mii_media_status = IFM_AVALID;
+ mii->mii_media_active = IFM_ETHER;
+
+ bmsr = PHY_READ(sc, MII_BMSR) | PHY_READ(sc, MII_BMSR);
+ aux_csr = PHY_READ(sc, MII_BMTPHY_AUX_CSR);
+
+ if (bmsr & BMSR_LINK)
+ mii->mii_media_status |= IFM_ACTIVE;
+
+ bmcr = PHY_READ(sc, MII_BMCR);
+ if (bmcr & BMCR_ISO) {
+ mii->mii_media_active |= IFM_NONE;
+ mii->mii_media_status = 0;
+ return;
+ }
+
+ if (bmcr & BMCR_LOOP)
+ mii->mii_media_active |= IFM_LOOP;
+
+ if (bmcr & BMCR_AUTOEN) {
+ /*
+ * The media status bits are only valid if autonegotiation
+ * has completed (or it's disabled).
+ */
+ if ((bmsr & BMSR_ACOMP) == 0) {
+ /* Erg, still trying, I guess... */
+ mii->mii_media_active |= IFM_NONE;
+ return;
+ }
+
+ if (aux_csr & AUX_CSR_SPEED)
+ mii->mii_media_active |= IFM_100_TX;
+ else
+ mii->mii_media_active |= IFM_10_T;
+ if (aux_csr & AUX_CSR_FDX)
+ mii->mii_media_active |= IFM_FDX;
+ } else
+ mii->mii_media_active = ife->ifm_media;
+}
diff --git a/sys/dev/mii/bmtphyreg.h b/sys/dev/mii/bmtphyreg.h
new file mode 100644
index 0000000..7f2956a
--- /dev/null
+++ b/sys/dev/mii/bmtphyreg.h
@@ -0,0 +1,182 @@
+
+/*-
+ * Copyright (c) 2001 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Jason R. Thorpe.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the NetBSD
+ * Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * from NetBSD: bmtphyreg.h,v 1.1 2001/06/02 21:42:10 thorpej Exp
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _DEV_MII_BMTPHYREG_H_
+#define _DEV_MII_BMTPHYREG_H_
+
+/*
+ * BCM5201/BCM5202 registers.
+ */
+
+#define MII_BMTPHY_AUX_CTL 0x10 /* auxiliary control */
+#define AUX_CTL_TXDIS 0x2000 /* transmitter disable */
+#define AUX_CTL_4B5B_BYPASS 0x0400 /* bypass 4b5b encoder */
+#define AUX_CTL_SCR_BYPASS 0x0200 /* bypass scrambler */
+#define AUX_CTL_NRZI_BYPASS 0x0100 /* bypass NRZI encoder */
+#define AUX_CTL_RXALIGN_BYPASS 0x0080 /* bypass rx symbol alignment */
+#define AUX_CTL_BASEWANDER_DIS 0x0040 /* disable baseline wander correction */
+#define AUX_CTL_FEF_EN 0x0020 /* far-end fault enable */
+
+
+#define MII_BMTPHY_AUX_STS 0x11 /* auxiliary status */
+#define AUX_STS_FX_MODE 0x0400 /* 100base-FX mode (strap pin) */
+#define AUX_STS_LOCKED 0x0200 /* descrambler locked */
+#define AUX_STS_100BASE_LINK 0x0100 /* 1 = 100base link */
+#define AUX_STS_REMFAULT 0x0080 /* remote fault */
+#define AUX_STS_DISCON_STATE 0x0040 /* disconnect state */
+#define AUX_STS_FCARDET 0x0020 /* false carrier detected */
+#define AUX_STS_BAD_ESD 0x0010 /* bad ESD detected */
+#define AUX_STS_RXERROR 0x0008 /* Rx error detected */
+#define AUX_STS_TXERROR 0x0004 /* Tx error detected */
+#define AUX_STS_LOCKERROR 0x0002 /* lock error detected */
+#define AUX_STS_MLT3ERROR 0x0001 /* MLT3 code error detected */
+
+
+#define MII_BMTPHY_RXERROR_CTR 0x12 /* 100base-X Rx error counter */
+#define RXERROR_CTR_MASK 0x00ff
+
+
+#define MII_BMTPHY_FCS_CTR 0x13 /* 100base-X false carrier counter */
+#define FCS_CTR_MASK 0x00ff
+
+
+#define MII_BMTPHY_DIS_CTR 0x14 /* 100base-X disconnect counter */
+#define DIS_CTR_MASK 0x00ff
+
+
+#define MII_BMTPHY_PTEST 0x17 /* PTEST */
+
+
+#define MII_BMTPHY_AUX_CSR 0x18 /* auxiliary control/status */
+#define AUX_CSR_JABBER_DIS 0x8000 /* jabber disable */
+#define AUX_CSR_FLINK 0x4000 /* force 10baseT link pass */
+#define AUX_CSR_HSQ 0x0080 /* SQ high */
+#define AUX_CSR_LSQ 0x0040 /* SQ low */
+#define AUX_CSR_ER1 0x0020 /* edge rate 1 */
+#define AUX_CSR_ER0 0x0010 /* edge rate 0 */
+#define AUX_CSR_ANEG 0x0008 /* auto-negotiation activated */
+#define AUX_CSR_F100 0x0004 /* force 100base */
+#define AUX_CSR_SPEED 0x0002 /* 1 = 100, 0 = 10 */
+#define AUX_CSR_FDX 0x0001 /* full-duplex */
+
+
+#define MII_BMTPHY_AUX_SS 0x19 /* auxiliary status summary */
+#define AUX_SS_ACOMP 0x8000 /* auto-negotiation complete */
+#define AUX_SS_ACOMP_ACK 0x4000 /* auto-negotiation compl. ack */
+#define AUX_SS_AACK_DET 0x2000 /* auto-neg. ack detected */
+#define AUX_SS_ANLPAD 0x1000 /* auto-neg. link part. ability det */
+#define AUX_SS_ANEG_PAUSE 0x0800 /* pause operation bit */
+#define AUX_SS_HCD 0x0700 /* highest common denominator */
+#define AUX_SS_HCD_NONE 0x0000 /* none */
+#define AUX_SS_HCD_10T 0x0100 /* 10baseT */
+#define AUX_SS_HCD_10T_FDX 0x0200 /* 10baseT-FDX */
+#define AUX_SS_HCD_100TX 0x0300 /* 100baseTX-FDX */
+#define AUX_SS_HCD_100T4 0x0400 /* 100baseT4 */
+#define AUX_SS_HCD_100TX_FDX 0x0500 /* 100baseTX-FDX */
+#define AUX_SS_PDF 0x0080 /* parallel detection fault */
+#define AUX_SS_LPRF 0x0040 /* link partner remote fault */
+#define AUX_SS_LPPR 0x0020 /* link partner page received */
+#define AUX_SS_LPANA 0x0010 /* link partner auto-neg able */
+#define AUX_SS_SPEED 0x0008 /* 1 = 100, 0 = 10 */
+#define AUX_SS_LINK 0x0004 /* link pass */
+#define AUX_SS_ANEN 0x0002 /* auto-neg. enabled */
+#define AUX_SS_JABBER 0x0001 /* jabber detected */
+
+
+#define MII_BMTPHY_INTR 0x1a /* interrupt register */
+#define INTR_FDX_LED 0x8000 /* full-duplex led enable */
+#define INTR_INTR_EN 0x4000 /* interrupt enable */
+#define INTR_FDX_MASK 0x0800 /* full-dupled intr mask */
+#define INTR_SPD_MASK 0x0400 /* speed intr mask */
+#define INTR_LINK_MASK 0x0200 /* link intr mask */
+#define INTR_INTR_MASK 0x0100 /* master interrupt mask */
+#define INTR_FDX_CHANGE 0x0008 /* full-duplex change */
+#define INTR_SPD_CHANGE 0x0004 /* speed change */
+#define INTR_LINK_CHANGE 0x0002 /* link change */
+#define INTR_INTR_STATUS 0x0001 /* interrupt status */
+
+
+#define MII_BMTPHY_AUX2 0x1b /* auliliary mode 2 */
+#define AUX2_BLOCK_RXDV 0x0200 /* block RXDV mode enabled */
+#define AUX2_ANPDQ 0x0100 /* auto-neg parallel detection Q mode */
+#define AUX2_TRAFFIC_LED 0x0040 /* traffic meter led enable */
+#define AUX2_FXMTRCV_LED 0x0020 /* force Tx and Rx LEDs */
+#define AUX2_HS_TOKEN 0x0010 /* high-speed token ring mode */
+#define AUX2_AUTO_LP 0x0008 /* auto low-power mode */
+#define AUX2_TWOLINK_LED 0x0004 /* two link LEDs */
+#define AUX2_SQE_DIS 0x0002 /* disable SQE pulse */
+
+
+#define MII_BMTPHY_AUXERR 0x1c /* auxiliary error */
+#define AUXERR_MANCHESTER 0x0400 /* Manchester code error */
+#define AUXERR_EOF 0x0200 /* EOF detection error */
+#define AUXERR_POLARITY 0x0100 /* polarity inversion */
+#define AUXERR_ANEG 0x0008 /* autonegotiation enabled */
+#define AUXERR_F100 0x0004 /* force 100base */
+#define AUXERR_SPEED 0x0002 /* 1 = 100, 0 = 10 */
+#define AUXERR_FDX 0x0001 /* full-duplex */
+
+
+#define MII_BMTPHY_AUXMODE 0x1d /* auxiliary mode */
+#define AUXMODE_ACT_LED_DIS 0x0010 /* activity LED disable */
+#define AUXMODE_LINK_LED_DIS 0x0008 /* link LED disable */
+#define AUXMODE_BLOCK_TXEN 0x0002 /* enable block TXEN */
+
+
+#define MII_BMTPHY_AUXMPHY 0x1e /* auxiliary multiple phy register */
+#define AUXMPHY_HCD_TX_FDX 0x8000 /* res. is 100baseTX-FDX */
+#define AUXMPHY_HCD_T4 0x4000 /* res. is 100baseT4 */
+#define AUXMPHY_HCD_TX 0x2000 /* res. is 100baseTX */
+#define AUXMPHY_HCD_10T_FDX 0x1000 /* res. is 10baseT-FDX */
+#define AUXMPHY_HCD_10T 0x0800 /* res. is 10baseT */
+#define AUXMPHY_RES_ANEG 0x0100 /* restart auto-negotiation */
+#define AUXMPHY_ANEG_COMP 0x0080 /* auto-negotiation complete */
+#define AUXMPHY_ACK_COMP 0x0040 /* acknowledge complete */
+#define AUXMPHY_ACK_DET 0x0020 /* acknowledge detected */
+#define AUXMPHY_ABILITY_DET 0x0010 /* waiting for LP ability */
+#define AUXMPHY_SUPER_ISO 0x0008 /* super-isolate mode */
+#define AUXMPHY_10T_SERIAL 0x0002 /* 10baseT serial mode */
+
+
+#define MII_BMTPHY_TEST 0x1d /* Broadcom test register */
+
+
+#endif /* _DEV_MII_BMTPHYREG_H_ */
diff --git a/sys/dev/mii/miidevs b/sys/dev/mii/miidevs
index 0ccb71f..27d7a2e 100644
--- a/sys/dev/mii/miidevs
+++ b/sys/dev/mii/miidevs
@@ -105,7 +105,10 @@ model AMD 79c973phy 0x0036 Am79c973 internal PHY
model AMD 79c978 0x0039 Am79c978 HomePNA PHY
/* Broadcom Corp. PHYs. */
+model BROADCOM 3C905B 0x0012 3c905B 10/100 internal PHY
model BROADCOM 3C905C 0x0017 3c905C 10/100 internal PHY
+model BROADCOM BCM5201 0x0021 BCM5201 10/100baseTX PHY
+model BROADCOM BCM5221 0x001e BCM5221 10/100baseTX PHY
model xxBROADCOM BCM5400 0x0004 Broadcom 1000baseTX PHY
model xxBROADCOM BCM5401 0x0005 BCM5401 10/100/1000baseTX PHY
model xxBROADCOM BCM5411 0x0007 BCM5411 10/100/1000baseTX PHY
OpenPOWER on IntegriCloud