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
;
847 * NDIS_GET_ORIGINAL_PACKET(
848 * IN PNDIS_PACKET Packet);
850 #define NDIS_GET_ORIGINAL_PACKET(Packet) \
851 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo)
855 * NDIS_GET_PACKET_CANCEL_ID(
856 * IN PNDIS_PACKET Packet);
858 #define NDIS_GET_PACKET_CANCEL_ID(Packet) \
859 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId)
862 * PNDIS_PACKET_EXTENSION
863 * NDIS_PACKET_EXTENSION_FROM_PACKET(
864 * IN PNDIS_PACKET Packet);
866 #define NDIS_PACKET_EXTENSION_FROM_PACKET(Packet) \
867 ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) \
868 + (Packet)->Private.NdisPacketOobOffset + sizeof(NDIS_PACKET_OOB_DATA)))
872 * NDIS_PER_PACKET_INFO_FROM_PACKET(
873 * IN OUT PNDIS_PACKET Packet,
874 * IN NDIS_PER_PACKET_INFO InfoType);
876 #define NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, InfoType) \
877 ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) + (Packet)->Private.NdisPacketOobOffset \
878 + sizeof(NDIS_PACKET_OOB_DATA)))->NdisPacketInfo[(InfoType)]
882 * NDIS_SET_ORIGINAL_PACKET(
883 * IN OUT PNDIS_PACKET Packet,
884 * IN PNDIS_PACKET OriginalPacket);
886 #define NDIS_SET_ORIGINAL_PACKET(Packet, OriginalPacket) \
887 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo) = (OriginalPacket)
891 * NDIS_SET_PACKET_CANCEL_ID(
892 * IN PNDIS_PACKET Packet
893 * IN ULONG_PTR CancelId);
895 #define NDIS_SET_PACKET_CANCEL_ID(Packet, CancelId) \
896 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId) = (CancelId)
898 typedef enum _NDIS_TASK
{
899 TcpIpChecksumNdisTask
,
901 TcpLargeSendNdisTask
,
903 } NDIS_TASK
, *PNDIS_TASK
;
905 typedef struct _NDIS_TASK_IPSEC
{
907 ULONG AH_ESP_COMBINED
;
908 ULONG TRANSPORT_TUNNEL_COMBINED
;
925 ULONG TRIPLE_DES
: 1;
932 } NDIS_TASK_IPSEC
, *PNDIS_TASK_IPSEC
;
934 typedef struct _NDIS_TASK_OFFLOAD
{
938 ULONG OffsetNextTask
;
939 ULONG TaskBufferLength
;
941 } NDIS_TASK_OFFLOAD
, *PNDIS_TASK_OFFLOAD
;
943 /* NDIS_TASK_OFFLOAD_HEADER.Version constants */
944 #define NDIS_TASK_OFFLOAD_VERSION 1
946 typedef enum _NDIS_ENCAPSULATION
{
947 UNSPECIFIED_Encapsulation
,
949 IEEE_802_3_Encapsulation
,
950 IEEE_802_5_Encapsulation
,
951 LLC_SNAP_ROUTED_Encapsulation
,
952 LLC_SNAP_BRIDGED_Encapsulation
953 } NDIS_ENCAPSULATION
;
955 typedef struct _NDIS_ENCAPSULATION_FORMAT
{
956 NDIS_ENCAPSULATION Encapsulation
;
958 ULONG FixedHeaderSize
: 1;
961 ULONG EncapsulationHeaderSize
;
962 } NDIS_ENCAPSULATION_FORMAT
, *PNDIS_ENCAPSULATION_FORMAT
;
964 typedef struct _NDIS_TASK_TCP_IP_CHECKSUM
{
966 ULONG IpOptionsSupported
:1;
967 ULONG TcpOptionsSupported
:1;
974 ULONG IpOptionsSupported
: 1;
975 ULONG TcpOptionsSupported
: 1;
976 ULONG TcpChecksum
: 1;
977 ULONG UdpChecksum
: 1;
978 ULONG IpChecksum
: 1;
982 ULONG IpOptionsSupported
: 1;
983 ULONG TcpOptionsSupported
: 1;
984 ULONG TcpChecksum
: 1;
985 ULONG UdpChecksum
: 1;
989 ULONG IpOptionsSupported
: 1;
990 ULONG TcpOptionsSupported
: 1;
991 ULONG TcpChecksum
: 1;
992 ULONG UdpChecksum
: 1;
994 } NDIS_TASK_TCP_IP_CHECKSUM
, *PNDIS_TASK_TCP_IP_CHECKSUM
;
996 typedef struct _NDIS_TASK_TCP_LARGE_SEND
{
998 ULONG MaxOffLoadSize
;
999 ULONG MinSegmentCount
;
1002 } NDIS_TASK_TCP_LARGE_SEND
, *PNDIS_TASK_TCP_LARGE_SEND
;
1004 typedef struct _NDIS_TCP_IP_CHECKSUM_PACKET_INFO
{
1005 _ANONYMOUS_UNION
union {
1007 ULONG NdisPacketChecksumV4
: 1;
1008 ULONG NdisPacketChecksumV6
: 1;
1009 ULONG NdisPacketTcpChecksum
: 1;
1010 ULONG NdisPacketUdpChecksum
: 1;
1011 ULONG NdisPacketIpChecksum
: 1;
1015 ULONG NdisPacketTcpChecksumFailed
: 1;
1016 ULONG NdisPacketUdpChecksumFailed
: 1;
1017 ULONG NdisPacketIpChecksumFailed
: 1;
1018 ULONG NdisPacketTcpChecksumSucceeded
: 1;
1019 ULONG NdisPacketUdpChecksumSucceeded
: 1;
1020 ULONG NdisPacketIpChecksumSucceeded
: 1;
1021 ULONG NdisPacketLoopback
: 1;
1025 } NDIS_TCP_IP_CHECKSUM_PACKET_INFO
, *PNDIS_TCP_IP_CHECKSUM_PACKET_INFO
;
1027 typedef struct _NDIS_WAN_CO_FRAGMENT
{
1029 } NDIS_WAN_CO_FRAGMENT
, *PNDIS_WAN_CO_FRAGMENT
;
1031 typedef struct _NDIS_WAN_FRAGMENT
{
1032 UCHAR RemoteAddress
[6];
1033 UCHAR LocalAddress
[6];
1034 } NDIS_WAN_FRAGMENT
, *PNDIS_WAN_FRAGMENT
;
1036 typedef struct _WAN_CO_LINKPARAMS
{
1037 ULONG TransmitSpeed
;
1040 } WAN_CO_LINKPARAMS
, *PWAN_CO_LINKPARAMS
;
1046 (*CM_ACTIVATE_VC_COMPLETE_HANDLER
)(
1047 IN NDIS_STATUS Status
,
1048 IN NDIS_HANDLE CallMgrVcContext
,
1049 IN PCO_CALL_PARAMETERS CallParameters
);
1051 typedef NDIS_STATUS DDKAPI
1052 (*CM_ADD_PARTY_HANDLER
)(
1053 IN NDIS_HANDLE CallMgrVcContext
,
1054 IN OUT PCO_CALL_PARAMETERS CallParameters
,
1055 IN NDIS_HANDLE NdisPartyHandle
,
1056 OUT PNDIS_HANDLE CallMgrPartyContext
);
1058 typedef NDIS_STATUS DDKAPI
1059 (*CM_CLOSE_AF_HANDLER
)(
1060 IN NDIS_HANDLE CallMgrAfContext
);
1062 typedef NDIS_STATUS DDKAPI
1063 (*CM_CLOSE_CALL_HANDLER
)(
1064 IN NDIS_HANDLE CallMgrVcContext
,
1065 IN NDIS_HANDLE CallMgrPartyContext OPTIONAL
,
1066 IN PVOID CloseData OPTIONAL
,
1067 IN UINT Size OPTIONAL
);
1069 typedef NDIS_STATUS DDKAPI
1070 (*CM_DEREG_SAP_HANDLER
)(
1071 IN NDIS_HANDLE CallMgrSapContext
);
1074 (*CM_DEACTIVATE_VC_COMPLETE_HANDLER
)(
1075 IN NDIS_STATUS Status
,
1076 IN NDIS_HANDLE CallMgrVcContext
);
1078 typedef NDIS_STATUS DDKAPI
1079 (*CM_DROP_PARTY_HANDLER
)(
1080 IN NDIS_HANDLE CallMgrPartyContext
,
1081 IN PVOID CloseData OPTIONAL
,
1082 IN UINT Size OPTIONAL
);
1085 (*CM_INCOMING_CALL_COMPLETE_HANDLER
)(
1086 IN NDIS_STATUS Status
,
1087 IN NDIS_HANDLE CallMgrVcContext
,
1088 IN PCO_CALL_PARAMETERS CallParameters
);
1090 typedef NDIS_STATUS DDKAPI
1091 (*CM_MAKE_CALL_HANDLER
)(
1092 IN NDIS_HANDLE CallMgrVcContext
,
1093 IN OUT PCO_CALL_PARAMETERS CallParameters
,
1094 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
1095 OUT PNDIS_HANDLE CallMgrPartyContext OPTIONAL
);
1097 typedef NDIS_STATUS DDKAPI
1098 (*CM_MODIFY_CALL_QOS_HANDLER
)(
1099 IN NDIS_HANDLE CallMgrVcContext
,
1100 IN PCO_CALL_PARAMETERS CallParameters
);
1102 typedef NDIS_STATUS DDKAPI
1103 (*CM_OPEN_AF_HANDLER
)(
1104 IN NDIS_HANDLE CallMgrBindingContext
,
1105 IN PCO_ADDRESS_FAMILY AddressFamily
,
1106 IN NDIS_HANDLE NdisAfHandle
,
1107 OUT PNDIS_HANDLE CallMgrAfContext
);
1109 typedef NDIS_STATUS DDKAPI
1110 (*CM_REG_SAP_HANDLER
)(
1111 IN NDIS_HANDLE CallMgrAfContext
,
1113 IN NDIS_HANDLE NdisSapHandle
,
1114 OUT PNDIS_HANDLE CallMgrSapContext
);
1116 typedef NDIS_STATUS DDKAPI
1117 (*CO_CREATE_VC_HANDLER
)(
1118 IN NDIS_HANDLE ProtocolAfContext
,
1119 IN NDIS_HANDLE NdisVcHandle
,
1120 OUT PNDIS_HANDLE ProtocolVcContext
);
1122 typedef NDIS_STATUS DDKAPI
1123 (*CO_DELETE_VC_HANDLER
)(
1124 IN NDIS_HANDLE ProtocolVcContext
);
1127 (*CO_REQUEST_COMPLETE_HANDLER
)(
1128 IN NDIS_STATUS Status
,
1129 IN NDIS_HANDLE ProtocolAfContext OPTIONAL
,
1130 IN NDIS_HANDLE ProtocolVcContext OPTIONAL
,
1131 IN NDIS_HANDLE ProtocolPartyContext OPTIONAL
,
1132 IN PNDIS_REQUEST NdisRequest
);
1134 typedef NDIS_STATUS DDKAPI
1135 (*CO_REQUEST_HANDLER
)(
1136 IN NDIS_HANDLE ProtocolAfContext
,
1137 IN NDIS_HANDLE ProtocolVcContext OPTIONAL
,
1138 IN NDIS_HANDLE ProtocolPartyContext OPTIONAL
,
1139 IN OUT PNDIS_REQUEST NdisRequest
);
1141 typedef struct _NDIS_CALL_MANAGER_CHARACTERISTICS
{
1146 CO_CREATE_VC_HANDLER CmCreateVcHandler
;
1147 CO_DELETE_VC_HANDLER CmDeleteVcHandler
;
1148 CM_OPEN_AF_HANDLER CmOpenAfHandler
;
1149 CM_CLOSE_AF_HANDLER CmCloseAfHandler
;
1150 CM_REG_SAP_HANDLER CmRegisterSapHandler
;
1151 CM_DEREG_SAP_HANDLER CmDeregisterSapHandler
;
1152 CM_MAKE_CALL_HANDLER CmMakeCallHandler
;
1153 CM_CLOSE_CALL_HANDLER CmCloseCallHandler
;
1154 CM_INCOMING_CALL_COMPLETE_HANDLER CmIncomingCallCompleteHandler
;
1155 CM_ADD_PARTY_HANDLER CmAddPartyHandler
;
1156 CM_DROP_PARTY_HANDLER CmDropPartyHandler
;
1157 CM_ACTIVATE_VC_COMPLETE_HANDLER CmActivateVcCompleteHandler
;
1158 CM_DEACTIVATE_VC_COMPLETE_HANDLER CmDeactivateVcCompleteHandler
;
1159 CM_MODIFY_CALL_QOS_HANDLER CmModifyCallQoSHandler
;
1160 CO_REQUEST_HANDLER CmRequestHandler
;
1161 CO_REQUEST_COMPLETE_HANDLER CmRequestCompleteHandler
;
1162 } NDIS_CALL_MANAGER_CHARACTERISTICS
, *PNDIS_CALL_MANAGER_CHARACTERISTICS
;
1166 /* Call Manager clients */
1168 typedef VOID (*CL_OPEN_AF_COMPLETE_HANDLER
)(
1169 IN NDIS_STATUS Status
,
1170 IN NDIS_HANDLE ProtocolAfContext
,
1171 IN NDIS_HANDLE NdisAfHandle
);
1174 (*CL_CLOSE_AF_COMPLETE_HANDLER
)(
1175 IN NDIS_STATUS Status
,
1176 IN NDIS_HANDLE ProtocolAfContext
);
1179 (*CL_REG_SAP_COMPLETE_HANDLER
)(
1180 IN NDIS_STATUS Status
,
1181 IN NDIS_HANDLE ProtocolSapContext
,
1183 IN NDIS_HANDLE NdisSapHandle
);
1186 (*CL_DEREG_SAP_COMPLETE_HANDLER
)(
1187 IN NDIS_STATUS Status
,
1188 IN NDIS_HANDLE ProtocolSapContext
);
1191 (*CL_MAKE_CALL_COMPLETE_HANDLER
)(
1192 IN NDIS_STATUS Status
,
1193 IN NDIS_HANDLE ProtocolVcContext
,
1194 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
1195 IN PCO_CALL_PARAMETERS CallParameters
);
1198 (*CL_MODIFY_CALL_QOS_COMPLETE_HANDLER
)(
1199 IN NDIS_STATUS Status
,
1200 IN NDIS_HANDLE ProtocolVcContext
,
1201 IN PCO_CALL_PARAMETERS CallParameters
);
1204 (*CL_CLOSE_CALL_COMPLETE_HANDLER
)(
1205 IN NDIS_STATUS Status
,
1206 IN NDIS_HANDLE ProtocolVcContext
,
1207 IN NDIS_HANDLE ProtocolPartyContext OPTIONAL
);
1210 (*CL_ADD_PARTY_COMPLETE_HANDLER
)(
1211 IN NDIS_STATUS Status
,
1212 IN NDIS_HANDLE ProtocolPartyContext
,
1213 IN NDIS_HANDLE NdisPartyHandle
,
1214 IN PCO_CALL_PARAMETERS CallParameters
);
1217 (*CL_DROP_PARTY_COMPLETE_HANDLER
)(
1218 IN NDIS_STATUS Status
,
1219 IN NDIS_HANDLE ProtocolPartyContext
);
1221 typedef NDIS_STATUS DDKAPI
1222 (*CL_INCOMING_CALL_HANDLER
)(
1223 IN NDIS_HANDLE ProtocolSapContext
,
1224 IN NDIS_HANDLE ProtocolVcContext
,
1225 IN OUT PCO_CALL_PARAMETERS CallParameters
);
1228 (*CL_INCOMING_CALL_QOS_CHANGE_HANDLER
)(
1229 IN NDIS_HANDLE ProtocolVcContext
,
1230 IN PCO_CALL_PARAMETERS CallParameters
);
1233 (*CL_INCOMING_CLOSE_CALL_HANDLER
)(
1234 IN NDIS_STATUS CloseStatus
,
1235 IN NDIS_HANDLE ProtocolVcContext
,
1236 IN PVOID CloseData OPTIONAL
,
1237 IN UINT Size OPTIONAL
);
1240 (*CL_INCOMING_DROP_PARTY_HANDLER
)(
1241 IN NDIS_STATUS DropStatus
,
1242 IN NDIS_HANDLE ProtocolPartyContext
,
1243 IN PVOID CloseData OPTIONAL
,
1244 IN UINT Size OPTIONAL
);
1247 (*CL_CALL_CONNECTED_HANDLER
)(
1248 IN NDIS_HANDLE ProtocolVcContext
);
1251 typedef struct _NDIS_CLIENT_CHARACTERISTICS
{
1256 CO_CREATE_VC_HANDLER ClCreateVcHandler
;
1257 CO_DELETE_VC_HANDLER ClDeleteVcHandler
;
1258 CO_REQUEST_HANDLER ClRequestHandler
;
1259 CO_REQUEST_COMPLETE_HANDLER ClRequestCompleteHandler
;
1260 CL_OPEN_AF_COMPLETE_HANDLER ClOpenAfCompleteHandler
;
1261 CL_CLOSE_AF_COMPLETE_HANDLER ClCloseAfCompleteHandler
;
1262 CL_REG_SAP_COMPLETE_HANDLER ClRegisterSapCompleteHandler
;
1263 CL_DEREG_SAP_COMPLETE_HANDLER ClDeregisterSapCompleteHandler
;
1264 CL_MAKE_CALL_COMPLETE_HANDLER ClMakeCallCompleteHandler
;
1265 CL_MODIFY_CALL_QOS_COMPLETE_HANDLER ClModifyCallQoSCompleteHandler
;
1266 CL_CLOSE_CALL_COMPLETE_HANDLER ClCloseCallCompleteHandler
;
1267 CL_ADD_PARTY_COMPLETE_HANDLER ClAddPartyCompleteHandler
;
1268 CL_DROP_PARTY_COMPLETE_HANDLER ClDropPartyCompleteHandler
;
1269 CL_INCOMING_CALL_HANDLER ClIncomingCallHandler
;
1270 CL_INCOMING_CALL_QOS_CHANGE_HANDLER ClIncomingCallQoSChangeHandler
;
1271 CL_INCOMING_CLOSE_CALL_HANDLER ClIncomingCloseCallHandler
;
1272 CL_INCOMING_DROP_PARTY_HANDLER ClIncomingDropPartyHandler
;
1273 CL_CALL_CONNECTED_HANDLER ClCallConnectedHandler
;
1274 } NDIS_CLIENT_CHARACTERISTICS
, *PNDIS_CLIENT_CHARACTERISTICS
;
1277 /* NDIS protocol structures */
1279 /* Prototypes for NDIS 3.0 protocol characteristics */
1282 (*OPEN_ADAPTER_COMPLETE_HANDLER
)(
1283 IN NDIS_HANDLE ProtocolBindingContext
,
1284 IN NDIS_STATUS Status
,
1285 IN NDIS_STATUS OpenErrorStatus
);
1288 (*CLOSE_ADAPTER_COMPLETE_HANDLER
)(
1289 IN NDIS_HANDLE ProtocolBindingContext
,
1290 IN NDIS_STATUS Status
);
1293 (*RESET_COMPLETE_HANDLER
)(
1294 IN NDIS_HANDLE ProtocolBindingContext
,
1295 IN NDIS_STATUS Status
);
1298 (*REQUEST_COMPLETE_HANDLER
)(
1299 IN NDIS_HANDLE ProtocolBindingContext
,
1300 IN PNDIS_REQUEST NdisRequest
,
1301 IN NDIS_STATUS Status
);
1305 IN NDIS_HANDLE ProtocolBindingContext
,
1306 IN NDIS_STATUS GeneralStatus
,
1307 IN PVOID StatusBuffer
,
1308 IN UINT StatusBufferSize
);
1311 (*STATUS_COMPLETE_HANDLER
)(
1312 IN NDIS_HANDLE ProtocolBindingContext
);
1315 (*SEND_COMPLETE_HANDLER
)(
1316 IN NDIS_HANDLE ProtocolBindingContext
,
1317 IN PNDIS_PACKET Packet
,
1318 IN NDIS_STATUS Status
);
1321 (*WAN_SEND_COMPLETE_HANDLER
)(
1322 IN NDIS_HANDLE ProtocolBindingContext
,
1323 IN PNDIS_WAN_PACKET Packet
,
1324 IN NDIS_STATUS Status
);
1327 (*TRANSFER_DATA_COMPLETE_HANDLER
)(
1328 IN NDIS_HANDLE ProtocolBindingContext
,
1329 IN PNDIS_PACKET Packet
,
1330 IN NDIS_STATUS Status
,
1331 IN UINT BytesTransferred
);
1334 (*WAN_TRANSFER_DATA_COMPLETE_HANDLER
)(
1338 typedef NDIS_STATUS DDKAPI
1340 IN NDIS_HANDLE ProtocolBindingContext
,
1341 IN NDIS_HANDLE MacReceiveContext
,
1342 IN PVOID HeaderBuffer
,
1343 IN UINT HeaderBufferSize
,
1344 IN PVOID LookAheadBuffer
,
1345 IN UINT LookaheadBufferSize
,
1346 IN UINT PacketSize
);
1348 typedef NDIS_STATUS DDKAPI
1349 (*WAN_RECEIVE_HANDLER
)(
1350 IN NDIS_HANDLE NdisLinkHandle
,
1352 IN ULONG PacketSize
);
1355 (*RECEIVE_COMPLETE_HANDLER
)(
1356 IN NDIS_HANDLE ProtocolBindingContext
);
1359 /* Protocol characteristics for NDIS 3.0 protocols */
1361 #define NDIS30_PROTOCOL_CHARACTERISTICS_S \
1362 UCHAR MajorNdisVersion; \
1363 UCHAR MinorNdisVersion; \
1365 _ANONYMOUS_UNION union { \
1369 OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler; \
1370 CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler; \
1371 _ANONYMOUS_UNION union { \
1372 SEND_COMPLETE_HANDLER SendCompleteHandler; \
1373 WAN_SEND_COMPLETE_HANDLER WanSendCompleteHandler; \
1374 } DUMMYUNIONNAME2; \
1375 _ANONYMOUS_UNION union { \
1376 TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler; \
1377 WAN_TRANSFER_DATA_COMPLETE_HANDLER WanTransferDataCompleteHandler; \
1378 } DUMMYUNIONNAME3; \
1379 RESET_COMPLETE_HANDLER ResetCompleteHandler; \
1380 REQUEST_COMPLETE_HANDLER RequestCompleteHandler; \
1381 _ANONYMOUS_UNION union { \
1382 RECEIVE_HANDLER ReceiveHandler; \
1383 WAN_RECEIVE_HANDLER WanReceiveHandler; \
1384 } DUMMYUNIONNAME4; \
1385 RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler; \
1386 STATUS_HANDLER StatusHandler; \
1387 STATUS_COMPLETE_HANDLER StatusCompleteHandler; \
1390 typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS
{
1391 NDIS30_PROTOCOL_CHARACTERISTICS_S
1392 } NDIS30_PROTOCOL_CHARACTERISTICS
, *PNDIS30_PROTOCOL_CHARACTERISTICS
;
1395 /* Prototypes for NDIS 4.0 protocol characteristics */
1398 (*RECEIVE_PACKET_HANDLER
)(
1399 IN NDIS_HANDLE ProtocolBindingContext
,
1400 IN PNDIS_PACKET Packet
);
1404 OUT PNDIS_STATUS Status
,
1405 IN NDIS_HANDLE BindContext
,
1406 IN PNDIS_STRING DeviceName
,
1407 IN PVOID SystemSpecific1
,
1408 IN PVOID SystemSpecific2
);
1412 OUT PNDIS_STATUS Status
,
1413 IN NDIS_HANDLE ProtocolBindingContext
,
1414 IN NDIS_HANDLE UnbindContext
);
1416 typedef NDIS_STATUS DDKAPI
1417 (*PNP_EVENT_HANDLER
)(
1418 IN NDIS_HANDLE ProtocolBindingContext
,
1419 IN PNET_PNP_EVENT NetPnPEvent
);
1422 (*UNLOAD_PROTOCOL_HANDLER
)(
1426 /* Protocol characteristics for NDIS 4.0 protocols */
1430 #define NDIS40_PROTOCOL_CHARACTERISTICS_S \
1431 NDIS30_PROTOCOL_CHARACTERISTICS Ndis30Chars; \
1432 RECEIVE_PACKET_HANDLER ReceivePacketHandler; \
1433 BIND_HANDLER BindAdapterHandler; \
1434 UNBIND_HANDLER UnbindAdapterHandler; \
1435 PNP_EVENT_HANDLER PnPEventHandler; \
1436 UNLOAD_PROTOCOL_HANDLER UnloadHandler;
1438 #else /* !__cplusplus */
1440 #define NDIS40_PROTOCOL_CHARACTERISTICS_S \
1441 NDIS30_PROTOCOL_CHARACTERISTICS_S \
1442 RECEIVE_PACKET_HANDLER ReceivePacketHandler; \
1443 BIND_HANDLER BindAdapterHandler; \
1444 UNBIND_HANDLER UnbindAdapterHandler; \
1445 PNP_EVENT_HANDLER PnPEventHandler; \
1446 UNLOAD_PROTOCOL_HANDLER UnloadHandler;
1448 #endif /* __cplusplus */
1450 typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS
{
1451 NDIS40_PROTOCOL_CHARACTERISTICS_S
1452 } NDIS40_PROTOCOL_CHARACTERISTICS
, *PNDIS40_PROTOCOL_CHARACTERISTICS
;
1454 /* Prototypes for NDIS 5.0 protocol characteristics */
1457 (*CO_SEND_COMPLETE_HANDLER
)(
1458 IN NDIS_STATUS Status
,
1459 IN NDIS_HANDLE ProtocolVcContext
,
1460 IN PNDIS_PACKET Packet
);
1463 (*CO_STATUS_HANDLER
)(
1464 IN NDIS_HANDLE ProtocolBindingContext
,
1465 IN NDIS_HANDLE ProtocolVcContext OPTIONAL
,
1466 IN NDIS_STATUS GeneralStatus
,
1467 IN PVOID StatusBuffer
,
1468 IN UINT StatusBufferSize
);
1471 (*CO_RECEIVE_PACKET_HANDLER
)(
1472 IN NDIS_HANDLE ProtocolBindingContext
,
1473 IN NDIS_HANDLE ProtocolVcContext
,
1474 IN PNDIS_PACKET Packet
);
1477 (*CO_AF_REGISTER_NOTIFY_HANDLER
)(
1478 IN NDIS_HANDLE ProtocolBindingContext
,
1479 IN PCO_ADDRESS_FAMILY AddressFamily
);
1481 #ifdef __cplusplus \
1483 #define NDIS50_PROTOCOL_CHARACTERISTICS_S \
1484 NDIS40_PROTOCOL_CHARACTERISTICS Ndis40Chars; \
1485 PVOID ReservedHandlers[4]; \
1486 CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler; \
1487 CO_STATUS_HANDLER CoStatusHandler; \
1488 CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler; \
1489 CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
1491 #else /* !__cplusplus */
1493 #define NDIS50_PROTOCOL_CHARACTERISTICS_S \
1494 NDIS40_PROTOCOL_CHARACTERISTICS_S \
1495 PVOID ReservedHandlers[4]; \
1496 CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler; \
1497 CO_STATUS_HANDLER CoStatusHandler; \
1498 CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler; \
1499 CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
1501 #endif /* !__cplusplus */
1503 typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS
{
1504 NDIS50_PROTOCOL_CHARACTERISTICS_S
1505 } NDIS50_PROTOCOL_CHARACTERISTICS
, *PNDIS50_PROTOCOL_CHARACTERISTICS
;
1507 #if defined(NDIS50) || defined(NDIS51)
1508 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS
{
1509 NDIS50_PROTOCOL_CHARACTERISTICS_S
;
1510 } NDIS_PROTOCOL_CHARACTERISTICS
, *PNDIS_PROTOCOL_CHARACTERISTICS
;
1511 #elif defined(NDIS40)
1512 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS
{
1513 NDIS40_PROTOCOL_CHARACTERISTICS_S
;
1514 } NDIS_PROTOCOL_CHARACTERISTICS
, *PNDIS_PROTOCOL_CHARACTERISTICS
;
1516 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS
{
1517 NDIS30_PROTOCOL_CHARACTERISTICS_S
1518 } NDIS_PROTOCOL_CHARACTERISTICS
, *PNDIS_PROTOCOL_CHARACTERISTICS
;
1523 /* Buffer management routines */
1529 OUT PNDIS_STATUS Status
,
1530 OUT PNDIS_BUFFER
*Buffer
,
1531 IN NDIS_HANDLE PoolHandle
,
1532 IN PVOID VirtualAddress
,
1539 NdisAllocateBufferPool(
1540 OUT PNDIS_STATUS Status
,
1541 OUT PNDIS_HANDLE PoolHandle
,
1542 IN UINT NumberOfDescriptors
);
1548 OUT PNDIS_STATUS Status
,
1549 OUT PNDIS_PACKET
*Packet
,
1550 IN NDIS_HANDLE PoolHandle
);
1555 NdisAllocatePacketPool(
1556 OUT PNDIS_STATUS Status
,
1557 OUT PNDIS_HANDLE PoolHandle
,
1558 IN UINT NumberOfDescriptors
,
1559 IN UINT ProtocolReservedLength
);
1565 OUT PNDIS_STATUS Status
,
1566 OUT PNDIS_BUFFER
*Buffer
,
1567 IN NDIS_HANDLE PoolHandle
,
1568 IN PVOID MemoryDescriptor
,
1575 NdisCopyFromPacketToPacket(
1576 IN PNDIS_PACKET Destination
,
1577 IN UINT DestinationOffset
,
1578 IN UINT BytesToCopy
,
1579 IN PNDIS_PACKET Source
,
1580 IN UINT SourceOffset
,
1581 OUT PUINT BytesCopied
);
1585 * NdisCopyLookaheadData(
1586 * IN PVOID Destination,
1589 * IN ULONG ReceiveFlags);
1593 #define NdisCopyLookaheadData(Destination, Source, Length, MacOptions) \
1594 RtlCopyMemory(Destination, Source, Length)
1596 #define NdisCopyLookaheadData(Destination, Source, Length, MacOptions) \
1598 if ((MacOptions) & NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA) \
1600 RtlCopyMemory(_Destination, _Source, _Length); \
1604 PUCHAR _Src = (PUCHAR)(Source); \
1605 PUCHAR _Dest = (PUCHAR)(Destination); \
1606 PUCHAR _End = _Dest + (Length); \
1607 while (_Dest < _End) \
1608 *_Dest++ = *_Src++; \
1616 NdisDprAllocatePacket(
1617 OUT PNDIS_STATUS Status
,
1618 OUT PNDIS_PACKET
*Packet
,
1619 IN NDIS_HANDLE PoolHandle
);
1624 NdisDprAllocatePacketNonInterlocked(
1625 OUT PNDIS_STATUS Status
,
1626 OUT PNDIS_PACKET
*Packet
,
1627 IN NDIS_HANDLE PoolHandle
);
1633 IN PNDIS_PACKET Packet
);
1638 NdisDprFreePacketNonInterlocked(
1639 IN PNDIS_PACKET Packet
);
1645 IN NDIS_HANDLE PoolHandle
);
1651 IN PNDIS_PACKET Packet
);
1657 IN NDIS_HANDLE PoolHandle
);
1663 IN PNDIS_PACKET
*PacketsToReturn
,
1664 IN UINT NumberOfPackets
);
1669 NdisUnchainBufferAtBack(
1670 IN OUT PNDIS_PACKET Packet
,
1671 OUT PNDIS_BUFFER
*Buffer
);
1676 NdisUnchainBufferAtFront(
1677 IN OUT PNDIS_PACKET Packet
,
1678 OUT PNDIS_BUFFER
*Buffer
);
1683 NdisAdjustBufferLength(
1684 IN PNDIS_BUFFER Buffer
,
1691 IN PNDIS_BUFFER Buffer
);
1696 NdisBufferVirtualAddress(
1697 IN PNDIS_BUFFER Buffer
);
1702 NDIS_BUFFER_TO_SPAN_PAGES(
1703 IN PNDIS_BUFFER Buffer
);
1709 IN PNDIS_BUFFER Buffer
);
1711 #if BINARY_COMPATIBLE
1716 NdisGetBufferPhysicalArraySize(
1717 IN PNDIS_BUFFER Buffer
,
1718 OUT PUINT ArraySize
);
1723 NdisGetFirstBufferFromPacket(
1724 IN PNDIS_PACKET _Packet
,
1725 OUT PNDIS_BUFFER
*_FirstBuffer
,
1726 OUT PVOID
*_FirstBufferVA
,
1727 OUT PUINT _FirstBufferLength
,
1728 OUT PUINT _TotalBufferLength
);
1734 IN PNDIS_BUFFER Buffer
,
1735 OUT PVOID
*VirtualAddress OPTIONAL
,
1741 NdisQueryBufferOffset(
1742 IN PNDIS_BUFFER Buffer
,
1750 * NdisGetBufferPhysicalArraySize(
1751 * IN PNDIS_BUFFER Buffer,
1752 * OUT PUINT ArraySize);
1754 #define NdisGetBufferPhysicalArraySize(Buffer, \
1757 (*(ArraySize) = NDIS_BUFFER_TO_SPAN_PAGES(Buffer)) \
1762 * NdisGetFirstBufferFromPacket(
1763 * IN PNDIS_PACKET _Packet,
1764 * OUT PNDIS_BUFFER * _FirstBuffer,
1765 * OUT PVOID * _FirstBufferVA,
1766 * OUT PUINT _FirstBufferLength,
1767 * OUT PUINT _TotalBufferLength)
1769 #define NdisGetFirstBufferFromPacket(_Packet, \
1772 _FirstBufferLength, \
1773 _TotalBufferLength) \
1775 PNDIS_BUFFER _Buffer; \
1777 _Buffer = (_Packet)->Private.Head; \
1778 *(_FirstBuffer) = _Buffer; \
1779 if (_Buffer != NULL) \
1781 *(_FirstBufferVA) = MmGetSystemAddressForMdl(_Buffer); \
1782 *(_FirstBufferLength) = MmGetMdlByteCount(_Buffer); \
1783 _Buffer = _Buffer->Next; \
1784 *(_TotalBufferLength) = *(_FirstBufferLength); \
1785 while (_Buffer != NULL) { \
1786 *(_TotalBufferLength) += MmGetMdlByteCount(_Buffer); \
1787 _Buffer = _Buffer->Next; \
1792 *(_FirstBufferVA) = 0; \
1793 *(_FirstBufferLength) = 0; \
1794 *(_TotalBufferLength) = 0; \
1801 * IN PNDIS_BUFFER Buffer,
1802 * OUT PVOID *VirtualAddress OPTIONAL,
1805 #define NdisQueryBuffer(Buffer, \
1809 if (VirtualAddress) \
1810 *((PVOID*)VirtualAddress) = MmGetSystemAddressForMdl(Buffer); \
1812 *((PUINT)Length) = MmGetMdlByteCount(Buffer); \
1818 * NdisQueryBufferOffset(
1819 * IN PNDIS_BUFFER Buffer,
1821 * OUT PUINT Length);
1823 #define NdisQueryBufferOffset(Buffer, \
1827 *((PUINT)Offset) = MmGetMdlByteOffset(Buffer); \
1828 *((PUINT)Length) = MmGetMdlByteCount(Buffer); \
1831 #endif /* BINARY_COMPATIBLE */
1835 * NDIS_BUFFER_LINKAGE(
1836 * IN PNDIS_BUFFER Buffer);
1838 #define NDIS_BUFFER_LINKAGE(Buffer)(Buffer)->Next;
1843 * NdisChainBufferAtBack(
1844 * IN OUT PNDIS_PACKET Packet,
1845 * IN OUT PNDIS_BUFFER Buffer)
1847 #define NdisChainBufferAtBack(Packet, \
1850 PNDIS_BUFFER NdisBuffer = (Buffer); \
1852 while (NdisBuffer->Next != NULL) \
1853 NdisBuffer = NdisBuffer->Next; \
1855 NdisBuffer->Next = NULL; \
1857 if ((Packet)->Private.Head != NULL) \
1858 (Packet)->Private.Tail->Next = (Buffer); \
1860 (Packet)->Private.Head = (Buffer); \
1862 (Packet)->Private.Tail = NdisBuffer; \
1863 (Packet)->Private.ValidCounts = FALSE; \
1869 * NdisChainBufferAtFront(
1870 * IN OUT PNDIS_PACKET Packet,
1871 * IN OUT PNDIS_BUFFER Buffer)
1873 #define NdisChainBufferAtFront(Packet, \
1876 PNDIS_BUFFER _NdisBuffer = (Buffer); \
1878 while (_NdisBuffer->Next != NULL) \
1879 _NdisBuffer = _NdisBuffer->Next; \
1881 if ((Packet)->Private.Head == NULL) \
1882 (Packet)->Private.Tail = _NdisBuffer; \
1884 _NdisBuffer->Next = (Packet)->Private.Head; \
1885 (Packet)->Private.Head = (Buffer); \
1886 (Packet)->Private.ValidCounts = FALSE; \
1892 * NdisGetNextBuffer(
1893 * IN PNDIS_BUFFER CurrentBuffer,
1894 * OUT PNDIS_BUFFER * NextBuffer)
1896 #define NdisGetNextBuffer(CurrentBuffer, \
1899 *(NextBuffer) = (CurrentBuffer)->Next; \
1905 * NdisGetPacketFlags(
1906 * IN PNDIS_PACKET Packet);
1908 #define NdisGetPacketFlags(Packet)(Packet)->Private.Flags;
1913 * NdisClearPacketFlags(
1914 * IN PNDIS_PACKET Packet,
1917 #define NdisClearPacketFlags(Packet, Flags) \
1918 (Packet)->Private.Flags &= ~(Flags)
1923 * NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(
1924 * IN PNDIS_PACKET Packet,
1925 * IN PPVOID pMediaSpecificInfo,
1926 * IN PUINT pSizeMediaSpecificInfo);
1928 #define NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \
1929 _pMediaSpecificInfo, \
1930 _pSizeMediaSpecificInfo) \
1932 if (!((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) || \
1933 !((_Packet)->Private.NdisPacketFlags & fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO)) \
1935 *(_pMediaSpecificInfo) = NULL; \
1936 *(_pSizeMediaSpecificInfo) = 0; \
1940 *(_pMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1941 (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation; \
1942 *(_pSizeMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1943 (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo; \
1950 * NDIS_GET_PACKET_PROTOCOL_TYPE(
1951 * IN PNDIS_PACKET Packet);
1953 #define NDIS_GET_PACKET_PROTOCOL_TYPE(_Packet) \
1954 ((_Packet)->Private.Flags & NDIS_PROTOCOL_ID_MASK)
1958 * NDIS_GET_PACKET_HEADER_SIZE(
1959 * IN PNDIS_PACKET Packet);
1961 #define NDIS_GET_PACKET_HEADER_SIZE(_Packet) \
1962 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1963 (_Packet)->Private.NdisPacketOobOffset))->HeaderSize
1968 * NDIS_GET_PACKET_STATUS(
1969 * IN PNDIS_PACKET Packet);
1971 #define NDIS_GET_PACKET_STATUS(_Packet) \
1972 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1973 (_Packet)->Private.NdisPacketOobOffset))->Status
1978 * NDIS_GET_PACKET_TIME_RECEIVED(
1979 * IN PNDIS_PACKET Packet);
1981 #define NDIS_GET_PACKET_TIME_RECEIVED(_Packet) \
1982 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1983 (_Packet)->Private.NdisPacketOobOffset))->TimeReceived
1988 * NDIS_GET_PACKET_TIME_SENT(
1989 * IN PNDIS_PACKET Packet);
1991 #define NDIS_GET_PACKET_TIME_SENT(_Packet) \
1992 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1993 (_Packet)->Private.NdisPacketOobOffset))->TimeSent
1998 * NDIS_GET_PACKET_TIME_TO_SEND(
1999 * IN PNDIS_PACKET Packet);
2001 #define NDIS_GET_PACKET_TIME_TO_SEND(_Packet) \
2002 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2003 (_Packet)->Private.NdisPacketOobOffset))->TimeToSend
2007 * PNDIS_PACKET_OOB_DATA
2008 * NDIS_OOB_DATA_FROM_PACKET(
2009 * IN PNDIS_PACKET Packet);
2011 #define NDIS_OOB_DATA_FROM_PACKET(_Packet) \
2012 (PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2013 (_Packet)->Private.NdisPacketOobOffset)
2019 * IN PNDIS_PACKET Packet,
2020 * OUT PUINT PhysicalBufferCount OPTIONAL,
2021 * OUT PUINT BufferCount OPTIONAL,
2022 * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
2023 * OUT PUINT TotalPacketLength OPTIONAL);
2025 #define NdisQueryPacket(Packet, \
2026 PhysicalBufferCount, \
2029 TotalPacketLength) \
2032 *((PNDIS_BUFFER*)FirstBuffer) = (Packet)->Private.Head; \
2033 if ((TotalPacketLength) || (BufferCount) || (PhysicalBufferCount)) \
2035 if (!(Packet)->Private.ValidCounts) { \
2037 UINT _PacketLength; \
2038 PNDIS_BUFFER _NdisBuffer; \
2039 UINT _PhysicalBufferCount = 0; \
2040 UINT _TotalPacketLength = 0; \
2043 for (_NdisBuffer = (Packet)->Private.Head; \
2044 _NdisBuffer != (PNDIS_BUFFER)NULL; \
2045 _NdisBuffer = _NdisBuffer->Next) \
2047 _PhysicalBufferCount += NDIS_BUFFER_TO_SPAN_PAGES(_NdisBuffer); \
2048 NdisQueryBufferOffset(_NdisBuffer, &_Offset, &_PacketLength); \
2049 _TotalPacketLength += _PacketLength; \
2052 (Packet)->Private.PhysicalCount = _PhysicalBufferCount; \
2053 (Packet)->Private.TotalLength = _TotalPacketLength; \
2054 (Packet)->Private.Count = _Count; \
2055 (Packet)->Private.ValidCounts = TRUE; \
2058 if (PhysicalBufferCount) \
2059 *((PUINT)PhysicalBufferCount) = (Packet)->Private.PhysicalCount; \
2062 *((PUINT)BufferCount) = (Packet)->Private.Count; \
2064 if (TotalPacketLength) \
2065 *((PUINT)TotalPacketLength) = (Packet)->Private.TotalLength; \
2071 * NdisQueryPacketLength(
2072 * IN PNDIS_PACKET Packet,
2073 * OUT PUINT PhysicalBufferCount OPTIONAL,
2074 * OUT PUINT BufferCount OPTIONAL,
2075 * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
2076 * OUT PUINT TotalPacketLength OPTIONAL);
2078 #define NdisQueryPacketLength(Packet, \
2079 TotalPacketLength) \
2081 if ((TotalPacketLength)) \
2083 if (!(Packet)->Private.ValidCounts) { \
2085 UINT _PacketLength; \
2086 PNDIS_BUFFER _NdisBuffer; \
2087 UINT _PhysicalBufferCount = 0; \
2088 UINT _TotalPacketLength = 0; \
2091 for (_NdisBuffer = (Packet)->Private.Head; \
2092 _NdisBuffer != (PNDIS_BUFFER)NULL; \
2093 _NdisBuffer = _NdisBuffer->Next) \
2095 _PhysicalBufferCount += NDIS_BUFFER_TO_SPAN_PAGES(_NdisBuffer); \
2096 NdisQueryBufferOffset(_NdisBuffer, &_Offset, &_PacketLength); \
2097 _TotalPacketLength += _PacketLength; \
2100 (Packet)->Private.PhysicalCount = _PhysicalBufferCount; \
2101 (Packet)->Private.TotalLength = _TotalPacketLength; \
2102 (Packet)->Private.Count = _Count; \
2103 (Packet)->Private.ValidCounts = TRUE; \
2106 if (TotalPacketLength) \
2107 *((PUINT)TotalPacketLength) = (Packet)->Private.TotalLength; \
2114 * NdisRecalculatePacketCounts(
2115 * IN OUT PNDIS_PACKET Packet);
2117 #define NdisRecalculatePacketCounts(Packet) \
2119 PNDIS_BUFFER _Buffer = (Packet)->Private.Head; \
2120 if (_Buffer != NULL) \
2122 while (_Buffer->Next != NULL) \
2124 ´_Buffer = _Buffer->Next; \
2126 (Packet)->Private.Tail = _Buffer; \
2128 (Packet)->Private.ValidCounts = FALSE; \
2134 * NdisReinitializePacket(
2135 * IN OUT PNDIS_PACKET Packet);
2137 #define NdisReinitializePacketCounts(Packet) \
2139 (Packet)->Private.Head = (PNDIS_BUFFER)NULL; \
2140 (Packet)->Private.ValidCounts = FALSE; \
2146 * NdisSetPacketFlags(
2147 * IN PNDIS_PACKET Packet,
2150 #define NdisSetPacketFlags(Packet, Flags) \
2151 (Packet)->Private.Flags |= (Flags);
2156 * NDIS_SET_PACKET_HEADER_SIZE(
2157 * IN PNDIS_PACKET Packet,
2160 #define NDIS_SET_PACKET_HEADER_SIZE(_Packet, _HdrSize) \
2161 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2162 (_Packet)->Private.NdisPacketOobOffset))->HeaderSize = (_HdrSize)
2167 * NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(
2168 * IN PNDIS_PACKET Packet,
2169 * IN PVOID MediaSpecificInfo,
2170 * IN UINT SizeMediaSpecificInfo);
2172 #define NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \
2173 _MediaSpecificInfo, \
2174 _SizeMediaSpecificInfo) \
2176 if ((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) \
2178 (_Packet)->Private.NdisPacketFlags |= fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO; \
2179 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2180 (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation = \
2181 (_MediaSpecificInfo); \
2182 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2183 (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo = \
2184 (_SizeMediaSpecificInfo); \
2191 * NDIS_SET_PACKET_STATUS(
2192 * IN PNDIS_PACKET Packet,
2193 * IN NDIS_STATUS Status);
2195 #define NDIS_SET_PACKET_STATUS(_Packet, _Status) \
2196 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2197 (_Packet)->Private.NdisPacketOobOffset))->Status = (_Status)
2202 * NDIS_SET_PACKET_TIME_RECEIVED(
2203 * IN PNDIS_PACKET Packet,
2204 * IN ULONGLONG TimeReceived);
2206 #define NDIS_SET_PACKET_TIME_RECEIVED(_Packet, _TimeReceived) \
2207 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2208 (_Packet)->Private.NdisPacketOobOffset))->TimeReceived = (_TimeReceived)
2213 * NDIS_SET_PACKET_TIME_SENT(
2214 * IN PNDIS_PACKET Packet,
2215 * IN ULONGLONG TimeSent);
2217 #define NDIS_SET_PACKET_TIME_SENT(_Packet, _TimeSent) \
2218 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2219 (_Packet)->Private.NdisPacketOobOffset))->TimeSent = (_TimeSent)
2224 * NDIS_SET_PACKET_TIME_TO_SEND(
2225 * IN PNDIS_PACKET Packet,
2226 * IN ULONGLONG TimeToSend);
2228 #define NDIS_SET_PACKET_TIME_TO_SEND(_Packet, _TimeToSend) \
2229 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2230 (_Packet)->Private.NdisPacketOobOffset))->TimeToSend = (_TimeToSend)
2236 * IN PNDIS_PACKET Packet,
2239 #define NdisSetSendFlags(_Packet,_Flags)(_Packet)->Private.Flags = (_Flags)
2243 /* Memory management routines */
2245 #if BINARY_COMPATIBLE
2250 NdisCreateLookaheadBufferFromSharedMemory(
2251 IN PVOID pSharedMemory
,
2252 IN UINT LookaheadLength
,
2253 OUT PVOID
*pLookaheadBuffer
);
2258 NdisDestroyLookaheadBufferFromSharedMemory(
2259 IN PVOID pLookaheadBuffer
);
2265 * NdisCreateLookaheadBufferFromSharedMemory(
2266 * IN PVOID pSharedMemory,
2267 * IN UINT LookaheadLength,
2268 * OUT PVOID *pLookaheadBuffer)
2270 #define NdisCreateLookaheadBufferFromSharedMemory(_pSharedMemory, \
2272 _pLookaheadBuffer) \
2273 ((*(_pLookaheadBuffer)) = (_pSharedMemory))
2277 * NdisDestroyLookaheadBufferFromSharedMemory(
2278 * IN PVOID pLookaheadBuffer)
2280 #define NdisDestroyLookaheadBufferFromSharedMemory(_pLookaheadBuffer)
2284 #if defined(_M_IX86) || defined(_M_AMD64)
2288 * NdisMoveMappedMemory(
2289 * OUT PVOID Destination,
2293 #define NdisMoveMappedMemory(Destination, Source, Length) \
2294 RtlCopyMemory(Destination, Source, Length)
2298 * NdisZeroMappedMemory(
2299 * IN PVOID Destination,
2302 #define NdisZeroMappedMemory(Destination, Length) \
2303 RtlZeroMemory(Destination, Length)
2307 #define NdisMoveMappedMemory(Destination, Source, Length) \
2309 PUCHAR _Dest
= Destination
, _Src
= Source
, _End
= _Dest
+ Length
;
2310 while (_Dest
< _End
)
2314 #define NdisZeroMappedMemory(Destination, Length) \
2316 PUCHAR _Dest
= Destination
, _End
= _Dest
+ Length
;
2317 while (_Dest
< _End
)
2321 #endif /* _M_IX86 or _M_AMD64 */
2325 * NdisMoveFromMappedMemory(
2326 * OUT PVOID Destination,
2330 #define NdisMoveFromMappedMemory(Destination, Source, Length) \
2331 NdisMoveMappedMemory(Destination, Source, Length)
2335 * NdisMoveToMappedMemory(
2336 * OUT PVOID Destination,
2340 #define NdisMoveToMappedMemory(Destination, Source, Length) \
2341 NdisMoveMappedMemory(Destination, Source, Length)
2345 * NdisMUpdateSharedMemory(
2346 * IN NDIS_HANDLE MiniportAdapterHandle,
2348 * IN PVOID VirtualAddress,
2349 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2351 #define NdisMUpdateSharedMemory(_H, _L, _V, _P) \
2352 NdisUpdateSharedMemory(_H, _L, _V, _P)
2358 OUT PVOID
*VirtualAddress
,
2360 IN UINT MemoryFlags
,
2361 IN NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress
);
2367 IN PVOID VirtualAddress
,
2369 IN UINT MemoryFlags
);
2374 NdisImmediateReadSharedMemory(
2375 IN NDIS_HANDLE WrapperConfigurationContext
,
2376 IN ULONG SharedMemoryAddress
,
2383 NdisImmediateWriteSharedMemory(
2384 IN NDIS_HANDLE WrapperConfigurationContext
,
2385 IN ULONG SharedMemoryAddress
,
2392 NdisMAllocateSharedMemory(
2393 IN NDIS_HANDLE MiniportAdapterHandle
,
2396 OUT PVOID
*VirtualAddress
,
2397 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress
);
2402 NdisMAllocateSharedMemoryAsync(
2403 IN NDIS_HANDLE MiniportAdapterHandle
,
2410 #define NdisUpdateSharedMemory(NdisAdapterHandle, \
2420 NdisUpdateSharedMemory(
2421 IN NDIS_HANDLE NdisAdapterHandle
,
2423 IN PVOID VirtualAddress
,
2424 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress
);
2426 #endif /* defined(NDIS50) */
2430 * NdisGetPhysicalAddressHigh(
2431 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2433 #define NdisGetPhysicalAddressHigh(PhysicalAddress) \
2434 ((PhysicalAddress).HighPart)
2438 * NdisSetPhysicalAddressHigh(
2439 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
2442 #define NdisSetPhysicalAddressHigh(PhysicalAddress, Value) \
2443 ((PhysicalAddress).HighPart) = (Value)
2447 * NdisGetPhysicalAddressLow(
2448 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2450 #define NdisGetPhysicalAddressLow(PhysicalAddress) \
2451 ((PhysicalAddress).LowPart)
2456 * NdisSetPhysicalAddressLow(
2457 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
2460 #define NdisSetPhysicalAddressLow(PhysicalAddress, Value) \
2461 ((PhysicalAddress).LowPart) = (Value)
2465 * NDIS_PHYSICAL_ADDRESS_CONST(
2469 #define NDIS_PHYSICAL_ADDRESS_CONST(Low, High) \
2470 { {(ULONG)(Low), (LONG)(High)} }
2475 * IN CONST VOID *Source1,
2476 * IN CONST VOID *Source2,
2479 #define NdisEqualMemory(Source1, Source2, Length) \
2480 RtlEqualMemory(Source1, Source2, Length)
2485 * IN PVOID Destination,
2489 #define NdisFillMemory(Destination, Length, Fill) \
2490 RtlFillMemory(Destination, Length, Fill)
2495 * OUT PVOID Destination,
2499 #define NdisMoveMemory(Destination, Source, Length) \
2500 RtlCopyMemory(Destination, Source, Length)
2505 * NdisRetrieveUlong(
2506 * IN PULONG DestinationAddress,
2507 * IN PULONG SourceAddress);
2509 #define NdisRetrieveUlong(DestinationAddress, SourceAddress) \
2510 RtlRetrieveUlong(DestinationAddress, SourceAddress)
2516 * IN PULONG DestinationAddress,
2519 #define NdisStoreUlong(DestinationAddress, Value) \
2520 RtlStoreUlong(DestinationAddress, Value)
2526 * IN PVOID Destination,
2529 #define NdisZeroMemory(Destination, Length) \
2530 RtlZeroMemory(Destination, Length)
2534 /* Configuration routines */
2539 NdisOpenConfiguration(
2540 OUT PNDIS_STATUS Status
,
2541 OUT PNDIS_HANDLE ConfigurationHandle
,
2542 IN NDIS_HANDLE WrapperConfigurationContext
);
2547 NdisReadNetworkAddress(
2548 OUT PNDIS_STATUS Status
,
2549 OUT PVOID
*NetworkAddress
,
2550 OUT PUINT NetworkAddressLength
,
2551 IN NDIS_HANDLE ConfigurationHandle
);
2556 NdisReadEisaSlotInformation(
2557 OUT PNDIS_STATUS Status
,
2558 IN NDIS_HANDLE WrapperConfigurationContext
,
2559 OUT PUINT SlotNumber
,
2560 OUT PNDIS_EISA_FUNCTION_INFORMATION EisaData
);
2565 NdisReadEisaSlotInformationEx(
2566 OUT PNDIS_STATUS Status
,
2567 IN NDIS_HANDLE WrapperConfigurationContext
,
2568 OUT PUINT SlotNumber
,
2569 OUT PNDIS_EISA_FUNCTION_INFORMATION
*EisaData
,
2570 OUT PUINT NumberOfFunctions
);
2575 NdisReadPciSlotInformation(
2576 IN NDIS_HANDLE NdisAdapterHandle
,
2577 IN ULONG SlotNumber
,
2585 NdisWritePciSlotInformation(
2586 IN NDIS_HANDLE NdisAdapterHandle
,
2587 IN ULONG SlotNumber
,
2594 /* String management routines */
2599 NdisAnsiStringToUnicodeString(
2600 IN OUT PNDIS_STRING DestinationString
,
2601 IN PNDIS_ANSI_STRING SourceString
);
2606 * IN PNDIS_STRING String1,
2607 * IN PNDIS_STRING String2,
2608 * IN BOOLEAN CaseInsensitive);
2610 #define NdisEqualString(_String1, _String2, _CaseInsensitive) \
2611 RtlEqualUnicodeString(_String1, _String2, _CaseInsensitive)
2617 IN OUT PNDIS_ANSI_STRING DestinationString
,
2618 IN PCSTR SourceString
);
2623 NdisInitUnicodeString(
2624 IN OUT PNDIS_STRING DestinationString
,
2625 IN PCWSTR SourceString
);
2630 NdisUnicodeStringToAnsiString(
2631 IN OUT PNDIS_ANSI_STRING DestinationString
,
2632 IN PNDIS_STRING SourceString
);
2634 #define NdisFreeString(_s) NdisFreeMemory((_s).Buffer, (_s).MaximumLength, 0)
2635 #define NdisPrintString(_s) DbgPrint("%ls", (_s).Buffer)
2638 /* Spin lock reoutines */
2640 #if BINARY_COMPATIBLE
2645 NdisAllocateSpinLock(
2646 IN PNDIS_SPIN_LOCK SpinLock
);
2652 IN PNDIS_SPIN_LOCK SpinLock
);
2657 NdisAcquireSpinLock(
2658 IN PNDIS_SPIN_LOCK SpinLock
);
2663 NdisReleaseSpinLock(
2664 IN PNDIS_SPIN_LOCK SpinLock
);
2669 NdisDprAcquireSpinLock(
2670 IN PNDIS_SPIN_LOCK SpinLock
);
2675 NdisDprReleaseSpinLock(
2676 IN PNDIS_SPIN_LOCK SpinLock
);
2682 * NdisAllocateSpinLock(
2683 * IN PNDIS_SPIN_LOCK SpinLock);
2685 #define NdisAllocateSpinLock(_SpinLock) \
2686 KeInitializeSpinLock(&(_SpinLock)->SpinLock)
2691 * IN PNDIS_SPIN_LOCK SpinLock);
2693 #define NdisFreeSpinLock(_SpinLock)
2697 * NdisAcquireSpinLock(
2698 * IN PNDIS_SPIN_LOCK SpinLock);
2700 #define NdisAcquireSpinLock(_SpinLock) \
2701 KeAcquireSpinLock(&(_SpinLock)->SpinLock, &(_SpinLock)->OldIrql)
2705 * NdisReleaseSpinLock(
2706 * IN PNDIS_SPIN_LOCK SpinLock);
2708 #define NdisReleaseSpinLock(_SpinLock) \
2709 KeReleaseSpinLock(&(_SpinLock)->SpinLock, (_SpinLock)->OldIrql)
2713 * NdisDprAcquireSpinLock(
2714 * IN PNDIS_SPIN_LOCK SpinLock);
2716 #define NdisDprAcquireSpinLock(_SpinLock) \
2718 KeAcquireSpinLockAtDpcLevel(&(_SpinLock)->SpinLock); \
2719 (_SpinLock)->OldIrql = DISPATCH_LEVEL; \
2724 * NdisDprReleaseSpinLock(
2725 * IN PNDIS_SPIN_LOCK SpinLock);
2727 #define NdisDprReleaseSpinLock(_SpinLock) \
2728 KeReleaseSpinLockFromDpcLevel(&(_SpinLock)->SpinLock)
2730 #endif /* BINARY_COMPATIBLE */
2736 * NdisRawReadPortBufferUchar(
2738 * OUT PUCHAR Buffer,
2741 #define NdisRawReadPortBufferUchar(Port, Buffer, Length) \
2742 READ_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
2746 * NdisRawReadPortBufferUlong(
2748 * OUT PULONG Buffer,
2751 #define NdisRawReadPortBufferUlong(Port, Buffer, Length) \
2752 READ_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
2756 * NdisRawReadPortBufferUshort(
2758 * OUT PUSHORT Buffer,
2761 #define NdisRawReadPortBufferUshort(Port, Buffer, Length) \
2762 READ_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
2767 * NdisRawReadPortUchar(
2771 #define NdisRawReadPortUchar(Port, Data) \
2772 *(Data) = READ_PORT_UCHAR((PUCHAR)(Port))
2776 * NdisRawReadPortUlong(
2780 #define NdisRawReadPortUlong(Port, Data) \
2781 *(Data) = READ_PORT_ULONG((PULONG)(Port))
2785 * NdisRawReadPortUshort(
2787 * OUT PUSHORT Data);
2789 #define NdisRawReadPortUshort(Port, Data) \
2790 *(Data) = READ_PORT_USHORT((PUSHORT)(Port))
2795 * NdisRawWritePortBufferUchar(
2800 #define NdisRawWritePortBufferUchar(Port, Buffer, Length) \
2801 WRITE_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
2805 * NdisRawWritePortBufferUlong(
2810 #define NdisRawWritePortBufferUlong(Port, Buffer, Length) \
2811 WRITE_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
2815 * NdisRawWritePortBufferUshort(
2817 * IN PUSHORT Buffer,
2820 #define NdisRawWritePortBufferUshort(Port, Buffer, Length) \
2821 WRITE_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
2826 * NdisRawWritePortUchar(
2830 #define NdisRawWritePortUchar(Port, Data) \
2831 WRITE_PORT_UCHAR((PUCHAR)(Port), (UCHAR)(Data))
2835 * NdisRawWritePortUlong(
2839 #define NdisRawWritePortUlong(Port, Data) \
2840 WRITE_PORT_ULONG((PULONG)(Port), (ULONG)(Data))
2844 * NdisRawWritePortUshort(
2848 #define NdisRawWritePortUshort(Port, Data) \
2849 WRITE_PORT_USHORT((PUSHORT)(Port), (USHORT)(Data))
2854 * NdisReadRegisterUchar(
2855 * IN PUCHAR Register,
2858 #define NdisReadRegisterUchar(Register, Data) \
2859 *(Data) = *(Register)
2863 * NdisReadRegisterUlong(
2864 * IN PULONG Register,
2867 #define NdisReadRegisterUlong(Register, Data) \
2868 *(Data) = *(Register)
2872 * NdisReadRegisterUshort(
2873 * IN PUSHORT Register,
2874 * OUT PUSHORT Data);
2876 #define NdisReadRegisterUshort(Register, Data) \
2877 *(Data) = *(Register)
2881 * NdisReadRegisterUchar(
2882 * IN PUCHAR Register,
2885 #define NdisWriteRegisterUchar(Register, Data) \
2886 WRITE_REGISTER_UCHAR((Register), (Data))
2890 * NdisReadRegisterUlong(
2891 * IN PULONG Register,
2894 #define NdisWriteRegisterUlong(Register, Data) \
2895 WRITE_REGISTER_ULONG((Register), (Data))
2899 * NdisReadRegisterUshort(
2900 * IN PUSHORT Register,
2903 #define NdisWriteRegisterUshort(Register, Data) \
2904 WRITE_REGISTER_USHORT((Register), (Data))
2911 * NdisInitializeListHead(
2912 * IN PLIST_ENTRY ListHead);
2914 #define NdisInitializeListHead(_ListHead) \
2915 InitializeListHead(_ListHead)
2919 * NdisInterlockedInsertHeadList(
2920 * IN PLIST_ENTRY ListHead,
2921 * IN PLIST_ENTRY ListEntry,
2922 * IN PNDIS_SPIN_LOCK SpinLock);
2924 #define NdisInterlockedInsertHeadList(_ListHead, _ListEntry, _SpinLock) \
2925 ExInterlockedInsertHeadList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
2929 * NdisInterlockedInsertTailList(
2930 * IN PLIST_ENTRY ListHead,
2931 * IN PLIST_ENTRY ListEntry,
2932 * IN PNDIS_SPIN_LOCK SpinLock);
2934 #define NdisInterlockedInsertTailList(_ListHead, _ListEntry, _SpinLock) \
2935 ExInterlockedInsertTailList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
2939 * NdisInterlockedRemoveHeadList(
2940 * IN PLIST_ENTRY ListHead,
2941 * IN PNDIS_SPIN_LOCK SpinLock);
2943 #define NdisInterlockedRemoveHeadList(_ListHead, _SpinLock) \
2944 ExInterlockedRemoveHeadList(_ListHead, &(_SpinLock)->SpinLock)
2948 * NdisInitializeSListHead(
2949 * IN PSLIST_HEADER SListHead);
2951 #define NdisInitializeSListHead(SListHead) ExInitializeSListHead(SListHead)
2954 * USHORT NdisQueryDepthSList(
2955 * IN PSLIST_HEADER SListHead);
2957 #define NdisQueryDepthSList(SListHead) ExQueryDepthSList(SListHead)
2961 /* Interlocked routines */
2965 * NdisInterlockedDecrement(
2968 #define NdisInterlockedDecrement(Addend) InterlockedDecrement(Addend)
2972 * NdisInterlockedIncrement(
2975 #define NdisInterlockedIncrement(Addend) InterlockedIncrement(Addend)
2979 * NdisInterlockedAddUlong(
2981 * IN ULONG Increment,
2982 * IN PNDIS_SPIN_LOCK SpinLock);
2984 #define NdisInterlockedAddUlong(_Addend, _Increment, _SpinLock) \
2985 ExInterlockedAddUlong(_Addend, _Increment, &(_SpinLock)->SpinLock)
2989 /* Miscellaneous routines */
2994 NdisCloseConfiguration(
2995 IN NDIS_HANDLE ConfigurationHandle
);
3000 NdisReadConfiguration(
3001 OUT PNDIS_STATUS Status
,
3002 OUT PNDIS_CONFIGURATION_PARAMETER
*ParameterValue
,
3003 IN NDIS_HANDLE ConfigurationHandle
,
3004 IN PNDIS_STRING Keyword
,
3005 IN NDIS_PARAMETER_TYPE ParameterType
);
3010 NdisWriteConfiguration(
3011 OUT PNDIS_STATUS Status
,
3012 IN NDIS_HANDLE WrapperConfigurationContext
,
3013 IN PNDIS_STRING Keyword
,
3014 IN PNDIS_CONFIGURATION_PARAMETER ParameterValue
);
3019 NdisWriteErrorLogEntry(
3020 IN NDIS_HANDLE NdisAdapterHandle
,
3021 IN NDIS_ERROR_CODE ErrorCode
,
3022 IN ULONG NumberOfErrorValues
,
3027 * NdisStallExecution(
3028 * IN UINT MicrosecondsToStall)
3030 #define NdisStallExecution KeStallExecutionProcessor
3032 #if BINARY_COMPATIBLE
3037 NdisGetCurrentSystemTime(
3038 IN PLARGE_INTEGER pSystemTime
);
3044 * NdisGetCurrentSystemTime(
3045 * IN PLARGE_INTEGER pSystemTime);
3047 #define NdisGetCurrentSystemTime KeQuerySystemTime
3054 NdisSystemProcessorCount(VOID
);
3059 NdisGetCurrentProcessorCpuUsage(
3060 OUT PULONG pCpuUsage
);
3064 /* NDIS helper macros */
3068 * NDIS_INIT_FUNCTION(FunctionName)
3070 #define NDIS_INIT_FUNCTION(FunctionName) \
3071 alloc_text(init, FunctionName)
3075 * NDIS_PAGABLE_FUNCTION(FunctionName)
3077 #define NDIS_PAGEABLE_FUNCTION(FunctionName) \
3078 alloc_text(page, FunctionName)
3080 #define NDIS_PAGABLE_FUNCTION NDIS_PAGEABLE_FUNCTION
3083 /* NDIS 4.0 extensions */
3088 NdisMFreeSharedMemory(
3089 IN NDIS_HANDLE MiniportAdapterHandle
,
3092 IN PVOID VirtualAddress
,
3093 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress
);
3098 NdisMWanIndicateReceive(
3099 OUT PNDIS_STATUS Status
,
3100 IN NDIS_HANDLE MiniportAdapterHandle
,
3101 IN NDIS_HANDLE NdisLinkContext
,
3102 IN PUCHAR PacketBuffer
,
3103 IN UINT PacketSize
);
3108 NdisMWanIndicateReceiveComplete(
3109 IN NDIS_HANDLE MiniportAdapterHandle
);
3114 NdisMWanSendComplete(
3115 IN NDIS_HANDLE MiniportAdapterHandle
,
3116 IN PNDIS_WAN_PACKET Packet
,
3117 IN NDIS_STATUS Status
);
3122 NdisPciAssignResources(
3123 IN NDIS_HANDLE NdisMacHandle
,
3124 IN NDIS_HANDLE NdisWrapperHandle
,
3125 IN NDIS_HANDLE WrapperConfigurationContext
,
3126 IN ULONG SlotNumber
,
3127 OUT PNDIS_RESOURCE_LIST
*AssignedResources
);
3130 /* NDIS 5.0 extensions */
3135 NdisAcquireReadWriteLock(
3136 IN PNDIS_RW_LOCK Lock
,
3138 IN PLOCK_STATE LockState
);
3143 NdisAllocateMemoryWithTag(
3144 OUT PVOID
*VirtualAddress
,
3151 NdisAllocatePacketPoolEx(
3152 OUT PNDIS_STATUS Status
,
3153 OUT PNDIS_HANDLE PoolHandle
,
3154 IN UINT NumberOfDescriptors
,
3155 IN UINT NumberOfOverflowDescriptors
,
3156 IN UINT ProtocolReservedLength
);
3161 NdisCompletePnPEvent(
3162 IN NDIS_STATUS Status
,
3163 IN NDIS_HANDLE NdisBindingHandle
,
3164 IN PNET_PNP_EVENT NetPnPEvent
);
3169 NdisGetCurrentProcessorCounts(
3170 OUT PULONG pIdleCount
,
3171 OUT PULONG pKernelAndUser
,
3177 NdisGetDriverHandle(
3178 IN PNDIS_HANDLE NdisBindingHandle
,
3179 OUT PNDIS_HANDLE NdisDriverHandle
);
3184 NdisGetReceivedPacket(
3185 IN PNDIS_HANDLE NdisBindingHandle
,
3186 IN PNDIS_HANDLE MacContext
);
3191 NdisGetSystemUptime(
3192 OUT PULONG pSystemUpTime
);
3197 NdisInitializeReadWriteLock(
3198 IN PNDIS_RW_LOCK Lock
);
3203 NdisMDeregisterDevice(
3204 IN NDIS_HANDLE NdisDeviceHandle
);
3209 NdisMGetDeviceProperty(
3210 IN NDIS_HANDLE MiniportAdapterHandle
,
3211 IN OUT PDEVICE_OBJECT
*PhysicalDeviceObject OPTIONAL
,
3212 IN OUT PDEVICE_OBJECT
*FunctionalDeviceObject OPTIONAL
,
3213 IN OUT PDEVICE_OBJECT
*NextDeviceObject OPTIONAL
,
3214 IN OUT PCM_RESOURCE_LIST
*AllocatedResources OPTIONAL
,
3215 IN OUT PCM_RESOURCE_LIST
*AllocatedResourcesTranslated OPTIONAL
);
3220 NdisMInitializeScatterGatherDma(
3221 IN NDIS_HANDLE MiniportAdapterHandle
,
3222 IN BOOLEAN Dma64BitAddresses
,
3223 IN ULONG MaximumPhysicalMapping
);
3228 NdisMPromoteMiniport(
3229 IN NDIS_HANDLE MiniportAdapterHandle
);
3234 NdisMQueryAdapterInstanceName(
3235 OUT PNDIS_STRING AdapterInstanceName
,
3236 IN NDIS_HANDLE MiniportAdapterHandle
);
3241 NdisMRegisterDevice(
3242 IN NDIS_HANDLE NdisWrapperHandle
,
3243 IN PNDIS_STRING DeviceName
,
3244 IN PNDIS_STRING SymbolicName
,
3245 IN PDRIVER_DISPATCH MajorFunctions
[],
3246 OUT PDEVICE_OBJECT
*pDeviceObject
,
3247 OUT NDIS_HANDLE
*NdisDeviceHandle
);
3252 NdisMRegisterUnloadHandler(
3253 IN NDIS_HANDLE NdisWrapperHandle
,
3254 IN PDRIVER_UNLOAD UnloadHandler
);
3259 NdisMRemoveMiniport(
3260 IN NDIS_HANDLE MiniportAdapterHandle
);
3265 NdisMSetMiniportSecondary(
3266 IN NDIS_HANDLE MiniportAdapterHandle
,
3267 IN NDIS_HANDLE PrimaryMiniportAdapterHandle
);
3272 NdisOpenConfigurationKeyByIndex(
3273 OUT PNDIS_STATUS Status
,
3274 IN NDIS_HANDLE ConfigurationHandle
,
3276 OUT PNDIS_STRING KeyName
,
3277 OUT PNDIS_HANDLE KeyHandle
);
3282 NdisOpenConfigurationKeyByName(
3283 OUT PNDIS_STATUS Status
,
3284 IN NDIS_HANDLE ConfigurationHandle
,
3285 IN PNDIS_STRING SubKeyName
,
3286 OUT PNDIS_HANDLE SubKeyHandle
);
3291 NdisPacketPoolUsage(
3292 IN NDIS_HANDLE PoolHandle
);
3297 NdisQueryAdapterInstanceName(
3298 OUT PNDIS_STRING AdapterInstanceName
,
3299 IN NDIS_HANDLE NdisBindingHandle
);
3304 NdisReadPcmciaAttributeMemory(
3305 IN NDIS_HANDLE NdisAdapterHandle
,
3313 NdisReleaseReadWriteLock(
3314 IN PNDIS_RW_LOCK Lock
,
3315 IN PLOCK_STATE LockState
);
3320 NdisWriteEventLogEntry(
3322 IN NDIS_STATUS EventCode
,
3323 IN ULONG UniqueEventValue
,
3324 IN USHORT NumStrings
,
3325 IN PVOID StringsList OPTIONAL
,
3327 IN PVOID Data OPTIONAL
);
3332 NdisWritePcmciaAttributeMemory(
3333 IN NDIS_HANDLE NdisAdapterHandle
,
3339 /* Connectionless services */
3345 IN NDIS_HANDLE NdisVcHandle
,
3346 IN NDIS_HANDLE ProtocolPartyContext
,
3347 IN OUT PCO_CALL_PARAMETERS CallParameters
,
3348 OUT PNDIS_HANDLE NdisPartyHandle
);
3353 NdisClCloseAddressFamily(
3354 IN NDIS_HANDLE NdisAfHandle
);
3360 IN NDIS_HANDLE NdisVcHandle
,
3361 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
3362 IN PVOID Buffer OPTIONAL
,
3368 NdisClDeregisterSap(
3369 IN NDIS_HANDLE NdisSapHandle
);
3375 IN NDIS_HANDLE NdisPartyHandle
,
3376 IN PVOID Buffer OPTIONAL
,
3382 NdisClIncomingCallComplete(
3383 IN NDIS_STATUS Status
,
3384 IN NDIS_HANDLE NdisVcHandle
,
3385 IN PCO_CALL_PARAMETERS CallParameters
);
3391 IN NDIS_HANDLE NdisVcHandle
,
3392 IN OUT PCO_CALL_PARAMETERS CallParameters
,
3393 IN NDIS_HANDLE ProtocolPartyContext OPTIONAL
,
3394 OUT PNDIS_HANDLE NdisPartyHandle OPTIONAL
);
3399 NdisClModifyCallQoS(
3400 IN NDIS_HANDLE NdisVcHandle
,
3401 IN PCO_CALL_PARAMETERS CallParameters
);
3407 NdisClOpenAddressFamily(
3408 IN NDIS_HANDLE NdisBindingHandle
,
3409 IN PCO_ADDRESS_FAMILY AddressFamily
,
3410 IN NDIS_HANDLE ProtocolAfContext
,
3411 IN PNDIS_CLIENT_CHARACTERISTICS ClCharacteristics
,
3412 IN UINT SizeOfClCharacteristics
,
3413 OUT PNDIS_HANDLE NdisAfHandle
);
3419 IN NDIS_HANDLE NdisAfHandle
,
3420 IN NDIS_HANDLE ProtocolSapContext
,
3422 OUT PNDIS_HANDLE NdisSapHandle
);
3425 /* Call Manager services */
3431 IN NDIS_HANDLE NdisVcHandle
,
3432 IN OUT PCO_CALL_PARAMETERS CallParameters
);
3437 NdisCmAddPartyComplete(
3438 IN NDIS_STATUS Status
,
3439 IN NDIS_HANDLE NdisPartyHandle
,
3440 IN NDIS_HANDLE CallMgrPartyContext OPTIONAL
,
3441 IN PCO_CALL_PARAMETERS CallParameters
);
3446 NdisCmCloseAddressFamilyComplete(
3447 IN NDIS_STATUS Status
,
3448 IN NDIS_HANDLE NdisAfHandle
);
3453 NdisCmCloseCallComplete(
3454 IN NDIS_STATUS Status
,
3455 IN NDIS_HANDLE NdisVcHandle
,
3456 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
);
3462 IN NDIS_HANDLE NdisVcHandle
);
3467 NdisCmDeregisterSapComplete(
3468 IN NDIS_STATUS Status
,
3469 IN NDIS_HANDLE NdisSapHandle
);
3474 NdisCmDispatchCallConnected(
3475 IN NDIS_HANDLE NdisVcHandle
);
3480 NdisCmDispatchIncomingCall(
3481 IN NDIS_HANDLE NdisSapHandle
,
3482 IN NDIS_HANDLE NdisVcHandle
,
3483 IN PCO_CALL_PARAMETERS CallParameters
);
3488 NdisCmDispatchIncomingCallQoSChange(
3489 IN NDIS_HANDLE NdisVcHandle
,
3490 IN PCO_CALL_PARAMETERS CallParameters
);
3495 NdisCmDispatchIncomingCloseCall(
3496 IN NDIS_STATUS CloseStatus
,
3497 IN NDIS_HANDLE NdisVcHandle
,
3498 IN PVOID Buffer OPTIONAL
,
3504 NdisCmDispatchIncomingDropParty(
3505 IN NDIS_STATUS DropStatus
,
3506 IN NDIS_HANDLE NdisPartyHandle
,
3507 IN PVOID Buffer OPTIONAL
,
3513 NdisCmDropPartyComplete(
3514 IN NDIS_STATUS Status
,
3515 IN NDIS_HANDLE NdisPartyHandle
);
3520 NdisCmMakeCallComplete(
3521 IN NDIS_STATUS Status
,
3522 IN NDIS_HANDLE NdisVcHandle
,
3523 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
3524 IN NDIS_HANDLE CallMgrPartyContext OPTIONAL
,
3525 IN PCO_CALL_PARAMETERS CallParameters
);
3530 NdisCmModifyCallQoSComplete(
3531 IN NDIS_STATUS Status
,
3532 IN NDIS_HANDLE NdisVcHandle
,
3533 IN PCO_CALL_PARAMETERS CallParameters
);
3538 NdisCmOpenAddressFamilyComplete(
3539 IN NDIS_STATUS Status
,
3540 IN NDIS_HANDLE NdisAfHandle
,
3541 IN NDIS_HANDLE CallMgrAfContext
);
3546 NdisCmRegisterAddressFamily(
3547 IN NDIS_HANDLE NdisBindingHandle
,
3548 IN PCO_ADDRESS_FAMILY AddressFamily
,
3549 IN PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics
,
3550 IN UINT SizeOfCmCharacteristics
);
3555 NdisCmRegisterSapComplete(
3556 IN NDIS_STATUS Status
,
3557 IN NDIS_HANDLE NdisSapHandle
,
3558 IN NDIS_HANDLE CallMgrSapContext
);
3565 IN NDIS_HANDLE NdisVcHandle
,
3566 IN PCO_CALL_PARAMETERS CallParameters
);
3572 IN NDIS_HANDLE MiniportAdapterHandle
,
3573 IN NDIS_HANDLE NdisAfHandle
,
3574 IN NDIS_HANDLE MiniportVcContext
,
3575 OUT PNDIS_HANDLE NdisVcHandle
);
3580 NdisMCmDeactivateVc(
3581 IN NDIS_HANDLE NdisVcHandle
);
3587 IN NDIS_HANDLE NdisVcHandle
);
3592 NdisMCmRegisterAddressFamily(
3593 IN NDIS_HANDLE MiniportAdapterHandle
,
3594 IN PCO_ADDRESS_FAMILY AddressFamily
,
3595 IN PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics
,
3596 IN UINT SizeOfCmCharacteristics
);
3602 IN NDIS_HANDLE NdisAfHandle
,
3603 IN NDIS_HANDLE NdisVcHandle OPTIONAL
,
3604 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
3605 IN OUT PNDIS_REQUEST NdisRequest
);
3608 /* Connection-oriented services */
3614 IN NDIS_HANDLE NdisBindingHandle
,
3615 IN NDIS_HANDLE NdisAfHandle OPTIONAL
,
3616 IN NDIS_HANDLE ProtocolVcContext
,
3617 IN OUT PNDIS_HANDLE NdisVcHandle
);
3623 IN NDIS_HANDLE NdisVcHandle
);
3629 IN NDIS_HANDLE NdisBindingHandle
,
3630 IN NDIS_HANDLE NdisAfHandle OPTIONAL
,
3631 IN NDIS_HANDLE NdisVcHandle OPTIONAL
,
3632 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
3633 IN OUT PNDIS_REQUEST NdisRequest
);
3638 NdisCoRequestComplete(
3639 IN NDIS_STATUS Status
,
3640 IN NDIS_HANDLE NdisAfHandle
,
3641 IN NDIS_HANDLE NdisVcHandle OPTIONAL
,
3642 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
3643 IN PNDIS_REQUEST NdisRequest
);
3649 IN NDIS_HANDLE NdisVcHandle
,
3650 IN PPNDIS_PACKET PacketArray
,
3651 IN UINT NumberOfPackets
);
3656 NdisMCoActivateVcComplete(
3657 IN NDIS_STATUS Status
,
3658 IN NDIS_HANDLE NdisVcHandle
,
3659 IN PCO_CALL_PARAMETERS CallParameters
);
3664 NdisMCoDeactivateVcComplete(
3665 IN NDIS_STATUS Status
,
3666 IN NDIS_HANDLE NdisVcHandle
);
3671 NdisMCoIndicateReceivePacket(
3672 IN NDIS_HANDLE NdisVcHandle
,
3673 IN PPNDIS_PACKET PacketArray
,
3674 IN UINT NumberOfPackets
);
3679 NdisMCoIndicateStatus(
3680 IN NDIS_HANDLE MiniportAdapterHandle
,
3681 IN NDIS_HANDLE NdisVcHandle OPTIONAL
,
3682 IN NDIS_STATUS GeneralStatus
,
3683 IN PVOID StatusBuffer OPTIONAL
,
3684 IN ULONG StatusBufferSize
);
3689 NdisMCoReceiveComplete(
3690 IN NDIS_HANDLE MiniportAdapterHandle
);
3695 NdisMCoRequestComplete(
3696 IN NDIS_STATUS Status
,
3697 IN NDIS_HANDLE MiniportAdapterHandle
,
3698 IN PNDIS_REQUEST Request
);
3703 NdisMCoSendComplete(
3704 IN NDIS_STATUS Status
,
3705 IN NDIS_HANDLE NdisVcHandle
,
3706 IN PNDIS_PACKET Packet
);
3709 /* NDIS 5.0 extensions for intermediate drivers */
3714 NdisIMAssociateMiniport(
3715 IN NDIS_HANDLE DriverHandle
,
3716 IN NDIS_HANDLE ProtocolHandle
);
3721 NdisIMCancelInitializeDeviceInstance(
3722 IN NDIS_HANDLE DriverHandle
,
3723 IN PNDIS_STRING DeviceInstance
);
3728 NdisIMCopySendCompletePerPacketInfo(
3729 IN PNDIS_PACKET DstPacket
,
3730 IN PNDIS_PACKET SrcPacket
);
3735 NdisIMCopySendPerPacketInfo(
3736 IN PNDIS_PACKET DstPacket
,
3737 IN PNDIS_PACKET SrcPacket
);
3742 NdisIMDeregisterLayeredMiniport(
3743 IN NDIS_HANDLE DriverHandle
);
3748 NdisIMGetBindingContext(
3749 IN NDIS_HANDLE NdisBindingHandle
);
3754 NdisIMGetDeviceContext(
3755 IN NDIS_HANDLE MiniportAdapterHandle
);
3760 NdisIMInitializeDeviceInstanceEx(
3761 IN NDIS_HANDLE DriverHandle
,
3762 IN PNDIS_STRING DriverInstance
,
3763 IN NDIS_HANDLE DeviceContext OPTIONAL
);
3768 NdisInterlockedPopEntrySList(
3769 IN PSLIST_HEADER ListHead
,
3770 IN PKSPIN_LOCK Lock
);
3775 NdisInterlockedPushEntrySList(
3776 IN PSLIST_HEADER ListHead
,
3777 IN PSINGLE_LIST_ENTRY ListEntry
,
3778 IN PKSPIN_LOCK Lock
);
3783 NdisQueryBufferSafe(
3784 IN PNDIS_BUFFER Buffer
,
3785 OUT PVOID
*VirtualAddress OPTIONAL
,
3789 /* Prototypes for NDIS_MINIPORT_CHARACTERISTICS */
3791 typedef BOOLEAN DDKAPI
3792 (*W_CHECK_FOR_HANG_HANDLER
)(
3793 IN NDIS_HANDLE MiniportAdapterContext
);
3796 (*W_DISABLE_INTERRUPT_HANDLER
)(
3797 IN NDIS_HANDLE MiniportAdapterContext
);
3800 (*W_ENABLE_INTERRUPT_HANDLER
)(
3801 IN NDIS_HANDLE MiniportAdapterContext
);
3805 IN NDIS_HANDLE MiniportAdapterContext
);
3808 (*W_HANDLE_INTERRUPT_HANDLER
)(
3809 IN NDIS_HANDLE MiniportAdapterContext
);
3811 typedef NDIS_STATUS DDKAPI
3812 (*W_INITIALIZE_HANDLER
)(
3813 OUT PNDIS_STATUS OpenErrorStatus
,
3814 OUT PUINT SelectedMediumIndex
,
3815 IN PNDIS_MEDIUM MediumArray
,
3816 IN UINT MediumArraySize
,
3817 IN NDIS_HANDLE MiniportAdapterContext
,
3818 IN NDIS_HANDLE WrapperConfigurationContext
);
3822 OUT PBOOLEAN InterruptRecognized
,
3823 OUT PBOOLEAN QueueMiniportHandleInterrupt
,
3824 IN NDIS_HANDLE MiniportAdapterContext
);
3826 typedef NDIS_STATUS DDKAPI
3827 (*W_QUERY_INFORMATION_HANDLER
)(
3828 IN NDIS_HANDLE MiniportAdapterContext
,
3830 IN PVOID InformationBuffer
,
3831 IN ULONG InformationBufferLength
,
3832 OUT PULONG BytesWritten
,
3833 OUT PULONG BytesNeeded
);
3835 typedef NDIS_STATUS DDKAPI
3836 (*W_RECONFIGURE_HANDLER
)(
3837 OUT PNDIS_STATUS OpenErrorStatus
,
3838 IN NDIS_HANDLE MiniportAdapterContext
,
3839 IN NDIS_HANDLE WrapperConfigurationContext
);
3841 typedef NDIS_STATUS DDKAPI
3843 OUT PBOOLEAN AddressingReset
,
3844 IN NDIS_HANDLE MiniportAdapterContext
);
3846 typedef NDIS_STATUS DDKAPI
3848 IN NDIS_HANDLE MiniportAdapterContext
,
3849 IN PNDIS_PACKET Packet
,
3852 typedef NDIS_STATUS DDKAPI
3854 IN NDIS_HANDLE MiniportAdapterContext
,
3855 IN NDIS_HANDLE NdisLinkHandle
,
3856 IN PNDIS_WAN_PACKET Packet
);
3858 typedef NDIS_STATUS DDKAPI
3859 (*W_SET_INFORMATION_HANDLER
)(
3860 IN NDIS_HANDLE MiniportAdapterContext
,
3862 IN PVOID InformationBuffer
,
3863 IN ULONG InformationBufferLength
,
3864 OUT PULONG BytesRead
,
3865 OUT PULONG BytesNeeded
);
3867 typedef NDIS_STATUS DDKAPI
3868 (*W_TRANSFER_DATA_HANDLER
)(
3869 OUT PNDIS_PACKET Packet
,
3870 OUT PUINT BytesTransferred
,
3871 IN NDIS_HANDLE MiniportAdapterContext
,
3872 IN NDIS_HANDLE MiniportReceiveContext
,
3874 IN UINT BytesToTransfer
);
3876 typedef NDIS_STATUS DDKAPI
3877 (*WM_TRANSFER_DATA_HANDLER
)(
3881 /* NDIS structures available only to miniport drivers */
3883 #define NDIS30_MINIPORT_CHARACTERISTICS_S \
3884 UCHAR MajorNdisVersion; \
3885 UCHAR MinorNdisVersion; \
3888 W_CHECK_FOR_HANG_HANDLER CheckForHangHandler; \
3889 W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler; \
3890 W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler; \
3891 W_HALT_HANDLER HaltHandler; \
3892 W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler; \
3893 W_INITIALIZE_HANDLER InitializeHandler; \
3894 W_ISR_HANDLER ISRHandler; \
3895 W_QUERY_INFORMATION_HANDLER QueryInformationHandler; \
3896 W_RECONFIGURE_HANDLER ReconfigureHandler; \
3897 W_RESET_HANDLER ResetHandler; \
3898 _ANONYMOUS_UNION union { \
3899 W_SEND_HANDLER SendHandler; \
3900 WM_SEND_HANDLER WanSendHandler; \
3901 } _UNION_NAME(u1); \
3902 W_SET_INFORMATION_HANDLER SetInformationHandler; \
3903 _ANONYMOUS_UNION union { \
3904 W_TRANSFER_DATA_HANDLER TransferDataHandler; \
3905 WM_TRANSFER_DATA_HANDLER WanTransferDataHandler; \
3908 typedef struct _NDIS30_MINIPORT_CHARACTERISTICS
{
3909 NDIS30_MINIPORT_CHARACTERISTICS_S
3910 } NDIS30_MINIPORT_CHARACTERISTICS
, *PSNDIS30_MINIPORT_CHARACTERISTICS
;
3913 /* Extensions for NDIS 4.0 miniports */
3916 (*W_SEND_PACKETS_HANDLER
)(
3917 IN NDIS_HANDLE MiniportAdapterContext
,
3918 IN PPNDIS_PACKET PacketArray
,
3919 IN UINT NumberOfPackets
);
3922 (*W_RETURN_PACKET_HANDLER
)(
3923 IN NDIS_HANDLE MiniportAdapterContext
,
3924 IN PNDIS_PACKET Packet
);
3927 (*W_ALLOCATE_COMPLETE_HANDLER
)(
3928 IN NDIS_HANDLE MiniportAdapterContext
,
3929 IN PVOID VirtualAddress
,
3930 IN PNDIS_PHYSICAL_ADDRESS PhysicalAddress
,
3936 #define NDIS40_MINIPORT_CHARACTERISTICS_S \
3937 NDIS30_MINIPORT_CHARACTERISTICS Ndis30Chars; \
3938 W_RETURN_PACKET_HANDLER ReturnPacketHandler; \
3939 W_SEND_PACKETS_HANDLER SendPacketsHandler; \
3940 W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
3942 #else /* !__cplusplus */
3944 #define NDIS40_MINIPORT_CHARACTERISTICS_S \
3945 NDIS30_MINIPORT_CHARACTERISTICS_S \
3946 W_RETURN_PACKET_HANDLER ReturnPacketHandler; \
3947 W_SEND_PACKETS_HANDLER SendPacketsHandler; \
3948 W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
3950 #endif /* !__cplusplus */
3952 typedef struct _NDIS40_MINIPORT_CHARACTERISTICS
{
3953 NDIS40_MINIPORT_CHARACTERISTICS_S
3954 } NDIS40_MINIPORT_CHARACTERISTICS
, *PNDIS40_MINIPORT_CHARACTERISTICS
;
3957 /* Extensions for NDIS 5.0 miniports */
3959 typedef NDIS_STATUS DDKAPI
3960 (*W_CO_CREATE_VC_HANDLER
)(
3961 IN NDIS_HANDLE MiniportAdapterContext
,
3962 IN NDIS_HANDLE NdisVcHandle
,
3963 OUT PNDIS_HANDLE MiniportVcContext
);
3965 typedef NDIS_STATUS DDKAPI
3966 (*W_CO_DELETE_VC_HANDLER
)(
3967 IN NDIS_HANDLE MiniportVcContext
);
3969 typedef NDIS_STATUS DDKAPI
3970 (*W_CO_ACTIVATE_VC_HANDLER
)(
3971 IN NDIS_HANDLE MiniportVcContext
,
3972 IN OUT PCO_CALL_PARAMETERS CallParameters
);
3974 typedef NDIS_STATUS DDKAPI
3975 (*W_CO_DEACTIVATE_VC_HANDLER
)(
3976 IN NDIS_HANDLE MiniportVcContext
);
3979 (*W_CO_SEND_PACKETS_HANDLER
)(
3980 IN NDIS_HANDLE MiniportVcContext
,
3981 IN PPNDIS_PACKET PacketArray
,
3982 IN UINT NumberOfPackets
);
3984 typedef NDIS_STATUS DDKAPI
3985 (*W_CO_REQUEST_HANDLER
)(
3986 IN NDIS_HANDLE MiniportAdapterContext
,
3987 IN NDIS_HANDLE MiniportVcContext OPTIONAL
,
3988 IN OUT PNDIS_REQUEST NdisRequest
);
3992 #define NDIS50_MINIPORT_CHARACTERISTICS_S \
3993 NDIS40_MINIPORT_CHARACTERISTICS Ndis40Chars; \
3994 W_CO_CREATE_VC_HANDLER CoCreateVcHandler; \
3995 W_CO_DELETE_VC_HANDLER CoDeleteVcHandler; \
3996 W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler; \
3997 W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler; \
3998 W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler; \
3999 W_CO_REQUEST_HANDLER CoRequestHandler;
4001 #else /* !__cplusplus */
4003 #define NDIS50_MINIPORT_CHARACTERISTICS_S \
4004 NDIS40_MINIPORT_CHARACTERISTICS_S \
4005 W_CO_CREATE_VC_HANDLER CoCreateVcHandler; \
4006 W_CO_DELETE_VC_HANDLER CoDeleteVcHandler; \
4007 W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler; \
4008 W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler; \
4009 W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler; \
4010 W_CO_REQUEST_HANDLER CoRequestHandler;
4012 #endif /* !__cplusplus */
4014 typedef struct _NDIS50_MINIPORT_CHARACTERISTICS
{
4015 NDIS50_MINIPORT_CHARACTERISTICS_S
4016 } NDIS50_MINIPORT_CHARACTERISTICS
, *PSNDIS50_MINIPORT_CHARACTERISTICS
;
4019 /* Extensions for NDIS 5.1 miniports */
4022 (*W_CANCEL_SEND_PACKETS_HANDLER
)(
4023 IN NDIS_HANDLE MiniportAdapterContext
,
4027 #if defined(NDIS51_MINIPORT)
4028 typedef struct _NDIS_MINIPORT_CHARACTERISTICS
{
4029 NDIS50_MINIPORT_CHARACTERISTICS_S
4030 } NDIS_MINIPORT_CHARACTERISTICS
, *PNDIS_MINIPORT_CHARACTERISTICS
;
4031 #elif defined(NDIS50_MINIPORT)
4032 typedef struct _NDIS_MINIPORT_CHARACTERISTICS
{
4033 NDIS50_MINIPORT_CHARACTERISTICS_S
4034 } NDIS_MINIPORT_CHARACTERISTICS
, *PNDIS_MINIPORT_CHARACTERISTICS
;
4035 #elif defined(NDIS40_MINIPORT)
4036 typedef struct _NDIS_MINIPORT_CHARACTERISTICS
{
4037 NDIS40_MINIPORT_CHARACTERISTICS_S
4038 } NDIS_MINIPORT_CHARACTERISTICS
, *PNDIS_MINIPORT_CHARACTERISTICS
;
4040 typedef struct _NDIS_MINIPORT_CHARACTERISTICS
{
4041 NDIS30_MINIPORT_CHARACTERISTICS_S
4042 } NDIS_MINIPORT_CHARACTERISTICS
, *PNDIS_MINIPORT_CHARACTERISTICS
;
4046 typedef NDIS_STATUS DDKAPI
4048 IN NDIS_HANDLE MacBindingHandle
,
4049 IN PNDIS_PACKET Packet
);
4051 typedef NDIS_STATUS DDKAPI
4052 (*TRANSFER_DATA_HANDLER
)(
4053 IN NDIS_HANDLE MacBindingHandle
,
4054 IN NDIS_HANDLE MacReceiveContext
,
4056 IN UINT BytesToTransfer
,
4057 OUT PNDIS_PACKET Packet
,
4058 OUT PUINT BytesTransferred
);
4060 typedef NDIS_STATUS DDKAPI
4062 IN NDIS_HANDLE MacBindingHandle
);
4064 typedef NDIS_STATUS DDKAPI
4066 IN NDIS_HANDLE MacBindingHandle
,
4067 IN PNDIS_REQUEST NdisRequest
);
4071 /* Structures available only to full MAC drivers */
4073 typedef BOOLEAN DDKAPI
4074 (*PNDIS_INTERRUPT_SERVICE
)(
4075 IN PVOID InterruptContext
);
4078 (*PNDIS_DEFERRED_PROCESSING
)(
4079 IN PVOID SystemSpecific1
,
4080 IN PVOID InterruptContext
,
4081 IN PVOID SystemSpecific2
,
4082 IN PVOID SystemSpecific3
);
4086 typedef struct _NDIS_MINIPORT_BLOCK NDIS_MINIPORT_BLOCK
, *PNDIS_MINIPORT_BLOCK
;
4087 typedef struct _NDIS_PROTOCOL_BLOCK NDIS_PROTOCOL_BLOCK
, *PNDIS_PROTOCOL_BLOCK
;
4088 typedef struct _NDIS_OPEN_BLOCK NDIS_OPEN_BLOCK
, *PNDIS_OPEN_BLOCK
;
4089 typedef struct _NDIS_M_DRIVER_BLOCK NDIS_M_DRIVER_BLOCK
, *PNDIS_M_DRIVER_BLOCK
;
4090 typedef struct _NDIS_AF_LIST NDIS_AF_LIST
, *PNDIS_AF_LIST
;
4093 typedef struct _NDIS_MINIPORT_INTERRUPT
{
4094 PKINTERRUPT InterruptObject
;
4095 KSPIN_LOCK DpcCountLock
;
4096 PVOID MiniportIdField
;
4097 W_ISR_HANDLER MiniportIsr
;
4098 W_HANDLE_INTERRUPT_HANDLER MiniportDpc
;
4100 PNDIS_MINIPORT_BLOCK Miniport
;
4103 KEVENT DpcsCompletedEvent
;
4104 BOOLEAN SharedInterrupt
;
4105 BOOLEAN IsrRequested
;
4106 } NDIS_MINIPORT_INTERRUPT
, *PNDIS_MINIPORT_INTERRUPT
;
4108 typedef struct _NDIS_MINIPORT_TIMER
{
4111 PNDIS_TIMER_FUNCTION MiniportTimerFunction
;
4112 PVOID MiniportTimerContext
;
4113 PNDIS_MINIPORT_BLOCK Miniport
;
4114 struct _NDIS_MINIPORT_TIMER
*NextDeferredTimer
;
4115 } NDIS_MINIPORT_TIMER
, *PNDIS_MINIPORT_TIMER
;
4117 typedef struct _NDIS_INTERRUPT
{
4118 PKINTERRUPT InterruptObject
;
4119 KSPIN_LOCK DpcCountLock
;
4120 PNDIS_INTERRUPT_SERVICE MacIsr
;
4121 PNDIS_DEFERRED_PROCESSING MacDpc
;
4123 PVOID InterruptContext
;
4126 KEVENT DpcsCompletedEvent
;
4127 } NDIS_INTERRUPT
, *PNDIS_INTERRUPT
;
4130 typedef enum _NDIS_WORK_ITEM_TYPE
{
4131 NdisWorkItemRequest
,
4133 NdisWorkItemReturnPackets
,
4134 NdisWorkItemResetRequested
,
4135 NdisWorkItemResetInProgress
,
4137 NdisWorkItemSendLoopback
,
4138 NdisWorkItemMiniportCallback
,
4140 } NDIS_WORK_ITEM_TYPE
, *PNDIS_WORK_ITEM_TYPE
;
4142 #define NUMBER_OF_WORK_ITEM_TYPES NdisMaxWorkItems
4143 #define NUMBER_OF_SINGLE_WORK_ITEMS 6
4145 typedef struct _NDIS_MINIPORT_WORK_ITEM
{
4146 SINGLE_LIST_ENTRY Link
;
4147 NDIS_WORK_ITEM_TYPE WorkItemType
;
4148 PVOID WorkItemContext
;
4149 } NDIS_MINIPORT_WORK_ITEM
, *PNDIS_MINIPORT_WORK_ITEM
;
4152 typedef struct _NDIS_BIND_PATHS
{
4154 NDIS_STRING Paths
[1];
4155 } NDIS_BIND_PATHS
, *PNDIS_BIND_PATHS
;
4157 #define DECLARE_UNKNOWN_STRUCT(BaseName) \
4158 typedef struct _##BaseName BaseName, *P##BaseName;
4160 #define DECLARE_UNKNOWN_PROTOTYPE(Name) \
4161 typedef VOID (*(Name))(VOID);
4163 #define ETH_LENGTH_OF_ADDRESS 6
4165 DECLARE_UNKNOWN_STRUCT(ETH_BINDING_INFO
)
4167 DECLARE_UNKNOWN_PROTOTYPE(ETH_ADDRESS_CHANGE
)
4168 DECLARE_UNKNOWN_PROTOTYPE(ETH_FILTER_CHANGE
)
4169 DECLARE_UNKNOWN_PROTOTYPE(ETH_DEFERRED_CLOSE
)
4171 typedef struct _ETH_FILTER
{
4172 PNDIS_SPIN_LOCK Lock
;
4173 CHAR (*MCastAddressBuf
)[ETH_LENGTH_OF_ADDRESS
];
4174 struct _NDIS_MINIPORT_BLOCK
*Miniport
;
4175 UINT CombinedPacketFilter
;
4176 PETH_BINDING_INFO OpenList
;
4177 ETH_ADDRESS_CHANGE AddressChangeAction
;
4178 ETH_FILTER_CHANGE FilterChangeAction
;
4179 ETH_DEFERRED_CLOSE CloseAction
;
4180 UINT MaxMulticastAddresses
;
4182 UCHAR AdapterAddress
[ETH_LENGTH_OF_ADDRESS
];
4183 UINT OldCombinedPacketFilter
;
4184 CHAR (*OldMCastAddressBuf
)[ETH_LENGTH_OF_ADDRESS
];
4185 UINT OldNumAddresses
;
4186 PETH_BINDING_INFO DirectedList
;
4187 PETH_BINDING_INFO BMList
;
4188 PETH_BINDING_INFO MCastSet
;
4189 #if defined(NDIS_WRAPPER)
4193 } ETH_FILTER
, *PETH_FILTER
;
4196 (*ETH_RCV_COMPLETE_HANDLER
)(
4197 IN PETH_FILTER Filter
);
4200 (*ETH_RCV_INDICATE_HANDLER
)(
4201 IN PETH_FILTER Filter
,
4202 IN NDIS_HANDLE MacReceiveContext
,
4204 IN PVOID HeaderBuffer
,
4205 IN UINT HeaderBufferSize
,
4206 IN PVOID LookaheadBuffer
,
4207 IN UINT LookaheadBufferSize
,
4208 IN UINT PacketSize
);
4211 (*FDDI_RCV_COMPLETE_HANDLER
)(
4212 IN PFDDI_FILTER Filter
);
4215 (*FDDI_RCV_INDICATE_HANDLER
)(
4216 IN PFDDI_FILTER Filter
,
4217 IN NDIS_HANDLE MacReceiveContext
,
4219 IN UINT AddressLength
,
4220 IN PVOID HeaderBuffer
,
4221 IN UINT HeaderBufferSize
,
4222 IN PVOID LookaheadBuffer
,
4223 IN UINT LookaheadBufferSize
,
4224 IN UINT PacketSize
);
4227 (*FILTER_PACKET_INDICATION_HANDLER
)(
4228 IN NDIS_HANDLE Miniport
,
4229 IN PPNDIS_PACKET PacketArray
,
4230 IN UINT NumberOfPackets
);
4233 (*TR_RCV_COMPLETE_HANDLER
)(
4234 IN PTR_FILTER Filter
);
4237 (*TR_RCV_INDICATE_HANDLER
)(
4238 IN PTR_FILTER Filter
,
4239 IN NDIS_HANDLE MacReceiveContext
,
4240 IN PVOID HeaderBuffer
,
4241 IN UINT HeaderBufferSize
,
4242 IN PVOID LookaheadBuffer
,
4243 IN UINT LookaheadBufferSize
,
4244 IN UINT PacketSize
);
4247 (*WAN_RCV_COMPLETE_HANDLER
)(
4248 IN NDIS_HANDLE MiniportAdapterHandle
,
4249 IN NDIS_HANDLE NdisLinkContext
);
4253 OUT PNDIS_STATUS Status
,
4254 IN NDIS_HANDLE MiniportAdapterHandle
,
4255 IN NDIS_HANDLE NdisLinkContext
,
4257 IN ULONG PacketSize
);
4259 typedef VOID FASTCALL
4260 (*NDIS_M_DEQUEUE_WORK_ITEM
)(
4261 IN PNDIS_MINIPORT_BLOCK Miniport
,
4262 IN NDIS_WORK_ITEM_TYPE WorkItemType
,
4263 OUT PVOID
*WorkItemContext
);
4265 typedef NDIS_STATUS FASTCALL
4266 (*NDIS_M_QUEUE_NEW_WORK_ITEM
)(
4267 IN PNDIS_MINIPORT_BLOCK Miniport
,
4268 IN NDIS_WORK_ITEM_TYPE WorkItemType
,
4269 IN PVOID WorkItemContext
);
4271 typedef NDIS_STATUS FASTCALL
4272 (*NDIS_M_QUEUE_WORK_ITEM
)(
4273 IN PNDIS_MINIPORT_BLOCK Miniport
,
4274 IN NDIS_WORK_ITEM_TYPE WorkItemType
,
4275 IN PVOID WorkItemContext
);
4278 (*NDIS_M_REQ_COMPLETE_HANDLER
)(
4279 IN NDIS_HANDLE MiniportAdapterHandle
,
4280 IN NDIS_STATUS Status
);
4283 (*NDIS_M_RESET_COMPLETE_HANDLER
)(
4284 IN NDIS_HANDLE MiniportAdapterHandle
,
4285 IN NDIS_STATUS Status
,
4286 IN BOOLEAN AddressingReset
);
4289 (*NDIS_M_SEND_COMPLETE_HANDLER
)(
4290 IN NDIS_HANDLE MiniportAdapterHandle
,
4291 IN PNDIS_PACKET Packet
,
4292 IN NDIS_STATUS Status
);
4295 (*NDIS_M_SEND_RESOURCES_HANDLER
)(
4296 IN NDIS_HANDLE MiniportAdapterHandle
);
4298 typedef BOOLEAN FASTCALL
4299 (*NDIS_M_START_SENDS
)(
4300 IN PNDIS_MINIPORT_BLOCK Miniport
);
4303 (*NDIS_M_STATUS_HANDLER
)(
4304 IN NDIS_HANDLE MiniportHandle
,
4305 IN NDIS_STATUS GeneralStatus
,
4306 IN PVOID StatusBuffer
,
4307 IN UINT StatusBufferSize
);
4310 (*NDIS_M_STS_COMPLETE_HANDLER
)(
4311 IN NDIS_HANDLE MiniportAdapterHandle
);
4314 (*NDIS_M_TD_COMPLETE_HANDLER
)(
4315 IN NDIS_HANDLE MiniportAdapterHandle
,
4316 IN PNDIS_PACKET Packet
,
4317 IN NDIS_STATUS Status
,
4318 IN UINT BytesTransferred
);
4320 typedef VOID (DDKAPI
*NDIS_WM_SEND_COMPLETE_HANDLER
)(
4321 IN NDIS_HANDLE MiniportAdapterHandle
,
4323 IN NDIS_STATUS Status
);
4328 #define ARC_SEND_BUFFERS 8
4329 #define ARC_HEADER_SIZE 4
4331 typedef struct _NDIS_ARC_BUF
{
4332 NDIS_HANDLE ArcnetBufferPool
;
4333 PUCHAR ArcnetLookaheadBuffer
;
4335 ARC_BUFFER_LIST ArcnetBuffers
[ARC_SEND_BUFFERS
];
4336 } NDIS_ARC_BUF
, *PNDIS_ARC_BUF
;
4340 typedef struct _NDIS_LOG
{
4341 PNDIS_MINIPORT_BLOCK Miniport
;
4349 } NDIS_LOG
, *PNDIS_LOG
;
4352 #define FILTERDBS_ARCNET_S \
4355 #define FILTERDBS_ARCNET_S \
4357 #endif /* !ARCNET */
4359 #define FILTERDBS_S \
4360 _ANONYMOUS_UNION union { \
4361 PETH_FILTER EthDB; \
4362 PNULL_FILTER NullDB; \
4365 PFDDI_FILTER FddiDB; \
4368 typedef struct _FILTERDBS
{
4370 } FILTERDBS
, *PFILTERDBS
;
4373 struct _NDIS_MINIPORT_BLOCK
{
4375 PNDIS_MINIPORT_BLOCK NextMiniport
;
4376 PNDIS_M_DRIVER_BLOCK DriverHandle
;
4377 NDIS_HANDLE MiniportAdapterContext
;
4378 UNICODE_STRING MiniportName
;
4379 PNDIS_BIND_PATHS BindPaths
;
4380 NDIS_HANDLE OpenQueue
;
4382 NDIS_HANDLE DeviceContext
;
4386 UCHAR AssignedProcessor
;
4388 PNDIS_REQUEST MediaRequest
;
4389 PNDIS_MINIPORT_INTERRUPT Interrupt
;
4392 LIST_ENTRY PacketList
;
4393 PNDIS_PACKET FirstPendingPacket
;
4394 PNDIS_PACKET ReturnPacketsQueue
;
4395 ULONG RequestBuffer
;
4396 PVOID SetMCastBuffer
;
4397 PNDIS_MINIPORT_BLOCK PrimaryMiniport
;
4398 PVOID WrapperContext
;
4399 PVOID BusDataContext
;
4400 ULONG PnPCapabilities
;
4401 PCM_RESOURCE_LIST Resources
;
4402 NDIS_TIMER WakeUpDpcTimer
;
4403 UNICODE_STRING BaseName
;
4404 UNICODE_STRING SymbolicLinkName
;
4405 ULONG CheckForHangSeconds
;
4407 USHORT CFHangCurrentTick
;
4408 NDIS_STATUS ResetStatus
;
4409 NDIS_HANDLE ResetOpen
;
4411 FILTER_PACKET_INDICATION_HANDLER PacketIndicateHandler
;
4412 NDIS_M_SEND_COMPLETE_HANDLER SendCompleteHandler
;
4413 NDIS_M_SEND_RESOURCES_HANDLER SendResourcesHandler
;
4414 NDIS_M_RESET_COMPLETE_HANDLER ResetCompleteHandler
;
4415 NDIS_MEDIUM MediaType
;
4417 NDIS_INTERFACE_TYPE BusType
;
4418 NDIS_INTERFACE_TYPE AdapterType
;
4419 PDEVICE_OBJECT DeviceObject
;
4420 PDEVICE_OBJECT PhysicalDeviceObject
;
4421 PDEVICE_OBJECT NextDeviceObject
;
4422 PMAP_REGISTER_ENTRY MapRegisters
;
4423 PNDIS_AF_LIST CallMgrAfList
;
4424 PVOID MiniportThread
;
4426 USHORT SetInfoBufLen
;
4427 USHORT MaxSendPackets
;
4428 NDIS_STATUS FakeStatus
;
4430 PUNICODE_STRING pAdapterInstanceName
;
4431 PNDIS_MINIPORT_TIMER TimerQueue
;
4433 PNDIS_REQUEST PendingRequest
;
4434 UINT MaximumLongAddresses
;
4435 UINT MaximumShortAddresses
;
4436 UINT CurrentLookahead
;
4437 UINT MaximumLookahead
;
4438 W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler
;
4439 W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler
;
4440 W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler
;
4441 W_SEND_PACKETS_HANDLER SendPacketsHandler
;
4442 NDIS_M_START_SENDS DeferredSendHandler
;
4443 ETH_RCV_INDICATE_HANDLER EthRxIndicateHandler
;
4444 TR_RCV_INDICATE_HANDLER TrRxIndicateHandler
;
4445 FDDI_RCV_INDICATE_HANDLER FddiRxIndicateHandler
;
4446 ETH_RCV_COMPLETE_HANDLER EthRxCompleteHandler
;
4447 TR_RCV_COMPLETE_HANDLER TrRxCompleteHandler
;
4448 FDDI_RCV_COMPLETE_HANDLER FddiRxCompleteHandler
;
4449 NDIS_M_STATUS_HANDLER StatusHandler
;
4450 NDIS_M_STS_COMPLETE_HANDLER StatusCompleteHandler
;
4451 NDIS_M_TD_COMPLETE_HANDLER TDCompleteHandler
;
4452 NDIS_M_REQ_COMPLETE_HANDLER QueryCompleteHandler
;
4453 NDIS_M_REQ_COMPLETE_HANDLER SetCompleteHandler
;
4454 NDIS_WM_SEND_COMPLETE_HANDLER WanSendCompleteHandler
;
4455 WAN_RCV_HANDLER WanRcvHandler
;
4456 WAN_RCV_COMPLETE_HANDLER WanRcvCompleteHandler
;
4457 #if defined(NDIS_WRAPPER)
4458 PNDIS_MINIPORT_BLOCK NextGlobalMiniport
;
4459 SINGLE_LIST_ENTRY WorkQueue
[NUMBER_OF_WORK_ITEM_TYPES
];
4460 SINGLE_LIST_ENTRY SingleWorkItems
[NUMBER_OF_SINGLE_WORK_ITEMS
];
4463 UCHAR ArcnetAddress
;
4465 _ANONYMOUS_UNION
union {
4467 PNDIS_ARC_BUF ArcBuf
;
4473 PCM_RESOURCE_LIST AllocatedResources
;
4474 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
4475 SINGLE_LIST_ENTRY PatternList
;
4476 NDIS_PNP_CAPABILITIES PMCapabilities
;
4477 DEVICE_CAPABILITIES DeviceCaps
;
4479 DEVICE_POWER_STATE CurrentDevicePowerState
;
4481 SYSTEM_POWER_STATE WaitWakeSystemState
;
4482 LARGE_INTEGER VcIndex
;
4483 KSPIN_LOCK VcCountLock
;
4484 LIST_ENTRY WmiEnabledVcs
;
4485 PNDIS_GUID pNdisGuidMap
;
4486 PNDIS_GUID pCustomGuidMap
;
4488 USHORT cNdisGuidMap
;
4489 USHORT cCustomGuidMap
;
4490 USHORT CurrentMapRegister
;
4491 PKEVENT AllocationEvent
;
4492 USHORT BaseMapRegistersNeeded
;
4493 USHORT SGMapRegistersNeeded
;
4494 ULONG MaximumPhysicalMapping
;
4495 NDIS_TIMER MediaDisconnectTimer
;
4496 USHORT MediaDisconnectTimeOut
;
4497 USHORT InstanceNumber
;
4498 NDIS_EVENT OpenReadyEvent
;
4499 NDIS_PNP_DEVICE_STATE PnPDeviceState
;
4500 NDIS_PNP_DEVICE_STATE OldPnPDeviceState
;
4501 PGET_SET_DEVICE_DATA SetBusData
;
4502 PGET_SET_DEVICE_DATA GetBusData
;
4506 NDIS_STATS NdisStats
;
4510 PNDIS_PACKET IndicatedPacket
[MAXIMUM_PROCESSORS
];
4511 PKEVENT RemoveReadyEvent
;
4512 PKEVENT AllOpensClosedEvent
;
4513 PKEVENT AllRequestsCompletedEvent
;
4515 NDIS_MINIPORT_WORK_ITEM WorkItemBuffer
[NUMBER_OF_SINGLE_WORK_ITEMS
];
4516 PDMA_ADAPTER SystemAdapterObject
;
4517 ULONG DriverVerifyFlags
;
4519 USHORT InternalResetCount
;
4520 USHORT MiniportResetCount
;
4521 USHORT MediaSenseConnectCount
;
4522 USHORT MediaSenseDisconnectCount
;
4523 PNDIS_PACKET
*xPackets
;
4524 ULONG UserModeOpenReferences
;
4525 _ANONYMOUS_UNION
union {
4526 PVOID SavedSendHandler
;
4527 PVOID SavedWanSendHandler
;
4529 PVOID SavedSendPacketsHandler
;
4530 PVOID SavedCancelSendPacketsHandler
;
4531 W_SEND_PACKETS_HANDLER WSendPacketsHandler
;
4532 ULONG MiniportAttributes
;
4533 PDMA_ADAPTER SavedSystemAdapterObject
;
4535 USHORT CFHangXTicks
;
4537 ULONG IndicatedPacketsCount
;
4538 ULONG PhysicalMediumType
;
4539 PNDIS_REQUEST LastRequest
;
4540 LONG DmaAdapterRefCount
;
4546 KSPIN_LOCK TimerQueueLock
;
4547 PKEVENT ResetCompletedEvent
;
4548 PKEVENT QueuedBindingCompletedEvent
;
4549 PKEVENT DmaResourcesReleasedEvent
;
4550 FILTER_PACKET_INDICATION_HANDLER SavedPacketIndicateHandler
;
4551 ULONG RegisteredInterrupts
;
4552 PNPAGED_LOOKASIDE_LIST SGListLookasideList
;
4553 ULONG ScatterGatherListSize
;
4558 /* Handler prototypes for NDIS_OPEN_BLOCK */
4560 typedef NDIS_STATUS (DDKAPI
*WAN_SEND_HANDLER
)(
4561 IN NDIS_HANDLE MacBindingHandle
,
4562 IN NDIS_HANDLE LinkHandle
,
4565 /* NDIS 4.0 extension */
4567 typedef VOID (DDKAPI
*SEND_PACKETS_HANDLER
)(
4568 IN NDIS_HANDLE MiniportAdapterContext
,
4569 IN PPNDIS_PACKET PacketArray
,
4570 IN UINT NumberOfPackets
);
4572 #if defined(NDIS_WRAPPER)
4573 #define NDIS_COMMON_OPEN_BLOCK_WRAPPER_S \
4576 KSPIN_LOCK SpinLock; \
4577 NDIS_HANDLE FilterHandle; \
4578 ULONG ProtocolOptions; \
4579 USHORT CurrentLookahead; \
4580 USHORT ConnectDampTicks; \
4581 USHORT DisconnectDampTicks; \
4582 W_SEND_HANDLER WSendHandler; \
4583 W_TRANSFER_DATA_HANDLER WTransferDataHandler; \
4584 W_SEND_PACKETS_HANDLER WSendPacketsHandler; \
4585 W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler; \
4586 ULONG WakeUpEnable; \
4587 PKEVENT CloseCompleteEvent; \
4589 ULONG AfReferences; \
4590 PNDIS_OPEN_BLOCK NextGlobalOpen;
4592 #define NDIS_COMMON_OPEN_BLOCK_WRAPPER_S
4595 #define NDIS_COMMON_OPEN_BLOCK_S \
4597 NDIS_HANDLE BindingHandle; \
4598 PNDIS_MINIPORT_BLOCK MiniportHandle; \
4599 PNDIS_PROTOCOL_BLOCK ProtocolHandle; \
4600 NDIS_HANDLE ProtocolBindingContext
; \
4601 PNDIS_OPEN_BLOCK MiniportNextOpen
; \
4602 PNDIS_OPEN_BLOCK ProtocolNextOpen
; \
4603 NDIS_HANDLE MiniportAdapterContext
; \
4604 BOOLEAN Reserved1
; \
4605 BOOLEAN Reserved2
; \
4606 BOOLEAN Reserved3
; \
4607 BOOLEAN Reserved4
; \
4608 PNDIS_STRING BindDeviceName
; \
4609 KSPIN_LOCK Reserved5
; \
4610 PNDIS_STRING RootDeviceName
; \
4611 _ANONYMOUS_UNION
union { \
4612 SEND_HANDLER SendHandler
; \
4613 WAN_SEND_HANDLER WanSendHandler
; \
4615 TRANSFER_DATA_HANDLER TransferDataHandler
; \
4616 SEND_COMPLETE_HANDLER SendCompleteHandler
; \
4617 TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler
; \
4618 RECEIVE_HANDLER ReceiveHandler
; \
4619 RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler
; \
4620 WAN_RECEIVE_HANDLER WanReceiveHandler
; \
4621 REQUEST_COMPLETE_HANDLER RequestCompleteHandler
; \
4622 RECEIVE_PACKET_HANDLER ReceivePacketHandler
; \
4623 SEND_PACKETS_HANDLER SendPacketsHandler
; \
4624 RESET_HANDLER ResetHandler
; \
4625 REQUEST_HANDLER RequestHandler
; \
4626 RESET_COMPLETE_HANDLER ResetCompleteHandler
; \
4627 STATUS_HANDLER StatusHandler
; \
4628 STATUS_COMPLETE_HANDLER StatusCompleteHandler
; \
4629 NDIS_COMMON_OPEN_BLOCK_WRAPPER_S
4631 typedef struct _NDIS_COMMON_OPEN_BLOCK
{
4632 NDIS_COMMON_OPEN_BLOCK_S
4633 } NDIS_COMMON_OPEN_BLOCK
;
4635 struct _NDIS_OPEN_BLOCK
4638 NDIS_COMMON_OPEN_BLOCK NdisCommonOpenBlock
;
4640 NDIS_COMMON_OPEN_BLOCK_S
4642 #if defined(NDIS_WRAPPER)
4643 struct _NDIS_OPEN_CO
4645 struct _NDIS_CO_AF_BLOCK
* NextAf
;
4646 W_CO_CREATE_VC_HANDLER MiniportCoCreateVcHandler
;
4647 W_CO_REQUEST_HANDLER MiniportCoRequestHandler
;
4648 CO_CREATE_VC_HANDLER CoCreateVcHandler
;
4649 CO_DELETE_VC_HANDLER CoDeleteVcHandler
;
4650 PVOID CmActivateVcCompleteHandler
;
4651 PVOID CmDeactivateVcCompleteHandler
;
4652 PVOID CoRequestCompleteHandler
;
4653 LIST_ENTRY ActiveVcHead
;
4654 LIST_ENTRY InactiveVcHead
;
4655 LONG PendingAfNotifications
;
4656 PKEVENT AfNotifyCompleteEvent
;
4663 /* Routines for NDIS miniport drivers */
4668 NdisInitializeWrapper(
4669 OUT PNDIS_HANDLE NdisWrapperHandle
,
4670 IN PVOID SystemSpecific1
,
4671 IN PVOID SystemSpecific2
,
4672 IN PVOID SystemSpecific3
);
4677 NdisMAllocateMapRegisters(
4678 IN NDIS_HANDLE MiniportAdapterHandle
,
4680 IN NDIS_DMA_SIZE DmaSize
,
4681 IN ULONG PhysicalMapRegistersNeeded
,
4682 IN ULONG MaximumPhysicalMapping
);
4686 * NdisMArcIndicateReceive(
4687 * IN NDIS_HANDLE MiniportAdapterHandle,
4688 * IN PUCHAR HeaderBuffer,
4689 * IN PUCHAR DataBuffer,
4692 #define NdisMArcIndicateReceive(MiniportAdapterHandle, \
4697 ArcFilterDprIndicateReceive( \
4698 (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->ArcDB), \
4706 * NdisMArcIndicateReceiveComplete(
4707 * IN NDIS_HANDLE MiniportAdapterHandle);
4709 #define NdisMArcIndicateReceiveComplete(MiniportAdapterHandle) \
4711 if (((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->EthDB) \
4713 NdisMEthIndicateReceiveComplete(_H); \
4716 ArcFilterDprIndicateReceiveComplete( \
4717 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->ArcDB); \
4724 IN NDIS_HANDLE LogHandle
);
4730 IN NDIS_HANDLE MiniportAdapterHandle
,
4732 OUT PNDIS_HANDLE LogHandle
);
4737 NdisMDeregisterAdapterShutdownHandler(
4738 IN NDIS_HANDLE MiniportHandle
);
4743 NdisMDeregisterInterrupt(
4744 IN PNDIS_MINIPORT_INTERRUPT Interrupt
);
4749 NdisMDeregisterIoPortRange(
4750 IN NDIS_HANDLE MiniportAdapterHandle
,
4751 IN UINT InitialPort
,
4752 IN UINT NumberOfPorts
,
4753 IN PVOID PortOffset
);
4757 * NdisMEthIndicateReceive(
4758 * IN NDIS_HANDLE MiniportAdapterHandle,
4759 * IN NDIS_HANDLE MiniportReceiveContext,
4760 * IN PVOID HeaderBuffer,
4761 * IN UINT HeaderBufferSize,
4762 * IN PVOID LookaheadBuffer,
4763 * IN UINT LookaheadBufferSize,
4764 * IN UINT PacketSize);
4766 #define NdisMEthIndicateReceive(MiniportAdapterHandle, \
4767 MiniportReceiveContext, \
4771 LookaheadBufferSize, \
4774 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxIndicateHandler)( \
4775 ((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthDB, \
4776 (MiniportReceiveContext), \
4779 (HeaderBufferSize), \
4780 (LookaheadBuffer), \
4781 (LookaheadBufferSize), \
4787 * NdisMEthIndicateReceiveComplete(
4788 * IN NDIS_HANDLE MiniportAdapterHandle);
4790 #define NdisMEthIndicateReceiveComplete(MiniportAdapterHandle) \
4792 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxCompleteHandler)( \
4793 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->EthDB); \
4798 * NdisMFddiIndicateReceive(
4799 * IN NDIS_HANDLE MiniportAdapterHandle,
4800 * IN NDIS_HANDLE MiniportReceiveContext,
4801 * IN PVOID HeaderBuffer,
4802 * IN UINT HeaderBufferSize,
4803 * IN PVOID LookaheadBuffer,
4804 * IN UINT LookaheadBufferSize,
4805 * IN UINT PacketSize);
4807 #define NdisMFddiIndicateReceive(MiniportAdapterHandle, \
4808 MiniportReceiveContext, \
4812 LookaheadBufferSize, \
4815 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxIndicateHandler)( \
4816 (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiDB), \
4817 (MiniportReceiveContext), \
4818 (PUCHAR)(HeaderBuffer) + 1, \
4819 (((*(PUCHAR*)(HeaderBuffer)) & 0x40) ? \
4820 FDDI_LENGTH_OF_LONG_ADDRESS : \
4821 FDDI_LENGTH_OF_SHORT_ADDRESS), \
4823 (HeaderBufferSize), \
4824 (LookaheadBuffer), \
4825 (LookaheadBufferSize), \
4833 * NdisMFddiIndicateReceiveComplete(
4834 * IN NDIS_HANDLE MiniportAdapterHandle);
4836 #define NdisMFddiIndicateReceiveComplete(MiniportAdapterHandle) \
4838 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxCompleteHandler)( \
4839 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FddiDB); \
4846 IN NDIS_HANDLE LogHandle
);
4851 NdisMFreeMapRegisters(
4852 IN NDIS_HANDLE MiniportAdapterHandle
);
4856 * NdisMIndicateStatus(
4857 * IN NDIS_HANDLE MiniportAdapterHandle,
4858 * IN NDIS_STATUS GeneralStatus,
4859 * IN PVOID StatusBuffer,
4860 * IN UINT StatusBufferSize);
4863 #define NdisMIndicateStatus(MiniportAdapterHandle, \
4864 GeneralStatus, StatusBuffer, StatusBufferSize) \
4865 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->StatusHandler)( \
4866 MiniportAdapterHandle, GeneralStatus, StatusBuffer, StatusBufferSize)
4870 * NdisMIndicateStatusComplete(
4871 * IN NDIS_HANDLE MiniportAdapterHandle);
4873 #define NdisMIndicateStatusComplete(MiniportAdapterHandle) \
4874 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->StatusCompleteHandler)( \
4875 MiniportAdapterHandle)
4879 * NdisMInitializeWrapper(
4880 * OUT PNDIS_HANDLE NdisWrapperHandle,
4881 * IN PVOID SystemSpecific1,
4882 * IN PVOID SystemSpecific2,
4883 * IN PVOID SystemSpecific3);
4885 #define NdisMInitializeWrapper(NdisWrapperHandle, \
4889 NdisInitializeWrapper((NdisWrapperHandle), \
4890 (SystemSpecific1), \
4891 (SystemSpecific2), \
4898 OUT PVOID
*VirtualAddress
,
4899 IN NDIS_HANDLE MiniportAdapterHandle
,
4900 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress
,
4905 * NdisMQueryInformationComplete(
4906 * IN NDIS_HANDLE MiniportAdapterHandle,
4907 * IN NDIS_STATUS Status);
4909 #define NdisMQueryInformationComplete(MiniportAdapterHandle, Status) \
4910 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->QueryCompleteHandler)(MiniportAdapterHandle, Status)
4915 NdisMRegisterAdapterShutdownHandler(
4916 IN NDIS_HANDLE MiniportHandle
,
4917 IN PVOID ShutdownContext
,
4918 IN ADAPTER_SHUTDOWN_HANDLER ShutdownHandler
);
4923 NdisMRegisterInterrupt(
4924 OUT PNDIS_MINIPORT_INTERRUPT Interrupt
,
4925 IN NDIS_HANDLE MiniportAdapterHandle
,
4926 IN UINT InterruptVector
,
4927 IN UINT InterruptLevel
,
4928 IN BOOLEAN RequestIsr
,
4929 IN BOOLEAN SharedInterrupt
,
4930 IN NDIS_INTERRUPT_MODE InterruptMode
);
4935 NdisMRegisterIoPortRange(
4936 OUT PVOID
*PortOffset
,
4937 IN NDIS_HANDLE MiniportAdapterHandle
,
4938 IN UINT InitialPort
,
4939 IN UINT NumberOfPorts
);
4944 NdisMRegisterMiniport(
4945 IN NDIS_HANDLE NdisWrapperHandle
,
4946 IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics
,
4947 IN UINT CharacteristicsLength
);
4953 IN PNDIS_MINIPORT_TIMER Timer
,
4954 IN UINT MillisecondsToDelay
);
4959 NdisMInitializeTimer(
4960 IN OUT PNDIS_MINIPORT_TIMER Timer
,
4961 IN NDIS_HANDLE MiniportAdapterHandle
,
4962 IN PNDIS_TIMER_FUNCTION TimerFunction
,
4963 IN PVOID FunctionContext
);
4968 NdisMSetPeriodicTimer(
4969 IN PNDIS_MINIPORT_TIMER Timer
,
4970 IN UINT MillisecondPeriod
);
4976 IN PNDIS_MINIPORT_TIMER Timer
,
4977 OUT PBOOLEAN TimerCancelled
);
4979 #if !defined(NDIS_WRAPPER)
4983 * NdisMResetComplete(
4984 * IN NDIS_HANDLE MiniportAdapterHandle,
4985 * IN NDIS_STATUS Status,
4986 * IN BOOLEAN AddressingReset);
4988 #define NdisMResetComplete(MiniportAdapterHandle, \
4992 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->ResetCompleteHandler)( \
4993 MiniportAdapterHandle, Status, AddressingReset); \
4998 * NdisMSendComplete(
4999 * IN NDIS_HANDLE MiniportAdapterHandle,
5000 * IN PNDIS_PACKET Packet,
5001 * IN NDIS_STATUS Status);
5003 #define NdisMSendComplete(MiniportAdapterHandle, \
5007 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendCompleteHandler)( \
5008 MiniportAdapterHandle, Packet, Status); \
5013 * NdisMSendResourcesAvailable(
5014 * IN NDIS_HANDLE MiniportAdapterHandle);
5016 #define NdisMSendResourcesAvailable(MiniportAdapterHandle) \
5018 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendResourcesHandler)( \
5019 MiniportAdapterHandle); \
5024 * NdisMTransferDataComplete(
5025 * IN NDIS_HANDLE MiniportAdapterHandle,
5026 * IN PNDIS_PACKET Packet,
5027 * IN NDIS_STATUS Status,
5028 * IN UINT BytesTransferred);
5030 #define NdisMTransferDataComplete(MiniportAdapterHandle, \
5035 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TDCompleteHandler)( \
5036 MiniportAdapterHandle, Packet, Status, BytesTransferred) \
5039 #endif /* !_NDIS_ */
5044 * NdisMSetAttributes(
5045 * IN NDIS_HANDLE MiniportAdapterHandle,
5046 * IN NDIS_HANDLE MiniportAdapterContext,
5047 * IN BOOLEAN BusMaster,
5048 * IN NDIS_INTERFACE_TYPE AdapterType);
5050 #define NdisMSetAttributes(MiniportAdapterHandle, \
5051 MiniportAdapterContext, \
5054 NdisMSetAttributesEx(MiniportAdapterHandle, \
5055 MiniportAdapterContext, \
5057 (BusMaster) ? NDIS_ATTRIBUTE_BUS_MASTER : 0, \
5063 NdisMSetAttributesEx(
5064 IN NDIS_HANDLE MiniportAdapterHandle
,
5065 IN NDIS_HANDLE MiniportAdapterContext
,
5066 IN UINT CheckForHangTimeInSeconds OPTIONAL
,
5067 IN ULONG AttributeFlags
,
5068 IN NDIS_INTERFACE_TYPE AdapterType
);
5072 * NdisMSetInformationComplete(
5073 * IN NDIS_HANDLE MiniportAdapterHandle,
5074 * IN NDIS_STATUS Status);
5076 #define NdisMSetInformationComplete(MiniportAdapterHandle, \
5078 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SetCompleteHandler)( \
5079 MiniportAdapterHandle, Status)
5085 IN ULONG MicrosecondsToSleep
);
5090 NdisMSynchronizeWithInterrupt(
5091 IN PNDIS_MINIPORT_INTERRUPT Interrupt
,
5092 IN PVOID SynchronizeFunction
,
5093 IN PVOID SynchronizeContext
);
5097 * NdisMTrIndicateReceive(
5098 * IN NDIS_HANDLE MiniportAdapterHandle,
5099 * IN NDIS_HANDLE MiniportReceiveContext,
5100 * IN PVOID HeaderBuffer,
5101 * IN UINT HeaderBufferSize,
5102 * IN PVOID LookaheadBuffer,
5103 * IN UINT LookaheadBufferSize,
5104 * IN UINT PacketSize);
5106 #define NdisMTrIndicateReceive(MiniportAdapterHandle, \
5107 MiniportReceiveContext, \
5111 LookaheadBufferSize, \
5114 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxIndicateHandler)( \
5115 (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrDB), \
5116 (MiniportReceiveContext), \
5119 (HeaderBufferSize), \
5120 (LookaheadBuffer), \
5121 (LookaheadBufferSize), \
5127 * NdisMTrIndicateReceiveComplete(
5128 * IN NDIS_HANDLE MiniportAdapterHandle);
5130 #define NdisMTrIndicateReceiveComplete(MiniportAdapterHandle) \
5132 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxCompleteHandler)( \
5133 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->TrDB); \
5140 IN NDIS_HANDLE LogHandle
,
5142 IN UINT LogBufferSize
);
5147 NdisMQueryAdapterResources(
5148 OUT PNDIS_STATUS Status
,
5149 IN NDIS_HANDLE WrapperConfigurationContext
,
5150 OUT PNDIS_RESOURCE_LIST ResourceList
,
5151 IN OUT PUINT BufferSize
);
5156 NdisTerminateWrapper(
5157 IN NDIS_HANDLE NdisWrapperHandle
,
5158 IN PVOID SystemSpecific
);
5164 IN NDIS_HANDLE MiniportAdapterHandle
,
5165 IN PVOID VirtualAddress
,
5170 /* Event functions */
5175 NdisInitializeEvent(
5176 IN PNDIS_EVENT Event
);
5182 IN PNDIS_EVENT Event
);
5188 IN PNDIS_EVENT Event
);
5194 IN PNDIS_EVENT Event
,
5199 /* NDIS intermediate miniport structures */
5201 typedef VOID (DDKAPI
*W_MINIPORT_CALLBACK
)(
5202 IN NDIS_HANDLE MiniportAdapterContext
,
5203 IN PVOID CallbackContext
);
5207 /* Routines for intermediate miniport drivers */
5212 NdisIMDeInitializeDeviceInstance(
5213 IN NDIS_HANDLE NdisMiniportHandle
);
5217 * NdisIMInitializeDeviceInstance(
5218 * IN NDIS_HANDLE DriverHandle,
5219 * IN PNDIS_STRING DeviceInstance);
5221 #define NdisIMInitializeDeviceInstance(DriverHandle, DeviceInstance) \
5222 NdisIMInitializeDeviceInstanceEx(DriverHandle, DeviceInstance, NULL)
5227 NdisIMRegisterLayeredMiniport(
5228 IN NDIS_HANDLE NdisWrapperHandle
,
5229 IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics
,
5230 IN UINT CharacteristicsLength
,
5231 OUT PNDIS_HANDLE DriverHandle
);
5234 /* Functions obsoleted by NDIS 5.0 */
5240 IN PNDIS_HANDLE NdisDmaHandle
);
5245 NdisSetupDmaTransfer(
5246 OUT PNDIS_STATUS Status
,
5247 IN PNDIS_HANDLE NdisDmaHandle
,
5248 IN PNDIS_BUFFER Buffer
,
5251 IN BOOLEAN WriteToDevice
);
5256 NdisUpcaseUnicodeString(
5257 OUT PUNICODE_STRING DestinationString
,
5258 IN PUNICODE_STRING SourceString
);
5261 /* Routines for NDIS protocol drivers */
5267 OUT PNDIS_STATUS Status
,
5268 IN NDIS_HANDLE NdisBindingHandle
,
5269 IN PNDIS_REQUEST NdisRequest
);
5275 OUT PNDIS_STATUS Status
,
5276 IN NDIS_HANDLE NdisBindingHandle
);
5282 OUT PNDIS_STATUS Status
,
5283 IN NDIS_HANDLE NdisBindingHandle
,
5284 IN PNDIS_PACKET Packet
);
5290 IN NDIS_HANDLE NdisBindingHandle
,
5291 IN PPNDIS_PACKET PacketArray
,
5292 IN UINT NumberOfPackets
);
5298 OUT PNDIS_STATUS Status
,
5299 IN NDIS_HANDLE NdisBindingHandle
,
5300 IN NDIS_HANDLE MacReceiveContext
,
5302 IN UINT BytesToTransfer
,
5303 IN OUT PNDIS_PACKET Packet
,
5304 OUT PUINT BytesTransferred
);
5310 OUT PNDIS_STATUS Status
,
5311 IN NDIS_HANDLE NdisBindingHandle
);
5316 NdisCompleteBindAdapter(
5317 IN NDIS_HANDLE BindAdapterContext
,
5318 IN NDIS_STATUS Status
,
5319 IN NDIS_STATUS OpenStatus
);
5324 NdisCompleteUnbindAdapter(
5325 IN NDIS_HANDLE UnbindAdapterContext
,
5326 IN NDIS_STATUS Status
);
5331 NdisDeregisterProtocol(
5332 OUT PNDIS_STATUS Status
,
5333 IN NDIS_HANDLE NdisProtocolHandle
);
5339 OUT PNDIS_STATUS Status
,
5340 OUT PNDIS_STATUS OpenErrorStatus
,
5341 OUT PNDIS_HANDLE NdisBindingHandle
,
5342 OUT PUINT SelectedMediumIndex
,
5343 IN PNDIS_MEDIUM MediumArray
,
5344 IN UINT MediumArraySize
,
5345 IN NDIS_HANDLE NdisProtocolHandle
,
5346 IN NDIS_HANDLE ProtocolBindingContext
,
5347 IN PNDIS_STRING AdapterName
,
5348 IN UINT OpenOptions
,
5349 IN PSTRING AddressingInformation
);
5354 NdisOpenProtocolConfiguration(
5355 OUT PNDIS_STATUS Status
,
5356 OUT PNDIS_HANDLE ConfigurationHandle
,
5357 IN PNDIS_STRING ProtocolSection
);
5362 NdisRegisterProtocol(
5363 OUT PNDIS_STATUS Status
,
5364 OUT PNDIS_HANDLE NdisProtocolHandle
,
5365 IN PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics
,
5366 IN UINT CharacteristicsLength
);
5368 /* Obsoleted in Windows XP */
5370 /* Prototypes for NDIS_MAC_CHARACTERISTICS */
5372 typedef NDIS_STATUS (*OPEN_ADAPTER_HANDLER
)(
5373 OUT PNDIS_STATUS OpenErrorStatus
,
5374 OUT NDIS_HANDLE
*MacBindingHandle
,
5375 OUT PUINT SelectedMediumIndex
,
5376 IN PNDIS_MEDIUM MediumArray
,
5377 IN UINT MediumArraySize
,
5378 IN NDIS_HANDLE NdisBindingContext
,
5379 IN NDIS_HANDLE MacAdapterContext
,
5380 IN UINT OpenOptions
,
5381 IN PSTRING AddressingInformation OPTIONAL
);
5383 typedef NDIS_STATUS (DDKAPI
*CLOSE_ADAPTER_HANDLER
)(
5384 IN NDIS_HANDLE MacBindingHandle
);
5386 typedef NDIS_STATUS (DDKAPI
*WAN_TRANSFER_DATA_HANDLER
)(
5389 typedef NDIS_STATUS (DDKAPI
*QUERY_GLOBAL_STATISTICS_HANDLER
)(
5390 IN NDIS_HANDLE MacAdapterContext
,
5391 IN PNDIS_REQUEST NdisRequest
);
5393 typedef VOID (DDKAPI
*UNLOAD_MAC_HANDLER
)(
5394 IN NDIS_HANDLE MacMacContext
);
5396 typedef NDIS_STATUS (DDKAPI
*ADD_ADAPTER_HANDLER
)(
5397 IN NDIS_HANDLE MacMacContext
,
5398 IN NDIS_HANDLE WrapperConfigurationContext
,
5399 IN PNDIS_STRING AdapterName
);
5401 typedef VOID (*REMOVE_ADAPTER_HANDLER
)(
5402 IN NDIS_HANDLE MacAdapterContext
);
5404 typedef struct _NDIS_MAC_CHARACTERISTICS
{
5405 UCHAR MajorNdisVersion
;
5406 UCHAR MinorNdisVersion
;
5409 OPEN_ADAPTER_HANDLER OpenAdapterHandler
;
5410 CLOSE_ADAPTER_HANDLER CloseAdapterHandler
;
5411 SEND_HANDLER SendHandler
;
5412 TRANSFER_DATA_HANDLER TransferDataHandler
;
5413 RESET_HANDLER ResetHandler
;
5414 REQUEST_HANDLER RequestHandler
;
5415 QUERY_GLOBAL_STATISTICS_HANDLER QueryGlobalStatisticsHandler
;
5416 UNLOAD_MAC_HANDLER UnloadMacHandler
;
5417 ADD_ADAPTER_HANDLER AddAdapterHandler
;
5418 REMOVE_ADAPTER_HANDLER RemoveAdapterHandler
;
5420 } NDIS_MAC_CHARACTERISTICS
, *PNDIS_MAC_CHARACTERISTICS
;
5422 typedef NDIS_MAC_CHARACTERISTICS NDIS_WAN_MAC_CHARACTERISTICS
;
5423 typedef NDIS_WAN_MAC_CHARACTERISTICS
*PNDIS_WAN_MAC_CHARACTERISTICS
;
5429 #endif /* __NDIS_H */