From f671ed7e3f57d25988b289b9c1baa8d5f62462cd Mon Sep 17 00:00:00 2001 From: Bananymous Date: Tue, 25 Jun 2024 23:23:15 +0300 Subject: [PATCH] Kernel: ACPI implement integer stores to registers as copies Before storing const integer and then modifying the register it would error. --- kernel/include/kernel/ACPI/AML/Integer.h | 2 ++ kernel/include/kernel/ACPI/AML/Node.h | 2 ++ kernel/include/kernel/ACPI/AML/Register.h | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/kernel/include/kernel/ACPI/AML/Integer.h b/kernel/include/kernel/ACPI/AML/Integer.h index 5a459f82..280e17d3 100644 --- a/kernel/include/kernel/ACPI/AML/Integer.h +++ b/kernel/include/kernel/ACPI/AML/Integer.h @@ -30,6 +30,8 @@ namespace Kernel::ACPI::AML , constant(constant) {} + BAN::RefPtr copy() override { return MUST(BAN::RefPtr::create(value)); } + BAN::RefPtr evaluate() override { return this; diff --git a/kernel/include/kernel/ACPI/AML/Node.h b/kernel/include/kernel/ACPI/AML/Node.h index 55a78f31..8f0b3795 100644 --- a/kernel/include/kernel/ACPI/AML/Node.h +++ b/kernel/include/kernel/ACPI/AML/Node.h @@ -43,6 +43,8 @@ namespace Kernel::ACPI::AML virtual bool is_scope() const { return false; } + virtual BAN::RefPtr copy() { return this; } + [[nodiscard]] BAN::Optional as_integer(); [[nodiscard]] virtual BAN::RefPtr evaluate() { AML_TODO("evaluate, type {}", static_cast(type)); return nullptr; } [[nodiscard]] virtual bool store(BAN::RefPtr) { AML_TODO("store, type {}", static_cast(type)); return false; } diff --git a/kernel/include/kernel/ACPI/AML/Register.h b/kernel/include/kernel/ACPI/AML/Register.h index d2fa396c..589eccb6 100644 --- a/kernel/include/kernel/ACPI/AML/Register.h +++ b/kernel/include/kernel/ACPI/AML/Register.h @@ -32,7 +32,7 @@ namespace Kernel::ACPI::AML AML_ERROR("Failed to evaluate source for store"); return false; } - value = evaluated; + value = evaluated->copy(); return true; }