3 * @copy 2012 MinGW.org project
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the "Software"),
7 * to deal in the Software without restriction, including without limitation
8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 * and/or sell copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, subject to the following conditions:
12 * The above copyright notice and this permission notice (including the next
13 * paragraph) shall be included in all copies or substantial portions of the
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
26 #pragma GCC system_header
30 * Network Device Interface Specification definitions
31 * DEFINES: i386 - Target platform is i386
32 * _NDIS_ - Define only for NDIS library
33 * NDIS_MINIPORT_DRIVER - Define only for NDIS miniport drivers
34 * NDIS40 - Use NDIS 4.0 structures by default
35 * NDIS50 - Use NDIS 5.0 structures by default
36 * NDIS50_MINIPORT - Building NDIS 5.0 miniport driver
37 * NDIS51_MINIPORT - Building NDIS 5.1 miniport driver
51 #define NDISAPI DECLSPEC_EXPORT
53 #define NDISAPI DECLSPEC_IMPORT
56 #if defined(NDIS50_MINIPORT)
59 #define NDIS_MINIPORT_MAJOR_VERSION 5
60 #define NDIS_MINIPORT_MINOR_VERSION 0
62 #endif /* NDIS50_MINIPORT */
64 #if defined(NDIS51_MINIPORT)
67 #define NDIS_MINIPORT_MAJOR_VERSION 5
68 #define NDIS_MINIPORT_MINOR_VERSION 1
70 #endif /* NDIS51_MINIPORT */
72 /* NDIS 3.0 is default */
73 #if !defined(NDIS30) || !defined(NDIS40) || !defined(NDIS50) || !defined(NDIS51)
75 #endif /* !NDIS30 || !NDIS40 || !NDIS50 || !NDIS51 */
79 typedef PVOID QUEUED_CLOSE;
82 typedef ULONG NDIS_OID, *PNDIS_OID;
84 typedef struct _X_FILTER FDDI_FILTER, *PFDDI_FILTER;
85 typedef struct _X_FILTER TR_FILTER, *PTR_FILTER;
86 typedef struct _X_FILTER NULL_FILTER, *PNULL_FILTER;
88 typedef struct _REFERENCE {
90 USHORT ReferenceCount;
92 } REFERENCE, * PREFERENCE;
97 typedef struct _NDIS_SPIN_LOCK {
100 } NDIS_SPIN_LOCK, * PNDIS_SPIN_LOCK;
102 typedef struct _NDIS_EVENT {
104 } NDIS_EVENT, *PNDIS_EVENT;
106 typedef PVOID NDIS_HANDLE, *PNDIS_HANDLE;
107 typedef int NDIS_STATUS, *PNDIS_STATUS;
109 typedef ANSI_STRING NDIS_ANSI_STRING, *PNDIS_ANSI_STRING;
110 typedef UNICODE_STRING NDIS_STRING, *PNDIS_STRING;
112 typedef MDL NDIS_BUFFER, *PNDIS_BUFFER;
113 typedef ULONG NDIS_ERROR_CODE, *PNDIS_ERROR_CODE;
116 /* NDIS_STATUS constants */
117 #define NDIS_STATUS_SUCCESS ((NDIS_STATUS)STATUS_SUCCESS)
118 #define NDIS_STATUS_PENDING ((NDIS_STATUS)STATUS_PENDING)
119 #define NDIS_STATUS_NOT_RECOGNIZED ((NDIS_STATUS)0x00010001L)
120 #define NDIS_STATUS_NOT_COPIED ((NDIS_STATUS)0x00010002L)
121 #define NDIS_STATUS_NOT_ACCEPTED ((NDIS_STATUS)0x00010003L)
122 #define NDIS_STATUS_CALL_ACTIVE ((NDIS_STATUS)0x00010007L)
123 #define NDIS_STATUS_ONLINE ((NDIS_STATUS)0x40010003L)
124 #define NDIS_STATUS_RESET_START ((NDIS_STATUS)0x40010004L)
125 #define NDIS_STATUS_RESET_END ((NDIS_STATUS)0x40010005L)
126 #define NDIS_STATUS_RING_STATUS ((NDIS_STATUS)0x40010006L)
127 #define NDIS_STATUS_CLOSED ((NDIS_STATUS)0x40010007L)
128 #define NDIS_STATUS_WAN_LINE_UP ((NDIS_STATUS)0x40010008L)
129 #define NDIS_STATUS_WAN_LINE_DOWN ((NDIS_STATUS)0x40010009L)
130 #define NDIS_STATUS_WAN_FRAGMENT ((NDIS_STATUS)0x4001000AL)
131 #define NDIS_STATUS_MEDIA_CONNECT ((NDIS_STATUS)0x4001000BL)
132 #define NDIS_STATUS_MEDIA_DISCONNECT ((NDIS_STATUS)0x4001000CL)
133 #define NDIS_STATUS_HARDWARE_LINE_UP ((NDIS_STATUS)0x4001000DL)
134 #define NDIS_STATUS_HARDWARE_LINE_DOWN ((NDIS_STATUS)0x4001000EL)
135 #define NDIS_STATUS_INTERFACE_UP ((NDIS_STATUS)0x4001000FL)
136 #define NDIS_STATUS_INTERFACE_DOWN ((NDIS_STATUS)0x40010010L)
137 #define NDIS_STATUS_MEDIA_BUSY ((NDIS_STATUS)0x40010011L)
138 #define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION ((NDIS_STATUS)0x40010012L)
139 #define NDIS_STATUS_WW_INDICATION NDIS_STATUS_MEDIA_SPECIFIC_INDICATION
140 #define NDIS_STATUS_LINK_SPEED_CHANGE ((NDIS_STATUS)0x40010013L)
141 #define NDIS_STATUS_WAN_GET_STATS ((NDIS_STATUS)0x40010014L)
142 #define NDIS_STATUS_WAN_CO_FRAGMENT ((NDIS_STATUS)0x40010015L)
143 #define NDIS_STATUS_WAN_CO_LINKPARAMS ((NDIS_STATUS)0x40010016L)
145 #define NDIS_STATUS_NOT_RESETTABLE ((NDIS_STATUS)0x80010001L)
146 #define NDIS_STATUS_SOFT_ERRORS ((NDIS_STATUS)0x80010003L)
147 #define NDIS_STATUS_HARD_ERRORS ((NDIS_STATUS)0x80010004L)
148 #define NDIS_STATUS_BUFFER_OVERFLOW ((NDIS_STATUS)STATUS_BUFFER_OVERFLOW)
150 #define NDIS_STATUS_FAILURE ((NDIS_STATUS)STATUS_UNSUCCESSFUL)
151 #define NDIS_STATUS_RESOURCES ((NDIS_STATUS)STATUS_INSUFFICIENT_RESOURCES)
152 #define NDIS_STATUS_CLOSING ((NDIS_STATUS)0xC0010002L)
153 #define NDIS_STATUS_BAD_VERSION ((NDIS_STATUS)0xC0010004L)
154 #define NDIS_STATUS_BAD_CHARACTERISTICS ((NDIS_STATUS)0xC0010005L)
155 #define NDIS_STATUS_ADAPTER_NOT_FOUND ((NDIS_STATUS)0xC0010006L)
156 #define NDIS_STATUS_OPEN_FAILED ((NDIS_STATUS)0xC0010007L)
157 #define NDIS_STATUS_DEVICE_FAILED ((NDIS_STATUS)0xC0010008L)
158 #define NDIS_STATUS_MULTICAST_FULL ((NDIS_STATUS)0xC0010009L)
159 #define NDIS_STATUS_MULTICAST_EXISTS ((NDIS_STATUS)0xC001000AL)
160 #define NDIS_STATUS_MULTICAST_NOT_FOUND ((NDIS_STATUS)0xC001000BL)
161 #define NDIS_STATUS_REQUEST_ABORTED ((NDIS_STATUS)0xC001000CL)
162 #define NDIS_STATUS_RESET_IN_PROGRESS ((NDIS_STATUS)0xC001000DL)
163 #define NDIS_STATUS_CLOSING_INDICATING ((NDIS_STATUS)0xC001000EL)
164 #define NDIS_STATUS_NOT_SUPPORTED ((NDIS_STATUS)STATUS_NOT_SUPPORTED)
165 #define NDIS_STATUS_INVALID_PACKET ((NDIS_STATUS)0xC001000FL)
166 #define NDIS_STATUS_OPEN_LIST_FULL ((NDIS_STATUS)0xC0010010L)
167 #define NDIS_STATUS_ADAPTER_NOT_READY ((NDIS_STATUS)0xC0010011L)
168 #define NDIS_STATUS_ADAPTER_NOT_OPEN ((NDIS_STATUS)0xC0010012L)
169 #define NDIS_STATUS_NOT_INDICATING ((NDIS_STATUS)0xC0010013L)
170 #define NDIS_STATUS_INVALID_LENGTH ((NDIS_STATUS)0xC0010014L)
171 #define NDIS_STATUS_INVALID_DATA ((NDIS_STATUS)0xC0010015L)
172 #define NDIS_STATUS_BUFFER_TOO_SHORT ((NDIS_STATUS)0xC0010016L)
173 #define NDIS_STATUS_INVALID_OID ((NDIS_STATUS)0xC0010017L)
174 #define NDIS_STATUS_ADAPTER_REMOVED ((NDIS_STATUS)0xC0010018L)
175 #define NDIS_STATUS_UNSUPPORTED_MEDIA ((NDIS_STATUS)0xC0010019L)
176 #define NDIS_STATUS_GROUP_ADDRESS_IN_USE ((NDIS_STATUS)0xC001001AL)
177 #define NDIS_STATUS_FILE_NOT_FOUND ((NDIS_STATUS)0xC001001BL)
178 #define NDIS_STATUS_ERROR_READING_FILE ((NDIS_STATUS)0xC001001CL)
179 #define NDIS_STATUS_ALREADY_MAPPED ((NDIS_STATUS)0xC001001DL)
180 #define NDIS_STATUS_RESOURCE_CONFLICT ((NDIS_STATUS)0xC001001EL)
181 #define NDIS_STATUS_NO_CABLE ((NDIS_STATUS)0xC001001FL)
183 #define NDIS_STATUS_INVALID_SAP ((NDIS_STATUS)0xC0010020L)
184 #define NDIS_STATUS_SAP_IN_USE ((NDIS_STATUS)0xC0010021L)
185 #define NDIS_STATUS_INVALID_ADDRESS ((NDIS_STATUS)0xC0010022L)
186 #define NDIS_STATUS_VC_NOT_ACTIVATED ((NDIS_STATUS)0xC0010023L)
187 #define NDIS_STATUS_DEST_OUT_OF_ORDER ((NDIS_STATUS)0xC0010024L)
188 #define NDIS_STATUS_VC_NOT_AVAILABLE ((NDIS_STATUS)0xC0010025L)
189 #define NDIS_STATUS_CELLRATE_NOT_AVAILABLE ((NDIS_STATUS)0xC0010026L)
190 #define NDIS_STATUS_INCOMPATABLE_QOS ((NDIS_STATUS)0xC0010027L)
191 #define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED ((NDIS_STATUS)0xC0010028L)
192 #define NDIS_STATUS_NO_ROUTE_TO_DESTINATION ((NDIS_STATUS)0xC0010029L)
194 #define NDIS_STATUS_TOKEN_RING_OPEN_ERROR ((NDIS_STATUS)0xC0011000L)
195 #define NDIS_STATUS_INVALID_DEVICE_REQUEST ((NDIS_STATUS)STATUS_INVALID_DEVICE_REQUEST)
196 #define NDIS_STATUS_NETWORK_UNREACHABLE ((NDIS_STATUS)STATUS_NETWORK_UNREACHABLE)
199 /* NDIS error codes for error logging */
201 #define NDIS_ERROR_CODE_RESOURCE_CONFLICT EVENT_NDIS_RESOURCE_CONFLICT
202 #define NDIS_ERROR_CODE_OUT_OF_RESOURCES EVENT_NDIS_OUT_OF_RESOURCE
203 #define NDIS_ERROR_CODE_HARDWARE_FAILURE EVENT_NDIS_HARDWARE_FAILURE
204 #define NDIS_ERROR_CODE_ADAPTER_NOT_FOUND EVENT_NDIS_ADAPTER_NOT_FOUND
205 #define NDIS_ERROR_CODE_INTERRUPT_CONNECT EVENT_NDIS_INTERRUPT_CONNECT
206 #define NDIS_ERROR_CODE_DRIVER_FAILURE EVENT_NDIS_DRIVER_FAILURE
207 #define NDIS_ERROR_CODE_BAD_VERSION EVENT_NDIS_BAD_VERSION
208 #define NDIS_ERROR_CODE_TIMEOUT EVENT_NDIS_TIMEOUT
209 #define NDIS_ERROR_CODE_NETWORK_ADDRESS EVENT_NDIS_NETWORK_ADDRESS
210 #define NDIS_ERROR_CODE_UNSUPPORTED_CONFIGURATION EVENT_NDIS_UNSUPPORTED_CONFIGURATION
211 #define NDIS_ERROR_CODE_INVALID_VALUE_FROM_ADAPTER EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER
212 #define NDIS_ERROR_CODE_MISSING_CONFIGURATION_PARAMETER EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER
213 #define NDIS_ERROR_CODE_BAD_IO_BASE_ADDRESS EVENT_NDIS_BAD_IO_BASE_ADDRESS
214 #define NDIS_ERROR_CODE_RECEIVE_SPACE_SMALL EVENT_NDIS_RECEIVE_SPACE_SMALL
215 #define NDIS_ERROR_CODE_ADAPTER_DISABLED EVENT_NDIS_ADAPTER_DISABLED
218 /* Memory allocation flags. Used by Ndis[Allocate|Free]Memory */
219 #define NDIS_MEMORY_CONTIGUOUS 0x00000001
220 #define NDIS_MEMORY_NONCACHED 0x00000002
222 /* NIC attribute flags. Used by NdisMSetAttributes(Ex) */
223 #define NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT 0x00000001
224 #define NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT 0x00000002
225 #define NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS 0x00000004
226 #define NDIS_ATTRIBUTE_BUS_MASTER 0x00000008
227 #define NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER 0x00000010
228 #define NDIS_ATTRIBUTE_DESERIALIZE 0x00000020
229 #define NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND 0x00000040
230 #define NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK 0x00000080
231 #define NDIS_ATTRIBUTE_NOT_CO_NDIS 0x00000100
232 #define NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS 0x00000200
237 typedef union _NDIS_RW_LOCK_REFCOUNT {
240 } NDIS_RW_LOCK_REFCOUNT;
242 typedef struct _NDIS_RW_LOCK {
251 NDIS_RW_LOCK_REFCOUNT RefCount[MAXIMUM_PROCESSORS];
252 } NDIS_RW_LOCK, *PNDIS_RW_LOCK;
254 typedef struct _LOCK_STATE {
257 } LOCK_STATE, *PLOCK_STATE;
264 (*PNDIS_TIMER_FUNCTION)(
265 /*IN*/ PVOID SystemSpecific1,
266 /*IN*/ PVOID FunctionContext,
267 /*IN*/ PVOID SystemSpecific2,
268 /*IN*/ PVOID SystemSpecific3);
270 typedef struct _NDIS_TIMER {
273 } NDIS_TIMER, *PNDIS_TIMER;
279 typedef CM_MCA_POS_DATA NDIS_MCA_POS_DATA, *PNDIS_MCA_POS_DATA;
280 typedef CM_EISA_SLOT_INFORMATION NDIS_EISA_SLOT_INFORMATION, *PNDIS_EISA_SLOT_INFORMATION;
281 typedef CM_EISA_FUNCTION_INFORMATION NDIS_EISA_FUNCTION_INFORMATION, *PNDIS_EISA_FUNCTION_INFORMATION;
282 typedef CM_PARTIAL_RESOURCE_LIST NDIS_RESOURCE_LIST, *PNDIS_RESOURCE_LIST;
284 /* Hardware status codes (OID_GEN_HARDWARE_STATUS) */
285 typedef enum _NDIS_HARDWARE_STATUS {
286 NdisHardwareStatusReady,
287 NdisHardwareStatusInitializing,
288 NdisHardwareStatusReset,
289 NdisHardwareStatusClosing,
290 NdisHardwareStatusNotReady
291 } NDIS_HARDWARE_STATUS, *PNDIS_HARDWARE_STATUS;
293 /* OID_GEN_GET_TIME_CAPS */
294 typedef struct _GEN_GET_TIME_CAPS {
296 ULONG ClockPrecision;
297 } GEN_GET_TIME_CAPS, *PGEN_GET_TIME_CAPS;
300 #define READABLE_LOCAL_CLOCK 0x00000001
301 #define CLOCK_NETWORK_DERIVED 0x00000002
302 #define CLOCK_PRECISION 0x00000004
303 #define RECEIVE_TIME_INDICATION_CAPABLE 0x00000008
304 #define TIMED_SEND_CAPABLE 0x00000010
305 #define TIME_STAMP_CAPABLE 0x00000020
307 /* OID_GEN_GET_NETCARD_TIME */
308 typedef struct _GEN_GET_NETCARD_TIME {
310 } GEN_GET_NETCARD_TIME, *PGEN_GET_NETCARD_TIME;
312 /* NDIS driver medium (OID_GEN_MEDIA_SUPPORTED / OID_GEN_MEDIA_IN_USE) */
313 typedef enum _NDIS_MEDIUM {
321 NdisMediumArcnet878_2,
323 NdisMediumWirelessWan,
329 } NDIS_MEDIUM, *PNDIS_MEDIUM;
331 /* NDIS packet filter bits (OID_GEN_CURRENT_PACKET_FILTER) */
332 #define NDIS_PACKET_TYPE_DIRECTED 0x00000001
333 #define NDIS_PACKET_TYPE_MULTICAST 0x00000002
334 #define NDIS_PACKET_TYPE_ALL_MULTICAST 0x00000004
335 #define NDIS_PACKET_TYPE_BROADCAST 0x00000008
336 #define NDIS_PACKET_TYPE_SOURCE_ROUTING 0x00000010
337 #define NDIS_PACKET_TYPE_PROMISCUOUS 0x00000020
338 #define NDIS_PACKET_TYPE_SMT 0x00000040
339 #define NDIS_PACKET_TYPE_ALL_LOCAL 0x00000080
340 #define NDIS_PACKET_TYPE_GROUP 0x00001000
341 #define NDIS_PACKET_TYPE_ALL_FUNCTIONAL 0x00002000
342 #define NDIS_PACKET_TYPE_FUNCTIONAL 0x00004000
343 #define NDIS_PACKET_TYPE_MAC_FRAME 0x00008000
345 /* NDIS protocol option bits (OID_GEN_PROTOCOL_OPTIONS) */
346 #define NDIS_PROT_OPTION_ESTIMATED_LENGTH 0x00000001
347 #define NDIS_PROT_OPTION_NO_LOOPBACK 0x00000002
348 #define NDIS_PROT_OPTION_NO_RSVD_ON_RCVPKT 0x00000004
350 /* NDIS MAC option bits (OID_GEN_MAC_OPTIONS) */
351 #define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA 0x00000001
352 #define NDIS_MAC_OPTION_RECEIVE_SERIALIZED 0x00000002
353 #define NDIS_MAC_OPTION_TRANSFERS_NOT_PEND 0x00000004
354 #define NDIS_MAC_OPTION_NO_LOOPBACK 0x00000008
355 #define NDIS_MAC_OPTION_FULL_DUPLEX 0x00000010
356 #define NDIS_MAC_OPTION_EOTX_INDICATION 0x00000020
357 #define NDIS_MAC_OPTION_8021P_PRIORITY 0x00000040
358 #define NDIS_MAC_OPTION_RESERVED 0x80000000
360 /* State of the LAN media (OID_GEN_MEDIA_CONNECT_STATUS) */
361 typedef enum _NDIS_MEDIA_STATE {
362 NdisMediaStateConnected,
363 NdisMediaStateDisconnected
364 } NDIS_MEDIA_STATE, *PNDIS_MEDIA_STATE;
366 /* OID_GEN_SUPPORTED_GUIDS */
367 typedef struct _NDIS_GUID {
375 } NDIS_GUID, *PNDIS_GUID;
377 #define NDIS_GUID_TO_OID 0x00000001
378 #define NDIS_GUID_TO_STATUS 0x00000002
379 #define NDIS_GUID_ANSI_STRING 0x00000004
380 #define NDIS_GUID_UNICODE_STRING 0x00000008
381 #define NDIS_GUID_ARRAY 0x00000010
384 typedef struct _NDIS_PACKET_POOL {
385 NDIS_SPIN_LOCK SpinLock;
386 struct _NDIS_PACKET *FreeList;
389 } NDIS_PACKET_POOL, * PNDIS_PACKET_POOL;
391 /* NDIS_PACKET_PRIVATE.Flags constants */
392 #define fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO 0x40
393 #define fPACKET_ALLOCATED_BY_NDIS 0x80
395 typedef struct _NDIS_PACKET_PRIVATE {
400 PNDIS_PACKET_POOL Pool;
404 UCHAR NdisPacketFlags;
405 USHORT NdisPacketOobOffset;
406 } NDIS_PACKET_PRIVATE, * PNDIS_PACKET_PRIVATE;
408 typedef struct _NDIS_PACKET {
409 NDIS_PACKET_PRIVATE Private;
410 _ANONYMOUS_UNION union {
411 _ANONYMOUS_STRUCT struct {
412 UCHAR MiniportReserved[2 * sizeof(PVOID)];
413 UCHAR WrapperReserved[2 * sizeof(PVOID)];
415 _ANONYMOUS_STRUCT struct {
416 UCHAR MiniportReservedEx[3 * sizeof(PVOID)];
417 UCHAR WrapperReservedEx[sizeof(PVOID)];
419 _ANONYMOUS_STRUCT struct {
420 UCHAR MacReserved[4 * sizeof(PVOID)];
423 ULONG_PTR Reserved[2];
424 UCHAR ProtocolReserved[1];
425 } NDIS_PACKET, *PNDIS_PACKET, **PPNDIS_PACKET;
427 typedef enum _NDIS_CLASS_ID {
428 NdisClass802_3Priority,
429 NdisClassWirelessWanMbxMailbox,
430 NdisClassIrdaPacketInfo,
434 typedef struct MediaSpecificInformation {
435 UINT NextEntryOffset;
436 NDIS_CLASS_ID ClassId;
438 UCHAR ClassInformation[1];
439 } MEDIA_SPECIFIC_INFORMATION;
441 typedef struct _NDIS_PACKET_OOB_DATA {
442 _ANONYMOUS_UNION union {
443 ULONGLONG TimeToSend;
446 ULONGLONG TimeReceived;
448 UINT SizeMediaSpecificInfo;
449 PVOID MediaSpecificInformation;
451 } NDIS_PACKET_OOB_DATA, *PNDIS_PACKET_OOB_DATA;
453 typedef struct _NDIS_PM_PACKET_PATTERN {
460 } NDIS_PM_PACKET_PATTERN, *PNDIS_PM_PACKET_PATTERN;
463 /* Request types used by NdisRequest */
464 typedef enum _NDIS_REQUEST_TYPE {
465 NdisRequestQueryInformation,
466 NdisRequestSetInformation,
467 NdisRequestQueryStatistics,
471 NdisRequestTransferData,
477 } NDIS_REQUEST_TYPE, *PNDIS_REQUEST_TYPE;
479 typedef struct _NDIS_REQUEST {
480 UCHAR MacReserved[4 * sizeof(PVOID)];
481 NDIS_REQUEST_TYPE RequestType;
483 struct QUERY_INFORMATION {
485 PVOID InformationBuffer;
486 UINT InformationBufferLength;
490 struct SET_INFORMATION {
492 PVOID InformationBuffer;
493 UINT InformationBufferLength;
498 #if (defined(NDIS50) || defined(NDIS51))
499 UCHAR NdisReserved[9 * sizeof(PVOID)];
501 UCHAR CallMgrReserved[2 * sizeof(PVOID)];
502 UCHAR ProtocolReserved[2 * sizeof(PVOID)];
504 UCHAR MiniportReserved[2 * sizeof(PVOID)];
506 } NDIS_REQUEST, *PNDIS_REQUEST;
510 /* Wide Area Networks definitions */
512 typedef struct _NDIS_WAN_PACKET {
513 LIST_ENTRY WanPacketQueue;
514 PUCHAR CurrentBuffer;
518 PVOID ProtocolReserved1;
519 PVOID ProtocolReserved2;
520 PVOID ProtocolReserved3;
521 PVOID ProtocolReserved4;
526 } NDIS_WAN_PACKET, *PNDIS_WAN_PACKET;
530 /* DMA channel information */
532 typedef struct _NDIS_DMA_DESCRIPTION {
534 BOOLEAN AutoInitialize;
535 BOOLEAN DmaChannelSpecified;
540 } NDIS_DMA_DESCRIPTION, *PNDIS_DMA_DESCRIPTION;
542 typedef struct _NDIS_DMA_BLOCK {
543 PVOID MapRegisterBase;
544 KEVENT AllocationEvent;
545 PADAPTER_OBJECT SystemAdapterObject;
548 } NDIS_DMA_BLOCK, *PNDIS_DMA_BLOCK;
551 /* Possible hardware architecture */
552 typedef enum _NDIS_INTERFACE_TYPE {
553 NdisInterfaceInternal = Internal,
554 NdisInterfaceIsa = Isa,
555 NdisInterfaceEisa = Eisa,
556 NdisInterfaceMca = MicroChannel,
557 NdisInterfaceTurboChannel = TurboChannel,
558 NdisInterfacePci = PCIBus,
559 NdisInterfacePcMcia = PCMCIABus,
560 NdisInterfaceCBus = CBus,
561 NdisInterfaceMPIBus = MPIBus,
562 NdisInterfaceMPSABus = MPSABus,
563 NdisInterfaceProcessorInternal = ProcessorInternal,
564 NdisInterfaceInternalPowerBus = InternalPowerBus,
565 NdisInterfacePNPISABus = PNPISABus,
566 NdisInterfacePNPBus = PNPBus,
567 NdisMaximumInterfaceType
568 } NDIS_INTERFACE_TYPE, *PNDIS_INTERFACE_TYPE;
570 #define NdisInterruptLevelSensitive LevelSensitive
571 #define NdisInterruptLatched Latched
572 typedef KINTERRUPT_MODE NDIS_INTERRUPT_MODE, *PNDIS_INTERRUPT_MODE;
575 typedef enum _NDIS_PARAMETER_TYPE {
576 NdisParameterInteger,
577 NdisParameterHexInteger,
579 NdisParameterMultiString,
581 } NDIS_PARAMETER_TYPE, *PNDIS_PARAMETER_TYPE;
588 typedef struct _NDIS_CONFIGURATION_PARAMETER {
589 NDIS_PARAMETER_TYPE ParameterType;
592 NDIS_STRING StringData;
593 BINARY_DATA BinaryData;
595 } NDIS_CONFIGURATION_PARAMETER, *PNDIS_CONFIGURATION_PARAMETER;
598 typedef PHYSICAL_ADDRESS NDIS_PHYSICAL_ADDRESS, *PNDIS_PHYSICAL_ADDRESS;
600 typedef struct _NDIS_PHYSICAL_ADDRESS_UNIT {
601 NDIS_PHYSICAL_ADDRESS PhysicalAddress;
603 } NDIS_PHYSICAL_ADDRESS_UNIT, *PNDIS_PHYSICAL_ADDRESS_UNIT;
605 typedef struct _NDIS_WAN_LINE_DOWN {
606 UCHAR RemoteAddress[6];
607 UCHAR LocalAddress[6];
608 } NDIS_WAN_LINE_DOWN, *PNDIS_WAN_LINE_DOWN;
610 typedef struct _NDIS_WAN_LINE_UP {
612 ULONG MaximumTotalSize;
613 NDIS_WAN_QUALITY Quality;
615 UCHAR RemoteAddress[6];
616 /*OUT*/ UCHAR LocalAddress[6];
617 ULONG ProtocolBufferLength;
618 PUCHAR ProtocolBuffer;
620 NDIS_STRING DeviceName;
621 } NDIS_WAN_LINE_UP, *PNDIS_WAN_LINE_UP;
625 (*ADAPTER_SHUTDOWN_HANDLER)(
626 /*IN*/ PVOID ShutdownContext);
629 typedef struct _OID_LIST OID_LIST, *POID_LIST;
633 typedef enum _NDIS_PNP_DEVICE_STATE {
635 NdisPnPDeviceStarted,
636 NdisPnPDeviceQueryStopped,
637 NdisPnPDeviceStopped,
638 NdisPnPDeviceQueryRemoved,
639 NdisPnPDeviceRemoved,
640 NdisPnPDeviceSurpriseRemoved
641 } NDIS_PNP_DEVICE_STATE;
643 #define NDIS_DEVICE_NOT_STOPPABLE 0x00000001
644 #define NDIS_DEVICE_NOT_REMOVEABLE 0x00000002
645 #define NDIS_DEVICE_NOT_SUSPENDABLE 0x00000004
646 #define NDIS_DEVICE_DISABLE_PM 0x00000008
647 #define NDIS_DEVICE_DISABLE_WAKE_UP 0x00000010
648 #define NDIS_DEVICE_DISABLE_WAKE_ON_RECONNECT 0x00000020
649 #define NDIS_DEVICE_RESERVED 0x00000040
650 #define NDIS_DEVICE_DISABLE_WAKE_ON_MAGIC_PACKET 0x00000080
651 #define NDIS_DEVICE_DISABLE_WAKE_ON_PATTERN_MATCH 0x00000100
654 /* OID_GEN_NETWORK_LAYER_ADDRESSES */
655 typedef struct _NETWORK_ADDRESS {
656 USHORT AddressLength;
659 } NETWORK_ADDRESS, *PNETWORK_ADDRESS;
661 typedef struct _NETWORK_ADDRESS_LIST {
664 NETWORK_ADDRESS Address[1];
665 } NETWORK_ADDRESS_LIST, *PNETWORK_ADDRESS_LIST;
667 /* Protocol types supported by NDIS */
668 #define NDIS_PROTOCOL_ID_DEFAULT 0x00
669 #define NDIS_PROTOCOL_ID_TCP_IP 0x02
670 #define NDIS_PROTOCOL_ID_IPX 0x06
671 #define NDIS_PROTOCOL_ID_NBF 0x07
672 #define NDIS_PROTOCOL_ID_MAX 0x0F
673 #define NDIS_PROTOCOL_ID_MASK 0x0F
676 /* OID_GEN_TRANSPORT_HEADER_OFFSET */
677 typedef struct _TRANSPORT_HEADER_OFFSET {
680 } TRANSPORT_HEADER_OFFSET, *PTRANSPORT_HEADER_OFFSET;
683 /* OID_GEN_CO_LINK_SPEED / OID_GEN_CO_MINIMUM_LINK_SPEED */
684 typedef struct _NDIS_CO_LINK_SPEED {
687 } NDIS_CO_LINK_SPEED, *PNDIS_CO_LINK_SPEED;
689 typedef ULONG NDIS_AF, *PNDIS_AF;
690 #define CO_ADDRESS_FAMILY_Q2931 ((NDIS_AF)0x1)
691 #define CO_ADDRESS_FAMILY_PSCHED ((NDIS_AF)0x2)
692 #define CO_ADDRESS_FAMILY_L2TP ((NDIS_AF)0x3)
693 #define CO_ADDRESS_FAMILY_IRDA ((NDIS_AF)0x4)
694 #define CO_ADDRESS_FAMILY_1394 ((NDIS_AF)0x5)
695 #define CO_ADDRESS_FAMILY_PPP ((NDIS_AF)0x6)
696 #define CO_ADDRESS_FAMILY_TAPI ((NDIS_AF)0x800)
697 #define CO_ADDRESS_FAMILY_TAPI_PROXY ((NDIS_AF)0x801)
699 #define CO_ADDRESS_FAMILY_PROXY 0x80000000
702 NDIS_AF AddressFamily;
705 } CO_ADDRESS_FAMILY, *PCO_ADDRESS_FAMILY;
707 typedef struct _CO_FLOW_PARAMETERS {
709 ULONG TokenBucketSize;
712 ULONG DelayVariation;
713 SERVICETYPE ServiceType;
715 ULONG MinimumPolicedSize;
716 } CO_FLOW_PARAMETERS, *PCO_FLOW_PARAMETERS;
718 typedef struct _CO_SPECIFIC_PARAMETERS {
722 } CO_SPECIFIC_PARAMETERS, *PCO_SPECIFIC_PARAMETERS;
724 typedef struct _CO_CALL_MANAGER_PARAMETERS {
725 CO_FLOW_PARAMETERS Transmit;
726 CO_FLOW_PARAMETERS Receive;
727 CO_SPECIFIC_PARAMETERS CallMgrSpecific;
728 } CO_CALL_MANAGER_PARAMETERS, *PCO_CALL_MANAGER_PARAMETERS;
730 /* CO_MEDIA_PARAMETERS.Flags constants */
731 #define RECEIVE_TIME_INDICATION 0x00000001
732 #define USE_TIME_STAMPS 0x00000002
733 #define TRANSMIT_VC 0x00000004
734 #define RECEIVE_VC 0x00000008
735 #define INDICATE_ERRED_PACKETS 0x00000010
736 #define INDICATE_END_OF_TX 0x00000020
737 #define RESERVE_RESOURCES_VC 0x00000040
738 #define ROUND_DOWN_FLOW 0x00000080
739 #define ROUND_UP_FLOW 0x00000100
741 typedef struct _CO_MEDIA_PARAMETERS {
743 ULONG ReceivePriority;
744 ULONG ReceiveSizeHint;
745 CO_SPECIFIC_PARAMETERS MediaSpecific;
746 } CO_MEDIA_PARAMETERS, *PCO_MEDIA_PARAMETERS;
748 /* CO_CALL_PARAMETERS.Flags constants */
749 #define PERMANENT_VC 0x00000001
750 #define CALL_PARAMETERS_CHANGED 0x00000002
751 #define QUERY_CALL_PARAMETERS 0x00000004
752 #define BROADCAST_VC 0x00000008
753 #define MULTIPOINT_VC 0x00000010
755 typedef struct _CO_CALL_PARAMETERS {
757 PCO_CALL_MANAGER_PARAMETERS CallMgrParameters;
758 PCO_MEDIA_PARAMETERS MediaParameters;
759 } CO_CALL_PARAMETERS, *PCO_CALL_PARAMETERS;
761 typedef struct _CO_SAP {
767 typedef struct _NDIS_IPSEC_PACKET_INFO {
768 _ANONYMOUS_UNION union {
770 NDIS_HANDLE OffloadHandle;
771 NDIS_HANDLE NextOffloadHandle;
774 ULONG SA_DELETE_REQ : 1;
775 ULONG CRYPTO_DONE : 1;
776 ULONG NEXT_CRYPTO_DONE : 1;
780 } NDIS_IPSEC_PACKET_INFO, *PNDIS_IPSEC_PACKET_INFO;
782 /* NDIS_MAC_FRAGMENT.Errors constants */
783 #define WAN_ERROR_CRC 0x00000001
784 #define WAN_ERROR_FRAMING 0x00000002
785 #define WAN_ERROR_HARDWAREOVERRUN 0x00000004
786 #define WAN_ERROR_BUFFEROVERRUN 0x00000008
787 #define WAN_ERROR_TIMEOUT 0x00000010
788 #define WAN_ERROR_ALIGNMENT 0x00000020
790 typedef struct _NDIS_MAC_FRAGMENT {
791 NDIS_HANDLE NdisLinkContext;
793 } NDIS_MAC_FRAGMENT, *PNDIS_MAC_FRAGMENT;
795 typedef struct _NDIS_MAC_LINE_DOWN {
796 NDIS_HANDLE NdisLinkContext;
797 } NDIS_MAC_LINE_DOWN, *PNDIS_MAC_LINE_DOWN;
799 typedef struct _NDIS_MAC_LINE_UP {
801 NDIS_WAN_QUALITY Quality;
803 NDIS_HANDLE ConnectionWrapperID;
804 NDIS_HANDLE NdisLinkHandle;
805 NDIS_HANDLE NdisLinkContext;
806 } NDIS_MAC_LINE_UP, *PNDIS_MAC_LINE_UP;
808 typedef struct _NDIS_PACKET_8021Q_INFO {
809 _ANONYMOUS_UNION union {
811 UINT32 UserPriority : 3;
812 UINT32 CanonicalFormatId : 1;
814 UINT32 Reserved : 16;
818 } NDIS_PACKET_8021Q_INFO, *PNDIS_PACKET_8021Q_INFO;
820 typedef enum _NDIS_PER_PACKET_INFO {
821 TcpIpChecksumPacketInfo,
823 TcpLargeSendPacketInfo,
824 ClassificationHandlePacketInfo,
826 ScatterGatherListPacketInfo,
831 } NDIS_PER_PACKET_INFO, *PNDIS_PER_PACKET_INFO;
833 typedef struct _NDIS_PACKET_EXTENSION {
834 PVOID NdisPacketInfo[MaxPerPacketInfo];
835 } NDIS_PACKET_EXTENSION, *PNDIS_PACKET_EXTENSION;
839 * NDIS_GET_ORIGINAL_PACKET(
840 * IN PNDIS_PACKET Packet);
842 #define NDIS_GET_ORIGINAL_PACKET(Packet) \
843 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo)
847 * NDIS_GET_PACKET_CANCEL_ID(
848 * IN PNDIS_PACKET Packet);
850 #define NDIS_GET_PACKET_CANCEL_ID(Packet) \
851 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId)
854 * PNDIS_PACKET_EXTENSION
855 * NDIS_PACKET_EXTENSION_FROM_PACKET(
856 * IN PNDIS_PACKET Packet);
858 #define NDIS_PACKET_EXTENSION_FROM_PACKET(Packet) \
859 ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) \
860 + (Packet)->Private.NdisPacketOobOffset + sizeof(NDIS_PACKET_OOB_DATA)))
864 * NDIS_PER_PACKET_INFO_FROM_PACKET(
865 * IN OUT PNDIS_PACKET Packet,
866 * IN NDIS_PER_PACKET_INFO InfoType);
868 #define NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, InfoType) \
869 ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) + (Packet)->Private.NdisPacketOobOffset \
870 + sizeof(NDIS_PACKET_OOB_DATA)))->NdisPacketInfo[(InfoType)]
874 * NDIS_SET_ORIGINAL_PACKET(
875 * IN OUT PNDIS_PACKET Packet,
876 * IN PNDIS_PACKET OriginalPacket);
878 #define NDIS_SET_ORIGINAL_PACKET(Packet, OriginalPacket) \
879 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo) = (OriginalPacket)
883 * NDIS_SET_PACKET_CANCEL_ID(
884 * IN PNDIS_PACKET Packet
885 * IN ULONG_PTR CancelId);
887 #define NDIS_SET_PACKET_CANCEL_ID(Packet, CancelId) \
888 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId) = (CancelId)
890 typedef enum _NDIS_TASK {
891 TcpIpChecksumNdisTask,
893 TcpLargeSendNdisTask,
895 } NDIS_TASK, *PNDIS_TASK;
897 typedef struct _NDIS_TASK_IPSEC {
899 ULONG AH_ESP_COMBINED;
900 ULONG TRANSPORT_TUNNEL_COMBINED;
917 ULONG TRIPLE_DES : 1;
924 } NDIS_TASK_IPSEC, *PNDIS_TASK_IPSEC;
926 typedef enum _NDIS_ENCAPSULATION {
927 UNSPECIFIED_Encapsulation,
929 IEEE_802_3_Encapsulation,
930 IEEE_802_5_Encapsulation,
931 LLC_SNAP_ROUTED_Encapsulation,
932 LLC_SNAP_BRIDGED_Encapsulation
933 } NDIS_ENCAPSULATION;
935 typedef struct _NDIS_ENCAPSULATION_FORMAT {
936 NDIS_ENCAPSULATION Encapsulation;
938 ULONG FixedHeaderSize : 1;
941 ULONG EncapsulationHeaderSize;
942 } NDIS_ENCAPSULATION_FORMAT, *PNDIS_ENCAPSULATION_FORMAT;
944 typedef struct _NDIS_TASK_OFFLOAD_HEADER
949 UCHAR OffsetFirstTask;
950 NDIS_ENCAPSULATION_FORMAT EncapsulationFormat;
951 } NDIS_TASK_OFFLOAD_HEADER, *PNDIS_TASK_OFFLOAD_HEADER;
953 typedef struct _NDIS_TASK_OFFLOAD {
957 ULONG OffsetNextTask;
958 ULONG TaskBufferLength;
960 } NDIS_TASK_OFFLOAD, *PNDIS_TASK_OFFLOAD;
962 /* NDIS_TASK_OFFLOAD_HEADER.Version constants */
963 #define NDIS_TASK_OFFLOAD_VERSION 1
965 typedef struct _NDIS_TASK_TCP_IP_CHECKSUM {
967 ULONG IpOptionsSupported:1;
968 ULONG TcpOptionsSupported:1;
975 ULONG IpOptionsSupported : 1;
976 ULONG TcpOptionsSupported : 1;
977 ULONG TcpChecksum : 1;
978 ULONG UdpChecksum : 1;
979 ULONG IpChecksum : 1;
983 ULONG IpOptionsSupported : 1;
984 ULONG TcpOptionsSupported : 1;
985 ULONG TcpChecksum : 1;
986 ULONG UdpChecksum : 1;
990 ULONG IpOptionsSupported : 1;
991 ULONG TcpOptionsSupported : 1;
992 ULONG TcpChecksum : 1;
993 ULONG UdpChecksum : 1;
995 } NDIS_TASK_TCP_IP_CHECKSUM, *PNDIS_TASK_TCP_IP_CHECKSUM;
997 typedef struct _NDIS_TASK_TCP_LARGE_SEND {
999 ULONG MaxOffLoadSize;
1000 ULONG MinSegmentCount;
1003 } NDIS_TASK_TCP_LARGE_SEND, *PNDIS_TASK_TCP_LARGE_SEND;
1005 typedef struct _NDIS_TCP_IP_CHECKSUM_PACKET_INFO {
1006 _ANONYMOUS_UNION union {
1008 ULONG NdisPacketChecksumV4 : 1;
1009 ULONG NdisPacketChecksumV6 : 1;
1010 ULONG NdisPacketTcpChecksum : 1;
1011 ULONG NdisPacketUdpChecksum : 1;
1012 ULONG NdisPacketIpChecksum : 1;
1016 ULONG NdisPacketTcpChecksumFailed : 1;
1017 ULONG NdisPacketUdpChecksumFailed : 1;
1018 ULONG NdisPacketIpChecksumFailed : 1;
1019 ULONG NdisPacketTcpChecksumSucceeded : 1;
1020 ULONG NdisPacketUdpChecksumSucceeded : 1;
1021 ULONG NdisPacketIpChecksumSucceeded : 1;
1022 ULONG NdisPacketLoopback : 1;
1026 } NDIS_TCP_IP_CHECKSUM_PACKET_INFO, *PNDIS_TCP_IP_CHECKSUM_PACKET_INFO;
1028 typedef struct _NDIS_WAN_CO_FRAGMENT {
1030 } NDIS_WAN_CO_FRAGMENT, *PNDIS_WAN_CO_FRAGMENT;
1032 typedef struct _NDIS_WAN_FRAGMENT {
1033 UCHAR RemoteAddress[6];
1034 UCHAR LocalAddress[6];
1035 } NDIS_WAN_FRAGMENT, *PNDIS_WAN_FRAGMENT;
1037 typedef struct _WAN_CO_LINKPARAMS {
1038 ULONG TransmitSpeed;
1041 } WAN_CO_LINKPARAMS, *PWAN_CO_LINKPARAMS;
1047 (*CM_ACTIVATE_VC_COMPLETE_HANDLER)(
1048 /*IN*/ NDIS_STATUS Status,
1049 /*IN*/ NDIS_HANDLE CallMgrVcContext,
1050 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
1052 typedef NDIS_STATUS DDKAPI
1053 (*CM_ADD_PARTY_HANDLER)(
1054 /*IN*/ NDIS_HANDLE CallMgrVcContext,
1055 /*IN OUT*/ PCO_CALL_PARAMETERS CallParameters,
1056 /*IN*/ NDIS_HANDLE NdisPartyHandle,
1057 /*OUT*/ PNDIS_HANDLE CallMgrPartyContext);
1059 typedef NDIS_STATUS DDKAPI
1060 (*CM_CLOSE_AF_HANDLER)(
1061 /*IN*/ NDIS_HANDLE CallMgrAfContext);
1063 typedef NDIS_STATUS DDKAPI
1064 (*CM_CLOSE_CALL_HANDLER)(
1065 /*IN*/ NDIS_HANDLE CallMgrVcContext,
1066 /*IN*/ NDIS_HANDLE CallMgrPartyContext /*OPTIONAL*/,
1067 /*IN*/ PVOID CloseData /*OPTIONAL*/,
1068 /*IN*/ UINT Size /*OPTIONAL*/);
1070 typedef NDIS_STATUS DDKAPI
1071 (*CM_DEREG_SAP_HANDLER)(
1072 /*IN*/ NDIS_HANDLE CallMgrSapContext);
1075 (*CM_DEACTIVATE_VC_COMPLETE_HANDLER)(
1076 /*IN*/ NDIS_STATUS Status,
1077 /*IN*/ NDIS_HANDLE CallMgrVcContext);
1079 typedef NDIS_STATUS DDKAPI
1080 (*CM_DROP_PARTY_HANDLER)(
1081 /*IN*/ NDIS_HANDLE CallMgrPartyContext,
1082 /*IN*/ PVOID CloseData /*OPTIONAL*/,
1083 /*IN*/ UINT Size /*OPTIONAL*/);
1086 (*CM_INCOMING_CALL_COMPLETE_HANDLER)(
1087 /*IN*/ NDIS_STATUS Status,
1088 /*IN*/ NDIS_HANDLE CallMgrVcContext,
1089 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
1091 typedef NDIS_STATUS DDKAPI
1092 (*CM_MAKE_CALL_HANDLER)(
1093 /*IN*/ NDIS_HANDLE CallMgrVcContext,
1094 /*IN OUT*/ PCO_CALL_PARAMETERS CallParameters,
1095 /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/,
1096 /*OUT*/ PNDIS_HANDLE CallMgrPartyContext /*OPTIONAL*/);
1098 typedef NDIS_STATUS DDKAPI
1099 (*CM_MODIFY_CALL_QOS_HANDLER)(
1100 /*IN*/ NDIS_HANDLE CallMgrVcContext,
1101 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
1103 typedef NDIS_STATUS DDKAPI
1104 (*CM_OPEN_AF_HANDLER)(
1105 /*IN*/ NDIS_HANDLE CallMgrBindingContext,
1106 /*IN*/ PCO_ADDRESS_FAMILY AddressFamily,
1107 /*IN*/ NDIS_HANDLE NdisAfHandle,
1108 /*OUT*/ PNDIS_HANDLE CallMgrAfContext);
1110 typedef NDIS_STATUS DDKAPI
1111 (*CM_REG_SAP_HANDLER)(
1112 /*IN*/ NDIS_HANDLE CallMgrAfContext,
1114 /*IN*/ NDIS_HANDLE NdisSapHandle,
1115 /*OUT*/ PNDIS_HANDLE CallMgrSapContext);
1117 typedef NDIS_STATUS DDKAPI
1118 (*CO_CREATE_VC_HANDLER)(
1119 /*IN*/ NDIS_HANDLE ProtocolAfContext,
1120 /*IN*/ NDIS_HANDLE NdisVcHandle,
1121 /*OUT*/ PNDIS_HANDLE ProtocolVcContext);
1123 typedef NDIS_STATUS DDKAPI
1124 (*CO_DELETE_VC_HANDLER)(
1125 /*IN*/ NDIS_HANDLE ProtocolVcContext);
1128 (*CO_REQUEST_COMPLETE_HANDLER)(
1129 /*IN*/ NDIS_STATUS Status,
1130 /*IN*/ NDIS_HANDLE ProtocolAfContext /*OPTIONAL*/,
1131 /*IN*/ NDIS_HANDLE ProtocolVcContext /*OPTIONAL*/,
1132 /*IN*/ NDIS_HANDLE ProtocolPartyContext /*OPTIONAL*/,
1133 /*IN*/ PNDIS_REQUEST NdisRequest);
1135 typedef NDIS_STATUS DDKAPI
1136 (*CO_REQUEST_HANDLER)(
1137 /*IN*/ NDIS_HANDLE ProtocolAfContext,
1138 /*IN*/ NDIS_HANDLE ProtocolVcContext /*OPTIONAL*/,
1139 /*IN*/ NDIS_HANDLE ProtocolPartyContext /*OPTIONAL*/,
1140 /*IN OUT*/ PNDIS_REQUEST NdisRequest);
1142 typedef struct _NDIS_CALL_MANAGER_CHARACTERISTICS {
1147 CO_CREATE_VC_HANDLER CmCreateVcHandler;
1148 CO_DELETE_VC_HANDLER CmDeleteVcHandler;
1149 CM_OPEN_AF_HANDLER CmOpenAfHandler;
1150 CM_CLOSE_AF_HANDLER CmCloseAfHandler;
1151 CM_REG_SAP_HANDLER CmRegisterSapHandler;
1152 CM_DEREG_SAP_HANDLER CmDeregisterSapHandler;
1153 CM_MAKE_CALL_HANDLER CmMakeCallHandler;
1154 CM_CLOSE_CALL_HANDLER CmCloseCallHandler;
1155 CM_INCOMING_CALL_COMPLETE_HANDLER CmIncomingCallCompleteHandler;
1156 CM_ADD_PARTY_HANDLER CmAddPartyHandler;
1157 CM_DROP_PARTY_HANDLER CmDropPartyHandler;
1158 CM_ACTIVATE_VC_COMPLETE_HANDLER CmActivateVcCompleteHandler;
1159 CM_DEACTIVATE_VC_COMPLETE_HANDLER CmDeactivateVcCompleteHandler;
1160 CM_MODIFY_CALL_QOS_HANDLER CmModifyCallQoSHandler;
1161 CO_REQUEST_HANDLER CmRequestHandler;
1162 CO_REQUEST_COMPLETE_HANDLER CmRequestCompleteHandler;
1163 } NDIS_CALL_MANAGER_CHARACTERISTICS, *PNDIS_CALL_MANAGER_CHARACTERISTICS;
1167 /* Call Manager clients */
1169 typedef VOID (*CL_OPEN_AF_COMPLETE_HANDLER)(
1170 /*IN*/ NDIS_STATUS Status,
1171 /*IN*/ NDIS_HANDLE ProtocolAfContext,
1172 /*IN*/ NDIS_HANDLE NdisAfHandle);
1175 (*CL_CLOSE_AF_COMPLETE_HANDLER)(
1176 /*IN*/ NDIS_STATUS Status,
1177 /*IN*/ NDIS_HANDLE ProtocolAfContext);
1180 (*CL_REG_SAP_COMPLETE_HANDLER)(
1181 /*IN*/ NDIS_STATUS Status,
1182 /*IN*/ NDIS_HANDLE ProtocolSapContext,
1184 /*IN*/ NDIS_HANDLE NdisSapHandle);
1187 (*CL_DEREG_SAP_COMPLETE_HANDLER)(
1188 /*IN*/ NDIS_STATUS Status,
1189 /*IN*/ NDIS_HANDLE ProtocolSapContext);
1192 (*CL_MAKE_CALL_COMPLETE_HANDLER)(
1193 /*IN*/ NDIS_STATUS Status,
1194 /*IN*/ NDIS_HANDLE ProtocolVcContext,
1195 /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/,
1196 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
1199 (*CL_MODIFY_CALL_QOS_COMPLETE_HANDLER)(
1200 /*IN*/ NDIS_STATUS Status,
1201 /*IN*/ NDIS_HANDLE ProtocolVcContext,
1202 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
1205 (*CL_CLOSE_CALL_COMPLETE_HANDLER)(
1206 /*IN*/ NDIS_STATUS Status,
1207 /*IN*/ NDIS_HANDLE ProtocolVcContext,
1208 /*IN*/ NDIS_HANDLE ProtocolPartyContext /*OPTIONAL*/);
1211 (*CL_ADD_PARTY_COMPLETE_HANDLER)(
1212 /*IN*/ NDIS_STATUS Status,
1213 /*IN*/ NDIS_HANDLE ProtocolPartyContext,
1214 /*IN*/ NDIS_HANDLE NdisPartyHandle,
1215 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
1218 (*CL_DROP_PARTY_COMPLETE_HANDLER)(
1219 /*IN*/ NDIS_STATUS Status,
1220 /*IN*/ NDIS_HANDLE ProtocolPartyContext);
1222 typedef NDIS_STATUS DDKAPI
1223 (*CL_INCOMING_CALL_HANDLER)(
1224 /*IN*/ NDIS_HANDLE ProtocolSapContext,
1225 /*IN*/ NDIS_HANDLE ProtocolVcContext,
1226 /*IN OUT*/ PCO_CALL_PARAMETERS CallParameters);
1229 (*CL_INCOMING_CALL_QOS_CHANGE_HANDLER)(
1230 /*IN*/ NDIS_HANDLE ProtocolVcContext,
1231 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
1234 (*CL_INCOMING_CLOSE_CALL_HANDLER)(
1235 /*IN*/ NDIS_STATUS CloseStatus,
1236 /*IN*/ NDIS_HANDLE ProtocolVcContext,
1237 /*IN*/ PVOID CloseData /*OPTIONAL*/,
1238 /*IN*/ UINT Size /*OPTIONAL*/);
1241 (*CL_INCOMING_DROP_PARTY_HANDLER)(
1242 /*IN*/ NDIS_STATUS DropStatus,
1243 /*IN*/ NDIS_HANDLE ProtocolPartyContext,
1244 /*IN*/ PVOID CloseData /*OPTIONAL*/,
1245 /*IN*/ UINT Size /*OPTIONAL*/);
1248 (*CL_CALL_CONNECTED_HANDLER)(
1249 /*IN*/ NDIS_HANDLE ProtocolVcContext);
1252 typedef struct _NDIS_CLIENT_CHARACTERISTICS {
1257 CO_CREATE_VC_HANDLER ClCreateVcHandler;
1258 CO_DELETE_VC_HANDLER ClDeleteVcHandler;
1259 CO_REQUEST_HANDLER ClRequestHandler;
1260 CO_REQUEST_COMPLETE_HANDLER ClRequestCompleteHandler;
1261 CL_OPEN_AF_COMPLETE_HANDLER ClOpenAfCompleteHandler;
1262 CL_CLOSE_AF_COMPLETE_HANDLER ClCloseAfCompleteHandler;
1263 CL_REG_SAP_COMPLETE_HANDLER ClRegisterSapCompleteHandler;
1264 CL_DEREG_SAP_COMPLETE_HANDLER ClDeregisterSapCompleteHandler;
1265 CL_MAKE_CALL_COMPLETE_HANDLER ClMakeCallCompleteHandler;
1266 CL_MODIFY_CALL_QOS_COMPLETE_HANDLER ClModifyCallQoSCompleteHandler;
1267 CL_CLOSE_CALL_COMPLETE_HANDLER ClCloseCallCompleteHandler;
1268 CL_ADD_PARTY_COMPLETE_HANDLER ClAddPartyCompleteHandler;
1269 CL_DROP_PARTY_COMPLETE_HANDLER ClDropPartyCompleteHandler;
1270 CL_INCOMING_CALL_HANDLER ClIncomingCallHandler;
1271 CL_INCOMING_CALL_QOS_CHANGE_HANDLER ClIncomingCallQoSChangeHandler;
1272 CL_INCOMING_CLOSE_CALL_HANDLER ClIncomingCloseCallHandler;
1273 CL_INCOMING_DROP_PARTY_HANDLER ClIncomingDropPartyHandler;
1274 CL_CALL_CONNECTED_HANDLER ClCallConnectedHandler;
1275 } NDIS_CLIENT_CHARACTERISTICS, *PNDIS_CLIENT_CHARACTERISTICS;
1278 /* NDIS protocol structures */
1280 /* Prototypes for NDIS 3.0 protocol characteristics */
1283 (*OPEN_ADAPTER_COMPLETE_HANDLER)(
1284 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1285 /*IN*/ NDIS_STATUS Status,
1286 /*IN*/ NDIS_STATUS OpenErrorStatus);
1289 (*CLOSE_ADAPTER_COMPLETE_HANDLER)(
1290 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1291 /*IN*/ NDIS_STATUS Status);
1294 (*RESET_COMPLETE_HANDLER)(
1295 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1296 /*IN*/ NDIS_STATUS Status);
1299 (*REQUEST_COMPLETE_HANDLER)(
1300 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1301 /*IN*/ PNDIS_REQUEST NdisRequest,
1302 /*IN*/ NDIS_STATUS Status);
1306 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1307 /*IN*/ NDIS_STATUS GeneralStatus,
1308 /*IN*/ PVOID StatusBuffer,
1309 /*IN*/ UINT StatusBufferSize);
1312 (*STATUS_COMPLETE_HANDLER)(
1313 /*IN*/ NDIS_HANDLE ProtocolBindingContext);
1316 (*SEND_COMPLETE_HANDLER)(
1317 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1318 /*IN*/ PNDIS_PACKET Packet,
1319 /*IN*/ NDIS_STATUS Status);
1322 (*WAN_SEND_COMPLETE_HANDLER)(
1323 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1324 /*IN*/ PNDIS_WAN_PACKET Packet,
1325 /*IN*/ NDIS_STATUS Status);
1328 (*TRANSFER_DATA_COMPLETE_HANDLER)(
1329 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1330 /*IN*/ PNDIS_PACKET Packet,
1331 /*IN*/ NDIS_STATUS Status,
1332 /*IN*/ UINT BytesTransferred);
1335 (*WAN_TRANSFER_DATA_COMPLETE_HANDLER)(
1339 typedef NDIS_STATUS DDKAPI
1341 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1342 /*IN*/ NDIS_HANDLE MacReceiveContext,
1343 /*IN*/ PVOID HeaderBuffer,
1344 /*IN*/ UINT HeaderBufferSize,
1345 /*IN*/ PVOID LookAheadBuffer,
1346 /*IN*/ UINT LookaheadBufferSize,
1347 /*IN*/ UINT PacketSize);
1349 typedef NDIS_STATUS DDKAPI
1350 (*WAN_RECEIVE_HANDLER)(
1351 /*IN*/ NDIS_HANDLE NdisLinkHandle,
1352 /*IN*/ PUCHAR Packet,
1353 /*IN*/ ULONG PacketSize);
1356 (*RECEIVE_COMPLETE_HANDLER)(
1357 /*IN*/ NDIS_HANDLE ProtocolBindingContext);
1360 /* Protocol characteristics for NDIS 3.0 protocols */
1362 #define NDIS30_PROTOCOL_CHARACTERISTICS_S \
1363 UCHAR MajorNdisVersion; \
1364 UCHAR MinorNdisVersion; \
1365 _ANONYMOUS_UNION union { \
1369 OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler; \
1370 CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler; \
1371 _ANONYMOUS_UNION union { \
1372 SEND_COMPLETE_HANDLER SendCompleteHandler; \
1373 WAN_SEND_COMPLETE_HANDLER WanSendCompleteHandler; \
1374 } DUMMYUNIONNAME2; \
1375 _ANONYMOUS_UNION union { \
1376 TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler; \
1377 WAN_TRANSFER_DATA_COMPLETE_HANDLER WanTransferDataCompleteHandler; \
1378 } DUMMYUNIONNAME3; \
1379 RESET_COMPLETE_HANDLER ResetCompleteHandler; \
1380 REQUEST_COMPLETE_HANDLER RequestCompleteHandler; \
1381 _ANONYMOUS_UNION union { \
1382 RECEIVE_HANDLER ReceiveHandler; \
1383 WAN_RECEIVE_HANDLER WanReceiveHandler; \
1384 } DUMMYUNIONNAME4; \
1385 RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler; \
1386 STATUS_HANDLER StatusHandler; \
1387 STATUS_COMPLETE_HANDLER StatusCompleteHandler; \
1390 typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS {
1391 NDIS30_PROTOCOL_CHARACTERISTICS_S
1392 } NDIS30_PROTOCOL_CHARACTERISTICS, *PNDIS30_PROTOCOL_CHARACTERISTICS;
1395 /* Prototypes for NDIS 4.0 protocol characteristics */
1398 (*RECEIVE_PACKET_HANDLER)(
1399 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1400 /*IN*/ PNDIS_PACKET Packet);
1404 /*OUT*/ PNDIS_STATUS Status,
1405 /*IN*/ NDIS_HANDLE BindContext,
1406 /*IN*/ PNDIS_STRING DeviceName,
1407 /*IN*/ PVOID SystemSpecific1,
1408 /*IN*/ PVOID SystemSpecific2);
1412 /*OUT*/ PNDIS_STATUS Status,
1413 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1414 /*IN*/ NDIS_HANDLE UnbindContext);
1416 typedef NDIS_STATUS DDKAPI
1417 (*PNP_EVENT_HANDLER)(
1418 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1419 /*IN*/ PNET_PNP_EVENT NetPnPEvent);
1422 (*UNLOAD_PROTOCOL_HANDLER)(
1426 /* Protocol characteristics for NDIS 4.0 protocols */
1430 #define NDIS40_PROTOCOL_CHARACTERISTICS_S \
1431 NDIS30_PROTOCOL_CHARACTERISTICS Ndis30Chars; \
1432 RECEIVE_PACKET_HANDLER ReceivePacketHandler; \
1433 BIND_HANDLER BindAdapterHandler; \
1434 UNBIND_HANDLER UnbindAdapterHandler; \
1435 PNP_EVENT_HANDLER PnPEventHandler; \
1436 UNLOAD_PROTOCOL_HANDLER UnloadHandler;
1438 #else /* !__cplusplus */
1440 #define NDIS40_PROTOCOL_CHARACTERISTICS_S \
1441 NDIS30_PROTOCOL_CHARACTERISTICS_S \
1442 RECEIVE_PACKET_HANDLER ReceivePacketHandler; \
1443 BIND_HANDLER BindAdapterHandler; \
1444 UNBIND_HANDLER UnbindAdapterHandler; \
1445 PNP_EVENT_HANDLER PnPEventHandler; \
1446 UNLOAD_PROTOCOL_HANDLER UnloadHandler;
1448 #endif /* __cplusplus */
1450 typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS {
1451 NDIS40_PROTOCOL_CHARACTERISTICS_S
1452 } NDIS40_PROTOCOL_CHARACTERISTICS, *PNDIS40_PROTOCOL_CHARACTERISTICS;
1454 /* Prototypes for NDIS 5.0 protocol characteristics */
1457 (*CO_SEND_COMPLETE_HANDLER)(
1458 /*IN*/ NDIS_STATUS Status,
1459 /*IN*/ NDIS_HANDLE ProtocolVcContext,
1460 /*IN*/ PNDIS_PACKET Packet);
1463 (*CO_STATUS_HANDLER)(
1464 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1465 /*IN*/ NDIS_HANDLE ProtocolVcContext /*OPTIONAL*/,
1466 /*IN*/ NDIS_STATUS GeneralStatus,
1467 /*IN*/ PVOID StatusBuffer,
1468 /*IN*/ UINT StatusBufferSize);
1471 (*CO_RECEIVE_PACKET_HANDLER)(
1472 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1473 /*IN*/ NDIS_HANDLE ProtocolVcContext,
1474 /*IN*/ PNDIS_PACKET Packet);
1477 (*CO_AF_REGISTER_NOTIFY_HANDLER)(
1478 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1479 /*IN*/ PCO_ADDRESS_FAMILY AddressFamily);
1481 #ifdef __cplusplus \
1483 #define NDIS50_PROTOCOL_CHARACTERISTICS_S \
1484 NDIS40_PROTOCOL_CHARACTERISTICS Ndis40Chars; \
1485 PVOID ReservedHandlers[4]; \
1486 CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler; \
1487 CO_STATUS_HANDLER CoStatusHandler; \
1488 CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler; \
1489 CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
1491 #else /* !__cplusplus */
1493 #define NDIS50_PROTOCOL_CHARACTERISTICS_S \
1494 NDIS40_PROTOCOL_CHARACTERISTICS_S \
1495 PVOID ReservedHandlers[4]; \
1496 CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler; \
1497 CO_STATUS_HANDLER CoStatusHandler; \
1498 CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler; \
1499 CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
1501 #endif /* !__cplusplus */
1503 typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS {
1504 NDIS50_PROTOCOL_CHARACTERISTICS_S
1505 } NDIS50_PROTOCOL_CHARACTERISTICS, *PNDIS50_PROTOCOL_CHARACTERISTICS;
1507 #if defined(NDIS50) || defined(NDIS51)
1508 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS {
1509 NDIS50_PROTOCOL_CHARACTERISTICS_S;
1510 } NDIS_PROTOCOL_CHARACTERISTICS, *PNDIS_PROTOCOL_CHARACTERISTICS;
1511 #elif defined(NDIS40)
1512 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS {
1513 NDIS40_PROTOCOL_CHARACTERISTICS_S;
1514 } NDIS_PROTOCOL_CHARACTERISTICS, *PNDIS_PROTOCOL_CHARACTERISTICS;
1515 #elif defined(NDIS30)
1516 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS {
1517 NDIS30_PROTOCOL_CHARACTERISTICS_S
1518 } NDIS_PROTOCOL_CHARACTERISTICS, *PNDIS_PROTOCOL_CHARACTERISTICS;
1520 #error Define an NDIS version
1525 /* Buffer management routines */
1531 /*OUT*/ PNDIS_STATUS Status,
1532 /*OUT*/ PNDIS_BUFFER *Buffer,
1533 /*IN*/ NDIS_HANDLE PoolHandle,
1534 /*IN*/ PVOID VirtualAddress,
1535 /*IN*/ UINT Length);
1541 NdisAllocateBufferPool(
1542 /*OUT*/ PNDIS_STATUS Status,
1543 /*OUT*/ PNDIS_HANDLE PoolHandle,
1544 /*IN*/ UINT NumberOfDescriptors);
1550 /*OUT*/ PNDIS_STATUS Status,
1551 /*OUT*/ PNDIS_PACKET *Packet,
1552 /*IN*/ NDIS_HANDLE PoolHandle);
1557 NdisAllocatePacketPool(
1558 /*OUT*/ PNDIS_STATUS Status,
1559 /*OUT*/ PNDIS_HANDLE PoolHandle,
1560 /*IN*/ UINT NumberOfDescriptors,
1561 /*IN*/ UINT ProtocolReservedLength);
1563 #define PROTOCOL_RESERVED_SIZE_IN_PACKET (4 * sizeof(PVOID))
1569 /*OUT*/ PNDIS_STATUS Status,
1570 /*OUT*/ PNDIS_BUFFER *Buffer,
1571 /*IN*/ NDIS_HANDLE PoolHandle,
1572 /*IN*/ PVOID MemoryDescriptor,
1574 /*IN*/ UINT Length);
1579 NdisCopyFromPacketToPacket(
1580 /*IN*/ PNDIS_PACKET Destination,
1581 /*IN*/ UINT DestinationOffset,
1582 /*IN*/ UINT BytesToCopy,
1583 /*IN*/ PNDIS_PACKET Source,
1584 /*IN*/ UINT SourceOffset,
1585 /*OUT*/ PUINT BytesCopied);
1590 NdisDprAllocatePacket(
1591 /*OUT*/ PNDIS_STATUS Status,
1592 /*OUT*/ PNDIS_PACKET *Packet,
1593 /*IN*/ NDIS_HANDLE PoolHandle);
1598 NdisDprAllocatePacketNonInterlocked(
1599 /*OUT*/ PNDIS_STATUS Status,
1600 /*OUT*/ PNDIS_PACKET *Packet,
1601 /*IN*/ NDIS_HANDLE PoolHandle);
1607 /*IN*/ PNDIS_PACKET Packet);
1612 NdisDprFreePacketNonInterlocked(
1613 /*IN*/ PNDIS_PACKET Packet);
1619 /*IN*/ NDIS_HANDLE PoolHandle);
1625 /*IN*/ PNDIS_PACKET Packet);
1631 /*IN*/ NDIS_HANDLE PoolHandle);
1637 /*IN*/ PNDIS_PACKET *PacketsToReturn,
1638 /*IN*/ UINT NumberOfPackets);
1643 NdisUnchainBufferAtBack(
1644 /*IN OUT*/ PNDIS_PACKET Packet,
1645 /*OUT*/ PNDIS_BUFFER *Buffer);
1650 NdisUnchainBufferAtFront(
1651 /*IN OUT*/ PNDIS_PACKET Packet,
1652 /*OUT*/ PNDIS_BUFFER *Buffer);
1657 NdisAdjustBufferLength(
1658 /*IN*/ PNDIS_BUFFER Buffer,
1659 /*IN*/ UINT Length);
1665 /*IN*/ PNDIS_BUFFER Buffer);
1670 NdisBufferVirtualAddress(
1671 /*IN*/ PNDIS_BUFFER Buffer);
1676 NDIS_BUFFER_TO_SPAN_PAGES(
1677 /*IN*/ PNDIS_BUFFER Buffer);
1683 /*IN*/ PNDIS_BUFFER Buffer);
1688 NdisGetBufferPhysicalArraySize(
1689 /*IN*/ PNDIS_BUFFER Buffer,
1690 /*OUT*/ PUINT ArraySize);
1695 NdisGetFirstBufferFromPacket(
1696 /*IN*/ PNDIS_PACKET _Packet,
1697 /*OUT*/ PNDIS_BUFFER *_FirstBuffer,
1698 /*OUT*/ PVOID *_FirstBufferVA,
1699 /*OUT*/ PUINT _FirstBufferLength,
1700 /*OUT*/ PUINT _TotalBufferLength);
1706 /*IN*/ PNDIS_BUFFER Buffer,
1707 /*OUT*/ PVOID *VirtualAddress /*OPTIONAL*/,
1708 /*OUT*/ PUINT Length);
1713 NdisQueryBufferOffset(
1714 /*IN*/ PNDIS_BUFFER Buffer,
1715 /*OUT*/ PUINT Offset,
1716 /*OUT*/ PUINT Length);
1722 /*IN*/ PNDIS_BUFFER Buffer);
1727 * NdisGetBufferPhysicalArraySize(
1728 * IN PNDIS_BUFFER Buffer,
1729 * OUT PUINT ArraySize);
1731 #define NdisGetBufferPhysicalArraySize(Buffer, \
1734 (*(ArraySize) = NDIS_BUFFER_TO_SPAN_PAGES(Buffer)) \
1740 * NdisGetFirstBufferFromPacket(
1741 * IN PNDIS_PACKET _Packet,
1742 * OUT PNDIS_BUFFER * _FirstBuffer,
1743 * OUT PVOID * _FirstBufferVA,
1744 * OUT PUINT _FirstBufferLength,
1745 * OUT PUINT _TotalBufferLength)
1747 #define NdisGetFirstBufferFromPacket(_Packet, \
1750 _FirstBufferLength, \
1751 _TotalBufferLength) \
1753 PNDIS_BUFFER _Buffer; \
1755 _Buffer = (_Packet)->Private.Head; \
1756 *(_FirstBuffer) = _Buffer; \
1757 if (_Buffer != NULL) \
1759 *(_FirstBufferVA) = MmGetSystemAddressForMdl(_Buffer); \
1760 *(_FirstBufferLength) = MmGetMdlByteCount(_Buffer); \
1761 _Buffer = _Buffer->Next; \
1762 *(_TotalBufferLength) = *(_FirstBufferLength); \
1763 while (_Buffer != NULL) { \
1764 *(_TotalBufferLength) += MmGetMdlByteCount(_Buffer); \
1765 _Buffer = _Buffer->Next; \
1770 *(_FirstBufferVA) = 0; \
1771 *(_FirstBufferLength) = 0; \
1772 *(_TotalBufferLength) = 0; \
1778 * NdisGetFirstBufferFromPacketSafe(
1779 * IN PNDIS_PACKET _Packet,
1780 * OUT PNDIS_BUFFER * _FirstBuffer,
1781 * OUT PVOID * _FirstBufferVA,
1782 * OUT PUINT _FirstBufferLength,
1783 * OUT PUINT _TotalBufferLength),
1784 * IN MM_PAGE_PRIORITY _Priority)
1786 #define NdisGetFirstBufferFromPacketSafe(_Packet, \
1789 _FirstBufferLength, \
1790 _TotalBufferLength, \
1793 PNDIS_BUFFER _Buffer; \
1795 _Buffer = (_Packet)->Private.Head; \
1796 *(_FirstBuffer) = _Buffer; \
1797 if (_Buffer != NULL) \
1799 *(_FirstBufferVA) = MmGetSystemAddressForMdlSafe(_Buffer, _Priority); \
1800 *(_FirstBufferLength) = MmGetMdlByteCount(_Buffer); \
1801 _Buffer = _Buffer->Next; \
1802 *(_TotalBufferLength) = *(_FirstBufferLength); \
1803 while (_Buffer != NULL) { \
1804 *(_TotalBufferLength) += MmGetMdlByteCount(_Buffer); \
1805 _Buffer = _Buffer->Next; \
1810 *(_FirstBufferVA) = 0; \
1811 *(_FirstBufferLength) = 0; \
1812 *(_TotalBufferLength) = 0; \
1819 * IN PNDIS_BUFFER Buffer,
1820 * OUT PVOID *VirtualAddress OPTIONAL,
1823 #define NdisQueryBuffer(Buffer, \
1827 if (VirtualAddress) \
1828 *((PVOID*)VirtualAddress) = MmGetSystemAddressForMdl(Buffer); \
1830 *((PUINT)Length) = MmGetMdlByteCount(Buffer); \
1836 * NdisQueryBufferOffset(
1837 * IN PNDIS_BUFFER Buffer,
1839 * OUT PUINT Length);
1841 #define NdisQueryBufferOffset(Buffer, \
1845 *((PUINT)Offset) = MmGetMdlByteOffset(Buffer); \
1846 *((PUINT)Length) = MmGetMdlByteCount(Buffer); \
1852 * NDIS_BUFFER_LINKAGE(
1853 * IN PNDIS_BUFFER Buffer);
1855 #define NDIS_BUFFER_LINKAGE(Buffer)(Buffer)->Next;
1860 * NdisChainBufferAtBack(
1861 * IN OUT PNDIS_PACKET Packet,
1862 * IN OUT PNDIS_BUFFER Buffer)
1864 #define NdisChainBufferAtBack(Packet, \
1867 PNDIS_BUFFER NdisBuffer = (Buffer); \
1869 while (NdisBuffer->Next != NULL) \
1870 NdisBuffer = NdisBuffer->Next; \
1872 NdisBuffer->Next = NULL; \
1874 if ((Packet)->Private.Head != NULL) \
1875 (Packet)->Private.Tail->Next = (Buffer); \
1877 (Packet)->Private.Head = (Buffer); \
1879 (Packet)->Private.Tail = NdisBuffer; \
1880 (Packet)->Private.ValidCounts = FALSE; \
1886 * NdisChainBufferAtFront(
1887 * IN OUT PNDIS_PACKET Packet,
1888 * IN OUT PNDIS_BUFFER Buffer)
1890 #define NdisChainBufferAtFront(Packet, \
1893 PNDIS_BUFFER _NdisBuffer = (Buffer); \
1895 while (_NdisBuffer->Next != NULL) \
1896 _NdisBuffer = _NdisBuffer->Next; \
1898 if ((Packet)->Private.Head == NULL) \
1899 (Packet)->Private.Tail = _NdisBuffer; \
1901 _NdisBuffer->Next = (Packet)->Private.Head; \
1902 (Packet)->Private.Head = (Buffer); \
1903 (Packet)->Private.ValidCounts = FALSE; \
1909 * NdisGetNextBuffer(
1910 * IN PNDIS_BUFFER CurrentBuffer,
1911 * OUT PNDIS_BUFFER * NextBuffer)
1913 #define NdisGetNextBuffer(CurrentBuffer, \
1916 *(NextBuffer) = (CurrentBuffer)->Next; \
1922 * NdisGetPacketFlags(
1923 * IN PNDIS_PACKET Packet);
1925 #define NdisGetPacketFlags(Packet)(Packet)->Private.Flags;
1930 * NdisClearPacketFlags(
1931 * IN PNDIS_PACKET Packet,
1934 #define NdisClearPacketFlags(Packet, Flags) \
1935 (Packet)->Private.Flags &= ~(Flags)
1940 * NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(
1941 * IN PNDIS_PACKET Packet,
1942 * IN PPVOID pMediaSpecificInfo,
1943 * IN PUINT pSizeMediaSpecificInfo);
1945 #define NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \
1946 _pMediaSpecificInfo, \
1947 _pSizeMediaSpecificInfo) \
1949 if (!((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) || \
1950 !((_Packet)->Private.NdisPacketFlags & fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO)) \
1952 *(_pMediaSpecificInfo) = NULL; \
1953 *(_pSizeMediaSpecificInfo) = 0; \
1957 *(_pMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1958 (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation; \
1959 *(_pSizeMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1960 (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo; \
1967 * NDIS_GET_PACKET_PROTOCOL_TYPE(
1968 * IN PNDIS_PACKET Packet);
1970 #define NDIS_GET_PACKET_PROTOCOL_TYPE(_Packet) \
1971 ((_Packet)->Private.Flags & NDIS_PROTOCOL_ID_MASK)
1975 * NDIS_GET_PACKET_HEADER_SIZE(
1976 * IN PNDIS_PACKET Packet);
1978 #define NDIS_GET_PACKET_HEADER_SIZE(_Packet) \
1979 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1980 (_Packet)->Private.NdisPacketOobOffset))->HeaderSize
1985 * NDIS_GET_PACKET_STATUS(
1986 * IN PNDIS_PACKET Packet);
1988 #define NDIS_GET_PACKET_STATUS(_Packet) \
1989 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1990 (_Packet)->Private.NdisPacketOobOffset))->Status
1995 * NDIS_GET_PACKET_TIME_RECEIVED(
1996 * IN PNDIS_PACKET Packet);
1998 #define NDIS_GET_PACKET_TIME_RECEIVED(_Packet) \
1999 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2000 (_Packet)->Private.NdisPacketOobOffset))->TimeReceived
2005 * NDIS_GET_PACKET_TIME_SENT(
2006 * IN PNDIS_PACKET Packet);
2008 #define NDIS_GET_PACKET_TIME_SENT(_Packet) \
2009 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2010 (_Packet)->Private.NdisPacketOobOffset))->TimeSent
2015 * NDIS_GET_PACKET_TIME_TO_SEND(
2016 * IN PNDIS_PACKET Packet);
2018 #define NDIS_GET_PACKET_TIME_TO_SEND(_Packet) \
2019 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2020 (_Packet)->Private.NdisPacketOobOffset))->TimeToSend
2024 * PNDIS_PACKET_OOB_DATA
2025 * NDIS_OOB_DATA_FROM_PACKET(
2026 * IN PNDIS_PACKET Packet);
2028 #define NDIS_OOB_DATA_FROM_PACKET(_Packet) \
2029 (PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2030 (_Packet)->Private.NdisPacketOobOffset)
2036 * IN PNDIS_PACKET Packet,
2037 * OUT PUINT PhysicalBufferCount OPTIONAL,
2038 * OUT PUINT BufferCount OPTIONAL,
2039 * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
2040 * OUT PUINT TotalPacketLength OPTIONAL);
2042 #define NdisQueryPacket(Packet, \
2043 PhysicalBufferCount, \
2046 TotalPacketLength) \
2049 *((PNDIS_BUFFER*)FirstBuffer) = (Packet)->Private.Head; \
2050 if ((TotalPacketLength) || (BufferCount) || (PhysicalBufferCount)) \
2052 if (!(Packet)->Private.ValidCounts) { \
2054 UINT _PacketLength; \
2055 PNDIS_BUFFER _NdisBuffer; \
2056 UINT _PhysicalBufferCount = 0; \
2057 UINT _TotalPacketLength = 0; \
2060 for (_NdisBuffer = (Packet)->Private.Head; \
2061 _NdisBuffer != (PNDIS_BUFFER)NULL; \
2062 _NdisBuffer = _NdisBuffer->Next) \
2064 _PhysicalBufferCount += NDIS_BUFFER_TO_SPAN_PAGES(_NdisBuffer); \
2065 NdisQueryBufferOffset(_NdisBuffer, &_Offset, &_PacketLength); \
2066 _TotalPacketLength += _PacketLength; \
2069 (Packet)->Private.PhysicalCount = _PhysicalBufferCount; \
2070 (Packet)->Private.TotalLength = _TotalPacketLength; \
2071 (Packet)->Private.Count = _Count; \
2072 (Packet)->Private.ValidCounts = TRUE; \
2075 if (PhysicalBufferCount) \
2076 *((PUINT)PhysicalBufferCount) = (Packet)->Private.PhysicalCount; \
2079 *((PUINT)BufferCount) = (Packet)->Private.Count; \
2081 if (TotalPacketLength) \
2082 *((PUINT)TotalPacketLength) = (Packet)->Private.TotalLength; \
2088 * NdisQueryPacketLength(
2089 * IN PNDIS_PACKET Packet,
2090 * OUT PUINT PhysicalBufferCount OPTIONAL,
2091 * OUT PUINT BufferCount OPTIONAL,
2092 * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
2093 * OUT PUINT TotalPacketLength OPTIONAL);
2095 #define NdisQueryPacketLength(Packet, \
2096 TotalPacketLength) \
2098 if ((TotalPacketLength)) \
2100 if (!(Packet)->Private.ValidCounts) { \
2102 UINT _PacketLength; \
2103 PNDIS_BUFFER _NdisBuffer; \
2104 UINT _PhysicalBufferCount = 0; \
2105 UINT _TotalPacketLength = 0; \
2108 for (_NdisBuffer = (Packet)->Private.Head; \
2109 _NdisBuffer != (PNDIS_BUFFER)NULL; \
2110 _NdisBuffer = _NdisBuffer->Next) \
2112 _PhysicalBufferCount += NDIS_BUFFER_TO_SPAN_PAGES(_NdisBuffer); \
2113 NdisQueryBufferOffset(_NdisBuffer, &_Offset, &_PacketLength); \
2114 _TotalPacketLength += _PacketLength; \
2117 (Packet)->Private.PhysicalCount = _PhysicalBufferCount; \
2118 (Packet)->Private.TotalLength = _TotalPacketLength; \
2119 (Packet)->Private.Count = _Count; \
2120 (Packet)->Private.ValidCounts = TRUE; \
2123 if (TotalPacketLength) \
2124 *((PUINT)TotalPacketLength) = (Packet)->Private.TotalLength; \
2131 * NdisRecalculatePacketCounts(
2132 * IN OUT PNDIS_PACKET Packet);
2134 #define NdisRecalculatePacketCounts(Packet) \
2136 PNDIS_BUFFER _Buffer = (Packet)->Private.Head; \
2137 if (_Buffer != NULL) \
2139 while (_Buffer->Next != NULL) \
2141 ´_Buffer = _Buffer->Next; \
2143 (Packet)->Private.Tail = _Buffer; \
2145 (Packet)->Private.ValidCounts = FALSE; \
2151 * NdisReinitializePacket(
2152 * IN OUT PNDIS_PACKET Packet);
2154 #define NdisReinitializePacket(Packet) \
2156 (Packet)->Private.Head = (PNDIS_BUFFER)NULL; \
2157 (Packet)->Private.ValidCounts = FALSE; \
2163 * NdisSetPacketFlags(
2164 * IN PNDIS_PACKET Packet,
2167 #define NdisSetPacketFlags(Packet, Flags) \
2168 (Packet)->Private.Flags |= (Flags);
2173 * NDIS_SET_PACKET_HEADER_SIZE(
2174 * IN PNDIS_PACKET Packet,
2177 #define NDIS_SET_PACKET_HEADER_SIZE(_Packet, _HdrSize) \
2178 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2179 (_Packet)->Private.NdisPacketOobOffset))->HeaderSize = (_HdrSize)
2184 * NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(
2185 * IN PNDIS_PACKET Packet,
2186 * IN PVOID MediaSpecificInfo,
2187 * IN UINT SizeMediaSpecificInfo);
2189 #define NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \
2190 _MediaSpecificInfo, \
2191 _SizeMediaSpecificInfo) \
2193 if ((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) \
2195 (_Packet)->Private.NdisPacketFlags |= fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO; \
2196 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2197 (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation = \
2198 (_MediaSpecificInfo); \
2199 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2200 (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo = \
2201 (_SizeMediaSpecificInfo); \
2208 * NDIS_SET_PACKET_STATUS(
2209 * IN PNDIS_PACKET Packet,
2210 * IN NDIS_STATUS Status);
2212 #define NDIS_SET_PACKET_STATUS(_Packet, _Status) \
2213 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2214 (_Packet)->Private.NdisPacketOobOffset))->Status = (_Status)
2219 * NDIS_SET_PACKET_TIME_RECEIVED(
2220 * IN PNDIS_PACKET Packet,
2221 * IN ULONGLONG TimeReceived);
2223 #define NDIS_SET_PACKET_TIME_RECEIVED(_Packet, _TimeReceived) \
2224 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2225 (_Packet)->Private.NdisPacketOobOffset))->TimeReceived = (_TimeReceived)
2230 * NDIS_SET_PACKET_TIME_SENT(
2231 * IN PNDIS_PACKET Packet,
2232 * IN ULONGLONG TimeSent);
2234 #define NDIS_SET_PACKET_TIME_SENT(_Packet, _TimeSent) \
2235 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2236 (_Packet)->Private.NdisPacketOobOffset))->TimeSent = (_TimeSent)
2241 * NDIS_SET_PACKET_TIME_TO_SEND(
2242 * IN PNDIS_PACKET Packet,
2243 * IN ULONGLONG TimeToSend);
2245 #define NDIS_SET_PACKET_TIME_TO_SEND(_Packet, _TimeToSend) \
2246 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2247 (_Packet)->Private.NdisPacketOobOffset))->TimeToSend = (_TimeToSend)
2253 * IN PNDIS_PACKET Packet,
2256 #define NdisSetSendFlags(_Packet,_Flags)(_Packet)->Private.Flags = (_Flags)
2260 /* Memory management routines */
2264 * NdisCreateLookaheadBufferFromSharedMemory(
2265 * IN PVOID pSharedMemory,
2266 * IN UINT LookaheadLength,
2267 * OUT PVOID *pLookaheadBuffer)
2269 #define NdisCreateLookaheadBufferFromSharedMemory(_pSharedMemory, \
2271 _pLookaheadBuffer) \
2272 ((*(_pLookaheadBuffer)) = (_pSharedMemory))
2276 * NdisDestroyLookaheadBufferFromSharedMemory(
2277 * IN PVOID pLookaheadBuffer)
2279 #define NdisDestroyLookaheadBufferFromSharedMemory(_pLookaheadBuffer)
2285 * NdisMoveFromMappedMemory(
2286 * OUT PVOID Destination,
2290 #define NdisMoveFromMappedMemory(Destination, Source, Length) \
2291 NdisMoveMappedMemory(Destination, Source, Length)
2295 * NdisMoveMappedMemory(
2296 * OUT PVOID Destination,
2300 #define NdisMoveMappedMemory(Destination, Source, Length) \
2301 RtlCopyMemory(Destination, Source, Length)
2305 * NdisMoveToMappedMemory(
2306 * OUT PVOID Destination,
2310 #define NdisMoveToMappedMemory(Destination, Source, Length) \
2311 NdisMoveMappedMemory(Destination, Source, Length)
2317 * NdisMUpdateSharedMemory(
2318 * IN NDIS_HANDLE MiniportAdapterHandle,
2320 * IN PVOID VirtualAddress,
2321 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2323 #define NdisMUpdateSharedMemory(_H, _L, _V, _P) \
2324 NdisUpdateSharedMemory(_H, _L, _V, _P)
2330 /*OUT*/ PVOID *VirtualAddress,
2332 /*IN*/ UINT MemoryFlags,
2333 /*IN*/ NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress);
2339 /*IN*/ PVOID VirtualAddress,
2341 /*IN*/ UINT MemoryFlags);
2346 NdisImmediateReadSharedMemory(
2347 /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
2348 /*IN*/ ULONG SharedMemoryAddress,
2349 /*OUT*/ PUCHAR Buffer,
2350 /*IN*/ ULONG Length);
2355 NdisImmediateWriteSharedMemory(
2356 /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
2357 /*IN*/ ULONG SharedMemoryAddress,
2358 /*IN*/ PUCHAR Buffer,
2359 /*IN*/ ULONG Length);
2364 NdisMAllocateSharedMemory(
2365 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
2366 /*IN*/ ULONG Length,
2367 /*IN*/ BOOLEAN Cached,
2368 /*OUT*/ PVOID *VirtualAddress,
2369 /*OUT*/ PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
2374 NdisMAllocateSharedMemoryAsync(
2375 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
2376 /*IN*/ ULONG Length,
2377 /*IN*/ BOOLEAN Cached,
2378 /*IN*/ PVOID Context);
2382 #define NdisUpdateSharedMemory(NdisAdapterHandle, \
2392 NdisUpdateSharedMemory(
2393 /*IN*/ NDIS_HANDLE NdisAdapterHandle,
2394 /*IN*/ ULONG Length,
2395 /*IN*/ PVOID VirtualAddress,
2396 /*IN*/ NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2398 #endif /* defined(NDIS50) */
2402 * NdisGetPhysicalAddressHigh(
2403 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2405 #define NdisGetPhysicalAddressHigh(PhysicalAddress) \
2406 ((PhysicalAddress).HighPart)
2410 * NdisSetPhysicalAddressHigh(
2411 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
2414 #define NdisSetPhysicalAddressHigh(PhysicalAddress, Value) \
2415 ((PhysicalAddress).HighPart) = (Value)
2419 * NdisGetPhysicalAddressLow(
2420 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2422 #define NdisGetPhysicalAddressLow(PhysicalAddress) \
2423 ((PhysicalAddress).LowPart)
2428 * NdisSetPhysicalAddressLow(
2429 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
2432 #define NdisSetPhysicalAddressLow(PhysicalAddress, Value) \
2433 ((PhysicalAddress).LowPart) = (Value)
2437 * NDIS_PHYSICAL_ADDRESS_CONST(
2441 #define NDIS_PHYSICAL_ADDRESS_CONST(Low, High) \
2442 { {(ULONG)(Low), (LONG)(High)} }
2447 * IN CONST VOID *Source1,
2448 * IN CONST VOID *Source2,
2451 #define NdisEqualMemory(Source1, Source2, Length) \
2452 RtlEqualMemory(Source1, Source2, Length)
2457 * IN PVOID Destination,
2461 #define NdisFillMemory(Destination, Length, Fill) \
2462 RtlFillMemory(Destination, Length, Fill)
2466 * NdisZeroMappedMemory(
2467 * IN PVOID Destination,
2470 #define NdisZeroMappedMemory(Destination, Length) \
2471 RtlZeroMemory(Destination, Length)
2476 * OUT PVOID Destination,
2480 #define NdisMoveMemory(Destination, Source, Length) \
2481 RtlCopyMemory(Destination, Source, Length)
2486 * NdisRetrieveUlong(
2487 * IN PULONG DestinationAddress,
2488 * IN PULONG SourceAddress);
2490 #define NdisRetrieveUlong(DestinationAddress, SourceAddress) \
2491 RtlRetrieveUlong(DestinationAddress, SourceAddress)
2497 * IN PULONG DestinationAddress,
2500 #define NdisStoreUlong(DestinationAddress, Value) \
2501 RtlStoreUlong(DestinationAddress, Value)
2507 * IN PVOID Destination,
2510 #define NdisZeroMemory(Destination, Length) \
2511 RtlZeroMemory(Destination, Length)
2515 /* Configuration routines */
2520 NdisOpenConfiguration(
2521 /*OUT*/ PNDIS_STATUS Status,
2522 /*OUT*/ PNDIS_HANDLE ConfigurationHandle,
2523 /*IN*/ NDIS_HANDLE WrapperConfigurationContext);
2528 NdisReadNetworkAddress(
2529 /*OUT*/ PNDIS_STATUS Status,
2530 /*OUT*/ PVOID *NetworkAddress,
2531 /*OUT*/ PUINT NetworkAddressLength,
2532 /*IN*/ NDIS_HANDLE ConfigurationHandle);
2537 NdisReadEisaSlotInformation(
2538 /*OUT*/ PNDIS_STATUS Status,
2539 /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
2540 /*OUT*/ PUINT SlotNumber,
2541 /*OUT*/ PNDIS_EISA_FUNCTION_INFORMATION EisaData);
2546 NdisReadEisaSlotInformationEx(
2547 /*OUT*/ PNDIS_STATUS Status,
2548 /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
2549 /*OUT*/ PUINT SlotNumber,
2550 /*OUT*/ PNDIS_EISA_FUNCTION_INFORMATION *EisaData,
2551 /*OUT*/ PUINT NumberOfFunctions);
2556 NdisReadPciSlotInformation(
2557 /*IN*/ NDIS_HANDLE NdisAdapterHandle,
2558 /*IN*/ ULONG SlotNumber,
2559 /*IN*/ ULONG Offset,
2560 /*IN*/ PVOID Buffer,
2561 /*IN*/ ULONG Length);
2566 NdisWritePciSlotInformation(
2567 /*IN*/ NDIS_HANDLE NdisAdapterHandle,
2568 /*IN*/ ULONG SlotNumber,
2569 /*IN*/ ULONG Offset,
2570 /*IN*/ PVOID Buffer,
2571 /*IN*/ ULONG Length);
2575 /* String management routines */
2580 NdisAnsiStringToUnicodeString(
2581 /*IN OUT*/ PNDIS_STRING DestinationString,
2582 /*IN*/ PNDIS_ANSI_STRING SourceString);
2587 * IN PNDIS_STRING String1,
2588 * IN PNDIS_STRING String2,
2589 * IN BOOLEAN CaseInsensitive);
2591 #define NdisEqualString(_String1, _String2, _CaseInsensitive) \
2592 RtlEqualUnicodeString(_String1, _String2, _CaseInsensitive)
2598 /*IN OUT*/ PNDIS_ANSI_STRING DestinationString,
2599 /*IN*/ PCSTR SourceString);
2604 NdisInitUnicodeString(
2605 /*IN OUT*/ PNDIS_STRING DestinationString,
2606 /*IN*/ PCWSTR SourceString);
2611 NdisUnicodeStringToAnsiString(
2612 /*IN OUT*/ PNDIS_ANSI_STRING DestinationString,
2613 /*IN*/ PNDIS_STRING SourceString);
2615 #define NdisFreeString(_s) NdisFreeMemory((_s).Buffer, (_s).MaximumLength, 0)
2616 #define NdisPrintString(_s) DbgPrint("%ls", (_s).Buffer)
2619 /* Spin lock reoutines */
2623 * NdisAllocateSpinLock(
2624 * IN PNDIS_SPIN_LOCK SpinLock);
2626 #define NdisAllocateSpinLock(_SpinLock) \
2627 KeInitializeSpinLock(&(_SpinLock)->SpinLock)
2632 * IN PNDIS_SPIN_LOCK SpinLock);
2634 #define NdisFreeSpinLock(_SpinLock)
2638 * NdisAcquireSpinLock(
2639 * IN PNDIS_SPIN_LOCK SpinLock);
2641 #define NdisAcquireSpinLock(_SpinLock) \
2642 KeAcquireSpinLock(&(_SpinLock)->SpinLock, &(_SpinLock)->OldIrql)
2646 * NdisReleaseSpinLock(
2647 * IN PNDIS_SPIN_LOCK SpinLock);
2649 #define NdisReleaseSpinLock(_SpinLock) \
2650 KeReleaseSpinLock(&(_SpinLock)->SpinLock, (_SpinLock)->OldIrql)
2654 * NdisDprAcquireSpinLock(
2655 * IN PNDIS_SPIN_LOCK SpinLock);
2657 #define NdisDprAcquireSpinLock(_SpinLock) \
2659 KeAcquireSpinLockAtDpcLevel(&(_SpinLock)->SpinLock); \
2660 (_SpinLock)->OldIrql = DISPATCH_LEVEL; \
2665 * NdisDprReleaseSpinLock(
2666 * IN PNDIS_SPIN_LOCK SpinLock);
2668 #define NdisDprReleaseSpinLock(_SpinLock) \
2669 KeReleaseSpinLockFromDpcLevel(&(_SpinLock)->SpinLock)
2677 * NdisRawReadPortBufferUchar(
2679 * OUT PUCHAR Buffer,
2682 #define NdisRawReadPortBufferUchar(Port, Buffer, Length) \
2683 READ_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
2687 * NdisRawReadPortBufferUlong(
2689 * OUT PULONG Buffer,
2692 #define NdisRawReadPortBufferUlong(Port, Buffer, Length) \
2693 READ_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
2697 * NdisRawReadPortBufferUshort(
2699 * OUT PUSHORT Buffer,
2702 #define NdisRawReadPortBufferUshort(Port, Buffer, Length) \
2703 READ_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
2708 * NdisRawReadPortUchar(
2712 #define NdisRawReadPortUchar(Port, Data) \
2713 *(Data) = READ_PORT_UCHAR((PUCHAR)(Port))
2717 * NdisRawReadPortUlong(
2721 #define NdisRawReadPortUlong(Port, Data) \
2722 *(Data) = READ_PORT_ULONG((PULONG)(Port))
2726 * NdisRawReadPortUshort(
2728 * OUT PUSHORT Data);
2730 #define NdisRawReadPortUshort(Port, Data) \
2731 *(Data) = READ_PORT_USHORT((PUSHORT)(Port))
2736 * NdisRawWritePortBufferUchar(
2741 #define NdisRawWritePortBufferUchar(Port, Buffer, Length) \
2742 WRITE_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
2746 * NdisRawWritePortBufferUlong(
2751 #define NdisRawWritePortBufferUlong(Port, Buffer, Length) \
2752 WRITE_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
2756 * NdisRawWritePortBufferUshort(
2758 * IN PUSHORT Buffer,
2761 #define NdisRawWritePortBufferUshort(Port, Buffer, Length) \
2762 WRITE_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
2767 * NdisRawWritePortUchar(
2771 #define NdisRawWritePortUchar(Port, Data) \
2772 WRITE_PORT_UCHAR((PUCHAR)(Port), (UCHAR)(Data))
2776 * NdisRawWritePortUlong(
2780 #define NdisRawWritePortUlong(Port, Data) \
2781 WRITE_PORT_ULONG((PULONG)(Port), (ULONG)(Data))
2785 * NdisRawWritePortUshort(
2789 #define NdisRawWritePortUshort(Port, Data) \
2790 WRITE_PORT_USHORT((PUSHORT)(Port), (USHORT)(Data))
2795 * NdisReadRegisterUchar(
2796 * IN PUCHAR Register,
2799 #define NdisReadRegisterUchar(Register, Data) \
2800 *(Data) = *(Register)
2804 * NdisReadRegisterUlong(
2805 * IN PULONG Register,
2808 #define NdisReadRegisterUlong(Register, Data) \
2809 *(Data) = *(Register)
2813 * NdisReadRegisterUshort(
2814 * IN PUSHORT Register,
2815 * OUT PUSHORT Data);
2817 #define NdisReadRegisterUshort(Register, Data) \
2818 *(Data) = *(Register)
2822 * NdisReadRegisterUchar(
2823 * IN PUCHAR Register,
2826 #define NdisWriteRegisterUchar(Register, Data) \
2827 WRITE_REGISTER_UCHAR((Register), (Data))
2831 * NdisReadRegisterUlong(
2832 * IN PULONG Register,
2835 #define NdisWriteRegisterUlong(Register, Data) \
2836 WRITE_REGISTER_ULONG((Register), (Data))
2840 * NdisReadRegisterUshort(
2841 * IN PUSHORT Register,
2844 #define NdisWriteRegisterUshort(Register, Data) \
2845 WRITE_REGISTER_USHORT((Register), (Data))
2852 * NdisInitializeListHead(
2853 * IN PLIST_ENTRY ListHead);
2855 #define NdisInitializeListHead(_ListHead) \
2856 InitializeListHead(_ListHead)
2860 * NdisInterlockedInsertHeadList(
2861 * IN PLIST_ENTRY ListHead,
2862 * IN PLIST_ENTRY ListEntry,
2863 * IN PNDIS_SPIN_LOCK SpinLock);
2865 #define NdisInterlockedInsertHeadList(_ListHead, _ListEntry, _SpinLock) \
2866 ExInterlockedInsertHeadList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
2870 * NdisInterlockedInsertTailList(
2871 * IN PLIST_ENTRY ListHead,
2872 * IN PLIST_ENTRY ListEntry,
2873 * IN PNDIS_SPIN_LOCK SpinLock);
2875 #define NdisInterlockedInsertTailList(_ListHead, _ListEntry, _SpinLock) \
2876 ExInterlockedInsertTailList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
2880 * NdisInterlockedRemoveHeadList(
2881 * IN PLIST_ENTRY ListHead,
2882 * IN PNDIS_SPIN_LOCK SpinLock);
2884 #define NdisInterlockedRemoveHeadList(_ListHead, _SpinLock) \
2885 ExInterlockedRemoveHeadList(_ListHead, &(_SpinLock)->SpinLock)
2889 * NdisInitializeSListHead(
2890 * IN PSLIST_HEADER SListHead);
2892 #define NdisInitializeSListHead(SListHead) ExInitializeSListHead(SListHead)
2895 * USHORT NdisQueryDepthSList(
2896 * IN PSLIST_HEADER SListHead);
2898 #define NdisQueryDepthSList(SListHead) ExQueryDepthSList(SListHead)
2902 /* Interlocked routines */
2906 * NdisInterlockedDecrement(
2909 #define NdisInterlockedDecrement(Addend) InterlockedDecrement(Addend)
2913 * NdisInterlockedIncrement(
2916 #define NdisInterlockedIncrement(Addend) InterlockedIncrement(Addend)
2920 * NdisInterlockedAddUlong(
2922 * IN ULONG Increment,
2923 * IN PNDIS_SPIN_LOCK SpinLock);
2925 #define NdisInterlockedAddUlong(_Addend, _Increment, _SpinLock) \
2926 ExInterlockedAddUlong(_Addend, _Increment, &(_SpinLock)->SpinLock)
2930 /* Miscellaneous routines */
2935 NdisCloseConfiguration(
2936 /*IN*/ NDIS_HANDLE ConfigurationHandle);
2941 NdisReadConfiguration(
2942 /*OUT*/ PNDIS_STATUS Status,
2943 /*OUT*/ PNDIS_CONFIGURATION_PARAMETER *ParameterValue,
2944 /*IN*/ NDIS_HANDLE ConfigurationHandle,
2945 /*IN*/ PNDIS_STRING Keyword,
2946 /*IN*/ NDIS_PARAMETER_TYPE ParameterType);
2951 NdisWriteConfiguration(
2952 /*OUT*/ PNDIS_STATUS Status,
2953 /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
2954 /*IN*/ PNDIS_STRING Keyword,
2955 /*IN*/ PNDIS_CONFIGURATION_PARAMETER *ParameterValue);
2960 NdisWriteErrorLogEntry(
2961 /*IN*/ NDIS_HANDLE NdisAdapterHandle,
2962 /*IN*/ NDIS_ERROR_CODE ErrorCode,
2963 /*IN*/ ULONG NumberOfErrorValues,
2968 * NdisStallExecution(
2969 * IN UINT MicrosecondsToStall)
2971 #define NdisStallExecution KeStallExecutionProcessor
2975 * NdisGetCurrentSystemTime(
2976 * IN PLARGE_INTEGER pSystemTime);
2978 #define NdisGetCurrentSystemTime KeQuerySystemTime
2983 NdisGetCurrentProcessorCpuUsage(
2984 /*OUT*/ PULONG pCpuUsage);
2988 /* NDIS helper macros */
2992 * NDIS_INIT_FUNCTION(FunctionName)
2994 #define NDIS_INIT_FUNCTION(FunctionName) \
2995 alloc_text(init, FunctionName)
2999 * NDIS_PAGABLE_FUNCTION(FunctionName)
3001 #define NDIS_PAGEABLE_FUNCTION(FunctionName) \
3002 alloc_text(page, FunctionName)
3004 #define NDIS_PAGABLE_FUNCTION NDIS_PAGEABLE_FUNCTION
3007 /* NDIS 4.0 extensions */
3012 NdisMFreeSharedMemory(
3013 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
3014 /*IN*/ ULONG Length,
3015 /*IN*/ BOOLEAN Cached,
3016 /*IN*/ PVOID VirtualAddress,
3017 /*IN*/ NDIS_PHYSICAL_ADDRESS PhysicalAddress);
3022 NdisMWanIndicateReceive(
3023 /*OUT*/ PNDIS_STATUS Status,
3024 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
3025 /*IN*/ NDIS_HANDLE NdisLinkContext,
3026 /*IN*/ PUCHAR PacketBuffer,
3027 /*IN*/ UINT PacketSize);
3029 #define NdisMIndicateReceivePacket(_handle, _packets, _number) \
3031 (*((PNDIS_MINIPORT_BLOCK)(_handle))->PacketIndicateHandler)(_handle, _packets, _number); \
3037 NdisMWanIndicateReceiveComplete(
3038 /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
3043 NdisMWanSendComplete(
3044 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
3045 /*IN*/ PNDIS_WAN_PACKET Packet,
3046 /*IN*/ NDIS_STATUS Status);
3051 NdisPciAssignResources(
3052 /*IN*/ NDIS_HANDLE NdisMacHandle,
3053 /*IN*/ NDIS_HANDLE NdisWrapperHandle,
3054 /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
3055 /*IN*/ ULONG SlotNumber,
3056 /*OUT*/ PNDIS_RESOURCE_LIST *AssignedResources);
3059 /* NDIS 5.0 extensions */
3064 NdisAcquireReadWriteLock(
3065 /*IN*/ PNDIS_RW_LOCK Lock,
3066 /*IN*/ BOOLEAN fWrite,
3067 /*IN*/ PLOCK_STATE LockState);
3072 NdisAllocateMemoryWithTag(
3073 /*OUT*/ PVOID *VirtualAddress,
3080 NdisAllocatePacketPoolEx(
3081 /*OUT*/ PNDIS_STATUS Status,
3082 /*OUT*/ PNDIS_HANDLE PoolHandle,
3083 /*IN*/ UINT NumberOfDescriptors,
3084 /*IN*/ UINT NumberOfOverflowDescriptors,
3085 /*IN*/ UINT ProtocolReservedLength);
3090 NdisCompletePnPEvent(
3091 /*IN*/ NDIS_STATUS Status,
3092 /*IN*/ NDIS_HANDLE NdisBindingHandle,
3093 /*IN*/ PNET_PNP_EVENT NetPnPEvent);
3098 NdisGetCurrentProcessorCounts(
3099 /*OUT*/ PULONG pIdleCount,
3100 /*OUT*/ PULONG pKernelAndUser,
3101 /*OUT*/ PULONG pIndex);
3106 NdisGetDriverHandle(
3107 /*IN*/ PNDIS_HANDLE NdisBindingHandle,
3108 /*OUT*/ PNDIS_HANDLE NdisDriverHandle);
3113 NdisGetReceivedPacket(
3114 /*IN*/ PNDIS_HANDLE NdisBindingHandle,
3115 /*IN*/ PNDIS_HANDLE MacContext);
3120 NdisGetSystemUptime(
3121 /*OUT*/ PULONG pSystemUpTime);
3126 NdisInitializeReadWriteLock(
3127 /*IN*/ PNDIS_RW_LOCK Lock);
3132 NdisMDeregisterDevice(
3133 /*IN*/ NDIS_HANDLE NdisDeviceHandle);
3138 NdisMGetDeviceProperty(
3139 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
3140 /*IN OUT*/ PDEVICE_OBJECT *PhysicalDeviceObject /*OPTIONAL*/,
3141 /*IN OUT*/ PDEVICE_OBJECT *FunctionalDeviceObject /*OPTIONAL*/,
3142 /*IN OUT*/ PDEVICE_OBJECT *NextDeviceObject /*OPTIONAL*/,
3143 /*IN OUT*/ PCM_RESOURCE_LIST *AllocatedResources /*OPTIONAL*/,
3144 /*IN OUT*/ PCM_RESOURCE_LIST *AllocatedResourcesTranslated /*OPTIONAL*/);
3149 NdisMInitializeScatterGatherDma(
3150 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
3151 /*IN*/ BOOLEAN Dma64BitAddresses,
3152 /*IN*/ ULONG MaximumPhysicalMapping);
3157 NdisMPromoteMiniport(
3158 /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
3163 NdisMQueryAdapterInstanceName(
3164 /*OUT*/ PNDIS_STRING AdapterInstanceName,
3165 /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
3170 NdisMRegisterDevice(
3171 /*IN*/ NDIS_HANDLE NdisWrapperHandle,
3172 /*IN*/ PNDIS_STRING DeviceName,
3173 /*IN*/ PNDIS_STRING SymbolicName,
3174 /*IN*/ PDRIVER_DISPATCH MajorFunctions[],
3175 /*OUT*/ PDEVICE_OBJECT *pDeviceObject,
3176 /*OUT*/ NDIS_HANDLE *NdisDeviceHandle);
3181 NdisMRegisterUnloadHandler(
3182 /*IN*/ NDIS_HANDLE NdisWrapperHandle,
3183 /*IN*/ PDRIVER_UNLOAD UnloadHandler);
3188 NdisMRemoveMiniport(
3189 /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
3194 NdisMSetMiniportSecondary(
3195 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
3196 /*IN*/ NDIS_HANDLE PrimaryMiniportAdapterHandle);
3201 NdisOpenConfigurationKeyByIndex(
3202 /*OUT*/ PNDIS_STATUS Status,
3203 /*IN*/ NDIS_HANDLE ConfigurationHandle,
3205 /*OUT*/ PNDIS_STRING KeyName,
3206 /*OUT*/ PNDIS_HANDLE KeyHandle);
3211 NdisOpenConfigurationKeyByName(
3212 /*OUT*/ PNDIS_STATUS Status,
3213 /*IN*/ NDIS_HANDLE ConfigurationHandle,
3214 /*IN*/ PNDIS_STRING SubKeyName,
3215 /*OUT*/ PNDIS_HANDLE SubKeyHandle);
3220 NdisPacketPoolUsage(
3221 /*IN*/ NDIS_HANDLE PoolHandle);
3226 NdisSetPacketPoolProtocolId(
3227 /*IN*/ NDIS_HANDLE PacketPoolHandle,
3228 /*IN*/ UINT ProtocolId);
3233 NdisQueryAdapterInstanceName(
3234 /*OUT*/ PNDIS_STRING AdapterInstanceName,
3235 /*IN*/ NDIS_HANDLE NdisBindingHandle);
3240 NdisReadPcmciaAttributeMemory(
3241 /*IN*/ NDIS_HANDLE NdisAdapterHandle,
3242 /*IN*/ ULONG Offset,
3243 /*IN*/ PVOID Buffer,
3244 /*IN*/ ULONG Length);
3249 NdisReleaseReadWriteLock(
3250 /*IN*/ PNDIS_RW_LOCK Lock,
3251 /*IN*/ PLOCK_STATE LockState);
3256 NdisWriteEventLogEntry(
3257 /*IN*/ PVOID LogHandle,
3258 /*IN*/ NDIS_STATUS EventCode,
3259 /*IN*/ ULONG UniqueEventValue,
3260 /*IN*/ USHORT NumStrings,
3261 /*IN*/ PVOID StringsList /*OPTIONAL*/,
3262 /*IN*/ ULONG DataSize,
3263 /*IN*/ PVOID Data /*OPTIONAL*/);
3268 NdisWritePcmciaAttributeMemory(
3269 /*IN*/ NDIS_HANDLE NdisAdapterHandle,
3270 /*IN*/ ULONG Offset,
3271 /*IN*/ PVOID Buffer,
3272 /*IN*/ ULONG Length);
3275 /* Connectionless services */
3281 /*IN*/ NDIS_HANDLE NdisVcHandle,
3282 /*IN*/ NDIS_HANDLE ProtocolPartyContext,
3283 /*IN OUT*/ PCO_CALL_PARAMETERS CallParameters,
3284 /*OUT*/ PNDIS_HANDLE NdisPartyHandle);
3289 NdisClCloseAddressFamily(
3290 /*IN*/ NDIS_HANDLE NdisAfHandle);
3296 /*IN*/ NDIS_HANDLE NdisVcHandle,
3297 /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/,
3298 /*IN*/ PVOID Buffer /*OPTIONAL*/,
3304 NdisClDeregisterSap(
3305 /*IN*/ NDIS_HANDLE NdisSapHandle);
3311 /*IN*/ NDIS_HANDLE NdisPartyHandle,
3312 /*IN*/ PVOID Buffer /*OPTIONAL*/,
3318 NdisClIncomingCallComplete(
3319 /*IN*/ NDIS_STATUS Status,
3320 /*IN*/ NDIS_HANDLE NdisVcHandle,
3321 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
3327 /*IN*/ NDIS_HANDLE NdisVcHandle,
3328 /*IN OUT*/ PCO_CALL_PARAMETERS CallParameters,
3329 /*IN*/ NDIS_HANDLE ProtocolPartyContext /*OPTIONAL*/,
3330 /*OUT*/ PNDIS_HANDLE NdisPartyHandle /*OPTIONAL*/);
3335 NdisClModifyCallQoS(
3336 /*IN*/ NDIS_HANDLE NdisVcHandle,
3337 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
3343 NdisClOpenAddressFamily(
3344 /*IN*/ NDIS_HANDLE NdisBindingHandle,
3345 /*IN*/ PCO_ADDRESS_FAMILY AddressFamily,
3346 /*IN*/ NDIS_HANDLE ProtocolAfContext,
3347 /*IN*/ PNDIS_CLIENT_CHARACTERISTICS ClCharacteristics,
3348 /*IN*/ UINT SizeOfClCharacteristics,
3349 /*OUT*/ PNDIS_HANDLE NdisAfHandle);
3355 /*IN*/ NDIS_HANDLE NdisAfHandle,
3356 /*IN*/ NDIS_HANDLE ProtocolSapContext,
3358 /*OUT*/ PNDIS_HANDLE NdisSapHandle);
3361 /* Call Manager services */
3367 /*IN*/ NDIS_HANDLE NdisVcHandle,
3368 /*IN OUT*/ PCO_CALL_PARAMETERS CallParameters);
3373 NdisCmAddPartyComplete(
3374 /*IN*/ NDIS_STATUS Status,
3375 /*IN*/ NDIS_HANDLE NdisPartyHandle,
3376 /*IN*/ NDIS_HANDLE CallMgrPartyContext /*OPTIONAL*/,
3377 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
3382 NdisCmCloseAddressFamilyComplete(
3383 /*IN*/ NDIS_STATUS Status,
3384 /*IN*/ NDIS_HANDLE NdisAfHandle);
3389 NdisCmCloseCallComplete(
3390 /*IN*/ NDIS_STATUS Status,
3391 /*IN*/ NDIS_HANDLE NdisVcHandle,
3392 /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/);
3398 /*IN*/ NDIS_HANDLE NdisVcHandle);
3403 NdisCmDeregisterSapComplete(
3404 /*IN*/ NDIS_STATUS Status,
3405 /*IN*/ NDIS_HANDLE NdisSapHandle);
3410 NdisCmDispatchCallConnected(
3411 /*IN*/ NDIS_HANDLE NdisVcHandle);
3416 NdisCmDispatchIncomingCall(
3417 /*IN*/ NDIS_HANDLE NdisSapHandle,
3418 /*IN*/ NDIS_HANDLE NdisVcHandle,
3419 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
3424 NdisCmDispatchIncomingCallQoSChange(
3425 /*IN*/ NDIS_HANDLE NdisVcHandle,
3426 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
3431 NdisCmDispatchIncomingCloseCall(
3432 /*IN*/ NDIS_STATUS CloseStatus,
3433 /*IN*/ NDIS_HANDLE NdisVcHandle,
3434 /*IN*/ PVOID Buffer /*OPTIONAL*/,
3440 NdisCmDispatchIncomingDropParty(
3441 /*IN*/ NDIS_STATUS DropStatus,
3442 /*IN*/ NDIS_HANDLE NdisPartyHandle,
3443 /*IN*/ PVOID Buffer /*OPTIONAL*/,
3449 NdisCmDropPartyComplete(
3450 /*IN*/ NDIS_STATUS Status,
3451 /*IN*/ NDIS_HANDLE NdisPartyHandle);
3456 NdisCmMakeCallComplete(
3457 /*IN*/ NDIS_STATUS Status,
3458 /*IN*/ NDIS_HANDLE NdisVcHandle,
3459 /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/,
3460 /*IN*/ NDIS_HANDLE CallMgrPartyContext /*OPTIONAL*/,
3461 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
3466 NdisCmModifyCallQoSComplete(
3467 /*IN*/ NDIS_STATUS Status,
3468 /*IN*/ NDIS_HANDLE NdisVcHandle,
3469 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
3474 NdisCmOpenAddressFamilyComplete(
3475 /*IN*/ NDIS_STATUS Status,
3476 /*IN*/ NDIS_HANDLE NdisAfHandle,
3477 /*IN*/ NDIS_HANDLE CallMgrAfContext);
3482 NdisCmRegisterAddressFamily(
3483 /*IN*/ NDIS_HANDLE NdisBindingHandle,
3484 /*IN*/ PCO_ADDRESS_FAMILY AddressFamily,
3485 /*IN*/ PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics,
3486 /*IN*/ UINT SizeOfCmCharacteristics);
3491 NdisCmRegisterSapComplete(
3492 /*IN*/ NDIS_STATUS Status,
3493 /*IN*/ NDIS_HANDLE NdisSapHandle,
3494 /*IN*/ NDIS_HANDLE CallMgrSapContext);
3501 /*IN*/ NDIS_HANDLE NdisVcHandle,
3502 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
3508 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
3509 /*IN*/ NDIS_HANDLE NdisAfHandle,
3510 /*IN*/ NDIS_HANDLE MiniportVcContext,
3511 /*OUT*/ PNDIS_HANDLE NdisVcHandle);
3516 NdisMCmDeactivateVc(
3517 /*IN*/ NDIS_HANDLE NdisVcHandle);
3523 /*IN*/ NDIS_HANDLE NdisVcHandle);
3528 NdisMCmRegisterAddressFamily(
3529 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
3530 /*IN*/ PCO_ADDRESS_FAMILY AddressFamily,
3531 /*IN*/ PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics,
3532 /*IN*/ UINT SizeOfCmCharacteristics);
3538 /*IN*/ NDIS_HANDLE NdisAfHandle,
3539 /*IN*/ NDIS_HANDLE NdisVcHandle /*OPTIONAL*/,
3540 /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/,
3541 /*IN OUT*/ PNDIS_REQUEST NdisRequest);
3544 /* Connection-oriented services */
3550 /*IN*/ NDIS_HANDLE NdisBindingHandle,
3551 /*IN*/ NDIS_HANDLE NdisAfHandle /*OPTIONAL*/,
3552 /*IN*/ NDIS_HANDLE ProtocolVcContext,
3553 /*IN OUT*/ PNDIS_HANDLE NdisVcHandle);
3559 /*IN*/ NDIS_HANDLE NdisVcHandle);
3565 /*IN*/ NDIS_HANDLE NdisBindingHandle,
3566 /*IN*/ NDIS_HANDLE NdisAfHandle /*OPTIONAL*/,
3567 /*IN*/ NDIS_HANDLE NdisVcHandle /*OPTIONAL*/,
3568 /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/,
3569 /*IN OUT*/ PNDIS_REQUEST NdisRequest);
3574 NdisCoRequestComplete(
3575 /*IN*/ NDIS_STATUS Status,
3576 /*IN*/ NDIS_HANDLE NdisAfHandle,
3577 /*IN*/ NDIS_HANDLE NdisVcHandle /*OPTIONAL*/,
3578 /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/,
3579 /*IN*/ PNDIS_REQUEST NdisRequest);
3585 /*IN*/ NDIS_HANDLE NdisVcHandle,
3586 /*IN*/ PPNDIS_PACKET PacketArray,
3587 /*IN*/ UINT NumberOfPackets);
3592 NdisMCoActivateVcComplete(
3593 /*IN*/ NDIS_STATUS Status,
3594 /*IN*/ NDIS_HANDLE NdisVcHandle,
3595 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
3600 NdisMCoDeactivateVcComplete(
3601 /*IN*/ NDIS_STATUS Status,
3602 /*IN*/ NDIS_HANDLE NdisVcHandle);
3607 NdisMCoIndicateReceivePacket(
3608 /*IN*/ NDIS_HANDLE NdisVcHandle,
3609 /*IN*/ PPNDIS_PACKET PacketArray,
3610 /*IN*/ UINT NumberOfPackets);
3615 NdisMCoIndicateStatus(
3616 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
3617 /*IN*/ NDIS_HANDLE NdisVcHandle /*OPTIONAL*/,
3618 /*IN*/ NDIS_STATUS GeneralStatus,
3619 /*IN*/ PVOID StatusBuffer /*OPTIONAL*/,
3620 /*IN*/ ULONG StatusBufferSize);
3625 NdisMCoReceiveComplete(
3626 /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
3631 NdisMCoRequestComplete(
3632 /*IN*/ NDIS_STATUS Status,
3633 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
3634 /*IN*/ PNDIS_REQUEST Request);
3639 NdisMCoSendComplete(
3640 /*IN*/ NDIS_STATUS Status,
3641 /*IN*/ NDIS_HANDLE NdisVcHandle,
3642 /*IN*/ PNDIS_PACKET Packet);
3645 /* NDIS 5.0 extensions for intermediate drivers */
3650 NdisIMAssociateMiniport(
3651 /*IN*/ NDIS_HANDLE DriverHandle,
3652 /*IN*/ NDIS_HANDLE ProtocolHandle);
3657 NdisIMCancelInitializeDeviceInstance(
3658 /*IN*/ NDIS_HANDLE DriverHandle,
3659 /*IN*/ PNDIS_STRING DeviceInstance);
3664 NdisIMCopySendCompletePerPacketInfo(
3665 /*IN*/ PNDIS_PACKET DstPacket,
3666 /*IN*/ PNDIS_PACKET SrcPacket);
3671 NdisIMCopySendPerPacketInfo(
3672 /*IN*/ PNDIS_PACKET DstPacket,
3673 /*IN*/ PNDIS_PACKET SrcPacket);
3678 NdisIMDeregisterLayeredMiniport(
3679 /*IN*/ NDIS_HANDLE DriverHandle);
3684 NdisIMGetBindingContext(
3685 /*IN*/ NDIS_HANDLE NdisBindingHandle);
3690 NdisIMGetDeviceContext(
3691 /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
3696 NdisIMInitializeDeviceInstanceEx(
3697 /*IN*/ NDIS_HANDLE DriverHandle,
3698 /*IN*/ PNDIS_STRING DriverInstance,
3699 /*IN*/ NDIS_HANDLE DeviceContext /*OPTIONAL*/);
3704 NdisInterlockedPopEntrySList(
3705 /*IN*/ PSLIST_HEADER ListHead,
3706 /*IN*/ PKSPIN_LOCK Lock);
3711 NdisInterlockedPushEntrySList(
3712 /*IN*/ PSLIST_HEADER ListHead,
3713 /*IN*/ PSINGLE_LIST_ENTRY ListEntry,
3714 /*IN*/ PKSPIN_LOCK Lock);
3719 NdisQueryBufferSafe(
3720 /*IN*/ PNDIS_BUFFER Buffer,
3721 /*OUT*/ PVOID *VirtualAddress /*OPTIONAL*/,
3722 /*OUT*/ PUINT Length,
3723 /*IN*/ UINT Priority);
3726 /* Prototypes for NDIS_MINIPORT_CHARACTERISTICS */
3728 typedef BOOLEAN DDKAPI
3729 (*W_CHECK_FOR_HANG_HANDLER)(
3730 /*IN*/ NDIS_HANDLE MiniportAdapterContext);
3733 (*W_DISABLE_INTERRUPT_HANDLER)(
3734 /*IN*/ NDIS_HANDLE MiniportAdapterContext);
3737 (*W_ENABLE_INTERRUPT_HANDLER)(
3738 /*IN*/ NDIS_HANDLE MiniportAdapterContext);
3742 /*IN*/ NDIS_HANDLE MiniportAdapterContext);
3745 (*W_HANDLE_INTERRUPT_HANDLER)(
3746 /*IN*/ NDIS_HANDLE MiniportAdapterContext);
3748 typedef NDIS_STATUS DDKAPI
3749 (*W_INITIALIZE_HANDLER)(
3750 /*OUT*/ PNDIS_STATUS OpenErrorStatus,
3751 /*OUT*/ PUINT SelectedMediumIndex,
3752 /*IN*/ PNDIS_MEDIUM MediumArray,
3753 /*IN*/ UINT MediumArraySize,
3754 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
3755 /*IN*/ NDIS_HANDLE WrapperConfigurationContext);
3759 /*OUT*/ PBOOLEAN InterruptRecognized,
3760 /*OUT*/ PBOOLEAN QueueMiniportHandleInterrupt,
3761 /*IN*/ NDIS_HANDLE MiniportAdapterContext);
3763 typedef NDIS_STATUS DDKAPI
3764 (*W_QUERY_INFORMATION_HANDLER)(
3765 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
3766 /*IN*/ NDIS_OID Oid,
3767 /*IN*/ PVOID InformationBuffer,
3768 /*IN*/ ULONG InformationBufferLength,
3769 /*OUT*/ PULONG BytesWritten,
3770 /*OUT*/ PULONG BytesNeeded);
3772 typedef NDIS_STATUS DDKAPI
3773 (*W_RECONFIGURE_HANDLER)(
3774 /*OUT*/ PNDIS_STATUS OpenErrorStatus,
3775 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
3776 /*IN*/ NDIS_HANDLE WrapperConfigurationContext);
3778 typedef NDIS_STATUS DDKAPI
3780 /*OUT*/ PBOOLEAN AddressingReset,
3781 /*IN*/ NDIS_HANDLE MiniportAdapterContext);
3783 typedef NDIS_STATUS DDKAPI
3785 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
3786 /*IN*/ PNDIS_PACKET Packet,
3789 typedef NDIS_STATUS DDKAPI
3791 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
3792 /*IN*/ NDIS_HANDLE NdisLinkHandle,
3793 /*IN*/ PNDIS_WAN_PACKET Packet);
3795 typedef NDIS_STATUS DDKAPI
3796 (*W_SET_INFORMATION_HANDLER)(
3797 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
3798 /*IN*/ NDIS_OID Oid,
3799 /*IN*/ PVOID InformationBuffer,
3800 /*IN*/ ULONG InformationBufferLength,
3801 /*OUT*/ PULONG BytesRead,
3802 /*OUT*/ PULONG BytesNeeded);
3804 typedef NDIS_STATUS DDKAPI
3805 (*W_TRANSFER_DATA_HANDLER)(
3806 /*OUT*/ PNDIS_PACKET Packet,
3807 /*OUT*/ PUINT BytesTransferred,
3808 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
3809 /*IN*/ NDIS_HANDLE MiniportReceiveContext,
3810 /*IN*/ UINT ByteOffset,
3811 /*IN*/ UINT BytesToTransfer);
3813 typedef NDIS_STATUS DDKAPI
3814 (*WM_TRANSFER_DATA_HANDLER)(
3818 /* NDIS structures available only to miniport drivers */
3820 #define NDIS30_MINIPORT_CHARACTERISTICS_S \
3821 UCHAR MajorNdisVersion; \
3822 UCHAR MinorNdisVersion; \
3824 W_CHECK_FOR_HANG_HANDLER CheckForHangHandler; \
3825 W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler; \
3826 W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler; \
3827 W_HALT_HANDLER HaltHandler; \
3828 W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler; \
3829 W_INITIALIZE_HANDLER InitializeHandler; \
3830 W_ISR_HANDLER ISRHandler; \
3831 W_QUERY_INFORMATION_HANDLER QueryInformationHandler; \
3832 W_RECONFIGURE_HANDLER ReconfigureHandler; \
3833 W_RESET_HANDLER ResetHandler; \
3834 _ANONYMOUS_UNION union { \
3835 W_SEND_HANDLER SendHandler; \
3836 WM_SEND_HANDLER WanSendHandler; \
3837 } _UNION_NAME(u1); \
3838 W_SET_INFORMATION_HANDLER SetInformationHandler; \
3839 _ANONYMOUS_UNION union { \
3840 W_TRANSFER_DATA_HANDLER TransferDataHandler; \
3841 WM_TRANSFER_DATA_HANDLER WanTransferDataHandler; \
3844 typedef struct _NDIS30_MINIPORT_CHARACTERISTICS {
3845 NDIS30_MINIPORT_CHARACTERISTICS_S
3846 } NDIS30_MINIPORT_CHARACTERISTICS, *PSNDIS30_MINIPORT_CHARACTERISTICS;
3849 /* Extensions for NDIS 4.0 miniports */
3852 (*W_SEND_PACKETS_HANDLER)(
3853 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
3854 /*IN*/ PPNDIS_PACKET PacketArray,
3855 /*IN*/ UINT NumberOfPackets);
3858 (*W_RETURN_PACKET_HANDLER)(
3859 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
3860 /*IN*/ PNDIS_PACKET Packet);
3863 (*W_ALLOCATE_COMPLETE_HANDLER)(
3864 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
3865 /*IN*/ PVOID VirtualAddress,
3866 /*IN*/ PNDIS_PHYSICAL_ADDRESS PhysicalAddress,
3867 /*IN*/ ULONG Length,
3868 /*IN*/ PVOID Context);
3872 #define NDIS40_MINIPORT_CHARACTERISTICS_S \
3873 NDIS30_MINIPORT_CHARACTERISTICS Ndis30Chars; \
3874 W_RETURN_PACKET_HANDLER ReturnPacketHandler; \
3875 W_SEND_PACKETS_HANDLER SendPacketsHandler; \
3876 W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
3878 #else /* !__cplusplus */
3880 #define NDIS40_MINIPORT_CHARACTERISTICS_S \
3881 NDIS30_MINIPORT_CHARACTERISTICS_S \
3882 W_RETURN_PACKET_HANDLER ReturnPacketHandler; \
3883 W_SEND_PACKETS_HANDLER SendPacketsHandler; \
3884 W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
3886 #endif /* !__cplusplus */
3888 typedef struct _NDIS40_MINIPORT_CHARACTERISTICS {
3889 NDIS40_MINIPORT_CHARACTERISTICS_S
3890 } NDIS40_MINIPORT_CHARACTERISTICS, *PNDIS40_MINIPORT_CHARACTERISTICS;
3893 /* Extensions for NDIS 5.0 miniports */
3895 typedef NDIS_STATUS DDKAPI
3896 (*W_CO_CREATE_VC_HANDLER)(
3897 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
3898 /*IN*/ NDIS_HANDLE NdisVcHandle,
3899 /*OUT*/ PNDIS_HANDLE MiniportVcContext);
3901 typedef NDIS_STATUS DDKAPI
3902 (*W_CO_DELETE_VC_HANDLER)(
3903 /*IN*/ NDIS_HANDLE MiniportVcContext);
3905 typedef NDIS_STATUS DDKAPI
3906 (*W_CO_ACTIVATE_VC_HANDLER)(
3907 /*IN*/ NDIS_HANDLE MiniportVcContext,
3908 /*IN OUT*/ PCO_CALL_PARAMETERS CallParameters);
3910 typedef NDIS_STATUS DDKAPI
3911 (*W_CO_DEACTIVATE_VC_HANDLER)(
3912 /*IN*/ NDIS_HANDLE MiniportVcContext);
3915 (*W_CO_SEND_PACKETS_HANDLER)(
3916 /*IN*/ NDIS_HANDLE MiniportVcContext,
3917 /*IN*/ PPNDIS_PACKET PacketArray,
3918 /*IN*/ UINT NumberOfPackets);
3920 typedef NDIS_STATUS DDKAPI
3921 (*W_CO_REQUEST_HANDLER)(
3922 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
3923 /*IN*/ NDIS_HANDLE MiniportVcContext /*OPTIONAL*/,
3924 /*IN OUT*/ PNDIS_REQUEST NdisRequest);
3928 #define NDIS50_MINIPORT_CHARACTERISTICS_S \
3929 NDIS40_MINIPORT_CHARACTERISTICS Ndis40Chars; \
3930 W_CO_CREATE_VC_HANDLER CoCreateVcHandler; \
3931 W_CO_DELETE_VC_HANDLER CoDeleteVcHandler; \
3932 W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler; \
3933 W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler; \
3934 W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler; \
3935 W_CO_REQUEST_HANDLER CoRequestHandler;
3937 #else /* !__cplusplus */
3939 #define NDIS50_MINIPORT_CHARACTERISTICS_S \
3940 NDIS40_MINIPORT_CHARACTERISTICS_S \
3941 W_CO_CREATE_VC_HANDLER CoCreateVcHandler; \
3942 W_CO_DELETE_VC_HANDLER CoDeleteVcHandler; \
3943 W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler; \
3944 W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler; \
3945 W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler; \
3946 W_CO_REQUEST_HANDLER CoRequestHandler;
3948 #endif /* !__cplusplus */
3950 typedef struct _NDIS50_MINIPORT_CHARACTERISTICS {
3951 NDIS50_MINIPORT_CHARACTERISTICS_S
3952 } NDIS50_MINIPORT_CHARACTERISTICS, *PSNDIS50_MINIPORT_CHARACTERISTICS;
3955 /* Extensions for NDIS 5.1 miniports */
3958 (*W_CANCEL_SEND_PACKETS_HANDLER)(
3959 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
3960 /*IN*/ PVOID CancelId);
3964 typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
3965 NDIS50_MINIPORT_CHARACTERISTICS_S
3966 } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
3967 #elif defined(NDIS50)
3968 typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
3969 NDIS50_MINIPORT_CHARACTERISTICS_S
3970 } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
3971 #elif defined(NDIS40)
3972 typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
3973 NDIS40_MINIPORT_CHARACTERISTICS_S
3974 } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
3975 #elif defined(NDIS30)
3976 typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
3977 NDIS30_MINIPORT_CHARACTERISTICS_S
3978 } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
3982 typedef NDIS_STATUS DDKAPI
3984 /*IN*/ NDIS_HANDLE MacBindingHandle,
3985 /*IN*/ PNDIS_PACKET Packet);
3987 typedef NDIS_STATUS DDKAPI
3988 (*TRANSFER_DATA_HANDLER)(
3989 /*IN*/ NDIS_HANDLE MacBindingHandle,
3990 /*IN*/ NDIS_HANDLE MacReceiveContext,
3991 /*IN*/ UINT ByteOffset,
3992 /*IN*/ UINT BytesToTransfer,
3993 /*OUT*/ PNDIS_PACKET Packet,
3994 /*OUT*/ PUINT BytesTransferred);
3996 typedef NDIS_STATUS DDKAPI
3998 /*IN*/ NDIS_HANDLE MacBindingHandle);
4000 typedef NDIS_STATUS DDKAPI
4002 /*IN*/ NDIS_HANDLE MacBindingHandle,
4003 /*IN*/ PNDIS_REQUEST NdisRequest);
4007 /* Structures available only to full MAC drivers */
4009 typedef BOOLEAN DDKAPI
4010 (*PNDIS_INTERRUPT_SERVICE)(
4011 /*IN*/ PVOID InterruptContext);
4014 (*PNDIS_DEFERRED_PROCESSING)(
4015 /*IN*/ PVOID SystemSpecific1,
4016 /*IN*/ PVOID InterruptContext,
4017 /*IN*/ PVOID SystemSpecific2,
4018 /*IN*/ PVOID SystemSpecific3);
4022 typedef struct _NDIS_MINIPORT_BLOCK NDIS_MINIPORT_BLOCK, *PNDIS_MINIPORT_BLOCK;
4023 typedef struct _NDIS_PROTOCOL_BLOCK NDIS_PROTOCOL_BLOCK, *PNDIS_PROTOCOL_BLOCK;
4024 typedef struct _NDIS_OPEN_BLOCK NDIS_OPEN_BLOCK, *PNDIS_OPEN_BLOCK;
4025 typedef struct _NDIS_M_DRIVER_BLOCK NDIS_M_DRIVER_BLOCK, *PNDIS_M_DRIVER_BLOCK;
4026 typedef struct _NDIS_AF_LIST NDIS_AF_LIST, *PNDIS_AF_LIST;
4029 typedef struct _NDIS_MINIPORT_INTERRUPT {
4030 PKINTERRUPT InterruptObject;
4031 KSPIN_LOCK DpcCountLock;
4032 PVOID MiniportIdField;
4033 W_ISR_HANDLER MiniportIsr;
4034 W_HANDLE_INTERRUPT_HANDLER MiniportDpc;
4036 PNDIS_MINIPORT_BLOCK Miniport;
4039 KEVENT DpcsCompletedEvent;
4040 BOOLEAN SharedInterrupt;
4041 BOOLEAN IsrRequested;
4042 } NDIS_MINIPORT_INTERRUPT, *PNDIS_MINIPORT_INTERRUPT;
4044 typedef struct _NDIS_MINIPORT_TIMER {
4047 PNDIS_TIMER_FUNCTION MiniportTimerFunction;
4048 PVOID MiniportTimerContext;
4049 PNDIS_MINIPORT_BLOCK Miniport;
4050 struct _NDIS_MINIPORT_TIMER *NextDeferredTimer;
4051 } NDIS_MINIPORT_TIMER, *PNDIS_MINIPORT_TIMER;
4053 typedef struct _NDIS_INTERRUPT {
4054 PKINTERRUPT InterruptObject;
4055 KSPIN_LOCK DpcCountLock;
4056 PNDIS_INTERRUPT_SERVICE MacIsr;
4057 PNDIS_DEFERRED_PROCESSING MacDpc;
4059 PVOID InterruptContext;
4062 KEVENT DpcsCompletedEvent;
4063 } NDIS_INTERRUPT, *PNDIS_INTERRUPT;
4066 typedef struct _MAP_REGISTER_ENTRY {
4068 BOOLEAN WriteToDevice;
4069 } MAP_REGISTER_ENTRY, *PMAP_REGISTER_ENTRY;
4072 typedef enum _NDIS_WORK_ITEM_TYPE {
4073 NdisWorkItemRequest,
4075 NdisWorkItemReturnPackets,
4076 NdisWorkItemResetRequested,
4077 NdisWorkItemResetInProgress,
4079 NdisWorkItemSendLoopback,
4080 NdisWorkItemMiniportCallback,
4082 } NDIS_WORK_ITEM_TYPE, *PNDIS_WORK_ITEM_TYPE;
4084 #define NUMBER_OF_WORK_ITEM_TYPES NdisMaxWorkItems
4085 #define NUMBER_OF_SINGLE_WORK_ITEMS 6
4087 typedef struct _NDIS_MINIPORT_WORK_ITEM {
4088 SINGLE_LIST_ENTRY Link;
4089 NDIS_WORK_ITEM_TYPE WorkItemType;
4090 PVOID WorkItemContext;
4091 } NDIS_MINIPORT_WORK_ITEM, *PNDIS_MINIPORT_WORK_ITEM;
4094 typedef struct _NDIS_BIND_PATHS {
4096 NDIS_STRING Paths[1];
4097 } NDIS_BIND_PATHS, *PNDIS_BIND_PATHS;
4099 #define DECLARE_UNKNOWN_STRUCT(BaseName) \
4100 typedef struct _##BaseName BaseName, *P##BaseName;
4102 #define DECLARE_UNKNOWN_PROTOTYPE(Name) \
4103 typedef VOID (*(Name))(VOID);
4105 #define ETH_LENGTH_OF_ADDRESS 6
4107 DECLARE_UNKNOWN_STRUCT(ETH_BINDING_INFO)
4109 DECLARE_UNKNOWN_PROTOTYPE(ETH_ADDRESS_CHANGE)
4110 DECLARE_UNKNOWN_PROTOTYPE(ETH_FILTER_CHANGE)
4111 DECLARE_UNKNOWN_PROTOTYPE(ETH_DEFERRED_CLOSE)
4113 typedef struct _ETH_FILTER {
4114 PNDIS_SPIN_LOCK Lock;
4115 CHAR (*MCastAddressBuf)[ETH_LENGTH_OF_ADDRESS];
4116 struct _NDIS_MINIPORT_BLOCK *Miniport;
4117 UINT CombinedPacketFilter;
4118 PETH_BINDING_INFO OpenList;
4119 ETH_ADDRESS_CHANGE AddressChangeAction;
4120 ETH_FILTER_CHANGE FilterChangeAction;
4121 ETH_DEFERRED_CLOSE CloseAction;
4122 UINT MaxMulticastAddresses;
4124 UCHAR AdapterAddress[ETH_LENGTH_OF_ADDRESS];
4125 UINT OldCombinedPacketFilter;
4126 CHAR (*OldMCastAddressBuf)[ETH_LENGTH_OF_ADDRESS];
4127 UINT OldNumAddresses;
4128 PETH_BINDING_INFO DirectedList;
4129 PETH_BINDING_INFO BMList;
4130 PETH_BINDING_INFO MCastSet;
4135 } ETH_FILTER, *PETH_FILTER;
4138 (*ETH_RCV_COMPLETE_HANDLER)(
4139 /*IN*/ PETH_FILTER Filter);
4142 (*ETH_RCV_INDICATE_HANDLER)(
4143 /*IN*/ PETH_FILTER Filter,
4144 /*IN*/ NDIS_HANDLE MacReceiveContext,
4145 /*IN*/ PCHAR Address,
4146 /*IN*/ PVOID HeaderBuffer,
4147 /*IN*/ UINT HeaderBufferSize,
4148 /*IN*/ PVOID LookaheadBuffer,
4149 /*IN*/ UINT LookaheadBufferSize,
4150 /*IN*/ UINT PacketSize);
4153 (*FDDI_RCV_COMPLETE_HANDLER)(
4154 /*IN*/ PFDDI_FILTER Filter);
4157 (*FDDI_RCV_INDICATE_HANDLER)(
4158 /*IN*/ PFDDI_FILTER Filter,
4159 /*IN*/ NDIS_HANDLE MacReceiveContext,
4160 /*IN*/ PCHAR Address,
4161 /*IN*/ UINT AddressLength,
4162 /*IN*/ PVOID HeaderBuffer,
4163 /*IN*/ UINT HeaderBufferSize,
4164 /*IN*/ PVOID LookaheadBuffer,
4165 /*IN*/ UINT LookaheadBufferSize,
4166 /*IN*/ UINT PacketSize);
4169 (*FILTER_PACKET_INDICATION_HANDLER)(
4170 /*IN*/ NDIS_HANDLE Miniport,
4171 /*IN*/ PPNDIS_PACKET PacketArray,
4172 /*IN*/ UINT NumberOfPackets);
4175 (*TR_RCV_COMPLETE_HANDLER)(
4176 /*IN*/ PTR_FILTER Filter);
4179 (*TR_RCV_INDICATE_HANDLER)(
4180 /*IN*/ PTR_FILTER Filter,
4181 /*IN*/ NDIS_HANDLE MacReceiveContext,
4182 /*IN*/ PVOID HeaderBuffer,
4183 /*IN*/ UINT HeaderBufferSize,
4184 /*IN*/ PVOID LookaheadBuffer,
4185 /*IN*/ UINT LookaheadBufferSize,
4186 /*IN*/ UINT PacketSize);
4189 (*WAN_RCV_COMPLETE_HANDLER)(
4190 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4191 /*IN*/ NDIS_HANDLE NdisLinkContext);
4195 /*OUT*/ PNDIS_STATUS Status,
4196 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4197 /*IN*/ NDIS_HANDLE NdisLinkContext,
4198 /*IN*/ PUCHAR Packet,
4199 /*IN*/ ULONG PacketSize);
4201 typedef VOID DDKFASTAPI
4202 (*NDIS_M_DEQUEUE_WORK_ITEM)(
4203 /*IN*/ PNDIS_MINIPORT_BLOCK Miniport,
4204 /*IN*/ NDIS_WORK_ITEM_TYPE WorkItemType,
4205 /*OUT*/ PVOID *WorkItemContext);
4207 typedef NDIS_STATUS DDKFASTAPI
4208 (*NDIS_M_QUEUE_NEW_WORK_ITEM)(
4209 /*IN*/ PNDIS_MINIPORT_BLOCK Miniport,
4210 /*IN*/ NDIS_WORK_ITEM_TYPE WorkItemType,
4211 /*IN*/ PVOID WorkItemContext);
4213 typedef NDIS_STATUS DDKFASTAPI
4214 (*NDIS_M_QUEUE_WORK_ITEM)(
4215 /*IN*/ PNDIS_MINIPORT_BLOCK Miniport,
4216 /*IN*/ NDIS_WORK_ITEM_TYPE WorkItemType,
4217 /*IN*/ PVOID WorkItemContext);
4220 (*NDIS_M_REQ_COMPLETE_HANDLER)(
4221 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4222 /*IN*/ NDIS_STATUS Status);
4225 (*NDIS_M_RESET_COMPLETE_HANDLER)(
4226 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4227 /*IN*/ NDIS_STATUS Status,
4228 /*IN*/ BOOLEAN AddressingReset);
4231 (*NDIS_M_SEND_COMPLETE_HANDLER)(
4232 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4233 /*IN*/ PNDIS_PACKET Packet,
4234 /*IN*/ NDIS_STATUS Status);
4237 (*NDIS_M_SEND_RESOURCES_HANDLER)(
4238 /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
4240 typedef BOOLEAN DDKFASTAPI
4241 (*NDIS_M_START_SENDS)(
4242 /*IN*/ PNDIS_MINIPORT_BLOCK Miniport);
4245 (*NDIS_M_STATUS_HANDLER)(
4246 /*IN*/ NDIS_HANDLE MiniportHandle,
4247 /*IN*/ NDIS_STATUS GeneralStatus,
4248 /*IN*/ PVOID StatusBuffer,
4249 /*IN*/ UINT StatusBufferSize);
4252 (*NDIS_M_STS_COMPLETE_HANDLER)(
4253 /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
4256 (*NDIS_M_TD_COMPLETE_HANDLER)(
4257 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4258 /*IN*/ PNDIS_PACKET Packet,
4259 /*IN*/ NDIS_STATUS Status,
4260 /*IN*/ UINT BytesTransferred);
4262 typedef VOID (DDKAPI *NDIS_WM_SEND_COMPLETE_HANDLER)(
4263 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4264 /*IN*/ PVOID Packet,
4265 /*IN*/ NDIS_STATUS Status);
4270 #define ARC_SEND_BUFFERS 8
4271 #define ARC_HEADER_SIZE 4
4273 typedef struct _NDIS_ARC_BUF {
4274 NDIS_HANDLE ArcnetBufferPool;
4275 PUCHAR ArcnetLookaheadBuffer;
4277 ARC_BUFFER_LIST ArcnetBuffers[ARC_SEND_BUFFERS];
4278 } NDIS_ARC_BUF, *PNDIS_ARC_BUF;
4282 #define NDIS_MINIPORT_WORK_QUEUE_SIZE 10
4284 typedef struct _NDIS_LOG {
4285 PNDIS_MINIPORT_BLOCK Miniport;
4293 } NDIS_LOG, *PNDIS_LOG;
4295 typedef struct _FILTERDBS {
4296 _ANONYMOUS_UNION union {
4298 PNULL_FILTER NullDB;
4301 PFDDI_FILTER FddiDB;
4306 #endif /* !ARCNET */
4307 } FILTERDBS, *PFILTERDBS;
4310 struct _NDIS_MINIPORT_BLOCK {
4312 PNDIS_MINIPORT_BLOCK NextMiniport;
4313 PNDIS_M_DRIVER_BLOCK DriverHandle;
4314 NDIS_HANDLE MiniportAdapterContext;
4315 UNICODE_STRING MiniportName;
4316 PNDIS_BIND_PATHS BindPaths;
4317 NDIS_HANDLE OpenQueue;
4319 NDIS_HANDLE DeviceContext;
4323 UCHAR AssignedProcessor;
4325 PNDIS_REQUEST MediaRequest;
4326 PNDIS_MINIPORT_INTERRUPT Interrupt;
4329 LIST_ENTRY PacketList;
4330 PNDIS_PACKET FirstPendingPacket;
4331 PNDIS_PACKET ReturnPacketsQueue;
4332 ULONG RequestBuffer;
4333 PVOID SetMCastBuffer;
4334 PNDIS_MINIPORT_BLOCK PrimaryMiniport;
4335 PVOID WrapperContext;
4336 PVOID BusDataContext;
4337 ULONG PnPCapabilities;
4338 PCM_RESOURCE_LIST Resources;
4339 NDIS_TIMER WakeUpDpcTimer;
4340 UNICODE_STRING BaseName;
4341 UNICODE_STRING SymbolicLinkName;
4342 ULONG CheckForHangSeconds;
4344 USHORT CFHangCurrentTick;
4345 NDIS_STATUS ResetStatus;
4346 NDIS_HANDLE ResetOpen;
4347 FILTERDBS FilterDbs;
4348 FILTER_PACKET_INDICATION_HANDLER PacketIndicateHandler;
4349 NDIS_M_SEND_COMPLETE_HANDLER SendCompleteHandler;
4350 NDIS_M_SEND_RESOURCES_HANDLER SendResourcesHandler;
4351 NDIS_M_RESET_COMPLETE_HANDLER ResetCompleteHandler;
4352 NDIS_MEDIUM MediaType;
4354 NDIS_INTERFACE_TYPE BusType;
4355 NDIS_INTERFACE_TYPE AdapterType;
4356 PDEVICE_OBJECT DeviceObject;
4357 PDEVICE_OBJECT PhysicalDeviceObject;
4358 PDEVICE_OBJECT NextDeviceObject;
4359 PMAP_REGISTER_ENTRY MapRegisters;
4360 PNDIS_AF_LIST CallMgrAfList;
4361 PVOID MiniportThread;
4363 USHORT SetInfoBufLen;
4364 USHORT MaxSendPackets;
4365 NDIS_STATUS FakeStatus;
4367 PUNICODE_STRING pAdapterInstanceName;
4368 PNDIS_MINIPORT_TIMER TimerQueue;
4370 PNDIS_REQUEST PendingRequest;
4371 UINT MaximumLongAddresses;
4372 UINT MaximumShortAddresses;
4373 UINT CurrentLookahead;
4374 UINT MaximumLookahead;
4375 W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler;
4376 W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler;
4377 W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler;
4378 W_SEND_PACKETS_HANDLER SendPacketsHandler;
4379 NDIS_M_START_SENDS DeferredSendHandler;
4380 ETH_RCV_INDICATE_HANDLER EthRxIndicateHandler;
4381 TR_RCV_INDICATE_HANDLER TrRxIndicateHandler;
4382 FDDI_RCV_INDICATE_HANDLER FddiRxIndicateHandler;
4383 ETH_RCV_COMPLETE_HANDLER EthRxCompleteHandler;
4384 TR_RCV_COMPLETE_HANDLER TrRxCompleteHandler;
4385 FDDI_RCV_COMPLETE_HANDLER FddiRxCompleteHandler;
4386 NDIS_M_STATUS_HANDLER StatusHandler;
4387 NDIS_M_STS_COMPLETE_HANDLER StatusCompleteHandler;
4388 NDIS_M_TD_COMPLETE_HANDLER TDCompleteHandler;
4389 NDIS_M_REQ_COMPLETE_HANDLER QueryCompleteHandler;
4390 NDIS_M_REQ_COMPLETE_HANDLER SetCompleteHandler;
4391 NDIS_WM_SEND_COMPLETE_HANDLER WanSendCompleteHandler;
4392 WAN_RCV_HANDLER WanRcvHandler;
4393 WAN_RCV_COMPLETE_HANDLER WanRcvCompleteHandler;
4395 PNDIS_MINIPORT_BLOCK NextGlobalMiniport;
4396 SINGLE_LIST_ENTRY WorkQueue[NUMBER_OF_WORK_ITEM_TYPES];
4397 SINGLE_LIST_ENTRY SingleWorkItems[NUMBER_OF_SINGLE_WORK_ITEMS];
4400 UCHAR ArcnetAddress;
4402 _ANONYMOUS_UNION union {
4404 PNDIS_ARC_BUF ArcBuf;
4410 PCM_RESOURCE_LIST AllocatedResources;
4411 PCM_RESOURCE_LIST AllocatedResourcesTranslated;
4412 SINGLE_LIST_ENTRY PatternList;
4413 NDIS_PNP_CAPABILITIES PMCapabilities;
4414 DEVICE_CAPABILITIES DeviceCaps;
4416 DEVICE_POWER_STATE CurrentDevicePowerState;
4418 SYSTEM_POWER_STATE WaitWakeSystemState;
4419 LARGE_INTEGER VcIndex;
4420 KSPIN_LOCK VcCountLock;
4421 LIST_ENTRY WmiEnabledVcs;
4422 PNDIS_GUID pNdisGuidMap;
4423 PNDIS_GUID pCustomGuidMap;
4425 USHORT cNdisGuidMap;
4426 USHORT cCustomGuidMap;
4427 USHORT CurrentMapRegister;
4428 PKEVENT AllocationEvent;
4429 USHORT BaseMapRegistersNeeded;
4430 USHORT SGMapRegistersNeeded;
4431 ULONG MaximumPhysicalMapping;
4432 NDIS_TIMER MediaDisconnectTimer;
4433 USHORT MediaDisconnectTimeOut;
4434 USHORT InstanceNumber;
4435 NDIS_EVENT OpenReadyEvent;
4436 NDIS_PNP_DEVICE_STATE PnPDeviceState;
4437 NDIS_PNP_DEVICE_STATE OldPnPDeviceState;
4438 PGET_SET_DEVICE_DATA SetBusData;
4439 PGET_SET_DEVICE_DATA GetBusData;
4443 NDIS_STATS NdisStats;
4447 PNDIS_PACKET IndicatedPacket[MAXIMUM_PROCESSORS];
4448 PKEVENT RemoveReadyEvent;
4449 PKEVENT AllOpensClosedEvent;
4450 PKEVENT AllRequestsCompletedEvent;
4452 NDIS_MINIPORT_WORK_ITEM WorkItemBuffer[NUMBER_OF_SINGLE_WORK_ITEMS];
4453 PDMA_ADAPTER SystemAdapterObject;
4454 ULONG DriverVerifyFlags;
4456 USHORT InternalResetCount;
4457 USHORT MiniportResetCount;
4458 USHORT MediaSenseConnectCount;
4459 USHORT MediaSenseDisconnectCount;
4460 PNDIS_PACKET *xPackets;
4461 ULONG UserModeOpenReferences;
4462 _ANONYMOUS_UNION union {
4463 PVOID SavedSendHandler;
4464 PVOID SavedWanSendHandler;
4466 PVOID SavedSendPacketsHandler;
4467 PVOID SavedCancelSendPacketsHandler;
4468 W_SEND_PACKETS_HANDLER WSendPacketsHandler;
4469 ULONG MiniportAttributes;
4470 PDMA_ADAPTER SavedSystemAdapterObject;
4472 USHORT CFHangXTicks;
4474 ULONG IndicatedPacketsCount;
4475 ULONG PhysicalMediumType;
4476 PNDIS_REQUEST LastRequest;
4477 LONG DmaAdapterRefCount;
4483 KSPIN_LOCK TimerQueueLock;
4484 PKEVENT ResetCompletedEvent;
4485 PKEVENT QueuedBindingCompletedEvent;
4486 PKEVENT DmaResourcesReleasedEvent;
4487 FILTER_PACKET_INDICATION_HANDLER SavedPacketIndicateHandler;
4488 ULONG RegisteredInterrupts;
4489 PNPAGED_LOOKASIDE_LIST SGListLookasideList;
4490 ULONG ScatterGatherListSize;
4495 /* Handler prototypes for NDIS_OPEN_BLOCK */
4497 typedef NDIS_STATUS (DDKAPI *WAN_SEND_HANDLER)(
4498 /*IN*/ NDIS_HANDLE MacBindingHandle,
4499 /*IN*/ NDIS_HANDLE LinkHandle,
4500 /*IN*/ PVOID Packet);
4502 /* NDIS 4.0 extension */
4504 typedef VOID (DDKAPI *SEND_PACKETS_HANDLER)(
4505 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
4506 /*IN*/ PPNDIS_PACKET PacketArray,
4507 /*IN*/ UINT NumberOfPackets);
4510 typedef struct _NDIS_COMMON_OPEN_BLOCK {
4512 NDIS_HANDLE BindingHandle;
4513 PNDIS_MINIPORT_BLOCK MiniportHandle;
4514 PNDIS_PROTOCOL_BLOCK ProtocolHandle;
4515 NDIS_HANDLE ProtocolBindingContext;
4516 PNDIS_OPEN_BLOCK MiniportNextOpen;
4517 PNDIS_OPEN_BLOCK ProtocolNextOpen;
4518 NDIS_HANDLE MiniportAdapterContext;
4523 PNDIS_STRING BindDeviceName;
4524 KSPIN_LOCK Reserved5;
4525 PNDIS_STRING RootDeviceName;
4526 _ANONYMOUS_UNION union {
4527 SEND_HANDLER SendHandler;
4528 WAN_SEND_HANDLER WanSendHandler;
4530 TRANSFER_DATA_HANDLER TransferDataHandler;
4531 SEND_COMPLETE_HANDLER SendCompleteHandler;
4532 TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler;
4533 RECEIVE_HANDLER ReceiveHandler;
4534 RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler;
4535 WAN_RECEIVE_HANDLER WanReceiveHandler;
4536 REQUEST_COMPLETE_HANDLER RequestCompleteHandler;
4537 RECEIVE_PACKET_HANDLER ReceivePacketHandler;
4538 SEND_PACKETS_HANDLER SendPacketsHandler;
4539 RESET_HANDLER ResetHandler;
4540 REQUEST_HANDLER RequestHandler;
4541 RESET_COMPLETE_HANDLER ResetCompleteHandler;
4542 STATUS_HANDLER StatusHandler;
4543 STATUS_COMPLETE_HANDLER StatusCompleteHandler;
4547 KSPIN_LOCK SpinLock;
4548 NDIS_HANDLE FilterHandle;
4549 ULONG ProtocolOptions;
4550 USHORT CurrentLookahead;
4551 USHORT ConnectDampTicks;
4552 USHORT DisconnectDampTicks;
4553 W_SEND_HANDLER WSendHandler;
4554 W_TRANSFER_DATA_HANDLER WTransferDataHandler;
4555 W_SEND_PACKETS_HANDLER WSendPacketsHandler;
4556 W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler;
4558 PKEVENT CloseCompleteEvent;
4561 PNDIS_OPEN_BLOCK NextGlobalOpen;
4563 } NDIS_COMMON_OPEN_BLOCK;
4565 struct _NDIS_OPEN_BLOCK
4567 NDIS_COMMON_OPEN_BLOCK NdisCommonOpenBlock;
4569 struct _NDIS_OPEN_CO
4571 struct _NDIS_CO_AF_BLOCK * NextAf;
4572 W_CO_CREATE_VC_HANDLER MiniportCoCreateVcHandler;
4573 W_CO_REQUEST_HANDLER MiniportCoRequestHandler;
4574 CO_CREATE_VC_HANDLER CoCreateVcHandler;
4575 CO_DELETE_VC_HANDLER CoDeleteVcHandler;
4576 PVOID CmActivateVcCompleteHandler;
4577 PVOID CmDeactivateVcCompleteHandler;
4578 PVOID CoRequestCompleteHandler;
4579 LIST_ENTRY ActiveVcHead;
4580 LIST_ENTRY InactiveVcHead;
4581 LONG PendingAfNotifications;
4582 PKEVENT AfNotifyCompleteEvent;
4589 /* Routines for NDIS miniport drivers */
4594 NdisMInitializeTimer(
4595 /*IN*/ /*OUT*/ PNDIS_MINIPORT_TIMER Timer,
4596 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4597 /*IN*/ PNDIS_TIMER_FUNCTION TimerFunction,
4598 /*IN*/ PVOID FunctionContext);
4603 NdisMSetPeriodicTimer(
4604 /*IN*/ PNDIS_MINIPORT_TIMER Timer,
4605 /*IN*/ UINT MillisecondsPeriod);
4611 /*IN*/ PNDIS_MINIPORT_TIMER Timer,
4612 /*OUT*/ PBOOLEAN TimerCancelled);
4617 NdisInitializeWrapper(
4618 /*OUT*/ PNDIS_HANDLE NdisWrapperHandle,
4619 /*IN*/ PVOID SystemSpecific1,
4620 /*IN*/ PVOID SystemSpecific2,
4621 /*IN*/ PVOID SystemSpecific3);
4626 NdisMAllocateMapRegisters(
4627 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4628 /*IN*/ UINT DmaChannel,
4629 /*IN*/ BOOLEAN Dma32BitAddresses,
4630 /*IN*/ ULONG PhysicalMapRegistersNeeded,
4631 /*IN*/ ULONG MaximumPhysicalMapping);
4635 * NdisMArcIndicateReceive(
4636 * IN NDIS_HANDLE MiniportAdapterHandle,
4637 * IN PUCHAR HeaderBuffer,
4638 * IN PUCHAR DataBuffer,
4641 #define NdisMArcIndicateReceive(MiniportAdapterHandle, \
4646 ArcFilterDprIndicateReceive( \
4647 (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.ArcDB), \
4655 * NdisMArcIndicateReceiveComplete(
4656 * IN NDIS_HANDLE MiniportAdapterHandle);
4658 #define NdisMArcIndicateReceiveComplete(MiniportAdapterHandle) \
4660 if (((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->EthDB) \
4662 NdisMEthIndicateReceiveComplete(_H); \
4665 ArcFilterDprIndicateReceiveComplete( \
4666 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->ArcDB); \
4673 /*IN*/ NDIS_HANDLE LogHandle);
4679 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4681 /*OUT*/ PNDIS_HANDLE LogHandle);
4686 NdisMDeregisterAdapterShutdownHandler(
4687 /*IN*/ NDIS_HANDLE MiniportHandle);
4692 NdisMDeregisterInterrupt(
4693 /*IN*/ PNDIS_MINIPORT_INTERRUPT Interrupt);
4698 NdisMDeregisterIoPortRange(
4699 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4700 /*IN*/ UINT InitialPort,
4701 /*IN*/ UINT NumberOfPorts,
4702 /*IN*/ PVOID PortOffset);
4706 * NdisMEthIndicateReceive(
4707 * IN NDIS_HANDLE MiniportAdapterHandle,
4708 * IN NDIS_HANDLE MiniportReceiveContext,
4709 * IN PVOID HeaderBuffer,
4710 * IN UINT HeaderBufferSize,
4711 * IN PVOID LookaheadBuffer,
4712 * IN UINT LookaheadBufferSize,
4713 * IN UINT PacketSize);
4715 #define NdisMEthIndicateReceive(MiniportAdapterHandle, \
4716 MiniportReceiveContext, \
4720 LookaheadBufferSize, \
4723 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxIndicateHandler)( \
4724 (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.EthDB), \
4725 (MiniportReceiveContext), \
4728 (HeaderBufferSize), \
4729 (LookaheadBuffer), \
4730 (LookaheadBufferSize), \
4736 * NdisMEthIndicateReceiveComplete(
4737 * IN NDIS_HANDLE MiniportAdapterHandle);
4739 #define NdisMEthIndicateReceiveComplete(MiniportAdapterHandle) \
4741 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxCompleteHandler)( \
4742 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FilterDbs.EthDB); \
4747 * NdisMFddiIndicateReceive(
4748 * IN NDIS_HANDLE MiniportAdapterHandle,
4749 * IN NDIS_HANDLE MiniportReceiveContext,
4750 * IN PVOID HeaderBuffer,
4751 * IN UINT HeaderBufferSize,
4752 * IN PVOID LookaheadBuffer,
4753 * IN UINT LookaheadBufferSize,
4754 * IN UINT PacketSize);
4756 #define NdisMFddiIndicateReceive(MiniportAdapterHandle, \
4757 MiniportReceiveContext, \
4761 LookaheadBufferSize, \
4764 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxIndicateHandler)( \
4765 (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.FddiDB), \
4766 (MiniportReceiveContext), \
4767 (PUCHAR)(HeaderBuffer) + 1, \
4768 (((*(PUCHAR*)(HeaderBuffer)) & 0x40) ? \
4769 FDDI_LENGTH_OF_LONG_ADDRESS : \
4770 FDDI_LENGTH_OF_SHORT_ADDRESS), \
4772 (HeaderBufferSize), \
4773 (LookaheadBuffer), \
4774 (LookaheadBufferSize), \
4782 * NdisMFddiIndicateReceiveComplete(
4783 * IN NDIS_HANDLE MiniportAdapterHandle);
4785 #define NdisMFddiIndicateReceiveComplete(MiniportAdapterHandle) \
4787 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxCompleteHandler)( \
4788 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FilterDbs.FddiDB); \
4795 /*IN*/ NDIS_HANDLE LogHandle);
4800 NdisMFreeMapRegisters(
4801 /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
4805 * NdisMIndicateStatus(
4806 * IN NDIS_HANDLE MiniportAdapterHandle,
4807 * IN NDIS_STATUS GeneralStatus,
4808 * IN PVOID StatusBuffer,
4809 * IN UINT StatusBufferSize);
4812 #define NdisMIndicateStatus(MiniportAdapterHandle, \
4813 GeneralStatus, StatusBuffer, StatusBufferSize) \
4814 (*((PNDIS_MINIPORT_BLOCK)(_M))->StatusHandler)( \
4815 MiniportAdapterHandle, GeneralStatus, StatusBuffer, StatusBufferSize)
4819 * NdisMIndicateStatusComplete(
4820 * IN NDIS_HANDLE MiniportAdapterHandle);
4822 #define NdisMIndicateStatusComplete(MiniportAdapterHandle) \
4823 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->StatusCompleteHandler)( \
4824 MiniportAdapterHandle)
4828 * NdisMInitializeWrapper(
4829 * OUT PNDIS_HANDLE NdisWrapperHandle,
4830 * IN PVOID SystemSpecific1,
4831 * IN PVOID SystemSpecific2,
4832 * IN PVOID SystemSpecific3);
4834 #define NdisMInitializeWrapper(NdisWrapperHandle, \
4838 NdisInitializeWrapper((NdisWrapperHandle), \
4839 (SystemSpecific1), \
4840 (SystemSpecific2), \
4847 /*OUT*/ PVOID *VirtualAddress,
4848 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4849 /*IN*/ NDIS_PHYSICAL_ADDRESS PhysicalAddress,
4850 /*IN*/ UINT Length);
4854 * NdisMQueryInformationComplete(
4855 * IN NDIS_HANDLE MiniportAdapterHandle,
4856 * IN NDIS_STATUS Status);
4858 #define NdisMQueryInformationComplete(MiniportAdapterHandle, Status) \
4859 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->QueryCompleteHandler)(MiniportAdapterHandle, Status)
4864 NdisMRegisterAdapterShutdownHandler(
4865 /*IN*/ NDIS_HANDLE MiniportHandle,
4866 /*IN*/ PVOID ShutdownContext,
4867 /*IN*/ ADAPTER_SHUTDOWN_HANDLER ShutdownHandler);
4872 NdisMRegisterInterrupt(
4873 /*OUT*/ PNDIS_MINIPORT_INTERRUPT Interrupt,
4874 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4875 /*IN*/ UINT InterruptVector,
4876 /*IN*/ UINT InterruptLevel,
4877 /*IN*/ BOOLEAN RequestIsr,
4878 /*IN*/ BOOLEAN SharedInterrupt,
4879 /*IN*/ NDIS_INTERRUPT_MODE InterruptMode);
4884 NdisMRegisterIoPortRange(
4885 /*OUT*/ PVOID *PortOffset,
4886 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4887 /*IN*/ UINT InitialPort,
4888 /*IN*/ UINT NumberOfPorts);
4893 NdisMRegisterMiniport(
4894 /*IN*/ NDIS_HANDLE NdisWrapperHandle,
4895 /*IN*/ PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,
4896 /*IN*/ UINT CharacteristicsLength);
4899 #if !defined(_NDIS_)
4903 * NdisMResetComplete(
4904 * IN NDIS_HANDLE MiniportAdapterHandle,
4905 * IN NDIS_STATUS Status,
4906 * IN BOOLEAN AddressingReset);
4908 #define NdisMResetComplete(MiniportAdapterHandle, \
4912 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->ResetCompleteHandler)( \
4913 MiniportAdapterHandle, Status, AddressingReset); \
4918 * NdisMSendComplete(
4919 * IN NDIS_HANDLE MiniportAdapterHandle,
4920 * IN PNDIS_PACKET Packet,
4921 * IN NDIS_STATUS Status);
4923 #define NdisMSendComplete(MiniportAdapterHandle, \
4927 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendCompleteHandler)( \
4928 MiniportAdapterHandle, Packet, Status); \
4933 * NdisMSendResourcesAvailable(
4934 * IN NDIS_HANDLE MiniportAdapterHandle);
4936 #define NdisMSendResourcesAvailable(MiniportAdapterHandle) \
4938 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendResourcesHandler)( \
4939 MiniportAdapterHandle); \
4944 * NdisMTransferDataComplete(
4945 * IN NDIS_HANDLE MiniportAdapterHandle,
4946 * IN PNDIS_PACKET Packet,
4947 * IN NDIS_STATUS Status,
4948 * IN UINT BytesTransferred);
4950 #define NdisMTransferDataComplete(MiniportAdapterHandle, \
4955 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TDCompleteHandler)( \
4956 MiniportAdapterHandle, Packet, Status, BytesTransferred) \
4959 #endif /* !_NDIS_ */
4964 * NdisMSetAttributes(
4965 * IN NDIS_HANDLE MiniportAdapterHandle,
4966 * IN NDIS_HANDLE MiniportAdapterContext,
4967 * IN BOOLEAN BusMaster,
4968 * IN NDIS_INTERFACE_TYPE AdapterType);
4970 #define NdisMSetAttributes(MiniportAdapterHandle, \
4971 MiniportAdapterContext, \
4974 NdisMSetAttributesEx(MiniportAdapterHandle, \
4975 MiniportAdapterContext, \
4977 (BusMaster) ? NDIS_ATTRIBUTE_BUS_MASTER : 0, \
4983 NdisMSetAttributesEx(
4984 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4985 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
4986 /*IN*/ UINT CheckForHangTimeInSeconds /*OPTIONAL*/,
4987 /*IN*/ ULONG AttributeFlags,
4988 /*IN*/ NDIS_INTERFACE_TYPE AdapterType);
4992 * NdisMSetInformationComplete(
4993 * IN NDIS_HANDLE MiniportAdapterHandle,
4994 * IN NDIS_STATUS Status);
4996 #define NdisMSetInformationComplete(MiniportAdapterHandle, \
4998 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SetCompleteHandler)( \
4999 MiniportAdapterHandle, Status)
5005 /*IN*/ ULONG MicrosecondsToSleep);
5010 NdisMSynchronizeWithInterrupt(
5011 /*IN*/ PNDIS_MINIPORT_INTERRUPT Interrupt,
5012 /*IN*/ PVOID SynchronizeFunction,
5013 /*IN*/ PVOID SynchronizeContext);
5017 * NdisMTrIndicateReceive(
5018 * IN NDIS_HANDLE MiniportAdapterHandle,
5019 * IN NDIS_HANDLE MiniportReceiveContext,
5020 * IN PVOID HeaderBuffer,
5021 * IN UINT HeaderBufferSize,
5022 * IN PVOID LookaheadBuffer,
5023 * IN UINT LookaheadBufferSize,
5024 * IN UINT PacketSize);
5026 #define NdisMTrIndicateReceive(MiniportAdapterHandle, \
5027 MiniportReceiveContext, \
5031 LookaheadBufferSize, \
5034 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxIndicateHandler)( \
5035 (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.TrDB), \
5036 (MiniportReceiveContext), \
5039 (HeaderBufferSize), \
5040 (LookaheadBuffer), \
5041 (LookaheadBufferSize), \
5047 * NdisMTrIndicateReceiveComplete(
5048 * IN NDIS_HANDLE MiniportAdapterHandle);
5050 #define NdisMTrIndicateReceiveComplete(MiniportAdapterHandle) \
5052 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxCompleteHandler)( \
5053 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FilterDbs.TrDB); \
5060 /*IN*/ NDIS_HANDLE LogHandle,
5061 /*IN*/ PVOID LogBuffer,
5062 /*IN*/ UINT LogBufferSize);
5067 NdisMQueryAdapterResources(
5068 /*OUT*/ PNDIS_STATUS Status,
5069 /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
5070 /*OUT*/ PNDIS_RESOURCE_LIST ResourceList,
5071 /*IN OUT*/ PUINT BufferSize);
5076 NdisTerminateWrapper(
5077 /*IN*/ NDIS_HANDLE NdisWrapperHandle,
5078 /*IN*/ PVOID SystemSpecific);
5084 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
5085 /*IN*/ PVOID VirtualAddress,
5086 /*IN*/ UINT Length);
5090 /* NDIS intermediate miniport structures */
5092 typedef VOID (DDKAPI *W_MINIPORT_CALLBACK)(
5093 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
5094 /*IN*/ PVOID CallbackContext);
5098 /* Routines for intermediate miniport drivers */
5103 NdisIMDeInitializeDeviceInstance(
5104 /*IN*/ NDIS_HANDLE NdisMiniportHandle);
5108 * NdisIMInitializeDeviceInstance(
5109 * IN NDIS_HANDLE DriverHandle,
5110 * IN PNDIS_STRING DeviceInstance);
5112 #define NdisIMInitializeDeviceInstance(DriverHandle, DeviceInstance) \
5113 NdisIMInitializeDeviceInstanceEx(DriverHandle, DeviceInstance, NULL)
5118 NdisIMRegisterLayeredMiniport(
5119 /*IN*/ NDIS_HANDLE NdisWrapperHandle,
5120 /*IN*/ PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,
5121 /*IN*/ UINT CharacteristicsLength,
5122 /*OUT*/ PNDIS_HANDLE DriverHandle);
5125 /* Functions obsoleted by NDIS 5.0 */
5131 /*IN*/ PNDIS_HANDLE NdisDmaHandle);
5136 NdisSetupDmaTransfer(
5137 /*OUT*/ PNDIS_STATUS Status,
5138 /*IN*/ PNDIS_HANDLE NdisDmaHandle,
5139 /*IN*/ PNDIS_BUFFER Buffer,
5140 /*IN*/ ULONG Offset,
5141 /*IN*/ ULONG Length,
5142 /*IN*/ BOOLEAN WriteToDevice);
5147 NdisUpcaseUnicodeString(
5148 /*OUT*/ PUNICODE_STRING DestinationString,
5149 /*IN*/ PUNICODE_STRING SourceString);
5152 /* Routines for NDIS protocol drivers */
5158 /*OUT*/ PNDIS_STATUS Status,
5159 /*IN*/ NDIS_HANDLE NdisBindingHandle,
5160 /*IN*/ PNDIS_REQUEST NdisRequest);
5166 /*OUT*/ PNDIS_STATUS Status,
5167 /*IN*/ NDIS_HANDLE NdisBindingHandle);
5173 /*OUT*/ PNDIS_STATUS Status,
5174 /*IN*/ NDIS_HANDLE NdisBindingHandle,
5175 /*IN*/ PNDIS_PACKET Packet);
5181 /*IN*/ NDIS_HANDLE NdisBindingHandle,
5182 /*IN*/ PPNDIS_PACKET PacketArray,
5183 /*IN*/ UINT NumberOfPackets);
5189 /*OUT*/ PNDIS_STATUS Status,
5190 /*IN*/ NDIS_HANDLE NdisBindingHandle,
5191 /*IN*/ NDIS_HANDLE MacReceiveContext,
5192 /*IN*/ UINT ByteOffset,
5193 /*IN*/ UINT BytesToTransfer,
5194 /*IN OUT*/ PNDIS_PACKET Packet,
5195 /*OUT*/ PUINT BytesTransferred);
5201 /*OUT*/ PNDIS_STATUS Status,
5202 /*IN*/ NDIS_HANDLE NdisBindingHandle);
5207 NdisCompleteBindAdapter(
5208 /*IN*/ NDIS_HANDLE BindAdapterContext,
5209 /*IN*/ NDIS_STATUS Status,
5210 /*IN*/ NDIS_STATUS OpenStatus);
5215 NdisCompleteUnbindAdapter(
5216 /*IN*/ NDIS_HANDLE UnbindAdapterContext,
5217 /*IN*/ NDIS_STATUS Status);
5222 NdisDeregisterProtocol(
5223 /*OUT*/ PNDIS_STATUS Status,
5224 /*IN*/ NDIS_HANDLE NdisProtocolHandle);
5230 /*OUT*/ PNDIS_STATUS Status,
5231 /*OUT*/ PNDIS_STATUS OpenErrorStatus,
5232 /*OUT*/ PNDIS_HANDLE NdisBindingHandle,
5233 /*OUT*/ PUINT SelectedMediumIndex,
5234 /*IN*/ PNDIS_MEDIUM MediumArray,
5235 /*IN*/ UINT MediumArraySize,
5236 /*IN*/ NDIS_HANDLE NdisProtocolHandle,
5237 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
5238 /*IN*/ PNDIS_STRING AdapterName,
5239 /*IN*/ UINT OpenOptions,
5240 /*IN*/ PSTRING AddressingInformation);
5245 NdisOpenProtocolConfiguration(
5246 /*OUT*/ PNDIS_STATUS Status,
5247 /*OUT*/ PNDIS_HANDLE ConfigurationHandle,
5248 /*IN*/ PNDIS_STRING ProtocolSection);
5253 NdisRegisterProtocol(
5254 /*OUT*/ PNDIS_STATUS Status,
5255 /*OUT*/ PNDIS_HANDLE NdisProtocolHandle,
5256 /*IN*/ PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics,
5257 /*IN*/ UINT CharacteristicsLength);
5259 /* Obsoleted in Windows XP */
5261 /* Prototypes for NDIS_MAC_CHARACTERISTICS */
5263 typedef NDIS_STATUS (*OPEN_ADAPTER_HANDLER)(
5264 /*OUT*/ PNDIS_STATUS OpenErrorStatus,
5265 /*OUT*/ NDIS_HANDLE *MacBindingHandle,
5266 /*OUT*/ PUINT SelectedMediumIndex,
5267 /*IN*/ PNDIS_MEDIUM MediumArray,
5268 /*IN*/ UINT MediumArraySize,
5269 /*IN*/ NDIS_HANDLE NdisBindingContext,
5270 /*IN*/ NDIS_HANDLE MacAdapterContext,
5271 /*IN*/ UINT OpenOptions,
5272 /*IN*/ PSTRING AddressingInformation /*OPTIONAL*/);
5274 typedef NDIS_STATUS (DDKAPI *CLOSE_ADAPTER_HANDLER)(
5275 /*IN*/ NDIS_HANDLE MacBindingHandle);
5277 typedef NDIS_STATUS (DDKAPI *WAN_TRANSFER_DATA_HANDLER)(
5280 typedef NDIS_STATUS (DDKAPI *QUERY_GLOBAL_STATISTICS_HANDLER)(
5281 /*IN*/ NDIS_HANDLE MacAdapterContext,
5282 /*IN*/ PNDIS_REQUEST NdisRequest);
5284 typedef VOID (DDKAPI *UNLOAD_MAC_HANDLER)(
5285 /*IN*/ NDIS_HANDLE MacMacContext);
5287 typedef NDIS_STATUS (DDKAPI *ADD_ADAPTER_HANDLER)(
5288 /*IN*/ NDIS_HANDLE MacMacContext,
5289 /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
5290 /*IN*/ PNDIS_STRING AdapterName);
5292 typedef VOID (*REMOVE_ADAPTER_HANDLER)(
5293 /*IN*/ NDIS_HANDLE MacAdapterContext);
5295 typedef struct _NDIS_MAC_CHARACTERISTICS {
5296 UCHAR MajorNdisVersion;
5297 UCHAR MinorNdisVersion;
5299 OPEN_ADAPTER_HANDLER OpenAdapterHandler;
5300 CLOSE_ADAPTER_HANDLER CloseAdapterHandler;
5301 SEND_HANDLER SendHandler;
5302 TRANSFER_DATA_HANDLER TransferDataHandler;
5303 RESET_HANDLER ResetHandler;
5304 REQUEST_HANDLER RequestHandler;
5305 QUERY_GLOBAL_STATISTICS_HANDLER QueryGlobalStatisticsHandler;
5306 UNLOAD_MAC_HANDLER UnloadMacHandler;
5307 ADD_ADAPTER_HANDLER AddAdapterHandler;
5308 REMOVE_ADAPTER_HANDLER RemoveAdapterHandler;
5310 } NDIS_MAC_CHARACTERISTICS, *PNDIS_MAC_CHARACTERISTICS;
5312 typedef NDIS_MAC_CHARACTERISTICS NDIS_WAN_MAC_CHARACTERISTICS;
5313 typedef NDIS_WAN_MAC_CHARACTERISTICS *PNDIS_WAN_MAC_CHARACTERISTICS;
5319 #endif /* __NDIS_H */