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