Kernel: Implement AML ToHexStringOp
This commit is contained in:
parent
0247d47a3d
commit
30ceaa6bef
|
@ -17,8 +17,9 @@ namespace Kernel::ACPI::AML
|
||||||
|
|
||||||
switch (opcode)
|
switch (opcode)
|
||||||
{
|
{
|
||||||
case AML::Byte::ToIntegerOp:
|
|
||||||
case AML::Byte::ToBufferOp:
|
case AML::Byte::ToBufferOp:
|
||||||
|
case AML::Byte::ToHexStringOp:
|
||||||
|
case AML::Byte::ToIntegerOp:
|
||||||
case AML::Byte::ToStringOp:
|
case AML::Byte::ToStringOp:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -28,7 +29,7 @@ namespace Kernel::ACPI::AML
|
||||||
auto data_result = AML::parse_object(context);
|
auto data_result = AML::parse_object(context);
|
||||||
if (!data_result.success())
|
if (!data_result.success())
|
||||||
return ParseResult::Failure;
|
return ParseResult::Failure;
|
||||||
auto data_node = data_result.node();
|
auto data_node = data_result.node() ? data_result.node()->to_underlying() : BAN::RefPtr<AML::Node>();
|
||||||
if (!data_node)
|
if (!data_node)
|
||||||
{
|
{
|
||||||
AML_ERROR("Conversion {2H} data could not be evaluated", static_cast<uint8_t>(opcode));
|
AML_ERROR("Conversion {2H} data could not be evaluated", static_cast<uint8_t>(opcode));
|
||||||
|
@ -69,6 +70,37 @@ namespace Kernel::ACPI::AML
|
||||||
case AML::Byte::ToStringOp:
|
case AML::Byte::ToStringOp:
|
||||||
converted = data_node->convert(AML::Node::ConvString);
|
converted = data_node->convert(AML::Node::ConvString);
|
||||||
break;
|
break;
|
||||||
|
case AML::Byte::ToHexStringOp:
|
||||||
|
{
|
||||||
|
switch (data_node->type)
|
||||||
|
{
|
||||||
|
case AML::Node::Type::Integer:
|
||||||
|
converted = MUST(BAN::RefPtr<AML::String>::create(
|
||||||
|
MUST(BAN::String::formatted("0x{H}", static_cast<AML::Integer*>(data_node.ptr())->value))
|
||||||
|
));
|
||||||
|
break;
|
||||||
|
case AML::Node::Type::String:
|
||||||
|
converted = data_node->copy();
|
||||||
|
break;
|
||||||
|
case AML::Node::Type::Buffer:
|
||||||
|
{
|
||||||
|
const auto& buffer = static_cast<AML::Buffer*>(data_node.ptr())->buffer;
|
||||||
|
|
||||||
|
BAN::String temp;
|
||||||
|
for (size_t i = 0; i < buffer.size(); i++)
|
||||||
|
{
|
||||||
|
const char* format = (i == 0) ? "0x{H}" : ", 0x{H}";
|
||||||
|
MUST(temp.append(MUST(BAN::String::formatted(format, buffer[i]))));
|
||||||
|
}
|
||||||
|
|
||||||
|
converted = MUST(BAN::RefPtr<AML::String>::create(temp));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
ASSERT_NOT_REACHED();
|
ASSERT_NOT_REACHED();
|
||||||
}
|
}
|
||||||
|
|
|
@ -152,6 +152,7 @@ namespace Kernel::ACPI
|
||||||
case AML::Byte::XorOp:
|
case AML::Byte::XorOp:
|
||||||
return AML::Expression::parse(context);
|
return AML::Expression::parse(context);
|
||||||
case AML::Byte::ToBufferOp:
|
case AML::Byte::ToBufferOp:
|
||||||
|
case AML::Byte::ToHexStringOp:
|
||||||
case AML::Byte::ToIntegerOp:
|
case AML::Byte::ToIntegerOp:
|
||||||
case AML::Byte::ToStringOp:
|
case AML::Byte::ToStringOp:
|
||||||
return AML::Conversion::parse(context);
|
return AML::Conversion::parse(context);
|
||||||
|
|
Loading…
Reference in New Issue