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.
24 /* Created by Casper S. Hornstrup <chorns@users.sourceforge.net> */
27 #pragma GCC system_header
31 * Network Device Interface Specification definitions
32 * DEFINES: i386 - Target platform is i386
33 * _NDIS_ - Define only for NDIS library
34 * NDIS_MINIPORT_DRIVER - Define only for NDIS miniport drivers
35 * NDIS40 - Use NDIS 4.0 structures by default
36 * NDIS50 - Use NDIS 5.0 structures by default
37 * NDIS50_MINIPORT - Building NDIS 5.0 miniport driver
38 * NDIS51_MINIPORT - Building NDIS 5.1 miniport driver
52 #define NDISAPI DECLSPEC_EXPORT
54 #define NDISAPI DECLSPEC_IMPORT
57 #if defined(NDIS50_MINIPORT)
60 #define NDIS_MINIPORT_MAJOR_VERSION 5
61 #define NDIS_MINIPORT_MINOR_VERSION 0
63 #endif /* NDIS50_MINIPORT */
65 #if defined(NDIS51_MINIPORT)
68 #define NDIS_MINIPORT_MAJOR_VERSION 5
69 #define NDIS_MINIPORT_MINOR_VERSION 1
71 #endif /* NDIS51_MINIPORT */
73 /* NDIS 3.0 is default */
74 #if !defined(NDIS30) || !defined(NDIS40) || !defined(NDIS50) || !defined(NDIS51)
76 #endif /* !NDIS30 || !NDIS40 || !NDIS50 || !NDIS51 */
80 typedef PVOID QUEUED_CLOSE;
83 typedef ULONG NDIS_OID, *PNDIS_OID;
85 typedef struct _X_FILTER FDDI_FILTER, *PFDDI_FILTER;
86 typedef struct _X_FILTER TR_FILTER, *PTR_FILTER;
87 typedef struct _X_FILTER NULL_FILTER, *PNULL_FILTER;
89 typedef struct _REFERENCE {
91 USHORT ReferenceCount;
93 } REFERENCE, * PREFERENCE;
98 typedef struct _NDIS_SPIN_LOCK {
101 } NDIS_SPIN_LOCK, * PNDIS_SPIN_LOCK;
103 typedef struct _NDIS_EVENT {
105 } NDIS_EVENT, *PNDIS_EVENT;
107 typedef PVOID NDIS_HANDLE, *PNDIS_HANDLE;
108 typedef int NDIS_STATUS, *PNDIS_STATUS;
110 typedef ANSI_STRING NDIS_ANSI_STRING, *PNDIS_ANSI_STRING;
111 typedef UNICODE_STRING NDIS_STRING, *PNDIS_STRING;
113 typedef MDL NDIS_BUFFER, *PNDIS_BUFFER;
114 typedef ULONG NDIS_ERROR_CODE, *PNDIS_ERROR_CODE;
117 /* NDIS_STATUS constants */
118 #define NDIS_STATUS_SUCCESS ((NDIS_STATUS)STATUS_SUCCESS)
119 #define NDIS_STATUS_PENDING ((NDIS_STATUS)STATUS_PENDING)
120 #define NDIS_STATUS_NOT_RECOGNIZED ((NDIS_STATUS)0x00010001L)
121 #define NDIS_STATUS_NOT_COPIED ((NDIS_STATUS)0x00010002L)
122 #define NDIS_STATUS_NOT_ACCEPTED ((NDIS_STATUS)0x00010003L)
123 #define NDIS_STATUS_CALL_ACTIVE ((NDIS_STATUS)0x00010007L)
124 #define NDIS_STATUS_ONLINE ((NDIS_STATUS)0x40010003L)
125 #define NDIS_STATUS_RESET_START ((NDIS_STATUS)0x40010004L)
126 #define NDIS_STATUS_RESET_END ((NDIS_STATUS)0x40010005L)
127 #define NDIS_STATUS_RING_STATUS ((NDIS_STATUS)0x40010006L)
128 #define NDIS_STATUS_CLOSED ((NDIS_STATUS)0x40010007L)
129 #define NDIS_STATUS_WAN_LINE_UP ((NDIS_STATUS)0x40010008L)
130 #define NDIS_STATUS_WAN_LINE_DOWN ((NDIS_STATUS)0x40010009L)
131 #define NDIS_STATUS_WAN_FRAGMENT ((NDIS_STATUS)0x4001000AL)
132 #define NDIS_STATUS_MEDIA_CONNECT ((NDIS_STATUS)0x4001000BL)
133 #define NDIS_STATUS_MEDIA_DISCONNECT ((NDIS_STATUS)0x4001000CL)
134 #define NDIS_STATUS_HARDWARE_LINE_UP ((NDIS_STATUS)0x4001000DL)
135 #define NDIS_STATUS_HARDWARE_LINE_DOWN ((NDIS_STATUS)0x4001000EL)
136 #define NDIS_STATUS_INTERFACE_UP ((NDIS_STATUS)0x4001000FL)
137 #define NDIS_STATUS_INTERFACE_DOWN ((NDIS_STATUS)0x40010010L)
138 #define NDIS_STATUS_MEDIA_BUSY ((NDIS_STATUS)0x40010011L)
139 #define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION ((NDIS_STATUS)0x40010012L)
140 #define NDIS_STATUS_WW_INDICATION NDIS_STATUS_MEDIA_SPECIFIC_INDICATION
141 #define NDIS_STATUS_LINK_SPEED_CHANGE ((NDIS_STATUS)0x40010013L)
142 #define NDIS_STATUS_WAN_GET_STATS ((NDIS_STATUS)0x40010014L)
143 #define NDIS_STATUS_WAN_CO_FRAGMENT ((NDIS_STATUS)0x40010015L)
144 #define NDIS_STATUS_WAN_CO_LINKPARAMS ((NDIS_STATUS)0x40010016L)
146 #define NDIS_STATUS_NOT_RESETTABLE ((NDIS_STATUS)0x80010001L)
147 #define NDIS_STATUS_SOFT_ERRORS ((NDIS_STATUS)0x80010003L)
148 #define NDIS_STATUS_HARD_ERRORS ((NDIS_STATUS)0x80010004L)
149 #define NDIS_STATUS_BUFFER_OVERFLOW ((NDIS_STATUS)STATUS_BUFFER_OVERFLOW)
151 #define NDIS_STATUS_FAILURE ((NDIS_STATUS)STATUS_UNSUCCESSFUL)
152 #define NDIS_STATUS_RESOURCES ((NDIS_STATUS)STATUS_INSUFFICIENT_RESOURCES)
153 #define NDIS_STATUS_CLOSING ((NDIS_STATUS)0xC0010002L)
154 #define NDIS_STATUS_BAD_VERSION ((NDIS_STATUS)0xC0010004L)
155 #define NDIS_STATUS_BAD_CHARACTERISTICS ((NDIS_STATUS)0xC0010005L)
156 #define NDIS_STATUS_ADAPTER_NOT_FOUND ((NDIS_STATUS)0xC0010006L)
157 #define NDIS_STATUS_OPEN_FAILED ((NDIS_STATUS)0xC0010007L)
158 #define NDIS_STATUS_DEVICE_FAILED ((NDIS_STATUS)0xC0010008L)
159 #define NDIS_STATUS_MULTICAST_FULL ((NDIS_STATUS)0xC0010009L)
160 #define NDIS_STATUS_MULTICAST_EXISTS ((NDIS_STATUS)0xC001000AL)
161 #define NDIS_STATUS_MULTICAST_NOT_FOUND ((NDIS_STATUS)0xC001000BL)
162 #define NDIS_STATUS_REQUEST_ABORTED ((NDIS_STATUS)0xC001000CL)
163 #define NDIS_STATUS_RESET_IN_PROGRESS ((NDIS_STATUS)0xC001000DL)
164 #define NDIS_STATUS_CLOSING_INDICATING ((NDIS_STATUS)0xC001000EL)
165 #define NDIS_STATUS_NOT_SUPPORTED ((NDIS_STATUS)STATUS_NOT_SUPPORTED)
166 #define NDIS_STATUS_INVALID_PACKET ((NDIS_STATUS)0xC001000FL)
167 #define NDIS_STATUS_OPEN_LIST_FULL ((NDIS_STATUS)0xC0010010L)
168 #define NDIS_STATUS_ADAPTER_NOT_READY ((NDIS_STATUS)0xC0010011L)
169 #define NDIS_STATUS_ADAPTER_NOT_OPEN ((NDIS_STATUS)0xC0010012L)
170 #define NDIS_STATUS_NOT_INDICATING ((NDIS_STATUS)0xC0010013L)
171 #define NDIS_STATUS_INVALID_LENGTH ((NDIS_STATUS)0xC0010014L)
172 #define NDIS_STATUS_INVALID_DATA ((NDIS_STATUS)0xC0010015L)
173 #define NDIS_STATUS_BUFFER_TOO_SHORT ((NDIS_STATUS)0xC0010016L)
174 #define NDIS_STATUS_INVALID_OID ((NDIS_STATUS)0xC0010017L)
175 #define NDIS_STATUS_ADAPTER_REMOVED ((NDIS_STATUS)0xC0010018L)
176 #define NDIS_STATUS_UNSUPPORTED_MEDIA ((NDIS_STATUS)0xC0010019L)
177 #define NDIS_STATUS_GROUP_ADDRESS_IN_USE ((NDIS_STATUS)0xC001001AL)
178 #define NDIS_STATUS_FILE_NOT_FOUND ((NDIS_STATUS)0xC001001BL)
179 #define NDIS_STATUS_ERROR_READING_FILE ((NDIS_STATUS)0xC001001CL)
180 #define NDIS_STATUS_ALREADY_MAPPED ((NDIS_STATUS)0xC001001DL)
181 #define NDIS_STATUS_RESOURCE_CONFLICT ((NDIS_STATUS)0xC001001EL)
182 #define NDIS_STATUS_NO_CABLE ((NDIS_STATUS)0xC001001FL)
184 #define NDIS_STATUS_INVALID_SAP ((NDIS_STATUS)0xC0010020L)
185 #define NDIS_STATUS_SAP_IN_USE ((NDIS_STATUS)0xC0010021L)
186 #define NDIS_STATUS_INVALID_ADDRESS ((NDIS_STATUS)0xC0010022L)
187 #define NDIS_STATUS_VC_NOT_ACTIVATED ((NDIS_STATUS)0xC0010023L)
188 #define NDIS_STATUS_DEST_OUT_OF_ORDER ((NDIS_STATUS)0xC0010024L)
189 #define NDIS_STATUS_VC_NOT_AVAILABLE ((NDIS_STATUS)0xC0010025L)
190 #define NDIS_STATUS_CELLRATE_NOT_AVAILABLE ((NDIS_STATUS)0xC0010026L)
191 #define NDIS_STATUS_INCOMPATABLE_QOS ((NDIS_STATUS)0xC0010027L)
192 #define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED ((NDIS_STATUS)0xC0010028L)
193 #define NDIS_STATUS_NO_ROUTE_TO_DESTINATION ((NDIS_STATUS)0xC0010029L)
195 #define NDIS_STATUS_TOKEN_RING_OPEN_ERROR ((NDIS_STATUS)0xC0011000L)
196 #define NDIS_STATUS_INVALID_DEVICE_REQUEST ((NDIS_STATUS)STATUS_INVALID_DEVICE_REQUEST)
197 #define NDIS_STATUS_NETWORK_UNREACHABLE ((NDIS_STATUS)STATUS_NETWORK_UNREACHABLE)
200 /* NDIS error codes for error logging */
202 #define NDIS_ERROR_CODE_RESOURCE_CONFLICT EVENT_NDIS_RESOURCE_CONFLICT
203 #define NDIS_ERROR_CODE_OUT_OF_RESOURCES EVENT_NDIS_OUT_OF_RESOURCE
204 #define NDIS_ERROR_CODE_HARDWARE_FAILURE EVENT_NDIS_HARDWARE_FAILURE
205 #define NDIS_ERROR_CODE_ADAPTER_NOT_FOUND EVENT_NDIS_ADAPTER_NOT_FOUND
206 #define NDIS_ERROR_CODE_INTERRUPT_CONNECT EVENT_NDIS_INTERRUPT_CONNECT
207 #define NDIS_ERROR_CODE_DRIVER_FAILURE EVENT_NDIS_DRIVER_FAILURE
208 #define NDIS_ERROR_CODE_BAD_VERSION EVENT_NDIS_BAD_VERSION
209 #define NDIS_ERROR_CODE_TIMEOUT EVENT_NDIS_TIMEOUT
210 #define NDIS_ERROR_CODE_NETWORK_ADDRESS EVENT_NDIS_NETWORK_ADDRESS
211 #define NDIS_ERROR_CODE_UNSUPPORTED_CONFIGURATION EVENT_NDIS_UNSUPPORTED_CONFIGURATION
212 #define NDIS_ERROR_CODE_INVALID_VALUE_FROM_ADAPTER EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER
213 #define NDIS_ERROR_CODE_MISSING_CONFIGURATION_PARAMETER EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER
214 #define NDIS_ERROR_CODE_BAD_IO_BASE_ADDRESS EVENT_NDIS_BAD_IO_BASE_ADDRESS
215 #define NDIS_ERROR_CODE_RECEIVE_SPACE_SMALL EVENT_NDIS_RECEIVE_SPACE_SMALL
216 #define NDIS_ERROR_CODE_ADAPTER_DISABLED EVENT_NDIS_ADAPTER_DISABLED
219 /* Memory allocation flags. Used by Ndis[Allocate|Free]Memory */
220 #define NDIS_MEMORY_CONTIGUOUS 0x00000001
221 #define NDIS_MEMORY_NONCACHED 0x00000002
223 /* NIC attribute flags. Used by NdisMSetAttributes(Ex) */
224 #define NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT 0x00000001
225 #define NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT 0x00000002
226 #define NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS 0x00000004
227 #define NDIS_ATTRIBUTE_BUS_MASTER 0x00000008
228 #define NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER 0x00000010
229 #define NDIS_ATTRIBUTE_DESERIALIZE 0x00000020
230 #define NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND 0x00000040
231 #define NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK 0x00000080
232 #define NDIS_ATTRIBUTE_NOT_CO_NDIS 0x00000100
233 #define NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS 0x00000200
238 typedef union _NDIS_RW_LOCK_REFCOUNT {
241 } NDIS_RW_LOCK_REFCOUNT;
243 typedef struct _NDIS_RW_LOCK {
252 NDIS_RW_LOCK_REFCOUNT RefCount[MAXIMUM_PROCESSORS];
253 } NDIS_RW_LOCK, *PNDIS_RW_LOCK;
255 typedef struct _LOCK_STATE {
258 } LOCK_STATE, *PLOCK_STATE;
265 (*PNDIS_TIMER_FUNCTION)(
266 /*IN*/ PVOID SystemSpecific1,
267 /*IN*/ PVOID FunctionContext,
268 /*IN*/ PVOID SystemSpecific2,
269 /*IN*/ PVOID SystemSpecific3);
271 typedef struct _NDIS_TIMER {
274 } NDIS_TIMER, *PNDIS_TIMER;
280 typedef CM_MCA_POS_DATA NDIS_MCA_POS_DATA, *PNDIS_MCA_POS_DATA;
281 typedef CM_EISA_SLOT_INFORMATION NDIS_EISA_SLOT_INFORMATION, *PNDIS_EISA_SLOT_INFORMATION;
282 typedef CM_EISA_FUNCTION_INFORMATION NDIS_EISA_FUNCTION_INFORMATION, *PNDIS_EISA_FUNCTION_INFORMATION;
283 typedef CM_PARTIAL_RESOURCE_LIST NDIS_RESOURCE_LIST, *PNDIS_RESOURCE_LIST;
285 /* Hardware status codes (OID_GEN_HARDWARE_STATUS) */
286 typedef enum _NDIS_HARDWARE_STATUS {
287 NdisHardwareStatusReady,
288 NdisHardwareStatusInitializing,
289 NdisHardwareStatusReset,
290 NdisHardwareStatusClosing,
291 NdisHardwareStatusNotReady
292 } NDIS_HARDWARE_STATUS, *PNDIS_HARDWARE_STATUS;
294 /* OID_GEN_GET_TIME_CAPS */
295 typedef struct _GEN_GET_TIME_CAPS {
297 ULONG ClockPrecision;
298 } GEN_GET_TIME_CAPS, *PGEN_GET_TIME_CAPS;
301 #define READABLE_LOCAL_CLOCK 0x00000001
302 #define CLOCK_NETWORK_DERIVED 0x00000002
303 #define CLOCK_PRECISION 0x00000004
304 #define RECEIVE_TIME_INDICATION_CAPABLE 0x00000008
305 #define TIMED_SEND_CAPABLE 0x00000010
306 #define TIME_STAMP_CAPABLE 0x00000020
308 /* OID_GEN_GET_NETCARD_TIME */
309 typedef struct _GEN_GET_NETCARD_TIME {
311 } GEN_GET_NETCARD_TIME, *PGEN_GET_NETCARD_TIME;
313 /* NDIS driver medium (OID_GEN_MEDIA_SUPPORTED / OID_GEN_MEDIA_IN_USE) */
314 typedef enum _NDIS_MEDIUM {
322 NdisMediumArcnet878_2,
324 NdisMediumWirelessWan,
330 } NDIS_MEDIUM, *PNDIS_MEDIUM;
332 /* NDIS packet filter bits (OID_GEN_CURRENT_PACKET_FILTER) */
333 #define NDIS_PACKET_TYPE_DIRECTED 0x00000001
334 #define NDIS_PACKET_TYPE_MULTICAST 0x00000002
335 #define NDIS_PACKET_TYPE_ALL_MULTICAST 0x00000004
336 #define NDIS_PACKET_TYPE_BROADCAST 0x00000008
337 #define NDIS_PACKET_TYPE_SOURCE_ROUTING 0x00000010
338 #define NDIS_PACKET_TYPE_PROMISCUOUS 0x00000020
339 #define NDIS_PACKET_TYPE_SMT 0x00000040
340 #define NDIS_PACKET_TYPE_ALL_LOCAL 0x00000080
341 #define NDIS_PACKET_TYPE_GROUP 0x00001000
342 #define NDIS_PACKET_TYPE_ALL_FUNCTIONAL 0x00002000
343 #define NDIS_PACKET_TYPE_FUNCTIONAL 0x00004000
344 #define NDIS_PACKET_TYPE_MAC_FRAME 0x00008000
346 /* NDIS protocol option bits (OID_GEN_PROTOCOL_OPTIONS) */
347 #define NDIS_PROT_OPTION_ESTIMATED_LENGTH 0x00000001
348 #define NDIS_PROT_OPTION_NO_LOOPBACK 0x00000002
349 #define NDIS_PROT_OPTION_NO_RSVD_ON_RCVPKT 0x00000004
351 /* NDIS MAC option bits (OID_GEN_MAC_OPTIONS) */
352 #define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA 0x00000001
353 #define NDIS_MAC_OPTION_RECEIVE_SERIALIZED 0x00000002
354 #define NDIS_MAC_OPTION_TRANSFERS_NOT_PEND 0x00000004
355 #define NDIS_MAC_OPTION_NO_LOOPBACK 0x00000008
356 #define NDIS_MAC_OPTION_FULL_DUPLEX 0x00000010
357 #define NDIS_MAC_OPTION_EOTX_INDICATION 0x00000020
358 #define NDIS_MAC_OPTION_8021P_PRIORITY 0x00000040
359 #define NDIS_MAC_OPTION_RESERVED 0x80000000
361 /* State of the LAN media (OID_GEN_MEDIA_CONNECT_STATUS) */
362 typedef enum _NDIS_MEDIA_STATE {
363 NdisMediaStateConnected,
364 NdisMediaStateDisconnected
365 } NDIS_MEDIA_STATE, *PNDIS_MEDIA_STATE;
367 /* OID_GEN_SUPPORTED_GUIDS */
368 typedef struct _NDIS_GUID {
376 } NDIS_GUID, *PNDIS_GUID;
378 #define NDIS_GUID_TO_OID 0x00000001
379 #define NDIS_GUID_TO_STATUS 0x00000002
380 #define NDIS_GUID_ANSI_STRING 0x00000004
381 #define NDIS_GUID_UNICODE_STRING 0x00000008
382 #define NDIS_GUID_ARRAY 0x00000010
385 typedef struct _NDIS_PACKET_POOL {
386 NDIS_SPIN_LOCK SpinLock;
387 struct _NDIS_PACKET *FreeList;
390 } NDIS_PACKET_POOL, * PNDIS_PACKET_POOL;
392 /* NDIS_PACKET_PRIVATE.Flags constants */
393 #define fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO 0x40
394 #define fPACKET_ALLOCATED_BY_NDIS 0x80
396 typedef struct _NDIS_PACKET_PRIVATE {
401 PNDIS_PACKET_POOL Pool;
405 UCHAR NdisPacketFlags;
406 USHORT NdisPacketOobOffset;
407 } NDIS_PACKET_PRIVATE, * PNDIS_PACKET_PRIVATE;
409 typedef struct _NDIS_PACKET {
410 NDIS_PACKET_PRIVATE Private;
411 _ANONYMOUS_UNION union {
412 _ANONYMOUS_STRUCT struct {
413 UCHAR MiniportReserved[2 * sizeof(PVOID)];
414 UCHAR WrapperReserved[2 * sizeof(PVOID)];
416 _ANONYMOUS_STRUCT struct {
417 UCHAR MiniportReservedEx[3 * sizeof(PVOID)];
418 UCHAR WrapperReservedEx[sizeof(PVOID)];
420 _ANONYMOUS_STRUCT struct {
421 UCHAR MacReserved[4 * sizeof(PVOID)];
424 ULONG_PTR Reserved[2];
425 UCHAR ProtocolReserved[1];
426 } NDIS_PACKET, *PNDIS_PACKET, **PPNDIS_PACKET;
428 typedef enum _NDIS_CLASS_ID {
429 NdisClass802_3Priority,
430 NdisClassWirelessWanMbxMailbox,
431 NdisClassIrdaPacketInfo,
435 typedef struct MediaSpecificInformation {
436 UINT NextEntryOffset;
437 NDIS_CLASS_ID ClassId;
439 UCHAR ClassInformation[1];
440 } MEDIA_SPECIFIC_INFORMATION;
442 typedef struct _NDIS_PACKET_OOB_DATA {
443 _ANONYMOUS_UNION union {
444 ULONGLONG TimeToSend;
447 ULONGLONG TimeReceived;
449 UINT SizeMediaSpecificInfo;
450 PVOID MediaSpecificInformation;
452 } NDIS_PACKET_OOB_DATA, *PNDIS_PACKET_OOB_DATA;
454 typedef struct _NDIS_PM_PACKET_PATTERN {
461 } NDIS_PM_PACKET_PATTERN, *PNDIS_PM_PACKET_PATTERN;
464 /* Request types used by NdisRequest */
465 typedef enum _NDIS_REQUEST_TYPE {
466 NdisRequestQueryInformation,
467 NdisRequestSetInformation,
468 NdisRequestQueryStatistics,
472 NdisRequestTransferData,
478 } NDIS_REQUEST_TYPE, *PNDIS_REQUEST_TYPE;
480 typedef struct _NDIS_REQUEST {
481 UCHAR MacReserved[4 * sizeof(PVOID)];
482 NDIS_REQUEST_TYPE RequestType;
484 struct QUERY_INFORMATION {
486 PVOID InformationBuffer;
487 UINT InformationBufferLength;
491 struct SET_INFORMATION {
493 PVOID InformationBuffer;
494 UINT InformationBufferLength;
499 #if (defined(NDIS50) || defined(NDIS51))
500 UCHAR NdisReserved[9 * sizeof(PVOID)];
502 UCHAR CallMgrReserved[2 * sizeof(PVOID)];
503 UCHAR ProtocolReserved[2 * sizeof(PVOID)];
505 UCHAR MiniportReserved[2 * sizeof(PVOID)];
507 } NDIS_REQUEST, *PNDIS_REQUEST;
511 /* Wide Area Networks definitions */
513 typedef struct _NDIS_WAN_PACKET {
514 LIST_ENTRY WanPacketQueue;
515 PUCHAR CurrentBuffer;
519 PVOID ProtocolReserved1;
520 PVOID ProtocolReserved2;
521 PVOID ProtocolReserved3;
522 PVOID ProtocolReserved4;
527 } NDIS_WAN_PACKET, *PNDIS_WAN_PACKET;
531 /* DMA channel information */
533 typedef struct _NDIS_DMA_DESCRIPTION {
535 BOOLEAN AutoInitialize;
536 BOOLEAN DmaChannelSpecified;
541 } NDIS_DMA_DESCRIPTION, *PNDIS_DMA_DESCRIPTION;
543 typedef struct _NDIS_DMA_BLOCK {
544 PVOID MapRegisterBase;
545 KEVENT AllocationEvent;
546 PADAPTER_OBJECT SystemAdapterObject;
549 } NDIS_DMA_BLOCK, *PNDIS_DMA_BLOCK;
552 /* Possible hardware architecture */
553 typedef enum _NDIS_INTERFACE_TYPE {
554 NdisInterfaceInternal = Internal,
555 NdisInterfaceIsa = Isa,
556 NdisInterfaceEisa = Eisa,
557 NdisInterfaceMca = MicroChannel,
558 NdisInterfaceTurboChannel = TurboChannel,
559 NdisInterfacePci = PCIBus,
560 NdisInterfacePcMcia = PCMCIABus,
561 NdisInterfaceCBus = CBus,
562 NdisInterfaceMPIBus = MPIBus,
563 NdisInterfaceMPSABus = MPSABus,
564 NdisInterfaceProcessorInternal = ProcessorInternal,
565 NdisInterfaceInternalPowerBus = InternalPowerBus,
566 NdisInterfacePNPISABus = PNPISABus,
567 NdisInterfacePNPBus = PNPBus,
568 NdisMaximumInterfaceType
569 } NDIS_INTERFACE_TYPE, *PNDIS_INTERFACE_TYPE;
571 #define NdisInterruptLevelSensitive LevelSensitive
572 #define NdisInterruptLatched Latched
573 typedef KINTERRUPT_MODE NDIS_INTERRUPT_MODE, *PNDIS_INTERRUPT_MODE;
576 typedef enum _NDIS_PARAMETER_TYPE {
577 NdisParameterInteger,
578 NdisParameterHexInteger,
580 NdisParameterMultiString,
582 } NDIS_PARAMETER_TYPE, *PNDIS_PARAMETER_TYPE;
589 typedef struct _NDIS_CONFIGURATION_PARAMETER {
590 NDIS_PARAMETER_TYPE ParameterType;
593 NDIS_STRING StringData;
594 BINARY_DATA BinaryData;
596 } NDIS_CONFIGURATION_PARAMETER, *PNDIS_CONFIGURATION_PARAMETER;
599 typedef PHYSICAL_ADDRESS NDIS_PHYSICAL_ADDRESS, *PNDIS_PHYSICAL_ADDRESS;
601 typedef struct _NDIS_PHYSICAL_ADDRESS_UNIT {
602 NDIS_PHYSICAL_ADDRESS PhysicalAddress;
604 } NDIS_PHYSICAL_ADDRESS_UNIT, *PNDIS_PHYSICAL_ADDRESS_UNIT;
606 typedef struct _NDIS_WAN_LINE_DOWN {
607 UCHAR RemoteAddress[6];
608 UCHAR LocalAddress[6];
609 } NDIS_WAN_LINE_DOWN, *PNDIS_WAN_LINE_DOWN;
611 typedef struct _NDIS_WAN_LINE_UP {
613 ULONG MaximumTotalSize;
614 NDIS_WAN_QUALITY Quality;
616 UCHAR RemoteAddress[6];
617 /*OUT*/ UCHAR LocalAddress[6];
618 ULONG ProtocolBufferLength;
619 PUCHAR ProtocolBuffer;
621 NDIS_STRING DeviceName;
622 } NDIS_WAN_LINE_UP, *PNDIS_WAN_LINE_UP;
626 (*ADAPTER_SHUTDOWN_HANDLER)(
627 /*IN*/ PVOID ShutdownContext);
630 typedef struct _OID_LIST OID_LIST, *POID_LIST;
634 typedef enum _NDIS_PNP_DEVICE_STATE {
636 NdisPnPDeviceStarted,
637 NdisPnPDeviceQueryStopped,
638 NdisPnPDeviceStopped,
639 NdisPnPDeviceQueryRemoved,
640 NdisPnPDeviceRemoved,
641 NdisPnPDeviceSurpriseRemoved
642 } NDIS_PNP_DEVICE_STATE;
644 #define NDIS_DEVICE_NOT_STOPPABLE 0x00000001
645 #define NDIS_DEVICE_NOT_REMOVEABLE 0x00000002
646 #define NDIS_DEVICE_NOT_SUSPENDABLE 0x00000004
647 #define NDIS_DEVICE_DISABLE_PM 0x00000008
648 #define NDIS_DEVICE_DISABLE_WAKE_UP 0x00000010
649 #define NDIS_DEVICE_DISABLE_WAKE_ON_RECONNECT 0x00000020
650 #define NDIS_DEVICE_RESERVED 0x00000040
651 #define NDIS_DEVICE_DISABLE_WAKE_ON_MAGIC_PACKET 0x00000080
652 #define NDIS_DEVICE_DISABLE_WAKE_ON_PATTERN_MATCH 0x00000100
655 /* OID_GEN_NETWORK_LAYER_ADDRESSES */
656 typedef struct _NETWORK_ADDRESS {
657 USHORT AddressLength;
660 } NETWORK_ADDRESS, *PNETWORK_ADDRESS;
662 typedef struct _NETWORK_ADDRESS_LIST {
665 NETWORK_ADDRESS Address[1];
666 } NETWORK_ADDRESS_LIST, *PNETWORK_ADDRESS_LIST;
668 /* Protocol types supported by NDIS */
669 #define NDIS_PROTOCOL_ID_DEFAULT 0x00
670 #define NDIS_PROTOCOL_ID_TCP_IP 0x02
671 #define NDIS_PROTOCOL_ID_IPX 0x06
672 #define NDIS_PROTOCOL_ID_NBF 0x07
673 #define NDIS_PROTOCOL_ID_MAX 0x0F
674 #define NDIS_PROTOCOL_ID_MASK 0x0F
677 /* OID_GEN_TRANSPORT_HEADER_OFFSET */
678 typedef struct _TRANSPORT_HEADER_OFFSET {
681 } TRANSPORT_HEADER_OFFSET, *PTRANSPORT_HEADER_OFFSET;
684 /* OID_GEN_CO_LINK_SPEED / OID_GEN_CO_MINIMUM_LINK_SPEED */
685 typedef struct _NDIS_CO_LINK_SPEED {
688 } NDIS_CO_LINK_SPEED, *PNDIS_CO_LINK_SPEED;
690 typedef ULONG NDIS_AF, *PNDIS_AF;
691 #define CO_ADDRESS_FAMILY_Q2931 ((NDIS_AF)0x1)
692 #define CO_ADDRESS_FAMILY_PSCHED ((NDIS_AF)0x2)
693 #define CO_ADDRESS_FAMILY_L2TP ((NDIS_AF)0x3)
694 #define CO_ADDRESS_FAMILY_IRDA ((NDIS_AF)0x4)
695 #define CO_ADDRESS_FAMILY_1394 ((NDIS_AF)0x5)
696 #define CO_ADDRESS_FAMILY_PPP ((NDIS_AF)0x6)
697 #define CO_ADDRESS_FAMILY_TAPI ((NDIS_AF)0x800)
698 #define CO_ADDRESS_FAMILY_TAPI_PROXY ((NDIS_AF)0x801)
700 #define CO_ADDRESS_FAMILY_PROXY 0x80000000
703 NDIS_AF AddressFamily;
706 } CO_ADDRESS_FAMILY, *PCO_ADDRESS_FAMILY;
708 typedef struct _CO_FLOW_PARAMETERS {
710 ULONG TokenBucketSize;
713 ULONG DelayVariation;
714 SERVICETYPE ServiceType;
716 ULONG MinimumPolicedSize;
717 } CO_FLOW_PARAMETERS, *PCO_FLOW_PARAMETERS;
719 typedef struct _CO_SPECIFIC_PARAMETERS {
723 } CO_SPECIFIC_PARAMETERS, *PCO_SPECIFIC_PARAMETERS;
725 typedef struct _CO_CALL_MANAGER_PARAMETERS {
726 CO_FLOW_PARAMETERS Transmit;
727 CO_FLOW_PARAMETERS Receive;
728 CO_SPECIFIC_PARAMETERS CallMgrSpecific;
729 } CO_CALL_MANAGER_PARAMETERS, *PCO_CALL_MANAGER_PARAMETERS;
731 /* CO_MEDIA_PARAMETERS.Flags constants */
732 #define RECEIVE_TIME_INDICATION 0x00000001
733 #define USE_TIME_STAMPS 0x00000002
734 #define TRANSMIT_VC 0x00000004
735 #define RECEIVE_VC 0x00000008
736 #define INDICATE_ERRED_PACKETS 0x00000010
737 #define INDICATE_END_OF_TX 0x00000020
738 #define RESERVE_RESOURCES_VC 0x00000040
739 #define ROUND_DOWN_FLOW 0x00000080
740 #define ROUND_UP_FLOW 0x00000100
742 typedef struct _CO_MEDIA_PARAMETERS {
744 ULONG ReceivePriority;
745 ULONG ReceiveSizeHint;
746 CO_SPECIFIC_PARAMETERS MediaSpecific;
747 } CO_MEDIA_PARAMETERS, *PCO_MEDIA_PARAMETERS;
749 /* CO_CALL_PARAMETERS.Flags constants */
750 #define PERMANENT_VC 0x00000001
751 #define CALL_PARAMETERS_CHANGED 0x00000002
752 #define QUERY_CALL_PARAMETERS 0x00000004
753 #define BROADCAST_VC 0x00000008
754 #define MULTIPOINT_VC 0x00000010
756 typedef struct _CO_CALL_PARAMETERS {
758 PCO_CALL_MANAGER_PARAMETERS CallMgrParameters;
759 PCO_MEDIA_PARAMETERS MediaParameters;
760 } CO_CALL_PARAMETERS, *PCO_CALL_PARAMETERS;
762 typedef struct _CO_SAP {
768 typedef struct _NDIS_IPSEC_PACKET_INFO {
769 _ANONYMOUS_UNION union {
771 NDIS_HANDLE OffloadHandle;
772 NDIS_HANDLE NextOffloadHandle;
775 ULONG SA_DELETE_REQ : 1;
776 ULONG CRYPTO_DONE : 1;
777 ULONG NEXT_CRYPTO_DONE : 1;
781 } NDIS_IPSEC_PACKET_INFO, *PNDIS_IPSEC_PACKET_INFO;
783 /* NDIS_MAC_FRAGMENT.Errors constants */
784 #define WAN_ERROR_CRC 0x00000001
785 #define WAN_ERROR_FRAMING 0x00000002
786 #define WAN_ERROR_HARDWAREOVERRUN 0x00000004
787 #define WAN_ERROR_BUFFEROVERRUN 0x00000008
788 #define WAN_ERROR_TIMEOUT 0x00000010
789 #define WAN_ERROR_ALIGNMENT 0x00000020
791 typedef struct _NDIS_MAC_FRAGMENT {
792 NDIS_HANDLE NdisLinkContext;
794 } NDIS_MAC_FRAGMENT, *PNDIS_MAC_FRAGMENT;
796 typedef struct _NDIS_MAC_LINE_DOWN {
797 NDIS_HANDLE NdisLinkContext;
798 } NDIS_MAC_LINE_DOWN, *PNDIS_MAC_LINE_DOWN;
800 typedef struct _NDIS_MAC_LINE_UP {
802 NDIS_WAN_QUALITY Quality;
804 NDIS_HANDLE ConnectionWrapperID;
805 NDIS_HANDLE NdisLinkHandle;
806 NDIS_HANDLE NdisLinkContext;
807 } NDIS_MAC_LINE_UP, *PNDIS_MAC_LINE_UP;
809 typedef struct _NDIS_PACKET_8021Q_INFO {
810 _ANONYMOUS_UNION union {
812 UINT32 UserPriority : 3;
813 UINT32 CanonicalFormatId : 1;
815 UINT32 Reserved : 16;
819 } NDIS_PACKET_8021Q_INFO, *PNDIS_PACKET_8021Q_INFO;
821 typedef enum _NDIS_PER_PACKET_INFO {
822 TcpIpChecksumPacketInfo,
824 TcpLargeSendPacketInfo,
825 ClassificationHandlePacketInfo,
827 ScatterGatherListPacketInfo,
832 } NDIS_PER_PACKET_INFO, *PNDIS_PER_PACKET_INFO;
834 typedef struct _NDIS_PACKET_EXTENSION {
835 PVOID NdisPacketInfo[MaxPerPacketInfo];
836 } NDIS_PACKET_EXTENSION, *PNDIS_PACKET_EXTENSION;
840 * NDIS_GET_ORIGINAL_PACKET(
841 * IN PNDIS_PACKET Packet);
843 #define NDIS_GET_ORIGINAL_PACKET(Packet) \
844 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo)
848 * NDIS_GET_PACKET_CANCEL_ID(
849 * IN PNDIS_PACKET Packet);
851 #define NDIS_GET_PACKET_CANCEL_ID(Packet) \
852 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId)
855 * PNDIS_PACKET_EXTENSION
856 * NDIS_PACKET_EXTENSION_FROM_PACKET(
857 * IN PNDIS_PACKET Packet);
859 #define NDIS_PACKET_EXTENSION_FROM_PACKET(Packet) \
860 ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) \
861 + (Packet)->Private.NdisPacketOobOffset + sizeof(NDIS_PACKET_OOB_DATA)))
865 * NDIS_PER_PACKET_INFO_FROM_PACKET(
866 * IN OUT PNDIS_PACKET Packet,
867 * IN NDIS_PER_PACKET_INFO InfoType);
869 #define NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, InfoType) \
870 ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) + (Packet)->Private.NdisPacketOobOffset \
871 + sizeof(NDIS_PACKET_OOB_DATA)))->NdisPacketInfo[(InfoType)]
875 * NDIS_SET_ORIGINAL_PACKET(
876 * IN OUT PNDIS_PACKET Packet,
877 * IN PNDIS_PACKET OriginalPacket);
879 #define NDIS_SET_ORIGINAL_PACKET(Packet, OriginalPacket) \
880 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo) = (OriginalPacket)
884 * NDIS_SET_PACKET_CANCEL_ID(
885 * IN PNDIS_PACKET Packet
886 * IN ULONG_PTR CancelId);
888 #define NDIS_SET_PACKET_CANCEL_ID(Packet, CancelId) \
889 NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId) = (CancelId)
891 typedef enum _NDIS_TASK {
892 TcpIpChecksumNdisTask,
894 TcpLargeSendNdisTask,
896 } NDIS_TASK, *PNDIS_TASK;
898 typedef struct _NDIS_TASK_IPSEC {
900 ULONG AH_ESP_COMBINED;
901 ULONG TRANSPORT_TUNNEL_COMBINED;
918 ULONG TRIPLE_DES : 1;
925 } NDIS_TASK_IPSEC, *PNDIS_TASK_IPSEC;
927 typedef enum _NDIS_ENCAPSULATION {
928 UNSPECIFIED_Encapsulation,
930 IEEE_802_3_Encapsulation,
931 IEEE_802_5_Encapsulation,
932 LLC_SNAP_ROUTED_Encapsulation,
933 LLC_SNAP_BRIDGED_Encapsulation
934 } NDIS_ENCAPSULATION;
936 typedef struct _NDIS_ENCAPSULATION_FORMAT {
937 NDIS_ENCAPSULATION Encapsulation;
939 ULONG FixedHeaderSize : 1;
942 ULONG EncapsulationHeaderSize;
943 } NDIS_ENCAPSULATION_FORMAT, *PNDIS_ENCAPSULATION_FORMAT;
945 typedef struct _NDIS_TASK_OFFLOAD_HEADER
950 UCHAR OffsetFirstTask;
951 NDIS_ENCAPSULATION_FORMAT EncapsulationFormat;
952 } NDIS_TASK_OFFLOAD_HEADER, *PNDIS_TASK_OFFLOAD_HEADER;
954 typedef struct _NDIS_TASK_OFFLOAD {
958 ULONG OffsetNextTask;
959 ULONG TaskBufferLength;
961 } NDIS_TASK_OFFLOAD, *PNDIS_TASK_OFFLOAD;
963 /* NDIS_TASK_OFFLOAD_HEADER.Version constants */
964 #define NDIS_TASK_OFFLOAD_VERSION 1
966 typedef struct _NDIS_TASK_TCP_IP_CHECKSUM {
968 ULONG IpOptionsSupported:1;
969 ULONG TcpOptionsSupported:1;
976 ULONG IpOptionsSupported : 1;
977 ULONG TcpOptionsSupported : 1;
978 ULONG TcpChecksum : 1;
979 ULONG UdpChecksum : 1;
980 ULONG IpChecksum : 1;
984 ULONG IpOptionsSupported : 1;
985 ULONG TcpOptionsSupported : 1;
986 ULONG TcpChecksum : 1;
987 ULONG UdpChecksum : 1;
991 ULONG IpOptionsSupported : 1;
992 ULONG TcpOptionsSupported : 1;
993 ULONG TcpChecksum : 1;
994 ULONG UdpChecksum : 1;
996 } NDIS_TASK_TCP_IP_CHECKSUM, *PNDIS_TASK_TCP_IP_CHECKSUM;
998 typedef struct _NDIS_TASK_TCP_LARGE_SEND {
1000 ULONG MaxOffLoadSize;
1001 ULONG MinSegmentCount;
1004 } NDIS_TASK_TCP_LARGE_SEND, *PNDIS_TASK_TCP_LARGE_SEND;
1006 typedef struct _NDIS_TCP_IP_CHECKSUM_PACKET_INFO {
1007 _ANONYMOUS_UNION union {
1009 ULONG NdisPacketChecksumV4 : 1;
1010 ULONG NdisPacketChecksumV6 : 1;
1011 ULONG NdisPacketTcpChecksum : 1;
1012 ULONG NdisPacketUdpChecksum : 1;
1013 ULONG NdisPacketIpChecksum : 1;
1017 ULONG NdisPacketTcpChecksumFailed : 1;
1018 ULONG NdisPacketUdpChecksumFailed : 1;
1019 ULONG NdisPacketIpChecksumFailed : 1;
1020 ULONG NdisPacketTcpChecksumSucceeded : 1;
1021 ULONG NdisPacketUdpChecksumSucceeded : 1;
1022 ULONG NdisPacketIpChecksumSucceeded : 1;
1023 ULONG NdisPacketLoopback : 1;
1027 } NDIS_TCP_IP_CHECKSUM_PACKET_INFO, *PNDIS_TCP_IP_CHECKSUM_PACKET_INFO;
1029 typedef struct _NDIS_WAN_CO_FRAGMENT {
1031 } NDIS_WAN_CO_FRAGMENT, *PNDIS_WAN_CO_FRAGMENT;
1033 typedef struct _NDIS_WAN_FRAGMENT {
1034 UCHAR RemoteAddress[6];
1035 UCHAR LocalAddress[6];
1036 } NDIS_WAN_FRAGMENT, *PNDIS_WAN_FRAGMENT;
1038 typedef struct _WAN_CO_LINKPARAMS {
1039 ULONG TransmitSpeed;
1042 } WAN_CO_LINKPARAMS, *PWAN_CO_LINKPARAMS;
1048 (*CM_ACTIVATE_VC_COMPLETE_HANDLER)(
1049 /*IN*/ NDIS_STATUS Status,
1050 /*IN*/ NDIS_HANDLE CallMgrVcContext,
1051 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
1053 typedef NDIS_STATUS DDKAPI
1054 (*CM_ADD_PARTY_HANDLER)(
1055 /*IN*/ NDIS_HANDLE CallMgrVcContext,
1056 /*IN OUT*/ PCO_CALL_PARAMETERS CallParameters,
1057 /*IN*/ NDIS_HANDLE NdisPartyHandle,
1058 /*OUT*/ PNDIS_HANDLE CallMgrPartyContext);
1060 typedef NDIS_STATUS DDKAPI
1061 (*CM_CLOSE_AF_HANDLER)(
1062 /*IN*/ NDIS_HANDLE CallMgrAfContext);
1064 typedef NDIS_STATUS DDKAPI
1065 (*CM_CLOSE_CALL_HANDLER)(
1066 /*IN*/ NDIS_HANDLE CallMgrVcContext,
1067 /*IN*/ NDIS_HANDLE CallMgrPartyContext /*OPTIONAL*/,
1068 /*IN*/ PVOID CloseData /*OPTIONAL*/,
1069 /*IN*/ UINT Size /*OPTIONAL*/);
1071 typedef NDIS_STATUS DDKAPI
1072 (*CM_DEREG_SAP_HANDLER)(
1073 /*IN*/ NDIS_HANDLE CallMgrSapContext);
1076 (*CM_DEACTIVATE_VC_COMPLETE_HANDLER)(
1077 /*IN*/ NDIS_STATUS Status,
1078 /*IN*/ NDIS_HANDLE CallMgrVcContext);
1080 typedef NDIS_STATUS DDKAPI
1081 (*CM_DROP_PARTY_HANDLER)(
1082 /*IN*/ NDIS_HANDLE CallMgrPartyContext,
1083 /*IN*/ PVOID CloseData /*OPTIONAL*/,
1084 /*IN*/ UINT Size /*OPTIONAL*/);
1087 (*CM_INCOMING_CALL_COMPLETE_HANDLER)(
1088 /*IN*/ NDIS_STATUS Status,
1089 /*IN*/ NDIS_HANDLE CallMgrVcContext,
1090 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
1092 typedef NDIS_STATUS DDKAPI
1093 (*CM_MAKE_CALL_HANDLER)(
1094 /*IN*/ NDIS_HANDLE CallMgrVcContext,
1095 /*IN OUT*/ PCO_CALL_PARAMETERS CallParameters,
1096 /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/,
1097 /*OUT*/ PNDIS_HANDLE CallMgrPartyContext /*OPTIONAL*/);
1099 typedef NDIS_STATUS DDKAPI
1100 (*CM_MODIFY_CALL_QOS_HANDLER)(
1101 /*IN*/ NDIS_HANDLE CallMgrVcContext,
1102 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
1104 typedef NDIS_STATUS DDKAPI
1105 (*CM_OPEN_AF_HANDLER)(
1106 /*IN*/ NDIS_HANDLE CallMgrBindingContext,
1107 /*IN*/ PCO_ADDRESS_FAMILY AddressFamily,
1108 /*IN*/ NDIS_HANDLE NdisAfHandle,
1109 /*OUT*/ PNDIS_HANDLE CallMgrAfContext);
1111 typedef NDIS_STATUS DDKAPI
1112 (*CM_REG_SAP_HANDLER)(
1113 /*IN*/ NDIS_HANDLE CallMgrAfContext,
1115 /*IN*/ NDIS_HANDLE NdisSapHandle,
1116 /*OUT*/ PNDIS_HANDLE CallMgrSapContext);
1118 typedef NDIS_STATUS DDKAPI
1119 (*CO_CREATE_VC_HANDLER)(
1120 /*IN*/ NDIS_HANDLE ProtocolAfContext,
1121 /*IN*/ NDIS_HANDLE NdisVcHandle,
1122 /*OUT*/ PNDIS_HANDLE ProtocolVcContext);
1124 typedef NDIS_STATUS DDKAPI
1125 (*CO_DELETE_VC_HANDLER)(
1126 /*IN*/ NDIS_HANDLE ProtocolVcContext);
1129 (*CO_REQUEST_COMPLETE_HANDLER)(
1130 /*IN*/ NDIS_STATUS Status,
1131 /*IN*/ NDIS_HANDLE ProtocolAfContext /*OPTIONAL*/,
1132 /*IN*/ NDIS_HANDLE ProtocolVcContext /*OPTIONAL*/,
1133 /*IN*/ NDIS_HANDLE ProtocolPartyContext /*OPTIONAL*/,
1134 /*IN*/ PNDIS_REQUEST NdisRequest);
1136 typedef NDIS_STATUS DDKAPI
1137 (*CO_REQUEST_HANDLER)(
1138 /*IN*/ NDIS_HANDLE ProtocolAfContext,
1139 /*IN*/ NDIS_HANDLE ProtocolVcContext /*OPTIONAL*/,
1140 /*IN*/ NDIS_HANDLE ProtocolPartyContext /*OPTIONAL*/,
1141 /*IN OUT*/ PNDIS_REQUEST NdisRequest);
1143 typedef struct _NDIS_CALL_MANAGER_CHARACTERISTICS {
1148 CO_CREATE_VC_HANDLER CmCreateVcHandler;
1149 CO_DELETE_VC_HANDLER CmDeleteVcHandler;
1150 CM_OPEN_AF_HANDLER CmOpenAfHandler;
1151 CM_CLOSE_AF_HANDLER CmCloseAfHandler;
1152 CM_REG_SAP_HANDLER CmRegisterSapHandler;
1153 CM_DEREG_SAP_HANDLER CmDeregisterSapHandler;
1154 CM_MAKE_CALL_HANDLER CmMakeCallHandler;
1155 CM_CLOSE_CALL_HANDLER CmCloseCallHandler;
1156 CM_INCOMING_CALL_COMPLETE_HANDLER CmIncomingCallCompleteHandler;
1157 CM_ADD_PARTY_HANDLER CmAddPartyHandler;
1158 CM_DROP_PARTY_HANDLER CmDropPartyHandler;
1159 CM_ACTIVATE_VC_COMPLETE_HANDLER CmActivateVcCompleteHandler;
1160 CM_DEACTIVATE_VC_COMPLETE_HANDLER CmDeactivateVcCompleteHandler;
1161 CM_MODIFY_CALL_QOS_HANDLER CmModifyCallQoSHandler;
1162 CO_REQUEST_HANDLER CmRequestHandler;
1163 CO_REQUEST_COMPLETE_HANDLER CmRequestCompleteHandler;
1164 } NDIS_CALL_MANAGER_CHARACTERISTICS, *PNDIS_CALL_MANAGER_CHARACTERISTICS;
1168 /* Call Manager clients */
1170 typedef VOID (*CL_OPEN_AF_COMPLETE_HANDLER)(
1171 /*IN*/ NDIS_STATUS Status,
1172 /*IN*/ NDIS_HANDLE ProtocolAfContext,
1173 /*IN*/ NDIS_HANDLE NdisAfHandle);
1176 (*CL_CLOSE_AF_COMPLETE_HANDLER)(
1177 /*IN*/ NDIS_STATUS Status,
1178 /*IN*/ NDIS_HANDLE ProtocolAfContext);
1181 (*CL_REG_SAP_COMPLETE_HANDLER)(
1182 /*IN*/ NDIS_STATUS Status,
1183 /*IN*/ NDIS_HANDLE ProtocolSapContext,
1185 /*IN*/ NDIS_HANDLE NdisSapHandle);
1188 (*CL_DEREG_SAP_COMPLETE_HANDLER)(
1189 /*IN*/ NDIS_STATUS Status,
1190 /*IN*/ NDIS_HANDLE ProtocolSapContext);
1193 (*CL_MAKE_CALL_COMPLETE_HANDLER)(
1194 /*IN*/ NDIS_STATUS Status,
1195 /*IN*/ NDIS_HANDLE ProtocolVcContext,
1196 /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/,
1197 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
1200 (*CL_MODIFY_CALL_QOS_COMPLETE_HANDLER)(
1201 /*IN*/ NDIS_STATUS Status,
1202 /*IN*/ NDIS_HANDLE ProtocolVcContext,
1203 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
1206 (*CL_CLOSE_CALL_COMPLETE_HANDLER)(
1207 /*IN*/ NDIS_STATUS Status,
1208 /*IN*/ NDIS_HANDLE ProtocolVcContext,
1209 /*IN*/ NDIS_HANDLE ProtocolPartyContext /*OPTIONAL*/);
1212 (*CL_ADD_PARTY_COMPLETE_HANDLER)(
1213 /*IN*/ NDIS_STATUS Status,
1214 /*IN*/ NDIS_HANDLE ProtocolPartyContext,
1215 /*IN*/ NDIS_HANDLE NdisPartyHandle,
1216 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
1219 (*CL_DROP_PARTY_COMPLETE_HANDLER)(
1220 /*IN*/ NDIS_STATUS Status,
1221 /*IN*/ NDIS_HANDLE ProtocolPartyContext);
1223 typedef NDIS_STATUS DDKAPI
1224 (*CL_INCOMING_CALL_HANDLER)(
1225 /*IN*/ NDIS_HANDLE ProtocolSapContext,
1226 /*IN*/ NDIS_HANDLE ProtocolVcContext,
1227 /*IN OUT*/ PCO_CALL_PARAMETERS CallParameters);
1230 (*CL_INCOMING_CALL_QOS_CHANGE_HANDLER)(
1231 /*IN*/ NDIS_HANDLE ProtocolVcContext,
1232 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
1235 (*CL_INCOMING_CLOSE_CALL_HANDLER)(
1236 /*IN*/ NDIS_STATUS CloseStatus,
1237 /*IN*/ NDIS_HANDLE ProtocolVcContext,
1238 /*IN*/ PVOID CloseData /*OPTIONAL*/,
1239 /*IN*/ UINT Size /*OPTIONAL*/);
1242 (*CL_INCOMING_DROP_PARTY_HANDLER)(
1243 /*IN*/ NDIS_STATUS DropStatus,
1244 /*IN*/ NDIS_HANDLE ProtocolPartyContext,
1245 /*IN*/ PVOID CloseData /*OPTIONAL*/,
1246 /*IN*/ UINT Size /*OPTIONAL*/);
1249 (*CL_CALL_CONNECTED_HANDLER)(
1250 /*IN*/ NDIS_HANDLE ProtocolVcContext);
1253 typedef struct _NDIS_CLIENT_CHARACTERISTICS {
1258 CO_CREATE_VC_HANDLER ClCreateVcHandler;
1259 CO_DELETE_VC_HANDLER ClDeleteVcHandler;
1260 CO_REQUEST_HANDLER ClRequestHandler;
1261 CO_REQUEST_COMPLETE_HANDLER ClRequestCompleteHandler;
1262 CL_OPEN_AF_COMPLETE_HANDLER ClOpenAfCompleteHandler;
1263 CL_CLOSE_AF_COMPLETE_HANDLER ClCloseAfCompleteHandler;
1264 CL_REG_SAP_COMPLETE_HANDLER ClRegisterSapCompleteHandler;
1265 CL_DEREG_SAP_COMPLETE_HANDLER ClDeregisterSapCompleteHandler;
1266 CL_MAKE_CALL_COMPLETE_HANDLER ClMakeCallCompleteHandler;
1267 CL_MODIFY_CALL_QOS_COMPLETE_HANDLER ClModifyCallQoSCompleteHandler;
1268 CL_CLOSE_CALL_COMPLETE_HANDLER ClCloseCallCompleteHandler;
1269 CL_ADD_PARTY_COMPLETE_HANDLER ClAddPartyCompleteHandler;
1270 CL_DROP_PARTY_COMPLETE_HANDLER ClDropPartyCompleteHandler;
1271 CL_INCOMING_CALL_HANDLER ClIncomingCallHandler;
1272 CL_INCOMING_CALL_QOS_CHANGE_HANDLER ClIncomingCallQoSChangeHandler;
1273 CL_INCOMING_CLOSE_CALL_HANDLER ClIncomingCloseCallHandler;
1274 CL_INCOMING_DROP_PARTY_HANDLER ClIncomingDropPartyHandler;
1275 CL_CALL_CONNECTED_HANDLER ClCallConnectedHandler;
1276 } NDIS_CLIENT_CHARACTERISTICS, *PNDIS_CLIENT_CHARACTERISTICS;
1279 /* NDIS protocol structures */
1281 /* Prototypes for NDIS 3.0 protocol characteristics */
1284 (*OPEN_ADAPTER_COMPLETE_HANDLER)(
1285 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1286 /*IN*/ NDIS_STATUS Status,
1287 /*IN*/ NDIS_STATUS OpenErrorStatus);
1290 (*CLOSE_ADAPTER_COMPLETE_HANDLER)(
1291 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1292 /*IN*/ NDIS_STATUS Status);
1295 (*RESET_COMPLETE_HANDLER)(
1296 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1297 /*IN*/ NDIS_STATUS Status);
1300 (*REQUEST_COMPLETE_HANDLER)(
1301 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1302 /*IN*/ PNDIS_REQUEST NdisRequest,
1303 /*IN*/ NDIS_STATUS Status);
1307 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1308 /*IN*/ NDIS_STATUS GeneralStatus,
1309 /*IN*/ PVOID StatusBuffer,
1310 /*IN*/ UINT StatusBufferSize);
1313 (*STATUS_COMPLETE_HANDLER)(
1314 /*IN*/ NDIS_HANDLE ProtocolBindingContext);
1317 (*SEND_COMPLETE_HANDLER)(
1318 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1319 /*IN*/ PNDIS_PACKET Packet,
1320 /*IN*/ NDIS_STATUS Status);
1323 (*WAN_SEND_COMPLETE_HANDLER)(
1324 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1325 /*IN*/ PNDIS_WAN_PACKET Packet,
1326 /*IN*/ NDIS_STATUS Status);
1329 (*TRANSFER_DATA_COMPLETE_HANDLER)(
1330 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1331 /*IN*/ PNDIS_PACKET Packet,
1332 /*IN*/ NDIS_STATUS Status,
1333 /*IN*/ UINT BytesTransferred);
1336 (*WAN_TRANSFER_DATA_COMPLETE_HANDLER)(
1340 typedef NDIS_STATUS DDKAPI
1342 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1343 /*IN*/ NDIS_HANDLE MacReceiveContext,
1344 /*IN*/ PVOID HeaderBuffer,
1345 /*IN*/ UINT HeaderBufferSize,
1346 /*IN*/ PVOID LookAheadBuffer,
1347 /*IN*/ UINT LookaheadBufferSize,
1348 /*IN*/ UINT PacketSize);
1350 typedef NDIS_STATUS DDKAPI
1351 (*WAN_RECEIVE_HANDLER)(
1352 /*IN*/ NDIS_HANDLE NdisLinkHandle,
1353 /*IN*/ PUCHAR Packet,
1354 /*IN*/ ULONG PacketSize);
1357 (*RECEIVE_COMPLETE_HANDLER)(
1358 /*IN*/ NDIS_HANDLE ProtocolBindingContext);
1361 /* Protocol characteristics for NDIS 3.0 protocols */
1363 #define NDIS30_PROTOCOL_CHARACTERISTICS_S \
1364 UCHAR MajorNdisVersion; \
1365 UCHAR MinorNdisVersion; \
1366 _ANONYMOUS_UNION union { \
1370 OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler; \
1371 CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler; \
1372 _ANONYMOUS_UNION union { \
1373 SEND_COMPLETE_HANDLER SendCompleteHandler; \
1374 WAN_SEND_COMPLETE_HANDLER WanSendCompleteHandler; \
1375 } DUMMYUNIONNAME2; \
1376 _ANONYMOUS_UNION union { \
1377 TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler; \
1378 WAN_TRANSFER_DATA_COMPLETE_HANDLER WanTransferDataCompleteHandler; \
1379 } DUMMYUNIONNAME3; \
1380 RESET_COMPLETE_HANDLER ResetCompleteHandler; \
1381 REQUEST_COMPLETE_HANDLER RequestCompleteHandler; \
1382 _ANONYMOUS_UNION union { \
1383 RECEIVE_HANDLER ReceiveHandler; \
1384 WAN_RECEIVE_HANDLER WanReceiveHandler; \
1385 } DUMMYUNIONNAME4; \
1386 RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler; \
1387 STATUS_HANDLER StatusHandler; \
1388 STATUS_COMPLETE_HANDLER StatusCompleteHandler; \
1391 typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS {
1392 NDIS30_PROTOCOL_CHARACTERISTICS_S
1393 } NDIS30_PROTOCOL_CHARACTERISTICS, *PNDIS30_PROTOCOL_CHARACTERISTICS;
1396 /* Prototypes for NDIS 4.0 protocol characteristics */
1399 (*RECEIVE_PACKET_HANDLER)(
1400 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1401 /*IN*/ PNDIS_PACKET Packet);
1405 /*OUT*/ PNDIS_STATUS Status,
1406 /*IN*/ NDIS_HANDLE BindContext,
1407 /*IN*/ PNDIS_STRING DeviceName,
1408 /*IN*/ PVOID SystemSpecific1,
1409 /*IN*/ PVOID SystemSpecific2);
1413 /*OUT*/ PNDIS_STATUS Status,
1414 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1415 /*IN*/ NDIS_HANDLE UnbindContext);
1417 typedef NDIS_STATUS DDKAPI
1418 (*PNP_EVENT_HANDLER)(
1419 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1420 /*IN*/ PNET_PNP_EVENT NetPnPEvent);
1423 (*UNLOAD_PROTOCOL_HANDLER)(
1427 /* Protocol characteristics for NDIS 4.0 protocols */
1431 #define NDIS40_PROTOCOL_CHARACTERISTICS_S \
1432 NDIS30_PROTOCOL_CHARACTERISTICS Ndis30Chars; \
1433 RECEIVE_PACKET_HANDLER ReceivePacketHandler; \
1434 BIND_HANDLER BindAdapterHandler; \
1435 UNBIND_HANDLER UnbindAdapterHandler; \
1436 PNP_EVENT_HANDLER PnPEventHandler; \
1437 UNLOAD_PROTOCOL_HANDLER UnloadHandler;
1439 #else /* !__cplusplus */
1441 #define NDIS40_PROTOCOL_CHARACTERISTICS_S \
1442 NDIS30_PROTOCOL_CHARACTERISTICS_S \
1443 RECEIVE_PACKET_HANDLER ReceivePacketHandler; \
1444 BIND_HANDLER BindAdapterHandler; \
1445 UNBIND_HANDLER UnbindAdapterHandler; \
1446 PNP_EVENT_HANDLER PnPEventHandler; \
1447 UNLOAD_PROTOCOL_HANDLER UnloadHandler;
1449 #endif /* __cplusplus */
1451 typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS {
1452 NDIS40_PROTOCOL_CHARACTERISTICS_S
1453 } NDIS40_PROTOCOL_CHARACTERISTICS, *PNDIS40_PROTOCOL_CHARACTERISTICS;
1455 /* Prototypes for NDIS 5.0 protocol characteristics */
1458 (*CO_SEND_COMPLETE_HANDLER)(
1459 /*IN*/ NDIS_STATUS Status,
1460 /*IN*/ NDIS_HANDLE ProtocolVcContext,
1461 /*IN*/ PNDIS_PACKET Packet);
1464 (*CO_STATUS_HANDLER)(
1465 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1466 /*IN*/ NDIS_HANDLE ProtocolVcContext /*OPTIONAL*/,
1467 /*IN*/ NDIS_STATUS GeneralStatus,
1468 /*IN*/ PVOID StatusBuffer,
1469 /*IN*/ UINT StatusBufferSize);
1472 (*CO_RECEIVE_PACKET_HANDLER)(
1473 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1474 /*IN*/ NDIS_HANDLE ProtocolVcContext,
1475 /*IN*/ PNDIS_PACKET Packet);
1478 (*CO_AF_REGISTER_NOTIFY_HANDLER)(
1479 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
1480 /*IN*/ PCO_ADDRESS_FAMILY AddressFamily);
1482 #ifdef __cplusplus \
1484 #define NDIS50_PROTOCOL_CHARACTERISTICS_S \
1485 NDIS40_PROTOCOL_CHARACTERISTICS Ndis40Chars; \
1486 PVOID ReservedHandlers[4]; \
1487 CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler; \
1488 CO_STATUS_HANDLER CoStatusHandler; \
1489 CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler; \
1490 CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
1492 #else /* !__cplusplus */
1494 #define NDIS50_PROTOCOL_CHARACTERISTICS_S \
1495 NDIS40_PROTOCOL_CHARACTERISTICS_S \
1496 PVOID ReservedHandlers[4]; \
1497 CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler; \
1498 CO_STATUS_HANDLER CoStatusHandler; \
1499 CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler; \
1500 CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
1502 #endif /* !__cplusplus */
1504 typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS {
1505 NDIS50_PROTOCOL_CHARACTERISTICS_S
1506 } NDIS50_PROTOCOL_CHARACTERISTICS, *PNDIS50_PROTOCOL_CHARACTERISTICS;
1508 #if defined(NDIS50) || defined(NDIS51)
1509 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS {
1510 NDIS50_PROTOCOL_CHARACTERISTICS_S;
1511 } NDIS_PROTOCOL_CHARACTERISTICS, *PNDIS_PROTOCOL_CHARACTERISTICS;
1512 #elif defined(NDIS40)
1513 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS {
1514 NDIS40_PROTOCOL_CHARACTERISTICS_S;
1515 } NDIS_PROTOCOL_CHARACTERISTICS, *PNDIS_PROTOCOL_CHARACTERISTICS;
1516 #elif defined(NDIS30)
1517 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS {
1518 NDIS30_PROTOCOL_CHARACTERISTICS_S
1519 } NDIS_PROTOCOL_CHARACTERISTICS, *PNDIS_PROTOCOL_CHARACTERISTICS;
1521 #error Define an NDIS version
1526 /* Buffer management routines */
1532 /*OUT*/ PNDIS_STATUS Status,
1533 /*OUT*/ PNDIS_BUFFER *Buffer,
1534 /*IN*/ NDIS_HANDLE PoolHandle,
1535 /*IN*/ PVOID VirtualAddress,
1536 /*IN*/ UINT Length);
1542 NdisAllocateBufferPool(
1543 /*OUT*/ PNDIS_STATUS Status,
1544 /*OUT*/ PNDIS_HANDLE PoolHandle,
1545 /*IN*/ UINT NumberOfDescriptors);
1551 /*OUT*/ PNDIS_STATUS Status,
1552 /*OUT*/ PNDIS_PACKET *Packet,
1553 /*IN*/ NDIS_HANDLE PoolHandle);
1558 NdisAllocatePacketPool(
1559 /*OUT*/ PNDIS_STATUS Status,
1560 /*OUT*/ PNDIS_HANDLE PoolHandle,
1561 /*IN*/ UINT NumberOfDescriptors,
1562 /*IN*/ UINT ProtocolReservedLength);
1564 #define PROTOCOL_RESERVED_SIZE_IN_PACKET (4 * sizeof(PVOID))
1570 /*OUT*/ PNDIS_STATUS Status,
1571 /*OUT*/ PNDIS_BUFFER *Buffer,
1572 /*IN*/ NDIS_HANDLE PoolHandle,
1573 /*IN*/ PVOID MemoryDescriptor,
1575 /*IN*/ UINT Length);
1580 NdisCopyFromPacketToPacket(
1581 /*IN*/ PNDIS_PACKET Destination,
1582 /*IN*/ UINT DestinationOffset,
1583 /*IN*/ UINT BytesToCopy,
1584 /*IN*/ PNDIS_PACKET Source,
1585 /*IN*/ UINT SourceOffset,
1586 /*OUT*/ PUINT BytesCopied);
1591 NdisDprAllocatePacket(
1592 /*OUT*/ PNDIS_STATUS Status,
1593 /*OUT*/ PNDIS_PACKET *Packet,
1594 /*IN*/ NDIS_HANDLE PoolHandle);
1599 NdisDprAllocatePacketNonInterlocked(
1600 /*OUT*/ PNDIS_STATUS Status,
1601 /*OUT*/ PNDIS_PACKET *Packet,
1602 /*IN*/ NDIS_HANDLE PoolHandle);
1608 /*IN*/ PNDIS_PACKET Packet);
1613 NdisDprFreePacketNonInterlocked(
1614 /*IN*/ PNDIS_PACKET Packet);
1620 /*IN*/ NDIS_HANDLE PoolHandle);
1626 /*IN*/ PNDIS_PACKET Packet);
1632 /*IN*/ NDIS_HANDLE PoolHandle);
1638 /*IN*/ PNDIS_PACKET *PacketsToReturn,
1639 /*IN*/ UINT NumberOfPackets);
1644 NdisUnchainBufferAtBack(
1645 /*IN OUT*/ PNDIS_PACKET Packet,
1646 /*OUT*/ PNDIS_BUFFER *Buffer);
1651 NdisUnchainBufferAtFront(
1652 /*IN OUT*/ PNDIS_PACKET Packet,
1653 /*OUT*/ PNDIS_BUFFER *Buffer);
1658 NdisAdjustBufferLength(
1659 /*IN*/ PNDIS_BUFFER Buffer,
1660 /*IN*/ UINT Length);
1666 /*IN*/ PNDIS_BUFFER Buffer);
1671 NdisBufferVirtualAddress(
1672 /*IN*/ PNDIS_BUFFER Buffer);
1677 NDIS_BUFFER_TO_SPAN_PAGES(
1678 /*IN*/ PNDIS_BUFFER Buffer);
1684 /*IN*/ PNDIS_BUFFER Buffer);
1689 NdisGetBufferPhysicalArraySize(
1690 /*IN*/ PNDIS_BUFFER Buffer,
1691 /*OUT*/ PUINT ArraySize);
1696 NdisGetFirstBufferFromPacket(
1697 /*IN*/ PNDIS_PACKET _Packet,
1698 /*OUT*/ PNDIS_BUFFER *_FirstBuffer,
1699 /*OUT*/ PVOID *_FirstBufferVA,
1700 /*OUT*/ PUINT _FirstBufferLength,
1701 /*OUT*/ PUINT _TotalBufferLength);
1707 /*IN*/ PNDIS_BUFFER Buffer,
1708 /*OUT*/ PVOID *VirtualAddress /*OPTIONAL*/,
1709 /*OUT*/ PUINT Length);
1714 NdisQueryBufferOffset(
1715 /*IN*/ PNDIS_BUFFER Buffer,
1716 /*OUT*/ PUINT Offset,
1717 /*OUT*/ PUINT Length);
1723 /*IN*/ PNDIS_BUFFER Buffer);
1728 * NdisGetBufferPhysicalArraySize(
1729 * IN PNDIS_BUFFER Buffer,
1730 * OUT PUINT ArraySize);
1732 #define NdisGetBufferPhysicalArraySize(Buffer, \
1735 (*(ArraySize) = NDIS_BUFFER_TO_SPAN_PAGES(Buffer)) \
1741 * NdisGetFirstBufferFromPacket(
1742 * IN PNDIS_PACKET _Packet,
1743 * OUT PNDIS_BUFFER * _FirstBuffer,
1744 * OUT PVOID * _FirstBufferVA,
1745 * OUT PUINT _FirstBufferLength,
1746 * OUT PUINT _TotalBufferLength)
1748 #define NdisGetFirstBufferFromPacket(_Packet, \
1751 _FirstBufferLength, \
1752 _TotalBufferLength) \
1754 PNDIS_BUFFER _Buffer; \
1756 _Buffer = (_Packet)->Private.Head; \
1757 *(_FirstBuffer) = _Buffer; \
1758 if (_Buffer != NULL) \
1760 *(_FirstBufferVA) = MmGetSystemAddressForMdl(_Buffer); \
1761 *(_FirstBufferLength) = MmGetMdlByteCount(_Buffer); \
1762 _Buffer = _Buffer->Next; \
1763 *(_TotalBufferLength) = *(_FirstBufferLength); \
1764 while (_Buffer != NULL) { \
1765 *(_TotalBufferLength) += MmGetMdlByteCount(_Buffer); \
1766 _Buffer = _Buffer->Next; \
1771 *(_FirstBufferVA) = 0; \
1772 *(_FirstBufferLength) = 0; \
1773 *(_TotalBufferLength) = 0; \
1779 * NdisGetFirstBufferFromPacketSafe(
1780 * IN PNDIS_PACKET _Packet,
1781 * OUT PNDIS_BUFFER * _FirstBuffer,
1782 * OUT PVOID * _FirstBufferVA,
1783 * OUT PUINT _FirstBufferLength,
1784 * OUT PUINT _TotalBufferLength),
1785 * IN MM_PAGE_PRIORITY _Priority)
1787 #define NdisGetFirstBufferFromPacketSafe(_Packet, \
1790 _FirstBufferLength, \
1791 _TotalBufferLength, \
1794 PNDIS_BUFFER _Buffer; \
1796 _Buffer = (_Packet)->Private.Head; \
1797 *(_FirstBuffer) = _Buffer; \
1798 if (_Buffer != NULL) \
1800 *(_FirstBufferVA) = MmGetSystemAddressForMdlSafe(_Buffer, _Priority); \
1801 *(_FirstBufferLength) = MmGetMdlByteCount(_Buffer); \
1802 _Buffer = _Buffer->Next; \
1803 *(_TotalBufferLength) = *(_FirstBufferLength); \
1804 while (_Buffer != NULL) { \
1805 *(_TotalBufferLength) += MmGetMdlByteCount(_Buffer); \
1806 _Buffer = _Buffer->Next; \
1811 *(_FirstBufferVA) = 0; \
1812 *(_FirstBufferLength) = 0; \
1813 *(_TotalBufferLength) = 0; \
1820 * IN PNDIS_BUFFER Buffer,
1821 * OUT PVOID *VirtualAddress OPTIONAL,
1824 #define NdisQueryBuffer(Buffer, \
1828 if (VirtualAddress) \
1829 *((PVOID*)VirtualAddress) = MmGetSystemAddressForMdl(Buffer); \
1831 *((PUINT)Length) = MmGetMdlByteCount(Buffer); \
1837 * NdisQueryBufferOffset(
1838 * IN PNDIS_BUFFER Buffer,
1840 * OUT PUINT Length);
1842 #define NdisQueryBufferOffset(Buffer, \
1846 *((PUINT)Offset) = MmGetMdlByteOffset(Buffer); \
1847 *((PUINT)Length) = MmGetMdlByteCount(Buffer); \
1853 * NDIS_BUFFER_LINKAGE(
1854 * IN PNDIS_BUFFER Buffer);
1856 #define NDIS_BUFFER_LINKAGE(Buffer)(Buffer)->Next;
1861 * NdisChainBufferAtBack(
1862 * IN OUT PNDIS_PACKET Packet,
1863 * IN OUT PNDIS_BUFFER Buffer)
1865 #define NdisChainBufferAtBack(Packet, \
1868 PNDIS_BUFFER NdisBuffer = (Buffer); \
1870 while (NdisBuffer->Next != NULL) \
1871 NdisBuffer = NdisBuffer->Next; \
1873 NdisBuffer->Next = NULL; \
1875 if ((Packet)->Private.Head != NULL) \
1876 (Packet)->Private.Tail->Next = (Buffer); \
1878 (Packet)->Private.Head = (Buffer); \
1880 (Packet)->Private.Tail = NdisBuffer; \
1881 (Packet)->Private.ValidCounts = FALSE; \
1887 * NdisChainBufferAtFront(
1888 * IN OUT PNDIS_PACKET Packet,
1889 * IN OUT PNDIS_BUFFER Buffer)
1891 #define NdisChainBufferAtFront(Packet, \
1894 PNDIS_BUFFER _NdisBuffer = (Buffer); \
1896 while (_NdisBuffer->Next != NULL) \
1897 _NdisBuffer = _NdisBuffer->Next; \
1899 if ((Packet)->Private.Head == NULL) \
1900 (Packet)->Private.Tail = _NdisBuffer; \
1902 _NdisBuffer->Next = (Packet)->Private.Head; \
1903 (Packet)->Private.Head = (Buffer); \
1904 (Packet)->Private.ValidCounts = FALSE; \
1910 * NdisGetNextBuffer(
1911 * IN PNDIS_BUFFER CurrentBuffer,
1912 * OUT PNDIS_BUFFER * NextBuffer)
1914 #define NdisGetNextBuffer(CurrentBuffer, \
1917 *(NextBuffer) = (CurrentBuffer)->Next; \
1923 * NdisGetPacketFlags(
1924 * IN PNDIS_PACKET Packet);
1926 #define NdisGetPacketFlags(Packet)(Packet)->Private.Flags;
1931 * NdisClearPacketFlags(
1932 * IN PNDIS_PACKET Packet,
1935 #define NdisClearPacketFlags(Packet, Flags) \
1936 (Packet)->Private.Flags &= ~(Flags)
1941 * NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(
1942 * IN PNDIS_PACKET Packet,
1943 * IN PPVOID pMediaSpecificInfo,
1944 * IN PUINT pSizeMediaSpecificInfo);
1946 #define NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \
1947 _pMediaSpecificInfo, \
1948 _pSizeMediaSpecificInfo) \
1950 if (!((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) || \
1951 !((_Packet)->Private.NdisPacketFlags & fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO)) \
1953 *(_pMediaSpecificInfo) = NULL; \
1954 *(_pSizeMediaSpecificInfo) = 0; \
1958 *(_pMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1959 (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation; \
1960 *(_pSizeMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1961 (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo; \
1968 * NDIS_GET_PACKET_PROTOCOL_TYPE(
1969 * IN PNDIS_PACKET Packet);
1971 #define NDIS_GET_PACKET_PROTOCOL_TYPE(_Packet) \
1972 ((_Packet)->Private.Flags & NDIS_PROTOCOL_ID_MASK)
1976 * NDIS_GET_PACKET_HEADER_SIZE(
1977 * IN PNDIS_PACKET Packet);
1979 #define NDIS_GET_PACKET_HEADER_SIZE(_Packet) \
1980 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1981 (_Packet)->Private.NdisPacketOobOffset))->HeaderSize
1986 * NDIS_GET_PACKET_STATUS(
1987 * IN PNDIS_PACKET Packet);
1989 #define NDIS_GET_PACKET_STATUS(_Packet) \
1990 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
1991 (_Packet)->Private.NdisPacketOobOffset))->Status
1996 * NDIS_GET_PACKET_TIME_RECEIVED(
1997 * IN PNDIS_PACKET Packet);
1999 #define NDIS_GET_PACKET_TIME_RECEIVED(_Packet) \
2000 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2001 (_Packet)->Private.NdisPacketOobOffset))->TimeReceived
2006 * NDIS_GET_PACKET_TIME_SENT(
2007 * IN PNDIS_PACKET Packet);
2009 #define NDIS_GET_PACKET_TIME_SENT(_Packet) \
2010 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2011 (_Packet)->Private.NdisPacketOobOffset))->TimeSent
2016 * NDIS_GET_PACKET_TIME_TO_SEND(
2017 * IN PNDIS_PACKET Packet);
2019 #define NDIS_GET_PACKET_TIME_TO_SEND(_Packet) \
2020 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2021 (_Packet)->Private.NdisPacketOobOffset))->TimeToSend
2025 * PNDIS_PACKET_OOB_DATA
2026 * NDIS_OOB_DATA_FROM_PACKET(
2027 * IN PNDIS_PACKET Packet);
2029 #define NDIS_OOB_DATA_FROM_PACKET(_Packet) \
2030 (PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2031 (_Packet)->Private.NdisPacketOobOffset)
2037 * IN PNDIS_PACKET Packet,
2038 * OUT PUINT PhysicalBufferCount OPTIONAL,
2039 * OUT PUINT BufferCount OPTIONAL,
2040 * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
2041 * OUT PUINT TotalPacketLength OPTIONAL);
2043 #define NdisQueryPacket(Packet, \
2044 PhysicalBufferCount, \
2047 TotalPacketLength) \
2050 *((PNDIS_BUFFER*)FirstBuffer) = (Packet)->Private.Head; \
2051 if ((TotalPacketLength) || (BufferCount) || (PhysicalBufferCount)) \
2053 if (!(Packet)->Private.ValidCounts) { \
2055 UINT _PacketLength; \
2056 PNDIS_BUFFER _NdisBuffer; \
2057 UINT _PhysicalBufferCount = 0; \
2058 UINT _TotalPacketLength = 0; \
2061 for (_NdisBuffer = (Packet)->Private.Head; \
2062 _NdisBuffer != (PNDIS_BUFFER)NULL; \
2063 _NdisBuffer = _NdisBuffer->Next) \
2065 _PhysicalBufferCount += NDIS_BUFFER_TO_SPAN_PAGES(_NdisBuffer); \
2066 NdisQueryBufferOffset(_NdisBuffer, &_Offset, &_PacketLength); \
2067 _TotalPacketLength += _PacketLength; \
2070 (Packet)->Private.PhysicalCount = _PhysicalBufferCount; \
2071 (Packet)->Private.TotalLength = _TotalPacketLength; \
2072 (Packet)->Private.Count = _Count; \
2073 (Packet)->Private.ValidCounts = TRUE; \
2076 if (PhysicalBufferCount) \
2077 *((PUINT)PhysicalBufferCount) = (Packet)->Private.PhysicalCount; \
2080 *((PUINT)BufferCount) = (Packet)->Private.Count; \
2082 if (TotalPacketLength) \
2083 *((PUINT)TotalPacketLength) = (Packet)->Private.TotalLength; \
2089 * NdisQueryPacketLength(
2090 * IN PNDIS_PACKET Packet,
2091 * OUT PUINT PhysicalBufferCount OPTIONAL,
2092 * OUT PUINT BufferCount OPTIONAL,
2093 * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
2094 * OUT PUINT TotalPacketLength OPTIONAL);
2096 #define NdisQueryPacketLength(Packet, \
2097 TotalPacketLength) \
2099 if ((TotalPacketLength)) \
2101 if (!(Packet)->Private.ValidCounts) { \
2103 UINT _PacketLength; \
2104 PNDIS_BUFFER _NdisBuffer; \
2105 UINT _PhysicalBufferCount = 0; \
2106 UINT _TotalPacketLength = 0; \
2109 for (_NdisBuffer = (Packet)->Private.Head; \
2110 _NdisBuffer != (PNDIS_BUFFER)NULL; \
2111 _NdisBuffer = _NdisBuffer->Next) \
2113 _PhysicalBufferCount += NDIS_BUFFER_TO_SPAN_PAGES(_NdisBuffer); \
2114 NdisQueryBufferOffset(_NdisBuffer, &_Offset, &_PacketLength); \
2115 _TotalPacketLength += _PacketLength; \
2118 (Packet)->Private.PhysicalCount = _PhysicalBufferCount; \
2119 (Packet)->Private.TotalLength = _TotalPacketLength; \
2120 (Packet)->Private.Count = _Count; \
2121 (Packet)->Private.ValidCounts = TRUE; \
2124 if (TotalPacketLength) \
2125 *((PUINT)TotalPacketLength) = (Packet)->Private.TotalLength; \
2132 * NdisRecalculatePacketCounts(
2133 * IN OUT PNDIS_PACKET Packet);
2135 #define NdisRecalculatePacketCounts(Packet) \
2137 PNDIS_BUFFER _Buffer = (Packet)->Private.Head; \
2138 if (_Buffer != NULL) \
2140 while (_Buffer->Next != NULL) \
2142 ´_Buffer = _Buffer->Next; \
2144 (Packet)->Private.Tail = _Buffer; \
2146 (Packet)->Private.ValidCounts = FALSE; \
2152 * NdisReinitializePacket(
2153 * IN OUT PNDIS_PACKET Packet);
2155 #define NdisReinitializePacket(Packet) \
2157 (Packet)->Private.Head = (PNDIS_BUFFER)NULL; \
2158 (Packet)->Private.ValidCounts = FALSE; \
2164 * NdisSetPacketFlags(
2165 * IN PNDIS_PACKET Packet,
2168 #define NdisSetPacketFlags(Packet, Flags) \
2169 (Packet)->Private.Flags |= (Flags);
2174 * NDIS_SET_PACKET_HEADER_SIZE(
2175 * IN PNDIS_PACKET Packet,
2178 #define NDIS_SET_PACKET_HEADER_SIZE(_Packet, _HdrSize) \
2179 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2180 (_Packet)->Private.NdisPacketOobOffset))->HeaderSize = (_HdrSize)
2185 * NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(
2186 * IN PNDIS_PACKET Packet,
2187 * IN PVOID MediaSpecificInfo,
2188 * IN UINT SizeMediaSpecificInfo);
2190 #define NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \
2191 _MediaSpecificInfo, \
2192 _SizeMediaSpecificInfo) \
2194 if ((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) \
2196 (_Packet)->Private.NdisPacketFlags |= fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO; \
2197 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2198 (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation = \
2199 (_MediaSpecificInfo); \
2200 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2201 (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo = \
2202 (_SizeMediaSpecificInfo); \
2209 * NDIS_SET_PACKET_STATUS(
2210 * IN PNDIS_PACKET Packet,
2211 * IN NDIS_STATUS Status);
2213 #define NDIS_SET_PACKET_STATUS(_Packet, _Status) \
2214 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2215 (_Packet)->Private.NdisPacketOobOffset))->Status = (_Status)
2220 * NDIS_SET_PACKET_TIME_RECEIVED(
2221 * IN PNDIS_PACKET Packet,
2222 * IN ULONGLONG TimeReceived);
2224 #define NDIS_SET_PACKET_TIME_RECEIVED(_Packet, _TimeReceived) \
2225 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2226 (_Packet)->Private.NdisPacketOobOffset))->TimeReceived = (_TimeReceived)
2231 * NDIS_SET_PACKET_TIME_SENT(
2232 * IN PNDIS_PACKET Packet,
2233 * IN ULONGLONG TimeSent);
2235 #define NDIS_SET_PACKET_TIME_SENT(_Packet, _TimeSent) \
2236 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2237 (_Packet)->Private.NdisPacketOobOffset))->TimeSent = (_TimeSent)
2242 * NDIS_SET_PACKET_TIME_TO_SEND(
2243 * IN PNDIS_PACKET Packet,
2244 * IN ULONGLONG TimeToSend);
2246 #define NDIS_SET_PACKET_TIME_TO_SEND(_Packet, _TimeToSend) \
2247 ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
2248 (_Packet)->Private.NdisPacketOobOffset))->TimeToSend = (_TimeToSend)
2254 * IN PNDIS_PACKET Packet,
2257 #define NdisSetSendFlags(_Packet,_Flags)(_Packet)->Private.Flags = (_Flags)
2261 /* Memory management routines */
2265 * NdisCreateLookaheadBufferFromSharedMemory(
2266 * IN PVOID pSharedMemory,
2267 * IN UINT LookaheadLength,
2268 * OUT PVOID *pLookaheadBuffer)
2270 #define NdisCreateLookaheadBufferFromSharedMemory(_pSharedMemory, \
2272 _pLookaheadBuffer) \
2273 ((*(_pLookaheadBuffer)) = (_pSharedMemory))
2277 * NdisDestroyLookaheadBufferFromSharedMemory(
2278 * IN PVOID pLookaheadBuffer)
2280 #define NdisDestroyLookaheadBufferFromSharedMemory(_pLookaheadBuffer)
2286 * NdisMoveFromMappedMemory(
2287 * OUT PVOID Destination,
2291 #define NdisMoveFromMappedMemory(Destination, Source, Length) \
2292 NdisMoveMappedMemory(Destination, Source, Length)
2296 * NdisMoveMappedMemory(
2297 * OUT PVOID Destination,
2301 #define NdisMoveMappedMemory(Destination, Source, Length) \
2302 RtlCopyMemory(Destination, Source, Length)
2306 * NdisMoveToMappedMemory(
2307 * OUT PVOID Destination,
2311 #define NdisMoveToMappedMemory(Destination, Source, Length) \
2312 NdisMoveMappedMemory(Destination, Source, Length)
2318 * NdisMUpdateSharedMemory(
2319 * IN NDIS_HANDLE MiniportAdapterHandle,
2321 * IN PVOID VirtualAddress,
2322 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2324 #define NdisMUpdateSharedMemory(_H, _L, _V, _P) \
2325 NdisUpdateSharedMemory(_H, _L, _V, _P)
2331 /*OUT*/ PVOID *VirtualAddress,
2333 /*IN*/ UINT MemoryFlags,
2334 /*IN*/ NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress);
2340 /*IN*/ PVOID VirtualAddress,
2342 /*IN*/ UINT MemoryFlags);
2347 NdisImmediateReadSharedMemory(
2348 /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
2349 /*IN*/ ULONG SharedMemoryAddress,
2350 /*OUT*/ PUCHAR Buffer,
2351 /*IN*/ ULONG Length);
2356 NdisImmediateWriteSharedMemory(
2357 /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
2358 /*IN*/ ULONG SharedMemoryAddress,
2359 /*IN*/ PUCHAR Buffer,
2360 /*IN*/ ULONG Length);
2365 NdisMAllocateSharedMemory(
2366 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
2367 /*IN*/ ULONG Length,
2368 /*IN*/ BOOLEAN Cached,
2369 /*OUT*/ PVOID *VirtualAddress,
2370 /*OUT*/ PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
2375 NdisMAllocateSharedMemoryAsync(
2376 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
2377 /*IN*/ ULONG Length,
2378 /*IN*/ BOOLEAN Cached,
2379 /*IN*/ PVOID Context);
2383 #define NdisUpdateSharedMemory(NdisAdapterHandle, \
2393 NdisUpdateSharedMemory(
2394 /*IN*/ NDIS_HANDLE NdisAdapterHandle,
2395 /*IN*/ ULONG Length,
2396 /*IN*/ PVOID VirtualAddress,
2397 /*IN*/ NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2399 #endif /* defined(NDIS50) */
2403 * NdisGetPhysicalAddressHigh(
2404 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2406 #define NdisGetPhysicalAddressHigh(PhysicalAddress) \
2407 ((PhysicalAddress).HighPart)
2411 * NdisSetPhysicalAddressHigh(
2412 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
2415 #define NdisSetPhysicalAddressHigh(PhysicalAddress, Value) \
2416 ((PhysicalAddress).HighPart) = (Value)
2420 * NdisGetPhysicalAddressLow(
2421 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2423 #define NdisGetPhysicalAddressLow(PhysicalAddress) \
2424 ((PhysicalAddress).LowPart)
2429 * NdisSetPhysicalAddressLow(
2430 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
2433 #define NdisSetPhysicalAddressLow(PhysicalAddress, Value) \
2434 ((PhysicalAddress).LowPart) = (Value)
2438 * NDIS_PHYSICAL_ADDRESS_CONST(
2442 #define NDIS_PHYSICAL_ADDRESS_CONST(Low, High) \
2443 { {(ULONG)(Low), (LONG)(High)} }
2448 * IN CONST VOID *Source1,
2449 * IN CONST VOID *Source2,
2452 #define NdisEqualMemory(Source1, Source2, Length) \
2453 RtlEqualMemory(Source1, Source2, Length)
2458 * IN PVOID Destination,
2462 #define NdisFillMemory(Destination, Length, Fill) \
2463 RtlFillMemory(Destination, Length, Fill)
2467 * NdisZeroMappedMemory(
2468 * IN PVOID Destination,
2471 #define NdisZeroMappedMemory(Destination, Length) \
2472 RtlZeroMemory(Destination, Length)
2477 * OUT PVOID Destination,
2481 #define NdisMoveMemory(Destination, Source, Length) \
2482 RtlCopyMemory(Destination, Source, Length)
2487 * NdisRetrieveUlong(
2488 * IN PULONG DestinationAddress,
2489 * IN PULONG SourceAddress);
2491 #define NdisRetrieveUlong(DestinationAddress, SourceAddress) \
2492 RtlRetrieveUlong(DestinationAddress, SourceAddress)
2498 * IN PULONG DestinationAddress,
2501 #define NdisStoreUlong(DestinationAddress, Value) \
2502 RtlStoreUlong(DestinationAddress, Value)
2508 * IN PVOID Destination,
2511 #define NdisZeroMemory(Destination, Length) \
2512 RtlZeroMemory(Destination, Length)
2516 /* Configuration routines */
2521 NdisOpenConfiguration(
2522 /*OUT*/ PNDIS_STATUS Status,
2523 /*OUT*/ PNDIS_HANDLE ConfigurationHandle,
2524 /*IN*/ NDIS_HANDLE WrapperConfigurationContext);
2529 NdisReadNetworkAddress(
2530 /*OUT*/ PNDIS_STATUS Status,
2531 /*OUT*/ PVOID *NetworkAddress,
2532 /*OUT*/ PUINT NetworkAddressLength,
2533 /*IN*/ NDIS_HANDLE ConfigurationHandle);
2538 NdisReadEisaSlotInformation(
2539 /*OUT*/ PNDIS_STATUS Status,
2540 /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
2541 /*OUT*/ PUINT SlotNumber,
2542 /*OUT*/ PNDIS_EISA_FUNCTION_INFORMATION EisaData);
2547 NdisReadEisaSlotInformationEx(
2548 /*OUT*/ PNDIS_STATUS Status,
2549 /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
2550 /*OUT*/ PUINT SlotNumber,
2551 /*OUT*/ PNDIS_EISA_FUNCTION_INFORMATION *EisaData,
2552 /*OUT*/ PUINT NumberOfFunctions);
2557 NdisReadPciSlotInformation(
2558 /*IN*/ NDIS_HANDLE NdisAdapterHandle,
2559 /*IN*/ ULONG SlotNumber,
2560 /*IN*/ ULONG Offset,
2561 /*IN*/ PVOID Buffer,
2562 /*IN*/ ULONG Length);
2567 NdisWritePciSlotInformation(
2568 /*IN*/ NDIS_HANDLE NdisAdapterHandle,
2569 /*IN*/ ULONG SlotNumber,
2570 /*IN*/ ULONG Offset,
2571 /*IN*/ PVOID Buffer,
2572 /*IN*/ ULONG Length);
2576 /* String management routines */
2581 NdisAnsiStringToUnicodeString(
2582 /*IN OUT*/ PNDIS_STRING DestinationString,
2583 /*IN*/ PNDIS_ANSI_STRING SourceString);
2588 * IN PNDIS_STRING String1,
2589 * IN PNDIS_STRING String2,
2590 * IN BOOLEAN CaseInsensitive);
2592 #define NdisEqualString(_String1, _String2, _CaseInsensitive) \
2593 RtlEqualUnicodeString(_String1, _String2, _CaseInsensitive)
2599 /*IN OUT*/ PNDIS_ANSI_STRING DestinationString,
2600 /*IN*/ PCSTR SourceString);
2605 NdisInitUnicodeString(
2606 /*IN OUT*/ PNDIS_STRING DestinationString,
2607 /*IN*/ PCWSTR SourceString);
2612 NdisUnicodeStringToAnsiString(
2613 /*IN OUT*/ PNDIS_ANSI_STRING DestinationString,
2614 /*IN*/ PNDIS_STRING SourceString);
2616 #define NdisFreeString(_s) NdisFreeMemory((_s).Buffer, (_s).MaximumLength, 0)
2617 #define NdisPrintString(_s) DbgPrint("%ls", (_s).Buffer)
2620 /* Spin lock reoutines */
2624 * NdisAllocateSpinLock(
2625 * IN PNDIS_SPIN_LOCK SpinLock);
2627 #define NdisAllocateSpinLock(_SpinLock) \
2628 KeInitializeSpinLock(&(_SpinLock)->SpinLock)
2633 * IN PNDIS_SPIN_LOCK SpinLock);
2635 #define NdisFreeSpinLock(_SpinLock)
2639 * NdisAcquireSpinLock(
2640 * IN PNDIS_SPIN_LOCK SpinLock);
2642 #define NdisAcquireSpinLock(_SpinLock) \
2643 KeAcquireSpinLock(&(_SpinLock)->SpinLock, &(_SpinLock)->OldIrql)
2647 * NdisReleaseSpinLock(
2648 * IN PNDIS_SPIN_LOCK SpinLock);
2650 #define NdisReleaseSpinLock(_SpinLock) \
2651 KeReleaseSpinLock(&(_SpinLock)->SpinLock, (_SpinLock)->OldIrql)
2655 * NdisDprAcquireSpinLock(
2656 * IN PNDIS_SPIN_LOCK SpinLock);
2658 #define NdisDprAcquireSpinLock(_SpinLock) \
2660 KeAcquireSpinLockAtDpcLevel(&(_SpinLock)->SpinLock); \
2661 (_SpinLock)->OldIrql = DISPATCH_LEVEL; \
2666 * NdisDprReleaseSpinLock(
2667 * IN PNDIS_SPIN_LOCK SpinLock);
2669 #define NdisDprReleaseSpinLock(_SpinLock) \
2670 KeReleaseSpinLockFromDpcLevel(&(_SpinLock)->SpinLock)
2678 * NdisRawReadPortBufferUchar(
2680 * OUT PUCHAR Buffer,
2683 #define NdisRawReadPortBufferUchar(Port, Buffer, Length) \
2684 READ_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
2688 * NdisRawReadPortBufferUlong(
2690 * OUT PULONG Buffer,
2693 #define NdisRawReadPortBufferUlong(Port, Buffer, Length) \
2694 READ_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
2698 * NdisRawReadPortBufferUshort(
2700 * OUT PUSHORT Buffer,
2703 #define NdisRawReadPortBufferUshort(Port, Buffer, Length) \
2704 READ_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
2709 * NdisRawReadPortUchar(
2713 #define NdisRawReadPortUchar(Port, Data) \
2714 *(Data) = READ_PORT_UCHAR((PUCHAR)(Port))
2718 * NdisRawReadPortUlong(
2722 #define NdisRawReadPortUlong(Port, Data) \
2723 *(Data) = READ_PORT_ULONG((PULONG)(Port))
2727 * NdisRawReadPortUshort(
2729 * OUT PUSHORT Data);
2731 #define NdisRawReadPortUshort(Port, Data) \
2732 *(Data) = READ_PORT_USHORT((PUSHORT)(Port))
2737 * NdisRawWritePortBufferUchar(
2742 #define NdisRawWritePortBufferUchar(Port, Buffer, Length) \
2743 WRITE_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
2747 * NdisRawWritePortBufferUlong(
2752 #define NdisRawWritePortBufferUlong(Port, Buffer, Length) \
2753 WRITE_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
2757 * NdisRawWritePortBufferUshort(
2759 * IN PUSHORT Buffer,
2762 #define NdisRawWritePortBufferUshort(Port, Buffer, Length) \
2763 WRITE_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
2768 * NdisRawWritePortUchar(
2772 #define NdisRawWritePortUchar(Port, Data) \
2773 WRITE_PORT_UCHAR((PUCHAR)(Port), (UCHAR)(Data))
2777 * NdisRawWritePortUlong(
2781 #define NdisRawWritePortUlong(Port, Data) \
2782 WRITE_PORT_ULONG((PULONG)(Port), (ULONG)(Data))
2786 * NdisRawWritePortUshort(
2790 #define NdisRawWritePortUshort(Port, Data) \
2791 WRITE_PORT_USHORT((PUSHORT)(Port), (USHORT)(Data))
2796 * NdisReadRegisterUchar(
2797 * IN PUCHAR Register,
2800 #define NdisReadRegisterUchar(Register, Data) \
2801 *(Data) = *(Register)
2805 * NdisReadRegisterUlong(
2806 * IN PULONG Register,
2809 #define NdisReadRegisterUlong(Register, Data) \
2810 *(Data) = *(Register)
2814 * NdisReadRegisterUshort(
2815 * IN PUSHORT Register,
2816 * OUT PUSHORT Data);
2818 #define NdisReadRegisterUshort(Register, Data) \
2819 *(Data) = *(Register)
2823 * NdisReadRegisterUchar(
2824 * IN PUCHAR Register,
2827 #define NdisWriteRegisterUchar(Register, Data) \
2828 WRITE_REGISTER_UCHAR((Register), (Data))
2832 * NdisReadRegisterUlong(
2833 * IN PULONG Register,
2836 #define NdisWriteRegisterUlong(Register, Data) \
2837 WRITE_REGISTER_ULONG((Register), (Data))
2841 * NdisReadRegisterUshort(
2842 * IN PUSHORT Register,
2845 #define NdisWriteRegisterUshort(Register, Data) \
2846 WRITE_REGISTER_USHORT((Register), (Data))
2853 * NdisInitializeListHead(
2854 * IN PLIST_ENTRY ListHead);
2856 #define NdisInitializeListHead(_ListHead) \
2857 InitializeListHead(_ListHead)
2861 * NdisInterlockedInsertHeadList(
2862 * IN PLIST_ENTRY ListHead,
2863 * IN PLIST_ENTRY ListEntry,
2864 * IN PNDIS_SPIN_LOCK SpinLock);
2866 #define NdisInterlockedInsertHeadList(_ListHead, _ListEntry, _SpinLock) \
2867 ExInterlockedInsertHeadList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
2871 * NdisInterlockedInsertTailList(
2872 * IN PLIST_ENTRY ListHead,
2873 * IN PLIST_ENTRY ListEntry,
2874 * IN PNDIS_SPIN_LOCK SpinLock);
2876 #define NdisInterlockedInsertTailList(_ListHead, _ListEntry, _SpinLock) \
2877 ExInterlockedInsertTailList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
2881 * NdisInterlockedRemoveHeadList(
2882 * IN PLIST_ENTRY ListHead,
2883 * IN PNDIS_SPIN_LOCK SpinLock);
2885 #define NdisInterlockedRemoveHeadList(_ListHead, _SpinLock) \
2886 ExInterlockedRemoveHeadList(_ListHead, &(_SpinLock)->SpinLock)
2890 * NdisInitializeSListHead(
2891 * IN PSLIST_HEADER SListHead);
2893 #define NdisInitializeSListHead(SListHead) ExInitializeSListHead(SListHead)
2896 * USHORT NdisQueryDepthSList(
2897 * IN PSLIST_HEADER SListHead);
2899 #define NdisQueryDepthSList(SListHead) ExQueryDepthSList(SListHead)
2903 /* Interlocked routines */
2907 * NdisInterlockedDecrement(
2910 #define NdisInterlockedDecrement(Addend) InterlockedDecrement(Addend)
2914 * NdisInterlockedIncrement(
2917 #define NdisInterlockedIncrement(Addend) InterlockedIncrement(Addend)
2921 * NdisInterlockedAddUlong(
2923 * IN ULONG Increment,
2924 * IN PNDIS_SPIN_LOCK SpinLock);
2926 #define NdisInterlockedAddUlong(_Addend, _Increment, _SpinLock) \
2927 ExInterlockedAddUlong(_Addend, _Increment, &(_SpinLock)->SpinLock)
2931 /* Miscellaneous routines */
2936 NdisCloseConfiguration(
2937 /*IN*/ NDIS_HANDLE ConfigurationHandle);
2942 NdisReadConfiguration(
2943 /*OUT*/ PNDIS_STATUS Status,
2944 /*OUT*/ PNDIS_CONFIGURATION_PARAMETER *ParameterValue,
2945 /*IN*/ NDIS_HANDLE ConfigurationHandle,
2946 /*IN*/ PNDIS_STRING Keyword,
2947 /*IN*/ NDIS_PARAMETER_TYPE ParameterType);
2952 NdisWriteConfiguration(
2953 /*OUT*/ PNDIS_STATUS Status,
2954 /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
2955 /*IN*/ PNDIS_STRING Keyword,
2956 /*IN*/ PNDIS_CONFIGURATION_PARAMETER *ParameterValue);
2961 NdisWriteErrorLogEntry(
2962 /*IN*/ NDIS_HANDLE NdisAdapterHandle,
2963 /*IN*/ NDIS_ERROR_CODE ErrorCode,
2964 /*IN*/ ULONG NumberOfErrorValues,
2969 * NdisStallExecution(
2970 * IN UINT MicrosecondsToStall)
2972 #define NdisStallExecution KeStallExecutionProcessor
2976 * NdisGetCurrentSystemTime(
2977 * IN PLARGE_INTEGER pSystemTime);
2979 #define NdisGetCurrentSystemTime KeQuerySystemTime
2984 NdisGetCurrentProcessorCpuUsage(
2985 /*OUT*/ PULONG pCpuUsage);
2989 /* NDIS helper macros */
2993 * NDIS_INIT_FUNCTION(FunctionName)
2995 #define NDIS_INIT_FUNCTION(FunctionName) \
2996 alloc_text(init, FunctionName)
3000 * NDIS_PAGABLE_FUNCTION(FunctionName)
3002 #define NDIS_PAGEABLE_FUNCTION(FunctionName) \
3003 alloc_text(page, FunctionName)
3005 #define NDIS_PAGABLE_FUNCTION NDIS_PAGEABLE_FUNCTION
3008 /* NDIS 4.0 extensions */
3013 NdisMFreeSharedMemory(
3014 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
3015 /*IN*/ ULONG Length,
3016 /*IN*/ BOOLEAN Cached,
3017 /*IN*/ PVOID VirtualAddress,
3018 /*IN*/ NDIS_PHYSICAL_ADDRESS PhysicalAddress);
3023 NdisMWanIndicateReceive(
3024 /*OUT*/ PNDIS_STATUS Status,
3025 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
3026 /*IN*/ NDIS_HANDLE NdisLinkContext,
3027 /*IN*/ PUCHAR PacketBuffer,
3028 /*IN*/ UINT PacketSize);
3030 #define NdisMIndicateReceivePacket(_handle, _packets, _number) \
3032 (*((PNDIS_MINIPORT_BLOCK)(_handle))->PacketIndicateHandler)(_handle, _packets, _number); \
3038 NdisMWanIndicateReceiveComplete(
3039 /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
3044 NdisMWanSendComplete(
3045 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
3046 /*IN*/ PNDIS_WAN_PACKET Packet,
3047 /*IN*/ NDIS_STATUS Status);
3052 NdisPciAssignResources(
3053 /*IN*/ NDIS_HANDLE NdisMacHandle,
3054 /*IN*/ NDIS_HANDLE NdisWrapperHandle,
3055 /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
3056 /*IN*/ ULONG SlotNumber,
3057 /*OUT*/ PNDIS_RESOURCE_LIST *AssignedResources);
3060 /* NDIS 5.0 extensions */
3065 NdisAcquireReadWriteLock(
3066 /*IN*/ PNDIS_RW_LOCK Lock,
3067 /*IN*/ BOOLEAN fWrite,
3068 /*IN*/ PLOCK_STATE LockState);
3073 NdisAllocateMemoryWithTag(
3074 /*OUT*/ PVOID *VirtualAddress,
3081 NdisAllocatePacketPoolEx(
3082 /*OUT*/ PNDIS_STATUS Status,
3083 /*OUT*/ PNDIS_HANDLE PoolHandle,
3084 /*IN*/ UINT NumberOfDescriptors,
3085 /*IN*/ UINT NumberOfOverflowDescriptors,
3086 /*IN*/ UINT ProtocolReservedLength);
3091 NdisCompletePnPEvent(
3092 /*IN*/ NDIS_STATUS Status,
3093 /*IN*/ NDIS_HANDLE NdisBindingHandle,
3094 /*IN*/ PNET_PNP_EVENT NetPnPEvent);
3099 NdisGetCurrentProcessorCounts(
3100 /*OUT*/ PULONG pIdleCount,
3101 /*OUT*/ PULONG pKernelAndUser,
3102 /*OUT*/ PULONG pIndex);
3107 NdisGetDriverHandle(
3108 /*IN*/ PNDIS_HANDLE NdisBindingHandle,
3109 /*OUT*/ PNDIS_HANDLE NdisDriverHandle);
3114 NdisGetReceivedPacket(
3115 /*IN*/ PNDIS_HANDLE NdisBindingHandle,
3116 /*IN*/ PNDIS_HANDLE MacContext);
3121 NdisGetSystemUptime(
3122 /*OUT*/ PULONG pSystemUpTime);
3127 NdisInitializeReadWriteLock(
3128 /*IN*/ PNDIS_RW_LOCK Lock);
3133 NdisMDeregisterDevice(
3134 /*IN*/ NDIS_HANDLE NdisDeviceHandle);
3139 NdisMGetDeviceProperty(
3140 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
3141 /*IN OUT*/ PDEVICE_OBJECT *PhysicalDeviceObject /*OPTIONAL*/,
3142 /*IN OUT*/ PDEVICE_OBJECT *FunctionalDeviceObject /*OPTIONAL*/,
3143 /*IN OUT*/ PDEVICE_OBJECT *NextDeviceObject /*OPTIONAL*/,
3144 /*IN OUT*/ PCM_RESOURCE_LIST *AllocatedResources /*OPTIONAL*/,
3145 /*IN OUT*/ PCM_RESOURCE_LIST *AllocatedResourcesTranslated /*OPTIONAL*/);
3150 NdisMInitializeScatterGatherDma(
3151 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
3152 /*IN*/ BOOLEAN Dma64BitAddresses,
3153 /*IN*/ ULONG MaximumPhysicalMapping);
3158 NdisMPromoteMiniport(
3159 /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
3164 NdisMQueryAdapterInstanceName(
3165 /*OUT*/ PNDIS_STRING AdapterInstanceName,
3166 /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
3171 NdisMRegisterDevice(
3172 /*IN*/ NDIS_HANDLE NdisWrapperHandle,
3173 /*IN*/ PNDIS_STRING DeviceName,
3174 /*IN*/ PNDIS_STRING SymbolicName,
3175 /*IN*/ PDRIVER_DISPATCH MajorFunctions[],
3176 /*OUT*/ PDEVICE_OBJECT *pDeviceObject,
3177 /*OUT*/ NDIS_HANDLE *NdisDeviceHandle);
3182 NdisMRegisterUnloadHandler(
3183 /*IN*/ NDIS_HANDLE NdisWrapperHandle,
3184 /*IN*/ PDRIVER_UNLOAD UnloadHandler);
3189 NdisMRemoveMiniport(
3190 /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
3195 NdisMSetMiniportSecondary(
3196 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
3197 /*IN*/ NDIS_HANDLE PrimaryMiniportAdapterHandle);
3202 NdisOpenConfigurationKeyByIndex(
3203 /*OUT*/ PNDIS_STATUS Status,
3204 /*IN*/ NDIS_HANDLE ConfigurationHandle,
3206 /*OUT*/ PNDIS_STRING KeyName,
3207 /*OUT*/ PNDIS_HANDLE KeyHandle);
3212 NdisOpenConfigurationKeyByName(
3213 /*OUT*/ PNDIS_STATUS Status,
3214 /*IN*/ NDIS_HANDLE ConfigurationHandle,
3215 /*IN*/ PNDIS_STRING SubKeyName,
3216 /*OUT*/ PNDIS_HANDLE SubKeyHandle);
3221 NdisPacketPoolUsage(
3222 /*IN*/ NDIS_HANDLE PoolHandle);
3227 NdisSetPacketPoolProtocolId(
3228 /*IN*/ NDIS_HANDLE PacketPoolHandle,
3229 /*IN*/ UINT ProtocolId);
3234 NdisQueryAdapterInstanceName(
3235 /*OUT*/ PNDIS_STRING AdapterInstanceName,
3236 /*IN*/ NDIS_HANDLE NdisBindingHandle);
3241 NdisReadPcmciaAttributeMemory(
3242 /*IN*/ NDIS_HANDLE NdisAdapterHandle,
3243 /*IN*/ ULONG Offset,
3244 /*IN*/ PVOID Buffer,
3245 /*IN*/ ULONG Length);
3250 NdisReleaseReadWriteLock(
3251 /*IN*/ PNDIS_RW_LOCK Lock,
3252 /*IN*/ PLOCK_STATE LockState);
3257 NdisWriteEventLogEntry(
3258 /*IN*/ PVOID LogHandle,
3259 /*IN*/ NDIS_STATUS EventCode,
3260 /*IN*/ ULONG UniqueEventValue,
3261 /*IN*/ USHORT NumStrings,
3262 /*IN*/ PVOID StringsList /*OPTIONAL*/,
3263 /*IN*/ ULONG DataSize,
3264 /*IN*/ PVOID Data /*OPTIONAL*/);
3269 NdisWritePcmciaAttributeMemory(
3270 /*IN*/ NDIS_HANDLE NdisAdapterHandle,
3271 /*IN*/ ULONG Offset,
3272 /*IN*/ PVOID Buffer,
3273 /*IN*/ ULONG Length);
3276 /* Connectionless services */
3282 /*IN*/ NDIS_HANDLE NdisVcHandle,
3283 /*IN*/ NDIS_HANDLE ProtocolPartyContext,
3284 /*IN OUT*/ PCO_CALL_PARAMETERS CallParameters,
3285 /*OUT*/ PNDIS_HANDLE NdisPartyHandle);
3290 NdisClCloseAddressFamily(
3291 /*IN*/ NDIS_HANDLE NdisAfHandle);
3297 /*IN*/ NDIS_HANDLE NdisVcHandle,
3298 /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/,
3299 /*IN*/ PVOID Buffer /*OPTIONAL*/,
3305 NdisClDeregisterSap(
3306 /*IN*/ NDIS_HANDLE NdisSapHandle);
3312 /*IN*/ NDIS_HANDLE NdisPartyHandle,
3313 /*IN*/ PVOID Buffer /*OPTIONAL*/,
3319 NdisClIncomingCallComplete(
3320 /*IN*/ NDIS_STATUS Status,
3321 /*IN*/ NDIS_HANDLE NdisVcHandle,
3322 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
3328 /*IN*/ NDIS_HANDLE NdisVcHandle,
3329 /*IN OUT*/ PCO_CALL_PARAMETERS CallParameters,
3330 /*IN*/ NDIS_HANDLE ProtocolPartyContext /*OPTIONAL*/,
3331 /*OUT*/ PNDIS_HANDLE NdisPartyHandle /*OPTIONAL*/);
3336 NdisClModifyCallQoS(
3337 /*IN*/ NDIS_HANDLE NdisVcHandle,
3338 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
3344 NdisClOpenAddressFamily(
3345 /*IN*/ NDIS_HANDLE NdisBindingHandle,
3346 /*IN*/ PCO_ADDRESS_FAMILY AddressFamily,
3347 /*IN*/ NDIS_HANDLE ProtocolAfContext,
3348 /*IN*/ PNDIS_CLIENT_CHARACTERISTICS ClCharacteristics,
3349 /*IN*/ UINT SizeOfClCharacteristics,
3350 /*OUT*/ PNDIS_HANDLE NdisAfHandle);
3356 /*IN*/ NDIS_HANDLE NdisAfHandle,
3357 /*IN*/ NDIS_HANDLE ProtocolSapContext,
3359 /*OUT*/ PNDIS_HANDLE NdisSapHandle);
3362 /* Call Manager services */
3368 /*IN*/ NDIS_HANDLE NdisVcHandle,
3369 /*IN OUT*/ PCO_CALL_PARAMETERS CallParameters);
3374 NdisCmAddPartyComplete(
3375 /*IN*/ NDIS_STATUS Status,
3376 /*IN*/ NDIS_HANDLE NdisPartyHandle,
3377 /*IN*/ NDIS_HANDLE CallMgrPartyContext /*OPTIONAL*/,
3378 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
3383 NdisCmCloseAddressFamilyComplete(
3384 /*IN*/ NDIS_STATUS Status,
3385 /*IN*/ NDIS_HANDLE NdisAfHandle);
3390 NdisCmCloseCallComplete(
3391 /*IN*/ NDIS_STATUS Status,
3392 /*IN*/ NDIS_HANDLE NdisVcHandle,
3393 /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/);
3399 /*IN*/ NDIS_HANDLE NdisVcHandle);
3404 NdisCmDeregisterSapComplete(
3405 /*IN*/ NDIS_STATUS Status,
3406 /*IN*/ NDIS_HANDLE NdisSapHandle);
3411 NdisCmDispatchCallConnected(
3412 /*IN*/ NDIS_HANDLE NdisVcHandle);
3417 NdisCmDispatchIncomingCall(
3418 /*IN*/ NDIS_HANDLE NdisSapHandle,
3419 /*IN*/ NDIS_HANDLE NdisVcHandle,
3420 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
3425 NdisCmDispatchIncomingCallQoSChange(
3426 /*IN*/ NDIS_HANDLE NdisVcHandle,
3427 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
3432 NdisCmDispatchIncomingCloseCall(
3433 /*IN*/ NDIS_STATUS CloseStatus,
3434 /*IN*/ NDIS_HANDLE NdisVcHandle,
3435 /*IN*/ PVOID Buffer /*OPTIONAL*/,
3441 NdisCmDispatchIncomingDropParty(
3442 /*IN*/ NDIS_STATUS DropStatus,
3443 /*IN*/ NDIS_HANDLE NdisPartyHandle,
3444 /*IN*/ PVOID Buffer /*OPTIONAL*/,
3450 NdisCmDropPartyComplete(
3451 /*IN*/ NDIS_STATUS Status,
3452 /*IN*/ NDIS_HANDLE NdisPartyHandle);
3457 NdisCmMakeCallComplete(
3458 /*IN*/ NDIS_STATUS Status,
3459 /*IN*/ NDIS_HANDLE NdisVcHandle,
3460 /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/,
3461 /*IN*/ NDIS_HANDLE CallMgrPartyContext /*OPTIONAL*/,
3462 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
3467 NdisCmModifyCallQoSComplete(
3468 /*IN*/ NDIS_STATUS Status,
3469 /*IN*/ NDIS_HANDLE NdisVcHandle,
3470 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
3475 NdisCmOpenAddressFamilyComplete(
3476 /*IN*/ NDIS_STATUS Status,
3477 /*IN*/ NDIS_HANDLE NdisAfHandle,
3478 /*IN*/ NDIS_HANDLE CallMgrAfContext);
3483 NdisCmRegisterAddressFamily(
3484 /*IN*/ NDIS_HANDLE NdisBindingHandle,
3485 /*IN*/ PCO_ADDRESS_FAMILY AddressFamily,
3486 /*IN*/ PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics,
3487 /*IN*/ UINT SizeOfCmCharacteristics);
3492 NdisCmRegisterSapComplete(
3493 /*IN*/ NDIS_STATUS Status,
3494 /*IN*/ NDIS_HANDLE NdisSapHandle,
3495 /*IN*/ NDIS_HANDLE CallMgrSapContext);
3502 /*IN*/ NDIS_HANDLE NdisVcHandle,
3503 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
3509 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
3510 /*IN*/ NDIS_HANDLE NdisAfHandle,
3511 /*IN*/ NDIS_HANDLE MiniportVcContext,
3512 /*OUT*/ PNDIS_HANDLE NdisVcHandle);
3517 NdisMCmDeactivateVc(
3518 /*IN*/ NDIS_HANDLE NdisVcHandle);
3524 /*IN*/ NDIS_HANDLE NdisVcHandle);
3529 NdisMCmRegisterAddressFamily(
3530 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
3531 /*IN*/ PCO_ADDRESS_FAMILY AddressFamily,
3532 /*IN*/ PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics,
3533 /*IN*/ UINT SizeOfCmCharacteristics);
3539 /*IN*/ NDIS_HANDLE NdisAfHandle,
3540 /*IN*/ NDIS_HANDLE NdisVcHandle /*OPTIONAL*/,
3541 /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/,
3542 /*IN OUT*/ PNDIS_REQUEST NdisRequest);
3545 /* Connection-oriented services */
3551 /*IN*/ NDIS_HANDLE NdisBindingHandle,
3552 /*IN*/ NDIS_HANDLE NdisAfHandle /*OPTIONAL*/,
3553 /*IN*/ NDIS_HANDLE ProtocolVcContext,
3554 /*IN OUT*/ PNDIS_HANDLE NdisVcHandle);
3560 /*IN*/ NDIS_HANDLE NdisVcHandle);
3566 /*IN*/ NDIS_HANDLE NdisBindingHandle,
3567 /*IN*/ NDIS_HANDLE NdisAfHandle /*OPTIONAL*/,
3568 /*IN*/ NDIS_HANDLE NdisVcHandle /*OPTIONAL*/,
3569 /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/,
3570 /*IN OUT*/ PNDIS_REQUEST NdisRequest);
3575 NdisCoRequestComplete(
3576 /*IN*/ NDIS_STATUS Status,
3577 /*IN*/ NDIS_HANDLE NdisAfHandle,
3578 /*IN*/ NDIS_HANDLE NdisVcHandle /*OPTIONAL*/,
3579 /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/,
3580 /*IN*/ PNDIS_REQUEST NdisRequest);
3586 /*IN*/ NDIS_HANDLE NdisVcHandle,
3587 /*IN*/ PPNDIS_PACKET PacketArray,
3588 /*IN*/ UINT NumberOfPackets);
3593 NdisMCoActivateVcComplete(
3594 /*IN*/ NDIS_STATUS Status,
3595 /*IN*/ NDIS_HANDLE NdisVcHandle,
3596 /*IN*/ PCO_CALL_PARAMETERS CallParameters);
3601 NdisMCoDeactivateVcComplete(
3602 /*IN*/ NDIS_STATUS Status,
3603 /*IN*/ NDIS_HANDLE NdisVcHandle);
3608 NdisMCoIndicateReceivePacket(
3609 /*IN*/ NDIS_HANDLE NdisVcHandle,
3610 /*IN*/ PPNDIS_PACKET PacketArray,
3611 /*IN*/ UINT NumberOfPackets);
3616 NdisMCoIndicateStatus(
3617 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
3618 /*IN*/ NDIS_HANDLE NdisVcHandle /*OPTIONAL*/,
3619 /*IN*/ NDIS_STATUS GeneralStatus,
3620 /*IN*/ PVOID StatusBuffer /*OPTIONAL*/,
3621 /*IN*/ ULONG StatusBufferSize);
3626 NdisMCoReceiveComplete(
3627 /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
3632 NdisMCoRequestComplete(
3633 /*IN*/ NDIS_STATUS Status,
3634 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
3635 /*IN*/ PNDIS_REQUEST Request);
3640 NdisMCoSendComplete(
3641 /*IN*/ NDIS_STATUS Status,
3642 /*IN*/ NDIS_HANDLE NdisVcHandle,
3643 /*IN*/ PNDIS_PACKET Packet);
3646 /* NDIS 5.0 extensions for intermediate drivers */
3651 NdisIMAssociateMiniport(
3652 /*IN*/ NDIS_HANDLE DriverHandle,
3653 /*IN*/ NDIS_HANDLE ProtocolHandle);
3658 NdisIMCancelInitializeDeviceInstance(
3659 /*IN*/ NDIS_HANDLE DriverHandle,
3660 /*IN*/ PNDIS_STRING DeviceInstance);
3665 NdisIMCopySendCompletePerPacketInfo(
3666 /*IN*/ PNDIS_PACKET DstPacket,
3667 /*IN*/ PNDIS_PACKET SrcPacket);
3672 NdisIMCopySendPerPacketInfo(
3673 /*IN*/ PNDIS_PACKET DstPacket,
3674 /*IN*/ PNDIS_PACKET SrcPacket);
3679 NdisIMDeregisterLayeredMiniport(
3680 /*IN*/ NDIS_HANDLE DriverHandle);
3685 NdisIMGetBindingContext(
3686 /*IN*/ NDIS_HANDLE NdisBindingHandle);
3691 NdisIMGetDeviceContext(
3692 /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
3697 NdisIMInitializeDeviceInstanceEx(
3698 /*IN*/ NDIS_HANDLE DriverHandle,
3699 /*IN*/ PNDIS_STRING DriverInstance,
3700 /*IN*/ NDIS_HANDLE DeviceContext /*OPTIONAL*/);
3705 NdisInterlockedPopEntrySList(
3706 /*IN*/ PSLIST_HEADER ListHead,
3707 /*IN*/ PKSPIN_LOCK Lock);
3712 NdisInterlockedPushEntrySList(
3713 /*IN*/ PSLIST_HEADER ListHead,
3714 /*IN*/ PSINGLE_LIST_ENTRY ListEntry,
3715 /*IN*/ PKSPIN_LOCK Lock);
3720 NdisQueryBufferSafe(
3721 /*IN*/ PNDIS_BUFFER Buffer,
3722 /*OUT*/ PVOID *VirtualAddress /*OPTIONAL*/,
3723 /*OUT*/ PUINT Length,
3724 /*IN*/ UINT Priority);
3727 /* Prototypes for NDIS_MINIPORT_CHARACTERISTICS */
3729 typedef BOOLEAN DDKAPI
3730 (*W_CHECK_FOR_HANG_HANDLER)(
3731 /*IN*/ NDIS_HANDLE MiniportAdapterContext);
3734 (*W_DISABLE_INTERRUPT_HANDLER)(
3735 /*IN*/ NDIS_HANDLE MiniportAdapterContext);
3738 (*W_ENABLE_INTERRUPT_HANDLER)(
3739 /*IN*/ NDIS_HANDLE MiniportAdapterContext);
3743 /*IN*/ NDIS_HANDLE MiniportAdapterContext);
3746 (*W_HANDLE_INTERRUPT_HANDLER)(
3747 /*IN*/ NDIS_HANDLE MiniportAdapterContext);
3749 typedef NDIS_STATUS DDKAPI
3750 (*W_INITIALIZE_HANDLER)(
3751 /*OUT*/ PNDIS_STATUS OpenErrorStatus,
3752 /*OUT*/ PUINT SelectedMediumIndex,
3753 /*IN*/ PNDIS_MEDIUM MediumArray,
3754 /*IN*/ UINT MediumArraySize,
3755 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
3756 /*IN*/ NDIS_HANDLE WrapperConfigurationContext);
3760 /*OUT*/ PBOOLEAN InterruptRecognized,
3761 /*OUT*/ PBOOLEAN QueueMiniportHandleInterrupt,
3762 /*IN*/ NDIS_HANDLE MiniportAdapterContext);
3764 typedef NDIS_STATUS DDKAPI
3765 (*W_QUERY_INFORMATION_HANDLER)(
3766 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
3767 /*IN*/ NDIS_OID Oid,
3768 /*IN*/ PVOID InformationBuffer,
3769 /*IN*/ ULONG InformationBufferLength,
3770 /*OUT*/ PULONG BytesWritten,
3771 /*OUT*/ PULONG BytesNeeded);
3773 typedef NDIS_STATUS DDKAPI
3774 (*W_RECONFIGURE_HANDLER)(
3775 /*OUT*/ PNDIS_STATUS OpenErrorStatus,
3776 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
3777 /*IN*/ NDIS_HANDLE WrapperConfigurationContext);
3779 typedef NDIS_STATUS DDKAPI
3781 /*OUT*/ PBOOLEAN AddressingReset,
3782 /*IN*/ NDIS_HANDLE MiniportAdapterContext);
3784 typedef NDIS_STATUS DDKAPI
3786 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
3787 /*IN*/ PNDIS_PACKET Packet,
3790 typedef NDIS_STATUS DDKAPI
3792 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
3793 /*IN*/ NDIS_HANDLE NdisLinkHandle,
3794 /*IN*/ PNDIS_WAN_PACKET Packet);
3796 typedef NDIS_STATUS DDKAPI
3797 (*W_SET_INFORMATION_HANDLER)(
3798 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
3799 /*IN*/ NDIS_OID Oid,
3800 /*IN*/ PVOID InformationBuffer,
3801 /*IN*/ ULONG InformationBufferLength,
3802 /*OUT*/ PULONG BytesRead,
3803 /*OUT*/ PULONG BytesNeeded);
3805 typedef NDIS_STATUS DDKAPI
3806 (*W_TRANSFER_DATA_HANDLER)(
3807 /*OUT*/ PNDIS_PACKET Packet,
3808 /*OUT*/ PUINT BytesTransferred,
3809 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
3810 /*IN*/ NDIS_HANDLE MiniportReceiveContext,
3811 /*IN*/ UINT ByteOffset,
3812 /*IN*/ UINT BytesToTransfer);
3814 typedef NDIS_STATUS DDKAPI
3815 (*WM_TRANSFER_DATA_HANDLER)(
3819 /* NDIS structures available only to miniport drivers */
3821 #define NDIS30_MINIPORT_CHARACTERISTICS_S \
3822 UCHAR MajorNdisVersion; \
3823 UCHAR MinorNdisVersion; \
3825 W_CHECK_FOR_HANG_HANDLER CheckForHangHandler; \
3826 W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler; \
3827 W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler; \
3828 W_HALT_HANDLER HaltHandler; \
3829 W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler; \
3830 W_INITIALIZE_HANDLER InitializeHandler; \
3831 W_ISR_HANDLER ISRHandler; \
3832 W_QUERY_INFORMATION_HANDLER QueryInformationHandler; \
3833 W_RECONFIGURE_HANDLER ReconfigureHandler; \
3834 W_RESET_HANDLER ResetHandler; \
3835 _ANONYMOUS_UNION union { \
3836 W_SEND_HANDLER SendHandler; \
3837 WM_SEND_HANDLER WanSendHandler; \
3838 } _UNION_NAME(u1); \
3839 W_SET_INFORMATION_HANDLER SetInformationHandler; \
3840 _ANONYMOUS_UNION union { \
3841 W_TRANSFER_DATA_HANDLER TransferDataHandler; \
3842 WM_TRANSFER_DATA_HANDLER WanTransferDataHandler; \
3845 typedef struct _NDIS30_MINIPORT_CHARACTERISTICS {
3846 NDIS30_MINIPORT_CHARACTERISTICS_S
3847 } NDIS30_MINIPORT_CHARACTERISTICS, *PSNDIS30_MINIPORT_CHARACTERISTICS;
3850 /* Extensions for NDIS 4.0 miniports */
3853 (*W_SEND_PACKETS_HANDLER)(
3854 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
3855 /*IN*/ PPNDIS_PACKET PacketArray,
3856 /*IN*/ UINT NumberOfPackets);
3859 (*W_RETURN_PACKET_HANDLER)(
3860 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
3861 /*IN*/ PNDIS_PACKET Packet);
3864 (*W_ALLOCATE_COMPLETE_HANDLER)(
3865 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
3866 /*IN*/ PVOID VirtualAddress,
3867 /*IN*/ PNDIS_PHYSICAL_ADDRESS PhysicalAddress,
3868 /*IN*/ ULONG Length,
3869 /*IN*/ PVOID Context);
3873 #define NDIS40_MINIPORT_CHARACTERISTICS_S \
3874 NDIS30_MINIPORT_CHARACTERISTICS Ndis30Chars; \
3875 W_RETURN_PACKET_HANDLER ReturnPacketHandler; \
3876 W_SEND_PACKETS_HANDLER SendPacketsHandler; \
3877 W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
3879 #else /* !__cplusplus */
3881 #define NDIS40_MINIPORT_CHARACTERISTICS_S \
3882 NDIS30_MINIPORT_CHARACTERISTICS_S \
3883 W_RETURN_PACKET_HANDLER ReturnPacketHandler; \
3884 W_SEND_PACKETS_HANDLER SendPacketsHandler; \
3885 W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
3887 #endif /* !__cplusplus */
3889 typedef struct _NDIS40_MINIPORT_CHARACTERISTICS {
3890 NDIS40_MINIPORT_CHARACTERISTICS_S
3891 } NDIS40_MINIPORT_CHARACTERISTICS, *PNDIS40_MINIPORT_CHARACTERISTICS;
3894 /* Extensions for NDIS 5.0 miniports */
3896 typedef NDIS_STATUS DDKAPI
3897 (*W_CO_CREATE_VC_HANDLER)(
3898 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
3899 /*IN*/ NDIS_HANDLE NdisVcHandle,
3900 /*OUT*/ PNDIS_HANDLE MiniportVcContext);
3902 typedef NDIS_STATUS DDKAPI
3903 (*W_CO_DELETE_VC_HANDLER)(
3904 /*IN*/ NDIS_HANDLE MiniportVcContext);
3906 typedef NDIS_STATUS DDKAPI
3907 (*W_CO_ACTIVATE_VC_HANDLER)(
3908 /*IN*/ NDIS_HANDLE MiniportVcContext,
3909 /*IN OUT*/ PCO_CALL_PARAMETERS CallParameters);
3911 typedef NDIS_STATUS DDKAPI
3912 (*W_CO_DEACTIVATE_VC_HANDLER)(
3913 /*IN*/ NDIS_HANDLE MiniportVcContext);
3916 (*W_CO_SEND_PACKETS_HANDLER)(
3917 /*IN*/ NDIS_HANDLE MiniportVcContext,
3918 /*IN*/ PPNDIS_PACKET PacketArray,
3919 /*IN*/ UINT NumberOfPackets);
3921 typedef NDIS_STATUS DDKAPI
3922 (*W_CO_REQUEST_HANDLER)(
3923 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
3924 /*IN*/ NDIS_HANDLE MiniportVcContext /*OPTIONAL*/,
3925 /*IN OUT*/ PNDIS_REQUEST NdisRequest);
3929 #define NDIS50_MINIPORT_CHARACTERISTICS_S \
3930 NDIS40_MINIPORT_CHARACTERISTICS Ndis40Chars; \
3931 W_CO_CREATE_VC_HANDLER CoCreateVcHandler; \
3932 W_CO_DELETE_VC_HANDLER CoDeleteVcHandler; \
3933 W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler; \
3934 W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler; \
3935 W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler; \
3936 W_CO_REQUEST_HANDLER CoRequestHandler;
3938 #else /* !__cplusplus */
3940 #define NDIS50_MINIPORT_CHARACTERISTICS_S \
3941 NDIS40_MINIPORT_CHARACTERISTICS_S \
3942 W_CO_CREATE_VC_HANDLER CoCreateVcHandler; \
3943 W_CO_DELETE_VC_HANDLER CoDeleteVcHandler; \
3944 W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler; \
3945 W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler; \
3946 W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler; \
3947 W_CO_REQUEST_HANDLER CoRequestHandler;
3949 #endif /* !__cplusplus */
3951 typedef struct _NDIS50_MINIPORT_CHARACTERISTICS {
3952 NDIS50_MINIPORT_CHARACTERISTICS_S
3953 } NDIS50_MINIPORT_CHARACTERISTICS, *PSNDIS50_MINIPORT_CHARACTERISTICS;
3956 /* Extensions for NDIS 5.1 miniports */
3959 (*W_CANCEL_SEND_PACKETS_HANDLER)(
3960 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
3961 /*IN*/ PVOID CancelId);
3965 typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
3966 NDIS50_MINIPORT_CHARACTERISTICS_S
3967 } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
3968 #elif defined(NDIS50)
3969 typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
3970 NDIS50_MINIPORT_CHARACTERISTICS_S
3971 } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
3972 #elif defined(NDIS40)
3973 typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
3974 NDIS40_MINIPORT_CHARACTERISTICS_S
3975 } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
3976 #elif defined(NDIS30)
3977 typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
3978 NDIS30_MINIPORT_CHARACTERISTICS_S
3979 } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
3983 typedef NDIS_STATUS DDKAPI
3985 /*IN*/ NDIS_HANDLE MacBindingHandle,
3986 /*IN*/ PNDIS_PACKET Packet);
3988 typedef NDIS_STATUS DDKAPI
3989 (*TRANSFER_DATA_HANDLER)(
3990 /*IN*/ NDIS_HANDLE MacBindingHandle,
3991 /*IN*/ NDIS_HANDLE MacReceiveContext,
3992 /*IN*/ UINT ByteOffset,
3993 /*IN*/ UINT BytesToTransfer,
3994 /*OUT*/ PNDIS_PACKET Packet,
3995 /*OUT*/ PUINT BytesTransferred);
3997 typedef NDIS_STATUS DDKAPI
3999 /*IN*/ NDIS_HANDLE MacBindingHandle);
4001 typedef NDIS_STATUS DDKAPI
4003 /*IN*/ NDIS_HANDLE MacBindingHandle,
4004 /*IN*/ PNDIS_REQUEST NdisRequest);
4008 /* Structures available only to full MAC drivers */
4010 typedef BOOLEAN DDKAPI
4011 (*PNDIS_INTERRUPT_SERVICE)(
4012 /*IN*/ PVOID InterruptContext);
4015 (*PNDIS_DEFERRED_PROCESSING)(
4016 /*IN*/ PVOID SystemSpecific1,
4017 /*IN*/ PVOID InterruptContext,
4018 /*IN*/ PVOID SystemSpecific2,
4019 /*IN*/ PVOID SystemSpecific3);
4023 typedef struct _NDIS_MINIPORT_BLOCK NDIS_MINIPORT_BLOCK, *PNDIS_MINIPORT_BLOCK;
4024 typedef struct _NDIS_PROTOCOL_BLOCK NDIS_PROTOCOL_BLOCK, *PNDIS_PROTOCOL_BLOCK;
4025 typedef struct _NDIS_OPEN_BLOCK NDIS_OPEN_BLOCK, *PNDIS_OPEN_BLOCK;
4026 typedef struct _NDIS_M_DRIVER_BLOCK NDIS_M_DRIVER_BLOCK, *PNDIS_M_DRIVER_BLOCK;
4027 typedef struct _NDIS_AF_LIST NDIS_AF_LIST, *PNDIS_AF_LIST;
4030 typedef struct _NDIS_MINIPORT_INTERRUPT {
4031 PKINTERRUPT InterruptObject;
4032 KSPIN_LOCK DpcCountLock;
4033 PVOID MiniportIdField;
4034 W_ISR_HANDLER MiniportIsr;
4035 W_HANDLE_INTERRUPT_HANDLER MiniportDpc;
4037 PNDIS_MINIPORT_BLOCK Miniport;
4040 KEVENT DpcsCompletedEvent;
4041 BOOLEAN SharedInterrupt;
4042 BOOLEAN IsrRequested;
4043 } NDIS_MINIPORT_INTERRUPT, *PNDIS_MINIPORT_INTERRUPT;
4045 typedef struct _NDIS_MINIPORT_TIMER {
4048 PNDIS_TIMER_FUNCTION MiniportTimerFunction;
4049 PVOID MiniportTimerContext;
4050 PNDIS_MINIPORT_BLOCK Miniport;
4051 struct _NDIS_MINIPORT_TIMER *NextDeferredTimer;
4052 } NDIS_MINIPORT_TIMER, *PNDIS_MINIPORT_TIMER;
4054 typedef struct _NDIS_INTERRUPT {
4055 PKINTERRUPT InterruptObject;
4056 KSPIN_LOCK DpcCountLock;
4057 PNDIS_INTERRUPT_SERVICE MacIsr;
4058 PNDIS_DEFERRED_PROCESSING MacDpc;
4060 PVOID InterruptContext;
4063 KEVENT DpcsCompletedEvent;
4064 } NDIS_INTERRUPT, *PNDIS_INTERRUPT;
4067 typedef struct _MAP_REGISTER_ENTRY {
4069 BOOLEAN WriteToDevice;
4070 } MAP_REGISTER_ENTRY, *PMAP_REGISTER_ENTRY;
4073 typedef enum _NDIS_WORK_ITEM_TYPE {
4074 NdisWorkItemRequest,
4076 NdisWorkItemReturnPackets,
4077 NdisWorkItemResetRequested,
4078 NdisWorkItemResetInProgress,
4080 NdisWorkItemSendLoopback,
4081 NdisWorkItemMiniportCallback,
4083 } NDIS_WORK_ITEM_TYPE, *PNDIS_WORK_ITEM_TYPE;
4085 #define NUMBER_OF_WORK_ITEM_TYPES NdisMaxWorkItems
4086 #define NUMBER_OF_SINGLE_WORK_ITEMS 6
4088 typedef struct _NDIS_MINIPORT_WORK_ITEM {
4089 SINGLE_LIST_ENTRY Link;
4090 NDIS_WORK_ITEM_TYPE WorkItemType;
4091 PVOID WorkItemContext;
4092 } NDIS_MINIPORT_WORK_ITEM, *PNDIS_MINIPORT_WORK_ITEM;
4095 typedef struct _NDIS_BIND_PATHS {
4097 NDIS_STRING Paths[1];
4098 } NDIS_BIND_PATHS, *PNDIS_BIND_PATHS;
4100 #define DECLARE_UNKNOWN_STRUCT(BaseName) \
4101 typedef struct _##BaseName BaseName, *P##BaseName;
4103 #define DECLARE_UNKNOWN_PROTOTYPE(Name) \
4104 typedef VOID (*(Name))(VOID);
4106 #define ETH_LENGTH_OF_ADDRESS 6
4108 DECLARE_UNKNOWN_STRUCT(ETH_BINDING_INFO)
4110 DECLARE_UNKNOWN_PROTOTYPE(ETH_ADDRESS_CHANGE)
4111 DECLARE_UNKNOWN_PROTOTYPE(ETH_FILTER_CHANGE)
4112 DECLARE_UNKNOWN_PROTOTYPE(ETH_DEFERRED_CLOSE)
4114 typedef struct _ETH_FILTER {
4115 PNDIS_SPIN_LOCK Lock;
4116 CHAR (*MCastAddressBuf)[ETH_LENGTH_OF_ADDRESS];
4117 struct _NDIS_MINIPORT_BLOCK *Miniport;
4118 UINT CombinedPacketFilter;
4119 PETH_BINDING_INFO OpenList;
4120 ETH_ADDRESS_CHANGE AddressChangeAction;
4121 ETH_FILTER_CHANGE FilterChangeAction;
4122 ETH_DEFERRED_CLOSE CloseAction;
4123 UINT MaxMulticastAddresses;
4125 UCHAR AdapterAddress[ETH_LENGTH_OF_ADDRESS];
4126 UINT OldCombinedPacketFilter;
4127 CHAR (*OldMCastAddressBuf)[ETH_LENGTH_OF_ADDRESS];
4128 UINT OldNumAddresses;
4129 PETH_BINDING_INFO DirectedList;
4130 PETH_BINDING_INFO BMList;
4131 PETH_BINDING_INFO MCastSet;
4136 } ETH_FILTER, *PETH_FILTER;
4139 (*ETH_RCV_COMPLETE_HANDLER)(
4140 /*IN*/ PETH_FILTER Filter);
4143 (*ETH_RCV_INDICATE_HANDLER)(
4144 /*IN*/ PETH_FILTER Filter,
4145 /*IN*/ NDIS_HANDLE MacReceiveContext,
4146 /*IN*/ PCHAR Address,
4147 /*IN*/ PVOID HeaderBuffer,
4148 /*IN*/ UINT HeaderBufferSize,
4149 /*IN*/ PVOID LookaheadBuffer,
4150 /*IN*/ UINT LookaheadBufferSize,
4151 /*IN*/ UINT PacketSize);
4154 (*FDDI_RCV_COMPLETE_HANDLER)(
4155 /*IN*/ PFDDI_FILTER Filter);
4158 (*FDDI_RCV_INDICATE_HANDLER)(
4159 /*IN*/ PFDDI_FILTER Filter,
4160 /*IN*/ NDIS_HANDLE MacReceiveContext,
4161 /*IN*/ PCHAR Address,
4162 /*IN*/ UINT AddressLength,
4163 /*IN*/ PVOID HeaderBuffer,
4164 /*IN*/ UINT HeaderBufferSize,
4165 /*IN*/ PVOID LookaheadBuffer,
4166 /*IN*/ UINT LookaheadBufferSize,
4167 /*IN*/ UINT PacketSize);
4170 (*FILTER_PACKET_INDICATION_HANDLER)(
4171 /*IN*/ NDIS_HANDLE Miniport,
4172 /*IN*/ PPNDIS_PACKET PacketArray,
4173 /*IN*/ UINT NumberOfPackets);
4176 (*TR_RCV_COMPLETE_HANDLER)(
4177 /*IN*/ PTR_FILTER Filter);
4180 (*TR_RCV_INDICATE_HANDLER)(
4181 /*IN*/ PTR_FILTER Filter,
4182 /*IN*/ NDIS_HANDLE MacReceiveContext,
4183 /*IN*/ PVOID HeaderBuffer,
4184 /*IN*/ UINT HeaderBufferSize,
4185 /*IN*/ PVOID LookaheadBuffer,
4186 /*IN*/ UINT LookaheadBufferSize,
4187 /*IN*/ UINT PacketSize);
4190 (*WAN_RCV_COMPLETE_HANDLER)(
4191 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4192 /*IN*/ NDIS_HANDLE NdisLinkContext);
4196 /*OUT*/ PNDIS_STATUS Status,
4197 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4198 /*IN*/ NDIS_HANDLE NdisLinkContext,
4199 /*IN*/ PUCHAR Packet,
4200 /*IN*/ ULONG PacketSize);
4202 typedef VOID DDKFASTAPI
4203 (*NDIS_M_DEQUEUE_WORK_ITEM)(
4204 /*IN*/ PNDIS_MINIPORT_BLOCK Miniport,
4205 /*IN*/ NDIS_WORK_ITEM_TYPE WorkItemType,
4206 /*OUT*/ PVOID *WorkItemContext);
4208 typedef NDIS_STATUS DDKFASTAPI
4209 (*NDIS_M_QUEUE_NEW_WORK_ITEM)(
4210 /*IN*/ PNDIS_MINIPORT_BLOCK Miniport,
4211 /*IN*/ NDIS_WORK_ITEM_TYPE WorkItemType,
4212 /*IN*/ PVOID WorkItemContext);
4214 typedef NDIS_STATUS DDKFASTAPI
4215 (*NDIS_M_QUEUE_WORK_ITEM)(
4216 /*IN*/ PNDIS_MINIPORT_BLOCK Miniport,
4217 /*IN*/ NDIS_WORK_ITEM_TYPE WorkItemType,
4218 /*IN*/ PVOID WorkItemContext);
4221 (*NDIS_M_REQ_COMPLETE_HANDLER)(
4222 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4223 /*IN*/ NDIS_STATUS Status);
4226 (*NDIS_M_RESET_COMPLETE_HANDLER)(
4227 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4228 /*IN*/ NDIS_STATUS Status,
4229 /*IN*/ BOOLEAN AddressingReset);
4232 (*NDIS_M_SEND_COMPLETE_HANDLER)(
4233 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4234 /*IN*/ PNDIS_PACKET Packet,
4235 /*IN*/ NDIS_STATUS Status);
4238 (*NDIS_M_SEND_RESOURCES_HANDLER)(
4239 /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
4241 typedef BOOLEAN DDKFASTAPI
4242 (*NDIS_M_START_SENDS)(
4243 /*IN*/ PNDIS_MINIPORT_BLOCK Miniport);
4246 (*NDIS_M_STATUS_HANDLER)(
4247 /*IN*/ NDIS_HANDLE MiniportHandle,
4248 /*IN*/ NDIS_STATUS GeneralStatus,
4249 /*IN*/ PVOID StatusBuffer,
4250 /*IN*/ UINT StatusBufferSize);
4253 (*NDIS_M_STS_COMPLETE_HANDLER)(
4254 /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
4257 (*NDIS_M_TD_COMPLETE_HANDLER)(
4258 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4259 /*IN*/ PNDIS_PACKET Packet,
4260 /*IN*/ NDIS_STATUS Status,
4261 /*IN*/ UINT BytesTransferred);
4263 typedef VOID (DDKAPI *NDIS_WM_SEND_COMPLETE_HANDLER)(
4264 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4265 /*IN*/ PVOID Packet,
4266 /*IN*/ NDIS_STATUS Status);
4271 #define ARC_SEND_BUFFERS 8
4272 #define ARC_HEADER_SIZE 4
4274 typedef struct _NDIS_ARC_BUF {
4275 NDIS_HANDLE ArcnetBufferPool;
4276 PUCHAR ArcnetLookaheadBuffer;
4278 ARC_BUFFER_LIST ArcnetBuffers[ARC_SEND_BUFFERS];
4279 } NDIS_ARC_BUF, *PNDIS_ARC_BUF;
4283 #define NDIS_MINIPORT_WORK_QUEUE_SIZE 10
4285 typedef struct _NDIS_LOG {
4286 PNDIS_MINIPORT_BLOCK Miniport;
4294 } NDIS_LOG, *PNDIS_LOG;
4296 typedef struct _FILTERDBS {
4297 _ANONYMOUS_UNION union {
4299 PNULL_FILTER NullDB;
4302 PFDDI_FILTER FddiDB;
4307 #endif /* !ARCNET */
4308 } FILTERDBS, *PFILTERDBS;
4311 struct _NDIS_MINIPORT_BLOCK {
4313 PNDIS_MINIPORT_BLOCK NextMiniport;
4314 PNDIS_M_DRIVER_BLOCK DriverHandle;
4315 NDIS_HANDLE MiniportAdapterContext;
4316 UNICODE_STRING MiniportName;
4317 PNDIS_BIND_PATHS BindPaths;
4318 NDIS_HANDLE OpenQueue;
4320 NDIS_HANDLE DeviceContext;
4324 UCHAR AssignedProcessor;
4326 PNDIS_REQUEST MediaRequest;
4327 PNDIS_MINIPORT_INTERRUPT Interrupt;
4330 LIST_ENTRY PacketList;
4331 PNDIS_PACKET FirstPendingPacket;
4332 PNDIS_PACKET ReturnPacketsQueue;
4333 ULONG RequestBuffer;
4334 PVOID SetMCastBuffer;
4335 PNDIS_MINIPORT_BLOCK PrimaryMiniport;
4336 PVOID WrapperContext;
4337 PVOID BusDataContext;
4338 ULONG PnPCapabilities;
4339 PCM_RESOURCE_LIST Resources;
4340 NDIS_TIMER WakeUpDpcTimer;
4341 UNICODE_STRING BaseName;
4342 UNICODE_STRING SymbolicLinkName;
4343 ULONG CheckForHangSeconds;
4345 USHORT CFHangCurrentTick;
4346 NDIS_STATUS ResetStatus;
4347 NDIS_HANDLE ResetOpen;
4348 FILTERDBS FilterDbs;
4349 FILTER_PACKET_INDICATION_HANDLER PacketIndicateHandler;
4350 NDIS_M_SEND_COMPLETE_HANDLER SendCompleteHandler;
4351 NDIS_M_SEND_RESOURCES_HANDLER SendResourcesHandler;
4352 NDIS_M_RESET_COMPLETE_HANDLER ResetCompleteHandler;
4353 NDIS_MEDIUM MediaType;
4355 NDIS_INTERFACE_TYPE BusType;
4356 NDIS_INTERFACE_TYPE AdapterType;
4357 PDEVICE_OBJECT DeviceObject;
4358 PDEVICE_OBJECT PhysicalDeviceObject;
4359 PDEVICE_OBJECT NextDeviceObject;
4360 PMAP_REGISTER_ENTRY MapRegisters;
4361 PNDIS_AF_LIST CallMgrAfList;
4362 PVOID MiniportThread;
4364 USHORT SetInfoBufLen;
4365 USHORT MaxSendPackets;
4366 NDIS_STATUS FakeStatus;
4368 PUNICODE_STRING pAdapterInstanceName;
4369 PNDIS_MINIPORT_TIMER TimerQueue;
4371 PNDIS_REQUEST PendingRequest;
4372 UINT MaximumLongAddresses;
4373 UINT MaximumShortAddresses;
4374 UINT CurrentLookahead;
4375 UINT MaximumLookahead;
4376 W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler;
4377 W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler;
4378 W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler;
4379 W_SEND_PACKETS_HANDLER SendPacketsHandler;
4380 NDIS_M_START_SENDS DeferredSendHandler;
4381 ETH_RCV_INDICATE_HANDLER EthRxIndicateHandler;
4382 TR_RCV_INDICATE_HANDLER TrRxIndicateHandler;
4383 FDDI_RCV_INDICATE_HANDLER FddiRxIndicateHandler;
4384 ETH_RCV_COMPLETE_HANDLER EthRxCompleteHandler;
4385 TR_RCV_COMPLETE_HANDLER TrRxCompleteHandler;
4386 FDDI_RCV_COMPLETE_HANDLER FddiRxCompleteHandler;
4387 NDIS_M_STATUS_HANDLER StatusHandler;
4388 NDIS_M_STS_COMPLETE_HANDLER StatusCompleteHandler;
4389 NDIS_M_TD_COMPLETE_HANDLER TDCompleteHandler;
4390 NDIS_M_REQ_COMPLETE_HANDLER QueryCompleteHandler;
4391 NDIS_M_REQ_COMPLETE_HANDLER SetCompleteHandler;
4392 NDIS_WM_SEND_COMPLETE_HANDLER WanSendCompleteHandler;
4393 WAN_RCV_HANDLER WanRcvHandler;
4394 WAN_RCV_COMPLETE_HANDLER WanRcvCompleteHandler;
4396 PNDIS_MINIPORT_BLOCK NextGlobalMiniport;
4397 SINGLE_LIST_ENTRY WorkQueue[NUMBER_OF_WORK_ITEM_TYPES];
4398 SINGLE_LIST_ENTRY SingleWorkItems[NUMBER_OF_SINGLE_WORK_ITEMS];
4401 UCHAR ArcnetAddress;
4403 _ANONYMOUS_UNION union {
4405 PNDIS_ARC_BUF ArcBuf;
4411 PCM_RESOURCE_LIST AllocatedResources;
4412 PCM_RESOURCE_LIST AllocatedResourcesTranslated;
4413 SINGLE_LIST_ENTRY PatternList;
4414 NDIS_PNP_CAPABILITIES PMCapabilities;
4415 DEVICE_CAPABILITIES DeviceCaps;
4417 DEVICE_POWER_STATE CurrentDevicePowerState;
4419 SYSTEM_POWER_STATE WaitWakeSystemState;
4420 LARGE_INTEGER VcIndex;
4421 KSPIN_LOCK VcCountLock;
4422 LIST_ENTRY WmiEnabledVcs;
4423 PNDIS_GUID pNdisGuidMap;
4424 PNDIS_GUID pCustomGuidMap;
4426 USHORT cNdisGuidMap;
4427 USHORT cCustomGuidMap;
4428 USHORT CurrentMapRegister;
4429 PKEVENT AllocationEvent;
4430 USHORT BaseMapRegistersNeeded;
4431 USHORT SGMapRegistersNeeded;
4432 ULONG MaximumPhysicalMapping;
4433 NDIS_TIMER MediaDisconnectTimer;
4434 USHORT MediaDisconnectTimeOut;
4435 USHORT InstanceNumber;
4436 NDIS_EVENT OpenReadyEvent;
4437 NDIS_PNP_DEVICE_STATE PnPDeviceState;
4438 NDIS_PNP_DEVICE_STATE OldPnPDeviceState;
4439 PGET_SET_DEVICE_DATA SetBusData;
4440 PGET_SET_DEVICE_DATA GetBusData;
4444 NDIS_STATS NdisStats;
4448 PNDIS_PACKET IndicatedPacket[MAXIMUM_PROCESSORS];
4449 PKEVENT RemoveReadyEvent;
4450 PKEVENT AllOpensClosedEvent;
4451 PKEVENT AllRequestsCompletedEvent;
4453 NDIS_MINIPORT_WORK_ITEM WorkItemBuffer[NUMBER_OF_SINGLE_WORK_ITEMS];
4454 PDMA_ADAPTER SystemAdapterObject;
4455 ULONG DriverVerifyFlags;
4457 USHORT InternalResetCount;
4458 USHORT MiniportResetCount;
4459 USHORT MediaSenseConnectCount;
4460 USHORT MediaSenseDisconnectCount;
4461 PNDIS_PACKET *xPackets;
4462 ULONG UserModeOpenReferences;
4463 _ANONYMOUS_UNION union {
4464 PVOID SavedSendHandler;
4465 PVOID SavedWanSendHandler;
4467 PVOID SavedSendPacketsHandler;
4468 PVOID SavedCancelSendPacketsHandler;
4469 W_SEND_PACKETS_HANDLER WSendPacketsHandler;
4470 ULONG MiniportAttributes;
4471 PDMA_ADAPTER SavedSystemAdapterObject;
4473 USHORT CFHangXTicks;
4475 ULONG IndicatedPacketsCount;
4476 ULONG PhysicalMediumType;
4477 PNDIS_REQUEST LastRequest;
4478 LONG DmaAdapterRefCount;
4484 KSPIN_LOCK TimerQueueLock;
4485 PKEVENT ResetCompletedEvent;
4486 PKEVENT QueuedBindingCompletedEvent;
4487 PKEVENT DmaResourcesReleasedEvent;
4488 FILTER_PACKET_INDICATION_HANDLER SavedPacketIndicateHandler;
4489 ULONG RegisteredInterrupts;
4490 PNPAGED_LOOKASIDE_LIST SGListLookasideList;
4491 ULONG ScatterGatherListSize;
4496 /* Handler prototypes for NDIS_OPEN_BLOCK */
4498 typedef NDIS_STATUS (DDKAPI *WAN_SEND_HANDLER)(
4499 /*IN*/ NDIS_HANDLE MacBindingHandle,
4500 /*IN*/ NDIS_HANDLE LinkHandle,
4501 /*IN*/ PVOID Packet);
4503 /* NDIS 4.0 extension */
4505 typedef VOID (DDKAPI *SEND_PACKETS_HANDLER)(
4506 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
4507 /*IN*/ PPNDIS_PACKET PacketArray,
4508 /*IN*/ UINT NumberOfPackets);
4511 typedef struct _NDIS_COMMON_OPEN_BLOCK {
4513 NDIS_HANDLE BindingHandle;
4514 PNDIS_MINIPORT_BLOCK MiniportHandle;
4515 PNDIS_PROTOCOL_BLOCK ProtocolHandle;
4516 NDIS_HANDLE ProtocolBindingContext;
4517 PNDIS_OPEN_BLOCK MiniportNextOpen;
4518 PNDIS_OPEN_BLOCK ProtocolNextOpen;
4519 NDIS_HANDLE MiniportAdapterContext;
4524 PNDIS_STRING BindDeviceName;
4525 KSPIN_LOCK Reserved5;
4526 PNDIS_STRING RootDeviceName;
4527 _ANONYMOUS_UNION union {
4528 SEND_HANDLER SendHandler;
4529 WAN_SEND_HANDLER WanSendHandler;
4531 TRANSFER_DATA_HANDLER TransferDataHandler;
4532 SEND_COMPLETE_HANDLER SendCompleteHandler;
4533 TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler;
4534 RECEIVE_HANDLER ReceiveHandler;
4535 RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler;
4536 WAN_RECEIVE_HANDLER WanReceiveHandler;
4537 REQUEST_COMPLETE_HANDLER RequestCompleteHandler;
4538 RECEIVE_PACKET_HANDLER ReceivePacketHandler;
4539 SEND_PACKETS_HANDLER SendPacketsHandler;
4540 RESET_HANDLER ResetHandler;
4541 REQUEST_HANDLER RequestHandler;
4542 RESET_COMPLETE_HANDLER ResetCompleteHandler;
4543 STATUS_HANDLER StatusHandler;
4544 STATUS_COMPLETE_HANDLER StatusCompleteHandler;
4548 KSPIN_LOCK SpinLock;
4549 NDIS_HANDLE FilterHandle;
4550 ULONG ProtocolOptions;
4551 USHORT CurrentLookahead;
4552 USHORT ConnectDampTicks;
4553 USHORT DisconnectDampTicks;
4554 W_SEND_HANDLER WSendHandler;
4555 W_TRANSFER_DATA_HANDLER WTransferDataHandler;
4556 W_SEND_PACKETS_HANDLER WSendPacketsHandler;
4557 W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler;
4559 PKEVENT CloseCompleteEvent;
4562 PNDIS_OPEN_BLOCK NextGlobalOpen;
4564 } NDIS_COMMON_OPEN_BLOCK;
4566 struct _NDIS_OPEN_BLOCK
4568 NDIS_COMMON_OPEN_BLOCK NdisCommonOpenBlock;
4570 struct _NDIS_OPEN_CO
4572 struct _NDIS_CO_AF_BLOCK * NextAf;
4573 W_CO_CREATE_VC_HANDLER MiniportCoCreateVcHandler;
4574 W_CO_REQUEST_HANDLER MiniportCoRequestHandler;
4575 CO_CREATE_VC_HANDLER CoCreateVcHandler;
4576 CO_DELETE_VC_HANDLER CoDeleteVcHandler;
4577 PVOID CmActivateVcCompleteHandler;
4578 PVOID CmDeactivateVcCompleteHandler;
4579 PVOID CoRequestCompleteHandler;
4580 LIST_ENTRY ActiveVcHead;
4581 LIST_ENTRY InactiveVcHead;
4582 LONG PendingAfNotifications;
4583 PKEVENT AfNotifyCompleteEvent;
4590 /* Routines for NDIS miniport drivers */
4595 NdisMInitializeTimer(
4596 /*IN*/ /*OUT*/ PNDIS_MINIPORT_TIMER Timer,
4597 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4598 /*IN*/ PNDIS_TIMER_FUNCTION TimerFunction,
4599 /*IN*/ PVOID FunctionContext);
4604 NdisMSetPeriodicTimer(
4605 /*IN*/ PNDIS_MINIPORT_TIMER Timer,
4606 /*IN*/ UINT MillisecondsPeriod);
4612 /*IN*/ PNDIS_MINIPORT_TIMER Timer,
4613 /*OUT*/ PBOOLEAN TimerCancelled);
4618 NdisInitializeWrapper(
4619 /*OUT*/ PNDIS_HANDLE NdisWrapperHandle,
4620 /*IN*/ PVOID SystemSpecific1,
4621 /*IN*/ PVOID SystemSpecific2,
4622 /*IN*/ PVOID SystemSpecific3);
4627 NdisMAllocateMapRegisters(
4628 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4629 /*IN*/ UINT DmaChannel,
4630 /*IN*/ BOOLEAN Dma32BitAddresses,
4631 /*IN*/ ULONG PhysicalMapRegistersNeeded,
4632 /*IN*/ ULONG MaximumPhysicalMapping);
4636 * NdisMArcIndicateReceive(
4637 * IN NDIS_HANDLE MiniportAdapterHandle,
4638 * IN PUCHAR HeaderBuffer,
4639 * IN PUCHAR DataBuffer,
4642 #define NdisMArcIndicateReceive(MiniportAdapterHandle, \
4647 ArcFilterDprIndicateReceive( \
4648 (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.ArcDB), \
4656 * NdisMArcIndicateReceiveComplete(
4657 * IN NDIS_HANDLE MiniportAdapterHandle);
4659 #define NdisMArcIndicateReceiveComplete(MiniportAdapterHandle) \
4661 if (((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->EthDB) \
4663 NdisMEthIndicateReceiveComplete(_H); \
4666 ArcFilterDprIndicateReceiveComplete( \
4667 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->ArcDB); \
4674 /*IN*/ NDIS_HANDLE LogHandle);
4680 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4682 /*OUT*/ PNDIS_HANDLE LogHandle);
4687 NdisMDeregisterAdapterShutdownHandler(
4688 /*IN*/ NDIS_HANDLE MiniportHandle);
4693 NdisMDeregisterInterrupt(
4694 /*IN*/ PNDIS_MINIPORT_INTERRUPT Interrupt);
4699 NdisMDeregisterIoPortRange(
4700 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4701 /*IN*/ UINT InitialPort,
4702 /*IN*/ UINT NumberOfPorts,
4703 /*IN*/ PVOID PortOffset);
4707 * NdisMEthIndicateReceive(
4708 * IN NDIS_HANDLE MiniportAdapterHandle,
4709 * IN NDIS_HANDLE MiniportReceiveContext,
4710 * IN PVOID HeaderBuffer,
4711 * IN UINT HeaderBufferSize,
4712 * IN PVOID LookaheadBuffer,
4713 * IN UINT LookaheadBufferSize,
4714 * IN UINT PacketSize);
4716 #define NdisMEthIndicateReceive(MiniportAdapterHandle, \
4717 MiniportReceiveContext, \
4721 LookaheadBufferSize, \
4724 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxIndicateHandler)( \
4725 (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.EthDB), \
4726 (MiniportReceiveContext), \
4729 (HeaderBufferSize), \
4730 (LookaheadBuffer), \
4731 (LookaheadBufferSize), \
4737 * NdisMEthIndicateReceiveComplete(
4738 * IN NDIS_HANDLE MiniportAdapterHandle);
4740 #define NdisMEthIndicateReceiveComplete(MiniportAdapterHandle) \
4742 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxCompleteHandler)( \
4743 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FilterDbs.EthDB); \
4748 * NdisMFddiIndicateReceive(
4749 * IN NDIS_HANDLE MiniportAdapterHandle,
4750 * IN NDIS_HANDLE MiniportReceiveContext,
4751 * IN PVOID HeaderBuffer,
4752 * IN UINT HeaderBufferSize,
4753 * IN PVOID LookaheadBuffer,
4754 * IN UINT LookaheadBufferSize,
4755 * IN UINT PacketSize);
4757 #define NdisMFddiIndicateReceive(MiniportAdapterHandle, \
4758 MiniportReceiveContext, \
4762 LookaheadBufferSize, \
4765 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxIndicateHandler)( \
4766 (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.FddiDB), \
4767 (MiniportReceiveContext), \
4768 (PUCHAR)(HeaderBuffer) + 1, \
4769 (((*(PUCHAR*)(HeaderBuffer)) & 0x40) ? \
4770 FDDI_LENGTH_OF_LONG_ADDRESS : \
4771 FDDI_LENGTH_OF_SHORT_ADDRESS), \
4773 (HeaderBufferSize), \
4774 (LookaheadBuffer), \
4775 (LookaheadBufferSize), \
4783 * NdisMFddiIndicateReceiveComplete(
4784 * IN NDIS_HANDLE MiniportAdapterHandle);
4786 #define NdisMFddiIndicateReceiveComplete(MiniportAdapterHandle) \
4788 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxCompleteHandler)( \
4789 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FilterDbs.FddiDB); \
4796 /*IN*/ NDIS_HANDLE LogHandle);
4801 NdisMFreeMapRegisters(
4802 /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
4806 * NdisMIndicateStatus(
4807 * IN NDIS_HANDLE MiniportAdapterHandle,
4808 * IN NDIS_STATUS GeneralStatus,
4809 * IN PVOID StatusBuffer,
4810 * IN UINT StatusBufferSize);
4813 #define NdisMIndicateStatus(MiniportAdapterHandle, \
4814 GeneralStatus, StatusBuffer, StatusBufferSize) \
4815 (*((PNDIS_MINIPORT_BLOCK)(_M))->StatusHandler)( \
4816 MiniportAdapterHandle, GeneralStatus, StatusBuffer, StatusBufferSize)
4820 * NdisMIndicateStatusComplete(
4821 * IN NDIS_HANDLE MiniportAdapterHandle);
4823 #define NdisMIndicateStatusComplete(MiniportAdapterHandle) \
4824 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->StatusCompleteHandler)( \
4825 MiniportAdapterHandle)
4829 * NdisMInitializeWrapper(
4830 * OUT PNDIS_HANDLE NdisWrapperHandle,
4831 * IN PVOID SystemSpecific1,
4832 * IN PVOID SystemSpecific2,
4833 * IN PVOID SystemSpecific3);
4835 #define NdisMInitializeWrapper(NdisWrapperHandle, \
4839 NdisInitializeWrapper((NdisWrapperHandle), \
4840 (SystemSpecific1), \
4841 (SystemSpecific2), \
4848 /*OUT*/ PVOID *VirtualAddress,
4849 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4850 /*IN*/ NDIS_PHYSICAL_ADDRESS PhysicalAddress,
4851 /*IN*/ UINT Length);
4855 * NdisMQueryInformationComplete(
4856 * IN NDIS_HANDLE MiniportAdapterHandle,
4857 * IN NDIS_STATUS Status);
4859 #define NdisMQueryInformationComplete(MiniportAdapterHandle, Status) \
4860 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->QueryCompleteHandler)(MiniportAdapterHandle, Status)
4865 NdisMRegisterAdapterShutdownHandler(
4866 /*IN*/ NDIS_HANDLE MiniportHandle,
4867 /*IN*/ PVOID ShutdownContext,
4868 /*IN*/ ADAPTER_SHUTDOWN_HANDLER ShutdownHandler);
4873 NdisMRegisterInterrupt(
4874 /*OUT*/ PNDIS_MINIPORT_INTERRUPT Interrupt,
4875 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4876 /*IN*/ UINT InterruptVector,
4877 /*IN*/ UINT InterruptLevel,
4878 /*IN*/ BOOLEAN RequestIsr,
4879 /*IN*/ BOOLEAN SharedInterrupt,
4880 /*IN*/ NDIS_INTERRUPT_MODE InterruptMode);
4885 NdisMRegisterIoPortRange(
4886 /*OUT*/ PVOID *PortOffset,
4887 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4888 /*IN*/ UINT InitialPort,
4889 /*IN*/ UINT NumberOfPorts);
4894 NdisMRegisterMiniport(
4895 /*IN*/ NDIS_HANDLE NdisWrapperHandle,
4896 /*IN*/ PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,
4897 /*IN*/ UINT CharacteristicsLength);
4900 #if !defined(_NDIS_)
4904 * NdisMResetComplete(
4905 * IN NDIS_HANDLE MiniportAdapterHandle,
4906 * IN NDIS_STATUS Status,
4907 * IN BOOLEAN AddressingReset);
4909 #define NdisMResetComplete(MiniportAdapterHandle, \
4913 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->ResetCompleteHandler)( \
4914 MiniportAdapterHandle, Status, AddressingReset); \
4919 * NdisMSendComplete(
4920 * IN NDIS_HANDLE MiniportAdapterHandle,
4921 * IN PNDIS_PACKET Packet,
4922 * IN NDIS_STATUS Status);
4924 #define NdisMSendComplete(MiniportAdapterHandle, \
4928 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendCompleteHandler)( \
4929 MiniportAdapterHandle, Packet, Status); \
4934 * NdisMSendResourcesAvailable(
4935 * IN NDIS_HANDLE MiniportAdapterHandle);
4937 #define NdisMSendResourcesAvailable(MiniportAdapterHandle) \
4939 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendResourcesHandler)( \
4940 MiniportAdapterHandle); \
4945 * NdisMTransferDataComplete(
4946 * IN NDIS_HANDLE MiniportAdapterHandle,
4947 * IN PNDIS_PACKET Packet,
4948 * IN NDIS_STATUS Status,
4949 * IN UINT BytesTransferred);
4951 #define NdisMTransferDataComplete(MiniportAdapterHandle, \
4956 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TDCompleteHandler)( \
4957 MiniportAdapterHandle, Packet, Status, BytesTransferred) \
4960 #endif /* !_NDIS_ */
4965 * NdisMSetAttributes(
4966 * IN NDIS_HANDLE MiniportAdapterHandle,
4967 * IN NDIS_HANDLE MiniportAdapterContext,
4968 * IN BOOLEAN BusMaster,
4969 * IN NDIS_INTERFACE_TYPE AdapterType);
4971 #define NdisMSetAttributes(MiniportAdapterHandle, \
4972 MiniportAdapterContext, \
4975 NdisMSetAttributesEx(MiniportAdapterHandle, \
4976 MiniportAdapterContext, \
4978 (BusMaster) ? NDIS_ATTRIBUTE_BUS_MASTER : 0, \
4984 NdisMSetAttributesEx(
4985 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
4986 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
4987 /*IN*/ UINT CheckForHangTimeInSeconds /*OPTIONAL*/,
4988 /*IN*/ ULONG AttributeFlags,
4989 /*IN*/ NDIS_INTERFACE_TYPE AdapterType);
4993 * NdisMSetInformationComplete(
4994 * IN NDIS_HANDLE MiniportAdapterHandle,
4995 * IN NDIS_STATUS Status);
4997 #define NdisMSetInformationComplete(MiniportAdapterHandle, \
4999 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SetCompleteHandler)( \
5000 MiniportAdapterHandle, Status)
5006 /*IN*/ ULONG MicrosecondsToSleep);
5011 NdisMSynchronizeWithInterrupt(
5012 /*IN*/ PNDIS_MINIPORT_INTERRUPT Interrupt,
5013 /*IN*/ PVOID SynchronizeFunction,
5014 /*IN*/ PVOID SynchronizeContext);
5018 * NdisMTrIndicateReceive(
5019 * IN NDIS_HANDLE MiniportAdapterHandle,
5020 * IN NDIS_HANDLE MiniportReceiveContext,
5021 * IN PVOID HeaderBuffer,
5022 * IN UINT HeaderBufferSize,
5023 * IN PVOID LookaheadBuffer,
5024 * IN UINT LookaheadBufferSize,
5025 * IN UINT PacketSize);
5027 #define NdisMTrIndicateReceive(MiniportAdapterHandle, \
5028 MiniportReceiveContext, \
5032 LookaheadBufferSize, \
5035 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxIndicateHandler)( \
5036 (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.TrDB), \
5037 (MiniportReceiveContext), \
5040 (HeaderBufferSize), \
5041 (LookaheadBuffer), \
5042 (LookaheadBufferSize), \
5048 * NdisMTrIndicateReceiveComplete(
5049 * IN NDIS_HANDLE MiniportAdapterHandle);
5051 #define NdisMTrIndicateReceiveComplete(MiniportAdapterHandle) \
5053 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxCompleteHandler)( \
5054 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FilterDbs.TrDB); \
5061 /*IN*/ NDIS_HANDLE LogHandle,
5062 /*IN*/ PVOID LogBuffer,
5063 /*IN*/ UINT LogBufferSize);
5068 NdisMQueryAdapterResources(
5069 /*OUT*/ PNDIS_STATUS Status,
5070 /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
5071 /*OUT*/ PNDIS_RESOURCE_LIST ResourceList,
5072 /*IN OUT*/ PUINT BufferSize);
5077 NdisTerminateWrapper(
5078 /*IN*/ NDIS_HANDLE NdisWrapperHandle,
5079 /*IN*/ PVOID SystemSpecific);
5085 /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
5086 /*IN*/ PVOID VirtualAddress,
5087 /*IN*/ UINT Length);
5091 /* NDIS intermediate miniport structures */
5093 typedef VOID (DDKAPI *W_MINIPORT_CALLBACK)(
5094 /*IN*/ NDIS_HANDLE MiniportAdapterContext,
5095 /*IN*/ PVOID CallbackContext);
5099 /* Routines for intermediate miniport drivers */
5104 NdisIMDeInitializeDeviceInstance(
5105 /*IN*/ NDIS_HANDLE NdisMiniportHandle);
5109 * NdisIMInitializeDeviceInstance(
5110 * IN NDIS_HANDLE DriverHandle,
5111 * IN PNDIS_STRING DeviceInstance);
5113 #define NdisIMInitializeDeviceInstance(DriverHandle, DeviceInstance) \
5114 NdisIMInitializeDeviceInstanceEx(DriverHandle, DeviceInstance, NULL)
5119 NdisIMRegisterLayeredMiniport(
5120 /*IN*/ NDIS_HANDLE NdisWrapperHandle,
5121 /*IN*/ PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,
5122 /*IN*/ UINT CharacteristicsLength,
5123 /*OUT*/ PNDIS_HANDLE DriverHandle);
5126 /* Functions obsoleted by NDIS 5.0 */
5132 /*IN*/ PNDIS_HANDLE NdisDmaHandle);
5137 NdisSetupDmaTransfer(
5138 /*OUT*/ PNDIS_STATUS Status,
5139 /*IN*/ PNDIS_HANDLE NdisDmaHandle,
5140 /*IN*/ PNDIS_BUFFER Buffer,
5141 /*IN*/ ULONG Offset,
5142 /*IN*/ ULONG Length,
5143 /*IN*/ BOOLEAN WriteToDevice);
5148 NdisUpcaseUnicodeString(
5149 /*OUT*/ PUNICODE_STRING DestinationString,
5150 /*IN*/ PUNICODE_STRING SourceString);
5153 /* Routines for NDIS protocol drivers */
5159 /*OUT*/ PNDIS_STATUS Status,
5160 /*IN*/ NDIS_HANDLE NdisBindingHandle,
5161 /*IN*/ PNDIS_REQUEST NdisRequest);
5167 /*OUT*/ PNDIS_STATUS Status,
5168 /*IN*/ NDIS_HANDLE NdisBindingHandle);
5174 /*OUT*/ PNDIS_STATUS Status,
5175 /*IN*/ NDIS_HANDLE NdisBindingHandle,
5176 /*IN*/ PNDIS_PACKET Packet);
5182 /*IN*/ NDIS_HANDLE NdisBindingHandle,
5183 /*IN*/ PPNDIS_PACKET PacketArray,
5184 /*IN*/ UINT NumberOfPackets);
5190 /*OUT*/ PNDIS_STATUS Status,
5191 /*IN*/ NDIS_HANDLE NdisBindingHandle,
5192 /*IN*/ NDIS_HANDLE MacReceiveContext,
5193 /*IN*/ UINT ByteOffset,
5194 /*IN*/ UINT BytesToTransfer,
5195 /*IN OUT*/ PNDIS_PACKET Packet,
5196 /*OUT*/ PUINT BytesTransferred);
5202 /*OUT*/ PNDIS_STATUS Status,
5203 /*IN*/ NDIS_HANDLE NdisBindingHandle);
5208 NdisCompleteBindAdapter(
5209 /*IN*/ NDIS_HANDLE BindAdapterContext,
5210 /*IN*/ NDIS_STATUS Status,
5211 /*IN*/ NDIS_STATUS OpenStatus);
5216 NdisCompleteUnbindAdapter(
5217 /*IN*/ NDIS_HANDLE UnbindAdapterContext,
5218 /*IN*/ NDIS_STATUS Status);
5223 NdisDeregisterProtocol(
5224 /*OUT*/ PNDIS_STATUS Status,
5225 /*IN*/ NDIS_HANDLE NdisProtocolHandle);
5231 /*OUT*/ PNDIS_STATUS Status,
5232 /*OUT*/ PNDIS_STATUS OpenErrorStatus,
5233 /*OUT*/ PNDIS_HANDLE NdisBindingHandle,
5234 /*OUT*/ PUINT SelectedMediumIndex,
5235 /*IN*/ PNDIS_MEDIUM MediumArray,
5236 /*IN*/ UINT MediumArraySize,
5237 /*IN*/ NDIS_HANDLE NdisProtocolHandle,
5238 /*IN*/ NDIS_HANDLE ProtocolBindingContext,
5239 /*IN*/ PNDIS_STRING AdapterName,
5240 /*IN*/ UINT OpenOptions,
5241 /*IN*/ PSTRING AddressingInformation);
5246 NdisOpenProtocolConfiguration(
5247 /*OUT*/ PNDIS_STATUS Status,
5248 /*OUT*/ PNDIS_HANDLE ConfigurationHandle,
5249 /*IN*/ PNDIS_STRING ProtocolSection);
5254 NdisRegisterProtocol(
5255 /*OUT*/ PNDIS_STATUS Status,
5256 /*OUT*/ PNDIS_HANDLE NdisProtocolHandle,
5257 /*IN*/ PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics,
5258 /*IN*/ UINT CharacteristicsLength);
5260 /* Obsoleted in Windows XP */
5262 /* Prototypes for NDIS_MAC_CHARACTERISTICS */
5264 typedef NDIS_STATUS (*OPEN_ADAPTER_HANDLER)(
5265 /*OUT*/ PNDIS_STATUS OpenErrorStatus,
5266 /*OUT*/ NDIS_HANDLE *MacBindingHandle,
5267 /*OUT*/ PUINT SelectedMediumIndex,
5268 /*IN*/ PNDIS_MEDIUM MediumArray,
5269 /*IN*/ UINT MediumArraySize,
5270 /*IN*/ NDIS_HANDLE NdisBindingContext,
5271 /*IN*/ NDIS_HANDLE MacAdapterContext,
5272 /*IN*/ UINT OpenOptions,
5273 /*IN*/ PSTRING AddressingInformation /*OPTIONAL*/);
5275 typedef NDIS_STATUS (DDKAPI *CLOSE_ADAPTER_HANDLER)(
5276 /*IN*/ NDIS_HANDLE MacBindingHandle);
5278 typedef NDIS_STATUS (DDKAPI *WAN_TRANSFER_DATA_HANDLER)(
5281 typedef NDIS_STATUS (DDKAPI *QUERY_GLOBAL_STATISTICS_HANDLER)(
5282 /*IN*/ NDIS_HANDLE MacAdapterContext,
5283 /*IN*/ PNDIS_REQUEST NdisRequest);
5285 typedef VOID (DDKAPI *UNLOAD_MAC_HANDLER)(
5286 /*IN*/ NDIS_HANDLE MacMacContext);
5288 typedef NDIS_STATUS (DDKAPI *ADD_ADAPTER_HANDLER)(
5289 /*IN*/ NDIS_HANDLE MacMacContext,
5290 /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
5291 /*IN*/ PNDIS_STRING AdapterName);
5293 typedef VOID (*REMOVE_ADAPTER_HANDLER)(
5294 /*IN*/ NDIS_HANDLE MacAdapterContext);
5296 typedef struct _NDIS_MAC_CHARACTERISTICS {
5297 UCHAR MajorNdisVersion;
5298 UCHAR MinorNdisVersion;
5300 OPEN_ADAPTER_HANDLER OpenAdapterHandler;
5301 CLOSE_ADAPTER_HANDLER CloseAdapterHandler;
5302 SEND_HANDLER SendHandler;
5303 TRANSFER_DATA_HANDLER TransferDataHandler;
5304 RESET_HANDLER ResetHandler;
5305 REQUEST_HANDLER RequestHandler;
5306 QUERY_GLOBAL_STATISTICS_HANDLER QueryGlobalStatisticsHandler;
5307 UNLOAD_MAC_HANDLER UnloadMacHandler;
5308 ADD_ADAPTER_HANDLER AddAdapterHandler;
5309 REMOVE_ADAPTER_HANDLER RemoveAdapterHandler;
5311 } NDIS_MAC_CHARACTERISTICS, *PNDIS_MAC_CHARACTERISTICS;
5313 typedef NDIS_MAC_CHARACTERISTICS NDIS_WAN_MAC_CHARACTERISTICS;
5314 typedef NDIS_WAN_MAC_CHARACTERISTICS *PNDIS_WAN_MAC_CHARACTERISTICS;
5320 #endif /* __NDIS_H */