diff --git a/Kernel/ACPI/DMIDecoder.h b/Kernel/ACPI/DMIDecoder.h index 0866f71ade..9de4f71729 100644 --- a/Kernel/ACPI/DMIDecoder.h +++ b/Kernel/ACPI/DMIDecoder.h @@ -36,1352 +36,1352 @@ 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; -}; + 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 {