summaryrefslogtreecommitdiff
path: root/Kernel/FileSystem
diff options
context:
space:
mode:
authorLiav A <liavalb@gmail.com>2022-04-22 10:59:32 +0300
committerAndreas Kling <kling@serenityos.org>2022-06-17 11:01:27 +0200
commit4d05a41b30b635fa15868f58d97665e64c3695e3 (patch)
tree4d76ca4d198b594447feb0c596ff50e6d22da7dd /Kernel/FileSystem
parent9c6834698f3523c86442276d0b7df03b99778dd1 (diff)
downloadserenity-4d05a41b30b635fa15868f58d97665e64c3695e3.zip
Kernel/SysFS: Split the bulky BIOS.h file into multiple files
Diffstat (limited to 'Kernel/FileSystem')
-rw-r--r--Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS.h123
-rw-r--r--Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/Component.cpp34
-rw-r--r--Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/Component.h27
-rw-r--r--Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/Definitions.h46
-rw-r--r--Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/EntryPointBlob.cpp35
-rw-r--r--Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/EntryPointBlob.h35
-rw-r--r--Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/Table.cpp34
-rw-r--r--Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/Table.h34
-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.h42
-rw-r--r--Kernel/FileSystem/SysFS/Subsystems/Firmware/Directory.cpp2
11 files changed, 293 insertions, 179 deletions
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>