mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 16:12:44 +00:00 
			
		
		
		
	Kernel/SysFS: Split the bulky BIOS.h file into multiple files
This commit is contained in:
		
							parent
							
								
									9c6834698f
								
							
						
					
					
						commit
						4d05a41b30
					
				
					 12 changed files with 297 additions and 180 deletions
				
			
		|  | @ -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 }; | ||||
| }; | ||||
| 
 | ||||
| } | ||||
|  | @ -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; | ||||
| } | ||||
| 
 | ||||
| } | ||||
							
								
								
									
										27
									
								
								Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/Component.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/Component.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -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(); | ||||
| }; | ||||
| 
 | ||||
| } | ||||
|  | @ -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; | ||||
| }; | ||||
| } | ||||
|  | @ -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 }); | ||||
| } | ||||
| 
 | ||||
| } | ||||
|  | @ -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 }; | ||||
| }; | ||||
| 
 | ||||
| } | ||||
|  | @ -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 }); | ||||
| } | ||||
| 
 | ||||
| } | ||||
							
								
								
									
										34
									
								
								Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/Table.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/DMI/Table.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -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 }; | ||||
| }; | ||||
| 
 | ||||
| } | ||||
|  | @ -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); | ||||
							
								
								
									
										42
									
								
								Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/Directory.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS/Directory.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -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 }; | ||||
| }; | ||||
| 
 | ||||
| } | ||||
|  | @ -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> | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Liav A
						Liav A