diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2026-04-30 18:42:08 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2026-04-30 18:42:08 +0200 |
| commit | d3e02e6d9de4751910a8c51079e9489bd15948c7 (patch) | |
| tree | 92ab4d3eac1b67bc5e61fbadc30652b00ba5f88b /kernel | |
| parent | 9fc9d3b011db40027e8c1220c535007a786d03ff (diff) | |
| download | kernel-d3e02e6d9de4751910a8c51079e9489bd15948c7.tar.xz kernel-d3e02e6d9de4751910a8c51079e9489bd15948c7.zip | |
kernel/acpi: simplify manager constructor
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/src/acpi/manager.cpp | 20 |
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 |
