From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=54750 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Q5OZI-0003M5-FP for qemu-devel@nongnu.org; Thu, 31 Mar 2011 16:34:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Q5OZ8-00020F-Nl for qemu-devel@nongnu.org; Thu, 31 Mar 2011 16:34:11 -0400 Received: from moutng.kundenserver.de ([212.227.126.186]:63657) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Q5OZ8-0001yK-Ah for qemu-devel@nongnu.org; Thu, 31 Mar 2011 16:34:02 -0400 From: Stefan Weil Date: Thu, 31 Mar 2011 22:33:25 +0200 Message-Id: <1301603611-7964-4-git-send-email-weil@mail.berlios.de> In-Reply-To: <1301603611-7964-1-git-send-email-weil@mail.berlios.de> References: <1301603611-7964-1-git-send-email-weil@mail.berlios.de> Subject: [Qemu-devel] [PATCH 3/9] eepro100: Support byte/word writes to port address List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Michael S. Tsirkin" Cc: QEMU Developers 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 --- 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