branch update for HEAD-2003091401
[reactos.git] / include / ddk / exfuncs.h
index 026f90c..a678ea3 100644 (file)
@@ -256,12 +256,12 @@ ExInitializeResourceLite (
  *     Routine = Routine to be called by the worker thread
  *     Context = Parameter to be passed to the callback
  */
-#define ExInitializeWorkItem(Item, WorkerRoutine, RoutineContext) \
+#define ExInitializeWorkItem(Item, Routine, RoutineContext) \
        ASSERT_IRQL(DISPATCH_LEVEL); \
-       (Item)->Routine = (WorkerRoutine); \
-       (Item)->Context = (RoutineContext); \
-       (Item)->Entry.Flink = NULL; \
-       (Item)->Entry.Blink = NULL;
+       (Item)->WorkerRoutine = (Routine); \
+       (Item)->Parameter = (RoutineContext); \
+       (Item)->List.Flink = NULL; \
+       (Item)->List.Blink = NULL;
 
 NTSTATUS
 STDCALL
@@ -288,7 +288,7 @@ ExInterlockedAddLargeStatistic (
        );
 
 ULONG
-STDCALL
+FASTCALL
 ExInterlockedAddUlong (
        PULONG          Addend,
        ULONG           Increment,
@@ -355,21 +355,21 @@ ExInterlockedIncrementLong (
        PKSPIN_LOCK     Lock
        );
 PLIST_ENTRY
-STDCALL
+FASTCALL
 ExInterlockedInsertHeadList (
        PLIST_ENTRY     ListHead,
        PLIST_ENTRY     ListEntry,
        PKSPIN_LOCK     Lock
        );
 PLIST_ENTRY
-STDCALL
+FASTCALL
 ExInterlockedInsertTailList (
        PLIST_ENTRY     ListHead,
        PLIST_ENTRY     ListEntry,
        PKSPIN_LOCK     Lock
        );
 PSINGLE_LIST_ENTRY
-STDCALL
+FASTCALL
 ExInterlockedPopEntryList (
        PSINGLE_LIST_ENTRY      ListHead,
        PKSPIN_LOCK             Lock
@@ -381,7 +381,7 @@ ExInterlockedPopEntrySList (
        PKSPIN_LOCK     Lock
        );
 PSINGLE_LIST_ENTRY
-STDCALL
+FASTCALL
 ExInterlockedPushEntryList (
        PSINGLE_LIST_ENTRY      ListHead,
        PSINGLE_LIST_ENTRY      ListEntry,
@@ -403,7 +403,7 @@ ExInterlockedRemoveEntryList (
        );
 
 PLIST_ENTRY
-STDCALL
+FASTCALL
 ExInterlockedRemoveHeadList (
        PLIST_ENTRY     Head,
        PKSPIN_LOCK     Lock
@@ -441,7 +441,8 @@ ExIsResourceAcquiredExclusiveLite (
        PERESOURCE      Resource
        );
 
-ULONG
+/* was ULONG */
+USHORT
 STDCALL
 ExIsResourceAcquiredSharedLite (
        PERESOURCE      Resource
@@ -457,7 +458,7 @@ ExLocalTimeToSystemTime (
 VOID
 STDCALL
 ExNotifyCallback (
-       IN      PVOID   CallbackObject,
+       IN      PCALLBACK_OBJECT        CallbackObject,
        IN      PVOID   Argument1,
        IN      PVOID   Argument2
        );
@@ -477,7 +478,7 @@ ExPostSystemEvent (
  *     );
  */
 #define ExQueryDepthSList(ListHead) \
-       (USHORT)(ListHead)->s.Depth
+       (USHORT)(ListHead)->Depth
 
 VOID
 STDCALL
@@ -586,6 +587,18 @@ ExUnregisterCallback (
        IN      PVOID   CallbackRegistration
        );
 
+PSLIST_ENTRY
+FASTCALL
+InterlockedPopEntrySList (
+  IN PSLIST_HEADER ListHead
+  );
+
+PSLIST_ENTRY
+FASTCALL
+InterlockedPushEntrySList(
+  IN PSLIST_HEADER ListHead,
+  IN PSLIST_ENTRY ListEntry
+  );
 
 /*
  * PVOID
@@ -614,7 +627,7 @@ ExAllocateFromNPagedLookasideList (
 
        Lookaside->TotalAllocates++;
        Entry = ExInterlockedPopEntrySList (&Lookaside->ListHead,
-                                           &Lookaside->Lock);
+                                           &Lookaside->Obsoleted);
        if (Entry == NULL)
        {
                Lookaside->AllocateMisses++;
@@ -626,11 +639,21 @@ ExAllocateFromNPagedLookasideList (
   return Entry;
 }
 
-PVOID
-STDCALL
-ExAllocateFromPagedLookasideList (
-       PPAGED_LOOKASIDE_LIST   LookSide
-       );
+static inline PVOID
+ExAllocateFromPagedLookasideList(
+  IN PPAGED_LOOKASIDE_LIST  Lookaside)
+{
+  PVOID Entry;
+
+  Lookaside->TotalAllocates++;
+  Entry = InterlockedPopEntrySList(&Lookaside->ListHead);
+  if (Entry == NULL) {
+    Lookaside->AllocateMisses++;
+    Entry = (Lookaside->Allocate)(Lookaside->Type,
+      Lookaside->Size, Lookaside->Tag);
+  }
+  return Entry;
+}
 
 VOID
 STDCALL
@@ -669,7 +692,7 @@ ExFreeToNPagedLookasideList (
        )
 {
        Lookaside->TotalFrees++;
-       if (ExQueryDepthSList (&Lookaside->ListHead) >= Lookaside->MinimumDepth)
+       if (ExQueryDepthSList (&Lookaside->ListHead) >= Lookaside->Depth)
        {
                Lookaside->FreeMisses++;
                (Lookaside->Free)(Entry);
@@ -678,16 +701,23 @@ ExFreeToNPagedLookasideList (
        {
                ExInterlockedPushEntrySList (&Lookaside->ListHead,
                                             (PSINGLE_LIST_ENTRY)Entry,
-                                            &Lookaside->Lock);
+                                            &Lookaside->Obsoleted);
        }
 }
 
-VOID
-STDCALL
-ExFreeToPagedLookasideList (
-       PPAGED_LOOKASIDE_LIST   Lookaside,
-       PVOID                   Entry
-       );
+static inline VOID
+ExFreeToPagedLookasideList(
+  IN PPAGED_LOOKASIDE_LIST  Lookaside,
+  IN PVOID  Entry)
+{
+  Lookaside->TotalFrees++;
+  if (ExQueryDepthSList(&Lookaside->ListHead) >= Lookaside->Depth) {
+    Lookaside->FreeMisses++;
+    (Lookaside->Free)(Entry);
+  } else {
+    InterlockedPushEntrySList(&Lookaside->ListHead, (PSLIST_ENTRY)Entry);
+  }
+}
 
 VOID
 STDCALL
@@ -801,8 +831,10 @@ InterlockedIncrement (
        PLONG   Addend
        );
 
+#ifndef InterlockedExchangePointer
 #define InterlockedExchangePointer(__T__, __V__) \
  (PVOID)InterlockedExchange((PLONG)(__T__), (LONG)(__V__))
+#endif
 
 /*---*/
 
@@ -818,98 +850,4 @@ ExHookException (
        unsigned int    exp
        );
 
-/* BEGIN REACTOS ONLY */
-
-BOOLEAN STDCALL
-ExInitializeBinaryTree(IN PBINARY_TREE  Tree,
-  IN PKEY_COMPARATOR  Compare,
-  IN BOOLEAN  UseNonPagedPool);
-
-VOID STDCALL
-ExDeleteBinaryTree(IN PBINARY_TREE  Tree);
-
-VOID STDCALL
-ExInsertBinaryTree(IN PBINARY_TREE  Tree,
-  IN PVOID  Key,
-  IN PVOID  Value);
-
-BOOLEAN STDCALL
-ExSearchBinaryTree(IN PBINARY_TREE  Tree,
-  IN PVOID  Key,
-  OUT PVOID  * Value);
-
-BOOLEAN STDCALL
-ExRemoveBinaryTree(IN PBINARY_TREE  Tree,
-  IN PVOID  Key,
-  IN PVOID  * Value);
-
-BOOLEAN STDCALL
-ExTraverseBinaryTree(IN PBINARY_TREE  Tree,
-  IN TRAVERSE_METHOD  Method,
-  IN PTRAVERSE_ROUTINE  Routine,
-  IN PVOID  Context);
-
-BOOLEAN STDCALL
-ExInitializeSplayTree(IN PSPLAY_TREE  Tree,
-  IN PKEY_COMPARATOR  Compare,
-  IN BOOLEAN  Weighted,
-  IN BOOLEAN  UseNonPagedPool);
-
-VOID STDCALL
-ExDeleteSplayTree(IN PSPLAY_TREE  Tree);
-
-VOID STDCALL
-ExInsertSplayTree(IN PSPLAY_TREE  Tree,
-  IN PVOID  Key,
-  IN PVOID  Value);
-
-BOOLEAN STDCALL
-ExSearchSplayTree(IN PSPLAY_TREE  Tree,
-  IN PVOID  Key,
-  OUT PVOID  * Value);
-
-BOOLEAN STDCALL
-ExRemoveSplayTree(IN PSPLAY_TREE  Tree,
-  IN PVOID  Key,
-  IN PVOID  * Value);
-
-BOOLEAN STDCALL
-ExWeightOfSplayTree(IN PSPLAY_TREE  Tree,
-  OUT PULONG  Weight);
-
-BOOLEAN STDCALL
-ExTraverseSplayTree(IN PSPLAY_TREE  Tree,
-  IN TRAVERSE_METHOD  Method,
-  IN PTRAVERSE_ROUTINE  Routine,
-  IN PVOID  Context);
-
-BOOLEAN STDCALL
-ExInitializeHashTable(IN PHASH_TABLE  HashTable,
-  IN ULONG  HashTableSize,
-  IN PKEY_COMPARATOR  Compare  OPTIONAL,
-  IN BOOLEAN  UseNonPagedPool);
-
-VOID STDCALL
-ExDeleteHashTable(IN PHASH_TABLE  HashTable);
-
-VOID STDCALL
-ExInsertHashTable(IN PHASH_TABLE  HashTable,
-  IN PVOID  Key,
-  IN ULONG  KeyLength,
-  IN PVOID  Value);
-
-BOOLEAN STDCALL
-ExSearchHashTable(IN PHASH_TABLE  HashTable,
-  IN PVOID  Key,
-  IN ULONG  KeyLength,
-  OUT PVOID  * Value);
-
-BOOLEAN STDCALL
-ExRemoveHashTable(IN PHASH_TABLE  HashTable,
-  IN PVOID  Key,
-  IN ULONG  KeyLength,
-  IN PVOID  * Value);
-
-/* END REACTOS ONLY */
-
 #endif /* ndef _NTOS_EXFUNCS_H */