Add the missing KeContextSwitches to the PRCB.
[reactos.git] / reactos / include / ndk / arm / ketypes.h
index 9ab0e53..93ef13c 100644 (file)
@@ -47,7 +47,7 @@ Author:
 //
 // HAL Variables
 //
-#define INITIAL_STALL_COUNT     0x64
+#define INITIAL_STALL_COUNT     100
 
 //
 // Static Kernel-Mode Address start (use MM_KSEG0_BASE for actual)
@@ -59,6 +59,7 @@ Author:
 //
 typedef struct _KTRAP_FRAME
 {
+    ULONG DbgArgMark;
     ULONG R0;
     ULONG R1;
     ULONG R2;
@@ -72,19 +73,28 @@ typedef struct _KTRAP_FRAME
     ULONG R10;
     ULONG R11;
     ULONG R12;
-    ULONG Sp;
-    ULONG Lr;
+    ULONG UserSp;
+    ULONG UserLr;
+    ULONG SvcSp;
+    ULONG SvcLr;
     ULONG Pc;
-    ULONG Psr;   
-    UCHAR ExceptionRecord[(sizeof(EXCEPTION_RECORD) + 7) & (~7)];
-    UCHAR OldIrql;
-    UCHAR PreviousMode;
-    ULONG Fpscr;
-    ULONG FpExc;
-    ULONG S[33];
-    ULONG FpExtra[8];
+    ULONG Spsr;
+    ULONG OldIrql;
+    ULONG PreviousMode;
+    ULONG PreviousTrapFrame;
 } KTRAP_FRAME, *PKTRAP_FRAME;
 
+//
+// Defines the Callback Stack Layout for User Mode Callbacks
+//
+// Just a stub with some required members for now
+//
+typedef struct _KCALLOUT_FRAME
+{
+    ULONG CallbackStack;
+    ULONG DummyFramePointer;
+} KCALLOUT_FRAME, *PKCALLOUT_FRAME;
+
 #ifndef NTOS_MODE_USER
 
 //
@@ -92,15 +102,196 @@ typedef struct _KTRAP_FRAME
 //
 typedef struct _KEXCEPTION_FRAME
 {
-    ULONG PlaceHolder;
+  //  ULONG R0;
+//    ULONG R1;
+//    ULONG R2;
+//    ULONG R3;    
+    ULONG R4;
+    ULONG R5;
+    ULONG R6;
+    ULONG R7;
+    ULONG R8;
+    ULONG R9;
+    ULONG R10;
+    ULONG R11;
+//    ULONG R12;
+    ULONG Lr;
+    ULONG Psr;
 } KEXCEPTION_FRAME, *PKEXCEPTION_FRAME;
 
