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