aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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