2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS NDIS library
5 * PURPOSE: Program control routines
6 * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
7 * Vizzini (vizzini@plasmic.com)
9 * CSH 01/08-2000 Created
10 * 3 Oct 2003 Vizzini - Formatting and minor bugfixes
19 #undef NdisReinitializePacket
22 NdisReinitializePacket(
23 IN OUT PNDIS_PACKET Packet
)
25 (Packet
)->Private
.Head
= (PNDIS_BUFFER
)NULL
;
26 (Packet
)->Private
.ValidCounts
= FALSE
;
35 NdisAcquireReadWriteLock(
36 IN PNDIS_RW_LOCK Lock
,
38 IN PLOCK_STATE LockState
)
53 #undef NdisAcquireSpinLock
57 IN PNDIS_SPIN_LOCK SpinLock
)
59 * FUNCTION: Acquires a spin lock for exclusive access to a resource
61 * SpinLock = Pointer to the initialized NDIS spin lock to be acquired
64 KeAcquireSpinLock(&SpinLock
->SpinLock
, &SpinLock
->OldIrql
);
71 #undef NdisAllocateSpinLock
75 IN PNDIS_SPIN_LOCK SpinLock
)
77 * FUNCTION: Initializes for an NDIS spin lock
79 * SpinLock = Pointer to an NDIS spin lock structure
82 KeInitializeSpinLock(&SpinLock
->SpinLock
);
89 #undef NdisDprAcquireSpinLock
92 NdisDprAcquireSpinLock(
93 IN PNDIS_SPIN_LOCK SpinLock
)
95 * FUNCTION: Acquires a spin lock from IRQL DISPATCH_LEVEL
97 * SpinLock = Pointer to the initialized NDIS spin lock to be acquired
100 KeAcquireSpinLockAtDpcLevel(&SpinLock
->SpinLock
);
101 SpinLock
->OldIrql
= DISPATCH_LEVEL
;
108 #undef NdisDprReleaseSpinLock
111 NdisDprReleaseSpinLock(
112 IN PNDIS_SPIN_LOCK SpinLock
)
114 * FUNCTION: Releases an acquired spin lock from IRQL DISPATCH_LEVEL
116 * SpinLock = Pointer to the acquired NDIS spin lock to be released
119 KeReleaseSpinLockFromDpcLevel(&SpinLock
->SpinLock
);
126 #undef NdisFreeSpinLock
130 IN PNDIS_SPIN_LOCK SpinLock
)
132 * FUNCTION: Releases a spin lock initialized with NdisAllocateSpinLock
134 * SpinLock = Pointer to an initialized NDIS spin lock
137 /* Nothing to do here! */
146 NdisGetCurrentProcessorCpuUsage(
149 * FUNCTION: Returns how busy the current processor is as a percentage
151 * pCpuUsage = Pointer to a buffer to place CPU usage
164 IN PNDIS_EVENT Event
)
166 * FUNCTION: Initializes an event to be used for synchronization
168 * Event = Pointer to an NDIS event structure to be initialized
171 KeInitializeEvent(&Event
->Event
, NotificationEvent
, FALSE
);
178 #undef NdisReleaseSpinLock
182 IN PNDIS_SPIN_LOCK SpinLock
)
184 * FUNCTION: Releases a spin lock previously acquired with NdisAcquireSpinLock
186 * SpinLock = Pointer to the acquired NDIS spin lock to be released
189 KeReleaseSpinLock(&SpinLock
->SpinLock
, SpinLock
->OldIrql
);
199 IN PNDIS_EVENT Event
)
201 * FUNCTION: Clears the signaled state of an event
203 * Event = Pointer to the initialized event object to be reset
206 KeResetEvent(&Event
->Event
);
216 IN PNDIS_EVENT Event
)
218 * FUNCTION: Sets an event to a signaled state if not already signaled
220 * Event = Pointer to the initialized event object to be set
223 KeSetEvent(&Event
->Event
, IO_NO_INCREMENT
, FALSE
);
233 IN PNDIS_EVENT Event
,
236 * FUNCTION: Waits for an event to become signaled
238 * Event = Pointer to the initialized event object to wait for
239 * MsToWait = Maximum milliseconds to wait for the event to become signaled
241 * TRUE if the event is in the signaled state
244 LARGE_INTEGER Timeout
;
247 Timeout
.QuadPart
= MsToWait
* -10000LL;
249 Status
= KeWaitForSingleObject(&Event
->Event
, Executive
, KernelMode
, TRUE
, &Timeout
);
251 return (Status
== STATUS_SUCCESS
);