@@ -627,6 +627,7 @@ acpi_bios_init(void)
ACPI_INIT_TABLE(build_srat());
u16 i, external_tables = qemu_cfg_acpi_additional_tables();
+ bool slic = false;
for(i = 0; i < external_tables; i++) {
u16 len = qemu_cfg_next_acpi_table_len();
@@ -635,7 +636,12 @@ acpi_bios_init(void)
warn_noalloc();
continue;
}
- ACPI_INIT_TABLE(qemu_cfg_next_acpi_table_load(addr, len));
+ struct acpi_table_header *header =
+ qemu_cfg_next_acpi_table_load(addr, len);
+ if (header->signature == SLIC_SIGNATURE) {
+ slic = true;
+ }
+ ACPI_INIT_TABLE(header);
if (tbl_idx == MAX_ACPI_TABLES) {
warn_noalloc();
break;
@@ -654,6 +660,9 @@ acpi_bios_init(void)
memcpy(rsdt->table_offset_entry, tables, sizeof(u32) * tbl_idx);
build_header((void*)rsdt, RSDT_SIGNATURE, rsdt_len, 1);
+ if (slic) {
+ // fix up rsdt->oem_id and check sum
+ }
// Build rsdp pointer table
memset(rsdp, 0, sizeof(*rsdp));