Add PMC command state, update ecsim

This commit is contained in:
Jeremy Soller 2019-09-29 12:34:54 -06:00
parent 47ad6386c6
commit f00326edd1
No known key found for this signature in database
GPG Key ID: E988B49EE78A7FB1
2 changed files with 52 additions and 3 deletions

2
ecsim

@ -1 +1 @@
Subproject commit f735f202a66f903dd571276fc67b8a679dd3ddae
Subproject commit 0af66f969924e2986edbb47c5e2f29fbfbf1ddd1

View File

@ -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) {
static enum PmcState state = PMC_STATE_DEFAULT;
static uint8_t state_data[2] = {0, 0};
uint8_t sts = pmc_status(pmc);
if (sts & PMC_STS_IBF) {
uint8_t data = pmc_read(pmc);
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 {
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;
}
}
}
}