mirror of
https://github.com/SerenityOS/serenity.git
synced 2026-11-07 04:29:30 -10:00
Kernel: Move ACPISysFSDirectory to a separate file
This commit is contained in:
1 parent
f23528bf56
commit
efa976647d
6 files changed
+82
-53
No files matched your search
@@ -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>
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user