diff options
Diffstat (limited to 'source/include')
-rw-r--r-- | source/include/acopcode.h | 14 | ||||
-rw-r--r-- | source/include/acpixf.h | 8 | ||||
-rw-r--r-- | source/include/actbl1.h | 1908 | ||||
-rw-r--r-- | source/include/actbl2.h | 2228 | ||||
-rw-r--r-- | source/include/actbl3.h | 1136 | ||||
-rw-r--r-- | source/include/amlcode.h | 21 | ||||
-rw-r--r-- | source/include/platform/aclinux.h | 1 |
7 files changed, 2650 insertions, 2666 deletions
diff --git a/source/include/acopcode.h b/source/include/acopcode.h index 56f13663a25ba..6dbeac68914b0 100644 --- a/source/include/acopcode.h +++ b/source/include/acopcode.h @@ -361,7 +361,7 @@ #define ARGI_FIELD_OP ARGI_INVALID_OPCODE #define ARGI_FIND_SET_LEFT_BIT_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF) #define ARGI_FIND_SET_RIGHT_BIT_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF) -#define ARGI_FROM_BCD_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF) +#define ARGI_FROM_BCD_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_FIXED_TARGET) #define ARGI_IF_OP ARGI_INVALID_OPCODE #define ARGI_INCREMENT_OP ARGI_LIST1 (ARGI_TARGETREF) #define ARGI_INDEX_FIELD_OP ARGI_INVALID_OPCODE @@ -425,12 +425,12 @@ #define ARGI_SUBTRACT_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) #define ARGI_THERMAL_ZONE_OP ARGI_INVALID_OPCODE #define ARGI_TIMER_OP ARG_NONE -#define ARGI_TO_BCD_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF) -#define ARGI_TO_BUFFER_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_TARGETREF) -#define ARGI_TO_DEC_STR_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_TARGETREF) -#define ARGI_TO_HEX_STR_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_TARGETREF) -#define ARGI_TO_INTEGER_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_TARGETREF) -#define ARGI_TO_STRING_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_TARGETREF) +#define ARGI_TO_BCD_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_FIXED_TARGET) +#define ARGI_TO_BUFFER_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET) +#define ARGI_TO_DEC_STR_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET) +#define ARGI_TO_HEX_STR_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET) +#define ARGI_TO_INTEGER_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET) +#define ARGI_TO_STRING_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_FIXED_TARGET) #define ARGI_UNLOAD_OP ARGI_LIST1 (ARGI_DDBHANDLE) #define ARGI_VAR_PACKAGE_OP ARGI_LIST1 (ARGI_INTEGER) #define ARGI_WAIT_OP ARGI_LIST2 (ARGI_EVENT, ARGI_INTEGER) diff --git a/source/include/acpixf.h b/source/include/acpixf.h index 864d1275bc919..2f0ac5647cffb 100644 --- a/source/include/acpixf.h +++ b/source/include/acpixf.h @@ -154,7 +154,7 @@ /* Current ACPICA subsystem version in YYYYMMDD format */ -#define ACPI_CA_VERSION 0x20180105 +#define ACPI_CA_VERSION 0x20180209 #include "acconfig.h" #include "actypes.h" @@ -302,6 +302,8 @@ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_DoNotUseXsdt, FALSE); /* * Optionally support group module level code. + * NOTE, this is essentially obsolete and will be removed soon + * (01/2018). */ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_GroupModuleLevelCode, FALSE); @@ -309,8 +311,10 @@ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_GroupModuleLevelCode, FALSE); * Optionally support module level code by parsing the entire table as * a TermList. Default is FALSE, do not execute entire table until some * lock order issues are fixed. + * NOTE, this is essentially obsolete and will be removed soon + * (01/2018). */ -ACPI_INIT_GLOBAL (UINT8, AcpiGbl_ParseTableAsTermList, FALSE); +ACPI_INIT_GLOBAL (UINT8, AcpiGbl_ParseTableAsTermList, TRUE); /* * Optionally use 32-bit FADT addresses if and when there is a conflict diff --git a/source/include/actbl1.h b/source/include/actbl1.h index a9db6fc7370d8..4f03ab05a01d3 100644 --- a/source/include/actbl1.h +++ b/source/include/actbl1.h @@ -155,13 +155,11 @@ /******************************************************************************* * - * Additional ACPI Tables (1) + * Additional ACPI Tables * * These tables are not consumed directly by the ACPICA subsystem, but are * included here to support device drivers and the AML disassembler. * - * The tables in this file are fully defined within the ACPI specification. - * ******************************************************************************/ @@ -170,23 +168,43 @@ * file. Useful because they make it more difficult to inadvertently type in * the wrong signature. */ +#define ACPI_SIG_ASF "ASF!" /* Alert Standard Format table */ #define ACPI_SIG_BERT "BERT" /* Boot Error Record Table */ +#define ACPI_SIG_BGRT "BGRT" /* Boot Graphics Resource Table */ +#define ACPI_SIG_BOOT "BOOT" /* Simple Boot Flag Table */ #define ACPI_SIG_CPEP "CPEP" /* Corrected Platform Error Polling table */ +#define ACPI_SIG_CSRT "CSRT" /* Core System Resource Table */ +#define ACPI_SIG_DBG2 "DBG2" /* Debug Port table type 2 */ +#define ACPI_SIG_DBGP "DBGP" /* Debug Port table */ +#define ACPI_SIG_DMAR "DMAR" /* DMA Remapping table */ +#define ACPI_SIG_DRTM "DRTM" /* Dynamic Root of Trust for Measurement table */ #define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */ #define ACPI_SIG_EINJ "EINJ" /* Error Injection table */ #define ACPI_SIG_ERST "ERST" /* Error Record Serialization Table */ -#define ACPI_SIG_HMAT "HMAT" /* Heterogeneous Memory Attributes Table */ +#define ACPI_SIG_FPDT "FPDT" /* Firmware Performance Data Table */ +#define ACPI_SIG_GTDT "GTDT" /* Generic Timer Description Table */ #define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */ -#define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */ -#define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */ -#define ACPI_SIG_PDTT "PDTT" /* Platform Debug Trigger Table */ -#define ACPI_SIG_PPTT "PPTT" /* Processor Properties Topology Table */ -#define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ -#define ACPI_SIG_SDEV "SDEV" /* Secure Devices table */ -#define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */ -#define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */ -#define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */ +#define ACPI_SIG_HMAT "HMAT" /* Heterogeneous Memory Attributes Table */ +#define ACPI_SIG_HPET "HPET" /* High Precision Event Timer table */ +#define ACPI_SIG_IBFT "IBFT" /* iSCSI Boot Firmware Table */ + +#define ACPI_SIG_S3PT "S3PT" /* S3 Performance (sub)Table */ +#define ACPI_SIG_PCCS "PCC" /* PCC Shared Memory Region */ + + +/* Reserved table signatures */ + +#define ACPI_SIG_MATR "MATR" /* Memory Address Translation Table */ +#define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ +/* + * These tables have been seen in the field, but no definition has been found + */ +#ifdef ACPI_UNDEFINED_TABLES +#define ACPI_SIG_ATKG "ATKG" +#define ACPI_SIG_GSCI "GSCI" /* GMCH SCI table */ +#define ACPI_SIG_IEIT "IEIT" +#endif /* * All tables must be byte-packed to match the ACPI specification, since @@ -240,6 +258,146 @@ typedef struct acpi_whea_header /******************************************************************************* * + * ASF - Alert Standard Format table (Signature "ASF!") + * Revision 0x10 + * + * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003 + * + ******************************************************************************/ + +typedef struct acpi_table_asf +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + +} ACPI_TABLE_ASF; + + +/* ASF subtable header */ + +typedef struct acpi_asf_header +{ + UINT8 Type; + UINT8 Reserved; + UINT16 Length; + +} ACPI_ASF_HEADER; + + +/* Values for Type field above */ + +enum AcpiAsfType +{ + ACPI_ASF_TYPE_INFO = 0, + ACPI_ASF_TYPE_ALERT = 1, + ACPI_ASF_TYPE_CONTROL = 2, + ACPI_ASF_TYPE_BOOT = 3, + ACPI_ASF_TYPE_ADDRESS = 4, + ACPI_ASF_TYPE_RESERVED = 5 +}; + +/* + * ASF subtables + */ + +/* 0: ASF Information */ + +typedef struct acpi_asf_info +{ + ACPI_ASF_HEADER Header; + UINT8 MinResetValue; + UINT8 MinPollInterval; + UINT16 SystemId; + UINT32 MfgId; + UINT8 Flags; + UINT8 Reserved2[3]; + +} ACPI_ASF_INFO; + +/* Masks for Flags field above */ + +#define ACPI_ASF_SMBUS_PROTOCOLS (1) + + +/* 1: ASF Alerts */ + +typedef struct acpi_asf_alert +{ + ACPI_ASF_HEADER Header; + UINT8 AssertMask; + UINT8 DeassertMask; + UINT8 Alerts; + UINT8 DataLength; + +} ACPI_ASF_ALERT; + +typedef struct acpi_asf_alert_data +{ + UINT8 Address; + UINT8 Command; + UINT8 Mask; + UINT8 Value; + UINT8 SensorType; + UINT8 Type; + UINT8 Offset; + UINT8 SourceType; + UINT8 Severity; + UINT8 SensorNumber; + UINT8 Entity; + UINT8 Instance; + +} ACPI_ASF_ALERT_DATA; + + +/* 2: ASF Remote Control */ + +typedef struct acpi_asf_remote +{ + ACPI_ASF_HEADER Header; + UINT8 Controls; + UINT8 DataLength; + UINT16 Reserved2; + +} ACPI_ASF_REMOTE; + +typedef struct acpi_asf_control_data +{ + UINT8 Function; + UINT8 Address; + UINT8 Command; + UINT8 Value; + +} ACPI_ASF_CONTROL_DATA; + + +/* 3: ASF RMCP Boot Options */ + +typedef struct acpi_asf_rmcp +{ + ACPI_ASF_HEADER Header; + UINT8 Capabilities[7]; + UINT8 CompletionCode; + UINT32 EnterpriseId; + UINT8 Command; + UINT16 Parameter; + UINT16 BootOptions; + UINT16 OemParameters; + +} ACPI_ASF_RMCP; + + +/* 4: ASF Address */ + +typedef struct acpi_asf_address +{ + ACPI_ASF_HEADER Header; + UINT8 EpromAddress; + UINT8 Devices; + +} ACPI_ASF_ADDRESS; + + +/******************************************************************************* + * * BERT - Boot Error Record Table (ACPI 4.0) * Version 1 * @@ -293,6 +451,49 @@ enum AcpiBertErrorSeverity /******************************************************************************* * + * BGRT - Boot Graphics Resource Table (ACPI 5.0) + * Version 1 + * + ******************************************************************************/ + +typedef struct acpi_table_bgrt +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT16 Version; + UINT8 Status; + UINT8 ImageType; + UINT64 ImageAddress; + UINT32 ImageOffsetX; + UINT32 ImageOffsetY; + +} ACPI_TABLE_BGRT; + +/* Flags for Status field above */ + +#define ACPI_BGRT_DISPLAYED (1) +#define ACPI_BGRT_ORIENTATION_OFFSET (3 << 1) + + +/******************************************************************************* + * + * BOOT - Simple Boot Flag Table + * Version 1 + * + * Conforms to the "Simple Boot Flag Specification", Version 2.1 + * + ******************************************************************************/ + +typedef struct acpi_table_boot +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT8 CmosIndex; /* Index in CMOS RAM for the boot register */ + UINT8 Reserved[3]; + +} ACPI_TABLE_BOOT; + + +/******************************************************************************* + * * CPEP - Corrected Platform Error Polling table (ACPI 4.0) * Version 1 * @@ -320,6 +521,410 @@ typedef struct acpi_cpep_polling /******************************************************************************* * + * CSRT - Core System Resource Table + * Version 0 + * + * Conforms to the "Core System Resource Table (CSRT)", November 14, 2011 + * + ******************************************************************************/ + +typedef struct acpi_table_csrt +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + +} ACPI_TABLE_CSRT; + + +/* Resource Group subtable */ + +typedef struct acpi_csrt_group +{ + UINT32 Length; + UINT32 VendorId; + UINT32 SubvendorId; + UINT16 DeviceId; + UINT16 SubdeviceId; + UINT16 Revision; + UINT16 Reserved; + UINT32 SharedInfoLength; + + /* Shared data immediately follows (Length = SharedInfoLength) */ + +} ACPI_CSRT_GROUP; + +/* Shared Info subtable */ + +typedef struct acpi_csrt_shared_info +{ + UINT16 MajorVersion; + UINT16 MinorVersion; + UINT32 MmioBaseLow; + UINT32 MmioBaseHigh; + UINT32 GsiInterrupt; + UINT8 InterruptPolarity; + UINT8 InterruptMode; + UINT8 NumChannels; + UINT8 DmaAddressWidth; + UINT16 BaseRequestLine; + UINT16 NumHandshakeSignals; + UINT32 MaxBlockSize; + + /* Resource descriptors immediately follow (Length = Group Length - SharedInfoLength) */ + +} ACPI_CSRT_SHARED_INFO; + +/* Resource Descriptor subtable */ + +typedef struct acpi_csrt_descriptor +{ + UINT32 Length; + UINT16 Type; + UINT16 Subtype; + UINT32 Uid; + + /* Resource-specific information immediately follows */ + +} ACPI_CSRT_DESCRIPTOR; + + +/* Resource Types */ + +#define ACPI_CSRT_TYPE_INTERRUPT 0x0001 +#define ACPI_CSRT_TYPE_TIMER 0x0002 +#define ACPI_CSRT_TYPE_DMA 0x0003 + +/* Resource Subtypes */ + +#define ACPI_CSRT_XRUPT_LINE 0x0000 +#define ACPI_CSRT_XRUPT_CONTROLLER 0x0001 +#define ACPI_CSRT_TIMER 0x0000 +#define ACPI_CSRT_DMA_CHANNEL 0x0000 +#define ACPI_CSRT_DMA_CONTROLLER 0x0001 + + +/******************************************************************************* + * + * DBG2 - Debug Port Table 2 + * Version 0 (Both main table and subtables) + * + * Conforms to "Microsoft Debug Port Table 2 (DBG2)", December 10, 2015 + * + ******************************************************************************/ + +typedef struct acpi_table_dbg2 +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 InfoOffset; + UINT32 InfoCount; + +} ACPI_TABLE_DBG2; + + +typedef struct acpi_dbg2_header +{ + UINT32 InfoOffset; + UINT32 InfoCount; + +} ACPI_DBG2_HEADER; + + +/* Debug Device Information Subtable */ + +typedef struct acpi_dbg2_device +{ + UINT8 Revision; + UINT16 Length; + UINT8 RegisterCount; /* Number of BaseAddress registers */ + UINT16 NamepathLength; + UINT16 NamepathOffset; + UINT16 OemDataLength; + UINT16 OemDataOffset; + UINT16 PortType; + UINT16 PortSubtype; + UINT16 Reserved; + UINT16 BaseAddressOffset; + UINT16 AddressSizeOffset; + /* + * Data that follows: + * BaseAddress (required) - Each in 12-byte Generic Address Structure format. + * AddressSize (required) - Array of UINT32 sizes corresponding to each BaseAddress register. + * Namepath (required) - Null terminated string. Single dot if not supported. + * OemData (optional) - Length is OemDataLength. + */ +} ACPI_DBG2_DEVICE; + +/* Types for PortType field above */ + +#define ACPI_DBG2_SERIAL_PORT 0x8000 +#define ACPI_DBG2_1394_PORT 0x8001 +#define ACPI_DBG2_USB_PORT 0x8002 +#define ACPI_DBG2_NET_PORT 0x8003 + +/* Subtypes for PortSubtype field above */ + +#define ACPI_DBG2_16550_COMPATIBLE 0x0000 +#define ACPI_DBG2_16550_SUBSET 0x0001 +#define ACPI_DBG2_ARM_PL011 0x0003 +#define ACPI_DBG2_ARM_SBSA_32BIT 0x000D +#define ACPI_DBG2_ARM_SBSA_GENERIC 0x000E +#define ACPI_DBG2_ARM_DCC 0x000F +#define ACPI_DBG2_BCM2835 0x0010 + +#define ACPI_DBG2_1394_STANDARD 0x0000 + +#define ACPI_DBG2_USB_XHCI 0x0000 +#define ACPI_DBG2_USB_EHCI 0x0001 + + +/******************************************************************************* + * + * DBGP - Debug Port table + * Version 1 + * + * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000 + * + ******************************************************************************/ + +typedef struct acpi_table_dbgp +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT8 Type; /* 0=full 16550, 1=subset of 16550 */ + UINT8 Reserved[3]; + ACPI_GENERIC_ADDRESS DebugPort; + +} ACPI_TABLE_DBGP; + + +/******************************************************************************* + * + * DMAR - DMA Remapping table + * Version 1 + * + * Conforms to "Intel Virtualization Technology for Directed I/O", + * Version 2.3, October 2014 + * + ******************************************************************************/ + +typedef struct acpi_table_dmar +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT8 Width; /* Host Address Width */ + UINT8 Flags; + UINT8 Reserved[10]; + +} ACPI_TABLE_DMAR; + +/* Masks for Flags field above */ + +#define ACPI_DMAR_INTR_REMAP (1) +#define ACPI_DMAR_X2APIC_OPT_OUT (1<<1) +#define ACPI_DMAR_X2APIC_MODE (1<<2) + + +/* DMAR subtable header */ + +typedef struct acpi_dmar_header +{ + UINT16 Type; + UINT16 Length; + +} ACPI_DMAR_HEADER; + +/* Values for subtable type in ACPI_DMAR_HEADER */ + +enum AcpiDmarType +{ + ACPI_DMAR_TYPE_HARDWARE_UNIT = 0, + ACPI_DMAR_TYPE_RESERVED_MEMORY = 1, + ACPI_DMAR_TYPE_ROOT_ATS = 2, + ACPI_DMAR_TYPE_HARDWARE_AFFINITY = 3, + ACPI_DMAR_TYPE_NAMESPACE = 4, + ACPI_DMAR_TYPE_RESERVED = 5 /* 5 and greater are reserved */ +}; + + +/* DMAR Device Scope structure */ + +typedef struct acpi_dmar_device_scope +{ + UINT8 EntryType; + UINT8 Length; + UINT16 Reserved; + UINT8 EnumerationId; + UINT8 Bus; + +} ACPI_DMAR_DEVICE_SCOPE; + +/* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE - device types */ + +enum AcpiDmarScopeType +{ + ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0, + ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1, + ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2, + ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3, + ACPI_DMAR_SCOPE_TYPE_HPET = 4, + ACPI_DMAR_SCOPE_TYPE_NAMESPACE = 5, + ACPI_DMAR_SCOPE_TYPE_RESERVED = 6 /* 6 and greater are reserved */ +}; + +typedef struct acpi_dmar_pci_path +{ + UINT8 Device; + UINT8 Function; + +} ACPI_DMAR_PCI_PATH; + + +/* + * DMAR Subtables, correspond to Type in ACPI_DMAR_HEADER + */ + +/* 0: Hardware Unit Definition */ + +typedef struct acpi_dmar_hardware_unit +{ + ACPI_DMAR_HEADER Header; + UINT8 Flags; + UINT8 Reserved; + UINT16 Segment; + UINT64 Address; /* Register Base Address */ + +} ACPI_DMAR_HARDWARE_UNIT; + +/* Masks for Flags field above */ + +#define ACPI_DMAR_INCLUDE_ALL (1) + + +/* 1: Reserved Memory Defininition */ + +typedef struct acpi_dmar_reserved_memory +{ + ACPI_DMAR_HEADER Header; + UINT16 Reserved; + UINT16 Segment; + UINT64 BaseAddress; /* 4K aligned base address */ + UINT64 EndAddress; /* 4K aligned limit address */ + +} ACPI_DMAR_RESERVED_MEMORY; + +/* Masks for Flags field above */ + +#define ACPI_DMAR_ALLOW_ALL (1) + + +/* 2: Root Port ATS Capability Reporting Structure */ + +typedef struct acpi_dmar_atsr +{ + ACPI_DMAR_HEADER Header; + UINT8 Flags; + UINT8 Reserved; + UINT16 Segment; + +} ACPI_DMAR_ATSR; + +/* Masks for Flags field above */ + +#define ACPI_DMAR_ALL_PORTS (1) + + +/* 3: Remapping Hardware Static Affinity Structure */ + +typedef struct acpi_dmar_rhsa +{ + ACPI_DMAR_HEADER Header; + UINT32 Reserved; + UINT64 BaseAddress; + UINT32 ProximityDomain; + +} ACPI_DMAR_RHSA; + + +/* 4: ACPI Namespace Device Declaration Structure */ + +typedef struct acpi_dmar_andd +{ + ACPI_DMAR_HEADER Header; + UINT8 Reserved[3]; + UINT8 DeviceNumber; + char DeviceName[1]; + +} ACPI_DMAR_ANDD; + + +/******************************************************************************* + * + * DRTM - Dynamic Root of Trust for Measurement table + * Conforms to "TCG D-RTM Architecture" June 17 2013, Version 1.0.0 + * Table version 1 + * + ******************************************************************************/ + +typedef struct acpi_table_drtm +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT64 EntryBaseAddress; + UINT64 EntryLength; + UINT32 EntryAddress32; + UINT64 EntryAddress64; + UINT64 ExitAddress; + UINT64 LogAreaAddress; + UINT32 LogAreaLength; + UINT64 ArchDependentAddress; + UINT32 Flags; + +} ACPI_TABLE_DRTM; + +/* Flag Definitions for above */ + +#define ACPI_DRTM_ACCESS_ALLOWED (1) +#define ACPI_DRTM_ENABLE_GAP_CODE (1<<1) +#define ACPI_DRTM_INCOMPLETE_MEASUREMENTS (1<<2) +#define ACPI_DRTM_AUTHORITY_ORDER (1<<3) + + +/* 1) Validated Tables List (64-bit addresses) */ + +typedef struct acpi_drtm_vtable_list +{ + UINT32 ValidatedTableCount; + UINT64 ValidatedTables[1]; + +} ACPI_DRTM_VTABLE_LIST; + +/* 2) Resources List (of Resource Descriptors) */ + +/* Resource Descriptor */ + +typedef struct acpi_drtm_resource +{ + UINT8 Size[7]; + UINT8 Type; + UINT64 Address; + +} ACPI_DRTM_RESOURCE; + +typedef struct acpi_drtm_resource_list +{ + UINT32 ResourceCount; + ACPI_DRTM_RESOURCE Resources[1]; + +} ACPI_DRTM_RESOURCE_LIST; + +/* 3) Platform-specific Identifiers List */ + +typedef struct acpi_drtm_dps_id +{ + UINT32 DpsIdLength; + UINT8 DpsId[16]; + +} ACPI_DRTM_DPS_ID; + + +/******************************************************************************* + * * ECDT - Embedded Controller Boot Resources Table * Version 1 * @@ -566,6 +1171,237 @@ typedef struct acpi_erst_info /******************************************************************************* * + * FPDT - Firmware Performance Data Table (ACPI 5.0) + * Version 1 + * + ******************************************************************************/ + +typedef struct acpi_table_fpdt +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + +} ACPI_TABLE_FPDT; + + +/* FPDT subtable header (Performance Record Structure) */ + +typedef struct acpi_fpdt_header +{ + UINT16 Type; + UINT8 Length; + UINT8 Revision; + +} ACPI_FPDT_HEADER; + +/* Values for Type field above */ + +enum AcpiFpdtType +{ + ACPI_FPDT_TYPE_BOOT = 0, + ACPI_FPDT_TYPE_S3PERF = 1 +}; + + +/* + * FPDT subtables + */ + +/* 0: Firmware Basic Boot Performance Record */ + +typedef struct acpi_fpdt_boot_pointer +{ + ACPI_FPDT_HEADER Header; + UINT8 Reserved[4]; + UINT64 Address; + +} ACPI_FPDT_BOOT_POINTER; + + +/* 1: S3 Performance Table Pointer Record */ + +typedef struct acpi_fpdt_s3pt_pointer +{ + ACPI_FPDT_HEADER Header; + UINT8 Reserved[4]; + UINT64 Address; + +} ACPI_FPDT_S3PT_POINTER; + + +/* + * S3PT - S3 Performance Table. This table is pointed to by the + * S3 Pointer Record above. + */ +typedef struct acpi_table_s3pt +{ + UINT8 Signature[4]; /* "S3PT" */ + UINT32 Length; + +} ACPI_TABLE_S3PT; + + +/* + * S3PT Subtables (Not part of the actual FPDT) + */ + +/* Values for Type field in S3PT header */ + +enum AcpiS3ptType +{ + ACPI_S3PT_TYPE_RESUME = 0, + ACPI_S3PT_TYPE_SUSPEND = 1, + ACPI_FPDT_BOOT_PERFORMANCE = 2 +}; + +typedef struct acpi_s3pt_resume +{ + ACPI_FPDT_HEADER Header; + UINT32 ResumeCount; + UINT64 FullResume; + UINT64 AverageResume; + +} ACPI_S3PT_RESUME; + +typedef struct acpi_s3pt_suspend +{ + ACPI_FPDT_HEADER Header; + UINT64 SuspendStart; + UINT64 SuspendEnd; + +} ACPI_S3PT_SUSPEND; + + +/* + * FPDT Boot Performance Record (Not part of the actual FPDT) + */ +typedef struct acpi_fpdt_boot +{ + ACPI_FPDT_HEADER Header; + UINT8 Reserved[4]; + UINT64 ResetEnd; + UINT64 LoadStart; + UINT64 StartupStart; + UINT64 ExitServicesEntry; + UINT64 ExitServicesExit; + +} ACPI_FPDT_BOOT; + + +/******************************************************************************* + * + * GTDT - Generic Timer Description Table (ACPI 5.1) + * Version 2 + * + ******************************************************************************/ + +typedef struct acpi_table_gtdt +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT64 CounterBlockAddresss; + UINT32 Reserved; + UINT32 SecureEl1Interrupt; + UINT32 SecureEl1Flags; + UINT32 NonSecureEl1Interrupt; + UINT32 NonSecureEl1Flags; + UINT32 VirtualTimerInterrupt; + UINT32 VirtualTimerFlags; + UINT32 NonSecureEl2Interrupt; + UINT32 NonSecureEl2Flags; + UINT64 CounterReadBlockAddress; + UINT32 PlatformTimerCount; + UINT32 PlatformTimerOffset; + +} ACPI_TABLE_GTDT; + +/* Flag Definitions: Timer Block Physical Timers and Virtual timers */ + +#define ACPI_GTDT_INTERRUPT_MODE (1) +#define ACPI_GTDT_INTERRUPT_POLARITY (1<<1) +#define ACPI_GTDT_ALWAYS_ON (1<<2) + + +/* Common GTDT subtable header */ + +typedef struct acpi_gtdt_header +{ + UINT8 Type; + UINT16 Length; + +} ACPI_GTDT_HEADER; + +/* Values for GTDT subtable type above */ + +enum AcpiGtdtType +{ + ACPI_GTDT_TYPE_TIMER_BLOCK = 0, + ACPI_GTDT_TYPE_WATCHDOG = 1, + ACPI_GTDT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ +}; + + +/* GTDT Subtables, correspond to Type in acpi_gtdt_header */ + +/* 0: Generic Timer Block */ + +typedef struct acpi_gtdt_timer_block +{ + ACPI_GTDT_HEADER Header; + UINT8 Reserved; + UINT64 BlockAddress; + UINT32 TimerCount; + UINT32 TimerOffset; + +} ACPI_GTDT_TIMER_BLOCK; + +/* Timer Sub-Structure, one per timer */ + +typedef struct acpi_gtdt_timer_entry +{ + UINT8 FrameNumber; + UINT8 Reserved[3]; + UINT64 BaseAddress; + UINT64 El0BaseAddress; + UINT32 TimerInterrupt; + UINT32 TimerFlags; + UINT32 VirtualTimerInterrupt; + UINT32 VirtualTimerFlags; + UINT32 CommonFlags; + +} ACPI_GTDT_TIMER_ENTRY; + +/* Flag Definitions: TimerFlags and VirtualTimerFlags above */ + +#define ACPI_GTDT_GT_IRQ_MODE (1) +#define ACPI_GTDT_GT_IRQ_POLARITY (1<<1) + +/* Flag Definitions: CommonFlags above */ + +#define ACPI_GTDT_GT_IS_SECURE_TIMER (1) +#define ACPI_GTDT_GT_ALWAYS_ON (1<<1) + + +/* 1: SBSA Generic Watchdog Structure */ + +typedef struct acpi_gtdt_watchdog +{ + ACPI_GTDT_HEADER Header; + UINT8 Reserved; + UINT64 RefreshFrameAddress; + UINT64 ControlFrameAddress; + UINT32 TimerInterrupt; + UINT32 TimerFlags; + +} ACPI_GTDT_WATCHDOG; + +/* Flag Definitions: TimerFlags above */ + +#define ACPI_GTDT_WATCHDOG_IRQ_MODE (1) +#define ACPI_GTDT_WATCHDOG_IRQ_POLARITY (1<<1) +#define ACPI_GTDT_WATCHDOG_SECURE (1<<2) + + +/******************************************************************************* + * * HEST - Hardware Error Source Table (ACPI 4.0) * Version 1 * @@ -1057,988 +1893,150 @@ typedef struct acpi_hmat_cache /******************************************************************************* * - * MADT - Multiple APIC Description Table - * Version 3 - * - ******************************************************************************/ - -typedef struct acpi_table_madt -{ - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 Address; /* Physical address of local APIC */ - UINT32 Flags; - -} ACPI_TABLE_MADT; - -/* Masks for Flags field above */ - -#define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */ - -/* Values for PCATCompat flag */ - -#define ACPI_MADT_DUAL_PIC 1 -#define ACPI_MADT_MULTIPLE_APIC 0 - - -/* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */ - -enum AcpiMadtType -{ - ACPI_MADT_TYPE_LOCAL_APIC = 0, - ACPI_MADT_TYPE_IO_APIC = 1, - ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, - ACPI_MADT_TYPE_NMI_SOURCE = 3, - ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, - ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, - ACPI_MADT_TYPE_IO_SAPIC = 6, - ACPI_MADT_TYPE_LOCAL_SAPIC = 7, - ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, - ACPI_MADT_TYPE_LOCAL_X2APIC = 9, - ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, - ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, - ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, - ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13, - ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14, - ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15, - ACPI_MADT_TYPE_RESERVED = 16 /* 16 and greater are reserved */ -}; - - -/* - * MADT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER - */ - -/* 0: Processor Local APIC */ - -typedef struct acpi_madt_local_apic -{ - ACPI_SUBTABLE_HEADER Header; - UINT8 ProcessorId; /* ACPI processor id */ - UINT8 Id; /* Processor's local APIC id */ - UINT32 LapicFlags; - -} ACPI_MADT_LOCAL_APIC; - - -/* 1: IO APIC */ - -typedef struct acpi_madt_io_apic -{ - ACPI_SUBTABLE_HEADER Header; - UINT8 Id; /* I/O APIC ID */ - UINT8 Reserved; /* Reserved - must be zero */ - UINT32 Address; /* APIC physical address */ - UINT32 GlobalIrqBase; /* Global system interrupt where INTI lines start */ - -} ACPI_MADT_IO_APIC; - - -/* 2: Interrupt Override */ - -typedef struct acpi_madt_interrupt_override -{ - ACPI_SUBTABLE_HEADER Header; - UINT8 Bus; /* 0 - ISA */ - UINT8 SourceIrq; /* Interrupt source (IRQ) */ - UINT32 GlobalIrq; /* Global system interrupt */ - UINT16 IntiFlags; - -} ACPI_MADT_INTERRUPT_OVERRIDE; - - -/* 3: NMI Source */ - -typedef struct acpi_madt_nmi_source -{ - ACPI_SUBTABLE_HEADER Header; - UINT16 IntiFlags; - UINT32 GlobalIrq; /* Global system interrupt */ - -} ACPI_MADT_NMI_SOURCE; - - -/* 4: Local APIC NMI */ - -typedef struct acpi_madt_local_apic_nmi -{ - ACPI_SUBTABLE_HEADER Header; - UINT8 ProcessorId; /* ACPI processor id */ - UINT16 IntiFlags; - UINT8 Lint; /* LINTn to which NMI is connected */ - -} ACPI_MADT_LOCAL_APIC_NMI; - - -/* 5: Address Override */ - -typedef struct acpi_madt_local_apic_override -{ - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; /* Reserved, must be zero */ - UINT64 Address; /* APIC physical address */ - -} ACPI_MADT_LOCAL_APIC_OVERRIDE; - - -/* 6: I/O Sapic */ - -typedef struct acpi_madt_io_sapic -{ - ACPI_SUBTABLE_HEADER Header; - UINT8 Id; /* I/O SAPIC ID */ - UINT8 Reserved; /* Reserved, must be zero */ - UINT32 GlobalIrqBase; /* Global interrupt for SAPIC start */ - UINT64 Address; /* SAPIC physical address */ - -} ACPI_MADT_IO_SAPIC; - - -/* 7: Local Sapic */ - -typedef struct acpi_madt_local_sapic -{ - ACPI_SUBTABLE_HEADER Header; - UINT8 ProcessorId; /* ACPI processor id */ - UINT8 Id; /* SAPIC ID */ - UINT8 Eid; /* SAPIC EID */ - UINT8 Reserved[3]; /* Reserved, must be zero */ - UINT32 LapicFlags; - UINT32 Uid; /* Numeric UID - ACPI 3.0 */ - char UidString[1]; /* String UID - ACPI 3.0 */ - -} ACPI_MADT_LOCAL_SAPIC; - - -/* 8: Platform Interrupt Source */ - -typedef struct acpi_madt_interrupt_source -{ - ACPI_SUBTABLE_HEADER Header; - UINT16 IntiFlags; - UINT8 Type; /* 1=PMI, 2=INIT, 3=corrected */ - UINT8 Id; /* Processor ID */ - UINT8 Eid; /* Processor EID */ - UINT8 IoSapicVector; /* Vector value for PMI interrupts */ - UINT32 GlobalIrq; /* Global system interrupt */ - UINT32 Flags; /* Interrupt Source Flags */ - -} ACPI_MADT_INTERRUPT_SOURCE; - -/* Masks for Flags field above */ - -#define ACPI_MADT_CPEI_OVERRIDE (1) - - -/* 9: Processor Local X2APIC (ACPI 4.0) */ - -typedef struct acpi_madt_local_x2apic -{ - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; /* Reserved - must be zero */ - UINT32 LocalApicId; /* Processor x2APIC ID */ - UINT32 LapicFlags; - UINT32 Uid; /* ACPI processor UID */ - -} ACPI_MADT_LOCAL_X2APIC; - - -/* 10: Local X2APIC NMI (ACPI 4.0) */ - -typedef struct acpi_madt_local_x2apic_nmi -{ - ACPI_SUBTABLE_HEADER Header; - UINT16 IntiFlags; - UINT32 Uid; /* ACPI processor UID */ - UINT8 Lint; /* LINTn to which NMI is connected */ - UINT8 Reserved[3]; /* Reserved - must be zero */ - -} ACPI_MADT_LOCAL_X2APIC_NMI; - - -/* 11: Generic Interrupt (ACPI 5.0 + ACPI 6.0 changes) */ - -typedef struct acpi_madt_generic_interrupt -{ - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; /* Reserved - must be zero */ - UINT32 CpuInterfaceNumber; - UINT32 Uid; - UINT32 Flags; - UINT32 ParkingVersion; - UINT32 PerformanceInterrupt; - UINT64 ParkedAddress; - UINT64 BaseAddress; - UINT64 GicvBaseAddress; - UINT64 GichBaseAddress; - UINT32 VgicInterrupt; - UINT64 GicrBaseAddress; - UINT64 ArmMpidr; - UINT8 EfficiencyClass; - UINT8 Reserved2[3]; - -} ACPI_MADT_GENERIC_INTERRUPT; - -/* Masks for Flags field above */ - -/* ACPI_MADT_ENABLED (1) Processor is usable if set */ -#define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */ -#define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */ - - -/* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */ - -typedef struct acpi_madt_generic_distributor -{ - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; /* Reserved - must be zero */ - UINT32 GicId; - UINT64 BaseAddress; - UINT32 GlobalIrqBase; - UINT8 Version; - UINT8 Reserved2[3]; /* Reserved - must be zero */ - -} ACPI_MADT_GENERIC_DISTRIBUTOR; - -/* Values for Version field above */ - -enum AcpiMadtGicVersion -{ - ACPI_MADT_GIC_VERSION_NONE = 0, - ACPI_MADT_GIC_VERSION_V1 = 1, - ACPI_MADT_GIC_VERSION_V2 = 2, - ACPI_MADT_GIC_VERSION_V3 = 3, - ACPI_MADT_GIC_VERSION_V4 = 4, - ACPI_MADT_GIC_VERSION_RESERVED = 5 /* 5 and greater are reserved */ -}; - - -/* 13: Generic MSI Frame (ACPI 5.1) */ - -typedef struct acpi_madt_generic_msi_frame -{ - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; /* Reserved - must be zero */ - UINT32 MsiFrameId; - UINT64 BaseAddress; - UINT32 Flags; - UINT16 SpiCount; - UINT16 SpiBase; - -} ACPI_MADT_GENERIC_MSI_FRAME; - -/* Masks for Flags field above */ - -#define ACPI_MADT_OVERRIDE_SPI_VALUES (1) - - -/* 14: Generic Redistributor (ACPI 5.1) */ - -typedef struct acpi_madt_generic_redistributor -{ - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; /* reserved - must be zero */ - UINT64 BaseAddress; - UINT32 Length; - -} ACPI_MADT_GENERIC_REDISTRIBUTOR; - - -/* 15: Generic Translator (ACPI 6.0) */ - -typedef struct acpi_madt_generic_translator -{ - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; /* reserved - must be zero */ - UINT32 TranslationId; - UINT64 BaseAddress; - UINT32 Reserved2; - -} ACPI_MADT_GENERIC_TRANSLATOR; - - -/* - * Common flags fields for MADT subtables - */ - -/* MADT Local APIC flags */ - -#define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ - -/* MADT MPS INTI flags (IntiFlags) */ - -#define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ -#define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ - -/* Values for MPS INTI flags */ - -#define ACPI_MADT_POLARITY_CONFORMS 0 -#define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 -#define ACPI_MADT_POLARITY_RESERVED 2 -#define ACPI_MADT_POLARITY_ACTIVE_LOW 3 - -#define ACPI_MADT_TRIGGER_CONFORMS (0) -#define ACPI_MADT_TRIGGER_EDGE (1<<2) -#define ACPI_MADT_TRIGGER_RESERVED (2<<2) -#define ACPI_MADT_TRIGGER_LEVEL (3<<2) - - -/******************************************************************************* - * - * MSCT - Maximum System Characteristics Table (ACPI 4.0) + * HPET - High Precision Event Timer table * Version 1 * - ******************************************************************************/ - -typedef struct acpi_table_msct -{ - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 ProximityOffset; /* Location of proximity info struct(s) */ - UINT32 MaxProximityDomains;/* Max number of proximity domains */ - UINT32 MaxClockDomains; /* Max number of clock domains */ - UINT64 MaxAddress; /* Max physical address in system */ - -} ACPI_TABLE_MSCT; - - -/* Subtable - Maximum Proximity Domain Information. Version 1 */ - -typedef struct acpi_msct_proximity -{ - UINT8 Revision; - UINT8 Length; - UINT32 RangeStart; /* Start of domain range */ - UINT32 RangeEnd; /* End of domain range */ - UINT32 ProcessorCapacity; - UINT64 MemoryCapacity; /* In bytes */ - -} ACPI_MSCT_PROXIMITY; - - -/******************************************************************************* - * - * NFIT - NVDIMM Interface Table (ACPI 6.0+) - * Version 1 + * Conforms to "IA-PC HPET (High Precision Event Timers) Specification", + * Version 1.0a, October 2004 * ******************************************************************************/ -typedef struct acpi_table_nfit +typedef struct acpi_table_hpet { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 Reserved; /* Reserved, must be zero */ - -} ACPI_TABLE_NFIT; - -/* Subtable header for NFIT */ - -typedef struct acpi_nfit_header -{ - UINT16 Type; - UINT16 Length; - -} ACPI_NFIT_HEADER; - - -/* Values for subtable type in ACPI_NFIT_HEADER */ - -enum AcpiNfitType -{ - ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0, - ACPI_NFIT_TYPE_MEMORY_MAP = 1, - ACPI_NFIT_TYPE_INTERLEAVE = 2, - ACPI_NFIT_TYPE_SMBIOS = 3, - ACPI_NFIT_TYPE_CONTROL_REGION = 4, - ACPI_NFIT_TYPE_DATA_REGION = 5, - ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6, - ACPI_NFIT_TYPE_CAPABILITIES = 7, - ACPI_NFIT_TYPE_RESERVED = 8 /* 8 and greater are reserved */ -}; - -/* - * NFIT Subtables - */ - -/* 0: System Physical Address Range Structure */ - -typedef struct acpi_nfit_system_address -{ - ACPI_NFIT_HEADER Header; - UINT16 RangeIndex; - UINT16 Flags; - UINT32 Reserved; /* Reserved, must be zero */ - UINT32 ProximityDomain; - UINT8 RangeGuid[16]; - UINT64 Address; - UINT64 Length; - UINT64 MemoryMapping; - -} ACPI_NFIT_SYSTEM_ADDRESS; - -/* Flags */ - -#define ACPI_NFIT_ADD_ONLINE_ONLY (1) /* 00: Add/Online Operation Only */ -#define ACPI_NFIT_PROXIMITY_VALID (1<<1) /* 01: Proximity Domain Valid */ - -/* Range Type GUIDs appear in the include/acuuid.h file */ - - -/* 1: Memory Device to System Address Range Map Structure */ - -typedef struct acpi_nfit_memory_map -{ - ACPI_NFIT_HEADER Header; - UINT32 DeviceHandle; - UINT16 PhysicalId; - UINT16 RegionId; - UINT16 RangeIndex; - UINT16 RegionIndex; - UINT64 RegionSize; - UINT64 RegionOffset; - UINT64 Address; - UINT16 InterleaveIndex; - UINT16 InterleaveWays; - UINT16 Flags; - UINT16 Reserved; /* Reserved, must be zero */ - -} ACPI_NFIT_MEMORY_MAP; - -/* Flags */ - -#define ACPI_NFIT_MEM_SAVE_FAILED (1) /* 00: Last SAVE to Memory Device failed */ -#define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1) /* 01: Last RESTORE from Memory Device failed */ -#define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2) /* 02: Platform flush failed */ -#define ACPI_NFIT_MEM_NOT_ARMED (1<<3) /* 03: Memory Device is not armed */ -#define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4) /* 04: Memory Device observed SMART/health events */ -#define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5) /* 05: SMART/health events enabled */ -#define ACPI_NFIT_MEM_MAP_FAILED (1<<6) /* 06: Mapping to SPA failed */ - - -/* 2: Interleave Structure */ - -typedef struct acpi_nfit_interleave -{ - ACPI_NFIT_HEADER Header; - UINT16 InterleaveIndex; - UINT16 Reserved; /* Reserved, must be zero */ - UINT32 LineCount; - UINT32 LineSize; - UINT32 LineOffset[1]; /* Variable length */ - -} ACPI_NFIT_INTERLEAVE; - - -/* 3: SMBIOS Management Information Structure */ - -typedef struct acpi_nfit_smbios -{ - ACPI_NFIT_HEADER Header; - UINT32 Reserved; /* Reserved, must be zero */ - UINT8 Data[1]; /* Variable length */ - -} ACPI_NFIT_SMBIOS; - - -/* 4: NVDIMM Control Region Structure */ - -typedef struct acpi_nfit_control_region -{ - ACPI_NFIT_HEADER Header; - UINT16 RegionIndex; - UINT16 VendorId; - UINT16 DeviceId; - UINT16 RevisionId; - UINT16 SubsystemVendorId; - UINT16 SubsystemDeviceId; - UINT16 SubsystemRevisionId; - UINT8 ValidFields; - UINT8 ManufacturingLocation; - UINT16 ManufacturingDate; - UINT8 Reserved[2]; /* Reserved, must be zero */ - UINT32 SerialNumber; - UINT16 Code; - UINT16 Windows; - UINT64 WindowSize; - UINT64 CommandOffset; - UINT64 CommandSize; - UINT64 StatusOffset; - UINT64 StatusSize; - UINT16 Flags; - UINT8 Reserved1[6]; /* Reserved, must be zero */ - -} ACPI_NFIT_CONTROL_REGION; - -/* Flags */ - -#define ACPI_NFIT_CONTROL_BUFFERED (1) /* Block Data Windows implementation is buffered */ - -/* ValidFields bits */ - -#define ACPI_NFIT_CONTROL_MFG_INFO_VALID (1) /* Manufacturing fields are valid */ - - -/* 5: NVDIMM Block Data Window Region Structure */ - -typedef struct acpi_nfit_data_region -{ - ACPI_NFIT_HEADER Header; - UINT16 RegionIndex; - UINT16 Windows; - UINT64 Offset; - UINT64 Size; - UINT64 Capacity; - UINT64 StartAddress; - -} ACPI_NFIT_DATA_REGION; - - -/* 6: Flush Hint Address Structure */ - -typedef struct acpi_nfit_flush_address -{ - ACPI_NFIT_HEADER Header; - UINT32 DeviceHandle; - UINT16 HintCount; - UINT8 Reserved[6]; /* Reserved, must be zero */ - UINT64 HintAddress[1]; /* Variable length */ - -} ACPI_NFIT_FLUSH_ADDRESS; - - -/* 7: Platform Capabilities Structure */ - -typedef struct acpi_nfit_capabilities -{ - ACPI_NFIT_HEADER Header; - UINT8 HighestCapability; - UINT8 Reserved[3]; /* Reserved, must be zero */ - UINT32 Capabilities; - UINT32 Reserved2; - -} ACPI_NFIT_CAPABILITIES; - -/* Capabilities Flags */ - -#define ACPI_NFIT_CAPABILITY_CACHE_FLUSH (1) /* 00: Cache Flush to NVDIMM capable */ -#define ACPI_NFIT_CAPABILITY_MEM_FLUSH (1<<1) /* 01: Memory Flush to NVDIMM capable */ -#define ACPI_NFIT_CAPABILITY_MEM_MIRRORING (1<<2) /* 02: Memory Mirroring capable */ - - -/* - * NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM - */ -typedef struct nfit_device_handle -{ - UINT32 Handle; - -} NFIT_DEVICE_HANDLE; - -/* Device handle construction and extraction macros */ - -#define ACPI_NFIT_DIMM_NUMBER_MASK 0x0000000F -#define ACPI_NFIT_CHANNEL_NUMBER_MASK 0x000000F0 -#define ACPI_NFIT_MEMORY_ID_MASK 0x00000F00 -#define ACPI_NFIT_SOCKET_ID_MASK 0x0000F000 -#define ACPI_NFIT_NODE_ID_MASK 0x0FFF0000 - -#define ACPI_NFIT_DIMM_NUMBER_OFFSET 0 -#define ACPI_NFIT_CHANNEL_NUMBER_OFFSET 4 -#define ACPI_NFIT_MEMORY_ID_OFFSET 8 -#define ACPI_NFIT_SOCKET_ID_OFFSET 12 -#define ACPI_NFIT_NODE_ID_OFFSET 16 - -/* Macro to construct a NFIT/NVDIMM device handle */ - -#define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \ - ((dimm) | \ - ((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET) | \ - ((memory) << ACPI_NFIT_MEMORY_ID_OFFSET) | \ - ((socket) << ACPI_NFIT_SOCKET_ID_OFFSET) | \ - ((node) << ACPI_NFIT_NODE_ID_OFFSET)) - -/* Macros to extract individual fields from a NFIT/NVDIMM device handle */ - -#define ACPI_NFIT_GET_DIMM_NUMBER(handle) \ - ((handle) & ACPI_NFIT_DIMM_NUMBER_MASK) - -#define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \ - (((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET) - -#define ACPI_NFIT_GET_MEMORY_ID(handle) \ - (((handle) & ACPI_NFIT_MEMORY_ID_MASK) >> ACPI_NFIT_MEMORY_ID_OFFSET) - -#define ACPI_NFIT_GET_SOCKET_ID(handle) \ - (((handle) & ACPI_NFIT_SOCKET_ID_MASK) >> ACPI_NFIT_SOCKET_ID_OFFSET) - -#define ACPI_NFIT_GET_NODE_ID(handle) \ - (((handle) & ACPI_NFIT_NODE_ID_MASK) >> ACPI_NFIT_NODE_ID_OFFSET) - - -/******************************************************************************* - * - * PDTT - Platform Debug Trigger Table (ACPI 6.2) - * Version 0 - * - ******************************************************************************/ - -typedef struct acpi_table_pdtt -{ - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT8 TriggerCount; - UINT8 Reserved[3]; - UINT32 ArrayOffset; - -} ACPI_TABLE_PDTT; - - -/* - * PDTT Communication Channel Identifier Structure. - * The number of these structures is defined by TriggerCount above, - * starting at ArrayOffset. - */ -typedef struct acpi_pdtt_channel -{ - UINT8 SubchannelId; + UINT32 Id; /* Hardware ID of event timer block */ + ACPI_GENERIC_ADDRESS Address; /* Address of event timer block */ + UINT8 Sequence; /* HPET sequence number */ + UINT16 MinimumTick; /* Main counter min tick, periodic mode */ UINT8 Flags; -} ACPI_PDTT_CHANNEL; - -/* Flags for above */ - -#define ACPI_PDTT_RUNTIME_TRIGGER (1) -#define ACPI_PDTT_WAIT_COMPLETION (1<<1) - +} ACPI_TABLE_HPET; -/******************************************************************************* - * - * PPTT - Processor Properties Topology Table (ACPI 6.2) - * Version 1 - * - ******************************************************************************/ - -typedef struct acpi_table_pptt -{ - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ +/* Masks for Flags field above */ -} ACPI_TABLE_PPTT; +#define ACPI_HPET_PAGE_PROTECT_MASK (3) -/* Values for Type field above */ +/* Values for Page Protect flags */ -enum AcpiPpttType +enum AcpiHpetPageProtect { - ACPI_PPTT_TYPE_PROCESSOR = 0, - ACPI_PPTT_TYPE_CACHE = 1, - ACPI_PPTT_TYPE_ID = 2, - ACPI_PPTT_TYPE_RESERVED = 3 + ACPI_HPET_NO_PAGE_PROTECT = 0, + ACPI_HPET_PAGE_PROTECT4 = 1, + ACPI_HPET_PAGE_PROTECT64 = 2 }; -/* 0: Processor Hierarchy Node Structure */ - -typedef struct acpi_pptt_processor -{ - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; - UINT32 Flags; - UINT32 Parent; - UINT32 AcpiProcessorId; - UINT32 NumberOfPrivResources; - -} ACPI_PPTT_PROCESSOR; - -/* Flags */ - -#define ACPI_PPTT_PHYSICAL_PACKAGE (1) /* Physical package */ -#define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID (2) /* ACPI Processor ID valid */ - - -/* 1: Cache Type Structure */ - -typedef struct acpi_pptt_cache -{ - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; - UINT32 Flags; - UINT32 NextLevelOfCache; - UINT32 Size; - UINT32 NumberOfSets; - UINT8 Associativity; - UINT8 Attributes; - UINT16 LineSize; - -} ACPI_PPTT_CACHE; - -/* Flags */ - -#define ACPI_PPTT_SIZE_PROPERTY_VALID (1) /* Physical property valid */ -#define ACPI_PPTT_NUMBER_OF_SETS_VALID (1<<1) /* Number of sets valid */ -#define ACPI_PPTT_ASSOCIATIVITY_VALID (1<<2) /* Associativity valid */ -#define ACPI_PPTT_ALLOCATION_TYPE_VALID (1<<3) /* Allocation type valid */ -#define ACPI_PPTT_CACHE_TYPE_VALID (1<<4) /* Cache type valid */ -#define ACPI_PPTT_WRITE_POLICY_VALID (1<<5) /* Write policy valid */ -#define ACPI_PPTT_LINE_SIZE_VALID (1<<6) /* Line size valid */ - -/* Masks for Attributes */ - -#define ACPI_PPTT_MASK_ALLOCATION_TYPE (0x03) /* Allocation type */ -#define ACPI_PPTT_MASK_CACHE_TYPE (0x0C) /* Cache type */ -#define ACPI_PPTT_MASK_WRITE_POLICY (0x10) /* Write policy */ - -/* Attributes describing cache */ -#define ACPI_PPTT_CACHE_READ_ALLOCATE (0x0) /* Cache line is allocated on read */ -#define ACPI_PPTT_CACHE_WRITE_ALLOCATE (0x01) /* Cache line is allocated on write */ -#define ACPI_PPTT_CACHE_RW_ALLOCATE (0x02) /* Cache line is allocated on read and write */ -#define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT (0x03) /* Alternate representation of above */ - -#define ACPI_PPTT_CACHE_TYPE_DATA (0x0) /* Data cache */ -#define ACPI_PPTT_CACHE_TYPE_INSTR (1<<2) /* Instruction cache */ -#define ACPI_PPTT_CACHE_TYPE_UNIFIED (2<<2) /* Unified I & D cache */ -#define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT (3<<2) /* Alternate representation of above */ - -#define ACPI_PPTT_CACHE_POLICY_WB (0x0) /* Cache is write back */ -#define ACPI_PPTT_CACHE_POLICY_WT (1<<4) /* Cache is write through */ - -/* 2: ID Structure */ - -typedef struct acpi_pptt_id -{ - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; - UINT32 VendorId; - UINT64 Level1Id; - UINT64 Level2Id; - UINT16 MajorRev; - UINT16 MinorRev; - UINT16 SpinRev; - -} ACPI_PPTT_ID; - - /******************************************************************************* * - * SBST - Smart Battery Specification Table + * IBFT - Boot Firmware Table * Version 1 * - ******************************************************************************/ - -typedef struct acpi_table_sbst -{ - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 WarningLevel; - UINT32 LowLevel; - UINT32 CriticalLevel; - -} ACPI_TABLE_SBST; - - -/******************************************************************************* + * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b + * Specification", Version 1.01, March 1, 2007 * - * SDEV - Secure Devices Table (ACPI 6.2) - * Version 1 + * Note: It appears that this table is not intended to appear in the RSDT/XSDT. + * Therefore, it is not currently supported by the disassembler. * ******************************************************************************/ -typedef struct acpi_table_sdev +typedef struct acpi_table_ibft { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT8 Reserved[12]; + +} ACPI_TABLE_IBFT; -} ACPI_TABLE_SDEV; +/* IBFT common subtable header */ -typedef struct acpi_sdev_header +typedef struct acpi_ibft_header { UINT8 Type; - UINT8 Flags; + UINT8 Version; UINT16 Length; + UINT8 Index; + UINT8 Flags; -} ACPI_SDEV_HEADER; - - -/* Values for subtable type above */ - -enum AcpiSdevType -{ - ACPI_SDEV_TYPE_NAMESPACE_DEVICE = 0, - ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1, - ACPI_SDEV_TYPE_RESERVED = 2 /* 2 and greater are reserved */ -}; - -/* Values for flags above */ - -#define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS (1) - -/* - * SDEV subtables - */ - -/* 0: Namespace Device Based Secure Device Structure */ - -typedef struct acpi_sdev_namespace -{ - ACPI_SDEV_HEADER Header; - UINT16 DeviceIdOffset; - UINT16 DeviceIdLength; - UINT16 VendorDataOffset; - UINT16 VendorDataLength; - -} ACPI_SDEV_NAMESPACE; - -/* 1: PCIe Endpoint Device Based Device Structure */ - -typedef struct acpi_sdev_pcie -{ - ACPI_SDEV_HEADER Header; - UINT16 Segment; - UINT16 StartBus; - UINT16 PathOffset; - UINT16 PathLength; - UINT16 VendorDataOffset; - UINT16 VendorDataLength; - -} ACPI_SDEV_PCIE; - -/* 1a: PCIe Endpoint path entry */ - -typedef struct acpi_sdev_pcie_path -{ - UINT8 Device; - UINT8 Function; - -} ACPI_SDEV_PCIE_PATH; - - -/******************************************************************************* - * - * SLIT - System Locality Distance Information Table - * Version 1 - * - ******************************************************************************/ - -typedef struct acpi_table_slit -{ - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT64 LocalityCount; - UINT8 Entry[1]; /* Real size = localities^2 */ - -} ACPI_TABLE_SLIT; - - -/******************************************************************************* - * - * SRAT - System Resource Affinity Table - * Version 3 - * - ******************************************************************************/ - -typedef struct acpi_table_srat -{ - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 TableRevision; /* Must be value '1' */ - UINT64 Reserved; /* Reserved, must be zero */ - -} ACPI_TABLE_SRAT; +} ACPI_IBFT_HEADER; -/* Values for subtable type in ACPI_SUBTABLE_HEADER */ +/* Values for Type field above */ -enum AcpiSratType +enum AcpiIbftType { - ACPI_SRAT_TYPE_CPU_AFFINITY = 0, - ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1, - ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2, - ACPI_SRAT_TYPE_GICC_AFFINITY = 3, - ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4, /* ACPI 6.2 */ - ACPI_SRAT_TYPE_RESERVED = 5 /* 5 and greater are reserved */ + ACPI_IBFT_TYPE_NOT_USED = 0, + ACPI_IBFT_TYPE_CONTROL = 1, + ACPI_IBFT_TYPE_INITIATOR = 2, + ACPI_IBFT_TYPE_NIC = 3, + ACPI_IBFT_TYPE_TARGET = 4, + ACPI_IBFT_TYPE_EXTENSIONS = 5, + ACPI_IBFT_TYPE_RESERVED = 6 /* 6 and greater are reserved */ }; -/* - * SRAT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER - */ - -/* 0: Processor Local APIC/SAPIC Affinity */ - -typedef struct acpi_srat_cpu_affinity -{ - ACPI_SUBTABLE_HEADER Header; - UINT8 ProximityDomainLo; - UINT8 ApicId; - UINT32 Flags; - UINT8 LocalSapicEid; - UINT8 ProximityDomainHi[3]; - UINT32 ClockDomain; - -} ACPI_SRAT_CPU_AFFINITY; - -/* Flags */ - -#define ACPI_SRAT_CPU_USE_AFFINITY (1) /* 00: Use affinity structure */ - - -/* 1: Memory Affinity */ - -typedef struct acpi_srat_mem_affinity -{ - ACPI_SUBTABLE_HEADER Header; - UINT32 ProximityDomain; - UINT16 Reserved; /* Reserved, must be zero */ - UINT64 BaseAddress; - UINT64 Length; - UINT32 Reserved1; - UINT32 Flags; - UINT64 Reserved2; /* Reserved, must be zero */ - -} ACPI_SRAT_MEM_AFFINITY; - -/* Flags */ - -#define ACPI_SRAT_MEM_ENABLED (1) /* 00: Use affinity structure */ -#define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1) /* 01: Memory region is hot pluggable */ -#define ACPI_SRAT_MEM_NON_VOLATILE (1<<2) /* 02: Memory region is non-volatile */ - - -/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */ - -typedef struct acpi_srat_x2apic_cpu_affinity -{ - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; /* Reserved, must be zero */ - UINT32 ProximityDomain; - UINT32 ApicId; - UINT32 Flags; - UINT32 ClockDomain; - UINT32 Reserved2; - -} ACPI_SRAT_X2APIC_CPU_AFFINITY; - -/* Flags for ACPI_SRAT_CPU_AFFINITY and ACPI_SRAT_X2APIC_CPU_AFFINITY */ - -#define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */ - - -/* 3: GICC Affinity (ACPI 5.1) */ - -typedef struct acpi_srat_gicc_affinity -{ - ACPI_SUBTABLE_HEADER Header; - UINT32 ProximityDomain; - UINT32 AcpiProcessorUid; - UINT32 Flags; - UINT32 ClockDomain; - -} ACPI_SRAT_GICC_AFFINITY; - -/* Flags for ACPI_SRAT_GICC_AFFINITY */ - -#define ACPI_SRAT_GICC_ENABLED (1) /* 00: Use affinity structure */ - - -/* 4: GCC ITS Affinity (ACPI 6.2) */ - -typedef struct acpi_srat_gic_its_affinity -{ - ACPI_SUBTABLE_HEADER Header; - UINT32 ProximityDomain; - UINT16 Reserved; - UINT32 ItsId; -} ACPI_SRAT_GIC_ITS_AFFINITY; +/* IBFT subtables */ + +typedef struct acpi_ibft_control +{ + ACPI_IBFT_HEADER Header; + UINT16 Extensions; + UINT16 InitiatorOffset; + UINT16 Nic0Offset; + UINT16 Target0Offset; + UINT16 Nic1Offset; + UINT16 Target1Offset; + +} ACPI_IBFT_CONTROL; + +typedef struct acpi_ibft_initiator +{ + ACPI_IBFT_HEADER Header; + UINT8 SnsServer[16]; + UINT8 SlpServer[16]; + UINT8 PrimaryServer[16]; + UINT8 SecondaryServer[16]; + UINT16 NameLength; + UINT16 NameOffset; + +} ACPI_IBFT_INITIATOR; + +typedef struct acpi_ibft_nic +{ + ACPI_IBFT_HEADER Header; + UINT8 IpAddress[16]; + UINT8 SubnetMaskPrefix; + UINT8 Origin; + UINT8 Gateway[16]; + UINT8 PrimaryDns[16]; + UINT8 SecondaryDns[16]; + UINT8 Dhcp[16]; + UINT16 Vlan; + UINT8 MacAddress[6]; + UINT16 PciAddress; + UINT16 NameLength; + UINT16 NameOffset; + +} ACPI_IBFT_NIC; + +typedef struct acpi_ibft_target +{ + ACPI_IBFT_HEADER Header; + UINT8 TargetIpAddress[16]; + UINT16 TargetIpSocket; + UINT8 TargetBootLun[8]; + UINT8 ChapType; + UINT8 NicAssociation; + UINT16 TargetNameLength; + UINT16 TargetNameOffset; + UINT16 ChapNameLength; + UINT16 ChapNameOffset; + UINT16 ChapSecretLength; + UINT16 ChapSecretOffset; + UINT16 ReverseChapNameLength; + UINT16 ReverseChapNameOffset; + UINT16 ReverseChapSecretLength; + UINT16 ReverseChapSecretOffset; + +} ACPI_IBFT_TARGET; /* Reset to default packing */ diff --git a/source/include/actbl2.h b/source/include/actbl2.h index cad2fb24f7757..4b3d460d88e38 100644 --- a/source/include/actbl2.h +++ b/source/include/actbl2.h @@ -160,9 +160,6 @@ * These tables are not consumed directly by the ACPICA subsystem, but are * included here to support device drivers and the AML disassembler. * - * Generally, the tables in this file are defined by third-party specifications, - * and are not defined directly by the ACPI specification itself. - * ******************************************************************************/ @@ -171,44 +168,26 @@ * file. Useful because they make it more difficult to inadvertently type in * the wrong signature. */ -#define ACPI_SIG_ASF "ASF!" /* Alert Standard Format table */ -#define ACPI_SIG_BOOT "BOOT" /* Simple Boot Flag Table */ -#define ACPI_SIG_CSRT "CSRT" /* Core System Resource Table */ -#define ACPI_SIG_DBG2 "DBG2" /* Debug Port table type 2 */ -#define ACPI_SIG_DBGP "DBGP" /* Debug Port table */ -#define ACPI_SIG_DMAR "DMAR" /* DMA Remapping table */ -#define ACPI_SIG_HPET "HPET" /* High Precision Event Timer table */ -#define ACPI_SIG_IBFT "IBFT" /* iSCSI Boot Firmware Table */ #define ACPI_SIG_IORT "IORT" /* IO Remapping Table */ #define ACPI_SIG_IVRS "IVRS" /* I/O Virtualization Reporting Structure */ #define ACPI_SIG_LPIT "LPIT" /* Low Power Idle Table */ +#define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */ #define ACPI_SIG_MCFG "MCFG" /* PCI Memory Mapped Configuration table */ #define ACPI_SIG_MCHI "MCHI" /* Management Controller Host Interface table */ +#define ACPI_SIG_MPST "MPST" /* Memory Power State Table */ +#define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */ #define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ #define ACPI_SIG_MTMR "MTMR" /* MID Timer table */ +#define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */ +#define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */ +#define ACPI_SIG_PDTT "PDTT" /* Platform Debug Trigger Table */ +#define ACPI_SIG_PMTT "PMTT" /* Platform Memory Topology Table */ +#define ACPI_SIG_PPTT "PPTT" /* Processor Properties Topology Table */ +#define ACPI_SIG_RASF "RASF" /* RAS Feature table */ +#define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ #define ACPI_SIG_SDEI "SDEI" /* Software Delegated Exception Interface Table */ -#define ACPI_SIG_SLIC "SLIC" /* Software Licensing Description Table */ -#define ACPI_SIG_SPCR "SPCR" /* Serial Port Console Redirection table */ -#define ACPI_SIG_SPMI "SPMI" /* Server Platform Management Interface table */ -#define ACPI_SIG_TCPA "TCPA" /* Trusted Computing Platform Alliance table */ -#define ACPI_SIG_TPM2 "TPM2" /* Trusted Platform Module 2.0 H/W interface table */ -#define ACPI_SIG_UEFI "UEFI" /* Uefi Boot Optimization Table */ -#define ACPI_SIG_VRTC "VRTC" /* Virtual Real Time Clock Table */ -#define ACPI_SIG_WAET "WAET" /* Windows ACPI Emulated devices Table */ -#define ACPI_SIG_WDAT "WDAT" /* Watchdog Action Table */ -#define ACPI_SIG_WDDT "WDDT" /* Watchdog Timer Description Table */ -#define ACPI_SIG_WDRT "WDRT" /* Watchdog Resource Table */ -#define ACPI_SIG_WSMT "WSMT" /* Windows SMM Security Migrations Table */ -#define ACPI_SIG_XXXX "XXXX" /* Intermediate AML header for ASL/ASL+ converter */ - -#ifdef ACPI_UNDEFINED_TABLES -/* - * These tables have been seen in the field, but no definition has been found - */ -#define ACPI_SIG_ATKG "ATKG" -#define ACPI_SIG_GSCI "GSCI" /* GMCH SCI table */ -#define ACPI_SIG_IEIT "IEIT" -#endif +#define ACPI_SIG_SDEV "SDEV" /* Secure Devices table */ + /* * All tables must be byte-packed to match the ACPI specification, since @@ -231,647 +210,6 @@ /******************************************************************************* * - * ASF - Alert Standard Format table (Signature "ASF!") - * Revision 0x10 - * - * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003 - * - ******************************************************************************/ - -typedef struct acpi_table_asf -{ - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - -} ACPI_TABLE_ASF; - - -/* ASF subtable header */ - -typedef struct acpi_asf_header -{ - UINT8 Type; - UINT8 Reserved; - UINT16 Length; - -} ACPI_ASF_HEADER; - - -/* Values for Type field above */ - -enum AcpiAsfType -{ - ACPI_ASF_TYPE_INFO = 0, - ACPI_ASF_TYPE_ALERT = 1, - ACPI_ASF_TYPE_CONTROL = 2, - ACPI_ASF_TYPE_BOOT = 3, - ACPI_ASF_TYPE_ADDRESS = 4, - ACPI_ASF_TYPE_RESERVED = 5 -}; - -/* - * ASF subtables - */ - -/* 0: ASF Information */ - -typedef struct acpi_asf_info -{ - ACPI_ASF_HEADER Header; - UINT8 MinResetValue; - UINT8 MinPollInterval; - UINT16 SystemId; - UINT32 MfgId; - UINT8 Flags; - UINT8 Reserved2[3]; - -} ACPI_ASF_INFO; - -/* Masks for Flags field above */ - -#define ACPI_ASF_SMBUS_PROTOCOLS (1) - - -/* 1: ASF Alerts */ - -typedef struct acpi_asf_alert -{ - ACPI_ASF_HEADER Header; - UINT8 AssertMask; - UINT8 DeassertMask; - UINT8 Alerts; - UINT8 DataLength; - -} ACPI_ASF_ALERT; - -typedef struct acpi_asf_alert_data -{ - UINT8 Address; - UINT8 Command; - UINT8 Mask; - UINT8 Value; - UINT8 SensorType; - UINT8 Type; - UINT8 Offset; - UINT8 SourceType; - UINT8 Severity; - UINT8 SensorNumber; - UINT8 Entity; - UINT8 Instance; - -} ACPI_ASF_ALERT_DATA; - - -/* 2: ASF Remote Control */ - -typedef struct acpi_asf_remote -{ - ACPI_ASF_HEADER Header; - UINT8 Controls; - UINT8 DataLength; - UINT16 Reserved2; - -} ACPI_ASF_REMOTE; - -typedef struct acpi_asf_control_data -{ - UINT8 Function; - UINT8 Address; - UINT8 Command; - UINT8 Value; - -} ACPI_ASF_CONTROL_DATA; - - -/* 3: ASF RMCP Boot Options */ - -typedef struct acpi_asf_rmcp -{ - ACPI_ASF_HEADER Header; - UINT8 Capabilities[7]; - UINT8 CompletionCode; - UINT32 EnterpriseId; - UINT8 Command; - UINT16 Parameter; - UINT16 BootOptions; - UINT16 OemParameters; - -} ACPI_ASF_RMCP; - - -/* 4: ASF Address */ - -typedef struct acpi_asf_address -{ - ACPI_ASF_HEADER Header; - UINT8 EpromAddress; - UINT8 Devices; - -} ACPI_ASF_ADDRESS; - - -/******************************************************************************* - * - * BOOT - Simple Boot Flag Table - * Version 1 - * - * Conforms to the "Simple Boot Flag Specification", Version 2.1 - * - ******************************************************************************/ - -typedef struct acpi_table_boot -{ - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT8 CmosIndex; /* Index in CMOS RAM for the boot register */ - UINT8 Reserved[3]; - -} ACPI_TABLE_BOOT; - - -/******************************************************************************* - * - * CSRT - Core System Resource Table - * Version 0 - * - * Conforms to the "Core System Resource Table (CSRT)", November 14, 2011 - * - ******************************************************************************/ - -typedef struct acpi_table_csrt -{ - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - -} ACPI_TABLE_CSRT; - - -/* Resource Group subtable */ - -typedef struct acpi_csrt_group -{ - UINT32 Length; - UINT32 VendorId; - UINT32 SubvendorId; - UINT16 DeviceId; - UINT16 SubdeviceId; - UINT16 Revision; - UINT16 Reserved; - UINT32 SharedInfoLength; - - /* Shared data immediately follows (Length = SharedInfoLength) */ - -} ACPI_CSRT_GROUP; - -/* Shared Info subtable */ - -typedef struct acpi_csrt_shared_info -{ - UINT16 MajorVersion; - UINT16 MinorVersion; - UINT32 MmioBaseLow; - UINT32 MmioBaseHigh; - UINT32 GsiInterrupt; - UINT8 InterruptPolarity; - UINT8 InterruptMode; - UINT8 NumChannels; - UINT8 DmaAddressWidth; - UINT16 BaseRequestLine; - UINT16 NumHandshakeSignals; - UINT32 MaxBlockSize; - - /* Resource descriptors immediately follow (Length = Group Length - SharedInfoLength) */ - -} ACPI_CSRT_SHARED_INFO; - -/* Resource Descriptor subtable */ - -typedef struct acpi_csrt_descriptor -{ - UINT32 Length; - UINT16 Type; - UINT16 Subtype; - UINT32 Uid; - - /* Resource-specific information immediately follows */ - -} ACPI_CSRT_DESCRIPTOR; - - -/* Resource Types */ - -#define ACPI_CSRT_TYPE_INTERRUPT 0x0001 -#define ACPI_CSRT_TYPE_TIMER 0x0002 -#define ACPI_CSRT_TYPE_DMA 0x0003 - -/* Resource Subtypes */ - -#define ACPI_CSRT_XRUPT_LINE 0x0000 -#define ACPI_CSRT_XRUPT_CONTROLLER 0x0001 -#define ACPI_CSRT_TIMER 0x0000 -#define ACPI_CSRT_DMA_CHANNEL 0x0000 -#define ACPI_CSRT_DMA_CONTROLLER 0x0001 - - -/******************************************************************************* - * - * DBG2 - Debug Port Table 2 - * Version 0 (Both main table and subtables) - * - * Conforms to "Microsoft Debug Port Table 2 (DBG2)", December 10, 2015 - * - ******************************************************************************/ - -typedef struct acpi_table_dbg2 -{ - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 InfoOffset; - UINT32 InfoCount; - -} ACPI_TABLE_DBG2; - - -typedef struct acpi_dbg2_header -{ - UINT32 InfoOffset; - UINT32 InfoCount; - -} ACPI_DBG2_HEADER; - - -/* Debug Device Information Subtable */ - -typedef struct acpi_dbg2_device -{ - UINT8 Revision; - UINT16 Length; - UINT8 RegisterCount; /* Number of BaseAddress registers */ - UINT16 NamepathLength; - UINT16 NamepathOffset; - UINT16 OemDataLength; - UINT16 OemDataOffset; - UINT16 PortType; - UINT16 PortSubtype; - UINT16 Reserved; - UINT16 BaseAddressOffset; - UINT16 AddressSizeOffset; - /* - * Data that follows: - * BaseAddress (required) - Each in 12-byte Generic Address Structure format. - * AddressSize (required) - Array of UINT32 sizes corresponding to each BaseAddress register. - * Namepath (required) - Null terminated string. Single dot if not supported. - * OemData (optional) - Length is OemDataLength. - */ -} ACPI_DBG2_DEVICE; - -/* Types for PortType field above */ - -#define ACPI_DBG2_SERIAL_PORT 0x8000 -#define ACPI_DBG2_1394_PORT 0x8001 -#define ACPI_DBG2_USB_PORT 0x8002 -#define ACPI_DBG2_NET_PORT 0x8003 - -/* Subtypes for PortSubtype field above */ - -#define ACPI_DBG2_16550_COMPATIBLE 0x0000 -#define ACPI_DBG2_16550_SUBSET 0x0001 -#define ACPI_DBG2_ARM_PL011 0x0003 -#define ACPI_DBG2_ARM_SBSA_32BIT 0x000D -#define ACPI_DBG2_ARM_SBSA_GENERIC 0x000E -#define ACPI_DBG2_ARM_DCC 0x000F -#define ACPI_DBG2_BCM2835 0x0010 - -#define ACPI_DBG2_1394_STANDARD 0x0000 - -#define ACPI_DBG2_USB_XHCI 0x0000 -#define ACPI_DBG2_USB_EHCI 0x0001 - - -/******************************************************************************* - * - * DBGP - Debug Port table - * Version 1 - * - * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000 - * - ******************************************************************************/ - -typedef struct acpi_table_dbgp -{ - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT8 Type; /* 0=full 16550, 1=subset of 16550 */ - UINT8 Reserved[3]; - ACPI_GENERIC_ADDRESS DebugPort; - -} ACPI_TABLE_DBGP; - - -/******************************************************************************* - * - * DMAR - DMA Remapping table - * Version 1 - * - * Conforms to "Intel Virtualization Technology for Directed I/O", - * Version 2.3, October 2014 - * - ******************************************************************************/ - -typedef struct acpi_table_dmar -{ - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT8 Width; /* Host Address Width */ - UINT8 Flags; - UINT8 Reserved[10]; - -} ACPI_TABLE_DMAR; - -/* Masks for Flags field above */ - -#define ACPI_DMAR_INTR_REMAP (1) -#define ACPI_DMAR_X2APIC_OPT_OUT (1<<1) -#define ACPI_DMAR_X2APIC_MODE (1<<2) - - -/* DMAR subtable header */ - -typedef struct acpi_dmar_header -{ - UINT16 Type; - UINT16 Length; - -} ACPI_DMAR_HEADER; - -/* Values for subtable type in ACPI_DMAR_HEADER */ - -enum AcpiDmarType -{ - ACPI_DMAR_TYPE_HARDWARE_UNIT = 0, - ACPI_DMAR_TYPE_RESERVED_MEMORY = 1, - ACPI_DMAR_TYPE_ROOT_ATS = 2, - ACPI_DMAR_TYPE_HARDWARE_AFFINITY = 3, - ACPI_DMAR_TYPE_NAMESPACE = 4, - ACPI_DMAR_TYPE_RESERVED = 5 /* 5 and greater are reserved */ -}; - - -/* DMAR Device Scope structure */ - -typedef struct acpi_dmar_device_scope -{ - UINT8 EntryType; - UINT8 Length; - UINT16 Reserved; - UINT8 EnumerationId; - UINT8 Bus; - -} ACPI_DMAR_DEVICE_SCOPE; - -/* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE - device types */ - -enum AcpiDmarScopeType -{ - ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0, - ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1, - ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2, - ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3, - ACPI_DMAR_SCOPE_TYPE_HPET = 4, - ACPI_DMAR_SCOPE_TYPE_NAMESPACE = 5, - ACPI_DMAR_SCOPE_TYPE_RESERVED = 6 /* 6 and greater are reserved */ -}; - -typedef struct acpi_dmar_pci_path -{ - UINT8 Device; - UINT8 Function; - -} ACPI_DMAR_PCI_PATH; - - -/* - * DMAR Subtables, correspond to Type in ACPI_DMAR_HEADER - */ - -/* 0: Hardware Unit Definition */ - -typedef struct acpi_dmar_hardware_unit -{ - ACPI_DMAR_HEADER Header; - UINT8 Flags; - UINT8 Reserved; - UINT16 Segment; - UINT64 Address; /* Register Base Address */ - -} ACPI_DMAR_HARDWARE_UNIT; - -/* Masks for Flags field above */ - -#define ACPI_DMAR_INCLUDE_ALL (1) - - -/* 1: Reserved Memory Defininition */ - -typedef struct acpi_dmar_reserved_memory -{ - ACPI_DMAR_HEADER Header; - UINT16 Reserved; - UINT16 Segment; - UINT64 BaseAddress; /* 4K aligned base address */ - UINT64 EndAddress; /* 4K aligned limit address */ - -} ACPI_DMAR_RESERVED_MEMORY; - -/* Masks for Flags field above */ - -#define ACPI_DMAR_ALLOW_ALL (1) - - -/* 2: Root Port ATS Capability Reporting Structure */ - -typedef struct acpi_dmar_atsr -{ - ACPI_DMAR_HEADER Header; - UINT8 Flags; - UINT8 Reserved; - UINT16 Segment; - -} ACPI_DMAR_ATSR; - -/* Masks for Flags field above */ - -#define ACPI_DMAR_ALL_PORTS (1) - - -/* 3: Remapping Hardware Static Affinity Structure */ - -typedef struct acpi_dmar_rhsa -{ - ACPI_DMAR_HEADER Header; - UINT32 Reserved; - UINT64 BaseAddress; - UINT32 ProximityDomain; - -} ACPI_DMAR_RHSA; - - -/* 4: ACPI Namespace Device Declaration Structure */ - -typedef struct acpi_dmar_andd -{ - ACPI_DMAR_HEADER Header; - UINT8 Reserved[3]; - UINT8 DeviceNumber; - char DeviceName[1]; - -} ACPI_DMAR_ANDD; - - -/******************************************************************************* - * - * HPET - High Precision Event Timer table - * Version 1 - * - * Conforms to "IA-PC HPET (High Precision Event Timers) Specification", - * Version 1.0a, October 2004 - * - ******************************************************************************/ - -typedef struct acpi_table_hpet -{ - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 Id; /* Hardware ID of event timer block */ - ACPI_GENERIC_ADDRESS Address; /* Address of event timer block */ - UINT8 Sequence; /* HPET sequence number */ - UINT16 MinimumTick; /* Main counter min tick, periodic mode */ - UINT8 Flags; - -} ACPI_TABLE_HPET; - -/* Masks for Flags field above */ - -#define ACPI_HPET_PAGE_PROTECT_MASK (3) - -/* Values for Page Protect flags */ - -enum AcpiHpetPageProtect -{ - ACPI_HPET_NO_PAGE_PROTECT = 0, - ACPI_HPET_PAGE_PROTECT4 = 1, - ACPI_HPET_PAGE_PROTECT64 = 2 -}; - - -/******************************************************************************* - * - * IBFT - Boot Firmware Table - * Version 1 - * - * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b - * Specification", Version 1.01, March 1, 2007 - * - * Note: It appears that this table is not intended to appear in the RSDT/XSDT. - * Therefore, it is not currently supported by the disassembler. - * - ******************************************************************************/ - -typedef struct acpi_table_ibft -{ - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT8 Reserved[12]; - -} ACPI_TABLE_IBFT; - - -/* IBFT common subtable header */ - -typedef struct acpi_ibft_header -{ - UINT8 Type; - UINT8 Version; - UINT16 Length; - UINT8 Index; - UINT8 Flags; - -} ACPI_IBFT_HEADER; - -/* Values for Type field above */ - -enum AcpiIbftType -{ - ACPI_IBFT_TYPE_NOT_USED = 0, - ACPI_IBFT_TYPE_CONTROL = 1, - ACPI_IBFT_TYPE_INITIATOR = 2, - ACPI_IBFT_TYPE_NIC = 3, - ACPI_IBFT_TYPE_TARGET = 4, - ACPI_IBFT_TYPE_EXTENSIONS = 5, - ACPI_IBFT_TYPE_RESERVED = 6 /* 6 and greater are reserved */ -}; - - -/* IBFT subtables */ - -typedef struct acpi_ibft_control -{ - ACPI_IBFT_HEADER Header; - UINT16 Extensions; - UINT16 InitiatorOffset; - UINT16 Nic0Offset; - UINT16 Target0Offset; - UINT16 Nic1Offset; - UINT16 Target1Offset; - -} ACPI_IBFT_CONTROL; - -typedef struct acpi_ibft_initiator -{ - ACPI_IBFT_HEADER Header; - UINT8 SnsServer[16]; - UINT8 SlpServer[16]; - UINT8 PrimaryServer[16]; - UINT8 SecondaryServer[16]; - UINT16 NameLength; - UINT16 NameOffset; - -} ACPI_IBFT_INITIATOR; - -typedef struct acpi_ibft_nic -{ - ACPI_IBFT_HEADER Header; - UINT8 IpAddress[16]; - UINT8 SubnetMaskPrefix; - UINT8 Origin; - UINT8 Gateway[16]; - UINT8 PrimaryDns[16]; - UINT8 SecondaryDns[16]; - UINT8 Dhcp[16]; - UINT16 Vlan; - UINT8 MacAddress[6]; - UINT16 PciAddress; - UINT16 NameLength; - UINT16 NameOffset; - -} ACPI_IBFT_NIC; - -typedef struct acpi_ibft_target -{ - ACPI_IBFT_HEADER Header; - UINT8 TargetIpAddress[16]; - UINT16 TargetIpSocket; - UINT8 TargetBootLun[8]; - UINT8 ChapType; - UINT8 NicAssociation; - UINT16 TargetNameLength; - UINT16 TargetNameOffset; - UINT16 ChapNameLength; - UINT16 ChapNameOffset; - UINT16 ChapSecretLength; - UINT16 ChapSecretOffset; - UINT16 ReverseChapNameLength; - UINT16 ReverseChapNameOffset; - UINT16 ReverseChapSecretLength; - UINT16 ReverseChapSecretOffset; - -} ACPI_IBFT_TARGET; - - -/******************************************************************************* - * * IORT - IO Remapping Table * * Conforms to "IO Remapping Table System Software on ARM Platforms", @@ -1323,6 +661,333 @@ typedef struct acpi_lpit_native /******************************************************************************* * + * MADT - Multiple APIC Description Table + * Version 3 + * + ******************************************************************************/ + +typedef struct acpi_table_madt +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 Address; /* Physical address of local APIC */ + UINT32 Flags; + +} ACPI_TABLE_MADT; + +/* Masks for Flags field above */ + +#define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */ + +/* Values for PCATCompat flag */ + +#define ACPI_MADT_DUAL_PIC 1 +#define ACPI_MADT_MULTIPLE_APIC 0 + + +/* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */ + +enum AcpiMadtType +{ + ACPI_MADT_TYPE_LOCAL_APIC = 0, + ACPI_MADT_TYPE_IO_APIC = 1, + ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, + ACPI_MADT_TYPE_NMI_SOURCE = 3, + ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, + ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, + ACPI_MADT_TYPE_IO_SAPIC = 6, + ACPI_MADT_TYPE_LOCAL_SAPIC = 7, + ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, + ACPI_MADT_TYPE_LOCAL_X2APIC = 9, + ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, + ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, + ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, + ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13, + ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14, + ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15, + ACPI_MADT_TYPE_RESERVED = 16 /* 16 and greater are reserved */ +}; + + +/* + * MADT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER + */ + +/* 0: Processor Local APIC */ + +typedef struct acpi_madt_local_apic +{ + ACPI_SUBTABLE_HEADER Header; + UINT8 ProcessorId; /* ACPI processor id */ + UINT8 Id; /* Processor's local APIC id */ + UINT32 LapicFlags; + +} ACPI_MADT_LOCAL_APIC; + + +/* 1: IO APIC */ + +typedef struct acpi_madt_io_apic +{ + ACPI_SUBTABLE_HEADER Header; + UINT8 Id; /* I/O APIC ID */ + UINT8 Reserved; /* Reserved - must be zero */ + UINT32 Address; /* APIC physical address */ + UINT32 GlobalIrqBase; /* Global system interrupt where INTI lines start */ + +} ACPI_MADT_IO_APIC; + + +/* 2: Interrupt Override */ + +typedef struct acpi_madt_interrupt_override +{ + ACPI_SUBTABLE_HEADER Header; + UINT8 Bus; /* 0 - ISA */ + UINT8 SourceIrq; /* Interrupt source (IRQ) */ + UINT32 GlobalIrq; /* Global system interrupt */ + UINT16 IntiFlags; + +} ACPI_MADT_INTERRUPT_OVERRIDE; + + +/* 3: NMI Source */ + +typedef struct acpi_madt_nmi_source +{ + ACPI_SUBTABLE_HEADER Header; + UINT16 IntiFlags; + UINT32 GlobalIrq; /* Global system interrupt */ + +} ACPI_MADT_NMI_SOURCE; + + +/* 4: Local APIC NMI */ + +typedef struct acpi_madt_local_apic_nmi +{ + ACPI_SUBTABLE_HEADER Header; + UINT8 ProcessorId; /* ACPI processor id */ + UINT16 IntiFlags; + UINT8 Lint; /* LINTn to which NMI is connected */ + +} ACPI_MADT_LOCAL_APIC_NMI; + + +/* 5: Address Override */ + +typedef struct acpi_madt_local_apic_override +{ + ACPI_SUBTABLE_HEADER Header; + UINT16 Reserved; /* Reserved, must be zero */ + UINT64 Address; /* APIC physical address */ + +} ACPI_MADT_LOCAL_APIC_OVERRIDE; + + +/* 6: I/O Sapic */ + +typedef struct acpi_madt_io_sapic +{ + ACPI_SUBTABLE_HEADER Header; + UINT8 Id; /* I/O SAPIC ID */ + UINT8 Reserved; /* Reserved, must be zero */ + UINT32 GlobalIrqBase; /* Global interrupt for SAPIC start */ + UINT64 Address; /* SAPIC physical address */ + +} ACPI_MADT_IO_SAPIC; + + +/* 7: Local Sapic */ + +typedef struct acpi_madt_local_sapic +{ + ACPI_SUBTABLE_HEADER Header; + UINT8 ProcessorId; /* ACPI processor id */ + UINT8 Id; /* SAPIC ID */ + UINT8 Eid; /* SAPIC EID */ + UINT8 Reserved[3]; /* Reserved, must be zero */ + UINT32 LapicFlags; + UINT32 Uid; /* Numeric UID - ACPI 3.0 */ + char UidString[1]; /* String UID - ACPI 3.0 */ + +} ACPI_MADT_LOCAL_SAPIC; + + +/* 8: Platform Interrupt Source */ + +typedef struct acpi_madt_interrupt_source +{ + ACPI_SUBTABLE_HEADER Header; + UINT16 IntiFlags; + UINT8 Type; /* 1=PMI, 2=INIT, 3=corrected */ + UINT8 Id; /* Processor ID */ + UINT8 Eid; /* Processor EID */ + UINT8 IoSapicVector; /* Vector value for PMI interrupts */ + UINT32 GlobalIrq; /* Global system interrupt */ + UINT32 Flags; /* Interrupt Source Flags */ + +} ACPI_MADT_INTERRUPT_SOURCE; + +/* Masks for Flags field above */ + +#define ACPI_MADT_CPEI_OVERRIDE (1) + + +/* 9: Processor Local X2APIC (ACPI 4.0) */ + +typedef struct acpi_madt_local_x2apic +{ + ACPI_SUBTABLE_HEADER Header; + UINT16 Reserved; /* Reserved - must be zero */ + UINT32 LocalApicId; /* Processor x2APIC ID */ + UINT32 LapicFlags; + UINT32 Uid; /* ACPI processor UID */ + +} ACPI_MADT_LOCAL_X2APIC; + + +/* 10: Local X2APIC NMI (ACPI 4.0) */ + +typedef struct acpi_madt_local_x2apic_nmi +{ + ACPI_SUBTABLE_HEADER Header; + UINT16 IntiFlags; + UINT32 Uid; /* ACPI processor UID */ + UINT8 Lint; /* LINTn to which NMI is connected */ + UINT8 Reserved[3]; /* Reserved - must be zero */ + +} ACPI_MADT_LOCAL_X2APIC_NMI; + + +/* 11: Generic Interrupt (ACPI 5.0 + ACPI 6.0 changes) */ + +typedef struct acpi_madt_generic_interrupt +{ + ACPI_SUBTABLE_HEADER Header; + UINT16 Reserved; /* Reserved - must be zero */ + UINT32 CpuInterfaceNumber; + UINT32 Uid; + UINT32 Flags; + UINT32 ParkingVersion; + UINT32 PerformanceInterrupt; + UINT64 ParkedAddress; + UINT64 BaseAddress; + UINT64 GicvBaseAddress; + UINT64 GichBaseAddress; + UINT32 VgicInterrupt; + UINT64 GicrBaseAddress; + UINT64 ArmMpidr; + UINT8 EfficiencyClass; + UINT8 Reserved2[3]; + +} ACPI_MADT_GENERIC_INTERRUPT; + +/* Masks for Flags field above */ + +/* ACPI_MADT_ENABLED (1) Processor is usable if set */ +#define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */ +#define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */ + + +/* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */ + +typedef struct acpi_madt_generic_distributor +{ + ACPI_SUBTABLE_HEADER Header; + UINT16 Reserved; /* Reserved - must be zero */ + UINT32 GicId; + UINT64 BaseAddress; + UINT32 GlobalIrqBase; + UINT8 Version; + UINT8 Reserved2[3]; /* Reserved - must be zero */ + +} ACPI_MADT_GENERIC_DISTRIBUTOR; + +/* Values for Version field above */ + +enum AcpiMadtGicVersion +{ + ACPI_MADT_GIC_VERSION_NONE = 0, + ACPI_MADT_GIC_VERSION_V1 = 1, + ACPI_MADT_GIC_VERSION_V2 = 2, + ACPI_MADT_GIC_VERSION_V3 = 3, + ACPI_MADT_GIC_VERSION_V4 = 4, + ACPI_MADT_GIC_VERSION_RESERVED = 5 /* 5 and greater are reserved */ +}; + + +/* 13: Generic MSI Frame (ACPI 5.1) */ + +typedef struct acpi_madt_generic_msi_frame +{ + ACPI_SUBTABLE_HEADER Header; + UINT16 Reserved; /* Reserved - must be zero */ + UINT32 MsiFrameId; + UINT64 BaseAddress; + UINT32 Flags; + UINT16 SpiCount; + UINT16 SpiBase; + +} ACPI_MADT_GENERIC_MSI_FRAME; + +/* Masks for Flags field above */ + +#define ACPI_MADT_OVERRIDE_SPI_VALUES (1) + + +/* 14: Generic Redistributor (ACPI 5.1) */ + +typedef struct acpi_madt_generic_redistributor +{ + ACPI_SUBTABLE_HEADER Header; + UINT16 Reserved; /* reserved - must be zero */ + UINT64 BaseAddress; + UINT32 Length; + +} ACPI_MADT_GENERIC_REDISTRIBUTOR; + + +/* 15: Generic Translator (ACPI 6.0) */ + +typedef struct acpi_madt_generic_translator +{ + ACPI_SUBTABLE_HEADER Header; + UINT16 Reserved; /* reserved - must be zero */ + UINT32 TranslationId; + UINT64 BaseAddress; + UINT32 Reserved2; + +} ACPI_MADT_GENERIC_TRANSLATOR; + + +/* + * Common flags fields for MADT subtables + */ + +/* MADT Local APIC flags */ + +#define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ + +/* MADT MPS INTI flags (IntiFlags) */ + +#define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ +#define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ + +/* Values for MPS INTI flags */ + +#define ACPI_MADT_POLARITY_CONFORMS 0 +#define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 +#define ACPI_MADT_POLARITY_RESERVED 2 +#define ACPI_MADT_POLARITY_ACTIVE_LOW 3 + +#define ACPI_MADT_TRIGGER_CONFORMS (0) +#define ACPI_MADT_TRIGGER_EDGE (1<<2) +#define ACPI_MADT_TRIGGER_RESERVED (2<<2) +#define ACPI_MADT_TRIGGER_LEVEL (3<<2) + + +/******************************************************************************* + * * MCFG - PCI Memory Mapped Configuration table and subtable * Version 1 * @@ -1382,6 +1047,156 @@ typedef struct acpi_table_mchi /******************************************************************************* * + * MPST - Memory Power State Table (ACPI 5.0) + * Version 1 + * + ******************************************************************************/ + +#define ACPI_MPST_CHANNEL_INFO \ + UINT8 ChannelId; \ + UINT8 Reserved1[3]; \ + UINT16 PowerNodeCount; \ + UINT16 Reserved2; + +/* Main table */ + +typedef struct acpi_table_mpst +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ + +} ACPI_TABLE_MPST; + + +/* Memory Platform Communication Channel Info */ + +typedef struct acpi_mpst_channel +{ + ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ + +} ACPI_MPST_CHANNEL; + + +/* Memory Power Node Structure */ + +typedef struct acpi_mpst_power_node +{ + UINT8 Flags; + UINT8 Reserved1; + UINT16 NodeId; + UINT32 Length; + UINT64 RangeAddress; + UINT64 RangeLength; + UINT32 NumPowerStates; + UINT32 NumPhysicalComponents; + +} ACPI_MPST_POWER_NODE; + +/* Values for Flags field above */ + +#define ACPI_MPST_ENABLED 1 +#define ACPI_MPST_POWER_MANAGED 2 +#define ACPI_MPST_HOT_PLUG_CAPABLE 4 + + +/* Memory Power State Structure (follows POWER_NODE above) */ + +typedef struct acpi_mpst_power_state +{ + UINT8 PowerState; + UINT8 InfoIndex; + +} ACPI_MPST_POWER_STATE; + + +/* Physical Component ID Structure (follows POWER_STATE above) */ + +typedef struct acpi_mpst_component +{ + UINT16 ComponentId; + +} ACPI_MPST_COMPONENT; + + +/* Memory Power State Characteristics Structure (follows all POWER_NODEs) */ + +typedef struct acpi_mpst_data_hdr +{ + UINT16 CharacteristicsCount; + UINT16 Reserved; + +} ACPI_MPST_DATA_HDR; + +typedef struct acpi_mpst_power_data +{ + UINT8 StructureId; + UINT8 Flags; + UINT16 Reserved1; + UINT32 AveragePower; + UINT32 PowerSaving; + UINT64 ExitLatency; + UINT64 Reserved2; + +} ACPI_MPST_POWER_DATA; + +/* Values for Flags field above */ + +#define ACPI_MPST_PRESERVE 1 +#define ACPI_MPST_AUTOENTRY 2 +#define ACPI_MPST_AUTOEXIT 4 + + +/* Shared Memory Region (not part of an ACPI table) */ + +typedef struct acpi_mpst_shared +{ + UINT32 Signature; + UINT16 PccCommand; + UINT16 PccStatus; + UINT32 CommandRegister; + UINT32 StatusRegister; + UINT32 PowerStateId; + UINT32 PowerNodeId; + UINT64 EnergyConsumed; + UINT64 AveragePower; + +} ACPI_MPST_SHARED; + + +/******************************************************************************* + * + * MSCT - Maximum System Characteristics Table (ACPI 4.0) + * Version 1 + * + ******************************************************************************/ + +typedef struct acpi_table_msct +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 ProximityOffset; /* Location of proximity info struct(s) */ + UINT32 MaxProximityDomains;/* Max number of proximity domains */ + UINT32 MaxClockDomains; /* Max number of clock domains */ + UINT64 MaxAddress; /* Max physical address in system */ + +} ACPI_TABLE_MSCT; + + +/* Subtable - Maximum Proximity Domain Information. Version 1 */ + +typedef struct acpi_msct_proximity +{ + UINT8 Revision; + UINT8 Length; + UINT32 RangeStart; /* Start of domain range */ + UINT32 RangeEnd; /* End of domain range */ + UINT32 ProcessorCapacity; + UINT64 MemoryCapacity; /* In bytes */ + +} ACPI_MSCT_PROXIMITY; + + +/******************************************************************************* + * * MSDM - Microsoft Data Management table * * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", @@ -1425,518 +1240,907 @@ typedef struct acpi_mtmr_entry } ACPI_MTMR_ENTRY; + /******************************************************************************* * - * SDEI - Software Delegated Exception Interface Descriptor Table - * - * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A, - * May 8th, 2017. Copyright 2017 ARM Ltd. + * NFIT - NVDIMM Interface Table (ACPI 6.0+) + * Version 1 * ******************************************************************************/ -typedef struct acpi_table_sdei +typedef struct acpi_table_nfit { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 Reserved; /* Reserved, must be zero */ -} ACPI_TABLE_SDEI; +} ACPI_TABLE_NFIT; +/* Subtable header for NFIT */ + +typedef struct acpi_nfit_header +{ + UINT16 Type; + UINT16 Length; + +} ACPI_NFIT_HEADER; -/******************************************************************************* - * - * SLIC - Software Licensing Description Table - * - * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", - * November 29, 2011. Copyright 2011 Microsoft - * - ******************************************************************************/ -/* Basic SLIC table is only the common ACPI header */ +/* Values for subtable type in ACPI_NFIT_HEADER */ -typedef struct acpi_table_slic +enum AcpiNfitType { - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0, + ACPI_NFIT_TYPE_MEMORY_MAP = 1, + ACPI_NFIT_TYPE_INTERLEAVE = 2, + ACPI_NFIT_TYPE_SMBIOS = 3, + ACPI_NFIT_TYPE_CONTROL_REGION = 4, + ACPI_NFIT_TYPE_DATA_REGION = 5, + ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6, + ACPI_NFIT_TYPE_CAPABILITIES = 7, + ACPI_NFIT_TYPE_RESERVED = 8 /* 8 and greater are reserved */ +}; -} ACPI_TABLE_SLIC; +/* + * NFIT Subtables + */ +/* 0: System Physical Address Range Structure */ -/******************************************************************************* - * - * SPCR - Serial Port Console Redirection table - * Version 2 - * - * Conforms to "Serial Port Console Redirection Table", - * Version 1.03, August 10, 2015 - * - ******************************************************************************/ +typedef struct acpi_nfit_system_address +{ + ACPI_NFIT_HEADER Header; + UINT16 RangeIndex; + UINT16 Flags; + UINT32 Reserved; /* Reserved, must be zero */ + UINT32 ProximityDomain; + UINT8 RangeGuid[16]; + UINT64 Address; + UINT64 Length; + UINT64 MemoryMapping; + +} ACPI_NFIT_SYSTEM_ADDRESS; + +/* Flags */ -typedef struct acpi_table_spcr +#define ACPI_NFIT_ADD_ONLINE_ONLY (1) /* 00: Add/Online Operation Only */ +#define ACPI_NFIT_PROXIMITY_VALID (1<<1) /* 01: Proximity Domain Valid */ + +/* Range Type GUIDs appear in the include/acuuid.h file */ + + +/* 1: Memory Device to System Address Range Map Structure */ + +typedef struct acpi_nfit_memory_map { - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT8 InterfaceType; /* 0=full 16550, 1=subset of 16550 */ - UINT8 Reserved[3]; - ACPI_GENERIC_ADDRESS SerialPort; - UINT8 InterruptType; - UINT8 PcInterrupt; - UINT32 Interrupt; - UINT8 BaudRate; - UINT8 Parity; - UINT8 StopBits; - UINT8 FlowControl; - UINT8 TerminalType; - UINT8 Reserved1; - UINT16 PciDeviceId; - UINT16 PciVendorId; - UINT8 PciBus; - UINT8 PciDevice; - UINT8 PciFunction; - UINT32 PciFlags; - UINT8 PciSegment; - UINT32 Reserved2; + ACPI_NFIT_HEADER Header; + UINT32 DeviceHandle; + UINT16 PhysicalId; + UINT16 RegionId; + UINT16 RangeIndex; + UINT16 RegionIndex; + UINT64 RegionSize; + UINT64 RegionOffset; + UINT64 Address; + UINT16 InterleaveIndex; + UINT16 InterleaveWays; + UINT16 Flags; + UINT16 Reserved; /* Reserved, must be zero */ -} ACPI_TABLE_SPCR; +} ACPI_NFIT_MEMORY_MAP; -/* Masks for PciFlags field above */ +/* Flags */ -#define ACPI_SPCR_DO_NOT_DISABLE (1) +#define ACPI_NFIT_MEM_SAVE_FAILED (1) /* 00: Last SAVE to Memory Device failed */ +#define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1) /* 01: Last RESTORE from Memory Device failed */ +#define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2) /* 02: Platform flush failed */ +#define ACPI_NFIT_MEM_NOT_ARMED (1<<3) /* 03: Memory Device is not armed */ +#define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4) /* 04: Memory Device observed SMART/health events */ +#define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5) /* 05: SMART/health events enabled */ +#define ACPI_NFIT_MEM_MAP_FAILED (1<<6) /* 06: Mapping to SPA failed */ -/* Values for Interface Type: See the definition of the DBG2 table */ +/* 2: Interleave Structure */ -/******************************************************************************* - * - * SPMI - Server Platform Management Interface table - * Version 5 - * - * Conforms to "Intelligent Platform Management Interface Specification - * Second Generation v2.0", Document Revision 1.0, February 12, 2004 with - * June 12, 2009 markup. - * - ******************************************************************************/ +typedef struct acpi_nfit_interleave +{ + ACPI_NFIT_HEADER Header; + UINT16 InterleaveIndex; + UINT16 Reserved; /* Reserved, must be zero */ + UINT32 LineCount; + UINT32 LineSize; + UINT32 LineOffset[1]; /* Variable length */ + +} ACPI_NFIT_INTERLEAVE; -typedef struct acpi_table_spmi + +/* 3: SMBIOS Management Information Structure */ + +typedef struct acpi_nfit_smbios { - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT8 InterfaceType; - UINT8 Reserved; /* Must be 1 */ - UINT16 SpecRevision; /* Version of IPMI */ - UINT8 InterruptType; - UINT8 GpeNumber; /* GPE assigned */ - UINT8 Reserved1; - UINT8 PciDeviceFlag; - UINT32 Interrupt; - ACPI_GENERIC_ADDRESS IpmiRegister; - UINT8 PciSegment; - UINT8 PciBus; - UINT8 PciDevice; - UINT8 PciFunction; - UINT8 Reserved2; + ACPI_NFIT_HEADER Header; + UINT32 Reserved; /* Reserved, must be zero */ + UINT8 Data[1]; /* Variable length */ + +} ACPI_NFIT_SMBIOS; -} ACPI_TABLE_SPMI; -/* Values for InterfaceType above */ +/* 4: NVDIMM Control Region Structure */ -enum AcpiSpmiInterfaceTypes +typedef struct acpi_nfit_control_region { - ACPI_SPMI_NOT_USED = 0, - ACPI_SPMI_KEYBOARD = 1, - ACPI_SPMI_SMI = 2, - ACPI_SPMI_BLOCK_TRANSFER = 3, - ACPI_SPMI_SMBUS = 4, - ACPI_SPMI_RESERVED = 5 /* 5 and above are reserved */ -}; + ACPI_NFIT_HEADER Header; + UINT16 RegionIndex; + UINT16 VendorId; + UINT16 DeviceId; + UINT16 RevisionId; + UINT16 SubsystemVendorId; + UINT16 SubsystemDeviceId; + UINT16 SubsystemRevisionId; + UINT8 ValidFields; + UINT8 ManufacturingLocation; + UINT16 ManufacturingDate; + UINT8 Reserved[2]; /* Reserved, must be zero */ + UINT32 SerialNumber; + UINT16 Code; + UINT16 Windows; + UINT64 WindowSize; + UINT64 CommandOffset; + UINT64 CommandSize; + UINT64 StatusOffset; + UINT64 StatusSize; + UINT16 Flags; + UINT8 Reserved1[6]; /* Reserved, must be zero */ + +} ACPI_NFIT_CONTROL_REGION; + +/* Flags */ + +#define ACPI_NFIT_CONTROL_BUFFERED (1) /* Block Data Windows implementation is buffered */ + +/* ValidFields bits */ + +#define ACPI_NFIT_CONTROL_MFG_INFO_VALID (1) /* Manufacturing fields are valid */ + + +/* 5: NVDIMM Block Data Window Region Structure */ + +typedef struct acpi_nfit_data_region +{ + ACPI_NFIT_HEADER Header; + UINT16 RegionIndex; + UINT16 Windows; + UINT64 Offset; + UINT64 Size; + UINT64 Capacity; + UINT64 StartAddress; + +} ACPI_NFIT_DATA_REGION; + + +/* 6: Flush Hint Address Structure */ + +typedef struct acpi_nfit_flush_address +{ + ACPI_NFIT_HEADER Header; + UINT32 DeviceHandle; + UINT16 HintCount; + UINT8 Reserved[6]; /* Reserved, must be zero */ + UINT64 HintAddress[1]; /* Variable length */ + +} ACPI_NFIT_FLUSH_ADDRESS; + + +/* 7: Platform Capabilities Structure */ + +typedef struct acpi_nfit_capabilities +{ + ACPI_NFIT_HEADER Header; + UINT8 HighestCapability; + UINT8 Reserved[3]; /* Reserved, must be zero */ + UINT32 Capabilities; + UINT32 Reserved2; + +} ACPI_NFIT_CAPABILITIES; + +/* Capabilities Flags */ + +#define ACPI_NFIT_CAPABILITY_CACHE_FLUSH (1) /* 00: Cache Flush to NVDIMM capable */ +#define ACPI_NFIT_CAPABILITY_MEM_FLUSH (1<<1) /* 01: Memory Flush to NVDIMM capable */ +#define ACPI_NFIT_CAPABILITY_MEM_MIRRORING (1<<2) /* 02: Memory Mirroring capable */ + + +/* + * NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM + */ +typedef struct nfit_device_handle +{ + UINT32 Handle; + +} NFIT_DEVICE_HANDLE; + +/* Device handle construction and extraction macros */ + +#define ACPI_NFIT_DIMM_NUMBER_MASK 0x0000000F +#define ACPI_NFIT_CHANNEL_NUMBER_MASK 0x000000F0 +#define ACPI_NFIT_MEMORY_ID_MASK 0x00000F00 +#define ACPI_NFIT_SOCKET_ID_MASK 0x0000F000 +#define ACPI_NFIT_NODE_ID_MASK 0x0FFF0000 + +#define ACPI_NFIT_DIMM_NUMBER_OFFSET 0 +#define ACPI_NFIT_CHANNEL_NUMBER_OFFSET 4 +#define ACPI_NFIT_MEMORY_ID_OFFSET 8 +#define ACPI_NFIT_SOCKET_ID_OFFSET 12 +#define ACPI_NFIT_NODE_ID_OFFSET 16 + +/* Macro to construct a NFIT/NVDIMM device handle */ + +#define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \ + ((dimm) | \ + ((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET) | \ + ((memory) << ACPI_NFIT_MEMORY_ID_OFFSET) | \ + ((socket) << ACPI_NFIT_SOCKET_ID_OFFSET) | \ + ((node) << ACPI_NFIT_NODE_ID_OFFSET)) + +/* Macros to extract individual fields from a NFIT/NVDIMM device handle */ + +#define ACPI_NFIT_GET_DIMM_NUMBER(handle) \ + ((handle) & ACPI_NFIT_DIMM_NUMBER_MASK) + +#define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \ + (((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET) + +#define ACPI_NFIT_GET_MEMORY_ID(handle) \ + (((handle) & ACPI_NFIT_MEMORY_ID_MASK) >> ACPI_NFIT_MEMORY_ID_OFFSET) + +#define ACPI_NFIT_GET_SOCKET_ID(handle) \ + (((handle) & ACPI_NFIT_SOCKET_ID_MASK) >> ACPI_NFIT_SOCKET_ID_OFFSET) + +#define ACPI_NFIT_GET_NODE_ID(handle) \ + (((handle) & ACPI_NFIT_NODE_ID_MASK) >> ACPI_NFIT_NODE_ID_OFFSET) /******************************************************************************* * - * TCPA - Trusted Computing Platform Alliance table - * Version 2 - * - * TCG Hardware Interface Table for TPM 1.2 Clients and Servers - * - * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0", - * Version 1.2, Revision 8 - * February 27, 2017 - * - * NOTE: There are two versions of the table with the same signature -- - * the client version and the server version. The common PlatformClass - * field is used to differentiate the two types of tables. + * PCCT - Platform Communications Channel Table (ACPI 5.0) + * Version 2 (ACPI 6.2) * ******************************************************************************/ -typedef struct acpi_table_tcpa_hdr +typedef struct acpi_table_pcct { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT16 PlatformClass; + UINT32 Flags; + UINT64 Reserved; -} ACPI_TABLE_TCPA_HDR; +} ACPI_TABLE_PCCT; + +/* Values for Flags field above */ + +#define ACPI_PCCT_DOORBELL 1 + +/* Values for subtable type in ACPI_SUBTABLE_HEADER */ + +enum AcpiPcctType +{ + ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0, + ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1, + ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */ + ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3, /* ACPI 6.2 */ + ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4, /* ACPI 6.2 */ + ACPI_PCCT_TYPE_RESERVED = 5 /* 5 and greater are reserved */ +}; /* - * Values for PlatformClass above. - * This is how the client and server subtables are differentiated + * PCCT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER */ -#define ACPI_TCPA_CLIENT_TABLE 0 -#define ACPI_TCPA_SERVER_TABLE 1 +/* 0: Generic Communications Subspace */ -typedef struct acpi_table_tcpa_client +typedef struct acpi_pcct_subspace { - UINT32 MinimumLogLength; /* Minimum length for the event log area */ - UINT64 LogAddress; /* Address of the event log area */ + ACPI_SUBTABLE_HEADER Header; + UINT8 Reserved[6]; + UINT64 BaseAddress; + UINT64 Length; + ACPI_GENERIC_ADDRESS DoorbellRegister; + UINT64 PreserveMask; + UINT64 WriteMask; + UINT32 Latency; + UINT32 MaxAccessRate; + UINT16 MinTurnaroundTime; + +} ACPI_PCCT_SUBSPACE; + -} ACPI_TABLE_TCPA_CLIENT; +/* 1: HW-reduced Communications Subspace (ACPI 5.1) */ -typedef struct acpi_table_tcpa_server +typedef struct acpi_pcct_hw_reduced { - UINT16 Reserved; - UINT64 MinimumLogLength; /* Minimum length for the event log area */ - UINT64 LogAddress; /* Address of the event log area */ - UINT16 SpecRevision; - UINT8 DeviceFlags; - UINT8 InterruptFlags; - UINT8 GpeNumber; - UINT8 Reserved2[3]; - UINT32 GlobalInterrupt; - ACPI_GENERIC_ADDRESS Address; - UINT32 Reserved3; - ACPI_GENERIC_ADDRESS ConfigAddress; - UINT8 Group; - UINT8 Bus; /* PCI Bus/Segment/Function numbers */ - UINT8 Device; - UINT8 Function; + ACPI_SUBTABLE_HEADER Header; + UINT32 PlatformInterrupt; + UINT8 Flags; + UINT8 Reserved; + UINT64 BaseAddress; + UINT64 Length; + ACPI_GENERIC_ADDRESS DoorbellRegister; + UINT64 PreserveMask; + UINT64 WriteMask; + UINT32 Latency; + UINT32 MaxAccessRate; + UINT16 MinTurnaroundTime; -} ACPI_TABLE_TCPA_SERVER; +} ACPI_PCCT_HW_REDUCED; -/* Values for DeviceFlags above */ -#define ACPI_TCPA_PCI_DEVICE (1) -#define ACPI_TCPA_BUS_PNP (1<<1) -#define ACPI_TCPA_ADDRESS_VALID (1<<2) +/* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */ -/* Values for InterruptFlags above */ +typedef struct acpi_pcct_hw_reduced_type2 +{ + ACPI_SUBTABLE_HEADER Header; + UINT32 PlatformInterrupt; + UINT8 Flags; + UINT8 Reserved; + UINT64 BaseAddress; + UINT64 Length; + ACPI_GENERIC_ADDRESS DoorbellRegister; + UINT64 PreserveMask; + UINT64 WriteMask; + UINT32 Latency; + UINT32 MaxAccessRate; + UINT16 MinTurnaroundTime; + ACPI_GENERIC_ADDRESS PlatformAckRegister; + UINT64 AckPreserveMask; + UINT64 AckWriteMask; -#define ACPI_TCPA_INTERRUPT_MODE (1) -#define ACPI_TCPA_INTERRUPT_POLARITY (1<<1) -#define ACPI_TCPA_SCI_VIA_GPE (1<<2) -#define ACPI_TCPA_GLOBAL_INTERRUPT (1<<3) +} ACPI_PCCT_HW_REDUCED_TYPE2; -/******************************************************************************* - * - * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table - * Version 4 - * - * TCG Hardware Interface Table for TPM 2.0 Clients and Servers - * - * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0", - * Version 1.2, Revision 8 - * February 27, 2017 - * - ******************************************************************************/ +/* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */ -typedef struct acpi_table_tpm2 +typedef struct acpi_pcct_ext_pcc_master { - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT16 PlatformClass; - UINT16 Reserved; - UINT64 ControlAddress; - UINT32 StartMethod; + ACPI_SUBTABLE_HEADER Header; + UINT32 PlatformInterrupt; + UINT8 Flags; + UINT8 Reserved1; + UINT64 BaseAddress; + UINT32 Length; + ACPI_GENERIC_ADDRESS DoorbellRegister; + UINT64 PreserveMask; + UINT64 WriteMask; + UINT32 Latency; + UINT32 MaxAccessRate; + UINT32 MinTurnaroundTime; + ACPI_GENERIC_ADDRESS PlatformAckRegister; + UINT64 AckPreserveMask; + UINT64 AckSetMask; + UINT64 Reserved2; + ACPI_GENERIC_ADDRESS CmdCompleteRegister; + UINT64 CmdCompleteMask; + ACPI_GENERIC_ADDRESS CmdUpdateRegister; + UINT64 CmdUpdatePreserveMask; + UINT64 CmdUpdateSetMask; + ACPI_GENERIC_ADDRESS ErrorStatusRegister; + UINT64 ErrorStatusMask; - /* Platform-specific data follows */ +} ACPI_PCCT_EXT_PCC_MASTER; -} ACPI_TABLE_TPM2; -/* Values for StartMethod above */ +/* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */ -#define ACPI_TPM2_NOT_ALLOWED 0 -#define ACPI_TPM2_RESERVED1 1 -#define ACPI_TPM2_START_METHOD 2 -#define ACPI_TPM2_RESERVED3 3 -#define ACPI_TPM2_RESERVED4 4 -#define ACPI_TPM2_RESERVED5 5 -#define ACPI_TPM2_MEMORY_MAPPED 6 -#define ACPI_TPM2_COMMAND_BUFFER 7 -#define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD 8 -#define ACPI_TPM2_RESERVED9 9 -#define ACPI_TPM2_RESERVED10 10 -#define ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC 11 /* V1.2 Rev 8 */ -#define ACPI_TPM2_RESERVED 12 +typedef struct acpi_pcct_ext_pcc_slave +{ + ACPI_SUBTABLE_HEADER Header; + UINT32 PlatformInterrupt; + UINT8 Flags; + UINT8 Reserved1; + UINT64 BaseAddress; + UINT32 Length; + ACPI_GENERIC_ADDRESS DoorbellRegister; + UINT64 PreserveMask; + UINT64 WriteMask; + UINT32 Latency; + UINT32 MaxAccessRate; + UINT32 MinTurnaroundTime; + ACPI_GENERIC_ADDRESS PlatformAckRegister; + UINT64 AckPreserveMask; + UINT64 AckSetMask; + UINT64 Reserved2; + ACPI_GENERIC_ADDRESS CmdCompleteRegister; + UINT64 CmdCompleteMask; + ACPI_GENERIC_ADDRESS CmdUpdateRegister; + UINT64 CmdUpdatePreserveMask; + UINT64 CmdUpdateSetMask; + ACPI_GENERIC_ADDRESS ErrorStatusRegister; + UINT64 ErrorStatusMask; +} ACPI_PCCT_EXT_PCC_SLAVE; -/* Optional trailer appears after any StartMethod subtables */ -typedef struct acpi_tpm2_trailer -{ - UINT8 MethodParameters[12]; - UINT32 MinimumLogLength; /* Minimum length for the event log area */ - UINT64 LogAddress; /* Address of the event log area */ +/* Values for doorbell flags above */ -} ACPI_TPM2_TRAILER; +#define ACPI_PCCT_INTERRUPT_POLARITY (1) +#define ACPI_PCCT_INTERRUPT_MODE (1<<1) /* - * Subtables (StartMethod-specific) + * PCC memory structures (not part of the ACPI table) */ -/* 11: Start Method for ARM SMC (V1.2 Rev 8) */ +/* Shared Memory Region */ -typedef struct acpi_tpm2_arm_smc +typedef struct acpi_pcct_shared_memory { - UINT32 GlobalInterrupt; - UINT8 InterruptFlags; - UINT8 OperationFlags; - UINT16 Reserved; - UINT32 FunctionId; + UINT32 Signature; + UINT16 Command; + UINT16 Status; -} ACPI_TPM2_ARM_SMC; +} ACPI_PCCT_SHARED_MEMORY; -/* Values for InterruptFlags above */ -#define ACPI_TPM2_INTERRUPT_SUPPORT (1) +/* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */ -/* Values for OperationFlags above */ +typedef struct acpi_pcct_ext_pcc_shared_memory +{ + UINT32 Signature; + UINT32 Flags; + UINT32 Length; + UINT32 Command; -#define ACPI_TPM2_IDLE_SUPPORT (1) +} ACPI_PCCT_EXT_PCC_SHARED_MEMORY; /******************************************************************************* * - * UEFI - UEFI Boot optimization Table - * Version 1 - * - * Conforms to "Unified Extensible Firmware Interface Specification", - * Version 2.3, May 8, 2009 + * PDTT - Platform Debug Trigger Table (ACPI 6.2) + * Version 0 * ******************************************************************************/ -typedef struct acpi_table_uefi +typedef struct acpi_table_pdtt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT8 Identifier[16]; /* UUID identifier */ - UINT16 DataOffset; /* Offset of remaining data in table */ + UINT8 TriggerCount; + UINT8 Reserved[3]; + UINT32 ArrayOffset; + +} ACPI_TABLE_PDTT; -} ACPI_TABLE_UEFI; + +/* + * PDTT Communication Channel Identifier Structure. + * The number of these structures is defined by TriggerCount above, + * starting at ArrayOffset. + */ +typedef struct acpi_pdtt_channel +{ + UINT8 SubchannelId; + UINT8 Flags; + +} ACPI_PDTT_CHANNEL; + +/* Flags for above */ + +#define ACPI_PDTT_RUNTIME_TRIGGER (1) +#define ACPI_PDTT_WAIT_COMPLETION (1<<1) /******************************************************************************* * - * VRTC - Virtual Real Time Clock Table + * PMTT - Platform Memory Topology Table (ACPI 5.0) * Version 1 * - * Conforms to "Simple Firmware Interface Specification", - * Draft 0.8.2, Oct 19, 2010 - * NOTE: The ACPI VRTC is equivalent to The SFI MRTC table. - * ******************************************************************************/ -typedef struct acpi_table_vrtc +typedef struct acpi_table_pmtt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 Reserved; + +} ACPI_TABLE_PMTT; -} ACPI_TABLE_VRTC; -/* VRTC entry */ +/* Common header for PMTT subtables that follow main table */ -typedef struct acpi_vrtc_entry +typedef struct acpi_pmtt_header { - ACPI_GENERIC_ADDRESS PhysicalAddress; - UINT32 Irq; + UINT8 Type; + UINT8 Reserved1; + UINT16 Length; + UINT16 Flags; + UINT16 Reserved2; + +} ACPI_PMTT_HEADER; + +/* Values for Type field above */ + +#define ACPI_PMTT_TYPE_SOCKET 0 +#define ACPI_PMTT_TYPE_CONTROLLER 1 +#define ACPI_PMTT_TYPE_DIMM 2 +#define ACPI_PMTT_TYPE_RESERVED 3 /* 0x03-0xFF are reserved */ + +/* Values for Flags field above */ + +#define ACPI_PMTT_TOP_LEVEL 0x0001 +#define ACPI_PMTT_PHYSICAL 0x0002 +#define ACPI_PMTT_MEMORY_TYPE 0x000C + + +/* + * PMTT subtables, correspond to Type in acpi_pmtt_header + */ + -} ACPI_VRTC_ENTRY; +/* 0: Socket Structure */ + +typedef struct acpi_pmtt_socket +{ + ACPI_PMTT_HEADER Header; + UINT16 SocketId; + UINT16 Reserved; + +} ACPI_PMTT_SOCKET; + + +/* 1: Memory Controller subtable */ + +typedef struct acpi_pmtt_controller +{ + ACPI_PMTT_HEADER Header; + UINT32 ReadLatency; + UINT32 WriteLatency; + UINT32 ReadBandwidth; + UINT32 WriteBandwidth; + UINT16 AccessWidth; + UINT16 Alignment; + UINT16 Reserved; + UINT16 DomainCount; + +} ACPI_PMTT_CONTROLLER; + +/* 1a: Proximity Domain substructure */ + +typedef struct acpi_pmtt_domain +{ + UINT32 ProximityDomain; + +} ACPI_PMTT_DOMAIN; + + +/* 2: Physical Component Identifier (DIMM) */ + +typedef struct acpi_pmtt_physical_component +{ + ACPI_PMTT_HEADER Header; + UINT16 ComponentId; + UINT16 Reserved; + UINT32 MemorySize; + UINT32 BiosHandle; + +} ACPI_PMTT_PHYSICAL_COMPONENT; /******************************************************************************* * - * WAET - Windows ACPI Emulated devices Table + * PPTT - Processor Properties Topology Table (ACPI 6.2) * Version 1 * - * Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009 - * ******************************************************************************/ -typedef struct acpi_table_waet +typedef struct acpi_table_pptt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + +} ACPI_TABLE_PPTT; + +/* Values for Type field above */ + +enum AcpiPpttType +{ + ACPI_PPTT_TYPE_PROCESSOR = 0, + ACPI_PPTT_TYPE_CACHE = 1, + ACPI_PPTT_TYPE_ID = 2, + ACPI_PPTT_TYPE_RESERVED = 3 +}; + + +/* 0: Processor Hierarchy Node Structure */ + +typedef struct acpi_pptt_processor +{ + ACPI_SUBTABLE_HEADER Header; + UINT16 Reserved; UINT32 Flags; + UINT32 Parent; + UINT32 AcpiProcessorId; + UINT32 NumberOfPrivResources; -} ACPI_TABLE_WAET; +} ACPI_PPTT_PROCESSOR; -/* Masks for Flags field above */ +/* Flags */ + +#define ACPI_PPTT_PHYSICAL_PACKAGE (1) /* Physical package */ +#define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID (2) /* ACPI Processor ID valid */ + + +/* 1: Cache Type Structure */ + +typedef struct acpi_pptt_cache +{ + ACPI_SUBTABLE_HEADER Header; + UINT16 Reserved; + UINT32 Flags; + UINT32 NextLevelOfCache; + UINT32 Size; + UINT32 NumberOfSets; + UINT8 Associativity; + UINT8 Attributes; + UINT16 LineSize; + +} ACPI_PPTT_CACHE; + +/* Flags */ + +#define ACPI_PPTT_SIZE_PROPERTY_VALID (1) /* Physical property valid */ +#define ACPI_PPTT_NUMBER_OF_SETS_VALID (1<<1) /* Number of sets valid */ +#define ACPI_PPTT_ASSOCIATIVITY_VALID (1<<2) /* Associativity valid */ +#define ACPI_PPTT_ALLOCATION_TYPE_VALID (1<<3) /* Allocation type valid */ +#define ACPI_PPTT_CACHE_TYPE_VALID (1<<4) /* Cache type valid */ +#define ACPI_PPTT_WRITE_POLICY_VALID (1<<5) /* Write policy valid */ +#define ACPI_PPTT_LINE_SIZE_VALID (1<<6) /* Line size valid */ + +/* Masks for Attributes */ + +#define ACPI_PPTT_MASK_ALLOCATION_TYPE (0x03) /* Allocation type */ +#define ACPI_PPTT_MASK_CACHE_TYPE (0x0C) /* Cache type */ +#define ACPI_PPTT_MASK_WRITE_POLICY (0x10) /* Write policy */ + +/* Attributes describing cache */ +#define ACPI_PPTT_CACHE_READ_ALLOCATE (0x0) /* Cache line is allocated on read */ +#define ACPI_PPTT_CACHE_WRITE_ALLOCATE (0x01) /* Cache line is allocated on write */ +#define ACPI_PPTT_CACHE_RW_ALLOCATE (0x02) /* Cache line is allocated on read and write */ +#define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT (0x03) /* Alternate representation of above */ + +#define ACPI_PPTT_CACHE_TYPE_DATA (0x0) /* Data cache */ +#define ACPI_PPTT_CACHE_TYPE_INSTR (1<<2) /* Instruction cache */ +#define ACPI_PPTT_CACHE_TYPE_UNIFIED (2<<2) /* Unified I & D cache */ +#define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT (3<<2) /* Alternate representation of above */ + +#define ACPI_PPTT_CACHE_POLICY_WB (0x0) /* Cache is write back */ +#define ACPI_PPTT_CACHE_POLICY_WT (1<<4) /* Cache is write through */ + +/* 2: ID Structure */ + +typedef struct acpi_pptt_id +{ + ACPI_SUBTABLE_HEADER Header; + UINT16 Reserved; + UINT32 VendorId; + UINT64 Level1Id; + UINT64 Level2Id; + UINT16 MajorRev; + UINT16 MinorRev; + UINT16 SpinRev; -#define ACPI_WAET_RTC_NO_ACK (1) /* RTC requires no int acknowledge */ -#define ACPI_WAET_TIMER_ONE_READ (1<<1) /* PM timer requires only one read */ +} ACPI_PPTT_ID; /******************************************************************************* * - * WDAT - Watchdog Action Table + * RASF - RAS Feature Table (ACPI 5.0) * Version 1 * - * Conforms to "Hardware Watchdog Timers Design Specification", - * Copyright 2006 Microsoft Corporation. - * ******************************************************************************/ -typedef struct acpi_table_wdat +typedef struct acpi_table_rasf { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 HeaderLength; /* Watchdog Header Length */ - UINT16 PciSegment; /* PCI Segment number */ - UINT8 PciBus; /* PCI Bus number */ - UINT8 PciDevice; /* PCI Device number */ - UINT8 PciFunction; /* PCI Function number */ - UINT8 Reserved[3]; - UINT32 TimerPeriod; /* Period of one timer count (msec) */ - UINT32 MaxCount; /* Maximum counter value supported */ - UINT32 MinCount; /* Minimum counter value */ - UINT8 Flags; - UINT8 Reserved2[3]; - UINT32 Entries; /* Number of watchdog entries that follow */ + UINT8 ChannelId[12]; -} ACPI_TABLE_WDAT; +} ACPI_TABLE_RASF; -/* Masks for Flags field above */ +/* RASF Platform Communication Channel Shared Memory Region */ -#define ACPI_WDAT_ENABLED (1) -#define ACPI_WDAT_STOPPED 0x80 +typedef struct acpi_rasf_shared_memory +{ + UINT32 Signature; + UINT16 Command; + UINT16 Status; + UINT16 Version; + UINT8 Capabilities[16]; + UINT8 SetCapabilities[16]; + UINT16 NumParameterBlocks; + UINT32 SetCapabilitiesStatus; +} ACPI_RASF_SHARED_MEMORY; -/* WDAT Instruction Entries (actions) */ +/* RASF Parameter Block Structure Header */ -typedef struct acpi_wdat_entry +typedef struct acpi_rasf_parameter_block { - UINT8 Action; - UINT8 Instruction; - UINT16 Reserved; - ACPI_GENERIC_ADDRESS RegisterRegion; - UINT32 Value; /* Value used with Read/Write register */ - UINT32 Mask; /* Bitmask required for this register instruction */ - -} ACPI_WDAT_ENTRY; - -/* Values for Action field above */ - -enum AcpiWdatActions -{ - ACPI_WDAT_RESET = 1, - ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4, - ACPI_WDAT_GET_COUNTDOWN = 5, - ACPI_WDAT_SET_COUNTDOWN = 6, - ACPI_WDAT_GET_RUNNING_STATE = 8, - ACPI_WDAT_SET_RUNNING_STATE = 9, - ACPI_WDAT_GET_STOPPED_STATE = 10, - ACPI_WDAT_SET_STOPPED_STATE = 11, - ACPI_WDAT_GET_REBOOT = 16, - ACPI_WDAT_SET_REBOOT = 17, - ACPI_WDAT_GET_SHUTDOWN = 18, - ACPI_WDAT_SET_SHUTDOWN = 19, - ACPI_WDAT_GET_STATUS = 32, - ACPI_WDAT_SET_STATUS = 33, - ACPI_WDAT_ACTION_RESERVED = 34 /* 34 and greater are reserved */ + UINT16 Type; + UINT16 Version; + UINT16 Length; + +} ACPI_RASF_PARAMETER_BLOCK; + +/* RASF Parameter Block Structure for PATROL_SCRUB */ + +typedef struct acpi_rasf_patrol_scrub_parameter +{ + ACPI_RASF_PARAMETER_BLOCK Header; + UINT16 PatrolScrubCommand; + UINT64 RequestedAddressRange[2]; + UINT64 ActualAddressRange[2]; + UINT16 Flags; + UINT8 RequestedSpeed; + +} ACPI_RASF_PATROL_SCRUB_PARAMETER; + +/* Masks for Flags and Speed fields above */ + +#define ACPI_RASF_SCRUBBER_RUNNING 1 +#define ACPI_RASF_SPEED (7<<1) +#define ACPI_RASF_SPEED_SLOW (0<<1) +#define ACPI_RASF_SPEED_MEDIUM (4<<1) +#define ACPI_RASF_SPEED_FAST (7<<1) + +/* Channel Commands */ + +enum AcpiRasfCommands +{ + ACPI_RASF_EXECUTE_RASF_COMMAND = 1 +}; + +/* Platform RAS Capabilities */ + +enum AcpiRasfCapabiliities +{ + ACPI_HW_PATROL_SCRUB_SUPPORTED = 0, + ACPI_SW_PATROL_SCRUB_EXPOSED = 1 }; -/* Values for Instruction field above */ +/* Patrol Scrub Commands */ -enum AcpiWdatInstructions +enum AcpiRasfPatrolScrubCommands { - ACPI_WDAT_READ_VALUE = 0, - ACPI_WDAT_READ_COUNTDOWN = 1, - ACPI_WDAT_WRITE_VALUE = 2, - ACPI_WDAT_WRITE_COUNTDOWN = 3, - ACPI_WDAT_INSTRUCTION_RESERVED = 4, /* 4 and greater are reserved */ - ACPI_WDAT_PRESERVE_REGISTER = 0x80 /* Except for this value */ + ACPI_RASF_GET_PATROL_PARAMETERS = 1, + ACPI_RASF_START_PATROL_SCRUBBER = 2, + ACPI_RASF_STOP_PATROL_SCRUBBER = 3 }; +/* Channel Command flags */ + +#define ACPI_RASF_GENERATE_SCI (1<<15) + +/* Status values */ + +enum AcpiRasfStatus +{ + ACPI_RASF_SUCCESS = 0, + ACPI_RASF_NOT_VALID = 1, + ACPI_RASF_NOT_SUPPORTED = 2, + ACPI_RASF_BUSY = 3, + ACPI_RASF_FAILED = 4, + ACPI_RASF_ABORTED = 5, + ACPI_RASF_INVALID_DATA = 6 +}; + +/* Status flags */ + +#define ACPI_RASF_COMMAND_COMPLETE (1) +#define ACPI_RASF_SCI_DOORBELL (1<<1) +#define ACPI_RASF_ERROR (1<<2) +#define ACPI_RASF_STATUS (0x1F<<3) + /******************************************************************************* * - * WDDT - Watchdog Descriptor Table + * SBST - Smart Battery Specification Table * Version 1 * - * Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)", - * Version 001, September 2002 - * ******************************************************************************/ -typedef struct acpi_table_wddt +typedef struct acpi_table_sbst { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT16 SpecVersion; - UINT16 TableVersion; - UINT16 PciVendorId; - ACPI_GENERIC_ADDRESS Address; - UINT16 MaxCount; /* Maximum counter value supported */ - UINT16 MinCount; /* Minimum counter value supported */ - UINT16 Period; - UINT16 Status; - UINT16 Capability; - -} ACPI_TABLE_WDDT; - -/* Flags for Status field above */ - -#define ACPI_WDDT_AVAILABLE (1) -#define ACPI_WDDT_ACTIVE (1<<1) -#define ACPI_WDDT_TCO_OS_OWNED (1<<2) -#define ACPI_WDDT_USER_RESET (1<<11) -#define ACPI_WDDT_WDT_RESET (1<<12) -#define ACPI_WDDT_POWER_FAIL (1<<13) -#define ACPI_WDDT_UNKNOWN_RESET (1<<14) + UINT32 WarningLevel; + UINT32 LowLevel; + UINT32 CriticalLevel; -/* Flags for Capability field above */ - -#define ACPI_WDDT_AUTO_RESET (1) -#define ACPI_WDDT_ALERT_SUPPORT (1<<1) +} ACPI_TABLE_SBST; /******************************************************************************* * - * WDRT - Watchdog Resource Table - * Version 1 + * SDEI - Software Delegated Exception Interface Descriptor Table * - * Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003", - * Version 1.01, August 28, 2006 + * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A, + * May 8th, 2017. Copyright 2017 ARM Ltd. * ******************************************************************************/ -typedef struct acpi_table_wdrt +typedef struct acpi_table_sdei { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - ACPI_GENERIC_ADDRESS ControlRegister; - ACPI_GENERIC_ADDRESS CountRegister; - UINT16 PciDeviceId; - UINT16 PciVendorId; - UINT8 PciBus; /* PCI Bus number */ - UINT8 PciDevice; /* PCI Device number */ - UINT8 PciFunction; /* PCI Function number */ - UINT8 PciSegment; /* PCI Segment number */ - UINT16 MaxCount; /* Maximum counter value supported */ - UINT8 Units; -} ACPI_TABLE_WDRT; +} ACPI_TABLE_SDEI; /******************************************************************************* * - * WSMT - Windows SMM Security Migrations Table + * SDEV - Secure Devices Table (ACPI 6.2) * Version 1 * - * Conforms to "Windows SMM Security Migrations Table", - * Version 1.0, April 18, 2016 - * ******************************************************************************/ -typedef struct acpi_table_wsmt +typedef struct acpi_table_sdev { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 ProtectionFlags; -} ACPI_TABLE_WSMT; +} ACPI_TABLE_SDEV; + + +typedef struct acpi_sdev_header +{ + UINT8 Type; + UINT8 Flags; + UINT16 Length; + +} ACPI_SDEV_HEADER; + + +/* Values for subtable type above */ + +enum AcpiSdevType +{ + ACPI_SDEV_TYPE_NAMESPACE_DEVICE = 0, + ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1, + ACPI_SDEV_TYPE_RESERVED = 2 /* 2 and greater are reserved */ +}; + +/* Values for flags above */ + +#define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS (1) + +/* + * SDEV subtables + */ + +/* 0: Namespace Device Based Secure Device Structure */ + +typedef struct acpi_sdev_namespace +{ + ACPI_SDEV_HEADER Header; + UINT16 DeviceIdOffset; + UINT16 DeviceIdLength; + UINT16 VendorDataOffset; + UINT16 VendorDataLength; + +} ACPI_SDEV_NAMESPACE; -/* Flags for ProtectionFlags field above */ +/* 1: PCIe Endpoint Device Based Device Structure */ + +typedef struct acpi_sdev_pcie +{ + ACPI_SDEV_HEADER Header; + UINT16 Segment; + UINT16 StartBus; + UINT16 PathOffset; + UINT16 PathLength; + UINT16 VendorDataOffset; + UINT16 VendorDataLength; + +} ACPI_SDEV_PCIE; + +/* 1a: PCIe Endpoint path entry */ + +typedef struct acpi_sdev_pcie_path +{ + UINT8 Device; + UINT8 Function; -#define ACPI_WSMT_FIXED_COMM_BUFFERS (1) -#define ACPI_WSMT_COMM_BUFFER_NESTED_PTR_PROTECTION (2) -#define ACPI_WSMT_SYSTEM_RESOURCE_PROTECTION (4) +} ACPI_SDEV_PCIE_PATH; /* Reset to default packing */ diff --git a/source/include/actbl3.h b/source/include/actbl3.h index 91a0026c70ee9..d4c15838b1f36 100644 --- a/source/include/actbl3.h +++ b/source/include/actbl3.h @@ -155,14 +155,11 @@ /******************************************************************************* * - * Additional ACPI Tables (3) + * Additional ACPI Tables * * These tables are not consumed directly by the ACPICA subsystem, but are * included here to support device drivers and the AML disassembler. * - * In general, the tables in this file are fully defined within the ACPI - * specification. - * ******************************************************************************/ @@ -171,25 +168,24 @@ * file. Useful because they make it more difficult to inadvertently type in * the wrong signature. */ -#define ACPI_SIG_BGRT "BGRT" /* Boot Graphics Resource Table */ -#define ACPI_SIG_DRTM "DRTM" /* Dynamic Root of Trust for Measurement table */ -#define ACPI_SIG_FPDT "FPDT" /* Firmware Performance Data Table */ -#define ACPI_SIG_GTDT "GTDT" /* Generic Timer Description Table */ -#define ACPI_SIG_MPST "MPST" /* Memory Power State Table */ -#define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */ -#define ACPI_SIG_PMTT "PMTT" /* Platform Memory Topology Table */ -#define ACPI_SIG_RASF "RASF" /* RAS Feature table */ +#define ACPI_SIG_SLIC "SLIC" /* Software Licensing Description Table */ +#define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */ +#define ACPI_SIG_SPCR "SPCR" /* Serial Port Console Redirection table */ +#define ACPI_SIG_SPMI "SPMI" /* Server Platform Management Interface table */ +#define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */ #define ACPI_SIG_STAO "STAO" /* Status Override table */ +#define ACPI_SIG_TCPA "TCPA" /* Trusted Computing Platform Alliance table */ +#define ACPI_SIG_TPM2 "TPM2" /* Trusted Platform Module 2.0 H/W interface table */ +#define ACPI_SIG_UEFI "UEFI" /* Uefi Boot Optimization Table */ +#define ACPI_SIG_VRTC "VRTC" /* Virtual Real Time Clock Table */ +#define ACPI_SIG_WAET "WAET" /* Windows ACPI Emulated devices Table */ +#define ACPI_SIG_WDAT "WDAT" /* Watchdog Action Table */ +#define ACPI_SIG_WDDT "WDDT" /* Watchdog Timer Description Table */ +#define ACPI_SIG_WDRT "WDRT" /* Watchdog Resource Table */ #define ACPI_SIG_WPBT "WPBT" /* Windows Platform Binary Table */ +#define ACPI_SIG_WSMT "WSMT" /* Windows SMM Security Migrations Table */ #define ACPI_SIG_XENV "XENV" /* Xen Environment table */ - -#define ACPI_SIG_S3PT "S3PT" /* S3 Performance (sub)Table */ -#define ACPI_SIG_PCCS "PCC" /* PCC Shared Memory Region */ - -/* Reserved table signatures */ - -#define ACPI_SIG_MATR "MATR" /* Memory Address Translation Table */ -#define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ +#define ACPI_SIG_XXXX "XXXX" /* Intermediate AML header for ASL/ASL+ converter */ /* * All tables must be byte-packed to match the ACPI specification, since @@ -212,858 +208,630 @@ /******************************************************************************* * - * BGRT - Boot Graphics Resource Table (ACPI 5.0) - * Version 1 + * SLIC - Software Licensing Description Table + * + * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", + * November 29, 2011. Copyright 2011 Microsoft * ******************************************************************************/ -typedef struct acpi_table_bgrt +/* Basic SLIC table is only the common ACPI header */ + +typedef struct acpi_table_slic { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT16 Version; - UINT8 Status; - UINT8 ImageType; - UINT64 ImageAddress; - UINT32 ImageOffsetX; - UINT32 ImageOffsetY; - -} ACPI_TABLE_BGRT; - -/* Flags for Status field above */ -#define ACPI_BGRT_DISPLAYED (1) -#define ACPI_BGRT_ORIENTATION_OFFSET (3 << 1) +} ACPI_TABLE_SLIC; /******************************************************************************* * - * DRTM - Dynamic Root of Trust for Measurement table - * Conforms to "TCG D-RTM Architecture" June 17 2013, Version 1.0.0 - * Table version 1 + * SLIT - System Locality Distance Information Table + * Version 1 * ******************************************************************************/ -typedef struct acpi_table_drtm +typedef struct acpi_table_slit { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT64 EntryBaseAddress; - UINT64 EntryLength; - UINT32 EntryAddress32; - UINT64 EntryAddress64; - UINT64 ExitAddress; - UINT64 LogAreaAddress; - UINT32 LogAreaLength; - UINT64 ArchDependentAddress; - UINT32 Flags; - -} ACPI_TABLE_DRTM; - -/* Flag Definitions for above */ - -#define ACPI_DRTM_ACCESS_ALLOWED (1) -#define ACPI_DRTM_ENABLE_GAP_CODE (1<<1) -#define ACPI_DRTM_INCOMPLETE_MEASUREMENTS (1<<2) -#define ACPI_DRTM_AUTHORITY_ORDER (1<<3) - - -/* 1) Validated Tables List (64-bit addresses) */ - -typedef struct acpi_drtm_vtable_list -{ - UINT32 ValidatedTableCount; - UINT64 ValidatedTables[1]; + UINT64 LocalityCount; + UINT8 Entry[1]; /* Real size = localities^2 */ -} ACPI_DRTM_VTABLE_LIST; - -/* 2) Resources List (of Resource Descriptors) */ - -/* Resource Descriptor */ - -typedef struct acpi_drtm_resource -{ - UINT8 Size[7]; - UINT8 Type; - UINT64 Address; - -} ACPI_DRTM_RESOURCE; - -typedef struct acpi_drtm_resource_list -{ - UINT32 ResourceCount; - ACPI_DRTM_RESOURCE Resources[1]; - -} ACPI_DRTM_RESOURCE_LIST; - -/* 3) Platform-specific Identifiers List */ - -typedef struct acpi_drtm_dps_id -{ - UINT32 DpsIdLength; - UINT8 DpsId[16]; - -} ACPI_DRTM_DPS_ID; +} ACPI_TABLE_SLIT; /******************************************************************************* * - * FPDT - Firmware Performance Data Table (ACPI 5.0) - * Version 1 + * SPCR - Serial Port Console Redirection table + * Version 2 + * + * Conforms to "Serial Port Console Redirection Table", + * Version 1.03, August 10, 2015 * ******************************************************************************/ -typedef struct acpi_table_fpdt +typedef struct acpi_table_spcr { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT8 InterfaceType; /* 0=full 16550, 1=subset of 16550 */ + UINT8 Reserved[3]; + ACPI_GENERIC_ADDRESS SerialPort; + UINT8 InterruptType; + UINT8 PcInterrupt; + UINT32 Interrupt; + UINT8 BaudRate; + UINT8 Parity; + UINT8 StopBits; + UINT8 FlowControl; + UINT8 TerminalType; + UINT8 Reserved1; + UINT16 PciDeviceId; + UINT16 PciVendorId; + UINT8 PciBus; + UINT8 PciDevice; + UINT8 PciFunction; + UINT32 PciFlags; + UINT8 PciSegment; + UINT32 Reserved2; -} ACPI_TABLE_FPDT; +} ACPI_TABLE_SPCR; +/* Masks for PciFlags field above */ -/* FPDT subtable header (Performance Record Structure) */ +#define ACPI_SPCR_DO_NOT_DISABLE (1) -typedef struct acpi_fpdt_header -{ - UINT16 Type; - UINT8 Length; - UINT8 Revision; +/* Values for Interface Type: See the definition of the DBG2 table */ -} ACPI_FPDT_HEADER; -/* Values for Type field above */ +/******************************************************************************* + * + * SPMI - Server Platform Management Interface table + * Version 5 + * + * Conforms to "Intelligent Platform Management Interface Specification + * Second Generation v2.0", Document Revision 1.0, February 12, 2004 with + * June 12, 2009 markup. + * + ******************************************************************************/ -enum AcpiFpdtType +typedef struct acpi_table_spmi { - ACPI_FPDT_TYPE_BOOT = 0, - ACPI_FPDT_TYPE_S3PERF = 1 + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT8 InterfaceType; + UINT8 Reserved; /* Must be 1 */ + UINT16 SpecRevision; /* Version of IPMI */ + UINT8 InterruptType; + UINT8 GpeNumber; /* GPE assigned */ + UINT8 Reserved1; + UINT8 PciDeviceFlag; + UINT32 Interrupt; + ACPI_GENERIC_ADDRESS IpmiRegister; + UINT8 PciSegment; + UINT8 PciBus; + UINT8 PciDevice; + UINT8 PciFunction; + UINT8 Reserved2; + +} ACPI_TABLE_SPMI; + +/* Values for InterfaceType above */ + +enum AcpiSpmiInterfaceTypes +{ + ACPI_SPMI_NOT_USED = 0, + ACPI_SPMI_KEYBOARD = 1, + ACPI_SPMI_SMI = 2, + ACPI_SPMI_BLOCK_TRANSFER = 3, + ACPI_SPMI_SMBUS = 4, + ACPI_SPMI_RESERVED = 5 /* 5 and above are reserved */ }; -/* - * FPDT subtables - */ - -/* 0: Firmware Basic Boot Performance Record */ - -typedef struct acpi_fpdt_boot_pointer -{ - ACPI_FPDT_HEADER Header; - UINT8 Reserved[4]; - UINT64 Address; - -} ACPI_FPDT_BOOT_POINTER; - - -/* 1: S3 Performance Table Pointer Record */ +/******************************************************************************* + * + * SRAT - System Resource Affinity Table + * Version 3 + * + ******************************************************************************/ -typedef struct acpi_fpdt_s3pt_pointer +typedef struct acpi_table_srat { - ACPI_FPDT_HEADER Header; - UINT8 Reserved[4]; - UINT64 Address; + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 TableRevision; /* Must be value '1' */ + UINT64 Reserved; /* Reserved, must be zero */ -} ACPI_FPDT_S3PT_POINTER; +} ACPI_TABLE_SRAT; +/* Values for subtable type in ACPI_SUBTABLE_HEADER */ -/* - * S3PT - S3 Performance Table. This table is pointed to by the - * S3 Pointer Record above. - */ -typedef struct acpi_table_s3pt +enum AcpiSratType { - UINT8 Signature[4]; /* "S3PT" */ - UINT32 Length; - -} ACPI_TABLE_S3PT; - + ACPI_SRAT_TYPE_CPU_AFFINITY = 0, + ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1, + ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2, + ACPI_SRAT_TYPE_GICC_AFFINITY = 3, + ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4, /* ACPI 6.2 */ + ACPI_SRAT_TYPE_RESERVED = 5 /* 5 and greater are reserved */ +}; /* - * S3PT Subtables (Not part of the actual FPDT) + * SRAT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER */ -/* Values for Type field in S3PT header */ +/* 0: Processor Local APIC/SAPIC Affinity */ -enum AcpiS3ptType +typedef struct acpi_srat_cpu_affinity { - ACPI_S3PT_TYPE_RESUME = 0, - ACPI_S3PT_TYPE_SUSPEND = 1, - ACPI_FPDT_BOOT_PERFORMANCE = 2 -}; + ACPI_SUBTABLE_HEADER Header; + UINT8 ProximityDomainLo; + UINT8 ApicId; + UINT32 Flags; + UINT8 LocalSapicEid; + UINT8 ProximityDomainHi[3]; + UINT32 ClockDomain; -typedef struct acpi_s3pt_resume -{ - ACPI_FPDT_HEADER Header; - UINT32 ResumeCount; - UINT64 FullResume; - UINT64 AverageResume; +} ACPI_SRAT_CPU_AFFINITY; -} ACPI_S3PT_RESUME; +/* Flags */ -typedef struct acpi_s3pt_suspend -{ - ACPI_FPDT_HEADER Header; - UINT64 SuspendStart; - UINT64 SuspendEnd; +#define ACPI_SRAT_CPU_USE_AFFINITY (1) /* 00: Use affinity structure */ -} ACPI_S3PT_SUSPEND; +/* 1: Memory Affinity */ -/* - * FPDT Boot Performance Record (Not part of the actual FPDT) - */ -typedef struct acpi_fpdt_boot +typedef struct acpi_srat_mem_affinity { - ACPI_FPDT_HEADER Header; - UINT8 Reserved[4]; - UINT64 ResetEnd; - UINT64 LoadStart; - UINT64 StartupStart; - UINT64 ExitServicesEntry; - UINT64 ExitServicesExit; - -} ACPI_FPDT_BOOT; - - -/******************************************************************************* - * - * GTDT - Generic Timer Description Table (ACPI 5.1) - * Version 2 - * - ******************************************************************************/ - -typedef struct acpi_table_gtdt -{ - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT64 CounterBlockAddresss; - UINT32 Reserved; - UINT32 SecureEl1Interrupt; - UINT32 SecureEl1Flags; - UINT32 NonSecureEl1Interrupt; - UINT32 NonSecureEl1Flags; - UINT32 VirtualTimerInterrupt; - UINT32 VirtualTimerFlags; - UINT32 NonSecureEl2Interrupt; - UINT32 NonSecureEl2Flags; - UINT64 CounterReadBlockAddress; - UINT32 PlatformTimerCount; - UINT32 PlatformTimerOffset; - -} ACPI_TABLE_GTDT; - -/* Flag Definitions: Timer Block Physical Timers and Virtual timers */ - -#define ACPI_GTDT_INTERRUPT_MODE (1) -#define ACPI_GTDT_INTERRUPT_POLARITY (1<<1) -#define ACPI_GTDT_ALWAYS_ON (1<<2) + ACPI_SUBTABLE_HEADER Header; + UINT32 ProximityDomain; + UINT16 Reserved; /* Reserved, must be zero */ + UINT64 BaseAddress; + UINT64 Length; + UINT32 Reserved1; + UINT32 Flags; + UINT64 Reserved2; /* Reserved, must be zero */ +} ACPI_SRAT_MEM_AFFINITY; -/* Common GTDT subtable header */ +/* Flags */ -typedef struct acpi_gtdt_header -{ - UINT8 Type; - UINT16 Length; +#define ACPI_SRAT_MEM_ENABLED (1) /* 00: Use affinity structure */ +#define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1) /* 01: Memory region is hot pluggable */ +#define ACPI_SRAT_MEM_NON_VOLATILE (1<<2) /* 02: Memory region is non-volatile */ -} ACPI_GTDT_HEADER; -/* Values for GTDT subtable type above */ +/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */ -enum AcpiGtdtType +typedef struct acpi_srat_x2apic_cpu_affinity { - ACPI_GTDT_TYPE_TIMER_BLOCK = 0, - ACPI_GTDT_TYPE_WATCHDOG = 1, - ACPI_GTDT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ -}; - + ACPI_SUBTABLE_HEADER Header; + UINT16 Reserved; /* Reserved, must be zero */ + UINT32 ProximityDomain; + UINT32 ApicId; + UINT32 Flags; + UINT32 ClockDomain; + UINT32 Reserved2; -/* GTDT Subtables, correspond to Type in acpi_gtdt_header */ +} ACPI_SRAT_X2APIC_CPU_AFFINITY; -/* 0: Generic Timer Block */ +/* Flags for ACPI_SRAT_CPU_AFFINITY and ACPI_SRAT_X2APIC_CPU_AFFINITY */ -typedef struct acpi_gtdt_timer_block -{ - ACPI_GTDT_HEADER Header; - UINT8 Reserved; - UINT64 BlockAddress; - UINT32 TimerCount; - UINT32 TimerOffset; +#define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */ -} ACPI_GTDT_TIMER_BLOCK; -/* Timer Sub-Structure, one per timer */ +/* 3: GICC Affinity (ACPI 5.1) */ -typedef struct acpi_gtdt_timer_entry +typedef struct acpi_srat_gicc_affinity { - UINT8 FrameNumber; - UINT8 Reserved[3]; - UINT64 BaseAddress; - UINT64 El0BaseAddress; - UINT32 TimerInterrupt; - UINT32 TimerFlags; - UINT32 VirtualTimerInterrupt; - UINT32 VirtualTimerFlags; - UINT32 CommonFlags; - -} ACPI_GTDT_TIMER_ENTRY; - -/* Flag Definitions: TimerFlags and VirtualTimerFlags above */ + ACPI_SUBTABLE_HEADER Header; + UINT32 ProximityDomain; + UINT32 AcpiProcessorUid; + UINT32 Flags; + UINT32 ClockDomain; -#define ACPI_GTDT_GT_IRQ_MODE (1) -#define ACPI_GTDT_GT_IRQ_POLARITY (1<<1) +} ACPI_SRAT_GICC_AFFINITY; -/* Flag Definitions: CommonFlags above */ +/* Flags for ACPI_SRAT_GICC_AFFINITY */ -#define ACPI_GTDT_GT_IS_SECURE_TIMER (1) -#define ACPI_GTDT_GT_ALWAYS_ON (1<<1) +#define ACPI_SRAT_GICC_ENABLED (1) /* 00: Use affinity structure */ -/* 1: SBSA Generic Watchdog Structure */ +/* 4: GCC ITS Affinity (ACPI 6.2) */ -typedef struct acpi_gtdt_watchdog +typedef struct acpi_srat_gic_its_affinity { - ACPI_GTDT_HEADER Header; - UINT8 Reserved; - UINT64 RefreshFrameAddress; - UINT64 ControlFrameAddress; - UINT32 TimerInterrupt; - UINT32 TimerFlags; - -} ACPI_GTDT_WATCHDOG; - -/* Flag Definitions: TimerFlags above */ + ACPI_SUBTABLE_HEADER Header; + UINT32 ProximityDomain; + UINT16 Reserved; + UINT32 ItsId; -#define ACPI_GTDT_WATCHDOG_IRQ_MODE (1) -#define ACPI_GTDT_WATCHDOG_IRQ_POLARITY (1<<1) -#define ACPI_GTDT_WATCHDOG_SECURE (1<<2) +} ACPI_SRAT_GIC_ITS_AFFINITY; /******************************************************************************* * - * MPST - Memory Power State Table (ACPI 5.0) + * STAO - Status Override Table (_STA override) - ACPI 6.0 * Version 1 * + * Conforms to "ACPI Specification for Status Override Table" + * 6 January 2015 + * ******************************************************************************/ -#define ACPI_MPST_CHANNEL_INFO \ - UINT8 ChannelId; \ - UINT8 Reserved1[3]; \ - UINT16 PowerNodeCount; \ - UINT16 Reserved2; - -/* Main table */ - -typedef struct acpi_table_mpst +typedef struct acpi_table_stao { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ - -} ACPI_TABLE_MPST; - - -/* Memory Platform Communication Channel Info */ - -typedef struct acpi_mpst_channel -{ - ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ - -} ACPI_MPST_CHANNEL; - - -/* Memory Power Node Structure */ - -typedef struct acpi_mpst_power_node -{ - UINT8 Flags; - UINT8 Reserved1; - UINT16 NodeId; - UINT32 Length; - UINT64 RangeAddress; - UINT64 RangeLength; - UINT32 NumPowerStates; - UINT32 NumPhysicalComponents; - -} ACPI_MPST_POWER_NODE; - -/* Values for Flags field above */ + UINT8 IgnoreUart; -#define ACPI_MPST_ENABLED 1 -#define ACPI_MPST_POWER_MANAGED 2 -#define ACPI_MPST_HOT_PLUG_CAPABLE 4 +} ACPI_TABLE_STAO; -/* Memory Power State Structure (follows POWER_NODE above) */ +/******************************************************************************* + * + * TCPA - Trusted Computing Platform Alliance table + * Version 2 + * + * TCG Hardware Interface Table for TPM 1.2 Clients and Servers + * + * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0", + * Version 1.2, Revision 8 + * February 27, 2017 + * + * NOTE: There are two versions of the table with the same signature -- + * the client version and the server version. The common PlatformClass + * field is used to differentiate the two types of tables. + * + ******************************************************************************/ -typedef struct acpi_mpst_power_state +typedef struct acpi_table_tcpa_hdr { - UINT8 PowerState; - UINT8 InfoIndex; + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT16 PlatformClass; -} ACPI_MPST_POWER_STATE; +} ACPI_TABLE_TCPA_HDR; +/* + * Values for PlatformClass above. + * This is how the client and server subtables are differentiated + */ +#define ACPI_TCPA_CLIENT_TABLE 0 +#define ACPI_TCPA_SERVER_TABLE 1 -/* Physical Component ID Structure (follows POWER_STATE above) */ -typedef struct acpi_mpst_component +typedef struct acpi_table_tcpa_client { - UINT16 ComponentId; - -} ACPI_MPST_COMPONENT; + UINT32 MinimumLogLength; /* Minimum length for the event log area */ + UINT64 LogAddress; /* Address of the event log area */ +} ACPI_TABLE_TCPA_CLIENT; -/* Memory Power State Characteristics Structure (follows all POWER_NODEs) */ - -typedef struct acpi_mpst_data_hdr +typedef struct acpi_table_tcpa_server { - UINT16 CharacteristicsCount; UINT16 Reserved; - -} ACPI_MPST_DATA_HDR; - -typedef struct acpi_mpst_power_data -{ - UINT8 StructureId; - UINT8 Flags; - UINT16 Reserved1; - UINT32 AveragePower; - UINT32 PowerSaving; - UINT64 ExitLatency; - UINT64 Reserved2; - -} ACPI_MPST_POWER_DATA; - -/* Values for Flags field above */ - -#define ACPI_MPST_PRESERVE 1 -#define ACPI_MPST_AUTOENTRY 2 -#define ACPI_MPST_AUTOEXIT 4 - - -/* Shared Memory Region (not part of an ACPI table) */ - -typedef struct acpi_mpst_shared -{ - UINT32 Signature; - UINT16 PccCommand; - UINT16 PccStatus; - UINT32 CommandRegister; - UINT32 StatusRegister; - UINT32 PowerStateId; - UINT32 PowerNodeId; - UINT64 EnergyConsumed; - UINT64 AveragePower; - -} ACPI_MPST_SHARED; + UINT64 MinimumLogLength; /* Minimum length for the event log area */ + UINT64 LogAddress; /* Address of the event log area */ + UINT16 SpecRevision; + UINT8 DeviceFlags; + UINT8 InterruptFlags; + UINT8 GpeNumber; + UINT8 Reserved2[3]; + UINT32 GlobalInterrupt; + ACPI_GENERIC_ADDRESS Address; + UINT32 Reserved3; + ACPI_GENERIC_ADDRESS ConfigAddress; + UINT8 Group; + UINT8 Bus; /* PCI Bus/Segment/Function numbers */ + UINT8 Device; + UINT8 Function; + +} ACPI_TABLE_TCPA_SERVER; + +/* Values for DeviceFlags above */ + +#define ACPI_TCPA_PCI_DEVICE (1) +#define ACPI_TCPA_BUS_PNP (1<<1) +#define ACPI_TCPA_ADDRESS_VALID (1<<2) + +/* Values for InterruptFlags above */ + +#define ACPI_TCPA_INTERRUPT_MODE (1) +#define ACPI_TCPA_INTERRUPT_POLARITY (1<<1) +#define ACPI_TCPA_SCI_VIA_GPE (1<<2) +#define ACPI_TCPA_GLOBAL_INTERRUPT (1<<3) /******************************************************************************* * - * PCCT - Platform Communications Channel Table (ACPI 5.0) - * Version 2 (ACPI 6.2) + * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table + * Version 4 + * + * TCG Hardware Interface Table for TPM 2.0 Clients and Servers + * + * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0", + * Version 1.2, Revision 8 + * February 27, 2017 * ******************************************************************************/ -typedef struct acpi_table_pcct +typedef struct acpi_table_tpm2 { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 Flags; - UINT64 Reserved; - -} ACPI_TABLE_PCCT; - -/* Values for Flags field above */ - -#define ACPI_PCCT_DOORBELL 1 - -/* Values for subtable type in ACPI_SUBTABLE_HEADER */ - -enum AcpiPcctType -{ - ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0, - ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1, - ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */ - ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3, /* ACPI 6.2 */ - ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4, /* ACPI 6.2 */ - ACPI_PCCT_TYPE_RESERVED = 5 /* 5 and greater are reserved */ -}; - -/* - * PCCT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER - */ - -/* 0: Generic Communications Subspace */ - -typedef struct acpi_pcct_subspace -{ - ACPI_SUBTABLE_HEADER Header; - UINT8 Reserved[6]; - UINT64 BaseAddress; - UINT64 Length; - ACPI_GENERIC_ADDRESS DoorbellRegister; - UINT64 PreserveMask; - UINT64 WriteMask; - UINT32 Latency; - UINT32 MaxAccessRate; - UINT16 MinTurnaroundTime; - -} ACPI_PCCT_SUBSPACE; + UINT16 PlatformClass; + UINT16 Reserved; + UINT64 ControlAddress; + UINT32 StartMethod; + /* Platform-specific data follows */ -/* 1: HW-reduced Communications Subspace (ACPI 5.1) */ +} ACPI_TABLE_TPM2; -typedef struct acpi_pcct_hw_reduced -{ - ACPI_SUBTABLE_HEADER Header; - UINT32 PlatformInterrupt; - UINT8 Flags; - UINT8 Reserved; - UINT64 BaseAddress; - UINT64 Length; - ACPI_GENERIC_ADDRESS DoorbellRegister; - UINT64 PreserveMask; - UINT64 WriteMask; - UINT32 Latency; - UINT32 MaxAccessRate; - UINT16 MinTurnaroundTime; +/* Values for StartMethod above */ -} ACPI_PCCT_HW_REDUCED; +#define ACPI_TPM2_NOT_ALLOWED 0 +#define ACPI_TPM2_RESERVED1 1 +#define ACPI_TPM2_START_METHOD 2 +#define ACPI_TPM2_RESERVED3 3 +#define ACPI_TPM2_RESERVED4 4 +#define ACPI_TPM2_RESERVED5 5 +#define ACPI_TPM2_MEMORY_MAPPED 6 +#define ACPI_TPM2_COMMAND_BUFFER 7 +#define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD 8 +#define ACPI_TPM2_RESERVED9 9 +#define ACPI_TPM2_RESERVED10 10 +#define ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC 11 /* V1.2 Rev 8 */ +#define ACPI_TPM2_RESERVED 12 -/* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */ +/* Optional trailer appears after any StartMethod subtables */ -typedef struct acpi_pcct_hw_reduced_type2 +typedef struct acpi_tpm2_trailer { - ACPI_SUBTABLE_HEADER Header; - UINT32 PlatformInterrupt; - UINT8 Flags; - UINT8 Reserved; - UINT64 BaseAddress; - UINT64 Length; - ACPI_GENERIC_ADDRESS DoorbellRegister; - UINT64 PreserveMask; - UINT64 WriteMask; - UINT32 Latency; - UINT32 MaxAccessRate; - UINT16 MinTurnaroundTime; - ACPI_GENERIC_ADDRESS PlatformAckRegister; - UINT64 AckPreserveMask; - UINT64 AckWriteMask; + UINT8 MethodParameters[12]; + UINT32 MinimumLogLength; /* Minimum length for the event log area */ + UINT64 LogAddress; /* Address of the event log area */ -} ACPI_PCCT_HW_REDUCED_TYPE2; - - -/* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */ - -typedef struct acpi_pcct_ext_pcc_master -{ - ACPI_SUBTABLE_HEADER Header; - UINT32 PlatformInterrupt; - UINT8 Flags; - UINT8 Reserved1; - UINT64 BaseAddress; - UINT32 Length; - ACPI_GENERIC_ADDRESS DoorbellRegister; - UINT64 PreserveMask; - UINT64 WriteMask; - UINT32 Latency; - UINT32 MaxAccessRate; - UINT32 MinTurnaroundTime; - ACPI_GENERIC_ADDRESS PlatformAckRegister; - UINT64 AckPreserveMask; - UINT64 AckSetMask; - UINT64 Reserved2; - ACPI_GENERIC_ADDRESS CmdCompleteRegister; - UINT64 CmdCompleteMask; - ACPI_GENERIC_ADDRESS CmdUpdateRegister; - UINT64 CmdUpdatePreserveMask; - UINT64 CmdUpdateSetMask; - ACPI_GENERIC_ADDRESS ErrorStatusRegister; - UINT64 ErrorStatusMask; - -} ACPI_PCCT_EXT_PCC_MASTER; - - -/* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */ - -typedef struct acpi_pcct_ext_pcc_slave -{ - ACPI_SUBTABLE_HEADER Header; - UINT32 PlatformInterrupt; - UINT8 Flags; - UINT8 Reserved1; - UINT64 BaseAddress; - UINT32 Length; - ACPI_GENERIC_ADDRESS DoorbellRegister; - UINT64 PreserveMask; - UINT64 WriteMask; - UINT32 Latency; - UINT32 MaxAccessRate; - UINT32 MinTurnaroundTime; - ACPI_GENERIC_ADDRESS PlatformAckRegister; - UINT64 AckPreserveMask; - UINT64 AckSetMask; - UINT64 Reserved2; - ACPI_GENERIC_ADDRESS CmdCompleteRegister; - UINT64 CmdCompleteMask; - ACPI_GENERIC_ADDRESS CmdUpdateRegister; - UINT64 CmdUpdatePreserveMask; - UINT64 CmdUpdateSetMask; - ACPI_GENERIC_ADDRESS ErrorStatusRegister; - UINT64 ErrorStatusMask; - -} ACPI_PCCT_EXT_PCC_SLAVE; - - -/* Values for doorbell flags above */ - -#define ACPI_PCCT_INTERRUPT_POLARITY (1) -#define ACPI_PCCT_INTERRUPT_MODE (1<<1) +} ACPI_TPM2_TRAILER; /* - * PCC memory structures (not part of the ACPI table) + * Subtables (StartMethod-specific) */ -/* Shared Memory Region */ +/* 11: Start Method for ARM SMC (V1.2 Rev 8) */ -typedef struct acpi_pcct_shared_memory +typedef struct acpi_tpm2_arm_smc { - UINT32 Signature; - UINT16 Command; - UINT16 Status; + UINT32 GlobalInterrupt; + UINT8 InterruptFlags; + UINT8 OperationFlags; + UINT16 Reserved; + UINT32 FunctionId; -} ACPI_PCCT_SHARED_MEMORY; +} ACPI_TPM2_ARM_SMC; +/* Values for InterruptFlags above */ -/* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */ +#define ACPI_TPM2_INTERRUPT_SUPPORT (1) -typedef struct acpi_pcct_ext_pcc_shared_memory -{ - UINT32 Signature; - UINT32 Flags; - UINT32 Length; - UINT32 Command; +/* Values for OperationFlags above */ -} ACPI_PCCT_EXT_PCC_SHARED_MEMORY; +#define ACPI_TPM2_IDLE_SUPPORT (1) /******************************************************************************* * - * PMTT - Platform Memory Topology Table (ACPI 5.0) + * UEFI - UEFI Boot optimization Table * Version 1 * + * Conforms to "Unified Extensible Firmware Interface Specification", + * Version 2.3, May 8, 2009 + * ******************************************************************************/ -typedef struct acpi_table_pmtt +typedef struct acpi_table_uefi { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 Reserved; - -} ACPI_TABLE_PMTT; - - -/* Common header for PMTT subtables that follow main table */ - -typedef struct acpi_pmtt_header -{ - UINT8 Type; - UINT8 Reserved1; - UINT16 Length; - UINT16 Flags; - UINT16 Reserved2; - -} ACPI_PMTT_HEADER; - -/* Values for Type field above */ - -#define ACPI_PMTT_TYPE_SOCKET 0 -#define ACPI_PMTT_TYPE_CONTROLLER 1 -#define ACPI_PMTT_TYPE_DIMM 2 -#define ACPI_PMTT_TYPE_RESERVED 3 /* 0x03-0xFF are reserved */ + UINT8 Identifier[16]; /* UUID identifier */ + UINT16 DataOffset; /* Offset of remaining data in table */ -/* Values for Flags field above */ +} ACPI_TABLE_UEFI; -#define ACPI_PMTT_TOP_LEVEL 0x0001 -#define ACPI_PMTT_PHYSICAL 0x0002 -#define ACPI_PMTT_MEMORY_TYPE 0x000C - - -/* - * PMTT subtables, correspond to Type in acpi_pmtt_header - */ +/******************************************************************************* + * + * VRTC - Virtual Real Time Clock Table + * Version 1 + * + * Conforms to "Simple Firmware Interface Specification", + * Draft 0.8.2, Oct 19, 2010 + * NOTE: The ACPI VRTC is equivalent to The SFI MRTC table. + * + ******************************************************************************/ -/* 0: Socket Structure */ - -typedef struct acpi_pmtt_socket -{ - ACPI_PMTT_HEADER Header; - UINT16 SocketId; - UINT16 Reserved; - -} ACPI_PMTT_SOCKET; - - -/* 1: Memory Controller subtable */ - -typedef struct acpi_pmtt_controller -{ - ACPI_PMTT_HEADER Header; - UINT32 ReadLatency; - UINT32 WriteLatency; - UINT32 ReadBandwidth; - UINT32 WriteBandwidth; - UINT16 AccessWidth; - UINT16 Alignment; - UINT16 Reserved; - UINT16 DomainCount; - -} ACPI_PMTT_CONTROLLER; - -/* 1a: Proximity Domain substructure */ - -typedef struct acpi_pmtt_domain +typedef struct acpi_table_vrtc { - UINT32 ProximityDomain; - -} ACPI_PMTT_DOMAIN; + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ +} ACPI_TABLE_VRTC; -/* 2: Physical Component Identifier (DIMM) */ +/* VRTC entry */ -typedef struct acpi_pmtt_physical_component +typedef struct acpi_vrtc_entry { - ACPI_PMTT_HEADER Header; - UINT16 ComponentId; - UINT16 Reserved; - UINT32 MemorySize; - UINT32 BiosHandle; + ACPI_GENERIC_ADDRESS PhysicalAddress; + UINT32 Irq; -} ACPI_PMTT_PHYSICAL_COMPONENT; +} ACPI_VRTC_ENTRY; /******************************************************************************* * - * RASF - RAS Feature Table (ACPI 5.0) + * WAET - Windows ACPI Emulated devices Table * Version 1 * + * Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009 + * ******************************************************************************/ -typedef struct acpi_table_rasf +typedef struct acpi_table_waet { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT8 ChannelId[12]; + UINT32 Flags; -} ACPI_TABLE_RASF; +} ACPI_TABLE_WAET; -/* RASF Platform Communication Channel Shared Memory Region */ +/* Masks for Flags field above */ -typedef struct acpi_rasf_shared_memory -{ - UINT32 Signature; - UINT16 Command; - UINT16 Status; - UINT16 Version; - UINT8 Capabilities[16]; - UINT8 SetCapabilities[16]; - UINT16 NumParameterBlocks; - UINT32 SetCapabilitiesStatus; +#define ACPI_WAET_RTC_NO_ACK (1) /* RTC requires no int acknowledge */ +#define ACPI_WAET_TIMER_ONE_READ (1<<1) /* PM timer requires only one read */ -} ACPI_RASF_SHARED_MEMORY; -/* RASF Parameter Block Structure Header */ +/******************************************************************************* + * + * WDAT - Watchdog Action Table + * Version 1 + * + * Conforms to "Hardware Watchdog Timers Design Specification", + * Copyright 2006 Microsoft Corporation. + * + ******************************************************************************/ -typedef struct acpi_rasf_parameter_block +typedef struct acpi_table_wdat { - UINT16 Type; - UINT16 Version; - UINT16 Length; - -} ACPI_RASF_PARAMETER_BLOCK; + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 HeaderLength; /* Watchdog Header Length */ + UINT16 PciSegment; /* PCI Segment number */ + UINT8 PciBus; /* PCI Bus number */ + UINT8 PciDevice; /* PCI Device number */ + UINT8 PciFunction; /* PCI Function number */ + UINT8 Reserved[3]; + UINT32 TimerPeriod; /* Period of one timer count (msec) */ + UINT32 MaxCount; /* Maximum counter value supported */ + UINT32 MinCount; /* Minimum counter value */ + UINT8 Flags; + UINT8 Reserved2[3]; + UINT32 Entries; /* Number of watchdog entries that follow */ -/* RASF Parameter Block Structure for PATROL_SCRUB */ +} ACPI_TABLE_WDAT; -typedef struct acpi_rasf_patrol_scrub_parameter -{ - ACPI_RASF_PARAMETER_BLOCK Header; - UINT16 PatrolScrubCommand; - UINT64 RequestedAddressRange[2]; - UINT64 ActualAddressRange[2]; - UINT16 Flags; - UINT8 RequestedSpeed; +/* Masks for Flags field above */ -} ACPI_RASF_PATROL_SCRUB_PARAMETER; +#define ACPI_WDAT_ENABLED (1) +#define ACPI_WDAT_STOPPED 0x80 -/* Masks for Flags and Speed fields above */ -#define ACPI_RASF_SCRUBBER_RUNNING 1 -#define ACPI_RASF_SPEED (7<<1) -#define ACPI_RASF_SPEED_SLOW (0<<1) -#define ACPI_RASF_SPEED_MEDIUM (4<<1) -#define ACPI_RASF_SPEED_FAST (7<<1) +/* WDAT Instruction Entries (actions) */ -/* Channel Commands */ - -enum AcpiRasfCommands +typedef struct acpi_wdat_entry { - ACPI_RASF_EXECUTE_RASF_COMMAND = 1 + UINT8 Action; + UINT8 Instruction; + UINT16 Reserved; + ACPI_GENERIC_ADDRESS RegisterRegion; + UINT32 Value; /* Value used with Read/Write register */ + UINT32 Mask; /* Bitmask required for this register instruction */ + +} ACPI_WDAT_ENTRY; + +/* Values for Action field above */ + +enum AcpiWdatActions +{ + ACPI_WDAT_RESET = 1, + ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4, + ACPI_WDAT_GET_COUNTDOWN = 5, + ACPI_WDAT_SET_COUNTDOWN = 6, + ACPI_WDAT_GET_RUNNING_STATE = 8, + ACPI_WDAT_SET_RUNNING_STATE = 9, + ACPI_WDAT_GET_STOPPED_STATE = 10, + ACPI_WDAT_SET_STOPPED_STATE = 11, + ACPI_WDAT_GET_REBOOT = 16, + ACPI_WDAT_SET_REBOOT = 17, + ACPI_WDAT_GET_SHUTDOWN = 18, + ACPI_WDAT_SET_SHUTDOWN = 19, + ACPI_WDAT_GET_STATUS = 32, + ACPI_WDAT_SET_STATUS = 33, + ACPI_WDAT_ACTION_RESERVED = 34 /* 34 and greater are reserved */ }; -/* Platform RAS Capabilities */ +/* Values for Instruction field above */ -enum AcpiRasfCapabiliities +enum AcpiWdatInstructions { - ACPI_HW_PATROL_SCRUB_SUPPORTED = 0, - ACPI_SW_PATROL_SCRUB_EXPOSED = 1 + ACPI_WDAT_READ_VALUE = 0, + ACPI_WDAT_READ_COUNTDOWN = 1, + ACPI_WDAT_WRITE_VALUE = 2, + ACPI_WDAT_WRITE_COUNTDOWN = 3, + ACPI_WDAT_INSTRUCTION_RESERVED = 4, /* 4 and greater are reserved */ + ACPI_WDAT_PRESERVE_REGISTER = 0x80 /* Except for this value */ }; -/* Patrol Scrub Commands */ -enum AcpiRasfPatrolScrubCommands -{ - ACPI_RASF_GET_PATROL_PARAMETERS = 1, - ACPI_RASF_START_PATROL_SCRUBBER = 2, - ACPI_RASF_STOP_PATROL_SCRUBBER = 3 -}; +/******************************************************************************* + * + * WDDT - Watchdog Descriptor Table + * Version 1 + * + * Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)", + * Version 001, September 2002 + * + ******************************************************************************/ -/* Channel Command flags */ +typedef struct acpi_table_wddt +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT16 SpecVersion; + UINT16 TableVersion; + UINT16 PciVendorId; + ACPI_GENERIC_ADDRESS Address; + UINT16 MaxCount; /* Maximum counter value supported */ + UINT16 MinCount; /* Minimum counter value supported */ + UINT16 Period; + UINT16 Status; + UINT16 Capability; -#define ACPI_RASF_GENERATE_SCI (1<<15) +} ACPI_TABLE_WDDT; -/* Status values */ +/* Flags for Status field above */ -enum AcpiRasfStatus -{ - ACPI_RASF_SUCCESS = 0, - ACPI_RASF_NOT_VALID = 1, - ACPI_RASF_NOT_SUPPORTED = 2, - ACPI_RASF_BUSY = 3, - ACPI_RASF_FAILED = 4, - ACPI_RASF_ABORTED = 5, - ACPI_RASF_INVALID_DATA = 6 -}; +#define ACPI_WDDT_AVAILABLE (1) +#define ACPI_WDDT_ACTIVE (1<<1) +#define ACPI_WDDT_TCO_OS_OWNED (1<<2) +#define ACPI_WDDT_USER_RESET (1<<11) +#define ACPI_WDDT_WDT_RESET (1<<12) +#define ACPI_WDDT_POWER_FAIL (1<<13) +#define ACPI_WDDT_UNKNOWN_RESET (1<<14) -/* Status flags */ +/* Flags for Capability field above */ -#define ACPI_RASF_COMMAND_COMPLETE (1) -#define ACPI_RASF_SCI_DOORBELL (1<<1) -#define ACPI_RASF_ERROR (1<<2) -#define ACPI_RASF_STATUS (0x1F<<3) +#define ACPI_WDDT_AUTO_RESET (1) +#define ACPI_WDDT_ALERT_SUPPORT (1<<1) /******************************************************************************* * - * STAO - Status Override Table (_STA override) - ACPI 6.0 + * WDRT - Watchdog Resource Table * Version 1 * - * Conforms to "ACPI Specification for Status Override Table" - * 6 January 2015 + * Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003", + * Version 1.01, August 28, 2006 * ******************************************************************************/ -typedef struct acpi_table_stao +typedef struct acpi_table_wdrt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT8 IgnoreUart; + ACPI_GENERIC_ADDRESS ControlRegister; + ACPI_GENERIC_ADDRESS CountRegister; + UINT16 PciDeviceId; + UINT16 PciVendorId; + UINT8 PciBus; /* PCI Bus number */ + UINT8 PciDevice; /* PCI Device number */ + UINT8 PciFunction; /* PCI Function number */ + UINT8 PciSegment; /* PCI Segment number */ + UINT16 MaxCount; /* Maximum counter value supported */ + UINT8 Units; -} ACPI_TABLE_STAO; +} ACPI_TABLE_WDRT; /******************************************************************************* @@ -1089,6 +857,30 @@ typedef struct acpi_table_wpbt /******************************************************************************* * + * WSMT - Windows SMM Security Migrations Table + * Version 1 + * + * Conforms to "Windows SMM Security Migrations Table", + * Version 1.0, April 18, 2016 + * + ******************************************************************************/ + +typedef struct acpi_table_wsmt +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 ProtectionFlags; + +} ACPI_TABLE_WSMT; + +/* Flags for ProtectionFlags field above */ + +#define ACPI_WSMT_FIXED_COMM_BUFFERS (1) +#define ACPI_WSMT_COMM_BUFFER_NESTED_PTR_PROTECTION (2) +#define ACPI_WSMT_SYSTEM_RESOURCE_PROTECTION (4) + + +/******************************************************************************* + * * XENV - Xen Environment Table (ACPI 6.0) * Version 1 * diff --git a/source/include/amlcode.h b/source/include/amlcode.h index 3b27c92ecbf46..6507ae677f0c5 100644 --- a/source/include/amlcode.h +++ b/source/include/amlcode.h @@ -386,24 +386,9 @@ #define ARGI_DEVICE_REF 0x0D #define ARGI_REFERENCE 0x0E #define ARGI_TARGETREF 0x0F /* Target, subject to implicit conversion */ -#define ARGI_SIMPLE_TARGET 0x10 /* Name, Local, Arg -- no implicit conversion */ -#define ARGI_STORE_TARGET 0x11 /* Target for store is TARGETREF + package objects */ -/* - * #define ARGI_FIXED_TARGET 0x10 Target, no implicit conversion - * - * Removed 10/2016. ARGI_FIXED_TARGET was used for these operators: - * FromBCD - * ToBCD - * ToDecimalString - * ToHexString - * ToInteger - * ToBuffer - * The purpose of this type was to disable "implicit result conversion", - * but this was incorrect per the ACPI spec and other ACPI implementations. - * These operators now have the target operand defined as a normal - * ARGI_TARGETREF. - */ - +#define ARGI_FIXED_TARGET 0x10 /* Target, no implicit conversion */ +#define ARGI_SIMPLE_TARGET 0x11 /* Name, Local, Arg -- no implicit conversion */ +#define ARGI_STORE_TARGET 0x12 /* Target for store is TARGETREF + package objects */ /* Multiple/complex types */ diff --git a/source/include/platform/aclinux.h b/source/include/platform/aclinux.h index 1d7fdaa8957eb..836b5eb53c99f 100644 --- a/source/include/platform/aclinux.h +++ b/source/include/platform/aclinux.h @@ -166,6 +166,7 @@ #define ACPI_USE_SYSTEM_CLIBRARY #define ACPI_USE_DO_WHILE_0 +#define ACPI_IGNORE_PACKAGE_RESOLUTION_ERRORS #ifdef __KERNEL__ |