Merge trunk head (r43756)
[reactos.git] / reactos / include / ndk / i386 / ketypes.h
index d467a10..dab579f 100644 (file)
@@ -23,6 +23,16 @@ Author:
 // Dependencies
 //
 
+//
+// KPCR Access for non-IA64 builds
+//
+#define K0IPCR                  ((ULONG_PTR)(KIP0PCRADDRESS))
+#define PCR                     ((volatile KPCR * const)K0IPCR)
+#if defined(CONFIG_SMP) || defined(NT_BUILD)
+#undef  KeGetPcr
+#define KeGetPcr()              ((volatile KPCR * const)__readfsdword(0x1C))
+#endif
+
 //
 // Machine Types
 //
@@ -78,11 +88,14 @@ 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
@@ -108,6 +121,21 @@ Author:
 //
 #define INITIAL_STALL_COUNT     0x64
 
+//
+// IOPM Definitions
+//
+#define IO_ACCESS_MAP_NONE      0
+#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)
 //
@@ -119,7 +147,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
 
 //
@@ -261,14 +293,12 @@ typedef struct _KIDTENTRY
     USHORT ExtendedOffset;
 } KIDTENTRY, *PKIDTENTRY;
 
-#include <pshpack2.h>
 typedef struct _DESCRIPTOR
 {
+    USHORT Pad;
     USHORT Limit;
     ULONG Base;
-    USHORT Padding;
 } KDESCRIPTOR, *PKDESCRIPTOR;
-#include <poppack.h>
 
 #ifndef NTOS_MODE_USER
 //
@@ -308,7 +338,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];
@@ -574,7 +604,7 @@ typedef struct _KPRCB
 #else
     ULONG SpareFields0[1];
 #endif
-    CHAR VendorString[13];
+    UCHAR VendorString[13];
     UCHAR InitialApicId;
     UCHAR LogicalProcessorsPerPhysicalProcessor;
     ULONG MHz;
@@ -611,7 +641,7 @@ typedef struct _KIPCR
     union
     {
         NT_TIB NtTib;
-        struct 
+        struct
         {
             struct _EXCEPTION_REGISTRATION_RECORD *Used_ExceptionList;
             PVOID Used_StackBase;
@@ -630,17 +660,13 @@ 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;