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