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
36 #pragma GCC system_header
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
75 #if defined(NDIS_MINIPORT_DRIVER) && !defined(BINARY_COMPATIBLE)
76 #define BINARY_COMPATIBLE 1
79 #if !defined(_M_IX86) && BINARY_COMPATIBLE
80 #undef BINARY_COMPATIBLE
81 #define BINARY_COMPATIBLE 0
86 typedef PVOID QUEUED_CLOSE
;
89 typedef ULONG NDIS_OID
, *PNDIS_OID
;
91 typedef struct _X_FILTER FDDI_FILTER
, *PFDDI_FILTER
;
92 typedef struct _X_FILTER TR_FILTER
, *PTR_FILTER
;
93 typedef struct _X_FILTER NULL_FILTER
, *PNULL_FILTER
;
95 typedef struct _REFERENCE
{
97 USHORT ReferenceCount
;
99 } REFERENCE
, * PREFERENCE
;
102 /* NDIS base types */
104 typedef struct _NDIS_SPIN_LOCK
{
107 } NDIS_SPIN_LOCK
, * PNDIS_SPIN_LOCK
;
109 typedef struct _NDIS_EVENT
{
111 } NDIS_EVENT
, *PNDIS_EVENT
;
113 typedef PVOID NDIS_HANDLE
, *PNDIS_HANDLE
;
114 typedef int NDIS_STATUS
, *PNDIS_STATUS
;
116 typedef ANSI_STRING NDIS_ANSI_STRING
, *PNDIS_ANSI_STRING
;
117 typedef UNICODE_STRING NDIS_STRING
, *PNDIS_STRING
;
119 typedef MDL NDIS_BUFFER
, *PNDIS_BUFFER
;
120 typedef ULONG NDIS_ERROR_CODE
, *PNDIS_ERROR_CODE
;
123 /* NDIS_STATUS constants */
124 #define NDIS_STATUS_SUCCESS ((NDIS_STATUS)STATUS_SUCCESS)
125 #define NDIS_STATUS_PENDING ((NDIS_STATUS)STATUS_PENDING)
126 #define NDIS_STATUS_NOT_RECOGNIZED ((NDIS_STATUS)0x00010001L)
127 #define NDIS_STATUS_NOT_COPIED ((NDIS_STATUS)0x00010002L)
128 #define NDIS_STATUS_NOT_ACCEPTED ((NDIS_STATUS)0x00010003L)
129 #define NDIS_STATUS_CALL_ACTIVE ((NDIS_STATUS)0x00010007L)
130 #define NDIS_STATUS_ONLINE ((NDIS_STATUS)0x40010003L)
131 #define NDIS_STATUS_RESET_START ((NDIS_STATUS)0x40010004L)
132 #define NDIS_STATUS_RESET_END ((NDIS_STATUS)0x40010005L)
133 #define NDIS_STATUS_RING_STATUS ((NDIS_STATUS)0x40010006L)
134 #define NDIS_STATUS_CLOSED ((NDIS_STATUS)0x40010007L)
135 #define NDIS_STATUS_WAN_LINE_UP ((NDIS_STATUS)0x40010008L)
136 #define NDIS_STATUS_WAN_LINE_DOWN ((NDIS_STATUS)0x40010009L)
137 #define NDIS_STATUS_WAN_FRAGMENT ((NDIS_STATUS)0x4001000AL)
138 #define NDIS_STATUS_MEDIA_CONNECT ((NDIS_STATUS)0x4001000BL)
139 #define NDIS_STATUS_MEDIA_DISCONNECT ((NDIS_STATUS)0x4001000CL)
140 #define NDIS_STATUS_HARDWARE_LINE_UP ((NDIS_STATUS)0x4001000DL)
141 #define NDIS_STATUS_HARDWARE_LINE_DOWN ((NDIS_STATUS)0x4001000EL)
142 #define NDIS_STATUS_INTERFACE_UP ((NDIS_STATUS)0x4001000FL)
143 #define NDIS_STATUS_INTERFACE_DOWN ((NDIS_STATUS)0x40010010L)
144 #define NDIS_STATUS_MEDIA_BUSY ((NDIS_STATUS)0x40010011L)
145 #define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION ((NDIS_STATUS)0x40010012L)
146 #define NDIS_STATUS_WW_INDICATION NDIS_STATUS_MEDIA_SPECIFIC_INDICATION
147 #define NDIS_STATUS_LINK_SPEED_CHANGE ((NDIS_STATUS)0x40010013L)
148 #define NDIS_STATUS_WAN_GET_STATS ((NDIS_STATUS)0x40010014L)
149 #define NDIS_STATUS_WAN_CO_FRAGMENT ((NDIS_STATUS)0x40010015L)
150 #define NDIS_STATUS_WAN_CO_LINKPARAMS ((NDIS_STATUS)0x40010016L)
152 #define NDIS_STATUS_NOT_RESETTABLE ((NDIS_STATUS)0x80010001L)
153 #define NDIS_STATUS_SOFT_ERRORS ((NDIS_STATUS)0x80010003L)
154 #define NDIS_STATUS_HARD_ERRORS ((NDIS_STATUS)0x80010004L)
155 #define NDIS_STATUS_BUFFER_OVERFLOW ((NDIS_STATUS)STATUS_BUFFER_OVERFLOW)
157 #define NDIS_STATUS_FAILURE ((NDIS_STATUS)STATUS_UNSUCCESSFUL)
158 #define NDIS_STATUS_RESOURCES ((NDIS_STATUS)STATUS_INSUFFICIENT_RESOURCES)
159 #define NDIS_STATUS_CLOSING ((NDIS_STATUS)0xC0010002L)
160 #define NDIS_STATUS_BAD_VERSION ((NDIS_STATUS)0xC0010004L)
161 #define NDIS_STATUS_BAD_CHARACTERISTICS ((NDIS_STATUS)0xC0010005L)
162 #define NDIS_STATUS_ADAPTER_NOT_FOUND ((NDIS_STATUS)0xC0010006L)
163 #define NDIS_STATUS_OPEN_FAILED ((NDIS_STATUS)0xC0010007L)
164 #define NDIS_STATUS_DEVICE_FAILED ((NDIS_STATUS)0xC0010008L)
165 #define NDIS_STATUS_MULTICAST_FULL ((NDIS_STATUS)0xC0010009L)
166 #define NDIS_STATUS_MULTICAST_EXISTS ((NDIS_STATUS)0xC001000AL)
167 #define NDIS_STATUS_MULTICAST_NOT_FOUND ((NDIS_STATUS)0xC001000BL)
168 #define NDIS_STATUS_REQUEST_ABORTED ((NDIS_STATUS)0xC001000CL)
169 #define NDIS_STATUS_RESET_IN_PROGRESS ((NDIS_STATUS)0xC001000DL)
170 #define NDIS_STATUS_CLOSING_INDICATING ((NDIS_STATUS)0xC001000EL)
171 #define NDIS_STATUS_NOT_SUPPORTED ((NDIS_STATUS)STATUS_NOT_SUPPORTED)
172 #define NDIS_STATUS_INVALID_PACKET ((NDIS_STATUS)0xC001000FL)
173 #define NDIS_STATUS_OPEN_LIST_FULL ((NDIS_STATUS)0xC0010010L)
174 #define NDIS_STATUS_ADAPTER_NOT_READY ((NDIS_STATUS)0xC0010011L)
175 #define NDIS_STATUS_ADAPTER_NOT_OPEN ((NDIS_STATUS)0xC0010012L)
176 #define NDIS_STATUS_NOT_INDICATING ((NDIS_STATUS)0xC0010013L)
177 #define NDIS_STATUS_INVALID_LENGTH ((NDIS_STATUS)0xC0010014L)
178 #define NDIS_STATUS_INVALID_DATA ((NDIS_STATUS)0xC0010015L)
179 #define NDIS_STATUS_BUFFER_TOO_SHORT ((NDIS_STATUS)0xC0010016L)
180 #define NDIS_STATUS_INVALID_OID ((NDIS_STATUS)0xC0010017L)
181 #define NDIS_STATUS_ADAPTER_REMOVED ((NDIS_STATUS)0xC0010018L)
182 #define NDIS_STATUS_UNSUPPORTED_MEDIA ((NDIS_STATUS)0xC0010019L)
183 #define NDIS_STATUS_GROUP_ADDRESS_IN_USE ((NDIS_STATUS)0xC001001AL)
184 #define NDIS_STATUS_FILE_NOT_FOUND ((NDIS_STATUS)0xC001001BL)
185 #define NDIS_STATUS_ERROR_READING_FILE ((NDIS_STATUS)0xC001001CL)
186 #define NDIS_STATUS_ALREADY_MAPPED ((NDIS_STATUS)0xC001001DL)
187 #define NDIS_STATUS_RESOURCE_CONFLICT ((NDIS_STATUS)0xC001001EL)
188 #define NDIS_STATUS_NO_CABLE ((NDIS_STATUS)0xC001001FL)
190 #define NDIS_STATUS_INVALID_SAP ((NDIS_STATUS)0xC0010020L)
191 #define NDIS_STATUS_SAP_IN_USE ((NDIS_STATUS)0xC0010021L)
192 #define NDIS_STATUS_INVALID_ADDRESS ((NDIS_STATUS)0xC0010022L)
193 #define NDIS_STATUS_VC_NOT_ACTIVATED ((NDIS_STATUS)0xC0010023L)
194 #define NDIS_STATUS_DEST_OUT_OF_ORDER ((NDIS_STATUS)0xC0010024L)
195 #define NDIS_STATUS_VC_NOT_AVAILABLE ((NDIS_STATUS)0xC0010025L)
196 #define NDIS_STATUS_CELLRATE_NOT_AVAILABLE ((NDIS_STATUS)0xC0010026L)
197 #define NDIS_STATUS_INCOMPATABLE_QOS ((NDIS_STATUS)0xC0010027L)
198 #define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED ((NDIS_STATUS)0xC0010028L)
199 #define NDIS_STATUS_NO_ROUTE_TO_DESTINATION ((NDIS_STATUS)0xC0010029L)
201 #define NDIS_STATUS_TOKEN_RING_OPEN_ERROR ((NDIS_STATUS)0xC0011000L)
202 #define NDIS_STATUS_INVALID_DEVICE_REQUEST ((NDIS_STATUS)STATUS_INVALID_DEVICE_REQUEST)
203 #define NDIS_STATUS_NETWORK_UNREACHABLE ((NDIS_STATUS)STATUS_NETWORK_UNREACHABLE)
206 /* NDIS error codes for error logging */
208 #define NDIS_ERROR_CODE_RESOURCE_CONFLICT EVENT_NDIS_RESOURCE_CONFLICT
209 #define NDIS_ERROR_CODE_OUT_OF_RESOURCES EVENT_NDIS_OUT_OF_RESOURCE
210 #define NDIS_ERROR_CODE_HARDWARE_FAILURE EVENT_NDIS_HARDWARE_FAILURE
211 #define NDIS_ERROR_CODE_ADAPTER_NOT_FOUND EVENT_NDIS_ADAPTER_NOT_FOUND
212 #define NDIS_ERROR_CODE_INTERRUPT_CONNECT EVENT_NDIS_INTERRUPT_CONNECT
213 #define NDIS_ERROR_CODE_DRIVER_FAILURE EVENT_NDIS_DRIVER_FAILURE
214 #define NDIS_ERROR_CODE_BAD_VERSION EVENT_NDIS_BAD_VERSION
215 #define NDIS_ERROR_CODE_TIMEOUT EVENT_NDIS_TIMEOUT
216 #define NDIS_ERROR_CODE_NETWORK_ADDRESS EVENT_NDIS_NETWORK_ADDRESS
217 #define NDIS_ERROR_CODE_UNSUPPORTED_CONFIGURATION EVENT_NDIS_UNSUPPORTED_CONFIGURATION
218 #define NDIS_ERROR_CODE_INVALID_VALUE_FROM_ADAPTER EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER
219 #define NDIS_ERROR_CODE_MISSING_CONFIGURATION_PARAMETER EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER
220 #define NDIS_ERROR_CODE_BAD_IO_BASE_ADDRESS EVENT_NDIS_BAD_IO_BASE_ADDRESS
221 #define NDIS_ERROR_CODE_RECEIVE_SPACE_SMALL EVENT_NDIS_RECEIVE_SPACE_SMALL
222 #define NDIS_ERROR_CODE_ADAPTER_DISABLED EVENT_NDIS_ADAPTER_DISABLED
225 /* Memory allocation flags. Used by Ndis[Allocate|Free]Memory */
226 #define NDIS_MEMORY_CONTIGUOUS 0x00000001
227 #define NDIS_MEMORY_NONCACHED 0x00000002
229 /* NIC attribute flags. Used by NdisMSetAttributes(Ex) */
230 #define NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT 0x00000001
231 #define NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT 0x00000002
232 #define NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS 0x00000004
233 #define NDIS_ATTRIBUTE_BUS_MASTER 0x00000008
234 #define NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER 0x00000010
235 #define NDIS_ATTRIBUTE_DESERIALIZE 0x00000020
236 #define NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND 0x00000040
237 #define NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK 0x00000080
238 #define NDIS_ATTRIBUTE_NOT_CO_NDIS 0x00000100
239 #define NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS 0x00000200
244 typedef union _NDIS_RW_LOCK_REFCOUNT
{
247 } NDIS_RW_LOCK_REFCOUNT
;
249 typedef struct _NDIS_RW_LOCK
{
258 NDIS_RW_LOCK_REFCOUNT RefCount
[MAXIMUM_PROCESSORS
];
259 } NDIS_RW_LOCK
, *PNDIS_RW_LOCK
;
261 typedef struct _LOCK_STATE
{
264 } LOCK_STATE
, *PLOCK_STATE
;
271 (*PNDIS_TIMER_FUNCTION
)(
272 IN PVOID SystemSpecific1
,
273 IN PVOID FunctionContext
,
274 IN PVOID SystemSpecific2
,
275 IN PVOID SystemSpecific3
);
277 typedef struct _NDIS_TIMER
{
280 } NDIS_TIMER
, *PNDIS_TIMER
;
286 typedef CM_MCA_POS_DATA NDIS_MCA_POS_DATA
, *PNDIS_MCA_POS_DATA
;
287 typedef CM_EISA_SLOT_INFORMATION NDIS_EISA_SLOT_INFORMATION
, *PNDIS_EISA_SLOT_INFORMATION
;
288 typedef CM_EISA_FUNCTION_INFORMATION NDIS_EISA_FUNCTION_INFORMATION
, *PNDIS_EISA_FUNCTION_INFORMATION
;
289 typedef CM_PARTIAL_RESOURCE_LIST NDIS_RESOURCE_LIST
, *PNDIS_RESOURCE_LIST
;
291 /* Hardware status codes (OID_GEN_HARDWARE_STATUS) */
292 typedef enum _NDIS_HARDWARE_STATUS
{
293 NdisHardwareStatusReady
,
294 NdisHardwareStatusInitializing
,
295 NdisHardwareStatusReset
,
296 NdisHardwareStatusClosing
,
297 NdisHardwareStatusNotReady
298 } NDIS_HARDWARE_STATUS
, *PNDIS_HARDWARE_STATUS
;
300 /* OID_GEN_GET_TIME_CAPS */
301 typedef struct _GEN_GET_TIME_CAPS
{
303 ULONG ClockPrecision
;
304 } GEN_GET_TIME_CAPS
, *PGEN_GET_TIME_CAPS
;
307 #define READABLE_LOCAL_CLOCK 0x00000001
308 #define CLOCK_NETWORK_DERIVED 0x00000002
309 #define CLOCK_PRECISION 0x00000004
310 #define RECEIVE_TIME_INDICATION_CAPABLE 0x00000008
311 #define TIMED_SEND_CAPABLE 0x00000010
312 #define TIME_STAMP_CAPABLE 0x00000020
314 /* OID_GEN_GET_NETCARD_TIME */
315 typedef struct _GEN_GET_NETCARD_TIME
{
317 } GEN_GET_NETCARD_TIME
, *PGEN_GET_NETCARD_TIME
;
319 /* NDIS driver medium (OID_GEN_MEDIA_SUPPORTED / OID_GEN_MEDIA_IN_USE) */
320 typedef enum _NDIS_MEDIUM
{
328 NdisMediumArcnet878_2
,
330 NdisMediumWirelessWan
,
336 } NDIS_MEDIUM
, *PNDIS_MEDIUM
;
338 /* NDIS packet filter bits (OID_GEN_CURRENT_PACKET_FILTER) */
339 #define NDIS_PACKET_TYPE_DIRECTED 0x00000001
340 #define NDIS_PACKET_TYPE_MULTICAST 0x00000002
341 #define NDIS_PACKET_TYPE_ALL_MULTICAST 0x00000004
342 #define NDIS_PACKET_TYPE_BROADCAST 0x00000008
343 #define NDIS_PACKET_TYPE_SOURCE_ROUTING 0x00000010
344 #define NDIS_PACKET_TYPE_PROMISCUOUS 0x00000020
345 #define NDIS_PACKET_TYPE_SMT 0x00000040
346 #define NDIS_PACKET_TYPE_ALL_LOCAL 0x00000080
347 #define NDIS_PACKET_TYPE_GROUP 0x00001000
348 #define NDIS_PACKET_TYPE_ALL_FUNCTIONAL 0x00002000
349 #define NDIS_PACKET_TYPE_FUNCTIONAL 0x00004000
350 #define NDIS_PACKET_TYPE_MAC_FRAME 0x00008000
352 /* NDIS protocol option bits (OID_GEN_PROTOCOL_OPTIONS) */
353 #define NDIS_PROT_OPTION_ESTIMATED_LENGTH 0x00000001
354 #define NDIS_PROT_OPTION_NO_LOOPBACK 0x00000002
355 #define NDIS_PROT_OPTION_NO_RSVD_ON_RCVPKT 0x00000004
357 /* NDIS MAC option bits (OID_GEN_MAC_OPTIONS) */
358 #define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA 0x00000001
359 #define NDIS_MAC_OPTION_RECEIVE_SERIALIZED 0x00000002
360 #define NDIS_MAC_OPTION_TRANSFERS_NOT_PEND 0x00000004
361 #define NDIS_MAC_OPTION_NO_LOOPBACK 0x00000008
362 #define NDIS_MAC_OPTION_FULL_DUPLEX 0x00000010
363 #define NDIS_MAC_OPTION_EOTX_INDICATION 0x00000020
364 #define NDIS_MAC_OPTION_8021P_PRIORITY 0x00000040
365 #define NDIS_MAC_OPTION_RESERVED 0x80000000
367 /* State of the LAN media (OID_GEN_MEDIA_CONNECT_STATUS) */
368 typedef enum _NDIS_MEDIA_STATE
{
369 NdisMediaStateConnected
,
370 NdisMediaStateDisconnected
371 } NDIS_MEDIA_STATE
, *PNDIS_MEDIA_STATE
;
373 /* OID_GEN_SUPPORTED_GUIDS */
374 typedef struct _NDIS_GUID
{
382 } NDIS_GUID
, *PNDIS_GUID
;
384 #define NDIS_GUID_TO_OID 0x00000001
385 #define NDIS_GUID_TO_STATUS 0x00000002
386 #define NDIS_GUID_ANSI_STRING 0x00000004
387 #define NDIS_GUID_UNICODE_STRING 0x00000008
388 #define NDIS_GUID_ARRAY 0x00000010
390 typedef HANDLE PNDIS_PACKET_POOL
;
392 /* NDIS_PACKET_PRIVATE.Flags constants */
393 #define fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO 0x40
394 #define fPACKET_ALLOCATED_BY_NDIS 0x80
396 typedef struct _NDIS_PACKET_PRIVATE
{
401 PNDIS_PACKET_POOL Pool
;
405 UCHAR NdisPacketFlags
;
406 USHORT NdisPacketOobOffset
;
407 } NDIS_PACKET_PRIVATE
, * PNDIS_PACKET_PRIVATE
;
409 typedef struct _NDIS_PACKET
{
410 NDIS_PACKET_PRIVATE Private
;
413 UCHAR MiniportReserved
[2 * sizeof(PVOID
)];
414 UCHAR WrapperReserved
[2 * sizeof(PVOID
)];
417 UCHAR MiniportReservedEx
[3 * sizeof(PVOID
)];
418 UCHAR WrapperReservedEx
[sizeof(PVOID
)];
421 UCHAR MacReserved
[4 * sizeof(PVOID
)];
424 ULONG_PTR Reserved
[2];
425 UCHAR ProtocolReserved
[1];
426 } NDIS_PACKET
, *PNDIS_PACKET
, **PPNDIS_PACKET
;
428 typedef enum _NDIS_CLASS_ID
{
429 NdisClass802_3Priority
,
430 NdisClassWirelessWanMbxMailbox
,
431 NdisClassIrdaPacketInfo
,
435 typedef struct MediaSpecificInformation
{
436 UINT NextEntryOffset
;
437 NDIS_CLASS_ID ClassId
;
439 UCHAR ClassInformation
[1];
440 } MEDIA_SPECIFIC_INFORMATION
;
442 typedef struct _NDIS_PACKET_OOB_DATA
{
443 _ANONYMOUS_UNION
union {
444 ULONGLONG TimeToSend
;
447 ULONGLONG TimeReceived
;
449 UINT SizeMediaSpecificInfo
;
450 PVOID MediaSpecificInformation
;
452 } NDIS_PACKET_OOB_DATA
, *PNDIS_PACKET_OOB_DATA
;
454 typedef struct _NDIS_PM_PACKET_PATTERN
{
461 } NDIS_PM_PACKET_PATTERN
, *PNDIS_PM_PACKET_PATTERN
;
464 /* Request types used by NdisRequest */
465 typedef enum _NDIS_REQUEST_TYPE
{
466 NdisRequestQueryInformation
,
467 NdisRequestSetInformation
,
468 NdisRequestQueryStatistics
,
472 NdisRequestTransferData
,
478 } NDIS_REQUEST_TYPE
, *PNDIS_REQUEST_TYPE
;
480 typedef struct _NDIS_REQUEST
{
481 UCHAR MacReserved
[4 * sizeof(PVOID
)];
482 NDIS_REQUEST_TYPE RequestType
;
484 struct QUERY_INFORMATION
{
486 PVOID InformationBuffer
;
487 UINT InformationBufferLength
;
491 struct SET_INFORMATION
{
493 PVOID InformationBuffer
;
494 UINT InformationBufferLength
;
499 #if (defined(NDIS50) || defined(NDIS51))
500 UCHAR NdisReserved
[9 * sizeof(PVOID
)];
502 UCHAR CallMgrReserved
[2 * sizeof(PVOID
)];
503 UCHAR ProtocolReserved
[2 * sizeof(PVOID
)];
505 UCHAR MiniportReserved
[2 * sizeof(PVOID
)];
507 } NDIS_REQUEST
, *PNDIS_REQUEST
;
511 /* Wide Area Networks definitions */
513 typedef struct _NDIS_WAN_PACKET
{
514 LIST_ENTRY WanPacketQueue
;
515 PUCHAR CurrentBuffer
;
519 PVOID ProtocolReserved1
;
520 PVOID ProtocolReserved2
;
521 PVOID ProtocolReserved3
;
522 PVOID ProtocolReserved4
;
527 } NDIS_WAN_PACKET
, *PNDIS_WAN_PACKET
;
531 /* DMA channel information */
533 typedef struct _NDIS_DMA_DESCRIPTION
{
535 BOOLEAN AutoInitialize
;
536 BOOLEAN DmaChannelSpecified
;
541 } NDIS_DMA_DESCRIPTION
, *PNDIS_DMA_DESCRIPTION
;
543 typedef struct _NDIS_DMA_BLOCK
{
544 PVOID MapRegisterBase
;
545 KEVENT AllocationEvent
;
546 PADAPTER_OBJECT SystemAdapterObject
;
549 } NDIS_DMA_BLOCK
, *PNDIS_DMA_BLOCK
;
551 typedef UCHAR NDIS_DMA_SIZE
;
553 #define NDIS_DMA_24BITS ((NDIS_DMA_SIZE)0)
554 #define NDIS_DMA_32BITS ((NDIS_DMA_SIZE)1)
555 #define NDIS_DMA_64BITS ((NDIS_DMA_SIZE)2)
557 typedef enum _NDIS_PROCESSOR_TYPE
{
563 } NDIS_PROCESSOR_TYPE
, *PNDIS_PROCESSOR_TYPE
;
565 typedef enum _NDIS_ENVIRONMENT_TYPE
{
566 NdisEnvironmentWindows
,
567 NdisEnvironmentWindowsNt
568 } NDIS_ENVIRONMENT_TYPE
, *PNDIS_ENVIRONMENT_TYPE
;
570 /* Possible hardware architecture */
571 typedef enum _NDIS_INTERFACE_TYPE
{
572 NdisInterfaceInternal
= Internal
,
573 NdisInterfaceIsa
= Isa
,
574 NdisInterfaceEisa
= Eisa
,
575 NdisInterfaceMca
= MicroChannel
,
576 NdisInterfaceTurboChannel
= TurboChannel
,
577 NdisInterfacePci
= PCIBus
,
578 NdisInterfacePcMcia
= PCMCIABus
,
579 NdisInterfaceCBus
= CBus
,
580 NdisInterfaceMPIBus
= MPIBus
,
581 NdisInterfaceMPSABus
= MPSABus
,
582 NdisInterfaceProcessorInternal
= ProcessorInternal
,
583 NdisInterfaceInternalPowerBus
= InternalPowerBus
,
584 NdisInterfacePNPISABus
= PNPISABus
,
585 NdisInterfacePNPBus
= PNPBus
,
586 NdisMaximumInterfaceType
587 } NDIS_INTERFACE_TYPE
, *PNDIS_INTERFACE_TYPE
;
589 #define NdisInterruptLevelSensitive LevelSensitive
590 #define NdisInterruptLatched Latched
591 typedef KINTERRUPT_MODE NDIS_INTERRUPT_MODE
, *PNDIS_INTERRUPT_MODE
;
594 typedef enum _NDIS_PARAMETER_TYPE
{
595 NdisParameterInteger
,
596 NdisParameterHexInteger
,
598 NdisParameterMultiString
,
600 } NDIS_PARAMETER_TYPE
, *PNDIS_PARAMETER_TYPE
;
607 typedef struct _NDIS_CONFIGURATION_PARAMETER
{
608 NDIS_PARAMETER_TYPE ParameterType
;
611 NDIS_STRING StringData
;
612 BINARY_DATA BinaryData
;
614 } NDIS_CONFIGURATION_PARAMETER
, *PNDIS_CONFIGURATION_PARAMETER
;
617 typedef PHYSICAL_ADDRESS NDIS_PHYSICAL_ADDRESS
, *PNDIS_PHYSICAL_ADDRESS
;
619 typedef struct _NDIS_PHYSICAL_ADDRESS_UNIT
{
620 NDIS_PHYSICAL_ADDRESS PhysicalAddress
;
622 } NDIS_PHYSICAL_ADDRESS_UNIT
, *PNDIS_PHYSICAL_ADDRESS_UNIT
;
624 typedef struct _NDIS_WAN_LINE_DOWN
{
625 UCHAR RemoteAddress
[6];
626 UCHAR LocalAddress
[6];
627 } NDIS_WAN_LINE_DOWN
, *PNDIS_WAN_LINE_DOWN
;
629 typedef struct _NDIS_WAN_LINE_UP
{
631 ULONG MaximumTotalSize
;
632 NDIS_WAN_QUALITY Quality
;
634 UCHAR RemoteAddress
[6];
635 OUT UCHAR LocalAddress
[6];
636 ULONG ProtocolBufferLength
;
637 PUCHAR ProtocolBuffer
;
639 NDIS_STRING DeviceName
;
640 } NDIS_WAN_LINE_UP
, *PNDIS_WAN_LINE_UP
;
644 (*ADAPTER_SHUTDOWN_HANDLER
)(
645 IN PVOID ShutdownContext
);
648 typedef struct _OID_LIST OID_LIST
, *POID_LIST
;
652 typedef enum _NDIS_PNP_DEVICE_STATE
{
654 NdisPnPDeviceStarted
,
655 NdisPnPDeviceQueryStopped
,
656 NdisPnPDeviceStopped
,
657 NdisPnPDeviceQueryRemoved
,
658 NdisPnPDeviceRemoved
,
659 NdisPnPDeviceSurpriseRemoved
660 } NDIS_PNP_DEVICE_STATE
;
662 #define NDIS_DEVICE_NOT_STOPPABLE 0x00000001
663 #define NDIS_DEVICE_NOT_REMOVEABLE 0x00000002
664 #define NDIS_DEVICE_NOT_SUSPENDABLE 0x00000004
665 #define NDIS_DEVICE_DISABLE_PM 0x00000008
666 #define NDIS_DEVICE_DISABLE_WAKE_UP 0x00000010
667 #define NDIS_DEVICE_DISABLE_WAKE_ON_RECONNECT 0x00000020
668 #define NDIS_DEVICE_RESERVED 0x00000040
669 #define NDIS_DEVICE_DISABLE_WAKE_ON_MAGIC_PACKET 0x00000080
670 #define NDIS_DEVICE_DISABLE_WAKE_ON_PATTERN_MATCH 0x00000100
673 /* OID_GEN_NETWORK_LAYER_ADDRESSES */
674 typedef struct _NETWORK_ADDRESS
{
675 USHORT AddressLength
;
678 } NETWORK_ADDRESS
, *PNETWORK_ADDRESS
;
680 typedef struct _NETWORK_ADDRESS_LIST
{
683 NETWORK_ADDRESS Address
[1];
684 } NETWORK_ADDRESS_LIST
, *PNETWORK_ADDRESS_LIST
;
686 /* Protocol types supported by NDIS */
687 #define NDIS_PROTOCOL_ID_DEFAULT 0x00
688 #define NDIS_PROTOCOL_ID_TCP_IP 0x02
689 #define NDIS_PROTOCOL_ID_IPX 0x06
690 #define NDIS_PROTOCOL_ID_NBF 0x07
691 #define NDIS_PROTOCOL_ID_MAX 0x0F
692 #define NDIS_PROTOCOL_ID_MASK 0x0F
695 /* OID_GEN_TRANSPORT_HEADER_OFFSET */
696 typedef struct _TRANSPORT_HEADER_OFFSET
{
699 } TRANSPORT_HEADER_OFFSET
, *PTRANSPORT_HEADER_OFFSET
;
702 /* OID_GEN_CO_LINK_SPEED / OID_GEN_CO_MINIMUM_LINK_SPEED */
703 typedef struct _NDIS_CO_LINK_SPEED
{
706 } NDIS_CO_LINK_SPEED
, *PNDIS_CO_LINK_SPEED
;
708 typedef ULONG NDIS_AF
, *PNDIS_AF
;
709 #define CO_ADDRESS_FAMILY_Q2931 ((NDIS_AF)0x1)
710 #define CO_ADDRESS_FAMILY_PSCHED ((NDIS_AF)0x2)
711 #define CO_ADDRESS_FAMILY_L2TP ((NDIS_AF)0x3)
712 #define CO_ADDRESS_FAMILY_IRDA ((NDIS_AF)0x4)
713 #define CO_ADDRESS_FAMILY_1394 ((NDIS_AF)0x5)
714 #define CO_ADDRESS_FAMILY_PPP ((NDIS_AF)0x6)
715 #define CO_ADDRESS_FAMILY_TAPI ((NDIS_AF)0x800)
716 #define CO_ADDRESS_FAMILY_TAPI_PROXY ((NDIS_AF)0x801)
718 #define CO_ADDRESS_FAMILY_PROXY 0x80000000
721 NDIS_AF AddressFamily
;
724 } CO_ADDRESS_FAMILY
, *PCO_ADDRESS_FAMILY
;
726 typedef struct _CO_SPECIFIC_PARAMETERS
{
730 } CO_SPECIFIC_PARAMETERS
, *PCO_SPECIFIC_PARAMETERS
;
732 typedef struct _CO_CALL_MANAGER_PARAMETERS
{
735 CO_SPECIFIC_PARAMETERS CallMgrSpecific
;
736 } CO_CALL_MANAGER_PARAMETERS
, *PCO_CALL_MANAGER_PARAMETERS
;
738 /* CO_MEDIA_PARAMETERS.Flags constants */
739 #define RECEIVE_TIME_INDICATION 0x00000001
740 #define USE_TIME_STAMPS 0x00000002
741 #define TRANSMIT_VC 0x00000004
742 #define RECEIVE_VC 0x00000008
743 #define INDICATE_ERRED_PACKETS 0x00000010
744 #define INDICATE_END_OF_TX 0x00000020
745 #define RESERVE_RESOURCES_VC 0x00000040
746 #define ROUND_DOWN_FLOW 0x00000080
747 #define ROUND_UP_FLOW 0x00000100
749 typedef struct _CO_MEDIA_PARAMETERS
{
751 ULONG ReceivePriority
;
752 ULONG ReceiveSizeHint
;
753 CO_SPECIFIC_PARAMETERS MediaSpecific
;
754 } CO_MEDIA_PARAMETERS
, *PCO_MEDIA_PARAMETERS
;
756 /* CO_CALL_PARAMETERS.Flags constants */
757 #define PERMANENT_VC 0x00000001
758 #define CALL_PARAMETERS_CHANGED 0x00000002
759 #define QUERY_CALL_PARAMETERS 0x00000004
760 #define BROADCAST_VC 0x00000008
761 #define MULTIPOINT_VC 0x00000010
763 typedef struct _CO_CALL_PARAMETERS
{
765 PCO_CALL_MANAGER_PARAMETERS CallMgrParameters
;
766 PCO_MEDIA_PARAMETERS MediaParameters
;
767 } CO_CALL_PARAMETERS
, *PCO_CALL_PARAMETERS
;
769 typedef struct _CO_SAP
{
775 typedef struct _NDIS_IPSEC_PACKET_INFO
{
776 _ANONYMOUS_UNION
union {
778 NDIS_HANDLE OffloadHandle
;
779 NDIS_HANDLE NextOffloadHandle
;
782 ULONG SA_DELETE_REQ
: 1;
783 ULONG CRYPTO_DONE
: 1;
784 ULONG NEXT_CRYPTO_DONE
: 1;
788 } NDIS_IPSEC_PACKET_INFO
, *PNDIS_IPSEC_PACKET_INFO
;
790 /* NDIS_MAC_FRAGMENT.Errors constants */
791 #define WAN_ERROR_CRC 0x00000001
792 #define WAN_ERROR_FRAMING 0x00000002
793 #define WAN_ERROR_HARDWAREOVERRUN 0x00000004
794 #define WAN_ERROR_BUFFEROVERRUN 0x00000008
795 #define WAN_ERROR_TIMEOUT 0x00000010
796 #define WAN_ERROR_ALIGNMENT 0x00000020
798 typedef struct _NDIS_MAC_FRAGMENT
{
799 NDIS_HANDLE NdisLinkContext
;
801 } NDIS_MAC_FRAGMENT
, *PNDIS_MAC_FRAGMENT
;
803 typedef struct _NDIS_MAC_LINE_DOWN
{
804 NDIS_HANDLE NdisLinkContext
;
805 } NDIS_MAC_LINE_DOWN
, *PNDIS_MAC_LINE_DOWN
;
807 typedef struct _NDIS_MAC_LINE_UP
{
809 NDIS_WAN_QUALITY Quality
;
811 NDIS_HANDLE ConnectionWrapperID
;
812 NDIS_HANDLE NdisLinkHandle
;
813 NDIS_HANDLE NdisLinkContext
;
814 } NDIS_MAC_LINE_UP
, *PNDIS_MAC_LINE_UP
;
816 typedef struct _NDIS_PACKET_8021Q_INFO
{
817 _ANONYMOUS_UNION
union {
819 UINT32 UserPriority
: 3;
820 UINT32 CanonicalFormatId
: 1;
822 UINT32 Reserved
: 16;
826 } NDIS_PACKET_8021Q_INFO
, *PNDIS_PACKET_8021Q_INFO
;
828 typedef enum _NDIS_PER_PACKET_INFO
{
829 TcpIpChecksumPacketInfo
,
831 TcpLargeSendPacketInfo
,
832 ClassificationHandlePacketInfo
,
834 ScatterGatherListPacketInfo
,
839 } NDIS_PER_PACKET_INFO
, *PNDIS_PER_PACKET_INFO
;
841 typedef struct _NDIS_PACKET_EXTENSION
{
842 PVOID NdisPacketInfo
[MaxPerPacketInfo
];
843 } NDIS_PACKET_EXTENSION
, *PNDIS_PACKET_EXTENSION
;
845 typedef struct _NDIS_OBJECT_HEADER
{
849 } NDIS_OBJECT_HEADER
, *PNDIS_OBJECT_HEADER
;
851 typedef struct _NDIS_GENERIC_OBJECT
{
852 NDIS_OBJECT_HEADER Header
;
855 PDRIVER_OBJECT DriverObject
;
856 } NDIS_GENERIC_OBJECT
, *PNDIS_GENERIC_OBJECT
;
860 * NDIS_GET_ORIGINAL_PACKET(
861 * IN PNDIS_PACKET Packet);
863 #define NDIS_GET_ORIGINAL_PACKET(Packet) \
864 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo)
868 * NDIS_GET_PACKET_CANCEL_ID(
869 * IN PNDIS_PACKET Packet);
871 #define NDIS_GET_PACKET_CANCEL_ID(Packet) \
872 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId)
875 * PNDIS_PACKET_EXTENSION
876 * NDIS_PACKET_EXTENSION_FROM_PACKET(
877 * IN PNDIS_PACKET Packet);
879 #define NDIS_PACKET_EXTENSION_FROM_PACKET(Packet) \
880 ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) \
881 + (Packet)->Private.NdisPacketOobOffset + sizeof(NDIS_PACKET_OOB_DATA)))
885 * NDIS_PER_PACKET_INFO_FROM_PACKET(
886 * IN OUT PNDIS_PACKET Packet,
887 * IN NDIS_PER_PACKET_INFO InfoType);
889 #define NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, InfoType) \
890 ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) + (Packet)->Private.NdisPacketOobOffset \
891 + sizeof(NDIS_PACKET_OOB_DATA)))->NdisPacketInfo[(InfoType)]
895 * NDIS_SET_ORIGINAL_PACKET(
896 * IN OUT PNDIS_PACKET Packet,
897 * IN PNDIS_PACKET OriginalPacket);
899 #define NDIS_SET_ORIGINAL_PACKET(Packet, OriginalPacket) \
900 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo) = (OriginalPacket)
904 * NDIS_SET_PACKET_CANCEL_ID(
905 * IN PNDIS_PACKET Packet
906 * IN ULONG_PTR CancelId);
908 #define NDIS_SET_PACKET_CANCEL_ID(Packet, CancelId) \
909 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId) = (CancelId)
911 typedef enum _NDIS_TASK
{
912 TcpIpChecksumNdisTask
,
914 TcpLargeSendNdisTask
,
916 } NDIS_TASK
, *PNDIS_TASK
;
918 typedef struct _NDIS_TASK_IPSEC
{
920 ULONG AH_ESP_COMBINED
;
921 ULONG TRANSPORT_TUNNEL_COMBINED
;
938 ULONG TRIPLE_DES
: 1;
945 } NDIS_TASK_IPSEC
, *PNDIS_TASK_IPSEC
;
947 typedef struct _NDIS_TASK_OFFLOAD
{
951 ULONG OffsetNextTask
;
952 ULONG TaskBufferLength
;
954 } NDIS_TASK_OFFLOAD
, *PNDIS_TASK_OFFLOAD
;
956 /* NDIS_TASK_OFFLOAD_HEADER.Version constants */
957 #define NDIS_TASK_OFFLOAD_VERSION 1
959 typedef enum _NDIS_ENCAPSULATION
{
960 UNSPECIFIED_Encapsulation
,
962 IEEE_802_3_Encapsulation
,
963 IEEE_802_5_Encapsulation
,
964 LLC_SNAP_ROUTED_Encapsulation
,
965 LLC_SNAP_BRIDGED_Encapsulation
966 } NDIS_ENCAPSULATION
;
968 typedef struct _NDIS_ENCAPSULATION_FORMAT
{
969 NDIS_ENCAPSULATION Encapsulation
;
971 ULONG FixedHeaderSize
: 1;
974 ULONG EncapsulationHeaderSize
;
975 } NDIS_ENCAPSULATION_FORMAT
, *PNDIS_ENCAPSULATION_FORMAT
;
977 typedef struct _NDIS_TASK_TCP_IP_CHECKSUM
{
979 ULONG IpOptionsSupported
:1;
980 ULONG TcpOptionsSupported
:1;
987 ULONG IpOptionsSupported
: 1;
988 ULONG TcpOptionsSupported
: 1;
989 ULONG TcpChecksum
: 1;
990 ULONG UdpChecksum
: 1;
991 ULONG IpChecksum
: 1;
995 ULONG IpOptionsSupported
: 1;
996 ULONG TcpOptionsSupported
: 1;
997 ULONG TcpChecksum
: 1;
998 ULONG UdpChecksum
: 1;
1002 ULONG IpOptionsSupported
: 1;
1003 ULONG TcpOptionsSupported
: 1;
1004 ULONG TcpChecksum
: 1;
1005 ULONG UdpChecksum
: 1;
1007 } NDIS_TASK_TCP_IP_CHECKSUM
, *PNDIS_TASK_TCP_IP_CHECKSUM
;
1009 typedef struct _NDIS_TASK_TCP_LARGE_SEND
{
1011 ULONG MaxOffLoadSize
;
1012 ULONG MinSegmentCount
;
1015 } NDIS_TASK_TCP_LARGE_SEND
, *PNDIS_TASK_TCP_LARGE_SEND
;
1017 typedef struct _NDIS_TCP_IP_CHECKSUM_PACKET_INFO
{
1018 _ANONYMOUS_UNION
union {
1020 ULONG NdisPacketChecksumV4
: 1;
1021 ULONG NdisPacketChecksumV6
: 1;
1022 ULONG NdisPacketTcpChecksum
: 1;
1023 ULONG NdisPacketUdpChecksum
: 1;
1024 ULONG NdisPacketIpChecksum
: 1;
1028 ULONG NdisPacketTcpChecksumFailed
: 1;
1029 ULONG NdisPacketUdpChecksumFailed
: 1;
1030 ULONG NdisPacketIpChecksumFailed
: 1;
1031 ULONG NdisPacketTcpChecksumSucceeded
: 1;
1032 ULONG NdisPacketUdpChecksumSucceeded
: 1;
1033 ULONG NdisPacketIpChecksumSucceeded
: 1;
1034 ULONG NdisPacketLoopback
: 1;
1038 } NDIS_TCP_IP_CHECKSUM_PACKET_INFO
, *PNDIS_TCP_IP_CHECKSUM_PACKET_INFO
;
1040 typedef struct _NDIS_WAN_CO_FRAGMENT
{
1042 } NDIS_WAN_CO_FRAGMENT
, *PNDIS_WAN_CO_FRAGMENT
;
1044 typedef struct _NDIS_WAN_FRAGMENT
{
1045 UCHAR RemoteAddress
[6];
1046 UCHAR LocalAddress
[6];
1047 } NDIS_WAN_FRAGMENT
, *PNDIS_WAN_FRAGMENT
;
1049 typedef struct _WAN_CO_LINKPARAMS
{
1050 ULONG TransmitSpeed
;
1053 } WAN_CO_LINKPARAMS
, *PWAN_CO_LINKPARAMS
;
1059 (*CM_ACTIVATE_VC_COMPLETE_HANDLER
)(
1060 IN NDIS_STATUS Status
,
1061 IN NDIS_HANDLE CallMgrVcContext
,
1062 IN PCO_CALL_PARAMETERS CallParameters
);
1064 typedef NDIS_STATUS DDKAPI
1065 (*CM_ADD_PARTY_HANDLER
)(
1066 IN NDIS_HANDLE CallMgrVcContext
,
1067 IN OUT PCO_CALL_PARAMETERS CallParameters
,
1068 IN NDIS_HANDLE NdisPartyHandle
,
1069 OUT PNDIS_HANDLE CallMgrPartyContext
);
1071 typedef NDIS_STATUS DDKAPI
1072 (*CM_CLOSE_AF_HANDLER
)(
1073 IN NDIS_HANDLE CallMgrAfContext
);
1075 typedef NDIS_STATUS DDKAPI
1076 (*CM_CLOSE_CALL_HANDLER
)(
1077 IN NDIS_HANDLE CallMgrVcContext
,
1078 IN NDIS_HANDLE CallMgrPartyContext OPTIONAL
,
1079 IN PVOID CloseData OPTIONAL
,
1080 IN UINT Size OPTIONAL
);
1082 typedef NDIS_STATUS DDKAPI
1083 (*CM_DEREG_SAP_HANDLER
)(
1084 IN NDIS_HANDLE CallMgrSapContext
);
1087 (*CM_DEACTIVATE_VC_COMPLETE_HANDLER
)(
1088 IN NDIS_STATUS Status
,
1089 IN NDIS_HANDLE CallMgrVcContext
);
1091 typedef NDIS_STATUS DDKAPI
1092 (*CM_DROP_PARTY_HANDLER
)(
1093 IN NDIS_HANDLE CallMgrPartyContext
,
1094 IN PVOID CloseData OPTIONAL
,
1095 IN UINT Size OPTIONAL
);
1098 (*CM_INCOMING_CALL_COMPLETE_HANDLER
)(
1099 IN NDIS_STATUS Status
,
1100 IN NDIS_HANDLE CallMgrVcContext
,
1101 IN PCO_CALL_PARAMETERS CallParameters
);
1103 typedef NDIS_STATUS DDKAPI
1104 (*CM_MAKE_CALL_HANDLER
)(
1105 IN NDIS_HANDLE CallMgrVcContext
,
1106 IN OUT PCO_CALL_PARAMETERS CallParameters
,
1107 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
1108 OUT PNDIS_HANDLE CallMgrPartyContext OPTIONAL
);
1110 typedef NDIS_STATUS DDKAPI
1111 (*CM_MODIFY_CALL_QOS_HANDLER
)(
1112 IN NDIS_HANDLE CallMgrVcContext
,
1113 IN PCO_CALL_PARAMETERS CallParameters
);
1115 typedef NDIS_STATUS DDKAPI
1116 (*CM_OPEN_AF_HANDLER
)(
1117 IN NDIS_HANDLE CallMgrBindingContext
,
1118 IN PCO_ADDRESS_FAMILY AddressFamily
,
1119 IN NDIS_HANDLE NdisAfHandle
,
1120 OUT PNDIS_HANDLE CallMgrAfContext
);
1122 typedef NDIS_STATUS DDKAPI
1123 (*CM_REG_SAP_HANDLER
)(
1124 IN NDIS_HANDLE CallMgrAfContext
,
1126 IN NDIS_HANDLE NdisSapHandle
,
1127 OUT PNDIS_HANDLE CallMgrSapContext
);
1129 typedef NDIS_STATUS DDKAPI
1130 (*CO_CREATE_VC_HANDLER
)(
1131 IN NDIS_HANDLE ProtocolAfContext
,
1132 IN NDIS_HANDLE NdisVcHandle
,
1133 OUT PNDIS_HANDLE ProtocolVcContext
);
1135 typedef NDIS_STATUS DDKAPI
1136 (*CO_DELETE_VC_HANDLER
)(
1137 IN NDIS_HANDLE ProtocolVcContext
);
1140 (*CO_REQUEST_COMPLETE_HANDLER
)(
1141 IN NDIS_STATUS Status
,
1142 IN NDIS_HANDLE ProtocolAfContext OPTIONAL
,
1143 IN NDIS_HANDLE ProtocolVcContext OPTIONAL
,
1144 IN NDIS_HANDLE ProtocolPartyContext OPTIONAL
,
1145 IN PNDIS_REQUEST NdisRequest
);
1147 typedef NDIS_STATUS DDKAPI
1148 (*CO_REQUEST_HANDLER
)(
1149 IN NDIS_HANDLE ProtocolAfContext
,
1150 IN NDIS_HANDLE ProtocolVcContext OPTIONAL
,
1151 IN NDIS_HANDLE ProtocolPartyContext OPTIONAL
,
1152 IN OUT PNDIS_REQUEST NdisRequest
);
1154 typedef struct _NDIS_CALL_MANAGER_CHARACTERISTICS
{
1159 CO_CREATE_VC_HANDLER CmCreateVcHandler
;
1160 CO_DELETE_VC_HANDLER CmDeleteVcHandler
;
1161 CM_OPEN_AF_HANDLER CmOpenAfHandler
;
1162 CM_CLOSE_AF_HANDLER CmCloseAfHandler
;
1163 CM_REG_SAP_HANDLER CmRegisterSapHandler
;
1164 CM_DEREG_SAP_HANDLER CmDeregisterSapHandler
;
1165 CM_MAKE_CALL_HANDLER CmMakeCallHandler
;
1166 CM_CLOSE_CALL_HANDLER CmCloseCallHandler
;
1167 CM_INCOMING_CALL_COMPLETE_HANDLER CmIncomingCallCompleteHandler
;
1168 CM_ADD_PARTY_HANDLER CmAddPartyHandler
;
1169 CM_DROP_PARTY_HANDLER CmDropPartyHandler
;
1170 CM_ACTIVATE_VC_COMPLETE_HANDLER CmActivateVcCompleteHandler
;
1171 CM_DEACTIVATE_VC_COMPLETE_HANDLER CmDeactivateVcCompleteHandler
;
1172 CM_MODIFY_CALL_QOS_HANDLER CmModifyCallQoSHandler
;
1173 CO_REQUEST_HANDLER CmRequestHandler
;
1174 CO_REQUEST_COMPLETE_HANDLER CmRequestCompleteHandler
;
1175 } NDIS_CALL_MANAGER_CHARACTERISTICS
, *PNDIS_CALL_MANAGER_CHARACTERISTICS
;
1179 /* Call Manager clients */
1181 typedef VOID (*CL_OPEN_AF_COMPLETE_HANDLER
)(
1182 IN NDIS_STATUS Status
,
1183 IN NDIS_HANDLE ProtocolAfContext
,
1184 IN NDIS_HANDLE NdisAfHandle
);
1187 (*CL_CLOSE_AF_COMPLETE_HANDLER
)(
1188 IN NDIS_STATUS Status
,
1189 IN NDIS_HANDLE ProtocolAfContext
);
1192 (*CL_REG_SAP_COMPLETE_HANDLER
)(
1193 IN NDIS_STATUS Status
,
1194 IN NDIS_HANDLE ProtocolSapContext
,
1196 IN NDIS_HANDLE NdisSapHandle
);
1199 (*CL_DEREG_SAP_COMPLETE_HANDLER
)(
1200 IN NDIS_STATUS Status
,
1201 IN NDIS_HANDLE ProtocolSapContext
);
1204 (*CL_MAKE_CALL_COMPLETE_HANDLER
)(
1205 IN NDIS_STATUS Status
,
1206 IN NDIS_HANDLE ProtocolVcContext
,
1207 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
1208 IN PCO_CALL_PARAMETERS CallParameters
);
1211 (*CL_MODIFY_CALL_QOS_COMPLETE_HANDLER
)(
1212 IN NDIS_STATUS Status
,
1213 IN NDIS_HANDLE ProtocolVcContext
,
1214 IN PCO_CALL_PARAMETERS CallParameters
);
1217 (*CL_CLOSE_CALL_COMPLETE_HANDLER
)(
1218 IN NDIS_STATUS Status
,
1219 IN NDIS_HANDLE ProtocolVcContext
,
1220 IN NDIS_HANDLE ProtocolPartyContext OPTIONAL
);
1223 (*CL_ADD_PARTY_COMPLETE_HANDLER
)(
1224 IN NDIS_STATUS Status
,
1225 IN NDIS_HANDLE ProtocolPartyContext
,
1226 IN NDIS_HANDLE NdisPartyHandle
,
1227 IN PCO_CALL_PARAMETERS CallParameters
);
1230 (*CL_DROP_PARTY_COMPLETE_HANDLER
)(
1231 IN NDIS_STATUS Status
,
1232 IN NDIS_HANDLE ProtocolPartyContext
);
1234 typedef NDIS_STATUS DDKAPI
1235 (*CL_INCOMING_CALL_HANDLER
)(
1236 IN NDIS_HANDLE ProtocolSapContext
,
1237 IN NDIS_HANDLE ProtocolVcContext
,
1238 IN OUT PCO_CALL_PARAMETERS CallParameters
);
1241 (*CL_INCOMING_CALL_QOS_CHANGE_HANDLER
)(
1242 IN NDIS_HANDLE ProtocolVcContext
,
1243 IN PCO_CALL_PARAMETERS CallParameters
);
1246 (*CL_INCOMING_CLOSE_CALL_HANDLER
)(
1247 IN NDIS_STATUS CloseStatus
,
1248 IN NDIS_HANDLE ProtocolVcContext
,
1249 IN PVOID CloseData OPTIONAL
,
1250 IN UINT Size OPTIONAL
);
1253 (*CL_INCOMING_DROP_PARTY_HANDLER
)(
1254 IN NDIS_STATUS DropStatus
,
1255 IN NDIS_HANDLE ProtocolPartyContext
,
1256 IN PVOID CloseData OPTIONAL
,
1257 IN UINT Size OPTIONAL
);
1260 (*CL_CALL_CONNECTED_HANDLER
)(
1261 IN NDIS_HANDLE ProtocolVcContext
);
1264 typedef struct _NDIS_CLIENT_CHARACTERISTICS
{
1269 CO_CREATE_VC_HANDLER ClCreateVcHandler
;
1270 CO_DELETE_VC_HANDLER ClDeleteVcHandler
;
1271 CO_REQUEST_HANDLER ClRequestHandler
;
1272 CO_REQUEST_COMPLETE_HANDLER ClRequestCompleteHandler
;
1273 CL_OPEN_AF_COMPLETE_HANDLER ClOpenAfCompleteHandler
;
1274 CL_CLOSE_AF_COMPLETE_HANDLER ClCloseAfCompleteHandler
;
1275 CL_REG_SAP_COMPLETE_HANDLER ClRegisterSapCompleteHandler
;
1276 CL_DEREG_SAP_COMPLETE_HANDLER ClDeregisterSapCompleteHandler
;
1277 CL_MAKE_CALL_COMPLETE_HANDLER ClMakeCallCompleteHandler
;
1278 CL_MODIFY_CALL_QOS_COMPLETE_HANDLER ClModifyCallQoSCompleteHandler
;
1279 CL_CLOSE_CALL_COMPLETE_HANDLER ClCloseCallCompleteHandler
;
1280 CL_ADD_PARTY_COMPLETE_HANDLER ClAddPartyCompleteHandler
;
1281 CL_DROP_PARTY_COMPLETE_HANDLER ClDropPartyCompleteHandler
;
1282 CL_INCOMING_CALL_HANDLER ClIncomingCallHandler
;
1283 CL_INCOMING_CALL_QOS_CHANGE_HANDLER ClIncomingCallQoSChangeHandler
;
1284 CL_INCOMING_CLOSE_CALL_HANDLER ClIncomingCloseCallHandler
;
1285 CL_INCOMING_DROP_PARTY_HANDLER ClIncomingDropPartyHandler
;
1286 CL_CALL_CONNECTED_HANDLER ClCallConnectedHandler
;
1287 } NDIS_CLIENT_CHARACTERISTICS
, *PNDIS_CLIENT_CHARACTERISTICS
;
1290 /* NDIS protocol structures */
1292 /* Prototypes for NDIS 3.0 protocol characteristics */
1295 (*OPEN_ADAPTER_COMPLETE_HANDLER
)(
1296 IN NDIS_HANDLE ProtocolBindingContext
,
1297 IN NDIS_STATUS Status
,
1298 IN NDIS_STATUS OpenErrorStatus
);
1301 (*CLOSE_ADAPTER_COMPLETE_HANDLER
)(
1302 IN NDIS_HANDLE ProtocolBindingContext
,
1303 IN NDIS_STATUS Status
);
1306 (*RESET_COMPLETE_HANDLER
)(
1307 IN NDIS_HANDLE ProtocolBindingContext
,
1308 IN NDIS_STATUS Status
);
1311 (*REQUEST_COMPLETE_HANDLER
)(
1312 IN NDIS_HANDLE ProtocolBindingContext
,
1313 IN PNDIS_REQUEST NdisRequest
,
1314 IN NDIS_STATUS Status
);
1318 IN NDIS_HANDLE ProtocolBindingContext
,
1319 IN NDIS_STATUS GeneralStatus
,
1320 IN PVOID StatusBuffer
,
1321 IN UINT StatusBufferSize
);
1324 (*STATUS_COMPLETE_HANDLER
)(
1325 IN NDIS_HANDLE ProtocolBindingContext
);
1328 (*SEND_COMPLETE_HANDLER
)(
1329 IN NDIS_HANDLE ProtocolBindingContext
,
1330 IN PNDIS_PACKET Packet
,
1331 IN NDIS_STATUS Status
);
1334 (*WAN_SEND_COMPLETE_HANDLER
)(
1335 IN NDIS_HANDLE ProtocolBindingContext
,
1336 IN PNDIS_WAN_PACKET Packet
,
1337 IN NDIS_STATUS Status
);
1340 (*TRANSFER_DATA_COMPLETE_HANDLER
)(
1341 IN NDIS_HANDLE ProtocolBindingContext
,
1342 IN PNDIS_PACKET Packet
,
1343 IN NDIS_STATUS Status
,
1344 IN UINT BytesTransferred
);
1347 (*WAN_TRANSFER_DATA_COMPLETE_HANDLER
)(
1351 typedef NDIS_STATUS DDKAPI
1353 IN NDIS_HANDLE ProtocolBindingContext
,
1354 IN NDIS_HANDLE MacReceiveContext
,
1355 IN PVOID HeaderBuffer
,
1356 IN UINT HeaderBufferSize
,
1357 IN PVOID LookAheadBuffer
,
1358 IN UINT LookaheadBufferSize
,
1359 IN UINT PacketSize
);
1361 typedef NDIS_STATUS DDKAPI
1362 (*WAN_RECEIVE_HANDLER
)(
1363 IN NDIS_HANDLE NdisLinkHandle
,
1365 IN ULONG PacketSize
);
1368 (*RECEIVE_COMPLETE_HANDLER
)(
1369 IN NDIS_HANDLE ProtocolBindingContext
);
1372 /* Protocol characteristics for NDIS 3.0 protocols */
1374 #define NDIS30_PROTOCOL_CHARACTERISTICS_S \
1375 UCHAR MajorNdisVersion; \
1376 UCHAR MinorNdisVersion; \
1378 _ANONYMOUS_UNION union { \
1382 OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler; \
1383 CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler; \
1384 _ANONYMOUS_UNION union { \
1385 SEND_COMPLETE_HANDLER SendCompleteHandler; \
1386 WAN_SEND_COMPLETE_HANDLER WanSendCompleteHandler; \
1387 } DUMMYUNIONNAME2; \
1388 _ANONYMOUS_UNION union { \
1389 TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler; \
1390 WAN_TRANSFER_DATA_COMPLETE_HANDLER WanTransferDataCompleteHandler; \
1391 } DUMMYUNIONNAME3; \
1392 RESET_COMPLETE_HANDLER ResetCompleteHandler; \
1393 REQUEST_COMPLETE_HANDLER RequestCompleteHandler; \
1394 _ANONYMOUS_UNION union { \
1395 RECEIVE_HANDLER ReceiveHandler; \
1396 WAN_RECEIVE_HANDLER WanReceiveHandler; \
1397 } DUMMYUNIONNAME4; \
1398 RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler; \
1399 STATUS_HANDLER StatusHandler; \
1400 STATUS_COMPLETE_HANDLER StatusCompleteHandler; \
1403 typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS
{
1404 NDIS30_PROTOCOL_CHARACTERISTICS_S
1405 } NDIS30_PROTOCOL_CHARACTERISTICS
, *PNDIS30_PROTOCOL_CHARACTERISTICS
;
1408 /* Prototypes for NDIS 4.0 protocol characteristics */
1411 (*RECEIVE_PACKET_HANDLER
)(
1412 IN NDIS_HANDLE ProtocolBindingContext
,
1413 IN PNDIS_PACKET Packet
);
1417 OUT PNDIS_STATUS Status
,
1418 IN NDIS_HANDLE BindContext
,
1419 IN PNDIS_STRING DeviceName
,
1420 IN PVOID SystemSpecific1
,
1421 IN PVOID SystemSpecific2
);
1425 OUT PNDIS_STATUS Status
,
1426 IN NDIS_HANDLE ProtocolBindingContext
,
1427 IN NDIS_HANDLE UnbindContext
);
1429 typedef NDIS_STATUS DDKAPI
1430 (*PNP_EVENT_HANDLER
)(
1431 IN NDIS_HANDLE ProtocolBindingContext
,
1432 IN PNET_PNP_EVENT NetPnPEvent
);
1435 (*UNLOAD_PROTOCOL_HANDLER
)(
1439 /* Protocol characteristics for NDIS 4.0 protocols */
1443 #define NDIS40_PROTOCOL_CHARACTERISTICS_S \
1444 NDIS30_PROTOCOL_CHARACTERISTICS Ndis30Chars; \
1445 RECEIVE_PACKET_HANDLER ReceivePacketHandler; \
1446 BIND_HANDLER BindAdapterHandler; \
1447 UNBIND_HANDLER UnbindAdapterHandler; \
1448 PNP_EVENT_HANDLER PnPEventHandler; \
1449 UNLOAD_PROTOCOL_HANDLER UnloadHandler;
1451 #else /* !__cplusplus */
1453 #define NDIS40_PROTOCOL_CHARACTERISTICS_S \
1454 NDIS30_PROTOCOL_CHARACTERISTICS_S \
1455 RECEIVE_PACKET_HANDLER ReceivePacketHandler; \
1456 BIND_HANDLER BindAdapterHandler; \
1457 UNBIND_HANDLER UnbindAdapterHandler; \
1458 PNP_EVENT_HANDLER PnPEventHandler; \
1459 UNLOAD_PROTOCOL_HANDLER UnloadHandler;
1461 #endif /* __cplusplus */
1463 typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS
{
1464 NDIS40_PROTOCOL_CHARACTERISTICS_S
1465 } NDIS40_PROTOCOL_CHARACTERISTICS
, *PNDIS40_PROTOCOL_CHARACTERISTICS
;
1467 /* Prototypes for NDIS 5.0 protocol characteristics */
1470 (*CO_SEND_COMPLETE_HANDLER
)(
1471 IN NDIS_STATUS Status
,
1472 IN NDIS_HANDLE ProtocolVcContext
,
1473 IN PNDIS_PACKET Packet
);
1476 (*CO_STATUS_HANDLER
)(
1477 IN NDIS_HANDLE ProtocolBindingContext
,
1478 IN NDIS_HANDLE ProtocolVcContext OPTIONAL
,
1479 IN NDIS_STATUS GeneralStatus
,
1480 IN PVOID StatusBuffer
,
1481 IN UINT StatusBufferSize
);
1484 (*CO_RECEIVE_PACKET_HANDLER
)(
1485 IN NDIS_HANDLE ProtocolBindingContext
,
1486 IN NDIS_HANDLE ProtocolVcContext
,
1487 IN PNDIS_PACKET Packet
);
1490 (*CO_AF_REGISTER_NOTIFY_HANDLER
)(
1491 IN NDIS_HANDLE ProtocolBindingContext
,
1492 IN PCO_ADDRESS_FAMILY AddressFamily
);
1494 #ifdef __cplusplus \
1496 #define NDIS50_PROTOCOL_CHARACTERISTICS_S \
1497 NDIS40_PROTOCOL_CHARACTERISTICS Ndis40Chars; \
1498 PVOID ReservedHandlers[4]; \
1499 CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler; \
1500 CO_STATUS_HANDLER CoStatusHandler; \
1501 CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler; \
1502 CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
1504 #else /* !__cplusplus */
1506 #define NDIS50_PROTOCOL_CHARACTERISTICS_S \
1507 NDIS40_PROTOCOL_CHARACTERISTICS_S \
1508 PVOID ReservedHandlers[4]; \
1509 CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler; \
1510 CO_STATUS_HANDLER CoStatusHandler; \
1511 CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler; \
1512 CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
1514 #endif /* !__cplusplus */
1516 typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS
{
1517 NDIS50_PROTOCOL_CHARACTERISTICS_S
1518 } NDIS50_PROTOCOL_CHARACTERISTICS
, *PNDIS50_PROTOCOL_CHARACTERISTICS
;
1520 #if defined(NDIS50) || defined(NDIS51)
1521 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS
{
1522 NDIS50_PROTOCOL_CHARACTERISTICS_S
;
1523 } NDIS_PROTOCOL_CHARACTERISTICS
, *PNDIS_PROTOCOL_CHARACTERISTICS
;
1524 #elif defined(NDIS40)
1525 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS
{
1526 NDIS40_PROTOCOL_CHARACTERISTICS_S
;
1527 } NDIS_PROTOCOL_CHARACTERISTICS
, *PNDIS_PROTOCOL_CHARACTERISTICS
;
1529 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS
{
1530 NDIS30_PROTOCOL_CHARACTERISTICS_S
1531 } NDIS_PROTOCOL_CHARACTERISTICS
, *PNDIS_PROTOCOL_CHARACTERISTICS
;
1536 /* Buffer management routines */
1542 OUT PNDIS_STATUS Status
,
1543 OUT PNDIS_BUFFER
*Buffer
,
1544 IN NDIS_HANDLE PoolHandle
,
1545 IN PVOID VirtualAddress
,
1552 NdisAllocateBufferPool(
1553 OUT PNDIS_STATUS Status
,
1554 OUT PNDIS_HANDLE PoolHandle
,
1555 IN UINT NumberOfDescriptors
);
1561 OUT PNDIS_STATUS Status
,
1562 OUT PNDIS_PACKET
*Packet
,
1563 IN NDIS_HANDLE PoolHandle
);
1568 NdisAllocatePacketPool(
1569 OUT PNDIS_STATUS Status
,
1570 OUT PNDIS_HANDLE PoolHandle
,
1571 IN UINT NumberOfDescriptors
,
1572 IN UINT ProtocolReservedLength
);
1578 OUT PNDIS_STATUS Status
,
1579 OUT PNDIS_BUFFER
*Buffer
,
1580 IN NDIS_HANDLE PoolHandle
,
1581 IN PVOID MemoryDescriptor
,
1588 NdisCopyFromPacketToPacket(
1589 IN PNDIS_PACKET Destination
,
1590 IN UINT DestinationOffset
,
1591 IN UINT BytesToCopy
,
1592 IN PNDIS_PACKET Source
,
1593 IN UINT SourceOffset
,
1594 OUT PUINT BytesCopied
);
1598 * NdisCopyLookaheadData(
1599 * IN PVOID Destination,
1602 * IN ULONG ReceiveFlags);
1605 #if defined(_M_IX86) || defined(_M_AMD64)
1606 #define NdisCopyLookaheadData(Destination, Source, Length, MacOptions) \
1607 RtlCopyMemory(Destination, Source, Length)
1609 #define NdisCopyLookaheadData(Destination, Source, Length, MacOptions) \
1611 if ((MacOptions) & NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA) \
1613 RtlCopyMemory(_Destination, _Source, _Length); \
1617 PUCHAR _Src = (PUCHAR)(Source); \
1618 PUCHAR _Dest = (PUCHAR)(Destination); \
1619 PUCHAR _End = _Dest + (Length); \
1620 while (_Dest < _End) \
1621 *_Dest++ = *_Src++; \
1629 NdisDprAllocatePacket(
1630 OUT PNDIS_STATUS Status
,
1631 OUT PNDIS_PACKET
*Packet
,
1632 IN NDIS_HANDLE PoolHandle
);
1637 NdisDprAllocatePacketNonInterlocked(
1638 OUT PNDIS_STATUS Status
,
1639 OUT PNDIS_PACKET
*Packet
,
1640 IN NDIS_HANDLE PoolHandle
);
1646 IN PNDIS_PACKET Packet
);
1651 NdisDprFreePacketNonInterlocked(
1652 IN PNDIS_PACKET Packet
);
1658 IN NDIS_HANDLE PoolHandle
);
1664 IN PNDIS_PACKET Packet
);
1670 IN NDIS_HANDLE PoolHandle
);
1676 IN PNDIS_PACKET
*PacketsToReturn
,
1677 IN UINT NumberOfPackets
);
1682 NdisUnchainBufferAtBack(
1683 IN OUT PNDIS_PACKET Packet
,
1684 OUT PNDIS_BUFFER
*Buffer
);
1689 NdisUnchainBufferAtFront(
1690 IN OUT PNDIS_PACKET Packet
,
1691 OUT PNDIS_BUFFER
*Buffer
);
1696 NdisAdjustBufferLength(
1697 IN PNDIS_BUFFER Buffer
,
1704 IN PNDIS_BUFFER Buffer
);
1709 NdisBufferVirtualAddress(
1710 IN PNDIS_BUFFER Buffer
);
1715 NDIS_BUFFER_TO_SPAN_PAGES(
1716 IN PNDIS_BUFFER Buffer
);
1722 IN PNDIS_BUFFER Buffer
);
1724 #if BINARY_COMPATIBLE
1729 NdisGetBufferPhysicalArraySize(
1730 IN PNDIS_BUFFER Buffer
,
1731 OUT PUINT ArraySize
);
1736 NdisGetFirstBufferFromPacket(
1737 IN PNDIS_PACKET _Packet
,
1738 OUT PNDIS_BUFFER
*_FirstBuffer
,
1739 OUT PVOID
*_FirstBufferVA
,
1740 OUT PUINT _FirstBufferLength
,
1741 OUT PUINT _TotalBufferLength
);
1747 IN PNDIS_BUFFER Buffer
,
1748 OUT PVOID
*VirtualAddress OPTIONAL
,
1754 NdisQueryBufferOffset(
1755 IN PNDIS_BUFFER Buffer
,
1763 * NdisGetBufferPhysicalArraySize(
1764 * IN PNDIS_BUFFER Buffer,
1765 * OUT PUINT ArraySize);
1767 #define NdisGetBufferPhysicalArraySize(Buffer, \
1770 (*(ArraySize) = NDIS_BUFFER_TO_SPAN_PAGES(Buffer)) \
1775 * NdisGetFirstBufferFromPacket(
1776 * IN PNDIS_PACKET _Packet,
1777 * OUT PNDIS_BUFFER * _FirstBuffer,
1778 * OUT PVOID * _FirstBufferVA,
1779 * OUT PUINT _FirstBufferLength,
1780 * OUT PUINT _TotalBufferLength)
1782 #define NdisGetFirstBufferFromPacket(_Packet, \
1785 _FirstBufferLength, \
1786 _TotalBufferLength) \
1788 PNDIS_BUFFER _Buffer; \
1790 _Buffer = (_Packet)->Private.Head; \
1791 *(_FirstBuffer) = _Buffer; \
1792 if (_Buffer != NULL) \
1794 *(_FirstBufferVA) = MmGetSystemAddressForMdl(_Buffer); \
1795 *(_FirstBufferLength) = MmGetMdlByteCount(_Buffer); \
1796 _Buffer = _Buffer->Next; \
1797 *(_TotalBufferLength) = *(_FirstBufferLength); \
1798 while (_Buffer != NULL) { \
1799 *(_TotalBufferLength) += MmGetMdlByteCount(_Buffer); \
1800 _Buffer = _Buffer->Next; \
1805 *(_FirstBufferVA) = 0; \
1806 *(_FirstBufferLength) = 0; \
1807 *(_TotalBufferLength) = 0; \
1814 * IN PNDIS_BUFFER Buffer,
1815 * OUT PVOID *VirtualAddress OPTIONAL,
1818 #define NdisQueryBuffer(Buffer, \
1822 if (ARGUMENT_PRESENT(VirtualAddress)) \
1823 *((PVOID*)VirtualAddress) = MmGetSystemAddressForMdl(Buffer); \
1825 *((PUINT)Length) = MmGetMdlByteCount(Buffer); \
1831 * NdisQueryBufferOffset(
1832 * IN PNDIS_BUFFER Buffer,
1834 * OUT PUINT Length);
1836 #define NdisQueryBufferOffset(Buffer, \
1840 *((PUINT)Offset) = MmGetMdlByteOffset(Buffer); \
1841 *((PUINT)Length) = MmGetMdlByteCount(Buffer); \
1844 #endif /* BINARY_COMPATIBLE */
1848 * NDIS_BUFFER_LINKAGE(
1849 * IN PNDIS_BUFFER Buffer);
1851 #define NDIS_BUFFER_LINKAGE(Buffer)(Buffer)->Next;
1856 * NdisChainBufferAtBack(
1857 * IN OUT PNDIS_PACKET Packet,
1858 * IN OUT PNDIS_BUFFER Buffer)
1860 #define NdisChainBufferAtBack(Packet, \
1863 PNDIS_BUFFER NdisBuffer = (Buffer); \
1865 while (NdisBuffer->Next != NULL) \
1866 NdisBuffer = NdisBuffer->Next; \
1868 NdisBuffer->Next = NULL; \
1870 if ((Packet)->Private.Head != NULL) \
1871 (Packet)->Private.Tail->Next = (Buffer); \
1873 (Packet)->Private.Head = (Buffer); \
1875 (Packet)->Private.Tail = NdisBuffer; \
1876 (Packet)->Private.ValidCounts = FALSE; \
1882 * NdisChainBufferAtFront(
1883 * IN OUT PNDIS_PACKET Packet,
1884 * IN OUT PNDIS_BUFFER Buffer)
1886 #define NdisChainBufferAtFront(Packet, \
1889 PNDIS_BUFFER _NdisBuffer = (Buffer); \
1891 while (_NdisBuffer->Next != NULL) \
1892 _NdisBuffer = _NdisBuffer->Next; \
1894 if ((Packet)->Private.Head == NULL) \
1895 (Packet)->Private.Tail = _NdisBuffer; \
1897 _NdisBuffer->Next = (Packet)->Private.Head; \
1898 (Packet)->Private.Head = (Buffer); \
1899 (Packet)->Private.ValidCounts = FALSE; \
1905 * NdisGetNextBuffer(
1906 * IN PNDIS_BUFFER CurrentBuffer,
1907 * OUT PNDIS_BUFFER * NextBuffer)
1909 #define NdisGetNextBuffer(CurrentBuffer, \
1912 *(NextBuffer) = (CurrentBuffer)->Next; \
1918 * NdisGetPacketFlags(
1919 * IN PNDIS_PACKET Packet);
1921 #define NdisGetPacketFlags(Packet)(Packet)->Private.Flags;
1926 * NdisClearPacketFlags(
1927 * IN PNDIS_PACKET Packet,
1930 #define NdisClearPacketFlags(Packet, Flags) \
1931 (Packet)->Private.Flags &= ~(Flags)
1936 * NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(
1937 * IN PNDIS_PACKET Packet,
1938 * IN PPVOID pMediaSpecificInfo,
1939 * IN PUINT pSizeMediaSpecificInfo);
1941 #define NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \
1942 _pMediaSpecificInfo, \
1943 _pSizeMediaSpecificInfo) \
1945 if (!((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) || \
1946 !((_Packet)->Private.NdisPacketFlags & fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO)) \
1948 *(_pMediaSpecificInfo) = NULL; \
1949 *(_pSizeMediaSpecificInfo) = 0; \
1953 *(_pMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1954 (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation; \
1955 *(_pSizeMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1956 (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo; \
1963 * NDIS_GET_PACKET_PROTOCOL_TYPE(
1964 * IN PNDIS_PACKET Packet);
1966 #define NDIS_GET_PACKET_PROTOCOL_TYPE(_Packet) \
1967 ((_Packet)->Private.Flags & NDIS_PROTOCOL_ID_MASK)
1971 * NDIS_GET_PACKET_HEADER_SIZE(
1972 * IN PNDIS_PACKET Packet);
1974 #define NDIS_GET_PACKET_HEADER_SIZE(_Packet) \
1975 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1976 (_Packet)->Private.NdisPacketOobOffset))->HeaderSize
1981 * NDIS_GET_PACKET_STATUS(
1982 * IN PNDIS_PACKET Packet);
1984 #define NDIS_GET_PACKET_STATUS(_Packet) \
1985 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1986 (_Packet)->Private.NdisPacketOobOffset))->Status
1991 * NDIS_GET_PACKET_TIME_RECEIVED(
1992 * IN PNDIS_PACKET Packet);
1994 #define NDIS_GET_PACKET_TIME_RECEIVED(_Packet) \
1995 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1996 (_Packet)->Private.NdisPacketOobOffset))->TimeReceived
2001 * NDIS_GET_PACKET_TIME_SENT(
2002 * IN PNDIS_PACKET Packet);
2004 #define NDIS_GET_PACKET_TIME_SENT(_Packet) \
2005 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2006 (_Packet)->Private.NdisPacketOobOffset))->TimeSent
2011 * NDIS_GET_PACKET_TIME_TO_SEND(
2012 * IN PNDIS_PACKET Packet);
2014 #define NDIS_GET_PACKET_TIME_TO_SEND(_Packet) \
2015 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2016 (_Packet)->Private.NdisPacketOobOffset))->TimeToSend
2020 * PNDIS_PACKET_OOB_DATA
2021 * NDIS_OOB_DATA_FROM_PACKET(
2022 * IN PNDIS_PACKET Packet);
2024 #define NDIS_OOB_DATA_FROM_PACKET(_Packet) \
2025 (PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2026 (_Packet)->Private.NdisPacketOobOffset)
2032 * IN PNDIS_PACKET Packet,
2033 * OUT PUINT PhysicalBufferCount OPTIONAL,
2034 * OUT PUINT BufferCount OPTIONAL,
2035 * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
2036 * OUT PUINT TotalPacketLength OPTIONAL);
2041 IN PNDIS_PACKET Packet
,
2042 OUT PUINT PhysicalBufferCount OPTIONAL
,
2043 OUT PUINT BufferCount OPTIONAL
,
2044 OUT PNDIS_BUFFER
*FirstBuffer OPTIONAL
,
2045 OUT PUINT TotalPacketLength OPTIONAL
)
2048 *FirstBuffer
= Packet
->Private
.Head
;
2049 if (TotalPacketLength
|| BufferCount
|| PhysicalBufferCount
)
2051 if (!Packet
->Private
.ValidCounts
)
2055 PNDIS_BUFFER NdisBuffer
;
2056 UINT PhysicalBufferCount
= 0;
2057 UINT TotalPacketLength
= 0;
2060 for (NdisBuffer
= Packet
->Private
.Head
;
2061 NdisBuffer
!= (PNDIS_BUFFER
)NULL
;
2062 NdisBuffer
= NdisBuffer
->Next
)
2064 PhysicalBufferCount
+= NDIS_BUFFER_TO_SPAN_PAGES(NdisBuffer
);
2065 NdisQueryBufferOffset(NdisBuffer
, &Offset
, &PacketLength
);
2066 TotalPacketLength
+= PacketLength
;
2069 Packet
->Private
.PhysicalCount
= PhysicalBufferCount
;
2070 Packet
->Private
.TotalLength
= TotalPacketLength
;
2071 Packet
->Private
.Count
= Count
;
2072 Packet
->Private
.ValidCounts
= TRUE
;
2075 if (PhysicalBufferCount
)
2076 *PhysicalBufferCount
= Packet
->Private
.PhysicalCount
;
2079 *BufferCount
= Packet
->Private
.Count
;
2081 if (TotalPacketLength
)
2082 *TotalPacketLength
= Packet
->Private
.TotalLength
;
2088 * NdisQueryPacketLength(
2089 * IN PNDIS_PACKET Packet,
2090 * OUT PUINT PhysicalBufferCount OPTIONAL,
2091 * OUT PUINT BufferCount OPTIONAL,
2092 * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
2093 * OUT PUINT TotalPacketLength OPTIONAL);
2095 #define NdisQueryPacketLength(Packet, \
2096 TotalPacketLength) \
2098 if ((TotalPacketLength)) \
2100 if (!(Packet)->Private.ValidCounts) { \
2102 UINT _PacketLength; \
2103 PNDIS_BUFFER _NdisBuffer; \
2104 UINT _PhysicalBufferCount = 0; \
2105 UINT _TotalPacketLength = 0; \
2108 for (_NdisBuffer = (Packet)->Private.Head; \
2109 _NdisBuffer != (PNDIS_BUFFER)NULL; \
2110 _NdisBuffer = _NdisBuffer->Next) \
2112 _PhysicalBufferCount += NDIS_BUFFER_TO_SPAN_PAGES(_NdisBuffer); \
2113 NdisQueryBufferOffset(_NdisBuffer, &_Offset, &_PacketLength); \
2114 _TotalPacketLength += _PacketLength; \
2117 (Packet)->Private.PhysicalCount = _PhysicalBufferCount; \
2118 (Packet)->Private.TotalLength = _TotalPacketLength; \
2119 (Packet)->Private.Count = _Count; \
2120 (Packet)->Private.ValidCounts = TRUE; \
2123 if (TotalPacketLength) \
2124 *((PUINT)TotalPacketLength) = (Packet)->Private.TotalLength; \
2131 * NdisRecalculatePacketCounts(
2132 * IN OUT PNDIS_PACKET Packet);
2134 #define NdisRecalculatePacketCounts(Packet) \
2136 PNDIS_BUFFER _Buffer = (Packet)->Private.Head; \
2137 if (_Buffer != NULL) \
2139 while (_Buffer->Next != NULL) \
2141 ´_Buffer = _Buffer->Next; \
2143 (Packet)->Private.Tail = _Buffer; \
2145 (Packet)->Private.ValidCounts = FALSE; \
2151 * NdisReinitializePacket(
2152 * IN OUT PNDIS_PACKET Packet);
2154 #define NdisReinitializePacketCounts(Packet) \
2156 (Packet)->Private.Head = (PNDIS_BUFFER)NULL; \
2157 (Packet)->Private.ValidCounts = FALSE; \
2163 * NdisSetPacketFlags(
2164 * IN PNDIS_PACKET Packet,
2167 #define NdisSetPacketFlags(Packet, Flags) \
2168 (Packet)->Private.Flags |= (Flags);
2173 * NDIS_SET_PACKET_HEADER_SIZE(
2174 * IN PNDIS_PACKET Packet,
2177 #define NDIS_SET_PACKET_HEADER_SIZE(_Packet, _HdrSize) \
2178 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2179 (_Packet)->Private.NdisPacketOobOffset))->HeaderSize = (_HdrSize)
2184 * NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(
2185 * IN PNDIS_PACKET Packet,
2186 * IN PVOID MediaSpecificInfo,
2187 * IN UINT SizeMediaSpecificInfo);
2189 #define NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \
2190 _MediaSpecificInfo, \
2191 _SizeMediaSpecificInfo) \
2193 if ((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) \
2195 (_Packet)->Private.NdisPacketFlags |= fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO; \
2196 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2197 (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation = \
2198 (_MediaSpecificInfo); \
2199 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2200 (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo = \
2201 (_SizeMediaSpecificInfo); \
2208 * NDIS_SET_PACKET_STATUS(
2209 * IN PNDIS_PACKET Packet,
2210 * IN NDIS_STATUS Status);
2212 #define NDIS_SET_PACKET_STATUS(_Packet, _Status) \
2213 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2214 (_Packet)->Private.NdisPacketOobOffset))->Status = (_Status)
2219 * NDIS_SET_PACKET_TIME_RECEIVED(
2220 * IN PNDIS_PACKET Packet,
2221 * IN ULONGLONG TimeReceived);
2223 #define NDIS_SET_PACKET_TIME_RECEIVED(_Packet, _TimeReceived) \
2224 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2225 (_Packet)->Private.NdisPacketOobOffset))->TimeReceived = (_TimeReceived)
2230 * NDIS_SET_PACKET_TIME_SENT(
2231 * IN PNDIS_PACKET Packet,
2232 * IN ULONGLONG TimeSent);
2234 #define NDIS_SET_PACKET_TIME_SENT(_Packet, _TimeSent) \
2235 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2236 (_Packet)->Private.NdisPacketOobOffset))->TimeSent = (_TimeSent)
2241 * NDIS_SET_PACKET_TIME_TO_SEND(
2242 * IN PNDIS_PACKET Packet,
2243 * IN ULONGLONG TimeToSend);
2245 #define NDIS_SET_PACKET_TIME_TO_SEND(_Packet, _TimeToSend) \
2246 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2247 (_Packet)->Private.NdisPacketOobOffset))->TimeToSend = (_TimeToSend)
2253 * IN PNDIS_PACKET Packet,
2256 #define NdisSetSendFlags(_Packet,_Flags)(_Packet)->Private.Flags = (_Flags)
2260 /* Memory management routines */
2262 #if BINARY_COMPATIBLE
2267 NdisCreateLookaheadBufferFromSharedMemory(
2268 IN PVOID pSharedMemory
,
2269 IN UINT LookaheadLength
,
2270 OUT PVOID
*pLookaheadBuffer
);
2275 NdisDestroyLookaheadBufferFromSharedMemory(
2276 IN PVOID pLookaheadBuffer
);
2282 * NdisCreateLookaheadBufferFromSharedMemory(
2283 * IN PVOID pSharedMemory,
2284 * IN UINT LookaheadLength,
2285 * OUT PVOID *pLookaheadBuffer)
2287 #define NdisCreateLookaheadBufferFromSharedMemory(_pSharedMemory, \
2289 _pLookaheadBuffer) \
2290 ((*(_pLookaheadBuffer)) = (_pSharedMemory))
2294 * NdisDestroyLookaheadBufferFromSharedMemory(
2295 * IN PVOID pLookaheadBuffer)
2297 #define NdisDestroyLookaheadBufferFromSharedMemory(_pLookaheadBuffer)
2301 #if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_ARM) || defined(_M_PPC)
2305 * NdisMoveMappedMemory(
2306 * OUT PVOID Destination,
2310 #define NdisMoveMappedMemory(Destination, Source, Length) \
2311 RtlCopyMemory(Destination, Source, Length)
2315 * NdisZeroMappedMemory(
2316 * IN PVOID Destination,
2319 #define NdisZeroMappedMemory(Destination, Length) \
2320 RtlZeroMemory(Destination, Length)
2324 #define NdisMoveMappedMemory(Destination, Source, Length) \
2326 PUCHAR _Dest = Destination, _Src = Source, _End = _Dest + Length; \
2327 while (_Dest < _End) \
2328 *_Dest++ = _Src++; \
2331 #define NdisZeroMappedMemory(Destination, Length) \
2333 PUCHAR _Dest = Destination, _End = _Dest + Length; \
2334 while (_Dest < _End) \
2338 #endif /* _M_IX86 or _M_AMD64 */
2342 * NdisMoveFromMappedMemory(
2343 * OUT PVOID Destination,
2347 #define NdisMoveFromMappedMemory(Destination, Source, Length) \
2348 NdisMoveMappedMemory(Destination, Source, Length)
2352 * NdisMoveToMappedMemory(
2353 * OUT PVOID Destination,
2357 #define NdisMoveToMappedMemory(Destination, Source, Length) \
2358 NdisMoveMappedMemory(Destination, Source, Length)
2362 * NdisMUpdateSharedMemory(
2363 * IN NDIS_HANDLE MiniportAdapterHandle,
2365 * IN PVOID VirtualAddress,
2366 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2368 #define NdisMUpdateSharedMemory(_H, _L, _V, _P) \
2369 NdisUpdateSharedMemory(_H, _L, _V, _P)
2375 OUT PVOID
*VirtualAddress
,
2377 IN UINT MemoryFlags
,
2378 IN NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress
);
2384 IN PVOID VirtualAddress
,
2386 IN UINT MemoryFlags
);
2391 NdisImmediateReadSharedMemory(
2392 IN NDIS_HANDLE WrapperConfigurationContext
,
2393 IN ULONG SharedMemoryAddress
,
2400 NdisImmediateWriteSharedMemory(
2401 IN NDIS_HANDLE WrapperConfigurationContext
,
2402 IN ULONG SharedMemoryAddress
,
2409 NdisMAllocateSharedMemory(
2410 IN NDIS_HANDLE MiniportAdapterHandle
,
2413 OUT PVOID
*VirtualAddress
,
2414 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress
);
2419 NdisMAllocateSharedMemoryAsync(
2420 IN NDIS_HANDLE MiniportAdapterHandle
,
2427 #define NdisUpdateSharedMemory(NdisAdapterHandle, \
2437 NdisUpdateSharedMemory(
2438 IN NDIS_HANDLE NdisAdapterHandle
,
2440 IN PVOID VirtualAddress
,
2441 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress
);
2443 #endif /* defined(NDIS50) */
2447 * NdisGetPhysicalAddressHigh(
2448 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2450 #define NdisGetPhysicalAddressHigh(PhysicalAddress) \
2451 ((PhysicalAddress).HighPart)
2455 * NdisSetPhysicalAddressHigh(
2456 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
2459 #define NdisSetPhysicalAddressHigh(PhysicalAddress, Value) \
2460 ((PhysicalAddress).HighPart) = (Value)
2464 * NdisGetPhysicalAddressLow(
2465 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2467 #define NdisGetPhysicalAddressLow(PhysicalAddress) \
2468 ((PhysicalAddress).LowPart)
2473 * NdisSetPhysicalAddressLow(
2474 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
2477 #define NdisSetPhysicalAddressLow(PhysicalAddress, Value) \
2478 ((PhysicalAddress).LowPart) = (Value)
2482 * NDIS_PHYSICAL_ADDRESS_CONST(
2486 #define NDIS_PHYSICAL_ADDRESS_CONST(Low, High) \
2487 { {(ULONG)(Low), (LONG)(High)} }
2492 * IN CONST VOID *Source1,
2493 * IN CONST VOID *Source2,
2496 #define NdisEqualMemory(Source1, Source2, Length) \
2497 RtlEqualMemory(Source1, Source2, Length)
2502 * IN PVOID Destination,
2506 #define NdisFillMemory(Destination, Length, Fill) \
2507 RtlFillMemory(Destination, Length, Fill)
2512 * OUT PVOID Destination,
2516 #define NdisMoveMemory(Destination, Source, Length) \
2517 RtlCopyMemory(Destination, Source, Length)
2522 * NdisRetrieveUlong(
2523 * IN PULONG DestinationAddress,
2524 * IN PULONG SourceAddress);
2526 #define NdisRetrieveUlong(DestinationAddress, SourceAddress) \
2527 RtlRetrieveUlong(DestinationAddress, SourceAddress)
2533 * IN PULONG DestinationAddress,
2536 #define NdisStoreUlong(DestinationAddress, Value) \
2537 RtlStoreUlong(DestinationAddress, Value)
2543 * IN PVOID Destination,
2546 #define NdisZeroMemory(Destination, Length) \
2547 RtlZeroMemory(Destination, Length)
2551 /* Configuration routines */
2556 NdisOpenConfiguration(
2557 OUT PNDIS_STATUS Status
,
2558 OUT PNDIS_HANDLE ConfigurationHandle
,
2559 IN NDIS_HANDLE WrapperConfigurationContext
);
2564 NdisReadNetworkAddress(
2565 OUT PNDIS_STATUS Status
,
2566 OUT PVOID
*NetworkAddress
,
2567 OUT PUINT NetworkAddressLength
,
2568 IN NDIS_HANDLE ConfigurationHandle
);
2573 NdisReadEisaSlotInformation(
2574 OUT PNDIS_STATUS Status
,
2575 IN NDIS_HANDLE WrapperConfigurationContext
,
2576 OUT PUINT SlotNumber
,
2577 OUT PNDIS_EISA_FUNCTION_INFORMATION EisaData
);
2582 NdisReadEisaSlotInformationEx(
2583 OUT PNDIS_STATUS Status
,
2584 IN NDIS_HANDLE WrapperConfigurationContext
,
2585 OUT PUINT SlotNumber
,
2586 OUT PNDIS_EISA_FUNCTION_INFORMATION
*EisaData
,
2587 OUT PUINT NumberOfFunctions
);
2592 NdisReadPciSlotInformation(
2593 IN NDIS_HANDLE NdisAdapterHandle
,
2594 IN ULONG SlotNumber
,
2602 NdisWritePciSlotInformation(
2603 IN NDIS_HANDLE NdisAdapterHandle
,
2604 IN ULONG SlotNumber
,
2611 /* String management routines */
2616 NdisAnsiStringToUnicodeString(
2617 IN OUT PNDIS_STRING DestinationString
,
2618 IN PNDIS_ANSI_STRING SourceString
);
2623 * IN PNDIS_STRING String1,
2624 * IN PNDIS_STRING String2,
2625 * IN BOOLEAN CaseInsensitive);
2627 #define NdisEqualString(_String1, _String2, _CaseInsensitive) \
2628 RtlEqualUnicodeString(_String1, _String2, _CaseInsensitive)
2634 IN OUT PNDIS_ANSI_STRING DestinationString
,
2635 IN PCSTR SourceString
);
2640 NdisInitUnicodeString(
2641 IN OUT PNDIS_STRING DestinationString
,
2642 IN PCWSTR SourceString
);
2647 NdisUnicodeStringToAnsiString(
2648 IN OUT PNDIS_ANSI_STRING DestinationString
,
2649 IN PNDIS_STRING SourceString
);
2651 #define NdisFreeString(_s) NdisFreeMemory((_s).Buffer, (_s).MaximumLength, 0)
2652 #define NdisPrintString(_s) DbgPrint("%ls", (_s).Buffer)
2655 /* Spin lock reoutines */
2657 #if BINARY_COMPATIBLE
2662 NdisAllocateSpinLock(
2663 IN PNDIS_SPIN_LOCK SpinLock
);
2669 IN PNDIS_SPIN_LOCK SpinLock
);
2674 NdisAcquireSpinLock(
2675 IN PNDIS_SPIN_LOCK SpinLock
);
2680 NdisReleaseSpinLock(
2681 IN PNDIS_SPIN_LOCK SpinLock
);
2686 NdisDprAcquireSpinLock(
2687 IN PNDIS_SPIN_LOCK SpinLock
);
2692 NdisDprReleaseSpinLock(
2693 IN PNDIS_SPIN_LOCK SpinLock
);
2699 * NdisAllocateSpinLock(
2700 * IN PNDIS_SPIN_LOCK SpinLock);
2702 #define NdisAllocateSpinLock(_SpinLock) \
2703 KeInitializeSpinLock(&(_SpinLock)->SpinLock)
2708 * IN PNDIS_SPIN_LOCK SpinLock);
2710 #define NdisFreeSpinLock(_SpinLock)
2714 * NdisAcquireSpinLock(
2715 * IN PNDIS_SPIN_LOCK SpinLock);
2717 #define NdisAcquireSpinLock(_SpinLock) \
2718 KeAcquireSpinLock(&(_SpinLock)->SpinLock, &(_SpinLock)->OldIrql)
2722 * NdisReleaseSpinLock(
2723 * IN PNDIS_SPIN_LOCK SpinLock);
2725 #define NdisReleaseSpinLock(_SpinLock) \
2726 KeReleaseSpinLock(&(_SpinLock)->SpinLock, (_SpinLock)->OldIrql)
2730 * NdisDprAcquireSpinLock(
2731 * IN PNDIS_SPIN_LOCK SpinLock);
2733 #define NdisDprAcquireSpinLock(_SpinLock) \
2735 KeAcquireSpinLockAtDpcLevel(&(_SpinLock)->SpinLock); \
2736 (_SpinLock)->OldIrql = DISPATCH_LEVEL; \
2741 * NdisDprReleaseSpinLock(
2742 * IN PNDIS_SPIN_LOCK SpinLock);
2744 #define NdisDprReleaseSpinLock(_SpinLock) \
2745 KeReleaseSpinLockFromDpcLevel(&(_SpinLock)->SpinLock)
2747 #endif /* BINARY_COMPATIBLE */
2753 * NdisRawReadPortBufferUchar(
2755 * OUT PUCHAR Buffer,
2758 #define NdisRawReadPortBufferUchar(Port, Buffer, Length) \
2759 READ_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
2763 * NdisRawReadPortBufferUlong(
2765 * OUT PULONG Buffer,
2768 #define NdisRawReadPortBufferUlong(Port, Buffer, Length) \
2769 READ_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
2773 * NdisRawReadPortBufferUshort(
2775 * OUT PUSHORT Buffer,
2778 #define NdisRawReadPortBufferUshort(Port, Buffer, Length) \
2779 READ_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
2784 * NdisRawReadPortUchar(
2788 #define NdisRawReadPortUchar(Port, Data) \
2789 *(Data) = READ_PORT_UCHAR((PUCHAR)(Port))
2793 * NdisRawReadPortUlong(
2797 #define NdisRawReadPortUlong(Port, Data) \
2798 *(Data) = READ_PORT_ULONG((PULONG)(Port))
2802 * NdisRawReadPortUshort(
2804 * OUT PUSHORT Data);
2806 #define NdisRawReadPortUshort(Port, Data) \
2807 *(Data) = READ_PORT_USHORT((PUSHORT)(Port))
2812 * NdisRawWritePortBufferUchar(
2817 #define NdisRawWritePortBufferUchar(Port, Buffer, Length) \
2818 WRITE_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
2822 * NdisRawWritePortBufferUlong(
2827 #define NdisRawWritePortBufferUlong(Port, Buffer, Length) \
2828 WRITE_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
2832 * NdisRawWritePortBufferUshort(
2834 * IN PUSHORT Buffer,
2837 #define NdisRawWritePortBufferUshort(Port, Buffer, Length) \
2838 WRITE_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
2843 * NdisRawWritePortUchar(
2847 #define NdisRawWritePortUchar(Port, Data) \
2848 WRITE_PORT_UCHAR((PUCHAR)(Port), (UCHAR)(Data))
2852 * NdisRawWritePortUlong(
2856 #define NdisRawWritePortUlong(Port, Data) \
2857 WRITE_PORT_ULONG((PULONG)(Port), (ULONG)(Data))
2861 * NdisRawWritePortUshort(
2865 #define NdisRawWritePortUshort(Port, Data) \
2866 WRITE_PORT_USHORT((PUSHORT)(Port), (USHORT)(Data))
2871 * NdisReadRegisterUchar(
2872 * IN PUCHAR Register,
2875 #define NdisReadRegisterUchar(Register, Data) \
2876 *(Data) = *(Register)
2880 * NdisReadRegisterUlong(
2881 * IN PULONG Register,
2884 #define NdisReadRegisterUlong(Register, Data) \
2885 *(Data) = *(Register)
2889 * NdisReadRegisterUshort(
2890 * IN PUSHORT Register,
2891 * OUT PUSHORT Data);
2893 #define NdisReadRegisterUshort(Register, Data) \
2894 *(Data) = *(Register)
2898 * NdisReadRegisterUchar(
2899 * IN PUCHAR Register,
2902 #define NdisWriteRegisterUchar(Register, Data) \
2903 WRITE_REGISTER_UCHAR((Register), (Data))
2907 * NdisReadRegisterUlong(
2908 * IN PULONG Register,
2911 #define NdisWriteRegisterUlong(Register, Data) \
2912 WRITE_REGISTER_ULONG((Register), (Data))
2916 * NdisReadRegisterUshort(
2917 * IN PUSHORT Register,
2920 #define NdisWriteRegisterUshort(Register, Data) \
2921 WRITE_REGISTER_USHORT((Register), (Data))
2928 * NdisInitializeListHead(
2929 * IN PLIST_ENTRY ListHead);
2931 #define NdisInitializeListHead(_ListHead) \
2932 InitializeListHead(_ListHead)
2936 * NdisInterlockedInsertHeadList(
2937 * IN PLIST_ENTRY ListHead,
2938 * IN PLIST_ENTRY ListEntry,
2939 * IN PNDIS_SPIN_LOCK SpinLock);
2941 #define NdisInterlockedInsertHeadList(_ListHead, _ListEntry, _SpinLock) \
2942 ExInterlockedInsertHeadList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
2946 * NdisInterlockedInsertTailList(
2947 * IN PLIST_ENTRY ListHead,
2948 * IN PLIST_ENTRY ListEntry,
2949 * IN PNDIS_SPIN_LOCK SpinLock);
2951 #define NdisInterlockedInsertTailList(_ListHead, _ListEntry, _SpinLock) \
2952 ExInterlockedInsertTailList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
2956 * NdisInterlockedRemoveHeadList(
2957 * IN PLIST_ENTRY ListHead,
2958 * IN PNDIS_SPIN_LOCK SpinLock);
2960 #define NdisInterlockedRemoveHeadList(_ListHead, _SpinLock) \
2961 ExInterlockedRemoveHeadList(_ListHead, &(_SpinLock)->SpinLock)
2965 * NdisInitializeSListHead(
2966 * IN PSLIST_HEADER SListHead);
2968 #define NdisInitializeSListHead(SListHead) ExInitializeSListHead(SListHead)
2971 * USHORT NdisQueryDepthSList(
2972 * IN PSLIST_HEADER SListHead);
2974 #define NdisQueryDepthSList(SListHead) ExQueryDepthSList(SListHead)
2978 /* Interlocked routines */
2982 * NdisInterlockedDecrement(
2985 #define NdisInterlockedDecrement(Addend) InterlockedDecrement(Addend)
2989 * NdisInterlockedIncrement(
2992 #define NdisInterlockedIncrement(Addend) InterlockedIncrement(Addend)
2996 * NdisInterlockedAddUlong(
2998 * IN ULONG Increment,
2999 * IN PNDIS_SPIN_LOCK SpinLock);
3001 #define NdisInterlockedAddUlong(_Addend, _Increment, _SpinLock) \
3002 ExInterlockedAddUlong(_Addend, _Increment, &(_SpinLock)->SpinLock)
3006 /* Miscellaneous routines */
3011 NdisCloseConfiguration(
3012 IN NDIS_HANDLE ConfigurationHandle
);
3017 NdisReadConfiguration(
3018 OUT PNDIS_STATUS Status
,
3019 OUT PNDIS_CONFIGURATION_PARAMETER
*ParameterValue
,
3020 IN NDIS_HANDLE ConfigurationHandle
,
3021 IN PNDIS_STRING Keyword
,
3022 IN NDIS_PARAMETER_TYPE ParameterType
);
3027 NdisWriteConfiguration(
3028 OUT PNDIS_STATUS Status
,
3029 IN NDIS_HANDLE WrapperConfigurationContext
,
3030 IN PNDIS_STRING Keyword
,
3031 IN PNDIS_CONFIGURATION_PARAMETER ParameterValue
);
3036 NdisWriteErrorLogEntry(
3037 IN NDIS_HANDLE NdisAdapterHandle
,
3038 IN NDIS_ERROR_CODE ErrorCode
,
3039 IN ULONG NumberOfErrorValues
,
3044 * NdisStallExecution(
3045 * IN UINT MicrosecondsToStall)
3047 #define NdisStallExecution KeStallExecutionProcessor
3049 #if BINARY_COMPATIBLE
3054 NdisGetCurrentSystemTime(
3055 IN PLARGE_INTEGER pSystemTime
);
3061 * NdisGetCurrentSystemTime(
3062 * IN PLARGE_INTEGER pSystemTime);
3064 #define NdisGetCurrentSystemTime KeQuerySystemTime
3071 NdisSystemProcessorCount(VOID
);
3076 NdisGetCurrentProcessorCpuUsage(
3077 OUT PULONG pCpuUsage
);
3081 /* NDIS helper macros */
3085 * NDIS_INIT_FUNCTION(FunctionName)
3087 #define NDIS_INIT_FUNCTION(FunctionName) \
3088 alloc_text(init, FunctionName)
3092 * NDIS_PAGABLE_FUNCTION(FunctionName)
3094 #define NDIS_PAGEABLE_FUNCTION(FunctionName) \
3095 alloc_text(page, FunctionName)
3097 #define NDIS_PAGABLE_FUNCTION NDIS_PAGEABLE_FUNCTION
3100 /* NDIS 4.0 extensions */
3105 NdisMFreeSharedMemory(
3106 IN NDIS_HANDLE MiniportAdapterHandle
,
3109 IN PVOID VirtualAddress
,
3110 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress
);
3115 NdisMWanIndicateReceive(
3116 OUT PNDIS_STATUS Status
,
3117 IN NDIS_HANDLE MiniportAdapterHandle
,
3118 IN NDIS_HANDLE NdisLinkContext
,
3119 IN PUCHAR PacketBuffer
,
3120 IN UINT PacketSize
);
3125 NdisMWanIndicateReceiveComplete(
3126 IN NDIS_HANDLE MiniportAdapterHandle
);
3131 NdisMWanSendComplete(
3132 IN NDIS_HANDLE MiniportAdapterHandle
,
3133 IN PNDIS_WAN_PACKET Packet
,
3134 IN NDIS_STATUS Status
);
3139 NdisPciAssignResources(
3140 IN NDIS_HANDLE NdisMacHandle
,
3141 IN NDIS_HANDLE NdisWrapperHandle
,
3142 IN NDIS_HANDLE WrapperConfigurationContext
,
3143 IN ULONG SlotNumber
,
3144 OUT PNDIS_RESOURCE_LIST
*AssignedResources
);
3147 /* NDIS 5.0 extensions */
3152 NdisAcquireReadWriteLock(
3153 IN PNDIS_RW_LOCK Lock
,
3155 IN PLOCK_STATE LockState
);
3160 NdisAllocateMemoryWithTag(
3161 OUT PVOID
*VirtualAddress
,
3168 NdisAllocatePacketPoolEx(
3169 OUT PNDIS_STATUS Status
,
3170 OUT PNDIS_HANDLE PoolHandle
,
3171 IN UINT NumberOfDescriptors
,
3172 IN UINT NumberOfOverflowDescriptors
,
3173 IN UINT ProtocolReservedLength
);
3178 NdisCompletePnPEvent(
3179 IN NDIS_STATUS Status
,
3180 IN NDIS_HANDLE NdisBindingHandle
,
3181 IN PNET_PNP_EVENT NetPnPEvent
);
3186 NdisGetCurrentProcessorCounts(
3187 OUT PULONG pIdleCount
,
3188 OUT PULONG pKernelAndUser
,
3194 NdisGetDriverHandle(
3195 IN PNDIS_HANDLE NdisBindingHandle
,
3196 OUT PNDIS_HANDLE NdisDriverHandle
);
3201 NdisGetReceivedPacket(
3202 IN PNDIS_HANDLE NdisBindingHandle
,
3203 IN PNDIS_HANDLE MacContext
);
3208 NdisGetSystemUpTime(
3209 OUT PULONG pSystemUpTime
);
3214 NdisInitializeReadWriteLock(
3215 IN PNDIS_RW_LOCK Lock
);
3220 NdisMDeregisterDevice(
3221 IN NDIS_HANDLE NdisDeviceHandle
);
3226 NdisMGetDeviceProperty(
3227 IN NDIS_HANDLE MiniportAdapterHandle
,
3228 IN OUT PDEVICE_OBJECT
*PhysicalDeviceObject OPTIONAL
,
3229 IN OUT PDEVICE_OBJECT
*FunctionalDeviceObject OPTIONAL
,
3230 IN OUT PDEVICE_OBJECT
*NextDeviceObject OPTIONAL
,
3231 IN OUT PCM_RESOURCE_LIST
*AllocatedResources OPTIONAL
,
3232 IN OUT PCM_RESOURCE_LIST
*AllocatedResourcesTranslated OPTIONAL
);
3237 NdisMInitializeScatterGatherDma(
3238 IN NDIS_HANDLE MiniportAdapterHandle
,
3239 IN BOOLEAN Dma64BitAddresses
,
3240 IN ULONG MaximumPhysicalMapping
);
3245 NdisMPromoteMiniport(
3246 IN NDIS_HANDLE MiniportAdapterHandle
);
3251 NdisMQueryAdapterInstanceName(
3252 OUT PNDIS_STRING AdapterInstanceName
,
3253 IN NDIS_HANDLE MiniportAdapterHandle
);
3258 NdisMRegisterDevice(
3259 IN NDIS_HANDLE NdisWrapperHandle
,
3260 IN PNDIS_STRING DeviceName
,
3261 IN PNDIS_STRING SymbolicName
,
3262 IN PDRIVER_DISPATCH MajorFunctions
[],
3263 OUT PDEVICE_OBJECT
*pDeviceObject
,
3264 OUT NDIS_HANDLE
*NdisDeviceHandle
);
3269 NdisMRegisterUnloadHandler(
3270 IN NDIS_HANDLE NdisWrapperHandle
,
3271 IN PDRIVER_UNLOAD UnloadHandler
);
3276 NdisMRemoveMiniport(
3277 IN NDIS_HANDLE MiniportAdapterHandle
);
3282 NdisMSetMiniportSecondary(
3283 IN NDIS_HANDLE MiniportAdapterHandle
,
3284 IN NDIS_HANDLE PrimaryMiniportAdapterHandle
);
3289 NdisOpenConfigurationKeyByIndex(
3290 OUT PNDIS_STATUS Status
,
3291 IN NDIS_HANDLE ConfigurationHandle
,
3293 OUT PNDIS_STRING KeyName
,
3294 OUT PNDIS_HANDLE KeyHandle
);
3299 NdisOpenConfigurationKeyByName(
3300 OUT PNDIS_STATUS Status
,
3301 IN NDIS_HANDLE ConfigurationHandle
,
3302 IN PNDIS_STRING SubKeyName
,
3303 OUT PNDIS_HANDLE SubKeyHandle
);
3308 NdisPacketPoolUsage(
3309 IN NDIS_HANDLE PoolHandle
);
3314 NdisQueryAdapterInstanceName(
3315 OUT PNDIS_STRING AdapterInstanceName
,
3316 IN NDIS_HANDLE NdisBindingHandle
);
3321 NdisReadPcmciaAttributeMemory(
3322 IN NDIS_HANDLE NdisAdapterHandle
,
3330 NdisReleaseReadWriteLock(
3331 IN PNDIS_RW_LOCK Lock
,
3332 IN PLOCK_STATE LockState
);
3337 NdisWriteEventLogEntry(
3339 IN NDIS_STATUS EventCode
,
3340 IN ULONG UniqueEventValue
,
3341 IN USHORT NumStrings
,
3342 IN PVOID StringsList OPTIONAL
,
3344 IN PVOID Data OPTIONAL
);
3349 NdisWritePcmciaAttributeMemory(
3350 IN NDIS_HANDLE NdisAdapterHandle
,
3356 /* Connectionless services */
3362 IN NDIS_HANDLE NdisVcHandle
,
3363 IN NDIS_HANDLE ProtocolPartyContext
,
3364 IN OUT PCO_CALL_PARAMETERS CallParameters
,
3365 OUT PNDIS_HANDLE NdisPartyHandle
);
3370 NdisClCloseAddressFamily(
3371 IN NDIS_HANDLE NdisAfHandle
);
3377 IN NDIS_HANDLE NdisVcHandle
,
3378 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
3379 IN PVOID Buffer OPTIONAL
,
3385 NdisClDeregisterSap(
3386 IN NDIS_HANDLE NdisSapHandle
);
3392 IN NDIS_HANDLE NdisPartyHandle
,
3393 IN PVOID Buffer OPTIONAL
,
3399 NdisClIncomingCallComplete(
3400 IN NDIS_STATUS Status
,
3401 IN NDIS_HANDLE NdisVcHandle
,
3402 IN PCO_CALL_PARAMETERS CallParameters
);
3408 IN NDIS_HANDLE NdisVcHandle
,
3409 IN OUT PCO_CALL_PARAMETERS CallParameters
,
3410 IN NDIS_HANDLE ProtocolPartyContext OPTIONAL
,
3411 OUT PNDIS_HANDLE NdisPartyHandle OPTIONAL
);
3416 NdisClModifyCallQoS(
3417 IN NDIS_HANDLE NdisVcHandle
,
3418 IN PCO_CALL_PARAMETERS CallParameters
);
3424 NdisClOpenAddressFamily(
3425 IN NDIS_HANDLE NdisBindingHandle
,
3426 IN PCO_ADDRESS_FAMILY AddressFamily
,
3427 IN NDIS_HANDLE ProtocolAfContext
,
3428 IN PNDIS_CLIENT_CHARACTERISTICS ClCharacteristics
,
3429 IN UINT SizeOfClCharacteristics
,
3430 OUT PNDIS_HANDLE NdisAfHandle
);
3436 IN NDIS_HANDLE NdisAfHandle
,
3437 IN NDIS_HANDLE ProtocolSapContext
,
3439 OUT PNDIS_HANDLE NdisSapHandle
);
3442 /* Call Manager services */
3448 IN NDIS_HANDLE NdisVcHandle
,
3449 IN OUT PCO_CALL_PARAMETERS CallParameters
);
3454 NdisCmAddPartyComplete(
3455 IN NDIS_STATUS Status
,
3456 IN NDIS_HANDLE NdisPartyHandle
,
3457 IN NDIS_HANDLE CallMgrPartyContext OPTIONAL
,
3458 IN PCO_CALL_PARAMETERS CallParameters
);
3463 NdisCmCloseAddressFamilyComplete(
3464 IN NDIS_STATUS Status
,
3465 IN NDIS_HANDLE NdisAfHandle
);
3470 NdisCmCloseCallComplete(
3471 IN NDIS_STATUS Status
,
3472 IN NDIS_HANDLE NdisVcHandle
,
3473 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
);
3479 IN NDIS_HANDLE NdisVcHandle
);
3484 NdisCmDeregisterSapComplete(
3485 IN NDIS_STATUS Status
,
3486 IN NDIS_HANDLE NdisSapHandle
);
3491 NdisCmDispatchCallConnected(
3492 IN NDIS_HANDLE NdisVcHandle
);
3497 NdisCmDispatchIncomingCall(
3498 IN NDIS_HANDLE NdisSapHandle
,
3499 IN NDIS_HANDLE NdisVcHandle
,
3500 IN PCO_CALL_PARAMETERS CallParameters
);
3505 NdisCmDispatchIncomingCallQoSChange(
3506 IN NDIS_HANDLE NdisVcHandle
,
3507 IN PCO_CALL_PARAMETERS CallParameters
);
3512 NdisCmDispatchIncomingCloseCall(
3513 IN NDIS_STATUS CloseStatus
,
3514 IN NDIS_HANDLE NdisVcHandle
,
3515 IN PVOID Buffer OPTIONAL
,
3521 NdisCmDispatchIncomingDropParty(
3522 IN NDIS_STATUS DropStatus
,
3523 IN NDIS_HANDLE NdisPartyHandle
,
3524 IN PVOID Buffer OPTIONAL
,
3530 NdisCmDropPartyComplete(
3531 IN NDIS_STATUS Status
,
3532 IN NDIS_HANDLE NdisPartyHandle
);
3537 NdisCmMakeCallComplete(
3538 IN NDIS_STATUS Status
,
3539 IN NDIS_HANDLE NdisVcHandle
,
3540 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
3541 IN NDIS_HANDLE CallMgrPartyContext OPTIONAL
,
3542 IN PCO_CALL_PARAMETERS CallParameters
);
3547 NdisCmModifyCallQoSComplete(
3548 IN NDIS_STATUS Status
,
3549 IN NDIS_HANDLE NdisVcHandle
,
3550 IN PCO_CALL_PARAMETERS CallParameters
);
3555 NdisCmOpenAddressFamilyComplete(
3556 IN NDIS_STATUS Status
,
3557 IN NDIS_HANDLE NdisAfHandle
,
3558 IN NDIS_HANDLE CallMgrAfContext
);
3563 NdisCmRegisterAddressFamily(
3564 IN NDIS_HANDLE NdisBindingHandle
,
3565 IN PCO_ADDRESS_FAMILY AddressFamily
,
3566 IN PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics
,
3567 IN UINT SizeOfCmCharacteristics
);
3572 NdisCmRegisterSapComplete(
3573 IN NDIS_STATUS Status
,
3574 IN NDIS_HANDLE NdisSapHandle
,
3575 IN NDIS_HANDLE CallMgrSapContext
);
3582 IN NDIS_HANDLE NdisVcHandle
,
3583 IN PCO_CALL_PARAMETERS CallParameters
);
3589 IN NDIS_HANDLE MiniportAdapterHandle
,
3590 IN NDIS_HANDLE NdisAfHandle
,
3591 IN NDIS_HANDLE MiniportVcContext
,
3592 OUT PNDIS_HANDLE NdisVcHandle
);
3597 NdisMCmDeactivateVc(
3598 IN NDIS_HANDLE NdisVcHandle
);
3604 IN NDIS_HANDLE NdisVcHandle
);
3609 NdisMCmRegisterAddressFamily(
3610 IN NDIS_HANDLE MiniportAdapterHandle
,
3611 IN PCO_ADDRESS_FAMILY AddressFamily
,
3612 IN PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics
,
3613 IN UINT SizeOfCmCharacteristics
);
3619 IN NDIS_HANDLE NdisAfHandle
,
3620 IN NDIS_HANDLE NdisVcHandle OPTIONAL
,
3621 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
3622 IN OUT PNDIS_REQUEST NdisRequest
);
3625 /* Connection-oriented services */
3631 IN NDIS_HANDLE NdisBindingHandle
,
3632 IN NDIS_HANDLE NdisAfHandle OPTIONAL
,
3633 IN NDIS_HANDLE ProtocolVcContext
,
3634 IN OUT PNDIS_HANDLE NdisVcHandle
);
3640 IN NDIS_HANDLE NdisVcHandle
);
3646 IN NDIS_HANDLE NdisBindingHandle
,
3647 IN NDIS_HANDLE NdisAfHandle OPTIONAL
,
3648 IN NDIS_HANDLE NdisVcHandle OPTIONAL
,
3649 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
3650 IN OUT PNDIS_REQUEST NdisRequest
);
3655 NdisCoRequestComplete(
3656 IN NDIS_STATUS Status
,
3657 IN NDIS_HANDLE NdisAfHandle
,
3658 IN NDIS_HANDLE NdisVcHandle OPTIONAL
,
3659 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
3660 IN PNDIS_REQUEST NdisRequest
);
3666 IN NDIS_HANDLE NdisVcHandle
,
3667 IN PPNDIS_PACKET PacketArray
,
3668 IN UINT NumberOfPackets
);
3673 NdisMCoActivateVcComplete(
3674 IN NDIS_STATUS Status
,
3675 IN NDIS_HANDLE NdisVcHandle
,
3676 IN PCO_CALL_PARAMETERS CallParameters
);
3681 NdisMCoDeactivateVcComplete(
3682 IN NDIS_STATUS Status
,
3683 IN NDIS_HANDLE NdisVcHandle
);
3688 NdisMCoIndicateReceivePacket(
3689 IN NDIS_HANDLE NdisVcHandle
,
3690 IN PPNDIS_PACKET PacketArray
,
3691 IN UINT NumberOfPackets
);
3696 NdisMCoIndicateStatus(
3697 IN NDIS_HANDLE MiniportAdapterHandle
,
3698 IN NDIS_HANDLE NdisVcHandle OPTIONAL
,
3699 IN NDIS_STATUS GeneralStatus
,
3700 IN PVOID StatusBuffer OPTIONAL
,
3701 IN ULONG StatusBufferSize
);
3706 NdisMCoReceiveComplete(
3707 IN NDIS_HANDLE MiniportAdapterHandle
);
3712 NdisMCoRequestComplete(
3713 IN NDIS_STATUS Status
,
3714 IN NDIS_HANDLE MiniportAdapterHandle
,
3715 IN PNDIS_REQUEST Request
);
3720 NdisMCoSendComplete(
3721 IN NDIS_STATUS Status
,
3722 IN NDIS_HANDLE NdisVcHandle
,
3723 IN PNDIS_PACKET Packet
);
3726 /* NDIS 5.0 extensions for intermediate drivers */
3731 NdisIMAssociateMiniport(
3732 IN NDIS_HANDLE DriverHandle
,
3733 IN NDIS_HANDLE ProtocolHandle
);
3738 NdisIMCancelInitializeDeviceInstance(
3739 IN NDIS_HANDLE DriverHandle
,
3740 IN PNDIS_STRING DeviceInstance
);
3745 NdisIMCopySendCompletePerPacketInfo(
3746 IN PNDIS_PACKET DstPacket
,
3747 IN PNDIS_PACKET SrcPacket
);
3752 NdisIMCopySendPerPacketInfo(
3753 IN PNDIS_PACKET DstPacket
,
3754 IN PNDIS_PACKET SrcPacket
);
3759 NdisIMDeregisterLayeredMiniport(
3760 IN NDIS_HANDLE DriverHandle
);
3765 NdisIMGetBindingContext(
3766 IN NDIS_HANDLE NdisBindingHandle
);
3771 NdisIMGetDeviceContext(
3772 IN NDIS_HANDLE MiniportAdapterHandle
);
3777 NdisIMInitializeDeviceInstanceEx(
3778 IN NDIS_HANDLE DriverHandle
,
3779 IN PNDIS_STRING DriverInstance
,
3780 IN NDIS_HANDLE DeviceContext OPTIONAL
);
3785 NdisInterlockedPopEntrySList(
3786 IN PSLIST_HEADER ListHead
,
3787 IN PKSPIN_LOCK Lock
);
3792 NdisInterlockedPushEntrySList(
3793 IN PSLIST_HEADER ListHead
,
3794 IN PSINGLE_LIST_ENTRY ListEntry
,
3795 IN PKSPIN_LOCK Lock
);
3800 NdisQueryBufferSafe(
3801 IN PNDIS_BUFFER Buffer
,
3802 OUT PVOID
*VirtualAddress OPTIONAL
,
3806 /* Prototypes for NDIS_MINIPORT_CHARACTERISTICS */
3808 typedef BOOLEAN DDKAPI
3809 (*W_CHECK_FOR_HANG_HANDLER
)(
3810 IN NDIS_HANDLE MiniportAdapterContext
);
3813 (*W_DISABLE_INTERRUPT_HANDLER
)(
3814 IN NDIS_HANDLE MiniportAdapterContext
);
3817 (*W_ENABLE_INTERRUPT_HANDLER
)(
3818 IN NDIS_HANDLE MiniportAdapterContext
);
3822 IN NDIS_HANDLE MiniportAdapterContext
);
3825 (*W_HANDLE_INTERRUPT_HANDLER
)(
3826 IN NDIS_HANDLE MiniportAdapterContext
);
3828 typedef NDIS_STATUS DDKAPI
3829 (*W_INITIALIZE_HANDLER
)(
3830 OUT PNDIS_STATUS OpenErrorStatus
,
3831 OUT PUINT SelectedMediumIndex
,
3832 IN PNDIS_MEDIUM MediumArray
,
3833 IN UINT MediumArraySize
,
3834 IN NDIS_HANDLE MiniportAdapterContext
,
3835 IN NDIS_HANDLE WrapperConfigurationContext
);
3839 OUT PBOOLEAN InterruptRecognized
,
3840 OUT PBOOLEAN QueueMiniportHandleInterrupt
,
3841 IN NDIS_HANDLE MiniportAdapterContext
);
3843 typedef NDIS_STATUS DDKAPI
3844 (*W_QUERY_INFORMATION_HANDLER
)(
3845 IN NDIS_HANDLE MiniportAdapterContext
,
3847 IN PVOID InformationBuffer
,
3848 IN ULONG InformationBufferLength
,
3849 OUT PULONG BytesWritten
,
3850 OUT PULONG BytesNeeded
);
3852 typedef NDIS_STATUS DDKAPI
3853 (*W_RECONFIGURE_HANDLER
)(
3854 OUT PNDIS_STATUS OpenErrorStatus
,
3855 IN NDIS_HANDLE MiniportAdapterContext
,
3856 IN NDIS_HANDLE WrapperConfigurationContext
);
3858 typedef NDIS_STATUS DDKAPI
3860 OUT PBOOLEAN AddressingReset
,
3861 IN NDIS_HANDLE MiniportAdapterContext
);
3863 typedef NDIS_STATUS DDKAPI
3865 IN NDIS_HANDLE MiniportAdapterContext
,
3866 IN PNDIS_PACKET Packet
,
3869 typedef NDIS_STATUS DDKAPI
3871 IN NDIS_HANDLE MiniportAdapterContext
,
3872 IN NDIS_HANDLE NdisLinkHandle
,
3873 IN PNDIS_WAN_PACKET Packet
);
3875 typedef NDIS_STATUS DDKAPI
3876 (*W_SET_INFORMATION_HANDLER
)(
3877 IN NDIS_HANDLE MiniportAdapterContext
,
3879 IN PVOID InformationBuffer
,
3880 IN ULONG InformationBufferLength
,
3881 OUT PULONG BytesRead
,
3882 OUT PULONG BytesNeeded
);
3884 typedef NDIS_STATUS DDKAPI
3885 (*W_TRANSFER_DATA_HANDLER
)(
3886 OUT PNDIS_PACKET Packet
,
3887 OUT PUINT BytesTransferred
,
3888 IN NDIS_HANDLE MiniportAdapterContext
,
3889 IN NDIS_HANDLE MiniportReceiveContext
,
3891 IN UINT BytesToTransfer
);
3893 typedef NDIS_STATUS DDKAPI
3894 (*WM_TRANSFER_DATA_HANDLER
)(
3898 /* NDIS structures available only to miniport drivers */
3900 #define NDIS30_MINIPORT_CHARACTERISTICS_S \
3901 UCHAR MajorNdisVersion; \
3902 UCHAR MinorNdisVersion; \
3905 W_CHECK_FOR_HANG_HANDLER CheckForHangHandler; \
3906 W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler; \
3907 W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler; \
3908 W_HALT_HANDLER HaltHandler; \
3909 W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler; \
3910 W_INITIALIZE_HANDLER InitializeHandler; \
3911 W_ISR_HANDLER ISRHandler; \
3912 W_QUERY_INFORMATION_HANDLER QueryInformationHandler; \
3913 W_RECONFIGURE_HANDLER ReconfigureHandler; \
3914 W_RESET_HANDLER ResetHandler; \
3915 _ANONYMOUS_UNION union { \
3916 W_SEND_HANDLER SendHandler; \
3917 WM_SEND_HANDLER WanSendHandler; \
3918 } _UNION_NAME(u1); \
3919 W_SET_INFORMATION_HANDLER SetInformationHandler; \
3920 _ANONYMOUS_UNION union { \
3921 W_TRANSFER_DATA_HANDLER TransferDataHandler; \
3922 WM_TRANSFER_DATA_HANDLER WanTransferDataHandler; \
3925 typedef struct _NDIS30_MINIPORT_CHARACTERISTICS
{
3926 NDIS30_MINIPORT_CHARACTERISTICS_S
3927 } NDIS30_MINIPORT_CHARACTERISTICS
, *PSNDIS30_MINIPORT_CHARACTERISTICS
;
3930 /* Extensions for NDIS 4.0 miniports */
3933 (*W_SEND_PACKETS_HANDLER
)(
3934 IN NDIS_HANDLE MiniportAdapterContext
,
3935 IN PPNDIS_PACKET PacketArray
,
3936 IN UINT NumberOfPackets
);
3939 (*W_RETURN_PACKET_HANDLER
)(
3940 IN NDIS_HANDLE MiniportAdapterContext
,
3941 IN PNDIS_PACKET Packet
);
3944 (*W_ALLOCATE_COMPLETE_HANDLER
)(
3945 IN NDIS_HANDLE MiniportAdapterContext
,
3946 IN PVOID VirtualAddress
,
3947 IN PNDIS_PHYSICAL_ADDRESS PhysicalAddress
,
3953 #define NDIS40_MINIPORT_CHARACTERISTICS_S \
3954 NDIS30_MINIPORT_CHARACTERISTICS Ndis30Chars; \
3955 W_RETURN_PACKET_HANDLER ReturnPacketHandler; \
3956 W_SEND_PACKETS_HANDLER SendPacketsHandler; \
3957 W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
3959 #else /* !__cplusplus */
3961 #define NDIS40_MINIPORT_CHARACTERISTICS_S \
3962 NDIS30_MINIPORT_CHARACTERISTICS_S \
3963 W_RETURN_PACKET_HANDLER ReturnPacketHandler; \
3964 W_SEND_PACKETS_HANDLER SendPacketsHandler; \
3965 W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
3967 #endif /* !__cplusplus */
3969 typedef struct _NDIS40_MINIPORT_CHARACTERISTICS
{
3970 NDIS40_MINIPORT_CHARACTERISTICS_S
3971 } NDIS40_MINIPORT_CHARACTERISTICS
, *PNDIS40_MINIPORT_CHARACTERISTICS
;
3974 /* Extensions for NDIS 5.0 miniports */
3976 typedef NDIS_STATUS DDKAPI
3977 (*W_CO_CREATE_VC_HANDLER
)(
3978 IN NDIS_HANDLE MiniportAdapterContext
,
3979 IN NDIS_HANDLE NdisVcHandle
,
3980 OUT PNDIS_HANDLE MiniportVcContext
);
3982 typedef NDIS_STATUS DDKAPI
3983 (*W_CO_DELETE_VC_HANDLER
)(
3984 IN NDIS_HANDLE MiniportVcContext
);
3986 typedef NDIS_STATUS DDKAPI
3987 (*W_CO_ACTIVATE_VC_HANDLER
)(
3988 IN NDIS_HANDLE MiniportVcContext
,
3989 IN OUT PCO_CALL_PARAMETERS CallParameters
);
3991 typedef NDIS_STATUS DDKAPI
3992 (*W_CO_DEACTIVATE_VC_HANDLER
)(
3993 IN NDIS_HANDLE MiniportVcContext
);
3996 (*W_CO_SEND_PACKETS_HANDLER
)(
3997 IN NDIS_HANDLE MiniportVcContext
,
3998 IN PPNDIS_PACKET PacketArray
,
3999 IN UINT NumberOfPackets
);
4001 typedef NDIS_STATUS DDKAPI
4002 (*W_CO_REQUEST_HANDLER
)(
4003 IN NDIS_HANDLE MiniportAdapterContext
,
4004 IN NDIS_HANDLE MiniportVcContext OPTIONAL
,
4005 IN OUT PNDIS_REQUEST NdisRequest
);
4009 #define NDIS50_MINIPORT_CHARACTERISTICS_S \
4010 NDIS40_MINIPORT_CHARACTERISTICS Ndis40Chars; \
4011 W_CO_CREATE_VC_HANDLER CoCreateVcHandler; \
4012 W_CO_DELETE_VC_HANDLER CoDeleteVcHandler; \
4013 W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler; \
4014 W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler; \
4015 W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler; \
4016 W_CO_REQUEST_HANDLER CoRequestHandler;
4018 #else /* !__cplusplus */
4020 #define NDIS50_MINIPORT_CHARACTERISTICS_S \
4021 NDIS40_MINIPORT_CHARACTERISTICS_S \
4022 W_CO_CREATE_VC_HANDLER CoCreateVcHandler; \
4023 W_CO_DELETE_VC_HANDLER CoDeleteVcHandler; \
4024 W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler; \
4025 W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler; \
4026 W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler; \
4027 W_CO_REQUEST_HANDLER CoRequestHandler;
4029 #endif /* !__cplusplus */
4031 typedef struct _NDIS50_MINIPORT_CHARACTERISTICS
{
4032 NDIS50_MINIPORT_CHARACTERISTICS_S
4033 } NDIS50_MINIPORT_CHARACTERISTICS
, *PSNDIS50_MINIPORT_CHARACTERISTICS
;
4036 /* Extensions for NDIS 5.1 miniports */
4039 (*W_CANCEL_SEND_PACKETS_HANDLER
)(
4040 IN NDIS_HANDLE MiniportAdapterContext
,
4044 #if defined(NDIS51_MINIPORT)
4045 typedef struct _NDIS_MINIPORT_CHARACTERISTICS
{
4046 NDIS50_MINIPORT_CHARACTERISTICS_S
4047 } NDIS_MINIPORT_CHARACTERISTICS
, *PNDIS_MINIPORT_CHARACTERISTICS
;
4048 #elif defined(NDIS50_MINIPORT)
4049 typedef struct _NDIS_MINIPORT_CHARACTERISTICS
{
4050 NDIS50_MINIPORT_CHARACTERISTICS_S
4051 } NDIS_MINIPORT_CHARACTERISTICS
, *PNDIS_MINIPORT_CHARACTERISTICS
;
4052 #elif defined(NDIS40_MINIPORT)
4053 typedef struct _NDIS_MINIPORT_CHARACTERISTICS
{
4054 NDIS40_MINIPORT_CHARACTERISTICS_S
4055 } NDIS_MINIPORT_CHARACTERISTICS
, *PNDIS_MINIPORT_CHARACTERISTICS
;
4057 typedef struct _NDIS_MINIPORT_CHARACTERISTICS
{
4058 NDIS30_MINIPORT_CHARACTERISTICS_S
4059 } NDIS_MINIPORT_CHARACTERISTICS
, *PNDIS_MINIPORT_CHARACTERISTICS
;
4063 typedef NDIS_STATUS DDKAPI
4065 IN NDIS_HANDLE MacBindingHandle
,
4066 IN PNDIS_PACKET Packet
);
4068 typedef NDIS_STATUS DDKAPI
4069 (*TRANSFER_DATA_HANDLER
)(
4070 IN NDIS_HANDLE MacBindingHandle
,
4071 IN NDIS_HANDLE MacReceiveContext
,
4073 IN UINT BytesToTransfer
,
4074 OUT PNDIS_PACKET Packet
,
4075 OUT PUINT BytesTransferred
);
4077 typedef NDIS_STATUS DDKAPI
4079 IN NDIS_HANDLE MacBindingHandle
);
4081 typedef NDIS_STATUS DDKAPI
4083 IN NDIS_HANDLE MacBindingHandle
,
4084 IN PNDIS_REQUEST NdisRequest
);
4088 /* Structures available only to full MAC drivers */
4090 typedef BOOLEAN DDKAPI
4091 (*PNDIS_INTERRUPT_SERVICE
)(
4092 IN PVOID InterruptContext
);
4095 (*PNDIS_DEFERRED_PROCESSING
)(
4096 IN PVOID SystemSpecific1
,
4097 IN PVOID InterruptContext
,
4098 IN PVOID SystemSpecific2
,
4099 IN PVOID SystemSpecific3
);
4103 typedef struct _NDIS_MINIPORT_BLOCK NDIS_MINIPORT_BLOCK
, *PNDIS_MINIPORT_BLOCK
;
4104 typedef struct _NDIS_PROTOCOL_BLOCK NDIS_PROTOCOL_BLOCK
, *PNDIS_PROTOCOL_BLOCK
;
4105 typedef struct _NDIS_OPEN_BLOCK NDIS_OPEN_BLOCK
, *PNDIS_OPEN_BLOCK
;
4106 typedef struct _NDIS_M_DRIVER_BLOCK NDIS_M_DRIVER_BLOCK
, *PNDIS_M_DRIVER_BLOCK
;
4107 typedef struct _NDIS_AF_LIST NDIS_AF_LIST
, *PNDIS_AF_LIST
;
4110 typedef struct _NDIS_MINIPORT_INTERRUPT
{
4111 PKINTERRUPT InterruptObject
;
4112 KSPIN_LOCK DpcCountLock
;
4113 PVOID MiniportIdField
;
4114 W_ISR_HANDLER MiniportIsr
;
4115 W_HANDLE_INTERRUPT_HANDLER MiniportDpc
;
4117 PNDIS_MINIPORT_BLOCK Miniport
;
4120 KEVENT DpcsCompletedEvent
;
4121 BOOLEAN SharedInterrupt
;
4122 BOOLEAN IsrRequested
;
4123 } NDIS_MINIPORT_INTERRUPT
, *PNDIS_MINIPORT_INTERRUPT
;
4125 typedef struct _NDIS_MINIPORT_TIMER
{
4128 PNDIS_TIMER_FUNCTION MiniportTimerFunction
;
4129 PVOID MiniportTimerContext
;
4130 PNDIS_MINIPORT_BLOCK Miniport
;
4131 struct _NDIS_MINIPORT_TIMER
*NextDeferredTimer
;
4132 } NDIS_MINIPORT_TIMER
, *PNDIS_MINIPORT_TIMER
;
4134 typedef struct _NDIS_INTERRUPT
{
4135 PKINTERRUPT InterruptObject
;
4136 KSPIN_LOCK DpcCountLock
;
4137 PNDIS_INTERRUPT_SERVICE MacIsr
;
4138 PNDIS_DEFERRED_PROCESSING MacDpc
;
4140 PVOID InterruptContext
;
4143 KEVENT DpcsCompletedEvent
;
4144 } NDIS_INTERRUPT
, *PNDIS_INTERRUPT
;
4147 typedef enum _NDIS_WORK_ITEM_TYPE
{
4148 NdisWorkItemRequest
,
4150 NdisWorkItemReturnPackets
,
4151 NdisWorkItemResetRequested
,
4152 NdisWorkItemResetInProgress
,
4154 NdisWorkItemSendLoopback
,
4155 NdisWorkItemMiniportCallback
,
4157 } NDIS_WORK_ITEM_TYPE
, *PNDIS_WORK_ITEM_TYPE
;
4159 #define NUMBER_OF_WORK_ITEM_TYPES NdisMaxWorkItems
4160 #define NUMBER_OF_SINGLE_WORK_ITEMS 6
4162 typedef struct _NDIS_MINIPORT_WORK_ITEM
{
4163 SINGLE_LIST_ENTRY Link
;
4164 NDIS_WORK_ITEM_TYPE WorkItemType
;
4165 PVOID WorkItemContext
;
4166 } NDIS_MINIPORT_WORK_ITEM
, *PNDIS_MINIPORT_WORK_ITEM
;
4168 /* Forward declare to pick up a consistent type */
4169 typedef struct _NDIS_WORK_ITEM
;
4170 #pragma warning(push)
4171 typedef VOID (*NDIS_PROC
)(struct _NDIS_WORK_ITEM
*, PVOID
);
4172 #pragma warning(pop)
4173 typedef struct _NDIS_WORK_ITEM
4177 UCHAR WrapperReserved
[8*sizeof(PVOID
)];
4178 } NDIS_WORK_ITEM
, *PNDIS_WORK_ITEM
;
4180 typedef struct _NDIS_BIND_PATHS
{
4182 NDIS_STRING Paths
[1];
4183 } NDIS_BIND_PATHS
, *PNDIS_BIND_PATHS
;
4185 #define DECLARE_UNKNOWN_STRUCT(BaseName) \
4186 typedef struct _##BaseName BaseName, *P##BaseName;
4188 #define DECLARE_UNKNOWN_PROTOTYPE(Name) \
4189 typedef VOID (*(Name))(VOID);
4191 #define ETH_LENGTH_OF_ADDRESS 6
4193 DECLARE_UNKNOWN_STRUCT(ETH_BINDING_INFO
)
4195 DECLARE_UNKNOWN_PROTOTYPE(ETH_ADDRESS_CHANGE
)
4196 DECLARE_UNKNOWN_PROTOTYPE(ETH_FILTER_CHANGE
)
4197 DECLARE_UNKNOWN_PROTOTYPE(ETH_DEFERRED_CLOSE
)
4199 typedef struct _ETH_FILTER
{
4200 PNDIS_SPIN_LOCK Lock
;
4201 CHAR (*MCastAddressBuf
)[ETH_LENGTH_OF_ADDRESS
];
4202 struct _NDIS_MINIPORT_BLOCK
*Miniport
;
4203 UINT CombinedPacketFilter
;
4204 PETH_BINDING_INFO OpenList
;
4205 ETH_ADDRESS_CHANGE AddressChangeAction
;
4206 ETH_FILTER_CHANGE FilterChangeAction
;
4207 ETH_DEFERRED_CLOSE CloseAction
;
4208 UINT MaxMulticastAddresses
;
4210 UCHAR AdapterAddress
[ETH_LENGTH_OF_ADDRESS
];
4211 UINT OldCombinedPacketFilter
;
4212 CHAR (*OldMCastAddressBuf
)[ETH_LENGTH_OF_ADDRESS
];
4213 UINT OldNumAddresses
;
4214 PETH_BINDING_INFO DirectedList
;
4215 PETH_BINDING_INFO BMList
;
4216 PETH_BINDING_INFO MCastSet
;
4217 #if defined(NDIS_WRAPPER)
4221 } ETH_FILTER
, *PETH_FILTER
;
4224 (*ETH_RCV_COMPLETE_HANDLER
)(
4225 IN PETH_FILTER Filter
);
4228 (*ETH_RCV_INDICATE_HANDLER
)(
4229 IN PETH_FILTER Filter
,
4230 IN NDIS_HANDLE MacReceiveContext
,
4232 IN PVOID HeaderBuffer
,
4233 IN UINT HeaderBufferSize
,
4234 IN PVOID LookaheadBuffer
,
4235 IN UINT LookaheadBufferSize
,
4236 IN UINT PacketSize
);
4239 (*FDDI_RCV_COMPLETE_HANDLER
)(
4240 IN PFDDI_FILTER Filter
);
4243 (*FDDI_RCV_INDICATE_HANDLER
)(
4244 IN PFDDI_FILTER Filter
,
4245 IN NDIS_HANDLE MacReceiveContext
,
4247 IN UINT AddressLength
,
4248 IN PVOID HeaderBuffer
,
4249 IN UINT HeaderBufferSize
,
4250 IN PVOID LookaheadBuffer
,
4251 IN UINT LookaheadBufferSize
,
4252 IN UINT PacketSize
);
4255 (*FILTER_PACKET_INDICATION_HANDLER
)(
4256 IN NDIS_HANDLE Miniport
,
4257 IN PPNDIS_PACKET PacketArray
,
4258 IN UINT NumberOfPackets
);
4261 (*TR_RCV_COMPLETE_HANDLER
)(
4262 IN PTR_FILTER Filter
);
4265 (*TR_RCV_INDICATE_HANDLER
)(
4266 IN PTR_FILTER Filter
,
4267 IN NDIS_HANDLE MacReceiveContext
,
4268 IN PVOID HeaderBuffer
,
4269 IN UINT HeaderBufferSize
,
4270 IN PVOID LookaheadBuffer
,
4271 IN UINT LookaheadBufferSize
,
4272 IN UINT PacketSize
);
4275 (*WAN_RCV_COMPLETE_HANDLER
)(
4276 IN NDIS_HANDLE MiniportAdapterHandle
,
4277 IN NDIS_HANDLE NdisLinkContext
);
4281 OUT PNDIS_STATUS Status
,
4282 IN NDIS_HANDLE MiniportAdapterHandle
,
4283 IN NDIS_HANDLE NdisLinkContext
,
4285 IN ULONG PacketSize
);
4287 typedef VOID FASTCALL
4288 (*NDIS_M_DEQUEUE_WORK_ITEM
)(
4289 IN PNDIS_MINIPORT_BLOCK Miniport
,
4290 IN NDIS_WORK_ITEM_TYPE WorkItemType
,
4291 OUT PVOID
*WorkItemContext
);
4293 typedef NDIS_STATUS FASTCALL
4294 (*NDIS_M_QUEUE_NEW_WORK_ITEM
)(
4295 IN PNDIS_MINIPORT_BLOCK Miniport
,
4296 IN NDIS_WORK_ITEM_TYPE WorkItemType
,
4297 IN PVOID WorkItemContext
);
4299 typedef NDIS_STATUS FASTCALL
4300 (*NDIS_M_QUEUE_WORK_ITEM
)(
4301 IN PNDIS_MINIPORT_BLOCK Miniport
,
4302 IN NDIS_WORK_ITEM_TYPE WorkItemType
,
4303 IN PVOID WorkItemContext
);
4306 (*NDIS_M_REQ_COMPLETE_HANDLER
)(
4307 IN NDIS_HANDLE MiniportAdapterHandle
,
4308 IN NDIS_STATUS Status
);
4311 (*NDIS_M_RESET_COMPLETE_HANDLER
)(
4312 IN NDIS_HANDLE MiniportAdapterHandle
,
4313 IN NDIS_STATUS Status
,
4314 IN BOOLEAN AddressingReset
);
4317 (*NDIS_M_SEND_COMPLETE_HANDLER
)(
4318 IN NDIS_HANDLE MiniportAdapterHandle
,
4319 IN PNDIS_PACKET Packet
,
4320 IN NDIS_STATUS Status
);
4323 (*NDIS_M_SEND_RESOURCES_HANDLER
)(
4324 IN NDIS_HANDLE MiniportAdapterHandle
);
4326 typedef BOOLEAN FASTCALL
4327 (*NDIS_M_START_SENDS
)(
4328 IN PNDIS_MINIPORT_BLOCK Miniport
);
4331 (*NDIS_M_STATUS_HANDLER
)(
4332 IN NDIS_HANDLE MiniportHandle
,
4333 IN NDIS_STATUS GeneralStatus
,
4334 IN PVOID StatusBuffer
,
4335 IN UINT StatusBufferSize
);
4338 (*NDIS_M_STS_COMPLETE_HANDLER
)(
4339 IN NDIS_HANDLE MiniportAdapterHandle
);
4342 (*NDIS_M_TD_COMPLETE_HANDLER
)(
4343 IN NDIS_HANDLE MiniportAdapterHandle
,
4344 IN PNDIS_PACKET Packet
,
4345 IN NDIS_STATUS Status
,
4346 IN UINT BytesTransferred
);
4348 typedef VOID (DDKAPI
*NDIS_WM_SEND_COMPLETE_HANDLER
)(
4349 IN NDIS_HANDLE MiniportAdapterHandle
,
4351 IN NDIS_STATUS Status
);
4356 #define ARC_SEND_BUFFERS 8
4357 #define ARC_HEADER_SIZE 4
4359 typedef struct _NDIS_ARC_BUF
{
4360 NDIS_HANDLE ArcnetBufferPool
;
4361 PUCHAR ArcnetLookaheadBuffer
;
4363 ARC_BUFFER_LIST ArcnetBuffers
[ARC_SEND_BUFFERS
];
4364 } NDIS_ARC_BUF
, *PNDIS_ARC_BUF
;
4368 typedef struct _NDIS_LOG
{
4369 PNDIS_MINIPORT_BLOCK Miniport
;
4377 } NDIS_LOG
, *PNDIS_LOG
;
4380 #define FILTERDBS_ARCNET_S \
4383 #define FILTERDBS_ARCNET_S \
4385 #endif /* !ARCNET */
4387 #define FILTERDBS_S \
4388 _ANONYMOUS_UNION union { \
4389 PETH_FILTER EthDB; \
4390 PNULL_FILTER NullDB; \
4393 PFDDI_FILTER FddiDB; \
4396 typedef struct _FILTERDBS
{
4398 } FILTERDBS
, *PFILTERDBS
;
4401 struct _NDIS_MINIPORT_BLOCK
{
4403 PNDIS_MINIPORT_BLOCK NextMiniport
;
4404 PNDIS_M_DRIVER_BLOCK DriverHandle
;
4405 NDIS_HANDLE MiniportAdapterContext
;
4406 UNICODE_STRING MiniportName
;
4407 PNDIS_BIND_PATHS BindPaths
;
4408 NDIS_HANDLE OpenQueue
;
4410 NDIS_HANDLE DeviceContext
;
4414 UCHAR AssignedProcessor
;
4416 PNDIS_REQUEST MediaRequest
;
4417 PNDIS_MINIPORT_INTERRUPT Interrupt
;
4420 LIST_ENTRY PacketList
;
4421 PNDIS_PACKET FirstPendingPacket
;
4422 PNDIS_PACKET ReturnPacketsQueue
;
4423 ULONG RequestBuffer
;
4424 PVOID SetMCastBuffer
;
4425 PNDIS_MINIPORT_BLOCK PrimaryMiniport
;
4426 PVOID WrapperContext
;
4427 PVOID BusDataContext
;
4428 ULONG PnPCapabilities
;
4429 PCM_RESOURCE_LIST Resources
;
4430 NDIS_TIMER WakeUpDpcTimer
;
4431 UNICODE_STRING BaseName
;
4432 UNICODE_STRING SymbolicLinkName
;
4433 ULONG CheckForHangSeconds
;
4435 USHORT CFHangCurrentTick
;
4436 NDIS_STATUS ResetStatus
;
4437 NDIS_HANDLE ResetOpen
;
4439 FILTER_PACKET_INDICATION_HANDLER PacketIndicateHandler
;
4440 NDIS_M_SEND_COMPLETE_HANDLER SendCompleteHandler
;
4441 NDIS_M_SEND_RESOURCES_HANDLER SendResourcesHandler
;
4442 NDIS_M_RESET_COMPLETE_HANDLER ResetCompleteHandler
;
4443 NDIS_MEDIUM MediaType
;
4445 NDIS_INTERFACE_TYPE BusType
;
4446 NDIS_INTERFACE_TYPE AdapterType
;
4447 PDEVICE_OBJECT DeviceObject
;
4448 PDEVICE_OBJECT PhysicalDeviceObject
;
4449 PDEVICE_OBJECT NextDeviceObject
;
4450 PMAP_REGISTER_ENTRY MapRegisters
;
4451 PNDIS_AF_LIST CallMgrAfList
;
4452 PVOID MiniportThread
;
4454 USHORT SetInfoBufLen
;
4455 USHORT MaxSendPackets
;
4456 NDIS_STATUS FakeStatus
;
4458 PUNICODE_STRING pAdapterInstanceName
;
4459 PNDIS_MINIPORT_TIMER TimerQueue
;
4461 PNDIS_REQUEST PendingRequest
;
4462 UINT MaximumLongAddresses
;
4463 UINT MaximumShortAddresses
;
4464 UINT CurrentLookahead
;
4465 UINT MaximumLookahead
;
4466 W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler
;
4467 W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler
;
4468 W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler
;
4469 W_SEND_PACKETS_HANDLER SendPacketsHandler
;
4470 NDIS_M_START_SENDS DeferredSendHandler
;
4471 ETH_RCV_INDICATE_HANDLER EthRxIndicateHandler
;
4472 TR_RCV_INDICATE_HANDLER TrRxIndicateHandler
;
4473 FDDI_RCV_INDICATE_HANDLER FddiRxIndicateHandler
;
4474 ETH_RCV_COMPLETE_HANDLER EthRxCompleteHandler
;
4475 TR_RCV_COMPLETE_HANDLER TrRxCompleteHandler
;
4476 FDDI_RCV_COMPLETE_HANDLER FddiRxCompleteHandler
;
4477 NDIS_M_STATUS_HANDLER StatusHandler
;
4478 NDIS_M_STS_COMPLETE_HANDLER StatusCompleteHandler
;
4479 NDIS_M_TD_COMPLETE_HANDLER TDCompleteHandler
;
4480 NDIS_M_REQ_COMPLETE_HANDLER QueryCompleteHandler
;
4481 NDIS_M_REQ_COMPLETE_HANDLER SetCompleteHandler
;
4482 NDIS_WM_SEND_COMPLETE_HANDLER WanSendCompleteHandler
;
4483 WAN_RCV_HANDLER WanRcvHandler
;
4484 WAN_RCV_COMPLETE_HANDLER WanRcvCompleteHandler
;
4485 #if defined(NDIS_WRAPPER)
4486 PNDIS_MINIPORT_BLOCK NextGlobalMiniport
;
4487 SINGLE_LIST_ENTRY WorkQueue
[NUMBER_OF_WORK_ITEM_TYPES
];
4488 SINGLE_LIST_ENTRY SingleWorkItems
[NUMBER_OF_SINGLE_WORK_ITEMS
];
4491 UCHAR ArcnetAddress
;
4493 _ANONYMOUS_UNION
union {
4495 PNDIS_ARC_BUF ArcBuf
;
4501 PCM_RESOURCE_LIST AllocatedResources
;
4502 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
4503 SINGLE_LIST_ENTRY PatternList
;
4504 NDIS_PNP_CAPABILITIES PMCapabilities
;
4505 DEVICE_CAPABILITIES DeviceCaps
;
4507 DEVICE_POWER_STATE CurrentDevicePowerState
;
4509 SYSTEM_POWER_STATE WaitWakeSystemState
;
4510 LARGE_INTEGER VcIndex
;
4511 KSPIN_LOCK VcCountLock
;
4512 LIST_ENTRY WmiEnabledVcs
;
4513 PNDIS_GUID pNdisGuidMap
;
4514 PNDIS_GUID pCustomGuidMap
;
4516 USHORT cNdisGuidMap
;
4517 USHORT cCustomGuidMap
;
4518 USHORT CurrentMapRegister
;
4519 PKEVENT AllocationEvent
;
4520 USHORT BaseMapRegistersNeeded
;
4521 USHORT SGMapRegistersNeeded
;
4522 ULONG MaximumPhysicalMapping
;
4523 NDIS_TIMER MediaDisconnectTimer
;
4524 USHORT MediaDisconnectTimeOut
;
4525 USHORT InstanceNumber
;
4526 NDIS_EVENT OpenReadyEvent
;
4527 NDIS_PNP_DEVICE_STATE PnPDeviceState
;
4528 NDIS_PNP_DEVICE_STATE OldPnPDeviceState
;
4529 PGET_SET_DEVICE_DATA SetBusData
;
4530 PGET_SET_DEVICE_DATA GetBusData
;
4534 NDIS_STATS NdisStats
;
4538 PNDIS_PACKET IndicatedPacket
[MAXIMUM_PROCESSORS
];
4539 PKEVENT RemoveReadyEvent
;
4540 PKEVENT AllOpensClosedEvent
;
4541 PKEVENT AllRequestsCompletedEvent
;
4543 NDIS_MINIPORT_WORK_ITEM WorkItemBuffer
[NUMBER_OF_SINGLE_WORK_ITEMS
];
4544 PDMA_ADAPTER SystemAdapterObject
;
4545 ULONG DriverVerifyFlags
;
4547 USHORT InternalResetCount
;
4548 USHORT MiniportResetCount
;
4549 USHORT MediaSenseConnectCount
;
4550 USHORT MediaSenseDisconnectCount
;
4551 PNDIS_PACKET
*xPackets
;
4552 ULONG UserModeOpenReferences
;
4553 _ANONYMOUS_UNION
union {
4554 PVOID SavedSendHandler
;
4555 PVOID SavedWanSendHandler
;
4557 PVOID SavedSendPacketsHandler
;
4558 PVOID SavedCancelSendPacketsHandler
;
4559 W_SEND_PACKETS_HANDLER WSendPacketsHandler
;
4560 ULONG MiniportAttributes
;
4561 PDMA_ADAPTER SavedSystemAdapterObject
;
4563 USHORT CFHangXTicks
;
4565 ULONG IndicatedPacketsCount
;
4566 ULONG PhysicalMediumType
;
4567 PNDIS_REQUEST LastRequest
;
4568 LONG DmaAdapterRefCount
;
4574 KSPIN_LOCK TimerQueueLock
;
4575 PKEVENT ResetCompletedEvent
;
4576 PKEVENT QueuedBindingCompletedEvent
;
4577 PKEVENT DmaResourcesReleasedEvent
;
4578 FILTER_PACKET_INDICATION_HANDLER SavedPacketIndicateHandler
;
4579 ULONG RegisteredInterrupts
;
4580 PNPAGED_LOOKASIDE_LIST SGListLookasideList
;
4581 ULONG ScatterGatherListSize
;
4586 /* Handler prototypes for NDIS_OPEN_BLOCK */
4588 typedef NDIS_STATUS (DDKAPI
*WAN_SEND_HANDLER
)(
4589 IN NDIS_HANDLE MacBindingHandle
,
4590 IN NDIS_HANDLE LinkHandle
,
4593 /* NDIS 4.0 extension */
4595 typedef VOID (DDKAPI
*SEND_PACKETS_HANDLER
)(
4596 IN NDIS_HANDLE MiniportAdapterContext
,
4597 IN PPNDIS_PACKET PacketArray
,
4598 IN UINT NumberOfPackets
);
4600 #if defined(NDIS_WRAPPER)
4601 #define NDIS_COMMON_OPEN_BLOCK_WRAPPER_S \
4604 KSPIN_LOCK SpinLock; \
4605 NDIS_HANDLE FilterHandle; \
4606 ULONG ProtocolOptions; \
4607 USHORT CurrentLookahead; \
4608 USHORT ConnectDampTicks; \
4609 USHORT DisconnectDampTicks; \
4610 W_SEND_HANDLER WSendHandler; \
4611 W_TRANSFER_DATA_HANDLER WTransferDataHandler; \
4612 W_SEND_PACKETS_HANDLER WSendPacketsHandler; \
4613 W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler; \
4614 ULONG WakeUpEnable; \
4615 PKEVENT CloseCompleteEvent; \
4617 ULONG AfReferences; \
4618 PNDIS_OPEN_BLOCK NextGlobalOpen;
4620 #define NDIS_COMMON_OPEN_BLOCK_WRAPPER_S
4623 #define NDIS_COMMON_OPEN_BLOCK_S \
4625 NDIS_HANDLE BindingHandle; \
4626 PNDIS_MINIPORT_BLOCK MiniportHandle; \
4627 PNDIS_PROTOCOL_BLOCK ProtocolHandle; \
4628 NDIS_HANDLE ProtocolBindingContext
; \
4629 PNDIS_OPEN_BLOCK MiniportNextOpen
; \
4630 PNDIS_OPEN_BLOCK ProtocolNextOpen
; \
4631 NDIS_HANDLE MiniportAdapterContext
; \
4632 BOOLEAN Reserved1
; \
4633 BOOLEAN Reserved2
; \
4634 BOOLEAN Reserved3
; \
4635 BOOLEAN Reserved4
; \
4636 PNDIS_STRING BindDeviceName
; \
4637 KSPIN_LOCK Reserved5
; \
4638 PNDIS_STRING RootDeviceName
; \
4639 _ANONYMOUS_UNION
union { \
4640 SEND_HANDLER SendHandler
; \
4641 WAN_SEND_HANDLER WanSendHandler
; \
4643 TRANSFER_DATA_HANDLER TransferDataHandler
; \
4644 SEND_COMPLETE_HANDLER SendCompleteHandler
; \
4645 TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler
; \
4646 RECEIVE_HANDLER ReceiveHandler
; \
4647 RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler
; \
4648 WAN_RECEIVE_HANDLER WanReceiveHandler
; \
4649 REQUEST_COMPLETE_HANDLER RequestCompleteHandler
; \
4650 RECEIVE_PACKET_HANDLER ReceivePacketHandler
; \
4651 SEND_PACKETS_HANDLER SendPacketsHandler
; \
4652 RESET_HANDLER ResetHandler
; \
4653 REQUEST_HANDLER RequestHandler
; \
4654 RESET_COMPLETE_HANDLER ResetCompleteHandler
; \
4655 STATUS_HANDLER StatusHandler
; \
4656 STATUS_COMPLETE_HANDLER StatusCompleteHandler
; \
4657 NDIS_COMMON_OPEN_BLOCK_WRAPPER_S
4659 typedef struct _NDIS_COMMON_OPEN_BLOCK
{
4660 NDIS_COMMON_OPEN_BLOCK_S
4661 } NDIS_COMMON_OPEN_BLOCK
;
4663 struct _NDIS_OPEN_BLOCK
4666 NDIS_COMMON_OPEN_BLOCK NdisCommonOpenBlock
;
4668 NDIS_COMMON_OPEN_BLOCK_S
4670 #if defined(NDIS_WRAPPER)
4671 struct _NDIS_OPEN_CO
4673 struct _NDIS_CO_AF_BLOCK
* NextAf
;
4674 W_CO_CREATE_VC_HANDLER MiniportCoCreateVcHandler
;
4675 W_CO_REQUEST_HANDLER MiniportCoRequestHandler
;
4676 CO_CREATE_VC_HANDLER CoCreateVcHandler
;
4677 CO_DELETE_VC_HANDLER CoDeleteVcHandler
;
4678 PVOID CmActivateVcCompleteHandler
;
4679 PVOID CmDeactivateVcCompleteHandler
;
4680 PVOID CoRequestCompleteHandler
;
4681 LIST_ENTRY ActiveVcHead
;
4682 LIST_ENTRY InactiveVcHead
;
4683 LONG PendingAfNotifications
;
4684 PKEVENT AfNotifyCompleteEvent
;
4691 /* Routines for NDIS miniport drivers */
4696 NdisInitializeWrapper(
4697 OUT PNDIS_HANDLE NdisWrapperHandle
,
4698 IN PVOID SystemSpecific1
,
4699 IN PVOID SystemSpecific2
,
4700 IN PVOID SystemSpecific3
);
4705 NdisMAllocateMapRegisters(
4706 IN NDIS_HANDLE MiniportAdapterHandle
,
4708 IN NDIS_DMA_SIZE DmaSize
,
4709 IN ULONG PhysicalMapRegistersNeeded
,
4710 IN ULONG MaximumPhysicalMapping
);
4714 * NdisMArcIndicateReceive(
4715 * IN NDIS_HANDLE MiniportAdapterHandle,
4716 * IN PUCHAR HeaderBuffer,
4717 * IN PUCHAR DataBuffer,
4720 #define NdisMArcIndicateReceive(MiniportAdapterHandle, \
4725 ArcFilterDprIndicateReceive( \
4726 (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->ArcDB), \
4734 * NdisMArcIndicateReceiveComplete(
4735 * IN NDIS_HANDLE MiniportAdapterHandle);
4737 #define NdisMArcIndicateReceiveComplete(MiniportAdapterHandle) \
4739 if (((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->EthDB) \
4741 NdisMEthIndicateReceiveComplete(_H); \
4744 ArcFilterDprIndicateReceiveComplete( \
4745 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->ArcDB); \
4752 IN NDIS_HANDLE LogHandle
);
4758 IN NDIS_HANDLE MiniportAdapterHandle
,
4760 OUT PNDIS_HANDLE LogHandle
);
4765 NdisMDeregisterAdapterShutdownHandler(
4766 IN NDIS_HANDLE MiniportHandle
);
4771 NdisMDeregisterInterrupt(
4772 IN PNDIS_MINIPORT_INTERRUPT Interrupt
);
4777 NdisMDeregisterIoPortRange(
4778 IN NDIS_HANDLE MiniportAdapterHandle
,
4779 IN UINT InitialPort
,
4780 IN UINT NumberOfPorts
,
4781 IN PVOID PortOffset
);
4785 * NdisMEthIndicateReceive(
4786 * IN NDIS_HANDLE MiniportAdapterHandle,
4787 * IN NDIS_HANDLE MiniportReceiveContext,
4788 * IN PVOID HeaderBuffer,
4789 * IN UINT HeaderBufferSize,
4790 * IN PVOID LookaheadBuffer,
4791 * IN UINT LookaheadBufferSize,
4792 * IN UINT PacketSize);
4794 #define NdisMEthIndicateReceive(MiniportAdapterHandle, \
4795 MiniportReceiveContext, \
4799 LookaheadBufferSize, \
4802 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxIndicateHandler)( \
4803 ((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthDB, \
4804 (MiniportReceiveContext), \
4807 (HeaderBufferSize), \
4808 (LookaheadBuffer), \
4809 (LookaheadBufferSize), \
4815 * NdisMEthIndicateReceiveComplete(
4816 * IN NDIS_HANDLE MiniportAdapterHandle);
4818 #define NdisMEthIndicateReceiveComplete(MiniportAdapterHandle) \
4820 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxCompleteHandler)( \
4821 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->EthDB); \
4826 * NdisMFddiIndicateReceive(
4827 * IN NDIS_HANDLE MiniportAdapterHandle,
4828 * IN NDIS_HANDLE MiniportReceiveContext,
4829 * IN PVOID HeaderBuffer,
4830 * IN UINT HeaderBufferSize,
4831 * IN PVOID LookaheadBuffer,
4832 * IN UINT LookaheadBufferSize,
4833 * IN UINT PacketSize);
4835 #define NdisMFddiIndicateReceive(MiniportAdapterHandle, \
4836 MiniportReceiveContext, \
4840 LookaheadBufferSize, \
4843 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxIndicateHandler)( \
4844 (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiDB), \
4845 (MiniportReceiveContext), \
4846 (PUCHAR)(HeaderBuffer) + 1, \
4847 (((*(PUCHAR*)(HeaderBuffer)) & 0x40) ? \
4848 FDDI_LENGTH_OF_LONG_ADDRESS : \
4849 FDDI_LENGTH_OF_SHORT_ADDRESS), \
4851 (HeaderBufferSize), \
4852 (LookaheadBuffer), \
4853 (LookaheadBufferSize), \
4861 * NdisMFddiIndicateReceiveComplete(
4862 * IN NDIS_HANDLE MiniportAdapterHandle);
4864 #define NdisMFddiIndicateReceiveComplete(MiniportAdapterHandle) \
4866 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxCompleteHandler)( \
4867 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FddiDB); \
4874 IN NDIS_HANDLE LogHandle
);
4879 NdisMFreeMapRegisters(
4880 IN NDIS_HANDLE MiniportAdapterHandle
);
4885 * NdisMIndicateReceivePacket(
4886 * IN NDIS_HANDLE MiniportAdapterHandle,
4887 * IN PPNDIS_PACKET ReceivePackets,
4888 * IN UINT NumberOfPackets);
4890 #define NdisMIndicateReceivePacket(MiniportAdapterHandle, \
4891 ReceivePackets, NumberOfPackets) \
4892 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->PacketIndicateHandler)( \
4893 MiniportAdapterHandle, ReceivePackets, NumberOfPackets)
4897 * NdisMIndicateStatus(
4898 * IN NDIS_HANDLE MiniportAdapterHandle,
4899 * IN NDIS_STATUS GeneralStatus,
4900 * IN PVOID StatusBuffer,
4901 * IN UINT StatusBufferSize);
4904 #define NdisMIndicateStatus(MiniportAdapterHandle, \
4905 GeneralStatus, StatusBuffer, StatusBufferSize) \
4906 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->StatusHandler)( \
4907 MiniportAdapterHandle, GeneralStatus, StatusBuffer, StatusBufferSize)
4911 * NdisMIndicateStatusComplete(
4912 * IN NDIS_HANDLE MiniportAdapterHandle);
4914 #define NdisMIndicateStatusComplete(MiniportAdapterHandle) \
4915 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->StatusCompleteHandler)( \
4916 MiniportAdapterHandle)
4920 * NdisMInitializeWrapper(
4921 * OUT PNDIS_HANDLE NdisWrapperHandle,
4922 * IN PVOID SystemSpecific1,
4923 * IN PVOID SystemSpecific2,
4924 * IN PVOID SystemSpecific3);
4926 #define NdisMInitializeWrapper(NdisWrapperHandle, \
4930 NdisInitializeWrapper((NdisWrapperHandle), \
4931 (SystemSpecific1), \
4932 (SystemSpecific2), \
4939 OUT PVOID
*VirtualAddress
,
4940 IN NDIS_HANDLE MiniportAdapterHandle
,
4941 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress
,
4946 * NdisMQueryInformationComplete(
4947 * IN NDIS_HANDLE MiniportAdapterHandle,
4948 * IN NDIS_STATUS Status);
4950 #define NdisMQueryInformationComplete(MiniportAdapterHandle, Status) \
4951 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->QueryCompleteHandler)(MiniportAdapterHandle, Status)
4956 NdisMRegisterAdapterShutdownHandler(
4957 IN NDIS_HANDLE MiniportHandle
,
4958 IN PVOID ShutdownContext
,
4959 IN ADAPTER_SHUTDOWN_HANDLER ShutdownHandler
);
4964 NdisMRegisterInterrupt(
4965 OUT PNDIS_MINIPORT_INTERRUPT Interrupt
,
4966 IN NDIS_HANDLE MiniportAdapterHandle
,
4967 IN UINT InterruptVector
,
4968 IN UINT InterruptLevel
,
4969 IN BOOLEAN RequestIsr
,
4970 IN BOOLEAN SharedInterrupt
,
4971 IN NDIS_INTERRUPT_MODE InterruptMode
);
4976 NdisMRegisterIoPortRange(
4977 OUT PVOID
*PortOffset
,
4978 IN NDIS_HANDLE MiniportAdapterHandle
,
4979 IN UINT InitialPort
,
4980 IN UINT NumberOfPorts
);
4985 NdisMRegisterMiniport(
4986 IN NDIS_HANDLE NdisWrapperHandle
,
4987 IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics
,
4988 IN UINT CharacteristicsLength
);
4994 IN PNDIS_MINIPORT_TIMER Timer
,
4995 IN UINT MillisecondsToDelay
);
5000 NdisMInitializeTimer(
5001 IN OUT PNDIS_MINIPORT_TIMER Timer
,
5002 IN NDIS_HANDLE MiniportAdapterHandle
,
5003 IN PNDIS_TIMER_FUNCTION TimerFunction
,
5004 IN PVOID FunctionContext
);
5009 NdisMSetPeriodicTimer(
5010 IN PNDIS_MINIPORT_TIMER Timer
,
5011 IN UINT MillisecondPeriod
);
5017 IN PNDIS_MINIPORT_TIMER Timer
,
5018 OUT PBOOLEAN TimerCancelled
);
5020 #if !defined(NDIS_WRAPPER)
5024 * NdisMResetComplete(
5025 * IN NDIS_HANDLE MiniportAdapterHandle,
5026 * IN NDIS_STATUS Status,
5027 * IN BOOLEAN AddressingReset);
5029 #define NdisMResetComplete(MiniportAdapterHandle, \
5033 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->ResetCompleteHandler)( \
5034 MiniportAdapterHandle, Status, AddressingReset); \
5039 * NdisMSendComplete(
5040 * IN NDIS_HANDLE MiniportAdapterHandle,
5041 * IN PNDIS_PACKET Packet,
5042 * IN NDIS_STATUS Status);
5044 #define NdisMSendComplete(MiniportAdapterHandle, \
5048 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendCompleteHandler)( \
5049 MiniportAdapterHandle, Packet, Status); \
5054 * NdisMSendResourcesAvailable(
5055 * IN NDIS_HANDLE MiniportAdapterHandle);
5057 #define NdisMSendResourcesAvailable(MiniportAdapterHandle) \
5059 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendResourcesHandler)( \
5060 MiniportAdapterHandle); \
5065 * NdisMTransferDataComplete(
5066 * IN NDIS_HANDLE MiniportAdapterHandle,
5067 * IN PNDIS_PACKET Packet,
5068 * IN NDIS_STATUS Status,
5069 * IN UINT BytesTransferred);
5071 #define NdisMTransferDataComplete(MiniportAdapterHandle, \
5076 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TDCompleteHandler)( \
5077 MiniportAdapterHandle, Packet, Status, BytesTransferred) \
5080 #endif /* !_NDIS_ */
5085 * NdisMSetAttributes(
5086 * IN NDIS_HANDLE MiniportAdapterHandle,
5087 * IN NDIS_HANDLE MiniportAdapterContext,
5088 * IN BOOLEAN BusMaster,
5089 * IN NDIS_INTERFACE_TYPE AdapterType);
5091 #define NdisMSetAttributes(MiniportAdapterHandle, \
5092 MiniportAdapterContext, \
5095 NdisMSetAttributesEx(MiniportAdapterHandle, \
5096 MiniportAdapterContext, \
5098 (BusMaster) ? NDIS_ATTRIBUTE_BUS_MASTER : 0, \
5104 NdisMSetAttributesEx(
5105 IN NDIS_HANDLE MiniportAdapterHandle
,
5106 IN NDIS_HANDLE MiniportAdapterContext
,
5107 IN UINT CheckForHangTimeInSeconds OPTIONAL
,
5108 IN ULONG AttributeFlags
,
5109 IN NDIS_INTERFACE_TYPE AdapterType
);
5113 * NdisMSetInformationComplete(
5114 * IN NDIS_HANDLE MiniportAdapterHandle,
5115 * IN NDIS_STATUS Status);
5117 #define NdisMSetInformationComplete(MiniportAdapterHandle, \
5119 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SetCompleteHandler)( \
5120 MiniportAdapterHandle, Status)
5126 IN ULONG MicrosecondsToSleep
);
5131 NdisMSynchronizeWithInterrupt(
5132 IN PNDIS_MINIPORT_INTERRUPT Interrupt
,
5133 IN PVOID SynchronizeFunction
,
5134 IN PVOID SynchronizeContext
);
5138 * NdisMTrIndicateReceive(
5139 * IN NDIS_HANDLE MiniportAdapterHandle,
5140 * IN NDIS_HANDLE MiniportReceiveContext,
5141 * IN PVOID HeaderBuffer,
5142 * IN UINT HeaderBufferSize,
5143 * IN PVOID LookaheadBuffer,
5144 * IN UINT LookaheadBufferSize,
5145 * IN UINT PacketSize);
5147 #define NdisMTrIndicateReceive(MiniportAdapterHandle, \
5148 MiniportReceiveContext, \
5152 LookaheadBufferSize, \
5155 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxIndicateHandler)( \
5156 (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrDB), \
5157 (MiniportReceiveContext), \
5160 (HeaderBufferSize), \
5161 (LookaheadBuffer), \
5162 (LookaheadBufferSize), \
5168 * NdisMTrIndicateReceiveComplete(
5169 * IN NDIS_HANDLE MiniportAdapterHandle);
5171 #define NdisMTrIndicateReceiveComplete(MiniportAdapterHandle) \
5173 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxCompleteHandler)( \
5174 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->TrDB); \
5181 IN NDIS_HANDLE LogHandle
,
5183 IN UINT LogBufferSize
);
5188 NdisMQueryAdapterResources(
5189 OUT PNDIS_STATUS Status
,
5190 IN NDIS_HANDLE WrapperConfigurationContext
,
5191 OUT PNDIS_RESOURCE_LIST ResourceList
,
5192 IN OUT PUINT BufferSize
);
5197 NdisTerminateWrapper(
5198 IN NDIS_HANDLE NdisWrapperHandle
,
5199 IN PVOID SystemSpecific
);
5205 IN NDIS_HANDLE MiniportAdapterHandle
,
5206 IN PVOID VirtualAddress
,
5211 /* Event functions */
5216 NdisInitializeEvent(
5217 IN PNDIS_EVENT Event
);
5223 IN PNDIS_EVENT Event
);
5229 IN PNDIS_EVENT Event
);
5235 IN PNDIS_EVENT Event
,
5240 /* NDIS intermediate miniport structures */
5242 typedef VOID (DDKAPI
*W_MINIPORT_CALLBACK
)(
5243 IN NDIS_HANDLE MiniportAdapterContext
,
5244 IN PVOID CallbackContext
);
5248 /* Routines for intermediate miniport drivers */
5253 NdisIMDeInitializeDeviceInstance(
5254 IN NDIS_HANDLE NdisMiniportHandle
);
5258 * NdisIMInitializeDeviceInstance(
5259 * IN NDIS_HANDLE DriverHandle,
5260 * IN PNDIS_STRING DeviceInstance);
5262 #define NdisIMInitializeDeviceInstance(DriverHandle, DeviceInstance) \
5263 NdisIMInitializeDeviceInstanceEx(DriverHandle, DeviceInstance, NULL)
5268 NdisIMRegisterLayeredMiniport(
5269 IN NDIS_HANDLE NdisWrapperHandle
,
5270 IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics
,
5271 IN UINT CharacteristicsLength
,
5272 OUT PNDIS_HANDLE DriverHandle
);
5275 /* Functions obsoleted by NDIS 5.0 */
5281 IN PNDIS_HANDLE NdisDmaHandle
);
5286 NdisSetupDmaTransfer(
5287 OUT PNDIS_STATUS Status
,
5288 IN PNDIS_HANDLE NdisDmaHandle
,
5289 IN PNDIS_BUFFER Buffer
,
5292 IN BOOLEAN WriteToDevice
);
5297 NdisUpcaseUnicodeString(
5298 OUT PUNICODE_STRING DestinationString
,
5299 IN PUNICODE_STRING SourceString
);
5302 /* Routines for NDIS protocol drivers */
5308 OUT PNDIS_STATUS Status
,
5309 IN NDIS_HANDLE NdisBindingHandle
,
5310 IN PNDIS_REQUEST NdisRequest
);
5316 OUT PNDIS_STATUS Status
,
5317 IN NDIS_HANDLE NdisBindingHandle
);
5323 OUT PNDIS_STATUS Status
,
5324 IN NDIS_HANDLE NdisBindingHandle
,
5325 IN PNDIS_PACKET Packet
);
5331 IN NDIS_HANDLE NdisBindingHandle
,
5332 IN PPNDIS_PACKET PacketArray
,
5333 IN UINT NumberOfPackets
);
5339 OUT PNDIS_STATUS Status
,
5340 IN NDIS_HANDLE NdisBindingHandle
,
5341 IN NDIS_HANDLE MacReceiveContext
,
5343 IN UINT BytesToTransfer
,
5344 IN OUT PNDIS_PACKET Packet
,
5345 OUT PUINT BytesTransferred
);
5351 OUT PNDIS_STATUS Status
,
5352 IN NDIS_HANDLE NdisBindingHandle
);
5357 NdisCompleteBindAdapter(
5358 IN NDIS_HANDLE BindAdapterContext
,
5359 IN NDIS_STATUS Status
,
5360 IN NDIS_STATUS OpenStatus
);
5365 NdisCompleteUnbindAdapter(
5366 IN NDIS_HANDLE UnbindAdapterContext
,
5367 IN NDIS_STATUS Status
);
5372 NdisDeregisterProtocol(
5373 OUT PNDIS_STATUS Status
,
5374 IN NDIS_HANDLE NdisProtocolHandle
);
5380 OUT PNDIS_STATUS Status
,
5381 OUT PNDIS_STATUS OpenErrorStatus
,
5382 OUT PNDIS_HANDLE NdisBindingHandle
,
5383 OUT PUINT SelectedMediumIndex
,
5384 IN PNDIS_MEDIUM MediumArray
,
5385 IN UINT MediumArraySize
,
5386 IN NDIS_HANDLE NdisProtocolHandle
,
5387 IN NDIS_HANDLE ProtocolBindingContext
,
5388 IN PNDIS_STRING AdapterName
,
5389 IN UINT OpenOptions
,
5390 IN PSTRING AddressingInformation
);
5395 NdisOpenProtocolConfiguration(
5396 OUT PNDIS_STATUS Status
,
5397 OUT PNDIS_HANDLE ConfigurationHandle
,
5398 IN PNDIS_STRING ProtocolSection
);
5403 NdisRegisterProtocol(
5404 OUT PNDIS_STATUS Status
,
5405 OUT PNDIS_HANDLE NdisProtocolHandle
,
5406 IN PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics
,
5407 IN UINT CharacteristicsLength
);
5412 NdisScheduleWorkItem(
5413 IN PNDIS_WORK_ITEM WorkItem
);
5415 /* Obsoleted in Windows XP */
5417 /* Prototypes for NDIS_MAC_CHARACTERISTICS */
5419 typedef NDIS_STATUS (*OPEN_ADAPTER_HANDLER
)(
5420 OUT PNDIS_STATUS OpenErrorStatus
,
5421 OUT NDIS_HANDLE
*MacBindingHandle
,
5422 OUT PUINT SelectedMediumIndex
,
5423 IN PNDIS_MEDIUM MediumArray
,
5424 IN UINT MediumArraySize
,
5425 IN NDIS_HANDLE NdisBindingContext
,
5426 IN NDIS_HANDLE MacAdapterContext
,
5427 IN UINT OpenOptions
,
5428 IN PSTRING AddressingInformation OPTIONAL
);
5430 typedef NDIS_STATUS (DDKAPI
*CLOSE_ADAPTER_HANDLER
)(
5431 IN NDIS_HANDLE MacBindingHandle
);
5433 typedef NDIS_STATUS (DDKAPI
*WAN_TRANSFER_DATA_HANDLER
)(
5436 typedef NDIS_STATUS (DDKAPI
*QUERY_GLOBAL_STATISTICS_HANDLER
)(
5437 IN NDIS_HANDLE MacAdapterContext
,
5438 IN PNDIS_REQUEST NdisRequest
);
5440 typedef VOID (DDKAPI
*UNLOAD_MAC_HANDLER
)(
5441 IN NDIS_HANDLE MacMacContext
);
5443 typedef NDIS_STATUS (DDKAPI
*ADD_ADAPTER_HANDLER
)(
5444 IN NDIS_HANDLE MacMacContext
,
5445 IN NDIS_HANDLE WrapperConfigurationContext
,
5446 IN PNDIS_STRING AdapterName
);
5448 typedef VOID (*REMOVE_ADAPTER_HANDLER
)(
5449 IN NDIS_HANDLE MacAdapterContext
);
5451 typedef struct _NDIS_MAC_CHARACTERISTICS
{
5452 UCHAR MajorNdisVersion
;
5453 UCHAR MinorNdisVersion
;
5456 OPEN_ADAPTER_HANDLER OpenAdapterHandler
;
5457 CLOSE_ADAPTER_HANDLER CloseAdapterHandler
;
5458 SEND_HANDLER SendHandler
;
5459 TRANSFER_DATA_HANDLER TransferDataHandler
;
5460 RESET_HANDLER ResetHandler
;
5461 REQUEST_HANDLER RequestHandler
;
5462 QUERY_GLOBAL_STATISTICS_HANDLER QueryGlobalStatisticsHandler
;
5463 UNLOAD_MAC_HANDLER UnloadMacHandler
;
5464 ADD_ADAPTER_HANDLER AddAdapterHandler
;
5465 REMOVE_ADAPTER_HANDLER RemoveAdapterHandler
;
5467 } NDIS_MAC_CHARACTERISTICS
, *PNDIS_MAC_CHARACTERISTICS
;
5469 typedef NDIS_MAC_CHARACTERISTICS NDIS_WAN_MAC_CHARACTERISTICS
;
5470 typedef NDIS_WAN_MAC_CHARACTERISTICS
*PNDIS_WAN_MAC_CHARACTERISTICS
;
5476 #endif /* __NDIS_H */