Add basic arm target support to the build system.
[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 #define KeGetPcr() PCR
33 #else
34 #define KeGetPcr() ((volatile KPCR * const)__readfsdword(0x1C))
35 #endif
36
37 //
38 // Machine Types
39 //
40 #define MACHINE_TYPE_ISA 0x0000
41 #define MACHINE_TYPE_EISA 0x0001
42 #define MACHINE_TYPE_MCA 0x0002
43
44 //
45 // X86 80386 Segment Types
46 //
47 #define I386_TASK_GATE 0x5
48 #define I386_TSS 0x9
49 #define I386_ACTIVE_TSS 0xB
50 #define I386_CALL_GATE 0xC
51 #define I386_INTERRUPT_GATE 0xE
52 #define I386_TRAP_GATE 0xF
53
54 //
55 // Selector Names
56 //
57 #define RPL_MASK 0x0003
58 #define MODE_MASK 0x0001
59 #define KGDT_R0_CODE 0x8
60 #define KGDT_R0_DATA 0x10
61 #define KGDT_R3_CODE 0x18
62 #define KGDT_R3_DATA 0x20
63 #define KGDT_TSS 0x28
64 #define KGDT_R0_PCR 0x30
65 #define KGDT_R3_TEB 0x38
66 #define KGDT_LDT 0x48
67 #define KGDT_DF_TSS 0x50
68 #define KGDT_NMI_TSS 0x58
69
70 //
71 // CR4
72 //
73 #define CR4_VME 0x1
74 #define CR4_PVI 0x2
75 #define CR4_TSD 0x4
76 #define CR4_DE 0x8
77 #define CR4_PSE 0x10
78 #define CR4_PAE 0x20
79 #define CR4_MCE 0x40
80 #define CR4_PGE 0x80
81 #define CR4_FXSR 0x200
82 #define CR4_XMMEXCPT 0x400
83
84 //
85 // EFlags
86 //
87 #define EFLAGS_CF 0x01L
88 #define EFLAGS_ZF 0x40L
89 #define EFLAGS_TF 0x100L
90 #define EFLAGS_INTERRUPT_MASK 0x200L
91 #define EFLAGS_DF 0x400L
92 #define EFLAGS_NESTED_TASK 0x4000L
93 #define EFLAGS_V86_MASK 0x20000
94 #define EFLAGS_ALIGN_CHECK 0x40000
95 #define EFLAGS_VIF 0x80000
96 #define EFLAGS_VIP 0x100000
97 #define EFLAGS_USER_SANITIZE 0x3F4DD7
98 #define EFLAG_SIGN 0x8000
99 #define EFLAG_ZERO 0x4000
100
101 //
102 // IPI Types
103 //
104 #define IPI_APC 1
105 #define IPI_DPC 2
106 #define IPI_FREEZE 4
107 #define IPI_PACKET_READY 8
108 #define IPI_SYNCH_REQUEST 16
109
110 //
111 // PRCB Flags
112 //
113 #define PRCB_MAJOR_VERSION 1
114 #define PRCB_BUILD_DEBUG 1
115 #define PRCB_BUILD_UNIPROCESSOR 2
116
117 //
118 // HAL Variables
119 //
120 #define INITIAL_STALL_COUNT 0x64
121
122 //
123 // IOPM Definitions
124 //
125 #define IO_ACCESS_MAP_NONE 0
126 #define IOPM_OFFSET FIELD_OFFSET(KTSS, IoMaps[0].IoMap)
127 #define KiComputeIopmOffset(MapNumber) \
128 (MapNumber == IO_ACCESS_MAP_NONE) ? \
129 (USHORT)(sizeof(KTSS)) : \
130 (USHORT)(FIELD_OFFSET(KTSS, IoMaps[MapNumber-1].IoMap))
131
132 //
133 // Static Kernel-Mode Address start (use MM_KSEG0_BASE for actual)
134 //
135 #define KSEG0_BASE 0x80000000
136
137 //
138 // Synchronization-level IRQL
139 //
140 #ifndef CONFIG_SMP
141 #define SYNCH_LEVEL DISPATCH_LEVEL
142 #else
143 #define SYNCH_LEVEL (IPI_LEVEL - 1)
144 #endif
145
146 //
147 // Trap Frame Definition
148 //
149 typedef struct _KTRAP_FRAME
150 {
151 ULONG DbgEbp;
152 ULONG DbgEip;
153 ULONG DbgArgMark;
154 ULONG DbgArgPointer;
155 ULONG TempSegCs;
156 ULONG TempEsp;
157 ULONG Dr0;
158 ULONG Dr1;
159 ULONG Dr2;
160 ULONG Dr3;
161 ULONG Dr6;
162 ULONG Dr7;
163 ULONG SegGs;
164 ULONG SegEs;
165 ULONG SegDs;
166 ULONG Edx;
167 ULONG Ecx;
168 ULONG Eax;
169 ULONG PreviousPreviousMode;
170 struct _EXCEPTION_REGISTRATION_RECORD FAR *ExceptionList;
171 ULONG SegFs;
172 ULONG Edi;
173 ULONG Esi;
174 ULONG Ebx;
175 ULONG Ebp;
176 ULONG ErrCode;
177 ULONG Eip;
178 ULONG SegCs;
179 ULONG EFlags;
180 ULONG HardwareEsp;
181 ULONG HardwareSegSs;
182 ULONG V86Es;
183 ULONG V86Ds;
184 ULONG V86Fs;
185 ULONG V86Gs;
186 } KTRAP_FRAME, *PKTRAP_FRAME;
187
188 //
189 // LDT Entry Definition
190 //
191 #ifndef _LDT_ENTRY_DEFINED
192 #define _LDT_ENTRY_DEFINED
193 typedef struct _LDT_ENTRY
194 {
195 USHORT LimitLow;
196 USHORT BaseLow;
197 union
198 {
199 struct
200 {
201 UCHAR BaseMid;
202 UCHAR Flags1;
203 UCHAR Flags2;
204 UCHAR BaseHi;
205 } Bytes;
206 struct
207 {
208 ULONG BaseMid:8;
209 ULONG Type:5;
210 ULONG Dpl:2;
211 ULONG Pres:1;
212 ULONG LimitHi:4;
213 ULONG Sys:1;
214 ULONG Reserved_0:1;
215 ULONG Default_Big:1;
216 ULONG Granularity:1;
217 ULONG BaseHi:8;
218 } Bits;
219 } HighWord;
220 } LDT_ENTRY, *PLDT_ENTRY, *LPLDT_ENTRY;
221 #endif
222
223 //
224 // GDT Entry Definition
225 //
226 typedef struct _KGDTENTRY
227 {
228 USHORT LimitLow;
229 USHORT BaseLow;
230 union
231 {
232 struct
233 {
234 UCHAR BaseMid;
235 UCHAR Flags1;
236 UCHAR Flags2;
237 UCHAR BaseHi;
238 } Bytes;
239 struct
240 {
241 ULONG BaseMid:8;
242 ULONG Type:5;
243 ULONG Dpl:2;
244 ULONG Pres:1;
245 ULONG LimitHi:4;
246 ULONG Sys:1;
247 ULONG Reserved_0:1;
248 ULONG Default_Big:1;
249 ULONG Granularity:1;
250 ULONG BaseHi:8;
251 } Bits;
252 } HighWord;
253 } KGDTENTRY, *PKGDTENTRY;
254
255 //
256 // IDT Entry Access Definition
257 //
258 typedef struct _KIDT_ACCESS
259 {
260 union
261 {
262 struct
263 {
264 UCHAR Reserved;
265 UCHAR SegmentType:4;
266 UCHAR SystemSegmentFlag:1;
267 UCHAR Dpl:2;
268 UCHAR Present:1;
269 };
270 USHORT Value;
271 };
272 } KIDT_ACCESS, *PKIDT_ACCESS;
273
274 //
275 // IDT Entry Definition
276 //
277 typedef struct _KIDTENTRY
278 {
279 USHORT Offset;
280 USHORT Selector;
281 USHORT Access;
282 USHORT ExtendedOffset;
283 } KIDTENTRY, *PKIDTENTRY;
284
285 typedef struct _DESCRIPTOR
286 {
287 USHORT Pad;
288 USHORT Limit;
289 ULONG Base;
290 } KDESCRIPTOR, *PKDESCRIPTOR;
291
292 #ifndef NTOS_MODE_USER
293 //
294 // Macro to get current KPRCB
295 //
296 FORCEINLINE
297 struct _KPRCB *
298 KeGetCurrentPrcb(VOID)
299 {
300 return (struct _KPRCB *)(ULONG_PTR)__readfsdword(FIELD_OFFSET(KPCR, Prcb));
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 #ifdef __REACTOS__
653 PUSHORT GDT;
654 #else
655 PKGDTENTRY GDT;
656 #endif
657 struct _KTSS *TSS;
658 USHORT MajorVersion;
659 USHORT MinorVersion;
660 KAFFINITY SetMember;
661 ULONG StallScaleFactor;
662 UCHAR SparedUnused;
663 UCHAR Number;
664 UCHAR Reserved;
665 UCHAR L2CacheAssociativity;
666 ULONG VdmAlert;
667 ULONG KernelReserved[14];
668 ULONG SecondLevelCacheSize;
669 ULONG HalReserved[16];
670 ULONG InterruptMode;
671 UCHAR Spare1;
672 ULONG KernelReserved2[17];
673 KPRCB PrcbData;
674 } KIPCR, *PKIPCR;
675 #pragma pack(pop)
676
677 //
678 // TSS Definition
679 //
680 typedef struct _KiIoAccessMap
681 {
682 UCHAR DirectionMap[32];
683 UCHAR IoMap[8196];
684 } KIIO_ACCESS_MAP;
685
686 typedef struct _KTSS
687 {
688 USHORT Backlink;
689 USHORT Reserved0;
690 ULONG Esp0;
691 USHORT Ss0;
692 USHORT Reserved1;
693 ULONG NotUsed1[4];
694 ULONG CR3;
695 ULONG Eip;
696 ULONG EFlags;
697 ULONG Eax;
698 ULONG Ecx;
699 ULONG Edx;
700 ULONG Ebx;
701 ULONG Esp;
702 ULONG Ebp;
703 ULONG Esi;
704 ULONG Edi;
705 USHORT Es;
706 USHORT Reserved2;
707 USHORT Cs;
708 USHORT Reserved3;
709 USHORT Ss;
710 USHORT Reserved4;
711 USHORT Ds;
712 USHORT Reserved5;
713 USHORT Fs;
714 USHORT Reserved6;
715 USHORT Gs;
716 USHORT Reserved7;
717 USHORT LDT;
718 USHORT Reserved8;
719 USHORT Flags;
720 USHORT IoMapBase;
721 KIIO_ACCESS_MAP IoMaps[1];
722 UCHAR IntDirectionMap[32];
723 } KTSS, *PKTSS;
724
725 //
726 // i386 CPUs don't have exception frames
727 //
728 typedef struct _KEXCEPTION_FRAME KEXCEPTION_FRAME, *PKEXCEPTION_FRAME;
729 #endif
730 #endif