diff --git a/system/smp.c b/system/smp.c index 5cccf24..26d4689 100644 --- a/system/smp.c +++ b/system/smp.c @@ -213,6 +213,20 @@ typedef struct { char creator_revision[4]; } rsdt_header_t; +typedef struct { + char signature[4]; // "APIC" + uint32_t length; + uint8_t revision; + uint8_t checksum; + char oem_id[6]; + char oem_table_id[8]; + char oem_revision[4]; + char creator_id[4]; + char creator_revision[4]; + uint32_t lapic_addr; + uint32_t flags; +} madt_table_header_t; + typedef struct { uint8_t type; uint8_t length; @@ -431,10 +445,10 @@ static rsdp_t *scan_for_rsdp(uintptr_t addr, int length) static bool parse_madt(uintptr_t addr) { - mp_config_table_header_t *mpc = (mp_config_table_header_t *)map_region(addr, sizeof(mp_config_table_header_t), true); + madt_table_header_t *mpc = (madt_table_header_t *)map_region(addr, sizeof(madt_table_header_t), true); if (mpc == NULL) return false; - mpc = (mp_config_table_header_t *)map_region(addr, mpc->length, true); + mpc = (madt_table_header_t *)map_region(addr, mpc->length, true); if (mpc == NULL) return false; if (checksum(mpc, mpc->length) != 0) { @@ -445,7 +459,7 @@ static bool parse_madt(uintptr_t addr) int found_cpus = 0; - uint8_t *tab_entry_ptr = (uint8_t *)mpc + sizeof(mp_config_table_header_t); + uint8_t *tab_entry_ptr = (uint8_t *)mpc + sizeof(madt_table_header_t); uint8_t *mpc_table_end = (uint8_t *)mpc + mpc->length; while (tab_entry_ptr < mpc_table_end) { madt_entry_header_t *entry_header = (madt_entry_header_t *)tab_entry_ptr;