From 18f61c542724713f111deb1292d16f0eb33b6361 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Sun, 29 Oct 2023 21:35:11 +0200 Subject: [PATCH] Kernel: Fix ACPI DSDT address Read x_dsdt address only if fadt's length contains it. Bochs seems to have version 1 fadt without the x_* fields. --- kernel/kernel/ACPI.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/kernel/kernel/ACPI.cpp b/kernel/kernel/ACPI.cpp index 072f337a..86ac0a3a 100644 --- a/kernel/kernel/ACPI.cpp +++ b/kernel/kernel/ACPI.cpp @@ -211,7 +211,10 @@ namespace Kernel if (memcmp(header->signature, "FACP", 4) == 0) { auto* fadt = (FADT*)header; - paddr_t dsdt_paddr = fadt->x_dsdt; + + paddr_t dsdt_paddr = 0; + if (fadt->length > 140) // 140 is the offset of x_dsdt + dsdt_paddr = fadt->x_dsdt; if (dsdt_paddr == 0 || !PageTable::is_valid_pointer(dsdt_paddr)) dsdt_paddr = fadt->dsdt;