aboutsummaryrefslogtreecommitdiff
path: root/kernel/kapi/acpi.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/kapi/acpi.cpp')
-rw-r--r--kernel/kapi/acpi.cpp43
1 files changed, 42 insertions, 1 deletions
diff --git a/kernel/kapi/acpi.cpp b/kernel/kapi/acpi.cpp
index 998d7a0..1283d7e 100644
--- a/kernel/kapi/acpi.cpp
+++ b/kernel/kapi/acpi.cpp
@@ -5,6 +5,7 @@
#include "kernel/acpi/manager.hpp"
+#include <kstd/memory>
#include <kstd/units>
#include <algorithm>
@@ -110,12 +111,47 @@ namespace kapi::acpi
return {m_signature.data(), m_signature.size()};
}
+ [[nodiscard]] auto madt_header::local_interrupt_controller_address() const noexcept -> memory::physical_address
+ {
+ return memory::physical_address{static_cast<std::uintptr_t>(m_local_interrupt_controller_address)};
+ }
+
+ [[nodiscard]] auto madt_header::flags() const noexcept -> std::uint32_t
+ {
+ return m_flags;
+ }
+
+ [[nodiscard]] auto madt_subtable_header::type() const noexcept -> std::uint8_t
+ {
+ return m_type;
+ }
+
+ [[nodiscard]] auto madt_subtable_header::length() const noexcept -> std::size_t
+ {
+ return m_length;
+ }
+
+ [[nodiscard]] auto madt_local_apic::apic_id() const noexcept -> std::uint8_t
+ {
+ return m_apic_id;
+ }
+
+ [[nodiscard]] auto madt_local_apic::flags() const noexcept -> std::uint32_t
+ {
+ return m_flags;
+ }
+
+ [[nodiscard]] auto madt_local_apic::processor_id() const noexcept -> std::uint32_t
+ {
+ return m_processor_id;
+ }
+
auto init(root_system_description_pointer const & sdp) -> bool
{
auto static constinit initialized = std::atomic_flag{};
if (initialized.test_and_set())
{
- system::panic("[OS::ACPI] The ACPI manager has already been initialized!");
+ system::panic("[OS:ACPI] The ACPI manager has already been initialized!");
}
manager.emplace(sdp);
@@ -130,4 +166,9 @@ namespace kapi::acpi
return sum == 0;
}
+ auto get_table(std::string_view signature) -> kstd::observer_ptr<system_description_table_header const>
+ {
+ return manager->get_table(signature);
+ }
+
}; // namespace kapi::acpi