1#pragma once
2
3#if defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
4
5typedef union _MCI_ADDR {
6  _ANONYMOUS_STRUCT struct {
7    ULONG Address;
8    ULONG Reserved;
9  } DUMMYSTRUCTNAME;
10  ULONGLONG QuadPart;
11} MCI_ADDR, *PMCI_ADDR;
12
13typedef enum {
14  HAL_MCE_RECORD,
15  HAL_MCA_RECORD
16} MCA_EXCEPTION_TYPE;
17
18#if defined(_AMD64_)
19
20#if (NTDDI_VERSION <= NTDDI_WINXP)
21
22typedef union _MCI_STATS {
23  struct {
24    USHORT McaCod;
25    USHORT ModelErrorCode;
26    ULONG OtherInfo:25;
27    ULONG Damage:1;
28    ULONG AddressValid:1;
29    ULONG MiscValid:1;
30    ULONG Enabled:1;
31    ULONG Uncorrected:1;
32    ULONG OverFlow:1;
33    ULONG Valid:1;
34  } MciStatus;
35  ULONG64 QuadPart;
36} MCI_STATS, *PMCI_STATS;
37
38#else
39
40typedef union _MCI_STATS {
41  struct {
42    USHORT McaErrorCode;
43    USHORT ModelErrorCode;
44    ULONG OtherInformation:25;
45    ULONG ContextCorrupt:1;
46    ULONG AddressValid:1;
47    ULONG MiscValid:1;
48    ULONG ErrorEnabled:1;
49    ULONG UncorrectedError:1;
50    ULONG StatusOverFlow:1;
51    ULONG Valid:1;
52  } MciStatus;
53  ULONG64 QuadPart;
54} MCI_STATS, *PMCI_STATS;
55
56#endif /* (NTDDI_VERSION <= NTDDI_WINXP) */
57
58#endif /* defined(_AMD64_) */
59
60#if defined(_X86_)
61typedef union _MCI_STATS {
62  struct {
63    USHORT McaCod;
64    USHORT MsCod;
65    ULONG OtherInfo:25;
66    ULONG Damage:1;
67    ULONG AddressValid:1;
68    ULONG MiscValid:1;
69    ULONG Enabled:1;
70    ULONG UnCorrected:1;
71    ULONG OverFlow:1;
72    ULONG Valid:1;
73  } MciStats;
74  ULONGLONG QuadPart;
75} MCI_STATS, *PMCI_STATS;
76#endif
77
78#define MCA_EXTREG_V2MAX               24
79
80#if defined(_X86_) || defined(_AMD64_)
81
82#if (NTDDI_VERSION >= NTDDI_WINXP)
83
84typedef struct _MCA_EXCEPTION {
85  ULONG VersionNumber;
86  MCA_EXCEPTION_TYPE ExceptionType;
87  LARGE_INTEGER TimeStamp;
88  ULONG ProcessorNumber;
89  ULONG Reserved1;
90  union {
91    struct {
92      UCHAR BankNumber;
93      UCHAR Reserved2[7];
94      MCI_STATS Status;
95      MCI_ADDR Address;
96      ULONGLONG Misc;
97    } Mca;
98    struct {
99      ULONGLONG Address;
100      ULONGLONG Type;
101    } Mce;
102  } u;
103  ULONG ExtCnt;
104  ULONG Reserved3;
105  ULONGLONG ExtReg[MCA_EXTREG_V2MAX];
106} MCA_EXCEPTION, *PMCA_EXCEPTION;
107
108#else
109
110typedef struct _MCA_EXCEPTION {
111  ULONG VersionNumber;
112  MCA_EXCEPTION_TYPE ExceptionType;
113  LARGE_INTEGER TimeStamp;
114  ULONG ProcessorNumber;
115  ULONG Reserved1;
116  union {
117    struct {
118      UCHAR BankNumber;
119      UCHAR Reserved2[7];
120      MCI_STATS Status;
121      MCI_ADDR Address;
122      ULONGLONG Misc;
123    } Mca;
124    struct {
125      ULONGLONG Address;
126      ULONGLONG Type;
127    } Mce;
128  } u;
129} MCA_EXCEPTION, *PMCA_EXCEPTION;
130
131#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
132
133typedef MCA_EXCEPTION CMC_EXCEPTION, *PCMC_EXCEPTION;
134typedef MCA_EXCEPTION CPE_EXCEPTION, *PCPE_EXCEPTION;
135
136#if (NTDDI_VERSION >= NTDDI_WINXP)
137#define MCA_EXCEPTION_V1_SIZE FIELD_OFFSET(MCA_EXCEPTION, ExtCnt)
138#define MCA_EXCEPTION_V2_SIZE sizeof(struct _MCA_EXCEPTION)
139#endif
140
141#endif /* defined(_X86_) || defined(_AMD64_) */
142
143#if defined(_AMD64_) || defined(_IA64_)
144
145typedef UCHAR ERROR_SEVERITY, *PERROR_SEVERITY;
146
147typedef enum _ERROR_SEVERITY_VALUE {
148  ErrorRecoverable = 0,
149  ErrorFatal = 1,
150  ErrorCorrected = 2,
151  ErrorOthers = 3,
152} ERROR_SEVERITY_VALUE;
153
154#endif
155
156#if defined(_IA64_)
157
158typedef union _ERROR_REVISION {
159  USHORT Revision;
160  _ANONYMOUS_STRUCT struct {
161    UCHAR Minor;
162    UCHAR Major;
163  } DUMMYSTRUCTNAME;
164} ERROR_REVISION, *PERROR_REVISION;
165
166#if (NTDDI_VERSION > NTDDI_WINXP)
167#define ERROR_MAJOR_REVISION_SAL_03_00      0
168#define ERROR_MINOR_REVISION_SAL_03_00      2
169#define ERROR_REVISION_SAL_03_00 {ERROR_MINOR_REVISION_SAL_03_00,ERROR_MAJOR_REVISION_SAL_03_00}
170#define ERROR_FIXED_SECTION_REVISION {2,0}
171#else
172#define ERROR_REVISION_SAL_03_00 {2,0}
173#endif /* (NTDDI_VERSION > NTDDI_WINXP) */
174
175typedef union _ERROR_TIMESTAMP {
176  ULONGLONG TimeStamp;
177  _ANONYMOUS_STRUCT struct {
178    UCHAR Seconds;
179    UCHAR Minutes;
180    UCHAR Hours;
181    UCHAR Reserved;
182    UCHAR Day;
183    UCHAR Month;
184    UCHAR Year;
185    UCHAR Century;
186  } DUMMYSTRUCTNAME;
187} ERROR_TIMESTAMP, *PERROR_TIMESTAMP;
188
189typedef struct _ERROR_GUID {
190  ULONG Data1;
191  USHORT Data2;
192  USHORT Data3;
193  UCHAR Data4[8];
194} ERROR_GUID, *PERROR_GUID;
195
196typedef ERROR_GUID            _ERROR_DEVICE_GUID;
197typedef _ERROR_DEVICE_GUID    ERROR_DEVICE_GUID, *PERROR_DEVICE_GUID;
198
199typedef ERROR_GUID            _ERROR_PLATFORM_GUID;
200typedef _ERROR_PLATFORM_GUID  ERROR_PLATFORM_GUID, *PERROR_PLATFORM_GUID;
201
202typedef union _ERROR_RECORD_VALID {
203  UCHAR Valid;
204  _ANONYMOUS_STRUCT struct {
205    UCHAR OemPlatformID:1;
206    UCHAR Reserved:7;
207  } DUMMYSTRUCTNAME;
208} ERROR_RECORD_VALID, *PERROR_RECORD_VALID;
209
210typedef struct _ERROR_RECORD_HEADER {
211  ULONGLONG Id;
212  ERROR_REVISION Revision;
213  ERROR_SEVERITY ErrorSeverity;
214  ERROR_RECORD_VALID Valid;
215  ULONG Length;
216  ERROR_TIMESTAMP TimeStamp;
217  UCHAR OemPlatformId[16];
218} ERROR_RECORD_HEADER, *PERROR_RECORD_HEADER;
219
220typedef union _ERROR_RECOVERY_INFO {
221  UCHAR RecoveryInfo;
222  _ANONYMOUS_STRUCT struct {
223    UCHAR Corrected:1;
224    UCHAR NotContained:1;
225    UCHAR Reset:1;
226    UCHAR Reserved:4;
227    UCHAR Valid:1;
228  } DUMMYSTRUCTNAME;
229} ERROR_RECOVERY_INFO, *PERROR_RECOVERY_INFO;
230
231typedef struct _ERROR_SECTION_HEADER {
232  ERROR_DEVICE_GUID Guid;
233  ERROR_REVISION Revision;
234  ERROR_RECOVERY_INFO RecoveryInfo;
235  UCHAR Reserved;
236  ULONG Length;
237} ERROR_SECTION_HEADER, *PERROR_SECTION_HEADER;
238
239#if !defined(__midl)
240__inline
241USHORT
242NTAPI
243GetFwMceLogProcessorNumber(
244  PERROR_RECORD_HEADER Log)
245{
246  PERROR_SECTION_HEADER section = (PERROR_SECTION_HEADER)((ULONG64)Log + sizeof(*Log));
247  USHORT lid = (USHORT)((UCHAR)(section->Reserved));
248#ifdef NONAMELESSUNION
249  lid |= (USHORT)((UCHAR)(Log->TimeStamp.s.Reserved) << 8);
250#else
251  lid |= (USHORT)((UCHAR)(Log->TimeStamp.Reserved) << 8);
252#endif
253  return( lid );
254}
255#endif /* !__midl */
256
257#define ERROR_PROCESSOR_GUID {0xe429faf1, 0x3cb7, 0x11d4, {0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}}
258
259typedef union _ERROR_MODINFO_VALID {
260  ULONGLONG Valid;
261  _ANONYMOUS_STRUCT struct {
262    ULONGLONG CheckInfo:1;
263    ULONGLONG RequestorIdentifier:1;
264    ULONGLONG ResponderIdentifier:1;
265    ULONGLONG TargetIdentifier:1;
266    ULONGLONG PreciseIP:1;
267    ULONGLONG Reserved:59;
268  } DUMMYSTRUCTNAME;
269} ERROR_MODINFO_VALID, *PERROR_MODINFO_VALID;
270
271typedef enum _ERROR_CHECK_IS {
272  isIA64 = 0,
273  isIA32 = 1,
274} ERROR_CHECK_IS;
275
276typedef enum _ERROR_CACHE_CHECK_OPERATION {
277  CacheUnknownOp = 0,
278  CacheLoad = 1,
279  CacheStore = 2,
280  CacheInstructionFetch = 3,
281  CacheDataPrefetch = 4,
282  CacheSnoop = 5,
283  CacheCastOut = 6,
284  CacheMoveIn = 7,
285} ERROR_CACHE_CHECK_OPERATION;
286
287typedef enum _ERROR_CACHE_CHECK_MESI {
288  CacheInvalid = 0,
289  CacheHeldShared = 1,
290  CacheHeldExclusive = 2,
291  CacheModified = 3,
292} ERROR_CACHE_CHECK_MESI;
293
294#if (NTDDI_VERSION >= NTDDI_VISTA)
295
296typedef union _ERROR_CACHE_CHECK {
297  ULONGLONG CacheCheck;
298  _ANONYMOUS_STRUCT struct {
299    ULONGLONG Operation:4;
300    ULONGLONG Level:2;
301    ULONGLONG Reserved1:2;
302    ULONGLONG DataLine:1;
303    ULONGLONG TagLine:1;
304    ULONGLONG DataCache:1;
305    ULONGLONG InstructionCache:1;
306    ULONGLONG MESI:3;
307    ULONGLONG MESIValid:1;
308    ULONGLONG Way:5;
309    ULONGLONG WayIndexValid:1;
310    ULONGLONG Reserved2:1;
311    ULONGLONG DP:1;
312    ULONGLONG Reserved3:8;
313    ULONGLONG Index:20;
314    ULONGLONG Reserved4:2;
315    ULONGLONG InstructionSet:1;
316    ULONGLONG InstructionSetValid:1;
317    ULONGLONG PrivilegeLevel:2;
318    ULONGLONG PrivilegeLevelValid:1;
319    ULONGLONG MachineCheckCorrected:1;
320    ULONGLONG TargetAddressValid:1;
321    ULONGLONG RequestIdValid:1;
322    ULONGLONG ResponderIdValid:1;
323    ULONGLONG PreciseIPValid:1;
324  } DUMMYSTRUCTNAME;
325} ERROR_CACHE_CHECK, *PERROR_CACHE_CHECK;
326
327# else
328
329typedef union _ERROR_CACHE_CHECK {
330  ULONGLONG CacheCheck;
331  _ANONYMOUS_STRUCT struct {
332    ULONGLONG Operation:4;
333    ULONGLONG Level:2;
334    ULONGLONG Reserved1:2;
335    ULONGLONG DataLine:1;
336    ULONGLONG TagLine:1;
337    ULONGLONG DataCache:1;
338    ULONGLONG InstructionCache:1;
339    ULONGLONG MESI:3;
340    ULONGLONG MESIValid:1;
341    ULONGLONG Way:5;
342    ULONGLONG WayIndexValid:1;
343    ULONGLONG Reserved2:10;
344    ULONGLONG Index:20;
345    ULONGLONG Reserved3:2;
346    ULONGLONG InstructionSet:1;
347    ULONGLONG InstructionSetValid:1;
348    ULONGLONG PrivilegeLevel:2;
349    ULONGLONG PrivilegeLevelValid:1;
350    ULONGLONG MachineCheckCorrected:1;
351    ULONGLONG TargetAddressValid:1;
352    ULONGLONG RequestIdValid:1;
353    ULONGLONG ResponderIdValid:1;
354    ULONGLONG PreciseIPValid:1;
355  } DUMMYSTRUCTNAME;
356} ERROR_CACHE_CHECK, *PERROR_CACHE_CHECK;
357
358#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
359
360typedef enum _ERROR_TLB_CHECK_OPERATION {
361  TlbUnknownOp = 0,
362  TlbAccessWithLoad = 1,
363  TlbAccessWithStore = 2,
364  TlbAccessWithInstructionFetch = 3,
365  TlbAccessWithDataPrefetch = 4,
366  TlbShootDown = 5,
367  TlbProbe = 6,
368  TlbVhptFill = 7,
369  TlbPurge = 8,
370} ERROR_TLB_CHECK_OPERATION;
371
372typedef union _ERROR_TLB_CHECK {
373  ULONGLONG TlbCheck;
374  _ANONYMOUS_STRUCT struct {
375    ULONGLONG TRSlot:8;
376    ULONGLONG TRSlotValid:1;
377    ULONGLONG Reserved1:1;
378    ULONGLONG Level:2;
379    ULONGLONG Reserved2:4;
380    ULONGLONG DataTransReg:1;
381    ULONGLONG InstructionTransReg:1;
382    ULONGLONG DataTransCache:1;
383    ULONGLONG InstructionTransCache:1;
384    ULONGLONG Operation:4;
385    ULONGLONG Reserved3:30;
386    ULONGLONG InstructionSet:1;
387    ULONGLONG InstructionSetValid:1;
388    ULONGLONG PrivilegeLevel:2;
389    ULONGLONG PrivilegeLevelValid:1;
390    ULONGLONG MachineCheckCorrected:1;
391    ULONGLONG TargetAddressValid:1;
392    ULONGLONG RequestIdValid:1;
393    ULONGLONG ResponderIdValid:1;
394    ULONGLONG PreciseIPValid:1;
395  } DUMMYSTRUCTNAME;
396} ERROR_TLB_CHECK, *PERROR_TLB_CHECK;
397
398typedef enum _ERROR_BUS_CHECK_OPERATION {
399  BusUnknownOp = 0,
400  BusPartialRead = 1,
401  BusPartialWrite = 2,
402  BusFullLineRead = 3,
403  BusFullLineWrite = 4,
404  BusWriteBack = 5,
405  BusSnoopProbe = 6,
406  BusIncomingPtcG = 7,
407  BusWriteCoalescing = 8,
408} ERROR_BUS_CHECK_OPERATION;
409
410#if (NTDDI_VERSION >= NTDDI_VISTA)
411
412typedef union _ERROR_BUS_CHECK {
413  ULONGLONG BusCheck;
414  _ANONYMOUS_STRUCT struct {
415    ULONGLONG Size:5;
416    ULONGLONG Internal:1;
417    ULONGLONG External:1;
418    ULONGLONG CacheTransfer:1;
419    ULONGLONG Type:8;
420    ULONGLONG Severity:5;
421    ULONGLONG Hierarchy:2;
422    ULONGLONG DP:1;
423    ULONGLONG Status:8;
424    ULONGLONG Reserved1:22;
425    ULONGLONG InstructionSet:1;
426    ULONGLONG InstructionSetValid:1;
427    ULONGLONG PrivilegeLevel:2;
428    ULONGLONG PrivilegeLevelValid:1;
429    ULONGLONG MachineCheckCorrected:1;
430    ULONGLONG TargetAddressValid:1;
431    ULONGLONG RequestIdValid:1;
432    ULONGLONG ResponderIdValid:1;
433    ULONGLONG PreciseIPValid:1;
434  } DUMMYSTRUCTNAME;
435} ERROR_BUS_CHECK, *PERROR_BUS_CHECK;
436
437#else
438
439typedef union _ERROR_BUS_CHECK {
440  ULONGLONG BusCheck;
441  _ANONYMOUS_STRUCT struct {
442    ULONGLONG Size:5;
443    ULONGLONG Internal:1;
444    ULONGLONG External:1;
445    ULONGLONG CacheTransfer:1;
446    ULONGLONG Type:8;
447    ULONGLONG Severity:5;
448    ULONGLONG Hierarchy:2;
449    ULONGLONG Reserved1:1;
450    ULONGLONG Status:8;
451    ULONGLONG Reserved2:22;
452    ULONGLONG InstructionSet:1;
453    ULONGLONG InstructionSetValid:1;
454    ULONGLONG PrivilegeLevel:2;
455    ULONGLONG PrivilegeLevelValid:1;
456    ULONGLONG MachineCheckCorrected:1;
457    ULONGLONG TargetAddressValid:1;
458    ULONGLONG RequestIdValid:1;
459    ULONGLONG ResponderIdValid:1;
460    ULONGLONG PreciseIPValid:1;
461  } DUMMYSTRUCTNAME;
462} ERROR_BUS_CHECK, *PERROR_BUS_CHECK;
463
464#endif
465
466typedef enum _ERROR_REGFILE_CHECK_IDENTIFIER {
467  RegFileUnknownId = 0,
468  GeneralRegisterBank1 = 1,
469  GeneralRegisterBank0 = 2,
470  FloatingPointRegister = 3,
471  BranchRegister = 4,
472  PredicateRegister = 5,
473  ApplicationRegister = 6,
474  ControlRegister = 7,
475  RegionRegister = 8,
476  ProtectionKeyRegister = 9,
477  DataBreakPointRegister = 10,
478  InstructionBreakPointRegister = 11,
479  PerformanceMonitorControlRegister = 12,
480  PerformanceMonitorDataRegister = 13,
481} ERROR_REGFILE_CHECK_IDENTIFIER;
482
483typedef enum _ERROR_REGFILE_CHECK_OPERATION {
484  RegFileUnknownOp = 0,
485  RegFileRead = 1,
486  RegFileWrite = 2,
487} ERROR_REGFILE_CHECK_OPERATION;
488
489typedef union _ERROR_REGFILE_CHECK {
490  ULONGLONG RegFileCheck;
491  _ANONYMOUS_STRUCT struct {
492    ULONGLONG Identifier:4;
493    ULONGLONG Operation:4;
494    ULONGLONG RegisterNumber:7;
495    ULONGLONG RegisterNumberValid:1;
496    ULONGLONG Reserved1:38;
497    ULONGLONG InstructionSet:1;
498    ULONGLONG InstructionSetValid:1;
499    ULONGLONG PrivilegeLevel:2;
500    ULONGLONG PrivilegeLevelValid:1;
501    ULONGLONG MachineCheckCorrected:1;
502    ULONGLONG Reserved2:3;
503    ULONGLONG PreciseIPValid:1;
504  } DUMMYSTRUCTNAME;
505} ERROR_REGFILE_CHECK, *PERROR_REGFILE_CHECK;
506
507#if (NTDDK_VERSION <= WINXP)
508typedef enum _ERROR_MS_CHECK_OPERATION {
509  MsUnknownOp = 0,
510  MsReadOrLoad = 1,
511  MsWriteOrStore = 2
512} ERROR_MS_CHECK_OPERATION;
513#else
514typedef enum _ERROR_MS_CHECK_OPERATION {
515  MsUnknownOp = 0,
516  MsReadOrLoad = 1,
517  MsWriteOrStore = 2,
518  MsOverTemperature = 3,
519  MsNormalTemperature = 4
520} ERROR_MS_CHECK_OPERATION;
521#endif
522
523typedef union _ERROR_MS_CHECK {
524  ULONGLONG MsCheck;
525  _ANONYMOUS_STRUCT struct {
526    ULONGLONG StructureIdentifier:5;
527    ULONGLONG Level:3;
528    ULONGLONG ArrayId:4;
529    ULONGLONG Operation:4;
530    ULONGLONG Way:6;
531    ULONGLONG WayValid:1;
532    ULONGLONG IndexValid:1;
533    ULONGLONG Reserved1:8;
534    ULONGLONG Index:8;
535    ULONGLONG Reserved2:14;
536    ULONGLONG InstructionSet:1;
537    ULONGLONG InstructionSetValid:1;
538    ULONGLONG PrivilegeLevel:2;
539    ULONGLONG PrivilegeLevelValid:1;
540    ULONGLONG MachineCheckCorrected:1;
541    ULONGLONG TargetAddressValid:1;
542    ULONGLONG RequestIdValid:1;
543    ULONGLONG ResponderIdValid:1;
544    ULONGLONG PreciseIPValid:1;
545  } DUMMYSTRUCTNAME;
546} ERROR_MS_CHECK, *PERROR_MS_CHECK;
547
548typedef union _ERROR_CHECK_INFO {
549  ULONGLONG CheckInfo;
550  ERROR_CACHE_CHECK CacheCheck;
551  ERROR_TLB_CHECK TlbCheck;
552  ERROR_BUS_CHECK BusCheck;
553  ERROR_REGFILE_CHECK RegFileCheck;
554  ERROR_MS_CHECK MsCheck;
555} ERROR_CHECK_INFO, *PERROR_CHECK_INFO;
556
557typedef struct _ERROR_MODINFO {
558  ERROR_MODINFO_VALID Valid;
559  ERROR_CHECK_INFO CheckInfo;
560  ULONGLONG RequestorId;
561  ULONGLONG ResponderId;
562  ULONGLONG TargetId;
563  ULONGLONG PreciseIP;
564} ERROR_MODINFO, *PERROR_MODINFO;
565
566typedef union _ERROR_PROCESSOR_VALID {
567  ULONGLONG Valid;
568  _ANONYMOUS_STRUCT struct {
569    ULONGLONG ErrorMap:1;
570    ULONGLONG StateParameter:1;
571    ULONGLONG CRLid:1;
572    ULONGLONG StaticStruct:1;
573    ULONGLONG CacheCheckNum:4;
574    ULONGLONG TlbCheckNum:4;
575    ULONGLONG BusCheckNum:4;
576    ULONGLONG RegFileCheckNum:4;
577    ULONGLONG MsCheckNum:4;
578    ULONGLONG CpuIdInfo:1;
579    ULONGLONG Reserved:39;
580  } DUMMYSTRUCTNAME;
581} ERROR_PROCESSOR_VALID, *PERROR_PROCESSOR_VALID;
582
583typedef union _ERROR_PROCESSOR_ERROR_MAP {
584  ULONGLONG ErrorMap;
585  _ANONYMOUS_STRUCT struct {
586    ULONGLONG   Cid:4;
587    ULONGLONG   Tid:4;
588    ULONGLONG   Eic:4;
589    ULONGLONG   Edc:4;
590    ULONGLONG   Eit:4;
591    ULONGLONG   Edt:4;
592    ULONGLONG   Ebh:4;
593    ULONGLONG   Erf:4;
594    ULONGLONG   Ems:16;
595    ULONGLONG   Reserved:16;
596  } DUMMYSTRUCTNAME;
597} ERROR_PROCESSOR_ERROR_MAP, *PERROR_PROCESSOR_ERROR_MAP;
598
599typedef ERROR_PROCESSOR_ERROR_MAP    _ERROR_PROCESSOR_LEVEL_INDEX;
600typedef _ERROR_PROCESSOR_LEVEL_INDEX ERROR_PROCESSOR_LEVEL_INDEX, *PERROR_PROCESSOR_LEVEL_INDEX;
601
602typedef union _ERROR_PROCESSOR_STATE_PARAMETER {
603  ULONGLONG   StateParameter;
604  _ANONYMOUS_STRUCT struct {
605    ULONGLONG reserved0:2;
606    ULONGLONG rz:1;
607    ULONGLONG ra:1;
608    ULONGLONG me:1;
609    ULONGLONG mn:1;
610    ULONGLONG sy:1;
611    ULONGLONG co:1;
612    ULONGLONG ci:1;
613    ULONGLONG us:1;
614    ULONGLONG hd:1;
615    ULONGLONG tl:1;
616    ULONGLONG mi:1;
617    ULONGLONG pi:1;
618    ULONGLONG pm:1;
619    ULONGLONG dy:1;
620    ULONGLONG in:1;
621    ULONGLONG rs:1;
622    ULONGLONG cm:1;
623    ULONGLONG ex:1;
624    ULONGLONG cr:1;
625    ULONGLONG pc:1;
626    ULONGLONG dr:1;
627    ULONGLONG tr:1;
628    ULONGLONG rr:1;
629    ULONGLONG ar:1;
630    ULONGLONG br:1;
631    ULONGLONG pr:1;
632    ULONGLONG fp:1;
633    ULONGLONG b1:1;
634    ULONGLONG b0:1;
635    ULONGLONG gr:1;
636    ULONGLONG dsize:16;
637    ULONGLONG reserved1:11;
638    ULONGLONG cc:1;
639    ULONGLONG tc:1;
640    ULONGLONG bc:1;
641    ULONGLONG rc:1;
642    ULONGLONG uc:1;
643  } DUMMYSTRUCTNAME;
644} ERROR_PROCESSOR_STATE_PARAMETER, *PERROR_PROCESSOR_STATE_PARAMETER;
645
646typedef union _PROCESSOR_LOCAL_ID {
647  ULONGLONG LocalId;
648  _ANONYMOUS_STRUCT struct {
649    ULONGLONG reserved:16;
650    ULONGLONG eid:8;
651    ULONGLONG id:8;
652    ULONGLONG ignored:32;
653  } DUMMYSTRUCTNAME;
654} PROCESSOR_LOCAL_ID, *PPROCESSOR_LOCAL_ID;
655
656typedef struct _ERROR_PROCESSOR_MS {
657  ULONGLONG MsError[1];
658} ERROR_PROCESSOR_MS, *PERROR_PROCESSOR_MS;
659
660typedef struct _ERROR_PROCESSOR_CPUID_INFO {
661  ULONGLONG CpuId0;
662  ULONGLONG CpuId1;
663  ULONGLONG CpuId2;
664  ULONGLONG CpuId3;
665  ULONGLONG CpuId4;
666  ULONGLONG Reserved;
667} ERROR_PROCESSOR_CPUID_INFO, *PERROR_PROCESSOR_CPUID_INFO;
668
669typedef union _ERROR_PROCESSOR_STATIC_INFO_VALID {
670  ULONGLONG Valid;
671  _ANONYMOUS_STRUCT struct {
672    ULONGLONG MinState:1;
673    ULONGLONG BR:1;
674    ULONGLONG CR:1;
675    ULONGLONG AR:1;
676    ULONGLONG RR:1;
677    ULONGLONG FR:1;
678    ULONGLONG Reserved:58;
679  } DUMMYSTRUCTNAME;
680} ERROR_PROCESSOR_STATIC_INFO_VALID, *PERROR_PROCESSOR_STATIC_INFO_VALID;
681
682typedef struct _ERROR_PROCESSOR_STATIC_INFO {
683  ERROR_PROCESSOR_STATIC_INFO_VALID Valid;
684  UCHAR MinState[1024];
685  ULONGLONG BR[8];
686  ULONGLONG CR[128];
687  ULONGLONG AR[128];
688  ULONGLONG RR[8];
689  ULONGLONG FR[2 * 128];
690} ERROR_PROCESSOR_STATIC_INFO, *PERROR_PROCESSOR_STATIC_INFO;
691
692typedef struct _ERROR_PROCESSOR {
693  ERROR_SECTION_HEADER Header;
694  ERROR_PROCESSOR_VALID Valid;
695  ERROR_PROCESSOR_ERROR_MAP ErrorMap;
696  ERROR_PROCESSOR_STATE_PARAMETER StateParameter;
697  PROCESSOR_LOCAL_ID CRLid;
698} ERROR_PROCESSOR, *PERROR_PROCESSOR;
699
700#define ERROR_PROCESSOR_STATE_PARAMETER_CACHE_CHECK_SHIFT         59
701#define ERROR_PROCESSOR_STATE_PARAMETER_CACHE_CHECK_MASK          0x1
702#define ERROR_PROCESSOR_STATE_PARAMETER_TLB_CHECK_SHIFT           60
703#define ERROR_PROCESSOR_STATE_PARAMETER_TLB_CHECK_MASK            0x1
704#define ERROR_PROCESSOR_STATE_PARAMETER_BUS_CHECK_SHIFT           61
705#define ERROR_PROCESSOR_STATE_PARAMETER_BUS_CHECK_MASK            0x1
706#define ERROR_PROCESSOR_STATE_PARAMETER_REG_CHECK_SHIFT           62
707#define ERROR_PROCESSOR_STATE_PARAMETER_REG_CHECK_MASK            0x1
708#define ERROR_PROCESSOR_STATE_PARAMETER_MICROARCH_CHECK_SHIFT     63
709#define ERROR_PROCESSOR_STATE_PARAMETER_MICROARCH_CHECK_MASK      0x1
710
711#define ERROR_PROCESSOR_STATE_PARAMETER_UNKNOWN_CHECK_SHIFT       ERROR_PROCESSOR_STATE_PARAMETER_MICROARCH_CHECK_SHIFT
712#define ERROR_PROCESSOR_STATE_PARAMETER_UNKNOWN_CHECK_MASK        ERROR_PROCESSOR_STATE_PARAMETER_MICROARCH_CHECK_MASK
713
714typedef enum _ERR_TYPES {
715  ERR_INTERNAL = 1,
716  ERR_BUS = 16,
717  ERR_MEM = 4,
718  ERR_TLB = 5,
719  ERR_CACHE = 6,
720  ERR_FUNCTION = 7,
721  ERR_SELFTEST = 8,
722  ERR_FLOW = 9,
723  ERR_MAP = 17,
724  ERR_IMPROPER = 18,
725  ERR_UNIMPL = 19,
726  ERR_LOL = 20,
727  ERR_RESPONSE = 21,
728  ERR_PARITY = 22,
729  ERR_PROTOCOL = 23,
730  ERR_ERROR = 24,
731  ERR_TIMEOUT = 25,
732  ERR_POISONED = 26,
733} _ERR_TYPE;
734
735typedef union _ERROR_STATUS {
736  ULONGLONG Status;
737  _ANONYMOUS_STRUCT struct {
738    ULONGLONG Reserved0:8;
739    ULONGLONG Type:8;
740    ULONGLONG Address:1;
741    ULONGLONG Control:1;
742    ULONGLONG Data:1;
743    ULONGLONG Responder:1;
744    ULONGLONG Requestor:1;
745    ULONGLONG FirstError:1;
746    ULONGLONG Overflow:1;
747    ULONGLONG Reserved1:41;
748  } DUMMYSTRUCTNAME;
749} ERROR_STATUS, *PERROR_STATUS;
750
751typedef struct _ERROR_OEM_DATA {
752  USHORT Length;
753} ERROR_OEM_DATA, *PERROR_OEM_DATA;
754
755typedef union _ERROR_BUS_SPECIFIC_DATA {
756  ULONGLONG BusSpecificData;
757  _ANONYMOUS_STRUCT struct {
758    ULONGLONG LockAsserted:1;
759    ULONGLONG DeferLogged:1;
760    ULONGLONG IOQEmpty:1;
761    ULONGLONG DeferredTransaction:1;
762    ULONGLONG RetriedTransaction:1;
763    ULONGLONG MemoryClaimedTransaction:1;
764    ULONGLONG IOClaimedTransaction:1;
765    ULONGLONG ResponseParitySignal:1;
766    ULONGLONG DeferSignal:1;
767    ULONGLONG HitMSignal:1;
768    ULONGLONG HitSignal:1;
769    ULONGLONG RequestBusFirstCycle:6;
770    ULONGLONG RequestBusSecondCycle:6;
771    ULONGLONG AddressParityBusFirstCycle:2;
772    ULONGLONG AddressParityBusSecondCycle:2;
773    ULONGLONG ResponseBus:3;
774    ULONGLONG RequestParitySignalFirstCycle:1;
775    ULONGLONG RequestParitySignalSecondCycle:1;
776    ULONGLONG Reserved:32;
777  } DUMMYSTRUCTNAME;
778} ERROR_BUS_SPECIFIC_DATA, *PERROR_BUS_SPECIFIC_DATA;
779
780#define ERROR_MEMORY_GUID {0xe429faf2, 0x3cb7, 0x11d4, {0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}}
781
782typedef union _ERROR_MEMORY_VALID {
783  ULONGLONG Valid;
784  _ANONYMOUS_STRUCT struct {
785    ULONGLONG ErrorStatus:1;
786    ULONGLONG PhysicalAddress:1;
787    ULONGLONG AddressMask:1;
788    ULONGLONG Node:1;
789    ULONGLONG Card:1;
790    ULONGLONG Module:1;
791    ULONGLONG Bank:1;
792    ULONGLONG Device:1;
793    ULONGLONG Row:1;
794    ULONGLONG Column:1;
795    ULONGLONG BitPosition:1;
796    ULONGLONG RequestorId:1;
797    ULONGLONG ResponderId:1;
798    ULONGLONG TargetId:1;
799    ULONGLONG BusSpecificData:1;
800    ULONGLONG OemId:1;
801    ULONGLONG OemData:1;
802    ULONGLONG Reserved:47;
803  } DUMMYSTRUCTNAME;
804} ERROR_MEMORY_VALID, *PERROR_MEMORY_VALID;
805
806typedef struct _ERROR_MEMORY {
807  ERROR_SECTION_HEADER Header;
808  ERROR_MEMORY_VALID Valid;
809  ERROR_STATUS ErrorStatus;
810  ULONGLONG PhysicalAddress;
811  ULONGLONG PhysicalAddressMask;
812  USHORT Node;
813  USHORT Card;
814  USHORT Module;
815  USHORT Bank;
816  USHORT Device;
817  USHORT Row;
818  USHORT Column;
819  USHORT BitPosition;
820  ULONGLONG RequestorId;
821  ULONGLONG ResponderId;
822  ULONGLONG TargetId;
823  ULONGLONG BusSpecificData;
824  UCHAR OemId[16];
825  ERROR_OEM_DATA OemData;
826} ERROR_MEMORY, *PERROR_MEMORY;
827
828#define ERROR_PCI_BUS_GUID {0xe429faf4, 0x3cb7, 0x11d4, {0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}}
829
830typedef union _ERROR_PCI_BUS_VALID {
831  ULONGLONG Valid;
832  _ANONYMOUS_STRUCT struct {
833    ULONGLONG ErrorStatus:1;
834    ULONGLONG ErrorType:1;
835    ULONGLONG Id:1;
836    ULONGLONG Address:1;
837    ULONGLONG Data:1;
838    ULONGLONG CmdType:1;
839    ULONGLONG RequestorId:1;
840    ULONGLONG ResponderId:1;
841    ULONGLONG TargetId:1;
842    ULONGLONG OemId:1;
843    ULONGLONG OemData:1;
844    ULONGLONG Reserved:53;
845  } DUMMYSTRUCTNAME;
846} ERROR_PCI_BUS_VALID, *PERROR_PCI_BUS_VALID;
847
848typedef struct _ERROR_PCI_BUS_TYPE {
849  UCHAR Type;
850  UCHAR Reserved;
851} ERROR_PCI_BUS_TYPE, *PERROR_PCI_BUS_TYPE;
852
853#define PciBusUnknownError       ((UCHAR)0)
854#define PciBusDataParityError    ((UCHAR)1)
855#define PciBusSystemError        ((UCHAR)2)
856#define PciBusMasterAbort        ((UCHAR)3)
857#define PciBusTimeOut            ((UCHAR)4)
858#define PciMasterDataParityError ((UCHAR)5)
859#define PciAddressParityError    ((UCHAR)6)
860#define PciCommandParityError    ((UCHAR)7)
861
862typedef struct _ERROR_PCI_BUS_ID {
863  UCHAR BusNumber;
864  UCHAR SegmentNumber;
865} ERROR_PCI_BUS_ID, *PERROR_PCI_BUS_ID;
866
867typedef struct _ERROR_PCI_BUS {
868  ERROR_SECTION_HEADER Header;
869  ERROR_PCI_BUS_VALID Valid;
870  ERROR_STATUS ErrorStatus;
871  ERROR_PCI_BUS_TYPE Type;
872  ERROR_PCI_BUS_ID Id;
873  UCHAR Reserved[4];
874  ULONGLONG Address;
875  ULONGLONG Data;
876  ULONGLONG CmdType;
877  ULONGLONG RequestorId;
878  ULONGLONG ResponderId;
879  ULONGLONG TargetId;
880  UCHAR OemId[16];
881  ERROR_OEM_DATA OemData;
882} ERROR_PCI_BUS, *PERROR_PCI_BUS;
883
884#define ERROR_PCI_COMPONENT_GUID {0xe429faf6, 0x3cb7, 0x11d4, {0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}}
885
886typedef union _ERROR_PCI_COMPONENT_VALID {
887  ULONGLONG Valid;
888  _ANONYMOUS_STRUCT struct {
889    ULONGLONG ErrorStatus:1;
890    ULONGLONG Info:1;
891    ULONGLONG MemoryMappedRegistersPairs:1;
892    ULONGLONG ProgrammedIORegistersPairs:1;
893    ULONGLONG RegistersDataPairs:1;
894    ULONGLONG OemData:1;
895    ULONGLONG Reserved:58;
896  } DUMMYSTRUCTNAME;
897} ERROR_PCI_COMPONENT_VALID, *PERROR_PCI_COMPONENT_VALID;
898
899typedef struct _ERROR_PCI_COMPONENT_INFO {
900  USHORT VendorId;
901  USHORT DeviceId;
902  UCHAR ClassCodeInterface;
903  UCHAR ClassCodeSubClass;
904  UCHAR ClassCodeBaseClass;
905  UCHAR FunctionNumber;
906  UCHAR DeviceNumber;
907  UCHAR BusNumber;
908  UCHAR SegmentNumber;
909  UCHAR Reserved0;
910  ULONG Reserved1;
911} ERROR_PCI_COMPONENT_INFO, *PERROR_PCI_COMPONENT_INFO;
912
913typedef struct _ERROR_PCI_COMPONENT {
914  ERROR_SECTION_HEADER Header;
915  ERROR_PCI_COMPONENT_VALID Valid;
916  ERROR_STATUS ErrorStatus;
917  ERROR_PCI_COMPONENT_INFO Info;
918  ULONG MemoryMappedRegistersPairs;
919  ULONG ProgrammedIORegistersPairs;
920} ERROR_PCI_COMPONENT, *PERROR_PCI_COMPONENT;
921
922#define ERROR_SYSTEM_EVENT_LOG_GUID {0xe429faf3, 0x3cb7, 0x11d4, {0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}}
923
924typedef union _ERROR_SYSTEM_EVENT_LOG_VALID {
925  ULONGLONG Valid;
926  _ANONYMOUS_STRUCT struct {
927    ULONGLONG RecordId:1;
928    ULONGLONG RecordType:1;
929    ULONGLONG GeneratorId:1;
930    ULONGLONG EVMRev:1;
931    ULONGLONG SensorType:1;
932    ULONGLONG SensorNum:1;
933    ULONGLONG EventDirType:1;
934    ULONGLONG EventData1:1;
935    ULONGLONG EventData2:1;
936    ULONGLONG EventData3:1;
937    ULONGLONG Reserved:54;
938  } DUMMYSTRUCTNAME;
939} ERROR_SYSTEM_EVENT_LOG_VALID, *PSYSTEM_EVENT_LOG_VALID;
940
941typedef struct _ERROR_SYSTEM_EVENT_LOG {
942  ERROR_SECTION_HEADER Header;
943  ERROR_SYSTEM_EVENT_LOG_VALID Valid;
944  USHORT RecordId;
945  UCHAR RecordType;
946  ULONG TimeStamp;
947  USHORT GeneratorId;
948  UCHAR EVMRevision;
949  UCHAR SensorType;
950  UCHAR SensorNumber;
951  UCHAR EventDir;
952  UCHAR Data1;
953  UCHAR Data2;
954  UCHAR Data3;
955} ERROR_SYSTEM_EVENT_LOG, *PERROR_SYSTEM_EVENT_LOG;
956
957#define ERROR_SMBIOS_GUID {0xe429faf5, 0x3cb7, 0x11d4, {0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}}
958
959typedef union _ERROR_SMBIOS_VALID {
960  ULONGLONG Valid;
961  _ANONYMOUS_STRUCT struct {
962    ULONGLONG EventType:1;
963    ULONGLONG Length:1;
964    ULONGLONG TimeStamp:1;
965    ULONGLONG OemData:1;
966    ULONGLONG Reserved:60;
967  } DUMMYSTRUCTNAME;
968} ERROR_SMBIOS_VALID, *PERROR_SMBIOS_VALID;
969
970typedef UCHAR ERROR_SMBIOS_EVENT_TYPE, *PERROR_SMBIOS_EVENT_TYPE;
971
972typedef struct _ERROR_SMBIOS {
973  ERROR_SECTION_HEADER Header;
974  ERROR_SMBIOS_VALID Valid;
975  ERROR_SMBIOS_EVENT_TYPE EventType;
976  UCHAR Length;
977  ERROR_TIMESTAMP TimeStamp;
978  ERROR_OEM_DATA OemData;
979} ERROR_SMBIOS, *PERROR_SMBIOS;
980
981#define ERROR_PLATFORM_SPECIFIC_GUID {0xe429faf7, 0x3cb7, 0x11d4, {0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}}
982
983typedef union _ERROR_PLATFORM_SPECIFIC_VALID {
984  ULONGLONG Valid;
985  _ANONYMOUS_STRUCT struct {
986    ULONGLONG ErrorStatus:1;
987    ULONGLONG RequestorId:1;
988    ULONGLONG ResponderId:1;
989    ULONGLONG TargetId:1;
990    ULONGLONG BusSpecificData:1;
991    ULONGLONG OemId:1;
992    ULONGLONG OemData:1;
993    ULONGLONG OemDevicePath:1;
994    ULONGLONG Reserved:56;
995  } DUMMYSTRUCTNAME;
996} ERROR_PLATFORM_SPECIFIC_VALID, *PERROR_PLATFORM_SPECIFIC_VALID;
997
998typedef struct _ERROR_PLATFORM_SPECIFIC {
999  ERROR_SECTION_HEADER Header;
1000  ERROR_PLATFORM_SPECIFIC_VALID Valid;
1001  ERROR_STATUS ErrorStatus;
1002  ULONGLONG RequestorId;
1003  ULONGLONG ResponderId;
1004  ULONGLONG TargetId;
1005  ERROR_BUS_SPECIFIC_DATA BusSpecificData;
1006  UCHAR OemId[16];
1007  ERROR_OEM_DATA OemData;
1008} ERROR_PLATFORM_SPECIFIC, *PERROR_PLATFORM_SPECIFIC;
1009
1010#define ERROR_PLATFORM_BUS_GUID {0xe429faf9, 0x3cb7, 0x11d4, {0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}}
1011
1012typedef union _ERROR_PLATFORM_BUS_VALID {
1013  ULONGLONG Valid;
1014  _ANONYMOUS_STRUCT struct {
1015    ULONGLONG ErrorStatus:1;
1016    ULONGLONG RequestorId:1;
1017    ULONGLONG ResponderId:1;
1018    ULONGLONG TargetId:1;
1019    ULONGLONG BusSpecificData:1;
1020    ULONGLONG OemId:1;
1021    ULONGLONG OemData:1;
1022    ULONGLONG OemDevicePath:1;
1023    ULONGLONG Reserved:56;
1024  } DUMMYSTRUCTNAME;
1025} ERROR_PLATFORM_BUS_VALID, *PERROR_PLATFORM_BUS_VALID;
1026
1027typedef struct _ERROR_PLATFORM_BUS {
1028  ERROR_SECTION_HEADER Header;
1029  ERROR_PLATFORM_BUS_VALID Valid;
1030  ERROR_STATUS ErrorStatus;
1031  ULONGLONG RequestorId;
1032  ULONGLONG ResponderId;
1033  ULONGLONG TargetId;
1034  ERROR_BUS_SPECIFIC_DATA BusSpecificData;
1035  UCHAR OemId[16];
1036  ERROR_OEM_DATA OemData;
1037} ERROR_PLATFORM_BUS, *PERROR_PLATFORM_BUS;
1038
1039#define ERROR_PLATFORM_HOST_CONTROLLER_GUID {0xe429faf8, 0x3cb7, 0x11d4, {0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}}
1040
1041typedef union _ERROR_PLATFORM_HOST_CONTROLLER_VALID {
1042  ULONGLONG Valid;
1043  _ANONYMOUS_STRUCT struct {
1044    ULONGLONG ErrorStatus:1;
1045    ULONGLONG RequestorId:1;
1046    ULONGLONG ResponderId:1;
1047    ULONGLONG TargetId:1;
1048    ULONGLONG BusSpecificData:1;
1049    ULONGLONG OemId:1;
1050    ULONGLONG OemData:1;
1051    ULONGLONG OemDevicePath:1;
1052    ULONGLONG Reserved:56;
1053  } DUMMYSTRUCTNAME;
1054} ERROR_PLATFORM_HOST_CONTROLLER_VALID, *PERROR_PLATFORM_HOST_CONTROLLER_VALID;
1055
1056typedef struct _ERROR_PLATFORM_HOST_CONTROLLER {
1057  ERROR_SECTION_HEADER Header;
1058  ERROR_PCI_COMPONENT_VALID Valid;
1059  ERROR_STATUS ErrorStatus;
1060  ULONGLONG RequestorId;
1061  ULONGLONG ResponderId;
1062  ULONGLONG TargetId;
1063  ERROR_BUS_SPECIFIC_DATA BusSpecificData;
1064  UCHAR OemId[16];
1065  ERROR_OEM_DATA OemData;
1066} ERROR_PLATFORM_HOST_CONTROLLER, *PERROR_PLATFORM_HOST_CONTROLLER;
1067
1068typedef ERROR_RECORD_HEADER ERROR_LOGRECORD, *PERROR_LOGRECORD;
1069typedef ERROR_RECORD_HEADER MCA_EXCEPTION, *PMCA_EXCEPTION;
1070typedef ERROR_RECORD_HEADER CMC_EXCEPTION, *PCMC_EXCEPTION;
1071typedef ERROR_RECORD_HEADER CPE_EXCEPTION, *PCPE_EXCEPTION;
1072#if (NTDDI_VERSION > NTDDI_WINXP)
1073typedef ERROR_RECORD_HEADER INIT_EXCEPTION, *PINIT_EXCEPTION;
1074#endif
1075
1076#endif /* defined(_IA64_) */
1077
1078#endif /* defined(_X86_) || defined(_IA64_) || defined(_AMD64_) */
1079