aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-04-30 18:42:08 +0200
committerFelix Morgner <felix.morgner@ost.ch>2026-04-30 18:42:08 +0200
commitd3e02e6d9de4751910a8c51079e9489bd15948c7 (patch)
tree92ab4d3eac1b67bc5e61fbadc30652b00ba5f88b /kernel
parent9fc9d3b011db40027e8c1220c535007a786d03ff (diff)
downloadkernel-d3e02e6d9de4751910a8c51079e9489bd15948c7.tar.xz
kernel-d3e02e6d9de4751910a8c51079e9489bd15948c7.zip
kernel/acpi: simplify manager constructor
Diffstat (limited to 'kernel')
-rw-r--r--kernel/src/acpi/manager.cpp20
1 files changed, 9 insertions, 11 deletions
diff --git a/kernel/src/acpi/manager.cpp b/kernel/src/acpi/manager.cpp
index 99c8860..bb895fd 100644
--- a/kernel/src/acpi/manager.cpp
+++ b/kernel/src/acpi/manager.cpp
@@ -20,22 +20,19 @@ namespace kernel::acpi
manager::manager(::acpi::rsdp const & sdp)
: m_sdp{&sdp}
{
- if (m_sdp->signature() != "RSD PTR ")
+ if (!m_sdp->validate())
{
kapi::system::panic("[OS:ACPI] Invalid RSDP signature!");
}
- if (m_sdp->revision() >= 2)
+ m_extended = m_sdp->revision() >= 2;
+
+ if (m_extended)
{
- auto const xsdp = static_cast<::acpi::xsdp const *>(m_sdp);
- if (!xsdp->validate())
+ if (!static_cast<::acpi::xsdp const *>(m_sdp)->validate())
{
kapi::system::panic("[OS:ACPI] Invalid XSDP signature!");
}
- 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<::acpi::xsdt const *>(linear_extended_table_address);
- m_extended = true;
}
else
{
@@ -43,10 +40,11 @@ namespace kernel::acpi
{
kapi::system::panic("[OS:ACPI] Invalid RSDP checksum!");
}
- 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<::acpi::rsdt const *>(linear_root_table_address);
}
+
+ 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