This trivial patch replaces the 16bit read (inw) on the ChipCmd register
with a 8bit read (inb). ChipCmd is only 8bit large and 0x38 is
undocumented.

FYI: This was causing an issue when used with qemu emulated rtl8139
device which was improperly aligning IOs. I've already reported the
issue along with a patch on the qemu mailing list:
http://lists.nongnu.org/archive/html/qemu-devel/2011-11/msg01937.html

Signed-off-by: Julian Pidancet <[email protected]>
---
 src/drivers/net/rtl8139.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/drivers/net/rtl8139.c b/src/drivers/net/rtl8139.c
index ebe84fb..2da8223 100644
--- a/src/drivers/net/rtl8139.c
+++ b/src/drivers/net/rtl8139.c
@@ -434,7 +434,7 @@ static void rtl_poll ( struct net_device *netdev ) {
        }
 
        /* Handle received packets */
-       while ( ! ( inw ( rtl->ioaddr + ChipCmd ) & RxBufEmpty ) ) {
+       while ( ! ( inb ( rtl->ioaddr + ChipCmd ) & RxBufEmpty ) ) {
                rx_status = * ( ( uint16_t * )
                                ( rtl->rx.ring + rtl->rx.offset ) );
                rx_len = * ( ( uint16_t * )
-- 
Julian Pidancet

_______________________________________________
ipxe-devel mailing list
[email protected]
https://lists.ipxe.org/mailman/listinfo/ipxe-devel

Reply via email to