Architectural Support: x86_64 (#37)
[lunaix-os.git] / lunaix-os / hal / acpi / parser / madt_parser.c
index 971a4a0c37213079212b1b800422ca9fd763fbc3..c0b059db14396b72b3ccf2e164c3334786ce9552 100644 (file)
@@ -1,5 +1,5 @@
 #include "parser.h"
-#include <lunaix/mm/kalloc.h>
+#include <lunaix/mm/valloc.h>
 
 void
 madt_parse(acpi_madt_t* madt, acpi_context* toc)
@@ -7,26 +7,25 @@ madt_parse(acpi_madt_t* madt, acpi_context* toc)
     toc->madt.apic_addr = madt->apic_addr;
 
     // FUTURE: make madt.{apic,ioapic} as array or linked list.
-    uint8_t* ics_start = (uint8_t*)((uintptr_t)madt + sizeof(acpi_madt_t));
-    uintptr_t ics_end = (uintptr_t)madt + madt->header.length;
+    ptr_t ics_start = (ptr_t)madt + sizeof(acpi_madt_t);
+    ptr_t ics_end = (ptr_t)madt + madt->header.length;
 
     // Cosidering only one IOAPIC present (max 24 pins)
-    // FIXME: use hash table instead
     toc->madt.irq_exception =
-      (acpi_intso_t*)lxcalloc(24, sizeof(acpi_intso_t*));
+      (acpi_intso_t**)vcalloc(24, sizeof(acpi_intso_t*));
 
     size_t so_idx = 0;
     while (ics_start < ics_end) {
-        acpi_ics_hdr_t* entry = (acpi_ics_hdr_t*)ics_start;
+        acpi_ics_hdr_t* entry = __acpi_ics_hdr(ics_start);
         switch (entry->type) {
             case ACPI_MADT_LAPIC:
-                toc->madt.apic = (acpi_apic_t*)entry;
+                toc->madt.apic = __acpi_apic(entry);
                 break;
             case ACPI_MADT_IOAPIC:
-                toc->madt.ioapic = (acpi_ioapic_t*)entry;
+                toc->madt.ioapic = __acpi_ioapic(entry);
                 break;
             case ACPI_MADT_INTSO: {
-                acpi_intso_t* intso_tbl = (acpi_intso_t*)entry;
+                acpi_intso_t* intso_tbl = __acpi_intso(entry);
                 toc->madt.irq_exception[intso_tbl->source] = intso_tbl;
                 break;
             }