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

Reply via email to