Add PMC command state, update ecsim
This commit is contained in:
parent
47ad6386c6
commit
f00326edd1
2
ecsim
2
ecsim
@ -1 +1 @@
|
|||||||
Subproject commit f735f202a66f903dd571276fc67b8a679dd3ddae
|
Subproject commit 0af66f969924e2986edbb47c5e2f29fbfbf1ddd1
|
53
src/main.c
53
src/main.c
@ -72,14 +72,63 @@ void kbc_event(struct Kbc * kbc) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum PmcState {
|
||||||
|
PMC_STATE_DEFAULT,
|
||||||
|
PMC_STATE_ACPI_READ,
|
||||||
|
PMC_STATE_ACPI_WRITE,
|
||||||
|
PMC_STATE_ACPI_WRITE_ADDR,
|
||||||
|
};
|
||||||
|
|
||||||
void pmc_event(struct Pmc * pmc) {
|
void pmc_event(struct Pmc * pmc) {
|
||||||
|
static enum PmcState state = PMC_STATE_DEFAULT;
|
||||||
|
static uint8_t state_data[2] = {0, 0};
|
||||||
|
|
||||||
uint8_t sts = pmc_status(pmc);
|
uint8_t sts = pmc_status(pmc);
|
||||||
if (sts & PMC_STS_IBF) {
|
if (sts & PMC_STS_IBF) {
|
||||||
uint8_t data = pmc_read(pmc);
|
uint8_t data = pmc_read(pmc);
|
||||||
if (sts & PMC_STS_CMD) {
|
if (sts & PMC_STS_CMD) {
|
||||||
printf("PMC command: %X\n", data);
|
printf("PMC command: %02X\n", data);
|
||||||
|
|
||||||
|
switch (data) {
|
||||||
|
case 0x80:
|
||||||
|
state = PMC_STATE_ACPI_READ;
|
||||||
|
printf(" ACPI read\n");
|
||||||
|
break;
|
||||||
|
case 0x81:
|
||||||
|
state = PMC_STATE_ACPI_WRITE;
|
||||||
|
printf(" ACPI write\n");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
state = PMC_STATE_DEFAULT;
|
||||||
|
printf(" Unknown command\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
printf("PMC data: %X\n", data);
|
printf("PMC data: %02X\n", data);
|
||||||
|
|
||||||
|
switch (state) {
|
||||||
|
case PMC_STATE_ACPI_READ:
|
||||||
|
state = PMC_STATE_DEFAULT;
|
||||||
|
//TODO - read value
|
||||||
|
uint8_t value = 0;
|
||||||
|
pmc_write(pmc, value);
|
||||||
|
printf(" ACPI read %02X = %02X\n", data, value);
|
||||||
|
break;
|
||||||
|
case PMC_STATE_ACPI_WRITE:
|
||||||
|
state = PMC_STATE_ACPI_WRITE_ADDR;
|
||||||
|
state_data[0] = data;
|
||||||
|
printf(" ACPI write %02X\n", data);
|
||||||
|
break;
|
||||||
|
case PMC_STATE_ACPI_WRITE_ADDR:
|
||||||
|
state = PMC_STATE_DEFAULT;
|
||||||
|
//TODO - write value
|
||||||
|
printf(" ACPI write %02X = %02X\n", state_data[0], data);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
state = PMC_STATE_DEFAULT;
|
||||||
|
printf(" Unknown data\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user