From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.33) id 1Befs6-0007Ib-0D for qemu-devel@nongnu.org; Sun, 27 Jun 2004 16:03:26 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.33) id 1Befs4-0007Hv-4v for qemu-devel@nongnu.org; Sun, 27 Jun 2004 16:03:25 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.33) id 1Befs4-0007Hs-19 for qemu-devel@nongnu.org; Sun, 27 Jun 2004 16:03:24 -0400 Received: from [62.253.162.47] (helo=mta07-svc.ntlworld.com) by monty-python.gnu.org with esmtp (Exim 4.34) id 1BefpS-0002yr-U5 for qemu-devel@nongnu.org; Sun, 27 Jun 2004 16:00:43 -0400 From: Antony T Curtis In-Reply-To: <200406161746.34745.hetz@witch.dyndns.org> References: <200406161746.34745.hetz@witch.dyndns.org> Content-Type: multipart/mixed; boundary="=-nljbAQM1KKMFOo27HACU" Message-Id: <1088366438.5517.70.camel@pcgem.rdg.cyberkinetica.com> Mime-Version: 1.0 Date: Sun, 27 Jun 2004 21:00:38 +0100 Subject: [Qemu-devel] PCNet PCI NIC Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: hetz@witch.dyndns.org, qemu-devel@nongnu.org --=-nljbAQM1KKMFOo27HACU Content-Type: text/plain Content-Transfer-Encoding: 7bit Here is a patch against a recent QEMU CVS to emulate an AMD PC-Net II PCI ethernet adaptor. It is a bus-mastering adaptor with both 16bit and 32bit modes. This patch adds a new command line option "-nic-pcnet" which enables the this NIC emulation instead of the NE2000 nic. ERRATA: 1. currently does not fully implement automatic tx ring polling... Polling may only occur when another event 'triggers' it such as packet receive, transmit or device i/o Enjoy! -- Antony T Curtis --=-nljbAQM1KKMFOo27HACU Content-Disposition: attachment; filename=qemu-pcnet.patch.gz Content-Type: application/x-gzip; name=qemu-pcnet.patch.gz Content-Transfer-Encoding: base64 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 +EfMRRc5r3BB4KBY9OLJ/wLhGP+a6wwBAC== --=-nljbAQM1KKMFOo27HACU--