Sync with trunk (r48545)
[reactos.git] / include / ddk / mce.h
1 #pragma once
2
3 #if defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
4
5 typedef union _MCI_ADDR {
6 _ANONYMOUS_STRUCT struct {
7 ULONG Address;
8 ULONG Reserved;
9 } DUMMYSTRUCTNAME;
10 ULONGLONG QuadPart;
11 } MCI_ADDR, *PMCI_ADDR;
12
13 typedef 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
22 typedef 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
40 typedef 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_)
61 typedef 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
84 typedef 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
110 typedef 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
133 typedef MCA_EXCEPTION CMC_EXCEPTION, *PCMC_EXCEPTION;
134 typedef 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
145 typedef UCHAR ERROR_SEVERITY, *PERROR_SEVERITY;
146
147 typedef 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
158 typedef 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
175 typedef 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
189 typedef struct _ERROR_GUID {
190 ULONG Data1;
191 USHORT Data2;
192 USHORT Data3;
193 UCHAR Data4[8];
194 } ERROR_GUID, *PERROR_GUID;
195
196 typedef ERROR_GUID _ERROR_DEVICE_GUID;
197 typedef _ERROR_DEVICE_GUID ERROR_DEVICE_GUID, *PERROR_DEVICE_GUID;
198
199 typedef ERROR_GUID _ERROR_PLATFORM_GUID;
200 typedef _ERROR_PLATFORM_GUID ERROR_PLATFORM_GUID, *PERROR_PLATFORM_GUID;
201
202 typedef 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
210 typedef 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
220 typedef 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
231 typedef 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
241 USHORT
242 NTAPI
243 GetFwMceLogProcessorNumber(
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
259 typedef 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
271 typedef enum _ERROR_CHECK_IS {
272 isIA64 = 0,
273 isIA32 = 1,
274 } ERROR_CHECK_IS;
275
276 typedef 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
287 typedef 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
296 typedef 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
329 typedef 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
360 typedef 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
372 typedef 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
398 typedef 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
412 typedef 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
439 typedef 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
466 typedef 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
483 typedef enum _ERROR_REGFILE_CHECK_OPERATION {
484 RegFileUnknownOp = 0,
485 RegFileRead = 1,
486 RegFileWrite = 2,
487 } ERROR_REGFILE_CHECK_OPERATION;
488
489 typedef 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)
508 typedef enum _ERROR_MS_CHECK_OPERATION {
509 MsUnknownOp = 0,
510 MsReadOrLoad = 1,
511 MsWriteOrStore = 2
512 } ERROR_MS_CHECK_OPERATION;
513 #else
514 typedef 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
523 typedef 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
548 typedef 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
557 typedef 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
566 typedef 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
583 typedef 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
599 typedef ERROR_PROCESSOR_ERROR_MAP _ERROR_PROCESSOR_LEVEL_INDEX;
600 typedef _ERROR_PROCESSOR_LEVEL_INDEX ERROR_PROCESSOR_LEVEL_INDEX, *PERROR_PROCESSOR_LEVEL_INDEX;
601
602 typedef 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
646 typedef 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
656 typedef struct _ERROR_PROCESSOR_MS {
657 ULONGLONG MsError[1];
658 } ERROR_PROCESSOR_MS, *PERROR_PROCESSOR_MS;
659
660 typedef 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
669 typedef 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
682 typedef 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
692 typedef 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
714 typedef 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
735 typedef 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
751 typedef struct _ERROR_OEM_DATA {
752 USHORT Length;
753 } ERROR_OEM_DATA, *PERROR_OEM_DATA;
754
755 typedef 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
782 typedef 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
806 typedef 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
830 typedef 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
848 typedef 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
862 typedef struct _ERROR_PCI_BUS_ID {
863 UCHAR BusNumber;
864 UCHAR SegmentNumber;
865 } ERROR_PCI_BUS_ID, *PERROR_PCI_BUS_ID;
866
867 typedef 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
886 typedef 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
899 typedef 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
913 typedef 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
924 typedef 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
941 typedef 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
959 typedef 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
970 typedef UCHAR ERROR_SMBIOS_EVENT_TYPE, *PERROR_SMBIOS_EVENT_TYPE;
971
972 typedef 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
983 typedef 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
998 typedef 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
1012 typedef 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
1027 typedef 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
1041 typedef 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
1056 typedef 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
1068 typedef ERROR_RECORD_HEADER ERROR_LOGRECORD, *PERROR_LOGRECORD;
1069 typedef ERROR_RECORD_HEADER MCA_EXCEPTION, *PMCA_EXCEPTION;
1070 typedef ERROR_RECORD_HEADER CMC_EXCEPTION, *PCMC_EXCEPTION;
1071 typedef ERROR_RECORD_HEADER CPE_EXCEPTION, *PCPE_EXCEPTION;
1072 #if (NTDDI_VERSION > NTDDI_WINXP)
1073 typedef ERROR_RECORD_HEADER INIT_EXCEPTION, *PINIT_EXCEPTION;
1074 #endif
1075
1076 #endif /* defined(_IA64_) */
1077
1078 #endif /* defined(_X86_) || defined(_IA64_) || defined(_AMD64_) */