diff options
Diffstat (limited to 'sys/dev/pci/if_mx.c')
-rw-r--r-- | sys/dev/pci/if_mx.c | 84 |
1 files changed, 17 insertions, 67 deletions
diff --git a/sys/dev/pci/if_mx.c b/sys/dev/pci/if_mx.c index 230ff2c366b..0e8e0029cee 100644 --- a/sys/dev/pci/if_mx.c +++ b/sys/dev/pci/if_mx.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_mx.c,v 1.4 1999/02/27 19:15:26 jason Exp $ */ +/* $OpenBSD: if_mx.c,v 1.5 1999/03/03 22:51:46 jason Exp $ */ /* * Copyright (c) 1997, 1998 @@ -92,7 +92,6 @@ #include <dev/pci/pcireg.h> #include <dev/pci/pcivar.h> #include <dev/pci/pcidevs.h> -#define bootverbose 0 #define MX_USEIOSPACE @@ -100,22 +99,6 @@ #include <dev/pci/if_mxreg.h> -/* - * Various supported PHY vendors/types and their names. Note that - * this driver will work with pretty much any MII-compliant PHY, - * so failure to positively identify the chip is not a fatal error. - */ - -static struct mx_type mx_phys[] = { - { TI_PHY_VENDORID, TI_PHY_10BT, "<TI ThunderLAN 10BT (internal)>" }, - { TI_PHY_VENDORID, TI_PHY_100VGPMI, "<TI TNETE211 100VG Any-LAN>" }, - { NS_PHY_VENDORID, NS_PHY_83840A, "<National Semiconductor DP83840A>"}, - { LEVEL1_PHY_VENDORID, LEVEL1_PHY_LXT970, "<Level 1 LXT970>" }, - { INTEL_PHY_VENDORID, INTEL_PHY_82555, "<Intel 82555>" }, - { SEEQ_PHY_VENDORID, SEEQ_PHY_80220, "<SEEQ 80220>" }, - { 0, 0, "<MII-compliant physical interface>" } -}; - static int mx_probe __P((struct device *, void *, void *)); static void mx_attach __P((struct device *, struct device *self, void *aux)); @@ -870,34 +853,23 @@ static void mx_getmode_mii(sc) ifp = &sc->arpcom.ac_if; bmsr = mx_phy_readreg(sc, PHY_BMSR); - if (bootverbose) - printf("mx%d: PHY status word: %x\n", sc->mx_unit, bmsr); /* fallback */ sc->ifmedia.ifm_media = IFM_ETHER|IFM_10_T|IFM_HDX; if (bmsr & PHY_BMSR_10BTHALF) { - if (bootverbose) - printf("mx%d: 10Mbps half-duplex mode supported\n", - sc->mx_unit); ifmedia_add(&sc->ifmedia, IFM_ETHER|IFM_10_T|IFM_HDX, 0, NULL); ifmedia_add(&sc->ifmedia, IFM_ETHER|IFM_10_T, 0, NULL); } if (bmsr & PHY_BMSR_10BTFULL) { - if (bootverbose) - printf("mx%d: 10Mbps full-duplex mode supported\n", - sc->mx_unit); ifmedia_add(&sc->ifmedia, IFM_ETHER|IFM_10_T|IFM_FDX, 0, NULL); sc->ifmedia.ifm_media = IFM_ETHER|IFM_10_T|IFM_FDX; } if (bmsr & PHY_BMSR_100BTXHALF) { - if (bootverbose) - printf("mx%d: 100Mbps half-duplex mode supported\n", - sc->mx_unit); ifp->if_baudrate = 100000000; ifmedia_add(&sc->ifmedia, IFM_ETHER|IFM_100_TX, 0, NULL); ifmedia_add(&sc->ifmedia, @@ -906,9 +878,6 @@ static void mx_getmode_mii(sc) } if (bmsr & PHY_BMSR_100BTXFULL) { - if (bootverbose) - printf("mx%d: 100Mbps full-duplex mode supported\n", - sc->mx_unit); ifp->if_baudrate = 100000000; ifmedia_add(&sc->ifmedia, IFM_ETHER|IFM_100_TX|IFM_FDX, 0, NULL); @@ -917,23 +886,16 @@ static void mx_getmode_mii(sc) /* Some also support 100BaseT4. */ if (bmsr & PHY_BMSR_100BT4) { - if (bootverbose) - printf("mx%d: 100baseT4 mode supported\n", sc->mx_unit); ifp->if_baudrate = 100000000; ifmedia_add(&sc->ifmedia, IFM_ETHER|IFM_100_T4, 0, NULL); sc->ifmedia.ifm_media = IFM_ETHER|IFM_100_T4; #ifdef FORCE_AUTONEG_TFOUR - if (bootverbose) - printf("mx%d: forcing on autoneg support for BT4\n", - sc->mx_unit); ifmedia_add(&sc->ifmedia, IFM_ETHER|IFM_AUTO, 0 NULL): sc->ifmedia.ifm_media = IFM_ETHER|IFM_AUTO; #endif } if (bmsr & PHY_BMSR_CANAUTONEG) { - if (bootverbose) - printf("mx%d: autoneg supported\n", sc->mx_unit); ifmedia_add(&sc->ifmedia, IFM_ETHER|IFM_AUTO, 0, NULL); sc->ifmedia.ifm_media = IFM_ETHER|IFM_AUTO; } @@ -1487,7 +1449,7 @@ static void mx_txeoc(sc) sc->mx_cdata.mx_tx_tail = NULL; if (sc->mx_want_auto) { if (sc->mx_type == MX_TYPE_98713 && - sc->mx_pinfo != NULL) + sc->mx_hasmii != 0) mx_autoneg_mii(sc, MX_FLAG_DELAYTIMEO, 1); else mx_autoneg(sc, MX_FLAG_DELAYTIMEO, 1); @@ -1772,7 +1734,7 @@ static void mx_init(xsc) s = splimp(); - if (sc->mx_pinfo != NULL) + if (sc->mx_hasmii != 0) phy_bmcr = mx_phy_readreg(sc, PHY_BMCR); /* @@ -1805,7 +1767,7 @@ static void mx_init(xsc) else MX_SETBIT(sc, MX_MAGICPACKET, MX_MAGIC_98715); - if (sc->mx_pinfo != NULL) { + if (sc->mx_hasmii != 0) { MX_SETBIT(sc, MX_WATCHDOG, MX_WDOG_JABBERDIS); mx_setcfg(sc, mx_phy_readreg(sc, PHY_BMCR)); } else @@ -1821,8 +1783,7 @@ static void mx_init(xsc) /* Init circular RX list. */ if (mx_list_rx_init(sc) == ENOBUFS) { - printf("mx%d: initialization failed: no " - "memory for rx buffers\n", sc->mx_unit); + printf("mx%d: no memory for rx buffers\n", sc->mx_unit); mx_stop(sc); (void)splx(s); return; @@ -1854,7 +1815,7 @@ static void mx_init(xsc) CSR_WRITE_4(sc, MX_RXSTART, 0xFFFFFFFF); /* Restore state of BMCR */ - if (sc->mx_pinfo != NULL) + if (sc->mx_hasmii != 0) mx_phy_writereg(sc, PHY_BMCR, phy_bmcr); ifp->if_flags |= IFF_RUNNING; @@ -1880,7 +1841,7 @@ static int mx_ifmedia_upd(ifp) if (IFM_TYPE(ifm->ifm_media) != IFM_ETHER) return(EINVAL); - if (sc->mx_type == MX_TYPE_98713 && sc->mx_pinfo != NULL) { + if (sc->mx_type == MX_TYPE_98713 && sc->mx_hasmii != 0) { if (IFM_SUBTYPE(ifm->ifm_media) == IFM_AUTO) mx_autoneg_mii(sc, MX_FLAG_SCHEDDELAY, 1); else @@ -1910,7 +1871,7 @@ static void mx_ifmedia_sts(ifp, ifmr) ifmr->ifm_active = IFM_ETHER; - if (sc->mx_type != MX_TYPE_98713 || sc->mx_pinfo == NULL) { + if (sc->mx_type != MX_TYPE_98713 || sc->mx_hasmii == 0) { media = CSR_READ_4(sc, MX_NETCFG); if (media & MX_NETCFG_PORTSEL) ifmr->ifm_active = IFM_ETHER|IFM_100_TX; @@ -2025,7 +1986,7 @@ static void mx_watchdog(ifp) sc = ifp->if_softc; if (sc->mx_autoneg) { - if (sc->mx_type == MX_TYPE_98713 && sc->mx_pinfo != NULL) + if (sc->mx_type == MX_TYPE_98713 && sc->mx_hasmii != 0) mx_autoneg_mii(sc, MX_FLAG_DELAYTIMEO, 1); else mx_autoneg(sc, MX_FLAG_DELAYTIMEO, 1); @@ -2035,7 +1996,7 @@ static void mx_watchdog(ifp) ifp->if_oerrors++; printf("mx%d: watchdog timeout\n", sc->mx_unit); - if (sc->mx_pinfo == NULL) { + if (sc->mx_hasmii == 0) { if (!(CSR_READ_4(sc, MX_10BTSTAT) & MX_TSTAT_LS10) || !(CSR_READ_4(sc, MX_10BTSTAT) & MX_TSTAT_LS100)) printf("mx%d: no carrier - transceiver " @@ -2140,7 +2101,6 @@ mx_attach(parent, self, aux) u_int32_t command; u_int16_t phy_sts, phy_did, phy_vid, mac_offset = 0; int s, i, media; - struct mx_type *p = NULL; s = splimp(); @@ -2150,15 +2110,15 @@ mx_attach(parent, self, aux) #ifdef MX_USEIOSPACE if (!(command & PCI_COMMAND_IO_ENABLE)) { - printf(": failed to enable I/O ports\n"); + printf(": failed to enable i/o ports\n"); goto fail; } if (pci_io_find(pc, pa->pa_tag, MX_PCI_LOIO, &iobase, &iosize)) { - printf(": failed to find i/o space\n"); + printf(": can't find i/o space\n"); goto fail; } if (bus_space_map(pa->pa_iot, iobase, iosize, 0, &sc->mx_bhandle)) { - printf(": failed map i/o space\n"); + printf(": can't map i/o space\n"); goto fail; } sc->mx_btag = pa->pa_iot; @@ -2168,11 +2128,11 @@ mx_attach(parent, self, aux) goto fail; } if (pci_mem_find(pc, pa->pa_tag, MX_PCI_LOMEM, &iobase, &iosize)) { - printf(": failed to find memory space\n"); + printf(": can't find mem space\n"); goto fail; } if (bus_space_map(pa->pa_memt, iobase, iosize, 0, &sc->mx_bhandle)) { - printf(": failed map memory space\n"); + printf(": can't map mem space\n"); goto fail; } sc->mx_btag = pa->pa_memt; @@ -2258,17 +2218,7 @@ mx_attach(parent, self, aux) if (phy_sts) { phy_vid = mx_phy_readreg(sc, PHY_VENID); phy_did = mx_phy_readreg(sc, PHY_DEVID); - p = mx_phys; - while (p->mx_vid) { - if (phy_vid == p->mx_vid && - (phy_did|0xf) == p->mx_did) { - sc->mx_pinfo = p; - break; - } - p++; - } - if (sc->mx_pinfo == NULL) - sc->mx_pinfo = &mx_phys[PHY_UNKNOWN]; + sc->mx_hasmii = 1; } else { printf("%s: MII without any phy!\n", @@ -2278,7 +2228,7 @@ mx_attach(parent, self, aux) } ifmedia_init(&sc->ifmedia, 0, mx_ifmedia_upd, mx_ifmedia_sts); - if (sc->mx_type == MX_TYPE_98713 && sc->mx_pinfo != NULL) { + if (sc->mx_type == MX_TYPE_98713 && sc->mx_hasmii != 0) { mx_getmode_mii(sc); mx_autoneg_mii(sc, MX_FLAG_FORCEDELAY, 1); } else { |