2 * PROJECT: ReactOS Video Port Driver
3 * LICENSE: BSD - See COPYING.ARM in the top level directory
4 * FILE: drivers/video/videoprt/event.c
5 * PURPOSE: Event Support Routines
6 * PROGRAMMERS: ReactOS Portable Systems Group
9 /* INCLUDES *******************************************************************/
12 #include "../../gdi/eng/engevent.h"
14 /* PUBLIC FUNCTIONS ***********************************************************/
21 VideoPortCreateEvent(IN PVOID HwDeviceExtension
,
26 VP_STATUS Result
= NO_ERROR
;
27 PVIDEO_PORT_EVENT EngEvent
;
29 /* Allocate memory for the event structure */
30 EngEvent
= ExAllocatePoolWithTag(NonPagedPool
,
31 sizeof(VIDEO_PORT_EVENT
) + sizeof(KEVENT
),
35 /* Set KEVENT pointer */
36 EngEvent
->pKEvent
= EngEvent
+ 1;
38 /* Initialize the kernel event */
39 KeInitializeEvent(EngEvent
->pKEvent
,
40 (EventFlag
& EVENT_TYPE_MASK
) ?
41 NotificationEvent
: SynchronizationEvent
,
42 EventFlag
& INITIAL_EVENT_STATE_MASK
);
44 /* Pass pointer to our structure to the caller */
45 *Event
= (PEVENT
)EngEvent
;
46 DPRINT("VideoPortCreateEvent() created %p\n", EngEvent
);
51 DPRINT("VideoPortCreateEvent() failed\n");
52 Result
= ERROR_NOT_ENOUGH_MEMORY
;
64 VideoPortDeleteEvent(IN PVOID HwDeviceExtension
,
67 /* Handle error cases */
68 if (!Event
) return ERROR_INVALID_PARAMETER
;
69 if (Event
->fFlags
& ENG_EVENT_USERMAPPED
) return ERROR_INVALID_PARAMETER
;
70 if (!Event
->pKEvent
) return ERROR_INVALID_PARAMETER
;
75 /* Indicate success */
84 VideoPortSetEvent(IN PVOID HwDeviceExtension
,
87 return KeSetEvent(Event
->pKEvent
, IO_NO_INCREMENT
, FALSE
);
95 VideoPortClearEvent(IN PVOID HwDeviceExtension
,
98 KeClearEvent(Event
->pKEvent
);
106 VideoPortWaitForSingleObject(IN PVOID HwDeviceExtension
,
108 IN PLARGE_INTEGER Timeout OPTIONAL
)
110 PVIDEO_PORT_EVENT EngEvent
= Event
;
113 /* Handle error cases */
114 if (!EngEvent
) return ERROR_INVALID_PARAMETER
;
115 if (!EngEvent
->pKEvent
) return ERROR_INVALID_PARAMETER
;
116 if (EngEvent
->fFlags
& ENG_EVENT_USERMAPPED
) return ERROR_INVALID_PARAMETER
;
118 /* Do the actual wait */
119 Status
= KeWaitForSingleObject(EngEvent
->pKEvent
,
124 if (Status
== STATUS_TIMEOUT
)
126 /* Convert to wait timeout, otherwise NT_SUCCESS would return NO_ERROR */
129 else if (NT_SUCCESS(Status
))
131 /* All other success codes are Win32 success */
135 /* Otherwise, return default Win32 failure */
136 return ERROR_INVALID_PARAMETER
;