Made header file usage more consistent
[reactos.git] / reactos / ntoskrnl / ke / event.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * FILE: ntoskrnl/ke/event.c
5 * PURPOSE: Implements events
6 * PROGRAMMER: David Welch (welch@mcmail.com)
7 * UPDATE HISTORY:
8 * Created 22/05/98
9 */
10
11 /* INCLUDES *****************************************************************/
12
13 #include <ddk/ntddk.h>
14 #include <internal/ke.h>
15 #include <internal/id.h>
16
17 #define NDEBUG
18 #include <internal/debug.h>
19
20 /* FUNCTIONS ****************************************************************/
21
22 VOID STDCALL KeClearEvent (PKEVENT Event)
23 {
24 DPRINT("KeClearEvent(Event %x)\n", Event);
25 Event->Header.SignalState=FALSE;
26 }
27
28 VOID STDCALL KeInitializeEvent (PKEVENT Event,
29 EVENT_TYPE Type,
30 BOOLEAN State)
31 {
32 ULONG IType;
33
34 if (Type == NotificationEvent)
35 {
36 IType = InternalNotificationEvent;
37 }
38 else if (Type == SynchronizationEvent)
39 {
40 IType = InternalSynchronizationEvent;
41 }
42 else
43 {
44 assert(FALSE);
45 return;
46 }
47
48 KeInitializeDispatcherHeader(&(Event->Header),
49 IType,
50 sizeof(Event)/sizeof(ULONG),State);
51 InitializeListHead(&(Event->Header.WaitListHead));
52 }
53
54 LONG STDCALL KeReadStateEvent (PKEVENT Event)
55 {
56 return(Event->Header.SignalState);
57 }
58
59 LONG STDCALL KeResetEvent (PKEVENT Event)
60 {
61 return(InterlockedExchange(&(Event->Header.SignalState),0));
62 }
63
64 LONG STDCALL KeSetEvent (PKEVENT Event,
65 KPRIORITY Increment,
66 BOOLEAN Wait)
67 {
68 int ret;
69
70 DPRINT("KeSetEvent(Event %x, Wait %x)\n",Event,Wait);
71 KeAcquireDispatcherDatabaseLock(Wait);
72 ret = InterlockedExchange(&(Event->Header.SignalState),1);
73 KeDispatcherObjectWake((DISPATCHER_HEADER *)Event);
74 KeReleaseDispatcherDatabaseLock(Wait);
75 return(ret);
76 }