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