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