+Option '--debug-messages' (default off) - variable 'captive_debug_messages'
[reactos.git] / include / net / ndis.h
1 /*
2  * COPYRIGHT:   See COPYING in the top level directory
3  * PROJECT:     ReactOS NDIS library
4  * FILE:        include/net/ndis.h
5  * PURPOSE:     Structures used by NDIS drivers
6  * DEFINES:     i386                 - Target platform is i386
7  *              NDIS_WRAPPER         - Define only for NDIS wrapper library
8  *              NDIS_MINIPORT_DRIVER - Define only for NDIS miniport drivers
9  *              BINARY_COMPATIBLE    - 0 = Use macros for some features
10  *                                   - 1 = Use imports for features not available
11  *              NDIS40               - Use NDIS 4.0 structures by default
12  *              NDIS50               - Use NDIS 5.0 structures by default
13  */
14 #ifndef __NDIS_H
15 #define __NDIS_H
16
17 #ifdef __cplusplus
18 extern "C"
19 {
20 #endif /* __cplusplus */
21
22 #ifdef NDIS50
23 #undef NDIS40
24 #define NDIS40
25 #endif
26
27
28 /* Windows 9x compatibillity for miniports on x86 platform */
29 #ifndef BINARY_COMPATIBLE
30 #if defined(NDIS_MINIPORT_DRIVER) && defined(i386)
31 #define BINARY_COMPATIBLE 1
32 #else
33 #define BINARY_COMPATIBLE 0
34 #endif
35 #endif
36
37 #ifndef UNALIGNED
38 #define UNALIGNED
39 #endif
40
41 #ifndef FASTCALL
42 #define FASTCALL  __attribute__((fastcall))
43 #endif
44
45 /* The NDIS library export functions. NDIS miniport drivers import functions */
46 #ifdef NDIS_WRAPPER
47
48 #ifdef _MSC_VER
49 #define EXPIMP __declspec(dllexport)
50 #else
51 #define EXPIMP STDCALL
52 #endif
53
54 #else /* NDIS_WRAPPER */
55
56 #ifdef _MSC_VER
57 #define EXPIMP __declspec(dllimport)
58 #else
59 #define EXPIMP STDCALL
60 #endif
61
62 #endif /* NDIS_WRAPPER */
63
64
65
66 #ifdef NDIS_MINIPORT_DRIVER
67
68 #include "miniport.h"
69
70 #else /* NDIS_MINIPORT_DRIVER */
71
72 #ifdef _MSC_VER
73 #include <ntddk.h>
74
75 typedef ULONG ULONG_PTR, *PULONG_PTR;
76
77 #else /* _MSC_VER */
78 #include <ddk/ntddk.h>
79
80 /* FIXME: Missed some definitions in there */
81
82 typedef struct _DMA_CONFIGURATION_BYTE0
83 {
84     UCHAR   Channel:3;
85     UCHAR   Reserved:3;
86     UCHAR   Shared:1;
87     UCHAR   MoreEntries:1;
88 } DMA_CONFIGURATION_BYTE0;
89
90 typedef struct _DMA_CONFIGURATION_BYTE1
91 {
92     UCHAR   Reserved0:2;
93     UCHAR   TransferSize:2;
94     UCHAR   Timing:2;
95     UCHAR   Reserved1:2;
96 } DMA_CONFIGURATION_BYTE1;
97
98
99 typedef struct _EISA_MEMORY_TYPE
100 {
101     UCHAR   ReadWrite:1;
102     UCHAR   Cached:1;
103     UCHAR   Reserved0:1;
104     UCHAR   Type:2;
105     UCHAR   Shared:1;
106     UCHAR   Reserved1:1;
107     UCHAR   MoreEntries:1;
108 } EISA_MEMORY_TYPE, *PEISA_MEMORY_TYPE;
109
110 typedef struct _EISA_MEMORY_CONFIGURATION
111 {
112     EISA_MEMORY_TYPE    ConfigurationByte;
113     UCHAR   DataSize;
114     USHORT  AddressLowWord;
115     UCHAR   AddressHighByte;
116     USHORT  MemorySize;
117 } EISA_MEMORY_CONFIGURATION, *PEISA_MEMORY_CONFIGURATION;
118
119
120 typedef struct _EISA_IRQ_DESCRIPTOR
121 {
122     UCHAR   Interrupt:4;
123     UCHAR   Reserved:1;
124     UCHAR   LevelTriggered:1;
125     UCHAR   Shared:1;
126     UCHAR   MoreEntries:1;
127 } EISA_IRQ_DESCRIPTOR, *PEISA_IRQ_DESCRIPTOR;
128
129 typedef struct _EISA_IRQ_CONFIGURATION
130 {
131     EISA_IRQ_DESCRIPTOR ConfigurationByte;
132     UCHAR   Reserved;
133 } EISA_IRQ_CONFIGURATION, *PEISA_IRQ_CONFIGURATION;
134
135 typedef struct _EISA_DMA_CONFIGURATION
136 {
137     DMA_CONFIGURATION_BYTE0 ConfigurationByte0;
138     DMA_CONFIGURATION_BYTE1 ConfigurationByte1;
139 } EISA_DMA_CONFIGURATION, *PEISA_DMA_CONFIGURATION;
140
141
142 typedef struct _EISA_PORT_DESCRIPTOR
143 {
144     UCHAR   NumberPorts:5;
145     UCHAR   Reserved:1;
146     UCHAR   Shared:1;
147     UCHAR   MoreEntries:1;
148 } EISA_PORT_DESCRIPTOR, *PEISA_PORT_DESCRIPTOR;
149
150 typedef struct _EISA_PORT_CONFIGURATION
151 {
152     EISA_PORT_DESCRIPTOR    Configuration;
153     USHORT  PortAddress;
154 } EISA_PORT_CONFIGURATION, *PEISA_PORT_CONFIGURATION;
155
156 typedef struct _CM_EISA_SLOT_INFORMATION
157 {
158     UCHAR   ReturnCode;
159     UCHAR   ReturnFlags;
160     UCHAR   MajorRevision;
161     UCHAR   MinorRevision;
162     USHORT  Checksum;
163     UCHAR   NumberFunctions;
164     UCHAR   FunctionInformation;
165     ULONG   CompressedId;
166 } CM_EISA_SLOT_INFORMATION, *PCM_EISA_SLOT_INFORMATION;
167
168 typedef struct _CM_EISA_FUNCTION_INFORMATION
169 {
170     ULONG   CompressedId;
171     UCHAR   IdSlotFlags1;
172     UCHAR   IdSlotFlags2;
173     UCHAR   MinorRevision;
174     UCHAR   MajorRevision;
175     UCHAR   Selections[26];
176     UCHAR   FunctionFlags;
177     UCHAR   TypeString[80];
178     EISA_MEMORY_CONFIGURATION   EisaMemory[9];
179     EISA_IRQ_CONFIGURATION      EisaIrq[7];
180     EISA_DMA_CONFIGURATION      EisaDma[4];
181     EISA_PORT_CONFIGURATION     EisaPort[20];
182     UCHAR   InitializationData[60];
183 } CM_EISA_FUNCTION_INFORMATION, *PCM_EISA_FUNCTION_INFORMATION;
184
185 #endif /* _MSC_VER */
186
187 /* FIXME: Missed some definitions in there */
188
189 typedef CONST CHAR *PCSTR;
190
191 #endif /* NDIS_MINIPORT_DRIVER */
192
193 #include "netevent.h"
194 #include "ndisoid.h"
195 #include "ntddndis.h"
196
197
198 #if defined(NDIS_MINIPORT_DRIVER) || !defined(_MSC_VER)
199
200 #ifndef _GUID_DEFINED
201 #define _GUID_DEFINED
202
203 typedef struct _GUID {
204     ULONG   Data1;
205     USHORT  Data2;
206     USHORT  Data3;
207     UCHAR   Data4[8];
208 } GUID;
209
210 #endif /* _GUID_DEFINED */
211
212 #endif /* NDIS_MINIPORT_DRIVER || _MSC_VER */
213
214
215 /* NDIS base types */
216
217 typedef struct _NDIS_SPIN_LOCK
218 {
219     KSPIN_LOCK  SpinLock;
220     KIRQL       OldIrql;
221 } NDIS_SPIN_LOCK, * PNDIS_SPIN_LOCK;
222
223 typedef struct _NDIS_EVENT
224 {
225     KEVENT  Event;
226 } NDIS_EVENT, *PNDIS_EVENT;
227
228 typedef PVOID NDIS_HANDLE, *PNDIS_HANDLE;
229 typedef int NDIS_STATUS, *PNDIS_STATUS;
230
231 typedef UNICODE_STRING NDIS_STRING, *PNDIS_STRING;
232
233 typedef PCSTR NDIS_ANSI_STRING, *PNDIS_ANSI_STRING;
234
235 typedef MDL NDIS_BUFFER, *PNDIS_BUFFER;
236
237 /* NDIS_STATUS constants */
238 #define NDIS_STATUS_SUCCESS                     ((NDIS_STATUS)STATUS_SUCCESS)
239 #define NDIS_STATUS_PENDING                     ((NDIS_STATUS)STATUS_PENDING)
240 #define NDIS_STATUS_NOT_RECOGNIZED              ((NDIS_STATUS)0x00010001L)
241 #define NDIS_STATUS_NOT_COPIED                  ((NDIS_STATUS)0x00010002L)
242 #define NDIS_STATUS_NOT_ACCEPTED                ((NDIS_STATUS)0x00010003L)
243 #define NDIS_STATUS_CALL_ACTIVE                 ((NDIS_STATUS)0x00010007L)
244
245 #define NDIS_STATUS_ONLINE                      ((NDIS_STATUS)0x40010003L)
246 #define NDIS_STATUS_RESET_START                 ((NDIS_STATUS)0x40010004L)
247 #define NDIS_STATUS_RESET_END                   ((NDIS_STATUS)0x40010005L)
248 #define NDIS_STATUS_RING_STATUS                 ((NDIS_STATUS)0x40010006L)
249 #define NDIS_STATUS_CLOSED                      ((NDIS_STATUS)0x40010007L)
250 #define NDIS_STATUS_WAN_LINE_UP                 ((NDIS_STATUS)0x40010008L)
251 #define NDIS_STATUS_WAN_LINE_DOWN               ((NDIS_STATUS)0x40010009L)
252 #define NDIS_STATUS_WAN_FRAGMENT                ((NDIS_STATUS)0x4001000AL)
253 #define NDIS_STATUS_MEDIA_CONNECT               ((NDIS_STATUS)0x4001000BL)
254 #define NDIS_STATUS_MEDIA_DISCONNECT            ((NDIS_STATUS)0x4001000CL)
255 #define NDIS_STATUS_HARDWARE_LINE_UP            ((NDIS_STATUS)0x4001000DL)
256 #define NDIS_STATUS_HARDWARE_LINE_DOWN          ((NDIS_STATUS)0x4001000EL)
257 #define NDIS_STATUS_INTERFACE_UP                ((NDIS_STATUS)0x4001000FL)
258 #define NDIS_STATUS_INTERFACE_DOWN              ((NDIS_STATUS)0x40010010L)
259 #define NDIS_STATUS_MEDIA_BUSY                  ((NDIS_STATUS)0x40010011L)
260 #define NDIS_STATUS_WW_INDICATION               ((NDIS_STATUS)0x40010012L)
261 #define NDIS_STATUS_TAPI_INDICATION             ((NDIS_STATUS)0x40010080L)
262
263 #define NDIS_STATUS_NOT_RESETTABLE              ((NDIS_STATUS)0x80010001L)
264 #define NDIS_STATUS_SOFT_ERRORS                 ((NDIS_STATUS)0x80010003L)
265 #define NDIS_STATUS_HARD_ERRORS                 ((NDIS_STATUS)0x80010004L)
266 #define NDIS_STATUS_BUFFER_OVERFLOW                 ((NDIS_STATUS)STATUS_BUFFER_OVERFLOW)
267
268 #define NDIS_STATUS_FAILURE                         ((NDIS_STATUS)STATUS_UNSUCCESSFUL)
269 #define NDIS_STATUS_RESOURCES                   ((NDIS_STATUS)STATUS_INSUFFICIENT_RESOURCES)
270 #define NDIS_STATUS_CLOSING                         ((NDIS_STATUS)0xC0010002L)
271 #define NDIS_STATUS_BAD_VERSION                 ((NDIS_STATUS)0xC0010004L)
272 #define NDIS_STATUS_BAD_CHARACTERISTICS         ((NDIS_STATUS)0xC0010005L)
273 #define NDIS_STATUS_ADAPTER_NOT_FOUND           ((NDIS_STATUS)0xC0010006L)
274 #define NDIS_STATUS_OPEN_FAILED                 ((NDIS_STATUS)0xC0010007L)
275 #define NDIS_STATUS_DEVICE_FAILED               ((NDIS_STATUS)0xC0010008L)
276 #define NDIS_STATUS_MULTICAST_FULL              ((NDIS_STATUS)0xC0010009L)
277 #define NDIS_STATUS_MULTICAST_EXISTS            ((NDIS_STATUS)0xC001000AL)
278 #define NDIS_STATUS_MULTICAST_NOT_FOUND         ((NDIS_STATUS)0xC001000BL)
279 #define NDIS_STATUS_REQUEST_ABORTED                 ((NDIS_STATUS)0xC001000CL)
280 #define NDIS_STATUS_RESET_IN_PROGRESS           ((NDIS_STATUS)0xC001000DL)
281 #define NDIS_STATUS_CLOSING_INDICATING          ((NDIS_STATUS)0xC001000EL)
282 #define NDIS_STATUS_NOT_SUPPORTED               ((NDIS_STATUS)STATUS_NOT_SUPPORTED)
283 #define NDIS_STATUS_INVALID_PACKET              ((NDIS_STATUS)0xC001000FL)
284 #define NDIS_STATUS_OPEN_LIST_FULL              ((NDIS_STATUS)0xC0010010L)
285 #define NDIS_STATUS_ADAPTER_NOT_READY           ((NDIS_STATUS)0xC0010011L)
286 #define NDIS_STATUS_ADAPTER_NOT_OPEN            ((NDIS_STATUS)0xC0010012L)
287 #define NDIS_STATUS_NOT_INDICATING              ((NDIS_STATUS)0xC0010013L)
288 #define NDIS_STATUS_INVALID_LENGTH              ((NDIS_STATUS)0xC0010014L)
289 #define NDIS_STATUS_INVALID_DATA                ((NDIS_STATUS)0xC0010015L)
290 #define NDIS_STATUS_BUFFER_TOO_SHORT            ((NDIS_STATUS)0xC0010016L)
291 #define NDIS_STATUS_INVALID_OID                 ((NDIS_STATUS)0xC0010017L)
292 #define NDIS_STATUS_ADAPTER_REMOVED                 ((NDIS_STATUS)0xC0010018L)
293 #define NDIS_STATUS_UNSUPPORTED_MEDIA           ((NDIS_STATUS)0xC0010019L)
294 #define NDIS_STATUS_GROUP_ADDRESS_IN_USE        ((NDIS_STATUS)0xC001001AL)
295 #define NDIS_STATUS_FILE_NOT_FOUND              ((NDIS_STATUS)0xC001001BL)
296 #define NDIS_STATUS_ERROR_READING_FILE          ((NDIS_STATUS)0xC001001CL)
297 #define NDIS_STATUS_ALREADY_MAPPED              ((NDIS_STATUS)0xC001001DL)
298 #define NDIS_STATUS_RESOURCE_CONFLICT           ((NDIS_STATUS)0xC001001EL)
299 #define NDIS_STATUS_NO_CABLE                    ((NDIS_STATUS)0xC001001FL)
300
301 #define NDIS_STATUS_INVALID_SAP                 ((NDIS_STATUS)0xC0010020L)
302 #define NDIS_STATUS_SAP_IN_USE                  ((NDIS_STATUS)0xC0010021L)
303 #define NDIS_STATUS_INVALID_ADDRESS             ((NDIS_STATUS)0xC0010022L)
304 #define NDIS_STATUS_VC_NOT_ACTIVATED            ((NDIS_STATUS)0xC0010023L)
305 #define NDIS_STATUS_DEST_OUT_OF_ORDER           ((NDIS_STATUS)0xC0010024L)
306 #define NDIS_STATUS_VC_NOT_AVAILABLE            ((NDIS_STATUS)0xC0010025L)
307 #define NDIS_STATUS_CELLRATE_NOT_AVAILABLE      ((NDIS_STATUS)0xC0010026L)
308 #define NDIS_STATUS_INCOMPATABLE_QOS            ((NDIS_STATUS)0xC0010027L)
309 #define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED      ((NDIS_STATUS)0xC0010028L)
310 #define NDIS_STATUS_NO_ROUTE_TO_DESTINATION     ((NDIS_STATUS)0xC0010029L)
311
312 #define NDIS_STATUS_TOKEN_RING_OPEN_ERROR       ((NDIS_STATUS)0xC0011000L)
313
314
315 /* NDIS error codes for error logging */
316
317 #define NDIS_ERROR_CODE ULONG
318
319 #define NDIS_ERROR_CODE_RESOURCE_CONFLICT                       EVENT_NDIS_RESOURCE_CONFLICT
320 #define NDIS_ERROR_CODE_OUT_OF_RESOURCES                        EVENT_NDIS_OUT_OF_RESOURCE
321 #define NDIS_ERROR_CODE_HARDWARE_FAILURE                        EVENT_NDIS_HARDWARE_FAILURE
322 #define NDIS_ERROR_CODE_ADAPTER_NOT_FOUND                       EVENT_NDIS_ADAPTER_NOT_FOUND
323 #define NDIS_ERROR_CODE_INTERRUPT_CONNECT                       EVENT_NDIS_INTERRUPT_CONNECT
324 #define NDIS_ERROR_CODE_DRIVER_FAILURE                          EVENT_NDIS_DRIVER_FAILURE
325 #define NDIS_ERROR_CODE_BAD_VERSION                                     EVENT_NDIS_BAD_VERSION
326 #define NDIS_ERROR_CODE_TIMEOUT                                         EVENT_NDIS_TIMEOUT
327 #define NDIS_ERROR_CODE_NETWORK_ADDRESS                         EVENT_NDIS_NETWORK_ADDRESS
328 #define NDIS_ERROR_CODE_UNSUPPORTED_CONFIGURATION       EVENT_NDIS_UNSUPPORTED_CONFIGURATION
329 #define NDIS_ERROR_CODE_INVALID_VALUE_FROM_ADAPTER      EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER
330 #define NDIS_ERROR_CODE_MISSING_CONFIGURATION_PARAMETER EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER
331 #define NDIS_ERROR_CODE_BAD_IO_BASE_ADDRESS                     EVENT_NDIS_BAD_IO_BASE_ADDRESS
332 #define NDIS_ERROR_CODE_RECEIVE_SPACE_SMALL                     EVENT_NDIS_RECEIVE_SPACE_SMALL
333 #define NDIS_ERROR_CODE_ADAPTER_DISABLED                        EVENT_NDIS_ADAPTER_DISABLED
334
335
336 /* Memory allocation flags. Used by Ndis(Allocate|Free)Memory */
337 #define NDIS_MEMORY_CONTIGUOUS  0x00000001
338 #define NDIS_MEMORY_NONCACHED   0x00000002
339
340 /* NIC attribute flags. Used by NdisMSetAttributes(Ex) */
341 #define NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT    0x00000001
342 #define NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT   0x00000002
343 #define NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS 0x00000004
344 #define NDIS_ATTRIBUTE_BUS_MASTER               0x00000008
345 #define NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER      0x00000010
346
347
348
349 #define MAXIMUM_PROCESSORS  32
350
351
352
353 /* Lock */
354
355 typedef union _NDIS_RW_LOCK_REFCOUNT
356 {
357     UINT    RefCount;
358     UCHAR   cacheLine[16];
359 } NDIS_RW_LOCK_REFCOUNT;
360
361 typedef struct _NDIS_RW_LOCK
362 {
363     union
364     {
365         struct
366         {
367             KSPIN_LOCK          SpinLock;
368             PVOID               Context;
369         } s;
370         UCHAR                   Reserved[16];
371     } u;
372
373     NDIS_RW_LOCK_REFCOUNT       RefCount[MAXIMUM_PROCESSORS];
374 } NDIS_RW_LOCK, *PNDIS_RW_LOCK;
375
376 typedef struct _LOCK_STATE
377 {
378     USHORT  LockState;
379     KIRQL   OldIrql;
380 } LOCK_STATE, *PLOCK_STATE;
381
382
383
384 /* Timer */
385
386 typedef VOID (*PNDIS_TIMER_FUNCTION)(
387     IN  PVOID   SystemSpecific1,
388     IN  PVOID   FunctionContext,
389     IN  PVOID   SystemSpecific2,
390     IN  PVOID   SystemSpecific3);
391
392 typedef struct _NDIS_TIMER
393 {
394     KTIMER  Timer;
395     KDPC    Dpc;
396 } NDIS_TIMER, *PNDIS_TIMER;
397
398
399
400 /* Hardware */
401
402 typedef CM_MCA_POS_DATA NDIS_MCA_POS_DATA, *PNDIS_MCA_POS_DATA;
403 typedef CM_EISA_SLOT_INFORMATION NDIS_EISA_SLOT_INFORMATION, *PNDIS_EISA_SLOT_INFORMATION;
404 typedef CM_EISA_FUNCTION_INFORMATION NDIS_EISA_FUNCTION_INFORMATION, *PNDIS_EISA_FUNCTION_INFORMATION;
405 typedef CM_PARTIAL_RESOURCE_LIST NDIS_RESOURCE_LIST, *PNDIS_RESOURCE_LIST;
406
407 /* Hardware status codes (OID_GEN_HARDWARE_STATUS) */
408 typedef enum _NDIS_HARDWARE_STATUS
409 {
410     NdisHardwareStatusReady,
411     NdisHardwareStatusInitializing,
412     NdisHardwareStatusReset,
413     NdisHardwareStatusClosing,
414     NdisHardwareStatusNotReady
415 } NDIS_HARDWARE_STATUS, *PNDIS_HARDWARE_STATUS;
416
417 /* OID_GEN_GET_TIME_CAPS */
418 typedef struct _GEN_GET_TIME_CAPS
419 {
420     ULONG                       Flags;
421     ULONG                       ClockPrecision;
422 } GEN_GET_TIME_CAPS, *PGEN_GET_TIME_CAPS;
423
424 /* Flag bits */
425 #define READABLE_LOCAL_CLOCK                    0x00000001
426 #define CLOCK_NETWORK_DERIVED                   0x00000002
427 #define CLOCK_PRECISION                         0x00000004
428 #define RECEIVE_TIME_INDICATION_CAPABLE         0x00000008
429 #define TIMED_SEND_CAPABLE                      0x00000010
430 #define TIME_STAMP_CAPABLE                      0x00000020
431
432 /* OID_GEN_GET_NETCARD_TIME */
433 typedef struct _GEN_GET_NETCARD_TIME
434 {
435     ULONGLONG   ReadTime;
436 } GEN_GET_NETCARD_TIME, *PGEN_GET_NETCARD_TIME;
437
438 /* NDIS driver medium (OID_GEN_MEDIA_SUPPORTED / OID_GEN_MEDIA_IN_USE) */
439 typedef enum _NDIS_MEDIUM
440 {
441     NdisMedium802_3,
442     NdisMedium802_5,
443     NdisMediumFddi,
444     NdisMediumWan,
445     NdisMediumLocalTalk,
446     NdisMediumDix,              /* Defined for convenience, not a real medium */
447     NdisMediumArcnetRaw,
448     NdisMediumArcnet878_2,
449     NdisMediumAtm,
450     NdisMediumWirelessWan,
451     NdisMediumIrda,
452     NdisMediumBpc,
453     NdisMediumCoWan,
454     NdisMedium1394,
455     NdisMediumMax
456 } NDIS_MEDIUM, *PNDIS_MEDIUM;
457
458 /* NDIS packet filter bits (OID_GEN_CURRENT_PACKET_FILTER) */
459 #define NDIS_PACKET_TYPE_DIRECTED               0x00000001
460 #define NDIS_PACKET_TYPE_MULTICAST              0x00000002
461 #define NDIS_PACKET_TYPE_ALL_MULTICAST          0x00000004
462 #define NDIS_PACKET_TYPE_BROADCAST              0x00000008
463 #define NDIS_PACKET_TYPE_SOURCE_ROUTING         0x00000010
464 #define NDIS_PACKET_TYPE_PROMISCUOUS            0x00000020
465 #define NDIS_PACKET_TYPE_SMT                    0x00000040
466 #define NDIS_PACKET_TYPE_ALL_LOCAL              0x00000080
467 #define NDIS_PACKET_TYPE_GROUP                  0x00001000
468 #define NDIS_PACKET_TYPE_ALL_FUNCTIONAL         0x00002000
469 #define NDIS_PACKET_TYPE_FUNCTIONAL             0x00004000
470 #define NDIS_PACKET_TYPE_MAC_FRAME              0x00008000
471
472 /* NDIS protocol option bits (OID_GEN_PROTOCOL_OPTIONS) */
473 #define NDIS_PROT_OPTION_ESTIMATED_LENGTH       0x00000001
474 #define NDIS_PROT_OPTION_NO_LOOPBACK            0x00000002
475 #define NDIS_PROT_OPTION_NO_RSVD_ON_RCVPKT      0x00000004
476
477 /* NDIS MAC option bits (OID_GEN_MAC_OPTIONS) */
478 #define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA     0x00000001
479 #define NDIS_MAC_OPTION_RECEIVE_SERIALIZED      0x00000002
480 #define NDIS_MAC_OPTION_TRANSFERS_NOT_PEND      0x00000004
481 #define NDIS_MAC_OPTION_NO_LOOPBACK             0x00000008
482 #define NDIS_MAC_OPTION_FULL_DUPLEX             0x00000010
483 #define NDIS_MAC_OPTION_EOTX_INDICATION         0x00000020
484 #define NDIS_MAC_OPTION_8021P_PRIORITY          0x00000040
485 #define NDIS_MAC_OPTION_RESERVED                0x80000000
486
487 /* State of the LAN media (OID_GEN_MEDIA_CONNECT_STATUS) */
488 typedef enum _NDIS_MEDIA_STATE
489 {
490     NdisMediaStateConnected,
491     NdisMediaStateDisconnected
492 } NDIS_MEDIA_STATE, *PNDIS_MEDIA_STATE;
493
494 /* OID_GEN_SUPPORTED_GUIDS */
495 typedef struct _NDIS_GUID
496 {
497     GUID            Guid;
498     union
499     {
500         NDIS_OID    Oid;
501         NDIS_STATUS Status;
502     } u;
503     ULONG           Size;
504     ULONG           Flags;
505 } NDIS_GUID, *PNDIS_GUID;
506
507 #define NDIS_GUID_TO_OID            0x00000001
508 #define NDIS_GUID_TO_STATUS         0x00000002
509 #define NDIS_GUID_ANSI_STRING       0x00000004
510 #define NDIS_GUID_UNICODE_STRING    0x00000008
511 #define NDIS_GUID_ARRAY             0x00000010
512
513
514
515 typedef struct _NDIS_PACKET_POOL
516 {
517     NDIS_SPIN_LOCK      SpinLock;
518     struct _NDIS_PACKET *FreeList;
519     UINT                PacketLength;
520     UCHAR               Buffer[1];
521 } NDIS_PACKET_POOL, * PNDIS_PACKET_POOL;
522
523 typedef struct _NDIS_PACKET_PRIVATE
524 {
525     UINT                PhysicalCount;
526     UINT                TotalLength;
527     PNDIS_BUFFER        Head;
528     PNDIS_BUFFER        Tail;
529     PNDIS_PACKET_POOL   Pool;
530     UINT                Count;
531     ULONG               Flags;                  /* See fPACKET_xxx bits below */
532     BOOLEAN                 ValidCounts;
533     UCHAR               NdisPacketFlags;
534     USHORT              NdisPacketOobOffset;
535 } NDIS_PACKET_PRIVATE, * PNDIS_PACKET_PRIVATE;
536
537 #define fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO    0x40
538 #define fPACKET_ALLOCATED_BY_NDIS               0x80
539
540 typedef struct _NDIS_PACKET {
541     NDIS_PACKET_PRIVATE  Private;
542     union {
543         struct {
544              UCHAR       MiniportReserved[2*sizeof(PVOID)];
545              UCHAR       WrapperReserved[2*sizeof(PVOID)];
546         } s1;
547         struct {
548              UCHAR       MiniportReservedEx[3*sizeof(PVOID)];
549              UCHAR       WrapperReservedEx[sizeof(PVOID)];
550         } s2;
551         struct {
552              UCHAR       MacReserved[4*sizeof(PVOID)];
553         } s3;
554     } u;
555     ULONG_PTR            Reserved[2];
556     UCHAR                ProtocolReserved[1];
557 } NDIS_PACKET, *PNDIS_PACKET, **PPNDIS_PACKET;
558
559 typedef struct _NDIS_PACKET_OOB_DATA {
560     union {
561         ULONGLONG  TimeToSend;
562         ULONGLONG  TimeSent;
563     } u;
564     ULONGLONG      TimeReceived;
565     UINT           HeaderSize;
566     UINT           SizeMediaSpecificInfo;
567     PVOID          MediaSpecificInformation;
568     NDIS_STATUS    Status;
569 } NDIS_PACKET_OOB_DATA, *PNDIS_PACKET_OOB_DATA;
570
571 typedef struct _NDIS_PM_PACKET_PATTERN
572 {
573     ULONG  Priority;
574     ULONG  Reserved;
575     ULONG  MaskSize;
576     ULONG  PatternOffset;
577     ULONG  PatternSize;
578     ULONG  PatternFlags;
579 } NDIS_PM_PACKET_PATTERN,  *PNDIS_PM_PACKET_PATTERN;
580
581
582 /* Request types used by NdisRequest */
583 typedef enum _NDIS_REQUEST_TYPE
584 {
585     NdisRequestQueryInformation,
586     NdisRequestSetInformation,
587     NdisRequestQueryStatistics,
588     NdisRequestOpen,
589     NdisRequestClose,
590     NdisRequestSend,
591     NdisRequestTransferData,
592     NdisRequestReset,
593     NdisRequestGeneric1,
594     NdisRequestGeneric2,
595     NdisRequestGeneric3,
596     NdisRequestGeneric4
597 } NDIS_REQUEST_TYPE, *PNDIS_REQUEST_TYPE;
598
599 typedef struct _NDIS_REQUEST {
600     UCHAR             MacReserved[16];
601     NDIS_REQUEST_TYPE RequestType;
602     union _DATA {
603         struct QUERY_INFORMATION {
604             NDIS_OID  Oid;
605             PVOID     InformationBuffer;
606             UINT      InformationBufferLength;
607             UINT      BytesWritten;
608             UINT      BytesNeeded;
609         } QUERY_INFORMATION;
610         struct SET_INFORMATION {
611             NDIS_OID  Oid;
612             PVOID     InformationBuffer;
613             UINT      InformationBufferLength;
614             UINT      BytesRead;
615             UINT      BytesNeeded;
616         } SET_INFORMATION;
617    } DATA;
618 } NDIS_REQUEST, *PNDIS_REQUEST;
619
620
621
622 /* Wide Area Networks definitions */
623
624 typedef struct _NDIS_WAN_PACKET
625 {
626     LIST_ENTRY  WanPacketQueue;
627     PUCHAR      CurrentBuffer;
628     ULONG       CurrentLength;
629     PUCHAR      StartBuffer;
630     PUCHAR      EndBuffer;
631     PVOID       ProtocolReserved1;
632     PVOID       ProtocolReserved2;
633     PVOID       ProtocolReserved3;
634     PVOID       ProtocolReserved4;
635     PVOID       MacReserved1;
636     PVOID       MacReserved2;
637     PVOID       MacReserved3;
638     PVOID       MacReserved4;
639 } NDIS_WAN_PACKET, *PNDIS_WAN_PACKET;
640
641
642
643 /* DMA channel information */
644
645 typedef struct _NDIS_DMA_DESCRIPTION
646 {
647     BOOLEAN     DemandMode;
648     BOOLEAN     AutoInitialize;
649     BOOLEAN     DmaChannelSpecified;
650     DMA_WIDTH   DmaWidth;
651     DMA_SPEED   DmaSpeed;
652     ULONG       DmaPort;
653     ULONG       DmaChannel;
654 } NDIS_DMA_DESCRIPTION, *PNDIS_DMA_DESCRIPTION;
655
656 typedef struct _NDIS_DMA_BLOCK
657 {
658     PVOID           MapRegisterBase;
659     KEVENT          AllocationEvent;
660     PADAPTER_OBJECT SystemAdapterObject;
661     BOOLEAN         InProgress;
662 } NDIS_DMA_BLOCK, *PNDIS_DMA_BLOCK;
663
664
665 /* Possible hardware architecture */
666 typedef enum _NDIS_INTERFACE_TYPE
667 {
668         NdisInterfaceInternal       = Internal,
669         NdisInterfaceIsa            = Isa,
670         NdisInterfaceEisa           = Eisa,
671         NdisInterfaceMca            = MicroChannel,
672         NdisInterfaceTurboChannel   = TurboChannel,
673         NdisInterfacePci            = PCIBus,
674         NdisInterfacePcMcia         = PCMCIABus
675 } NDIS_INTERFACE_TYPE, *PNDIS_INTERFACE_TYPE;
676
677 #define NdisInterruptLevelSensitive LevelSensitive
678 #define NdisInterruptLatched        Latched
679 typedef KINTERRUPT_MODE NDIS_INTERRUPT_MODE, *PNDIS_INTERRUPT_MODE;
680
681
682 typedef enum _NDIS_PARAMETER_TYPE
683 {
684     NdisParameterInteger,
685     NdisParameterHexInteger,
686     NdisParameterString,
687     NdisParameterMultiString
688 } NDIS_PARAMETER_TYPE, *PNDIS_PARAMETER_TYPE;
689
690 typedef struct _NDIS_CONFIGURATION_PARAMETER
691 {
692     NDIS_PARAMETER_TYPE ParameterType;
693     union
694     {
695         ULONG IntegerData;
696         NDIS_STRING StringData;
697     } ParameterData;
698 } NDIS_CONFIGURATION_PARAMETER, *PNDIS_CONFIGURATION_PARAMETER;
699
700
701 typedef PHYSICAL_ADDRESS NDIS_PHYSICAL_ADDRESS, *PNDIS_PHYSICAL_ADDRESS;
702
703 typedef struct _NDIS_PHYSICAL_ADDRESS_UNIT
704 {
705         NDIS_PHYSICAL_ADDRESS           PhysicalAddress;
706         UINT                                            Length;
707 } NDIS_PHYSICAL_ADDRESS_UNIT, *PNDIS_PHYSICAL_ADDRESS_UNIT;
708
709
710 typedef VOID (*ADAPTER_SHUTDOWN_HANDLER)(
711     IN  PVOID   ShutdownContext);
712
713
714
715 #ifdef NDIS_WRAPPER
716
717 typedef struct _OID_LIST    OID_LIST, *POID_LIST;
718
719 /* PnP state */
720
721 typedef enum _NDIS_PNP_DEVICE_STATE
722 {
723     NdisPnPDeviceAdded,
724     NdisPnPDeviceStarted,
725     NdisPnPDeviceQueryStopped,
726     NdisPnPDeviceStopped,
727     NdisPnPDeviceQueryRemoved,
728     NdisPnPDeviceRemoved,
729     NdisPnPDeviceSurpriseRemoved
730 } NDIS_PNP_DEVICE_STATE;
731
732 #define NDIS_DEVICE_NOT_STOPPABLE               0x00000001
733 #define NDIS_DEVICE_NOT_REMOVEABLE              0x00000002
734 #define NDIS_DEVICE_NOT_SUSPENDABLE                 0x00000004
735 #define NDIS_DEVICE_DISABLE_PM                  0x00000008
736 #define NDIS_DEVICE_DISABLE_WAKE_UP             0x00000010
737 #define NDIS_DEVICE_DISABLE_WAKE_ON_RECONNECT   0x00000020
738
739 #endif /* NDIS_WRAPPER */
740
741
742 #ifdef NDIS50
743
744 typedef struct _ATM_ADDRESS ATM_ADDRESS, *PATM_ADDRESS;
745
746
747 /* OID_GEN_NETWORK_LAYER_ADDRESSES */
748 typedef struct _NETWORK_ADDRESS
749 {
750     USHORT  AddressLength; 
751     USHORT  AddressType; 
752     UCHAR   Address[1]; 
753 } NETWORK_ADDRESS, *PNETWORK_ADDRESS;
754
755 typedef struct _NETWORK_ADDRESS_LIST 
756 {
757     LONG    AddressCount; 
758     USHORT  AddressType; 
759     NETWORK_ADDRESS Address[1]; 
760 } NETWORK_ADDRESS_LIST, *PNETWORK_ADDRESS_LIST;
761
762 /* Protocol types supported by NDIS */
763 #define NDIS_PROTOCOL_ID_DEFAULT        0x00
764 #define NDIS_PROTOCOL_ID_TCP_IP         0x02
765 #define NDIS_PROTOCOL_ID_IPX            0x06
766 #define NDIS_PROTOCOL_ID_NBF            0x07
767 #define NDIS_PROTOCOL_ID_MAX            0x0F
768 #define NDIS_PROTOCOL_ID_MASK           0x0F
769
770 /* OID_GEN_TRANSPORT_HEADER_OFFSET */
771 typedef struct _TRANSPORT_HEADER_OFFSET
772 {
773     USHORT  ProtocolType; 
774     USHORT  HeaderOffset; 
775 } TRANSPORT_HEADER_OFFSET, *PTRANSPORT_HEADER_OFFSET;
776
777
778 /* OID_GEN_CO_LINK_SPEED / OID_GEN_CO_MINIMUM_LINK_SPEED */
779 typedef struct _NDIS_CO_LINK_SPEED
780 {
781     ULONG   Outbound;
782     ULONG   Inbound;
783 } NDIS_CO_LINK_SPEED, *PNDIS_CO_LINK_SPEED;
784
785
786 typedef enum _NDIS_AF
787 {
788     CO_ADDRESS_FAMILY_Q2931 = 1,
789     CO_ADDRESS_FAMILY_SPANS,
790 } NDIS_AF, *PNDIS_AF;
791
792 typedef struct
793 {
794     NDIS_AF  AddressFamily;
795     ULONG    MajorVersion;
796     ULONG    MinorVersion;
797 } CO_ADDRESS_FAMILY, *PCO_ADDRESS_FAMILY;
798
799 typedef enum
800 {
801     BestEffortService,
802     PredictiveService,
803     GuaranteedService
804 } GUARANTEE;
805
806 typedef struct _CO_FLOW_PARAMETERS
807 {
808     ULONG       TokenRate;              /* In Bytes/sec */
809     ULONG       TokenBucketSize;        /* In Bytes */
810     ULONG       PeakBandwidth;          /* In Bytes/sec */
811     ULONG       Latency;                /* In microseconds */
812     ULONG       DelayVariation;         /* In microseconds */
813     GUARANTEE   LevelOfGuarantee;       /* Guaranteed, Predictive or Best Effort */
814     ULONG       CostOfCall;             /* Reserved for future use, */
815                                         /* must be set to 0 now */
816     ULONG       NetworkAvailability;    /* read-only: 1 if accessible, 0 if not */
817     ULONG       MaxSduSize;             /* In Bytes */
818 } CO_FLOW_PARAMETERS, *PCO_FLOW_PARAMETERS;
819
820 typedef struct _CO_SPECIFIC_PARAMETERS
821 {
822     ULONG   ParamType;
823     ULONG   Length;
824     UCHAR   Parameters[1];
825 } CO_SPECIFIC_PARAMETERS, *PCO_SPECIFIC_PARAMETERS;
826
827 typedef struct _CO_CALL_MANAGER_PARAMETERS {
828     CO_FLOW_PARAMETERS      Transmit;
829     CO_FLOW_PARAMETERS      Receive;
830     CO_SPECIFIC_PARAMETERS  CallMgrSpecific;
831 } CO_CALL_MANAGER_PARAMETERS, *PCO_CALL_MANAGER_PARAMETERS;
832
833 typedef struct _CO_MEDIA_PARAMETERS
834 {
835     ULONG                       Flags;
836     ULONG                       ReceivePriority;
837     ULONG                       ReceiveSizeHint;
838     CO_SPECIFIC_PARAMETERS      MediaSpecific;
839 } CO_MEDIA_PARAMETERS, *PCO_MEDIA_PARAMETERS;
840
841 /* Definitions for the flags in CO_MEDIA_PARAMETERS */
842 #define RECEIVE_TIME_INDICATION         0x00000001
843 #define USE_TIME_STAMPS                 0x00000002
844 #define TRANSMIT_VC                         0x00000004
845 #define RECEIVE_VC                      0x00000008
846 #define INDICATE_ERRED_PACKETS          0x00000010
847 #define INDICATE_END_OF_TX              0x00000020
848 #define RESERVE_RESOURCES_VC            0x00000040
849 #define ROUND_DOWN_FLOW                 0x00000080
850 #define ROUND_UP_FLOW                   0x00000100
851
852 typedef struct _CO_CALL_PARAMETERS
853 {
854     ULONG                           Flags;
855     PCO_CALL_MANAGER_PARAMETERS     CallMgrParameters;
856     PCO_MEDIA_PARAMETERS            MediaParameters;
857 } CO_CALL_PARAMETERS, *PCO_CALL_PARAMETERS;
858
859 typedef struct _CO_SAP {
860     ULONG   SapType;
861     ULONG   SapLength;
862     UCHAR   Sap[1];
863 } CO_SAP, *PCO_SAP;
864
865 typedef struct _NDIS_IPSEC_PACKET_INFO
866 {
867     union
868     {
869         struct
870         {
871             NDIS_HANDLE    OffloadHandle;
872             NDIS_HANDLE    NextOffloadHandle;
873         } Transmit;
874  
875         struct
876         {
877             ULONG    SA_DELETE_REQ:1;
878             ULONG    CRYPTO_DONE:1;
879             ULONG    NEXT_CRYPTO_DONE:1;
880             ULONG    CryptoStatus;
881         } Receive;
882     } u;
883 } NDIS_IPSEC_PACKET_INFO, *PNDIS_IPSEC_PACKET_INFO;
884
885
886 /* Plug and play and power management */
887
888 /* PnP and PM event codes */
889 typedef enum _NET_PNP_EVENT_CODE
890 {
891     NetEventSetPower,
892     NetEventQueryPower,
893     NetEventQueryRemoveDevice,
894     NetEventCancelRemoveDevice,
895     NetEventReconfigure,
896     NetEventBindList,
897     NetEventBindsComplete,
898     NetEventPnPCapabilities,
899     NetEventMaximum
900 } NET_PNP_EVENT_CODE, *PNET_PNP_EVENT_CODE;
901
902 /* Networking PnP event indication structure */
903 typedef struct _NET_PNP_EVENT
904 {
905     /* Event code */
906     NET_PNP_EVENT_CODE  NetEvent;
907     /* Event specific data */
908     PVOID               Buffer;
909     /* Length of event specific data */
910     ULONG               BufferLength;
911
912     /* Reserved areas */
913         ULONG_PTR           NdisReserved[4];
914         ULONG_PTR           TransportReserved[4];
915         ULONG_PTR           TdiReserved[4];
916         ULONG_PTR           TdiClientReserved[4];
917 } NET_PNP_EVENT, *PNET_PNP_EVENT;
918
919 /* Device power state structure */
920 typedef enum _NET_DEVICE_POWER_STATE
921 {
922     NetDeviceStateUnspecified = 0,
923     NetDeviceStateD0,
924     NetDeviceStateD1,
925     NetDeviceStateD2,
926     NetDeviceStateD3,
927     NetDeviceStateMaximum
928 } NET_DEVICE_POWER_STATE, *PNET_DEVICE_POWER_STATE;
929
930
931
932 /* Call Manager */
933
934 typedef NDIS_STATUS (*CO_CREATE_VC_HANDLER)(
935     IN  NDIS_HANDLE     ProtocolAfContext,
936     IN  NDIS_HANDLE     NdisVcHandle,
937     OUT PNDIS_HANDLE    ProtocolVcContext);
938
939 typedef NDIS_STATUS (*CO_DELETE_VC_HANDLER)(
940     IN  NDIS_HANDLE ProtocolVcContext);
941
942 typedef NDIS_STATUS (*CO_REQUEST_HANDLER)(
943     IN  NDIS_HANDLE         ProtocolAfContext,
944     IN  NDIS_HANDLE         ProtocolVcContext       OPTIONAL,
945     IN  NDIS_HANDLE             ProtocolPartyContext    OPTIONAL,
946     IN  OUT PNDIS_REQUEST   NdisRequest);
947
948 typedef VOID (*CO_REQUEST_COMPLETE_HANDLER)(
949     IN  NDIS_STATUS     Status,
950     IN  NDIS_HANDLE     ProtocolAfContext       OPTIONAL,
951     IN  NDIS_HANDLE     ProtocolVcContext       OPTIONAL,
952     IN  NDIS_HANDLE     ProtocolPartyContext    OPTIONAL,
953     IN  PNDIS_REQUEST   NdisRequest);
954
955
956 typedef NDIS_STATUS (*CM_OPEN_AF_HANDLER)(
957         IN      NDIS_HANDLE                             CallMgrBindingContext,
958         IN      PCO_ADDRESS_FAMILY              AddressFamily,
959         IN      NDIS_HANDLE                             NdisAfHandle,
960         OUT     PNDIS_HANDLE                    CallMgrAfContext
961         );
962
963 typedef
964 NDIS_STATUS
965 (*CM_CLOSE_AF_HANDLER)(
966         IN      NDIS_HANDLE                             CallMgrAfContext
967         );
968
969 typedef
970 NDIS_STATUS
971 (*CM_REG_SAP_HANDLER)(
972         IN      NDIS_HANDLE                             CallMgrAfContext,
973         IN      PCO_SAP                                 Sap,
974         IN      NDIS_HANDLE                             NdisSapHandle,
975         OUT     PNDIS_HANDLE                    CallMgrSapContext
976         );
977
978 typedef
979 NDIS_STATUS
980 (*CM_DEREG_SAP_HANDLER)(
981         IN      NDIS_HANDLE                             CallMgrSapContext
982         );
983
984 typedef
985 NDIS_STATUS
986 (*CM_MAKE_CALL_HANDLER)(
987         IN      NDIS_HANDLE                             CallMgrVcContext,
988         IN OUT PCO_CALL_PARAMETERS      CallParameters,
989         IN      NDIS_HANDLE                             NdisPartyHandle         OPTIONAL,
990         OUT     PNDIS_HANDLE                    CallMgrPartyContext OPTIONAL
991         );
992
993 typedef
994 NDIS_STATUS
995 (*CM_CLOSE_CALL_HANDLER)(
996         IN      NDIS_HANDLE                             CallMgrVcContext,
997         IN      NDIS_HANDLE                             CallMgrPartyContext     OPTIONAL,
998         IN      PVOID                                   CloseData                       OPTIONAL,
999         IN      UINT                                    Size                            OPTIONAL
1000         );
1001
1002 typedef
1003 VOID
1004 (*CM_INCOMING_CALL_COMPLETE_HANDLER)(
1005         IN      NDIS_STATUS                             Status,
1006         IN      NDIS_HANDLE                             CallMgrVcContext,
1007         IN      PCO_CALL_PARAMETERS             CallParameters
1008         );
1009
1010 typedef
1011 NDIS_STATUS
1012 (*CM_ADD_PARTY_HANDLER)(
1013         IN      NDIS_HANDLE                             CallMgrVcContext,
1014         IN OUT PCO_CALL_PARAMETERS      CallParameters,
1015         IN      NDIS_HANDLE                             NdisPartyHandle,
1016         OUT     PNDIS_HANDLE                    CallMgrPartyContext
1017         );
1018
1019 typedef
1020 NDIS_STATUS
1021 (*CM_DROP_PARTY_HANDLER)(
1022         IN      NDIS_HANDLE                             CallMgrPartyContext,
1023         IN      PVOID                                   CloseData       OPTIONAL,
1024         IN      UINT                                    Size            OPTIONAL
1025         );
1026
1027 typedef
1028 VOID
1029 (*CM_ACTIVATE_VC_COMPLETE_HANDLER)(
1030         IN      NDIS_STATUS                             Status,
1031         IN      NDIS_HANDLE                             CallMgrVcContext,
1032         IN      PCO_CALL_PARAMETERS             CallParameters
1033         );
1034
1035 typedef
1036 VOID
1037 (*CM_DEACTIVATE_VC_COMPLETE_HANDLER)(
1038         IN      NDIS_STATUS                             Status,
1039         IN      NDIS_HANDLE                             CallMgrVcContext
1040         );
1041
1042 typedef
1043 NDIS_STATUS
1044 (*CM_MODIFY_CALL_QOS_HANDLER)(
1045         IN      NDIS_HANDLE                             CallMgrVcContext,
1046         IN      PCO_CALL_PARAMETERS             CallParameters
1047         );
1048
1049 typedef struct _NDIS_CALL_MANAGER_CHARACTERISTICS
1050 {
1051     UCHAR   MajorVersion;
1052     UCHAR   MinorVersion;
1053
1054     USHORT  Filler;
1055     UINT    Reserved;
1056
1057     CO_CREATE_VC_HANDLER                CmCreateVcHandler;
1058     CO_DELETE_VC_HANDLER                CmDeleteVcHandler;
1059     CM_OPEN_AF_HANDLER                  CmOpenAfHandler;
1060     CM_CLOSE_AF_HANDLER                 CmCloseAfHandler;
1061     CM_REG_SAP_HANDLER                  CmRegisterSapHandler;
1062     CM_DEREG_SAP_HANDLER                CmDeregisterSapHandler;
1063     CM_MAKE_CALL_HANDLER                CmMakeCallHandler;
1064     CM_CLOSE_CALL_HANDLER               CmCloseCallHandler;
1065     CM_INCOMING_CALL_COMPLETE_HANDLER   CmIncomingCallCompleteHandler;
1066     CM_ADD_PARTY_HANDLER                CmAddPartyHandler;
1067     CM_DROP_PARTY_HANDLER               CmDropPartyHandler;
1068     CM_ACTIVATE_VC_COMPLETE_HANDLER     CmActivateVcCompleteHandler;
1069     CM_DEACTIVATE_VC_COMPLETE_HANDLER   CmDeactivateVcCompleteHandler;
1070     CM_MODIFY_CALL_QOS_HANDLER          CmModifyCallQoSHandler;
1071     CO_REQUEST_HANDLER                  CmRequestHandler;
1072     CO_REQUEST_COMPLETE_HANDLER         CmRequestCompleteHandler;
1073 } NDIS_CALL_MANAGER_CHARACTERISTICS, *PNDIS_CALL_MANAGER_CHARACTERISTICS;
1074
1075
1076
1077 /* Call Manager clients */
1078
1079 typedef VOID (*CL_OPEN_AF_COMPLETE_HANDLER)(
1080     IN  NDIS_STATUS Status,
1081     IN  NDIS_HANDLE ProtocolAfContext,
1082     IN  NDIS_HANDLE NdisAfHandle);
1083
1084 typedef VOID (*CL_CLOSE_AF_COMPLETE_HANDLER)(
1085     IN  NDIS_STATUS Status,
1086     IN  NDIS_HANDLE ProtocolAfContext);
1087
1088 typedef VOID (*CL_REG_SAP_COMPLETE_HANDLER)(
1089     IN  NDIS_STATUS Status,
1090     IN  NDIS_HANDLE ProtocolSapContext,
1091     IN  PCO_SAP     Sap,
1092     IN  NDIS_HANDLE NdisSapHandle);
1093
1094 typedef VOID (*CL_DEREG_SAP_COMPLETE_HANDLER)(
1095     IN  NDIS_STATUS Status,
1096     IN  NDIS_HANDLE ProtocolSapContext);
1097
1098 typedef VOID (*CL_MAKE_CALL_COMPLETE_HANDLER)(
1099     IN  NDIS_STATUS         Status,
1100     IN  NDIS_HANDLE         ProtocolVcContext,
1101     IN  NDIS_HANDLE         NdisPartyHandle     OPTIONAL,
1102     IN  PCO_CALL_PARAMETERS CallParameters);
1103
1104 typedef VOID (*CL_MODIFY_CALL_QOS_COMPLETE_HANDLER)(
1105     IN  NDIS_STATUS         Status,
1106     IN  NDIS_HANDLE         ProtocolVcContext,
1107     IN  PCO_CALL_PARAMETERS CallParameters);
1108
1109 typedef VOID (*CL_CLOSE_CALL_COMPLETE_HANDLER)(
1110     IN  NDIS_STATUS Status,
1111     IN  NDIS_HANDLE ProtocolVcContext,
1112     IN  NDIS_HANDLE ProtocolPartyContext    OPTIONAL);
1113
1114 typedef VOID (*CL_ADD_PARTY_COMPLETE_HANDLER)(
1115     IN  NDIS_STATUS         Status,
1116     IN  NDIS_HANDLE         ProtocolPartyContext,
1117     IN  NDIS_HANDLE         NdisPartyHandle,
1118     IN  PCO_CALL_PARAMETERS CallParameters);
1119
1120 typedef VOID (*CL_DROP_PARTY_COMPLETE_HANDLER)(
1121     IN  NDIS_STATUS Status,
1122     IN  NDIS_HANDLE ProtocolPartyContext);
1123
1124 typedef NDIS_STATUS (*CL_INCOMING_CALL_HANDLER)(
1125     IN  NDIS_HANDLE             ProtocolSapContext,
1126     IN  NDIS_HANDLE             ProtocolVcContext,
1127     IN  OUT PCO_CALL_PARAMETERS CallParameters);
1128
1129 typedef VOID (*CL_INCOMING_CALL_QOS_CHANGE_HANDLER)(
1130     IN  NDIS_HANDLE         ProtocolVcContext,
1131     IN  PCO_CALL_PARAMETERS CallParameters);
1132
1133 typedef VOID (*CL_INCOMING_CLOSE_CALL_HANDLER)(
1134     IN  NDIS_STATUS CloseStatus,
1135     IN  NDIS_HANDLE ProtocolVcContext,
1136     IN  PVOID       CloseData   OPTIONAL,
1137     IN  UINT        Size        OPTIONAL);
1138
1139 typedef VOID (*CL_INCOMING_DROP_PARTY_HANDLER)(
1140     IN  NDIS_STATUS DropStatus,
1141     IN  NDIS_HANDLE ProtocolPartyContext,
1142     IN  PVOID       CloseData   OPTIONAL,
1143     IN  UINT        Size        OPTIONAL);
1144
1145 typedef VOID (*CL_CALL_CONNECTED_HANDLER)(
1146     IN  NDIS_HANDLE ProtocolVcContext);
1147
1148
1149 typedef struct _NDIS_CLIENT_CHARACTERISTICS
1150 {
1151     UCHAR   MajorVersion;
1152     UCHAR   MinorVersion;
1153
1154     USHORT  Filler;
1155     UINT    Reserved;
1156
1157     CO_CREATE_VC_HANDLER                ClCreateVcHandler;
1158     CO_DELETE_VC_HANDLER                ClDeleteVcHandler;
1159     CO_REQUEST_HANDLER                  ClRequestHandler;
1160     CO_REQUEST_COMPLETE_HANDLER         ClRequestCompleteHandler;
1161     CL_OPEN_AF_COMPLETE_HANDLER         ClOpenAfCompleteHandler;
1162     CL_CLOSE_AF_COMPLETE_HANDLER        ClCloseAfCompleteHandler;
1163     CL_REG_SAP_COMPLETE_HANDLER         ClRegisterSapCompleteHandler;
1164     CL_DEREG_SAP_COMPLETE_HANDLER       ClDeregisterSapCompleteHandler;
1165     CL_MAKE_CALL_COMPLETE_HANDLER       ClMakeCallCompleteHandler;
1166     CL_MODIFY_CALL_QOS_COMPLETE_HANDLER ClModifyCallQoSCompleteHandler;
1167     CL_CLOSE_CALL_COMPLETE_HANDLER      ClCloseCallCompleteHandler;
1168     CL_ADD_PARTY_COMPLETE_HANDLER       ClAddPartyCompleteHandler;
1169     CL_DROP_PARTY_COMPLETE_HANDLER      ClDropPartyCompleteHandler;
1170     CL_INCOMING_CALL_HANDLER            ClIncomingCallHandler;
1171     CL_INCOMING_CALL_QOS_CHANGE_HANDLER ClIncomingCallQoSChangeHandler;
1172     CL_INCOMING_CLOSE_CALL_HANDLER      ClIncomingCloseCallHandler;
1173     CL_INCOMING_DROP_PARTY_HANDLER      ClIncomingDropPartyHandler;
1174     CL_CALL_CONNECTED_HANDLER           ClCallConnectedHandler;
1175 } NDIS_CLIENT_CHARACTERISTICS, *PNDIS_CLIENT_CHARACTERISTICS;
1176
1177 #endif /* NDIS50 */
1178
1179
1180
1181 /* NDIS protocol structures */
1182
1183 /* Prototypes for NDIS 3.0 protocol characteristics */
1184
1185 typedef VOID (*OPEN_ADAPTER_COMPLETE_HANDLER)(
1186     IN  NDIS_HANDLE     ProtocolBindingContext,
1187     IN  NDIS_STATUS     Status,
1188     IN  NDIS_STATUS     OpenErrorStatus);
1189
1190 typedef VOID (*CLOSE_ADAPTER_COMPLETE_HANDLER)(
1191     IN  NDIS_HANDLE     ProtocolBindingContext,
1192     IN  NDIS_STATUS     Status);
1193
1194 typedef VOID (*RESET_COMPLETE_HANDLER)(
1195     IN  NDIS_HANDLE     ProtocolBindingContext,
1196     IN  NDIS_STATUS     Status);
1197
1198 typedef VOID (*REQUEST_COMPLETE_HANDLER)(
1199     IN  NDIS_HANDLE     ProtocolBindingContext,
1200     IN  PNDIS_REQUEST   NdisRequest,
1201     IN  NDIS_STATUS     Status);
1202
1203 typedef VOID (*STATUS_HANDLER)(
1204     IN  NDIS_HANDLE     ProtocolBindingContext,
1205     IN  NDIS_STATUS     GeneralStatus,
1206     IN  PVOID           StatusBuffer,
1207     IN  UINT            StatusBufferSize);
1208
1209 typedef VOID (*STATUS_COMPLETE_HANDLER)(
1210     IN  NDIS_HANDLE     ProtocolBindingContext);
1211
1212 typedef VOID (*SEND_COMPLETE_HANDLER)(
1213     IN  NDIS_HANDLE     ProtocolBindingContext,
1214     IN  PNDIS_PACKET    Packet,
1215     IN  NDIS_STATUS     Status);
1216
1217 typedef VOID (*WAN_SEND_COMPLETE_HANDLER)(
1218     IN  NDIS_HANDLE         ProtocolBindingContext,
1219     IN  PNDIS_WAN_PACKET    Packet,
1220     IN  NDIS_STATUS         Status);
1221
1222 typedef VOID (*TRANSFER_DATA_COMPLETE_HANDLER)(
1223     IN  NDIS_HANDLE     ProtocolBindingContext,
1224     IN  PNDIS_PACKET    Packet,
1225     IN  NDIS_STATUS     Status,
1226     IN  UINT            BytesTransferred);
1227
1228 typedef VOID (*WAN_TRANSFER_DATA_COMPLETE_HANDLER)(
1229     VOID);
1230
1231 typedef NDIS_STATUS (*RECEIVE_HANDLER)(
1232     IN  NDIS_HANDLE     ProtocolBindingContext,
1233     IN  NDIS_HANDLE     MacReceiveContext,
1234     IN  PVOID           HeaderBuffer,
1235     IN  UINT            HeaderBufferSize,
1236     IN  PVOID           LookAheadBuffer,
1237     IN  UINT            LookaheadBufferSize,
1238     IN  UINT            PacketSize);
1239
1240 typedef NDIS_STATUS (*WAN_RECEIVE_HANDLER)(
1241     IN  NDIS_HANDLE     NdisLinkHandle,
1242     IN  PUCHAR          Packet,
1243     IN  ULONG           PacketSize);
1244
1245 typedef VOID (*RECEIVE_COMPLETE_HANDLER)(
1246     IN  NDIS_HANDLE     ProtocolBindingContext);
1247
1248
1249 /* Protocol characteristics for NDIS 3.0 protocols */
1250 #ifdef _MSC_VER
1251 typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS
1252 {
1253     UCHAR                           MajorNdisVersion;
1254     UCHAR                           MinorNdisVersion;
1255     union
1256     {
1257         UINT                        Reserved;
1258         UINT                        Flags;
1259     } u1;
1260     OPEN_ADAPTER_COMPLETE_HANDLER   OpenAdapterCompleteHandler;
1261     CLOSE_ADAPTER_COMPLETE_HANDLER  CloseAdapterCompleteHandler;
1262     union
1263     {
1264         SEND_COMPLETE_HANDLER       SendCompleteHandler;
1265         WAN_SEND_COMPLETE_HANDLER   WanSendCompleteHandler;
1266     } u2;
1267     union
1268     {
1269         TRANSFER_DATA_COMPLETE_HANDLER      TransferDataCompleteHandler;
1270         WAN_TRANSFER_DATA_COMPLETE_HANDLER  WanTransferDataCompleteHandler;
1271     } u3;
1272
1273     RESET_COMPLETE_HANDLER          ResetCompleteHandler;
1274     REQUEST_COMPLETE_HANDLER        RequestCompleteHandler;
1275     union
1276     {
1277         RECEIVE_HANDLER             ReceiveHandler;
1278         WAN_RECEIVE_HANDLER         WanReceiveHandler;
1279     } u4;
1280     RECEIVE_COMPLETE_HANDLER        ReceiveCompleteHandler;
1281     STATUS_HANDLER                  StatusHandler;
1282     STATUS_COMPLETE_HANDLER             StatusCompleteHandler;
1283     NDIS_STRING                     Name;
1284 } NDIS30_PROTOCOL_CHARACTERISTICS;
1285 typedef NDIS30_PROTOCOL_CHARACTERISTICS NDIS30_PROTOCOL_CHARACTERISTICS_S;
1286 #else
1287 #define NDIS30_PROTOCOL_CHARACTERISTICS \
1288     UCHAR                           MajorNdisVersion; \
1289     UCHAR                           MinorNdisVersion; \
1290     union \
1291     { \
1292         UINT                        Reserved; \
1293         UINT                        Flags; \
1294     } u1; \
1295     OPEN_ADAPTER_COMPLETE_HANDLER   OpenAdapterCompleteHandler; \
1296     CLOSE_ADAPTER_COMPLETE_HANDLER  CloseAdapterCompleteHandler; \
1297     union \
1298     { \
1299         SEND_COMPLETE_HANDLER       SendCompleteHandler; \
1300         WAN_SEND_COMPLETE_HANDLER   WanSendCompleteHandler; \
1301     } u2; \
1302     union \
1303     { \
1304         TRANSFER_DATA_COMPLETE_HANDLER      TransferDataCompleteHandler; \
1305         WAN_TRANSFER_DATA_COMPLETE_HANDLER  WanTransferDataCompleteHandler; \
1306     } u3; \
1307     RESET_COMPLETE_HANDLER          ResetCompleteHandler; \
1308     REQUEST_COMPLETE_HANDLER        RequestCompleteHandler; \
1309     union \
1310     { \
1311         RECEIVE_HANDLER             ReceiveHandler; \
1312         WAN_RECEIVE_HANDLER         WanReceiveHandler; \
1313     } u4; \
1314     RECEIVE_COMPLETE_HANDLER        ReceiveCompleteHandler; \
1315     STATUS_HANDLER                  StatusHandler; \
1316     STATUS_COMPLETE_HANDLER             StatusCompleteHandler; \
1317     NDIS_STRING                     Name; 
1318 typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS_S
1319 {
1320    NDIS30_PROTOCOL_CHARACTERISTICS;
1321 } NDIS30_PROTOCOL_CHARACTERISTICS_S, *PNDIS30_PROTOCOL_CHARACTERISTICS_S;
1322 #endif
1323
1324 /* Prototypes for NDIS 4.0 protocol characteristics */
1325
1326 typedef INT (*RECEIVE_PACKET_HANDLER)(
1327     IN  NDIS_HANDLE     ProtocolBindingContext,
1328     IN  PNDIS_PACKET    Packet);
1329
1330 typedef VOID (*BIND_HANDLER)(
1331     OUT PNDIS_STATUS    Status,
1332     IN  NDIS_HANDLE     BindContext,
1333     IN  PNDIS_STRING    DeviceName,
1334     IN  PVOID           SystemSpecific1,
1335     IN  PVOID           SystemSpecific2);
1336
1337 typedef VOID (*UNBIND_HANDLER)(
1338     OUT PNDIS_STATUS    Status,
1339     IN  NDIS_HANDLE     ProtocolBindingContext,
1340     IN  NDIS_HANDLE     UnbindContext);
1341
1342 typedef VOID (*TRANSLATE_HANDLER)(
1343     OUT PNDIS_STATUS    Status,
1344     IN  NDIS_HANDLE     ProtocolBindingContext,
1345     OUT PNET_PNP_ID     IdList,
1346     IN  ULONG           IdListLength,
1347     OUT PULONG          BytesReturned);
1348
1349 typedef VOID (*UNLOAD_PROTOCOL_HANDLER)(
1350     VOID);
1351
1352
1353 /* Protocol characteristics for NDIS 4.0 protocols */
1354 #ifdef _MSC_VER
1355 typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS
1356 {
1357     NDIS30_PROTOCOL_CHARACTERISTICS;
1358
1359     RECEIVE_PACKET_HANDLER  ReceivePacketHandler;
1360     BIND_HANDLER            BindAdapterHandler;
1361     UNBIND_HANDLER          UnbindAdapterHandler;
1362     TRANSLATE_HANDLER       TranslateHandler;
1363     UNLOAD_PROTOCOL_HANDLER UnloadHandler;
1364 } NDIS40_PROTOCOL_CHARACTERISTICS;
1365 typedef NDIS40_PROTOCOL_CHARACTERISTICS NDIS40_PROTOCOL_CHARACTERISTICS_S;
1366 #else
1367 #define NDIS40_PROTOCOL_CHARACTERISTICS \
1368     NDIS30_PROTOCOL_CHARACTERISTICS; \
1369     RECEIVE_PACKET_HANDLER  ReceivePacketHandler; \
1370     BIND_HANDLER            BindAdapterHandler; \
1371     UNBIND_HANDLER          UnbindAdapterHandler; \
1372     TRANSLATE_HANDLER       TranslateHandler; \
1373     UNLOAD_PROTOCOL_HANDLER UnloadHandler; 
1374 typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS_S
1375 {
1376    NDIS40_PROTOCOL_CHARACTERISTICS;
1377 } NDIS40_PROTOCOL_CHARACTERISTICS_S, *PNDIS40_PROTOCOL_CHARACTERISTICS_S;
1378 #endif
1379
1380
1381 /* Prototypes for NDIS 5.0 protocol characteristics */
1382
1383 #ifdef NDIS50
1384
1385 typedef VOID (*CO_SEND_COMPLETE_HANDLER)(
1386     IN  NDIS_STATUS     Status,
1387     IN  NDIS_HANDLE     ProtocolVcContext,
1388     IN  PNDIS_PACKET    Packet);
1389
1390 typedef VOID (*CO_STATUS_HANDLER)(
1391     IN  NDIS_HANDLE ProtocolBindingContext,
1392     IN  NDIS_HANDLE ProtocolVcContext   OPTIONAL,
1393     IN  NDIS_STATUS GeneralStatus,
1394     IN  PVOID       StatusBuffer,
1395     IN  UINT        StatusBufferSize);
1396
1397 typedef UINT (*CO_RECEIVE_PACKET_HANDLER)(
1398     IN  NDIS_HANDLE     ProtocolBindingContext,
1399     IN  NDIS_HANDLE     ProtocolVcContext,
1400     IN  PNDIS_PACKET    Packet);
1401
1402 typedef VOID (*CO_AF_REGISTER_NOTIFY_HANDLER)(
1403     IN  NDIS_HANDLE         ProtocolBindingContext,
1404     IN  PCO_ADDRESS_FAMILY  AddressFamily);
1405
1406 #ifdef _MSC_VER
1407 typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS
1408 {
1409     NDIS40_PROTOCOL_CHARACTERISTICS;
1410
1411     PVOID                           ReservedHandlers[4];
1412
1413     CO_SEND_COMPLETE_HANDLER        CoSendCompleteHandler;
1414     CO_STATUS_HANDLER               CoStatusHandler;
1415     CO_RECEIVE_PACKET_HANDLER       CoReceivePacketHandler;
1416     CO_AF_REGISTER_NOTIFY_HANDLER   CoAfRegisterNotifyHandler;
1417 } NDIS50_PROTOCOL_CHARACTERISTICS;
1418 typedef NDIS50_PROTOCOL_CHARACTERISTICS NDIS50_PROTOCOL_CHARACTERISTICS_S;
1419 #else
1420 #define NDIS50_PROTOCOL_CHARACTERISTICS \
1421     NDIS40_PROTOCOL_CHARACTERISTICS; \
1422     PVOID                           ReservedHandlers[4]; \
1423     CO_SEND_COMPLETE_HANDLER        CoSendCompleteHandler; \
1424     CO_STATUS_HANDLER               CoStatusHandler; \
1425     CO_RECEIVE_PACKET_HANDLER       CoReceivePacketHandler; \
1426     CO_AF_REGISTER_NOTIFY_HANDLER   CoAfRegisterNotifyHandler;
1427 typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS_S
1428 {
1429    NDIS50_PROTOCOL_CHARACTERISTICS;
1430 } NDIS50_PROTOCOL_CHARACTERISTICS_S, *PNDIS50_PROTOCOL_CHARACTERISTICS_S;
1431 #endif
1432 #endif /* NDIS50 */
1433
1434
1435 #ifndef NDIS50
1436 #ifndef NDIS40
1437 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS 
1438 {
1439    NDIS30_PROTOCOL_CHARACTERISTICS;
1440 } NDIS_PROTOCOL_CHARACTERISTICS;
1441 #else /* NDIS40 */
1442 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS 
1443 {
1444    NDIS40_PROTOCOL_CHARACTERISTICS;
1445 } NDIS_PROTOCOL_CHARACTERISTICS;
1446 #endif /* NDIS40 */
1447 #else /* NDIS50 */
1448 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS 
1449 {
1450    NDIS50_PROTOCOL_CHARACTERISTICS;
1451 } NDIS_PROTOCOL_CHARACTERISTICS;
1452 #endif /* NDIS50 */
1453
1454 typedef NDIS_PROTOCOL_CHARACTERISTICS *PNDIS_PROTOCOL_CHARACTERISTICS;
1455
1456
1457
1458 /* Buffer management routines */
1459
1460 VOID
1461 EXPIMP
1462 NdisAllocateBuffer(
1463     OUT PNDIS_STATUS    Status,
1464     OUT PNDIS_BUFFER    *Buffer,
1465     IN  NDIS_HANDLE     PoolHandle,
1466     IN  PVOID           VirtualAddress,
1467     IN  UINT            Length);
1468
1469 VOID
1470 EXPIMP
1471 NdisAllocateBufferPool(
1472     OUT PNDIS_STATUS    Status,
1473     OUT PNDIS_HANDLE    PoolHandle,
1474     IN  UINT            NumberOfDescriptors);
1475
1476 VOID
1477 EXPIMP
1478 NdisAllocatePacket(
1479     OUT PNDIS_STATUS    Status,
1480     OUT PNDIS_PACKET    *Packet,
1481     IN  NDIS_HANDLE     PoolHandle);
1482
1483 VOID
1484 EXPIMP
1485 NdisAllocatePacketPool(
1486     OUT PNDIS_STATUS    Status,
1487     OUT PNDIS_HANDLE    PoolHandle,
1488     IN  UINT            NumberOfDescriptors,
1489     IN  UINT            ProtocolReservedLength);
1490
1491 VOID
1492 EXPIMP
1493 NdisCopyBuffer(
1494     OUT PNDIS_STATUS    Status,
1495     OUT PNDIS_BUFFER    *Buffer,
1496     IN  NDIS_HANDLE     PoolHandle,
1497     IN  PVOID           MemoryDescriptor,
1498     IN  UINT            Offset,
1499     IN  UINT            Length);
1500
1501 VOID
1502 EXPIMP
1503 NdisCopyFromPacketToPacket(
1504     IN  PNDIS_PACKET    Destination,
1505     IN  UINT            DestinationOffset,
1506     IN  UINT            BytesToCopy,
1507     IN  PNDIS_PACKET    Source,
1508     IN  UINT            SourceOffset,
1509     OUT PUINT           BytesCopied);
1510
1511 VOID
1512 EXPIMP
1513 NdisDprAllocatePacket(
1514     OUT PNDIS_STATUS    Status,
1515     OUT PNDIS_PACKET    *Packet,
1516     IN  NDIS_HANDLE     PoolHandle);
1517
1518 VOID
1519 EXPIMP
1520 NdisDprAllocatePacketNonInterlocked(
1521     OUT PNDIS_STATUS    Status,
1522     OUT PNDIS_PACKET    *Packet,
1523     IN NDIS_HANDLE      PoolHandle);
1524
1525 VOID
1526 EXPIMP
1527 NdisDprFreePacket(
1528     IN  PNDIS_PACKET    Packet);
1529
1530 VOID
1531 EXPIMP
1532 NdisDprFreePacketNonInterlocked(
1533     IN  PNDIS_PACKET    Packet);
1534
1535 VOID
1536 EXPIMP
1537 NdisFreeBufferPool(
1538     IN  NDIS_HANDLE PoolHandle);
1539
1540 VOID
1541 EXPIMP
1542 NdisFreePacket(
1543     IN   PNDIS_PACKET   Packet);
1544
1545 VOID
1546 EXPIMP
1547 NdisFreePacketPool(
1548     IN  NDIS_HANDLE PoolHandle);
1549
1550 VOID
1551 EXPIMP
1552 NdisReturnPackets(
1553     IN  PNDIS_PACKET    *PacketsToReturn,
1554     IN  UINT            NumberOfPackets);
1555
1556 VOID
1557 EXPIMP
1558 NdisUnchainBufferAtBack(
1559     IN OUT  PNDIS_PACKET    Packet,
1560     OUT     PNDIS_BUFFER    *Buffer);
1561
1562 VOID
1563 EXPIMP
1564 NdisUnchainBufferAtFront(
1565     IN OUT  PNDIS_PACKET    Packet,
1566     OUT     PNDIS_BUFFER    *Buffer);
1567
1568 #if BINARY_COMPATIBLE
1569
1570 VOID
1571 EXPIMP
1572 NdisAdjustBufferLength(
1573     IN PNDIS_BUFFER Buffer,
1574     IN UINT         Length);
1575
1576 ULONG
1577 EXPIMP
1578 NDIS_BUFFER_TO_SPAN_PAGES(
1579     IN PNDIS_BUFFER  Buffer);
1580
1581 VOID
1582 EXPIMP
1583 NdisFreeBuffer(
1584     IN  PNDIS_BUFFER    Buffer);
1585
1586 VOID
1587 EXPIMP
1588 NdisGetBufferPhysicalArraySize(
1589     IN  PNDIS_BUFFER    Buffer,
1590     OUT PUINT           ArraySize);
1591
1592 VOID
1593 EXPIMP
1594 NdisGetFirstBufferFromPacket(
1595     IN  PNDIS_PACKET    _Packet,
1596     OUT PNDIS_BUFFER    *_FirstBuffer,
1597     OUT PVOID           *_FirstBufferVA,
1598     OUT PUINT           _FirstBufferLength,
1599     OUT PUINT           _TotalBufferLength);
1600
1601 VOID
1602 EXPIMP
1603 NdisQueryBuffer(
1604     IN  PNDIS_BUFFER    Buffer,
1605     OUT PVOID           *VirtualAddress OPTIONAL,
1606     OUT PUINT           Length);
1607
1608 VOID
1609 EXPIMP
1610 NdisQueryBufferOffset(
1611     IN  PNDIS_BUFFER    Buffer,
1612     OUT PUINT           Offset,
1613     OUT PUINT           Length);
1614
1615 #else /* BINARY_COMPATIBLE */
1616
1617 /*
1618  * PVOID NdisAdjustBufferLength(
1619  *     IN  PNDIS_BUFFER    Buffer,
1620  *     IN  UINT            Length);
1621  */
1622 #define NdisAdjustBufferLength(Buffer,  \
1623                                Length)  \
1624 {                                       \
1625     (Buffer)->ByteCount = (Length);     \
1626 }
1627
1628
1629 /*
1630  * ULONG NDIS_BUFFER_TO_SPAN_PAGES(
1631  *     IN  PNDIS_BUFFER    Buffer);
1632  */
1633 #define NDIS_BUFFER_TO_SPAN_PAGES(Buffer)   \
1634 (                                           \
1635     MmGetMdlByteCount(Buffer) == 0 ?        \
1636         1 :                                 \
1637         ADDRESS_AND_SIZE_TO_SPAN_PAGES(     \
1638             MmGetMdlVirtualAddress(Buffer), \
1639             MmGetMdlByteCount(Buffer))      \
1640 )
1641
1642
1643 #if 0
1644
1645 /*
1646  * VOID NdisFreeBuffer(
1647  *     IN  PNDIS_BUFFER    Buffer);
1648  */
1649 #define NdisFreeBuffer(Buffer)  \
1650 {                               \
1651     IoFreeMdl(Buffer) /* ??? */ \
1652 }
1653
1654 #else
1655
1656 VOID
1657 EXPIMP
1658 NdisFreeBuffer(
1659     IN  PNDIS_BUFFER    Buffer);
1660
1661 #endif
1662
1663
1664 /*
1665  * VOID NdisGetBufferPhysicalArraySize(
1666  *     IN  PNDIS_BUFFER    Buffer,
1667  *     OUT PUINT           ArraySize);
1668  */
1669 #define NdisGetBufferPhysicalArraySize(Buffer,      \
1670                                        ArraySize)   \
1671 {                                                   \
1672 }
1673
1674
1675 /*
1676  * VOID NdisGetFirstBufferFromPacket(
1677  *     IN  PNDIS_PACKET    _Packet,
1678  *     OUT PNDIS_BUFFER    * _FirstBuffer,
1679  *     OUT PVOID           * _FirstBufferVA,
1680  *     OUT PUINT           _FirstBufferLength,
1681  *     OUT PUINT           _TotalBufferLength)
1682  */
1683 #define NdisGetFirstBufferFromPacket(Packet,                \
1684                                      FirstBuffer,           \
1685                                      FirstBufferVA,         \
1686                                      FirstBufferLength,     \
1687                                      TotalBufferLength)     \
1688 {                                                           \
1689     PNDIS_BUFFER _Buffer;                                   \
1690                                                             \
1691     _Buffer              = (Packet)->Private.Head;          \
1692     *(FirstBuffer)       = _Buffer;                         \
1693     *(FirstBufferVA)     = MmGetMdlVirtualAddress(_Buffer); \
1694     if (_Buffer != NULL) {                                  \
1695         *(FirstBufferLength) = MmGetMdlByteCount(_Buffer);  \
1696         _Buffer = _Buffer->Next;                            \
1697     } else                                                  \
1698         *(FirstBufferLength) = 0;                           \
1699     *(TotalBufferLength) = *(FirstBufferLength);            \
1700     while (_Buffer != NULL) {                               \
1701         *(TotalBufferLength) += MmGetMdlByteCount(_Buffer); \
1702         _Buffer = _Buffer->Next;                            \
1703     }                                                       \
1704 }
1705
1706 /*
1707  * VOID NdisQueryBuffer(
1708  *     IN  PNDIS_BUFFER    Buffer,
1709  *     OUT PVOID           *VirtualAddress OPTIONAL,
1710  *     OUT PUINT           Length)
1711  */
1712 #define NdisQueryBuffer(Buffer,                                       \
1713                         VirtualAddress,                               \
1714                         Length)                                       \
1715 {                                                                     \
1716         if (VirtualAddress)                                               \
1717                 *((PVOID*)VirtualAddress) = MmGetSystemAddressForMdl(Buffer); \
1718                                                                       \
1719         *((PUINT)Length) = MmGetMdlByteCount(Buffer);                     \
1720 }
1721
1722
1723 /*
1724  * VOID NdisQueryBufferOffset(
1725  *     IN  PNDIS_BUFFER    Buffer,
1726  *     OUT PUINT           Offset,
1727  *     OUT PUINT           Length);
1728  */
1729 #define NdisQueryBufferOffset(Buffer,               \
1730                               Offset,               \
1731                               Length)               \
1732 {                                                   \
1733     *((PUINT)Offset) = MmGetMdlByteOffset(Buffer);  \
1734     *((PUINT)Length) = MmGetMdlByteCount(Buffer);   \
1735 }
1736
1737 #endif /* BINARY_COMPATIBLE */
1738
1739
1740 /*
1741  * PVOID NDIS_BUFFER_LINKAGE(
1742  *     IN  PNDIS_BUFFER    Buffer);
1743  */
1744 #define NDIS_BUFFER_LINKAGE(Buffer) \
1745 {                                   \
1746     (Buffer)->Next;                 \
1747 }
1748
1749
1750 /*
1751  * VOID NdisChainBufferAtBack(
1752  *     IN OUT  PNDIS_PACKET    Packet,
1753  *     IN OUT  PNDIS_BUFFER    Buffer)
1754  */
1755 #define NdisChainBufferAtBack(Packet,               \
1756                               Buffer)               \
1757 {                                                   \
1758         PNDIS_BUFFER NdisBuffer = (Buffer);             \
1759                                                     \
1760     while (NdisBuffer->Next != NULL)                \
1761         NdisBuffer = NdisBuffer->Next;              \
1762                                                     \
1763     NdisBuffer->Next = NULL;                        \
1764                                                     \
1765     if ((Packet)->Private.Head != NULL)             \
1766         (Packet)->Private.Tail->Next = (Buffer);    \
1767     else                                            \
1768         (Packet)->Private.Head = (Buffer);          \
1769                                                     \
1770         (Packet)->Private.Tail        = NdisBuffer;     \
1771         (Packet)->Private.ValidCounts = FALSE;          \
1772 }
1773
1774
1775 /*
1776  * VOID NdisChainBufferAtFront(
1777  *     IN OUT  PNDIS_PACKET    Packet,
1778  *     IN OUT  PNDIS_BUFFER    Buffer)
1779  */
1780 #define NdisChainBufferAtFront(Packet,          \
1781                                Buffer)          \
1782 {                                               \
1783         PNDIS_BUFFER _NdisBuffer = (Buffer);        \
1784                                                 \
1785     while (_NdisBuffer->Next != NULL)           \
1786         _NdisBuffer = _NdisBuffer->Next;        \
1787                                                 \
1788     if ((Packet)->Private.Head == NULL)         \
1789         (Packet)->Private.Tail = _NdisBuffer;   \
1790                                                 \
1791         _NdisBuffer->Next = (Packet)->Private.Head; \
1792         (Packet)->Private.Head        = (Buffer);   \
1793         (Packet)->Private.ValidCounts = FALSE;      \
1794 }
1795
1796
1797 /*
1798  * VOID NdisGetNextBuffer(
1799  *     IN  PNDIS_BUFFER    CurrentBuffer,
1800  *     OUT PNDIS_BUFFER    * NextBuffer)
1801  */
1802 #define NdisGetNextBuffer(CurrentBuffer,    \
1803                           NextBuffer)       \
1804 {                                           \
1805     *(NextBuffer) = (CurrentBuffer)->Next;  \
1806 }
1807
1808
1809 /*
1810  * UINT NdisGetPacketFlags(
1811  *     IN  PNDIS_PACKET    Packet); 
1812  */
1813 #define NdisGetPacketFlags(Packet)  \
1814 {                                   \
1815     (Packet)->Private.Flags;        \
1816 }
1817
1818
1819 /*
1820  * UINT NDIS_GET_PACKET_HEADER_SIZE(
1821  *     IN  PNDIS_PACKET    Packet);
1822  */
1823 #define NDIS_GET_PACKET_HEADER_SIZE(Packet) \
1824 {                                           \
1825 }
1826
1827
1828 /*
1829  * VOID NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(
1830  *     IN  PNDIS_PACKET    Packet,
1831  *     IN  PPVOID          pMediaSpecificInfo,
1832  *     IN  PUINT           pSizeMediaSpecificInfo);
1833  */
1834 #define NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(Packet,                 \
1835                                             pMediaSpecificInfo,     \
1836                                             pSizeMediaSpecificInfo) \
1837 {                                                                   \
1838 }
1839
1840
1841 /*
1842  * VOID NDIS_STATUS NDIS_GET_PACKET_STATUS(
1843  *     IN  PNDIS_PACKET    Packet);
1844  */
1845 #define NDIS_GET_PACKET_STATUS (Packet) \
1846 {                                       \
1847 }
1848
1849
1850 /*
1851  * ULONGLONG NDIS_GET_PACKET_TIME_RECEIVED(
1852  *     IN  PNDIS_PACKET    Packet);
1853  */
1854 #define NDIS_GET_PACKET_TIME_RECEIVED(Packet)   \
1855 {                                               \
1856 }
1857
1858
1859 /*
1860  * ULONGLONG NDIS_GET_PACKET_TIME_SENT(
1861  *     IN  PNDIS_PACKET    Packet);
1862  */
1863 #define NDIS_GET_PACKET_TIME_SENT(Packet)   \
1864 {                                           \
1865 }
1866
1867
1868 /*
1869  * ULONGLONG NDIS_GET_PACKET_TIME_TO_SEND(
1870  *     IN  PNDIS_PACKET    Packet);
1871  */
1872 #define NDIS_GET_PACKET_TIME_TO_SEND(Packet)    \
1873 {                                               \
1874 }
1875
1876
1877 /*
1878  * PNDIS_PACKET_OOB_DATA NDIS_OOB_DATA_FROM_PACKET(
1879  *     IN  PNDIS_PACKET    _Packet);
1880  */
1881 #define NDIS_OOB_DATA_FROM_PACKET(_Packet)  \
1882 {                                           \
1883 }
1884
1885  
1886 /*
1887  * VOID NdisQueryPacket(
1888  *     IN  PNDIS_PACKET    Packet,
1889  *     OUT PUINT           PhysicalBufferCount OPTIONAL,
1890  *     OUT PUINT           BufferCount         OPTIONAL,
1891  *     OUT PNDIS_BUFFER    *FirstBuffer        OPTIONAL,
1892  *     OUT PUINT           TotalPacketLength   OPTIONAL);
1893  */
1894 #define NdisQueryPacket(Packet,                                                 \
1895                         PhysicalBufferCount,                                    \
1896                         BufferCount,                                            \
1897                         FirstBuffer,                                            \
1898                         TotalPacketLength)                                      \
1899 {                                                                               \
1900     if (FirstBuffer)                                                            \
1901         *((PNDIS_BUFFER*)FirstBuffer) = (Packet)->Private.Head;                 \
1902     if ((TotalPacketLength) || (BufferCount) || (PhysicalBufferCount)) {        \
1903         if (!(Packet)->Private.ValidCounts) {                                   \
1904             UINT _Offset;                                                       \
1905             UINT _PacketLength;                                                 \
1906             PNDIS_BUFFER _NdisBuffer;                                           \
1907             UINT _PhysicalBufferCount = 0;                                      \
1908             UINT _TotalPacketLength   = 0;                                      \
1909             UINT _Count               = 0;                                      \
1910                                                                                 \
1911             for (_NdisBuffer = (Packet)->Private.Head;                          \
1912                 _NdisBuffer != (PNDIS_BUFFER)NULL;                              \
1913                 _NdisBuffer = _NdisBuffer->Next) {                              \
1914                 _PhysicalBufferCount += NDIS_BUFFER_TO_SPAN_PAGES(_NdisBuffer); \
1915                 NdisQueryBufferOffset(_NdisBuffer, &_Offset, &_PacketLength);   \
1916                 _TotalPacketLength += _PacketLength;                            \
1917                 _Count++;                                                       \
1918             }                                                                   \
1919             (Packet)->Private.PhysicalCount = _PhysicalBufferCount;             \
1920             (Packet)->Private.TotalLength   = _TotalPacketLength;               \
1921             (Packet)->Private.Count         = _Count;                           \
1922             (Packet)->Private.ValidCounts   = TRUE;                             \
1923                 }                                                                       \
1924                                                                                 \
1925         if (PhysicalBufferCount)                                                \
1926             *((PUINT)PhysicalBufferCount) = (Packet)->Private.PhysicalCount;    \
1927                                                                                 \
1928         if (BufferCount)                                                        \
1929             *((PUINT)BufferCount) = (Packet)->Private.Count;                    \
1930                                                                                 \
1931         if (TotalPacketLength)                                                  \
1932             *((PUINT)TotalPacketLength) = (Packet)->Private.TotalLength;        \
1933     }                                                                           \
1934 }
1935
1936
1937 /*
1938  * VOID NdisRecalculatePacketCounts(
1939  *     IN OUT  PNDIS_PACKET    Packet);
1940  */
1941 #define NdisRecalculatePacketCounts(Packet) \
1942 {                                           \
1943 }
1944
1945 VOID
1946 EXPIMP
1947 NdisReinitializePacket(
1948     IN OUT  PNDIS_PACKET    Packet);
1949
1950
1951 /*
1952  * VOID NdisSetPacketFlags(
1953  *     IN  PNDIS_PACKET    Packet,
1954  *     IN  UINT            Flags); 
1955  */
1956 #define NdisSetPacketFlags(Packet, Flags)   \
1957     (Packet)->Private.Flags = (Flags);
1958
1959
1960 /*
1961  * NDIS_SET_PACKET_HEADER_SIZE(
1962  *     IN  PNDIS_PACKET    Packet,
1963  *     IN  UINT            HdrSize);
1964  */
1965 #define NDIS_SET_PACKET_HEADER_SIZE(Packet,     \
1966                                     HdrSize)    \
1967 {                                               \
1968 }
1969
1970
1971 /*
1972  * NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(
1973  *     IN  PNDIS_PACKET    Packet,
1974  *     IN  PVOID           MediaSpecificInfo,
1975  *     IN  UINT            SizeMediaSpecificInfo);
1976  */
1977 #define NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(Packet,                 \
1978                                             MediaSpecificInfo,      \
1979                                             SizeMediaSpecificInfo)  \
1980 {                                                                   \
1981 }
1982
1983
1984 /*
1985  * NDIS_SET_PACKET_STATUS(
1986  *     IN  PNDIS_PACKET    Packet,
1987  *     IN  NDIS_STATUS     Status);
1988  */
1989 #define NDIS_SET_PACKET_STATUS(Packet,  \
1990                                Status)  \
1991 {                                       \
1992 }
1993
1994
1995 /*
1996  * NDIS_SET_PACKET_TIME_RECEIVED(
1997  *     IN  PNDIS_PACKET    Packet,
1998  *     IN  ULONGLONG       TimeReceived);
1999  */
2000 #define NDIS_SET_PACKET_TIME_RECEIVED(Packet)       \
2001                                       TimeReceived) \
2002 {                                                   \
2003 }
2004
2005
2006 /*
2007  * NDIS_SET_PACKET_TIME_SENT(
2008  *     IN  PNDIS_PACKET    Packet,
2009  *     IN  ULONGLONG       TimeSent);
2010  */
2011 #define NDIS_SET_PACKET_TIME_SENT(Packet,   \
2012                                   TimeSent) \
2013 {                                           \
2014 }
2015
2016
2017 /*
2018  *
2019  * NDIS_SET_PACKET_TIME_TO_SEND(
2020  *     IN  PNDIS_PACKET    Packet,
2021  *     IN  ULONGLONG       TimeToSend);
2022  */
2023 #define NDIS_SET_PACKET_TIME_TO_SEND(Packet,        \
2024                                      TimeToSend)    \
2025 {                                                   \
2026 }
2027
2028
2029 /*
2030  * VOID NdisSetSendFlags(
2031  *   IN  PNDIS_PACKET    Packet,
2032  *   IN  UINT            Flags);
2033  */
2034 #define NdisSetSendFlags(Packet, Flags)(    \
2035     NdisSetPacketFlags((Packet), (Flags)))
2036
2037
2038
2039 /* Memory management routines */
2040
2041 VOID
2042 EXPIMP
2043 NdisCreateLookaheadBufferFromSharedMemory(
2044     IN  PVOID   pSharedMemory,
2045     IN  UINT    LookaheadLength,
2046     OUT PVOID   *pLookaheadBuffer);
2047
2048 VOID
2049 EXPIMP
2050 NdisDestroyLookaheadBufferFromSharedMemory(
2051     IN  PVOID   pLookaheadBuffer);
2052
2053 VOID
2054 EXPIMP
2055 NdisMoveFromMappedMemory(
2056     OUT PVOID   Destination,
2057     IN  PVOID   Source,
2058     IN  ULONG   Length);
2059
2060 VOID
2061 EXPIMP
2062 NdisMoveMappedMemory(
2063     OUT PVOID   Destination,
2064     IN  PVOID   Source,
2065     IN  ULONG   Length);
2066
2067 VOID
2068 EXPIMP
2069 NdisMoveToMappedMemory(
2070     OUT PVOID   Destination,
2071     IN  PVOID   Source,
2072     IN  ULONG   Length);
2073
2074 VOID
2075 EXPIMP
2076 NdisMUpdateSharedMemory(
2077     IN  NDIS_HANDLE             MiniportAdapterHandle,
2078     IN  ULONG                   Length,
2079     IN  PVOID                   VirtualAddress,
2080     IN  NDIS_PHYSICAL_ADDRESS   PhysicalAddress);
2081
2082 NDIS_STATUS
2083 EXPIMP
2084 NdisAllocateMemory(
2085     OUT PVOID                   *VirtualAddress,
2086     IN  UINT                    Length,
2087     IN  UINT                    MemoryFlags,
2088     IN  NDIS_PHYSICAL_ADDRESS   HighestAcceptableAddress);
2089
2090 VOID
2091 EXPIMP
2092 NdisFreeMemory(
2093     IN  PVOID   VirtualAddress,
2094     IN  UINT    Length,
2095     IN  UINT    MemoryFlags);
2096
2097 VOID
2098 EXPIMP
2099 NdisImmediateReadSharedMemory(
2100     IN  NDIS_HANDLE WrapperConfigurationContext,
2101     IN  ULONG       SharedMemoryAddress,
2102     OUT PUCHAR      Buffer,
2103     IN  ULONG       Length);
2104
2105 VOID
2106 EXPIMP
2107 NdisImmediateWriteSharedMemory(
2108     IN  NDIS_HANDLE WrapperConfigurationContext,
2109     IN  ULONG       SharedMemoryAddress,
2110     IN  PUCHAR      Buffer,
2111     IN  ULONG       Length);
2112
2113 VOID
2114 EXPIMP
2115 NdisMAllocateSharedMemory(
2116     IN  NDIS_HANDLE             MiniportAdapterHandle,
2117     IN  ULONG                   Length,
2118     IN  BOOLEAN                 Cached,
2119     OUT PVOID                   *VirtualAddress,
2120     OUT PNDIS_PHYSICAL_ADDRESS  PhysicalAddress);
2121
2122 NDIS_STATUS
2123 EXPIMP
2124 NdisMAllocateSharedMemoryAsync(
2125     IN  NDIS_HANDLE MiniportAdapterHandle,
2126     IN  ULONG       Length,
2127     IN  BOOLEAN     Cached,
2128     IN  PVOID       Context);
2129
2130 VOID
2131 EXPIMP
2132 NdisMFreeSharedMemory(
2133     IN  NDIS_HANDLE             MiniportAdapterHandle,
2134     IN  ULONG                   Length,
2135     IN  BOOLEAN                 Cached,
2136     IN  PVOID                   VirtualAddress,
2137     IN  NDIS_PHYSICAL_ADDRESS   PhysicalAddress);
2138
2139 VOID
2140 EXPIMP
2141 NdisUpdateSharedMemory(
2142     IN  NDIS_HANDLE             NdisAdapterHandle,
2143     IN  ULONG                   Length,
2144     IN  PVOID                   VirtualAddress,
2145     IN  NDIS_PHYSICAL_ADDRESS   PhysicalAddress);
2146
2147
2148 /*
2149  * ULONG NdisGetPhysicalAddressHigh(
2150  *     IN  NDIS_PHYSICAL_ADDRESS   PhysicalAddress);
2151  */
2152 #define NdisGetPhysicalAddressHigh(PhysicalAddress) \
2153     ((PhysicalAddress).HighPart)
2154
2155 /*
2156  * VOID NdisSetPhysicalAddressHigh(
2157  *     IN   NDIS_PHYSICAL_ADDRESS   PhysicalAddress,
2158  *     IN   ULONG                   Value);
2159  */
2160 #define NdisSetPhysicalAddressHigh(PhysicalAddress, Value)  \
2161     ((PhysicalAddress).HighPart) = (Value)
2162
2163 /*
2164  * ULONG NdisGetPhysicalAddressLow(
2165  *     IN   NDIS_PHYSICAL_ADDRESS   PhysicalAddress);
2166  */
2167 #define NdisGetPhysicalAddressLow(PhysicalAddress)  \
2168     ((PhysicalAddress).LowPart)
2169
2170
2171 /*
2172  * VOID NdisSetPhysicalAddressLow(
2173  *     IN  NDIS_PHYSICAL_ADDRESS   PhysicalAddress,
2174  *     IN  ULONG                   Value);
2175  */
2176 #define NdisSetPhysicalAddressLow(PhysicalAddress, Value)   \
2177     ((PhysicalAddress).LowPart) = (Value)
2178
2179 /*
2180  * VOID NDIS_PHYSICAL_ADDRESS_CONST(
2181  *     IN  ULONG   Low,
2182  *     IN  LONG    High); 
2183  */
2184 #define NDIS_PHYSICAL_ADDRESS_CONST(Low, High)  \
2185     { {(ULONG)(Low), (LONG)(High)} }
2186
2187
2188 /*
2189  * VOID NdisMoveMemory(
2190  *     OUT PVOID   Destination,
2191  *     IN  PVOID   Source,
2192  *     IN  ULONG   Length);
2193  */
2194 #define NdisMoveMemory(Destination, Source, Length) \
2195     RtlCopyMemory(Destination, Source, Length)
2196
2197
2198 /*
2199  * VOID NdisRetrieveUlong(
2200  *     IN  PULONG  DestinationAddress,
2201  *     IN  PULONG  SourceAddress);
2202  */
2203 #define NdisRetrieveUlong(DestinationAddress, SourceAddress)    \
2204     RtlRetrieveUlong(DestinationAddress, SourceAddress)
2205
2206
2207 /*
2208  * VOID NdisStoreUlong(
2209  *     IN  PULONG  DestinationAddress,
2210  *     IN  ULONG   Value); 
2211  */
2212 #define NdisStoreUlong(DestinationAddress, Value)   \
2213     RtlStoreUlong(DestinationAddress, Value)
2214
2215
2216 /*
2217  * VOID NdisZeroMemory(
2218  *     IN PVOID    Destination,
2219  *     IN ULONG    Length)
2220  */
2221 #define NdisZeroMemory(Destination, Length) \
2222     RtlZeroMemory(Destination, Length)
2223
2224
2225
2226 //
2227 // System processor count
2228 //
2229
2230 CCHAR
2231 EXPIMP
2232 NdisSystemProcessorCount(
2233         VOID
2234         );
2235
2236 VOID
2237 EXPIMP
2238 NdisImmediateReadPortUchar(
2239         IN      NDIS_HANDLE                             WrapperConfigurationContext,
2240         IN      ULONG                                   Port,
2241         OUT PUCHAR                                      Data
2242         );
2243
2244 VOID
2245 EXPIMP
2246 NdisImmediateReadPortUshort(
2247         IN      NDIS_HANDLE                             WrapperConfigurationContext,
2248         IN      ULONG                                   Port,
2249         OUT PUSHORT Data
2250         );
2251
2252 VOID
2253 EXPIMP
2254 NdisImmediateReadPortUlong(
2255         IN      NDIS_HANDLE                             WrapperConfigurationContext,
2256         IN      ULONG                                   Port,
2257         OUT PULONG Data
2258         );
2259
2260 VOID
2261 EXPIMP
2262 NdisImmediateWritePortUchar(
2263         IN      NDIS_HANDLE                             WrapperConfigurationContext,
2264         IN      ULONG                                   Port,
2265         IN      UCHAR                                   Data
2266         );
2267
2268 VOID
2269 EXPIMP
2270 NdisImmediateWritePortUshort(
2271         IN      NDIS_HANDLE                             WrapperConfigurationContext,
2272         IN      ULONG                                   Port,
2273         IN      USHORT                                  Data
2274         );
2275
2276 VOID
2277 EXPIMP
2278 NdisImmediateWritePortUlong(
2279         IN      NDIS_HANDLE                             WrapperConfigurationContext,
2280         IN      ULONG                                   Port,
2281         IN      ULONG                                   Data
2282         );
2283
2284 VOID
2285 EXPIMP
2286 NdisImmediateReadSharedMemory(
2287         IN      NDIS_HANDLE                             WrapperConfigurationContext,
2288         IN      ULONG                                   SharedMemoryAddress,
2289         IN      PUCHAR                                  Buffer,
2290         IN      ULONG                                   Length
2291         );
2292
2293 VOID
2294 EXPIMP
2295 NdisImmediateWriteSharedMemory(
2296         IN      NDIS_HANDLE                             WrapperConfigurationContext,
2297         IN      ULONG                                   SharedMemoryAddress,
2298         IN      PUCHAR                                  Buffer,
2299         IN      ULONG                                   Length
2300         );
2301
2302 ULONG
2303 EXPIMP
2304 NdisImmediateReadPciSlotInformation(
2305         IN      NDIS_HANDLE                             WrapperConfigurationContext,
2306         IN      ULONG                                   SlotNumber,
2307         IN      ULONG                                   Offset,
2308         IN      PVOID                                   Buffer,
2309         IN      ULONG                                   Length
2310         );
2311
2312 ULONG
2313 EXPIMP
2314 NdisImmediateWritePciSlotInformation(
2315         IN      NDIS_HANDLE                             WrapperConfigurationContext,
2316         IN      ULONG                                   SlotNumber,
2317         IN      ULONG                                   Offset,
2318         IN      PVOID                                   Buffer,
2319         IN      ULONG                                   Length
2320         );
2321
2322 /* String management routines */
2323
2324 #if BINARY_COMPATIBLE
2325
2326 NDIS_STATUS
2327 EXPIMP
2328 NdisAnsiStringToUnicodeString(
2329     IN OUT  PNDIS_STRING        DestinationString,
2330     IN      PNDIS_ANSI_STRING   SourceString);
2331
2332 BOOLEAN
2333 EXPIMP
2334 NdisEqualString(
2335     IN  PNDIS_STRING    String1,
2336     IN  PNDIS_STRING    String2,
2337     IN  BOOLEAN         CaseInsensitive);
2338
2339 VOID
2340 EXPIMP
2341 NdisInitAnsiString(
2342     IN OUT  PNDIS_ANSI_STRING   DestinationString,
2343     IN      PCSTR               SourceString);
2344
2345 VOID
2346 EXPIMP
2347 NdisInitUnicodeString(
2348     IN OUT  PNDIS_STRING    DestinationString,
2349     IN      PCWSTR          SourceString);
2350
2351 NDIS_STATUS
2352 EXPIMP
2353 NdisUnicodeStringToAnsiString(
2354     IN OUT  PNDIS_ANSI_STRING   DestinationString,
2355     IN      PNDIS_STRING        SourceString);
2356
2357 #else /* BINARY_COMPATIBLE */
2358
2359 /*
2360  * NDIS_STATUS NdisAnsiStringToUnicodeString(
2361  *     IN OUT  PNDIS_STRING        DestinationString,
2362  *     IN      PNDIS_ANSI_STRING   SourceString);
2363  */
2364 #define NdisAnsiStringToUnicodeString(DestinationString,    \
2365                                       SourceString)         \
2366     RtlAnsiStringToUnicodeString((DestinationString), (SourceString), FALSE)
2367
2368 /*
2369  * BOOLEAN NdisEqualString(
2370  *     IN  PNDIS_STRING    String1,
2371  *     IN  PNDIS_STRING    String2,
2372  *     IN  BOOLEAN         CaseInsensitive)
2373  */
2374 #define NdisEqualString(String1,            \
2375                         String2,            \
2376                         CaseInsensitive)    \
2377     RtlEqualUnicodeString((String1), (String2), (CaseInsensitive))
2378
2379 /*
2380  * VOID NdisInitAnsiString(
2381  *     IN OUT  PNDIS_ANSI_STRING   DestinationString,
2382  *     IN      PCSTR               SourceString)
2383  */
2384 #define NdisInitAnsiString(DestinationString,   \
2385                            SourceString)        \
2386     RtlInitString((DestinationString), (SourceString))
2387
2388 /*
2389  * VOID NdisInitUnicodeString(
2390  *     IN OUT  PNDIS_STRING    DestinationString,
2391  *     IN      PCWSTR          SourceString)
2392  */
2393 #define NdisInitUnicodeString(DestinationString,    \
2394                               SourceString)         \
2395     RtlInitUnicodeString((DestinationString), (SourceString))
2396
2397 /*
2398  * NDIS_STATUS NdisUnicodeStringToAnsiString(
2399  *     IN OUT  PNDIS_ANSI_STRING   DestinationString,
2400  *     IN      PNDIS_STRING        SourceString)
2401  */
2402 #define NdisUnicodeStringToAnsiString(DestinationString,    \
2403                                       SourceString)         \
2404     RtlUnicodeStringToAnsiString((DestinationString), (SourceString), FALSE)
2405
2406 #endif /* BINARY_COMPATIBLE */
2407
2408 #define NdisFreeString(_s)  NdisFreeMemory((s).Buffer, (s).MaximumLength, 0)
2409 #define NdisPrintString(_s) DbgPrint("%ls", (s).Buffer)
2410
2411
2412
2413 /* I/O routines */
2414
2415 /*
2416  * VOID NdisRawReadPortBufferUchar(
2417  *     IN  ULONG   Port,
2418  *     OUT PUCHAR  Buffer,
2419  *     IN  ULONG   Length);
2420  */
2421 #define NdisRawReadPortBufferUchar(Port, Buffer, Length)    \
2422     READ_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
2423
2424 /*
2425  * VOID NdisRawReadPortBufferUlong(
2426  *     IN  ULONG   Port,
2427  *     OUT PULONG  Buffer,
2428  *     IN  ULONG   Length);
2429  */
2430 #define NdisRawReadPortBufferUlong(Port, Buffer, Length)  \
2431     READ_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
2432
2433 /*
2434  * VOID NdisRawReadPortBufferUshort(
2435  *     IN  ULONG   Port,
2436  *     OUT PUSHORT Buffer,
2437  *     IN  ULONG   Length);
2438  */
2439 #define NdisRawReadPortBufferUshort(Port, Buffer, Length)   \
2440     READ_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
2441
2442
2443 /*
2444  * VOID NdisRawReadPortUchar(
2445  *     IN  ULONG   Port,
2446  *     OUT PUCHAR  Data);
2447  */
2448 #define NdisRawReadPortUchar(Port, Data)    \
2449     *(Data) = READ_PORT_UCHAR((PUCHAR)(Port))
2450
2451 /*
2452  * VOID NdisRawReadPortUlong(
2453  *     IN  ULONG   Port,
2454  *     OUT PULONG  Data);
2455  */
2456 #define NdisRawReadPortUlong(Port, Data)    \
2457     *(Data) = READ_PORT_ULONG((PULONG)(Port))
2458
2459 /*
2460  * VOID NdisRawReadPortUshort(
2461  *     IN  ULONG   Port,
2462  *     OUT PUSHORT Data);
2463  */
2464 #define NdisRawReadPortUshort(Port, Data)   \
2465     *(Data) = READ_PORT_USHORT((PUSHORT)(Port))
2466
2467
2468 /*
2469  * VOID NdisRawWritePortBufferUchar(
2470  *     IN  ULONG   Port,
2471  *     IN  PUCHAR  Buffer,
2472  *     IN  ULONG   Length);
2473  */
2474 #define NdisRawWritePortBufferUchar(Port, Buffer, Length) \
2475     WRITE_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
2476
2477 /*
2478  * VOID NdisRawWritePortBufferUlong(
2479  *     IN  ULONG   Port,
2480  *     IN  PULONG  Buffer,
2481  *     IN  ULONG   Length);
2482  */
2483 #define NdisRawWritePortBufferUlong(Port, Buffer, Length)   \
2484     WRITE_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
2485
2486 /*
2487  * VOID NdisRawWritePortBufferUshort(
2488  *     IN  ULONG   Port,
2489  *     IN  PUSHORT Buffer,
2490  *     IN  ULONG   Length);
2491  */
2492 #define NdisRawWritePortBufferUshort(Port, Buffer, Length)  \
2493     WRITE_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
2494
2495
2496 /*
2497  * VOID NdisRawWritePortUchar(
2498  *     IN  ULONG   Port,
2499  *     IN  UCHAR   Data);
2500  */
2501 #define NdisRawWritePortUchar(Port, Data)   \
2502     WRITE_PORT_UCHAR((PUCHAR)(Port), (UCHAR)(Data))
2503
2504 /*
2505  * VOID NdisRawWritePortUlong(
2506  *     IN  ULONG   Port,
2507  *     IN  ULONG   Data);
2508  */
2509 #define NdisRawWritePortUlong(Port, Data)   \
2510     WRITE_PORT_ULONG((PULONG)(Port), (ULONG)(Data))
2511
2512 /*
2513  * VOID NdisRawWritePortUshort(
2514  *     IN  ULONG   Port,
2515  *     IN  USHORT  Data);
2516  */
2517 #define NdisRawWritePortUshort(Port, Data) \
2518     WRITE_PORT_USHORT((PUSHORT)(Port), (USHORT)(Data))
2519
2520
2521 /*
2522  * VOID NdisReadRegisterUchar(
2523  *     IN  PUCHAR  Register,
2524  *     OUT PUCHAR  Data);
2525  */
2526 #define NdisReadRegisterUchar(Register, Data)   \
2527     *((PUCHAR)(Data)) = *(Register)
2528
2529 /*
2530  * VOID NdisReadRegisterUlong(
2531  *     IN  PULONG  Register,
2532  *     OUT PULONG  Data);
2533  */
2534 #define NdisReadRegisterUlong(Register, Data)   \
2535     *((PULONG)(Data)) = *(Register)
2536
2537 /*
2538  * VOID NdisReadRegisterUshort(
2539  *     IN  PUSHORT Register,
2540  *     OUT PUSHORT Data);
2541  */
2542 #define NdisReadRegisterUshort(Register, Data)  \
2543     *((PUSHORT)(Data)) = *(Register)
2544
2545
2546 /*
2547  * VOID NdisReadRegisterUchar(
2548  *     IN  PUCHAR  Register,
2549  *     IN  UCHAR   Data);
2550  */
2551 #define NdisWriteRegisterUchar(Register, Data)  \
2552     WRITE_REGISTER_UCHAR((Register), (Data))
2553
2554 /*
2555  * VOID NdisReadRegisterUlong(
2556  *     IN  PULONG  Register,
2557  *     IN  ULONG   Data);
2558  */
2559 #define NdisWriteRegisterUlong(Register, Data)  \
2560         WRITE_REGISTER_ULONG((Register), (Data))
2561
2562 /*
2563  * VOID NdisReadRegisterUshort(
2564  *     IN  PUSHORT Register,
2565  *     IN  USHORT  Data);
2566  */
2567 #define NdisWriteRegisterUshort(Register, Data) \
2568     WRITE_REGISTER_USHORT((Register), (Data))
2569
2570
2571 /* Linked lists */
2572
2573 VOID
2574 EXPIMP
2575 NdisInitializeListHead(
2576     IN  PLIST_ENTRY ListHead);
2577
2578 VOID
2579 EXPIMP
2580 NdisInterlockedAddUlong(
2581     IN  PULONG          Addend,
2582     IN  ULONG           Increment,
2583     IN  PNDIS_SPIN_LOCK SpinLock);
2584
2585 PLIST_ENTRY
2586 EXPIMP
2587 NdisInterlockedInsertHeadList(
2588     IN  PLIST_ENTRY     ListHead,
2589     IN  PLIST_ENTRY     ListEntry,
2590     IN  PNDIS_SPIN_LOCK SpinLock);
2591
2592 PLIST_ENTRY
2593 EXPIMP
2594 NdisInterlockedInsertTailList(
2595     IN  PLIST_ENTRY     ListHead,
2596     IN  PLIST_ENTRY     ListEntry,
2597     IN  PNDIS_SPIN_LOCK SpinLock); 
2598
2599 PLIST_ENTRY
2600 EXPIMP
2601 NdisInterlockedRemoveHeadList(
2602     IN  PLIST_ENTRY     ListHead,
2603     IN  PNDIS_SPIN_LOCK SpinLock); 
2604
2605
2606 VOID
2607 EXPIMP
2608 NdisCloseConfiguration(
2609     IN  NDIS_HANDLE ConfigurationHandle);
2610
2611 VOID
2612 EXPIMP
2613 NdisReadConfiguration(
2614     OUT PNDIS_STATUS                    Status,
2615     OUT PNDIS_CONFIGURATION_PARAMETER   *ParameterValue,
2616     IN  NDIS_HANDLE                     ConfigurationHandle,
2617     IN  PNDIS_STRING                    Keyword,
2618     IN  NDIS_PARAMETER_TYPE             ParameterType);
2619
2620 VOID
2621 EXPIMP
2622 NdisWriteConfiguration(
2623     OUT PNDIS_STATUS                    Status,
2624     IN  NDIS_HANDLE                     WrapperConfigurationContext,
2625     IN  PNDIS_STRING                    Keyword,
2626     IN  PNDIS_CONFIGURATION_PARAMETER   *ParameterValue);
2627
2628 /*
2629 VOID
2630 EXPIMP
2631 NdisWriteErrorLogEntry(
2632     IN  NDIS_HANDLE     NdisAdapterHandle,
2633     IN  NDIS_ERROR_CODE ErrorCode,
2634     IN  ULONG           NumberOfErrorValues,
2635     IN  ULONG           ...);
2636 */
2637
2638
2639
2640 /*
2641  * VOID NdisStallExecution(
2642  *     IN  UINT    MicrosecondsToStall)
2643  */
2644 #define NdisStallExecution(MicroSecondsToStall)     \
2645     KeStallExecutionProcessor(MicroSecondsToStall)
2646
2647
2648 #define NdisZeroMappedMemory(Destination,Length)                RtlZeroMemory(Destination,Length)
2649 /* moved to ndis/memory.c by robd
2650 #define NdisMoveMappedMemory(Destination,Source,Length) RtlCopyMemory(Destination,Source,Length)
2651  */
2652 /* moved to ndis/control.c by robd
2653 #define NdisReinitializePacket(Packet)                                                                          \
2654 {                                                                                                                                                       \
2655         (Packet)->Private.Head = (PNDIS_BUFFER)NULL;                                                    \
2656         (Packet)->Private.ValidCounts = FALSE;                                                                  \
2657 }
2658  */
2659 VOID
2660 EXPIMP
2661 NdisInitializeEvent(
2662         IN      PNDIS_EVENT                             Event
2663 );
2664
2665 VOID
2666 EXPIMP
2667 NdisSetEvent(
2668         IN      PNDIS_EVENT                             Event
2669 );
2670
2671 VOID
2672 EXPIMP
2673 NdisResetEvent(
2674         IN      PNDIS_EVENT                             Event
2675 );
2676
2677 BOOLEAN
2678 EXPIMP
2679 NdisWaitEvent(
2680         IN      PNDIS_EVENT                             Event,
2681         IN      UINT                                    msToWait
2682 );
2683
2684
2685 /* NDIS helper macros */
2686
2687 /*
2688  * NDIS_INIT_FUNCTION(FunctionName)
2689  */
2690 #define NDIS_INIT_FUNCTION(FunctionName)    \
2691     alloc_text(init, FunctionName)
2692
2693 /*
2694  * NDIS_PAGABLE_FUNCTION(FunctionName) 
2695  */
2696 #define NDIS_PAGABLE_FUNCTION(FunctionName) \
2697     alloc_text(page, FunctionName)
2698
2699
2700
2701 /* NDIS 4.0 extensions */
2702
2703 #ifdef NDIS40
2704
2705 VOID
2706 EXPIMP
2707 NdisMFreeSharedMemory(
2708     IN  NDIS_HANDLE             MiniportAdapterHandle,
2709     IN  ULONG                   Length,
2710     IN  BOOLEAN                 Cached,
2711     IN  PVOID                   VirtualAddress,
2712     IN  NDIS_PHYSICAL_ADDRESS   PhysicalAddress);
2713
2714 VOID
2715 EXPIMP
2716 NdisMWanIndicateReceive(
2717     OUT PNDIS_STATUS    Status,
2718     IN  NDIS_HANDLE     MiniportAdapterHandle,
2719     IN  NDIS_HANDLE     NdisLinkContext,
2720     IN  PUCHAR          PacketBuffer,
2721     IN  UINT            PacketSize);
2722
2723 VOID
2724 EXPIMP
2725 NdisMWanIndicateReceiveComplete(
2726     IN  NDIS_HANDLE MiniportAdapterHandle);
2727
2728 VOID
2729 EXPIMP
2730 NdisMWanSendComplete(
2731     IN  NDIS_HANDLE         MiniportAdapterHandle,
2732     IN  PNDIS_WAN_PACKET    Packet,
2733     IN  NDIS_STATUS         Status);
2734
2735 NDIS_STATUS
2736 EXPIMP
2737 NdisPciAssignResources(
2738     IN  NDIS_HANDLE         NdisMacHandle,
2739     IN  NDIS_HANDLE         NdisWrapperHandle,
2740     IN  NDIS_HANDLE         WrapperConfigurationContext,
2741     IN  ULONG               SlotNumber,
2742     OUT PNDIS_RESOURCE_LIST *AssignedResources);
2743
2744 VOID
2745 EXPIMP
2746 NdisReadEisaSlotInformationEx(
2747     OUT PNDIS_STATUS                    Status,
2748     IN  NDIS_HANDLE                     WrapperConfigurationContext,
2749     OUT PUINT                           SlotNumber,
2750     OUT PNDIS_EISA_FUNCTION_INFORMATION *EisaData,
2751     OUT PUINT                           NumberOfFunctions);
2752
2753 VOID
2754 EXPIMP
2755 NdisReadMcaPosInformation(
2756     OUT PNDIS_STATUS        Status,
2757     IN  NDIS_HANDLE         WrapperConfigurationContext,
2758     IN  PUINT               ChannelNumber,
2759     OUT PNDIS_MCA_POS_DATA  McaData);
2760
2761 #endif /* NDIS40 */
2762
2763
2764 #if     USE_KLOCKS
2765
2766 #define DISPATCH_LEVEL          2
2767
2768 #define NdisAllocateSpinLock(_SpinLock) KeInitializeSpinLock(&(_SpinLock)->SpinLock)
2769
2770 #define NdisFreeSpinLock(_SpinLock)
2771
2772 #define NdisAcquireSpinLock(_SpinLock)  KeAcquireSpinLock(&(_SpinLock)->SpinLock, &(_SpinLock)->OldIrql)
2773
2774 #define NdisReleaseSpinLock(_SpinLock)  KeReleaseSpinLock(&(_SpinLock)->SpinLock,(_SpinLock)->OldIrql)
2775
2776 #define NdisDprAcquireSpinLock(_SpinLock)                                               \
2777 {                                                                                                                               \
2778         KeAcquireSpinLockAtDpcLevel(&(_SpinLock)->SpinLock);            \
2779         (_SpinLock)->OldIrql = DISPATCH_LEVEL;                                          \
2780 }
2781
2782 #define NdisDprReleaseSpinLock(_SpinLock) KeReleaseSpinLockFromDpcLevel(&(_SpinLock)->SpinLock)
2783
2784 #else
2785
2786 //
2787 // Ndis Spin Locks
2788 //
2789
2790 VOID
2791 EXPIMP
2792 NdisAllocateSpinLock(
2793         IN      PNDIS_SPIN_LOCK                 SpinLock
2794         );
2795
2796
2797 VOID
2798 EXPIMP
2799 NdisFreeSpinLock(
2800         IN      PNDIS_SPIN_LOCK                 SpinLock
2801         );
2802
2803
2804 VOID
2805 EXPIMP
2806 NdisAcquireSpinLock(
2807         IN      PNDIS_SPIN_LOCK                 SpinLock
2808         );
2809
2810
2811 VOID
2812 EXPIMP
2813 NdisReleaseSpinLock(
2814         IN      PNDIS_SPIN_LOCK                 SpinLock
2815         );
2816
2817
2818 VOID
2819 EXPIMP
2820 NdisDprAcquireSpinLock(
2821         IN      PNDIS_SPIN_LOCK                 SpinLock
2822         );
2823
2824
2825 VOID
2826 EXPIMP
2827 NdisDprReleaseSpinLock(
2828         IN      PNDIS_SPIN_LOCK                 SpinLock
2829         );
2830
2831 #endif
2832
2833 VOID
2834 EXPIMP
2835 NdisGetCurrentSystemTime(
2836         PLONGLONG                               pSystemTime
2837         );
2838
2839
2840 /* NDIS 5.0 extensions */
2841
2842 #ifdef NDIS50
2843
2844 VOID
2845 EXPIMP
2846 NdisAcquireReadWriteLock(
2847     IN  PNDIS_RW_LOCK   Lock,
2848     IN  BOOLEAN         fWrite,
2849     IN  PLOCK_STATE     LockState);
2850
2851 NDIS_STATUS
2852 EXPIMP
2853 NdisAllocateMemoryWithTag(
2854     OUT PVOID   *VirtualAddress,
2855     IN  UINT    Length,
2856     IN  ULONG   Tag);
2857
2858 VOID
2859 EXPIMP
2860 NdisAllocatePacketPoolEx(
2861     OUT PNDIS_STATUS    Status,
2862     OUT PNDIS_HANDLE    PoolHandle,
2863     IN  UINT            NumberOfDescriptors,
2864     IN  UINT            NumberOfOverflowDescriptors,
2865     IN  UINT            ProtocolReservedLength);
2866
2867 ULONG
2868 EXPIMP
2869 NdisBufferLength(
2870     IN  PNDIS_BUFFER    Buffer);
2871
2872 PVOID
2873 EXPIMP
2874 NdisBufferVirtualAddress(
2875     IN  PNDIS_BUFFER    Buffer);
2876
2877 VOID
2878 EXPIMP
2879 NdisCompletePnPEvent(
2880     IN  NDIS_STATUS     Status,
2881     IN  NDIS_HANDLE     NdisBindingHandle,
2882     IN  PNET_PNP_EVENT  NetPnPEvent);
2883
2884 VOID
2885 EXPIMP
2886 NdisConvertStringToAtmAddress(
2887     OUT PNDIS_STATUS    Status,
2888     IN  PNDIS_STRING    String,
2889     OUT PATM_ADDRESS    AtmAddress);
2890
2891 VOID
2892 EXPIMP
2893 NdisGetCurrentProcessorCounts(
2894     OUT PULONG  pIdleCount,
2895     OUT PULONG  pKernelAndUser,
2896     OUT PULONG  pIndex);
2897
2898 VOID
2899 EXPIMP
2900 NdisGetDriverHandle(
2901     IN  PNDIS_HANDLE    NdisBindingHandle,
2902     OUT PNDIS_HANDLE    NdisDriverHandle);
2903
2904 PNDIS_PACKET
2905 EXPIMP
2906 NdisGetReceivedPacket(
2907     IN  PNDIS_HANDLE    NdisBindingHandle,
2908     IN  PNDIS_HANDLE    MacContext);
2909
2910 VOID
2911 EXPIMP
2912 NdisGetSystemUptime(
2913     OUT PULONG  pSystemUpTime);
2914
2915 VOID
2916 EXPIMP
2917 NdisInitializeReadWriteLock(
2918     IN  PNDIS_RW_LOCK   Lock);
2919
2920 LONG
2921 EXPIMP
2922 NdisInterlockedDecrement(
2923     IN  PLONG   Addend);
2924
2925 LONG
2926 EXPIMP
2927 NdisInterlockedIncrement(
2928     IN  PLONG   Addend);
2929
2930 PSINGLE_LIST_ENTRY
2931 EXPIMP
2932 NdisInterlockedPopEntrySList(
2933     IN  PSLIST_HEADER   ListHead,
2934     IN  PKSPIN_LOCK     Lock);
2935
2936 PSINGLE_LIST_ENTRY
2937 EXPIMP
2938 NdisInterlockedPushEntrySList(
2939     IN  PSLIST_HEADER       ListHead,
2940     IN  PSINGLE_LIST_ENTRY  ListEntry,
2941     IN  PKSPIN_LOCK         Lock);
2942
2943
2944 NDIS_STATUS
2945 EXPIMP
2946 NdisMDeregisterDevice(
2947     IN  NDIS_HANDLE NdisDeviceHandle);
2948
2949 VOID
2950 EXPIMP
2951 NdisMGetDeviceProperty(
2952     IN      NDIS_HANDLE         MiniportAdapterHandle,
2953     IN OUT  PDEVICE_OBJECT      *PhysicalDeviceObject           OPTIONAL,
2954     IN OUT  PDEVICE_OBJECT      *FunctionalDeviceObject         OPTIONAL,
2955     IN OUT  PDEVICE_OBJECT      *NextDeviceObject               OPTIONAL,
2956     IN OUT  PCM_RESOURCE_LIST   *AllocatedResources             OPTIONAL,
2957     IN OUT  PCM_RESOURCE_LIST   *AllocatedResourcesTranslated   OPTIONAL);
2958
2959 NDIS_STATUS
2960 EXPIMP
2961 NdisMInitializeScatterGatherDma(
2962     IN  NDIS_HANDLE MiniportAdapterHandle,
2963     IN  BOOLEAN     Dma64BitAddresses,
2964     IN  ULONG       MaximumPhysicalMapping);
2965
2966 NDIS_STATUS
2967 EXPIMP
2968 NdisMPromoteMiniport(
2969     IN  NDIS_HANDLE MiniportAdapterHandle);
2970
2971 NDIS_STATUS
2972 EXPIMP
2973 NdisMQueryAdapterInstanceName(
2974     OUT PNDIS_STRING    AdapterInstanceName,
2975     IN  NDIS_HANDLE     MiniportAdapterHandle);
2976
2977 NDIS_STATUS
2978 EXPIMP
2979 NdisMRegisterDevice(
2980     IN  NDIS_HANDLE         NdisWrapperHandle,
2981     IN  PNDIS_STRING        DeviceName,
2982     IN  PNDIS_STRING        SymbolicName,
2983     IN  PDRIVER_DISPATCH    MajorFunctions[],
2984     OUT PDEVICE_OBJECT      *pDeviceObject,
2985     OUT NDIS_HANDLE         *NdisDeviceHandle);
2986
2987 VOID
2988 EXPIMP
2989 NdisMRegisterUnloadHandler(
2990     IN  NDIS_HANDLE     NdisWrapperHandle,
2991     IN  PDRIVER_UNLOAD  UnloadHandler);
2992
2993 NDIS_STATUS
2994 EXPIMP
2995 NdisMRemoveMiniport(
2996     IN  NDIS_HANDLE MiniportAdapterHandle);
2997
2998 NDIS_STATUS
2999 EXPIMP
3000 NdisMSetMiniportSecondary(
3001     IN  NDIS_HANDLE MiniportAdapterHandle,
3002     IN  NDIS_HANDLE PrimaryMiniportAdapterHandle);
3003
3004 VOID
3005 EXPIMP
3006 NdisOpenConfigurationKeyByIndex(
3007     OUT PNDIS_STATUS    Status,
3008     IN  NDIS_HANDLE     ConfigurationHandle,
3009     IN  ULONG           Index,
3010     OUT PNDIS_STRING    KeyName,
3011     OUT PNDIS_HANDLE    KeyHandle);
3012
3013 VOID
3014 EXPIMP
3015 NdisOpenConfigurationKeyByName(
3016     OUT PNDIS_STATUS    Status,
3017     IN  NDIS_HANDLE     ConfigurationHandle,
3018     IN  PNDIS_STRING    SubKeyName,
3019     OUT PNDIS_HANDLE    SubKeyHandle);
3020
3021 UINT
3022 EXPIMP
3023 NdisPacketPoolUsage(
3024     IN  NDIS_HANDLE PoolHandle);
3025
3026 NDIS_STATUS
3027 EXPIMP
3028 NdisQueryAdapterInstanceName(
3029     OUT PNDIS_STRING    AdapterInstanceName,
3030     IN  NDIS_HANDLE     NdisBindingHandle);
3031
3032 VOID
3033 EXPIMP
3034 NdisQueryBufferSafe(
3035     IN  PNDIS_BUFFER    Buffer,
3036     OUT PVOID           *VirtualAddress OPTIONAL,
3037     OUT PUINT           Length,
3038     IN  UINT            Priority);
3039
3040 ULONG
3041 EXPIMP
3042 NdisReadPcmciaAttributeMemory(
3043     IN  NDIS_HANDLE NdisAdapterHandle,
3044     IN  ULONG       Offset,
3045     IN  PVOID       Buffer,
3046     IN  ULONG       Length);
3047
3048 VOID
3049 EXPIMP
3050 NdisReleaseReadWriteLock(
3051     IN  PNDIS_RW_LOCK   Lock,
3052     IN  PLOCK_STATE     LockState);
3053
3054
3055 NDIS_STATUS
3056 EXPIMP
3057 NdisWriteEventLogEntry(
3058     IN  PVOID       LogHandle,
3059     IN  NDIS_STATUS EventCode,
3060     IN  ULONG       UniqueEventValue,
3061     IN  USHORT      NumStrings,
3062     IN  PVOID       StringsList OPTIONAL,
3063     IN  ULONG       DataSize,
3064     IN  PVOID       Data        OPTIONAL);
3065
3066 ULONG
3067 EXPIMP
3068 NdisWritePcmciaAttributeMemory(
3069     IN  NDIS_HANDLE NdisAdapterHandle,
3070     IN  ULONG       Offset,
3071     IN  PVOID       Buffer,
3072     IN  ULONG       Length);
3073
3074
3075 /* Connectionless services */
3076
3077 NDIS_STATUS
3078 EXPIMP
3079 NdisClAddParty(
3080     IN      NDIS_HANDLE         NdisVcHandle,
3081     IN      NDIS_HANDLE         ProtocolPartyContext,
3082     IN OUT  PCO_CALL_PARAMETERS CallParameters,
3083     OUT     PNDIS_HANDLE        NdisPartyHandle);
3084
3085 NDIS_STATUS
3086 EXPIMP
3087 NdisClCloseAddressFamily(
3088     IN  NDIS_HANDLE NdisAfHandle);
3089
3090 NDIS_STATUS
3091 EXPIMP
3092 NdisClCloseCall(
3093     IN  NDIS_HANDLE NdisVcHandle,
3094     IN  NDIS_HANDLE NdisPartyHandle OPTIONAL,
3095     IN  PVOID       Buffer          OPTIONAL,
3096     IN  UINT        Size);
3097
3098 NDIS_STATUS
3099 EXPIMP
3100 NdisClDeregisterSap(
3101     IN  NDIS_HANDLE NdisSapHandle);
3102
3103 NDIS_STATUS
3104 EXPIMP
3105 NdisClDropParty(
3106     IN  NDIS_HANDLE NdisPartyHandle,
3107     IN  PVOID       Buffer  OPTIONAL,
3108     IN  UINT        Size);
3109
3110 VOID
3111 EXPIMP
3112 NdisClIncomingCallComplete(
3113     IN  NDIS_STATUS         Status,
3114     IN  NDIS_HANDLE         NdisVcHandle,
3115     IN  PCO_CALL_PARAMETERS CallParameters);
3116
3117 NDIS_STATUS
3118 EXPIMP
3119 NdisClMakeCall(
3120     IN      NDIS_HANDLE         NdisVcHandle,
3121     IN OUT  PCO_CALL_PARAMETERS CallParameters,
3122     IN      NDIS_HANDLE         ProtocolPartyContext    OPTIONAL,
3123     OUT     PNDIS_HANDLE        NdisPartyHandle         OPTIONAL);
3124
3125 NDIS_STATUS 
3126 EXPIMP
3127 NdisClModifyCallQoS(
3128     IN  NDIS_HANDLE         NdisVcHandle,
3129     IN  PCO_CALL_PARAMETERS CallParameters);
3130
3131
3132 NDIS_STATUS
3133 EXPIMP
3134 NdisClOpenAddressFamily(
3135     IN  NDIS_HANDLE                     NdisBindingHandle,
3136     IN  PCO_ADDRESS_FAMILY              AddressFamily,
3137     IN  NDIS_HANDLE                     ProtocolAfContext,
3138     IN  PNDIS_CLIENT_CHARACTERISTICS    ClCharacteristics,
3139     IN  UINT                            SizeOfClCharacteristics,
3140     OUT PNDIS_HANDLE                    NdisAfHandle);
3141
3142 NDIS_STATUS
3143 EXPIMP
3144 NdisClRegisterSap(
3145     IN  NDIS_HANDLE     NdisAfHandle,
3146     IN  NDIS_HANDLE     ProtocolSapContext,
3147     IN  PCO_SAP         Sap,
3148     OUT PNDIS_HANDLE    NdisSapHandle);
3149
3150
3151 /* Call Manager services */
3152
3153 NDIS_STATUS
3154 EXPIMP
3155 NdisCmActivateVc(
3156     IN      NDIS_HANDLE         NdisVcHandle,
3157     IN OUT  PCO_CALL_PARAMETERS CallParameters);
3158
3159 VOID
3160 EXPIMP
3161 NdisCmAddPartyComplete(
3162     IN  NDIS_STATUS         Status,
3163     IN  NDIS_HANDLE         NdisPartyHandle,
3164     IN  NDIS_HANDLE         CallMgrPartyContext OPTIONAL,
3165     IN  PCO_CALL_PARAMETERS CallParameters);
3166
3167 VOID
3168 EXPIMP
3169 NdisCmCloseAddressFamilyComplete(
3170     IN  NDIS_STATUS Status,
3171     IN  NDIS_HANDLE NdisAfHandle);
3172
3173 VOID
3174 EXPIMP
3175 NdisCmCloseCallComplete(
3176     IN  NDIS_STATUS Status,
3177     IN  NDIS_HANDLE NdisVcHandle,
3178     IN  NDIS_HANDLE NdisPartyHandle OPTIONAL);
3179
3180 NDIS_STATUS
3181 EXPIMP
3182 NdisCmDeactivateVc(
3183     IN  NDIS_HANDLE NdisVcHandle);
3184
3185 VOID
3186 EXPIMP
3187 NdisCmDeregisterSapComplete(
3188     IN  NDIS_STATUS Status,
3189     IN  NDIS_HANDLE NdisSapHandle);
3190
3191 VOID
3192 EXPIMP
3193 NdisCmDispatchCallConnected(
3194     IN  NDIS_HANDLE NdisVcHandle);
3195
3196 NDIS_STATUS
3197 EXPIMP
3198 NdisCmDispatchIncomingCall(
3199     IN  NDIS_HANDLE         NdisSapHandle,
3200     IN  NDIS_HANDLE         NdisVcHandle,
3201     IN  PCO_CALL_PARAMETERS CallParameters);
3202
3203 VOID
3204 EXPIMP
3205 NdisCmDispatchIncomingCallQoSChange(
3206     IN  NDIS_HANDLE         NdisVcHandle,
3207     IN  PCO_CALL_PARAMETERS CallParameters);
3208
3209 VOID
3210 EXPIMP
3211 NdisCmDispatchIncomingCloseCall(
3212     IN  NDIS_STATUS CloseStatus,
3213     IN  NDIS_HANDLE NdisVcHandle,
3214     IN  PVOID       Buffer  OPTIONAL,
3215     IN  UINT        Size);
3216
3217 VOID
3218 EXPIMP
3219 NdisCmDispatchIncomingDropParty(
3220     IN  NDIS_STATUS DropStatus,
3221     IN  NDIS_HANDLE NdisPartyHandle,
3222     IN  PVOID       Buffer  OPTIONAL,
3223     IN  UINT        Size);
3224
3225 VOID
3226 EXPIMP
3227 NdisCmDropPartyComplete(
3228     IN  NDIS_STATUS Status,
3229     IN  NDIS_HANDLE NdisPartyHandle);
3230
3231 VOID
3232 EXPIMP
3233 NdisCmMakeCallComplete(
3234     IN  NDIS_STATUS         Status,
3235     IN  NDIS_HANDLE         NdisVcHandle,
3236     IN  NDIS_HANDLE         NdisPartyHandle     OPTIONAL,
3237     IN  NDIS_HANDLE         CallMgrPartyContext OPTIONAL,
3238     IN  PCO_CALL_PARAMETERS CallParameters);
3239
3240 VOID
3241 EXPIMP
3242 NdisCmModifyCallQoSComplete(
3243     IN  NDIS_STATUS         Status,
3244     IN  NDIS_HANDLE         NdisVcHandle,
3245     IN  PCO_CALL_PARAMETERS CallParameters);
3246
3247 VOID
3248 EXPIMP
3249 NdisCmOpenAddressFamilyComplete(
3250     IN  NDIS_STATUS Status,
3251     IN  NDIS_HANDLE NdisAfHandle,
3252     IN  NDIS_HANDLE CallMgrAfContext);
3253
3254 NDIS_STATUS
3255 EXPIMP
3256 NdisCmRegisterAddressFamily(
3257     IN  NDIS_HANDLE                         NdisBindingHandle,
3258     IN  PCO_ADDRESS_FAMILY                  AddressFamily,
3259     IN  PNDIS_CALL_MANAGER_CHARACTERISTICS  CmCharacteristics,
3260     IN  UINT                                SizeOfCmCharacteristics);
3261
3262 VOID
3263 EXPIMP
3264 NdisCmRegisterSapComplete(
3265     IN  NDIS_STATUS Status,
3266     IN  NDIS_HANDLE NdisSapHandle,
3267     IN  NDIS_HANDLE CallMgrSapContext);
3268
3269
3270 NDIS_STATUS
3271 EXPIMP
3272 NdisMCmActivateVc(
3273     IN  NDIS_HANDLE         NdisVcHandle,
3274     IN  PCO_CALL_PARAMETERS CallParameters);
3275
3276 NDIS_STATUS
3277 EXPIMP
3278 NdisMCmCreateVc(
3279     IN  NDIS_HANDLE     MiniportAdapterHandle,
3280     IN  NDIS_HANDLE     NdisAfHandle,
3281     IN  NDIS_HANDLE     MiniportVcContext,
3282     OUT PNDIS_HANDLE    NdisVcHandle);
3283
3284 NDIS_STATUS
3285 EXPIMP
3286 NdisMCmDeactivateVc(
3287     IN  NDIS_HANDLE NdisVcHandle);
3288
3289 NDIS_STATUS
3290 EXPIMP
3291 NdisMCmDeleteVc(
3292     IN  NDIS_HANDLE NdisVcHandle);
3293
3294 NDIS_STATUS
3295 EXPIMP
3296 NdisMCmRegisterAddressFamily(
3297     IN  NDIS_HANDLE                         MiniportAdapterHandle,
3298     IN  PCO_ADDRESS_FAMILY                  AddressFamily,
3299     IN  PNDIS_CALL_MANAGER_CHARACTERISTICS  CmCharacteristics,
3300     IN  UINT                                SizeOfCmCharacteristics);
3301
3302 NDIS_STATUS
3303 EXPIMP
3304 NdisMCmRequest(
3305     IN      NDIS_HANDLE     NdisAfHandle,
3306     IN      NDIS_HANDLE     NdisVcHandle    OPTIONAL,
3307     IN      NDIS_HANDLE     NdisPartyHandle OPTIONAL,
3308     IN OUT  PNDIS_REQUEST   NdisRequest);
3309
3310
3311 /* Connection-oriented services */
3312
3313 NDIS_STATUS
3314 EXPIMP
3315 NdisCoCreateVc(
3316     IN  NDIS_HANDLE         NdisBindingHandle,
3317     IN  NDIS_HANDLE         NdisAfHandle  OPTIONAL,
3318     IN  NDIS_HANDLE         ProtocolVcContext,
3319     IN  OUT PNDIS_HANDLE    NdisVcHandle);
3320
3321 NDIS_STATUS
3322 EXPIMP
3323 NdisCoDeleteVc(
3324     IN  NDIS_HANDLE NdisVcHandle);
3325
3326 NDIS_STATUS
3327 EXPIMP
3328 NdisCoRequest(
3329     IN      NDIS_HANDLE     NdisBindingHandle,
3330     IN      NDIS_HANDLE     NdisAfHandle    OPTIONAL,
3331     IN      NDIS_HANDLE     NdisVcHandle    OPTIONAL,
3332     IN      NDIS_HANDLE     NdisPartyHandle OPTIONAL,
3333     IN OUT  PNDIS_REQUEST   NdisRequest);
3334
3335 VOID
3336 EXPIMP
3337 NdisCoRequestComplete(
3338     IN  NDIS_STATUS     Status,
3339     IN  NDIS_HANDLE     NdisAfHandle,
3340     IN  NDIS_HANDLE     NdisVcHandle    OPTIONAL,
3341     IN  NDIS_HANDLE     NdisPartyHandle OPTIONAL,
3342     IN  PNDIS_REQUEST   NdisRequest);
3343
3344 VOID
3345 EXPIMP
3346 NdisCoSendPackets(
3347     IN  NDIS_HANDLE     NdisVcHandle,
3348     IN  PPNDIS_PACKET   PacketArray,
3349     IN  UINT            NumberOfPackets);
3350
3351
3352 VOID
3353 EXPIMP
3354 NdisMCoActivateVcComplete(
3355     IN  NDIS_STATUS         Status,
3356     IN  NDIS_HANDLE         NdisVcHandle,
3357     IN  PCO_CALL_PARAMETERS CallParameters);
3358
3359 VOID
3360 EXPIMP
3361 NdisMCoDeactivateVcComplete(
3362     IN  NDIS_STATUS Status,
3363     IN  NDIS_HANDLE NdisVcHandle);
3364
3365 VOID
3366 EXPIMP
3367 NdisMCoIndicateReceivePacket(
3368     IN  NDIS_HANDLE     NdisVcHandle,
3369     IN  PPNDIS_PACKET   PacketArray,
3370     IN  UINT            NumberOfPackets);
3371
3372 VOID
3373 EXPIMP
3374 NdisMCoIndicateStatus(
3375     IN  NDIS_HANDLE MiniportAdapterHandle,
3376     IN  NDIS_HANDLE NdisVcHandle    OPTIONAL,
3377     IN  NDIS_STATUS GeneralStatus,
3378     IN  PVOID       StatusBuffer    OPTIONAL,
3379     IN  ULONG       StatusBufferSize);
3380
3381 VOID
3382 EXPIMP
3383 NdisMCoReceiveComplete(
3384     IN  NDIS_HANDLE MiniportAdapterHandle);
3385
3386 VOID
3387 EXPIMP
3388 NdisMCoRequestComplete(
3389     IN  NDIS_STATUS     Status,
3390     IN  NDIS_HANDLE     MiniportAdapterHandle,
3391     IN  PNDIS_REQUEST   Request);
3392
3393 VOID 
3394 EXPIMP
3395 NdisMCoSendComplete(
3396     IN  NDIS_STATUS     Status,
3397     IN  NDIS_HANDLE     NdisVcHandle,
3398     IN  PNDIS_PACKET    Packet);
3399
3400
3401 /* NDIS 5.0 extensions for intermediate drivers */
3402
3403 VOID
3404 EXPIMP
3405 NdisIMAssociateMiniport(
3406     IN  NDIS_HANDLE DriverHandle,
3407     IN  NDIS_HANDLE ProtocolHandle);
3408
3409 NDIS_STATUS 
3410 EXPIMP
3411 NdisIMCancelInitializeDeviceInstance(
3412     IN  NDIS_HANDLE     DriverHandle,
3413     IN  PNDIS_STRING    DeviceInstance);
3414
3415 VOID
3416 EXPIMP
3417 NdisIMCopySendCompletePerPacketInfo(
3418     IN  PNDIS_PACKET    DstPacket,
3419     IN  PNDIS_PACKET    SrcPacket);
3420
3421 VOID
3422 EXPIMP
3423 NdisIMCopySendPerPacketInfo(
3424     IN  PNDIS_PACKET    DstPacket,
3425     IN  PNDIS_PACKET    SrcPacket);
3426
3427 VOID
3428 EXPIMP
3429 NdisIMDeregisterLayeredMiniport(
3430     IN  NDIS_HANDLE DriverHandle);
3431
3432 NDIS_HANDLE
3433 EXPIMP
3434 NdisIMGetBindingContext(
3435     IN  NDIS_HANDLE NdisBindingHandle);
3436
3437 NDIS_HANDLE
3438 EXPIMP
3439 NdisIMGetDeviceContext(
3440     IN  NDIS_HANDLE MiniportAdapterHandle);
3441
3442 NDIS_STATUS
3443 EXPIMP
3444 NdisIMInitializeDeviceInstanceEx(
3445     IN  NDIS_HANDLE     DriverHandle,
3446     IN  PNDIS_STRING    DriverInstance,
3447     IN  NDIS_HANDLE     DeviceContext   OPTIONAL);
3448
3449 #endif /* NDIS50 */
3450
3451
3452
3453 /* Prototypes for NDIS_MINIPORT_CHARACTERISTICS */
3454
3455 typedef BOOLEAN (*W_CHECK_FOR_HANG_HANDLER)(
3456     IN  NDIS_HANDLE MiniportAdapterContext);
3457
3458 typedef VOID (*W_DISABLE_INTERRUPT_HANDLER)(
3459     IN  NDIS_HANDLE MiniportAdapterContext);
3460
3461 typedef VOID (*W_ENABLE_INTERRUPT_HANDLER)(
3462     IN  NDIS_HANDLE MiniportAdapterContext);
3463
3464 typedef VOID (*W_HALT_HANDLER)(
3465     IN  NDIS_HANDLE MiniportAdapterContext);
3466
3467 typedef VOID (*W_HANDLE_INTERRUPT_HANDLER)(
3468     IN  NDIS_HANDLE MiniportAdapterContext);
3469
3470 typedef NDIS_STATUS (*W_INITIALIZE_HANDLER)(
3471     OUT PNDIS_STATUS    OpenErrorStatus,
3472     OUT PUINT           SelectedMediumIndex,
3473     IN  PNDIS_MEDIUM    MediumArray,
3474     IN  UINT            MediumArraySize,
3475     IN  NDIS_HANDLE     MiniportAdapterContext,
3476     IN  NDIS_HANDLE     WrapperConfigurationContext);
3477
3478 typedef VOID (*W_ISR_HANDLER)(
3479     OUT PBOOLEAN                                InterruptRecognized,
3480     OUT PBOOLEAN                                QueueMiniportHandleInterrupt,
3481     IN  NDIS_HANDLE                             MiniportAdapterContext);
3482
3483 typedef NDIS_STATUS (*W_QUERY_INFORMATION_HANDLER)(
3484     IN  NDIS_HANDLE MiniportAdapterContext,
3485     IN  NDIS_OID    Oid,
3486     IN  PVOID       InformationBuffer,
3487     IN  ULONG       InformationBufferLength,
3488     OUT PULONG      BytesWritten,
3489     OUT PULONG      BytesNeeded);
3490
3491 typedef NDIS_STATUS (*W_RECONFIGURE_HANDLER)(
3492     OUT PNDIS_STATUS    OpenErrorStatus,
3493     IN  NDIS_HANDLE     MiniportAdapterContext,
3494     IN  NDIS_HANDLE         WrapperConfigurationContext);
3495
3496 typedef NDIS_STATUS (*W_RESET_HANDLER)(
3497     OUT PBOOLEAN    AddressingReset,
3498     IN  NDIS_HANDLE MiniportAdapterContext);
3499
3500 typedef NDIS_STATUS (*W_SEND_HANDLER)(
3501     IN  NDIS_HANDLE     MiniportAdapterContext,
3502     IN  PNDIS_PACKET    Packet,
3503     IN  UINT            Flags);
3504
3505 typedef NDIS_STATUS (*WM_SEND_HANDLER)(
3506     IN  NDIS_HANDLE         MiniportAdapterContext,
3507     IN  NDIS_HANDLE         NdisLinkHandle,
3508     IN  PNDIS_WAN_PACKET    Packet);
3509
3510 typedef NDIS_STATUS (*W_SET_INFORMATION_HANDLER)(
3511     IN  NDIS_HANDLE MiniportAdapterContext,
3512     IN  NDIS_OID    Oid,
3513     IN  PVOID       InformationBuffer,
3514     IN  ULONG       InformationBufferLength,
3515     OUT PULONG      BytesRead,
3516     OUT PULONG      BytesNeeded);
3517
3518 typedef NDIS_STATUS (*W_TRANSFER_DATA_HANDLER)(
3519     OUT PNDIS_PACKET    Packet,
3520     OUT PUINT           BytesTransferred,
3521     IN  NDIS_HANDLE     MiniportAdapterContext,
3522     IN  NDIS_HANDLE     MiniportReceiveContext,
3523     IN  UINT            ByteOffset,
3524     IN  UINT            BytesToTransfer);
3525
3526 typedef NDIS_STATUS (*WM_TRANSFER_DATA_HANDLER)(
3527     VOID);
3528
3529
3530
3531 /* NDIS structures available only to miniport drivers */
3532
3533 /* Technology specific defines */
3534
3535 #define DECLARE_UNKNOWN_STRUCT(BaseName) \
3536     typedef struct _##BaseName BaseName, *P##BaseName;
3537
3538 #define DECLARE_UNKNOWN_PROTOTYPE(Name) \
3539     typedef VOID (*##Name)(VOID);
3540
3541
3542 /* ARCnet */
3543
3544 typedef struct _ARC_BUFFER_LIST
3545 {
3546     PVOID                   Buffer;
3547     UINT                    Size;
3548     UINT                    BytesLeft;
3549     struct _ARC_BUFFER_LIST *Next;
3550 } ARC_BUFFER_LIST, *PARC_BUFFER_LIST;
3551
3552 DECLARE_UNKNOWN_STRUCT(ARC_FILTER)
3553
3554
3555 VOID
3556 EXPIMP
3557 ArcFilterDprIndicateReceive(
3558     IN  PARC_FILTER Filter,
3559     IN  PUCHAR      pRawHeader,
3560     IN  PUCHAR      pData,
3561     IN  UINT        Length);
3562
3563 VOID
3564 EXPIMP
3565 ArcFilterDprIndicateReceiveComplete(
3566     IN  PARC_FILTER Filter);
3567
3568
3569 /* Ethernet */
3570
3571 #define ETH_LENGTH_OF_ADDRESS   6
3572
3573 DECLARE_UNKNOWN_STRUCT(ETH_BINDING_INFO);
3574
3575 DECLARE_UNKNOWN_PROTOTYPE(ETH_ADDRESS_CHANGE)
3576 DECLARE_UNKNOWN_PROTOTYPE(ETH_FILTER_CHANGE)
3577 DECLARE_UNKNOWN_PROTOTYPE(ETH_DEFERRED_CLOSE)
3578
3579 typedef struct _ETH_FILTER
3580 {
3581     PNDIS_SPIN_LOCK             Lock;
3582     CHAR                        (*MCastAddressBuf)[ETH_LENGTH_OF_ADDRESS];
3583     struct _NDIS_MINIPORT_BLOCK *Miniport;
3584     UINT                        CombinedPacketFilter;
3585     PETH_BINDING_INFO           OpenList;
3586     ETH_ADDRESS_CHANGE          AddressChangeAction;
3587     ETH_FILTER_CHANGE           FilterChangeAction;
3588     ETH_DEFERRED_CLOSE          CloseAction;
3589     UINT                        MaxMulticastAddresses;
3590     UINT                        NumAddresses;
3591     UCHAR                       AdapterAddress[ETH_LENGTH_OF_ADDRESS];
3592     UINT                        OldCombinedPacketFilter;
3593     CHAR                        (*OldMCastAddressBuf)[ETH_LENGTH_OF_ADDRESS];
3594     UINT                        OldNumAddresses;
3595     PETH_BINDING_INFO           DirectedList;
3596     PETH_BINDING_INFO           BMList;
3597     PETH_BINDING_INFO           MCastSet;
3598 #if 0
3599 #ifdef NDIS_WRAPPER
3600         UINT                        NumOpens;
3601         NDIS_RW_LOCK                BindListLock;
3602 #endif
3603 #endif
3604 } ETH_FILTER, *PETH_FILTER;
3605
3606
3607 NDIS_STATUS
3608 EXPIMP
3609 EthChangeFilterAddresses(
3610     IN  PETH_FILTER     Filter,
3611     IN  NDIS_HANDLE     NdisFilterHandle,
3612     IN  PNDIS_REQUEST   NdisRequest,
3613     IN  UINT            AddressCount,
3614     IN  CHAR            Addresses[] [ETH_LENGTH_OF_ADDRESS],
3615     IN  BOOLEAN         Set);
3616
3617 BOOLEAN
3618 EXPIMP
3619 EthCreateFilter(
3620     IN  UINT                MaximumMulticastAddresses,
3621     IN  ETH_ADDRESS_CHANGE  AddressChangeAction,
3622     IN  ETH_FILTER_CHANGE   FilterChangeAction,
3623     IN  ETH_DEFERRED_CLOSE  CloseAction,
3624     IN  PUCHAR              AdapterAddress,
3625     IN  PNDIS_SPIN_LOCK     Lock,
3626     OUT PETH_FILTER         *Filter);
3627
3628 VOID
3629 EXPIMP
3630 EthDeleteFilter(
3631     IN  PETH_FILTER Filter);
3632
3633 NDIS_STATUS
3634 EXPIMP
3635 EthDeleteFilterOpenAdapter(
3636     IN  PETH_FILTER     Filter,
3637     IN  NDIS_HANDLE     NdisFilterHandle,
3638     IN  PNDIS_REQUEST   NdisRequest);
3639
3640 NDIS_STATUS
3641 EXPIMP
3642 EthFilterAdjust(
3643     IN  PETH_FILTER     Filter,
3644     IN  NDIS_HANDLE     NdisFilterHandle,
3645     IN  PNDIS_REQUEST   NdisRequest,
3646     IN  UINT            FilterClasses,
3647     IN  BOOLEAN         Set);
3648
3649 VOID
3650 EXPIMP
3651 EthFilterIndicateReceive(
3652     IN  PETH_FILTER Filter,
3653     IN  NDIS_HANDLE MacReceiveContext,
3654     IN  PCHAR       Address,
3655     IN  PVOID       HeaderBuffer,
3656     IN  UINT        HeaderBufferSize,
3657     IN  PVOID       LookaheadBuffer,
3658     IN  UINT        LookaheadBufferSize,
3659     IN  UINT        PacketSize);
3660
3661 VOID
3662 EXPIMP
3663 EthFilterIndicateReceiveComplete(
3664     IN  PETH_FILTER Filter);
3665
3666 BOOLEAN
3667 EXPIMP
3668 EthNoteFilterOpenAdapter(
3669     IN  PETH_FILTER     Filter,
3670     IN  NDIS_HANDLE     MacBindingHandle,
3671     IN  NDIS_HANDLE     NdisBindingContext,
3672     OUT PNDIS_HANDLE    NdisFilterHandle);
3673
3674 UINT
3675 EXPIMP
3676 EthNumberOfOpenFilterAddresses(
3677     IN  PETH_FILTER Filter,
3678     IN  NDIS_HANDLE NdisFilterHandle);
3679
3680 VOID
3681 EXPIMP
3682 EthQueryGlobalFilterAddresses (
3683     OUT PNDIS_STATUS    Status,
3684     IN  PETH_FILTER     Filter,
3685     IN  UINT            SizeOfArray,
3686     OUT PUINT           NumberOfAddresses,
3687     IN  OUT     CHAR        AddressArray[] [ETH_LENGTH_OF_ADDRESS]);
3688
3689 VOID
3690 EXPIMP
3691 EthQueryOpenFilterAddresses(
3692     OUT     PNDIS_STATUS    Status,
3693     IN      PETH_FILTER     Filter,
3694     IN      NDIS_HANDLE     NdisFilterHandle,
3695     IN      UINT            SizeOfArray,
3696     OUT     PUINT           NumberOfAddresses,
3697     IN OUT  CHAR            AddressArray[] [ETH_LENGTH_OF_ADDRESS]);
3698
3699 BOOLEAN
3700 EXPIMP
3701 EthShouldAddressLoopBack(
3702     IN  PETH_FILTER Filter,
3703     IN  CHAR        Address[ETH_LENGTH_OF_ADDRESS]);
3704
3705
3706 /* FDDI */
3707
3708 #define FDDI_LENGTH_OF_LONG_ADDRESS     6
3709 #define FDDI_LENGTH_OF_SHORT_ADDRESS    2
3710
3711 DECLARE_UNKNOWN_STRUCT(FDDI_FILTER)
3712
3713 DECLARE_UNKNOWN_PROTOTYPE(FDDI_ADDRESS_CHANGE)
3714 DECLARE_UNKNOWN_PROTOTYPE(FDDI_FILTER_CHANGE)
3715 DECLARE_UNKNOWN_PROTOTYPE(FDDI_DEFERRED_CLOSE)
3716
3717
3718 NDIS_STATUS
3719 EXPIMP
3720 FddiChangeFilterLongAddresses(
3721     IN  PFDDI_FILTER    Filter,
3722     IN  NDIS_HANDLE     NdisFilterHandle,
3723     IN  PNDIS_REQUEST   NdisRequest,
3724     IN  UINT            AddressCount,
3725     IN  CHAR            Addresses[] [FDDI_LENGTH_OF_LONG_ADDRESS],
3726     IN  BOOLEAN         Set);
3727
3728 NDIS_STATUS
3729 EXPIMP
3730 FddiChangeFilterShortAddresses(
3731     IN  PFDDI_FILTER    Filter,
3732     IN  NDIS_HANDLE     NdisFilterHandle,
3733     IN  PNDIS_REQUEST   NdisRequest,
3734     IN  UINT            AddressCount,
3735     IN  CHAR            Addresses[] [FDDI_LENGTH_OF_SHORT_ADDRESS],
3736     IN  BOOLEAN         Set);
3737
3738 BOOLEAN
3739 EXPIMP
3740 FddiCreateFilter(
3741     IN  UINT                MaximumMulticastLongAddresses,
3742     IN  UINT                MaximumMulticastShortAddresses,
3743     IN  FDDI_ADDRESS_CHANGE AddressChangeAction,
3744     IN  FDDI_FILTER_CHANGE  FilterChangeAction,
3745     IN  FDDI_DEFERRED_CLOSE CloseAction,
3746     IN  PUCHAR              AdapterLongAddress,
3747     IN  PUCHAR              AdapterShortAddress,
3748     IN  PNDIS_SPIN_LOCK     Lock,
3749     OUT PFDDI_FILTER        *Filter);
3750
3751 VOID
3752 EXPIMP
3753 FddiDeleteFilter(
3754     IN  PFDDI_FILTER    Filter);
3755
3756 NDIS_STATUS
3757 EXPIMP
3758 FddiDeleteFilterOpenAdapter(
3759     IN  PFDDI_FILTER    Filter,
3760     IN  NDIS_HANDLE     NdisFilterHandle,
3761     IN  PNDIS_REQUEST   NdisRequest);
3762
3763 NDIS_STATUS
3764 EXPIMP
3765 FddiFilterAdjust(
3766     IN  PFDDI_FILTER    Filter,
3767     IN  NDIS_HANDLE     NdisFilterHandle,
3768     IN  PNDIS_REQUEST   NdisRequest,
3769     IN  UINT            FilterClasses,
3770     IN  BOOLEAN         Set);
3771
3772 VOID
3773 EXPIMP
3774 FddiFilterIndicateReceive(
3775     IN  PFDDI_FILTER    Filter,
3776     IN  NDIS_HANDLE     MacReceiveContext,
3777     IN  PCHAR           Address,
3778     IN  UINT            AddressLength,
3779     IN  PVOID           HeaderBuffer,
3780     IN  UINT            HeaderBufferSize,
3781     IN  PVOID           LookaheadBuffer,
3782     IN  UINT            LookaheadBufferSize,
3783     IN  UINT            PacketSize);
3784
3785 VOID
3786 EXPIMP
3787 FddiFilterIndicateReceiveComplete(
3788     IN  PFDDI_FILTER    Filter);
3789
3790 BOOLEAN
3791 EXPIMP
3792 FddiNoteFilterOpenAdapter(
3793     IN  PFDDI_FILTER    Filter,
3794     IN  NDIS_HANDLE     MacBindingHandle,
3795     IN  NDIS_HANDLE     NdisBindingContext,
3796     OUT PNDIS_HANDLE    NdisFilterHandle);
3797
3798 UINT
3799 EXPIMP
3800 FddiNumberOfOpenFilterLongAddresses(
3801     IN  PFDDI_FILTER    Filter,
3802     IN  NDIS_HANDLE     NdisFilterHandle);
3803
3804 UINT
3805 EXPIMP
3806 FddiNumberOfOpenFilterShortAddresses(
3807     IN  PFDDI_FILTER    Filter,
3808     IN  NDIS_HANDLE     NdisFilterHandle);
3809
3810 VOID
3811 EXPIMP
3812 FddiQueryGlobalFilterLongAddresses(
3813     OUT     PNDIS_STATUS    Status,
3814     IN      PFDDI_FILTER    Filter,
3815     IN      UINT            SizeOfArray,
3816     OUT     PUINT           NumberOfAddresses,
3817     IN OUT  CHAR            AddressArray[] [FDDI_LENGTH_OF_LONG_ADDRESS]);
3818
3819 VOID
3820 EXPIMP
3821 FddiQueryGlobalFilterShortAddresses(
3822     OUT     PNDIS_STATUS    Status,
3823     IN      PFDDI_FILTER    Filter,
3824     IN      UINT            SizeOfArray,
3825     OUT     PUINT           NumberOfAddresses,
3826     IN OUT  CHAR            AddressArray[] [FDDI_LENGTH_OF_SHORT_ADDRESS]);
3827
3828 VOID
3829 EXPIMP
3830 FddiQueryOpenFilterLongAddresses(
3831     OUT     PNDIS_STATUS    Status,
3832     IN      PFDDI_FILTER    Filter,
3833     IN      NDIS_HANDLE     NdisFilterHandle,
3834     IN      UINT            SizeOfArray,
3835     OUT     PUINT           NumberOfAddresses,
3836     IN OUT  CHAR            AddressArray[] [FDDI_LENGTH_OF_LONG_ADDRESS]);
3837
3838 VOID
3839 EXPIMP
3840 FddiQueryOpenFilterShortAddresses(
3841     OUT     PNDIS_STATUS    Status,
3842     IN      PFDDI_FILTER    Filter,
3843     IN      NDIS_HANDLE     NdisFilterHandle,
3844     IN      UINT            SizeOfArray,
3845     OUT     PUINT           NumberOfAddresses,
3846     IN OUT  CHAR            AddressArray[] [FDDI_LENGTH_OF_SHORT_ADDRESS]);
3847
3848 BOOLEAN
3849 EXPIMP
3850 FddiShouldAddressLoopBack(
3851     IN  PFDDI_FILTER    Filter,
3852     IN  CHAR            Address[],
3853     IN  UINT            LengthOfAddress);
3854
3855
3856 /* Token Ring */
3857
3858 #define TR_LENGTH_OF_FUNCTIONAL 4
3859 #define TR_LENGTH_OF_ADDRESS    6
3860
3861 DECLARE_UNKNOWN_STRUCT(TR_FILTER)
3862
3863 DECLARE_UNKNOWN_PROTOTYPE(TR_ADDRESS_CHANGE)
3864 DECLARE_UNKNOWN_PROTOTYPE(TR_GROUP_CHANGE)
3865 DECLARE_UNKNOWN_PROTOTYPE(TR_FILTER_CHANGE)
3866 DECLARE_UNKNOWN_PROTOTYPE(TR_DEFERRED_CLOSE)
3867
3868
3869 NDIS_STATUS
3870 EXPIMP
3871 TrChangeFunctionalAddress(
3872     IN  PTR_FILTER      Filter,
3873     IN  NDIS_HANDLE     NdisFilterHandle,
3874     IN  PNDIS_REQUEST   NdisRequest,
3875     IN  CHAR            FunctionalAddressArray[TR_LENGTH_OF_FUNCTIONAL],
3876     IN  BOOLEAN         Set);
3877
3878 NDIS_STATUS
3879 EXPIMP
3880 TrChangeGroupAddress(
3881     IN  PTR_FILTER      Filter,
3882     IN  NDIS_HANDLE     NdisFilterHandle,
3883     IN  PNDIS_REQUEST   NdisRequest,
3884     IN  CHAR            GroupAddressArray[TR_LENGTH_OF_FUNCTIONAL],
3885     IN  BOOLEAN         Set);
3886
3887 BOOLEAN
3888 EXPIMP
3889 TrCreateFilter(
3890     IN  TR_ADDRESS_CHANGE   AddressChangeAction,
3891     IN  TR_GROUP_CHANGE     GroupChangeAction,
3892     IN  TR_FILTER_CHANGE    FilterChangeAction,
3893     IN  TR_DEFERRED_CLOSE   CloseAction,
3894     IN  PUCHAR              AdapterAddress,
3895     IN  PNDIS_SPIN_LOCK     Lock,
3896     OUT PTR_FILTER          *Filter);
3897
3898 VOID
3899 EXPIMP
3900 TrDeleteFilter(
3901     IN  PTR_FILTER  Filter);
3902
3903 NDIS_STATUS
3904 EXPIMP
3905 TrDeleteFilterOpenAdapter (
3906     IN  PTR_FILTER      Filter,
3907     IN  NDIS_HANDLE     NdisFilterHandle,
3908     IN  PNDIS_REQUEST   NdisRequest);
3909
3910 NDIS_STATUS
3911 EXPIMP
3912 TrFilterAdjust(
3913     IN  PTR_FILTER      Filter,
3914     IN  NDIS_HANDLE     NdisFilterHandle,
3915     IN  PNDIS_REQUEST   NdisRequest,
3916     IN  UINT            FilterClasses,
3917     IN  BOOLEAN         Set);
3918
3919 VOID
3920 EXPIMP
3921 TrFilterIndicateReceive(
3922     IN  PTR_FILTER  Filter,
3923     IN  NDIS_HANDLE MacReceiveContext,
3924     IN  PVOID       HeaderBuffer,
3925     IN  UINT        HeaderBufferSize,
3926     IN  PVOID       LookaheadBuffer,
3927     IN  UINT        LookaheadBufferSize,
3928     IN  UINT        PacketSize);
3929
3930 VOID
3931 EXPIMP
3932 TrFilterIndicateReceiveComplete(
3933     IN  PTR_FILTER  Filter);
3934
3935 BOOLEAN
3936 EXPIMP
3937 TrNoteFilterOpenAdapter(
3938     IN  PTR_FILTER      Filter,
3939     IN  NDIS_HANDLE     MacBindingHandle,
3940     IN  NDIS_HANDLE     NdisBindingContext,
3941     OUT PNDIS_HANDLE    NdisFilterHandle);
3942
3943 BOOLEAN
3944 EXPIMP
3945 TrShouldAddressLoopBack(
3946     IN  PTR_FILTER  Filter,
3947     IN  CHAR        DestinationAddress[TR_LENGTH_OF_ADDRESS],
3948     IN  CHAR        SourceAddress[TR_LENGTH_OF_ADDRESS]);
3949
3950
3951
3952 #ifdef _MSC_VER
3953 typedef struct _NDIS30_MINIPORT_CHARACTERISTICS
3954 {
3955     UCHAR                           MajorNdisVersion;
3956     UCHAR                           MinorNdisVersion;
3957     UINT                            Reserved;
3958     W_CHECK_FOR_HANG_HANDLER        CheckForHangHandler;
3959     W_DISABLE_INTERRUPT_HANDLER     DisableInterruptHandler;
3960     W_ENABLE_INTERRUPT_HANDLER      EnableInterruptHandler;
3961     W_HALT_HANDLER                  HaltHandler;
3962     W_HANDLE_INTERRUPT_HANDLER      HandleInterruptHandler;
3963     W_INITIALIZE_HANDLER            InitializeHandler;
3964     W_ISR_HANDLER                   ISRHandler;
3965     W_QUERY_INFORMATION_HANDLER     QueryInformationHandler;
3966     W_RECONFIGURE_HANDLER           ReconfigureHandler;
3967     W_RESET_HANDLER                 ResetHandler;
3968     union
3969     {
3970         W_SEND_HANDLER              SendHandler;
3971         WM_SEND_HANDLER             WanSendHandler;
3972     } u1;
3973     W_SET_INFORMATION_HANDLER       SetInformationHandler;
3974     union
3975     {
3976         W_TRANSFER_DATA_HANDLER     TransferDataHandler;
3977         WM_TRANSFER_DATA_HANDLER    WanTransferDataHandler;
3978     } u2;
3979 } NDIS30_MINIPORT_CHARACTERISTICS;
3980 typedef NDIS30_MINIPORT_CHARACTERISTICS NDIS30_MINIPORT_CHARACTERISTICS_S;
3981 #else
3982 #define NDIS30_MINIPORT_CHARACTERISTICS \
3983     UCHAR                           MajorNdisVersion; \
3984     UCHAR                           MinorNdisVersion; \
3985     UINT                            Reserved; \
3986     W_CHECK_FOR_HANG_HANDLER        CheckForHangHandler; \
3987     W_DISABLE_INTERRUPT_HANDLER     DisableInterruptHandler; \
3988     W_ENABLE_INTERRUPT_HANDLER      EnableInterruptHandler; \
3989     W_HALT_HANDLER                  HaltHandler; \
3990     W_HANDLE_INTERRUPT_HANDLER      HandleInterruptHandler; \
3991     W_INITIALIZE_HANDLER            InitializeHandler; \
3992     W_ISR_HANDLER                   ISRHandler; \
3993     W_QUERY_INFORMATION_HANDLER     QueryInformationHandler; \
3994     W_RECONFIGURE_HANDLER           ReconfigureHandler; \
3995     W_RESET_HANDLER                 ResetHandler; \
3996     union \
3997     { \
3998         W_SEND_HANDLER              SendHandler; \
3999         WM_SEND_HANDLER             WanSendHandler; \
4000     } u1; \
4001     W_SET_INFORMATION_HANDLER       SetInformationHandler; \
4002     union \
4003     { \
4004         W_TRANSFER_DATA_HANDLER     TransferDataHandler; \
4005         WM_TRANSFER_DATA_HANDLER    WanTransferDataHandler; \
4006     } u2; 
4007 typedef struct _NDIS30_MINIPORT_CHARACTERISTICS_S
4008 {
4009    NDIS30_MINIPORT_CHARACTERISTICS;
4010 } NDIS30_MINIPORT_CHARACTERISTICS_S, *PSNDIS30_MINIPORT_CHARACTERISTICS_S;
4011 #endif
4012
4013 /* Extensions for NDIS 4.0 miniports */
4014
4015 typedef VOID (*W_SEND_PACKETS_HANDLER)(
4016     IN  NDIS_HANDLE     MiniportAdapterContext,
4017     IN  PPNDIS_PACKET   PacketArray,
4018     IN  UINT            NumberOfPackets);
4019
4020 #ifdef NDIS40
4021
4022 typedef VOID (*W_RETURN_PACKET_HANDLER)(
4023     IN  NDIS_HANDLE     MiniportAdapterContext,
4024     IN  PNDIS_PACKET    Packet);
4025
4026 typedef VOID (*W_ALLOCATE_COMPLETE_HANDLER)(
4027     IN  NDIS_HANDLE             MiniportAdapterContext,
4028     IN  PVOID                   VirtualAddress,
4029     IN  PNDIS_PHYSICAL_ADDRESS  PhysicalAddress,
4030     IN  ULONG                   Length,
4031     IN  PVOID                   Context);
4032
4033 #ifdef _MSC_VER
4034 typedef struct _NDIS40_MINIPORT_CHARACTERISTICS
4035 {
4036     NDIS30_MINIPORT_CHARACTERISTICS;
4037
4038     W_RETURN_PACKET_HANDLER     ReturnPacketHandler;
4039     W_SEND_PACKETS_HANDLER      SendPacketsHandler;
4040     W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
4041 } NDIS40_MINIPORT_CHARACTERISTICS;
4042 typedef NDIS40_MINIPORT_CHARACTERISTICS NDIS40_MINIPORT_CHARACTERISTICS_S;
4043 #else
4044 #define NDIS40_MINIPORT_CHARACTERISTICS \
4045     NDIS30_MINIPORT_CHARACTERISTICS; \
4046     W_RETURN_PACKET_HANDLER     ReturnPacketHandler; \
4047     W_SEND_PACKETS_HANDLER      SendPacketsHandler; \
4048     W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
4049 typedef struct _NDIS40_MINIPORT_CHARACTERISTICS_S
4050 {
4051    NDIS40_MINIPORT_CHARACTERISTICS;
4052 } NDIS40_MINIPORT_CHARACTERISTICS_S, *PSNDIS40_MINIPORT_CHARACTERISTICS_S;
4053 #endif
4054
4055 #endif /* NDIS40 */
4056
4057 /* Extensions for NDIS 5.0 miniports */
4058
4059 #ifdef NDIS50
4060
4061 typedef NDIS_STATUS (*W_CO_CREATE_VC_HANDLER)(
4062     IN  NDIS_HANDLE     MiniportAdapterContext,
4063     IN  NDIS_HANDLE     NdisVcHandle,
4064     OUT PNDIS_HANDLE    MiniportVcContext);
4065
4066 typedef NDIS_STATUS (*W_CO_DELETE_VC_HANDLER)(
4067     IN  NDIS_HANDLE MiniportVcContext);
4068
4069 typedef NDIS_STATUS (*W_CO_ACTIVATE_VC_HANDLER)(
4070     IN      NDIS_HANDLE         MiniportVcContext,
4071     IN OUT  PCO_CALL_PARAMETERS CallParameters);
4072
4073 typedef NDIS_STATUS (*W_CO_DEACTIVATE_VC_HANDLER)(
4074     IN  NDIS_HANDLE MiniportVcContext);
4075
4076 typedef VOID (*W_CO_SEND_PACKETS_HANDLER)(
4077     IN  NDIS_HANDLE     MiniportVcContext,
4078     IN  PPNDIS_PACKET   PacketArray,
4079     IN  UINT            NumberOfPackets);
4080
4081 typedef NDIS_STATUS (*W_CO_REQUEST_HANDLER)(
4082     IN      NDIS_HANDLE     MiniportAdapterContext,
4083     IN      NDIS_HANDLE     MiniportVcContext   OPTIONAL,
4084     IN OUT  PNDIS_REQUEST   NdisRequest);
4085
4086 #ifdef _MSC_VER
4087 typedef struct _NDIS50_MINIPORT_CHARACTERISTICS
4088 {
4089     NDIS40_MINIPORT_CHARACTERISTICS;
4090
4091     W_CO_CREATE_VC_HANDLER      CoCreateVcHandler;
4092     W_CO_DELETE_VC_HANDLER          CoDeleteVcHandler;
4093     W_CO_ACTIVATE_VC_HANDLER    CoActivateVcHandler;
4094     W_CO_DEACTIVATE_VC_HANDLER  CoDeactivateVcHandler;
4095     W_CO_SEND_PACKETS_HANDLER   CoSendPacketsHandler;
4096     W_CO_REQUEST_HANDLER        CoRequestHandler;
4097 } NDIS50_MINIPORT_CHARACTERISTICS;
4098 typedef NDIS50_MINIPORT_CHARACTERISTICS NDIS50_MINIPORT_CHARACTERISTICS_S;
4099 #else
4100 #define NDIS50_MINIPORT_CHARACTERISTICS \
4101     NDIS40_MINIPORT_CHARACTERISTICS; \
4102     W_CO_CREATE_VC_HANDLER      CoCreateVcHandler; \
4103     W_CO_DELETE_VC_HANDLER          CoDeleteVcHandler; \
4104     W_CO_ACTIVATE_VC_HANDLER    CoActivateVcHandler; \
4105     W_CO_DEACTIVATE_VC_HANDLER  CoDeactivateVcHandler; \
4106     W_CO_SEND_PACKETS_HANDLER   CoSendPacketsHandler; \
4107     W_CO_REQUEST_HANDLER        CoRequestHandler;
4108 typedef struct _NDIS50_MINIPORT_CHARACTERISTICS_S
4109 {
4110    NDIS50_MINIPORT_CHARACTERISTICS;
4111 } NDIS50_MINIPORT_CHARACTERISTICS_S, *PSNDIS50_MINIPORT_CHARACTERISTICS_S;
4112 #endif
4113
4114 #endif /* NDIS50 */
4115
4116
4117 #ifndef NDIS50
4118 #ifndef NDIS40
4119 typedef struct _NDIS_MINIPORT_CHARACTERISTICS   
4120 {
4121    NDIS30_MINIPORT_CHARACTERISTICS;
4122 } NDIS_MINIPORT_CHARACTERISTICS;
4123 #else /* NDIS40 */
4124 typedef struct _NDIS_MINIPORT_CHARACTERISTICS 
4125 {
4126    NDIS40_MINIPORT_CHARACTERISTICS;
4127 } NDIS_MINIPORT_CHARACTERISTICS;
4128 #endif /* NDIS40 */
4129 #else /* NDIS50 */
4130 typedef struct _NDIS_MINIPORT_CHARACTERISTICS  
4131 {
4132    NDIS50_MINIPORT_CHARACTERISTICS;
4133 } NDIS_MINIPORT_CHARACTERISTICS;
4134 #endif /* NDIS50 */
4135
4136 typedef NDIS_MINIPORT_CHARACTERISTICS *PNDIS_MINIPORT_CHARACTERISTICS;
4137
4138
4139
4140 typedef NDIS_STATUS (*SEND_HANDLER)(
4141     IN  NDIS_HANDLE     MacBindingHandle,
4142     IN  PNDIS_PACKET    Packet);
4143
4144 typedef NDIS_STATUS (*TRANSFER_DATA_HANDLER)(
4145     IN  NDIS_HANDLE     MacBindingHandle,
4146     IN  NDIS_HANDLE     MacReceiveContext,
4147     IN  UINT            ByteOffset,
4148     IN  UINT            BytesToTransfer,
4149     OUT PNDIS_PACKET    Packet,
4150     OUT PUINT           BytesTransferred);
4151
4152 typedef NDIS_STATUS (*RESET_HANDLER)(
4153     IN  NDIS_HANDLE MacBindingHandle);
4154
4155 typedef NDIS_STATUS (*REQUEST_HANDLER)(
4156     IN  NDIS_HANDLE     MacBindingHandle,
4157     IN  PNDIS_REQUEST   NdisRequest);
4158
4159
4160
4161 /* Structures available only to full MAC drivers */
4162
4163 typedef BOOLEAN (*PNDIS_INTERRUPT_SERVICE)(
4164     IN  PVOID   InterruptContext);
4165
4166 typedef VOID (*PNDIS_DEFERRED_PROCESSING)(
4167     IN  PVOID   SystemSpecific1,
4168     IN  PVOID   InterruptContext,
4169     IN  PVOID   SystemSpecific2,
4170     IN  PVOID   SystemSpecific3);
4171
4172
4173 typedef struct _NDIS_INTERRUPT
4174 {
4175     PKINTERRUPT                 InterruptObject;
4176     KSPIN_LOCK                  DpcCountLock;
4177     PNDIS_INTERRUPT_SERVICE     MacIsr;
4178     PNDIS_DEFERRED_PROCESSING   MacDpc;
4179     KDPC                        InterruptDpc;
4180     PVOID                       InterruptContext;
4181     UCHAR                       DpcCount;
4182     BOOLEAN                     Removing;
4183     /* Used to tell when all DPCs for the adapter are completed */
4184     KEVENT                                              DpcsCompletedEvent;
4185 } NDIS_INTERRUPT, *PNDIS_INTERRUPT;
4186
4187
4188 /* NDIS adapter information */
4189
4190 typedef NDIS_STATUS (*PNDIS_ACTIVATE_CALLBACK)(
4191     IN  NDIS_HANDLE NdisAdatperHandle,
4192     IN  NDIS_HANDLE MacAdapterContext,
4193     IN  ULONG       DmaChannel);
4194
4195 typedef struct _NDIS_PORT_DESCRIPTOR
4196 {
4197     ULONG   InitialPort;
4198     ULONG   NumberOfPorts;
4199     PVOID * PortOffset;
4200 } NDIS_PORT_DESCRIPTOR, *PNDIS_PORT_DESCRIPTOR;
4201
4202 typedef struct _NDIS_ADAPTER_INFORMATION
4203 {
4204     ULONG                   DmaChannel;
4205     BOOLEAN                     Master;
4206     BOOLEAN                     Dma32BitAddresses;
4207     PNDIS_ACTIVATE_CALLBACK ActivateCallback;
4208     NDIS_INTERFACE_TYPE     AdapterType;
4209     ULONG                   PhysicalMapRegistersNeeded;
4210     ULONG                   MaximumPhysicalMapping;
4211     ULONG                   NumberOfPortDescriptors;
4212     NDIS_PORT_DESCRIPTOR    PortDescriptors[1];
4213 } NDIS_ADAPTER_INFORMATION, *PNDIS_ADAPTER_INFORMATION;
4214
4215
4216 /* Prototypes for NDIS_MAC_CHARACTERISTICS */
4217
4218 typedef NDIS_STATUS (*OPEN_ADAPTER_HANDLER)(
4219     OUT PNDIS_STATUS    OpenErrorStatus,
4220     OUT NDIS_HANDLE *   MacBindingHandle,
4221     OUT PUINT           SelectedMediumIndex,
4222     IN  PNDIS_MEDIUM    MediumArray,
4223     IN  UINT            MediumArraySize,
4224     IN  NDIS_HANDLE     NdisBindingContext,
4225     IN  NDIS_HANDLE     MacAdapterContext,
4226     IN  UINT            OpenOptions,
4227     IN  PSTRING         AddressingInformation OPTIONAL);
4228
4229 typedef NDIS_STATUS (*CLOSE_ADAPTER_HANDLER)(
4230     IN  NDIS_HANDLE MacBindingHandle);
4231
4232 typedef NDIS_STATUS (*WAN_TRANSFER_DATA_HANDLER)(
4233     VOID);
4234
4235 typedef NDIS_STATUS (*QUERY_GLOBAL_STATISTICS_HANDLER)(
4236     IN  NDIS_HANDLE     MacAdapterContext,
4237     IN  PNDIS_REQUEST   NdisRequest);
4238
4239 typedef VOID (*UNLOAD_MAC_HANDLER)(
4240     IN  NDIS_HANDLE MacMacContext);
4241
4242 typedef NDIS_STATUS (*ADD_ADAPTER_HANDLER)(
4243     IN  NDIS_HANDLE     MacMacContext,
4244     IN  NDIS_HANDLE     WrapperConfigurationContext,
4245     IN  PNDIS_STRING    AdapterName);
4246
4247 typedef VOID (*REMOVE_ADAPTER_HANDLER)(
4248     IN  NDIS_HANDLE MacAdapterContext);
4249
4250 typedef struct _NDIS_MAC_CHARACTERISTICS
4251 {
4252     UCHAR                           MajorNdisVersion;
4253     UCHAR                           MinorNdisVersion;
4254     UINT                            Reserved;
4255     OPEN_ADAPTER_HANDLER            OpenAdapterHandler;
4256     CLOSE_ADAPTER_HANDLER           CloseAdapterHandler;
4257     SEND_HANDLER                    SendHandler;
4258     TRANSFER_DATA_HANDLER           TransferDataHandler;
4259     RESET_HANDLER                   ResetHandler;
4260     REQUEST_HANDLER                 RequestHandler;
4261     QUERY_GLOBAL_STATISTICS_HANDLER QueryGlobalStatisticsHandler;
4262     UNLOAD_MAC_HANDLER              UnloadMacHandler;
4263     ADD_ADAPTER_HANDLER             AddAdapterHandler;
4264     REMOVE_ADAPTER_HANDLER          RemoveAdapterHandler;
4265     NDIS_STRING                     Name;
4266 } NDIS_MAC_CHARACTERISTICS, *PNDIS_MAC_CHARACTERISTICS;
4267
4268 typedef NDIS_MAC_CHARACTERISTICS        NDIS_WAN_MAC_CHARACTERISTICS;
4269 typedef NDIS_WAN_MAC_CHARACTERISTICS    *PNDIS_WAN_MAC_CHARACTERISTICS;
4270
4271
4272
4273 VOID
4274 EXPIMP
4275 NdisAllocateSharedMemory(
4276     IN  NDIS_HANDLE             NdisAdapterHandle,
4277     IN  ULONG                   Length,
4278     IN  BOOLEAN                 Cached,
4279     OUT PVOID                   *VirtualAddress,
4280     OUT PNDIS_PHYSICAL_ADDRESS  PhysicalAddress);
4281
4282 VOID
4283 EXPIMP
4284 NdisCompleteCloseAdapter(
4285     IN  NDIS_HANDLE NdisBindingContext,
4286     IN  NDIS_STATUS Status);
4287
4288 VOID
4289 EXPIMP
4290 NdisCompleteOpenAdapter(
4291     IN  NDIS_HANDLE NdisBindingContext,
4292     IN  NDIS_STATUS Status,
4293     IN  NDIS_STATUS OpenErrorStatus);
4294
4295 NDIS_STATUS
4296 EXPIMP
4297 NdisDeregisterAdapter(
4298     IN  NDIS_HANDLE NdisAdapterHandle);
4299
4300 VOID
4301 EXPIMP
4302 NdisDeregisterAdapterShutdownHandler(
4303     IN  NDIS_HANDLE NdisAdapterHandle);
4304
4305 VOID
4306 EXPIMP
4307 NdisFreeSharedMemory(
4308     IN  NDIS_HANDLE             NdisAdapterHandle,
4309     IN  ULONG                   Length,
4310     IN  BOOLEAN                 Cached,
4311     IN  PVOID                   VirtualAddress,
4312     IN  NDIS_PHYSICAL_ADDRESS   PhysicalAddress);
4313
4314 VOID
4315 EXPIMP
4316 NdisInitializeInterrupt(
4317     OUT     PNDIS_STATUS                Status,
4318     IN OUT  PNDIS_INTERRUPT             Interrupt,
4319     IN      NDIS_HANDLE                 NdisAdapterHandle,
4320     IN      PNDIS_INTERRUPT_SERVICE     InterruptServiceRoutine,
4321     IN      PVOID                       InterruptContext,
4322     IN      PNDIS_DEFERRED_PROCESSING   DeferredProcessingRoutine,
4323     IN      UINT                        InterruptVector,
4324     IN      UINT                        InterruptLevel,
4325     IN      BOOLEAN                     SharedInterrupt,
4326     IN      NDIS_INTERRUPT_MODE         InterruptMode);
4327
4328 VOID
4329 EXPIMP
4330 NdisMapIoSpace(
4331     OUT PNDIS_STATUS            Status,
4332     OUT PVOID                   *VirtualAddress,
4333     IN  NDIS_HANDLE             NdisAdapterHandle,
4334     IN  NDIS_PHYSICAL_ADDRESS   PhysicalAddress,
4335     IN  UINT                    Length);
4336
4337 NDIS_STATUS
4338 EXPIMP
4339 NdisRegisterAdapter(
4340     OUT PNDIS_HANDLE    NdisAdapterHandle,
4341     IN  NDIS_HANDLE     NdisMacHandle,
4342     IN  NDIS_HANDLE     MacAdapterContext,
4343     IN  NDIS_HANDLE     WrapperConfigurationContext,
4344     IN  PNDIS_STRING    AdapterName,
4345     IN  PVOID           AdapterInformation);
4346
4347 VOID
4348 EXPIMP
4349 NdisRegisterAdapterShutdownHandler(
4350     IN  NDIS_HANDLE                 NdisAdapterHandle,
4351     IN  PVOID                       ShutdownContext,
4352     IN  ADAPTER_SHUTDOWN_HANDLER    ShutdownHandler);
4353
4354 VOID
4355 EXPIMP
4356 NdisRegisterMac(
4357     OUT PNDIS_STATUS                Status,
4358     OUT PNDIS_HANDLE                NdisMacHandle,
4359     IN  NDIS_HANDLE                 NdisWrapperHandle,
4360     IN  NDIS_HANDLE                 MacMacContext,
4361     IN  PNDIS_MAC_CHARACTERISTICS   MacCharacteristics,
4362     IN  UINT                        CharacteristicsLength);
4363
4364 VOID
4365 EXPIMP
4366 NdisReleaseAdapterResources(
4367     IN  NDIS_HANDLE NdisAdapterHandle);
4368
4369 VOID
4370 EXPIMP
4371 NdisRemoveInterrupt(
4372     IN  PNDIS_INTERRUPT Interrupt);
4373
4374
4375
4376 typedef struct _NDIS_MAC_BLOCK      NDIS_MAC_BLOCK,      *PNDIS_MAC_BLOCK;
4377 typedef struct _NDIS_ADAPTER_BLOCK      NDIS_ADAPTER_BLOCK,  *PNDIS_ADAPTER_BLOCK;
4378 typedef struct _NDIS_MINIPORT_BLOCK NDIS_MINIPORT_BLOCK, *PNDIS_MINIPORT_BLOCK;
4379 typedef struct _NDIS_PROTOCOL_BLOCK NDIS_PROTOCOL_BLOCK, *PNDIS_PROTOCOL_BLOCK;
4380 typedef struct _NDIS_OPEN_BLOCK         NDIS_OPEN_BLOCK,     *PNDIS_OPEN_BLOCK;
4381 typedef struct _NDIS_M_DRIVER_BLOCK NDIS_M_DRIVER_BLOCK, *PNDIS_M_DRIVER_BLOCK;
4382 typedef struct _NDIS_AF_LIST        NDIS_AF_LIST,        *PNDIS_AF_LIST;
4383 typedef struct _NULL_FILTER         NULL_FILTER,         *PNULL_FILTER;
4384
4385
4386 typedef struct _REFERENCE
4387 {
4388     KSPIN_LOCK  SpinLock;
4389     USHORT      ReferenceCount;
4390     BOOLEAN     Closing;
4391 } REFERENCE, *PREFERENCE;
4392
4393 typedef struct _NDIS_MINIPORT_INTERRUPT
4394 {
4395     PKINTERRUPT                 InterruptObject;
4396     KSPIN_LOCK                  DpcCountLock;
4397     PVOID                       MiniportIdField;
4398     W_ISR_HANDLER               MiniportIsr;
4399     W_HANDLE_INTERRUPT_HANDLER  MiniportDpc;
4400     KDPC                        InterruptDpc;
4401     PNDIS_MINIPORT_BLOCK        Miniport;
4402
4403     UCHAR                       DpcCount;
4404     BOOLEAN                     Filler1;
4405
4406     KEVENT                      DpcsCompletedEvent;
4407
4408     BOOLEAN                     SharedInterrupt;
4409     BOOLEAN                         IsrRequested;
4410 } NDIS_MINIPORT_INTERRUPT, *PNDIS_MINIPORT_INTERRUPT;
4411
4412 typedef struct _NDIS_MINIPORT_TIMER
4413 {
4414     KTIMER                      Timer;
4415     KDPC                        Dpc;
4416     PNDIS_TIMER_FUNCTION        MiniportTimerFunction;
4417     PVOID                       MiniportTimerContext;
4418     PNDIS_MINIPORT_BLOCK        Miniport;
4419     struct _NDIS_MINIPORT_TIMER *NextDeferredTimer;
4420 } NDIS_MINIPORT_TIMER, *PNDIS_MINIPORT_TIMER;
4421
4422
4423 typedef struct _MAP_REGISTER_ENTRY
4424 {
4425     PVOID   MapRegister;
4426     BOOLEAN WriteToDevice;
4427 } MAP_REGISTER_ENTRY, *PMAP_REGISTER_ENTRY;
4428
4429
4430 typedef enum _NDIS_WORK_ITEM_TYPE
4431 {
4432     NdisWorkItemRequest,
4433     NdisWorkItemSend,
4434     NdisWorkItemReturnPackets,
4435     NdisWorkItemResetRequested,
4436     NdisWorkItemResetInProgress,
4437     NdisWorkItemHalt,
4438     NdisWorkItemSendLoopback,
4439     NdisWorkItemMiniportCallback,
4440     NdisMaxWorkItems
4441 } NDIS_WORK_ITEM_TYPE, *PNDIS_WORK_ITEM_TYPE;
4442
4443 #define NUMBER_OF_WORK_ITEM_TYPES   NdisMaxWorkItems
4444 #define NUMBER_OF_SINGLE_WORK_ITEMS 6
4445
4446 typedef struct _NDIS_MINIPORT_WORK_ITEM
4447 {
4448     SINGLE_LIST_ENTRY   Link;
4449     NDIS_WORK_ITEM_TYPE WorkItemType;
4450     PVOID               WorkItemContext;
4451     BOOLEAN             Allocated;
4452     NDIS_HANDLE         Initiator;
4453 } NDIS_MINIPORT_WORK_ITEM, *PNDIS_MINIPORT_WORK_ITEM;
4454
4455
4456 typedef struct _NDIS_BIND_PATHS
4457 {
4458     UINT        Number;
4459     NDIS_STRING Paths[1];
4460 } NDIS_BIND_PATHS, *PNDIS_BIND_PATHS;
4461
4462 typedef struct _FILTERDBS
4463 {
4464     union
4465     {
4466         PETH_FILTER     EthDB;
4467         PNULL_FILTER    NullDB;
4468     } u;
4469     PTR_FILTER          TrDB;
4470     PFDDI_FILTER        FddiDB;
4471     PARC_FILTER         ArcDB;
4472 } FILTERDBS, *PFILTERDBS;
4473
4474
4475 typedef VOID (*ETH_RCV_COMPLETE_HANDLER)(
4476     IN  PETH_FILTER Filter);
4477
4478 typedef VOID (*ETH_RCV_INDICATE_HANDLER)(
4479     IN  PETH_FILTER Filter,
4480     IN  NDIS_HANDLE MacReceiveContext,
4481     IN  PCHAR       Address,
4482     IN  PVOID       HeaderBuffer,
4483     IN  UINT        HeaderBufferSize,
4484     IN  PVOID       LookaheadBuffer,
4485     IN  UINT        LookaheadBufferSize,
4486     IN  UINT        PacketSize);
4487
4488 typedef VOID (*FDDI_RCV_COMPLETE_HANDLER)(
4489     IN  PFDDI_FILTER    Filter);
4490
4491 typedef VOID (*FDDI_RCV_INDICATE_HANDLER)(
4492     IN  PFDDI_FILTER    Filter,
4493     IN  NDIS_HANDLE     MacReceiveContext,
4494     IN  PCHAR           Address,
4495     IN  UINT            AddressLength,
4496     IN  PVOID           HeaderBuffer,
4497     IN  UINT            HeaderBufferSize,
4498     IN  PVOID           LookaheadBuffer,
4499     IN  UINT            LookaheadBufferSize,
4500     IN  UINT            PacketSize);
4501
4502 typedef VOID (*FILTER_PACKET_INDICATION_HANDLER)(
4503     IN  NDIS_HANDLE     Miniport,
4504     IN  PPNDIS_PACKET   PacketArray,
4505     IN  UINT            NumberOfPackets);
4506
4507 typedef VOID (*TR_RCV_COMPLETE_HANDLER)(
4508     IN  PTR_FILTER  Filter);
4509
4510 typedef VOID (*TR_RCV_INDICATE_HANDLER)(
4511     IN  PTR_FILTER  Filter,
4512     IN  NDIS_HANDLE MacReceiveContext,
4513     IN  PVOID       HeaderBuffer,
4514     IN  UINT        HeaderBufferSize,
4515     IN  PVOID       LookaheadBuffer,
4516     IN  UINT        LookaheadBufferSize,
4517     IN  UINT        PacketSize);
4518
4519 typedef VOID (*WAN_RCV_COMPLETE_HANDLER)(
4520     IN  NDIS_HANDLE MiniportAdapterHandle,
4521     IN  NDIS_HANDLE NdisLinkContext);
4522
4523 typedef VOID (*WAN_RCV_HANDLER)(
4524     OUT PNDIS_STATUS    Status,
4525     IN  NDIS_HANDLE     MiniportAdapterHandle,
4526     IN  NDIS_HANDLE     NdisLinkContext,
4527     IN  PUCHAR          Packet,
4528     IN  ULONG           PacketSize);
4529
4530 typedef VOID (FASTCALL *NDIS_M_DEQUEUE_WORK_ITEM)(
4531     IN  PNDIS_MINIPORT_BLOCK    Miniport,
4532     IN  NDIS_WORK_ITEM_TYPE     WorkItemType,
4533     OUT PVOID                   *WorkItemContext);
4534
4535 typedef VOID (FASTCALL *NDIS_M_PROCESS_DEFERRED)(
4536     IN  PNDIS_MINIPORT_BLOCK    Miniport);
4537
4538 typedef NDIS_STATUS (FASTCALL *NDIS_M_QUEUE_NEW_WORK_ITEM)(
4539     IN  PNDIS_MINIPORT_BLOCK    Miniport,
4540     IN  NDIS_WORK_ITEM_TYPE     WorkItemType,
4541     IN  PVOID                   WorkItemContext);
4542
4543 typedef NDIS_STATUS (FASTCALL *NDIS_M_QUEUE_WORK_ITEM)(
4544     IN  PNDIS_MINIPORT_BLOCK    Miniport,
4545     IN  NDIS_WORK_ITEM_TYPE     WorkItemType,
4546     IN  PVOID                   WorkItemContext);
4547
4548 typedef VOID (*NDIS_M_REQ_COMPLETE_HANDLER)(
4549     IN  NDIS_HANDLE MiniportAdapterHandle,
4550     IN  NDIS_STATUS Status);
4551
4552 typedef VOID (*NDIS_M_RESET_COMPLETE_HANDLER)(
4553     IN  NDIS_HANDLE MiniportAdapterHandle,
4554     IN  NDIS_STATUS Status,
4555     IN  BOOLEAN AddressingReset);
4556
4557 typedef VOID (*NDIS_M_SEND_COMPLETE_HANDLER)(
4558     IN  NDIS_HANDLE     MiniportAdapterHandle,
4559     IN  PNDIS_PACKET    Packet,
4560     IN  NDIS_STATUS     Status);
4561
4562 typedef VOID (*NDIS_M_SEND_RESOURCES_HANDLER)(
4563     IN  NDIS_HANDLE MiniportAdapterHandle);
4564
4565 typedef BOOLEAN (FASTCALL *NDIS_M_START_SENDS)(
4566     IN  PNDIS_MINIPORT_BLOCK    Miniport);
4567
4568 typedef VOID (*NDIS_M_STATUS_HANDLER)(
4569     IN  NDIS_HANDLE MiniportHandle,
4570     IN  NDIS_STATUS GeneralStatus,
4571     IN  PVOID       StatusBuffer,
4572     IN  UINT        StatusBufferSize);
4573
4574 typedef VOID (*NDIS_M_STS_COMPLETE_HANDLER)(
4575     IN  NDIS_HANDLE MiniportAdapterHandle);
4576
4577 typedef VOID (*NDIS_M_TD_COMPLETE_HANDLER)(
4578     IN  NDIS_HANDLE     MiniportAdapterHandle,
4579     IN  PNDIS_PACKET    Packet,
4580     IN  NDIS_STATUS     Status,
4581     IN  UINT            BytesTransferred);
4582
4583 typedef VOID (*NDIS_WM_SEND_COMPLETE_HANDLER)(
4584     IN  NDIS_HANDLE MiniportAdapterHandle,
4585     IN  PVOID       Packet,
4586     IN  NDIS_STATUS Status);
4587
4588
4589 #ifdef NDIS_WRAPPER
4590
4591 #define ARC_SEND_BUFFERS    8
4592 #define ARC_HEADER_SIZE     4
4593
4594 typedef struct _NDIS_ARC_BUF
4595 {
4596     NDIS_HANDLE ArcnetBufferPool;
4597     PUCHAR      ArcnetLookaheadBuffer;
4598     UINT        NumFree;
4599     ARC_BUFFER_LIST ArcnetBuffers[ARC_SEND_BUFFERS];
4600 } NDIS_ARC_BUF, *PNDIS_ARC_BUF;
4601
4602 #define NDIS_MINIPORT_WORK_QUEUE_SIZE 10
4603
4604 typedef struct _NDIS_LOG
4605 {
4606     PNDIS_MINIPORT_BLOCK    Miniport;
4607     KSPIN_LOCK              LogLock;
4608     PIRP                    Irp;
4609     UINT                    TotalSize;
4610     UINT                    CurrentSize;
4611     UINT                    InPtr;
4612     UINT                    OutPtr;
4613     UCHAR                   LogBuf[1];
4614 } NDIS_LOG, *PNDIS_LOG;
4615
4616 #endif /* NDIS_WRAPPER */
4617
4618
4619 struct _NDIS_ADAPTER_BLOCK
4620 {
4621     PDEVICE_OBJECT          DeviceObject;
4622     PNDIS_MAC_BLOCK         MacHandle;
4623     NDIS_HANDLE             MacAdapterContext;
4624     NDIS_STRING             AdapterName;
4625     PNDIS_OPEN_BLOCK        OpenQueue;
4626     PNDIS_ADAPTER_BLOCK     NextAdapter;
4627     REFERENCE               Ref;
4628     PVOID                   BusDataContext;
4629     BOOLEAN                 BeingRemoved;
4630     UCHAR                   Flags;
4631     PCM_RESOURCE_LIST       Resources;
4632     PNDIS_STRING            pAdapterInstanceName;
4633     PVOID                   WrapperContext;
4634
4635     ULONG                   BusNumber;
4636     NDIS_INTERFACE_TYPE     BusType;
4637     ULONG                   ChannelNumber;
4638     NDIS_INTERFACE_TYPE     AdapterType;
4639     BOOLEAN                 Master;
4640     UCHAR                   AssignedProcessor;
4641     ULONG                   PhysicalMapRegistersNeeded;
4642     ULONG                   MaximumPhysicalMapping;
4643     ULONG                   InitialPort;
4644     ULONG                   NumberOfPorts;
4645     PUCHAR                  InitialPortMapping;
4646     BOOLEAN                 InitialPortMapped;
4647     PUCHAR                  PortOffset;
4648     PMAP_REGISTER_ENTRY     MapRegisters;
4649
4650     KEVENT                  AllocationEvent;
4651     UINT                    CurrentMapRegister;
4652     PADAPTER_OBJECT         SystemAdapterObject;
4653 #if 0
4654 #ifdef NDIS_WRAPPER
4655     ULONG                   BusId;
4656     ULONG                   SlotNumber;
4657     NDIS_STRING             BaseName;
4658     PDEVICE_OBJECT          PhysicalDeviceObject;
4659     PDEVICE_OBJECT          NextDeviceObject;
4660     PCM_RESOURCE_LIST       AllocatedResources;
4661     PCM_RESOURCE_LIST       AllocatedResourcesTranslated;
4662     NDIS_EVENT              OpenReadyEvent;
4663     NDIS_PNP_DEVICE_STATE   PnPDeviceState;
4664     PGET_SET_DEVICE_DATA    SetBusData;
4665     PGET_SET_DEVICE_DATA    GetBusData;
4666     POID_LIST               OidList;
4667     ULONG                   PnPCapabilities;
4668 #endif /* NDIS_WRAPPER */
4669 #endif
4670 };
4671
4672
4673 struct _NDIS_MINIPORT_BLOCK
4674 {
4675     ULONG                       NullValue;
4676     PNDIS_MINIPORT_BLOCK        NextMiniport;
4677     PNDIS_M_DRIVER_BLOCK        DriverHandle;
4678     NDIS_HANDLE                 MiniportAdapterContext;
4679     UNICODE_STRING              MiniportName;
4680     PNDIS_BIND_PATHS            BindPaths;
4681     NDIS_HANDLE                 OpenQueue;
4682     REFERENCE                   Ref;
4683     NDIS_HANDLE                 DeviceContext;
4684     UCHAR                       Padding1;
4685
4686     UCHAR                       LockAcquired;
4687     UCHAR                       PmodeOpens;
4688     UCHAR                       AssignedProcessor;
4689     KSPIN_LOCK                  Lock;
4690     PNDIS_REQUEST               MediaRequest;
4691     PNDIS_MINIPORT_INTERRUPT    Interrupt;
4692     ULONG                       Flags;
4693     ULONG                       PnPFlags;
4694
4695     LIST_ENTRY                  PacketList;
4696     PNDIS_PACKET                FirstPendingPacket;
4697     PNDIS_PACKET                ReturnPacketsQueue;
4698     ULONG                       RequestBuffer;
4699     PVOID                       SetMCastBuffer;
4700     PNDIS_MINIPORT_BLOCK        PrimaryMiniport;
4701     PVOID                       WrapperContext;
4702
4703     PVOID                       BusDataContext;
4704     ULONG                       PnPCapabilities;
4705     PCM_RESOURCE_LIST           Resources;
4706     NDIS_TIMER                  WakeUpDpcTimer;
4707     UNICODE_STRING              BaseName;
4708     UNICODE_STRING              SymbolicLinkName;
4709
4710     ULONG                       CheckForHangSeconds;
4711     USHORT                      CFHangTicks;
4712     USHORT                      CFHangCurrentTick;
4713     NDIS_STATUS                 ResetStatus;
4714     NDIS_HANDLE                 ResetOpen;
4715     FILTERDBS                   FilterDbs;
4716
4717     FILTER_PACKET_INDICATION_HANDLER    PacketIndicateHandler;
4718     NDIS_M_SEND_COMPLETE_HANDLER        SendCompleteHandler;
4719     NDIS_M_SEND_RESOURCES_HANDLER       SendResourcesHandler;
4720     NDIS_M_RESET_COMPLETE_HANDLER       ResetCompleteHandler;
4721
4722     NDIS_MEDIUM                 MediaType;
4723     ULONG                       BusNumber;
4724     NDIS_INTERFACE_TYPE         BusType;
4725     NDIS_INTERFACE_TYPE         AdapterType;
4726     PDEVICE_OBJECT              DeviceObject;
4727     PDEVICE_OBJECT              PhysicalDeviceObject;
4728     PDEVICE_OBJECT              NextDeviceObject;
4729
4730     PMAP_REGISTER_ENTRY         MapRegisters;
4731     PNDIS_AF_LIST               CallMgrAfList;
4732     PVOID                       MiniportThread;
4733     PVOID                       SetInfoBuf;
4734     USHORT                      SetInfoBufLen;
4735     USHORT                      MaxSendPackets;
4736     NDIS_STATUS                 FakeStatus;
4737     PVOID                       LockHandler;
4738     PUNICODE_STRING                 pAdapterInstanceName;
4739     PADAPTER_OBJECT             SystemAdapterObject;
4740     UINT                        MacOptions;
4741     PNDIS_REQUEST               PendingRequest;
4742     UINT                        MaximumLongAddresses;
4743     UINT                        MaximumShortAddresses;
4744     UINT                        CurrentLookahead;
4745     UINT                        MaximumLookahead;
4746
4747     W_HANDLE_INTERRUPT_HANDLER  HandleInterruptHandler;
4748     W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler;
4749     W_ENABLE_INTERRUPT_HANDLER  EnableInterruptHandler;
4750     W_SEND_PACKETS_HANDLER      SendPacketsHandler;
4751     NDIS_M_START_SENDS          DeferredSendHandler;
4752
4753     ETH_RCV_INDICATE_HANDLER    EthRxIndicateHandler;
4754     TR_RCV_INDICATE_HANDLER         TrRxIndicateHandler;
4755     FDDI_RCV_INDICATE_HANDLER   FddiRxIndicateHandler;
4756
4757     ETH_RCV_COMPLETE_HANDLER    EthRxCompleteHandler;
4758     TR_RCV_COMPLETE_HANDLER         TrRxCompleteHandler;
4759     FDDI_RCV_COMPLETE_HANDLER   FddiRxCompleteHandler;
4760
4761     NDIS_M_STATUS_HANDLER       StatusHandler;
4762     NDIS_M_STS_COMPLETE_HANDLER StatusCompleteHandler;
4763     NDIS_M_TD_COMPLETE_HANDLER  TDCompleteHandler;
4764     NDIS_M_REQ_COMPLETE_HANDLER QueryCompleteHandler;
4765     NDIS_M_REQ_COMPLETE_HANDLER SetCompleteHandler;
4766
4767     NDIS_WM_SEND_COMPLETE_HANDLER   WanSendCompleteHandler;
4768     WAN_RCV_HANDLER                 WanRcvHandler;
4769     WAN_RCV_COMPLETE_HANDLER        WanRcvCompleteHandler;
4770 #if 0
4771 #ifdef NDIS_WRAPPER
4772     SINGLE_LIST_ENTRY           WorkQueue[NUMBER_OF_WORK_ITEM_TYPES];
4773     SINGLE_LIST_ENTRY           SingleWorkItems[NUMBER_OF_SINGLE_WORK_ITEMS];
4774     PNDIS_MAC_BLOCK                 FakeMac;
4775     UCHAR                       SendFlags;
4776     UCHAR                       TrResetRing;
4777     UCHAR                       ArcnetAddress;
4778
4779     union
4780     {
4781         PNDIS_ARC_BUF           ArcBuf;
4782         PVOID                   BusInterface;
4783     } u1;
4784
4785     ULONG                       ChannelNumber;
4786     PNDIS_LOG                   Log;
4787     ULONG                       BusId;
4788     ULONG                       SlotNumber;
4789     PCM_RESOURCE_LIST           AllocatedResources;
4790     PCM_RESOURCE_LIST           AllocatedResourcesTranslated;
4791     SINGLE_LIST_ENTRY           PatternList;
4792     NDIS_PNP_CAPABILITIES       PMCapabilities;
4793 #if 0
4794     DEVICE_CAPABILITIES         DeviceCaps;
4795 #endif
4796     ULONG                       WakeUpEnable;
4797 #if 0
4798     DEVICE_POWER_STATE          CurrentDeviceState;
4799 #endif
4800     PIRP                        pIrpWaitWake;
4801 #if 0
4802     SYSTEM_POWER_STATE          WaitWakeSystemState;
4803 #endif
4804     LARGE_INTEGER               VcIndex;
4805     KSPIN_LOCK                  VcCountLock;
4806     LIST_ENTRY                  WmiEnabledVcs;
4807     PNDIS_GUID                  pNdisGuidMap;
4808     PNDIS_GUID                  pCustomGuidMap;
4809     USHORT                      VcCount;
4810     USHORT                      cNdisGuidMap;
4811     USHORT                      cCustomGuidMap;
4812     USHORT                      CurrentMapRegister;
4813     PKEVENT                     AllocationEvent;
4814     USHORT                      PhysicalMapRegistersNeeded;
4815     USHORT                      SGMapRegistersNeeded;
4816     ULONG                       MaximumPhysicalMapping;
4817
4818     NDIS_TIMER                  MediaDisconnectTimer;
4819     USHORT                      MediaDisconnectTimeOut;
4820     USHORT                      InstanceNumber;
4821     NDIS_EVENT                  OpenReadyEvent;
4822     NDIS_PNP_DEVICE_STATE       PnPDeviceState;
4823     NDIS_PNP_DEVICE_STATE       OldPnPDeviceState;
4824 #if 0
4825     PGET_SET_DEVICE_DATA        SetBusData;
4826     PGET_SET_DEVICE_DATA        GetBusData;
4827 #endif
4828     POID_LIST                   OidList;
4829     KDPC                        DeferredDpc;
4830 #if 0
4831     NDIS_STATS                  NdisStats;
4832 #endif
4833     PNDIS_PACKET                IndicatedPacket[MAXIMUM_PROCESSORS];
4834     PKEVENT                         RemoveReadyEvent;
4835     PKEVENT                         AllOpensClosedEvent;
4836     PKEVENT                     AllRequestsCompletedEvent;
4837     ULONG                       InitTimeMs;
4838     NDIS_MINIPORT_WORK_ITEM     WorkItemBuffer[NUMBER_OF_SINGLE_WORK_ITEMS];
4839     PNDIS_MINIPORT_TIMER        TimerQueue;
4840         ULONG                       DriverVerifyFlags;
4841
4842     PNDIS_MINIPORT_BLOCK        NextGlobalMiniport;
4843         USHORT                      InternalResetCount;
4844     USHORT                      MiniportResetCount;
4845     USHORT                      MediaSenseConnectCount;
4846     USHORT                      MediaSenseDisconnectCount;
4847     PNDIS_PACKET                *xPackets;
4848     ULONG                       UserModeOpenReferences;
4849 #endif /* NDIS_WRAPPER */
4850 #endif
4851 };
4852
4853
4854 /* Handler prototypes for NDIS_OPEN_BLOCK */
4855
4856 typedef NDIS_STATUS (*WAN_SEND_HANDLER)(
4857     IN  NDIS_HANDLE MacBindingHandle,
4858     IN  NDIS_HANDLE LinkHandle,
4859     IN  PVOID       Packet);
4860
4861 /* NDIS 4.0 extension */
4862
4863 typedef VOID (*SEND_PACKETS_HANDLER)(
4864     IN  NDIS_HANDLE     MiniportAdapterContext,
4865     IN  PPNDIS_PACKET   PacketArray,
4866     IN  UINT            NumberOfPackets);
4867
4868
4869 struct _NDIS_OPEN_BLOCK
4870 {
4871     PNDIS_MAC_BLOCK             MacHandle;
4872     NDIS_HANDLE                 MacBindingHandle;
4873     PNDIS_ADAPTER_BLOCK         AdapterHandle;
4874     PNDIS_PROTOCOL_BLOCK        ProtocolHandle;
4875     NDIS_HANDLE                 ProtocolBindingContext;
4876     PNDIS_OPEN_BLOCK            AdapterNextOpen;
4877     PNDIS_OPEN_BLOCK            ProtocolNextOpen;
4878     PNDIS_OPEN_BLOCK            NextGlobalOpen;
4879     BOOLEAN                     Closing;
4880     BOOLEAN                         Unbinding;
4881     BOOLEAN                     NoProtRsvdOnRcvPkt;
4882     BOOLEAN                     ProcessingOpens;
4883     PNDIS_STRING                BindDeviceName;
4884     KSPIN_LOCK                  SpinLock;
4885     PNDIS_STRING                RootDeviceName;
4886
4887     union
4888     {
4889         SEND_HANDLER            SendHandler;
4890         WAN_SEND_HANDLER        WanSendHandler;
4891     } u1;
4892     TRANSFER_DATA_HANDLER       TransferDataHandler;
4893
4894     SEND_COMPLETE_HANDLER       SendCompleteHandler;
4895     TRANSFER_DATA_COMPLETE_HANDLER  TransferDataCompleteHandler;
4896     RECEIVE_HANDLER             ReceiveHandler;
4897     RECEIVE_COMPLETE_HANDLER    ReceiveCompleteHandler;
4898
4899     union
4900     {
4901         RECEIVE_HANDLER         PostNt31ReceiveHandler;
4902         WAN_RECEIVE_HANDLER     WanReceiveHandler;
4903     } u2;
4904     RECEIVE_COMPLETE_HANDLER    PostNt31ReceiveCompleteHandler;
4905
4906     RECEIVE_PACKET_HANDLER      ReceivePacketHandler;
4907     SEND_PACKETS_HANDLER        SendPacketsHandler;
4908
4909     RESET_HANDLER               ResetHandler;
4910     REQUEST_HANDLER                 RequestHandler;
4911     RESET_COMPLETE_HANDLER      ResetCompleteHandler;
4912     STATUS_HANDLER              StatusHandler;
4913     STATUS_COMPLETE_HANDLER     StatusCompleteHandler;
4914     REQUEST_COMPLETE_HANDLER    RequestCompleteHandler;
4915 };
4916
4917
4918
4919 /* Routines for NDIS miniport drivers */
4920
4921 VOID
4922 EXPIMP
4923 NdisInitializeWrapper(
4924     OUT PNDIS_HANDLE    NdisWrapperHandle,
4925     IN  PVOID           SystemSpecific1,
4926     IN  PVOID           SystemSpecific2,
4927     IN  PVOID           SystemSpecific3);
4928
4929 NDIS_STATUS
4930 EXPIMP
4931 NdisMAllocateMapRegisters(
4932     IN  NDIS_HANDLE MiniportAdapterHandle,
4933     IN  UINT        DmaChannel,
4934     IN  BOOLEAN     Dma32BitAddresses,
4935     IN  ULONG       PhysicalMapRegistersNeeded,
4936     IN  ULONG       MaximumPhysicalMapping);
4937
4938 /*
4939  * VOID NdisMArcIndicateReceive(
4940  *     IN  NDIS_HANDLE MiniportAdapterHandle,
4941  *     IN  PUCHAR      HeaderBuffer,
4942  *     IN  PUCHAR      DataBuffer,
4943  *     IN  UINT        Length);
4944  */
4945 #define NdisMArcIndicateReceive(MiniportAdapterHandle, \
4946                                 HeaderBuffer,          \
4947                                 DataBuffer,            \
4948                                 Length)                \
4949 {                                                      \
4950     ArcFilterDprIndicateReceive(                       \
4951         (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.ArcDB), \
4952         (HeaderBuffer), \
4953         (DataBuffer),   \
4954         (Length));      \
4955 }
4956
4957 /*
4958  * VOID NdisMArcIndicateReceiveComplete(
4959  *     IN  NDIS_HANDLE MiniportAdapterHandle);
4960  */
4961 #define NdisMArcIndicateReceiveComplete(MiniportAdapterHandle) \
4962 {                                                              \
4963     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->ArcRxCompleteHandler)( \
4964         ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FilterDbs.ArcDB);      \
4965 }
4966
4967 VOID
4968 EXPIMP
4969 NdisMCloseLog(
4970     IN  NDIS_HANDLE LogHandle);
4971
4972 NDIS_STATUS
4973 EXPIMP
4974 NdisMCreateLog(
4975     IN  NDIS_HANDLE     MiniportAdapterHandle,
4976     IN  UINT            Size,
4977     OUT PNDIS_HANDLE    LogHandle);
4978
4979 VOID
4980 EXPIMP
4981 NdisMDeregisterAdapterShutdownHandler(
4982     IN  NDIS_HANDLE MiniportHandle);
4983
4984 VOID
4985 EXPIMP
4986 NdisMDeregisterInterrupt(
4987     IN  PNDIS_MINIPORT_INTERRUPT    Interrupt);
4988
4989 VOID
4990 EXPIMP
4991 NdisMDeregisterIoPortRange(
4992     IN  NDIS_HANDLE MiniportAdapterHandle,
4993     IN  UINT        InitialPort,
4994     IN  UINT        NumberOfPorts,
4995     IN  PVOID       PortOffset);
4996
4997 /*
4998  * VOID NdisMEthIndicateReceive(
4999  *     IN  NDIS_HANDLE MiniportAdapterHandle,
5000  *     IN  NDIS_HANDLE MiniportReceiveContext,
5001  *     IN  PVOID       HeaderBuffer,
5002  *     IN  UINT        HeaderBufferSize,
5003  *     IN  PVOID       LookaheadBuffer,
5004  *     IN  UINT        LookaheadBufferSize,
5005  *     IN  UINT        PacketSize);
5006  */
5007 #define NdisMEthIndicateReceive(MiniportAdapterHandle,  \
5008                                 MiniportReceiveContext, \
5009                                 HeaderBuffer,           \
5010                                 HeaderBufferSize,       \
5011                                 LookaheadBuffer,        \
5012                                 LookaheadBufferSize,    \
5013                                 PacketSize)             \
5014 {                                                       \
5015     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxIndicateHandler)( \
5016         (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.u.EthDB), \
5017                 (MiniportReceiveContext), \
5018                 (HeaderBuffer),           \
5019                 (HeaderBuffer),           \
5020                 (HeaderBufferSize),       \
5021                 (LookaheadBuffer),        \
5022                 (LookaheadBufferSize),    \
5023                 (PacketSize));            \
5024 }
5025
5026 /*
5027  * VOID NdisMEthIndicateReceiveComplete(
5028  *     IN  NDIS_HANDLE MiniportAdapterHandle);
5029  */
5030 #define NdisMEthIndicateReceiveComplete(MiniportAdapterHandle) \
5031 {                                                              \
5032     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxCompleteHandler)( \
5033         ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FilterDbs.u.EthDB);    \
5034 }
5035
5036 /*
5037  * VOID NdisMFddiIndicateReceive(
5038  *     IN  NDIS_HANDLE MiniportAdapterHandle,
5039  *     IN  NDIS_HANDLE MiniportReceiveContext,
5040  *     IN  PVOID       HeaderBuffer,
5041  *     IN  UINT        HeaderBufferSize,
5042  *     IN  PVOID       LookaheadBuffer,
5043  *     IN  UINT        LookaheadBufferSize,
5044  *     IN  UINT        PacketSize);
5045  */
5046 #define NdisMFddiIndicateReceive(MiniportAdapterHandle,  \
5047                                  MiniportReceiveContext, \
5048                                  HeaderBuffer,           \
5049                                  HeaderBufferSize,       \
5050                                  LookaheadBuffer,        \
5051                                  LookaheadBufferSize,    \
5052                                  PacketSize)             \
5053 {                                                        \
5054     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxIndicateHandler)( \
5055         (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.FddiDB),   \
5056         (MiniportReceiveContext),              \
5057         (PUCHAR)(HeaderBuffer) + 1,            \
5058         (((*(PUCHAR*)(HeaderBuffer)) & 0x40) ? \
5059             FDDI_LENGTH_OF_LONG_ADDRESS :      \
5060                     FDDI_LENGTH_OF_SHORT_ADDRESS),     \
5061         (HeaderBuffer),                        \
5062         (HeaderBufferSize),                    \
5063         (LookaheadBuffer),                     \
5064         (LookaheadBufferSize),                 \
5065         (PacketSize));                         \
5066 }
5067
5068 /*
5069  * VOID NdisMFddiIndicateReceiveComplete(
5070  *     IN  NDIS_HANDLE MiniportAdapterHandle);
5071  */
5072 #define NdisMFddiIndicateReceiveComplete(MiniportAdapterHandle) \
5073 {                                                               \
5074     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxCompleteHandler)( \
5075         ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FilterDbs.FddiDB);      \
5076 }
5077
5078 VOID
5079 EXPIMP
5080 NdisMFlushLog(
5081     IN  NDIS_HANDLE LogHandle);
5082
5083 VOID
5084 EXPIMP
5085 NdisMFreeMapRegisters(
5086     IN  NDIS_HANDLE MiniportAdapterHandle);
5087
5088 VOID
5089 EXPIMP
5090 NdisMIndicateStatus(
5091     IN  NDIS_HANDLE MiniportAdapterHandle,
5092     IN  NDIS_STATUS GeneralStatus,
5093     IN  PVOID       StatusBuffer,
5094     IN  UINT        StatusBufferSize);
5095
5096 VOID
5097 EXPIMP
5098 NdisMIndicateStatusComplete(
5099     IN  NDIS_HANDLE MiniportAdapterHandle);
5100
5101 /*
5102  * VOID NdisMInitializeWrapper(
5103  *     OUT PNDIS_HANDLE    NdisWrapperHandle,
5104  *     IN  PVOID           SystemSpecific1,
5105  *     IN  PVOID           SystemSpecific2,
5106  *     IN  PVOID           SystemSpecific3);
5107  */
5108 #define NdisMInitializeWrapper(NdisWrapperHandle, \
5109                                SystemSpecific1,   \
5110                                SystemSpecific2,   \
5111                                SystemSpecific3)   \
5112     NdisInitializeWrapper((NdisWrapperHandle),    \
5113                           (SystemSpecific1),      \
5114                           (SystemSpecific2),      \
5115                           (SystemSpecific3))
5116
5117 NDIS_STATUS
5118 EXPIMP
5119 NdisMMapIoSpace(
5120     OUT PVOID *                 VirtualAddress,
5121     IN  NDIS_HANDLE             MiniportAdapterHandle,
5122     IN  NDIS_PHYSICAL_ADDRESS   PhysicalAddress,
5123     IN  UINT                    Length);
5124
5125 VOID
5126 EXPIMP
5127 NdisMQueryInformationComplete(
5128     IN  NDIS_HANDLE MiniportAdapterHandle,
5129     IN  NDIS_STATUS Status);
5130
5131 VOID
5132 EXPIMP
5133 NdisMRegisterAdapterShutdownHandler(
5134     IN  NDIS_HANDLE                 MiniportHandle,
5135     IN  PVOID                       ShutdownContext,
5136     IN  ADAPTER_SHUTDOWN_HANDLER    ShutdownHandler);
5137
5138 NDIS_STATUS
5139 EXPIMP
5140 NdisMRegisterInterrupt(
5141     OUT PNDIS_MINIPORT_INTERRUPT    Interrupt,
5142     IN  NDIS_HANDLE                 MiniportAdapterHandle,
5143     IN  UINT                        InterruptVector,
5144     IN  UINT                        InterruptLevel,
5145     IN  BOOLEAN                     RequestIsr,
5146     IN  BOOLEAN                     SharedInterrupt,
5147     IN  NDIS_INTERRUPT_MODE         InterruptMode);
5148
5149 NDIS_STATUS
5150 EXPIMP
5151 NdisMRegisterIoPortRange(
5152     OUT PVOID *     PortOffset,
5153     IN  NDIS_HANDLE MiniportAdapterHandle,
5154     IN  UINT        InitialPort,
5155     IN  UINT        NumberOfPorts);
5156
5157 NDIS_STATUS
5158 EXPIMP
5159 NdisMRegisterMiniport(
5160     IN  NDIS_HANDLE                     NdisWrapperHandle,
5161     IN  PNDIS_MINIPORT_CHARACTERISTICS  MiniportCharacteristics,
5162     IN  UINT                            CharacteristicsLength);
5163
5164
5165 #ifndef NDIS_WRAPPER
5166
5167 /*
5168  * VOID NdisMResetComplete(
5169  *     IN  NDIS_HANDLE MiniportAdapterHandle,
5170  *     IN  NDIS_STATUS Status,
5171  *     IN  BOOLEAN     AddressingReset);
5172  */
5173 #define NdisMResetComplete(MiniportAdapterHandle, \
5174                            Status,                \
5175                            AddressingReset)       \
5176 {                                                 \
5177     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->ResetCompleteHandler)( \
5178         MiniportAdapterHandle, Status, AddressingReset); \
5179 }
5180
5181 /*
5182  * VOID NdisMSendComplete(
5183  *     IN  NDIS_HANDLE     MiniportAdapterHandle,
5184  *     IN  PNDIS_PACKET    Packet,
5185  *     IN  NDIS_STATUS     Status);
5186  */
5187 #define NdisMSendComplete(MiniportAdapterHandle, \
5188                           Packet,                \
5189                           Status)                \
5190 {                                                \
5191     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendCompleteHandler)( \
5192         MiniportAdapterHandle, Packet, Status);  \
5193 }
5194
5195 /*
5196  * VOID NdisMSendResourcesAvailable(
5197  *     IN  NDIS_HANDLE MiniportAdapterHandle);
5198  */
5199 #define NdisMSendResourcesAvailable(MiniportAdapterHandle) \
5200 {                                                \
5201     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendResourcesHandler)( \
5202         MiniportAdapterHandle); \
5203 }
5204
5205 /*
5206  * VOID NdisMTransferDataComplete(
5207  *     IN  NDIS_HANDLE     MiniportAdapterHandle,
5208  *     IN  PNDIS_PACKET    Packet,
5209  *     IN  NDIS_STATUS     Status,
5210  *     IN  UINT            BytesTransferred);
5211  */
5212 #define NdisMTransferDataComplete(MiniportAdapterHandle, \
5213                                   Packet,                \
5214                                   Status,                \
5215                                   BytesTransferred)      \
5216 {                                                        \
5217     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TDCompleteHandler)( \
5218         MiniportAdapterHandle, Packet, Status, BytesTransferred)           \
5219 }
5220
5221 #endif /* NDIS_WRAPPER */
5222
5223
5224 VOID
5225 EXPIMP
5226 NdisMSetAttributes(
5227     IN  NDIS_HANDLE         MiniportAdapterHandle,
5228     IN  NDIS_HANDLE         MiniportAdapterContext,
5229     IN  BOOLEAN             BusMaster,
5230     IN  NDIS_INTERFACE_TYPE AdapterType);
5231
5232 VOID 
5233 EXPIMP
5234 NdisMSetAttributesEx(
5235     IN  NDIS_HANDLE         MiniportAdapterHandle,
5236     IN  NDIS_HANDLE         MiniportAdapterContext,
5237     IN  UINT                CheckForHangTimeInSeconds   OPTIONAL,
5238     IN  ULONG               AttributeFlags,
5239     IN  NDIS_INTERFACE_TYPE AdapterType); 
5240
5241 VOID
5242 EXPIMP
5243 NdisMSetInformationComplete(
5244     IN  NDIS_HANDLE MiniportAdapterHandle,
5245     IN  NDIS_STATUS Status);
5246
5247 VOID
5248 EXPIMP
5249 NdisMSleep(
5250     IN  ULONG   MicrosecondsToSleep);
5251
5252 BOOLEAN
5253 EXPIMP
5254 NdisMSynchronizeWithInterrupt(
5255     IN  PNDIS_MINIPORT_INTERRUPT    Interrupt,
5256     IN  PVOID                       SynchronizeFunction,
5257     IN  PVOID                       SynchronizeContext);
5258
5259 /*
5260  * VOID NdisMTrIndicateReceive(
5261  *     IN  NDIS_HANDLE MiniportAdapterHandle,
5262  *     IN  NDIS_HANDLE MiniportReceiveContext,
5263  *     IN  PVOID       HeaderBuffer,
5264  *     IN  UINT        HeaderBufferSize,
5265  *     IN  PVOID       LookaheadBuffer,
5266  *     IN  UINT        LookaheadBufferSize,
5267  *     IN  UINT        PacketSize);
5268  */
5269 #define NdisMTrIndicateReceive(MiniportAdapterHandle,  \
5270                                MiniportReceiveContext, \
5271                                HeaderBuffer,           \
5272                                HeaderBufferSize,       \
5273                                LookaheadBuffer,        \
5274                                LookaheadBufferSize,    \
5275                                PacketSize)             \
5276 {                                                      \
5277     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxIndicateHandler)( \
5278         (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.TrDB),   \
5279                 (MiniportReceiveContext), \
5280                 (HeaderBuffer),           \
5281                 (HeaderBuffer),           \
5282                 (HeaderBufferSize),       \
5283                 (LookaheadBuffer),        \
5284                 (LookaheadBufferSize),    \
5285                 (PacketSize));            \
5286 }
5287
5288 /*
5289  * VOID NdisMTrIndicateReceiveComplete(
5290  *     IN  NDIS_HANDLE  MiniportAdapterHandle);
5291  */
5292 #define NdisMTrIndicateReceiveComplete(MiniportAdapterHandle) \
5293 {                                                             \
5294     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxCompleteHandler)( \
5295         ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FilterDbs.TrDB);      \
5296 }
5297
5298 NDIS_STATUS
5299 EXPIMP
5300 NdisMWriteLogData(
5301     IN  NDIS_HANDLE LogHandle,
5302     IN  PVOID       LogBuffer,
5303     IN  UINT        LogBufferSize);
5304
5305 VOID
5306 EXPIMP
5307 NdisMQueryAdapterResources(
5308     OUT PNDIS_STATUS        Status,
5309     IN  NDIS_HANDLE         WrapperConfigurationContext,
5310     OUT PNDIS_RESOURCE_LIST ResourceList,
5311     IN  OUT PUINT           BufferSize);
5312
5313 VOID
5314 EXPIMP
5315 NdisTerminateWrapper(
5316     IN  NDIS_HANDLE NdisWrapperHandle,
5317     IN  PVOID       SystemSpecific);
5318
5319 VOID
5320 EXPIMP
5321 NdisMUnmapIoSpace(
5322     IN  NDIS_HANDLE MiniportAdapterHandle,
5323     IN  PVOID       VirtualAddress,
5324     IN  UINT        Length);
5325
5326
5327
5328 /* NDIS intermediate miniport structures */
5329
5330 typedef VOID (*W_MINIPORT_CALLBACK)(
5331     IN  NDIS_HANDLE MiniportAdapterContext,
5332     IN  PVOID       CallbackContext);
5333
5334
5335
5336 /* Routines for intermediate miniport drivers */
5337
5338 NDIS_STATUS
5339 EXPIMP
5340 NdisIMDeInitializeDeviceInstance(
5341     IN  NDIS_HANDLE NdisMiniportHandle);
5342
5343 NDIS_STATUS
5344 EXPIMP
5345 NdisIMInitializeDeviceInstance(
5346     IN  NDIS_HANDLE     DriverHandle,
5347     IN  PNDIS_STRING    DeviceInstance);
5348
5349 NDIS_STATUS
5350 EXPIMP
5351 NdisIMQueueMiniportCallback(
5352     IN  NDIS_HANDLE         MiniportAdapterHandle,
5353     IN  W_MINIPORT_CALLBACK CallbackRoutine,
5354     IN  PVOID               CallbackContext);
5355
5356 NDIS_STATUS
5357 EXPIMP
5358 NdisIMRegisterLayeredMiniport(
5359     IN  NDIS_HANDLE                     NdisWrapperHandle,
5360     IN  PNDIS_MINIPORT_CHARACTERISTICS  MiniportCharacteristics,
5361     IN  UINT                            CharacteristicsLength,
5362     OUT PNDIS_HANDLE                    DriverHandle);
5363
5364 VOID
5365 EXPIMP
5366 NdisIMRevertBack(
5367     IN  NDIS_HANDLE MiniportAdapterHandle,
5368     IN  NDIS_HANDLE SwitchHandle);
5369
5370 BOOLEAN
5371 EXPIMP
5372 NdisIMSwitchToMiniport(
5373     IN  NDIS_HANDLE     MiniportAdapterHandle,
5374     OUT PNDIS_HANDLE    SwitchHandle);
5375
5376
5377 /* Functions obsoleted by NDIS 5.0 */
5378
5379 VOID
5380 EXPIMP
5381 NdisFreeDmaChannel(
5382     IN  PNDIS_HANDLE    NdisDmaHandle);
5383
5384 VOID
5385 EXPIMP
5386 NdisFreeSharedMemory(
5387     IN NDIS_HANDLE              NdisAdapterHandle,
5388     IN ULONG                    Length,
5389     IN BOOLEAN                  Cached,
5390     IN PVOID                    VirtualAddress,
5391     IN NDIS_PHYSICAL_ADDRESS    PhysicalAddress); 
5392
5393 NDIS_STATUS
5394 EXPIMP
5395 NdisIMQueueMiniportCallback(
5396     IN  NDIS_HANDLE         MiniportAdapterHandle,
5397     IN  W_MINIPORT_CALLBACK CallbackRoutine,
5398     IN  PVOID               CallbackContext);
5399
5400 VOID
5401 EXPIMP
5402 NdisIMRevertBack(
5403     IN  NDIS_HANDLE MiniportAdapterHandle,
5404     IN  NDIS_HANDLE SwitchHandle);
5405
5406 BOOLEAN
5407 EXPIMP
5408 NdisIMSwitchToMiniport(
5409     IN  NDIS_HANDLE     MiniportAdapterHandle,
5410     OUT PNDIS_HANDLE    SwitchHandle);
5411
5412 VOID
5413 EXPIMP
5414 NdisSetupDmaTransfer(
5415     OUT PNDIS_STATUS    Status,
5416     IN  PNDIS_HANDLE    NdisDmaHandle,
5417     IN  PNDIS_BUFFER    Buffer,
5418     IN  ULONG           Offset,
5419     IN  ULONG           Length,
5420     IN  BOOLEAN         WriteToDevice);
5421
5422 NTSTATUS
5423 EXPIMP
5424 NdisUpcaseUnicodeString(
5425     OUT PUNICODE_STRING DestinationString,  
5426     IN  PUNICODE_STRING SourceString);
5427
5428 VOID
5429 EXPIMP
5430 NdisUpdateSharedMemory(
5431     IN  NDIS_HANDLE             NdisAdapterHandle,
5432     IN  ULONG                   Length,
5433     IN  PVOID                   VirtualAddress,
5434     IN  NDIS_PHYSICAL_ADDRESS   PhysicalAddress);
5435
5436
5437 /* Routines for NDIS protocol drivers */
5438
5439 #if BINARY_COMPATIBLE
5440
5441 VOID
5442 EXPIMP
5443 NdisRequest(
5444     OUT PNDIS_STATUS    Status,
5445     IN  NDIS_HANDLE     NdisBindingHandle,
5446     IN  PNDIS_REQUEST   NdisRequest);
5447
5448 VOID
5449 EXPIMP
5450 NdisReset(
5451     OUT PNDIS_STATUS    Status,
5452     IN  NDIS_HANDLE     NdisBindingHandle);
5453
5454 VOID
5455 EXPIMP
5456 NdisSend(
5457     OUT PNDIS_STATUS    Status,
5458     IN  NDIS_HANDLE     NdisBindingHandle,
5459     IN  PNDIS_PACKET    Packet);
5460
5461 VOID
5462 EXPIMP
5463 NdisSendPackets(
5464     IN  NDIS_HANDLE     NdisBindingHandle,
5465     IN  PPNDIS_PACKET   PacketArray,
5466     IN  UINT            NumberOfPackets);
5467
5468 VOID
5469 EXPIMP
5470 NdisTransferData(
5471     OUT PNDIS_STATUS        Status,
5472     IN  NDIS_HANDLE         NdisBindingHandle,
5473     IN  NDIS_HANDLE         MacReceiveContext,
5474     IN  UINT                ByteOffset,
5475     IN  UINT                BytesToTransfer,
5476     IN  OUT PNDIS_PACKET    Packet,
5477     OUT PUINT               BytesTransferred);
5478
5479 #else /* BINARY_COMPATIBLE */
5480
5481 #define NdisRequest(Status,            \
5482                     NdisBindingHandle, \
5483                     NdisRequest)       \
5484 {                                      \
5485     *(Status) = (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->RequestHandler)(         \
5486         ((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacBindingHandle, (NdisRequest)); \
5487 }
5488
5489 #define NdisReset(Status,            \
5490                   NdisBindingHandle) \
5491 {                                    \
5492     *(Status) = (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->ResetHandler)( \
5493         ((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacBindingHandle);      \
5494 }
5495
5496 #define NdisSend(Status,            \
5497                  NdisBindingHandle, \
5498                  Packet)            \
5499 {                                   \
5500     *(Status) = (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->u1.SendHandler)(    \
5501         ((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacBindingHandle, (Packet)); \
5502 }
5503
5504 #define NdisSendPackets(NdisBindingHandle, \
5505                         PacketArray,       \
5506                         NumberOfPackets)   \
5507 {                                          \
5508     (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->SendPacketsHandler)( \
5509         (PNDIS_OPEN_BLOCK)(NdisBindingHandle), (PacketArray), (NumberOfPackets)); \
5510 }
5511
5512 #define NdisTransferData(Status,           \
5513                         NdisBindingHandle, \
5514                         MacReceiveContext, \
5515                         ByteOffset,        \
5516                         BytesToTransfer,   \
5517                         Packet,            \
5518                         BytesTransferred)  \
5519 {                                          \
5520     *(Status) = (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->TransferDataHandler)( \
5521         ((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacBindingHandle,              \
5522         (MacReceiveContext), \
5523         (ByteOffset),        \
5524         (BytesToTransfer),   \
5525         (Packet),            \
5526         (BytesTransferred)); \
5527 }
5528
5529 #endif /* BINARY_COMPATIBLE */
5530
5531
5532 VOID
5533 EXPIMP
5534 NdisCloseAdapter(
5535     OUT PNDIS_STATUS    Status,
5536     IN  NDIS_HANDLE     NdisBindingHandle);
5537
5538 VOID
5539 EXPIMP
5540 NdisCompleteBindAdapter(
5541     IN  NDIS_HANDLE BindAdapterContext,
5542     IN  NDIS_STATUS Status,
5543     IN  NDIS_STATUS OpenStatus);
5544
5545 VOID
5546 EXPIMP
5547 NdisCompleteUnbindAdapter(
5548     IN  NDIS_HANDLE UnbindAdapterContext,
5549     IN  NDIS_STATUS Status);
5550
5551 VOID
5552 EXPIMP
5553 NdisDeregisterProtocol(
5554     OUT PNDIS_STATUS    Status,
5555     IN  NDIS_HANDLE     NdisProtocolHandle);
5556
5557 VOID
5558 EXPIMP
5559 NdisOpenAdapter(
5560     OUT PNDIS_STATUS    Status,
5561     OUT PNDIS_STATUS    OpenErrorStatus,
5562     OUT PNDIS_HANDLE    NdisBindingHandle,
5563     OUT PUINT           SelectedMediumIndex,
5564     IN  PNDIS_MEDIUM    MediumArray,
5565     IN  UINT            MediumArraySize,
5566     IN  NDIS_HANDLE     NdisProtocolHandle,
5567     IN  NDIS_HANDLE     ProtocolBindingContext,
5568     IN  PNDIS_STRING    AdapterName,
5569     IN  UINT            OpenOptions,
5570     IN  PSTRING         AddressingInformation);
5571
5572 VOID
5573 EXPIMP
5574 NdisOpenProtocolConfiguration(
5575     OUT PNDIS_STATUS    Status,
5576     OUT PNDIS_HANDLE    ConfigurationHandle,
5577     IN  PNDIS_STRING    ProtocolSection);
5578
5579 NDIS_STATUS
5580 EXPIMP
5581 NdisQueryReceiveInformation(
5582     IN  NDIS_HANDLE NdisBindingHandle,
5583     IN  NDIS_HANDLE MacContext,
5584     OUT PLONGLONG   TimeSent            OPTIONAL,
5585     OUT PLONGLONG   TimeReceived        OPTIONAL,
5586     IN  PUCHAR      Buffer,
5587     IN  UINT        BufferSize,
5588     OUT PUINT       SizeNeeded);
5589
5590 VOID
5591 EXPIMP
5592 NdisRegisterProtocol(
5593     OUT PNDIS_STATUS                    Status,
5594     OUT PNDIS_HANDLE                    NdisProtocolHandle,
5595     IN  PNDIS_PROTOCOL_CHARACTERISTICS  ProtocolCharacteristics,
5596     IN  UINT                            CharacteristicsLength);
5597
5598 VOID
5599 EXPIMP
5600 NdisReturnPackets(
5601     IN  PNDIS_PACKET    *PacketsToReturn,
5602     IN  UINT            NumberOfPackets);
5603
5604 #ifdef __cplusplus
5605 };
5606 #endif /* __cplusplus */
5607
5608 #endif /* __NDIS_H */
5609
5610 /* EOF */