From owner-freebsd-hackers Tue Jan 14 15:12:31 1997 Return-Path: Received: (from root@localhost) by freefall.freebsd.org (8.8.4/8.8.4) id PAA14548 for hackers-outgoing; Tue, 14 Jan 1997 15:12:31 -0800 (PST) Received: from chaos.tmok.com (daver@tmok.res.WPI.EDU [130.215.240.13]) by freefall.freebsd.org (8.8.4/8.8.4) with ESMTP id PAA14540 for ; Tue, 14 Jan 1997 15:12:15 -0800 (PST) Received: (from daver@localhost) by chaos.tmok.com (8.8.4/8.7.3) id SAA02192; Tue, 14 Jan 1997 18:13:43 -0500 (EST) From: Dave Costantino Message-Id: <199701142313.SAA02192@chaos.tmok.com> Subject: Re: 3com 3c509 / SB16 PNP Problems... To: mcgovern@spoon.beta.com (Brian J. McGovern) Date: Tue, 14 Jan 1997 18:13:43 -0500 (EST) Cc: hackers@freebsd.org In-Reply-To: <199701142253.RAA01390@spoon.beta.com> from "Brian J. McGovern" at Jan 14, 97 05:53:08 pm X-Mailer: ELM [version 2.4 PL25] MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: owner-hackers@freebsd.org X-Loop: FreeBSD.org Precedence: bulk After a day or so of frustration, my 3C509 ethernet card is finally recognized. It seems to have been conflicting with my Soundblaster, Turning off the cards PNP had no effect, and it was recognized fine until the addition of the Soundblaster. Here's what I did to make it work... I don't guarantee this will work with anyone elses configuration, but it's working for me. I started with a FreeBSD 2.1.5 kernel. 1) I applied the PNP patches from http://www.freebsd.org/~smpatel I then used pnpinfo to setup both cards, following the instructions. 2) In /usr/src/sys/i386/isa/elink.h, I changed: "#define ELINK_ID_PORT 0x100" to read "#define ELINK_ID_PORT 0x110". I assume this works with my configuration because the 3Com card is the second PNP device recognized. 3) I made changes to /usr/src/sys/i386/isa/if_ep.c, as shown below... This code came from looking at the Linux 3C509 driver. I'm not sure what's necessary and what isn't. :( 202,213d201 < /* Modifications */ < outb(0x02,0x279); < outb(0x02,0xA79); < < for(id_port=0x110; id_port < 0x200; id_port += 0x10) < { < outb(0x00,id_port); < outb(0xff,id_port); < printf("3com: id_port testing 0x%x...\n",id_port); < if (inb(id_port) && 0x01) { printf("found.\n"); break;} < } < Note that you might have to change the 0x110 number to something else, depending on your system. It seems that the current driver is looking at 0x100 and mistakes the SB16 to be a 3Com, causing problems. Hopefully someone more knowledgable can sort out the cause of the conflict more clearly. -dave