- Sync up Mm interface with WinLdr branch (introduce the concept of a memory type...
[reactos.git] / reactos / include / ndk / i386 / ketypes.h
1 /*++ NDK Version: 0098
2
3 Copyright (c) Alex Ionescu. All rights reserved.
4
5 Header Name:
6
7 ketypes.h (X86)
8
9 Abstract:
10
11 i386 Type definitions for the Kernel services.
12
13 Author:
14
15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
16
17 --*/
18
19 #ifndef _I386_KETYPES_H
20 #define _I386_KETYPES_H
21
22 //
23 // Dependencies
24 //
25
26 //
27 // Machine Types
28 //
29 #define MACHINE_TYPE_ISA 0x0000
30 #define MACHINE_TYPE_EISA 0x0001
31 #define MACHINE_TYPE_MCA 0x0002
32
33 //
34 // X86 80386 Segment Types
35 //
36 #define I386_TASK_GATE 0x5
37 #define I386_TSS 0x9
38 #define I386_ACTIVE_TSS 0xB
39 #define I386_CALL_GATE 0xC
40 #define I386_INTERRUPT_GATE 0xE
41 #define I386_TRAP_GATE 0xF
42
43 //
44 // Selector Names
45 //
46 #define RPL_MASK 0x0003
47 #define MODE_MASK 0x0001
48 #define KGDT_R0_CODE 0x8
49 #define KGDT_R0_DATA 0x10
50 #define KGDT_R3_CODE 0x18
51 #define KGDT_R3_DATA 0x20
52 #define KGDT_TSS 0x28
53 #define KGDT_R0_PCR 0x30
54 #define KGDT_R3_TEB 0x38
55 #define KGDT_LDT 0x48
56 #define KGDT_DF_TSS 0x50
57 #define KGDT_NMI_TSS 0x58
58
59 //
60 // CR4
61 //
62 #define CR4_VME 0x1
63 #define CR4_PVI 0x2
64 #define CR4_TSD 0x4
65 #define CR4_DE 0x8
66 #define CR4_PSE 0x10
67 #define CR4_PAE 0x20
68 #define CR4_MCE 0x40
69 #define CR4_PGE 0x80
70 #define CR4_FXSR 0x200
71 #define CR4_XMMEXCPT 0x400
72
73 //
74 // EFlags
75 //
76 #define EFLAGS_CF 0x01L
77 #define EFLAGS_ZF 0x40L
78 #define EFLAGS_TF 0x100L
79 #define EFLAGS_INTERRUPT_MASK 0x200L
80 #define EFLAGS_DF 0x400L
81 #define EFLAGS_NESTED_TASK 0x4000L
82 #define EFLAGS_V86_MASK 0x20000
83 #define EFLAGS_ALIGN_CHECK 0x40000
84 #define EFLAGS_VIF 0x80000
85 #define EFLAGS_VIP 0x100000
86 #define EFLAGS_USER_SANITIZE 0x3F4DD7
87 #define EFLAG_SIGN 0x8000
88 #define EFLAG_ZERO 0x4000
89
90 //
91 // IPI Types
92 //
93 #define IPI_APC 1
94 #define IPI_DPC 2
95 #define IPI_FREEZE 4
96 #define IPI_PACKET_READY 8
97 #define IPI_SYNCH_REQUEST 16
98
99 //
100 // PRCB Flags
101 //
102 #define PRCB_MAJOR_VERSION 1
103 #define PRCB_BUILD_DEBUG 1
104 #define PRCB_BUILD_UNIPROCESSOR 2
105
106 //
107 // HAL Variables
108 //
109 #define INITIAL_STALL_COUNT 0x64
110
111 //
112 // IOPM Definitions
113 //
114 #define IO_ACCESS_MAP_NONE 0
115 #define IOPM_OFFSET FIELD_OFFSET(KTSS, IoMaps[0].IoMap)
116 #define KiComputeIopmOffset(MapNumber) \
117 (MapNumber == IO_ACCESS_MAP_NONE) ? \
118 (USHORT)(sizeof(KTSS)) : \
119 (USHORT)(FIELD_OFFSET(KTSS, IoMaps[MapNumber-1].IoMap))
120
121 //
122 // Static Kernel-Mode Address start (use MM_KSEG0_BASE for actual)
123 //
124 #define KSEG0_BASE 0x80000000
125
126 //
127 // Synchronization-level IRQL
128 //
129 #ifndef CONFIG_SMP
130 #define SYNCH_LEVEL DISPATCH_LEVEL
131 #else
132 #define SYNCH_LEVEL (IPI_LEVEL - 1)
133 #endif
134
135 //
136 // Trap Frame Definition
137 //
138 typedef struct _KTRAP_FRAME
139 {
140 ULONG DbgEbp;
141 ULONG DbgEip;
142 ULONG DbgArgMark;
143 ULONG DbgArgPointer;
144 ULONG TempSegCs;
145 ULONG TempEsp;
146 ULONG Dr0;
147 ULONG Dr1;
148 ULONG Dr2;
149 ULONG Dr3;
150 ULONG Dr6;
151 ULONG Dr7;
152 ULONG SegGs;
153 ULONG SegEs;
154 ULONG SegDs;
155 ULONG Edx;
156 ULONG Ecx;
157 ULONG Eax;
158 ULONG PreviousPreviousMode;
159 struct _EXCEPTION_REGISTRATION_RECORD FAR *ExceptionList;
160 ULONG SegFs;
161 ULONG Edi;
162 ULONG Esi;
163 ULONG Ebx;
164 ULONG Ebp;
165 ULONG ErrCode;
166 ULONG Eip;
167 ULONG SegCs;
168 ULONG EFlags;
169 ULONG HardwareEsp;
170 ULONG HardwareSegSs;
171 ULONG V86Es;
172 ULONG V86Ds;
173 ULONG V86Fs;
174 ULONG V86Gs;
175 } KTRAP_FRAME, *PKTRAP_FRAME;
176
177 //
178 // LDT Entry Definition
179 //
180 #ifndef _LDT_ENTRY_DEFINED
181 #define _LDT_ENTRY_DEFINED
182 typedef struct _LDT_ENTRY
183 {
184 USHORT LimitLow;
185 USHORT BaseLow;
186 union
187 {
188 struct
189 {
190 UCHAR BaseMid;
191 UCHAR Flags1;
192 UCHAR Flags2;
193 UCHAR BaseHi;
194 } Bytes;
195 struct
196 {
197 ULONG BaseMid:8;
198 ULONG Type:5;
199 ULONG Dpl:2;
200 ULONG Pres:1;
201 ULONG LimitHi:4;
202 ULONG Sys:1;
203 ULONG Reserved_0:1;
204 ULONG Default_Big:1;
205 ULONG Granularity:1;
206 ULONG BaseHi:8;
207 } Bits;
208 } HighWord;
209 } LDT_ENTRY, *PLDT_ENTRY, *LPLDT_ENTRY;
210 #endif
211
212 //
213 // GDT Entry Definition
214 //
215 typedef struct _KGDTENTRY
216 {
217 USHORT LimitLow;
218 USHORT BaseLow;
219 union
220 {
221 struct
222 {
223 UCHAR BaseMid;
224 UCHAR Flags1;
225 UCHAR Flags2;
226 UCHAR BaseHi;
227 } Bytes;
228 struct
229 {
230 ULONG BaseMid:8;
231 ULONG Type:5;
232 ULONG Dpl:2;
233 ULONG Pres:1;
234 ULONG LimitHi:4;
235 ULONG Sys:1;
236 ULONG Reserved_0:1;
237 ULONG Default_Big:1;
238 ULONG Granularity:1;
239 ULONG BaseHi:8;
240 } Bits;
241 } HighWord;
242 } KGDTENTRY, *PKGDTENTRY;
243
244 //
245 // IDT Entry Access Definition
246 //
247 typedef struct _KIDT_ACCESS
248 {
249 union
250 {
251 struct
252 {
253 UCHAR Reserved;
254 UCHAR SegmentType:4;
255 UCHAR SystemSegmentFlag:1;
256 UCHAR Dpl:2;
257 UCHAR Present:1;
258 };
259 USHORT Value;
260 };
261 } KIDT_ACCESS, *PKIDT_ACCESS;
262
263 //
264 // IDT Entry Definition
265 //
266 typedef struct _KIDTENTRY
267 {
268 USHORT Offset;
269 USHORT Selector;
270 USHORT Access;
271 USHORT ExtendedOffset;
272 } KIDTENTRY, *PKIDTENTRY;
273
274 typedef struct _DESCRIPTOR
275 {
276 USHORT Pad;
277 USHORT Limit;
278 ULONG Base;
279 } KDESCRIPTOR, *PKDESCRIPTOR;
280
281 #ifndef NTOS_MODE_USER
282 //
283 // Macro to get current KPRCB
284 //
285 FORCEINLINE
286 struct _KPRCB *
287 KeGetCurrentPrcb(VOID)
288 {
289 return (struct _KPRCB *)(ULONG_PTR)__readfsdword(FIELD_OFFSET(KPCR, Prcb));
290 }
291
292 //
293 // FN/FX (FPU) Save Area Structures
294 //
295 typedef struct _FNSAVE_FORMAT
296 {
297 ULONG ControlWord;
298 ULONG StatusWord;
299 ULONG TagWord;
300 ULONG ErrorOffset;
301 ULONG ErrorSelector;
302 ULONG DataOffset;
303 ULONG DataSelector;
304 UCHAR RegisterArea[80];
305 } FNSAVE_FORMAT, *PFNSAVE_FORMAT;
306
307 typedef struct _FXSAVE_FORMAT
308 {
309 USHORT ControlWord;
310 USHORT StatusWord;
311 USHORT TagWord;
312 USHORT ErrorOpcode;
313 ULONG ErrorOffset;
314 ULONG ErrorSelector;
315 ULONG DataOffset;
316 ULONG DataSelector;
317 ULONG MXCsr;
318 ULONG MXCsrMask;
319 UCHAR RegisterArea[128];
320 UCHAR Reserved3[128];
321 UCHAR Reserved4[224];
322 UCHAR Align16Byte[8];
323 } FXSAVE_FORMAT, *PFXSAVE_FORMAT;
324
325 typedef struct _FX_SAVE_AREA
326 {
327 union
328 {
329 FNSAVE_FORMAT FnArea;
330 FXSAVE_FORMAT FxArea;
331 } U;
332 ULONG NpxSavedCpu;
333 ULONG Cr0NpxState;
334 } FX_SAVE_AREA, *PFX_SAVE_AREA;
335
336 //
337 // Special Registers Structure (outside of CONTEXT)
338 //
339 typedef struct _KSPECIAL_REGISTERS
340 {
341 ULONG Cr0;
342 ULONG Cr2;
343 ULONG Cr3;
344 ULONG Cr4;
345 ULONG KernelDr0;
346 ULONG KernelDr1;
347 ULONG KernelDr2;
348 ULONG KernelDr3;
349 ULONG KernelDr6;
350 ULONG KernelDr7;
351 KDESCRIPTOR Gdtr;
352 KDESCRIPTOR Idtr;
353 USHORT Tr;
354 USHORT Ldtr;
355 ULONG Reserved[6];
356 } KSPECIAL_REGISTERS, *PKSPECIAL_REGISTERS;
357
358 //
359 // Processor State Data
360 //
361 typedef struct _KPROCESSOR_STATE
362 {
363 CONTEXT ContextFrame;
364 KSPECIAL_REGISTERS SpecialRegisters;
365 } KPROCESSOR_STATE, *PKPROCESSOR_STATE;
366
367 //
368 // Processor Region Control Block
369 //
370 #pragma pack(push,4)
371 typedef struct _KPRCB
372 {
373 USHORT MinorVersion;
374 USHORT MajorVersion;
375 struct _KTHREAD *CurrentThread;
376 struct _KTHREAD *NextThread;
377 struct _KTHREAD *IdleThread;
378 UCHAR Number;
379 UCHAR Reserved;
380 USHORT BuildType;
381 KAFFINITY SetMember;
382 UCHAR CpuType;
383 UCHAR CpuID;
384 USHORT CpuStep;
385 KPROCESSOR_STATE ProcessorState;
386 ULONG KernelReserved[16];
387 ULONG HalReserved[16];
388 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
389 ULONG CFlushSize;
390 UCHAR PrcbPad0[88];
391 #else
392 UCHAR PrcbPad0[92];
393 #endif
394 KSPIN_LOCK_QUEUE LockQueue[LockQueueMaximumLock];
395 struct _KTHREAD *NpxThread;
396 ULONG InterruptCount;
397 ULONG KernelTime;
398 ULONG UserTime;
399 ULONG DpcTime;
400 ULONG DebugDpcTime;
401 ULONG InterruptTime;
402 ULONG AdjustDpcThreshold;
403 ULONG PageColor;
404 UCHAR SkipTick;
405 UCHAR DebuggerSavedIRQL;
406 #if (NTDDI_VERSION >= NTDDI_WS03)
407 UCHAR NodeColor;
408 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
409 UCHAR PollSlot;
410 #else
411 UCHAR Spare1;
412 #endif
413 ULONG NodeShiftedColor;
414 #else
415 UCHAR Spare1[6];
416 #endif
417 struct _KNODE *ParentNode;
418 ULONG MultiThreadProcessorSet;
419 struct _KPRCB *MultiThreadSetMaster;
420 #if (NTDDI_VERSION >= NTDDI_WS03)
421 ULONG SecondaryColorMask;
422 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
423 ULONG DpcTimeLimit;
424 #else
425 LONG Sleeping;
426 #endif
427 #else
428 ULONG ThreadStartCount[2];
429 #endif
430 ULONG CcFastReadNoWait;
431 ULONG CcFastReadWait;
432 ULONG CcFastReadNotPossible;
433 ULONG CcCopyReadNoWait;
434 ULONG CcCopyReadWait;
435 ULONG CcCopyReadNoWaitMiss;
436 #if (NTDDI_VERSION < NTDDI_LONGHORN)
437 ULONG KeAlignmentFixupCount;
438 #endif
439 ULONG SpareCounter0;
440 #if (NTDDI_VERSION < NTDDI_LONGHORN)
441 ULONG KeDcacheFlushCount;
442 ULONG KeExceptionDispatchCount;
443 ULONG KeFirstLevelTbFills;
444 ULONG KeFloatingEmulationCount;
445 ULONG KeIcacheFlushCount;
446 ULONG KeSecondLevelTbFills;
447 ULONG KeSystemCalls;
448 #endif
449 volatile ULONG IoReadOperationCount;
450 volatile ULONG IoWriteOperationCount;
451 volatile ULONG IoOtherOperationCount;
452 LARGE_INTEGER IoReadTransferCount;
453 LARGE_INTEGER IoWriteTransferCount;
454 LARGE_INTEGER IoOtherTransferCount;
455 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
456 ULONG CcFastMdlReadNoWait;
457 ULONG CcFastMdlReadWait;
458 ULONG CcFastMdlReadNotPossible;
459 ULONG CcMapDataNoWait;
460 ULONG CcMapDataWait;
461 ULONG CcPinMappedDataCount;
462 ULONG CcPinReadNoWait;
463 ULONG CcPinReadWait;
464 ULONG CcMdlReadNoWait;
465 ULONG CcMdlReadWait;
466 ULONG CcLazyWriteHotSpots;
467 ULONG CcLazyWriteIos;
468 ULONG CcLazyWritePages;
469 ULONG CcDataFlushes;
470 ULONG CcDataPages;
471 ULONG CcLostDelayedWrites;
472 ULONG CcFastReadResourceMiss;
473 ULONG CcCopyReadWaitMiss;
474 ULONG CcFastMdlReadResourceMiss;
475 ULONG CcMapDataNoWaitMiss;
476 ULONG CcMapDataWaitMiss;
477 ULONG CcPinReadNoWaitMiss;
478 ULONG CcPinReadWaitMiss;
479 ULONG CcMdlReadNoWaitMiss;
480 ULONG CcMdlReadWaitMiss;
481 ULONG CcReadAheadIos;
482 ULONG KeAlignmentFixupCount;
483 ULONG KeExceptionDispatchCount;
484 ULONG KeSystemCalls;
485 ULONG PrcbPad1[3];
486 #else
487 ULONG SpareCounter1[8];
488 #endif
489 PP_LOOKASIDE_LIST PPLookasideList[16];
490 PP_LOOKASIDE_LIST PPNPagedLookasideList[32];
491 PP_LOOKASIDE_LIST PPPagedLookasideList[32];
492 volatile ULONG PacketBarrier;
493 volatile ULONG ReverseStall;
494 PVOID IpiFrame;
495 UCHAR PrcbPad2[52];
496 volatile PVOID CurrentPacket[3];
497 volatile ULONG TargetSet;
498 volatile PKIPI_WORKER WorkerRoutine;
499 volatile ULONG IpiFrozen;
500 UCHAR PrcbPad3[40];
501 volatile ULONG RequestSummary;
502 volatile struct _KPRCB *SignalDone;
503 UCHAR PrcbPad4[56];
504 struct _KDPC_DATA DpcData[2];
505 PVOID DpcStack;
506 ULONG MaximumDpcQueueDepth;
507 ULONG DpcRequestRate;
508 ULONG MinimumDpcRate;
509 volatile UCHAR DpcInterruptRequested;
510 volatile UCHAR DpcThreadRequested;
511 volatile UCHAR DpcRoutineActive;
512 volatile UCHAR DpcThreadActive;
513 ULONG PrcbLock;
514 ULONG DpcLastCount;
515 volatile ULONG TimerHand;
516 volatile ULONG TimerRequest;
517 PVOID DpcThread;
518 KEVENT DpcEvent;
519 UCHAR ThreadDpcEnable;
520 volatile BOOLEAN QuantumEnd;
521 UCHAR PrcbPad50;
522 volatile UCHAR IdleSchedule;
523 LONG DpcSetEventRequest;
524 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
525 LONG Sleeping;
526 ULONG PeriodicCount;
527 ULONG PeriodicBias;
528 UCHAR PrcbPad5[6];
529 #else
530 UCHAR PrcbPad5[18];
531 #endif
532 LONG TickOffset;
533 KDPC CallDpc;
534 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
535 LONG ClockKeepAlive;
536 UCHAR ClockCheckSlot;
537 UCHAR ClockPollCycle;
538 UCHAR PrcbPad6[2];
539 LONG DpcWatchdogPeriod;
540 LONG DpcWatchDogCount;
541 LONG ThreadWatchdogPeriod;
542 LONG ThreadWatchDogCount;
543 ULONG PrcbPad70[2];
544 #else
545 ULONG PrcbPad7[8];
546 #endif
547 LIST_ENTRY WaitListHead;
548 ULONG ReadySummary;
549 ULONG QueueIndex;
550 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
551 SINGLE_LIST_ENTRY DeferredReadyListHead;
552 ULONGLONG StartCycles;
553 ULONGLONG CycleTime;
554 ULONGLONG PrcbPad71[3];
555 LIST_ENTRY DispatcherReadyListHead[32];
556 #else
557 LIST_ENTRY DispatcherReadyListHead[32];
558 SINGLE_LIST_ENTRY DeferredReadyListHead;
559 ULONG PrcbPad72[11];
560 #endif
561 PVOID ChainedInterruptList;
562 LONG LookasideIrpFloat;
563 volatile LONG MmPageFaultCount;
564 volatile LONG MmCopyOnWriteCount;
565 volatile LONG MmTransitionCount;
566 volatile LONG MmCacheTransitionCount;
567 volatile LONG MmDemandZeroCount;
568 volatile LONG MmPageReadCount;
569 volatile LONG MmPageReadIoCount;
570 volatile LONG MmCacheReadCount;
571 volatile LONG MmCacheIoCount;
572 volatile LONG MmDirtyPagesWriteCount;
573 volatile LONG MmDirtyWriteIoCount;
574 volatile LONG MmMappedPagesWriteCount;
575 volatile LONG MmMappedWriteIoCount;
576 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
577 ULONG CachedCommit;
578 ULONG CachedResidentAvailable;
579 PVOID HyperPte;
580 UCHAR CpuVendor;
581 UCHAR PrcbPad9[3];
582 #else
583 ULONG SpareFields0[1];
584 #endif
585 CHAR VendorString[13];
586 UCHAR InitialApicId;
587 UCHAR LogicalProcessorsPerPhysicalProcessor;
588 ULONG MHz;
589 ULONG FeatureBits;
590 LARGE_INTEGER UpdateSignature;
591 volatile LARGE_INTEGER IsrTime;
592 LARGE_INTEGER SpareField1;
593 FX_SAVE_AREA NpxSaveArea;
594 PROCESSOR_POWER_STATE PowerState;
595 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
596 KDPC DpcWatchdogDoc;
597 KTIMER DpcWatchdogTimer;
598 PVOID WheaInfo;
599 PVOID EtwSupport;
600 SLIST_HEADER InterruptObjectPool;
601 LARGE_INTEGER HyperCallPagePhysical;
602 LARGE_INTEGER HyperCallPageVirtual;
603 PVOID RateControl;
604 CACHE_DESCRIPTOR Cache[5];
605 ULONG CacheCount;
606 ULONG CacheProcessorMask[5];
607 UCHAR LogicalProcessorsPerCore;
608 UCHAR PrcbPad8[3];
609 ULONG PackageProcessorSet;
610 ULONG CoreProcessorSet;
611 #endif
612 } KPRCB, *PKPRCB;
613
614 //
615 // Processor Control Region
616 //
617 typedef struct _KIPCR
618 {
619 union
620 {
621 NT_TIB NtTib;
622 struct
623 {
624 struct _EXCEPTION_REGISTRATION_RECORD *Used_ExceptionList;
625 PVOID Used_StackBase;
626 PVOID PerfGlobalGroupMask;
627 PVOID TssCopy;
628 ULONG ContextSwitches;
629 KAFFINITY SetMemberCopy;
630 PVOID Used_Self;
631 };
632 };
633 struct _KPCR *Self;
634 struct _KPRCB *Prcb;
635 KIRQL Irql;
636 ULONG IRR;
637 ULONG IrrActive;
638 ULONG IDR;
639 PVOID KdVersionBlock;
640 PKIDTENTRY IDT;
641 #ifdef __REACTOS__
642 PUSHORT GDT;
643 #else
644 PKGDTENTRY GDT;
645 #endif
646 struct _KTSS *TSS;
647 USHORT MajorVersion;
648 USHORT MinorVersion;
649 KAFFINITY SetMember;
650 ULONG StallScaleFactor;
651 UCHAR SparedUnused;
652 UCHAR Number;
653 UCHAR Reserved;
654 UCHAR L2CacheAssociativity;
655 ULONG VdmAlert;
656 ULONG KernelReserved[14];
657 ULONG SecondLevelCacheSize;
658 ULONG HalReserved[16];
659 ULONG InterruptMode;
660 UCHAR Spare1;
661 ULONG KernelReserved2[17];
662 KPRCB PrcbData;
663 } KIPCR, *PKIPCR;
664 #pragma pack(pop)
665
666 //
667 // TSS Definition
668 //
669 typedef struct _KiIoAccessMap
670 {
671 UCHAR DirectionMap[32];
672 UCHAR IoMap[8196];
673 } KIIO_ACCESS_MAP;
674
675 typedef struct _KTSS
676 {
677 USHORT Backlink;
678 USHORT Reserved0;
679 ULONG Esp0;
680 USHORT Ss0;
681 USHORT Reserved1;
682 ULONG NotUsed1[4];
683 ULONG CR3;
684 ULONG Eip;
685 ULONG EFlags;
686 ULONG Eax;
687 ULONG Ecx;
688 ULONG Edx;
689 ULONG Ebx;
690 ULONG Esp;
691 ULONG Ebp;
692 ULONG Esi;
693 ULONG Edi;
694 USHORT Es;
695 USHORT Reserved2;
696 USHORT Cs;
697 USHORT Reserved3;
698 USHORT Ss;
699 USHORT Reserved4;
700 USHORT Ds;
701 USHORT Reserved5;
702 USHORT Fs;
703 USHORT Reserved6;
704 USHORT Gs;
705 USHORT Reserved7;
706 USHORT LDT;
707 USHORT Reserved8;
708 USHORT Flags;
709 USHORT IoMapBase;
710 KIIO_ACCESS_MAP IoMaps[1];
711 UCHAR IntDirectionMap[32];
712 } KTSS, *PKTSS;
713
714 //
715 // i386 CPUs don't have exception frames
716 //
717 typedef struct _KEXCEPTION_FRAME KEXCEPTION_FRAME, *PKEXCEPTION_FRAME;
718 #endif
719 #endif