Kernel: Move ACPISysFSDirectory to a separate file

This commit is contained in:
Undefine authored and Sönke Holz committed 2026-10-21 19:03:12 +02:00
1 parent f23528bf56
commit efa976647d
6 files changed
+82 -53

No files matched your search

+1
View File
@@ -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
@@ -7,7 +7,8 @@
#include <AK/Platform.h>
#include <Kernel/FileSystem/SysFS/Registry.h>
#include <Kernel/FileSystem/SysFS/Subsystems/Firmware/Directory.h>
#include <Kernel/Firmware/ACPI/Parser.h>
#include <Kernel/Firmware/ACPI/Initialize.h>
#include <Kernel/Firmware/ACPI/SysFSDirectory.h>
#include <Kernel/Firmware/SMBIOS/SysFSDirectory.h>
#include <Kernel/Sections.h>
-41
View File
@@ -88,47 +88,6 @@ UNMAP_AFTER_INIT ACPISysFSComponent::ACPISysFSComponent(NonnullOwnPtr<KString> 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<void> {
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<void> {
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> 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<void(StringView, PhysicalAddress, size_t)> callback)
{
for (auto& p_table : m_sdt_pointers) {
-11
View File
@@ -9,7 +9,6 @@
#include <AK/Types.h>
#include <Kernel/Boot/CommandLine.h>
#include <Kernel/FileSystem/SysFS/Component.h>
#include <Kernel/FileSystem/SysFS/Subsystems/Firmware/Directory.h>
#include <Kernel/Firmware/ACPI/Initialize.h>
#include <Kernel/Interrupts/IRQHandler.h>
#include <Kernel/Library/LockRefPtr.h>
@@ -21,16 +20,6 @@
namespace Kernel::ACPI {
class ACPISysFSDirectory : public SysFSDirectory {
public:
virtual StringView name() const override { return "acpi"sv; }
static NonnullLockRefPtr<ACPISysFSDirectory> 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<ACPISysFSComponent> create(StringView name, PhysicalAddress, size_t table_size);
+55
View File
@@ -0,0 +1,55 @@
/*
* Copyright (c) 2020-2021, Liav A. <[email protected]>
* Copyright (c) 2020-2021, Andreas Kling <[email protected]>
* 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<void> {
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<void> {
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> 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)
{
}
}
+24
View File
@@ -0,0 +1,24 @@
/*
* Copyright (c) 2020-2021, Liav A. <[email protected]>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <AK/StringView.h>
#include <Kernel/FileSystem/SysFS/Subsystems/Firmware/Directory.h>
#pragma once
namespace Kernel::ACPI {
class ACPISysFSDirectory : public SysFSDirectory {
public:
virtual StringView name() const override { return "acpi"sv; }
static NonnullLockRefPtr<ACPISysFSDirectory> must_create(SysFSFirmwareDirectory& firmware_directory);
private:
void find_tables_and_register_them_as_components();
explicit ACPISysFSDirectory(SysFSFirmwareDirectory& firmware_directory);
};
}