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
35 /* Helper macro to enable gcc's extension. */
36 #ifndef __GNU_EXTENSION
38 #define __GNU_EXTENSION __extension__
40 #define __GNU_EXTENSION
50 #if !defined(_WINDEF_H)
51 typedef unsigned int UINT
, *PUINT
;
58 #if defined(NDIS_WRAPPER)
61 #define NDISAPI DECLSPEC_IMPORT
64 #if defined(NDIS50_MINIPORT) && !defined(NDIS_MINIPORT_MAJOR_VERSION) && !defined(NDIS_MINIPORT_MINOR_VERSION)
65 #define NDIS_MINIPORT_MAJOR_VERSION 5
66 #define NDIS_MINIPORT_MINOR_VERSION 0
69 #if defined(NDIS51_MINIPORT) && !defined(NDIS_MINIPORT_MAJOR_VERSION) && !defined(NDIS_MINIPORT_MINOR_VERSION)
70 #define NDIS_MINIPORT_MAJOR_VERSION 5
71 #define NDIS_MINIPORT_MINOR_VERSION 1
74 #if defined(NDIS50) && !defined(NDIS_PROTOCOL_MAJOR_VERSION) && !defined(NDIS_PROTOCOL_MINOR_VERSION)
75 #define NDIS_PROTOCOL_MAJOR_VERSION 5
76 #define NDIS_PROTOCOL_MINOR_VERSION 0
79 #if defined(NDIS51) && !defined(NDIS_PROTOCOL_MAJOR_VERSION) && !defined(NDIS_PROTOCOL_MINOR_VERSION)
80 #define NDIS_PROTOCOL_MAJOR_VERSION 5
81 #define NDIS_PROTOCOL_MINOR_VERSION 1
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
{
250 __GNU_EXTENSION
union {
251 __GNU_EXTENSION
struct {
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 (NTAPI
*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 packet filter bits (OID_GEN_CURRENT_PACKET_FILTER) */
320 #define NDIS_PACKET_TYPE_DIRECTED 0x00000001
321 #define NDIS_PACKET_TYPE_MULTICAST 0x00000002
322 #define NDIS_PACKET_TYPE_ALL_MULTICAST 0x00000004
323 #define NDIS_PACKET_TYPE_BROADCAST 0x00000008
324 #define NDIS_PACKET_TYPE_SOURCE_ROUTING 0x00000010
325 #define NDIS_PACKET_TYPE_PROMISCUOUS 0x00000020
326 #define NDIS_PACKET_TYPE_SMT 0x00000040
327 #define NDIS_PACKET_TYPE_ALL_LOCAL 0x00000080
328 #define NDIS_PACKET_TYPE_GROUP 0x00001000
329 #define NDIS_PACKET_TYPE_ALL_FUNCTIONAL 0x00002000
330 #define NDIS_PACKET_TYPE_FUNCTIONAL 0x00004000
331 #define NDIS_PACKET_TYPE_MAC_FRAME 0x00008000
333 /* NDIS protocol option bits (OID_GEN_PROTOCOL_OPTIONS) */
334 #define NDIS_PROT_OPTION_ESTIMATED_LENGTH 0x00000001
335 #define NDIS_PROT_OPTION_NO_LOOPBACK 0x00000002
336 #define NDIS_PROT_OPTION_NO_RSVD_ON_RCVPKT 0x00000004
338 /* NDIS MAC option bits (OID_GEN_MAC_OPTIONS) */
339 #define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA 0x00000001
340 #define NDIS_MAC_OPTION_RECEIVE_SERIALIZED 0x00000002
341 #define NDIS_MAC_OPTION_TRANSFERS_NOT_PEND 0x00000004
342 #define NDIS_MAC_OPTION_NO_LOOPBACK 0x00000008
343 #define NDIS_MAC_OPTION_FULL_DUPLEX 0x00000010
344 #define NDIS_MAC_OPTION_EOTX_INDICATION 0x00000020
345 #define NDIS_MAC_OPTION_8021P_PRIORITY 0x00000040
346 #define NDIS_MAC_OPTION_RESERVED 0x80000000
348 /* State of the LAN media (OID_GEN_MEDIA_CONNECT_STATUS) */
349 typedef enum _NDIS_MEDIA_STATE
{
350 NdisMediaStateConnected
,
351 NdisMediaStateDisconnected
352 } NDIS_MEDIA_STATE
, *PNDIS_MEDIA_STATE
;
354 /* OID_GEN_SUPPORTED_GUIDS */
355 typedef struct _NDIS_GUID
{
363 } NDIS_GUID
, *PNDIS_GUID
;
365 #define NDIS_GUID_TO_OID 0x00000001
366 #define NDIS_GUID_TO_STATUS 0x00000002
367 #define NDIS_GUID_ANSI_STRING 0x00000004
368 #define NDIS_GUID_UNICODE_STRING 0x00000008
369 #define NDIS_GUID_ARRAY 0x00000010
371 typedef HANDLE PNDIS_PACKET_POOL
;
373 /* NDIS_PACKET_PRIVATE.Flags constants */
374 #define fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO 0x40
375 #define fPACKET_ALLOCATED_BY_NDIS 0x80
377 typedef struct _NDIS_PACKET_PRIVATE
{
382 PNDIS_PACKET_POOL Pool
;
386 UCHAR NdisPacketFlags
;
387 USHORT NdisPacketOobOffset
;
388 } NDIS_PACKET_PRIVATE
, * PNDIS_PACKET_PRIVATE
;
390 typedef struct _NDIS_PACKET
{
391 NDIS_PACKET_PRIVATE Private
;
392 _ANONYMOUS_UNION
union {
393 _ANONYMOUS_STRUCT
struct {
394 UCHAR MiniportReserved
[2 * sizeof(PVOID
)];
395 UCHAR WrapperReserved
[2 * sizeof(PVOID
)];
397 _ANONYMOUS_STRUCT
struct {
398 UCHAR MiniportReservedEx
[3 * sizeof(PVOID
)];
399 UCHAR WrapperReservedEx
[sizeof(PVOID
)];
401 _ANONYMOUS_STRUCT
struct {
402 UCHAR MacReserved
[4 * sizeof(PVOID
)];
405 ULONG_PTR Reserved
[2];
406 UCHAR ProtocolReserved
[1];
407 } NDIS_PACKET
, *PNDIS_PACKET
, **PPNDIS_PACKET
;
409 typedef enum _NDIS_CLASS_ID
{
410 NdisClass802_3Priority
,
411 NdisClassWirelessWanMbxMailbox
,
412 NdisClassIrdaPacketInfo
,
416 typedef struct MediaSpecificInformation
{
417 UINT NextEntryOffset
;
418 NDIS_CLASS_ID ClassId
;
420 UCHAR ClassInformation
[1];
421 } MEDIA_SPECIFIC_INFORMATION
;
423 typedef struct _NDIS_PACKET_OOB_DATA
{
424 _ANONYMOUS_UNION
union {
425 ULONGLONG TimeToSend
;
428 ULONGLONG TimeReceived
;
430 UINT SizeMediaSpecificInfo
;
431 PVOID MediaSpecificInformation
;
433 } NDIS_PACKET_OOB_DATA
, *PNDIS_PACKET_OOB_DATA
;
435 typedef struct _NDIS_PM_PACKET_PATTERN
{
442 } NDIS_PM_PACKET_PATTERN
, *PNDIS_PM_PACKET_PATTERN
;
444 typedef struct _NDIS_PACKET_STACK
{
445 ULONG_PTR IMReserved
[2];
446 ULONG_PTR NdisReserved
[4];
447 } NDIS_PACKET_STACK
, *PNDIS_PACKET_STACK
;
449 /* Request types used by NdisRequest */
450 typedef enum _NDIS_REQUEST_TYPE
{
451 NdisRequestQueryInformation
,
452 NdisRequestSetInformation
,
453 NdisRequestQueryStatistics
,
457 NdisRequestTransferData
,
463 } NDIS_REQUEST_TYPE
, *PNDIS_REQUEST_TYPE
;
465 typedef struct _NDIS_REQUEST
{
466 UCHAR MacReserved
[4 * sizeof(PVOID
)];
467 NDIS_REQUEST_TYPE RequestType
;
469 struct QUERY_INFORMATION
{
471 PVOID InformationBuffer
;
472 UINT InformationBufferLength
;
476 struct SET_INFORMATION
{
478 PVOID InformationBuffer
;
479 UINT InformationBufferLength
;
484 #if (defined(NDIS50) || defined(NDIS51))
485 UCHAR NdisReserved
[9 * sizeof(PVOID
)];
486 __GNU_EXTENSION
union {
487 UCHAR CallMgrReserved
[2 * sizeof(PVOID
)];
488 UCHAR ProtocolReserved
[2 * sizeof(PVOID
)];
490 UCHAR MiniportReserved
[2 * sizeof(PVOID
)];
492 } NDIS_REQUEST
, *PNDIS_REQUEST
;
496 /* Wide Area Networks definitions */
498 typedef struct _NDIS_WAN_PACKET
{
499 LIST_ENTRY WanPacketQueue
;
500 PUCHAR CurrentBuffer
;
504 PVOID ProtocolReserved1
;
505 PVOID ProtocolReserved2
;
506 PVOID ProtocolReserved3
;
507 PVOID ProtocolReserved4
;
512 } NDIS_WAN_PACKET
, *PNDIS_WAN_PACKET
;
516 /* DMA channel information */
518 typedef struct _NDIS_DMA_DESCRIPTION
{
520 BOOLEAN AutoInitialize
;
521 BOOLEAN DmaChannelSpecified
;
526 } NDIS_DMA_DESCRIPTION
, *PNDIS_DMA_DESCRIPTION
;
528 typedef struct _NDIS_DMA_BLOCK
{
529 PVOID MapRegisterBase
;
530 KEVENT AllocationEvent
;
531 PADAPTER_OBJECT SystemAdapterObject
;
534 } NDIS_DMA_BLOCK
, *PNDIS_DMA_BLOCK
;
536 typedef UCHAR NDIS_DMA_SIZE
;
538 #define NDIS_DMA_24BITS ((NDIS_DMA_SIZE)0)
539 #define NDIS_DMA_32BITS ((NDIS_DMA_SIZE)1)
540 #define NDIS_DMA_64BITS ((NDIS_DMA_SIZE)2)
542 typedef enum _NDIS_PROCESSOR_TYPE
{
548 } NDIS_PROCESSOR_TYPE
, *PNDIS_PROCESSOR_TYPE
;
550 typedef enum _NDIS_ENVIRONMENT_TYPE
{
551 NdisEnvironmentWindows
,
552 NdisEnvironmentWindowsNt
553 } NDIS_ENVIRONMENT_TYPE
, *PNDIS_ENVIRONMENT_TYPE
;
555 /* Possible hardware architecture */
556 typedef enum _NDIS_INTERFACE_TYPE
{
557 NdisInterfaceInternal
= Internal
,
558 NdisInterfaceIsa
= Isa
,
559 NdisInterfaceEisa
= Eisa
,
560 NdisInterfaceMca
= MicroChannel
,
561 NdisInterfaceTurboChannel
= TurboChannel
,
562 NdisInterfacePci
= PCIBus
,
563 NdisInterfacePcMcia
= PCMCIABus
,
564 NdisInterfaceCBus
= CBus
,
565 NdisInterfaceMPIBus
= MPIBus
,
566 NdisInterfaceMPSABus
= MPSABus
,
567 NdisInterfaceProcessorInternal
= ProcessorInternal
,
568 NdisInterfaceInternalPowerBus
= InternalPowerBus
,
569 NdisInterfacePNPISABus
= PNPISABus
,
570 NdisInterfacePNPBus
= PNPBus
,
571 NdisMaximumInterfaceType
572 } NDIS_INTERFACE_TYPE
, *PNDIS_INTERFACE_TYPE
;
574 #define NdisInterruptLevelSensitive LevelSensitive
575 #define NdisInterruptLatched Latched
576 typedef KINTERRUPT_MODE NDIS_INTERRUPT_MODE
, *PNDIS_INTERRUPT_MODE
;
579 typedef enum _NDIS_PARAMETER_TYPE
{
580 NdisParameterInteger
,
581 NdisParameterHexInteger
,
583 NdisParameterMultiString
,
585 } NDIS_PARAMETER_TYPE
, *PNDIS_PARAMETER_TYPE
;
592 typedef struct _NDIS_CONFIGURATION_PARAMETER
{
593 NDIS_PARAMETER_TYPE ParameterType
;
596 NDIS_STRING StringData
;
597 BINARY_DATA BinaryData
;
599 } NDIS_CONFIGURATION_PARAMETER
, *PNDIS_CONFIGURATION_PARAMETER
;
602 typedef PHYSICAL_ADDRESS NDIS_PHYSICAL_ADDRESS
, *PNDIS_PHYSICAL_ADDRESS
;
604 typedef struct _NDIS_PHYSICAL_ADDRESS_UNIT
{
605 NDIS_PHYSICAL_ADDRESS PhysicalAddress
;
607 } NDIS_PHYSICAL_ADDRESS_UNIT
, *PNDIS_PHYSICAL_ADDRESS_UNIT
;
609 typedef struct _NDIS_WAN_LINE_DOWN
{
610 UCHAR RemoteAddress
[6];
611 UCHAR LocalAddress
[6];
612 } NDIS_WAN_LINE_DOWN
, *PNDIS_WAN_LINE_DOWN
;
614 typedef struct _NDIS_WAN_LINE_UP
{
616 ULONG MaximumTotalSize
;
617 NDIS_WAN_QUALITY Quality
;
619 UCHAR RemoteAddress
[6];
620 OUT UCHAR LocalAddress
[6];
621 ULONG ProtocolBufferLength
;
622 PUCHAR ProtocolBuffer
;
624 NDIS_STRING DeviceName
;
625 } NDIS_WAN_LINE_UP
, *PNDIS_WAN_LINE_UP
;
629 (NTAPI
*ADAPTER_SHUTDOWN_HANDLER
)(
630 IN PVOID ShutdownContext
);
633 (NTAPI
*TDI_REGISTER_CALLBACK
)(
634 IN PUNICODE_STRING DeviceName
,
635 OUT HANDLE
* TdiHandle
);
638 (NTAPI
*TDI_PNP_HANDLER
)(
639 IN PUNICODE_STRING UpperComponent
,
640 IN PUNICODE_STRING LowerComponent
,
641 IN PUNICODE_STRING BindList
,
642 IN PVOID ReconfigBuffer
,
643 IN UINT ReconfigBufferSize
,
646 typedef struct _OID_LIST OID_LIST
, *POID_LIST
;
650 typedef enum _NDIS_PNP_DEVICE_STATE
{
652 NdisPnPDeviceStarted
,
653 NdisPnPDeviceQueryStopped
,
654 NdisPnPDeviceStopped
,
655 NdisPnPDeviceQueryRemoved
,
656 NdisPnPDeviceRemoved
,
657 NdisPnPDeviceSurpriseRemoved
658 } NDIS_PNP_DEVICE_STATE
;
660 #define NDIS_DEVICE_NOT_STOPPABLE 0x00000001
661 #define NDIS_DEVICE_NOT_REMOVEABLE 0x00000002
662 #define NDIS_DEVICE_NOT_SUSPENDABLE 0x00000004
663 #define NDIS_DEVICE_DISABLE_PM 0x00000008
664 #define NDIS_DEVICE_DISABLE_WAKE_UP 0x00000010
665 #define NDIS_DEVICE_DISABLE_WAKE_ON_RECONNECT 0x00000020
666 #define NDIS_DEVICE_RESERVED 0x00000040
667 #define NDIS_DEVICE_DISABLE_WAKE_ON_MAGIC_PACKET 0x00000080
668 #define NDIS_DEVICE_DISABLE_WAKE_ON_PATTERN_MATCH 0x00000100
671 /* OID_GEN_NETWORK_LAYER_ADDRESSES */
672 typedef struct _NETWORK_ADDRESS
{
673 USHORT AddressLength
;
676 } NETWORK_ADDRESS
, *PNETWORK_ADDRESS
;
678 typedef struct _NETWORK_ADDRESS_LIST
{
681 NETWORK_ADDRESS Address
[1];
682 } NETWORK_ADDRESS_LIST
, *PNETWORK_ADDRESS_LIST
;
684 /* Protocol types supported by NDIS */
685 #define NDIS_PROTOCOL_ID_DEFAULT 0x00
686 #define NDIS_PROTOCOL_ID_TCP_IP 0x02
687 #define NDIS_PROTOCOL_ID_IPX 0x06
688 #define NDIS_PROTOCOL_ID_NBF 0x07
689 #define NDIS_PROTOCOL_ID_MAX 0x0F
690 #define NDIS_PROTOCOL_ID_MASK 0x0F
693 /* OID_GEN_TRANSPORT_HEADER_OFFSET */
694 typedef struct _TRANSPORT_HEADER_OFFSET
{
697 } TRANSPORT_HEADER_OFFSET
, *PTRANSPORT_HEADER_OFFSET
;
700 /* OID_GEN_CO_LINK_SPEED / OID_GEN_CO_MINIMUM_LINK_SPEED */
701 typedef struct _NDIS_CO_LINK_SPEED
{
704 } NDIS_CO_LINK_SPEED
, *PNDIS_CO_LINK_SPEED
;
706 typedef ULONG NDIS_AF
, *PNDIS_AF
;
707 #define CO_ADDRESS_FAMILY_Q2931 ((NDIS_AF)0x1)
708 #define CO_ADDRESS_FAMILY_PSCHED ((NDIS_AF)0x2)
709 #define CO_ADDRESS_FAMILY_L2TP ((NDIS_AF)0x3)
710 #define CO_ADDRESS_FAMILY_IRDA ((NDIS_AF)0x4)
711 #define CO_ADDRESS_FAMILY_1394 ((NDIS_AF)0x5)
712 #define CO_ADDRESS_FAMILY_PPP ((NDIS_AF)0x6)
713 #define CO_ADDRESS_FAMILY_TAPI ((NDIS_AF)0x800)
714 #define CO_ADDRESS_FAMILY_TAPI_PROXY ((NDIS_AF)0x801)
716 #define CO_ADDRESS_FAMILY_PROXY 0x80000000
719 NDIS_AF AddressFamily
;
722 } CO_ADDRESS_FAMILY
, *PCO_ADDRESS_FAMILY
;
724 typedef struct _CO_SPECIFIC_PARAMETERS
{
728 } CO_SPECIFIC_PARAMETERS
, *PCO_SPECIFIC_PARAMETERS
;
730 typedef struct _CO_CALL_MANAGER_PARAMETERS
{
733 CO_SPECIFIC_PARAMETERS CallMgrSpecific
;
734 } CO_CALL_MANAGER_PARAMETERS
, *PCO_CALL_MANAGER_PARAMETERS
;
736 /* CO_MEDIA_PARAMETERS.Flags constants */
737 #define RECEIVE_TIME_INDICATION 0x00000001
738 #define USE_TIME_STAMPS 0x00000002
739 #define TRANSMIT_VC 0x00000004
740 #define RECEIVE_VC 0x00000008
741 #define INDICATE_ERRED_PACKETS 0x00000010
742 #define INDICATE_END_OF_TX 0x00000020
743 #define RESERVE_RESOURCES_VC 0x00000040
744 #define ROUND_DOWN_FLOW 0x00000080
745 #define ROUND_UP_FLOW 0x00000100
747 typedef struct _CO_MEDIA_PARAMETERS
{
749 ULONG ReceivePriority
;
750 ULONG ReceiveSizeHint
;
751 CO_SPECIFIC_PARAMETERS MediaSpecific
;
752 } CO_MEDIA_PARAMETERS
, *PCO_MEDIA_PARAMETERS
;
754 /* CO_CALL_PARAMETERS.Flags constants */
755 #define PERMANENT_VC 0x00000001
756 #define CALL_PARAMETERS_CHANGED 0x00000002
757 #define QUERY_CALL_PARAMETERS 0x00000004
758 #define BROADCAST_VC 0x00000008
759 #define MULTIPOINT_VC 0x00000010
761 typedef struct _CO_CALL_PARAMETERS
{
763 PCO_CALL_MANAGER_PARAMETERS CallMgrParameters
;
764 PCO_MEDIA_PARAMETERS MediaParameters
;
765 } CO_CALL_PARAMETERS
, *PCO_CALL_PARAMETERS
;
767 typedef struct _CO_SAP
{
773 typedef struct _NDIS_IPSEC_PACKET_INFO
{
774 _ANONYMOUS_UNION
union {
776 NDIS_HANDLE OffloadHandle
;
777 NDIS_HANDLE NextOffloadHandle
;
780 ULONG SA_DELETE_REQ
: 1;
781 ULONG CRYPTO_DONE
: 1;
782 ULONG NEXT_CRYPTO_DONE
: 1;
786 } NDIS_IPSEC_PACKET_INFO
, *PNDIS_IPSEC_PACKET_INFO
;
788 /* NDIS_MAC_FRAGMENT.Errors constants */
789 #define WAN_ERROR_CRC 0x00000001
790 #define WAN_ERROR_FRAMING 0x00000002
791 #define WAN_ERROR_HARDWAREOVERRUN 0x00000004
792 #define WAN_ERROR_BUFFEROVERRUN 0x00000008
793 #define WAN_ERROR_TIMEOUT 0x00000010
794 #define WAN_ERROR_ALIGNMENT 0x00000020
796 typedef struct _NDIS_MAC_FRAGMENT
{
797 NDIS_HANDLE NdisLinkContext
;
799 } NDIS_MAC_FRAGMENT
, *PNDIS_MAC_FRAGMENT
;
801 typedef struct _NDIS_MAC_LINE_DOWN
{
802 NDIS_HANDLE NdisLinkContext
;
803 } NDIS_MAC_LINE_DOWN
, *PNDIS_MAC_LINE_DOWN
;
805 typedef struct _NDIS_MAC_LINE_UP
{
807 NDIS_WAN_QUALITY Quality
;
809 NDIS_HANDLE ConnectionWrapperID
;
810 NDIS_HANDLE NdisLinkHandle
;
811 NDIS_HANDLE NdisLinkContext
;
812 } NDIS_MAC_LINE_UP
, *PNDIS_MAC_LINE_UP
;
814 typedef struct _NDIS_PACKET_8021Q_INFO
{
815 _ANONYMOUS_UNION
union {
817 UINT32 UserPriority
: 3;
818 UINT32 CanonicalFormatId
: 1;
820 UINT32 Reserved
: 16;
824 } NDIS_PACKET_8021Q_INFO
, *PNDIS_PACKET_8021Q_INFO
;
826 typedef enum _NDIS_PER_PACKET_INFO
{
827 TcpIpChecksumPacketInfo
,
829 TcpLargeSendPacketInfo
,
830 ClassificationHandlePacketInfo
,
832 ScatterGatherListPacketInfo
,
837 } NDIS_PER_PACKET_INFO
, *PNDIS_PER_PACKET_INFO
;
839 typedef struct _NDIS_PACKET_EXTENSION
{
840 PVOID NdisPacketInfo
[MaxPerPacketInfo
];
841 } NDIS_PACKET_EXTENSION
, *PNDIS_PACKET_EXTENSION
;
843 typedef struct _NDIS_GENERIC_OBJECT
{
844 NDIS_OBJECT_HEADER Header
;
847 PDRIVER_OBJECT DriverObject
;
848 } NDIS_GENERIC_OBJECT
, *PNDIS_GENERIC_OBJECT
;
852 * NDIS_GET_ORIGINAL_PACKET(
853 * IN PNDIS_PACKET Packet);
855 #define NDIS_GET_ORIGINAL_PACKET(Packet) \
856 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo)
860 * NDIS_GET_PACKET_CANCEL_ID(
861 * IN PNDIS_PACKET Packet);
863 #define NDIS_GET_PACKET_CANCEL_ID(Packet) \
864 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId)
867 * PNDIS_PACKET_EXTENSION
868 * NDIS_PACKET_EXTENSION_FROM_PACKET(
869 * IN PNDIS_PACKET Packet);
871 #define NDIS_PACKET_EXTENSION_FROM_PACKET(Packet) \
872 ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) \
873 + (Packet)->Private.NdisPacketOobOffset + sizeof(NDIS_PACKET_OOB_DATA)))
877 * NDIS_PER_PACKET_INFO_FROM_PACKET(
878 * IN OUT PNDIS_PACKET Packet,
879 * IN NDIS_PER_PACKET_INFO InfoType);
881 #define NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, InfoType) \
882 ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) + (Packet)->Private.NdisPacketOobOffset \
883 + sizeof(NDIS_PACKET_OOB_DATA)))->NdisPacketInfo[(InfoType)]
887 * NDIS_SET_ORIGINAL_PACKET(
888 * IN OUT PNDIS_PACKET Packet,
889 * IN PNDIS_PACKET OriginalPacket);
891 #define NDIS_SET_ORIGINAL_PACKET(Packet, OriginalPacket) \
892 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo) = (OriginalPacket)
896 * NDIS_SET_PACKET_CANCEL_ID(
897 * IN PNDIS_PACKET Packet
898 * IN ULONG_PTR CancelId);
900 #define NDIS_SET_PACKET_CANCEL_ID(Packet, CancelId) \
901 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId) = (CancelId)
903 typedef enum _NDIS_TASK
{
904 TcpIpChecksumNdisTask
,
906 TcpLargeSendNdisTask
,
908 } NDIS_TASK
, *PNDIS_TASK
;
910 typedef struct _NDIS_TASK_IPSEC
{
912 ULONG AH_ESP_COMBINED
;
913 ULONG TRANSPORT_TUNNEL_COMBINED
;
930 ULONG TRIPLE_DES
: 1;
937 } NDIS_TASK_IPSEC
, *PNDIS_TASK_IPSEC
;
939 typedef enum _NDIS_ENCAPSULATION
{
940 UNSPECIFIED_Encapsulation
,
942 IEEE_802_3_Encapsulation
,
943 IEEE_802_5_Encapsulation
,
944 LLC_SNAP_ROUTED_Encapsulation
,
945 LLC_SNAP_BRIDGED_Encapsulation
946 } NDIS_ENCAPSULATION
;
948 typedef struct _NDIS_ENCAPSULATION_FORMAT
{
949 NDIS_ENCAPSULATION Encapsulation
;
951 ULONG FixedHeaderSize
: 1;
954 ULONG EncapsulationHeaderSize
;
955 } NDIS_ENCAPSULATION_FORMAT
, *PNDIS_ENCAPSULATION_FORMAT
;
957 typedef struct _NDIS_TASK_OFFLOAD_HEADER
{
961 ULONG OffsetFirstTask
;
962 NDIS_ENCAPSULATION_FORMAT EncapsulationFormat
;
963 } NDIS_TASK_OFFLOAD_HEADER
, *PNDIS_TASK_OFFLOAD_HEADER
;
965 typedef struct _NDIS_TASK_OFFLOAD
{
969 ULONG OffsetNextTask
;
970 ULONG TaskBufferLength
;
972 } NDIS_TASK_OFFLOAD
, *PNDIS_TASK_OFFLOAD
;
974 /* NDIS_TASK_OFFLOAD_HEADER.Version constants */
975 #define NDIS_TASK_OFFLOAD_VERSION 1
977 typedef struct _NDIS_TASK_TCP_IP_CHECKSUM
{
979 ULONG IpOptionsSupported
:1;
980 ULONG TcpOptionsSupported
:1;
987 ULONG IpOptionsSupported
: 1;
988 ULONG TcpOptionsSupported
: 1;
989 ULONG TcpChecksum
: 1;
990 ULONG UdpChecksum
: 1;
991 ULONG IpChecksum
: 1;
995 ULONG IpOptionsSupported
: 1;
996 ULONG TcpOptionsSupported
: 1;
997 ULONG TcpChecksum
: 1;
998 ULONG UdpChecksum
: 1;
1002 ULONG IpOptionsSupported
: 1;
1003 ULONG TcpOptionsSupported
: 1;
1004 ULONG TcpChecksum
: 1;
1005 ULONG UdpChecksum
: 1;
1007 } NDIS_TASK_TCP_IP_CHECKSUM
, *PNDIS_TASK_TCP_IP_CHECKSUM
;
1009 typedef struct _NDIS_TASK_TCP_LARGE_SEND
{
1011 ULONG MaxOffLoadSize
;
1012 ULONG MinSegmentCount
;
1015 } NDIS_TASK_TCP_LARGE_SEND
, *PNDIS_TASK_TCP_LARGE_SEND
;
1017 typedef struct _NDIS_TCP_IP_CHECKSUM_PACKET_INFO
{
1018 _ANONYMOUS_UNION
union {
1020 ULONG NdisPacketChecksumV4
: 1;
1021 ULONG NdisPacketChecksumV6
: 1;
1022 ULONG NdisPacketTcpChecksum
: 1;
1023 ULONG NdisPacketUdpChecksum
: 1;
1024 ULONG NdisPacketIpChecksum
: 1;
1028 ULONG NdisPacketTcpChecksumFailed
: 1;
1029 ULONG NdisPacketUdpChecksumFailed
: 1;
1030 ULONG NdisPacketIpChecksumFailed
: 1;
1031 ULONG NdisPacketTcpChecksumSucceeded
: 1;
1032 ULONG NdisPacketUdpChecksumSucceeded
: 1;
1033 ULONG NdisPacketIpChecksumSucceeded
: 1;
1034 ULONG NdisPacketLoopback
: 1;
1038 } NDIS_TCP_IP_CHECKSUM_PACKET_INFO
, *PNDIS_TCP_IP_CHECKSUM_PACKET_INFO
;
1040 typedef struct _NDIS_WAN_CO_FRAGMENT
{
1042 } NDIS_WAN_CO_FRAGMENT
, *PNDIS_WAN_CO_FRAGMENT
;
1044 typedef struct _NDIS_WAN_FRAGMENT
{
1045 UCHAR RemoteAddress
[6];
1046 UCHAR LocalAddress
[6];
1047 } NDIS_WAN_FRAGMENT
, *PNDIS_WAN_FRAGMENT
;
1049 typedef struct _WAN_CO_LINKPARAMS
{
1050 ULONG TransmitSpeed
;
1053 } WAN_CO_LINKPARAMS
, *PWAN_CO_LINKPARAMS
;
1059 (NTAPI
*CM_ACTIVATE_VC_COMPLETE_HANDLER
)(
1060 IN NDIS_STATUS Status
,
1061 IN NDIS_HANDLE CallMgrVcContext
,
1062 IN PCO_CALL_PARAMETERS CallParameters
);
1065 (NTAPI
*CM_ADD_PARTY_HANDLER
)(
1066 IN NDIS_HANDLE CallMgrVcContext
,
1067 IN OUT PCO_CALL_PARAMETERS CallParameters
,
1068 IN NDIS_HANDLE NdisPartyHandle
,
1069 OUT PNDIS_HANDLE CallMgrPartyContext
);
1072 (NTAPI
*CM_CLOSE_AF_HANDLER
)(
1073 IN NDIS_HANDLE CallMgrAfContext
);
1076 (NTAPI
*CM_CLOSE_CALL_HANDLER
)(
1077 IN NDIS_HANDLE CallMgrVcContext
,
1078 IN NDIS_HANDLE CallMgrPartyContext OPTIONAL
,
1079 IN PVOID CloseData OPTIONAL
,
1080 IN UINT Size OPTIONAL
);
1083 (NTAPI
*CM_DEREG_SAP_HANDLER
)(
1084 IN NDIS_HANDLE CallMgrSapContext
);
1087 (NTAPI
*CM_DEACTIVATE_VC_COMPLETE_HANDLER
)(
1088 IN NDIS_STATUS Status
,
1089 IN NDIS_HANDLE CallMgrVcContext
);
1092 (NTAPI
*CM_DROP_PARTY_HANDLER
)(
1093 IN NDIS_HANDLE CallMgrPartyContext
,
1094 IN PVOID CloseData OPTIONAL
,
1095 IN UINT Size OPTIONAL
);
1098 (NTAPI
*CM_INCOMING_CALL_COMPLETE_HANDLER
)(
1099 IN NDIS_STATUS Status
,
1100 IN NDIS_HANDLE CallMgrVcContext
,
1101 IN PCO_CALL_PARAMETERS CallParameters
);
1104 (NTAPI
*CM_MAKE_CALL_HANDLER
)(
1105 IN NDIS_HANDLE CallMgrVcContext
,
1106 IN OUT PCO_CALL_PARAMETERS CallParameters
,
1107 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
1108 OUT PNDIS_HANDLE CallMgrPartyContext OPTIONAL
);
1111 (NTAPI
*CM_MODIFY_CALL_QOS_HANDLER
)(
1112 IN NDIS_HANDLE CallMgrVcContext
,
1113 IN PCO_CALL_PARAMETERS CallParameters
);
1116 (NTAPI
*CM_OPEN_AF_HANDLER
)(
1117 IN NDIS_HANDLE CallMgrBindingContext
,
1118 IN PCO_ADDRESS_FAMILY AddressFamily
,
1119 IN NDIS_HANDLE NdisAfHandle
,
1120 OUT PNDIS_HANDLE CallMgrAfContext
);
1123 (NTAPI
*CM_REG_SAP_HANDLER
)(
1124 IN NDIS_HANDLE CallMgrAfContext
,
1126 IN NDIS_HANDLE NdisSapHandle
,
1127 OUT PNDIS_HANDLE CallMgrSapContext
);
1130 (NTAPI
*CO_CREATE_VC_HANDLER
)(
1131 IN NDIS_HANDLE ProtocolAfContext
,
1132 IN NDIS_HANDLE NdisVcHandle
,
1133 OUT PNDIS_HANDLE ProtocolVcContext
);
1136 (NTAPI
*CO_DELETE_VC_HANDLER
)(
1137 IN NDIS_HANDLE ProtocolVcContext
);
1140 (NTAPI
*CO_REQUEST_COMPLETE_HANDLER
)(
1141 IN NDIS_STATUS Status
,
1142 IN NDIS_HANDLE ProtocolAfContext OPTIONAL
,
1143 IN NDIS_HANDLE ProtocolVcContext OPTIONAL
,
1144 IN NDIS_HANDLE ProtocolPartyContext OPTIONAL
,
1145 IN PNDIS_REQUEST NdisRequest
);
1148 (NTAPI
*CO_REQUEST_HANDLER
)(
1149 IN NDIS_HANDLE ProtocolAfContext
,
1150 IN NDIS_HANDLE ProtocolVcContext OPTIONAL
,
1151 IN NDIS_HANDLE ProtocolPartyContext OPTIONAL
,
1152 IN OUT PNDIS_REQUEST NdisRequest
);
1154 typedef struct _NDIS_CALL_MANAGER_CHARACTERISTICS
{
1159 CO_CREATE_VC_HANDLER CmCreateVcHandler
;
1160 CO_DELETE_VC_HANDLER CmDeleteVcHandler
;
1161 CM_OPEN_AF_HANDLER CmOpenAfHandler
;
1162 CM_CLOSE_AF_HANDLER CmCloseAfHandler
;
1163 CM_REG_SAP_HANDLER CmRegisterSapHandler
;
1164 CM_DEREG_SAP_HANDLER CmDeregisterSapHandler
;
1165 CM_MAKE_CALL_HANDLER CmMakeCallHandler
;
1166 CM_CLOSE_CALL_HANDLER CmCloseCallHandler
;
1167 CM_INCOMING_CALL_COMPLETE_HANDLER CmIncomingCallCompleteHandler
;
1168 CM_ADD_PARTY_HANDLER CmAddPartyHandler
;
1169 CM_DROP_PARTY_HANDLER CmDropPartyHandler
;
1170 CM_ACTIVATE_VC_COMPLETE_HANDLER CmActivateVcCompleteHandler
;
1171 CM_DEACTIVATE_VC_COMPLETE_HANDLER CmDeactivateVcCompleteHandler
;
1172 CM_MODIFY_CALL_QOS_HANDLER CmModifyCallQoSHandler
;
1173 CO_REQUEST_HANDLER CmRequestHandler
;
1174 CO_REQUEST_COMPLETE_HANDLER CmRequestCompleteHandler
;
1175 } NDIS_CALL_MANAGER_CHARACTERISTICS
, *PNDIS_CALL_MANAGER_CHARACTERISTICS
;
1179 /* Call Manager clients */
1181 typedef VOID (*CL_OPEN_AF_COMPLETE_HANDLER
)(
1182 IN NDIS_STATUS Status
,
1183 IN NDIS_HANDLE ProtocolAfContext
,
1184 IN NDIS_HANDLE NdisAfHandle
);
1187 (NTAPI
*CL_CLOSE_AF_COMPLETE_HANDLER
)(
1188 IN NDIS_STATUS Status
,
1189 IN NDIS_HANDLE ProtocolAfContext
);
1192 (NTAPI
*CL_REG_SAP_COMPLETE_HANDLER
)(
1193 IN NDIS_STATUS Status
,
1194 IN NDIS_HANDLE ProtocolSapContext
,
1196 IN NDIS_HANDLE NdisSapHandle
);
1199 (NTAPI
*CL_DEREG_SAP_COMPLETE_HANDLER
)(
1200 IN NDIS_STATUS Status
,
1201 IN NDIS_HANDLE ProtocolSapContext
);
1204 (NTAPI
*CL_MAKE_CALL_COMPLETE_HANDLER
)(
1205 IN NDIS_STATUS Status
,
1206 IN NDIS_HANDLE ProtocolVcContext
,
1207 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
1208 IN PCO_CALL_PARAMETERS CallParameters
);
1211 (NTAPI
*CL_MODIFY_CALL_QOS_COMPLETE_HANDLER
)(
1212 IN NDIS_STATUS Status
,
1213 IN NDIS_HANDLE ProtocolVcContext
,
1214 IN PCO_CALL_PARAMETERS CallParameters
);
1217 (NTAPI
*CL_CLOSE_CALL_COMPLETE_HANDLER
)(
1218 IN NDIS_STATUS Status
,
1219 IN NDIS_HANDLE ProtocolVcContext
,
1220 IN NDIS_HANDLE ProtocolPartyContext OPTIONAL
);
1223 (NTAPI
*CL_ADD_PARTY_COMPLETE_HANDLER
)(
1224 IN NDIS_STATUS Status
,
1225 IN NDIS_HANDLE ProtocolPartyContext
,
1226 IN NDIS_HANDLE NdisPartyHandle
,
1227 IN PCO_CALL_PARAMETERS CallParameters
);
1230 (NTAPI
*CL_DROP_PARTY_COMPLETE_HANDLER
)(
1231 IN NDIS_STATUS Status
,
1232 IN NDIS_HANDLE ProtocolPartyContext
);
1235 (NTAPI
*CL_INCOMING_CALL_HANDLER
)(
1236 IN NDIS_HANDLE ProtocolSapContext
,
1237 IN NDIS_HANDLE ProtocolVcContext
,
1238 IN OUT PCO_CALL_PARAMETERS CallParameters
);
1241 (NTAPI
*CL_INCOMING_CALL_QOS_CHANGE_HANDLER
)(
1242 IN NDIS_HANDLE ProtocolVcContext
,
1243 IN PCO_CALL_PARAMETERS CallParameters
);
1246 (NTAPI
*CL_INCOMING_CLOSE_CALL_HANDLER
)(
1247 IN NDIS_STATUS CloseStatus
,
1248 IN NDIS_HANDLE ProtocolVcContext
,
1249 IN PVOID CloseData OPTIONAL
,
1250 IN UINT Size OPTIONAL
);
1253 (NTAPI
*CL_INCOMING_DROP_PARTY_HANDLER
)(
1254 IN NDIS_STATUS DropStatus
,
1255 IN NDIS_HANDLE ProtocolPartyContext
,
1256 IN PVOID CloseData OPTIONAL
,
1257 IN UINT Size OPTIONAL
);
1260 (NTAPI
*CL_CALL_CONNECTED_HANDLER
)(
1261 IN NDIS_HANDLE ProtocolVcContext
);
1264 typedef struct _NDIS_CLIENT_CHARACTERISTICS
{
1269 CO_CREATE_VC_HANDLER ClCreateVcHandler
;
1270 CO_DELETE_VC_HANDLER ClDeleteVcHandler
;
1271 CO_REQUEST_HANDLER ClRequestHandler
;
1272 CO_REQUEST_COMPLETE_HANDLER ClRequestCompleteHandler
;
1273 CL_OPEN_AF_COMPLETE_HANDLER ClOpenAfCompleteHandler
;
1274 CL_CLOSE_AF_COMPLETE_HANDLER ClCloseAfCompleteHandler
;
1275 CL_REG_SAP_COMPLETE_HANDLER ClRegisterSapCompleteHandler
;
1276 CL_DEREG_SAP_COMPLETE_HANDLER ClDeregisterSapCompleteHandler
;
1277 CL_MAKE_CALL_COMPLETE_HANDLER ClMakeCallCompleteHandler
;
1278 CL_MODIFY_CALL_QOS_COMPLETE_HANDLER ClModifyCallQoSCompleteHandler
;
1279 CL_CLOSE_CALL_COMPLETE_HANDLER ClCloseCallCompleteHandler
;
1280 CL_ADD_PARTY_COMPLETE_HANDLER ClAddPartyCompleteHandler
;
1281 CL_DROP_PARTY_COMPLETE_HANDLER ClDropPartyCompleteHandler
;
1282 CL_INCOMING_CALL_HANDLER ClIncomingCallHandler
;
1283 CL_INCOMING_CALL_QOS_CHANGE_HANDLER ClIncomingCallQoSChangeHandler
;
1284 CL_INCOMING_CLOSE_CALL_HANDLER ClIncomingCloseCallHandler
;
1285 CL_INCOMING_DROP_PARTY_HANDLER ClIncomingDropPartyHandler
;
1286 CL_CALL_CONNECTED_HANDLER ClCallConnectedHandler
;
1287 } NDIS_CLIENT_CHARACTERISTICS
, *PNDIS_CLIENT_CHARACTERISTICS
;
1290 /* NDIS protocol structures */
1292 /* Prototypes for NDIS 3.0 protocol characteristics */
1295 (NTAPI
*OPEN_ADAPTER_COMPLETE_HANDLER
)(
1296 IN NDIS_HANDLE ProtocolBindingContext
,
1297 IN NDIS_STATUS Status
,
1298 IN NDIS_STATUS OpenErrorStatus
);
1301 (NTAPI
*CLOSE_ADAPTER_COMPLETE_HANDLER
)(
1302 IN NDIS_HANDLE ProtocolBindingContext
,
1303 IN NDIS_STATUS Status
);
1306 (NTAPI
*RESET_COMPLETE_HANDLER
)(
1307 IN NDIS_HANDLE ProtocolBindingContext
,
1308 IN NDIS_STATUS Status
);
1311 (NTAPI
*REQUEST_COMPLETE_HANDLER
)(
1312 IN NDIS_HANDLE ProtocolBindingContext
,
1313 IN PNDIS_REQUEST NdisRequest
,
1314 IN NDIS_STATUS Status
);
1317 (NTAPI
*STATUS_HANDLER
)(
1318 IN NDIS_HANDLE ProtocolBindingContext
,
1319 IN NDIS_STATUS GeneralStatus
,
1320 IN PVOID StatusBuffer
,
1321 IN UINT StatusBufferSize
);
1324 (NTAPI
*STATUS_COMPLETE_HANDLER
)(
1325 IN NDIS_HANDLE ProtocolBindingContext
);
1328 (NTAPI
*SEND_COMPLETE_HANDLER
)(
1329 IN NDIS_HANDLE ProtocolBindingContext
,
1330 IN PNDIS_PACKET Packet
,
1331 IN NDIS_STATUS Status
);
1334 (NTAPI
*WAN_SEND_COMPLETE_HANDLER
)(
1335 IN NDIS_HANDLE ProtocolBindingContext
,
1336 IN PNDIS_WAN_PACKET Packet
,
1337 IN NDIS_STATUS Status
);
1340 (NTAPI
*TRANSFER_DATA_COMPLETE_HANDLER
)(
1341 IN NDIS_HANDLE ProtocolBindingContext
,
1342 IN PNDIS_PACKET Packet
,
1343 IN NDIS_STATUS Status
,
1344 IN UINT BytesTransferred
);
1347 (NTAPI
*WAN_TRANSFER_DATA_COMPLETE_HANDLER
)(
1352 (NTAPI
*RECEIVE_HANDLER
)(
1353 IN NDIS_HANDLE ProtocolBindingContext
,
1354 IN NDIS_HANDLE MacReceiveContext
,
1355 IN PVOID HeaderBuffer
,
1356 IN UINT HeaderBufferSize
,
1357 IN PVOID LookAheadBuffer
,
1358 IN UINT LookaheadBufferSize
,
1359 IN UINT PacketSize
);
1362 (NTAPI
*WAN_RECEIVE_HANDLER
)(
1363 IN NDIS_HANDLE NdisLinkHandle
,
1365 IN ULONG PacketSize
);
1368 (NTAPI
*RECEIVE_COMPLETE_HANDLER
)(
1369 IN NDIS_HANDLE ProtocolBindingContext
);
1372 /* Protocol characteristics for NDIS 3.0 protocols */
1374 #define NDIS30_PROTOCOL_CHARACTERISTICS_S \
1375 UCHAR MajorNdisVersion; \
1376 UCHAR MinorNdisVersion; \
1378 _ANONYMOUS_UNION union { \
1382 OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler; \
1383 CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler; \
1384 _ANONYMOUS_UNION union { \
1385 SEND_COMPLETE_HANDLER SendCompleteHandler; \
1386 WAN_SEND_COMPLETE_HANDLER WanSendCompleteHandler; \
1387 } DUMMYUNIONNAME2; \
1388 _ANONYMOUS_UNION union { \
1389 TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler; \
1390 WAN_TRANSFER_DATA_COMPLETE_HANDLER WanTransferDataCompleteHandler; \
1391 } DUMMYUNIONNAME3; \
1392 RESET_COMPLETE_HANDLER ResetCompleteHandler; \
1393 REQUEST_COMPLETE_HANDLER RequestCompleteHandler; \
1394 _ANONYMOUS_UNION union { \
1395 RECEIVE_HANDLER ReceiveHandler; \
1396 WAN_RECEIVE_HANDLER WanReceiveHandler; \
1397 } DUMMYUNIONNAME4; \
1398 RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler; \
1399 STATUS_HANDLER StatusHandler; \
1400 STATUS_COMPLETE_HANDLER StatusCompleteHandler; \
1403 typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS
{
1404 NDIS30_PROTOCOL_CHARACTERISTICS_S
1405 } NDIS30_PROTOCOL_CHARACTERISTICS
, *PNDIS30_PROTOCOL_CHARACTERISTICS
;
1408 /* Prototypes for NDIS 4.0 protocol characteristics */
1411 (NTAPI
*RECEIVE_PACKET_HANDLER
)(
1412 IN NDIS_HANDLE ProtocolBindingContext
,
1413 IN PNDIS_PACKET Packet
);
1416 (NTAPI
*BIND_HANDLER
)(
1417 OUT PNDIS_STATUS Status
,
1418 IN NDIS_HANDLE BindContext
,
1419 IN PNDIS_STRING DeviceName
,
1420 IN PVOID SystemSpecific1
,
1421 IN PVOID SystemSpecific2
);
1424 (NTAPI
*UNBIND_HANDLER
)(
1425 OUT PNDIS_STATUS Status
,
1426 IN NDIS_HANDLE ProtocolBindingContext
,
1427 IN NDIS_HANDLE UnbindContext
);
1430 (NTAPI
*PNP_EVENT_HANDLER
)(
1431 IN NDIS_HANDLE ProtocolBindingContext
,
1432 IN PNET_PNP_EVENT NetPnPEvent
);
1435 (NTAPI
*UNLOAD_PROTOCOL_HANDLER
)(
1439 /* Protocol characteristics for NDIS 4.0 protocols */
1443 #define NDIS40_PROTOCOL_CHARACTERISTICS_S \
1444 NDIS30_PROTOCOL_CHARACTERISTICS Ndis30Chars; \
1445 RECEIVE_PACKET_HANDLER ReceivePacketHandler; \
1446 BIND_HANDLER BindAdapterHandler; \
1447 UNBIND_HANDLER UnbindAdapterHandler; \
1448 PNP_EVENT_HANDLER PnPEventHandler; \
1449 UNLOAD_PROTOCOL_HANDLER UnloadHandler;
1451 #else /* !__cplusplus */
1453 #define NDIS40_PROTOCOL_CHARACTERISTICS_S \
1454 NDIS30_PROTOCOL_CHARACTERISTICS_S \
1455 RECEIVE_PACKET_HANDLER ReceivePacketHandler; \
1456 BIND_HANDLER BindAdapterHandler; \
1457 UNBIND_HANDLER UnbindAdapterHandler; \
1458 PNP_EVENT_HANDLER PnPEventHandler; \
1459 UNLOAD_PROTOCOL_HANDLER UnloadHandler;
1461 #endif /* __cplusplus */
1463 typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS
{
1464 NDIS40_PROTOCOL_CHARACTERISTICS_S
1465 } NDIS40_PROTOCOL_CHARACTERISTICS
, *PNDIS40_PROTOCOL_CHARACTERISTICS
;
1467 /* Prototypes for NDIS 5.0 protocol characteristics */
1470 (NTAPI
*CO_SEND_COMPLETE_HANDLER
)(
1471 IN NDIS_STATUS Status
,
1472 IN NDIS_HANDLE ProtocolVcContext
,
1473 IN PNDIS_PACKET Packet
);
1476 (NTAPI
*CO_STATUS_HANDLER
)(
1477 IN NDIS_HANDLE ProtocolBindingContext
,
1478 IN NDIS_HANDLE ProtocolVcContext OPTIONAL
,
1479 IN NDIS_STATUS GeneralStatus
,
1480 IN PVOID StatusBuffer
,
1481 IN UINT StatusBufferSize
);
1484 (NTAPI
*CO_RECEIVE_PACKET_HANDLER
)(
1485 IN NDIS_HANDLE ProtocolBindingContext
,
1486 IN NDIS_HANDLE ProtocolVcContext
,
1487 IN PNDIS_PACKET Packet
);
1490 (NTAPI
*CO_AF_REGISTER_NOTIFY_HANDLER
)(
1491 IN NDIS_HANDLE ProtocolBindingContext
,
1492 IN PCO_ADDRESS_FAMILY AddressFamily
);
1494 #ifdef __cplusplus \
1496 #define NDIS50_PROTOCOL_CHARACTERISTICS_S \
1497 NDIS40_PROTOCOL_CHARACTERISTICS Ndis40Chars; \
1498 PVOID ReservedHandlers[4]; \
1499 CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler; \
1500 CO_STATUS_HANDLER CoStatusHandler; \
1501 CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler; \
1502 CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
1504 #else /* !__cplusplus */
1506 #define NDIS50_PROTOCOL_CHARACTERISTICS_S \
1507 NDIS40_PROTOCOL_CHARACTERISTICS_S \
1508 PVOID ReservedHandlers[4]; \
1509 CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler; \
1510 CO_STATUS_HANDLER CoStatusHandler; \
1511 CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler; \
1512 CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
1514 #endif /* !__cplusplus */
1516 typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS
{
1517 NDIS50_PROTOCOL_CHARACTERISTICS_S
1518 } NDIS50_PROTOCOL_CHARACTERISTICS
, *PNDIS50_PROTOCOL_CHARACTERISTICS
;
1520 #if defined(NDIS50) || defined(NDIS51)
1521 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS
{
1522 NDIS50_PROTOCOL_CHARACTERISTICS_S
1523 } NDIS_PROTOCOL_CHARACTERISTICS
, *PNDIS_PROTOCOL_CHARACTERISTICS
;
1524 #elif defined(NDIS40)
1525 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS
{
1526 NDIS40_PROTOCOL_CHARACTERISTICS_S
1527 } NDIS_PROTOCOL_CHARACTERISTICS
, *PNDIS_PROTOCOL_CHARACTERISTICS
;
1529 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS
{
1530 NDIS30_PROTOCOL_CHARACTERISTICS_S
1531 } NDIS_PROTOCOL_CHARACTERISTICS
, *PNDIS_PROTOCOL_CHARACTERISTICS
;
1536 /* Buffer management routines */
1542 OUT PNDIS_STATUS Status
,
1543 OUT PNDIS_BUFFER
*Buffer
,
1544 IN NDIS_HANDLE PoolHandle
,
1545 IN PVOID VirtualAddress
,
1552 NdisAllocateBufferPool(
1553 OUT PNDIS_STATUS Status
,
1554 OUT PNDIS_HANDLE PoolHandle
,
1555 IN UINT NumberOfDescriptors
);
1561 OUT PNDIS_STATUS Status
,
1562 OUT PNDIS_PACKET
*Packet
,
1563 IN NDIS_HANDLE PoolHandle
);
1568 NdisAllocatePacketPool(
1569 OUT PNDIS_STATUS Status
,
1570 OUT PNDIS_HANDLE PoolHandle
,
1571 IN UINT NumberOfDescriptors
,
1572 IN UINT ProtocolReservedLength
);
1574 #define PROTOCOL_RESERVED_SIZE_IN_PACKET (4 * sizeof(PVOID))
1580 OUT PNDIS_STATUS Status
,
1581 OUT PNDIS_BUFFER
*Buffer
,
1582 IN NDIS_HANDLE PoolHandle
,
1583 IN PVOID MemoryDescriptor
,
1590 NdisCopyFromPacketToPacket(
1591 IN PNDIS_PACKET Destination
,
1592 IN UINT DestinationOffset
,
1593 IN UINT BytesToCopy
,
1594 IN PNDIS_PACKET Source
,
1595 IN UINT SourceOffset
,
1596 OUT PUINT BytesCopied
);
1600 * NdisCopyLookaheadData(
1601 * IN PVOID Destination,
1604 * IN ULONG ReceiveFlags);
1607 #if defined(_M_IX86) || defined(_M_AMD64)
1608 #define NdisCopyLookaheadData(Destination, Source, Length, MacOptions) \
1609 RtlCopyMemory(Destination, Source, Length)
1611 #define NdisCopyLookaheadData(Destination, Source, Length, MacOptions) \
1613 if ((MacOptions) & NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA) \
1615 RtlCopyMemory(_Destination, _Source, _Length); \
1619 PUCHAR _Src = (PUCHAR)(Source); \
1620 PUCHAR _Dest = (PUCHAR)(Destination); \
1621 PUCHAR _End = _Dest + (Length); \
1622 while (_Dest < _End) \
1623 *_Dest++ = *_Src++; \
1631 NdisDprAllocatePacket(
1632 OUT PNDIS_STATUS Status
,
1633 OUT PNDIS_PACKET
*Packet
,
1634 IN NDIS_HANDLE PoolHandle
);
1639 NdisDprAllocatePacketNonInterlocked(
1640 OUT PNDIS_STATUS Status
,
1641 OUT PNDIS_PACKET
*Packet
,
1642 IN NDIS_HANDLE PoolHandle
);
1648 IN PNDIS_PACKET Packet
);
1653 NdisDprFreePacketNonInterlocked(
1654 IN PNDIS_PACKET Packet
);
1660 IN NDIS_HANDLE PoolHandle
);
1666 IN PNDIS_PACKET Packet
);
1672 IN NDIS_HANDLE PoolHandle
);
1678 IN PNDIS_PACKET
*PacketsToReturn
,
1679 IN UINT NumberOfPackets
);
1684 NdisUnchainBufferAtBack(
1685 IN OUT PNDIS_PACKET Packet
,
1686 OUT PNDIS_BUFFER
*Buffer
);
1691 NdisUnchainBufferAtFront(
1692 IN OUT PNDIS_PACKET Packet
,
1693 OUT PNDIS_BUFFER
*Buffer
);
1698 NdisAdjustBufferLength(
1699 IN PNDIS_BUFFER Buffer
,
1706 IN PNDIS_BUFFER Buffer
);
1711 NdisBufferVirtualAddress(
1712 IN PNDIS_BUFFER Buffer
);
1717 NDIS_BUFFER_TO_SPAN_PAGES(
1718 IN PNDIS_BUFFER Buffer
);
1724 IN PNDIS_BUFFER Buffer
);
1729 NdisGetBufferPhysicalArraySize(
1730 IN PNDIS_BUFFER Buffer
,
1731 OUT PUINT ArraySize
);
1736 NdisGetFirstBufferFromPacket(
1737 IN PNDIS_PACKET _Packet
,
1738 OUT PNDIS_BUFFER
*_FirstBuffer
,
1739 OUT PVOID
*_FirstBufferVA
,
1740 OUT PUINT _FirstBufferLength
,
1741 OUT PUINT _TotalBufferLength
);
1745 * NdisGetFirstBufferFromPacketSafe(
1746 * IN PNDIS_PACKET _Packet,
1747 * OUT PNDIS_BUFFER * _FirstBuffer,
1748 * OUT PVOID * _FirstBufferVA,
1749 * OUT PUINT _FirstBufferLength,
1750 * OUT PUINT _TotalBufferLength),
1751 * IN MM_PAGE_PRIORITY _Priority)
1753 #define NdisGetFirstBufferFromPacketSafe(_Packet, \
1756 _FirstBufferLength, \
1757 _TotalBufferLength, \
1760 PNDIS_BUFFER _Buffer; \
1762 _Buffer = (_Packet)->Private.Head; \
1763 *(_FirstBuffer) = _Buffer; \
1764 if (_Buffer != NULL) \
1766 *(_FirstBufferVA) = MmGetSystemAddressForMdlSafe(_Buffer, _Priority); \
1767 *(_FirstBufferLength) = MmGetMdlByteCount(_Buffer); \
1768 _Buffer = _Buffer->Next; \
1769 *(_TotalBufferLength) = *(_FirstBufferLength); \
1770 while (_Buffer != NULL) { \
1771 *(_TotalBufferLength) += MmGetMdlByteCount(_Buffer); \
1772 _Buffer = _Buffer->Next; \
1777 *(_FirstBufferVA) = 0; \
1778 *(_FirstBufferLength) = 0; \
1779 *(_TotalBufferLength) = 0; \
1787 IN PNDIS_BUFFER Buffer
,
1788 OUT PVOID
*VirtualAddress OPTIONAL
,
1794 NdisQueryBufferOffset(
1795 IN PNDIS_BUFFER Buffer
,
1801 * NDIS_BUFFER_LINKAGE(
1802 * IN PNDIS_BUFFER Buffer);
1804 #define NDIS_BUFFER_LINKAGE(Buffer)(Buffer)->Next;
1809 * NdisChainBufferAtBack(
1810 * IN OUT PNDIS_PACKET Packet,
1811 * IN OUT PNDIS_BUFFER Buffer)
1813 #define NdisChainBufferAtBack(Packet, \
1816 PNDIS_BUFFER NdisBuffer = (Buffer); \
1818 while (NdisBuffer->Next != NULL) \
1819 NdisBuffer = NdisBuffer->Next; \
1821 NdisBuffer->Next = NULL; \
1823 if ((Packet)->Private.Head != NULL) \
1824 (Packet)->Private.Tail->Next = (Buffer); \
1826 (Packet)->Private.Head = (Buffer); \
1828 (Packet)->Private.Tail = NdisBuffer; \
1829 (Packet)->Private.ValidCounts = FALSE; \
1835 * NdisChainBufferAtFront(
1836 * IN OUT PNDIS_PACKET Packet,
1837 * IN OUT PNDIS_BUFFER Buffer)
1839 #define NdisChainBufferAtFront(Packet, \
1842 PNDIS_BUFFER _NdisBuffer = (Buffer); \
1844 while (_NdisBuffer->Next != NULL) \
1845 _NdisBuffer = _NdisBuffer->Next; \
1847 if ((Packet)->Private.Head == NULL) \
1848 (Packet)->Private.Tail = _NdisBuffer; \
1850 _NdisBuffer->Next = (Packet)->Private.Head; \
1851 (Packet)->Private.Head = (Buffer); \
1852 (Packet)->Private.ValidCounts = FALSE; \
1858 * NdisGetNextBuffer(
1859 * IN PNDIS_BUFFER CurrentBuffer,
1860 * OUT PNDIS_BUFFER * NextBuffer)
1862 #define NdisGetNextBuffer(CurrentBuffer, \
1865 *(NextBuffer) = (CurrentBuffer)->Next; \
1871 * NdisGetPacketFlags(
1872 * IN PNDIS_PACKET Packet);
1874 #define NdisGetPacketFlags(Packet)(Packet)->Private.Flags;
1879 * NdisClearPacketFlags(
1880 * IN PNDIS_PACKET Packet,
1883 #define NdisClearPacketFlags(Packet, Flags) \
1884 (Packet)->Private.Flags &= ~(Flags)
1889 * NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(
1890 * IN PNDIS_PACKET Packet,
1891 * IN PPVOID pMediaSpecificInfo,
1892 * IN PUINT pSizeMediaSpecificInfo);
1894 #define NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \
1895 _pMediaSpecificInfo, \
1896 _pSizeMediaSpecificInfo) \
1898 if (!((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) || \
1899 !((_Packet)->Private.NdisPacketFlags & fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO)) \
1901 *(_pMediaSpecificInfo) = NULL; \
1902 *(_pSizeMediaSpecificInfo) = 0; \
1906 *(_pMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1907 (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation; \
1908 *(_pSizeMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1909 (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo; \
1916 * NDIS_GET_PACKET_PROTOCOL_TYPE(
1917 * IN PNDIS_PACKET Packet);
1919 #define NDIS_GET_PACKET_PROTOCOL_TYPE(_Packet) \
1920 ((_Packet)->Private.Flags & NDIS_PROTOCOL_ID_MASK)
1924 * NDIS_GET_PACKET_HEADER_SIZE(
1925 * IN PNDIS_PACKET Packet);
1927 #define NDIS_GET_PACKET_HEADER_SIZE(_Packet) \
1928 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1929 (_Packet)->Private.NdisPacketOobOffset))->HeaderSize
1934 * NDIS_GET_PACKET_STATUS(
1935 * IN PNDIS_PACKET Packet);
1937 #define NDIS_GET_PACKET_STATUS(_Packet) \
1938 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1939 (_Packet)->Private.NdisPacketOobOffset))->Status
1944 * NDIS_GET_PACKET_TIME_RECEIVED(
1945 * IN PNDIS_PACKET Packet);
1947 #define NDIS_GET_PACKET_TIME_RECEIVED(_Packet) \
1948 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1949 (_Packet)->Private.NdisPacketOobOffset))->TimeReceived
1954 * NDIS_GET_PACKET_TIME_SENT(
1955 * IN PNDIS_PACKET Packet);
1957 #define NDIS_GET_PACKET_TIME_SENT(_Packet) \
1958 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1959 (_Packet)->Private.NdisPacketOobOffset))->TimeSent
1964 * NDIS_GET_PACKET_TIME_TO_SEND(
1965 * IN PNDIS_PACKET Packet);
1967 #define NDIS_GET_PACKET_TIME_TO_SEND(_Packet) \
1968 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1969 (_Packet)->Private.NdisPacketOobOffset))->TimeToSend
1973 * PNDIS_PACKET_OOB_DATA
1974 * NDIS_OOB_DATA_FROM_PACKET(
1975 * IN PNDIS_PACKET Packet);
1977 #define NDIS_OOB_DATA_FROM_PACKET(_Packet) \
1978 (PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1979 (_Packet)->Private.NdisPacketOobOffset)
1985 * IN PNDIS_PACKET Packet,
1986 * OUT PUINT PhysicalBufferCount OPTIONAL,
1987 * OUT PUINT BufferCount OPTIONAL,
1988 * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
1989 * OUT PUINT TotalPacketLength OPTIONAL);
1994 IN PNDIS_PACKET Packet
,
1995 OUT PUINT PhysicalBufferCount OPTIONAL
,
1996 OUT PUINT BufferCount OPTIONAL
,
1997 OUT PNDIS_BUFFER
*FirstBuffer OPTIONAL
,
1998 OUT PUINT TotalPacketLength OPTIONAL
)
2001 *FirstBuffer
= Packet
->Private
.Head
;
2002 if (TotalPacketLength
|| BufferCount
|| PhysicalBufferCount
)
2004 if (!Packet
->Private
.ValidCounts
)
2008 PNDIS_BUFFER NdisBuffer
;
2009 UINT PhysicalBufferCount
= 0;
2010 UINT TotalPacketLength
= 0;
2013 for (NdisBuffer
= Packet
->Private
.Head
;
2014 NdisBuffer
!= (PNDIS_BUFFER
)NULL
;
2015 NdisBuffer
= NdisBuffer
->Next
)
2017 PhysicalBufferCount
+= NDIS_BUFFER_TO_SPAN_PAGES(NdisBuffer
);
2018 NdisQueryBufferOffset(NdisBuffer
, &Offset
, &PacketLength
);
2019 TotalPacketLength
+= PacketLength
;
2022 Packet
->Private
.PhysicalCount
= PhysicalBufferCount
;
2023 Packet
->Private
.TotalLength
= TotalPacketLength
;
2024 Packet
->Private
.Count
= Count
;
2025 Packet
->Private
.ValidCounts
= TRUE
;
2028 if (PhysicalBufferCount
)
2029 *PhysicalBufferCount
= Packet
->Private
.PhysicalCount
;
2032 *BufferCount
= Packet
->Private
.Count
;
2034 if (TotalPacketLength
)
2035 *TotalPacketLength
= Packet
->Private
.TotalLength
;
2041 * NdisQueryPacketLength(
2042 * IN PNDIS_PACKET Packet,
2043 * OUT PUINT PhysicalBufferCount OPTIONAL,
2044 * OUT PUINT BufferCount OPTIONAL,
2045 * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
2046 * OUT PUINT TotalPacketLength OPTIONAL);
2050 NdisQueryPacketLength(
2051 IN PNDIS_PACKET Packet
,
2052 OUT PUINT TotalPacketLength OPTIONAL
)
2054 if (!(Packet
)->Private
.ValidCounts
) \
2055 NdisQueryPacket(Packet
, NULL
, NULL
, NULL
, TotalPacketLength
); \
2057 *(TotalPacketLength
) = (Packet
)->Private
.TotalLength
; \
2063 * NdisRecalculatePacketCounts(
2064 * IN OUT PNDIS_PACKET Packet);
2066 #define NdisRecalculatePacketCounts(Packet) \
2068 PNDIS_BUFFER _Buffer = (Packet)->Private.Head; \
2069 if (_Buffer != NULL) \
2071 while (_Buffer->Next != NULL) \
2073 _Buffer = _Buffer->Next; \
2075 (Packet)->Private.Tail = _Buffer; \
2077 (Packet)->Private.ValidCounts = FALSE; \
2083 * NdisReinitializePacket(
2084 * IN OUT PNDIS_PACKET Packet);
2086 #define NdisReinitializePacket(Packet) \
2088 (Packet)->Private.Head = (PNDIS_BUFFER)NULL; \
2089 (Packet)->Private.ValidCounts = FALSE; \
2095 * NdisSetPacketFlags(
2096 * IN PNDIS_PACKET Packet,
2099 #define NdisSetPacketFlags(Packet, Flags) \
2100 (Packet)->Private.Flags |= (Flags);
2105 * NDIS_SET_PACKET_HEADER_SIZE(
2106 * IN PNDIS_PACKET Packet,
2109 #define NDIS_SET_PACKET_HEADER_SIZE(_Packet, _HdrSize) \
2110 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2111 (_Packet)->Private.NdisPacketOobOffset))->HeaderSize = (_HdrSize)
2116 * NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(
2117 * IN PNDIS_PACKET Packet,
2118 * IN PVOID MediaSpecificInfo,
2119 * IN UINT SizeMediaSpecificInfo);
2121 #define NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \
2122 _MediaSpecificInfo, \
2123 _SizeMediaSpecificInfo) \
2125 if ((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) \
2127 (_Packet)->Private.NdisPacketFlags |= fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO; \
2128 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2129 (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation = \
2130 (_MediaSpecificInfo); \
2131 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2132 (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo = \
2133 (_SizeMediaSpecificInfo); \
2140 * NDIS_SET_PACKET_STATUS(
2141 * IN PNDIS_PACKET Packet,
2142 * IN NDIS_STATUS Status);
2144 #define NDIS_SET_PACKET_STATUS(_Packet, _Status) \
2145 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2146 (_Packet)->Private.NdisPacketOobOffset))->Status = (_Status)
2151 * NDIS_SET_PACKET_TIME_RECEIVED(
2152 * IN PNDIS_PACKET Packet,
2153 * IN ULONGLONG TimeReceived);
2155 #define NDIS_SET_PACKET_TIME_RECEIVED(_Packet, _TimeReceived) \
2156 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2157 (_Packet)->Private.NdisPacketOobOffset))->TimeReceived = (_TimeReceived)
2162 * NDIS_SET_PACKET_TIME_SENT(
2163 * IN PNDIS_PACKET Packet,
2164 * IN ULONGLONG TimeSent);
2166 #define NDIS_SET_PACKET_TIME_SENT(_Packet, _TimeSent) \
2167 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2168 (_Packet)->Private.NdisPacketOobOffset))->TimeSent = (_TimeSent)
2173 * NDIS_SET_PACKET_TIME_TO_SEND(
2174 * IN PNDIS_PACKET Packet,
2175 * IN ULONGLONG TimeToSend);
2177 #define NDIS_SET_PACKET_TIME_TO_SEND(_Packet, _TimeToSend) \
2178 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2179 (_Packet)->Private.NdisPacketOobOffset))->TimeToSend = (_TimeToSend)
2185 * IN PNDIS_PACKET Packet,
2188 #define NdisSetSendFlags(_Packet,_Flags)(_Packet)->Private.Flags = (_Flags)
2192 /* Memory management routines */
2197 NdisCreateLookaheadBufferFromSharedMemory(
2198 IN PVOID pSharedMemory
,
2199 IN UINT LookaheadLength
,
2200 OUT PVOID
*pLookaheadBuffer
);
2205 NdisDestroyLookaheadBufferFromSharedMemory(
2206 IN PVOID pLookaheadBuffer
);
2208 #if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_ARM) || defined(_M_PPC)
2212 * NdisMoveMappedMemory(
2213 * OUT PVOID Destination,
2217 #define NdisMoveMappedMemory(Destination, Source, Length) \
2218 RtlCopyMemory(Destination, Source, Length)
2222 * NdisZeroMappedMemory(
2223 * IN PVOID Destination,
2226 #define NdisZeroMappedMemory(Destination, Length) \
2227 RtlZeroMemory(Destination, Length)
2231 #define NdisMoveMappedMemory(Destination, Source, Length) \
2233 PUCHAR _Dest = Destination, _Src = Source, _End = _Dest + Length; \
2234 while (_Dest < _End) \
2235 *_Dest++ = _Src++; \
2238 #define NdisZeroMappedMemory(Destination, Length) \
2240 PUCHAR _Dest = Destination, _End = _Dest + Length; \
2241 while (_Dest < _End) \
2245 #endif /* _M_IX86 or _M_AMD64 */
2249 * NdisMoveFromMappedMemory(
2250 * OUT PVOID Destination,
2254 #define NdisMoveFromMappedMemory(Destination, Source, Length) \
2255 NdisMoveMappedMemory(Destination, Source, Length)
2259 * NdisMoveToMappedMemory(
2260 * OUT PVOID Destination,
2264 #define NdisMoveToMappedMemory(Destination, Source, Length) \
2265 NdisMoveMappedMemory(Destination, Source, Length)
2269 * NdisMUpdateSharedMemory(
2270 * IN NDIS_HANDLE MiniportAdapterHandle,
2272 * IN PVOID VirtualAddress,
2273 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2275 #define NdisMUpdateSharedMemory(_H, _L, _V, _P) \
2276 NdisUpdateSharedMemory(_H, _L, _V, _P)
2282 OUT PVOID
*VirtualAddress
,
2284 IN UINT MemoryFlags
,
2285 IN NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress
);
2291 IN PVOID VirtualAddress
,
2293 IN UINT MemoryFlags
);
2298 NdisImmediateReadSharedMemory(
2299 IN NDIS_HANDLE WrapperConfigurationContext
,
2300 IN ULONG SharedMemoryAddress
,
2307 NdisImmediateWriteSharedMemory(
2308 IN NDIS_HANDLE WrapperConfigurationContext
,
2309 IN ULONG SharedMemoryAddress
,
2316 NdisMAllocateSharedMemory(
2317 IN NDIS_HANDLE MiniportAdapterHandle
,
2320 OUT PVOID
*VirtualAddress
,
2321 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress
);
2326 NdisMAllocateSharedMemoryAsync(
2327 IN NDIS_HANDLE MiniportAdapterHandle
,
2334 #define NdisUpdateSharedMemory(NdisAdapterHandle, \
2344 NdisUpdateSharedMemory(
2345 IN NDIS_HANDLE NdisAdapterHandle
,
2347 IN PVOID VirtualAddress
,
2348 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress
);
2350 #endif /* defined(NDIS50) */
2354 * NdisGetPhysicalAddressHigh(
2355 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2357 #define NdisGetPhysicalAddressHigh(PhysicalAddress) \
2358 ((PhysicalAddress).HighPart)
2362 * NdisSetPhysicalAddressHigh(
2363 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
2366 #define NdisSetPhysicalAddressHigh(PhysicalAddress, Value) \
2367 ((PhysicalAddress).HighPart) = (Value)
2371 * NdisGetPhysicalAddressLow(
2372 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2374 #define NdisGetPhysicalAddressLow(PhysicalAddress) \
2375 ((PhysicalAddress).LowPart)
2380 * NdisSetPhysicalAddressLow(
2381 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
2384 #define NdisSetPhysicalAddressLow(PhysicalAddress, Value) \
2385 ((PhysicalAddress).LowPart) = (Value)
2389 * NDIS_PHYSICAL_ADDRESS_CONST(
2393 #define NDIS_PHYSICAL_ADDRESS_CONST(Low, High) \
2394 { {(ULONG)(Low), (LONG)(High)} }
2399 * IN CONST VOID *Source1,
2400 * IN CONST VOID *Source2,
2403 #define NdisEqualMemory(Source1, Source2, Length) \
2404 RtlEqualMemory(Source1, Source2, Length)
2409 * IN PVOID Destination,
2413 #define NdisFillMemory(Destination, Length, Fill) \
2414 RtlFillMemory(Destination, Length, Fill)
2419 * OUT PVOID Destination,
2423 #define NdisMoveMemory(Destination, Source, Length) \
2424 RtlCopyMemory(Destination, Source, Length)
2429 * NdisRetrieveUlong(
2430 * IN PULONG DestinationAddress,
2431 * IN PULONG SourceAddress);
2433 #define NdisRetrieveUlong(DestinationAddress, SourceAddress) \
2434 RtlRetrieveUlong(DestinationAddress, SourceAddress)
2440 * IN PULONG DestinationAddress,
2443 #define NdisStoreUlong(DestinationAddress, Value) \
2444 RtlStoreUlong(DestinationAddress, Value)
2450 * IN PVOID Destination,
2453 #define NdisZeroMemory(Destination, Length) \
2454 RtlZeroMemory(Destination, Length)
2457 (NTAPI
*NDIS_BLOCK_INITIALIZER
) (
2459 IN SIZE_T NumberOfBytes
2462 /* Configuration routines */
2467 NdisOpenConfiguration(
2468 OUT PNDIS_STATUS Status
,
2469 OUT PNDIS_HANDLE ConfigurationHandle
,
2470 IN NDIS_HANDLE WrapperConfigurationContext
);
2475 NdisReadNetworkAddress(
2476 OUT PNDIS_STATUS Status
,
2477 OUT PVOID
*NetworkAddress
,
2478 OUT PUINT NetworkAddressLength
,
2479 IN NDIS_HANDLE ConfigurationHandle
);
2484 NdisReadEisaSlotInformation(
2485 OUT PNDIS_STATUS Status
,
2486 IN NDIS_HANDLE WrapperConfigurationContext
,
2487 OUT PUINT SlotNumber
,
2488 OUT PNDIS_EISA_FUNCTION_INFORMATION EisaData
);
2493 NdisReadEisaSlotInformationEx(
2494 OUT PNDIS_STATUS Status
,
2495 IN NDIS_HANDLE WrapperConfigurationContext
,
2496 OUT PUINT SlotNumber
,
2497 OUT PNDIS_EISA_FUNCTION_INFORMATION
*EisaData
,
2498 OUT PUINT NumberOfFunctions
);
2503 NdisReadPciSlotInformation(
2504 IN NDIS_HANDLE NdisAdapterHandle
,
2505 IN ULONG SlotNumber
,
2513 NdisWritePciSlotInformation(
2514 IN NDIS_HANDLE NdisAdapterHandle
,
2515 IN ULONG SlotNumber
,
2522 /* String management routines */
2527 NdisAnsiStringToUnicodeString(
2528 IN OUT PNDIS_STRING DestinationString
,
2529 IN PNDIS_ANSI_STRING SourceString
);
2534 * IN PNDIS_STRING String1,
2535 * IN PNDIS_STRING String2,
2536 * IN BOOLEAN CaseInsensitive);
2538 #define NdisEqualString(_String1, _String2, _CaseInsensitive) \
2539 RtlEqualUnicodeString(_String1, _String2, _CaseInsensitive)
2545 IN OUT PNDIS_ANSI_STRING DestinationString
,
2546 IN PCSTR SourceString
);
2551 NdisInitUnicodeString(
2552 IN OUT PNDIS_STRING DestinationString
,
2553 IN PCWSTR SourceString
);
2558 NdisUnicodeStringToAnsiString(
2559 IN OUT PNDIS_ANSI_STRING DestinationString
,
2560 IN PNDIS_STRING SourceString
);
2562 #define NdisFreeString(_s) NdisFreeMemory((_s).Buffer, (_s).MaximumLength, 0)
2563 #define NdisPrintString(_s) DbgPrint("%ls", (_s).Buffer)
2566 /* Spin lock reoutines */
2571 NdisAllocateSpinLock(
2572 IN PNDIS_SPIN_LOCK SpinLock
);
2578 IN PNDIS_SPIN_LOCK SpinLock
);
2583 NdisAcquireSpinLock(
2584 IN PNDIS_SPIN_LOCK SpinLock
);
2589 NdisReleaseSpinLock(
2590 IN PNDIS_SPIN_LOCK SpinLock
);
2595 NdisDprAcquireSpinLock(
2596 IN PNDIS_SPIN_LOCK SpinLock
);
2601 NdisDprReleaseSpinLock(
2602 IN PNDIS_SPIN_LOCK SpinLock
);
2608 * NdisRawReadPortBufferUchar(
2610 * OUT PUCHAR Buffer,
2613 #define NdisRawReadPortBufferUchar(Port, Buffer, Length) \
2614 READ_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
2618 * NdisRawReadPortBufferUlong(
2620 * OUT PULONG Buffer,
2623 #define NdisRawReadPortBufferUlong(Port, Buffer, Length) \
2624 READ_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
2628 * NdisRawReadPortBufferUshort(
2630 * OUT PUSHORT Buffer,
2633 #define NdisRawReadPortBufferUshort(Port, Buffer, Length) \
2634 READ_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
2639 * NdisRawReadPortUchar(
2643 #define NdisRawReadPortUchar(Port, Data) \
2644 *(Data) = READ_PORT_UCHAR((PUCHAR)(Port))
2648 * NdisRawReadPortUlong(
2652 #define NdisRawReadPortUlong(Port, Data) \
2653 *(Data) = READ_PORT_ULONG((PULONG)(Port))
2657 * NdisRawReadPortUshort(
2659 * OUT PUSHORT Data);
2661 #define NdisRawReadPortUshort(Port, Data) \
2662 *(Data) = READ_PORT_USHORT((PUSHORT)(Port))
2667 * NdisRawWritePortBufferUchar(
2672 #define NdisRawWritePortBufferUchar(Port, Buffer, Length) \
2673 WRITE_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
2677 * NdisRawWritePortBufferUlong(
2682 #define NdisRawWritePortBufferUlong(Port, Buffer, Length) \
2683 WRITE_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
2687 * NdisRawWritePortBufferUshort(
2689 * IN PUSHORT Buffer,
2692 #define NdisRawWritePortBufferUshort(Port, Buffer, Length) \
2693 WRITE_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
2698 * NdisRawWritePortUchar(
2702 #define NdisRawWritePortUchar(Port, Data) \
2703 WRITE_PORT_UCHAR((PUCHAR)(Port), (UCHAR)(Data))
2707 * NdisRawWritePortUlong(
2711 #define NdisRawWritePortUlong(Port, Data) \
2712 WRITE_PORT_ULONG((PULONG)(Port), (ULONG)(Data))
2716 * NdisRawWritePortUshort(
2720 #define NdisRawWritePortUshort(Port, Data) \
2721 WRITE_PORT_USHORT((PUSHORT)(Port), (USHORT)(Data))
2726 * NdisReadRegisterUchar(
2727 * IN PUCHAR Register,
2730 #define NdisReadRegisterUchar(Register, Data) \
2731 *(Data) = *(Register)
2735 * NdisReadRegisterUlong(
2736 * IN PULONG Register,
2739 #define NdisReadRegisterUlong(Register, Data) \
2740 *(Data) = *(Register)
2744 * NdisReadRegisterUshort(
2745 * IN PUSHORT Register,
2746 * OUT PUSHORT Data);
2748 #define NdisReadRegisterUshort(Register, Data) \
2749 *(Data) = *(Register)
2753 * NdisReadRegisterUchar(
2754 * IN PUCHAR Register,
2757 #define NdisWriteRegisterUchar(Register, Data) \
2758 WRITE_REGISTER_UCHAR((Register), (Data))
2762 * NdisReadRegisterUlong(
2763 * IN PULONG Register,
2766 #define NdisWriteRegisterUlong(Register, Data) \
2767 WRITE_REGISTER_ULONG((Register), (Data))
2771 * NdisReadRegisterUshort(
2772 * IN PUSHORT Register,
2775 #define NdisWriteRegisterUshort(Register, Data) \
2776 WRITE_REGISTER_USHORT((Register), (Data))
2783 * NdisInitializeListHead(
2784 * IN PLIST_ENTRY ListHead);
2786 #define NdisInitializeListHead(_ListHead) \
2787 InitializeListHead(_ListHead)
2791 * NdisInterlockedInsertHeadList(
2792 * IN PLIST_ENTRY ListHead,
2793 * IN PLIST_ENTRY ListEntry,
2794 * IN PNDIS_SPIN_LOCK SpinLock);
2796 #define NdisInterlockedInsertHeadList(_ListHead, _ListEntry, _SpinLock) \
2797 ExInterlockedInsertHeadList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
2801 * NdisInterlockedInsertTailList(
2802 * IN PLIST_ENTRY ListHead,
2803 * IN PLIST_ENTRY ListEntry,
2804 * IN PNDIS_SPIN_LOCK SpinLock);
2806 #define NdisInterlockedInsertTailList(_ListHead, _ListEntry, _SpinLock) \
2807 ExInterlockedInsertTailList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
2811 * NdisInterlockedRemoveHeadList(
2812 * IN PLIST_ENTRY ListHead,
2813 * IN PNDIS_SPIN_LOCK SpinLock);
2815 #define NdisInterlockedRemoveHeadList(_ListHead, _SpinLock) \
2816 ExInterlockedRemoveHeadList(_ListHead, &(_SpinLock)->SpinLock)
2820 * NdisInitializeSListHead(
2821 * IN PSLIST_HEADER SListHead);
2823 #define NdisInitializeSListHead(SListHead) ExInitializeSListHead(SListHead)
2826 * USHORT NdisQueryDepthSList(
2827 * IN PSLIST_HEADER SListHead);
2829 #define NdisQueryDepthSList(SListHead) ExQueryDepthSList(SListHead)
2833 /* Interlocked routines */
2837 * NdisInterlockedDecrement(
2840 #define NdisInterlockedDecrement(Addend) InterlockedDecrement(Addend)
2844 * NdisInterlockedIncrement(
2847 #define NdisInterlockedIncrement(Addend) InterlockedIncrement(Addend)
2851 * NdisInterlockedAddUlong(
2853 * IN ULONG Increment,
2854 * IN PNDIS_SPIN_LOCK SpinLock);
2856 #define NdisInterlockedAddUlong(_Addend, _Increment, _SpinLock) \
2857 ExInterlockedAddUlong(_Addend, _Increment, &(_SpinLock)->SpinLock)
2861 /* Miscellaneous routines */
2866 NdisCloseConfiguration(
2867 IN NDIS_HANDLE ConfigurationHandle
);
2872 NdisReadConfiguration(
2873 OUT PNDIS_STATUS Status
,
2874 OUT PNDIS_CONFIGURATION_PARAMETER
*ParameterValue
,
2875 IN NDIS_HANDLE ConfigurationHandle
,
2876 IN PNDIS_STRING Keyword
,
2877 IN NDIS_PARAMETER_TYPE ParameterType
);
2882 NdisWriteConfiguration(
2883 OUT PNDIS_STATUS Status
,
2884 IN NDIS_HANDLE WrapperConfigurationContext
,
2885 IN PNDIS_STRING Keyword
,
2886 IN PNDIS_CONFIGURATION_PARAMETER ParameterValue
);
2891 NdisWriteErrorLogEntry(
2892 IN NDIS_HANDLE NdisAdapterHandle
,
2893 IN NDIS_ERROR_CODE ErrorCode
,
2894 IN ULONG NumberOfErrorValues
,
2899 * NdisStallExecution(
2900 * IN UINT MicrosecondsToStall)
2902 #define NdisStallExecution KeStallExecutionProcessor
2907 NdisGetCurrentSystemTime(
2908 IN PLARGE_INTEGER pSystemTime
);
2913 NdisSystemProcessorCount(VOID
);
2918 NdisGetCurrentProcessorCpuUsage(
2919 OUT PULONG pCpuUsage
);
2923 /* NDIS helper macros */
2927 * NDIS_INIT_FUNCTION(FunctionName)
2929 #define NDIS_INIT_FUNCTION(FunctionName) \
2930 alloc_text(init, FunctionName)
2934 * NDIS_PAGABLE_FUNCTION(FunctionName)
2936 #define NDIS_PAGEABLE_FUNCTION(FunctionName) \
2937 alloc_text(page, FunctionName)
2939 #define NDIS_PAGABLE_FUNCTION NDIS_PAGEABLE_FUNCTION
2942 /* NDIS 4.0 extensions */
2947 NdisMFreeSharedMemory(
2948 IN NDIS_HANDLE MiniportAdapterHandle
,
2951 IN PVOID VirtualAddress
,
2952 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress
);
2957 NdisMWanIndicateReceive(
2958 OUT PNDIS_STATUS Status
,
2959 IN NDIS_HANDLE MiniportAdapterHandle
,
2960 IN NDIS_HANDLE NdisLinkContext
,
2961 IN PUCHAR PacketBuffer
,
2962 IN UINT PacketSize
);
2967 NdisMWanIndicateReceiveComplete(
2968 IN NDIS_HANDLE MiniportAdapterHandle
);
2973 NdisMWanSendComplete(
2974 IN NDIS_HANDLE MiniportAdapterHandle
,
2975 IN PNDIS_WAN_PACKET Packet
,
2976 IN NDIS_STATUS Status
);
2981 NdisPciAssignResources(
2982 IN NDIS_HANDLE NdisMacHandle
,
2983 IN NDIS_HANDLE NdisWrapperHandle
,
2984 IN NDIS_HANDLE WrapperConfigurationContext
,
2985 IN ULONG SlotNumber
,
2986 OUT PNDIS_RESOURCE_LIST
*AssignedResources
);
2989 /* NDIS 5.0 extensions */
2994 NdisAcquireReadWriteLock(
2995 IN PNDIS_RW_LOCK Lock
,
2997 IN PLOCK_STATE LockState
);
3002 NdisAllocateMemoryWithTag(
3003 OUT PVOID
*VirtualAddress
,
3010 NdisAllocatePacketPoolEx(
3011 OUT PNDIS_STATUS Status
,
3012 OUT PNDIS_HANDLE PoolHandle
,
3013 IN UINT NumberOfDescriptors
,
3014 IN UINT NumberOfOverflowDescriptors
,
3015 IN UINT ProtocolReservedLength
);
3020 NdisSetPacketPoolProtocolId(
3021 IN NDIS_HANDLE PacketPoolHandle
,
3022 IN UINT ProtocolId
);
3027 NdisCompletePnPEvent(
3028 IN NDIS_STATUS Status
,
3029 IN NDIS_HANDLE NdisBindingHandle
,
3030 IN PNET_PNP_EVENT NetPnPEvent
);
3035 NdisGetCurrentProcessorCounts(
3036 OUT PULONG pIdleCount
,
3037 OUT PULONG pKernelAndUser
,
3043 NdisGetDriverHandle(
3044 IN PNDIS_HANDLE NdisBindingHandle
,
3045 OUT PNDIS_HANDLE NdisDriverHandle
);
3050 NdisGetReceivedPacket(
3051 IN PNDIS_HANDLE NdisBindingHandle
,
3052 IN PNDIS_HANDLE MacContext
);
3057 NdisGetSystemUpTime(
3058 OUT PULONG pSystemUpTime
);
3063 NdisInitializeReadWriteLock(
3064 IN PNDIS_RW_LOCK Lock
);
3069 NdisMDeregisterDevice(
3070 IN NDIS_HANDLE NdisDeviceHandle
);
3075 NdisMGetDeviceProperty(
3076 IN NDIS_HANDLE MiniportAdapterHandle
,
3077 IN OUT PDEVICE_OBJECT
*PhysicalDeviceObject OPTIONAL
,
3078 IN OUT PDEVICE_OBJECT
*FunctionalDeviceObject OPTIONAL
,
3079 IN OUT PDEVICE_OBJECT
*NextDeviceObject OPTIONAL
,
3080 IN OUT PCM_RESOURCE_LIST
*AllocatedResources OPTIONAL
,
3081 IN OUT PCM_RESOURCE_LIST
*AllocatedResourcesTranslated OPTIONAL
);
3086 NdisMInitializeScatterGatherDma(
3087 IN NDIS_HANDLE MiniportAdapterHandle
,
3088 IN BOOLEAN Dma64BitAddresses
,
3089 IN ULONG MaximumPhysicalMapping
);
3094 NdisMPromoteMiniport(
3095 IN NDIS_HANDLE MiniportAdapterHandle
);
3100 NdisMQueryAdapterInstanceName(
3101 OUT PNDIS_STRING AdapterInstanceName
,
3102 IN NDIS_HANDLE MiniportAdapterHandle
);
3107 NdisMRegisterDevice(
3108 IN NDIS_HANDLE NdisWrapperHandle
,
3109 IN PNDIS_STRING DeviceName
,
3110 IN PNDIS_STRING SymbolicName
,
3111 IN PDRIVER_DISPATCH MajorFunctions
[],
3112 OUT PDEVICE_OBJECT
*pDeviceObject
,
3113 OUT NDIS_HANDLE
*NdisDeviceHandle
);
3118 NdisMRegisterUnloadHandler(
3119 IN NDIS_HANDLE NdisWrapperHandle
,
3120 IN PDRIVER_UNLOAD UnloadHandler
);
3125 NdisMRemoveMiniport(
3126 IN NDIS_HANDLE MiniportAdapterHandle
);
3131 NdisMSetMiniportSecondary(
3132 IN NDIS_HANDLE MiniportAdapterHandle
,
3133 IN NDIS_HANDLE PrimaryMiniportAdapterHandle
);
3138 NdisOpenConfigurationKeyByIndex(
3139 OUT PNDIS_STATUS Status
,
3140 IN NDIS_HANDLE ConfigurationHandle
,
3142 OUT PNDIS_STRING KeyName
,
3143 OUT PNDIS_HANDLE KeyHandle
);
3148 NdisOpenConfigurationKeyByName(
3149 OUT PNDIS_STATUS Status
,
3150 IN NDIS_HANDLE ConfigurationHandle
,
3151 IN PNDIS_STRING SubKeyName
,
3152 OUT PNDIS_HANDLE SubKeyHandle
);
3157 NdisPacketPoolUsage(
3158 IN NDIS_HANDLE PoolHandle
);
3163 NdisQueryAdapterInstanceName(
3164 OUT PNDIS_STRING AdapterInstanceName
,
3165 IN NDIS_HANDLE NdisBindingHandle
);
3170 NdisReadPcmciaAttributeMemory(
3171 IN NDIS_HANDLE NdisAdapterHandle
,
3179 NdisReleaseReadWriteLock(
3180 IN PNDIS_RW_LOCK Lock
,
3181 IN PLOCK_STATE LockState
);
3186 NdisWriteEventLogEntry(
3188 IN NDIS_STATUS EventCode
,
3189 IN ULONG UniqueEventValue
,
3190 IN USHORT NumStrings
,
3191 IN PVOID StringsList OPTIONAL
,
3193 IN PVOID Data OPTIONAL
);
3198 NdisWritePcmciaAttributeMemory(
3199 IN NDIS_HANDLE NdisAdapterHandle
,
3205 /* Connectionless services */
3211 IN NDIS_HANDLE NdisVcHandle
,
3212 IN NDIS_HANDLE ProtocolPartyContext
,
3213 IN OUT PCO_CALL_PARAMETERS CallParameters
,
3214 OUT PNDIS_HANDLE NdisPartyHandle
);
3219 NdisClCloseAddressFamily(
3220 IN NDIS_HANDLE NdisAfHandle
);
3226 IN NDIS_HANDLE NdisVcHandle
,
3227 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
3228 IN PVOID Buffer OPTIONAL
,
3234 NdisClDeregisterSap(
3235 IN NDIS_HANDLE NdisSapHandle
);
3241 IN NDIS_HANDLE NdisPartyHandle
,
3242 IN PVOID Buffer OPTIONAL
,
3248 NdisClIncomingCallComplete(
3249 IN NDIS_STATUS Status
,
3250 IN NDIS_HANDLE NdisVcHandle
,
3251 IN PCO_CALL_PARAMETERS CallParameters
);
3257 IN NDIS_HANDLE NdisVcHandle
,
3258 IN OUT PCO_CALL_PARAMETERS CallParameters
,
3259 IN NDIS_HANDLE ProtocolPartyContext OPTIONAL
,
3260 OUT PNDIS_HANDLE NdisPartyHandle OPTIONAL
);
3265 NdisClModifyCallQoS(
3266 IN NDIS_HANDLE NdisVcHandle
,
3267 IN PCO_CALL_PARAMETERS CallParameters
);
3273 NdisClOpenAddressFamily(
3274 IN NDIS_HANDLE NdisBindingHandle
,
3275 IN PCO_ADDRESS_FAMILY AddressFamily
,
3276 IN NDIS_HANDLE ProtocolAfContext
,
3277 IN PNDIS_CLIENT_CHARACTERISTICS ClCharacteristics
,
3278 IN UINT SizeOfClCharacteristics
,
3279 OUT PNDIS_HANDLE NdisAfHandle
);
3285 IN NDIS_HANDLE NdisAfHandle
,
3286 IN NDIS_HANDLE ProtocolSapContext
,
3288 OUT PNDIS_HANDLE NdisSapHandle
);
3291 /* Call Manager services */
3297 IN NDIS_HANDLE NdisVcHandle
,
3298 IN OUT PCO_CALL_PARAMETERS CallParameters
);
3303 NdisCmAddPartyComplete(
3304 IN NDIS_STATUS Status
,
3305 IN NDIS_HANDLE NdisPartyHandle
,
3306 IN NDIS_HANDLE CallMgrPartyContext OPTIONAL
,
3307 IN PCO_CALL_PARAMETERS CallParameters
);
3312 NdisCmCloseAddressFamilyComplete(
3313 IN NDIS_STATUS Status
,
3314 IN NDIS_HANDLE NdisAfHandle
);
3319 NdisCmCloseCallComplete(
3320 IN NDIS_STATUS Status
,
3321 IN NDIS_HANDLE NdisVcHandle
,
3322 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
);
3328 IN NDIS_HANDLE NdisVcHandle
);
3333 NdisCmDeregisterSapComplete(
3334 IN NDIS_STATUS Status
,
3335 IN NDIS_HANDLE NdisSapHandle
);
3340 NdisCmDispatchCallConnected(
3341 IN NDIS_HANDLE NdisVcHandle
);
3346 NdisCmDispatchIncomingCall(
3347 IN NDIS_HANDLE NdisSapHandle
,
3348 IN NDIS_HANDLE NdisVcHandle
,
3349 IN PCO_CALL_PARAMETERS CallParameters
);
3354 NdisCmDispatchIncomingCallQoSChange(
3355 IN NDIS_HANDLE NdisVcHandle
,
3356 IN PCO_CALL_PARAMETERS CallParameters
);
3361 NdisCmDispatchIncomingCloseCall(
3362 IN NDIS_STATUS CloseStatus
,
3363 IN NDIS_HANDLE NdisVcHandle
,
3364 IN PVOID Buffer OPTIONAL
,
3370 NdisCmDispatchIncomingDropParty(
3371 IN NDIS_STATUS DropStatus
,
3372 IN NDIS_HANDLE NdisPartyHandle
,
3373 IN PVOID Buffer OPTIONAL
,
3379 NdisCmDropPartyComplete(
3380 IN NDIS_STATUS Status
,
3381 IN NDIS_HANDLE NdisPartyHandle
);
3386 NdisCmMakeCallComplete(
3387 IN NDIS_STATUS Status
,
3388 IN NDIS_HANDLE NdisVcHandle
,
3389 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
3390 IN NDIS_HANDLE CallMgrPartyContext OPTIONAL
,
3391 IN PCO_CALL_PARAMETERS CallParameters
);
3396 NdisCmModifyCallQoSComplete(
3397 IN NDIS_STATUS Status
,
3398 IN NDIS_HANDLE NdisVcHandle
,
3399 IN PCO_CALL_PARAMETERS CallParameters
);
3404 NdisCmOpenAddressFamilyComplete(
3405 IN NDIS_STATUS Status
,
3406 IN NDIS_HANDLE NdisAfHandle
,
3407 IN NDIS_HANDLE CallMgrAfContext
);
3412 NdisCmRegisterAddressFamily(
3413 IN NDIS_HANDLE NdisBindingHandle
,
3414 IN PCO_ADDRESS_FAMILY AddressFamily
,
3415 IN PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics
,
3416 IN UINT SizeOfCmCharacteristics
);
3421 NdisCmRegisterSapComplete(
3422 IN NDIS_STATUS Status
,
3423 IN NDIS_HANDLE NdisSapHandle
,
3424 IN NDIS_HANDLE CallMgrSapContext
);
3431 IN NDIS_HANDLE NdisVcHandle
,
3432 IN PCO_CALL_PARAMETERS CallParameters
);
3438 IN NDIS_HANDLE MiniportAdapterHandle
,
3439 IN NDIS_HANDLE NdisAfHandle
,
3440 IN NDIS_HANDLE MiniportVcContext
,
3441 OUT PNDIS_HANDLE NdisVcHandle
);
3446 NdisMCmDeactivateVc(
3447 IN NDIS_HANDLE NdisVcHandle
);
3453 IN NDIS_HANDLE NdisVcHandle
);
3458 NdisMCmRegisterAddressFamily(
3459 IN NDIS_HANDLE MiniportAdapterHandle
,
3460 IN PCO_ADDRESS_FAMILY AddressFamily
,
3461 IN PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics
,
3462 IN UINT SizeOfCmCharacteristics
);
3468 IN NDIS_HANDLE NdisAfHandle
,
3469 IN NDIS_HANDLE NdisVcHandle OPTIONAL
,
3470 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
3471 IN OUT PNDIS_REQUEST NdisRequest
);
3474 /* Connection-oriented services */
3480 IN NDIS_HANDLE NdisBindingHandle
,
3481 IN NDIS_HANDLE NdisAfHandle OPTIONAL
,
3482 IN NDIS_HANDLE ProtocolVcContext
,
3483 IN OUT PNDIS_HANDLE NdisVcHandle
);
3489 IN NDIS_HANDLE NdisVcHandle
);
3495 IN NDIS_HANDLE NdisBindingHandle
,
3496 IN NDIS_HANDLE NdisAfHandle OPTIONAL
,
3497 IN NDIS_HANDLE NdisVcHandle OPTIONAL
,
3498 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
3499 IN OUT PNDIS_REQUEST NdisRequest
);
3504 NdisCoRequestComplete(
3505 IN NDIS_STATUS Status
,
3506 IN NDIS_HANDLE NdisAfHandle
,
3507 IN NDIS_HANDLE NdisVcHandle OPTIONAL
,
3508 IN NDIS_HANDLE NdisPartyHandle OPTIONAL
,
3509 IN PNDIS_REQUEST NdisRequest
);
3515 IN NDIS_HANDLE NdisVcHandle
,
3516 IN PPNDIS_PACKET PacketArray
,
3517 IN UINT NumberOfPackets
);
3522 NdisMCoActivateVcComplete(
3523 IN NDIS_STATUS Status
,
3524 IN NDIS_HANDLE NdisVcHandle
,
3525 IN PCO_CALL_PARAMETERS CallParameters
);
3530 NdisMCoDeactivateVcComplete(
3531 IN NDIS_STATUS Status
,
3532 IN NDIS_HANDLE NdisVcHandle
);
3537 NdisMCoIndicateReceivePacket(
3538 IN NDIS_HANDLE NdisVcHandle
,
3539 IN PPNDIS_PACKET PacketArray
,
3540 IN UINT NumberOfPackets
);
3545 NdisMCoIndicateStatus(
3546 IN NDIS_HANDLE MiniportAdapterHandle
,
3547 IN NDIS_HANDLE NdisVcHandle OPTIONAL
,
3548 IN NDIS_STATUS GeneralStatus
,
3549 IN PVOID StatusBuffer OPTIONAL
,
3550 IN ULONG StatusBufferSize
);
3555 NdisMCoReceiveComplete(
3556 IN NDIS_HANDLE MiniportAdapterHandle
);
3561 NdisMCoRequestComplete(
3562 IN NDIS_STATUS Status
,
3563 IN NDIS_HANDLE MiniportAdapterHandle
,
3564 IN PNDIS_REQUEST Request
);
3569 NdisMCoSendComplete(
3570 IN NDIS_STATUS Status
,
3571 IN NDIS_HANDLE NdisVcHandle
,
3572 IN PNDIS_PACKET Packet
);
3575 /* NDIS 5.0 extensions for intermediate drivers */
3580 NdisIMAssociateMiniport(
3581 IN NDIS_HANDLE DriverHandle
,
3582 IN NDIS_HANDLE ProtocolHandle
);
3587 NdisIMCancelInitializeDeviceInstance(
3588 IN NDIS_HANDLE DriverHandle
,
3589 IN PNDIS_STRING DeviceInstance
);
3594 NdisIMCopySendCompletePerPacketInfo(
3595 IN PNDIS_PACKET DstPacket
,
3596 IN PNDIS_PACKET SrcPacket
);
3601 NdisIMCopySendPerPacketInfo(
3602 IN PNDIS_PACKET DstPacket
,
3603 IN PNDIS_PACKET SrcPacket
);
3608 NdisIMDeregisterLayeredMiniport(
3609 IN NDIS_HANDLE DriverHandle
);
3614 NdisIMGetBindingContext(
3615 IN NDIS_HANDLE NdisBindingHandle
);
3620 NdisIMGetDeviceContext(
3621 IN NDIS_HANDLE MiniportAdapterHandle
);
3626 NdisIMInitializeDeviceInstanceEx(
3627 IN NDIS_HANDLE DriverHandle
,
3628 IN PNDIS_STRING DriverInstance
,
3629 IN NDIS_HANDLE DeviceContext OPTIONAL
);
3634 NdisInterlockedPopEntrySList(
3635 IN PSLIST_HEADER ListHead
,
3636 IN PKSPIN_LOCK Lock
);
3641 NdisInterlockedPushEntrySList(
3642 IN PSLIST_HEADER ListHead
,
3643 IN PSINGLE_LIST_ENTRY ListEntry
,
3644 IN PKSPIN_LOCK Lock
);
3649 NdisQueryBufferSafe(
3650 IN PNDIS_BUFFER Buffer
,
3651 OUT PVOID
*VirtualAddress OPTIONAL
,
3655 /* Prototypes for NDIS_MINIPORT_CHARACTERISTICS */
3658 (NTAPI
*W_CHECK_FOR_HANG_HANDLER
)(
3659 IN NDIS_HANDLE MiniportAdapterContext
);
3662 (NTAPI
*W_DISABLE_INTERRUPT_HANDLER
)(
3663 IN NDIS_HANDLE MiniportAdapterContext
);
3666 (NTAPI
*W_ENABLE_INTERRUPT_HANDLER
)(
3667 IN NDIS_HANDLE MiniportAdapterContext
);
3670 (NTAPI
*W_HALT_HANDLER
)(
3671 IN NDIS_HANDLE MiniportAdapterContext
);
3674 (NTAPI
*W_HANDLE_INTERRUPT_HANDLER
)(
3675 IN NDIS_HANDLE MiniportAdapterContext
);
3678 (NTAPI
*W_INITIALIZE_HANDLER
)(
3679 OUT PNDIS_STATUS OpenErrorStatus
,
3680 OUT PUINT SelectedMediumIndex
,
3681 IN PNDIS_MEDIUM MediumArray
,
3682 IN UINT MediumArraySize
,
3683 IN NDIS_HANDLE MiniportAdapterContext
,
3684 IN NDIS_HANDLE WrapperConfigurationContext
);
3687 (NTAPI
*W_ISR_HANDLER
)(
3688 OUT PBOOLEAN InterruptRecognized
,
3689 OUT PBOOLEAN QueueMiniportHandleInterrupt
,
3690 IN NDIS_HANDLE MiniportAdapterContext
);
3693 (NTAPI
*W_QUERY_INFORMATION_HANDLER
)(
3694 IN NDIS_HANDLE MiniportAdapterContext
,
3696 IN PVOID InformationBuffer
,
3697 IN ULONG InformationBufferLength
,
3698 OUT PULONG BytesWritten
,
3699 OUT PULONG BytesNeeded
);
3702 (NTAPI
*W_RECONFIGURE_HANDLER
)(
3703 OUT PNDIS_STATUS OpenErrorStatus
,
3704 IN NDIS_HANDLE MiniportAdapterContext
,
3705 IN NDIS_HANDLE WrapperConfigurationContext
);
3708 (NTAPI
*W_RESET_HANDLER
)(
3709 OUT PBOOLEAN AddressingReset
,
3710 IN NDIS_HANDLE MiniportAdapterContext
);
3713 (NTAPI
*W_SEND_HANDLER
)(
3714 IN NDIS_HANDLE MiniportAdapterContext
,
3715 IN PNDIS_PACKET Packet
,
3719 (NTAPI
*WM_SEND_HANDLER
)(
3720 IN NDIS_HANDLE MiniportAdapterContext
,
3721 IN NDIS_HANDLE NdisLinkHandle
,
3722 IN PNDIS_WAN_PACKET Packet
);
3725 (NTAPI
*W_SET_INFORMATION_HANDLER
)(
3726 IN NDIS_HANDLE MiniportAdapterContext
,
3728 IN PVOID InformationBuffer
,
3729 IN ULONG InformationBufferLength
,
3730 OUT PULONG BytesRead
,
3731 OUT PULONG BytesNeeded
);
3734 (NTAPI
*W_TRANSFER_DATA_HANDLER
)(
3735 OUT PNDIS_PACKET Packet
,
3736 OUT PUINT BytesTransferred
,
3737 IN NDIS_HANDLE MiniportAdapterContext
,
3738 IN NDIS_HANDLE MiniportReceiveContext
,
3740 IN UINT BytesToTransfer
);
3743 (NTAPI
*WM_TRANSFER_DATA_HANDLER
)(
3747 /* NDIS structures available only to miniport drivers */
3749 #define NDIS30_MINIPORT_CHARACTERISTICS_S \
3750 UCHAR MajorNdisVersion; \
3751 UCHAR MinorNdisVersion; \
3753 W_CHECK_FOR_HANG_HANDLER CheckForHangHandler; \
3754 W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler; \
3755 W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler; \
3756 W_HALT_HANDLER HaltHandler; \
3757 W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler; \
3758 W_INITIALIZE_HANDLER InitializeHandler; \
3759 W_ISR_HANDLER ISRHandler; \
3760 W_QUERY_INFORMATION_HANDLER QueryInformationHandler; \
3761 W_RECONFIGURE_HANDLER ReconfigureHandler; \
3762 W_RESET_HANDLER ResetHandler; \
3763 W_SEND_HANDLER SendHandler; \
3764 W_SET_INFORMATION_HANDLER SetInformationHandler; \
3765 W_TRANSFER_DATA_HANDLER TransferDataHandler;
3767 typedef struct _NDIS30_MINIPORT_CHARACTERISTICS
{
3768 NDIS30_MINIPORT_CHARACTERISTICS_S
3769 } NDIS30_MINIPORT_CHARACTERISTICS
, *PSNDIS30_MINIPORT_CHARACTERISTICS
;
3772 /* Extensions for NDIS 4.0 miniports */
3775 (NTAPI
*W_SEND_PACKETS_HANDLER
)(
3776 IN NDIS_HANDLE MiniportAdapterContext
,
3777 IN PPNDIS_PACKET PacketArray
,
3778 IN UINT NumberOfPackets
);
3781 (NTAPI
*W_RETURN_PACKET_HANDLER
)(
3782 IN NDIS_HANDLE MiniportAdapterContext
,
3783 IN PNDIS_PACKET Packet
);
3786 (NTAPI
*W_ALLOCATE_COMPLETE_HANDLER
)(
3787 IN NDIS_HANDLE MiniportAdapterContext
,
3788 IN PVOID VirtualAddress
,
3789 IN PNDIS_PHYSICAL_ADDRESS PhysicalAddress
,
3795 #define NDIS40_MINIPORT_CHARACTERISTICS_S \
3796 NDIS30_MINIPORT_CHARACTERISTICS Ndis30Chars; \
3797 W_RETURN_PACKET_HANDLER ReturnPacketHandler; \
3798 W_SEND_PACKETS_HANDLER SendPacketsHandler; \
3799 W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
3801 #else /* !__cplusplus */
3803 #define NDIS40_MINIPORT_CHARACTERISTICS_S \
3804 NDIS30_MINIPORT_CHARACTERISTICS_S \
3805 W_RETURN_PACKET_HANDLER ReturnPacketHandler; \
3806 W_SEND_PACKETS_HANDLER SendPacketsHandler; \
3807 W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
3809 #endif /* !__cplusplus */
3811 typedef struct _NDIS40_MINIPORT_CHARACTERISTICS
{
3812 NDIS40_MINIPORT_CHARACTERISTICS_S
3813 } NDIS40_MINIPORT_CHARACTERISTICS
, *PNDIS40_MINIPORT_CHARACTERISTICS
;
3816 /* Extensions for NDIS 5.0 miniports */
3819 (NTAPI
*W_CO_CREATE_VC_HANDLER
)(
3820 IN NDIS_HANDLE MiniportAdapterContext
,
3821 IN NDIS_HANDLE NdisVcHandle
,
3822 OUT PNDIS_HANDLE MiniportVcContext
);
3825 (NTAPI
*W_CO_DELETE_VC_HANDLER
)(
3826 IN NDIS_HANDLE MiniportVcContext
);
3829 (NTAPI
*W_CO_ACTIVATE_VC_HANDLER
)(
3830 IN NDIS_HANDLE MiniportVcContext
,
3831 IN OUT PCO_CALL_PARAMETERS CallParameters
);
3834 (NTAPI
*W_CO_DEACTIVATE_VC_HANDLER
)(
3835 IN NDIS_HANDLE MiniportVcContext
);
3838 (NTAPI
*W_CO_SEND_PACKETS_HANDLER
)(
3839 IN NDIS_HANDLE MiniportVcContext
,
3840 IN PPNDIS_PACKET PacketArray
,
3841 IN UINT NumberOfPackets
);
3844 (NTAPI
*W_CO_REQUEST_HANDLER
)(
3845 IN NDIS_HANDLE MiniportAdapterContext
,
3846 IN NDIS_HANDLE MiniportVcContext OPTIONAL
,
3847 IN OUT PNDIS_REQUEST NdisRequest
);
3851 #define NDIS50_MINIPORT_CHARACTERISTICS_S \
3852 NDIS40_MINIPORT_CHARACTERISTICS Ndis40Chars; \
3853 W_CO_CREATE_VC_HANDLER CoCreateVcHandler; \
3854 W_CO_DELETE_VC_HANDLER CoDeleteVcHandler; \
3855 W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler; \
3856 W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler; \
3857 W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler; \
3858 W_CO_REQUEST_HANDLER CoRequestHandler;
3860 #else /* !__cplusplus */
3862 #define NDIS50_MINIPORT_CHARACTERISTICS_S \
3863 NDIS40_MINIPORT_CHARACTERISTICS_S \
3864 W_CO_CREATE_VC_HANDLER CoCreateVcHandler; \
3865 W_CO_DELETE_VC_HANDLER CoDeleteVcHandler; \
3866 W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler; \
3867 W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler; \
3868 W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler; \
3869 W_CO_REQUEST_HANDLER CoRequestHandler;
3871 #endif /* !__cplusplus */
3873 typedef struct _NDIS50_MINIPORT_CHARACTERISTICS
{
3874 NDIS50_MINIPORT_CHARACTERISTICS_S
3875 } NDIS50_MINIPORT_CHARACTERISTICS
, *PSNDIS50_MINIPORT_CHARACTERISTICS
;
3878 /* Extensions for NDIS 5.1 miniports */
3881 (NTAPI
*W_CANCEL_SEND_PACKETS_HANDLER
)(
3882 IN NDIS_HANDLE MiniportAdapterContext
,
3886 (NTAPI
*W_PNP_EVENT_NOTIFY_HANDLER
)(
3887 IN NDIS_HANDLE MiniportAdapterContext
,
3888 IN NDIS_DEVICE_PNP_EVENT PnPEvent
,
3889 IN PVOID InformationBuffer
,
3890 IN ULONG InformationBufferLength
);
3893 (NTAPI
*W_MINIPORT_SHUTDOWN_HANDLER
)(
3894 IN PVOID ShutdownContext
);
3898 #define NDIS51_MINIPORT_CHARACTERISTICS_S \
3899 NDIS50_MINIPORT_CHARACTERISTICS Ndis50Chars; \
3900 W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler; \
3901 W_PNP_EVENT_NOTIFY_HANDLER PnPEventNotifyHandler; \
3902 W_MINIPORT_SHUTDOWN_HANDLER AdapterShutdownHandler;
3906 #define NDIS51_MINIPORT_CHARACTERISTICS_S \
3907 NDIS50_MINIPORT_CHARACTERISTICS_S \
3908 W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler; \
3909 W_PNP_EVENT_NOTIFY_HANDLER PnPEventNotifyHandler; \
3910 W_MINIPORT_SHUTDOWN_HANDLER AdapterShutdownHandler;
3914 typedef struct _NDIS51_MINIPORT_CHARACTERISTICS
{
3915 NDIS51_MINIPORT_CHARACTERISTICS_S
3916 } NDIS51_MINIPORT_CHARACTERISTICS
, *PSNDIS51_MINIPORT_CHARACTERISTICS
;
3918 #if defined(NDIS51_MINIPORT)
3919 typedef struct _NDIS_MINIPORT_CHARACTERISTICS
{
3920 NDIS51_MINIPORT_CHARACTERISTICS_S
3921 } NDIS_MINIPORT_CHARACTERISTICS
, *PNDIS_MINIPORT_CHARACTERISTICS
;
3922 #elif defined(NDIS50_MINIPORT)
3923 typedef struct _NDIS_MINIPORT_CHARACTERISTICS
{
3924 NDIS50_MINIPORT_CHARACTERISTICS_S
3925 } NDIS_MINIPORT_CHARACTERISTICS
, *PNDIS_MINIPORT_CHARACTERISTICS
;
3926 #elif defined(NDIS40_MINIPORT)
3927 typedef struct _NDIS_MINIPORT_CHARACTERISTICS
{
3928 NDIS40_MINIPORT_CHARACTERISTICS_S
3929 } NDIS_MINIPORT_CHARACTERISTICS
, *PNDIS_MINIPORT_CHARACTERISTICS
;
3931 typedef struct _NDIS_MINIPORT_CHARACTERISTICS
{
3932 NDIS30_MINIPORT_CHARACTERISTICS_S
3933 } NDIS_MINIPORT_CHARACTERISTICS
, *PNDIS_MINIPORT_CHARACTERISTICS
;
3938 (NTAPI
*SEND_HANDLER
)(
3939 IN NDIS_HANDLE MacBindingHandle
,
3940 IN PNDIS_PACKET Packet
);
3943 (NTAPI
*TRANSFER_DATA_HANDLER
)(
3944 IN NDIS_HANDLE MacBindingHandle
,
3945 IN NDIS_HANDLE MacReceiveContext
,
3947 IN UINT BytesToTransfer
,
3948 OUT PNDIS_PACKET Packet
,
3949 OUT PUINT BytesTransferred
);
3952 (NTAPI
*RESET_HANDLER
)(
3953 IN NDIS_HANDLE MacBindingHandle
);
3956 (NTAPI
*REQUEST_HANDLER
)(
3957 IN NDIS_HANDLE MacBindingHandle
,
3958 IN PNDIS_REQUEST NdisRequest
);
3962 /* Structures available only to full MAC drivers */
3965 (NTAPI
*PNDIS_INTERRUPT_SERVICE
)(
3966 IN PVOID InterruptContext
);
3969 (NTAPI
*PNDIS_DEFERRED_PROCESSING
)(
3970 IN PVOID SystemSpecific1
,
3971 IN PVOID InterruptContext
,
3972 IN PVOID SystemSpecific2
,
3973 IN PVOID SystemSpecific3
);
3977 typedef struct _NDIS_MINIPORT_BLOCK NDIS_MINIPORT_BLOCK
, *PNDIS_MINIPORT_BLOCK
;
3978 typedef struct _NDIS_PROTOCOL_BLOCK NDIS_PROTOCOL_BLOCK
, *PNDIS_PROTOCOL_BLOCK
;
3979 typedef struct _NDIS_OPEN_BLOCK NDIS_OPEN_BLOCK
, *PNDIS_OPEN_BLOCK
;
3980 typedef struct _NDIS_M_DRIVER_BLOCK NDIS_M_DRIVER_BLOCK
, *PNDIS_M_DRIVER_BLOCK
;
3981 typedef struct _NDIS_AF_LIST NDIS_AF_LIST
, *PNDIS_AF_LIST
;
3984 // FIXME: Should be typedef struct _X_FILTER ETH_FILTER, *PETH_FILTER;
3986 typedef PVOID ETH_FILTER
, *PETH_FILTER
;
3989 typedef struct _NDIS_MINIPORT_INTERRUPT
{
3990 PKINTERRUPT InterruptObject
;
3991 KSPIN_LOCK DpcCountLock
;
3992 PVOID MiniportIdField
;
3993 W_ISR_HANDLER MiniportIsr
;
3994 W_HANDLE_INTERRUPT_HANDLER MiniportDpc
;
3996 PNDIS_MINIPORT_BLOCK Miniport
;
3999 KEVENT DpcsCompletedEvent
;
4000 BOOLEAN SharedInterrupt
;
4001 BOOLEAN IsrRequested
;
4002 } NDIS_MINIPORT_INTERRUPT
, *PNDIS_MINIPORT_INTERRUPT
;
4004 typedef struct _NDIS_MINIPORT_TIMER
{
4007 PNDIS_TIMER_FUNCTION MiniportTimerFunction
;
4008 PVOID MiniportTimerContext
;
4009 PNDIS_MINIPORT_BLOCK Miniport
;
4010 struct _NDIS_MINIPORT_TIMER
*NextDeferredTimer
;
4011 } NDIS_MINIPORT_TIMER
, *PNDIS_MINIPORT_TIMER
;
4013 typedef struct _NDIS_INTERRUPT
{
4014 PKINTERRUPT InterruptObject
;
4015 KSPIN_LOCK DpcCountLock
;
4016 PNDIS_INTERRUPT_SERVICE MacIsr
;
4017 PNDIS_DEFERRED_PROCESSING MacDpc
;
4019 PVOID InterruptContext
;
4022 KEVENT DpcsCompletedEvent
;
4023 } NDIS_INTERRUPT
, *PNDIS_INTERRUPT
;
4026 typedef enum _NDIS_WORK_ITEM_TYPE
{
4027 NdisWorkItemRequest
,
4029 NdisWorkItemReturnPackets
,
4030 NdisWorkItemResetRequested
,
4031 NdisWorkItemResetInProgress
,
4033 NdisWorkItemSendLoopback
,
4034 NdisWorkItemMiniportCallback
,
4036 } NDIS_WORK_ITEM_TYPE
, *PNDIS_WORK_ITEM_TYPE
;
4038 #define NUMBER_OF_WORK_ITEM_TYPES NdisMaxWorkItems
4039 #define NUMBER_OF_SINGLE_WORK_ITEMS 6
4041 typedef struct _NDIS_MINIPORT_WORK_ITEM
{
4042 SINGLE_LIST_ENTRY Link
;
4043 NDIS_WORK_ITEM_TYPE WorkItemType
;
4044 PVOID WorkItemContext
;
4045 } NDIS_MINIPORT_WORK_ITEM
, *PNDIS_MINIPORT_WORK_ITEM
;
4047 struct _NDIS_WORK_ITEM
;
4048 typedef VOID (*NDIS_PROC
)(struct _NDIS_WORK_ITEM
*, PVOID
);
4049 typedef struct _NDIS_WORK_ITEM
4053 UCHAR WrapperReserved
[8*sizeof(PVOID
)];
4054 } NDIS_WORK_ITEM
, *PNDIS_WORK_ITEM
;
4056 typedef struct _NDIS_BIND_PATHS
{
4058 NDIS_STRING Paths
[1];
4059 } NDIS_BIND_PATHS
, *PNDIS_BIND_PATHS
;
4063 (NTAPI
*ETH_RCV_COMPLETE_HANDLER
)(
4064 IN PETH_FILTER Filter
);
4067 (NTAPI
*ETH_RCV_INDICATE_HANDLER
)(
4068 IN PETH_FILTER Filter
,
4069 IN NDIS_HANDLE MacReceiveContext
,
4071 IN PVOID HeaderBuffer
,
4072 IN UINT HeaderBufferSize
,
4073 IN PVOID LookaheadBuffer
,
4074 IN UINT LookaheadBufferSize
,
4075 IN UINT PacketSize
);
4078 (NTAPI
*FDDI_RCV_COMPLETE_HANDLER
)(
4079 IN PFDDI_FILTER Filter
);
4082 (NTAPI
*FDDI_RCV_INDICATE_HANDLER
)(
4083 IN PFDDI_FILTER Filter
,
4084 IN NDIS_HANDLE MacReceiveContext
,
4086 IN UINT AddressLength
,
4087 IN PVOID HeaderBuffer
,
4088 IN UINT HeaderBufferSize
,
4089 IN PVOID LookaheadBuffer
,
4090 IN UINT LookaheadBufferSize
,
4091 IN UINT PacketSize
);
4094 (NTAPI
*FILTER_PACKET_INDICATION_HANDLER
)(
4095 IN NDIS_HANDLE Miniport
,
4096 IN PPNDIS_PACKET PacketArray
,
4097 IN UINT NumberOfPackets
);
4100 (NTAPI
*TR_RCV_COMPLETE_HANDLER
)(
4101 IN PTR_FILTER Filter
);
4104 (NTAPI
*TR_RCV_INDICATE_HANDLER
)(
4105 IN PTR_FILTER Filter
,
4106 IN NDIS_HANDLE MacReceiveContext
,
4107 IN PVOID HeaderBuffer
,
4108 IN UINT HeaderBufferSize
,
4109 IN PVOID LookaheadBuffer
,
4110 IN UINT LookaheadBufferSize
,
4111 IN UINT PacketSize
);
4114 (NTAPI
*WAN_RCV_COMPLETE_HANDLER
)(
4115 IN NDIS_HANDLE MiniportAdapterHandle
,
4116 IN NDIS_HANDLE NdisLinkContext
);
4119 (NTAPI
*WAN_RCV_HANDLER
)(
4120 OUT PNDIS_STATUS Status
,
4121 IN NDIS_HANDLE MiniportAdapterHandle
,
4122 IN NDIS_HANDLE NdisLinkContext
,
4124 IN ULONG PacketSize
);
4127 (FASTCALL
*NDIS_M_DEQUEUE_WORK_ITEM
)(
4128 IN PNDIS_MINIPORT_BLOCK Miniport
,
4129 IN NDIS_WORK_ITEM_TYPE WorkItemType
,
4130 OUT PVOID
*WorkItemContext
);
4133 (FASTCALL
*NDIS_M_QUEUE_NEW_WORK_ITEM
)(
4134 IN PNDIS_MINIPORT_BLOCK Miniport
,
4135 IN NDIS_WORK_ITEM_TYPE WorkItemType
,
4136 IN PVOID WorkItemContext
);
4139 (FASTCALL
*NDIS_M_QUEUE_WORK_ITEM
)(
4140 IN PNDIS_MINIPORT_BLOCK Miniport
,
4141 IN NDIS_WORK_ITEM_TYPE WorkItemType
,
4142 IN PVOID WorkItemContext
);
4145 (NTAPI
*NDIS_M_REQ_COMPLETE_HANDLER
)(
4146 IN NDIS_HANDLE MiniportAdapterHandle
,
4147 IN NDIS_STATUS Status
);
4150 (NTAPI
*NDIS_M_RESET_COMPLETE_HANDLER
)(
4151 IN NDIS_HANDLE MiniportAdapterHandle
,
4152 IN NDIS_STATUS Status
,
4153 IN BOOLEAN AddressingReset
);
4156 (NTAPI
*NDIS_M_SEND_COMPLETE_HANDLER
)(
4157 IN NDIS_HANDLE MiniportAdapterHandle
,
4158 IN PNDIS_PACKET Packet
,
4159 IN NDIS_STATUS Status
);
4162 (NTAPI
*NDIS_M_SEND_RESOURCES_HANDLER
)(
4163 IN NDIS_HANDLE MiniportAdapterHandle
);
4166 (FASTCALL
*NDIS_M_START_SENDS
)(
4167 IN PNDIS_MINIPORT_BLOCK Miniport
);
4170 (NTAPI
*NDIS_M_STATUS_HANDLER
)(
4171 IN NDIS_HANDLE MiniportHandle
,
4172 IN NDIS_STATUS GeneralStatus
,
4173 IN PVOID StatusBuffer
,
4174 IN UINT StatusBufferSize
);
4177 (NTAPI
*NDIS_M_STS_COMPLETE_HANDLER
)(
4178 IN NDIS_HANDLE MiniportAdapterHandle
);
4181 (NTAPI
*NDIS_M_TD_COMPLETE_HANDLER
)(
4182 IN NDIS_HANDLE MiniportAdapterHandle
,
4183 IN PNDIS_PACKET Packet
,
4184 IN NDIS_STATUS Status
,
4185 IN UINT BytesTransferred
);
4187 typedef VOID (NTAPI
*NDIS_WM_SEND_COMPLETE_HANDLER
)(
4188 IN NDIS_HANDLE MiniportAdapterHandle
,
4190 IN NDIS_STATUS Status
);
4195 #define ARC_SEND_BUFFERS 8
4196 #define ARC_HEADER_SIZE 4
4198 typedef struct _NDIS_ARC_BUF
{
4199 NDIS_HANDLE ArcnetBufferPool
;
4200 PUCHAR ArcnetLookaheadBuffer
;
4202 ARC_BUFFER_LIST ArcnetBuffers
[ARC_SEND_BUFFERS
];
4203 } NDIS_ARC_BUF
, *PNDIS_ARC_BUF
;
4207 typedef struct _NDIS_LOG
{
4208 PNDIS_MINIPORT_BLOCK Miniport
;
4216 } NDIS_LOG
, *PNDIS_LOG
;
4219 #define FILTERDBS_ARCNET_S \
4222 #define FILTERDBS_ARCNET_S \
4224 #endif /* !ARCNET */
4226 #define FILTERDBS_S \
4227 _ANONYMOUS_UNION union { \
4228 PETH_FILTER EthDB; \
4229 PNULL_FILTER NullDB; \
4232 PFDDI_FILTER FddiDB; \
4235 typedef struct _FILTERDBS
{
4237 } FILTERDBS
, *PFILTERDBS
;
4240 struct _NDIS_MINIPORT_BLOCK
{
4242 PNDIS_MINIPORT_BLOCK NextMiniport
;
4243 PNDIS_M_DRIVER_BLOCK DriverHandle
;
4244 NDIS_HANDLE MiniportAdapterContext
;
4245 UNICODE_STRING MiniportName
;
4246 PNDIS_BIND_PATHS BindPaths
;
4247 NDIS_HANDLE OpenQueue
;
4249 NDIS_HANDLE DeviceContext
;
4253 UCHAR AssignedProcessor
;
4255 PNDIS_REQUEST MediaRequest
;
4256 PNDIS_MINIPORT_INTERRUPT Interrupt
;
4259 LIST_ENTRY PacketList
;
4260 PNDIS_PACKET FirstPendingPacket
;
4261 PNDIS_PACKET ReturnPacketsQueue
;
4262 ULONG RequestBuffer
;
4263 PVOID SetMCastBuffer
;
4264 PNDIS_MINIPORT_BLOCK PrimaryMiniport
;
4265 PVOID WrapperContext
;
4266 PVOID BusDataContext
;
4267 ULONG PnPCapabilities
;
4268 PCM_RESOURCE_LIST Resources
;
4269 NDIS_TIMER WakeUpDpcTimer
;
4270 UNICODE_STRING BaseName
;
4271 UNICODE_STRING SymbolicLinkName
;
4272 ULONG CheckForHangSeconds
;
4274 USHORT CFHangCurrentTick
;
4275 NDIS_STATUS ResetStatus
;
4276 NDIS_HANDLE ResetOpen
;
4278 FILTER_PACKET_INDICATION_HANDLER PacketIndicateHandler
;
4279 NDIS_M_SEND_COMPLETE_HANDLER SendCompleteHandler
;
4280 NDIS_M_SEND_RESOURCES_HANDLER SendResourcesHandler
;
4281 NDIS_M_RESET_COMPLETE_HANDLER ResetCompleteHandler
;
4282 NDIS_MEDIUM MediaType
;
4284 NDIS_INTERFACE_TYPE BusType
;
4285 NDIS_INTERFACE_TYPE AdapterType
;
4286 PDEVICE_OBJECT DeviceObject
;
4287 PDEVICE_OBJECT PhysicalDeviceObject
;
4288 PDEVICE_OBJECT NextDeviceObject
;
4289 PMAP_REGISTER_ENTRY MapRegisters
;
4290 PNDIS_AF_LIST CallMgrAfList
;
4291 PVOID MiniportThread
;
4293 USHORT SetInfoBufLen
;
4294 USHORT MaxSendPackets
;
4295 NDIS_STATUS FakeStatus
;
4297 PUNICODE_STRING pAdapterInstanceName
;
4298 PNDIS_MINIPORT_TIMER TimerQueue
;
4300 PNDIS_REQUEST PendingRequest
;
4301 UINT MaximumLongAddresses
;
4302 UINT MaximumShortAddresses
;
4303 UINT CurrentLookahead
;
4304 UINT MaximumLookahead
;
4305 W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler
;
4306 W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler
;
4307 W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler
;
4308 W_SEND_PACKETS_HANDLER SendPacketsHandler
;
4309 NDIS_M_START_SENDS DeferredSendHandler
;
4310 ETH_RCV_INDICATE_HANDLER EthRxIndicateHandler
;
4311 TR_RCV_INDICATE_HANDLER TrRxIndicateHandler
;
4312 FDDI_RCV_INDICATE_HANDLER FddiRxIndicateHandler
;
4313 ETH_RCV_COMPLETE_HANDLER EthRxCompleteHandler
;
4314 TR_RCV_COMPLETE_HANDLER TrRxCompleteHandler
;
4315 FDDI_RCV_COMPLETE_HANDLER FddiRxCompleteHandler
;
4316 NDIS_M_STATUS_HANDLER StatusHandler
;
4317 NDIS_M_STS_COMPLETE_HANDLER StatusCompleteHandler
;
4318 NDIS_M_TD_COMPLETE_HANDLER TDCompleteHandler
;
4319 NDIS_M_REQ_COMPLETE_HANDLER QueryCompleteHandler
;
4320 NDIS_M_REQ_COMPLETE_HANDLER SetCompleteHandler
;
4321 NDIS_WM_SEND_COMPLETE_HANDLER WanSendCompleteHandler
;
4322 WAN_RCV_HANDLER WanRcvHandler
;
4323 WAN_RCV_COMPLETE_HANDLER WanRcvCompleteHandler
;
4324 #if defined(NDIS_WRAPPER)
4325 PNDIS_MINIPORT_BLOCK NextGlobalMiniport
;
4326 SINGLE_LIST_ENTRY WorkQueue
[NUMBER_OF_WORK_ITEM_TYPES
];
4327 SINGLE_LIST_ENTRY SingleWorkItems
[NUMBER_OF_SINGLE_WORK_ITEMS
];
4330 UCHAR ArcnetAddress
;
4332 _ANONYMOUS_UNION
union {
4334 PNDIS_ARC_BUF ArcBuf
;
4340 PCM_RESOURCE_LIST AllocatedResources
;
4341 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
4342 SINGLE_LIST_ENTRY PatternList
;
4343 NDIS_PNP_CAPABILITIES PMCapabilities
;
4344 DEVICE_CAPABILITIES DeviceCaps
;
4346 DEVICE_POWER_STATE CurrentDevicePowerState
;
4348 SYSTEM_POWER_STATE WaitWakeSystemState
;
4349 LARGE_INTEGER VcIndex
;
4350 KSPIN_LOCK VcCountLock
;
4351 LIST_ENTRY WmiEnabledVcs
;
4352 PNDIS_GUID pNdisGuidMap
;
4353 PNDIS_GUID pCustomGuidMap
;
4355 USHORT cNdisGuidMap
;
4356 USHORT cCustomGuidMap
;
4357 USHORT CurrentMapRegister
;
4358 PKEVENT AllocationEvent
;
4359 USHORT BaseMapRegistersNeeded
;
4360 USHORT SGMapRegistersNeeded
;
4361 ULONG MaximumPhysicalMapping
;
4362 NDIS_TIMER MediaDisconnectTimer
;
4363 USHORT MediaDisconnectTimeOut
;
4364 USHORT InstanceNumber
;
4365 NDIS_EVENT OpenReadyEvent
;
4366 NDIS_PNP_DEVICE_STATE PnPDeviceState
;
4367 NDIS_PNP_DEVICE_STATE OldPnPDeviceState
;
4368 PGET_SET_DEVICE_DATA SetBusData
;
4369 PGET_SET_DEVICE_DATA GetBusData
;
4373 NDIS_STATS NdisStats
;
4377 PNDIS_PACKET IndicatedPacket
[MAXIMUM_PROCESSORS
];
4378 PKEVENT RemoveReadyEvent
;
4379 PKEVENT AllOpensClosedEvent
;
4380 PKEVENT AllRequestsCompletedEvent
;
4382 NDIS_MINIPORT_WORK_ITEM WorkItemBuffer
[NUMBER_OF_SINGLE_WORK_ITEMS
];
4383 PDMA_ADAPTER SystemAdapterObject
;
4384 ULONG DriverVerifyFlags
;
4386 USHORT InternalResetCount
;
4387 USHORT MiniportResetCount
;
4388 USHORT MediaSenseConnectCount
;
4389 USHORT MediaSenseDisconnectCount
;
4390 PNDIS_PACKET
*xPackets
;
4391 ULONG UserModeOpenReferences
;
4392 _ANONYMOUS_UNION
union {
4393 PVOID SavedSendHandler
;
4394 PVOID SavedWanSendHandler
;
4396 PVOID SavedSendPacketsHandler
;
4397 PVOID SavedCancelSendPacketsHandler
;
4398 W_SEND_PACKETS_HANDLER WSendPacketsHandler
;
4399 ULONG MiniportAttributes
;
4400 PDMA_ADAPTER SavedSystemAdapterObject
;
4402 USHORT CFHangXTicks
;
4404 ULONG IndicatedPacketsCount
;
4405 ULONG PhysicalMediumType
;
4406 PNDIS_REQUEST LastRequest
;
4407 LONG DmaAdapterRefCount
;
4413 KSPIN_LOCK TimerQueueLock
;
4414 PKEVENT ResetCompletedEvent
;
4415 PKEVENT QueuedBindingCompletedEvent
;
4416 PKEVENT DmaResourcesReleasedEvent
;
4417 FILTER_PACKET_INDICATION_HANDLER SavedPacketIndicateHandler
;
4418 ULONG RegisteredInterrupts
;
4419 PNPAGED_LOOKASIDE_LIST SGListLookasideList
;
4420 ULONG ScatterGatherListSize
;
4425 /* Handler prototypes for NDIS_OPEN_BLOCK */
4427 typedef NDIS_STATUS (NTAPI
*WAN_SEND_HANDLER
)(
4428 IN NDIS_HANDLE MacBindingHandle
,
4429 IN NDIS_HANDLE LinkHandle
,
4432 /* NDIS 4.0 extension */
4434 typedef VOID (NTAPI
*SEND_PACKETS_HANDLER
)(
4435 IN NDIS_HANDLE MiniportAdapterContext
,
4436 IN PPNDIS_PACKET PacketArray
,
4437 IN UINT NumberOfPackets
);
4439 #if defined(NDIS_WRAPPER)
4440 #define NDIS_COMMON_OPEN_BLOCK_WRAPPER_S \
4443 KSPIN_LOCK SpinLock; \
4444 NDIS_HANDLE FilterHandle; \
4445 ULONG ProtocolOptions; \
4446 USHORT CurrentLookahead; \
4447 USHORT ConnectDampTicks; \
4448 USHORT DisconnectDampTicks; \
4449 W_SEND_HANDLER WSendHandler; \
4450 W_TRANSFER_DATA_HANDLER WTransferDataHandler; \
4451 W_SEND_PACKETS_HANDLER WSendPacketsHandler; \
4452 W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler; \
4453 ULONG WakeUpEnable; \
4454 PKEVENT CloseCompleteEvent; \
4456 ULONG AfReferences; \
4457 PNDIS_OPEN_BLOCK NextGlobalOpen;
4459 #define NDIS_COMMON_OPEN_BLOCK_WRAPPER_S
4462 #define NDIS_COMMON_OPEN_BLOCK_S \
4464 NDIS_HANDLE BindingHandle; \
4465 PNDIS_MINIPORT_BLOCK MiniportHandle; \
4466 PNDIS_PROTOCOL_BLOCK ProtocolHandle; \
4467 NDIS_HANDLE ProtocolBindingContext; \
4468 PNDIS_OPEN_BLOCK MiniportNextOpen; \
4469 PNDIS_OPEN_BLOCK ProtocolNextOpen; \
4470 NDIS_HANDLE MiniportAdapterContext; \
4471 BOOLEAN Reserved1; \
4472 BOOLEAN Reserved2; \
4473 BOOLEAN Reserved3; \
4474 BOOLEAN Reserved4; \
4475 PNDIS_STRING BindDeviceName; \
4476 KSPIN_LOCK Reserved5; \
4477 PNDIS_STRING RootDeviceName; \
4478 _ANONYMOUS_UNION union { \
4479 SEND_HANDLER SendHandler; \
4480 WAN_SEND_HANDLER WanSendHandler; \
4482 TRANSFER_DATA_HANDLER TransferDataHandler; \
4483 SEND_COMPLETE_HANDLER SendCompleteHandler; \
4484 TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler; \
4485 RECEIVE_HANDLER ReceiveHandler; \
4486 RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler; \
4487 WAN_RECEIVE_HANDLER WanReceiveHandler; \
4488 REQUEST_COMPLETE_HANDLER RequestCompleteHandler; \
4489 RECEIVE_PACKET_HANDLER ReceivePacketHandler; \
4490 SEND_PACKETS_HANDLER SendPacketsHandler; \
4491 RESET_HANDLER ResetHandler; \
4492 REQUEST_HANDLER RequestHandler; \
4493 RESET_COMPLETE_HANDLER ResetCompleteHandler; \
4494 STATUS_HANDLER StatusHandler; \
4495 STATUS_COMPLETE_HANDLER StatusCompleteHandler; \
4496 NDIS_COMMON_OPEN_BLOCK_WRAPPER_S
4498 typedef struct _NDIS_COMMON_OPEN_BLOCK
{
4499 NDIS_COMMON_OPEN_BLOCK_S
4500 } NDIS_COMMON_OPEN_BLOCK
;
4502 struct _NDIS_OPEN_BLOCK
4505 NDIS_COMMON_OPEN_BLOCK NdisCommonOpenBlock
;
4507 NDIS_COMMON_OPEN_BLOCK_S
4513 /* Routines for NDIS miniport drivers */
4518 NdisInitializeWrapper(
4519 OUT PNDIS_HANDLE NdisWrapperHandle
,
4520 IN PVOID SystemSpecific1
,
4521 IN PVOID SystemSpecific2
,
4522 IN PVOID SystemSpecific3
);
4527 NdisMAllocateMapRegisters(
4528 IN NDIS_HANDLE MiniportAdapterHandle
,
4530 IN NDIS_DMA_SIZE DmaSize
,
4531 IN ULONG PhysicalMapRegistersNeeded
,
4532 IN ULONG MaximumPhysicalMapping
);
4536 * NdisMArcIndicateReceive(
4537 * IN NDIS_HANDLE MiniportAdapterHandle,
4538 * IN PUCHAR HeaderBuffer,
4539 * IN PUCHAR DataBuffer,
4542 #define NdisMArcIndicateReceive(MiniportAdapterHandle, \
4547 ArcFilterDprIndicateReceive( \
4548 (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->ArcDB), \
4556 * NdisMArcIndicateReceiveComplete(
4557 * IN NDIS_HANDLE MiniportAdapterHandle);
4559 #define NdisMArcIndicateReceiveComplete(MiniportAdapterHandle) \
4561 if (((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->EthDB) \
4563 NdisMEthIndicateReceiveComplete(_H); \
4566 ArcFilterDprIndicateReceiveComplete( \
4567 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->ArcDB); \
4574 IN NDIS_HANDLE LogHandle
);
4580 IN NDIS_HANDLE MiniportAdapterHandle
,
4582 OUT PNDIS_HANDLE LogHandle
);
4587 NdisMDeregisterAdapterShutdownHandler(
4588 IN NDIS_HANDLE MiniportHandle
);
4593 NdisMDeregisterInterrupt(
4594 IN PNDIS_MINIPORT_INTERRUPT Interrupt
);
4599 NdisMDeregisterIoPortRange(
4600 IN NDIS_HANDLE MiniportAdapterHandle
,
4601 IN UINT InitialPort
,
4602 IN UINT NumberOfPorts
,
4603 IN PVOID PortOffset
);
4607 * NdisMEthIndicateReceive(
4608 * IN NDIS_HANDLE MiniportAdapterHandle,
4609 * IN NDIS_HANDLE MiniportReceiveContext,
4610 * IN PVOID HeaderBuffer,
4611 * IN UINT HeaderBufferSize,
4612 * IN PVOID LookaheadBuffer,
4613 * IN UINT LookaheadBufferSize,
4614 * IN UINT PacketSize);
4616 #define NdisMEthIndicateReceive(MiniportAdapterHandle, \
4617 MiniportReceiveContext, \
4621 LookaheadBufferSize, \
4624 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxIndicateHandler)( \
4625 ((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthDB, \
4626 (MiniportReceiveContext), \
4629 (HeaderBufferSize), \
4630 (LookaheadBuffer), \
4631 (LookaheadBufferSize), \
4637 * NdisMEthIndicateReceiveComplete(
4638 * IN NDIS_HANDLE MiniportAdapterHandle);
4640 #define NdisMEthIndicateReceiveComplete(MiniportAdapterHandle) \
4642 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxCompleteHandler)( \
4643 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->EthDB); \
4648 * NdisMFddiIndicateReceive(
4649 * IN NDIS_HANDLE MiniportAdapterHandle,
4650 * IN NDIS_HANDLE MiniportReceiveContext,
4651 * IN PVOID HeaderBuffer,
4652 * IN UINT HeaderBufferSize,
4653 * IN PVOID LookaheadBuffer,
4654 * IN UINT LookaheadBufferSize,
4655 * IN UINT PacketSize);
4657 #define NdisMFddiIndicateReceive(MiniportAdapterHandle, \
4658 MiniportReceiveContext, \
4662 LookaheadBufferSize, \
4665 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxIndicateHandler)( \
4666 (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiDB), \
4667 (MiniportReceiveContext), \
4668 (PUCHAR)(HeaderBuffer) + 1, \
4669 (((*(PUCHAR*)(HeaderBuffer)) & 0x40) ? \
4670 FDDI_LENGTH_OF_LONG_ADDRESS : \
4671 FDDI_LENGTH_OF_SHORT_ADDRESS), \
4673 (HeaderBufferSize), \
4674 (LookaheadBuffer), \
4675 (LookaheadBufferSize), \
4683 * NdisMFddiIndicateReceiveComplete(
4684 * IN NDIS_HANDLE MiniportAdapterHandle);
4686 #define NdisMFddiIndicateReceiveComplete(MiniportAdapterHandle) \
4688 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxCompleteHandler)( \
4689 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FddiDB); \
4696 IN NDIS_HANDLE LogHandle
);
4701 NdisMFreeMapRegisters(
4702 IN NDIS_HANDLE MiniportAdapterHandle
);
4707 * NdisMIndicateReceivePacket(
4708 * IN NDIS_HANDLE MiniportAdapterHandle,
4709 * IN PPNDIS_PACKET ReceivePackets,
4710 * IN UINT NumberOfPackets);
4712 #define NdisMIndicateReceivePacket(MiniportAdapterHandle, \
4713 ReceivePackets, NumberOfPackets) \
4714 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->PacketIndicateHandler)( \
4715 MiniportAdapterHandle, ReceivePackets, NumberOfPackets)
4719 * NdisMIndicateStatus(
4720 * IN NDIS_HANDLE MiniportAdapterHandle,
4721 * IN NDIS_STATUS GeneralStatus,
4722 * IN PVOID StatusBuffer,
4723 * IN UINT StatusBufferSize);
4726 #define NdisMIndicateStatus(MiniportAdapterHandle, \
4727 GeneralStatus, StatusBuffer, StatusBufferSize) \
4728 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->StatusHandler)( \
4729 MiniportAdapterHandle, GeneralStatus, StatusBuffer, StatusBufferSize)
4733 * NdisMIndicateStatusComplete(
4734 * IN NDIS_HANDLE MiniportAdapterHandle);
4736 #define NdisMIndicateStatusComplete(MiniportAdapterHandle) \
4737 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->StatusCompleteHandler)( \
4738 MiniportAdapterHandle)
4742 * NdisMInitializeWrapper(
4743 * OUT PNDIS_HANDLE NdisWrapperHandle,
4744 * IN PVOID SystemSpecific1,
4745 * IN PVOID SystemSpecific2,
4746 * IN PVOID SystemSpecific3);
4748 #define NdisMInitializeWrapper(NdisWrapperHandle, \
4752 NdisInitializeWrapper((NdisWrapperHandle), \
4753 (SystemSpecific1), \
4754 (SystemSpecific2), \
4761 OUT PVOID
*VirtualAddress
,
4762 IN NDIS_HANDLE MiniportAdapterHandle
,
4763 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress
,
4768 * NdisMQueryInformationComplete(
4769 * IN NDIS_HANDLE MiniportAdapterHandle,
4770 * IN NDIS_STATUS Status);
4772 #define NdisMQueryInformationComplete(MiniportAdapterHandle, Status) \
4773 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->QueryCompleteHandler)(MiniportAdapterHandle, Status)
4778 NdisMRegisterAdapterShutdownHandler(
4779 IN NDIS_HANDLE MiniportHandle
,
4780 IN PVOID ShutdownContext
,
4781 IN ADAPTER_SHUTDOWN_HANDLER ShutdownHandler
);
4786 NdisMRegisterInterrupt(
4787 OUT PNDIS_MINIPORT_INTERRUPT Interrupt
,
4788 IN NDIS_HANDLE MiniportAdapterHandle
,
4789 IN UINT InterruptVector
,
4790 IN UINT InterruptLevel
,
4791 IN BOOLEAN RequestIsr
,
4792 IN BOOLEAN SharedInterrupt
,
4793 IN NDIS_INTERRUPT_MODE InterruptMode
);
4798 NdisMRegisterIoPortRange(
4799 OUT PVOID
*PortOffset
,
4800 IN NDIS_HANDLE MiniportAdapterHandle
,
4801 IN UINT InitialPort
,
4802 IN UINT NumberOfPorts
);
4807 NdisMRegisterMiniport(
4808 IN NDIS_HANDLE NdisWrapperHandle
,
4809 IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics
,
4810 IN UINT CharacteristicsLength
);
4816 IN PNDIS_MINIPORT_TIMER Timer
,
4817 IN UINT MillisecondsToDelay
);
4822 NdisMInitializeTimer(
4823 IN OUT PNDIS_MINIPORT_TIMER Timer
,
4824 IN NDIS_HANDLE MiniportAdapterHandle
,
4825 IN PNDIS_TIMER_FUNCTION TimerFunction
,
4826 IN PVOID FunctionContext
);
4831 NdisMSetPeriodicTimer(
4832 IN PNDIS_MINIPORT_TIMER Timer
,
4833 IN UINT MillisecondPeriod
);
4839 IN PNDIS_MINIPORT_TIMER Timer
,
4840 OUT PBOOLEAN TimerCancelled
);
4842 #if !defined(NDIS_WRAPPER)
4846 * NdisMResetComplete(
4847 * IN NDIS_HANDLE MiniportAdapterHandle,
4848 * IN NDIS_STATUS Status,
4849 * IN BOOLEAN AddressingReset);
4851 #define NdisMResetComplete(MiniportAdapterHandle, \
4855 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->ResetCompleteHandler)( \
4856 MiniportAdapterHandle, Status, AddressingReset); \
4861 * NdisMSendComplete(
4862 * IN NDIS_HANDLE MiniportAdapterHandle,
4863 * IN PNDIS_PACKET Packet,
4864 * IN NDIS_STATUS Status);
4866 #define NdisMSendComplete(MiniportAdapterHandle, \
4870 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendCompleteHandler)( \
4871 MiniportAdapterHandle, Packet, Status); \
4876 * NdisMSendResourcesAvailable(
4877 * IN NDIS_HANDLE MiniportAdapterHandle);
4879 #define NdisMSendResourcesAvailable(MiniportAdapterHandle) \
4881 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendResourcesHandler)( \
4882 MiniportAdapterHandle); \
4887 * NdisMTransferDataComplete(
4888 * IN NDIS_HANDLE MiniportAdapterHandle,
4889 * IN PNDIS_PACKET Packet,
4890 * IN NDIS_STATUS Status,
4891 * IN UINT BytesTransferred);
4893 #define NdisMTransferDataComplete(MiniportAdapterHandle, \
4898 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TDCompleteHandler)( \
4899 MiniportAdapterHandle, Packet, Status, BytesTransferred) \
4902 #endif /* !_NDIS_ */
4907 * NdisMSetAttributes(
4908 * IN NDIS_HANDLE MiniportAdapterHandle,
4909 * IN NDIS_HANDLE MiniportAdapterContext,
4910 * IN BOOLEAN BusMaster,
4911 * IN NDIS_INTERFACE_TYPE AdapterType);
4913 #define NdisMSetAttributes(MiniportAdapterHandle, \
4914 MiniportAdapterContext, \
4917 NdisMSetAttributesEx(MiniportAdapterHandle, \
4918 MiniportAdapterContext, \
4920 (BusMaster) ? NDIS_ATTRIBUTE_BUS_MASTER : 0, \
4926 NdisMSetAttributesEx(
4927 IN NDIS_HANDLE MiniportAdapterHandle
,
4928 IN NDIS_HANDLE MiniportAdapterContext
,
4929 IN UINT CheckForHangTimeInSeconds OPTIONAL
,
4930 IN ULONG AttributeFlags
,
4931 IN NDIS_INTERFACE_TYPE AdapterType
);
4935 * NdisMSetInformationComplete(
4936 * IN NDIS_HANDLE MiniportAdapterHandle,
4937 * IN NDIS_STATUS Status);
4939 #define NdisMSetInformationComplete(MiniportAdapterHandle, \
4941 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SetCompleteHandler)( \
4942 MiniportAdapterHandle, Status)
4948 IN ULONG MicrosecondsToSleep
);
4953 NdisMSynchronizeWithInterrupt(
4954 IN PNDIS_MINIPORT_INTERRUPT Interrupt
,
4955 IN PVOID SynchronizeFunction
,
4956 IN PVOID SynchronizeContext
);
4960 * NdisMTrIndicateReceive(
4961 * IN NDIS_HANDLE MiniportAdapterHandle,
4962 * IN NDIS_HANDLE MiniportReceiveContext,
4963 * IN PVOID HeaderBuffer,
4964 * IN UINT HeaderBufferSize,
4965 * IN PVOID LookaheadBuffer,
4966 * IN UINT LookaheadBufferSize,
4967 * IN UINT PacketSize);
4969 #define NdisMTrIndicateReceive(MiniportAdapterHandle, \
4970 MiniportReceiveContext, \
4974 LookaheadBufferSize, \
4977 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxIndicateHandler)( \
4978 (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrDB), \
4979 (MiniportReceiveContext), \
4982 (HeaderBufferSize), \
4983 (LookaheadBuffer), \
4984 (LookaheadBufferSize), \
4990 * NdisMTrIndicateReceiveComplete(
4991 * IN NDIS_HANDLE MiniportAdapterHandle);
4993 #define NdisMTrIndicateReceiveComplete(MiniportAdapterHandle) \
4995 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxCompleteHandler)( \
4996 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->TrDB); \
5003 IN NDIS_HANDLE LogHandle
,
5005 IN UINT LogBufferSize
);
5010 NdisMQueryAdapterResources(
5011 OUT PNDIS_STATUS Status
,
5012 IN NDIS_HANDLE WrapperConfigurationContext
,
5013 OUT PNDIS_RESOURCE_LIST ResourceList
,
5014 IN OUT PUINT BufferSize
);
5019 NdisTerminateWrapper(
5020 IN NDIS_HANDLE NdisWrapperHandle
,
5021 IN PVOID SystemSpecific
);
5027 IN NDIS_HANDLE MiniportAdapterHandle
,
5028 IN PVOID VirtualAddress
,
5033 /* Event functions */
5038 NdisInitializeEvent(
5039 IN PNDIS_EVENT Event
);
5045 IN PNDIS_EVENT Event
);
5051 IN PNDIS_EVENT Event
);
5057 IN PNDIS_EVENT Event
,
5062 /* NDIS intermediate miniport structures */
5064 typedef VOID (NTAPI
*W_MINIPORT_CALLBACK
)(
5065 IN NDIS_HANDLE MiniportAdapterContext
,
5066 IN PVOID CallbackContext
);
5070 /* Routines for intermediate miniport drivers */
5075 NdisIMDeInitializeDeviceInstance(
5076 IN NDIS_HANDLE NdisMiniportHandle
);
5080 * NdisIMInitializeDeviceInstance(
5081 * IN NDIS_HANDLE DriverHandle,
5082 * IN PNDIS_STRING DeviceInstance);
5084 #define NdisIMInitializeDeviceInstance(DriverHandle, DeviceInstance) \
5085 NdisIMInitializeDeviceInstanceEx(DriverHandle, DeviceInstance, NULL)
5090 NdisIMRegisterLayeredMiniport(
5091 IN NDIS_HANDLE NdisWrapperHandle
,
5092 IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics
,
5093 IN UINT CharacteristicsLength
,
5094 OUT PNDIS_HANDLE DriverHandle
);
5097 /* Functions obsoleted by NDIS 5.0 */
5103 IN PNDIS_HANDLE NdisDmaHandle
);
5108 NdisSetupDmaTransfer(
5109 OUT PNDIS_STATUS Status
,
5110 IN PNDIS_HANDLE NdisDmaHandle
,
5111 IN PNDIS_BUFFER Buffer
,
5114 IN BOOLEAN WriteToDevice
);
5119 NdisUpcaseUnicodeString(
5120 OUT PUNICODE_STRING DestinationString
,
5121 IN PUNICODE_STRING SourceString
);
5124 /* Routines for NDIS protocol drivers */
5130 OUT PNDIS_STATUS Status
,
5131 IN NDIS_HANDLE NdisBindingHandle
,
5132 IN PNDIS_REQUEST NdisRequest
);
5138 OUT PNDIS_STATUS Status
,
5139 IN NDIS_HANDLE NdisBindingHandle
);
5145 OUT PNDIS_STATUS Status
,
5146 IN NDIS_HANDLE NdisBindingHandle
,
5147 IN PNDIS_PACKET Packet
);
5153 IN NDIS_HANDLE NdisBindingHandle
,
5154 IN PPNDIS_PACKET PacketArray
,
5155 IN UINT NumberOfPackets
);
5161 OUT PNDIS_STATUS Status
,
5162 IN NDIS_HANDLE NdisBindingHandle
,
5163 IN NDIS_HANDLE MacReceiveContext
,
5165 IN UINT BytesToTransfer
,
5166 IN OUT PNDIS_PACKET Packet
,
5167 OUT PUINT BytesTransferred
);
5173 OUT PNDIS_STATUS Status
,
5174 IN NDIS_HANDLE NdisBindingHandle
);
5179 NdisCompleteBindAdapter(
5180 IN NDIS_HANDLE BindAdapterContext
,
5181 IN NDIS_STATUS Status
,
5182 IN NDIS_STATUS OpenStatus
);
5187 NdisCompleteUnbindAdapter(
5188 IN NDIS_HANDLE UnbindAdapterContext
,
5189 IN NDIS_STATUS Status
);
5194 NdisDeregisterProtocol(
5195 OUT PNDIS_STATUS Status
,
5196 IN NDIS_HANDLE NdisProtocolHandle
);
5202 OUT PNDIS_STATUS Status
,
5203 OUT PNDIS_STATUS OpenErrorStatus
,
5204 OUT PNDIS_HANDLE NdisBindingHandle
,
5205 OUT PUINT SelectedMediumIndex
,
5206 IN PNDIS_MEDIUM MediumArray
,
5207 IN UINT MediumArraySize
,
5208 IN NDIS_HANDLE NdisProtocolHandle
,
5209 IN NDIS_HANDLE ProtocolBindingContext
,
5210 IN PNDIS_STRING AdapterName
,
5211 IN UINT OpenOptions
,
5212 IN PSTRING AddressingInformation
);
5217 NdisOpenProtocolConfiguration(
5218 OUT PNDIS_STATUS Status
,
5219 OUT PNDIS_HANDLE ConfigurationHandle
,
5220 IN PNDIS_STRING ProtocolSection
);
5225 NdisRegisterProtocol(
5226 OUT PNDIS_STATUS Status
,
5227 OUT PNDIS_HANDLE NdisProtocolHandle
,
5228 IN PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics
,
5229 IN UINT CharacteristicsLength
);
5234 NdisScheduleWorkItem(
5235 IN PNDIS_WORK_ITEM WorkItem
);
5237 /* Obsoleted in Windows XP */
5239 /* Prototypes for NDIS_MAC_CHARACTERISTICS */
5241 typedef NDIS_STATUS (*OPEN_ADAPTER_HANDLER
)(
5242 OUT PNDIS_STATUS OpenErrorStatus
,
5243 OUT NDIS_HANDLE
*MacBindingHandle
,
5244 OUT PUINT SelectedMediumIndex
,
5245 IN PNDIS_MEDIUM MediumArray
,
5246 IN UINT MediumArraySize
,
5247 IN NDIS_HANDLE NdisBindingContext
,
5248 IN NDIS_HANDLE MacAdapterContext
,
5249 IN UINT OpenOptions
,
5250 IN PSTRING AddressingInformation OPTIONAL
);
5252 typedef NDIS_STATUS (NTAPI
*CLOSE_ADAPTER_HANDLER
)(
5253 IN NDIS_HANDLE MacBindingHandle
);
5255 typedef NDIS_STATUS (NTAPI
*WAN_TRANSFER_DATA_HANDLER
)(
5258 typedef NDIS_STATUS (NTAPI
*QUERY_GLOBAL_STATISTICS_HANDLER
)(
5259 IN NDIS_HANDLE MacAdapterContext
,
5260 IN PNDIS_REQUEST NdisRequest
);
5262 typedef VOID (NTAPI
*UNLOAD_MAC_HANDLER
)(
5263 IN NDIS_HANDLE MacMacContext
);
5265 typedef NDIS_STATUS (NTAPI
*ADD_ADAPTER_HANDLER
)(
5266 IN NDIS_HANDLE MacMacContext
,
5267 IN NDIS_HANDLE WrapperConfigurationContext
,
5268 IN PNDIS_STRING AdapterName
);
5270 typedef VOID (*REMOVE_ADAPTER_HANDLER
)(
5271 IN NDIS_HANDLE MacAdapterContext
);
5273 typedef struct _NDIS_MAC_CHARACTERISTICS
{
5274 UCHAR MajorNdisVersion
;
5275 UCHAR MinorNdisVersion
;
5278 OPEN_ADAPTER_HANDLER OpenAdapterHandler
;
5279 CLOSE_ADAPTER_HANDLER CloseAdapterHandler
;
5280 SEND_HANDLER SendHandler
;
5281 TRANSFER_DATA_HANDLER TransferDataHandler
;
5282 RESET_HANDLER ResetHandler
;
5283 REQUEST_HANDLER RequestHandler
;
5284 QUERY_GLOBAL_STATISTICS_HANDLER QueryGlobalStatisticsHandler
;
5285 UNLOAD_MAC_HANDLER UnloadMacHandler
;
5286 ADD_ADAPTER_HANDLER AddAdapterHandler
;
5287 REMOVE_ADAPTER_HANDLER RemoveAdapterHandler
;
5289 } NDIS_MAC_CHARACTERISTICS
, *PNDIS_MAC_CHARACTERISTICS
;
5291 typedef NDIS_MAC_CHARACTERISTICS NDIS_WAN_MAC_CHARACTERISTICS
;
5292 typedef NDIS_WAN_MAC_CHARACTERISTICS
*PNDIS_WAN_MAC_CHARACTERISTICS
;
5298 #endif /* __NDIS_H */