From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1JloKn-0003p3-0f for qemu-devel@nongnu.org; Tue, 15 Apr 2008 12:48:41 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1JloKj-0003gY-3s for qemu-devel@nongnu.org; Tue, 15 Apr 2008 12:48:39 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1JloKi-0003g9-Mw for qemu-devel@nongnu.org; Tue, 15 Apr 2008 12:48:36 -0400 Received: from lizzard.sbs.de ([194.138.37.39]) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1JloKi-0006fC-9j for qemu-devel@nongnu.org; Tue, 15 Apr 2008 12:48:36 -0400 Received: from mail2.sbs.de (localhost [127.0.0.1]) by lizzard.sbs.de (8.12.11.20060308/8.12.11) with ESMTP id m3FGmXUP028199 for ; Tue, 15 Apr 2008 18:48:33 +0200 Received: from [139.21.95.225] (mchn012c.mchh.siemens.de [139.21.95.225] (may be forged)) by mail2.sbs.de (8.12.11.20060308/8.12.11) with ESMTP id m3FGmXJi021475 for ; Tue, 15 Apr 2008 18:48:33 +0200 Message-ID: <4804DC62.8080208@siemens.com> Date: Tue, 15 Apr 2008 18:48:34 +0200 From: Jan Kiszka MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] [PATCH] PCnet: Allow more then two TMDs Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org A simple fix to let the PCnet emulation handle more than two fragments for outgoing packets. There is still a hard-coded limitation of three fragments for incoming packets, but that didn't hurt so far, even with our test cases (the RX code is a bit too hairy to remove that limitation without risking regressions :->). Signed-off-by: Jan Kiszka --- hw/pcnet.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) Index: b/hw/pcnet.c =================================================================== --- a/hw/pcnet.c +++ b/hw/pcnet.c @@ -1249,15 +1249,14 @@ static void pcnet_transmit(PCNetState *s #endif if (GET_FIELD(tmd.status, TMDS, STP)) { s->xmit_pos = 0; - if (!GET_FIELD(tmd.status, TMDS, ENP)) { - int bcnt = 4096 - GET_FIELD(tmd.length, TMDL, BCNT); - s->phys_mem_read(s->dma_opaque, PHYSADDR(s, tmd.tbadr), - s->buffer, bcnt, CSR_BSWP(s)); - s->xmit_pos += bcnt; - } xmit_cxda = PHYSADDR(s,CSR_CXDA(s)); } - if (GET_FIELD(tmd.status, TMDS, ENP) && (s->xmit_pos >= 0)) { + if (!GET_FIELD(tmd.status, TMDS, ENP)) { + int bcnt = 4096 - GET_FIELD(tmd.length, TMDL, BCNT); + s->phys_mem_read(s->dma_opaque, PHYSADDR(s, tmd.tbadr), + s->buffer + s->xmit_pos, bcnt, CSR_BSWP(s)); + s->xmit_pos += bcnt; + } else if (s->xmit_pos >= 0) { int bcnt = 4096 - GET_FIELD(tmd.length, TMDL, BCNT); s->phys_mem_read(s->dma_opaque, PHYSADDR(s, tmd.tbadr), s->buffer + s->xmit_pos, bcnt, CSR_BSWP(s));