From efa976647d0e0414d93671880de6552f88487c48 Mon Sep 17 00:00:00 2001 From: Undefine Date: Tue, 20 Oct 2026 22:12:15 +0200 Subject: [PATCH] Kernel: Move ACPISysFSDirectory to a separate file --- Kernel/CMakeLists.txt | 1 + .../SysFS/Subsystems/Firmware/Directory.cpp | 3 +- Kernel/Firmware/ACPI/Parser.cpp | 41 -------------- Kernel/Firmware/ACPI/Parser.h | 11 ---- Kernel/Firmware/ACPI/SysFSDirectory.cpp | 55 +++++++++++++++++++ Kernel/Firmware/ACPI/SysFSDirectory.h | 24 ++++++++ 6 files changed, 82 insertions(+), 53 deletions(-) create mode 100644 Kernel/Firmware/ACPI/SysFSDirectory.cpp create mode 100644 Kernel/Firmware/ACPI/SysFSDirectory.h diff --git a/Kernel/CMakeLists.txt b/Kernel/CMakeLists.txt index 9cf7aabd3ca..cc582991df8 100644 --- a/Kernel/CMakeLists.txt +++ b/Kernel/CMakeLists.txt @@ -240,6 +240,7 @@ set(KERNEL_SOURCES FileSystem/VirtualFileSystem.cpp Firmware/ACPI/Initialize.cpp Firmware/ACPI/Parser.cpp + Firmware/ACPI/SysFSDirectory.cpp Firmware/DeviceTree/Device.cpp Firmware/DeviceTree/DeviceTree.cpp Firmware/DeviceTree/Management.cpp diff --git a/Kernel/FileSystem/SysFS/Subsystems/Firmware/Directory.cpp b/Kernel/FileSystem/SysFS/Subsystems/Firmware/Directory.cpp index cc294c25816..3ceec2283ba 100644 --- a/Kernel/FileSystem/SysFS/Subsystems/Firmware/Directory.cpp +++ b/Kernel/FileSystem/SysFS/Subsystems/Firmware/Directory.cpp @@ -7,7 +7,8 @@ #include #include #include -#include +#include +#include #include #include diff --git a/Kernel/Firmware/ACPI/Parser.cpp b/Kernel/Firmware/ACPI/Parser.cpp index 5262019204d..0d7a51b3ed5 100644 --- a/Kernel/Firmware/ACPI/Parser.cpp +++ b/Kernel/Firmware/ACPI/Parser.cpp @@ -88,47 +88,6 @@ UNMAP_AFTER_INIT ACPISysFSComponent::ACPISysFSComponent(NonnullOwnPtr t { } -UNMAP_AFTER_INIT void ACPISysFSDirectory::find_tables_and_register_them_as_components() -{ - size_t ssdt_count = 0; - MUST(m_child_components.with([&](auto& list) -> ErrorOr { - ACPI::Parser::the()->enumerate_static_tables([&](StringView signature, PhysicalAddress p_table, size_t length) { - if (signature == "SSDT") { - auto component_name = KString::formatted("{:4s}{}", signature, ssdt_count).release_value_but_fixme_should_propagate_errors(); - list.append(ACPISysFSComponent::create(component_name->view(), p_table, length)); - ssdt_count++; - return; - } - list.append(ACPISysFSComponent::create(signature, p_table, length)); - }); - return {}; - })); - - MUST(m_child_components.with([&](auto& list) -> ErrorOr { - auto rsdp = Memory::map_typed<::ACPI::Structures::RSDPDescriptor20>(ACPI::Parser::the()->rsdp()).release_value_but_fixme_should_propagate_errors(); - list.append(ACPISysFSComponent::create("RSDP"sv, ACPI::Parser::the()->rsdp(), rsdp->base.revision == 0 ? sizeof(::ACPI::Structures::RSDPDescriptor) : rsdp->length)); - auto main_system_description_table = Memory::map_typed<::ACPI::Structures::SDTHeader>(ACPI::Parser::the()->main_system_description_table()).release_value_but_fixme_should_propagate_errors(); - if (ACPI::Parser::the()->is_xsdt_supported()) { - list.append(ACPISysFSComponent::create("XSDT"sv, ACPI::Parser::the()->main_system_description_table(), main_system_description_table->length)); - } else { - list.append(ACPISysFSComponent::create("RSDT"sv, ACPI::Parser::the()->main_system_description_table(), main_system_description_table->length)); - } - return {}; - })); -} - -UNMAP_AFTER_INIT NonnullLockRefPtr ACPISysFSDirectory::must_create(SysFSFirmwareDirectory& firmware_directory) -{ - auto acpi_directory = MUST(adopt_nonnull_lock_ref_or_enomem(new (nothrow) ACPISysFSDirectory(firmware_directory))); - acpi_directory->find_tables_and_register_them_as_components(); - return acpi_directory; -} - -UNMAP_AFTER_INIT ACPISysFSDirectory::ACPISysFSDirectory(SysFSFirmwareDirectory& firmware_directory) - : SysFSDirectory(firmware_directory) -{ -} - void Parser::enumerate_static_tables(Function callback) { for (auto& p_table : m_sdt_pointers) { diff --git a/Kernel/Firmware/ACPI/Parser.h b/Kernel/Firmware/ACPI/Parser.h index 94094c1c0e6..0c7ba4e6919 100644 --- a/Kernel/Firmware/ACPI/Parser.h +++ b/Kernel/Firmware/ACPI/Parser.h @@ -9,7 +9,6 @@ #include #include #include -#include #include #include #include @@ -21,16 +20,6 @@ namespace Kernel::ACPI { -class ACPISysFSDirectory : public SysFSDirectory { -public: - virtual StringView name() const override { return "acpi"sv; } - static NonnullLockRefPtr must_create(SysFSFirmwareDirectory& firmware_directory); - -private: - void find_tables_and_register_them_as_components(); - explicit ACPISysFSDirectory(SysFSFirmwareDirectory& firmware_directory); -}; - class ACPISysFSComponent : public SysFSComponent { public: static NonnullLockRefPtr create(StringView name, PhysicalAddress, size_t table_size); diff --git a/Kernel/Firmware/ACPI/SysFSDirectory.cpp b/Kernel/Firmware/ACPI/SysFSDirectory.cpp new file mode 100644 index 00000000000..7c86a155730 --- /dev/null +++ b/Kernel/Firmware/ACPI/SysFSDirectory.cpp @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2020-2021, Liav A. + * Copyright (c) 2020-2021, Andreas Kling + * Copyright (c) 2022, the SerenityOS developers. + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include "SysFSDirectory.h" +#include "Parser.h" + +namespace Kernel::ACPI { + +UNMAP_AFTER_INIT void ACPISysFSDirectory::find_tables_and_register_them_as_components() +{ + size_t ssdt_count = 0; + MUST(m_child_components.with([&](auto& list) -> ErrorOr { + Parser::the()->enumerate_static_tables([&](StringView signature, PhysicalAddress p_table, size_t length) { + if (signature == "SSDT") { + auto component_name = KString::formatted("{:4s}{}", signature, ssdt_count).release_value_but_fixme_should_propagate_errors(); + list.append(ACPISysFSComponent::create(component_name->view(), p_table, length)); + ssdt_count++; + return; + } + list.append(ACPISysFSComponent::create(signature, p_table, length)); + }); + return {}; + })); + + MUST(m_child_components.with([&](auto& list) -> ErrorOr { + auto rsdp = Memory::map_typed<::ACPI::Structures::RSDPDescriptor20>(ACPI::Parser::the()->rsdp()).release_value_but_fixme_should_propagate_errors(); + list.append(ACPISysFSComponent::create("RSDP"sv, ACPI::Parser::the()->rsdp(), rsdp->base.revision == 0 ? sizeof(::ACPI::Structures::RSDPDescriptor) : rsdp->length)); + auto main_system_description_table = Memory::map_typed<::ACPI::Structures::SDTHeader>(ACPI::Parser::the()->main_system_description_table()).release_value_but_fixme_should_propagate_errors(); + if (ACPI::Parser::the()->is_xsdt_supported()) { + list.append(ACPISysFSComponent::create("XSDT"sv, ACPI::Parser::the()->main_system_description_table(), main_system_description_table->length)); + } else { + list.append(ACPISysFSComponent::create("RSDT"sv, ACPI::Parser::the()->main_system_description_table(), main_system_description_table->length)); + } + return {}; + })); +} + +UNMAP_AFTER_INIT NonnullLockRefPtr ACPISysFSDirectory::must_create(SysFSFirmwareDirectory& firmware_directory) +{ + auto acpi_directory = MUST(adopt_nonnull_lock_ref_or_enomem(new (nothrow) ACPISysFSDirectory(firmware_directory))); + acpi_directory->find_tables_and_register_them_as_components(); + return acpi_directory; +} + +UNMAP_AFTER_INIT ACPISysFSDirectory::ACPISysFSDirectory(SysFSFirmwareDirectory& firmware_directory) + : SysFSDirectory(firmware_directory) +{ +} + +} diff --git a/Kernel/Firmware/ACPI/SysFSDirectory.h b/Kernel/Firmware/ACPI/SysFSDirectory.h new file mode 100644 index 00000000000..438e9de3e00 --- /dev/null +++ b/Kernel/Firmware/ACPI/SysFSDirectory.h @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2020-2021, Liav A. + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include + +#pragma once + +namespace Kernel::ACPI { + +class ACPISysFSDirectory : public SysFSDirectory { +public: + virtual StringView name() const override { return "acpi"sv; } + static NonnullLockRefPtr must_create(SysFSFirmwareDirectory& firmware_directory); + +private: + void find_tables_and_register_them_as_components(); + explicit ACPISysFSDirectory(SysFSFirmwareDirectory& firmware_directory); +}; + +}