From owner-freebsd-stable Tue Mar 13 22:28: 5 2001 Delivered-To: freebsd-stable@freebsd.org Received: from prism.flugsvamp.com (cb58709-a.mdsn1.wi.home.com [24.17.241.9]) by hub.freebsd.org (Postfix) with ESMTP id 3CD3637B718; Tue, 13 Mar 2001 22:27:50 -0800 (PST) (envelope-from jlemon@flugsvamp.com) Received: (from jlemon@localhost) by prism.flugsvamp.com (8.11.0/8.11.0) id f2E6Om137753; Wed, 14 Mar 2001 00:24:48 -0600 (CST) (envelope-from jlemon) Date: Wed, 14 Mar 2001 00:24:48 -0600 (CST) From: Jonathan Lemon Message-Id: <200103140624.f2E6Om137753@prism.flugsvamp.com> To: eugen@svzserv.kemerovo.su, stable@freebsd.org, jlemon@freebsd.org, jkh@freebsd.org Subject: Re: New 4.3 BETA (BETA2) release available X-Newsgroups: local.mail.freebsd-stable In-Reply-To: References: Organization: Cc: Sender: owner-freebsd-stable@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG In article 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 majordomo@FreeBSD.org with "unsubscribe freebsd-stable" in the body of the message