Fixes and improvements to ACPI related structures and definitions

This commit is contained in:
Rafal Kupiec 2024-06-03 21:17:31 +02:00
parent 7f922dd864
commit 9124574bc5
Signed by: belliash
GPG Key ID: 4E829243E0CFE6B4
3 changed files with 134 additions and 12 deletions

View File

@ -9,25 +9,54 @@
#ifndef __XTDK_HLTYPES_H
#define __XTDK_HLTYPES_H
#include <xtbase.h>
#include <xtdefs.h>
#include <xttypes.h>
/* ACPI Root System Description Pointer (RSDP) signature */
#define ACPI_RSDP_SIGNATURE 0x2052545020445352
/* ACPI table signatures */
#define ACPI_APIC_SIGNATURE 0x43495041 /* MADT/APIC Description Table */
#define ACPI_BERT_SIGNATURE 0x54524542 /* Boot Error Record Table */
#define ACPI_BGRT_SIGNATURE 0x54524742 /* Boot Graphics Record Table */
#define ACPI_BOOT_SIGNATURE 0x544F4F42 /* ACPI BOOT Table */
#define ACPI_CPEP_SIGNATURE 0x50455043 /* Corrected Platform Error Polling Table */
#define ACPI_DBG2_SIGNATURE 0x32474244 /* Debug Port Table v2 */
#define ACPI_DBGP_SIGNATURE 0x50474244 /* Debug Port Table */
#define ACPI_DMAR_SIGNATURE 0x52414D44 /* DMA Remapping Table */
#define ACPI_DSDT_SIGNATURE 0x54445344 /* Differentiated System Description Table */
#define ACPI_ECDT_SIGNATURE 0x54444345 /* Embedded Controller Description Table */
#define ACPI_ERST_SIGNATURE 0x54535245 /* Error Record Serialization Table */
#define ACPI_FACS_SIGNATURE 0x53434146 /* Firmware ACPI Control Structure */
#define ACPI_FADT_SIGNATURE 0x50434146 /* Fixed ACPI Description Table */
#define ACPI_FBPT_SIGNATURE 0x54504246 /* Firmware Boot Performance Table */
#define ACPI_FPDT_SIGNATURE 0x54445046 /* Firmware Performance Data Table */
#define ACPI_GTDT_SIGNATURE 0x54445447 /* Generic Timer Description Table */
#define ACPI_HPET_SIGNATURE 0x54455048 /* High Precision Event Timer */
#define ACPI_IVRS_SIGNATURE 0x53525649 /* AMD IOMMU Resource Table */
#define ACPI_MADT_SIGNATURE 0x43495041 /* MADT/APIC Description Table */
#define ACPI_MCFG_SIGNATURE 0x4746434D /* Memory Mapped Configuration Space Access Table */
#define ACPI_MPST_SIGNATURE 0x5453504D /* Memory Power State Table*/
#define ACPI_MSCT_SIGNATURE 0x5443534D /* Maximum System Characteristics Table */
#define ACPI_NFIT_SIGNATURE 0x5449464E /* NVDIMM Firmware Interface Table */
#define ACPI_PMMT_SIGNATURE 0x544D4D50 /* Platform Memory Topology Table */
#define ACPI_PSDT_SIGNATURE 0x54445350 /* Persistent System Description Table */
#define ACPI_RAS2_SIGNATURE 0x32534152 /* ACPI RAS2 Feature Table */
#define ACPI_RASF_SIGNATURE 0x46534152 /* ACPI RAS Feature Table */
#define ACPI_RSDT_SIGNATURE 0x54445352 /* Root System Description Table */
#define ACPI_SBST_SIGNATURE 0x54534253 /* Smart Battery Subsystem Table */
#define ACPI_SSDT_SIGNATURE 0x54445353 /* Secondary System Descriptor Table */
#define ACPI_SDEV_SIGNATURE 0x56454453 /* Secure Device Table */
#define ACPI_SLIT_SIGNATURE 0x54494C53 /* System Locality Distance Information Table */
#define ACPI_SPCR_SIGNATURE 0x52435053 /* Serial Port Console Redirection Table */
#define ACPI_SRAT_SIGNATURE 0x54415253 /* Static Resource Affinity Table */
#define ACPI_SSDT_SIGNATURE 0x54445353 /* Secondary System Descriptor Table */
#define ACPI_TPM2_SIGNATURE 0x324D5054 /* ACPI TPM 2.0 Table */
#define ACPI_WAET_SIGNATURE 0x54454157 /* Windows ACPI Enlightenment Table */
#define ACPI_WDAT_SIGNATURE 0x54414457 /* Watch Dog Action Table */
#define ACPI_WDTT_SIGNATURE 0x54524457 /* Watchdog Timer Resource Table */
#define ACPI_WPBT_SIGNATURE 0x54425057 /* Windows Platform Binary Table */
#define ACPI_WSMT_SIGNATURE 0x544D5357 /* Windows SMM Security Mitigation Table */
#define ACPI_XSDT_SIGNATURE 0x54445358 /* eXtended System Descriptor Table */
/* Default serial port settings */
@ -152,10 +181,20 @@ typedef enum _HAL_APIC_MODE
APIC_MODE_X2APIC
} HAL_APIC_MODE, *PHAL_APIC_MODE;
/* Generic Address structure */
typedef struct _GENERIC_ADDRESS
{
UCHAR AddressSpaceID;
UCHAR BitWidth;
UCHAR BitOffset;
UCHAR Reserved;
PHYSICAL_ADDRESS Address;
} GENERIC_ADDRESS, *PGENERIC_ADDRESS;
/* Each ACPI table description header structure */
typedef struct _ACPI_DESCRIPTION_HEADER
{
UCHAR Signature[4];
ULONG Signature;
ULONG Length;
UCHAR Revision;
UCHAR Checksum;
@ -164,12 +203,19 @@ typedef struct _ACPI_DESCRIPTION_HEADER
ULONG OemRevision;
UCHAR CreatorID[4];
ULONG CreatorRev;
} PACKED ACPI_DESCRIPTION_HEADER, *PACPI_DESCRIPTION_HEADER;
} ACPI_DESCRIPTION_HEADER, *PACPI_DESCRIPTION_HEADER;
/* ACPI Root System Description Table Pointer structure */
/* ACPI cache list */
typedef struct _ACPI_CACHE_LIST
{
LIST_ENTRY ListEntry;
ACPI_DESCRIPTION_HEADER Header;
} ACPI_CACHE_LIST, *PACPI_CACHE_LIST;
/* ACPI Root System Description Table Pointer (RSDP) structure */
typedef struct _ACPI_RSDP
{
UCHAR Signature[8];
ULONGLONG Signature;
UCHAR Checksum;
UCHAR OemId[6];
UCHAR Revision;
@ -178,15 +224,82 @@ typedef struct _ACPI_RSDP
ULONGLONG XsdtAddress;
UCHAR XChecksum;
UCHAR Reserved[3];
} PACKED ACPI_RSDP, *PACPI_RSDP;
} ACPI_RSDP, *PACPI_RSDP;
/* ACPI Root System Description Table structure */
/* ACPI Root System Description Table (RSDT) structure */
typedef struct _ACPI_RSDT
{
ACPI_DESCRIPTION_HEADER Header;
UCHAR Entries[];
ULONG Tables[];
} PACKED ACPI_RSDT, *PACPI_RSDT;
/* ACPI eXtended Root System Description Table (XSDT) structure */
typedef struct _ACPI_XSDT
{
ACPI_DESCRIPTION_HEADER Header;
ULONGLONG Tables[];
} PACKED ACPI_XSDT, *PACPI_XSDT;
/* Fixed ACPI Description Table (FADT) structure */
typedef struct _ACPI_FADT
{
ACPI_DESCRIPTION_HEADER Header;
ULONG Facs;
ULONG Dsdt;
UCHAR IntModel;
UCHAR PmProfile;
USHORT SciIntVector;
ULONG SmiCmdIoPort;
UCHAR AcpiOnValue;
UCHAR AcpiOffValue;
UCHAR S4BiosReq;
UCHAR PStateControl;
ULONG Pm1aEvtBlkIoPort;
ULONG Pm1bEvtBlkIoPort;
ULONG Pm1aCtrlBlkIoPort;
ULONG Pm1bCtrlBlkIoPort;
ULONG Pm2CtrlBlkIoPort;
ULONG PmTmrBlkIoPort;
ULONG Gp0BlkIoPort;
ULONG Gp1BlkIoPort;
UCHAR Pm1EvtLen;
UCHAR Pm1CtrlLen;
UCHAR Pm2CtrlLen;
UCHAR PmTmrLen;
UCHAR Gp0BlkLen;
UCHAR Gp1BlkLen;
UCHAR Gp1Base;
UCHAR CStateControl;
USHORT Lvl2Latency;
USHORT Lvl3Latency;
USHORT FlushSize;
USHORT FlushStride;
UCHAR DutyOffset;
UCHAR DutyWidth;
UCHAR DayAlarmIndex;
UCHAR MonthAlarmIndex;
UCHAR CenturyAlarmIndex;
USHORT BootArch;
UCHAR Reserved0;
ULONG Flags;
GENERIC_ADDRESS ResetReg;
UCHAR ResetVal;
USHORT ArmBootArch;
UCHAR Reserved1;
PHYSICAL_ADDRESS XFirmwareCtrl;
PHYSICAL_ADDRESS XDsdt;
GENERIC_ADDRESS XPm1aEvtBlk;
GENERIC_ADDRESS XPm1bEvtBlk;
GENERIC_ADDRESS XPm1aCtrlBlk;
GENERIC_ADDRESS XPm1bCtrlBlk;
GENERIC_ADDRESS XPm2CtrlBlk;
GENERIC_ADDRESS XPmTmrBlk;
GENERIC_ADDRESS XGp0Blk;
GENERIC_ADDRESS XGp1Blk;
GENERIC_ADDRESS SleepControlReg;
GENERIC_ADDRESS SleepStatusReg;
} ACPI_FADT, *PACPI_FADT;
/* Serial (COM) port initial state */
typedef struct _CPPORT
{

View File

@ -14,6 +14,7 @@
/* Enumeration lists forward references */
typedef enum _ADJUST_REASON ADJUST_REASON, *PADJUST_REASON;
typedef enum _APIC_REGISTER APIC_REGISTER, *PAPIC_REGISTER;
typedef enum _BOOLEAN BOOLEAN, *PBOOLEAN;
typedef enum _EXCEPTION_DISPOSITION EXCEPTION_DISPOSITION, *PEXCEPTION_DISPOSITION;
typedef enum _EFI_ALLOCATE_TYPE EFI_ALLOCATE_TYPE, *PEFI_ALLOCATE_TYPE;
@ -39,6 +40,7 @@ typedef enum _EFI_TIMER_DELAY EFI_TIMER_DELAY, *PEFI_TIMER_DELAY;
typedef enum _EFI_UART_PARITY_TYPE EFI_UART_PARITY_TYPE, *PEFI_UART_PARITY_TYPE;
typedef enum _EFI_UART_STOP_BITS_TYPE EFI_UART_STOP_BITS_TYPE, *PEFI_UART_STOP_BITS_TYPE;
typedef enum _EFI_UNIVERSA_GRAPHICS_BLT_OPERATION EFI_UNIVERSA_GRAPHICS_BLT_OPERATION, *PEFI_UNIVERSA_GRAPHICS_BLT_OPERATION;
typedef enum _HAL_APIC_MODE HAL_APIC_MODE, *PHAL_APIC_MODE;
typedef enum _KAPC_ENVIRONMENT KAPC_ENVIRONMENT, *PKAPC_ENVIRONMENT;
typedef enum _KDPC_IMPORTANCE KDPC_IMPORTANCE, *PKDPC_IMPORTANCE;
typedef enum _KEVENT_TYPE KEVENT_TYPE, *PKEVENT_TYPE;
@ -52,9 +54,12 @@ typedef enum _SYSTEM_FIRMWARE_TYPE SYSTEM_FIRMWARE_TYPE, *PSYSTEM_FIRMWARE_TYPE;
typedef enum _WAIT_TYPE WAIT_TYPE, *PWAIT_TYPE;
/* Structures forward references */
typedef struct _ACPI_CACHE_LIST ACPI_CACHE_LIST, *PACPI_CACHE_LIST;
typedef struct _ACPI_DESCRIPTION_HEADER ACPI_DESCRIPTION_HEADER, *PACPI_DESCRIPTION_HEADER;
typedef struct _ACPI_FADT ACPI_FADT, *PACPI_FADT;
typedef struct _ACPI_RSDP ACPI_RSDP, *PACPI_RSDP;
typedef struct _ACPI_RSDT ACPI_RSDT, *PACPI_RSDT;
typedef struct _ACPI_XSDT ACPI_XSDT, *PACPI_XSDT;
typedef struct _ANSI_STRING ANSI_STRING, *PANSI_STRING;
typedef struct _ANSI_STRING32 ANSI_STRING32, *PANSI_STRING32;
typedef struct _ANSI_STRING64 ANSI_STRING64, *PANSI_STRING64;
@ -221,7 +226,9 @@ typedef struct _EXCEPTION_RECORD EXCEPTION_RECORD, *PEXCEPTION_RECORD;
typedef struct _EXCEPTION_REGISTRATION_RECORD EXCEPTION_REGISTRATION_RECORD, *PEXCEPTION_REGISTRATION_RECORD;
typedef struct _FIRMWARE_INFORMATION_BLOCK FIRMWARE_INFORMATION_BLOCK, *PFIRMWARE_INFORMATION_BLOCK;
typedef struct _FLOAT128 FLOAT128, *PFLOAT128;
typedef struct _GENERIC_ADDRESS GENERIC_ADDRESS, *PGENERIC_ADDRESS;
typedef struct _GUID GUID, *PGUID;
typedef struct _HAL_FRAMEBUFFER_DATA HAL_FRAMEBUFFER_DATA, *PHAL_FRAMEBUFFER_DATA;
typedef struct _KAPC KAPC, *PKAPC;
typedef struct _KAPC_STATE KAPC_STATE, *PKAPC_STATE;
typedef struct _KDPC KDPC, *PKDPC;
@ -278,6 +285,8 @@ typedef struct _PECOFF_IMAGE_SECTION_HEADER PECOFF_IMAGE_SECTION_HEADER, *PPECOF
typedef struct _PECOFF_IMAGE_VXD_HEADER PECOFF_IMAGE_VXD_HEADER, *PPECOFF_IMAGE_VXD_HEADER;
typedef struct _PROCESSOR_POWER_STATE PROCESSOR_POWER_STATE, *PPROCESSOR_POWER_STATE;
typedef struct _SINGLE_LIST_ENTRY SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
typedef struct _SMBIOS_TABLE_HEADER SMBIOS_TABLE_HEADER, *PSMBIOS_TABLE_HEADER;
typedef struct _SMBIOS3_TABLE_HEADER SMBIOS3_TABLE_HEADER, *PSMBIOS3_TABLE_HEADER;
typedef struct _STRING STRING, *PSTRING;
typedef struct _STRING32 STRING32, *PSTRING32;
typedef struct _STRING64 STRING64, *PSTRING64;

View File

@ -118,12 +118,12 @@ AcGetAcpiTable(IN CONST UINT Signature,
if(Xsdp)
{
/* Get table header from XSDT */
TableHeader = (PACPI_DESCRIPTION_HEADER)(ULONG_PTR)((PULONGLONG)Rsdt->Entries)[RsdtIndex];
TableHeader = (PACPI_DESCRIPTION_HEADER)(ULONG_PTR)((PULONGLONG)Rsdt->Tables)[RsdtIndex];
}
else
{
/* Get table header from RSDT */
TableHeader = (PACPI_DESCRIPTION_HEADER)(ULONG_PTR)((PULONG)Rsdt->Entries)[RsdtIndex];
TableHeader = (PACPI_DESCRIPTION_HEADER)(ULONG_PTR)((PULONG)Rsdt->Tables)[RsdtIndex];
}
/* Make sure table header exists */
@ -148,7 +148,7 @@ AcGetAcpiTable(IN CONST UINT Signature,
}
/* Verify table signature and checksum */
if((*(PLONG)TableHeader->Signature == Signature) && (AcpChecksumTable(TableHeader, TableHeader->Length) == 0))
if((TableHeader->Signature == Signature) && (AcpChecksumTable(TableHeader, TableHeader->Length) == 0))
{
/* Found valid ACPI table */
*AcpiTable = TableHeader;