#include "kapi/acpi.hpp" #include "kapi/system.hpp" #include "kernel/acpi/manager.hpp" #include #include #include #include #include #include #include #include namespace kapi::acpi { namespace { auto constinit manager = std::optional{}; } // namespace 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!"); } manager.emplace(sdp); return manager->load_tables(); } auto validate_checksum(std::span data) -> bool { auto sum = std::ranges::fold_left(data, std::uint8_t{}, [](auto acc, auto byte) { return static_cast(acc + static_cast(byte)); }); return sum == 0; } auto get_table(std::string_view signature) -> kstd::observer_ptr { return manager->get_table(signature); } }; // namespace kapi::acpi