summaryrefslogtreecommitdiff
path: root/kernel/acpi.c
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2018-09-06 01:58:10 +0200
committerMiguel <m.i@gmx.at>2018-09-06 01:58:10 +0200
commitef4943053475cd8bf341c42dd0b538bc630b92a3 (patch)
treeb7f59c937797a0ce0603af9ef46a194d4a64ef22 /kernel/acpi.c
parentf67ad595650954195ef064a8b91038dbd0e16842 (diff)
working on smp
Diffstat (limited to 'kernel/acpi.c')
-rw-r--r--kernel/acpi.c20
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);
}
-
-
}
}