summaryrefslogtreecommitdiffstats
path: root/sys/i386
diff options
context:
space:
mode:
authorjlemon <jlemon@FreeBSD.org>2001-10-19 15:47:41 +0000
committerjlemon <jlemon@FreeBSD.org>2001-10-19 15:47:41 +0000
commit8c68d2bf5d13eda46b6c95243a583c4d8735ebd4 (patch)
tree8a5881fa851ed3190abd9a0ba0add71a8f3d5365 /sys/i386
parente44b62dbe2f5efe9fd375e724745840bf5aecced (diff)
downloadFreeBSD-src-8c68d2bf5d13eda46b6c95243a583c4d8735ebd4.zip
FreeBSD-src-8c68d2bf5d13eda46b6c95243a583c4d8735ebd4.tar.gz
Fix the le driver - it has been broken for a while and these fixes have
been sitting neglected in my tree.
Diffstat (limited to 'sys/i386')
-rw-r--r--sys/i386/isa/if_le.c48
1 files changed, 21 insertions, 27 deletions
diff --git a/sys/i386/isa/if_le.c b/sys/i386/isa/if_le.c
index 2096e7e..144f144 100644
--- a/sys/i386/isa/if_le.c
+++ b/sys/i386/isa/if_le.c
@@ -77,8 +77,6 @@ typedef struct le_board le_board_t;
typedef u_short le_mcbits_t;
#define LE_MC_NBPW_LOG2 4
#define LE_MC_NBPW (1 << LE_MC_NBPW_LOG2)
-#define IF_RESET_ARGS int unit
-#define LE_RESET(ifp) (((sc)->if_reset)((sc)->le_if.if_unit))
#if !defined(LE_NOLEMAC)
/*
@@ -197,8 +195,8 @@ static void (*le_intrvec[NLE])(le_softc_t *sc);
*/
struct le_softc {
struct arpcom le_ac; /* Common Ethernet/ARP Structure */
- void (*if_init) __P((int)); /* Interface init routine */
- void (*if_reset) __P((int)); /* Interface reset routine */
+ void (*if_init) __P((le_softc_t *));/* Interface init routine */
+ void (*if_reset) __P((le_softc_t *));/* Interface reset routine */
caddr_t le_membase; /* Starting memory address (virtual) */
unsigned le_iobase; /* Starting I/O base address */
unsigned le_irq; /* Interrupt Request Value */
@@ -456,7 +454,7 @@ le_ioctl(
break;
case SIOCSIFFLAGS: {
- (*sc->if_init)(ifp->if_unit);
+ sc->if_init(sc);
break;
}
@@ -465,7 +463,7 @@ le_ioctl(
/*
* Update multicast listeners
*/
- (*sc->if_init)(ifp->if_unit);
+ sc->if_init(sc);
error = 0;
break;
@@ -622,9 +620,9 @@ le_multi_op(
#define LEMAC_32K_MODE(mbase) (((mbase) >= 0x14) && ((mbase) <= 0x1F))
#define LEMAC_2K_MODE(mbase) ( (mbase) >= 0x40)
-static void lemac_init(int unit);
+static void lemac_init(le_softc_t *sc);
static void lemac_start(struct ifnet *ifp);
-static void lemac_reset(IF_RESET_ARGS);
+static void lemac_reset(le_softc_t *sc);
static void lemac_intr(le_softc_t *sc);
static void lemac_rne_intr(le_softc_t *sc);
static void lemac_tne_intr(le_softc_t *sc);
@@ -701,7 +699,7 @@ lemac_probe(
sc->le_if.if_start = lemac_start;
sc->if_reset = lemac_reset;
sc->lemac_memmode = 2;
- LE_RESET(sc);
+ sc->if_reset(sc);
if ((sc->le_flags & IFF_UP) == 0)
return 0;
@@ -730,9 +728,8 @@ lemac_probe(
*/
static void
lemac_reset(
- IF_RESET_ARGS)
+ le_softc_t *sc)
{
- le_softc_t *sc = &le_softc[unit];
int portval, cksum;
/*
@@ -788,9 +785,8 @@ lemac_reset(
static void
lemac_init(
- int unit)
+ le_softc_t *sc)
{
- le_softc_t *sc = &le_softc[unit];
int s;
if ((sc->le_flags & IFF_UP) == 0)
@@ -955,9 +951,9 @@ lemac_rxd_intr(
printf("%s%d: fatal RXD error, attempting recovery\n",
sc->le_if.if_name, sc->le_if.if_unit);
- LE_RESET(sc);
+ sc->if_reset(sc);
if (sc->le_flags & IFF_UP) {
- lemac_init(sc->le_if.if_unit);
+ lemac_init(sc);
return;
}
@@ -1149,8 +1145,8 @@ static int lance_init_adapmem(le_softc_t *sc);
static int lance_init_ring(le_softc_t *sc, ln_ring_t *rp, lance_ring_t *ri,
unsigned ndescs, unsigned bufoffset,
unsigned descoffset);
-static void lance_init(int unit);
-static void lance_reset(IF_RESET_ARGS);
+static void lance_init(le_softc_t *sc);
+static void lance_reset(le_softc_t *sc);
static void lance_intr(le_softc_t *sc);
static int lance_rx_intr(le_softc_t *sc);
static void lance_start(struct ifnet *ifp);
@@ -1374,7 +1370,7 @@ depca_probe(
sc->if_init = lance_init;
sc->le_if.if_start = lance_start;
DEPCA_WRNICSR(sc, DEPCA_NICSR_SHE | DEPCA_NICSR_ENABINTR);
- LE_RESET(sc);
+ sc->if_reset(sc);
LN_STAT(low_txfree = sc->lance_txinfo.ri_max);
LN_STAT(low_txheapsize = 0xFFFFFFFF);
@@ -1527,9 +1523,8 @@ lance_dumpcsrs(
static void
lance_reset(
- IF_RESET_ARGS)
+ le_softc_t *sc)
{
- le_softc_t *sc = &le_softc[unit];
register int cnt, csr;
/* lance_dumpcsrs(sc, "lance_reset: start"); */
@@ -1592,16 +1587,15 @@ lance_reset(
static void
lance_init(
- int unit)
+ le_softc_t *sc)
{
- le_softc_t *sc = &le_softc[unit];
lance_ring_t *ri;
lance_descinfo_t *di;
ln_desc_t desc;
LN_STAT(inits++);
if (sc->le_if.if_flags & IFF_RUNNING) {
- LE_RESET(sc);
+ sc->if_reset(sc);
lance_tx_intr(sc);
/*
* If we were running, requeue any pending transmits.
@@ -1618,7 +1612,7 @@ lance_init(
ri->ri_free++;
}
} else {
- LE_RESET(sc);
+ sc->if_reset(sc);
}
/*
@@ -1692,14 +1686,14 @@ lance_intr(
if (oldcsr & LN_CSR0_MEMERROR) {
LN_STAT(memory_errors++);
if (oldcsr & (LN_CSR0_RXON|LN_CSR0_TXON)) {
- lance_init(sc->le_if.if_unit);
+ lance_init(sc);
return;
}
}
}
if ((oldcsr & LN_CSR0_RXINT) && lance_rx_intr(sc)) {
- lance_init(sc->le_if.if_unit);
+ lance_init(sc);
return;
}
@@ -1968,7 +1962,7 @@ lance_tx_intr(
LN_STAT(tx_buferror++);
sc->le_if.if_oerrors++;
if ((desc.d_status & LN_DSTS_TxLATECOLL) == 0) {
- lance_init(sc->le_if.if_unit);
+ lance_init(sc);
return 0;
} else {
LN_STAT(tx_late_collisions++);
OpenPOWER on IntegriCloud