diff options
Diffstat (limited to 'kernel/acpi.c')
| -rw-r--r-- | kernel/acpi.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/kernel/acpi.c b/kernel/acpi.c index 084c193..f5c18ca 100644 --- a/kernel/acpi.c +++ b/kernel/acpi.c @@ -62,7 +62,7 @@ uint8_t *apci_get_next_entry(uint8_t *addr,smp_processors *procdata) if(*addr==0) { - klog("MADT Entry: LocalAPIC ()"); + klog("Type 0: LocalAPIC (enabled=%d)",addr[4]&1); // usable if(addr[4]&1) { @@ -78,10 +78,18 @@ uint8_t *apci_get_next_entry(uint8_t *addr,smp_processors *procdata) } else if(*addr==1) { - klog("MADT Entry: IO APIC 0x%08X",addr[4]); + klog("Type 1: IO APIC (id=%d) (addr=0x%08X) (base=%d)",addr[2], *((uint32_t*)&addr[4]),*((uint32_t*)&addr[8])); } - else if(*addr==2)klog("MADT Entry: Interrupt Source Override"); - else klog("MADT Entry: type:0x%X",*addr); + else if(*addr==2){ + klog("Type 2: Interrupt Source Override (bus src=%d) (irq src=%d) (global=%d) (flags=%d)",addr[2],addr[3],*((uint32_t*)&addr[4]),*((uint16_t*)&addr[8])); + + } + else if(*addr==4){ + klog("Type 4: Non-maskable interrupts (proc id=%d) (flags=%d) (LINT#=%d)",addr[2],*((uint16_t*)&addr[3]),addr[5]); + + } + else if(*addr==5){kpanic("Entry Type 5 : Local APIC Address Override. 64-bit address??");} + else kpanic("MADT Entry: type:0x%X",*addr); return addr+addr[1]; } @@ -102,14 +110,14 @@ void acpi_check_madt(uint32_t *madt,smp_processors *procdata) entry+=sizeof(acpi_madt); procdata->local_apic_address=table->apic_local; + klog("Local Apic Address: 0x%08X",table->apic_local); procdata->flags=table->flags; + klog("Flags (Dual 8259): %d",table->flags); while(entry<end) { entry=apci_get_next_entry(entry,procdata); } - - } } |
