diff options
-rw-r--r-- | Kernel/CMakeLists.txt | 5 | ||||
-rw-r--r-- | Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS.h | 123 | ||||
-rw-r--r-- | Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/Component.cpp | 34 | ||||
-rw-r--r-- | Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/Component.h | 27 | ||||
-rw-r--r-- | Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/Definitions.h | 46 | ||||
-rw-r--r-- | Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/EntryPointBlob.cpp | 35 | ||||
-rw-r--r-- | Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/EntryPointBlob.h | 35 | ||||
-rw-r--r-- | Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/Table.cpp | 34 | ||||
-rw-r--r-- | Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/Table.h | 34 | ||||
-rw-r--r-- | Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/Directory.cpp (renamed from Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS.cpp) | 60 | ||||
-rw-r--r-- | Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/Directory.h | 42 | ||||
-rw-r--r-- | Kernel/FileSystem/SysFS/Subsystems/Firmware/Directory.cpp | 2 |
12 files changed, 297 insertions, 180 deletions
diff --git a/Kernel/CMakeLists.txt b/Kernel/CMakeLists.txt index 54527f2c0c..2e1d010b37 100644 --- a/Kernel/CMakeLists.txt +++ b/Kernel/CMakeLists.txt @@ -148,7 +148,10 @@ set(KERNEL_SOURCES FileSystem/SysFS/Subsystems/Bus/PCI/DeviceDirectory.cpp FileSystem/SysFS/Subsystems/Bus/USB/BusDirectory.cpp FileSystem/SysFS/Subsystems/Bus/USB/DeviceInformation.cpp - FileSystem/SysFS/Subsystems/Firmware/BIOS.cpp + FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/EntryPointBlob.cpp + FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/Table.cpp + FileSystem/SysFS/Subsystems/Firmware/BIOS/Component.cpp + FileSystem/SysFS/Subsystems/Firmware/BIOS/Directory.cpp FileSystem/SysFS/Subsystems/Firmware/Directory.cpp FileSystem/SysFS/Subsystems/Firmware/PowerStateSwitch.cpp FileSystem/TmpFS.cpp diff --git a/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS.h b/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS.h deleted file mode 100644 index 1f41695dd1..0000000000 --- a/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS.h +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (c) 2020, Andreas Kling <kling@serenityos.org> - * Copyright (c) 2021, Liav A. <liavalb@hotmail.co.il> - * - * SPDX-License-Identifier: BSD-2-Clause - */ - -#pragma once - -#include <AK/RefPtr.h> -#include <AK/Types.h> -#include <AK/Vector.h> -#include <Kernel/FileSystem/SysFS.h> -#include <Kernel/FileSystem/SysFS/Subsystems/Firmware/Directory.h> -#include <Kernel/KBuffer.h> -#include <Kernel/Memory/MappedROM.h> -#include <Kernel/Memory/Region.h> -#include <Kernel/PhysicalAddress.h> -#include <Kernel/VirtualAddress.h> - -namespace Kernel::SMBIOS { - -struct [[gnu::packed]] LegacyEntryPoint32bit { - char legacy_sig[5]; - u8 checksum2; - u16 smbios_table_length; - u32 smbios_table_ptr; - u16 smbios_tables_count; - u8 smbios_bcd_revision; -}; - -struct [[gnu::packed]] EntryPoint32bit { - char sig[4]; - u8 checksum; - u8 length; - u8 major_version; - u8 minor_version; - u16 maximum_structure_size; - u8 implementation_revision; - char formatted_area[5]; - LegacyEntryPoint32bit legacy_structure; -}; - -struct [[gnu::packed]] EntryPoint64bit { - char sig[5]; - u8 checksum; - u8 length; - u8 major_version; - u8 minor_version; - u8 document_revision; - u8 revision; - u8 reserved; - u32 table_maximum_size; - u64 table_ptr; -}; -} - -namespace Kernel { - -class BIOSSysFSComponent : public SysFSComponent { -public: - virtual ErrorOr<size_t> read_bytes(off_t, size_t, UserOrKernelBuffer&, OpenFileDescription*) const override; - -protected: - virtual ErrorOr<NonnullOwnPtr<KBuffer>> try_to_generate_buffer() const = 0; - BIOSSysFSComponent(); -}; - -class DMIEntryPointExposedBlob final : public BIOSSysFSComponent { -public: - virtual StringView name() const override { return "smbios_entry_point"sv; } - static NonnullRefPtr<DMIEntryPointExposedBlob> must_create(PhysicalAddress dmi_entry_point, size_t blob_size); - -private: - DMIEntryPointExposedBlob(PhysicalAddress dmi_entry_point, size_t blob_size); - virtual ErrorOr<NonnullOwnPtr<KBuffer>> try_to_generate_buffer() const override; - - virtual size_t size() const override { return m_dmi_entry_point_length; } - - PhysicalAddress m_dmi_entry_point; - size_t const m_dmi_entry_point_length { 0 }; -}; - -class SMBIOSExposedTable final : public BIOSSysFSComponent { -public: - virtual StringView name() const override { return "DMI"sv; } - static NonnullRefPtr<SMBIOSExposedTable> must_create(PhysicalAddress, size_t blob_size); - -private: - SMBIOSExposedTable(PhysicalAddress dmi_entry_point, size_t blob_size); - virtual ErrorOr<NonnullOwnPtr<KBuffer>> try_to_generate_buffer() const override; - - virtual size_t size() const override { return m_smbios_structure_table_length; } - - PhysicalAddress m_smbios_structure_table; - size_t const m_smbios_structure_table_length { 0 }; -}; - -class BIOSSysFSDirectory : public SysFSDirectory { -public: - virtual StringView name() const override { return "bios"sv; } - static NonnullRefPtr<BIOSSysFSDirectory> must_create(FirmwareSysFSDirectory&); - - void create_components(); - -private: - explicit BIOSSysFSDirectory(FirmwareSysFSDirectory&); - - void set_dmi_64_bit_entry_initialization_values(); - void set_dmi_32_bit_entry_initialization_values(); - void initialize_dmi_exposer(); - - Optional<PhysicalAddress> find_dmi_entry64bit_point(); - Optional<PhysicalAddress> find_dmi_entry32bit_point(); - - PhysicalAddress m_dmi_entry_point; - PhysicalAddress m_smbios_structure_table; - bool m_using_64bit_dmi_entry_point { false }; - size_t m_smbios_structure_table_length { 0 }; - size_t m_dmi_entry_point_length { 0 }; -}; - -} diff --git a/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/Component.cpp b/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/Component.cpp new file mode 100644 index 0000000000..846aa61d4f --- /dev/null +++ b/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/Component.cpp @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2022, Liav A. <liavalb@hotmail.co.il> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include <AK/StringView.h> +#include <Kernel/FileSystem/OpenFileDescription.h> +#include <Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/Component.h> +#include <Kernel/Firmware/BIOS.h> +#include <Kernel/KBufferBuilder.h> +#include <Kernel/Memory/MemoryManager.h> +#include <Kernel/Memory/TypedMapping.h> +#include <Kernel/Sections.h> + +namespace Kernel { + +UNMAP_AFTER_INIT BIOSSysFSComponent::BIOSSysFSComponent() +{ +} + +ErrorOr<size_t> BIOSSysFSComponent::read_bytes(off_t offset, size_t count, UserOrKernelBuffer& buffer, OpenFileDescription*) const +{ + auto blob = TRY(try_to_generate_buffer()); + + if ((size_t)offset >= blob->size()) + return 0; + + ssize_t nread = min(static_cast<off_t>(blob->size() - offset), static_cast<off_t>(count)); + TRY(buffer.write(blob->data() + offset, nread)); + return nread; +} + +} diff --git a/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/Component.h b/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/Component.h new file mode 100644 index 0000000000..f626812b7d --- /dev/null +++ b/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/Component.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2022, Liav A. <liavalb@hotmail.co.il> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include <AK/RefPtr.h> +#include <AK/Types.h> +#include <AK/Vector.h> +#include <Kernel/FileSystem/SysFS/Subsystems/Firmware/Directory.h> +#include <Kernel/KBuffer.h> +#include <Kernel/PhysicalAddress.h> + +namespace Kernel { + +class BIOSSysFSComponent : public SysFSComponent { +public: + virtual ErrorOr<size_t> read_bytes(off_t, size_t, UserOrKernelBuffer&, OpenFileDescription*) const override; + +protected: + virtual ErrorOr<NonnullOwnPtr<KBuffer>> try_to_generate_buffer() const = 0; + BIOSSysFSComponent(); +}; + +} diff --git a/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/Definitions.h b/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/Definitions.h new file mode 100644 index 0000000000..5f575aa2ff --- /dev/null +++ b/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/Definitions.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2022, Liav A. <liavalb@hotmail.co.il> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include <AK/Types.h> + +namespace Kernel::SMBIOS { + +struct [[gnu::packed]] LegacyEntryPoint32bit { + char legacy_sig[5]; + u8 checksum2; + u16 smbios_table_length; + u32 smbios_table_ptr; + u16 smbios_tables_count; + u8 smbios_bcd_revision; +}; + +struct [[gnu::packed]] EntryPoint32bit { + char sig[4]; + u8 checksum; + u8 length; + u8 major_version; + u8 minor_version; + u16 maximum_structure_size; + u8 implementation_revision; + char formatted_area[5]; + LegacyEntryPoint32bit legacy_structure; +}; + +struct [[gnu::packed]] EntryPoint64bit { + char sig[5]; + u8 checksum; + u8 length; + u8 major_version; + u8 minor_version; + u8 document_revision; + u8 revision; + u8 reserved; + u32 table_maximum_size; + u64 table_ptr; +}; +} diff --git a/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/EntryPointBlob.cpp b/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/EntryPointBlob.cpp new file mode 100644 index 0000000000..41fe227130 --- /dev/null +++ b/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/EntryPointBlob.cpp @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2022, Liav A. <liavalb@hotmail.co.il> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include <AK/StringView.h> +#include <Kernel/FileSystem/OpenFileDescription.h> +#include <Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/EntryPointBlob.h> +#include <Kernel/KBufferBuilder.h> +#include <Kernel/Memory/MemoryManager.h> +#include <Kernel/Memory/TypedMapping.h> +#include <Kernel/Sections.h> + +namespace Kernel { + +UNMAP_AFTER_INIT NonnullRefPtr<DMIEntryPointExposedBlob> DMIEntryPointExposedBlob::must_create(PhysicalAddress dmi_entry_point, size_t blob_size) +{ + return adopt_ref(*new (nothrow) DMIEntryPointExposedBlob(dmi_entry_point, blob_size)); +} + +UNMAP_AFTER_INIT DMIEntryPointExposedBlob::DMIEntryPointExposedBlob(PhysicalAddress dmi_entry_point, size_t blob_size) + : BIOSSysFSComponent() + , m_dmi_entry_point(dmi_entry_point) + , m_dmi_entry_point_length(blob_size) +{ +} + +ErrorOr<NonnullOwnPtr<KBuffer>> DMIEntryPointExposedBlob::try_to_generate_buffer() const +{ + auto dmi_blob = TRY(Memory::map_typed<u8>((m_dmi_entry_point), m_dmi_entry_point_length)); + return KBuffer::try_create_with_bytes(Span<u8> { dmi_blob.ptr(), m_dmi_entry_point_length }); +} + +} diff --git a/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/EntryPointBlob.h b/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/EntryPointBlob.h new file mode 100644 index 0000000000..acbe8d87ce --- /dev/null +++ b/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/EntryPointBlob.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2022, Liav A. <liavalb@hotmail.co.il> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include <AK/RefPtr.h> +#include <AK/Types.h> +#include <AK/Vector.h> +#include <Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/Component.h> +#include <Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/Definitions.h> +#include <Kernel/KBuffer.h> +#include <Kernel/Memory/Region.h> +#include <Kernel/PhysicalAddress.h> + +namespace Kernel { + +class DMIEntryPointExposedBlob final : public BIOSSysFSComponent { +public: + virtual StringView name() const override { return "smbios_entry_point"sv; } + static NonnullRefPtr<DMIEntryPointExposedBlob> must_create(PhysicalAddress dmi_entry_point, size_t blob_size); + +private: + DMIEntryPointExposedBlob(PhysicalAddress dmi_entry_point, size_t blob_size); + virtual ErrorOr<NonnullOwnPtr<KBuffer>> try_to_generate_buffer() const override; + + virtual size_t size() const override { return m_dmi_entry_point_length; } + + PhysicalAddress m_dmi_entry_point; + size_t const m_dmi_entry_point_length { 0 }; +}; + +} diff --git a/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/Table.cpp b/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/Table.cpp new file mode 100644 index 0000000000..75b270017a --- /dev/null +++ b/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/Table.cpp @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2022, Liav A. <liavalb@hotmail.co.il> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include <AK/StringView.h> +#include <Kernel/FileSystem/OpenFileDescription.h> +#include <Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/Table.h> +#include <Kernel/KBufferBuilder.h> +#include <Kernel/Memory/TypedMapping.h> +#include <Kernel/Sections.h> + +namespace Kernel { + +UNMAP_AFTER_INIT NonnullRefPtr<SMBIOSExposedTable> SMBIOSExposedTable::must_create(PhysicalAddress smbios_structure_table, size_t smbios_structure_table_length) +{ + return adopt_ref(*new (nothrow) SMBIOSExposedTable(smbios_structure_table, smbios_structure_table_length)); +} + +UNMAP_AFTER_INIT SMBIOSExposedTable::SMBIOSExposedTable(PhysicalAddress smbios_structure_table, size_t smbios_structure_table_length) + : BIOSSysFSComponent() + , m_smbios_structure_table(smbios_structure_table) + , m_smbios_structure_table_length(smbios_structure_table_length) +{ +} + +ErrorOr<NonnullOwnPtr<KBuffer>> SMBIOSExposedTable::try_to_generate_buffer() const +{ + auto dmi_blob = TRY(Memory::map_typed<u8>((m_smbios_structure_table), m_smbios_structure_table_length)); + return KBuffer::try_create_with_bytes(Span<u8> { dmi_blob.ptr(), m_smbios_structure_table_length }); +} + +} diff --git a/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/Table.h b/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/Table.h new file mode 100644 index 0000000000..b7a252b0e2 --- /dev/null +++ b/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/Table.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2022, Liav A. <liavalb@hotmail.co.il> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include <AK/RefPtr.h> +#include <AK/Types.h> +#include <AK/Vector.h> +#include <Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/Component.h> +#include <Kernel/KBuffer.h> +#include <Kernel/Memory/Region.h> +#include <Kernel/PhysicalAddress.h> + +namespace Kernel { + +class SMBIOSExposedTable final : public BIOSSysFSComponent { +public: + virtual StringView name() const override { return "DMI"sv; } + static NonnullRefPtr<SMBIOSExposedTable> must_create(PhysicalAddress, size_t blob_size); + +private: + SMBIOSExposedTable(PhysicalAddress dmi_entry_point, size_t blob_size); + virtual ErrorOr<NonnullOwnPtr<KBuffer>> try_to_generate_buffer() const override; + + virtual size_t size() const override { return m_smbios_structure_table_length; } + + PhysicalAddress m_smbios_structure_table; + size_t const m_smbios_structure_table_length { 0 }; +}; + +} diff --git a/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS.cpp b/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/Directory.cpp index 0eea9ac40c..107cd1c6a8 100644 --- a/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS.cpp +++ b/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/Directory.cpp @@ -1,13 +1,15 @@ /* - * Copyright (c) 2020, Andreas Kling <kling@serenityos.org> - * Copyright (c) 2021, Liav A. <liavalb@hotmail.co.il> + * Copyright (c) 2022, Liav A. <liavalb@hotmail.co.il> * * SPDX-License-Identifier: BSD-2-Clause */ #include <AK/StringView.h> #include <Kernel/FileSystem/OpenFileDescription.h> -#include <Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS.h> +#include <Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/Definitions.h> +#include <Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/EntryPointBlob.h> +#include <Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/Table.h> +#include <Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/Directory.h> #include <Kernel/Firmware/BIOS.h> #include <Kernel/KBufferBuilder.h> #include <Kernel/Memory/MemoryManager.h> @@ -20,58 +22,6 @@ namespace Kernel { #define SMBIOS_END_SEARCH_ADDR 0xfffff #define SMBIOS_SEARCH_AREA_SIZE (SMBIOS_END_SEARCH_ADDR - SMBIOS_BASE_SEARCH_ADDR) -UNMAP_AFTER_INIT NonnullRefPtr<DMIEntryPointExposedBlob> DMIEntryPointExposedBlob::must_create(PhysicalAddress dmi_entry_point, size_t blob_size) -{ - return adopt_ref(*new (nothrow) DMIEntryPointExposedBlob(dmi_entry_point, blob_size)); -} - -UNMAP_AFTER_INIT BIOSSysFSComponent::BIOSSysFSComponent() -{ -} - -ErrorOr<size_t> BIOSSysFSComponent::read_bytes(off_t offset, size_t count, UserOrKernelBuffer& buffer, OpenFileDescription*) const -{ - auto blob = TRY(try_to_generate_buffer()); - - if ((size_t)offset >= blob->size()) - return 0; - - ssize_t nread = min(static_cast<off_t>(blob->size() - offset), static_cast<off_t>(count)); - TRY(buffer.write(blob->data() + offset, nread)); - return nread; -} - -UNMAP_AFTER_INIT DMIEntryPointExposedBlob::DMIEntryPointExposedBlob(PhysicalAddress dmi_entry_point, size_t blob_size) - : BIOSSysFSComponent() - , m_dmi_entry_point(dmi_entry_point) - , m_dmi_entry_point_length(blob_size) -{ -} - -ErrorOr<NonnullOwnPtr<KBuffer>> DMIEntryPointExposedBlob::try_to_generate_buffer() const -{ - auto dmi_blob = TRY(Memory::map_typed<u8>((m_dmi_entry_point), m_dmi_entry_point_length)); - return KBuffer::try_create_with_bytes(Span<u8> { dmi_blob.ptr(), m_dmi_entry_point_length }); -} - -UNMAP_AFTER_INIT NonnullRefPtr<SMBIOSExposedTable> SMBIOSExposedTable::must_create(PhysicalAddress smbios_structure_table, size_t smbios_structure_table_length) -{ - return adopt_ref(*new (nothrow) SMBIOSExposedTable(smbios_structure_table, smbios_structure_table_length)); -} - -UNMAP_AFTER_INIT SMBIOSExposedTable::SMBIOSExposedTable(PhysicalAddress smbios_structure_table, size_t smbios_structure_table_length) - : BIOSSysFSComponent() - , m_smbios_structure_table(smbios_structure_table) - , m_smbios_structure_table_length(smbios_structure_table_length) -{ -} - -ErrorOr<NonnullOwnPtr<KBuffer>> SMBIOSExposedTable::try_to_generate_buffer() const -{ - auto dmi_blob = TRY(Memory::map_typed<u8>((m_smbios_structure_table), m_smbios_structure_table_length)); - return KBuffer::try_create_with_bytes(Span<u8> { dmi_blob.ptr(), m_smbios_structure_table_length }); -} - UNMAP_AFTER_INIT void BIOSSysFSDirectory::set_dmi_64_bit_entry_initialization_values() { dbgln("BIOSSysFSDirectory: SMBIOS 64bit Entry point @ {}", m_dmi_entry_point); diff --git a/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/Directory.h b/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/Directory.h new file mode 100644 index 0000000000..40f63c9f50 --- /dev/null +++ b/Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/Directory.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2022, Liav A. <liavalb@hotmail.co.il> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include <AK/RefPtr.h> +#include <AK/Types.h> +#include <AK/Vector.h> +#include <Kernel/FileSystem/SysFS.h> +#include <Kernel/FileSystem/SysFS/Subsystems/Firmware/Directory.h> +#include <Kernel/PhysicalAddress.h> + +namespace Kernel { + +class BIOSSysFSDirectory : public SysFSDirectory { +public: + virtual StringView name() const override { return "bios"sv; } + static NonnullRefPtr<BIOSSysFSDirectory> must_create(FirmwareSysFSDirectory&); + + void create_components(); + +private: + explicit BIOSSysFSDirectory(FirmwareSysFSDirectory&); + + void set_dmi_64_bit_entry_initialization_values(); + void set_dmi_32_bit_entry_initialization_values(); + void initialize_dmi_exposer(); + + Optional<PhysicalAddress> find_dmi_entry64bit_point(); + Optional<PhysicalAddress> find_dmi_entry32bit_point(); + + PhysicalAddress m_dmi_entry_point; + PhysicalAddress m_smbios_structure_table; + bool m_using_64bit_dmi_entry_point { false }; + size_t m_smbios_structure_table_length { 0 }; + size_t m_dmi_entry_point_length { 0 }; +}; + +} diff --git a/Kernel/FileSystem/SysFS/Subsystems/Firmware/Directory.cpp b/Kernel/FileSystem/SysFS/Subsystems/Firmware/Directory.cpp index 294cb7625e..cd42377cc4 100644 --- a/Kernel/FileSystem/SysFS/Subsystems/Firmware/Directory.cpp +++ b/Kernel/FileSystem/SysFS/Subsystems/Firmware/Directory.cpp @@ -4,7 +4,7 @@ * SPDX-License-Identifier: BSD-2-Clause */ -#include <Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS.h> +#include <Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/Directory.h> #include <Kernel/FileSystem/SysFS/Subsystems/Firmware/Directory.h> #include <Kernel/FileSystem/SysFS/Subsystems/Firmware/PowerStateSwitch.h> #include <Kernel/Firmware/ACPI/Parser.h> |