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