Synchronize with trunk r58457.
[reactos.git] / include / ddk / ndis.h
1 /*
2 * ndis.h
3 *
4 * Network Device Interface Specification definitions
5 *
6 * This file is part of the ReactOS DDK package.
7 *
8 * Contributors:
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
10 *
11 * THIS SOFTWARE IS NOT COPYRIGHTED
12 *
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
15 *
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20 *
21 * DEFINES: i386 - Target platform is i386
22 * NDIS_WRAPPER - Define only for NDIS library
23 * NDIS_MINIPORT_DRIVER - Define only for NDIS miniport drivers
24 * NDIS40 - Use NDIS 4.0 structures by default
25 * NDIS50 - Use NDIS 5.0 structures by default
26 * NDIS51 - Use NDIS 5.1 structures by default
27 * NDIS40_MINIPORT - Building NDIS 4.0 miniport driver
28 * NDIS50_MINIPORT - Building NDIS 5.0 miniport driver
29 * NDIS51_MINIPORT - Building NDIS 5.1 miniport driver
30 */
31
32 #ifndef _NDIS_
33 #define _NDIS_
34
35 #ifndef NDIS_WDM
36 #define NDIS_WDM 0
37 #endif
38
39 #include "ntddk.h"
40 #include "netpnp.h"
41 #include "ntstatus.h"
42 #include "netevent.h"
43 #include <qos.h>
44
45 typedef _Return_type_success_(return >= 0) int NDIS_STATUS, *PNDIS_STATUS;
46
47 #include "ntddndis.h"
48
49 #if !defined(_WINDEF_H)
50 typedef unsigned int UINT, *PUINT;
51 #endif
52
53 #ifdef __cplusplus
54 extern "C" {
55 #endif
56
57 __drv_Mode_impl(NDIS_INCLUDED)
58
59 #ifndef __NET_PNP__
60 #define __NET_PNP__
61
62 typedef enum _NET_DEVICE_POWER_STATE {
63 NetDeviceStateUnspecified = 0,
64 NetDeviceStateD0,
65 NetDeviceStateD1,
66 NetDeviceStateD2,
67 NetDeviceStateD3,
68 NetDeviceStateMaximum
69 } NET_DEVICE_POWER_STATE, *PNET_DEVICE_POWER_STATE;
70
71 typedef enum _NET_PNP_EVENT_CODE {
72 NetEventSetPower,
73 NetEventQueryPower,
74 NetEventQueryRemoveDevice,
75 NetEventCancelRemoveDevice,
76 NetEventReconfigure,
77 NetEventBindList,
78 NetEventBindsComplete,
79 NetEventPnPCapabilities,
80 NetEventPause,
81 NetEventRestart,
82 NetEventPortActivation,
83 NetEventPortDeactivation,
84 NetEventIMReEnableDevice,
85 NetEventMaximum
86 } NET_PNP_EVENT_CODE, *PNET_PNP_EVENT_CODE;
87
88 typedef struct _NET_PNP_EVENT {
89 NET_PNP_EVENT_CODE NetEvent;
90 PVOID Buffer;
91 ULONG BufferLength;
92 ULONG_PTR NdisReserved[4];
93 ULONG_PTR TransportReserved[4];
94 ULONG_PTR TdiReserved[4];
95 ULONG_PTR TdiClientReserved[4];
96 } NET_PNP_EVENT, *PNET_PNP_EVENT;
97
98 #endif /* __NET_PNP__ */
99
100 #if !defined(NDIS_WRAPPER)
101
102 #if (defined(NDIS_MINIPORT_MAJOR_VERSION) || \
103 (defined(NDIS_MINIPORT_MINOR_VERSION)) || \
104 (defined(NDIS_PROTOCOL_MAJOR_VERSION)) || \
105 (defined(NDIS_PROTOCOL_MINOR_VERSION)) || \
106 (defined(NDIS_FILTER_MAJOR_VERSION)) || \
107 (defined(NDIS_FILTER_MINOR_VERSION)))
108 #error "Driver should not redefine NDIS reserved macros"
109 #endif
110
111 #if defined(NDIS_MINIPORT_DRIVER)
112
113 #if defined(NDIS620_MINIPORT)
114 #define NDIS_MINIPORT_MAJOR_VERSION 6
115 #define NDIS_MINIPORT_MINOR_VERSION 20
116 #elif defined(NDIS61_MINIPORT)
117 #define NDIS_MINIPORT_MAJOR_VERSION 6
118 #define NDIS_MINIPORT_MINOR_VERSION 1
119 #elif defined(NDIS60_MINIPORT)
120 #define NDIS_MINIPORT_MAJOR_VERSION 6
121 #define NDIS_MINIPORT_MINOR_VERSION 0
122 #elif defined(NDIS51_MINIPORT)
123 #define NDIS_MINIPORT_MAJOR_VERSION 5
124 #define NDIS_MINIPORT_MINOR_VERSION 1
125 #elif defined(NDIS50_MINIPORT)
126 #define NDIS_MINIPORT_MAJOR_VERSION 5
127 #define NDIS_MINIPORT_MINOR_VERSION 0
128 #else
129 #error "Only NDIS miniport drivers with version >= 5 are supported"
130 #endif
131
132 #if ((NDIS_MINIPORT_MAJOR_VERSION == 6) && \
133 (NDIS_MINIPORT_MINOR_VERSION != 20) && \
134 (NDIS_MINIPORT_MINOR_VERSION != 1) && \
135 (NDIS_MINIPORT_MINOR_VERSION != 0))
136 #error "Invalid miniport major/minor version combination"
137 #elif ((NDIS_MINIPORT_MAJOR_VERSION == 5) && \
138 (NDIS_MINIPORT_MINOR_VERSION != 1) && \
139 (NDIS_MINIPORT_MINOR_VERSION != 0))
140 #error "Invalid miniport major/minor version combination"
141 #endif
142
143 #if (NDIS_MINIPORT_MAJOR_VERSION == 6) && \
144 ((NDIS_MINIPORT_MINOR_VERSION == 20 && NTDDI_VERSION < NTDDI_WIN7) || \
145 (NDIS_MINIPORT_MINOR_VERSION == 1 && NTDDI_VERSION < NTDDI_VISTA) || \
146 (NDIS_MINIPORT_MINOR_VERSION == 0 && NTDDI_VERSION < NTDDI_VISTA))
147 #error "Wrong NDIS/DDI version"
148 #elif ((NDIS_MINIPORT_MAJOR_VERSION == 5) && \
149 (((NDIS_MINIPORT_MINOR_VERSION == 1) && (NTDDI_VERSION < NTDDI_WINXP)) || \
150 ((NDIS_MINIPORT_MINOR_VERSION == 0) && (NTDDI_VERSION < NTDDI_WIN2K))))
151 #error "Wrong NDIS/DDI version"
152 #endif
153
154
155 #endif /* defined(NDIS_MINIPORT_DRIVER) */
156
157 #if defined(NDIS30)
158 #error "Only NDIS Protocol drivers version 4 or later are supported"
159 #endif
160
161 #if defined(NDIS620)
162 #define NDIS_PROTOCOL_MAJOR_VERSION 6
163 #define NDIS_PROTOCOL_MINOR_VERSION 20
164 #define NDIS_FILTER_MAJOR_VERSION 6
165 #define NDIS_FILTER_MINOR_VERSION 20
166 #elif defined(NDIS61)
167 #define NDIS_PROTOCOL_MAJOR_VERSION 6
168 #define NDIS_PROTOCOL_MINOR_VERSION 1
169 #define NDIS_FILTER_MAJOR_VERSION 6
170 #define NDIS_FILTER_MINOR_VERSION 1
171 #elif defined(NDIS60)
172 #define NDIS_PROTOCOL_MAJOR_VERSION 6
173 #define NDIS_PROTOCOL_MINOR_VERSION 0
174 #define NDIS_FILTER_MAJOR_VERSION 6
175 #define NDIS_FILTER_MINOR_VERSION 0
176 #elif defined(NDIS51)
177 #define NDIS_PROTOCOL_MAJOR_VERSION 5
178 #define NDIS_PROTOCOL_MINOR_VERSION 1
179 #elif defined(NDIS50)
180 #define NDIS_PROTOCOL_MAJOR_VERSION 5
181 #define NDIS_PROTOCOL_MINOR_VERSION 0
182 #elif defined(NDIS40)
183 #define NDIS_PROTOCOL_MAJOR_VERSION 4
184 #define NDIS_PROTOCOL_MINOR_VERSION 0
185 #endif
186
187 #if !defined(NDIS_MINIPORT_DRIVER) && !defined(NDIS_PROTOCOL_MAJOR_VERSION)
188 #define NDIS40
189 #define NDIS_PROTOCOL_MAJOR_VERSION 4
190 #define NDIS_PROTOCOL_MINOR_VERSION 0
191 #endif
192
193 #if defined(NDIS_FILTER_MAJOR_VERSION)
194
195 #if ((NDIS_FILTER_MAJOR_VERSION == 6) && \
196 (NDIS_FILTER_MINOR_VERSION != 20) && \
197 (NDIS_FILTER_MINOR_VERSION != 1) && \
198 (NDIS_FILTER_MINOR_VERSION != 0))
199 #error "Invalid Filter version"
200 #endif
201
202 #endif /* defined(NDIS_FILTER_MAJOR_VERSION) */
203
204
205 #if defined(NDIS_PROTOCOL_MAJOR_VERSION)
206
207 #if ((NDIS_PROTOCOL_MAJOR_VERSION == 6) && \
208 (NDIS_PROTOCOL_MINOR_VERSION != 20) && \
209 (NDIS_PROTOCOL_MINOR_VERSION != 1) && \
210 (NDIS_PROTOCOL_MINOR_VERSION != 0))
211 #error "Invalid Protocol version"
212 #elif ((NDIS_PROTOCOL_MAJOR_VERSION == 5) && \
213 (NDIS_PROTOCOL_MINOR_VERSION != 1) && (NDIS_PROTOCOL_MINOR_VERSION != 0))
214 #error "Invalid Protocol version"
215 #elif ((NDIS_PROTOCOL_MAJOR_VERSION == 4) && (NDIS_PROTOCOL_MINOR_VERSION != 0))
216 #error "Invalid Protocol major/minor version"
217 #endif
218
219 #if ((NDIS_PROTOCOL_MAJOR_VERSION == 6) && (NTDDI_VERSION < NTDDI_VISTA))
220 #error "Wrong NDIS/DDI version"
221 #endif
222
223 #endif /* defined(NDIS_PROTOCOL_MAJOR_VERSION) */
224
225 #endif /* !defined(NDIS_WRAPPER) */
226
227 #if !defined(NDIS_LEGACY_MINIPORT)
228
229 #if ((defined(NDIS_MINIPORT_DRIVER) && (NDIS_MINIPORT_MAJOR_VERSION < 6)) || NDIS_WRAPPER)
230 #define NDIS_LEGACY_MINIPORT 1
231 #else
232 #define NDIS_LEGACY_MINIPORT 0
233 #endif
234
235 #endif /* !defined(NDIS_LEGACY_MINIPORT) */
236
237 #if !defined(NDIS_LEGACY_PROTOCOL)
238
239 #if ((defined(NDIS_PROTOCOL_MAJOR_VERSION) && (NDIS_PROTOCOL_MAJOR_VERSION < 6)) || NDIS_WRAPPER)
240 #define NDIS_LEGACY_PROTOCOL 1
241 #else
242 #define NDIS_LEGACY_PROTOCOL 0
243 #endif
244
245 #endif /* !defined(NDIS_LEGACY_PROTOCOL) */
246
247 #if !defined(NDIS_LEGACY_DRIVER)
248
249 #if (NDIS_LEGACY_MINIPORT || NDIS_LEGACY_PROTOCOL || NDIS_WRAPPER)
250 #define NDIS_LEGACY_DRIVER 1
251 #else
252 #define NDIS_LEGACY_DRIVER 0
253 #endif
254
255 #endif /* !defined(NDIS_LEGACY_DRIVER) */
256
257 #if !defined(NDIS_SUPPORT_NDIS6)
258
259 #if ((defined (NDIS_MINIPORT_MAJOR_VERSION) && (NDIS_MINIPORT_MAJOR_VERSION >= 6)) || \
260 (defined (NDIS60)) || NDIS_WRAPPER)
261 #define NDIS_SUPPORT_NDIS6 1
262 #else
263 #define NDIS_SUPPORT_NDIS6 0
264 #endif
265
266 #endif /* !defined(NDIS_SUPPORT_NDIS6) */
267
268 #if !defined(NDIS_SUPPORT_NDIS61)
269 #if (((defined (NDIS_MINIPORT_MAJOR_VERSION) && (NDIS_MINIPORT_MAJOR_VERSION >= 6)) && \
270 (defined (NDIS_MINIPORT_MINOR_VERSION) && (NDIS_MINIPORT_MINOR_VERSION >= 1))) || \
271 (defined (NDIS61)) || NDIS_WRAPPER)
272 #define NDIS_SUPPORT_NDIS61 1
273 #else
274 #define NDIS_SUPPORT_NDIS61 0
275 #endif
276 #endif /* !defined(NDIS_SUPPORT_NDIS61) */
277
278 #if !defined(NDIS_SUPPORT_NDIS620)
279
280 #if (((defined (NDIS_MINIPORT_MAJOR_VERSION) && (NDIS_MINIPORT_MAJOR_VERSION >= 6)) && \
281 (defined (NDIS_MINIPORT_MINOR_VERSION) && (NDIS_MINIPORT_MINOR_VERSION >= 20))) || \
282 (defined (NDIS620)) || NDIS_WRAPPER)
283 #define NDIS_SUPPORT_NDIS620 1
284 #else
285 #define NDIS_SUPPORT_NDIS620 0
286 #endif
287
288 #endif /* !defined(NDIS_SUPPORT_NDIS620) */
289
290 #if (NDIS_SUPPORT_NDIS620)
291 #undef NDIS_SUPPORT_NDIS61
292 #define NDIS_SUPPORT_NDIS61 1
293 #endif
294
295 #if (NDIS_SUPPORT_NDIS61)
296 #undef NDIS_SUPPORT_NDIS6
297 #define NDIS_SUPPORT_NDIS6 1
298 #endif
299
300 #if defined(NDIS61_MINIPORT) || defined(NDIS60_MINIPORT) || defined(NDIS61) || \
301 defined(NDIS60) || defined(NDIS_WRAPPER) || defined(NDIS_LEGACY_DRIVER)
302 #define NDIS_SUPPORT_60_COMPATIBLE_API 1
303 #else
304 #define NDIS_SUPPORT_60_COMPATIBLE_API 0
305 #endif
306
307 #if defined(NDIS_WRAPPER)
308 #define NDISAPI
309 #else
310 #define NDISAPI DECLSPEC_IMPORT
311 #endif
312
313 typedef PVOID QUEUED_CLOSE; //FIXME : Doesn't exist in public headers
314
315 typedef struct _X_FILTER FDDI_FILTER, *PFDDI_FILTER;
316 typedef struct _X_FILTER TR_FILTER, *PTR_FILTER;
317 typedef struct _X_FILTER NULL_FILTER, *PNULL_FILTER;
318
319 typedef struct _NDIS_MINIPORT_BLOCK NDIS_MINIPORT_BLOCK, *PNDIS_MINIPORT_BLOCK;
320
321 typedef struct _REFERENCE {
322 KSPIN_LOCK SpinLock;
323 USHORT ReferenceCount;
324 BOOLEAN Closing;
325 } REFERENCE, *PREFERENCE;
326
327 /* NDIS base types */
328
329 typedef struct _NDIS_SPIN_LOCK {
330 KSPIN_LOCK SpinLock;
331 KIRQL OldIrql;
332 } NDIS_SPIN_LOCK, *PNDIS_SPIN_LOCK;
333
334 typedef struct _NDIS_EVENT {
335 KEVENT Event;
336 } NDIS_EVENT, *PNDIS_EVENT;
337
338 typedef PVOID NDIS_HANDLE, *PNDIS_HANDLE;
339
340 typedef ANSI_STRING NDIS_ANSI_STRING, *PNDIS_ANSI_STRING;
341 typedef UNICODE_STRING NDIS_STRING, *PNDIS_STRING;
342
343 typedef MDL NDIS_BUFFER, *PNDIS_BUFFER;
344
345 /* NDIS_STATUS constants */
346 #define NDIS_STATUS_SUCCESS ((NDIS_STATUS)STATUS_SUCCESS)
347 #define NDIS_STATUS_PENDING ((NDIS_STATUS)STATUS_PENDING)
348 #define NDIS_STATUS_NOT_RECOGNIZED ((NDIS_STATUS)0x00010001L)
349 #define NDIS_STATUS_NOT_COPIED ((NDIS_STATUS)0x00010002L)
350 #define NDIS_STATUS_NOT_ACCEPTED ((NDIS_STATUS)0x00010003L)
351 #define NDIS_STATUS_CALL_ACTIVE ((NDIS_STATUS)0x00010007L)
352 #define NDIS_STATUS_INDICATION_REQUIRED ((NDIS_STATUS)STATUS_NDIS_INDICATION_REQUIRED)
353 #define NDIS_STATUS_ONLINE ((NDIS_STATUS)0x40010003L)
354 #define NDIS_STATUS_RESET_START ((NDIS_STATUS)0x40010004L)
355 #define NDIS_STATUS_RESET_END ((NDIS_STATUS)0x40010005L)
356 #define NDIS_STATUS_RING_STATUS ((NDIS_STATUS)0x40010006L)
357 #define NDIS_STATUS_CLOSED ((NDIS_STATUS)0x40010007L)
358 #define NDIS_STATUS_WAN_LINE_UP ((NDIS_STATUS)0x40010008L)
359 #define NDIS_STATUS_WAN_LINE_DOWN ((NDIS_STATUS)0x40010009L)
360 #define NDIS_STATUS_WAN_FRAGMENT ((NDIS_STATUS)0x4001000AL)
361 #define NDIS_STATUS_MEDIA_CONNECT ((NDIS_STATUS)0x4001000BL)
362 #define NDIS_STATUS_MEDIA_DISCONNECT ((NDIS_STATUS)0x4001000CL)
363 #define NDIS_STATUS_HARDWARE_LINE_UP ((NDIS_STATUS)0x4001000DL)
364 #define NDIS_STATUS_HARDWARE_LINE_DOWN ((NDIS_STATUS)0x4001000EL)
365 #define NDIS_STATUS_INTERFACE_UP ((NDIS_STATUS)0x4001000FL)
366 #define NDIS_STATUS_INTERFACE_DOWN ((NDIS_STATUS)0x40010010L)
367 #define NDIS_STATUS_MEDIA_BUSY ((NDIS_STATUS)0x40010011L)
368 #define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION ((NDIS_STATUS)0x40010012L)
369 #define NDIS_STATUS_WW_INDICATION NDIS_STATUS_MEDIA_SPECIFIC_INDICATION
370 #define NDIS_STATUS_LINK_SPEED_CHANGE ((NDIS_STATUS)0x40010013L)
371 #define NDIS_STATUS_WAN_GET_STATS ((NDIS_STATUS)0x40010014L)
372 #define NDIS_STATUS_WAN_CO_FRAGMENT ((NDIS_STATUS)0x40010015L)
373 #define NDIS_STATUS_WAN_CO_LINKPARAMS ((NDIS_STATUS)0x40010016L)
374 #if NDIS_SUPPORT_NDIS6
375 #define NDIS_STATUS_LINK_STATE ((NDIS_STATUS)0x40010017L)
376 #define NDIS_STATUS_NETWORK_CHANGE ((NDIS_STATUS)0x40010018L)
377 #define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION_EX ((NDIS_STATUS)0x40010019L)
378 #define NDIS_STATUS_PORT_STATE ((NDIS_STATUS)0x40010022L)
379 #define NDIS_STATUS_OPER_STATUS ((NDIS_STATUS)0x40010023L)
380 #define NDIS_STATUS_PACKET_FILTER ((NDIS_STATUS)0x40010024L)
381 #endif /* NDIS_SUPPORT_NDIS6 */
382 #define NDIS_STATUS_WAN_CO_MTULINKPARAMS ((NDIS_STATUS)0x40010025L)
383
384 #if NDIS_SUPPORT_NDIS6
385
386 #define NDIS_STATUS_IP_OPER_STATUS ((NDIS_STATUS)0x40010026L)
387
388 #define NDIS_STATUS_OFFLOAD_PAUSE ((NDIS_STATUS)0x40020001L)
389 #define NDIS_STATUS_UPLOAD_ALL ((NDIS_STATUS)0x40020002L)
390 #define NDIS_STATUS_OFFLOAD_RESUME ((NDIS_STATUS)0x40020003L)
391 #define NDIS_STATUS_OFFLOAD_PARTIAL_SUCCESS ((NDIS_STATUS)0x40020004L)
392 #define NDIS_STATUS_OFFLOAD_STATE_INVALID ((NDIS_STATUS)0x40020005L)
393 #define NDIS_STATUS_TASK_OFFLOAD_CURRENT_CONFIG ((NDIS_STATUS)0x40020006L)
394 #define NDIS_STATUS_TASK_OFFLOAD_HARDWARE_CAPABILITIES ((NDIS_STATUS)0x40020007L)
395 #define NDIS_STATUS_OFFLOAD_ENCASPULATION_CHANGE ((NDIS_STATUS)0x40020008L)
396 #define NDIS_STATUS_TCP_CONNECTION_OFFLOAD_HARDWARE_CAPABILITIES ((NDIS_STATUS)0x4002000BL)
397
398 #if (NDIS_SUPPORT_NDIS61)
399 #define NDIS_STATUS_HD_SPLIT_CURRENT_CONFIG ((NDIS_STATUS)0x4002000CL)
400 #endif
401
402 #if (NDIS_SUPPORT_NDIS620)
403 #define NDIS_STATUS_RECEIVE_QUEUE_STATE ((NDIS_STATUS)0x4002000DL)
404 #endif
405
406 #define NDIS_STATUS_OFFLOAD_IM_RESERVED1 ((NDIS_STATUS)0x40020100L)
407 #define NDIS_STATUS_OFFLOAD_IM_RESERVED2 ((NDIS_STATUS)0x40020101L)
408 #define NDIS_STATUS_OFFLOAD_IM_RESERVED3 ((NDIS_STATUS)0x40020102L)
409
410 #define NDIS_STATUS_DOT11_SCAN_CONFIRM ((NDIS_STATUS)0x40030000L)
411 #define NDIS_STATUS_DOT11_MPDU_MAX_LENGTH_CHANGED ((NDIS_STATUS)0x40030001L)
412 #define NDIS_STATUS_DOT11_ASSOCIATION_START ((NDIS_STATUS)0x40030002L)
413 #define NDIS_STATUS_DOT11_ASSOCIATION_COMPLETION ((NDIS_STATUS)0x40030003L)
414 #define NDIS_STATUS_DOT11_CONNECTION_START ((NDIS_STATUS)0x40030004L)
415 #define NDIS_STATUS_DOT11_CONNECTION_COMPLETION ((NDIS_STATUS)0x40030005L)
416 #define NDIS_STATUS_DOT11_ROAMING_START ((NDIS_STATUS)0x40030006L)
417 #define NDIS_STATUS_DOT11_ROAMING_COMPLETION ((NDIS_STATUS)0x40030007L)
418 #define NDIS_STATUS_DOT11_DISASSOCIATION ((NDIS_STATUS)0x40030008L)
419 #define NDIS_STATUS_DOT11_TKIPMIC_FAILURE ((NDIS_STATUS)0x40030009L)
420 #define NDIS_STATUS_DOT11_PMKID_CANDIDATE_LIST ((NDIS_STATUS)0x4003000AL)
421 #define NDIS_STATUS_DOT11_PHY_STATE_CHANGED ((NDIS_STATUS)0x4003000BL)
422 #define NDIS_STATUS_DOT11_LINK_QUALITY ((NDIS_STATUS)0x4003000CL)
423 #define NDIS_STATUS_DOT11_INCOMING_ASSOC_STARTED ((NDIS_STATUS)0x4003000DL)
424 #define NDIS_STATUS_DOT11_INCOMING_ASSOC_REQUEST_RECEIVED ((NDIS_STATUS)0x4003000EL)
425 #define NDIS_STATUS_DOT11_INCOMING_ASSOC_COMPLETION ((NDIS_STATUS)0x4003000FL)
426 #define NDIS_STATUS_DOT11_STOP_AP ((NDIS_STATUS)0x40030010L)
427 #define NDIS_STATUS_DOT11_PHY_FREQUENCY_ADOPTED ((NDIS_STATUS)0x40030011L)
428 #define NDIS_STATUS_DOT11_CAN_SUSTAIN_AP ((NDIS_STATUS)0x40030012L)
429
430 #define NDIS_STATUS_WWAN_DEVICE_CAPS ((NDIS_STATUS)0x40041000)
431 #define NDIS_STATUS_WWAN_READY_INFO ((NDIS_STATUS)0x40041001)
432 #define NDIS_STATUS_WWAN_RADIO_STATE ((NDIS_STATUS)0x40041002)
433 #define NDIS_STATUS_WWAN_PIN_INFO ((NDIS_STATUS)0x40041003)
434 #define NDIS_STATUS_WWAN_PIN_LIST ((NDIS_STATUS)0x40041004)
435 #define NDIS_STATUS_WWAN_HOME_PROVIDER ((NDIS_STATUS)0x40041005)
436 #define NDIS_STATUS_WWAN_PREFERRED_PROVIDERS ((NDIS_STATUS)0x40041006)
437 #define NDIS_STATUS_WWAN_VISIBLE_PROVIDERS ((NDIS_STATUS)0x40041007)
438 #define NDIS_STATUS_WWAN_REGISTER_STATE ((NDIS_STATUS)0x40041008)
439 #define NDIS_STATUS_WWAN_PACKET_SERVICE ((NDIS_STATUS)0x40041009)
440 #define NDIS_STATUS_WWAN_SIGNAL_STATE ((NDIS_STATUS)0x4004100a)
441 #define NDIS_STATUS_WWAN_CONTEXT_STATE ((NDIS_STATUS)0x4004100b)
442 #define NDIS_STATUS_WWAN_PROVISIONED_CONTEXTS ((NDIS_STATUS)0x4004100c)
443 #define NDIS_STATUS_WWAN_SERVICE_ACTIVATION ((NDIS_STATUS)0x4004100d)
444 #define NDIS_STATUS_WWAN_SMS_CONFIGURATION ((NDIS_STATUS)0x4004100e)
445 #define NDIS_STATUS_WWAN_SMS_RECEIVE ((NDIS_STATUS)0x4004100f)
446 #define NDIS_STATUS_WWAN_SMS_SEND ((NDIS_STATUS)0x40041010)
447 #define NDIS_STATUS_WWAN_SMS_DELETE ((NDIS_STATUS)0x40041011)
448 #define NDIS_STATUS_WWAN_SMS_STATUS ((NDIS_STATUS)0x40041012)
449 #define NDIS_STATUS_WWAN_DNS_ADDRESS ((NDIS_STATUS)0x40041013)
450
451 #define NDIS_STATUS_WWAN_VENDOR_SPECIFIC ((NDIS_STATUS)0x40043000)
452
453 #endif /* NDIS_SUPPORT_NDIS6 */
454
455 #if (NDIS_SUPPORT_NDIS620)
456 #define NDIS_STATUS_PM_WOL_PATTERN_REJECTED ((NDIS_STATUS)0x40030051L)
457 #define NDIS_STATUS_PM_OFFLOAD_REJECTED ((NDIS_STATUS)0x40030052L)
458 #define NDIS_STATUS_PM_CAPABILITIES_CHANGE ((NDIS_STATUS)0x40030053L)
459 #endif
460
461 #define NDIS_STATUS_NOT_RESETTABLE ((NDIS_STATUS)0x80010001L)
462 #define NDIS_STATUS_SOFT_ERRORS ((NDIS_STATUS)0x80010003L)
463 #define NDIS_STATUS_HARD_ERRORS ((NDIS_STATUS)0x80010004L)
464 #define NDIS_STATUS_BUFFER_OVERFLOW ((NDIS_STATUS)STATUS_BUFFER_OVERFLOW)
465 #define NDIS_STATUS_FAILURE ((NDIS_STATUS)STATUS_UNSUCCESSFUL)
466 #define NDIS_STATUS_RESOURCES ((NDIS_STATUS)STATUS_INSUFFICIENT_RESOURCES)
467 #define NDIS_STATUS_CLOSING ((NDIS_STATUS)0xC0010002L)
468 #define NDIS_STATUS_BAD_VERSION ((NDIS_STATUS)0xC0010004L)
469 #define NDIS_STATUS_BAD_CHARACTERISTICS ((NDIS_STATUS)0xC0010005L)
470 #define NDIS_STATUS_ADAPTER_NOT_FOUND ((NDIS_STATUS)0xC0010006L)
471 #define NDIS_STATUS_OPEN_FAILED ((NDIS_STATUS)0xC0010007L)
472 #define NDIS_STATUS_DEVICE_FAILED ((NDIS_STATUS)0xC0010008L)
473 #define NDIS_STATUS_MULTICAST_FULL ((NDIS_STATUS)0xC0010009L)
474 #define NDIS_STATUS_MULTICAST_EXISTS ((NDIS_STATUS)0xC001000AL)
475 #define NDIS_STATUS_MULTICAST_NOT_FOUND ((NDIS_STATUS)0xC001000BL)
476 #define NDIS_STATUS_REQUEST_ABORTED ((NDIS_STATUS)0xC001000CL)
477 #define NDIS_STATUS_RESET_IN_PROGRESS ((NDIS_STATUS)0xC001000DL)
478 #define NDIS_STATUS_CLOSING_INDICATING ((NDIS_STATUS)0xC001000EL)
479 #define NDIS_STATUS_NOT_SUPPORTED ((NDIS_STATUS)STATUS_NOT_SUPPORTED)
480 #define NDIS_STATUS_INVALID_PACKET ((NDIS_STATUS)0xC001000FL)
481 #define NDIS_STATUS_OPEN_LIST_FULL ((NDIS_STATUS)0xC0010010L)
482 #define NDIS_STATUS_ADAPTER_NOT_READY ((NDIS_STATUS)0xC0010011L)
483 #define NDIS_STATUS_ADAPTER_NOT_OPEN ((NDIS_STATUS)0xC0010012L)
484 #define NDIS_STATUS_NOT_INDICATING ((NDIS_STATUS)0xC0010013L)
485 #define NDIS_STATUS_INVALID_LENGTH ((NDIS_STATUS)0xC0010014L)
486 #define NDIS_STATUS_INVALID_DATA ((NDIS_STATUS)0xC0010015L)
487 #define NDIS_STATUS_BUFFER_TOO_SHORT ((NDIS_STATUS)0xC0010016L)
488 #define NDIS_STATUS_INVALID_OID ((NDIS_STATUS)0xC0010017L)
489 #define NDIS_STATUS_ADAPTER_REMOVED ((NDIS_STATUS)0xC0010018L)
490 #define NDIS_STATUS_UNSUPPORTED_MEDIA ((NDIS_STATUS)0xC0010019L)
491 #define NDIS_STATUS_GROUP_ADDRESS_IN_USE ((NDIS_STATUS)0xC001001AL)
492 #define NDIS_STATUS_FILE_NOT_FOUND ((NDIS_STATUS)0xC001001BL)
493 #define NDIS_STATUS_ERROR_READING_FILE ((NDIS_STATUS)0xC001001CL)
494 #define NDIS_STATUS_ALREADY_MAPPED ((NDIS_STATUS)0xC001001DL)
495 #define NDIS_STATUS_RESOURCE_CONFLICT ((NDIS_STATUS)0xC001001EL)
496 #define NDIS_STATUS_NO_CABLE ((NDIS_STATUS)0xC001001FL)
497
498 #define NDIS_STATUS_INVALID_SAP ((NDIS_STATUS)0xC0010020L)
499 #define NDIS_STATUS_SAP_IN_USE ((NDIS_STATUS)0xC0010021L)
500 #define NDIS_STATUS_INVALID_ADDRESS ((NDIS_STATUS)0xC0010022L)
501 #define NDIS_STATUS_VC_NOT_ACTIVATED ((NDIS_STATUS)0xC0010023L)
502 #define NDIS_STATUS_DEST_OUT_OF_ORDER ((NDIS_STATUS)0xC0010024L)
503 #define NDIS_STATUS_VC_NOT_AVAILABLE ((NDIS_STATUS)0xC0010025L)
504 #define NDIS_STATUS_CELLRATE_NOT_AVAILABLE ((NDIS_STATUS)0xC0010026L)
505 #define NDIS_STATUS_INCOMPATABLE_QOS ((NDIS_STATUS)0xC0010027L)
506 #define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED ((NDIS_STATUS)0xC0010028L)
507 #define NDIS_STATUS_NO_ROUTE_TO_DESTINATION ((NDIS_STATUS)0xC0010029L)
508
509 #define NDIS_STATUS_TOKEN_RING_OPEN_ERROR ((NDIS_STATUS)0xC0011000L)
510 #define NDIS_STATUS_INVALID_DEVICE_REQUEST ((NDIS_STATUS)STATUS_INVALID_DEVICE_REQUEST)
511 #define NDIS_STATUS_NETWORK_UNREACHABLE ((NDIS_STATUS)STATUS_NETWORK_UNREACHABLE)
512
513 #if NDIS_SUPPORT_NDIS6
514
515 #define NDIS_STATUS_SEND_ABORTED ((NDIS_STATUS)STATUS_NDIS_REQUEST_ABORTED)
516 #define NDIS_STATUS_PAUSED ((NDIS_STATUS)STATUS_NDIS_PAUSED)
517 #define NDIS_STATUS_INTERFACE_NOT_FOUND ((NDIS_STATUS)STATUS_NDIS_INTERFACE_NOT_FOUND)
518 #define NDIS_STATUS_INVALID_PARAMETER ((NDIS_STATUS)STATUS_INVALID_PARAMETER)
519 #define NDIS_STATUS_UNSUPPORTED_REVISION ((NDIS_STATUS)STATUS_NDIS_UNSUPPORTED_REVISION)
520 #define NDIS_STATUS_INVALID_PORT ((NDIS_STATUS)STATUS_NDIS_INVALID_PORT)
521 #define NDIS_STATUS_INVALID_PORT_STATE ((NDIS_STATUS)STATUS_NDIS_INVALID_PORT_STATE)
522 #define NDIS_STATUS_INVALID_STATE ((NDIS_STATUS)STATUS_INVALID_DEVICE_STATE)
523 #define NDIS_STATUS_MEDIA_DISCONNECTED ((NDIS_STATUS)STATUS_NDIS_MEDIA_DISCONNECTED)
524 #define NDIS_STATUS_LOW_POWER_STATE ((NDIS_STATUS)STATUS_NDIS_LOW_POWER_STATE)
525 #define NDIS_STATUS_DOT11_AUTO_CONFIG_ENABLED ((NDIS_STATUS)STATUS_NDIS_DOT11_AUTO_CONFIG_ENABLED)
526 #define NDIS_STATUS_DOT11_MEDIA_IN_USE ((NDIS_STATUS)STATUS_NDIS_DOT11_MEDIA_IN_USE)
527 #define NDIS_STATUS_DOT11_POWER_STATE_INVALID ((NDIS_STATUS)STATUS_NDIS_DOT11_POWER_STATE_INVALID)
528 #define NDIS_STATUS_UPLOAD_IN_PROGRESS ((NDIS_STATUS)0xC0231001L)
529 #define NDIS_STATUS_REQUEST_UPLOAD ((NDIS_STATUS)0xC0231002L)
530 #define NDIS_STATUS_UPLOAD_REQUESTED ((NDIS_STATUS)0xC0231003L)
531 #define NDIS_STATUS_OFFLOAD_TCP_ENTRIES ((NDIS_STATUS)0xC0231004L)
532 #define NDIS_STATUS_OFFLOAD_PATH_ENTRIES ((NDIS_STATUS)0xC0231005L)
533 #define NDIS_STATUS_OFFLOAD_NEIGHBOR_ENTRIES ((NDIS_STATUS)0xC0231006L)
534 #define NDIS_STATUS_OFFLOAD_IP_ADDRESS_ENTRIES ((NDIS_STATUS)0xC0231007L)
535 #define NDIS_STATUS_OFFLOAD_HW_ADDRESS_ENTRIES ((NDIS_STATUS)0xC0231008L)
536 #define NDIS_STATUS_OFFLOAD_VLAN_ENTRIES ((NDIS_STATUS)0xC0231009L)
537 #define NDIS_STATUS_OFFLOAD_TCP_XMIT_BUFFER ((NDIS_STATUS)0xC023100AL)
538 #define NDIS_STATUS_OFFLOAD_TCP_RCV_BUFFER ((NDIS_STATUS)0xC023100BL)
539 #define NDIS_STATUS_OFFLOAD_TCP_RCV_WINDOW ((NDIS_STATUS)0xC023100CL)
540 #define NDIS_STATUS_OFFLOAD_VLAN_MISMATCH ((NDIS_STATUS)0xC023100DL)
541 #define NDIS_STATUS_OFFLOAD_DATA_NOT_ACCEPTED ((NDIS_STATUS)0xC023100EL)
542 #define NDIS_STATUS_OFFLOAD_POLICY ((NDIS_STATUS)0xC023100FL)
543 #define NDIS_STATUS_OFFLOAD_DATA_PARTIALLY_ACCEPTED ((NDIS_STATUS)0xC0231010L)
544 #define NDIS_STATUS_OFFLOAD_REQUEST_RESET ((NDIS_STATUS)0xC0231011L)
545
546 #if NDIS_SUPPORT_NDIS620
547 #define NDIS_STATUS_PM_WOL_PATTERN_LIST_FULL ((NDIS_STATUS)STATUS_NDIS_PM_WOL_PATTERN_LIST_FULL)
548 #define NDIS_STATUS_PM_PROTOCOL_OFFLOAD_LIST_FULL ((NDIS_STATUS)STATUS_NDIS_PM_PROTOCOL_OFFLOAD_LIST_FULL)
549 #endif
550
551 #endif /* NDIS_SUPPORT_NDIS6 */
552
553 #if (NDIS_SUPPORT_NDIS620)
554 #define NDIS_STATUS_OFFLOAD_CONNECTION_REJECTED ((NDIS_STATUS)STATUS_NDIS_OFFLOAD_CONNECTION_REJECTED)
555 #endif
556
557 /* NDIS error codes for error logging */
558
559 #define NDIS_ERROR_CODE ULONG
560
561 #define NDIS_ERROR_CODE_RESOURCE_CONFLICT EVENT_NDIS_RESOURCE_CONFLICT
562 #define NDIS_ERROR_CODE_OUT_OF_RESOURCES EVENT_NDIS_OUT_OF_RESOURCE
563 #define NDIS_ERROR_CODE_HARDWARE_FAILURE EVENT_NDIS_HARDWARE_FAILURE
564 #define NDIS_ERROR_CODE_ADAPTER_NOT_FOUND EVENT_NDIS_ADAPTER_NOT_FOUND
565 #define NDIS_ERROR_CODE_INTERRUPT_CONNECT EVENT_NDIS_INTERRUPT_CONNECT
566 #define NDIS_ERROR_CODE_DRIVER_FAILURE EVENT_NDIS_DRIVER_FAILURE
567 #define NDIS_ERROR_CODE_BAD_VERSION EVENT_NDIS_BAD_VERSION
568 #define NDIS_ERROR_CODE_TIMEOUT EVENT_NDIS_TIMEOUT
569 #define NDIS_ERROR_CODE_NETWORK_ADDRESS EVENT_NDIS_NETWORK_ADDRESS
570 #define NDIS_ERROR_CODE_UNSUPPORTED_CONFIGURATION EVENT_NDIS_UNSUPPORTED_CONFIGURATION
571 #define NDIS_ERROR_CODE_INVALID_VALUE_FROM_ADAPTER EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER
572 #define NDIS_ERROR_CODE_MISSING_CONFIGURATION_PARAMETER EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER
573 #define NDIS_ERROR_CODE_BAD_IO_BASE_ADDRESS EVENT_NDIS_BAD_IO_BASE_ADDRESS
574 #define NDIS_ERROR_CODE_RECEIVE_SPACE_SMALL EVENT_NDIS_RECEIVE_SPACE_SMALL
575 #define NDIS_ERROR_CODE_ADAPTER_DISABLED EVENT_NDIS_ADAPTER_DISABLED
576
577 /* Memory allocation flags. Used by Ndis[Allocate|Free]Memory */
578 #define NDIS_MEMORY_CONTIGUOUS 0x00000001
579 #define NDIS_MEMORY_NONCACHED 0x00000002
580
581 /* NIC attribute flags. Used by NdisMSetAttributes(Ex) */
582 #define NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT 0x00000001
583 #define NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT 0x00000002
584 #define NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS 0x00000004
585 #define NDIS_ATTRIBUTE_BUS_MASTER 0x00000008
586 #define NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER 0x00000010
587 #define NDIS_ATTRIBUTE_DESERIALIZE 0x00000020
588 #define NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND 0x00000040
589 #define NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK 0x00000080
590 #define NDIS_ATTRIBUTE_NOT_CO_NDIS 0x00000100
591 #define NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS 0x00000200
592
593 /* Lock */
594
595 #if NDIS_SUPPORT_60_COMPATIBLE_API
596
597 typedef union _NDIS_RW_LOCK_REFCOUNT {
598 UINT RefCount;
599 UCHAR cacheLine[16];
600 } NDIS_RW_LOCK_REFCOUNT;
601
602 typedef struct _NDIS_RW_LOCK {
603 __MINGW_EXTENSION union {
604 __MINGW_EXTENSION struct {
605 KSPIN_LOCK SpinLock;
606 PVOID Context;
607 };
608 UCHAR Reserved[16];
609 };
610 __MINGW_EXTENSION union {
611 NDIS_RW_LOCK_REFCOUNT RefCount[MAXIMUM_PROCESSORS];
612 ULONG RefCountEx[sizeof(NDIS_RW_LOCK_REFCOUNT)/sizeof(ULONG) * MAXIMUM_PROCESSORS];
613 __MINGW_EXTENSION struct {
614 KSPIN_LOCK RefCountLock;
615 volatile ULONG SharedRefCount;
616 volatile BOOLEAN WriterWaiting;
617 };
618 };
619 } NDIS_RW_LOCK, *PNDIS_RW_LOCK;
620
621 typedef struct _LOCK_STATE {
622 USHORT LockState;
623 KIRQL OldIrql;
624 } LOCK_STATE, *PLOCK_STATE;
625
626 #endif /* NDIS_SUPPORT_60_COMPATIBLE_API */
627
628 /* Timer */
629
630 _IRQL_requires_(DISPATCH_LEVEL)
631 _IRQL_requires_same_
632 _Function_class_(NDIS_TIMER_FUNCTION)
633 typedef VOID
634 (NTAPI NDIS_TIMER_FUNCTION)(
635 _In_ PVOID SystemSpecific1,
636 _In_ PVOID FunctionContext,
637 _In_ PVOID SystemSpecific2,
638 _In_ PVOID SystemSpecific3);
639 typedef NDIS_TIMER_FUNCTION *PNDIS_TIMER_FUNCTION;
640
641 typedef struct _NDIS_TIMER {
642 KTIMER Timer;
643 KDPC Dpc;
644 } NDIS_TIMER, *PNDIS_TIMER;
645
646 /* Hardware */
647
648 typedef CM_MCA_POS_DATA NDIS_MCA_POS_DATA, *PNDIS_MCA_POS_DATA;
649 typedef CM_EISA_SLOT_INFORMATION NDIS_EISA_SLOT_INFORMATION, *PNDIS_EISA_SLOT_INFORMATION;
650 typedef CM_EISA_FUNCTION_INFORMATION NDIS_EISA_FUNCTION_INFORMATION, *PNDIS_EISA_FUNCTION_INFORMATION;
651 typedef CM_PARTIAL_RESOURCE_LIST NDIS_RESOURCE_LIST, *PNDIS_RESOURCE_LIST;
652
653 /* Flag bits */
654 #define READABLE_LOCAL_CLOCK 0x00000001
655 #define CLOCK_NETWORK_DERIVED 0x00000002
656 #define CLOCK_PRECISION 0x00000004
657 #define RECEIVE_TIME_INDICATION_CAPABLE 0x00000008
658 #define TIMED_SEND_CAPABLE 0x00000010
659 #define TIME_STAMP_CAPABLE 0x00000020
660
661 /* NDIS packet filter bits (OID_GEN_CURRENT_PACKET_FILTER) */
662 #define NDIS_PACKET_TYPE_DIRECTED 0x00000001
663 #define NDIS_PACKET_TYPE_MULTICAST 0x00000002
664 #define NDIS_PACKET_TYPE_ALL_MULTICAST 0x00000004
665 #define NDIS_PACKET_TYPE_BROADCAST 0x00000008
666 #define NDIS_PACKET_TYPE_SOURCE_ROUTING 0x00000010
667 #define NDIS_PACKET_TYPE_PROMISCUOUS 0x00000020
668 #define NDIS_PACKET_TYPE_SMT 0x00000040
669 #define NDIS_PACKET_TYPE_ALL_LOCAL 0x00000080
670 #define NDIS_PACKET_TYPE_GROUP 0x00001000
671 #define NDIS_PACKET_TYPE_ALL_FUNCTIONAL 0x00002000
672 #define NDIS_PACKET_TYPE_FUNCTIONAL 0x00004000
673 #define NDIS_PACKET_TYPE_MAC_FRAME 0x00008000
674
675 /* NDIS protocol option bits (OID_GEN_PROTOCOL_OPTIONS) */
676 #define NDIS_PROT_OPTION_ESTIMATED_LENGTH 0x00000001
677 #define NDIS_PROT_OPTION_NO_LOOPBACK 0x00000002
678 #define NDIS_PROT_OPTION_NO_RSVD_ON_RCVPKT 0x00000004
679
680 /* NDIS MAC option bits (OID_GEN_MAC_OPTIONS) */
681 #define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA 0x00000001
682 #define NDIS_MAC_OPTION_RECEIVE_SERIALIZED 0x00000002
683 #define NDIS_MAC_OPTION_TRANSFERS_NOT_PEND 0x00000004
684 #define NDIS_MAC_OPTION_NO_LOOPBACK 0x00000008
685 #define NDIS_MAC_OPTION_FULL_DUPLEX 0x00000010
686 #define NDIS_MAC_OPTION_EOTX_INDICATION 0x00000020
687 #define NDIS_MAC_OPTION_8021P_PRIORITY 0x00000040
688 #define NDIS_MAC_OPTION_RESERVED 0x80000000
689
690 #define NDIS_GUID_TO_OID 0x00000001
691 #define NDIS_GUID_TO_STATUS 0x00000002
692 #define NDIS_GUID_ANSI_STRING 0x00000004
693 #define NDIS_GUID_UNICODE_STRING 0x00000008
694 #define NDIS_GUID_ARRAY 0x00000010
695
696 #if NDIS_LEGACY_DRIVER
697
698 /* NDIS_PACKET_PRIVATE.Flags constants */
699 #define fPACKET_WRAPPER_RESERVED 0x3f
700 #define fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO 0x40
701 #define fPACKET_ALLOCATED_BY_NDIS 0x80
702
703 #define NDIS_FLAGS_PROTOCOL_ID_MASK 0x0000000f
704 #define NDIS_FLAGS_MULTICAST_PACKET 0x00000010
705 #define NDIS_FLAGS_RESERVED2 0x00000020
706 #define NDIS_FLAGS_RESERVED3 0x00000040
707 #define NDIS_FLAGS_DONT_LOOPBACK 0x00000080
708 #define NDIS_FLAGS_IS_LOOPBACK_PACKET 0x00000100
709 #define NDIS_FLAGS_LOOPBACK_ONLY 0x00000200
710 #define NDIS_FLAGS_RESERVED4 0x00000400
711 #define NDIS_FLAGS_DOUBLE_BUFFERED 0x00000800
712 #define NDIS_FLAGS_SENT_AT_DPC 0x00001000
713 #define NDIS_FLAGS_USES_SG_BUFFER_LIST 0x00002000
714 #define NDIS_FLAGS_USES_ORIGINAL_PACKET 0x00004000
715 #define NDIS_FLAGS_PADDED 0x00010000
716 #define NDIS_FLAGS_XLATE_AT_TOP 0x00020000
717
718 typedef NDIS_HANDLE PNDIS_PACKET_POOL;
719
720 typedef struct _NDIS_PACKET_PRIVATE {
721 UINT PhysicalCount;
722 UINT TotalLength;
723 PNDIS_BUFFER Head;
724 PNDIS_BUFFER Tail;
725 PNDIS_PACKET_POOL Pool;
726 UINT Count;
727 ULONG Flags;
728 BOOLEAN ValidCounts;
729 UCHAR NdisPacketFlags;
730 USHORT NdisPacketOobOffset;
731 } NDIS_PACKET_PRIVATE, *PNDIS_PACKET_PRIVATE;
732
733 typedef struct _NDIS_PACKET {
734 NDIS_PACKET_PRIVATE Private;
735 __MINGW_EXTENSION union {
736 __MINGW_EXTENSION struct {
737 UCHAR MiniportReserved[2 * sizeof(PVOID)];
738 UCHAR WrapperReserved[2 * sizeof(PVOID)];
739 };
740 __MINGW_EXTENSION struct {
741 UCHAR MiniportReservedEx[3 * sizeof(PVOID)];
742 UCHAR WrapperReservedEx[sizeof(PVOID)];
743 };
744 __MINGW_EXTENSION struct {
745 UCHAR MacReserved[4 * sizeof(PVOID)];
746 };
747 };
748 ULONG_PTR Reserved[2];
749 UCHAR ProtocolReserved[1];
750 } NDIS_PACKET, *PNDIS_PACKET, **PPNDIS_PACKET;
751
752 typedef struct _NDIS_PACKET_STACK {
753 ULONG_PTR IMReserved[2];
754 ULONG_PTR NdisReserved[4];
755 } NDIS_PACKET_STACK, *PNDIS_PACKET_STACK;
756
757 #endif /* NDIS_LEGACY_DRIVER */
758
759 typedef enum _NDIS_CLASS_ID {
760 NdisClass802_3Priority,
761 NdisClassWirelessWanMbxMailbox,
762 NdisClassIrdaPacketInfo,
763 NdisClassAtmAALInfo
764 } NDIS_CLASS_ID;
765
766 typedef struct _MEDIA_SPECIFIC_INFORMATION {
767 UINT NextEntryOffset;
768 NDIS_CLASS_ID ClassId;
769 UINT Size;
770 UCHAR ClassInformation[1];
771 } MEDIA_SPECIFIC_INFORMATION, *PMEDIA_SPECIFIC_INFORMATION;
772
773 #if NDIS_LEGACY_DRIVER
774 typedef struct _NDIS_PACKET_OOB_DATA {
775 __MINGW_EXTENSION union {
776 ULONGLONG TimeToSend;
777 ULONGLONG TimeSent;
778 };
779 ULONGLONG TimeReceived;
780 UINT HeaderSize;
781 UINT SizeMediaSpecificInfo;
782 PVOID MediaSpecificInformation;
783 NDIS_STATUS Status;
784 } NDIS_PACKET_OOB_DATA, *PNDIS_PACKET_OOB_DATA;
785 #endif
786
787 /* Request types used by NdisRequest */
788 typedef enum _NDIS_REQUEST_TYPE {
789 NdisRequestQueryInformation,
790 NdisRequestSetInformation,
791 NdisRequestQueryStatistics,
792 NdisRequestOpen,
793 NdisRequestClose,
794 NdisRequestSend,
795 NdisRequestTransferData,
796 NdisRequestReset,
797 NdisRequestGeneric1,
798 NdisRequestGeneric2,
799 NdisRequestGeneric3,
800 NdisRequestGeneric4,
801 #if NDIS_SUPPORT_NDIS6
802 NdisRequestMethod,
803 #endif
804 } NDIS_REQUEST_TYPE, *PNDIS_REQUEST_TYPE;
805
806 #if NDIS_LEGACY_DRIVER
807 typedef struct _NDIS_REQUEST {
808 UCHAR MacReserved[4 * sizeof(PVOID)];
809 NDIS_REQUEST_TYPE RequestType;
810 union _DATA {
811 struct QUERY_INFORMATION {
812 NDIS_OID Oid;
813 PVOID InformationBuffer;
814 UINT InformationBufferLength;
815 UINT BytesWritten;
816 UINT BytesNeeded;
817 } QUERY_INFORMATION;
818 struct SET_INFORMATION {
819 NDIS_OID Oid;
820 PVOID InformationBuffer;
821 UINT InformationBufferLength;
822 UINT BytesRead;
823 UINT BytesNeeded;
824 } SET_INFORMATION;
825 } DATA;
826 #if (defined(NDIS50) || defined(NDIS51) || defined(NDIS50_MINIPORT) || defined(NDIS51_MINIPORT))
827 UCHAR NdisReserved[9 * sizeof(PVOID)];
828 __MINGW_EXTENSION union {
829 UCHAR CallMgrReserved[2 * sizeof(PVOID)];
830 UCHAR ProtocolReserved[2 * sizeof(PVOID)];
831 };
832 UCHAR MiniportReserved[2 * sizeof(PVOID)];
833 #endif
834 } NDIS_REQUEST, *PNDIS_REQUEST;
835 #endif /* NDIS_LEGACY_DRIVER */
836
837 /* Wide Area Networks definitions */
838
839 #if NDIS_LEGACY_DRIVER
840 typedef struct _NDIS_WAN_PACKET {
841 LIST_ENTRY WanPacketQueue;
842 PUCHAR CurrentBuffer;
843 ULONG CurrentLength;
844 PUCHAR StartBuffer;
845 PUCHAR EndBuffer;
846 PVOID ProtocolReserved1;
847 PVOID ProtocolReserved2;
848 PVOID ProtocolReserved3;
849 PVOID ProtocolReserved4;
850 PVOID MacReserved1;
851 PVOID MacReserved2;
852 PVOID MacReserved3;
853 PVOID MacReserved4;
854 } NDIS_WAN_PACKET, *PNDIS_WAN_PACKET;
855 #endif
856
857 /* DMA channel information */
858
859 typedef struct _NDIS_DMA_DESCRIPTION {
860 BOOLEAN DemandMode;
861 BOOLEAN AutoInitialize;
862 BOOLEAN DmaChannelSpecified;
863 DMA_WIDTH DmaWidth;
864 DMA_SPEED DmaSpeed;
865 ULONG DmaPort;
866 ULONG DmaChannel;
867 } NDIS_DMA_DESCRIPTION, *PNDIS_DMA_DESCRIPTION;
868
869 typedef struct _NDIS_DMA_BLOCK {
870 PVOID MapRegisterBase;
871 KEVENT AllocationEvent;
872 PADAPTER_OBJECT SystemAdapterObject;
873 PVOID Miniport;
874 BOOLEAN InProgress;
875 } NDIS_DMA_BLOCK, *PNDIS_DMA_BLOCK;
876
877 typedef UCHAR NDIS_DMA_SIZE;
878
879 #define NDIS_DMA_24BITS ((NDIS_DMA_SIZE)0)
880 #define NDIS_DMA_32BITS ((NDIS_DMA_SIZE)1)
881 #define NDIS_DMA_64BITS ((NDIS_DMA_SIZE)2)
882
883 typedef enum _NDIS_PROCESSOR_TYPE {
884 NdisProcessorX86,
885 NdisProcessorMips,
886 NdisProcessorAlpha,
887 NdisProcessorPpc,
888 NdisProcessorAmd64,
889 NdisProcessorIA64
890 } NDIS_PROCESSOR_TYPE, *PNDIS_PROCESSOR_TYPE;
891
892 typedef enum _NDIS_ENVIRONMENT_TYPE {
893 NdisEnvironmentWindows,
894 NdisEnvironmentWindowsNt
895 } NDIS_ENVIRONMENT_TYPE, *PNDIS_ENVIRONMENT_TYPE;
896
897 /* Possible hardware architecture */
898 typedef enum _NDIS_INTERFACE_TYPE {
899 NdisInterfaceInternal = Internal,
900 NdisInterfaceIsa = Isa,
901 NdisInterfaceEisa = Eisa,
902 NdisInterfaceMca = MicroChannel,
903 NdisInterfaceTurboChannel = TurboChannel,
904 NdisInterfacePci = PCIBus,
905 NdisInterfacePcMcia = PCMCIABus,
906 NdisInterfaceCBus = CBus,
907 NdisInterfaceMPIBus = MPIBus,
908 NdisInterfaceMPSABus = MPSABus,
909 NdisInterfaceProcessorInternal = ProcessorInternal,
910 NdisInterfaceInternalPowerBus = InternalPowerBus,
911 NdisInterfacePNPISABus = PNPISABus,
912 NdisInterfacePNPBus = PNPBus,
913 NdisInterfaceUSB,
914 NdisInterfaceIrda,
915 NdisInterface1394,
916 NdisMaximumInterfaceType
917 } NDIS_INTERFACE_TYPE, *PNDIS_INTERFACE_TYPE;
918
919 #define NdisInterruptLevelSensitive LevelSensitive
920 #define NdisInterruptLatched Latched
921
922 typedef KINTERRUPT_MODE NDIS_INTERRUPT_MODE, *PNDIS_INTERRUPT_MODE;
923
924 typedef enum _NDIS_PARAMETER_TYPE {
925 NdisParameterInteger,
926 NdisParameterHexInteger,
927 NdisParameterString,
928 NdisParameterMultiString,
929 NdisParameterBinary
930 } NDIS_PARAMETER_TYPE, *PNDIS_PARAMETER_TYPE;
931
932 typedef struct _BINARY_DATA {
933 USHORT Length;
934 _Field_size_bytes_(Length) PVOID Buffer;
935 } BINARY_DATA;
936
937 typedef struct _NDIS_CONFIGURATION_PARAMETER {
938 NDIS_PARAMETER_TYPE ParameterType;
939 union {
940 ULONG IntegerData;
941 NDIS_STRING StringData;
942 BINARY_DATA BinaryData;
943 } ParameterData;
944 } NDIS_CONFIGURATION_PARAMETER, *PNDIS_CONFIGURATION_PARAMETER;
945
946 typedef PHYSICAL_ADDRESS NDIS_PHYSICAL_ADDRESS, *PNDIS_PHYSICAL_ADDRESS;
947
948 typedef struct _NDIS_PHYSICAL_ADDRESS_UNIT {
949 NDIS_PHYSICAL_ADDRESS PhysicalAddress;
950 UINT Length;
951 } NDIS_PHYSICAL_ADDRESS_UNIT, *PNDIS_PHYSICAL_ADDRESS_UNIT;
952
953 typedef struct _NDIS_WAN_LINE_DOWN {
954 UCHAR RemoteAddress[6];
955 UCHAR LocalAddress[6];
956 } NDIS_WAN_LINE_DOWN, *PNDIS_WAN_LINE_DOWN;
957
958 typedef struct _NDIS_WAN_LINE_UP {
959 ULONG LinkSpeed;
960 ULONG MaximumTotalSize;
961 NDIS_WAN_QUALITY Quality;
962 USHORT SendWindow;
963 UCHAR RemoteAddress[6];
964 OUT UCHAR LocalAddress[6];
965 ULONG ProtocolBufferLength;
966 PUCHAR ProtocolBuffer;
967 USHORT ProtocolType;
968 NDIS_STRING DeviceName;
969 } NDIS_WAN_LINE_UP, *PNDIS_WAN_LINE_UP;
970
971 typedef NTSTATUS
972 (NTAPI *TDI_REGISTER_CALLBACK)(
973 _In_ PUNICODE_STRING DeviceName,
974 _Out_ HANDLE *TdiHandle);
975
976 typedef NTSTATUS
977 (NTAPI *TDI_PNP_HANDLER)(
978 _In_ PUNICODE_STRING UpperComponent,
979 _In_ PUNICODE_STRING LowerComponent,
980 _In_ PUNICODE_STRING BindList,
981 _In_ PVOID ReconfigBuffer,
982 _In_ UINT ReconfigBufferSize,
983 _In_ UINT Operation);
984
985 typedef struct _OID_LIST OID_LIST, *POID_LIST;
986
987 /* PnP state */
988
989 typedef enum _NDIS_PNP_DEVICE_STATE {
990 NdisPnPDeviceAdded,
991 NdisPnPDeviceStarted,
992 NdisPnPDeviceQueryStopped,
993 NdisPnPDeviceStopped,
994 NdisPnPDeviceQueryRemoved,
995 NdisPnPDeviceRemoved,
996 NdisPnPDeviceSurpriseRemoved
997 } NDIS_PNP_DEVICE_STATE;
998
999 #define NDIS_DEVICE_NOT_STOPPABLE 0x00000001
1000 #define NDIS_DEVICE_NOT_REMOVEABLE 0x00000002
1001 #define NDIS_DEVICE_NOT_SUSPENDABLE 0x00000004
1002 #define NDIS_DEVICE_DISABLE_PM 0x00000008
1003 #define NDIS_DEVICE_DISABLE_WAKE_UP 0x00000010
1004 #define NDIS_DEVICE_DISABLE_WAKE_ON_RECONNECT 0x00000020
1005 #define NDIS_DEVICE_RESERVED 0x00000040
1006 #define NDIS_DEVICE_DISABLE_WAKE_ON_MAGIC_PACKET 0x00000080
1007 #define NDIS_DEVICE_DISABLE_WAKE_ON_PATTERN_MATCH 0x00000100
1008
1009 /* Protocol types supported by NDIS */
1010 #define NDIS_PROTOCOL_ID_DEFAULT 0x00
1011 #define NDIS_PROTOCOL_ID_TCP_IP 0x02
1012 #define NDIS_PROTOCOL_ID_IPX 0x06
1013 #define NDIS_PROTOCOL_ID_NBF 0x07
1014 #define NDIS_PROTOCOL_ID_MAX 0x0F
1015 #define NDIS_PROTOCOL_ID_MASK 0x0F
1016
1017 typedef ULONG NDIS_AF, *PNDIS_AF;
1018
1019 #define CO_ADDRESS_FAMILY_Q2931 ((NDIS_AF)0x1)
1020 #define CO_ADDRESS_FAMILY_PSCHED ((NDIS_AF)0x2)
1021 #define CO_ADDRESS_FAMILY_L2TP ((NDIS_AF)0x3)
1022 #define CO_ADDRESS_FAMILY_IRDA ((NDIS_AF)0x4)
1023 #define CO_ADDRESS_FAMILY_1394 ((NDIS_AF)0x5)
1024 #define CO_ADDRESS_FAMILY_PPP ((NDIS_AF)0x6)
1025 #define CO_ADDRESS_FAMILY_INFINIBAND ((NDIS_AF)0x7)
1026 #define CO_ADDRESS_FAMILY_TAPI ((NDIS_AF)0x800)
1027 #define CO_ADDRESS_FAMILY_TAPI_PROXY ((NDIS_AF)0x801)
1028
1029 #define CO_ADDRESS_FAMILY_PROXY 0x80000000
1030
1031 typedef struct _CO_ADDRESS_FAMILY {
1032 NDIS_AF AddressFamily;
1033 ULONG MajorVersion;
1034 ULONG MinorVersion;
1035 } CO_ADDRESS_FAMILY, *PCO_ADDRESS_FAMILY;
1036
1037 typedef struct _CO_SPECIFIC_PARAMETERS {
1038 ULONG ParamType;
1039 ULONG Length;
1040 UCHAR Parameters[1];
1041 } CO_SPECIFIC_PARAMETERS, *PCO_SPECIFIC_PARAMETERS;
1042
1043 typedef struct _CO_CALL_MANAGER_PARAMETERS {
1044 FLOWSPEC Transmit;
1045 FLOWSPEC Receive;
1046 CO_SPECIFIC_PARAMETERS CallMgrSpecific;
1047 } CO_CALL_MANAGER_PARAMETERS, *PCO_CALL_MANAGER_PARAMETERS;
1048
1049 /* CO_MEDIA_PARAMETERS.Flags constants */
1050 #define RECEIVE_TIME_INDICATION 0x00000001
1051 #define USE_TIME_STAMPS 0x00000002
1052 #define TRANSMIT_VC 0x00000004
1053 #define RECEIVE_VC 0x00000008
1054 #define INDICATE_ERRED_PACKETS 0x00000010
1055 #define INDICATE_END_OF_TX 0x00000020
1056 #define RESERVE_RESOURCES_VC 0x00000040
1057 #define ROUND_DOWN_FLOW 0x00000080
1058 #define ROUND_UP_FLOW 0x00000100
1059
1060 typedef struct _CO_MEDIA_PARAMETERS {
1061 ULONG Flags;
1062 ULONG ReceivePriority;
1063 ULONG ReceiveSizeHint;
1064 CO_SPECIFIC_PARAMETERS MediaSpecific;
1065 } CO_MEDIA_PARAMETERS, *PCO_MEDIA_PARAMETERS;
1066
1067 /* CO_CALL_PARAMETERS.Flags constants */
1068 #define PERMANENT_VC 0x00000001
1069 #define CALL_PARAMETERS_CHANGED 0x00000002
1070 #define QUERY_CALL_PARAMETERS 0x00000004
1071 #define BROADCAST_VC 0x00000008
1072 #define MULTIPOINT_VC 0x00000010
1073
1074 typedef struct _CO_CALL_PARAMETERS {
1075 ULONG Flags;
1076 PCO_CALL_MANAGER_PARAMETERS CallMgrParameters;
1077 PCO_MEDIA_PARAMETERS MediaParameters;
1078 } CO_CALL_PARAMETERS, *PCO_CALL_PARAMETERS;
1079
1080 typedef struct _CO_SAP {
1081 ULONG SapType;
1082 ULONG SapLength;
1083 UCHAR Sap[1];
1084 } CO_SAP, *PCO_SAP;
1085
1086 #if NDIS_LEGACY_DRIVER
1087 typedef struct _NDIS_IPSEC_PACKET_INFO {
1088 __MINGW_EXTENSION union {
1089 struct {
1090 NDIS_HANDLE OffloadHandle;
1091 NDIS_HANDLE NextOffloadHandle;
1092 } Transmit;
1093 struct {
1094 ULONG SA_DELETE_REQ:1;
1095 ULONG CRYPTO_DONE:1;
1096 ULONG NEXT_CRYPTO_DONE:1;
1097 ULONG CryptoStatus;
1098 } Receive;
1099 };
1100 } NDIS_IPSEC_PACKET_INFO, *PNDIS_IPSEC_PACKET_INFO;
1101 #endif
1102
1103 #if (NDIS_SUPPORT_NDIS6 || NDIS60)
1104 typedef struct _NDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO {
1105 __MINGW_EXTENSION union {
1106 struct {
1107 NDIS_HANDLE OffloadHandle;
1108 } Transmit;
1109 struct {
1110 USHORT SaDeleteReq:1;
1111 USHORT CryptoDone:1;
1112 USHORT NextCryptoDone:1;
1113 USHORT Pad:13;
1114 USHORT CryptoStatus;
1115 } Receive;
1116 };
1117 } NDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO, *PNDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO;
1118 #endif
1119
1120 /* NDIS_MAC_FRAGMENT.Errors constants */
1121 #define WAN_ERROR_CRC 0x00000001
1122 #define WAN_ERROR_FRAMING 0x00000002
1123 #define WAN_ERROR_HARDWAREOVERRUN 0x00000004
1124 #define WAN_ERROR_BUFFEROVERRUN 0x00000008
1125 #define WAN_ERROR_TIMEOUT 0x00000010
1126 #define WAN_ERROR_ALIGNMENT 0x00000020
1127
1128 typedef struct _NDIS_MAC_FRAGMENT {
1129 NDIS_HANDLE NdisLinkContext;
1130 ULONG Errors;
1131 } NDIS_MAC_FRAGMENT, *PNDIS_MAC_FRAGMENT;
1132
1133 typedef struct _NDIS_MAC_LINE_DOWN {
1134 NDIS_HANDLE NdisLinkContext;
1135 } NDIS_MAC_LINE_DOWN, *PNDIS_MAC_LINE_DOWN;
1136
1137 typedef struct _NDIS_MAC_LINE_UP {
1138 ULONG LinkSpeed;
1139 NDIS_WAN_QUALITY Quality;
1140 USHORT SendWindow;
1141 NDIS_HANDLE ConnectionWrapperID;
1142 NDIS_HANDLE NdisLinkHandle;
1143 NDIS_HANDLE NdisLinkContext;
1144 } NDIS_MAC_LINE_UP, *PNDIS_MAC_LINE_UP;
1145
1146 typedef struct _NDIS_PACKET_8021Q_INFO {
1147 __MINGW_EXTENSION union {
1148 struct {
1149 UINT32 UserPriority:3;
1150 UINT32 CanonicalFormatId:1;
1151 UINT32 VlanId:12;
1152 UINT32 Reserved:16;
1153 } TagHeader;
1154 PVOID Value;
1155 };
1156 } NDIS_PACKET_8021Q_INFO, *PNDIS_PACKET_8021Q_INFO;
1157
1158 typedef enum _NDIS_PER_PACKET_INFO {
1159 TcpIpChecksumPacketInfo,
1160 IpSecPacketInfo,
1161 TcpLargeSendPacketInfo,
1162 ClassificationHandlePacketInfo,
1163 NdisReserved,
1164 ScatterGatherListPacketInfo,
1165 Ieee8021QInfo,
1166 OriginalPacketInfo,
1167 PacketCancelId,
1168 OriginalNetBufferList,
1169 CachedNetBufferList,
1170 ShortPacketPaddingInfo,
1171 MaxPerPacketInfo
1172 } NDIS_PER_PACKET_INFO, *PNDIS_PER_PACKET_INFO;
1173
1174 #if NDIS_LEGACY_DRIVER
1175
1176 typedef struct _NDIS_PACKET_EXTENSION {
1177 PVOID NdisPacketInfo[MaxPerPacketInfo];
1178 } NDIS_PACKET_EXTENSION, *PNDIS_PACKET_EXTENSION;
1179
1180 typedef enum _NDIS_TASK {
1181 TcpIpChecksumNdisTask,
1182 IpSecNdisTask,
1183 TcpLargeSendNdisTask,
1184 MaxNdisTask
1185 } NDIS_TASK, *PNDIS_TASK;
1186
1187 typedef enum _NDIS_ENCAPSULATION {
1188 UNSPECIFIED_Encapsulation,
1189 NULL_Encapsulation,
1190 IEEE_802_3_Encapsulation,
1191 IEEE_802_5_Encapsulation,
1192 LLC_SNAP_ROUTED_Encapsulation,
1193 LLC_SNAP_BRIDGED_Encapsulation
1194 } NDIS_ENCAPSULATION;
1195
1196 typedef struct _NDIS_ENCAPSULATION_FORMAT {
1197 NDIS_ENCAPSULATION Encapsulation;
1198 struct {
1199 ULONG FixedHeaderSize:1;
1200 ULONG Reserved:31;
1201 } Flags;
1202 ULONG EncapsulationHeaderSize;
1203 } NDIS_ENCAPSULATION_FORMAT, *PNDIS_ENCAPSULATION_FORMAT;
1204
1205 typedef struct _NDIS_TASK_OFFLOAD_HEADER {
1206 ULONG Version;
1207 ULONG Size;
1208 ULONG Reserved;
1209 ULONG OffsetFirstTask;
1210 NDIS_ENCAPSULATION_FORMAT EncapsulationFormat;
1211 } NDIS_TASK_OFFLOAD_HEADER, *PNDIS_TASK_OFFLOAD_HEADER;
1212
1213 typedef struct _NDIS_TASK_OFFLOAD {
1214 ULONG Version;
1215 ULONG Size;
1216 NDIS_TASK Task;
1217 ULONG OffsetNextTask;
1218 ULONG TaskBufferLength;
1219 UCHAR TaskBuffer[1];
1220 } NDIS_TASK_OFFLOAD, *PNDIS_TASK_OFFLOAD;
1221
1222 typedef struct _NDIS_TASK_TCP_IP_CHECKSUM {
1223 struct {
1224 ULONG IpOptionsSupported:1;
1225 ULONG TcpOptionsSupported:1;
1226 ULONG TcpChecksum:1;
1227 ULONG UdpChecksum:1;
1228 ULONG IpChecksum:1;
1229 } V4Transmit;
1230 struct {
1231 ULONG IpOptionsSupported:1;
1232 ULONG TcpOptionsSupported:1;
1233 ULONG TcpChecksum:1;
1234 ULONG UdpChecksum:1;
1235 ULONG IpChecksum:1;
1236 } V4Receive;
1237 struct {
1238 ULONG IpOptionsSupported:1;
1239 ULONG TcpOptionsSupported:1;
1240 ULONG TcpChecksum:1;
1241 ULONG UdpChecksum:1;
1242 } V6Transmit;
1243 struct {
1244 ULONG IpOptionsSupported:1;
1245 ULONG TcpOptionsSupported:1;
1246 ULONG TcpChecksum:1;
1247 ULONG UdpChecksum:1;
1248 } V6Receive;
1249 } NDIS_TASK_TCP_IP_CHECKSUM, *PNDIS_TASK_TCP_IP_CHECKSUM;
1250
1251 #define NDIS_TASK_TCP_LARGE_SEND_V0 0
1252
1253 typedef struct _NDIS_TASK_TCP_LARGE_SEND {
1254 ULONG Version;
1255 ULONG MaxOffLoadSize;
1256 ULONG MinSegmentCount;
1257 BOOLEAN TcpOptions;
1258 BOOLEAN IpOptions;
1259 } NDIS_TASK_TCP_LARGE_SEND, *PNDIS_TASK_TCP_LARGE_SEND;
1260
1261 typedef struct _NDIS_TASK_IPSEC {
1262 struct {
1263 ULONG AH_ESP_COMBINED;
1264 ULONG TRANSPORT_TUNNEL_COMBINED;
1265 ULONG V4_OPTIONS;
1266 ULONG RESERVED;
1267 } Supported;
1268 struct {
1269 ULONG MD5:1;
1270 ULONG SHA_1:1;
1271 ULONG Transport:1;
1272 ULONG Tunnel:1;
1273 ULONG Send:1;
1274 ULONG Receive:1;
1275 } V4AH;
1276 struct {
1277 ULONG DES:1;
1278 ULONG RESERVED:1;
1279 ULONG TRIPLE_DES:1;
1280 ULONG NULL_ESP:1;
1281 ULONG Transport:1;
1282 ULONG Tunnel:1;
1283 ULONG Send:1;
1284 ULONG Receive:1;
1285 } V4ESP;
1286 } NDIS_TASK_IPSEC, *PNDIS_TASK_IPSEC;
1287
1288 #endif /* NDIS_LEGACY_DRIVER */
1289
1290 #define IPSEC_TPT_UDPESP_ENCAPTYPE_IKE 0x00000001
1291 #define IPSEC_TUN_UDPESP_ENCAPTYPE_IKE 0x00000002
1292 #define IPSEC_TPTOVERTUN_UDPESP_ENCAPTYPE_IKE 0x00000004
1293 #define IPSEC_TPT_UDPESP_OVER_PURE_TUN_ENCAPTYPE_IKE 0x00000008
1294 #define IPSEC_TPT_UDPESP_ENCAPTYPE_OTHER 0x00000010
1295 #define IPSEC_TUN_UDPESP_ENCAPTYPE_OTHER 0x00000020
1296 #define IPSEC_TPTOVERTUN_UDPESP_ENCAPTYPE_OTHER 0x00000040
1297 #define IPSEC_TPT_UDPESP_OVER_PURE_TUN_ENCAPTYPE_OTHER 0x00000080
1298
1299 #if NDIS_LEGACY_DRIVER
1300
1301 /*
1302 * PNDIS_PACKET
1303 * NDIS_GET_ORIGINAL_PACKET(
1304 * IN PNDIS_PACKET Packet);
1305 */
1306 #define NDIS_GET_ORIGINAL_PACKET(Packet) \
1307 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo)
1308
1309 /*
1310 * PVOID
1311 * NDIS_GET_PACKET_CANCEL_ID(
1312 * IN PNDIS_PACKET Packet);
1313 */
1314 #define NDIS_GET_PACKET_CANCEL_ID(Packet) \
1315 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId)
1316
1317 /*
1318 * PNDIS_PACKET_EXTENSION
1319 * NDIS_PACKET_EXTENSION_FROM_PACKET(
1320 * IN PNDIS_PACKET Packet);
1321 */
1322 #define NDIS_PACKET_EXTENSION_FROM_PACKET(Packet) \
1323 ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) \
1324 + (Packet)->Private.NdisPacketOobOffset + sizeof(NDIS_PACKET_OOB_DATA)))
1325
1326 /*
1327 * PVOID
1328 * NDIS_PER_PACKET_INFO_FROM_PACKET(
1329 * IN OUT PNDIS_PACKET Packet,
1330 * IN NDIS_PER_PACKET_INFO InfoType);
1331 */
1332 #define NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, InfoType) \
1333 ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) + (Packet)->Private.NdisPacketOobOffset \
1334 + sizeof(NDIS_PACKET_OOB_DATA)))->NdisPacketInfo[(InfoType)]
1335
1336 /*
1337 * VOID
1338 * NDIS_SET_ORIGINAL_PACKET(
1339 * IN OUT PNDIS_PACKET Packet,
1340 * IN PNDIS_PACKET OriginalPacket);
1341 */
1342 #define NDIS_SET_ORIGINAL_PACKET(Packet, OriginalPacket) \
1343 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo) = (OriginalPacket)
1344
1345 /*
1346 * VOID
1347 * NDIS_SET_PACKET_CANCEL_ID(
1348 * IN PNDIS_PACKET Packet
1349 * IN ULONG_PTR CancelId);
1350 */
1351 #define NDIS_SET_PACKET_CANCEL_ID(Packet, CancelId) \
1352 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId) = (CancelId)
1353
1354 #define NdisSetPacketCancelId(_Packet, _CancelId) NDIS_SET_PACKET_CANCEL_ID(_Packet, _CancelId)
1355 #define NdisGetPacketCancelId(_Packet) NDIS_GET_PACKET_CANCEL_ID(_Packet)
1356
1357 #endif /* NDIS_LEGACY_DRIVER */
1358
1359 #if NDIS_SUPPORT_NDIS6
1360 typedef struct _NDIS_GENERIC_OBJECT {
1361 NDIS_OBJECT_HEADER Header;
1362 PVOID Caller;
1363 PVOID CallersCaller;
1364 PDRIVER_OBJECT DriverObject;
1365 } NDIS_GENERIC_OBJECT, *PNDIS_GENERIC_OBJECT;
1366 #endif
1367
1368 /* NDIS_TASK_OFFLOAD_HEADER.Version constants */
1369 #define NDIS_TASK_OFFLOAD_VERSION 1
1370
1371 #define MAX_HASHES 4
1372 #define TRUNCATED_HASH_LEN 12
1373
1374 #define CRYPTO_SUCCESS 0
1375 #define CRYPTO_GENERIC_ERROR 1
1376 #define CRYPTO_TRANSPORT_AH_AUTH_FAILED 2
1377 #define CRYPTO_TRANSPORT_ESP_AUTH_FAILED 3
1378 #define CRYPTO_TUNNEL_AH_AUTH_FAILED 4
1379 #define CRYPTO_TUNNEL_ESP_AUTH_FAILED 5
1380 #define CRYPTO_INVALID_PACKET_SYNTAX 6
1381 #define CRYPTO_INVALID_PROTOCOL 7
1382
1383 typedef struct _NDIS_TCP_IP_CHECKSUM_PACKET_INFO {
1384 __MINGW_EXTENSION union {
1385 struct {
1386 ULONG NdisPacketChecksumV4:1;
1387 ULONG NdisPacketChecksumV6:1;
1388 ULONG NdisPacketTcpChecksum:1;
1389 ULONG NdisPacketUdpChecksum:1;
1390 ULONG NdisPacketIpChecksum:1;
1391 } Transmit;
1392 struct {
1393 ULONG NdisPacketTcpChecksumFailed:1;
1394 ULONG NdisPacketUdpChecksumFailed:1;
1395 ULONG NdisPacketIpChecksumFailed:1;
1396 ULONG NdisPacketTcpChecksumSucceeded:1;
1397 ULONG NdisPacketUdpChecksumSucceeded:1;
1398 ULONG NdisPacketIpChecksumSucceeded:1;
1399 ULONG NdisPacketLoopback:1;
1400 } Receive;
1401 ULONG Value;
1402 };
1403 } NDIS_TCP_IP_CHECKSUM_PACKET_INFO, *PNDIS_TCP_IP_CHECKSUM_PACKET_INFO;
1404
1405 typedef struct _NDIS_WAN_CO_FRAGMENT {
1406 ULONG Errors;
1407 } NDIS_WAN_CO_FRAGMENT, *PNDIS_WAN_CO_FRAGMENT;
1408
1409 typedef struct _NDIS_WAN_FRAGMENT {
1410 UCHAR RemoteAddress[6];
1411 UCHAR LocalAddress[6];
1412 } NDIS_WAN_FRAGMENT, *PNDIS_WAN_FRAGMENT;
1413
1414 typedef struct _WAN_CO_LINKPARAMS {
1415 ULONG TransmitSpeed;
1416 ULONG ReceiveSpeed;
1417 ULONG SendWindow;
1418 } WAN_CO_LINKPARAMS, *PWAN_CO_LINKPARAMS;
1419
1420 typedef struct _NDIS_WAN_GET_STATS {
1421 UCHAR LocalAddress[6];
1422 ULONG BytesSent;
1423 ULONG BytesRcvd;
1424 ULONG FramesSent;
1425 ULONG FramesRcvd;
1426 ULONG CRCErrors;
1427 ULONG TimeoutErrors;
1428 ULONG AlignmentErrors;
1429 ULONG SerialOverrunErrors;
1430 ULONG FramingErrors;
1431 ULONG BufferOverrunErrors;
1432 ULONG BytesTransmittedUncompressed;
1433 ULONG BytesReceivedUncompressed;
1434 ULONG BytesTransmittedCompressed;
1435 ULONG BytesReceivedCompressed;
1436 } NDIS_WAN_GET_STATS, *PNDIS_WAN_GET_STATS;
1437
1438 /* Call Manager */
1439
1440 typedef VOID
1441 (NTAPI *CM_ACTIVATE_VC_COMPLETE_HANDLER)(
1442 IN NDIS_STATUS Status,
1443 IN NDIS_HANDLE CallMgrVcContext,
1444 IN PCO_CALL_PARAMETERS CallParameters);
1445
1446 typedef NDIS_STATUS
1447 (NTAPI *CM_ADD_PARTY_HANDLER)(
1448 IN NDIS_HANDLE CallMgrVcContext,
1449 IN OUT PCO_CALL_PARAMETERS CallParameters,
1450 IN NDIS_HANDLE NdisPartyHandle,
1451 OUT PNDIS_HANDLE CallMgrPartyContext);
1452
1453 typedef NDIS_STATUS
1454 (NTAPI *CM_CLOSE_AF_HANDLER)(
1455 IN NDIS_HANDLE CallMgrAfContext);
1456
1457 typedef NDIS_STATUS
1458 (NTAPI *CM_CLOSE_CALL_HANDLER)(
1459 IN NDIS_HANDLE CallMgrVcContext,
1460 IN NDIS_HANDLE CallMgrPartyContext OPTIONAL,
1461 IN PVOID CloseData OPTIONAL,
1462 IN UINT Size OPTIONAL);
1463
1464 typedef NDIS_STATUS
1465 (NTAPI *CM_DEREG_SAP_HANDLER)(
1466 IN NDIS_HANDLE CallMgrSapContext);
1467
1468 typedef VOID
1469 (NTAPI *CM_DEACTIVATE_VC_COMPLETE_HANDLER)(
1470 IN NDIS_STATUS Status,
1471 IN NDIS_HANDLE CallMgrVcContext);
1472
1473 typedef NDIS_STATUS
1474 (NTAPI *CM_DROP_PARTY_HANDLER)(
1475 IN NDIS_HANDLE CallMgrPartyContext,
1476 IN PVOID CloseData OPTIONAL,
1477 IN UINT Size OPTIONAL);
1478
1479 typedef VOID
1480 (NTAPI *CM_INCOMING_CALL_COMPLETE_HANDLER)(
1481 IN NDIS_STATUS Status,
1482 IN NDIS_HANDLE CallMgrVcContext,
1483 IN PCO_CALL_PARAMETERS CallParameters);
1484
1485 typedef NDIS_STATUS
1486 (NTAPI *CM_MAKE_CALL_HANDLER)(
1487 IN NDIS_HANDLE CallMgrVcContext,
1488 IN OUT PCO_CALL_PARAMETERS CallParameters,
1489 IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
1490 OUT PNDIS_HANDLE CallMgrPartyContext OPTIONAL);
1491
1492 typedef NDIS_STATUS
1493 (NTAPI *CM_MODIFY_CALL_QOS_HANDLER)(
1494 IN NDIS_HANDLE CallMgrVcContext,
1495 IN PCO_CALL_PARAMETERS CallParameters);
1496
1497 typedef NDIS_STATUS
1498 (NTAPI *CM_OPEN_AF_HANDLER)(
1499 IN NDIS_HANDLE CallMgrBindingContext,
1500 IN PCO_ADDRESS_FAMILY AddressFamily,
1501 IN NDIS_HANDLE NdisAfHandle,
1502 OUT PNDIS_HANDLE CallMgrAfContext);
1503
1504 typedef NDIS_STATUS
1505 (NTAPI *CM_REG_SAP_HANDLER)(
1506 IN NDIS_HANDLE CallMgrAfContext,
1507 IN PCO_SAP Sap,
1508 IN NDIS_HANDLE NdisSapHandle,
1509 OUT PNDIS_HANDLE CallMgrSapContext);
1510
1511 typedef NDIS_STATUS
1512 (NTAPI *CO_CREATE_VC_HANDLER)(
1513 IN NDIS_HANDLE ProtocolAfContext,
1514 IN NDIS_HANDLE NdisVcHandle,
1515 OUT PNDIS_HANDLE ProtocolVcContext);
1516
1517 typedef NDIS_STATUS
1518 (NTAPI *CO_DELETE_VC_HANDLER)(
1519 IN NDIS_HANDLE ProtocolVcContext);
1520
1521 #define PROTOCOL_RESERVED_SIZE_IN_PACKET (4 * sizeof(PVOID))
1522
1523 /* Prototypes for NDIS 5.0 protocol characteristics */
1524
1525 _IRQL_requires_(PASSIVE_LEVEL)
1526 typedef VOID
1527 (NTAPI *CO_SEND_COMPLETE_HANDLER)(
1528 _In_ NDIS_STATUS Status,
1529 _In_ NDIS_HANDLE ProtocolVcContext,
1530 _In_ PNDIS_PACKET Packet);
1531
1532 _IRQL_requires_max_(DISPATCH_LEVEL)
1533 typedef VOID
1534 (NTAPI *CO_STATUS_HANDLER)(
1535 _In_ NDIS_HANDLE ProtocolBindingContext,
1536 _In_opt_ NDIS_HANDLE ProtocolVcContext,
1537 _In_ NDIS_STATUS GeneralStatus,
1538 _In_ PVOID StatusBuffer,
1539 _In_ UINT StatusBufferSize);
1540
1541 _IRQL_requires_max_(DISPATCH_LEVEL)
1542 typedef UINT
1543 (NTAPI *CO_RECEIVE_PACKET_HANDLER)(
1544 _In_ NDIS_HANDLE ProtocolBindingContext,
1545 _In_ NDIS_HANDLE ProtocolVcContext,
1546 _In_ PNDIS_PACKET Packet);
1547
1548 _IRQL_requires_max_(DISPATCH_LEVEL)
1549 typedef NDIS_STATUS
1550 (NTAPI *CO_REQUEST_HANDLER)(
1551 _In_ NDIS_HANDLE ProtocolAfContext,
1552 _In_opt_ NDIS_HANDLE ProtocolVcContext,
1553 _In_opt_ NDIS_HANDLE ProtocolPartyContext,
1554 _Inout_ PNDIS_REQUEST NdisRequest);
1555
1556 _IRQL_requires_max_(DISPATCH_LEVEL)
1557 typedef VOID
1558 (NTAPI *CO_REQUEST_COMPLETE_HANDLER)(
1559 _In_ NDIS_STATUS Status,
1560 _In_opt_ NDIS_HANDLE ProtocolAfContext,
1561 _In_opt_ NDIS_HANDLE ProtocolVcContext,
1562 _In_opt_ NDIS_HANDLE ProtocolPartyContext,
1563 _In_ PNDIS_REQUEST NdisRequest);
1564
1565 typedef struct _NDIS_CALL_MANAGER_CHARACTERISTICS {
1566 UCHAR MajorVersion;
1567 UCHAR MinorVersion;
1568 USHORT Filler;
1569 UINT Reserved;
1570 CO_CREATE_VC_HANDLER CmCreateVcHandler;
1571 CO_DELETE_VC_HANDLER CmDeleteVcHandler;
1572 CM_OPEN_AF_HANDLER CmOpenAfHandler;
1573 CM_CLOSE_AF_HANDLER CmCloseAfHandler;
1574 CM_REG_SAP_HANDLER CmRegisterSapHandler;
1575 CM_DEREG_SAP_HANDLER CmDeregisterSapHandler;
1576 CM_MAKE_CALL_HANDLER CmMakeCallHandler;
1577 CM_CLOSE_CALL_HANDLER CmCloseCallHandler;
1578 CM_INCOMING_CALL_COMPLETE_HANDLER CmIncomingCallCompleteHandler;
1579 CM_ADD_PARTY_HANDLER CmAddPartyHandler;
1580 CM_DROP_PARTY_HANDLER CmDropPartyHandler;
1581 CM_ACTIVATE_VC_COMPLETE_HANDLER CmActivateVcCompleteHandler;
1582 CM_DEACTIVATE_VC_COMPLETE_HANDLER CmDeactivateVcCompleteHandler;
1583 CM_MODIFY_CALL_QOS_HANDLER CmModifyCallQoSHandler;
1584 CO_REQUEST_HANDLER CmRequestHandler;
1585 CO_REQUEST_COMPLETE_HANDLER CmRequestCompleteHandler;
1586 } NDIS_CALL_MANAGER_CHARACTERISTICS, *PNDIS_CALL_MANAGER_CHARACTERISTICS;
1587
1588
1589
1590 /* Call Manager clients */
1591
1592 typedef VOID (*CL_OPEN_AF_COMPLETE_HANDLER)(
1593 IN NDIS_STATUS Status,
1594 IN NDIS_HANDLE ProtocolAfContext,
1595 IN NDIS_HANDLE NdisAfHandle);
1596
1597 typedef VOID
1598 (NTAPI *CL_CLOSE_AF_COMPLETE_HANDLER)(
1599 IN NDIS_STATUS Status,
1600 IN NDIS_HANDLE ProtocolAfContext);
1601
1602 typedef VOID
1603 (NTAPI *CL_REG_SAP_COMPLETE_HANDLER)(
1604 IN NDIS_STATUS Status,
1605 IN NDIS_HANDLE ProtocolSapContext,
1606 IN PCO_SAP Sap,
1607 IN NDIS_HANDLE NdisSapHandle);
1608
1609 typedef VOID
1610 (NTAPI *CL_DEREG_SAP_COMPLETE_HANDLER)(
1611 IN NDIS_STATUS Status,
1612 IN NDIS_HANDLE ProtocolSapContext);
1613
1614 typedef VOID
1615 (NTAPI *CL_MAKE_CALL_COMPLETE_HANDLER)(
1616 IN NDIS_STATUS Status,
1617 IN NDIS_HANDLE ProtocolVcContext,
1618 IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
1619 IN PCO_CALL_PARAMETERS CallParameters);
1620
1621 typedef VOID
1622 (NTAPI *CL_MODIFY_CALL_QOS_COMPLETE_HANDLER)(
1623 IN NDIS_STATUS Status,
1624 IN NDIS_HANDLE ProtocolVcContext,
1625 IN PCO_CALL_PARAMETERS CallParameters);
1626
1627 typedef VOID
1628 (NTAPI *CL_CLOSE_CALL_COMPLETE_HANDLER)(
1629 IN NDIS_STATUS Status,
1630 IN NDIS_HANDLE ProtocolVcContext,
1631 IN NDIS_HANDLE ProtocolPartyContext OPTIONAL);
1632
1633 typedef VOID
1634 (NTAPI *CL_ADD_PARTY_COMPLETE_HANDLER)(
1635 IN NDIS_STATUS Status,
1636 IN NDIS_HANDLE ProtocolPartyContext,
1637 IN NDIS_HANDLE NdisPartyHandle,
1638 IN PCO_CALL_PARAMETERS CallParameters);
1639
1640 typedef VOID
1641 (NTAPI *CL_DROP_PARTY_COMPLETE_HANDLER)(
1642 IN NDIS_STATUS Status,
1643 IN NDIS_HANDLE ProtocolPartyContext);
1644
1645 typedef NDIS_STATUS
1646 (NTAPI *CL_INCOMING_CALL_HANDLER)(
1647 IN NDIS_HANDLE ProtocolSapContext,
1648 IN NDIS_HANDLE ProtocolVcContext,
1649 IN OUT PCO_CALL_PARAMETERS CallParameters);
1650
1651 typedef VOID
1652 (NTAPI *CL_INCOMING_CALL_QOS_CHANGE_HANDLER)(
1653 IN NDIS_HANDLE ProtocolVcContext,
1654 IN PCO_CALL_PARAMETERS CallParameters);
1655
1656 typedef VOID
1657 (NTAPI *CL_INCOMING_CLOSE_CALL_HANDLER)(
1658 IN NDIS_STATUS CloseStatus,
1659 IN NDIS_HANDLE ProtocolVcContext,
1660 IN PVOID CloseData OPTIONAL,
1661 IN UINT Size OPTIONAL);
1662
1663 typedef VOID
1664 (NTAPI *CL_INCOMING_DROP_PARTY_HANDLER)(
1665 IN NDIS_STATUS DropStatus,
1666 IN NDIS_HANDLE ProtocolPartyContext,
1667 IN PVOID CloseData OPTIONAL,
1668 IN UINT Size OPTIONAL);
1669
1670 typedef VOID
1671 (NTAPI *CL_CALL_CONNECTED_HANDLER)(
1672 IN NDIS_HANDLE ProtocolVcContext);
1673
1674
1675 typedef struct _NDIS_CLIENT_CHARACTERISTICS {
1676 UCHAR MajorVersion;
1677 UCHAR MinorVersion;
1678 USHORT Filler;
1679 UINT Reserved;
1680 CO_CREATE_VC_HANDLER ClCreateVcHandler;
1681 CO_DELETE_VC_HANDLER ClDeleteVcHandler;
1682 CO_REQUEST_HANDLER ClRequestHandler;
1683 CO_REQUEST_COMPLETE_HANDLER ClRequestCompleteHandler;
1684 CL_OPEN_AF_COMPLETE_HANDLER ClOpenAfCompleteHandler;
1685 CL_CLOSE_AF_COMPLETE_HANDLER ClCloseAfCompleteHandler;
1686 CL_REG_SAP_COMPLETE_HANDLER ClRegisterSapCompleteHandler;
1687 CL_DEREG_SAP_COMPLETE_HANDLER ClDeregisterSapCompleteHandler;
1688 CL_MAKE_CALL_COMPLETE_HANDLER ClMakeCallCompleteHandler;
1689 CL_MODIFY_CALL_QOS_COMPLETE_HANDLER ClModifyCallQoSCompleteHandler;
1690 CL_CLOSE_CALL_COMPLETE_HANDLER ClCloseCallCompleteHandler;
1691 CL_ADD_PARTY_COMPLETE_HANDLER ClAddPartyCompleteHandler;
1692 CL_DROP_PARTY_COMPLETE_HANDLER ClDropPartyCompleteHandler;
1693 CL_INCOMING_CALL_HANDLER ClIncomingCallHandler;
1694 CL_INCOMING_CALL_QOS_CHANGE_HANDLER ClIncomingCallQoSChangeHandler;
1695 CL_INCOMING_CLOSE_CALL_HANDLER ClIncomingCloseCallHandler;
1696 CL_INCOMING_DROP_PARTY_HANDLER ClIncomingDropPartyHandler;
1697 CL_CALL_CONNECTED_HANDLER ClCallConnectedHandler;
1698 } NDIS_CLIENT_CHARACTERISTICS, *PNDIS_CLIENT_CHARACTERISTICS;
1699
1700
1701 /* NDIS protocol structures */
1702
1703 /* Prototypes for NDIS 3.0 protocol characteristics */
1704
1705 typedef VOID
1706 (NTAPI *OPEN_ADAPTER_COMPLETE_HANDLER)(
1707 _In_ NDIS_HANDLE ProtocolBindingContext,
1708 _In_ NDIS_STATUS Status,
1709 _In_ NDIS_STATUS OpenErrorStatus);
1710
1711 typedef VOID
1712 (NTAPI *CLOSE_ADAPTER_COMPLETE_HANDLER)(
1713 _In_ NDIS_HANDLE ProtocolBindingContext,
1714 _In_ NDIS_STATUS Status);
1715
1716 typedef VOID
1717 (NTAPI *RESET_COMPLETE_HANDLER)(
1718 _In_ NDIS_HANDLE ProtocolBindingContext,
1719 _In_ NDIS_STATUS Status);
1720
1721 typedef VOID
1722 (NTAPI *REQUEST_COMPLETE_HANDLER)(
1723 _In_ NDIS_HANDLE ProtocolBindingContext,
1724 _In_ PNDIS_REQUEST NdisRequest,
1725 _In_ NDIS_STATUS Status);
1726
1727 typedef VOID
1728 (NTAPI *STATUS_HANDLER)(
1729 _In_ NDIS_HANDLE ProtocolBindingContext,
1730 _In_ NDIS_STATUS GeneralStatus,
1731 _In_ PVOID StatusBuffer,
1732 _In_ UINT StatusBufferSize);
1733
1734 typedef VOID
1735 (NTAPI *STATUS_COMPLETE_HANDLER)(
1736 _In_ NDIS_HANDLE ProtocolBindingContext);
1737
1738 typedef VOID
1739 (NTAPI *SEND_COMPLETE_HANDLER)(
1740 _In_ NDIS_HANDLE ProtocolBindingContext,
1741 _In_ PNDIS_PACKET Packet,
1742 _In_ NDIS_STATUS Status);
1743
1744 typedef VOID
1745 (NTAPI *WAN_SEND_COMPLETE_HANDLER)(
1746 _In_ NDIS_HANDLE ProtocolBindingContext,
1747 _In_ PNDIS_WAN_PACKET Packet,
1748 _In_ NDIS_STATUS Status);
1749
1750 typedef VOID
1751 (NTAPI *TRANSFER_DATA_COMPLETE_HANDLER)(
1752 _In_ NDIS_HANDLE ProtocolBindingContext,
1753 _In_ PNDIS_PACKET Packet,
1754 _In_ NDIS_STATUS Status,
1755 _In_ UINT BytesTransferred);
1756
1757 typedef VOID
1758 (NTAPI *WAN_TRANSFER_DATA_COMPLETE_HANDLER)(
1759 VOID);
1760
1761 typedef NDIS_STATUS
1762 (NTAPI *RECEIVE_HANDLER)(
1763 _In_ NDIS_HANDLE ProtocolBindingContext,
1764 _In_ NDIS_HANDLE MacReceiveContext,
1765 _In_ PVOID HeaderBuffer,
1766 _In_ UINT HeaderBufferSize,
1767 _In_ PVOID LookAheadBuffer,
1768 _In_ UINT LookaheadBufferSize,
1769 _In_ UINT PacketSize);
1770
1771 typedef NDIS_STATUS
1772 (NTAPI *WAN_RECEIVE_HANDLER)(
1773 _In_ NDIS_HANDLE NdisLinkHandle,
1774 _In_ PUCHAR Packet,
1775 _In_ ULONG PacketSize);
1776
1777 typedef VOID
1778 (NTAPI *RECEIVE_COMPLETE_HANDLER)(
1779 _In_ NDIS_HANDLE ProtocolBindingContext);
1780
1781 /* Protocol characteristics for NDIS 3.0 protocols */
1782
1783 #define NDIS30_PROTOCOL_CHARACTERISTICS_S \
1784 UCHAR MajorNdisVersion; \
1785 UCHAR MinorNdisVersion; \
1786 USHORT Filler; \
1787 _ANONYMOUS_UNION union { \
1788 UINT Reserved; \
1789 UINT Flags; \
1790 } DUMMYUNIONNAME; \
1791 OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler; \
1792 CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler; \
1793 _ANONYMOUS_UNION union { \
1794 SEND_COMPLETE_HANDLER SendCompleteHandler; \
1795 WAN_SEND_COMPLETE_HANDLER WanSendCompleteHandler; \
1796 } DUMMYUNIONNAME2; \
1797 _ANONYMOUS_UNION union { \
1798 TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler; \
1799 WAN_TRANSFER_DATA_COMPLETE_HANDLER WanTransferDataCompleteHandler; \
1800 } DUMMYUNIONNAME3; \
1801 RESET_COMPLETE_HANDLER ResetCompleteHandler; \
1802 REQUEST_COMPLETE_HANDLER RequestCompleteHandler; \
1803 _ANONYMOUS_UNION union { \
1804 RECEIVE_HANDLER ReceiveHandler; \
1805 WAN_RECEIVE_HANDLER WanReceiveHandler; \
1806 } DUMMYUNIONNAME4; \
1807 RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler; \
1808 STATUS_HANDLER StatusHandler; \
1809 STATUS_COMPLETE_HANDLER StatusCompleteHandler; \
1810 NDIS_STRING Name;
1811
1812 typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS {
1813 NDIS30_PROTOCOL_CHARACTERISTICS_S
1814 } NDIS30_PROTOCOL_CHARACTERISTICS, *PNDIS30_PROTOCOL_CHARACTERISTICS;
1815
1816
1817 /* Prototypes for NDIS 4.0 protocol characteristics */
1818
1819 typedef INT
1820 (NTAPI *RECEIVE_PACKET_HANDLER)(
1821 IN NDIS_HANDLE ProtocolBindingContext,
1822 IN PNDIS_PACKET Packet);
1823
1824 typedef VOID
1825 (NTAPI *BIND_HANDLER)(
1826 OUT PNDIS_STATUS Status,
1827 IN NDIS_HANDLE BindContext,
1828 IN PNDIS_STRING DeviceName,
1829 IN PVOID SystemSpecific1,
1830 IN PVOID SystemSpecific2);
1831
1832 typedef VOID
1833 (NTAPI *UNBIND_HANDLER)(
1834 OUT PNDIS_STATUS Status,
1835 IN NDIS_HANDLE ProtocolBindingContext,
1836 IN NDIS_HANDLE UnbindContext);
1837
1838 typedef NDIS_STATUS
1839 (NTAPI *PNP_EVENT_HANDLER)(
1840 IN NDIS_HANDLE ProtocolBindingContext,
1841 IN PNET_PNP_EVENT NetPnPEvent);
1842
1843 typedef VOID
1844 (NTAPI *UNLOAD_PROTOCOL_HANDLER)(
1845 VOID);
1846
1847 /* Protocol characteristics for NDIS 4.0 protocols */
1848
1849 typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS {
1850 UCHAR MajorNdisVersion;
1851 UCHAR MinorNdisVersion;
1852 USHORT Filler;
1853 __MINGW_EXTENSION union {
1854 UINT Reserved;
1855 UINT Flags;
1856 };
1857 OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler;
1858 CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler;
1859 __MINGW_EXTENSION union {
1860 SEND_COMPLETE_HANDLER SendCompleteHandler;
1861 WAN_SEND_COMPLETE_HANDLER WanSendCompleteHandler;
1862 };
1863 __MINGW_EXTENSION union {
1864 TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler;
1865 WAN_TRANSFER_DATA_COMPLETE_HANDLER WanTransferDataCompleteHandler;
1866 };
1867 RESET_COMPLETE_HANDLER ResetCompleteHandler;
1868 REQUEST_COMPLETE_HANDLER RequestCompleteHandler;
1869 __MINGW_EXTENSION union {
1870 RECEIVE_HANDLER ReceiveHandler;
1871 WAN_RECEIVE_HANDLER WanReceiveHandler;
1872 };
1873 RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler;
1874 STATUS_HANDLER StatusHandler;
1875 STATUS_COMPLETE_HANDLER StatusCompleteHandler;
1876 NDIS_STRING Name;
1877 RECEIVE_PACKET_HANDLER ReceivePacketHandler;
1878 BIND_HANDLER BindAdapterHandler;
1879 UNBIND_HANDLER UnbindAdapterHandler;
1880 PNP_EVENT_HANDLER PnPEventHandler;
1881 UNLOAD_PROTOCOL_HANDLER UnloadHandler;
1882 } NDIS40_PROTOCOL_CHARACTERISTICS;
1883
1884 typedef VOID
1885 (NTAPI PROTCOL_CO_AF_REGISTER_NOTIFY)(
1886 IN NDIS_HANDLE ProtocolBindingContext,
1887 IN PCO_ADDRESS_FAMILY AddressFamily);
1888 typedef PROTCOL_CO_AF_REGISTER_NOTIFY *CO_AF_REGISTER_NOTIFY_HANDLER;
1889
1890 #if NDIS_LEGACY_PROTOCOL
1891
1892 typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS {
1893 #ifdef __cplusplus
1894 NDIS40_PROTOCOL_CHARACTERISTICS Ndis40Chars;
1895 #else
1896 NDIS40_PROTOCOL_CHARACTERISTICS;
1897 #endif
1898 PVOID ReservedHandlers[4];
1899 CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler;
1900 CO_STATUS_HANDLER CoStatusHandler;
1901 CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler;
1902 CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
1903 } NDIS50_PROTOCOL_CHARACTERISTICS;
1904
1905 #if (defined(NDIS50) || defined(NDIS51))
1906 typedef NDIS50_PROTOCOL_CHARACTERISTICS NDIS_PROTOCOL_CHARACTERISTICS;
1907 #else
1908 typedef NDIS40_PROTOCOL_CHARACTERISTICS NDIS_PROTOCOL_CHARACTERISTICS;
1909 #endif
1910
1911 typedef NDIS_PROTOCOL_CHARACTERISTICS *PNDIS_PROTOCOL_CHARACTERISTICS;
1912
1913 #endif /* NDIS_LEGACY_PROTOCOL */
1914
1915 /* Prototypes for NDIS_MINIPORT_CHARACTERISTICS */
1916
1917 typedef BOOLEAN
1918 (NTAPI *W_CHECK_FOR_HANG_HANDLER)(
1919 _In_ NDIS_HANDLE MiniportAdapterContext);
1920
1921 typedef VOID
1922 (NTAPI *W_DISABLE_INTERRUPT_HANDLER)(
1923 _In_ NDIS_HANDLE MiniportAdapterContext);
1924
1925 typedef VOID
1926 (NTAPI *W_ENABLE_INTERRUPT_HANDLER)(
1927 _In_ NDIS_HANDLE MiniportAdapterContext);
1928
1929 typedef VOID
1930 (NTAPI *W_HALT_HANDLER)(
1931 _In_ NDIS_HANDLE MiniportAdapterContext);
1932
1933 typedef VOID
1934 (NTAPI *W_HANDLE_INTERRUPT_HANDLER)(
1935 _In_ NDIS_HANDLE MiniportAdapterContext);
1936
1937 typedef NDIS_STATUS
1938 (NTAPI *W_INITIALIZE_HANDLER)(
1939 _Out_ PNDIS_STATUS OpenErrorStatus,
1940 _Out_ PUINT SelectedMediumIndex,
1941 _In_ PNDIS_MEDIUM MediumArray,
1942 _In_ UINT MediumArraySize,
1943 _In_ NDIS_HANDLE MiniportAdapterContext,
1944 _In_ NDIS_HANDLE WrapperConfigurationContext);
1945
1946 typedef VOID
1947 (NTAPI *W_ISR_HANDLER)(
1948 _Out_ PBOOLEAN InterruptRecognized,
1949 _Out_ PBOOLEAN QueueMiniportHandleInterrupt,
1950 _In_ NDIS_HANDLE MiniportAdapterContext);
1951
1952 typedef NDIS_STATUS
1953 (NTAPI *W_QUERY_INFORMATION_HANDLER)(
1954 _In_ NDIS_HANDLE MiniportAdapterContext,
1955 _In_ NDIS_OID Oid,
1956 _In_ PVOID InformationBuffer,
1957 _In_ ULONG InformationBufferLength,
1958 _Out_ PULONG BytesWritten,
1959 _Out_ PULONG BytesNeeded);
1960
1961 typedef NDIS_STATUS
1962 (NTAPI *W_RECONFIGURE_HANDLER)(
1963 _Out_ PNDIS_STATUS OpenErrorStatus,
1964 _In_ NDIS_HANDLE MiniportAdapterContext,
1965 _In_ NDIS_HANDLE WrapperConfigurationContext);
1966
1967 typedef NDIS_STATUS
1968 (NTAPI *W_RESET_HANDLER)(
1969 _Out_ PBOOLEAN AddressingReset,
1970 _In_ NDIS_HANDLE MiniportAdapterContext);
1971
1972 typedef NDIS_STATUS
1973 (NTAPI *W_SEND_HANDLER)(
1974 _In_ NDIS_HANDLE MiniportAdapterContext,
1975 _In_ PNDIS_PACKET Packet,
1976 _In_ UINT Flags);
1977
1978 typedef NDIS_STATUS
1979 (NTAPI *WM_SEND_HANDLER)(
1980 _In_ NDIS_HANDLE MiniportAdapterContext,
1981 _In_ NDIS_HANDLE NdisLinkHandle,
1982 _In_ PNDIS_WAN_PACKET Packet);
1983
1984 typedef NDIS_STATUS
1985 (NTAPI *W_SET_INFORMATION_HANDLER)(
1986 _In_ NDIS_HANDLE MiniportAdapterContext,
1987 _In_ NDIS_OID Oid,
1988 _In_ PVOID InformationBuffer,
1989 _In_ ULONG InformationBufferLength,
1990 _Out_ PULONG BytesRead,
1991 _Out_ PULONG BytesNeeded);
1992
1993 typedef NDIS_STATUS
1994 (NTAPI *W_TRANSFER_DATA_HANDLER)(
1995 _Out_ PNDIS_PACKET Packet,
1996 _Out_ PUINT BytesTransferred,
1997 _In_ NDIS_HANDLE MiniportAdapterContext,
1998 _In_ NDIS_HANDLE MiniportReceiveContext,
1999 _In_ UINT ByteOffset,
2000 _In_ UINT BytesToTransfer);
2001
2002 typedef NDIS_STATUS
2003 (NTAPI *WM_TRANSFER_DATA_HANDLER)(VOID);
2004
2005 typedef VOID
2006 (NTAPI *ADAPTER_SHUTDOWN_HANDLER)(
2007 _In_ PVOID ShutdownContext);
2008
2009 typedef VOID
2010 (NTAPI *W_RETURN_PACKET_HANDLER)(
2011 _In_ NDIS_HANDLE MiniportAdapterContext,
2012 _In_ PNDIS_PACKET Packet);
2013
2014 typedef VOID
2015 (NTAPI *W_SEND_PACKETS_HANDLER)(
2016 _In_ NDIS_HANDLE MiniportAdapterContext,
2017 _In_ PPNDIS_PACKET PacketArray,
2018 _In_ UINT NumberOfPackets);
2019
2020 typedef VOID
2021 (NTAPI *W_ALLOCATE_COMPLETE_HANDLER)(
2022 _In_ NDIS_HANDLE MiniportAdapterContext,
2023 _In_ PVOID VirtualAddress,
2024 _In_ PNDIS_PHYSICAL_ADDRESS PhysicalAddress,
2025 _In_ ULONG Length,
2026 _In_ PVOID Context);
2027
2028 /* NDIS structures available only to miniport drivers */
2029
2030 #define NDIS30_MINIPORT_CHARACTERISTICS_S \
2031 UCHAR MajorNdisVersion; \
2032 UCHAR MinorNdisVersion; \
2033 UINT Reserved; \
2034 W_CHECK_FOR_HANG_HANDLER CheckForHangHandler; \
2035 W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler; \
2036 W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler; \
2037 W_HALT_HANDLER HaltHandler; \
2038 W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler; \
2039 W_INITIALIZE_HANDLER InitializeHandler; \
2040 W_ISR_HANDLER ISRHandler; \
2041 W_QUERY_INFORMATION_HANDLER QueryInformationHandler; \
2042 W_RECONFIGURE_HANDLER ReconfigureHandler; \
2043 W_RESET_HANDLER ResetHandler; \
2044 W_SEND_HANDLER SendHandler; \
2045 W_SET_INFORMATION_HANDLER SetInformationHandler; \
2046 W_TRANSFER_DATA_HANDLER TransferDataHandler;
2047
2048 typedef struct _NDIS30_MINIPORT_CHARACTERISTICS {
2049 NDIS30_MINIPORT_CHARACTERISTICS_S
2050 } NDIS30_MINIPORT_CHARACTERISTICS, *PSNDIS30_MINIPORT_CHARACTERISTICS;
2051
2052 #ifdef __cplusplus
2053
2054 #define NDIS40_MINIPORT_CHARACTERISTICS_S \
2055 NDIS30_MINIPORT_CHARACTERISTICS Ndis30Chars; \
2056 W_RETURN_PACKET_HANDLER ReturnPacketHandler; \
2057 W_SEND_PACKETS_HANDLER SendPacketsHandler; \
2058 W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
2059
2060 #else /* !__cplusplus */
2061
2062 #define NDIS40_MINIPORT_CHARACTERISTICS_S \
2063 NDIS30_MINIPORT_CHARACTERISTICS_S \
2064 W_RETURN_PACKET_HANDLER ReturnPacketHandler; \
2065 W_SEND_PACKETS_HANDLER SendPacketsHandler; \
2066 W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
2067
2068 #endif /* !__cplusplus */
2069
2070 typedef struct _NDIS40_MINIPORT_CHARACTERISTICS {
2071 NDIS40_MINIPORT_CHARACTERISTICS_S
2072 } NDIS40_MINIPORT_CHARACTERISTICS, *PNDIS40_MINIPORT_CHARACTERISTICS;
2073
2074 /* Extensions for NDIS 5.0 miniports */
2075
2076 _IRQL_requires_max_(DISPATCH_LEVEL)
2077 _Function_class_(MINIPORT_CO_CREATE_VC)
2078 typedef NDIS_STATUS
2079 (NTAPI MINIPORT_CO_CREATE_VC)(
2080 _In_ NDIS_HANDLE MiniportAdapterContext,
2081 _In_ NDIS_HANDLE NdisVcHandle,
2082 _Out_ PNDIS_HANDLE MiniportVcContext);
2083 typedef MINIPORT_CO_CREATE_VC *W_CO_CREATE_VC_HANDLER;
2084
2085 _IRQL_requires_max_(DISPATCH_LEVEL)
2086 _Function_class_(MINIPORT_CO_DELETE_VC)
2087 typedef NDIS_STATUS
2088 (NTAPI MINIPORT_CO_DELETE_VC)(
2089 _In_ NDIS_HANDLE MiniportVcContext);
2090 typedef MINIPORT_CO_DELETE_VC *W_CO_DELETE_VC_HANDLER;
2091
2092 _IRQL_requires_max_(DISPATCH_LEVEL)
2093 _Function_class_(MINIPORT_CO_ACTIVATE_VC)
2094 typedef NDIS_STATUS
2095 (NTAPI MINIPORT_CO_ACTIVATE_VC)(
2096 _In_ NDIS_HANDLE MiniportVcContext,
2097 _Inout_ PCO_CALL_PARAMETERS CallParameters);
2098 typedef MINIPORT_CO_ACTIVATE_VC *W_CO_ACTIVATE_VC_HANDLER;
2099
2100 _IRQL_requires_max_(DISPATCH_LEVEL)
2101 _Function_class_(MINIPORT_CO_DEACTIVATE_VC)
2102 typedef NDIS_STATUS
2103 (NTAPI MINIPORT_CO_DEACTIVATE_VC)(
2104 _In_ NDIS_HANDLE MiniportVcContext);
2105 typedef MINIPORT_CO_DEACTIVATE_VC *W_CO_DEACTIVATE_VC_HANDLER;
2106
2107 typedef VOID
2108 (NTAPI *W_CO_SEND_PACKETS_HANDLER)(
2109 _In_ NDIS_HANDLE MiniportVcContext,
2110 _In_ PPNDIS_PACKET PacketArray,
2111 _In_ UINT NumberOfPackets);
2112
2113 typedef NDIS_STATUS
2114 (NTAPI *W_CO_REQUEST_HANDLER)(
2115 _In_ NDIS_HANDLE MiniportAdapterContext,
2116 _In_opt_ NDIS_HANDLE MiniportVcContext,
2117 _Inout_ PNDIS_REQUEST NdisRequest);
2118
2119 #ifdef __cplusplus
2120
2121 #define NDIS50_MINIPORT_CHARACTERISTICS_S \
2122 NDIS40_MINIPORT_CHARACTERISTICS Ndis40Chars; \
2123 W_CO_CREATE_VC_HANDLER CoCreateVcHandler; \
2124 W_CO_DELETE_VC_HANDLER CoDeleteVcHandler; \
2125 W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler; \
2126 W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler; \
2127 W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler; \
2128 W_CO_REQUEST_HANDLER CoRequestHandler;
2129
2130 #else /* !__cplusplus */
2131
2132 #define NDIS50_MINIPORT_CHARACTERISTICS_S \
2133 NDIS40_MINIPORT_CHARACTERISTICS_S \
2134 W_CO_CREATE_VC_HANDLER CoCreateVcHandler; \
2135 W_CO_DELETE_VC_HANDLER CoDeleteVcHandler; \
2136 W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler; \
2137 W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler; \
2138 W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler; \
2139 W_CO_REQUEST_HANDLER CoRequestHandler;
2140
2141 #endif /* !__cplusplus */
2142
2143 typedef struct _NDIS50_MINIPORT_CHARACTERISTICS {
2144 NDIS50_MINIPORT_CHARACTERISTICS_S
2145 } NDIS50_MINIPORT_CHARACTERISTICS, *PSNDIS50_MINIPORT_CHARACTERISTICS;
2146
2147 /* Extensions for NDIS 5.1 miniports */
2148
2149 typedef VOID
2150 (NTAPI *W_CANCEL_SEND_PACKETS_HANDLER)(
2151 _In_ NDIS_HANDLE MiniportAdapterContext,
2152 _In_ PVOID CancelId);
2153
2154 typedef VOID
2155 (NTAPI *W_PNP_EVENT_NOTIFY_HANDLER)(
2156 _In_ NDIS_HANDLE MiniportAdapterContext,
2157 _In_ NDIS_DEVICE_PNP_EVENT PnPEvent,
2158 _In_ PVOID InformationBuffer,
2159 _In_ ULONG InformationBufferLength);
2160
2161 typedef VOID
2162 (NTAPI *W_MINIPORT_SHUTDOWN_HANDLER)(
2163 _In_ PVOID ShutdownContext);
2164
2165 #ifdef __cplusplus
2166
2167 #define NDIS51_MINIPORT_CHARACTERISTICS_S \
2168 NDIS50_MINIPORT_CHARACTERISTICS Ndis50Chars; \
2169 W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler; \
2170 W_PNP_EVENT_NOTIFY_HANDLER PnPEventNotifyHandler; \
2171 W_MINIPORT_SHUTDOWN_HANDLER AdapterShutdownHandler;
2172
2173 #else
2174
2175 #define NDIS51_MINIPORT_CHARACTERISTICS_S \
2176 NDIS50_MINIPORT_CHARACTERISTICS_S \
2177 W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler; \
2178 W_PNP_EVENT_NOTIFY_HANDLER PnPEventNotifyHandler; \
2179 W_MINIPORT_SHUTDOWN_HANDLER AdapterShutdownHandler;
2180
2181 #endif
2182
2183 typedef struct _NDIS51_MINIPORT_CHARACTERISTICS {
2184 NDIS51_MINIPORT_CHARACTERISTICS_S
2185 } NDIS51_MINIPORT_CHARACTERISTICS, *PSNDIS51_MINIPORT_CHARACTERISTICS;
2186
2187 #if defined(NDIS51_MINIPORT)
2188 typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
2189 NDIS51_MINIPORT_CHARACTERISTICS_S
2190 } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
2191 #elif defined(NDIS50_MINIPORT)
2192 typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
2193 NDIS50_MINIPORT_CHARACTERISTICS_S
2194 } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
2195 #elif defined(NDIS40_MINIPORT)
2196 typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
2197 NDIS40_MINIPORT_CHARACTERISTICS_S
2198 } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
2199 #else /* NDIS30 */
2200 typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
2201 NDIS30_MINIPORT_CHARACTERISTICS_S
2202 } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
2203 #endif
2204
2205 typedef struct _NDIS_MINIPORT_INTERRUPT {
2206 PKINTERRUPT InterruptObject;
2207 KSPIN_LOCK DpcCountLock;
2208 PVOID Reserved;
2209 W_ISR_HANDLER MiniportIsr;
2210 W_HANDLE_INTERRUPT_HANDLER MiniportDpc;
2211 KDPC InterruptDpc;
2212 PNDIS_MINIPORT_BLOCK Miniport;
2213 UCHAR DpcCount;
2214 BOOLEAN Filler1;
2215 KEVENT DpcsCompletedEvent;
2216 BOOLEAN SharedInterrupt;
2217 BOOLEAN IsrRequested;
2218 } NDIS_MINIPORT_INTERRUPT, *PNDIS_MINIPORT_INTERRUPT;
2219
2220 /* Structures available only to full MAC drivers */
2221
2222 typedef BOOLEAN
2223 (NTAPI *PNDIS_INTERRUPT_SERVICE)(
2224 IN PVOID InterruptContext);
2225
2226 typedef VOID
2227 (NTAPI *PNDIS_DEFERRED_PROCESSING)(
2228 IN PVOID SystemSpecific1,
2229 IN PVOID InterruptContext,
2230 IN PVOID SystemSpecific2,
2231 IN PVOID SystemSpecific3);
2232
2233 typedef struct _NDIS_WRAPPER_HANDLE NDIS_WRAPPER_HANDLE, *PNDIS_WRAPPER_HANDLE;
2234 typedef struct _NDIS_PROTOCOL_BLOCK NDIS_PROTOCOL_BLOCK, *PNDIS_PROTOCOL_BLOCK;
2235 typedef struct _NDIS_OPEN_BLOCK NDIS_OPEN_BLOCK, *PNDIS_OPEN_BLOCK;
2236 typedef struct _NDIS_M_DRIVER_BLOCK NDIS_M_DRIVER_BLOCK, *PNDIS_M_DRIVER_BLOCK;
2237 typedef struct _NDIS_OFFLOAD NDIS_OFFLOAD, *PNDIS_OFFLOAD;
2238 typedef struct _NDIS_AF_LIST NDIS_AF_LIST, *PNDIS_AF_LIST;
2239 typedef struct _X_FILTER ETH_FILTER, *PETH_FILTER;
2240 #if NDIS_SUPPORT_NDIS6
2241 typedef USHORT NET_FRAME_TYPE, *PNET_FRAME_TYPE;
2242 #endif
2243
2244 typedef struct _NDIS_MINIPORT_TIMER {
2245 KTIMER Timer;
2246 KDPC Dpc;
2247 PNDIS_TIMER_FUNCTION MiniportTimerFunction;
2248 PVOID MiniportTimerContext;
2249 PNDIS_MINIPORT_BLOCK Miniport;
2250 struct _NDIS_MINIPORT_TIMER *NextDeferredTimer;
2251 } NDIS_MINIPORT_TIMER, *PNDIS_MINIPORT_TIMER;
2252
2253 typedef struct _NDIS_INTERRUPT {
2254 PKINTERRUPT InterruptObject;
2255 KSPIN_LOCK DpcCountLock;
2256 PNDIS_INTERRUPT_SERVICE MacIsr;
2257 PNDIS_DEFERRED_PROCESSING MacDpc;
2258 KDPC InterruptDpc;
2259 PVOID InterruptContext;
2260 UCHAR DpcCount;
2261 BOOLEAN Removing;
2262 KEVENT DpcsCompletedEvent;
2263 } NDIS_INTERRUPT, *PNDIS_INTERRUPT;
2264
2265
2266 typedef enum _NDIS_WORK_ITEM_TYPE {
2267 NdisWorkItemRequest,
2268 NdisWorkItemSend,
2269 NdisWorkItemReturnPackets,
2270 NdisWorkItemResetRequested,
2271 NdisWorkItemResetInProgress,
2272 NdisWorkItemHalt,
2273 NdisWorkItemSendLoopback,
2274 NdisWorkItemMiniportCallback,
2275 NdisMaxWorkItems
2276 } NDIS_WORK_ITEM_TYPE, *PNDIS_WORK_ITEM_TYPE;
2277
2278 #define NUMBER_OF_WORK_ITEM_TYPES NdisMaxWorkItems
2279 #define NUMBER_OF_SINGLE_WORK_ITEMS 6
2280
2281 typedef struct _NDIS_MINIPORT_WORK_ITEM {
2282 SINGLE_LIST_ENTRY Link;
2283 NDIS_WORK_ITEM_TYPE WorkItemType;
2284 PVOID WorkItemContext;
2285 } NDIS_MINIPORT_WORK_ITEM, *PNDIS_MINIPORT_WORK_ITEM;
2286
2287 struct _NDIS_WORK_ITEM;
2288 typedef VOID (*NDIS_PROC)(struct _NDIS_WORK_ITEM *, PVOID);
2289
2290 typedef struct _NDIS_WORK_ITEM {
2291 PVOID Context;
2292 NDIS_PROC Routine;
2293 UCHAR WrapperReserved[8*sizeof(PVOID)];
2294 } NDIS_WORK_ITEM, *PNDIS_WORK_ITEM;
2295
2296 typedef struct _NDIS_BIND_PATHS {
2297 UINT Number;
2298 NDIS_STRING Paths[1];
2299 } NDIS_BIND_PATHS, *PNDIS_BIND_PATHS;
2300
2301
2302 typedef VOID
2303 (NTAPI *ETH_RCV_COMPLETE_HANDLER)(
2304 _In_ PETH_FILTER Filter);
2305
2306 typedef VOID
2307 (NTAPI *ETH_RCV_INDICATE_HANDLER)(
2308 _In_ PETH_FILTER Filter,
2309 _In_ NDIS_HANDLE MacReceiveContext,
2310 _In_ PCHAR Address,
2311 _In_ PVOID HeaderBuffer,
2312 _In_ UINT HeaderBufferSize,
2313 _In_ PVOID LookaheadBuffer,
2314 _In_ UINT LookaheadBufferSize,
2315 _In_ UINT PacketSize);
2316
2317 typedef VOID
2318 (NTAPI *FDDI_RCV_COMPLETE_HANDLER)(
2319 IN PFDDI_FILTER Filter);
2320
2321 typedef VOID
2322 (NTAPI *FDDI_RCV_INDICATE_HANDLER)(
2323 IN PFDDI_FILTER Filter,
2324 IN NDIS_HANDLE MacReceiveContext,
2325 IN PCHAR Address,
2326 IN UINT AddressLength,
2327 IN PVOID HeaderBuffer,
2328 IN UINT HeaderBufferSize,
2329 IN PVOID LookaheadBuffer,
2330 IN UINT LookaheadBufferSize,
2331 IN UINT PacketSize);
2332
2333 typedef VOID
2334 (NTAPI *FILTER_PACKET_INDICATION_HANDLER)(
2335 _In_ NDIS_HANDLE Miniport,
2336 _In_ PPNDIS_PACKET PacketArray,
2337 _In_ UINT NumberOfPackets);
2338
2339 typedef VOID
2340 (NTAPI *TR_RCV_COMPLETE_HANDLER)(
2341 _In_ PTR_FILTER Filter);
2342
2343 typedef VOID
2344 (NTAPI *TR_RCV_INDICATE_HANDLER)(
2345 _In_ PTR_FILTER Filter,
2346 _In_ NDIS_HANDLE MacReceiveContext,
2347 _In_ PVOID HeaderBuffer,
2348 _In_ UINT HeaderBufferSize,
2349 _In_ PVOID LookaheadBuffer,
2350 _In_ UINT LookaheadBufferSize,
2351 _In_ UINT PacketSize);
2352
2353 typedef VOID
2354 (NTAPI *WAN_RCV_COMPLETE_HANDLER)(
2355 _In_ NDIS_HANDLE MiniportAdapterHandle,
2356 _In_ NDIS_HANDLE NdisLinkContext);
2357
2358 typedef VOID
2359 (NTAPI *WAN_RCV_HANDLER)(
2360 _Out_ PNDIS_STATUS Status,
2361 _In_ NDIS_HANDLE MiniportAdapterHandle,
2362 _In_ NDIS_HANDLE NdisLinkContext,
2363 _In_ PUCHAR Packet,
2364 _In_ ULONG PacketSize);
2365
2366 typedef VOID
2367 (FASTCALL *NDIS_M_DEQUEUE_WORK_ITEM)(
2368 IN PNDIS_MINIPORT_BLOCK Miniport,
2369 IN NDIS_WORK_ITEM_TYPE WorkItemType,
2370 OUT PVOID *WorkItemContext);
2371
2372 typedef NDIS_STATUS
2373 (FASTCALL *NDIS_M_QUEUE_NEW_WORK_ITEM)(
2374 IN PNDIS_MINIPORT_BLOCK Miniport,
2375 IN NDIS_WORK_ITEM_TYPE WorkItemType,
2376 IN PVOID WorkItemContext);
2377
2378 typedef NDIS_STATUS
2379 (FASTCALL *NDIS_M_QUEUE_WORK_ITEM)(
2380 IN PNDIS_MINIPORT_BLOCK Miniport,
2381 IN NDIS_WORK_ITEM_TYPE WorkItemType,
2382 IN PVOID WorkItemContext);
2383
2384 typedef VOID
2385 (NTAPI *NDIS_M_REQ_COMPLETE_HANDLER)(
2386 _In_ NDIS_HANDLE MiniportAdapterHandle,
2387 _In_ NDIS_STATUS Status);
2388
2389 typedef VOID
2390 (NTAPI *NDIS_M_RESET_COMPLETE_HANDLER)(
2391 _In_ NDIS_HANDLE MiniportAdapterHandle,
2392 _In_ NDIS_STATUS Status,
2393 _In_ BOOLEAN AddressingReset);
2394
2395 typedef VOID
2396 (NTAPI *NDIS_M_SEND_COMPLETE_HANDLER)(
2397 _In_ NDIS_HANDLE MiniportAdapterHandle,
2398 _In_ PNDIS_PACKET Packet,
2399 _In_ NDIS_STATUS Status);
2400
2401 typedef VOID
2402 (NTAPI *NDIS_M_SEND_RESOURCES_HANDLER)(
2403 _In_ NDIS_HANDLE MiniportAdapterHandle);
2404
2405 typedef BOOLEAN
2406 (FASTCALL *NDIS_M_START_SENDS)(
2407 _In_ PNDIS_MINIPORT_BLOCK Miniport);
2408
2409 typedef VOID
2410 (NTAPI *NDIS_M_STATUS_HANDLER)(
2411 _In_ NDIS_HANDLE MiniportHandle,
2412 _In_ NDIS_STATUS GeneralStatus,
2413 _In_ PVOID StatusBuffer,
2414 _In_ UINT StatusBufferSize);
2415
2416 typedef VOID
2417 (NTAPI *NDIS_M_STS_COMPLETE_HANDLER)(
2418 _In_ NDIS_HANDLE MiniportAdapterHandle);
2419
2420 typedef VOID
2421 (NTAPI *NDIS_M_TD_COMPLETE_HANDLER)(
2422 _In_ NDIS_HANDLE MiniportAdapterHandle,
2423 _In_ PNDIS_PACKET Packet,
2424 _In_ NDIS_STATUS Status,
2425 _In_ UINT BytesTransferred);
2426
2427 typedef VOID (NTAPI *NDIS_WM_SEND_COMPLETE_HANDLER)(
2428 _In_ NDIS_HANDLE MiniportAdapterHandle,
2429 _In_ PVOID Packet,
2430 _In_ NDIS_STATUS Status);
2431
2432
2433 #if ARCNET
2434
2435 #define ARC_SEND_BUFFERS 8
2436 #define ARC_HEADER_SIZE 4
2437
2438 typedef struct _NDIS_ARC_BUF {
2439 NDIS_HANDLE ArcnetBufferPool;
2440 PUCHAR ArcnetLookaheadBuffer;
2441 UINT NumFree;
2442 ARC_BUFFER_LIST ArcnetBuffers[ARC_SEND_BUFFERS];
2443 } NDIS_ARC_BUF, *PNDIS_ARC_BUF;
2444
2445 #endif /* ARCNET */
2446
2447 typedef struct _NDIS_LOG {
2448 PNDIS_MINIPORT_BLOCK Miniport;
2449 KSPIN_LOCK LogLock;
2450 PIRP Irp;
2451 UINT TotalSize;
2452 UINT CurrentSize;
2453 UINT InPtr;
2454 UINT OutPtr;
2455 UCHAR LogBuf[1];
2456 } NDIS_LOG, *PNDIS_LOG;
2457
2458 #if ARCNET
2459 #define FILTERDBS_ARCNET_S \
2460 PARC_FILTER ArcDB;
2461 #else /* !ARCNET */
2462 #define FILTERDBS_ARCNET_S \
2463 PVOID XXXDB;
2464 #endif /* !ARCNET */
2465
2466 #define FILTERDBS_S \
2467 _ANONYMOUS_UNION union { \
2468 PETH_FILTER EthDB; \
2469 PNULL_FILTER NullDB; \
2470 } DUMMYUNIONNAME; \
2471 PTR_FILTER TrDB; \
2472 PFDDI_FILTER FddiDB; \
2473 FILTERDBS_ARCNET_S
2474
2475 typedef struct _FILTERDBS {
2476 FILTERDBS_S
2477 } FILTERDBS, *PFILTERDBS;
2478
2479 struct _NDIS_MINIPORT_BLOCK {
2480 NDIS_OBJECT_HEADER Header;
2481 PNDIS_MINIPORT_BLOCK NextMiniport;
2482 PNDIS_M_DRIVER_BLOCK DriverHandle;
2483 NDIS_HANDLE MiniportAdapterContext;
2484 UNICODE_STRING MiniportName;
2485 PNDIS_BIND_PATHS BindPaths;
2486 NDIS_HANDLE OpenQueue;
2487 REFERENCE ShortRef;
2488 NDIS_HANDLE DeviceContext;
2489 UCHAR Padding1;
2490 UCHAR LockAcquired;
2491 UCHAR PmodeOpens;
2492 UCHAR AssignedProcessor;
2493 KSPIN_LOCK Lock;
2494 PNDIS_REQUEST MediaRequest;
2495 PNDIS_MINIPORT_INTERRUPT Interrupt;
2496 ULONG Flags;
2497 ULONG PnPFlags;
2498 LIST_ENTRY PacketList;
2499 PNDIS_PACKET FirstPendingPacket;
2500 PNDIS_PACKET ReturnPacketsQueue;
2501 ULONG RequestBuffer;
2502 PVOID SetMCastBuffer;
2503 PNDIS_MINIPORT_BLOCK PrimaryMiniport;
2504 PVOID WrapperContext;
2505 PVOID BusDataContext;
2506 ULONG PnPCapabilities;
2507 PCM_RESOURCE_LIST Resources;
2508 NDIS_TIMER WakeUpDpcTimer;
2509 UNICODE_STRING BaseName;
2510 UNICODE_STRING SymbolicLinkName;
2511 ULONG CheckForHangSeconds;
2512 USHORT CFHangTicks;
2513 USHORT CFHangCurrentTick;
2514 NDIS_STATUS ResetStatus;
2515 NDIS_HANDLE ResetOpen;
2516 FILTERDBS_S
2517 FILTER_PACKET_INDICATION_HANDLER PacketIndicateHandler;
2518 NDIS_M_SEND_COMPLETE_HANDLER SendCompleteHandler;
2519 NDIS_M_SEND_RESOURCES_HANDLER SendResourcesHandler;
2520 NDIS_M_RESET_COMPLETE_HANDLER ResetCompleteHandler;
2521 NDIS_MEDIUM MediaType;
2522 ULONG BusNumber;
2523 NDIS_INTERFACE_TYPE BusType;
2524 NDIS_INTERFACE_TYPE AdapterType;
2525 PDEVICE_OBJECT DeviceObject;
2526 PDEVICE_OBJECT PhysicalDeviceObject;
2527 PDEVICE_OBJECT NextDeviceObject;
2528 PMAP_REGISTER_ENTRY MapRegisters;
2529 PNDIS_AF_LIST CallMgrAfList;
2530 PVOID MiniportThread;
2531 PVOID SetInfoBuf;
2532 USHORT SetInfoBufLen;
2533 USHORT MaxSendPackets;
2534 NDIS_STATUS FakeStatus;
2535 PVOID LockHandler;
2536 PUNICODE_STRING pAdapterInstanceName;
2537 PNDIS_MINIPORT_TIMER TimerQueue;
2538 UINT MacOptions;
2539 PNDIS_REQUEST PendingRequest;
2540 UINT MaximumLongAddresses;
2541 UINT MaximumShortAddresses;
2542 UINT CurrentLookahead;
2543 UINT MaximumLookahead;
2544 W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler;
2545 W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler;
2546 W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler;
2547 W_SEND_PACKETS_HANDLER SendPacketsHandler;
2548 NDIS_M_START_SENDS DeferredSendHandler;
2549 ETH_RCV_INDICATE_HANDLER EthRxIndicateHandler;
2550 TR_RCV_INDICATE_HANDLER TrRxIndicateHandler;
2551 FDDI_RCV_INDICATE_HANDLER FddiRxIndicateHandler;
2552 ETH_RCV_COMPLETE_HANDLER EthRxCompleteHandler;
2553 TR_RCV_COMPLETE_HANDLER TrRxCompleteHandler;
2554 FDDI_RCV_COMPLETE_HANDLER FddiRxCompleteHandler;
2555 NDIS_M_STATUS_HANDLER StatusHandler;
2556 NDIS_M_STS_COMPLETE_HANDLER StatusCompleteHandler;
2557 NDIS_M_TD_COMPLETE_HANDLER TDCompleteHandler;
2558 NDIS_M_REQ_COMPLETE_HANDLER QueryCompleteHandler;
2559 NDIS_M_REQ_COMPLETE_HANDLER SetCompleteHandler;
2560 NDIS_WM_SEND_COMPLETE_HANDLER WanSendCompleteHandler;
2561 WAN_RCV_HANDLER WanRcvHandler;
2562 WAN_RCV_COMPLETE_HANDLER WanRcvCompleteHandler;
2563 #if defined(NDIS_WRAPPER)
2564 PNDIS_MINIPORT_BLOCK NextGlobalMiniport;
2565 SINGLE_LIST_ENTRY WorkQueue[NUMBER_OF_WORK_ITEM_TYPES];
2566 SINGLE_LIST_ENTRY SingleWorkItems[NUMBER_OF_SINGLE_WORK_ITEMS];
2567 UCHAR SendFlags;
2568 UCHAR TrResetRing;
2569 UCHAR ArcnetAddress;
2570 UCHAR XState;
2571 _ANONYMOUS_UNION union {
2572 #if ARCNET
2573 PNDIS_ARC_BUF ArcBuf;
2574 #endif
2575 PVOID BusInterface;
2576 } DUMMYUNIONNAME;
2577 PNDIS_LOG Log;
2578 ULONG SlotNumber;
2579 PCM_RESOURCE_LIST AllocatedResources;
2580 PCM_RESOURCE_LIST AllocatedResourcesTranslated;
2581 SINGLE_LIST_ENTRY PatternList;
2582 NDIS_PNP_CAPABILITIES PMCapabilities;
2583 DEVICE_CAPABILITIES DeviceCaps;
2584 ULONG WakeUpEnable;
2585 DEVICE_POWER_STATE CurrentDevicePowerState;
2586 PIRP pIrpWaitWake;
2587 SYSTEM_POWER_STATE WaitWakeSystemState;
2588 LARGE_INTEGER VcIndex;
2589 KSPIN_LOCK VcCountLock;
2590 LIST_ENTRY WmiEnabledVcs;
2591 PNDIS_GUID pNdisGuidMap;
2592 PNDIS_GUID pCustomGuidMap;
2593 USHORT VcCount;
2594 USHORT cNdisGuidMap;
2595 USHORT cCustomGuidMap;
2596 USHORT CurrentMapRegister;
2597 PKEVENT AllocationEvent;
2598 USHORT BaseMapRegistersNeeded;
2599 USHORT SGMapRegistersNeeded;
2600 ULONG MaximumPhysicalMapping;
2601 NDIS_TIMER MediaDisconnectTimer;
2602 USHORT MediaDisconnectTimeOut;
2603 USHORT InstanceNumber;
2604 NDIS_EVENT OpenReadyEvent;
2605 NDIS_PNP_DEVICE_STATE PnPDeviceState;
2606 NDIS_PNP_DEVICE_STATE OldPnPDeviceState;
2607 PGET_SET_DEVICE_DATA SetBusData;
2608 PGET_SET_DEVICE_DATA GetBusData;
2609 KDPC DeferredDpc;
2610 #if 0
2611 /* FIXME: */
2612 NDIS_STATS NdisStats;
2613 #else
2614 ULONG NdisStats;
2615 #endif
2616 PNDIS_PACKET IndicatedPacket[MAXIMUM_PROCESSORS];
2617 PKEVENT RemoveReadyEvent;
2618 PKEVENT AllOpensClosedEvent;
2619 PKEVENT AllRequestsCompletedEvent;
2620 ULONG InitTimeMs;
2621 NDIS_MINIPORT_WORK_ITEM WorkItemBuffer[NUMBER_OF_SINGLE_WORK_ITEMS];
2622 PDMA_ADAPTER SystemAdapterObject;
2623 ULONG DriverVerifyFlags;
2624 POID_LIST OidList;
2625 USHORT InternalResetCount;
2626 USHORT MiniportResetCount;
2627 USHORT MediaSenseConnectCount;
2628 USHORT MediaSenseDisconnectCount;
2629 PNDIS_PACKET *xPackets;
2630 ULONG UserModeOpenReferences;
2631 _ANONYMOUS_UNION union {
2632 PVOID SavedSendHandler;
2633 PVOID SavedWanSendHandler;
2634 } DUMMYUNIONNAME2;
2635 PVOID SavedSendPacketsHandler;
2636 PVOID SavedCancelSendPacketsHandler;
2637 W_SEND_PACKETS_HANDLER WSendPacketsHandler;
2638 ULONG MiniportAttributes;
2639 PDMA_ADAPTER SavedSystemAdapterObject;
2640 USHORT NumOpens;
2641 USHORT CFHangXTicks;
2642 ULONG RequestCount;
2643 ULONG IndicatedPacketsCount;
2644 ULONG PhysicalMediumType;
2645 PNDIS_REQUEST LastRequest;
2646 LONG DmaAdapterRefCount;
2647 PVOID FakeMac;
2648 ULONG LockDbg;
2649 ULONG LockDbgX;
2650 PVOID LockThread;
2651 ULONG InfoFlags;
2652 KSPIN_LOCK TimerQueueLock;
2653 PKEVENT ResetCompletedEvent;
2654 PKEVENT QueuedBindingCompletedEvent;
2655 PKEVENT DmaResourcesReleasedEvent;
2656 FILTER_PACKET_INDICATION_HANDLER SavedPacketIndicateHandler;
2657 ULONG RegisteredInterrupts;
2658 PNPAGED_LOOKASIDE_LIST SGListLookasideList;
2659 ULONG ScatterGatherListSize;
2660 #endif /* _NDIS_ */
2661 };
2662
2663 #if NDIS_LEGACY_DRIVER
2664
2665 typedef NDIS_STATUS
2666 (NTAPI *WAN_SEND_HANDLER)(
2667 _In_ NDIS_HANDLE MacBindingHandle,
2668 _In_ NDIS_HANDLE LinkHandle,
2669 _In_ PVOID Packet);
2670
2671 typedef VOID
2672 (NTAPI *SEND_PACKETS_HANDLER)(
2673 _In_ NDIS_HANDLE MiniportAdapterContext,
2674 _In_ PPNDIS_PACKET PacketArray,
2675 _In_ UINT NumberOfPackets);
2676
2677 typedef NDIS_STATUS
2678 (NTAPI *SEND_HANDLER)(
2679 _In_ NDIS_HANDLE NdisBindingHandle,
2680 _In_ PNDIS_PACKET Packet);
2681
2682 typedef NDIS_STATUS
2683 (NTAPI *TRANSFER_DATA_HANDLER)(
2684 _In_ NDIS_HANDLE NdisBindingHandle,
2685 _In_ NDIS_HANDLE MacReceiveContext,
2686 _In_ UINT ByteOffset,
2687 _In_ UINT BytesToTransfer,
2688 _Out_ PNDIS_PACKET Packet,
2689 _Out_ PUINT BytesTransferred);
2690
2691 typedef NDIS_STATUS
2692 (NTAPI *RESET_HANDLER)(
2693 _In_ NDIS_HANDLE NdisBindingHandle);
2694
2695 typedef NDIS_STATUS
2696 (NTAPI *REQUEST_HANDLER)(
2697 _In_ NDIS_HANDLE NdisBindingHandle,
2698 _In_ PNDIS_REQUEST NdisRequest);
2699
2700 #endif /* NDIS_LEGACY_DRIVER */
2701
2702 #if defined(NDIS_WRAPPER)
2703 #define NDIS_COMMON_OPEN_BLOCK_WRAPPER_S \
2704 ULONG Flags; \
2705 ULONG References; \
2706 KSPIN_LOCK SpinLock; \
2707 NDIS_HANDLE FilterHandle; \
2708 ULONG ProtocolOptions; \
2709 USHORT CurrentLookahead; \
2710 USHORT ConnectDampTicks; \
2711 USHORT DisconnectDampTicks; \
2712 W_SEND_HANDLER WSendHandler; \
2713 W_TRANSFER_DATA_HANDLER WTransferDataHandler; \
2714 W_SEND_PACKETS_HANDLER WSendPacketsHandler; \
2715 W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler; \
2716 ULONG WakeUpEnable; \
2717 PKEVENT CloseCompleteEvent; \
2718 QUEUED_CLOSE QC; \
2719 ULONG AfReferences; \
2720 PNDIS_OPEN_BLOCK NextGlobalOpen;
2721 #else
2722 #define NDIS_COMMON_OPEN_BLOCK_WRAPPER_S
2723 #endif
2724
2725 #define NDIS_COMMON_OPEN_BLOCK_S \
2726 PVOID MacHandle; \
2727 NDIS_HANDLE BindingHandle; \
2728 PNDIS_MINIPORT_BLOCK MiniportHandle; \
2729 PNDIS_PROTOCOL_BLOCK ProtocolHandle; \
2730 NDIS_HANDLE ProtocolBindingContext; \
2731 PNDIS_OPEN_BLOCK MiniportNextOpen; \
2732 PNDIS_OPEN_BLOCK ProtocolNextOpen; \
2733 NDIS_HANDLE MiniportAdapterContext; \
2734 BOOLEAN Reserved1; \
2735 BOOLEAN Reserved2; \
2736 BOOLEAN Reserved3; \
2737 BOOLEAN Reserved4; \
2738 PNDIS_STRING BindDeviceName; \
2739 KSPIN_LOCK Reserved5; \
2740 PNDIS_STRING RootDeviceName; \
2741 _ANONYMOUS_UNION union { \
2742 SEND_HANDLER SendHandler; \
2743 WAN_SEND_HANDLER WanSendHandler; \
2744 } DUMMYUNIONNAME; \
2745 TRANSFER_DATA_HANDLER TransferDataHandler; \
2746 SEND_COMPLETE_HANDLER SendCompleteHandler; \
2747 TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler; \
2748 RECEIVE_HANDLER ReceiveHandler; \
2749 RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler; \
2750 WAN_RECEIVE_HANDLER WanReceiveHandler; \
2751 REQUEST_COMPLETE_HANDLER RequestCompleteHandler; \
2752 RECEIVE_PACKET_HANDLER ReceivePacketHandler; \
2753 SEND_PACKETS_HANDLER SendPacketsHandler; \
2754 RESET_HANDLER ResetHandler; \
2755 REQUEST_HANDLER RequestHandler; \
2756 RESET_COMPLETE_HANDLER ResetCompleteHandler; \
2757 STATUS_HANDLER StatusHandler; \
2758 STATUS_COMPLETE_HANDLER StatusCompleteHandler; \
2759 NDIS_COMMON_OPEN_BLOCK_WRAPPER_S
2760
2761 typedef struct _NDIS_COMMON_OPEN_BLOCK {
2762 NDIS_COMMON_OPEN_BLOCK_S
2763 } NDIS_COMMON_OPEN_BLOCK;
2764
2765 struct _NDIS_OPEN_BLOCK
2766 {
2767 #ifdef __cplusplus
2768 NDIS_COMMON_OPEN_BLOCK NdisCommonOpenBlock;
2769 #else
2770 NDIS_COMMON_OPEN_BLOCK_S
2771 #endif
2772 };
2773
2774 #include <xfilter.h>
2775
2776 #define NDIS_M_MAX_LOOKAHEAD 526
2777
2778 _IRQL_requires_max_(DISPATCH_LEVEL)
2779 NDISAPI
2780 VOID
2781 NTAPI
2782 NdisInitializeTimer(
2783 _Inout_ PNDIS_TIMER Timer,
2784 _In_ PNDIS_TIMER_FUNCTION TimerFunction,
2785 _In_opt_ _Points_to_data_ PVOID FunctionContext);
2786
2787 _IRQL_requires_max_(DISPATCH_LEVEL)
2788 NDISAPI
2789 VOID
2790 NTAPI
2791 NdisCancelTimer(
2792 _In_ PNDIS_TIMER Timer,
2793 _Out_ _At_(*TimerCancelled, _Must_inspect_result_) PBOOLEAN TimerCancelled);
2794
2795 _IRQL_requires_max_(DISPATCH_LEVEL)
2796 NDISAPI
2797 VOID
2798 NTAPI
2799 NdisSetTimer(
2800 _In_ PNDIS_TIMER Timer,
2801 _In_ UINT MillisecondsToDelay);
2802
2803 NDISAPI
2804 VOID
2805 NTAPI
2806 NdisSetPeriodicTimer(
2807 _In_ PNDIS_TIMER NdisTimer,
2808 _In_ UINT MillisecondsPeriod);
2809
2810 _IRQL_requires_max_(DISPATCH_LEVEL)
2811 NDISAPI
2812 VOID
2813 NTAPI
2814 NdisSetTimerEx(
2815 _In_ PNDIS_TIMER NdisTimer,
2816 _In_ UINT MillisecondsToDelay,
2817 _In_ PVOID FunctionContext);
2818
2819 _IRQL_requires_(PASSIVE_LEVEL)
2820 NDISAPI
2821 PVOID
2822 NTAPI
2823 NdisGetRoutineAddress(
2824 _In_ PNDIS_STRING NdisRoutineName);
2825
2826 _IRQL_requires_max_(DISPATCH_LEVEL)
2827 NDISAPI
2828 UINT
2829 NTAPI
2830 NdisGetVersion(VOID);
2831
2832 #if NDIS_LEGACY_DRIVER
2833
2834 _IRQL_requires_max_(DISPATCH_LEVEL)
2835 NDISAPI
2836 VOID
2837 NTAPI
2838 NdisAllocateBuffer(
2839 _Out_ PNDIS_STATUS Status,
2840 _Out_ PNDIS_BUFFER *Buffer,
2841 _In_opt_ NDIS_HANDLE PoolHandle,
2842 _In_reads_bytes_(Length) PVOID VirtualAddress,
2843 _In_ UINT Length);
2844
2845 _IRQL_requires_max_(DISPATCH_LEVEL)
2846 NDISAPI
2847 VOID
2848 NTAPI
2849 NdisAllocateBufferPool(
2850 _Out_ PNDIS_STATUS Status,
2851 _Out_ PNDIS_HANDLE PoolHandle,
2852 _In_ UINT NumberOfDescriptors);
2853
2854 _IRQL_requires_max_(DISPATCH_LEVEL)
2855 NDISAPI
2856 VOID
2857 NTAPI
2858 NdisFreeBufferPool(
2859 _In_ NDIS_HANDLE PoolHandle);
2860
2861 /*
2862 NDISAPI
2863 VOID
2864 NTAPI
2865 NdisFreeBuffer(
2866 IN PNDIS_BUFFER Buffer);
2867 */
2868 #define NdisFreeBuffer IoFreeMdl
2869
2870 _IRQL_requires_max_(DISPATCH_LEVEL)
2871 NDISAPI
2872 VOID
2873 NTAPI
2874 NdisAllocatePacketPool(
2875 _Out_ PNDIS_STATUS Status,
2876 _Out_ PNDIS_HANDLE PoolHandle,
2877 _In_ UINT NumberOfDescriptors,
2878 _In_ UINT ProtocolReservedLength);
2879
2880 _IRQL_requires_max_(DISPATCH_LEVEL)
2881 NDISAPI
2882 VOID
2883 NTAPI
2884 NdisAllocatePacketPoolEx(
2885 _Out_ PNDIS_STATUS Status,
2886 _Out_ PNDIS_HANDLE PoolHandle,
2887 _In_ UINT NumberOfDescriptors,
2888 _In_ UINT NumberOfOverflowDescriptors,
2889 _In_ UINT ProtocolReservedLength);
2890
2891 _IRQL_requires_max_(DISPATCH_LEVEL)
2892 NDISAPI
2893 VOID
2894 NTAPI
2895 NdisSetPacketPoolProtocolId(
2896 _In_ NDIS_HANDLE PacketPoolHandle,
2897 _In_ UINT ProtocolId);
2898
2899 _IRQL_requires_max_(DISPATCH_LEVEL)
2900 NDISAPI
2901 UINT
2902 NTAPI
2903 NdisPacketPoolUsage(
2904 _In_ NDIS_HANDLE PoolHandle);
2905
2906 _IRQL_requires_max_(DISPATCH_LEVEL)
2907 NDISAPI
2908 UINT
2909 NTAPI
2910 NdisPacketSize(
2911 _In_ UINT ProtocolReservedSize);
2912
2913 _IRQL_requires_max_(DISPATCH_LEVEL)
2914 NDISAPI
2915 NDIS_HANDLE
2916 NTAPI
2917 NdisGetPoolFromPacket(
2918 _In_ PNDIS_PACKET Packet);
2919
2920 _IRQL_requires_max_(DISPATCH_LEVEL)
2921 NDISAPI
2922 PNDIS_PACKET_STACK
2923 NTAPI
2924 NdisIMGetCurrentPacketStack(
2925 _In_ PNDIS_PACKET Packet,
2926 _Out_ BOOLEAN *StacksRemaining);
2927
2928 _IRQL_requires_max_(DISPATCH_LEVEL)
2929 NDISAPI
2930 VOID
2931 NTAPI
2932 NdisFreePacketPool(
2933 _In_ NDIS_HANDLE PoolHandle);
2934
2935 _IRQL_requires_max_(DISPATCH_LEVEL)
2936 NDISAPI
2937 VOID
2938 NTAPI
2939 NdisFreePacket(
2940 _In_ PNDIS_PACKET Packet);
2941
2942 _IRQL_requires_(DISPATCH_LEVEL)
2943 NDISAPI
2944 VOID
2945 NTAPI
2946 NdisDprFreePacket(
2947 _In_ PNDIS_PACKET Packet);
2948
2949 _IRQL_requires_(DISPATCH_LEVEL)
2950 NDISAPI
2951 VOID
2952 NTAPI
2953 NdisDprFreePacketNonInterlocked(
2954 _In_ PNDIS_PACKET Packet);
2955
2956 _IRQL_requires_max_(DISPATCH_LEVEL)
2957 NDISAPI
2958 VOID
2959 NTAPI
2960 NdisAllocatePacket(
2961 _Out_ PNDIS_STATUS Status,
2962 _Out_ PNDIS_PACKET *Packet,
2963 _In_ NDIS_HANDLE PoolHandle);
2964
2965 _IRQL_requires_(DISPATCH_LEVEL)
2966 NDISAPI
2967 VOID
2968 NTAPI
2969 NdisDprAllocatePacket(
2970 _Out_ PNDIS_STATUS Status,
2971 _Out_ PNDIS_PACKET *Packet,
2972 _In_ NDIS_HANDLE PoolHandle);
2973
2974 _IRQL_requires_(DISPATCH_LEVEL)
2975 NDISAPI
2976 VOID
2977 NTAPI
2978 NdisDprAllocatePacketNonInterlocked(
2979 _Out_ PNDIS_STATUS Status,
2980 _Out_ PNDIS_PACKET *Packet,
2981 _In_ NDIS_HANDLE PoolHandle);
2982
2983 /*
2984 * VOID
2985 * NdisReinitializePacket(
2986 * IN OUT PNDIS_PACKET Packet);
2987 */
2988 #define NdisReinitializePacket(Packet) { \
2989 (Packet)->Private.Head = (PNDIS_BUFFER)NULL; \
2990 (Packet)->Private.ValidCounts = FALSE; \
2991 }
2992
2993 /*
2994 NDISAPI
2995 VOID
2996 NTAPI
2997 NdisQueryBuffer(
2998 IN PNDIS_BUFFER Buffer,
2999 OUT PVOID *VirtualAddress OPTIONAL,
3000 OUT PUINT Length);
3001 */
3002 #define NdisQueryBuffer(_Buffer, _VirtualAddress, _Length) { \
3003 if (ARGUMENT_PRESENT(_VirtualAddress)) { \
3004 *(PVOID *)(_VirtualAddress) = MmGetSystemAddressForMdl(_Buffer); \
3005 } \
3006 *(_Length) = MmGetMdlByteCount(_Buffer); \
3007 }
3008
3009 NDISAPI
3010 VOID
3011 NTAPI
3012 NdisGetFirstBufferFromPacket(
3013 IN PNDIS_PACKET _Packet,
3014 OUT PNDIS_BUFFER *_FirstBuffer,
3015 OUT PVOID *_FirstBufferVA,
3016 OUT PUINT _FirstBufferLength,
3017 OUT PUINT _TotalBufferLength);
3018
3019 /*
3020 * VOID
3021 * NdisGetFirstBufferFromPacketSafe(
3022 * IN PNDIS_PACKET _Packet,
3023 * OUT PNDIS_BUFFER * _FirstBuffer,
3024 * OUT PVOID * _FirstBufferVA,
3025 * OUT PUINT _FirstBufferLength,
3026 * OUT PUINT _TotalBufferLength),
3027 * IN MM_PAGE_PRIORITY _Priority)
3028 */
3029 #define NdisGetFirstBufferFromPacketSafe(_Packet, \
3030 _FirstBuffer, \
3031 _FirstBufferVA, \
3032 _FirstBufferLength, \
3033 _TotalBufferLength, \
3034 _Priority) \
3035 { \
3036 PNDIS_BUFFER _Buffer; \
3037 \
3038 _Buffer = (_Packet)->Private.Head; \
3039 *(_FirstBuffer) = _Buffer; \
3040 if (_Buffer != NULL) { \
3041 *(_FirstBufferVA) = MmGetSystemAddressForMdlSafe(_Buffer, _Priority); \
3042 *(_FirstBufferLength) = MmGetMdlByteCount(_Buffer); \
3043 _Buffer = _Buffer->Next; \
3044 *(_TotalBufferLength) = *(_FirstBufferLength); \
3045 while (_Buffer != NULL) { \
3046 *(_TotalBufferLength) += MmGetMdlByteCount(_Buffer); \
3047 _Buffer = _Buffer->Next; \
3048 } \
3049 } \
3050 else { \
3051 *(_FirstBufferVA) = 0; \
3052 *(_FirstBufferLength) = 0; \
3053 *(_TotalBufferLength) = 0; \
3054 } \
3055 }
3056
3057 /*
3058 * VOID
3059 * NdisRecalculatePacketCounts(
3060 * IN OUT PNDIS_PACKET Packet);
3061 */
3062 #define NdisRecalculatePacketCounts(Packet) { \
3063 PNDIS_BUFFER _Buffer = (Packet)->Private.Head; \
3064 if (_Buffer != NULL) { \
3065 while (_Buffer->Next != NULL) { \
3066 _Buffer = _Buffer->Next; \
3067 } \
3068 (Packet)->Private.Tail = _Buffer; \
3069 } \
3070 (Packet)->Private.ValidCounts = FALSE; \
3071 }
3072
3073 /*
3074 * VOID
3075 * NdisChainBufferAtFront(
3076 * IN OUT PNDIS_PACKET Packet,
3077 * IN OUT PNDIS_BUFFER Buffer)
3078 */
3079 #define NdisChainBufferAtFront(Packet, \
3080 Buffer) \
3081 { \
3082 PNDIS_BUFFER _NdisBuffer = (Buffer); \
3083 \
3084 while (_NdisBuffer->Next != NULL) \
3085 _NdisBuffer = _NdisBuffer->Next; \
3086 \
3087 if ((Packet)->Private.Head == NULL) \
3088 (Packet)->Private.Tail = _NdisBuffer; \
3089 \
3090 _NdisBuffer->Next = (Packet)->Private.Head; \
3091 (Packet)->Private.Head = (Buffer); \
3092 (Packet)->Private.ValidCounts = FALSE; \
3093 }
3094
3095 /*
3096 * VOID
3097 * NdisChainBufferAtBack(
3098 * IN OUT PNDIS_PACKET Packet,
3099 * IN OUT PNDIS_BUFFER Buffer)
3100 */
3101 #define NdisChainBufferAtBack(Packet, \
3102 Buffer) \
3103 { \
3104 PNDIS_BUFFER _NdisBuffer = (Buffer); \
3105 \
3106 while (_NdisBuffer->Next != NULL) \
3107 _NdisBuffer = _NdisBuffer->Next; \
3108 \
3109 _NdisBuffer->Next = NULL; \
3110 \
3111 if ((Packet)->Private.Head != NULL) \
3112 (Packet)->Private.Tail->Next = (Buffer); \
3113 else \
3114 (Packet)->Private.Head = (Buffer); \
3115 \
3116 (Packet)->Private.Tail = _NdisBuffer; \
3117 (Packet)->Private.ValidCounts = FALSE; \
3118 }
3119
3120 NDISAPI
3121 VOID
3122 NTAPI
3123 NdisUnchainBufferAtFront(
3124 IN OUT PNDIS_PACKET Packet,
3125 OUT PNDIS_BUFFER *Buffer);
3126
3127 NDISAPI
3128 VOID
3129 NTAPI
3130 NdisUnchainBufferAtBack(
3131 IN OUT PNDIS_PACKET Packet,
3132 OUT PNDIS_BUFFER *Buffer);
3133
3134 _IRQL_requires_max_(DISPATCH_LEVEL)
3135 NDISAPI
3136 VOID
3137 NTAPI
3138 NdisCopyFromPacketToPacket(
3139 _In_ PNDIS_PACKET Destination,
3140 _In_ UINT DestinationOffset,
3141 _In_ UINT BytesToCopy,
3142 _In_ PNDIS_PACKET Source,
3143 _In_ UINT SourceOffset,
3144 _Out_ PUINT BytesCopied);
3145
3146 NDISAPI
3147 VOID
3148 NTAPI
3149 NdisCopyFromPacketToPacketSafe(
3150 IN PNDIS_PACKET Destination,
3151 IN UINT DestinationOffset,
3152 IN UINT BytesToCopy,
3153 IN PNDIS_PACKET Source,
3154 IN UINT SourceOffset,
3155 OUT PUINT BytesCopied,
3156 IN MM_PAGE_PRIORITY Priority);
3157
3158 _IRQL_requires_max_(DISPATCH_LEVEL)
3159 __drv_preferredFunction("NdisAllocateMemoryWithTag", "Obsolete")
3160 NDISAPI
3161 NDIS_STATUS
3162 NTAPI
3163 NdisAllocateMemory(
3164 _At_(*VirtualAddress, __drv_allocatesMem(Mem)) _Outptr_result_bytebuffer_(Length)
3165 PVOID *VirtualAddress,
3166 _In_ UINT Length,
3167 _In_ UINT MemoryFlags,
3168 _In_ NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress);
3169
3170 #define NdisInitializeWorkItem(_WI_, _R_, _C_) { \
3171 (_WI_)->Context = _C_; \
3172 (_WI_)->Routine = _R_; \
3173 }
3174
3175 _IRQL_requires_max_(DISPATCH_LEVEL)
3176 NDISAPI
3177 NDIS_STATUS
3178 NTAPI
3179 NdisScheduleWorkItem(
3180 _In_ __drv_aliasesMem PNDIS_WORK_ITEM WorkItem);
3181
3182 _IRQL_requires_max_(DISPATCH_LEVEL)
3183 NDISAPI
3184 VOID
3185 NTAPI
3186 NdisSetPacketStatus(
3187 _In_ PNDIS_PACKET Packet,
3188 _In_ NDIS_STATUS Status,
3189 _In_ NDIS_HANDLE Handle,
3190 _In_ ULONG Code);
3191
3192 #endif /* NDIS_LEGACY_DRIVER */
3193
3194 _IRQL_requires_(PASSIVE_LEVEL)
3195 NDISAPI
3196 VOID
3197 NTAPI
3198 NdisOpenFile(
3199 _Out_ PNDIS_STATUS Status,
3200 _Out_ PNDIS_HANDLE FileHandle,
3201 _Out_ PUINT FileLength,
3202 _In_ PNDIS_STRING FileName,
3203 _In_ NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress);
3204
3205 _IRQL_requires_(PASSIVE_LEVEL)
3206 NDISAPI
3207 VOID
3208 NTAPI
3209 NdisCloseFile(
3210 _In_ NDIS_HANDLE FileHandle);
3211
3212 _IRQL_requires_max_(DISPATCH_LEVEL)
3213 NDISAPI
3214 VOID
3215 NTAPI
3216 NdisMapFile(
3217 _Out_ PNDIS_STATUS Status,
3218 _Out_ PVOID *MappedBuffer,
3219 _In_ NDIS_HANDLE FileHandle);
3220
3221 _IRQL_requires_(PASSIVE_LEVEL)
3222 NDISAPI
3223 VOID
3224 NTAPI
3225 NdisUnmapFile(
3226 _In_ NDIS_HANDLE FileHandle);
3227
3228 _IRQL_requires_max_(DISPATCH_LEVEL)
3229 NDISAPI
3230 ULONG
3231 NTAPI
3232 NdisGetSharedDataAlignment(VOID);
3233
3234 #define NdisFlushBuffer(Buffer,WriteToDevice) \
3235 KeFlushIoBuffers((Buffer),!(WriteToDevice), TRUE)
3236
3237 _IRQL_requires_max_(DISPATCH_LEVEL)
3238 NDISAPI
3239 VOID
3240 NTAPI
3241 NdisCopyBuffer(
3242 _Out_ PNDIS_STATUS Status,
3243 _Out_ PNDIS_BUFFER *Buffer,
3244 _In_ NDIS_HANDLE PoolHandle,
3245 _In_ PVOID MemoryDescriptor,
3246 _In_ UINT Offset,
3247 _In_ UINT Length);
3248
3249 /*
3250 * VOID
3251 * NdisCopyLookaheadData(
3252 * IN PVOID Destination,
3253 * IN PVOID Source,
3254 * IN ULONG Length,
3255 * IN ULONG ReceiveFlags);
3256 */
3257
3258 #if defined(_M_IX86) || defined(_M_AMD64)
3259 #define NdisCopyLookaheadData(Destination, Source, Length, MacOptions) \
3260 RtlCopyMemory(Destination, Source, Length)
3261 #else
3262 #define NdisCopyLookaheadData(Destination, Source, Length, MacOptions) \
3263 { \
3264 if ((MacOptions) & NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA) \
3265 { \
3266 RtlCopyMemory(_Destination, _Source, _Length); \
3267 } \
3268 else \
3269 { \
3270 PUCHAR _Src = (PUCHAR)(Source); \
3271 PUCHAR _Dest = (PUCHAR)(Destination); \
3272 PUCHAR _End = _Dest + (Length); \
3273 while (_Dest < _End) \
3274 *_Dest++ = *_Src++; \
3275 } \
3276 }
3277 #endif
3278
3279 /*
3280 NDISAPI
3281 VOID
3282 NTAPI
3283 NdisAdjustBufferLength(
3284 IN PNDIS_BUFFER Buffer,
3285 IN UINT Length);
3286 */
3287 #define NdisAdjustBufferLength(Buffer, Length) \
3288 (((Buffer)->ByteCount) = (Length))
3289
3290 #if NDIS_SUPPORT_NDIS6
3291 #define NdisAdjustMdlLength(_Mdl, _Length) \
3292 (((_Mdl)->ByteCount) = (_Length))
3293 #endif
3294
3295 /*
3296 NDISAPI
3297 ULONG
3298 NTAPI
3299 NdisBufferLength(
3300 IN PNDIS_BUFFER Buffer);
3301 */
3302 #define NdisBufferLength MmGetMdlByteCount
3303
3304 /*
3305 NDISAPI
3306 PVOID
3307 NTAPI
3308 NdisBufferVirtualAddress(
3309 IN PNDIS_BUFFER Buffer);
3310 */
3311 #define NdisBufferVirtualAddress MmGetSystemAddressForMdl
3312
3313 #define NdisBufferVirtualAddressSafe MmGetSystemAddressForMdlSafe
3314
3315 NDISAPI
3316 ULONG
3317 NTAPI
3318 NDIS_BUFFER_TO_SPAN_PAGES(
3319 IN PNDIS_BUFFER Buffer);
3320
3321 /*
3322 NDISAPI
3323 VOID
3324 NTAPI
3325 NdisGetBufferPhysicalArraySize(
3326 IN PNDIS_BUFFER Buffer,
3327 OUT PUINT ArraySize);
3328 */
3329 #define NdisGetBufferPhysicalArraySize(Buffer, ArraySize) \
3330 (*(ArraySize) = NDIS_BUFFER_TO_SPAN_PAGES(Buffer))
3331
3332 /*
3333 NDISAPI
3334 VOID
3335 NTAPI
3336 NdisQueryBufferOffset(
3337 IN PNDIS_BUFFER Buffer,
3338 OUT PUINT Offset,
3339 OUT PUINT Length);
3340 */
3341 #define NdisQueryBufferOffset(_Buffer, _Offset, _Length) { \
3342 *(_Offset) = MmGetMdlByteOffset(_Buffer); \
3343 *(_Length) = MmGetMdlByteCount(_Buffer); \
3344 }
3345
3346 /*
3347 * PVOID
3348 * NDIS_BUFFER_LINKAGE(
3349 * IN PNDIS_BUFFER Buffer);
3350 */
3351 #define NDIS_BUFFER_LINKAGE(Buffer) (Buffer)->Next
3352
3353 /*
3354 * VOID
3355 * NdisGetNextBuffer(
3356 * IN PNDIS_BUFFER CurrentBuffer,
3357 * OUT PNDIS_BUFFER * NextBuffer)
3358 */
3359 #define NdisGetNextBuffer(CurrentBuffer, \
3360 NextBuffer) \
3361 { \
3362 *(NextBuffer) = (CurrentBuffer)->Next; \
3363 }
3364
3365 #if NDIS_LEGACY_DRIVER
3366
3367 #define NDIS_PACKET_FIRST_NDIS_BUFFER(_Packet) ((_Packet)->Private.Head)
3368 #define NDIS_PACKET_LAST_NDIS_BUFFER(_Packet) ((_Packet)->Private.Tail)
3369 #define NDIS_PACKET_VALID_COUNTS(_Packet) ((_Packet)->Private.ValidCounts)
3370
3371 /*
3372 * UINT
3373 * NdisGetPacketFlags(
3374 * IN PNDIS_PACKET Packet);
3375 */
3376 #define NdisGetPacketFlags(Packet) (Packet)->Private.Flags
3377
3378 /*
3379 * ULONG
3380 * NDIS_GET_PACKET_PROTOCOL_TYPE(
3381 * IN PNDIS_PACKET Packet);
3382 */
3383 #define NDIS_GET_PACKET_PROTOCOL_TYPE(_Packet) \
3384 ((_Packet)->Private.Flags & NDIS_PROTOCOL_ID_MASK)
3385
3386 /*
3387 * PNDIS_PACKET_OOB_DATA
3388 * NDIS_OOB_DATA_FROM_PACKET(
3389 * IN PNDIS_PACKET Packet);
3390 */
3391 #define NDIS_OOB_DATA_FROM_PACKET(_Packet) \
3392 (PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
3393 (_Packet)->Private.NdisPacketOobOffset)
3394
3395 /*
3396 * ULONG
3397 * NDIS_GET_PACKET_HEADER_SIZE(
3398 * IN PNDIS_PACKET Packet);
3399 */
3400 #define NDIS_GET_PACKET_HEADER_SIZE(_Packet) \
3401 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
3402 (_Packet)->Private.NdisPacketOobOffset))->HeaderSize
3403
3404 /*
3405 * NDIS_STATUS
3406 * NDIS_GET_PACKET_STATUS(
3407 * IN PNDIS_PACKET Packet);
3408 */
3409 #define NDIS_GET_PACKET_STATUS(_Packet) \
3410 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
3411 (_Packet)->Private.NdisPacketOobOffset))->Status
3412
3413 /*
3414 * ULONGLONG
3415 * NDIS_GET_PACKET_TIME_TO_SEND(
3416 * IN PNDIS_PACKET Packet);
3417 */
3418 #define NDIS_GET_PACKET_TIME_TO_SEND(_Packet) \
3419 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
3420 (_Packet)->Private.NdisPacketOobOffset))->TimeToSend
3421
3422 /*
3423 * ULONGLONG
3424 * NDIS_GET_PACKET_TIME_SENT(
3425 * IN PNDIS_PACKET Packet);
3426 */
3427 #define NDIS_GET_PACKET_TIME_SENT(_Packet) \
3428 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
3429 (_Packet)->Private.NdisPacketOobOffset))->TimeSent
3430
3431 /*
3432 * ULONGLONG
3433 * NDIS_GET_PACKET_TIME_RECEIVED(
3434 * IN PNDIS_PACKET Packet);
3435 */
3436 #define NDIS_GET_PACKET_TIME_RECEIVED(_Packet) \
3437 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
3438 (_Packet)->Private.NdisPacketOobOffset))->TimeReceived
3439
3440 /*
3441 * VOID
3442 * NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(
3443 * IN PNDIS_PACKET Packet,
3444 * IN PPVOID pMediaSpecificInfo,
3445 * IN PUINT pSizeMediaSpecificInfo);
3446 */
3447 #define NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \
3448 _pMediaSpecificInfo, \
3449 _pSizeMediaSpecificInfo) \
3450 { \
3451 if (!((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) || \
3452 !((_Packet)->Private.NdisPacketFlags & fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO)) \
3453 { \
3454 *(_pMediaSpecificInfo) = NULL; \
3455 *(_pSizeMediaSpecificInfo) = 0; \
3456 } \
3457 else \
3458 { \
3459 *(_pMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
3460 (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation; \
3461 *(_pSizeMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
3462 (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo; \
3463 } \
3464 }
3465
3466 /*
3467 * VOID
3468 * NDIS_SET_PACKET_HEADER_SIZE(
3469 * IN PNDIS_PACKET Packet,
3470 * IN UINT HdrSize);
3471 */
3472 #define NDIS_SET_PACKET_HEADER_SIZE(_Packet, _HdrSize) \
3473 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
3474 (_Packet)->Private.NdisPacketOobOffset))->HeaderSize = (_HdrSize)
3475
3476 /*
3477 * VOID
3478 * NDIS_SET_PACKET_STATUS(
3479 * IN PNDIS_PACKET Packet,
3480 * IN NDIS_STATUS Status);
3481 */
3482 #define NDIS_SET_PACKET_STATUS(_Packet, _Status) \
3483 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
3484 (_Packet)->Private.NdisPacketOobOffset))->Status = (_Status)
3485
3486 /*
3487 * VOID
3488 * NDIS_SET_PACKET_TIME_TO_SEND(
3489 * IN PNDIS_PACKET Packet,
3490 * IN ULONGLONG TimeToSend);
3491 */
3492 #define NDIS_SET_PACKET_TIME_TO_SEND(_Packet, _TimeToSend) \
3493 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
3494 (_Packet)->Private.NdisPacketOobOffset))->TimeToSend = (_TimeToSend)
3495
3496 /*
3497 * VOID
3498 * NDIS_SET_PACKET_TIME_SENT(
3499 * IN PNDIS_PACKET Packet,
3500 * IN ULONGLONG TimeSent);
3501 */
3502 #define NDIS_SET_PACKET_TIME_SENT(_Packet, _TimeSent) \
3503 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
3504 (_Packet)->Private.NdisPacketOobOffset))->TimeSent = (_TimeSent)
3505
3506 /*
3507 * VOID
3508 * NDIS_SET_PACKET_TIME_RECEIVED(
3509 * IN PNDIS_PACKET Packet,
3510 * IN ULONGLONG TimeReceived);
3511 */
3512 #define NDIS_SET_PACKET_TIME_RECEIVED(_Packet, _TimeReceived) \
3513 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
3514 (_Packet)->Private.NdisPacketOobOffset))->TimeReceived = (_TimeReceived)
3515
3516 /*
3517 * VOID
3518 * NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(
3519 * IN PNDIS_PACKET Packet,
3520 * IN PVOID MediaSpecificInfo,
3521 * IN UINT SizeMediaSpecificInfo);
3522 */
3523 #define NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \
3524 _MediaSpecificInfo, \
3525 _SizeMediaSpecificInfo) \
3526 { \
3527 if ((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) \
3528 { \
3529 (_Packet)->Private.NdisPacketFlags |= fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO; \
3530 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
3531 (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation = \
3532 (_MediaSpecificInfo); \
3533 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
3534 (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo = \
3535 (_SizeMediaSpecificInfo); \
3536 } \
3537 }
3538
3539 /*
3540 * VOID
3541 * NdisSetPacketFlags(
3542 * IN PNDIS_PACKET Packet,
3543 * IN UINT Flags);
3544 */
3545 #define NdisSetPacketFlags(Packet, Flags) (Packet)->Private.Flags |= (Flags)
3546
3547 /*
3548 * VOID
3549 * NdisClearPacketFlags(
3550 * IN PNDIS_PACKET Packet,
3551 * IN UINT Flags);
3552 */
3553 #define NdisClearPacketFlags(Packet, Flags) (Packet)->Private.Flags &= ~(Flags)
3554
3555 /*
3556 * VOID
3557 * NdisQueryPacket(
3558 * IN PNDIS_PACKET Packet,
3559 * OUT PUINT PhysicalBufferCount OPTIONAL,
3560 * OUT PUINT BufferCount OPTIONAL,
3561 * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
3562 * OUT PUINT TotalPacketLength OPTIONAL);
3563 */
3564 static __inline
3565 VOID
3566 NdisQueryPacket(
3567 IN PNDIS_PACKET Packet,
3568 OUT PUINT PhysicalBufferCount OPTIONAL,
3569 OUT PUINT BufferCount OPTIONAL,
3570 OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
3571 OUT PUINT TotalPacketLength OPTIONAL)
3572 {
3573 if (FirstBuffer)
3574 *FirstBuffer = Packet->Private.Head;
3575 if (TotalPacketLength || BufferCount || PhysicalBufferCount) {
3576 if (!Packet->Private.ValidCounts) {
3577 UINT Offset;
3578 UINT PacketLength;
3579 PNDIS_BUFFER NdisBuffer;
3580 UINT _PhysicalBufferCount = 0;
3581 UINT _TotalPacketLength = 0;
3582 UINT Count = 0;
3583
3584 for (NdisBuffer = Packet->Private.Head;
3585 NdisBuffer != (PNDIS_BUFFER)NULL;
3586 NdisBuffer = NdisBuffer->Next) {
3587 _PhysicalBufferCount += NDIS_BUFFER_TO_SPAN_PAGES(NdisBuffer);
3588 NdisQueryBufferOffset(NdisBuffer, &Offset, &PacketLength);
3589 _TotalPacketLength += PacketLength;
3590 Count++;
3591 }
3592 Packet->Private.PhysicalCount = _PhysicalBufferCount;
3593 Packet->Private.TotalLength = _TotalPacketLength;
3594 Packet->Private.Count = Count;
3595 Packet->Private.ValidCounts = TRUE;
3596 }
3597
3598 if (PhysicalBufferCount)
3599 *PhysicalBufferCount = Packet->Private.PhysicalCount;
3600
3601 if (BufferCount)
3602 *BufferCount = Packet->Private.Count;
3603
3604 if (TotalPacketLength)
3605 *TotalPacketLength = Packet->Private.TotalLength;
3606 }
3607 }
3608
3609 /*
3610 * VOID
3611 * NdisQueryPacketLength(
3612 * IN PNDIS_PACKET Packet,
3613 * OUT PUINT PhysicalBufferCount OPTIONAL,
3614 * OUT PUINT BufferCount OPTIONAL,
3615 * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
3616 * OUT PUINT TotalPacketLength OPTIONAL);
3617 */
3618 #define NdisQueryPacketLength(_Packet, \
3619 _TotalPacketLength) \
3620 { \
3621 if (!(_Packet)->Private.ValidCounts) { \
3622 NdisQueryPacket(_Packet, NULL, NULL, NULL, _TotalPacketLength); \
3623 } \
3624 else *(_TotalPacketLength) = (_Packet)->Private.TotalLength; \
3625 }
3626
3627 #endif /* NDIS_LEGACY_DRIVER */
3628
3629 /* Memory management routines */
3630
3631 /*
3632 NDISAPI
3633 VOID
3634 NTAPI
3635 NdisCreateLookaheadBufferFromSharedMemory(
3636 IN PVOID pSharedMemory,
3637 IN UINT LookaheadLength,
3638 OUT PVOID *pLookaheadBuffer);
3639 */
3640 #define NdisCreateLookaheadBufferFromSharedMemory(_S, _L, _B) ((*(_B)) = (_S))
3641
3642 NDISAPI
3643 VOID
3644 NTAPI
3645 NdisDestroyLookaheadBufferFromSharedMemory(
3646 IN PVOID pLookaheadBuffer);
3647
3648 #if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_ARM) || defined(_M_PPC)
3649
3650 /*
3651 * VOID
3652 * NdisMoveMappedMemory(
3653 * OUT PVOID Destination,
3654 * IN PVOID Source,
3655 * IN ULONG Length);
3656 */
3657 #define NdisMoveMappedMemory(Destination, Source, Length) \
3658 RtlCopyMemory(Destination, Source, Length)
3659
3660 /*
3661 * VOID
3662 * NdisZeroMappedMemory(
3663 * IN PVOID Destination,
3664 * IN ULONG Length);
3665 */
3666 #define NdisZeroMappedMemory(Destination, Length) \
3667 RtlZeroMemory(Destination, Length)
3668
3669 #else
3670
3671 #define NdisMoveMappedMemory(Destination, Source, Length) \
3672 { \
3673 PUCHAR _Dest = Destination, _Src = Source, _End = _Dest + Length; \
3674 while (_Dest < _End) \
3675 *_Dest++ = _Src++; \
3676 }
3677
3678 #define NdisZeroMappedMemory(Destination, Length) \
3679 { \
3680 PUCHAR _Dest = Destination, _End = _Dest + Length; \
3681 while (_Dest < _End) \
3682 *_Dest++ = 0; \
3683 }
3684
3685 #endif /* _M_IX86 or _M_AMD64 */
3686
3687 /*
3688 * VOID
3689 * NdisMoveFromMappedMemory(
3690 * OUT PVOID Destination,
3691 * IN PVOID Source,
3692 * IN ULONG Length);
3693 */
3694 #define NdisMoveFromMappedMemory(Destination, Source, Length) \
3695 NdisMoveMappedMemory(Destination, Source, Length)
3696
3697 /*
3698 * VOID
3699 * NdisMoveToMappedMemory(
3700 * OUT PVOID Destination,
3701 * IN PVOID Source,
3702 * IN ULONG Length);
3703 */
3704 #define NdisMoveToMappedMemory(Destination, Source, Length) \
3705 NdisMoveMappedMemory(Destination, Source, Length)
3706
3707 /*
3708 * VOID
3709 * NdisMUpdateSharedMemory(
3710 * IN NDIS_HANDLE MiniportAdapterHandle,
3711 * IN ULONG Length,
3712 * IN PVOID VirtualAddress,
3713 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
3714 */
3715 #define NdisMUpdateSharedMemory(_H, _L, _V, _P) \
3716 NdisUpdateSharedMemory(_H, _L, _V, _P)
3717
3718 _When_(MemoryFlags==0, _IRQL_requires_max_(DISPATCH_LEVEL))
3719 _When_(MemoryFlags==NDIS_MEMORY_CONTIGUOUS, _IRQL_requires_(PASSIVE_LEVEL))
3720 _When_(MemoryFlags==NDIS_MEMORY_NONCACHED, _IRQL_requires_max_(APC_LEVEL))
3721 NDISAPI
3722 VOID
3723 NTAPI
3724 NdisFreeMemory(
3725 _In_reads_bytes_(Length) __drv_freesMem(Mem) PVOID VirtualAddress,
3726 _In_ UINT Length,
3727 _In_ _Pre_satisfies_(MemoryFlags == 0 || MemoryFlags == NDIS_MEMORY_NONCACHED || MemoryFlags == NDIS_MEMORY_CONTIGUOUS)
3728 UINT MemoryFlags);
3729
3730 NDISAPI
3731 VOID
3732 NTAPI
3733 NdisFreeMemoryWithTag(
3734 IN PVOID VirtualAddress,
3735 IN ULONG Tag);
3736
3737 NDISAPI
3738 VOID
3739 NTAPI
3740 NdisImmediateReadSharedMemory(
3741 IN NDIS_HANDLE WrapperConfigurationContext,
3742 IN ULONG SharedMemoryAddress,
3743 OUT PUCHAR Buffer,
3744 IN ULONG Length);
3745
3746 NDISAPI
3747 VOID
3748 NTAPI
3749 NdisImmediateWriteSharedMemory(
3750 IN NDIS_HANDLE WrapperConfigurationContext,
3751 IN ULONG SharedMemoryAddress,
3752 IN PUCHAR Buffer,
3753 IN ULONG Length);
3754
3755 _IRQL_requires_(PASSIVE_LEVEL)
3756 NDISAPI
3757 VOID
3758 NTAPI
3759 NdisMAllocateSharedMemory(
3760 _In_ NDIS_HANDLE MiniportAdapterHandle,
3761 _In_ ULONG Length,
3762 _In_ BOOLEAN Cached,
3763 _Outptr_result_bytebuffer_(Length) _At_(*VirtualAddress, _Must_inspect_result_)
3764 PVOID *VirtualAddress,
3765 _Out_ _At_(*PhysicalAddress, _Must_inspect_result_)
3766 PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
3767
3768 _IRQL_requires_max_(DISPATCH_LEVEL)
3769 NDISAPI
3770 NDIS_STATUS
3771 NTAPI
3772 NdisMAllocateSharedMemoryAsync(
3773 _In_ NDIS_HANDLE MiniportAdapterHandle,
3774 _In_ ULONG Length,
3775 _In_ BOOLEAN Cached,
3776 _In_ PVOID Context);
3777
3778 #if defined(NDIS50)
3779
3780 #define NdisUpdateSharedMemory(NdisAdapterHandle, \
3781 Length, \
3782 VirtualAddress, \
3783 PhysicalAddress)
3784
3785 #else
3786
3787 NDISAPI
3788 VOID
3789 NTAPI
3790 NdisUpdateSharedMemory(
3791 IN NDIS_HANDLE NdisAdapterHandle,
3792 IN ULONG Length,
3793 IN PVOID VirtualAddress,
3794 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
3795
3796 #endif /* defined(NDIS50) */
3797
3798 /*
3799 * ULONG
3800 * NdisGetPhysicalAddressHigh(
3801 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
3802 */
3803 #define NdisGetPhysicalAddressHigh(PhysicalAddress) \
3804 ((PhysicalAddress).HighPart)
3805
3806 /*
3807 * VOID
3808 * NdisSetPhysicalAddressHigh(
3809 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
3810 * IN ULONG Value);
3811 */
3812 #define NdisSetPhysicalAddressHigh(PhysicalAddress, Value) \
3813 ((PhysicalAddress).HighPart) = (Value)
3814
3815 /*
3816 * ULONG
3817 * NdisGetPhysicalAddressLow(
3818 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
3819 */
3820 #define NdisGetPhysicalAddressLow(PhysicalAddress) \
3821 ((PhysicalAddress).LowPart)
3822
3823
3824 /*
3825 * VOID
3826 * NdisSetPhysicalAddressLow(
3827 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
3828 * IN ULONG Value);
3829 */
3830 #define NdisSetPhysicalAddressLow(PhysicalAddress, Value) \
3831 ((PhysicalAddress).LowPart) = (Value)
3832
3833 /*
3834 * VOID
3835 * NDIS_PHYSICAL_ADDRESS_CONST(
3836 * IN ULONG Low,
3837 * IN LONG High);
3838 */
3839 #define NDIS_PHYSICAL_ADDRESS_CONST(Low, High) \
3840 { {(ULONG)(Low), (LONG)(High)} }
3841
3842 /*
3843 * ULONG
3844 * NdisEqualMemory(
3845 * IN CONST VOID *Source1,
3846 * IN CONST VOID *Source2,
3847 * IN ULONG Length);
3848 */
3849 #define NdisEqualMemory(Source1, Source2, Length) \
3850 RtlEqualMemory(Source1, Source2, Length)
3851
3852 /*
3853 * VOID
3854 * NdisFillMemory(
3855 * IN PVOID Destination,
3856 * IN ULONG Length,
3857 * IN UCHAR Fill);
3858 */
3859 #define NdisFillMemory(Destination, Length, Fill) \
3860 RtlFillMemory(Destination, Length, Fill)
3861
3862 /*
3863 * VOID
3864 * NdisMoveMemory(
3865 * OUT PVOID Destination,
3866 * IN PVOID Source,
3867 * IN ULONG Length);
3868 */
3869 #define NdisMoveMemory(Destination, Source, Length) \
3870 RtlCopyMemory(Destination, Source, Length)
3871
3872
3873 /*
3874 * VOID
3875 * NdisRetrieveUlong(
3876 * IN PULONG DestinationAddress,
3877 * IN PULONG SourceAddress);
3878 */
3879 #define NdisRetrieveUlong(DestinationAddress, SourceAddress) \
3880 RtlRetrieveUlong(DestinationAddress, SourceAddress)
3881
3882
3883 /*
3884 * VOID
3885 * NdisStoreUlong(
3886 * IN PULONG DestinationAddress,
3887 * IN ULONG Value);
3888 */
3889 #define NdisStoreUlong(DestinationAddress, Value) \
3890 RtlStoreUlong(DestinationAddress, Value)
3891
3892
3893 /*
3894 * VOID
3895 * NdisZeroMemory(
3896 * IN PVOID Destination,
3897 * IN ULONG Length)
3898 */
3899 #define NdisZeroMemory(Destination, Length) \
3900 RtlZeroMemory(Destination, Length)
3901
3902 typedef VOID
3903 (NTAPI *NDIS_BLOCK_INITIALIZER) (
3904 IN PUCHAR Block,
3905 IN SIZE_T NumberOfBytes
3906 );
3907
3908 /* Configuration routines */
3909
3910 #if NDIS_LEGACY_DRIVER
3911 _IRQL_requires_(PASSIVE_LEVEL)
3912 _Success_(*Status >= 0)
3913 NDISAPI
3914 VOID
3915 NTAPI
3916 NdisOpenConfiguration(
3917 _At_(*Status, _Must_inspect_result_) _Out_ PNDIS_STATUS Status,
3918 _Out_ PNDIS_HANDLE ConfigurationHandle,
3919 _In_ NDIS_HANDLE WrapperConfigurationContext);
3920 #endif
3921
3922 _IRQL_requires_(PASSIVE_LEVEL)
3923 _Success_(*Status >= 0)
3924 NDISAPI
3925 VOID
3926 NTAPI
3927 NdisReadNetworkAddress(
3928 _At_(*Status, _Must_inspect_result_) _Out_ PNDIS_STATUS Status,
3929 _Outptr_result_bytebuffer_to_(*NetworkAddressLength, *NetworkAddressLength)
3930 PVOID *NetworkAddress,
3931 _Out_ PUINT NetworkAddressLength,
3932 _In_ NDIS_HANDLE ConfigurationHandle);
3933
3934 NDISAPI
3935 VOID
3936 NTAPI
3937 NdisReadEisaSlotInformation(
3938 OUT PNDIS_STATUS Status,
3939 IN NDIS_HANDLE WrapperConfigurationContext,
3940 OUT PUINT SlotNumber,
3941 OUT PNDIS_EISA_FUNCTION_INFORMATION EisaData);
3942
3943 NDISAPI
3944 VOID
3945 NTAPI
3946 NdisReadEisaSlotInformationEx(
3947 OUT PNDIS_STATUS Status,
3948 IN NDIS_HANDLE WrapperConfigurationContext,
3949 OUT PUINT SlotNumber,
3950 OUT PNDIS_EISA_FUNCTION_INFORMATION *EisaData,
3951 OUT PUINT NumberOfFunctions);
3952
3953 #if NDIS_LEGACY_MINIPORT
3954
3955 _IRQL_requires_max_(DISPATCH_LEVEL)
3956 NDISAPI
3957 ULONG
3958 NTAPI
3959 NdisReadPciSlotInformation(
3960 _In_ NDIS_HANDLE NdisAdapterHandle,
3961 _In_ ULONG SlotNumber,
3962 _In_ ULONG Offset,
3963 _Out_writes_bytes_(Length) PVOID Buffer,
3964 _In_ ULONG Length);
3965
3966 _IRQL_requires_max_(DISPATCH_LEVEL)
3967 NDISAPI
3968 ULONG
3969 NTAPI
3970 NdisWritePciSlotInformation(
3971 _In_ NDIS_HANDLE NdisAdapterHandle,
3972 _In_ ULONG SlotNumber,
3973 _In_ ULONG Offset,
3974 _In_reads_bytes_(Length) PVOID Buffer,
3975 _In_ ULONG Length);
3976
3977 _IRQL_requires_max_(DISPATCH_LEVEL)
3978 NDISAPI
3979 ULONG
3980 NTAPI
3981 NdisReadPcmciaAttributeMemory(
3982 _In_ NDIS_HANDLE NdisAdapterHandle,
3983 _In_ ULONG Offset,
3984 _Out_writes_bytes_(Length) PVOID Buffer,
3985 _In_ ULONG Length);
3986
3987 _IRQL_requires_max_(DISPATCH_LEVEL)
3988 NDISAPI
3989 ULONG
3990 NTAPI
3991 NdisWritePcmciaAttributeMemory(
3992 _In_ NDIS_HANDLE NdisAdapterHandle,
3993 _In_ ULONG Offset,
3994 _In_reads_bytes_(Length) PVOID Buffer,
3995 _In_ ULONG Length);
3996
3997 #endif /* NDIS_LEGACY_MINIPORT */
3998
3999 /* String management routines */
4000
4001 /*
4002 NDISAPI
4003 NDIS_STATUS
4004 NTAPI
4005 NdisAnsiStringToUnicodeString(
4006 IN OUT PNDIS_STRING DestinationString,
4007 IN PNDIS_ANSI_STRING SourceString);
4008 */
4009 #define NdisAnsiStringToUnicodeString(_us, _as) RtlAnsiStringToUnicodeString(_us, _as, FALSE)
4010
4011 /*
4012 * BOOLEAN
4013 * NdisEqualString(
4014 * IN PNDIS_STRING String1,
4015 * IN PNDIS_STRING String2,
4016 * IN BOOLEAN CaseInsensitive);
4017 */
4018 #define NdisEqualString RtlEqualString
4019
4020 #define NdisEqualUnicodeString RtlEqualUnicodeString
4021
4022 /*
4023 NDISAPI
4024 VOID
4025 NTAPI
4026 NdisInitAnsiString(
4027 IN OUT PNDIS_ANSI_STRING DestinationString,
4028 IN PCSTR SourceString);
4029 */
4030 #define NdisInitAnsiString RtlInitString
4031
4032 NDISAPI
4033 VOID
4034 NTAPI
4035 NdisInitUnicodeString(
4036 IN OUT PNDIS_STRING DestinationString,
4037 IN PCWSTR SourceString);
4038
4039 /*
4040 NDISAPI
4041 NDIS_STATUS
4042 NTAPI
4043 NdisUnicodeStringToAnsiString(
4044 IN OUT PNDIS_ANSI_STRING DestinationString,
4045 IN PNDIS_STRING SourceString);
4046 */
4047 #define NdisUnicodeStringToAnsiString(_as, _us) RtlUnicodeStringToAnsiString(_as, _us, FALSE)
4048
4049 #define NdisFreeString(_s) NdisFreeMemory((_s).Buffer, (_s).MaximumLength, 0)
4050 #define NdisPrintString(_s) DbgPrint("%ls", (_s).Buffer)
4051
4052 /* Spin lock reoutines */
4053
4054 /*
4055 NDISAPI
4056 VOID
4057 NTAPI
4058 NdisAllocateSpinLock(
4059 IN PNDIS_SPIN_LOCK SpinLock);
4060 */
4061 #define NdisAllocateSpinLock(_SpinLock) KeInitializeSpinLock(&(_SpinLock)->SpinLock)
4062
4063 /*
4064 NDISAPI
4065 VOID
4066 NTAPI
4067 NdisFreeSpinLock(
4068 IN PNDIS_SPIN_LOCK SpinLock);
4069 */
4070 #define NdisFreeSpinLock(_SpinLock)
4071
4072 /*
4073 NDISAPI
4074 VOID
4075 NTAPI
4076 NdisAcquireSpinLock(
4077 IN PNDIS_SPIN_LOCK SpinLock);
4078 */
4079 #define NdisAcquireSpinLock(_SpinLock) KeAcquireSpinLock(&(_SpinLock)->SpinLock, &(_SpinLock)->OldIrql)
4080
4081 /*
4082 NDISAPI
4083 VOID
4084 NTAPI
4085 NdisReleaseSpinLock(
4086 IN PNDIS_SPIN_LOCK SpinLock);
4087 */
4088 #define NdisReleaseSpinLock(_SpinLock) KeReleaseSpinLock(&(_SpinLock)->SpinLock,(_SpinLock)->OldIrql)
4089
4090 /*
4091 NDISAPI
4092 VOID
4093 NTAPI
4094 NdisDprAcquireSpinLock(
4095 IN PNDIS_SPIN_LOCK SpinLock);
4096 */
4097 #define NdisDprAcquireSpinLock(_SpinLock) KeAcquireSpinLockAtDpcLevel(&(_SpinLock)->SpinLock)
4098
4099 /*
4100 NDISAPI
4101 VOID
4102 NTAPI
4103 NdisDprReleaseSpinLock(
4104 IN PNDIS_SPIN_LOCK SpinLock);
4105 */
4106 #define NdisDprReleaseSpinLock(_SpinLock) KeReleaseSpinLockFromDpcLevel(&(_SpinLock)->SpinLock)
4107
4108 /* I/O routines */
4109
4110 /*
4111 * VOID
4112 * NdisRawReadPortBufferUchar(
4113 * IN ULONG Port,
4114 * OUT PUCHAR Buffer,
4115 * IN ULONG Length);
4116 */
4117 #define NdisRawReadPortBufferUchar(Port, Buffer, Length) \
4118 READ_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
4119
4120 /*
4121 * VOID
4122 * NdisRawReadPortBufferUlong(
4123 * IN ULONG Port,
4124 * OUT PULONG Buffer,
4125 * IN ULONG Length);
4126 */
4127 #define NdisRawReadPortBufferUlong(Port, Buffer, Length) \
4128 READ_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
4129
4130 /*
4131 * VOID
4132 * NdisRawReadPortBufferUshort(
4133 * IN ULONG Port,
4134 * OUT PUSHORT Buffer,
4135 * IN ULONG Length);
4136 */
4137 #define NdisRawReadPortBufferUshort(Port, Buffer, Length) \
4138 READ_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
4139
4140 /*
4141 * VOID
4142 * NdisRawReadPortUchar(
4143 * IN ULONG Port,
4144 * OUT PUCHAR Data);
4145 */
4146 #define NdisRawReadPortUchar(Port, Data) \
4147 *(Data) = READ_PORT_UCHAR((PUCHAR)(Port))
4148
4149 /*
4150 * VOID
4151 * NdisRawReadPortUlong(
4152 * IN ULONG Port,
4153 * OUT PULONG Data);
4154 */
4155 #define NdisRawReadPortUlong(Port, Data) \
4156 *(Data) = READ_PORT_ULONG((PULONG)(Port))
4157
4158 /*
4159 * VOID
4160 * NdisRawReadPortUshort(
4161 * IN ULONG Port,
4162 * OUT PUSHORT Data);
4163 */
4164 #define NdisRawReadPortUshort(Port, Data) \
4165 *(Data) = READ_PORT_USHORT((PUSHORT)(Port))
4166
4167 /*
4168 * VOID
4169 * NdisRawWritePortBufferUchar(
4170 * IN ULONG Port,
4171 * IN PUCHAR Buffer,
4172 * IN ULONG Length);
4173 */
4174 #define NdisRawWritePortBufferUchar(Port, Buffer, Length) \
4175 WRITE_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
4176
4177 /*
4178 * VOID
4179 * NdisRawWritePortBufferUlong(
4180 * IN ULONG Port,
4181 * IN PULONG Buffer,
4182 * IN ULONG Length);
4183 */
4184 #define NdisRawWritePortBufferUlong(Port, Buffer, Length) \
4185 WRITE_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
4186
4187 /*
4188 * VOID
4189 * NdisRawWritePortBufferUshort(
4190 * IN ULONG Port,
4191 * IN PUSHORT Buffer,
4192 * IN ULONG Length);
4193 */
4194 #define NdisRawWritePortBufferUshort(Port, Buffer, Length) \
4195 WRITE_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
4196
4197 /*
4198 * VOID
4199 * NdisRawWritePortUchar(
4200 * IN ULONG Port,
4201 * IN UCHAR Data);
4202 */
4203 #define NdisRawWritePortUchar(Port, Data) \
4204 WRITE_PORT_UCHAR((PUCHAR)(Port), (UCHAR)(Data))
4205
4206 /*
4207 * VOID
4208 * NdisRawWritePortUlong(
4209 * IN ULONG Port,
4210 * IN ULONG Data);
4211 */
4212 #define NdisRawWritePortUlong(Port, Data) \
4213 WRITE_PORT_ULONG((PULONG)(Port), (ULONG)(Data))
4214
4215 /*
4216 * VOID
4217 * NdisRawWritePortUshort(
4218 * IN ULONG Port,
4219 * IN USHORT Data);
4220 */
4221 #define NdisRawWritePortUshort(Port, Data) \
4222 WRITE_PORT_USHORT((PUSHORT)(Port), (USHORT)(Data))
4223
4224
4225 /*
4226 * VOID
4227 * NdisReadRegisterUchar(
4228 * IN PUCHAR Register,
4229 * OUT PUCHAR Data);
4230 */
4231 #define NdisReadRegisterUchar(Register, Data) \
4232 *(Data) = *(Register)
4233
4234 /*
4235 * VOID
4236 * NdisReadRegisterUlong(
4237 * IN PULONG Register,
4238 * OUT PULONG Data);
4239 */
4240 #define NdisReadRegisterUlong(Register, Data) \
4241 *(Data) = *(Register)
4242
4243 /*
4244 * VOID
4245 * NdisReadRegisterUshort(
4246 * IN PUSHORT Register,
4247 * OUT PUSHORT Data);
4248 */
4249 #define NdisReadRegisterUshort(Register, Data) \
4250 *(Data) = *(Register)
4251
4252 /*
4253 * VOID
4254 * NdisReadRegisterUchar(
4255 * IN PUCHAR Register,
4256 * IN UCHAR Data);
4257 */
4258 #define NdisWriteRegisterUchar(Register, Data) \
4259 WRITE_REGISTER_UCHAR((Register), (Data))
4260
4261 /*
4262 * VOID
4263 * NdisReadRegisterUlong(
4264 * IN PULONG Register,
4265 * IN ULONG Data);
4266 */
4267 #define NdisWriteRegisterUlong(Register, Data) \
4268 WRITE_REGISTER_ULONG((Register), (Data))
4269
4270 /*
4271 * VOID
4272 * NdisReadRegisterUshort(
4273 * IN PUSHORT Register,
4274 * IN USHORT Data);
4275 */
4276 #define NdisWriteRegisterUshort(Register, Data) \
4277 WRITE_REGISTER_USHORT((Register), (Data))
4278
4279
4280 /* Linked lists */
4281
4282 /*
4283 * VOID
4284 * NdisInitializeListHead(
4285 * IN PLIST_ENTRY ListHead);
4286 */
4287 #define NdisInitializeListHead InitializeListHead
4288
4289 /*
4290 * PLIST_ENTRY
4291 * NdisInterlockedInsertHeadList(
4292 * IN PLIST_ENTRY ListHead,
4293 * IN PLIST_ENTRY ListEntry,
4294 * IN PNDIS_SPIN_LOCK SpinLock);
4295 */
4296 #define NdisInterlockedInsertHeadList(_ListHead, _ListEntry, _SpinLock) \
4297 ExInterlockedInsertHeadList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
4298
4299 /*
4300 * PLIST_ENTRY
4301 * NdisInterlockedInsertTailList(
4302 * IN PLIST_ENTRY ListHead,
4303 * IN PLIST_ENTRY ListEntry,
4304 * IN PNDIS_SPIN_LOCK SpinLock);
4305 */
4306 #define NdisInterlockedInsertTailList(_ListHead, _ListEntry, _SpinLock) \
4307 ExInterlockedInsertTailList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
4308
4309 /*
4310 * PLIST_ENTRY
4311 * NdisInterlockedRemoveHeadList(
4312 * IN PLIST_ENTRY ListHead,
4313 * IN PNDIS_SPIN_LOCK SpinLock);
4314 */
4315 #define NdisInterlockedRemoveHeadList(_ListHead, _SpinLock) \
4316 ExInterlockedRemoveHeadList(_ListHead, &(_SpinLock)->SpinLock)
4317
4318 /*
4319 * VOID
4320 * NdisInitializeSListHead(
4321 * IN PSLIST_HEADER SListHead);
4322 */
4323 #define NdisInitializeSListHead(SListHead) ExInitializeSListHead(SListHead)
4324
4325 /*
4326 * USHORT NdisQueryDepthSList(
4327 * IN PSLIST_HEADER SListHead);
4328 */
4329 #define NdisQueryDepthSList(SListHead) ExQueryDepthSList(SListHead)
4330
4331 #define NdisInterlockedPushEntryList(ListHead, ListEntry, Lock) \
4332 ExInterlockedPushEntryList(ListHead, ListEntry, &(Lock)->SpinLock)
4333
4334 #define NdisInterlockedPopEntryList(ListHead, Lock) \
4335 ExInterlockedPopEntryList(ListHead, &(Lock)->SpinLock)
4336
4337 /* Non-paged lookaside lists */
4338
4339 #define NdisInitializeNPagedLookasideList(_L, _AR, _FR, _Fl, _S, _T, _D) \
4340 ExInitializeNPagedLookasideList(_L, _AR, _FR, _Fl, _S, _T, _D)
4341 #define NdisDeleteNPagedLookasideList(_L) ExDeleteNPagedLookasideList(_L)
4342 #define NdisAllocateFromNPagedLookasideList(_L) ExAllocateFromNPagedLookasideList(_L)
4343 #define NdisFreeToNPagedLookasideList(_L, _E) ExFreeToNPagedLookasideList(_L, _E)
4344
4345 /* Interlocked routines */
4346
4347 /*
4348 * LONG
4349 * NdisInterlockedDecrement(
4350 * IN PLONG Addend);
4351 */
4352 #define NdisInterlockedDecrement(Addend) InterlockedDecrement(Addend)
4353
4354 /*
4355 * LONG
4356 * NdisInterlockedIncrement(
4357 * IN PLONG Addend);
4358 */
4359 #define NdisInterlockedIncrement(Addend) InterlockedIncrement(Addend)
4360
4361 /*
4362 * VOID
4363 * NdisInterlockedAddUlong(
4364 * IN PULONG Addend,
4365 * IN ULONG Increment,
4366 * IN PNDIS_SPIN_LOCK SpinLock);
4367 */
4368 #define NdisInterlockedAddUlong(_Addend, _Increment, _SpinLock) \
4369 ExInterlockedAddUlong(_Addend, _Increment, &(_SpinLock)->SpinLock)
4370
4371 /* Miscellaneous routines */
4372
4373 _IRQL_requires_(PASSIVE_LEVEL)
4374 NDISAPI
4375 VOID
4376 NTAPI
4377 NdisCloseConfiguration(
4378 _In_ __drv_freesMem(mem) NDIS_HANDLE ConfigurationHandle);
4379
4380 _IRQL_requires_(PASSIVE_LEVEL)
4381 _Success_(*Status >= 0)
4382 NDISAPI
4383 VOID
4384 NTAPI
4385 NdisReadConfiguration(
4386 _At_(*Status, _Must_inspect_result_) _Out_ PNDIS_STATUS Status,
4387 _Out_ PNDIS_CONFIGURATION_PARAMETER *ParameterValue,
4388 _In_ NDIS_HANDLE ConfigurationHandle,
4389 _In_ PNDIS_STRING Keyword,
4390 _In_ NDIS_PARAMETER_TYPE ParameterType);
4391
4392 _IRQL_requires_(PASSIVE_LEVEL)
4393 _Success_(*Status >= 0)
4394 NDISAPI
4395 VOID
4396 NTAPI
4397 NdisWriteConfiguration(
4398 _At_(*Status, _Must_inspect_result_) _Out_ PNDIS_STATUS Status,
4399 _In_ NDIS_HANDLE WrapperConfigurationContext,
4400 _In_ PNDIS_STRING Keyword,
4401 _In_ PNDIS_CONFIGURATION_PARAMETER ParameterValue);
4402
4403 _IRQL_requires_max_(DISPATCH_LEVEL)
4404 NDISAPI
4405 VOID
4406 __cdecl
4407 NdisWriteErrorLogEntry(
4408 _In_ NDIS_HANDLE NdisAdapterHandle,
4409 _In_ NDIS_ERROR_CODE ErrorCode,
4410 _In_ ULONG NumberOfErrorValues,
4411 ...);
4412
4413 _IRQL_requires_(PASSIVE_LEVEL)
4414 NDISAPI
4415 VOID
4416 NTAPI
4417 NdisInitializeString(
4418 _Out_ _At_(Destination->Buffer, __drv_allocatesMem(Mem)) PNDIS_STRING Destination,
4419 _In_opt_z_ PUCHAR Source);
4420
4421 /*
4422 * VOID
4423 * NdisStallExecution(
4424 * IN UINT MicrosecondsToStall)
4425 */
4426 #define NdisStallExecution KeStallExecutionProcessor
4427
4428 /*
4429 NDISAPI
4430 VOID
4431 NTAPI
4432 NdisGetCurrentSystemTime(
4433 IN PLARGE_INTEGER pSystemTime);
4434 */
4435 #define NdisGetCurrentSystemTime KeQuerySystemTime
4436
4437 #if NDIS_SUPPORT_60_COMPATIBLE_API
4438 _IRQL_requires_(PASSIVE_LEVEL)
4439 NDISAPI
4440 CCHAR
4441 NTAPI
4442 NdisSystemProcessorCount(VOID);
4443 #endif
4444
4445 NDISAPI
4446 VOID
4447 NTAPI
4448 NdisGetCurrentProcessorCpuUsage(
4449 OUT PULONG pCpuUsage);
4450
4451 /* NDIS helper macros */
4452
4453 /*
4454 * VOID
4455 * NDIS_INIT_FUNCTION(FunctionName)
4456 */
4457 #define NDIS_INIT_FUNCTION(FunctionName) \
4458 alloc_text(init, FunctionName)
4459
4460 /*
4461 * VOID
4462 * NDIS_PAGABLE_FUNCTION(FunctionName)
4463 */
4464 #define NDIS_PAGEABLE_FUNCTION(FunctionName) \
4465 alloc_text(page, FunctionName)
4466
4467 #define NDIS_PAGABLE_FUNCTION NDIS_PAGEABLE_FUNCTION
4468
4469
4470 /* NDIS 4.0 extensions */
4471
4472 _IRQL_requires_max_(DISPATCH_LEVEL)
4473 NDISAPI
4474 VOID
4475 NTAPI
4476 NdisMFreeSharedMemory(
4477 _In_ NDIS_HANDLE MiniportAdapterHandle,
4478 _In_ ULONG Length,
4479 _In_ BOOLEAN Cached,
4480 _In_reads_bytes_(Length) PVOID VirtualAddress,
4481 _In_ NDIS_PHYSICAL_ADDRESS PhysicalAddress);
4482
4483 NDISAPI
4484 VOID
4485 NTAPI
4486 NdisMWanIndicateReceive(
4487 OUT PNDIS_STATUS Status,
4488 IN NDIS_HANDLE MiniportAdapterHandle,
4489 IN NDIS_HANDLE NdisLinkContext,
4490 IN PUCHAR PacketBuffer,
4491 IN UINT PacketSize);
4492
4493 NDISAPI
4494 VOID
4495 NTAPI
4496 NdisMWanIndicateReceiveComplete(
4497 IN NDIS_HANDLE MiniportAdapterHandle,
4498 IN NDIS_HANDLE NdisLinkContext);
4499
4500 NDISAPI
4501 VOID
4502 NTAPI
4503 NdisMWanSendComplete(
4504 IN NDIS_HANDLE MiniportAdapterHandle,
4505 IN PNDIS_WAN_PACKET Packet,
4506 IN NDIS_STATUS Status);
4507
4508 NDISAPI
4509 NDIS_STATUS
4510 NTAPI
4511 NdisPciAssignResources(
4512 IN NDIS_HANDLE NdisMacHandle,
4513 IN NDIS_HANDLE NdisWrapperHandle,
4514 IN NDIS_HANDLE WrapperConfigurationContext,
4515 IN ULONG SlotNumber,
4516 OUT PNDIS_RESOURCE_LIST *AssignedResources);
4517
4518
4519 /* NDIS 5.0 extensions */
4520
4521 _IRQL_requires_max_(DISPATCH_LEVEL)
4522 NDISAPI
4523 NDIS_STATUS
4524 NTAPI
4525 NdisAllocateMemoryWithTag(
4526 _At_(*VirtualAddress, __drv_allocatesMem(Mem)) _Outptr_result_bytebuffer_(Length)
4527 PVOID *VirtualAddress,
4528 _In_ UINT Length,
4529 _In_ ULONG Tag);
4530
4531 _IRQL_requires_max_(DISPATCH_LEVEL)
4532 NDISAPI
4533 VOID
4534 NTAPI
4535 NdisGetCurrentProcessorCounts(
4536 _Out_ PULONG pIdleCount,
4537 _Out_ PULONG pKernelAndUser,
4538 _Out_ PULONG pIndex);
4539
4540 #if NDIS_LEGACY_DRIVER
4541 NDISAPI
4542 VOID
4543 NTAPI
4544 NdisGetSystemUpTime(
4545 OUT PULONG pSystemUpTime);
4546 #endif
4547
4548 #if NDIS_SUPPORT_60_COMPATIBLE_API
4549
4550 _IRQL_requires_max_(DISPATCH_LEVEL)
4551 _IRQL_raises_(DISPATCH_LEVEL)
4552 _When_(fWrite, _Acquires_exclusive_lock_(*Lock))
4553 _When_(!fWrite, _Acquires_shared_lock_(*Lock))
4554 NDISAPI
4555 VOID
4556 NTAPI
4557 NdisAcquireReadWriteLock(
4558 _Inout_ PNDIS_RW_LOCK Lock,
4559 _In_ BOOLEAN fWrite,
4560 _Out_ _IRQL_saves_ PLOCK_STATE LockState);
4561
4562 _IRQL_requires_max_(DISPATCH_LEVEL)
4563 NDISAPI
4564 VOID
4565 NTAPI
4566 NdisInitializeReadWriteLock(
4567 _Out_ PNDIS_RW_LOCK Lock);
4568
4569 _IRQL_requires_(DISPATCH_LEVEL)
4570 _Requires_lock_held_(*Lock)
4571 _Releases_lock_(*Lock)
4572 NDISAPI
4573 VOID
4574 NTAPI
4575 NdisReleaseReadWriteLock(
4576 _Inout_ PNDIS_RW_LOCK Lock,
4577 _In_ _IRQL_restores_ PLOCK_STATE LockState);
4578
4579 #if NDIS_SUPPORT_NDIS6
4580
4581 NDISAPI
4582 VOID
4583 NTAPI
4584 NdisDprAcquireReadWriteLock(
4585 IN PNDIS_RW_LOCK Lock,
4586 IN BOOLEAN fWrite,
4587 IN PLOCK_STATE LockState);
4588
4589 NDISAPI
4590 VOID
4591 NTAPI
4592 NdisDprReleaseReadWriteLock(
4593 IN PNDIS_RW_LOCK Lock,
4594 IN PLOCK_STATE LockState);
4595
4596 #endif /* NDIS_SUPPORT_NDIS6 */
4597
4598 #endif /* NDIS_SUPPORT_60_COMPATIBLE_API */
4599
4600 _IRQL_requires_(PASSIVE_LEVEL)
4601 NDISAPI
4602 NDIS_STATUS
4603 NTAPI
4604 NdisMDeregisterDevice(
4605 _In_ NDIS_HANDLE NdisDeviceHandle);
4606
4607 _IRQL_requires_(PASSIVE_LEVEL)
4608 NDISAPI
4609 VOID
4610 NTAPI
4611 NdisMGetDeviceProperty(
4612 _In_ NDIS_HANDLE MiniportAdapterHandle,
4613 _Inout_opt_ PDEVICE_OBJECT *PhysicalDeviceObject,
4614 _Inout_opt_ PDEVICE_OBJECT *FunctionalDeviceObject,
4615 _Inout_opt_ PDEVICE_OBJECT *NextDeviceObject,
4616 _Inout_opt_ PCM_RESOURCE_LIST *AllocatedResources,
4617 _Inout_opt_ PCM_RESOURCE_LIST *AllocatedResourcesTranslated);
4618
4619 _IRQL_requires_(PASSIVE_LEVEL)
4620 NDISAPI
4621 NDIS_STATUS
4622 NTAPI
4623 NdisMInitializeScatterGatherDma(
4624 _In_ NDIS_HANDLE MiniportAdapterHandle,
4625 _In_ BOOLEAN Dma64BitAddresses,
4626 _In_ ULONG MaximumPhysicalMapping);
4627
4628 _IRQL_requires_max_(DISPATCH_LEVEL)
4629 NDISAPI
4630 NDIS_STATUS
4631 NTAPI
4632 NdisMPromoteMiniport(
4633 _In_ NDIS_HANDLE MiniportAdapterHandle);
4634
4635 _IRQL_requires_(PASSIVE_LEVEL)
4636 NDISAPI
4637 NDIS_STATUS
4638 NTAPI
4639 NdisMQueryAdapterInstanceName(
4640 _Out_ PNDIS_STRING AdapterInstanceName,
4641 _In_ NDIS_HANDLE MiniportAdapterHandle);
4642
4643 _IRQL_requires_(PASSIVE_LEVEL)
4644 NDISAPI
4645 NDIS_STATUS
4646 NTAPI
4647 NdisMRegisterDevice(
4648 _In_ NDIS_HANDLE NdisWrapperHandle,
4649 _In_ PNDIS_STRING DeviceName,
4650 _In_ PNDIS_STRING SymbolicName,
4651 _In_reads_(IRP_MJ_PNP) PDRIVER_DISPATCH *MajorFunctions,
4652 _Out_ PDEVICE_OBJECT *pDeviceObject,
4653 _Out_ NDIS_HANDLE *NdisDeviceHandle);
4654
4655 _IRQL_requires_(PASSIVE_LEVEL)
4656 NDISAPI
4657 VOID
4658 NTAPI
4659 NdisMRegisterUnloadHandler(
4660 _In_ NDIS_HANDLE NdisWrapperHandle,
4661 _In_ PDRIVER_UNLOAD UnloadHandler);
4662
4663 _IRQL_requires_max_(DISPATCH_LEVEL)
4664 NDISAPI
4665 NDIS_STATUS
4666 NTAPI
4667 NdisMRemoveMiniport(
4668 _In_ NDIS_HANDLE MiniportAdapterHandle);
4669
4670 _IRQL_requires_(PASSIVE_LEVEL)
4671 NDISAPI
4672 NDIS_STATUS
4673 NTAPI
4674 NdisMSetMiniportSecondary(
4675 _In_ NDIS_HANDLE MiniportAdapterHandle,
4676 _In_ NDIS_HANDLE PrimaryMiniportAdapterHandle);
4677
4678 _IRQL_requires_max_(APC_LEVEL)
4679 _Success_(*Status >= 0)
4680 NDISAPI
4681 VOID
4682 NTAPI
4683 NdisOpenConfigurationKeyByIndex(
4684 _At_(*Status, _Must_inspect_result_) _Out_ PNDIS_STATUS Status,
4685 _In_ NDIS_HANDLE ConfigurationHandle,
4686 _In_ ULONG Index,
4687 _Out_ PNDIS_STRING KeyName,
4688 _Out_ PNDIS_HANDLE KeyHandle);
4689
4690 _IRQL_requires_max_(APC_LEVEL)
4691 _Success_(*Status >= 0)
4692 NDISAPI
4693 VOID
4694 NTAPI
4695 NdisOpenConfigurationKeyByName(
4696 _At_(*Status, _Must_inspect_result_) _Out_ PNDIS_STATUS Status,
4697 _In_ NDIS_HANDLE ConfigurationHandle,
4698 _In_ PNDIS_STRING SubKeyName,
4699 _Out_ PNDIS_HANDLE SubKeyHandle);
4700
4701 _Must_inspect_result_
4702 _IRQL_requires_max_(DISPATCH_LEVEL)
4703 NDISAPI
4704 NDIS_STATUS
4705 NTAPI
4706 NdisQueryAdapterInstanceName(
4707 _Out_ PNDIS_STRING AdapterInstanceName,
4708 _In_ NDIS_HANDLE NdisBindingHandle);
4709
4710 _Must_inspect_result_
4711 NDISAPI
4712 NDIS_STATUS
4713 NTAPI
4714 NdisQueryBindInstanceName(
4715 _Out_ PNDIS_STRING pAdapterInstanceName,
4716 _In_ NDIS_HANDLE BindingContext);
4717
4718 _IRQL_requires_max_(DISPATCH_LEVEL)
4719 NDISAPI
4720 NDIS_STATUS
4721 NTAPI
4722 NdisWriteEventLogEntry(
4723 _In_ _Points_to_data_ PVOID LogHandle,
4724 _In_ NDIS_STATUS EventCode,
4725 _In_ ULONG UniqueEventValue,
4726 _In_ USHORT NumStrings,
4727 _In_opt_ PVOID StringsList,
4728 _In_ ULONG DataSize,
4729 _In_reads_bytes_opt_(DataSize) PVOID Data);
4730
4731 /* Connectionless services */
4732
4733 _Must_inspect_result_
4734 _IRQL_requires_max_(DISPATCH_LEVEL)
4735 NDISAPI
4736 NDIS_STATUS
4737 NTAPI
4738 NdisClAddParty(
4739 _In_ NDIS_HANDLE NdisVcHandle,
4740 _In_ NDIS_HANDLE ProtocolPartyContext,
4741 _In_ PCO_CALL_PARAMETERS CallParameters,
4742 _Out_ PNDIS_HANDLE NdisPartyHandle);
4743
4744 _Must_inspect_result_
4745 _IRQL_requires_max_(DISPATCH_LEVEL)
4746 NDISAPI
4747 NDIS_STATUS
4748 NTAPI
4749 NdisClCloseAddressFamily(
4750 _In_ NDIS_HANDLE NdisAfHandle);
4751
4752 _Must_inspect_result_
4753 _IRQL_requires_max_(DISPATCH_LEVEL)
4754 NDISAPI
4755 NDIS_STATUS
4756 NTAPI
4757 NdisClCloseCall(
4758 _In_ NDIS_HANDLE NdisVcHandle,
4759 _In_opt_ NDIS_HANDLE NdisPartyHandle,
4760 _In_reads_bytes_opt_(Size) PVOID Buffer,
4761 _In_ UINT Size);
4762
4763 _Must_inspect_result_
4764 _IRQL_requires_max_(DISPATCH_LEVEL)
4765 NDISAPI
4766 NDIS_STATUS
4767 NTAPI
4768 NdisClDeregisterSap(
4769 _In_ NDIS_HANDLE NdisSapHandle);
4770
4771 _Must_inspect_result_
4772 _IRQL_requires_max_(DISPATCH_LEVEL)
4773 NDISAPI
4774 NDIS_STATUS
4775 NTAPI
4776 NdisClDropParty(
4777 _In_ NDIS_HANDLE NdisPartyHandle,
4778 _In_reads_bytes_opt_(Size) PVOID Buffer,
4779 _In_opt_ UINT Size);
4780
4781 _IRQL_requires_max_(DISPATCH_LEVEL)
4782 NDISAPI
4783 VOID
4784 NTAPI
4785 NdisClIncomingCallComplete(
4786 _In_ NDIS_STATUS Status,
4787 _In_ NDIS_HANDLE NdisVcHandle,
4788 _In_ PCO_CALL_PARAMETERS CallParameters);
4789
4790 _Must_inspect_result_
4791 _IRQL_requires_max_(DISPATCH_LEVEL)
4792 NDISAPI
4793 NDIS_STATUS
4794 NTAPI
4795 NdisClMakeCall(
4796 _In_ NDIS_HANDLE NdisVcHandle,
4797 _Inout_ PCO_CALL_PARAMETERS CallParameters,
4798 _In_opt_ NDIS_HANDLE ProtocolPartyContext,
4799 _Out_opt_ PNDIS_HANDLE NdisPartyHandle);
4800
4801 _Must_inspect_result_
4802 _IRQL_requires_max_(DISPATCH_LEVEL)
4803 NDISAPI
4804 NDIS_STATUS
4805 NTAPI
4806 NdisClModifyCallQoS(
4807 _In_ NDIS_HANDLE NdisVcHandle,
4808 _In_ PCO_CALL_PARAMETERS CallParameters);
4809
4810 _Must_inspect_result_
4811 _IRQL_requires_(PASSIVE_LEVEL)
4812 NDISAPI
4813 NDIS_STATUS
4814 NTAPI
4815 NdisClOpenAddressFamily(
4816 _In_ NDIS_HANDLE NdisBindingHandle,
4817 _In_ PCO_ADDRESS_FAMILY AddressFamily,
4818 _In_ NDIS_HANDLE ProtocolAfContext,
4819 _In_ PNDIS_CLIENT_CHARACTERISTICS ClCharacteristics,
4820 _In_ UINT SizeOfClCharacteristics,
4821 _Out_ PNDIS_HANDLE NdisAfHandle);
4822
4823 _Must_inspect_result_
4824 _IRQL_requires_max_(DISPATCH_LEVEL)
4825 NDISAPI
4826 NDIS_STATUS
4827 NTAPI
4828 NdisClRegisterSap(
4829 _In_ NDIS_HANDLE NdisAfHandle,
4830 _In_ NDIS_HANDLE ProtocolSapContext,
4831 _In_ PCO_SAP Sap,
4832 _Out_ PNDIS_HANDLE NdisSapHandle);
4833
4834
4835 /* Call Manager services */
4836
4837 _Must_inspect_result_
4838 _IRQL_requires_max_(DISPATCH_LEVEL)
4839 NDISAPI
4840 NDIS_STATUS
4841 NTAPI
4842 NdisCmActivateVc(
4843 _In_ NDIS_HANDLE NdisVcHandle,
4844 _Inout_ PCO_CALL_PARAMETERS CallParameters);
4845
4846 _IRQL_requires_max_(DISPATCH_LEVEL)
4847 NDISAPI
4848 VOID
4849 NTAPI
4850 NdisCmAddPartyComplete(
4851 _In_ NDIS_STATUS Status,
4852 _In_ NDIS_HANDLE NdisPartyHandle,
4853 _In_opt_ NDIS_HANDLE CallMgrPartyContext,
4854 _In_ PCO_CALL_PARAMETERS CallParameters);
4855
4856 _IRQL_requires_max_(DISPATCH_LEVEL)
4857 NDISAPI
4858 VOID
4859 NTAPI
4860 NdisCmCloseAddressFamilyComplete(
4861 _In_ NDIS_STATUS Status,
4862 _In_ NDIS_HANDLE NdisAfHandle);
4863
4864 _IRQL_requires_max_(DISPATCH_LEVEL)
4865 NDISAPI
4866 VOID
4867 NTAPI
4868 NdisCmCloseCallComplete(
4869 _In_ NDIS_STATUS Status,
4870 _In_ NDIS_HANDLE NdisVcHandle,
4871 _In_opt_ NDIS_HANDLE NdisPartyHandle);
4872
4873 _Must_inspect_result_
4874 _IRQL_requires_max_(DISPATCH_LEVEL)
4875 NDISAPI
4876 NDIS_STATUS
4877 NTAPI
4878 NdisCmDeactivateVc(
4879 _In_ NDIS_HANDLE NdisVcHandle);
4880
4881 _IRQL_requires_max_(DISPATCH_LEVEL)
4882 NDISAPI
4883 VOID
4884 NTAPI
4885 NdisCmDeregisterSapComplete(
4886 _In_ NDIS_STATUS Status,
4887 _In_ NDIS_HANDLE NdisSapHandle);
4888
4889 _IRQL_requires_max_(DISPATCH_LEVEL)
4890 NDISAPI
4891 VOID
4892 NTAPI
4893 NdisCmDispatchCallConnected(
4894 _In_ NDIS_HANDLE NdisVcHandle);
4895
4896 _Must_inspect_result_
4897 _IRQL_requires_max_(DISPATCH_LEVEL)
4898 NDISAPI
4899 NDIS_STATUS
4900 NTAPI
4901 NdisCmDispatchIncomingCall(
4902 _In_ NDIS_HANDLE NdisSapHandle,
4903 _In_ NDIS_HANDLE NdisVcHandle,
4904 _In_ PCO_CALL_PARAMETERS CallParameters);
4905
4906 _IRQL_requires_max_(DISPATCH_LEVEL)
4907 NDISAPI
4908 VOID
4909 NTAPI
4910 NdisCmDispatchIncomingCallQoSChange(
4911 _In_ NDIS_HANDLE NdisVcHandle,
4912 _In_ PCO_CALL_PARAMETERS CallParameters);
4913
4914 _IRQL_requires_max_(DISPATCH_LEVEL)
4915 NDISAPI
4916 VOID
4917 NTAPI
4918 NdisCmDispatchIncomingCloseCall(
4919 _In_ NDIS_STATUS CloseStatus,
4920 _In_ NDIS_HANDLE NdisVcHandle,
4921 _In_reads_bytes_opt_(Size) PVOID Buffer,
4922 _In_ UINT Size);
4923
4924 _IRQL_requires_max_(DISPATCH_LEVEL)
4925 NDISAPI
4926 VOID
4927 NTAPI
4928 NdisCmDispatchIncomingDropParty(
4929 _In_ NDIS_STATUS DropStatus,
4930 _In_ NDIS_HANDLE NdisPartyHandle,
4931 _In_reads_bytes_opt_(Size) PVOID Buffer,
4932 _In_ UINT Size);
4933
4934 _IRQL_requires_max_(DISPATCH_LEVEL)
4935 NDISAPI
4936 VOID
4937 NTAPI
4938 NdisCmDropPartyComplete(
4939 _In_ NDIS_STATUS Status,
4940 _In_ NDIS_HANDLE NdisPartyHandle);
4941
4942 _IRQL_requires_max_(DISPATCH_LEVEL)
4943 NDISAPI
4944 VOID
4945 NTAPI
4946 NdisCmMakeCallComplete(
4947 _In_ NDIS_STATUS Status,
4948 _In_ NDIS_HANDLE NdisVcHandle,
4949 _In_opt_ NDIS_HANDLE NdisPartyHandle,
4950 _In_opt_ NDIS_HANDLE CallMgrPartyContext,
4951 _In_ PCO_CALL_PARAMETERS CallParameters);
4952
4953 _IRQL_requires_max_(DISPATCH_LEVEL)
4954 NDISAPI
4955 VOID
4956 NTAPI
4957 NdisCmModifyCallQoSComplete(
4958 _In_ NDIS_STATUS Status,
4959 _In_ NDIS_HANDLE NdisVcHandle,
4960 _In_ PCO_CALL_PARAMETERS CallParameters);
4961
4962 _IRQL_requires_max_(DISPATCH_LEVEL)
4963 NDISAPI
4964 VOID
4965 NTAPI
4966 NdisCmOpenAddressFamilyComplete(
4967 _In_ NDIS_STATUS Status,
4968 _In_ NDIS_HANDLE NdisAfHandle,
4969 _In_ NDIS_HANDLE CallMgrAfContext);
4970
4971 _Must_inspect_result_
4972 _IRQL_requires_(PASSIVE_LEVEL)
4973 NDISAPI
4974 NDIS_STATUS
4975 NTAPI
4976 NdisCmRegisterAddressFamily(
4977 _In_ NDIS_HANDLE NdisBindingHandle,
4978 _In_ PCO_ADDRESS_FAMILY AddressFamily,
4979 _In_ PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics,
4980 _In_ UINT SizeOfCmCharacteristics);
4981
4982 _IRQL_requires_max_(DISPATCH_LEVEL)
4983 NDISAPI
4984 VOID
4985 NTAPI
4986 NdisCmRegisterSapComplete(
4987 _In_ NDIS_STATUS Status,
4988 _In_ NDIS_HANDLE NdisSapHandle,
4989 _In_ NDIS_HANDLE CallMgrSapContext);
4990
4991 _IRQL_requires_max_(DISPATCH_LEVEL)
4992 NDISAPI
4993 NDIS_STATUS
4994 NTAPI
4995 NdisMCmActivateVc(
4996 _In_ NDIS_HANDLE NdisVcHandle,
4997 _In_ PCO_CALL_PARAMETERS CallParameters);
4998
4999 _IRQL_requires_max_(DISPATCH_LEVEL)
5000 NDISAPI
5001 NDIS_STATUS
5002 NTAPI
5003 NdisMCmCreateVc(
5004 _In_ NDIS_HANDLE MiniportAdapterHandle,
5005 _In_ NDIS_HANDLE NdisAfHandle,
5006 _In_ NDIS_HANDLE MiniportVcContext,
5007 _Out_ PNDIS_HANDLE NdisVcHandle);
5008
5009 _IRQL_requires_max_(DISPATCH_LEVEL)
5010 NDISAPI
5011 NDIS_STATUS
5012 NTAPI
5013 NdisMCmDeactivateVc(
5014 _In_ NDIS_HANDLE NdisVcHandle);
5015
5016 _IRQL_requires_max_(DISPATCH_LEVEL)
5017 NDISAPI
5018 NDIS_STATUS
5019 NTAPI
5020 NdisMCmDeleteVc(
5021 _In_ NDIS_HANDLE NdisVcHandle);
5022
5023 NDISAPI
5024 NDIS_STATUS
5025 NTAPI
5026 NdisMCmRegisterAddressFamily(
5027 IN NDIS_HANDLE MiniportAdapterHandle,
5028 IN PCO_ADDRESS_FAMILY AddressFamily,
5029 IN PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics,
5030 IN UINT SizeOfCmCharacteristics);
5031
5032 _IRQL_requires_max_(DISPATCH_LEVEL)
5033 NDISAPI
5034 NDIS_STATUS
5035 NTAPI
5036 NdisMCmRequest(
5037 _In_ NDIS_HANDLE NdisAfHandle,
5038 _In_opt_ NDIS_HANDLE NdisVcHandle,
5039 _In_opt_ NDIS_HANDLE NdisPartyHandle,
5040 _Inout_ PNDIS_REQUEST NdisRequest);
5041
5042
5043 /* Connection-oriented services */
5044
5045 _Must_inspect_result_
5046 _IRQL_requires_max_(DISPATCH_LEVEL)
5047 NDISAPI
5048 NDIS_STATUS
5049 NTAPI
5050 NdisCoCreateVc(
5051 _In_ NDIS_HANDLE NdisBindingHandle,
5052 _In_opt_ NDIS_HANDLE NdisAfHandle ,
5053 _In_ NDIS_HANDLE ProtocolVcContext,
5054 _Inout_ PNDIS_HANDLE NdisVcHandle);
5055
5056 _Must_inspect_result_
5057 _IRQL_requires_max_(DISPATCH_LEVEL)
5058 NDISAPI
5059 NDIS_STATUS
5060 NTAPI
5061 NdisCoDeleteVc(
5062 _In_ NDIS_HANDLE NdisVcHandle);
5063
5064 _Must_inspect_result_
5065 _IRQL_requires_max_(DISPATCH_LEVEL)
5066 NDISAPI
5067 NDIS_STATUS
5068 NTAPI
5069 NdisCoRequest(
5070 _In_ NDIS_HANDLE NdisBindingHandle,
5071 _In_opt_ NDIS_HANDLE NdisAfHandle,
5072 _In_opt_ NDIS_HANDLE NdisVcHandle,
5073 _In_opt_ NDIS_HANDLE NdisPartyHandle,
5074 _Inout_ PNDIS_REQUEST NdisRequest);
5075
5076 _IRQL_requires_max_(DISPATCH_LEVEL)
5077 NDISAPI
5078 VOID
5079 NTAPI
5080 NdisCoRequestComplete(
5081 _In_ NDIS_STATUS Status,
5082 _In_ NDIS_HANDLE NdisAfHandle,
5083 _In_opt_ NDIS_HANDLE NdisVcHandle,
5084 _In_opt_ NDIS_HANDLE NdisPartyHandle,
5085 _In_ PNDIS_REQUEST NdisRequest);
5086
5087 _IRQL_requires_max_(DISPATCH_LEVEL)
5088 NDISAPI
5089 VOID
5090 NTAPI
5091 NdisCoSendPackets(
5092 _In_ NDIS_HANDLE NdisVcHandle,
5093 _In_ PPNDIS_PACKET PacketArray,
5094 _In_ UINT NumberOfPackets);
5095
5096 _IRQL_requires_max_(DISPATCH_LEVEL)
5097 NDISAPI
5098 VOID
5099 NTAPI
5100 NdisMCoActivateVcComplete(
5101 _In_ NDIS_STATUS Status,
5102 _In_ NDIS_HANDLE NdisVcHandle,
5103 _In_ PCO_CALL_PARAMETERS CallParameters);
5104
5105 _IRQL_requires_max_(DISPATCH_LEVEL)
5106 NDISAPI
5107 VOID
5108 NTAPI
5109 NdisMCoDeactivateVcComplete(
5110 _In_ NDIS_STATUS Status,
5111 _In_ NDIS_HANDLE NdisVcHandle);
5112
5113 _IRQL_requires_(DISPATCH_LEVEL)
5114 NDISAPI
5115 VOID
5116 NTAPI
5117 NdisMCoIndicateReceivePacket(
5118 _In_ NDIS_HANDLE NdisVcHandle,
5119 _In_ PPNDIS_PACKET PacketArray,
5120 _In_ UINT NumberOfPackets);
5121
5122 _IRQL_requires_max_(DISPATCH_LEVEL)
5123 NDISAPI
5124 VOID
5125 NTAPI
5126 NdisMCoIndicateStatus(
5127 _In_ NDIS_HANDLE MiniportAdapterHandle,
5128 _In_opt_ NDIS_HANDLE NdisVcHandle,
5129 _In_ NDIS_STATUS GeneralStatus,
5130 _In_reads_bytes_opt_(StatusBufferSize) PVOID StatusBuffer,
5131 _In_ ULONG StatusBufferSize);
5132
5133 _IRQL_requires_(DISPATCH_LEVEL)
5134 NDISAPI
5135 VOID
5136 NTAPI
5137 NdisMCoReceiveComplete(
5138 _In_ NDIS_HANDLE MiniportAdapterHandle);
5139
5140 _IRQL_requires_max_(DISPATCH_LEVEL)
5141 NDISAPI
5142 VOID
5143 NTAPI
5144 NdisMCoRequestComplete(
5145 _In_ NDIS_STATUS Status,
5146 _In_ NDIS_HANDLE MiniportAdapterHandle,
5147 _In_ PNDIS_REQUEST Request);
5148
5149 _IRQL_requires_(DISPATCH_LEVEL)
5150 NDISAPI
5151 VOID
5152 NTAPI
5153 NdisMCoSendComplete(
5154 _In_ NDIS_STATUS Status,
5155 _In_ NDIS_HANDLE NdisVcHandle,
5156 _In_ PNDIS_PACKET Packet);
5157
5158
5159 /* NDIS 5.0 extensions for intermediate drivers */
5160
5161 _IRQL_requires_(PASSIVE_LEVEL)
5162 NDISAPI
5163 VOID
5164 NTAPI
5165 NdisIMAssociateMiniport(
5166 _In_ NDIS_HANDLE DriverHandle,
5167 _In_ NDIS_HANDLE ProtocolHandle);
5168
5169 _IRQL_requires_(PASSIVE_LEVEL)
5170 NDISAPI
5171 NDIS_STATUS
5172 NTAPI
5173 NdisIMCancelInitializeDeviceInstance(
5174 _In_ NDIS_HANDLE DriverHandle,
5175 _In_ PNDIS_STRING DeviceInstance);
5176
5177 NDISAPI
5178 VOID
5179 NTAPI
5180 NdisIMCopySendCompletePerPacketInfo(
5181 IN PNDIS_PACKET DstPacket,
5182 IN PNDIS_PACKET SrcPacket);
5183
5184 NDISAPI
5185 VOID
5186 NTAPI
5187 NdisIMCopySendPerPacketInfo(
5188 IN PNDIS_PACKET DstPacket,
5189 IN PNDIS_PACKET SrcPacket);
5190
5191 _IRQL_requires_(PASSIVE_LEVEL)
5192 NDISAPI
5193 VOID
5194 NTAPI
5195 NdisIMDeregisterLayeredMiniport(
5196 _In_ NDIS_HANDLE DriverHandle);
5197
5198 _IRQL_requires_max_(APC_LEVEL)
5199 NDISAPI
5200 NDIS_HANDLE
5201 NTAPI
5202 NdisIMGetBindingContext(
5203 _In_ NDIS_HANDLE NdisBindingHandle);
5204
5205 _IRQL_requires_max_(DISPATCH_LEVEL)
5206 NDISAPI
5207 NDIS_HANDLE
5208 NTAPI
5209 NdisIMGetDeviceContext(
5210 _In_ NDIS_HANDLE MiniportAdapterHandle);
5211
5212 _IRQL_requires_(PASSIVE_LEVEL)
5213 NDISAPI
5214 NDIS_STATUS
5215 NTAPI
5216 NdisIMInitializeDeviceInstanceEx(
5217 _In_ NDIS_HANDLE DriverHandle,
5218 _In_ PNDIS_STRING DriverInstance,
5219 _In_opt_ NDIS_HANDLE DeviceContext);
5220
5221 /*
5222 NDISAPI
5223 PSINGLE_LIST_ENTRY
5224 NTAPI
5225 NdisInterlockedPopEntrySList(
5226 IN PSLIST_HEADER ListHead,
5227 IN PKSPIN_LOCK Lock);
5228 */
5229 #define NdisInterlockedPopEntrySList(SListHead, Lock) \
5230 ExInterlockedPopEntrySList(SListHead, &(Lock)->SpinLock)
5231
5232 /*
5233 NDISAPI
5234 PSINGLE_LIST_ENTRY
5235 NTAPI
5236 NdisInterlockedPushEntrySList(
5237 IN PSLIST_HEADER ListHead,
5238 IN PSINGLE_LIST_ENTRY ListEntry,
5239 IN PKSPIN_LOCK Lock);
5240 */
5241 #define NdisInterlockedPushEntrySList(SListHead, SListEntry, Lock) \
5242 ExInterlockedPushEntrySList(SListHead, SListEntry, &(Lock)->SpinLock)
5243
5244 #define NdisInterlockedFlushSList(SListHead) ExInterlockedFlushSList(SListHead)
5245
5246 /*
5247 NDISAPI
5248 VOID
5249 NTAPI
5250 NdisQueryBufferSafe(
5251 IN PNDIS_BUFFER Buffer,
5252 OUT PVOID *VirtualAddress OPTIONAL,
5253 OUT PUINT Length,
5254 IN UINT Priority);
5255 */
5256 #define NdisQueryBufferSafe(_Buffer, _VirtualAddress, _Length, _Priority) { \
5257 if (ARGUMENT_PRESENT(_VirtualAddress)) { \
5258 *(PVOID *)(_VirtualAddress) = MmGetSystemAddressForMdlSafe(_Buffer, _Priority); \
5259 } \
5260 *(_Length) = MmGetMdlByteCount(_Buffer); \
5261 }
5262
5263 /* Routines for NDIS miniport drivers */
5264
5265 #if NDIS_SUPPORT_NDIS6
5266
5267 NDISAPI
5268 PNDIS_GENERIC_OBJECT
5269 NTAPI
5270 NdisAllocateGenericObject(
5271 PDRIVER_OBJECT DriverObject OPTIONAL,
5272 ULONG Tag,
5273 USHORT Size);
5274
5275 NDISAPI
5276 VOID
5277 NTAPI
5278 NdisFreeGenericObject(
5279 IN PNDIS_GENERIC_OBJECT NdisObject);
5280
5281 #endif /* NDIS_SUPPORT_NDIS6 */
5282
5283 NDISAPI
5284 VOID
5285 NTAPI
5286 NdisInitializeWrapper(
5287 OUT PNDIS_HANDLE NdisWrapperHandle,
5288 IN PVOID SystemSpecific1,
5289 IN PVOID SystemSpecific2,
5290 IN PVOID SystemSpecific3);
5291
5292 _Must_inspect_result_
5293 _IRQL_requires_(PASSIVE_LEVEL)
5294 __drv_preferredFunction("NdisMInitializeScatterGatherDma", "See details in NdisMAllocateMapRegisters documentation")
5295 NDISAPI
5296 NDIS_STATUS
5297 NTAPI
5298 NdisMAllocateMapRegisters(
5299 _In_ NDIS_HANDLE MiniportAdapterHandle,
5300 _In_ UINT DmaChannel,
5301 _In_ NDIS_DMA_SIZE DmaSize,
5302 _In_ ULONG PhysicalMapRegistersNeeded,
5303 _In_ ULONG MaximumPhysicalMapping);
5304
5305 /*
5306 * VOID
5307 * NdisMArcIndicateReceive(
5308 * IN NDIS_HANDLE MiniportAdapterHandle,
5309 * IN PUCHAR HeaderBuffer,
5310 * IN PUCHAR DataBuffer,
5311 * IN UINT Length);
5312 */
5313 #define NdisMArcIndicateReceive(MiniportAdapterHandle, \
5314 HeaderBuffer, \
5315 DataBuffer, \
5316 Length) \
5317 { \
5318 ArcFilterDprIndicateReceive( \
5319 (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->ArcDB), \
5320 (HeaderBuffer), \
5321 (DataBuffer), \
5322 (Length)); \
5323 }
5324
5325 /*
5326 * VOID
5327 * NdisMArcIndicateReceiveComplete(
5328 * IN NDIS_HANDLE MiniportAdapterHandle);
5329 */
5330 #define NdisMArcIndicateReceiveComplete(MiniportAdapterHandle) \
5331 { \
5332 if (((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->EthDB) \
5333 { \
5334 NdisMEthIndicateReceiveComplete(_H); \
5335 } \
5336 \
5337 ArcFilterDprIndicateReceiveComplete( \
5338 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->ArcDB); \
5339 }
5340
5341 _IRQL_requires_(PASSIVE_LEVEL)
5342 NDISAPI
5343 VOID
5344 NTAPI
5345 NdisMCloseLog(
5346 _In_ NDIS_HANDLE LogHandle);
5347
5348 _IRQL_requires_(PASSIVE_LEVEL)
5349 NDISAPI
5350 NDIS_STATUS
5351 NTAPI
5352 NdisMCreateLog(
5353 _In_ NDIS_HANDLE MiniportAdapterHandle,
5354 _In_ UINT Size,
5355 _Out_ PNDIS_HANDLE LogHandle);
5356
5357 NDISAPI
5358 VOID
5359 NTAPI
5360 NdisMDeregisterAdapterShutdownHandler(
5361 _In_ NDIS_HANDLE MiniportHandle);
5362
5363 #if NDIS_LEGACY_MINIPORT
5364
5365 _IRQL_requires_(PASSIVE_LEVEL)
5366 NDISAPI
5367 VOID
5368 NTAPI
5369 NdisMDeregisterInterrupt(
5370 _In_ PNDIS_MINIPORT_INTERRUPT Interrupt);
5371
5372 _IRQL_requires_(PASSIVE_LEVEL)
5373 NDISAPI
5374 VOID
5375 NTAPI
5376 NdisMRegisterAdapterShutdownHandler(
5377 _In_ NDIS_HANDLE MiniportHandle,
5378 _In_ PVOID ShutdownContext,
5379 _In_ ADAPTER_SHUTDOWN_HANDLER ShutdownHandler);
5380
5381 NDISAPI
5382 NDIS_STATUS
5383 NTAPI
5384 NdisMRegisterInterrupt(
5385 OUT PNDIS_MINIPORT_INTERRUPT Interrupt,
5386 IN NDIS_HANDLE MiniportAdapterHandle,
5387 IN UINT InterruptVector,
5388 IN UINT InterruptLevel,
5389 IN BOOLEAN RequestIsr,
5390 IN BOOLEAN SharedInterrupt,
5391 IN NDIS_INTERRUPT_MODE InterruptMode);
5392
5393 NDISAPI
5394 NDIS_STATUS
5395 NTAPI
5396 NdisMRegisterMiniport(
5397 IN NDIS_HANDLE NdisWrapperHandle,
5398 IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,
5399 IN UINT CharacteristicsLength);
5400
5401 NDISAPI
5402 BOOLEAN
5403 NTAPI
5404 NdisMSynchronizeWithInterrupt(
5405 IN PNDIS_MINIPORT_INTERRUPT Interrupt,
5406 IN PVOID SynchronizeFunction,
5407 IN PVOID SynchronizeContext);
5408 #endif /* NDIS_LEGACY_MINIPORT */
5409
5410 _IRQL_requires_(PASSIVE_LEVEL)
5411 NDISAPI
5412 VOID
5413 NTAPI
5414 NdisMDeregisterIoPortRange(
5415 _In_ NDIS_HANDLE MiniportAdapterHandle,
5416 _In_ UINT InitialPort,
5417 _In_ UINT NumberOfPorts,
5418 _In_ PVOID PortOffset);
5419
5420 /*
5421 * VOID
5422 * NdisMEthIndicateReceive(
5423 * IN NDIS_HANDLE MiniportAdapterHandle,
5424 * IN NDIS_HANDLE MiniportReceiveContext,
5425 * IN PVOID HeaderBuffer,
5426 * IN UINT HeaderBufferSize,
5427 * IN PVOID LookaheadBuffer,
5428 * IN UINT LookaheadBufferSize,
5429 * IN UINT PacketSize);
5430 */
5431 #define NdisMEthIndicateReceive(MiniportAdapterHandle, \
5432 MiniportReceiveContext, \
5433 HeaderBuffer, \
5434 HeaderBufferSize, \
5435 LookaheadBuffer, \
5436 LookaheadBufferSize, \
5437 PacketSize) \
5438 { \
5439 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxIndicateHandler)( \
5440 ((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthDB, \
5441 (MiniportReceiveContext), \
5442 (HeaderBuffer), \
5443 (HeaderBuffer), \
5444 (HeaderBufferSize), \
5445 (LookaheadBuffer), \
5446 (LookaheadBufferSize), \
5447 (PacketSize)); \
5448 }
5449
5450 /*
5451 * VOID
5452 * NdisMEthIndicateReceiveComplete(
5453 * IN NDIS_HANDLE MiniportAdapterHandle);
5454 */
5455 #define NdisMEthIndicateReceiveComplete(MiniportAdapterHandle) \
5456 { \
5457 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxCompleteHandler)( \
5458 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->EthDB); \
5459 }
5460
5461 /*
5462 * VOID
5463 * NdisMFddiIndicateReceive(
5464 * IN NDIS_HANDLE MiniportAdapterHandle,
5465 * IN NDIS_HANDLE MiniportReceiveContext,
5466 * IN PVOID HeaderBuffer,
5467 * IN UINT HeaderBufferSize,
5468 * IN PVOID LookaheadBuffer,
5469 * IN UINT LookaheadBufferSize,
5470 * IN UINT PacketSize);
5471 */
5472 #define NdisMFddiIndicateReceive(MiniportAdapterHandle, \
5473 MiniportReceiveContext, \
5474 HeaderBuffer, \
5475 HeaderBufferSize, \
5476 LookaheadBuffer, \
5477 LookaheadBufferSize, \
5478 PacketSize) \
5479 { \
5480 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxIndicateHandler)( \
5481 (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiDB), \
5482 (MiniportReceiveContext), \
5483 (PUCHAR)(HeaderBuffer) + 1, \
5484 (((*(PUCHAR*)(HeaderBuffer)) & 0x40) ? \
5485 FDDI_LENGTH_OF_LONG_ADDRESS : \
5486 FDDI_LENGTH_OF_SHORT_ADDRESS), \
5487 (HeaderBuffer), \
5488 (HeaderBufferSize), \
5489 (LookaheadBuffer), \
5490 (LookaheadBufferSize), \
5491 (PacketSize)); \
5492 }
5493
5494
5495
5496 /*
5497 * VOID
5498 * NdisMFddiIndicateReceiveComplete(
5499 * IN NDIS_HANDLE MiniportAdapterHandle);
5500 */
5501 #define NdisMFddiIndicateReceiveComplete(MiniportAdapterHandle) \
5502 { \
5503 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxCompleteHandler)( \
5504 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FddiDB); \
5505 }
5506
5507 _IRQL_requires_max_(DISPATCH_LEVEL)
5508 NDISAPI
5509 VOID
5510 NTAPI
5511 NdisMFlushLog(
5512 _In_ NDIS_HANDLE LogHandle);
5513
5514 _IRQL_requires_(PASSIVE_LEVEL)
5515 NDISAPI
5516 VOID
5517 NTAPI
5518 NdisMFreeMapRegisters(
5519 _In_ NDIS_HANDLE MiniportAdapterHandle);
5520
5521 /*
5522 * VOID
5523 * EXPORT
5524 * NdisMIndicateReceivePacket(
5525 * IN NDIS_HANDLE MiniportAdapterHandle,
5526 * IN PPNDIS_PACKET ReceivePackets,
5527 * IN UINT NumberOfPackets);
5528 */
5529 #define NdisMIndicateReceivePacket(MiniportAdapterHandle, \
5530 ReceivePackets, NumberOfPackets) \
5531 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->PacketIndicateHandler)( \
5532 MiniportAdapterHandle, ReceivePackets, NumberOfPackets)
5533
5534 /*
5535 * VOID
5536 * NdisMIndicateStatus(
5537 * IN NDIS_HANDLE MiniportAdapterHandle,
5538 * IN NDIS_STATUS GeneralStatus,
5539 * IN PVOID StatusBuffer,
5540 * IN UINT StatusBufferSize);
5541 */
5542
5543 #define NdisMIndicateStatus(MiniportAdapterHandle, \
5544 GeneralStatus, StatusBuffer, StatusBufferSize) \
5545 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->StatusHandler)( \
5546 MiniportAdapterHandle, GeneralStatus, StatusBuffer, StatusBufferSize)
5547
5548 /*
5549 * VOID
5550 * NdisMIndicateStatusComplete(
5551 * IN NDIS_HANDLE MiniportAdapterHandle);
5552 */
5553 #define NdisMIndicateStatusComplete(MiniportAdapterHandle) \
5554 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->StatusCompleteHandler)( \
5555 MiniportAdapterHandle)
5556
5557 /*
5558 * VOID
5559 * NdisMInitializeWrapper(
5560 * OUT PNDIS_HANDLE NdisWrapperHandle,
5561 * IN PVOID SystemSpecific1,
5562 * IN PVOID SystemSpecific2,
5563 * IN PVOID SystemSpecific3);
5564 */
5565 #define NdisMInitializeWrapper(NdisWrapperHandle, \
5566 SystemSpecific1, \
5567 SystemSpecific2, \
5568 SystemSpecific3) \
5569 NdisInitializeWrapper((NdisWrapperHandle), \
5570 (SystemSpecific1), \
5571 (SystemSpecific2), \
5572 (SystemSpecific3))
5573
5574 _Must_inspect_result_
5575 _IRQL_requires_(PASSIVE_LEVEL)
5576 NDISAPI
5577 NDIS_STATUS
5578 NTAPI
5579 NdisMMapIoSpace(
5580 _Outptr_result_bytebuffer_(Length) PVOID *VirtualAddress,
5581 _In_ NDIS_HANDLE MiniportAdapterHandle,
5582 _In_ NDIS_PHYSICAL_ADDRESS PhysicalAddress,
5583 _In_ UINT Length);
5584
5585 /*
5586 * VOID
5587 * NdisMQueryInformationComplete(
5588 * IN NDIS_HANDLE MiniportAdapterHandle,
5589 * IN NDIS_STATUS Status);
5590 */
5591 #define NdisMQueryInformationComplete(MiniportAdapterHandle, Status) \
5592 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->QueryCompleteHandler)(MiniportAdapterHandle, Status)
5593
5594 _Must_inspect_result_
5595 _IRQL_requires_(PASSIVE_LEVEL)
5596 NDISAPI
5597 NDIS_STATUS
5598 NTAPI
5599 NdisMRegisterIoPortRange(
5600 _Out_ PVOID *PortOffset,
5601 _In_ NDIS_HANDLE MiniportAdapterHandle,
5602 _In_ UINT InitialPort,
5603 _In_ UINT NumberOfPorts);
5604
5605 NDISAPI
5606 VOID
5607 NTAPI
5608 NdisMSetTimer(
5609 IN PNDIS_MINIPORT_TIMER Timer,
5610 IN UINT MillisecondsToDelay);
5611
5612 _IRQL_requires_max_(DISPATCH_LEVEL)
5613 NDISAPI
5614 VOID
5615 NTAPI
5616 NdisMInitializeTimer(
5617 _Inout_ PNDIS_MINIPORT_TIMER Timer,
5618 _In_ NDIS_HANDLE MiniportAdapterHandle,
5619 _In_ PNDIS_TIMER_FUNCTION TimerFunction,
5620 _In_ PVOID FunctionContext);
5621
5622 _IRQL_requires_max_(DISPATCH_LEVEL)
5623 NDISAPI
5624 VOID
5625 NTAPI
5626 NdisMSetPeriodicTimer(
5627 _In_ PNDIS_MINIPORT_TIMER Timer,
5628 _In_ UINT MillisecondPeriod);
5629
5630 _IRQL_requires_max_(DISPATCH_LEVEL)
5631 NDISAPI
5632 VOID
5633 NTAPI
5634 NdisMCancelTimer(
5635 _In_ PNDIS_MINIPORT_TIMER Timer,
5636 _Out_ _At_(*TimerCancelled, _Must_inspect_result_) PBOOLEAN TimerCancelled);
5637
5638 #if !defined(NDIS_WRAPPER)
5639
5640 /*
5641 * VOID
5642 * NdisMResetComplete(
5643 * IN NDIS_HANDLE MiniportAdapterHandle,
5644 * IN NDIS_STATUS Status,
5645 * IN BOOLEAN AddressingReset);
5646 */
5647 #define NdisMResetComplete(MiniportAdapterHandle, \
5648 Status, \
5649 AddressingReset) \
5650 { \
5651 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->ResetCompleteHandler)( \
5652 MiniportAdapterHandle, Status, AddressingReset); \
5653 }
5654
5655 /*
5656 * VOID
5657 * NdisMSendComplete(
5658 * IN NDIS_HANDLE MiniportAdapterHandle,
5659 * IN PNDIS_PACKET Packet,
5660 * IN NDIS_STATUS Status);
5661 */
5662 #define NdisMSendComplete(MiniportAdapterHandle, \
5663 Packet, \
5664 Status) \
5665 { \
5666 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendCompleteHandler)( \
5667 MiniportAdapterHandle, Packet, Status); \
5668 }
5669
5670 /*
5671 * VOID
5672 * NdisMSendResourcesAvailable(
5673 * IN NDIS_HANDLE MiniportAdapterHandle);
5674 */
5675 #define NdisMSendResourcesAvailable(MiniportAdapterHandle) \
5676 { \
5677 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendResourcesHandler)( \
5678 MiniportAdapterHandle); \
5679 }
5680
5681 /*
5682 * VOID
5683 * NdisMTransferDataComplete(
5684 * IN NDIS_HANDLE MiniportAdapterHandle,
5685 * IN PNDIS_PACKET Packet,
5686 * IN NDIS_STATUS Status,
5687 * IN UINT BytesTransferred);
5688 */
5689 #define NdisMTransferDataComplete(MiniportAdapterHandle, \
5690 Packet, \
5691 Status, \
5692 BytesTransferred) \
5693 { \
5694 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TDCompleteHandler)( \
5695 MiniportAdapterHandle, Packet, Status, BytesTransferred) \
5696 }
5697
5698 #endif /* !_NDIS_ */
5699
5700
5701 /*
5702 * VOID
5703 * NdisMSetAttributes(
5704 * IN NDIS_HANDLE MiniportAdapterHandle,
5705 * IN NDIS_HANDLE MiniportAdapterContext,
5706 * IN BOOLEAN BusMaster,
5707 * IN NDIS_INTERFACE_TYPE AdapterType);
5708 */
5709 #define NdisMSetAttributes(MiniportAdapterHandle, \
5710 MiniportAdapterContext, \
5711 BusMaster, \
5712 AdapterType) \
5713 NdisMSetAttributesEx(MiniportAdapterHandle, \
5714 MiniportAdapterContext, \
5715 0, \
5716 (BusMaster) ? NDIS_ATTRIBUTE_BUS_MASTER : 0, \
5717 AdapterType)
5718
5719 NDISAPI
5720 VOID
5721 NTAPI
5722 NdisMSetAttributesEx(
5723 IN NDIS_HANDLE MiniportAdapterHandle,
5724 IN NDIS_HANDLE MiniportAdapterContext,
5725 IN UINT CheckForHangTimeInSeconds OPTIONAL,
5726 IN ULONG AttributeFlags,
5727 IN NDIS_INTERFACE_TYPE AdapterType);
5728
5729 /*
5730 * VOID
5731 * NdisMSetInformationComplete(
5732 * IN NDIS_HANDLE MiniportAdapterHandle,
5733 * IN NDIS_STATUS Status);
5734 */
5735 #define NdisMSetInformationComplete(MiniportAdapterHandle, \
5736 Status) \
5737 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SetCompleteHandler)( \
5738 MiniportAdapterHandle, Status)
5739
5740 _IRQL_requires_max_(APC_LEVEL)
5741 NDISAPI
5742 VOID
5743 NTAPI
5744 NdisMSleep(
5745 _In_ ULONG MicrosecondsToSleep);
5746
5747 /*
5748 * VOID
5749 * NdisMTrIndicateReceive(
5750 * IN NDIS_HANDLE MiniportAdapterHandle,
5751 * IN NDIS_HANDLE MiniportReceiveContext,
5752 * IN PVOID HeaderBuffer,
5753 * IN UINT HeaderBufferSize,
5754 * IN PVOID LookaheadBuffer,
5755 * IN UINT LookaheadBufferSize,
5756 * IN UINT PacketSize);
5757 */
5758 #define NdisMTrIndicateReceive(MiniportAdapterHandle, \
5759 MiniportReceiveContext, \
5760 HeaderBuffer, \
5761 HeaderBufferSize, \
5762 LookaheadBuffer, \
5763 LookaheadBufferSize, \
5764 PacketSize) \
5765 { \
5766 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxIndicateHandler)( \
5767 (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrDB), \
5768 (MiniportReceiveContext), \
5769 (HeaderBuffer), \
5770 (HeaderBuffer), \
5771 (HeaderBufferSize), \
5772 (LookaheadBuffer), \
5773 (LookaheadBufferSize), \
5774 (PacketSize)); \
5775 }
5776
5777 /*
5778 * VOID
5779 * NdisMTrIndicateReceiveComplete(
5780 * IN NDIS_HANDLE MiniportAdapterHandle);
5781 */
5782 #define NdisMTrIndicateReceiveComplete(MiniportAdapterHandle) \
5783 { \
5784 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxCompleteHandler)( \
5785 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->TrDB); \
5786 }
5787
5788 _IRQL_requires_max_(DISPATCH_LEVEL)
5789 NDISAPI
5790 NDIS_STATUS
5791 NTAPI
5792 NdisMWriteLogData(
5793 _In_ NDIS_HANDLE LogHandle,
5794 _In_reads_bytes_(LogBufferSize) PVOID LogBuffer,
5795 _In_ UINT LogBufferSize);
5796
5797 _IRQL_requires_(PASSIVE_LEVEL)
5798 NDISAPI
5799 VOID
5800 NTAPI
5801 NdisMQueryAdapterResources(
5802 _Out_ PNDIS_STATUS Status,
5803 _In_ NDIS_HANDLE WrapperConfigurationContext,
5804 _Out_ PNDIS_RESOURCE_LIST ResourceList,
5805 _Inout_ PUINT BufferSize);
5806
5807 _IRQL_requires_(PASSIVE_LEVEL)
5808 NDISAPI
5809 VOID
5810 NTAPI
5811 NdisTerminateWrapper(
5812 _In_ NDIS_HANDLE NdisWrapperHandle,
5813 _In_opt_ PVOID SystemSpecific);
5814
5815 _IRQL_requires_(PASSIVE_LEVEL)
5816 NDISAPI
5817 VOID
5818 NTAPI
5819 NdisMUnmapIoSpace(
5820 _In_ NDIS_HANDLE MiniportAdapterHandle,
5821 _In_reads_bytes_(Length) PVOID VirtualAddress,
5822 _In_ UINT Length);
5823
5824 /* Event functions */
5825
5826 _IRQL_requires_max_(DISPATCH_LEVEL)
5827 NDISAPI
5828 VOID
5829 NTAPI
5830 NdisInitializeEvent(
5831 _Out_ PNDIS_EVENT Event);
5832
5833 _IRQL_requires_max_(DISPATCH_LEVEL)
5834 NDISAPI
5835 VOID
5836 NTAPI
5837 NdisSetEvent(
5838 _In_ PNDIS_EVENT Event);
5839
5840 _IRQL_requires_max_(DISPATCH_LEVEL)
5841 NDISAPI
5842 VOID
5843 NTAPI
5844 NdisResetEvent(
5845 _In_ PNDIS_EVENT Event);
5846
5847 _When_(MsToWait != 0, _Check_return_)
5848 _IRQL_requires_(PASSIVE_LEVEL)
5849 NDISAPI
5850 BOOLEAN
5851 NTAPI
5852 NdisWaitEvent(
5853 _In_ PNDIS_EVENT Event,
5854 _In_ UINT MsToWait);
5855
5856 /* NDIS intermediate miniport structures */
5857
5858 typedef VOID (NTAPI *W_MINIPORT_CALLBACK)(
5859 IN NDIS_HANDLE MiniportAdapterContext,
5860 IN PVOID CallbackContext);
5861
5862 /* Routines for intermediate miniport drivers */
5863
5864 _IRQL_requires_(PASSIVE_LEVEL)
5865 NDISAPI
5866 NDIS_STATUS
5867 NTAPI
5868 NdisIMDeInitializeDeviceInstance(
5869 _In_ NDIS_HANDLE NdisMiniportHandle);
5870
5871 /*
5872 * NDIS_STATUS
5873 * NdisIMInitializeDeviceInstance(
5874 * IN NDIS_HANDLE DriverHandle,
5875 * IN PNDIS_STRING DeviceInstance);
5876 */
5877 #define NdisIMInitializeDeviceInstance(DriverHandle, DeviceInstance) \
5878 NdisIMInitializeDeviceInstanceEx(DriverHandle, DeviceInstance, NULL)
5879
5880 /* Functions obsoleted by NDIS 5.0 */
5881
5882 NDISAPI
5883 VOID
5884 NTAPI
5885 NdisFreeDmaChannel(
5886 IN PNDIS_HANDLE NdisDmaHandle);
5887
5888 NDISAPI
5889 VOID
5890 NTAPI
5891 NdisSetupDmaTransfer(
5892 OUT PNDIS_STATUS Status,
5893 IN PNDIS_HANDLE NdisDmaHandle,
5894 IN PNDIS_BUFFER Buffer,
5895 IN ULONG Offset,
5896 IN ULONG Length,
5897 IN BOOLEAN WriteToDevice);
5898
5899 /*
5900 NDISAPI
5901 NTSTATUS
5902 NTAPI
5903 NdisUpcaseUnicodeString(
5904 OUT PUNICODE_STRING DestinationString,
5905 IN PUNICODE_STRING SourceString);
5906 */
5907 #define NdisUpcaseUnicodeString(_d, _s) RtlUpcaseUnicodeString(_d, _s, FALSE)
5908
5909
5910 /* Routines for NDIS protocol drivers */
5911
5912 #if NDIS_LEGACY_PROTOCOL
5913
5914 NDISAPI
5915 NDIS_STATUS
5916 NTAPI
5917 NdisIMRegisterLayeredMiniport(
5918 _In_ NDIS_HANDLE NdisWrapperHandle,
5919 _In_ PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,
5920 _In_ UINT CharacteristicsLength,
5921 _Out_ PNDIS_HANDLE DriverHandle);
5922
5923 NDISAPI
5924 VOID
5925 NTAPI
5926 NdisTransferData(
5927 OUT PNDIS_STATUS Status,
5928 IN NDIS_HANDLE NdisBindingHandle,
5929 IN NDIS_HANDLE MacReceiveContext,
5930 IN UINT ByteOffset,
5931 IN UINT BytesToTransfer,
5932 IN OUT PNDIS_PACKET Packet,
5933 OUT PUINT BytesTransferred);
5934
5935 NDISAPI
5936 VOID
5937 NTAPI
5938 NdisSend(
5939 OUT PNDIS_STATUS Status,
5940 IN NDIS_HANDLE NdisBindingHandle,
5941 IN PNDIS_PACKET Packet);
5942
5943 NDISAPI
5944 VOID
5945 NTAPI
5946 NdisSendPackets(
5947 IN NDIS_HANDLE NdisBindingHandle,
5948 IN PPNDIS_PACKET PacketArray,
5949 IN UINT NumberOfPackets);
5950
5951 _IRQL_requires_max_(DISPATCH_LEVEL)
5952 NDISAPI
5953 VOID
5954 NTAPI
5955 NdisRequest(
5956 _Out_ PNDIS_STATUS Status,
5957 _In_ NDIS_HANDLE NdisBindingHandle,
5958 _In_ PNDIS_REQUEST NdisRequest);
5959
5960 _IRQL_requires_max_(DISPATCH_LEVEL)
5961 NDISAPI
5962 VOID
5963 NTAPI
5964 NdisReset(
5965 _Out_ PNDIS_STATUS Status,
5966 _In_ NDIS_HANDLE NdisBindingHandle);
5967
5968 _IRQL_requires_max_(DISPATCH_LEVEL)
5969 NDISAPI
5970 VOID
5971 NTAPI
5972 NdisDeregisterProtocol(
5973 _Out_ PNDIS_STATUS Status,
5974 _In_ NDIS_HANDLE NdisProtocolHandle);
5975
5976 _IRQL_requires_(PASSIVE_LEVEL)
5977 NDISAPI
5978 VOID
5979 NTAPI
5980 NdisOpenAdapter(
5981 _At_(*Status, _Must_inspect_result_) _Out_ PNDIS_STATUS Status,
5982 _Out_ PNDIS_STATUS OpenErrorStatus,
5983 _Out_ PNDIS_HANDLE NdisBindingHandle,
5984 _Out_ PUINT SelectedMediumIndex,
5985 _In_reads_(MediumArraySize) PNDIS_MEDIUM MediumArray,
5986 _In_ UINT MediumArraySize,
5987 _In_ NDIS_HANDLE NdisProtocolHandle,
5988 _In_ NDIS_HANDLE ProtocolBindingContext,
5989 _In_ PNDIS_STRING AdapterName,
5990 _In_ UINT OpenOptions,
5991 _In_opt_ PSTRING AddressingInformation);
5992
5993 _IRQL_requires_(PASSIVE_LEVEL)
5994 NDISAPI
5995 VOID
5996 NTAPI
5997 NdisCloseAdapter(
5998 _Out_ PNDIS_STATUS Status,
5999 _In_ NDIS_HANDLE NdisBindingHandle);
6000
6001 _IRQL_requires_(PASSIVE_LEVEL)
6002 NDISAPI
6003 VOID
6004 NTAPI
6005 NdisCompleteBindAdapter(
6006 _In_ NDIS_HANDLE BindAdapterContext,
6007 _In_ NDIS_STATUS Status,
6008 _In_ NDIS_STATUS OpenStatus);
6009
6010 _IRQL_requires_(PASSIVE_LEVEL)
6011 NDISAPI
6012 VOID
6013 NTAPI
6014 NdisCompleteUnbindAdapter(
6015 _In_ NDIS_HANDLE UnbindAdapterContext,
6016 _In_ NDIS_STATUS Status);
6017
6018 NDISAPI
6019 VOID
6020 NTAPI
6021 NdisSetProtocolFilter(
6022 _At_(*Status, _Must_inspect_result_) _Out_ PNDIS_STATUS Status,
6023 _In_ NDIS_HANDLE NdisBindingHandle,
6024 _In_ RECEIVE_HANDLER ReceiveHandler,
6025 _In_ RECEIVE_PACKET_HANDLER ReceivePacketHandler,
6026 _In_ NDIS_MEDIUM Medium,
6027 _In_ UINT Offset,
6028 _In_ UINT Size,
6029 _In_ PUCHAR Pattern);
6030
6031 _IRQL_requires_max_(DISPATCH_LEVEL)
6032 NDISAPI
6033 VOID
6034 NTAPI
6035 NdisGetDriverHandle(
6036 _In_ PNDIS_HANDLE NdisBindingHandle,
6037 _Out_ PNDIS_HANDLE NdisDriverHandle);
6038
6039 _IRQL_requires_(PASSIVE_LEVEL)
6040 NDISAPI
6041 VOID
6042 NTAPI
6043 NdisOpenProtocolConfiguration(
6044 _Out_ PNDIS_STATUS Status,
6045 _Out_ PNDIS_HANDLE ConfigurationHandle,
6046 _In_ PNDIS_STRING ProtocolSection);
6047
6048 _IRQL_requires_(PASSIVE_LEVEL)
6049 NDISAPI
6050 VOID
6051 NTAPI
6052 NdisCompletePnPEvent(
6053 _In_ NDIS_STATUS Status,
6054 _In_ NDIS_HANDLE NdisBindingHandle,
6055 _In_ PNET_PNP_EVENT NetPnPEvent);
6056
6057 /*
6058 * VOID
6059 * NdisSetSendFlags(
6060 * IN PNDIS_PACKET Packet,
6061 * IN UINT Flags);
6062 */
6063 #define NdisSetSendFlags(_Packet,_Flags)(_Packet)->Private.Flags = (_Flags)
6064
6065 #define NdisQuerySendFlags(_Packet,_Flags) *(_Flags) = (_Packet)->Private.Flags
6066
6067 _IRQL_requires_max_(DISPATCH_LEVEL)
6068 NDISAPI
6069 VOID
6070 NTAPI
6071 NdisReturnPackets(
6072 _In_reads_(NumberOfPackets) PNDIS_PACKET *PacketsToReturn,
6073 _In_ UINT NumberOfPackets);
6074
6075 _Must_inspect_result_
6076 _IRQL_requires_max_(DISPATCH_LEVEL)
6077 NDISAPI
6078 PNDIS_PACKET
6079 NTAPI
6080 NdisGetReceivedPacket(
6081 _In_ PNDIS_HANDLE NdisBindingHandle,
6082 _In_ PNDIS_HANDLE MacContext);
6083
6084 _IRQL_requires_max_(DISPATCH_LEVEL)
6085 NDISAPI
6086 VOID
6087 NTAPI
6088 NdisCancelSendPackets(
6089 _In_ NDIS_HANDLE NdisBindingHandle,
6090 _In_ _Points_to_data_ PVOID CancelId);
6091
6092 _Must_inspect_result_
6093 _IRQL_requires_max_(DISPATCH_LEVEL)
6094 NDISAPI
6095 NDIS_STATUS
6096 NTAPI
6097 NdisQueryPendingIOCount(
6098 _In_ _Points_to_data_ PVOID NdisBindingHandle,
6099 _Out_ PULONG IoCount);
6100
6101 _IRQL_requires_(PASSIVE_LEVEL)
6102 NDISAPI
6103 VOID
6104 NTAPI
6105 NdisRegisterProtocol(
6106 _Out_ PNDIS_STATUS Status,
6107 _Out_ PNDIS_HANDLE NdisProtocolHandle,
6108 _In_ PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics,
6109 _In_ UINT CharacteristicsLength);
6110
6111 #endif /* NDIS_LEGACY_PROTOCOL */
6112
6113 _IRQL_requires_max_(DISPATCH_LEVEL)
6114 NDISAPI
6115 UCHAR
6116 NTAPI
6117 NdisGeneratePartialCancelId(VOID);
6118
6119 _IRQL_requires_(PASSIVE_LEVEL)
6120 NDISAPI
6121 VOID
6122 NTAPI
6123 NdisReEnumerateProtocolBindings(
6124 _In_ NDIS_HANDLE NdisProtocolHandle);
6125
6126 NDISAPI
6127 VOID
6128 NTAPI
6129 NdisRegisterTdiCallBack(
6130 _In_ TDI_REGISTER_CALLBACK RegisterCallback,
6131 _In_ TDI_PNP_HANDLER PnPHandler);
6132
6133 NDISAPI
6134 VOID
6135 NTAPI
6136 NdisDeregisterTdiCallBack(VOID);
6137
6138 /* Obsoleted in Windows XP */
6139
6140 /* Prototypes for NDIS_MAC_CHARACTERISTICS */
6141
6142 typedef NDIS_STATUS (*OPEN_ADAPTER_HANDLER)(
6143 OUT PNDIS_STATUS OpenErrorStatus,
6144 OUT NDIS_HANDLE *MacBindingHandle,
6145 OUT PUINT SelectedMediumIndex,
6146 IN PNDIS_MEDIUM MediumArray,
6147 IN UINT MediumArraySize,
6148 IN NDIS_HANDLE NdisBindingContext,
6149 IN NDIS_HANDLE MacAdapterContext,
6150 IN UINT OpenOptions,
6151 IN PSTRING AddressingInformation OPTIONAL);
6152
6153 typedef NDIS_STATUS (NTAPI *CLOSE_ADAPTER_HANDLER)(
6154 IN NDIS_HANDLE MacBindingHandle);
6155
6156 typedef NDIS_STATUS (NTAPI *WAN_TRANSFER_DATA_HANDLER)(
6157 VOID);
6158
6159 typedef NDIS_STATUS (NTAPI *QUERY_GLOBAL_STATISTICS_HANDLER)(
6160 IN NDIS_HANDLE MacAdapterContext,
6161 IN PNDIS_REQUEST NdisRequest);
6162
6163 typedef VOID (NTAPI *UNLOAD_MAC_HANDLER)(
6164 IN NDIS_HANDLE MacMacContext);
6165
6166 typedef NDIS_STATUS (NTAPI *ADD_ADAPTER_HANDLER)(
6167 IN NDIS_HANDLE MacMacContext,
6168 IN NDIS_HANDLE WrapperConfigurationContext,
6169 IN PNDIS_STRING AdapterName);
6170
6171 typedef VOID (*REMOVE_ADAPTER_HANDLER)(
6172 IN NDIS_HANDLE MacAdapterContext);
6173
6174 typedef struct _NDIS_MAC_CHARACTERISTICS {
6175 UCHAR MajorNdisVersion;
6176 UCHAR MinorNdisVersion;
6177 USHORT Filler;
6178 UINT Reserved;
6179 OPEN_ADAPTER_HANDLER OpenAdapterHandler;
6180 CLOSE_ADAPTER_HANDLER CloseAdapterHandler;
6181 SEND_HANDLER SendHandler;
6182 TRANSFER_DATA_HANDLER TransferDataHandler;
6183 RESET_HANDLER ResetHandler;
6184 REQUEST_HANDLER RequestHandler;
6185 QUERY_GLOBAL_STATISTICS_HANDLER QueryGlobalStatisticsHandler;
6186 UNLOAD_MAC_HANDLER UnloadMacHandler;
6187 ADD_ADAPTER_HANDLER AddAdapterHandler;
6188 REMOVE_ADAPTER_HANDLER RemoveAdapterHandler;
6189 NDIS_STRING Name;
6190 } NDIS_MAC_CHARACTERISTICS, *PNDIS_MAC_CHARACTERISTICS;
6191
6192 typedef NDIS_MAC_CHARACTERISTICS NDIS_WAN_MAC_CHARACTERISTICS;
6193 typedef NDIS_WAN_MAC_CHARACTERISTICS *PNDIS_WAN_MAC_CHARACTERISTICS;
6194
6195 #ifdef __cplusplus
6196 }
6197 #endif
6198
6199 #endif /* _NDIS_ */
6200
6201 /* EOF */