Kernel: Simplify AML method invocation API
This commit is contained in:
@@ -396,10 +396,7 @@ acpi_release_global_lock:
|
||||
return;
|
||||
}
|
||||
|
||||
AML::Method::Arguments args;
|
||||
args[0] = MUST(BAN::RefPtr<AML::Register>::create(MUST(BAN::RefPtr<AML::Integer>::create(5))));
|
||||
BAN::Vector<uint8_t> sync_stack;
|
||||
if (!method->evaluate(args, sync_stack).has_value())
|
||||
if (!method->invoke(MUST(BAN::RefPtr<AML::Integer>::create(5))).has_value())
|
||||
{
|
||||
dwarnln("Failed to evaluate \\_PTS");
|
||||
return;
|
||||
@@ -482,11 +479,7 @@ acpi_release_global_lock:
|
||||
dwarnln("Method \\_PIC has {} arguments, expected 1", method->arg_count);
|
||||
return BAN::Error::from_errno(EINVAL);
|
||||
}
|
||||
|
||||
AML::Method::Arguments args;
|
||||
args[0] = MUST(BAN::RefPtr<AML::Register>::create(MUST(BAN::RefPtr<AML::Integer>::create(mode))));
|
||||
BAN::Vector<uint8_t> sync_stack;
|
||||
method->evaluate(args, sync_stack);
|
||||
method->invoke(MUST(BAN::RefPtr<AML::Integer>::create(mode)));
|
||||
}
|
||||
|
||||
dprintln("Devices are initialized");
|
||||
|
||||
@@ -201,7 +201,7 @@ namespace Kernel::ACPI
|
||||
{
|
||||
auto* method = static_cast<AML::Method*>(aml_object.ptr());
|
||||
|
||||
Method::Arguments args;
|
||||
BAN::Array<BAN::RefPtr<AML::Node>, 7> args;
|
||||
for (uint8_t i = 0; i < method->arg_count; i++)
|
||||
{
|
||||
auto arg = AML::parse_object(context);
|
||||
@@ -213,7 +213,16 @@ namespace Kernel::ACPI
|
||||
args[i] = MUST(BAN::RefPtr<AML::Register>::create(arg.node()));
|
||||
}
|
||||
|
||||
auto result = method->evaluate(args, context.sync_stack);
|
||||
auto result = method->invoke_with_sync_stack(
|
||||
context.sync_stack,
|
||||
args[0],
|
||||
args[1],
|
||||
args[2],
|
||||
args[3],
|
||||
args[4],
|
||||
args[5],
|
||||
args[6]
|
||||
);
|
||||
if (!result.has_value())
|
||||
{
|
||||
AML_ERROR("Failed to evaluate {}", name_string.value());
|
||||
|
||||
@@ -78,8 +78,7 @@ namespace Kernel::ACPI
|
||||
return {};
|
||||
}
|
||||
|
||||
BAN::Vector<uint8_t> sync_stack;
|
||||
auto result = method->evaluate({}, sync_stack);
|
||||
auto result = method->invoke();
|
||||
if (!result.has_value())
|
||||
{
|
||||
AML_ERROR("Failed to evaluate method");
|
||||
@@ -125,11 +124,7 @@ namespace Kernel::ACPI
|
||||
|
||||
BAN::RefPtr<AML::Node> embedded_controller = MUST(BAN::RefPtr<AML::Integer>::create(static_cast<uint64_t>(AML::OpRegion::RegionSpace::EmbeddedController)));
|
||||
|
||||
Method::Arguments arguments;
|
||||
arguments[0] = MUST(BAN::RefPtr<AML::Register>::create(embedded_controller));
|
||||
arguments[1] = MUST(BAN::RefPtr<AML::Register>::create(AML::Integer::Constants::One));
|
||||
BAN::Vector<uint8_t> sync_stack;
|
||||
if (!method->evaluate(arguments, sync_stack).has_value())
|
||||
if (!method->invoke(embedded_controller, AML::Integer::Constants::One).has_value())
|
||||
{
|
||||
AML_ERROR("Failed to evaluate {}._REG(EmbeddedController, 1), ignoring device", scope->scope);
|
||||
return false;
|
||||
@@ -171,8 +166,7 @@ namespace Kernel::ACPI
|
||||
return false;
|
||||
}
|
||||
|
||||
BAN::Vector<uint8_t> sync_stack;
|
||||
auto result = method->evaluate({}, sync_stack);
|
||||
auto result = method->invoke();
|
||||
if (!result.has_value())
|
||||
{
|
||||
AML_ERROR("Failed to evaluate {}._INI, ignoring device", scope->scope);
|
||||
|
||||
Reference in New Issue
Block a user