Merge trunk head (r43756)
[reactos.git] / reactos / include / ndk / i386 / ketypes.h
index 0f95e50..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
@@ -96,31 +109,49 @@ Author:
 #define IPI_PACKET_READY        8
 #define IPI_SYNCH_REQUEST       16
 
+//
+// PRCB Flags
+//
+#define PRCB_MAJOR_VERSION      1
+#define PRCB_BUILD_DEBUG        1
+#define PRCB_BUILD_UNIPROCESSOR 2
+
 //
 // HAL Variables
 //
 #define INITIAL_STALL_COUNT     0x64
 
 //
-// Static Kernel-Mode Address start (use MM_KSEG0_BASE for actual)
+// IOPM Definitions
 //
-#define KSEG0_BASE              0x80000000
+#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))
 
 //
-// Macro to get current KPRCB
+// Size of the XMM register save area in the FXSAVE format
 //
-#ifndef __GNUC__ // fixme
-FORCEINLINE
-struct _KPRCB *
-KeGetCurrentPrcb(VOID)
-{
-    return (struct _KPRCB *)(ULONG_PTR)__readfsdword(FIELD_OFFSET(KPCR, Prcb));
-}
+#define SIZE_OF_FX_REGISTERS    128
+
+//
+// Static Kernel-Mode Address start (use MM_KSEG0_BASE for actual)
+//
+#define KSEG0_BASE              0x80000000
 
 //
-// Macro to get current previous mode
+// Synchronization-level IRQL
 //
-#define KeGetPreviousMode       ExGetPreviousMode
+#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
 
 //
@@ -262,16 +293,23 @@ 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
+//
+// Macro to get current KPRCB
+//
+FORCEINLINE
+struct _KPRCB *
+KeGetCurrentPrcb(VOID)
+{
+    return (struct _KPRCB *)(ULONG_PTR)__readfsdword(FIELD_OFFSET(KPCR, Prcb));
+}
 
 //
 // FN/FX (FPU) Save Area Structures
@@ -300,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];
@@ -342,7 +380,6 @@ typedef struct _KSPECIAL_REGISTERS
 //
 // Processor State Data
 //
-#pragma pack(push,4)
 typedef struct _KPROCESSOR_STATE
 {
     CONTEXT ContextFrame;
@@ -352,6 +389,7 @@ typedef struct _KPROCESSOR_STATE
 //
 // Processor Region Control Block
 //
+#pragma pack(push,4)
 typedef struct _KPRCB
 {
     USHORT MinorVersion;
@@ -566,7 +604,7 @@ typedef struct _KPRCB
 #else
     ULONG SpareFields0[1];
 #endif
-    CHAR VendorString[13];
+    UCHAR VendorString[13];
     UCHAR InitialApicId;
     UCHAR LogicalProcessorsPerPhysicalProcessor;
     ULONG MHz;
@@ -603,7 +641,7 @@ typedef struct _KIPCR
     union
     {
         NT_TIB NtTib;
-        struct 
+        struct
         {
             struct _EXCEPTION_REGISTRATION_RECORD *Used_ExceptionList;
             PVOID Used_StackBase;
@@ -622,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;