summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwpaul <wpaul@FreeBSD.org>1999-08-27 21:18:02 +0000
committerwpaul <wpaul@FreeBSD.org>1999-08-27 21:18:02 +0000
commitd463a9ae9b3bba7c25807b6fddae8f644ddf628b (patch)
treea8461762acdff918595ae723f6e716d9b3ae401a
parent927ac7949b565041c7186c8aa7a0dbb0862f4fd7 (diff)
downloadFreeBSD-src-d463a9ae9b3bba7c25807b6fddae8f644ddf628b.zip
FreeBSD-src-d463a9ae9b3bba7c25807b6fddae8f644ddf628b.tar.gz
Make some cleanups related to miibus.
-rw-r--r--sys/pci/if_tl.c68
1 files changed, 21 insertions, 47 deletions
diff --git a/sys/pci/if_tl.c b/sys/pci/if_tl.c
index f24118d..bfa0e3d 100644
--- a/sys/pci/if_tl.c
+++ b/sys/pci/if_tl.c
@@ -310,7 +310,7 @@ static int tl_calchash __P((caddr_t));
static void tl_setmulti __P((struct tl_softc *));
static void tl_setfilt __P((struct tl_softc *, caddr_t, int));
static void tl_softreset __P((struct tl_softc *, int));
-static void tl_hardreset __P((struct tl_softc *));
+static void tl_hardreset __P((device_t));
static int tl_list_rx_init __P((struct tl_softc *));
static int tl_list_tx_init __P((struct tl_softc *));
@@ -996,39 +996,29 @@ static void tl_setmulti(sc)
* second pause at the end to 'wait for the clocks to start' but in my
* experience this isn't necessary.
*/
-static void tl_hardreset(sc)
- struct tl_softc *sc;
+static void tl_hardreset(dev)
+ device_t dev;
{
-#ifdef foo
+ struct tl_softc *sc;
int i;
- u_int16_t old_addr, flags;
- old_addr = sc->tl_phy_addr;
+ u_int16_t flags;
- for (i = 0; i < TL_PHYADDR_MAX + 1; i++) {
- sc->tl_phy_addr = i;
- tl_mii_sync(sc);
- }
+ sc = device_get_softc(dev);
- flags = PHY_BMCR_LOOPBK|PHY_BMCR_ISOLATE|PHY_BMCR_PWRDOWN;
+ tl_mii_sync(sc);
- for (i = 0; i < TL_PHYADDR_MAX + 1; i++) {
- sc->tl_phy_addr = i;
- tl_phy_writereg(sc, PHY_BMCR, flags);
- }
+ flags = BMCR_LOOP|BMCR_ISO|BMCR_PDOWN;
- sc->tl_phy_addr = TL_PHYADDR_MAX;
- tl_phy_writereg(sc, PHY_BMCR, PHY_BMCR_ISOLATE);
+ for (i = 0; i < MII_NPHY; i++)
+ tl_miibus_writereg(dev, i, MII_BMCR, flags);
+ tl_miibus_writereg(dev, 31, MII_BMCR, BMCR_ISO);
DELAY(50000);
-
- tl_phy_writereg(sc, PHY_BMCR, PHY_BMCR_LOOPBK|PHY_BMCR_ISOLATE);
-
+ tl_miibus_writereg(dev, 31, MII_BMCR, BMCR_LOOP|BMCR_ISO);
tl_mii_sync(sc);
+ while(tl_miibus_readreg(dev, 31, MII_BMCR) & BMCR_RESET);
- while(tl_phy_readreg(sc, PHY_BMCR) & PHY_BMCR_RESET);
-
- sc->tl_phy_addr = old_addr;
-#endif
+ DELAY(50000);
return;
}
@@ -1040,6 +1030,7 @@ static void tl_softreset(sc, internal)
/* Assert the adapter reset bit. */
CMD_SET(sc, TL_CMD_ADRST);
+
/* Turn off interrupts */
CMD_SET(sc, TL_CMD_INTSOFF);
@@ -1083,16 +1074,6 @@ static void tl_softreset(sc, internal)
/* Unreset the MII */
tl_dio_setbit(sc, TL_NETSIO, TL_SIO_NMRST);
- /* Clear status register */
- tl_dio_setbit16(sc, TL_NETSTS, TL_STS_MIRQ);
- tl_dio_setbit16(sc, TL_NETSTS, TL_STS_HBEAT);
- tl_dio_setbit16(sc, TL_NETSTS, TL_STS_TXSTOP);
- tl_dio_setbit16(sc, TL_NETSTS, TL_STS_RXSTOP);
-
- /* Enable network status interrupts for everything. */
- tl_dio_setbit(sc, TL_NETMASK, TL_MASK_MASK7|TL_MASK_MASK6|
- TL_MASK_MASK5|TL_MASK_MASK4);
-
/* Take the adapter out of reset */
tl_dio_setbit(sc, TL_NETCMD, TL_CMD_NRESET|TL_CMD_NWRAP);
@@ -1298,7 +1279,7 @@ static int tl_attach(dev)
/* Reset the adapter. */
tl_softreset(sc, 1);
- tl_hardreset(sc);
+ tl_hardreset(dev);
tl_softreset(sc, 1);
/*
@@ -1359,7 +1340,7 @@ static int tl_attach(dev)
/* Reset the adapter again. */
tl_softreset(sc, 1);
- tl_hardreset(sc);
+ tl_hardreset(dev);
tl_softreset(sc, 1);
/*
@@ -2122,6 +2103,8 @@ static void tl_init(xsc)
else
tl_dio_setbit(sc, TL_NETCMD, TL_CMD_NOBRX);
+ tl_dio_write16(sc, TL_MAXRX, MCLBYTES);
+
/* Init our MAC address */
tl_setfilt(sc, (caddr_t)&sc->arpcom.ac_enaddr, 0);
@@ -2154,7 +2137,7 @@ static void tl_init(xsc)
}
/* Send the RX go command */
- CMD_SET(sc, TL_CMD_GO|TL_CMD_RT);
+ CMD_SET(sc, TL_CMD_GO|TL_CMD_NES|TL_CMD_RT);
ifp->if_flags |= IFF_RUNNING;
ifp->if_flags &= ~IFF_OACTIVE;
@@ -2294,20 +2277,11 @@ static void tl_watchdog(ifp)
sc = ifp->if_softc;
-#ifdef foo
- u_int16_t bmsr;
- /* Check that we're still connected. */
- tl_phy_readreg(sc, PHY_BMSR);
- bmsr = tl_phy_readreg(sc, PHY_BMSR);
- if (!(bmsr & PHY_BMSR_LINKSTAT)) {
- printf("tl%d: no carrier\n", sc->tl_unit);
- tl_autoneg(sc, TL_FLAG_SCHEDDELAY, 1);
- } else
-#endif
printf("tl%d: device timeout\n", sc->tl_unit);
ifp->if_oerrors++;
+ tl_softreset(sc, 1);
tl_init(sc);
return;
OpenPOWER on IntegriCloud