diff options
author | BALATON Zoltan <balaton@eik.bme.hu> | 2021-01-09 21:16:36 +0100 |
---|---|---|
committer | Philippe Mathieu-Daudé <f4bug@amsat.org> | 2021-02-21 19:42:34 +0100 |
commit | c953bf7118261a6af8f306108d5072b5d4efccd0 (patch) | |
tree | 2e2aecff8f295ae5d3fa53bd414737113b6a4a21 /hw | |
parent | 3dc31cb849053c2748e0cf0595bd25475572b28a (diff) | |
download | qemu-c953bf7118261a6af8f306108d5072b5d4efccd0.zip qemu-c953bf7118261a6af8f306108d5072b5d4efccd0.tar.gz qemu-c953bf7118261a6af8f306108d5072b5d4efccd0.tar.bz2 |
vt82c686: Remove index field of SuperIOConfig
Remove the separate index value from SuperIOConfig and store
the index at reg 0 which is reserved and returns 0 on read.
This simplifies the object state.
Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
Message-Id: <15b2968fd300a12d06b42368d084f6f80d3c3be5.1610223397.git.balaton@eik.bme.hu>
[PMD: Split original patch in 5, this is part 1/5]
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Diffstat (limited to 'hw')
-rw-r--r-- | hw/isa/vt82c686.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/hw/isa/vt82c686.c b/hw/isa/vt82c686.c index a37f193..eebaa0d 100644 --- a/hw/isa/vt82c686.c +++ b/hw/isa/vt82c686.c @@ -250,7 +250,6 @@ static const TypeInfo vt8231_pm_info = { typedef struct SuperIOConfig { uint8_t regs[0x100]; - uint8_t index; MemoryRegion io; } SuperIOConfig; @@ -258,14 +257,15 @@ static void superio_cfg_write(void *opaque, hwaddr addr, uint64_t data, unsigned size) { SuperIOConfig *sc = opaque; + uint8_t idx = sc->regs[0]; if (addr == 0x3f0) { /* config index register */ - sc->index = data & 0xff; + idx = data & 0xff; } else { bool can_write = true; /* 0x3f1, config data register */ - trace_via_superio_write(sc->index, data & 0xff); - switch (sc->index) { + trace_via_superio_write(idx, data & 0xff); + switch (idx) { case 0x00 ... 0xdf: case 0xe4: case 0xe5: @@ -283,7 +283,7 @@ static void superio_cfg_write(void *opaque, hwaddr addr, uint64_t data, } if (can_write) { - sc->regs[sc->index] = data & 0xff; + sc->regs[idx] = data & 0xff; } } } @@ -291,9 +291,16 @@ static void superio_cfg_write(void *opaque, hwaddr addr, uint64_t data, static uint64_t superio_cfg_read(void *opaque, hwaddr addr, unsigned size) { SuperIOConfig *sc = opaque; - uint8_t val = sc->regs[sc->index]; + uint8_t idx = sc->regs[0]; + uint8_t val = sc->regs[idx]; - trace_via_superio_read(sc->index, val); + if (addr == 0) { + return idx; + } + if (addr == 1 && idx == 0) { + val = 0; /* reading reg 0 where we store index value */ + } + trace_via_superio_read(idx, val); return val; } |