diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2026-04-06 14:47:37 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2026-04-06 15:11:47 +0200 |
| commit | 3dcd14a0570fef3bcc68d7df42fe3ff4cd496f93 (patch) | |
| tree | f778c1b23cf63296aab769a02781f83fb7f1ac53 /arch | |
| parent | 6e54333bcc08ddd8dbcb6aa9c3404001c309ec74 (diff) | |
| download | teachos-3dcd14a0570fef3bcc68d7df42fe3ff4cd496f93.tar.xz teachos-3dcd14a0570fef3bcc68d7df42fe3ff4cd496f93.zip | |
kapi: hook ACPI initialization up to boot process
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/x86_64/kapi/devices.cpp | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/arch/x86_64/kapi/devices.cpp b/arch/x86_64/kapi/devices.cpp index b15503d..e1773e7 100644 --- a/arch/x86_64/kapi/devices.cpp +++ b/arch/x86_64/kapi/devices.cpp @@ -1,5 +1,9 @@ #include "kapi/devices.hpp" +#include "kapi/acpi.hpp" +#include "kapi/boot.hpp" + +#include "arch/boot/boot.hpp" #include "arch/bus/isa.hpp" #include "arch/devices/legacy_pit.hpp" @@ -19,7 +23,33 @@ namespace kapi::devices auto init_platform_devices() -> void { - kstd::println("[x86_64:devices] Initializing ISA bus..."); + auto const & mbi = boot::bootstrap_information.mbi; + auto system_description_pointer = static_cast<acpi::root_system_description_pointer const *>(nullptr); + + if (auto const & xsdp = mbi->maybe_acpi_xsdp()) + { + auto data = xsdp->pointer().data(); + system_description_pointer = reinterpret_cast<kapi::acpi::root_system_description_pointer const *>(data); + } + else if (auto const & rsdp = mbi->maybe_acpi_rsdp()) + { + auto data = rsdp->pointer().data(); + system_description_pointer = reinterpret_cast<kapi::acpi::root_system_description_pointer const *>(data); + } + + if (system_description_pointer) + { + if (!kapi::acpi::init(*system_description_pointer)) + { + kstd::println(kstd::print_sink::stderr, "[x86_64:DEV] ACPI initialization failed. No tables loaded."); + } + } + else + { + kstd::println(kstd::print_sink::stderr, "[x86_64:DEV] No ACPI RSDP found. Most devices will not be available."); + } + + kstd::println("[x86_64:DEV] Initializing ISA bus..."); auto isa_major_number = kapi::devices::allocate_major_number(); auto isa_bus = kstd::make_unique<arch::bus::isa>(isa_major_number); |
