summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2020-06-20 18:39:46 +0200
committerAndreas Kling <kling@serenityos.org>2020-06-20 18:39:46 +0200
commit37598de58278abe0f12d2efaa7e50ffffd92b278 (patch)
tree1513cf8e4c4e2e99d99e0ff7d95b520c2b04459b
parent42870a9494b97593b60e42dcac67dd6f059e53b4 (diff)
downloadserenity-37598de58278abe0f12d2efaa7e50ffffd92b278.zip
Kernel: Remove DMI decoder from the kernel
As suggested by @supercomputer7, we can simply expose this as a blob and decode it in userspace instead. Fixes #2599.
-rw-r--r--Kernel/ACPI/DMIDecoder.cpp281
-rw-r--r--Kernel/ACPI/DMIDecoder.h1425
-rw-r--r--Kernel/CMakeLists.txt1
-rw-r--r--Kernel/init.cpp8
4 files changed, 0 insertions, 1715 deletions
diff --git a/Kernel/ACPI/DMIDecoder.cpp b/Kernel/ACPI/DMIDecoder.cpp
deleted file mode 100644
index 775fcd32ae..0000000000
--- a/Kernel/ACPI/DMIDecoder.cpp
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- * Copyright (c) 2020, Liav A. <liavalb@hotmail.co.il>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <AK/StringView.h>
-#include <Kernel/ACPI/DMIDecoder.h>
-#include <Kernel/VM/MemoryManager.h>
-#include <Kernel/StdLib.h>
-
-namespace Kernel {
-
-static DMIDecoder* s_dmi_decoder;
-
-//#define SMBIOS_DEBUG
-
-#define SMBIOS_BASE_SEARCH_ADDR 0xf0000
-#define SMBIOS_END_SEARCH_ADDR 0xfffff
-#define SMBIOS_SEARCH_AREA_SIZE (SMBIOS_END_SEARCH_ADDR - SMBIOS_BASE_SEARCH_ADDR)
-
-DMIDecoder& DMIDecoder::the()
-{
- if (s_dmi_decoder == nullptr) {
- s_dmi_decoder = new DMIDecoder(true);
- }
- return *s_dmi_decoder;
-}
-
-void DMIDecoder::initialize()
-{
- if (s_dmi_decoder == nullptr) {
- s_dmi_decoder = new DMIDecoder(true);
- }
-}
-
-void DMIDecoder::initialize_untrusted()
-{
- if (s_dmi_decoder == nullptr) {
- s_dmi_decoder = new DMIDecoder(false);
- }
-}
-
-void DMIDecoder::set_64_bit_entry_initialization_values(PhysicalAddress entry)
-{
- klog() << "DMIDecoder: SMBIOS 64bit Entry point @ " << m_entry64bit_point;
- m_use_64bit_entry = true;
-
- auto region = MM.allocate_kernel_region(entry.page_base(), PAGE_ROUND_UP(SMBIOS_SEARCH_AREA_SIZE), "DMI Decoder 64 bit Initialization", Region::Access::Read, false, false);
- auto& entry_ptr = *(SMBIOS::EntryPoint64bit*)region->vaddr().offset(entry.offset_in_page()).as_ptr();
- m_structure_table = PhysicalAddress(entry_ptr.table_ptr);
- m_structures_count = entry_ptr.table_maximum_size;
- m_table_length = entry_ptr.table_maximum_size;
-}
-
-void DMIDecoder::set_32_bit_entry_initialization_values(PhysicalAddress entry)
-{
- klog() << "DMIDecoder: SMBIOS 32bit Entry point @ " << m_entry32bit_point;
- m_use_64bit_entry = false;
-
- auto region = MM.allocate_kernel_region(entry.page_base(), PAGE_ROUND_UP(SMBIOS_SEARCH_AREA_SIZE), "DMI Decoder 32 bit Initialization", Region::Access::Read, false, false);
- auto& entry_ptr = *(SMBIOS::EntryPoint32bit*)region->vaddr().offset(entry.offset_in_page()).as_ptr();
-
- m_structure_table = PhysicalAddress(entry_ptr.legacy_structure.smbios_table_ptr);
- m_structures_count = entry_ptr.legacy_structure.smbios_tables_count;
- m_table_length = entry_ptr.legacy_structure.smboios_table_length;
-}
-
-void DMIDecoder::initialize_parser()
-{
-
- if (m_entry32bit_point.is_null() && m_entry64bit_point.is_null()) {
- m_operable = false;
- klog() << "DMI Decoder is disabled. Cannot find SMBIOS tables.";
- return;
- }
-
- m_operable = true;
- klog() << "DMI Decoder is enabled";
- if (!m_entry64bit_point.is_null()) {
- set_64_bit_entry_initialization_values(m_entry64bit_point);
- } else if (!m_entry32bit_point.is_null()) {
- set_32_bit_entry_initialization_values(m_entry32bit_point);
- }
- klog() << "DMIDecoder: Data table @ " << m_structure_table;
- enumerate_smbios_tables();
-}
-
-void DMIDecoder::enumerate_smbios_tables()
-{
-
- u32 table_length = m_table_length;
- auto p_table = m_structure_table;
-
- auto region = MM.allocate_kernel_region(p_table.page_base(), PAGE_ROUND_UP(table_length), "DMI Decoder Enumerating SMBIOS", Region::Access::Read, false, false);
- volatile SMBIOS::TableHeader* v_table_ptr = (SMBIOS::TableHeader*)region->vaddr().offset(p_table.offset_in_page()).as_ptr();
-
-#ifdef SMBIOS_DEBUG
- dbg() << "DMIDecoder: Total Table length " << m_table_length;
-#endif
-
- u32 structures_count = 0;
- while (table_length > 0) {
-#ifdef SMBIOS_DEBUG
- dbg() << "DMIDecoder: Examining table @ P " << (void*)p_table.as_ptr() << " V " << const_cast<SMBIOS::TableHeader*>(v_table_ptr);
-#endif
- structures_count++;
- if (v_table_ptr->type == (u8)SMBIOS::TableType::EndOfTable) {
- klog() << "DMIDecoder: Detected table with type 127, End of SMBIOS data.";
- break;
- }
- klog() << "DMIDecoder: Detected table with type " << v_table_ptr->type;
- m_smbios_tables.append(p_table);
- table_length -= v_table_ptr->length;
-
- size_t table_size = get_table_size(p_table);
- p_table = p_table.offset(table_size);
- v_table_ptr = (SMBIOS::TableHeader*)((FlatPtr)v_table_ptr + table_size);
-#ifdef SMBIOS_DEBUG
- dbg() << "DMIDecoder: Next table @ P 0x" << p_table.get();
-#endif
- }
- m_structures_count = structures_count;
-}
-
-size_t DMIDecoder::get_table_size(PhysicalAddress table)
-{
- auto region = MM.allocate_kernel_region(table.page_base(), PAGE_ROUND_UP(m_table_length), "DMI Decoder Determining table size", Region::Access::Read, false, false);
- auto& table_v_ptr = (SMBIOS::TableHeader&)*region->vaddr().offset(table.offset_in_page()).as_ptr();
-#ifdef SMBIOS_DEBUG
- dbg() << "DMIDecoder: table legnth - " << table_v_ptr.length;
-#endif
- const char* strtab = (char*)&table_v_ptr + table_v_ptr.length;
- size_t index = 1;
- while (strtab[index - 1] != '\0' || strtab[index] != '\0') {
- if (index > m_table_length) {
- ASSERT_NOT_REACHED(); // FIXME: Instead of halting, find a better solution (Hint: use m_operable to disallow further use of DMIDecoder)
- }
- index++;
- }
-#ifdef SMBIOS_DEBUG
- dbg() << "DMIDecoder: table size - " << (table_v_ptr.length + index + 1);
-#endif
- return table_v_ptr.length + index + 1;
-}
-
-PhysicalAddress DMIDecoder::get_next_physical_table(PhysicalAddress p_table)
-{
- return p_table.offset(get_table_size(p_table));
-}
-
-PhysicalAddress DMIDecoder::get_smbios_physical_table_by_handle(u16 handle)
-{
-
- for (auto table : m_smbios_tables) {
- if (table.is_null())
- continue;
- auto region = MM.allocate_kernel_region(table.page_base(), PAGE_SIZE * 2, "DMI Decoder Finding Table", Region::Access::Read, false, false);
- SMBIOS::TableHeader* table_v_ptr = (SMBIOS::TableHeader*)region->vaddr().offset(table.offset_in_page()).as_ptr();
-
- if (table_v_ptr->handle == handle) {
- return table;
- }
- }
- return {};
-}
-PhysicalAddress DMIDecoder::get_smbios_physical_table_by_type(u8 table_type)
-{
-
- for (auto table : m_smbios_tables) {
- if (table.is_null())
- continue;
- auto region = MM.allocate_kernel_region(table.page_base(), PAGE_ROUND_UP(PAGE_SIZE * 2), "DMI Decoder Finding Table", Region::Access::Read, false, false);
- SMBIOS::TableHeader* table_v_ptr = (SMBIOS::TableHeader*)region->vaddr().offset(table.offset_in_page()).as_ptr();
- if (table_v_ptr->type == table_type) {
- return table;
- }
- }
- return {};
-}
-
-DMIDecoder::DMIDecoder(bool trusted)
- : m_entry32bit_point(find_entry32bit_point())
- , m_entry64bit_point(find_entry64bit_point())
- , m_structure_table(PhysicalAddress())
- , m_untrusted(!trusted)
-{
- if (!trusted) {
- klog() << "DMI Decoder initialized as untrusted due to user request.";
- }
- initialize_parser();
-}
-
-PhysicalAddress DMIDecoder::find_entry64bit_point()
-{
- PhysicalAddress paddr = PhysicalAddress(SMBIOS_BASE_SEARCH_ADDR);
- auto region = MM.allocate_kernel_region(paddr, PAGE_ROUND_UP(SMBIOS_SEARCH_AREA_SIZE), "DMI Decoder Entry Point 64 bit Finding", Region::Access::Read, false, false);
-
- char* tested_physical_ptr = (char*)paddr.get();
- for (char* entry_str = (char*)(region->vaddr().get()); entry_str < (char*)(region->vaddr().get() + (SMBIOS_SEARCH_AREA_SIZE)); entry_str += 16) {
-#ifdef SMBIOS_DEBUG
- dbg() << "DMI Decoder: Looking for 64 bit Entry point @ V " << (void*)entry_str << " P " << (void*)tested_physical_ptr;
-#endif
- if (!strncmp("_SM3_", entry_str, strlen("_SM3_")))
- return PhysicalAddress((FlatPtr)tested_physical_ptr);
-
- tested_physical_ptr += 16;
- }
- return {};
-}
-
-PhysicalAddress DMIDecoder::find_entry32bit_point()
-{
- PhysicalAddress paddr = PhysicalAddress(SMBIOS_BASE_SEARCH_ADDR);
- auto region = MM.allocate_kernel_region(paddr, PAGE_ROUND_UP(SMBIOS_SEARCH_AREA_SIZE), "DMI Decoder Entry Point 32 bit Finding", Region::Access::Read, false, false);
-
- char* tested_physical_ptr = (char*)paddr.get();
- for (char* entry_str = (char*)(region->vaddr().get()); entry_str < (char*)(region->vaddr().get() + (SMBIOS_SEARCH_AREA_SIZE)); entry_str += 16) {
-#ifdef SMBIOS_DEBUG
- dbg() << "DMI Decoder: Looking for 32 bit Entry point @ V " << (void*)entry_str << " P " << (void*)tested_physical_ptr;
-#endif
- if (!strncmp("_SM_", entry_str, strlen("_SM_")))
- return PhysicalAddress((FlatPtr)tested_physical_ptr);
-
- tested_physical_ptr += 16;
- }
- return {};
-}
-
-Vector<SMBIOS::PhysicalMemoryArray*>& DMIDecoder::get_physical_memory_areas()
-{
- // FIXME: Implement it...
- klog() << "DMIDecoder::get_physical_memory_areas() is not implemented.";
- ASSERT_NOT_REACHED();
-}
-bool DMIDecoder::is_reliable()
-{
- return !m_untrusted;
-}
-u64 DMIDecoder::get_bios_characteristics()
-{
- // FIXME: Make sure we have some mapping here so we don't rely on existing identity mapping...
- ASSERT_NOT_REACHED();
- ASSERT(m_operable == true);
- auto* bios_info = (SMBIOS::BIOSInfo*)get_smbios_physical_table_by_type(0).as_ptr();
- ASSERT(bios_info != nullptr);
-
- klog() << "DMIDecoder: BIOS info @ " << PhysicalAddress((FlatPtr)bios_info);
- return bios_info->bios_characteristics;
-}
-
-char* DMIDecoder::get_smbios_string(PhysicalAddress, u8)
-{
- // FIXME: Implement it...
- // FIXME: Make sure we have some mapping here so we don't rely on existing identity mapping...
- klog() << "DMIDecoder::get_smbios_string() is not implemented.";
- ASSERT_NOT_REACHED();
- return nullptr;
-}
-
-}
diff --git a/Kernel/ACPI/DMIDecoder.h b/Kernel/ACPI/DMIDecoder.h
deleted file mode 100644
index 37866b80f9..0000000000
--- a/Kernel/ACPI/DMIDecoder.h
+++ /dev/null
@@ -1,1425 +0,0 @@
-/*
- * Copyright (c) 2020, Liav A. <liavalb@hotmail.co.il>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#pragma once
-
-#include <AK/SinglyLinkedList.h>
-#include <AK/Types.h>
-#include <AK/Vector.h>
-#include <Kernel/VM/Region.h>
-#include <Kernel/PhysicalAddress.h>
-#include <Kernel/VirtualAddress.h>
-
-namespace Kernel {
-
-namespace SMBIOS {
-struct [[gnu::packed]] LegacyEntryPoint32bit
-{
- char legacy_sig[5];
- u8 checksum2;
- u16 smboios_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;
-};
-
-struct [[gnu::packed]] TableHeader
-{
- u8 type;
- u8 length;
- u16 handle;
-};
-
-enum class TableType {
- BIOSInfo = 0,
- SysInfo = 1,
- ModuleInfo = 2,
- SysEnclosure = 3,
- ProcessorInfo = 4,
- CacheInfo = 7,
- PortConnectorInfo = 8,
- SystemSlots = 9,
- OEMStrings = 11,
- SysConfigOptions = 12,
- BIOSLanguageInfo = 13,
- GroupAssociations = 14,
- SysEventLog = 15,
- PhysicalMemoryArray = 16,
- MemoryDevice = 17,
- MemoryErrorInfo32Bit = 18,
- MemoryArrayMappedAddress = 19,
- MemoryDeviceMappedAddress = 20,
- BuiltinPointingDevice = 21,
- PortableBattery = 22,
- SysReset = 23,
- HardwareSecurity = 24,
- SysPowerControls = 25,
- VoltageProbe = 26,
- CoolingDevice = 27,
- TemperatureProbe = 28,
- ElectricalCurrentProbe = 29,
- OutOfBandRemoteAccess = 30,
- SystemBootInfo = 32,
- MemoryErrorInfo64Bit = 33,
- ManagementDevice = 34,
- ManagementDeviceComponent = 35,
- ManagementDeviceThresholdData = 36,
- MemoryChannel = 37,
- IPMIDeviceInfo = 38,
- SysPowerSupply = 39,
- AdditionalInfo = 40,
- OnboardDevicesExtendedInfo = 41,
- ManagementControllerHostInterface = 42,
- TPMDevice = 43,
- ProcessorAdditionalInfo = 44,
- Inactive = 126,
- EndOfTable = 127
-};
-
-struct [[gnu::packed]] BIOSInfo
-{ // Type 0
- TableHeader h;
- u8 bios_vendor_str_number;
- u8 bios_version_str_number;
- u16 bios_segment;
- u8 bios_release_date_str_number;
- u8 bios_rom_size;
- u64 bios_characteristics;
- u8 ext_bios_characteristics[];
-};
-
-enum class BIOSCharacteristics {
- Unknown = (1 << 2),
- NotSupported = (1 << 3),
- ISA_support = (1 << 4),
- MCA_support = (1 << 5),
- EISA_support = (1 << 6),
- PCI_support = (1 << 7),
- PCMCIA_support = (1 << 8),
- PnP_support = (1 << 9),
- APM_support = (1 << 10),
- UpgradeableBIOS = (1 << 11),
- Shadowing_BIOS = (1 << 12),
- VL_VESA_support = (1 << 13),
- ESCD_support = (1 << 14),
- CD_boot_support = (1 << 15),
- select_boot_support = (1 << 16),
- BIOS_ROM_socketed = (1 << 17),
- PCMCIA_boot_support = (1 << 18),
- EDD_spec_support = (1 << 19),
- floppy_nec98_1200k_support = (1 << 20),
- floppy_toshiba_1200k_support = (1 << 21),
- floppy_360k_support = (1 << 22),
- floppy_1200k_services_support = (1 << 23),
- floppy_720k_services_support = (1 << 24),
- floppy_2880k_services_support = (1 << 25),
- int5_print_screen_support = (1 << 26),
- int9_8042_keyboard_support = (1 << 27),
- int14_serial_support = (1 << 28),
- int17_printer_support = (1 << 29),
- int10_video_support = (1 << 30),
- nec_pc98 = (1 << 31)
-};
-
-struct [[gnu::packed]] ExtBIOSInfo
-{
- u8 bios_major_release;
- u8 bios_minor_release;
- u8 embedded_controller_firmware_major_release;
- u8 embedded_controller_firmware_minor_release;
- u16 ext_bios_rom_size;
-};
-
-struct [[gnu::packed]] SysInfo
-{ // Type 1
- TableHeader h;
- u8 manufacturer_str_number;
- u8 product_name_str_number;
- u8 version_str_number;
- u8 serial_number_str_number;
- u64 uuid[2];
- u8 wake_up_type;
- u8 sku_str_number;
- u8 family_str_number;
-};
-
-enum class WakeUpType {
- Reserved = 0,
- Other = 1,
- Unknown = 2,
- APM_TIMER = 3,
- MODEM_RING = 4,
- LAN_REMOTE = 5,
- POWER_SWTCH = 6,
- PCI_PME = 7,
- AC_RESTORE = 8,
-};
-
-struct [[gnu::packed]] ModuleInfo
-{ // Type 2
- TableHeader h;
- u8 manufacturer_str_number;
- u8 product_name_str_number;
- u8 version_str_number;
- u8 serial_number_str_number;
- u8 asset_tag_str_number;
- u8 feature_flags;
- u8 chassis_location;
- u16 chassis_handle;
- u8 board_type;
- u8 contained_object_handles_count;
- u16 contained_object_handles[];
-};
-
-enum class BoardType {
- Unkown = 0x1,
- Other = 0x2,
- Server_Blade = 0x3,
- Connectivity_Switch = 0x4,
- System_Management_Module = 0x5,
- Processor_Module = 0x6,
- IO_Module = 0x7,
- Memory_Module = 0x8,
- Daughter_Board = 0x9,
- Motherboard = 0xA,
- Processor_Memory_Module = 0xB,
- Processor_IO_Module = 0xC,
- Interconnect_Board = 0xD,
-};
-
-struct [[gnu::packed]] SysEnclosure
-{ // Type 3
- TableHeader h;
- u8 manufacturer_str_number;
- u8 type;
- u8 version_str_number;
- u8 serial_number_str_number;
- u8 asset_tag_str_number;
- u8 boot_up_state;
- u8 power_supply_state;
- u8 thermal_state;
- u8 security_status;
- u32 vendor_specific_info;
- u8 height;
- u8 power_cords_number;
- u8 contained_element_count;
- u8 contained_element_record_length;
-};
-
-struct [[gnu::packed]] ExtSysEnclosure
-{
- u8 sku_str_number;
-};
-
-enum class SysEnclosureType {
- Other = 0x1,
- Unknown = 0x2,
- Desktop = 0x3,
- Low_Profile_Desktop = 0x4,
- Pizza_Box = 0x5,
- Mini_Tower = 0x6,
- Tower = 0x7,
- Portable = 0x8,
- Laptop = 0x9,
- Notebook = 0xA,
- Hand_Held = 0xB,
- Docking_Station = 0xC,
- AIO = 0xD,
- Sub_Notebook = 0xE,
- Space_Saving = 0xF,
- Lunch_Box = 0x10,
- Main_Server_Chassis = 0x11,
- Expansion_Chassis = 0x12,
- Sub_Chassis = 0x13,
- Bus_Expansion_Chassis = 0x14,
- Peripheral_Chassis = 0x15,
- RAID_Chassis = 0x16,
- Rack_MOunt_Chassis = 0x17,
- Sealed_case_PC = 0x18,
- Multi_System_Chasis = 0x19,
- Compact_PCI = 0x1A,
- Advanced_TCA = 0x1B,
- Blade = 0x1C,
- Blade_Enclosure = 0x1D,
- Tablet = 0x1E,
- Convertible = 0x1F,
- Detachable = 0x20,
- IoT_Gateway = 0x21,
- Embedded_PC = 0x22,
- Mini_PC = 0x23,
- Stick_PC = 0x24,
-};
-
-enum class SysEnclosureState {
- Other = 0x1,
- Unknown = 0x2,
- Safe = 0x3,
- Warning = 0x4,
- Critical = 0x5,
- Non_Recoverable = 0x6,
-};
-
-enum class SysEnclosureSecurityStatus {
- Other = 0x1,
- Unknown = 0x2,
- None = 0x3,
- External_Interface_Locked_Out = 0x4,
- External_Interface_Enabled = 0x5,
-};
-
-struct [[gnu::packed]] SysEnclosureContainedElement
-{
- u8 type;
- u8 min_contained_element_count;
- u8 max_contained_element_count;
-};
-
-struct [[gnu::packed]] ProcessorInfo
-{ // Type 4
- TableHeader h;
- u8 socket_designation_str_number;
- u8 processor_type;
- u8 processor_family;
- u8 processor_manufacturer_str_number;
- u64 processor_id;
- u8 processor_version_str_number;
- u8 voltage;
- u16 external_clock;
- u16 max_speed;
- u16 current_speed;
- u8 status;
- u8 processor_upgrade;
- u16 l1_cache_handle;
- u16 l2_cache_handle;
- u16 l3_cache_handle;
- u8 serial_number_str_number;
- u8 asset_tag_str_number;
- u8 part_number_str_number;
- u8 core_count;
- u8 core_enabled;
- u8 thread_count;
- u16 processor_characteristics;
- u16 processor_family2;
- u16 core_count2;
- u16 core_enabled2;
- u16 thread_count2;
-};
-
-enum class ProcessorType {
- Other = 0x1,
- Unknown = 0x2,
- Central_Processor = 0x3,
- Math_Processor = 0x4,
- DSP_Processor = 0x5,
- Video_Processor = 0x6,
-};
-
-enum class ProcessorUpgrade {
- Other = 0x1,
- Unknown = 0x2,
- Daughter_Board = 0x3,
- ZIF_Socket = 0x4,
- Replaceable_Piggy_Back = 0x5,
- None = 0x6,
- LIF_Sokcet = 0x7,
- Slot_1 = 0x8,
- Slot_2 = 0x9,
- Socket_370_pin = 0xA,
- Slot_A = 0xB,
- Slot_M = 0xC,
- Socket_423 = 0xD,
- Socket_A_462 = 0xE,
- Socket_478 = 0xF,
- Socket_754 = 0x10,
- Socket_940 = 0x11,
- Socket_939 = 0x12,
- Socket_mPGA604 = 0x13,
- Socket_LGA771 = 0x14,
- Socket_LGA775 = 0x15,
- Socket_S1 = 0x16,
- Socket_AM2 = 0x17,
- Socket_F_1207 = 0x18,
- Socket_LGA1366 = 0x19,
- Socket_G34 = 0x1A,
- Socket_AM3 = 0x1B,
- Socket_C32 = 0x1C,
- Socket_LGA1156 = 0x1D,
- Socket_LGA1567 = 0x1E,
- Socket_PGA988A = 0x1F,
- Socket_BGA1288 = 0x20,
- Socket_rPGA988B = 0x21,
- Socket_BGA1023 = 0x22,
- Socket_BGA1224 = 0x23,
- Socket_LGA1155 = 0x24,
- Socket_LGA1356 = 0x25,
- Socket_LGA2011 = 0x26,
- Socket_FS1 = 0x27,
- Socket_FS2 = 0x28,
- Socket_FM1 = 0x29,
- Socket_FM2 = 0x2A,
- Socket_LGA2011_3 = 0x2B,
- Socket_LGA1356_3 = 0x2C,
- Socket_LGA1150 = 0x2D,
- Socket_BGA1168 = 0x2E,
- Socket_BGA1234 = 0x2F,
- Socket_BGA1364 = 0x30,
- Socket_AM4 = 0x31,
- Socket_LGA1151 = 0x32,
- Socket_BGA1356 = 0x33,
- Socket_BGA1440 = 0x34,
- Socket_BGA1515 = 0x35,
- Socket_LGA3647_1 = 0x36,
- Socket_SP3 = 0x37,
- Socket_SP3r2 = 0x38,
- Socket_LGA2066 = 0x39,
- Socket_BGA1392 = 0x3A,
- Socket_BGA1510 = 0x3B,
- Socket_BGA1528 = 0x3C
-};
-
-struct [[gnu::packed]] CacheInfo
-{ // Type 7
- TableHeader h;
- u8 socket_designation_str_number;
- u16 cache_config;
- u16 max_cache_size;
- u16 installed_size;
- u16 supported_sram_type;
- u16 current_sram_type;
- u8 cache_speed;
- u8 error_correction_type;
- u8 system_cache_type;
- u8 associativity;
- u32 max_cache_size2;
- u32 installed_size2;
-};
-
-struct [[gnu::packed]] PortConnectorInfo
-{ // Type 8
- TableHeader h;
- u8 internal_reference_designator_str_number;
- u8 internal_connector_type;
- u8 external_reference_designator_str_number;
- u8 external_connector_type;
- u8 port_type;
-};
-
-enum class ConnectorType {
- None = 0x0,
- Centronics = 0x1,
- Mini_Centronics = 0x2,
- Proprietary = 0x3,
- DB_25_pin_male = 0x4,
- DB_25_pin_female = 0x5,
- DB_15_pin_male = 0x6,
- DB_15_pin_female = 0x7,
- DB_9_pin_male = 0x8,
- DB_9_pin_female = 0x9,
- RJ_11 = 0xA,
- RJ_45 = 0xB,
- MiniSCSI_50_pin = 0xC,
- MiniDIN = 0xD,
- MicroDIN = 0xE,
- PS2 = 0xF,
- Infrared = 0x10,
- HP_HIL = 0x11,
- AccessBus_USB = 0x12,
- SSA_SCSI = 0x13,
- Circular_DIN8_male = 0x14,
- Circular_DIN8_female = 0x15,
- OnBoard_IDE = 0x16,
- OnBoard_Floppy = 0x17,
- Dual_Inline_9pin = 0x18,
- Dual_Inline_25pin = 0x19,
- Dual_Inline_50pin = 0x1A,
- Dual_Inline_68pin = 0x1B,
- OnBoard_SoundInput_CDROM = 0x1C,
- Mini_Centronics_Type14 = 0x1D,
- Mini_Centronics_Type26 = 0x1E,
- Mini_Jack_Headphones = 0x1F,
- BNC = 0x20,
- Connector_1394 = 0x21,
- SAS_SATA_Plug_Receptacle = 0x22,
- USB_TypeC_Receptacle = 0x23,
- PC98 = 0xA0,
- PC98_Hireso = 0xA1,
- PC_H98 = 0xA2,
- PC98_Note = 0xA3,
- PC98_Full = 0xA4,
- Other = 0xFF
-};
-
-enum class PortType {
- None = 0x0,
- Parallel_Port_XT_AT_Compatible = 0x1,
- Parallel_Port_PS2 = 0x2,
- Parallel_Port_ECP = 0x3,
- Parallel_Port_EPP = 0x4,
- Parallel_Port_ECP_EPP = 0x5,
- Serial_Port_XT_AT_Compatible = 0x6,
- Serial_Port_16450_Compatible = 0x7,
- Serial_Port_16550_Compatible = 0x8,
- Serial_Port_16550A_Compatible = 0x9,
- SCSI_Port = 0xA,
- MIDI_Port = 0xB,
- Joy_Stick_Port = 0xC,
- Keyboard_Port = 0xD,
- Mouse_Port = 0xE,
- SSA_SCSI = 0xF,
- USB = 0x10,
- FireWire = 0x11,
- PCMCIA_Type1 = 0x12,
- PCMCIA_Type2 = 0x13,
- PCMCIA_Type3 = 0x14,
- Cardbus = 0x15,
- AccessBus_Port = 0x16,
- SCSI_2 = 0x17,
- SCSI_Wide = 0x18,
- PC98 = 0x19,
- PC98_Hireso = 0x1A,
- PC_H98 = 0x1B,
- Video_Port = 0x1C,
- Audio_Port = 0x1D,
- Modem_Port = 0x1E,
- Network_Port = 0x1F,
- SATA = 0x20,
- SAS = 0x21,
- MFDP = 0x22,
- Thunderbolt = 0x23,
- Intel_8251_Compatible = 0xA0,
- Intel_8251_FIFO_Compatible = 0xA1,
- Other = 0xFF
-};
-
-struct [[gnu::packed]] SystemSlotPeerGroup
-{
- u16 segment_group_number;
- u8 bus_number;
- u8 device_function_number;
- u8 data_bus_width;
-};
-
-struct [[gnu::packed]] SystemSlots
-{ // Type 9
- TableHeader h;
- u8 slot_designation_str_number;
- u8 slot_type;
- u8 slot_data_bus_width;
- u8 current_stage;
- u8 slot_length;
- u16 slot_id;
- u8 slot_characteristics_1;
- u8 slot_characteristics_2;
- u16 segment_group_number;
- u8 bus_number;
- u8 device_function_number;
- u8 data_bus_width;
- u8 peer_grouping_count;
- SystemSlotPeerGroup peer_groups[];
-};
-
-enum class SlotType {
- Other = 0x1,
- Unknown = 0x2,
- ISA = 0x3,
- MCA = 0x4,
- EISA = 0x5,
- PCI = 0x6,
- PCMCIA = 0x7,
- VL_VESA = 0x8,
- Proprietary = 0x9,
- Processor_Card_Slot = 0xA,
- Proprietary_Memory_Card_Slot = 0xB,
- IO_Riser_Card_Slot = 0xC,
- NuBus = 0xD,
- PCI_66MHZ_Capable = 0xE,
- AGP = 0xF,
- AGP_2X = 0x10,
- AGP_4X = 0x11,
- PCI_X = 0x12,
- AGP_8X = 0x13,
- M_Dot_2_Socket_1_DP = 0x14,
- M_Dot_2_Socket_1_SD = 0x15,
- M_Dot_2_Socket_2 = 0x16,
- M_Dot_2_Socket_3 = 0x17,
- MXM_Type1 = 0x18,
- MXM_Type2 = 0x19,
- MXM_Type3_Standard = 0x1A,
- MXM_Type3_HE = 0x1B,
- MXM_Type4 = 0x1C,
- MXM_3_Type_A = 0x1D,
- MXM_3_Type_B = 0x1E,
- PCI_Express_Gen2 = 0x1F,
- PCI_Express_Gen3 = 0x20,
- PCI_Express_Mini_52pin_Type1 = 0x21,
- PCI_Express_Mini_52pin_Type2 = 0x22,
- PCI_Express_Mini_76pin = 0x23,
- CXL_Flexbus_1_0 = 0x30,
- PC98_C20 = 0xA0,
- PC98_C24 = 0xA1,
- PC98_E = 0xA2,
- PC98_Local_Bus = 0xA3,
- PC98_Card = 0xA4,
- PCI_Express = 0xA5,
- PCI_Express_x1 = 0xA6,
- PCI_Express_x2 = 0xA7,
- PCI_Express_x4 = 0xA8,
- PCI_Express_x8 = 0xA9,
- PCI_Express_x16 = 0xAA,
- PCI_Express_Gen_2 = 0xAB,
- PCI_Express_Gen_2_x1 = 0xAC,
- PCI_Express_Gen_2_x2 = 0xAD,
- PCI_Express_Gen_2_x4 = 0xAE,
- PCI_Express_Gen_2_x8 = 0xAF,
- PCI_Express_Gen_2_x16 = 0xB0,
- PCI_Express_Gen_3 = 0xB1,
- PCI_Express_Gen_3_x1 = 0xB2,
- PCI_Express_Gen_3_x2 = 0xB3,
- PCI_Express_Gen_3_x4 = 0xB4,
- PCI_Express_Gen_3_x8 = 0xB5,
- PCI_Express_Gen_3_x16 = 0xB6,
- PCI_Express_Gen_4 = 0xB8,
- PCI_Express_Gen_4_x1 = 0xB9,
- PCI_Express_Gen_4_x2 = 0xBA,
- PCI_Express_Gen_4_x4 = 0xBB,
- PCI_Express_Gen_4_x8 = 0xBC,
- PCI_Express_Gen_4_x16 = 0xBD
-};
-
-enum class SlotDataBusWidth {
- Other = 0x1,
- Unknown = 0x2,
- _8_bit = 0x3,
- _16_bit = 0x4,
- _32_bit = 0x5,
- _64_bit = 0x6,
- _128_bit = 0x7,
- _1x_x1 = 0x8,
- _2x_x2 = 0x9,
- _4x_x4 = 0xA,
- _8x_x8 = 0xB,
- _12x_x12 = 0xC,
- _16x_x16 = 0xD,
- _32x_x32 = 0xE
-};
-
-enum class SlotCurrentUsage {
- Other = 0x1,
- Unknown = 0x2,
- Available = 0x3,
- In_Use = 0x4,
- Unavailable = 0x5
-};
-
-enum class SlotLength {
- Other = 0x1,
- Unknown = 0x2,
- Short_Length = 0x3,
- Long_Length = 0x4,
- _2_5_Drive_Form_Factor = 0x5,
- _3_5_Drive_Form_Factor = 0x6
-};
-
-enum class SlotCharacteristics1 {
- Unknown = (1 << 0),
- Provides_5volt = (1 << 1),
- Provides_3_3volt = (1 << 2),
- Shared_Slot = (1 << 3),
- Support_PC_Card_16 = (1 << 4),
- Support_CardBus = (1 << 5),
- Support_Zoom_Video = (1 << 6),
- Support_Modem_Ring_Resume = (1 << 7)
-};
-
-enum class SlotCharacteristics2 {
- Support_PCI_PME = (1 << 0),
- Support_Hot_Plug = (1 << 1),
- Support_SMBus = (1 << 2),
- Support_Bifurcation = (1 << 3),
-};
-
-struct [[gnu::packed]] OEMStrings
-{ // Type 11
- TableHeader h;
- u8 strings_count;
-};
-
-struct [[gnu::packed]] SysConfigOptions
-{ // Type 12
- TableHeader h;
- u8 strings_count;
-};
-
-struct [[gnu::packed]] BIOSLanguageInfo
-{ // Type 13
- TableHeader h;
- u8 installable_langs_counts;
- u8 flags;
- u8 reserved[15];
- u8 current_lang_str_number; // String number (one-based) of the currently installed language
-};
-
-struct [[gnu::packed]] GroupAssociations
-{ // Type 14
- TableHeader h;
- u8 group_name_str_number;
- u8 item_type;
- u16 item_handle;
-};
-
-struct [[gnu::packed]] SysEventLog
-{ // Type 15
- TableHeader h;
- u16 log_area_length;
- u16 log_header_start_offset;
- u16 log_data_start_offset;
- u8 access_method;
- u8 log_status;
- u32 log_change_token;
- u32 access_method_address;
- u8 log_header_format;
- u8 supported_log_type_descriptors_count;
- u8 log_type_descriptor_length;
- u8 supported_event_log_type_descriptor_list[];
-};
-
-struct [[gnu::packed]] PhysicalMemoryArray
-{ // Type 16
- TableHeader h;
- u8 location;
- u8 use;
- u8 memory_error_correction;
- u32 max_capacity;
- u16 memory_error_info_handle;
- u16 memory_devices_count;
- u64 ext_max_capacity;
-};
-
-enum class MemoryArrayLocation {
- Other = 0x1,
- Unknown = 0x2,
- Motherboard = 0x3,
- ISA_addon_card = 0x4,
- EISA_addon_card = 0x5,
- PCI_addon_card = 0x6,
- MCA_addon_card = 0x7,
- PCMCIA_addon_card = 0x8,
- Proprietary_addon_card = 0x9,
- NuBus = 0xA,
- PC98_C20_addon_card = 0xA0,
- PC98_C24_addon_card = 0xA1,
- PC98_E_addon_card = 0xA2,
- PC98_Local_Bus_addon_card = 0xA3,
- CXL_Flexbus_1_0_addon_card = 0xA4
-};
-
-enum class MemoryArrayUse {
- Other = 0x1,
- Unknown = 0x2,
- System_Memory = 0x3,
- Video_Memory = 0x4,
- Flash_Memory = 0x5,
- Non_Volatile_RAM = 0x6,
- Cache_Memory = 0x7
-};
-
-enum class MemoryArrayErrorCorrectionType {
- Other = 0x1,
- Unknown = 0x2,
- None = 0x3,
- Parity = 0x4,
- SingleBit_ECC = 0x5,
- MultiBit_ECC = 0x6,
- CRC = 0x7
-};
-
-struct [[gnu::packed]] MemoryDevice
-{ // Type 17
- TableHeader h;
- u16 physical_memory_array_handle;
- u16 memory_error_info_handle;
- u16 total_width;
- u16 data_width;
- u16 size;
- u8 form_factor;
- u8 device_set;
- u8 device_locator_str_number;
- u8 bank_locator_str_number;
- u8 memory_type;
- u16 type_detail;
- u16 speed;
- u8 manufacturer_str_number;
- u8 serial_number_str_number;
- u8 asset_tag_str_number;
- u8 part_number_str_number;
- u8 attributes;
- u32 ext_size;
- u16 configured_memory_speed;
- u16 min_voltage;
- u16 max_voltage;
- u16 configured_voltage;
- u8 memory_technology;
- u16 memory_operating_mode_capability;
- u8 firmware_version_str_number;
- u16 module_manufacturer_id;
- u16 module_product_id;
- u16 memory_subsystem_controller_manufacturer_id;
- u16 memory_subsystem_controller_product_id;
- u64 non_volatile_size;
- u64 volatile_size;
- u64 cache_size;
- u64 logical_size;
- u32 ext_speed;
- u32 ext_configured_memory_speed;
-};
-
-enum class MemoryDeviceFormFactor {
- Other = 0x1,
- Unknown = 0x2,
- SIMM = 0x3,
- SIP = 0x4,
- Chip = 0x5,
- DIP = 0x6,
- ZIP = 0x7,
- ProprietaryCard = 0x8,
- DIMM = 0x9,
- TSOP = 0xA,
- Chips_Row = 0xB,
- RIMM = 0xC,
- SODIMM = 0xD,
- SRIMM = 0xE,
- FB_DIMM = 0xF,
- Die = 0x10
-};
-
-enum class MemoryDeviceType {
- Other = 0x1,
- Unknown = 0x2,
- DRAM = 0x3,
- EDRAM = 0x4,
- VRAM = 0x5,
- SRAM = 0x6,
- RAM = 0x7,
- ROM = 0x8,
- FLASH = 0x9,
- EEPROM = 0xA,
- FEPROM = 0xB,
- EPROM = 0xC,
- CDRAM = 0xD,
- _3DRAM = 0xE,
- SDRAM = 0xF,
- SGRAM = 0x10,
- RDRAM = 0x11,
- DDR = 0x12,
- DDR2 = 0x13,
- DDR2_FB_DIMM = 0x14,
- DDR3 = 0x18,
- FBD2 = 0x19,
- DDR4 = 0x1A,
- LPDDR = 0x1B,
- LPDDR2 = 0x1C,
- LPDDR3 = 0x1D,
- LPDDR4 = 0x1E,
- Logical_Non_Volatile_Device = 0x1F,
- HBM = 0x20, // (High Bandwidth Memory)
- HBM2 = 0x21, // (High Bandwidth Memory Generation 2)
-};
-
-enum class MemoryDeviceTypeDetail {
- Other = (1 << 1),
- Unknown = (1 << 2),
- Fast_paged = (1 << 3),
- Static_Column = (1 << 4),
- Pseudo_Static = (1 << 5),
- RAMBUS = (1 << 6),
- Synchronous = (1 << 7),
- CMOS = (1 << 8),
- EDO = (1 << 9),
- Window_DRAM = (1 << 10),
- Cache_DRAM = (1 << 11),
- Non_volatile = (1 << 12),
- Registered_Buffered = (1 << 13),
- Unbuffered_Unregistered = (1 << 14),
- LRDIMM = (1 << 15)
-};
-
-enum class MemoryDeviceTechnology {
- Other = 0x1,
- Unknown = 0x2,
- DRAM = 0x3,
- NVDIMM_N = 0x4,
- NVDIMM_F = 0x5,
- NVDIMM_P = 0x6,
- Intel_Optane_DC_Persistent_Memory = 0x7
-};
-
-enum class MemoryDeviceOperatingModeCapability {
- Other = (1 << 1),
- Unknown = (1 << 2),
- Volatile_Memory = (1 << 3),
- Byte_accessible_persistent_memory = (1 << 4),
- Block_accessible_persistent_memory = (1 << 5),
-};
-
-struct MemoryErrorInfo32Bit { // Type 18
- TableHeader h;
- u8 error_type;
- u8 error_granularity;
- u8 error_operation;
- u32 vendor_syndrome;
- u32 memory_array_error_address;
- u32 device_error_address;
- u32 error_resolution;
-};
-
-enum class MemoryErrorType {
- Other = 0x1,
- Unknown = 0x2,
- OK = 0x3,
- Bad_read = 0x4,
- Parity_error = 0x5,
- SingleBit_error = 0x6,
- DoubleBit_error = 0x7,
- MultiBit_error = 0x8,
- Nibble_error = 0x9,
- Checksum_error = 0xA,
- CRC_error = 0xB,
- Corrected_SingleBit_error = 0xC,
- Corrected_error = 0xD,
- Uncorrectable_error = 0xE
-};
-
-enum class MemoryErrorGranularity {
- Other = 0x1,
- Unknown = 0x2,
- Device_level = 0x3,
- Memory_partition_level = 0x4
-};
-
-enum class MemoryErrorOperation {
- Other = 0x1,
- Unknown = 0x2,
- Read = 0x3,
- Write = 0x4,
- Partial_Write = 0x5
-};
-
-struct [[gnu::packed]] MemoryArrayMappedAddress
-{ // Type 19
- TableHeader h;
- u32 starting_address;
- u32 ending_address;
- u16 memory_array_handle;
- u8 partition_width;
- u64 ext_starting_address;
- u64 ext_ending_address;
-};
-
-struct [[gnu::packed]] MemoryDeviceMappedAddress
-{ // Type 20
- TableHeader h;
- u32 starting_address;
- u32 ending_address;
- u16 memory_device_handle;
- u16 memory_array_mapped_handle;
- u8 partition_row_position;
- u8 interleave_position;
- u8 interleaved_data_depth;
- u64 ext_starting_address;
- u64 ext_ending_address;
-};
-
-struct [[gnu::packed]] BuiltinPointingDevice
-{ // Type 21
- TableHeader h;
- u8 type;
- u8 interface;
- u8 buttons_count;
-};
-
-enum class PointingDeviceType {
- Other = 0x1,
- Unknown = 0x2,
- Mouse = 0x3,
- Track_Ball = 0x4,
- Track_Point = 0x5,
- Glide_Point = 0x6,
- Touch_Pad = 0x7,
- Touch_Screen = 0x8,
- Optical_Sensor = 0x9
-};
-
-enum class PointingDeviceInterface {
- Other = 0x1,
- Unknown = 0x2,
- Serial = 0x3,
- PS2 = 0x4,
- Infrared = 0x5,
- HP_HIL = 0x6,
- Bus_mouse = 0x7,
- AppleDesktopBus = 0x8,
- Bus_mouse_DB9 = 0xA0,
- Bus_mouse_microDIN = 0xA1,
- USB = 0xA2
-};
-
-struct [[gnu::packed]] PortableBattery
-{ // Type 22
- TableHeader h;
- u8 location_str_number;
- u8 manufacturer_str_number;
- u8 manufacture_date_str_number;
- u8 serial_number_str_number;
- u8 device_name_str_number;
- u8 device_chemistry;
- u16 design_capacity;
- u16 design_voltage;
- u8 sbds_version_number;
- u8 max_error_battery_data;
- u16 sbds_serial_number;
- u16 sbds_manufacture_date;
- u8 sbds_device_chemistry_str_number;
- u8 design_capacity_multiplier;
- u32 oem_specific;
-};
-
-enum class PortableBatteryChemistry {
- Other = 0x1,
- Unknown = 0x2,
- Lead_Acid = 0x3,
- Nickel_Cadmium = 0x4,
- Nickel_metal_hydride = 0x5,
- Lithium_ion = 0x6,
- Zinc_air = 0x7,
- Lithium_polymer = 0x8
-};
-
-struct [[gnu::packed]] SysReset
-{ // Type 23
- TableHeader h;
- u8 capabilities;
- u16 reset_count;
- u16 reset_limit;
- u16 timer_interval;
- u16 timeout;
-};
-
-struct [[gnu::packed]] HardwareSecurity
-{ // Type 24
- TableHeader h;
- u8 hardware_security_settings;
-};
-
-struct [[gnu::packed]] SysPowerControls
-{ // Type 25
- TableHeader h;
- u8 next_scheduled_power_on_month;
- u8 next_scheduled_power_on_day_of_month;
- u8 next_scheduled_power_on_hour;
- u8 next_scheduled_power_on_minute;
- u8 next_scheduled_power_on_second;
-};
-
-struct [[gnu::packed]] VoltageProbe
-{ // Type 26
- TableHeader h;
- u8 description_str_number;
- u8 location_and_status;
- u16 max_value;
- u16 min_value;
- u16 resolution;
- u16 tolerance;
- u16 accuracy;
- u32 oem_defined;
- u16 nominal_value;
-};
-
-struct [[gnu::packed]] CoolingDevice
-{ // Type 27
- TableHeader h;
- u16 temperature_probe_handle;
- u8 device_type_and_status;
- u8 cooling_unit_group;
- u32 oem_defined;
- u16 nominal_speed;
- u8 description_str_number;
-};
-
-struct [[gnu::packed]] TemperatureProbe
-{ // Type 28
- TableHeader h;
- u8 description_str_number;
- u8 location_and_status;
- u16 max_value;
- u16 min_value;
- u16 resolution;
- u16 tolerance;
- u16 accuracy;
- u32 oem_defined;
- u16 nominal_value;
-};
-
-struct [[gnu::packed]] ElectricalCurrentProbe
-{ // Type 29
- TableHeader h;
- u8 description_str_number;
- u8 location_and_status;
- u16 max_value;
- u16 min_value;
- u16 resolution;
- u16 tolerance;
- u16 accuracy;
- u32 oem_defined;
- u16 nominal_value;
-};
-
-struct [[gnu::packed]] OutOfBandRemoteAccess
-{ // Type 30
- TableHeader h;
- u8 manufacturer_name_str_number;
- u8 connections;
-};
-
-struct [[gnu::packed]] SystemBootInfo
-{ // Type 32
- TableHeader h;
- u8 reserved[6];
- u8 boot_status[10];
-};
-
-struct [[gnu::packed]] MemoryErrorInfo64Bit
-{ // Type 33
- TableHeader h;
- u8 error_type;
- u8 error_granularity;
- u8 error_operation;
- u32 vendor_syndrome;
- u64 memory_array_error_address;
- u64 device_error_address;
- u32 error_resolution;
-};
-
-struct [[gnu::packed]] ManagementDevice
-{ // Type 34
- TableHeader h;
- u8 description_str_number;
- u8 type;
- u32 address;
- u8 address_type;
-};
-
-enum class ManagementDeviceType {
- Other = 0x1,
- Unknown = 0x2,
- LM75 = 0x3,
- LM78 = 0x4,
- LM79 = 0x5,
- LM80 = 0x6,
- LM81 = 0x7,
- ADM9240 = 0x8,
- DS1780 = 0x9,
- Maxim_1617 = 0xA,
- GL518SM = 0xB, // Genesys GL518SM
- W83781D = 0xC, // Winbond W83781D
- HT82H791 = 0xD // Holtek HT82H791
-};
-
-enum class ManagementDeviceAddressType {
- Other = 0x1,
- Unknown = 0x2,
- IO_Port = 0x3,
- Memory = 0x4,
- SMBus = 0x5
-};
-
-struct [[gnu::packed]] ManagementDeviceComponent
-{ // Type 35
- TableHeader h;
- u8 description_str_number;
- u16 management_device_handle;
- u16 component_handle;
- u16 threshold_handle;
-};
-
-struct [[gnu::packed]] ManagementDeviceThresholdData
-{ // Type 36
- TableHeader h;
- u16 lower_threshold_non_critical;
- u16 upper_threshold_non_critical;
- u16 lower_threshold_critical;
- u16 upper_threshold_critical;
- u16 lower_threshold_non_recoverable;
- u16 upper_threshold_non_recoverable;
-};
-
-struct [[gnu::packed]] MemoryDeviceDescriptor
-{
- u8 device_load;
- u16 device_handle;
-};
-
-struct [[gnu::packed]] MemoryChannel
-{ // Type 37
- TableHeader h;
- u8 channel_type;
- u8 memory_device_count;
- MemoryDeviceDescriptor memory_devices_descriptors[];
-};
-
-enum class MemroryChannelType {
- Other = 0x1,
- Unknown = 0x2,
- RamBus = 0x3,
- SyncLink = 0x4
-};
-
-struct [[gnu::packed]] IPMIDeviceInfo
-{ // Type 38
- TableHeader h;
- u8 interface_type;
- u8 ipmi_spec_revision;
- u8 i2c_slave_address;
- u8 nv_storage_device_address;
- u64 base_address;
- u8 base_address_modifier;
- u8 interrupt_number;
-};
-
-enum class IPMIDeviceInfoBMCInterfaceType {
- Unknown = 0x1,
- KCS = 0x2, // KCS: Keyboard Controller Style
- SMIC = 0x3, // SMIC: Server Management Interface Chip
- BT = 0x4, // BT: Block Transfer
- SSIF = 0x5 // SSIF: SMBus System Interface
-};
-
-struct [[gnu::packed]] SysPowerSupply
-{ // Type 39
- TableHeader h;
- u8 power_unit_group;
- u8 location_str_number;
- u8 device_name_str_number;
- u8 manufacturer_str_number;
- u8 serial_number_str_number;
- u8 asset_tag_number_str_number;
- u8 model_part_number_str_number;
- u8 revision_level_str_number;
- u16 max_power_capacity;
- u16 power_supply_characteristics;
- u16 input_voltage_probe_handle;
- u16 cooling_device_handle;
- u16 input_current_probe_handle;
-};
-
-struct [[gnu::packed]] AdditionalInfoEntry
-{
- u8 entry_length;
- u16 referenced_handle;
- u8 referenced_offset;
- u8 string_number;
- u8 value[];
-};
-
-struct [[gnu::packed]] AdditionalInfo
-{ // Type 40
- TableHeader h;
- u8 additional_info_entries_count;
- AdditionalInfoEntry entries[];
-};
-
-struct [[gnu::packed]] OnboardDevicesExtendedInfo
-{ // Type 41
- TableHeader h;
- u8 reference_designation_str_number;
- u8 device_type;
- u8 device_type_instance;
- u16 segment_group_number;
- u8 bus_number;
- u8 device_function_number;
-};
-
-enum class OnboardDeviceType {
- Other = 0x1,
- Unknown = 0x2,
- Video = 0x3,
- SCSI_Controller = 0x4,
- Ethernet = 0x5,
- Token_Ring = 0x6,
- Sound = 0x7,
- PATA_Controller = 0x8,
- SATA_Controller = 0x9,
- SAS_Controller = 0xA
-};
-
-struct [[gnu::packed]] ManagementControllerHostInterface
-{ // Type 42
- TableHeader h;
- u8 interface_type;
- u8 interface_type_specific_data_length;
- u8 interface_type_specific_data[];
-};
-
-struct [[gnu::packed]] ProtocolRecordData
-{
- u8 protocol_type;
- u8 protocol_type_specific_data_length;
- u8 protocol_type_specific_data[];
-};
-
-struct [[gnu::packed]] ExtManagementControllerHostInterface
-{ // Type 42 Ext
- u8 protocol_records_count;
- ProtocolRecordData protocol_records[];
-};
-
-enum class ManagementControllerHostInterfaceProtocolType {
- IPMI = 0x2,
- MCTP = 0x3,
- RedfishOverIP = 0x4
-};
-
-struct [[gnu::packed]] TPMDevice
-{ // Type 43
- TableHeader h;
- char vendor_id[4];
- u8 major_spec_version;
- u8 minor_spec_version;
- u32 firmware_version_1;
- u32 firmware_version_2;
- u8 description_str_number;
- u64 characteristics;
- u32 oem_defined;
-};
-
-enum class TPMDeviceCharacteristics {
- Characteristics_not_supported = (1 << 2),
- Family_Configurable_1 = (1 << 3), // Family configurable via firmware update; for example, switching between TPM 1.2 and TPM 2.0.
- Family_Configurable_2 = (1 << 4), // Family configurable via platform software support, such as BIOS Setup; for example, switching between TPM 1.2 and TPM 2.0.
- Family_Configurable_3 = (1 << 5), // Family configurable via OEM proprietary mechanism; for example, switching between TPM 1.2 and TPM 2.0.
-};
-
-struct [[gnu::packed]] ProcessorSpecificBlock
-{
- u8 block_length;
- u8 processor_type;
- u8 processor_specific_data[];
-};
-
-struct [[gnu::packed]] ProcessorAdditionalInfo
-{ // Type 44
- TableHeader h;
- u16 referenced_handle;
- ProcessorSpecificBlock blocks[];
-};
-
-enum class ProcessorArchitectureType {
- IA32 = 0x1,
- x86_64 = 0x2,
- Itanium = 0x3,
- ARM32bit = 0x4,
- ARM64bit = 0x5,
- RISC_V_32bit = 0x6,
- RISC_V_64bit = 0x7,
- RISC_V_128bit = 0x8
-};
-
-struct [[gnu::packed]] Inactive
-{ // Type 126
- TableHeader h;
-};
-
-struct [[gnu::packed]] EndOfTable
-{ // Type 127
- TableHeader h;
-};
-}
-
-class DMIDecoder {
-public:
- static DMIDecoder& the();
- static void initialize();
- static void initialize_untrusted();
- Vector<SMBIOS::PhysicalMemoryArray*>& get_physical_memory_areas();
- bool is_reliable();
- u64 get_bios_characteristics();
-
-private:
- void enumerate_smbios_tables();
- PhysicalAddress get_next_physical_table(PhysicalAddress p_table);
- PhysicalAddress get_smbios_physical_table_by_handle(u16 handle);
- PhysicalAddress get_smbios_physical_table_by_type(u8 table_type);
- char* get_smbios_string(PhysicalAddress, u8 string_number);
- size_t get_table_size(PhysicalAddress);
-
- explicit DMIDecoder(bool trusted);
- void initialize_parser();
-
- void set_64_bit_entry_initialization_values(PhysicalAddress);
- void set_32_bit_entry_initialization_values(PhysicalAddress);
-
- PhysicalAddress find_entry32bit_point();
- PhysicalAddress find_entry64bit_point();
-
- PhysicalAddress m_entry32bit_point;
- PhysicalAddress m_entry64bit_point;
- PhysicalAddress m_structure_table;
- u32 m_structures_count;
- u32 m_table_length;
- bool m_use_64bit_entry;
- bool m_operable;
- bool m_untrusted;
-
- SinglyLinkedList<PhysicalAddress> m_smbios_tables;
-};
-
-}
diff --git a/Kernel/CMakeLists.txt b/Kernel/CMakeLists.txt
index 1e5797c790..c6e8fc24dc 100644
--- a/Kernel/CMakeLists.txt
+++ b/Kernel/CMakeLists.txt
@@ -1,5 +1,4 @@
set(KERNEL_SOURCES
- ACPI/DMIDecoder.cpp
ACPI/DynamicParser.cpp
ACPI/Initialize.cpp
ACPI/MultiProcessorParser.cpp
diff --git a/Kernel/init.cpp b/Kernel/init.cpp
index 7e9006d8cd..dc82ec79f3 100644
--- a/Kernel/init.cpp
+++ b/Kernel/init.cpp
@@ -25,7 +25,6 @@
*/
#include <AK/Types.h>
-#include <Kernel/ACPI/DMIDecoder.h>
#include <Kernel/ACPI/DynamicParser.h>
#include <Kernel/ACPI/Initialize.h>
#include <Kernel/ACPI/MultiProcessorParser.h>
@@ -229,13 +228,6 @@ void init_stage2()
new SB16;
VMWareBackdoor::initialize();
- bool dmi_unreliable = kernel_command_line().contains("dmi_unreliable");
- if (dmi_unreliable) {
- DMIDecoder::initialize_untrusted();
- } else {
- DMIDecoder::initialize();
- }
-
bool force_pio = kernel_command_line().contains("force_pio");
auto root = kernel_command_line().lookup("root").value_or("/dev/hda");