Message ID | 20090811211456.GC10500@1und1.de |
---|---|
State | Superseded |
Headers | show |
diff --git a/hw/eepro100.c b/hw/eepro100.c index bf5d920..f619d36 100644 --- a/hw/eepro100.c +++ b/hw/eepro100.c @@ -1249,7 +1249,11 @@ static void eepro100_write1(EEPRO100State * s, uint32_t addr, uint8_t val) static void eepro100_write2(EEPRO100State * s, uint32_t addr, uint16_t val) { if (addr <= sizeof(s->mem) - sizeof(val)) { + ru_state_t rtmp = get_ru_state(s); + cu_state_t ctmp = get_cu_state(s); memcpy(&s->mem[addr], &val, sizeof(val)); + set_cu_state(s, ctmp); + set_ru_state(s, rtmp); } logout("addr=%s val=0x%04x\n", regname(addr), val);
This patch ensures that a driver will not accidentally/incorrectly change the RU/CU state with a write. This is incomplete and a bit ugly, but good enough for these drivers. The reason this is an issue is that the drivers ACK interrupts with a 16 bit write to the status word, with the lower bits having a value of 0. Signed-off-by: Reimar Döffinger <Reimar.Doeffinger@gmx.de> --- hw/eepro100.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-)