X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/7515e526342f6ee07cbe92f5a458f1c2c4a1fcaf..e6416905c4afb34e61276cdc07c44813a3ebc5e7:/lunaix-os/hal/acpi/acpi.c diff --git a/lunaix-os/hal/acpi/acpi.c b/lunaix-os/hal/acpi/acpi.c index 5c1eb17..3f8a25f 100644 --- a/lunaix-os/hal/acpi/acpi.c +++ b/lunaix-os/hal/acpi/acpi.c @@ -1,6 +1,6 @@ #include -#include +#include #include #include @@ -28,7 +28,7 @@ acpi_init(multiboot_info_t* mb_info) acpi_rsdt_t* rsdt = rsdp->rsdt; - ctx = lxcalloc(1, sizeof(acpi_context)); + ctx = vzalloc(sizeof(acpi_context)); assert_msg(ctx, "Fail to create ACPI context"); strncpy(ctx->oem_id, rsdt->header.oem_id, 6); @@ -36,7 +36,8 @@ acpi_init(multiboot_info_t* mb_info) size_t entry_n = (rsdt->header.length - sizeof(acpi_sdthdr_t)) >> 2; for (size_t i = 0; i < entry_n; i++) { - acpi_sdthdr_t* sdthdr = ((acpi_apic_t**)&(rsdt->entry))[i]; + acpi_sdthdr_t* sdthdr = + (acpi_sdthdr_t*)((acpi_apic_t**)&(rsdt->entry))[i]; switch (sdthdr->signature) { case ACPI_MADT_SIG: madt_parse((acpi_madt_t*)sdthdr, ctx); @@ -75,6 +76,16 @@ acpi_rsdp_validate(acpi_rsdp_t* rsdp) return sum == 0; } +uint8_t +acpi_gistranslate(uint8_t old_irq) +{ + if (old_irq >= 24) { + return old_irq; + } + acpi_intso_t* int_override = ctx->madt.irq_exception[old_irq]; + return int_override ? (uint8_t)int_override->gsi : old_irq; +} + #define VIRTUAL_BOX_PROBLEM acpi_rsdp_t*