Kernel: Fix AML aliases and package elements

This commit is contained in:
2024-09-10 16:18:42 +03:00
parent 19d16620a6
commit c65613901f
10 changed files with 25 additions and 79 deletions

View File

@@ -495,25 +495,7 @@ acpi_release_global_lock:
dwarnln("\\_S5 not found");
return;
}
BAN::RefPtr<AML::Node> s5_evaluated = s5_object;
while (true)
{
bool done = false;
switch (s5_evaluated->type)
{
case AML::Node::Type::Alias:
s5_evaluated = static_cast<AML::Alias*>(s5_evaluated.ptr())->target;
break;
case AML::Node::Type::Name:
s5_evaluated = static_cast<AML::Name*>(s5_evaluated.ptr())->object;
break;
default:
done = true;
break;
}
if (done)
break;
}
auto s5_evaluated = s5_object->to_underlying();
if (!s5_evaluated)
{
dwarnln("Failed to evaluate \\_S5");

View File

@@ -159,7 +159,6 @@ namespace Kernel::ACPI
LockGuard _(m_object_mutex);
ASSERT(!object_path.path.empty());
ASSERT(object_path.path.back() == object->name);
auto canonical_path = resolve_path(parse_context.scope, object_path, FindMode::ForceAbsolute, false);
ASSERT(canonical_path.has_value());

View File

@@ -93,6 +93,8 @@ namespace Kernel::ACPI
auto result_integer = result.value()
? result.value()->convert(AML::Node::ConvInteger)
: BAN::RefPtr<AML::Node>();
if (!result_integer)
return {};
return static_cast<AML::Integer*>(result_integer.ptr());
}