aboutsummaryrefslogtreecommitdiff
path: root/kernel/src/acpi
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-07-03 09:32:30 +0200
committerFelix Morgner <felix.morgner@ost.ch>2026-07-03 09:32:30 +0200
commit3012fa5dfe5dfed5e83baf9b40934ed8e8317627 (patch)
tree00d1c60a3d5d1cdfa55e0ff1691cd3362b6064ee /kernel/src/acpi
parent5d8a58d538515ffc57ddf82ba40ba763990a8696 (diff)
downloadkernel-3012fa5dfe5dfed5e83baf9b40934ed8e8317627.tar.xz
kernel-3012fa5dfe5dfed5e83baf9b40934ed8e8317627.zip
kernel: rearrange sources according to p1204
Diffstat (limited to 'kernel/src/acpi')
-rw-r--r--kernel/src/acpi/manager.cpp98
1 files changed, 0 insertions, 98 deletions
diff --git a/kernel/src/acpi/manager.cpp b/kernel/src/acpi/manager.cpp
deleted file mode 100644
index bb895fda..00000000
--- a/kernel/src/acpi/manager.cpp
+++ /dev/null
@@ -1,98 +0,0 @@
-#include <kernel/acpi/manager.hpp>
-
-#include <kapi/memory.hpp>
-#include <kapi/system.hpp>
-
-#include <acpi/acpi.hpp>
-
-#include <kstd/memory>
-#include <kstd/print>
-
-#include <algorithm>
-#include <cstddef>
-#include <cstdint>
-#include <ranges>
-#include <string_view>
-
-namespace kernel::acpi
-{
-
- manager::manager(::acpi::rsdp const & sdp)
- : m_sdp{&sdp}
- {
- if (!m_sdp->validate())
- {
- kapi::system::panic("[OS:ACPI] Invalid RSDP signature!");
- }
-
- m_extended = m_sdp->revision() >= 2;
-
- if (m_extended)
- {
- if (!static_cast<::acpi::xsdp const *>(m_sdp)->validate())
- {
- kapi::system::panic("[OS:ACPI] Invalid XSDP signature!");
- }
- }
- else
- {
- if (!m_sdp->validate())
- {
- kapi::system::panic("[OS:ACPI] Invalid RSDP checksum!");
- }
- }
-
- auto physical_address = kapi::memory::physical_address{m_sdp->table_address()};
- auto linear_address = kapi::memory::hhdm_to_linear(physical_address);
- m_rsdt = static_cast<::acpi::table_header const *>(linear_address);
- }
-
- auto manager::load_tables() -> bool
- {
- if (!::acpi::validate_checksum({reinterpret_cast<std::byte const *>(m_rsdt), m_rsdt->length().value}))
- {
- kapi::system::panic("[OS:ACPI] Invalid RSDT checksum!");
- }
-
- auto check_and_register_table = [&](auto table_address) -> void {
- auto physical_table_address = kapi::memory::physical_address{reinterpret_cast<std::uintptr_t>(table_address)};
- auto mapped_table = kapi::memory::hhdm_to_linear(physical_table_address);
- auto table = static_cast<::acpi::table_header const *>(mapped_table);
-
- if (!::acpi::validate_checksum({static_cast<std::byte const *>(mapped_table), table->length().value}))
- {
- kstd::println(kstd::print_sink::stderr, "[OS:ACPI] Invalid table checksum!");
- }
- else
- {
- kstd::println("[OS:ACPI] Found '{}' ACPI table", table->signature());
- m_tables.emplace(table->signature(), table);
- }
- };
-
- if (m_extended)
- {
- auto xsdt = static_cast<::acpi::xsdt const *>(m_rsdt);
- std::ranges::for_each(*xsdt | std::views::transform([](auto const & entry) { return entry.address(); }),
- check_and_register_table);
- }
- else
- {
- auto rsdt = static_cast<::acpi::rsdt const *>(m_rsdt);
- std::ranges::for_each(*rsdt | std::views::transform([](auto const & entry) { return entry.address(); }),
- check_and_register_table);
- }
-
- return !m_tables.empty();
- }
-
- auto manager::get_table(std::string_view signature) -> kstd::observer_ptr<::acpi::table_header const>
- {
- if (m_tables.contains(signature))
- {
- return kstd::make_observer(m_tables.at(signature));
- }
- return nullptr;
- }
-
-} // namespace kernel::acpi