qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH] rtl8139: Fix invalid IO access alignment


From: Julian Pidancet
Subject: [Qemu-devel] [PATCH] rtl8139: Fix invalid IO access alignment
Date: Sun, 13 Nov 2011 18:13:32 +0000

This patch makes iPXE work with the rtl8139 emulation. The rtl8139
driver in iPXE issues a 16bit access on the ChipCmd register
(offset 0x37) to check the status of the rx buffer. The offset of the
ioport access was getting fixed up to 0x36 in qemu, causing the value
read in iPXE to be invalid.

This fixes an issue with iPXE reporting timeouts during TFTP transfers.

Signed-off-by: Julian Pidancet <address@hidden>
---
 hw/rtl8139.c |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/hw/rtl8139.c b/hw/rtl8139.c
index 4c37993..0ff06da 100644
--- a/hw/rtl8139.c
+++ b/hw/rtl8139.c
@@ -1971,7 +1971,7 @@ static int rtl8139_cplus_transmit_one(RTL8139State *s)
     cplus_tx_ring_desc += 16 * descriptor;
 
     DPRINTF("+++ C+ mode reading TX descriptor %d from host memory at "
-        "%08x0x%08x = 0x"DMA_ADDR_FMT"\n", descriptor, s->TxAddr[1],
+        "%08x %08x = 0x"DMA_ADDR_FMT"\n", descriptor, s->TxAddr[1],
         s->TxAddr[0], cplus_tx_ring_desc);
 
     uint32_t val, txdw0,txdw1,txbufLO,txbufHI;
@@ -2800,7 +2800,7 @@ static void rtl8139_io_writew(void *opaque, uint8_t addr, 
uint32_t val)
 {
     RTL8139State *s = opaque;
 
-    addr &= 0xfe;
+    addr &= 0xff;
 
     switch (addr)
     {
@@ -2900,7 +2900,7 @@ static void rtl8139_io_writel(void *opaque, uint8_t addr, 
uint32_t val)
 {
     RTL8139State *s = opaque;
 
-    addr &= 0xfc;
+    addr &= 0xff;
 
     switch (addr)
     {
@@ -3043,7 +3043,7 @@ static uint32_t rtl8139_io_readw(void *opaque, uint8_t 
addr)
     RTL8139State *s = opaque;
     uint32_t ret;
 
-    addr &= 0xfe; /* mask lower bit */
+    addr &= 0xff;
 
     switch (addr)
     {
@@ -3120,7 +3120,7 @@ static uint32_t rtl8139_io_readl(void *opaque, uint8_t 
addr)
     RTL8139State *s = opaque;
     uint32_t ret;
 
-    addr &= 0xfc; /* also mask low 2 bits */
+    addr &= 0xff;
 
     switch (addr)
     {
-- 
Julian Pidancet




reply via email to

[Prev in Thread] Current Thread [Next in Thread]