mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 04:07:35 +00:00
Kernel: Change ACPI & DMI definitions a bit
Structures declarations changed __attribute__((__packed__)) to [[gnu::packed]] in ACPI & DMI definitions. Also, declarations of array of pointers in ACPI RSDT/XSDT are correct now. In addition to that, now we have a declaration of the ACPI MADT table & the table entries.
This commit is contained in:
parent
c2ef7f740b
commit
2da8aba48d
2 changed files with 213 additions and 137 deletions
|
@ -7,16 +7,18 @@
|
||||||
#include <Kernel/VM/VirtualAddress.h>
|
#include <Kernel/VM/VirtualAddress.h>
|
||||||
|
|
||||||
namespace SMBIOS {
|
namespace SMBIOS {
|
||||||
struct LegacyEntryPoint32bit {
|
struct [[gnu::packed]] LegacyEntryPoint32bit
|
||||||
|
{
|
||||||
char legacy_sig[5];
|
char legacy_sig[5];
|
||||||
u8 checksum2;
|
u8 checksum2;
|
||||||
u16 smboios_table_length;
|
u16 smboios_table_length;
|
||||||
u32 smbios_table_ptr;
|
u32 smbios_table_ptr;
|
||||||
u16 smbios_tables_count;
|
u16 smbios_tables_count;
|
||||||
u8 smbios_bcd_revision;
|
u8 smbios_bcd_revision;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct EntryPoint32bit {
|
struct [[gnu::packed]] EntryPoint32bit
|
||||||
|
{
|
||||||
char sig[4];
|
char sig[4];
|
||||||
u8 checksum;
|
u8 checksum;
|
||||||
u8 length;
|
u8 length;
|
||||||
|
@ -26,9 +28,10 @@ struct EntryPoint32bit {
|
||||||
u8 implementation_revision;
|
u8 implementation_revision;
|
||||||
char formatted_area[5];
|
char formatted_area[5];
|
||||||
LegacyEntryPoint32bit legacy_structure;
|
LegacyEntryPoint32bit legacy_structure;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct EntryPoint64bit {
|
struct [[gnu::packed]] EntryPoint64bit
|
||||||
|
{
|
||||||
char sig[5];
|
char sig[5];
|
||||||
u8 checksum;
|
u8 checksum;
|
||||||
u8 length;
|
u8 length;
|
||||||
|
@ -39,13 +42,14 @@ struct EntryPoint64bit {
|
||||||
u8 reserved;
|
u8 reserved;
|
||||||
u32 table_maximum_size;
|
u32 table_maximum_size;
|
||||||
u64 table_ptr;
|
u64 table_ptr;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct TableHeader {
|
struct [[gnu::packed]] TableHeader
|
||||||
|
{
|
||||||
u8 type;
|
u8 type;
|
||||||
u8 length;
|
u8 length;
|
||||||
u16 handle;
|
u16 handle;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
enum class TableType {
|
enum class TableType {
|
||||||
BIOSInfo = 0,
|
BIOSInfo = 0,
|
||||||
|
@ -93,7 +97,8 @@ enum class TableType {
|
||||||
EndOfTable = 127
|
EndOfTable = 127
|
||||||
};
|
};
|
||||||
|
|
||||||
struct BIOSInfo { // Type 0
|
struct [[gnu::packed]] BIOSInfo
|
||||||
|
{ // Type 0
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 bios_vendor_str_number;
|
u8 bios_vendor_str_number;
|
||||||
u8 bios_version_str_number;
|
u8 bios_version_str_number;
|
||||||
|
@ -102,7 +107,7 @@ struct BIOSInfo { // Type 0
|
||||||
u8 bios_rom_size;
|
u8 bios_rom_size;
|
||||||
u64 bios_characteristics;
|
u64 bios_characteristics;
|
||||||
u8 ext_bios_characteristics[];
|
u8 ext_bios_characteristics[];
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
enum class BIOSCharacteristics {
|
enum class BIOSCharacteristics {
|
||||||
Unknown = (1 << 2),
|
Unknown = (1 << 2),
|
||||||
|
@ -137,15 +142,17 @@ enum class BIOSCharacteristics {
|
||||||
nec_pc98 = (1 << 31)
|
nec_pc98 = (1 << 31)
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExtBIOSInfo {
|
struct [[gnu::packed]] ExtBIOSInfo
|
||||||
|
{
|
||||||
u8 bios_major_release;
|
u8 bios_major_release;
|
||||||
u8 bios_minor_release;
|
u8 bios_minor_release;
|
||||||
u8 embedded_controller_firmware_major_release;
|
u8 embedded_controller_firmware_major_release;
|
||||||
u8 embedded_controller_firmware_minor_release;
|
u8 embedded_controller_firmware_minor_release;
|
||||||
u16 ext_bios_rom_size;
|
u16 ext_bios_rom_size;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct SysInfo { // Type 1
|
struct [[gnu::packed]] SysInfo
|
||||||
|
{ // Type 1
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 manufacturer_str_number;
|
u8 manufacturer_str_number;
|
||||||
u8 product_name_str_number;
|
u8 product_name_str_number;
|
||||||
|
@ -155,8 +162,7 @@ struct SysInfo { // Type 1
|
||||||
u8 wake_up_type;
|
u8 wake_up_type;
|
||||||
u8 sku_str_number;
|
u8 sku_str_number;
|
||||||
u8 family_str_number;
|
u8 family_str_number;
|
||||||
|
};
|
||||||
} __attribute__((packed));
|
|
||||||
|
|
||||||
enum class WakeUpType {
|
enum class WakeUpType {
|
||||||
Reserved = 0,
|
Reserved = 0,
|
||||||
|
@ -170,7 +176,8 @@ enum class WakeUpType {
|
||||||
AC_RESTORE = 8,
|
AC_RESTORE = 8,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ModuleInfo { // Type 2
|
struct [[gnu::packed]] ModuleInfo
|
||||||
|
{ // Type 2
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 manufacturer_str_number;
|
u8 manufacturer_str_number;
|
||||||
u8 product_name_str_number;
|
u8 product_name_str_number;
|
||||||
|
@ -183,7 +190,7 @@ struct ModuleInfo { // Type 2
|
||||||
u8 board_type;
|
u8 board_type;
|
||||||
u8 contained_object_handles_count;
|
u8 contained_object_handles_count;
|
||||||
u16 contained_object_handles[];
|
u16 contained_object_handles[];
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
enum class BoardType {
|
enum class BoardType {
|
||||||
Unkown = 0x1,
|
Unkown = 0x1,
|
||||||
|
@ -201,7 +208,8 @@ enum class BoardType {
|
||||||
Interconnect_Board = 0xD,
|
Interconnect_Board = 0xD,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SysEnclosure { // Type 3
|
struct [[gnu::packed]] SysEnclosure
|
||||||
|
{ // Type 3
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 manufacturer_str_number;
|
u8 manufacturer_str_number;
|
||||||
u8 type;
|
u8 type;
|
||||||
|
@ -217,11 +225,12 @@ struct SysEnclosure { // Type 3
|
||||||
u8 power_cords_number;
|
u8 power_cords_number;
|
||||||
u8 contained_element_count;
|
u8 contained_element_count;
|
||||||
u8 contained_element_record_length;
|
u8 contained_element_record_length;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct ExtSysEnclosure {
|
struct [[gnu::packed]] ExtSysEnclosure
|
||||||
|
{
|
||||||
u8 sku_str_number;
|
u8 sku_str_number;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
enum class SysEnclosureType {
|
enum class SysEnclosureType {
|
||||||
Other = 0x1,
|
Other = 0x1,
|
||||||
|
@ -279,13 +288,15 @@ enum class SysEnclosureSecurityStatus {
|
||||||
External_Interface_Enabled = 0x5,
|
External_Interface_Enabled = 0x5,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SysEnclosureContainedElement {
|
struct [[gnu::packed]] SysEnclosureContainedElement
|
||||||
|
{
|
||||||
u8 type;
|
u8 type;
|
||||||
u8 min_contained_element_count;
|
u8 min_contained_element_count;
|
||||||
u8 max_contained_element_count;
|
u8 max_contained_element_count;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct ProcessorInfo { // Type 4
|
struct [[gnu::packed]] ProcessorInfo
|
||||||
|
{ // Type 4
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 socket_designation_str_number;
|
u8 socket_designation_str_number;
|
||||||
u8 processor_type;
|
u8 processor_type;
|
||||||
|
@ -313,7 +324,7 @@ struct ProcessorInfo { // Type 4
|
||||||
u16 core_count2;
|
u16 core_count2;
|
||||||
u16 core_enabled2;
|
u16 core_enabled2;
|
||||||
u16 thread_count2;
|
u16 thread_count2;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
enum class ProcessorType {
|
enum class ProcessorType {
|
||||||
Other = 0x1,
|
Other = 0x1,
|
||||||
|
@ -387,7 +398,8 @@ enum class ProcessorUpgrade {
|
||||||
Socket_BGA1528 = 0x3C
|
Socket_BGA1528 = 0x3C
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CacheInfo { // Type 7
|
struct [[gnu::packed]] CacheInfo
|
||||||
|
{ // Type 7
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 socket_designation_str_number;
|
u8 socket_designation_str_number;
|
||||||
u16 cache_config;
|
u16 cache_config;
|
||||||
|
@ -401,16 +413,17 @@ struct CacheInfo { // Type 7
|
||||||
u8 associativity;
|
u8 associativity;
|
||||||
u32 max_cache_size2;
|
u32 max_cache_size2;
|
||||||
u32 installed_size2;
|
u32 installed_size2;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct PortConnectorInfo { // Type 8
|
struct [[gnu::packed]] PortConnectorInfo
|
||||||
|
{ // Type 8
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 internal_reference_designator_str_number;
|
u8 internal_reference_designator_str_number;
|
||||||
u8 internal_connector_type;
|
u8 internal_connector_type;
|
||||||
u8 external_reference_designator_str_number;
|
u8 external_reference_designator_str_number;
|
||||||
u8 external_connector_type;
|
u8 external_connector_type;
|
||||||
u8 port_type;
|
u8 port_type;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
enum class ConnectorType {
|
enum class ConnectorType {
|
||||||
None = 0x0,
|
None = 0x0,
|
||||||
|
@ -499,14 +512,16 @@ enum class PortType {
|
||||||
Other = 0xFF
|
Other = 0xFF
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SystemSlotPeerGroup {
|
struct [[gnu::packed]] SystemSlotPeerGroup
|
||||||
|
{
|
||||||
u16 segment_group_number;
|
u16 segment_group_number;
|
||||||
u8 bus_number;
|
u8 bus_number;
|
||||||
u8 device_function_number;
|
u8 device_function_number;
|
||||||
u8 data_bus_width;
|
u8 data_bus_width;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct SystemSlots { // Type 9
|
struct [[gnu::packed]] SystemSlots
|
||||||
|
{ // Type 9
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 slot_designation_str_number;
|
u8 slot_designation_str_number;
|
||||||
u8 slot_type;
|
u8 slot_type;
|
||||||
|
@ -522,7 +537,7 @@ struct SystemSlots { // Type 9
|
||||||
u8 data_bus_width;
|
u8 data_bus_width;
|
||||||
u8 peer_grouping_count;
|
u8 peer_grouping_count;
|
||||||
SystemSlotPeerGroup peer_groups[];
|
SystemSlotPeerGroup peer_groups[];
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
enum class SlotType {
|
enum class SlotType {
|
||||||
Other = 0x1,
|
Other = 0x1,
|
||||||
|
@ -644,32 +659,37 @@ enum class SlotCharacteristics2 {
|
||||||
Support_Bifurcation = (1 << 3),
|
Support_Bifurcation = (1 << 3),
|
||||||
};
|
};
|
||||||
|
|
||||||
struct OEMStrings { // Type 11
|
struct [[gnu::packed]] OEMStrings
|
||||||
|
{ // Type 11
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 strings_count;
|
u8 strings_count;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct SysConfigOptions { // Type 12
|
struct [[gnu::packed]] SysConfigOptions
|
||||||
|
{ // Type 12
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 strings_count;
|
u8 strings_count;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct BIOSLanguageInfo { // Type 13
|
struct [[gnu::packed]] BIOSLanguageInfo
|
||||||
|
{ // Type 13
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 installable_langs_counts;
|
u8 installable_langs_counts;
|
||||||
u8 flags;
|
u8 flags;
|
||||||
u8 reserved[15];
|
u8 reserved[15];
|
||||||
u8 current_lang_str_number; // String number (one-based) of the currently installed language
|
u8 current_lang_str_number; // String number (one-based) of the currently installed language
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct GroupAssociations { // Type 14
|
struct [[gnu::packed]] GroupAssociations
|
||||||
|
{ // Type 14
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 group_name_str_number;
|
u8 group_name_str_number;
|
||||||
u8 item_type;
|
u8 item_type;
|
||||||
u16 item_handle;
|
u16 item_handle;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct SysEventLog { // Type 15
|
struct [[gnu::packed]] SysEventLog
|
||||||
|
{ // Type 15
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u16 log_area_length;
|
u16 log_area_length;
|
||||||
u16 log_header_start_offset;
|
u16 log_header_start_offset;
|
||||||
|
@ -682,9 +702,10 @@ struct SysEventLog { // Type 15
|
||||||
u8 supported_log_type_descriptors_count;
|
u8 supported_log_type_descriptors_count;
|
||||||
u8 log_type_descriptor_length;
|
u8 log_type_descriptor_length;
|
||||||
u8 supported_event_log_type_descriptor_list[];
|
u8 supported_event_log_type_descriptor_list[];
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct PhysicalMemoryArray { // Type 16
|
struct [[gnu::packed]] PhysicalMemoryArray
|
||||||
|
{ // Type 16
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 location;
|
u8 location;
|
||||||
u8 use;
|
u8 use;
|
||||||
|
@ -693,7 +714,7 @@ struct PhysicalMemoryArray { // Type 16
|
||||||
u16 memory_error_info_handle;
|
u16 memory_error_info_handle;
|
||||||
u16 memory_devices_count;
|
u16 memory_devices_count;
|
||||||
u64 ext_max_capacity;
|
u64 ext_max_capacity;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
enum class MemoryArrayLocation {
|
enum class MemoryArrayLocation {
|
||||||
Other = 0x1,
|
Other = 0x1,
|
||||||
|
@ -733,7 +754,8 @@ enum class MemoryArrayErrorCorrectionType {
|
||||||
CRC = 0x7
|
CRC = 0x7
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MemoryDevice { // Type 17
|
struct [[gnu::packed]] MemoryDevice
|
||||||
|
{ // Type 17
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u16 physical_memory_array_handle;
|
u16 physical_memory_array_handle;
|
||||||
u16 memory_error_info_handle;
|
u16 memory_error_info_handle;
|
||||||
|
@ -770,7 +792,7 @@ struct MemoryDevice { // Type 17
|
||||||
u64 logical_size;
|
u64 logical_size;
|
||||||
u32 ext_speed;
|
u32 ext_speed;
|
||||||
u32 ext_configured_memory_speed;
|
u32 ext_configured_memory_speed;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
enum class MemoryDeviceFormFactor {
|
enum class MemoryDeviceFormFactor {
|
||||||
Other = 0x1,
|
Other = 0x1,
|
||||||
|
@ -869,7 +891,7 @@ struct MemoryErrorInfo32Bit { // Type 18
|
||||||
u32 memory_array_error_address;
|
u32 memory_array_error_address;
|
||||||
u32 device_error_address;
|
u32 device_error_address;
|
||||||
u32 error_resolution;
|
u32 error_resolution;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
enum class MemoryErrorType {
|
enum class MemoryErrorType {
|
||||||
Other = 0x1,
|
Other = 0x1,
|
||||||
|
@ -903,7 +925,8 @@ enum class MemoryErrorOperation {
|
||||||
Partial_Write = 0x5
|
Partial_Write = 0x5
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MemoryArrayMappedAddress { // Type 19
|
struct [[gnu::packed]] MemoryArrayMappedAddress
|
||||||
|
{ // Type 19
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u32 starting_address;
|
u32 starting_address;
|
||||||
u32 ending_address;
|
u32 ending_address;
|
||||||
|
@ -911,9 +934,10 @@ struct MemoryArrayMappedAddress { // Type 19
|
||||||
u8 partition_width;
|
u8 partition_width;
|
||||||
u64 ext_starting_address;
|
u64 ext_starting_address;
|
||||||
u64 ext_ending_address;
|
u64 ext_ending_address;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct MemoryDeviceMappedAddress { // Type 20
|
struct [[gnu::packed]] MemoryDeviceMappedAddress
|
||||||
|
{ // Type 20
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u32 starting_address;
|
u32 starting_address;
|
||||||
u32 ending_address;
|
u32 ending_address;
|
||||||
|
@ -924,15 +948,15 @@ struct MemoryDeviceMappedAddress { // Type 20
|
||||||
u8 interleaved_data_depth;
|
u8 interleaved_data_depth;
|
||||||
u64 ext_starting_address;
|
u64 ext_starting_address;
|
||||||
u64 ext_ending_address;
|
u64 ext_ending_address;
|
||||||
|
};
|
||||||
|
|
||||||
} __attribute__((packed));
|
struct [[gnu::packed]] BuiltinPointingDevice
|
||||||
|
{ // Type 21
|
||||||
struct BuiltinPointingDevice { // Type 21
|
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 type;
|
u8 type;
|
||||||
u8 interface;
|
u8 interface;
|
||||||
u8 buttons_count;
|
u8 buttons_count;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
enum class PointingDeviceType {
|
enum class PointingDeviceType {
|
||||||
Other = 0x1,
|
Other = 0x1,
|
||||||
|
@ -960,7 +984,8 @@ enum class PointingDeviceInterface {
|
||||||
USB = 0xA2
|
USB = 0xA2
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PortableBattery { // Type 22
|
struct [[gnu::packed]] PortableBattery
|
||||||
|
{ // Type 22
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 location_str_number;
|
u8 location_str_number;
|
||||||
u8 manufacturer_str_number;
|
u8 manufacturer_str_number;
|
||||||
|
@ -977,7 +1002,7 @@ struct PortableBattery { // Type 22
|
||||||
u8 sbds_device_chemistry_str_number;
|
u8 sbds_device_chemistry_str_number;
|
||||||
u8 design_capacity_multiplier;
|
u8 design_capacity_multiplier;
|
||||||
u32 oem_specific;
|
u32 oem_specific;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
enum class PortableBatteryChemistry {
|
enum class PortableBatteryChemistry {
|
||||||
Other = 0x1,
|
Other = 0x1,
|
||||||
|
@ -990,30 +1015,34 @@ enum class PortableBatteryChemistry {
|
||||||
Lithium_polymer = 0x8
|
Lithium_polymer = 0x8
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SysReset { // Type 23
|
struct [[gnu::packed]] SysReset
|
||||||
|
{ // Type 23
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 capabilities;
|
u8 capabilities;
|
||||||
u16 reset_count;
|
u16 reset_count;
|
||||||
u16 reset_limit;
|
u16 reset_limit;
|
||||||
u16 timer_interval;
|
u16 timer_interval;
|
||||||
u16 timeout;
|
u16 timeout;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct HardwareSecurity { // Type 24
|
struct [[gnu::packed]] HardwareSecurity
|
||||||
|
{ // Type 24
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 hardware_security_settings;
|
u8 hardware_security_settings;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct SysPowerControls { // Type 25
|
struct [[gnu::packed]] SysPowerControls
|
||||||
|
{ // Type 25
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 next_scheduled_power_on_month;
|
u8 next_scheduled_power_on_month;
|
||||||
u8 next_scheduled_power_on_day_of_month;
|
u8 next_scheduled_power_on_day_of_month;
|
||||||
u8 next_scheduled_power_on_hour;
|
u8 next_scheduled_power_on_hour;
|
||||||
u8 next_scheduled_power_on_minute;
|
u8 next_scheduled_power_on_minute;
|
||||||
u8 next_scheduled_power_on_second;
|
u8 next_scheduled_power_on_second;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct VoltageProbe { // Type 26
|
struct [[gnu::packed]] VoltageProbe
|
||||||
|
{ // Type 26
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 description_str_number;
|
u8 description_str_number;
|
||||||
u8 location_and_status;
|
u8 location_and_status;
|
||||||
|
@ -1024,9 +1053,10 @@ struct VoltageProbe { // Type 26
|
||||||
u16 accuracy;
|
u16 accuracy;
|
||||||
u32 oem_defined;
|
u32 oem_defined;
|
||||||
u16 nominal_value;
|
u16 nominal_value;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct CoolingDevice { // Type 27
|
struct [[gnu::packed]] CoolingDevice
|
||||||
|
{ // Type 27
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u16 temperature_probe_handle;
|
u16 temperature_probe_handle;
|
||||||
u8 device_type_and_status;
|
u8 device_type_and_status;
|
||||||
|
@ -1034,9 +1064,10 @@ struct CoolingDevice { // Type 27
|
||||||
u32 oem_defined;
|
u32 oem_defined;
|
||||||
u16 nominal_speed;
|
u16 nominal_speed;
|
||||||
u8 description_str_number;
|
u8 description_str_number;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct TemperatureProbe { // Type 28
|
struct [[gnu::packed]] TemperatureProbe
|
||||||
|
{ // Type 28
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 description_str_number;
|
u8 description_str_number;
|
||||||
u8 location_and_status;
|
u8 location_and_status;
|
||||||
|
@ -1047,9 +1078,10 @@ struct TemperatureProbe { // Type 28
|
||||||
u16 accuracy;
|
u16 accuracy;
|
||||||
u32 oem_defined;
|
u32 oem_defined;
|
||||||
u16 nominal_value;
|
u16 nominal_value;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct ElectricalCurrentProbe { // Type 29
|
struct [[gnu::packed]] ElectricalCurrentProbe
|
||||||
|
{ // Type 29
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 description_str_number;
|
u8 description_str_number;
|
||||||
u8 location_and_status;
|
u8 location_and_status;
|
||||||
|
@ -1060,21 +1092,24 @@ struct ElectricalCurrentProbe { // Type 29
|
||||||
u16 accuracy;
|
u16 accuracy;
|
||||||
u32 oem_defined;
|
u32 oem_defined;
|
||||||
u16 nominal_value;
|
u16 nominal_value;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct OutOfBandRemoteAccess { // Type 30
|
struct [[gnu::packed]] OutOfBandRemoteAccess
|
||||||
|
{ // Type 30
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 manufacturer_name_str_number;
|
u8 manufacturer_name_str_number;
|
||||||
u8 connections;
|
u8 connections;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct SystemBootInfo { // Type 32
|
struct [[gnu::packed]] SystemBootInfo
|
||||||
|
{ // Type 32
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 reserved[6];
|
u8 reserved[6];
|
||||||
u8 boot_status[10];
|
u8 boot_status[10];
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct MemoryErrorInfo64Bit { // Type 33
|
struct [[gnu::packed]] MemoryErrorInfo64Bit
|
||||||
|
{ // Type 33
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 error_type;
|
u8 error_type;
|
||||||
u8 error_granularity;
|
u8 error_granularity;
|
||||||
|
@ -1083,15 +1118,16 @@ struct MemoryErrorInfo64Bit { // Type 33
|
||||||
u64 memory_array_error_address;
|
u64 memory_array_error_address;
|
||||||
u64 device_error_address;
|
u64 device_error_address;
|
||||||
u32 error_resolution;
|
u32 error_resolution;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct ManagementDevice { // Type 34
|
struct [[gnu::packed]] ManagementDevice
|
||||||
|
{ // Type 34
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 description_str_number;
|
u8 description_str_number;
|
||||||
u8 type;
|
u8 type;
|
||||||
u32 address;
|
u32 address;
|
||||||
u8 address_type;
|
u8 address_type;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
enum class ManagementDeviceType {
|
enum class ManagementDeviceType {
|
||||||
Other = 0x1,
|
Other = 0x1,
|
||||||
|
@ -1117,15 +1153,17 @@ enum class ManagementDeviceAddressType {
|
||||||
SMBus = 0x5
|
SMBus = 0x5
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ManagementDeviceComponent { // Type 35
|
struct [[gnu::packed]] ManagementDeviceComponent
|
||||||
|
{ // Type 35
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 description_str_number;
|
u8 description_str_number;
|
||||||
u16 management_device_handle;
|
u16 management_device_handle;
|
||||||
u16 component_handle;
|
u16 component_handle;
|
||||||
u16 threshold_handle;
|
u16 threshold_handle;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct ManagementDeviceThresholdData { // Type 36
|
struct [[gnu::packed]] ManagementDeviceThresholdData
|
||||||
|
{ // Type 36
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u16 lower_threshold_non_critical;
|
u16 lower_threshold_non_critical;
|
||||||
u16 upper_threshold_non_critical;
|
u16 upper_threshold_non_critical;
|
||||||
|
@ -1133,19 +1171,21 @@ struct ManagementDeviceThresholdData { // Type 36
|
||||||
u16 upper_threshold_critical;
|
u16 upper_threshold_critical;
|
||||||
u16 lower_threshold_non_recoverable;
|
u16 lower_threshold_non_recoverable;
|
||||||
u16 upper_threshold_non_recoverable;
|
u16 upper_threshold_non_recoverable;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct MemoryDeviceDescriptor {
|
struct [[gnu::packed]] MemoryDeviceDescriptor
|
||||||
|
{
|
||||||
u8 device_load;
|
u8 device_load;
|
||||||
u16 device_handle;
|
u16 device_handle;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct MemoryChannel { // Type 37
|
struct [[gnu::packed]] MemoryChannel
|
||||||
|
{ // Type 37
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 channel_type;
|
u8 channel_type;
|
||||||
u8 memory_device_count;
|
u8 memory_device_count;
|
||||||
MemoryDeviceDescriptor memory_devices_descriptors[];
|
MemoryDeviceDescriptor memory_devices_descriptors[];
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
enum class MemroryChannelType {
|
enum class MemroryChannelType {
|
||||||
Other = 0x1,
|
Other = 0x1,
|
||||||
|
@ -1154,7 +1194,8 @@ enum class MemroryChannelType {
|
||||||
SyncLink = 0x4
|
SyncLink = 0x4
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IPMIDeviceInfo { // Type 38
|
struct [[gnu::packed]] IPMIDeviceInfo
|
||||||
|
{ // Type 38
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 interface_type;
|
u8 interface_type;
|
||||||
u8 ipmi_spec_revision;
|
u8 ipmi_spec_revision;
|
||||||
|
@ -1163,7 +1204,7 @@ struct IPMIDeviceInfo { // Type 38
|
||||||
u64 base_address;
|
u64 base_address;
|
||||||
u8 base_address_modifier;
|
u8 base_address_modifier;
|
||||||
u8 interrupt_number;
|
u8 interrupt_number;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
enum class IPMIDeviceInfoBMCInterfaceType {
|
enum class IPMIDeviceInfoBMCInterfaceType {
|
||||||
Unknown = 0x1,
|
Unknown = 0x1,
|
||||||
|
@ -1173,7 +1214,8 @@ enum class IPMIDeviceInfoBMCInterfaceType {
|
||||||
SSIF = 0x5 // SSIF: SMBus System Interface
|
SSIF = 0x5 // SSIF: SMBus System Interface
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SysPowerSupply { // Type 39
|
struct [[gnu::packed]] SysPowerSupply
|
||||||
|
{ // Type 39
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 power_unit_group;
|
u8 power_unit_group;
|
||||||
u8 location_str_number;
|
u8 location_str_number;
|
||||||
|
@ -1188,23 +1230,26 @@ struct SysPowerSupply { // Type 39
|
||||||
u16 input_voltage_probe_handle;
|
u16 input_voltage_probe_handle;
|
||||||
u16 cooling_device_handle;
|
u16 cooling_device_handle;
|
||||||
u16 input_current_probe_handle;
|
u16 input_current_probe_handle;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct AdditionalInfoEntry {
|
struct [[gnu::packed]] AdditionalInfoEntry
|
||||||
|
{
|
||||||
u8 entry_length;
|
u8 entry_length;
|
||||||
u16 referenced_handle;
|
u16 referenced_handle;
|
||||||
u8 referenced_offset;
|
u8 referenced_offset;
|
||||||
u8 string_number;
|
u8 string_number;
|
||||||
u8 value[];
|
u8 value[];
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct AdditionalInfo { // Type 40
|
struct [[gnu::packed]] AdditionalInfo
|
||||||
|
{ // Type 40
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 additional_info_entries_count;
|
u8 additional_info_entries_count;
|
||||||
AdditionalInfoEntry entries[];
|
AdditionalInfoEntry entries[];
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct OnboardDevicesExtendedInfo { // Type 41
|
struct [[gnu::packed]] OnboardDevicesExtendedInfo
|
||||||
|
{ // Type 41
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 reference_designation_str_number;
|
u8 reference_designation_str_number;
|
||||||
u8 device_type;
|
u8 device_type;
|
||||||
|
@ -1212,7 +1257,7 @@ struct OnboardDevicesExtendedInfo { // Type 41
|
||||||
u16 segment_group_number;
|
u16 segment_group_number;
|
||||||
u8 bus_number;
|
u8 bus_number;
|
||||||
u8 device_function_number;
|
u8 device_function_number;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
enum class OnboardDeviceType {
|
enum class OnboardDeviceType {
|
||||||
Other = 0x1,
|
Other = 0x1,
|
||||||
|
@ -1227,23 +1272,26 @@ enum class OnboardDeviceType {
|
||||||
SAS_Controller = 0xA
|
SAS_Controller = 0xA
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ManagementControllerHostInterface { // Type 42
|
struct [[gnu::packed]] ManagementControllerHostInterface
|
||||||
|
{ // Type 42
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u8 interface_type;
|
u8 interface_type;
|
||||||
u8 interface_type_specific_data_length;
|
u8 interface_type_specific_data_length;
|
||||||
u8 interface_type_specific_data[];
|
u8 interface_type_specific_data[];
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct ProtocolRecordData {
|
struct [[gnu::packed]] ProtocolRecordData
|
||||||
|
{
|
||||||
u8 protocol_type;
|
u8 protocol_type;
|
||||||
u8 protocol_type_specific_data_length;
|
u8 protocol_type_specific_data_length;
|
||||||
u8 protocol_type_specific_data[];
|
u8 protocol_type_specific_data[];
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct ExtManagementControllerHostInterface { // Type 42 Ext
|
struct [[gnu::packed]] ExtManagementControllerHostInterface
|
||||||
|
{ // Type 42 Ext
|
||||||
u8 protocol_records_count;
|
u8 protocol_records_count;
|
||||||
ProtocolRecordData protocol_records[];
|
ProtocolRecordData protocol_records[];
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
enum class ManagementControllerHostInterfaceProtocolType {
|
enum class ManagementControllerHostInterfaceProtocolType {
|
||||||
IPMI = 0x2,
|
IPMI = 0x2,
|
||||||
|
@ -1251,7 +1299,8 @@ enum class ManagementControllerHostInterfaceProtocolType {
|
||||||
RedfishOverIP = 0x4
|
RedfishOverIP = 0x4
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TPMDevice { // Type 43
|
struct [[gnu::packed]] TPMDevice
|
||||||
|
{ // Type 43
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
char vendor_id[4];
|
char vendor_id[4];
|
||||||
u8 major_spec_version;
|
u8 major_spec_version;
|
||||||
|
@ -1261,7 +1310,7 @@ struct TPMDevice { // Type 43
|
||||||
u8 description_str_number;
|
u8 description_str_number;
|
||||||
u64 characteristics;
|
u64 characteristics;
|
||||||
u32 oem_defined;
|
u32 oem_defined;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
enum class TPMDeviceCharacteristics {
|
enum class TPMDeviceCharacteristics {
|
||||||
Characteristics_not_supported = (1 << 2),
|
Characteristics_not_supported = (1 << 2),
|
||||||
|
@ -1270,17 +1319,19 @@ enum class TPMDeviceCharacteristics {
|
||||||
Family_Configurable_3 = (1 << 5), // Family configurable via OEM proprietary mechanism; 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 ProcessorSpecificBlock {
|
struct [[gnu::packed]] ProcessorSpecificBlock
|
||||||
|
{
|
||||||
u8 block_length;
|
u8 block_length;
|
||||||
u8 processor_type;
|
u8 processor_type;
|
||||||
u8 processor_specific_data[];
|
u8 processor_specific_data[];
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct ProcessorAdditionalInfo { // Type 44
|
struct [[gnu::packed]] ProcessorAdditionalInfo
|
||||||
|
{ // Type 44
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
u16 referenced_handle;
|
u16 referenced_handle;
|
||||||
ProcessorSpecificBlock blocks[];
|
ProcessorSpecificBlock blocks[];
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
enum class ProcessorArchitectureType {
|
enum class ProcessorArchitectureType {
|
||||||
IA32 = 0x1,
|
IA32 = 0x1,
|
||||||
|
@ -1293,13 +1344,15 @@ enum class ProcessorArchitectureType {
|
||||||
RISC_V_128bit = 0x8
|
RISC_V_128bit = 0x8
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Inactive { // Type 126
|
struct [[gnu::packed]] Inactive
|
||||||
|
{ // Type 126
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
} __attribute__((packed));
|
};
|
||||||
|
|
||||||
struct EndOfTable { // Type 127
|
struct [[gnu::packed]] EndOfTable
|
||||||
|
{ // Type 127
|
||||||
TableHeader h;
|
TableHeader h;
|
||||||
} __attribute__((packed));
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
class DMIDecoder {
|
class DMIDecoder {
|
||||||
|
|
|
@ -6,23 +6,26 @@
|
||||||
|
|
||||||
namespace ACPI_RAW {
|
namespace ACPI_RAW {
|
||||||
|
|
||||||
struct RSDPDescriptor {
|
struct [[gnu::packed]] RSDPDescriptor
|
||||||
|
{
|
||||||
char sig[8];
|
char sig[8];
|
||||||
u8 checksum;
|
u8 checksum;
|
||||||
char oem_id[6];
|
char oem_id[6];
|
||||||
u8 revision;
|
u8 revision;
|
||||||
u32 rsdt_ptr;
|
u32 rsdt_ptr;
|
||||||
} __attribute__((__packed__));
|
};
|
||||||
|
|
||||||
struct RSDPDescriptor20 {
|
struct [[gnu::packed]] RSDPDescriptor20
|
||||||
|
{
|
||||||
RSDPDescriptor base;
|
RSDPDescriptor base;
|
||||||
u32 length;
|
u32 length;
|
||||||
u64 xsdt_ptr;
|
u64 xsdt_ptr;
|
||||||
u8 ext_checksum;
|
u8 ext_checksum;
|
||||||
u8 reserved[3];
|
u8 reserved[3];
|
||||||
} __attribute__((__packed__));
|
};
|
||||||
|
|
||||||
struct SDTHeader {
|
struct [[gnu::packed]] SDTHeader
|
||||||
|
{
|
||||||
char sig[4];
|
char sig[4];
|
||||||
u32 length;
|
u32 length;
|
||||||
u8 revision;
|
u8 revision;
|
||||||
|
@ -32,27 +35,31 @@ struct SDTHeader {
|
||||||
u32 oem_revision;
|
u32 oem_revision;
|
||||||
u32 creator_id;
|
u32 creator_id;
|
||||||
u32 creator_revision;
|
u32 creator_revision;
|
||||||
} __attribute__((__packed__));
|
};
|
||||||
|
|
||||||
struct RSDT {
|
struct [[gnu::packed]] RSDT
|
||||||
|
{
|
||||||
SDTHeader h;
|
SDTHeader h;
|
||||||
u32 table_ptrs[1];
|
u32 table_ptrs[];
|
||||||
} __attribute__((__packed__));
|
};
|
||||||
|
|
||||||
struct XSDT {
|
struct [[gnu::packed]] XSDT
|
||||||
|
{
|
||||||
SDTHeader h;
|
SDTHeader h;
|
||||||
u64 table_ptrs[1];
|
u64 table_ptrs[];
|
||||||
} __attribute__((__packed__));
|
};
|
||||||
|
|
||||||
struct GenericAddressStructure {
|
struct [[gnu::packed]] GenericAddressStructure
|
||||||
|
{
|
||||||
u8 address_space;
|
u8 address_space;
|
||||||
u8 bit_width;
|
u8 bit_width;
|
||||||
u8 bit_offset;
|
u8 bit_offset;
|
||||||
u8 access_size;
|
u8 access_size;
|
||||||
u64 address;
|
u64 address;
|
||||||
} __attribute__((__packed__));
|
};
|
||||||
|
|
||||||
struct FADT {
|
struct [[gnu::packed]] FADT
|
||||||
|
{
|
||||||
SDTHeader h;
|
SDTHeader h;
|
||||||
u32 firmware_ctrl;
|
u32 firmware_ctrl;
|
||||||
u32 dsdt_ptr;
|
u32 dsdt_ptr;
|
||||||
|
@ -109,28 +116,44 @@ struct FADT {
|
||||||
GenericAddressStructure sleep_control;
|
GenericAddressStructure sleep_control;
|
||||||
GenericAddressStructure sleep_status;
|
GenericAddressStructure sleep_status;
|
||||||
u64 hypervisor_vendor_identity;
|
u64 hypervisor_vendor_identity;
|
||||||
|
|
||||||
} __attribute__((__packed__));
|
|
||||||
|
|
||||||
struct MADT : public SDTHeader {
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct DSDT : public SDTHeader {
|
struct [[gnu::packed]] MADTEntry
|
||||||
|
{
|
||||||
|
u8 type;
|
||||||
|
u8 length;
|
||||||
|
char data[];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PCI_MMIO_Descriptor {
|
struct [[gnu::packed]] MADT
|
||||||
|
{
|
||||||
|
SDTHeader h;
|
||||||
|
u32 lapic_address;
|
||||||
|
u32 flags;
|
||||||
|
MADTEntry entries[];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct [[gnu::packed]] AMLTable
|
||||||
|
{
|
||||||
|
SDTHeader h;
|
||||||
|
char aml_code[];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct [[gnu::packed]] PCI_MMIO_Descriptor
|
||||||
|
{
|
||||||
u64 base_addr;
|
u64 base_addr;
|
||||||
u16 seg_group_number;
|
u16 seg_group_number;
|
||||||
u8 start_pci_bus;
|
u8 start_pci_bus;
|
||||||
u8 end_pci_bus;
|
u8 end_pci_bus;
|
||||||
u32 reserved;
|
u32 reserved;
|
||||||
} __attribute__((__packed__));
|
};
|
||||||
|
|
||||||
struct MCFG {
|
struct [[gnu::packed]] MCFG
|
||||||
|
{
|
||||||
SDTHeader header;
|
SDTHeader header;
|
||||||
u64 reserved;
|
u64 reserved;
|
||||||
PCI_MMIO_Descriptor descriptors[];
|
PCI_MMIO_Descriptor descriptors[];
|
||||||
} __attribute__((__packed__));
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
class ACPIStaticParser;
|
class ACPIStaticParser;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue