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