sync with trunk head (34904)
[reactos.git] / reactos / include / ndk / amd64 / 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 amd64 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 _AMD64_KETYPES_H
20 #define _AMD64_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 0xffff080000000000ULL
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)__readgsqword(FIELD_OFFSET(KPCR, Prcb));
300 return 0;
301 }
302
303 //
304 // FN/FX (FPU) Save Area Structures
305 //
306 typedef struct _FNSAVE_FORMAT
307 {
308 ULONG ControlWord;
309 ULONG StatusWord;
310 ULONG TagWord;
311 ULONG ErrorOffset;
312 ULONG ErrorSelector;
313 ULONG DataOffset;
314 ULONG DataSelector;
315 UCHAR RegisterArea[80];
316 } FNSAVE_FORMAT, *PFNSAVE_FORMAT;
317
318 typedef struct _FXSAVE_FORMAT
319 {
320 USHORT ControlWord;
321 USHORT StatusWord;
322 USHORT TagWord;
323 USHORT ErrorOpcode;
324 ULONG ErrorOffset;
325 ULONG ErrorSelector;
326 ULONG DataOffset;
327 ULONG DataSelector;
328 ULONG MXCsr;
329 ULONG MXCsrMask;
330 UCHAR RegisterArea[128];
331 UCHAR Reserved3[128];
332 UCHAR Reserved4[224];
333 UCHAR Align16Byte[8];
334 } FXSAVE_FORMAT, *PFXSAVE_FORMAT;
335
336 typedef struct _FX_SAVE_AREA
337 {
338 union
339 {
340 FNSAVE_FORMAT FnArea;
341 FXSAVE_FORMAT FxArea;
342 } U;
343 ULONG NpxSavedCpu;
344 ULONG Cr0NpxState;
345 } FX_SAVE_AREA, *PFX_SAVE_AREA;
346
347 //
348 // Special Registers Structure (outside of CONTEXT)
349 //
350 typedef struct _KSPECIAL_REGISTERS
351 {
352 ULONG Cr0;
353 ULONG Cr2;
354 ULONG Cr3;
355 ULONG Cr4;
356 ULONG KernelDr0;
357 ULONG KernelDr1;
358 ULONG KernelDr2;
359 ULONG KernelDr3;
360 ULONG KernelDr6;
361 ULONG KernelDr7;
362 KDESCRIPTOR Gdtr;
363 KDESCRIPTOR Idtr;
364 USHORT Tr;
365 USHORT Ldtr;
366 ULONG Reserved[6];
367 } KSPECIAL_REGISTERS, *PKSPECIAL_REGISTERS;
368
369 //
370 // Processor State Data
371 //
372 typedef struct _KPROCESSOR_STATE
373 {
374 CONTEXT ContextFrame;
375 KSPECIAL_REGISTERS SpecialRegisters;
376 } KPROCESSOR_STATE, *PKPROCESSOR_STATE;
377
378 //
379 // Processor Region Control Block
380 //
381 #pragma pack(push,4)
382 typedef struct _KPRCB
383 {
384 USHORT MinorVersion;
385 USHORT MajorVersion;
386 struct _KTHREAD *CurrentThread;
387 struct _KTHREAD *NextThread;
388 struct _KTHREAD *IdleThread;
389 UCHAR Number;
390 UCHAR Reserved;
391 USHORT BuildType;
392 KAFFINITY SetMember;
393 UCHAR CpuType;
394 UCHAR CpuID;
395 USHORT CpuStep;
396 KPROCESSOR_STATE ProcessorState;
397 ULONG KernelReserved[16];
398 ULONG HalReserved[16];
399 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
400 ULONG CFlushSize;
401 UCHAR PrcbPad0[88];
402 #else
403 UCHAR PrcbPad0[92];
404 #endif
405 KSPIN_LOCK_QUEUE LockQueue[LockQueueMaximumLock];
406 struct _KTHREAD *NpxThread;
407 ULONG InterruptCount;
408 ULONG KernelTime;
409 ULONG UserTime;
410 ULONG DpcTime;
411 ULONG DebugDpcTime;
412 ULONG InterruptTime;
413 ULONG AdjustDpcThreshold;
414 ULONG PageColor;
415 UCHAR SkipTick;
416 UCHAR DebuggerSavedIRQL;
417 #if (NTDDI_VERSION >= NTDDI_WS03)
418 UCHAR NodeColor;
419 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
420 UCHAR PollSlot;
421 #else
422 UCHAR Spare1;
423 #endif
424 ULONG NodeShiftedColor;
425 #else
426 UCHAR Spare1[6];
427 #endif
428 struct _KNODE *ParentNode;
429 ULONG MultiThreadProcessorSet;
430 struct _KPRCB *MultiThreadSetMaster;
431 #if (NTDDI_VERSION >= NTDDI_WS03)
432 ULONG SecondaryColorMask;
433 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
434 ULONG DpcTimeLimit;
435 #else
436 LONG Sleeping;
437 #endif
438 #else
439 ULONG ThreadStartCount[2];
440 #endif
441 ULONG CcFastReadNoWait;
442 ULONG CcFastReadWait;
443 ULONG CcFastReadNotPossible;
444 ULONG CcCopyReadNoWait;
445 ULONG CcCopyReadWait;
446 ULONG CcCopyReadNoWaitMiss;
447 #if (NTDDI_VERSION < NTDDI_LONGHORN)
448 ULONG KeAlignmentFixupCount;
449 #endif
450 ULONG SpareCounter0;
451 #if (NTDDI_VERSION < NTDDI_LONGHORN)
452 ULONG KeDcacheFlushCount;
453 ULONG KeExceptionDispatchCount;
454 ULONG KeFirstLevelTbFills;
455 ULONG KeFloatingEmulationCount;
456 ULONG KeIcacheFlushCount;
457 ULONG KeSecondLevelTbFills;
458 ULONG KeSystemCalls;
459 #endif
460 volatile ULONG IoReadOperationCount;
461 volatile ULONG IoWriteOperationCount;
462 volatile ULONG IoOtherOperationCount;
463 LARGE_INTEGER IoReadTransferCount;
464 LARGE_INTEGER IoWriteTransferCount;
465 LARGE_INTEGER IoOtherTransferCount;
466 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
467 ULONG CcFastMdlReadNoWait;
468 ULONG CcFastMdlReadWait;
469 ULONG CcFastMdlReadNotPossible;
470 ULONG CcMapDataNoWait;
471 ULONG CcMapDataWait;
472 ULONG CcPinMappedDataCount;
473 ULONG CcPinReadNoWait;
474 ULONG CcPinReadWait;
475 ULONG CcMdlReadNoWait;
476 ULONG CcMdlReadWait;
477 ULONG CcLazyWriteHotSpots;
478 ULONG CcLazyWriteIos;
479 ULONG CcLazyWritePages;
480 ULONG CcDataFlushes;
481 ULONG CcDataPages;
482 ULONG CcLostDelayedWrites;
483 ULONG CcFastReadResourceMiss;
484 ULONG CcCopyReadWaitMiss;
485 ULONG CcFastMdlReadResourceMiss;
486 ULONG CcMapDataNoWaitMiss;
487 ULONG CcMapDataWaitMiss;
488 ULONG CcPinReadNoWaitMiss;
489 ULONG CcPinReadWaitMiss;
490 ULONG CcMdlReadNoWaitMiss;
491 ULONG CcMdlReadWaitMiss;
492 ULONG CcReadAheadIos;
493 ULONG KeAlignmentFixupCount;
494 ULONG KeExceptionDispatchCount;
495 ULONG KeSystemCalls;
496 ULONG PrcbPad1[3];
497 #else
498 ULONG SpareCounter1[8];
499 #endif
500 PP_LOOKASIDE_LIST PPLookasideList[16];
501 PP_LOOKASIDE_LIST PPNPagedLookasideList[32];
502 PP_LOOKASIDE_LIST PPPagedLookasideList[32];
503 volatile ULONG PacketBarrier;
504 volatile ULONG ReverseStall;
505 PVOID IpiFrame;
506 UCHAR PrcbPad2[52];
507 volatile PVOID CurrentPacket[3];
508 volatile ULONG TargetSet;
509 volatile PKIPI_WORKER WorkerRoutine;
510 volatile ULONG IpiFrozen;
511 UCHAR PrcbPad3[40];
512 volatile ULONG RequestSummary;
513 volatile struct _KPRCB *SignalDone;
514 UCHAR PrcbPad4[56];
515 struct _KDPC_DATA DpcData[2];
516 PVOID DpcStack;
517 ULONG MaximumDpcQueueDepth;
518 ULONG DpcRequestRate;
519 ULONG MinimumDpcRate;
520 volatile UCHAR DpcInterruptRequested;
521 volatile UCHAR DpcThreadRequested;
522 volatile UCHAR DpcRoutineActive;
523 volatile UCHAR DpcThreadActive;
524 ULONG PrcbLock;
525 ULONG DpcLastCount;
526 volatile ULONG TimerHand;
527 volatile ULONG TimerRequest;
528 PVOID DpcThread;
529 KEVENT DpcEvent;
530 UCHAR ThreadDpcEnable;
531 volatile BOOLEAN QuantumEnd;
532 UCHAR PrcbPad50;
533 volatile UCHAR IdleSchedule;
534 LONG DpcSetEventRequest;
535 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
536 LONG Sleeping;
537 ULONG PeriodicCount;
538 ULONG PeriodicBias;
539 UCHAR PrcbPad5[6];
540 #else
541 UCHAR PrcbPad5[18];
542 #endif
543 LONG TickOffset;
544 KDPC CallDpc;
545 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
546 LONG ClockKeepAlive;
547 UCHAR ClockCheckSlot;
548 UCHAR ClockPollCycle;
549 UCHAR PrcbPad6[2];
550 LONG DpcWatchdogPeriod;
551 LONG DpcWatchDogCount;
552 LONG ThreadWatchdogPeriod;
553 LONG ThreadWatchDogCount;
554 ULONG PrcbPad70[2];
555 #else
556 ULONG PrcbPad7[8];
557 #endif
558 LIST_ENTRY WaitListHead;
559 ULONG ReadySummary;
560 ULONG QueueIndex;
561 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
562 SINGLE_LIST_ENTRY DeferredReadyListHead;
563 ULONGLONG StartCycles;
564 ULONGLONG CycleTime;
565 ULONGLONG PrcbPad71[3];
566 LIST_ENTRY DispatcherReadyListHead[32];
567 #else
568 LIST_ENTRY DispatcherReadyListHead[32];
569 SINGLE_LIST_ENTRY DeferredReadyListHead;
570 ULONG PrcbPad72[11];
571 #endif
572 PVOID ChainedInterruptList;
573 LONG LookasideIrpFloat;
574 volatile LONG MmPageFaultCount;
575 volatile LONG MmCopyOnWriteCount;
576 volatile LONG MmTransitionCount;
577 volatile LONG MmCacheTransitionCount;
578 volatile LONG MmDemandZeroCount;
579 volatile LONG MmPageReadCount;
580 volatile LONG MmPageReadIoCount;
581 volatile LONG MmCacheReadCount;
582 volatile LONG MmCacheIoCount;
583 volatile LONG MmDirtyPagesWriteCount;
584 volatile LONG MmDirtyWriteIoCount;
585 volatile LONG MmMappedPagesWriteCount;
586 volatile LONG MmMappedWriteIoCount;
587 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
588 ULONG CachedCommit;
589 ULONG CachedResidentAvailable;
590 PVOID HyperPte;
591 UCHAR CpuVendor;
592 UCHAR PrcbPad9[3];
593 #else
594 ULONG SpareFields0[1];
595 #endif
596 CHAR VendorString[13];
597 UCHAR InitialApicId;
598 UCHAR LogicalProcessorsPerPhysicalProcessor;
599 ULONG MHz;
600 ULONG FeatureBits;
601 LARGE_INTEGER UpdateSignature;
602 volatile LARGE_INTEGER IsrTime;
603 LARGE_INTEGER SpareField1;
604 FX_SAVE_AREA NpxSaveArea;
605 PROCESSOR_POWER_STATE PowerState;
606 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
607 KDPC DpcWatchdogDoc;
608 KTIMER DpcWatchdogTimer;
609 PVOID WheaInfo;
610 PVOID EtwSupport;
611 SLIST_HEADER InterruptObjectPool;
612 LARGE_INTEGER HyperCallPagePhysical;
613 LARGE_INTEGER HyperCallPageVirtual;
614 PVOID RateControl;
615 CACHE_DESCRIPTOR Cache[5];
616 ULONG CacheCount;
617 ULONG CacheProcessorMask[5];
618 UCHAR LogicalProcessorsPerCore;
619 UCHAR PrcbPad8[3];
620 ULONG PackageProcessorSet;
621 ULONG CoreProcessorSet;
622 #endif
623 } KPRCB, *PKPRCB;
624
625 //
626 // Processor Control Region
627 //
628 typedef struct _KIPCR
629 {
630 union
631 {
632 NT_TIB NtTib;
633 struct
634 {
635 struct _EXCEPTION_REGISTRATION_RECORD *Used_ExceptionList;
636 PVOID Used_StackBase;
637 PVOID PerfGlobalGroupMask;
638 PVOID TssCopy;
639 ULONG ContextSwitches;
640 KAFFINITY SetMemberCopy;
641 PVOID Used_Self;
642 };
643 };
644 struct _KPCR *Self;
645 struct _KPRCB *Prcb;
646 KIRQL Irql;
647 ULONG IRR;
648 ULONG IrrActive;
649 ULONG IDR;
650 PVOID KdVersionBlock;
651 PKIDTENTRY IDT;
652 PKGDTENTRY GDT;
653 struct _KTSS *TSS;
654 USHORT MajorVersion;
655 USHORT MinorVersion;
656 KAFFINITY SetMember;
657 ULONG StallScaleFactor;
658 UCHAR SparedUnused;
659 UCHAR Number;
660 UCHAR Reserved;
661 UCHAR L2CacheAssociativity;
662 ULONG VdmAlert;
663 ULONG KernelReserved[14];
664 ULONG SecondLevelCacheSize;
665 ULONG HalReserved[16];
666 ULONG InterruptMode;
667 UCHAR Spare1;
668 ULONG KernelReserved2[17];
669 KPRCB PrcbData;
670 } KIPCR, *PKIPCR;
671 #pragma pack(pop)
672
673 //
674 // TSS Definition
675 //
676 typedef struct _KiIoAccessMap
677 {
678 UCHAR DirectionMap[32];
679 UCHAR IoMap[8196];
680 } KIIO_ACCESS_MAP;
681
682 typedef struct _KTSS
683 {
684 USHORT Backlink;
685 USHORT Reserved0;
686 ULONG Esp0;
687 USHORT Ss0;
688 USHORT Reserved1;
689 ULONG NotUsed1[4];
690 ULONG CR3;
691 ULONG Eip;
692 ULONG EFlags;
693 ULONG Eax;
694 ULONG Ecx;
695 ULONG Edx;
696 ULONG Ebx;
697 ULONG Esp;
698 ULONG Ebp;
699 ULONG Esi;
700 ULONG Edi;
701 USHORT Es;
702 USHORT Reserved2;
703 USHORT Cs;
704 USHORT Reserved3;
705 USHORT Ss;
706 USHORT Reserved4;
707 USHORT Ds;
708 USHORT Reserved5;
709 USHORT Fs;
710 USHORT Reserved6;
711 USHORT Gs;
712 USHORT Reserved7;
713 USHORT LDT;
714 USHORT Reserved8;
715 USHORT Flags;
716 USHORT IoMapBase;
717 KIIO_ACCESS_MAP IoMaps[1];
718 UCHAR IntDirectionMap[32];
719 } KTSS, *PKTSS;
720
721 //
722 // i386 CPUs don't have exception frames
723 //
724 typedef struct _KEXCEPTION_FRAME KEXCEPTION_FRAME, *PKEXCEPTION_FRAME;
725 #endif
726 #endif