[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 08/12] e1000.c doesn't properly emulate EERD and ICS
From: |
Glauber Costa |
Subject: |
[Qemu-devel] [PATCH 08/12] e1000.c doesn't properly emulate EERD and ICS registers |
Date: |
Wed, 26 Aug 2009 09:05:42 -0400 |
From: Bill Paul <address@hidden>
Once again, the emulation of the EERD and ICS registers in e1000.c is
incorrect. Nobody has noticed this before because none of the Intel-written
e1000 drivers use these registers, and all of the independently written open
source drivers copy Intel's example, so they don't use them either.
Regardless, these registers are documented in the programmer's manuals, and
their emulated behavior doesn't match the verified behavior of real hardware,
so any software that does use them doesn't function correctly.
-Bill
Signed-off-by: Bill Paul <address@hidden>
Signed-off-by: Anthony Liguori <address@hidden>
Signed-off-by: Glauber Costa <address@hidden>
---
hw/e1000.c | 13 +++++++++----
1 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/hw/e1000.c b/hw/e1000.c
index 76fa159..c55007a 100644
--- a/hw/e1000.c
+++ b/hw/e1000.c
@@ -155,6 +155,7 @@ set_interrupt_cause(E1000State *s, int index, uint32_t val)
if (val)
val |= E1000_ICR_INT_ASSERTED;
s->mac_reg[ICR] = val;
+ s->mac_reg[ICS] = val;
qemu_set_irq(s->dev.irq[0], (s->mac_reg[IMS] & s->mac_reg[ICR]) != 0);
}
@@ -287,10 +288,14 @@ flash_eerd_read(E1000State *s, int x)
{
unsigned int index, r = s->mac_reg[EERD] & ~E1000_EEPROM_RW_REG_START;
+ if ((s->mac_reg[EERD] & E1000_EEPROM_RW_REG_START) == 0)
+ return (s->mac_reg[EERD]);
+
if ((index = r >> E1000_EEPROM_RW_ADDR_SHIFT) > EEPROM_CHECKSUM_REG)
- return 0;
- return (s->eeprom_data[index] << E1000_EEPROM_RW_REG_DATA) |
- E1000_EEPROM_RW_REG_DONE | r;
+ return (E1000_EEPROM_RW_REG_DONE | r);
+
+ return ((s->eeprom_data[index] << E1000_EEPROM_RW_REG_DATA) |
+ E1000_EEPROM_RW_REG_DONE | r);
}
static void
@@ -779,7 +784,7 @@ static uint32_t (*macreg_readops[])(E1000State *, int) = {
getreg(WUFC), getreg(TDT), getreg(CTRL), getreg(LEDCTL),
getreg(MANC), getreg(MDIC), getreg(SWSM), getreg(STATUS),
getreg(TORL), getreg(TOTL), getreg(IMS), getreg(TCTL),
- getreg(RDH), getreg(RDT), getreg(VET),
+ getreg(RDH), getreg(RDT), getreg(VET), getreg(ICS),
[TOTH] = mac_read_clr8, [TORH] = mac_read_clr8, [GPRC] = mac_read_clr4,
[GPTC] = mac_read_clr4, [TPR] = mac_read_clr4, [TPT] = mac_read_clr4,
--
1.6.2.2
- [Qemu-devel] [GIT PULL] 0.10.7 stable release, Glauber Costa, 2009/08/26
- [Qemu-devel] [PATCH 01/12] fix for bad macaddr of e1000 in Windows 2003 server with original MS driver, Glauber Costa, 2009/08/26
- [Qemu-devel] [PATCH 02/12] Handle BH's queued by AIO completions in qemu_aio_flush(), Glauber Costa, 2009/08/26
- [Qemu-devel] [PATCH 03/12] BACKPORT: Add save/restore support to the LSI logic SCSI device model., Glauber Costa, 2009/08/26
- [Qemu-devel] [PATCH 04/12] vmdk: Fix backing file handling, Glauber Costa, 2009/08/26
- [Qemu-devel] [PATCH 05/12] fix broken migration, Glauber Costa, 2009/08/26
- [Qemu-devel] [PATCH 06/12] fix migration to obey -S, Glauber Costa, 2009/08/26
- [Qemu-devel] [PATCH 07/12] BACKPORT: vnc: fix copyrect screen corruption, Glauber Costa, 2009/08/26
- [Qemu-devel] [PATCH 08/12] e1000.c doesn't properly emulate EERD and ICS registers,
Glauber Costa <=
- [Qemu-devel] [PATCH 09/12] make windows notice media change, Glauber Costa, 2009/08/26
- [Qemu-devel] [PATCH 10/12] BACKPORT: Fix segfault of qemu-system-arm with PXA target, Glauber Costa, 2009/08/26
- [Qemu-devel] [PATCH 11/12] Fix detached migration with exec., Glauber Costa, 2009/08/26
- [Qemu-devel] [PATCH 12/12] Don't segfault when changing VNC password on an SDL display., Glauber Costa, 2009/08/26
- [Qemu-devel] Re: [PATCH 11/12] Fix detached migration with exec., Chris Lalancette, 2009/08/27
- [Qemu-devel] Re: [PATCH 05/12] fix broken migration, Paolo Bonzini, 2009/08/26
- Message not available
- [Qemu-devel] Re: [PATCH 05/12] fix broken migration, Glauber Costa, 2009/08/27
- [Qemu-devel] Re: [PATCH 05/12] fix broken migration, Paolo Bonzini, 2009/08/28
Re: [Qemu-devel] [GIT PULL] 0.10.7 stable release, Chris Webb, 2009/08/26