In article <local.mail.freebsd-stable/[EMAIL PROTECTED]> you write:
>Jordan Hubbard wrote:
>
>> Anyway, please test the heck even more out of this one since we're
>> only 12 days away from the final release candidate! :)
>
>le nic driver is broken in all 4.x versions. Any chance that
>kern/25650 will be commited before 4.3-RELEASE?
>
>http://www.FreeBSD.org/cgi/query-pr.cgi?pr=25650
If someone who has a le card will confirm that the following patch
fixes the problem, (I don't have one here), then we should probably
be able to get it into 4.3.
--
Jonathan
Index: if_le.c
===================================================================
RCS file: /ncvs/src/sys/i386/isa/if_le.c,v
retrieving revision 1.56.2.2
diff -u -r1.56.2.2 if_le.c
--- if_le.c 2000/07/17 21:24:30 1.56.2.2
+++ if_le.c 2001/03/14 06:37:37
@@ -73,8 +73,6 @@
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)
/*
@@ -193,8 +191,8 @@
*/
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 */
@@ -448,7 +446,7 @@
break;
case SIOCSIFFLAGS: {
- (*sc->if_init)(ifp->if_unit);
+ sc->if_init(sc);
break;
}
@@ -457,7 +455,7 @@
/*
* Update multicast listeners
*/
- (*sc->if_init)(ifp->if_unit);
+ sc->if_init(sc);
error = 0;
break;
@@ -615,9 +613,9 @@
#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);
@@ -694,7 +692,7 @@
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;
@@ -723,9 +721,8 @@
*/
static void
lemac_reset(
- IF_RESET_ARGS)
+ le_softc_t *sc)
{
- le_softc_t *sc = &le_softc[unit];
int portval, cksum;
/*
@@ -781,9 +778,8 @@
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)
@@ -948,9 +944,9 @@
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;
}
@@ -1142,8 +1138,8 @@
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);
@@ -1367,7 +1363,7 @@
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);
@@ -1520,9 +1516,8 @@
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"); */
@@ -1585,16 +1580,15 @@
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.
@@ -1611,7 +1605,7 @@
ri->ri_free++;
}
} else {
- LE_RESET(sc);
+ sc->if_reset(sc);
}
/*
@@ -1685,14 +1679,14 @@
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;
}
@@ -1961,7 +1955,7 @@
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++);
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-stable" in the body of the message