Przeglądaj źródła

Kernel: Run clang-format on DMIDecoder header file

Liav A 5 lat temu
rodzic
commit
16a5b6f7fb
1 zmienionych plików z 1346 dodań i 1346 usunięć
  1. 1346 1346
      Kernel/ACPI/DMIDecoder.h

+ 1346 - 1346
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 {