4 * Network Device Interface Specification definitions
6 * This file is part of the w32api package.
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
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.
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
39 /* Helper macro to enable gcc's extension. */
40 #ifndef __GNU_EXTENSION
42 #define __GNU_EXTENSION __extension__
44 #define __GNU_EXTENSION
54 typedef int NDIS_STATUS
, *PNDIS_STATUS
;
58 #if !defined(_WINDEF_H)
59 typedef unsigned int UINT
, *PUINT
;
69 typedef enum _NET_DEVICE_POWER_STATE
{
70 NetDeviceStateUnspecified
= 0,
76 } NET_DEVICE_POWER_STATE
, *PNET_DEVICE_POWER_STATE
;
78 typedef enum _NET_PNP_EVENT_CODE
{
81 NetEventQueryRemoveDevice
,
82 NetEventCancelRemoveDevice
,
85 NetEventBindsComplete
,
86 NetEventPnPCapabilities
,
89 NetEventPortActivation
,
90 NetEventPortDeactivation
,
91 NetEventIMReEnableDevice
,
93 } NET_PNP_EVENT_CODE
, *PNET_PNP_EVENT_CODE
;
95 typedef struct _NET_PNP_EVENT
{
96 NET_PNP_EVENT_CODE NetEvent
;
99 ULONG_PTR NdisReserved
[4];
100 ULONG_PTR TransportReserved
[4];
101 ULONG_PTR TdiReserved
[4];
102 ULONG_PTR TdiClientReserved
[4];
103 } NET_PNP_EVENT
, *PNET_PNP_EVENT
;
105 #endif /* __NET_PNP__ */
107 #if !defined(NDIS_WRAPPER)
109 #if (defined(NDIS_MINIPORT_MAJOR_VERSION) || \
110 (defined(NDIS_MINIPORT_MINOR_VERSION)) || \
111 (defined(NDIS_PROTOCOL_MAJOR_VERSION)) || \
112 (defined(NDIS_PROTOCOL_MINOR_VERSION)) || \
113 (defined(NDIS_FILTER_MAJOR_VERSION)) || \
114 (defined(NDIS_FILTER_MINOR_VERSION)))
115 #error "Driver should not redefine NDIS reserved macros"
118 #if defined(NDIS_MINIPORT_DRIVER)
120 #if defined(NDIS620_MINIPORT)
121 #define NDIS_MINIPORT_MAJOR_VERSION 6
122 #define NDIS_MINIPORT_MINOR_VERSION 20
123 #elif defined(NDIS61_MINIPORT)
124 #define NDIS_MINIPORT_MAJOR_VERSION 6
125 #define NDIS_MINIPORT_MINOR_VERSION 1
126 #elif defined(NDIS60_MINIPORT)
127 #define NDIS_MINIPORT_MAJOR_VERSION 6
128 #define NDIS_MINIPORT_MINOR_VERSION 0
129 #elif defined(NDIS51_MINIPORT)
130 #define NDIS_MINIPORT_MAJOR_VERSION 5
131 #define NDIS_MINIPORT_MINOR_VERSION 1
132 #elif defined(NDIS50_MINIPORT)
133 #define NDIS_MINIPORT_MAJOR_VERSION 5
134 #define NDIS_MINIPORT_MINOR_VERSION 0
136 #error "Only NDIS miniport drivers with version >= 5 are supported"
139 #if ((NDIS_MINIPORT_MAJOR_VERSION == 6) && \
140 (NDIS_MINIPORT_MINOR_VERSION != 20) && \
141 (NDIS_MINIPORT_MINOR_VERSION != 1) && \
142 (NDIS_MINIPORT_MINOR_VERSION != 0))
143 #error "Invalid miniport major/minor version combination"
144 #elif ((NDIS_MINIPORT_MAJOR_VERSION == 5) && \
145 (NDIS_MINIPORT_MINOR_VERSION != 1) && \
146 (NDIS_MINIPORT_MINOR_VERSION != 0))
147 #error "Invalid miniport major/minor version combination"
150 #if (NDIS_MINIPORT_MAJOR_VERSION == 6) && \
151 ((NDIS_MINIPORT_MINOR_VERSION == 20 && NTDDI_VERSION < NTDDI_WIN7) || \
152 (NDIS_MINIPORT_MINOR_VERSION == 1 && NTDDI_VERSION < NTDDI_VISTA) || \
153 (NDIS_MINIPORT_MINOR_VERSION == 0 && NTDDI_VERSION < NTDDI_VISTA))
154 #error "Wrong NDIS/DDI version"
155 #elif ((NDIS_MINIPORT_MAJOR_VERSION == 5) && \
156 (((NDIS_MINIPORT_MINOR_VERSION == 1) && (NTDDI_VERSION < NTDDI_WINXP)) || \
157 ((NDIS_MINIPORT_MINOR_VERSION == 0) && (NTDDI_VERSION < NTDDI_WIN2K))))
158 #error "Wrong NDIS/DDI version"
162 #endif /* defined(NDIS_MINIPORT_DRIVER) */
165 #error "Only NDIS Protocol drivers version 4 or later are supported"
169 #define NDIS_PROTOCOL_MAJOR_VERSION 6
170 #define NDIS_PROTOCOL_MINOR_VERSION 20
171 #define NDIS_FILTER_MAJOR_VERSION 6
172 #define NDIS_FILTER_MINOR_VERSION 20
173 #elif defined(NDIS61)
174 #define NDIS_PROTOCOL_MAJOR_VERSION 6
175 #define NDIS_PROTOCOL_MINOR_VERSION 1
176 #define NDIS_FILTER_MAJOR_VERSION 6
177 #define NDIS_FILTER_MINOR_VERSION 1
178 #elif defined(NDIS60)
179 #define NDIS_PROTOCOL_MAJOR_VERSION 6
180 #define NDIS_PROTOCOL_MINOR_VERSION 0
181 #define NDIS_FILTER_MAJOR_VERSION 6
182 #define NDIS_FILTER_MINOR_VERSION 0
183 #elif defined(NDIS51)
184 #define NDIS_PROTOCOL_MAJOR_VERSION 5
185 #define NDIS_PROTOCOL_MINOR_VERSION 1
186 #elif defined(NDIS50)
187 #define NDIS_PROTOCOL_MAJOR_VERSION 5
188 #define NDIS_PROTOCOL_MINOR_VERSION 0
189 #elif defined(NDIS40)
190 #define NDIS_PROTOCOL_MAJOR_VERSION 4
191 #define NDIS_PROTOCOL_MINOR_VERSION 0
194 #if !defined(NDIS_MINIPORT_DRIVER) && !defined(NDIS_PROTOCOL_MAJOR_VERSION)
196 #define NDIS_PROTOCOL_MAJOR_VERSION 4
197 #define NDIS_PROTOCOL_MINOR_VERSION 0
200 #if defined(NDIS_FILTER_MAJOR_VERSION)
202 #if ((NDIS_FILTER_MAJOR_VERSION == 6) && \
203 (NDIS_FILTER_MINOR_VERSION != 20) && \
204 (NDIS_FILTER_MINOR_VERSION != 1) && \
205 (NDIS_FILTER_MINOR_VERSION != 0))
206 #error "Invalid Filter version"
209 #endif /* defined(NDIS_FILTER_MAJOR_VERSION) */
212 #if defined(NDIS_PROTOCOL_MAJOR_VERSION)
214 #if ((NDIS_PROTOCOL_MAJOR_VERSION == 6) && \
215 (NDIS_PROTOCOL_MINOR_VERSION != 20) && \
216 (NDIS_PROTOCOL_MINOR_VERSION != 1) && \
217 (NDIS_PROTOCOL_MINOR_VERSION != 0))
218 #error "Invalid Protocol version"
219 #elif ((NDIS_PROTOCOL_MAJOR_VERSION == 5) && \
220 (NDIS_PROTOCOL_MINOR_VERSION != 1) && (NDIS_PROTOCOL_MINOR_VERSION != 0))
221 #error "Invalid Protocol version"
222 #elif ((NDIS_PROTOCOL_MAJOR_VERSION == 4) && (NDIS_PROTOCOL_MINOR_VERSION != 0))
223 #error "Invalid Protocol major/minor version"
226 #if ((NDIS_PROTOCOL_MAJOR_VERSION == 6) && (NTDDI_VERSION < NTDDI_VISTA))
227 #error "Wrong NDIS/DDI version"
230 #endif /* defined(NDIS_PROTOCOL_MAJOR_VERSION) */
232 #endif /* !defined(NDIS_WRAPPER) */
234 #if !defined(NDIS_LEGACY_MINIPORT)
236 #if ((defined(NDIS_MINIPORT_DRIVER) && (NDIS_MINIPORT_MAJOR_VERSION < 6)) || NDIS_WRAPPER)
237 #define NDIS_LEGACY_MINIPORT 1
239 #define NDIS_LEGACY_MINIPORT 0
242 #endif /* !defined(NDIS_LEGACY_MINIPORT) */
244 #if !defined(NDIS_LEGACY_PROTOCOL)
246 #if ((defined(NDIS_PROTOCOL_MAJOR_VERSION) && (NDIS_PROTOCOL_MAJOR_VERSION < 6)) || NDIS_WRAPPER)
247 #define NDIS_LEGACY_PROTOCOL 1
249 #define NDIS_LEGACY_PROTOCOL 0
252 #endif /* !defined(NDIS_LEGACY_PROTOCOL) */
254 #if defined(NDIS_WRAPPER)
257 #define NDISAPI DECLSPEC_IMPORT
260 #if defined(NDIS50_MINIPORT) && !defined(NDIS_MINIPORT_MAJOR_VERSION) && !defined(NDIS_MINIPORT_MINOR_VERSION)
261 #define NDIS_MINIPORT_MAJOR_VERSION 5
262 #define NDIS_MINIPORT_MINOR_VERSION 0
265 #if defined(NDIS51_MINIPORT) && !defined(NDIS_MINIPORT_MAJOR_VERSION) && !defined(NDIS_MINIPORT_MINOR_VERSION)
266 #define NDIS_MINIPORT_MAJOR_VERSION 5
267 #define NDIS_MINIPORT_MINOR_VERSION 1
270 #if defined(NDIS50) && !defined(NDIS_PROTOCOL_MAJOR_VERSION) && !defined(NDIS_PROTOCOL_MINOR_VERSION)
271 #define NDIS_PROTOCOL_MAJOR_VERSION 5
272 #define NDIS_PROTOCOL_MINOR_VERSION 0
275 #if defined(NDIS51) && !defined(NDIS_PROTOCOL_MAJOR_VERSION) && !defined(NDIS_PROTOCOL_MINOR_VERSION)
276 #define NDIS_PROTOCOL_MAJOR_VERSION 5
277 #define NDIS_PROTOCOL_MINOR_VERSION 1
282 typedef PVOID QUEUED_CLOSE
;
285 typedef ULONG NDIS_OID
, *PNDIS_OID
;
287 typedef struct _X_FILTER FDDI_FILTER
, *PFDDI_FILTER
;
288 typedef struct _X_FILTER TR_FILTER
, *PTR_FILTER
;
289 typedef struct _X_FILTER NULL_FILTER
, *PNULL_FILTER
;
291 typedef struct _REFERENCE
{
293 USHORT ReferenceCount
;
295 } REFERENCE
, * PREFERENCE
;
298 /* NDIS base types */
300 typedef struct _NDIS_SPIN_LOCK
{
303 } NDIS_SPIN_LOCK
, * PNDIS_SPIN_LOCK
;
305 typedef struct _NDIS_EVENT
{
307 } NDIS_EVENT
, *PNDIS_EVENT
;
309 typedef PVOID NDIS_HANDLE
, *PNDIS_HANDLE
;
311 typedef ANSI_STRING NDIS_ANSI_STRING
, *PNDIS_ANSI_STRING
;
312 typedef UNICODE_STRING NDIS_STRING
, *PNDIS_STRING
;
314 typedef MDL NDIS_BUFFER
, *PNDIS_BUFFER
;
315 typedef ULONG NDIS_ERROR_CODE
, *PNDIS_ERROR_CODE
;
318 /* NDIS_STATUS constants */
319 #define NDIS_STATUS_SUCCESS ((NDIS_STATUS)STATUS_SUCCESS)
320 #define NDIS_STATUS_PENDING ((NDIS_STATUS)STATUS_PENDING)
321 #define NDIS_STATUS_NOT_RECOGNIZED ((NDIS_STATUS)0x00010001L)
322 #define NDIS_STATUS_NOT_COPIED ((NDIS_STATUS)0x00010002L)
323 #define NDIS_STATUS_NOT_ACCEPTED ((NDIS_STATUS)0x00010003L)
324 #define NDIS_STATUS_CALL_ACTIVE ((NDIS_STATUS)0x00010007L)
325 #define NDIS_STATUS_ONLINE ((NDIS_STATUS)0x40010003L)
326 #define NDIS_STATUS_RESET_START ((NDIS_STATUS)0x40010004L)
327 #define NDIS_STATUS_RESET_END ((NDIS_STATUS)0x40010005L)
328 #define NDIS_STATUS_RING_STATUS ((NDIS_STATUS)0x40010006L)
329 #define NDIS_STATUS_CLOSED ((NDIS_STATUS)0x40010007L)
330 #define NDIS_STATUS_WAN_LINE_UP ((NDIS_STATUS)0x40010008L)
331 #define NDIS_STATUS_WAN_LINE_DOWN ((NDIS_STATUS)0x40010009L)
332 #define NDIS_STATUS_WAN_FRAGMENT ((NDIS_STATUS)0x4001000AL)
333 #define NDIS_STATUS_MEDIA_CONNECT ((NDIS_STATUS)0x4001000BL)
334 #define NDIS_STATUS_MEDIA_DISCONNECT ((NDIS_STATUS)0x4001000CL)
335 #define NDIS_STATUS_HARDWARE_LINE_UP ((NDIS_STATUS)0x4001000DL)
336 #define NDIS_STATUS_HARDWARE_LINE_DOWN ((NDIS_STATUS)0x4001000EL)
337 #define NDIS_STATUS_INTERFACE_UP ((NDIS_STATUS)0x4001000FL)
338 #define NDIS_STATUS_INTERFACE_DOWN ((NDIS_STATUS)0x40010010L)
339 #define NDIS_STATUS_MEDIA_BUSY ((NDIS_STATUS)0x40010011L)
340 #define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION ((NDIS_STATUS)0x40010012L)
341 #define NDIS_STATUS_WW_INDICATION NDIS_STATUS_MEDIA_SPECIFIC_INDICATION
342 #define NDIS_STATUS_LINK_SPEED_CHANGE ((NDIS_STATUS)0x40010013L)
343 #define NDIS_STATUS_WAN_GET_STATS ((NDIS_STATUS)0x40010014L)
344 #define NDIS_STATUS_WAN_CO_FRAGMENT ((NDIS_STATUS)0x40010015L)
345 #define NDIS_STATUS_WAN_CO_LINKPARAMS ((NDIS_STATUS)0x40010016L)
347 #define NDIS_STATUS_NOT_RESETTABLE ((NDIS_STATUS)0x80010001L)
348 #define NDIS_STATUS_SOFT_ERRORS ((NDIS_STATUS)0x80010003L)
349 #define NDIS_STATUS_HARD_ERRORS ((NDIS_STATUS)0x80010004L)
350 #define NDIS_STATUS_BUFFER_OVERFLOW ((NDIS_STATUS)STATUS_BUFFER_OVERFLOW)
352 #define NDIS_STATUS_FAILURE ((NDIS_STATUS)STATUS_UNSUCCESSFUL)
353 #define NDIS_STATUS_RESOURCES ((NDIS_STATUS)STATUS_INSUFFICIENT_RESOURCES)
354 #define NDIS_STATUS_CLOSING ((NDIS_STATUS)0xC0010002L)
355 #define NDIS_STATUS_BAD_VERSION ((NDIS_STATUS)0xC0010004L)
356 #define NDIS_STATUS_BAD_CHARACTERISTICS ((NDIS_STATUS)0xC0010005L)
357 #define NDIS_STATUS_ADAPTER_NOT_FOUND ((NDIS_STATUS)0xC0010006L)
358 #define NDIS_STATUS_OPEN_FAILED ((NDIS_STATUS)0xC0010007L)
359 #define NDIS_STATUS_DEVICE_FAILED ((NDIS_STATUS)0xC0010008L)
360 #define NDIS_STATUS_MULTICAST_FULL ((NDIS_STATUS)0xC0010009L)
361 #define NDIS_STATUS_MULTICAST_EXISTS ((NDIS_STATUS)0xC001000AL)
362 #define NDIS_STATUS_MULTICAST_NOT_FOUND ((NDIS_STATUS)0xC001000BL)
363 #define NDIS_STATUS_REQUEST_ABORTED ((NDIS_STATUS)0xC001000CL)
364 #define NDIS_STATUS_RESET_IN_PROGRESS ((NDIS_STATUS)0xC001000DL)
365 #define NDIS_STATUS_CLOSING_INDICATING ((NDIS_STATUS)0xC001000EL)
366 #define NDIS_STATUS_NOT_SUPPORTED ((NDIS_STATUS)STATUS_NOT_SUPPORTED)
367 #define NDIS_STATUS_INVALID_PACKET ((NDIS_STATUS)0xC001000FL)
368 #define NDIS_STATUS_OPEN_LIST_FULL ((NDIS_STATUS)0xC0010010L)
369 #define NDIS_STATUS_ADAPTER_NOT_READY ((NDIS_STATUS)0xC0010011L)
370 #define NDIS_STATUS_ADAPTER_NOT_OPEN ((NDIS_STATUS)0xC0010012L)
371 #define NDIS_STATUS_NOT_INDICATING ((NDIS_STATUS)0xC0010013L)
372 #define NDIS_STATUS_INVALID_LENGTH ((NDIS_STATUS)0xC0010014L)
373 #define NDIS_STATUS_INVALID_DATA ((NDIS_STATUS)0xC0010015L)
374 #define NDIS_STATUS_BUFFER_TOO_SHORT ((NDIS_STATUS)0xC0010016L)
375 #define NDIS_STATUS_INVALID_OID ((NDIS_STATUS)0xC0010017L)
376 #define NDIS_STATUS_ADAPTER_REMOVED ((NDIS_STATUS)0xC0010018L)
377 #define NDIS_STATUS_UNSUPPORTED_MEDIA ((NDIS_STATUS)0xC0010019L)
378 #define NDIS_STATUS_GROUP_ADDRESS_IN_USE ((NDIS_STATUS)0xC001001AL)
379 #define NDIS_STATUS_FILE_NOT_FOUND ((NDIS_STATUS)0xC001001BL)
380 #define NDIS_STATUS_ERROR_READING_FILE ((NDIS_STATUS)0xC001001CL)
381 #define NDIS_STATUS_ALREADY_MAPPED ((NDIS_STATUS)0xC001001DL)
382 #define NDIS_STATUS_RESOURCE_CONFLICT ((NDIS_STATUS)0xC001001EL)
383 #define NDIS_STATUS_NO_CABLE ((NDIS_STATUS)0xC001001FL)
385 #define NDIS_STATUS_INVALID_SAP ((NDIS_STATUS)0xC0010020L)
386 #define NDIS_STATUS_SAP_IN_USE ((NDIS_STATUS)0xC0010021L)
387 #define NDIS_STATUS_INVALID_ADDRESS ((NDIS_STATUS)0xC0010022L)
388 #define NDIS_STATUS_VC_NOT_ACTIVATED ((NDIS_STATUS)0xC0010023L)
389 #define NDIS_STATUS_DEST_OUT_OF_ORDER ((NDIS_STATUS)0xC0010024L)
390 #define NDIS_STATUS_VC_NOT_AVAILABLE ((NDIS_STATUS)0xC0010025L)
391 #define NDIS_STATUS_CELLRATE_NOT_AVAILABLE ((NDIS_STATUS)0xC0010026L)
392 #define NDIS_STATUS_INCOMPATABLE_QOS ((NDIS_STATUS)0xC0010027L)
393 #define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED ((NDIS_STATUS)0xC0010028L)
394 #define NDIS_STATUS_NO_ROUTE_TO_DESTINATION ((NDIS_STATUS)0xC0010029L)
396 #define NDIS_STATUS_TOKEN_RING_OPEN_ERROR ((NDIS_STATUS)0xC0011000L)
397 #define NDIS_STATUS_INVALID_DEVICE_REQUEST ((NDIS_STATUS)STATUS_INVALID_DEVICE_REQUEST)
398 #define NDIS_STATUS_NETWORK_UNREACHABLE ((NDIS_STATUS)STATUS_NETWORK_UNREACHABLE)
401 /* NDIS error codes for error logging */
403 #define NDIS_ERROR_CODE_RESOURCE_CONFLICT EVENT_NDIS_RESOURCE_CONFLICT
404 #define NDIS_ERROR_CODE_OUT_OF_RESOURCES EVENT_NDIS_OUT_OF_RESOURCE
405 #define NDIS_ERROR_CODE_HARDWARE_FAILURE EVENT_NDIS_HARDWARE_FAILURE
406 #define NDIS_ERROR_CODE_ADAPTER_NOT_FOUND EVENT_NDIS_ADAPTER_NOT_FOUND
407 #define NDIS_ERROR_CODE_INTERRUPT_CONNECT EVENT_NDIS_INTERRUPT_CONNECT
408 #define NDIS_ERROR_CODE_DRIVER_FAILURE EVENT_NDIS_DRIVER_FAILURE
409 #define NDIS_ERROR_CODE_BAD_VERSION EVENT_NDIS_BAD_VERSION
410 #define NDIS_ERROR_CODE_TIMEOUT EVENT_NDIS_TIMEOUT
411 #define NDIS_ERROR_CODE_NETWORK_ADDRESS EVENT_NDIS_NETWORK_ADDRESS
412 #define NDIS_ERROR_CODE_UNSUPPORTED_CONFIGURATION EVENT_NDIS_UNSUPPORTED_CONFIGURATION
413 #define NDIS_ERROR_CODE_INVALID_VALUE_FROM_ADAPTER EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER
414 #define NDIS_ERROR_CODE_MISSING_CONFIGURATION_PARAMETER EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER
415 #define NDIS_ERROR_CODE_BAD_IO_BASE_ADDRESS EVENT_NDIS_BAD_IO_BASE_ADDRESS
416 #define NDIS_ERROR_CODE_RECEIVE_SPACE_SMALL EVENT_NDIS_RECEIVE_SPACE_SMALL
417 #define NDIS_ERROR_CODE_ADAPTER_DISABLED EVENT_NDIS_ADAPTER_DISABLED
420 /* Memory allocation flags. Used by Ndis[Allocate|Free]Memory */
421 #define NDIS_MEMORY_CONTIGUOUS 0x00000001
422 #define NDIS_MEMORY_NONCACHED 0x00000002
424 /* NIC attribute flags. Used by NdisMSetAttributes(Ex) */
425 #define NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT 0x00000001
426 #define NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT 0x00000002
427 #define NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS 0x00000004
428 #define NDIS_ATTRIBUTE_BUS_MASTER 0x00000008
429 #define NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER 0x00000010
430 #define NDIS_ATTRIBUTE_DESERIALIZE 0x00000020
431 #define NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND 0x00000040
432 #define NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK 0x00000080
433 #define NDIS_ATTRIBUTE_NOT_CO_NDIS 0x00000100
434 #define NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS 0x00000200
439 typedef union _NDIS_RW_LOCK_REFCOUNT
{
442 } NDIS_RW_LOCK_REFCOUNT
;
444 typedef struct _NDIS_RW_LOCK
{
445 __GNU_EXTENSION
union {
446 __GNU_EXTENSION
struct {
453 NDIS_RW_LOCK_REFCOUNT RefCount
[MAXIMUM_PROCESSORS
];
454 } NDIS_RW_LOCK
, *PNDIS_RW_LOCK
;
456 typedef struct _LOCK_STATE
{
459 } LOCK_STATE
, *PLOCK_STATE
;
466 (NTAPI
*PNDIS_TIMER_FUNCTION
)(
467 IN PVOID SystemSpecific1
,
468 IN PVOID FunctionContext
,
469 IN PVOID SystemSpecific2
,
470 IN PVOID SystemSpecific3
);
472 typedef struct _NDIS_TIMER
{
475 } NDIS_TIMER
, *PNDIS_TIMER
;
479 typedef CM_MCA_POS_DATA NDIS_MCA_POS_DATA
, *PNDIS_MCA_POS_DATA
;
480 typedef CM_EISA_SLOT_INFORMATION NDIS_EISA_SLOT_INFORMATION
, *PNDIS_EISA_SLOT_INFORMATION
;
481 typedef CM_EISA_FUNCTION_INFORMATION NDIS_EISA_FUNCTION_INFORMATION
, *PNDIS_EISA_FUNCTION_INFORMATION
;
482 typedef CM_PARTIAL_RESOURCE_LIST NDIS_RESOURCE_LIST
, *PNDIS_RESOURCE_LIST
;
484 /* Hardware status codes (OID_GEN_HARDWARE_STATUS) */
485 typedef enum _NDIS_HARDWARE_STATUS
{
486 NdisHardwareStatusReady
,
487 NdisHardwareStatusInitializing
,
488 NdisHardwareStatusReset
,
489 NdisHardwareStatusClosing
,
490 NdisHardwareStatusNotReady
491 } NDIS_HARDWARE_STATUS
, *PNDIS_HARDWARE_STATUS
;
493 /* OID_GEN_GET_TIME_CAPS */
494 typedef struct _GEN_GET_TIME_CAPS
{
496 ULONG ClockPrecision
;
497 } GEN_GET_TIME_CAPS
, *PGEN_GET_TIME_CAPS
;
500 #define READABLE_LOCAL_CLOCK 0x00000001
501 #define CLOCK_NETWORK_DERIVED 0x00000002
502 #define CLOCK_PRECISION 0x00000004
503 #define RECEIVE_TIME_INDICATION_CAPABLE 0x00000008
504 #define TIMED_SEND_CAPABLE 0x00000010
505 #define TIME_STAMP_CAPABLE 0x00000020
507 /* OID_GEN_GET_NETCARD_TIME */
508 typedef struct _GEN_GET_NETCARD_TIME
{
510 } GEN_GET_NETCARD_TIME
, *PGEN_GET_NETCARD_TIME
;
512 /* NDIS packet filter bits (OID_GEN_CURRENT_PACKET_FILTER) */
513 #define NDIS_PACKET_TYPE_DIRECTED 0x00000001
514 #define NDIS_PACKET_TYPE_MULTICAST 0x00000002
515 #define NDIS_PACKET_TYPE_ALL_MULTICAST 0x00000004
516 #define NDIS_PACKET_TYPE_BROADCAST 0x00000008
517 #define NDIS_PACKET_TYPE_SOURCE_ROUTING 0x00000010
518 #define NDIS_PACKET_TYPE_PROMISCUOUS 0x00000020
519 #define NDIS_PACKET_TYPE_SMT 0x00000040
520 #define NDIS_PACKET_TYPE_ALL_LOCAL 0x00000080
521 #define NDIS_PACKET_TYPE_GROUP 0x00001000
522 #define NDIS_PACKET_TYPE_ALL_FUNCTIONAL 0x00002000
523 #define NDIS_PACKET_TYPE_FUNCTIONAL 0x00004000
524 #define NDIS_PACKET_TYPE_MAC_FRAME 0x00008000
526 /* NDIS protocol option bits (OID_GEN_PROTOCOL_OPTIONS) */
527 #define NDIS_PROT_OPTION_ESTIMATED_LENGTH 0x00000001
528 #define NDIS_PROT_OPTION_NO_LOOPBACK 0x00000002
529 #define NDIS_PROT_OPTION_NO_RSVD_ON_RCVPKT 0x00000004
531 /* NDIS MAC option bits (OID_GEN_MAC_OPTIONS) */
532 #define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA 0x00000001
533 #define NDIS_MAC_OPTION_RECEIVE_SERIALIZED 0x00000002
534 #define NDIS_MAC_OPTION_TRANSFERS_NOT_PEND 0x00000004
535 #define NDIS_MAC_OPTION_NO_LOOPBACK 0x00000008
536 #define NDIS_MAC_OPTION_FULL_DUPLEX 0x00000010
537 #define NDIS_MAC_OPTION_EOTX_INDICATION 0x00000020
538 #define NDIS_MAC_OPTION_8021P_PRIORITY 0x00000040
539 #define NDIS_MAC_OPTION_RESERVED 0x80000000
541 /* State of the LAN media (OID_GEN_MEDIA_CONNECT_STATUS) */
542 typedef enum _NDIS_MEDIA_STATE
{
543 NdisMediaStateConnected
,
544 NdisMediaStateDisconnected
545 } NDIS_MEDIA_STATE
, *PNDIS_MEDIA_STATE
;
547 /* OID_GEN_SUPPORTED_GUIDS */
548 typedef struct _NDIS_GUID
{
556 } NDIS_GUID
, *PNDIS_GUID
;
558 #define NDIS_GUID_TO_OID 0x00000001
559 #define NDIS_GUID_TO_STATUS 0x00000002
560 #define NDIS_GUID_ANSI_STRING 0x00000004
561 #define NDIS_GUID_UNICODE_STRING 0x00000008
562 #define NDIS_GUID_ARRAY 0x00000010
564 typedef HANDLE PNDIS_PACKET_POOL
;
566 /* NDIS_PACKET_PRIVATE.Flags constants */
567 #define fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO 0x40
568 #define fPACKET_ALLOCATED_BY_NDIS 0x80
570 typedef struct _NDIS_PACKET_PRIVATE
{
575 PNDIS_PACKET_POOL Pool
;
579 UCHAR NdisPacketFlags
;
580 USHORT NdisPacketOobOffset
;
581 } NDIS_PACKET_PRIVATE
, * PNDIS_PACKET_PRIVATE
;
583 typedef struct _NDIS_PACKET
{
584 NDIS_PACKET_PRIVATE Private
;
585 _ANONYMOUS_UNION
union {
586 _ANONYMOUS_STRUCT
struct {
587 UCHAR MiniportReserved
[2 * sizeof(PVOID
)];
588 UCHAR WrapperReserved
[2 * sizeof(PVOID
)];
590 _ANONYMOUS_STRUCT
struct {
591 UCHAR MiniportReservedEx
[3 * sizeof(PVOID
)];
592 UCHAR WrapperReservedEx
[sizeof(PVOID
)];
594 _ANONYMOUS_STRUCT
struct {
595 UCHAR MacReserved
[4 * sizeof(PVOID
)];
598 ULONG_PTR Reserved
[2];
599 UCHAR ProtocolReserved
[1];
600 } NDIS_PACKET
, *PNDIS_PACKET
, **PPNDIS_PACKET
;
602 typedef enum _NDIS_CLASS_ID
{
603 NdisClass802_3Priority
,
604 NdisClassWirelessWanMbxMailbox
,
605 NdisClassIrdaPacketInfo
,
609 typedef struct MediaSpecificInformation
{
610 UINT NextEntryOffset
;
611 NDIS_CLASS_ID ClassId
;
613 UCHAR ClassInformation
[1];
614 } MEDIA_SPECIFIC_INFORMATION
;
616 typedef struct _NDIS_PACKET_OOB_DATA
{
617 _ANONYMOUS_UNION
union {
618 ULONGLONG TimeToSend
;
621 ULONGLONG TimeReceived
;
623 UINT SizeMediaSpecificInfo
;
624 PVOID MediaSpecificInformation
;
626 } NDIS_PACKET_OOB_DATA
, *PNDIS_PACKET_OOB_DATA
;
628 typedef struct _NDIS_PM_PACKET_PATTERN
{
635 } NDIS_PM_PACKET_PATTERN
, *PNDIS_PM_PACKET_PATTERN
;
637 typedef struct _NDIS_PACKET_STACK
{
638 ULONG_PTR IMReserved
[2];
639 ULONG_PTR NdisReserved
[4];
640 } NDIS_PACKET_STACK
, *PNDIS_PACKET_STACK
;
642 /* Request types used by NdisRequest */
643 typedef enum _NDIS_REQUEST_TYPE
{
644 NdisRequestQueryInformation
,
645 NdisRequestSetInformation
,
646 NdisRequestQueryStatistics
,
650 NdisRequestTransferData
,
656 } NDIS_REQUEST_TYPE
, *PNDIS_REQUEST_TYPE
;
658 typedef struct _NDIS_REQUEST
{
659 UCHAR MacReserved
[4 * sizeof(PVOID
)];
660 NDIS_REQUEST_TYPE RequestType
;
662 struct QUERY_INFORMATION
{
664 PVOID InformationBuffer
;
665 UINT InformationBufferLength
;
669 struct SET_INFORMATION
{
671 PVOID InformationBuffer
;
672 UINT InformationBufferLength
;
677 #if (defined(NDIS50) || defined(NDIS51))
678 UCHAR NdisReserved
[9 * sizeof(PVOID
)];
679 __GNU_EXTENSION
union {
680 UCHAR CallMgrReserved
[2 * sizeof(PVOID
)];
681 UCHAR ProtocolReserved
[2 * sizeof(PVOID
)];
683 UCHAR MiniportReserved
[2 * sizeof(PVOID
)];
685 } NDIS_REQUEST
, *PNDIS_REQUEST
;
689 /* Wide Area Networks definitions */
691 typedef struct _NDIS_WAN_PACKET
{
692 LIST_ENTRY WanPacketQueue
;
693 PUCHAR CurrentBuffer
;
697 PVOID ProtocolReserved1
;
698 PVOID ProtocolReserved2
;
699 PVOID ProtocolReserved3
;
700 PVOID ProtocolReserved4
;
705 } NDIS_WAN_PACKET
, *PNDIS_WAN_PACKET
;
709 /* DMA channel information */
711 typedef struct _NDIS_DMA_DESCRIPTION
{
713 BOOLEAN AutoInitialize
;
714 BOOLEAN DmaChannelSpecified
;
719 } NDIS_DMA_DESCRIPTION
, *PNDIS_DMA_DESCRIPTION
;
721 typedef struct _NDIS_DMA_BLOCK
{
722 PVOID MapRegisterBase
;
723 KEVENT AllocationEvent
;
724 PADAPTER_OBJECT SystemAdapterObject
;
727 } NDIS_DMA_BLOCK
, *PNDIS_DMA_BLOCK
;
729 typedef UCHAR NDIS_DMA_SIZE
;
731 #define NDIS_DMA_24BITS ((NDIS_DMA_SIZE)0)
732 #define NDIS_DMA_32BITS ((NDIS_DMA_SIZE)1)
733 #define NDIS_DMA_64BITS ((NDIS_DMA_SIZE)2)
735 typedef enum _NDIS_PROCESSOR_TYPE
{
741 } NDIS_PROCESSOR_TYPE
, *PNDIS_PROCESSOR_TYPE
;
743 typedef enum _NDIS_ENVIRONMENT_TYPE
{
744 NdisEnvironmentWindows
,
745 NdisEnvironmentWindowsNt
746 } NDIS_ENVIRONMENT_TYPE
, *PNDIS_ENVIRONMENT_TYPE
;
748 /* Possible hardware architecture */
749 typedef enum _NDIS_INTERFACE_TYPE
{
750 NdisInterfaceInternal
= Internal
,
751 NdisInterfaceIsa
= Isa
,
752 NdisInterfaceEisa
= Eisa
,
753 NdisInterfaceMca
= MicroChannel
,
754 NdisInterfaceTurboChannel
= TurboChannel
,
755 NdisInterfacePci
= PCIBus
,
756 NdisInterfacePcMcia
= PCMCIABus
,
757 NdisInterfaceCBus
= CBus
,
758 NdisInterfaceMPIBus
= MPIBus
,
759 NdisInterfaceMPSABus
= MPSABus
,
760 NdisInterfaceProcessorInternal
= ProcessorInternal
,
761 NdisInterfaceInternalPowerBus
= InternalPowerBus
,
762 NdisInterfacePNPISABus
= PNPISABus
,
763 NdisInterfacePNPBus
= PNPBus
,
764 NdisMaximumInterfaceType
765 } NDIS_INTERFACE_TYPE
, *PNDIS_INTERFACE_TYPE
;
767 #define NdisInterruptLevelSensitive LevelSensitive
768 #define NdisInterruptLatched Latched
769 typedef KINTERRUPT_MODE NDIS_INTERRUPT_MODE
, *PNDIS_INTERRUPT_MODE
;
772 typedef enum _NDIS_PARAMETER_TYPE
{
773 NdisParameterInteger
,
774 NdisParameterHexInteger
,
776 NdisParameterMultiString
,
778 } NDIS_PARAMETER_TYPE
, *PNDIS_PARAMETER_TYPE
;
785 typedef struct _NDIS_CONFIGURATION_PARAMETER
{
786 NDIS_PARAMETER_TYPE ParameterType
;
789 NDIS_STRING StringData
;
790 BINARY_DATA BinaryData
;
792 } NDIS_CONFIGURATION_PARAMETER
, *PNDIS_CONFIGURATION_PARAMETER
;
795 typedef PHYSICAL_ADDRESS NDIS_PHYSICAL_ADDRESS
, *PNDIS_PHYSICAL_ADDRESS
;
797 typedef struct _NDIS_PHYSICAL_ADDRESS_UNIT
{
798 NDIS_PHYSICAL_ADDRESS PhysicalAddress
;
800 } NDIS_PHYSICAL_ADDRESS_UNIT
, *PNDIS_PHYSICAL_ADDRESS_UNIT
;
802 typedef struct _NDIS_WAN_LINE_DOWN
{
803 UCHAR RemoteAddress
[6];
804 UCHAR LocalAddress
[6];
805 } NDIS_WAN_LINE_DOWN
, *PNDIS_WAN_LINE_DOWN
;
807 typedef struct _NDIS_WAN_LINE_UP
{
809 ULONG MaximumTotalSize
;
810 NDIS_WAN_QUALITY Quality
;
812 UCHAR RemoteAddress
[6];
813 OUT UCHAR LocalAddress
[6];
814 ULONG ProtocolBufferLength
;
815 PUCHAR ProtocolBuffer
;
817 NDIS_STRING DeviceName
;
818 } NDIS_WAN_LINE_UP
, *PNDIS_WAN_LINE_UP
;
822 (NTAPI
*ADAPTER_SHUTDOWN_HANDLER
)(
823 IN PVOID ShutdownContext
);
826 (NTAPI
*TDI_REGISTER_CALLBACK
)(
827 IN PUNICODE_STRING DeviceName
,
828 OUT HANDLE
* TdiHandle
);
831 (NTAPI
*TDI_PNP_HANDLER
)(
832 IN PUNICODE_STRING UpperComponent
,
833 IN PUNICODE_STRING LowerComponent
,
834 IN PUNICODE_STRING BindList
,
835 IN PVOID ReconfigBuffer
,
836 IN UINT ReconfigBufferSize
,
839 typedef struct _OID_LIST OID_LIST
, *POID_LIST
;
843 typedef enum _NDIS_PNP_DEVICE_STATE
{
845 NdisPnPDeviceStarted
,
846 NdisPnPDeviceQueryStopped
,
847 NdisPnPDeviceStopped
,
848 NdisPnPDeviceQueryRemoved
,
849 NdisPnPDeviceRemoved
,
850 NdisPnPDeviceSurpriseRemoved
851 } NDIS_PNP_DEVICE_STATE
;
853 #define NDIS_DEVICE_NOT_STOPPABLE 0x00000001
854 #define NDIS_DEVICE_NOT_REMOVEABLE 0x00000002
855 #define NDIS_DEVICE_NOT_SUSPENDABLE 0x00000004
856 #define NDIS_DEVICE_DISABLE_PM 0x00000008
857 #define NDIS_DEVICE_DISABLE_WAKE_UP 0x00000010
858 #define NDIS_DEVICE_DISABLE_WAKE_ON_RECONNECT 0x00000020
859 #define NDIS_DEVICE_RESERVED 0x00000040
860 #define NDIS_DEVICE_DISABLE_WAKE_ON_MAGIC_PACKET 0x00000080
861 #define NDIS_DEVICE_DISABLE_WAKE_ON_PATTERN_MATCH 0x00000100
864 /* OID_GEN_NETWORK_LAYER_ADDRESSES */
865 typedef struct _NETWORK_ADDRESS
{
866 USHORT AddressLength
;
869 } NETWORK_ADDRESS
, *PNETWORK_ADDRESS
;
871 typedef struct _NETWORK_ADDRESS_LIST
{
874 NETWORK_ADDRESS Address
[1];
875 } NETWORK_ADDRESS_LIST
, *PNETWORK_ADDRESS_LIST
;
877 /* Protocol types supported by NDIS */
878 #define NDIS_PROTOCOL_ID_DEFAULT 0x00
879 #define NDIS_PROTOCOL_ID_TCP_IP 0x02
880 #define NDIS_PROTOCOL_ID_IPX 0x06
881 #define NDIS_PROTOCOL_ID_NBF 0x07
882 #define NDIS_PROTOCOL_ID_MAX 0x0F
883 #define NDIS_PROTOCOL_ID_MASK 0x0F
885 /* OID_GEN_TRANSPORT_HEADER_OFFSET */
886 typedef struct _TRANSPORT_HEADER_OFFSET
{
889 } TRANSPORT_HEADER_OFFSET
, *PTRANSPORT_HEADER_OFFSET
;
891 /* OID_GEN_CO_LINK_SPEED / OID_GEN_CO_MINIMUM_LINK_SPEED */
892 typedef struct _NDIS_CO_LINK_SPEED
{
895 } NDIS_CO_LINK_SPEED
, *PNDIS_CO_LINK_SPEED
;
897 typedef ULONG NDIS_AF
, *PNDIS_AF
;
899 #define CO_ADDRESS_FAMILY_Q2931 ((NDIS_AF)0x1)
900 #define CO_ADDRESS_FAMILY_PSCHED ((NDIS_AF)0x2)
901 #define CO_ADDRESS_FAMILY_L2TP ((NDIS_AF)0x3)
902 #define CO_ADDRESS_FAMILY_IRDA ((NDIS_AF)0x4)
903 #define CO_ADDRESS_FAMILY_1394 ((NDIS_AF)0x5)
904 #define CO_ADDRESS_FAMILY_PPP ((NDIS_AF)0x6)
905 #define CO_ADDRESS_FAMILY_TAPI ((NDIS_AF)0x800)
906 #define CO_ADDRESS_FAMILY_TAPI_PROXY ((NDIS_AF)0x801)
908 #define CO_ADDRESS_FAMILY_PROXY 0x80000000
911 NDIS_AF AddressFamily
;
914 } CO_ADDRESS_FAMILY
, *PCO_ADDRESS_FAMILY
;
916 typedef struct _CO_SPECIFIC_PARAMETERS
{
920 } CO_SPECIFIC_PARAMETERS
, *PCO_SPECIFIC_PARAMETERS
;
922 typedef struct _CO_CALL_MANAGER_PARAMETERS
{
925 CO_SPECIFIC_PARAMETERS CallMgrSpecific
;
926 } CO_CALL_MANAGER_PARAMETERS
, *PCO_CALL_MANAGER_PARAMETERS
;
928 /* CO_MEDIA_PARAMETERS.Flags constants */
929 #define RECEIVE_TIME_INDICATION 0x00000001
930 #define USE_TIME_STAMPS 0x00000002
931 #define TRANSMIT_VC 0x00000004
932 #define RECEIVE_VC 0x00000008
933 #define INDICATE_ERRED_PACKETS 0x00000010
934 #define INDICATE_END_OF_TX 0x00000020
935 #define RESERVE_RESOURCES_VC 0x00000040
936 #define ROUND_DOWN_FLOW 0x00000080
937 #define ROUND_UP_FLOW 0x00000100
939 typedef struct _CO_MEDIA_PARAMETERS
{
941 ULONG ReceivePriority
;
942 ULONG ReceiveSizeHint
;
943 CO_SPECIFIC_PARAMETERS MediaSpecific
;
944 } CO_MEDIA_PARAMETERS
, *PCO_MEDIA_PARAMETERS
;
946 /* CO_CALL_PARAMETERS.Flags constants */
947 #define PERMANENT_VC 0x00000001
948 #define CALL_PARAMETERS_CHANGED 0x00000002
949 #define QUERY_CALL_PARAMETERS 0x00000004
950 #define BROADCAST_VC 0x00000008
951 #define MULTIPOINT_VC 0x00000010
953 typedef struct _CO_CALL_PARAMETERS
{
955 PCO_CALL_MANAGER_PARAMETERS CallMgrParameters
;
956 PCO_MEDIA_PARAMETERS MediaParameters
;
957 } CO_CALL_PARAMETERS
, *PCO_CALL_PARAMETERS
;
959 typedef struct _CO_SAP
{
965 typedef struct _NDIS_IPSEC_PACKET_INFO
{
966 _ANONYMOUS_UNION
union {
968 NDIS_HANDLE OffloadHandle
;
969 NDIS_HANDLE NextOffloadHandle
;
972 ULONG SA_DELETE_REQ
: 1;
973 ULONG CRYPTO_DONE
: 1;
974 ULONG NEXT_CRYPTO_DONE
: 1;
978 } NDIS_IPSEC_PACKET_INFO
, *PNDIS_IPSEC_PACKET_INFO
;
980 /* NDIS_MAC_FRAGMENT.Errors constants */
981 #define WAN_ERROR_CRC 0x00000001
982 #define WAN_ERROR_FRAMING 0x00000002
983 #define WAN_ERROR_HARDWAREOVERRUN 0x00000004
984 #define WAN_ERROR_BUFFEROVERRUN 0x00000008
985 #define WAN_ERROR_TIMEOUT 0x00000010
986 #define WAN_ERROR_ALIGNMENT 0x00000020
988 typedef struct _NDIS_MAC_FRAGMENT
{
989 NDIS_HANDLE NdisLinkContext
;
991 } NDIS_MAC_FRAGMENT
, *PNDIS_MAC_FRAGMENT
;
993 typedef struct _NDIS_MAC_LINE_DOWN
{
994 NDIS_HANDLE NdisLinkContext
;
995 } NDIS_MAC_LINE_DOWN
, *PNDIS_MAC_LINE_DOWN
;
997 typedef struct _NDIS_MAC_LINE_UP
{
999 NDIS_WAN_QUALITY Quality
;
1001 NDIS_HANDLE ConnectionWrapperID
;
1002 NDIS_HANDLE NdisLinkHandle
;
1003 NDIS_HANDLE NdisLinkContext
;
1004 } NDIS_MAC_LINE_UP
, *PNDIS_MAC_LINE_UP
;
1006 typedef struct _NDIS_PACKET_8021Q_INFO
{
1007 _ANONYMOUS_UNION
union {
1009 UINT32 UserPriority
: 3;
1010 UINT32 CanonicalFormatId
: 1;
1012 UINT32 Reserved
: 16;
1016 } NDIS_PACKET_8021Q_INFO
, *PNDIS_PACKET_8021Q_INFO
;
1018 typedef enum _NDIS_PER_PACKET_INFO
{
1019 TcpIpChecksumPacketInfo
,
1021 TcpLargeSendPacketInfo
,
1022 ClassificationHandlePacketInfo
,
1024 ScatterGatherListPacketInfo
,
1029 } NDIS_PER_PACKET_INFO
, *PNDIS_PER_PACKET_INFO
;
1031 typedef struct _NDIS_PACKET_EXTENSION
{
1032 PVOID NdisPacketInfo
[MaxPerPacketInfo
];
1033 } NDIS_PACKET_EXTENSION
, *PNDIS_PACKET_EXTENSION
;
1035 typedef struct _NDIS_GENERIC_OBJECT
{
1036 NDIS_OBJECT_HEADER Header
;
1038 PVOID CallersCaller
;
1039 PDRIVER_OBJECT DriverObject
;
1040 } NDIS_GENERIC_OBJECT
, *PNDIS_GENERIC_OBJECT
;
1044 * NDIS_GET_ORIGINAL_PACKET(
1045 * IN PNDIS_PACKET Packet);
1047 #define NDIS_GET_ORIGINAL_PACKET(Packet) \
1048 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo)
1052 * NDIS_GET_PACKET_CANCEL_ID(
1053 * IN PNDIS_PACKET Packet);
1055 #define NDIS_GET_PACKET_CANCEL_ID(Packet) \
1056 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId)
1059 * PNDIS_PACKET_EXTENSION
1060 * NDIS_PACKET_EXTENSION_FROM_PACKET(
1061 * IN PNDIS_PACKET Packet);
1063 #define NDIS_PACKET_EXTENSION_FROM_PACKET(Packet) \
1064 ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) \
1065 + (Packet)->Private.NdisPacketOobOffset + sizeof(NDIS_PACKET_OOB_DATA)))
1069 * NDIS_PER_PACKET_INFO_FROM_PACKET(
1070 * IN OUT PNDIS_PACKET Packet,
1071 * IN NDIS_PER_PACKET_INFO InfoType);
1073 #define NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, InfoType) \
1074 ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) + (Packet)->Private.NdisPacketOobOffset \
1075 + sizeof(NDIS_PACKET_OOB_DATA)))->NdisPacketInfo[(InfoType)]
1079 * NDIS_SET_ORIGINAL_PACKET(
1080 * IN OUT PNDIS_PACKET Packet,
1081 * IN PNDIS_PACKET OriginalPacket);
1083 #define NDIS_SET_ORIGINAL_PACKET(Packet, OriginalPacket) \
1084 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo) = (OriginalPacket)
1088 * NDIS_SET_PACKET_CANCEL_ID(
1089 * IN PNDIS_PACKET Packet
1090 * IN ULONG_PTR CancelId);
1092 #define NDIS_SET_PACKET_CANCEL_ID(Packet, CancelId) \
1093 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId) = (CancelId)
1095 typedef enum _NDIS_TASK
{
1096 TcpIpChecksumNdisTask
,
1098 TcpLargeSendNdisTask
,
1100 } NDIS_TASK
, *PNDIS_TASK
;
1102 typedef struct _NDIS_TASK_IPSEC
{
1104 ULONG AH_ESP_COMBINED
;
1105 ULONG TRANSPORT_TUNNEL_COMBINED
;
1113 ULONG Transport
: 1;
1122 ULONG TRIPLE_DES
: 1;
1124 ULONG Transport
: 1;
1129 } NDIS_TASK_IPSEC
, *PNDIS_TASK_IPSEC
;
1131 typedef enum _NDIS_ENCAPSULATION
{
1132 UNSPECIFIED_Encapsulation
,
1134 IEEE_802_3_Encapsulation
,
1135 IEEE_802_5_Encapsulation
,
1136 LLC_SNAP_ROUTED_Encapsulation
,
1137 LLC_SNAP_BRIDGED_Encapsulation
1138 } NDIS_ENCAPSULATION
;
1140 typedef struct _NDIS_ENCAPSULATION_FORMAT
{
1141 NDIS_ENCAPSULATION Encapsulation
;
1143 ULONG FixedHeaderSize
: 1;
1144 ULONG Reserved
: 31;
1146 ULONG EncapsulationHeaderSize
;
1147 } NDIS_ENCAPSULATION_FORMAT
, *PNDIS_ENCAPSULATION_FORMAT
;
1149 typedef struct _NDIS_TASK_OFFLOAD_HEADER
{
1153 ULONG OffsetFirstTask
;
1154 NDIS_ENCAPSULATION_FORMAT EncapsulationFormat
;
1155 } NDIS_TASK_OFFLOAD_HEADER
, *PNDIS_TASK_OFFLOAD_HEADER
;
1157 typedef struct _NDIS_TASK_OFFLOAD
{
1161 ULONG OffsetNextTask
;
1162 ULONG TaskBufferLength
;
1163 UCHAR TaskBuffer
[1];
1164 } NDIS_TASK_OFFLOAD
, *PNDIS_TASK_OFFLOAD
;
1166 /* NDIS_TASK_OFFLOAD_HEADER.Version constants */
1167 #define NDIS_TASK_OFFLOAD_VERSION 1
1169 typedef struct _NDIS_TASK_TCP_IP_CHECKSUM
{
1171 ULONG IpOptionsSupported
:1;
1172 ULONG TcpOptionsSupported
:1;
1173 ULONG TcpChecksum
:1;
1174 ULONG UdpChecksum
:1;
1179 ULONG IpOptionsSupported
: 1;
1180 ULONG TcpOptionsSupported
: 1;
1181 ULONG TcpChecksum
: 1;
1182 ULONG UdpChecksum
: 1;
1183 ULONG IpChecksum
: 1;
1187 ULONG IpOptionsSupported
: 1;
1188 ULONG TcpOptionsSupported
: 1;
1189 ULONG TcpChecksum
: 1;
1190 ULONG UdpChecksum
: 1;
1194 ULONG IpOptionsSupported
: 1;
1195 ULONG TcpOptionsSupported
: 1;
1196 ULONG TcpChecksum
: 1;
1197 ULONG UdpChecksum
: 1;
1199 } NDIS_TASK_TCP_IP_CHECKSUM
, *PNDIS_TASK_TCP_IP_CHECKSUM
;
1201 typedef struct _NDIS_TASK_TCP_LARGE_SEND
{
1203 ULONG MaxOffLoadSize
;
1204 ULONG MinSegmentCount
;
1207 } NDIS_TASK_TCP_LARGE_SEND
, *PNDIS_TASK_TCP_LARGE_SEND
;
1209 typedef struct _NDIS_TCP_IP_CHECKSUM_PACKET_INFO
{
1210 _ANONYMOUS_UNION
union {
1212 ULONG NdisPacketChecksumV4
: 1;
1213 ULONG NdisPacketChecksumV6
: 1;
1214 ULONG NdisPacketTcpChecksum
: 1;
1215 ULONG NdisPacketUdpChecksum
: 1;
1216 ULONG NdisPacketIpChecksum
: 1;
1220 ULONG NdisPacketTcpChecksumFailed
: 1;
1221 ULONG NdisPacketUdpChecksumFailed
: 1;
1222 ULONG NdisPacketIpChecksumFailed
: 1;
1223 ULONG NdisPacketTcpChecksumSucceeded
: 1;
1224 ULONG NdisPacketUdpChecksumSucceeded
: 1;
1225 ULONG NdisPacketIpChecksumSucceeded
: 1;
1226 ULONG NdisPacketLoopback
: 1;
1230 } NDIS_TCP_IP_CHECKSUM_PACKET_INFO
, *PNDIS_TCP_IP_CHECKSUM_PACKET_INFO
;
1232 typedef struct _NDIS_WAN_CO_FRAGMENT
{
1234 } NDIS_WAN_CO_FRAGMENT
, *PNDIS_WAN_CO_FRAGMENT
;
1236 typedef struct _NDIS_WAN_FRAGMENT
{
1237 UCHAR RemoteAddress
[6];
1238 UCHAR LocalAddress
[6];
1239 } NDIS_WAN_FRAGMENT
, *PNDIS_WAN_FRAGMENT
;
1241 typedef struct _WAN_CO_LINKPARAMS
{
1242 ULONG TransmitSpeed
;
1245 } WAN_CO_LINKPARAMS
, *PWAN_CO_LINKPARAMS
;
1251 (NTAPI
*CM_ACTIVATE_VC_COMPLETE_HANDLER
)(
1252 IN NDIS_STATUS Status
,
1253 IN NDIS_HANDLE CallMgrVcContext
,
1254 IN PCO_CALL_PARAMETERS CallParameters
);
1257 (NTAPI
*CM_ADD_PARTY_HANDLER
)(
1258 IN NDIS_HANDLE CallMgrVcContext
,
1259 IN OUT PCO_CALL_PARAMETERS CallParameters
,
1260 IN NDIS_HANDLE NdisPartyHandle
,
1261 OUT PNDIS_HANDLE CallMgrPartyContext
);
1264 (NTAPI
*CM_CLOSE_AF_HANDLER
)(
1265 IN NDIS_HANDLE CallMgrAfContext
);
1268 (NTAPI
*CM_CLOSE_CALL_HANDLER
)(
1269 IN NDIS_HANDLE CallMgrVcContext
,
1270 IN NDIS_HANDLE CallMgrPartyContext OPTIONAL
,
1271 IN PVOID CloseData OPTIONAL
,
1272 IN UINT Size OPTIONAL
);
1275 (NTAPI
*CM_DEREG_SAP_HANDLER
)(
1276 IN NDIS_HANDLE CallMgrSapContext
);
1279 (NTAPI
*CM_DEACTIVATE_VC_COMPLETE_HANDLER
)(
1280 IN NDIS_STATUS Status
,
1281 IN NDIS_HANDLE CallMgrVcContext
);
1284 (NTAPI
*CM_DROP_PARTY_HANDLER
)(
1285 IN NDIS_HANDLE CallMgrPartyContext
,
1286 IN PVOID CloseData OPTIONAL
,
1287 IN UINT Size OPTIONAL
);
1290 (NTAPI
*CM_INCOMING_CALL_COMPLETE_HANDLER
)(
1291 IN NDIS_STATUS Status
,
1292 IN NDIS_HANDLE CallMgrVcContext
,
1293 IN PCO_CALL_PARAMETERS CallParameters
);
1296 (NTAPI
*CM_MAKE_CALL_HANDLER
)(
1297 IN NDIS_HANDLE CallMgrVcContext
,
1298 IN OUT PCO_CALL_PARAMETERS CallParameters
,
1299 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
1300 OUT PNDIS_HANDLE CallMgrPartyContext OPTIONAL
);
1303 (NTAPI
*CM_MODIFY_CALL_QOS_HANDLER
)(
1304 IN NDIS_HANDLE CallMgrVcContext
,
1305 IN PCO_CALL_PARAMETERS CallParameters
);
1308 (NTAPI
*CM_OPEN_AF_HANDLER
)(
1309 IN NDIS_HANDLE CallMgrBindingContext
,
1310 IN PCO_ADDRESS_FAMILY AddressFamily
,
1311 IN NDIS_HANDLE NdisAfHandle
,
1312 OUT PNDIS_HANDLE CallMgrAfContext
);
1315 (NTAPI
*CM_REG_SAP_HANDLER
)(
1316 IN NDIS_HANDLE CallMgrAfContext
,
1318 IN NDIS_HANDLE NdisSapHandle
,
1319 OUT PNDIS_HANDLE CallMgrSapContext
);
1322 (NTAPI
*CO_CREATE_VC_HANDLER
)(
1323 IN NDIS_HANDLE ProtocolAfContext
,
1324 IN NDIS_HANDLE NdisVcHandle
,
1325 OUT PNDIS_HANDLE ProtocolVcContext
);
1328 (NTAPI
*CO_DELETE_VC_HANDLER
)(
1329 IN NDIS_HANDLE ProtocolVcContext
);
1332 (NTAPI
*CO_REQUEST_COMPLETE_HANDLER
)(
1333 IN NDIS_STATUS Status
,
1334 IN NDIS_HANDLE ProtocolAfContext OPTIONAL
,
1335 IN NDIS_HANDLE ProtocolVcContext OPTIONAL
,
1336 IN NDIS_HANDLE ProtocolPartyContext OPTIONAL
,
1337 IN PNDIS_REQUEST NdisRequest
);
1340 (NTAPI
*CO_REQUEST_HANDLER
)(
1341 IN NDIS_HANDLE ProtocolAfContext
,
1342 IN NDIS_HANDLE ProtocolVcContext OPTIONAL
,
1343 IN NDIS_HANDLE ProtocolPartyContext OPTIONAL
,
1344 IN OUT PNDIS_REQUEST NdisRequest
);
1346 typedef struct _NDIS_CALL_MANAGER_CHARACTERISTICS
{
1351 CO_CREATE_VC_HANDLER CmCreateVcHandler
;
1352 CO_DELETE_VC_HANDLER CmDeleteVcHandler
;
1353 CM_OPEN_AF_HANDLER CmOpenAfHandler
;
1354 CM_CLOSE_AF_HANDLER CmCloseAfHandler
;
1355 CM_REG_SAP_HANDLER CmRegisterSapHandler
;
1356 CM_DEREG_SAP_HANDLER CmDeregisterSapHandler
;
1357 CM_MAKE_CALL_HANDLER CmMakeCallHandler
;
1358 CM_CLOSE_CALL_HANDLER CmCloseCallHandler
;
1359 CM_INCOMING_CALL_COMPLETE_HANDLER CmIncomingCallCompleteHandler
;
1360 CM_ADD_PARTY_HANDLER CmAddPartyHandler
;
1361 CM_DROP_PARTY_HANDLER CmDropPartyHandler
;
1362 CM_ACTIVATE_VC_COMPLETE_HANDLER CmActivateVcCompleteHandler
;
1363 CM_DEACTIVATE_VC_COMPLETE_HANDLER CmDeactivateVcCompleteHandler
;
1364 CM_MODIFY_CALL_QOS_HANDLER CmModifyCallQoSHandler
;
1365 CO_REQUEST_HANDLER CmRequestHandler
;
1366 CO_REQUEST_COMPLETE_HANDLER CmRequestCompleteHandler
;
1367 } NDIS_CALL_MANAGER_CHARACTERISTICS
, *PNDIS_CALL_MANAGER_CHARACTERISTICS
;
1371 /* Call Manager clients */
1373 typedef VOID (*CL_OPEN_AF_COMPLETE_HANDLER
)(
1374 IN NDIS_STATUS Status
,
1375 IN NDIS_HANDLE ProtocolAfContext
,
1376 IN NDIS_HANDLE NdisAfHandle
);
1379 (NTAPI
*CL_CLOSE_AF_COMPLETE_HANDLER
)(
1380 IN NDIS_STATUS Status
,
1381 IN NDIS_HANDLE ProtocolAfContext
);
1384 (NTAPI
*CL_REG_SAP_COMPLETE_HANDLER
)(
1385 IN NDIS_STATUS Status
,
1386 IN NDIS_HANDLE ProtocolSapContext
,
1388 IN NDIS_HANDLE NdisSapHandle
);
1391 (NTAPI
*CL_DEREG_SAP_COMPLETE_HANDLER
)(
1392 IN NDIS_STATUS Status
,
1393 IN NDIS_HANDLE ProtocolSapContext
);
1396 (NTAPI
*CL_MAKE_CALL_COMPLETE_HANDLER
)(
1397 IN NDIS_STATUS Status
,
1398 IN NDIS_HANDLE ProtocolVcContext
,
1399 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
1400 IN PCO_CALL_PARAMETERS CallParameters
);
1403 (NTAPI
*CL_MODIFY_CALL_QOS_COMPLETE_HANDLER
)(
1404 IN NDIS_STATUS Status
,
1405 IN NDIS_HANDLE ProtocolVcContext
,
1406 IN PCO_CALL_PARAMETERS CallParameters
);
1409 (NTAPI
*CL_CLOSE_CALL_COMPLETE_HANDLER
)(
1410 IN NDIS_STATUS Status
,
1411 IN NDIS_HANDLE ProtocolVcContext
,
1412 IN NDIS_HANDLE ProtocolPartyContext OPTIONAL
);
1415 (NTAPI
*CL_ADD_PARTY_COMPLETE_HANDLER
)(
1416 IN NDIS_STATUS Status
,
1417 IN NDIS_HANDLE ProtocolPartyContext
,
1418 IN NDIS_HANDLE NdisPartyHandle
,
1419 IN PCO_CALL_PARAMETERS CallParameters
);
1422 (NTAPI
*CL_DROP_PARTY_COMPLETE_HANDLER
)(
1423 IN NDIS_STATUS Status
,
1424 IN NDIS_HANDLE ProtocolPartyContext
);
1427 (NTAPI
*CL_INCOMING_CALL_HANDLER
)(
1428 IN NDIS_HANDLE ProtocolSapContext
,
1429 IN NDIS_HANDLE ProtocolVcContext
,
1430 IN OUT PCO_CALL_PARAMETERS CallParameters
);
1433 (NTAPI
*CL_INCOMING_CALL_QOS_CHANGE_HANDLER
)(
1434 IN NDIS_HANDLE ProtocolVcContext
,
1435 IN PCO_CALL_PARAMETERS CallParameters
);
1438 (NTAPI
*CL_INCOMING_CLOSE_CALL_HANDLER
)(
1439 IN NDIS_STATUS CloseStatus
,
1440 IN NDIS_HANDLE ProtocolVcContext
,
1441 IN PVOID CloseData OPTIONAL
,
1442 IN UINT Size OPTIONAL
);
1445 (NTAPI
*CL_INCOMING_DROP_PARTY_HANDLER
)(
1446 IN NDIS_STATUS DropStatus
,
1447 IN NDIS_HANDLE ProtocolPartyContext
,
1448 IN PVOID CloseData OPTIONAL
,
1449 IN UINT Size OPTIONAL
);
1452 (NTAPI
*CL_CALL_CONNECTED_HANDLER
)(
1453 IN NDIS_HANDLE ProtocolVcContext
);
1456 typedef struct _NDIS_CLIENT_CHARACTERISTICS
{
1461 CO_CREATE_VC_HANDLER ClCreateVcHandler
;
1462 CO_DELETE_VC_HANDLER ClDeleteVcHandler
;
1463 CO_REQUEST_HANDLER ClRequestHandler
;
1464 CO_REQUEST_COMPLETE_HANDLER ClRequestCompleteHandler
;
1465 CL_OPEN_AF_COMPLETE_HANDLER ClOpenAfCompleteHandler
;
1466 CL_CLOSE_AF_COMPLETE_HANDLER ClCloseAfCompleteHandler
;
1467 CL_REG_SAP_COMPLETE_HANDLER ClRegisterSapCompleteHandler
;
1468 CL_DEREG_SAP_COMPLETE_HANDLER ClDeregisterSapCompleteHandler
;
1469 CL_MAKE_CALL_COMPLETE_HANDLER ClMakeCallCompleteHandler
;
1470 CL_MODIFY_CALL_QOS_COMPLETE_HANDLER ClModifyCallQoSCompleteHandler
;
1471 CL_CLOSE_CALL_COMPLETE_HANDLER ClCloseCallCompleteHandler
;
1472 CL_ADD_PARTY_COMPLETE_HANDLER ClAddPartyCompleteHandler
;
1473 CL_DROP_PARTY_COMPLETE_HANDLER ClDropPartyCompleteHandler
;
1474 CL_INCOMING_CALL_HANDLER ClIncomingCallHandler
;
1475 CL_INCOMING_CALL_QOS_CHANGE_HANDLER ClIncomingCallQoSChangeHandler
;
1476 CL_INCOMING_CLOSE_CALL_HANDLER ClIncomingCloseCallHandler
;
1477 CL_INCOMING_DROP_PARTY_HANDLER ClIncomingDropPartyHandler
;
1478 CL_CALL_CONNECTED_HANDLER ClCallConnectedHandler
;
1479 } NDIS_CLIENT_CHARACTERISTICS
, *PNDIS_CLIENT_CHARACTERISTICS
;
1482 /* NDIS protocol structures */
1484 /* Prototypes for NDIS 3.0 protocol characteristics */
1487 (NTAPI
*OPEN_ADAPTER_COMPLETE_HANDLER
)(
1488 IN NDIS_HANDLE ProtocolBindingContext
,
1489 IN NDIS_STATUS Status
,
1490 IN NDIS_STATUS OpenErrorStatus
);
1493 (NTAPI
*CLOSE_ADAPTER_COMPLETE_HANDLER
)(
1494 IN NDIS_HANDLE ProtocolBindingContext
,
1495 IN NDIS_STATUS Status
);
1498 (NTAPI
*RESET_COMPLETE_HANDLER
)(
1499 IN NDIS_HANDLE ProtocolBindingContext
,
1500 IN NDIS_STATUS Status
);
1503 (NTAPI
*REQUEST_COMPLETE_HANDLER
)(
1504 IN NDIS_HANDLE ProtocolBindingContext
,
1505 IN PNDIS_REQUEST NdisRequest
,
1506 IN NDIS_STATUS Status
);
1509 (NTAPI
*STATUS_HANDLER
)(
1510 IN NDIS_HANDLE ProtocolBindingContext
,
1511 IN NDIS_STATUS GeneralStatus
,
1512 IN PVOID StatusBuffer
,
1513 IN UINT StatusBufferSize
);
1516 (NTAPI
*STATUS_COMPLETE_HANDLER
)(
1517 IN NDIS_HANDLE ProtocolBindingContext
);
1520 (NTAPI
*SEND_COMPLETE_HANDLER
)(
1521 IN NDIS_HANDLE ProtocolBindingContext
,
1522 IN PNDIS_PACKET Packet
,
1523 IN NDIS_STATUS Status
);
1526 (NTAPI
*WAN_SEND_COMPLETE_HANDLER
)(
1527 IN NDIS_HANDLE ProtocolBindingContext
,
1528 IN PNDIS_WAN_PACKET Packet
,
1529 IN NDIS_STATUS Status
);
1532 (NTAPI
*TRANSFER_DATA_COMPLETE_HANDLER
)(
1533 IN NDIS_HANDLE ProtocolBindingContext
,
1534 IN PNDIS_PACKET Packet
,
1535 IN NDIS_STATUS Status
,
1536 IN UINT BytesTransferred
);
1539 (NTAPI
*WAN_TRANSFER_DATA_COMPLETE_HANDLER
)(
1544 (NTAPI
*RECEIVE_HANDLER
)(
1545 IN NDIS_HANDLE ProtocolBindingContext
,
1546 IN NDIS_HANDLE MacReceiveContext
,
1547 IN PVOID HeaderBuffer
,
1548 IN UINT HeaderBufferSize
,
1549 IN PVOID LookAheadBuffer
,
1550 IN UINT LookaheadBufferSize
,
1551 IN UINT PacketSize
);
1554 (NTAPI
*WAN_RECEIVE_HANDLER
)(
1555 IN NDIS_HANDLE NdisLinkHandle
,
1557 IN ULONG PacketSize
);
1560 (NTAPI
*RECEIVE_COMPLETE_HANDLER
)(
1561 IN NDIS_HANDLE ProtocolBindingContext
);
1564 /* Protocol characteristics for NDIS 3.0 protocols */
1566 #define NDIS30_PROTOCOL_CHARACTERISTICS_S \
1567 UCHAR MajorNdisVersion; \
1568 UCHAR MinorNdisVersion; \
1570 _ANONYMOUS_UNION union { \
1574 OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler; \
1575 CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler; \
1576 _ANONYMOUS_UNION union { \
1577 SEND_COMPLETE_HANDLER SendCompleteHandler; \
1578 WAN_SEND_COMPLETE_HANDLER WanSendCompleteHandler; \
1579 } DUMMYUNIONNAME2; \
1580 _ANONYMOUS_UNION union { \
1581 TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler; \
1582 WAN_TRANSFER_DATA_COMPLETE_HANDLER WanTransferDataCompleteHandler; \
1583 } DUMMYUNIONNAME3; \
1584 RESET_COMPLETE_HANDLER ResetCompleteHandler; \
1585 REQUEST_COMPLETE_HANDLER RequestCompleteHandler; \
1586 _ANONYMOUS_UNION union { \
1587 RECEIVE_HANDLER ReceiveHandler; \
1588 WAN_RECEIVE_HANDLER WanReceiveHandler; \
1589 } DUMMYUNIONNAME4; \
1590 RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler; \
1591 STATUS_HANDLER StatusHandler; \
1592 STATUS_COMPLETE_HANDLER StatusCompleteHandler; \
1595 typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS
{
1596 NDIS30_PROTOCOL_CHARACTERISTICS_S
1597 } NDIS30_PROTOCOL_CHARACTERISTICS
, *PNDIS30_PROTOCOL_CHARACTERISTICS
;
1600 /* Prototypes for NDIS 4.0 protocol characteristics */
1603 (NTAPI
*RECEIVE_PACKET_HANDLER
)(
1604 IN NDIS_HANDLE ProtocolBindingContext
,
1605 IN PNDIS_PACKET Packet
);
1608 (NTAPI
*BIND_HANDLER
)(
1609 OUT PNDIS_STATUS Status
,
1610 IN NDIS_HANDLE BindContext
,
1611 IN PNDIS_STRING DeviceName
,
1612 IN PVOID SystemSpecific1
,
1613 IN PVOID SystemSpecific2
);
1616 (NTAPI
*UNBIND_HANDLER
)(
1617 OUT PNDIS_STATUS Status
,
1618 IN NDIS_HANDLE ProtocolBindingContext
,
1619 IN NDIS_HANDLE UnbindContext
);
1622 (NTAPI
*PNP_EVENT_HANDLER
)(
1623 IN NDIS_HANDLE ProtocolBindingContext
,
1624 IN PNET_PNP_EVENT NetPnPEvent
);
1627 (NTAPI
*UNLOAD_PROTOCOL_HANDLER
)(
1631 /* Protocol characteristics for NDIS 4.0 protocols */
1635 #define NDIS40_PROTOCOL_CHARACTERISTICS_S \
1636 NDIS30_PROTOCOL_CHARACTERISTICS Ndis30Chars; \
1637 RECEIVE_PACKET_HANDLER ReceivePacketHandler; \
1638 BIND_HANDLER BindAdapterHandler; \
1639 UNBIND_HANDLER UnbindAdapterHandler; \
1640 PNP_EVENT_HANDLER PnPEventHandler; \
1641 UNLOAD_PROTOCOL_HANDLER UnloadHandler;
1643 #else /* !__cplusplus */
1645 #define NDIS40_PROTOCOL_CHARACTERISTICS_S \
1646 NDIS30_PROTOCOL_CHARACTERISTICS_S \
1647 RECEIVE_PACKET_HANDLER ReceivePacketHandler; \
1648 BIND_HANDLER BindAdapterHandler; \
1649 UNBIND_HANDLER UnbindAdapterHandler; \
1650 PNP_EVENT_HANDLER PnPEventHandler; \
1651 UNLOAD_PROTOCOL_HANDLER UnloadHandler;
1653 #endif /* __cplusplus */
1655 typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS
{
1656 NDIS40_PROTOCOL_CHARACTERISTICS_S
1657 } NDIS40_PROTOCOL_CHARACTERISTICS
, *PNDIS40_PROTOCOL_CHARACTERISTICS
;
1659 /* Prototypes for NDIS 5.0 protocol characteristics */
1662 (NTAPI
*CO_SEND_COMPLETE_HANDLER
)(
1663 IN NDIS_STATUS Status
,
1664 IN NDIS_HANDLE ProtocolVcContext
,
1665 IN PNDIS_PACKET Packet
);
1668 (NTAPI
*CO_STATUS_HANDLER
)(
1669 IN NDIS_HANDLE ProtocolBindingContext
,
1670 IN NDIS_HANDLE ProtocolVcContext OPTIONAL
,
1671 IN NDIS_STATUS GeneralStatus
,
1672 IN PVOID StatusBuffer
,
1673 IN UINT StatusBufferSize
);
1676 (NTAPI
*CO_RECEIVE_PACKET_HANDLER
)(
1677 IN NDIS_HANDLE ProtocolBindingContext
,
1678 IN NDIS_HANDLE ProtocolVcContext
,
1679 IN PNDIS_PACKET Packet
);
1682 (NTAPI
*CO_AF_REGISTER_NOTIFY_HANDLER
)(
1683 IN NDIS_HANDLE ProtocolBindingContext
,
1684 IN PCO_ADDRESS_FAMILY AddressFamily
);
1686 #ifdef __cplusplus \
1688 #define NDIS50_PROTOCOL_CHARACTERISTICS_S \
1689 NDIS40_PROTOCOL_CHARACTERISTICS Ndis40Chars; \
1690 PVOID ReservedHandlers[4]; \
1691 CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler; \
1692 CO_STATUS_HANDLER CoStatusHandler; \
1693 CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler; \
1694 CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
1696 #else /* !__cplusplus */
1698 #define NDIS50_PROTOCOL_CHARACTERISTICS_S \
1699 NDIS40_PROTOCOL_CHARACTERISTICS_S \
1700 PVOID ReservedHandlers[4]; \
1701 CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler; \
1702 CO_STATUS_HANDLER CoStatusHandler; \
1703 CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler; \
1704 CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
1706 #endif /* !__cplusplus */
1708 typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS
{
1709 NDIS50_PROTOCOL_CHARACTERISTICS_S
1710 } NDIS50_PROTOCOL_CHARACTERISTICS
, *PNDIS50_PROTOCOL_CHARACTERISTICS
;
1712 #if defined(NDIS50) || defined(NDIS51)
1713 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS
{
1714 NDIS50_PROTOCOL_CHARACTERISTICS_S
1715 } NDIS_PROTOCOL_CHARACTERISTICS
, *PNDIS_PROTOCOL_CHARACTERISTICS
;
1716 #elif defined(NDIS40)
1717 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS
{
1718 NDIS40_PROTOCOL_CHARACTERISTICS_S
1719 } NDIS_PROTOCOL_CHARACTERISTICS
, *PNDIS_PROTOCOL_CHARACTERISTICS
;
1721 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS
{
1722 NDIS30_PROTOCOL_CHARACTERISTICS_S
1723 } NDIS_PROTOCOL_CHARACTERISTICS
, *PNDIS_PROTOCOL_CHARACTERISTICS
;
1728 /* Buffer management routines */
1734 OUT PNDIS_STATUS Status
,
1735 OUT PNDIS_BUFFER
*Buffer
,
1736 IN NDIS_HANDLE PoolHandle
,
1737 IN PVOID VirtualAddress
,
1744 NdisAllocateBufferPool(
1745 OUT PNDIS_STATUS Status
,
1746 OUT PNDIS_HANDLE PoolHandle
,
1747 IN UINT NumberOfDescriptors
);
1753 OUT PNDIS_STATUS Status
,
1754 OUT PNDIS_PACKET
*Packet
,
1755 IN NDIS_HANDLE PoolHandle
);
1760 NdisAllocatePacketPool(
1761 OUT PNDIS_STATUS Status
,
1762 OUT PNDIS_HANDLE PoolHandle
,
1763 IN UINT NumberOfDescriptors
,
1764 IN UINT ProtocolReservedLength
);
1766 #define PROTOCOL_RESERVED_SIZE_IN_PACKET (4 * sizeof(PVOID))
1772 OUT PNDIS_STATUS Status
,
1773 OUT PNDIS_BUFFER
*Buffer
,
1774 IN NDIS_HANDLE PoolHandle
,
1775 IN PVOID MemoryDescriptor
,
1782 NdisCopyFromPacketToPacket(
1783 IN PNDIS_PACKET Destination
,
1784 IN UINT DestinationOffset
,
1785 IN UINT BytesToCopy
,
1786 IN PNDIS_PACKET Source
,
1787 IN UINT SourceOffset
,
1788 OUT PUINT BytesCopied
);
1792 * NdisCopyLookaheadData(
1793 * IN PVOID Destination,
1796 * IN ULONG ReceiveFlags);
1799 #if defined(_M_IX86) || defined(_M_AMD64)
1800 #define NdisCopyLookaheadData(Destination, Source, Length, MacOptions) \
1801 RtlCopyMemory(Destination, Source, Length)
1803 #define NdisCopyLookaheadData(Destination, Source, Length, MacOptions) \
1805 if ((MacOptions) & NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA) \
1807 RtlCopyMemory(_Destination, _Source, _Length); \
1811 PUCHAR _Src = (PUCHAR)(Source); \
1812 PUCHAR _Dest = (PUCHAR)(Destination); \
1813 PUCHAR _End = _Dest + (Length); \
1814 while (_Dest < _End) \
1815 *_Dest++ = *_Src++; \
1823 NdisDprAllocatePacket(
1824 OUT PNDIS_STATUS Status
,
1825 OUT PNDIS_PACKET
*Packet
,
1826 IN NDIS_HANDLE PoolHandle
);
1831 NdisDprAllocatePacketNonInterlocked(
1832 OUT PNDIS_STATUS Status
,
1833 OUT PNDIS_PACKET
*Packet
,
1834 IN NDIS_HANDLE PoolHandle
);
1840 IN PNDIS_PACKET Packet
);
1845 NdisDprFreePacketNonInterlocked(
1846 IN PNDIS_PACKET Packet
);
1852 IN NDIS_HANDLE PoolHandle
);
1858 IN PNDIS_PACKET Packet
);
1864 IN NDIS_HANDLE PoolHandle
);
1870 IN PNDIS_PACKET
*PacketsToReturn
,
1871 IN UINT NumberOfPackets
);
1876 NdisUnchainBufferAtBack(
1877 IN OUT PNDIS_PACKET Packet
,
1878 OUT PNDIS_BUFFER
*Buffer
);
1883 NdisUnchainBufferAtFront(
1884 IN OUT PNDIS_PACKET Packet
,
1885 OUT PNDIS_BUFFER
*Buffer
);
1890 NdisAdjustBufferLength(
1891 IN PNDIS_BUFFER Buffer
,
1898 IN PNDIS_BUFFER Buffer
);
1903 NdisBufferVirtualAddress(
1904 IN PNDIS_BUFFER Buffer
);
1909 NDIS_BUFFER_TO_SPAN_PAGES(
1910 IN PNDIS_BUFFER Buffer
);
1916 IN PNDIS_BUFFER Buffer
);
1921 NdisGetBufferPhysicalArraySize(
1922 IN PNDIS_BUFFER Buffer
,
1923 OUT PUINT ArraySize
);
1928 NdisGetFirstBufferFromPacket(
1929 IN PNDIS_PACKET _Packet
,
1930 OUT PNDIS_BUFFER
*_FirstBuffer
,
1931 OUT PVOID
*_FirstBufferVA
,
1932 OUT PUINT _FirstBufferLength
,
1933 OUT PUINT _TotalBufferLength
);
1937 * NdisGetFirstBufferFromPacketSafe(
1938 * IN PNDIS_PACKET _Packet,
1939 * OUT PNDIS_BUFFER * _FirstBuffer,
1940 * OUT PVOID * _FirstBufferVA,
1941 * OUT PUINT _FirstBufferLength,
1942 * OUT PUINT _TotalBufferLength),
1943 * IN MM_PAGE_PRIORITY _Priority)
1945 #define NdisGetFirstBufferFromPacketSafe(_Packet, \
1948 _FirstBufferLength, \
1949 _TotalBufferLength, \
1952 PNDIS_BUFFER _Buffer; \
1954 _Buffer = (_Packet)->Private.Head; \
1955 *(_FirstBuffer) = _Buffer; \
1956 if (_Buffer != NULL) \
1958 *(_FirstBufferVA) = MmGetSystemAddressForMdlSafe(_Buffer, _Priority); \
1959 *(_FirstBufferLength) = MmGetMdlByteCount(_Buffer); \
1960 _Buffer = _Buffer->Next; \
1961 *(_TotalBufferLength) = *(_FirstBufferLength); \
1962 while (_Buffer != NULL) { \
1963 *(_TotalBufferLength) += MmGetMdlByteCount(_Buffer); \
1964 _Buffer = _Buffer->Next; \
1969 *(_FirstBufferVA) = 0; \
1970 *(_FirstBufferLength) = 0; \
1971 *(_TotalBufferLength) = 0; \
1979 IN PNDIS_BUFFER Buffer
,
1980 OUT PVOID
*VirtualAddress OPTIONAL
,
1986 NdisQueryBufferOffset(
1987 IN PNDIS_BUFFER Buffer
,
1993 * NDIS_BUFFER_LINKAGE(
1994 * IN PNDIS_BUFFER Buffer);
1996 #define NDIS_BUFFER_LINKAGE(Buffer)(Buffer)->Next;
2001 * NdisChainBufferAtBack(
2002 * IN OUT PNDIS_PACKET Packet,
2003 * IN OUT PNDIS_BUFFER Buffer)
2005 #define NdisChainBufferAtBack(Packet, \
2008 PNDIS_BUFFER NdisBuffer = (Buffer); \
2010 while (NdisBuffer->Next != NULL) \
2011 NdisBuffer = NdisBuffer->Next; \
2013 NdisBuffer->Next = NULL; \
2015 if ((Packet)->Private.Head != NULL) \
2016 (Packet)->Private.Tail->Next = (Buffer); \
2018 (Packet)->Private.Head = (Buffer); \
2020 (Packet)->Private.Tail = NdisBuffer; \
2021 (Packet)->Private.ValidCounts = FALSE; \
2027 * NdisChainBufferAtFront(
2028 * IN OUT PNDIS_PACKET Packet,
2029 * IN OUT PNDIS_BUFFER Buffer)
2031 #define NdisChainBufferAtFront(Packet, \
2034 PNDIS_BUFFER _NdisBuffer = (Buffer); \
2036 while (_NdisBuffer->Next != NULL) \
2037 _NdisBuffer = _NdisBuffer->Next; \
2039 if ((Packet)->Private.Head == NULL) \
2040 (Packet)->Private.Tail = _NdisBuffer; \
2042 _NdisBuffer->Next = (Packet)->Private.Head; \
2043 (Packet)->Private.Head = (Buffer); \
2044 (Packet)->Private.ValidCounts = FALSE; \
2050 * NdisGetNextBuffer(
2051 * IN PNDIS_BUFFER CurrentBuffer,
2052 * OUT PNDIS_BUFFER * NextBuffer)
2054 #define NdisGetNextBuffer(CurrentBuffer, \
2057 *(NextBuffer) = (CurrentBuffer)->Next; \
2063 * NdisGetPacketFlags(
2064 * IN PNDIS_PACKET Packet);
2066 #define NdisGetPacketFlags(Packet)(Packet)->Private.Flags;
2071 * NdisClearPacketFlags(
2072 * IN PNDIS_PACKET Packet,
2075 #define NdisClearPacketFlags(Packet, Flags) \
2076 (Packet)->Private.Flags &= ~(Flags)
2081 * NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(
2082 * IN PNDIS_PACKET Packet,
2083 * IN PPVOID pMediaSpecificInfo,
2084 * IN PUINT pSizeMediaSpecificInfo);
2086 #define NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \
2087 _pMediaSpecificInfo, \
2088 _pSizeMediaSpecificInfo) \
2090 if (!((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) || \
2091 !((_Packet)->Private.NdisPacketFlags & fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO)) \
2093 *(_pMediaSpecificInfo) = NULL; \
2094 *(_pSizeMediaSpecificInfo) = 0; \
2098 *(_pMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2099 (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation; \
2100 *(_pSizeMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2101 (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo; \
2108 * NDIS_GET_PACKET_PROTOCOL_TYPE(
2109 * IN PNDIS_PACKET Packet);
2111 #define NDIS_GET_PACKET_PROTOCOL_TYPE(_Packet) \
2112 ((_Packet)->Private.Flags & NDIS_PROTOCOL_ID_MASK)
2116 * NDIS_GET_PACKET_HEADER_SIZE(
2117 * IN PNDIS_PACKET Packet);
2119 #define NDIS_GET_PACKET_HEADER_SIZE(_Packet) \
2120 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2121 (_Packet)->Private.NdisPacketOobOffset))->HeaderSize
2126 * NDIS_GET_PACKET_STATUS(
2127 * IN PNDIS_PACKET Packet);
2129 #define NDIS_GET_PACKET_STATUS(_Packet) \
2130 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2131 (_Packet)->Private.NdisPacketOobOffset))->Status
2136 * NDIS_GET_PACKET_TIME_RECEIVED(
2137 * IN PNDIS_PACKET Packet);
2139 #define NDIS_GET_PACKET_TIME_RECEIVED(_Packet) \
2140 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2141 (_Packet)->Private.NdisPacketOobOffset))->TimeReceived
2146 * NDIS_GET_PACKET_TIME_SENT(
2147 * IN PNDIS_PACKET Packet);
2149 #define NDIS_GET_PACKET_TIME_SENT(_Packet) \
2150 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2151 (_Packet)->Private.NdisPacketOobOffset))->TimeSent
2156 * NDIS_GET_PACKET_TIME_TO_SEND(
2157 * IN PNDIS_PACKET Packet);
2159 #define NDIS_GET_PACKET_TIME_TO_SEND(_Packet) \
2160 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2161 (_Packet)->Private.NdisPacketOobOffset))->TimeToSend
2165 * PNDIS_PACKET_OOB_DATA
2166 * NDIS_OOB_DATA_FROM_PACKET(
2167 * IN PNDIS_PACKET Packet);
2169 #define NDIS_OOB_DATA_FROM_PACKET(_Packet) \
2170 (PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2171 (_Packet)->Private.NdisPacketOobOffset)
2177 * IN PNDIS_PACKET Packet,
2178 * OUT PUINT PhysicalBufferCount OPTIONAL,
2179 * OUT PUINT BufferCount OPTIONAL,
2180 * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
2181 * OUT PUINT TotalPacketLength OPTIONAL);
2186 IN PNDIS_PACKET Packet
,
2187 OUT PUINT PhysicalBufferCount OPTIONAL
,
2188 OUT PUINT BufferCount OPTIONAL
,
2189 OUT PNDIS_BUFFER
*FirstBuffer OPTIONAL
,
2190 OUT PUINT TotalPacketLength OPTIONAL
)
2193 *FirstBuffer
= Packet
->Private
.Head
;
2194 if (TotalPacketLength
|| BufferCount
|| PhysicalBufferCount
)
2196 if (!Packet
->Private
.ValidCounts
)
2200 PNDIS_BUFFER NdisBuffer
;
2201 UINT PhysicalBufferCount
= 0;
2202 UINT TotalPacketLength
= 0;
2205 for (NdisBuffer
= Packet
->Private
.Head
;
2206 NdisBuffer
!= (PNDIS_BUFFER
)NULL
;
2207 NdisBuffer
= NdisBuffer
->Next
)
2209 PhysicalBufferCount
+= NDIS_BUFFER_TO_SPAN_PAGES(NdisBuffer
);
2210 NdisQueryBufferOffset(NdisBuffer
, &Offset
, &PacketLength
);
2211 TotalPacketLength
+= PacketLength
;
2214 Packet
->Private
.PhysicalCount
= PhysicalBufferCount
;
2215 Packet
->Private
.TotalLength
= TotalPacketLength
;
2216 Packet
->Private
.Count
= Count
;
2217 Packet
->Private
.ValidCounts
= TRUE
;
2220 if (PhysicalBufferCount
)
2221 *PhysicalBufferCount
= Packet
->Private
.PhysicalCount
;
2224 *BufferCount
= Packet
->Private
.Count
;
2226 if (TotalPacketLength
)
2227 *TotalPacketLength
= Packet
->Private
.TotalLength
;
2233 * NdisQueryPacketLength(
2234 * IN PNDIS_PACKET Packet,
2235 * OUT PUINT PhysicalBufferCount OPTIONAL,
2236 * OUT PUINT BufferCount OPTIONAL,
2237 * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
2238 * OUT PUINT TotalPacketLength OPTIONAL);
2242 NdisQueryPacketLength(
2243 IN PNDIS_PACKET Packet
,
2244 OUT PUINT TotalPacketLength OPTIONAL
)
2246 if (!(Packet
)->Private
.ValidCounts
) \
2247 NdisQueryPacket(Packet
, NULL
, NULL
, NULL
, TotalPacketLength
); \
2249 *(TotalPacketLength
) = (Packet
)->Private
.TotalLength
; \
2255 * NdisRecalculatePacketCounts(
2256 * IN OUT PNDIS_PACKET Packet);
2258 #define NdisRecalculatePacketCounts(Packet) \
2260 PNDIS_BUFFER _Buffer = (Packet)->Private.Head; \
2261 if (_Buffer != NULL) \
2263 while (_Buffer->Next != NULL) \
2265 _Buffer = _Buffer->Next; \
2267 (Packet)->Private.Tail = _Buffer; \
2269 (Packet)->Private.ValidCounts = FALSE; \
2275 * NdisReinitializePacket(
2276 * IN OUT PNDIS_PACKET Packet);
2278 #define NdisReinitializePacket(Packet) \
2280 (Packet)->Private.Head = (PNDIS_BUFFER)NULL; \
2281 (Packet)->Private.ValidCounts = FALSE; \
2287 * NdisSetPacketFlags(
2288 * IN PNDIS_PACKET Packet,
2291 #define NdisSetPacketFlags(Packet, Flags) \
2292 (Packet)->Private.Flags |= (Flags);
2297 * NDIS_SET_PACKET_HEADER_SIZE(
2298 * IN PNDIS_PACKET Packet,
2301 #define NDIS_SET_PACKET_HEADER_SIZE(_Packet, _HdrSize) \
2302 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2303 (_Packet)->Private.NdisPacketOobOffset))->HeaderSize = (_HdrSize)
2308 * NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(
2309 * IN PNDIS_PACKET Packet,
2310 * IN PVOID MediaSpecificInfo,
2311 * IN UINT SizeMediaSpecificInfo);
2313 #define NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \
2314 _MediaSpecificInfo, \
2315 _SizeMediaSpecificInfo) \
2317 if ((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) \
2319 (_Packet)->Private.NdisPacketFlags |= fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO; \
2320 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2321 (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation = \
2322 (_MediaSpecificInfo); \
2323 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2324 (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo = \
2325 (_SizeMediaSpecificInfo); \
2332 * NDIS_SET_PACKET_STATUS(
2333 * IN PNDIS_PACKET Packet,
2334 * IN NDIS_STATUS Status);
2336 #define NDIS_SET_PACKET_STATUS(_Packet, _Status) \
2337 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2338 (_Packet)->Private.NdisPacketOobOffset))->Status = (_Status)
2343 * NDIS_SET_PACKET_TIME_RECEIVED(
2344 * IN PNDIS_PACKET Packet,
2345 * IN ULONGLONG TimeReceived);
2347 #define NDIS_SET_PACKET_TIME_RECEIVED(_Packet, _TimeReceived) \
2348 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2349 (_Packet)->Private.NdisPacketOobOffset))->TimeReceived = (_TimeReceived)
2354 * NDIS_SET_PACKET_TIME_SENT(
2355 * IN PNDIS_PACKET Packet,
2356 * IN ULONGLONG TimeSent);
2358 #define NDIS_SET_PACKET_TIME_SENT(_Packet, _TimeSent) \
2359 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2360 (_Packet)->Private.NdisPacketOobOffset))->TimeSent = (_TimeSent)
2365 * NDIS_SET_PACKET_TIME_TO_SEND(
2366 * IN PNDIS_PACKET Packet,
2367 * IN ULONGLONG TimeToSend);
2369 #define NDIS_SET_PACKET_TIME_TO_SEND(_Packet, _TimeToSend) \
2370 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2371 (_Packet)->Private.NdisPacketOobOffset))->TimeToSend = (_TimeToSend)
2377 * IN PNDIS_PACKET Packet,
2380 #define NdisSetSendFlags(_Packet,_Flags)(_Packet)->Private.Flags = (_Flags)
2384 /* Memory management routines */
2389 NdisCreateLookaheadBufferFromSharedMemory(
2390 IN PVOID pSharedMemory
,
2391 IN UINT LookaheadLength
,
2392 OUT PVOID
*pLookaheadBuffer
);
2397 NdisDestroyLookaheadBufferFromSharedMemory(
2398 IN PVOID pLookaheadBuffer
);
2400 #if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_ARM) || defined(_M_PPC)
2404 * NdisMoveMappedMemory(
2405 * OUT PVOID Destination,
2409 #define NdisMoveMappedMemory(Destination, Source, Length) \
2410 RtlCopyMemory(Destination, Source, Length)
2414 * NdisZeroMappedMemory(
2415 * IN PVOID Destination,
2418 #define NdisZeroMappedMemory(Destination, Length) \
2419 RtlZeroMemory(Destination, Length)
2423 #define NdisMoveMappedMemory(Destination, Source, Length) \
2425 PUCHAR _Dest = Destination, _Src = Source, _End = _Dest + Length; \
2426 while (_Dest < _End) \
2427 *_Dest++ = _Src++; \
2430 #define NdisZeroMappedMemory(Destination, Length) \
2432 PUCHAR _Dest = Destination, _End = _Dest + Length; \
2433 while (_Dest < _End) \
2437 #endif /* _M_IX86 or _M_AMD64 */
2441 * NdisMoveFromMappedMemory(
2442 * OUT PVOID Destination,
2446 #define NdisMoveFromMappedMemory(Destination, Source, Length) \
2447 NdisMoveMappedMemory(Destination, Source, Length)
2451 * NdisMoveToMappedMemory(
2452 * OUT PVOID Destination,
2456 #define NdisMoveToMappedMemory(Destination, Source, Length) \
2457 NdisMoveMappedMemory(Destination, Source, Length)
2461 * NdisMUpdateSharedMemory(
2462 * IN NDIS_HANDLE MiniportAdapterHandle,
2464 * IN PVOID VirtualAddress,
2465 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2467 #define NdisMUpdateSharedMemory(_H, _L, _V, _P) \
2468 NdisUpdateSharedMemory(_H, _L, _V, _P)
2474 OUT PVOID
*VirtualAddress
,
2476 IN UINT MemoryFlags
,
2477 IN NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress
);
2483 IN PVOID VirtualAddress
,
2485 IN UINT MemoryFlags
);
2490 NdisImmediateReadSharedMemory(
2491 IN NDIS_HANDLE WrapperConfigurationContext
,
2492 IN ULONG SharedMemoryAddress
,
2499 NdisImmediateWriteSharedMemory(
2500 IN NDIS_HANDLE WrapperConfigurationContext
,
2501 IN ULONG SharedMemoryAddress
,
2508 NdisMAllocateSharedMemory(
2509 IN NDIS_HANDLE MiniportAdapterHandle
,
2512 OUT PVOID
*VirtualAddress
,
2513 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress
);
2518 NdisMAllocateSharedMemoryAsync(
2519 IN NDIS_HANDLE MiniportAdapterHandle
,
2526 #define NdisUpdateSharedMemory(NdisAdapterHandle, \
2536 NdisUpdateSharedMemory(
2537 IN NDIS_HANDLE NdisAdapterHandle
,
2539 IN PVOID VirtualAddress
,
2540 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress
);
2542 #endif /* defined(NDIS50) */
2546 * NdisGetPhysicalAddressHigh(
2547 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2549 #define NdisGetPhysicalAddressHigh(PhysicalAddress) \
2550 ((PhysicalAddress).HighPart)
2554 * NdisSetPhysicalAddressHigh(
2555 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
2558 #define NdisSetPhysicalAddressHigh(PhysicalAddress, Value) \
2559 ((PhysicalAddress).HighPart) = (Value)
2563 * NdisGetPhysicalAddressLow(
2564 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2566 #define NdisGetPhysicalAddressLow(PhysicalAddress) \
2567 ((PhysicalAddress).LowPart)
2572 * NdisSetPhysicalAddressLow(
2573 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
2576 #define NdisSetPhysicalAddressLow(PhysicalAddress, Value) \
2577 ((PhysicalAddress).LowPart) = (Value)
2581 * NDIS_PHYSICAL_ADDRESS_CONST(
2585 #define NDIS_PHYSICAL_ADDRESS_CONST(Low, High) \
2586 { {(ULONG)(Low), (LONG)(High)} }
2591 * IN CONST VOID *Source1,
2592 * IN CONST VOID *Source2,
2595 #define NdisEqualMemory(Source1, Source2, Length) \
2596 RtlEqualMemory(Source1, Source2, Length)
2601 * IN PVOID Destination,
2605 #define NdisFillMemory(Destination, Length, Fill) \
2606 RtlFillMemory(Destination, Length, Fill)
2611 * OUT PVOID Destination,
2615 #define NdisMoveMemory(Destination, Source, Length) \
2616 RtlCopyMemory(Destination, Source, Length)
2621 * NdisRetrieveUlong(
2622 * IN PULONG DestinationAddress,
2623 * IN PULONG SourceAddress);
2625 #define NdisRetrieveUlong(DestinationAddress, SourceAddress) \
2626 RtlRetrieveUlong(DestinationAddress, SourceAddress)
2632 * IN PULONG DestinationAddress,
2635 #define NdisStoreUlong(DestinationAddress, Value) \
2636 RtlStoreUlong(DestinationAddress, Value)
2642 * IN PVOID Destination,
2645 #define NdisZeroMemory(Destination, Length) \
2646 RtlZeroMemory(Destination, Length)
2649 (NTAPI
*NDIS_BLOCK_INITIALIZER
) (
2651 IN SIZE_T NumberOfBytes
2654 /* Configuration routines */
2659 NdisOpenConfiguration(
2660 OUT PNDIS_STATUS Status
,
2661 OUT PNDIS_HANDLE ConfigurationHandle
,
2662 IN NDIS_HANDLE WrapperConfigurationContext
);
2667 NdisReadNetworkAddress(
2668 OUT PNDIS_STATUS Status
,
2669 OUT PVOID
*NetworkAddress
,
2670 OUT PUINT NetworkAddressLength
,
2671 IN NDIS_HANDLE ConfigurationHandle
);
2676 NdisReadEisaSlotInformation(
2677 OUT PNDIS_STATUS Status
,
2678 IN NDIS_HANDLE WrapperConfigurationContext
,
2679 OUT PUINT SlotNumber
,
2680 OUT PNDIS_EISA_FUNCTION_INFORMATION EisaData
);
2685 NdisReadEisaSlotInformationEx(
2686 OUT PNDIS_STATUS Status
,
2687 IN NDIS_HANDLE WrapperConfigurationContext
,
2688 OUT PUINT SlotNumber
,
2689 OUT PNDIS_EISA_FUNCTION_INFORMATION
*EisaData
,
2690 OUT PUINT NumberOfFunctions
);
2695 NdisReadPciSlotInformation(
2696 IN NDIS_HANDLE NdisAdapterHandle
,
2697 IN ULONG SlotNumber
,
2705 NdisWritePciSlotInformation(
2706 IN NDIS_HANDLE NdisAdapterHandle
,
2707 IN ULONG SlotNumber
,
2714 /* String management routines */
2719 NdisAnsiStringToUnicodeString(
2720 IN OUT PNDIS_STRING DestinationString
,
2721 IN PNDIS_ANSI_STRING SourceString
);
2726 * IN PNDIS_STRING String1,
2727 * IN PNDIS_STRING String2,
2728 * IN BOOLEAN CaseInsensitive);
2730 #define NdisEqualString(_String1, _String2, _CaseInsensitive) \
2731 RtlEqualUnicodeString(_String1, _String2, _CaseInsensitive)
2737 IN OUT PNDIS_ANSI_STRING DestinationString
,
2738 IN PCSTR SourceString
);
2743 NdisInitUnicodeString(
2744 IN OUT PNDIS_STRING DestinationString
,
2745 IN PCWSTR SourceString
);
2750 NdisUnicodeStringToAnsiString(
2751 IN OUT PNDIS_ANSI_STRING DestinationString
,
2752 IN PNDIS_STRING SourceString
);
2754 #define NdisFreeString(_s) NdisFreeMemory((_s).Buffer, (_s).MaximumLength, 0)
2755 #define NdisPrintString(_s) DbgPrint("%ls", (_s).Buffer)
2758 /* Spin lock reoutines */
2763 NdisAllocateSpinLock(
2764 IN PNDIS_SPIN_LOCK SpinLock
);
2770 IN PNDIS_SPIN_LOCK SpinLock
);
2775 NdisAcquireSpinLock(
2776 IN PNDIS_SPIN_LOCK SpinLock
);
2781 NdisReleaseSpinLock(
2782 IN PNDIS_SPIN_LOCK SpinLock
);
2787 NdisDprAcquireSpinLock(
2788 IN PNDIS_SPIN_LOCK SpinLock
);
2793 NdisDprReleaseSpinLock(
2794 IN PNDIS_SPIN_LOCK SpinLock
);
2800 * NdisRawReadPortBufferUchar(
2802 * OUT PUCHAR Buffer,
2805 #define NdisRawReadPortBufferUchar(Port, Buffer, Length) \
2806 READ_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
2810 * NdisRawReadPortBufferUlong(
2812 * OUT PULONG Buffer,
2815 #define NdisRawReadPortBufferUlong(Port, Buffer, Length) \
2816 READ_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
2820 * NdisRawReadPortBufferUshort(
2822 * OUT PUSHORT Buffer,
2825 #define NdisRawReadPortBufferUshort(Port, Buffer, Length) \
2826 READ_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
2831 * NdisRawReadPortUchar(
2835 #define NdisRawReadPortUchar(Port, Data) \
2836 *(Data) = READ_PORT_UCHAR((PUCHAR)(Port))
2840 * NdisRawReadPortUlong(
2844 #define NdisRawReadPortUlong(Port, Data) \
2845 *(Data) = READ_PORT_ULONG((PULONG)(Port))
2849 * NdisRawReadPortUshort(
2851 * OUT PUSHORT Data);
2853 #define NdisRawReadPortUshort(Port, Data) \
2854 *(Data) = READ_PORT_USHORT((PUSHORT)(Port))
2859 * NdisRawWritePortBufferUchar(
2864 #define NdisRawWritePortBufferUchar(Port, Buffer, Length) \
2865 WRITE_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
2869 * NdisRawWritePortBufferUlong(
2874 #define NdisRawWritePortBufferUlong(Port, Buffer, Length) \
2875 WRITE_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
2879 * NdisRawWritePortBufferUshort(
2881 * IN PUSHORT Buffer,
2884 #define NdisRawWritePortBufferUshort(Port, Buffer, Length) \
2885 WRITE_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
2890 * NdisRawWritePortUchar(
2894 #define NdisRawWritePortUchar(Port, Data) \
2895 WRITE_PORT_UCHAR((PUCHAR)(Port), (UCHAR)(Data))
2899 * NdisRawWritePortUlong(
2903 #define NdisRawWritePortUlong(Port, Data) \
2904 WRITE_PORT_ULONG((PULONG)(Port), (ULONG)(Data))
2908 * NdisRawWritePortUshort(
2912 #define NdisRawWritePortUshort(Port, Data) \
2913 WRITE_PORT_USHORT((PUSHORT)(Port), (USHORT)(Data))
2918 * NdisReadRegisterUchar(
2919 * IN PUCHAR Register,
2922 #define NdisReadRegisterUchar(Register, Data) \
2923 *(Data) = *(Register)
2927 * NdisReadRegisterUlong(
2928 * IN PULONG Register,
2931 #define NdisReadRegisterUlong(Register, Data) \
2932 *(Data) = *(Register)
2936 * NdisReadRegisterUshort(
2937 * IN PUSHORT Register,
2938 * OUT PUSHORT Data);
2940 #define NdisReadRegisterUshort(Register, Data) \
2941 *(Data) = *(Register)
2945 * NdisReadRegisterUchar(
2946 * IN PUCHAR Register,
2949 #define NdisWriteRegisterUchar(Register, Data) \
2950 WRITE_REGISTER_UCHAR((Register), (Data))
2954 * NdisReadRegisterUlong(
2955 * IN PULONG Register,
2958 #define NdisWriteRegisterUlong(Register, Data) \
2959 WRITE_REGISTER_ULONG((Register), (Data))
2963 * NdisReadRegisterUshort(
2964 * IN PUSHORT Register,
2967 #define NdisWriteRegisterUshort(Register, Data) \
2968 WRITE_REGISTER_USHORT((Register), (Data))
2975 * NdisInitializeListHead(
2976 * IN PLIST_ENTRY ListHead);
2978 #define NdisInitializeListHead(_ListHead) \
2979 InitializeListHead(_ListHead)
2983 * NdisInterlockedInsertHeadList(
2984 * IN PLIST_ENTRY ListHead,
2985 * IN PLIST_ENTRY ListEntry,
2986 * IN PNDIS_SPIN_LOCK SpinLock);
2988 #define NdisInterlockedInsertHeadList(_ListHead, _ListEntry, _SpinLock) \
2989 ExInterlockedInsertHeadList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
2993 * NdisInterlockedInsertTailList(
2994 * IN PLIST_ENTRY ListHead,
2995 * IN PLIST_ENTRY ListEntry,
2996 * IN PNDIS_SPIN_LOCK SpinLock);
2998 #define NdisInterlockedInsertTailList(_ListHead, _ListEntry, _SpinLock) \
2999 ExInterlockedInsertTailList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
3003 * NdisInterlockedRemoveHeadList(
3004 * IN PLIST_ENTRY ListHead,
3005 * IN PNDIS_SPIN_LOCK SpinLock);
3007 #define NdisInterlockedRemoveHeadList(_ListHead, _SpinLock) \
3008 ExInterlockedRemoveHeadList(_ListHead, &(_SpinLock)->SpinLock)
3012 * NdisInitializeSListHead(
3013 * IN PSLIST_HEADER SListHead);
3015 #define NdisInitializeSListHead(SListHead) ExInitializeSListHead(SListHead)
3018 * USHORT NdisQueryDepthSList(
3019 * IN PSLIST_HEADER SListHead);
3021 #define NdisQueryDepthSList(SListHead) ExQueryDepthSList(SListHead)
3025 /* Interlocked routines */
3029 * NdisInterlockedDecrement(
3032 #define NdisInterlockedDecrement(Addend) InterlockedDecrement(Addend)
3036 * NdisInterlockedIncrement(
3039 #define NdisInterlockedIncrement(Addend) InterlockedIncrement(Addend)
3043 * NdisInterlockedAddUlong(
3045 * IN ULONG Increment,
3046 * IN PNDIS_SPIN_LOCK SpinLock);
3048 #define NdisInterlockedAddUlong(_Addend, _Increment, _SpinLock) \
3049 ExInterlockedAddUlong(_Addend, _Increment, &(_SpinLock)->SpinLock)
3053 /* Miscellaneous routines */
3058 NdisCloseConfiguration(
3059 IN NDIS_HANDLE ConfigurationHandle
);
3064 NdisReadConfiguration(
3065 OUT PNDIS_STATUS Status
,
3066 OUT PNDIS_CONFIGURATION_PARAMETER
*ParameterValue
,
3067 IN NDIS_HANDLE ConfigurationHandle
,
3068 IN PNDIS_STRING Keyword
,
3069 IN NDIS_PARAMETER_TYPE ParameterType
);
3074 NdisWriteConfiguration(
3075 OUT PNDIS_STATUS Status
,
3076 IN NDIS_HANDLE WrapperConfigurationContext
,
3077 IN PNDIS_STRING Keyword
,
3078 IN PNDIS_CONFIGURATION_PARAMETER ParameterValue
);
3083 NdisWriteErrorLogEntry(
3084 IN NDIS_HANDLE NdisAdapterHandle
,
3085 IN NDIS_ERROR_CODE ErrorCode
,
3086 IN ULONG NumberOfErrorValues
,
3091 * NdisStallExecution(
3092 * IN UINT MicrosecondsToStall)
3094 #define NdisStallExecution KeStallExecutionProcessor
3099 NdisGetCurrentSystemTime(
3100 IN PLARGE_INTEGER pSystemTime
);
3105 NdisSystemProcessorCount(VOID
);
3110 NdisGetCurrentProcessorCpuUsage(
3111 OUT PULONG pCpuUsage
);
3115 /* NDIS helper macros */
3119 * NDIS_INIT_FUNCTION(FunctionName)
3121 #define NDIS_INIT_FUNCTION(FunctionName) \
3122 alloc_text(init, FunctionName)
3126 * NDIS_PAGABLE_FUNCTION(FunctionName)
3128 #define NDIS_PAGEABLE_FUNCTION(FunctionName) \
3129 alloc_text(page, FunctionName)
3131 #define NDIS_PAGABLE_FUNCTION NDIS_PAGEABLE_FUNCTION
3134 /* NDIS 4.0 extensions */
3139 NdisMFreeSharedMemory(
3140 IN NDIS_HANDLE MiniportAdapterHandle
,
3143 IN PVOID VirtualAddress
,
3144 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress
);
3149 NdisMWanIndicateReceive(
3150 OUT PNDIS_STATUS Status
,
3151 IN NDIS_HANDLE MiniportAdapterHandle
,
3152 IN NDIS_HANDLE NdisLinkContext
,
3153 IN PUCHAR PacketBuffer
,
3154 IN UINT PacketSize
);
3159 NdisMWanIndicateReceiveComplete(
3160 IN NDIS_HANDLE MiniportAdapterHandle
);
3165 NdisMWanSendComplete(
3166 IN NDIS_HANDLE MiniportAdapterHandle
,
3167 IN PNDIS_WAN_PACKET Packet
,
3168 IN NDIS_STATUS Status
);
3173 NdisPciAssignResources(
3174 IN NDIS_HANDLE NdisMacHandle
,
3175 IN NDIS_HANDLE NdisWrapperHandle
,
3176 IN NDIS_HANDLE WrapperConfigurationContext
,
3177 IN ULONG SlotNumber
,
3178 OUT PNDIS_RESOURCE_LIST
*AssignedResources
);
3181 /* NDIS 5.0 extensions */
3186 NdisAcquireReadWriteLock(
3187 IN PNDIS_RW_LOCK Lock
,
3189 IN PLOCK_STATE LockState
);
3194 NdisAllocateMemoryWithTag(
3195 OUT PVOID
*VirtualAddress
,
3202 NdisAllocatePacketPoolEx(
3203 OUT PNDIS_STATUS Status
,
3204 OUT PNDIS_HANDLE PoolHandle
,
3205 IN UINT NumberOfDescriptors
,
3206 IN UINT NumberOfOverflowDescriptors
,
3207 IN UINT ProtocolReservedLength
);
3212 NdisSetPacketPoolProtocolId(
3213 IN NDIS_HANDLE PacketPoolHandle
,
3214 IN UINT ProtocolId
);
3219 NdisCompletePnPEvent(
3220 IN NDIS_STATUS Status
,
3221 IN NDIS_HANDLE NdisBindingHandle
,
3222 IN PNET_PNP_EVENT NetPnPEvent
);
3227 NdisGetCurrentProcessorCounts(
3228 OUT PULONG pIdleCount
,
3229 OUT PULONG pKernelAndUser
,
3235 NdisGetDriverHandle(
3236 IN PNDIS_HANDLE NdisBindingHandle
,
3237 OUT PNDIS_HANDLE NdisDriverHandle
);
3242 NdisGetReceivedPacket(
3243 IN PNDIS_HANDLE NdisBindingHandle
,
3244 IN PNDIS_HANDLE MacContext
);
3249 NdisGetSystemUpTime(
3250 OUT PULONG pSystemUpTime
);
3255 NdisInitializeReadWriteLock(
3256 IN PNDIS_RW_LOCK Lock
);
3261 NdisMDeregisterDevice(
3262 IN NDIS_HANDLE NdisDeviceHandle
);
3267 NdisMGetDeviceProperty(
3268 IN NDIS_HANDLE MiniportAdapterHandle
,
3269 IN OUT PDEVICE_OBJECT
*PhysicalDeviceObject OPTIONAL
,
3270 IN OUT PDEVICE_OBJECT
*FunctionalDeviceObject OPTIONAL
,
3271 IN OUT PDEVICE_OBJECT
*NextDeviceObject OPTIONAL
,
3272 IN OUT PCM_RESOURCE_LIST
*AllocatedResources OPTIONAL
,
3273 IN OUT PCM_RESOURCE_LIST
*AllocatedResourcesTranslated OPTIONAL
);
3278 NdisMInitializeScatterGatherDma(
3279 IN NDIS_HANDLE MiniportAdapterHandle
,
3280 IN BOOLEAN Dma64BitAddresses
,
3281 IN ULONG MaximumPhysicalMapping
);
3286 NdisMPromoteMiniport(
3287 IN NDIS_HANDLE MiniportAdapterHandle
);
3292 NdisMQueryAdapterInstanceName(
3293 OUT PNDIS_STRING AdapterInstanceName
,
3294 IN NDIS_HANDLE MiniportAdapterHandle
);
3299 NdisMRegisterDevice(
3300 IN NDIS_HANDLE NdisWrapperHandle
,
3301 IN PNDIS_STRING DeviceName
,
3302 IN PNDIS_STRING SymbolicName
,
3303 IN PDRIVER_DISPATCH MajorFunctions
[],
3304 OUT PDEVICE_OBJECT
*pDeviceObject
,
3305 OUT NDIS_HANDLE
*NdisDeviceHandle
);
3310 NdisMRegisterUnloadHandler(
3311 IN NDIS_HANDLE NdisWrapperHandle
,
3312 IN PDRIVER_UNLOAD UnloadHandler
);
3317 NdisMRemoveMiniport(
3318 IN NDIS_HANDLE MiniportAdapterHandle
);
3323 NdisMSetMiniportSecondary(
3324 IN NDIS_HANDLE MiniportAdapterHandle
,
3325 IN NDIS_HANDLE PrimaryMiniportAdapterHandle
);
3330 NdisOpenConfigurationKeyByIndex(
3331 OUT PNDIS_STATUS Status
,
3332 IN NDIS_HANDLE ConfigurationHandle
,
3334 OUT PNDIS_STRING KeyName
,
3335 OUT PNDIS_HANDLE KeyHandle
);
3340 NdisOpenConfigurationKeyByName(
3341 OUT PNDIS_STATUS Status
,
3342 IN NDIS_HANDLE ConfigurationHandle
,
3343 IN PNDIS_STRING SubKeyName
,
3344 OUT PNDIS_HANDLE SubKeyHandle
);
3349 NdisPacketPoolUsage(
3350 IN NDIS_HANDLE PoolHandle
);
3355 NdisQueryAdapterInstanceName(
3356 OUT PNDIS_STRING AdapterInstanceName
,
3357 IN NDIS_HANDLE NdisBindingHandle
);
3362 NdisReadPcmciaAttributeMemory(
3363 IN NDIS_HANDLE NdisAdapterHandle
,
3371 NdisReleaseReadWriteLock(
3372 IN PNDIS_RW_LOCK Lock
,
3373 IN PLOCK_STATE LockState
);
3378 NdisWriteEventLogEntry(
3380 IN NDIS_STATUS EventCode
,
3381 IN ULONG UniqueEventValue
,
3382 IN USHORT NumStrings
,
3383 IN PVOID StringsList OPTIONAL
,
3385 IN PVOID Data OPTIONAL
);
3390 NdisWritePcmciaAttributeMemory(
3391 IN NDIS_HANDLE NdisAdapterHandle
,
3397 /* Connectionless services */
3403 IN NDIS_HANDLE NdisVcHandle
,
3404 IN NDIS_HANDLE ProtocolPartyContext
,
3405 IN OUT PCO_CALL_PARAMETERS CallParameters
,
3406 OUT PNDIS_HANDLE NdisPartyHandle
);
3411 NdisClCloseAddressFamily(
3412 IN NDIS_HANDLE NdisAfHandle
);
3418 IN NDIS_HANDLE NdisVcHandle
,
3419 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
3420 IN PVOID Buffer OPTIONAL
,
3426 NdisClDeregisterSap(
3427 IN NDIS_HANDLE NdisSapHandle
);
3433 IN NDIS_HANDLE NdisPartyHandle
,
3434 IN PVOID Buffer OPTIONAL
,
3440 NdisClIncomingCallComplete(
3441 IN NDIS_STATUS Status
,
3442 IN NDIS_HANDLE NdisVcHandle
,
3443 IN PCO_CALL_PARAMETERS CallParameters
);
3449 IN NDIS_HANDLE NdisVcHandle
,
3450 IN OUT PCO_CALL_PARAMETERS CallParameters
,
3451 IN NDIS_HANDLE ProtocolPartyContext OPTIONAL
,
3452 OUT PNDIS_HANDLE NdisPartyHandle OPTIONAL
);
3457 NdisClModifyCallQoS(
3458 IN NDIS_HANDLE NdisVcHandle
,
3459 IN PCO_CALL_PARAMETERS CallParameters
);
3465 NdisClOpenAddressFamily(
3466 IN NDIS_HANDLE NdisBindingHandle
,
3467 IN PCO_ADDRESS_FAMILY AddressFamily
,
3468 IN NDIS_HANDLE ProtocolAfContext
,
3469 IN PNDIS_CLIENT_CHARACTERISTICS ClCharacteristics
,
3470 IN UINT SizeOfClCharacteristics
,
3471 OUT PNDIS_HANDLE NdisAfHandle
);
3477 IN NDIS_HANDLE NdisAfHandle
,
3478 IN NDIS_HANDLE ProtocolSapContext
,
3480 OUT PNDIS_HANDLE NdisSapHandle
);
3483 /* Call Manager services */
3489 IN NDIS_HANDLE NdisVcHandle
,
3490 IN OUT PCO_CALL_PARAMETERS CallParameters
);
3495 NdisCmAddPartyComplete(
3496 IN NDIS_STATUS Status
,
3497 IN NDIS_HANDLE NdisPartyHandle
,
3498 IN NDIS_HANDLE CallMgrPartyContext OPTIONAL
,
3499 IN PCO_CALL_PARAMETERS CallParameters
);
3504 NdisCmCloseAddressFamilyComplete(
3505 IN NDIS_STATUS Status
,
3506 IN NDIS_HANDLE NdisAfHandle
);
3511 NdisCmCloseCallComplete(
3512 IN NDIS_STATUS Status
,
3513 IN NDIS_HANDLE NdisVcHandle
,
3514 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
);
3520 IN NDIS_HANDLE NdisVcHandle
);
3525 NdisCmDeregisterSapComplete(
3526 IN NDIS_STATUS Status
,
3527 IN NDIS_HANDLE NdisSapHandle
);
3532 NdisCmDispatchCallConnected(
3533 IN NDIS_HANDLE NdisVcHandle
);
3538 NdisCmDispatchIncomingCall(
3539 IN NDIS_HANDLE NdisSapHandle
,
3540 IN NDIS_HANDLE NdisVcHandle
,
3541 IN PCO_CALL_PARAMETERS CallParameters
);
3546 NdisCmDispatchIncomingCallQoSChange(
3547 IN NDIS_HANDLE NdisVcHandle
,
3548 IN PCO_CALL_PARAMETERS CallParameters
);
3553 NdisCmDispatchIncomingCloseCall(
3554 IN NDIS_STATUS CloseStatus
,
3555 IN NDIS_HANDLE NdisVcHandle
,
3556 IN PVOID Buffer OPTIONAL
,
3562 NdisCmDispatchIncomingDropParty(
3563 IN NDIS_STATUS DropStatus
,
3564 IN NDIS_HANDLE NdisPartyHandle
,
3565 IN PVOID Buffer OPTIONAL
,
3571 NdisCmDropPartyComplete(
3572 IN NDIS_STATUS Status
,
3573 IN NDIS_HANDLE NdisPartyHandle
);
3578 NdisCmMakeCallComplete(
3579 IN NDIS_STATUS Status
,
3580 IN NDIS_HANDLE NdisVcHandle
,
3581 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
3582 IN NDIS_HANDLE CallMgrPartyContext OPTIONAL
,
3583 IN PCO_CALL_PARAMETERS CallParameters
);
3588 NdisCmModifyCallQoSComplete(
3589 IN NDIS_STATUS Status
,
3590 IN NDIS_HANDLE NdisVcHandle
,
3591 IN PCO_CALL_PARAMETERS CallParameters
);
3596 NdisCmOpenAddressFamilyComplete(
3597 IN NDIS_STATUS Status
,
3598 IN NDIS_HANDLE NdisAfHandle
,
3599 IN NDIS_HANDLE CallMgrAfContext
);
3604 NdisCmRegisterAddressFamily(
3605 IN NDIS_HANDLE NdisBindingHandle
,
3606 IN PCO_ADDRESS_FAMILY AddressFamily
,
3607 IN PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics
,
3608 IN UINT SizeOfCmCharacteristics
);
3613 NdisCmRegisterSapComplete(
3614 IN NDIS_STATUS Status
,
3615 IN NDIS_HANDLE NdisSapHandle
,
3616 IN NDIS_HANDLE CallMgrSapContext
);
3623 IN NDIS_HANDLE NdisVcHandle
,
3624 IN PCO_CALL_PARAMETERS CallParameters
);
3630 IN NDIS_HANDLE MiniportAdapterHandle
,
3631 IN NDIS_HANDLE NdisAfHandle
,
3632 IN NDIS_HANDLE MiniportVcContext
,
3633 OUT PNDIS_HANDLE NdisVcHandle
);
3638 NdisMCmDeactivateVc(
3639 IN NDIS_HANDLE NdisVcHandle
);
3645 IN NDIS_HANDLE NdisVcHandle
);
3650 NdisMCmRegisterAddressFamily(
3651 IN NDIS_HANDLE MiniportAdapterHandle
,
3652 IN PCO_ADDRESS_FAMILY AddressFamily
,
3653 IN PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics
,
3654 IN UINT SizeOfCmCharacteristics
);
3660 IN NDIS_HANDLE NdisAfHandle
,
3661 IN NDIS_HANDLE NdisVcHandle OPTIONAL
,
3662 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
3663 IN OUT PNDIS_REQUEST NdisRequest
);
3666 /* Connection-oriented services */
3672 IN NDIS_HANDLE NdisBindingHandle
,
3673 IN NDIS_HANDLE NdisAfHandle OPTIONAL
,
3674 IN NDIS_HANDLE ProtocolVcContext
,
3675 IN OUT PNDIS_HANDLE NdisVcHandle
);
3681 IN NDIS_HANDLE NdisVcHandle
);
3687 IN NDIS_HANDLE NdisBindingHandle
,
3688 IN NDIS_HANDLE NdisAfHandle OPTIONAL
,
3689 IN NDIS_HANDLE NdisVcHandle OPTIONAL
,
3690 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
3691 IN OUT PNDIS_REQUEST NdisRequest
);
3696 NdisCoRequestComplete(
3697 IN NDIS_STATUS Status
,
3698 IN NDIS_HANDLE NdisAfHandle
,
3699 IN NDIS_HANDLE NdisVcHandle OPTIONAL
,
3700 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
3701 IN PNDIS_REQUEST NdisRequest
);
3707 IN NDIS_HANDLE NdisVcHandle
,
3708 IN PPNDIS_PACKET PacketArray
,
3709 IN UINT NumberOfPackets
);
3714 NdisMCoActivateVcComplete(
3715 IN NDIS_STATUS Status
,
3716 IN NDIS_HANDLE NdisVcHandle
,
3717 IN PCO_CALL_PARAMETERS CallParameters
);
3722 NdisMCoDeactivateVcComplete(
3723 IN NDIS_STATUS Status
,
3724 IN NDIS_HANDLE NdisVcHandle
);
3729 NdisMCoIndicateReceivePacket(
3730 IN NDIS_HANDLE NdisVcHandle
,
3731 IN PPNDIS_PACKET PacketArray
,
3732 IN UINT NumberOfPackets
);
3737 NdisMCoIndicateStatus(
3738 IN NDIS_HANDLE MiniportAdapterHandle
,
3739 IN NDIS_HANDLE NdisVcHandle OPTIONAL
,
3740 IN NDIS_STATUS GeneralStatus
,
3741 IN PVOID StatusBuffer OPTIONAL
,
3742 IN ULONG StatusBufferSize
);
3747 NdisMCoReceiveComplete(
3748 IN NDIS_HANDLE MiniportAdapterHandle
);
3753 NdisMCoRequestComplete(
3754 IN NDIS_STATUS Status
,
3755 IN NDIS_HANDLE MiniportAdapterHandle
,
3756 IN PNDIS_REQUEST Request
);
3761 NdisMCoSendComplete(
3762 IN NDIS_STATUS Status
,
3763 IN NDIS_HANDLE NdisVcHandle
,
3764 IN PNDIS_PACKET Packet
);
3767 /* NDIS 5.0 extensions for intermediate drivers */
3772 NdisIMAssociateMiniport(
3773 IN NDIS_HANDLE DriverHandle
,
3774 IN NDIS_HANDLE ProtocolHandle
);
3779 NdisIMCancelInitializeDeviceInstance(
3780 IN NDIS_HANDLE DriverHandle
,
3781 IN PNDIS_STRING DeviceInstance
);
3786 NdisIMCopySendCompletePerPacketInfo(
3787 IN PNDIS_PACKET DstPacket
,
3788 IN PNDIS_PACKET SrcPacket
);
3793 NdisIMCopySendPerPacketInfo(
3794 IN PNDIS_PACKET DstPacket
,
3795 IN PNDIS_PACKET SrcPacket
);
3800 NdisIMDeregisterLayeredMiniport(
3801 IN NDIS_HANDLE DriverHandle
);
3806 NdisIMGetBindingContext(
3807 IN NDIS_HANDLE NdisBindingHandle
);
3812 NdisIMGetDeviceContext(
3813 IN NDIS_HANDLE MiniportAdapterHandle
);
3818 NdisIMInitializeDeviceInstanceEx(
3819 IN NDIS_HANDLE DriverHandle
,
3820 IN PNDIS_STRING DriverInstance
,
3821 IN NDIS_HANDLE DeviceContext OPTIONAL
);
3826 NdisInterlockedPopEntrySList(
3827 IN PSLIST_HEADER ListHead
,
3828 IN PKSPIN_LOCK Lock
);
3833 NdisInterlockedPushEntrySList(
3834 IN PSLIST_HEADER ListHead
,
3835 IN PSINGLE_LIST_ENTRY ListEntry
,
3836 IN PKSPIN_LOCK Lock
);
3841 NdisQueryBufferSafe(
3842 IN PNDIS_BUFFER Buffer
,
3843 OUT PVOID
*VirtualAddress OPTIONAL
,
3847 /* Prototypes for NDIS_MINIPORT_CHARACTERISTICS */
3850 (NTAPI
*W_CHECK_FOR_HANG_HANDLER
)(
3851 IN NDIS_HANDLE MiniportAdapterContext
);
3854 (NTAPI
*W_DISABLE_INTERRUPT_HANDLER
)(
3855 IN NDIS_HANDLE MiniportAdapterContext
);
3858 (NTAPI
*W_ENABLE_INTERRUPT_HANDLER
)(
3859 IN NDIS_HANDLE MiniportAdapterContext
);
3862 (NTAPI
*W_HALT_HANDLER
)(
3863 IN NDIS_HANDLE MiniportAdapterContext
);
3866 (NTAPI
*W_HANDLE_INTERRUPT_HANDLER
)(
3867 IN NDIS_HANDLE MiniportAdapterContext
);
3870 (NTAPI
*W_INITIALIZE_HANDLER
)(
3871 OUT PNDIS_STATUS OpenErrorStatus
,
3872 OUT PUINT SelectedMediumIndex
,
3873 IN PNDIS_MEDIUM MediumArray
,
3874 IN UINT MediumArraySize
,
3875 IN NDIS_HANDLE MiniportAdapterContext
,
3876 IN NDIS_HANDLE WrapperConfigurationContext
);
3879 (NTAPI
*W_ISR_HANDLER
)(
3880 OUT PBOOLEAN InterruptRecognized
,
3881 OUT PBOOLEAN QueueMiniportHandleInterrupt
,
3882 IN NDIS_HANDLE MiniportAdapterContext
);
3885 (NTAPI
*W_QUERY_INFORMATION_HANDLER
)(
3886 IN NDIS_HANDLE MiniportAdapterContext
,
3888 IN PVOID InformationBuffer
,
3889 IN ULONG InformationBufferLength
,
3890 OUT PULONG BytesWritten
,
3891 OUT PULONG BytesNeeded
);
3894 (NTAPI
*W_RECONFIGURE_HANDLER
)(
3895 OUT PNDIS_STATUS OpenErrorStatus
,
3896 IN NDIS_HANDLE MiniportAdapterContext
,
3897 IN NDIS_HANDLE WrapperConfigurationContext
);
3900 (NTAPI
*W_RESET_HANDLER
)(
3901 OUT PBOOLEAN AddressingReset
,
3902 IN NDIS_HANDLE MiniportAdapterContext
);
3905 (NTAPI
*W_SEND_HANDLER
)(
3906 IN NDIS_HANDLE MiniportAdapterContext
,
3907 IN PNDIS_PACKET Packet
,
3911 (NTAPI
*WM_SEND_HANDLER
)(
3912 IN NDIS_HANDLE MiniportAdapterContext
,
3913 IN NDIS_HANDLE NdisLinkHandle
,
3914 IN PNDIS_WAN_PACKET Packet
);
3917 (NTAPI
*W_SET_INFORMATION_HANDLER
)(
3918 IN NDIS_HANDLE MiniportAdapterContext
,
3920 IN PVOID InformationBuffer
,
3921 IN ULONG InformationBufferLength
,
3922 OUT PULONG BytesRead
,
3923 OUT PULONG BytesNeeded
);
3926 (NTAPI
*W_TRANSFER_DATA_HANDLER
)(
3927 OUT PNDIS_PACKET Packet
,
3928 OUT PUINT BytesTransferred
,
3929 IN NDIS_HANDLE MiniportAdapterContext
,
3930 IN NDIS_HANDLE MiniportReceiveContext
,
3932 IN UINT BytesToTransfer
);
3935 (NTAPI
*WM_TRANSFER_DATA_HANDLER
)(
3939 /* NDIS structures available only to miniport drivers */
3941 #define NDIS30_MINIPORT_CHARACTERISTICS_S \
3942 UCHAR MajorNdisVersion; \
3943 UCHAR MinorNdisVersion; \
3945 W_CHECK_FOR_HANG_HANDLER CheckForHangHandler; \
3946 W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler; \
3947 W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler; \
3948 W_HALT_HANDLER HaltHandler; \
3949 W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler; \
3950 W_INITIALIZE_HANDLER InitializeHandler; \
3951 W_ISR_HANDLER ISRHandler; \
3952 W_QUERY_INFORMATION_HANDLER QueryInformationHandler; \
3953 W_RECONFIGURE_HANDLER ReconfigureHandler; \
3954 W_RESET_HANDLER ResetHandler; \
3955 W_SEND_HANDLER SendHandler; \
3956 W_SET_INFORMATION_HANDLER SetInformationHandler; \
3957 W_TRANSFER_DATA_HANDLER TransferDataHandler;
3959 typedef struct _NDIS30_MINIPORT_CHARACTERISTICS
{
3960 NDIS30_MINIPORT_CHARACTERISTICS_S
3961 } NDIS30_MINIPORT_CHARACTERISTICS
, *PSNDIS30_MINIPORT_CHARACTERISTICS
;
3964 /* Extensions for NDIS 4.0 miniports */
3967 (NTAPI
*W_SEND_PACKETS_HANDLER
)(
3968 IN NDIS_HANDLE MiniportAdapterContext
,
3969 IN PPNDIS_PACKET PacketArray
,
3970 IN UINT NumberOfPackets
);
3973 (NTAPI
*W_RETURN_PACKET_HANDLER
)(
3974 IN NDIS_HANDLE MiniportAdapterContext
,
3975 IN PNDIS_PACKET Packet
);
3978 (NTAPI
*W_ALLOCATE_COMPLETE_HANDLER
)(
3979 IN NDIS_HANDLE MiniportAdapterContext
,
3980 IN PVOID VirtualAddress
,
3981 IN PNDIS_PHYSICAL_ADDRESS PhysicalAddress
,
3987 #define NDIS40_MINIPORT_CHARACTERISTICS_S \
3988 NDIS30_MINIPORT_CHARACTERISTICS Ndis30Chars; \
3989 W_RETURN_PACKET_HANDLER ReturnPacketHandler; \
3990 W_SEND_PACKETS_HANDLER SendPacketsHandler; \
3991 W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
3993 #else /* !__cplusplus */
3995 #define NDIS40_MINIPORT_CHARACTERISTICS_S \
3996 NDIS30_MINIPORT_CHARACTERISTICS_S \
3997 W_RETURN_PACKET_HANDLER ReturnPacketHandler; \
3998 W_SEND_PACKETS_HANDLER SendPacketsHandler; \
3999 W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
4001 #endif /* !__cplusplus */
4003 typedef struct _NDIS40_MINIPORT_CHARACTERISTICS
{
4004 NDIS40_MINIPORT_CHARACTERISTICS_S
4005 } NDIS40_MINIPORT_CHARACTERISTICS
, *PNDIS40_MINIPORT_CHARACTERISTICS
;
4008 /* Extensions for NDIS 5.0 miniports */
4011 (NTAPI
*W_CO_CREATE_VC_HANDLER
)(
4012 IN NDIS_HANDLE MiniportAdapterContext
,
4013 IN NDIS_HANDLE NdisVcHandle
,
4014 OUT PNDIS_HANDLE MiniportVcContext
);
4017 (NTAPI
*W_CO_DELETE_VC_HANDLER
)(
4018 IN NDIS_HANDLE MiniportVcContext
);
4021 (NTAPI
*W_CO_ACTIVATE_VC_HANDLER
)(
4022 IN NDIS_HANDLE MiniportVcContext
,
4023 IN OUT PCO_CALL_PARAMETERS CallParameters
);
4026 (NTAPI
*W_CO_DEACTIVATE_VC_HANDLER
)(
4027 IN NDIS_HANDLE MiniportVcContext
);
4030 (NTAPI
*W_CO_SEND_PACKETS_HANDLER
)(
4031 IN NDIS_HANDLE MiniportVcContext
,
4032 IN PPNDIS_PACKET PacketArray
,
4033 IN UINT NumberOfPackets
);
4036 (NTAPI
*W_CO_REQUEST_HANDLER
)(
4037 IN NDIS_HANDLE MiniportAdapterContext
,
4038 IN NDIS_HANDLE MiniportVcContext OPTIONAL
,
4039 IN OUT PNDIS_REQUEST NdisRequest
);
4043 #define NDIS50_MINIPORT_CHARACTERISTICS_S \
4044 NDIS40_MINIPORT_CHARACTERISTICS Ndis40Chars; \
4045 W_CO_CREATE_VC_HANDLER CoCreateVcHandler; \
4046 W_CO_DELETE_VC_HANDLER CoDeleteVcHandler; \
4047 W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler; \
4048 W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler; \
4049 W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler; \
4050 W_CO_REQUEST_HANDLER CoRequestHandler;
4052 #else /* !__cplusplus */
4054 #define NDIS50_MINIPORT_CHARACTERISTICS_S \
4055 NDIS40_MINIPORT_CHARACTERISTICS_S \
4056 W_CO_CREATE_VC_HANDLER CoCreateVcHandler; \
4057 W_CO_DELETE_VC_HANDLER CoDeleteVcHandler; \
4058 W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler; \
4059 W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler; \
4060 W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler; \
4061 W_CO_REQUEST_HANDLER CoRequestHandler;
4063 #endif /* !__cplusplus */
4065 typedef struct _NDIS50_MINIPORT_CHARACTERISTICS
{
4066 NDIS50_MINIPORT_CHARACTERISTICS_S
4067 } NDIS50_MINIPORT_CHARACTERISTICS
, *PSNDIS50_MINIPORT_CHARACTERISTICS
;
4070 /* Extensions for NDIS 5.1 miniports */
4073 (NTAPI
*W_CANCEL_SEND_PACKETS_HANDLER
)(
4074 IN NDIS_HANDLE MiniportAdapterContext
,
4078 (NTAPI
*W_PNP_EVENT_NOTIFY_HANDLER
)(
4079 IN NDIS_HANDLE MiniportAdapterContext
,
4080 IN NDIS_DEVICE_PNP_EVENT PnPEvent
,
4081 IN PVOID InformationBuffer
,
4082 IN ULONG InformationBufferLength
);
4085 (NTAPI
*W_MINIPORT_SHUTDOWN_HANDLER
)(
4086 IN PVOID ShutdownContext
);
4090 #define NDIS51_MINIPORT_CHARACTERISTICS_S \
4091 NDIS50_MINIPORT_CHARACTERISTICS Ndis50Chars; \
4092 W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler; \
4093 W_PNP_EVENT_NOTIFY_HANDLER PnPEventNotifyHandler; \
4094 W_MINIPORT_SHUTDOWN_HANDLER AdapterShutdownHandler;
4098 #define NDIS51_MINIPORT_CHARACTERISTICS_S \
4099 NDIS50_MINIPORT_CHARACTERISTICS_S \
4100 W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler; \
4101 W_PNP_EVENT_NOTIFY_HANDLER PnPEventNotifyHandler; \
4102 W_MINIPORT_SHUTDOWN_HANDLER AdapterShutdownHandler;
4106 typedef struct _NDIS51_MINIPORT_CHARACTERISTICS
{
4107 NDIS51_MINIPORT_CHARACTERISTICS_S
4108 } NDIS51_MINIPORT_CHARACTERISTICS
, *PSNDIS51_MINIPORT_CHARACTERISTICS
;
4110 #if defined(NDIS51_MINIPORT)
4111 typedef struct _NDIS_MINIPORT_CHARACTERISTICS
{
4112 NDIS51_MINIPORT_CHARACTERISTICS_S
4113 } NDIS_MINIPORT_CHARACTERISTICS
, *PNDIS_MINIPORT_CHARACTERISTICS
;
4114 #elif defined(NDIS50_MINIPORT)
4115 typedef struct _NDIS_MINIPORT_CHARACTERISTICS
{
4116 NDIS50_MINIPORT_CHARACTERISTICS_S
4117 } NDIS_MINIPORT_CHARACTERISTICS
, *PNDIS_MINIPORT_CHARACTERISTICS
;
4118 #elif defined(NDIS40_MINIPORT)
4119 typedef struct _NDIS_MINIPORT_CHARACTERISTICS
{
4120 NDIS40_MINIPORT_CHARACTERISTICS_S
4121 } NDIS_MINIPORT_CHARACTERISTICS
, *PNDIS_MINIPORT_CHARACTERISTICS
;
4123 typedef struct _NDIS_MINIPORT_CHARACTERISTICS
{
4124 NDIS30_MINIPORT_CHARACTERISTICS_S
4125 } NDIS_MINIPORT_CHARACTERISTICS
, *PNDIS_MINIPORT_CHARACTERISTICS
;
4130 (NTAPI
*SEND_HANDLER
)(
4131 IN NDIS_HANDLE MacBindingHandle
,
4132 IN PNDIS_PACKET Packet
);
4135 (NTAPI
*TRANSFER_DATA_HANDLER
)(
4136 IN NDIS_HANDLE MacBindingHandle
,
4137 IN NDIS_HANDLE MacReceiveContext
,
4139 IN UINT BytesToTransfer
,
4140 OUT PNDIS_PACKET Packet
,
4141 OUT PUINT BytesTransferred
);
4144 (NTAPI
*RESET_HANDLER
)(
4145 IN NDIS_HANDLE MacBindingHandle
);
4148 (NTAPI
*REQUEST_HANDLER
)(
4149 IN NDIS_HANDLE MacBindingHandle
,
4150 IN PNDIS_REQUEST NdisRequest
);
4154 /* Structures available only to full MAC drivers */
4157 (NTAPI
*PNDIS_INTERRUPT_SERVICE
)(
4158 IN PVOID InterruptContext
);
4161 (NTAPI
*PNDIS_DEFERRED_PROCESSING
)(
4162 IN PVOID SystemSpecific1
,
4163 IN PVOID InterruptContext
,
4164 IN PVOID SystemSpecific2
,
4165 IN PVOID SystemSpecific3
);
4169 typedef struct _NDIS_MINIPORT_BLOCK NDIS_MINIPORT_BLOCK
, *PNDIS_MINIPORT_BLOCK
;
4170 typedef struct _NDIS_PROTOCOL_BLOCK NDIS_PROTOCOL_BLOCK
, *PNDIS_PROTOCOL_BLOCK
;
4171 typedef struct _NDIS_OPEN_BLOCK NDIS_OPEN_BLOCK
, *PNDIS_OPEN_BLOCK
;
4172 typedef struct _NDIS_M_DRIVER_BLOCK NDIS_M_DRIVER_BLOCK
, *PNDIS_M_DRIVER_BLOCK
;
4173 typedef struct _NDIS_AF_LIST NDIS_AF_LIST
, *PNDIS_AF_LIST
;
4176 // FIXME: Should be typedef struct _X_FILTER ETH_FILTER, *PETH_FILTER;
4178 typedef PVOID ETH_FILTER
, *PETH_FILTER
;
4181 typedef struct _NDIS_MINIPORT_INTERRUPT
{
4182 PKINTERRUPT InterruptObject
;
4183 KSPIN_LOCK DpcCountLock
;
4184 PVOID MiniportIdField
;
4185 W_ISR_HANDLER MiniportIsr
;
4186 W_HANDLE_INTERRUPT_HANDLER MiniportDpc
;
4188 PNDIS_MINIPORT_BLOCK Miniport
;
4191 KEVENT DpcsCompletedEvent
;
4192 BOOLEAN SharedInterrupt
;
4193 BOOLEAN IsrRequested
;
4194 } NDIS_MINIPORT_INTERRUPT
, *PNDIS_MINIPORT_INTERRUPT
;
4196 typedef struct _NDIS_MINIPORT_TIMER
{
4199 PNDIS_TIMER_FUNCTION MiniportTimerFunction
;
4200 PVOID MiniportTimerContext
;
4201 PNDIS_MINIPORT_BLOCK Miniport
;
4202 struct _NDIS_MINIPORT_TIMER
*NextDeferredTimer
;
4203 } NDIS_MINIPORT_TIMER
, *PNDIS_MINIPORT_TIMER
;
4205 typedef struct _NDIS_INTERRUPT
{
4206 PKINTERRUPT InterruptObject
;
4207 KSPIN_LOCK DpcCountLock
;
4208 PNDIS_INTERRUPT_SERVICE MacIsr
;
4209 PNDIS_DEFERRED_PROCESSING MacDpc
;
4211 PVOID InterruptContext
;
4214 KEVENT DpcsCompletedEvent
;
4215 } NDIS_INTERRUPT
, *PNDIS_INTERRUPT
;
4218 typedef enum _NDIS_WORK_ITEM_TYPE
{
4219 NdisWorkItemRequest
,
4221 NdisWorkItemReturnPackets
,
4222 NdisWorkItemResetRequested
,
4223 NdisWorkItemResetInProgress
,
4225 NdisWorkItemSendLoopback
,
4226 NdisWorkItemMiniportCallback
,
4228 } NDIS_WORK_ITEM_TYPE
, *PNDIS_WORK_ITEM_TYPE
;
4230 #define NUMBER_OF_WORK_ITEM_TYPES NdisMaxWorkItems
4231 #define NUMBER_OF_SINGLE_WORK_ITEMS 6
4233 typedef struct _NDIS_MINIPORT_WORK_ITEM
{
4234 SINGLE_LIST_ENTRY Link
;
4235 NDIS_WORK_ITEM_TYPE WorkItemType
;
4236 PVOID WorkItemContext
;
4237 } NDIS_MINIPORT_WORK_ITEM
, *PNDIS_MINIPORT_WORK_ITEM
;
4239 struct _NDIS_WORK_ITEM
;
4240 typedef VOID (*NDIS_PROC
)(struct _NDIS_WORK_ITEM
*, PVOID
);
4241 typedef struct _NDIS_WORK_ITEM
4245 UCHAR WrapperReserved
[8*sizeof(PVOID
)];
4246 } NDIS_WORK_ITEM
, *PNDIS_WORK_ITEM
;
4248 typedef struct _NDIS_BIND_PATHS
{
4250 NDIS_STRING Paths
[1];
4251 } NDIS_BIND_PATHS
, *PNDIS_BIND_PATHS
;
4255 (NTAPI
*ETH_RCV_COMPLETE_HANDLER
)(
4256 IN PETH_FILTER Filter
);
4259 (NTAPI
*ETH_RCV_INDICATE_HANDLER
)(
4260 IN PETH_FILTER Filter
,
4261 IN NDIS_HANDLE MacReceiveContext
,
4263 IN PVOID HeaderBuffer
,
4264 IN UINT HeaderBufferSize
,
4265 IN PVOID LookaheadBuffer
,
4266 IN UINT LookaheadBufferSize
,
4267 IN UINT PacketSize
);
4270 (NTAPI
*FDDI_RCV_COMPLETE_HANDLER
)(
4271 IN PFDDI_FILTER Filter
);
4274 (NTAPI
*FDDI_RCV_INDICATE_HANDLER
)(
4275 IN PFDDI_FILTER Filter
,
4276 IN NDIS_HANDLE MacReceiveContext
,
4278 IN UINT AddressLength
,
4279 IN PVOID HeaderBuffer
,
4280 IN UINT HeaderBufferSize
,
4281 IN PVOID LookaheadBuffer
,
4282 IN UINT LookaheadBufferSize
,
4283 IN UINT PacketSize
);
4286 (NTAPI
*FILTER_PACKET_INDICATION_HANDLER
)(
4287 IN NDIS_HANDLE Miniport
,
4288 IN PPNDIS_PACKET PacketArray
,
4289 IN UINT NumberOfPackets
);
4292 (NTAPI
*TR_RCV_COMPLETE_HANDLER
)(
4293 IN PTR_FILTER Filter
);
4296 (NTAPI
*TR_RCV_INDICATE_HANDLER
)(
4297 IN PTR_FILTER Filter
,
4298 IN NDIS_HANDLE MacReceiveContext
,
4299 IN PVOID HeaderBuffer
,
4300 IN UINT HeaderBufferSize
,
4301 IN PVOID LookaheadBuffer
,
4302 IN UINT LookaheadBufferSize
,
4303 IN UINT PacketSize
);
4306 (NTAPI
*WAN_RCV_COMPLETE_HANDLER
)(
4307 IN NDIS_HANDLE MiniportAdapterHandle
,
4308 IN NDIS_HANDLE NdisLinkContext
);
4311 (NTAPI
*WAN_RCV_HANDLER
)(
4312 OUT PNDIS_STATUS Status
,
4313 IN NDIS_HANDLE MiniportAdapterHandle
,
4314 IN NDIS_HANDLE NdisLinkContext
,
4316 IN ULONG PacketSize
);
4319 (FASTCALL
*NDIS_M_DEQUEUE_WORK_ITEM
)(
4320 IN PNDIS_MINIPORT_BLOCK Miniport
,
4321 IN NDIS_WORK_ITEM_TYPE WorkItemType
,
4322 OUT PVOID
*WorkItemContext
);
4325 (FASTCALL
*NDIS_M_QUEUE_NEW_WORK_ITEM
)(
4326 IN PNDIS_MINIPORT_BLOCK Miniport
,
4327 IN NDIS_WORK_ITEM_TYPE WorkItemType
,
4328 IN PVOID WorkItemContext
);
4331 (FASTCALL
*NDIS_M_QUEUE_WORK_ITEM
)(
4332 IN PNDIS_MINIPORT_BLOCK Miniport
,
4333 IN NDIS_WORK_ITEM_TYPE WorkItemType
,
4334 IN PVOID WorkItemContext
);
4337 (NTAPI
*NDIS_M_REQ_COMPLETE_HANDLER
)(
4338 IN NDIS_HANDLE MiniportAdapterHandle
,
4339 IN NDIS_STATUS Status
);
4342 (NTAPI
*NDIS_M_RESET_COMPLETE_HANDLER
)(
4343 IN NDIS_HANDLE MiniportAdapterHandle
,
4344 IN NDIS_STATUS Status
,
4345 IN BOOLEAN AddressingReset
);
4348 (NTAPI
*NDIS_M_SEND_COMPLETE_HANDLER
)(
4349 IN NDIS_HANDLE MiniportAdapterHandle
,
4350 IN PNDIS_PACKET Packet
,
4351 IN NDIS_STATUS Status
);
4354 (NTAPI
*NDIS_M_SEND_RESOURCES_HANDLER
)(
4355 IN NDIS_HANDLE MiniportAdapterHandle
);
4358 (FASTCALL
*NDIS_M_START_SENDS
)(
4359 IN PNDIS_MINIPORT_BLOCK Miniport
);
4362 (NTAPI
*NDIS_M_STATUS_HANDLER
)(
4363 IN NDIS_HANDLE MiniportHandle
,
4364 IN NDIS_STATUS GeneralStatus
,
4365 IN PVOID StatusBuffer
,
4366 IN UINT StatusBufferSize
);
4369 (NTAPI
*NDIS_M_STS_COMPLETE_HANDLER
)(
4370 IN NDIS_HANDLE MiniportAdapterHandle
);
4373 (NTAPI
*NDIS_M_TD_COMPLETE_HANDLER
)(
4374 IN NDIS_HANDLE MiniportAdapterHandle
,
4375 IN PNDIS_PACKET Packet
,
4376 IN NDIS_STATUS Status
,
4377 IN UINT BytesTransferred
);
4379 typedef VOID (NTAPI
*NDIS_WM_SEND_COMPLETE_HANDLER
)(
4380 IN NDIS_HANDLE MiniportAdapterHandle
,
4382 IN NDIS_STATUS Status
);
4387 #define ARC_SEND_BUFFERS 8
4388 #define ARC_HEADER_SIZE 4
4390 typedef struct _NDIS_ARC_BUF
{
4391 NDIS_HANDLE ArcnetBufferPool
;
4392 PUCHAR ArcnetLookaheadBuffer
;
4394 ARC_BUFFER_LIST ArcnetBuffers
[ARC_SEND_BUFFERS
];
4395 } NDIS_ARC_BUF
, *PNDIS_ARC_BUF
;
4399 typedef struct _NDIS_LOG
{
4400 PNDIS_MINIPORT_BLOCK Miniport
;
4408 } NDIS_LOG
, *PNDIS_LOG
;
4411 #define FILTERDBS_ARCNET_S \
4414 #define FILTERDBS_ARCNET_S \
4416 #endif /* !ARCNET */
4418 #define FILTERDBS_S \
4419 _ANONYMOUS_UNION union { \
4420 PETH_FILTER EthDB; \
4421 PNULL_FILTER NullDB; \
4424 PFDDI_FILTER FddiDB; \
4427 typedef struct _FILTERDBS
{
4429 } FILTERDBS
, *PFILTERDBS
;
4432 struct _NDIS_MINIPORT_BLOCK
{
4434 PNDIS_MINIPORT_BLOCK NextMiniport
;
4435 PNDIS_M_DRIVER_BLOCK DriverHandle
;
4436 NDIS_HANDLE MiniportAdapterContext
;
4437 UNICODE_STRING MiniportName
;
4438 PNDIS_BIND_PATHS BindPaths
;
4439 NDIS_HANDLE OpenQueue
;
4441 NDIS_HANDLE DeviceContext
;
4445 UCHAR AssignedProcessor
;
4447 PNDIS_REQUEST MediaRequest
;
4448 PNDIS_MINIPORT_INTERRUPT Interrupt
;
4451 LIST_ENTRY PacketList
;
4452 PNDIS_PACKET FirstPendingPacket
;
4453 PNDIS_PACKET ReturnPacketsQueue
;
4454 ULONG RequestBuffer
;
4455 PVOID SetMCastBuffer
;
4456 PNDIS_MINIPORT_BLOCK PrimaryMiniport
;
4457 PVOID WrapperContext
;
4458 PVOID BusDataContext
;
4459 ULONG PnPCapabilities
;
4460 PCM_RESOURCE_LIST Resources
;
4461 NDIS_TIMER WakeUpDpcTimer
;
4462 UNICODE_STRING BaseName
;
4463 UNICODE_STRING SymbolicLinkName
;
4464 ULONG CheckForHangSeconds
;
4466 USHORT CFHangCurrentTick
;
4467 NDIS_STATUS ResetStatus
;
4468 NDIS_HANDLE ResetOpen
;
4470 FILTER_PACKET_INDICATION_HANDLER PacketIndicateHandler
;
4471 NDIS_M_SEND_COMPLETE_HANDLER SendCompleteHandler
;
4472 NDIS_M_SEND_RESOURCES_HANDLER SendResourcesHandler
;
4473 NDIS_M_RESET_COMPLETE_HANDLER ResetCompleteHandler
;
4474 NDIS_MEDIUM MediaType
;
4476 NDIS_INTERFACE_TYPE BusType
;
4477 NDIS_INTERFACE_TYPE AdapterType
;
4478 PDEVICE_OBJECT DeviceObject
;
4479 PDEVICE_OBJECT PhysicalDeviceObject
;
4480 PDEVICE_OBJECT NextDeviceObject
;
4481 PMAP_REGISTER_ENTRY MapRegisters
;
4482 PNDIS_AF_LIST CallMgrAfList
;
4483 PVOID MiniportThread
;
4485 USHORT SetInfoBufLen
;
4486 USHORT MaxSendPackets
;
4487 NDIS_STATUS FakeStatus
;
4489 PUNICODE_STRING pAdapterInstanceName
;
4490 PNDIS_MINIPORT_TIMER TimerQueue
;
4492 PNDIS_REQUEST PendingRequest
;
4493 UINT MaximumLongAddresses
;
4494 UINT MaximumShortAddresses
;
4495 UINT CurrentLookahead
;
4496 UINT MaximumLookahead
;
4497 W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler
;
4498 W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler
;
4499 W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler
;
4500 W_SEND_PACKETS_HANDLER SendPacketsHandler
;
4501 NDIS_M_START_SENDS DeferredSendHandler
;
4502 ETH_RCV_INDICATE_HANDLER EthRxIndicateHandler
;
4503 TR_RCV_INDICATE_HANDLER TrRxIndicateHandler
;
4504 FDDI_RCV_INDICATE_HANDLER FddiRxIndicateHandler
;
4505 ETH_RCV_COMPLETE_HANDLER EthRxCompleteHandler
;
4506 TR_RCV_COMPLETE_HANDLER TrRxCompleteHandler
;
4507 FDDI_RCV_COMPLETE_HANDLER FddiRxCompleteHandler
;
4508 NDIS_M_STATUS_HANDLER StatusHandler
;
4509 NDIS_M_STS_COMPLETE_HANDLER StatusCompleteHandler
;
4510 NDIS_M_TD_COMPLETE_HANDLER TDCompleteHandler
;
4511 NDIS_M_REQ_COMPLETE_HANDLER QueryCompleteHandler
;
4512 NDIS_M_REQ_COMPLETE_HANDLER SetCompleteHandler
;
4513 NDIS_WM_SEND_COMPLETE_HANDLER WanSendCompleteHandler
;
4514 WAN_RCV_HANDLER WanRcvHandler
;
4515 WAN_RCV_COMPLETE_HANDLER WanRcvCompleteHandler
;
4516 #if defined(NDIS_WRAPPER)
4517 PNDIS_MINIPORT_BLOCK NextGlobalMiniport
;
4518 SINGLE_LIST_ENTRY WorkQueue
[NUMBER_OF_WORK_ITEM_TYPES
];
4519 SINGLE_LIST_ENTRY SingleWorkItems
[NUMBER_OF_SINGLE_WORK_ITEMS
];
4522 UCHAR ArcnetAddress
;
4524 _ANONYMOUS_UNION
union {
4526 PNDIS_ARC_BUF ArcBuf
;
4532 PCM_RESOURCE_LIST AllocatedResources
;
4533 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
4534 SINGLE_LIST_ENTRY PatternList
;
4535 NDIS_PNP_CAPABILITIES PMCapabilities
;
4536 DEVICE_CAPABILITIES DeviceCaps
;
4538 DEVICE_POWER_STATE CurrentDevicePowerState
;
4540 SYSTEM_POWER_STATE WaitWakeSystemState
;
4541 LARGE_INTEGER VcIndex
;
4542 KSPIN_LOCK VcCountLock
;
4543 LIST_ENTRY WmiEnabledVcs
;
4544 PNDIS_GUID pNdisGuidMap
;
4545 PNDIS_GUID pCustomGuidMap
;
4547 USHORT cNdisGuidMap
;
4548 USHORT cCustomGuidMap
;
4549 USHORT CurrentMapRegister
;
4550 PKEVENT AllocationEvent
;
4551 USHORT BaseMapRegistersNeeded
;
4552 USHORT SGMapRegistersNeeded
;
4553 ULONG MaximumPhysicalMapping
;
4554 NDIS_TIMER MediaDisconnectTimer
;
4555 USHORT MediaDisconnectTimeOut
;
4556 USHORT InstanceNumber
;
4557 NDIS_EVENT OpenReadyEvent
;
4558 NDIS_PNP_DEVICE_STATE PnPDeviceState
;
4559 NDIS_PNP_DEVICE_STATE OldPnPDeviceState
;
4560 PGET_SET_DEVICE_DATA SetBusData
;
4561 PGET_SET_DEVICE_DATA GetBusData
;
4565 NDIS_STATS NdisStats
;
4569 PNDIS_PACKET IndicatedPacket
[MAXIMUM_PROCESSORS
];
4570 PKEVENT RemoveReadyEvent
;
4571 PKEVENT AllOpensClosedEvent
;
4572 PKEVENT AllRequestsCompletedEvent
;
4574 NDIS_MINIPORT_WORK_ITEM WorkItemBuffer
[NUMBER_OF_SINGLE_WORK_ITEMS
];
4575 PDMA_ADAPTER SystemAdapterObject
;
4576 ULONG DriverVerifyFlags
;
4578 USHORT InternalResetCount
;
4579 USHORT MiniportResetCount
;
4580 USHORT MediaSenseConnectCount
;
4581 USHORT MediaSenseDisconnectCount
;
4582 PNDIS_PACKET
*xPackets
;
4583 ULONG UserModeOpenReferences
;
4584 _ANONYMOUS_UNION
union {
4585 PVOID SavedSendHandler
;
4586 PVOID SavedWanSendHandler
;
4588 PVOID SavedSendPacketsHandler
;
4589 PVOID SavedCancelSendPacketsHandler
;
4590 W_SEND_PACKETS_HANDLER WSendPacketsHandler
;
4591 ULONG MiniportAttributes
;
4592 PDMA_ADAPTER SavedSystemAdapterObject
;
4594 USHORT CFHangXTicks
;
4596 ULONG IndicatedPacketsCount
;
4597 ULONG PhysicalMediumType
;
4598 PNDIS_REQUEST LastRequest
;
4599 LONG DmaAdapterRefCount
;
4605 KSPIN_LOCK TimerQueueLock
;
4606 PKEVENT ResetCompletedEvent
;
4607 PKEVENT QueuedBindingCompletedEvent
;
4608 PKEVENT DmaResourcesReleasedEvent
;
4609 FILTER_PACKET_INDICATION_HANDLER SavedPacketIndicateHandler
;
4610 ULONG RegisteredInterrupts
;
4611 PNPAGED_LOOKASIDE_LIST SGListLookasideList
;
4612 ULONG ScatterGatherListSize
;
4617 /* Handler prototypes for NDIS_OPEN_BLOCK */
4619 typedef NDIS_STATUS (NTAPI
*WAN_SEND_HANDLER
)(
4620 IN NDIS_HANDLE MacBindingHandle
,
4621 IN NDIS_HANDLE LinkHandle
,
4624 /* NDIS 4.0 extension */
4626 typedef VOID (NTAPI
*SEND_PACKETS_HANDLER
)(
4627 IN NDIS_HANDLE MiniportAdapterContext
,
4628 IN PPNDIS_PACKET PacketArray
,
4629 IN UINT NumberOfPackets
);
4631 #if defined(NDIS_WRAPPER)
4632 #define NDIS_COMMON_OPEN_BLOCK_WRAPPER_S \
4635 KSPIN_LOCK SpinLock; \
4636 NDIS_HANDLE FilterHandle; \
4637 ULONG ProtocolOptions; \
4638 USHORT CurrentLookahead; \
4639 USHORT ConnectDampTicks; \
4640 USHORT DisconnectDampTicks; \
4641 W_SEND_HANDLER WSendHandler; \
4642 W_TRANSFER_DATA_HANDLER WTransferDataHandler; \
4643 W_SEND_PACKETS_HANDLER WSendPacketsHandler; \
4644 W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler; \
4645 ULONG WakeUpEnable; \
4646 PKEVENT CloseCompleteEvent; \
4648 ULONG AfReferences; \
4649 PNDIS_OPEN_BLOCK NextGlobalOpen;
4651 #define NDIS_COMMON_OPEN_BLOCK_WRAPPER_S
4654 #define NDIS_COMMON_OPEN_BLOCK_S \
4656 NDIS_HANDLE BindingHandle; \
4657 PNDIS_MINIPORT_BLOCK MiniportHandle; \