[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 08/10] eepro100: Support byte/word read/write acc
From: |
Stefan Weil |
Subject: |
[Qemu-devel] [PATCH v2 08/10] eepro100: Support byte/word read/write access to MDI control register |
Date: |
Sat, 30 Apr 2011 22:40:11 +0200 |
MDI control is a 32 bit register, but may be read or written using
8 or 16 bit access. Data is latched when the MSB is written.
Add support for byte/word read/write access.
Signed-off-by: Stefan Weil <address@hidden>
---
hw/eepro100.c | 34 ++++++++++++++++++++++++++++++++--
1 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/hw/eepro100.c b/hw/eepro100.c
index 1949ee0..ff8c9ba 100644
--- a/hw/eepro100.c
+++ b/hw/eepro100.c
@@ -1192,8 +1192,9 @@ static uint32_t eepro100_read_mdi(EEPRO100State * s)
return val;
}
-static void eepro100_write_mdi(EEPRO100State * s, uint32_t val)
+static void eepro100_write_mdi(EEPRO100State *s)
{
+ uint32_t val = e100_read_reg4(s, SCBCtrlMDI);
uint8_t raiseint = (val & BIT(29)) >> 29;
uint8_t opcode = (val & BITS(27, 26)) >> 26;
uint8_t phy = (val & BITS(25, 21)) >> 21;
@@ -1369,6 +1370,13 @@ static uint8_t eepro100_read1(EEPRO100State * s,
uint32_t addr)
case SCBeeprom:
val = eepro100_read_eeprom(s);
break;
+ case SCBCtrlMDI:
+ case SCBCtrlMDI + 1:
+ case SCBCtrlMDI + 2:
+ case SCBCtrlMDI + 3:
+ val = (uint8_t)(eepro100_read_mdi(s) >> (8 * (addr & 3)));
+ TRACE(OTHER, logout("addr=%s val=0x%02x\n", regname(addr), val));
+ break;
case SCBpmdr: /* Power Management Driver Register */
val = 0;
TRACE(OTHER, logout("addr=%s val=0x%02x\n", regname(addr), val));
@@ -1401,6 +1409,11 @@ static uint16_t eepro100_read2(EEPRO100State * s,
uint32_t addr)
val = eepro100_read_eeprom(s);
TRACE(OTHER, logout("addr=%s val=0x%04x\n", regname(addr), val));
break;
+ case SCBCtrlMDI:
+ case SCBCtrlMDI + 2:
+ val = (uint16_t)(eepro100_read_mdi(s) >> (8 * (addr & 3)));
+ TRACE(OTHER, logout("addr=%s val=0x%04x\n", regname(addr), val));
+ break;
default:
logout("addr=%s val=0x%04x\n", regname(addr), val);
missing("unknown word read");
@@ -1487,6 +1500,15 @@ static void eepro100_write1(EEPRO100State * s, uint32_t
addr, uint8_t val)
TRACE(OTHER, logout("addr=%s val=0x%02x\n", regname(addr), val));
eepro100_write_eeprom(s->eeprom, val);
break;
+ case SCBCtrlMDI:
+ case SCBCtrlMDI + 1:
+ case SCBCtrlMDI + 2:
+ TRACE(OTHER, logout("addr=%s val=0x%02x\n", regname(addr), val));
+ break;
+ case SCBCtrlMDI + 3:
+ TRACE(OTHER, logout("addr=%s val=0x%02x\n", regname(addr), val));
+ eepro100_write_mdi(s);
+ break;
default:
logout("addr=%s val=0x%02x\n", regname(addr), val);
missing("unknown byte write");
@@ -1526,6 +1548,13 @@ static void eepro100_write2(EEPRO100State * s, uint32_t
addr, uint16_t val)
TRACE(OTHER, logout("addr=%s val=0x%04x\n", regname(addr), val));
eepro100_write_eeprom(s->eeprom, val);
break;
+ case SCBCtrlMDI:
+ TRACE(OTHER, logout("addr=%s val=0x%04x\n", regname(addr), val));
+ break;
+ case SCBCtrlMDI + 2:
+ TRACE(OTHER, logout("addr=%s val=0x%04x\n", regname(addr), val));
+ eepro100_write_mdi(s);
+ break;
default:
logout("addr=%s val=0x%04x\n", regname(addr), val);
missing("unknown word write");
@@ -1547,7 +1576,8 @@ static void eepro100_write4(EEPRO100State * s, uint32_t
addr, uint32_t val)
eepro100_write_port(s);
break;
case SCBCtrlMDI:
- eepro100_write_mdi(s, val);
+ TRACE(OTHER, logout("addr=%s val=0x%08x\n", regname(addr), val));
+ eepro100_write_mdi(s);
break;
default:
logout("addr=%s val=0x%08x\n", regname(addr), val);
--
1.7.2.5
- [Qemu-devel] [PULL v2] eepro100: Update of patch series (fixes and enhancements), Stefan Weil, 2011/04/30
- [Qemu-devel] [PATCH v2 07/10] eepro100: Support byte/word writes to pointer register, Stefan Weil, 2011/04/30
- [Qemu-devel] [PATCH v2 09/10] eepro100: Support byte read access to general control register, Stefan Weil, 2011/04/30
- [Qemu-devel] [PATCH v2 02/10] eepro100: Remove type casts which are no longer needed, Stefan Weil, 2011/04/30
- [Qemu-devel] [PATCH v2 04/10] eepro100: Pad received short frames, Stefan Weil, 2011/04/30
- [Qemu-devel] [PATCH v2 03/10] eepro100: Remove unused structure element, Stefan Weil, 2011/04/30
- [Qemu-devel] [PATCH v2 08/10] eepro100: Support byte/word read/write access to MDI control register,
Stefan Weil <=
- [Qemu-devel] [PATCH v2 10/10] eepro100: Support 32 bit read/write access to flash register, Stefan Weil, 2011/04/30
- [Qemu-devel] [PATCH v2 06/10] eepro100: Support byte/word writes to port address, Stefan Weil, 2011/04/30
- [Qemu-devel] [PATCH v2 05/10] eepro100: Fix endianness issues, Stefan Weil, 2011/04/30
- [Qemu-devel] [PATCH v2 01/10] eepro100: Avoid duplicate debug messages, Stefan Weil, 2011/04/30