[HEADERS]
[reactos.git] / reactos / include / ndk / i386 / ketypes.h
index 5f7fcf8..f90a39e 100644 (file)
@@ -27,10 +27,10 @@ Author:
 // KPCR Access for non-IA64 builds
 //
 #define K0IPCR                  ((ULONG_PTR)(KIP0PCRADDRESS))
-#define PCR                     ((volatile KPCR * const)K0IPCR)
+#define PCR                     ((KPCR * const)K0IPCR)
 #if defined(CONFIG_SMP) || defined(NT_BUILD)
 #undef  KeGetPcr
-#define KeGetPcr()              ((volatile KPCR * const)__readfsdword(0x1C))
+#define KeGetPcr()              ((KPCR * const)__readfsdword(FIELD_OFFSET(KPCR, SelfPcr)))
 #endif
 
 //
@@ -66,6 +66,11 @@ Author:
 #define KGDT_DF_TSS             0x50
 #define KGDT_NMI_TSS            0x58
 
+//
+// Define the number of GDTs that can be queried by user mode
+//
+#define KGDT_NUMBER             10
+
 //
 // CR4
 //
@@ -88,15 +93,29 @@ Author:
 #define EFLAGS_TF               0x100L
 #define EFLAGS_INTERRUPT_MASK   0x200L
 #define EFLAGS_DF               0x400L
+#define EFLAGS_IOPL             0x3000L
 #define EFLAGS_NESTED_TASK      0x4000L
+#define EFLAGS_RF               0x10000
 #define EFLAGS_V86_MASK         0x20000
 #define EFLAGS_ALIGN_CHECK      0x40000
 #define EFLAGS_VIF              0x80000
 #define EFLAGS_VIP              0x100000
+#define EFLAGS_ID               0x200000
 #define EFLAGS_USER_SANITIZE    0x3F4DD7
 #define EFLAG_SIGN              0x8000
 #define EFLAG_ZERO              0x4000
 
+//
+// Legacy floating status word bit masks.
+//
+#define FSW_INVALID_OPERATION   0x1
+#define FSW_DENORMAL            0x2
+#define FSW_ZERO_DIVIDE         0x4
+#define FSW_OVERFLOW            0x8
+#define FSW_UNDERFLOW           0x10
+#define FSW_PRECISION           0x20
+#define FSW_STACK_FAULT         0x40
+
 //
 // IPI Types
 //
@@ -116,18 +135,27 @@ Author:
 //
 // HAL Variables
 //
-#define INITIAL_STALL_COUNT     0x64
+#define INITIAL_STALL_COUNT     100
 
 //
 // IOPM Definitions
 //
+#define IOPM_COUNT              1
+#define IOPM_SIZE               8192
+#define IOPM_FULL_SIZE          8196
 #define IO_ACCESS_MAP_NONE      0
+#define IOPM_DIRECTION_MAP_SIZE 32
 #define IOPM_OFFSET             FIELD_OFFSET(KTSS, IoMaps[0].IoMap)
 #define KiComputeIopmOffset(MapNumber)              \
     (MapNumber == IO_ACCESS_MAP_NONE) ?             \
         (USHORT)(sizeof(KTSS)) :                    \
         (USHORT)(FIELD_OFFSET(KTSS, IoMaps[MapNumber-1].IoMap))
 
+//
+// Size of the XMM register save area in the FXSAVE format
+//
+#define SIZE_OF_FX_REGISTERS    128
+
 //
 // Static Kernel-Mode Address start (use MM_KSEG0_BASE for actual)
 //
@@ -139,7 +167,11 @@ Author:
 #ifndef CONFIG_SMP
 #define SYNCH_LEVEL             DISPATCH_LEVEL
 #else
+#if (NTDDI_VERSION < NTDDI_WS03)
 #define SYNCH_LEVEL             (IPI_LEVEL - 1)
+#else
+#define SYNCH_LEVEL             (IPI_LEVEL - 2)
+#endif
 #endif
 
 //
@@ -184,6 +216,23 @@ typedef struct _KTRAP_FRAME
     ULONG V86Gs;
 } KTRAP_FRAME, *PKTRAP_FRAME;
 
+//
+// Defines the Callback Stack Layout for User Mode Callbacks
+//
+typedef struct _KCALLOUT_FRAME
+{
+    ULONG InitialStack;
+    ULONG TrapFrame;
+    ULONG CallbackStack;
+    ULONG Edi;
+    ULONG Esi;
+    ULONG Ebx;
+    ULONG Ebp;
+    ULONG ReturnAddress;
+    ULONG Result;
+    ULONG ResultLength;
+} KCALLOUT_FRAME, *PKCALLOUT_FRAME;
+
 //
 // LDT Entry Definition
 //
@@ -326,7 +375,7 @@ typedef struct _FXSAVE_FORMAT
     ULONG DataSelector;
     ULONG MXCsr;
     ULONG MXCsrMask;
-    UCHAR RegisterArea[128];
+    UCHAR RegisterArea[SIZE_OF_FX_REGISTERS];
     UCHAR Reserved3[128];
     UCHAR Reserved4[224];
     UCHAR Align16Byte[8];
@@ -648,20 +697,16 @@ typedef struct _KIPCR
     ULONG IDR;
     PVOID KdVersionBlock;
     PKIDTENTRY IDT;
-#ifdef __REACTOS__
-    PUSHORT GDT;
-#else
     PKGDTENTRY GDT;
-#endif
     struct _KTSS *TSS;
     USHORT MajorVersion;
     USHORT MinorVersion;
     KAFFINITY SetMember;
     ULONG StallScaleFactor;
-    UCHAR SparedUnused;
+    UCHAR SpareUnused;
     UCHAR Number;
-    UCHAR Reserved;
-    UCHAR L2CacheAssociativity;
+    UCHAR Spare0;
+    UCHAR SecondLevelCacheAssociativity;
     ULONG VdmAlert;
     ULONG KernelReserved[14];
     ULONG SecondLevelCacheSize;
@@ -678,8 +723,8 @@ typedef struct _KIPCR
 //
 typedef struct _KiIoAccessMap
 {
-    UCHAR DirectionMap[32];
-    UCHAR IoMap[8196];
+    UCHAR DirectionMap[IOPM_DIRECTION_MAP_SIZE];
+    UCHAR IoMap[IOPM_FULL_SIZE];
 } KIIO_ACCESS_MAP;
 
 typedef struct _KTSS
@@ -717,8 +762,8 @@ typedef struct _KTSS
     USHORT Reserved8;
     USHORT Flags;
     USHORT IoMapBase;
-    KIIO_ACCESS_MAP IoMaps[1];
-    UCHAR IntDirectionMap[32];
+    KIIO_ACCESS_MAP IoMaps[IOPM_COUNT];
+    UCHAR IntDirectionMap[IOPM_DIRECTION_MAP_SIZE];
 } KTSS, *PKTSS;
 
 //