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