diff --git a/kernel/include/kernel/ACPI/AML/Namespace.h b/kernel/include/kernel/ACPI/AML/Namespace.h index d7e46f7b..529d0c2d 100644 --- a/kernel/include/kernel/ACPI/AML/Namespace.h +++ b/kernel/include/kernel/ACPI/AML/Namespace.h @@ -44,6 +44,8 @@ namespace Kernel::ACPI::AML }; BAN::ErrorOr find_named_object(const Scope& scope, const NameString& name_string, bool force_absolute = false); + BAN::ErrorOr find_reference_scope(const Reference* reference); + BAN::ErrorOr for_each_child(const Scope&, const BAN::Function&); BAN::ErrorOr for_each_child(const Scope&, const BAN::Function&); diff --git a/kernel/kernel/ACPI/AML/Namespace.cpp b/kernel/kernel/ACPI/AML/Namespace.cpp index ba7ac74d..dfe615d8 100644 --- a/kernel/kernel/ACPI/AML/Namespace.cpp +++ b/kernel/kernel/ACPI/AML/Namespace.cpp @@ -454,6 +454,18 @@ namespace Kernel::ACPI::AML }; } + BAN::ErrorOr Namespace::find_reference_scope(const Reference* reference) + { + for (const auto& [obj_path, obj_ref] : m_named_objects) + { + if (obj_ref != reference) + continue; + return obj_path.copy(); + } + + return BAN::Error::from_errno(ENOENT); + } + BAN::ErrorOr Namespace::for_each_child(const Scope& scope, const BAN::Function& callback) { for (const auto& [obj_path, obj_ref] : m_named_objects)