Sync with trunk r63502.
[reactos.git] / include / reactos / arm / armddk.h
index ad235b0..814f64b 100644 (file)
@@ -8,7 +8,7 @@
 #define PAGE_SIZE 0x1000
 #endif
 
-#ifndef _WINNT_H
+#ifndef _WINNT_
 //
 // IRQLs
 //
@@ -34,7 +34,7 @@
 #define PCR                     ((KPCR * const)KIP0PCRADDRESS)
 #define USERPCR                 ((volatile KPCR * const)USPCR)
 #define KeGetPcr()              PCR
-#ifndef _WINNT_H
+#ifndef _WINNT_
 #define SharedUserData          ((KUSER_SHARED_DATA * const)KI_USER_SHARED_DATA)
 
 //
@@ -124,7 +124,7 @@ typedef struct _CONTEXT {
 //
 // Processor Control Region
 //
-#ifdef _WINNT_H
+#ifdef _WINNT_
 #define KIRQL ULONG
 #endif
 
@@ -173,6 +173,12 @@ typedef struct _KPCR
     ULONG StallScaleFactor;
     UCHAR SpareUnused;
     UCHAR Number;
+    UCHAR Spare0;
+    UCHAR SecondLevelCacheAssociativity;
+    ULONG VdmAlert;
+    ULONG KernelReserved[14];
+    ULONG SecondLevelCacheSize;
+    ULONG HalReserved[16];
 } KPCR, *PKPCR;
 
 //
@@ -189,6 +195,22 @@ struct _KTHREAD*
 NTAPI
 KeGetCurrentThread(VOID);
 
+FORCEINLINE
+NTSTATUS
+KeSaveFloatingPointState(PVOID FloatingState)
+{
+  UNREFERENCED_PARAMETER(FloatingState);
+  return STATUS_SUCCESS;
+}
+
+FORCEINLINE
+NTSTATUS
+KeRestoreFloatingPointState(PVOID FloatingState)
+{
+  UNREFERENCED_PARAMETER(FloatingState);
+  return STATUS_SUCCESS;
+}
+
 extern volatile struct _KSYSTEM_TIME KeTickCount;
 
 #ifndef YieldProcessor
@@ -206,6 +228,7 @@ extern volatile struct _KSYSTEM_TIME KeTickCount;
 #define RESULT_NEGATIVE 1
 #define RESULT_POSITIVE 2
 
+#if 0
 DECLSPEC_IMPORT
 VOID
 __fastcall
@@ -218,8 +241,9 @@ KIRQL
 __fastcall
 KfAcquireSpinLock(
   IN OUT ULONG_PTR* SpinLock);
+#endif
 
-#ifndef _WINNT_H
+#ifndef _WINNT_
 //
 // IRQL Support on ARM is similar to MIPS/ALPHA
 //
@@ -246,6 +270,35 @@ KeRaiseIrqlToDpcLevel(
 #define KeLowerIrql(NewIrql) KfLowerIrql(NewIrql)
 #define KeRaiseIrql(NewIrql, OldIrql) *(OldIrql) = KfRaiseIrql(NewIrql)
 
+NTHALAPI
+KIRQL
+FASTCALL
+KfAcquireSpinLock(
+  IN OUT PKSPIN_LOCK SpinLock);
+#define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
+
+NTHALAPI
+VOID
+FASTCALL
+KfReleaseSpinLock(
+  IN OUT PKSPIN_LOCK SpinLock,
+  IN KIRQL NewIrql);
+#define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
+
+NTKERNELAPI
+VOID
+FASTCALL
+KefAcquireSpinLockAtDpcLevel(
+  IN OUT PKSPIN_LOCK SpinLock);
+#define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
+
+NTKERNELAPI
+VOID
+FASTCALL
+KefReleaseSpinLockFromDpcLevel(
+  IN OUT PKSPIN_LOCK SpinLock);
+#define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
+
 //
 // Cache clean and flush
 //
@@ -258,6 +311,26 @@ VOID
 HalSweepIcache(
     VOID
 );
+
+FORCEINLINE
+VOID
+_KeQueryTickCount(
+  OUT PLARGE_INTEGER CurrentCount)
+{
+  for (;;) {
+#ifdef NONAMELESSUNION
+    CurrentCount->s.HighPart = KeTickCount.High1Time;
+    CurrentCount->s.LowPart = KeTickCount.LowPart;
+    if (CurrentCount->s.HighPart == KeTickCount.High2Time) break;
+#else
+    CurrentCount->HighPart = KeTickCount.High1Time;
+    CurrentCount->LowPart = KeTickCount.LowPart;
+    if (CurrentCount->HighPart == KeTickCount.High2Time) break;
+#endif
+    YieldProcessor();
+  }
+}
+#define KeQueryTickCount(CurrentCount) _KeQueryTickCount(CurrentCount)
 #endif
 
 //