2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS NDIS library
4 * FILE: include/net/ndis.h
5 * PURPOSE: Structures used by NDIS drivers
6 * DEFINES: i386 - Target platform is i386
7 * NDIS_WRAPPER - Define only for NDIS wrapper library
8 * NDIS_MINIPORT_DRIVER - Define only for NDIS miniport drivers
9 * NDIS40 - Use NDIS 4.0 structures by default
10 * NDIS50 - Use NDIS 5.0 structures by default
11 * NDIS_WDM - Include wdm.h (currently just pulls in ntddk.h)
13 * NOTES: If NDIS_WDM is not defined, ntddk.h is included instead
15 * I have removed the following standard flag, used for building binary-compatible
16 * drivers for windows 98 and windows me:
18 * BINARY_COMPATIBLE - 0 = Use macros for some features
19 * - 1 = Use imports for features not available
21 * rationale: you're never going to use *this* ndis.h to build a driver for win9x. You'll
22 * use the MS ddk. This assumption drammatically simplifies ndis.h.
25 // TODO: finish sanitizing NDIS40 and NDIS50; think about NDIS51
33 #endif /* __cplusplus */
45 #define FASTCALL __attribute__((fastcall))
48 /* The NDIS library exports functions. NDIS miniport drivers import functions */
52 #define EXPIMP __declspec(dllexport)
54 #define EXPIMP STDCALL /* MS ndis.h is 100% stdcall due to compiler flag /Gz */
57 #else /* NDIS_WRAPPER */
60 #define EXPIMP __declspec(dllimport)
62 #define EXPIMP STDCALL
65 #endif /* NDIS_WRAPPER */
67 /* support NDIS_WDM and MAC drivers */
68 #if defined (NDIS_WDM)
79 PVOID FailedAssertion,
85 #define ASSERT( exp ) if (!(exp)) RtlAssert( #exp, __FILE__, __LINE__, NULL )
86 #define ASSERTMSG( msg, exp ) if (!(exp)) RtlAssert( #exp, __FILE__, __LINE__, msg )
90 #define ASSERTMSG( msg, exp )
99 typedef CONST CHAR *PCSTR;
101 typedef struct _DMA_CONFIGURATION_BYTE0
107 } DMA_CONFIGURATION_BYTE0;
109 typedef struct _DMA_CONFIGURATION_BYTE1
112 UCHAR TransferSize:2;
115 } DMA_CONFIGURATION_BYTE1;
118 typedef struct _EISA_MEMORY_TYPE
127 } EISA_MEMORY_TYPE, *PEISA_MEMORY_TYPE;
129 typedef struct _EISA_MEMORY_CONFIGURATION
131 EISA_MEMORY_TYPE ConfigurationByte;
133 USHORT AddressLowWord;
134 UCHAR AddressHighByte;
136 } EISA_MEMORY_CONFIGURATION, *PEISA_MEMORY_CONFIGURATION;
139 typedef struct _EISA_IRQ_DESCRIPTOR
143 UCHAR LevelTriggered:1;
146 } EISA_IRQ_DESCRIPTOR, *PEISA_IRQ_DESCRIPTOR;
148 typedef struct _EISA_IRQ_CONFIGURATION
150 EISA_IRQ_DESCRIPTOR ConfigurationByte;
152 } EISA_IRQ_CONFIGURATION, *PEISA_IRQ_CONFIGURATION;
154 typedef struct _EISA_DMA_CONFIGURATION
156 DMA_CONFIGURATION_BYTE0 ConfigurationByte0;
157 DMA_CONFIGURATION_BYTE1 ConfigurationByte1;
158 } EISA_DMA_CONFIGURATION, *PEISA_DMA_CONFIGURATION;
161 typedef struct _EISA_PORT_DESCRIPTOR
167 } EISA_PORT_DESCRIPTOR, *PEISA_PORT_DESCRIPTOR;
169 typedef struct _EISA_PORT_CONFIGURATION
171 EISA_PORT_DESCRIPTOR Configuration;
173 } EISA_PORT_CONFIGURATION, *PEISA_PORT_CONFIGURATION;
175 typedef struct _CM_EISA_SLOT_INFORMATION
182 UCHAR NumberFunctions;
183 UCHAR FunctionInformation;
185 } CM_EISA_SLOT_INFORMATION, *PCM_EISA_SLOT_INFORMATION;
187 typedef struct _CM_EISA_FUNCTION_INFORMATION
194 UCHAR Selections[26];
196 UCHAR TypeString[80];
197 EISA_MEMORY_CONFIGURATION EisaMemory[9];
198 EISA_IRQ_CONFIGURATION EisaIrq[7];
199 EISA_DMA_CONFIGURATION EisaDma[4];
200 EISA_PORT_CONFIGURATION EisaPort[20];
201 UCHAR InitializationData[60];
202 } CM_EISA_FUNCTION_INFORMATION, *PCM_EISA_FUNCTION_INFORMATION;
204 ULONG CDECL DbgPrint(
209 /* Core kernel functions */
213 KeStallExecutionProcessor(
217 #include "netevent.h"
219 #include "ntddndis.h"
222 #if !defined(_MSC_VER)
223 #ifndef _GUID_DEFINED
224 #define _GUID_DEFINED
225 typedef struct _GUID {
231 #endif /* _GUID_DEFINED */
232 #endif /* _MSC_VER */
235 /* NDIS base types */
237 typedef struct _NDIS_SPIN_LOCK
241 } NDIS_SPIN_LOCK, * PNDIS_SPIN_LOCK;
243 typedef struct _NDIS_EVENT
246 } NDIS_EVENT, *PNDIS_EVENT;
248 typedef PVOID NDIS_HANDLE, *PNDIS_HANDLE;
249 typedef int NDIS_STATUS, *PNDIS_STATUS;
251 typedef UNICODE_STRING NDIS_STRING, *PNDIS_STRING;
253 typedef MDL NDIS_BUFFER, *PNDIS_BUFFER;
255 /* NDIS_STATUS constants */
256 #define NDIS_STATUS_SUCCESS ((NDIS_STATUS)STATUS_SUCCESS)
257 #define NDIS_STATUS_PENDING ((NDIS_STATUS)STATUS_PENDING)
258 #define NDIS_STATUS_NOT_RECOGNIZED ((NDIS_STATUS)0x00010001L)
259 #define NDIS_STATUS_NOT_COPIED ((NDIS_STATUS)0x00010002L)
260 #define NDIS_STATUS_NOT_ACCEPTED ((NDIS_STATUS)0x00010003L)
261 #define NDIS_STATUS_CALL_ACTIVE ((NDIS_STATUS)0x00010007L)
263 #define NDIS_STATUS_ONLINE ((NDIS_STATUS)0x40010003L)
264 #define NDIS_STATUS_RESET_START ((NDIS_STATUS)0x40010004L)
265 #define NDIS_STATUS_RESET_END ((NDIS_STATUS)0x40010005L)
266 #define NDIS_STATUS_RING_STATUS ((NDIS_STATUS)0x40010006L)
267 #define NDIS_STATUS_CLOSED ((NDIS_STATUS)0x40010007L)
268 #define NDIS_STATUS_WAN_LINE_UP ((NDIS_STATUS)0x40010008L)
269 #define NDIS_STATUS_WAN_LINE_DOWN ((NDIS_STATUS)0x40010009L)
270 #define NDIS_STATUS_WAN_FRAGMENT ((NDIS_STATUS)0x4001000AL)
271 #define NDIS_STATUS_MEDIA_CONNECT ((NDIS_STATUS)0x4001000BL)
272 #define NDIS_STATUS_MEDIA_DISCONNECT ((NDIS_STATUS)0x4001000CL)
273 #define NDIS_STATUS_HARDWARE_LINE_UP ((NDIS_STATUS)0x4001000DL)
274 #define NDIS_STATUS_HARDWARE_LINE_DOWN ((NDIS_STATUS)0x4001000EL)
275 #define NDIS_STATUS_INTERFACE_UP ((NDIS_STATUS)0x4001000FL)
276 #define NDIS_STATUS_INTERFACE_DOWN ((NDIS_STATUS)0x40010010L)
277 #define NDIS_STATUS_MEDIA_BUSY ((NDIS_STATUS)0x40010011L)
278 #define NDIS_STATUS_WW_INDICATION ((NDIS_STATUS)0x40010012L)
279 #define NDIS_STATUS_TAPI_INDICATION ((NDIS_STATUS)0x40010080L)
281 #define NDIS_STATUS_NOT_RESETTABLE ((NDIS_STATUS)0x80010001L)
282 #define NDIS_STATUS_SOFT_ERRORS ((NDIS_STATUS)0x80010003L)
283 #define NDIS_STATUS_HARD_ERRORS ((NDIS_STATUS)0x80010004L)
284 #define NDIS_STATUS_BUFFER_OVERFLOW ((NDIS_STATUS)STATUS_BUFFER_OVERFLOW)
286 #define NDIS_STATUS_FAILURE ((NDIS_STATUS)STATUS_UNSUCCESSFUL)
287 #define NDIS_STATUS_RESOURCES ((NDIS_STATUS)STATUS_INSUFFICIENT_RESOURCES)
288 #define NDIS_STATUS_CLOSING ((NDIS_STATUS)0xC0010002L)
289 #define NDIS_STATUS_BAD_VERSION ((NDIS_STATUS)0xC0010004L)
290 #define NDIS_STATUS_BAD_CHARACTERISTICS ((NDIS_STATUS)0xC0010005L)
291 #define NDIS_STATUS_ADAPTER_NOT_FOUND ((NDIS_STATUS)0xC0010006L)
292 #define NDIS_STATUS_OPEN_FAILED ((NDIS_STATUS)0xC0010007L)
293 #define NDIS_STATUS_DEVICE_FAILED ((NDIS_STATUS)0xC0010008L)
294 #define NDIS_STATUS_MULTICAST_FULL ((NDIS_STATUS)0xC0010009L)
295 #define NDIS_STATUS_MULTICAST_EXISTS ((NDIS_STATUS)0xC001000AL)
296 #define NDIS_STATUS_MULTICAST_NOT_FOUND ((NDIS_STATUS)0xC001000BL)
297 #define NDIS_STATUS_REQUEST_ABORTED ((NDIS_STATUS)0xC001000CL)
298 #define NDIS_STATUS_RESET_IN_PROGRESS ((NDIS_STATUS)0xC001000DL)
299 #define NDIS_STATUS_CLOSING_INDICATING ((NDIS_STATUS)0xC001000EL)
300 #define NDIS_STATUS_NOT_SUPPORTED ((NDIS_STATUS)STATUS_NOT_SUPPORTED)
301 #define NDIS_STATUS_INVALID_PACKET ((NDIS_STATUS)0xC001000FL)
302 #define NDIS_STATUS_OPEN_LIST_FULL ((NDIS_STATUS)0xC0010010L)
303 #define NDIS_STATUS_ADAPTER_NOT_READY ((NDIS_STATUS)0xC0010011L)
304 #define NDIS_STATUS_ADAPTER_NOT_OPEN ((NDIS_STATUS)0xC0010012L)
305 #define NDIS_STATUS_NOT_INDICATING ((NDIS_STATUS)0xC0010013L)
306 #define NDIS_STATUS_INVALID_LENGTH ((NDIS_STATUS)0xC0010014L)
307 #define NDIS_STATUS_INVALID_DATA ((NDIS_STATUS)0xC0010015L)
308 #define NDIS_STATUS_BUFFER_TOO_SHORT ((NDIS_STATUS)0xC0010016L)
309 #define NDIS_STATUS_INVALID_OID ((NDIS_STATUS)0xC0010017L)
310 #define NDIS_STATUS_ADAPTER_REMOVED ((NDIS_STATUS)0xC0010018L)
311 #define NDIS_STATUS_UNSUPPORTED_MEDIA ((NDIS_STATUS)0xC0010019L)
312 #define NDIS_STATUS_GROUP_ADDRESS_IN_USE ((NDIS_STATUS)0xC001001AL)
313 #define NDIS_STATUS_FILE_NOT_FOUND ((NDIS_STATUS)0xC001001BL)
314 #define NDIS_STATUS_ERROR_READING_FILE ((NDIS_STATUS)0xC001001CL)
315 #define NDIS_STATUS_ALREADY_MAPPED ((NDIS_STATUS)0xC001001DL)
316 #define NDIS_STATUS_RESOURCE_CONFLICT ((NDIS_STATUS)0xC001001EL)
317 #define NDIS_STATUS_NO_CABLE ((NDIS_STATUS)0xC001001FL)
319 #define NDIS_STATUS_INVALID_SAP ((NDIS_STATUS)0xC0010020L)
320 #define NDIS_STATUS_SAP_IN_USE ((NDIS_STATUS)0xC0010021L)
321 #define NDIS_STATUS_INVALID_ADDRESS ((NDIS_STATUS)0xC0010022L)
322 #define NDIS_STATUS_VC_NOT_ACTIVATED ((NDIS_STATUS)0xC0010023L)
323 #define NDIS_STATUS_DEST_OUT_OF_ORDER ((NDIS_STATUS)0xC0010024L)
324 #define NDIS_STATUS_VC_NOT_AVAILABLE ((NDIS_STATUS)0xC0010025L)
325 #define NDIS_STATUS_CELLRATE_NOT_AVAILABLE ((NDIS_STATUS)0xC0010026L)
326 #define NDIS_STATUS_INCOMPATABLE_QOS ((NDIS_STATUS)0xC0010027L)
327 #define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED ((NDIS_STATUS)0xC0010028L)
328 #define NDIS_STATUS_NO_ROUTE_TO_DESTINATION ((NDIS_STATUS)0xC0010029L)
330 #define NDIS_STATUS_TOKEN_RING_OPEN_ERROR ((NDIS_STATUS)0xC0011000L)
333 /* NDIS error codes for error logging */
335 #define NDIS_ERROR_CODE ULONG
337 #define NDIS_ERROR_CODE_RESOURCE_CONFLICT EVENT_NDIS_RESOURCE_CONFLICT
338 #define NDIS_ERROR_CODE_OUT_OF_RESOURCES EVENT_NDIS_OUT_OF_RESOURCE
339 #define NDIS_ERROR_CODE_HARDWARE_FAILURE EVENT_NDIS_HARDWARE_FAILURE
340 #define NDIS_ERROR_CODE_ADAPTER_NOT_FOUND EVENT_NDIS_ADAPTER_NOT_FOUND
341 #define NDIS_ERROR_CODE_INTERRUPT_CONNECT EVENT_NDIS_INTERRUPT_CONNECT
342 #define NDIS_ERROR_CODE_DRIVER_FAILURE EVENT_NDIS_DRIVER_FAILURE
343 #define NDIS_ERROR_CODE_BAD_VERSION EVENT_NDIS_BAD_VERSION
344 #define NDIS_ERROR_CODE_TIMEOUT EVENT_NDIS_TIMEOUT
345 #define NDIS_ERROR_CODE_NETWORK_ADDRESS EVENT_NDIS_NETWORK_ADDRESS
346 #define NDIS_ERROR_CODE_UNSUPPORTED_CONFIGURATION EVENT_NDIS_UNSUPPORTED_CONFIGURATION
347 #define NDIS_ERROR_CODE_INVALID_VALUE_FROM_ADAPTER EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER
348 #define NDIS_ERROR_CODE_MISSING_CONFIGURATION_PARAMETER EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER
349 #define NDIS_ERROR_CODE_BAD_IO_BASE_ADDRESS EVENT_NDIS_BAD_IO_BASE_ADDRESS
350 #define NDIS_ERROR_CODE_RECEIVE_SPACE_SMALL EVENT_NDIS_RECEIVE_SPACE_SMALL
351 #define NDIS_ERROR_CODE_ADAPTER_DISABLED EVENT_NDIS_ADAPTER_DISABLED
354 /* Memory allocation flags. Used by Ndis(Allocate|Free)Memory */
355 #define NDIS_MEMORY_CONTIGUOUS 0x00000001
356 #define NDIS_MEMORY_NONCACHED 0x00000002
358 /* NIC attribute flags. Used by NdisMSetAttributes(Ex) */
359 #define NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT 0x00000001
360 #define NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT 0x00000002
361 #define NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS 0x00000004
362 #define NDIS_ATTRIBUTE_BUS_MASTER 0x00000008
363 #define NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER 0x00000010
364 #define NDIS_ATTRIBUTE_DESERIALIZE 0x00000020
368 #define MAXIMUM_PROCESSORS 32
374 typedef union _NDIS_RW_LOCK_REFCOUNT
378 } NDIS_RW_LOCK_REFCOUNT;
380 typedef struct _NDIS_RW_LOCK
392 NDIS_RW_LOCK_REFCOUNT RefCount[MAXIMUM_PROCESSORS];
393 } NDIS_RW_LOCK, *PNDIS_RW_LOCK;
395 typedef struct _LOCK_STATE
399 } LOCK_STATE, *PLOCK_STATE;
405 typedef VOID (*PNDIS_TIMER_FUNCTION)(
406 IN PVOID SystemSpecific1,
407 IN PVOID FunctionContext,
408 IN PVOID SystemSpecific2,
409 IN PVOID SystemSpecific3);
411 typedef struct _NDIS_TIMER
415 } NDIS_TIMER, *PNDIS_TIMER;
420 IN OUT PNDIS_TIMER Timer,
421 IN PNDIS_TIMER_FUNCTION TimerFunction,
422 IN PVOID FunctionContext);
427 IN PNDIS_TIMER Timer,
428 IN UINT MillisecondsToDelay);
432 typedef CM_MCA_POS_DATA NDIS_MCA_POS_DATA, *PNDIS_MCA_POS_DATA;
433 typedef CM_EISA_SLOT_INFORMATION NDIS_EISA_SLOT_INFORMATION, *PNDIS_EISA_SLOT_INFORMATION;
434 typedef CM_EISA_FUNCTION_INFORMATION NDIS_EISA_FUNCTION_INFORMATION, *PNDIS_EISA_FUNCTION_INFORMATION;
435 typedef CM_PARTIAL_RESOURCE_LIST NDIS_RESOURCE_LIST, *PNDIS_RESOURCE_LIST;
437 /* Hardware status codes (OID_GEN_HARDWARE_STATUS) */
438 typedef enum _NDIS_HARDWARE_STATUS
440 NdisHardwareStatusReady,
441 NdisHardwareStatusInitializing,
442 NdisHardwareStatusReset,
443 NdisHardwareStatusClosing,
444 NdisHardwareStatusNotReady
445 } NDIS_HARDWARE_STATUS, *PNDIS_HARDWARE_STATUS;
447 /* OID_GEN_GET_TIME_CAPS */
448 typedef struct _GEN_GET_TIME_CAPS
451 ULONG ClockPrecision;
452 } GEN_GET_TIME_CAPS, *PGEN_GET_TIME_CAPS;
455 #define READABLE_LOCAL_CLOCK 0x00000001
456 #define CLOCK_NETWORK_DERIVED 0x00000002
457 #define CLOCK_PRECISION 0x00000004
458 #define RECEIVE_TIME_INDICATION_CAPABLE 0x00000008
459 #define TIMED_SEND_CAPABLE 0x00000010
460 #define TIME_STAMP_CAPABLE 0x00000020
462 /* OID_GEN_GET_NETCARD_TIME */
463 typedef struct _GEN_GET_NETCARD_TIME
466 } GEN_GET_NETCARD_TIME, *PGEN_GET_NETCARD_TIME;
468 /* NDIS driver medium (OID_GEN_MEDIA_SUPPORTED / OID_GEN_MEDIA_IN_USE) */
469 typedef enum _NDIS_MEDIUM
476 NdisMediumDix, /* Defined for convenience, not a real medium */
478 NdisMediumArcnet878_2,
480 NdisMediumWirelessWan,
486 } NDIS_MEDIUM, *PNDIS_MEDIUM;
488 /* NDIS packet filter bits (OID_GEN_CURRENT_PACKET_FILTER) */
489 #define NDIS_PACKET_TYPE_DIRECTED 0x00000001
490 #define NDIS_PACKET_TYPE_MULTICAST 0x00000002
491 #define NDIS_PACKET_TYPE_ALL_MULTICAST 0x00000004
492 #define NDIS_PACKET_TYPE_BROADCAST 0x00000008
493 #define NDIS_PACKET_TYPE_SOURCE_ROUTING 0x00000010
494 #define NDIS_PACKET_TYPE_PROMISCUOUS 0x00000020
495 #define NDIS_PACKET_TYPE_SMT 0x00000040
496 #define NDIS_PACKET_TYPE_ALL_LOCAL 0x00000080
497 #define NDIS_PACKET_TYPE_GROUP 0x00001000
498 #define NDIS_PACKET_TYPE_ALL_FUNCTIONAL 0x00002000
499 #define NDIS_PACKET_TYPE_FUNCTIONAL 0x00004000
500 #define NDIS_PACKET_TYPE_MAC_FRAME 0x00008000
502 /* NDIS protocol option bits (OID_GEN_PROTOCOL_OPTIONS) */
503 #define NDIS_PROT_OPTION_ESTIMATED_LENGTH 0x00000001
504 #define NDIS_PROT_OPTION_NO_LOOPBACK 0x00000002
505 #define NDIS_PROT_OPTION_NO_RSVD_ON_RCVPKT 0x00000004
507 /* NDIS MAC option bits (OID_GEN_MAC_OPTIONS) */
508 #define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA 0x00000001
509 #define NDIS_MAC_OPTION_RECEIVE_SERIALIZED 0x00000002
510 #define NDIS_MAC_OPTION_TRANSFERS_NOT_PEND 0x00000004
511 #define NDIS_MAC_OPTION_NO_LOOPBACK 0x00000008
512 #define NDIS_MAC_OPTION_FULL_DUPLEX 0x00000010
513 #define NDIS_MAC_OPTION_EOTX_INDICATION 0x00000020
514 #define NDIS_MAC_OPTION_8021P_PRIORITY 0x00000040
515 #define NDIS_MAC_OPTION_RESERVED 0x80000000
517 /* State of the LAN media (OID_GEN_MEDIA_CONNECT_STATUS) */
518 typedef enum _NDIS_MEDIA_STATE
520 NdisMediaStateConnected,
521 NdisMediaStateDisconnected
522 } NDIS_MEDIA_STATE, *PNDIS_MEDIA_STATE;
524 /* OID_GEN_SUPPORTED_GUIDS */
525 typedef struct _NDIS_GUID
535 } NDIS_GUID, *PNDIS_GUID;
537 #define NDIS_GUID_TO_OID 0x00000001
538 #define NDIS_GUID_TO_STATUS 0x00000002
539 #define NDIS_GUID_ANSI_STRING 0x00000004
540 #define NDIS_GUID_UNICODE_STRING 0x00000008
541 #define NDIS_GUID_ARRAY 0x00000010
545 typedef struct _NDIS_PACKET_POOL
547 NDIS_SPIN_LOCK SpinLock;
548 struct _NDIS_PACKET *FreeList;
551 } NDIS_PACKET_POOL, * PNDIS_PACKET_POOL;
553 typedef struct _NDIS_PACKET_PRIVATE
559 PNDIS_PACKET_POOL Pool;
561 ULONG Flags; /* See fPACKET_xxx bits below */
563 UCHAR NdisPacketFlags;
564 USHORT NdisPacketOobOffset;
565 } NDIS_PACKET_PRIVATE, * PNDIS_PACKET_PRIVATE;
567 #define fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO 0x40
568 #define fPACKET_ALLOCATED_BY_NDIS 0x80
570 typedef struct _NDIS_PACKET {
571 NDIS_PACKET_PRIVATE Private;
574 UCHAR MiniportReserved[2*sizeof(PVOID)];
575 UCHAR WrapperReserved[2*sizeof(PVOID)];
578 UCHAR MiniportReservedEx[3*sizeof(PVOID)];
579 UCHAR WrapperReservedEx[sizeof(PVOID)];
582 UCHAR MacReserved[4*sizeof(PVOID)];
585 ULONG_PTR Reserved[2];
586 UCHAR ProtocolReserved[1];
587 } NDIS_PACKET, *PNDIS_PACKET, **PPNDIS_PACKET;
589 typedef struct _NDIS_PACKET_OOB_DATA {
591 ULONGLONG TimeToSend;
594 ULONGLONG TimeReceived;
596 UINT SizeMediaSpecificInfo;
597 PVOID MediaSpecificInformation;
599 } NDIS_PACKET_OOB_DATA, *PNDIS_PACKET_OOB_DATA;
601 typedef struct _NDIS_PM_PACKET_PATTERN
609 } NDIS_PM_PACKET_PATTERN, *PNDIS_PM_PACKET_PATTERN;
612 /* Request types used by NdisRequest */
613 typedef enum _NDIS_REQUEST_TYPE
615 NdisRequestQueryInformation,
616 NdisRequestSetInformation,
617 NdisRequestQueryStatistics,
621 NdisRequestTransferData,
627 } NDIS_REQUEST_TYPE, *PNDIS_REQUEST_TYPE;
629 typedef struct _NDIS_REQUEST {
630 UCHAR MacReserved[16];
631 NDIS_REQUEST_TYPE RequestType;
633 struct QUERY_INFORMATION {
635 PVOID InformationBuffer;
636 UINT InformationBufferLength;
640 struct SET_INFORMATION {
642 PVOID InformationBuffer;
643 UINT InformationBufferLength;
649 UCHAR NdisReserved[36];
651 UCHAR CallMgrReserved[8];
652 UCHAR ProtocolReserved[8];
654 UCHAR MiniportReserved[8];
656 } NDIS_REQUEST, *PNDIS_REQUEST;
660 /* Wide Area Networks definitions */
662 typedef struct _NDIS_WAN_PACKET
664 LIST_ENTRY WanPacketQueue;
665 PUCHAR CurrentBuffer;
669 PVOID ProtocolReserved1;
670 PVOID ProtocolReserved2;
671 PVOID ProtocolReserved3;
672 PVOID ProtocolReserved4;
677 } NDIS_WAN_PACKET, *PNDIS_WAN_PACKET;
681 /* DMA channel information */
683 typedef struct _NDIS_DMA_DESCRIPTION
686 BOOLEAN AutoInitialize;
687 BOOLEAN DmaChannelSpecified;
692 } NDIS_DMA_DESCRIPTION, *PNDIS_DMA_DESCRIPTION;
694 typedef struct _NDIS_DMA_BLOCK
696 PVOID MapRegisterBase;
697 KEVENT AllocationEvent;
698 PADAPTER_OBJECT SystemAdapterObject;
700 } NDIS_DMA_BLOCK, *PNDIS_DMA_BLOCK;
702 #define NDIS_DMA_24BITS 0
703 #define NDIS_DMA_32BITS 1
704 #define NDIS_DMA_64BITS 2
706 /* Possible hardware architecture */
707 typedef enum _NDIS_INTERFACE_TYPE
709 NdisInterfaceInternal = Internal,
710 NdisInterfaceIsa = Isa,
711 NdisInterfaceEisa = Eisa,
712 NdisInterfaceMca = MicroChannel,
713 NdisInterfaceTurboChannel = TurboChannel,
714 NdisInterfacePci = PCIBus,
715 NdisInterfacePcMcia = PCMCIABus
716 } NDIS_INTERFACE_TYPE, *PNDIS_INTERFACE_TYPE;
718 #define NdisInterruptLevelSensitive LevelSensitive
719 #define NdisInterruptLatched Latched
720 typedef KINTERRUPT_MODE NDIS_INTERRUPT_MODE, *PNDIS_INTERRUPT_MODE;
722 typedef enum _NDIS_PROCESSOR_TYPE
728 } NDIS_PROCESSOR_TYPE, *PNDIS_PROCESSOR_TYPE;
730 typedef enum _NDIS_ENVIRONMENT_TYPE
732 NdisEnvironmentWindows,
733 NdisEnvironmentWindowsNt
734 } NDIS_ENVIRONMENT_TYPE, *PNDIS_ENVIRONMENT_TYPE;
736 typedef enum _NDIS_PARAMETER_TYPE
738 NdisParameterInteger,
739 NdisParameterHexInteger,
741 NdisParameterMultiString,
743 } NDIS_PARAMETER_TYPE, *PNDIS_PARAMETER_TYPE;
751 typedef struct _NDIS_CONFIGURATION_PARAMETER
753 NDIS_PARAMETER_TYPE ParameterType;
757 NDIS_STRING StringData;
758 BINARY_DATA BinaryData;
760 } NDIS_CONFIGURATION_PARAMETER, *PNDIS_CONFIGURATION_PARAMETER;
762 typedef PHYSICAL_ADDRESS NDIS_PHYSICAL_ADDRESS, *PNDIS_PHYSICAL_ADDRESS;
764 typedef struct _NDIS_PHYSICAL_ADDRESS_UNIT
766 NDIS_PHYSICAL_ADDRESS PhysicalAddress;
768 } NDIS_PHYSICAL_ADDRESS_UNIT, *PNDIS_PHYSICAL_ADDRESS_UNIT;
771 typedef VOID (*ADAPTER_SHUTDOWN_HANDLER)(
772 IN PVOID ShutdownContext);
778 typedef struct _OID_LIST OID_LIST, *POID_LIST;
782 typedef enum _NDIS_PNP_DEVICE_STATE
785 NdisPnPDeviceStarted,
786 NdisPnPDeviceQueryStopped,
787 NdisPnPDeviceStopped,
788 NdisPnPDeviceQueryRemoved,
789 NdisPnPDeviceRemoved,
790 NdisPnPDeviceSurpriseRemoved
791 } NDIS_PNP_DEVICE_STATE;
793 #define NDIS_DEVICE_NOT_STOPPABLE 0x00000001
794 #define NDIS_DEVICE_NOT_REMOVEABLE 0x00000002
795 #define NDIS_DEVICE_NOT_SUSPENDABLE 0x00000004
796 #define NDIS_DEVICE_DISABLE_PM 0x00000008
797 #define NDIS_DEVICE_DISABLE_WAKE_UP 0x00000010
798 #define NDIS_DEVICE_DISABLE_WAKE_ON_RECONNECT 0x00000020
800 #endif /* NDIS_WRAPPER */
803 typedef struct _ATM_ADDRESS ATM_ADDRESS, *PATM_ADDRESS;
806 /* OID_GEN_NETWORK_LAYER_ADDRESSES */
807 typedef struct _NETWORK_ADDRESS
809 USHORT AddressLength;
812 } NETWORK_ADDRESS, *PNETWORK_ADDRESS;
814 typedef struct _NETWORK_ADDRESS_LIST
818 NETWORK_ADDRESS Address[1];
819 } NETWORK_ADDRESS_LIST, *PNETWORK_ADDRESS_LIST;
821 /* Protocol types supported by NDIS */
822 #define NDIS_PROTOCOL_ID_DEFAULT 0x00
823 #define NDIS_PROTOCOL_ID_TCP_IP 0x02
824 #define NDIS_PROTOCOL_ID_IPX 0x06
825 #define NDIS_PROTOCOL_ID_NBF 0x07
826 #define NDIS_PROTOCOL_ID_MAX 0x0F
827 #define NDIS_PROTOCOL_ID_MASK 0x0F
829 /* OID_GEN_TRANSPORT_HEADER_OFFSET */
830 typedef struct _TRANSPORT_HEADER_OFFSET
834 } TRANSPORT_HEADER_OFFSET, *PTRANSPORT_HEADER_OFFSET;
837 /* OID_GEN_CO_LINK_SPEED / OID_GEN_CO_MINIMUM_LINK_SPEED */
838 typedef struct _NDIS_CO_LINK_SPEED
842 } NDIS_CO_LINK_SPEED, *PNDIS_CO_LINK_SPEED;
845 typedef enum _NDIS_AF
847 CO_ADDRESS_FAMILY_Q2931 = 1,
848 CO_ADDRESS_FAMILY_SPANS,
849 } NDIS_AF, *PNDIS_AF;
853 NDIS_AF AddressFamily;
856 } CO_ADDRESS_FAMILY, *PCO_ADDRESS_FAMILY;
865 typedef struct _CO_FLOW_PARAMETERS
867 ULONG TokenRate; /* In Bytes/sec */
868 ULONG TokenBucketSize; /* In Bytes */
869 ULONG PeakBandwidth; /* In Bytes/sec */
870 ULONG Latency; /* In microseconds */
871 ULONG DelayVariation; /* In microseconds */
872 GUARANTEE LevelOfGuarantee; /* Guaranteed, Predictive or Best Effort */
873 ULONG CostOfCall; /* Reserved for future use, */
874 /* must be set to 0 now */
875 ULONG NetworkAvailability; /* read-only: 1 if accessible, 0 if not */
876 ULONG MaxSduSize; /* In Bytes */
877 } CO_FLOW_PARAMETERS, *PCO_FLOW_PARAMETERS;
879 typedef struct _CO_SPECIFIC_PARAMETERS
884 } CO_SPECIFIC_PARAMETERS, *PCO_SPECIFIC_PARAMETERS;
886 typedef struct _CO_CALL_MANAGER_PARAMETERS {
887 CO_FLOW_PARAMETERS Transmit;
888 CO_FLOW_PARAMETERS Receive;
889 CO_SPECIFIC_PARAMETERS CallMgrSpecific;
890 } CO_CALL_MANAGER_PARAMETERS, *PCO_CALL_MANAGER_PARAMETERS;
892 typedef struct _CO_MEDIA_PARAMETERS
895 ULONG ReceivePriority;
896 ULONG ReceiveSizeHint;
897 CO_SPECIFIC_PARAMETERS MediaSpecific;
898 } CO_MEDIA_PARAMETERS, *PCO_MEDIA_PARAMETERS;
900 /* Definitions for the flags in CO_MEDIA_PARAMETERS */
901 #define RECEIVE_TIME_INDICATION 0x00000001
902 #define USE_TIME_STAMPS 0x00000002
903 #define TRANSMIT_VC 0x00000004
904 #define RECEIVE_VC 0x00000008
905 #define INDICATE_ERRED_PACKETS 0x00000010
906 #define INDICATE_END_OF_TX 0x00000020
907 #define RESERVE_RESOURCES_VC 0x00000040
908 #define ROUND_DOWN_FLOW 0x00000080
909 #define ROUND_UP_FLOW 0x00000100
911 typedef struct _CO_CALL_PARAMETERS
914 PCO_CALL_MANAGER_PARAMETERS CallMgrParameters;
915 PCO_MEDIA_PARAMETERS MediaParameters;
916 } CO_CALL_PARAMETERS, *PCO_CALL_PARAMETERS;
918 typedef struct _CO_SAP {
924 typedef struct _NDIS_IPSEC_PACKET_INFO
930 NDIS_HANDLE OffloadHandle;
931 NDIS_HANDLE NextOffloadHandle;
936 ULONG SA_DELETE_REQ:1;
938 ULONG NEXT_CRYPTO_DONE:1;
942 } NDIS_IPSEC_PACKET_INFO, *PNDIS_IPSEC_PACKET_INFO;
945 /* Plug and play and power management */
947 /* PnP and PM event codes */
948 typedef enum _NET_PNP_EVENT_CODE
952 NetEventQueryRemoveDevice,
953 NetEventCancelRemoveDevice,
956 NetEventBindsComplete,
957 NetEventPnPCapabilities,
959 } NET_PNP_EVENT_CODE, *PNET_PNP_EVENT_CODE;
961 /* Networking PnP event indication structure */
962 typedef struct _NET_PNP_EVENT
965 NET_PNP_EVENT_CODE NetEvent;
966 /* Event specific data */
968 /* Length of event specific data */
972 ULONG_PTR NdisReserved[4];
973 ULONG_PTR TransportReserved[4];
974 ULONG_PTR TdiReserved[4];
975 ULONG_PTR TdiClientReserved[4];
976 } NET_PNP_EVENT, *PNET_PNP_EVENT;
978 /* Device power state structure */
979 typedef enum _NET_DEVICE_POWER_STATE
981 NetDeviceStateUnspecified = 0,
986 NetDeviceStateMaximum
987 } NET_DEVICE_POWER_STATE, *PNET_DEVICE_POWER_STATE;
993 typedef NDIS_STATUS (*CO_CREATE_VC_HANDLER)(
994 IN NDIS_HANDLE ProtocolAfContext,
995 IN NDIS_HANDLE NdisVcHandle,
996 OUT PNDIS_HANDLE ProtocolVcContext);
998 typedef NDIS_STATUS (*CO_DELETE_VC_HANDLER)(
999 IN NDIS_HANDLE ProtocolVcContext);
1001 typedef NDIS_STATUS (*CO_REQUEST_HANDLER)(
1002 IN NDIS_HANDLE ProtocolAfContext,
1003 IN NDIS_HANDLE ProtocolVcContext OPTIONAL,
1004 IN NDIS_HANDLE ProtocolPartyContext OPTIONAL,
1005 IN OUT PNDIS_REQUEST NdisRequest);
1007 typedef VOID (*CO_REQUEST_COMPLETE_HANDLER)(
1008 IN NDIS_STATUS Status,
1009 IN NDIS_HANDLE ProtocolAfContext OPTIONAL,
1010 IN NDIS_HANDLE ProtocolVcContext OPTIONAL,
1011 IN NDIS_HANDLE ProtocolPartyContext OPTIONAL,
1012 IN PNDIS_REQUEST NdisRequest);
1015 typedef NDIS_STATUS (*CM_OPEN_AF_HANDLER)(
1016 IN NDIS_HANDLE CallMgrBindingContext,
1017 IN PCO_ADDRESS_FAMILY AddressFamily,
1018 IN NDIS_HANDLE NdisAfHandle,
1019 OUT PNDIS_HANDLE CallMgrAfContext
1024 (*CM_CLOSE_AF_HANDLER)(
1025 IN NDIS_HANDLE CallMgrAfContext
1030 (*CM_REG_SAP_HANDLER)(
1031 IN NDIS_HANDLE CallMgrAfContext,
1033 IN NDIS_HANDLE NdisSapHandle,
1034 OUT PNDIS_HANDLE CallMgrSapContext
1039 (*CM_DEREG_SAP_HANDLER)(
1040 IN NDIS_HANDLE CallMgrSapContext
1045 (*CM_MAKE_CALL_HANDLER)(
1046 IN NDIS_HANDLE CallMgrVcContext,
1047 IN OUT PCO_CALL_PARAMETERS CallParameters,
1048 IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
1049 OUT PNDIS_HANDLE CallMgrPartyContext OPTIONAL
1054 (*CM_CLOSE_CALL_HANDLER)(
1055 IN NDIS_HANDLE CallMgrVcContext,
1056 IN NDIS_HANDLE CallMgrPartyContext OPTIONAL,
1057 IN PVOID CloseData OPTIONAL,
1058 IN UINT Size OPTIONAL
1063 (*CM_INCOMING_CALL_COMPLETE_HANDLER)(
1064 IN NDIS_STATUS Status,
1065 IN NDIS_HANDLE CallMgrVcContext,
1066 IN PCO_CALL_PARAMETERS CallParameters
1071 (*CM_ADD_PARTY_HANDLER)(
1072 IN NDIS_HANDLE CallMgrVcContext,
1073 IN OUT PCO_CALL_PARAMETERS CallParameters,
1074 IN NDIS_HANDLE NdisPartyHandle,
1075 OUT PNDIS_HANDLE CallMgrPartyContext
1080 (*CM_DROP_PARTY_HANDLER)(
1081 IN NDIS_HANDLE CallMgrPartyContext,
1082 IN PVOID CloseData OPTIONAL,
1083 IN UINT Size OPTIONAL
1088 (*CM_ACTIVATE_VC_COMPLETE_HANDLER)(
1089 IN NDIS_STATUS Status,
1090 IN NDIS_HANDLE CallMgrVcContext,
1091 IN PCO_CALL_PARAMETERS CallParameters
1096 (*CM_DEACTIVATE_VC_COMPLETE_HANDLER)(
1097 IN NDIS_STATUS Status,
1098 IN NDIS_HANDLE CallMgrVcContext
1103 (*CM_MODIFY_CALL_QOS_HANDLER)(
1104 IN NDIS_HANDLE CallMgrVcContext,
1105 IN PCO_CALL_PARAMETERS CallParameters
1108 typedef struct _NDIS_CALL_MANAGER_CHARACTERISTICS
1116 CO_CREATE_VC_HANDLER CmCreateVcHandler;
1117 CO_DELETE_VC_HANDLER CmDeleteVcHandler;
1118 CM_OPEN_AF_HANDLER CmOpenAfHandler;
1119 CM_CLOSE_AF_HANDLER CmCloseAfHandler;
1120 CM_REG_SAP_HANDLER CmRegisterSapHandler;
1121 CM_DEREG_SAP_HANDLER CmDeregisterSapHandler;
1122 CM_MAKE_CALL_HANDLER CmMakeCallHandler;
1123 CM_CLOSE_CALL_HANDLER CmCloseCallHandler;
1124 CM_INCOMING_CALL_COMPLETE_HANDLER CmIncomingCallCompleteHandler;
1125 CM_ADD_PARTY_HANDLER CmAddPartyHandler;
1126 CM_DROP_PARTY_HANDLER CmDropPartyHandler;
1127 CM_ACTIVATE_VC_COMPLETE_HANDLER CmActivateVcCompleteHandler;
1128 CM_DEACTIVATE_VC_COMPLETE_HANDLER CmDeactivateVcCompleteHandler;
1129 CM_MODIFY_CALL_QOS_HANDLER CmModifyCallQoSHandler;
1130 CO_REQUEST_HANDLER CmRequestHandler;
1131 CO_REQUEST_COMPLETE_HANDLER CmRequestCompleteHandler;
1132 } NDIS_CALL_MANAGER_CHARACTERISTICS, *PNDIS_CALL_MANAGER_CHARACTERISTICS;
1136 /* Call Manager clients */
1138 typedef VOID (*CL_OPEN_AF_COMPLETE_HANDLER)(
1139 IN NDIS_STATUS Status,
1140 IN NDIS_HANDLE ProtocolAfContext,
1141 IN NDIS_HANDLE NdisAfHandle);
1143 typedef VOID (*CL_CLOSE_AF_COMPLETE_HANDLER)(
1144 IN NDIS_STATUS Status,
1145 IN NDIS_HANDLE ProtocolAfContext);
1147 typedef VOID (*CL_REG_SAP_COMPLETE_HANDLER)(
1148 IN NDIS_STATUS Status,
1149 IN NDIS_HANDLE ProtocolSapContext,
1151 IN NDIS_HANDLE NdisSapHandle);
1153 typedef VOID (*CL_DEREG_SAP_COMPLETE_HANDLER)(
1154 IN NDIS_STATUS Status,
1155 IN NDIS_HANDLE ProtocolSapContext);
1157 typedef VOID (*CL_MAKE_CALL_COMPLETE_HANDLER)(
1158 IN NDIS_STATUS Status,
1159 IN NDIS_HANDLE ProtocolVcContext,
1160 IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
1161 IN PCO_CALL_PARAMETERS CallParameters);
1163 typedef VOID (*CL_MODIFY_CALL_QOS_COMPLETE_HANDLER)(
1164 IN NDIS_STATUS Status,
1165 IN NDIS_HANDLE ProtocolVcContext,
1166 IN PCO_CALL_PARAMETERS CallParameters);
1168 typedef VOID (*CL_CLOSE_CALL_COMPLETE_HANDLER)(
1169 IN NDIS_STATUS Status,
1170 IN NDIS_HANDLE ProtocolVcContext,
1171 IN NDIS_HANDLE ProtocolPartyContext OPTIONAL);
1173 typedef VOID (*CL_ADD_PARTY_COMPLETE_HANDLER)(
1174 IN NDIS_STATUS Status,
1175 IN NDIS_HANDLE ProtocolPartyContext,
1176 IN NDIS_HANDLE NdisPartyHandle,
1177 IN PCO_CALL_PARAMETERS CallParameters);
1179 typedef VOID (*CL_DROP_PARTY_COMPLETE_HANDLER)(
1180 IN NDIS_STATUS Status,
1181 IN NDIS_HANDLE ProtocolPartyContext);
1183 typedef NDIS_STATUS (*CL_INCOMING_CALL_HANDLER)(
1184 IN NDIS_HANDLE ProtocolSapContext,
1185 IN NDIS_HANDLE ProtocolVcContext,
1186 IN OUT PCO_CALL_PARAMETERS CallParameters);
1188 typedef VOID (*CL_INCOMING_CALL_QOS_CHANGE_HANDLER)(
1189 IN NDIS_HANDLE ProtocolVcContext,
1190 IN PCO_CALL_PARAMETERS CallParameters);
1192 typedef VOID (*CL_INCOMING_CLOSE_CALL_HANDLER)(
1193 IN NDIS_STATUS CloseStatus,
1194 IN NDIS_HANDLE ProtocolVcContext,
1195 IN PVOID CloseData OPTIONAL,
1196 IN UINT Size OPTIONAL);
1198 typedef VOID (*CL_INCOMING_DROP_PARTY_HANDLER)(
1199 IN NDIS_STATUS DropStatus,
1200 IN NDIS_HANDLE ProtocolPartyContext,
1201 IN PVOID CloseData OPTIONAL,
1202 IN UINT Size OPTIONAL);
1204 typedef VOID (*CL_CALL_CONNECTED_HANDLER)(
1205 IN NDIS_HANDLE ProtocolVcContext);
1208 typedef struct _NDIS_CLIENT_CHARACTERISTICS
1216 CO_CREATE_VC_HANDLER ClCreateVcHandler;
1217 CO_DELETE_VC_HANDLER ClDeleteVcHandler;
1218 CO_REQUEST_HANDLER ClRequestHandler;
1219 CO_REQUEST_COMPLETE_HANDLER ClRequestCompleteHandler;
1220 CL_OPEN_AF_COMPLETE_HANDLER ClOpenAfCompleteHandler;
1221 CL_CLOSE_AF_COMPLETE_HANDLER ClCloseAfCompleteHandler;
1222 CL_REG_SAP_COMPLETE_HANDLER ClRegisterSapCompleteHandler;
1223 CL_DEREG_SAP_COMPLETE_HANDLER ClDeregisterSapCompleteHandler;
1224 CL_MAKE_CALL_COMPLETE_HANDLER ClMakeCallCompleteHandler;
1225 CL_MODIFY_CALL_QOS_COMPLETE_HANDLER ClModifyCallQoSCompleteHandler;
1226 CL_CLOSE_CALL_COMPLETE_HANDLER ClCloseCallCompleteHandler;
1227 CL_ADD_PARTY_COMPLETE_HANDLER ClAddPartyCompleteHandler;
1228 CL_DROP_PARTY_COMPLETE_HANDLER ClDropPartyCompleteHandler;
1229 CL_INCOMING_CALL_HANDLER ClIncomingCallHandler;
1230 CL_INCOMING_CALL_QOS_CHANGE_HANDLER ClIncomingCallQoSChangeHandler;
1231 CL_INCOMING_CLOSE_CALL_HANDLER ClIncomingCloseCallHandler;
1232 CL_INCOMING_DROP_PARTY_HANDLER ClIncomingDropPartyHandler;
1233 CL_CALL_CONNECTED_HANDLER ClCallConnectedHandler;
1234 } NDIS_CLIENT_CHARACTERISTICS, *PNDIS_CLIENT_CHARACTERISTICS;
1238 /* NDIS protocol structures */
1240 /* Prototypes for NDIS 3.0 protocol characteristics */
1242 typedef VOID (*OPEN_ADAPTER_COMPLETE_HANDLER)(
1243 IN NDIS_HANDLE ProtocolBindingContext,
1244 IN NDIS_STATUS Status,
1245 IN NDIS_STATUS OpenErrorStatus);
1247 typedef VOID (*CLOSE_ADAPTER_COMPLETE_HANDLER)(
1248 IN NDIS_HANDLE ProtocolBindingContext,
1249 IN NDIS_STATUS Status);
1251 typedef VOID (*RESET_COMPLETE_HANDLER)(
1252 IN NDIS_HANDLE ProtocolBindingContext,
1253 IN NDIS_STATUS Status);
1255 typedef VOID (*REQUEST_COMPLETE_HANDLER)(
1256 IN NDIS_HANDLE ProtocolBindingContext,
1257 IN PNDIS_REQUEST NdisRequest,
1258 IN NDIS_STATUS Status);
1260 typedef VOID (*STATUS_HANDLER)(
1261 IN NDIS_HANDLE ProtocolBindingContext,
1262 IN NDIS_STATUS GeneralStatus,
1263 IN PVOID StatusBuffer,
1264 IN UINT StatusBufferSize);
1266 typedef VOID (*STATUS_COMPLETE_HANDLER)(
1267 IN NDIS_HANDLE ProtocolBindingContext);
1269 typedef VOID (*SEND_COMPLETE_HANDLER)(
1270 IN NDIS_HANDLE ProtocolBindingContext,
1271 IN PNDIS_PACKET Packet,
1272 IN NDIS_STATUS Status);
1274 typedef VOID (*WAN_SEND_COMPLETE_HANDLER)(
1275 IN NDIS_HANDLE ProtocolBindingContext,
1276 IN PNDIS_WAN_PACKET Packet,
1277 IN NDIS_STATUS Status);
1279 typedef VOID (*TRANSFER_DATA_COMPLETE_HANDLER)(
1280 IN NDIS_HANDLE ProtocolBindingContext,
1281 IN PNDIS_PACKET Packet,
1282 IN NDIS_STATUS Status,
1283 IN UINT BytesTransferred);
1285 typedef VOID (*WAN_TRANSFER_DATA_COMPLETE_HANDLER)(
1288 typedef NDIS_STATUS (*RECEIVE_HANDLER)(
1289 IN NDIS_HANDLE ProtocolBindingContext,
1290 IN NDIS_HANDLE MacReceiveContext,
1291 IN PVOID HeaderBuffer,
1292 IN UINT HeaderBufferSize,
1293 IN PVOID LookAheadBuffer,
1294 IN UINT LookaheadBufferSize,
1295 IN UINT PacketSize);
1297 typedef NDIS_STATUS (*WAN_RECEIVE_HANDLER)(
1298 IN NDIS_HANDLE NdisLinkHandle,
1300 IN ULONG PacketSize);
1302 typedef VOID (*RECEIVE_COMPLETE_HANDLER)(
1303 IN NDIS_HANDLE ProtocolBindingContext);
1306 /* Protocol characteristics for NDIS 3.0 protocols */
1308 typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS
1310 UCHAR MajorNdisVersion;
1311 UCHAR MinorNdisVersion;
1317 OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler;
1318 CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler;
1321 SEND_COMPLETE_HANDLER SendCompleteHandler;
1322 WAN_SEND_COMPLETE_HANDLER WanSendCompleteHandler;
1326 TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler;
1327 WAN_TRANSFER_DATA_COMPLETE_HANDLER WanTransferDataCompleteHandler;
1330 RESET_COMPLETE_HANDLER ResetCompleteHandler;
1331 REQUEST_COMPLETE_HANDLER RequestCompleteHandler;
1334 RECEIVE_HANDLER ReceiveHandler;
1335 WAN_RECEIVE_HANDLER WanReceiveHandler;
1337 RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler;
1338 STATUS_HANDLER StatusHandler;
1339 STATUS_COMPLETE_HANDLER StatusCompleteHandler;
1341 } NDIS30_PROTOCOL_CHARACTERISTICS;
1342 typedef NDIS30_PROTOCOL_CHARACTERISTICS NDIS30_PROTOCOL_CHARACTERISTICS_S;
1344 #define NDIS30_PROTOCOL_CHARACTERISTICS \
1345 UCHAR MajorNdisVersion; \
1346 UCHAR MinorNdisVersion; \
1352 OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler; \
1353 CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler; \
1356 SEND_COMPLETE_HANDLER SendCompleteHandler; \
1357 WAN_SEND_COMPLETE_HANDLER WanSendCompleteHandler; \
1361 TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler; \
1362 WAN_TRANSFER_DATA_COMPLETE_HANDLER WanTransferDataCompleteHandler; \
1364 RESET_COMPLETE_HANDLER ResetCompleteHandler; \
1365 REQUEST_COMPLETE_HANDLER RequestCompleteHandler; \
1368 RECEIVE_HANDLER ReceiveHandler; \
1369 WAN_RECEIVE_HANDLER WanReceiveHandler; \
1371 RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler; \
1372 STATUS_HANDLER StatusHandler; \
1373 STATUS_COMPLETE_HANDLER StatusCompleteHandler; \
1375 typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS_S
1377 NDIS30_PROTOCOL_CHARACTERISTICS;
1378 } NDIS30_PROTOCOL_CHARACTERISTICS_S, *PNDIS30_PROTOCOL_CHARACTERISTICS_S;
1381 /* Prototypes for NDIS 4.0 protocol characteristics */
1383 typedef INT (*RECEIVE_PACKET_HANDLER)(
1384 IN NDIS_HANDLE ProtocolBindingContext,
1385 IN PNDIS_PACKET Packet);
1387 typedef VOID (*BIND_HANDLER)(
1388 OUT PNDIS_STATUS Status,
1389 IN NDIS_HANDLE BindContext,
1390 IN PNDIS_STRING DeviceName,
1391 IN PVOID SystemSpecific1,
1392 IN PVOID SystemSpecific2);
1394 typedef VOID (*UNBIND_HANDLER)(
1395 OUT PNDIS_STATUS Status,
1396 IN NDIS_HANDLE ProtocolBindingContext,
1397 IN NDIS_HANDLE UnbindContext);
1399 typedef VOID (*TRANSLATE_HANDLER)(
1400 OUT PNDIS_STATUS Status,
1401 IN NDIS_HANDLE ProtocolBindingContext,
1402 OUT PNET_PNP_ID IdList,
1403 IN ULONG IdListLength,
1404 OUT PULONG BytesReturned);
1406 typedef VOID (*UNLOAD_PROTOCOL_HANDLER)(
1410 /* Protocol characteristics for NDIS 4.0 protocols */
1412 typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS
1414 NDIS30_PROTOCOL_CHARACTERISTICS;
1416 RECEIVE_PACKET_HANDLER ReceivePacketHandler;
1417 BIND_HANDLER BindAdapterHandler;
1418 UNBIND_HANDLER UnbindAdapterHandler;
1419 TRANSLATE_HANDLER TranslateHandler;
1420 UNLOAD_PROTOCOL_HANDLER UnloadHandler;
1421 } NDIS40_PROTOCOL_CHARACTERISTICS;
1422 typedef NDIS40_PROTOCOL_CHARACTERISTICS NDIS40_PROTOCOL_CHARACTERISTICS_S;
1424 #define NDIS40_PROTOCOL_CHARACTERISTICS \
1425 NDIS30_PROTOCOL_CHARACTERISTICS; \
1426 RECEIVE_PACKET_HANDLER ReceivePacketHandler; \
1427 BIND_HANDLER BindAdapterHandler; \
1428 UNBIND_HANDLER UnbindAdapterHandler; \
1429 TRANSLATE_HANDLER TranslateHandler; \
1430 UNLOAD_PROTOCOL_HANDLER UnloadHandler;
1431 typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS_S
1433 NDIS40_PROTOCOL_CHARACTERISTICS;
1434 } NDIS40_PROTOCOL_CHARACTERISTICS_S, *PNDIS40_PROTOCOL_CHARACTERISTICS_S;
1438 /* Prototypes for NDIS 5.0 protocol characteristics */
1442 typedef VOID (*CO_SEND_COMPLETE_HANDLER)(
1443 IN NDIS_STATUS Status,
1444 IN NDIS_HANDLE ProtocolVcContext,
1445 IN PNDIS_PACKET Packet);
1447 typedef VOID (*CO_STATUS_HANDLER)(
1448 IN NDIS_HANDLE ProtocolBindingContext,
1449 IN NDIS_HANDLE ProtocolVcContext OPTIONAL,
1450 IN NDIS_STATUS GeneralStatus,
1451 IN PVOID StatusBuffer,
1452 IN UINT StatusBufferSize);
1454 typedef UINT (*CO_RECEIVE_PACKET_HANDLER)(
1455 IN NDIS_HANDLE ProtocolBindingContext,
1456 IN NDIS_HANDLE ProtocolVcContext,
1457 IN PNDIS_PACKET Packet);
1459 typedef VOID (*CO_AF_REGISTER_NOTIFY_HANDLER)(
1460 IN NDIS_HANDLE ProtocolBindingContext,
1461 IN PCO_ADDRESS_FAMILY AddressFamily);
1464 typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS
1466 NDIS40_PROTOCOL_CHARACTERISTICS;
1468 PVOID ReservedHandlers[4];
1470 CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler;
1471 CO_STATUS_HANDLER CoStatusHandler;
1472 CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler;
1473 CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
1474 } NDIS50_PROTOCOL_CHARACTERISTICS;
1475 typedef NDIS50_PROTOCOL_CHARACTERISTICS NDIS50_PROTOCOL_CHARACTERISTICS_S;
1477 #define NDIS50_PROTOCOL_CHARACTERISTICS \
1478 NDIS40_PROTOCOL_CHARACTERISTICS; \
1479 PVOID ReservedHandlers[4]; \
1480 CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler; \
1481 CO_STATUS_HANDLER CoStatusHandler; \
1482 CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler; \
1483 CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
1484 typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS_S
1486 NDIS50_PROTOCOL_CHARACTERISTICS;
1487 } NDIS50_PROTOCOL_CHARACTERISTICS_S, *PNDIS50_PROTOCOL_CHARACTERISTICS_S;
1494 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS
1496 NDIS30_PROTOCOL_CHARACTERISTICS;
1497 } NDIS_PROTOCOL_CHARACTERISTICS;
1499 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS
1501 NDIS40_PROTOCOL_CHARACTERISTICS;
1502 } NDIS_PROTOCOL_CHARACTERISTICS;
1505 typedef struct _NDIS_PROTOCOL_CHARACTERISTICS
1507 NDIS50_PROTOCOL_CHARACTERISTICS;
1508 } NDIS_PROTOCOL_CHARACTERISTICS;
1511 typedef NDIS_PROTOCOL_CHARACTERISTICS *PNDIS_PROTOCOL_CHARACTERISTICS;
1515 /* Buffer management routines */
1520 OUT PNDIS_STATUS Status,
1521 OUT PNDIS_BUFFER *Buffer,
1522 IN NDIS_HANDLE PoolHandle,
1523 IN PVOID VirtualAddress,
1528 NdisAllocateBufferPool(
1529 OUT PNDIS_STATUS Status,
1530 OUT PNDIS_HANDLE PoolHandle,
1531 IN UINT NumberOfDescriptors);
1536 OUT PNDIS_STATUS Status,
1537 OUT PNDIS_PACKET *Packet,
1538 IN NDIS_HANDLE PoolHandle);
1542 NdisAllocatePacketPool(
1543 OUT PNDIS_STATUS Status,
1544 OUT PNDIS_HANDLE PoolHandle,
1545 IN UINT NumberOfDescriptors,
1546 IN UINT ProtocolReservedLength);
1551 OUT PNDIS_STATUS Status,
1552 OUT PNDIS_BUFFER *Buffer,
1553 IN NDIS_HANDLE PoolHandle,
1554 IN PVOID MemoryDescriptor,
1560 NdisCopyFromPacketToPacket(
1561 IN PNDIS_PACKET Destination,
1562 IN UINT DestinationOffset,
1563 IN UINT BytesToCopy,
1564 IN PNDIS_PACKET Source,
1565 IN UINT SourceOffset,
1566 OUT PUINT BytesCopied);
1570 NdisDprAllocatePacket(
1571 OUT PNDIS_STATUS Status,
1572 OUT PNDIS_PACKET *Packet,
1573 IN NDIS_HANDLE PoolHandle);
1577 NdisDprAllocatePacketNonInterlocked(
1578 OUT PNDIS_STATUS Status,
1579 OUT PNDIS_PACKET *Packet,
1580 IN NDIS_HANDLE PoolHandle);
1585 IN PNDIS_PACKET Packet);
1589 NdisDprFreePacketNonInterlocked(
1590 IN PNDIS_PACKET Packet);
1595 IN NDIS_HANDLE PoolHandle);
1600 IN PNDIS_PACKET Packet);
1605 IN NDIS_HANDLE PoolHandle);
1610 IN PNDIS_PACKET *PacketsToReturn,
1611 IN UINT NumberOfPackets);
1615 NdisUnchainBufferAtBack(
1616 IN OUT PNDIS_PACKET Packet,
1617 OUT PNDIS_BUFFER *Buffer);
1621 NdisUnchainBufferAtFront(
1622 IN OUT PNDIS_PACKET Packet,
1623 OUT PNDIS_BUFFER *Buffer);
1626 * PVOID NdisAdjustBufferLength(
1627 * IN PNDIS_BUFFER Buffer,
1632 NdisAdjustBufferLength(
1633 IN PNDIS_BUFFER Buffer,
1637 * ULONG NDIS_BUFFER_TO_SPAN_PAGES(
1638 * IN PNDIS_BUFFER Buffer);
1642 NDIS_BUFFER_TO_SPAN_PAGES(
1643 IN PNDIS_BUFFER Buffer);
1648 IN PNDIS_BUFFER Buffer);
1653 * VOID NdisGetBufferPhysicalArraySize(
1654 * IN PNDIS_BUFFER Buffer,
1655 * OUT PUINT ArraySize);
1659 NdisGetBufferPhysicalArraySize(
1660 IN PNDIS_BUFFER Buffer,
1661 OUT PUINT ArraySize);
1664 * VOID NdisGetFirstBufferFromPacket(
1665 * IN PNDIS_PACKET _Packet,
1666 * OUT PNDIS_BUFFER * _FirstBuffer,
1667 * OUT PVOID * _FirstBufferVA,
1668 * OUT PUINT _FirstBufferLength,
1669 * OUT PUINT _TotalBufferLength)
1673 NdisGetFirstBufferFromPacket(
1674 IN PNDIS_PACKET _Packet,
1675 OUT PNDIS_BUFFER * _FirstBuffer,
1676 OUT PVOID * _FirstBufferVA,
1677 OUT PUINT _FirstBufferLength,
1678 OUT PUINT _TotalBufferLength);
1683 IN PNDIS_BUFFER Buffer,
1684 OUT PVOID *VirtualAddress OPTIONAL,
1689 NdisQueryBufferOffset(
1690 IN PNDIS_BUFFER Buffer,
1695 * PVOID NDIS_BUFFER_LINKAGE(
1696 * IN PNDIS_BUFFER Buffer);
1698 #define NDIS_BUFFER_LINKAGE(Buffer) \
1705 * VOID NdisChainBufferAtBack(
1706 * IN OUT PNDIS_PACKET Packet,
1707 * IN OUT PNDIS_BUFFER Buffer)
1709 #define NdisChainBufferAtBack(Packet, \
1712 PNDIS_BUFFER NdisBuffer = (Buffer); \
1714 while (NdisBuffer->Next != NULL) \
1715 NdisBuffer = NdisBuffer->Next; \
1717 NdisBuffer->Next = NULL; \
1719 if ((Packet)->Private.Head != NULL) \
1720 (Packet)->Private.Tail->Next = (Buffer); \
1722 (Packet)->Private.Head = (Buffer); \
1724 (Packet)->Private.Tail = NdisBuffer; \
1725 (Packet)->Private.ValidCounts = FALSE; \
1730 * VOID NdisChainBufferAtFront(
1731 * IN OUT PNDIS_PACKET Packet,
1732 * IN OUT PNDIS_BUFFER Buffer)
1734 #define NdisChainBufferAtFront(Packet, \
1737 PNDIS_BUFFER _NdisBuffer = (Buffer); \
1739 while (_NdisBuffer->Next != NULL) \
1740 _NdisBuffer = _NdisBuffer->Next; \
1742 if ((Packet)->Private.Head == NULL) \
1743 (Packet)->Private.Tail = _NdisBuffer; \
1745 _NdisBuffer->Next = (Packet)->Private.Head; \
1746 (Packet)->Private.Head = (Buffer); \
1747 (Packet)->Private.ValidCounts = FALSE; \
1752 * VOID NdisGetNextBuffer(
1753 * IN PNDIS_BUFFER CurrentBuffer,
1754 * OUT PNDIS_BUFFER * NextBuffer)
1756 #define NdisGetNextBuffer(CurrentBuffer, \
1759 *(NextBuffer) = (CurrentBuffer)->Next; \
1763 * UINT NdisGetPacketFlags(
1764 * IN PNDIS_PACKET Packet);
1766 #define NdisGetPacketFlags(Packet) \
1768 (Packet)->Private.Flags; \
1773 * UINT NDIS_GET_PACKET_HEADER_SIZE(
1774 * IN PNDIS_PACKET Packet);
1776 #define NDIS_GET_PACKET_HEADER_SIZE(Packet) \
1782 * VOID NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(
1783 * IN PNDIS_PACKET Packet,
1784 * IN PPVOID pMediaSpecificInfo,
1785 * IN PUINT pSizeMediaSpecificInfo);
1787 #define NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(Packet, \
1788 pMediaSpecificInfo, \
1789 pSizeMediaSpecificInfo) \
1795 * VOID NDIS_STATUS NDIS_GET_PACKET_STATUS(
1796 * IN PNDIS_PACKET Packet);
1798 #define NDIS_GET_PACKET_STATUS (Packet) \
1804 * ULONGLONG NDIS_GET_PACKET_TIME_RECEIVED(
1805 * IN PNDIS_PACKET Packet);
1807 #define NDIS_GET_PACKET_TIME_RECEIVED(Packet) \
1813 * ULONGLONG NDIS_GET_PACKET_TIME_SENT(
1814 * IN PNDIS_PACKET Packet);
1816 #define NDIS_GET_PACKET_TIME_SENT(Packet) \
1822 * ULONGLONG NDIS_GET_PACKET_TIME_TO_SEND(
1823 * IN PNDIS_PACKET Packet);
1825 #define NDIS_GET_PACKET_TIME_TO_SEND(Packet) \
1831 * PNDIS_PACKET_OOB_DATA NDIS_OOB_DATA_FROM_PACKET(
1832 * IN PNDIS_PACKET _Packet);
1834 #define NDIS_OOB_DATA_FROM_PACKET(_Packet) \
1840 * VOID NdisQueryPacket(
1841 * IN PNDIS_PACKET Packet,
1842 * OUT PUINT PhysicalBufferCount OPTIONAL,
1843 * OUT PUINT BufferCount OPTIONAL,
1844 * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
1845 * OUT PUINT TotalPacketLength OPTIONAL);
1847 #define NdisQueryPacket(Packet, \
1848 PhysicalBufferCount, \
1851 TotalPacketLength) \
1854 *((PNDIS_BUFFER*)FirstBuffer) = (Packet)->Private.Head; \
1855 if ((TotalPacketLength) || (BufferCount) || (PhysicalBufferCount)) { \
1856 if (!(Packet)->Private.ValidCounts) { \
1858 UINT _PacketLength; \
1859 PNDIS_BUFFER _NdisBuffer; \
1860 UINT _PhysicalBufferCount = 0; \
1861 UINT _TotalPacketLength = 0; \
1864 for (_NdisBuffer = (Packet)->Private.Head; \
1865 _NdisBuffer != (PNDIS_BUFFER)NULL; \
1866 _NdisBuffer = _NdisBuffer->Next) { \
1867 _PhysicalBufferCount += NDIS_BUFFER_TO_SPAN_PAGES(_NdisBuffer); \
1868 NdisQueryBufferOffset(_NdisBuffer, &_Offset, &_PacketLength); \
1869 _TotalPacketLength += _PacketLength; \
1872 (Packet)->Private.PhysicalCount = _PhysicalBufferCount; \
1873 (Packet)->Private.TotalLength = _TotalPacketLength; \
1874 (Packet)->Private.Count = _Count; \
1875 (Packet)->Private.ValidCounts = TRUE; \
1878 if (PhysicalBufferCount) \
1879 *((PUINT)PhysicalBufferCount) = (Packet)->Private.PhysicalCount; \
1882 *((PUINT)BufferCount) = (Packet)->Private.Count; \
1884 if (TotalPacketLength) \
1885 *((PUINT)TotalPacketLength) = (Packet)->Private.TotalLength; \
1891 * VOID NdisRecalculatePacketCounts(
1892 * IN OUT PNDIS_PACKET Packet);
1894 #define NdisRecalculatePacketCounts(Packet) \
1900 NdisReinitializePacket(
1901 IN OUT PNDIS_PACKET Packet);
1905 * VOID NdisSetPacketFlags(
1906 * IN PNDIS_PACKET Packet,
1909 #define NdisSetPacketFlags(Packet, Flags) \
1910 (Packet)->Private.Flags = (Flags);
1914 * NDIS_SET_PACKET_HEADER_SIZE(
1915 * IN PNDIS_PACKET Packet,
1918 #define NDIS_SET_PACKET_HEADER_SIZE(Packet, \
1925 * NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(
1926 * IN PNDIS_PACKET Packet,
1927 * IN PVOID MediaSpecificInfo,
1928 * IN UINT SizeMediaSpecificInfo);
1930 #define NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(Packet, \
1931 MediaSpecificInfo, \
1932 SizeMediaSpecificInfo) \
1938 * NDIS_SET_PACKET_STATUS(
1939 * IN PNDIS_PACKET Packet,
1940 * IN NDIS_STATUS Status);
1942 #define NDIS_SET_PACKET_STATUS(Packet, \
1949 * NDIS_SET_PACKET_TIME_RECEIVED(
1950 * IN PNDIS_PACKET Packet,
1951 * IN ULONGLONG TimeReceived);
1953 #define NDIS_SET_PACKET_TIME_RECEIVED(Packet) \
1960 * NDIS_SET_PACKET_TIME_SENT(
1961 * IN PNDIS_PACKET Packet,
1962 * IN ULONGLONG TimeSent);
1964 #define NDIS_SET_PACKET_TIME_SENT(Packet, \
1972 * NDIS_SET_PACKET_TIME_TO_SEND(
1973 * IN PNDIS_PACKET Packet,
1974 * IN ULONGLONG TimeToSend);
1976 #define NDIS_SET_PACKET_TIME_TO_SEND(Packet, \
1983 * VOID NdisSetSendFlags(
1984 * IN PNDIS_PACKET Packet,
1987 #define NdisSetSendFlags(Packet, Flags)( \
1988 NdisSetPacketFlags((Packet), (Flags)))
1992 /* Memory management routines */
1996 NdisCreateLookaheadBufferFromSharedMemory(
1997 IN PVOID pSharedMemory,
1998 IN UINT LookaheadLength,
1999 OUT PVOID *pLookaheadBuffer);
2003 NdisDestroyLookaheadBufferFromSharedMemory(
2004 IN PVOID pLookaheadBuffer);
2008 NdisMoveFromMappedMemory(
2009 OUT PVOID Destination,
2015 NdisMoveMappedMemory(
2016 OUT PVOID Destination,
2022 NdisMoveToMappedMemory(
2023 OUT PVOID Destination,
2029 NdisMUpdateSharedMemory(
2030 IN NDIS_HANDLE MiniportAdapterHandle,
2032 IN PVOID VirtualAddress,
2033 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2038 OUT PVOID *VirtualAddress,
2040 IN UINT MemoryFlags,
2041 IN NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress);
2046 IN PVOID VirtualAddress,
2048 IN UINT MemoryFlags);
2052 NdisImmediateReadSharedMemory(
2053 IN NDIS_HANDLE WrapperConfigurationContext,
2054 IN ULONG SharedMemoryAddress,
2060 NdisImmediateWriteSharedMemory(
2061 IN NDIS_HANDLE WrapperConfigurationContext,
2062 IN ULONG SharedMemoryAddress,
2068 NdisMAllocateSharedMemory(
2069 IN NDIS_HANDLE MiniportAdapterHandle,
2072 OUT PVOID *VirtualAddress,
2073 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
2077 NdisMAllocateSharedMemoryAsync(
2078 IN NDIS_HANDLE MiniportAdapterHandle,
2085 NdisMFreeSharedMemory(
2086 IN NDIS_HANDLE MiniportAdapterHandle,
2089 IN PVOID VirtualAddress,
2090 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2094 NdisUpdateSharedMemory(
2095 IN NDIS_HANDLE NdisAdapterHandle,
2097 IN PVOID VirtualAddress,
2098 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2102 * ULONG NdisGetPhysicalAddressHigh(
2103 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2105 #define NdisGetPhysicalAddressHigh(PhysicalAddress) \
2106 ((PhysicalAddress).HighPart)
2109 * VOID NdisSetPhysicalAddressHigh(
2110 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
2113 #define NdisSetPhysicalAddressHigh(PhysicalAddress, Value) \
2114 ((PhysicalAddress).HighPart) = (Value)
2117 * ULONG NdisGetPhysicalAddressLow(
2118 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2120 #define NdisGetPhysicalAddressLow(PhysicalAddress) \
2121 ((PhysicalAddress).LowPart)
2125 * VOID NdisSetPhysicalAddressLow(
2126 * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
2129 #define NdisSetPhysicalAddressLow(PhysicalAddress, Value) \
2130 ((PhysicalAddress).LowPart) = (Value)
2133 * VOID NDIS_PHYSICAL_ADDRESS_CONST(
2137 #define NDIS_PHYSICAL_ADDRESS_CONST(Low, High) \
2138 { {(ULONG)(Low), (LONG)(High)} }
2142 * VOID NdisMoveMemory(
2143 * OUT PVOID Destination,
2147 #define NdisMoveMemory(Destination, Source, Length) \
2148 RtlCopyMemory(Destination, Source, Length)
2152 * VOID NdisRetrieveUlong(
2153 * IN PULONG DestinationAddress,
2154 * IN PULONG SourceAddress);
2156 #define NdisRetrieveUlong(DestinationAddress, SourceAddress) \
2157 RtlRetrieveUlong(DestinationAddress, SourceAddress)
2161 * VOID NdisStoreUlong(
2162 * IN PULONG DestinationAddress,
2165 #define NdisStoreUlong(DestinationAddress, Value) \
2166 RtlStoreUlong(DestinationAddress, Value)
2170 * VOID NdisZeroMemory(
2171 * IN PVOID Destination,
2174 #define NdisZeroMemory(Destination, Length) \
2175 RtlZeroMemory(Destination, Length)
2180 // System processor count
2185 NdisSystemProcessorCount(
2191 NdisImmediateReadPortUchar(
2192 IN NDIS_HANDLE WrapperConfigurationContext,
2199 NdisImmediateReadPortUshort(
2200 IN NDIS_HANDLE WrapperConfigurationContext,
2207 NdisImmediateReadPortUlong(
2208 IN NDIS_HANDLE WrapperConfigurationContext,
2215 NdisImmediateWritePortUchar(
2216 IN NDIS_HANDLE WrapperConfigurationContext,
2223 NdisImmediateWritePortUshort(
2224 IN NDIS_HANDLE WrapperConfigurationContext,
2231 NdisImmediateWritePortUlong(
2232 IN NDIS_HANDLE WrapperConfigurationContext,
2239 NdisImmediateReadSharedMemory(
2240 IN NDIS_HANDLE WrapperConfigurationContext,
2241 IN ULONG SharedMemoryAddress,
2248 NdisImmediateWriteSharedMemory(
2249 IN NDIS_HANDLE WrapperConfigurationContext,
2250 IN ULONG SharedMemoryAddress,
2257 NdisImmediateReadPciSlotInformation(
2258 IN NDIS_HANDLE WrapperConfigurationContext,
2259 IN ULONG SlotNumber,
2267 NdisImmediateWritePciSlotInformation(
2268 IN NDIS_HANDLE WrapperConfigurationContext,
2269 IN ULONG SlotNumber,
2277 NdisReadPciSlotInformation(
2278 IN NDIS_HANDLE NdisAdapterHandle,
2279 IN ULONG SlotNumber,
2286 NdisWritePciSlotInformation(
2287 IN NDIS_HANDLE NdisAdapterHandle,
2288 IN ULONG SlotNumber,
2293 /* String management routines */
2296 * NDIS_STATUS NdisAnsiStringToUnicodeString(
2297 * IN OUT PNDIS_STRING DestinationString,
2298 * IN PNDIS_ANSI_STRING SourceString);
2302 NdisAnsiStringToUnicodeString(
2303 IN OUT PNDIS_STRING DestinationString,
2304 IN PANSI_STRING SourceString);
2307 * BOOLEAN NdisEqualString(
2308 * IN PNDIS_STRING String1,
2309 * IN PNDIS_STRING String2,
2310 * IN BOOLEAN CaseInsensitive)
2315 IN PNDIS_STRING String1,
2316 IN PNDIS_STRING String2,
2317 IN BOOLEAN CaseInsensitive);
2320 * VOID NdisInitAnsiString(
2321 * IN OUT PNDIS_ANSI_STRING DestinationString,
2322 * IN PCSTR SourceString)
2327 IN OUT PANSI_STRING DestinationString,
2328 IN PCSTR SourceString);
2331 * VOID NdisInitUnicodeString(
2332 * IN OUT PNDIS_STRING DestinationString,
2333 * IN PCWSTR SourceString)
2337 NdisInitUnicodeString(
2338 IN OUT PNDIS_STRING DestinationString,
2339 IN PCWSTR SourceString);
2342 * NDIS_STATUS NdisUnicodeStringToAnsiString(
2343 * IN OUT PNDIS_ANSI_STRING DestinationString,
2344 * IN PNDIS_STRING SourceString)
2348 NdisUnicodeStringToAnsiString(
2349 IN OUT PANSI_STRING DestinationString,
2350 IN PNDIS_STRING SourceString);
2352 #define NdisFreeString(_s) NdisFreeMemory((s).Buffer, (s).MaximumLength, 0)
2353 #define NdisPrintString(_s) DbgPrint("%ls", (s).Buffer)
2360 * VOID NdisRawReadPortBufferUchar(
2362 * OUT PUCHAR Buffer,
2365 #define NdisRawReadPortBufferUchar(Port, Buffer, Length) \
2366 READ_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
2369 * VOID NdisRawReadPortBufferUlong(
2371 * OUT PULONG Buffer,
2374 #define NdisRawReadPortBufferUlong(Port, Buffer, Length) \
2375 READ_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
2378 * VOID NdisRawReadPortBufferUshort(
2380 * OUT PUSHORT Buffer,
2383 #define NdisRawReadPortBufferUshort(Port, Buffer, Length) \
2384 READ_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
2388 * VOID NdisRawReadPortUchar(
2392 #define NdisRawReadPortUchar(Port, Data) \
2393 *(Data) = READ_PORT_UCHAR((PUCHAR)(Port))
2396 * VOID NdisRawReadPortUlong(
2400 #define NdisRawReadPortUlong(Port, Data) \
2401 *(Data) = READ_PORT_ULONG((PULONG)(Port))
2404 * VOID NdisRawReadPortUshort(
2406 * OUT PUSHORT Data);
2408 #define NdisRawReadPortUshort(Port, Data) \
2409 *(Data) = READ_PORT_USHORT((PUSHORT)(Port))
2413 * VOID NdisRawWritePortBufferUchar(
2418 #define NdisRawWritePortBufferUchar(Port, Buffer, Length) \
2419 WRITE_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
2422 * VOID NdisRawWritePortBufferUlong(
2427 #define NdisRawWritePortBufferUlong(Port, Buffer, Length) \
2428 WRITE_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
2431 * VOID NdisRawWritePortBufferUshort(
2433 * IN PUSHORT Buffer,
2436 #define NdisRawWritePortBufferUshort(Port, Buffer, Length) \
2437 WRITE_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
2441 * VOID NdisRawWritePortUchar(
2445 #define NdisRawWritePortUchar(Port, Data) \
2446 WRITE_PORT_UCHAR((PUCHAR)(Port), (UCHAR)(Data))
2449 * VOID NdisRawWritePortUlong(
2453 #define NdisRawWritePortUlong(Port, Data) \
2454 WRITE_PORT_ULONG((PULONG)(Port), (ULONG)(Data))
2457 * VOID NdisRawWritePortUshort(
2461 #define NdisRawWritePortUshort(Port, Data) \
2462 WRITE_PORT_USHORT((PUSHORT)(Port), (USHORT)(Data))
2466 * VOID NdisReadRegisterUchar(
2467 * IN PUCHAR Register,
2470 #define NdisReadRegisterUchar(Register, Data) \
2471 *((PUCHAR)(Data)) = *(Register)
2474 * VOID NdisReadRegisterUlong(
2475 * IN PULONG Register,
2478 #define NdisReadRegisterUlong(Register, Data) \
2479 *((PULONG)(Data)) = *(Register)
2482 * VOID NdisReadRegisterUshort(
2483 * IN PUSHORT Register,
2484 * OUT PUSHORT Data);
2486 #define NdisReadRegisterUshort(Register, Data) \
2487 *((PUSHORT)(Data)) = *(Register)
2491 * VOID NdisReadRegisterUchar(
2492 * IN PUCHAR Register,
2495 #define NdisWriteRegisterUchar(Register, Data) \
2496 WRITE_REGISTER_UCHAR((Register), (Data))
2499 * VOID NdisReadRegisterUlong(
2500 * IN PULONG Register,
2503 #define NdisWriteRegisterUlong(Register, Data) \
2504 WRITE_REGISTER_ULONG((Register), (Data))
2507 * VOID NdisReadRegisterUshort(
2508 * IN PUSHORT Register,
2511 #define NdisWriteRegisterUshort(Register, Data) \
2512 WRITE_REGISTER_USHORT((Register), (Data))
2519 NdisInitializeListHead(
2520 IN PLIST_ENTRY ListHead);
2524 NdisInterlockedAddUlong(
2527 IN PNDIS_SPIN_LOCK SpinLock);
2531 NdisInterlockedInsertHeadList(
2532 IN PLIST_ENTRY ListHead,
2533 IN PLIST_ENTRY ListEntry,
2534 IN PNDIS_SPIN_LOCK SpinLock);
2538 NdisInterlockedInsertTailList(
2539 IN PLIST_ENTRY ListHead,
2540 IN PLIST_ENTRY ListEntry,
2541 IN PNDIS_SPIN_LOCK SpinLock);
2545 NdisInterlockedRemoveHeadList(
2546 IN PLIST_ENTRY ListHead,
2547 IN PNDIS_SPIN_LOCK SpinLock);
2552 NdisCloseConfiguration(
2553 IN NDIS_HANDLE ConfigurationHandle);
2557 NdisReadConfiguration(
2558 OUT PNDIS_STATUS Status,
2559 OUT PNDIS_CONFIGURATION_PARAMETER *ParameterValue,
2560 IN NDIS_HANDLE ConfigurationHandle,
2561 IN PNDIS_STRING Keyword,
2562 IN NDIS_PARAMETER_TYPE ParameterType);
2566 NdisReadNetworkAddress(
2567 OUT PNDIS_STATUS Status,
2568 OUT PVOID *NetworkAddress,
2569 OUT PUINT NetworkAddressLength,
2570 IN NDIS_HANDLE ConfigurationHandle);
2574 NdisWriteConfiguration(
2575 OUT PNDIS_STATUS Status,
2576 IN NDIS_HANDLE ConfigurationHandle,
2577 IN PNDIS_STRING Keyword,
2578 IN PNDIS_CONFIGURATION_PARAMETER ParameterValue);
2582 NdisOpenConfiguration(
2583 OUT PNDIS_STATUS Status,
2584 OUT PNDIS_HANDLE ConfigurationHandle,
2585 IN NDIS_HANDLE WrapperConfigurationContext);
2589 NdisOpenConfigurationKeyByIndex(
2590 OUT PNDIS_STATUS Status,
2591 IN NDIS_HANDLE ConfigurationHandle,
2593 OUT PNDIS_STRING KeyName,
2594 OUT PNDIS_HANDLE KeyHandle);
2598 NdisOpenConfigurationKeyByName(
2599 OUT PNDIS_STATUS Status,
2600 IN NDIS_HANDLE ConfigurationHandle,
2601 IN PNDIS_STRING SubKeyName,
2602 OUT PNDIS_HANDLE SubKeyHandle);
2607 NdisWriteErrorLogEntry(
2608 IN NDIS_HANDLE NdisAdapterHandle,
2609 IN NDIS_ERROR_CODE ErrorCode,
2610 IN ULONG NumberOfErrorValues,
2611 IN ULONG ERROR_LOG_MAXIMUM_SIZE);
2613 * ERROR_LOG_MAXIMUM_SIZE = ... in MSDN
2617 * VOID NdisStallExecution(
2618 * IN UINT MicrosecondsToStall)
2620 #define NdisStallExecution(MicroSecondsToStall) \
2621 KeStallExecutionProcessor(MicroSecondsToStall)
2624 #define NdisZeroMappedMemory(Destination,Length) RtlZeroMemory(Destination,Length)
2625 /* moved to ndis/memory.c by robd
2626 #define NdisMoveMappedMemory(Destination,Source,Length) RtlCopyMemory(Destination,Source,Length)
2628 /* moved to ndis/control.c by robd
2629 #define NdisReinitializePacket(Packet) \
2631 (Packet)->Private.Head = (PNDIS_BUFFER)NULL; \
2632 (Packet)->Private.ValidCounts = FALSE; \
2637 NdisInitializeEvent(
2638 IN PNDIS_EVENT Event
2644 IN PNDIS_EVENT Event
2650 IN PNDIS_EVENT Event
2656 IN PNDIS_EVENT Event,
2661 /* NDIS helper macros */
2664 * NDIS_INIT_FUNCTION(FunctionName)
2666 #define NDIS_INIT_FUNCTION(FunctionName) \
2667 alloc_text(init, FunctionName)
2670 * NDIS_PAGABLE_FUNCTION(FunctionName)
2672 #define NDIS_PAGABLE_FUNCTION(FunctionName) \
2673 alloc_text(page, FunctionName)
2677 /* NDIS 4.0 extensions */
2683 NdisMFreeSharedMemory(
2684 IN NDIS_HANDLE MiniportAdapterHandle,
2687 IN PVOID VirtualAddress,
2688 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
2692 NdisMWanIndicateReceive(
2693 OUT PNDIS_STATUS Status,
2694 IN NDIS_HANDLE MiniportAdapterHandle,
2695 IN NDIS_HANDLE NdisLinkContext,
2696 IN PUCHAR PacketBuffer,
2697 IN UINT PacketSize);
2701 NdisMWanIndicateReceiveComplete(
2702 IN NDIS_HANDLE MiniportAdapterHandle);
2706 NdisMWanSendComplete(
2707 IN NDIS_HANDLE MiniportAdapterHandle,
2708 IN PNDIS_WAN_PACKET Packet,
2709 IN NDIS_STATUS Status);
2713 NdisPciAssignResources(
2714 IN NDIS_HANDLE NdisMacHandle,
2715 IN NDIS_HANDLE NdisWrapperHandle,
2716 IN NDIS_HANDLE WrapperConfigurationContext,
2717 IN ULONG SlotNumber,
2718 OUT PNDIS_RESOURCE_LIST *AssignedResources);
2722 NdisReadEisaSlotInformationEx(
2723 OUT PNDIS_STATUS Status,
2724 IN NDIS_HANDLE WrapperConfigurationContext,
2725 OUT PUINT SlotNumber,
2726 OUT PNDIS_EISA_FUNCTION_INFORMATION *EisaData,
2727 OUT PUINT NumberOfFunctions);
2731 NdisReadMcaPosInformation(
2732 OUT PNDIS_STATUS Status,
2733 IN NDIS_HANDLE WrapperConfigurationContext,
2734 IN PUINT ChannelNumber,
2735 OUT PNDIS_MCA_POS_DATA McaData);
2742 #define DISPATCH_LEVEL 2
2744 #define NdisAllocateSpinLock(_SpinLock) KeInitializeSpinLock(&(_SpinLock)->SpinLock)
2746 #define NdisFreeSpinLock(_SpinLock)
2748 #define NdisAcquireSpinLock(_SpinLock) KeAcquireSpinLock(&(_SpinLock)->SpinLock, &(_SpinLock)->OldIrql)
2750 #define NdisReleaseSpinLock(_SpinLock) KeReleaseSpinLock(&(_SpinLock)->SpinLock,(_SpinLock)->OldIrql)
2752 #define NdisDprAcquireSpinLock(_SpinLock) \
2754 KeAcquireSpinLockAtDpcLevel(&(_SpinLock)->SpinLock); \
2755 (_SpinLock)->OldIrql = DISPATCH_LEVEL; \
2758 #define NdisDprReleaseSpinLock(_SpinLock) KeReleaseSpinLockFromDpcLevel(&(_SpinLock)->SpinLock)
2768 NdisAllocateSpinLock(
2769 IN PNDIS_SPIN_LOCK SpinLock
2776 IN PNDIS_SPIN_LOCK SpinLock
2782 NdisAcquireSpinLock(
2783 IN PNDIS_SPIN_LOCK SpinLock
2789 NdisReleaseSpinLock(
2790 IN PNDIS_SPIN_LOCK SpinLock
2796 NdisDprAcquireSpinLock(
2797 IN PNDIS_SPIN_LOCK SpinLock
2803 NdisDprReleaseSpinLock(
2804 IN PNDIS_SPIN_LOCK SpinLock
2811 NdisGetCurrentSystemTime(
2812 PLARGE_INTEGER pSystemTime
2818 NdisAcquireReadWriteLock(
2819 IN PNDIS_RW_LOCK Lock,
2821 IN PLOCK_STATE LockState);
2825 NdisAllocateMemoryWithTag(
2826 OUT PVOID *VirtualAddress,
2832 NdisAllocatePacketPoolEx(
2833 OUT PNDIS_STATUS Status,
2834 OUT PNDIS_HANDLE PoolHandle,
2835 IN UINT NumberOfDescriptors,
2836 IN UINT NumberOfOverflowDescriptors,
2837 IN UINT ProtocolReservedLength);
2842 IN PNDIS_BUFFER Buffer);
2846 NdisBufferVirtualAddress(
2847 IN PNDIS_BUFFER Buffer);
2851 NdisCompletePnPEvent(
2852 IN NDIS_STATUS Status,
2853 IN NDIS_HANDLE NdisBindingHandle,
2854 IN PNET_PNP_EVENT NetPnPEvent);
2858 NdisConvertStringToAtmAddress(
2859 OUT PNDIS_STATUS Status,
2860 IN PNDIS_STRING String,
2861 OUT PATM_ADDRESS AtmAddress);
2865 NdisGetCurrentProcessorCounts(
2866 OUT PULONG pIdleCount,
2867 OUT PULONG pKernelAndUser,
2872 NdisGetDriverHandle(
2873 IN PNDIS_HANDLE NdisBindingHandle,
2874 OUT PNDIS_HANDLE NdisDriverHandle);
2878 NdisGetReceivedPacket(
2879 IN PNDIS_HANDLE NdisBindingHandle,
2880 IN PNDIS_HANDLE MacContext);
2884 NdisGetSystemUptime(
2885 OUT PULONG pSystemUpTime);
2889 NdisInitializeReadWriteLock(
2890 IN PNDIS_RW_LOCK Lock);
2894 NdisInterlockedDecrement(
2899 NdisInterlockedIncrement(
2904 NdisInterlockedPopEntrySList(
2905 IN PSLIST_HEADER ListHead,
2906 IN PKSPIN_LOCK Lock);
2910 NdisInterlockedPushEntrySList(
2911 IN PSLIST_HEADER ListHead,
2912 IN PSINGLE_LIST_ENTRY ListEntry,
2913 IN PKSPIN_LOCK Lock);
2918 NdisMDeregisterDevice(
2919 IN NDIS_HANDLE NdisDeviceHandle);
2923 NdisMGetDeviceProperty(
2924 IN NDIS_HANDLE MiniportAdapterHandle,
2925 IN OUT PDEVICE_OBJECT *PhysicalDeviceObject OPTIONAL,
2926 IN OUT PDEVICE_OBJECT *FunctionalDeviceObject OPTIONAL,
2927 IN OUT PDEVICE_OBJECT *NextDeviceObject OPTIONAL,
2928 IN OUT PCM_RESOURCE_LIST *AllocatedResources OPTIONAL,
2929 IN OUT PCM_RESOURCE_LIST *AllocatedResourcesTranslated OPTIONAL);
2933 NdisMInitializeScatterGatherDma(
2934 IN NDIS_HANDLE MiniportAdapterHandle,
2935 IN BOOLEAN Dma64BitAddresses,
2936 IN ULONG MaximumPhysicalMapping);
2940 NdisMPromoteMiniport(
2941 IN NDIS_HANDLE MiniportAdapterHandle);
2945 NdisMQueryAdapterInstanceName(
2946 OUT PNDIS_STRING AdapterInstanceName,
2947 IN NDIS_HANDLE MiniportAdapterHandle);
2951 NdisMRegisterDevice(
2952 IN NDIS_HANDLE NdisWrapperHandle,
2953 IN PNDIS_STRING DeviceName,
2954 IN PNDIS_STRING SymbolicName,
2955 IN PDRIVER_DISPATCH MajorFunctions[],
2956 OUT PDEVICE_OBJECT *pDeviceObject,
2957 OUT NDIS_HANDLE *NdisDeviceHandle);
2961 NdisMRegisterUnloadHandler(
2962 IN NDIS_HANDLE NdisWrapperHandle,
2963 IN PDRIVER_UNLOAD UnloadHandler);
2967 NdisMRemoveMiniport(
2968 IN NDIS_HANDLE MiniportAdapterHandle);
2972 NdisMSetMiniportSecondary(
2973 IN NDIS_HANDLE MiniportAdapterHandle,
2974 IN NDIS_HANDLE PrimaryMiniportAdapterHandle);
2978 NdisPacketPoolUsage(
2979 IN NDIS_HANDLE PoolHandle);
2983 NdisQueryAdapterInstanceName(
2984 OUT PNDIS_STRING AdapterInstanceName,
2985 IN NDIS_HANDLE NdisBindingHandle);
2989 NdisQueryBufferSafe(
2990 IN PNDIS_BUFFER Buffer,
2991 OUT PVOID *VirtualAddress OPTIONAL,
2997 NdisReadPcmciaAttributeMemory(
2998 IN NDIS_HANDLE NdisAdapterHandle,
3005 NdisReleaseReadWriteLock(
3006 IN PNDIS_RW_LOCK Lock,
3007 IN PLOCK_STATE LockState);
3012 NdisWriteEventLogEntry(
3014 IN NDIS_STATUS EventCode,
3015 IN ULONG UniqueEventValue,
3016 IN USHORT NumStrings,
3017 IN PVOID StringsList OPTIONAL,
3019 IN PVOID Data OPTIONAL);
3023 NdisWritePcmciaAttributeMemory(
3024 IN NDIS_HANDLE NdisAdapterHandle,
3030 /* Connectionless services */
3035 IN NDIS_HANDLE NdisVcHandle,
3036 IN NDIS_HANDLE ProtocolPartyContext,
3037 IN OUT PCO_CALL_PARAMETERS CallParameters,
3038 OUT PNDIS_HANDLE NdisPartyHandle);
3042 NdisClCloseAddressFamily(
3043 IN NDIS_HANDLE NdisAfHandle);
3048 IN NDIS_HANDLE NdisVcHandle,
3049 IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
3050 IN PVOID Buffer OPTIONAL,
3055 NdisClDeregisterSap(
3056 IN NDIS_HANDLE NdisSapHandle);
3061 IN NDIS_HANDLE NdisPartyHandle,
3062 IN PVOID Buffer OPTIONAL,
3067 NdisClIncomingCallComplete(
3068 IN NDIS_STATUS Status,
3069 IN NDIS_HANDLE NdisVcHandle,
3070 IN PCO_CALL_PARAMETERS CallParameters);
3075 IN NDIS_HANDLE NdisVcHandle,
3076 IN OUT PCO_CALL_PARAMETERS CallParameters,
3077 IN NDIS_HANDLE ProtocolPartyContext OPTIONAL,
3078 OUT PNDIS_HANDLE NdisPartyHandle OPTIONAL);
3082 NdisClModifyCallQoS(
3083 IN NDIS_HANDLE NdisVcHandle,
3084 IN PCO_CALL_PARAMETERS CallParameters);
3089 NdisClOpenAddressFamily(
3090 IN NDIS_HANDLE NdisBindingHandle,
3091 IN PCO_ADDRESS_FAMILY AddressFamily,
3092 IN NDIS_HANDLE ProtocolAfContext,
3093 IN PNDIS_CLIENT_CHARACTERISTICS ClCharacteristics,
3094 IN UINT SizeOfClCharacteristics,
3095 OUT PNDIS_HANDLE NdisAfHandle);
3100 IN NDIS_HANDLE NdisAfHandle,
3101 IN NDIS_HANDLE ProtocolSapContext,
3103 OUT PNDIS_HANDLE NdisSapHandle);
3106 /* Call Manager services */
3111 IN NDIS_HANDLE NdisVcHandle,
3112 IN OUT PCO_CALL_PARAMETERS CallParameters);
3116 NdisCmAddPartyComplete(
3117 IN NDIS_STATUS Status,
3118 IN NDIS_HANDLE NdisPartyHandle,
3119 IN NDIS_HANDLE CallMgrPartyContext OPTIONAL,
3120 IN PCO_CALL_PARAMETERS CallParameters);
3124 NdisCmCloseAddressFamilyComplete(
3125 IN NDIS_STATUS Status,
3126 IN NDIS_HANDLE NdisAfHandle);
3130 NdisCmCloseCallComplete(
3131 IN NDIS_STATUS Status,
3132 IN NDIS_HANDLE NdisVcHandle,
3133 IN NDIS_HANDLE NdisPartyHandle OPTIONAL);
3138 IN NDIS_HANDLE NdisVcHandle);
3142 NdisCmDeregisterSapComplete(
3143 IN NDIS_STATUS Status,
3144 IN NDIS_HANDLE NdisSapHandle);
3148 NdisCmDispatchCallConnected(
3149 IN NDIS_HANDLE NdisVcHandle);
3153 NdisCmDispatchIncomingCall(
3154 IN NDIS_HANDLE NdisSapHandle,
3155 IN NDIS_HANDLE NdisVcHandle,
3156 IN PCO_CALL_PARAMETERS CallParameters);
3160 NdisCmDispatchIncomingCallQoSChange(
3161 IN NDIS_HANDLE NdisVcHandle,
3162 IN PCO_CALL_PARAMETERS CallParameters);
3166 NdisCmDispatchIncomingCloseCall(
3167 IN NDIS_STATUS CloseStatus,
3168 IN NDIS_HANDLE NdisVcHandle,
3169 IN PVOID Buffer OPTIONAL,
3174 NdisCmDispatchIncomingDropParty(
3175 IN NDIS_STATUS DropStatus,
3176 IN NDIS_HANDLE NdisPartyHandle,
3177 IN PVOID Buffer OPTIONAL,
3182 NdisCmDropPartyComplete(
3183 IN NDIS_STATUS Status,
3184 IN NDIS_HANDLE NdisPartyHandle);
3188 NdisCmMakeCallComplete(
3189 IN NDIS_STATUS Status,
3190 IN NDIS_HANDLE NdisVcHandle,
3191 IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
3192 IN NDIS_HANDLE CallMgrPartyContext OPTIONAL,
3193 IN PCO_CALL_PARAMETERS CallParameters);
3197 NdisCmModifyCallQoSComplete(
3198 IN NDIS_STATUS Status,
3199 IN NDIS_HANDLE NdisVcHandle,
3200 IN PCO_CALL_PARAMETERS CallParameters);
3204 NdisCmOpenAddressFamilyComplete(
3205 IN NDIS_STATUS Status,
3206 IN NDIS_HANDLE NdisAfHandle,
3207 IN NDIS_HANDLE CallMgrAfContext);
3211 NdisCmRegisterAddressFamily(
3212 IN NDIS_HANDLE NdisBindingHandle,
3213 IN PCO_ADDRESS_FAMILY AddressFamily,
3214 IN PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics,
3215 IN UINT SizeOfCmCharacteristics);
3219 NdisCmRegisterSapComplete(
3220 IN NDIS_STATUS Status,
3221 IN NDIS_HANDLE NdisSapHandle,
3222 IN NDIS_HANDLE CallMgrSapContext);
3228 IN NDIS_HANDLE NdisVcHandle,
3229 IN PCO_CALL_PARAMETERS CallParameters);
3234 IN NDIS_HANDLE MiniportAdapterHandle,
3235 IN NDIS_HANDLE NdisAfHandle,
3236 IN NDIS_HANDLE MiniportVcContext,
3237 OUT PNDIS_HANDLE NdisVcHandle);
3241 NdisMCmDeactivateVc(
3242 IN NDIS_HANDLE NdisVcHandle);
3247 IN NDIS_HANDLE NdisVcHandle);
3251 NdisMCmRegisterAddressFamily(
3252 IN NDIS_HANDLE MiniportAdapterHandle,
3253 IN PCO_ADDRESS_FAMILY AddressFamily,
3254 IN PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics,
3255 IN UINT SizeOfCmCharacteristics);
3260 IN NDIS_HANDLE NdisAfHandle,
3261 IN NDIS_HANDLE NdisVcHandle OPTIONAL,
3262 IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
3263 IN OUT PNDIS_REQUEST NdisRequest);
3266 /* Connection-oriented services */
3271 IN NDIS_HANDLE NdisBindingHandle,
3272 IN NDIS_HANDLE NdisAfHandle OPTIONAL,
3273 IN NDIS_HANDLE ProtocolVcContext,
3274 IN OUT PNDIS_HANDLE NdisVcHandle);
3279 IN NDIS_HANDLE NdisVcHandle);
3284 IN NDIS_HANDLE NdisBindingHandle,
3285 IN NDIS_HANDLE NdisAfHandle OPTIONAL,
3286 IN NDIS_HANDLE NdisVcHandle OPTIONAL,
3287 IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
3288 IN OUT PNDIS_REQUEST NdisRequest);
3292 NdisCoRequestComplete(
3293 IN NDIS_STATUS Status,
3294 IN NDIS_HANDLE NdisAfHandle,
3295 IN NDIS_HANDLE NdisVcHandle OPTIONAL,
3296 IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
3297 IN PNDIS_REQUEST NdisRequest);
3302 IN NDIS_HANDLE NdisVcHandle,
3303 IN PPNDIS_PACKET PacketArray,
3304 IN UINT NumberOfPackets);
3309 NdisMCoActivateVcComplete(
3310 IN NDIS_STATUS Status,
3311 IN NDIS_HANDLE NdisVcHandle,
3312 IN PCO_CALL_PARAMETERS CallParameters);
3316 NdisMCoDeactivateVcComplete(
3317 IN NDIS_STATUS Status,
3318 IN NDIS_HANDLE NdisVcHandle);
3322 NdisMCoIndicateReceivePacket(
3323 IN NDIS_HANDLE NdisVcHandle,
3324 IN PPNDIS_PACKET PacketArray,
3325 IN UINT NumberOfPackets);
3329 NdisMCoIndicateStatus(
3330 IN NDIS_HANDLE MiniportAdapterHandle,
3331 IN NDIS_HANDLE NdisVcHandle OPTIONAL,
3332 IN NDIS_STATUS GeneralStatus,
3333 IN PVOID StatusBuffer OPTIONAL,
3334 IN ULONG StatusBufferSize);
3338 NdisMCoReceiveComplete(
3339 IN NDIS_HANDLE MiniportAdapterHandle);
3343 NdisMCoRequestComplete(
3344 IN NDIS_STATUS Status,
3345 IN NDIS_HANDLE MiniportAdapterHandle,
3346 IN PNDIS_REQUEST Request);
3350 NdisMCoSendComplete(
3351 IN NDIS_STATUS Status,
3352 IN NDIS_HANDLE NdisVcHandle,
3353 IN PNDIS_PACKET Packet);
3356 /* NDIS 5.0 extensions for intermediate drivers */
3360 NdisIMAssociateMiniport(
3361 IN NDIS_HANDLE DriverHandle,
3362 IN NDIS_HANDLE ProtocolHandle);
3366 NdisIMCancelInitializeDeviceInstance(
3367 IN NDIS_HANDLE DriverHandle,
3368 IN PNDIS_STRING DeviceInstance);
3372 NdisIMCopySendCompletePerPacketInfo(
3373 IN PNDIS_PACKET DstPacket,
3374 IN PNDIS_PACKET SrcPacket);
3378 NdisIMCopySendPerPacketInfo(
3379 IN PNDIS_PACKET DstPacket,
3380 IN PNDIS_PACKET SrcPacket);
3384 NdisIMDeregisterLayeredMiniport(
3385 IN NDIS_HANDLE DriverHandle);
3389 NdisIMGetBindingContext(
3390 IN NDIS_HANDLE NdisBindingHandle);
3394 NdisIMGetDeviceContext(
3395 IN NDIS_HANDLE MiniportAdapterHandle);
3399 NdisIMInitializeDeviceInstanceEx(
3400 IN NDIS_HANDLE DriverHandle,
3401 IN PNDIS_STRING DriverInstance,
3402 IN NDIS_HANDLE DeviceContext OPTIONAL);
3404 //#endif /* NDIS50 */
3408 /* Prototypes for NDIS_MINIPORT_CHARACTERISTICS */
3410 typedef BOOLEAN STDCALL (*W_CHECK_FOR_HANG_HANDLER)(
3411 IN NDIS_HANDLE MiniportAdapterContext);
3413 typedef VOID STDCALL (*W_DISABLE_INTERRUPT_HANDLER)(
3414 IN NDIS_HANDLE MiniportAdapterContext);
3416 typedef VOID STDCALL (*W_ENABLE_INTERRUPT_HANDLER)(
3417 IN NDIS_HANDLE MiniportAdapterContext);
3419 typedef VOID STDCALL (*W_HALT_HANDLER)(
3420 IN NDIS_HANDLE MiniportAdapterContext);
3422 typedef VOID STDCALL (*W_HANDLE_INTERRUPT_HANDLER)(
3423 IN NDIS_HANDLE MiniportAdapterContext);
3425 typedef NDIS_STATUS STDCALL (*W_INITIALIZE_HANDLER)(
3426 OUT PNDIS_STATUS OpenErrorStatus,
3427 OUT PUINT SelectedMediumIndex,
3428 IN PNDIS_MEDIUM MediumArray,
3429 IN UINT MediumArraySize,
3430 IN NDIS_HANDLE MiniportAdapterContext,
3431 IN NDIS_HANDLE WrapperConfigurationContext);
3433 typedef VOID STDCALL STDCALL (*W_ISR_HANDLER)(
3434 OUT PBOOLEAN InterruptRecognized,
3435 OUT PBOOLEAN QueueMiniportHandleInterrupt,
3436 IN NDIS_HANDLE MiniportAdapterContext);
3438 typedef NDIS_STATUS STDCALL (*W_QUERY_INFORMATION_HANDLER)(
3439 IN NDIS_HANDLE MiniportAdapterContext,
3441 IN PVOID InformationBuffer,
3442 IN ULONG InformationBufferLength,
3443 OUT PULONG BytesWritten,
3444 OUT PULONG BytesNeeded);
3446 typedef NDIS_STATUS STDCALL (*W_RECONFIGURE_HANDLER)(
3447 OUT PNDIS_STATUS OpenErrorStatus,
3448 IN NDIS_HANDLE MiniportAdapterContext,
3449 IN NDIS_HANDLE WrapperConfigurationContext);
3451 typedef NDIS_STATUS STDCALL (*W_RESET_HANDLER)(
3452 OUT PBOOLEAN AddressingReset,
3453 IN NDIS_HANDLE MiniportAdapterContext);
3455 typedef NDIS_STATUS STDCALL (*W_SEND_HANDLER)(
3456 IN NDIS_HANDLE MiniportAdapterContext,
3457 IN PNDIS_PACKET Packet,
3460 typedef NDIS_STATUS STDCALL (*WM_SEND_HANDLER)(
3461 IN NDIS_HANDLE MiniportAdapterContext,
3462 IN NDIS_HANDLE NdisLinkHandle,
3463 IN PNDIS_WAN_PACKET Packet);
3465 typedef NDIS_STATUS STDCALL (*W_SET_INFORMATION_HANDLER)(
3466 IN NDIS_HANDLE MiniportAdapterContext,
3468 IN PVOID InformationBuffer,
3469 IN ULONG InformationBufferLength,
3470 OUT PULONG BytesRead,
3471 OUT PULONG BytesNeeded);
3473 typedef NDIS_STATUS STDCALL (*W_TRANSFER_DATA_HANDLER)(
3474 OUT PNDIS_PACKET Packet,
3475 OUT PUINT BytesTransferred,
3476 IN NDIS_HANDLE MiniportAdapterContext,
3477 IN NDIS_HANDLE MiniportReceiveContext,
3479 IN UINT BytesToTransfer);
3481 typedef NDIS_STATUS STDCALL (*WM_TRANSFER_DATA_HANDLER)(
3486 /* NDIS structures available only to miniport drivers */
3488 /* Technology specific defines */
3490 #define DECLARE_UNKNOWN_STRUCT(BaseName) \
3491 typedef struct _##BaseName BaseName, *P##BaseName;
3496 typedef struct _ARC_BUFFER_LIST
3501 struct _ARC_BUFFER_LIST *Next;
3502 } ARC_BUFFER_LIST, *PARC_BUFFER_LIST;
3504 DECLARE_UNKNOWN_STRUCT(ARC_FILTER)
3509 ArcFilterDprIndicateReceive(
3510 IN PARC_FILTER Filter,
3511 IN PUCHAR pRawHeader,
3517 ArcFilterDprIndicateReceiveComplete(
3518 IN PARC_FILTER Filter);
3523 #define ETH_LENGTH_OF_ADDRESS 6
3525 DECLARE_UNKNOWN_STRUCT(ETH_BINDING_INFO);
3527 typedef VOID (*ETH_ADDRESS_CHANGE)(VOID);
3528 typedef VOID (*ETH_FILTER_CHANGE)(VOID);
3529 typedef VOID (*ETH_DEFERRED_CLOSE)(VOID);
3531 typedef struct _ETH_FILTER
3533 PNDIS_SPIN_LOCK Lock;
3534 CHAR (*MCastAddressBuf)[ETH_LENGTH_OF_ADDRESS];
3535 struct _NDIS_MINIPORT_BLOCK *Miniport;
3536 UINT CombinedPacketFilter;
3537 PETH_BINDING_INFO OpenList;
3538 ETH_ADDRESS_CHANGE AddressChangeAction;
3539 ETH_FILTER_CHANGE FilterChangeAction;
3540 ETH_DEFERRED_CLOSE CloseAction;
3541 UINT MaxMulticastAddresses;
3543 UCHAR AdapterAddress[ETH_LENGTH_OF_ADDRESS];
3544 UINT OldCombinedPacketFilter;
3545 CHAR (*OldMCastAddressBuf)[ETH_LENGTH_OF_ADDRESS];
3546 UINT OldNumAddresses;
3547 PETH_BINDING_INFO DirectedList;
3548 PETH_BINDING_INFO BMList;
3549 PETH_BINDING_INFO MCastSet;
3553 NDIS_RW_LOCK BindListLock;
3556 } ETH_FILTER, *PETH_FILTER;
3561 EthChangeFilterAddresses(
3562 IN PETH_FILTER Filter,
3563 IN NDIS_HANDLE NdisFilterHandle,
3564 IN PNDIS_REQUEST NdisRequest,
3565 IN UINT AddressCount,
3566 IN CHAR Addresses[] [ETH_LENGTH_OF_ADDRESS],
3572 IN UINT MaximumMulticastAddresses,
3573 IN ETH_ADDRESS_CHANGE AddressChangeAction,
3574 IN ETH_FILTER_CHANGE FilterChangeAction,
3575 IN ETH_DEFERRED_CLOSE CloseAction,
3576 IN PUCHAR AdapterAddress,
3577 IN PNDIS_SPIN_LOCK Lock,
3578 OUT PETH_FILTER *Filter);
3583 IN PETH_FILTER Filter);
3587 EthDeleteFilterOpenAdapter(
3588 IN PETH_FILTER Filter,
3589 IN NDIS_HANDLE NdisFilterHandle,
3590 IN PNDIS_REQUEST NdisRequest);
3595 IN PETH_FILTER Filter,
3596 IN NDIS_HANDLE NdisFilterHandle,
3597 IN PNDIS_REQUEST NdisRequest,
3598 IN UINT FilterClasses,
3603 EthFilterIndicateReceive(
3604 IN PETH_FILTER Filter,
3605 IN NDIS_HANDLE MacReceiveContext,
3607 IN PVOID HeaderBuffer,
3608 IN UINT HeaderBufferSize,
3609 IN PVOID LookaheadBuffer,
3610 IN UINT LookaheadBufferSize,
3611 IN UINT PacketSize);
3615 EthFilterIndicateReceiveComplete(
3616 IN PETH_FILTER Filter);
3620 EthNoteFilterOpenAdapter(
3621 IN PETH_FILTER Filter,
3622 IN NDIS_HANDLE MacBindingHandle,
3623 IN NDIS_HANDLE NdisBindingContext,
3624 OUT PNDIS_HANDLE NdisFilterHandle);
3628 EthNumberOfOpenFilterAddresses(
3629 IN PETH_FILTER Filter,
3630 IN NDIS_HANDLE NdisFilterHandle);
3634 EthQueryGlobalFilterAddresses (
3635 OUT PNDIS_STATUS Status,
3636 IN PETH_FILTER Filter,
3637 IN UINT SizeOfArray,
3638 OUT PUINT NumberOfAddresses,
3639 IN OUT CHAR AddressArray[] [ETH_LENGTH_OF_ADDRESS]);
3643 EthQueryOpenFilterAddresses(
3644 OUT PNDIS_STATUS Status,
3645 IN PETH_FILTER Filter,
3646 IN NDIS_HANDLE NdisFilterHandle,
3647 IN UINT SizeOfArray,
3648 OUT PUINT NumberOfAddresses,
3649 IN OUT CHAR AddressArray[] [ETH_LENGTH_OF_ADDRESS]);
3653 EthShouldAddressLoopBack(
3654 IN PETH_FILTER Filter,
3655 IN CHAR Address[ETH_LENGTH_OF_ADDRESS]);
3660 #define FDDI_LENGTH_OF_LONG_ADDRESS 6
3661 #define FDDI_LENGTH_OF_SHORT_ADDRESS 2
3663 DECLARE_UNKNOWN_STRUCT(FDDI_FILTER)
3665 typedef VOID (*FDDI_ADDRESS_CHANGE)(VOID);
3666 typedef VOID (*FDDI_FILTER_CHANGE)(VOID);
3667 typedef VOID (*FDDI_DEFERRED_CLOSE)(VOID);
3672 FddiChangeFilterLongAddresses(
3673 IN PFDDI_FILTER Filter,
3674 IN NDIS_HANDLE NdisFilterHandle,
3675 IN PNDIS_REQUEST NdisRequest,
3676 IN UINT AddressCount,
3677 IN CHAR Addresses[] [FDDI_LENGTH_OF_LONG_ADDRESS],
3682 FddiChangeFilterShortAddresses(
3683 IN PFDDI_FILTER Filter,
3684 IN NDIS_HANDLE NdisFilterHandle,
3685 IN PNDIS_REQUEST NdisRequest,
3686 IN UINT AddressCount,
3687 IN CHAR Addresses[] [FDDI_LENGTH_OF_SHORT_ADDRESS],
3693 IN UINT MaximumMulticastLongAddresses,
3694 IN UINT MaximumMulticastShortAddresses,
3695 IN FDDI_ADDRESS_CHANGE AddressChangeAction,
3696 IN FDDI_FILTER_CHANGE FilterChangeAction,
3697 IN FDDI_DEFERRED_CLOSE CloseAction,
3698 IN PUCHAR AdapterLongAddress,
3699 IN PUCHAR AdapterShortAddress,
3700 IN PNDIS_SPIN_LOCK Lock,
3701 OUT PFDDI_FILTER *Filter);
3706 IN PFDDI_FILTER Filter);
3710 FddiDeleteFilterOpenAdapter(
3711 IN PFDDI_FILTER Filter,
3712 IN NDIS_HANDLE NdisFilterHandle,
3713 IN PNDIS_REQUEST NdisRequest);
3718 IN PFDDI_FILTER Filter,
3719 IN NDIS_HANDLE NdisFilterHandle,
3720 IN PNDIS_REQUEST NdisRequest,
3721 IN UINT FilterClasses,
3726 FddiFilterIndicateReceive(
3727 IN PFDDI_FILTER Filter,
3728 IN NDIS_HANDLE MacReceiveContext,
3730 IN UINT AddressLength,
3731 IN PVOID HeaderBuffer,
3732 IN UINT HeaderBufferSize,
3733 IN PVOID LookaheadBuffer,
3734 IN UINT LookaheadBufferSize,
3735 IN UINT PacketSize);
3739 FddiFilterIndicateReceiveComplete(
3740 IN PFDDI_FILTER Filter);
3744 FddiNoteFilterOpenAdapter(
3745 IN PFDDI_FILTER Filter,
3746 IN NDIS_HANDLE MacBindingHandle,
3747 IN NDIS_HANDLE NdisBindingContext,
3748 OUT PNDIS_HANDLE NdisFilterHandle);
3752 FddiNumberOfOpenFilterLongAddresses(
3753 IN PFDDI_FILTER Filter,
3754 IN NDIS_HANDLE NdisFilterHandle);
3758 FddiNumberOfOpenFilterShortAddresses(
3759 IN PFDDI_FILTER Filter,
3760 IN NDIS_HANDLE NdisFilterHandle);
3764 FddiQueryGlobalFilterLongAddresses(
3765 OUT PNDIS_STATUS Status,
3766 IN PFDDI_FILTER Filter,
3767 IN UINT SizeOfArray,
3768 OUT PUINT NumberOfAddresses,
3769 IN OUT CHAR AddressArray[] [FDDI_LENGTH_OF_LONG_ADDRESS]);
3773 FddiQueryGlobalFilterShortAddresses(
3774 OUT PNDIS_STATUS Status,
3775 IN PFDDI_FILTER Filter,
3776 IN UINT SizeOfArray,
3777 OUT PUINT NumberOfAddresses,
3778 IN OUT CHAR AddressArray[] [FDDI_LENGTH_OF_SHORT_ADDRESS]);
3782 FddiQueryOpenFilterLongAddresses(
3783 OUT PNDIS_STATUS Status,
3784 IN PFDDI_FILTER Filter,
3785 IN NDIS_HANDLE NdisFilterHandle,
3786 IN UINT SizeOfArray,
3787 OUT PUINT NumberOfAddresses,
3788 IN OUT CHAR AddressArray[] [FDDI_LENGTH_OF_LONG_ADDRESS]);
3792 FddiQueryOpenFilterShortAddresses(
3793 OUT PNDIS_STATUS Status,
3794 IN PFDDI_FILTER Filter,
3795 IN NDIS_HANDLE NdisFilterHandle,
3796 IN UINT SizeOfArray,
3797 OUT PUINT NumberOfAddresses,
3798 IN OUT CHAR AddressArray[] [FDDI_LENGTH_OF_SHORT_ADDRESS]);
3802 FddiShouldAddressLoopBack(
3803 IN PFDDI_FILTER Filter,
3805 IN UINT LengthOfAddress);
3810 #define TR_LENGTH_OF_FUNCTIONAL 4
3811 #define TR_LENGTH_OF_ADDRESS 6
3813 DECLARE_UNKNOWN_STRUCT(TR_FILTER)
3815 typedef VOID (*TR_ADDRESS_CHANGE)(VOID);
3816 typedef VOID (*TR_GROUP_CHANGE)(VOID);
3817 typedef VOID (*TR_FILTER_CHANGE)(VOID);
3818 typedef VOID (*TR_DEFERRED_CLOSE)(VOID);
3823 TrChangeFunctionalAddress(
3824 IN PTR_FILTER Filter,
3825 IN NDIS_HANDLE NdisFilterHandle,
3826 IN PNDIS_REQUEST NdisRequest,
3827 IN CHAR FunctionalAddressArray[TR_LENGTH_OF_FUNCTIONAL],
3832 TrChangeGroupAddress(
3833 IN PTR_FILTER Filter,
3834 IN NDIS_HANDLE NdisFilterHandle,
3835 IN PNDIS_REQUEST NdisRequest,
3836 IN CHAR GroupAddressArray[TR_LENGTH_OF_FUNCTIONAL],
3842 IN TR_ADDRESS_CHANGE AddressChangeAction,
3843 IN TR_GROUP_CHANGE GroupChangeAction,
3844 IN TR_FILTER_CHANGE FilterChangeAction,
3845 IN TR_DEFERRED_CLOSE CloseAction,
3846 IN PUCHAR AdapterAddress,
3847 IN PNDIS_SPIN_LOCK Lock,
3848 OUT PTR_FILTER *Filter);
3853 IN PTR_FILTER Filter);
3857 TrDeleteFilterOpenAdapter (
3858 IN PTR_FILTER Filter,
3859 IN NDIS_HANDLE NdisFilterHandle,
3860 IN PNDIS_REQUEST NdisRequest);
3865 IN PTR_FILTER Filter,
3866 IN NDIS_HANDLE NdisFilterHandle,
3867 IN PNDIS_REQUEST NdisRequest,
3868 IN UINT FilterClasses,
3873 TrFilterIndicateReceive(
3874 IN PTR_FILTER Filter,
3875 IN NDIS_HANDLE MacReceiveContext,
3876 IN PVOID HeaderBuffer,
3877 IN UINT HeaderBufferSize,
3878 IN PVOID LookaheadBuffer,
3879 IN UINT LookaheadBufferSize,
3880 IN UINT PacketSize);
3884 TrFilterIndicateReceiveComplete(
3885 IN PTR_FILTER Filter);
3889 TrNoteFilterOpenAdapter(
3890 IN PTR_FILTER Filter,
3891 IN NDIS_HANDLE MacBindingHandle,
3892 IN NDIS_HANDLE NdisBindingContext,
3893 OUT PNDIS_HANDLE NdisFilterHandle);
3897 TrShouldAddressLoopBack(
3898 IN PTR_FILTER Filter,
3899 IN CHAR DestinationAddress[TR_LENGTH_OF_ADDRESS],
3900 IN CHAR SourceAddress[TR_LENGTH_OF_ADDRESS]);
3905 typedef struct _NDIS30_MINIPORT_CHARACTERISTICS
3907 UCHAR MajorNdisVersion;
3908 UCHAR MinorNdisVersion;
3910 W_CHECK_FOR_HANG_HANDLER CheckForHangHandler;
3911 W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler;
3912 W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler;
3913 W_HALT_HANDLER HaltHandler;
3914 W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler;
3915 W_INITIALIZE_HANDLER InitializeHandler;
3916 W_ISR_HANDLER ISRHandler;
3917 W_QUERY_INFORMATION_HANDLER QueryInformationHandler;
3918 W_RECONFIGURE_HANDLER ReconfigureHandler;
3919 W_RESET_HANDLER ResetHandler;
3922 W_SEND_HANDLER SendHandler;
3923 WM_SEND_HANDLER WanSendHandler;
3925 W_SET_INFORMATION_HANDLER SetInformationHandler;
3928 W_TRANSFER_DATA_HANDLER TransferDataHandler;
3929 WM_TRANSFER_DATA_HANDLER WanTransferDataHandler;
3931 } NDIS30_MINIPORT_CHARACTERISTICS;
3932 typedef NDIS30_MINIPORT_CHARACTERISTICS NDIS30_MINIPORT_CHARACTERISTICS_S;
3934 #define NDIS30_MINIPORT_CHARACTERISTICS \
3935 UCHAR MajorNdisVersion; \
3936 UCHAR MinorNdisVersion; \
3938 W_CHECK_FOR_HANG_HANDLER CheckForHangHandler; \
3939 W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler; \
3940 W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler; \
3941 W_HALT_HANDLER HaltHandler; \
3942 W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler; \
3943 W_INITIALIZE_HANDLER InitializeHandler; \
3944 W_ISR_HANDLER ISRHandler; \
3945 W_QUERY_INFORMATION_HANDLER QueryInformationHandler; \
3946 W_RECONFIGURE_HANDLER ReconfigureHandler; \
3947 W_RESET_HANDLER ResetHandler; \
3950 W_SEND_HANDLER SendHandler; \
3951 WM_SEND_HANDLER WanSendHandler; \
3953 W_SET_INFORMATION_HANDLER SetInformationHandler; \
3956 W_TRANSFER_DATA_HANDLER TransferDataHandler; \
3957 WM_TRANSFER_DATA_HANDLER WanTransferDataHandler; \
3959 typedef struct _NDIS30_MINIPORT_CHARACTERISTICS_S
3961 NDIS30_MINIPORT_CHARACTERISTICS;
3962 } NDIS30_MINIPORT_CHARACTERISTICS_S, *PSNDIS30_MINIPORT_CHARACTERISTICS_S;
3965 /* Extensions for NDIS 4.0 miniports */
3967 typedef VOID (*W_SEND_PACKETS_HANDLER)(
3968 IN NDIS_HANDLE MiniportAdapterContext,
3969 IN PPNDIS_PACKET PacketArray,
3970 IN UINT NumberOfPackets);
3974 typedef VOID (*W_RETURN_PACKET_HANDLER)(
3975 IN NDIS_HANDLE MiniportAdapterContext,
3976 IN PNDIS_PACKET Packet);
3978 typedef VOID (*W_ALLOCATE_COMPLETE_HANDLER)(
3979 IN NDIS_HANDLE MiniportAdapterContext,
3980 IN PVOID VirtualAddress,
3981 IN PNDIS_PHYSICAL_ADDRESS PhysicalAddress,
3986 typedef struct _NDIS40_MINIPORT_CHARACTERISTICS
3988 NDIS30_MINIPORT_CHARACTERISTICS;
3990 W_RETURN_PACKET_HANDLER ReturnPacketHandler;
3991 W_SEND_PACKETS_HANDLER SendPacketsHandler;
3992 W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
3993 } NDIS40_MINIPORT_CHARACTERISTICS;
3994 typedef NDIS40_MINIPORT_CHARACTERISTICS NDIS40_MINIPORT_CHARACTERISTICS_S;
3996 #define NDIS40_MINIPORT_CHARACTERISTICS \
3997 NDIS30_MINIPORT_CHARACTERISTICS; \
3998 W_RETURN_PACKET_HANDLER ReturnPacketHandler; \
3999 W_SEND_PACKETS_HANDLER SendPacketsHandler; \
4000 W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
4001 typedef struct _NDIS40_MINIPORT_CHARACTERISTICS_S
4003 NDIS40_MINIPORT_CHARACTERISTICS;
4004 } NDIS40_MINIPORT_CHARACTERISTICS_S, *PSNDIS40_MINIPORT_CHARACTERISTICS_S;
4009 /* Extensions for NDIS 5.0 miniports */
4013 typedef NDIS_STATUS (*W_CO_CREATE_VC_HANDLER)(
4014 IN NDIS_HANDLE MiniportAdapterContext,
4015 IN NDIS_HANDLE NdisVcHandle,
4016 OUT PNDIS_HANDLE MiniportVcContext);
4018 typedef NDIS_STATUS (*W_CO_DELETE_VC_HANDLER)(
4019 IN NDIS_HANDLE MiniportVcContext);
4021 typedef NDIS_STATUS (*W_CO_ACTIVATE_VC_HANDLER)(
4022 IN NDIS_HANDLE MiniportVcContext,
4023 IN OUT PCO_CALL_PARAMETERS CallParameters);
4025 typedef NDIS_STATUS (*W_CO_DEACTIVATE_VC_HANDLER)(
4026 IN NDIS_HANDLE MiniportVcContext);
4028 typedef VOID (*W_CO_SEND_PACKETS_HANDLER)(
4029 IN NDIS_HANDLE MiniportVcContext,
4030 IN PPNDIS_PACKET PacketArray,
4031 IN UINT NumberOfPackets);
4033 typedef NDIS_STATUS (*W_CO_REQUEST_HANDLER)(
4034 IN NDIS_HANDLE MiniportAdapterContext,
4035 IN NDIS_HANDLE MiniportVcContext OPTIONAL,
4036 IN OUT PNDIS_REQUEST NdisRequest);
4039 typedef struct _NDIS50_MINIPORT_CHARACTERISTICS
4041 NDIS40_MINIPORT_CHARACTERISTICS;
4043 W_CO_CREATE_VC_HANDLER CoCreateVcHandler;
4044 W_CO_DELETE_VC_HANDLER CoDeleteVcHandler;
4045 W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler;
4046 W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler;
4047 W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler;
4048 W_CO_REQUEST_HANDLER CoRequestHandler;
4049 } NDIS50_MINIPORT_CHARACTERISTICS;
4050 typedef NDIS50_MINIPORT_CHARACTERISTICS NDIS50_MINIPORT_CHARACTERISTICS_S;
4052 #define NDIS50_MINIPORT_CHARACTERISTICS \
4053 NDIS40_MINIPORT_CHARACTERISTICS; \
4054 W_CO_CREATE_VC_HANDLER CoCreateVcHandler; \
4055 W_CO_DELETE_VC_HANDLER CoDeleteVcHandler; \
4056 W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler; \
4057 W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler; \
4058 W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler; \
4059 W_CO_REQUEST_HANDLER CoRequestHandler;
4060 typedef struct _NDIS50_MINIPORT_CHARACTERISTICS_S
4062 NDIS50_MINIPORT_CHARACTERISTICS;
4063 } NDIS50_MINIPORT_CHARACTERISTICS_S, *PSNDIS50_MINIPORT_CHARACTERISTICS_S;
4071 typedef struct _NDIS_MINIPORT_CHARACTERISTICS
4073 NDIS30_MINIPORT_CHARACTERISTICS;
4074 } NDIS_MINIPORT_CHARACTERISTICS;
4076 typedef struct _NDIS_MINIPORT_CHARACTERISTICS
4078 NDIS40_MINIPORT_CHARACTERISTICS;
4079 } NDIS_MINIPORT_CHARACTERISTICS;
4082 typedef struct _NDIS_MINIPORT_CHARACTERISTICS
4084 NDIS50_MINIPORT_CHARACTERISTICS;
4085 } NDIS_MINIPORT_CHARACTERISTICS;
4088 typedef NDIS_MINIPORT_CHARACTERISTICS *PNDIS_MINIPORT_CHARACTERISTICS;
4092 typedef NDIS_STATUS (*SEND_HANDLER)(
4093 IN NDIS_HANDLE MacBindingHandle,
4094 IN PNDIS_PACKET Packet);
4096 typedef NDIS_STATUS (*TRANSFER_DATA_HANDLER)(
4097 IN NDIS_HANDLE MacBindingHandle,
4098 IN NDIS_HANDLE MacReceiveContext,
4100 IN UINT BytesToTransfer,
4101 OUT PNDIS_PACKET Packet,
4102 OUT PUINT BytesTransferred);
4104 typedef NDIS_STATUS (*RESET_HANDLER)(
4105 IN NDIS_HANDLE MacBindingHandle);
4107 typedef NDIS_STATUS (*REQUEST_HANDLER)(
4108 IN NDIS_HANDLE MacBindingHandle,
4109 IN PNDIS_REQUEST NdisRequest);
4113 /* Structures available only to full MAC drivers */
4115 typedef BOOLEAN (*PNDIS_INTERRUPT_SERVICE)(
4116 IN PVOID InterruptContext);
4118 typedef VOID (*PNDIS_DEFERRED_PROCESSING)(
4119 IN PVOID SystemSpecific1,
4120 IN PVOID InterruptContext,
4121 IN PVOID SystemSpecific2,
4122 IN PVOID SystemSpecific3);
4125 typedef struct _NDIS_INTERRUPT
4127 PKINTERRUPT InterruptObject;
4128 KSPIN_LOCK DpcCountLock;
4129 PNDIS_INTERRUPT_SERVICE MacIsr;
4130 PNDIS_DEFERRED_PROCESSING MacDpc;
4132 PVOID InterruptContext;
4135 /* Used to tell when all DPCs for the adapter are completed */
4136 KEVENT DpcsCompletedEvent;
4137 } NDIS_INTERRUPT, *PNDIS_INTERRUPT;
4140 /* NDIS adapter information */
4142 typedef NDIS_STATUS (*PNDIS_ACTIVATE_CALLBACK)(
4143 IN NDIS_HANDLE NdisAdatperHandle,
4144 IN NDIS_HANDLE MacAdapterContext,
4145 IN ULONG DmaChannel);
4147 typedef struct _NDIS_PORT_DESCRIPTOR
4150 ULONG NumberOfPorts;
4152 } NDIS_PORT_DESCRIPTOR, *PNDIS_PORT_DESCRIPTOR;
4154 typedef struct _NDIS_ADAPTER_INFORMATION
4158 BOOLEAN Dma32BitAddresses;
4159 PNDIS_ACTIVATE_CALLBACK ActivateCallback;
4160 NDIS_INTERFACE_TYPE AdapterType;
4161 ULONG PhysicalMapRegistersNeeded;
4162 ULONG MaximumPhysicalMapping;
4163 ULONG NumberOfPortDescriptors;
4164 NDIS_PORT_DESCRIPTOR PortDescriptors[1];
4165 } NDIS_ADAPTER_INFORMATION, *PNDIS_ADAPTER_INFORMATION;
4168 /* Prototypes for NDIS_MAC_CHARACTERISTICS */
4170 typedef NDIS_STATUS (*OPEN_ADAPTER_HANDLER)(
4171 OUT PNDIS_STATUS OpenErrorStatus,
4172 OUT NDIS_HANDLE * MacBindingHandle,
4173 OUT PUINT SelectedMediumIndex,
4174 IN PNDIS_MEDIUM MediumArray,
4175 IN UINT MediumArraySize,
4176 IN NDIS_HANDLE NdisBindingContext,
4177 IN NDIS_HANDLE MacAdapterContext,
4178 IN UINT OpenOptions,
4179 IN PSTRING AddressingInformation OPTIONAL);
4181 typedef NDIS_STATUS (*CLOSE_ADAPTER_HANDLER)(
4182 IN NDIS_HANDLE MacBindingHandle);
4184 typedef NDIS_STATUS (*WAN_TRANSFER_DATA_HANDLER)(
4187 typedef NDIS_STATUS (*QUERY_GLOBAL_STATISTICS_HANDLER)(
4188 IN NDIS_HANDLE MacAdapterContext,
4189 IN PNDIS_REQUEST NdisRequest);
4191 typedef VOID (*UNLOAD_MAC_HANDLER)(
4192 IN NDIS_HANDLE MacMacContext);
4194 typedef NDIS_STATUS (*ADD_ADAPTER_HANDLER)(
4195 IN NDIS_HANDLE MacMacContext,
4196 IN NDIS_HANDLE WrapperConfigurationContext,
4197 IN PNDIS_STRING AdapterName);
4199 typedef VOID (*REMOVE_ADAPTER_HANDLER)(
4200 IN NDIS_HANDLE MacAdapterContext);
4202 typedef struct _NDIS_MAC_CHARACTERISTICS
4204 UCHAR MajorNdisVersion;
4205 UCHAR MinorNdisVersion;
4207 OPEN_ADAPTER_HANDLER OpenAdapterHandler;
4208 CLOSE_ADAPTER_HANDLER CloseAdapterHandler;
4209 SEND_HANDLER SendHandler;
4210 TRANSFER_DATA_HANDLER TransferDataHandler;
4211 RESET_HANDLER ResetHandler;
4212 REQUEST_HANDLER RequestHandler;
4213 QUERY_GLOBAL_STATISTICS_HANDLER QueryGlobalStatisticsHandler;
4214 UNLOAD_MAC_HANDLER UnloadMacHandler;
4215 ADD_ADAPTER_HANDLER AddAdapterHandler;
4216 REMOVE_ADAPTER_HANDLER RemoveAdapterHandler;
4218 } NDIS_MAC_CHARACTERISTICS, *PNDIS_MAC_CHARACTERISTICS;
4220 typedef NDIS_MAC_CHARACTERISTICS NDIS_WAN_MAC_CHARACTERISTICS;
4221 typedef NDIS_WAN_MAC_CHARACTERISTICS *PNDIS_WAN_MAC_CHARACTERISTICS;
4227 NdisAllocateSharedMemory(
4228 IN NDIS_HANDLE NdisAdapterHandle,
4231 OUT PVOID *VirtualAddress,
4232 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
4236 NdisCompleteCloseAdapter(
4237 IN NDIS_HANDLE NdisBindingContext,
4238 IN NDIS_STATUS Status);
4242 NdisCompleteOpenAdapter(
4243 IN NDIS_HANDLE NdisBindingContext,
4244 IN NDIS_STATUS Status,
4245 IN NDIS_STATUS OpenErrorStatus);
4249 NdisDeregisterAdapter(
4250 IN NDIS_HANDLE NdisAdapterHandle);
4254 NdisDeregisterAdapterShutdownHandler(
4255 IN NDIS_HANDLE NdisAdapterHandle);
4259 NdisFreeSharedMemory(
4260 IN NDIS_HANDLE NdisAdapterHandle,
4263 IN PVOID VirtualAddress,
4264 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
4268 NdisInitializeInterrupt(
4269 OUT PNDIS_STATUS Status,
4270 IN OUT PNDIS_INTERRUPT Interrupt,
4271 IN NDIS_HANDLE NdisAdapterHandle,
4272 IN PNDIS_INTERRUPT_SERVICE InterruptServiceRoutine,
4273 IN PVOID InterruptContext,
4274 IN PNDIS_DEFERRED_PROCESSING DeferredProcessingRoutine,
4275 IN UINT InterruptVector,
4276 IN UINT InterruptLevel,
4277 IN BOOLEAN SharedInterrupt,
4278 IN NDIS_INTERRUPT_MODE InterruptMode);
4283 OUT PNDIS_STATUS Status,
4284 OUT PVOID *VirtualAddress,
4285 IN NDIS_HANDLE NdisAdapterHandle,
4286 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
4291 NdisRegisterAdapter(
4292 OUT PNDIS_HANDLE NdisAdapterHandle,
4293 IN NDIS_HANDLE NdisMacHandle,
4294 IN NDIS_HANDLE MacAdapterContext,
4295 IN NDIS_HANDLE WrapperConfigurationContext,
4296 IN PNDIS_STRING AdapterName,
4297 IN PVOID AdapterInformation);
4301 NdisRegisterAdapterShutdownHandler(
4302 IN NDIS_HANDLE NdisAdapterHandle,
4303 IN PVOID ShutdownContext,
4304 IN ADAPTER_SHUTDOWN_HANDLER ShutdownHandler);
4309 OUT PNDIS_STATUS Status,
4310 OUT PNDIS_HANDLE NdisMacHandle,
4311 IN NDIS_HANDLE NdisWrapperHandle,
4312 IN NDIS_HANDLE MacMacContext,
4313 IN PNDIS_MAC_CHARACTERISTICS MacCharacteristics,
4314 IN UINT CharacteristicsLength);
4318 NdisReleaseAdapterResources(
4319 IN NDIS_HANDLE NdisAdapterHandle);
4323 NdisRemoveInterrupt(
4324 IN PNDIS_INTERRUPT Interrupt);
4328 typedef struct _NDIS_MAC_BLOCK NDIS_MAC_BLOCK, *PNDIS_MAC_BLOCK;
4329 typedef struct _NDIS_ADAPTER_BLOCK NDIS_ADAPTER_BLOCK, *PNDIS_ADAPTER_BLOCK;
4330 typedef struct _NDIS_MINIPORT_BLOCK NDIS_MINIPORT_BLOCK, *PNDIS_MINIPORT_BLOCK;
4331 typedef struct _NDIS_PROTOCOL_BLOCK NDIS_PROTOCOL_BLOCK, *PNDIS_PROTOCOL_BLOCK;
4332 typedef struct _NDIS_OPEN_BLOCK NDIS_OPEN_BLOCK, *PNDIS_OPEN_BLOCK;
4333 typedef struct _NDIS_M_DRIVER_BLOCK NDIS_M_DRIVER_BLOCK, *PNDIS_M_DRIVER_BLOCK;
4334 typedef struct _NDIS_AF_LIST NDIS_AF_LIST, *PNDIS_AF_LIST;
4335 typedef struct _NULL_FILTER NULL_FILTER, *PNULL_FILTER;
4338 typedef struct _REFERENCE
4340 KSPIN_LOCK SpinLock;
4341 USHORT ReferenceCount;
4343 } REFERENCE, *PREFERENCE;
4345 typedef struct _NDIS_MINIPORT_INTERRUPT
4347 PKINTERRUPT InterruptObject;
4348 KSPIN_LOCK DpcCountLock;
4349 PVOID MiniportIdField;
4350 W_ISR_HANDLER MiniportIsr;
4351 W_HANDLE_INTERRUPT_HANDLER MiniportDpc;
4353 PNDIS_MINIPORT_BLOCK Miniport;
4358 KEVENT DpcsCompletedEvent;
4360 BOOLEAN SharedInterrupt;
4361 BOOLEAN IsrRequested;
4362 } NDIS_MINIPORT_INTERRUPT, *PNDIS_MINIPORT_INTERRUPT;
4364 typedef struct _NDIS_MINIPORT_TIMER
4368 PNDIS_TIMER_FUNCTION MiniportTimerFunction;
4369 PVOID MiniportTimerContext;
4370 PNDIS_MINIPORT_BLOCK Miniport;
4371 struct _NDIS_MINIPORT_TIMER *NextDeferredTimer;
4372 } NDIS_MINIPORT_TIMER, *PNDIS_MINIPORT_TIMER;
4375 typedef struct _MAP_REGISTER_ENTRY
4378 BOOLEAN WriteToDevice;
4379 } MAP_REGISTER_ENTRY, *PMAP_REGISTER_ENTRY;
4382 typedef enum _NDIS_WORK_ITEM_TYPE
4384 NdisWorkItemRequest,
4386 NdisWorkItemReturnPackets,
4387 NdisWorkItemResetRequested,
4388 NdisWorkItemResetInProgress,
4390 NdisWorkItemSendLoopback,
4391 NdisWorkItemMiniportCallback,
4393 } NDIS_WORK_ITEM_TYPE, *PNDIS_WORK_ITEM_TYPE;
4395 #define NUMBER_OF_WORK_ITEM_TYPES NdisMaxWorkItems
4396 #define NUMBER_OF_SINGLE_WORK_ITEMS 6
4398 typedef struct _NDIS_MINIPORT_WORK_ITEM
4400 SINGLE_LIST_ENTRY Link;
4401 NDIS_WORK_ITEM_TYPE WorkItemType;
4402 PVOID WorkItemContext;
4404 NDIS_HANDLE Initiator;
4405 } NDIS_MINIPORT_WORK_ITEM, *PNDIS_MINIPORT_WORK_ITEM;
4408 typedef struct _NDIS_BIND_PATHS
4411 NDIS_STRING Paths[1];
4412 } NDIS_BIND_PATHS, *PNDIS_BIND_PATHS;
4414 typedef struct _FILTERDBS
4419 PNULL_FILTER NullDB;
4422 PFDDI_FILTER FddiDB;
4424 } FILTERDBS, *PFILTERDBS;
4427 typedef VOID (*ETH_RCV_COMPLETE_HANDLER)(
4428 IN PETH_FILTER Filter);
4430 typedef VOID (*ETH_RCV_INDICATE_HANDLER)(
4431 IN PETH_FILTER Filter,
4432 IN NDIS_HANDLE MacReceiveContext,
4434 IN PVOID HeaderBuffer,
4435 IN UINT HeaderBufferSize,
4436 IN PVOID LookaheadBuffer,
4437 IN UINT LookaheadBufferSize,
4438 IN UINT PacketSize);
4440 typedef VOID (*FDDI_RCV_COMPLETE_HANDLER)(
4441 IN PFDDI_FILTER Filter);
4443 typedef VOID (*FDDI_RCV_INDICATE_HANDLER)(
4444 IN PFDDI_FILTER Filter,
4445 IN NDIS_HANDLE MacReceiveContext,
4447 IN UINT AddressLength,
4448 IN PVOID HeaderBuffer,
4449 IN UINT HeaderBufferSize,
4450 IN PVOID LookaheadBuffer,
4451 IN UINT LookaheadBufferSize,
4452 IN UINT PacketSize);
4454 typedef VOID STDCALL (*FILTER_PACKET_INDICATION_HANDLER)(
4455 IN NDIS_HANDLE Miniport,
4456 IN PPNDIS_PACKET PacketArray,
4457 IN UINT NumberOfPackets);
4459 typedef VOID (*TR_RCV_COMPLETE_HANDLER)(
4460 IN PTR_FILTER Filter);
4462 typedef VOID (*TR_RCV_INDICATE_HANDLER)(
4463 IN PTR_FILTER Filter,
4464 IN NDIS_HANDLE MacReceiveContext,
4465 IN PVOID HeaderBuffer,
4466 IN UINT HeaderBufferSize,
4467 IN PVOID LookaheadBuffer,
4468 IN UINT LookaheadBufferSize,
4469 IN UINT PacketSize);
4471 typedef VOID (*WAN_RCV_COMPLETE_HANDLER)(
4472 IN NDIS_HANDLE MiniportAdapterHandle,
4473 IN NDIS_HANDLE NdisLinkContext);
4475 typedef VOID (*WAN_RCV_HANDLER)(
4476 OUT PNDIS_STATUS Status,
4477 IN NDIS_HANDLE MiniportAdapterHandle,
4478 IN NDIS_HANDLE NdisLinkContext,
4480 IN ULONG PacketSize);
4482 typedef VOID (FASTCALL *NDIS_M_DEQUEUE_WORK_ITEM)(
4483 IN PNDIS_MINIPORT_BLOCK Miniport,
4484 IN NDIS_WORK_ITEM_TYPE WorkItemType,
4485 OUT PVOID *WorkItemContext);
4487 typedef VOID (FASTCALL *NDIS_M_PROCESS_DEFERRED)(
4488 IN PNDIS_MINIPORT_BLOCK Miniport);
4490 typedef NDIS_STATUS (FASTCALL *NDIS_M_QUEUE_NEW_WORK_ITEM)(
4491 IN PNDIS_MINIPORT_BLOCK Miniport,
4492 IN NDIS_WORK_ITEM_TYPE WorkItemType,
4493 IN PVOID WorkItemContext);
4495 typedef NDIS_STATUS (FASTCALL *NDIS_M_QUEUE_WORK_ITEM)(
4496 IN PNDIS_MINIPORT_BLOCK Miniport,
4497 IN NDIS_WORK_ITEM_TYPE WorkItemType,
4498 IN PVOID WorkItemContext);
4500 typedef VOID (*NDIS_M_REQ_COMPLETE_HANDLER)(
4501 IN NDIS_HANDLE MiniportAdapterHandle,
4502 IN NDIS_STATUS Status);
4504 typedef VOID (*NDIS_M_RESET_COMPLETE_HANDLER)(
4505 IN NDIS_HANDLE MiniportAdapterHandle,
4506 IN NDIS_STATUS Status,
4507 IN BOOLEAN AddressingReset);
4509 typedef VOID (*NDIS_M_SEND_COMPLETE_HANDLER)(
4510 IN NDIS_HANDLE MiniportAdapterHandle,
4511 IN PNDIS_PACKET Packet,
4512 IN NDIS_STATUS Status);
4514 typedef VOID (*NDIS_M_SEND_RESOURCES_HANDLER)(
4515 IN NDIS_HANDLE MiniportAdapterHandle);
4517 typedef BOOLEAN (FASTCALL *NDIS_M_START_SENDS)(
4518 IN PNDIS_MINIPORT_BLOCK Miniport);
4520 typedef VOID (*NDIS_M_STATUS_HANDLER)(
4521 IN NDIS_HANDLE MiniportHandle,
4522 IN NDIS_STATUS GeneralStatus,
4523 IN PVOID StatusBuffer,
4524 IN UINT StatusBufferSize);
4526 typedef VOID (*NDIS_M_STS_COMPLETE_HANDLER)(
4527 IN NDIS_HANDLE MiniportAdapterHandle);
4529 typedef VOID (*NDIS_M_TD_COMPLETE_HANDLER)(
4530 IN NDIS_HANDLE MiniportAdapterHandle,
4531 IN PNDIS_PACKET Packet,
4532 IN NDIS_STATUS Status,
4533 IN UINT BytesTransferred);
4535 typedef VOID (*NDIS_WM_SEND_COMPLETE_HANDLER)(
4536 IN NDIS_HANDLE MiniportAdapterHandle,
4538 IN NDIS_STATUS Status);
4543 #define ARC_SEND_BUFFERS 8
4544 #define ARC_HEADER_SIZE 4
4546 typedef struct _NDIS_ARC_BUF
4548 NDIS_HANDLE ArcnetBufferPool;
4549 PUCHAR ArcnetLookaheadBuffer;
4551 ARC_BUFFER_LIST ArcnetBuffers[ARC_SEND_BUFFERS];
4552 } NDIS_ARC_BUF, *PNDIS_ARC_BUF;
4554 #define NDIS_MINIPORT_WORK_QUEUE_SIZE 10
4556 typedef struct _NDIS_LOG
4558 PNDIS_MINIPORT_BLOCK Miniport;
4566 } NDIS_LOG, *PNDIS_LOG;
4568 #endif /* NDIS_WRAPPER */
4571 struct _NDIS_ADAPTER_BLOCK
4573 PDEVICE_OBJECT DeviceObject;
4574 PNDIS_MAC_BLOCK MacHandle;
4575 NDIS_HANDLE MacAdapterContext;
4576 NDIS_STRING AdapterName;
4577 PNDIS_OPEN_BLOCK OpenQueue;
4578 PNDIS_ADAPTER_BLOCK NextAdapter;
4580 PVOID BusDataContext;
4581 BOOLEAN BeingRemoved;
4583 PCM_RESOURCE_LIST Resources;
4584 PNDIS_STRING pAdapterInstanceName;
4585 PVOID WrapperContext;
4588 NDIS_INTERFACE_TYPE BusType;
4589 ULONG ChannelNumber;
4590 NDIS_INTERFACE_TYPE AdapterType;
4592 UCHAR AssignedProcessor;
4593 ULONG PhysicalMapRegistersNeeded;
4594 ULONG MaximumPhysicalMapping;
4596 ULONG NumberOfPorts;
4597 PUCHAR InitialPortMapping;
4598 BOOLEAN InitialPortMapped;
4600 PMAP_REGISTER_ENTRY MapRegisters;
4602 KEVENT AllocationEvent;
4603 UINT CurrentMapRegister;
4604 PADAPTER_OBJECT SystemAdapterObject;
4609 NDIS_STRING BaseName;
4610 PDEVICE_OBJECT PhysicalDeviceObject;
4611 PDEVICE_OBJECT NextDeviceObject;
4612 PCM_RESOURCE_LIST AllocatedResources;
4613 PCM_RESOURCE_LIST AllocatedResourcesTranslated;
4614 NDIS_EVENT OpenReadyEvent;
4615 NDIS_PNP_DEVICE_STATE PnPDeviceState;
4616 PGET_SET_DEVICE_DATA SetBusData;
4617 PGET_SET_DEVICE_DATA GetBusData;
4619 ULONG PnPCapabilities;
4620 #endif /* NDIS_WRAPPER */
4625 struct _NDIS_MINIPORT_BLOCK
4628 PNDIS_MINIPORT_BLOCK NextMiniport;
4629 PNDIS_M_DRIVER_BLOCK DriverHandle;
4630 NDIS_HANDLE MiniportAdapterContext;
4631 UNICODE_STRING MiniportName;
4632 PNDIS_BIND_PATHS BindPaths;
4633 NDIS_HANDLE OpenQueue;
4635 NDIS_HANDLE DeviceContext;
4640 UCHAR AssignedProcessor;
4642 PNDIS_REQUEST MediaRequest;
4643 PNDIS_MINIPORT_INTERRUPT Interrupt;
4647 LIST_ENTRY PacketList;
4648 PNDIS_PACKET FirstPendingPacket;
4649 PNDIS_PACKET ReturnPacketsQueue;
4650 ULONG RequestBuffer;
4651 PVOID SetMCastBuffer;
4652 PNDIS_MINIPORT_BLOCK PrimaryMiniport;
4653 PVOID WrapperContext;
4655 PVOID BusDataContext;
4656 ULONG PnPCapabilities;
4657 PCM_RESOURCE_LIST Resources;
4658 NDIS_TIMER WakeUpDpcTimer;
4659 UNICODE_STRING BaseName;
4660 UNICODE_STRING SymbolicLinkName;
4662 ULONG CheckForHangSeconds;
4664 USHORT CFHangCurrentTick;
4665 NDIS_STATUS ResetStatus;
4666 NDIS_HANDLE ResetOpen;
4667 FILTERDBS FilterDbs;
4669 FILTER_PACKET_INDICATION_HANDLER PacketIndicateHandler;
4670 NDIS_M_SEND_COMPLETE_HANDLER SendCompleteHandler;
4671 NDIS_M_SEND_RESOURCES_HANDLER SendResourcesHandler;
4672 NDIS_M_RESET_COMPLETE_HANDLER ResetCompleteHandler;
4674 NDIS_MEDIUM MediaType;
4676 NDIS_INTERFACE_TYPE BusType;
4677 NDIS_INTERFACE_TYPE AdapterType;
4678 PDEVICE_OBJECT DeviceObject;
4679 PDEVICE_OBJECT PhysicalDeviceObject;
4680 PDEVICE_OBJECT NextDeviceObject;
4682 PMAP_REGISTER_ENTRY MapRegisters;
4683 PNDIS_AF_LIST CallMgrAfList;
4684 PVOID MiniportThread;
4686 USHORT SetInfoBufLen;
4687 USHORT MaxSendPackets;
4688 NDIS_STATUS FakeStatus;
4690 PUNICODE_STRING pAdapterInstanceName;
4691 PADAPTER_OBJECT SystemAdapterObject;
4693 PNDIS_REQUEST PendingRequest;
4694 UINT MaximumLongAddresses;
4695 UINT MaximumShortAddresses;
4696 UINT CurrentLookahead;
4697 UINT MaximumLookahead;
4699 W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler;
4700 W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler;
4701 W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler;
4702 W_SEND_PACKETS_HANDLER SendPacketsHandler;
4703 NDIS_M_START_SENDS DeferredSendHandler;
4705 ETH_RCV_INDICATE_HANDLER EthRxIndicateHandler;
4706 TR_RCV_INDICATE_HANDLER TrRxIndicateHandler;
4707 FDDI_RCV_INDICATE_HANDLER FddiRxIndicateHandler;
4709 ETH_RCV_COMPLETE_HANDLER EthRxCompleteHandler;
4710 TR_RCV_COMPLETE_HANDLER TrRxCompleteHandler;
4711 FDDI_RCV_COMPLETE_HANDLER FddiRxCompleteHandler;
4713 NDIS_M_STATUS_HANDLER StatusHandler;
4714 NDIS_M_STS_COMPLETE_HANDLER StatusCompleteHandler;
4715 NDIS_M_TD_COMPLETE_HANDLER TDCompleteHandler;
4716 NDIS_M_REQ_COMPLETE_HANDLER QueryCompleteHandler;
4717 NDIS_M_REQ_COMPLETE_HANDLER SetCompleteHandler;
4719 NDIS_WM_SEND_COMPLETE_HANDLER WanSendCompleteHandler;
4720 WAN_RCV_HANDLER WanRcvHandler;
4721 WAN_RCV_COMPLETE_HANDLER WanRcvCompleteHandler;
4724 SINGLE_LIST_ENTRY WorkQueue[NUMBER_OF_WORK_ITEM_TYPES];
4725 SINGLE_LIST_ENTRY SingleWorkItems[NUMBER_OF_SINGLE_WORK_ITEMS];
4726 PNDIS_MAC_BLOCK FakeMac;
4729 UCHAR ArcnetAddress;
4733 PNDIS_ARC_BUF ArcBuf;
4737 ULONG ChannelNumber;
4741 PCM_RESOURCE_LIST AllocatedResources;
4742 PCM_RESOURCE_LIST AllocatedResourcesTranslated;
4743 SINGLE_LIST_ENTRY PatternList;
4744 NDIS_PNP_CAPABILITIES PMCapabilities;
4746 DEVICE_CAPABILITIES DeviceCaps;
4750 DEVICE_POWER_STATE CurrentDeviceState;
4754 SYSTEM_POWER_STATE WaitWakeSystemState;
4756 LARGE_INTEGER VcIndex;
4757 KSPIN_LOCK VcCountLock;
4758 LIST_ENTRY WmiEnabledVcs;
4759 PNDIS_GUID pNdisGuidMap;
4760 PNDIS_GUID pCustomGuidMap;
4762 USHORT cNdisGuidMap;
4763 USHORT cCustomGuidMap;
4764 USHORT CurrentMapRegister;
4765 PKEVENT AllocationEvent;
4766 USHORT PhysicalMapRegistersNeeded;
4767 USHORT SGMapRegistersNeeded;
4768 ULONG MaximumPhysicalMapping;
4770 NDIS_TIMER MediaDisconnectTimer;
4771 USHORT MediaDisconnectTimeOut;
4772 USHORT InstanceNumber;
4773 NDIS_EVENT OpenReadyEvent;
4774 NDIS_PNP_DEVICE_STATE PnPDeviceState;
4775 NDIS_PNP_DEVICE_STATE OldPnPDeviceState;
4777 PGET_SET_DEVICE_DATA SetBusData;
4778 PGET_SET_DEVICE_DATA GetBusData;
4783 NDIS_STATS NdisStats;
4785 PNDIS_PACKET IndicatedPacket[MAXIMUM_PROCESSORS];
4786 PKEVENT RemoveReadyEvent;
4787 PKEVENT AllOpensClosedEvent;
4788 PKEVENT AllRequestsCompletedEvent;
4790 NDIS_MINIPORT_WORK_ITEM WorkItemBuffer[NUMBER_OF_SINGLE_WORK_ITEMS];
4791 PNDIS_MINIPORT_TIMER TimerQueue;
4792 ULONG DriverVerifyFlags;
4794 PNDIS_MINIPORT_BLOCK NextGlobalMiniport;
4795 USHORT InternalResetCount;
4796 USHORT MiniportResetCount;
4797 USHORT MediaSenseConnectCount;
4798 USHORT MediaSenseDisconnectCount;
4799 PNDIS_PACKET *xPackets;
4800 ULONG UserModeOpenReferences;
4801 #endif /* NDIS_WRAPPER */
4806 /* Handler prototypes for NDIS_OPEN_BLOCK */
4808 typedef NDIS_STATUS (*WAN_SEND_HANDLER)(
4809 IN NDIS_HANDLE MacBindingHandle,
4810 IN NDIS_HANDLE LinkHandle,
4813 /* NDIS 4.0 extension */
4815 typedef VOID (*SEND_PACKETS_HANDLER)(
4816 IN NDIS_HANDLE MiniportAdapterContext,
4817 IN PPNDIS_PACKET PacketArray,
4818 IN UINT NumberOfPackets);
4821 struct _NDIS_OPEN_BLOCK
4823 PNDIS_MAC_BLOCK MacHandle;
4824 NDIS_HANDLE MacBindingHandle;
4825 PNDIS_ADAPTER_BLOCK AdapterHandle;
4826 PNDIS_PROTOCOL_BLOCK ProtocolHandle;
4827 NDIS_HANDLE ProtocolBindingContext;
4828 PNDIS_OPEN_BLOCK AdapterNextOpen;
4829 PNDIS_OPEN_BLOCK ProtocolNextOpen;
4830 PNDIS_OPEN_BLOCK NextGlobalOpen;
4833 BOOLEAN NoProtRsvdOnRcvPkt;
4834 BOOLEAN ProcessingOpens;
4835 PNDIS_STRING BindDeviceName;
4836 KSPIN_LOCK SpinLock;
4837 PNDIS_STRING RootDeviceName;
4841 SEND_HANDLER SendHandler;
4842 WAN_SEND_HANDLER WanSendHandler;
4844 TRANSFER_DATA_HANDLER TransferDataHandler;
4846 SEND_COMPLETE_HANDLER SendCompleteHandler;
4847 TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler;
4848 RECEIVE_HANDLER ReceiveHandler;
4849 RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler;
4853 RECEIVE_HANDLER PostNt31ReceiveHandler;
4854 WAN_RECEIVE_HANDLER WanReceiveHandler;
4856 RECEIVE_COMPLETE_HANDLER PostNt31ReceiveCompleteHandler;
4858 RECEIVE_PACKET_HANDLER ReceivePacketHandler;
4859 SEND_PACKETS_HANDLER SendPacketsHandler;
4861 RESET_HANDLER ResetHandler;
4862 REQUEST_HANDLER RequestHandler;
4863 RESET_COMPLETE_HANDLER ResetCompleteHandler;
4864 STATUS_HANDLER StatusHandler;
4865 STATUS_COMPLETE_HANDLER StatusCompleteHandler;
4866 REQUEST_COMPLETE_HANDLER RequestCompleteHandler;
4871 /* Routines for NDIS miniport drivers */
4874 * VOID NdisMInitializeWrapper(
4875 * OUT PNDIS_HANDLE NdisWrapperHandle,
4876 * IN PVOID SystemSpecific1,
4877 * IN PVOID SystemSpecific2,
4878 * IN PVOID SystemSpecific3);
4880 #define NdisMInitializeWrapper(NdisWrapperHandle, \
4884 NdisInitializeWrapper((NdisWrapperHandle), \
4885 (SystemSpecific1), \
4886 (SystemSpecific2), \
4891 NdisInitializeWrapper(
4892 OUT PNDIS_HANDLE NdisWrapperHandle,
4893 IN PVOID SystemSpecific1,
4894 IN PVOID SystemSpecific2,
4895 IN PVOID SystemSpecific3);
4899 NdisMAllocateMapRegisters(
4900 IN NDIS_HANDLE MiniportAdapterHandle,
4902 IN BOOLEAN Dma32BitAddresses,
4903 IN ULONG PhysicalMapRegistersNeeded,
4904 IN ULONG MaximumPhysicalMapping);
4907 * VOID NdisMArcIndicateReceive(
4908 * IN NDIS_HANDLE MiniportAdapterHandle,
4909 * IN PUCHAR HeaderBuffer,
4910 * IN PUCHAR DataBuffer,
4913 #define NdisMArcIndicateReceive(MiniportAdapterHandle, \
4918 ArcFilterDprIndicateReceive( \
4919 (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.ArcDB), \
4926 * VOID NdisMArcIndicateReceiveComplete(
4927 * IN NDIS_HANDLE MiniportAdapterHandle);
4929 #define NdisMArcIndicateReceiveComplete(MiniportAdapterHandle) \
4931 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->ArcRxCompleteHandler)( \
4932 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FilterDbs.ArcDB); \
4938 IN NDIS_HANDLE LogHandle);
4943 IN NDIS_HANDLE MiniportAdapterHandle,
4945 OUT PNDIS_HANDLE LogHandle);
4949 NdisMDeregisterAdapterShutdownHandler(
4950 IN NDIS_HANDLE MiniportHandle);
4954 NdisMDeregisterInterrupt(
4955 IN PNDIS_MINIPORT_INTERRUPT Interrupt);
4959 NdisMDeregisterIoPortRange(
4960 IN NDIS_HANDLE MiniportAdapterHandle,
4961 IN UINT InitialPort,
4962 IN UINT NumberOfPorts,
4963 IN PVOID PortOffset);
4966 * VOID NdisMEthIndicateReceive(
4967 * IN NDIS_HANDLE MiniportAdapterHandle,
4968 * IN NDIS_HANDLE MiniportReceiveContext,
4969 * IN PVOID HeaderBuffer,
4970 * IN UINT HeaderBufferSize,
4971 * IN PVOID LookaheadBuffer,
4972 * IN UINT LookaheadBufferSize,
4973 * IN UINT PacketSize);
4975 #define NdisMEthIndicateReceive(MiniportAdapterHandle, \
4976 MiniportReceiveContext, \
4980 LookaheadBufferSize, \
4983 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxIndicateHandler)( \
4984 (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.u.EthDB), \
4985 (MiniportReceiveContext), \
4988 (HeaderBufferSize), \
4989 (LookaheadBuffer), \
4990 (LookaheadBufferSize), \
4995 * VOID NdisMEthIndicateReceiveComplete(
4996 * IN NDIS_HANDLE MiniportAdapterHandle);
4998 #define NdisMEthIndicateReceiveComplete(MiniportAdapterHandle) \
5000 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxCompleteHandler)( \
5001 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FilterDbs.u.EthDB); \
5005 * VOID NdisMFddiIndicateReceive(
5006 * IN NDIS_HANDLE MiniportAdapterHandle,
5007 * IN NDIS_HANDLE MiniportReceiveContext,
5008 * IN PVOID HeaderBuffer,
5009 * IN UINT HeaderBufferSize,
5010 * IN PVOID LookaheadBuffer,
5011 * IN UINT LookaheadBufferSize,
5012 * IN UINT PacketSize);
5014 #define NdisMFddiIndicateReceive(MiniportAdapterHandle, \
5015 MiniportReceiveContext, \
5019 LookaheadBufferSize, \
5022 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxIndicateHandler)( \
5023 (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.FddiDB), \
5024 (MiniportReceiveContext), \
5025 (PUCHAR)(HeaderBuffer) + 1, \
5026 (((*(PUCHAR*)(HeaderBuffer)) & 0x40) ? \
5027 FDDI_LENGTH_OF_LONG_ADDRESS : \
5028 FDDI_LENGTH_OF_SHORT_ADDRESS), \
5030 (HeaderBufferSize), \
5031 (LookaheadBuffer), \
5032 (LookaheadBufferSize), \
5037 * VOID NdisMFddiIndicateReceiveComplete(
5038 * IN NDIS_HANDLE MiniportAdapterHandle);
5040 #define NdisMFddiIndicateReceiveComplete(MiniportAdapterHandle) \
5042 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxCompleteHandler)( \
5043 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FilterDbs.FddiDB); \
5049 IN NDIS_HANDLE LogHandle);
5053 NdisMFreeMapRegisters(
5054 IN NDIS_HANDLE MiniportAdapterHandle);
5058 NdisMIndicateStatus(
5059 IN NDIS_HANDLE MiniportAdapterHandle,
5060 IN NDIS_STATUS GeneralStatus,
5061 IN PVOID StatusBuffer,
5062 IN UINT StatusBufferSize);
5066 NdisMIndicateStatusComplete(
5067 IN NDIS_HANDLE MiniportAdapterHandle);
5072 OUT PVOID * VirtualAddress,
5073 IN NDIS_HANDLE MiniportAdapterHandle,
5074 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
5079 NdisMQueryInformationComplete(
5080 IN NDIS_HANDLE MiniportAdapterHandle,
5081 IN NDIS_STATUS Status);
5085 NdisMRegisterAdapterShutdownHandler(
5086 IN NDIS_HANDLE MiniportHandle,
5087 IN PVOID ShutdownContext,
5088 IN ADAPTER_SHUTDOWN_HANDLER ShutdownHandler);
5092 NdisMRegisterInterrupt(
5093 OUT PNDIS_MINIPORT_INTERRUPT Interrupt,
5094 IN NDIS_HANDLE MiniportAdapterHandle,
5095 IN UINT InterruptVector,
5096 IN UINT InterruptLevel,
5097 IN BOOLEAN RequestIsr,
5098 IN BOOLEAN SharedInterrupt,
5099 IN NDIS_INTERRUPT_MODE InterruptMode);
5103 NdisMRegisterIoPortRange(
5104 OUT PVOID * PortOffset,
5105 IN NDIS_HANDLE MiniportAdapterHandle,
5106 IN UINT InitialPort,
5107 IN UINT NumberOfPorts);
5111 NdisMRegisterMiniport(
5112 IN NDIS_HANDLE NdisWrapperHandle,
5113 IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,
5114 IN UINT CharacteristicsLength);
5119 IN PNDIS_MINIPORT_TIMER Timer,
5120 IN UINT MillisecondsToDelay);
5124 NdisMInitializeTimer(
5125 IN OUT PNDIS_MINIPORT_TIMER Timer,
5126 IN NDIS_HANDLE MiniportAdapterHandle,
5127 IN PNDIS_TIMER_FUNCTION TimerFunction,
5128 IN PVOID FunctionContext);
5132 NdisMSetPeriodicTimer(
5133 IN PNDIS_MINIPORT_TIMER Timer,
5134 IN UINT MillisecondPeriod);
5139 IN PNDIS_MINIPORT_TIMER Timer,
5140 OUT PBOOLEAN TimerCancelled);
5143 #ifndef NDIS_WRAPPER
5146 * VOID NdisMResetComplete(
5147 * IN NDIS_HANDLE MiniportAdapterHandle,
5148 * IN NDIS_STATUS Status,
5149 * IN BOOLEAN AddressingReset);
5151 #define NdisMResetComplete(MiniportAdapterHandle, \
5155 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->ResetCompleteHandler)( \
5156 MiniportAdapterHandle, Status, AddressingReset); \
5160 * VOID NdisMSendComplete(
5161 * IN NDIS_HANDLE MiniportAdapterHandle,
5162 * IN PNDIS_PACKET Packet,
5163 * IN NDIS_STATUS Status);
5165 #define NdisMSendComplete(MiniportAdapterHandle, \
5169 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendCompleteHandler)( \
5170 MiniportAdapterHandle, Packet, Status); \
5174 * VOID NdisMSendResourcesAvailable(
5175 * IN NDIS_HANDLE MiniportAdapterHandle);
5177 #define NdisMSendResourcesAvailable(MiniportAdapterHandle) \
5179 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendResourcesHandler)( \
5180 MiniportAdapterHandle); \
5184 * VOID NdisMTransferDataComplete(
5185 * IN NDIS_HANDLE MiniportAdapterHandle,
5186 * IN PNDIS_PACKET Packet,
5187 * IN NDIS_STATUS Status,
5188 * IN UINT BytesTransferred);
5190 #define NdisMTransferDataComplete(MiniportAdapterHandle, \
5195 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TDCompleteHandler)( \
5196 MiniportAdapterHandle, Packet, Status, BytesTransferred) \
5199 #endif /* NDIS_WRAPPER */
5205 IN NDIS_HANDLE MiniportAdapterHandle,
5206 IN NDIS_HANDLE MiniportAdapterContext,
5207 IN BOOLEAN BusMaster,
5208 IN NDIS_INTERFACE_TYPE AdapterType);
5212 NdisMSetAttributesEx(
5213 IN NDIS_HANDLE MiniportAdapterHandle,
5214 IN NDIS_HANDLE MiniportAdapterContext,
5215 IN UINT CheckForHangTimeInSeconds OPTIONAL,
5216 IN ULONG AttributeFlags,
5217 IN NDIS_INTERFACE_TYPE AdapterType);
5221 NdisMSetInformationComplete(
5222 IN NDIS_HANDLE MiniportAdapterHandle,
5223 IN NDIS_STATUS Status);
5228 IN ULONG MicrosecondsToSleep);
5232 NdisMSynchronizeWithInterrupt(
5233 IN PNDIS_MINIPORT_INTERRUPT Interrupt,
5234 IN PVOID SynchronizeFunction,
5235 IN PVOID SynchronizeContext);
5238 * VOID NdisMTrIndicateReceive(
5239 * IN NDIS_HANDLE MiniportAdapterHandle,
5240 * IN NDIS_HANDLE MiniportReceiveContext,
5241 * IN PVOID HeaderBuffer,
5242 * IN UINT HeaderBufferSize,
5243 * IN PVOID LookaheadBuffer,
5244 * IN UINT LookaheadBufferSize,
5245 * IN UINT PacketSize);
5247 #define NdisMTrIndicateReceive(MiniportAdapterHandle, \
5248 MiniportReceiveContext, \
5252 LookaheadBufferSize, \
5255 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxIndicateHandler)( \
5256 (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.TrDB), \
5257 (MiniportReceiveContext), \
5260 (HeaderBufferSize), \
5261 (LookaheadBuffer), \
5262 (LookaheadBufferSize), \
5267 * VOID NdisMTrIndicateReceiveComplete(
5268 * IN NDIS_HANDLE MiniportAdapterHandle);
5270 #define NdisMTrIndicateReceiveComplete(MiniportAdapterHandle) \
5272 (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxCompleteHandler)( \
5273 ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FilterDbs.TrDB); \
5279 IN NDIS_HANDLE LogHandle,
5281 IN UINT LogBufferSize);
5285 NdisMQueryAdapterResources(
5286 OUT PNDIS_STATUS Status,
5287 IN NDIS_HANDLE WrapperConfigurationContext,
5288 OUT PNDIS_RESOURCE_LIST ResourceList,
5289 IN OUT PUINT BufferSize);
5293 NdisTerminateWrapper(
5294 IN NDIS_HANDLE NdisWrapperHandle,
5295 IN PVOID SystemSpecific);
5300 IN NDIS_HANDLE MiniportAdapterHandle,
5301 IN PVOID VirtualAddress,
5306 /* NDIS intermediate miniport structures */
5308 typedef VOID (*W_MINIPORT_CALLBACK)(
5309 IN NDIS_HANDLE MiniportAdapterContext,
5310 IN PVOID CallbackContext);
5314 /* Routines for intermediate miniport drivers */
5318 NdisIMDeInitializeDeviceInstance(
5319 IN NDIS_HANDLE NdisMiniportHandle);
5323 NdisIMInitializeDeviceInstance(
5324 IN NDIS_HANDLE DriverHandle,
5325 IN PNDIS_STRING DeviceInstance);
5329 NdisIMQueueMiniportCallback(
5330 IN NDIS_HANDLE MiniportAdapterHandle,
5331 IN W_MINIPORT_CALLBACK CallbackRoutine,
5332 IN PVOID CallbackContext);
5336 NdisIMRegisterLayeredMiniport(
5337 IN NDIS_HANDLE NdisWrapperHandle,
5338 IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,
5339 IN UINT CharacteristicsLength,
5340 OUT PNDIS_HANDLE DriverHandle);
5345 IN NDIS_HANDLE MiniportAdapterHandle,
5346 IN NDIS_HANDLE SwitchHandle);
5350 NdisIMSwitchToMiniport(
5351 IN NDIS_HANDLE MiniportAdapterHandle,
5352 OUT PNDIS_HANDLE SwitchHandle);
5355 /* Functions obsoleted by NDIS 5.0 */
5360 IN PNDIS_HANDLE NdisDmaHandle);
5364 NdisFreeSharedMemory(
5365 IN NDIS_HANDLE NdisAdapterHandle,
5368 IN PVOID VirtualAddress,
5369 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
5373 NdisIMQueueMiniportCallback(
5374 IN NDIS_HANDLE MiniportAdapterHandle,
5375 IN W_MINIPORT_CALLBACK CallbackRoutine,
5376 IN PVOID CallbackContext);
5381 IN NDIS_HANDLE MiniportAdapterHandle,
5382 IN NDIS_HANDLE SwitchHandle);
5386 NdisIMSwitchToMiniport(
5387 IN NDIS_HANDLE MiniportAdapterHandle,
5388 OUT PNDIS_HANDLE SwitchHandle);
5392 NdisSetupDmaTransfer(
5393 OUT PNDIS_STATUS Status,
5394 IN PNDIS_HANDLE NdisDmaHandle,
5395 IN PNDIS_BUFFER Buffer,
5398 IN BOOLEAN WriteToDevice);
5402 NdisUpcaseUnicodeString(
5403 OUT PUNICODE_STRING DestinationString,
5404 IN PUNICODE_STRING SourceString);
5408 NdisUpdateSharedMemory(
5409 IN NDIS_HANDLE NdisAdapterHandle,
5411 IN PVOID VirtualAddress,
5412 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
5415 /* Routines for NDIS protocol drivers */
5420 OUT PNDIS_STATUS Status,
5421 IN NDIS_HANDLE NdisBindingHandle,
5422 IN PNDIS_REQUEST NdisRequest);
5427 OUT PNDIS_STATUS Status,
5428 IN NDIS_HANDLE NdisBindingHandle);
5433 OUT PNDIS_STATUS Status,
5434 IN NDIS_HANDLE NdisBindingHandle,
5435 IN PNDIS_PACKET Packet);
5440 IN NDIS_HANDLE NdisBindingHandle,
5441 IN PPNDIS_PACKET PacketArray,
5442 IN UINT NumberOfPackets);
5447 OUT PNDIS_STATUS Status,
5448 IN NDIS_HANDLE NdisBindingHandle,
5449 IN NDIS_HANDLE MacReceiveContext,
5451 IN UINT BytesToTransfer,
5452 IN OUT PNDIS_PACKET Packet,
5453 OUT PUINT BytesTransferred);
5455 #define NdisTransferData(Status, \
5456 NdisBindingHandle, \
5457 MacReceiveContext, \
5463 *(Status) = (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->TransferDataHandler)( \
5464 ((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacBindingHandle, \
5465 (MacReceiveContext), \
5467 (BytesToTransfer), \
5469 (BytesTransferred)); \
5477 OUT PNDIS_STATUS Status,
5478 IN NDIS_HANDLE NdisBindingHandle);
5482 NdisCompleteBindAdapter(
5483 IN NDIS_HANDLE BindAdapterContext,
5484 IN NDIS_STATUS Status,
5485 IN NDIS_STATUS OpenStatus);
5489 NdisCompleteUnbindAdapter(
5490 IN NDIS_HANDLE UnbindAdapterContext,
5491 IN NDIS_STATUS Status);
5495 NdisDeregisterProtocol(
5496 OUT PNDIS_STATUS Status,
5497 IN NDIS_HANDLE NdisProtocolHandle);
5502 OUT PNDIS_STATUS Status,
5503 OUT PNDIS_STATUS OpenErrorStatus,
5504 OUT PNDIS_HANDLE NdisBindingHandle,
5505 OUT PUINT SelectedMediumIndex,
5506 IN PNDIS_MEDIUM MediumArray,
5507 IN UINT MediumArraySize,
5508 IN NDIS_HANDLE NdisProtocolHandle,
5509 IN NDIS_HANDLE ProtocolBindingContext,
5510 IN PNDIS_STRING AdapterName,
5511 IN UINT OpenOptions,
5512 IN PSTRING AddressingInformation);
5516 NdisOpenProtocolConfiguration(
5517 OUT PNDIS_STATUS Status,
5518 OUT PNDIS_HANDLE ConfigurationHandle,
5519 IN PNDIS_STRING ProtocolSection);
5523 NdisQueryReceiveInformation(
5524 IN NDIS_HANDLE NdisBindingHandle,
5525 IN NDIS_HANDLE MacContext,
5526 OUT PLONGLONG TimeSent OPTIONAL,
5527 OUT PLONGLONG TimeReceived OPTIONAL,
5530 OUT PUINT SizeNeeded);
5534 NdisRegisterProtocol(
5535 OUT PNDIS_STATUS Status,
5536 OUT PNDIS_HANDLE NdisProtocolHandle,
5537 IN PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics,
5538 IN UINT CharacteristicsLength);
5543 IN PNDIS_PACKET *PacketsToReturn,
5544 IN UINT NumberOfPackets);
5548 #endif /* __cplusplus */
5550 #endif /* __NDIS_H */
5555 * XXX - these macros are disabled for the momentdue to the fact that there are definitions for them elsewhere.
5556 * We will have to decide which to keep; we don't need both (no BINARY_COMPATIBLE)
5559 #define NdisAdjustBufferLength(Buffer, \
5562 (Buffer)->ByteCount = (Length); \
5565 #define NDIS_BUFFER_TO_SPAN_PAGES(Buffer) \
5567 MmGetMdlByteCount(Buffer) == 0 ? \
5569 ADDRESS_AND_SIZE_TO_SPAN_PAGES( \
5570 MmGetMdlVirtualAddress(Buffer), \
5571 MmGetMdlByteCount(Buffer)) \
5574 #define NdisFreeBuffer(Buffer) \
5576 IoFreeMdl(Buffer) /* ??? */ \
5579 #define NdisGetBufferPhysicalArraySize(Buffer, \
5584 #define NdisGetFirstBufferFromPacket(Packet, \
5587 FirstBufferLength, \
5588 TotalBufferLength) \
5590 PNDIS_BUFFER _Buffer; \
5592 _Buffer = (Packet)->Private.Head; \
5593 *(FirstBuffer) = _Buffer; \
5594 *(FirstBufferVA) = MmGetMdlVirtualAddress(_Buffer); \
5595 if (_Buffer != NULL) { \
5596 *(FirstBufferLength) = MmGetMdlByteCount(_Buffer); \
5597 _Buffer = _Buffer->Next; \
5599 *(FirstBufferLength) = 0; \
5600 *(TotalBufferLength) = *(FirstBufferLength); \
5601 while (_Buffer != NULL) { \
5602 *(TotalBufferLength) += MmGetMdlByteCount(_Buffer); \
5603 _Buffer = _Buffer->Next; \
5607 #define NdisQueryBuffer(Buffer, \
5611 if (VirtualAddress) \
5612 *((PVOID*)VirtualAddress) = MmGetSystemAddressForMdl(Buffer); \
5614 *((PUINT)Length) = MmGetMdlByteCount(Buffer); \
5617 #define NdisQueryBufferOffset(Buffer, \
5621 *((PUINT)Offset) = MmGetMdlByteOffset(Buffer); \
5622 *((PUINT)Length) = MmGetMdlByteCount(Buffer); \
5625 #define NdisAnsiStringToUnicodeString(DestinationString, \
5627 RtlAnsiStringToUnicodeString((DestinationString), (SourceString), FALSE)
5629 #define NdisEqualString(String1, \
5632 RtlEqualUnicodeString((String1), (String2), (CaseInsensitive))
5634 #define NdisInitAnsiString(DestinationString, \
5636 RtlInitString((DestinationString), (SourceString))
5638 #define NdisInitUnicodeString(DestinationString, \
5640 RtlInitUnicodeString((DestinationString), (SourceString))
5642 #define NdisUnicodeStringToAnsiString(DestinationString, \
5644 RtlUnicodeStringToAnsiString((DestinationString), (SourceString), FALSE)
5646 #define NdisRequest(Status, \
5647 NdisBindingHandle, \
5650 *(Status) = (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->RequestHandler)( \
5651 ((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacBindingHandle, (NdisRequest)); \
5654 #define NdisReset(Status, \
5655 NdisBindingHandle) \
5657 *(Status) = (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->ResetHandler)( \
5658 ((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacBindingHandle); \
5661 #define NdisSend(Status, \
5662 NdisBindingHandle, \
5665 *(Status) = (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->u1.SendHandler)( \
5666 ((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacBindingHandle, (Packet)); \
5669 #define NdisSendPackets(NdisBindingHandle, \
5673 (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->SendPacketsHandler)( \
5674 (PNDIS_OPEN_BLOCK)(NdisBindingHandle), (PacketArray), (NumberOfPackets)); \