aboutsummaryrefslogtreecommitdiff
path: root/kernel/src
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 /kernel/src
parent5a6b6ab376e67b173ef36f831445ccba7e86e038 (diff)
downloadteachos-c3f7b747f02a79b34ed914c54ce74be973b17af1.tar.xz
teachos-c3f7b747f02a79b34ed914c54ce74be973b17af1.zip
kapi: extract ACPI functionality to libs
Diffstat (limited to 'kernel/src')
-rw-r--r--kernel/src/acpi/manager.cpp29
1 files changed, 14 insertions, 15 deletions
diff --git a/kernel/src/acpi/manager.cpp b/kernel/src/acpi/manager.cpp
index 300b85e..501ce92 100644
--- a/kernel/src/acpi/manager.cpp
+++ b/kernel/src/acpi/manager.cpp
@@ -1,12 +1,13 @@
#include "kernel/acpi/manager.hpp"
-#include "kapi/acpi.hpp"
#include "kapi/memory.hpp"
#include "kapi/system.hpp"
#include <kstd/memory>
#include <kstd/print>
+#include <acpi/acpi.hpp>
+
#include <cstddef>
#include <cstdint>
#include <string_view>
@@ -14,7 +15,7 @@
namespace kernel::acpi
{
- manager::manager(kapi::acpi::root_system_description_pointer const & sdp)
+ manager::manager(::acpi::rsdp const & sdp)
: m_sdp{&sdp}
{
if (m_sdp->signature() != "RSD PTR ")
@@ -24,14 +25,14 @@ namespace kernel::acpi
if (m_sdp->revision() >= 2)
{
- auto const xsdp = static_cast<kapi::acpi::extended_system_description_pointer const *>(m_sdp);
+ auto const xsdp = static_cast<::acpi::xsdp const *>(m_sdp);
if (!xsdp->validate())
{
kapi::system::panic("[OS:ACPI] Invalid XSDP signature!");
}
- auto physical_extended_table_address = xsdp->table_address();
+ auto physical_extended_table_address = kapi::memory::physical_address{xsdp->table_address()};
auto linear_extended_table_address = kapi::memory::hhdm_to_linear(physical_extended_table_address);
- m_rsdt = static_cast<kapi::acpi::system_description_table_header const *>(linear_extended_table_address);
+ m_rsdt = static_cast<::acpi::sdt const *>(linear_extended_table_address);
m_extended = true;
}
else
@@ -40,23 +41,22 @@ namespace kernel::acpi
{
kapi::system::panic("[OS:ACPI] Invalid RSDP checksum!");
}
- auto physical_root_table_address = m_sdp->table_address();
+ auto physical_root_table_address = kapi::memory::physical_address{m_sdp->table_address()};
auto linear_root_table_address = kapi::memory::hhdm_to_linear(physical_root_table_address);
- m_rsdt = static_cast<kapi::acpi::system_description_table_header const *>(linear_root_table_address);
+ m_rsdt = static_cast<::acpi::sdt const *>(linear_root_table_address);
}
}
auto manager::load_tables() -> bool
{
- if (!kapi::acpi::validate_checksum({reinterpret_cast<std::byte const *>(m_rsdt), m_rsdt->length().value}))
+ if (!::acpi::validate_checksum({reinterpret_cast<std::byte const *>(m_rsdt), m_rsdt->length().value}))
{
kapi::system::panic("[OS:ACPI] Invalid RSDT checksum!");
}
auto entry_size = m_extended ? sizeof(std::uint64_t) : sizeof(std::uint32_t);
- auto entry_count = (m_rsdt->length().value - sizeof(kapi::acpi::system_description_table_header)) / entry_size;
- auto entries_base =
- reinterpret_cast<std::byte const *>(m_rsdt) + sizeof(kapi::acpi::system_description_table_header);
+ auto entry_count = (m_rsdt->length().value - sizeof(::acpi::sdt)) / entry_size;
+ auto entries_base = reinterpret_cast<std::byte const *>(m_rsdt) + sizeof(::acpi::sdt);
for (std::size_t i = 0; i < entry_count; ++i)
{
@@ -74,9 +74,9 @@ namespace kernel::acpi
}
auto linear_table_address = kapi::memory::hhdm_to_linear(physical_table_address);
- auto table = static_cast<kapi::acpi::system_description_table_header const *>(linear_table_address);
+ auto table = static_cast<::acpi::sdt const *>(linear_table_address);
- if (!kapi::acpi::validate_checksum({reinterpret_cast<std::byte const *>(table), table->length().value}))
+ if (!::acpi::validate_checksum({reinterpret_cast<std::byte const *>(table), table->length().value}))
{
kstd::println(kstd::print_sink::stderr, "[OS:ACPI] Invalid table checksum!");
}
@@ -90,8 +90,7 @@ namespace kernel::acpi
return !m_tables.empty();
}
- auto manager::get_table(std::string_view signature)
- -> kstd::observer_ptr<kapi::acpi::system_description_table_header const>
+ auto manager::get_table(std::string_view signature) -> kstd::observer_ptr<::acpi::sdt const>
{
if (m_tables.contains(signature))
{