aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-04-10 17:39:14 +0200
committerFelix Morgner <felix.morgner@ost.ch>2026-04-10 17:39:14 +0200
commitc3f7b747f02a79b34ed914c54ce74be973b17af1 (patch)
tree79526c34b3768562f3aa90f69a476cf504ebccc4 /arch/x86_64
parent5a6b6ab376e67b173ef36f831445ccba7e86e038 (diff)
downloadteachos-c3f7b747f02a79b34ed914c54ce74be973b17af1.tar.xz
teachos-c3f7b747f02a79b34ed914c54ce74be973b17af1.zip
kapi: extract ACPI functionality to libs
Diffstat (limited to 'arch/x86_64')
-rw-r--r--arch/x86_64/kapi/acpi.cpp10
-rw-r--r--arch/x86_64/kapi/cpu.cpp15
2 files changed, 15 insertions, 10 deletions
diff --git a/arch/x86_64/kapi/acpi.cpp b/arch/x86_64/kapi/acpi.cpp
index ec38aee..40b7160 100644
--- a/arch/x86_64/kapi/acpi.cpp
+++ b/arch/x86_64/kapi/acpi.cpp
@@ -4,24 +4,26 @@
#include <kstd/memory>
+#include <acpi/acpi.hpp>
+
namespace kapi::acpi
{
- auto get_root_pointer() -> kstd::observer_ptr<root_system_description_pointer const>
+ auto get_root_pointer() -> kstd::observer_ptr<::acpi::rsdp const>
{
auto const & mbi = kapi::boot::bootstrap_information.mbi;
- auto system_description_pointer = static_cast<kapi::acpi::root_system_description_pointer const *>(nullptr);
+ auto system_description_pointer = static_cast<::acpi::rsdp 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);
+ system_description_pointer = reinterpret_cast<::acpi::xsdp 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);
+ system_description_pointer = reinterpret_cast<::acpi::rsdp const *>(data);
}
return kstd::make_observer(system_description_pointer);
diff --git a/arch/x86_64/kapi/cpu.cpp b/arch/x86_64/kapi/cpu.cpp
index 726ec6a..a836b20 100644
--- a/arch/x86_64/kapi/cpu.cpp
+++ b/arch/x86_64/kapi/cpu.cpp
@@ -3,6 +3,7 @@
#include "kapi/acpi.hpp"
#include "kapi/devices.hpp"
#include "kapi/devices/cpu.hpp"
+#include "kapi/memory.hpp"
#include "kapi/system.hpp"
#include "arch/cpu/initialization.hpp"
@@ -11,6 +12,8 @@
#include <kstd/memory>
#include <kstd/print>
+#include <acpi/acpi.hpp>
+
#include <atomic>
#include <ranges>
#include <utility>
@@ -20,8 +23,8 @@ namespace kapi::cpu
namespace
{
- constexpr auto candidate_flags = acpi::processor_local_apic::flags::processor_enabled //
- | acpi::processor_local_apic::flags::online_capable;
+ constexpr auto candidate_flags = ::acpi::processor_local_apic::flags::processor_enabled //
+ | ::acpi::processor_local_apic::flags::online_capable;
}
auto init() -> void
@@ -49,7 +52,7 @@ namespace kapi::cpu
auto static const core_major = kapi::devices::allocate_major_number();
auto static const interrupt_controller_major = kapi::devices::allocate_major_number();
- auto madt = kapi::acpi::get_table<acpi::madt_table_signature>();
+ auto madt = kapi::acpi::get_table<::acpi::madt_table_signature>();
if (!madt)
{
kstd::println("[x86_64:PLT] Failed to find ACPI APIC table");
@@ -57,16 +60,16 @@ namespace kapi::cpu
}
auto lapic_entries = *madt | std::views::filter([](auto const & entry) {
- return entry.type() == acpi::multiple_apic_description_table_entry::types::processor_local_apic;
+ return entry.type() == ::acpi::madt_entry::types::processor_local_apic;
}) | std::views::transform([](auto const & entry) {
- return static_cast<acpi::processor_local_apic const &>(entry);
+ return static_cast<::acpi::processor_local_apic const &>(entry);
}) | std::views::filter([](auto const & entry) {
return static_cast<bool>(entry.active_flags() & candidate_flags);
});
auto bsp_found = false;
auto core_count = 0uz;
- auto local_apic_address = madt->local_interrupt_controller_address();
+ auto local_apic_address = memory::physical_address{madt->local_interrupt_controller_address()};
auto cpu_bus = kstd::make_unique<devices::cpu>(cpu_major, 0);
for (auto const & apic : lapic_entries)