| /** @file | |
| Arm Error Source Table as described in the | |
| 'ACPI for the Armv8 RAS Extensions 1.1' Specification. | |
| Copyright (c) 2020 Arm Limited. | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| @par Reference(s): | |
| - ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document, | |
| dated 28 September 2020. | |
| (https://developer.arm.com/documentation/den0085/0101/) | |
| @par Glossary | |
| - Ref : Reference | |
| - Id : Identifier | |
| **/ | |
| #ifndef ARM_ERROR_SOURCE_TABLE_H_ | |
| #define ARM_ERROR_SOURCE_TABLE_H_ | |
| /// | |
| /// "AEST" Arm Error Source Table | |
| /// | |
| #define EFI_ACPI_6_3_ARM_ERROR_SOURCE_TABLE_SIGNATURE SIGNATURE_32('A', 'E', 'S', 'T') | |
| #define EFI_ACPI_ARM_ERROR_SOURCE_TABLE_REVISION 1 | |
| #pragma pack(1) | |
| /// | |
| /// Arm Error Source Table definition. | |
| /// | |
| typedef struct { | |
| EFI_ACPI_DESCRIPTION_HEADER Header; | |
| } EFI_ACPI_ARM_ERROR_SOURCE_TABLE; | |
| /// | |
| /// AEST Node structure. | |
| /// | |
| typedef struct { | |
| /// Node type: | |
| /// 0x00 - Processor error node | |
| /// 0x01 - Memory error node | |
| /// 0x02 - SMMU error node | |
| /// 0x03 - Vendor-defined error node | |
| /// 0x04 - GIC error node | |
| UINT8 Type; | |
| /// Length of structure in bytes. | |
| UINT16 Length; | |
| /// Reserved - Must be zero. | |
| UINT8 Reserved; | |
| /// Offset from the start of the node to node-specific data. | |
| UINT32 DataOffset; | |
| /// Offset from the start of the node to the node interface structure. | |
| UINT32 InterfaceOffset; | |
| /// Offset from the start of the node to node interrupt array. | |
| UINT32 InterruptArrayOffset; | |
| /// Number of entries in the interrupt array. | |
| UINT32 InterruptArrayCount; | |
| // Generic node data | |
| /// The timestamp frequency of the counter in Hz. | |
| UINT64 TimestampRate; | |
| /// Reserved - Must be zero. | |
| UINT64 Reserved1; | |
| /// The rate in Hz at which the Error Generation Counter decrements. | |
| UINT64 ErrorInjectionCountdownRate; | |
| } EFI_ACPI_AEST_NODE_STRUCT; | |
| // AEST Node type definitions | |
| #define EFI_ACPI_AEST_NODE_TYPE_PROCESSOR 0x0 | |
| #define EFI_ACPI_AEST_NODE_TYPE_MEMORY 0x1 | |
| #define EFI_ACPI_AEST_NODE_TYPE_SMMU 0x2 | |
| #define EFI_ACPI_AEST_NODE_TYPE_VENDOR_DEFINED 0x3 | |
| #define EFI_ACPI_AEST_NODE_TYPE_GIC 0x4 | |
| /// | |
| /// AEST Node Interface structure. | |
| /// | |
| typedef struct { | |
| /// Interface type: | |
| /// 0x0 - System register (SR) | |
| /// 0x1 - Memory mapped (MMIO) | |
| UINT8 Type; | |
| /// Reserved - Must be zero. | |
| UINT8 Reserved[3]; | |
| /// AEST node interface flags. | |
| UINT32 Flags; | |
| /// Base address of error group that contains the error node. | |
| UINT64 BaseAddress; | |
| /// Zero-based index of the first standard error record that | |
| /// belongs to this node. | |
| UINT32 StartErrorRecordIndex; | |
| /// Number of error records in this node including both | |
| /// implemented and unimplemented records. | |
| UINT32 NumberErrorRecords; | |
| /// A bitmap indicating the error records within this | |
| /// node that are implemented in the current system. | |
| UINT64 ErrorRecordImplemented; | |
| /// A bitmap indicating the error records within this node that | |
| /// support error status reporting through the ERRGSR register. | |
| UINT64 ErrorRecordStatusReportingSupported; | |
| /// A bitmap indicating the addressing mode used by each error | |
| /// record within this node to populate the ERR<n>_ADDR register. | |
| UINT64 AddressingMode; | |
| } EFI_ACPI_AEST_INTERFACE_STRUCT; | |
| // AEST Interface node type definitions. | |
| #define EFI_ACPI_AEST_INTERFACE_TYPE_SR 0x0 | |
| #define EFI_ACPI_AEST_INTERFACE_TYPE_MMIO 0x1 | |
| // AEST node interface flag definitions. | |
| #define EFI_ACPI_AEST_INTERFACE_FLAG_PRIVATE 0 | |
| #define EFI_ACPI_AEST_INTERFACE_FLAG_SHARED BIT0 | |
| #define EFI_ACPI_AEST_INTERFACE_FLAG_CLEAR_MISCX BIT1 | |
| /// | |
| /// AEST Node Interrupt structure. | |
| /// | |
| typedef struct { | |
| /// Interrupt type: | |
| /// 0x0 - Fault Handling Interrupt | |
| /// 0x1 - Error Recovery Interrupt | |
| UINT8 InterruptType; | |
| /// Reserved - Must be zero. | |
| UINT8 Reserved[2]; | |
| /// Interrupt flags | |
| /// Bits [31:1]: Must be zero. | |
| /// Bit 0: | |
| /// 0b - Interrupt is edge-triggered | |
| /// 1b - Interrupt is level-triggered | |
| UINT8 InterruptFlags; | |
| /// GSIV of interrupt, if interrupt is an SPI or a PPI. | |
| UINT32 InterruptGsiv; | |
| /// If MSI is supported, then this field must be set to the | |
| /// Identifier field of the IORT ITS Group node. | |
| UINT8 ItsGroupRefId; | |
| /// Reserved - must be zero. | |
| UINT8 Reserved1[3]; | |
| } EFI_ACPI_AEST_INTERRUPT_STRUCT; | |
| // AEST Interrupt node - interrupt type defintions. | |
| #define EFI_ACPI_AEST_INTERRUPT_TYPE_FAULT_HANDLING 0x0 | |
| #define EFI_ACPI_AEST_INTERRUPT_TYPE_ERROR_RECOVERY 0x1 | |
| // AEST Interrupt node - interrupt flag defintions. | |
| #define EFI_ACPI_AEST_INTERRUPT_FLAG_TRIGGER_TYPE_EDGE 0 | |
| #define EFI_ACPI_AEST_INTERRUPT_FLAG_TRIGGER_TYPE_LEVEL BIT0 | |
| /// | |
| /// Cache Processor Resource structure. | |
| /// | |
| typedef struct { | |
| /// Reference to the cache structure in the PPTT table. | |
| UINT32 CacheRefId; | |
| /// Reserved | |
| UINT32 Reserved; | |
| } EFI_ACPI_AEST_PROCESSOR_CACHE_RESOURCE_STRUCT; | |
| /// | |
| /// TLB Processor Resource structure. | |
| /// | |
| typedef struct { | |
| /// TLB level from perspective of current processor. | |
| UINT32 TlbRefId; | |
| /// Reserved | |
| UINT32 Reserved; | |
| } EFI_ACPI_AEST_PROCESSOR_TLB_RESOURCE_STRUCT; | |
| /// | |
| /// Processor Generic Resource structure. | |
| /// | |
| typedef struct { | |
| /// Vendor-defined supplementary data. | |
| UINT32 Data; | |
| } EFI_ACPI_AEST_PROCESSOR_GENERIC_RESOURCE_STRUCT; | |
| /// | |
| /// AEST Processor Resource union. | |
| /// | |
| typedef union { | |
| /// Processor Cache resource. | |
| EFI_ACPI_AEST_PROCESSOR_CACHE_RESOURCE_STRUCT Cache; | |
| /// Processor TLB resource. | |
| EFI_ACPI_AEST_PROCESSOR_TLB_RESOURCE_STRUCT Tlb; | |
| /// Processor Generic resource. | |
| EFI_ACPI_AEST_PROCESSOR_GENERIC_RESOURCE_STRUCT Generic; | |
| } EFI_ACPI_AEST_PROCESSOR_RESOURCE; | |
| /// | |
| /// AEST Processor structure. | |
| /// | |
| typedef struct { | |
| /// AEST Node header | |
| EFI_ACPI_AEST_NODE_STRUCT NodeHeader; | |
| /// Processor ID of node. | |
| UINT32 AcpiProcessorId; | |
| /// Resource type of the processor node. | |
| /// 0x0 - Cache | |
| /// 0x1 - TLB | |
| /// 0x2 - Generic | |
| UINT8 ResourceType; | |
| /// Reserved - must be zero. | |
| UINT8 Reserved; | |
| /// Processor structure flags. | |
| UINT8 Flags; | |
| /// Processor structure revision. | |
| UINT8 Revision; | |
| /// Processor affinity descriptor for the resource that this | |
| /// error node pertains to. | |
| UINT64 ProcessorAffinityLevelIndicator; | |
| /// Processor resource | |
| EFI_ACPI_AEST_PROCESSOR_RESOURCE Resource; | |
| // Node Interface | |
| // EFI_ACPI_AEST_INTERFACE_STRUCT NodeInterface; | |
| // Node Interrupt Array | |
| // EFI_ACPI_AEST_INTERRUPT_STRUCT NodeInterruptArray[n]; | |
| } EFI_ACPI_AEST_PROCESSOR_STRUCT; | |
| // AEST Processor resource type definitions. | |
| #define EFI_ACPI_AEST_PROCESSOR_RESOURCE_TYPE_CACHE 0x0 | |
| #define EFI_ACPI_AEST_PROCESSOR_RESOURCE_TYPE_TLB 0x1 | |
| #define EFI_ACPI_AEST_PROCESSOR_RESOURCE_TYPE_GENERIC 0x2 | |
| // AEST Processor flag definitions. | |
| #define EFI_ACPI_AEST_PROCESSOR_FLAG_GLOBAL BIT0 | |
| #define EFI_ACPI_AEST_PROCESSOR_FLAG_SHARED BIT1 | |
| /// | |
| /// Memory Controller structure. | |
| /// | |
| typedef struct { | |
| /// AEST Node header | |
| EFI_ACPI_AEST_NODE_STRUCT NodeHeader; | |
| /// SRAT proximity domain. | |
| UINT32 ProximityDomain; | |
| // Node Interface | |
| // EFI_ACPI_AEST_INTERFACE_STRUCT NodeInterface; | |
| // Node Interrupt Array | |
| // EFI_ACPI_AEST_INTERRUPT_STRUCT NodeInterruptArray[n]; | |
| } EFI_ACPI_AEST_MEMORY_CONTROLLER_STRUCT; | |
| /// | |
| /// SMMU structure. | |
| /// | |
| typedef struct { | |
| /// AEST Node header | |
| EFI_ACPI_AEST_NODE_STRUCT NodeHeader; | |
| /// Reference to the IORT table node that describes this SMMU. | |
| UINT32 SmmuRefId; | |
| /// Reference to the IORT table node that is associated with the | |
| /// sub-component within this SMMU. | |
| UINT32 SubComponentRefId; | |
| // Node Interface | |
| // EFI_ACPI_AEST_INTERFACE_STRUCT NodeInterface; | |
| // Node Interrupt Array | |
| // EFI_ACPI_AEST_INTERRUPT_STRUCT NodeInterruptArray[n]; | |
| } EFI_ACPI_AEST_SMMU_STRUCT; | |
| /// | |
| /// Vendor-Defined structure. | |
| /// | |
| typedef struct { | |
| /// AEST Node header | |
| EFI_ACPI_AEST_NODE_STRUCT NodeHeader; | |
| /// ACPI HID of the component. | |
| UINT32 HardwareId; | |
| /// The ACPI Unique identifier of the component. | |
| UINT32 UniqueId; | |
| /// Vendor-specific data, for example to identify this error source. | |
| UINT8 VendorData[16]; | |
| // Node Interface | |
| // EFI_ACPI_AEST_INTERFACE_STRUCT NodeInterface; | |
| // Node Interrupt Array | |
| // EFI_ACPI_AEST_INTERRUPT_STRUCT NodeInterruptArray[n]; | |
| } EFI_ACPI_AEST_VENDOR_DEFINED_STRUCT; | |
| /// | |
| /// GIC structure. | |
| /// | |
| typedef struct { | |
| /// AEST Node header | |
| EFI_ACPI_AEST_NODE_STRUCT NodeHeader; | |
| /// Type of GIC interface that is associated with this error node. | |
| /// 0x0 - GIC CPU (GICC) | |
| /// 0x1 - GIC Distributor (GICD) | |
| /// 0x2 - GIC Resistributor (GICR) | |
| /// 0x3 - GIC ITS (GITS) | |
| UINT32 InterfaceType; | |
| /// Identifier for the interface instance. | |
| UINT32 GicInterfaceRefId; | |
| // Node Interface | |
| // EFI_ACPI_AEST_INTERFACE_STRUCT NodeInterface; | |
| // Node Interrupt Array | |
| // EFI_ACPI_AEST_INTERRUPT_STRUCT NodeInterruptArray[n]; | |
| } EFI_ACPI_AEST_GIC_STRUCT; | |
| // AEST GIC interface type definitions. | |
| #define EFI_ACPI_AEST_GIC_INTERFACE_TYPE_GICC 0x0 | |
| #define EFI_ACPI_AEST_GIC_INTERFACE_TYPE_GICD 0x1 | |
| #define EFI_ACPI_AEST_GIC_INTERFACE_TYPE_GICR 0x2 | |
| #define EFI_ACPI_AEST_GIC_INTERFACE_TYPE_GITS 0x3 | |
| #pragma pack() | |
| #endif // ARM_ERROR_SOURCE_TABLE_H_ |