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
21 NdisReinitializePacket(
22 IN OUT PNDIS_PACKET Packet
)
24 (Packet
)->Private
.Head
= (PNDIS_BUFFER
)NULL
;
25 (Packet
)->Private
.ValidCounts
= FALSE
;
34 NdisAcquireReadWriteLock(
35 IN PNDIS_RW_LOCK Lock
,
37 IN PLOCK_STATE LockState
)
55 IN PNDIS_SPIN_LOCK SpinLock
)
57 * FUNCTION: Acquires a spin lock for exclusive access to a resource
59 * SpinLock = Pointer to the initialized NDIS spin lock to be acquired
62 KeAcquireSpinLock(&SpinLock
->SpinLock
, &SpinLock
->OldIrql
);
72 IN PNDIS_SPIN_LOCK SpinLock
)
74 * FUNCTION: Initializes for an NDIS spin lock
76 * SpinLock = Pointer to an NDIS spin lock structure
79 KeInitializeSpinLock(&SpinLock
->SpinLock
);
88 NdisDprAcquireSpinLock(
89 IN PNDIS_SPIN_LOCK SpinLock
)
91 * FUNCTION: Acquires a spin lock from IRQL DISPATCH_LEVEL
93 * SpinLock = Pointer to the initialized NDIS spin lock to be acquired
96 KeAcquireSpinLockAtDpcLevel(&SpinLock
->SpinLock
);
97 SpinLock
->OldIrql
= DISPATCH_LEVEL
;
106 NdisDprReleaseSpinLock(
107 IN PNDIS_SPIN_LOCK SpinLock
)
109 * FUNCTION: Releases an acquired spin lock from IRQL DISPATCH_LEVEL
111 * SpinLock = Pointer to the acquired NDIS spin lock to be released
114 KeReleaseSpinLockFromDpcLevel(&SpinLock
->SpinLock
);
124 IN PNDIS_SPIN_LOCK SpinLock
)
126 * FUNCTION: Releases a spin lock initialized with NdisAllocateSpinLock
128 * SpinLock = Pointer to an initialized NDIS spin lock
131 /* Nothing to do here! */
140 NdisGetCurrentProcessorCpuUsage(
143 * FUNCTION: Returns how busy the current processor is as a percentage
145 * pCpuUsage = Pointer to a buffer to place CPU usage
158 IN PNDIS_EVENT Event
)
160 * FUNCTION: Initializes an event to be used for synchronization
162 * Event = Pointer to an NDIS event structure to be initialized
165 KeInitializeEvent(&Event
->Event
, NotificationEvent
, FALSE
);
175 IN PNDIS_SPIN_LOCK SpinLock
)
177 * FUNCTION: Releases a spin lock previously acquired with NdisAcquireSpinLock
179 * SpinLock = Pointer to the acquired NDIS spin lock to be released
182 KeReleaseSpinLock(&SpinLock
->SpinLock
, SpinLock
->OldIrql
);
192 IN PNDIS_EVENT Event
)
194 * FUNCTION: Clears the signaled state of an event
196 * Event = Pointer to the initialized event object to be reset
199 KeResetEvent(&Event
->Event
);
209 IN PNDIS_EVENT Event
)
211 * FUNCTION: Sets an event to a signaled state if not already signaled
213 * Event = Pointer to the initialized event object to be set
216 KeSetEvent(&Event
->Event
, IO_NO_INCREMENT
, FALSE
);
226 IN PNDIS_EVENT Event
,
229 * FUNCTION: Waits for an event to become signaled
231 * Event = Pointer to the initialized event object to wait for
232 * MsToWait = Maximum milliseconds to wait for the event to become signaled
234 * TRUE if the event is in the signaled state
237 LARGE_INTEGER Timeout
;
240 Timeout
.QuadPart
= MsToWait
* -10000LL;
242 Status
= KeWaitForSingleObject(&Event
->Event
, Executive
, KernelMode
, TRUE
, &Timeout
);
244 return (Status
== STATUS_SUCCESS
);