2004-08-16 Casper S. Hornstrup <chorns@users.sourceforge.net>
[reactos.git] / reactos / drivers / net / ndis / ndis / control.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS NDIS library
4 * FILE: ndis/control.c
5 * PURPOSE: Program control routines
6 * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
7 * Vizzini (vizzini@plasmic.com)
8 * REVISIONS:
9 * CSH 01/08-2000 Created
10 * 3 Oct 2003 Vizzini - Formatting and minor bugfixes
11 */
12
13 #include "ndissys.h"
14
15 \f
16 /*
17 * @implemented
18 */
19 VOID
20 EXPORT
21 NdisReinitializePacket(
22 IN OUT PNDIS_PACKET Packet)
23 {
24 (Packet)->Private.Head = (PNDIS_BUFFER)NULL;
25 (Packet)->Private.ValidCounts = FALSE;
26 }
27
28 \f
29 /*
30 * @unimplemented
31 */
32 VOID
33 EXPORT
34 NdisAcquireReadWriteLock(
35 IN PNDIS_RW_LOCK Lock,
36 IN BOOLEAN fWrite,
37 IN PLOCK_STATE LockState)
38 /*
39 * FUNCTION:
40 * ARGUMENTS:
41 * NOTES:
42 * NDIS 5.0
43 */
44 {
45 UNIMPLEMENTED
46 }
47
48 \f
49 /*
50 * @implemented
51 */
52 VOID
53 EXPORT
54 NdisAcquireSpinLock(
55 IN PNDIS_SPIN_LOCK SpinLock)
56 /*
57 * FUNCTION: Acquires a spin lock for exclusive access to a resource
58 * ARGUMENTS:
59 * SpinLock = Pointer to the initialized NDIS spin lock to be acquired
60 */
61 {
62 KeAcquireSpinLock(&SpinLock->SpinLock, &SpinLock->OldIrql);
63 }
64
65 \f
66 /*
67 * @implemented
68 */
69 VOID
70 EXPORT
71 NdisAllocateSpinLock(
72 IN PNDIS_SPIN_LOCK SpinLock)
73 /*
74 * FUNCTION: Initializes for an NDIS spin lock
75 * ARGUMENTS:
76 * SpinLock = Pointer to an NDIS spin lock structure
77 */
78 {
79 KeInitializeSpinLock(&SpinLock->SpinLock);
80 }
81
82 \f
83 /*
84 * @implemented
85 */
86 VOID
87 EXPORT
88 NdisDprAcquireSpinLock(
89 IN PNDIS_SPIN_LOCK SpinLock)
90 /*
91 * FUNCTION: Acquires a spin lock from IRQL DISPATCH_LEVEL
92 * ARGUMENTS:
93 * SpinLock = Pointer to the initialized NDIS spin lock to be acquired
94 */
95 {
96 KeAcquireSpinLockAtDpcLevel(&SpinLock->SpinLock);
97 SpinLock->OldIrql = DISPATCH_LEVEL;
98 }
99
100 \f
101 /*
102 * @implemented
103 */
104 VOID
105 EXPORT
106 NdisDprReleaseSpinLock(
107 IN PNDIS_SPIN_LOCK SpinLock)
108 /*
109 * FUNCTION: Releases an acquired spin lock from IRQL DISPATCH_LEVEL
110 * ARGUMENTS:
111 * SpinLock = Pointer to the acquired NDIS spin lock to be released
112 */
113 {
114 KeReleaseSpinLockFromDpcLevel(&SpinLock->SpinLock);
115 }
116
117 \f
118 /*
119 * @implemented
120 */
121 VOID
122 EXPORT
123 NdisFreeSpinLock(
124 IN PNDIS_SPIN_LOCK SpinLock)
125 /*
126 * FUNCTION: Releases a spin lock initialized with NdisAllocateSpinLock
127 * ARGUMENTS:
128 * SpinLock = Pointer to an initialized NDIS spin lock
129 */
130 {
131 /* Nothing to do here! */
132 }
133
134 \f
135 /*
136 * @unimplemented
137 */
138 VOID
139 EXPORT
140 NdisGetCurrentProcessorCpuUsage(
141 PULONG pCpuUsage)
142 /*
143 * FUNCTION: Returns how busy the current processor is as a percentage
144 * ARGUMENTS:
145 * pCpuUsage = Pointer to a buffer to place CPU usage
146 */
147 {
148 UNIMPLEMENTED
149 }
150
151
152 /*
153 * @implemented
154 */
155 VOID
156 EXPORT
157 NdisInitializeEvent(
158 IN PNDIS_EVENT Event)
159 /*
160 * FUNCTION: Initializes an event to be used for synchronization
161 * ARGUMENTS:
162 * Event = Pointer to an NDIS event structure to be initialized
163 */
164 {
165 KeInitializeEvent(&Event->Event, NotificationEvent, FALSE);
166 }
167
168
169 /*
170 * @implemented
171 */
172 VOID
173 EXPORT
174 NdisReleaseSpinLock(
175 IN PNDIS_SPIN_LOCK SpinLock)
176 /*
177 * FUNCTION: Releases a spin lock previously acquired with NdisAcquireSpinLock
178 * ARGUMENTS:
179 * SpinLock = Pointer to the acquired NDIS spin lock to be released
180 */
181 {
182 KeReleaseSpinLock(&SpinLock->SpinLock, SpinLock->OldIrql);
183 }
184
185
186 /*
187 * @implemented
188 */
189 VOID
190 EXPORT
191 NdisResetEvent(
192 IN PNDIS_EVENT Event)
193 /*
194 * FUNCTION: Clears the signaled state of an event
195 * ARGUMENTS:
196 * Event = Pointer to the initialized event object to be reset
197 */
198 {
199 KeResetEvent(&Event->Event);
200 }
201
202
203 /*
204 * @implemented
205 */
206 VOID
207 EXPORT
208 NdisSetEvent(
209 IN PNDIS_EVENT Event)
210 /*
211 * FUNCTION: Sets an event to a signaled state if not already signaled
212 * ARGUMENTS:
213 * Event = Pointer to the initialized event object to be set
214 */
215 {
216 KeSetEvent(&Event->Event, IO_NO_INCREMENT, FALSE);
217 }
218
219
220 /*
221 * @implemented
222 */
223 BOOLEAN
224 EXPORT
225 NdisWaitEvent(
226 IN PNDIS_EVENT Event,
227 IN UINT MsToWait)
228 /*
229 * FUNCTION: Waits for an event to become signaled
230 * ARGUMENTS:
231 * Event = Pointer to the initialized event object to wait for
232 * MsToWait = Maximum milliseconds to wait for the event to become signaled
233 * RETURNS:
234 * TRUE if the event is in the signaled state
235 */
236 {
237 LARGE_INTEGER Timeout;
238 NTSTATUS Status;
239
240 Timeout.QuadPart = MsToWait * -10000LL;
241
242 Status = KeWaitForSingleObject(&Event->Event, Executive, KernelMode, TRUE, &Timeout);
243
244 return (Status == STATUS_SUCCESS);
245 }
246
247 /* EOF */
248