Return to BSD News archive
Path: sserve!newshost.anu.edu.au!munnari.oz.au!news.Hawaii.Edu!ames!agate!spool.mu.edu!sol.ctr.columbia.edu!news.kei.com!bloom-beacon.mit.edu!ai-lab!life.ai.mit.edu!mycroft From: mycroft@duality.gnu.ai.mit.edu (Charles Hannum) Newsgroups: comp.os.386bsd.questions Subject: Re: NE1000 Date: 01 Oct 1993 23:56:16 GMT Organization: MIT Artificial Intelligence Lab Lines: 114 Message-ID: <MYCROFT.93Oct1195616@duality.gnu.ai.mit.edu> References: <9309301740.AA10498@fee.unicamp.br> NNTP-Posting-Host: duality.gnu.ai.mit.edu In-reply-to: Gorgonio@fee.unicamp.br's message of 30 Sep 1993 12:40:35 -0500 In article <9309301740.AA10498@fee.unicamp.br> Gorgonio@fee.unicamp.br writes: [...], but the device driver is getting a wrong ethernet address. Look: ne0 at 0x300-0x30f irq 5 on isa ne0: ne1000 ethernet address 00:4e:2a:00:00:00 ^^^^^^^^ The following patch to if_ne.c fixes this. What does this isr 1[57] mean? A rather cryptic message; it means the ring buffer overflowed. 3. Isn't possible to use a ne1 device driver? There was a really inane bug in neprobe(). The following patch should also fix it. PLEASE NOTE: This patch is not tested! I would recommend using the current version of if_ed.c instead. =================================================================== RCS file: /b/source/CVS/src/sys/arch/i386/isa/if_ne.c,v retrieving revision 1.9 retrieving revision 1.12 diff -c -r1.9 -r1.12 *** 1.9 1993/07/17 16:41:27 --- 1.12 1993/10/01 23:12:04 *************** *** 32,38 **** * SUCH DAMAGE. * * from: @(#)if_ne.c 7.4 (Berkeley) 5/21/91 ! * $Id: if_ne.c,v 1.9 1993/07/17 16:41:27 mycroft Exp $ */ /* --- 32,38 ---- * SUCH DAMAGE. * * from: @(#)if_ne.c 7.4 (Berkeley) 5/21/91 ! * $Id: if_ne.c,v 1.12 1993/10/01 23:12:04 mycroft Exp $ */ /* *************** *** 127,139 **** #define PAT(n) (0xa55a + 37*(n)) ! u_short boarddata[16]; neprobe(dvp) struct isa_device *dvp; { int val, i, s, sum, bytemode = 1, pat; ! register struct ne_softc *ns = &ne_softc[0]; register nec; #ifdef lint --- 127,139 ---- #define PAT(n) (0xa55a + 37*(n)) ! u_char boarddata[16]; neprobe(dvp) struct isa_device *dvp; { int val, i, s, sum, bytemode = 1, pat; ! register struct ne_softc *ns = &ne_softc[dvp->id_unit]; register nec; #ifdef lint *************** *** 237,243 **** nefetch (ns, (caddr_t)boarddata, 0, sizeof(boarddata)); for(i=0; i < 6; i++) ! ns->ns_addrp[i] = boarddata[i]; splx(s); return (16); } --- 237,243 ---- nefetch (ns, (caddr_t)boarddata, 0, sizeof(boarddata)); for(i=0; i < 6; i++) ! ns->ns_addrp[i] = boarddata[i*(2-bytemode)]; splx(s); return (16); } *************** *** 643,650 **** /* Receiver ovverun? */ if (isr & DSIS_ROVRN) { ! log(LOG_ERR, "ne%d: error: isr %x\n", ns-ne_softc, isr ! /*, DSIS_BITS*/); outb(nec+ds0_rbcr0, 0); outb(nec+ds0_rbcr1, 0); outb(nec+ds0_tcr, DSTC_LB0); --- 643,650 ---- /* Receiver ovverun? */ if (isr & DSIS_ROVRN) { ! log(LOG_ERR, "ne%d: ring buffer overflow; isr=%x\n", ! ns-ne_softc, isr/*, DSIS_BITS*/); outb(nec+ds0_rbcr0, 0); outb(nec+ds0_rbcr1, 0); outb(nec+ds0_tcr, DSTC_LB0);