From 53b4ea3d315b78cb9d5193cb96b5ef3e5fd55195 Mon Sep 17 00:00:00 2001 From: Undefine Date: Fri, 6 Nov 2026 18:56:46 +0100 Subject: [PATCH] Kernel: Add make_generic_address_from_io_port This will be needed to deduplicate ACPI shutdown code for accessing both the new generic address field and the legacy x86 port field. --- Kernel/Firmware/ACPI/GenericAddress.cpp | 11 +++++++++++ Kernel/Firmware/ACPI/GenericAddress.h | 2 ++ 2 files changed, 13 insertions(+) diff --git a/Kernel/Firmware/ACPI/GenericAddress.cpp b/Kernel/Firmware/ACPI/GenericAddress.cpp index 4c48dbb130c..aa42ee05475 100644 --- a/Kernel/Firmware/ACPI/GenericAddress.cpp +++ b/Kernel/Firmware/ACPI/GenericAddress.cpp @@ -14,6 +14,17 @@ namespace Kernel::ACPI { +::ACPI::Structures::GenericAddressStructure make_generic_address_from_io_port(u32 io_port) +{ + return ::ACPI::Structures::GenericAddressStructure { + .address_space = ::ACPI::GenericAddressStructure::AddressSpace::SystemIO, + .bit_width = ::ACPI::GenericAddressStructure::BitWidth::Word, + .bit_offset = 0, + .access_size = ::ACPI::GenericAddressStructure::AccessSize::Word, + .address = io_port, + }; +} + static ErrorOr get_bit_width(::ACPI::Structures::GenericAddressStructure const& structure) { // NOTE: We need to do a more complicated algorithm because for legacy reasons there are, diff --git a/Kernel/Firmware/ACPI/GenericAddress.h b/Kernel/Firmware/ACPI/GenericAddress.h index 68b79f425a2..58880e49247 100644 --- a/Kernel/Firmware/ACPI/GenericAddress.h +++ b/Kernel/Firmware/ACPI/GenericAddress.h @@ -11,6 +11,8 @@ namespace Kernel::ACPI { +::ACPI::Structures::GenericAddressStructure make_generic_address_from_io_port(u32 io_port); + ErrorOr read_generic_address(::ACPI::Structures::GenericAddressStructure const& structure); ErrorOr write_generic_address(::ACPI::Structures::GenericAddressStructure const& structure, u64 value);