From 35149b69601f8d51729abd3d35f81cf1dda629a2 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Tue, 1 Apr 2025 22:49:35 +0300 Subject: [PATCH] Kernel: Add helper functions to create AML String and Buffer --- kernel/include/kernel/ACPI/AML/Node.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/kernel/include/kernel/ACPI/AML/Node.h b/kernel/include/kernel/ACPI/AML/Node.h index c795eef2..b28e4ea7 100644 --- a/kernel/include/kernel/ACPI/AML/Node.h +++ b/kernel/include/kernel/ACPI/AML/Node.h @@ -150,6 +150,27 @@ namespace Kernel::ACPI::AML Node(Node&& other) { *this = BAN::move(other); } Node& operator=(Node&&); + static BAN::ErrorOr create_string(BAN::StringView string) + { + const auto* u8_data = reinterpret_cast(string.data()); + auto result = TRY(create_buffer({ u8_data, string.size() })); + result.type = Node::Type::String; + return result; + } + + static BAN::ErrorOr create_buffer(BAN::ConstByteSpan buffer) + { + Node node; + node.type = Node::Type::Buffer; + node.as.str_buf = static_cast(kmalloc(sizeof(Buffer) + buffer.size())); + if (node.as.str_buf == nullptr) + return BAN::Error::from_errno(ENOMEM); + node.as.str_buf->ref_count = 1; + node.as.str_buf->size = buffer.size(); + memcpy(node.as.str_buf->bytes, buffer.data(), buffer.size()); + return node; + } + enum class Type { Uninitialized,