From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1HVvvZ-0004Hu-4Q for qemu-devel@nongnu.org; Mon, 26 Mar 2007 16:36:29 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1HVvvY-0004Hb-9A for qemu-devel@nongnu.org; Mon, 26 Mar 2007 16:36:28 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1HVvvY-0004HX-2M for qemu-devel@nongnu.org; Mon, 26 Mar 2007 15:36:28 -0500 Received: from moutng.kundenserver.de ([212.227.126.179]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1HVvtE-0005bx-HO for qemu-devel@nongnu.org; Mon, 26 Mar 2007 16:34:06 -0400 Message-ID: <46082E37.7070807@mail.berlios.de> Date: Mon, 26 Mar 2007 22:33:59 +0200 From: Stefan Weil MIME-Version: 1.0 Subject: Re: [Qemu-devel] [patch] More PCI ethernet emulations References: <23179021.1174880111656.JavaMail.root@eastrmwml08.mgt.cox.net> In-Reply-To: <23179021.1174880111656.JavaMail.root@eastrmwml08.mgt.cox.net> Content-Type: multipart/mixed; boundary="------------070703060408060405040202" Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: QEMU Developers This is a multi-part message in MIME format. --------------070703060408060405040202 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, File eepro100.tar.bz2 (added to this mail) contains everything needed to add 3 new PCI network device (all similar to EEPRO100): eepro100.patch: Makefile.target: added two binaries needed for EEPRO100 split entries for PCI network devices (1 line / entry, better merging with CVS) vl.h: added prototypes for EEPRO100 hw/pci.c: added new PCI network models: i82551, i82557b, i82559er hw/eepro100.c: EEPRO100 PCI network emulation hw/eeprom93xx.c, hw/eeprom93xx.h: EEPROM emulation, needed for EEPRO100 (and others) I just finished running these tests using a PC host running Debian GNU Linux: * compilation for all QEMU target architectures: ok * cross compilation (Windows) for all QEMU target architectures: ok * functional test: ok The last test was started like this: i386-softmmu/qemu -L pc-bios --net nic,model=i82559er --net tap /dev/hda --snapshot Networking was tested using ping and ssh connection from emulated system to host. I did not apply your patch, because I cannot test it (it needs a system with different endianess). Your feedback is welcome Stefan Ben Taylor wrote: > ---- Stefan Weil wrote: >> Hello, >> >> these new ethernet drivers for QEMU are now available: >> >> Intel 8255x ("E100", "EEPRO100"): >> http://svn.berlios.de/wsvn/ar7-firmware/qemu/trunk/hw/eepro100.c?op=file > > Having been through this with the rlt8139.c driver, > > I can expect that the area around: > > static void nic_selective_reset(EEPRO100State * s) > { > size_t i; > uint16_t *eeprom_contents = eeprom93xx_data(s->eeprom); > //~ eeprom93xx_reset(s->eeprom); > memcpy(eeprom_contents, s->macaddr, 6); > > will need to change the memcpy to something like: > > s->macaddr[0] = eeprom_contents[0] || eeprom_contents[1]<<8; > s->macaddr[2] = eeprom_contents[2] || eeprom_contents[3]<<8; > s->macaddr[4] = eeprom_contents[4] || eeprom_contents[5]<<8; > > I'll try to give it whack tommorow. Do you have some glue on the > Makefile.target? > > Ben > > > Both drivers use a new EEPROM driver: > http://svn.berlios.de/wsvn/ar7-firmware/qemu/trunk/hw/eeprom93xx.c?op=file > http://svn.berlios.de/wsvn/ar7-firmware/qemu/trunk/hw/eeprom93xx.h?op=file > > This EEPROM driver can be shared by any other device which needs > an EEPROM, for example replace the driver for RTL8139 or add an > EEPROM to cirrus vga or other ethernet cards. > > I estimate the status of the EEPROM driver to be stable. > Fabrice, maybe this part can be integrated in QEMU head. > > Both ethernet drivers work with QEMU head and Linux on x86 host / guest, > but have known endianess issues (they will at least need fixes for big > endian hosts) and are experimental. I am still working on them. > > Feedback and bug fixes are welcome. > > Regards > Stefan --------------070703060408060405040202 Content-Type: application/octet-stream; name="eepro100.tar.bz2" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="eepro100.tar.bz2" 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 I//i7kinChIDyfRXQA== --------------070703060408060405040202--