• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /** @file
2   GUIDs and definitions used for Common Platform Error Record.
3 
4   Copyright (c) 2011 - 2016, Intel Corporation. All rights reserved.<BR>
5   (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
6   This program and the accompanying materials
7   are licensed and made available under the terms and conditions of the BSD License
8   which accompanies this distribution.  The full text of the license may be found at
9   http://opensource.org/licenses/bsd-license.php
10 
11   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13 
14   @par Revision Reference:
15   GUIDs defined in UEFI 2.6 Specification.
16 
17 **/
18 
19 #ifndef __CPER_GUID_H__
20 #define __CPER_GUID_H__
21 
22 #pragma pack(1)
23 
24 #define EFI_ERROR_RECORD_SIGNATURE_START   SIGNATURE_32('C', 'P', 'E', 'R')
25 #define EFI_ERROR_RECORD_SIGNATURE_END     0xFFFFFFFF
26 
27 #define EFI_ERROR_RECORD_REVISION          0x0101
28 
29 ///
30 /// Error Severity in Error Record Header and Error Section Descriptor
31 ///@{
32 #define EFI_GENERIC_ERROR_RECOVERABLE                0x00000000
33 #define EFI_GENERIC_ERROR_FATAL                      0x00000001
34 #define EFI_GENERIC_ERROR_CORRECTED                  0x00000002
35 #define EFI_GENERIC_ERROR_INFO                       0x00000003
36 ///@}
37 
38 ///
39 /// The validation bit mask indicates the validity of the following fields
40 /// in Error Record Header.
41 ///@{
42 #define EFI_ERROR_RECORD_HEADER_PLATFORM_ID_VALID    BIT0
43 #define EFI_ERROR_RECORD_HEADER_TIME_STAMP_VALID     BIT1
44 #define EFI_ERROR_RECORD_HEADER_PARTITION_ID_VALID   BIT2
45 ///@}
46 
47 ///
48 /// Timestamp is precise if this bit is set and correlates to the time of the
49 /// error event.
50 ///
51 #define EFI_ERROR_TIME_STAMP_PRECISE                 BIT0
52 
53 ///
54 /// The timestamp correlates to the time when the error information was collected
55 /// by the system software and may not necessarily represent the time of the error
56 /// event. The timestamp contains the local time in BCD format.
57 ///
58 typedef struct {
59   UINT8              Seconds;
60   UINT8              Minutes;
61   UINT8              Hours;
62   UINT8              Flag;
63   UINT8              Day;
64   UINT8              Month;
65   UINT8              Year;
66   UINT8              Century;
67 } EFI_ERROR_TIME_STAMP;
68 
69 ///
70 /// GUID value indicating the record association with an error event notification type.
71 ///@{
72 #define EFI_EVENT_NOTIFICATION_TYEP_CMC_GUID \
73   { \
74     0x2DCE8BB1, 0xBDD7, 0x450e, { 0xB9, 0xAD, 0x9C, 0xF4, 0xEB, 0xD4, 0xF8, 0x90 } \
75   }
76 #define EFI_EVENT_NOTIFICATION_TYEP_CPE_GUID \
77   { \
78     0x4E292F96, 0xD843, 0x4a55, { 0xA8, 0xC2, 0xD4, 0x81, 0xF2, 0x7E, 0xBE, 0xEE } \
79   }
80 #define EFI_EVENT_NOTIFICATION_TYEP_MCE_GUID \
81   { \
82     0xE8F56FFE, 0x919C, 0x4cc5, { 0xBA, 0x88, 0x65, 0xAB, 0xE1, 0x49, 0x13, 0xBB } \
83   }
84 #define EFI_EVENT_NOTIFICATION_TYEP_PCIE_GUID \
85   { \
86     0xCF93C01F, 0x1A16, 0x4dfc, { 0xB8, 0xBC, 0x9C, 0x4D, 0xAF, 0x67, 0xC1, 0x04 } \
87   }
88 #define EFI_EVENT_NOTIFICATION_TYEP_INIT_GUID \
89   { \
90     0xCC5263E8, 0x9308, 0x454a, { 0x89, 0xD0, 0x34, 0x0B, 0xD3, 0x9B, 0xC9, 0x8E } \
91   }
92 #define EFI_EVENT_NOTIFICATION_TYEP_NMI_GUID \
93   { \
94     0x5BAD89FF, 0xB7E6, 0x42c9, { 0x81, 0x4A, 0xCF, 0x24, 0x85, 0xD6, 0xE9, 0x8A } \
95   }
96 #define EFI_EVENT_NOTIFICATION_TYEP_BOOT_GUID \
97   { \
98     0x3D61A466, 0xAB40, 0x409a, { 0xA6, 0x98, 0xF3, 0x62, 0xD4, 0x64, 0xB3, 0x8F } \
99   }
100 #define EFI_EVENT_NOTIFICATION_TYEP_DMAR_GUID \
101   { \
102     0x667DD791, 0xC6B3, 0x4c27, { 0x8A, 0x6B, 0x0F, 0x8E, 0x72, 0x2D, 0xEB, 0x41 } \
103   }
104 ///@}
105 
106 ///
107 /// Error Record Header Flags
108 ///@{
109 #define EFI_HW_ERROR_FLAGS_RECOVERED                 0x00000001
110 #define EFI_HW_ERROR_FLAGS_PREVERR                   0x00000002
111 #define EFI_HW_ERROR_FLAGS_SIMULATED                 0x00000004
112 ///@}
113 
114 ///
115 /// Common error record header
116 ///
117 typedef struct {
118   UINT32               SignatureStart;
119   UINT16               Revision;
120   UINT32               SignatureEnd;
121   UINT16               SectionCount;
122   UINT32               ErrorSeverity;
123   UINT32               ValidationBits;
124   UINT32               RecordLength;
125   EFI_ERROR_TIME_STAMP TimeStamp;
126   EFI_GUID             PlatformID;
127   EFI_GUID             PartitionID;
128   EFI_GUID             CreatorID;
129   EFI_GUID             NotificationType;
130   UINT64               RecordID;
131   UINT32               Flags;
132   UINT64               PersistenceInfo;
133   UINT8                Resv1[12];
134   ///
135   /// An array of SectionCount descriptors for the associated
136   /// sections. The number of valid sections is equivalent to the
137   /// SectionCount. The buffer size of the record may include
138   /// more space to dynamically add additional Section
139   /// Descriptors to the error record.
140   ///
141 } EFI_COMMON_ERROR_RECORD_HEADER;
142 
143 #define EFI_ERROR_SECTION_REVISION  0x0100
144 
145 ///
146 /// Validity Fields in Error Section Descriptor.
147 ///
148 #define EFI_ERROR_SECTION_FRU_ID_VALID               BIT0
149 #define EFI_ERROR_SECTION_FRU_STRING_VALID           BIT1
150 
151 ///
152 /// Flag field contains information that describes the error section
153 /// in Error Section Descriptor.
154 ///
155 #define EFI_ERROR_SECTION_FLAGS_PRIMARY                        BIT0
156 #define EFI_ERROR_SECTION_FLAGS_CONTAINMENT_WARNING            BIT1
157 #define EFI_ERROR_SECTION_FLAGS_RESET                          BIT2
158 #define EFI_ERROR_SECTION_FLAGS_ERROR_THRESHOLD_EXCEEDED       BIT3
159 #define EFI_ERROR_SECTION_FLAGS_RESOURCE_NOT_ACCESSIBLE        BIT4
160 #define EFI_ERROR_SECTION_FLAGS_LATENT_ERROR                   BIT5
161 
162 ///
163 /// Error Sectition Type GUIDs in Error Section Descriptor
164 ///@{
165 #define EFI_ERROR_SECTION_PROCESSOR_GENERIC_GUID \
166   { \
167     0x9876ccad, 0x47b4, 0x4bdb, { 0xb6, 0x5e, 0x16, 0xf1, 0x93, 0xc4, 0xf3, 0xdb } \
168   }
169 #define EFI_ERROR_SECTION_PROCESSOR_SPECIFIC_GUID \
170   { \
171     0xdc3ea0b0, 0xa144, 0x4797, { 0xb9, 0x5b, 0x53, 0xfa, 0x24, 0x2b, 0x6e, 0x1d } \
172   }
173 #define EFI_ERROR_SECTION_PROCESSOR_SPECIFIC_IA32X64_GUID \
174   { \
175     0xdc3ea0b0, 0xa144, 0x4797, { 0xb9, 0x5b, 0x53, 0xfa, 0x24, 0x2b, 0x6e, 0x1d } \
176   }
177 #define EFI_ERROR_SECTION_PROCESSOR_SPECIFIC_ARM_GUID \
178   { \
179     0xe19e3d16, 0xbc11, 0x11e4, { 0x9c, 0xaa, 0xc2, 0x05, 0x1d, 0x5d, 0x46, 0xb0 } \
180   }
181 #define EFI_ERROR_SECTION_PLATFORM_MEMORY_GUID \
182   { \
183     0xa5bc1114, 0x6f64, 0x4ede, { 0xb8, 0x63, 0x3e, 0x83, 0xed, 0x7c, 0x83, 0xb1 } \
184   }
185 #define EFI_ERROR_SECTION_PLATFORM_MEMORY2_GUID \
186   { \
187     0x61EC04FC, 0x48E6, 0xD813, { 0x25, 0xC9, 0x8D, 0xAA, 0x44, 0x75, 0x0B, 0x12 } \
188   }
189 #define EFI_ERROR_SECTION_PCIE_GUID \
190   { \
191     0xd995e954, 0xbbc1, 0x430f, { 0xad, 0x91, 0xb4, 0x4d, 0xcb, 0x3c, 0x6f, 0x35 } \
192   }
193 #define EFI_ERROR_SECTION_FW_ERROR_RECORD_GUID \
194   { \
195     0x81212a96, 0x09ed, 0x4996, { 0x94, 0x71, 0x8d, 0x72, 0x9c, 0x8e, 0x69, 0xed } \
196   }
197 #define EFI_ERROR_SECTION_PCI_PCIX_BUS_GUID \
198   { \
199     0xc5753963, 0x3b84, 0x4095, { 0xbf, 0x78, 0xed, 0xda, 0xd3, 0xf9, 0xc9, 0xdd } \
200   }
201 #define EFI_ERROR_SECTION_PCI_DEVICE_GUID \
202   { \
203     0xeb5e4685, 0xca66, 0x4769, { 0xb6, 0xa2, 0x26, 0x06, 0x8b, 0x00, 0x13, 0x26 } \
204   }
205 #define EFI_ERROR_SECTION_DMAR_GENERIC_GUID \
206   { \
207     0x5b51fef7, 0xc79d, 0x4434, { 0x8f, 0x1b, 0xaa, 0x62, 0xde, 0x3e, 0x2c, 0x64 } \
208   }
209 #define EFI_ERROR_SECTION_DIRECTED_IO_DMAR_GUID \
210   { \
211     0x71761d37, 0x32b2, 0x45cd, { 0xa7, 0xd0, 0xb0, 0xfe, 0xdd, 0x93, 0xe8, 0xcf } \
212   }
213 #define EFI_ERROR_SECTION_IOMMU_DMAR_GUID \
214   { \
215     0x036f84e1, 0x7f37, 0x428c, { 0xa7, 0x9e, 0x57, 0x5f, 0xdf, 0xaa, 0x84, 0xec } \
216   }
217 ///@}
218 
219 ///
220 /// Error Section Descriptor
221 ///
222 typedef struct {
223   UINT32                 SectionOffset;
224   UINT32                 SectionLength;
225   UINT16                 Revision;
226   UINT8                  SecValidMask;
227   UINT8                  Resv1;
228   UINT32                 SectionFlags;
229   EFI_GUID               SectionType;
230   EFI_GUID               FruId;
231   UINT32                 Severity;
232   CHAR8                  FruString[20];
233 } EFI_ERROR_SECTION_DESCRIPTOR;
234 
235 ///
236 /// The validation bit mask indicates whether or not each of the following fields are
237 /// valid in Proessor Generic Error section.
238 ///@{
239 #define EFI_GENERIC_ERROR_PROC_TYPE_VALID            BIT0
240 #define EFI_GENERIC_ERROR_PROC_ISA_VALID             BIT1
241 #define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_VALID      BIT2
242 #define EFI_GENERIC_ERROR_PROC_OPERATION_VALID       BIT3
243 #define EFI_GENERIC_ERROR_PROC_FLAGS_VALID           BIT4
244 #define EFI_GENERIC_ERROR_PROC_LEVEL_VALID           BIT5
245 #define EFI_GENERIC_ERROR_PROC_VERSION_VALID         BIT6
246 #define EFI_GENERIC_ERROR_PROC_BRAND_VALID           BIT7
247 #define EFI_GENERIC_ERROR_PROC_ID_VALID              BIT8
248 #define EFI_GENERIC_ERROR_PROC_TARGET_ADDR_VALID     BIT9
249 #define EFI_GENERIC_ERROR_PROC_REQUESTER_ID_VALID    BIT10
250 #define EFI_GENERIC_ERROR_PROC_RESPONDER_ID_VALID    BIT11
251 #define EFI_GENERIC_ERROR_PROC_INST_IP_VALID         BIT12
252 ///@}
253 
254 ///
255 /// The type of the processor architecture in Proessor Generic Error section.
256 ///@{
257 #define EFI_GENERIC_ERROR_PROC_TYPE_IA32_X64         0x00
258 #define EFI_GENERIC_ERROR_PROC_TYPE_IA64             0x01
259 ///@}
260 
261 ///
262 /// The type of the instruction set executing when the error occurred in Proessor
263 /// Generic Error section.
264 ///@{
265 #define EFI_GENERIC_ERROR_PROC_ISA_IA32              0x00
266 #define EFI_GENERIC_ERROR_PROC_ISA_IA64              0x01
267 #define EFI_GENERIC_ERROR_PROC_ISA_X64               0x02
268 ///@}
269 
270 ///
271 /// The type of error that occurred in Proessor Generic Error section.
272 ///@{
273 #define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_UNKNOWN    0x00
274 #define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_CACHE      0x01
275 #define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_TLB        0x02
276 #define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_BUS        0x04
277 #define EFI_GENERIC_ERROR_PROC_ERROR_TYPE_MICRO_ARCH 0x08
278 ///@}
279 
280 ///
281 /// The type of operation in Proessor Generic Error section.
282 ///@{
283 #define EFI_GENERIC_ERROR_PROC_OPERATION_GENERIC               0x00
284 #define EFI_GENERIC_ERROR_PROC_OPERATION_DATA_READ             0x01
285 #define EFI_GENERIC_ERROR_PROC_OPERATION_DATA_WRITE            0x02
286 #define EFI_GENERIC_ERROR_PROC_OPERATION_INSTRUCTION_EXEC      0x03
287 ///@}
288 
289 ///
290 /// Flags bit mask indicates additional information about the error in Proessor Generic
291 /// Error section
292 ///@{
293 #define EFI_GENERIC_ERROR_PROC_FLAGS_RESTARTABLE     BIT0
294 #define EFI_GENERIC_ERROR_PROC_FLAGS_PRECISE_IP      BIT1
295 #define EFI_GENERIC_ERROR_PROC_FLAGS_OVERFLOW        BIT2
296 #define EFI_GENERIC_ERROR_PROC_FLAGS_CORRECTED       BIT3
297 ///@}
298 
299 ///
300 /// Processor Generic Error Section
301 /// describes processor reported hardware errors for logical processors in the system.
302 ///
303 typedef struct {
304   UINT64             ValidFields;
305   UINT8              Type;
306   UINT8              Isa;
307   UINT8              ErrorType;
308   UINT8              Operation;
309   UINT8              Flags;
310   UINT8              Level;
311   UINT16             Resv1;
312   UINT64             VersionInfo;
313   CHAR8              BrandString[128];
314   UINT64             ApicId;
315   UINT64             TargetAddr;
316   UINT64             RequestorId;
317   UINT64             ResponderId;
318   UINT64             InstructionIP;
319 } EFI_PROCESSOR_GENERIC_ERROR_DATA;
320 
321 
322 #if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64)
323 ///
324 /// IA32 and x64 Specific definitions.
325 ///
326 
327 ///
328 /// GUID value indicating the type of Processor Error Information structure
329 /// in IA32/X64 Processor Error Information Structure.
330 ///@{
331 #define EFI_IA32_X64_ERROR_TYPE_CACHE_CHECK_GUID \
332   { \
333     0xA55701F5, 0xE3EF, 0x43de, {0xAC, 0x72, 0x24, 0x9B, 0x57, 0x3F, 0xAD, 0x2C } \
334   }
335 #define EFI_IA32_X64_ERROR_TYPE_TLB_CHECK_GUID \
336   { \
337     0xFC06B535, 0x5E1F, 0x4562, {0x9F, 0x25, 0x0A, 0x3B, 0x9A, 0xDB, 0x63, 0xC3 } \
338   }
339 #define EFI_IA32_X64_ERROR_TYPE_BUS_CHECK_GUID \
340   { \
341     0x1CF3F8B3, 0xC5B1, 0x49a2, {0xAA, 0x59, 0x5E, 0xEF, 0x92, 0xFF, 0xA6, 0x3C } \
342   }
343 #define EFI_IA32_X64_ERROR_TYPE_MS_CHECK_GUID \
344   { \
345     0x48AB7F57, 0xDC34, 0x4f6c, {0xA7, 0xD3, 0xB0, 0xB5, 0xB0, 0xA7, 0x43, 0x14 } \
346   }
347 ///@}
348 
349 ///
350 /// The validation bit mask indicates which fields in the IA32/X64 Processor
351 /// Error Record structure are valid.
352 ///@{
353 #define EFI_IA32_X64_PROCESSOR_ERROR_APIC_ID_VALID         BIT0
354 #define EFI_IA32_X64_PROCESSOR_ERROR_CPU_ID_INFO_VALID     BIT1
355 ///@}
356 
357 ///
358 /// IA32/X64 Processor Error Record
359 ///
360 typedef struct {
361   UINT64             ValidFields;
362   UINT64             ApicId;
363   UINT8              CpuIdInfo[48];
364 } EFI_IA32_X64_PROCESSOR_ERROR_RECORD;
365 
366 ///
367 /// The validation bit mask indicates which fields in the Cache Check structure
368 /// are valid.
369 ///@{
370 #define EFI_CACHE_CHECK_TRANSACTION_TYPE_VALID       BIT0
371 #define EFI_CACHE_CHECK_OPERATION_VALID              BIT1
372 #define EFI_CACHE_CHECK_LEVEL_VALID                  BIT2
373 #define EFI_CACHE_CHECK_CONTEXT_CORRUPT_VALID        BIT3
374 #define EFI_CACHE_CHECK_UNCORRECTED_VALID            BIT4
375 #define EFI_CACHE_CHECK_PRECISE_IP_VALID             BIT5
376 #define EFI_CACHE_CHECK_RESTARTABLE_VALID            BIT6
377 #define EFI_CACHE_CHECK_OVERFLOW_VALID               BIT7
378 ///@}
379 
380 ///
381 /// Type of cache error in the Cache Check structure
382 ///@{
383 #define EFI_CACHE_CHECK_ERROR_TYPE_INSTRUCTION       0
384 #define EFI_CACHE_CHECK_ERROR_TYPE_DATA_ACCESS       1
385 #define EFI_CACHE_CHECK_ERROR_TYPE_GENERIC           2
386 ///@}
387 
388 ///
389 /// Type of cache operation that caused the error in the Cache
390 /// Check structure
391 ///@{
392 #define EFI_CACHE_CHECK_OPERATION_TYPE_GENERIC                 0
393 #define EFI_CACHE_CHECK_OPERATION_TYPE_GENERIC_READ            1
394 #define EFI_CACHE_CHECK_OPERATION_TYPE_GENERIC_WRITE           2
395 #define EFI_CACHE_CHECK_OPERATION_TYPE_DATA_READ               3
396 #define EFI_CACHE_CHECK_OPERATION_TYPE_DATA_WRITE              4
397 #define EFI_CACHE_CHECK_OPERATION_TYPE_INSTRUCTION_FETCH       5
398 #define EFI_CACHE_CHECK_OPERATION_TYPE_PREFETCH                6
399 #define EFI_CACHE_CHECK_OPERATION_TYPE_EVICTION                7
400 #define EFI_CACHE_CHECK_OPERATION_TYPE_SNOOP                   8
401 ///@}
402 
403 ///
404 /// IA32/X64 Cache Check Structure
405 ///
406 typedef struct {
407   UINT64             ValidFields:16;
408   UINT64             TransactionType:2;
409   UINT64             Operation:4;
410   UINT64             Level:3;
411   UINT64             ContextCorrupt:1;
412   UINT64             ErrorUncorrected:1;
413   UINT64             PreciseIp:1;
414   UINT64             RestartableIp:1;
415   UINT64             Overflow:1;
416   UINT64             Resv1:34;
417 } EFI_IA32_X64_CACHE_CHECK_INFO;
418 
419 ///
420 /// The validation bit mask indicates which fields in the TLB Check structure
421 /// are valid.
422 ///@{
423 #define EFI_TLB_CHECK_TRANSACTION_TYPE_VALID         BIT0
424 #define EFI_TLB_CHECK_OPERATION_VALID                BIT1
425 #define EFI_TLB_CHECK_LEVEL_VALID                    BIT2
426 #define EFI_TLB_CHECK_CONTEXT_CORRUPT_VALID          BIT3
427 #define EFI_TLB_CHECK_UNCORRECTED_VALID              BIT4
428 #define EFI_TLB_CHECK_PRECISE_IP_VALID               BIT5
429 #define EFI_TLB_CHECK_RESTARTABLE_VALID              BIT6
430 #define EFI_TLB_CHECK_OVERFLOW_VALID                 BIT7
431 ///@}
432 
433 ///
434 /// Type of cache error in the TLB Check structure
435 ///@{
436 #define EFI_TLB_CHECK_ERROR_TYPE_INSTRUCTION         0
437 #define EFI_TLB_CHECK_ERROR_TYPE_DATA_ACCESS         1
438 #define EFI_TLB_CHECK_ERROR_TYPE_GENERIC             2
439 ///@}
440 
441 ///
442 /// Type of cache operation that caused the error in the TLB
443 /// Check structure
444 ///@{
445 #define EFI_TLB_CHECK_OPERATION_TYPE_GENERIC         0
446 #define EFI_TLB_CHECK_OPERATION_TYPE_GENERIC_READ    1
447 #define EFI_TLB_CHECK_OPERATION_TYPE_GENERIC_WRITE   2
448 #define EFI_TLB_CHECK_OPERATION_TYPE_DATA_READ       3
449 #define EFI_TLB_CHECK_OPERATION_TYPE_DATA_WRITE      4
450 #define EFI_TLB_CHECK_OPERATION_TYPE_INST_FETCH      5
451 #define EFI_TLB_CHECK_OPERATION_TYPE_PREFETCH        6
452 ///@}
453 
454 ///
455 /// IA32/X64 TLB Check Structure
456 ///
457 typedef struct {
458   UINT64             ValidFields:16;
459   UINT64             TransactionType:2;
460   UINT64             Operation:4;
461   UINT64             Level:3;
462   UINT64             ContextCorrupt:1;
463   UINT64             ErrorUncorrected:1;
464   UINT64             PreciseIp:1;
465   UINT64             RestartableIp:1;
466   UINT64             Overflow:1;
467   UINT64             Resv1:34;
468 } EFI_IA32_X64_TLB_CHECK_INFO;
469 
470 ///
471 /// The validation bit mask indicates which fields in the MS Check structure
472 /// are valid.
473 ///@{
474 #define EFI_BUS_CHECK_TRANSACTION_TYPE_VALID         BIT0
475 #define EFI_BUS_CHECK_OPERATION_VALID                BIT1
476 #define EFI_BUS_CHECK_LEVEL_VALID                    BIT2
477 #define EFI_BUS_CHECK_CONTEXT_CORRUPT_VALID          BIT3
478 #define EFI_BUS_CHECK_UNCORRECTED_VALID              BIT4
479 #define EFI_BUS_CHECK_PRECISE_IP_VALID               BIT5
480 #define EFI_BUS_CHECK_RESTARTABLE_VALID              BIT6
481 #define EFI_BUS_CHECK_OVERFLOW_VALID                 BIT7
482 #define EFI_BUS_CHECK_PARTICIPATION_TYPE_VALID       BIT8
483 #define EFI_BUS_CHECK_TIME_OUT_VALID                 BIT9
484 #define EFI_BUS_CHECK_ADDRESS_SPACE_VALID            BIT10
485 ///@}
486 
487 ///
488 /// Type of cache error in the Bus Check structure
489 ///@{
490 #define EFI_BUS_CHECK_ERROR_TYPE_INSTRUCTION         0
491 #define EFI_BUS_CHECK_ERROR_TYPE_DATA_ACCESS         1
492 #define EFI_BUS_CHECK_ERROR_TYPE_GENERIC             2
493 ///@}
494 
495 ///
496 /// Type of cache operation that caused the error in the Bus
497 /// Check structure
498 ///@{
499 #define EFI_BUS_CHECK_OPERATION_TYPE_GENERIC         0
500 #define EFI_BUS_CHECK_OPERATION_TYPE_GENERIC_READ    1
501 #define EFI_BUS_CHECK_OPERATION_TYPE_GENERIC_WRITE   2
502 #define EFI_BUS_CHECK_OPERATION_TYPE_DATA_READ       3
503 #define EFI_BUS_CHECK_OPERATION_TYPE_DATA_WRITE      4
504 #define EFI_BUS_CHECK_OPERATION_TYPE_INST_FETCH      5
505 #define EFI_BUS_CHECK_OPERATION_TYPE_PREFETCH        6
506 ///@}
507 
508 ///
509 /// Type of Participation
510 ///@{
511 #define EFI_BUS_CHECK_PARTICIPATION_TYPE_REQUEST     0
512 #define EFI_BUS_CHECK_PARTICIPATION_TYPE_RESPONDED   1
513 #define EFI_BUS_CHECK_PARTICIPATION_TYPE_OBSERVED    2
514 #define EFI_BUS_CHECK_PARTICIPATION_TYPE_GENERIC     3
515 ///@}
516 
517 ///
518 /// Type of Address Space
519 ///@{
520 #define EFI_BUS_CHECK_ADDRESS_SPACE_TYPE_MEMORY      0
521 #define EFI_BUS_CHECK_ADDRESS_SPACE_TYPE_RESERVED    1
522 #define EFI_BUS_CHECK_ADDRESS_SPACE_TYPE_IO          2
523 #define EFI_BUS_CHECK_ADDRESS_SPACE_TYPE_OTHER       3
524 ///@}
525 
526 ///
527 /// IA32/X64 Bus Check Structure
528 ///
529 typedef struct {
530   UINT64             ValidFields:16;
531   UINT64             TransactionType:2;
532   UINT64             Operation:4;
533   UINT64             Level:3;
534   UINT64             ContextCorrupt:1;
535   UINT64             ErrorUncorrected:1;
536   UINT64             PreciseIp:1;
537   UINT64             RestartableIp:1;
538   UINT64             Overflow:1;
539   UINT64             ParticipationType:2;
540   UINT64             TimeOut:1;
541   UINT64             AddressSpace:2;
542   UINT64             Resv1:29;
543 } EFI_IA32_X64_BUS_CHECK_INFO;
544 
545 ///
546 /// The validation bit mask indicates which fields in the MS Check structure
547 /// are valid.
548 ///@{
549 #define EFI_MS_CHECK_ERROR_TYPE_VALID                BIT0
550 #define EFI_MS_CHECK_CONTEXT_CORRUPT_VALID           BIT1
551 #define EFI_MS_CHECK_UNCORRECTED_VALID               BIT2
552 #define EFI_MS_CHECK_PRECISE_IP_VALID                BIT3
553 #define EFI_MS_CHECK_RESTARTABLE_VALID               BIT4
554 #define EFI_MS_CHECK_OVERFLOW_VALID                  BIT5
555 ///@}
556 
557 ///
558 /// Error type identifies the operation that caused the error.
559 ///@{
560 #define EFI_MS_CHECK_ERROR_TYPE_NO                             0
561 #define EFI_MS_CHECK_ERROR_TYPE_UNCLASSIFIED                   1
562 #define EFI_MS_CHECK_ERROR_TYPE_MICROCODE_PARITY               2
563 #define EFI_MS_CHECK_ERROR_TYPE_EXTERNAL                       3
564 #define EFI_MS_CHECK_ERROR_TYPE_FRC                            4
565 #define EFI_MS_CHECK_ERROR_TYPE_INTERNAL_UNCLASSIFIED          5
566 ///@}
567 
568 ///
569 /// IA32/X64 MS Check Field Description
570 ///
571 typedef struct {
572   UINT64             ValidFields:16;
573   UINT64             ErrorType:3;
574   UINT64             ContextCorrupt:1;
575   UINT64             ErrorUncorrected:1;
576   UINT64             PreciseIp:1;
577   UINT64             RestartableIp:1;
578   UINT64             Overflow:1;
579   UINT64             Resv1:40;
580 } EFI_IA32_X64_MS_CHECK_INFO;
581 
582 ///
583 /// IA32/X64 Check Information Item
584 ///
585 typedef union {
586   EFI_IA32_X64_CACHE_CHECK_INFO  CacheCheck;
587   EFI_IA32_X64_TLB_CHECK_INFO    TlbCheck;
588   EFI_IA32_X64_BUS_CHECK_INFO    BusCheck;
589   EFI_IA32_X64_MS_CHECK_INFO     MsCheck;
590   UINT64                         Data64;
591 } EFI_IA32_X64_CHECK_INFO_ITEM;
592 
593 ///
594 /// The validation bit mask indicates which fields in the IA32/X64 Processor Error
595 /// Information Structure are valid.
596 ///@{
597 #define EFI_IA32_X64_ERROR_PROC_CHECK_INFO_VALID       BIT0
598 #define EFI_IA32_X64_ERROR_PROC_TARGET_ADDR_VALID      BIT1
599 #define EFI_IA32_X64_ERROR_PROC_REQUESTER_ID_VALID     BIT2
600 #define EFI_IA32_X64_ERROR_PROC_RESPONDER_ID_VALID     BIT3
601 #define EFI_IA32_X64_ERROR_PROC_INST_IP_VALID          BIT4
602 ///@}
603 
604 ///
605 /// IA32/X64 Processor Error Information Structure
606 ///
607 typedef struct {
608   EFI_GUID                     ErrorType;
609   UINT64                       ValidFields;
610   EFI_IA32_X64_CHECK_INFO_ITEM CheckInfo;
611   UINT64                       TargetId;
612   UINT64                       RequestorId;
613   UINT64                       ResponderId;
614   UINT64                       InstructionIP;
615 } EFI_IA32_X64_PROCESS_ERROR_INFO;
616 
617 ///
618 /// IA32/X64 Processor Context Information Structure
619 ///
620 typedef struct {
621   UINT16             RegisterType;
622   UINT16             ArraySize;
623   UINT32             MsrAddress;
624   UINT64             MmRegisterAddress;
625   //
626   // This field will provide the contents of the actual registers or raw data.
627   // The number of Registers or size of the raw data reported is determined
628   // by (Array Size / 8) or otherwise specified by the context structure type
629   // definition.
630   //
631 } EFI_IA32_X64_PROCESSOR_CONTEXT_INFO;
632 
633 ///
634 /// Register Context Type
635 ///@{
636 #define EFI_REG_CONTEXT_TYPE_UNCLASSIFIED            0x0000
637 #define EFI_REG_CONTEXT_TYPE_MSR                     0x0001
638 #define EFI_REG_CONTEXT_TYPE_IA32                    0x0002
639 #define EFI_REG_CONTEXT_TYPE_X64                     0x0003
640 #define EFI_REG_CONTEXT_TYPE_FXSAVE                  0x0004
641 #define EFI_REG_CONTEXT_TYPE_DR_IA32                 0x0005
642 #define EFI_REG_CONTEXT_TYPE_DR_X64                  0x0006
643 #define EFI_REG_CONTEXT_TYPE_MEM_MAP                 0x0007
644 ///@}
645 
646 ///
647 /// IA32 Register State
648 ///
649 typedef struct {
650   UINT32             Eax;
651   UINT32             Ebx;
652   UINT32             Ecx;
653   UINT32             Edx;
654   UINT32             Esi;
655   UINT32             Edi;
656   UINT32             Ebp;
657   UINT32             Esp;
658   UINT16             Cs;
659   UINT16             Ds;
660   UINT16             Ss;
661   UINT16             Es;
662   UINT16             Fs;
663   UINT16             Gs;
664   UINT32             Eflags;
665   UINT32             Eip;
666   UINT32             Cr0;
667   UINT32             Cr1;
668   UINT32             Cr2;
669   UINT32             Cr3;
670   UINT32             Cr4;
671   UINT32             Gdtr[2];
672   UINT32             Idtr[2];
673   UINT16             Ldtr;
674   UINT16             Tr;
675 } EFI_CONTEXT_IA32_REGISTER_STATE;
676 
677 ///
678 /// X64 Register State
679 ///
680 typedef struct {
681   UINT64             Rax;
682   UINT64             Rbx;
683   UINT64             Rcx;
684   UINT64             Rdx;
685   UINT64             Rsi;
686   UINT64             Rdi;
687   UINT64             Rbp;
688   UINT64             Rsp;
689   UINT64             R8;
690   UINT64             R9;
691   UINT64             R10;
692   UINT64             R11;
693   UINT64             R12;
694   UINT64             R13;
695   UINT64             R14;
696   UINT64             R15;
697   UINT16             Cs;
698   UINT16             Ds;
699   UINT16             Ss;
700   UINT16             Es;
701   UINT16             Fs;
702   UINT16             Gs;
703   UINT32             Resv1;
704   UINT64             Rflags;
705   UINT64             Rip;
706   UINT64             Cr0;
707   UINT64             Cr1;
708   UINT64             Cr2;
709   UINT64             Cr3;
710   UINT64             Cr4;
711   UINT64             Gdtr[2];
712   UINT64             Idtr[2];
713   UINT16             Ldtr;
714   UINT16             Tr;
715 } EFI_CONTEXT_X64_REGISTER_STATE;
716 
717 ///
718 /// The validation bit mask indicates each of the following field is in IA32/X64
719 /// Processor Error Section.
720 ///
721 typedef struct {
722   UINT64             ApicIdValid:1;
723   UINT64             CpuIdInforValid:1;
724   UINT64             ErrorInfoNum:6;
725   UINT64             ContextNum:6;
726   UINT64             Resv1:50;
727 } EFI_IA32_X64_VALID_BITS;
728 
729 #endif
730 
731 ///
732 /// Error Status Fields
733 ///
734 typedef struct {
735   UINT64          Resv1:8;
736   UINT64          Type:8;
737   UINT64          AddressSignal:1;        ///< Error in Address signals or in Address portion of transaction
738   UINT64          ControlSignal:1;        ///< Error in Control signals or in Control portion of transaction
739   UINT64          DataSignal:1;           ///< Error in Data signals or in Data portion of transaction
740   UINT64          DetectedByResponder:1;  ///< Error detected by responder
741   UINT64          DetectedByRequester:1;  ///< Error detected by requestor
742   UINT64          FirstError:1;           ///< First Error in the sequence - option field
743   UINT64          OverflowNotLogged:1;    ///< Additional errors were not logged due to lack of resources
744   UINT64          Resv2:41;
745 } EFI_GENERIC_ERROR_STATUS;
746 
747 ///
748 /// Error Type
749 ///
750 typedef enum {
751   ///
752   /// General Internal errors
753   ///
754   ErrorInternal       = 1,
755   ErrorBus            = 16,
756   ///
757   /// Component Internal errors
758   ///
759   ErrorMemStorage     = 4,        // Error in memory device
760   ErrorTlbStorage     = 5,        // TLB error in cache
761   ErrorCacheStorage   = 6,
762   ErrorFunctionalUnit = 7,
763   ErrorSelftest       = 8,
764   ErrorOverflow       = 9,
765   ///
766   /// Bus internal errors
767   ///
768   ErrorVirtualMap     = 17,
769   ErrorAccessInvalid  = 18,       // Improper access
770   ErrorUnimplAccess   = 19,       // Unimplemented memory access
771   ErrorLossOfLockstep = 20,
772   ErrorResponseInvalid= 21,       // Response not associated with request
773   ErrorParity         = 22,
774   ErrorProtocol       = 23,
775   ErrorPath           = 24,       // Detected path error
776   ErrorTimeout        = 25,       // Bus timeout
777   ErrorPoisoned       = 26        // Read data poisoned
778 } EFI_GENERIC_ERROR_STATUS_ERROR_TYPE;
779 
780 ///
781 /// Validation bit mask indicates which fields in the memory error record are valid
782 /// in Memory Error section
783 ///@{
784 #define EFI_PLATFORM_MEMORY_ERROR_STATUS_VALID                 BIT0
785 #define EFI_PLATFORM_MEMORY_PHY_ADDRESS_VALID                  BIT1
786 #define EFI_PLATFORM_MEMORY_PHY_ADDRESS_MASK_VALID             BIT2
787 #define EFI_PLATFORM_MEMORY_NODE_VALID                         BIT3
788 #define EFI_PLATFORM_MEMORY_CARD_VALID                         BIT4
789 #define EFI_PLATFORM_MEMORY_MODULE_VALID                       BIT5
790 #define EFI_PLATFORM_MEMORY_BANK_VALID                         BIT6
791 #define EFI_PLATFORM_MEMORY_DEVICE_VALID                       BIT7
792 #define EFI_PLATFORM_MEMORY_ROW_VALID                          BIT8
793 #define EFI_PLATFORM_MEMORY_COLUMN_VALID                       BIT9
794 #define EFI_PLATFORM_MEMORY_BIT_POS_VALID                      BIT10
795 #define EFI_PLATFORM_MEMORY_REQUESTOR_ID_VALID                 BIT11
796 #define EFI_PLATFORM_MEMORY_RESPONDER_ID_VALID                 BIT12
797 #define EFI_PLATFORM_MEMORY_TARGET_ID_VALID                    BIT13
798 #define EFI_PLATFORM_MEMORY_ERROR_TYPE_VALID                   BIT14
799 #define EFI_PLATFORM_MEMORY_ERROR_RANK_NUM_VALID               BIT15
800 #define EFI_PLATFORM_MEMORY_ERROR_CARD_HANDLE_VALID            BIT16
801 #define EFI_PLATFORM_MEMORY_ERROR_MODULE_HANDLE_VALID          BIT17
802 #define EFI_PLATFORM_MEMORY_ERROR_EXTENDED_ROW_BIT_16_17_VALID BIT18
803 #define EFI_PLATFORM_MEMORY_ERROR_BANK_GROUP_VALID             BIT19
804 #define EFI_PLATFORM_MEMORY_ERROR_BANK_ADDRESS_VALID           BIT20
805 #define EFI_PLATFORM_MEMORY_ERROR_CHIP_IDENTIFICATION_VALID    BIT21
806 ///@}
807 
808 ///
809 /// Memory Error Type identifies the type of error that occurred in Memory
810 /// Error section
811 ///@{
812 #define EFI_PLATFORM_MEMORY_ERROR_UNKNOWN                      0x00
813 #define EFI_PLATFORM_MEMORY_ERROR_NONE                         0x01
814 #define EFI_PLATFORM_MEMORY_ERROR_SINGLEBIT_ECC                0x02
815 #define EFI_PLATFORM_MEMORY_ERROR_MLTIBIT_ECC                  0x03
816 #define EFI_PLATFORM_MEMORY_ERROR_SINGLESYMBOLS_CHIPKILL       0x04
817 #define EFI_PLATFORM_MEMORY_ERROR_MULTISYMBOL_CHIPKILL         0x05
818 #define EFI_PLATFORM_MEMORY_ERROR_MATER_ABORT                  0x06
819 #define EFI_PLATFORM_MEMORY_ERROR_TARGET_ABORT                 0x07
820 #define EFI_PLATFORM_MEMORY_ERROR_PARITY                       0x08
821 #define EFI_PLATFORM_MEMORY_ERROR_WDT                          0x09
822 #define EFI_PLATFORM_MEMORY_ERROR_INVALID_ADDRESS              0x0A
823 #define EFI_PLATFORM_MEMORY_ERROR_MIRROR_FAILED                0x0B
824 #define EFI_PLATFORM_MEMORY_ERROR_SPARING                      0x0C
825 #define EFI_PLATFORM_MEMORY_ERROR_SCRUB_CORRECTED              0x0D
826 #define EFI_PLATFORM_MEMORY_ERROR_SCRUB_UNCORRECTED            0x0E
827 #define EFI_PLATFORM_MEMORY_ERROR_MEMORY_MAP_EVENT             0x0F
828 ///@}
829 
830 ///
831 /// Memory Error Section
832 ///
833 typedef struct {
834   UINT64                   ValidFields;
835   EFI_GENERIC_ERROR_STATUS ErrorStatus;
836   UINT64                   PhysicalAddress;      // Error physical address
837   UINT64                   PhysicalAddressMask;  // Grnaularity
838   UINT16                   Node;                 // Node #
839   UINT16                   Card;
840   UINT16                   ModuleRank;           // Module or Rank#
841   UINT16                   Bank;
842   UINT16                   Device;
843   UINT16                   Row;
844   UINT16                   Column;
845   UINT16                   BitPosition;
846   UINT64                   RequestorId;
847   UINT64                   ResponderId;
848   UINT64                   TargetId;
849   UINT8                    ErrorType;
850   UINT8                    Extended;
851   UINT16                   RankNum;
852   UINT16                   CardHandle;
853   UINT16                   ModuleHandle;
854 } EFI_PLATFORM_MEMORY_ERROR_DATA;
855 
856 ///
857 /// Validation bit mask indicates which fields in the memory error record 2 are valid
858 /// in Memory Error section 2
859 ///@{
860 #define EFI_PLATFORM_MEMORY2_ERROR_STATUS_VALID                 BIT0
861 #define EFI_PLATFORM_MEMORY2_PHY_ADDRESS_VALID                  BIT1
862 #define EFI_PLATFORM_MEMORY2_PHY_ADDRESS_MASK_VALID             BIT2
863 #define EFI_PLATFORM_MEMORY2_NODE_VALID                         BIT3
864 #define EFI_PLATFORM_MEMORY2_CARD_VALID                         BIT4
865 #define EFI_PLATFORM_MEMORY2_MODULE_VALID                       BIT5
866 #define EFI_PLATFORM_MEMORY2_BANK_VALID                         BIT6
867 #define EFI_PLATFORM_MEMORY2_DEVICE_VALID                       BIT7
868 #define EFI_PLATFORM_MEMORY2_ROW_VALID                          BIT8
869 #define EFI_PLATFORM_MEMORY2_COLUMN_VALID                       BIT9
870 #define EFI_PLATFORM_MEMORY2_RANK_VALID                         BIT10
871 #define EFI_PLATFORM_MEMORY2_BIT_POS_VALID                      BIT11
872 #define EFI_PLATFORM_MEMORY2_CHIP_ID_VALID                      BIT12
873 #define EFI_PLATFORM_MEMORY2_MEMORY_ERROR_TYPE_VALID            BIT13
874 #define EFI_PLATFORM_MEMORY2_STATUS_VALID                       BIT14
875 #define EFI_PLATFORM_MEMORY2_REQUESTOR_ID_VALID                 BIT15
876 #define EFI_PLATFORM_MEMORY2_RESPONDER_ID_VALID                 BIT16
877 #define EFI_PLATFORM_MEMORY2_TARGET_ID_VALID                    BIT17
878 #define EFI_PLATFORM_MEMORY2_CARD_HANDLE_VALID                  BIT18
879 #define EFI_PLATFORM_MEMORY2_MODULE_HANDLE_VALID                BIT19
880 #define EFI_PLATFORM_MEMORY2_BANK_GROUP_VALID                   BIT20
881 #define EFI_PLATFORM_MEMORY2_BANK_ADDRESS_VALID                 BIT21
882 ///@}
883 
884 ///
885 /// Memory Error Type identifies the type of error that occurred in Memory
886 /// Error section 2
887 ///@{
888 #define EFI_PLATFORM_MEMORY2_ERROR_UNKNOWN                      0x00
889 #define EFI_PLATFORM_MEMORY2_ERROR_NONE                         0x01
890 #define EFI_PLATFORM_MEMORY2_ERROR_SINGLEBIT_ECC                0x02
891 #define EFI_PLATFORM_MEMORY2_ERROR_MLTIBIT_ECC                  0x03
892 #define EFI_PLATFORM_MEMORY2_ERROR_SINGLESYMBOL_CHIPKILL        0x04
893 #define EFI_PLATFORM_MEMORY2_ERROR_MULTISYMBOL_CHIPKILL         0x05
894 #define EFI_PLATFORM_MEMORY2_ERROR_MASTER_ABORT                 0x06
895 #define EFI_PLATFORM_MEMORY2_ERROR_TARGET_ABORT                 0x07
896 #define EFI_PLATFORM_MEMORY2_ERROR_PARITY                       0x08
897 #define EFI_PLATFORM_MEMORY2_ERROR_WDT                          0x09
898 #define EFI_PLATFORM_MEMORY2_ERROR_INVALID_ADDRESS              0x0A
899 #define EFI_PLATFORM_MEMORY2_ERROR_MIRROR_BROKEN                0x0B
900 #define EFI_PLATFORM_MEMORY2_ERROR_MEMORY_SPARING               0x0C
901 #define EFI_PLATFORM_MEMORY2_ERROR_SCRUB_CORRECTED              0x0D
902 #define EFI_PLATFORM_MEMORY2_ERROR_SCRUB_UNCORRECTED            0x0E
903 #define EFI_PLATFORM_MEMORY2_ERROR_MEMORY_MAP_EVENT             0x0F
904 ///@}
905 
906 ///
907 /// Memory Error Section 2
908 ///
909 typedef struct {
910   UINT64                    ValidFields;
911   EFI_GENERIC_ERROR_STATUS  ErrorStatus;
912   UINT64                    PhysicalAddress;      // Error physical address
913   UINT64                    PhysicalAddressMask;  // Grnaularity
914   UINT16                    Node;                 // Node #
915   UINT16                    Card;
916   UINT16                    Module;               // Module or Rank#
917   UINT16                    Bank;
918   UINT32                    Device;
919   UINT32                    Row;
920   UINT32                    Column;
921   UINT32                    Rank;
922   UINT32                    BitPosition;
923   UINT8                     ChipId;
924   UINT8                     MemErrorType;
925   UINT8                     Status;
926   UINT8                     Reserved;
927   UINT64                    RequestorId;
928   UINT64                    ResponderId;
929   UINT64                    TargetId;
930   UINT32                    CardHandle;
931   UINT32                    ModuleHandle;
932 } EFI_PLATFORM_MEMORY2_ERROR_DATA;
933 
934 ///
935 /// Validation bits mask indicates which of the following fields is valid
936 /// in PCI Express Error Record.
937 ///@{
938 #define EFI_PCIE_ERROR_PORT_TYPE_VALID               BIT0
939 #define EFI_PCIE_ERROR_VERSION_VALID                 BIT1
940 #define EFI_PCIE_ERROR_COMMAND_STATUS_VALID          BIT2
941 #define EFI_PCIE_ERROR_DEVICE_ID_VALID               BIT3
942 #define EFI_PCIE_ERROR_SERIAL_NO_VALID               BIT4
943 #define EFI_PCIE_ERROR_BRIDGE_CRL_STS_VALID          BIT5
944 #define EFI_PCIE_ERROR_CAPABILITY_INFO_VALID         BIT6
945 #define EFI_PCIE_ERROR_AER_INFO_VALID                BIT7
946 ///@}
947 
948 ///
949 /// PCIe Device/Port Type as defined in the PCI Express capabilities register
950 ///@{
951 #define EFI_PCIE_ERROR_PORT_PCIE_ENDPOINT            0x00000000
952 #define EFI_PCIE_ERROR_PORT_PCI_ENDPOINT             0x00000001
953 #define EFI_PCIE_ERROR_PORT_ROOT_PORT                0x00000004
954 #define EFI_PCIE_ERROR_PORT_UPSWITCH_PORT            0x00000005
955 #define EFI_PCIE_ERROR_PORT_DOWNSWITCH_PORT          0x00000006
956 #define EFI_PCIE_ERROR_PORT_PCIE_TO_PCI_BRIDGE       0x00000007
957 #define EFI_PCIE_ERROR_PORT_PCI_TO_PCIE_BRIDGE       0x00000008
958 #define EFI_PCIE_ERROR_PORT_ROOT_INT_ENDPOINT        0x00000009
959 #define EFI_PCIE_ERROR_PORT_ROOT_EVENT_COLLECTOR     0x0000000A
960 ///@}
961 
962 ///
963 /// PCI Slot number
964 ///
965 typedef struct {
966   UINT16          Resv1:3;
967   UINT16          Number:13;
968 } EFI_GENERIC_ERROR_PCI_SLOT;
969 
970 ///
971 /// PCIe Root Port PCI/bridge PCI compatible device number and
972 /// bus number information to uniquely identify the root port or
973 /// bridge. Default values for both the bus numbers is zero.
974 ///
975 typedef struct {
976   UINT16                     VendorId;
977   UINT16                     DeviceId;
978   UINT8                      ClassCode[3];
979   UINT8                      Function;
980   UINT8                      Device;
981   UINT16                     Segment;
982   UINT8                      PrimaryOrDeviceBus;
983   UINT8                      SecondaryBus;
984   EFI_GENERIC_ERROR_PCI_SLOT Slot;
985   UINT8                      Resv1;
986 } EFI_GENERIC_ERROR_PCIE_DEV_BRIDGE_ID;
987 
988 ///
989 /// PCIe Capability Structure
990 ///
991 typedef struct {
992   UINT8           PcieCap[60];
993 } EFI_PCIE_ERROR_DATA_CAPABILITY;
994 
995 ///
996 /// PCIe Advanced Error Reporting Extended Capability Structure.
997 ///
998 typedef struct {
999   UINT8           PcieAer[96];
1000 } EFI_PCIE_ERROR_DATA_AER;
1001 
1002 ///
1003 /// PCI Express Error Record
1004 ///
1005 typedef struct {
1006   UINT64                               ValidFields;
1007   UINT32                               PortType;
1008   UINT32                               Version;
1009   UINT32                               CommandStatus;
1010   UINT32                               Resv2;
1011   EFI_GENERIC_ERROR_PCIE_DEV_BRIDGE_ID DevBridge;
1012   UINT64                               SerialNo;
1013   UINT32                               BridgeControlStatus;
1014   EFI_PCIE_ERROR_DATA_CAPABILITY       Capability;
1015   EFI_PCIE_ERROR_DATA_AER              AerInfo;
1016 } EFI_PCIE_ERROR_DATA;
1017 
1018 ///
1019 /// Validation bits Indicates which of the following fields is valid
1020 /// in PCI/PCI-X Bus Error Section.
1021 ///@{
1022 #define EFI_PCI_PCIX_BUS_ERROR_STATUS_VALID          BIT0
1023 #define EFI_PCI_PCIX_BUS_ERROR_TYPE_VALID            BIT1
1024 #define EFI_PCI_PCIX_BUS_ERROR_BUS_ID_VALID          BIT2
1025 #define EFI_PCI_PCIX_BUS_ERROR_BUS_ADDRESS_VALID     BIT3
1026 #define EFI_PCI_PCIX_BUS_ERROR_BUS_DATA_VALID        BIT4
1027 #define EFI_PCI_PCIX_BUS_ERROR_COMMAND_VALID         BIT5
1028 #define EFI_PCI_PCIX_BUS_ERROR_REQUESTOR_ID_VALID    BIT6
1029 #define EFI_PCI_PCIX_BUS_ERROR_COMPLETER_ID_VALID    BIT7
1030 #define EFI_PCI_PCIX_BUS_ERROR_TARGET_ID_VALID       BIT8
1031 ///@}
1032 
1033 ///
1034 /// PCI Bus Error Type in PCI/PCI-X Bus Error Section
1035 ///@{
1036 #define EFI_PCI_PCIX_BUS_ERROR_UNKNOWN               0x0000
1037 #define EFI_PCI_PCIX_BUS_ERROR_DATA_PARITY           0x0001
1038 #define EFI_PCI_PCIX_BUS_ERROR_SYSTEM                0x0002
1039 #define EFI_PCI_PCIX_BUS_ERROR_MASTER_ABORT          0x0003
1040 #define EFI_PCI_PCIX_BUS_ERROR_BUS_TIMEOUT           0x0004
1041 #define EFI_PCI_PCIX_BUS_ERROR_MASTER_DATA_PARITY    0x0005
1042 #define EFI_PCI_PCIX_BUS_ERROR_ADDRESS_PARITY        0x0006
1043 #define EFI_PCI_PCIX_BUS_ERROR_COMMAND_PARITY        0x0007
1044 ///@}
1045 
1046 ///
1047 /// PCI/PCI-X Bus Error Section
1048 ///
1049 typedef struct {
1050   UINT64                   ValidFields;
1051   EFI_GENERIC_ERROR_STATUS ErrorStatus;
1052   UINT16                   Type;
1053   UINT16                   BusId;
1054   UINT32                   Resv2;
1055   UINT64                   BusAddress;
1056   UINT64                   BusData;
1057   UINT64                   BusCommand;
1058   UINT64                   RequestorId;
1059   UINT64                   ResponderId;
1060   UINT64                   TargetId;
1061 } EFI_PCI_PCIX_BUS_ERROR_DATA;
1062 
1063 ///
1064 /// Validation bits Indicates which of the following fields is valid
1065 /// in PCI/PCI-X Component Error Section.
1066 ///@{
1067 #define EFI_PCI_PCIX_DEVICE_ERROR_STATUS_VALID                 BIT0
1068 #define EFI_PCI_PCIX_DEVICE_ERROR_ID_INFO_VALID                BIT1
1069 #define EFI_PCI_PCIX_DEVICE_ERROR_MEM_NUM_VALID                BIT2
1070 #define EFI_PCI_PCIX_DEVICE_ERROR_IO_NUM_VALID                 BIT3
1071 #define EFI_PCI_PCIX_DEVICE_ERROR_REG_DATA_PAIR_VALID          BIT4
1072 ///@}
1073 
1074 ///
1075 /// PCI/PCI-X Device Identification Information
1076 ///
1077 typedef struct {
1078   UINT16          VendorId;
1079   UINT16          DeviceId;
1080   UINT8           ClassCode[3];
1081   UINT8           Function;
1082   UINT8           Device;
1083   UINT8           Bus;
1084   UINT8           Segment;
1085   UINT8           Resv1;
1086   UINT32          Resv2;
1087 } EFI_GENERIC_ERROR_PCI_DEVICE_ID;
1088 
1089 ///
1090 /// Identifies the type of firmware error record
1091 ///
1092 #define EFI_FIRMWARE_ERROR_TYPE_IPF_SAL              0x00
1093 
1094 ///
1095 /// Firmware Error Record Section
1096 ///
1097 typedef struct {
1098   UINT8       ErrorType;
1099   UINT8       Resv1[7];
1100   UINT64      RecordId;
1101 } EFI_FIRMWARE_ERROR_DATA;
1102 
1103 ///
1104 /// Fault Reason in DMAr Generic Error Section
1105 ///@{
1106 #define EFI_DMA_FAULT_REASON_TABLE_ENTRY_NOT_PRESENT           0x01
1107 #define EFI_DMA_FAULT_REASON_TABLE_ENTRY_INVALID               0x02
1108 #define EFI_DMA_FAULT_REASON_ACCESS_MAPPING_TABLE_ERROR        0x03
1109 #define EFI_DMA_FAULT_REASON_RESV_BIT_ERROR_IN_MAPPING_TABLE   0x04
1110 #define EFI_DMA_FAULT_REASON_ACCESS_ADDR_OUT_OF_SPACE          0x05
1111 #define EFI_DMA_FAULT_REASON_INVALID_ACCESS                    0x06
1112 #define EFI_DMA_FAULT_REASON_INVALID_REQUEST                   0x07
1113 #define EFI_DMA_FAULT_REASON_ACCESS_TRANSLATE_TABLE_ERROR      0x08
1114 #define EFI_DMA_FAULT_REASON_RESV_BIT_ERROR_IN_TRANSLATE_TABLE 0x09
1115 #define EFI_DMA_FAULT_REASON_INVALID_COMMAOND                  0x0A
1116 #define EFI_DMA_FAULT_REASON_ACCESS_COMMAND_BUFFER_ERROR       0x0B
1117 ///@}
1118 
1119 ///
1120 /// DMA access type in DMAr Generic Error Section
1121 ///@{
1122 #define EFI_DMA_ACCESS_TYPE_READ                     0x00
1123 #define EFI_DMA_ACCESS_TYPE_WRITE                    0x01
1124 ///@}
1125 
1126 ///
1127 /// DMA address type in DMAr Generic Error Section
1128 ///@{
1129 #define EFI_DMA_ADDRESS_UNTRANSLATED                 0x00
1130 #define EFI_DMA_ADDRESS_TRANSLATION                  0x01
1131 ///@}
1132 
1133 ///
1134 /// Architecture type in DMAr Generic Error Section
1135 ///@{
1136 #define EFI_DMA_ARCH_TYPE_VT                         0x01
1137 #define EFI_DMA_ARCH_TYPE_IOMMU                      0x02
1138 ///@}
1139 
1140 ///
1141 /// DMAr Generic Error Section
1142 ///
1143 typedef struct {
1144   UINT16      RequesterId;
1145   UINT16      SegmentNumber;
1146   UINT8       FaultReason;
1147   UINT8       AccessType;
1148   UINT8       AddressType;
1149   UINT8       ArchType;
1150   UINT64      DeviceAddr;
1151   UINT8       Resv1[16];
1152 } EFI_DMAR_GENERIC_ERROR_DATA;
1153 
1154 ///
1155 /// Intel VT for Directed I/O specific DMAr Errors
1156 ///
1157 typedef struct {
1158   UINT8           Version;
1159   UINT8           Revision;
1160   UINT8           OemId[6];
1161   UINT64          Capability;
1162   UINT64          CapabilityEx;
1163   UINT32          GlobalCommand;
1164   UINT32          GlobalStatus;
1165   UINT32          FaultStatus;
1166   UINT8           Resv1[12];
1167   UINT64          FaultRecord[2];
1168   UINT64          RootEntry[2];
1169   UINT64          ContextEntry[2];
1170   UINT64          PteL6;
1171   UINT64          PteL5;
1172   UINT64          PteL4;
1173   UINT64          PteL3;
1174   UINT64          PteL2;
1175   UINT64          PteL1;
1176 } EFI_DIRECTED_IO_DMAR_ERROR_DATA;
1177 
1178 ///
1179 /// IOMMU specific DMAr Errors
1180 ///
1181 typedef struct {
1182   UINT8           Revision;
1183   UINT8           Resv1[7];
1184   UINT64          Control;
1185   UINT64          Status;
1186   UINT8           Resv2[8];
1187   UINT64          EventLogEntry[2];
1188   UINT8           Resv3[16];
1189   UINT64          DeviceTableEntry[4];
1190   UINT64          PteL6;
1191   UINT64          PteL5;
1192   UINT64          PteL4;
1193   UINT64          PteL3;
1194   UINT64          PteL2;
1195   UINT64          PteL1;
1196 } EFI_IOMMU_DMAR_ERROR_DATA;
1197 
1198 #pragma pack()
1199 
1200 extern EFI_GUID gEfiEventNotificationTypeCmcGuid;
1201 extern EFI_GUID gEfiEventNotificationTypeCpeGuid;
1202 extern EFI_GUID gEfiEventNotificationTypeMceGuid;
1203 extern EFI_GUID gEfiEventNotificationTypePcieGuid;
1204 extern EFI_GUID gEfiEventNotificationTypeInitGuid;
1205 extern EFI_GUID gEfiEventNotificationTypeNmiGuid;
1206 extern EFI_GUID gEfiEventNotificationTypeBootGuid;
1207 extern EFI_GUID gEfiEventNotificationTypeDmarGuid;
1208 
1209 extern EFI_GUID gEfiProcessorGenericErrorSectionGuid;
1210 extern EFI_GUID gEfiProcessorSpecificErrorSectionGuid;
1211 extern EFI_GUID gEfiIa32X64ProcessorErrorSectionGuid;
1212 extern EFI_GUID gEfiArmProcessorErrorSectionGuid ;
1213 extern EFI_GUID gEfiPlatformMemoryErrorSectionGuid;
1214 extern EFI_GUID gEfiPlatformMemory2ErrorSectionGuid;
1215 extern EFI_GUID gEfiPcieErrorSectionGuid;
1216 extern EFI_GUID gEfiFirmwareErrorSectionGuid;
1217 extern EFI_GUID gEfiPciBusErrorSectionGuid;
1218 extern EFI_GUID gEfiPciDevErrorSectionGuid;
1219 extern EFI_GUID gEfiDMArGenericErrorSectionGuid;
1220 extern EFI_GUID gEfiDirectedIoDMArErrorSectionGuid;
1221 extern EFI_GUID gEfiIommuDMArErrorSectionGuid;
1222 
1223 #if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64)
1224 ///
1225 /// IA32 and x64 Specific definitions.
1226 ///
1227 
1228 extern EFI_GUID gEfiIa32X64ErrorTypeCacheCheckGuid;
1229 extern EFI_GUID gEfiIa32X64ErrorTypeTlbCheckGuid;
1230 extern EFI_GUID gEfiIa32X64ErrorTypeBusCheckGuid;
1231 extern EFI_GUID gEfiIa32X64ErrorTypeMsCheckGuid;
1232 
1233 #endif
1234 
1235 #endif
1236