|
67 | 67 | * See http://stackoverflow.com/a/1053662/41661
|
68 | 68 | */
|
69 | 69 |
|
| 70 | +/******************************************************************************* |
| 71 | + * |
| 72 | + * AEST - Arm Error Source Table |
| 73 | + * |
| 74 | + * Conforms to: ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document |
| 75 | + * September 2020. |
| 76 | + * |
| 77 | + ******************************************************************************/ |
| 78 | + |
| 79 | +struct acpi_table_aest { |
| 80 | + struct acpi_table_header header; |
| 81 | + void *node_array[]; |
| 82 | +}; |
| 83 | + |
| 84 | +/* Common Subtable header - one per Node Structure (Subtable) */ |
| 85 | + |
| 86 | +struct acpi_aest_hdr { |
| 87 | + u8 type; |
| 88 | + u16 length; |
| 89 | + u8 reserved; |
| 90 | + u32 node_specific_offset; |
| 91 | + u32 node_interface_offset; |
| 92 | + u32 node_interrupt_offset; |
| 93 | + u32 node_interrupt_count; |
| 94 | + u64 timestamp_rate; |
| 95 | + u64 reserved1; |
| 96 | + u64 error_injection_rate; |
| 97 | +}; |
| 98 | + |
| 99 | +/* Values for Type above */ |
| 100 | + |
| 101 | +#define ACPI_AEST_PROCESSOR_ERROR_NODE 0 |
| 102 | +#define ACPI_AEST_MEMORY_ERROR_NODE 1 |
| 103 | +#define ACPI_AEST_SMMU_ERROR_NODE 2 |
| 104 | +#define ACPI_AEST_VENDOR_ERROR_NODE 3 |
| 105 | +#define ACPI_AEST_GIC_ERROR_NODE 4 |
| 106 | +#define ACPI_AEST_NODE_TYPE_RESERVED 5 /* 5 and above are reserved */ |
| 107 | + |
| 108 | +/* |
| 109 | + * AEST subtables (Error nodes) |
| 110 | + */ |
| 111 | + |
| 112 | +/* 0: Processor Error */ |
| 113 | + |
| 114 | +typedef struct acpi_aest_processor { |
| 115 | + u32 processor_id; |
| 116 | + u8 resource_type; |
| 117 | + u8 reserved; |
| 118 | + u8 flags; |
| 119 | + u8 revision; |
| 120 | + u64 processor_affinity; |
| 121 | + |
| 122 | +} acpi_aest_processor; |
| 123 | + |
| 124 | +/* Values for resource_type above, related structs below */ |
| 125 | + |
| 126 | +#define ACPI_AEST_CACHE_RESOURCE 0 |
| 127 | +#define ACPI_AEST_TLB_RESOURCE 1 |
| 128 | +#define ACPI_AEST_GENERIC_RESOURCE 2 |
| 129 | +#define ACPI_AEST_RESOURCE_RESERVED 3 /* 3 and above are reserved */ |
| 130 | + |
| 131 | +/* 0R: Processor Cache Resource Substructure */ |
| 132 | + |
| 133 | +typedef struct acpi_aest_processor_cache { |
| 134 | + u32 cache_reference; |
| 135 | + u32 reserved; |
| 136 | + |
| 137 | +} acpi_aest_processor_cache; |
| 138 | + |
| 139 | +/* Values for cache_type above */ |
| 140 | + |
| 141 | +#define ACPI_AEST_CACHE_DATA 0 |
| 142 | +#define ACPI_AEST_CACHE_INSTRUCTION 1 |
| 143 | +#define ACPI_AEST_CACHE_UNIFIED 2 |
| 144 | +#define ACPI_AEST_CACHE_RESERVED 3 /* 3 and above are reserved */ |
| 145 | + |
| 146 | +/* 1R: Processor TLB Resource Substructure */ |
| 147 | + |
| 148 | +typedef struct acpi_aest_processor_tlb { |
| 149 | + u32 tlb_level; |
| 150 | + u32 reserved; |
| 151 | + |
| 152 | +} acpi_aest_processor_tlb; |
| 153 | + |
| 154 | +/* 2R: Processor Generic Resource Substructure */ |
| 155 | + |
| 156 | +typedef struct acpi_aest_processor_generic { |
| 157 | + u8 *resource; |
| 158 | + |
| 159 | +} acpi_aest_processor_generic; |
| 160 | + |
| 161 | +/* 1: Memory Error */ |
| 162 | + |
| 163 | +typedef struct acpi_aest_memory { |
| 164 | + u32 srat_proximity_domain; |
| 165 | + |
| 166 | +} acpi_aest_memory; |
| 167 | + |
| 168 | +/* 2: Smmu Error */ |
| 169 | + |
| 170 | +typedef struct acpi_aest_smmu { |
| 171 | + u32 iort_node_reference; |
| 172 | + u32 subcomponent_reference; |
| 173 | + |
| 174 | +} acpi_aest_smmu; |
| 175 | + |
| 176 | +/* 3: Vendor Defined */ |
| 177 | + |
| 178 | +typedef struct acpi_aest_vendor { |
| 179 | + u32 acpi_hid; |
| 180 | + u32 acpi_uid; |
| 181 | + u8 vendor_specific_data[16]; |
| 182 | + |
| 183 | +} acpi_aest_vendor; |
| 184 | + |
| 185 | +/* 4: Gic Error */ |
| 186 | + |
| 187 | +typedef struct acpi_aest_gic { |
| 188 | + u32 interface_type; |
| 189 | + u32 instance_id; |
| 190 | + |
| 191 | +} acpi_aest_gic; |
| 192 | + |
| 193 | +/* Values for interface_type above */ |
| 194 | + |
| 195 | +#define ACPI_AEST_GIC_CPU 0 |
| 196 | +#define ACPI_AEST_GIC_DISTRIBUTOR 1 |
| 197 | +#define ACPI_AEST_GIC_REDISTRIBUTOR 2 |
| 198 | +#define ACPI_AEST_GIC_ITS 3 |
| 199 | +#define ACPI_AEST_GIC_RESERVED 4 /* 4 and above are reserved */ |
| 200 | + |
| 201 | +/* Node Interface Structure */ |
| 202 | + |
| 203 | +typedef struct acpi_aest_node_interface { |
| 204 | + u8 type; |
| 205 | + u8 reserved[3]; |
| 206 | + u32 flags; |
| 207 | + u64 address; |
| 208 | + u32 error_record_index; |
| 209 | + u32 error_record_count; |
| 210 | + u64 error_record_implemented; |
| 211 | + u64 error_status_reporting; |
| 212 | + u64 addressing_mode; |
| 213 | + |
| 214 | +} acpi_aest_node_interface; |
| 215 | + |
| 216 | +/* Values for Type field above */ |
| 217 | + |
| 218 | +#define ACPI_AEST_NODE_SYSTEM_REGISTER 0 |
| 219 | +#define ACPI_AEST_NODE_MEMORY_MAPPED 1 |
| 220 | +#define ACPI_AEST_XFACE_RESERVED 2 /* 2 and above are reserved */ |
| 221 | + |
| 222 | +/* Node Interrupt Structure */ |
| 223 | + |
| 224 | +typedef struct acpi_aest_node_interrupt { |
| 225 | + u8 type; |
| 226 | + u8 reserved[2]; |
| 227 | + u8 flags; |
| 228 | + u32 gsiv; |
| 229 | + u8 iort_id; |
| 230 | + u8 reserved1[3]; |
| 231 | + |
| 232 | +} acpi_aest_node_interrupt; |
| 233 | + |
| 234 | +/* Values for Type field above */ |
| 235 | + |
| 236 | +#define ACPI_AEST_NODE_FAULT_HANDLING 0 |
| 237 | +#define ACPI_AEST_NODE_ERROR_RECOVERY 1 |
| 238 | +#define ACPI_AEST_XRUPT_RESERVED 2 /* 2 and above are reserved */ |
| 239 | + |
70 | 240 | /*******************************************************************************
|
71 | 241 | *
|
72 | 242 | * BDAT - BIOS Data ACPI Table
|
|
0 commit comments