+//
+// ARM Internal Registers
+//
+typedef union _ARM_TTB_REGISTER
+{
+    struct
+    {
+        ULONG Reserved:14;
+        ULONG BaseAddress:18;
+    };
+    ULONG AsUlong;
+} ARM_TTB_REGISTER;
+
+typedef union _ARM_STATUS_REGISTER
+{
+    
+    struct
+    {
+        ULONG Mode:5;
+        ULONG State:1;
+        ULONG FiqDisable:1;
+        ULONG IrqDisable:1;
+        ULONG ImpreciseAbort:1;
+        ULONG Endianness:1;
+        ULONG Sbz:6;
+        ULONG GreaterEqual:4;
+        ULONG Sbz1:4;
+        ULONG Java:1;
+        ULONG Sbz2:2;
+        ULONG StickyOverflow:1;
+        ULONG Overflow:1;
+        ULONG CarryBorrowExtend:1;
+        ULONG Zero:1;
+        ULONG NegativeLessThan:1;
+    };
+    ULONG AsUlong;
+} ARM_STATUS_REGISTER;
+
+typedef union _ARM_DOMAIN_REGISTER
+{
+    struct
+    {
+        ULONG Domain0:2;
+        ULONG Domain1:2;
+        ULONG Domain2:2;
+        ULONG Domain3:2;
+        ULONG Domain4:2;
+        ULONG Domain5:2;
+        ULONG Domain6:2;
+        ULONG Domain7:2;
+        ULONG Domain8:2;
+        ULONG Domain9:2;
+        ULONG Domain10:2;
+        ULONG Domain11:2;
+        ULONG Domain12:2;
+        ULONG Domain13:2;
+        ULONG Domain14:2;
+        ULONG Domain15:2;
+    };
+    ULONG AsUlong;
+} ARM_DOMAIN_REGISTER;
+
+typedef union _ARM_CONTROL_REGISTER
+{
+    struct
+    {
+        ULONG MmuEnabled:1;
+        ULONG AlignmentFaultsEnabled:1;
+        ULONG DCacheEnabled:1;
+        ULONG Sbo:4;
+        ULONG BigEndianEnabled:1;
+        ULONG System:1;
+        ULONG Rom:1;
+        ULONG Sbz:2;
+        ULONG ICacheEnabled:1;
+        ULONG HighVectors:1;
+        ULONG RoundRobinReplacementEnabled:1;
+        ULONG Armv4Compat:1;
+        ULONG Sbo1:1;
+        ULONG Sbz1:1;
+        ULONG Sbo2:1;
+        ULONG Reserved:14;
+    };
+    ULONG AsUlong;
+} ARM_CONTROL_REGISTER, *PARM_CONTROL_REGISTER;
+
+typedef union _ARM_ID_CODE_REGISTER
+{
+    struct
+    {
+        ULONG Revision:4;
+        ULONG PartNumber:12;
+        ULONG Architecture:4;
+        ULONG Variant:4;
+        ULONG Identifier:8;
+    };
+    ULONG AsUlong;
+} ARM_ID_CODE_REGISTER, *PARM_ID_CODE_REGISTER;
+
+typedef union _ARM_CACHE_REGISTER
+{
+    struct
+    {
+        ULONG ILength:2;
+        ULONG IMultipler:1;
+        ULONG IAssociativty:3;
+        ULONG ISize:4;
+        ULONG IReserved:2;
+        ULONG DLength:2;
+        ULONG DMultipler:1;
+        ULONG DAssociativty:3;
+        ULONG DSize:4;
+        ULONG DReserved:2;  
+        ULONG Separate:1;
+        ULONG CType:4;
+        ULONG Reserved:3;
+    };
+    ULONG AsUlong;
+} ARM_CACHE_REGISTER, *PARM_CACHE_REGISTER;
+
+typedef union _ARM_LOCKDOWN_REGISTER
+{
+    struct
+    {
+        ULONG Preserve:1;
+        ULONG Ignored:25;
+        ULONG Victim:3;
+        ULONG Reserved:3;
+    };
+    ULONG AsUlong;
+} ARM_LOCKDOWN_REGISTER, *PARM_LOCKDOWN_REGISTER;
+
+//
+// ARM Domains
+//
+typedef enum _ARM_DOMAINS
+{
+    Domain0,
+    Domain1,
+    Domain2,
+    Domain3,
+    Domain4,
+    Domain5,
+    Domain6,
+    Domain7,
+    Domain8,
+    Domain9,
+    Domain10,
+    Domain11,
+    Domain12,
+    Domain13,
+    Domain14,
+    Domain15
+} ARM_DOMAINS;
+
+//
+// Special Registers Structure (outside of CONTEXT)
+//
+typedef struct _KSPECIAL_REGISTERS
+{
+    ARM_CONTROL_REGISTER ControlRegister;
+    ARM_LOCKDOWN_REGISTER LockdownRegister;
+    ARM_CACHE_REGISTER CacheRegister;
+    ARM_STATUS_REGISTER StatusRegister;
+} KSPECIAL_REGISTERS, *PKSPECIAL_REGISTERS;
+
 //
 // Processor State
 //
 typedef struct _KPROCESSOR_STATE
 {
     struct _CONTEXT ContextFrame;
+    struct _KSPECIAL_REGISTERS SpecialRegisters;
 } KPROCESSOR_STATE, *PKPROCESSOR_STATE;
 
 //
@@ -135,6 +326,7 @@ typedef struct _KPRCB
     UCHAR NodeColor;
     UCHAR Spare1;
     ULONG NodeShiftedColor;
+    ULONG PcrPage;
     struct _KNODE *ParentNode;
     ULONG MultiThreadProcessorSet;
     struct _KPRCB *MultiThreadSetMaster;
@@ -160,6 +352,7 @@ typedef struct _KPRCB
     LARGE_INTEGER IoReadTransferCount;
     LARGE_INTEGER IoWriteTransferCount;
     LARGE_INTEGER IoOtherTransferCount;
+    ULONG KeContextSwitches;
     PP_LOOKASIDE_LIST PPLookasideList[16];
     PP_LOOKASIDE_LIST PPNPagedLookasideList[32];
     PP_LOOKASIDE_LIST PPPagedLookasideList[32];