/** @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_ |