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>
This commit is contained in:
BALATON Zoltan 2021-01-09 21:16:36 +01:00 committed by Philippe Mathieu-Daudé
parent 3dc31cb849
commit c953bf7118

View File

@ -250,7 +250,6 @@ static const TypeInfo vt8231_pm_info = {
typedef struct SuperIOConfig { typedef struct SuperIOConfig {
uint8_t regs[0x100]; uint8_t regs[0x100];
uint8_t index;
MemoryRegion io; MemoryRegion io;
} SuperIOConfig; } SuperIOConfig;
@ -258,14 +257,15 @@ static void superio_cfg_write(void *opaque, hwaddr addr, uint64_t data,
unsigned size) unsigned size)
{ {
SuperIOConfig *sc = opaque; SuperIOConfig *sc = opaque;
uint8_t idx = sc->regs[0];
if (addr == 0x3f0) { /* config index register */ if (addr == 0x3f0) { /* config index register */
sc->index = data & 0xff; idx = data & 0xff;
} else { } else {
bool can_write = true; bool can_write = true;
/* 0x3f1, config data register */ /* 0x3f1, config data register */
trace_via_superio_write(sc->index, data & 0xff); trace_via_superio_write(idx, data & 0xff);
switch (sc->index) { switch (idx) {
case 0x00 ... 0xdf: case 0x00 ... 0xdf:
case 0xe4: case 0xe4:
case 0xe5: case 0xe5:
@ -283,7 +283,7 @@ static void superio_cfg_write(void *opaque, hwaddr addr, uint64_t data,
} }
if (can_write) { 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) static uint64_t superio_cfg_read(void *opaque, hwaddr addr, unsigned size)
{ {
SuperIOConfig *sc = opaque; 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; return val;
} }