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:
parent
3dc31cb849
commit
c953bf7118
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user