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
41 #if !defined(_WINDEF_H)
42 typedef unsigned int UINT
, *PUINT
;
49 #if defined(NDIS_WRAPPER)
50 #define NDISAPI DECLSPEC_EXPORT
52 #define NDISAPI DECLSPEC_IMPORT
55 #if defined(NDIS50_MINIPORT) && !defined(NDIS_MINIPORT_MAJOR_VERSION) && !defined(NDIS_MINIPORT_MINOR_VERSION)
56 #define NDIS_MINIPORT_MAJOR_VERSION 5
57 #define NDIS_MINIPORT_MINOR_VERSION 0
60 #if defined(NDIS51_MINIPORT) && !defined(NDIS_MINIPORT_MAJOR_VERSION) && !defined(NDIS_MINIPORT_MINOR_VERSION)
61 #define NDIS_MINIPORT_MAJOR_VERSION 5
62 #define NDIS_MINIPORT_MINOR_VERSION 1
65 #if defined(NDIS50) && !defined(NDIS_PROTOCOL_MAJOR_VERSION) && !defined(NDIS_PROTOCOL_MINOR_VERSION)
66 #define NDIS_PROTOCOL_MAJOR_VERSION 5
67 #define NDIS_PROTOCOL_MINOR_VERSION 0
70 #if defined(NDIS51) && !defined(NDIS_PROTOCOL_MAJOR_VERSION) && !defined(NDIS_PROTOCOL_MINOR_VERSION)
71 #define NDIS_PROTOCOL_MAJOR_VERSION 5
72 #define NDIS_PROTOCOL_MINOR_VERSION 1
77 typedef PVOID QUEUED_CLOSE
;
80 typedef ULONG NDIS_OID
, *PNDIS_OID
;
82 typedef struct _X_FILTER FDDI_FILTER
, *PFDDI_FILTER
;
83 typedef struct _X_FILTER TR_FILTER
, *PTR_FILTER
;
84 typedef struct _X_FILTER NULL_FILTER
, *PNULL_FILTER
;
86 typedef struct _REFERENCE
{
88 USHORT ReferenceCount
;
90 } REFERENCE
, * PREFERENCE
;
95 typedef struct _NDIS_SPIN_LOCK
{
98 } NDIS_SPIN_LOCK
, * PNDIS_SPIN_LOCK
;
100 typedef struct _NDIS_EVENT
{
102 } NDIS_EVENT
, *PNDIS_EVENT
;
104 typedef PVOID NDIS_HANDLE
, *PNDIS_HANDLE
;
105 typedef int NDIS_STATUS
, *PNDIS_STATUS
;
107 typedef ANSI_STRING NDIS_ANSI_STRING
, *PNDIS_ANSI_STRING
;
108 typedef UNICODE_STRING NDIS_STRING
, *PNDIS_STRING
;
110 typedef MDL NDIS_BUFFER
, *PNDIS_BUFFER
;
111 typedef ULONG NDIS_ERROR_CODE
, *PNDIS_ERROR_CODE
;
114 /* NDIS_STATUS constants */
115 #define NDIS_STATUS_SUCCESS ((NDIS_STATUS)STATUS_SUCCESS)
116 #define NDIS_STATUS_PENDING ((NDIS_STATUS)STATUS_PENDING)
117 #define NDIS_STATUS_NOT_RECOGNIZED ((NDIS_STATUS)0x00010001L)
118 #define NDIS_STATUS_NOT_COPIED ((NDIS_STATUS)0x00010002L)
119 #define NDIS_STATUS_NOT_ACCEPTED ((NDIS_STATUS)0x00010003L)
120 #define NDIS_STATUS_CALL_ACTIVE ((NDIS_STATUS)0x00010007L)
121 #define NDIS_STATUS_ONLINE ((NDIS_STATUS)0x40010003L)
122 #define NDIS_STATUS_RESET_START ((NDIS_STATUS)0x40010004L)
123 #define NDIS_STATUS_RESET_END ((NDIS_STATUS)0x40010005L)
124 #define NDIS_STATUS_RING_STATUS ((NDIS_STATUS)0x40010006L)
125 #define NDIS_STATUS_CLOSED ((NDIS_STATUS)0x40010007L)
126 #define NDIS_STATUS_WAN_LINE_UP ((NDIS_STATUS)0x40010008L)
127 #define NDIS_STATUS_WAN_LINE_DOWN ((NDIS_STATUS)0x40010009L)
128 #define NDIS_STATUS_WAN_FRAGMENT ((NDIS_STATUS)0x4001000AL)
129 #define NDIS_STATUS_MEDIA_CONNECT ((NDIS_STATUS)0x4001000BL)
130 #define NDIS_STATUS_MEDIA_DISCONNECT ((NDIS_STATUS)0x4001000CL)
131 #define NDIS_STATUS_HARDWARE_LINE_UP ((NDIS_STATUS)0x4001000DL)
132 #define NDIS_STATUS_HARDWARE_LINE_DOWN ((NDIS_STATUS)0x4001000EL)
133 #define NDIS_STATUS_INTERFACE_UP ((NDIS_STATUS)0x4001000FL)
134 #define NDIS_STATUS_INTERFACE_DOWN ((NDIS_STATUS)0x40010010L)
135 #define NDIS_STATUS_MEDIA_BUSY ((NDIS_STATUS)0x40010011L)
136 #define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION ((NDIS_STATUS)0x40010012L)
137 #define NDIS_STATUS_WW_INDICATION NDIS_STATUS_MEDIA_SPECIFIC_INDICATION
138 #define NDIS_STATUS_LINK_SPEED_CHANGE ((NDIS_STATUS)0x40010013L)
139 #define NDIS_STATUS_WAN_GET_STATS ((NDIS_STATUS)0x40010014L)
140 #define NDIS_STATUS_WAN_CO_FRAGMENT ((NDIS_STATUS)0x40010015L)
141 #define NDIS_STATUS_WAN_CO_LINKPARAMS ((NDIS_STATUS)0x40010016L)
143 #define NDIS_STATUS_NOT_RESETTABLE ((NDIS_STATUS)0x80010001L)
144 #define NDIS_STATUS_SOFT_ERRORS ((NDIS_STATUS)0x80010003L)
145 #define NDIS_STATUS_HARD_ERRORS ((NDIS_STATUS)0x80010004L)
146 #define NDIS_STATUS_BUFFER_OVERFLOW ((NDIS_STATUS)STATUS_BUFFER_OVERFLOW)
148 #define NDIS_STATUS_FAILURE ((NDIS_STATUS)STATUS_UNSUCCESSFUL)
149 #define NDIS_STATUS_RESOURCES ((NDIS_STATUS)STATUS_INSUFFICIENT_RESOURCES)
150 #define NDIS_STATUS_CLOSING ((NDIS_STATUS)0xC0010002L)
151 #define NDIS_STATUS_BAD_VERSION ((NDIS_STATUS)0xC0010004L)
152 #define NDIS_STATUS_BAD_CHARACTERISTICS ((NDIS_STATUS)0xC0010005L)
153 #define NDIS_STATUS_ADAPTER_NOT_FOUND ((NDIS_STATUS)0xC0010006L)
154 #define NDIS_STATUS_OPEN_FAILED ((NDIS_STATUS)0xC0010007L)
155 #define NDIS_STATUS_DEVICE_FAILED ((NDIS_STATUS)0xC0010008L)
156 #define NDIS_STATUS_MULTICAST_FULL ((NDIS_STATUS)0xC0010009L)
157 #define NDIS_STATUS_MULTICAST_EXISTS ((NDIS_STATUS)0xC001000AL)
158 #define NDIS_STATUS_MULTICAST_NOT_FOUND ((NDIS_STATUS)0xC001000BL)
159 #define NDIS_STATUS_REQUEST_ABORTED ((NDIS_STATUS)0xC001000CL)
160 #define NDIS_STATUS_RESET_IN_PROGRESS ((NDIS_STATUS)0xC001000DL)
161 #define NDIS_STATUS_CLOSING_INDICATING ((NDIS_STATUS)0xC001000EL)
162 #define NDIS_STATUS_NOT_SUPPORTED ((NDIS_STATUS)STATUS_NOT_SUPPORTED)
163 #define NDIS_STATUS_INVALID_PACKET ((NDIS_STATUS)0xC001000FL)
164 #define NDIS_STATUS_OPEN_LIST_FULL ((NDIS_STATUS)0xC0010010L)
165 #define NDIS_STATUS_ADAPTER_NOT_READY ((NDIS_STATUS)0xC0010011L)
166 #define NDIS_STATUS_ADAPTER_NOT_OPEN ((NDIS_STATUS)0xC0010012L)
167 #define NDIS_STATUS_NOT_INDICATING ((NDIS_STATUS)0xC0010013L)
168 #define NDIS_STATUS_INVALID_LENGTH ((NDIS_STATUS)0xC0010014L)
169 #define NDIS_STATUS_INVALID_DATA ((NDIS_STATUS)0xC0010015L)
170 #define NDIS_STATUS_BUFFER_TOO_SHORT ((NDIS_STATUS)0xC0010016L)
171 #define NDIS_STATUS_INVALID_OID ((NDIS_STATUS)0xC0010017L)
172 #define NDIS_STATUS_ADAPTER_REMOVED ((NDIS_STATUS)0xC0010018L)
173 #define NDIS_STATUS_UNSUPPORTED_MEDIA ((NDIS_STATUS)0xC0010019L)
174 #define NDIS_STATUS_GROUP_ADDRESS_IN_USE ((NDIS_STATUS)0xC001001AL)
175 #define NDIS_STATUS_FILE_NOT_FOUND ((NDIS_STATUS)0xC001001BL)
176 #define NDIS_STATUS_ERROR_READING_FILE ((NDIS_STATUS)0xC001001CL)
177 #define NDIS_STATUS_ALREADY_MAPPED ((NDIS_STATUS)0xC001001DL)
178 #define NDIS_STATUS_RESOURCE_CONFLICT ((NDIS_STATUS)0xC001001EL)
179 #define NDIS_STATUS_NO_CABLE ((NDIS_STATUS)0xC001001FL)
181 #define NDIS_STATUS_INVALID_SAP ((NDIS_STATUS)0xC0010020L)
182 #define NDIS_STATUS_SAP_IN_USE ((NDIS_STATUS)0xC0010021L)
183 #define NDIS_STATUS_INVALID_ADDRESS ((NDIS_STATUS)0xC0010022L)
184 #define NDIS_STATUS_VC_NOT_ACTIVATED ((NDIS_STATUS)0xC0010023L)
185 #define NDIS_STATUS_DEST_OUT_OF_ORDER ((NDIS_STATUS)0xC0010024L)
186 #define NDIS_STATUS_VC_NOT_AVAILABLE ((NDIS_STATUS)0xC0010025L)
187 #define NDIS_STATUS_CELLRATE_NOT_AVAILABLE ((NDIS_STATUS)0xC0010026L)
188 #define NDIS_STATUS_INCOMPATABLE_QOS ((NDIS_STATUS)0xC0010027L)
189 #define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED ((NDIS_STATUS)0xC0010028L)
190 #define NDIS_STATUS_NO_ROUTE_TO_DESTINATION ((NDIS_STATUS)0xC0010029L)
192 #define NDIS_STATUS_TOKEN_RING_OPEN_ERROR ((NDIS_STATUS)0xC0011000L)
193 #define NDIS_STATUS_INVALID_DEVICE_REQUEST ((NDIS_STATUS)STATUS_INVALID_DEVICE_REQUEST)
194 #define NDIS_STATUS_NETWORK_UNREACHABLE ((NDIS_STATUS)STATUS_NETWORK_UNREACHABLE)
197 /* NDIS error codes for error logging */
199 #define NDIS_ERROR_CODE_RESOURCE_CONFLICT EVENT_NDIS_RESOURCE_CONFLICT
200 #define NDIS_ERROR_CODE_OUT_OF_RESOURCES EVENT_NDIS_OUT_OF_RESOURCE
201 #define NDIS_ERROR_CODE_HARDWARE_FAILURE EVENT_NDIS_HARDWARE_FAILURE
202 #define NDIS_ERROR_CODE_ADAPTER_NOT_FOUND EVENT_NDIS_ADAPTER_NOT_FOUND
203 #define NDIS_ERROR_CODE_INTERRUPT_CONNECT EVENT_NDIS_INTERRUPT_CONNECT
204 #define NDIS_ERROR_CODE_DRIVER_FAILURE EVENT_NDIS_DRIVER_FAILURE
205 #define NDIS_ERROR_CODE_BAD_VERSION EVENT_NDIS_BAD_VERSION
206 #define NDIS_ERROR_CODE_TIMEOUT EVENT_NDIS_TIMEOUT
207 #define NDIS_ERROR_CODE_NETWORK_ADDRESS EVENT_NDIS_NETWORK_ADDRESS
208 #define NDIS_ERROR_CODE_UNSUPPORTED_CONFIGURATION EVENT_NDIS_UNSUPPORTED_CONFIGURATION
209 #define NDIS_ERROR_CODE_INVALID_VALUE_FROM_ADAPTER EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER
210 #define NDIS_ERROR_CODE_MISSING_CONFIGURATION_PARAMETER EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER
211 #define NDIS_ERROR_CODE_BAD_IO_BASE_ADDRESS EVENT_NDIS_BAD_IO_BASE_ADDRESS
212 #define NDIS_ERROR_CODE_RECEIVE_SPACE_SMALL EVENT_NDIS_RECEIVE_SPACE_SMALL
213 #define NDIS_ERROR_CODE_ADAPTER_DISABLED EVENT_NDIS_ADAPTER_DISABLED
216 /* Memory allocation flags. Used by Ndis[Allocate|Free]Memory */
217 #define NDIS_MEMORY_CONTIGUOUS 0x00000001
218 #define NDIS_MEMORY_NONCACHED 0x00000002
220 /* NIC attribute flags. Used by NdisMSetAttributes(Ex) */
221 #define NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT 0x00000001
222 #define NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT 0x00000002
223 #define NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS 0x00000004
224 #define NDIS_ATTRIBUTE_BUS_MASTER 0x00000008
225 #define NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER 0x00000010
226 #define NDIS_ATTRIBUTE_DESERIALIZE 0x00000020
227 #define NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND 0x00000040
228 #define NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK 0x00000080
229 #define NDIS_ATTRIBUTE_NOT_CO_NDIS 0x00000100
230 #define NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS 0x00000200
235 typedef union _NDIS_RW_LOCK_REFCOUNT
{
238 } NDIS_RW_LOCK_REFCOUNT
;
240 typedef struct _NDIS_RW_LOCK
{
249 NDIS_RW_LOCK_REFCOUNT RefCount
[MAXIMUM_PROCESSORS
];
250 } NDIS_RW_LOCK
, *PNDIS_RW_LOCK
;
252 typedef struct _LOCK_STATE
{
255 } LOCK_STATE
, *PLOCK_STATE
;
262 (DDKAPI
*PNDIS_TIMER_FUNCTION
)(
263 IN PVOID SystemSpecific1
,
264 IN PVOID FunctionContext
,
265 IN PVOID SystemSpecific2
,
266 IN PVOID SystemSpecific3
);
268 typedef struct _NDIS_TIMER
{
271 } NDIS_TIMER
, *PNDIS_TIMER
;
277 typedef CM_MCA_POS_DATA NDIS_MCA_POS_DATA
, *PNDIS_MCA_POS_DATA
;
278 typedef CM_EISA_SLOT_INFORMATION NDIS_EISA_SLOT_INFORMATION
, *PNDIS_EISA_SLOT_INFORMATION
;
279 typedef CM_EISA_FUNCTION_INFORMATION NDIS_EISA_FUNCTION_INFORMATION
, *PNDIS_EISA_FUNCTION_INFORMATION
;
280 typedef CM_PARTIAL_RESOURCE_LIST NDIS_RESOURCE_LIST
, *PNDIS_RESOURCE_LIST
;
282 /* Hardware status codes (OID_GEN_HARDWARE_STATUS) */
283 typedef enum _NDIS_HARDWARE_STATUS
{
284 NdisHardwareStatusReady
,
285 NdisHardwareStatusInitializing
,
286 NdisHardwareStatusReset
,
287 NdisHardwareStatusClosing
,
288 NdisHardwareStatusNotReady
289 } NDIS_HARDWARE_STATUS
, *PNDIS_HARDWARE_STATUS
;
291 /* OID_GEN_GET_TIME_CAPS */
292 typedef struct _GEN_GET_TIME_CAPS
{
294 ULONG ClockPrecision
;
295 } GEN_GET_TIME_CAPS
, *PGEN_GET_TIME_CAPS
;
298 #define READABLE_LOCAL_CLOCK 0x00000001
299 #define CLOCK_NETWORK_DERIVED 0x00000002
300 #define CLOCK_PRECISION 0x00000004
301 #define RECEIVE_TIME_INDICATION_CAPABLE 0x00000008
302 #define TIMED_SEND_CAPABLE 0x00000010
303 #define TIME_STAMP_CAPABLE 0x00000020
305 /* OID_GEN_GET_NETCARD_TIME */
306 typedef struct _GEN_GET_NETCARD_TIME
{
308 } GEN_GET_NETCARD_TIME
, *PGEN_GET_NETCARD_TIME
;
310 /* NDIS driver medium (OID_GEN_MEDIA_SUPPORTED / OID_GEN_MEDIA_IN_USE) */
311 typedef enum _NDIS_MEDIUM
{
319 NdisMediumArcnet878_2
,
321 NdisMediumWirelessWan
,
327 } NDIS_MEDIUM
, *PNDIS_MEDIUM
;
329 /* NDIS packet filter bits (OID_GEN_CURRENT_PACKET_FILTER) */
330 #define NDIS_PACKET_TYPE_DIRECTED 0x00000001
331 #define NDIS_PACKET_TYPE_MULTICAST 0x00000002
332 #define NDIS_PACKET_TYPE_ALL_MULTICAST 0x00000004
333 #define NDIS_PACKET_TYPE_BROADCAST 0x00000008
334 #define NDIS_PACKET_TYPE_SOURCE_ROUTING 0x00000010
335 #define NDIS_PACKET_TYPE_PROMISCUOUS 0x00000020
336 #define NDIS_PACKET_TYPE_SMT 0x00000040
337 #define NDIS_PACKET_TYPE_ALL_LOCAL 0x00000080
338 #define NDIS_PACKET_TYPE_GROUP 0x00001000
339 #define NDIS_PACKET_TYPE_ALL_FUNCTIONAL 0x00002000
340 #define NDIS_PACKET_TYPE_FUNCTIONAL 0x00004000
341 #define NDIS_PACKET_TYPE_MAC_FRAME 0x00008000
343 /* NDIS protocol option bits (OID_GEN_PROTOCOL_OPTIONS) */
344 #define NDIS_PROT_OPTION_ESTIMATED_LENGTH 0x00000001
345 #define NDIS_PROT_OPTION_NO_LOOPBACK 0x00000002
346 #define NDIS_PROT_OPTION_NO_RSVD_ON_RCVPKT 0x00000004
348 /* NDIS MAC option bits (OID_GEN_MAC_OPTIONS) */
349 #define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA 0x00000001
350 #define NDIS_MAC_OPTION_RECEIVE_SERIALIZED 0x00000002
351 #define NDIS_MAC_OPTION_TRANSFERS_NOT_PEND 0x00000004
352 #define NDIS_MAC_OPTION_NO_LOOPBACK 0x00000008
353 #define NDIS_MAC_OPTION_FULL_DUPLEX 0x00000010
354 #define NDIS_MAC_OPTION_EOTX_INDICATION 0x00000020
355 #define NDIS_MAC_OPTION_8021P_PRIORITY 0x00000040
356 #define NDIS_MAC_OPTION_RESERVED 0x80000000
358 /* State of the LAN media (OID_GEN_MEDIA_CONNECT_STATUS) */
359 typedef enum _NDIS_MEDIA_STATE
{
360 NdisMediaStateConnected
,
361 NdisMediaStateDisconnected
362 } NDIS_MEDIA_STATE
, *PNDIS_MEDIA_STATE
;
364 /* OID_GEN_SUPPORTED_GUIDS */
365 typedef struct _NDIS_GUID
{
373 } NDIS_GUID
, *PNDIS_GUID
;
375 #define NDIS_GUID_TO_OID 0x00000001
376 #define NDIS_GUID_TO_STATUS 0x00000002
377 #define NDIS_GUID_ANSI_STRING 0x00000004
378 #define NDIS_GUID_UNICODE_STRING 0x00000008
379 #define NDIS_GUID_ARRAY 0x00000010
381 typedef HANDLE PNDIS_PACKET_POOL
;
383 /* NDIS_PACKET_PRIVATE.Flags constants */
384 #define fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO 0x40
385 #define fPACKET_ALLOCATED_BY_NDIS 0x80
387 typedef struct _NDIS_PACKET_PRIVATE
{
392 PNDIS_PACKET_POOL Pool
;
396 UCHAR NdisPacketFlags
;
397 USHORT NdisPacketOobOffset
;
398 } NDIS_PACKET_PRIVATE
, * PNDIS_PACKET_PRIVATE
;
400 typedef struct _NDIS_PACKET
{
401 NDIS_PACKET_PRIVATE Private
;
404 UCHAR MiniportReserved
[2 * sizeof(PVOID
)];
405 UCHAR WrapperReserved
[2 * sizeof(PVOID
)];
408 UCHAR MiniportReservedEx
[3 * sizeof(PVOID
)];
409 UCHAR WrapperReservedEx
[sizeof(PVOID
)];
412 UCHAR MacReserved
[4 * sizeof(PVOID
)];
415 ULONG_PTR Reserved
[2];
416 UCHAR ProtocolReserved
[1];
417 } NDIS_PACKET
, *PNDIS_PACKET
, **PPNDIS_PACKET
;
419 typedef enum _NDIS_CLASS_ID
{
420 NdisClass802_3Priority
,
421 NdisClassWirelessWanMbxMailbox
,
422 NdisClassIrdaPacketInfo
,
426 typedef struct MediaSpecificInformation
{
427 UINT NextEntryOffset
;
428 NDIS_CLASS_ID ClassId
;
430 UCHAR ClassInformation
[1];
431 } MEDIA_SPECIFIC_INFORMATION
;
433 typedef struct _NDIS_PACKET_OOB_DATA
{
434 _ANONYMOUS_UNION
union {
435 ULONGLONG TimeToSend
;
438 ULONGLONG TimeReceived
;
440 UINT SizeMediaSpecificInfo
;
441 PVOID MediaSpecificInformation
;
443 } NDIS_PACKET_OOB_DATA
, *PNDIS_PACKET_OOB_DATA
;
445 typedef struct _NDIS_PM_PACKET_PATTERN
{
452 } NDIS_PM_PACKET_PATTERN
, *PNDIS_PM_PACKET_PATTERN
;
454 typedef struct _NDIS_PACKET_STACK
{
455 ULONG_PTR IMReserved
[2];
456 ULONG_PTR NdisReserved
[4];
457 } NDIS_PACKET_STACK
, *PNDIS_PACKET_STACK
;
459 /* Request types used by NdisRequest */
460 typedef enum _NDIS_REQUEST_TYPE
{
461 NdisRequestQueryInformation
,
462 NdisRequestSetInformation
,
463 NdisRequestQueryStatistics
,
467 NdisRequestTransferData
,
473 } NDIS_REQUEST_TYPE
, *PNDIS_REQUEST_TYPE
;
475 typedef struct _NDIS_REQUEST
{
476 UCHAR MacReserved
[4 * sizeof(PVOID
)];
477 NDIS_REQUEST_TYPE RequestType
;
479 struct QUERY_INFORMATION
{
481 PVOID InformationBuffer
;
482 UINT InformationBufferLength
;
486 struct SET_INFORMATION
{
488 PVOID InformationBuffer
;
489 UINT InformationBufferLength
;
494 #if (defined(NDIS50) || defined(NDIS51))
495 UCHAR NdisReserved
[9 * sizeof(PVOID
)];
497 UCHAR CallMgrReserved
[2 * sizeof(PVOID
)];
498 UCHAR ProtocolReserved
[2 * sizeof(PVOID
)];
500 UCHAR MiniportReserved
[2 * sizeof(PVOID
)];
502 } NDIS_REQUEST
, *PNDIS_REQUEST
;
506 /* Wide Area Networks definitions */
508 typedef struct _NDIS_WAN_PACKET
{
509 LIST_ENTRY WanPacketQueue
;
510 PUCHAR CurrentBuffer
;
514 PVOID ProtocolReserved1
;
515 PVOID ProtocolReserved2
;
516 PVOID ProtocolReserved3
;
517 PVOID ProtocolReserved4
;
522 } NDIS_WAN_PACKET
, *PNDIS_WAN_PACKET
;
526 /* DMA channel information */
528 typedef struct _NDIS_DMA_DESCRIPTION
{
530 BOOLEAN AutoInitialize
;
531 BOOLEAN DmaChannelSpecified
;
536 } NDIS_DMA_DESCRIPTION
, *PNDIS_DMA_DESCRIPTION
;
538 typedef struct _NDIS_DMA_BLOCK
{
539 PVOID MapRegisterBase
;
540 KEVENT AllocationEvent
;
541 PADAPTER_OBJECT SystemAdapterObject
;
544 } NDIS_DMA_BLOCK
, *PNDIS_DMA_BLOCK
;
546 typedef UCHAR NDIS_DMA_SIZE
;
548 #define NDIS_DMA_24BITS ((NDIS_DMA_SIZE)0)
549 #define NDIS_DMA_32BITS ((NDIS_DMA_SIZE)1)
550 #define NDIS_DMA_64BITS ((NDIS_DMA_SIZE)2)
552 typedef enum _NDIS_PROCESSOR_TYPE
{
558 } NDIS_PROCESSOR_TYPE
, *PNDIS_PROCESSOR_TYPE
;
560 typedef enum _NDIS_ENVIRONMENT_TYPE
{
561 NdisEnvironmentWindows
,
562 NdisEnvironmentWindowsNt
563 } NDIS_ENVIRONMENT_TYPE
, *PNDIS_ENVIRONMENT_TYPE
;
565 /* Possible hardware architecture */
566 typedef enum _NDIS_INTERFACE_TYPE
{
567 NdisInterfaceInternal
= Internal
,
568 NdisInterfaceIsa
= Isa
,
569 NdisInterfaceEisa
= Eisa
,
570 NdisInterfaceMca
= MicroChannel
,
571 NdisInterfaceTurboChannel
= TurboChannel
,
572 NdisInterfacePci
= PCIBus
,
573 NdisInterfacePcMcia
= PCMCIABus
,
574 NdisInterfaceCBus
= CBus
,
575 NdisInterfaceMPIBus
= MPIBus
,
576 NdisInterfaceMPSABus
= MPSABus
,
577 NdisInterfaceProcessorInternal
= ProcessorInternal
,
578 NdisInterfaceInternalPowerBus
= InternalPowerBus
,
579 NdisInterfacePNPISABus
= PNPISABus
,
580 NdisInterfacePNPBus
= PNPBus
,
581 NdisMaximumInterfaceType
582 } NDIS_INTERFACE_TYPE
, *PNDIS_INTERFACE_TYPE
;
584 #define NdisInterruptLevelSensitive LevelSensitive
585 #define NdisInterruptLatched Latched
586 typedef KINTERRUPT_MODE NDIS_INTERRUPT_MODE
, *PNDIS_INTERRUPT_MODE
;
589 typedef enum _NDIS_PARAMETER_TYPE
{
590 NdisParameterInteger
,
591 NdisParameterHexInteger
,
593 NdisParameterMultiString
,
595 } NDIS_PARAMETER_TYPE
, *PNDIS_PARAMETER_TYPE
;
602 typedef struct _NDIS_CONFIGURATION_PARAMETER
{
603 NDIS_PARAMETER_TYPE ParameterType
;
606 NDIS_STRING StringData
;
607 BINARY_DATA BinaryData
;
609 } NDIS_CONFIGURATION_PARAMETER
, *PNDIS_CONFIGURATION_PARAMETER
;
612 typedef PHYSICAL_ADDRESS NDIS_PHYSICAL_ADDRESS
, *PNDIS_PHYSICAL_ADDRESS
;
614 typedef struct _NDIS_PHYSICAL_ADDRESS_UNIT
{
615 NDIS_PHYSICAL_ADDRESS PhysicalAddress
;
617 } NDIS_PHYSICAL_ADDRESS_UNIT
, *PNDIS_PHYSICAL_ADDRESS_UNIT
;
619 typedef struct _NDIS_WAN_LINE_DOWN
{
620 UCHAR RemoteAddress
[6];
621 UCHAR LocalAddress
[6];
622 } NDIS_WAN_LINE_DOWN
, *PNDIS_WAN_LINE_DOWN
;
624 typedef struct _NDIS_WAN_LINE_UP
{
626 ULONG MaximumTotalSize
;
627 NDIS_WAN_QUALITY Quality
;
629 UCHAR RemoteAddress
[6];
630 OUT UCHAR LocalAddress
[6];
631 ULONG ProtocolBufferLength
;
632 PUCHAR ProtocolBuffer
;
634 NDIS_STRING DeviceName
;
635 } NDIS_WAN_LINE_UP
, *PNDIS_WAN_LINE_UP
;
639 (DDKAPI
*ADAPTER_SHUTDOWN_HANDLER
)(
640 IN PVOID ShutdownContext
);
643 (DDKAPI
*TDI_REGISTER_CALLBACK
)(
644 IN PUNICODE_STRING DeviceName
,
645 OUT HANDLE
* TdiHandle
);
648 (DDKAPI
*TDI_PNP_HANDLER
)(
649 IN PUNICODE_STRING UpperComponent
,
650 IN PUNICODE_STRING LowerComponent
,
651 IN PUNICODE_STRING BindList
,
652 IN PVOID ReconfigBuffer
,
653 IN UINT ReconfigBufferSize
,
656 typedef struct _OID_LIST OID_LIST
, *POID_LIST
;
660 typedef enum _NDIS_PNP_DEVICE_STATE
{
662 NdisPnPDeviceStarted
,
663 NdisPnPDeviceQueryStopped
,
664 NdisPnPDeviceStopped
,
665 NdisPnPDeviceQueryRemoved
,
666 NdisPnPDeviceRemoved
,
667 NdisPnPDeviceSurpriseRemoved
668 } NDIS_PNP_DEVICE_STATE
;
670 #define NDIS_DEVICE_NOT_STOPPABLE 0x00000001
671 #define NDIS_DEVICE_NOT_REMOVEABLE 0x00000002
672 #define NDIS_DEVICE_NOT_SUSPENDABLE 0x00000004
673 #define NDIS_DEVICE_DISABLE_PM 0x00000008
674 #define NDIS_DEVICE_DISABLE_WAKE_UP 0x00000010
675 #define NDIS_DEVICE_DISABLE_WAKE_ON_RECONNECT 0x00000020
676 #define NDIS_DEVICE_RESERVED 0x00000040
677 #define NDIS_DEVICE_DISABLE_WAKE_ON_MAGIC_PACKET 0x00000080
678 #define NDIS_DEVICE_DISABLE_WAKE_ON_PATTERN_MATCH 0x00000100
681 /* OID_GEN_NETWORK_LAYER_ADDRESSES */
682 typedef struct _NETWORK_ADDRESS
{
683 USHORT AddressLength
;
686 } NETWORK_ADDRESS
, *PNETWORK_ADDRESS
;
688 typedef struct _NETWORK_ADDRESS_LIST
{
691 NETWORK_ADDRESS Address
[1];
692 } NETWORK_ADDRESS_LIST
, *PNETWORK_ADDRESS_LIST
;
694 /* Protocol types supported by NDIS */
695 #define NDIS_PROTOCOL_ID_DEFAULT 0x00
696 #define NDIS_PROTOCOL_ID_TCP_IP 0x02
697 #define NDIS_PROTOCOL_ID_IPX 0x06
698 #define NDIS_PROTOCOL_ID_NBF 0x07
699 #define NDIS_PROTOCOL_ID_MAX 0x0F
700 #define NDIS_PROTOCOL_ID_MASK 0x0F
703 /* OID_GEN_TRANSPORT_HEADER_OFFSET */
704 typedef struct _TRANSPORT_HEADER_OFFSET
{
707 } TRANSPORT_HEADER_OFFSET
, *PTRANSPORT_HEADER_OFFSET
;
710 /* OID_GEN_CO_LINK_SPEED / OID_GEN_CO_MINIMUM_LINK_SPEED */
711 typedef struct _NDIS_CO_LINK_SPEED
{
714 } NDIS_CO_LINK_SPEED
, *PNDIS_CO_LINK_SPEED
;
716 typedef ULONG NDIS_AF
, *PNDIS_AF
;
717 #define CO_ADDRESS_FAMILY_Q2931 ((NDIS_AF)0x1)
718 #define CO_ADDRESS_FAMILY_PSCHED ((NDIS_AF)0x2)
719 #define CO_ADDRESS_FAMILY_L2TP ((NDIS_AF)0x3)
720 #define CO_ADDRESS_FAMILY_IRDA ((NDIS_AF)0x4)
721 #define CO_ADDRESS_FAMILY_1394 ((NDIS_AF)0x5)
722 #define CO_ADDRESS_FAMILY_PPP ((NDIS_AF)0x6)
723 #define CO_ADDRESS_FAMILY_TAPI ((NDIS_AF)0x800)
724 #define CO_ADDRESS_FAMILY_TAPI_PROXY ((NDIS_AF)0x801)
726 #define CO_ADDRESS_FAMILY_PROXY 0x80000000
729 NDIS_AF AddressFamily
;
732 } CO_ADDRESS_FAMILY
, *PCO_ADDRESS_FAMILY
;
734 typedef struct _CO_SPECIFIC_PARAMETERS
{
738 } CO_SPECIFIC_PARAMETERS
, *PCO_SPECIFIC_PARAMETERS
;
740 typedef struct _CO_CALL_MANAGER_PARAMETERS
{
743 CO_SPECIFIC_PARAMETERS CallMgrSpecific
;
744 } CO_CALL_MANAGER_PARAMETERS
, *PCO_CALL_MANAGER_PARAMETERS
;
746 /* CO_MEDIA_PARAMETERS.Flags constants */
747 #define RECEIVE_TIME_INDICATION 0x00000001
748 #define USE_TIME_STAMPS 0x00000002
749 #define TRANSMIT_VC 0x00000004
750 #define RECEIVE_VC 0x00000008
751 #define INDICATE_ERRED_PACKETS 0x00000010
752 #define INDICATE_END_OF_TX 0x00000020
753 #define RESERVE_RESOURCES_VC 0x00000040
754 #define ROUND_DOWN_FLOW 0x00000080
755 #define ROUND_UP_FLOW 0x00000100
757 typedef struct _CO_MEDIA_PARAMETERS
{
759 ULONG ReceivePriority
;
760 ULONG ReceiveSizeHint
;
761 CO_SPECIFIC_PARAMETERS MediaSpecific
;
762 } CO_MEDIA_PARAMETERS
, *PCO_MEDIA_PARAMETERS
;
764 /* CO_CALL_PARAMETERS.Flags constants */
765 #define PERMANENT_VC 0x00000001
766 #define CALL_PARAMETERS_CHANGED 0x00000002
767 #define QUERY_CALL_PARAMETERS 0x00000004
768 #define BROADCAST_VC 0x00000008
769 #define MULTIPOINT_VC 0x00000010
771 typedef struct _CO_CALL_PARAMETERS
{
773 PCO_CALL_MANAGER_PARAMETERS CallMgrParameters
;
774 PCO_MEDIA_PARAMETERS MediaParameters
;
775 } CO_CALL_PARAMETERS
, *PCO_CALL_PARAMETERS
;
777 typedef struct _CO_SAP
{
783 typedef struct _NDIS_IPSEC_PACKET_INFO
{
784 _ANONYMOUS_UNION
union {
786 NDIS_HANDLE OffloadHandle
;
787 NDIS_HANDLE NextOffloadHandle
;
790 ULONG SA_DELETE_REQ
: 1;
791 ULONG CRYPTO_DONE
: 1;
792 ULONG NEXT_CRYPTO_DONE
: 1;
796 } NDIS_IPSEC_PACKET_INFO
, *PNDIS_IPSEC_PACKET_INFO
;
798 /* NDIS_MAC_FRAGMENT.Errors constants */
799 #define WAN_ERROR_CRC 0x00000001
800 #define WAN_ERROR_FRAMING 0x00000002
801 #define WAN_ERROR_HARDWAREOVERRUN 0x00000004
802 #define WAN_ERROR_BUFFEROVERRUN 0x00000008
803 #define WAN_ERROR_TIMEOUT 0x00000010
804 #define WAN_ERROR_ALIGNMENT 0x00000020
806 typedef struct _NDIS_MAC_FRAGMENT
{
807 NDIS_HANDLE NdisLinkContext
;
809 } NDIS_MAC_FRAGMENT
, *PNDIS_MAC_FRAGMENT
;
811 typedef struct _NDIS_MAC_LINE_DOWN
{
812 NDIS_HANDLE NdisLinkContext
;
813 } NDIS_MAC_LINE_DOWN
, *PNDIS_MAC_LINE_DOWN
;
815 typedef struct _NDIS_MAC_LINE_UP
{
817 NDIS_WAN_QUALITY Quality
;
819 NDIS_HANDLE ConnectionWrapperID
;
820 NDIS_HANDLE NdisLinkHandle
;
821 NDIS_HANDLE NdisLinkContext
;
822 } NDIS_MAC_LINE_UP
, *PNDIS_MAC_LINE_UP
;
824 typedef struct _NDIS_PACKET_8021Q_INFO
{
825 _ANONYMOUS_UNION
union {
827 UINT32 UserPriority
: 3;
828 UINT32 CanonicalFormatId
: 1;
830 UINT32 Reserved
: 16;
834 } NDIS_PACKET_8021Q_INFO
, *PNDIS_PACKET_8021Q_INFO
;
836 typedef enum _NDIS_PER_PACKET_INFO
{
837 TcpIpChecksumPacketInfo
,
839 TcpLargeSendPacketInfo
,
840 ClassificationHandlePacketInfo
,
842 ScatterGatherListPacketInfo
,
847 } NDIS_PER_PACKET_INFO
, *PNDIS_PER_PACKET_INFO
;
849 typedef struct _NDIS_PACKET_EXTENSION
{
850 PVOID NdisPacketInfo
[MaxPerPacketInfo
];
851 } NDIS_PACKET_EXTENSION
, *PNDIS_PACKET_EXTENSION
;
853 typedef struct _NDIS_OBJECT_HEADER
{
857 } NDIS_OBJECT_HEADER
, *PNDIS_OBJECT_HEADER
;
859 typedef struct _NDIS_GENERIC_OBJECT
{
860 NDIS_OBJECT_HEADER Header
;
863 PDRIVER_OBJECT DriverObject
;
864 } NDIS_GENERIC_OBJECT
, *PNDIS_GENERIC_OBJECT
;
868 * NDIS_GET_ORIGINAL_PACKET(
869 * IN PNDIS_PACKET Packet);
871 #define NDIS_GET_ORIGINAL_PACKET(Packet) \
872 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo)
876 * NDIS_GET_PACKET_CANCEL_ID(
877 * IN PNDIS_PACKET Packet);
879 #define NDIS_GET_PACKET_CANCEL_ID(Packet) \
880 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId)
883 * PNDIS_PACKET_EXTENSION
884 * NDIS_PACKET_EXTENSION_FROM_PACKET(
885 * IN PNDIS_PACKET Packet);
887 #define NDIS_PACKET_EXTENSION_FROM_PACKET(Packet) \
888 ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) \
889 + (Packet)->Private.NdisPacketOobOffset + sizeof(NDIS_PACKET_OOB_DATA)))
893 * NDIS_PER_PACKET_INFO_FROM_PACKET(
894 * IN OUT PNDIS_PACKET Packet,
895 * IN NDIS_PER_PACKET_INFO InfoType);
897 #define NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, InfoType) \
898 ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) + (Packet)->Private.NdisPacketOobOffset \
899 + sizeof(NDIS_PACKET_OOB_DATA)))->NdisPacketInfo[(InfoType)]
903 * NDIS_SET_ORIGINAL_PACKET(
904 * IN OUT PNDIS_PACKET Packet,
905 * IN PNDIS_PACKET OriginalPacket);
907 #define NDIS_SET_ORIGINAL_PACKET(Packet, OriginalPacket) \
908 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo) = (OriginalPacket)
912 * NDIS_SET_PACKET_CANCEL_ID(
913 * IN PNDIS_PACKET Packet
914 * IN ULONG_PTR CancelId);
916 #define NDIS_SET_PACKET_CANCEL_ID(Packet, CancelId) \
917 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId) = (CancelId)
919 typedef enum _NDIS_TASK
{
920 TcpIpChecksumNdisTask
,
922 TcpLargeSendNdisTask
,
924 } NDIS_TASK
, *PNDIS_TASK
;
926 typedef struct _NDIS_TASK_IPSEC
{
928 ULONG AH_ESP_COMBINED
;
929 ULONG TRANSPORT_TUNNEL_COMBINED
;
946 ULONG TRIPLE_DES
: 1;
953 } NDIS_TASK_IPSEC
, *PNDIS_TASK_IPSEC
;
955 typedef struct _NDIS_TASK_OFFLOAD
{
959 ULONG OffsetNextTask
;
960 ULONG TaskBufferLength
;
962 } NDIS_TASK_OFFLOAD
, *PNDIS_TASK_OFFLOAD
;
964 /* NDIS_TASK_OFFLOAD_HEADER.Version constants */
965 #define NDIS_TASK_OFFLOAD_VERSION 1
967 typedef enum _NDIS_ENCAPSULATION
{
968 UNSPECIFIED_Encapsulation
,
970 IEEE_802_3_Encapsulation
,
971 IEEE_802_5_Encapsulation
,
972 LLC_SNAP_ROUTED_Encapsulation
,
973 LLC_SNAP_BRIDGED_Encapsulation
974 } NDIS_ENCAPSULATION
;
976 typedef struct _NDIS_ENCAPSULATION_FORMAT
{
977 NDIS_ENCAPSULATION Encapsulation
;
979 ULONG FixedHeaderSize
: 1;
982 ULONG EncapsulationHeaderSize
;
983 } NDIS_ENCAPSULATION_FORMAT
, *PNDIS_ENCAPSULATION_FORMAT
;
985 typedef struct _NDIS_TASK_OFFLOAD_HEADER
990 ULONG OffsetFirstTask
;
991 NDIS_ENCAPSULATION_FORMAT EncapsulationFormat
;
992 } NDIS_TASK_OFFLOAD_HEADER
, *PNDIS_TASK_OFFLOAD_HEADER
;
994 typedef struct _NDIS_TASK_TCP_IP_CHECKSUM
{
996 ULONG IpOptionsSupported
:1;
997 ULONG TcpOptionsSupported
:1;
1004 ULONG IpOptionsSupported
: 1;
1005 ULONG TcpOptionsSupported
: 1;
1006 ULONG TcpChecksum
: 1;
1007 ULONG UdpChecksum
: 1;
1008 ULONG IpChecksum
: 1;
1012 ULONG IpOptionsSupported
: 1;
1013 ULONG TcpOptionsSupported
: 1;
1014 ULONG TcpChecksum
: 1;
1015 ULONG UdpChecksum
: 1;
1019 ULONG IpOptionsSupported
: 1;
1020 ULONG TcpOptionsSupported
: 1;
1021 ULONG TcpChecksum
: 1;
1022 ULONG UdpChecksum
: 1;
1024 } NDIS_TASK_TCP_IP_CHECKSUM
, *PNDIS_TASK_TCP_IP_CHECKSUM
;
1026 typedef struct _NDIS_TASK_TCP_LARGE_SEND
{
1028 ULONG MaxOffLoadSize
;
1029 ULONG MinSegmentCount
;
1032 } NDIS_TASK_TCP_LARGE_SEND
, *PNDIS_TASK_TCP_LARGE_SEND
;
1034 typedef struct _NDIS_TCP_IP_CHECKSUM_PACKET_INFO
{
1035 _ANONYMOUS_UNION
union {
1037 ULONG NdisPacketChecksumV4
: 1;
1038 ULONG NdisPacketChecksumV6
: 1;
1039 ULONG NdisPacketTcpChecksum
: 1;
1040 ULONG NdisPacketUdpChecksum
: 1;
1041 ULONG NdisPacketIpChecksum
: 1;
1045 ULONG NdisPacketTcpChecksumFailed
: 1;
1046 ULONG NdisPacketUdpChecksumFailed
: 1;
1047 ULONG NdisPacketIpChecksumFailed
: 1;
1048 ULONG NdisPacketTcpChecksumSucceeded
: 1;
1049 ULONG NdisPacketUdpChecksumSucceeded
: 1;
1050 ULONG NdisPacketIpChecksumSucceeded
: 1;
1051 ULONG NdisPacketLoopback
: 1;
1055 } NDIS_TCP_IP_CHECKSUM_PACKET_INFO
, *PNDIS_TCP_IP_CHECKSUM_PACKET_INFO
;
1057 typedef struct _NDIS_WAN_CO_FRAGMENT
{
1059 } NDIS_WAN_CO_FRAGMENT
, *PNDIS_WAN_CO_FRAGMENT
;
1061 typedef struct _NDIS_WAN_FRAGMENT
{
1062 UCHAR RemoteAddress
[6];
1063 UCHAR LocalAddress
[6];
1064 } NDIS_WAN_FRAGMENT
, *PNDIS_WAN_FRAGMENT
;
1066 typedef struct _WAN_CO_LINKPARAMS
{
1067 ULONG TransmitSpeed
;
1070 } WAN_CO_LINKPARAMS
, *PWAN_CO_LINKPARAMS
;
1076 (DDKAPI
*CM_ACTIVATE_VC_COMPLETE_HANDLER
)(
1077 IN NDIS_STATUS Status
,
1078 IN NDIS_HANDLE CallMgrVcContext
,
1079 IN PCO_CALL_PARAMETERS CallParameters
);
1082 (DDKAPI
*CM_ADD_PARTY_HANDLER
)(
1083 IN NDIS_HANDLE CallMgrVcContext
,
1084 IN OUT PCO_CALL_PARAMETERS CallParameters
,
1085 IN NDIS_HANDLE NdisPartyHandle
,
1086 OUT PNDIS_HANDLE CallMgrPartyContext
);
1089 (DDKAPI
*CM_CLOSE_AF_HANDLER
)(
1090 IN NDIS_HANDLE CallMgrAfContext
);
1093 (DDKAPI
*CM_CLOSE_CALL_HANDLER
)(
1094 IN NDIS_HANDLE CallMgrVcContext
,
1095 IN NDIS_HANDLE CallMgrPartyContext OPTIONAL
,
1096 IN PVOID CloseData OPTIONAL
,
1097 IN UINT Size OPTIONAL
);
1100 (DDKAPI
*CM_DEREG_SAP_HANDLER
)(
1101 IN NDIS_HANDLE CallMgrSapContext
);
1104 (DDKAPI
*CM_DEACTIVATE_VC_COMPLETE_HANDLER
)(
1105 IN NDIS_STATUS Status
,
1106 IN NDIS_HANDLE CallMgrVcContext
);
1109 (DDKAPI
*CM_DROP_PARTY_HANDLER
)(
1110 IN NDIS_HANDLE CallMgrPartyContext
,
1111 IN PVOID CloseData OPTIONAL
,
1112 IN UINT Size OPTIONAL
);
1115 (DDKAPI
*CM_INCOMING_CALL_COMPLETE_HANDLER
)(
1116 IN NDIS_STATUS Status
,
1117 IN NDIS_HANDLE CallMgrVcContext
,
1118 IN PCO_CALL_PARAMETERS CallParameters
);
1121 (DDKAPI
*CM_MAKE_CALL_HANDLER
)(
1122 IN NDIS_HANDLE CallMgrVcContext
,
1123 IN OUT PCO_CALL_PARAMETERS CallParameters
,
1124 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
1125 OUT PNDIS_HANDLE CallMgrPartyContext OPTIONAL
);
1128 (DDKAPI
*CM_MODIFY_CALL_QOS_HANDLER
)(
1129 IN NDIS_HANDLE CallMgrVcContext
,
1130 IN PCO_CALL_PARAMETERS CallParameters
);
1133 (DDKAPI
*CM_OPEN_AF_HANDLER
)(
1134 IN NDIS_HANDLE CallMgrBindingContext
,
1135 IN PCO_ADDRESS_FAMILY AddressFamily
,
1136 IN NDIS_HANDLE NdisAfHandle
,
1137 OUT PNDIS_HANDLE CallMgrAfContext
);
1140 (DDKAPI
*CM_REG_SAP_HANDLER
)(
1141 IN NDIS_HANDLE CallMgrAfContext
,
1143 IN NDIS_HANDLE NdisSapHandle
,
1144 OUT PNDIS_HANDLE CallMgrSapContext
);
1147 (DDKAPI
*CO_CREATE_VC_HANDLER
)(
1148 IN NDIS_HANDLE ProtocolAfContext
,
1149 IN NDIS_HANDLE NdisVcHandle
,
1150 OUT PNDIS_HANDLE ProtocolVcContext
);
1153 (DDKAPI
*CO_DELETE_VC_HANDLER
)(
1154 IN NDIS_HANDLE ProtocolVcContext
);
1157 (DDKAPI
*CO_REQUEST_COMPLETE_HANDLER
)(
1158 IN NDIS_STATUS Status
,
1159 IN NDIS_HANDLE ProtocolAfContext OPTIONAL
,
1160 IN NDIS_HANDLE ProtocolVcContext OPTIONAL
,
1161 IN NDIS_HANDLE ProtocolPartyContext OPTIONAL
,
1162 IN PNDIS_REQUEST NdisRequest
);
1165 (DDKAPI
*CO_REQUEST_HANDLER
)(
1166 IN NDIS_HANDLE ProtocolAfContext
,
1167 IN NDIS_HANDLE ProtocolVcContext OPTIONAL
,
1168 IN NDIS_HANDLE ProtocolPartyContext OPTIONAL
,
1169 IN OUT PNDIS_REQUEST NdisRequest
);
1171 typedef struct _NDIS_CALL_MANAGER_CHARACTERISTICS
{
1176 CO_CREATE_VC_HANDLER CmCreateVcHandler
;
1177 CO_DELETE_VC_HANDLER CmDeleteVcHandler
;
1178 CM_OPEN_AF_HANDLER CmOpenAfHandler
;
1179 CM_CLOSE_AF_HANDLER CmCloseAfHandler
;
1180 CM_REG_SAP_HANDLER CmRegisterSapHandler
;
1181 CM_DEREG_SAP_HANDLER CmDeregisterSapHandler
;
1182 CM_MAKE_CALL_HANDLER CmMakeCallHandler
;
1183 CM_CLOSE_CALL_HANDLER CmCloseCallHandler
;
1184 CM_INCOMING_CALL_COMPLETE_HANDLER CmIncomingCallCompleteHandler
;
1185 CM_ADD_PARTY_HANDLER CmAddPartyHandler
;
1186 CM_DROP_PARTY_HANDLER CmDropPartyHandler
;
1187 CM_ACTIVATE_VC_COMPLETE_HANDLER CmActivateVcCompleteHandler
;
1188 CM_DEACTIVATE_VC_COMPLETE_HANDLER CmDeactivateVcCompleteHandler
;
1189 CM_MODIFY_CALL_QOS_HANDLER CmModifyCallQoSHandler
;
1190 CO_REQUEST_HANDLER CmRequestHandler
;
1191 CO_REQUEST_COMPLETE_HANDLER CmRequestCompleteHandler
;
1192 } NDIS_CALL_MANAGER_CHARACTERISTICS
, *PNDIS_CALL_MANAGER_CHARACTERISTICS
;
1196 /* Call Manager clients */
1198 typedef VOID (*CL_OPEN_AF_COMPLETE_HANDLER
)(
1199 IN NDIS_STATUS Status
,
1200 IN NDIS_HANDLE ProtocolAfContext
,
1201 IN NDIS_HANDLE NdisAfHandle
);
1204 (DDKAPI
*CL_CLOSE_AF_COMPLETE_HANDLER
)(
1205 IN NDIS_STATUS Status
,
1206 IN NDIS_HANDLE ProtocolAfContext
);
1209 (DDKAPI
*CL_REG_SAP_COMPLETE_HANDLER
)(
1210 IN NDIS_STATUS Status
,
1211 IN NDIS_HANDLE ProtocolSapContext
,
1213 IN NDIS_HANDLE NdisSapHandle
);
1216 (DDKAPI
*CL_DEREG_SAP_COMPLETE_HANDLER
)(
1217 IN NDIS_STATUS Status
,
1218 IN NDIS_HANDLE ProtocolSapContext
);
1221 (DDKAPI
*CL_MAKE_CALL_COMPLETE_HANDLER
)(
1222 IN NDIS_STATUS Status
,
1223 IN NDIS_HANDLE ProtocolVcContext
,
1224 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
1225 IN PCO_CALL_PARAMETERS CallParameters
);
1228 (DDKAPI
*CL_MODIFY_CALL_QOS_COMPLETE_HANDLER
)(
1229 IN NDIS_STATUS Status
,
1230 IN NDIS_HANDLE ProtocolVcContext
,
1231 IN PCO_CALL_PARAMETERS CallParameters
);
1234 (DDKAPI
*CL_CLOSE_CALL_COMPLETE_HANDLER
)(
1235 IN NDIS_STATUS Status
,
1236 IN NDIS_HANDLE ProtocolVcContext
,
1237 IN NDIS_HANDLE ProtocolPartyContext OPTIONAL
);
1240 (DDKAPI
*CL_ADD_PARTY_COMPLETE_HANDLER
)(
1241 IN NDIS_STATUS Status
,
1242 IN NDIS_HANDLE ProtocolPartyContext
,
1243 IN NDIS_HANDLE NdisPartyHandle
,
1244 IN PCO_CALL_PARAMETERS CallParameters
);
1247 (DDKAPI
*CL_DROP_PARTY_COMPLETE_HANDLER
)(
1248 IN NDIS_STATUS Status
,
1249 IN NDIS_HANDLE ProtocolPartyContext
);
1252 (DDKAPI
*CL_INCOMING_CALL_HANDLER
)(
1253 IN NDIS_HANDLE ProtocolSapContext
,
1254 IN NDIS_HANDLE ProtocolVcContext
,
1255 IN OUT PCO_CALL_PARAMETERS CallParameters
);
1258 (DDKAPI
*CL_INCOMING_CALL_QOS_CHANGE_HANDLER
)(
1259 IN NDIS_HANDLE ProtocolVcContext
,
1260 IN PCO_CALL_PARAMETERS CallParameters
);
1263 (DDKAPI
*CL_INCOMING_CLOSE_CALL_HANDLER
)(
1264 IN NDIS_STATUS CloseStatus
,
1265 IN NDIS_HANDLE ProtocolVcContext
,
1266 IN PVOID CloseData OPTIONAL
,
1267 IN UINT Size OPTIONAL
);
1270 (DDKAPI
*CL_INCOMING_DROP_PARTY_HANDLER
)(
1271 IN NDIS_STATUS DropStatus
,
1272 IN NDIS_HANDLE ProtocolPartyContext
,
1273 IN PVOID CloseData OPTIONAL
,
1274 IN UINT Size OPTIONAL
);
1277 (DDKAPI
*CL_CALL_CONNECTED_HANDLER
)(
1278 IN NDIS_HANDLE ProtocolVcContext
);
1281 typedef struct _NDIS_CLIENT_CHARACTERISTICS
{
1286 CO_CREATE_VC_HANDLER ClCreateVcHandler
;
1287 CO_DELETE_VC_HANDLER ClDeleteVcHandler
;
1288 CO_REQUEST_HANDLER ClRequestHandler
;
1289 CO_REQUEST_COMPLETE_HANDLER ClRequestCompleteHandler
;
1290 CL_OPEN_AF_COMPLETE_HANDLER ClOpenAfCompleteHandler
;
1291 CL_CLOSE_AF_COMPLETE_HANDLER ClCloseAfCompleteHandler
;
1292 CL_REG_SAP_COMPLETE_HANDLER ClRegisterSapCompleteHandler
;
1293 CL_DEREG_SAP_COMPLETE_HANDLER ClDeregisterSapCompleteHandler
;
1294 CL_MAKE_CALL_COMPLETE_HANDLER ClMakeCallCompleteHandler
;
1295 CL_MODIFY_CALL_QOS_COMPLETE_HANDLER ClModifyCallQoSCompleteHandler
;
1296 CL_CLOSE_CALL_COMPLETE_HANDLER ClCloseCallCompleteHandler
;
1297 CL_ADD_PARTY_COMPLETE_HANDLER ClAddPartyCompleteHandler
;
1298 CL_DROP_PARTY_COMPLETE_HANDLER ClDropPartyCompleteHandler
;
1299 CL_INCOMING_CALL_HANDLER ClIncomingCallHandler
;
1300 CL_INCOMING_CALL_QOS_CHANGE_HANDLER ClIncomingCallQoSChangeHandler
;
1301 CL_INCOMING_CLOSE_CALL_HANDLER ClIncomingCloseCallHandler
;
1302 CL_INCOMING_DROP_PARTY_HANDLER ClIncomingDropPartyHandler
;
1303 CL_CALL_CONNECTED_HANDLER ClCallConnectedHandler
;
1304 } NDIS_CLIENT_CHARACTERISTICS
, *PNDIS_CLIENT_CHARACTERISTICS
;
1307 /* NDIS protocol structures */
1309 /* Prototypes for NDIS 3.0 protocol characteristics */
1312 (DDKAPI
*OPEN_ADAPTER_COMPLETE_HANDLER
)(
1313 IN NDIS_HANDLE ProtocolBindingContext
,
1314 IN NDIS_STATUS Status
,
1315 IN NDIS_STATUS OpenErrorStatus
);
1318 (DDKAPI
*CLOSE_ADAPTER_COMPLETE_HANDLER
)(
1319 IN NDIS_HANDLE ProtocolBindingContext
,
1320 IN NDIS_STATUS Status
);
1323 (DDKAPI
*RESET_COMPLETE_HANDLER
)(
1324 IN NDIS_HANDLE ProtocolBindingContext
,
1325 IN NDIS_STATUS Status
);
1328 (DDKAPI
*REQUEST_COMPLETE_HANDLER
)(
1329 IN NDIS_HANDLE ProtocolBindingContext
,
1330 IN PNDIS_REQUEST NdisRequest
,
1331 IN NDIS_STATUS Status
);
1334 (DDKAPI
*STATUS_HANDLER
)(
1335 IN NDIS_HANDLE ProtocolBindingContext
,
1336 IN NDIS_STATUS GeneralStatus
,
1337 IN PVOID StatusBuffer
,
1338 IN UINT StatusBufferSize
);
1341 (DDKAPI
*STATUS_COMPLETE_HANDLER
)(
1342 IN NDIS_HANDLE ProtocolBindingContext
);
1345 (DDKAPI
*SEND_COMPLETE_HANDLER
)(
1346 IN NDIS_HANDLE ProtocolBindingContext
,
1347 IN PNDIS_PACKET Packet
,
1348 IN NDIS_STATUS Status
);
1351 (DDKAPI
*WAN_SEND_COMPLETE_HANDLER
)(
1352 IN NDIS_HANDLE ProtocolBindingContext
,
1353 IN PNDIS_WAN_PACKET Packet
,
1354 IN NDIS_STATUS Status
);
1357 (DDKAPI
*TRANSFER_DATA_COMPLETE_HANDLER
)(
1358 IN NDIS_HANDLE ProtocolBindingContext
,
1359 IN PNDIS_PACKET Packet
,
1360 IN NDIS_STATUS Status
,
1361 IN UINT BytesTransferred
);
1364 (DDKAPI
*WAN_TRANSFER_DATA_COMPLETE_HANDLER
)(
1369 (DDKAPI
*RECEIVE_HANDLER
)(
1370 IN NDIS_HANDLE ProtocolBindingContext
,
1371 IN NDIS_HANDLE MacReceiveContext
,
1372 IN PVOID HeaderBuffer
,
1373 IN UINT HeaderBufferSize
,
1374 IN PVOID LookAheadBuffer
,
1375 IN UINT LookaheadBufferSize
,
1376 IN UINT PacketSize
);
1379 (DDKAPI
*WAN_RECEIVE_HANDLER
)(
1380 IN NDIS_HANDLE NdisLinkHandle
,
1382 IN ULONG PacketSize
);
1385 (DDKAPI
*RECEIVE_COMPLETE_HANDLER
)(
1386 IN NDIS_HANDLE ProtocolBindingContext
);
1389 /* Protocol characteristics for NDIS 3.0 protocols */
1391 #define NDIS30_PROTOCOL_CHARACTERISTICS_S \
1392 UCHAR MajorNdisVersion; \
1393 UCHAR MinorNdisVersion; \
1395 _ANONYMOUS_UNION union { \
1399 OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler; \
1400 CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler; \
1401 _ANONYMOUS_UNION union { \
1402 SEND_COMPLETE_HANDLER SendCompleteHandler; \
1403 WAN_SEND_COMPLETE_HANDLER WanSendCompleteHandler; \
1404 } DUMMYUNIONNAME2; \
1405 _ANONYMOUS_UNION union { \
1406 TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler; \
1407 WAN_TRANSFER_DATA_COMPLETE_HANDLER WanTransferDataCompleteHandler; \
1408 } DUMMYUNIONNAME3; \
1409 RESET_COMPLETE_HANDLER ResetCompleteHandler; \
1410 REQUEST_COMPLETE_HANDLER RequestCompleteHandler; \
1411 _ANONYMOUS_UNION union { \
1412 RECEIVE_HANDLER ReceiveHandler; \
1413 WAN_RECEIVE_HANDLER WanReceiveHandler; \
1414 } DUMMYUNIONNAME4; \
1415 RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler; \
1416 STATUS_HANDLER StatusHandler; \
1417 STATUS_COMPLETE_HANDLER StatusCompleteHandler; \
1420 typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS
{
1421 NDIS30_PROTOCOL_CHARACTERISTICS_S
1422 } NDIS30_PROTOCOL_CHARACTERISTICS
, *PNDIS30_PROTOCOL_CHARACTERISTICS
;
1425 /* Prototypes for NDIS 4.0 protocol characteristics */
1428 (DDKAPI
*RECEIVE_PACKET_HANDLER
)(
1429 IN NDIS_HANDLE ProtocolBindingContext
,
1430 IN PNDIS_PACKET Packet
);
1433 (DDKAPI
*BIND_HANDLER
)(
1434 OUT PNDIS_STATUS Status
,
1435 IN NDIS_HANDLE BindContext
,
1436 IN PNDIS_STRING DeviceName
,
1437 IN PVOID SystemSpecific1
,
1438 IN PVOID SystemSpecific2
);
1441 (DDKAPI
*UNBIND_HANDLER
)(
1442 OUT PNDIS_STATUS Status
,
1443 IN NDIS_HANDLE ProtocolBindingContext
,
1444 IN NDIS_HANDLE UnbindContext
);
1447 (DDKAPI
*PNP_EVENT_HANDLER
)(
1448 IN NDIS_HANDLE ProtocolBindingContext
,
1449 IN PNET_PNP_EVENT NetPnPEvent
);
1452 (DDKAPI
*UNLOAD_PROTOCOL_HANDLER
)(
1456 /* Protocol characteristics for NDIS 4.0 protocols */
1460 #define NDIS40_PROTOCOL_CHARACTERISTICS_S \
1461 NDIS30_PROTOCOL_CHARACTERISTICS Ndis30Chars; \
1462 RECEIVE_PACKET_HANDLER ReceivePacketHandler; \
1463 BIND_HANDLER BindAdapterHandler; \
1464 UNBIND_HANDLER UnbindAdapterHandler; \
1465 PNP_EVENT_HANDLER PnPEventHandler; \
1466 UNLOAD_PROTOCOL_HANDLER UnloadHandler;
1468 #else /* !__cplusplus */
1470 #define NDIS40_PROTOCOL_CHARACTERISTICS_S \
1471 NDIS30_PROTOCOL_CHARACTERISTICS_S \
1472 RECEIVE_PACKET_HANDLER ReceivePacketHandler; \
1473 BIND_HANDLER BindAdapterHandler; \
1474 UNBIND_HANDLER UnbindAdapterHandler; \
1475 PNP_EVENT_HANDLER PnPEventHandler; \
1476 UNLOAD_PROTOCOL_HANDLER UnloadHandler;
1478 #endif /* __cplusplus */
1480 typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS
{
1481 NDIS40_PROTOCOL_CHARACTERISTICS_S
1482 } NDIS40_PROTOCOL_CHARACTERISTICS
, *PNDIS40_PROTOCOL_CHARACTERISTICS
;
1484 /* Prototypes for NDIS 5.0 protocol characteristics */
1487 (DDKAPI
*CO_SEND_COMPLETE_HANDLER
)(
1488 IN NDIS_STATUS Status
,
1489 IN NDIS_HANDLE ProtocolVcContext
,
1490 IN PNDIS_PACKET Packet
);
1493 (DDKAPI
*CO_STATUS_HANDLER
)(
1494 IN NDIS_HANDLE ProtocolBindingContext
,
1495 IN NDIS_HANDLE ProtocolVcContext OPTIONAL
,
1496 IN NDIS_STATUS GeneralStatus
,
1497 IN PVOID StatusBuffer
,
1498 IN UINT StatusBufferSize
);
1501 (DDKAPI
*CO_RECEIVE_PACKET_HANDLER
)(
1502 IN NDIS_HANDLE ProtocolBindingContext
,
1503 IN NDIS_HANDLE ProtocolVcContext
,
1504 IN PNDIS_PACKET Packet
);
1507 (DDKAPI
*CO_AF_REGISTER_NOTIFY_HANDLER
)(
1508 IN NDIS_HANDLE ProtocolBindingContext
,
1509 IN PCO_ADDRESS_FAMILY AddressFamily
);
1511 #ifdef __cplusplus \
1513 #define NDIS50_PROTOCOL_CHARACTERISTICS_S \
1514 NDIS40_PROTOCOL_CHARACTERISTICS Ndis40Chars; \
1515 PVOID ReservedHandlers[4]; \
1516 CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler; \
1517 CO_STATUS_HANDLER CoStatusHandler; \
1518 CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler; \
1519 CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
1521 #else /* !__cplusplus */
1523 #define NDIS50_PROTOCOL_CHARACTERISTICS_S \
1524 NDIS40_PROTOCOL_CHARACTERISTICS_S \
1525 PVOID ReservedHandlers[4]; \
1526 CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler; \
1527 CO_STATUS_HANDLER CoStatusHandler; \
1528 CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler; \
1529 CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
1531 #endif /* !__cplusplus */
1533 typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS
{
1534 NDIS50_PROTOCOL_CHARACTERISTICS_S
1535 } NDIS50_PROTOCOL_CHARACTERISTICS
, *PNDIS50_PROTOCOL_CHARACTERISTICS
;
1537 #if defined(NDIS50) || defined(NDIS51)
1538 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS
{
1539 NDIS50_PROTOCOL_CHARACTERISTICS_S
1540 } NDIS_PROTOCOL_CHARACTERISTICS
, *PNDIS_PROTOCOL_CHARACTERISTICS
;
1541 #elif defined(NDIS40)
1542 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS
{
1543 NDIS40_PROTOCOL_CHARACTERISTICS_S
1544 } NDIS_PROTOCOL_CHARACTERISTICS
, *PNDIS_PROTOCOL_CHARACTERISTICS
;
1546 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS
{
1547 NDIS30_PROTOCOL_CHARACTERISTICS_S
1548 } NDIS_PROTOCOL_CHARACTERISTICS
, *PNDIS_PROTOCOL_CHARACTERISTICS
;
1553 /* Buffer management routines */
1559 OUT PNDIS_STATUS Status
,
1560 OUT PNDIS_BUFFER
*Buffer
,
1561 IN NDIS_HANDLE PoolHandle
,
1562 IN PVOID VirtualAddress
,
1569 NdisAllocateBufferPool(
1570 OUT PNDIS_STATUS Status
,
1571 OUT PNDIS_HANDLE PoolHandle
,
1572 IN UINT NumberOfDescriptors
);
1578 OUT PNDIS_STATUS Status
,
1579 OUT PNDIS_PACKET
*Packet
,
1580 IN NDIS_HANDLE PoolHandle
);
1585 NdisAllocatePacketPool(
1586 OUT PNDIS_STATUS Status
,
1587 OUT PNDIS_HANDLE PoolHandle
,
1588 IN UINT NumberOfDescriptors
,
1589 IN UINT ProtocolReservedLength
);
1595 OUT PNDIS_STATUS Status
,
1596 OUT PNDIS_BUFFER
*Buffer
,
1597 IN NDIS_HANDLE PoolHandle
,
1598 IN PVOID MemoryDescriptor
,
1605 NdisCopyFromPacketToPacket(
1606 IN PNDIS_PACKET Destination
,
1607 IN UINT DestinationOffset
,
1608 IN UINT BytesToCopy
,
1609 IN PNDIS_PACKET Source
,
1610 IN UINT SourceOffset
,
1611 OUT PUINT BytesCopied
);
1615 * NdisCopyLookaheadData(
1616 * IN PVOID Destination,
1619 * IN ULONG ReceiveFlags);
1622 #if defined(_M_IX86) || defined(_M_AMD64)
1623 #define NdisCopyLookaheadData(Destination, Source, Length, MacOptions) \
1624 RtlCopyMemory(Destination, Source, Length)
1626 #define NdisCopyLookaheadData(Destination, Source, Length, MacOptions) \
1628 if ((MacOptions) & NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA) \
1630 RtlCopyMemory(_Destination, _Source, _Length); \
1634 PUCHAR _Src = (PUCHAR)(Source); \
1635 PUCHAR _Dest = (PUCHAR)(Destination); \
1636 PUCHAR _End = _Dest + (Length); \
1637 while (_Dest < _End) \
1638 *_Dest++ = *_Src++; \
1646 NdisDprAllocatePacket(
1647 OUT PNDIS_STATUS Status
,
1648 OUT PNDIS_PACKET
*Packet
,
1649 IN NDIS_HANDLE PoolHandle
);
1654 NdisDprAllocatePacketNonInterlocked(
1655 OUT PNDIS_STATUS Status
,
1656 OUT PNDIS_PACKET
*Packet
,
1657 IN NDIS_HANDLE PoolHandle
);
1663 IN PNDIS_PACKET Packet
);
1668 NdisDprFreePacketNonInterlocked(
1669 IN PNDIS_PACKET Packet
);
1675 IN NDIS_HANDLE PoolHandle
);
1681 IN PNDIS_PACKET Packet
);
1687 IN NDIS_HANDLE PoolHandle
);
1693 IN PNDIS_PACKET
*PacketsToReturn
,
1694 IN UINT NumberOfPackets
);
1699 NdisUnchainBufferAtBack(
1700 IN OUT PNDIS_PACKET Packet
,
1701 OUT PNDIS_BUFFER
*Buffer
);
1706 NdisUnchainBufferAtFront(
1707 IN OUT PNDIS_PACKET Packet
,
1708 OUT PNDIS_BUFFER
*Buffer
);
1713 NdisAdjustBufferLength(
1714 IN PNDIS_BUFFER Buffer
,
1721 IN PNDIS_BUFFER Buffer
);
1726 NdisBufferVirtualAddress(
1727 IN PNDIS_BUFFER Buffer
);
1732 NDIS_BUFFER_TO_SPAN_PAGES(
1733 IN PNDIS_BUFFER Buffer
);
1739 IN PNDIS_BUFFER Buffer
);
1744 NdisGetBufferPhysicalArraySize(
1745 IN PNDIS_BUFFER Buffer
,
1746 OUT PUINT ArraySize
);
1751 NdisGetFirstBufferFromPacket(
1752 IN PNDIS_PACKET _Packet
,
1753 OUT PNDIS_BUFFER
*_FirstBuffer
,
1754 OUT PVOID
*_FirstBufferVA
,
1755 OUT PUINT _FirstBufferLength
,
1756 OUT PUINT _TotalBufferLength
);
1762 IN PNDIS_BUFFER Buffer
,
1763 OUT PVOID
*VirtualAddress OPTIONAL
,
1769 NdisQueryBufferOffset(
1770 IN PNDIS_BUFFER Buffer
,
1776 * NDIS_BUFFER_LINKAGE(
1777 * IN PNDIS_BUFFER Buffer);
1779 #define NDIS_BUFFER_LINKAGE(Buffer)(Buffer)->Next;
1784 * NdisChainBufferAtBack(
1785 * IN OUT PNDIS_PACKET Packet,
1786 * IN OUT PNDIS_BUFFER Buffer)
1788 #define NdisChainBufferAtBack(Packet, \
1791 PNDIS_BUFFER NdisBuffer = (Buffer); \
1793 while (NdisBuffer->Next != NULL) \
1794 NdisBuffer = NdisBuffer->Next; \
1796 NdisBuffer->Next = NULL; \
1798 if ((Packet)->Private.Head != NULL) \
1799 (Packet)->Private.Tail->Next = (Buffer); \
1801 (Packet)->Private.Head = (Buffer); \
1803 (Packet)->Private.Tail = NdisBuffer; \
1804 (Packet)->Private.ValidCounts = FALSE; \
1810 * NdisChainBufferAtFront(
1811 * IN OUT PNDIS_PACKET Packet,
1812 * IN OUT PNDIS_BUFFER Buffer)
1814 #define NdisChainBufferAtFront(Packet, \
1817 PNDIS_BUFFER _NdisBuffer = (Buffer); \
1819 while (_NdisBuffer->Next != NULL) \
1820 _NdisBuffer = _NdisBuffer->Next; \
1822 if ((Packet)->Private.Head == NULL) \
1823 (Packet)->Private.Tail = _NdisBuffer; \
1825 _NdisBuffer->Next = (Packet)->Private.Head; \
1826 (Packet)->Private.Head = (Buffer); \
1827 (Packet)->Private.ValidCounts = FALSE; \
1833 * NdisGetNextBuffer(
1834 * IN PNDIS_BUFFER CurrentBuffer,
1835 * OUT PNDIS_BUFFER * NextBuffer)
1837 #define NdisGetNextBuffer(CurrentBuffer, \
1840 *(NextBuffer) = (CurrentBuffer)->Next; \
1846 * NdisGetPacketFlags(
1847 * IN PNDIS_PACKET Packet);
1849 #define NdisGetPacketFlags(Packet)(Packet)->Private.Flags;
1854 * NdisClearPacketFlags(
1855 * IN PNDIS_PACKET Packet,
1858 #define NdisClearPacketFlags(Packet, Flags) \
1859 (Packet)->Private.Flags &= ~(Flags)
1864 * NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(
1865 * IN PNDIS_PACKET Packet,
1866 * IN PPVOID pMediaSpecificInfo,
1867 * IN PUINT pSizeMediaSpecificInfo);
1869 #define NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \
1870 _pMediaSpecificInfo, \
1871 _pSizeMediaSpecificInfo) \
1873 if (!((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) || \
1874 !((_Packet)->Private.NdisPacketFlags & fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO)) \
1876 *(_pMediaSpecificInfo) = NULL; \
1877 *(_pSizeMediaSpecificInfo) = 0; \
1881 *(_pMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1882 (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation; \
1883 *(_pSizeMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1884 (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo; \
1891 * NDIS_GET_PACKET_PROTOCOL_TYPE(
1892 * IN PNDIS_PACKET Packet);
1894 #define NDIS_GET_PACKET_PROTOCOL_TYPE(_Packet) \
1895 ((_Packet)->Private.Flags & NDIS_PROTOCOL_ID_MASK)
1899 * NDIS_GET_PACKET_HEADER_SIZE(
1900 * IN PNDIS_PACKET Packet);
1902 #define NDIS_GET_PACKET_HEADER_SIZE(_Packet) \
1903 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1904 (_Packet)->Private.NdisPacketOobOffset))->HeaderSize
1909 * NDIS_GET_PACKET_STATUS(
1910 * IN PNDIS_PACKET Packet);
1912 #define NDIS_GET_PACKET_STATUS(_Packet) \
1913 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1914 (_Packet)->Private.NdisPacketOobOffset))->Status
1919 * NDIS_GET_PACKET_TIME_RECEIVED(
1920 * IN PNDIS_PACKET Packet);
1922 #define NDIS_GET_PACKET_TIME_RECEIVED(_Packet) \
1923 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1924 (_Packet)->Private.NdisPacketOobOffset))->TimeReceived
1929 * NDIS_GET_PACKET_TIME_SENT(
1930 * IN PNDIS_PACKET Packet);
1932 #define NDIS_GET_PACKET_TIME_SENT(_Packet) \
1933 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1934 (_Packet)->Private.NdisPacketOobOffset))->TimeSent
1939 * NDIS_GET_PACKET_TIME_TO_SEND(
1940 * IN PNDIS_PACKET Packet);
1942 #define NDIS_GET_PACKET_TIME_TO_SEND(_Packet) \
1943 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1944 (_Packet)->Private.NdisPacketOobOffset))->TimeToSend
1948 * PNDIS_PACKET_OOB_DATA
1949 * NDIS_OOB_DATA_FROM_PACKET(
1950 * IN PNDIS_PACKET Packet);
1952 #define NDIS_OOB_DATA_FROM_PACKET(_Packet) \
1953 (PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1954 (_Packet)->Private.NdisPacketOobOffset)
1960 * IN PNDIS_PACKET Packet,
1961 * OUT PUINT PhysicalBufferCount OPTIONAL,
1962 * OUT PUINT BufferCount OPTIONAL,
1963 * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
1964 * OUT PUINT TotalPacketLength OPTIONAL);
1969 IN PNDIS_PACKET Packet
,
1970 OUT PUINT PhysicalBufferCount OPTIONAL
,
1971 OUT PUINT BufferCount OPTIONAL
,
1972 OUT PNDIS_BUFFER
*FirstBuffer OPTIONAL
,
1973 OUT PUINT TotalPacketLength OPTIONAL
)
1976 *FirstBuffer
= Packet
->Private
.Head
;
1977 if (TotalPacketLength
|| BufferCount
|| PhysicalBufferCount
)
1979 if (!Packet
->Private
.ValidCounts
)
1983 PNDIS_BUFFER NdisBuffer
;
1984 UINT PhysicalBufferCount
= 0;
1985 UINT TotalPacketLength
= 0;
1988 for (NdisBuffer
= Packet
->Private
.Head
;
1989 NdisBuffer
!= (PNDIS_BUFFER
)NULL
;
1990 NdisBuffer
= NdisBuffer
->Next
)
1992 PhysicalBufferCount
+= NDIS_BUFFER_TO_SPAN_PAGES(NdisBuffer
);
1993 NdisQueryBufferOffset(NdisBuffer
, &Offset
, &PacketLength
);
1994 TotalPacketLength
+= PacketLength
;
1997 Packet
->Private
.PhysicalCount
= PhysicalBufferCount
;
1998 Packet
->Private
.TotalLength
= TotalPacketLength
;
1999 Packet
->Private
.Count
= Count
;
2000 Packet
->Private
.ValidCounts
= TRUE
;
2003 if (PhysicalBufferCount
)
2004 *PhysicalBufferCount
= Packet
->Private
.PhysicalCount
;
2007 *BufferCount
= Packet
->Private
.Count
;
2009 if (TotalPacketLength
)
2010 *TotalPacketLength
= Packet
->Private
.TotalLength
;
2016 * NdisQueryPacketLength(
2017 * IN PNDIS_PACKET Packet,
2018 * OUT PUINT PhysicalBufferCount OPTIONAL,
2019 * OUT PUINT BufferCount OPTIONAL,
2020 * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
2021 * OUT PUINT TotalPacketLength OPTIONAL);
2025 NdisQueryPacketLength(
2026 IN PNDIS_PACKET Packet
,
2027 OUT PUINT TotalPacketLength OPTIONAL
)
2029 if ((TotalPacketLength
)) \
2031 if (!(Packet
)->Private
.ValidCounts
) { \
2033 UINT _PacketLength
; \
2034 PNDIS_BUFFER _NdisBuffer
; \
2035 UINT _PhysicalBufferCount
= 0; \
2036 UINT _TotalPacketLength
= 0; \
2039 for (_NdisBuffer
= (Packet
)->Private
.Head
; \
2040 _NdisBuffer
!= (PNDIS_BUFFER
)NULL
; \
2041 _NdisBuffer
= _NdisBuffer
->Next
) \
2043 _PhysicalBufferCount
+= NDIS_BUFFER_TO_SPAN_PAGES(_NdisBuffer
); \
2044 NdisQueryBufferOffset(_NdisBuffer
, &_Offset
, &_PacketLength
); \
2045 _TotalPacketLength
+= _PacketLength
; \
2048 (Packet
)->Private
.PhysicalCount
= _PhysicalBufferCount
; \
2049 (Packet
)->Private
.TotalLength
= _TotalPacketLength
; \
2050 (Packet
)->Private
.Count
= _Count
; \
2051 (Packet
)->Private
.ValidCounts
= TRUE
; \
2054 if (TotalPacketLength
) \
2055 *((PUINT
)TotalPacketLength
) = (Packet
)->Private
.TotalLength
; \
2062 * NdisRecalculatePacketCounts(
2063 * IN OUT PNDIS_PACKET Packet);
2065 #define NdisRecalculatePacketCounts(Packet) \
2067 PNDIS_BUFFER _Buffer = (Packet)->Private.Head; \
2068 if (_Buffer != NULL) \
2070 while (_Buffer->Next != NULL) \
2072 _Buffer = _Buffer->Next; \
2074 (Packet)->Private.Tail = _Buffer; \
2076 (Packet)->Private.ValidCounts = FALSE; \
2082 * NdisReinitializePacket(
2083 * IN OUT PNDIS_PACKET Packet);
2085 #define NdisReinitializePacket(Packet) \
2087 (Packet)->Private.Head = (PNDIS_BUFFER)NULL; \
2088 (Packet)->Private.ValidCounts = FALSE; \
2094 * NdisSetPacketFlags(
2095 * IN PNDIS_PACKET Packet,
2098 #define NdisSetPacketFlags(Packet, Flags) \
2099 (Packet)->Private.Flags |= (Flags);
2104 * NDIS_SET_PACKET_HEADER_SIZE(
2105 * IN PNDIS_PACKET Packet,
2108 #define NDIS_SET_PACKET_HEADER_SIZE(_Packet, _HdrSize) \
2109 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2110 (_Packet)->Private.NdisPacketOobOffset))->HeaderSize = (_HdrSize)
2115 * NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(
2116 * IN PNDIS_PACKET Packet,
2117 * IN PVOID MediaSpecificInfo,
2118 * IN UINT SizeMediaSpecificInfo);
2120 #define NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \
2121 _MediaSpecificInfo, \
2122 _SizeMediaSpecificInfo) \
2124 if ((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) \
2126 (_Packet)->Private.NdisPacketFlags |= fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO; \
2127 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2128 (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation = \
2129 (_MediaSpecificInfo); \
2130 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2131 (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo = \
2132 (_SizeMediaSpecificInfo); \
2139 * NDIS_SET_PACKET_STATUS(
2140 * IN PNDIS_PACKET Packet,
2141 * IN NDIS_STATUS Status);
2143 #define NDIS_SET_PACKET_STATUS(_Packet, _Status) \
2144 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2145 (_Packet)->Private.NdisPacketOobOffset))->Status = (_Status)
2150 * NDIS_SET_PACKET_TIME_RECEIVED(
2151 * IN PNDIS_PACKET Packet,
2152 * IN ULONGLONG TimeReceived);
2154 #define NDIS_SET_PACKET_TIME_RECEIVED(_Packet, _TimeReceived) \
2155 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2156 (_Packet)->Private.NdisPacketOobOffset))->TimeReceived = (_TimeReceived)
2161 * NDIS_SET_PACKET_TIME_SENT(
2162 * IN PNDIS_PACKET Packet,
2163 * IN ULONGLONG TimeSent);
2165 #define NDIS_SET_PACKET_TIME_SENT(_Packet, _TimeSent) \
2166 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2167 (_Packet)->Private.NdisPacketOobOffset))->TimeSent = (_TimeSent)
2172 * NDIS_SET_PACKET_TIME_TO_SEND(
2173 * IN PNDIS_PACKET Packet,
2174 * IN ULONGLONG TimeToSend);
2176 #define NDIS_SET_PACKET_TIME_TO_SEND(_Packet, _TimeToSend) \
2177 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2178 (_Packet)->Private.NdisPacketOobOffset))->TimeToSend = (_TimeToSend)
2184 * IN PNDIS_PACKET Packet,
2187 #define NdisSetSendFlags(_Packet,_Flags)(_Packet)->Private.Flags = (_Flags)
2191 /* Memory management routines */
2196 NdisCreateLookaheadBufferFromSharedMemory(
2197 IN PVOID pSharedMemory
,
2198 IN UINT LookaheadLength
,
2199 OUT PVOID
*pLookaheadBuffer
);
2204 NdisDestroyLookaheadBufferFromSharedMemory(
2205 IN PVOID pLookaheadBuffer
);
2207 #if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_ARM) || defined(_M_PPC)
2211 * NdisMoveMappedMemory(
2212 * OUT PVOID Destination,
2216 #define NdisMoveMappedMemory(Destination, Source, Length) \
2217 RtlCopyMemory(Destination, Source, Length)
2221 * NdisZeroMappedMemory(
2222 * IN PVOID Destination,
2225 #define NdisZeroMappedMemory(Destination, Length) \
2226 RtlZeroMemory(Destination, Length)
2230 #define NdisMoveMappedMemory(Destination, Source, Length) \
2232 PUCHAR _Dest = Destination, _Src = Source, _End = _Dest + Length; \
2233 while (_Dest < _End) \
2234 *_Dest++ = _Src++; \
2237 #define NdisZeroMappedMemory(Destination, Length) \
2239 PUCHAR _Dest = Destination, _End = _Dest + Length; \
2240 while (_Dest < _End) \
2244 #endif /* _M_IX86 or _M_AMD64 */
2248 * NdisMoveFromMappedMemory(
2249 * OUT PVOID Destination,
2253 #define NdisMoveFromMappedMemory(Destination, Source, Length) \
2254 NdisMoveMappedMemory(Destination, Source, Length)
2258 * NdisMoveToMappedMemory(
2259 * OUT PVOID Destination,
2263 #define NdisMoveToMappedMemory(Destination, Source, Length) \
2264 NdisMoveMappedMemory(Destination, Source, Length)
2268 * NdisMUpdateSharedMemory(
2269 * IN NDIS_HANDLE MiniportAdapterHandle,
2271 * IN PVOID VirtualAddress,
2272 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2274 #define NdisMUpdateSharedMemory(_H, _L, _V, _P) \
2275 NdisUpdateSharedMemory(_H, _L, _V, _P)
2281 OUT PVOID
*VirtualAddress
,
2283 IN UINT MemoryFlags
,
2284 IN NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress
);
2290 IN PVOID VirtualAddress
,
2292 IN UINT MemoryFlags
);
2297 NdisImmediateReadSharedMemory(
2298 IN NDIS_HANDLE WrapperConfigurationContext
,
2299 IN ULONG SharedMemoryAddress
,
2306 NdisImmediateWriteSharedMemory(
2307 IN NDIS_HANDLE WrapperConfigurationContext
,
2308 IN ULONG SharedMemoryAddress
,
2315 NdisMAllocateSharedMemory(
2316 IN NDIS_HANDLE MiniportAdapterHandle
,
2319 OUT PVOID
*VirtualAddress
,
2320 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress
);
2325 NdisMAllocateSharedMemoryAsync(
2326 IN NDIS_HANDLE MiniportAdapterHandle
,
2333 #define NdisUpdateSharedMemory(NdisAdapterHandle, \
2343 NdisUpdateSharedMemory(
2344 IN NDIS_HANDLE NdisAdapterHandle
,
2346 IN PVOID VirtualAddress
,
2347 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress
);
2349 #endif /* defined(NDIS50) */
2353 * NdisGetPhysicalAddressHigh(
2354 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2356 #define NdisGetPhysicalAddressHigh(PhysicalAddress) \
2357 ((PhysicalAddress).HighPart)
2361 * NdisSetPhysicalAddressHigh(
2362 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
2365 #define NdisSetPhysicalAddressHigh(PhysicalAddress, Value) \
2366 ((PhysicalAddress).HighPart) = (Value)
2370 * NdisGetPhysicalAddressLow(
2371 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2373 #define NdisGetPhysicalAddressLow(PhysicalAddress) \
2374 ((PhysicalAddress).LowPart)
2379 * NdisSetPhysicalAddressLow(
2380 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
2383 #define NdisSetPhysicalAddressLow(PhysicalAddress, Value) \
2384 ((PhysicalAddress).LowPart) = (Value)
2388 * NDIS_PHYSICAL_ADDRESS_CONST(
2392 #define NDIS_PHYSICAL_ADDRESS_CONST(Low, High) \
2393 { {(ULONG)(Low), (LONG)(High)} }
2398 * IN CONST VOID *Source1,
2399 * IN CONST VOID *Source2,
2402 #define NdisEqualMemory(Source1, Source2, Length) \
2403 RtlEqualMemory(Source1, Source2, Length)
2408 * IN PVOID Destination,
2412 #define NdisFillMemory(Destination, Length, Fill) \
2413 RtlFillMemory(Destination, Length, Fill)
2418 * OUT PVOID Destination,
2422 #define NdisMoveMemory(Destination, Source, Length) \
2423 RtlCopyMemory(Destination, Source, Length)
2428 * NdisRetrieveUlong(
2429 * IN PULONG DestinationAddress,
2430 * IN PULONG SourceAddress);
2432 #define NdisRetrieveUlong(DestinationAddress, SourceAddress) \
2433 RtlRetrieveUlong(DestinationAddress, SourceAddress)
2439 * IN PULONG DestinationAddress,
2442 #define NdisStoreUlong(DestinationAddress, Value) \
2443 RtlStoreUlong(DestinationAddress, Value)
2449 * IN PVOID Destination,
2452 #define NdisZeroMemory(Destination, Length) \
2453 RtlZeroMemory(Destination, Length)
2456 (DDKAPI
*NDIS_BLOCK_INITIALIZER
) (
2458 IN SIZE_T NumberOfBytes
2461 /* Configuration routines */
2466 NdisOpenConfiguration(
2467 OUT PNDIS_STATUS Status
,
2468 OUT PNDIS_HANDLE ConfigurationHandle
,
2469 IN NDIS_HANDLE WrapperConfigurationContext
);
2474 NdisReadNetworkAddress(
2475 OUT PNDIS_STATUS Status
,
2476 OUT PVOID
*NetworkAddress
,
2477 OUT PUINT NetworkAddressLength
,
2478 IN NDIS_HANDLE ConfigurationHandle
);
2483 NdisReadEisaSlotInformation(
2484 OUT PNDIS_STATUS Status
,
2485 IN NDIS_HANDLE WrapperConfigurationContext
,
2486 OUT PUINT SlotNumber
,
2487 OUT PNDIS_EISA_FUNCTION_INFORMATION EisaData
);
2492 NdisReadEisaSlotInformationEx(
2493 OUT PNDIS_STATUS Status
,
2494 IN NDIS_HANDLE WrapperConfigurationContext
,
2495 OUT PUINT SlotNumber
,
2496 OUT PNDIS_EISA_FUNCTION_INFORMATION
*EisaData
,
2497 OUT PUINT NumberOfFunctions
);
2502 NdisReadPciSlotInformation(
2503 IN NDIS_HANDLE NdisAdapterHandle
,
2504 IN ULONG SlotNumber
,
2512 NdisWritePciSlotInformation(
2513 IN NDIS_HANDLE NdisAdapterHandle
,
2514 IN ULONG SlotNumber
,
2521 /* String management routines */
2526 NdisAnsiStringToUnicodeString(
2527 IN OUT PNDIS_STRING DestinationString
,
2528 IN PNDIS_ANSI_STRING SourceString
);
2533 * IN PNDIS_STRING String1,
2534 * IN PNDIS_STRING String2,
2535 * IN BOOLEAN CaseInsensitive);
2537 #define NdisEqualString(_String1, _String2, _CaseInsensitive) \
2538 RtlEqualUnicodeString(_String1, _String2, _CaseInsensitive)
2544 IN OUT PNDIS_ANSI_STRING DestinationString
,
2545 IN PCSTR SourceString
);
2550 NdisInitUnicodeString(
2551 IN OUT PNDIS_STRING DestinationString
,
2552 IN PCWSTR SourceString
);
2557 NdisUnicodeStringToAnsiString(
2558 IN OUT PNDIS_ANSI_STRING DestinationString
,
2559 IN PNDIS_STRING SourceString
);
2561 #define NdisFreeString(_s) NdisFreeMemory((_s).Buffer, (_s).MaximumLength, 0)
2562 #define NdisPrintString(_s) DbgPrint("%ls", (_s).Buffer)
2565 /* Spin lock reoutines */
2570 NdisAllocateSpinLock(
2571 IN PNDIS_SPIN_LOCK SpinLock
);
2577 IN PNDIS_SPIN_LOCK SpinLock
);
2582 NdisAcquireSpinLock(
2583 IN PNDIS_SPIN_LOCK SpinLock
);
2588 NdisReleaseSpinLock(
2589 IN PNDIS_SPIN_LOCK SpinLock
);
2594 NdisDprAcquireSpinLock(
2595 IN PNDIS_SPIN_LOCK SpinLock
);
2600 NdisDprReleaseSpinLock(
2601 IN PNDIS_SPIN_LOCK SpinLock
);
2607 * NdisRawReadPortBufferUchar(
2609 * OUT PUCHAR Buffer,
2612 #define NdisRawReadPortBufferUchar(Port, Buffer, Length) \
2613 READ_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
2617 * NdisRawReadPortBufferUlong(
2619 * OUT PULONG Buffer,
2622 #define NdisRawReadPortBufferUlong(Port, Buffer, Length) \
2623 READ_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
2627 * NdisRawReadPortBufferUshort(
2629 * OUT PUSHORT Buffer,
2632 #define NdisRawReadPortBufferUshort(Port, Buffer, Length) \
2633 READ_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
2638 * NdisRawReadPortUchar(
2642 #define NdisRawReadPortUchar(Port, Data) \
2643 *(Data) = READ_PORT_UCHAR((PUCHAR)(Port))
2647 * NdisRawReadPortUlong(
2651 #define NdisRawReadPortUlong(Port, Data) \
2652 *(Data) = READ_PORT_ULONG((PULONG)(Port))
2656 * NdisRawReadPortUshort(
2658 * OUT PUSHORT Data);
2660 #define NdisRawReadPortUshort(Port, Data) \
2661 *(Data) = READ_PORT_USHORT((PUSHORT)(Port))
2666 * NdisRawWritePortBufferUchar(
2671 #define NdisRawWritePortBufferUchar(Port, Buffer, Length) \
2672 WRITE_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
2676 * NdisRawWritePortBufferUlong(
2681 #define NdisRawWritePortBufferUlong(Port, Buffer, Length) \
2682 WRITE_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
2686 * NdisRawWritePortBufferUshort(
2688 * IN PUSHORT Buffer,
2691 #define NdisRawWritePortBufferUshort(Port, Buffer, Length) \
2692 WRITE_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
2697 * NdisRawWritePortUchar(
2701 #define NdisRawWritePortUchar(Port, Data) \
2702 WRITE_PORT_UCHAR((PUCHAR)(Port), (UCHAR)(Data))
2706 * NdisRawWritePortUlong(
2710 #define NdisRawWritePortUlong(Port, Data) \
2711 WRITE_PORT_ULONG((PULONG)(Port), (ULONG)(Data))
2715 * NdisRawWritePortUshort(
2719 #define NdisRawWritePortUshort(Port, Data) \
2720 WRITE_PORT_USHORT((PUSHORT)(Port), (USHORT)(Data))
2725 * NdisReadRegisterUchar(
2726 * IN PUCHAR Register,
2729 #define NdisReadRegisterUchar(Register, Data) \
2730 *(Data) = *(Register)
2734 * NdisReadRegisterUlong(
2735 * IN PULONG Register,
2738 #define NdisReadRegisterUlong(Register, Data) \
2739 *(Data) = *(Register)
2743 * NdisReadRegisterUshort(
2744 * IN PUSHORT Register,
2745 * OUT PUSHORT Data);
2747 #define NdisReadRegisterUshort(Register, Data) \
2748 *(Data) = *(Register)
2752 * NdisReadRegisterUchar(
2753 * IN PUCHAR Register,
2756 #define NdisWriteRegisterUchar(Register, Data) \
2757 WRITE_REGISTER_UCHAR((Register), (Data))
2761 * NdisReadRegisterUlong(
2762 * IN PULONG Register,
2765 #define NdisWriteRegisterUlong(Register, Data) \
2766 WRITE_REGISTER_ULONG((Register), (Data))
2770 * NdisReadRegisterUshort(
2771 * IN PUSHORT Register,
2774 #define NdisWriteRegisterUshort(Register, Data) \
2775 WRITE_REGISTER_USHORT((Register), (Data))
2782 * NdisInitializeListHead(
2783 * IN PLIST_ENTRY ListHead);
2785 #define NdisInitializeListHead(_ListHead) \
2786 InitializeListHead(_ListHead)
2790 * NdisInterlockedInsertHeadList(
2791 * IN PLIST_ENTRY ListHead,
2792 * IN PLIST_ENTRY ListEntry,
2793 * IN PNDIS_SPIN_LOCK SpinLock);
2795 #define NdisInterlockedInsertHeadList(_ListHead, _ListEntry, _SpinLock) \
2796 ExInterlockedInsertHeadList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
2800 * NdisInterlockedInsertTailList(
2801 * IN PLIST_ENTRY ListHead,
2802 * IN PLIST_ENTRY ListEntry,
2803 * IN PNDIS_SPIN_LOCK SpinLock);
2805 #define NdisInterlockedInsertTailList(_ListHead, _ListEntry, _SpinLock) \
2806 ExInterlockedInsertTailList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
2810 * NdisInterlockedRemoveHeadList(
2811 * IN PLIST_ENTRY ListHead,
2812 * IN PNDIS_SPIN_LOCK SpinLock);
2814 #define NdisInterlockedRemoveHeadList(_ListHead, _SpinLock) \
2815 ExInterlockedRemoveHeadList(_ListHead, &(_SpinLock)->SpinLock)
2819 * NdisInitializeSListHead(
2820 * IN PSLIST_HEADER SListHead);
2822 #define NdisInitializeSListHead(SListHead) ExInitializeSListHead(SListHead)
2825 * USHORT NdisQueryDepthSList(
2826 * IN PSLIST_HEADER SListHead);
2828 #define NdisQueryDepthSList(SListHead) ExQueryDepthSList(SListHead)
2832 /* Interlocked routines */
2836 * NdisInterlockedDecrement(
2839 #define NdisInterlockedDecrement(Addend) InterlockedDecrement(Addend)
2843 * NdisInterlockedIncrement(
2846 #define NdisInterlockedIncrement(Addend) InterlockedIncrement(Addend)
2850 * NdisInterlockedAddUlong(
2852 * IN ULONG Increment,
2853 * IN PNDIS_SPIN_LOCK SpinLock);
2855 #define NdisInterlockedAddUlong(_Addend, _Increment, _SpinLock) \
2856 ExInterlockedAddUlong(_Addend, _Increment, &(_SpinLock)->SpinLock)
2860 /* Miscellaneous routines */
2865 NdisCloseConfiguration(
2866 IN NDIS_HANDLE ConfigurationHandle
);
2871 NdisReadConfiguration(
2872 OUT PNDIS_STATUS Status
,
2873 OUT PNDIS_CONFIGURATION_PARAMETER
*ParameterValue
,
2874 IN NDIS_HANDLE ConfigurationHandle
,
2875 IN PNDIS_STRING Keyword
,
2876 IN NDIS_PARAMETER_TYPE ParameterType
);
2881 NdisWriteConfiguration(
2882 OUT PNDIS_STATUS Status
,
2883 IN NDIS_HANDLE WrapperConfigurationContext
,
2884 IN PNDIS_STRING Keyword
,
2885 IN PNDIS_CONFIGURATION_PARAMETER ParameterValue
);
2890 NdisWriteErrorLogEntry(
2891 IN NDIS_HANDLE NdisAdapterHandle
,
2892 IN NDIS_ERROR_CODE ErrorCode
,
2893 IN ULONG NumberOfErrorValues
,
2898 * NdisStallExecution(
2899 * IN UINT MicrosecondsToStall)
2901 #define NdisStallExecution KeStallExecutionProcessor
2906 NdisGetCurrentSystemTime(
2907 IN PLARGE_INTEGER pSystemTime
);
2912 NdisSystemProcessorCount(VOID
);
2917 NdisGetCurrentProcessorCpuUsage(
2918 OUT PULONG pCpuUsage
);
2922 /* NDIS helper macros */
2926 * NDIS_INIT_FUNCTION(FunctionName)
2928 #define NDIS_INIT_FUNCTION(FunctionName) \
2929 alloc_text(init, FunctionName)
2933 * NDIS_PAGABLE_FUNCTION(FunctionName)
2935 #define NDIS_PAGEABLE_FUNCTION(FunctionName) \
2936 alloc_text(page, FunctionName)
2938 #define NDIS_PAGABLE_FUNCTION NDIS_PAGEABLE_FUNCTION
2941 /* NDIS 4.0 extensions */
2946 NdisMFreeSharedMemory(
2947 IN NDIS_HANDLE MiniportAdapterHandle
,
2950 IN PVOID VirtualAddress
,
2951 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress
);
2956 NdisMWanIndicateReceive(
2957 OUT PNDIS_STATUS Status
,
2958 IN NDIS_HANDLE MiniportAdapterHandle
,
2959 IN NDIS_HANDLE NdisLinkContext
,
2960 IN PUCHAR PacketBuffer
,
2961 IN UINT PacketSize
);
2966 NdisMWanIndicateReceiveComplete(
2967 IN NDIS_HANDLE MiniportAdapterHandle
);
2972 NdisMWanSendComplete(
2973 IN NDIS_HANDLE MiniportAdapterHandle
,
2974 IN PNDIS_WAN_PACKET Packet
,
2975 IN NDIS_STATUS Status
);
2980 NdisPciAssignResources(
2981 IN NDIS_HANDLE NdisMacHandle
,
2982 IN NDIS_HANDLE NdisWrapperHandle
,
2983 IN NDIS_HANDLE WrapperConfigurationContext
,
2984 IN ULONG SlotNumber
,
2985 OUT PNDIS_RESOURCE_LIST
*AssignedResources
);
2988 /* NDIS 5.0 extensions */
2993 NdisAcquireReadWriteLock(
2994 IN PNDIS_RW_LOCK Lock
,
2996 IN PLOCK_STATE LockState
);
3001 NdisAllocateMemoryWithTag(
3002 OUT PVOID
*VirtualAddress
,
3009 NdisAllocatePacketPoolEx(
3010 OUT PNDIS_STATUS Status
,
3011 OUT PNDIS_HANDLE PoolHandle
,
3012 IN UINT NumberOfDescriptors
,
3013 IN UINT NumberOfOverflowDescriptors
,
3014 IN UINT ProtocolReservedLength
);
3019 NdisCompletePnPEvent(
3020 IN NDIS_STATUS Status
,
3021 IN NDIS_HANDLE NdisBindingHandle
,
3022 IN PNET_PNP_EVENT NetPnPEvent
);
3027 NdisGetCurrentProcessorCounts(
3028 OUT PULONG pIdleCount
,
3029 OUT PULONG pKernelAndUser
,
3035 NdisGetDriverHandle(
3036 IN PNDIS_HANDLE NdisBindingHandle
,
3037 OUT PNDIS_HANDLE NdisDriverHandle
);
3042 NdisGetReceivedPacket(
3043 IN PNDIS_HANDLE NdisBindingHandle
,
3044 IN PNDIS_HANDLE MacContext
);
3049 NdisGetSystemUpTime(
3050 OUT PULONG pSystemUpTime
);
3055 NdisInitializeReadWriteLock(
3056 IN PNDIS_RW_LOCK Lock
);
3061 NdisMDeregisterDevice(
3062 IN NDIS_HANDLE NdisDeviceHandle
);
3067 NdisMGetDeviceProperty(
3068 IN NDIS_HANDLE MiniportAdapterHandle
,
3069 IN OUT PDEVICE_OBJECT
*PhysicalDeviceObject OPTIONAL
,
3070 IN OUT PDEVICE_OBJECT
*FunctionalDeviceObject OPTIONAL
,
3071 IN OUT PDEVICE_OBJECT
*NextDeviceObject OPTIONAL
,
3072 IN OUT PCM_RESOURCE_LIST
*AllocatedResources OPTIONAL
,
3073 IN OUT PCM_RESOURCE_LIST
*AllocatedResourcesTranslated OPTIONAL
);
3078 NdisMInitializeScatterGatherDma(
3079 IN NDIS_HANDLE MiniportAdapterHandle
,
3080 IN BOOLEAN Dma64BitAddresses
,
3081 IN ULONG MaximumPhysicalMapping
);
3086 NdisMPromoteMiniport(
3087 IN NDIS_HANDLE MiniportAdapterHandle
);
3092 NdisMQueryAdapterInstanceName(
3093 OUT PNDIS_STRING AdapterInstanceName
,
3094 IN NDIS_HANDLE MiniportAdapterHandle
);
3099 NdisMRegisterDevice(
3100 IN NDIS_HANDLE NdisWrapperHandle
,
3101 IN PNDIS_STRING DeviceName
,
3102 IN PNDIS_STRING SymbolicName
,
3103 IN PDRIVER_DISPATCH MajorFunctions
[],
3104 OUT PDEVICE_OBJECT
*pDeviceObject
,
3105 OUT NDIS_HANDLE
*NdisDeviceHandle
);
3110 NdisMRegisterUnloadHandler(
3111 IN NDIS_HANDLE NdisWrapperHandle
,
3112 IN PDRIVER_UNLOAD UnloadHandler
);
3117 NdisMRemoveMiniport(
3118 IN NDIS_HANDLE MiniportAdapterHandle
);
3123 NdisMSetMiniportSecondary(
3124 IN NDIS_HANDLE MiniportAdapterHandle
,
3125 IN NDIS_HANDLE PrimaryMiniportAdapterHandle
);
3130 NdisOpenConfigurationKeyByIndex(
3131 OUT PNDIS_STATUS Status
,
3132 IN NDIS_HANDLE ConfigurationHandle
,
3134 OUT PNDIS_STRING KeyName
,
3135 OUT PNDIS_HANDLE KeyHandle
);
3140 NdisOpenConfigurationKeyByName(
3141 OUT PNDIS_STATUS Status
,
3142 IN NDIS_HANDLE ConfigurationHandle
,
3143 IN PNDIS_STRING SubKeyName
,
3144 OUT PNDIS_HANDLE SubKeyHandle
);
3149 NdisPacketPoolUsage(
3150 IN NDIS_HANDLE PoolHandle
);
3155 NdisQueryAdapterInstanceName(
3156 OUT PNDIS_STRING AdapterInstanceName
,
3157 IN NDIS_HANDLE NdisBindingHandle
);
3162 NdisReadPcmciaAttributeMemory(
3163 IN NDIS_HANDLE NdisAdapterHandle
,
3171 NdisReleaseReadWriteLock(
3172 IN PNDIS_RW_LOCK Lock
,
3173 IN PLOCK_STATE LockState
);
3178 NdisWriteEventLogEntry(
3180 IN NDIS_STATUS EventCode
,
3181 IN ULONG UniqueEventValue
,
3182 IN USHORT NumStrings
,
3183 IN PVOID StringsList OPTIONAL
,
3185 IN PVOID Data OPTIONAL
);
3190 NdisWritePcmciaAttributeMemory(
3191 IN NDIS_HANDLE NdisAdapterHandle
,
3197 /* Connectionless services */
3203 IN NDIS_HANDLE NdisVcHandle
,
3204 IN NDIS_HANDLE ProtocolPartyContext
,
3205 IN OUT PCO_CALL_PARAMETERS CallParameters
,
3206 OUT PNDIS_HANDLE NdisPartyHandle
);
3211 NdisClCloseAddressFamily(
3212 IN NDIS_HANDLE NdisAfHandle
);
3218 IN NDIS_HANDLE NdisVcHandle
,
3219 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
3220 IN PVOID Buffer OPTIONAL
,
3226 NdisClDeregisterSap(
3227 IN NDIS_HANDLE NdisSapHandle
);
3233 IN NDIS_HANDLE NdisPartyHandle
,
3234 IN PVOID Buffer OPTIONAL
,
3240 NdisClIncomingCallComplete(
3241 IN NDIS_STATUS Status
,
3242 IN NDIS_HANDLE NdisVcHandle
,
3243 IN PCO_CALL_PARAMETERS CallParameters
);
3249 IN NDIS_HANDLE NdisVcHandle
,
3250 IN OUT PCO_CALL_PARAMETERS CallParameters
,
3251 IN NDIS_HANDLE ProtocolPartyContext OPTIONAL
,
3252 OUT PNDIS_HANDLE NdisPartyHandle OPTIONAL
);
3257 NdisClModifyCallQoS(
3258 IN NDIS_HANDLE NdisVcHandle
,
3259 IN PCO_CALL_PARAMETERS CallParameters
);
3265 NdisClOpenAddressFamily(
3266 IN NDIS_HANDLE NdisBindingHandle
,
3267 IN PCO_ADDRESS_FAMILY AddressFamily
,
3268 IN NDIS_HANDLE ProtocolAfContext
,
3269 IN PNDIS_CLIENT_CHARACTERISTICS ClCharacteristics
,
3270 IN UINT SizeOfClCharacteristics
,
3271 OUT PNDIS_HANDLE NdisAfHandle
);
3277 IN NDIS_HANDLE NdisAfHandle
,
3278 IN NDIS_HANDLE ProtocolSapContext
,
3280 OUT PNDIS_HANDLE NdisSapHandle
);
3283 /* Call Manager services */
3289 IN NDIS_HANDLE NdisVcHandle
,
3290 IN OUT PCO_CALL_PARAMETERS CallParameters
);
3295 NdisCmAddPartyComplete(
3296 IN NDIS_STATUS Status
,
3297 IN NDIS_HANDLE NdisPartyHandle
,
3298 IN NDIS_HANDLE CallMgrPartyContext OPTIONAL
,
3299 IN PCO_CALL_PARAMETERS CallParameters
);
3304 NdisCmCloseAddressFamilyComplete(
3305 IN NDIS_STATUS Status
,
3306 IN NDIS_HANDLE NdisAfHandle
);
3311 NdisCmCloseCallComplete(
3312 IN NDIS_STATUS Status
,
3313 IN NDIS_HANDLE NdisVcHandle
,
3314 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
);
3320 IN NDIS_HANDLE NdisVcHandle
);
3325 NdisCmDeregisterSapComplete(
3326 IN NDIS_STATUS Status
,
3327 IN NDIS_HANDLE NdisSapHandle
);
3332 NdisCmDispatchCallConnected(
3333 IN NDIS_HANDLE NdisVcHandle
);
3338 NdisCmDispatchIncomingCall(
3339 IN NDIS_HANDLE NdisSapHandle
,
3340 IN NDIS_HANDLE NdisVcHandle
,
3341 IN PCO_CALL_PARAMETERS CallParameters
);
3346 NdisCmDispatchIncomingCallQoSChange(
3347 IN NDIS_HANDLE NdisVcHandle
,
3348 IN PCO_CALL_PARAMETERS CallParameters
);
3353 NdisCmDispatchIncomingCloseCall(
3354 IN NDIS_STATUS CloseStatus
,
3355 IN NDIS_HANDLE NdisVcHandle
,
3356 IN PVOID Buffer OPTIONAL
,
3362 NdisCmDispatchIncomingDropParty(
3363 IN NDIS_STATUS DropStatus
,
3364 IN NDIS_HANDLE NdisPartyHandle
,
3365 IN PVOID Buffer OPTIONAL
,
3371 NdisCmDropPartyComplete(
3372 IN NDIS_STATUS Status
,
3373 IN NDIS_HANDLE NdisPartyHandle
);
3378 NdisCmMakeCallComplete(
3379 IN NDIS_STATUS Status
,
3380 IN NDIS_HANDLE NdisVcHandle
,
3381 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
3382 IN NDIS_HANDLE CallMgrPartyContext OPTIONAL
,
3383 IN PCO_CALL_PARAMETERS CallParameters
);
3388 NdisCmModifyCallQoSComplete(
3389 IN NDIS_STATUS Status
,
3390 IN NDIS_HANDLE NdisVcHandle
,
3391 IN PCO_CALL_PARAMETERS CallParameters
);
3396 NdisCmOpenAddressFamilyComplete(
3397 IN NDIS_STATUS Status
,
3398 IN NDIS_HANDLE NdisAfHandle
,
3399 IN NDIS_HANDLE CallMgrAfContext
);
3404 NdisCmRegisterAddressFamily(
3405 IN NDIS_HANDLE NdisBindingHandle
,
3406 IN PCO_ADDRESS_FAMILY AddressFamily
,
3407 IN PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics
,
3408 IN UINT SizeOfCmCharacteristics
);
3413 NdisCmRegisterSapComplete(
3414 IN NDIS_STATUS Status
,
3415 IN NDIS_HANDLE NdisSapHandle
,
3416 IN NDIS_HANDLE CallMgrSapContext
);
3423 IN NDIS_HANDLE NdisVcHandle
,
3424 IN PCO_CALL_PARAMETERS CallParameters
);
3430 IN NDIS_HANDLE MiniportAdapterHandle
,
3431 IN NDIS_HANDLE NdisAfHandle
,
3432 IN NDIS_HANDLE MiniportVcContext
,
3433 OUT PNDIS_HANDLE NdisVcHandle
);
3438 NdisMCmDeactivateVc(
3439 IN NDIS_HANDLE NdisVcHandle
);
3445 IN NDIS_HANDLE NdisVcHandle
);
3450 NdisMCmRegisterAddressFamily(
3451 IN NDIS_HANDLE MiniportAdapterHandle
,
3452 IN PCO_ADDRESS_FAMILY AddressFamily
,
3453 IN PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics
,
3454 IN UINT SizeOfCmCharacteristics
);
3460 IN NDIS_HANDLE NdisAfHandle
,
3461 IN NDIS_HANDLE NdisVcHandle OPTIONAL
,
3462 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
3463 IN OUT PNDIS_REQUEST NdisRequest
);
3466 /* Connection-oriented services */
3472 IN NDIS_HANDLE NdisBindingHandle
,
3473 IN NDIS_HANDLE NdisAfHandle OPTIONAL
,
3474 IN NDIS_HANDLE ProtocolVcContext
,
3475 IN OUT PNDIS_HANDLE NdisVcHandle
);
3481 IN NDIS_HANDLE NdisVcHandle
);
3487 IN NDIS_HANDLE NdisBindingHandle
,
3488 IN NDIS_HANDLE NdisAfHandle OPTIONAL
,
3489 IN NDIS_HANDLE NdisVcHandle OPTIONAL
,
3490 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
3491 IN OUT PNDIS_REQUEST NdisRequest
);
3496 NdisCoRequestComplete(
3497 IN NDIS_STATUS Status
,
3498 IN NDIS_HANDLE NdisAfHandle
,
3499 IN NDIS_HANDLE NdisVcHandle OPTIONAL
,
3500 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
3501 IN PNDIS_REQUEST NdisRequest
);
3507 IN NDIS_HANDLE NdisVcHandle
,
3508 IN PPNDIS_PACKET PacketArray
,
3509 IN UINT NumberOfPackets
);
3514 NdisMCoActivateVcComplete(
3515 IN NDIS_STATUS Status
,
3516 IN NDIS_HANDLE NdisVcHandle
,
3517 IN PCO_CALL_PARAMETERS CallParameters
);
3522 NdisMCoDeactivateVcComplete(
3523 IN NDIS_STATUS Status
,
3524 IN NDIS_HANDLE NdisVcHandle
);
3529 NdisMCoIndicateReceivePacket(
3530 IN NDIS_HANDLE NdisVcHandle
,
3531 IN PPNDIS_PACKET PacketArray
,
3532 IN UINT NumberOfPackets
);
3537 NdisMCoIndicateStatus(
3538 IN NDIS_HANDLE MiniportAdapterHandle
,
3539 IN NDIS_HANDLE NdisVcHandle OPTIONAL
,
3540 IN NDIS_STATUS GeneralStatus
,
3541 IN PVOID StatusBuffer OPTIONAL
,
3542 IN ULONG StatusBufferSize
);
3547 NdisMCoReceiveComplete(
3548 IN NDIS_HANDLE MiniportAdapterHandle
);
3553 NdisMCoRequestComplete(
3554 IN NDIS_STATUS Status
,
3555 IN NDIS_HANDLE MiniportAdapterHandle
,
3556 IN PNDIS_REQUEST Request
);
3561 NdisMCoSendComplete(
3562 IN NDIS_STATUS Status
,
3563 IN NDIS_HANDLE NdisVcHandle
,
3564 IN PNDIS_PACKET Packet
);
3567 /* NDIS 5.0 extensions for intermediate drivers */
3572 NdisIMAssociateMiniport(
3573 IN NDIS_HANDLE DriverHandle
,
3574 IN NDIS_HANDLE ProtocolHandle
);
3579 NdisIMCancelInitializeDeviceInstance(
3580 IN NDIS_HANDLE DriverHandle
,
3581 IN PNDIS_STRING DeviceInstance
);
3586 NdisIMCopySendCompletePerPacketInfo(
3587 IN PNDIS_PACKET DstPacket
,
3588 IN PNDIS_PACKET SrcPacket
);
3593 NdisIMCopySendPerPacketInfo(
3594 IN PNDIS_PACKET DstPacket
,
3595 IN PNDIS_PACKET SrcPacket
);
3600 NdisIMDeregisterLayeredMiniport(
3601 IN NDIS_HANDLE DriverHandle
);
3606 NdisIMGetBindingContext(
3607 IN NDIS_HANDLE NdisBindingHandle
);
3612 NdisIMGetDeviceContext(
3613 IN NDIS_HANDLE MiniportAdapterHandle
);
3618 NdisIMInitializeDeviceInstanceEx(
3619 IN NDIS_HANDLE DriverHandle
,
3620 IN PNDIS_STRING DriverInstance
,
3621 IN NDIS_HANDLE DeviceContext OPTIONAL
);
3626 NdisInterlockedPopEntrySList(
3627 IN PSLIST_HEADER ListHead
,
3628 IN PKSPIN_LOCK Lock
);
3633 NdisInterlockedPushEntrySList(
3634 IN PSLIST_HEADER ListHead
,
3635 IN PSINGLE_LIST_ENTRY ListEntry
,
3636 IN PKSPIN_LOCK Lock
);
3641 NdisQueryBufferSafe(
3642 IN PNDIS_BUFFER Buffer
,
3643 OUT PVOID
*VirtualAddress OPTIONAL
,
3647 /* Prototypes for NDIS_MINIPORT_CHARACTERISTICS */
3650 (DDKAPI
*W_CHECK_FOR_HANG_HANDLER
)(
3651 IN NDIS_HANDLE MiniportAdapterContext
);
3654 (DDKAPI
*W_DISABLE_INTERRUPT_HANDLER
)(
3655 IN NDIS_HANDLE MiniportAdapterContext
);
3658 (DDKAPI
*W_ENABLE_INTERRUPT_HANDLER
)(
3659 IN NDIS_HANDLE MiniportAdapterContext
);
3662 (DDKAPI
*W_HALT_HANDLER
)(
3663 IN NDIS_HANDLE MiniportAdapterContext
);
3666 (DDKAPI
*W_HANDLE_INTERRUPT_HANDLER
)(
3667 IN NDIS_HANDLE MiniportAdapterContext
);
3670 (DDKAPI
*W_INITIALIZE_HANDLER
)(
3671 OUT PNDIS_STATUS OpenErrorStatus
,
3672 OUT PUINT SelectedMediumIndex
,
3673 IN PNDIS_MEDIUM MediumArray
,
3674 IN UINT MediumArraySize
,
3675 IN NDIS_HANDLE MiniportAdapterContext
,
3676 IN NDIS_HANDLE WrapperConfigurationContext
);
3679 (DDKAPI
*W_ISR_HANDLER
)(
3680 OUT PBOOLEAN InterruptRecognized
,
3681 OUT PBOOLEAN QueueMiniportHandleInterrupt
,
3682 IN NDIS_HANDLE MiniportAdapterContext
);
3685 (DDKAPI
*W_QUERY_INFORMATION_HANDLER
)(
3686 IN NDIS_HANDLE MiniportAdapterContext
,
3688 IN PVOID InformationBuffer
,
3689 IN ULONG InformationBufferLength
,
3690 OUT PULONG BytesWritten
,
3691 OUT PULONG BytesNeeded
);
3694 (DDKAPI
*W_RECONFIGURE_HANDLER
)(
3695 OUT PNDIS_STATUS OpenErrorStatus
,
3696 IN NDIS_HANDLE MiniportAdapterContext
,
3697 IN NDIS_HANDLE WrapperConfigurationContext
);
3700 (DDKAPI
*W_RESET_HANDLER
)(
3701 OUT PBOOLEAN AddressingReset
,
3702 IN NDIS_HANDLE MiniportAdapterContext
);
3705 (DDKAPI
*W_SEND_HANDLER
)(
3706 IN NDIS_HANDLE MiniportAdapterContext
,
3707 IN PNDIS_PACKET Packet
,
3711 (DDKAPI
*WM_SEND_HANDLER
)(
3712 IN NDIS_HANDLE MiniportAdapterContext
,
3713 IN NDIS_HANDLE NdisLinkHandle
,
3714 IN PNDIS_WAN_PACKET Packet
);
3717 (DDKAPI
*W_SET_INFORMATION_HANDLER
)(
3718 IN NDIS_HANDLE MiniportAdapterContext
,
3720 IN PVOID InformationBuffer
,
3721 IN ULONG InformationBufferLength
,
3722 OUT PULONG BytesRead
,
3723 OUT PULONG BytesNeeded
);
3726 (DDKAPI
*W_TRANSFER_DATA_HANDLER
)(
3727 OUT PNDIS_PACKET Packet
,
3728 OUT PUINT BytesTransferred
,
3729 IN NDIS_HANDLE MiniportAdapterContext
,
3730 IN NDIS_HANDLE MiniportReceiveContext
,
3732 IN UINT BytesToTransfer
);
3735 (DDKAPI
*WM_TRANSFER_DATA_HANDLER
)(
3739 /* NDIS structures available only to miniport drivers */
3741 #define NDIS30_MINIPORT_CHARACTERISTICS_S \
3742 UCHAR MajorNdisVersion; \
3743 UCHAR MinorNdisVersion; \
3745 W_CHECK_FOR_HANG_HANDLER CheckForHangHandler; \
3746 W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler; \
3747 W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler; \
3748 W_HALT_HANDLER HaltHandler; \
3749 W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler; \
3750 W_INITIALIZE_HANDLER InitializeHandler; \
3751 W_ISR_HANDLER ISRHandler; \
3752 W_QUERY_INFORMATION_HANDLER QueryInformationHandler; \
3753 W_RECONFIGURE_HANDLER ReconfigureHandler; \
3754 W_RESET_HANDLER ResetHandler; \
3755 W_SEND_HANDLER SendHandler; \
3756 W_SET_INFORMATION_HANDLER SetInformationHandler; \
3757 W_TRANSFER_DATA_HANDLER TransferDataHandler;
3759 typedef struct _NDIS30_MINIPORT_CHARACTERISTICS
{
3760 NDIS30_MINIPORT_CHARACTERISTICS_S
3761 } NDIS30_MINIPORT_CHARACTERISTICS
, *PSNDIS30_MINIPORT_CHARACTERISTICS
;
3764 /* Extensions for NDIS 4.0 miniports */
3767 (DDKAPI
*W_SEND_PACKETS_HANDLER
)(
3768 IN NDIS_HANDLE MiniportAdapterContext
,
3769 IN PPNDIS_PACKET PacketArray
,
3770 IN UINT NumberOfPackets
);
3773 (DDKAPI
*W_RETURN_PACKET_HANDLER
)(
3774 IN NDIS_HANDLE MiniportAdapterContext
,
3775 IN PNDIS_PACKET Packet
);
3778 (DDKAPI
*W_ALLOCATE_COMPLETE_HANDLER
)(
3779 IN NDIS_HANDLE MiniportAdapterContext
,
3780 IN PVOID VirtualAddress
,
3781 IN PNDIS_PHYSICAL_ADDRESS PhysicalAddress
,
3787 #define NDIS40_MINIPORT_CHARACTERISTICS_S \
3788 NDIS30_MINIPORT_CHARACTERISTICS Ndis30Chars; \
3789 W_RETURN_PACKET_HANDLER ReturnPacketHandler; \
3790 W_SEND_PACKETS_HANDLER SendPacketsHandler; \
3791 W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
3793 #else /* !__cplusplus */
3795 #define NDIS40_MINIPORT_CHARACTERISTICS_S \
3796 NDIS30_MINIPORT_CHARACTERISTICS_S \
3797 W_RETURN_PACKET_HANDLER ReturnPacketHandler; \
3798 W_SEND_PACKETS_HANDLER SendPacketsHandler; \
3799 W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
3801 #endif /* !__cplusplus */
3803 typedef struct _NDIS40_MINIPORT_CHARACTERISTICS
{
3804 NDIS40_MINIPORT_CHARACTERISTICS_S
3805 } NDIS40_MINIPORT_CHARACTERISTICS
, *PNDIS40_MINIPORT_CHARACTERISTICS
;
3808 /* Extensions for NDIS 5.0 miniports */
3811 (DDKAPI
*W_CO_CREATE_VC_HANDLER
)(
3812 IN NDIS_HANDLE MiniportAdapterContext
,
3813 IN NDIS_HANDLE NdisVcHandle
,
3814 OUT PNDIS_HANDLE MiniportVcContext
);
3817 (DDKAPI
*W_CO_DELETE_VC_HANDLER
)(
3818 IN NDIS_HANDLE MiniportVcContext
);
3821 (DDKAPI
*W_CO_ACTIVATE_VC_HANDLER
)(
3822 IN NDIS_HANDLE MiniportVcContext
,
3823 IN OUT PCO_CALL_PARAMETERS CallParameters
);
3826 (DDKAPI
*W_CO_DEACTIVATE_VC_HANDLER
)(
3827 IN NDIS_HANDLE MiniportVcContext
);
3830 (DDKAPI
*W_CO_SEND_PACKETS_HANDLER
)(
3831 IN NDIS_HANDLE MiniportVcContext
,
3832 IN PPNDIS_PACKET PacketArray
,
3833 IN UINT NumberOfPackets
);
3836 (DDKAPI
*W_CO_REQUEST_HANDLER
)(
3837 IN NDIS_HANDLE MiniportAdapterContext
,
3838 IN NDIS_HANDLE MiniportVcContext OPTIONAL
,
3839 IN OUT PNDIS_REQUEST NdisRequest
);
3843 #define NDIS50_MINIPORT_CHARACTERISTICS_S \
3844 NDIS40_MINIPORT_CHARACTERISTICS Ndis40Chars; \
3845 W_CO_CREATE_VC_HANDLER CoCreateVcHandler; \
3846 W_CO_DELETE_VC_HANDLER CoDeleteVcHandler; \
3847 W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler; \
3848 W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler; \
3849 W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler; \
3850 W_CO_REQUEST_HANDLER CoRequestHandler;
3852 #else /* !__cplusplus */
3854 #define NDIS50_MINIPORT_CHARACTERISTICS_S \
3855 NDIS40_MINIPORT_CHARACTERISTICS_S \
3856 W_CO_CREATE_VC_HANDLER CoCreateVcHandler; \
3857 W_CO_DELETE_VC_HANDLER CoDeleteVcHandler; \
3858 W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler; \
3859 W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler; \
3860 W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler; \
3861 W_CO_REQUEST_HANDLER CoRequestHandler;
3863 #endif /* !__cplusplus */
3865 typedef struct _NDIS50_MINIPORT_CHARACTERISTICS
{
3866 NDIS50_MINIPORT_CHARACTERISTICS_S
3867 } NDIS50_MINIPORT_CHARACTERISTICS
, *PSNDIS50_MINIPORT_CHARACTERISTICS
;
3870 /* Extensions for NDIS 5.1 miniports */
3873 (DDKAPI
*W_CANCEL_SEND_PACKETS_HANDLER
)(
3874 IN NDIS_HANDLE MiniportAdapterContext
,
3878 (DDKAPI
*W_PNP_EVENT_NOTIFY_HANDLER
)(
3879 IN NDIS_HANDLE MiniportAdapterContext
,
3880 IN NDIS_DEVICE_PNP_EVENT PnPEvent
,
3881 IN PVOID InformationBuffer
,
3882 IN ULONG InformationBufferLength
);
3885 (DDKAPI
*W_MINIPORT_SHUTDOWN_HANDLER
)(
3886 IN PVOID ShutdownContext
);
3890 #define NDIS51_MINIPORT_CHARACTERISTICS_S \
3891 NDIS50_MINIPORT_CHARACTERISTICS Ndis50Chars; \
3892 W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler; \
3893 W_PNP_EVENT_NOTIFY_HANDLER PnPEventNotifyHandler; \
3894 W_MINIPORT_SHUTDOWN_HANDLER AdapterShutdownHandler;
3898 #define NDIS51_MINIPORT_CHARACTERISTICS_S \
3899 NDIS50_MINIPORT_CHARACTERISTICS_S \
3900 W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler; \
3901 W_PNP_EVENT_NOTIFY_HANDLER PnPEventNotifyHandler; \
3902 W_MINIPORT_SHUTDOWN_HANDLER AdapterShutdownHandler;
3906 typedef struct _NDIS51_MINIPORT_CHARACTERISTICS
{
3907 NDIS51_MINIPORT_CHARACTERISTICS_S
3908 } NDIS51_MINIPORT_CHARACTERISTICS
, *PSNDIS51_MINIPORT_CHARACTERISTICS
;
3910 #if defined(NDIS51_MINIPORT)
3911 typedef struct _NDIS_MINIPORT_CHARACTERISTICS
{
3912 NDIS51_MINIPORT_CHARACTERISTICS_S
3913 } NDIS_MINIPORT_CHARACTERISTICS
, *PNDIS_MINIPORT_CHARACTERISTICS
;
3914 #elif defined(NDIS50_MINIPORT)
3915 typedef struct _NDIS_MINIPORT_CHARACTERISTICS
{
3916 NDIS50_MINIPORT_CHARACTERISTICS_S
3917 } NDIS_MINIPORT_CHARACTERISTICS
, *PNDIS_MINIPORT_CHARACTERISTICS
;
3918 #elif defined(NDIS40_MINIPORT)
3919 typedef struct _NDIS_MINIPORT_CHARACTERISTICS
{
3920 NDIS40_MINIPORT_CHARACTERISTICS_S
3921 } NDIS_MINIPORT_CHARACTERISTICS
, *PNDIS_MINIPORT_CHARACTERISTICS
;
3923 typedef struct _NDIS_MINIPORT_CHARACTERISTICS
{
3924 NDIS30_MINIPORT_CHARACTERISTICS_S
3925 } NDIS_MINIPORT_CHARACTERISTICS
, *PNDIS_MINIPORT_CHARACTERISTICS
;
3930 (DDKAPI
*SEND_HANDLER
)(
3931 IN NDIS_HANDLE MacBindingHandle
,
3932 IN PNDIS_PACKET Packet
);
3935 (DDKAPI
*TRANSFER_DATA_HANDLER
)(
3936 IN NDIS_HANDLE MacBindingHandle
,
3937 IN NDIS_HANDLE MacReceiveContext
,
3939 IN UINT BytesToTransfer
,
3940 OUT PNDIS_PACKET Packet
,
3941 OUT PUINT BytesTransferred
);
3944 (DDKAPI
*RESET_HANDLER
)(
3945 IN NDIS_HANDLE MacBindingHandle
);
3948 (DDKAPI
*REQUEST_HANDLER
)(
3949 IN NDIS_HANDLE MacBindingHandle
,
3950 IN PNDIS_REQUEST NdisRequest
);
3954 /* Structures available only to full MAC drivers */
3957 (DDKAPI
*PNDIS_INTERRUPT_SERVICE
)(
3958 IN PVOID InterruptContext
);
3961 (DDKAPI
*PNDIS_DEFERRED_PROCESSING
)(
3962 IN PVOID SystemSpecific1
,
3963 IN PVOID InterruptContext
,
3964 IN PVOID SystemSpecific2
,
3965 IN PVOID SystemSpecific3
);
3969 typedef struct _NDIS_MINIPORT_BLOCK NDIS_MINIPORT_BLOCK
, *PNDIS_MINIPORT_BLOCK
;
3970 typedef struct _NDIS_PROTOCOL_BLOCK NDIS_PROTOCOL_BLOCK
, *PNDIS_PROTOCOL_BLOCK
;
3971 typedef struct _NDIS_OPEN_BLOCK NDIS_OPEN_BLOCK
, *PNDIS_OPEN_BLOCK
;
3972 typedef struct _NDIS_M_DRIVER_BLOCK NDIS_M_DRIVER_BLOCK
, *PNDIS_M_DRIVER_BLOCK
;
3973 typedef struct _NDIS_AF_LIST NDIS_AF_LIST
, *PNDIS_AF_LIST
;
3976 // FIXME: Should be typedef struct _X_FILTER ETH_FILTER, *PETH_FILTER;
3978 typedef PVOID ETH_FILTER
, *PETH_FILTER
;
3981 typedef struct _NDIS_MINIPORT_INTERRUPT
{
3982 PKINTERRUPT InterruptObject
;
3983 KSPIN_LOCK DpcCountLock
;
3984 PVOID MiniportIdField
;
3985 W_ISR_HANDLER MiniportIsr
;
3986 W_HANDLE_INTERRUPT_HANDLER MiniportDpc
;
3988 PNDIS_MINIPORT_BLOCK Miniport
;
3991 KEVENT DpcsCompletedEvent
;
3992 BOOLEAN SharedInterrupt
;
3993 BOOLEAN IsrRequested
;
3994 } NDIS_MINIPORT_INTERRUPT
, *PNDIS_MINIPORT_INTERRUPT
;
3996 typedef struct _NDIS_MINIPORT_TIMER
{
3999 PNDIS_TIMER_FUNCTION MiniportTimerFunction
;
4000 PVOID MiniportTimerContext
;
4001 PNDIS_MINIPORT_BLOCK Miniport
;
4002 struct _NDIS_MINIPORT_TIMER
*NextDeferredTimer
;
4003 } NDIS_MINIPORT_TIMER
, *PNDIS_MINIPORT_TIMER
;
4005 typedef struct _NDIS_INTERRUPT
{
4006 PKINTERRUPT InterruptObject
;
4007 KSPIN_LOCK DpcCountLock
;
4008 PNDIS_INTERRUPT_SERVICE MacIsr
;
4009 PNDIS_DEFERRED_PROCESSING MacDpc
;
4011 PVOID InterruptContext
;
4014 KEVENT DpcsCompletedEvent
;
4015 } NDIS_INTERRUPT
, *PNDIS_INTERRUPT
;
4018 typedef enum _NDIS_WORK_ITEM_TYPE
{
4019 NdisWorkItemRequest
,
4021 NdisWorkItemReturnPackets
,
4022 NdisWorkItemResetRequested
,
4023 NdisWorkItemResetInProgress
,
4025 NdisWorkItemSendLoopback
,
4026 NdisWorkItemMiniportCallback
,
4028 } NDIS_WORK_ITEM_TYPE
, *PNDIS_WORK_ITEM_TYPE
;
4030 #define NUMBER_OF_WORK_ITEM_TYPES NdisMaxWorkItems
4031 #define NUMBER_OF_SINGLE_WORK_ITEMS 6
4033 typedef struct _NDIS_MINIPORT_WORK_ITEM
{
4034 SINGLE_LIST_ENTRY Link
;
4035 NDIS_WORK_ITEM_TYPE WorkItemType
;
4036 PVOID WorkItemContext
;
4037 } NDIS_MINIPORT_WORK_ITEM
, *PNDIS_MINIPORT_WORK_ITEM
;
4039 struct _NDIS_WORK_ITEM
;
4040 typedef VOID (*NDIS_PROC
)(struct _NDIS_WORK_ITEM
*, PVOID
);
4041 typedef struct _NDIS_WORK_ITEM
4045 UCHAR WrapperReserved
[8*sizeof(PVOID
)];
4046 } NDIS_WORK_ITEM
, *PNDIS_WORK_ITEM
;
4048 typedef struct _NDIS_BIND_PATHS
{
4050 NDIS_STRING Paths
[1];
4051 } NDIS_BIND_PATHS
, *PNDIS_BIND_PATHS
;
4055 (DDKAPI
*ETH_RCV_COMPLETE_HANDLER
)(
4056 IN PETH_FILTER Filter
);
4059 (DDKAPI
*ETH_RCV_INDICATE_HANDLER
)(
4060 IN PETH_FILTER Filter
,
4061 IN NDIS_HANDLE MacReceiveContext
,
4063 IN PVOID HeaderBuffer
,
4064 IN UINT HeaderBufferSize
,
4065 IN PVOID LookaheadBuffer
,
4066 IN UINT LookaheadBufferSize
,
4067 IN UINT PacketSize
);
4070 (DDKAPI
*FDDI_RCV_COMPLETE_HANDLER
)(
4071 IN PFDDI_FILTER Filter
);
4074 (DDKAPI
*FDDI_RCV_INDICATE_HANDLER
)(
4075 IN PFDDI_FILTER Filter
,
4076 IN NDIS_HANDLE MacReceiveContext
,
4078 IN UINT AddressLength
,
4079 IN PVOID HeaderBuffer
,
4080 IN UINT HeaderBufferSize
,
4081 IN PVOID LookaheadBuffer
,
4082 IN UINT LookaheadBufferSize
,
4083 IN UINT PacketSize
);
4086 (DDKAPI
*FILTER_PACKET_INDICATION_HANDLER
)(
4087 IN NDIS_HANDLE Miniport
,
4088 IN PPNDIS_PACKET PacketArray
,
4089 IN UINT NumberOfPackets
);
4092 (DDKAPI
*TR_RCV_COMPLETE_HANDLER
)(
4093 IN PTR_FILTER Filter
);
4096 (DDKAPI
*TR_RCV_INDICATE_HANDLER
)(
4097 IN PTR_FILTER Filter
,
4098 IN NDIS_HANDLE MacReceiveContext
,
4099 IN PVOID HeaderBuffer
,
4100 IN UINT HeaderBufferSize
,
4101 IN PVOID LookaheadBuffer
,
4102 IN UINT LookaheadBufferSize
,
4103 IN UINT PacketSize
);
4106 (DDKAPI
*WAN_RCV_COMPLETE_HANDLER
)(
4107 IN NDIS_HANDLE MiniportAdapterHandle
,
4108 IN NDIS_HANDLE NdisLinkContext
);
4111 (DDKAPI
*WAN_RCV_HANDLER
)(
4112 OUT PNDIS_STATUS Status
,
4113 IN NDIS_HANDLE MiniportAdapterHandle
,
4114 IN NDIS_HANDLE NdisLinkContext
,
4116 IN ULONG PacketSize
);
4119 (FASTCALL
*NDIS_M_DEQUEUE_WORK_ITEM
)(
4120 IN PNDIS_MINIPORT_BLOCK Miniport
,
4121 IN NDIS_WORK_ITEM_TYPE WorkItemType
,
4122 OUT PVOID
*WorkItemContext
);
4125 (FASTCALL
*NDIS_M_QUEUE_NEW_WORK_ITEM
)(
4126 IN PNDIS_MINIPORT_BLOCK Miniport
,
4127 IN NDIS_WORK_ITEM_TYPE WorkItemType
,
4128 IN PVOID WorkItemContext
);
4131 (FASTCALL
*NDIS_M_QUEUE_WORK_ITEM
)(
4132 IN PNDIS_MINIPORT_BLOCK Miniport
,
4133 IN NDIS_WORK_ITEM_TYPE WorkItemType
,
4134 IN PVOID WorkItemContext
);
4137 (DDKAPI
*NDIS_M_REQ_COMPLETE_HANDLER
)(
4138 IN NDIS_HANDLE MiniportAdapterHandle
,
4139 IN NDIS_STATUS Status
);
4142 (DDKAPI
*NDIS_M_RESET_COMPLETE_HANDLER
)(
4143 IN NDIS_HANDLE MiniportAdapterHandle
,
4144 IN NDIS_STATUS Status
,
4145 IN BOOLEAN AddressingReset
);
4148 (DDKAPI
*NDIS_M_SEND_COMPLETE_HANDLER
)(
4149 IN NDIS_HANDLE MiniportAdapterHandle
,
4150 IN PNDIS_PACKET Packet
,
4151 IN NDIS_STATUS Status
);
4154 (DDKAPI
*NDIS_M_SEND_RESOURCES_HANDLER
)(
4155 IN NDIS_HANDLE MiniportAdapterHandle
);
4158 (FASTCALL
*NDIS_M_START_SENDS
)(
4159 IN PNDIS_MINIPORT_BLOCK Miniport
);
4162 (DDKAPI
*NDIS_M_STATUS_HANDLER
)(
4163 IN NDIS_HANDLE MiniportHandle
,
4164 IN NDIS_STATUS GeneralStatus
,
4165 IN PVOID StatusBuffer
,
4166 IN UINT StatusBufferSize
);
4169 (DDKAPI
*NDIS_M_STS_COMPLETE_HANDLER
)(
4170 IN NDIS_HANDLE MiniportAdapterHandle
);
4173 (DDKAPI
*NDIS_M_TD_COMPLETE_HANDLER
)(
4174 IN NDIS_HANDLE MiniportAdapterHandle
,
4175 IN PNDIS_PACKET Packet
,
4176 IN NDIS_STATUS Status
,
4177 IN UINT BytesTransferred
);
4179 typedef VOID (DDKAPI
*NDIS_WM_SEND_COMPLETE_HANDLER
)(
4180 IN NDIS_HANDLE MiniportAdapterHandle
,
4182 IN NDIS_STATUS Status
);
4187 #define ARC_SEND_BUFFERS 8
4188 #define ARC_HEADER_SIZE 4
4190 typedef struct _NDIS_ARC_BUF
{
4191 NDIS_HANDLE ArcnetBufferPool
;
4192 PUCHAR ArcnetLookaheadBuffer
;
4194 ARC_BUFFER_LIST ArcnetBuffers
[ARC_SEND_BUFFERS
];
4195 } NDIS_ARC_BUF
, *PNDIS_ARC_BUF
;
4199 typedef struct _NDIS_LOG
{
4200 PNDIS_MINIPORT_BLOCK Miniport
;
4208 } NDIS_LOG
, *PNDIS_LOG
;
4211 #define FILTERDBS_ARCNET_S \
4214 #define FILTERDBS_ARCNET_S \
4216 #endif /* !ARCNET */
4218 #define FILTERDBS_S \
4219 _ANONYMOUS_UNION union { \
4220 PETH_FILTER EthDB; \
4221 PNULL_FILTER NullDB; \
4224 PFDDI_FILTER FddiDB; \
4227 typedef struct _FILTERDBS
{
4229 } FILTERDBS
, *PFILTERDBS
;
4232 struct _NDIS_MINIPORT_BLOCK
{
4234 PNDIS_MINIPORT_BLOCK NextMiniport
;
4235 PNDIS_M_DRIVER_BLOCK DriverHandle
;
4236 NDIS_HANDLE MiniportAdapterContext
;
4237 UNICODE_STRING MiniportName
;
4238 PNDIS_BIND_PATHS BindPaths
;
4239 NDIS_HANDLE OpenQueue
;
4241 NDIS_HANDLE DeviceContext
;
4245 UCHAR AssignedProcessor
;
4247 PNDIS_REQUEST MediaRequest
;
4248 PNDIS_MINIPORT_INTERRUPT Interrupt
;
4251 LIST_ENTRY PacketList
;
4252 PNDIS_PACKET FirstPendingPacket
;
4253 PNDIS_PACKET ReturnPacketsQueue
;
4254 ULONG RequestBuffer
;
4255 PVOID SetMCastBuffer
;
4256 PNDIS_MINIPORT_BLOCK PrimaryMiniport
;
4257 PVOID WrapperContext
;
4258 PVOID BusDataContext
;
4259 ULONG PnPCapabilities
;
4260 PCM_RESOURCE_LIST Resources
;
4261 NDIS_TIMER WakeUpDpcTimer
;
4262 UNICODE_STRING BaseName
;
4263 UNICODE_STRING SymbolicLinkName
;
4264 ULONG CheckForHangSeconds
;
4266 USHORT CFHangCurrentTick
;
4267 NDIS_STATUS ResetStatus
;
4268 NDIS_HANDLE ResetOpen
;
4270 FILTER_PACKET_INDICATION_HANDLER PacketIndicateHandler
;
4271 NDIS_M_SEND_COMPLETE_HANDLER SendCompleteHandler
;
4272 NDIS_M_SEND_RESOURCES_HANDLER SendResourcesHandler
;
4273 NDIS_M_RESET_COMPLETE_HANDLER ResetCompleteHandler
;
4274 NDIS_MEDIUM MediaType
;
4276 NDIS_INTERFACE_TYPE BusType
;
4277 NDIS_INTERFACE_TYPE AdapterType
;
4278 PDEVICE_OBJECT DeviceObject
;
4279 PDEVICE_OBJECT PhysicalDeviceObject
;
4280 PDEVICE_OBJECT NextDeviceObject
;
4281 PMAP_REGISTER_ENTRY MapRegisters
;
4282 PNDIS_AF_LIST CallMgrAfList
;
4283 PVOID MiniportThread
;
4285 USHORT SetInfoBufLen
;
4286 USHORT MaxSendPackets
;
4287 NDIS_STATUS FakeStatus
;
4289 PUNICODE_STRING pAdapterInstanceName
;
4290 PNDIS_MINIPORT_TIMER TimerQueue
;
4292 PNDIS_REQUEST PendingRequest
;
4293 UINT MaximumLongAddresses
;
4294 UINT MaximumShortAddresses
;
4295 UINT CurrentLookahead
;
4296 UINT MaximumLookahead
;
4297 W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler
;
4298 W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler
;
4299 W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler
;
4300 W_SEND_PACKETS_HANDLER SendPacketsHandler
;
4301 NDIS_M_START_SENDS DeferredSendHandler
;
4302 ETH_RCV_INDICATE_HANDLER EthRxIndicateHandler
;
4303 TR_RCV_INDICATE_HANDLER TrRxIndicateHandler
;
4304 FDDI_RCV_INDICATE_HANDLER FddiRxIndicateHandler
;
4305 ETH_RCV_COMPLETE_HANDLER EthRxCompleteHandler
;
4306 TR_RCV_COMPLETE_HANDLER TrRxCompleteHandler
;
4307 FDDI_RCV_COMPLETE_HANDLER FddiRxCompleteHandler
;
4308 NDIS_M_STATUS_HANDLER StatusHandler
;
4309 NDIS_M_STS_COMPLETE_HANDLER StatusCompleteHandler
;
4310 NDIS_M_TD_COMPLETE_HANDLER TDCompleteHandler
;
4311 NDIS_M_REQ_COMPLETE_HANDLER QueryCompleteHandler
;
4312 NDIS_M_REQ_COMPLETE_HANDLER SetCompleteHandler
;
4313 NDIS_WM_SEND_COMPLETE_HANDLER WanSendCompleteHandler
;
4314 WAN_RCV_HANDLER WanRcvHandler
;
4315 WAN_RCV_COMPLETE_HANDLER WanRcvCompleteHandler
;
4316 #if defined(NDIS_WRAPPER)
4317 PNDIS_MINIPORT_BLOCK NextGlobalMiniport
;
4318 SINGLE_LIST_ENTRY WorkQueue
[NUMBER_OF_WORK_ITEM_TYPES
];
4319 SINGLE_LIST_ENTRY SingleWorkItems
[NUMBER_OF_SINGLE_WORK_ITEMS
];
4322 UCHAR ArcnetAddress
;
4324 _ANONYMOUS_UNION
union {
4326 PNDIS_ARC_BUF ArcBuf
;
4332 PCM_RESOURCE_LIST AllocatedResources
;
4333 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
4334 SINGLE_LIST_ENTRY PatternList
;
4335 NDIS_PNP_CAPABILITIES PMCapabilities
;
4336 DEVICE_CAPABILITIES DeviceCaps
;
4338 DEVICE_POWER_STATE CurrentDevicePowerState
;
4340 SYSTEM_POWER_STATE WaitWakeSystemState
;
4341 LARGE_INTEGER VcIndex
;
4342 KSPIN_LOCK VcCountLock
;
4343 LIST_ENTRY WmiEnabledVcs
;
4344 PNDIS_GUID pNdisGuidMap
;
4345 PNDIS_GUID pCustomGuidMap
;
4347 USHORT cNdisGuidMap
;
4348 USHORT cCustomGuidMap
;
4349 USHORT CurrentMapRegister
;
4350 PKEVENT AllocationEvent
;
4351 USHORT BaseMapRegistersNeeded
;
4352 USHORT SGMapRegistersNeeded
;
4353 ULONG MaximumPhysicalMapping
;
4354 NDIS_TIMER MediaDisconnectTimer
;
4355 USHORT MediaDisconnectTimeOut
;
4356 USHORT InstanceNumber
;
4357 NDIS_EVENT OpenReadyEvent
;
4358 NDIS_PNP_DEVICE_STATE PnPDeviceState
;
4359 NDIS_PNP_DEVICE_STATE OldPnPDeviceState
;
4360 PGET_SET_DEVICE_DATA SetBusData
;
4361 PGET_SET_DEVICE_DATA GetBusData
;
4365 NDIS_STATS NdisStats
;
4369 PNDIS_PACKET IndicatedPacket
[MAXIMUM_PROCESSORS
];
4370 PKEVENT RemoveReadyEvent
;
4371 PKEVENT AllOpensClosedEvent
;
4372 PKEVENT AllRequestsCompletedEvent
;
4374 NDIS_MINIPORT_WORK_ITEM WorkItemBuffer
[NUMBER_OF_SINGLE_WORK_ITEMS
];
4375 PDMA_ADAPTER SystemAdapterObject
;
4376 ULONG DriverVerifyFlags
;
4378 USHORT InternalResetCount
;
4379 USHORT MiniportResetCount
;
4380 USHORT MediaSenseConnectCount
;
4381 USHORT MediaSenseDisconnectCount
;
4382 PNDIS_PACKET
*xPackets
;
4383 ULONG UserModeOpenReferences
;
4384 _ANONYMOUS_UNION
union {
4385 PVOID SavedSendHandler
;
4386 PVOID SavedWanSendHandler
;
4388 PVOID SavedSendPacketsHandler
;
4389 PVOID SavedCancelSendPacketsHandler
;
4390 W_SEND_PACKETS_HANDLER WSendPacketsHandler
;
4391 ULONG MiniportAttributes
;
4392 PDMA_ADAPTER SavedSystemAdapterObject
;
4394 USHORT CFHangXTicks
;
4396 ULONG IndicatedPacketsCount
;
4397 ULONG PhysicalMediumType
;
4398 PNDIS_REQUEST LastRequest
;
4399 LONG DmaAdapterRefCount
;
4405 KSPIN_LOCK TimerQueueLock
;
4406 PKEVENT ResetCompletedEvent
;
4407 PKEVENT QueuedBindingCompletedEvent
;
4408 PKEVENT DmaResourcesReleasedEvent
;
4409 FILTER_PACKET_INDICATION_HANDLER SavedPacketIndicateHandler
;
4410 ULONG RegisteredInterrupts
;
4411 PNPAGED_LOOKASIDE_LIST SGListLookasideList
;
4412 ULONG ScatterGatherListSize
;
4417 /* Handler prototypes for NDIS_OPEN_BLOCK */
4419 typedef NDIS_STATUS (DDKAPI
*WAN_SEND_HANDLER
)(
4420 IN NDIS_HANDLE MacBindingHandle
,
4421 IN NDIS_HANDLE LinkHandle
,
4424 /* NDIS 4.0 extension */
4426 typedef VOID (DDKAPI
*SEND_PACKETS_HANDLER
)(
4427 IN NDIS_HANDLE MiniportAdapterContext
,
4428 IN PPNDIS_PACKET PacketArray
,
4429 IN UINT NumberOfPackets
);
4431 #if defined(NDIS_WRAPPER)
4432 #define NDIS_COMMON_OPEN_BLOCK_WRAPPER_S \
4435 KSPIN_LOCK SpinLock; \
4436 NDIS_HANDLE FilterHandle; \
4437 ULONG ProtocolOptions; \
4438 USHORT CurrentLookahead; \
4439 USHORT ConnectDampTicks; \
4440 USHORT DisconnectDampTicks; \
4441 W_SEND_HANDLER WSendHandler; \
4442 W_TRANSFER_DATA_HANDLER WTransferDataHandler; \
4443 W_SEND_PACKETS_HANDLER WSendPacketsHandler; \
4444 W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler; \
4445 ULONG WakeUpEnable; \
4446 PKEVENT CloseCompleteEvent; \
4448 ULONG AfReferences; \
4449 PNDIS_OPEN_BLOCK NextGlobalOpen;
4451 #define NDIS_COMMON_OPEN_BLOCK_WRAPPER_S
4454 #define NDIS_COMMON_OPEN_BLOCK_S \
4456 NDIS_HANDLE BindingHandle; \
4457 PNDIS_MINIPORT_BLOCK MiniportHandle; \
4458 PNDIS_PROTOCOL_BLOCK ProtocolHandle; \
4459 NDIS_HANDLE ProtocolBindingContext; \
4460 PNDIS_OPEN_BLOCK MiniportNextOpen; \
4461 PNDIS_OPEN_BLOCK ProtocolNextOpen; \
4462 NDIS_HANDLE MiniportAdapterContext; \
4463 BOOLEAN Reserved1; \
4464 BOOLEAN Reserved2; \
4465 BOOLEAN Reserved3; \
4466 BOOLEAN Reserved4; \
4467 PNDIS_STRING BindDeviceName; \
4468 KSPIN_LOCK Reserved5; \
4469 PNDIS_STRING RootDeviceName; \
4470 _ANONYMOUS_UNION union { \
4471 SEND_HANDLER SendHandler; \
4472 WAN_SEND_HANDLER WanSendHandler; \
4474 TRANSFER_DATA_HANDLER TransferDataHandler; \
4475 SEND_COMPLETE_HANDLER SendCompleteHandler; \
4476 TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler; \
4477 RECEIVE_HANDLER ReceiveHandler; \
4478 RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler; \
4479 WAN_RECEIVE_HANDLER WanReceiveHandler; \
4480 REQUEST_COMPLETE_HANDLER RequestCompleteHandler; \
4481 RECEIVE_PACKET_HANDLER ReceivePacketHandler; \
4482 SEND_PACKETS_HANDLER SendPacketsHandler; \
4483 RESET_HANDLER ResetHandler; \
4484 REQUEST_HANDLER RequestHandler; \
4485 RESET_COMPLETE_HANDLER ResetCompleteHandler; \
4486 STATUS_HANDLER StatusHandler; \
4487 STATUS_COMPLETE_HANDLER StatusCompleteHandler; \
4488 NDIS_COMMON_OPEN_BLOCK_WRAPPER_S
4490 typedef struct _NDIS_COMMON_OPEN_BLOCK
{
4491 NDIS_COMMON_OPEN_BLOCK_S
4492 } NDIS_COMMON_OPEN_BLOCK
;
4494 struct _NDIS_OPEN_BLOCK
4497 NDIS_COMMON_OPEN_BLOCK NdisCommonOpenBlock
;
4499 NDIS_COMMON_OPEN_BLOCK_S
4505 /* Routines for NDIS miniport drivers */
4510 NdisInitializeWrapper(
4511 OUT PNDIS_HANDLE NdisWrapperHandle
,
4512 IN PVOID SystemSpecific1
,
4513 IN PVOID SystemSpecific2
,
4514 IN PVOID SystemSpecific3
);
4519 NdisMAllocateMapRegisters(
4520 IN NDIS_HANDLE MiniportAdapterHandle
,
4522 IN NDIS_DMA_SIZE DmaSize
,
4523 IN ULONG PhysicalMapRegistersNeeded
,
4524 IN ULONG MaximumPhysicalMapping
);
4528 * NdisMArcIndicateReceive(
4529 * IN NDIS_HANDLE MiniportAdapterHandle,
4530 * IN PUCHAR HeaderBuffer,
4531 * IN PUCHAR DataBuffer,
4534 #define NdisMArcIndicateReceive(MiniportAdapterHandle, \
4539 ArcFilterDprIndicateReceive( \
4540 (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->ArcDB), \
4548 * NdisMArcIndicateReceiveComplete(
4549 * IN NDIS_HANDLE MiniportAdapterHandle);
4551 #define NdisMArcIndicateReceiveComplete(MiniportAdapterHandle) \
4553 if (((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->EthDB) \
4555 NdisMEthIndicateReceiveComplete(_H); \
4558 ArcFilterDprIndicateReceiveComplete( \
4559 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->ArcDB); \
4566 IN NDIS_HANDLE LogHandle
);
4572 IN NDIS_HANDLE MiniportAdapterHandle
,
4574 OUT PNDIS_HANDLE LogHandle
);
4579 NdisMDeregisterAdapterShutdownHandler(
4580 IN NDIS_HANDLE MiniportHandle
);
4585 NdisMDeregisterInterrupt(
4586 IN PNDIS_MINIPORT_INTERRUPT Interrupt
);
4591 NdisMDeregisterIoPortRange(
4592 IN NDIS_HANDLE MiniportAdapterHandle
,
4593 IN UINT InitialPort
,
4594 IN UINT NumberOfPorts
,
4595 IN PVOID PortOffset
);
4599 * NdisMEthIndicateReceive(
4600 * IN NDIS_HANDLE MiniportAdapterHandle,
4601 * IN NDIS_HANDLE MiniportReceiveContext,
4602 * IN PVOID HeaderBuffer,
4603 * IN UINT HeaderBufferSize,
4604 * IN PVOID LookaheadBuffer,
4605 * IN UINT LookaheadBufferSize,
4606 * IN UINT PacketSize);
4608 #define NdisMEthIndicateReceive(MiniportAdapterHandle, \
4609 MiniportReceiveContext, \
4613 LookaheadBufferSize, \
4616 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxIndicateHandler)( \
4617 ((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthDB, \
4618 (MiniportReceiveContext), \
4621 (HeaderBufferSize), \
4622 (LookaheadBuffer), \
4623 (LookaheadBufferSize), \
4629 * NdisMEthIndicateReceiveComplete(
4630 * IN NDIS_HANDLE MiniportAdapterHandle);
4632 #define NdisMEthIndicateReceiveComplete(MiniportAdapterHandle) \
4634 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxCompleteHandler)( \
4635 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->EthDB); \
4640 * NdisMFddiIndicateReceive(
4641 * IN NDIS_HANDLE MiniportAdapterHandle,
4642 * IN NDIS_HANDLE MiniportReceiveContext,
4643 * IN PVOID HeaderBuffer,
4644 * IN UINT HeaderBufferSize,
4645 * IN PVOID LookaheadBuffer,
4646 * IN UINT LookaheadBufferSize,
4647 * IN UINT PacketSize);
4649 #define NdisMFddiIndicateReceive(MiniportAdapterHandle, \
4650 MiniportReceiveContext, \
4654 LookaheadBufferSize, \
4657 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxIndicateHandler)( \
4658 (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiDB), \
4659 (MiniportReceiveContext), \
4660 (PUCHAR)(HeaderBuffer) + 1, \
4661 (((*(PUCHAR*)(HeaderBuffer)) & 0x40) ? \
4662 FDDI_LENGTH_OF_LONG_ADDRESS : \
4663 FDDI_LENGTH_OF_SHORT_ADDRESS), \
4665 (HeaderBufferSize), \
4666 (LookaheadBuffer), \
4667 (LookaheadBufferSize), \
4675 * NdisMFddiIndicateReceiveComplete(
4676 * IN NDIS_HANDLE MiniportAdapterHandle);
4678 #define NdisMFddiIndicateReceiveComplete(MiniportAdapterHandle) \
4680 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxCompleteHandler)( \
4681 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FddiDB); \
4688 IN NDIS_HANDLE LogHandle
);
4693 NdisMFreeMapRegisters(
4694 IN NDIS_HANDLE MiniportAdapterHandle
);
4699 * NdisMIndicateReceivePacket(
4700 * IN NDIS_HANDLE MiniportAdapterHandle,
4701 * IN PPNDIS_PACKET ReceivePackets,
4702 * IN UINT NumberOfPackets);
4704 #define NdisMIndicateReceivePacket(MiniportAdapterHandle, \
4705 ReceivePackets, NumberOfPackets) \
4706 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->PacketIndicateHandler)( \
4707 MiniportAdapterHandle, ReceivePackets, NumberOfPackets)
4711 * NdisMIndicateStatus(
4712 * IN NDIS_HANDLE MiniportAdapterHandle,
4713 * IN NDIS_STATUS GeneralStatus,
4714 * IN PVOID StatusBuffer,
4715 * IN UINT StatusBufferSize);
4718 #define NdisMIndicateStatus(MiniportAdapterHandle, \
4719 GeneralStatus, StatusBuffer, StatusBufferSize) \
4720 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->StatusHandler)( \
4721 MiniportAdapterHandle, GeneralStatus, StatusBuffer, StatusBufferSize)
4725 * NdisMIndicateStatusComplete(
4726 * IN NDIS_HANDLE MiniportAdapterHandle);
4728 #define NdisMIndicateStatusComplete(MiniportAdapterHandle) \
4729 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->StatusCompleteHandler)( \
4730 MiniportAdapterHandle)
4734 * NdisMInitializeWrapper(
4735 * OUT PNDIS_HANDLE NdisWrapperHandle,
4736 * IN PVOID SystemSpecific1,
4737 * IN PVOID SystemSpecific2,
4738 * IN PVOID SystemSpecific3);
4740 #define NdisMInitializeWrapper(NdisWrapperHandle, \
4744 NdisInitializeWrapper((NdisWrapperHandle), \
4745 (SystemSpecific1), \
4746 (SystemSpecific2), \
4753 OUT PVOID
*VirtualAddress
,
4754 IN NDIS_HANDLE MiniportAdapterHandle
,
4755 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress
,
4760 * NdisMQueryInformationComplete(
4761 * IN NDIS_HANDLE MiniportAdapterHandle,
4762 * IN NDIS_STATUS Status);
4764 #define NdisMQueryInformationComplete(MiniportAdapterHandle, Status) \
4765 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->QueryCompleteHandler)(MiniportAdapterHandle, Status)
4770 NdisMRegisterAdapterShutdownHandler(
4771 IN NDIS_HANDLE MiniportHandle
,
4772 IN PVOID ShutdownContext
,
4773 IN ADAPTER_SHUTDOWN_HANDLER ShutdownHandler
);
4778 NdisMRegisterInterrupt(
4779 OUT PNDIS_MINIPORT_INTERRUPT Interrupt
,
4780 IN NDIS_HANDLE MiniportAdapterHandle
,
4781 IN UINT InterruptVector
,
4782 IN UINT InterruptLevel
,
4783 IN BOOLEAN RequestIsr
,
4784 IN BOOLEAN SharedInterrupt
,
4785 IN NDIS_INTERRUPT_MODE InterruptMode
);
4790 NdisMRegisterIoPortRange(
4791 OUT PVOID
*PortOffset
,
4792 IN NDIS_HANDLE MiniportAdapterHandle
,
4793 IN UINT InitialPort
,
4794 IN UINT NumberOfPorts
);
4799 NdisMRegisterMiniport(
4800 IN NDIS_HANDLE NdisWrapperHandle
,
4801 IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics
,
4802 IN UINT CharacteristicsLength
);
4808 IN PNDIS_MINIPORT_TIMER Timer
,
4809 IN UINT MillisecondsToDelay
);
4814 NdisMInitializeTimer(
4815 IN OUT PNDIS_MINIPORT_TIMER Timer
,
4816 IN NDIS_HANDLE MiniportAdapterHandle
,
4817 IN PNDIS_TIMER_FUNCTION TimerFunction
,
4818 IN PVOID FunctionContext
);
4823 NdisMSetPeriodicTimer(
4824 IN PNDIS_MINIPORT_TIMER Timer
,
4825 IN UINT MillisecondPeriod
);
4831 IN PNDIS_MINIPORT_TIMER Timer
,
4832 OUT PBOOLEAN TimerCancelled
);
4834 #if !defined(NDIS_WRAPPER)
4838 * NdisMResetComplete(
4839 * IN NDIS_HANDLE MiniportAdapterHandle,
4840 * IN NDIS_STATUS Status,
4841 * IN BOOLEAN AddressingReset);
4843 #define NdisMResetComplete(MiniportAdapterHandle, \
4847 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->ResetCompleteHandler)( \
4848 MiniportAdapterHandle, Status, AddressingReset); \
4853 * NdisMSendComplete(
4854 * IN NDIS_HANDLE MiniportAdapterHandle,
4855 * IN PNDIS_PACKET Packet,
4856 * IN NDIS_STATUS Status);
4858 #define NdisMSendComplete(MiniportAdapterHandle, \
4862 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendCompleteHandler)( \
4863 MiniportAdapterHandle, Packet, Status); \
4868 * NdisMSendResourcesAvailable(
4869 * IN NDIS_HANDLE MiniportAdapterHandle);
4871 #define NdisMSendResourcesAvailable(MiniportAdapterHandle) \
4873 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendResourcesHandler)( \
4874 MiniportAdapterHandle); \
4879 * NdisMTransferDataComplete(
4880 * IN NDIS_HANDLE MiniportAdapterHandle,
4881 * IN PNDIS_PACKET Packet,
4882 * IN NDIS_STATUS Status,
4883 * IN UINT BytesTransferred);
4885 #define NdisMTransferDataComplete(MiniportAdapterHandle, \
4890 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TDCompleteHandler)( \
4891 MiniportAdapterHandle, Packet, Status, BytesTransferred) \
4894 #endif /* !_NDIS_ */
4899 * NdisMSetAttributes(
4900 * IN NDIS_HANDLE MiniportAdapterHandle,
4901 * IN NDIS_HANDLE MiniportAdapterContext,
4902 * IN BOOLEAN BusMaster,
4903 * IN NDIS_INTERFACE_TYPE AdapterType);
4905 #define NdisMSetAttributes(MiniportAdapterHandle, \
4906 MiniportAdapterContext, \
4909 NdisMSetAttributesEx(MiniportAdapterHandle, \
4910 MiniportAdapterContext, \
4912 (BusMaster) ? NDIS_ATTRIBUTE_BUS_MASTER : 0, \
4918 NdisMSetAttributesEx(
4919 IN NDIS_HANDLE MiniportAdapterHandle
,
4920 IN NDIS_HANDLE MiniportAdapterContext
,
4921 IN UINT CheckForHangTimeInSeconds OPTIONAL
,
4922 IN ULONG AttributeFlags
,
4923 IN NDIS_INTERFACE_TYPE AdapterType
);
4927 * NdisMSetInformationComplete(
4928 * IN NDIS_HANDLE MiniportAdapterHandle,
4929 * IN NDIS_STATUS Status);
4931 #define NdisMSetInformationComplete(MiniportAdapterHandle, \
4933 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SetCompleteHandler)( \
4934 MiniportAdapterHandle, Status)
4940 IN ULONG MicrosecondsToSleep
);
4945 NdisMSynchronizeWithInterrupt(
4946 IN PNDIS_MINIPORT_INTERRUPT Interrupt
,
4947 IN PVOID SynchronizeFunction
,
4948 IN PVOID SynchronizeContext
);
4952 * NdisMTrIndicateReceive(
4953 * IN NDIS_HANDLE MiniportAdapterHandle,
4954 * IN NDIS_HANDLE MiniportReceiveContext,
4955 * IN PVOID HeaderBuffer,
4956 * IN UINT HeaderBufferSize,
4957 * IN PVOID LookaheadBuffer,
4958 * IN UINT LookaheadBufferSize,
4959 * IN UINT PacketSize);
4961 #define NdisMTrIndicateReceive(MiniportAdapterHandle, \
4962 MiniportReceiveContext, \
4966 LookaheadBufferSize, \
4969 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxIndicateHandler)( \
4970 (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrDB), \
4971 (MiniportReceiveContext), \
4974 (HeaderBufferSize), \
4975 (LookaheadBuffer), \
4976 (LookaheadBufferSize), \
4982 * NdisMTrIndicateReceiveComplete(
4983 * IN NDIS_HANDLE MiniportAdapterHandle);
4985 #define NdisMTrIndicateReceiveComplete(MiniportAdapterHandle) \
4987 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxCompleteHandler)( \
4988 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->TrDB); \
4995 IN NDIS_HANDLE LogHandle
,
4997 IN UINT LogBufferSize
);
5002 NdisMQueryAdapterResources(
5003 OUT PNDIS_STATUS Status
,
5004 IN NDIS_HANDLE WrapperConfigurationContext
,
5005 OUT PNDIS_RESOURCE_LIST ResourceList
,
5006 IN OUT PUINT BufferSize
);
5011 NdisTerminateWrapper(
5012 IN NDIS_HANDLE NdisWrapperHandle
,
5013 IN PVOID SystemSpecific
);
5019 IN NDIS_HANDLE MiniportAdapterHandle
,
5020 IN PVOID VirtualAddress
,
5025 /* Event functions */
5030 NdisInitializeEvent(
5031 IN PNDIS_EVENT Event
);
5037 IN PNDIS_EVENT Event
);
5043 IN PNDIS_EVENT Event
);
5049 IN PNDIS_EVENT Event
,
5054 /* NDIS intermediate miniport structures */
5056 typedef VOID (DDKAPI
*W_MINIPORT_CALLBACK
)(
5057 IN NDIS_HANDLE MiniportAdapterContext
,
5058 IN PVOID CallbackContext
);
5062 /* Routines for intermediate miniport drivers */
5067 NdisIMDeInitializeDeviceInstance(
5068 IN NDIS_HANDLE NdisMiniportHandle
);
5072 * NdisIMInitializeDeviceInstance(
5073 * IN NDIS_HANDLE DriverHandle,
5074 * IN PNDIS_STRING DeviceInstance);
5076 #define NdisIMInitializeDeviceInstance(DriverHandle, DeviceInstance) \
5077 NdisIMInitializeDeviceInstanceEx(DriverHandle, DeviceInstance, NULL)
5082 NdisIMRegisterLayeredMiniport(
5083 IN NDIS_HANDLE NdisWrapperHandle
,
5084 IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics
,
5085 IN UINT CharacteristicsLength
,
5086 OUT PNDIS_HANDLE DriverHandle
);
5089 /* Functions obsoleted by NDIS 5.0 */
5095 IN PNDIS_HANDLE NdisDmaHandle
);
5100 NdisSetupDmaTransfer(
5101 OUT PNDIS_STATUS Status
,
5102 IN PNDIS_HANDLE NdisDmaHandle
,
5103 IN PNDIS_BUFFER Buffer
,
5106 IN BOOLEAN WriteToDevice
);
5111 NdisUpcaseUnicodeString(
5112 OUT PUNICODE_STRING DestinationString
,
5113 IN PUNICODE_STRING SourceString
);
5116 /* Routines for NDIS protocol drivers */
5122 OUT PNDIS_STATUS Status
,
5123 IN NDIS_HANDLE NdisBindingHandle
,
5124 IN PNDIS_REQUEST NdisRequest
);
5130 OUT PNDIS_STATUS Status
,
5131 IN NDIS_HANDLE NdisBindingHandle
);
5137 OUT PNDIS_STATUS Status
,
5138 IN NDIS_HANDLE NdisBindingHandle
,
5139 IN PNDIS_PACKET Packet
);
5145 IN NDIS_HANDLE NdisBindingHandle
,
5146 IN PPNDIS_PACKET PacketArray
,
5147 IN UINT NumberOfPackets
);
5153 OUT PNDIS_STATUS Status
,
5154 IN NDIS_HANDLE NdisBindingHandle
,
5155 IN NDIS_HANDLE MacReceiveContext
,
5157 IN UINT BytesToTransfer
,
5158 IN OUT PNDIS_PACKET Packet
,
5159 OUT PUINT BytesTransferred
);
5165 OUT PNDIS_STATUS Status
,
5166 IN NDIS_HANDLE NdisBindingHandle
);
5171 NdisCompleteBindAdapter(
5172 IN NDIS_HANDLE BindAdapterContext
,
5173 IN NDIS_STATUS Status
,
5174 IN NDIS_STATUS OpenStatus
);
5179 NdisCompleteUnbindAdapter(
5180 IN NDIS_HANDLE UnbindAdapterContext
,
5181 IN NDIS_STATUS Status
);
5186 NdisDeregisterProtocol(
5187 OUT PNDIS_STATUS Status
,
5188 IN NDIS_HANDLE NdisProtocolHandle
);
5194 OUT PNDIS_STATUS Status
,
5195 OUT PNDIS_STATUS OpenErrorStatus
,
5196 OUT PNDIS_HANDLE NdisBindingHandle
,
5197 OUT PUINT SelectedMediumIndex
,
5198 IN PNDIS_MEDIUM MediumArray
,
5199 IN UINT MediumArraySize
,
5200 IN NDIS_HANDLE NdisProtocolHandle
,
5201 IN NDIS_HANDLE ProtocolBindingContext
,
5202 IN PNDIS_STRING AdapterName
,
5203 IN UINT OpenOptions
,
5204 IN PSTRING AddressingInformation
);
5209 NdisOpenProtocolConfiguration(
5210 OUT PNDIS_STATUS Status
,
5211 OUT PNDIS_HANDLE ConfigurationHandle
,
5212 IN PNDIS_STRING ProtocolSection
);
5217 NdisRegisterProtocol(
5218 OUT PNDIS_STATUS Status
,
5219 OUT PNDIS_HANDLE NdisProtocolHandle
,
5220 IN PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics
,
5221 IN UINT CharacteristicsLength
);
5226 NdisScheduleWorkItem(
5227 IN PNDIS_WORK_ITEM WorkItem
);
5229 /* Obsoleted in Windows XP */
5231 /* Prototypes for NDIS_MAC_CHARACTERISTICS */
5233 typedef NDIS_STATUS (*OPEN_ADAPTER_HANDLER
)(
5234 OUT PNDIS_STATUS OpenErrorStatus
,
5235 OUT NDIS_HANDLE
*MacBindingHandle
,
5236 OUT PUINT SelectedMediumIndex
,
5237 IN PNDIS_MEDIUM MediumArray
,
5238 IN UINT MediumArraySize
,
5239 IN NDIS_HANDLE NdisBindingContext
,
5240 IN NDIS_HANDLE MacAdapterContext
,
5241 IN UINT OpenOptions
,
5242 IN PSTRING AddressingInformation OPTIONAL
);
5244 typedef NDIS_STATUS (DDKAPI
*CLOSE_ADAPTER_HANDLER
)(
5245 IN NDIS_HANDLE MacBindingHandle
);
5247 typedef NDIS_STATUS (DDKAPI
*WAN_TRANSFER_DATA_HANDLER
)(
5250 typedef NDIS_STATUS (DDKAPI
*QUERY_GLOBAL_STATISTICS_HANDLER
)(
5251 IN NDIS_HANDLE MacAdapterContext
,
5252 IN PNDIS_REQUEST NdisRequest
);
5254 typedef VOID (DDKAPI
*UNLOAD_MAC_HANDLER
)(
5255 IN NDIS_HANDLE MacMacContext
);
5257 typedef NDIS_STATUS (DDKAPI
*ADD_ADAPTER_HANDLER
)(
5258 IN NDIS_HANDLE MacMacContext
,
5259 IN NDIS_HANDLE WrapperConfigurationContext
,
5260 IN PNDIS_STRING AdapterName
);
5262 typedef VOID (*REMOVE_ADAPTER_HANDLER
)(
5263 IN NDIS_HANDLE MacAdapterContext
);
5265 typedef struct _NDIS_MAC_CHARACTERISTICS
{
5266 UCHAR MajorNdisVersion
;
5267 UCHAR MinorNdisVersion
;
5270 OPEN_ADAPTER_HANDLER OpenAdapterHandler
;
5271 CLOSE_ADAPTER_HANDLER CloseAdapterHandler
;
5272 SEND_HANDLER SendHandler
;
5273 TRANSFER_DATA_HANDLER TransferDataHandler
;
5274 RESET_HANDLER ResetHandler
;
5275 REQUEST_HANDLER RequestHandler
;
5276 QUERY_GLOBAL_STATISTICS_HANDLER QueryGlobalStatisticsHandler
;
5277 UNLOAD_MAC_HANDLER UnloadMacHandler
;
5278 ADD_ADAPTER_HANDLER AddAdapterHandler
;
5279 REMOVE_ADAPTER_HANDLER RemoveAdapterHandler
;
5281 } NDIS_MAC_CHARACTERISTICS
, *PNDIS_MAC_CHARACTERISTICS
;
5283 typedef NDIS_MAC_CHARACTERISTICS NDIS_WAN_MAC_CHARACTERISTICS
;
5284 typedef NDIS_WAN_MAC_CHARACTERISTICS
*PNDIS_WAN_MAC_CHARACTERISTICS
;
5290 #endif /* __NDIS_H */