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