[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 3/9] eepro100: Support byte/word writes to port addr
From: |
Stefan Weil |
Subject: |
[Qemu-devel] [PATCH 3/9] eepro100: Support byte/word writes to port address |
Date: |
Thu, 31 Mar 2011 22:33:25 +0200 |
port is a 32 bit register, but may be written using 8 or 16 bit writes.
Add support for byte/word writes.
Signed-off-by: Stefan Weil <address@hidden>
---
hw/eepro100.c | 20 ++++++++++++++++++--
1 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/hw/eepro100.c b/hw/eepro100.c
index c789767..47ef78c 100644
--- a/hw/eepro100.c
+++ b/hw/eepro100.c
@@ -1303,8 +1303,9 @@ static uint32_t eepro100_read_port(EEPRO100State * s)
return 0;
}
-static void eepro100_write_port(EEPRO100State * s, uint32_t val)
+static void eepro100_write_port(EEPRO100State * s)
{
+ uint32_t val = e100_read_reg4(s, SCBPort);
uint32_t address = (val & ~PORT_SELECTION_MASK);
uint8_t selection = (val & PORT_SELECTION_MASK);
switch (selection) {
@@ -1458,7 +1459,15 @@ static void eepro100_write1(EEPRO100State * s, uint32_t
addr, uint8_t val)
}
eepro100_interrupt(s, 0);
break;
+ case SCBPort:
+ case SCBPort + 1:
+ case SCBPort + 2:
+ TRACE(OTHER, logout("addr=%s val=0x%02x\n", regname(addr), val));
+ break;
case SCBPort + 3:
+ TRACE(OTHER, logout("addr=%s val=0x%02x\n", regname(addr), val));
+ eepro100_write_port(s);
+ break;
case SCBFlow: /* does not exist on 82557 */
case SCBFlow + 1:
case SCBFlow + 2:
@@ -1493,6 +1502,13 @@ static void eepro100_write2(EEPRO100State * s, uint32_t
addr, uint16_t val)
eepro100_write_command(s, val);
eepro100_write1(s, SCBIntmask, val >> 8);
break;
+ case SCBPort:
+ TRACE(OTHER, logout("addr=%s val=0x%04x\n", regname(addr), val));
+ break;
+ case SCBPort + 2:
+ TRACE(OTHER, logout("addr=%s val=0x%04x\n", regname(addr), val));
+ eepro100_write_port(s);
+ break;
case SCBeeprom:
TRACE(OTHER, logout("addr=%s val=0x%04x\n", regname(addr), val));
eepro100_write_eeprom(s->eeprom, val);
@@ -1515,7 +1531,7 @@ static void eepro100_write4(EEPRO100State * s, uint32_t
addr, uint32_t val)
break;
case SCBPort:
TRACE(OTHER, logout("addr=%s val=0x%08x\n", regname(addr), val));
- eepro100_write_port(s, val);
+ eepro100_write_port(s);
break;
case SCBCtrlMDI:
eepro100_write_mdi(s, val);
--
1.7.2.5
- [Qemu-devel] eepro100: Improve emulation and portability, Stefan Weil, 2011/03/31
- [Qemu-devel] [PATCH 5/9] eepro100: Support byte/word read/write access to MDI control register, Stefan Weil, 2011/03/31
- [Qemu-devel] [PATCH 4/9] eepro100: Support byte/word writes to pointer register, Stefan Weil, 2011/03/31
- [Qemu-devel] [PATCH 8/9] eepro100: Pad received short frames, Stefan Weil, 2011/03/31
- [Qemu-devel] [PATCH 7/9] eepro100: Support 32 bit read access to flash register, Stefan Weil, 2011/03/31
- [Qemu-devel] [PATCH 2/9] eepro100: Fix endianness issues, Stefan Weil, 2011/03/31
- [Qemu-devel] [PATCH 9/9] eepro100: Simplify receive data structure, Stefan Weil, 2011/03/31
- [Qemu-devel] [PATCH 6/9] eepro100: Support byte read access to general control register, Stefan Weil, 2011/03/31
- [Qemu-devel] [PATCH 3/9] eepro100: Support byte/word writes to port address,
Stefan Weil <=
- [Qemu-devel] [PATCH 1/9] eepro100: Avoid duplicate debug messages, Stefan Weil, 2011/03/31