diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2026-04-08 14:30:53 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2026-04-08 14:30:53 +0200 |
| commit | 296742bfa509524dc8effc3dcae4b6231d37705f (patch) | |
| tree | ac13673da24d78797638fa57a2676ef70a405e23 | |
| parent | ce47b93e8834bb4811e788737ae1a6ea750af79c (diff) | |
| download | teachos-296742bfa509524dc8effc3dcae4b6231d37705f.tar.xz teachos-296742bfa509524dc8effc3dcae4b6231d37705f.zip | |
x86_64: don't hardcode the LAPIC address
| -rw-r--r-- | arch/x86_64/kapi/platform.cpp | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/arch/x86_64/kapi/platform.cpp b/arch/x86_64/kapi/platform.cpp index 380fc66..c6e41d2 100644 --- a/arch/x86_64/kapi/platform.cpp +++ b/arch/x86_64/kapi/platform.cpp @@ -2,7 +2,6 @@ #include "kapi/acpi.hpp" #include "kapi/devices.hpp" -#include "kapi/memory.hpp" #include "arch/devices/local_apic.hpp" @@ -15,11 +14,6 @@ namespace kapi::platform { - namespace - { - constexpr auto default_lapic_address = kapi::memory::physical_address{0xFEE0'0000}; - } - auto discover_cpu_topology(kapi::devices::bus & bus) -> bool { auto static const core_major = kapi::devices::allocate_major_number(); @@ -33,8 +27,9 @@ namespace kapi::platform return false; } - auto const * current = reinterpret_cast<std::byte const *>(madt.get()) + sizeof(kapi::acpi::madt_header); - auto const * end = reinterpret_cast<std::byte const *>(madt.get()) + madt->length(); + auto real_madt = static_cast<acpi::madt_header const *>(madt.get()); + auto current = reinterpret_cast<std::byte const *>(madt.get()) + sizeof(kapi::acpi::madt_header); + auto end = reinterpret_cast<std::byte const *>(madt.get()) + madt->length(); auto bsp_found = false; auto core_count = 0uz; @@ -49,9 +44,9 @@ namespace kapi::platform { auto is_bsp = !bsp_found; bsp_found = true; - auto lapic = kstd::make_unique<arch::devices::local_apic>(interrupt_controller_major, core_index, - local_apic->apic_id(), default_lapic_address); + local_apic->apic_id(), + real_madt->local_interrupt_controller_address()); if (kapi::platform::cpu_detected(bus, core_major, core_index, local_apic->processor_id(), is_bsp, std::move(lapic))) { @@ -68,4 +63,4 @@ namespace kapi::platform return core_count > 0; } -} // namespace kapi::platform
\ No newline at end of file +} // namespace kapi::platform |
