Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 14 Mar 2001 00:24:48 -0600 (CST)
From:      Jonathan Lemon <jlemon@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
Message-ID:  <200103140624.f2E6Om137753@prism.flugsvamp.com>
In-Reply-To: <local.mail.freebsd-stable/3AAEF366.DCB8A3E3@svzserv.kemerovo.su>
References:  <local.mail.freebsd-stable/20010313191333C.jkh@osd.bsdi.com>

next in thread | previous in thread | raw e-mail | index | archive | help
In article <local.mail.freebsd-stable/3AAEF366.DCB8A3E3@svzserv.kemerovo.su> 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




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200103140624.f2E6Om137753>