From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1CrfuY-0004E8-W7 for qemu-devel@nongnu.org; Thu, 20 Jan 2005 12:16:00 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1CrfuU-0004CQ-9q for qemu-devel@nongnu.org; Thu, 20 Jan 2005 12:15:54 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1CrfuU-00048I-2y for qemu-devel@nongnu.org; Thu, 20 Jan 2005 12:15:54 -0500 Received: from [212.250.162.18] (helo=mta10-winn.mailhost.ntl.com) by monty-python.gnu.org with esmtp (Exim 4.34) id 1Crfbk-0004lI-J8 for qemu-devel@nongnu.org; Thu, 20 Jan 2005 11:56:32 -0500 Subject: Re: [Qemu-devel] Updated 3c509 NIC patch. From: Antony T Curtis In-Reply-To: References: Content-Type: multipart/mixed; boundary="=-06FM/Du5qw04HzWD8HW7" Date: Thu, 20 Jan 2005 16:56:24 +0000 Message-Id: <1106240185.75381.25.camel@pcgem.rdg.cyberkinetica.com> Mime-Version: 1.0 Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Karel Gardas Cc: qemu-devel@nongnu.org --=-06FM/Du5qw04HzWD8HW7 Content-Type: text/plain Content-Transfer-Encoding: 7bit On Thu, 2005-01-20 at 16:07 +0100, Karel Gardas wrote: > On Thu, 20 Jan 2005, Antony T Curtis wrote: > > > On Thu, 2005-01-20 at 10:31 +0100, Karel Gardas wrote: > > > On Wed, 19 Jan 2005, Antony T Curtis wrote: > > > > > > > Hi, > > > > > > > > I think I have found the bug... will be making a new patch soon. > > > > > > Great! Thanks! > > > > Actually, I have not only found the bug you encountered, but I have > > found some other bugs in the implementation. > > > > I have also implemented a "info pnp" command. > > > > I have tested it with the following guests: FreeBSD 4, NetBSD 2 and > > Linux (Mandrake 8) with up to 4 NICs configured (dummynet). > > It seems you have not fixed one of issue I've discivered and fixed in my > patch: Oops, I forgot to copy that file over from my working directory. Have attached an updated diff. > Anyway, I'm curious how have you made it working under NetBSD 2.0. I'm > just trying boot1/2.fs and bootlap1/2.fs floppies sets but 3c509 is > detected only in the first and it is detected on the wrong addr/irq. It simply auto-detected it and worked. Some operating systems will reprogram a ISA-PnP device to use different resources than what they start with - so the port/irq it appears on after the PnP isolation process may appear to be 'wrong'. Don't worry, it is normal. Operating systems when using ISA-PnP should... 1. detect and then 'turn off' all ISA-PnP devices. 2. detect all non PnP devices and setup drivers. 3. 'turn on' one ISA-PnP device at a time making sure it doesn't conflict with existing devices IO/IRQ space, reconfiguring where neccessary. > The reason why I'm trying this is that I'm not able to get 3c509 working > under RTEMS, which is my goal, since ne2k emulation does not work well for > RTEMS 4.6.x Hmm... Looking at some RTEMS source code, I have found: > printf("ep%d: 3c5x9 at 0x%x in PnP mode. Disable PnP mode!\n", > is->id_unit, IS_BASE ); That seems to indicate that RTEMS uses the deprecated 3Com-specific detection, and not the ISA-PnP isolation method. Which gives 2 options... either modify RTEMS to understand PnP 3c509... or implement the 3Com detection method. The 3Com method requires the device to "monitors all write access to I/O port 01x0h where x is any hex digit." That is non-trivial for a QEmu driver to do cleanly. (which is the reason why I didn't implement it) I would say that your safest and most easiest way forward is to use the 3c509 in it's "powered on" configuration, and set the RTEMS driver to use it at that IO/IRQ without the automagic probe. > Thanks, > Karel > -- > Karel Gardas kgardas@objectsecurity.com > ObjectSecurity Ltd. http://www.objectsecurity.com > -- Antony T Curtis, BSc. UNIX, Linux, *BSD, Networking antony.t.curtis@ntlworld.com C++, J2EE, Perl, MySQL, Apache +44-(118)-377-3247 IT Consultancy. --=-06FM/Du5qw04HzWD8HW7 Content-Disposition: attachment; filename=qemu-3c509b.20050120b.patch.gz Content-Type: application/x-gzip; name=qemu-3c509b.20050120b.patch.gz Content-Transfer-Encoding: base64 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 2Z+z1n8BMoSd4/6TAAA= --=-06FM/Du5qw04HzWD8HW7--