1 /** @file 2 GUIDs and definitions used for Common Platform Error Record. 3 4 Copyright (c) 2011 - 2017, Intel Corporation. All rights reserved.<BR> 5 (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR> 6 SPDX-License-Identifier: BSD-2-Clause-Patent 7 8 @par Revision Reference: 9 GUIDs defined in UEFI 2.7 Specification. 10 11 **/ 12 13 #ifndef __CPER_GUID_H__ 14 #define __CPER_GUID_H__ 15 16 #include <libcper/BaseTypes.h> 17 #include <libcper/common-utils.h> 18 19 #ifdef __cplusplus 20 extern "C" { 21 #endif 22 23 #pragma pack(push, 1) 24 25 #define EFI_ERROR_RECORD_SIGNATURE_START SIGNATURE_32('C', 'P', 'E', 'R') 26 #define EFI_ERROR_RECORD_SIGNATURE_END 0xFFFFFFFF 27 28 #define EFI_ERROR_RECORD_REVISION 0x0101 29 30 /// 31 /// Error Severity in Error Record Header and Error Section Descriptor 32 ///@{ 33 #define EFI_GENERIC_ERROR_RECOVERABLE 0x00000000 34 #define EFI_GENERIC_ERROR_FATAL 0x00000001 35 #define EFI_GENERIC_ERROR_CORRECTED 0x00000002 36 #define EFI_GENERIC_ERROR_INFO 0x00000003 37 ///@} 38 39 /// 40 /// The validation bit mask indicates the validity of the following fields 41 /// in Error Record Header. 42 ///@{ 43 #define EFI_ERROR_RECORD_HEADER_PLATFORM_ID_VALID BIT0 44 #define EFI_ERROR_RECORD_HEADER_TIME_STAMP_VALID BIT1 45 #define EFI_ERROR_RECORD_HEADER_PARTITION_ID_VALID BIT2 46 ///@} 47 48 /// 49 /// Timestamp is precise if this bit is set and correlates to the time of the 50 /// error event. 51 /// 52 #define EFI_ERROR_TIME_STAMP_PRECISE BIT0 53 54 /// 55 /// The timestamp correlates to the time when the error information was collected 56 /// by the system software and may not necessarily represent the time of the error 57 /// event. The timestamp contains the local time in BCD format. 58 /// 59 typedef struct { 60 UINT8 Seconds; 61 UINT8 Minutes; 62 UINT8 Hours; 63 UINT8 Flag; 64 UINT8 Day; 65 UINT8 Month; 66 UINT8 Year; 67 UINT8 Century; 68 } EFI_ERROR_TIME_STAMP; 69 70 /// 71 /// GUID value indicating the record association with an error event notification type. 72 ///@{ 73 #define EFI_EVENT_NOTIFICATION_TYEP_CMC_GUID \ 74 { \ 75 0x2DCE8BB1, 0xBDD7, 0x450e, \ 76 { \ 77 0xB9, 0xAD, 0x9C, 0xF4, 0xEB, 0xD4, 0xF8, 0x90 \ 78 } \ 79 } 80 #define EFI_EVENT_NOTIFICATION_TYEP_CPE_GUID \ 81 { \ 82 0x4E292F96, 0xD843, 0x4a55, \ 83 { \ 84 0xA8, 0xC2, 0xD4, 0x81, 0xF2, 0x7E, 0xBE, 0xEE \ 85 } \ 86 } 87 #define EFI_EVENT_NOTIFICATION_TYEP_MCE_GUID \ 88 { \ 89 0xE8F56FFE, 0x919C, 0x4cc5, \ 90 { \ 91 0xBA, 0x88, 0x65, 0xAB, 0xE1, 0x49, 0x13, 0xBB \ 92 } \ 93 } 94 #define EFI_EVENT_NOTIFICATION_TYEP_PCIE_GUID \ 95 { \ 96 0xCF93C01F, 0x1A16, 0x4dfc, \ 97 { \ 98 0xB8, 0xBC, 0x9C, 0x4D, 0xAF, 0x67, 0xC1, 0x04 \ 99 } \ 100 } 101 #define EFI_EVENT_NOTIFICATION_TYEP_INIT_GUID \ 102 { \ 103 0xCC5263E8, 0x9308, 0x454a, \ 104 { \ 105 0x89, 0xD0, 0x34, 0x0B, 0xD3, 0x9B, 0xC9, 0x8E \ 106 } \ 107 } 108 #define EFI_EVENT_NOTIFICATION_TYEP_NMI_GUID \ 109 { \ 110 0x5BAD89FF, 0xB7E6, 0x42c9, \ 111 { \ 112 0x81, 0x4A, 0xCF, 0x24, 0x85, 0xD6, 0xE9, 0x8A \ 113 } \ 114 } 115 #define EFI_EVENT_NOTIFICATION_TYEP_BOOT_GUID \ 116 { \ 117 0x3D61A466, 0xAB40, 0x409a, \ 118 { \ 119 0xA6, 0x98, 0xF3, 0x62, 0xD4, 0x64, 0xB3, 0x8F \ 120 } \ 121 } 122 #define EFI_EVENT_NOTIFICATION_TYEP_DMAR_GUID \ 123 { \ 124 0x667DD791, 0xC6B3, 0x4c27, \ 125 { \ 126 0x8A, 0x6B, 0x0F, 0x8E, 0x72, 0x2D, 0xEB, 0x41 \ 127 } \ 128 } 129 #define EFI_EVENT_NOTIFICATION_TYPE_DMAR_SEA \ 130 { \ 131 0x9A78788A, 0xBBE8, 0x11E4, \ 132 { \ 133 0x80, 0x9E, 0x67, 0x61, 0x1E, 0x5D, 0x46, 0xB0 \ 134 } \ 135 } 136 #define EFI_EVENT_NOTIFICATION_TYPE_DMAR_SEI \ 137 { \ 138 0x5C284C81, 0xB0AE, 0x4E87, \ 139 { \ 140 0xA3, 0x22, 0xB0, 0x4C, 0x85, 0x62, 0x43, 0x23 \ 141 } \ 142 } 143 #define EFI_EVENT_NOTIFICATION_TYPE_DMAR_PEI \ 144 { \ 145 0x09A9D5AC, 0x5204, 0x4214, \ 146 { \ 147 0x96, 0xE5, 0x94, 0x99, 0x2E, 0x75, 0x2B, 0xCD \ 148 } \ 149 } 150 ///@} 151 152 /// 153 /// Error Record Header Flags 154 ///@{ 155 #define EFI_HW_ERROR_FLAGS_RECOVERED 0x00000001 156 #define EFI_HW_ERROR_FLAGS_PREVERR 0x00000002 157 #define EFI_HW_ERROR_FLAGS_SIMULATED 0x00000004 158 ///@} 159 160 /// 161 /// Common error record header 162 /// 163 typedef struct { 164 UINT32 SignatureStart; 165 UINT16 Revision; 166 UINT32 SignatureEnd; 167 UINT16 SectionCount; 168 UINT32 ErrorSeverity; 169 UINT32 ValidationBits; 170 UINT32 RecordLength; 171 EFI_ERROR_TIME_STAMP TimeStamp; 172 EFI_GUID PlatformID; 173 EFI_GUID PartitionID; 174 EFI_GUID CreatorID; 175 EFI_GUID NotificationType; 176 UINT64 RecordID; 177 UINT32 Flags; 178 UINT64 PersistenceInfo; 179 UINT8 Resv1[12]; 180 /// 181 /// An array of SectionCount descriptors for the associated 182 /// sections. The number of valid sections is equivalent to the 183 /// SectionCount. The buffer size of the record may include 184 /// more space to dynamically add additional Section 185 /// Descriptors to the error record. 186 /// 187 } EFI_COMMON_ERROR_RECORD_HEADER; 188 189 #define EFI_ERROR_SECTION_REVISION 0x0100 190 191 /// 192 /// Validity Fields in Error Section Descriptor. 193 /// 194 #define EFI_ERROR_SECTION_FRU_ID_VALID BIT0 195 #define EFI_ERROR_SECTION_FRU_STRING_VALID BIT1 196 197 /// 198 /// Flag field contains information that describes the error section 199 /// in Error Section Descriptor. 200 /// 201 #define EFI_ERROR_SECTION_FLAGS_PRIMARY BIT0 202 #define EFI_ERROR_SECTION_FLAGS_CONTAINMENT_WARNING BIT1 203 #define EFI_ERROR_SECTION_FLAGS_RESET BIT2 204 #define EFI_ERROR_SECTION_FLAGS_ERROR_THRESHOLD_EXCEEDED BIT3 205 #define EFI_ERROR_SECTION_FLAGS_RESOURCE_NOT_ACCESSIBLE BIT4 206 #define EFI_ERROR_SECTION_FLAGS_LATENT_ERROR BIT5 207 208 /// 209 /// Error Sectition Type GUIDs in Error Section Descriptor 210 ///@{ 211 #define EFI_ERROR_SECTION_PROCESSOR_GENERIC_GUID \ 212 { \ 213 0x9876ccad, 0x47b4, 0x4bdb, \ 214 { \ 215 0xb6, 0x5e, 0x16, 0xf1, 0x93, 0xc4, 0xf3, 0xdb \ 216 } \ 217 } 218 #define EFI_ERROR_SECTION_PROCESSOR_SPECIFIC_GUID \ 219 { \ 220 0xdc3ea0b0, 0xa144, 0x4797, \ 221 { \ 222 0xb9, 0x5b, 0x53, 0xfa, 0x24, 0x2b, 0x6e, 0x1d \ 223 } \ 224 } 225 #define EFI_ERROR_SECTION_PROCESSOR_SPECIFIC_IA32X64_GUID \ 226 { \ 227 0xdc3ea0b0, 0xa144, 0x4797, \ 228 { \ 229 0xb9, 0x5b, 0x53, 0xfa, 0x24, 0x2b, 0x6e, 0x1d \ 230 } \ 231 } 232 #define EFI_ERROR_SECTION_PROCESSOR_SPECIFIC_ARM_GUID \ 233 { \ 234 0xe19e3d16, 0xbc11, 0x11e4, \ 235 { \ 236 0x9c, 0xaa, 0xc2, 0x05, 0x1d, 0x5d, 0x46, 0xb0 \ 237 } \ 238 } 239 #define EFI_ERROR_SECTION_PLATFORM_MEMORY_GUID \ 240 { \ 241 0xa5bc1114, 0x6f64, 0x4ede, \ 242 { \ 243 0xb8, 0x63, 0x3e, 0x83, 0xed, 0x7c, 0x83, 0xb1 \ 244 } \ 245 } 246 #define EFI_ERROR_SECTION_PLATFORM_MEMORY2_GUID \ 247 { \ 248 0x61EC04FC, 0x48E6, 0xD813, \ 249 { \ 250 0x25, 0xC9, 0x8D, 0xAA, 0x44, 0x75, 0x0B, 0x12 \ 251 } \ 252 } 253 #define EFI_ERROR_SECTION_PCIE_GUID \ 254 { \ 255 0xd995e954, 0xbbc1, 0x430f, \ 256 { \ 257 0xad, 0x91, 0xb4, 0x4d, 0xcb, 0x3c, 0x6f, 0x35 \ 258 } \ 259 } 260 #define EFI_ERROR_SECTION_FW_ERROR_RECORD_GUID \ 261 { \ 262 0x81212a96, 0x09ed, 0x4996, \ 263 { \ 264 0x94, 0x71, 0x8d, 0x72, 0x9c, 0x8e, 0x69, 0xed \ 265 } \ 266 } 267 #define EFI_ERROR_SECTION_PCI_PCIX_BUS_GUID \ 268 { \ 269 0xc5753963, 0x3b84, 0x4095, \ 270 { \ 271 0xbf, 0x78, 0xed, 0xda, 0xd3, 0xf9, 0xc9, 0xdd \ 272 } \ 273 } 274 #define EFI_ERROR_SECTION_PCI_DEVICE_GUID \ 275 { \ 276 0xeb5e4685, 0xca66, 0x4769, \ 277 { \ 278 0xb6, 0xa2, 0x26, 0x06, 0x8b, 0x00, 0x13, 0x26 \ 279 } \ 280 } 281 #define EFI_ERROR_SECTION_DMAR_GENERIC_GUID \ 282 { \ 283 0x5b51fef7, 0xc79d, 0x4434, \ 284 { \ 285 0x8f, 0x1b, 0xaa, 0x62, 0xde, 0x3e, 0x2c, 0x64 \ 286 } \ 287 } 288 #define EFI_ERROR_SECTION_DIRECTED_IO_DMAR_GUID \ 289 { \ 290 0x71761d37, 0x32b2, 0x45cd, \ 291 { \ 292 0xa7, 0xd0, 0xb0, 0xfe, 0xdd, 0x93, 0xe8, 0xcf \ 293 } \ 294 } 295 #define EFI_ERROR_SECTION_IOMMU_DMAR_GUID \ 296 { \ 297 0x036f84e1, 0x7f37, 0x428c, \ 298 { \ 299 0xa7, 0x9e, 0x57, 0x5f, 0xdf, 0xaa, 0x84, 0xec \ 300 } \ 301 } 302 #define EFI_ERROR_SECTION_AMPERE_SPECIFIC_GUID \ 303 { \ 304 0x2826cc9f, 0x448c, 0x4c2b, \ 305 { \ 306 0x86, 0xb6, 0xa9, 0x53, 0x94, 0xb7, 0xef, 0x33 \ 307 } \ 308 } 309 ///@} 310 311 /// 312 /// Error Section Descriptor 313 /// 314 typedef struct { 315 UINT32 SectionOffset; 316 UINT32 SectionLength; 317 UINT16 Revision; 318 UINT8 SecValidMask; 319 UINT8 Resv1; 320 UINT32 SectionFlags; 321 EFI_GUID SectionType; 322 EFI_GUID FruId; 323 UINT32 Severity; 324 CHAR8 FruString[20]; 325 } EFI_ERROR_SECTION_DESCRIPTOR; 326 327 /// 328 /// The validation bit mask indicates whether or not each of the following fields are 329 /// valid in Proessor Generic Error section. 330 ///@{ 331 #define EFI_GENERIC_ERROR_PROC_TYPE_VALID BIT0 332 #define EFI_GENERIC_ERROR_PROC_ISA_VALID BIT1 333 #define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_VALID BIT2 334 #define EFI_GENERIC_ERROR_PROC_OPERATION_VALID BIT3 335 #define EFI_GENERIC_ERROR_PROC_FLAGS_VALID BIT4 336 #define EFI_GENERIC_ERROR_PROC_LEVEL_VALID BIT5 337 #define EFI_GENERIC_ERROR_PROC_VERSION_VALID BIT6 338 #define EFI_GENERIC_ERROR_PROC_BRAND_VALID BIT7 339 #define EFI_GENERIC_ERROR_PROC_ID_VALID BIT8 340 #define EFI_GENERIC_ERROR_PROC_TARGET_ADDR_VALID BIT9 341 #define EFI_GENERIC_ERROR_PROC_REQUESTER_ID_VALID BIT10 342 #define EFI_GENERIC_ERROR_PROC_RESPONDER_ID_VALID BIT11 343 #define EFI_GENERIC_ERROR_PROC_INST_IP_VALID BIT12 344 ///@} 345 346 /// 347 /// The type of the processor architecture in Proessor Generic Error section. 348 ///@{ 349 #define EFI_GENERIC_ERROR_PROC_TYPE_IA32_X64 0x00 350 #define EFI_GENERIC_ERROR_PROC_TYPE_IA64 0x01 351 #define EFI_GENERIC_ERROR_PROC_TYPE_ARM 0x02 352 ///@} 353 354 /// 355 /// The type of the instruction set executing when the error occurred in Proessor 356 /// Generic Error section. 357 ///@{ 358 #define EFI_GENERIC_ERROR_PROC_ISA_IA32 0x00 359 #define EFI_GENERIC_ERROR_PROC_ISA_IA64 0x01 360 #define EFI_GENERIC_ERROR_PROC_ISA_X64 0x02 361 #define EFI_GENERIC_ERROR_PROC_ISA_ARM_A32_T32 0x03 362 #define EFI_GENERIC_ERROR_PROC_ISA_ARM_A64 0x04 363 ///@} 364 365 /// 366 /// The type of error that occurred in Proessor Generic Error section. 367 ///@{ 368 #define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_UNKNOWN 0x00 369 #define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_CACHE 0x01 370 #define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_TLB 0x02 371 #define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_BUS 0x04 372 #define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_MICRO_ARCH 0x08 373 ///@} 374 375 /// 376 /// The type of operation in Proessor Generic Error section. 377 ///@{ 378 #define EFI_GENERIC_ERROR_PROC_OPERATION_GENERIC 0x00 379 #define EFI_GENERIC_ERROR_PROC_OPERATION_DATA_READ 0x01 380 #define EFI_GENERIC_ERROR_PROC_OPERATION_DATA_WRITE 0x02 381 #define EFI_GENERIC_ERROR_PROC_OPERATION_INSTRUCTION_EXEC 0x03 382 ///@} 383 384 /// 385 /// Flags bit mask indicates additional information about the error in Proessor Generic 386 /// Error section 387 ///@{ 388 #define EFI_GENERIC_ERROR_PROC_FLAGS_RESTARTABLE BIT0 389 #define EFI_GENERIC_ERROR_PROC_FLAGS_PRECISE_IP BIT1 390 #define EFI_GENERIC_ERROR_PROC_FLAGS_OVERFLOW BIT2 391 #define EFI_GENERIC_ERROR_PROC_FLAGS_CORRECTED BIT3 392 ///@} 393 394 /// 395 /// Processor Generic Error Section 396 /// describes processor reported hardware errors for logical processors in the system. 397 /// 398 typedef struct { 399 UINT64 ValidFields; 400 UINT8 Type; 401 UINT8 Isa; 402 UINT8 ErrorType; 403 UINT8 Operation; 404 UINT8 Flags; 405 UINT8 Level; 406 UINT16 Resv1; 407 UINT64 VersionInfo; 408 CHAR8 BrandString[128]; 409 UINT64 ApicId; 410 UINT64 TargetAddr; 411 UINT64 RequestorId; 412 UINT64 ResponderId; 413 UINT64 InstructionIP; 414 } EFI_PROCESSOR_GENERIC_ERROR_DATA; 415 416 /// 417 /// IA32 and x64 Specific definitions. 418 /// 419 420 /// 421 /// GUID value indicating the type of Processor Error Information structure 422 /// in IA32/X64 Processor Error Information Structure. 423 ///@{ 424 #define EFI_IA32_X64_ERROR_TYPE_CACHE_CHECK_GUID \ 425 { \ 426 0xA55701F5, 0xE3EF, 0x43de, \ 427 { \ 428 0xAC, 0x72, 0x24, 0x9B, 0x57, 0x3F, 0xAD, 0x2C \ 429 } \ 430 } 431 #define EFI_IA32_X64_ERROR_TYPE_TLB_CHECK_GUID \ 432 { \ 433 0xFC06B535, 0x5E1F, 0x4562, \ 434 { \ 435 0x9F, 0x25, 0x0A, 0x3B, 0x9A, 0xDB, 0x63, 0xC3 \ 436 } \ 437 } 438 #define EFI_IA32_X64_ERROR_TYPE_BUS_CHECK_GUID \ 439 { \ 440 0x1CF3F8B3, 0xC5B1, 0x49a2, \ 441 { \ 442 0xAA, 0x59, 0x5E, 0xEF, 0x92, 0xFF, 0xA6, 0x3C \ 443 } \ 444 } 445 #define EFI_IA32_X64_ERROR_TYPE_MS_CHECK_GUID \ 446 { \ 447 0x48AB7F57, 0xDC34, 0x4f6c, \ 448 { \ 449 0xA7, 0xD3, 0xB0, 0xB5, 0xB0, 0xA7, 0x43, 0x14 \ 450 } \ 451 } 452 extern EFI_GUID gEfiIa32x64ErrorTypeCacheCheckGuid; 453 extern EFI_GUID gEfiIa32x64ErrorTypeTlbCheckGuid; 454 extern EFI_GUID gEfiIa32x64ErrorTypeBusCheckGuid; 455 extern EFI_GUID gEfiIa32x64ErrorTypeMsCheckGuid; 456 457 ///@} 458 459 /// 460 /// The validation bit mask indicates which fields in the IA32/X64 Processor 461 /// Error Record structure are valid. 462 ///@{ 463 #define EFI_IA32_X64_PROCESSOR_ERROR_APIC_ID_VALID BIT0 464 #define EFI_IA32_X64_PROCESSOR_ERROR_CPU_ID_INFO_VALID BIT1 465 ///@} 466 467 /// 468 /// IA32/X64 Processor Error Record 469 /// 470 typedef struct { 471 UINT64 ValidFields; 472 UINT64 ApicId; 473 UINT8 CpuIdInfo[48]; 474 } EFI_IA32_X64_PROCESSOR_ERROR_RECORD; 475 476 /// 477 /// The validation bit mask indicates which fields in the Cache Check structure 478 /// are valid. 479 ///@{ 480 #define EFI_CACHE_CHECK_TRANSACTION_TYPE_VALID BIT0 481 #define EFI_CACHE_CHECK_OPERATION_VALID BIT1 482 #define EFI_CACHE_CHECK_LEVEL_VALID BIT2 483 #define EFI_CACHE_CHECK_CONTEXT_CORRUPT_VALID BIT3 484 #define EFI_CACHE_CHECK_UNCORRECTED_VALID BIT4 485 #define EFI_CACHE_CHECK_PRECISE_IP_VALID BIT5 486 #define EFI_CACHE_CHECK_RESTARTABLE_VALID BIT6 487 #define EFI_CACHE_CHECK_OVERFLOW_VALID BIT7 488 ///@} 489 490 /// 491 /// Type of cache error in the Cache Check structure 492 ///@{ 493 #define EFI_CACHE_CHECK_ERROR_TYPE_INSTRUCTION 0 494 #define EFI_CACHE_CHECK_ERROR_TYPE_DATA_ACCESS 1 495 #define EFI_CACHE_CHECK_ERROR_TYPE_GENERIC 2 496 ///@} 497 498 /// 499 /// Type of cache operation that caused the error in the Cache 500 /// Check structure 501 ///@{ 502 #define EFI_CACHE_CHECK_OPERATION_TYPE_GENERIC 0 503 #define EFI_CACHE_CHECK_OPERATION_TYPE_GENERIC_READ 1 504 #define EFI_CACHE_CHECK_OPERATION_TYPE_GENERIC_WRITE 2 505 #define EFI_CACHE_CHECK_OPERATION_TYPE_DATA_READ 3 506 #define EFI_CACHE_CHECK_OPERATION_TYPE_DATA_WRITE 4 507 #define EFI_CACHE_CHECK_OPERATION_TYPE_INSTRUCTION_FETCH 5 508 #define EFI_CACHE_CHECK_OPERATION_TYPE_PREFETCH 6 509 #define EFI_CACHE_CHECK_OPERATION_TYPE_EVICTION 7 510 #define EFI_CACHE_CHECK_OPERATION_TYPE_SNOOP 8 511 ///@} 512 513 /// 514 /// IA32/X64 Cache Check Structure 515 /// 516 typedef struct { 517 UINT64 ValidFields : 16; 518 UINT64 TransactionType : 2; 519 UINT64 Operation : 4; 520 UINT64 Level : 3; 521 UINT64 ContextCorrupt : 1; 522 UINT64 ErrorUncorrected : 1; 523 UINT64 PreciseIp : 1; 524 UINT64 RestartableIp : 1; 525 UINT64 Overflow : 1; 526 UINT64 Resv1 : 34; 527 } EFI_IA32_X64_CACHE_CHECK_INFO; 528 529 /// 530 /// The validation bit mask indicates which fields in the TLB Check structure 531 /// are valid. 532 ///@{ 533 #define EFI_TLB_CHECK_TRANSACTION_TYPE_VALID BIT0 534 #define EFI_TLB_CHECK_OPERATION_VALID BIT1 535 #define EFI_TLB_CHECK_LEVEL_VALID BIT2 536 #define EFI_TLB_CHECK_CONTEXT_CORRUPT_VALID BIT3 537 #define EFI_TLB_CHECK_UNCORRECTED_VALID BIT4 538 #define EFI_TLB_CHECK_PRECISE_IP_VALID BIT5 539 #define EFI_TLB_CHECK_RESTARTABLE_VALID BIT6 540 #define EFI_TLB_CHECK_OVERFLOW_VALID BIT7 541 ///@} 542 543 /// 544 /// Type of cache error in the TLB Check structure 545 ///@{ 546 #define EFI_TLB_CHECK_ERROR_TYPE_INSTRUCTION 0 547 #define EFI_TLB_CHECK_ERROR_TYPE_DATA_ACCESS 1 548 #define EFI_TLB_CHECK_ERROR_TYPE_GENERIC 2 549 ///@} 550 551 /// 552 /// Type of cache operation that caused the error in the TLB 553 /// Check structure 554 ///@{ 555 #define EFI_TLB_CHECK_OPERATION_TYPE_GENERIC 0 556 #define EFI_TLB_CHECK_OPERATION_TYPE_GENERIC_READ 1 557 #define EFI_TLB_CHECK_OPERATION_TYPE_GENERIC_WRITE 2 558 #define EFI_TLB_CHECK_OPERATION_TYPE_DATA_READ 3 559 #define EFI_TLB_CHECK_OPERATION_TYPE_DATA_WRITE 4 560 #define EFI_TLB_CHECK_OPERATION_TYPE_INST_FETCH 5 561 #define EFI_TLB_CHECK_OPERATION_TYPE_PREFETCH 6 562 ///@} 563 564 /// 565 /// IA32/X64 TLB Check Structure 566 /// 567 typedef struct { 568 UINT64 ValidFields : 16; 569 UINT64 TransactionType : 2; 570 UINT64 Operation : 4; 571 UINT64 Level : 3; 572 UINT64 ContextCorrupt : 1; 573 UINT64 ErrorUncorrected : 1; 574 UINT64 PreciseIp : 1; 575 UINT64 RestartableIp : 1; 576 UINT64 Overflow : 1; 577 UINT64 Resv1 : 34; 578 } EFI_IA32_X64_TLB_CHECK_INFO; 579 580 /// 581 /// The validation bit mask indicates which fields in the MS Check structure 582 /// are valid. 583 ///@{ 584 #define EFI_BUS_CHECK_TRANSACTION_TYPE_VALID BIT0 585 #define EFI_BUS_CHECK_OPERATION_VALID BIT1 586 #define EFI_BUS_CHECK_LEVEL_VALID BIT2 587 #define EFI_BUS_CHECK_CONTEXT_CORRUPT_VALID BIT3 588 #define EFI_BUS_CHECK_UNCORRECTED_VALID BIT4 589 #define EFI_BUS_CHECK_PRECISE_IP_VALID BIT5 590 #define EFI_BUS_CHECK_RESTARTABLE_VALID BIT6 591 #define EFI_BUS_CHECK_OVERFLOW_VALID BIT7 592 #define EFI_BUS_CHECK_PARTICIPATION_TYPE_VALID BIT8 593 #define EFI_BUS_CHECK_TIME_OUT_VALID BIT9 594 #define EFI_BUS_CHECK_ADDRESS_SPACE_VALID BIT10 595 ///@} 596 597 /// 598 /// Type of cache error in the Bus Check structure 599 ///@{ 600 #define EFI_BUS_CHECK_ERROR_TYPE_INSTRUCTION 0 601 #define EFI_BUS_CHECK_ERROR_TYPE_DATA_ACCESS 1 602 #define EFI_BUS_CHECK_ERROR_TYPE_GENERIC 2 603 ///@} 604 605 /// 606 /// Type of cache operation that caused the error in the Bus 607 /// Check structure 608 ///@{ 609 #define EFI_BUS_CHECK_OPERATION_TYPE_GENERIC 0 610 #define EFI_BUS_CHECK_OPERATION_TYPE_GENERIC_READ 1 611 #define EFI_BUS_CHECK_OPERATION_TYPE_GENERIC_WRITE 2 612 #define EFI_BUS_CHECK_OPERATION_TYPE_DATA_READ 3 613 #define EFI_BUS_CHECK_OPERATION_TYPE_DATA_WRITE 4 614 #define EFI_BUS_CHECK_OPERATION_TYPE_INST_FETCH 5 615 #define EFI_BUS_CHECK_OPERATION_TYPE_PREFETCH 6 616 ///@} 617 618 /// 619 /// Type of Participation 620 ///@{ 621 #define EFI_BUS_CHECK_PARTICIPATION_TYPE_REQUEST 0 622 #define EFI_BUS_CHECK_PARTICIPATION_TYPE_RESPONDED 1 623 #define EFI_BUS_CHECK_PARTICIPATION_TYPE_OBSERVED 2 624 #define EFI_BUS_CHECK_PARTICIPATION_TYPE_GENERIC 3 625 ///@} 626 627 /// 628 /// Type of Address Space 629 ///@{ 630 #define EFI_BUS_CHECK_ADDRESS_SPACE_TYPE_MEMORY 0 631 #define EFI_BUS_CHECK_ADDRESS_SPACE_TYPE_RESERVED 1 632 #define EFI_BUS_CHECK_ADDRESS_SPACE_TYPE_IO 2 633 #define EFI_BUS_CHECK_ADDRESS_SPACE_TYPE_OTHER 3 634 ///@} 635 636 /// 637 /// IA32/X64 Bus Check Structure 638 /// 639 typedef struct { 640 UINT64 ValidFields : 16; 641 UINT64 TransactionType : 2; 642 UINT64 Operation : 4; 643 UINT64 Level : 3; 644 UINT64 ContextCorrupt : 1; 645 UINT64 ErrorUncorrected : 1; 646 UINT64 PreciseIp : 1; 647 UINT64 RestartableIp : 1; 648 UINT64 Overflow : 1; 649 UINT64 ParticipationType : 2; 650 UINT64 TimeOut : 1; 651 UINT64 AddressSpace : 2; 652 UINT64 Resv1 : 29; 653 } EFI_IA32_X64_BUS_CHECK_INFO; 654 655 /// 656 /// The validation bit mask indicates which fields in the MS Check structure 657 /// are valid. 658 ///@{ 659 #define EFI_MS_CHECK_ERROR_TYPE_VALID BIT0 660 #define EFI_MS_CHECK_CONTEXT_CORRUPT_VALID BIT1 661 #define EFI_MS_CHECK_UNCORRECTED_VALID BIT2 662 #define EFI_MS_CHECK_PRECISE_IP_VALID BIT3 663 #define EFI_MS_CHECK_RESTARTABLE_VALID BIT4 664 #define EFI_MS_CHECK_OVERFLOW_VALID BIT5 665 ///@} 666 667 /// 668 /// Error type identifies the operation that caused the error. 669 ///@{ 670 #define EFI_MS_CHECK_ERROR_TYPE_NO 0 671 #define EFI_MS_CHECK_ERROR_TYPE_UNCLASSIFIED 1 672 #define EFI_MS_CHECK_ERROR_TYPE_MICROCODE_PARITY 2 673 #define EFI_MS_CHECK_ERROR_TYPE_EXTERNAL 3 674 #define EFI_MS_CHECK_ERROR_TYPE_FRC 4 675 #define EFI_MS_CHECK_ERROR_TYPE_INTERNAL_UNCLASSIFIED 5 676 ///@} 677 678 /// 679 /// IA32/X64 MS Check Field Description 680 /// 681 typedef struct { 682 UINT64 ValidFields : 16; 683 UINT64 ErrorType : 3; 684 UINT64 ContextCorrupt : 1; 685 UINT64 ErrorUncorrected : 1; 686 UINT64 PreciseIp : 1; 687 UINT64 RestartableIp : 1; 688 UINT64 Overflow : 1; 689 UINT64 Resv1 : 40; 690 } EFI_IA32_X64_MS_CHECK_INFO; 691 692 /// 693 /// IA32/X64 Check Information Item 694 /// 695 typedef union { 696 EFI_IA32_X64_CACHE_CHECK_INFO CacheCheck; 697 EFI_IA32_X64_TLB_CHECK_INFO TlbCheck; 698 EFI_IA32_X64_BUS_CHECK_INFO BusCheck; 699 EFI_IA32_X64_MS_CHECK_INFO MsCheck; 700 UINT64 Data64; 701 } EFI_IA32_X64_CHECK_INFO_ITEM; 702 703 /// 704 /// The validation bit mask indicates which fields in the IA32/X64 Processor Error 705 /// Information Structure are valid. 706 ///@{ 707 #define EFI_IA32_X64_ERROR_PROC_CHECK_INFO_VALID BIT0 708 #define EFI_IA32_X64_ERROR_PROC_TARGET_ADDR_VALID BIT1 709 #define EFI_IA32_X64_ERROR_PROC_REQUESTER_ID_VALID BIT2 710 #define EFI_IA32_X64_ERROR_PROC_RESPONDER_ID_VALID BIT3 711 #define EFI_IA32_X64_ERROR_PROC_INST_IP_VALID BIT4 712 ///@} 713 714 /// 715 /// IA32/X64 Processor Error Information Structure 716 /// 717 typedef struct { 718 EFI_GUID ErrorType; 719 UINT64 ValidFields; 720 EFI_IA32_X64_CHECK_INFO_ITEM CheckInfo; 721 UINT64 TargetId; 722 UINT64 RequestorId; 723 UINT64 ResponderId; 724 UINT64 InstructionIP; 725 } EFI_IA32_X64_PROCESS_ERROR_INFO; 726 727 /// 728 /// IA32/X64 Processor Context Information Structure 729 /// 730 typedef struct { 731 UINT16 RegisterType; 732 UINT16 ArraySize; 733 UINT32 MsrAddress; 734 UINT64 MmRegisterAddress; 735 // 736 // This field will provide the contents of the actual registers or raw data. 737 // The number of Registers or size of the raw data reported is determined 738 // by (Array Size / 8) or otherwise specified by the context structure type 739 // definition. 740 // 741 } EFI_IA32_X64_PROCESSOR_CONTEXT_INFO; 742 743 /// 744 /// Register Context Type 745 ///@{ 746 #define EFI_REG_CONTEXT_TYPE_UNCLASSIFIED 0x0000 747 #define EFI_REG_CONTEXT_TYPE_MSR 0x0001 748 #define EFI_REG_CONTEXT_TYPE_IA32 0x0002 749 #define EFI_REG_CONTEXT_TYPE_X64 0x0003 750 #define EFI_REG_CONTEXT_TYPE_FXSAVE 0x0004 751 #define EFI_REG_CONTEXT_TYPE_DR_IA32 0x0005 752 #define EFI_REG_CONTEXT_TYPE_DR_X64 0x0006 753 #define EFI_REG_CONTEXT_TYPE_MEM_MAP 0x0007 754 ///@} 755 756 /// 757 /// IA32 Register State 758 /// 759 typedef struct { 760 UINT32 Eax; 761 UINT32 Ebx; 762 UINT32 Ecx; 763 UINT32 Edx; 764 UINT32 Esi; 765 UINT32 Edi; 766 UINT32 Ebp; 767 UINT32 Esp; 768 UINT16 Cs; 769 UINT16 Ds; 770 UINT16 Ss; 771 UINT16 Es; 772 UINT16 Fs; 773 UINT16 Gs; 774 UINT32 Eflags; 775 UINT32 Eip; 776 UINT32 Cr0; 777 UINT32 Cr1; 778 UINT32 Cr2; 779 UINT32 Cr3; 780 UINT32 Cr4; 781 UINT32 Gdtr[2]; 782 UINT32 Idtr[2]; 783 UINT16 Ldtr; 784 UINT16 Tr; 785 } EFI_CONTEXT_IA32_REGISTER_STATE; 786 787 /// 788 /// X64 Register State 789 /// 790 typedef struct { 791 UINT64 Rax; 792 UINT64 Rbx; 793 UINT64 Rcx; 794 UINT64 Rdx; 795 UINT64 Rsi; 796 UINT64 Rdi; 797 UINT64 Rbp; 798 UINT64 Rsp; 799 UINT64 R8; 800 UINT64 R9; 801 UINT64 R10; 802 UINT64 R11; 803 UINT64 R12; 804 UINT64 R13; 805 UINT64 R14; 806 UINT64 R15; 807 UINT16 Cs; 808 UINT16 Ds; 809 UINT16 Ss; 810 UINT16 Es; 811 UINT16 Fs; 812 UINT16 Gs; 813 UINT32 Resv1; 814 UINT64 Rflags; 815 UINT64 Rip; 816 UINT64 Cr0; 817 UINT64 Cr1; 818 UINT64 Cr2; 819 UINT64 Cr3; 820 UINT64 Cr4; 821 UINT64 Cr8; 822 UINT64 Gdtr[2]; 823 UINT64 Idtr[2]; 824 UINT16 Ldtr; 825 UINT16 Tr; 826 } EFI_CONTEXT_X64_REGISTER_STATE; 827 828 /// 829 /// The validation bit mask indicates each of the following field is in IA32/X64 830 /// Processor Error Section. 831 /// 832 typedef struct { 833 UINT64 ApicIdValid : 1; 834 UINT64 CpuIdInforValid : 1; 835 UINT64 ErrorInfoNum : 6; 836 UINT64 ContextNum : 6; 837 UINT64 Resv1 : 50; 838 } EFI_IA32_X64_VALID_BITS; 839 840 /// 841 /// Error Status Fields 842 /// 843 typedef struct { 844 UINT64 Resv1 : 8; 845 UINT64 Type : 8; 846 UINT64 AddressSignal : 1; ///< Error in Address signals or in Address portion of transaction 847 UINT64 ControlSignal : 1; ///< Error in Control signals or in Control portion of transaction 848 UINT64 DataSignal : 1; ///< Error in Data signals or in Data portion of transaction 849 UINT64 DetectedByResponder : 1; ///< Error detected by responder 850 UINT64 DetectedByRequester : 1; ///< Error detected by requestor 851 UINT64 FirstError : 1; ///< First Error in the sequence - option field 852 UINT64 OverflowNotLogged : 1; ///< Additional errors were not logged due to lack of resources 853 UINT64 Resv2 : 41; 854 } EFI_GENERIC_ERROR_STATUS; 855 856 /// 857 /// CPER Generic Error Codes 858 /// 859 #define CPER_GENERIC_ERROR_TYPES_KEYS \ 860 (int[]) \ 861 { \ 862 1, 16, 4, 5, 6, 7, 8, 9, 17, 18, 19, 20, 21, 22, 23, 24, 25, \ 863 26 \ 864 } 865 #define CPER_GENERIC_ERROR_TYPES_VALUES \ 866 (const char *[]) \ 867 { \ 868 "ERR_INTERNAL", "ERR_BUS", "ERR_MEM", "ERR_TLB", "ERR_CACHE", \ 869 "ERR_FUNCTION", "ERR_SELFTEST", "ERR_FLOW", "ERR_MAP", \ 870 "ERR_IMPROPER", "ERR_UNIMPL", "ERR_LOL", \ 871 "ERR_RESPONSE", "ERR_PARITY", "ERR_PROTOCOL", \ 872 "ERR_ERROR", "ERR_TIMEOUT", "ERR_POISONED" \ 873 } 874 #define CPER_GENERIC_ERROR_TYPES_DESCRIPTIONS \ 875 (const char *[]) \ 876 { \ 877 "Error detected internal to the component.", \ 878 "Error detected in the bus.", \ 879 "Storage error in memory (DRAM).", \ 880 "Storage error in TLB.", "Storage error in cache.", \ 881 "Error in one or more functional units.", \ 882 "Component failed self test.", \ 883 "Overflow or underflow of internal queue.", \ 884 "Virtual address not found on IO-TLB or IO-PDIR.", \ 885 "Improper access error.", \ 886 "Access to a memory address which is not mapped to any component.", \ 887 "Loss of Lockstep error.", \ 888 "Response not associated with a request.", \ 889 "Bus parity error (must also set the A, C, or D bits).", \ 890 "Detection of a protocol error.", \ 891 "Detection of a PATH_ERROR.", \ 892 "Bus operation timeout.", \ 893 "A read was issued to data that has been poisoned." \ 894 } 895 896 /// 897 /// Error Type 898 /// 899 typedef enum { 900 /// 901 /// General Internal errors 902 /// 903 ErrorInternal = 1, 904 ErrorBus = 16, 905 /// 906 /// Component Internal errors 907 /// 908 ErrorMemStorage = 4, // Error in memory device 909 ErrorTlbStorage = 5, // TLB error in cache 910 ErrorCacheStorage = 6, 911 ErrorFunctionalUnit = 7, 912 ErrorSelftest = 8, 913 ErrorOverflow = 9, 914 /// 915 /// Bus internal errors 916 /// 917 ErrorVirtualMap = 17, 918 ErrorAccessInvalid = 18, // Improper access 919 ErrorUnimplAccess = 19, // Unimplemented memory access 920 ErrorLossOfLockstep = 20, 921 ErrorResponseInvalid = 21, // Response not associated with request 922 ErrorParity = 22, 923 ErrorProtocol = 23, 924 ErrorPath = 24, // Detected path error 925 ErrorTimeout = 25, // Bus timeout 926 ErrorPoisoned = 26 // Read data poisoned 927 } EFI_GENERIC_ERROR_STATUS_ERROR_TYPE; 928 929 /// 930 /// Validation bit mask indicates which fields in the memory error record are valid 931 /// in Memory Error section 932 ///@{ 933 #define EFI_PLATFORM_MEMORY_ERROR_STATUS_VALID BIT0 934 #define EFI_PLATFORM_MEMORY_PHY_ADDRESS_VALID BIT1 935 #define EFI_PLATFORM_MEMORY_PHY_ADDRESS_MASK_VALID BIT2 936 #define EFI_PLATFORM_MEMORY_NODE_VALID BIT3 937 #define EFI_PLATFORM_MEMORY_CARD_VALID BIT4 938 #define EFI_PLATFORM_MEMORY_MODULE_VALID BIT5 939 #define EFI_PLATFORM_MEMORY_BANK_VALID BIT6 940 #define EFI_PLATFORM_MEMORY_DEVICE_VALID BIT7 941 #define EFI_PLATFORM_MEMORY_ROW_VALID BIT8 942 #define EFI_PLATFORM_MEMORY_COLUMN_VALID BIT9 943 #define EFI_PLATFORM_MEMORY_BIT_POS_VALID BIT10 944 #define EFI_PLATFORM_MEMORY_REQUESTOR_ID_VALID BIT11 945 #define EFI_PLATFORM_MEMORY_RESPONDER_ID_VALID BIT12 946 #define EFI_PLATFORM_MEMORY_TARGET_ID_VALID BIT13 947 #define EFI_PLATFORM_MEMORY_ERROR_TYPE_VALID BIT14 948 #define EFI_PLATFORM_MEMORY_ERROR_RANK_NUM_VALID BIT15 949 #define EFI_PLATFORM_MEMORY_ERROR_CARD_HANDLE_VALID BIT16 950 #define EFI_PLATFORM_MEMORY_ERROR_MODULE_HANDLE_VALID BIT17 951 #define EFI_PLATFORM_MEMORY_ERROR_EXTENDED_ROW_BIT_16_17_VALID BIT18 952 #define EFI_PLATFORM_MEMORY_ERROR_BANK_GROUP_VALID BIT19 953 #define EFI_PLATFORM_MEMORY_ERROR_BANK_ADDRESS_VALID BIT20 954 #define EFI_PLATFORM_MEMORY_ERROR_CHIP_IDENTIFICATION_VALID BIT21 955 ///@} 956 957 /// 958 /// Memory Error Type identifies the type of error that occurred in Memory 959 /// Error section 960 ///@{ 961 #define EFI_PLATFORM_MEMORY_ERROR_UNKNOWN 0x00 962 #define EFI_PLATFORM_MEMORY_ERROR_NONE 0x01 963 #define EFI_PLATFORM_MEMORY_ERROR_SINGLEBIT_ECC 0x02 964 #define EFI_PLATFORM_MEMORY_ERROR_MLTIBIT_ECC 0x03 965 #define EFI_PLATFORM_MEMORY_ERROR_SINGLESYMBOLS_CHIPKILL 0x04 966 #define EFI_PLATFORM_MEMORY_ERROR_MULTISYMBOL_CHIPKILL 0x05 967 #define EFI_PLATFORM_MEMORY_ERROR_MATER_ABORT 0x06 968 #define EFI_PLATFORM_MEMORY_ERROR_TARGET_ABORT 0x07 969 #define EFI_PLATFORM_MEMORY_ERROR_PARITY 0x08 970 #define EFI_PLATFORM_MEMORY_ERROR_WDT 0x09 971 #define EFI_PLATFORM_MEMORY_ERROR_INVALID_ADDRESS 0x0A 972 #define EFI_PLATFORM_MEMORY_ERROR_MIRROR_FAILED 0x0B 973 #define EFI_PLATFORM_MEMORY_ERROR_SPARING 0x0C 974 #define EFI_PLATFORM_MEMORY_ERROR_SCRUB_CORRECTED 0x0D 975 #define EFI_PLATFORM_MEMORY_ERROR_SCRUB_UNCORRECTED 0x0E 976 #define EFI_PLATFORM_MEMORY_ERROR_MEMORY_MAP_EVENT 0x0F 977 ///@} 978 979 /// 980 /// Memory Error Section 981 /// 982 typedef struct { 983 UINT64 ValidFields; 984 EFI_GENERIC_ERROR_STATUS ErrorStatus; 985 UINT64 PhysicalAddress; // Error physical address 986 UINT64 PhysicalAddressMask; // Grnaularity 987 UINT16 Node; // Node # 988 UINT16 Card; 989 UINT16 ModuleRank; // Module or Rank# 990 UINT16 Bank; 991 UINT16 Device; 992 UINT16 Row; 993 UINT16 Column; 994 UINT16 BitPosition; 995 UINT64 RequestorId; 996 UINT64 ResponderId; 997 UINT64 TargetId; 998 UINT8 ErrorType; 999 UINT8 Extended; 1000 UINT16 RankNum; 1001 UINT16 CardHandle; 1002 UINT16 ModuleHandle; 1003 } EFI_PLATFORM_MEMORY_ERROR_DATA; 1004 1005 /// 1006 /// Validation bit mask indicates which fields in the memory error record 2 are valid 1007 /// in Memory Error section 2 1008 ///@{ 1009 #define EFI_PLATFORM_MEMORY2_ERROR_STATUS_VALID BIT0 1010 #define EFI_PLATFORM_MEMORY2_PHY_ADDRESS_VALID BIT1 1011 #define EFI_PLATFORM_MEMORY2_PHY_ADDRESS_MASK_VALID BIT2 1012 #define EFI_PLATFORM_MEMORY2_NODE_VALID BIT3 1013 #define EFI_PLATFORM_MEMORY2_CARD_VALID BIT4 1014 #define EFI_PLATFORM_MEMORY2_MODULE_VALID BIT5 1015 #define EFI_PLATFORM_MEMORY2_BANK_VALID BIT6 1016 #define EFI_PLATFORM_MEMORY2_DEVICE_VALID BIT7 1017 #define EFI_PLATFORM_MEMORY2_ROW_VALID BIT8 1018 #define EFI_PLATFORM_MEMORY2_COLUMN_VALID BIT9 1019 #define EFI_PLATFORM_MEMORY2_RANK_VALID BIT10 1020 #define EFI_PLATFORM_MEMORY2_BIT_POS_VALID BIT11 1021 #define EFI_PLATFORM_MEMORY2_CHIP_ID_VALID BIT12 1022 #define EFI_PLATFORM_MEMORY2_MEMORY_ERROR_TYPE_VALID BIT13 1023 #define EFI_PLATFORM_MEMORY2_STATUS_VALID BIT14 1024 #define EFI_PLATFORM_MEMORY2_REQUESTOR_ID_VALID BIT15 1025 #define EFI_PLATFORM_MEMORY2_RESPONDER_ID_VALID BIT16 1026 #define EFI_PLATFORM_MEMORY2_TARGET_ID_VALID BIT17 1027 #define EFI_PLATFORM_MEMORY2_CARD_HANDLE_VALID BIT18 1028 #define EFI_PLATFORM_MEMORY2_MODULE_HANDLE_VALID BIT19 1029 #define EFI_PLATFORM_MEMORY2_BANK_GROUP_VALID BIT20 1030 #define EFI_PLATFORM_MEMORY2_BANK_ADDRESS_VALID BIT21 1031 ///@} 1032 1033 /// 1034 /// Memory Error Type identifies the type of error that occurred in Memory 1035 /// Error section 2 1036 ///@{ 1037 #define EFI_PLATFORM_MEMORY2_ERROR_UNKNOWN 0x00 1038 #define EFI_PLATFORM_MEMORY2_ERROR_NONE 0x01 1039 #define EFI_PLATFORM_MEMORY2_ERROR_SINGLEBIT_ECC 0x02 1040 #define EFI_PLATFORM_MEMORY2_ERROR_MLTIBIT_ECC 0x03 1041 #define EFI_PLATFORM_MEMORY2_ERROR_SINGLESYMBOL_CHIPKILL 0x04 1042 #define EFI_PLATFORM_MEMORY2_ERROR_MULTISYMBOL_CHIPKILL 0x05 1043 #define EFI_PLATFORM_MEMORY2_ERROR_MASTER_ABORT 0x06 1044 #define EFI_PLATFORM_MEMORY2_ERROR_TARGET_ABORT 0x07 1045 #define EFI_PLATFORM_MEMORY2_ERROR_PARITY 0x08 1046 #define EFI_PLATFORM_MEMORY2_ERROR_WDT 0x09 1047 #define EFI_PLATFORM_MEMORY2_ERROR_INVALID_ADDRESS 0x0A 1048 #define EFI_PLATFORM_MEMORY2_ERROR_MIRROR_BROKEN 0x0B 1049 #define EFI_PLATFORM_MEMORY2_ERROR_MEMORY_SPARING 0x0C 1050 #define EFI_PLATFORM_MEMORY2_ERROR_SCRUB_CORRECTED 0x0D 1051 #define EFI_PLATFORM_MEMORY2_ERROR_SCRUB_UNCORRECTED 0x0E 1052 #define EFI_PLATFORM_MEMORY2_ERROR_MEMORY_MAP_EVENT 0x0F 1053 ///@} 1054 1055 /// 1056 /// Memory Error Section 2 1057 /// 1058 typedef struct { 1059 UINT64 ValidFields; 1060 EFI_GENERIC_ERROR_STATUS ErrorStatus; 1061 UINT64 PhysicalAddress; // Error physical address 1062 UINT64 PhysicalAddressMask; // Grnaularity 1063 UINT16 Node; // Node # 1064 UINT16 Card; 1065 UINT16 Module; // Module or Rank# 1066 UINT16 Bank; 1067 UINT32 Device; 1068 UINT32 Row; 1069 UINT32 Column; 1070 UINT32 Rank; 1071 UINT32 BitPosition; 1072 UINT8 ChipId; 1073 UINT8 MemErrorType; 1074 UINT8 Status; 1075 UINT8 Reserved; 1076 UINT64 RequestorId; 1077 UINT64 ResponderId; 1078 UINT64 TargetId; 1079 UINT32 CardHandle; 1080 UINT32 ModuleHandle; 1081 } EFI_PLATFORM_MEMORY2_ERROR_DATA; 1082 1083 /// 1084 /// Validation bits mask indicates which of the following fields is valid 1085 /// in PCI Express Error Record. 1086 ///@{ 1087 #define EFI_PCIE_ERROR_PORT_TYPE_VALID BIT0 1088 #define EFI_PCIE_ERROR_VERSION_VALID BIT1 1089 #define EFI_PCIE_ERROR_COMMAND_STATUS_VALID BIT2 1090 #define EFI_PCIE_ERROR_DEVICE_ID_VALID BIT3 1091 #define EFI_PCIE_ERROR_SERIAL_NO_VALID BIT4 1092 #define EFI_PCIE_ERROR_BRIDGE_CRL_STS_VALID BIT5 1093 #define EFI_PCIE_ERROR_CAPABILITY_INFO_VALID BIT6 1094 #define EFI_PCIE_ERROR_AER_INFO_VALID BIT7 1095 ///@} 1096 1097 /// 1098 /// PCIe Device/Port Type as defined in the PCI Express capabilities register 1099 ///@{ 1100 #define EFI_PCIE_ERROR_PORT_PCIE_ENDPOINT 0x00000000 1101 #define EFI_PCIE_ERROR_PORT_PCI_ENDPOINT 0x00000001 1102 #define EFI_PCIE_ERROR_PORT_ROOT_PORT 0x00000004 1103 #define EFI_PCIE_ERROR_PORT_UPSWITCH_PORT 0x00000005 1104 #define EFI_PCIE_ERROR_PORT_DOWNSWITCH_PORT 0x00000006 1105 #define EFI_PCIE_ERROR_PORT_PCIE_TO_PCI_BRIDGE 0x00000007 1106 #define EFI_PCIE_ERROR_PORT_PCI_TO_PCIE_BRIDGE 0x00000008 1107 #define EFI_PCIE_ERROR_PORT_ROOT_INT_ENDPOINT 0x00000009 1108 #define EFI_PCIE_ERROR_PORT_ROOT_EVENT_COLLECTOR 0x0000000A 1109 ///@} 1110 1111 /// 1112 /// PCI Slot number 1113 /// 1114 typedef struct { 1115 UINT16 Resv1 : 3; 1116 UINT16 Number : 13; 1117 } EFI_GENERIC_ERROR_PCI_SLOT; 1118 1119 /// 1120 /// PCIe Root Port PCI/bridge PCI compatible device number and 1121 /// bus number information to uniquely identify the root port or 1122 /// bridge. Default values for both the bus numbers is zero. 1123 /// 1124 typedef struct { 1125 UINT16 VendorId; 1126 UINT16 DeviceId; 1127 UINT8 ClassCode[3]; 1128 UINT8 Function; 1129 UINT8 Device; 1130 UINT16 Segment; 1131 UINT8 PrimaryOrDeviceBus; 1132 UINT8 SecondaryBus; 1133 EFI_GENERIC_ERROR_PCI_SLOT Slot; 1134 UINT8 Resv1; 1135 } EFI_GENERIC_ERROR_PCIE_DEV_BRIDGE_ID; 1136 1137 /// 1138 /// PCIe Capability Structure 1139 /// 1140 typedef struct { 1141 UINT8 PcieCap[60]; 1142 } EFI_PCIE_ERROR_DATA_CAPABILITY; 1143 1144 /// 1145 /// PCIe Advanced Error Reporting Extended Capability Structure. 1146 /// 1147 typedef struct { 1148 UINT8 PcieAer[96]; 1149 } EFI_PCIE_ERROR_DATA_AER; 1150 1151 /// 1152 /// PCI Express Error Record 1153 /// 1154 typedef struct { 1155 UINT64 ValidFields; 1156 UINT32 PortType; 1157 UINT32 Version; 1158 UINT32 CommandStatus; 1159 UINT32 Resv2; 1160 EFI_GENERIC_ERROR_PCIE_DEV_BRIDGE_ID DevBridge; 1161 UINT64 SerialNo; 1162 UINT32 BridgeControlStatus; 1163 EFI_PCIE_ERROR_DATA_CAPABILITY Capability; 1164 EFI_PCIE_ERROR_DATA_AER AerInfo; 1165 } EFI_PCIE_ERROR_DATA; 1166 1167 /// 1168 /// Validation bits Indicates which of the following fields is valid 1169 /// in PCI/PCI-X Bus Error Section. 1170 ///@{ 1171 #define EFI_PCI_PCIX_BUS_ERROR_STATUS_VALID BIT0 1172 #define EFI_PCI_PCIX_BUS_ERROR_TYPE_VALID BIT1 1173 #define EFI_PCI_PCIX_BUS_ERROR_BUS_ID_VALID BIT2 1174 #define EFI_PCI_PCIX_BUS_ERROR_BUS_ADDRESS_VALID BIT3 1175 #define EFI_PCI_PCIX_BUS_ERROR_BUS_DATA_VALID BIT4 1176 #define EFI_PCI_PCIX_BUS_ERROR_COMMAND_VALID BIT5 1177 #define EFI_PCI_PCIX_BUS_ERROR_REQUESTOR_ID_VALID BIT6 1178 #define EFI_PCI_PCIX_BUS_ERROR_COMPLETER_ID_VALID BIT7 1179 #define EFI_PCI_PCIX_BUS_ERROR_TARGET_ID_VALID BIT8 1180 ///@} 1181 1182 /// 1183 /// PCI Bus Error Type in PCI/PCI-X Bus Error Section 1184 ///@{ 1185 #define EFI_PCI_PCIX_BUS_ERROR_UNKNOWN 0x0000 1186 #define EFI_PCI_PCIX_BUS_ERROR_DATA_PARITY 0x0001 1187 #define EFI_PCI_PCIX_BUS_ERROR_SYSTEM 0x0002 1188 #define EFI_PCI_PCIX_BUS_ERROR_MASTER_ABORT 0x0003 1189 #define EFI_PCI_PCIX_BUS_ERROR_BUS_TIMEOUT 0x0004 1190 #define EFI_PCI_PCIX_BUS_ERROR_MASTER_DATA_PARITY 0x0005 1191 #define EFI_PCI_PCIX_BUS_ERROR_ADDRESS_PARITY 0x0006 1192 #define EFI_PCI_PCIX_BUS_ERROR_COMMAND_PARITY 0x0007 1193 ///@} 1194 1195 /// 1196 /// PCI/PCI-X Bus Error Section 1197 /// 1198 typedef struct { 1199 UINT64 ValidFields; 1200 EFI_GENERIC_ERROR_STATUS ErrorStatus; 1201 UINT16 Type; 1202 UINT16 BusId; 1203 UINT32 Resv2; 1204 UINT64 BusAddress; 1205 UINT64 BusData; 1206 UINT64 BusCommand; 1207 UINT64 RequestorId; 1208 UINT64 ResponderId; 1209 UINT64 TargetId; 1210 } EFI_PCI_PCIX_BUS_ERROR_DATA; 1211 1212 /// 1213 /// Validation bits Indicates which of the following fields is valid 1214 /// in PCI/PCI-X Component Error Section. 1215 ///@{ 1216 #define EFI_PCI_PCIX_DEVICE_ERROR_STATUS_VALID BIT0 1217 #define EFI_PCI_PCIX_DEVICE_ERROR_ID_INFO_VALID BIT1 1218 #define EFI_PCI_PCIX_DEVICE_ERROR_MEM_NUM_VALID BIT2 1219 #define EFI_PCI_PCIX_DEVICE_ERROR_IO_NUM_VALID BIT3 1220 #define EFI_PCI_PCIX_DEVICE_ERROR_REG_DATA_PAIR_VALID BIT4 1221 ///@} 1222 1223 /// 1224 /// PCI/PCI-X Device Identification Information 1225 /// 1226 typedef struct { 1227 UINT16 VendorId; 1228 UINT16 DeviceId; 1229 UINT8 ClassCode[3]; 1230 UINT8 Function; 1231 UINT8 Device; 1232 UINT8 Bus; 1233 UINT8 Segment; 1234 UINT8 Resv1; 1235 UINT32 Resv2; 1236 } EFI_GENERIC_ERROR_PCI_DEVICE_ID; 1237 1238 /// 1239 /// Identifies the type of firmware error record 1240 ///@{ 1241 #define EFI_FIRMWARE_ERROR_TYPE_IPF_SAL 0x00 1242 #define EFI_FIRMWARE_ERROR_TYPE_SOC_TYPE1 0x01 1243 #define EFI_FIRMWARE_ERROR_TYPE_SOC_TYPE2 0x02 1244 ///@} 1245 1246 /// 1247 /// Firmware Error Record Section 1248 /// 1249 typedef struct { 1250 UINT8 ErrorType; 1251 UINT8 Revision; 1252 UINT8 Resv1[6]; 1253 UINT64 RecordId; 1254 EFI_GUID RecordIdGuid; 1255 } EFI_FIRMWARE_ERROR_DATA; 1256 1257 /// 1258 /// Fault Reason in DMAr Generic Error Section 1259 ///@{ 1260 #define EFI_DMA_FAULT_REASON_TABLE_ENTRY_NOT_PRESENT 0x01 1261 #define EFI_DMA_FAULT_REASON_TABLE_ENTRY_INVALID 0x02 1262 #define EFI_DMA_FAULT_REASON_ACCESS_MAPPING_TABLE_ERROR 0x03 1263 #define EFI_DMA_FAULT_REASON_RESV_BIT_ERROR_IN_MAPPING_TABLE 0x04 1264 #define EFI_DMA_FAULT_REASON_ACCESS_ADDR_OUT_OF_SPACE 0x05 1265 #define EFI_DMA_FAULT_REASON_INVALID_ACCESS 0x06 1266 #define EFI_DMA_FAULT_REASON_INVALID_REQUEST 0x07 1267 #define EFI_DMA_FAULT_REASON_ACCESS_TRANSLATE_TABLE_ERROR 0x08 1268 #define EFI_DMA_FAULT_REASON_RESV_BIT_ERROR_IN_TRANSLATE_TABLE 0x09 1269 #define EFI_DMA_FAULT_REASON_INVALID_COMMAOND 0x0A 1270 #define EFI_DMA_FAULT_REASON_ACCESS_COMMAND_BUFFER_ERROR 0x0B 1271 ///@} 1272 1273 /// 1274 /// DMA access type in DMAr Generic Error Section 1275 ///@{ 1276 #define EFI_DMA_ACCESS_TYPE_READ 0x00 1277 #define EFI_DMA_ACCESS_TYPE_WRITE 0x01 1278 ///@} 1279 1280 /// 1281 /// DMA address type in DMAr Generic Error Section 1282 ///@{ 1283 #define EFI_DMA_ADDRESS_UNTRANSLATED 0x00 1284 #define EFI_DMA_ADDRESS_TRANSLATION 0x01 1285 ///@} 1286 1287 /// 1288 /// Architecture type in DMAr Generic Error Section 1289 ///@{ 1290 #define EFI_DMA_ARCH_TYPE_VT 0x01 1291 #define EFI_DMA_ARCH_TYPE_IOMMU 0x02 1292 ///@} 1293 1294 /// 1295 /// DMAr Generic Error Section 1296 /// 1297 typedef struct { 1298 UINT16 RequesterId; 1299 UINT16 SegmentNumber; 1300 UINT8 FaultReason; 1301 UINT8 AccessType; 1302 UINT8 AddressType; 1303 UINT8 ArchType; 1304 UINT64 DeviceAddr; 1305 UINT8 Resv1[16]; 1306 } EFI_DMAR_GENERIC_ERROR_DATA; 1307 1308 /// 1309 /// Intel VT for Directed I/O specific DMAr Errors 1310 /// 1311 typedef struct { 1312 UINT8 Version; 1313 UINT8 Revision; 1314 UINT8 OemId[6]; 1315 UINT64 Capability; 1316 UINT64 CapabilityEx; 1317 UINT32 GlobalCommand; 1318 UINT32 GlobalStatus; 1319 UINT32 FaultStatus; 1320 UINT8 Resv1[12]; 1321 UINT64 FaultRecord[2]; 1322 UINT64 RootEntry[2]; 1323 UINT64 ContextEntry[2]; 1324 UINT64 PteL6; 1325 UINT64 PteL5; 1326 UINT64 PteL4; 1327 UINT64 PteL3; 1328 UINT64 PteL2; 1329 UINT64 PteL1; 1330 } EFI_DIRECTED_IO_DMAR_ERROR_DATA; 1331 1332 /// 1333 /// IOMMU specific DMAr Errors 1334 /// 1335 typedef struct { 1336 UINT8 Revision; 1337 UINT8 Resv1[7]; 1338 UINT64 Control; 1339 UINT64 Status; 1340 UINT8 Resv2[8]; 1341 UINT64 EventLogEntry[2]; 1342 UINT8 Resv3[16]; 1343 UINT64 DeviceTableEntry[4]; 1344 UINT64 PteL6; 1345 UINT64 PteL5; 1346 UINT64 PteL4; 1347 UINT64 PteL3; 1348 UINT64 PteL2; 1349 UINT64 PteL1; 1350 } EFI_IOMMU_DMAR_ERROR_DATA; 1351 1352 extern EFI_GUID gEfiEventNotificationTypeCmcGuid; 1353 extern EFI_GUID gEfiEventNotificationTypeCpeGuid; 1354 extern EFI_GUID gEfiEventNotificationTypeMceGuid; 1355 extern EFI_GUID gEfiEventNotificationTypePcieGuid; 1356 extern EFI_GUID gEfiEventNotificationTypeInitGuid; 1357 extern EFI_GUID gEfiEventNotificationTypeNmiGuid; 1358 extern EFI_GUID gEfiEventNotificationTypeBootGuid; 1359 extern EFI_GUID gEfiEventNotificationTypeDmarGuid; 1360 extern EFI_GUID gEfiEventNotificationTypeSeaGuid; 1361 extern EFI_GUID gEfiEventNotificationTypeSeiGuid; 1362 extern EFI_GUID gEfiEventNotificationTypePeiGuid; 1363 extern EFI_GUID gEfiEventNotificationTypeCxlGuid; 1364 extern EFI_GUID gEfiProcessorGenericErrorSectionGuid; 1365 extern EFI_GUID gEfiProcessorSpecificErrorSectionGuid; 1366 extern EFI_GUID gEfiIa32X64ProcessorErrorSectionGuid; 1367 extern EFI_GUID gEfiIpfProcessorErrorSectionGuid; 1368 extern EFI_GUID gEfiArmProcessorErrorSectionGuid; 1369 extern EFI_GUID gEfiPlatformMemoryErrorSectionGuid; 1370 extern EFI_GUID gEfiPlatformMemoryError2SectionGuid; 1371 extern EFI_GUID gEfiPcieErrorSectionGuid; 1372 extern EFI_GUID gEfiFirmwareErrorSectionGuid; 1373 extern EFI_GUID gEfiPciBusErrorSectionGuid; 1374 extern EFI_GUID gEfiPciDevErrorSectionGuid; 1375 extern EFI_GUID gEfiDMArGenericErrorSectionGuid; 1376 extern EFI_GUID gEfiDirectedIoDMArErrorSectionGuid; 1377 extern EFI_GUID gEfiIommuDMArErrorSectionGuid; 1378 extern EFI_GUID gEfiCcixPerLogErrorSectionGuid; 1379 extern EFI_GUID gEfiCxlProtocolErrorSectionGuid; 1380 extern EFI_GUID gEfiCxlGeneralMediaErrorSectionGuid; 1381 extern EFI_GUID gEfiCxlDramEventErrorSectionGuid; 1382 extern EFI_GUID gEfiCxlMemoryModuleErrorSectionGuid; 1383 extern EFI_GUID gEfiCxlPhysicalSwitchErrorSectionGuid; 1384 extern EFI_GUID gEfiCxlVirtualSwitchErrorSectionGuid; 1385 extern EFI_GUID gEfiCxlMldPortErrorSectionGuid; 1386 1387 #if defined(MDE_CPU_IA32) || defined(MDE_CPU_X64) 1388 /// 1389 /// IA32 and x64 Specific definitions. 1390 /// 1391 1392 extern EFI_GUID gEfiIa32X64ErrorTypeCacheCheckGuid; 1393 extern EFI_GUID gEfiIa32X64ErrorTypeTlbCheckGuid; 1394 extern EFI_GUID gEfiIa32X64ErrorTypeBusCheckGuid; 1395 extern EFI_GUID gEfiIa32X64ErrorTypeMsCheckGuid; 1396 1397 #endif 1398 1399 /// 1400 /// NVIDIA Error Record Section 1401 /// 1402 typedef struct { 1403 UINT64 Address; 1404 UINT64 Value; 1405 } EFI_NVIDIA_REGISTER_DATA; 1406 1407 typedef struct { 1408 CHAR8 Signature[16]; 1409 UINT16 ErrorType; 1410 UINT16 ErrorInstance; 1411 UINT8 Severity; 1412 UINT8 Socket; 1413 UINT8 NumberRegs; 1414 UINT8 Reserved; 1415 UINT64 InstanceBase; 1416 // Keep this at the end of this struct 1417 // and allocate based on NumberRegs 1418 #ifndef __cplusplus 1419 EFI_NVIDIA_REGISTER_DATA Register[] LIBCPER_CC_COUNTED_BY(NumberRegs); 1420 #endif 1421 } EFI_NVIDIA_ERROR_DATA; 1422 1423 extern EFI_GUID gEfiNvidiaErrorSectionGuid; 1424 1425 /// 1426 /// Ampere Error Record Section 1427 /// 1428 typedef struct { 1429 UINT16 TypeId; 1430 UINT16 SubtypeId; 1431 UINT32 InstanceId; 1432 } __attribute__((packed)) EFI_AMPERE_ERROR_DATA; 1433 1434 extern EFI_GUID gEfiAmpereErrorSectionGuid; 1435 1436 /// 1437 /// Arm Error Record Section 1438 /// 1439 typedef struct { 1440 UINT32 ValidFields; 1441 UINT16 ErrInfoNum; 1442 UINT16 ContextInfoNum; 1443 UINT32 SectionLength; 1444 UINT32 ErrorAffinityLevel; 1445 UINT64 MPIDR_EL1; 1446 UINT64 MIDR_EL1; 1447 UINT32 RunningState; 1448 UINT32 PsciState; 1449 } __attribute__((packed, aligned(1))) EFI_ARM_ERROR_RECORD; 1450 1451 /// 1452 /// ARM Processor Error Information Structure 1453 /// 1454 #define ARM_ERROR_INFORMATION_TYPE_CACHE 0 1455 #define ARM_ERROR_INFORMATION_TYPE_TLB 1 1456 #define ARM_ERROR_INFORMATION_TYPE_BUS 2 1457 #define ARM_ERROR_INFORMATION_TYPE_MICROARCH 3 1458 1459 typedef struct { 1460 UINT64 ValidationBits : 16; 1461 UINT64 TransactionType : 2; 1462 UINT64 Operation : 4; 1463 UINT64 Level : 3; 1464 UINT64 ProcessorContextCorrupt : 1; 1465 UINT64 Corrected : 1; 1466 UINT64 PrecisePC : 1; 1467 UINT64 RestartablePC : 1; 1468 UINT64 Reserved : 34; 1469 } EFI_ARM_CACHE_ERROR_STRUCTURE; 1470 1471 typedef struct { 1472 UINT64 ValidationBits : 16; 1473 UINT64 TransactionType : 2; 1474 UINT64 Operation : 4; 1475 UINT64 Level : 3; 1476 UINT64 ProcessorContextCorrupt : 1; 1477 UINT64 Corrected : 1; 1478 UINT64 PrecisePC : 1; 1479 UINT64 RestartablePC : 1; 1480 UINT64 Reserved : 34; 1481 } EFI_ARM_TLB_ERROR_STRUCTURE; 1482 1483 typedef struct { 1484 UINT64 ValidationBits : 16; 1485 UINT64 TransactionType : 2; 1486 UINT64 Operation : 4; 1487 UINT64 Level : 3; 1488 UINT64 ProcessorContextCorrupt : 1; 1489 UINT64 Corrected : 1; 1490 UINT64 PrecisePC : 1; 1491 UINT64 RestartablePC : 1; 1492 UINT64 ParticipationType : 2; 1493 UINT64 TimeOut : 1; 1494 UINT64 AddressSpace : 2; 1495 UINT64 MemoryAddressAttributes : 8; 1496 UINT64 AccessMode : 1; 1497 UINT64 Reserved : 19; 1498 } EFI_ARM_BUS_ERROR_STRUCTURE; 1499 1500 typedef union { 1501 UINT64 Value; 1502 EFI_ARM_CACHE_ERROR_STRUCTURE CacheError; 1503 EFI_ARM_TLB_ERROR_STRUCTURE TlbError; 1504 EFI_ARM_BUS_ERROR_STRUCTURE BusError; 1505 } EFI_ARM_ERROR_INFORMATION_STRUCTURE; 1506 1507 typedef struct { 1508 UINT8 Version; 1509 UINT8 Length; 1510 UINT16 ValidationBits; 1511 UINT8 Type; 1512 UINT16 MultipleError; 1513 UINT8 Flags; 1514 EFI_ARM_ERROR_INFORMATION_STRUCTURE ErrorInformation; 1515 UINT64 VirtualFaultAddress; 1516 UINT64 PhysicalFaultAddress; 1517 } __attribute__((packed, aligned(1))) EFI_ARM_ERROR_INFORMATION_ENTRY; 1518 1519 /// 1520 /// ARM Processor Context Information Structure 1521 /// 1522 typedef struct { 1523 UINT16 Version; 1524 UINT16 RegisterContextType; 1525 UINT32 RegisterArraySize; 1526 } __attribute__((packed, aligned(1))) EFI_ARM_CONTEXT_INFORMATION_HEADER; 1527 1528 /// 1529 /// ARM Processor Context Register Types 1530 /// 1531 #define EFI_ARM_CONTEXT_TYPE_AARCH32_GPR 0 1532 #define EFI_ARM_CONTEXT_TYPE_AARCH32_EL1 1 1533 #define EFI_ARM_CONTEXT_TYPE_AARCH32_EL2 2 1534 #define EFI_ARM_CONTEXT_TYPE_AARCH32_SECURE 3 1535 #define EFI_ARM_CONTEXT_TYPE_AARCH64_GPR 4 1536 #define EFI_ARM_CONTEXT_TYPE_AARCH64_EL1 5 1537 #define EFI_ARM_CONTEXT_TYPE_AARCH64_EL2 6 1538 #define EFI_ARM_CONTEXT_TYPE_AARCH64_EL3 7 1539 #define EFI_ARM_CONTEXT_TYPE_MISC 8 1540 1541 typedef struct { 1542 UINT32 R0; 1543 UINT32 R1; 1544 UINT32 R2; 1545 UINT32 R3; 1546 UINT32 R4; 1547 UINT32 R5; 1548 UINT32 R6; 1549 UINT32 R7; 1550 UINT32 R8; 1551 UINT32 R9; 1552 UINT32 R10; 1553 UINT32 R11; 1554 UINT32 R12; 1555 UINT32 R13_sp; 1556 UINT32 R14_lr; 1557 UINT32 R15_pc; 1558 } EFI_ARM_V8_AARCH32_GPR; 1559 1560 typedef struct { 1561 UINT32 Dfar; 1562 UINT32 Dfsr; 1563 UINT32 Ifar; 1564 UINT32 Isr; 1565 UINT32 Mair0; 1566 UINT32 Mair1; 1567 UINT32 Midr; 1568 UINT32 Mpidr; 1569 UINT32 Nmrr; 1570 UINT32 Prrr; 1571 UINT32 Sctlr_Ns; 1572 UINT32 Spsr; 1573 UINT32 Spsr_Abt; 1574 UINT32 Spsr_Fiq; 1575 UINT32 Spsr_Irq; 1576 UINT32 Spsr_Svc; 1577 UINT32 Spsr_Und; 1578 UINT32 Tpidrprw; 1579 UINT32 Tpidruro; 1580 UINT32 Tpidrurw; 1581 UINT32 Ttbcr; 1582 UINT32 Ttbr0; 1583 UINT32 Ttbr1; 1584 UINT32 Dacr; 1585 } EFI_ARM_AARCH32_EL1_CONTEXT_REGISTERS; 1586 1587 typedef struct { 1588 UINT32 Elr_Hyp; 1589 UINT32 Hamair0; 1590 UINT32 Hamair1; 1591 UINT32 Hcr; 1592 UINT32 Hcr2; 1593 UINT32 Hdfar; 1594 UINT32 Hifar; 1595 UINT32 Hpfar; 1596 UINT32 Hsr; 1597 UINT32 Htcr; 1598 UINT32 Htpidr; 1599 UINT32 Httbr; 1600 UINT32 Spsr_Hyp; 1601 UINT32 Vtcr; 1602 UINT32 Vttbr; 1603 UINT32 Dacr32_El2; 1604 } EFI_ARM_AARCH32_EL2_CONTEXT_REGISTERS; 1605 1606 typedef struct { 1607 UINT32 Sctlr_S; 1608 UINT32 Spsr_Mon; 1609 } EFI_ARM_AARCH32_SECURE_CONTEXT_REGISTERS; 1610 1611 typedef struct { 1612 UINT64 X0; 1613 UINT64 X1; 1614 UINT64 X2; 1615 UINT64 X3; 1616 UINT64 X4; 1617 UINT64 X5; 1618 UINT64 X6; 1619 UINT64 X7; 1620 UINT64 X8; 1621 UINT64 X9; 1622 UINT64 X10; 1623 UINT64 X11; 1624 UINT64 X12; 1625 UINT64 X13; 1626 UINT64 X14; 1627 UINT64 X15; 1628 UINT64 X16; 1629 UINT64 X17; 1630 UINT64 X18; 1631 UINT64 X19; 1632 UINT64 X20; 1633 UINT64 X21; 1634 UINT64 X22; 1635 UINT64 X23; 1636 UINT64 X24; 1637 UINT64 X25; 1638 UINT64 X26; 1639 UINT64 X27; 1640 UINT64 X28; 1641 UINT64 X29; 1642 UINT64 X30; 1643 UINT64 Sp; 1644 } EFI_ARM_V8_AARCH64_GPR; 1645 1646 typedef struct { 1647 UINT64 Elr_El1; 1648 UINT64 Esr_El1; 1649 UINT64 Far_El1; 1650 UINT64 Isr_El1; 1651 UINT64 Mair_El1; 1652 UINT64 Midr_El1; 1653 UINT64 Mpidr_El1; 1654 UINT64 Sctlr_El1; 1655 UINT64 Sp_El0; 1656 UINT64 Sp_El1; 1657 UINT64 Spsr_El1; 1658 UINT64 Tcr_El1; 1659 UINT64 Tpidr_El0; 1660 UINT64 Tpidr_El1; 1661 UINT64 Tpidrro_El0; 1662 UINT64 Ttbr0_El1; 1663 UINT64 Ttbr1_El1; 1664 } EFI_ARM_AARCH64_EL1_CONTEXT_REGISTERS; 1665 1666 typedef struct { 1667 UINT64 Elr_El2; 1668 UINT64 Esr_El2; 1669 UINT64 Far_El2; 1670 UINT64 Hacr_El2; 1671 UINT64 Hcr_El2; 1672 UINT64 Hpfar_El2; 1673 UINT64 Mair_El2; 1674 UINT64 Sctlr_El2; 1675 UINT64 Sp_El2; 1676 UINT64 Spsr_El2; 1677 UINT64 Tcr_El2; 1678 UINT64 Tpidr_El2; 1679 UINT64 Ttbr0_El2; 1680 UINT64 Vtcr_El2; 1681 UINT64 Vttbr_El2; 1682 } EFI_ARM_AARCH64_EL2_CONTEXT_REGISTERS; 1683 1684 typedef struct { 1685 UINT64 Elr_El3; 1686 UINT64 Esr_El3; 1687 UINT64 Far_El3; 1688 UINT64 Mair_El3; 1689 UINT64 Sctlr_El3; 1690 UINT64 Sp_El3; 1691 UINT64 Spsr_El3; 1692 UINT64 Tcr_El3; 1693 UINT64 Tpidr_El3; 1694 UINT64 Ttbr0_El3; 1695 } EFI_ARM_AARCH64_EL3_CONTEXT_REGISTERS; 1696 1697 typedef struct { 1698 UINT64 MrsOp2 : 3; 1699 UINT64 MrsCrm : 4; 1700 UINT64 MrsCrn : 4; 1701 UINT64 MrsOp1 : 3; 1702 UINT64 MrsO0 : 1; 1703 UINT64 Value : 64; 1704 } EFI_ARM_MISC_CONTEXT_REGISTER; 1705 #pragma pack(pop) 1706 1707 #ifdef __cplusplus 1708 } 1709 #endif 1710 1711 #endif 1712