Fixed compile issues with network code
[reactos.git] / reactos / 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 #define UNALIGNED
38
39
40 /* The NDIS library export functions. NDIS miniport drivers import functions */
41 #ifdef NDIS_WRAPPER
42
43 #ifdef _MSC_VER
44 #define EXPIMP __declspec(dllexport)
45 #else
46 #define EXPIMP STDCALL
47 #endif
48
49 #else /* NDIS_WRAPPER */
50
51 #ifdef _MSC_VER
52 #define EXPIMP __declspec(dllimport)
53 #else
54 #define EXPIMP STDCALL
55 #endif
56
57 #endif /* NDIS_WRAPPER */
58
59
60
61 #ifdef NDIS_MINIPORT_DRIVER
62
63 #include "miniport.h"
64
65 #else /* NDIS_MINIPORT_DRIVER */
66
67 #ifdef _MSC_VER
68 #include <ntddk.h>
69
70 typedef ULONG ULONG_PTR, *PULONG_PTR;
71
72 #else /* _MSC_VER */
73 #include <ddk/ntddk.h>
74
75 /* FIXME: Missed some definitions in there */
76
77 typedef struct _DMA_CONFIGURATION_BYTE0
78 {
79 UCHAR Channel:3;
80 UCHAR Reserved:3;
81 UCHAR Shared:1;
82 UCHAR MoreEntries:1;
83 } DMA_CONFIGURATION_BYTE0;
84
85 typedef struct _DMA_CONFIGURATION_BYTE1
86 {
87 UCHAR Reserved0:2;
88 UCHAR TransferSize:2;
89 UCHAR Timing:2;
90 UCHAR Reserved1:2;
91 } DMA_CONFIGURATION_BYTE1;
92
93
94 typedef struct _CM_MCA_POS_DATA
95 {
96 USHORT AdapterId;
97 UCHAR PosData1;
98 UCHAR PosData2;
99 UCHAR PosData3;
100 UCHAR PosData4;
101 } CM_MCA_POS_DATA, *PCM_MCA_POS_DATA;
102
103 typedef struct _EISA_MEMORY_TYPE
104 {
105 UCHAR ReadWrite:1;
106 UCHAR Cached:1;
107 UCHAR Reserved0:1;
108 UCHAR Type:2;
109 UCHAR Shared:1;
110 UCHAR Reserved1:1;
111 UCHAR MoreEntries:1;
112 } EISA_MEMORY_TYPE, *PEISA_MEMORY_TYPE;
113
114 typedef struct _EISA_MEMORY_CONFIGURATION
115 {
116 EISA_MEMORY_TYPE ConfigurationByte;
117 UCHAR DataSize;
118 USHORT AddressLowWord;
119 UCHAR AddressHighByte;
120 USHORT MemorySize;
121 } EISA_MEMORY_CONFIGURATION, *PEISA_MEMORY_CONFIGURATION;
122
123
124 typedef struct _EISA_IRQ_DESCRIPTOR
125 {
126 UCHAR Interrupt:4;
127 UCHAR Reserved:1;
128 UCHAR LevelTriggered:1;
129 UCHAR Shared:1;
130 UCHAR MoreEntries:1;
131 } EISA_IRQ_DESCRIPTOR, *PEISA_IRQ_DESCRIPTOR;
132
133 typedef struct _EISA_IRQ_CONFIGURATION
134 {
135 EISA_IRQ_DESCRIPTOR ConfigurationByte;
136 UCHAR Reserved;
137 } EISA_IRQ_CONFIGURATION, *PEISA_IRQ_CONFIGURATION;
138
139 typedef struct _EISA_DMA_CONFIGURATION
140 {
141 DMA_CONFIGURATION_BYTE0 ConfigurationByte0;
142 DMA_CONFIGURATION_BYTE1 ConfigurationByte1;
143 } EISA_DMA_CONFIGURATION, *PEISA_DMA_CONFIGURATION;
144
145
146 typedef struct _EISA_PORT_DESCRIPTOR
147 {
148 UCHAR NumberPorts:5;
149 UCHAR Reserved:1;
150 UCHAR Shared:1;
151 UCHAR MoreEntries:1;
152 } EISA_PORT_DESCRIPTOR, *PEISA_PORT_DESCRIPTOR;
153
154 typedef struct _EISA_PORT_CONFIGURATION
155 {
156 EISA_PORT_DESCRIPTOR Configuration;
157 USHORT PortAddress;
158 } EISA_PORT_CONFIGURATION, *PEISA_PORT_CONFIGURATION;
159
160 typedef struct _CM_EISA_SLOT_INFORMATION
161 {
162 UCHAR ReturnCode;
163 UCHAR ReturnFlags;
164 UCHAR MajorRevision;
165 UCHAR MinorRevision;
166 USHORT Checksum;
167 UCHAR NumberFunctions;
168 UCHAR FunctionInformation;
169 ULONG CompressedId;
170 } CM_EISA_SLOT_INFORMATION, *PCM_EISA_SLOT_INFORMATION;
171
172 typedef struct _CM_EISA_FUNCTION_INFORMATION
173 {
174 ULONG CompressedId;
175 UCHAR IdSlotFlags1;
176 UCHAR IdSlotFlags2;
177 UCHAR MinorRevision;
178 UCHAR MajorRevision;
179 UCHAR Selections[26];
180 UCHAR FunctionFlags;
181 UCHAR TypeString[80];
182 EISA_MEMORY_CONFIGURATION EisaMemory[9];
183 EISA_IRQ_CONFIGURATION EisaIrq[7];
184 EISA_DMA_CONFIGURATION EisaDma[4];
185 EISA_PORT_CONFIGURATION EisaPort[20];
186 UCHAR InitializationData[60];
187 } CM_EISA_FUNCTION_INFORMATION, *PCM_EISA_FUNCTION_INFORMATION;
188
189 #endif /* _MSC_VER */
190
191 /* FIXME: Missed some definitions in there */
192
193 typedef CONST CHAR *PCSTR;
194
195 /* Could be defined in tdi.h */
196 #ifndef __TDI_H
197 typedef signed int INT, *PINT;
198 #endif /* __TDI_H */
199
200 #endif /* NDIS_MINIPORT_DRIVER */
201
202 #include "netevent.h"
203 #include "ndisoid.h"
204
205
206
207 /* More types */
208
209 typedef ULONG ULONG_PTR, *PULONG_PTR;
210
211
212 #if defined(NDIS_MINIPORT_DRIVER) || !defined(_MSC_VER)
213
214 typedef struct _GUID {
215 ULONG Data1;
216 USHORT Data2;
217 USHORT Data3;
218 UCHAR Data4[8];
219 } GUID;
220
221 #endif /* NDIS_MINIPORT_DRIVER || _MSC_VER */
222
223
224 /* NDIS base types */
225
226 typedef struct _NDIS_SPIN_LOCK
227 {
228 KSPIN_LOCK SpinLock;
229 KIRQL OldIrql;
230 } NDIS_SPIN_LOCK, * PNDIS_SPIN_LOCK;
231
232 typedef struct _NDIS_EVENT
233 {
234 KEVENT Event;
235 } NDIS_EVENT, *PNDIS_EVENT;
236
237 typedef PVOID NDIS_HANDLE, *PNDIS_HANDLE;
238 typedef int NDIS_STATUS, *PNDIS_STATUS;
239
240 typedef UNICODE_STRING NDIS_STRING, *PNDIS_STRING;
241
242 typedef PCSTR NDIS_ANSI_STRING, *PNDIS_ANSI_STRING;
243
244 typedef MDL NDIS_BUFFER, *PNDIS_BUFFER;
245
246 /* NDIS_STATUS constants */
247 #define NDIS_STATUS_SUCCESS ((NDIS_STATUS)STATUS_SUCCESS)
248 #define NDIS_STATUS_PENDING ((NDIS_STATUS)STATUS_PENDING)
249 #define NDIS_STATUS_NOT_RECOGNIZED ((NDIS_STATUS)0x00010001L)
250 #define NDIS_STATUS_NOT_COPIED ((NDIS_STATUS)0x00010002L)
251 #define NDIS_STATUS_NOT_ACCEPTED ((NDIS_STATUS)0x00010003L)
252 #define NDIS_STATUS_CALL_ACTIVE ((NDIS_STATUS)0x00010007L)
253
254 #define NDIS_STATUS_ONLINE ((NDIS_STATUS)0x40010003L)
255 #define NDIS_STATUS_RESET_START ((NDIS_STATUS)0x40010004L)
256 #define NDIS_STATUS_RESET_END ((NDIS_STATUS)0x40010005L)
257 #define NDIS_STATUS_RING_STATUS ((NDIS_STATUS)0x40010006L)
258 #define NDIS_STATUS_CLOSED ((NDIS_STATUS)0x40010007L)
259 #define NDIS_STATUS_WAN_LINE_UP ((NDIS_STATUS)0x40010008L)
260 #define NDIS_STATUS_WAN_LINE_DOWN ((NDIS_STATUS)0x40010009L)
261 #define NDIS_STATUS_WAN_FRAGMENT ((NDIS_STATUS)0x4001000AL)
262 #define NDIS_STATUS_MEDIA_CONNECT ((NDIS_STATUS)0x4001000BL)
263 #define NDIS_STATUS_MEDIA_DISCONNECT ((NDIS_STATUS)0x4001000CL)
264 #define NDIS_STATUS_HARDWARE_LINE_UP ((NDIS_STATUS)0x4001000DL)
265 #define NDIS_STATUS_HARDWARE_LINE_DOWN ((NDIS_STATUS)0x4001000EL)
266 #define NDIS_STATUS_INTERFACE_UP ((NDIS_STATUS)0x4001000FL)
267 #define NDIS_STATUS_INTERFACE_DOWN ((NDIS_STATUS)0x40010010L)
268 #define NDIS_STATUS_MEDIA_BUSY ((NDIS_STATUS)0x40010011L)
269 #define NDIS_STATUS_WW_INDICATION ((NDIS_STATUS)0x40010012L)
270 #define NDIS_STATUS_TAPI_INDICATION ((NDIS_STATUS)0x40010080L)
271
272 #define NDIS_STATUS_NOT_RESETTABLE ((NDIS_STATUS)0x80010001L)
273 #define NDIS_STATUS_SOFT_ERRORS ((NDIS_STATUS)0x80010003L)
274 #define NDIS_STATUS_HARD_ERRORS ((NDIS_STATUS)0x80010004L)
275 #define NDIS_STATUS_BUFFER_OVERFLOW ((NDIS_STATUS)STATUS_BUFFER_OVERFLOW)
276
277 #define NDIS_STATUS_FAILURE ((NDIS_STATUS)STATUS_UNSUCCESSFUL)
278 #define NDIS_STATUS_RESOURCES ((NDIS_STATUS)STATUS_INSUFFICIENT_RESOURCES)
279 #define NDIS_STATUS_CLOSING ((NDIS_STATUS)0xC0010002L)
280 #define NDIS_STATUS_BAD_VERSION ((NDIS_STATUS)0xC0010004L)
281 #define NDIS_STATUS_BAD_CHARACTERISTICS ((NDIS_STATUS)0xC0010005L)
282 #define NDIS_STATUS_ADAPTER_NOT_FOUND ((NDIS_STATUS)0xC0010006L)
283 #define NDIS_STATUS_OPEN_FAILED ((NDIS_STATUS)0xC0010007L)
284 #define NDIS_STATUS_DEVICE_FAILED ((NDIS_STATUS)0xC0010008L)
285 #define NDIS_STATUS_MULTICAST_FULL ((NDIS_STATUS)0xC0010009L)
286 #define NDIS_STATUS_MULTICAST_EXISTS ((NDIS_STATUS)0xC001000AL)
287 #define NDIS_STATUS_MULTICAST_NOT_FOUND ((NDIS_STATUS)0xC001000BL)
288 #define NDIS_STATUS_REQUEST_ABORTED ((NDIS_STATUS)0xC001000CL)
289 #define NDIS_STATUS_RESET_IN_PROGRESS ((NDIS_STATUS)0xC001000DL)
290 #define NDIS_STATUS_CLOSING_INDICATING ((NDIS_STATUS)0xC001000EL)
291 #define NDIS_STATUS_NOT_SUPPORTED ((NDIS_STATUS)STATUS_NOT_SUPPORTED)
292 #define NDIS_STATUS_INVALID_PACKET ((NDIS_STATUS)0xC001000FL)
293 #define NDIS_STATUS_OPEN_LIST_FULL ((NDIS_STATUS)0xC0010010L)
294 #define NDIS_STATUS_ADAPTER_NOT_READY ((NDIS_STATUS)0xC0010011L)
295 #define NDIS_STATUS_ADAPTER_NOT_OPEN ((NDIS_STATUS)0xC0010012L)
296 #define NDIS_STATUS_NOT_INDICATING ((NDIS_STATUS)0xC0010013L)
297 #define NDIS_STATUS_INVALID_LENGTH ((NDIS_STATUS)0xC0010014L)
298 #define NDIS_STATUS_INVALID_DATA ((NDIS_STATUS)0xC0010015L)
299 #define NDIS_STATUS_BUFFER_TOO_SHORT ((NDIS_STATUS)0xC0010016L)
300 #define NDIS_STATUS_INVALID_OID ((NDIS_STATUS)0xC0010017L)
301 #define NDIS_STATUS_ADAPTER_REMOVED ((NDIS_STATUS)0xC0010018L)
302 #define NDIS_STATUS_UNSUPPORTED_MEDIA ((NDIS_STATUS)0xC0010019L)
303 #define NDIS_STATUS_GROUP_ADDRESS_IN_USE ((NDIS_STATUS)0xC001001AL)
304 #define NDIS_STATUS_FILE_NOT_FOUND ((NDIS_STATUS)0xC001001BL)
305 #define NDIS_STATUS_ERROR_READING_FILE ((NDIS_STATUS)0xC001001CL)
306 #define NDIS_STATUS_ALREADY_MAPPED ((NDIS_STATUS)0xC001001DL)
307 #define NDIS_STATUS_RESOURCE_CONFLICT ((NDIS_STATUS)0xC001001EL)
308 #define NDIS_STATUS_NO_CABLE ((NDIS_STATUS)0xC001001FL)
309
310 #define NDIS_STATUS_INVALID_SAP ((NDIS_STATUS)0xC0010020L)
311 #define NDIS_STATUS_SAP_IN_USE ((NDIS_STATUS)0xC0010021L)
312 #define NDIS_STATUS_INVALID_ADDRESS ((NDIS_STATUS)0xC0010022L)
313 #define NDIS_STATUS_VC_NOT_ACTIVATED ((NDIS_STATUS)0xC0010023L)
314 #define NDIS_STATUS_DEST_OUT_OF_ORDER ((NDIS_STATUS)0xC0010024L)
315 #define NDIS_STATUS_VC_NOT_AVAILABLE ((NDIS_STATUS)0xC0010025L)
316 #define NDIS_STATUS_CELLRATE_NOT_AVAILABLE ((NDIS_STATUS)0xC0010026L)
317 #define NDIS_STATUS_INCOMPATABLE_QOS ((NDIS_STATUS)0xC0010027L)
318 #define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED ((NDIS_STATUS)0xC0010028L)
319 #define NDIS_STATUS_NO_ROUTE_TO_DESTINATION ((NDIS_STATUS)0xC0010029L)
320
321 #define NDIS_STATUS_TOKEN_RING_OPEN_ERROR ((NDIS_STATUS)0xC0011000L)
322
323
324 /* NDIS error codes for error logging */
325
326 #define NDIS_ERROR_CODE ULONG
327
328 #define NDIS_ERROR_CODE_RESOURCE_CONFLICT EVENT_NDIS_RESOURCE_CONFLICT
329 #define NDIS_ERROR_CODE_OUT_OF_RESOURCES EVENT_NDIS_OUT_OF_RESOURCE
330 #define NDIS_ERROR_CODE_HARDWARE_FAILURE EVENT_NDIS_HARDWARE_FAILURE
331 #define NDIS_ERROR_CODE_ADAPTER_NOT_FOUND EVENT_NDIS_ADAPTER_NOT_FOUND
332 #define NDIS_ERROR_CODE_INTERRUPT_CONNECT EVENT_NDIS_INTERRUPT_CONNECT
333 #define NDIS_ERROR_CODE_DRIVER_FAILURE EVENT_NDIS_DRIVER_FAILURE
334 #define NDIS_ERROR_CODE_BAD_VERSION EVENT_NDIS_BAD_VERSION
335 #define NDIS_ERROR_CODE_TIMEOUT EVENT_NDIS_TIMEOUT
336 #define NDIS_ERROR_CODE_NETWORK_ADDRESS EVENT_NDIS_NETWORK_ADDRESS
337 #define NDIS_ERROR_CODE_UNSUPPORTED_CONFIGURATION EVENT_NDIS_UNSUPPORTED_CONFIGURATION
338 #define NDIS_ERROR_CODE_INVALID_VALUE_FROM_ADAPTER EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER
339 #define NDIS_ERROR_CODE_MISSING_CONFIGURATION_PARAMETER EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER
340 #define NDIS_ERROR_CODE_BAD_IO_BASE_ADDRESS EVENT_NDIS_BAD_IO_BASE_ADDRESS
341 #define NDIS_ERROR_CODE_RECEIVE_SPACE_SMALL EVENT_NDIS_RECEIVE_SPACE_SMALL
342 #define NDIS_ERROR_CODE_ADAPTER_DISABLED EVENT_NDIS_ADAPTER_DISABLED
343
344
345 /* Memory allocation flags. Used by Ndis(Allocate|Free)Memory */
346 #define NDIS_MEMORY_CONTIGUOUS 0x00000001
347 #define NDIS_MEMORY_NONCACHED 0x00000002
348
349 /* NIC attribute flags. Used by NdisMSetAttributes(Ex) */
350 #define NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT 0x00000001
351 #define NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT 0x00000002
352 #define NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS 0x00000004
353 #define NDIS_ATTRIBUTE_BUS_MASTER 0x00000008
354 #define NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER 0x00000010
355
356
357
358 #define MAXIMUM_PROCESSORS 32
359
360
361
362 /* Lock */
363
364 typedef union _NDIS_RW_LOCK_REFCOUNT
365 {
366 UINT RefCount;
367 UCHAR cacheLine[16];
368 } NDIS_RW_LOCK_REFCOUNT;
369
370 typedef struct _NDIS_RW_LOCK
371 {
372 union
373 {
374 struct
375 {
376 KSPIN_LOCK SpinLock;
377 PVOID Context;
378 };
379 UCHAR Reserved[16];
380 };
381
382 NDIS_RW_LOCK_REFCOUNT RefCount[MAXIMUM_PROCESSORS];
383 } NDIS_RW_LOCK, *PNDIS_RW_LOCK;
384
385 typedef struct _LOCK_STATE
386 {
387 USHORT LockState;
388 KIRQL OldIrql;
389 } LOCK_STATE, *PLOCK_STATE;
390
391
392
393 /* Timer */
394
395 typedef VOID (*PNDIS_TIMER_FUNCTION)(
396 IN PVOID SystemSpecific1,
397 IN PVOID FunctionContext,
398 IN PVOID SystemSpecific2,
399 IN PVOID SystemSpecific3);
400
401 typedef struct _NDIS_TIMER
402 {
403 KTIMER Timer;
404 KDPC Dpc;
405 } NDIS_TIMER, *PNDIS_TIMER;
406
407
408
409 /* Hardware */
410
411 typedef CM_MCA_POS_DATA NDIS_MCA_POS_DATA, *PNDIS_MCA_POS_DATA;
412 typedef CM_EISA_SLOT_INFORMATION NDIS_EISA_SLOT_INFORMATION, *PNDIS_EISA_SLOT_INFORMATION;
413 typedef CM_EISA_FUNCTION_INFORMATION NDIS_EISA_FUNCTION_INFORMATION, *PNDIS_EISA_FUNCTION_INFORMATION;
414 typedef CM_PARTIAL_RESOURCE_LIST NDIS_RESOURCE_LIST, *PNDIS_RESOURCE_LIST;
415
416 /* Hardware status codes (OID_GEN_HARDWARE_STATUS) */
417 typedef enum _NDIS_HARDWARE_STATUS
418 {
419 NdisHardwareStatusReady,
420 NdisHardwareStatusInitializing,
421 NdisHardwareStatusReset,
422 NdisHardwareStatusClosing,
423 NdisHardwareStatusNotReady
424 } NDIS_HARDWARE_STATUS, *PNDIS_HARDWARE_STATUS;
425
426 /* OID_GEN_GET_TIME_CAPS */
427 typedef struct _GEN_GET_TIME_CAPS
428 {
429 ULONG Flags;
430 ULONG ClockPrecision;
431 } GEN_GET_TIME_CAPS, *PGEN_GET_TIME_CAPS;
432
433 /* Flag bits */
434 #define READABLE_LOCAL_CLOCK 0x00000001
435 #define CLOCK_NETWORK_DERIVED 0x00000002
436 #define CLOCK_PRECISION 0x00000004
437 #define RECEIVE_TIME_INDICATION_CAPABLE 0x00000008
438 #define TIMED_SEND_CAPABLE 0x00000010
439 #define TIME_STAMP_CAPABLE 0x00000020
440
441 /* OID_GEN_GET_NETCARD_TIME */
442 typedef struct _GEN_GET_NETCARD_TIME
443 {
444 ULONGLONG ReadTime;
445 } GEN_GET_NETCARD_TIME, *PGEN_GET_NETCARD_TIME;
446
447 /* NDIS driver medium (OID_GEN_MEDIA_SUPPORTED / OID_GEN_MEDIA_IN_USE) */
448 typedef enum _NDIS_MEDIUM
449 {
450 NdisMedium802_3,
451 NdisMedium802_5,
452 NdisMediumFddi,
453 NdisMediumWan,
454 NdisMediumLocalTalk,
455 NdisMediumDix, /* Defined for convenience, not a real medium */
456 NdisMediumArcnetRaw,
457 NdisMediumArcnet878_2,
458 NdisMediumAtm,
459 NdisMediumWirelessWan,
460 NdisMediumIrda,
461 NdisMediumBpc,
462 NdisMediumCoWan,
463 NdisMedium1394,
464 NdisMediumMax
465 } NDIS_MEDIUM, *PNDIS_MEDIUM;
466
467 /* NDIS packet filter bits (OID_GEN_CURRENT_PACKET_FILTER) */
468 #define NDIS_PACKET_TYPE_DIRECTED 0x00000001
469 #define NDIS_PACKET_TYPE_MULTICAST 0x00000002
470 #define NDIS_PACKET_TYPE_ALL_MULTICAST 0x00000004
471 #define NDIS_PACKET_TYPE_BROADCAST 0x00000008
472 #define NDIS_PACKET_TYPE_SOURCE_ROUTING 0x00000010
473 #define NDIS_PACKET_TYPE_PROMISCUOUS 0x00000020
474 #define NDIS_PACKET_TYPE_SMT 0x00000040
475 #define NDIS_PACKET_TYPE_ALL_LOCAL 0x00000080
476 #define NDIS_PACKET_TYPE_GROUP 0x00001000
477 #define NDIS_PACKET_TYPE_ALL_FUNCTIONAL 0x00002000
478 #define NDIS_PACKET_TYPE_FUNCTIONAL 0x00004000
479 #define NDIS_PACKET_TYPE_MAC_FRAME 0x00008000
480
481 /* NDIS protocol option bits (OID_GEN_PROTOCOL_OPTIONS) */
482 #define NDIS_PROT_OPTION_ESTIMATED_LENGTH 0x00000001
483 #define NDIS_PROT_OPTION_NO_LOOPBACK 0x00000002
484 #define NDIS_PROT_OPTION_NO_RSVD_ON_RCVPKT 0x00000004
485
486 /* NDIS MAC option bits (OID_GEN_MAC_OPTIONS) */
487 #define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA 0x00000001
488 #define NDIS_MAC_OPTION_RECEIVE_SERIALIZED 0x00000002
489 #define NDIS_MAC_OPTION_TRANSFERS_NOT_PEND 0x00000004
490 #define NDIS_MAC_OPTION_NO_LOOPBACK 0x00000008
491 #define NDIS_MAC_OPTION_FULL_DUPLEX 0x00000010
492 #define NDIS_MAC_OPTION_EOTX_INDICATION 0x00000020
493 #define NDIS_MAC_OPTION_8021P_PRIORITY 0x00000040
494 #define NDIS_MAC_OPTION_RESERVED 0x80000000
495
496 /* State of the LAN media (OID_GEN_MEDIA_CONNECT_STATUS) */
497 typedef enum _NDIS_MEDIA_STATE
498 {
499 NdisMediaStateConnected,
500 NdisMediaStateDisconnected
501 } NDIS_MEDIA_STATE, *PNDIS_MEDIA_STATE;
502
503 /* OID_GEN_SUPPORTED_GUIDS */
504 typedef struct _NDIS_GUID
505 {
506 GUID Guid;
507 union
508 {
509 NDIS_OID Oid;
510 NDIS_STATUS Status;
511 };
512 ULONG Size;
513 ULONG Flags;
514 } NDIS_GUID, *PNDIS_GUID;
515
516 #define NDIS_GUID_TO_OID 0x00000001
517 #define NDIS_GUID_TO_STATUS 0x00000002
518 #define NDIS_GUID_ANSI_STRING 0x00000004
519 #define NDIS_GUID_UNICODE_STRING 0x00000008
520 #define NDIS_GUID_ARRAY 0x00000010
521
522
523
524 typedef struct _NDIS_PACKET_POOL
525 {
526 NDIS_SPIN_LOCK SpinLock;
527 struct _NDIS_PACKET *FreeList;
528 UINT PacketLength;
529 UCHAR Buffer[1];
530 } NDIS_PACKET_POOL, * PNDIS_PACKET_POOL;
531
532 typedef struct _NDIS_PACKET_PRIVATE
533 {
534 UINT PhysicalCount;
535 UINT TotalLength;
536 PNDIS_BUFFER Head;
537 PNDIS_BUFFER Tail;
538 PNDIS_PACKET_POOL Pool;
539 UINT Count;
540 ULONG Flags; /* See fPACKET_xxx bits below */
541 BOOLEAN ValidCounts;
542 UCHAR NdisPacketFlags;
543 USHORT NdisPacketOobOffset;
544 } NDIS_PACKET_PRIVATE, * PNDIS_PACKET_PRIVATE;
545
546 #define fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO 0x40
547 #define fPACKET_ALLOCATED_BY_NDIS 0x80
548
549 typedef struct _NDIS_PACKET {
550 NDIS_PACKET_PRIVATE Private;
551 union {
552 struct {
553 UCHAR MiniportReserved[2*sizeof(PVOID)];
554 UCHAR WrapperReserved[2*sizeof(PVOID)];
555 };
556 struct {
557 UCHAR MiniportReservedEx[3*sizeof(PVOID)];
558 UCHAR WrapperReservedEx[sizeof(PVOID)];
559 };
560 struct {
561 UCHAR MacReserved[4*sizeof(PVOID)];
562 };
563 };
564 ULONG_PTR Reserved[2];
565 UCHAR ProtocolReserved[1];
566 } NDIS_PACKET, *PNDIS_PACKET, **PPNDIS_PACKET;
567
568 typedef struct _NDIS_PACKET_OOB_DATA {
569 union {
570 ULONGLONG TimeToSend;
571 ULONGLONG TimeSent;
572 };
573 ULONGLONG TimeReceived;
574 UINT HeaderSize;
575 UINT SizeMediaSpecificInfo;
576 PVOID MediaSpecificInformation;
577 NDIS_STATUS Status;
578 } NDIS_PACKET_OOB_DATA, *PNDIS_PACKET_OOB_DATA;
579
580 typedef struct _NDIS_PM_PACKET_PATTERN
581 {
582 ULONG Priority;
583 ULONG Reserved;
584 ULONG MaskSize;
585 ULONG PatternOffset;
586 ULONG PatternSize;
587 ULONG PatternFlags;
588 } NDIS_PM_PACKET_PATTERN, *PNDIS_PM_PACKET_PATTERN;
589
590
591 /* Request types used by NdisRequest */
592 typedef enum _NDIS_REQUEST_TYPE
593 {
594 NdisRequestQueryInformation,
595 NdisRequestSetInformation,
596 NdisRequestQueryStatistics,
597 NdisRequestOpen,
598 NdisRequestClose,
599 NdisRequestSend,
600 NdisRequestTransferData,
601 NdisRequestReset,
602 NdisRequestGeneric1,
603 NdisRequestGeneric2,
604 NdisRequestGeneric3,
605 NdisRequestGeneric4
606 } NDIS_REQUEST_TYPE, *PNDIS_REQUEST_TYPE;
607
608 typedef struct _NDIS_REQUEST {
609 UCHAR MacReserved[16];
610 NDIS_REQUEST_TYPE RequestType;
611 union _DATA {
612 struct QUERY_INFORMATION {
613 NDIS_OID Oid;
614 PVOID InformationBuffer;
615 UINT InformationBufferLength;
616 UINT BytesWritten;
617 UINT BytesNeeded;
618 } QUERY_INFORMATION;
619 struct SET_INFORMATION {
620 NDIS_OID Oid;
621 PVOID InformationBuffer;
622 UINT InformationBufferLength;
623 UINT BytesRead;
624 UINT BytesNeeded;
625 } SET_INFORMATION;
626 } DATA;
627 } NDIS_REQUEST, *PNDIS_REQUEST;
628
629
630
631 /* Wide Area Networks definitions */
632
633 typedef struct _NDIS_WAN_PACKET
634 {
635 LIST_ENTRY WanPacketQueue;
636 PUCHAR CurrentBuffer;
637 ULONG CurrentLength;
638 PUCHAR StartBuffer;
639 PUCHAR EndBuffer;
640 PVOID ProtocolReserved1;
641 PVOID ProtocolReserved2;
642 PVOID ProtocolReserved3;
643 PVOID ProtocolReserved4;
644 PVOID MacReserved1;
645 PVOID MacReserved2;
646 PVOID MacReserved3;
647 PVOID MacReserved4;
648 } NDIS_WAN_PACKET, *PNDIS_WAN_PACKET;
649
650
651
652 /* DMA channel information */
653
654 typedef struct _NDIS_DMA_DESCRIPTION
655 {
656 BOOLEAN DemandMode;
657 BOOLEAN AutoInitialize;
658 BOOLEAN DmaChannelSpecified;
659 DMA_WIDTH DmaWidth;
660 DMA_SPEED DmaSpeed;
661 ULONG DmaPort;
662 ULONG DmaChannel;
663 } NDIS_DMA_DESCRIPTION, *PNDIS_DMA_DESCRIPTION;
664
665 typedef struct _NDIS_DMA_BLOCK
666 {
667 PVOID MapRegisterBase;
668 KEVENT AllocationEvent;
669 PADAPTER_OBJECT SystemAdapterObject;
670 BOOLEAN InProgress;
671 } NDIS_DMA_BLOCK, *PNDIS_DMA_BLOCK;
672
673
674 /* Possible hardware architecture */
675 typedef enum _NDIS_INTERFACE_TYPE
676 {
677 NdisInterfaceInternal = Internal,
678 NdisInterfaceIsa = Isa,
679 NdisInterfaceEisa = Eisa,
680 NdisInterfaceMca = MicroChannel,
681 NdisInterfaceTurboChannel = TurboChannel,
682 NdisInterfacePci = PCIBus,
683 NdisInterfacePcMcia = PCMCIABus
684 } NDIS_INTERFACE_TYPE, *PNDIS_INTERFACE_TYPE;
685
686 #define NdisInterruptLatched Latched
687 #define NdisInterruptLevelSensitive LevelSensitive
688 typedef KINTERRUPT_MODE NDIS_INTERRUPT_MODE, *PNDIS_INTERRUPT_MODE;
689
690
691 typedef enum _NDIS_PARAMETER_TYPE
692 {
693 NdisParameterInteger,
694 NdisParameterHexInteger,
695 NdisParameterString,
696 NdisParameterMultiString
697 } NDIS_PARAMETER_TYPE, *PNDIS_PARAMETER_TYPE;
698
699 typedef struct _NDIS_CONFIGURATION_PARAMETER
700 {
701 NDIS_PARAMETER_TYPE ParameterType;
702 union
703 {
704 ULONG IntegerData;
705 NDIS_STRING StringData;
706 } ParameterData;
707 } NDIS_CONFIGURATION_PARAMETER, *PNDIS_CONFIGURATION_PARAMETER;
708
709
710 typedef PHYSICAL_ADDRESS NDIS_PHYSICAL_ADDRESS, *PNDIS_PHYSICAL_ADDRESS;
711
712 typedef struct _NDIS_PHYSICAL_ADDRESS_UNIT
713 {
714 NDIS_PHYSICAL_ADDRESS PhysicalAddress;
715 UINT Length;
716 } NDIS_PHYSICAL_ADDRESS_UNIT, *PNDIS_PHYSICAL_ADDRESS_UNIT;
717
718
719 typedef VOID (*ADAPTER_SHUTDOWN_HANDLER)(
720 IN PVOID ShutdownContext);
721
722
723
724 #if defined(NDIS_WRAPPER) || !defined(NDIS_MINIPORT_DRIVER)
725
726 /* Structures available only to full MAC drivers */
727
728 typedef BOOLEAN (*PNDIS_INTERRUPT_SERVICE)(
729 IN PVOID InterruptContext);
730
731 typedef VOID (*PNDIS_DEFERRED_PROCESSING)(
732 IN PVOID SystemSpecific1,
733 IN PVOID InterruptContext,
734 IN PVOID SystemSpecific2,
735 IN PVOID SystemSpecific3);
736
737
738 typedef struct _NDIS_INTERRUPT
739 {
740 PKINTERRUPT InterruptObject;
741 KSPIN_LOCK DpcCountLock;
742 PNDIS_INTERRUPT_SERVICE MacIsr;
743 PNDIS_DEFERRED_PROCESSING MacDpc;
744 KDPC InterruptDpc;
745 PVOID InterruptContext;
746 UCHAR DpcCount;
747 BOOLEAN Removing;
748 /* Used to tell when all DPCs for the adapter are completed */
749 KEVENT DpcsCompletedEvent;
750 } NDIS_INTERRUPT, *PNDIS_INTERRUPT;
751
752
753 /* NDIS adapter information */
754
755 typedef NDIS_STATUS (*PNDIS_ACTIVATE_CALLBACK)(
756 IN NDIS_HANDLE NdisAdatperHandle,
757 IN NDIS_HANDLE MacAdapterContext,
758 IN ULONG DmaChannel);
759
760 typedef struct _NDIS_PORT_DESCRIPTOR
761 {
762 ULONG InitialPort;
763 ULONG NumberOfPorts;
764 PVOID * PortOffset;
765 } NDIS_PORT_DESCRIPTOR, *PNDIS_PORT_DESCRIPTOR;
766
767 typedef struct _NDIS_ADAPTER_INFORMATION
768 {
769 ULONG DmaChannel;
770 BOOLEAN Master;
771 BOOLEAN Dma32BitAddresses;
772 PNDIS_ACTIVATE_CALLBACK ActivateCallback;
773 NDIS_INTERFACE_TYPE AdapterType;
774 ULONG PhysicalMapRegistersNeeded;
775 ULONG MaximumPhysicalMapping;
776 ULONG NumberOfPortDescriptors;
777 NDIS_PORT_DESCRIPTOR PortDescriptors[1];
778 } NDIS_ADAPTER_INFORMATION, *PNDIS_ADAPTER_INFORMATION;
779
780
781 /* Prototypes for NDIS_MAC_CHARACTERISTICS */
782
783 typedef NDIS_STATUS (*OPEN_ADAPTER_HANDLER)(
784 OUT PNDIS_STATUS OpenErrorStatus,
785 OUT NDIS_HANDLE * MacBindingHandle,
786 OUT PUINT SelectedMediumIndex,
787 IN PNDIS_MEDIUM MediumArray,
788 IN UINT MediumArraySize,
789 IN NDIS_HANDLE NdisBindingContext,
790 IN NDIS_HANDLE MacAdapterContext,
791 IN UINT OpenOptions,
792 IN PSTRING AddressingInformation OPTIONAL);
793
794 typedef NDIS_STATUS (*CLOSE_ADAPTER_HANDLER)(
795 IN NDIS_HANDLE MacBindingHandle);
796
797 typedef NDIS_STATUS (*SEND_HANDLER)(
798 IN NDIS_HANDLE MacBindingHandle,
799 IN PNDIS_PACKET Packet);
800
801 typedef NDIS_STATUS (*WAN_SEND_HANDLER)(
802 IN NDIS_HANDLE MacBindingHandle,
803 IN PNDIS_WAN_PACKET Packet);
804
805 typedef NDIS_STATUS (*TRANSFER_DATA_HANDLER)(
806 IN NDIS_HANDLE MacBindingHandle,
807 IN NDIS_HANDLE MacReceiveContext,
808 IN UINT ByteOffset,
809 IN UINT BytesToTransfer,
810 OUT PNDIS_PACKET Packet,
811 OUT PUINT BytesTransferred);
812
813 typedef NDIS_STATUS (*WAN_TRANSFER_DATA_HANDLER)(
814 VOID);
815
816 typedef NDIS_STATUS (*RESET_HANDLER)(
817 IN NDIS_HANDLE MacBindingHandle);
818
819 typedef NDIS_STATUS (*REQUEST_HANDLER)(
820 IN NDIS_HANDLE MacBindingHandle,
821 IN PNDIS_REQUEST NdisRequest);
822
823 typedef NDIS_STATUS (*QUERY_GLOBAL_STATISTICS_HANDLER)(
824 IN NDIS_HANDLE MacAdapterContext,
825 IN PNDIS_REQUEST NdisRequest);
826
827 typedef VOID (*UNLOAD_MAC_HANDLER)(
828 IN NDIS_HANDLE MacMacContext);
829
830 typedef NDIS_STATUS (*ADD_ADAPTER_HANDLER)(
831 IN NDIS_HANDLE MacMacContext,
832 IN NDIS_HANDLE WrapperConfigurationContext,
833 IN PNDIS_STRING AdapterName);
834
835 typedef VOID (*REMOVE_ADAPTER_HANDLER)(
836 IN NDIS_HANDLE MacAdapterContext);
837
838 typedef struct _NDIS_MAC_CHARACTERISTICS
839 {
840 UCHAR MajorNdisVersion;
841 UCHAR MinorNdisVersion;
842 UINT Reserved;
843 OPEN_ADAPTER_HANDLER OpenAdapterHandler;
844 CLOSE_ADAPTER_HANDLER CloseAdapterHandler;
845 SEND_HANDLER SendHandler;
846 TRANSFER_DATA_HANDLER TransferDataHandler;
847 RESET_HANDLER ResetHandler;
848 REQUEST_HANDLER RequestHandler;
849 QUERY_GLOBAL_STATISTICS_HANDLER QueryGlobalStatisticsHandler;
850 UNLOAD_MAC_HANDLER UnloadMacHandler;
851 ADD_ADAPTER_HANDLER AddAdapterHandler;
852 REMOVE_ADAPTER_HANDLER RemoveAdapterHandler;
853 NDIS_STRING Name;
854 } NDIS_MAC_CHARACTERISTICS, *PNDIS_MAC_CHARACTERISTICS;
855
856 typedef NDIS_MAC_CHARACTERISTICS NDIS_WAN_MAC_CHARACTERISTICS;
857 typedef NDIS_WAN_MAC_CHARACTERISTICS *PNDIS_WAN_MAC_CHARACTERISTICS;
858
859
860
861 /* Functions available only to full MAC drivers */
862
863 VOID
864 EXPIMP
865 NdisAllocateSharedMemory(
866 IN NDIS_HANDLE NdisAdapterHandle,
867 IN ULONG Length,
868 IN BOOLEAN Cached,
869 OUT PVOID *VirtualAddress,
870 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
871
872 VOID
873 EXPIMP
874 NdisCompleteCloseAdapter(
875 IN NDIS_HANDLE NdisBindingContext,
876 IN NDIS_STATUS Status);
877
878 VOID
879 EXPIMP
880 NdisCompleteOpenAdapter(
881 IN NDIS_HANDLE NdisBindingContext,
882 IN NDIS_STATUS Status,
883 IN NDIS_STATUS OpenErrorStatus);
884
885 NDIS_STATUS
886 EXPIMP
887 NdisDeregisterAdapter(
888 IN NDIS_HANDLE NdisAdapterHandle);
889
890 VOID
891 EXPIMP
892 NdisDeregisterAdapterShutdownHandler(
893 IN NDIS_HANDLE NdisAdapterHandle);
894
895 VOID
896 EXPIMP
897 NdisFreeSharedMemory(
898 IN NDIS_HANDLE NdisAdapterHandle,
899 IN ULONG Length,
900 IN BOOLEAN Cached,
901 IN PVOID VirtualAddress,
902 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
903
904 VOID
905 EXPIMP
906 NdisInitializeInterrupt(
907 OUT PNDIS_STATUS Status,
908 IN OUT PNDIS_INTERRUPT Interrupt,
909 IN NDIS_HANDLE NdisAdapterHandle,
910 IN PNDIS_INTERRUPT_SERVICE InterruptServiceRoutine,
911 IN PVOID InterruptContext,
912 IN PNDIS_DEFERRED_PROCESSING DeferredProcessingRoutine,
913 IN UINT InterruptVector,
914 IN UINT InterruptLevel,
915 IN BOOLEAN SharedInterrupt,
916 IN NDIS_INTERRUPT_MODE InterruptMode);
917
918 VOID
919 EXPIMP
920 NdisMapIoSpace(
921 OUT PNDIS_STATUS Status,
922 OUT PVOID *VirtualAddress,
923 IN NDIS_HANDLE NdisAdapterHandle,
924 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
925 IN UINT Length);
926
927 NDIS_STATUS
928 EXPIMP
929 NdisRegisterAdapter(
930 OUT PNDIS_HANDLE NdisAdapterHandle,
931 IN NDIS_HANDLE NdisMacHandle,
932 IN NDIS_HANDLE MacAdapterContext,
933 IN NDIS_HANDLE WrapperConfigurationContext,
934 IN PNDIS_STRING AdapterName,
935 IN PVOID AdapterInformation);
936
937 VOID
938 EXPIMP
939 NdisRegisterAdapterShutdownHandler(
940 IN NDIS_HANDLE NdisAdapterHandle,
941 IN PVOID ShutdownContext,
942 IN ADAPTER_SHUTDOWN_HANDLER ShutdownHandler);
943
944 VOID
945 EXPIMP
946 NdisRegisterMac(
947 OUT PNDIS_STATUS Status,
948 OUT PNDIS_HANDLE NdisMacHandle,
949 IN NDIS_HANDLE NdisWrapperHandle,
950 IN NDIS_HANDLE MacMacContext,
951 IN PNDIS_MAC_CHARACTERISTICS MacCharacteristics,
952 IN UINT CharacteristicsLength);
953
954 VOID
955 EXPIMP
956 NdisReleaseAdapterResources(
957 IN NDIS_HANDLE NdisAdapterHandle);
958
959 VOID
960 EXPIMP
961 NdisRemoveInterrupt(
962 IN PNDIS_INTERRUPT Interrupt);
963
964 #endif /* NDIS_WRAPPER || !NDIS_MINIPORT_DRIVER */
965
966
967
968 #ifdef NDIS50
969
970 typedef struct _ATM_ADDRESS ATM_ADDRESS, *PATM_ADDRESS;
971
972
973 /* OID_GEN_NETWORK_LAYER_ADDRESSES */
974 typedef struct _NETWORK_ADDRESS
975 {
976 USHORT AddressLength;
977 USHORT AddressType;
978 UCHAR Address[1];
979 } NETWORK_ADDRESS, *PNETWORK_ADDRESS;
980
981 typedef struct _NETWORK_ADDRESS_LIST
982 {
983 LONG AddressCount;
984 USHORT AddressType;
985 NETWORK_ADDRESS Address[1];
986 } NETWORK_ADDRESS_LIST, *PNETWORK_ADDRESS_LIST;
987
988 /* Protocol types supported by NDIS */
989 #define NDIS_PROTOCOL_ID_DEFAULT 0x00
990 #define NDIS_PROTOCOL_ID_TCP_IP 0x02
991 #define NDIS_PROTOCOL_ID_IPX 0x06
992 #define NDIS_PROTOCOL_ID_NBF 0x07
993 #define NDIS_PROTOCOL_ID_MAX 0x0F
994 #define NDIS_PROTOCOL_ID_MASK 0x0F
995
996 /* OID_GEN_TRANSPORT_HEADER_OFFSET */
997 typedef struct _TRANSPORT_HEADER_OFFSET
998 {
999 USHORT ProtocolType;
1000 USHORT HeaderOffset;
1001 } TRANSPORT_HEADER_OFFSET, *PTRANSPORT_HEADER_OFFSET;
1002
1003
1004 /* OID_GEN_CO_LINK_SPEED / OID_GEN_CO_MINIMUM_LINK_SPEED */
1005 typedef struct _NDIS_CO_LINK_SPEED
1006 {
1007 ULONG Outbound;
1008 ULONG Inbound;
1009 } NDIS_CO_LINK_SPEED, *PNDIS_CO_LINK_SPEED;
1010
1011
1012 typedef enum _NDIS_AF
1013 {
1014 CO_ADDRESS_FAMILY_Q2931 = 1,
1015 CO_ADDRESS_FAMILY_SPANS,
1016 } NDIS_AF, *PNDIS_AF;
1017
1018 typedef struct
1019 {
1020 NDIS_AF AddressFamily;
1021 ULONG MajorVersion;
1022 ULONG MinorVersion;
1023 } CO_ADDRESS_FAMILY, *PCO_ADDRESS_FAMILY;
1024
1025 typedef enum
1026 {
1027 BestEffortService,
1028 PredictiveService,
1029 GuaranteedService
1030 } GUARANTEE;
1031
1032 typedef struct _CO_FLOW_PARAMETERS
1033 {
1034 ULONG TokenRate; /* In Bytes/sec */
1035 ULONG TokenBucketSize; /* In Bytes */
1036 ULONG PeakBandwidth; /* In Bytes/sec */
1037 ULONG Latency; /* In microseconds */
1038 ULONG DelayVariation; /* In microseconds */
1039 GUARANTEE LevelOfGuarantee; /* Guaranteed, Predictive or Best Effort */
1040 ULONG CostOfCall; /* Reserved for future use, */
1041 /* must be set to 0 now */
1042 ULONG NetworkAvailability; /* read-only: 1 if accessible, 0 if not */
1043 ULONG MaxSduSize; /* In Bytes */
1044 } CO_FLOW_PARAMETERS, *PCO_FLOW_PARAMETERS;
1045
1046 typedef struct _CO_SPECIFIC_PARAMETERS
1047 {
1048 ULONG ParamType;
1049 ULONG Length;
1050 UCHAR Parameters[1];
1051 } CO_SPECIFIC_PARAMETERS, *PCO_SPECIFIC_PARAMETERS;
1052
1053 typedef struct _CO_CALL_MANAGER_PARAMETERS {
1054 CO_FLOW_PARAMETERS Transmit;
1055 CO_FLOW_PARAMETERS Receive;
1056 CO_SPECIFIC_PARAMETERS CallMgrSpecific;
1057 } CO_CALL_MANAGER_PARAMETERS, *PCO_CALL_MANAGER_PARAMETERS;
1058
1059 typedef struct _CO_MEDIA_PARAMETERS
1060 {
1061 ULONG Flags;
1062 ULONG ReceivePriority;
1063 ULONG ReceiveSizeHint;
1064 CO_SPECIFIC_PARAMETERS MediaSpecific;
1065 } CO_MEDIA_PARAMETERS, *PCO_MEDIA_PARAMETERS;
1066
1067 /* Definitions for the flags in CO_MEDIA_PARAMETERS */
1068 #define RECEIVE_TIME_INDICATION 0x00000001
1069 #define USE_TIME_STAMPS 0x00000002
1070 #define TRANSMIT_VC 0x00000004
1071 #define RECEIVE_VC 0x00000008
1072 #define INDICATE_ERRED_PACKETS 0x00000010
1073 #define INDICATE_END_OF_TX 0x00000020
1074 #define RESERVE_RESOURCES_VC 0x00000040
1075 #define ROUND_DOWN_FLOW 0x00000080
1076 #define ROUND_UP_FLOW 0x00000100
1077
1078 typedef struct _CO_CALL_PARAMETERS
1079 {
1080 ULONG Flags;
1081 PCO_CALL_MANAGER_PARAMETERS CallMgrParameters;
1082 PCO_MEDIA_PARAMETERS MediaParameters;
1083 } CO_CALL_PARAMETERS, *PCO_CALL_PARAMETERS;
1084
1085 typedef struct _CO_SAP {
1086 ULONG SapType;
1087 ULONG SapLength;
1088 UCHAR Sap[1];
1089 } CO_SAP, *PCO_SAP;
1090
1091 typedef struct _NDIS_IPSEC_PACKET_INFO
1092 {
1093 union
1094 {
1095 struct
1096 {
1097 NDIS_HANDLE OffloadHandle;
1098 NDIS_HANDLE NextOffloadHandle;
1099 } Transmit;
1100
1101 struct
1102 {
1103 ULONG SA_DELETE_REQ:1;
1104 ULONG CRYPTO_DONE:1;
1105 ULONG NEXT_CRYPTO_DONE:1;
1106 ULONG CryptoStatus;
1107 } Receive;
1108 };
1109 } NDIS_IPSEC_PACKET_INFO, *PNDIS_IPSEC_PACKET_INFO;
1110
1111
1112 /* Plug and play and power management */
1113
1114 /* PnP and PM event codes */
1115 typedef enum _NET_PNP_EVENT_CODE
1116 {
1117 NetEventSetPower,
1118 NetEventQueryPower,
1119 NetEventQueryRemoveDevice,
1120 NetEventCancelRemoveDevice,
1121 NetEventReconfigure,
1122 NetEventBindList,
1123 NetEventBindsComplete,
1124 NetEventPnPCapabilities,
1125 NetEventMaximum
1126 } NET_PNP_EVENT_CODE, *PNET_PNP_EVENT_CODE;
1127
1128 /* Networking PnP event indication structure */
1129 typedef struct _NET_PNP_EVENT
1130 {
1131 /* Event code */
1132 NET_PNP_EVENT_CODE NetEvent;
1133 /* Event specific data */
1134 PVOID Buffer;
1135 /* Length of event specific data */
1136 ULONG BufferLength;
1137
1138 /* Reserved areas */
1139 ULONG_PTR NdisReserved[4];
1140 ULONG_PTR TransportReserved[4];
1141 ULONG_PTR TdiReserved[4];
1142 ULONG_PTR TdiClientReserved[4];
1143 } NET_PNP_EVENT, *PNET_PNP_EVENT;
1144
1145 /* Device power state structure */
1146 typedef enum _NET_DEVICE_POWER_STATE
1147 {
1148 NetDeviceStateUnspecified = 0,
1149 NetDeviceStateD0,
1150 NetDeviceStateD1,
1151 NetDeviceStateD2,
1152 NetDeviceStateD3,
1153 NetDeviceStateMaximum
1154 } NET_DEVICE_POWER_STATE, *PNET_DEVICE_POWER_STATE;
1155
1156
1157
1158 /* Call Manager */
1159
1160 typedef NDIS_STATUS (*CO_CREATE_VC_HANDLER)(
1161 IN NDIS_HANDLE ProtocolAfContext,
1162 IN NDIS_HANDLE NdisVcHandle,
1163 OUT PNDIS_HANDLE ProtocolVcContext);
1164
1165 typedef NDIS_STATUS (*CO_DELETE_VC_HANDLER)(
1166 IN NDIS_HANDLE ProtocolVcContext);
1167
1168 typedef NDIS_STATUS (*CO_REQUEST_HANDLER)(
1169 IN NDIS_HANDLE ProtocolAfContext,
1170 IN NDIS_HANDLE ProtocolVcContext OPTIONAL,
1171 IN NDIS_HANDLE ProtocolPartyContext OPTIONAL,
1172 IN OUT PNDIS_REQUEST NdisRequest);
1173
1174 typedef VOID (*CO_REQUEST_COMPLETE_HANDLER)(
1175 IN NDIS_STATUS Status,
1176 IN NDIS_HANDLE ProtocolAfContext OPTIONAL,
1177 IN NDIS_HANDLE ProtocolVcContext OPTIONAL,
1178 IN NDIS_HANDLE ProtocolPartyContext OPTIONAL,
1179 IN PNDIS_REQUEST NdisRequest);
1180
1181
1182 typedef NDIS_STATUS (*CM_OPEN_AF_HANDLER)(
1183 IN NDIS_HANDLE CallMgrBindingContext,
1184 IN PCO_ADDRESS_FAMILY AddressFamily,
1185 IN NDIS_HANDLE NdisAfHandle,
1186 OUT PNDIS_HANDLE CallMgrAfContext
1187 );
1188
1189 typedef
1190 NDIS_STATUS
1191 (*CM_CLOSE_AF_HANDLER)(
1192 IN NDIS_HANDLE CallMgrAfContext
1193 );
1194
1195 typedef
1196 NDIS_STATUS
1197 (*CM_REG_SAP_HANDLER)(
1198 IN NDIS_HANDLE CallMgrAfContext,
1199 IN PCO_SAP Sap,
1200 IN NDIS_HANDLE NdisSapHandle,
1201 OUT PNDIS_HANDLE CallMgrSapContext
1202 );
1203
1204 typedef
1205 NDIS_STATUS
1206 (*CM_DEREG_SAP_HANDLER)(
1207 IN NDIS_HANDLE CallMgrSapContext
1208 );
1209
1210 typedef
1211 NDIS_STATUS
1212 (*CM_MAKE_CALL_HANDLER)(
1213 IN NDIS_HANDLE CallMgrVcContext,
1214 IN OUT PCO_CALL_PARAMETERS CallParameters,
1215 IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
1216 OUT PNDIS_HANDLE CallMgrPartyContext OPTIONAL
1217 );
1218
1219 typedef
1220 NDIS_STATUS
1221 (*CM_CLOSE_CALL_HANDLER)(
1222 IN NDIS_HANDLE CallMgrVcContext,
1223 IN NDIS_HANDLE CallMgrPartyContext OPTIONAL,
1224 IN PVOID CloseData OPTIONAL,
1225 IN UINT Size OPTIONAL
1226 );
1227
1228 typedef
1229 VOID
1230 (*CM_INCOMING_CALL_COMPLETE_HANDLER)(
1231 IN NDIS_STATUS Status,
1232 IN NDIS_HANDLE CallMgrVcContext,
1233 IN PCO_CALL_PARAMETERS CallParameters
1234 );
1235
1236 typedef
1237 NDIS_STATUS
1238 (*CM_ADD_PARTY_HANDLER)(
1239 IN NDIS_HANDLE CallMgrVcContext,
1240 IN OUT PCO_CALL_PARAMETERS CallParameters,
1241 IN NDIS_HANDLE NdisPartyHandle,
1242 OUT PNDIS_HANDLE CallMgrPartyContext
1243 );
1244
1245 typedef
1246 NDIS_STATUS
1247 (*CM_DROP_PARTY_HANDLER)(
1248 IN NDIS_HANDLE CallMgrPartyContext,
1249 IN PVOID CloseData OPTIONAL,
1250 IN UINT Size OPTIONAL
1251 );
1252
1253 typedef
1254 VOID
1255 (*CM_ACTIVATE_VC_COMPLETE_HANDLER)(
1256 IN NDIS_STATUS Status,
1257 IN NDIS_HANDLE CallMgrVcContext,
1258 IN PCO_CALL_PARAMETERS CallParameters
1259 );
1260
1261 typedef
1262 VOID
1263 (*CM_DEACTIVATE_VC_COMPLETE_HANDLER)(
1264 IN NDIS_STATUS Status,
1265 IN NDIS_HANDLE CallMgrVcContext
1266 );
1267
1268 typedef
1269 NDIS_STATUS
1270 (*CM_MODIFY_CALL_QOS_HANDLER)(
1271 IN NDIS_HANDLE CallMgrVcContext,
1272 IN PCO_CALL_PARAMETERS CallParameters
1273 );
1274
1275 typedef struct _NDIS_CALL_MANAGER_CHARACTERISTICS
1276 {
1277 UCHAR MajorVersion;
1278 UCHAR MinorVersion;
1279
1280 USHORT Filler;
1281 UINT Reserved;
1282
1283 CO_CREATE_VC_HANDLER CmCreateVcHandler;
1284 CO_DELETE_VC_HANDLER CmDeleteVcHandler;
1285 CM_OPEN_AF_HANDLER CmOpenAfHandler;
1286 CM_CLOSE_AF_HANDLER CmCloseAfHandler;
1287 CM_REG_SAP_HANDLER CmRegisterSapHandler;
1288 CM_DEREG_SAP_HANDLER CmDeregisterSapHandler;
1289 CM_MAKE_CALL_HANDLER CmMakeCallHandler;
1290 CM_CLOSE_CALL_HANDLER CmCloseCallHandler;
1291 CM_INCOMING_CALL_COMPLETE_HANDLER CmIncomingCallCompleteHandler;
1292 CM_ADD_PARTY_HANDLER CmAddPartyHandler;
1293 CM_DROP_PARTY_HANDLER CmDropPartyHandler;
1294 CM_ACTIVATE_VC_COMPLETE_HANDLER CmActivateVcCompleteHandler;
1295 CM_DEACTIVATE_VC_COMPLETE_HANDLER CmDeactivateVcCompleteHandler;
1296 CM_MODIFY_CALL_QOS_HANDLER CmModifyCallQoSHandler;
1297 CO_REQUEST_HANDLER CmRequestHandler;
1298 CO_REQUEST_COMPLETE_HANDLER CmRequestCompleteHandler;
1299 } NDIS_CALL_MANAGER_CHARACTERISTICS, *PNDIS_CALL_MANAGER_CHARACTERISTICS;
1300
1301
1302
1303 /* Call Manager clients */
1304
1305 typedef VOID (*CL_OPEN_AF_COMPLETE_HANDLER)(
1306 IN NDIS_STATUS Status,
1307 IN NDIS_HANDLE ProtocolAfContext,
1308 IN NDIS_HANDLE NdisAfHandle);
1309
1310 typedef VOID (*CL_CLOSE_AF_COMPLETE_HANDLER)(
1311 IN NDIS_STATUS Status,
1312 IN NDIS_HANDLE ProtocolAfContext);
1313
1314 typedef VOID (*CL_REG_SAP_COMPLETE_HANDLER)(
1315 IN NDIS_STATUS Status,
1316 IN NDIS_HANDLE ProtocolSapContext,
1317 IN PCO_SAP Sap,
1318 IN NDIS_HANDLE NdisSapHandle);
1319
1320 typedef VOID (*CL_DEREG_SAP_COMPLETE_HANDLER)(
1321 IN NDIS_STATUS Status,
1322 IN NDIS_HANDLE ProtocolSapContext);
1323
1324 typedef VOID (*CL_MAKE_CALL_COMPLETE_HANDLER)(
1325 IN NDIS_STATUS Status,
1326 IN NDIS_HANDLE ProtocolVcContext,
1327 IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
1328 IN PCO_CALL_PARAMETERS CallParameters);
1329
1330 typedef VOID (*CL_MODIFY_CALL_QOS_COMPLETE_HANDLER)(
1331 IN NDIS_STATUS Status,
1332 IN NDIS_HANDLE ProtocolVcContext,
1333 IN PCO_CALL_PARAMETERS CallParameters);
1334
1335 typedef VOID (*CL_CLOSE_CALL_COMPLETE_HANDLER)(
1336 IN NDIS_STATUS Status,
1337 IN NDIS_HANDLE ProtocolVcContext,
1338 IN NDIS_HANDLE ProtocolPartyContext OPTIONAL);
1339
1340 typedef VOID (*CL_ADD_PARTY_COMPLETE_HANDLER)(
1341 IN NDIS_STATUS Status,
1342 IN NDIS_HANDLE ProtocolPartyContext,
1343 IN NDIS_HANDLE NdisPartyHandle,
1344 IN PCO_CALL_PARAMETERS CallParameters);
1345
1346 typedef VOID (*CL_DROP_PARTY_COMPLETE_HANDLER)(
1347 IN NDIS_STATUS Status,
1348 IN NDIS_HANDLE ProtocolPartyContext);
1349
1350 typedef NDIS_STATUS (*CL_INCOMING_CALL_HANDLER)(
1351 IN NDIS_HANDLE ProtocolSapContext,
1352 IN NDIS_HANDLE ProtocolVcContext,
1353 IN OUT PCO_CALL_PARAMETERS CallParameters);
1354
1355 typedef VOID (*CL_INCOMING_CALL_QOS_CHANGE_HANDLER)(
1356 IN NDIS_HANDLE ProtocolVcContext,
1357 IN PCO_CALL_PARAMETERS CallParameters);
1358
1359 typedef VOID (*CL_INCOMING_CLOSE_CALL_HANDLER)(
1360 IN NDIS_STATUS CloseStatus,
1361 IN NDIS_HANDLE ProtocolVcContext,
1362 IN PVOID CloseData OPTIONAL,
1363 IN UINT Size OPTIONAL);
1364
1365 typedef VOID (*CL_INCOMING_DROP_PARTY_HANDLER)(
1366 IN NDIS_STATUS DropStatus,
1367 IN NDIS_HANDLE ProtocolPartyContext,
1368 IN PVOID CloseData OPTIONAL,
1369 IN UINT Size OPTIONAL);
1370
1371 typedef VOID (*CL_CALL_CONNECTED_HANDLER)(
1372 IN NDIS_HANDLE ProtocolVcContext);
1373
1374
1375 typedef struct _NDIS_CLIENT_CHARACTERISTICS
1376 {
1377 UCHAR MajorVersion;
1378 UCHAR MinorVersion;
1379
1380 USHORT Filler;
1381 UINT Reserved;
1382
1383 CO_CREATE_VC_HANDLER ClCreateVcHandler;
1384 CO_DELETE_VC_HANDLER ClDeleteVcHandler;
1385 CO_REQUEST_HANDLER ClRequestHandler;
1386 CO_REQUEST_COMPLETE_HANDLER ClRequestCompleteHandler;
1387 CL_OPEN_AF_COMPLETE_HANDLER ClOpenAfCompleteHandler;
1388 CL_CLOSE_AF_COMPLETE_HANDLER ClCloseAfCompleteHandler;
1389 CL_REG_SAP_COMPLETE_HANDLER ClRegisterSapCompleteHandler;
1390 CL_DEREG_SAP_COMPLETE_HANDLER ClDeregisterSapCompleteHandler;
1391 CL_MAKE_CALL_COMPLETE_HANDLER ClMakeCallCompleteHandler;
1392 CL_MODIFY_CALL_QOS_COMPLETE_HANDLER ClModifyCallQoSCompleteHandler;
1393 CL_CLOSE_CALL_COMPLETE_HANDLER ClCloseCallCompleteHandler;
1394 CL_ADD_PARTY_COMPLETE_HANDLER ClAddPartyCompleteHandler;
1395 CL_DROP_PARTY_COMPLETE_HANDLER ClDropPartyCompleteHandler;
1396 CL_INCOMING_CALL_HANDLER ClIncomingCallHandler;
1397 CL_INCOMING_CALL_QOS_CHANGE_HANDLER ClIncomingCallQoSChangeHandler;
1398 CL_INCOMING_CLOSE_CALL_HANDLER ClIncomingCloseCallHandler;
1399 CL_INCOMING_DROP_PARTY_HANDLER ClIncomingDropPartyHandler;
1400 CL_CALL_CONNECTED_HANDLER ClCallConnectedHandler;
1401 } NDIS_CLIENT_CHARACTERISTICS, *PNDIS_CLIENT_CHARACTERISTICS;
1402
1403 #endif /* NDIS50 */
1404
1405
1406
1407 /* NDIS protocol structures */
1408
1409 /* Prototypes for NDIS 3.0 protocol characteristics */
1410
1411 typedef VOID (*OPEN_ADAPTER_COMPLETE_HANDLER)(
1412 IN NDIS_HANDLE ProtocolBindingContext,
1413 IN NDIS_STATUS Status,
1414 IN NDIS_STATUS OpenErrorStatus);
1415
1416 typedef VOID (*CLOSE_ADAPTER_COMPLETE_HANDLER)(
1417 IN NDIS_HANDLE ProtocolBindingContext,
1418 IN NDIS_STATUS Status);
1419
1420 typedef VOID (*RESET_COMPLETE_HANDLER)(
1421 IN NDIS_HANDLE ProtocolBindingContext,
1422 IN NDIS_STATUS Status);
1423
1424 typedef VOID (*REQUEST_COMPLETE_HANDLER)(
1425 IN NDIS_HANDLE ProtocolBindingContext,
1426 IN PNDIS_REQUEST NdisRequest,
1427 IN NDIS_STATUS Status);
1428
1429 typedef VOID (*STATUS_HANDLER)(
1430 IN NDIS_HANDLE ProtocolBindingContext,
1431 IN NDIS_STATUS GeneralStatus,
1432 IN PVOID StatusBuffer,
1433 IN UINT StatusBufferSize);
1434
1435 typedef VOID (*STATUS_COMPLETE_HANDLER)(
1436 IN NDIS_HANDLE ProtocolBindingContext);
1437
1438 typedef VOID (*SEND_COMPLETE_HANDLER)(
1439 IN NDIS_HANDLE ProtocolBindingContext,
1440 IN PNDIS_PACKET Packet,
1441 IN NDIS_STATUS Status);
1442
1443 typedef VOID (*WAN_SEND_COMPLETE_HANDLER)(
1444 IN NDIS_HANDLE ProtocolBindingContext,
1445 IN PNDIS_WAN_PACKET Packet,
1446 IN NDIS_STATUS Status);
1447
1448 typedef VOID (*TRANSFER_DATA_COMPLETE_HANDLER)(
1449 IN NDIS_HANDLE ProtocolBindingContext,
1450 IN PNDIS_PACKET Packet,
1451 IN NDIS_STATUS Status,
1452 IN UINT BytesTransferred);
1453
1454 typedef VOID (*WAN_TRANSFER_DATA_COMPLETE_HANDLER)(
1455 VOID);
1456
1457 typedef NDIS_STATUS (*RECEIVE_HANDLER)(
1458 IN NDIS_HANDLE ProtocolBindingContext,
1459 IN NDIS_HANDLE MacReceiveContext,
1460 IN PVOID HeaderBuffer,
1461 IN UINT HeaderBufferSize,
1462 IN PVOID LookAheadBuffer,
1463 IN UINT LookaheadBufferSize,
1464 IN UINT PacketSize);
1465
1466 typedef NDIS_STATUS (*WAN_RECEIVE_HANDLER)(
1467 IN NDIS_HANDLE NdisLinkHandle,
1468 IN PUCHAR Packet,
1469 IN ULONG PacketSize);
1470
1471 typedef VOID (*RECEIVE_COMPLETE_HANDLER)(
1472 IN NDIS_HANDLE ProtocolBindingContext);
1473
1474
1475 /* Protocol characteristics for NDIS 3.0 protocols */
1476 typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS
1477 {
1478 UCHAR MajorNdisVersion;
1479 UCHAR MinorNdisVersion;
1480 union
1481 {
1482 UINT Reserved;
1483 UINT Flags;
1484 };
1485 OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler;
1486 CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler;
1487 union
1488 {
1489 SEND_COMPLETE_HANDLER SendCompleteHandler;
1490 WAN_SEND_COMPLETE_HANDLER WanSendCompleteHandler;
1491 };
1492 union
1493 {
1494 TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler;
1495 WAN_TRANSFER_DATA_COMPLETE_HANDLER WanTransferDataCompleteHandler;
1496 };
1497
1498 RESET_COMPLETE_HANDLER ResetCompleteHandler;
1499 REQUEST_COMPLETE_HANDLER RequestCompleteHandler;
1500 union
1501 {
1502 RECEIVE_HANDLER ReceiveHandler;
1503 WAN_RECEIVE_HANDLER WanReceiveHandler;
1504 };
1505 RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler;
1506 STATUS_HANDLER StatusHandler;
1507 STATUS_COMPLETE_HANDLER StatusCompleteHandler;
1508 NDIS_STRING Name;
1509 } NDIS30_PROTOCOL_CHARACTERISTICS;
1510
1511
1512 /* Prototypes for NDIS 4.0 protocol characteristics */
1513
1514 typedef INT (*RECEIVE_PACKET_HANDLER)(
1515 IN NDIS_HANDLE ProtocolBindingContext,
1516 IN PNDIS_PACKET Packet);
1517
1518 typedef VOID (*BIND_HANDLER)(
1519 OUT PNDIS_STATUS Status,
1520 IN NDIS_HANDLE BindContext,
1521 IN PNDIS_STRING DeviceName,
1522 IN PVOID SystemSpecific1,
1523 IN PVOID SystemSpecific2);
1524
1525 typedef VOID (*UNBIND_HANDLER)(
1526 OUT PNDIS_STATUS Status,
1527 IN NDIS_HANDLE ProtocolBindingContext,
1528 IN NDIS_HANDLE UnbindContext);
1529
1530 typedef VOID (*TRANSLATE_HANDLER)(
1531 OUT PNDIS_STATUS Status,
1532 IN NDIS_HANDLE ProtocolBindingContext,
1533 OUT PNET_PNP_ID IdList,
1534 IN ULONG IdListLength,
1535 OUT PULONG BytesReturned);
1536
1537 typedef VOID (*UNLOAD_PROTOCOL_HANDLER)(
1538 VOID);
1539
1540
1541 /* Protocol characteristics for NDIS 4.0 protocols */
1542
1543 typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS
1544 {
1545 NDIS30_PROTOCOL_CHARACTERISTICS;
1546
1547 RECEIVE_PACKET_HANDLER ReceivePacketHandler;
1548 BIND_HANDLER BindAdapterHandler;
1549 UNBIND_HANDLER UnbindAdapterHandler;
1550 TRANSLATE_HANDLER TranslateHandler;
1551 UNLOAD_PROTOCOL_HANDLER UnloadHandler;
1552 } NDIS40_PROTOCOL_CHARACTERISTICS;
1553
1554
1555
1556 /* Prototypes for NDIS 5.0 protocol characteristics */
1557
1558 #ifdef NDIS50
1559
1560 typedef VOID (*CO_SEND_COMPLETE_HANDLER)(
1561 IN NDIS_STATUS Status,
1562 IN NDIS_HANDLE ProtocolVcContext,
1563 IN PNDIS_PACKET Packet);
1564
1565 typedef VOID (*CO_STATUS_HANDLER)(
1566 IN NDIS_HANDLE ProtocolBindingContext,
1567 IN NDIS_HANDLE ProtocolVcContext OPTIONAL,
1568 IN NDIS_STATUS GeneralStatus,
1569 IN PVOID StatusBuffer,
1570 IN UINT StatusBufferSize);
1571
1572 typedef UINT (*CO_RECEIVE_PACKET_HANDLER)(
1573 IN NDIS_HANDLE ProtocolBindingContext,
1574 IN NDIS_HANDLE ProtocolVcContext,
1575 IN PNDIS_PACKET Packet);
1576
1577 typedef VOID (*CO_AF_REGISTER_NOTIFY_HANDLER)(
1578 IN NDIS_HANDLE ProtocolBindingContext,
1579 IN PCO_ADDRESS_FAMILY AddressFamily);
1580
1581
1582 typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS
1583 {
1584 NDIS40_PROTOCOL_CHARACTERISTICS;
1585
1586 PVOID ReservedHandlers[4];
1587
1588 CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler;
1589 CO_STATUS_HANDLER CoStatusHandler;
1590 CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler;
1591 CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
1592 } NDIS50_PROTOCOL_CHARACTERISTICS;
1593
1594 #endif /* NDIS50 */
1595
1596
1597 #ifndef NDIS50
1598 #ifndef NDIS40
1599 typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS NDIS_PROTOCOL_CHARACTERISTICS;
1600 #else /* NDIS40 */
1601 typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS NDIS_PROTOCOL_CHARACTERISTICS;
1602 #endif /* NDIS40 */
1603 #else /* NDIS50 */
1604 typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS NDIS_PROTOCOL_CHARACTERISTICS;
1605 #endif /* NDIS50 */
1606
1607 typedef NDIS_PROTOCOL_CHARACTERISTICS *PNDIS_PROTOCOL_CHARACTERISTICS;
1608
1609
1610
1611 /* Buffer management routines */
1612
1613 VOID
1614 EXPIMP
1615 NdisAllocateBuffer(
1616 OUT PNDIS_STATUS Status,
1617 OUT PNDIS_BUFFER *Buffer,
1618 IN NDIS_HANDLE PoolHandle,
1619 IN PVOID VirtualAddress,
1620 IN UINT Length);
1621
1622 VOID
1623 EXPIMP
1624 NdisAllocateBufferPool(
1625 OUT PNDIS_STATUS Status,
1626 OUT PNDIS_HANDLE PoolHandle,
1627 IN UINT NumberOfDescriptors);
1628
1629 VOID
1630 EXPIMP
1631 NdisAllocatePacket(
1632 OUT PNDIS_STATUS Status,
1633 OUT PNDIS_PACKET *Packet,
1634 IN NDIS_HANDLE PoolHandle);
1635
1636 VOID
1637 EXPIMP
1638 NdisAllocatePacketPool(
1639 OUT PNDIS_STATUS Status,
1640 OUT PNDIS_HANDLE PoolHandle,
1641 IN UINT NumberOfDescriptors,
1642 IN UINT ProtocolReservedLength);
1643
1644 VOID
1645 EXPIMP
1646 NdisCopyBuffer(
1647 OUT PNDIS_STATUS Status,
1648 OUT PNDIS_BUFFER *Buffer,
1649 IN NDIS_HANDLE PoolHandle,
1650 IN PVOID MemoryDescriptor,
1651 IN UINT Offset,
1652 IN UINT Length);
1653
1654 VOID
1655 EXPIMP
1656 NdisCopyFromPacketToPacket(
1657 IN PNDIS_PACKET Destination,
1658 IN UINT DestinationOffset,
1659 IN UINT BytesToCopy,
1660 IN PNDIS_PACKET Source,
1661 IN UINT SourceOffset,
1662 OUT PUINT BytesCopied);
1663
1664 VOID
1665 EXPIMP
1666 NdisDprAllocatePacket(
1667 OUT PNDIS_STATUS Status,
1668 OUT PNDIS_PACKET *Packet,
1669 IN NDIS_HANDLE PoolHandle);
1670
1671 VOID
1672 EXPIMP
1673 NdisDprAllocatePacketNonInterlocked(
1674 OUT PNDIS_STATUS Status,
1675 OUT PNDIS_PACKET *Packet,
1676 IN NDIS_HANDLE PoolHandle);
1677
1678 VOID
1679 EXPIMP
1680 NdisDprFreePacket(
1681 IN PNDIS_PACKET Packet);
1682
1683 VOID
1684 EXPIMP
1685 NdisDprFreePacketNonInterlocked(
1686 IN PNDIS_PACKET Packet);
1687
1688 VOID
1689 EXPIMP
1690 NdisFreeBufferPool(
1691 IN NDIS_HANDLE PoolHandle);
1692
1693 VOID
1694 EXPIMP
1695 NdisFreePacket(
1696 IN PNDIS_PACKET Packet);
1697
1698 VOID
1699 EXPIMP
1700 NdisFreePacketPool(
1701 IN NDIS_HANDLE PoolHandle);
1702
1703 VOID
1704 EXPIMP
1705 NdisReturnPackets(
1706 IN PNDIS_PACKET *PacketsToReturn,
1707 IN UINT NumberOfPackets);
1708
1709 VOID
1710 EXPIMP
1711 NdisUnchainBufferAtBack(
1712 IN OUT PNDIS_PACKET Packet,
1713 OUT PNDIS_BUFFER *Buffer);
1714
1715 VOID
1716 EXPIMP
1717 NdisUnchainBufferAtFront(
1718 IN OUT PNDIS_PACKET Packet,
1719 OUT PNDIS_BUFFER *Buffer);
1720
1721 #if BINARY_COMPATIBLE
1722
1723 VOID
1724 EXPIMP
1725 NdisAdjustBufferLength(
1726 IN PNDIS_BUFFER Buffer,
1727 IN UINT Length);
1728
1729 ULONG
1730 EXPIMP
1731 NDIS_BUFFER_TO_SPAN_PAGES(
1732 IN PNDIS_BUFFER Buffer);
1733
1734 VOID
1735 EXPIMP
1736 NdisFreeBuffer(
1737 IN PNDIS_BUFFER Buffer);
1738
1739 VOID
1740 EXPIMP
1741 NdisGetBufferPhysicalArraySize(
1742 IN PNDIS_BUFFER Buffer,
1743 OUT PUINT ArraySize);
1744
1745 VOID
1746 EXPIMP
1747 NdisGetFirstBufferFromPacket(
1748 IN PNDIS_PACKET _Packet,
1749 OUT PNDIS_BUFFER *_FirstBuffer,
1750 OUT PVOID *_FirstBufferVA,
1751 OUT PUINT _FirstBufferLength,
1752 OUT PUINT _TotalBufferLength);
1753
1754 VOID
1755 EXPIMP
1756 NdisQueryBuffer(
1757 IN PNDIS_BUFFER Buffer,
1758 OUT PVOID *VirtualAddress OPTIONAL,
1759 OUT PUINT Length);
1760
1761 VOID
1762 EXPIMP
1763 NdisQueryBufferOffset(
1764 IN PNDIS_BUFFER Buffer,
1765 OUT PUINT Offset,
1766 OUT PUINT Length);
1767
1768 #else /* BINARY_COMPATIBLE */
1769
1770 /*
1771 * PVOID NdisAdjustBufferLength(
1772 * IN PNDIS_BUFFER Buffer,
1773 * IN UINT Length);
1774 */
1775 #define NdisAdjustBufferLength(Buffer, \
1776 Length) \
1777 { \
1778 (Buffer)->ByteCount = (Length); \
1779 }
1780
1781
1782 /*
1783 * ULONG NDIS_BUFFER_TO_SPAN_PAGES(
1784 * IN PNDIS_BUFFER Buffer);
1785 */
1786 #define NDIS_BUFFER_TO_SPAN_PAGES(Buffer) \
1787 ( \
1788 MmGetMdlByteCount(Buffer) == 0 ? \
1789 1 : \
1790 ADDRESS_AND_SIZE_TO_SPAN_PAGES( \
1791 MmGetMdlVirtualAddress(Buffer), \
1792 MmGetMdlByteCount(Buffer)) \
1793 )
1794
1795
1796 #if 0
1797
1798 /*
1799 * VOID NdisFreeBuffer(
1800 * IN PNDIS_BUFFER Buffer);
1801 */
1802 #define NdisFreeBuffer(Buffer) \
1803 { \
1804 IoFreeMdl(Buffer) /* ??? */ \
1805 }
1806
1807 #else
1808
1809 VOID
1810 EXPIMP
1811 NdisFreeBuffer(
1812 IN PNDIS_BUFFER Buffer);
1813
1814 #endif
1815
1816
1817 /*
1818 * VOID NdisGetBufferPhysicalArraySize(
1819 * IN PNDIS_BUFFER Buffer,
1820 * OUT PUINT ArraySize);
1821 */
1822 #define NdisGetBufferPhysicalArraySize(Buffer, \
1823 ArraySize) \
1824 { \
1825 }
1826
1827
1828 /*
1829 * VOID NdisGetFirstBufferFromPacket(
1830 * IN PNDIS_PACKET _Packet,
1831 * OUT PNDIS_BUFFER * _FirstBuffer,
1832 * OUT PVOID * _FirstBufferVA,
1833 * OUT PUINT _FirstBufferLength,
1834 * OUT PUINT _TotalBufferLength)
1835 */
1836 #define NdisGetFirstBufferFromPacket(Packet, \
1837 FirstBuffer, \
1838 FirstBufferVA, \
1839 FirstBufferLength, \
1840 TotalBufferLength) \
1841 { \
1842 PNDIS_BUFFER _Buffer; \
1843 \
1844 _Buffer = (Packet)->Private.Head; \
1845 *(FirstBuffer) = _Buffer; \
1846 *(FirstBufferVA) = MmGetMdlVirtualAddress(_Buffer); \
1847 if (_Buffer != NULL) { \
1848 *(FirstBufferLength) = MmGetMdlByteCount(_Buffer); \
1849 _Buffer = _Buffer->Next; \
1850 } else \
1851 *(FirstBufferLength) = 0; \
1852 *(TotalBufferLength) = *(FirstBufferLength); \
1853 while (_Buffer != NULL) { \
1854 *(TotalBufferLength) += MmGetMdlByteCount(_Buffer); \
1855 _Buffer = _Buffer->Next; \
1856 } \
1857 }
1858
1859 /*
1860 * VOID NdisQueryBuffer(
1861 * IN PNDIS_BUFFER Buffer,
1862 * OUT PVOID *VirtualAddress OPTIONAL,
1863 * OUT PUINT Length)
1864 */
1865 #define NdisQueryBuffer(Buffer, \
1866 VirtualAddress, \
1867 Length) \
1868 { \
1869 if (VirtualAddress != NULL) \
1870 *(PVOID*)(VirtualAddress) = MmGetSystemAddressForMdl(Buffer); \
1871 \
1872 *(Length) = MmGetMdlByteCount(Buffer); \
1873 }
1874
1875
1876 /*
1877 * VOID NdisQueryBufferOffset(
1878 * IN PNDIS_BUFFER Buffer,
1879 * OUT PUINT Offset,
1880 * OUT PUINT Length);
1881 */
1882 #define NdisQueryBufferOffset(Buffer, \
1883 Offset, \
1884 Length) \
1885 { \
1886 *(PUINT)(Offset) = MmGetMdlByteOffset(Buffer); \
1887 *(PUINT)(Length) = MmGetMdlByteCount(Buffer); \
1888 }
1889
1890 #endif /* BINARY_COMPATIBLE */
1891
1892
1893 /*
1894 * PVOID NDIS_BUFFER_LINKAGE(
1895 * IN PNDIS_BUFFER Buffer);
1896 */
1897 #define NDIS_BUFFER_LINKAGE(Buffer) \
1898 { \
1899 (Buffer)->Next; \
1900 }
1901
1902
1903 /*
1904 * VOID NdisChainBufferAtBack(
1905 * IN OUT PNDIS_PACKET Packet,
1906 * IN OUT PNDIS_BUFFER Buffer)
1907 */
1908 #define NdisChainBufferAtBack(Packet, \
1909 Buffer) \
1910 { \
1911 PNDIS_BUFFER NdisBuffer = (Buffer); \
1912 \
1913 while (NdisBuffer->Next != NULL) \
1914 NdisBuffer = NdisBuffer->Next; \
1915 \
1916 NdisBuffer->Next = NULL; \
1917 \
1918 if ((Packet)->Private.Head != NULL) \
1919 (Packet)->Private.Tail->Next = (Buffer); \
1920 else \
1921 (Packet)->Private.Head = (Buffer); \
1922 \
1923 (Packet)->Private.Tail = NdisBuffer; \
1924 (Packet)->Private.ValidCounts = FALSE; \
1925 }
1926
1927
1928 /*
1929 * VOID NdisChainBufferAtFront(
1930 * IN OUT PNDIS_PACKET Packet,
1931 * IN OUT PNDIS_BUFFER Buffer)
1932 */
1933 #define NdisChainBufferAtFront(Packet, \
1934 Buffer) \
1935 { \
1936 PNDIS_BUFFER _NdisBuffer = (Buffer); \
1937 \
1938 while (_NdisBuffer->Next != NULL) \
1939 _NdisBuffer = _NdisBuffer->Next; \
1940 \
1941 if ((Packet)->Private.Head == NULL) \
1942 (Packet)->Private.Tail = _NdisBuffer; \
1943 \
1944 _NdisBuffer->Next = (Packet)->Private.Head; \
1945 (Packet)->Private.Head = (Buffer); \
1946 (Packet)->Private.ValidCounts = FALSE; \
1947 }
1948
1949
1950 /*
1951 * VOID NdisGetNextBuffer(
1952 * IN PNDIS_BUFFER CurrentBuffer,
1953 * OUT PNDIS_BUFFER * NextBuffer)
1954 */
1955 #define NdisGetNextBuffer(CurrentBuffer, \
1956 NextBuffer) \
1957 { \
1958 *(NextBuffer) = (CurrentBuffer)->Next; \
1959 }
1960
1961
1962 /*
1963 * UINT NdisGetPacketFlags(
1964 * IN PNDIS_PACKET Packet);
1965 */
1966 #define NdisGetPacketFlags(Packet) \
1967 { \
1968 (Packet)->Private.Flags; \
1969 }
1970
1971
1972 /*
1973 * UINT NDIS_GET_PACKET_HEADER_SIZE(
1974 * IN PNDIS_PACKET Packet);
1975 */
1976 #define NDIS_GET_PACKET_HEADER_SIZE(Packet) \
1977 { \
1978 }
1979
1980
1981 /*
1982 * VOID NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(
1983 * IN PNDIS_PACKET Packet,
1984 * IN PPVOID pMediaSpecificInfo,
1985 * IN PUINT pSizeMediaSpecificInfo);
1986 */
1987 #define NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(Packet, \
1988 pMediaSpecificInfo, \
1989 pSizeMediaSpecificInfo) \
1990 { \
1991 }
1992
1993
1994 /*
1995 * VOID NDIS_STATUS NDIS_GET_PACKET_STATUS(
1996 * IN PNDIS_PACKET Packet);
1997 */
1998 #define NDIS_GET_PACKET_STATUS (Packet) \
1999 { \
2000 }
2001
2002
2003 /*
2004 * ULONGLONG NDIS_GET_PACKET_TIME_RECEIVED(
2005 * IN PNDIS_PACKET Packet);
2006 */
2007 #define NDIS_GET_PACKET_TIME_RECEIVED(Packet) \
2008 { \
2009 }
2010
2011
2012 /*
2013 * ULONGLONG NDIS_GET_PACKET_TIME_SENT(
2014 * IN PNDIS_PACKET Packet);
2015 */
2016 #define NDIS_GET_PACKET_TIME_SENT(Packet) \
2017 { \
2018 }
2019
2020
2021 /*
2022 * ULONGLONG NDIS_GET_PACKET_TIME_TO_SEND(
2023 * IN PNDIS_PACKET Packet);
2024 */
2025 #define NDIS_GET_PACKET_TIME_TO_SEND(Packet) \
2026 { \
2027 }
2028
2029
2030 /*
2031 * PNDIS_PACKET_OOB_DATA NDIS_OOB_DATA_FROM_PACKET(
2032 * IN PNDIS_PACKET _Packet);
2033 */
2034 #define NDIS_OOB_DATA_FROM_PACKET(_Packet) \
2035 { \
2036 }
2037
2038
2039 /*
2040 * VOID NdisQueryPacket(
2041 * IN PNDIS_PACKET Packet,
2042 * OUT PUINT PhysicalBufferCount OPTIONAL,
2043 * OUT PUINT BufferCount OPTIONAL,
2044 * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
2045 * OUT PUINT TotalPacketLength OPTIONAL);
2046 */
2047 #define NdisQueryPacket(Packet, \
2048 PhysicalBufferCount, \
2049 BufferCount, \
2050 FirstBuffer, \
2051 TotalPacketLength) \
2052 { \
2053 if ((FirstBuffer) != NULL) \
2054 *(FirstBuffer) = (Packet)->Private.Head; \
2055 if ((TotalPacketLength) || (BufferCount) || (PhysicalBufferCount)) { \
2056 if (!(Packet)->Private.ValidCounts) { \
2057 UINT _Offset; \
2058 UINT _PacketLength; \
2059 PNDIS_BUFFER _NdisBuffer; \
2060 UINT _PhysicalBufferCount = 0; \
2061 UINT _TotalPacketLength = 0; \
2062 UINT _Count = 0; \
2063 \
2064 for (_NdisBuffer = (Packet)->Private.Head; \
2065 _NdisBuffer != (PNDIS_BUFFER)NULL; \
2066 _NdisBuffer = _NdisBuffer->Next) { \
2067 _PhysicalBufferCount += NDIS_BUFFER_TO_SPAN_PAGES(_NdisBuffer); \
2068 NdisQueryBufferOffset(_NdisBuffer, &_Offset, &_PacketLength); \
2069 _TotalPacketLength += _PacketLength; \
2070 _Count++; \
2071 } \
2072 (Packet)->Private.PhysicalCount = _PhysicalBufferCount; \
2073 (Packet)->Private.TotalLength = _TotalPacketLength; \
2074 (Packet)->Private.Count = _Count; \
2075 (Packet)->Private.ValidCounts = TRUE; \
2076 } \
2077 \
2078 if (PhysicalBufferCount) \
2079 *(PUINT)(PhysicalBufferCount) = (Packet)->Private.PhysicalCount; \
2080 \
2081 if (BufferCount) \
2082 *(PUINT)(BufferCount) = (Packet)->Private.Count; \
2083 \
2084 if (TotalPacketLength) \
2085 *(PUINT)(TotalPacketLength) = (Packet)->Private.TotalLength; \
2086 } \
2087 }
2088
2089 /*
2090 * VOID NdisRecalculatePacketCounts(
2091 * IN OUT PNDIS_PACKET Packet);
2092 */
2093 #define NdisRecalculatePacketCounts(Packet) \
2094 { \
2095 }
2096
2097
2098 /*
2099 * VOID NdisReinitializePacket(
2100 * IN OUT PNDIS_PACKET Packet);
2101 */
2102 #define NdisReinitializePacketCounts(Packet) \
2103 { \
2104 }
2105
2106
2107 /*
2108 * VOID NdisSetPacketFlags(
2109 * IN PNDIS_PACKET Packet,
2110 * IN UINT Flags);
2111 */
2112 #define NdisSetPacketFlags(Packet, Flags) \
2113 (Packet)->Private.Flags = (Flags);
2114
2115
2116 /*
2117 * NDIS_SET_PACKET_HEADER_SIZE(
2118 * IN PNDIS_PACKET Packet,
2119 * IN UINT HdrSize);
2120 */
2121 #define NDIS_SET_PACKET_HEADER_SIZE(Packet, \
2122 HdrSize) \
2123 { \
2124 }
2125
2126
2127 /*
2128 * NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(
2129 * IN PNDIS_PACKET Packet,
2130 * IN PVOID MediaSpecificInfo,
2131 * IN UINT SizeMediaSpecificInfo);
2132 */
2133 #define NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(Packet, \
2134 MediaSpecificInfo, \
2135 SizeMediaSpecificInfo) \
2136 { \
2137 }
2138
2139
2140 /*
2141 * NDIS_SET_PACKET_STATUS(
2142 * IN PNDIS_PACKET Packet,
2143 * IN NDIS_STATUS Status);
2144 */
2145 #define NDIS_SET_PACKET_STATUS(Packet, \
2146 Status) \
2147 { \
2148 }
2149
2150
2151 /*
2152 * NDIS_SET_PACKET_TIME_RECEIVED(
2153 * IN PNDIS_PACKET Packet,
2154 * IN ULONGLONG TimeReceived);
2155 */
2156 #define NDIS_SET_PACKET_TIME_RECEIVED(Packet) \
2157 TimeReceived) \
2158 { \
2159 }
2160
2161
2162 /*
2163 * NDIS_SET_PACKET_TIME_SENT(
2164 * IN PNDIS_PACKET Packet,
2165 * IN ULONGLONG TimeSent);
2166 */
2167 #define NDIS_SET_PACKET_TIME_SENT(Packet, \
2168 TimeSent) \
2169 { \
2170 }
2171
2172
2173 /*
2174 *
2175 * NDIS_SET_PACKET_TIME_TO_SEND(
2176 * IN PNDIS_PACKET Packet,
2177 * IN ULONGLONG TimeToSend);
2178 */
2179 #define NDIS_SET_PACKET_TIME_TO_SEND(Packet, \
2180 TimeToSend) \
2181 { \
2182 }
2183
2184
2185 /*
2186 * VOID NdisSetSendFlags(
2187 * IN PNDIS_PACKET Packet,
2188 * IN UINT Flags);
2189 */
2190 #define NdisSetSendFlags(Packet, Flags)( \
2191 NdisSetPacketFlags((Packet), (Flags)))
2192
2193
2194
2195 /* Memory management routines */
2196
2197 VOID
2198 EXPIMP
2199 NdisCreateLookaheadBufferFromSharedMemory(
2200 IN PVOID pSharedMemory,
2201 IN UINT LookaheadLength,
2202 OUT PVOID *pLookaheadBuffer);
2203
2204 VOID
2205 EXPIMP
2206 NdisDestroyLookaheadBufferFromSharedMemory(
2207 IN PVOID pLookaheadBuffer);
2208
2209 VOID
2210 EXPIMP
2211 NdisMoveFromMappedMemory(
2212 OUT PVOID Destination,
2213 IN PVOID Source,
2214 IN ULONG Length);
2215
2216 VOID
2217 EXPIMP
2218 NdisMoveMappedMemory(
2219 OUT PVOID Destination,
2220 IN PVOID Source,
2221 IN ULONG Length);
2222
2223 VOID
2224 EXPIMP
2225 NdisMoveToMappedMemory(
2226 OUT PVOID Destination,
2227 IN PVOID Source,
2228 IN ULONG Length);
2229
2230 VOID
2231 EXPIMP
2232 NdisMUpdateSharedMemory(
2233 IN NDIS_HANDLE MiniportAdapterHandle,
2234 IN ULONG Length,
2235 IN PVOID VirtualAddress,
2236 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2237
2238 NDIS_STATUS
2239 EXPIMP
2240 NdisAllocateMemory(
2241 OUT PVOID *VirtualAddress,
2242 IN UINT Length,
2243 IN UINT MemoryFlags,
2244 IN NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress);
2245
2246 VOID
2247 EXPIMP
2248 NdisFreeMemory(
2249 IN PVOID VirtualAddress,
2250 IN UINT Length,
2251 IN UINT MemoryFlags);
2252
2253 VOID
2254 EXPIMP
2255 NdisImmediateReadSharedMemory(
2256 IN NDIS_HANDLE WrapperConfigurationContext,
2257 IN ULONG SharedMemoryAddress,
2258 OUT PUCHAR Buffer,
2259 IN ULONG Length);
2260
2261 VOID
2262 EXPIMP
2263 NdisImmediateWriteSharedMemory(
2264 IN NDIS_HANDLE WrapperConfigurationContext,
2265 IN ULONG SharedMemoryAddress,
2266 IN PUCHAR Buffer,
2267 IN ULONG Length);
2268
2269 VOID
2270 EXPIMP
2271 NdisMAllocateSharedMemory(
2272 IN NDIS_HANDLE MiniportAdapterHandle,
2273 IN ULONG Length,
2274 IN BOOLEAN Cached,
2275 OUT PVOID *VirtualAddress,
2276 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
2277
2278 NDIS_STATUS
2279 EXPIMP
2280 NdisMAllocateSharedMemoryAsync(
2281 IN NDIS_HANDLE MiniportAdapterHandle,
2282 IN ULONG Length,
2283 IN BOOLEAN Cached,
2284 IN PVOID Context);
2285
2286 VOID
2287 EXPIMP
2288 NdisMFreeSharedMemory(
2289 IN NDIS_HANDLE MiniportAdapterHandle,
2290 IN ULONG Length,
2291 IN BOOLEAN Cached,
2292 IN PVOID VirtualAddress,
2293 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2294
2295 VOID
2296 EXPIMP
2297 NdisUpdateSharedMemory(
2298 IN NDIS_HANDLE NdisAdapterHandle,
2299 IN ULONG Length,
2300 IN PVOID VirtualAddress,
2301 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2302
2303
2304 /*
2305 * ULONG NdisGetPhysicalAddressHigh(
2306 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2307 */
2308 #define NdisGetPhysicalAddressHigh(PhysicalAddress) \
2309 ((PhysicalAddress).HighPart)
2310
2311 /*
2312 * VOID NdisSetPhysicalAddressHigh(
2313 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
2314 * IN ULONG Value);
2315 */
2316 #define NdisSetPhysicalAddressHigh(PhysicalAddress, Value) \
2317 ((PhysicalAddress).HighPart) = (Value)
2318
2319 /*
2320 * ULONG NdisGetPhysicalAddressLow(
2321 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2322 */
2323 #define NdisGetPhysicalAddressLow(PhysicalAddress) \
2324 ((PhysicalAddress).LowPart)
2325
2326
2327 /*
2328 * VOID NdisSetPhysicalAddressLow(
2329 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
2330 * IN ULONG Value);
2331 */
2332 #define NdisSetPhysicalAddressLow(PhysicalAddress, Value) \
2333 ((PhysicalAddress).LowPart) = (Value)
2334
2335 /*
2336 * VOID NDIS_PHYSICAL_ADDRESS_CONST(
2337 * IN ULONG Low,
2338 * IN LONG High);
2339 */
2340 #define NDIS_PHYSICAL_ADDRESS_CONST(Low, High) \
2341 { {(ULONG)(Low), (LONG)(High)} }
2342
2343
2344 /*
2345 * VOID NdisMoveMemory(
2346 * OUT PVOID Destination,
2347 * IN PVOID Source,
2348 * IN ULONG Length);
2349 */
2350 #define NdisMoveMemory(Destination, Source, Length) \
2351 RtlCopyMemory(Destination, Source, Length)
2352
2353
2354 /*
2355 * VOID NdisRetrieveUlong(
2356 * IN PULONG DestinationAddress,
2357 * IN PULONG SourceAddress);
2358 */
2359 #define NdisRetrieveUlong(DestinationAddress, SourceAddress) \
2360 RtlRetrieveUlong(DestinationAddress, SourceAddress)
2361
2362
2363 /*
2364 * VOID NdisStoreUlong(
2365 * IN PULONG DestinationAddress,
2366 * IN ULONG Value);
2367 */
2368 #define NdisStoreUlong(DestinationAddress, Value) \
2369 RtlStoreUlong(DestinationAddress, Value)
2370
2371
2372 /*
2373 * VOID NdisZeroMemory(
2374 * IN PVOID Destination,
2375 * IN ULONG Length)
2376 */
2377 #define NdisZeroMemory(Destination, Length) \
2378 RtlZeroMemory(Destination, Length)
2379
2380
2381
2382 /* String management routines */
2383
2384 #if BINARY_COMPATIBLE
2385
2386 NDIS_STATUS
2387 EXPIMP
2388 NdisAnsiStringToUnicodeString(
2389 IN OUT PNDIS_STRING DestinationString,
2390 IN PNDIS_ANSI_STRING SourceString);
2391
2392 BOOLEAN
2393 EXPIMP
2394 NdisEqualString(
2395 IN PNDIS_STRING String1,
2396 IN PNDIS_STRING String2,
2397 IN BOOLEAN CaseInsensitive);
2398
2399 VOID
2400 EXPIMP
2401 NdisInitAnsiString(
2402 IN OUT PNDIS_ANSI_STRING DestinationString,
2403 IN PCSTR SourceString);
2404
2405 VOID
2406 EXPIMP
2407 NdisInitUnicodeString(
2408 IN OUT PNDIS_STRING DestinationString,
2409 IN PCWSTR SourceString);
2410
2411 NDIS_STATUS
2412 EXPIMP
2413 NdisUnicodeStringToAnsiString(
2414 IN OUT PNDIS_ANSI_STRING DestinationString,
2415 IN PNDIS_STRING SourceString);
2416
2417 #else /* BINARY_COMPATIBLE */
2418
2419 /*
2420 * NDIS_STATUS NdisAnsiStringToUnicodeString(
2421 * IN OUT PNDIS_STRING DestinationString,
2422 * IN PNDIS_ANSI_STRING SourceString);
2423 */
2424 #define NdisAnsiStringToUnicodeString(DestinationString, \
2425 SourceString) \
2426 RtlAnsiStringToUnicodeString((DestinationString), (SourceString), FALSE)
2427
2428 /*
2429 * BOOLEAN NdisEqualString(
2430 * IN PNDIS_STRING String1,
2431 * IN PNDIS_STRING String2,
2432 * IN BOOLEAN CaseInsensitive)
2433 */
2434 #define NdisEqualString(String1, \
2435 String2, \
2436 CaseInsensitive) \
2437 RtlEqualUnicodeString((String1), (String2), (CaseInsensitive))
2438
2439 /*
2440 * VOID NdisInitAnsiString(
2441 * IN OUT PNDIS_ANSI_STRING DestinationString,
2442 * IN PCSTR SourceString)
2443 */
2444 #define NdisInitAnsiString(DestinationString, \
2445 SourceString) \
2446 RtlInitString((DestinationString), (SourceString))
2447
2448 /*
2449 * VOID NdisInitUnicodeString(
2450 * IN OUT PNDIS_STRING DestinationString,
2451 * IN PCWSTR SourceString)
2452 */
2453 #define NdisInitUnicodeString(DestinationString, \
2454 SourceString) \
2455 RtlInitUnicodeString((DestinationString), (SourceString))
2456
2457 /*
2458 * NDIS_STATUS NdisUnicodeStringToAnsiString(
2459 * IN OUT PNDIS_ANSI_STRING DestinationString,
2460 * IN PNDIS_STRING SourceString)
2461 */
2462 #define NdisUnicodeStringToAnsiString(DestinationString, \
2463 SourceString) \
2464 RtlUnicodeStringToAnsiString((DestinationString), (SourceString), FALSE)
2465
2466 #endif /* BINARY_COMPATIBLE */
2467
2468 #define NdisFreeString(_s) NdisFreeMemory((s).Buffer, (s).MaximumLength, 0)
2469 #define NdisPrintString(_s) DbgPrint("%ls", (s).Buffer)
2470
2471
2472
2473 /* I/O routines */
2474
2475 /*
2476 * VOID NdisRawReadPortBufferUchar(
2477 * IN ULONG Port,
2478 * OUT PUCHAR Buffer,
2479 * IN ULONG Length);
2480 */
2481 #define NdisRawReadPortBufferUchar(Port, Buffer, Length) \
2482 READ_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
2483
2484 /*
2485 * VOID NdisRawReadPortBufferUlong(
2486 * IN ULONG Port,
2487 * OUT PULONG Buffer,
2488 * IN ULONG Length);
2489 */
2490 #define NdisRawReadPortBufferUlong(Port, Buffer, Length) \
2491 READ_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
2492
2493 /*
2494 * VOID NdisRawReadPortBufferUshort(
2495 * IN ULONG Port,
2496 * OUT PUSHORT Buffer,
2497 * IN ULONG Length);
2498 */
2499 #define NdisRawReadPortBufferUshort(Port, Buffer, Length) \
2500 READ_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
2501
2502
2503 /*
2504 * VOID NdisRawReadPortUchar(
2505 * IN ULONG Port,
2506 * OUT PUCHAR Data);
2507 */
2508 #define NdisRawReadPortUchar(Port, Data) \
2509 *(Data) = READ_PORT_UCHAR((PUCHAR)(Port))
2510
2511 /*
2512 * VOID NdisRawReadPortUlong(
2513 * IN ULONG Port,
2514 * OUT PULONG Data);
2515 */
2516 #define NdisRawReadPortUlong(Port, Data) \
2517 *(Data) = READ_PORT_ULONG((PULONG)(Port))
2518
2519 /*
2520 * VOID NdisRawReadPortUshort(
2521 * IN ULONG Port,
2522 * OUT PUSHORT Data);
2523 */
2524 #define NdisRawReadPortUshort(Port, Data) \
2525 *(Data) = READ_PORT_USHORT((PUSHORT)(Port))
2526
2527
2528 /*
2529 * VOID NdisRawWritePortBufferUchar(
2530 * IN ULONG Port,
2531 * IN PUCHAR Buffer,
2532 * IN ULONG Length);
2533 */
2534 #define NdisRawWritePortBufferUchar(Port, Buffer, Length) \
2535 WRITE_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
2536
2537 /*
2538 * VOID NdisRawWritePortBufferUlong(
2539 * IN ULONG Port,
2540 * IN PULONG Buffer,
2541 * IN ULONG Length);
2542 */
2543 #define NdisRawWritePortBufferUlong(Port, Buffer, Length) \
2544 WRITE_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
2545
2546 /*
2547 * VOID NdisRawWritePortBufferUshort(
2548 * IN ULONG Port,
2549 * IN PUSHORT Buffer,
2550 * IN ULONG Length);
2551 */
2552 #define NdisRawWritePortBufferUshort(Port, Buffer, Length) \
2553 WRITE_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
2554
2555
2556 /*
2557 * VOID NdisRawWritePortUchar(
2558 * IN ULONG Port,
2559 * IN UCHAR Data);
2560 */
2561 #define NdisRawWritePortUchar(Port, Data) \
2562 WRITE_PORT_UCHAR((PUCHAR)(Port), (UCHAR)(Data))
2563
2564 /*
2565 * VOID NdisRawWritePortUlong(
2566 * IN ULONG Port,
2567 * IN ULONG Data);
2568 */
2569 #define NdisRawWritePortUlong(Port, Data) \
2570 WRITE_PORT_ULONG((PULONG)(Port), (ULONG)(Data))
2571
2572 /*
2573 * VOID NdisRawWritePortUshort(
2574 * IN ULONG Port,
2575 * IN USHORT Data);
2576 */
2577 #define NdisRawWritePortUshort(Port, Data) \
2578 WRITE_PORT_USHORT((PUSHORT)(Port), (USHORT)(Data))
2579
2580
2581 /*
2582 * VOID NdisReadRegisterUchar(
2583 * IN PUCHAR Register,
2584 * OUT PUCHAR Data);
2585 */
2586 #define NdisReadRegisterUchar(Register, Data) \
2587 *((PUCHAR)(Data)) = *(Register)
2588
2589 /*
2590 * VOID NdisReadRegisterUlong(
2591 * IN PULONG Register,
2592 * OUT PULONG Data);
2593 */
2594 #define NdisReadRegisterUlong(Register, Data) \
2595 *((PULONG)(Data)) = *(Register)
2596
2597 /*
2598 * VOID NdisReadRegisterUshort(
2599 * IN PUSHORT Register,
2600 * OUT PUSHORT Data);
2601 */
2602 #define NdisReadRegisterUshort(Register, Data) \
2603 *((PUSHORT)(Data)) = *(Register)
2604
2605
2606 /*
2607 * VOID NdisReadRegisterUchar(
2608 * IN PUCHAR Register,
2609 * IN UCHAR Data);
2610 */
2611 #define NdisWriteRegisterUchar(Register, Data) \
2612 WRITE_REGISTER_UCHAR((Register), (Data))
2613
2614 /*
2615 * VOID NdisReadRegisterUlong(
2616 * IN PULONG Register,
2617 * IN ULONG Data);
2618 */
2619 #define NdisWriteRegisterUlong(Register, Data) \
2620 WRITE_REGISTER_ULONG((Register), (Data))
2621
2622 /*
2623 * VOID NdisReadRegisterUshort(
2624 * IN PUSHORT Register,
2625 * IN USHORT Data);
2626 */
2627 #define NdisWriteRegisterUshort(Register, Data) \
2628 WRITE_REGISTER_USHORT((Register), (Data))
2629
2630
2631
2632 VOID
2633 EXPIMP
2634 NdisCloseAdapter(
2635 OUT PNDIS_STATUS Status,
2636 IN NDIS_HANDLE NdisBindingHandle);
2637
2638 VOID
2639 EXPIMP
2640 NdisCloseConfiguration(
2641 IN NDIS_HANDLE ConfigurationHandle);
2642
2643 VOID
2644 EXPIMP
2645 NdisCompleteBindAdapter(
2646 IN NDIS_HANDLE BindAdapterContext,
2647 IN NDIS_STATUS Status,
2648 IN NDIS_STATUS OpenStatus);
2649
2650 VOID
2651 EXPIMP
2652 NdisCompleteUnbindAdapter(
2653 IN NDIS_HANDLE UnbindAdapterContext,
2654 IN NDIS_STATUS Status);
2655
2656 VOID
2657 EXPIMP
2658 NdisDeregisterProtocol(
2659 OUT PNDIS_STATUS Status,
2660 IN NDIS_HANDLE NdisProtocolHandle);
2661
2662 VOID
2663 EXPIMP
2664 NdisInitializeListHead(
2665 IN PLIST_ENTRY ListHead);
2666
2667 VOID
2668 EXPIMP
2669 NdisInterlockedAddUlong(
2670 IN PULONG Addend,
2671 IN ULONG Increment,
2672 IN PNDIS_SPIN_LOCK SpinLock);
2673
2674 PLIST_ENTRY
2675 EXPIMP
2676 NdisInterlockedInsertHeadList(
2677 IN PLIST_ENTRY ListHead,
2678 IN PLIST_ENTRY ListEntry,
2679 IN PNDIS_SPIN_LOCK SpinLock);
2680
2681 PLIST_ENTRY
2682 EXPIMP
2683 NdisInterlockedInsertTailList(
2684 IN PLIST_ENTRY ListHead,
2685 IN PLIST_ENTRY ListEntry,
2686 IN PNDIS_SPIN_LOCK SpinLock);
2687
2688 PLIST_ENTRY
2689 EXPIMP
2690 NdisInterlockedRemoveHeadList(
2691 IN PLIST_ENTRY ListHead,
2692 IN PNDIS_SPIN_LOCK SpinLock);
2693
2694 VOID
2695 EXPIMP
2696 NdisOpenAdapter(
2697 OUT PNDIS_STATUS Status,
2698 OUT PNDIS_STATUS OpenErrorStatus,
2699 OUT PNDIS_HANDLE NdisBindingHandle,
2700 OUT PUINT SelectedMediumIndex,
2701 IN PNDIS_MEDIUM MediumArray,
2702 IN UINT MediumArraySize,
2703 IN NDIS_HANDLE NdisProtocolHandle,
2704 IN NDIS_HANDLE ProtocolBindingContext,
2705 IN PNDIS_STRING AdapterName,
2706 IN UINT OpenOptions,
2707 IN PSTRING AddressingInformation);
2708
2709 VOID
2710 EXPIMP
2711 NdisOpenProtocolConfiguration(
2712 OUT PNDIS_STATUS Status,
2713 OUT PNDIS_HANDLE ConfigurationHandle,
2714 IN PNDIS_STRING ProtocolSection);
2715
2716 NDIS_STATUS
2717 EXPIMP
2718 NdisQueryReceiveInformation(
2719 IN NDIS_HANDLE NdisBindingHandle,
2720 IN NDIS_HANDLE MacContext,
2721 OUT PLONGLONG TimeSent OPTIONAL,
2722 OUT PLONGLONG TimeReceived OPTIONAL,
2723 IN PUCHAR Buffer,
2724 IN UINT BufferSize,
2725 OUT PUINT SizeNeeded);
2726
2727 VOID
2728 EXPIMP
2729 NdisReadConfiguration(
2730 OUT PNDIS_STATUS Status,
2731 OUT PNDIS_CONFIGURATION_PARAMETER *ParameterValue,
2732 IN NDIS_HANDLE ConfigurationHandle,
2733 IN PNDIS_STRING Keyword,
2734 IN NDIS_PARAMETER_TYPE ParameterType);
2735
2736 VOID
2737 EXPIMP
2738 NdisRegisterProtocol(
2739 OUT PNDIS_STATUS Status,
2740 OUT PNDIS_HANDLE NdisProtocolHandle,
2741 IN PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics,
2742 IN UINT CharacteristicsLength);
2743
2744 VOID
2745 EXPIMP
2746 NdisRequest(
2747 OUT PNDIS_STATUS Status,
2748 IN NDIS_HANDLE NdisBindingHandle,
2749 IN PNDIS_REQUEST NdisRequest);
2750
2751 VOID
2752 EXPIMP
2753 NdisReset(
2754 OUT PNDIS_STATUS Status,
2755 IN NDIS_HANDLE NdisBindingHandle);
2756
2757 VOID
2758 EXPIMP
2759 NdisReturnPackets(
2760 IN PNDIS_PACKET *PacketsToReturn,
2761 IN UINT NumberOfPackets);
2762
2763 VOID
2764 EXPIMP
2765 NdisSend(
2766 OUT PNDIS_STATUS Status,
2767 IN NDIS_HANDLE NdisBindingHandle,
2768 IN PNDIS_PACKET Packet);
2769
2770 VOID
2771 EXPIMP
2772 NdisSendPackets(
2773 IN NDIS_HANDLE NdisBindingHandle,
2774 IN PPNDIS_PACKET PacketArray,
2775 IN UINT NumberOfPackets);
2776
2777 VOID
2778 EXPIMP
2779 NdisTransferData(
2780 OUT PNDIS_STATUS Status,
2781 IN NDIS_HANDLE NdisBindingHandle,
2782 IN NDIS_HANDLE MacReceiveContext,
2783 IN UINT ByteOffset,
2784 IN UINT BytesToTransfer,
2785 IN OUT PNDIS_PACKET Packet,
2786 OUT PUINT BytesTransferred);
2787
2788 VOID
2789 EXPIMP
2790 NdisWriteConfiguration(
2791 OUT PNDIS_STATUS Status,
2792 IN NDIS_HANDLE WrapperConfigurationContext,
2793 IN PNDIS_STRING Keyword,
2794 IN PNDIS_CONFIGURATION_PARAMETER *ParameterValue);
2795
2796 /*
2797 VOID
2798 EXPIMP
2799 NdisWriteErrorLogEntry(
2800 IN NDIS_HANDLE NdisAdapterHandle,
2801 IN NDIS_ERROR_CODE ErrorCode,
2802 IN ULONG NumberOfErrorValues,
2803 IN ULONG ...);
2804 */
2805
2806
2807
2808 /*
2809 * VOID NdisStallExecution(
2810 * IN UINT MicrosecondsToStall)
2811 */
2812 #define NdisStallExecution(MicroSecondsToStall) \
2813 KeStallExecutionProcessor(MicroSecondsToStall)
2814
2815
2816
2817 /* NDIS helper macros */
2818
2819 /*
2820 * NDIS_INIT_FUNCTION(FunctionName)
2821 */
2822 #define NDIS_INIT_FUNCTION(FunctionName) \
2823 alloc_text(init, FunctionName)
2824
2825 /*
2826 * NDIS_PAGABLE_FUNCTION(FunctionName)
2827 */
2828 #define NDIS_PAGABLE_FUNCTION(FunctionName) \
2829 alloc_text(page, FunctionName)
2830
2831
2832
2833 /* NDIS 4.0 extensions */
2834
2835 #ifdef NDIS40
2836
2837 VOID
2838 EXPIMP
2839 NdisMFreeSharedMemory(
2840 IN NDIS_HANDLE MiniportAdapterHandle,
2841 IN ULONG Length,
2842 IN BOOLEAN Cached,
2843 IN PVOID VirtualAddress,
2844 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2845
2846 VOID
2847 EXPIMP
2848 NdisMWanIndicateReceive(
2849 OUT PNDIS_STATUS Status,
2850 IN NDIS_HANDLE MiniportAdapterHandle,
2851 IN NDIS_HANDLE NdisLinkContext,
2852 IN PUCHAR PacketBuffer,
2853 IN UINT PacketSize);
2854
2855 VOID
2856 EXPIMP
2857 NdisMWanIndicateReceiveComplete(
2858 IN NDIS_HANDLE MiniportAdapterHandle);
2859
2860 VOID
2861 EXPIMP
2862 NdisMWanSendComplete(
2863 IN NDIS_HANDLE MiniportAdapterHandle,
2864 IN PNDIS_WAN_PACKET Packet,
2865 IN NDIS_STATUS Status);
2866
2867 NDIS_STATUS
2868 EXPIMP
2869 NdisPciAssignResources(
2870 IN NDIS_HANDLE NdisMacHandle,
2871 IN NDIS_HANDLE NdisWrapperHandle,
2872 IN NDIS_HANDLE WrapperConfigurationContext,
2873 IN ULONG SlotNumber,
2874 OUT PNDIS_RESOURCE_LIST *AssignedResources);
2875
2876 VOID
2877 EXPIMP
2878 NdisReadEisaSlotInformationEx(
2879 OUT PNDIS_STATUS Status,
2880 IN NDIS_HANDLE WrapperConfigurationContext,
2881 OUT PUINT SlotNumber,
2882 OUT PNDIS_EISA_FUNCTION_INFORMATION *EisaData,
2883 OUT PUINT NumberOfFunctions);
2884
2885 VOID
2886 EXPIMP
2887 NdisReadMcaPosInformation(
2888 OUT PNDIS_STATUS Status,
2889 IN NDIS_HANDLE WrapperConfigurationContext,
2890 IN PUINT ChannelNumber,
2891 OUT PNDIS_MCA_POS_DATA McaData);
2892
2893 #endif /* NDIS40 */
2894
2895
2896
2897 /* NDIS 5.0 extensions */
2898
2899 #ifdef NDIS50
2900
2901 VOID
2902 EXPIMP
2903 NdisAcquireReadWriteLock(
2904 IN PNDIS_RW_LOCK Lock,
2905 IN BOOLEAN fWrite,
2906 IN PLOCK_STATE LockState);
2907
2908 NDIS_STATUS
2909 EXPIMP
2910 NdisAllocateMemoryWithTag(
2911 OUT PVOID *VirtualAddress,
2912 IN UINT Length,
2913 IN ULONG Tag);
2914
2915 VOID
2916 EXPIMP
2917 NdisAllocatePacketPoolEx(
2918 OUT PNDIS_STATUS Status,
2919 OUT PNDIS_HANDLE PoolHandle,
2920 IN UINT NumberOfDescriptors,
2921 IN UINT NumberOfOverflowDescriptors,
2922 IN UINT ProtocolReservedLength);
2923
2924 ULONG
2925 EXPIMP
2926 NdisBufferLength(
2927 IN PNDIS_BUFFER Buffer);
2928
2929 PVOID
2930 EXPIMP
2931 NdisBufferVirtualAddress(
2932 IN PNDIS_BUFFER Buffer);
2933
2934 VOID
2935 EXPIMP
2936 NdisCompletePnPEvent(
2937 IN NDIS_STATUS Status,
2938 IN NDIS_HANDLE NdisBindingHandle,
2939 IN PNET_PNP_EVENT NetPnPEvent);
2940
2941 VOID
2942 EXPIMP
2943 NdisConvertStringToAtmAddress(
2944 OUT PNDIS_STATUS Status,
2945 IN PNDIS_STRING String,
2946 OUT PATM_ADDRESS AtmAddress);
2947
2948 VOID
2949 EXPIMP
2950 NdisGetCurrentProcessorCounts(
2951 OUT PULONG pIdleCount,
2952 OUT PULONG pKernelAndUser,
2953 OUT PULONG pIndex);
2954
2955 VOID
2956 EXPIMP
2957 NdisGetDriverHandle(
2958 IN PNDIS_HANDLE NdisBindingHandle,
2959 OUT PNDIS_HANDLE NdisDriverHandle);
2960
2961 PNDIS_PACKET
2962 EXPIMP
2963 NdisGetReceivedPacket(
2964 IN PNDIS_HANDLE NdisBindingHandle,
2965 IN PNDIS_HANDLE MacContext);
2966
2967 VOID
2968 EXPIMP
2969 NdisGetSystemUptime(
2970 OUT PULONG pSystemUpTime);
2971
2972 VOID
2973 EXPIMP
2974 NdisInitializeReadWriteLock(
2975 IN PNDIS_RW_LOCK Lock);
2976
2977 LONG
2978 EXPIMP
2979 NdisInterlockedDecrement(
2980 IN PLONG Addend);
2981
2982 LONG
2983 EXPIMP
2984 NdisInterlockedIncrement(
2985 IN PLONG Addend);
2986
2987 PSINGLE_LIST_ENTRY
2988 EXPIMP
2989 NdisInterlockedPopEntrySList(
2990 IN PSLIST_HEADER ListHead,
2991 IN PKSPIN_LOCK Lock);
2992
2993 PSINGLE_LIST_ENTRY
2994 EXPIMP
2995 NdisInterlockedPushEntrySList(
2996 IN PSLIST_HEADER ListHead,
2997 IN PSINGLE_LIST_ENTRY ListEntry,
2998 IN PKSPIN_LOCK Lock);
2999
3000
3001 NDIS_STATUS
3002 EXPIMP
3003 NdisMDeregisterDevice(
3004 IN NDIS_HANDLE NdisDeviceHandle);
3005
3006 VOID
3007 EXPIMP
3008 NdisMGetDeviceProperty(
3009 IN NDIS_HANDLE MiniportAdapterHandle,
3010 IN OUT PDEVICE_OBJECT *PhysicalDeviceObject OPTIONAL,
3011 IN OUT PDEVICE_OBJECT *FunctionalDeviceObject OPTIONAL,
3012 IN OUT PDEVICE_OBJECT *NextDeviceObject OPTIONAL,
3013 IN OUT PCM_RESOURCE_LIST *AllocatedResources OPTIONAL,
3014 IN OUT PCM_RESOURCE_LIST *AllocatedResourcesTranslated OPTIONAL);
3015
3016 NDIS_STATUS
3017 EXPIMP
3018 NdisMInitializeScatterGatherDma(
3019 IN NDIS_HANDLE MiniportAdapterHandle,
3020 IN BOOLEAN Dma64BitAddresses,
3021 IN ULONG MaximumPhysicalMapping);
3022
3023 NDIS_STATUS
3024 EXPIMP
3025 NdisMPromoteMiniport(
3026 IN NDIS_HANDLE MiniportAdapterHandle);
3027
3028 NDIS_STATUS
3029 EXPIMP
3030 NdisMQueryAdapterInstanceName(
3031 OUT PNDIS_STRING AdapterInstanceName,
3032 IN NDIS_HANDLE MiniportAdapterHandle);
3033
3034 NDIS_STATUS
3035 EXPIMP
3036 NdisMRegisterDevice(
3037 IN NDIS_HANDLE NdisWrapperHandle,
3038 IN PNDIS_STRING DeviceName,
3039 IN PNDIS_STRING SymbolicName,
3040 IN PDRIVER_DISPATCH MajorFunctions[],
3041 OUT PDEVICE_OBJECT *pDeviceObject,
3042 OUT NDIS_HANDLE *NdisDeviceHandle);
3043
3044 VOID
3045 EXPIMP
3046 NdisMRegisterUnloadHandler(
3047 IN NDIS_HANDLE NdisWrapperHandle,
3048 IN PDRIVER_UNLOAD UnloadHandler);
3049
3050 NDIS_STATUS
3051 EXPIMP
3052 NdisMRemoveMiniport(
3053 IN NDIS_HANDLE MiniportAdapterHandle);
3054
3055 NDIS_STATUS
3056 EXPIMP
3057 NdisMSetMiniportSecondary(
3058 IN NDIS_HANDLE MiniportAdapterHandle,
3059 IN NDIS_HANDLE PrimaryMiniportAdapterHandle);
3060
3061 VOID
3062 EXPIMP
3063 NdisOpenConfigurationKeyByIndex(
3064 OUT PNDIS_STATUS Status,
3065 IN NDIS_HANDLE ConfigurationHandle,
3066 IN ULONG Index,
3067 OUT PNDIS_STRING KeyName,
3068 OUT PNDIS_HANDLE KeyHandle);
3069
3070 VOID
3071 EXPIMP
3072 NdisOpenConfigurationKeyByName(
3073 OUT PNDIS_STATUS Status,
3074 IN NDIS_HANDLE ConfigurationHandle,
3075 IN PNDIS_STRING SubKeyName,
3076 OUT PNDIS_HANDLE SubKeyHandle);
3077
3078 UINT
3079 EXPIMP
3080 NdisPacketPoolUsage(
3081 IN NDIS_HANDLE PoolHandle);
3082
3083 NDIS_STATUS
3084 EXPIMP
3085 NdisQueryAdapterInstanceName(
3086 OUT PNDIS_STRING AdapterInstanceName,
3087 IN NDIS_HANDLE NdisBindingHandle);
3088
3089 VOID
3090 EXPIMP
3091 NdisQueryBufferSafe(
3092 IN PNDIS_BUFFER Buffer,
3093 OUT PVOID *VirtualAddress OPTIONAL,
3094 OUT PUINT Length,
3095 IN UINT Priority);
3096
3097 ULONG
3098 EXPIMP
3099 NdisReadPcmciaAttributeMemory(
3100 IN NDIS_HANDLE NdisAdapterHandle,
3101 IN ULONG Offset,
3102 IN PVOID Buffer,
3103 IN ULONG Length);
3104
3105 VOID
3106 EXPIMP
3107 NdisReleaseReadWriteLock(
3108 IN PNDIS_RW_LOCK Lock,
3109 IN PLOCK_STATE LockState);
3110
3111
3112 NDIS_STATUS
3113 EXPIMP
3114 NdisWriteEventLogEntry(
3115 IN PVOID LogHandle,
3116 IN NDIS_STATUS EventCode,
3117 IN ULONG UniqueEventValue,
3118 IN USHORT NumStrings,
3119 IN PVOID StringsList OPTIONAL,
3120 IN ULONG DataSize,
3121 IN PVOID Data OPTIONAL);
3122
3123 ULONG
3124 EXPIMP
3125 NdisWritePcmciaAttributeMemory(
3126 IN NDIS_HANDLE NdisAdapterHandle,
3127 IN ULONG Offset,
3128 IN PVOID Buffer,
3129 IN ULONG Length);
3130
3131
3132 /* Connectionless services */
3133
3134 NDIS_STATUS
3135 EXPIMP
3136 NdisClAddParty(
3137 IN NDIS_HANDLE NdisVcHandle,
3138 IN NDIS_HANDLE ProtocolPartyContext,
3139 IN OUT PCO_CALL_PARAMETERS CallParameters,
3140 OUT PNDIS_HANDLE NdisPartyHandle);
3141
3142 NDIS_STATUS
3143 EXPIMP
3144 NdisClCloseAddressFamily(
3145 IN NDIS_HANDLE NdisAfHandle);
3146
3147 NDIS_STATUS
3148 EXPIMP
3149 NdisClCloseCall(
3150 IN NDIS_HANDLE NdisVcHandle,
3151 IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
3152 IN PVOID Buffer OPTIONAL,
3153 IN UINT Size);
3154
3155 NDIS_STATUS
3156 EXPIMP
3157 NdisClDeregisterSap(
3158 IN NDIS_HANDLE NdisSapHandle);
3159
3160 NDIS_STATUS
3161 EXPIMP
3162 NdisClDropParty(
3163 IN NDIS_HANDLE NdisPartyHandle,
3164 IN PVOID Buffer OPTIONAL,
3165 IN UINT Size);
3166
3167 VOID
3168 EXPIMP
3169 NdisClIncomingCallComplete(
3170 IN NDIS_STATUS Status,
3171 IN NDIS_HANDLE NdisVcHandle,
3172 IN PCO_CALL_PARAMETERS CallParameters);
3173
3174 NDIS_STATUS
3175 EXPIMP
3176 NdisClMakeCall(
3177 IN NDIS_HANDLE NdisVcHandle,
3178 IN OUT PCO_CALL_PARAMETERS CallParameters,
3179 IN NDIS_HANDLE ProtocolPartyContext OPTIONAL,
3180 OUT PNDIS_HANDLE NdisPartyHandle OPTIONAL);
3181
3182 NDIS_STATUS
3183 EXPIMP
3184 NdisClModifyCallQoS(
3185 IN NDIS_HANDLE NdisVcHandle,
3186 IN PCO_CALL_PARAMETERS CallParameters);
3187
3188
3189 NDIS_STATUS
3190 EXPIMP
3191 NdisClOpenAddressFamily(
3192 IN NDIS_HANDLE NdisBindingHandle,
3193 IN PCO_ADDRESS_FAMILY AddressFamily,
3194 IN NDIS_HANDLE ProtocolAfContext,
3195 IN PNDIS_CLIENT_CHARACTERISTICS ClCharacteristics,
3196 IN UINT SizeOfClCharacteristics,
3197 OUT PNDIS_HANDLE NdisAfHandle);
3198
3199 NDIS_STATUS
3200 EXPIMP
3201 NdisClRegisterSap(
3202 IN NDIS_HANDLE NdisAfHandle,
3203 IN NDIS_HANDLE ProtocolSapContext,
3204 IN PCO_SAP Sap,
3205 OUT PNDIS_HANDLE NdisSapHandle);
3206
3207
3208 /* Call Manager services */
3209
3210 NDIS_STATUS
3211 EXPIMP
3212 NdisCmActivateVc(
3213 IN NDIS_HANDLE NdisVcHandle,
3214 IN OUT PCO_CALL_PARAMETERS CallParameters);
3215
3216 VOID
3217 EXPIMP
3218 NdisCmAddPartyComplete(
3219 IN NDIS_STATUS Status,
3220 IN NDIS_HANDLE NdisPartyHandle,
3221 IN NDIS_HANDLE CallMgrPartyContext OPTIONAL,
3222 IN PCO_CALL_PARAMETERS CallParameters);
3223
3224 VOID
3225 EXPIMP
3226 NdisCmCloseAddressFamilyComplete(
3227 IN NDIS_STATUS Status,
3228 IN NDIS_HANDLE NdisAfHandle);
3229
3230 VOID
3231 EXPIMP
3232 NdisCmCloseCallComplete(
3233 IN NDIS_STATUS Status,
3234 IN NDIS_HANDLE NdisVcHandle,
3235 IN NDIS_HANDLE NdisPartyHandle OPTIONAL);
3236
3237 NDIS_STATUS
3238 EXPIMP
3239 NdisCmDeactivateVc(
3240 IN NDIS_HANDLE NdisVcHandle);
3241
3242 VOID
3243 EXPIMP
3244 NdisCmDeregisterSapComplete(
3245 IN NDIS_STATUS Status,
3246 IN NDIS_HANDLE NdisSapHandle);
3247
3248 VOID
3249 EXPIMP
3250 NdisCmDispatchCallConnected(
3251 IN NDIS_HANDLE NdisVcHandle);
3252
3253 NDIS_STATUS
3254 EXPIMP
3255 NdisCmDispatchIncomingCall(
3256 IN NDIS_HANDLE NdisSapHandle,
3257 IN NDIS_HANDLE NdisVcHandle,
3258 IN PCO_CALL_PARAMETERS CallParameters);
3259
3260 VOID
3261 EXPIMP
3262 NdisCmDispatchIncomingCallQoSChange(
3263 IN NDIS_HANDLE NdisVcHandle,
3264 IN PCO_CALL_PARAMETERS CallParameters);
3265
3266 VOID
3267 EXPIMP
3268 NdisCmDispatchIncomingCloseCall(
3269 IN NDIS_STATUS CloseStatus,
3270 IN NDIS_HANDLE NdisVcHandle,
3271 IN PVOID Buffer OPTIONAL,
3272 IN UINT Size);
3273
3274 VOID
3275 EXPIMP
3276 NdisCmDispatchIncomingDropParty(
3277 IN NDIS_STATUS DropStatus,
3278 IN NDIS_HANDLE NdisPartyHandle,
3279 IN PVOID Buffer OPTIONAL,
3280 IN UINT Size);
3281
3282 VOID
3283 EXPIMP
3284 NdisCmDropPartyComplete(
3285 IN NDIS_STATUS Status,
3286 IN NDIS_HANDLE NdisPartyHandle);
3287
3288 VOID
3289 EXPIMP
3290 NdisCmMakeCallComplete(
3291 IN NDIS_STATUS Status,
3292 IN NDIS_HANDLE NdisVcHandle,
3293 IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
3294 IN NDIS_HANDLE CallMgrPartyContext OPTIONAL,
3295 IN PCO_CALL_PARAMETERS CallParameters);
3296
3297 VOID
3298 EXPIMP
3299 NdisCmModifyCallQoSComplete(
3300 IN NDIS_STATUS Status,
3301 IN NDIS_HANDLE NdisVcHandle,
3302 IN PCO_CALL_PARAMETERS CallParameters);
3303
3304 VOID
3305 EXPIMP
3306 NdisCmOpenAddressFamilyComplete(
3307 IN NDIS_STATUS Status,
3308 IN NDIS_HANDLE NdisAfHandle,
3309 IN NDIS_HANDLE CallMgrAfContext);
3310
3311 NDIS_STATUS
3312 EXPIMP
3313 NdisCmRegisterAddressFamily(
3314 IN NDIS_HANDLE NdisBindingHandle,
3315 IN PCO_ADDRESS_FAMILY AddressFamily,
3316 IN PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics,
3317 IN UINT SizeOfCmCharacteristics);
3318
3319 VOID
3320 EXPIMP
3321 NdisCmRegisterSapComplete(
3322 IN NDIS_STATUS Status,
3323 IN NDIS_HANDLE NdisSapHandle,
3324 IN NDIS_HANDLE CallMgrSapContext);
3325
3326
3327 NDIS_STATUS
3328 EXPIMP
3329 NdisMCmActivateVc(
3330 IN NDIS_HANDLE NdisVcHandle,
3331 IN PCO_CALL_PARAMETERS CallParameters);
3332
3333 NDIS_STATUS
3334 EXPIMP
3335 NdisMCmCreateVc(
3336 IN NDIS_HANDLE MiniportAdapterHandle,
3337 IN NDIS_HANDLE NdisAfHandle,
3338 IN NDIS_HANDLE MiniportVcContext,
3339 OUT PNDIS_HANDLE NdisVcHandle);
3340
3341 NDIS_STATUS
3342 EXPIMP
3343 NdisMCmDeactivateVc(
3344 IN NDIS_HANDLE NdisVcHandle);
3345
3346 NDIS_STATUS
3347 EXPIMP
3348 NdisMCmDeleteVc(
3349 IN NDIS_HANDLE NdisVcHandle);
3350
3351 NDIS_STATUS
3352 EXPIMP
3353 NdisMCmRegisterAddressFamily(
3354 IN NDIS_HANDLE MiniportAdapterHandle,
3355 IN PCO_ADDRESS_FAMILY AddressFamily,
3356 IN PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics,
3357 IN UINT SizeOfCmCharacteristics);
3358
3359 NDIS_STATUS
3360 EXPIMP
3361 NdisMCmRequest(
3362 IN NDIS_HANDLE NdisAfHandle,
3363 IN NDIS_HANDLE NdisVcHandle OPTIONAL,
3364 IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
3365 IN OUT PNDIS_REQUEST NdisRequest);
3366
3367
3368 /* Connection-oriented services */
3369
3370 NDIS_STATUS
3371 EXPIMP
3372 NdisCoCreateVc(
3373 IN NDIS_HANDLE NdisBindingHandle,
3374 IN NDIS_HANDLE NdisAfHandle OPTIONAL,
3375 IN NDIS_HANDLE ProtocolVcContext,
3376 IN OUT PNDIS_HANDLE NdisVcHandle);
3377
3378 NDIS_STATUS
3379 EXPIMP
3380 NdisCoDeleteVc(
3381 IN NDIS_HANDLE NdisVcHandle);
3382
3383 NDIS_STATUS
3384 EXPIMP
3385 NdisCoRequest(
3386 IN NDIS_HANDLE NdisBindingHandle,
3387 IN NDIS_HANDLE NdisAfHandle OPTIONAL,
3388 IN NDIS_HANDLE NdisVcHandle OPTIONAL,
3389 IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
3390 IN OUT PNDIS_REQUEST NdisRequest);
3391
3392 VOID
3393 EXPIMP
3394 NdisCoRequestComplete(
3395 IN NDIS_STATUS Status,
3396 IN NDIS_HANDLE NdisAfHandle,
3397 IN NDIS_HANDLE NdisVcHandle OPTIONAL,
3398 IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
3399 IN PNDIS_REQUEST NdisRequest);
3400
3401 VOID
3402 EXPIMP
3403 NdisCoSendPackets(
3404 IN NDIS_HANDLE NdisVcHandle,
3405 IN PPNDIS_PACKET PacketArray,
3406 IN UINT NumberOfPackets);
3407
3408
3409 VOID
3410 EXPIMP
3411 NdisMCoActivateVcComplete(
3412 IN NDIS_STATUS Status,
3413 IN NDIS_HANDLE NdisVcHandle,
3414 IN PCO_CALL_PARAMETERS CallParameters);
3415
3416 VOID
3417 EXPIMP
3418 NdisMCoDeactivateVcComplete(
3419 IN NDIS_STATUS Status,
3420 IN NDIS_HANDLE NdisVcHandle);
3421
3422 VOID
3423 EXPIMP
3424 NdisMCoIndicateReceivePacket(
3425 IN NDIS_HANDLE NdisVcHandle,
3426 IN PPNDIS_PACKET PacketArray,
3427 IN UINT NumberOfPackets);
3428
3429 VOID
3430 EXPIMP
3431 NdisMCoIndicateStatus(
3432 IN NDIS_HANDLE MiniportAdapterHandle,
3433 IN NDIS_HANDLE NdisVcHandle OPTIONAL,
3434 IN NDIS_STATUS GeneralStatus,
3435 IN PVOID StatusBuffer OPTIONAL,
3436 IN ULONG StatusBufferSize);
3437
3438 VOID
3439 EXPIMP
3440 NdisMCoReceiveComplete(
3441 IN NDIS_HANDLE MiniportAdapterHandle);
3442
3443 VOID
3444 EXPIMP
3445 NdisMCoRequestComplete(
3446 IN NDIS_STATUS Status,
3447 IN NDIS_HANDLE MiniportAdapterHandle,
3448 IN PNDIS_REQUEST Request);
3449
3450 VOID
3451 EXPIMP
3452 NdisMCoSendComplete(
3453 IN NDIS_STATUS Status,
3454 IN NDIS_HANDLE NdisVcHandle,
3455 IN PNDIS_PACKET Packet);
3456
3457
3458 /* NDIS 5.0 extensions for intermediate drivers */
3459
3460 VOID
3461 EXPIMP
3462 NdisIMAssociateMiniport(
3463 IN NDIS_HANDLE DriverHandle,
3464 IN NDIS_HANDLE ProtocolHandle);
3465
3466 NDIS_STATUS
3467 EXPIMP
3468 NdisIMCancelInitializeDeviceInstance(
3469 IN NDIS_HANDLE DriverHandle,
3470 IN PNDIS_STRING DeviceInstance);
3471
3472 VOID
3473 EXPIMP
3474 NdisIMCopySendCompletePerPacketInfo(
3475 IN PNDIS_PACKET DstPacket,
3476 IN PNDIS_PACKET SrcPacket);
3477
3478 VOID
3479 EXPIMP
3480 NdisIMCopySendPerPacketInfo(
3481 IN PNDIS_PACKET DstPacket,
3482 IN PNDIS_PACKET SrcPacket);
3483
3484 VOID
3485 EXPIMP
3486 NdisIMDeregisterLayeredMiniport(
3487 IN NDIS_HANDLE DriverHandle);
3488
3489 NDIS_HANDLE
3490 EXPIMP
3491 NdisIMGetBindingContext(
3492 IN NDIS_HANDLE NdisBindingHandle);
3493
3494 NDIS_HANDLE
3495 EXPIMP
3496 NdisIMGetDeviceContext(
3497 IN NDIS_HANDLE MiniportAdapterHandle);
3498
3499 NDIS_STATUS
3500 EXPIMP
3501 NdisIMInitializeDeviceInstanceEx(
3502 IN NDIS_HANDLE DriverHandle,
3503 IN PNDIS_STRING DriverInstance,
3504 IN NDIS_HANDLE DeviceContext OPTIONAL);
3505
3506 #endif /* NDIS50 */
3507
3508
3509
3510 /* NDIS structures available only to miniport drivers */
3511
3512 #if defined(NDIS_WRAPPER) || defined(NDIS_MINIPORT_DRIVER)
3513
3514 /* Obsolete technology specific defines */
3515
3516 #define DECLARE_UNKNOWN_STRUCT(BaseName) \
3517 typedef struct _##BaseName BaseName, *P##BaseName;
3518
3519 #define DECLARE_UNKNOWN_PROTOTYPE(Name) \
3520 typedef VOID (*##Name)(VOID);
3521
3522
3523 /* ARCnet */
3524
3525 DECLARE_UNKNOWN_STRUCT(ARC_FILTER)
3526
3527
3528 VOID
3529 EXPIMP
3530 ArcFilterDprIndicateReceive(
3531 IN PARC_FILTER Filter,
3532 IN PUCHAR pRawHeader,
3533 IN PUCHAR pData,
3534 IN UINT Length);
3535
3536 VOID
3537 EXPIMP
3538 ArcFilterDprIndicateReceiveComplete(
3539 IN PARC_FILTER Filter);
3540
3541
3542 /* Ethernet */
3543
3544 #define ETH_LENGTH_OF_ADDRESS 6
3545
3546 DECLARE_UNKNOWN_STRUCT(ETH_FILTER)
3547
3548 DECLARE_UNKNOWN_PROTOTYPE(ETH_ADDRESS_CHANGE)
3549 DECLARE_UNKNOWN_PROTOTYPE(ETH_FILTER_CHANGE)
3550 DECLARE_UNKNOWN_PROTOTYPE(ETH_DEFERRED_CLOSE)
3551
3552
3553 NDIS_STATUS
3554 EXPIMP
3555 EthChangeFilterAddresses(
3556 IN PETH_FILTER Filter,
3557 IN NDIS_HANDLE NdisFilterHandle,
3558 IN PNDIS_REQUEST NdisRequest,
3559 IN UINT AddressCount,
3560 IN CHAR Addresses[] [ETH_LENGTH_OF_ADDRESS],
3561 IN BOOLEAN Set);
3562
3563 BOOLEAN
3564 EXPIMP
3565 EthCreateFilter(
3566 IN UINT MaximumMulticastAddresses,
3567 IN ETH_ADDRESS_CHANGE AddressChangeAction,
3568 IN ETH_FILTER_CHANGE FilterChangeAction,
3569 IN ETH_DEFERRED_CLOSE CloseAction,
3570 IN PUCHAR AdapterAddress,
3571 IN PNDIS_SPIN_LOCK Lock,
3572 OUT PETH_FILTER *Filter);
3573
3574 VOID
3575 EXPIMP
3576 EthDeleteFilter(
3577 IN PETH_FILTER Filter);
3578
3579 NDIS_STATUS
3580 EXPIMP
3581 EthDeleteFilterOpenAdapter(
3582 IN PETH_FILTER Filter,
3583 IN NDIS_HANDLE NdisFilterHandle,
3584 IN PNDIS_REQUEST NdisRequest);
3585
3586 NDIS_STATUS
3587 EXPIMP
3588 EthFilterAdjust(
3589 IN PETH_FILTER Filter,
3590 IN NDIS_HANDLE NdisFilterHandle,
3591 IN PNDIS_REQUEST NdisRequest,
3592 IN UINT FilterClasses,
3593 IN BOOLEAN Set);
3594
3595 VOID
3596 EXPIMP
3597 EthFilterIndicateReceive(
3598 IN PETH_FILTER Filter,
3599 IN NDIS_HANDLE MacReceiveContext,
3600 IN PCHAR Address,
3601 IN PVOID HeaderBuffer,
3602 IN UINT HeaderBufferSize,
3603 IN PVOID LookaheadBuffer,
3604 IN UINT LookaheadBufferSize,
3605 IN UINT PacketSize);
3606
3607 VOID
3608 EXPIMP
3609 EthFilterIndicateReceiveComplete(
3610 IN PETH_FILTER Filter);
3611
3612 BOOLEAN
3613 EXPIMP
3614 EthNoteFilterOpenAdapter(
3615 IN PETH_FILTER Filter,
3616 IN NDIS_HANDLE MacBindingHandle,
3617 IN NDIS_HANDLE NdisBindingContext,
3618 OUT PNDIS_HANDLE NdisFilterHandle);
3619
3620 UINT
3621 EXPIMP
3622 EthNumberOfOpenFilterAddresses(
3623 IN PETH_FILTER Filter,
3624 IN NDIS_HANDLE NdisFilterHandle);
3625
3626 VOID
3627 EXPIMP
3628 EthQueryGlobalFilterAddresses (
3629 OUT PNDIS_STATUS Status,
3630 IN PETH_FILTER Filter,
3631 IN UINT SizeOfArray,
3632 OUT PUINT NumberOfAddresses,
3633 IN OUT CHAR AddressArray[] [ETH_LENGTH_OF_ADDRESS]);
3634
3635 VOID
3636 EXPIMP
3637 EthQueryOpenFilterAddresses(
3638 OUT PNDIS_STATUS Status,
3639 IN PETH_FILTER Filter,
3640 IN NDIS_HANDLE NdisFilterHandle,
3641 IN UINT SizeOfArray,
3642 OUT PUINT NumberOfAddresses,
3643 IN OUT CHAR AddressArray[] [ETH_LENGTH_OF_ADDRESS]);
3644
3645 BOOLEAN
3646 EXPIMP
3647 EthShouldAddressLoopBack(
3648 IN PETH_FILTER Filter,
3649 IN CHAR Address[ETH_LENGTH_OF_ADDRESS]);
3650
3651
3652 /* FDDI */
3653
3654 #define FDDI_LENGTH_OF_LONG_ADDRESS 6
3655 #define FDDI_LENGTH_OF_SHORT_ADDRESS 2
3656
3657 DECLARE_UNKNOWN_STRUCT(FDDI_FILTER)
3658
3659 DECLARE_UNKNOWN_PROTOTYPE(FDDI_ADDRESS_CHANGE)
3660 DECLARE_UNKNOWN_PROTOTYPE(FDDI_FILTER_CHANGE)
3661 DECLARE_UNKNOWN_PROTOTYPE(FDDI_DEFERRED_CLOSE)
3662
3663
3664 NDIS_STATUS
3665 EXPIMP
3666 FddiChangeFilterLongAddresses(
3667 IN PFDDI_FILTER Filter,
3668 IN NDIS_HANDLE NdisFilterHandle,
3669 IN PNDIS_REQUEST NdisRequest,
3670 IN UINT AddressCount,
3671 IN CHAR Addresses[] [FDDI_LENGTH_OF_LONG_ADDRESS],
3672 IN BOOLEAN Set);
3673
3674 NDIS_STATUS
3675 EXPIMP
3676 FddiChangeFilterShortAddresses(
3677 IN PFDDI_FILTER Filter,
3678 IN NDIS_HANDLE NdisFilterHandle,
3679 IN PNDIS_REQUEST NdisRequest,
3680 IN UINT AddressCount,
3681 IN CHAR Addresses[] [FDDI_LENGTH_OF_SHORT_ADDRESS],
3682 IN BOOLEAN Set);
3683
3684 BOOLEAN
3685 EXPIMP
3686 FddiCreateFilter(
3687 IN UINT MaximumMulticastLongAddresses,
3688 IN UINT MaximumMulticastShortAddresses,
3689 IN FDDI_ADDRESS_CHANGE AddressChangeAction,
3690 IN FDDI_FILTER_CHANGE FilterChangeAction,
3691 IN FDDI_DEFERRED_CLOSE CloseAction,
3692 IN PUCHAR AdapterLongAddress,
3693 IN PUCHAR AdapterShortAddress,
3694 IN PNDIS_SPIN_LOCK Lock,
3695 OUT PFDDI_FILTER *Filter);
3696
3697 VOID
3698 EXPIMP
3699 FddiDeleteFilter(
3700 IN PFDDI_FILTER Filter);
3701
3702 NDIS_STATUS
3703 EXPIMP
3704 FddiDeleteFilterOpenAdapter(
3705 IN PFDDI_FILTER Filter,
3706 IN NDIS_HANDLE NdisFilterHandle,
3707 IN PNDIS_REQUEST NdisRequest);
3708
3709 NDIS_STATUS
3710 EXPIMP
3711 FddiFilterAdjust(
3712 IN PFDDI_FILTER Filter,
3713 IN NDIS_HANDLE NdisFilterHandle,
3714 IN PNDIS_REQUEST NdisRequest,
3715 IN UINT FilterClasses,
3716 IN BOOLEAN Set);
3717
3718 VOID
3719 EXPIMP
3720 FddiFilterIndicateReceive(
3721 IN PFDDI_FILTER Filter,
3722 IN NDIS_HANDLE MacReceiveContext,
3723 IN PCHAR Address,
3724 IN UINT AddressLength,
3725 IN PVOID HeaderBuffer,
3726 IN UINT HeaderBufferSize,
3727 IN PVOID LookaheadBuffer,
3728 IN UINT LookaheadBufferSize,
3729 IN UINT PacketSize);
3730
3731 VOID
3732 EXPIMP
3733 FddiFilterIndicateReceiveComplete(
3734 IN PFDDI_FILTER Filter);
3735
3736 BOOLEAN
3737 EXPIMP
3738 FddiNoteFilterOpenAdapter(
3739 IN PFDDI_FILTER Filter,
3740 IN NDIS_HANDLE MacBindingHandle,
3741 IN NDIS_HANDLE NdisBindingContext,
3742 OUT PNDIS_HANDLE NdisFilterHandle);
3743
3744 UINT
3745 EXPIMP
3746 FddiNumberOfOpenFilterLongAddresses(
3747 IN PFDDI_FILTER Filter,
3748 IN NDIS_HANDLE NdisFilterHandle);
3749
3750 UINT
3751 EXPIMP
3752 FddiNumberOfOpenFilterShortAddresses(
3753 IN PFDDI_FILTER Filter,
3754 IN NDIS_HANDLE NdisFilterHandle);
3755
3756 VOID
3757 EXPIMP
3758 FddiQueryGlobalFilterLongAddresses(
3759 OUT PNDIS_STATUS Status,
3760 IN PFDDI_FILTER Filter,
3761 IN UINT SizeOfArray,
3762 OUT PUINT NumberOfAddresses,
3763 IN OUT CHAR AddressArray[] [FDDI_LENGTH_OF_LONG_ADDRESS]);
3764
3765 VOID
3766 EXPIMP
3767 FddiQueryGlobalFilterShortAddresses(
3768 OUT PNDIS_STATUS Status,
3769 IN PFDDI_FILTER Filter,
3770 IN UINT SizeOfArray,
3771 OUT PUINT NumberOfAddresses,
3772 IN OUT CHAR AddressArray[] [FDDI_LENGTH_OF_SHORT_ADDRESS]);
3773
3774 VOID
3775 EXPIMP
3776 FddiQueryOpenFilterLongAddresses(
3777 OUT PNDIS_STATUS Status,
3778 IN PFDDI_FILTER Filter,
3779 IN NDIS_HANDLE NdisFilterHandle,
3780 IN UINT SizeOfArray,
3781 OUT PUINT NumberOfAddresses,
3782 IN OUT CHAR AddressArray[] [FDDI_LENGTH_OF_LONG_ADDRESS]);
3783
3784 VOID
3785 EXPIMP
3786 FddiQueryOpenFilterShortAddresses(
3787 OUT PNDIS_STATUS Status,
3788 IN PFDDI_FILTER Filter,
3789 IN NDIS_HANDLE NdisFilterHandle,
3790 IN UINT SizeOfArray,
3791 OUT PUINT NumberOfAddresses,
3792 IN OUT CHAR AddressArray[] [FDDI_LENGTH_OF_SHORT_ADDRESS]);
3793
3794 BOOLEAN
3795 EXPIMP
3796 FddiShouldAddressLoopBack(
3797 IN PFDDI_FILTER Filter,
3798 IN CHAR Address[],
3799 IN UINT LengthOfAddress);
3800
3801
3802 /* Token Ring */
3803
3804 #define TR_LENGTH_OF_FUNCTIONAL 4
3805 #define TR_LENGTH_OF_ADDRESS 6
3806
3807 DECLARE_UNKNOWN_STRUCT(TR_FILTER)
3808
3809 DECLARE_UNKNOWN_PROTOTYPE(TR_ADDRESS_CHANGE)
3810 DECLARE_UNKNOWN_PROTOTYPE(TR_GROUP_CHANGE)
3811 DECLARE_UNKNOWN_PROTOTYPE(TR_FILTER_CHANGE)
3812 DECLARE_UNKNOWN_PROTOTYPE(TR_DEFERRED_CLOSE)
3813
3814
3815 NDIS_STATUS
3816 EXPIMP
3817 TrChangeFunctionalAddress(
3818 IN PTR_FILTER Filter,
3819 IN NDIS_HANDLE NdisFilterHandle,
3820 IN PNDIS_REQUEST NdisRequest,
3821 IN CHAR FunctionalAddressArray[TR_LENGTH_OF_FUNCTIONAL],
3822 IN BOOLEAN Set);
3823
3824 NDIS_STATUS
3825 EXPIMP
3826 TrChangeGroupAddress(
3827 IN PTR_FILTER Filter,
3828 IN NDIS_HANDLE NdisFilterHandle,
3829 IN PNDIS_REQUEST NdisRequest,
3830 IN CHAR GroupAddressArray[TR_LENGTH_OF_FUNCTIONAL],
3831 IN BOOLEAN Set);
3832
3833 BOOLEAN
3834 EXPIMP
3835 TrCreateFilter(
3836 IN TR_ADDRESS_CHANGE AddressChangeAction,
3837 IN TR_GROUP_CHANGE GroupChangeAction,
3838 IN TR_FILTER_CHANGE FilterChangeAction,
3839 IN TR_DEFERRED_CLOSE CloseAction,
3840 IN PUCHAR AdapterAddress,
3841 IN PNDIS_SPIN_LOCK Lock,
3842 OUT PTR_FILTER *Filter);
3843
3844 VOID
3845 EXPIMP
3846 TrDeleteFilter(
3847 IN PTR_FILTER Filter);
3848
3849 NDIS_STATUS
3850 EXPIMP
3851 TrDeleteFilterOpenAdapter (
3852 IN PTR_FILTER Filter,
3853 IN NDIS_HANDLE NdisFilterHandle,
3854 IN PNDIS_REQUEST NdisRequest);
3855
3856 NDIS_STATUS
3857 EXPIMP
3858 TrFilterAdjust(
3859 IN PTR_FILTER Filter,
3860 IN NDIS_HANDLE NdisFilterHandle,
3861 IN PNDIS_REQUEST NdisRequest,
3862 IN UINT FilterClasses,
3863 IN BOOLEAN Set);
3864
3865 VOID
3866 EXPIMP
3867 TrFilterIndicateReceive(
3868 IN PTR_FILTER Filter,
3869 IN NDIS_HANDLE MacReceiveContext,
3870 IN PVOID HeaderBuffer,
3871 IN UINT HeaderBufferSize,
3872 IN PVOID LookaheadBuffer,
3873 IN UINT LookaheadBufferSize,
3874 IN UINT PacketSize);
3875
3876 VOID
3877 EXPIMP
3878 TrFilterIndicateReceiveComplete(
3879 IN PTR_FILTER Filter);
3880
3881 BOOLEAN
3882 EXPIMP
3883 TrNoteFilterOpenAdapter(
3884 IN PTR_FILTER Filter,
3885 IN NDIS_HANDLE MacBindingHandle,
3886 IN NDIS_HANDLE NdisBindingContext,
3887 OUT PNDIS_HANDLE NdisFilterHandle);
3888
3889 BOOLEAN
3890 EXPIMP
3891 TrShouldAddressLoopBack(
3892 IN PTR_FILTER Filter,
3893 IN CHAR DestinationAddress[TR_LENGTH_OF_ADDRESS],
3894 IN CHAR SourceAddress[TR_LENGTH_OF_ADDRESS]);
3895
3896
3897
3898 /* Prototypes for NDIS_MINIPORT_CHARACTERISTICS */
3899
3900 typedef BOOLEAN (*W_CHECK_FOR_HANG_HANDLER)(
3901 IN NDIS_HANDLE MiniportAdapterContext);
3902
3903 typedef VOID (*W_DISABLE_INTERRUPT_HANDLER)(
3904 IN NDIS_HANDLE MiniportAdapterContext);
3905
3906 typedef VOID (*W_ENABLE_INTERRUPT_HANDLER)(
3907 IN NDIS_HANDLE MiniportAdapterContext);
3908
3909 typedef VOID (*W_HALT_HANDLER)(
3910 IN NDIS_HANDLE MiniportAdapterContext);
3911
3912 typedef VOID (*W_HANDLE_INTERRUPT_HANDLER)(
3913 IN NDIS_HANDLE MiniportAdapterContext);
3914
3915 typedef NDIS_STATUS (*W_INITIALIZE_HANDLER)(
3916 OUT PNDIS_STATUS OpenErrorStatus,
3917 OUT PUINT SelectedMediumIndex,
3918 IN PNDIS_MEDIUM MediumArray,
3919 IN UINT MediumArraySize,
3920 IN NDIS_HANDLE MiniportAdapterContext,
3921 IN NDIS_HANDLE WrapperConfigurationContext);
3922
3923 typedef VOID (*W_ISR_HANDLER)(
3924 OUT PBOOLEAN InterruptRecognized,
3925 OUT PBOOLEAN QueueMiniportHandleInterrupt,
3926 IN NDIS_HANDLE MiniportAdapterContext);
3927
3928 typedef NDIS_STATUS (*W_QUERY_INFORMATION_HANDLER)(
3929 IN NDIS_HANDLE MiniportAdapterContext,
3930 IN NDIS_OID Oid,
3931 IN PVOID InformationBuffer,
3932 IN ULONG InformationBufferLength,
3933 OUT PULONG BytesWritten,
3934 OUT PULONG BytesNeeded);
3935
3936 typedef NDIS_STATUS (*W_RECONFIGURE_HANDLER)(
3937 OUT PNDIS_STATUS OpenErrorStatus,
3938 IN NDIS_HANDLE MiniportAdapterContext,
3939 IN NDIS_HANDLE WrapperConfigurationContext);
3940
3941 typedef NDIS_STATUS (*W_RESET_HANDLER)(
3942 OUT PBOOLEAN AddressingReset,
3943 IN NDIS_HANDLE MiniportAdapterContext);
3944
3945 typedef NDIS_STATUS (*W_SEND_HANDLER)(
3946 IN NDIS_HANDLE MiniportAdapterContext,
3947 IN PNDIS_PACKET Packet,
3948 IN UINT Flags);
3949
3950 typedef NDIS_STATUS (*WM_SEND_HANDLER)(
3951 IN NDIS_HANDLE MiniportAdapterContext,
3952 IN NDIS_HANDLE NdisLinkHandle,
3953 IN PNDIS_WAN_PACKET Packet);
3954
3955 typedef NDIS_STATUS (*W_SET_INFORMATION_HANDLER)(
3956 IN NDIS_HANDLE MiniportAdapterContext,
3957 IN NDIS_OID Oid,
3958 IN PVOID InformationBuffer,
3959 IN ULONG InformationBufferLength,
3960 OUT PULONG BytesRead,
3961 OUT PULONG BytesNeeded);
3962
3963 typedef NDIS_STATUS (*W_TRANSFER_DATA_HANDLER)(
3964 OUT PNDIS_PACKET Packet,
3965 OUT PUINT BytesTransferred,
3966 IN NDIS_HANDLE MiniportAdapterContext,
3967 IN NDIS_HANDLE MiniportReceiveContext,
3968 IN UINT ByteOffset,
3969 IN UINT BytesToTransfer);
3970
3971 typedef NDIS_STATUS (*WM_TRANSFER_DATA_HANDLER)(
3972 VOID);
3973
3974 typedef struct _NDIS30_MINIPORT_CHARACTERISTICS
3975 {
3976 UCHAR MajorNdisVersion;
3977 UCHAR MinorNdisVersion;
3978 UINT Reserved;
3979 W_CHECK_FOR_HANG_HANDLER CheckForHangHandler;
3980 W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler;
3981 W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler;
3982 W_HALT_HANDLER HaltHandler;
3983 W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler;
3984 W_INITIALIZE_HANDLER InitializeHandler;
3985 W_ISR_HANDLER ISRHandler;
3986 W_QUERY_INFORMATION_HANDLER QueryInformationHandler;
3987 W_RECONFIGURE_HANDLER ReconfigureHandler;
3988 W_RESET_HANDLER ResetHandler;
3989 union
3990 {
3991 W_SEND_HANDLER SendHandler;
3992 WM_SEND_HANDLER WanSendHandler;
3993 };
3994 W_SET_INFORMATION_HANDLER SetInformationHandler;
3995 union
3996 {
3997 W_TRANSFER_DATA_HANDLER TransferDataHandler;
3998 WM_TRANSFER_DATA_HANDLER WanTransferDataHandler;
3999 };
4000 } NDIS30_MINIPORT_CHARACTERISTICS;
4001
4002
4003 /* Extensions for NDIS 4.0 miniports */
4004 #ifdef NDIS40
4005
4006 typedef VOID (*W_RETURN_PACKET_HANDLER)(
4007 IN NDIS_HANDLE MiniportAdapterContext,
4008 IN PNDIS_PACKET Packet);
4009
4010 typedef VOID (*W_SEND_PACKETS_HANDLER)(
4011 IN NDIS_HANDLE MiniportAdapterContext,
4012 IN PPNDIS_PACKET PacketArray,
4013 IN UINT NumberOfPackets);
4014
4015 typedef VOID (*W_ALLOCATE_COMPLETE_HANDLER)(
4016 IN NDIS_HANDLE MiniportAdapterContext,
4017 IN PVOID VirtualAddress,
4018 IN PNDIS_PHYSICAL_ADDRESS PhysicalAddress,
4019 IN ULONG Length,
4020 IN PVOID Context);
4021
4022 typedef struct _NDIS40_MINIPORT_CHARACTERISTICS
4023 {
4024 NDIS30_MINIPORT_CHARACTERISTICS;
4025
4026 W_RETURN_PACKET_HANDLER ReturnPacketHandler;
4027 W_SEND_PACKETS_HANDLER SendPacketsHandler;
4028 W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
4029 } NDIS40_MINIPORT_CHARACTERISTICS;
4030
4031 #endif /* NDIS40 */
4032
4033 /* Extensions for NDIS 5.0 miniports */
4034
4035 #ifdef NDIS50
4036
4037 typedef NDIS_STATUS (*W_CO_CREATE_VC_HANDLER)(
4038 IN NDIS_HANDLE MiniportAdapterContext,
4039 IN NDIS_HANDLE NdisVcHandle,
4040 OUT PNDIS_HANDLE MiniportVcContext);
4041
4042 typedef NDIS_STATUS (*W_CO_DELETE_VC_HANDLER)(
4043 IN NDIS_HANDLE MiniportVcContext);
4044
4045 typedef NDIS_STATUS (*W_CO_ACTIVATE_VC_HANDLER)(
4046 IN NDIS_HANDLE MiniportVcContext,
4047 IN OUT PCO_CALL_PARAMETERS CallParameters);
4048
4049 typedef NDIS_STATUS (*W_CO_DEACTIVATE_VC_HANDLER)(
4050 IN NDIS_HANDLE MiniportVcContext);
4051
4052 typedef VOID (*W_CO_SEND_PACKETS_HANDLER)(
4053 IN NDIS_HANDLE MiniportVcContext,
4054 IN PPNDIS_PACKET PacketArray,
4055 IN UINT NumberOfPackets);
4056
4057 typedef NDIS_STATUS (*W_CO_REQUEST_HANDLER)(
4058 IN NDIS_HANDLE MiniportAdapterContext,
4059 IN NDIS_HANDLE MiniportVcContext OPTIONAL,
4060 IN OUT PNDIS_REQUEST NdisRequest);
4061
4062 typedef struct _NDIS50_MINIPORT_CHARACTERISTICS
4063 {
4064 NDIS40_MINIPORT_CHARACTERISTICS;
4065
4066 W_CO_CREATE_VC_HANDLER CoCreateVcHandler;
4067 W_CO_DELETE_VC_HANDLER CoDeleteVcHandler;
4068 W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler;
4069 W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler;
4070 W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler;
4071 W_CO_REQUEST_HANDLER CoRequestHandler;
4072 } NDIS50_MINIPORT_CHARACTERISTICS;
4073
4074 #endif /* NDIS50 */
4075
4076
4077 #ifndef NDIS50
4078 #ifndef NDIS40
4079 typedef struct _NDIS30_MINIPORT_CHARACTERISTICS NDIS_MINIPORT_CHARACTERISTICS;
4080 #else /* NDIS40 */
4081 typedef struct _NDIS40_MINIPORT_CHARACTERISTICS NDIS_MINIPORT_CHARACTERISTICS;
4082 #endif /* NDIS40 */
4083 #else /* NDIS50 */
4084 typedef struct _NDIS50_MINIPORT_CHARACTERISTICS NDIS_MINIPORT_CHARACTERISTICS;
4085 #endif /* NDIS50 */
4086
4087 typedef NDIS_MINIPORT_CHARACTERISTICS *PNDIS_MINIPORT_CHARACTERISTICS;
4088
4089
4090 typedef struct _NDIS_MINIPORT_BLOCK NDIS_MINIPORT_BLOCK, *PNDIS_MINIPORT_BLOCK;
4091
4092
4093 typedef struct _NDIS_MINIPORT_INTERRUPT
4094 {
4095 PKINTERRUPT InterruptObject;
4096 KSPIN_LOCK DpcCountLock;
4097 PVOID MiniportIdField;
4098 W_ISR_HANDLER MiniportIsr;
4099 W_HANDLE_INTERRUPT_HANDLER MiniportDpc;
4100 KDPC InterruptDpc;
4101 PNDIS_MINIPORT_BLOCK Miniport;
4102
4103 UCHAR DpcCount;
4104 BOOLEAN Filler1;
4105
4106 KEVENT DpcsCompletedEvent;
4107
4108 BOOLEAN SharedInterrupt;
4109 BOOLEAN IsrRequested;
4110 } NDIS_MINIPORT_INTERRUPT, *PNDIS_MINIPORT_INTERRUPT;
4111
4112
4113 typedef struct _NDIS_MINIPORT_TIMER
4114 {
4115 KTIMER Timer;
4116 KDPC Dpc;
4117 PNDIS_TIMER_FUNCTION MiniportTimerFunction;
4118 PVOID MiniportTimerContext;
4119 PNDIS_MINIPORT_BLOCK Miniport;
4120 struct _NDIS_MINIPORT_TIMER *NextDeferredTimer;
4121 } NDIS_MINIPORT_TIMER, *PNDIS_MINIPORT_TIMER;
4122
4123
4124
4125 /* NDIS intermediate miniport structures */
4126
4127 typedef VOID (*W_MINIPORT_CALLBACK)(
4128 IN NDIS_HANDLE MiniportAdapterContext,
4129 IN PVOID CallbackContext);
4130
4131
4132 /* Routines for NDIS miniport drivers */
4133
4134 VOID
4135 EXPIMP
4136 NdisMCloseLog(
4137 IN NDIS_HANDLE LogHandle);
4138
4139 NDIS_STATUS
4140 EXPIMP
4141 NdisMCreateLog(
4142 IN NDIS_HANDLE MiniportAdapterHandle,
4143 IN UINT Size,
4144 OUT PNDIS_HANDLE LogHandle);
4145
4146 VOID
4147 EXPIMP
4148 NdisMDeregisterAdapterShutdownHandler(
4149 IN NDIS_HANDLE MiniportHandle);
4150
4151 VOID
4152 EXPIMP
4153 NdisMFlushLog(
4154 IN NDIS_HANDLE LogHandle);
4155
4156 VOID
4157 EXPIMP
4158 NdisMIndicateStatus(
4159 IN NDIS_HANDLE MiniportAdapterHandle,
4160 IN NDIS_STATUS GeneralStatus,
4161 IN PVOID StatusBuffer,
4162 IN UINT StatusBufferSize);
4163
4164 VOID
4165 EXPIMP
4166 NdisMIndicateStatusComplete(
4167 IN NDIS_HANDLE MiniportAdapterHandle);
4168
4169 VOID
4170 EXPIMP
4171 NdisInitializeWrapper(
4172 OUT PNDIS_HANDLE NdisWrapperHandle,
4173 IN PVOID SystemSpecific1,
4174 IN PVOID SystemSpecific2,
4175 IN PVOID SystemSpecific3);
4176
4177 /*
4178 * VOID NdisMInitializeWrapper(
4179 * OUT PNDIS_HANDLE NdisWrapperHandle,
4180 * IN PVOID SystemSpecific1,
4181 * IN PVOID SystemSpecific2,
4182 * IN PVOID SystemSpecific3);
4183 */
4184 #define NdisMInitializeWrapper(n, s1, s2, s3) \
4185 NdisInitializeWrapper((n),(s1),(s2),(s3))
4186
4187 VOID
4188 EXPIMP
4189 NdisMRegisterAdapterShutdownHandler(
4190 IN NDIS_HANDLE MiniportHandle,
4191 IN PVOID ShutdownContext,
4192 IN ADAPTER_SHUTDOWN_HANDLER ShutdownHandler);
4193
4194 NDIS_STATUS
4195 EXPIMP
4196 NdisMRegisterMiniport(
4197 IN NDIS_HANDLE NdisWrapperHandle,
4198 IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,
4199 IN UINT CharacteristicsLength);
4200
4201 VOID
4202 EXPIMP
4203 NdisMResetComplete(
4204 IN NDIS_HANDLE MiniportAdapterHandle,
4205 IN NDIS_STATUS Status,
4206 IN BOOLEAN AddressingReset);
4207
4208 VOID
4209 EXPIMP
4210 NdisMSendComplete(
4211 IN NDIS_HANDLE MiniportAdapterHandle,
4212 IN PNDIS_PACKET Packet,
4213 IN NDIS_STATUS Status);
4214
4215 VOID
4216 EXPIMP
4217 NdisMSendResourcesAvailable(
4218 IN NDIS_HANDLE MiniportAdapterHandle);
4219
4220 VOID
4221 EXPIMP
4222 NdisMSetAttributes(
4223 IN NDIS_HANDLE MiniportAdapterHandle,
4224 IN NDIS_HANDLE MiniportAdapterContext,
4225 IN BOOLEAN BusMaster,
4226 IN NDIS_INTERFACE_TYPE AdapterType);
4227
4228 VOID
4229 EXPIMP
4230 NdisMSetAttributesEx(
4231 IN NDIS_HANDLE MiniportAdapterHandle,
4232 IN NDIS_HANDLE MiniportAdapterContext,
4233 IN UINT CheckForHangTimeInSeconds OPTIONAL,
4234 IN ULONG AttributeFlags,
4235 IN NDIS_INTERFACE_TYPE AdapterType);
4236
4237 VOID
4238 EXPIMP
4239 NdisMSleep(
4240 IN ULONG MicrosecondsToSleep);
4241
4242 BOOLEAN
4243 EXPIMP
4244 NdisMSynchronizeWithInterrupt(
4245 IN PNDIS_MINIPORT_INTERRUPT Interrupt,
4246 IN PVOID SynchronizeFunction,
4247 IN PVOID SynchronizeContext);
4248
4249 NDIS_STATUS
4250 EXPIMP
4251 NdisMWriteLogData(
4252 IN NDIS_HANDLE LogHandle,
4253 IN PVOID LogBuffer,
4254 IN UINT LogBufferSize);
4255
4256 VOID
4257 EXPIMP
4258 NdisTerminateWrapper(
4259 IN NDIS_HANDLE NdisWrapperHandle,
4260 IN PVOID SystemSpecific);
4261
4262
4263
4264 /* Routines for intermediate miniport drivers */
4265
4266 NDIS_STATUS
4267 EXPIMP
4268 NdisIMDeInitializeDeviceInstance(
4269 IN NDIS_HANDLE NdisMiniportHandle);
4270
4271 NDIS_STATUS
4272 EXPIMP
4273 NdisIMInitializeDeviceInstance(
4274 IN NDIS_HANDLE DriverHandle,
4275 IN PNDIS_STRING DeviceInstance);
4276
4277 NDIS_STATUS
4278 EXPIMP
4279 NdisIMQueueMiniportCallback(
4280 IN NDIS_HANDLE MiniportAdapterHandle,
4281 IN W_MINIPORT_CALLBACK CallbackRoutine,
4282 IN PVOID CallbackContext);
4283
4284 NDIS_STATUS
4285 EXPIMP
4286 NdisIMRegisterLayeredMiniport(
4287 IN NDIS_HANDLE NdisWrapperHandle,
4288 IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,
4289 IN UINT CharacteristicsLength,
4290 OUT PNDIS_HANDLE DriverHandle);
4291
4292 VOID
4293 EXPIMP
4294 NdisIMRevertBack(
4295 IN NDIS_HANDLE MiniportAdapterHandle,
4296 IN NDIS_HANDLE SwitchHandle);
4297
4298 BOOLEAN
4299 EXPIMP
4300 NdisIMSwitchToMiniport(
4301 IN NDIS_HANDLE MiniportAdapterHandle,
4302 OUT PNDIS_HANDLE SwitchHandle);
4303
4304
4305 VOID
4306 EXPIMP
4307 NdisMSetResetTimeout(
4308 IN NDIS_HANDLE MiniportAdapterHandle,
4309 IN UINT TimeInSeconds);
4310
4311 NDIS_STATUS
4312 EXPIMP
4313 NdisMAllocateMapRegisters(
4314 IN NDIS_HANDLE MiniportAdapterHandle,
4315 IN UINT DmaChannel,
4316 IN BOOLEAN Dma32BitAddresses,
4317 IN ULONG PhysicalMapRegistersNeeded,
4318 IN ULONG MaximumPhysicalMapping);
4319
4320 VOID
4321 EXPIMP
4322 NdisMFreeMapRegisters(
4323 IN NDIS_HANDLE MiniportAdapterHandle);
4324
4325 NDIS_STATUS
4326 EXPIMP
4327 NdisMRegisterIoPortRange(
4328 OUT PVOID * PortOffset,
4329 IN NDIS_HANDLE MiniportAdapterHandle,
4330 IN UINT InitialPort,
4331 IN UINT NumberOfPorts);
4332
4333 VOID
4334 EXPIMP
4335 NdisMDeregisterIoPortRange(
4336 IN NDIS_HANDLE MiniportAdapterHandle,
4337 IN UINT InitialPort,
4338 IN UINT NumberOfPorts,
4339 IN PVOID PortOffset);
4340
4341 NDIS_STATUS
4342 EXPIMP
4343 NdisMMapIoSpace(
4344 OUT PVOID * VirtualAddress,
4345 IN NDIS_HANDLE MiniportAdapterHandle,
4346 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
4347 IN UINT Length);
4348
4349 VOID
4350 EXPIMP
4351 NdisMUnmapIoSpace(
4352 IN NDIS_HANDLE MiniportAdapterHandle,
4353 IN PVOID VirtualAddress,
4354 IN UINT Length);
4355
4356 NDIS_STATUS
4357 EXPIMP
4358 NdisMRegisterInterrupt(
4359 OUT PNDIS_MINIPORT_INTERRUPT Interrupt,
4360 IN NDIS_HANDLE MiniportAdapterHandle,
4361 IN UINT InterruptVector,
4362 IN UINT InterruptLevel,
4363 IN BOOLEAN RequestIsr,
4364 IN BOOLEAN SharedInterrupt,
4365 IN NDIS_INTERRUPT_MODE InterruptMode);
4366
4367 VOID
4368 EXPIMP
4369 NdisMDeregisterInterrupt(
4370 IN PNDIS_MINIPORT_INTERRUPT Interrupt);
4371
4372 BOOLEAN
4373 EXPIMP
4374 NdisMSynchronizeWithInterrupt(
4375 IN PNDIS_MINIPORT_INTERRUPT Interrupt,
4376 IN PVOID SynchronizeFunction,
4377 IN PVOID SynchronizeContext);
4378
4379 VOID
4380 EXPIMP
4381 NdisMQueryAdapterResources(
4382 OUT PNDIS_STATUS Status,
4383 IN NDIS_HANDLE WrapperConfigurationContext,
4384 OUT PNDIS_RESOURCE_LIST ResourceList,
4385 IN OUT PUINT BufferSize);
4386
4387
4388 /* Functions obsoleted by NDIS 5.0 */
4389
4390 VOID
4391 EXPIMP
4392 NdisFreeDmaChannel(
4393 IN PNDIS_HANDLE NdisDmaHandle);
4394
4395 VOID
4396 EXPIMP
4397 NdisFreeSharedMemory(
4398 IN NDIS_HANDLE NdisAdapterHandle,
4399 IN ULONG Length,
4400 IN BOOLEAN Cached,
4401 IN PVOID VirtualAddress,
4402 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
4403
4404 NDIS_STATUS
4405 EXPIMP
4406 NdisIMQueueMiniportCallback(
4407 IN NDIS_HANDLE MiniportAdapterHandle,
4408 IN W_MINIPORT_CALLBACK CallbackRoutine,
4409 IN PVOID CallbackContext);
4410
4411 VOID
4412 EXPIMP
4413 NdisIMRevertBack(
4414 IN NDIS_HANDLE MiniportAdapterHandle,
4415 IN NDIS_HANDLE SwitchHandle);
4416
4417 BOOLEAN
4418 EXPIMP
4419 NdisIMSwitchToMiniport(
4420 IN NDIS_HANDLE MiniportAdapterHandle,
4421 OUT PNDIS_HANDLE SwitchHandle);
4422
4423 VOID
4424 EXPIMP
4425 NdisSetupDmaTransfer(
4426 OUT PNDIS_STATUS Status,
4427 IN PNDIS_HANDLE NdisDmaHandle,
4428 IN PNDIS_BUFFER Buffer,
4429 IN ULONG Offset,
4430 IN ULONG Length,
4431 IN BOOLEAN WriteToDevice);
4432
4433 NTSTATUS
4434 EXPIMP
4435 NdisUpcaseUnicodeString(
4436 OUT PUNICODE_STRING DestinationString,
4437 IN PUNICODE_STRING SourceString);
4438
4439 VOID
4440 EXPIMP
4441 NdisUpdateSharedMemory(
4442 IN NDIS_HANDLE NdisAdapterHandle,
4443 IN ULONG Length,
4444 IN PVOID VirtualAddress,
4445 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
4446
4447 #endif /* NDIS_WRAPPER || NDIS_MINIPORT_DRIVER */
4448
4449 #ifdef __cplusplus
4450 };
4451 #endif /* __cplusplus */
4452
4453 #endif /* __NDIS_H */
4454
4455 /* EOF */