summaryrefslogtreecommitdiffstats
path: root/sys/dev/tl
diff options
context:
space:
mode:
authormarius <marius@FreeBSD.org>2010-10-24 12:51:02 +0000
committermarius <marius@FreeBSD.org>2010-10-24 12:51:02 +0000
commit528da28c69d8d91f4821e446dfab3b9d8701857c (patch)
tree3a99214e2bf91c6201a9888bd1895b2da197a9fa /sys/dev/tl
parent211ad2b3d37af0cd970ea0a19d1d82177744010e (diff)
downloadFreeBSD-src-528da28c69d8d91f4821e446dfab3b9d8701857c.zip
FreeBSD-src-528da28c69d8d91f4821e446dfab3b9d8701857c.tar.gz
- Add IFM_10_2 and IFM_10_5 media via tlphy(4) only in case the respective
interface also has such connectors. - In tl_attach() unify three different ways of obtaining the device and vendor IDs and remove the now obsolete tl_dinfo from tl_softc. - Given that tlphy(4) only handles the integrated PHYs of NICs driven by tl(4) make it only probe on the latter. - Switch mlphy(4) and tlphy(4) to use mii_phy_add_media()/mii_phy_setmedia(). - Simplify looking for the respective companion PHY in mlphy(4) and tlphy(4) by ignoring the native one by just comparing the device_t's directly rather than the device name.
Diffstat (limited to 'sys/dev/tl')
-rw-r--r--sys/dev/tl/if_tl.c24
-rw-r--r--sys/dev/tl/if_tlreg.h1
2 files changed, 18 insertions, 7 deletions
diff --git a/sys/dev/tl/if_tl.c b/sys/dev/tl/if_tl.c
index 56f51df..a256552 100644
--- a/sys/dev/tl/if_tl.c
+++ b/sys/dev/tl/if_tl.c
@@ -1104,12 +1104,11 @@ static int
tl_attach(dev)
device_t dev;
{
- int i;
u_int16_t did, vid;
struct tl_type *t;
struct ifnet *ifp;
struct tl_softc *sc;
- int unit, error = 0, rid;
+ int error, flags, i, rid, unit;
u_char eaddr[6];
vid = pci_get_vendor(dev);
@@ -1207,10 +1206,9 @@ tl_attach(dev)
bzero(sc->tl_ldata, sizeof(struct tl_list_data));
- sc->tl_dinfo = t;
- if (t->tl_vid == COMPAQ_VENDORID || t->tl_vid == TI_VENDORID)
+ if (vid == COMPAQ_VENDORID || vid == TI_VENDORID)
sc->tl_eeaddr = TL_EEPROM_EADDR;
- if (t->tl_vid == OLICOM_VENDORID)
+ if (vid == OLICOM_VENDORID)
sc->tl_eeaddr = TL_EEPROM_EADDR_OC;
/* Reset the adapter. */
@@ -1241,7 +1239,7 @@ tl_attach(dev)
* word. To make things even more confusing, neither 00:00:28
* nor 00:00:24 appear in the IEEE OUI database.
*/
- if (sc->tl_dinfo->tl_vid == OLICOM_VENDORID) {
+ if (vid == OLICOM_VENDORID) {
for (i = 0; i < ETHER_ADDR_LEN; i += 2) {
u_int16_t *p;
p = (u_int16_t *)&eaddr[i];
@@ -1279,6 +1277,20 @@ tl_attach(dev)
* XXX mii_attach() can fail for reason different than
* no PHYs found!
*/
+ flags = 0;
+ if (vid == COMPAQ_VENDORID) {
+ if (did == COMPAQ_DEVICEID_NETEL_10_100_PROLIANT ||
+ did == COMPAQ_DEVICEID_NETFLEX_3P_INTEGRATED ||
+ did == COMPAQ_DEVICEID_NETFLEX_3P_BNC ||
+ did == COMPAQ_DEVICEID_NETEL_10_T2_UTP_COAX)
+ flags |= MIIF_MACPRIV0;
+ if (did == COMPAQ_DEVICEID_NETEL_10 ||
+ did == COMPAQ_DEVICEID_NETEL_10_100_DUAL ||
+ did == COMPAQ_DEVICEID_NETFLEX_3P ||
+ did == COMPAQ_DEVICEID_NETEL_10_100_EMBEDDED)
+ flags |= MIIF_MACPRIV1;
+ } else if (vid == OLICOM_VENDORID && did == OLICOM_DEVICEID_OC2183)
+ flags |= MIIF_MACPRIV0 | MIIF_MACPRIV1;
if (mii_attach(dev, &sc->tl_miibus, ifp, tl_ifmedia_upd,
tl_ifmedia_sts, BMSR_DEFCAPMASK, MII_PHY_ANY, MII_OFFSET_ANY, 0)) {
struct ifmedia *ifm;
diff --git a/sys/dev/tl/if_tlreg.h b/sys/dev/tl/if_tlreg.h
index f0347e7..4e340b1 100644
--- a/sys/dev/tl/if_tlreg.h
+++ b/sys/dev/tl/if_tlreg.h
@@ -116,7 +116,6 @@ struct tl_softc {
struct resource *tl_irq;
struct resource *tl_res;
device_t tl_miibus;
- struct tl_type *tl_dinfo; /* ThunderLAN adapter info */
u_int8_t tl_eeaddr;
struct tl_list_data *tl_ldata; /* TX/RX lists and mbufs */
struct tl_chain_data tl_cdata;
OpenPOWER on IntegriCloud