From owner-freebsd-hackers Tue Jun 15 11:10:59 1999 Delivered-To: freebsd-hackers@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 608) id 1983915543; Tue, 15 Jun 1999 11:10:57 -0700 (PDT) From: "Jonathan M. Bresler" To: hackers@FreeBSD.ORG Subject: PATCH for NE2000 driver--if_ed.c Message-Id: <19990615181057.1983915543@hub.freebsd.org> Date: Tue, 15 Jun 1999 11:10:57 -0700 (PDT) Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG patch adds support for the Linksys 10/100 PCMCIA card if you have a NE2000 type card which is supported by if_ed.c, please apply this patch and provide feedback. it work wonderfully for me, but i have only two cards that use this driver.....there are a wide variety of cards that use the if_ed.c driver. i want to make sure of the change before committing it. *** /sys/i386/isa/if_ed.c.orig Tue Jan 2 05:33:53 1990 --- /sys/i386/isa/if_ed.c Sun Jun 6 06:59:40 1999 *************** *** 193,198 **** --- 193,200 ---- static u_long ds_crc __P((u_char *ep)); + static int ed_get_Linksys __P((struct ed_softc *)); + #if (NCARD > 0) || (NPNP > 0) #include #endif *************** *** 410,415 **** --- 412,435 ---- return (1); } + static int + ed_get_Linksys(sc) + struct ed_softc *sc; + { + u_char sum; + int i; + + for (sum = 0, i = 0x14; i < 0x1c; i++) + sum += inb(sc->nic_addr +i); + if (sum != 0xff) + return (0); + for (i = 0; i < ETHER_ADDR_LEN; i++) { + sc->arpcom.ac_enaddr[i] = inb(sc->nic_addr + 0x14 + i); + printf("%02x.", sc->arpcom.ac_enaddr[i]); + } + return (1); + } + /* * Probe and vendor-specific initialization routine for SMC/WD80x3 boards */ *************** *** 1072,1077 **** --- 1092,1098 ---- u_char romdata[16], tmp; static char test_pattern[32] = "THIS is A memory TEST pattern"; char test_buffer[32]; + int linksys = 0; sc->asic_addr = port + ED_NOVELL_ASIC_OFFSET; sc->nic_addr = port + ED_NOVELL_NIC_OFFSET; *************** *** 1141,1147 **** ed_pio_writemem(sc, test_pattern, 8192, sizeof(test_pattern)); ed_pio_readmem(sc, 8192, test_buffer, sizeof(test_pattern)); ! if (bcmp(test_pattern, test_buffer, sizeof(test_pattern))) { /* not an NE1000 - try NE2000 */ outb(sc->nic_addr + ED_P0_DCR, ED_DCR_WTS | ED_DCR_FT1 | ED_DCR_LS); --- 1162,1174 ---- ed_pio_writemem(sc, test_pattern, 8192, sizeof(test_pattern)); ed_pio_readmem(sc, 8192, test_buffer, sizeof(test_pattern)); ! linksys = ed_get_Linksys(sc); ! if (linksys) { ! outb(sc->nic_addr + ED_P0_DCR, ED_DCR_WTS | ED_DCR_FT1 | ED_DCR_LS); ! sc->isa16bit = 1; ! sc->type = ED_TYPE_NE2000; ! sc->type_str = "Linksys"; ! } else if (bcmp(test_pattern, test_buffer, sizeof(test_pattern))) { /* not an NE1000 - try NE2000 */ outb(sc->nic_addr + ED_P0_DCR, ED_DCR_WTS | ED_DCR_FT1 | ED_DCR_LS); *************** *** 1251,1269 **** * Use one xmit buffer if < 16k, two buffers otherwise (if not told * otherwise). */ ! if ((memsize < 16384) || (flags & ED_FLAGS_NO_MULTI_BUFFERING)) sc->txb_cnt = 1; else sc->txb_cnt = 2; sc->rec_page_start = sc->tx_page_start + sc->txb_cnt * ED_TXBUF_SIZE; ! sc->rec_page_stop = sc->tx_page_start + memsize / ED_PAGE_SIZE; sc->mem_ring = sc->mem_start + sc->txb_cnt * ED_PAGE_SIZE * ED_TXBUF_SIZE; ! ! ed_pio_readmem(sc, 0, romdata, 16); ! for (n = 0; n < ETHER_ADDR_LEN; n++) ! sc->arpcom.ac_enaddr[n] = romdata[n * (sc->isa16bit + 1)]; #ifdef GWETHER if (sc->arpcom.ac_enaddr[2] == 0x86) { --- 1278,1298 ---- * Use one xmit buffer if < 16k, two buffers otherwise (if not told * otherwise). */ ! if ((sc->mem_size < 16384) || (flags & ED_FLAGS_NO_MULTI_BUFFERING)) sc->txb_cnt = 1; else sc->txb_cnt = 2; sc->rec_page_start = sc->tx_page_start + sc->txb_cnt * ED_TXBUF_SIZE; ! n = sc->tx_page_start + sc->mem_size / ED_PAGE_SIZE; ! sc->rec_page_stop = (n > 0xff) ? 0xff : n; sc->mem_ring = sc->mem_start + sc->txb_cnt * ED_PAGE_SIZE * ED_TXBUF_SIZE; ! if (!linksys) { ! ed_pio_readmem(sc, 0, romdata, 16); ! for (n = 0; n < ETHER_ADDR_LEN; n++) ! sc->arpcom.ac_enaddr[n] = romdata[n * (sc->isa16bit + 1)]; ! } #ifdef GWETHER if (sc->arpcom.ac_enaddr[2] == 0x86) { To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message