diff options
Diffstat (limited to 'arch/x86_64/kapi/acpi.cpp')
| -rw-r--r-- | arch/x86_64/kapi/acpi.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/arch/x86_64/kapi/acpi.cpp b/arch/x86_64/kapi/acpi.cpp new file mode 100644 index 0000000..ec38aee --- /dev/null +++ b/arch/x86_64/kapi/acpi.cpp @@ -0,0 +1,30 @@ +#include "kapi/acpi.hpp" + +#include "arch/boot/boot.hpp" + +#include <kstd/memory> + +namespace kapi::acpi +{ + + auto get_root_pointer() -> kstd::observer_ptr<root_system_description_pointer const> + { + auto const & mbi = kapi::boot::bootstrap_information.mbi; + auto system_description_pointer = static_cast<kapi::acpi::root_system_description_pointer const *>(nullptr); + + if (auto const & xsdp = mbi->maybe_acpi_xsdp()) + { + auto data = xsdp->pointer().data(); + + system_description_pointer = reinterpret_cast<kapi::acpi::root_system_description_pointer const *>(data); + } + else if (auto const & rsdp = mbi->maybe_acpi_rsdp()) + { + auto data = rsdp->pointer().data(); + system_description_pointer = reinterpret_cast<kapi::acpi::root_system_description_pointer const *>(data); + } + + return kstd::make_observer(system_description_pointer); + } + +} // namespace kapi::acpi
\ No newline at end of file |
