/* * ndis.h * * Network Device Interface Specification definitions * * This file is part of the w32api package. * * Contributors: * Created by Casper S. Hornstrup * * THIS SOFTWARE IS NOT COPYRIGHTED * * This source code is offered for use in the public domain. You may * use, modify or distribute it freely. * * This code is distributed in the hope that it will be useful but * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY * DISCLAIMED. This includes but is not limited to warranties of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * DEFINES: i386 - Target platform is i386 * NDIS_WRAPPER - Define only for NDIS library * NDIS_MINIPORT_DRIVER - Define only for NDIS miniport drivers * NDIS40 - Use NDIS 4.0 structures by default * NDIS50 - Use NDIS 5.0 structures by default * NDIS51 - Use NDIS 5.1 structures by default * NDIS40_MINIPORT - Building NDIS 4.0 miniport driver * NDIS50_MINIPORT - Building NDIS 5.0 miniport driver * NDIS51_MINIPORT - Building NDIS 5.1 miniport driver */ #ifndef __NDIS_H #define __NDIS_H /* Helper macro to enable gcc's extension. */ #ifndef __GNU_EXTENSION #ifdef __GNUC__ #define __GNU_EXTENSION __extension__ #else #define __GNU_EXTENSION #endif #endif #include "ntddk.h" #include "ntddndis.h" #include "netpnp.h" #include "netevent.h" #include #if !defined(_WINDEF_H) typedef unsigned int UINT, *PUINT; #endif #ifdef __cplusplus extern "C" { #endif #if defined(NDIS_WRAPPER) #define NDISAPI #else #define NDISAPI DECLSPEC_IMPORT #endif #if defined(NDIS50_MINIPORT) && !defined(NDIS_MINIPORT_MAJOR_VERSION) && !defined(NDIS_MINIPORT_MINOR_VERSION) #define NDIS_MINIPORT_MAJOR_VERSION 5 #define NDIS_MINIPORT_MINOR_VERSION 0 #endif #if defined(NDIS51_MINIPORT) && !defined(NDIS_MINIPORT_MAJOR_VERSION) && !defined(NDIS_MINIPORT_MINOR_VERSION) #define NDIS_MINIPORT_MAJOR_VERSION 5 #define NDIS_MINIPORT_MINOR_VERSION 1 #endif #if defined(NDIS50) && !defined(NDIS_PROTOCOL_MAJOR_VERSION) && !defined(NDIS_PROTOCOL_MINOR_VERSION) #define NDIS_PROTOCOL_MAJOR_VERSION 5 #define NDIS_PROTOCOL_MINOR_VERSION 0 #endif #if defined(NDIS51) && !defined(NDIS_PROTOCOL_MAJOR_VERSION) && !defined(NDIS_PROTOCOL_MINOR_VERSION) #define NDIS_PROTOCOL_MAJOR_VERSION 5 #define NDIS_PROTOCOL_MINOR_VERSION 1 #endif #if 1 /* FIXME: */ typedef PVOID QUEUED_CLOSE; #endif typedef ULONG NDIS_OID, *PNDIS_OID; typedef struct _X_FILTER FDDI_FILTER, *PFDDI_FILTER; typedef struct _X_FILTER TR_FILTER, *PTR_FILTER; typedef struct _X_FILTER NULL_FILTER, *PNULL_FILTER; typedef struct _REFERENCE { KSPIN_LOCK SpinLock; USHORT ReferenceCount; BOOLEAN Closing; } REFERENCE, * PREFERENCE; /* NDIS base types */ typedef struct _NDIS_SPIN_LOCK { KSPIN_LOCK SpinLock; KIRQL OldIrql; } NDIS_SPIN_LOCK, * PNDIS_SPIN_LOCK; typedef struct _NDIS_EVENT { KEVENT Event; } NDIS_EVENT, *PNDIS_EVENT; typedef PVOID NDIS_HANDLE, *PNDIS_HANDLE; typedef int NDIS_STATUS, *PNDIS_STATUS; typedef ANSI_STRING NDIS_ANSI_STRING, *PNDIS_ANSI_STRING; typedef UNICODE_STRING NDIS_STRING, *PNDIS_STRING; typedef MDL NDIS_BUFFER, *PNDIS_BUFFER; typedef ULONG NDIS_ERROR_CODE, *PNDIS_ERROR_CODE; /* NDIS_STATUS constants */ #define NDIS_STATUS_SUCCESS ((NDIS_STATUS)STATUS_SUCCESS) #define NDIS_STATUS_PENDING ((NDIS_STATUS)STATUS_PENDING) #define NDIS_STATUS_NOT_RECOGNIZED ((NDIS_STATUS)0x00010001L) #define NDIS_STATUS_NOT_COPIED ((NDIS_STATUS)0x00010002L) #define NDIS_STATUS_NOT_ACCEPTED ((NDIS_STATUS)0x00010003L) #define NDIS_STATUS_CALL_ACTIVE ((NDIS_STATUS)0x00010007L) #define NDIS_STATUS_ONLINE ((NDIS_STATUS)0x40010003L) #define NDIS_STATUS_RESET_START ((NDIS_STATUS)0x40010004L) #define NDIS_STATUS_RESET_END ((NDIS_STATUS)0x40010005L) #define NDIS_STATUS_RING_STATUS ((NDIS_STATUS)0x40010006L) #define NDIS_STATUS_CLOSED ((NDIS_STATUS)0x40010007L) #define NDIS_STATUS_WAN_LINE_UP ((NDIS_STATUS)0x40010008L) #define NDIS_STATUS_WAN_LINE_DOWN ((NDIS_STATUS)0x40010009L) #define NDIS_STATUS_WAN_FRAGMENT ((NDIS_STATUS)0x4001000AL) #define NDIS_STATUS_MEDIA_CONNECT ((NDIS_STATUS)0x4001000BL) #define NDIS_STATUS_MEDIA_DISCONNECT ((NDIS_STATUS)0x4001000CL) #define NDIS_STATUS_HARDWARE_LINE_UP ((NDIS_STATUS)0x4001000DL) #define NDIS_STATUS_HARDWARE_LINE_DOWN ((NDIS_STATUS)0x4001000EL) #define NDIS_STATUS_INTERFACE_UP ((NDIS_STATUS)0x4001000FL) #define NDIS_STATUS_INTERFACE_DOWN ((NDIS_STATUS)0x40010010L) #define NDIS_STATUS_MEDIA_BUSY ((NDIS_STATUS)0x40010011L) #define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION ((NDIS_STATUS)0x40010012L) #define NDIS_STATUS_WW_INDICATION NDIS_STATUS_MEDIA_SPECIFIC_INDICATION #define NDIS_STATUS_LINK_SPEED_CHANGE ((NDIS_STATUS)0x40010013L) #define NDIS_STATUS_WAN_GET_STATS ((NDIS_STATUS)0x40010014L) #define NDIS_STATUS_WAN_CO_FRAGMENT ((NDIS_STATUS)0x40010015L) #define NDIS_STATUS_WAN_CO_LINKPARAMS ((NDIS_STATUS)0x40010016L) #define NDIS_STATUS_NOT_RESETTABLE ((NDIS_STATUS)0x80010001L) #define NDIS_STATUS_SOFT_ERRORS ((NDIS_STATUS)0x80010003L) #define NDIS_STATUS_HARD_ERRORS ((NDIS_STATUS)0x80010004L) #define NDIS_STATUS_BUFFER_OVERFLOW ((NDIS_STATUS)STATUS_BUFFER_OVERFLOW) #define NDIS_STATUS_FAILURE ((NDIS_STATUS)STATUS_UNSUCCESSFUL) #define NDIS_STATUS_RESOURCES ((NDIS_STATUS)STATUS_INSUFFICIENT_RESOURCES) #define NDIS_STATUS_CLOSING ((NDIS_STATUS)0xC0010002L) #define NDIS_STATUS_BAD_VERSION ((NDIS_STATUS)0xC0010004L) #define NDIS_STATUS_BAD_CHARACTERISTICS ((NDIS_STATUS)0xC0010005L) #define NDIS_STATUS_ADAPTER_NOT_FOUND ((NDIS_STATUS)0xC0010006L) #define NDIS_STATUS_OPEN_FAILED ((NDIS_STATUS)0xC0010007L) #define NDIS_STATUS_DEVICE_FAILED ((NDIS_STATUS)0xC0010008L) #define NDIS_STATUS_MULTICAST_FULL ((NDIS_STATUS)0xC0010009L) #define NDIS_STATUS_MULTICAST_EXISTS ((NDIS_STATUS)0xC001000AL) #define NDIS_STATUS_MULTICAST_NOT_FOUND ((NDIS_STATUS)0xC001000BL) #define NDIS_STATUS_REQUEST_ABORTED ((NDIS_STATUS)0xC001000CL) #define NDIS_STATUS_RESET_IN_PROGRESS ((NDIS_STATUS)0xC001000DL) #define NDIS_STATUS_CLOSING_INDICATING ((NDIS_STATUS)0xC001000EL) #define NDIS_STATUS_NOT_SUPPORTED ((NDIS_STATUS)STATUS_NOT_SUPPORTED) #define NDIS_STATUS_INVALID_PACKET ((NDIS_STATUS)0xC001000FL) #define NDIS_STATUS_OPEN_LIST_FULL ((NDIS_STATUS)0xC0010010L) #define NDIS_STATUS_ADAPTER_NOT_READY ((NDIS_STATUS)0xC0010011L) #define NDIS_STATUS_ADAPTER_NOT_OPEN ((NDIS_STATUS)0xC0010012L) #define NDIS_STATUS_NOT_INDICATING ((NDIS_STATUS)0xC0010013L) #define NDIS_STATUS_INVALID_LENGTH ((NDIS_STATUS)0xC0010014L) #define NDIS_STATUS_INVALID_DATA ((NDIS_STATUS)0xC0010015L) #define NDIS_STATUS_BUFFER_TOO_SHORT ((NDIS_STATUS)0xC0010016L) #define NDIS_STATUS_INVALID_OID ((NDIS_STATUS)0xC0010017L) #define NDIS_STATUS_ADAPTER_REMOVED ((NDIS_STATUS)0xC0010018L) #define NDIS_STATUS_UNSUPPORTED_MEDIA ((NDIS_STATUS)0xC0010019L) #define NDIS_STATUS_GROUP_ADDRESS_IN_USE ((NDIS_STATUS)0xC001001AL) #define NDIS_STATUS_FILE_NOT_FOUND ((NDIS_STATUS)0xC001001BL) #define NDIS_STATUS_ERROR_READING_FILE ((NDIS_STATUS)0xC001001CL) #define NDIS_STATUS_ALREADY_MAPPED ((NDIS_STATUS)0xC001001DL) #define NDIS_STATUS_RESOURCE_CONFLICT ((NDIS_STATUS)0xC001001EL) #define NDIS_STATUS_NO_CABLE ((NDIS_STATUS)0xC001001FL) #define NDIS_STATUS_INVALID_SAP ((NDIS_STATUS)0xC0010020L) #define NDIS_STATUS_SAP_IN_USE ((NDIS_STATUS)0xC0010021L) #define NDIS_STATUS_INVALID_ADDRESS ((NDIS_STATUS)0xC0010022L) #define NDIS_STATUS_VC_NOT_ACTIVATED ((NDIS_STATUS)0xC0010023L) #define NDIS_STATUS_DEST_OUT_OF_ORDER ((NDIS_STATUS)0xC0010024L) #define NDIS_STATUS_VC_NOT_AVAILABLE ((NDIS_STATUS)0xC0010025L) #define NDIS_STATUS_CELLRATE_NOT_AVAILABLE ((NDIS_STATUS)0xC0010026L) #define NDIS_STATUS_INCOMPATABLE_QOS ((NDIS_STATUS)0xC0010027L) #define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED ((NDIS_STATUS)0xC0010028L) #define NDIS_STATUS_NO_ROUTE_TO_DESTINATION ((NDIS_STATUS)0xC0010029L) #define NDIS_STATUS_TOKEN_RING_OPEN_ERROR ((NDIS_STATUS)0xC0011000L) #define NDIS_STATUS_INVALID_DEVICE_REQUEST ((NDIS_STATUS)STATUS_INVALID_DEVICE_REQUEST) #define NDIS_STATUS_NETWORK_UNREACHABLE ((NDIS_STATUS)STATUS_NETWORK_UNREACHABLE) /* NDIS error codes for error logging */ #define NDIS_ERROR_CODE_RESOURCE_CONFLICT EVENT_NDIS_RESOURCE_CONFLICT #define NDIS_ERROR_CODE_OUT_OF_RESOURCES EVENT_NDIS_OUT_OF_RESOURCE #define NDIS_ERROR_CODE_HARDWARE_FAILURE EVENT_NDIS_HARDWARE_FAILURE #define NDIS_ERROR_CODE_ADAPTER_NOT_FOUND EVENT_NDIS_ADAPTER_NOT_FOUND #define NDIS_ERROR_CODE_INTERRUPT_CONNECT EVENT_NDIS_INTERRUPT_CONNECT #define NDIS_ERROR_CODE_DRIVER_FAILURE EVENT_NDIS_DRIVER_FAILURE #define NDIS_ERROR_CODE_BAD_VERSION EVENT_NDIS_BAD_VERSION #define NDIS_ERROR_CODE_TIMEOUT EVENT_NDIS_TIMEOUT #define NDIS_ERROR_CODE_NETWORK_ADDRESS EVENT_NDIS_NETWORK_ADDRESS #define NDIS_ERROR_CODE_UNSUPPORTED_CONFIGURATION EVENT_NDIS_UNSUPPORTED_CONFIGURATION #define NDIS_ERROR_CODE_INVALID_VALUE_FROM_ADAPTER EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER #define NDIS_ERROR_CODE_MISSING_CONFIGURATION_PARAMETER EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER #define NDIS_ERROR_CODE_BAD_IO_BASE_ADDRESS EVENT_NDIS_BAD_IO_BASE_ADDRESS #define NDIS_ERROR_CODE_RECEIVE_SPACE_SMALL EVENT_NDIS_RECEIVE_SPACE_SMALL #define NDIS_ERROR_CODE_ADAPTER_DISABLED EVENT_NDIS_ADAPTER_DISABLED /* Memory allocation flags. Used by Ndis[Allocate|Free]Memory */ #define NDIS_MEMORY_CONTIGUOUS 0x00000001 #define NDIS_MEMORY_NONCACHED 0x00000002 /* NIC attribute flags. Used by NdisMSetAttributes(Ex) */ #define NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT 0x00000001 #define NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT 0x00000002 #define NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS 0x00000004 #define NDIS_ATTRIBUTE_BUS_MASTER 0x00000008 #define NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER 0x00000010 #define NDIS_ATTRIBUTE_DESERIALIZE 0x00000020 #define NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND 0x00000040 #define NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK 0x00000080 #define NDIS_ATTRIBUTE_NOT_CO_NDIS 0x00000100 #define NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS 0x00000200 /* Lock */ typedef union _NDIS_RW_LOCK_REFCOUNT { UINT RefCount; UCHAR cacheLine[16]; } NDIS_RW_LOCK_REFCOUNT; typedef struct _NDIS_RW_LOCK { __GNU_EXTENSION union { __GNU_EXTENSION struct { KSPIN_LOCK SpinLock; PVOID Context; }; UCHAR Reserved[16]; }; NDIS_RW_LOCK_REFCOUNT RefCount[MAXIMUM_PROCESSORS]; } NDIS_RW_LOCK, *PNDIS_RW_LOCK; typedef struct _LOCK_STATE { USHORT LockState; KIRQL OldIrql; } LOCK_STATE, *PLOCK_STATE; /* Timer */ typedef VOID (NTAPI *PNDIS_TIMER_FUNCTION)( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); typedef struct _NDIS_TIMER { KTIMER Timer; KDPC Dpc; } NDIS_TIMER, *PNDIS_TIMER; /* Hardware */ typedef CM_MCA_POS_DATA NDIS_MCA_POS_DATA, *PNDIS_MCA_POS_DATA; typedef CM_EISA_SLOT_INFORMATION NDIS_EISA_SLOT_INFORMATION, *PNDIS_EISA_SLOT_INFORMATION; typedef CM_EISA_FUNCTION_INFORMATION NDIS_EISA_FUNCTION_INFORMATION, *PNDIS_EISA_FUNCTION_INFORMATION; typedef CM_PARTIAL_RESOURCE_LIST NDIS_RESOURCE_LIST, *PNDIS_RESOURCE_LIST; /* Hardware status codes (OID_GEN_HARDWARE_STATUS) */ typedef enum _NDIS_HARDWARE_STATUS { NdisHardwareStatusReady, NdisHardwareStatusInitializing, NdisHardwareStatusReset, NdisHardwareStatusClosing, NdisHardwareStatusNotReady } NDIS_HARDWARE_STATUS, *PNDIS_HARDWARE_STATUS; /* OID_GEN_GET_TIME_CAPS */ typedef struct _GEN_GET_TIME_CAPS { ULONG Flags; ULONG ClockPrecision; } GEN_GET_TIME_CAPS, *PGEN_GET_TIME_CAPS; /* Flag bits */ #define READABLE_LOCAL_CLOCK 0x00000001 #define CLOCK_NETWORK_DERIVED 0x00000002 #define CLOCK_PRECISION 0x00000004 #define RECEIVE_TIME_INDICATION_CAPABLE 0x00000008 #define TIMED_SEND_CAPABLE 0x00000010 #define TIME_STAMP_CAPABLE 0x00000020 /* OID_GEN_GET_NETCARD_TIME */ typedef struct _GEN_GET_NETCARD_TIME { ULONGLONG ReadTime; } GEN_GET_NETCARD_TIME, *PGEN_GET_NETCARD_TIME; /* NDIS packet filter bits (OID_GEN_CURRENT_PACKET_FILTER) */ #define NDIS_PACKET_TYPE_DIRECTED 0x00000001 #define NDIS_PACKET_TYPE_MULTICAST 0x00000002 #define NDIS_PACKET_TYPE_ALL_MULTICAST 0x00000004 #define NDIS_PACKET_TYPE_BROADCAST 0x00000008 #define NDIS_PACKET_TYPE_SOURCE_ROUTING 0x00000010 #define NDIS_PACKET_TYPE_PROMISCUOUS 0x00000020 #define NDIS_PACKET_TYPE_SMT 0x00000040 #define NDIS_PACKET_TYPE_ALL_LOCAL 0x00000080 #define NDIS_PACKET_TYPE_GROUP 0x00001000 #define NDIS_PACKET_TYPE_ALL_FUNCTIONAL 0x00002000 #define NDIS_PACKET_TYPE_FUNCTIONAL 0x00004000 #define NDIS_PACKET_TYPE_MAC_FRAME 0x00008000 /* NDIS protocol option bits (OID_GEN_PROTOCOL_OPTIONS) */ #define NDIS_PROT_OPTION_ESTIMATED_LENGTH 0x00000001 #define NDIS_PROT_OPTION_NO_LOOPBACK 0x00000002 #define NDIS_PROT_OPTION_NO_RSVD_ON_RCVPKT 0x00000004 /* NDIS MAC option bits (OID_GEN_MAC_OPTIONS) */ #define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA 0x00000001 #define NDIS_MAC_OPTION_RECEIVE_SERIALIZED 0x00000002 #define NDIS_MAC_OPTION_TRANSFERS_NOT_PEND 0x00000004 #define NDIS_MAC_OPTION_NO_LOOPBACK 0x00000008 #define NDIS_MAC_OPTION_FULL_DUPLEX 0x00000010 #define NDIS_MAC_OPTION_EOTX_INDICATION 0x00000020 #define NDIS_MAC_OPTION_8021P_PRIORITY 0x00000040 #define NDIS_MAC_OPTION_RESERVED 0x80000000 /* State of the LAN media (OID_GEN_MEDIA_CONNECT_STATUS) */ typedef enum _NDIS_MEDIA_STATE { NdisMediaStateConnected, NdisMediaStateDisconnected } NDIS_MEDIA_STATE, *PNDIS_MEDIA_STATE; /* OID_GEN_SUPPORTED_GUIDS */ typedef struct _NDIS_GUID { GUID Guid; union { NDIS_OID Oid; NDIS_STATUS Status; } u; ULONG Size; ULONG Flags; } NDIS_GUID, *PNDIS_GUID; #define NDIS_GUID_TO_OID 0x00000001 #define NDIS_GUID_TO_STATUS 0x00000002 #define NDIS_GUID_ANSI_STRING 0x00000004 #define NDIS_GUID_UNICODE_STRING 0x00000008 #define NDIS_GUID_ARRAY 0x00000010 typedef HANDLE PNDIS_PACKET_POOL; /* NDIS_PACKET_PRIVATE.Flags constants */ #define fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO 0x40 #define fPACKET_ALLOCATED_BY_NDIS 0x80 typedef struct _NDIS_PACKET_PRIVATE { UINT PhysicalCount; UINT TotalLength; PNDIS_BUFFER Head; PNDIS_BUFFER Tail; PNDIS_PACKET_POOL Pool; UINT Count; ULONG Flags; BOOLEAN ValidCounts; UCHAR NdisPacketFlags; USHORT NdisPacketOobOffset; } NDIS_PACKET_PRIVATE, * PNDIS_PACKET_PRIVATE; typedef struct _NDIS_PACKET { NDIS_PACKET_PRIVATE Private; __GNU_EXTENSION union { __GNU_EXTENSION struct { UCHAR MiniportReserved[2 * sizeof(PVOID)]; UCHAR WrapperReserved[2 * sizeof(PVOID)]; }; __GNU_EXTENSION struct { UCHAR MiniportReservedEx[3 * sizeof(PVOID)]; UCHAR WrapperReservedEx[sizeof(PVOID)]; }; __GNU_EXTENSION struct { UCHAR MacReserved[4 * sizeof(PVOID)]; }; }; ULONG_PTR Reserved[2]; UCHAR ProtocolReserved[1]; } NDIS_PACKET, *PNDIS_PACKET, **PPNDIS_PACKET; typedef enum _NDIS_CLASS_ID { NdisClass802_3Priority, NdisClassWirelessWanMbxMailbox, NdisClassIrdaPacketInfo, NdisClassAtmAALInfo } NDIS_CLASS_ID; typedef struct MediaSpecificInformation { UINT NextEntryOffset; NDIS_CLASS_ID ClassId; UINT Size; UCHAR ClassInformation[1]; } MEDIA_SPECIFIC_INFORMATION; typedef struct _NDIS_PACKET_OOB_DATA { _ANONYMOUS_UNION union { ULONGLONG TimeToSend; ULONGLONG TimeSent; } DUMMYUNIONNAME; ULONGLONG TimeReceived; UINT HeaderSize; UINT SizeMediaSpecificInfo; PVOID MediaSpecificInformation; NDIS_STATUS Status; } NDIS_PACKET_OOB_DATA, *PNDIS_PACKET_OOB_DATA; typedef struct _NDIS_PM_PACKET_PATTERN { ULONG Priority; ULONG Reserved; ULONG MaskSize; ULONG PatternOffset; ULONG PatternSize; ULONG PatternFlags; } NDIS_PM_PACKET_PATTERN, *PNDIS_PM_PACKET_PATTERN; typedef struct _NDIS_PACKET_STACK { ULONG_PTR IMReserved[2]; ULONG_PTR NdisReserved[4]; } NDIS_PACKET_STACK, *PNDIS_PACKET_STACK; /* Request types used by NdisRequest */ typedef enum _NDIS_REQUEST_TYPE { NdisRequestQueryInformation, NdisRequestSetInformation, NdisRequestQueryStatistics, NdisRequestOpen, NdisRequestClose, NdisRequestSend, NdisRequestTransferData, NdisRequestReset, NdisRequestGeneric1, NdisRequestGeneric2, NdisRequestGeneric3, NdisRequestGeneric4 } NDIS_REQUEST_TYPE, *PNDIS_REQUEST_TYPE; typedef struct _NDIS_REQUEST { UCHAR MacReserved[4 * sizeof(PVOID)]; NDIS_REQUEST_TYPE RequestType; union _DATA { struct QUERY_INFORMATION { NDIS_OID Oid; PVOID InformationBuffer; UINT InformationBufferLength; UINT BytesWritten; UINT BytesNeeded; } QUERY_INFORMATION; struct SET_INFORMATION { NDIS_OID Oid; PVOID InformationBuffer; UINT InformationBufferLength; UINT BytesRead; UINT BytesNeeded; } SET_INFORMATION; } DATA; #if (defined(NDIS50) || defined(NDIS51)) UCHAR NdisReserved[9 * sizeof(PVOID)]; __GNU_EXTENSION union { UCHAR CallMgrReserved[2 * sizeof(PVOID)]; UCHAR ProtocolReserved[2 * sizeof(PVOID)]; }; UCHAR MiniportReserved[2 * sizeof(PVOID)]; #endif } NDIS_REQUEST, *PNDIS_REQUEST; /* Wide Area Networks definitions */ typedef struct _NDIS_WAN_PACKET { LIST_ENTRY WanPacketQueue; PUCHAR CurrentBuffer; ULONG CurrentLength; PUCHAR StartBuffer; PUCHAR EndBuffer; PVOID ProtocolReserved1; PVOID ProtocolReserved2; PVOID ProtocolReserved3; PVOID ProtocolReserved4; PVOID MacReserved1; PVOID MacReserved2; PVOID MacReserved3; PVOID MacReserved4; } NDIS_WAN_PACKET, *PNDIS_WAN_PACKET; /* DMA channel information */ typedef struct _NDIS_DMA_DESCRIPTION { BOOLEAN DemandMode; BOOLEAN AutoInitialize; BOOLEAN DmaChannelSpecified; DMA_WIDTH DmaWidth; DMA_SPEED DmaSpeed; ULONG DmaPort; ULONG DmaChannel; } NDIS_DMA_DESCRIPTION, *PNDIS_DMA_DESCRIPTION; typedef struct _NDIS_DMA_BLOCK { PVOID MapRegisterBase; KEVENT AllocationEvent; PADAPTER_OBJECT SystemAdapterObject; PVOID Miniport; BOOLEAN InProgress; } NDIS_DMA_BLOCK, *PNDIS_DMA_BLOCK; typedef UCHAR NDIS_DMA_SIZE; #define NDIS_DMA_24BITS ((NDIS_DMA_SIZE)0) #define NDIS_DMA_32BITS ((NDIS_DMA_SIZE)1) #define NDIS_DMA_64BITS ((NDIS_DMA_SIZE)2) typedef enum _NDIS_PROCESSOR_TYPE { NdisProcessorX86, NdisProcessorMips, NdisProcessorAlpha, NdisProcessorPpc, NdisProcessorAmd64 } NDIS_PROCESSOR_TYPE, *PNDIS_PROCESSOR_TYPE; typedef enum _NDIS_ENVIRONMENT_TYPE { NdisEnvironmentWindows, NdisEnvironmentWindowsNt } NDIS_ENVIRONMENT_TYPE, *PNDIS_ENVIRONMENT_TYPE; /* Possible hardware architecture */ typedef enum _NDIS_INTERFACE_TYPE { NdisInterfaceInternal = Internal, NdisInterfaceIsa = Isa, NdisInterfaceEisa = Eisa, NdisInterfaceMca = MicroChannel, NdisInterfaceTurboChannel = TurboChannel, NdisInterfacePci = PCIBus, NdisInterfacePcMcia = PCMCIABus, NdisInterfaceCBus = CBus, NdisInterfaceMPIBus = MPIBus, NdisInterfaceMPSABus = MPSABus, NdisInterfaceProcessorInternal = ProcessorInternal, NdisInterfaceInternalPowerBus = InternalPowerBus, NdisInterfacePNPISABus = PNPISABus, NdisInterfacePNPBus = PNPBus, NdisMaximumInterfaceType } NDIS_INTERFACE_TYPE, *PNDIS_INTERFACE_TYPE; #define NdisInterruptLevelSensitive LevelSensitive #define NdisInterruptLatched Latched typedef KINTERRUPT_MODE NDIS_INTERRUPT_MODE, *PNDIS_INTERRUPT_MODE; typedef enum _NDIS_PARAMETER_TYPE { NdisParameterInteger, NdisParameterHexInteger, NdisParameterString, NdisParameterMultiString, NdisParameterBinary } NDIS_PARAMETER_TYPE, *PNDIS_PARAMETER_TYPE; typedef struct { USHORT Length; PVOID Buffer; } BINARY_DATA; typedef struct _NDIS_CONFIGURATION_PARAMETER { NDIS_PARAMETER_TYPE ParameterType; union { ULONG IntegerData; NDIS_STRING StringData; BINARY_DATA BinaryData; } ParameterData; } NDIS_CONFIGURATION_PARAMETER, *PNDIS_CONFIGURATION_PARAMETER; typedef PHYSICAL_ADDRESS NDIS_PHYSICAL_ADDRESS, *PNDIS_PHYSICAL_ADDRESS; typedef struct _NDIS_PHYSICAL_ADDRESS_UNIT { NDIS_PHYSICAL_ADDRESS PhysicalAddress; UINT Length; } NDIS_PHYSICAL_ADDRESS_UNIT, *PNDIS_PHYSICAL_ADDRESS_UNIT; typedef struct _NDIS_WAN_LINE_DOWN { UCHAR RemoteAddress[6]; UCHAR LocalAddress[6]; } NDIS_WAN_LINE_DOWN, *PNDIS_WAN_LINE_DOWN; typedef struct _NDIS_WAN_LINE_UP { ULONG LinkSpeed; ULONG MaximumTotalSize; NDIS_WAN_QUALITY Quality; USHORT SendWindow; UCHAR RemoteAddress[6]; OUT UCHAR LocalAddress[6]; ULONG ProtocolBufferLength; PUCHAR ProtocolBuffer; USHORT ProtocolType; NDIS_STRING DeviceName; } NDIS_WAN_LINE_UP, *PNDIS_WAN_LINE_UP; typedef VOID (NTAPI *ADAPTER_SHUTDOWN_HANDLER)( IN PVOID ShutdownContext); typedef NTSTATUS (NTAPI *TDI_REGISTER_CALLBACK)( IN PUNICODE_STRING DeviceName, OUT HANDLE* TdiHandle); typedef NTSTATUS (NTAPI *TDI_PNP_HANDLER)( IN PUNICODE_STRING UpperComponent, IN PUNICODE_STRING LowerComponent, IN PUNICODE_STRING BindList, IN PVOID ReconfigBuffer, IN UINT ReconfigBufferSize, IN UINT Operation); typedef struct _OID_LIST OID_LIST, *POID_LIST; /* PnP state */ typedef enum _NDIS_PNP_DEVICE_STATE { NdisPnPDeviceAdded, NdisPnPDeviceStarted, NdisPnPDeviceQueryStopped, NdisPnPDeviceStopped, NdisPnPDeviceQueryRemoved, NdisPnPDeviceRemoved, NdisPnPDeviceSurpriseRemoved } NDIS_PNP_DEVICE_STATE; #define NDIS_DEVICE_NOT_STOPPABLE 0x00000001 #define NDIS_DEVICE_NOT_REMOVEABLE 0x00000002 #define NDIS_DEVICE_NOT_SUSPENDABLE 0x00000004 #define NDIS_DEVICE_DISABLE_PM 0x00000008 #define NDIS_DEVICE_DISABLE_WAKE_UP 0x00000010 #define NDIS_DEVICE_DISABLE_WAKE_ON_RECONNECT 0x00000020 #define NDIS_DEVICE_RESERVED 0x00000040 #define NDIS_DEVICE_DISABLE_WAKE_ON_MAGIC_PACKET 0x00000080 #define NDIS_DEVICE_DISABLE_WAKE_ON_PATTERN_MATCH 0x00000100 /* OID_GEN_NETWORK_LAYER_ADDRESSES */ typedef struct _NETWORK_ADDRESS { USHORT AddressLength; USHORT AddressType; UCHAR Address[1]; } NETWORK_ADDRESS, *PNETWORK_ADDRESS; typedef struct _NETWORK_ADDRESS_LIST { LONG AddressCount; USHORT AddressType; NETWORK_ADDRESS Address[1]; } NETWORK_ADDRESS_LIST, *PNETWORK_ADDRESS_LIST; /* Protocol types supported by NDIS */ #define NDIS_PROTOCOL_ID_DEFAULT 0x00 #define NDIS_PROTOCOL_ID_TCP_IP 0x02 #define NDIS_PROTOCOL_ID_IPX 0x06 #define NDIS_PROTOCOL_ID_NBF 0x07 #define NDIS_PROTOCOL_ID_MAX 0x0F #define NDIS_PROTOCOL_ID_MASK 0x0F /* OID_GEN_TRANSPORT_HEADER_OFFSET */ typedef struct _TRANSPORT_HEADER_OFFSET { USHORT ProtocolType; USHORT HeaderOffset; } TRANSPORT_HEADER_OFFSET, *PTRANSPORT_HEADER_OFFSET; /* OID_GEN_CO_LINK_SPEED / OID_GEN_CO_MINIMUM_LINK_SPEED */ typedef struct _NDIS_CO_LINK_SPEED { ULONG Outbound; ULONG Inbound; } NDIS_CO_LINK_SPEED, *PNDIS_CO_LINK_SPEED; typedef ULONG NDIS_AF, *PNDIS_AF; #define CO_ADDRESS_FAMILY_Q2931 ((NDIS_AF)0x1) #define CO_ADDRESS_FAMILY_PSCHED ((NDIS_AF)0x2) #define CO_ADDRESS_FAMILY_L2TP ((NDIS_AF)0x3) #define CO_ADDRESS_FAMILY_IRDA ((NDIS_AF)0x4) #define CO_ADDRESS_FAMILY_1394 ((NDIS_AF)0x5) #define CO_ADDRESS_FAMILY_PPP ((NDIS_AF)0x6) #define CO_ADDRESS_FAMILY_TAPI ((NDIS_AF)0x800) #define CO_ADDRESS_FAMILY_TAPI_PROXY ((NDIS_AF)0x801) #define CO_ADDRESS_FAMILY_PROXY 0x80000000 typedef struct { NDIS_AF AddressFamily; ULONG MajorVersion; ULONG MinorVersion; } CO_ADDRESS_FAMILY, *PCO_ADDRESS_FAMILY; typedef struct _CO_SPECIFIC_PARAMETERS { ULONG ParamType; ULONG Length; UCHAR Parameters[1]; } CO_SPECIFIC_PARAMETERS, *PCO_SPECIFIC_PARAMETERS; typedef struct _CO_CALL_MANAGER_PARAMETERS { FLOWSPEC Transmit; FLOWSPEC Receive; CO_SPECIFIC_PARAMETERS CallMgrSpecific; } CO_CALL_MANAGER_PARAMETERS, *PCO_CALL_MANAGER_PARAMETERS; /* CO_MEDIA_PARAMETERS.Flags constants */ #define RECEIVE_TIME_INDICATION 0x00000001 #define USE_TIME_STAMPS 0x00000002 #define TRANSMIT_VC 0x00000004 #define RECEIVE_VC 0x00000008 #define INDICATE_ERRED_PACKETS 0x00000010 #define INDICATE_END_OF_TX 0x00000020 #define RESERVE_RESOURCES_VC 0x00000040 #define ROUND_DOWN_FLOW 0x00000080 #define ROUND_UP_FLOW 0x00000100 typedef struct _CO_MEDIA_PARAMETERS { ULONG Flags; ULONG ReceivePriority; ULONG ReceiveSizeHint; CO_SPECIFIC_PARAMETERS MediaSpecific; } CO_MEDIA_PARAMETERS, *PCO_MEDIA_PARAMETERS; /* CO_CALL_PARAMETERS.Flags constants */ #define PERMANENT_VC 0x00000001 #define CALL_PARAMETERS_CHANGED 0x00000002 #define QUERY_CALL_PARAMETERS 0x00000004 #define BROADCAST_VC 0x00000008 #define MULTIPOINT_VC 0x00000010 typedef struct _CO_CALL_PARAMETERS { ULONG Flags; PCO_CALL_MANAGER_PARAMETERS CallMgrParameters; PCO_MEDIA_PARAMETERS MediaParameters; } CO_CALL_PARAMETERS, *PCO_CALL_PARAMETERS; typedef struct _CO_SAP { ULONG SapType; ULONG SapLength; UCHAR Sap[1]; } CO_SAP, *PCO_SAP; typedef struct _NDIS_IPSEC_PACKET_INFO { _ANONYMOUS_UNION union { struct { NDIS_HANDLE OffloadHandle; NDIS_HANDLE NextOffloadHandle; } Transmit; struct { ULONG SA_DELETE_REQ : 1; ULONG CRYPTO_DONE : 1; ULONG NEXT_CRYPTO_DONE : 1; ULONG CryptoStatus; } Receive; } DUMMYUNIONNAME; } NDIS_IPSEC_PACKET_INFO, *PNDIS_IPSEC_PACKET_INFO; /* NDIS_MAC_FRAGMENT.Errors constants */ #define WAN_ERROR_CRC 0x00000001 #define WAN_ERROR_FRAMING 0x00000002 #define WAN_ERROR_HARDWAREOVERRUN 0x00000004 #define WAN_ERROR_BUFFEROVERRUN 0x00000008 #define WAN_ERROR_TIMEOUT 0x00000010 #define WAN_ERROR_ALIGNMENT 0x00000020 typedef struct _NDIS_MAC_FRAGMENT { NDIS_HANDLE NdisLinkContext; ULONG Errors; } NDIS_MAC_FRAGMENT, *PNDIS_MAC_FRAGMENT; typedef struct _NDIS_MAC_LINE_DOWN { NDIS_HANDLE NdisLinkContext; } NDIS_MAC_LINE_DOWN, *PNDIS_MAC_LINE_DOWN; typedef struct _NDIS_MAC_LINE_UP { ULONG LinkSpeed; NDIS_WAN_QUALITY Quality; USHORT SendWindow; NDIS_HANDLE ConnectionWrapperID; NDIS_HANDLE NdisLinkHandle; NDIS_HANDLE NdisLinkContext; } NDIS_MAC_LINE_UP, *PNDIS_MAC_LINE_UP; typedef struct _NDIS_PACKET_8021Q_INFO { _ANONYMOUS_UNION union { struct { UINT32 UserPriority : 3; UINT32 CanonicalFormatId : 1; UINT32 VlanId : 12; UINT32 Reserved : 16; } TagHeader; PVOID Value; } DUMMYUNIONNAME; } NDIS_PACKET_8021Q_INFO, *PNDIS_PACKET_8021Q_INFO; typedef enum _NDIS_PER_PACKET_INFO { TcpIpChecksumPacketInfo, IpSecPacketInfo, TcpLargeSendPacketInfo, ClassificationHandlePacketInfo, NdisReserved, ScatterGatherListPacketInfo, Ieee8021QInfo, OriginalPacketInfo, PacketCancelId, MaxPerPacketInfo } NDIS_PER_PACKET_INFO, *PNDIS_PER_PACKET_INFO; typedef struct _NDIS_PACKET_EXTENSION { PVOID NdisPacketInfo[MaxPerPacketInfo]; } NDIS_PACKET_EXTENSION, *PNDIS_PACKET_EXTENSION; typedef struct _NDIS_GENERIC_OBJECT { NDIS_OBJECT_HEADER Header; PVOID Caller; PVOID CallersCaller; PDRIVER_OBJECT DriverObject; } NDIS_GENERIC_OBJECT, *PNDIS_GENERIC_OBJECT; /* * PNDIS_PACKET * NDIS_GET_ORIGINAL_PACKET( * IN PNDIS_PACKET Packet); */ #define NDIS_GET_ORIGINAL_PACKET(Packet) \ NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo) /* * PVOID * NDIS_GET_PACKET_CANCEL_ID( * IN PNDIS_PACKET Packet); */ #define NDIS_GET_PACKET_CANCEL_ID(Packet) \ NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId) /* * PNDIS_PACKET_EXTENSION * NDIS_PACKET_EXTENSION_FROM_PACKET( * IN PNDIS_PACKET Packet); */ #define NDIS_PACKET_EXTENSION_FROM_PACKET(Packet) \ ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) \ + (Packet)->Private.NdisPacketOobOffset + sizeof(NDIS_PACKET_OOB_DATA))) /* * PVOID * NDIS_PER_PACKET_INFO_FROM_PACKET( * IN OUT PNDIS_PACKET Packet, * IN NDIS_PER_PACKET_INFO InfoType); */ #define NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, InfoType) \ ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) + (Packet)->Private.NdisPacketOobOffset \ + sizeof(NDIS_PACKET_OOB_DATA)))->NdisPacketInfo[(InfoType)] /* * VOID * NDIS_SET_ORIGINAL_PACKET( * IN OUT PNDIS_PACKET Packet, * IN PNDIS_PACKET OriginalPacket); */ #define NDIS_SET_ORIGINAL_PACKET(Packet, OriginalPacket) \ NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo) = (OriginalPacket) /* * VOID * NDIS_SET_PACKET_CANCEL_ID( * IN PNDIS_PACKET Packet * IN ULONG_PTR CancelId); */ #define NDIS_SET_PACKET_CANCEL_ID(Packet, CancelId) \ NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId) = (CancelId) typedef enum _NDIS_TASK { TcpIpChecksumNdisTask, IpSecNdisTask, TcpLargeSendNdisTask, MaxNdisTask } NDIS_TASK, *PNDIS_TASK; typedef struct _NDIS_TASK_IPSEC { struct { ULONG AH_ESP_COMBINED; ULONG TRANSPORT_TUNNEL_COMBINED; ULONG V4_OPTIONS; ULONG RESERVED; } Supported; struct { ULONG MD5 : 1; ULONG SHA_1 : 1; ULONG Transport : 1; ULONG Tunnel : 1; ULONG Send : 1; ULONG Receive : 1; } V4AH; struct { ULONG DES : 1; ULONG RESERVED : 1; ULONG TRIPLE_DES : 1; ULONG NULL_ESP : 1; ULONG Transport : 1; ULONG Tunnel : 1; ULONG Send : 1; ULONG Receive : 1; } V4ESP; } NDIS_TASK_IPSEC, *PNDIS_TASK_IPSEC; typedef struct _NDIS_TASK_OFFLOAD { ULONG Version; ULONG Size; NDIS_TASK Task; ULONG OffsetNextTask; ULONG TaskBufferLength; UCHAR TaskBuffer[1]; } NDIS_TASK_OFFLOAD, *PNDIS_TASK_OFFLOAD; /* NDIS_TASK_OFFLOAD_HEADER.Version constants */ #define NDIS_TASK_OFFLOAD_VERSION 1 typedef enum _NDIS_ENCAPSULATION { UNSPECIFIED_Encapsulation, NULL_Encapsulation, IEEE_802_3_Encapsulation, IEEE_802_5_Encapsulation, LLC_SNAP_ROUTED_Encapsulation, LLC_SNAP_BRIDGED_Encapsulation } NDIS_ENCAPSULATION; typedef struct _NDIS_ENCAPSULATION_FORMAT { NDIS_ENCAPSULATION Encapsulation; struct { ULONG FixedHeaderSize : 1; ULONG Reserved : 31; } Flags; ULONG EncapsulationHeaderSize; } NDIS_ENCAPSULATION_FORMAT, *PNDIS_ENCAPSULATION_FORMAT; typedef struct _NDIS_TASK_OFFLOAD_HEADER { ULONG Version; ULONG Size; ULONG Reserved; ULONG OffsetFirstTask; NDIS_ENCAPSULATION_FORMAT EncapsulationFormat; } NDIS_TASK_OFFLOAD_HEADER, *PNDIS_TASK_OFFLOAD_HEADER; typedef struct _NDIS_TASK_TCP_IP_CHECKSUM { struct { ULONG IpOptionsSupported:1; ULONG TcpOptionsSupported:1; ULONG TcpChecksum:1; ULONG UdpChecksum:1; ULONG IpChecksum:1; } V4Transmit; struct { ULONG IpOptionsSupported : 1; ULONG TcpOptionsSupported : 1; ULONG TcpChecksum : 1; ULONG UdpChecksum : 1; ULONG IpChecksum : 1; } V4Receive; struct { ULONG IpOptionsSupported : 1; ULONG TcpOptionsSupported : 1; ULONG TcpChecksum : 1; ULONG UdpChecksum : 1; } V6Transmit; struct { ULONG IpOptionsSupported : 1; ULONG TcpOptionsSupported : 1; ULONG TcpChecksum : 1; ULONG UdpChecksum : 1; } V6Receive; } NDIS_TASK_TCP_IP_CHECKSUM, *PNDIS_TASK_TCP_IP_CHECKSUM; typedef struct _NDIS_TASK_TCP_LARGE_SEND { ULONG Version; ULONG MaxOffLoadSize; ULONG MinSegmentCount; BOOLEAN TcpOptions; BOOLEAN IpOptions; } NDIS_TASK_TCP_LARGE_SEND, *PNDIS_TASK_TCP_LARGE_SEND; typedef struct _NDIS_TCP_IP_CHECKSUM_PACKET_INFO { _ANONYMOUS_UNION union { struct { ULONG NdisPacketChecksumV4 : 1; ULONG NdisPacketChecksumV6 : 1; ULONG NdisPacketTcpChecksum : 1; ULONG NdisPacketUdpChecksum : 1; ULONG NdisPacketIpChecksum : 1; } Transmit; struct { ULONG NdisPacketTcpChecksumFailed : 1; ULONG NdisPacketUdpChecksumFailed : 1; ULONG NdisPacketIpChecksumFailed : 1; ULONG NdisPacketTcpChecksumSucceeded : 1; ULONG NdisPacketUdpChecksumSucceeded : 1; ULONG NdisPacketIpChecksumSucceeded : 1; ULONG NdisPacketLoopback : 1; } Receive; ULONG Value; } DUMMYUNIONNAME; } NDIS_TCP_IP_CHECKSUM_PACKET_INFO, *PNDIS_TCP_IP_CHECKSUM_PACKET_INFO; typedef struct _NDIS_WAN_CO_FRAGMENT { ULONG Errors; } NDIS_WAN_CO_FRAGMENT, *PNDIS_WAN_CO_FRAGMENT; typedef struct _NDIS_WAN_FRAGMENT { UCHAR RemoteAddress[6]; UCHAR LocalAddress[6]; } NDIS_WAN_FRAGMENT, *PNDIS_WAN_FRAGMENT; typedef struct _WAN_CO_LINKPARAMS { ULONG TransmitSpeed; ULONG ReceiveSpeed; ULONG SendWindow; } WAN_CO_LINKPARAMS, *PWAN_CO_LINKPARAMS; /* Call Manager */ typedef VOID (NTAPI *CM_ACTIVATE_VC_COMPLETE_HANDLER)( IN NDIS_STATUS Status, IN NDIS_HANDLE CallMgrVcContext, IN PCO_CALL_PARAMETERS CallParameters); typedef NDIS_STATUS (NTAPI *CM_ADD_PARTY_HANDLER)( IN NDIS_HANDLE CallMgrVcContext, IN OUT PCO_CALL_PARAMETERS CallParameters, IN NDIS_HANDLE NdisPartyHandle, OUT PNDIS_HANDLE CallMgrPartyContext); typedef NDIS_STATUS (NTAPI *CM_CLOSE_AF_HANDLER)( IN NDIS_HANDLE CallMgrAfContext); typedef NDIS_STATUS (NTAPI *CM_CLOSE_CALL_HANDLER)( IN NDIS_HANDLE CallMgrVcContext, IN NDIS_HANDLE CallMgrPartyContext OPTIONAL, IN PVOID CloseData OPTIONAL, IN UINT Size OPTIONAL); typedef NDIS_STATUS (NTAPI *CM_DEREG_SAP_HANDLER)( IN NDIS_HANDLE CallMgrSapContext); typedef VOID (NTAPI *CM_DEACTIVATE_VC_COMPLETE_HANDLER)( IN NDIS_STATUS Status, IN NDIS_HANDLE CallMgrVcContext); typedef NDIS_STATUS (NTAPI *CM_DROP_PARTY_HANDLER)( IN NDIS_HANDLE CallMgrPartyContext, IN PVOID CloseData OPTIONAL, IN UINT Size OPTIONAL); typedef VOID (NTAPI *CM_INCOMING_CALL_COMPLETE_HANDLER)( IN NDIS_STATUS Status, IN NDIS_HANDLE CallMgrVcContext, IN PCO_CALL_PARAMETERS CallParameters); typedef NDIS_STATUS (NTAPI *CM_MAKE_CALL_HANDLER)( IN NDIS_HANDLE CallMgrVcContext, IN OUT PCO_CALL_PARAMETERS CallParameters, IN NDIS_HANDLE NdisPartyHandle OPTIONAL, OUT PNDIS_HANDLE CallMgrPartyContext OPTIONAL); typedef NDIS_STATUS (NTAPI *CM_MODIFY_CALL_QOS_HANDLER)( IN NDIS_HANDLE CallMgrVcContext, IN PCO_CALL_PARAMETERS CallParameters); typedef NDIS_STATUS (NTAPI *CM_OPEN_AF_HANDLER)( IN NDIS_HANDLE CallMgrBindingContext, IN PCO_ADDRESS_FAMILY AddressFamily, IN NDIS_HANDLE NdisAfHandle, OUT PNDIS_HANDLE CallMgrAfContext); typedef NDIS_STATUS (NTAPI *CM_REG_SAP_HANDLER)( IN NDIS_HANDLE CallMgrAfContext, IN PCO_SAP Sap, IN NDIS_HANDLE NdisSapHandle, OUT PNDIS_HANDLE CallMgrSapContext); typedef NDIS_STATUS (NTAPI *CO_CREATE_VC_HANDLER)( IN NDIS_HANDLE ProtocolAfContext, IN NDIS_HANDLE NdisVcHandle, OUT PNDIS_HANDLE ProtocolVcContext); typedef NDIS_STATUS (NTAPI *CO_DELETE_VC_HANDLER)( IN NDIS_HANDLE ProtocolVcContext); typedef VOID (NTAPI *CO_REQUEST_COMPLETE_HANDLER)( IN NDIS_STATUS Status, IN NDIS_HANDLE ProtocolAfContext OPTIONAL, IN NDIS_HANDLE ProtocolVcContext OPTIONAL, IN NDIS_HANDLE ProtocolPartyContext OPTIONAL, IN PNDIS_REQUEST NdisRequest); typedef NDIS_STATUS (NTAPI *CO_REQUEST_HANDLER)( IN NDIS_HANDLE ProtocolAfContext, IN NDIS_HANDLE ProtocolVcContext OPTIONAL, IN NDIS_HANDLE ProtocolPartyContext OPTIONAL, IN OUT PNDIS_REQUEST NdisRequest); typedef struct _NDIS_CALL_MANAGER_CHARACTERISTICS { UCHAR MajorVersion; UCHAR MinorVersion; USHORT Filler; UINT Reserved; CO_CREATE_VC_HANDLER CmCreateVcHandler; CO_DELETE_VC_HANDLER CmDeleteVcHandler; CM_OPEN_AF_HANDLER CmOpenAfHandler; CM_CLOSE_AF_HANDLER CmCloseAfHandler; CM_REG_SAP_HANDLER CmRegisterSapHandler; CM_DEREG_SAP_HANDLER CmDeregisterSapHandler; CM_MAKE_CALL_HANDLER CmMakeCallHandler; CM_CLOSE_CALL_HANDLER CmCloseCallHandler; CM_INCOMING_CALL_COMPLETE_HANDLER CmIncomingCallCompleteHandler; CM_ADD_PARTY_HANDLER CmAddPartyHandler; CM_DROP_PARTY_HANDLER CmDropPartyHandler; CM_ACTIVATE_VC_COMPLETE_HANDLER CmActivateVcCompleteHandler; CM_DEACTIVATE_VC_COMPLETE_HANDLER CmDeactivateVcCompleteHandler; CM_MODIFY_CALL_QOS_HANDLER CmModifyCallQoSHandler; CO_REQUEST_HANDLER CmRequestHandler; CO_REQUEST_COMPLETE_HANDLER CmRequestCompleteHandler; } NDIS_CALL_MANAGER_CHARACTERISTICS, *PNDIS_CALL_MANAGER_CHARACTERISTICS; /* Call Manager clients */ typedef VOID (*CL_OPEN_AF_COMPLETE_HANDLER)( IN NDIS_STATUS Status, IN NDIS_HANDLE ProtocolAfContext, IN NDIS_HANDLE NdisAfHandle); typedef VOID (NTAPI *CL_CLOSE_AF_COMPLETE_HANDLER)( IN NDIS_STATUS Status, IN NDIS_HANDLE ProtocolAfContext); typedef VOID (NTAPI *CL_REG_SAP_COMPLETE_HANDLER)( IN NDIS_STATUS Status, IN NDIS_HANDLE ProtocolSapContext, IN PCO_SAP Sap, IN NDIS_HANDLE NdisSapHandle); typedef VOID (NTAPI *CL_DEREG_SAP_COMPLETE_HANDLER)( IN NDIS_STATUS Status, IN NDIS_HANDLE ProtocolSapContext); typedef VOID (NTAPI *CL_MAKE_CALL_COMPLETE_HANDLER)( IN NDIS_STATUS Status, IN NDIS_HANDLE ProtocolVcContext, IN NDIS_HANDLE NdisPartyHandle OPTIONAL, IN PCO_CALL_PARAMETERS CallParameters); typedef VOID (NTAPI *CL_MODIFY_CALL_QOS_COMPLETE_HANDLER)( IN NDIS_STATUS Status, IN NDIS_HANDLE ProtocolVcContext, IN PCO_CALL_PARAMETERS CallParameters); typedef VOID (NTAPI *CL_CLOSE_CALL_COMPLETE_HANDLER)( IN NDIS_STATUS Status, IN NDIS_HANDLE ProtocolVcContext, IN NDIS_HANDLE ProtocolPartyContext OPTIONAL); typedef VOID (NTAPI *CL_ADD_PARTY_COMPLETE_HANDLER)( IN NDIS_STATUS Status, IN NDIS_HANDLE ProtocolPartyContext, IN NDIS_HANDLE NdisPartyHandle, IN PCO_CALL_PARAMETERS CallParameters); typedef VOID (NTAPI *CL_DROP_PARTY_COMPLETE_HANDLER)( IN NDIS_STATUS Status, IN NDIS_HANDLE ProtocolPartyContext); typedef NDIS_STATUS (NTAPI *CL_INCOMING_CALL_HANDLER)( IN NDIS_HANDLE ProtocolSapContext, IN NDIS_HANDLE ProtocolVcContext, IN OUT PCO_CALL_PARAMETERS CallParameters); typedef VOID (NTAPI *CL_INCOMING_CALL_QOS_CHANGE_HANDLER)( IN NDIS_HANDLE ProtocolVcContext, IN PCO_CALL_PARAMETERS CallParameters); typedef VOID (NTAPI *CL_INCOMING_CLOSE_CALL_HANDLER)( IN NDIS_STATUS CloseStatus, IN NDIS_HANDLE ProtocolVcContext, IN PVOID CloseData OPTIONAL, IN UINT Size OPTIONAL); typedef VOID (NTAPI *CL_INCOMING_DROP_PARTY_HANDLER)( IN NDIS_STATUS DropStatus, IN NDIS_HANDLE ProtocolPartyContext, IN PVOID CloseData OPTIONAL, IN UINT Size OPTIONAL); typedef VOID (NTAPI *CL_CALL_CONNECTED_HANDLER)( IN NDIS_HANDLE ProtocolVcContext); typedef struct _NDIS_CLIENT_CHARACTERISTICS { UCHAR MajorVersion; UCHAR MinorVersion; USHORT Filler; UINT Reserved; CO_CREATE_VC_HANDLER ClCreateVcHandler; CO_DELETE_VC_HANDLER ClDeleteVcHandler; CO_REQUEST_HANDLER ClRequestHandler; CO_REQUEST_COMPLETE_HANDLER ClRequestCompleteHandler; CL_OPEN_AF_COMPLETE_HANDLER ClOpenAfCompleteHandler; CL_CLOSE_AF_COMPLETE_HANDLER ClCloseAfCompleteHandler; CL_REG_SAP_COMPLETE_HANDLER ClRegisterSapCompleteHandler; CL_DEREG_SAP_COMPLETE_HANDLER ClDeregisterSapCompleteHandler; CL_MAKE_CALL_COMPLETE_HANDLER ClMakeCallCompleteHandler; CL_MODIFY_CALL_QOS_COMPLETE_HANDLER ClModifyCallQoSCompleteHandler; CL_CLOSE_CALL_COMPLETE_HANDLER ClCloseCallCompleteHandler; CL_ADD_PARTY_COMPLETE_HANDLER ClAddPartyCompleteHandler; CL_DROP_PARTY_COMPLETE_HANDLER ClDropPartyCompleteHandler; CL_INCOMING_CALL_HANDLER ClIncomingCallHandler; CL_INCOMING_CALL_QOS_CHANGE_HANDLER ClIncomingCallQoSChangeHandler; CL_INCOMING_CLOSE_CALL_HANDLER ClIncomingCloseCallHandler; CL_INCOMING_DROP_PARTY_HANDLER ClIncomingDropPartyHandler; CL_CALL_CONNECTED_HANDLER ClCallConnectedHandler; } NDIS_CLIENT_CHARACTERISTICS, *PNDIS_CLIENT_CHARACTERISTICS; /* NDIS protocol structures */ /* Prototypes for NDIS 3.0 protocol characteristics */ typedef VOID (NTAPI *OPEN_ADAPTER_COMPLETE_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status, IN NDIS_STATUS OpenErrorStatus); typedef VOID (NTAPI *CLOSE_ADAPTER_COMPLETE_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status); typedef VOID (NTAPI *RESET_COMPLETE_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status); typedef VOID (NTAPI *REQUEST_COMPLETE_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_REQUEST NdisRequest, IN NDIS_STATUS Status); typedef VOID (NTAPI *STATUS_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS GeneralStatus, IN PVOID StatusBuffer, IN UINT StatusBufferSize); typedef VOID (NTAPI *STATUS_COMPLETE_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext); typedef VOID (NTAPI *SEND_COMPLETE_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_PACKET Packet, IN NDIS_STATUS Status); typedef VOID (NTAPI *WAN_SEND_COMPLETE_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_WAN_PACKET Packet, IN NDIS_STATUS Status); typedef VOID (NTAPI *TRANSFER_DATA_COMPLETE_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_PACKET Packet, IN NDIS_STATUS Status, IN UINT BytesTransferred); typedef VOID (NTAPI *WAN_TRANSFER_DATA_COMPLETE_HANDLER)( VOID); typedef NDIS_STATUS (NTAPI *RECEIVE_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE MacReceiveContext, IN PVOID HeaderBuffer, IN UINT HeaderBufferSize, IN PVOID LookAheadBuffer, IN UINT LookaheadBufferSize, IN UINT PacketSize); typedef NDIS_STATUS (NTAPI *WAN_RECEIVE_HANDLER)( IN NDIS_HANDLE NdisLinkHandle, IN PUCHAR Packet, IN ULONG PacketSize); typedef VOID (NTAPI *RECEIVE_COMPLETE_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext); /* Protocol characteristics for NDIS 3.0 protocols */ #define NDIS30_PROTOCOL_CHARACTERISTICS_S \ UCHAR MajorNdisVersion; \ UCHAR MinorNdisVersion; \ USHORT Filler; \ _ANONYMOUS_UNION union { \ UINT Reserved; \ UINT Flags; \ } DUMMYUNIONNAME; \ OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler; \ CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler; \ _ANONYMOUS_UNION union { \ SEND_COMPLETE_HANDLER SendCompleteHandler; \ WAN_SEND_COMPLETE_HANDLER WanSendCompleteHandler; \ } DUMMYUNIONNAME2; \ _ANONYMOUS_UNION union { \ TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler; \ WAN_TRANSFER_DATA_COMPLETE_HANDLER WanTransferDataCompleteHandler; \ } DUMMYUNIONNAME3; \ RESET_COMPLETE_HANDLER ResetCompleteHandler; \ REQUEST_COMPLETE_HANDLER RequestCompleteHandler; \ _ANONYMOUS_UNION union { \ RECEIVE_HANDLER ReceiveHandler; \ WAN_RECEIVE_HANDLER WanReceiveHandler; \ } DUMMYUNIONNAME4; \ RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler; \ STATUS_HANDLER StatusHandler; \ STATUS_COMPLETE_HANDLER StatusCompleteHandler; \ NDIS_STRING Name; typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS { NDIS30_PROTOCOL_CHARACTERISTICS_S } NDIS30_PROTOCOL_CHARACTERISTICS, *PNDIS30_PROTOCOL_CHARACTERISTICS; /* Prototypes for NDIS 4.0 protocol characteristics */ typedef INT (NTAPI *RECEIVE_PACKET_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_PACKET Packet); typedef VOID (NTAPI *BIND_HANDLER)( OUT PNDIS_STATUS Status, IN NDIS_HANDLE BindContext, IN PNDIS_STRING DeviceName, IN PVOID SystemSpecific1, IN PVOID SystemSpecific2); typedef VOID (NTAPI *UNBIND_HANDLER)( OUT PNDIS_STATUS Status, IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE UnbindContext); typedef NDIS_STATUS (NTAPI *PNP_EVENT_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext, IN PNET_PNP_EVENT NetPnPEvent); typedef VOID (NTAPI *UNLOAD_PROTOCOL_HANDLER)( VOID); /* Protocol characteristics for NDIS 4.0 protocols */ #ifdef __cplusplus #define NDIS40_PROTOCOL_CHARACTERISTICS_S \ NDIS30_PROTOCOL_CHARACTERISTICS Ndis30Chars; \ RECEIVE_PACKET_HANDLER ReceivePacketHandler; \ BIND_HANDLER BindAdapterHandler; \ UNBIND_HANDLER UnbindAdapterHandler; \ PNP_EVENT_HANDLER PnPEventHandler; \ UNLOAD_PROTOCOL_HANDLER UnloadHandler; #else /* !__cplusplus */ #define NDIS40_PROTOCOL_CHARACTERISTICS_S \ NDIS30_PROTOCOL_CHARACTERISTICS_S \ RECEIVE_PACKET_HANDLER ReceivePacketHandler; \ BIND_HANDLER BindAdapterHandler; \ UNBIND_HANDLER UnbindAdapterHandler; \ PNP_EVENT_HANDLER PnPEventHandler; \ UNLOAD_PROTOCOL_HANDLER UnloadHandler; #endif /* __cplusplus */ typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS { NDIS40_PROTOCOL_CHARACTERISTICS_S } NDIS40_PROTOCOL_CHARACTERISTICS, *PNDIS40_PROTOCOL_CHARACTERISTICS; /* Prototypes for NDIS 5.0 protocol characteristics */ typedef VOID (NTAPI *CO_SEND_COMPLETE_HANDLER)( IN NDIS_STATUS Status, IN NDIS_HANDLE ProtocolVcContext, IN PNDIS_PACKET Packet); typedef VOID (NTAPI *CO_STATUS_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE ProtocolVcContext OPTIONAL, IN NDIS_STATUS GeneralStatus, IN PVOID StatusBuffer, IN UINT StatusBufferSize); typedef UINT (NTAPI *CO_RECEIVE_PACKET_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE ProtocolVcContext, IN PNDIS_PACKET Packet); typedef VOID (NTAPI *CO_AF_REGISTER_NOTIFY_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext, IN PCO_ADDRESS_FAMILY AddressFamily); #ifdef __cplusplus \ #define NDIS50_PROTOCOL_CHARACTERISTICS_S \ NDIS40_PROTOCOL_CHARACTERISTICS Ndis40Chars; \ PVOID ReservedHandlers[4]; \ CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler; \ CO_STATUS_HANDLER CoStatusHandler; \ CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler; \ CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler; #else /* !__cplusplus */ #define NDIS50_PROTOCOL_CHARACTERISTICS_S \ NDIS40_PROTOCOL_CHARACTERISTICS_S \ PVOID ReservedHandlers[4]; \ CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler; \ CO_STATUS_HANDLER CoStatusHandler; \ CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler; \ CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler; #endif /* !__cplusplus */ typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS { NDIS50_PROTOCOL_CHARACTERISTICS_S } NDIS50_PROTOCOL_CHARACTERISTICS, *PNDIS50_PROTOCOL_CHARACTERISTICS; #if defined(NDIS50) || defined(NDIS51) typedef struct _NDIS_PROTOCOL_CHARACTERISTICS { NDIS50_PROTOCOL_CHARACTERISTICS_S } NDIS_PROTOCOL_CHARACTERISTICS, *PNDIS_PROTOCOL_CHARACTERISTICS; #elif defined(NDIS40) typedef struct _NDIS_PROTOCOL_CHARACTERISTICS { NDIS40_PROTOCOL_CHARACTERISTICS_S } NDIS_PROTOCOL_CHARACTERISTICS, *PNDIS_PROTOCOL_CHARACTERISTICS; #else /* NDIS30 */ typedef struct _NDIS_PROTOCOL_CHARACTERISTICS { NDIS30_PROTOCOL_CHARACTERISTICS_S } NDIS_PROTOCOL_CHARACTERISTICS, *PNDIS_PROTOCOL_CHARACTERISTICS; #endif /* Buffer management routines */ NDISAPI VOID NTAPI NdisAllocateBuffer( OUT PNDIS_STATUS Status, OUT PNDIS_BUFFER *Buffer, IN NDIS_HANDLE PoolHandle, IN PVOID VirtualAddress, IN UINT Length); NDISAPI VOID NTAPI NdisAllocateBufferPool( OUT PNDIS_STATUS Status, OUT PNDIS_HANDLE PoolHandle, IN UINT NumberOfDescriptors); NDISAPI VOID NTAPI NdisAllocatePacket( OUT PNDIS_STATUS Status, OUT PNDIS_PACKET *Packet, IN NDIS_HANDLE PoolHandle); NDISAPI VOID NTAPI NdisAllocatePacketPool( OUT PNDIS_STATUS Status, OUT PNDIS_HANDLE PoolHandle, IN UINT NumberOfDescriptors, IN UINT ProtocolReservedLength); NDISAPI VOID NTAPI NdisCopyBuffer( OUT PNDIS_STATUS Status, OUT PNDIS_BUFFER *Buffer, IN NDIS_HANDLE PoolHandle, IN PVOID MemoryDescriptor, IN UINT Offset, IN UINT Length); NDISAPI VOID NTAPI NdisCopyFromPacketToPacket( IN PNDIS_PACKET Destination, IN UINT DestinationOffset, IN UINT BytesToCopy, IN PNDIS_PACKET Source, IN UINT SourceOffset, OUT PUINT BytesCopied); /* * VOID * NdisCopyLookaheadData( * IN PVOID Destination, * IN PVOID Source, * IN ULONG Length, * IN ULONG ReceiveFlags); */ #if defined(_M_IX86) || defined(_M_AMD64) #define NdisCopyLookaheadData(Destination, Source, Length, MacOptions) \ RtlCopyMemory(Destination, Source, Length) #else #define NdisCopyLookaheadData(Destination, Source, Length, MacOptions) \ { \ if ((MacOptions) & NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA) \ { \ RtlCopyMemory(_Destination, _Source, _Length); \ } \ else \ { \ PUCHAR _Src = (PUCHAR)(Source); \ PUCHAR _Dest = (PUCHAR)(Destination); \ PUCHAR _End = _Dest + (Length); \ while (_Dest < _End) \ *_Dest++ = *_Src++; \ } \ } #endif NDISAPI VOID NTAPI NdisDprAllocatePacket( OUT PNDIS_STATUS Status, OUT PNDIS_PACKET *Packet, IN NDIS_HANDLE PoolHandle); NDISAPI VOID NTAPI NdisDprAllocatePacketNonInterlocked( OUT PNDIS_STATUS Status, OUT PNDIS_PACKET *Packet, IN NDIS_HANDLE PoolHandle); NDISAPI VOID NTAPI NdisDprFreePacket( IN PNDIS_PACKET Packet); NDISAPI VOID NTAPI NdisDprFreePacketNonInterlocked( IN PNDIS_PACKET Packet); NDISAPI VOID NTAPI NdisFreeBufferPool( IN NDIS_HANDLE PoolHandle); NDISAPI VOID NTAPI NdisFreePacket( IN PNDIS_PACKET Packet); NDISAPI VOID NTAPI NdisFreePacketPool( IN NDIS_HANDLE PoolHandle); NDISAPI VOID NTAPI NdisReturnPackets( IN PNDIS_PACKET *PacketsToReturn, IN UINT NumberOfPackets); NDISAPI VOID NTAPI NdisUnchainBufferAtBack( IN OUT PNDIS_PACKET Packet, OUT PNDIS_BUFFER *Buffer); NDISAPI VOID NTAPI NdisUnchainBufferAtFront( IN OUT PNDIS_PACKET Packet, OUT PNDIS_BUFFER *Buffer); NDISAPI VOID NTAPI NdisAdjustBufferLength( IN PNDIS_BUFFER Buffer, IN UINT Length); NDISAPI ULONG NTAPI NdisBufferLength( IN PNDIS_BUFFER Buffer); NDISAPI PVOID NTAPI NdisBufferVirtualAddress( IN PNDIS_BUFFER Buffer); NDISAPI ULONG NTAPI NDIS_BUFFER_TO_SPAN_PAGES( IN PNDIS_BUFFER Buffer); NDISAPI VOID NTAPI NdisFreeBuffer( IN PNDIS_BUFFER Buffer); NDISAPI VOID NTAPI NdisGetBufferPhysicalArraySize( IN PNDIS_BUFFER Buffer, OUT PUINT ArraySize); NDISAPI VOID NTAPI NdisGetFirstBufferFromPacket( IN PNDIS_PACKET _Packet, OUT PNDIS_BUFFER *_FirstBuffer, OUT PVOID *_FirstBufferVA, OUT PUINT _FirstBufferLength, OUT PUINT _TotalBufferLength); NDISAPI VOID NTAPI NdisQueryBuffer( IN PNDIS_BUFFER Buffer, OUT PVOID *VirtualAddress OPTIONAL, OUT PUINT Length); NDISAPI VOID NTAPI NdisQueryBufferOffset( IN PNDIS_BUFFER Buffer, OUT PUINT Offset, OUT PUINT Length); /* * PVOID * NDIS_BUFFER_LINKAGE( * IN PNDIS_BUFFER Buffer); */ #define NDIS_BUFFER_LINKAGE(Buffer)(Buffer)->Next; /* * VOID * NdisChainBufferAtBack( * IN OUT PNDIS_PACKET Packet, * IN OUT PNDIS_BUFFER Buffer) */ #define NdisChainBufferAtBack(Packet, \ Buffer) \ { \ PNDIS_BUFFER NdisBuffer = (Buffer); \ \ while (NdisBuffer->Next != NULL) \ NdisBuffer = NdisBuffer->Next; \ \ NdisBuffer->Next = NULL; \ \ if ((Packet)->Private.Head != NULL) \ (Packet)->Private.Tail->Next = (Buffer); \ else \ (Packet)->Private.Head = (Buffer); \ \ (Packet)->Private.Tail = NdisBuffer; \ (Packet)->Private.ValidCounts = FALSE; \ } /* * VOID * NdisChainBufferAtFront( * IN OUT PNDIS_PACKET Packet, * IN OUT PNDIS_BUFFER Buffer) */ #define NdisChainBufferAtFront(Packet, \ Buffer) \ { \ PNDIS_BUFFER _NdisBuffer = (Buffer); \ \ while (_NdisBuffer->Next != NULL) \ _NdisBuffer = _NdisBuffer->Next; \ \ if ((Packet)->Private.Head == NULL) \ (Packet)->Private.Tail = _NdisBuffer; \ \ _NdisBuffer->Next = (Packet)->Private.Head; \ (Packet)->Private.Head = (Buffer); \ (Packet)->Private.ValidCounts = FALSE; \ } /* * VOID * NdisGetNextBuffer( * IN PNDIS_BUFFER CurrentBuffer, * OUT PNDIS_BUFFER * NextBuffer) */ #define NdisGetNextBuffer(CurrentBuffer, \ NextBuffer) \ { \ *(NextBuffer) = (CurrentBuffer)->Next; \ } /* * UINT * NdisGetPacketFlags( * IN PNDIS_PACKET Packet); */ #define NdisGetPacketFlags(Packet)(Packet)->Private.Flags; /* * VOID * NdisClearPacketFlags( * IN PNDIS_PACKET Packet, * IN UINT Flags); */ #define NdisClearPacketFlags(Packet, Flags) \ (Packet)->Private.Flags &= ~(Flags) /* * VOID * NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO( * IN PNDIS_PACKET Packet, * IN PPVOID pMediaSpecificInfo, * IN PUINT pSizeMediaSpecificInfo); */ #define NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \ _pMediaSpecificInfo, \ _pSizeMediaSpecificInfo) \ { \ if (!((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) || \ !((_Packet)->Private.NdisPacketFlags & fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO)) \ { \ *(_pMediaSpecificInfo) = NULL; \ *(_pSizeMediaSpecificInfo) = 0; \ } \ else \ { \ *(_pMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation; \ *(_pSizeMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo; \ } \ } /* * ULONG * NDIS_GET_PACKET_PROTOCOL_TYPE( * IN PNDIS_PACKET Packet); */ #define NDIS_GET_PACKET_PROTOCOL_TYPE(_Packet) \ ((_Packet)->Private.Flags & NDIS_PROTOCOL_ID_MASK) /* * ULONG * NDIS_GET_PACKET_HEADER_SIZE( * IN PNDIS_PACKET Packet); */ #define NDIS_GET_PACKET_HEADER_SIZE(_Packet) \ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset))->HeaderSize /* * NDIS_STATUS * NDIS_GET_PACKET_STATUS( * IN PNDIS_PACKET Packet); */ #define NDIS_GET_PACKET_STATUS(_Packet) \ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset))->Status /* * ULONGLONG * NDIS_GET_PACKET_TIME_RECEIVED( * IN PNDIS_PACKET Packet); */ #define NDIS_GET_PACKET_TIME_RECEIVED(_Packet) \ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset))->TimeReceived /* * ULONGLONG * NDIS_GET_PACKET_TIME_SENT( * IN PNDIS_PACKET Packet); */ #define NDIS_GET_PACKET_TIME_SENT(_Packet) \ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset))->TimeSent /* * ULONGLONG * NDIS_GET_PACKET_TIME_TO_SEND( * IN PNDIS_PACKET Packet); */ #define NDIS_GET_PACKET_TIME_TO_SEND(_Packet) \ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset))->TimeToSend /* * PNDIS_PACKET_OOB_DATA * NDIS_OOB_DATA_FROM_PACKET( * IN PNDIS_PACKET Packet); */ #define NDIS_OOB_DATA_FROM_PACKET(_Packet) \ (PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset) /* * VOID * NdisQueryPacket( * IN PNDIS_PACKET Packet, * OUT PUINT PhysicalBufferCount OPTIONAL, * OUT PUINT BufferCount OPTIONAL, * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL, * OUT PUINT TotalPacketLength OPTIONAL); */ static __inline VOID NdisQueryPacket( IN PNDIS_PACKET Packet, OUT PUINT PhysicalBufferCount OPTIONAL, OUT PUINT BufferCount OPTIONAL, OUT PNDIS_BUFFER *FirstBuffer OPTIONAL, OUT PUINT TotalPacketLength OPTIONAL) { if (FirstBuffer) *FirstBuffer = Packet->Private.Head; if (TotalPacketLength || BufferCount || PhysicalBufferCount) { if (!Packet->Private.ValidCounts) { UINT Offset; UINT PacketLength; PNDIS_BUFFER NdisBuffer; UINT PhysicalBufferCount = 0; UINT TotalPacketLength = 0; UINT Count = 0; for (NdisBuffer = Packet->Private.Head; NdisBuffer != (PNDIS_BUFFER)NULL; NdisBuffer = NdisBuffer->Next) { PhysicalBufferCount += NDIS_BUFFER_TO_SPAN_PAGES(NdisBuffer); NdisQueryBufferOffset(NdisBuffer, &Offset, &PacketLength); TotalPacketLength += PacketLength; Count++; } Packet->Private.PhysicalCount = PhysicalBufferCount; Packet->Private.TotalLength = TotalPacketLength; Packet->Private.Count = Count; Packet->Private.ValidCounts = TRUE; } if (PhysicalBufferCount) *PhysicalBufferCount = Packet->Private.PhysicalCount; if (BufferCount) *BufferCount = Packet->Private.Count; if (TotalPacketLength) *TotalPacketLength = Packet->Private.TotalLength; } } /* * VOID * NdisQueryPacketLength( * IN PNDIS_PACKET Packet, * OUT PUINT PhysicalBufferCount OPTIONAL, * OUT PUINT BufferCount OPTIONAL, * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL, * OUT PUINT TotalPacketLength OPTIONAL); */ static __inline VOID NdisQueryPacketLength( IN PNDIS_PACKET Packet, OUT PUINT TotalPacketLength OPTIONAL) { if (!(Packet)->Private.ValidCounts) \ NdisQueryPacket(Packet, NULL, NULL, NULL, TotalPacketLength); \ else \ *(TotalPacketLength) = (Packet)->Private.TotalLength; \ } /* * VOID * NdisRecalculatePacketCounts( * IN OUT PNDIS_PACKET Packet); */ #define NdisRecalculatePacketCounts(Packet) \ { \ PNDIS_BUFFER _Buffer = (Packet)->Private.Head; \ if (_Buffer != NULL) \ { \ while (_Buffer->Next != NULL) \ { \ _Buffer = _Buffer->Next; \ } \ (Packet)->Private.Tail = _Buffer; \ } \ (Packet)->Private.ValidCounts = FALSE; \ } /* * VOID * NdisReinitializePacket( * IN OUT PNDIS_PACKET Packet); */ #define NdisReinitializePacket(Packet) \ { \ (Packet)->Private.Head = (PNDIS_BUFFER)NULL; \ (Packet)->Private.ValidCounts = FALSE; \ } /* * VOID * NdisSetPacketFlags( * IN PNDIS_PACKET Packet, * IN UINT Flags); */ #define NdisSetPacketFlags(Packet, Flags) \ (Packet)->Private.Flags |= (Flags); /* * VOID * NDIS_SET_PACKET_HEADER_SIZE( * IN PNDIS_PACKET Packet, * IN UINT HdrSize); */ #define NDIS_SET_PACKET_HEADER_SIZE(_Packet, _HdrSize) \ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset))->HeaderSize = (_HdrSize) /* * VOID * NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO( * IN PNDIS_PACKET Packet, * IN PVOID MediaSpecificInfo, * IN UINT SizeMediaSpecificInfo); */ #define NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \ _MediaSpecificInfo, \ _SizeMediaSpecificInfo) \ { \ if ((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) \ { \ (_Packet)->Private.NdisPacketFlags |= fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO; \ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation = \ (_MediaSpecificInfo); \ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo = \ (_SizeMediaSpecificInfo); \ } \ } /* * VOID * NDIS_SET_PACKET_STATUS( * IN PNDIS_PACKET Packet, * IN NDIS_STATUS Status); */ #define NDIS_SET_PACKET_STATUS(_Packet, _Status) \ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset))->Status = (_Status) /* * VOID * NDIS_SET_PACKET_TIME_RECEIVED( * IN PNDIS_PACKET Packet, * IN ULONGLONG TimeReceived); */ #define NDIS_SET_PACKET_TIME_RECEIVED(_Packet, _TimeReceived) \ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset))->TimeReceived = (_TimeReceived) /* * VOID * NDIS_SET_PACKET_TIME_SENT( * IN PNDIS_PACKET Packet, * IN ULONGLONG TimeSent); */ #define NDIS_SET_PACKET_TIME_SENT(_Packet, _TimeSent) \ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset))->TimeSent = (_TimeSent) /* * VOID * NDIS_SET_PACKET_TIME_TO_SEND( * IN PNDIS_PACKET Packet, * IN ULONGLONG TimeToSend); */ #define NDIS_SET_PACKET_TIME_TO_SEND(_Packet, _TimeToSend) \ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset))->TimeToSend = (_TimeToSend) /* * VOID * NdisSetSendFlags( * IN PNDIS_PACKET Packet, * IN UINT Flags); */ #define NdisSetSendFlags(_Packet,_Flags)(_Packet)->Private.Flags = (_Flags) /* Memory management routines */ NDISAPI VOID NTAPI NdisCreateLookaheadBufferFromSharedMemory( IN PVOID pSharedMemory, IN UINT LookaheadLength, OUT PVOID *pLookaheadBuffer); NDISAPI VOID NTAPI NdisDestroyLookaheadBufferFromSharedMemory( IN PVOID pLookaheadBuffer); #if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_ARM) || defined(_M_PPC) /* * VOID * NdisMoveMappedMemory( * OUT PVOID Destination, * IN PVOID Source, * IN ULONG Length); */ #define NdisMoveMappedMemory(Destination, Source, Length) \ RtlCopyMemory(Destination, Source, Length) /* * VOID * NdisZeroMappedMemory( * IN PVOID Destination, * IN ULONG Length); */ #define NdisZeroMappedMemory(Destination, Length) \ RtlZeroMemory(Destination, Length) #else #define NdisMoveMappedMemory(Destination, Source, Length) \ { \ PUCHAR _Dest = Destination, _Src = Source, _End = _Dest + Length; \ while (_Dest < _End) \ *_Dest++ = _Src++; \ } #define NdisZeroMappedMemory(Destination, Length) \ { \ PUCHAR _Dest = Destination, _End = _Dest + Length; \ while (_Dest < _End) \ *_Dest++ = 0; \ } #endif /* _M_IX86 or _M_AMD64 */ /* * VOID * NdisMoveFromMappedMemory( * OUT PVOID Destination, * IN PVOID Source, * IN ULONG Length); */ #define NdisMoveFromMappedMemory(Destination, Source, Length) \ NdisMoveMappedMemory(Destination, Source, Length) /* * VOID * NdisMoveToMappedMemory( * OUT PVOID Destination, * IN PVOID Source, * IN ULONG Length); */ #define NdisMoveToMappedMemory(Destination, Source, Length) \ NdisMoveMappedMemory(Destination, Source, Length) /* * VOID * NdisMUpdateSharedMemory( * IN NDIS_HANDLE MiniportAdapterHandle, * IN ULONG Length, * IN PVOID VirtualAddress, * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); */ #define NdisMUpdateSharedMemory(_H, _L, _V, _P) \ NdisUpdateSharedMemory(_H, _L, _V, _P) NDISAPI NDIS_STATUS NTAPI NdisAllocateMemory( OUT PVOID *VirtualAddress, IN UINT Length, IN UINT MemoryFlags, IN NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress); NDISAPI VOID NTAPI NdisFreeMemory( IN PVOID VirtualAddress, IN UINT Length, IN UINT MemoryFlags); NDISAPI VOID NTAPI NdisImmediateReadSharedMemory( IN NDIS_HANDLE WrapperConfigurationContext, IN ULONG SharedMemoryAddress, OUT PUCHAR Buffer, IN ULONG Length); NDISAPI VOID NTAPI NdisImmediateWriteSharedMemory( IN NDIS_HANDLE WrapperConfigurationContext, IN ULONG SharedMemoryAddress, IN PUCHAR Buffer, IN ULONG Length); NDISAPI VOID NTAPI NdisMAllocateSharedMemory( IN NDIS_HANDLE MiniportAdapterHandle, IN ULONG Length, IN BOOLEAN Cached, OUT PVOID *VirtualAddress, OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); NDISAPI NDIS_STATUS NTAPI NdisMAllocateSharedMemoryAsync( IN NDIS_HANDLE MiniportAdapterHandle, IN ULONG Length, IN BOOLEAN Cached, IN PVOID Context); #if defined(NDIS50) #define NdisUpdateSharedMemory(NdisAdapterHandle, \ Length, \ VirtualAddress, \ PhysicalAddress) #else NDISAPI VOID NTAPI NdisUpdateSharedMemory( IN NDIS_HANDLE NdisAdapterHandle, IN ULONG Length, IN PVOID VirtualAddress, IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); #endif /* defined(NDIS50) */ /* * ULONG * NdisGetPhysicalAddressHigh( * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); */ #define NdisGetPhysicalAddressHigh(PhysicalAddress) \ ((PhysicalAddress).HighPart) /* * VOID * NdisSetPhysicalAddressHigh( * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress, * IN ULONG Value); */ #define NdisSetPhysicalAddressHigh(PhysicalAddress, Value) \ ((PhysicalAddress).HighPart) = (Value) /* * ULONG * NdisGetPhysicalAddressLow( * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); */ #define NdisGetPhysicalAddressLow(PhysicalAddress) \ ((PhysicalAddress).LowPart) /* * VOID * NdisSetPhysicalAddressLow( * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress, * IN ULONG Value); */ #define NdisSetPhysicalAddressLow(PhysicalAddress, Value) \ ((PhysicalAddress).LowPart) = (Value) /* * VOID * NDIS_PHYSICAL_ADDRESS_CONST( * IN ULONG Low, * IN LONG High); */ #define NDIS_PHYSICAL_ADDRESS_CONST(Low, High) \ { {(ULONG)(Low), (LONG)(High)} } /* * ULONG * NdisEqualMemory( * IN CONST VOID *Source1, * IN CONST VOID *Source2, * IN ULONG Length); */ #define NdisEqualMemory(Source1, Source2, Length) \ RtlEqualMemory(Source1, Source2, Length) /* * VOID * NdisFillMemory( * IN PVOID Destination, * IN ULONG Length, * IN UCHAR Fill); */ #define NdisFillMemory(Destination, Length, Fill) \ RtlFillMemory(Destination, Length, Fill) /* * VOID * NdisMoveMemory( * OUT PVOID Destination, * IN PVOID Source, * IN ULONG Length); */ #define NdisMoveMemory(Destination, Source, Length) \ RtlCopyMemory(Destination, Source, Length) /* * VOID * NdisRetrieveUlong( * IN PULONG DestinationAddress, * IN PULONG SourceAddress); */ #define NdisRetrieveUlong(DestinationAddress, SourceAddress) \ RtlRetrieveUlong(DestinationAddress, SourceAddress) /* * VOID * NdisStoreUlong( * IN PULONG DestinationAddress, * IN ULONG Value); */ #define NdisStoreUlong(DestinationAddress, Value) \ RtlStoreUlong(DestinationAddress, Value) /* * VOID * NdisZeroMemory( * IN PVOID Destination, * IN ULONG Length) */ #define NdisZeroMemory(Destination, Length) \ RtlZeroMemory(Destination, Length) typedef VOID (NTAPI *NDIS_BLOCK_INITIALIZER) ( IN PUCHAR Block, IN SIZE_T NumberOfBytes ); /* Configuration routines */ NDISAPI VOID NTAPI NdisOpenConfiguration( OUT PNDIS_STATUS Status, OUT PNDIS_HANDLE ConfigurationHandle, IN NDIS_HANDLE WrapperConfigurationContext); NDISAPI VOID NTAPI NdisReadNetworkAddress( OUT PNDIS_STATUS Status, OUT PVOID *NetworkAddress, OUT PUINT NetworkAddressLength, IN NDIS_HANDLE ConfigurationHandle); NDISAPI VOID NTAPI NdisReadEisaSlotInformation( OUT PNDIS_STATUS Status, IN NDIS_HANDLE WrapperConfigurationContext, OUT PUINT SlotNumber, OUT PNDIS_EISA_FUNCTION_INFORMATION EisaData); NDISAPI VOID NTAPI NdisReadEisaSlotInformationEx( OUT PNDIS_STATUS Status, IN NDIS_HANDLE WrapperConfigurationContext, OUT PUINT SlotNumber, OUT PNDIS_EISA_FUNCTION_INFORMATION *EisaData, OUT PUINT NumberOfFunctions); NDISAPI ULONG NTAPI NdisReadPciSlotInformation( IN NDIS_HANDLE NdisAdapterHandle, IN ULONG SlotNumber, IN ULONG Offset, IN PVOID Buffer, IN ULONG Length); NDISAPI ULONG NTAPI NdisWritePciSlotInformation( IN NDIS_HANDLE NdisAdapterHandle, IN ULONG SlotNumber, IN ULONG Offset, IN PVOID Buffer, IN ULONG Length); /* String management routines */ NDISAPI NDIS_STATUS NTAPI NdisAnsiStringToUnicodeString( IN OUT PNDIS_STRING DestinationString, IN PNDIS_ANSI_STRING SourceString); /* * BOOLEAN * NdisEqualString( * IN PNDIS_STRING String1, * IN PNDIS_STRING String2, * IN BOOLEAN CaseInsensitive); */ #define NdisEqualString(_String1, _String2, _CaseInsensitive) \ RtlEqualUnicodeString(_String1, _String2, _CaseInsensitive) NDISAPI VOID NTAPI NdisInitAnsiString( IN OUT PNDIS_ANSI_STRING DestinationString, IN PCSTR SourceString); NDISAPI VOID NTAPI NdisInitUnicodeString( IN OUT PNDIS_STRING DestinationString, IN PCWSTR SourceString); NDISAPI NDIS_STATUS NTAPI NdisUnicodeStringToAnsiString( IN OUT PNDIS_ANSI_STRING DestinationString, IN PNDIS_STRING SourceString); #define NdisFreeString(_s) NdisFreeMemory((_s).Buffer, (_s).MaximumLength, 0) #define NdisPrintString(_s) DbgPrint("%ls", (_s).Buffer) /* Spin lock reoutines */ NDISAPI VOID NTAPI NdisAllocateSpinLock( IN PNDIS_SPIN_LOCK SpinLock); NDISAPI VOID NTAPI NdisFreeSpinLock( IN PNDIS_SPIN_LOCK SpinLock); NDISAPI VOID NTAPI NdisAcquireSpinLock( IN PNDIS_SPIN_LOCK SpinLock); NDISAPI VOID NTAPI NdisReleaseSpinLock( IN PNDIS_SPIN_LOCK SpinLock); NDISAPI VOID NTAPI NdisDprAcquireSpinLock( IN PNDIS_SPIN_LOCK SpinLock); NDISAPI VOID NTAPI NdisDprReleaseSpinLock( IN PNDIS_SPIN_LOCK SpinLock); /* I/O routines */ /* * VOID * NdisRawReadPortBufferUchar( * IN ULONG Port, * OUT PUCHAR Buffer, * IN ULONG Length); */ #define NdisRawReadPortBufferUchar(Port, Buffer, Length) \ READ_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length)) /* * VOID * NdisRawReadPortBufferUlong( * IN ULONG Port, * OUT PULONG Buffer, * IN ULONG Length); */ #define NdisRawReadPortBufferUlong(Port, Buffer, Length) \ READ_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length)) /* * VOID * NdisRawReadPortBufferUshort( * IN ULONG Port, * OUT PUSHORT Buffer, * IN ULONG Length); */ #define NdisRawReadPortBufferUshort(Port, Buffer, Length) \ READ_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length)) /* * VOID * NdisRawReadPortUchar( * IN ULONG Port, * OUT PUCHAR Data); */ #define NdisRawReadPortUchar(Port, Data) \ *(Data) = READ_PORT_UCHAR((PUCHAR)(Port)) /* * VOID * NdisRawReadPortUlong( * IN ULONG Port, * OUT PULONG Data); */ #define NdisRawReadPortUlong(Port, Data) \ *(Data) = READ_PORT_ULONG((PULONG)(Port)) /* * VOID * NdisRawReadPortUshort( * IN ULONG Port, * OUT PUSHORT Data); */ #define NdisRawReadPortUshort(Port, Data) \ *(Data) = READ_PORT_USHORT((PUSHORT)(Port)) /* * VOID * NdisRawWritePortBufferUchar( * IN ULONG Port, * IN PUCHAR Buffer, * IN ULONG Length); */ #define NdisRawWritePortBufferUchar(Port, Buffer, Length) \ WRITE_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length)) /* * VOID * NdisRawWritePortBufferUlong( * IN ULONG Port, * IN PULONG Buffer, * IN ULONG Length); */ #define NdisRawWritePortBufferUlong(Port, Buffer, Length) \ WRITE_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length)) /* * VOID * NdisRawWritePortBufferUshort( * IN ULONG Port, * IN PUSHORT Buffer, * IN ULONG Length); */ #define NdisRawWritePortBufferUshort(Port, Buffer, Length) \ WRITE_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length)) /* * VOID * NdisRawWritePortUchar( * IN ULONG Port, * IN UCHAR Data); */ #define NdisRawWritePortUchar(Port, Data) \ WRITE_PORT_UCHAR((PUCHAR)(Port), (UCHAR)(Data)) /* * VOID * NdisRawWritePortUlong( * IN ULONG Port, * IN ULONG Data); */ #define NdisRawWritePortUlong(Port, Data) \ WRITE_PORT_ULONG((PULONG)(Port), (ULONG)(Data)) /* * VOID * NdisRawWritePortUshort( * IN ULONG Port, * IN USHORT Data); */ #define NdisRawWritePortUshort(Port, Data) \ WRITE_PORT_USHORT((PUSHORT)(Port), (USHORT)(Data)) /* * VOID * NdisReadRegisterUchar( * IN PUCHAR Register, * OUT PUCHAR Data); */ #define NdisReadRegisterUchar(Register, Data) \ *(Data) = *(Register) /* * VOID * NdisReadRegisterUlong( * IN PULONG Register, * OUT PULONG Data); */ #define NdisReadRegisterUlong(Register, Data) \ *(Data) = *(Register) /* * VOID * NdisReadRegisterUshort( * IN PUSHORT Register, * OUT PUSHORT Data); */ #define NdisReadRegisterUshort(Register, Data) \ *(Data) = *(Register) /* * VOID * NdisReadRegisterUchar( * IN PUCHAR Register, * IN UCHAR Data); */ #define NdisWriteRegisterUchar(Register, Data) \ WRITE_REGISTER_UCHAR((Register), (Data)) /* * VOID * NdisReadRegisterUlong( * IN PULONG Register, * IN ULONG Data); */ #define NdisWriteRegisterUlong(Register, Data) \ WRITE_REGISTER_ULONG((Register), (Data)) /* * VOID * NdisReadRegisterUshort( * IN PUSHORT Register, * IN USHORT Data); */ #define NdisWriteRegisterUshort(Register, Data) \ WRITE_REGISTER_USHORT((Register), (Data)) /* Linked lists */ /* * VOID * NdisInitializeListHead( * IN PLIST_ENTRY ListHead); */ #define NdisInitializeListHead(_ListHead) \ InitializeListHead(_ListHead) /* * PLIST_ENTRY * NdisInterlockedInsertHeadList( * IN PLIST_ENTRY ListHead, * IN PLIST_ENTRY ListEntry, * IN PNDIS_SPIN_LOCK SpinLock); */ #define NdisInterlockedInsertHeadList(_ListHead, _ListEntry, _SpinLock) \ ExInterlockedInsertHeadList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock) /* * PLIST_ENTRY * NdisInterlockedInsertTailList( * IN PLIST_ENTRY ListHead, * IN PLIST_ENTRY ListEntry, * IN PNDIS_SPIN_LOCK SpinLock); */ #define NdisInterlockedInsertTailList(_ListHead, _ListEntry, _SpinLock) \ ExInterlockedInsertTailList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock) /* * PLIST_ENTRY * NdisInterlockedRemoveHeadList( * IN PLIST_ENTRY ListHead, * IN PNDIS_SPIN_LOCK SpinLock); */ #define NdisInterlockedRemoveHeadList(_ListHead, _SpinLock) \ ExInterlockedRemoveHeadList(_ListHead, &(_SpinLock)->SpinLock) /* * VOID * NdisInitializeSListHead( * IN PSLIST_HEADER SListHead); */ #define NdisInitializeSListHead(SListHead) ExInitializeSListHead(SListHead) /* * USHORT NdisQueryDepthSList( * IN PSLIST_HEADER SListHead); */ #define NdisQueryDepthSList(SListHead) ExQueryDepthSList(SListHead) /* Interlocked routines */ /* * LONG * NdisInterlockedDecrement( * IN PLONG Addend); */ #define NdisInterlockedDecrement(Addend) InterlockedDecrement(Addend) /* * LONG * NdisInterlockedIncrement( * IN PLONG Addend); */ #define NdisInterlockedIncrement(Addend) InterlockedIncrement(Addend) /* * VOID * NdisInterlockedAddUlong( * IN PULONG Addend, * IN ULONG Increment, * IN PNDIS_SPIN_LOCK SpinLock); */ #define NdisInterlockedAddUlong(_Addend, _Increment, _SpinLock) \ ExInterlockedAddUlong(_Addend, _Increment, &(_SpinLock)->SpinLock) /* Miscellaneous routines */ NDISAPI VOID NTAPI NdisCloseConfiguration( IN NDIS_HANDLE ConfigurationHandle); NDISAPI VOID NTAPI NdisReadConfiguration( OUT PNDIS_STATUS Status, OUT PNDIS_CONFIGURATION_PARAMETER *ParameterValue, IN NDIS_HANDLE ConfigurationHandle, IN PNDIS_STRING Keyword, IN NDIS_PARAMETER_TYPE ParameterType); NDISAPI VOID NTAPI NdisWriteConfiguration( OUT PNDIS_STATUS Status, IN NDIS_HANDLE WrapperConfigurationContext, IN PNDIS_STRING Keyword, IN PNDIS_CONFIGURATION_PARAMETER ParameterValue); NDISAPI VOID __cdecl NdisWriteErrorLogEntry( IN NDIS_HANDLE NdisAdapterHandle, IN NDIS_ERROR_CODE ErrorCode, IN ULONG NumberOfErrorValues, IN ...); /* * VOID * NdisStallExecution( * IN UINT MicrosecondsToStall) */ #define NdisStallExecution KeStallExecutionProcessor NDISAPI VOID NTAPI NdisGetCurrentSystemTime( IN PLARGE_INTEGER pSystemTime); NDISAPI CCHAR NTAPI NdisSystemProcessorCount(VOID); NDISAPI VOID NTAPI NdisGetCurrentProcessorCpuUsage( OUT PULONG pCpuUsage); /* NDIS helper macros */ /* * VOID * NDIS_INIT_FUNCTION(FunctionName) */ #define NDIS_INIT_FUNCTION(FunctionName) \ alloc_text(init, FunctionName) /* * VOID * NDIS_PAGABLE_FUNCTION(FunctionName) */ #define NDIS_PAGEABLE_FUNCTION(FunctionName) \ alloc_text(page, FunctionName) #define NDIS_PAGABLE_FUNCTION NDIS_PAGEABLE_FUNCTION /* NDIS 4.0 extensions */ NDISAPI VOID NTAPI NdisMFreeSharedMemory( IN NDIS_HANDLE MiniportAdapterHandle, IN ULONG Length, IN BOOLEAN Cached, IN PVOID VirtualAddress, IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); NDISAPI VOID NTAPI NdisMWanIndicateReceive( OUT PNDIS_STATUS Status, IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_HANDLE NdisLinkContext, IN PUCHAR PacketBuffer, IN UINT PacketSize); NDISAPI VOID NTAPI NdisMWanIndicateReceiveComplete( IN NDIS_HANDLE MiniportAdapterHandle); NDISAPI VOID NTAPI NdisMWanSendComplete( IN NDIS_HANDLE MiniportAdapterHandle, IN PNDIS_WAN_PACKET Packet, IN NDIS_STATUS Status); NDISAPI NDIS_STATUS NTAPI NdisPciAssignResources( IN NDIS_HANDLE NdisMacHandle, IN NDIS_HANDLE NdisWrapperHandle, IN NDIS_HANDLE WrapperConfigurationContext, IN ULONG SlotNumber, OUT PNDIS_RESOURCE_LIST *AssignedResources); /* NDIS 5.0 extensions */ NDISAPI VOID NTAPI NdisAcquireReadWriteLock( IN PNDIS_RW_LOCK Lock, IN BOOLEAN fWrite, IN PLOCK_STATE LockState); NDISAPI NDIS_STATUS NTAPI NdisAllocateMemoryWithTag( OUT PVOID *VirtualAddress, IN UINT Length, IN ULONG Tag); NDISAPI VOID NTAPI NdisAllocatePacketPoolEx( OUT PNDIS_STATUS Status, OUT PNDIS_HANDLE PoolHandle, IN UINT NumberOfDescriptors, IN UINT NumberOfOverflowDescriptors, IN UINT ProtocolReservedLength); NDISAPI VOID NTAPI NdisCompletePnPEvent( IN NDIS_STATUS Status, IN NDIS_HANDLE NdisBindingHandle, IN PNET_PNP_EVENT NetPnPEvent); NDISAPI VOID NTAPI NdisGetCurrentProcessorCounts( OUT PULONG pIdleCount, OUT PULONG pKernelAndUser, OUT PULONG pIndex); NDISAPI VOID NTAPI NdisGetDriverHandle( IN PNDIS_HANDLE NdisBindingHandle, OUT PNDIS_HANDLE NdisDriverHandle); NDISAPI PNDIS_PACKET NTAPI NdisGetReceivedPacket( IN PNDIS_HANDLE NdisBindingHandle, IN PNDIS_HANDLE MacContext); NDISAPI VOID NTAPI NdisGetSystemUpTime( OUT PULONG pSystemUpTime); NDISAPI VOID NTAPI NdisInitializeReadWriteLock( IN PNDIS_RW_LOCK Lock); NDISAPI NDIS_STATUS NTAPI NdisMDeregisterDevice( IN NDIS_HANDLE NdisDeviceHandle); NDISAPI VOID NTAPI NdisMGetDeviceProperty( IN NDIS_HANDLE MiniportAdapterHandle, IN OUT PDEVICE_OBJECT *PhysicalDeviceObject OPTIONAL, IN OUT PDEVICE_OBJECT *FunctionalDeviceObject OPTIONAL, IN OUT PDEVICE_OBJECT *NextDeviceObject OPTIONAL, IN OUT PCM_RESOURCE_LIST *AllocatedResources OPTIONAL, IN OUT PCM_RESOURCE_LIST *AllocatedResourcesTranslated OPTIONAL); NDISAPI NDIS_STATUS NTAPI NdisMInitializeScatterGatherDma( IN NDIS_HANDLE MiniportAdapterHandle, IN BOOLEAN Dma64BitAddresses, IN ULONG MaximumPhysicalMapping); NDISAPI NDIS_STATUS NTAPI NdisMPromoteMiniport( IN NDIS_HANDLE MiniportAdapterHandle); NDISAPI NDIS_STATUS NTAPI NdisMQueryAdapterInstanceName( OUT PNDIS_STRING AdapterInstanceName, IN NDIS_HANDLE MiniportAdapterHandle); NDISAPI NDIS_STATUS NTAPI NdisMRegisterDevice( IN NDIS_HANDLE NdisWrapperHandle, IN PNDIS_STRING DeviceName, IN PNDIS_STRING SymbolicName, IN PDRIVER_DISPATCH MajorFunctions[], OUT PDEVICE_OBJECT *pDeviceObject, OUT NDIS_HANDLE *NdisDeviceHandle); NDISAPI VOID NTAPI NdisMRegisterUnloadHandler( IN NDIS_HANDLE NdisWrapperHandle, IN PDRIVER_UNLOAD UnloadHandler); NDISAPI NDIS_STATUS NTAPI NdisMRemoveMiniport( IN NDIS_HANDLE MiniportAdapterHandle); NDISAPI NDIS_STATUS NTAPI NdisMSetMiniportSecondary( IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_HANDLE PrimaryMiniportAdapterHandle); NDISAPI VOID NTAPI NdisOpenConfigurationKeyByIndex( OUT PNDIS_STATUS Status, IN NDIS_HANDLE ConfigurationHandle, IN ULONG Index, OUT PNDIS_STRING KeyName, OUT PNDIS_HANDLE KeyHandle); NDISAPI VOID NTAPI NdisOpenConfigurationKeyByName( OUT PNDIS_STATUS Status, IN NDIS_HANDLE ConfigurationHandle, IN PNDIS_STRING SubKeyName, OUT PNDIS_HANDLE SubKeyHandle); NDISAPI UINT NTAPI NdisPacketPoolUsage( IN NDIS_HANDLE PoolHandle); NDISAPI NDIS_STATUS NTAPI NdisQueryAdapterInstanceName( OUT PNDIS_STRING AdapterInstanceName, IN NDIS_HANDLE NdisBindingHandle); NDISAPI ULONG NTAPI NdisReadPcmciaAttributeMemory( IN NDIS_HANDLE NdisAdapterHandle, IN ULONG Offset, IN PVOID Buffer, IN ULONG Length); NDISAPI VOID NTAPI NdisReleaseReadWriteLock( IN PNDIS_RW_LOCK Lock, IN PLOCK_STATE LockState); NDISAPI NDIS_STATUS NTAPI NdisWriteEventLogEntry( IN PVOID LogHandle, IN NDIS_STATUS EventCode, IN ULONG UniqueEventValue, IN USHORT NumStrings, IN PVOID StringsList OPTIONAL, IN ULONG DataSize, IN PVOID Data OPTIONAL); NDISAPI ULONG NTAPI NdisWritePcmciaAttributeMemory( IN NDIS_HANDLE NdisAdapterHandle, IN ULONG Offset, IN PVOID Buffer, IN ULONG Length); /* Connectionless services */ NDISAPI NDIS_STATUS NTAPI NdisClAddParty( IN NDIS_HANDLE NdisVcHandle, IN NDIS_HANDLE ProtocolPartyContext, IN OUT PCO_CALL_PARAMETERS CallParameters, OUT PNDIS_HANDLE NdisPartyHandle); NDISAPI NDIS_STATUS NTAPI NdisClCloseAddressFamily( IN NDIS_HANDLE NdisAfHandle); NDISAPI NDIS_STATUS NTAPI NdisClCloseCall( IN NDIS_HANDLE NdisVcHandle, IN NDIS_HANDLE NdisPartyHandle OPTIONAL, IN PVOID Buffer OPTIONAL, IN UINT Size); NDISAPI NDIS_STATUS NTAPI NdisClDeregisterSap( IN NDIS_HANDLE NdisSapHandle); NDISAPI NDIS_STATUS NTAPI NdisClDropParty( IN NDIS_HANDLE NdisPartyHandle, IN PVOID Buffer OPTIONAL, IN UINT Size); NDISAPI VOID NTAPI NdisClIncomingCallComplete( IN NDIS_STATUS Status, IN NDIS_HANDLE NdisVcHandle, IN PCO_CALL_PARAMETERS CallParameters); NDISAPI NDIS_STATUS NTAPI NdisClMakeCall( IN NDIS_HANDLE NdisVcHandle, IN OUT PCO_CALL_PARAMETERS CallParameters, IN NDIS_HANDLE ProtocolPartyContext OPTIONAL, OUT PNDIS_HANDLE NdisPartyHandle OPTIONAL); NDISAPI NDIS_STATUS NTAPI NdisClModifyCallQoS( IN NDIS_HANDLE NdisVcHandle, IN PCO_CALL_PARAMETERS CallParameters); NDISAPI NDIS_STATUS NTAPI NdisClOpenAddressFamily( IN NDIS_HANDLE NdisBindingHandle, IN PCO_ADDRESS_FAMILY AddressFamily, IN NDIS_HANDLE ProtocolAfContext, IN PNDIS_CLIENT_CHARACTERISTICS ClCharacteristics, IN UINT SizeOfClCharacteristics, OUT PNDIS_HANDLE NdisAfHandle); NDISAPI NDIS_STATUS NTAPI NdisClRegisterSap( IN NDIS_HANDLE NdisAfHandle, IN NDIS_HANDLE ProtocolSapContext, IN PCO_SAP Sap, OUT PNDIS_HANDLE NdisSapHandle); /* Call Manager services */ NDISAPI NDIS_STATUS NTAPI NdisCmActivateVc( IN NDIS_HANDLE NdisVcHandle, IN OUT PCO_CALL_PARAMETERS CallParameters); NDISAPI VOID NTAPI NdisCmAddPartyComplete( IN NDIS_STATUS Status, IN NDIS_HANDLE NdisPartyHandle, IN NDIS_HANDLE CallMgrPartyContext OPTIONAL, IN PCO_CALL_PARAMETERS CallParameters); NDISAPI VOID NTAPI NdisCmCloseAddressFamilyComplete( IN NDIS_STATUS Status, IN NDIS_HANDLE NdisAfHandle); NDISAPI VOID NTAPI NdisCmCloseCallComplete( IN NDIS_STATUS Status, IN NDIS_HANDLE NdisVcHandle, IN NDIS_HANDLE NdisPartyHandle OPTIONAL); NDISAPI NDIS_STATUS NTAPI NdisCmDeactivateVc( IN NDIS_HANDLE NdisVcHandle); NDISAPI VOID NTAPI NdisCmDeregisterSapComplete( IN NDIS_STATUS Status, IN NDIS_HANDLE NdisSapHandle); NDISAPI VOID NTAPI NdisCmDispatchCallConnected( IN NDIS_HANDLE NdisVcHandle); NDISAPI NDIS_STATUS NTAPI NdisCmDispatchIncomingCall( IN NDIS_HANDLE NdisSapHandle, IN NDIS_HANDLE NdisVcHandle, IN PCO_CALL_PARAMETERS CallParameters); NDISAPI VOID NTAPI NdisCmDispatchIncomingCallQoSChange( IN NDIS_HANDLE NdisVcHandle, IN PCO_CALL_PARAMETERS CallParameters); NDISAPI VOID NTAPI NdisCmDispatchIncomingCloseCall( IN NDIS_STATUS CloseStatus, IN NDIS_HANDLE NdisVcHandle, IN PVOID Buffer OPTIONAL, IN UINT Size); NDISAPI VOID NTAPI NdisCmDispatchIncomingDropParty( IN NDIS_STATUS DropStatus, IN NDIS_HANDLE NdisPartyHandle, IN PVOID Buffer OPTIONAL, IN UINT Size); NDISAPI VOID NTAPI NdisCmDropPartyComplete( IN NDIS_STATUS Status, IN NDIS_HANDLE NdisPartyHandle); NDISAPI VOID NTAPI NdisCmMakeCallComplete( IN NDIS_STATUS Status, IN NDIS_HANDLE NdisVcHandle, IN NDIS_HANDLE NdisPartyHandle OPTIONAL, IN NDIS_HANDLE CallMgrPartyContext OPTIONAL, IN PCO_CALL_PARAMETERS CallParameters); NDISAPI VOID NTAPI NdisCmModifyCallQoSComplete( IN NDIS_STATUS Status, IN NDIS_HANDLE NdisVcHandle, IN PCO_CALL_PARAMETERS CallParameters); NDISAPI VOID NTAPI NdisCmOpenAddressFamilyComplete( IN NDIS_STATUS Status, IN NDIS_HANDLE NdisAfHandle, IN NDIS_HANDLE CallMgrAfContext); NDISAPI NDIS_STATUS NTAPI NdisCmRegisterAddressFamily( IN NDIS_HANDLE NdisBindingHandle, IN PCO_ADDRESS_FAMILY AddressFamily, IN PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics, IN UINT SizeOfCmCharacteristics); NDISAPI VOID NTAPI NdisCmRegisterSapComplete( IN NDIS_STATUS Status, IN NDIS_HANDLE NdisSapHandle, IN NDIS_HANDLE CallMgrSapContext); NDISAPI NDIS_STATUS NTAPI NdisMCmActivateVc( IN NDIS_HANDLE NdisVcHandle, IN PCO_CALL_PARAMETERS CallParameters); NDISAPI NDIS_STATUS NTAPI NdisMCmCreateVc( IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_HANDLE NdisAfHandle, IN NDIS_HANDLE MiniportVcContext, OUT PNDIS_HANDLE NdisVcHandle); NDISAPI NDIS_STATUS NTAPI NdisMCmDeactivateVc( IN NDIS_HANDLE NdisVcHandle); NDISAPI NDIS_STATUS NTAPI NdisMCmDeleteVc( IN NDIS_HANDLE NdisVcHandle); NDISAPI NDIS_STATUS NTAPI NdisMCmRegisterAddressFamily( IN NDIS_HANDLE MiniportAdapterHandle, IN PCO_ADDRESS_FAMILY AddressFamily, IN PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics, IN UINT SizeOfCmCharacteristics); NDISAPI NDIS_STATUS NTAPI NdisMCmRequest( IN NDIS_HANDLE NdisAfHandle, IN NDIS_HANDLE NdisVcHandle OPTIONAL, IN NDIS_HANDLE NdisPartyHandle OPTIONAL, IN OUT PNDIS_REQUEST NdisRequest); /* Connection-oriented services */ NDISAPI NDIS_STATUS NTAPI NdisCoCreateVc( IN NDIS_HANDLE NdisBindingHandle, IN NDIS_HANDLE NdisAfHandle OPTIONAL, IN NDIS_HANDLE ProtocolVcContext, IN OUT PNDIS_HANDLE NdisVcHandle); NDISAPI NDIS_STATUS NTAPI NdisCoDeleteVc( IN NDIS_HANDLE NdisVcHandle); NDISAPI NDIS_STATUS NTAPI NdisCoRequest( IN NDIS_HANDLE NdisBindingHandle, IN NDIS_HANDLE NdisAfHandle OPTIONAL, IN NDIS_HANDLE NdisVcHandle OPTIONAL, IN NDIS_HANDLE NdisPartyHandle OPTIONAL, IN OUT PNDIS_REQUEST NdisRequest); NDISAPI VOID NTAPI NdisCoRequestComplete( IN NDIS_STATUS Status, IN NDIS_HANDLE NdisAfHandle, IN NDIS_HANDLE NdisVcHandle OPTIONAL, IN NDIS_HANDLE NdisPartyHandle OPTIONAL, IN PNDIS_REQUEST NdisRequest); NDISAPI VOID NTAPI NdisCoSendPackets( IN NDIS_HANDLE NdisVcHandle, IN PPNDIS_PACKET PacketArray, IN UINT NumberOfPackets); NDISAPI VOID NTAPI NdisMCoActivateVcComplete( IN NDIS_STATUS Status, IN NDIS_HANDLE NdisVcHandle, IN PCO_CALL_PARAMETERS CallParameters); NDISAPI VOID NTAPI NdisMCoDeactivateVcComplete( IN NDIS_STATUS Status, IN NDIS_HANDLE NdisVcHandle); NDISAPI VOID NTAPI NdisMCoIndicateReceivePacket( IN NDIS_HANDLE NdisVcHandle, IN PPNDIS_PACKET PacketArray, IN UINT NumberOfPackets); NDISAPI VOID NTAPI NdisMCoIndicateStatus( IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_HANDLE NdisVcHandle OPTIONAL, IN NDIS_STATUS GeneralStatus, IN PVOID StatusBuffer OPTIONAL, IN ULONG StatusBufferSize); NDISAPI VOID NTAPI NdisMCoReceiveComplete( IN NDIS_HANDLE MiniportAdapterHandle); NDISAPI VOID NTAPI NdisMCoRequestComplete( IN NDIS_STATUS Status, IN NDIS_HANDLE MiniportAdapterHandle, IN PNDIS_REQUEST Request); NDISAPI VOID NTAPI NdisMCoSendComplete( IN NDIS_STATUS Status, IN NDIS_HANDLE NdisVcHandle, IN PNDIS_PACKET Packet); /* NDIS 5.0 extensions for intermediate drivers */ NDISAPI VOID NTAPI NdisIMAssociateMiniport( IN NDIS_HANDLE DriverHandle, IN NDIS_HANDLE ProtocolHandle); NDISAPI NDIS_STATUS NTAPI NdisIMCancelInitializeDeviceInstance( IN NDIS_HANDLE DriverHandle, IN PNDIS_STRING DeviceInstance); NDISAPI VOID NTAPI NdisIMCopySendCompletePerPacketInfo( IN PNDIS_PACKET DstPacket, IN PNDIS_PACKET SrcPacket); NDISAPI VOID NTAPI NdisIMCopySendPerPacketInfo( IN PNDIS_PACKET DstPacket, IN PNDIS_PACKET SrcPacket); NDISAPI VOID NTAPI NdisIMDeregisterLayeredMiniport( IN NDIS_HANDLE DriverHandle); NDISAPI NDIS_HANDLE NTAPI NdisIMGetBindingContext( IN NDIS_HANDLE NdisBindingHandle); NDISAPI NDIS_HANDLE NTAPI NdisIMGetDeviceContext( IN NDIS_HANDLE MiniportAdapterHandle); NDISAPI NDIS_STATUS NTAPI NdisIMInitializeDeviceInstanceEx( IN NDIS_HANDLE DriverHandle, IN PNDIS_STRING DriverInstance, IN NDIS_HANDLE DeviceContext OPTIONAL); NDISAPI PSINGLE_LIST_ENTRY NTAPI NdisInterlockedPopEntrySList( IN PSLIST_HEADER ListHead, IN PKSPIN_LOCK Lock); NDISAPI PSINGLE_LIST_ENTRY NTAPI NdisInterlockedPushEntrySList( IN PSLIST_HEADER ListHead, IN PSINGLE_LIST_ENTRY ListEntry, IN PKSPIN_LOCK Lock); NDISAPI VOID NTAPI NdisQueryBufferSafe( IN PNDIS_BUFFER Buffer, OUT PVOID *VirtualAddress OPTIONAL, OUT PUINT Length, IN UINT Priority); /* Prototypes for NDIS_MINIPORT_CHARACTERISTICS */ typedef BOOLEAN (NTAPI *W_CHECK_FOR_HANG_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext); typedef VOID (NTAPI *W_DISABLE_INTERRUPT_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext); typedef VOID (NTAPI *W_ENABLE_INTERRUPT_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext); typedef VOID (NTAPI *W_HALT_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext); typedef VOID (NTAPI *W_HANDLE_INTERRUPT_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext); typedef NDIS_STATUS (NTAPI *W_INITIALIZE_HANDLER)( OUT PNDIS_STATUS OpenErrorStatus, OUT PUINT SelectedMediumIndex, IN PNDIS_MEDIUM MediumArray, IN UINT MediumArraySize, IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_HANDLE WrapperConfigurationContext); typedef VOID (NTAPI *W_ISR_HANDLER)( OUT PBOOLEAN InterruptRecognized, OUT PBOOLEAN QueueMiniportHandleInterrupt, IN NDIS_HANDLE MiniportAdapterContext); typedef NDIS_STATUS (NTAPI *W_QUERY_INFORMATION_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_OID Oid, IN PVOID InformationBuffer, IN ULONG InformationBufferLength, OUT PULONG BytesWritten, OUT PULONG BytesNeeded); typedef NDIS_STATUS (NTAPI *W_RECONFIGURE_HANDLER)( OUT PNDIS_STATUS OpenErrorStatus, IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_HANDLE WrapperConfigurationContext); typedef NDIS_STATUS (NTAPI *W_RESET_HANDLER)( OUT PBOOLEAN AddressingReset, IN NDIS_HANDLE MiniportAdapterContext); typedef NDIS_STATUS (NTAPI *W_SEND_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext, IN PNDIS_PACKET Packet, IN UINT Flags); typedef NDIS_STATUS (NTAPI *WM_SEND_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_HANDLE NdisLinkHandle, IN PNDIS_WAN_PACKET Packet); typedef NDIS_STATUS (NTAPI *W_SET_INFORMATION_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_OID Oid, IN PVOID InformationBuffer, IN ULONG InformationBufferLength, OUT PULONG BytesRead, OUT PULONG BytesNeeded); typedef NDIS_STATUS (NTAPI *W_TRANSFER_DATA_HANDLER)( OUT PNDIS_PACKET Packet, OUT PUINT BytesTransferred, IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_HANDLE MiniportReceiveContext, IN UINT ByteOffset, IN UINT BytesToTransfer); typedef NDIS_STATUS (NTAPI *WM_TRANSFER_DATA_HANDLER)( VOID); /* NDIS structures available only to miniport drivers */ #define NDIS30_MINIPORT_CHARACTERISTICS_S \ UCHAR MajorNdisVersion; \ UCHAR MinorNdisVersion; \ UINT Reserved; \ W_CHECK_FOR_HANG_HANDLER CheckForHangHandler; \ W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler; \ W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler; \ W_HALT_HANDLER HaltHandler; \ W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler; \ W_INITIALIZE_HANDLER InitializeHandler; \ W_ISR_HANDLER ISRHandler; \ W_QUERY_INFORMATION_HANDLER QueryInformationHandler; \ W_RECONFIGURE_HANDLER ReconfigureHandler; \ W_RESET_HANDLER ResetHandler; \ W_SEND_HANDLER SendHandler; \ W_SET_INFORMATION_HANDLER SetInformationHandler; \ W_TRANSFER_DATA_HANDLER TransferDataHandler; typedef struct _NDIS30_MINIPORT_CHARACTERISTICS { NDIS30_MINIPORT_CHARACTERISTICS_S } NDIS30_MINIPORT_CHARACTERISTICS, *PSNDIS30_MINIPORT_CHARACTERISTICS; /* Extensions for NDIS 4.0 miniports */ typedef VOID (NTAPI *W_SEND_PACKETS_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext, IN PPNDIS_PACKET PacketArray, IN UINT NumberOfPackets); typedef VOID (NTAPI *W_RETURN_PACKET_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext, IN PNDIS_PACKET Packet); typedef VOID (NTAPI *W_ALLOCATE_COMPLETE_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext, IN PVOID VirtualAddress, IN PNDIS_PHYSICAL_ADDRESS PhysicalAddress, IN ULONG Length, IN PVOID Context); #ifdef __cplusplus #define NDIS40_MINIPORT_CHARACTERISTICS_S \ NDIS30_MINIPORT_CHARACTERISTICS Ndis30Chars; \ W_RETURN_PACKET_HANDLER ReturnPacketHandler; \ W_SEND_PACKETS_HANDLER SendPacketsHandler; \ W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler; #else /* !__cplusplus */ #define NDIS40_MINIPORT_CHARACTERISTICS_S \ NDIS30_MINIPORT_CHARACTERISTICS_S \ W_RETURN_PACKET_HANDLER ReturnPacketHandler; \ W_SEND_PACKETS_HANDLER SendPacketsHandler; \ W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler; #endif /* !__cplusplus */ typedef struct _NDIS40_MINIPORT_CHARACTERISTICS { NDIS40_MINIPORT_CHARACTERISTICS_S } NDIS40_MINIPORT_CHARACTERISTICS, *PNDIS40_MINIPORT_CHARACTERISTICS; /* Extensions for NDIS 5.0 miniports */ typedef NDIS_STATUS (NTAPI *W_CO_CREATE_VC_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_HANDLE NdisVcHandle, OUT PNDIS_HANDLE MiniportVcContext); typedef NDIS_STATUS (NTAPI *W_CO_DELETE_VC_HANDLER)( IN NDIS_HANDLE MiniportVcContext); typedef NDIS_STATUS (NTAPI *W_CO_ACTIVATE_VC_HANDLER)( IN NDIS_HANDLE MiniportVcContext, IN OUT PCO_CALL_PARAMETERS CallParameters); typedef NDIS_STATUS (NTAPI *W_CO_DEACTIVATE_VC_HANDLER)( IN NDIS_HANDLE MiniportVcContext); typedef VOID (NTAPI *W_CO_SEND_PACKETS_HANDLER)( IN NDIS_HANDLE MiniportVcContext, IN PPNDIS_PACKET PacketArray, IN UINT NumberOfPackets); typedef NDIS_STATUS (NTAPI *W_CO_REQUEST_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_HANDLE MiniportVcContext OPTIONAL, IN OUT PNDIS_REQUEST NdisRequest); #ifdef __cplusplus #define NDIS50_MINIPORT_CHARACTERISTICS_S \ NDIS40_MINIPORT_CHARACTERISTICS Ndis40Chars; \ W_CO_CREATE_VC_HANDLER CoCreateVcHandler; \ W_CO_DELETE_VC_HANDLER CoDeleteVcHandler; \ W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler; \ W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler; \ W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler; \ W_CO_REQUEST_HANDLER CoRequestHandler; #else /* !__cplusplus */ #define NDIS50_MINIPORT_CHARACTERISTICS_S \ NDIS40_MINIPORT_CHARACTERISTICS_S \ W_CO_CREATE_VC_HANDLER CoCreateVcHandler; \ W_CO_DELETE_VC_HANDLER CoDeleteVcHandler; \ W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler; \ W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler; \ W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler; \ W_CO_REQUEST_HANDLER CoRequestHandler; #endif /* !__cplusplus */ typedef struct _NDIS50_MINIPORT_CHARACTERISTICS { NDIS50_MINIPORT_CHARACTERISTICS_S } NDIS50_MINIPORT_CHARACTERISTICS, *PSNDIS50_MINIPORT_CHARACTERISTICS; /* Extensions for NDIS 5.1 miniports */ typedef VOID (NTAPI *W_CANCEL_SEND_PACKETS_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext, IN PVOID CancelId); typedef VOID (NTAPI *W_PNP_EVENT_NOTIFY_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_DEVICE_PNP_EVENT PnPEvent, IN PVOID InformationBuffer, IN ULONG InformationBufferLength); typedef VOID (NTAPI *W_MINIPORT_SHUTDOWN_HANDLER)( IN PVOID ShutdownContext); #ifdef __cplusplus #define NDIS51_MINIPORT_CHARACTERISTICS_S \ NDIS50_MINIPORT_CHARACTERISTICS Ndis50Chars; \ W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler; \ W_PNP_EVENT_NOTIFY_HANDLER PnPEventNotifyHandler; \ W_MINIPORT_SHUTDOWN_HANDLER AdapterShutdownHandler; #else #define NDIS51_MINIPORT_CHARACTERISTICS_S \ NDIS50_MINIPORT_CHARACTERISTICS_S \ W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler; \ W_PNP_EVENT_NOTIFY_HANDLER PnPEventNotifyHandler; \ W_MINIPORT_SHUTDOWN_HANDLER AdapterShutdownHandler; #endif typedef struct _NDIS51_MINIPORT_CHARACTERISTICS { NDIS51_MINIPORT_CHARACTERISTICS_S } NDIS51_MINIPORT_CHARACTERISTICS, *PSNDIS51_MINIPORT_CHARACTERISTICS; #if defined(NDIS51_MINIPORT) typedef struct _NDIS_MINIPORT_CHARACTERISTICS { NDIS51_MINIPORT_CHARACTERISTICS_S } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS; #elif defined(NDIS50_MINIPORT) typedef struct _NDIS_MINIPORT_CHARACTERISTICS { NDIS50_MINIPORT_CHARACTERISTICS_S } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS; #elif defined(NDIS40_MINIPORT) typedef struct _NDIS_MINIPORT_CHARACTERISTICS { NDIS40_MINIPORT_CHARACTERISTICS_S } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS; #else /* NDIS30 */ typedef struct _NDIS_MINIPORT_CHARACTERISTICS { NDIS30_MINIPORT_CHARACTERISTICS_S } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS; #endif typedef NDIS_STATUS (NTAPI *SEND_HANDLER)( IN NDIS_HANDLE MacBindingHandle, IN PNDIS_PACKET Packet); typedef NDIS_STATUS (NTAPI *TRANSFER_DATA_HANDLER)( IN NDIS_HANDLE MacBindingHandle, IN NDIS_HANDLE MacReceiveContext, IN UINT ByteOffset, IN UINT BytesToTransfer, OUT PNDIS_PACKET Packet, OUT PUINT BytesTransferred); typedef NDIS_STATUS (NTAPI *RESET_HANDLER)( IN NDIS_HANDLE MacBindingHandle); typedef NDIS_STATUS (NTAPI *REQUEST_HANDLER)( IN NDIS_HANDLE MacBindingHandle, IN PNDIS_REQUEST NdisRequest); /* Structures available only to full MAC drivers */ typedef BOOLEAN (NTAPI *PNDIS_INTERRUPT_SERVICE)( IN PVOID InterruptContext); typedef VOID (NTAPI *PNDIS_DEFERRED_PROCESSING)( IN PVOID SystemSpecific1, IN PVOID InterruptContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); typedef struct _NDIS_MINIPORT_BLOCK NDIS_MINIPORT_BLOCK, *PNDIS_MINIPORT_BLOCK; typedef struct _NDIS_PROTOCOL_BLOCK NDIS_PROTOCOL_BLOCK, *PNDIS_PROTOCOL_BLOCK; typedef struct _NDIS_OPEN_BLOCK NDIS_OPEN_BLOCK, *PNDIS_OPEN_BLOCK; typedef struct _NDIS_M_DRIVER_BLOCK NDIS_M_DRIVER_BLOCK, *PNDIS_M_DRIVER_BLOCK; typedef struct _NDIS_AF_LIST NDIS_AF_LIST, *PNDIS_AF_LIST; // // FIXME: Should be typedef struct _X_FILTER ETH_FILTER, *PETH_FILTER; // typedef PVOID ETH_FILTER, *PETH_FILTER; typedef struct _NDIS_MINIPORT_INTERRUPT { PKINTERRUPT InterruptObject; KSPIN_LOCK DpcCountLock; PVOID MiniportIdField; W_ISR_HANDLER MiniportIsr; W_HANDLE_INTERRUPT_HANDLER MiniportDpc; KDPC InterruptDpc; PNDIS_MINIPORT_BLOCK Miniport; UCHAR DpcCount; BOOLEAN Filler1; KEVENT DpcsCompletedEvent; BOOLEAN SharedInterrupt; BOOLEAN IsrRequested; } NDIS_MINIPORT_INTERRUPT, *PNDIS_MINIPORT_INTERRUPT; typedef struct _NDIS_MINIPORT_TIMER { KTIMER Timer; KDPC Dpc; PNDIS_TIMER_FUNCTION MiniportTimerFunction; PVOID MiniportTimerContext; PNDIS_MINIPORT_BLOCK Miniport; struct _NDIS_MINIPORT_TIMER *NextDeferredTimer; } NDIS_MINIPORT_TIMER, *PNDIS_MINIPORT_TIMER; typedef struct _NDIS_INTERRUPT { PKINTERRUPT InterruptObject; KSPIN_LOCK DpcCountLock; PNDIS_INTERRUPT_SERVICE MacIsr; PNDIS_DEFERRED_PROCESSING MacDpc; KDPC InterruptDpc; PVOID InterruptContext; UCHAR DpcCount; BOOLEAN Removing; KEVENT DpcsCompletedEvent; } NDIS_INTERRUPT, *PNDIS_INTERRUPT; typedef enum _NDIS_WORK_ITEM_TYPE { NdisWorkItemRequest, NdisWorkItemSend, NdisWorkItemReturnPackets, NdisWorkItemResetRequested, NdisWorkItemResetInProgress, NdisWorkItemHalt, NdisWorkItemSendLoopback, NdisWorkItemMiniportCallback, NdisMaxWorkItems } NDIS_WORK_ITEM_TYPE, *PNDIS_WORK_ITEM_TYPE; #define NUMBER_OF_WORK_ITEM_TYPES NdisMaxWorkItems #define NUMBER_OF_SINGLE_WORK_ITEMS 6 typedef struct _NDIS_MINIPORT_WORK_ITEM { SINGLE_LIST_ENTRY Link; NDIS_WORK_ITEM_TYPE WorkItemType; PVOID WorkItemContext; } NDIS_MINIPORT_WORK_ITEM, *PNDIS_MINIPORT_WORK_ITEM; struct _NDIS_WORK_ITEM; typedef VOID (*NDIS_PROC)(struct _NDIS_WORK_ITEM *, PVOID); typedef struct _NDIS_WORK_ITEM { PVOID Context; NDIS_PROC Routine; UCHAR WrapperReserved[8*sizeof(PVOID)]; } NDIS_WORK_ITEM, *PNDIS_WORK_ITEM; typedef struct _NDIS_BIND_PATHS { UINT Number; NDIS_STRING Paths[1]; } NDIS_BIND_PATHS, *PNDIS_BIND_PATHS; typedef VOID (NTAPI *ETH_RCV_COMPLETE_HANDLER)( IN PETH_FILTER Filter); typedef VOID (NTAPI *ETH_RCV_INDICATE_HANDLER)( IN PETH_FILTER Filter, IN NDIS_HANDLE MacReceiveContext, IN PCHAR Address, IN PVOID HeaderBuffer, IN UINT HeaderBufferSize, IN PVOID LookaheadBuffer, IN UINT LookaheadBufferSize, IN UINT PacketSize); typedef VOID (NTAPI *FDDI_RCV_COMPLETE_HANDLER)( IN PFDDI_FILTER Filter); typedef VOID (NTAPI *FDDI_RCV_INDICATE_HANDLER)( IN PFDDI_FILTER Filter, IN NDIS_HANDLE MacReceiveContext, IN PCHAR Address, IN UINT AddressLength, IN PVOID HeaderBuffer, IN UINT HeaderBufferSize, IN PVOID LookaheadBuffer, IN UINT LookaheadBufferSize, IN UINT PacketSize); typedef VOID (NTAPI *FILTER_PACKET_INDICATION_HANDLER)( IN NDIS_HANDLE Miniport, IN PPNDIS_PACKET PacketArray, IN UINT NumberOfPackets); typedef VOID (NTAPI *TR_RCV_COMPLETE_HANDLER)( IN PTR_FILTER Filter); typedef VOID (NTAPI *TR_RCV_INDICATE_HANDLER)( IN PTR_FILTER Filter, IN NDIS_HANDLE MacReceiveContext, IN PVOID HeaderBuffer, IN UINT HeaderBufferSize, IN PVOID LookaheadBuffer, IN UINT LookaheadBufferSize, IN UINT PacketSize); typedef VOID (NTAPI *WAN_RCV_COMPLETE_HANDLER)( IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_HANDLE NdisLinkContext); typedef VOID (NTAPI *WAN_RCV_HANDLER)( OUT PNDIS_STATUS Status, IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_HANDLE NdisLinkContext, IN PUCHAR Packet, IN ULONG PacketSize); typedef VOID (FASTCALL *NDIS_M_DEQUEUE_WORK_ITEM)( IN PNDIS_MINIPORT_BLOCK Miniport, IN NDIS_WORK_ITEM_TYPE WorkItemType, OUT PVOID *WorkItemContext); typedef NDIS_STATUS (FASTCALL *NDIS_M_QUEUE_NEW_WORK_ITEM)( IN PNDIS_MINIPORT_BLOCK Miniport, IN NDIS_WORK_ITEM_TYPE WorkItemType, IN PVOID WorkItemContext); typedef NDIS_STATUS (FASTCALL *NDIS_M_QUEUE_WORK_ITEM)( IN PNDIS_MINIPORT_BLOCK Miniport, IN NDIS_WORK_ITEM_TYPE WorkItemType, IN PVOID WorkItemContext); typedef VOID (NTAPI *NDIS_M_REQ_COMPLETE_HANDLER)( IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_STATUS Status); typedef VOID (NTAPI *NDIS_M_RESET_COMPLETE_HANDLER)( IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_STATUS Status, IN BOOLEAN AddressingReset); typedef VOID (NTAPI *NDIS_M_SEND_COMPLETE_HANDLER)( IN NDIS_HANDLE MiniportAdapterHandle, IN PNDIS_PACKET Packet, IN NDIS_STATUS Status); typedef VOID (NTAPI *NDIS_M_SEND_RESOURCES_HANDLER)( IN NDIS_HANDLE MiniportAdapterHandle); typedef BOOLEAN (FASTCALL *NDIS_M_START_SENDS)( IN PNDIS_MINIPORT_BLOCK Miniport); typedef VOID (NTAPI *NDIS_M_STATUS_HANDLER)( IN NDIS_HANDLE MiniportHandle, IN NDIS_STATUS GeneralStatus, IN PVOID StatusBuffer, IN UINT StatusBufferSize); typedef VOID (NTAPI *NDIS_M_STS_COMPLETE_HANDLER)( IN NDIS_HANDLE MiniportAdapterHandle); typedef VOID (NTAPI *NDIS_M_TD_COMPLETE_HANDLER)( IN NDIS_HANDLE MiniportAdapterHandle, IN PNDIS_PACKET Packet, IN NDIS_STATUS Status, IN UINT BytesTransferred); typedef VOID (NTAPI *NDIS_WM_SEND_COMPLETE_HANDLER)( IN NDIS_HANDLE MiniportAdapterHandle, IN PVOID Packet, IN NDIS_STATUS Status); #if ARCNET #define ARC_SEND_BUFFERS 8 #define ARC_HEADER_SIZE 4 typedef struct _NDIS_ARC_BUF { NDIS_HANDLE ArcnetBufferPool; PUCHAR ArcnetLookaheadBuffer; UINT NumFree; ARC_BUFFER_LIST ArcnetBuffers[ARC_SEND_BUFFERS]; } NDIS_ARC_BUF, *PNDIS_ARC_BUF; #endif /* ARCNET */ typedef struct _NDIS_LOG { PNDIS_MINIPORT_BLOCK Miniport; KSPIN_LOCK LogLock; PIRP Irp; UINT TotalSize; UINT CurrentSize; UINT InPtr; UINT OutPtr; UCHAR LogBuf[1]; } NDIS_LOG, *PNDIS_LOG; #if ARCNET #define FILTERDBS_ARCNET_S \ PARC_FILTER ArcDB; #else /* !ARCNET */ #define FILTERDBS_ARCNET_S \ PVOID XXXDB; #endif /* !ARCNET */ #define FILTERDBS_S \ _ANONYMOUS_UNION union { \ PETH_FILTER EthDB; \ PNULL_FILTER NullDB; \ } DUMMYUNIONNAME; \ PTR_FILTER TrDB; \ PFDDI_FILTER FddiDB; \ FILTERDBS_ARCNET_S typedef struct _FILTERDBS { FILTERDBS_S } FILTERDBS, *PFILTERDBS; struct _NDIS_MINIPORT_BLOCK { PVOID Signature; PNDIS_MINIPORT_BLOCK NextMiniport; PNDIS_M_DRIVER_BLOCK DriverHandle; NDIS_HANDLE MiniportAdapterContext; UNICODE_STRING MiniportName; PNDIS_BIND_PATHS BindPaths; NDIS_HANDLE OpenQueue; REFERENCE ShortRef; NDIS_HANDLE DeviceContext; UCHAR Padding1; UCHAR LockAcquired; UCHAR PmodeOpens; UCHAR AssignedProcessor; KSPIN_LOCK Lock; PNDIS_REQUEST MediaRequest; PNDIS_MINIPORT_INTERRUPT Interrupt; ULONG Flags; ULONG PnPFlags; LIST_ENTRY PacketList; PNDIS_PACKET FirstPendingPacket; PNDIS_PACKET ReturnPacketsQueue; ULONG RequestBuffer; PVOID SetMCastBuffer; PNDIS_MINIPORT_BLOCK PrimaryMiniport; PVOID WrapperContext; PVOID BusDataContext; ULONG PnPCapabilities; PCM_RESOURCE_LIST Resources; NDIS_TIMER WakeUpDpcTimer; UNICODE_STRING BaseName; UNICODE_STRING SymbolicLinkName; ULONG CheckForHangSeconds; USHORT CFHangTicks; USHORT CFHangCurrentTick; NDIS_STATUS ResetStatus; NDIS_HANDLE ResetOpen; FILTERDBS_S FILTER_PACKET_INDICATION_HANDLER PacketIndicateHandler; NDIS_M_SEND_COMPLETE_HANDLER SendCompleteHandler; NDIS_M_SEND_RESOURCES_HANDLER SendResourcesHandler; NDIS_M_RESET_COMPLETE_HANDLER ResetCompleteHandler; NDIS_MEDIUM MediaType; ULONG BusNumber; NDIS_INTERFACE_TYPE BusType; NDIS_INTERFACE_TYPE AdapterType; PDEVICE_OBJECT DeviceObject; PDEVICE_OBJECT PhysicalDeviceObject; PDEVICE_OBJECT NextDeviceObject; PMAP_REGISTER_ENTRY MapRegisters; PNDIS_AF_LIST CallMgrAfList; PVOID MiniportThread; PVOID SetInfoBuf; USHORT SetInfoBufLen; USHORT MaxSendPackets; NDIS_STATUS FakeStatus; PVOID LockHandler; PUNICODE_STRING pAdapterInstanceName; PNDIS_MINIPORT_TIMER TimerQueue; UINT MacOptions; PNDIS_REQUEST PendingRequest; UINT MaximumLongAddresses; UINT MaximumShortAddresses; UINT CurrentLookahead; UINT MaximumLookahead; W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler; W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler; W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler; W_SEND_PACKETS_HANDLER SendPacketsHandler; NDIS_M_START_SENDS DeferredSendHandler; ETH_RCV_INDICATE_HANDLER EthRxIndicateHandler; TR_RCV_INDICATE_HANDLER TrRxIndicateHandler; FDDI_RCV_INDICATE_HANDLER FddiRxIndicateHandler; ETH_RCV_COMPLETE_HANDLER EthRxCompleteHandler; TR_RCV_COMPLETE_HANDLER TrRxCompleteHandler; FDDI_RCV_COMPLETE_HANDLER FddiRxCompleteHandler; NDIS_M_STATUS_HANDLER StatusHandler; NDIS_M_STS_COMPLETE_HANDLER StatusCompleteHandler; NDIS_M_TD_COMPLETE_HANDLER TDCompleteHandler; NDIS_M_REQ_COMPLETE_HANDLER QueryCompleteHandler; NDIS_M_REQ_COMPLETE_HANDLER SetCompleteHandler; NDIS_WM_SEND_COMPLETE_HANDLER WanSendCompleteHandler; WAN_RCV_HANDLER WanRcvHandler; WAN_RCV_COMPLETE_HANDLER WanRcvCompleteHandler; #if defined(NDIS_WRAPPER) PNDIS_MINIPORT_BLOCK NextGlobalMiniport; SINGLE_LIST_ENTRY WorkQueue[NUMBER_OF_WORK_ITEM_TYPES]; SINGLE_LIST_ENTRY SingleWorkItems[NUMBER_OF_SINGLE_WORK_ITEMS]; UCHAR SendFlags; UCHAR TrResetRing; UCHAR ArcnetAddress; UCHAR XState; _ANONYMOUS_UNION union { #if ARCNET PNDIS_ARC_BUF ArcBuf; #endif PVOID BusInterface; } DUMMYUNIONNAME; PNDIS_LOG Log; ULONG SlotNumber; PCM_RESOURCE_LIST AllocatedResources; PCM_RESOURCE_LIST AllocatedResourcesTranslated; SINGLE_LIST_ENTRY PatternList; NDIS_PNP_CAPABILITIES PMCapabilities; DEVICE_CAPABILITIES DeviceCaps; ULONG WakeUpEnable; DEVICE_POWER_STATE CurrentDevicePowerState; PIRP pIrpWaitWake; SYSTEM_POWER_STATE WaitWakeSystemState; LARGE_INTEGER VcIndex; KSPIN_LOCK VcCountLock; LIST_ENTRY WmiEnabledVcs; PNDIS_GUID pNdisGuidMap; PNDIS_GUID pCustomGuidMap; USHORT VcCount; USHORT cNdisGuidMap; USHORT cCustomGuidMap; USHORT CurrentMapRegister; PKEVENT AllocationEvent; USHORT BaseMapRegistersNeeded; USHORT SGMapRegistersNeeded; ULONG MaximumPhysicalMapping; NDIS_TIMER MediaDisconnectTimer; USHORT MediaDisconnectTimeOut; USHORT InstanceNumber; NDIS_EVENT OpenReadyEvent; NDIS_PNP_DEVICE_STATE PnPDeviceState; NDIS_PNP_DEVICE_STATE OldPnPDeviceState; PGET_SET_DEVICE_DATA SetBusData; PGET_SET_DEVICE_DATA GetBusData; KDPC DeferredDpc; #if 0 /* FIXME: */ NDIS_STATS NdisStats; #else ULONG NdisStats; #endif PNDIS_PACKET IndicatedPacket[MAXIMUM_PROCESSORS]; PKEVENT RemoveReadyEvent; PKEVENT AllOpensClosedEvent; PKEVENT AllRequestsCompletedEvent; ULONG InitTimeMs; NDIS_MINIPORT_WORK_ITEM WorkItemBuffer[NUMBER_OF_SINGLE_WORK_ITEMS]; PDMA_ADAPTER SystemAdapterObject; ULONG DriverVerifyFlags; POID_LIST OidList; USHORT InternalResetCount; USHORT MiniportResetCount; USHORT MediaSenseConnectCount; USHORT MediaSenseDisconnectCount; PNDIS_PACKET *xPackets; ULONG UserModeOpenReferences; _ANONYMOUS_UNION union { PVOID SavedSendHandler; PVOID SavedWanSendHandler; } DUMMYUNIONNAME2; PVOID SavedSendPacketsHandler; PVOID SavedCancelSendPacketsHandler; W_SEND_PACKETS_HANDLER WSendPacketsHandler; ULONG MiniportAttributes; PDMA_ADAPTER SavedSystemAdapterObject; USHORT NumOpens; USHORT CFHangXTicks; ULONG RequestCount; ULONG IndicatedPacketsCount; ULONG PhysicalMediumType; PNDIS_REQUEST LastRequest; LONG DmaAdapterRefCount; PVOID FakeMac; ULONG LockDbg; ULONG LockDbgX; PVOID LockThread; ULONG InfoFlags; KSPIN_LOCK TimerQueueLock; PKEVENT ResetCompletedEvent; PKEVENT QueuedBindingCompletedEvent; PKEVENT DmaResourcesReleasedEvent; FILTER_PACKET_INDICATION_HANDLER SavedPacketIndicateHandler; ULONG RegisteredInterrupts; PNPAGED_LOOKASIDE_LIST SGListLookasideList; ULONG ScatterGatherListSize; #endif /* _NDIS_ */ }; /* Handler prototypes for NDIS_OPEN_BLOCK */ typedef NDIS_STATUS (NTAPI *WAN_SEND_HANDLER)( IN NDIS_HANDLE MacBindingHandle, IN NDIS_HANDLE LinkHandle, IN PVOID Packet); /* NDIS 4.0 extension */ typedef VOID (NTAPI *SEND_PACKETS_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext, IN PPNDIS_PACKET PacketArray, IN UINT NumberOfPackets); #if defined(NDIS_WRAPPER) #define NDIS_COMMON_OPEN_BLOCK_WRAPPER_S \ ULONG Flags; \ ULONG References; \ KSPIN_LOCK SpinLock; \ NDIS_HANDLE FilterHandle; \ ULONG ProtocolOptions; \ USHORT CurrentLookahead; \ USHORT ConnectDampTicks; \ USHORT DisconnectDampTicks; \ W_SEND_HANDLER WSendHandler; \ W_TRANSFER_DATA_HANDLER WTransferDataHandler; \ W_SEND_PACKETS_HANDLER WSendPacketsHandler; \ W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler; \ ULONG WakeUpEnable; \ PKEVENT CloseCompleteEvent; \ QUEUED_CLOSE QC; \ ULONG AfReferences; \ PNDIS_OPEN_BLOCK NextGlobalOpen; #else #define NDIS_COMMON_OPEN_BLOCK_WRAPPER_S #endif #define NDIS_COMMON_OPEN_BLOCK_S \ PVOID MacHandle; \ NDIS_HANDLE BindingHandle; \ PNDIS_MINIPORT_BLOCK MiniportHandle; \ PNDIS_PROTOCOL_BLOCK ProtocolHandle; \ NDIS_HANDLE ProtocolBindingContext; \ PNDIS_OPEN_BLOCK MiniportNextOpen; \ PNDIS_OPEN_BLOCK ProtocolNextOpen; \ NDIS_HANDLE MiniportAdapterContext; \ BOOLEAN Reserved1; \ BOOLEAN Reserved2; \ BOOLEAN Reserved3; \ BOOLEAN Reserved4; \ PNDIS_STRING BindDeviceName; \ KSPIN_LOCK Reserved5; \ PNDIS_STRING RootDeviceName; \ _ANONYMOUS_UNION union { \ SEND_HANDLER SendHandler; \ WAN_SEND_HANDLER WanSendHandler; \ } DUMMYUNIONNAME; \ TRANSFER_DATA_HANDLER TransferDataHandler; \ SEND_COMPLETE_HANDLER SendCompleteHandler; \ TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler; \ RECEIVE_HANDLER ReceiveHandler; \ RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler; \ WAN_RECEIVE_HANDLER WanReceiveHandler; \ REQUEST_COMPLETE_HANDLER RequestCompleteHandler; \ RECEIVE_PACKET_HANDLER ReceivePacketHandler; \ SEND_PACKETS_HANDLER SendPacketsHandler; \ RESET_HANDLER ResetHandler; \ REQUEST_HANDLER RequestHandler; \ RESET_COMPLETE_HANDLER ResetCompleteHandler; \ STATUS_HANDLER StatusHandler; \ STATUS_COMPLETE_HANDLER StatusCompleteHandler; \ NDIS_COMMON_OPEN_BLOCK_WRAPPER_S typedef struct _NDIS_COMMON_OPEN_BLOCK { NDIS_COMMON_OPEN_BLOCK_S } NDIS_COMMON_OPEN_BLOCK; struct _NDIS_OPEN_BLOCK { #ifdef __cplusplus NDIS_COMMON_OPEN_BLOCK NdisCommonOpenBlock; #else NDIS_COMMON_OPEN_BLOCK_S #endif }; /* Routines for NDIS miniport drivers */ NDISAPI VOID NTAPI NdisInitializeWrapper( OUT PNDIS_HANDLE NdisWrapperHandle, IN PVOID SystemSpecific1, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); NDISAPI NDIS_STATUS NTAPI NdisMAllocateMapRegisters( IN NDIS_HANDLE MiniportAdapterHandle, IN UINT DmaChannel, IN NDIS_DMA_SIZE DmaSize, IN ULONG PhysicalMapRegistersNeeded, IN ULONG MaximumPhysicalMapping); /* * VOID * NdisMArcIndicateReceive( * IN NDIS_HANDLE MiniportAdapterHandle, * IN PUCHAR HeaderBuffer, * IN PUCHAR DataBuffer, * IN UINT Length); */ #define NdisMArcIndicateReceive(MiniportAdapterHandle, \ HeaderBuffer, \ DataBuffer, \ Length) \ { \ ArcFilterDprIndicateReceive( \ (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->ArcDB), \ (HeaderBuffer), \ (DataBuffer), \ (Length)); \ } /* * VOID * NdisMArcIndicateReceiveComplete( * IN NDIS_HANDLE MiniportAdapterHandle); */ #define NdisMArcIndicateReceiveComplete(MiniportAdapterHandle) \ { \ if (((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->EthDB) \ { \ NdisMEthIndicateReceiveComplete(_H); \ } \ \ ArcFilterDprIndicateReceiveComplete( \ ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->ArcDB); \ } NDISAPI VOID NTAPI NdisMCloseLog( IN NDIS_HANDLE LogHandle); NDISAPI NDIS_STATUS NTAPI NdisMCreateLog( IN NDIS_HANDLE MiniportAdapterHandle, IN UINT Size, OUT PNDIS_HANDLE LogHandle); NDISAPI VOID NTAPI NdisMDeregisterAdapterShutdownHandler( IN NDIS_HANDLE MiniportHandle); NDISAPI VOID NTAPI NdisMDeregisterInterrupt( IN PNDIS_MINIPORT_INTERRUPT Interrupt); NDISAPI VOID NTAPI NdisMDeregisterIoPortRange( IN NDIS_HANDLE MiniportAdapterHandle, IN UINT InitialPort, IN UINT NumberOfPorts, IN PVOID PortOffset); /* * VOID * NdisMEthIndicateReceive( * IN NDIS_HANDLE MiniportAdapterHandle, * IN NDIS_HANDLE MiniportReceiveContext, * IN PVOID HeaderBuffer, * IN UINT HeaderBufferSize, * IN PVOID LookaheadBuffer, * IN UINT LookaheadBufferSize, * IN UINT PacketSize); */ #define NdisMEthIndicateReceive(MiniportAdapterHandle, \ MiniportReceiveContext, \ HeaderBuffer, \ HeaderBufferSize, \ LookaheadBuffer, \ LookaheadBufferSize, \ PacketSize) \ { \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxIndicateHandler)( \ ((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthDB, \ (MiniportReceiveContext), \ (HeaderBuffer), \ (HeaderBuffer), \ (HeaderBufferSize), \ (LookaheadBuffer), \ (LookaheadBufferSize), \ (PacketSize)); \ } /* * VOID * NdisMEthIndicateReceiveComplete( * IN NDIS_HANDLE MiniportAdapterHandle); */ #define NdisMEthIndicateReceiveComplete(MiniportAdapterHandle) \ { \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxCompleteHandler)( \ ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->EthDB); \ } /* * VOID * NdisMFddiIndicateReceive( * IN NDIS_HANDLE MiniportAdapterHandle, * IN NDIS_HANDLE MiniportReceiveContext, * IN PVOID HeaderBuffer, * IN UINT HeaderBufferSize, * IN PVOID LookaheadBuffer, * IN UINT LookaheadBufferSize, * IN UINT PacketSize); */ #define NdisMFddiIndicateReceive(MiniportAdapterHandle, \ MiniportReceiveContext, \ HeaderBuffer, \ HeaderBufferSize, \ LookaheadBuffer, \ LookaheadBufferSize, \ PacketSize) \ { \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxIndicateHandler)( \ (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiDB), \ (MiniportReceiveContext), \ (PUCHAR)(HeaderBuffer) + 1, \ (((*(PUCHAR*)(HeaderBuffer)) & 0x40) ? \ FDDI_LENGTH_OF_LONG_ADDRESS : \ FDDI_LENGTH_OF_SHORT_ADDRESS), \ (HeaderBuffer), \ (HeaderBufferSize), \ (LookaheadBuffer), \ (LookaheadBufferSize), \ (PacketSize)); \ } /* * VOID * NdisMFddiIndicateReceiveComplete( * IN NDIS_HANDLE MiniportAdapterHandle); */ #define NdisMFddiIndicateReceiveComplete(MiniportAdapterHandle) \ { \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxCompleteHandler)( \ ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FddiDB); \ } NDISAPI VOID NTAPI NdisMFlushLog( IN NDIS_HANDLE LogHandle); NDISAPI VOID NTAPI NdisMFreeMapRegisters( IN NDIS_HANDLE MiniportAdapterHandle); /* * VOID * EXPORT * NdisMIndicateReceivePacket( * IN NDIS_HANDLE MiniportAdapterHandle, * IN PPNDIS_PACKET ReceivePackets, * IN UINT NumberOfPackets); */ #define NdisMIndicateReceivePacket(MiniportAdapterHandle, \ ReceivePackets, NumberOfPackets) \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->PacketIndicateHandler)( \ MiniportAdapterHandle, ReceivePackets, NumberOfPackets) /* * VOID * NdisMIndicateStatus( * IN NDIS_HANDLE MiniportAdapterHandle, * IN NDIS_STATUS GeneralStatus, * IN PVOID StatusBuffer, * IN UINT StatusBufferSize); */ #define NdisMIndicateStatus(MiniportAdapterHandle, \ GeneralStatus, StatusBuffer, StatusBufferSize) \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->StatusHandler)( \ MiniportAdapterHandle, GeneralStatus, StatusBuffer, StatusBufferSize) /* * VOID * NdisMIndicateStatusComplete( * IN NDIS_HANDLE MiniportAdapterHandle); */ #define NdisMIndicateStatusComplete(MiniportAdapterHandle) \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->StatusCompleteHandler)( \ MiniportAdapterHandle) /* * VOID * NdisMInitializeWrapper( * OUT PNDIS_HANDLE NdisWrapperHandle, * IN PVOID SystemSpecific1, * IN PVOID SystemSpecific2, * IN PVOID SystemSpecific3); */ #define NdisMInitializeWrapper(NdisWrapperHandle, \ SystemSpecific1, \ SystemSpecific2, \ SystemSpecific3) \ NdisInitializeWrapper((NdisWrapperHandle), \ (SystemSpecific1), \ (SystemSpecific2), \ (SystemSpecific3)) NDISAPI NDIS_STATUS NTAPI NdisMMapIoSpace( OUT PVOID *VirtualAddress, IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_PHYSICAL_ADDRESS PhysicalAddress, IN UINT Length); /* * VOID * NdisMQueryInformationComplete( * IN NDIS_HANDLE MiniportAdapterHandle, * IN NDIS_STATUS Status); */ #define NdisMQueryInformationComplete(MiniportAdapterHandle, Status) \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->QueryCompleteHandler)(MiniportAdapterHandle, Status) NDISAPI VOID NTAPI NdisMRegisterAdapterShutdownHandler( IN NDIS_HANDLE MiniportHandle, IN PVOID ShutdownContext, IN ADAPTER_SHUTDOWN_HANDLER ShutdownHandler); NDISAPI NDIS_STATUS NTAPI NdisMRegisterInterrupt( OUT PNDIS_MINIPORT_INTERRUPT Interrupt, IN NDIS_HANDLE MiniportAdapterHandle, IN UINT InterruptVector, IN UINT InterruptLevel, IN BOOLEAN RequestIsr, IN BOOLEAN SharedInterrupt, IN NDIS_INTERRUPT_MODE InterruptMode); NDISAPI NDIS_STATUS NTAPI NdisMRegisterIoPortRange( OUT PVOID *PortOffset, IN NDIS_HANDLE MiniportAdapterHandle, IN UINT InitialPort, IN UINT NumberOfPorts); NDISAPI NDIS_STATUS NTAPI NdisMRegisterMiniport( IN NDIS_HANDLE NdisWrapperHandle, IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics, IN UINT CharacteristicsLength); NDISAPI VOID NTAPI NdisMSetTimer( IN PNDIS_MINIPORT_TIMER Timer, IN UINT MillisecondsToDelay); NDISAPI VOID NTAPI NdisMInitializeTimer( IN OUT PNDIS_MINIPORT_TIMER Timer, IN NDIS_HANDLE MiniportAdapterHandle, IN PNDIS_TIMER_FUNCTION TimerFunction, IN PVOID FunctionContext); NDISAPI VOID NTAPI NdisMSetPeriodicTimer( IN PNDIS_MINIPORT_TIMER Timer, IN UINT MillisecondPeriod); NDISAPI VOID NTAPI NdisMCancelTimer( IN PNDIS_MINIPORT_TIMER Timer, OUT PBOOLEAN TimerCancelled); #if !defined(NDIS_WRAPPER) /* * VOID * NdisMResetComplete( * IN NDIS_HANDLE MiniportAdapterHandle, * IN NDIS_STATUS Status, * IN BOOLEAN AddressingReset); */ #define NdisMResetComplete(MiniportAdapterHandle, \ Status, \ AddressingReset) \ { \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->ResetCompleteHandler)( \ MiniportAdapterHandle, Status, AddressingReset); \ } /* * VOID * NdisMSendComplete( * IN NDIS_HANDLE MiniportAdapterHandle, * IN PNDIS_PACKET Packet, * IN NDIS_STATUS Status); */ #define NdisMSendComplete(MiniportAdapterHandle, \ Packet, \ Status) \ { \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendCompleteHandler)( \ MiniportAdapterHandle, Packet, Status); \ } /* * VOID * NdisMSendResourcesAvailable( * IN NDIS_HANDLE MiniportAdapterHandle); */ #define NdisMSendResourcesAvailable(MiniportAdapterHandle) \ { \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendResourcesHandler)( \ MiniportAdapterHandle); \ } /* * VOID * NdisMTransferDataComplete( * IN NDIS_HANDLE MiniportAdapterHandle, * IN PNDIS_PACKET Packet, * IN NDIS_STATUS Status, * IN UINT BytesTransferred); */ #define NdisMTransferDataComplete(MiniportAdapterHandle, \ Packet, \ Status, \ BytesTransferred) \ { \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TDCompleteHandler)( \ MiniportAdapterHandle, Packet, Status, BytesTransferred) \ } #endif /* !_NDIS_ */ /* * VOID * NdisMSetAttributes( * IN NDIS_HANDLE MiniportAdapterHandle, * IN NDIS_HANDLE MiniportAdapterContext, * IN BOOLEAN BusMaster, * IN NDIS_INTERFACE_TYPE AdapterType); */ #define NdisMSetAttributes(MiniportAdapterHandle, \ MiniportAdapterContext, \ BusMaster, \ AdapterType) \ NdisMSetAttributesEx(MiniportAdapterHandle, \ MiniportAdapterContext, \ 0, \ (BusMaster) ? NDIS_ATTRIBUTE_BUS_MASTER : 0, \ AdapterType) NDISAPI VOID NTAPI NdisMSetAttributesEx( IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_HANDLE MiniportAdapterContext, IN UINT CheckForHangTimeInSeconds OPTIONAL, IN ULONG AttributeFlags, IN NDIS_INTERFACE_TYPE AdapterType); /* * VOID * NdisMSetInformationComplete( * IN NDIS_HANDLE MiniportAdapterHandle, * IN NDIS_STATUS Status); */ #define NdisMSetInformationComplete(MiniportAdapterHandle, \ Status) \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SetCompleteHandler)( \ MiniportAdapterHandle, Status) NDISAPI VOID NTAPI NdisMSleep( IN ULONG MicrosecondsToSleep); NDISAPI BOOLEAN NTAPI NdisMSynchronizeWithInterrupt( IN PNDIS_MINIPORT_INTERRUPT Interrupt, IN PVOID SynchronizeFunction, IN PVOID SynchronizeContext); /* * VOID * NdisMTrIndicateReceive( * IN NDIS_HANDLE MiniportAdapterHandle, * IN NDIS_HANDLE MiniportReceiveContext, * IN PVOID HeaderBuffer, * IN UINT HeaderBufferSize, * IN PVOID LookaheadBuffer, * IN UINT LookaheadBufferSize, * IN UINT PacketSize); */ #define NdisMTrIndicateReceive(MiniportAdapterHandle, \ MiniportReceiveContext, \ HeaderBuffer, \ HeaderBufferSize, \ LookaheadBuffer, \ LookaheadBufferSize, \ PacketSize) \ { \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxIndicateHandler)( \ (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrDB), \ (MiniportReceiveContext), \ (HeaderBuffer), \ (HeaderBuffer), \ (HeaderBufferSize), \ (LookaheadBuffer), \ (LookaheadBufferSize), \ (PacketSize)); \ } /* * VOID * NdisMTrIndicateReceiveComplete( * IN NDIS_HANDLE MiniportAdapterHandle); */ #define NdisMTrIndicateReceiveComplete(MiniportAdapterHandle) \ { \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxCompleteHandler)( \ ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->TrDB); \ } NDISAPI NDIS_STATUS NTAPI NdisMWriteLogData( IN NDIS_HANDLE LogHandle, IN PVOID LogBuffer, IN UINT LogBufferSize); NDISAPI VOID NTAPI NdisMQueryAdapterResources( OUT PNDIS_STATUS Status, IN NDIS_HANDLE WrapperConfigurationContext, OUT PNDIS_RESOURCE_LIST ResourceList, IN OUT PUINT BufferSize); NDISAPI VOID NTAPI NdisTerminateWrapper( IN NDIS_HANDLE NdisWrapperHandle, IN PVOID SystemSpecific); NDISAPI VOID NTAPI NdisMUnmapIoSpace( IN NDIS_HANDLE MiniportAdapterHandle, IN PVOID VirtualAddress, IN UINT Length); /* Event functions */ NDISAPI VOID NTAPI NdisInitializeEvent( IN PNDIS_EVENT Event); NDISAPI VOID NTAPI NdisSetEvent( IN PNDIS_EVENT Event); NDISAPI VOID NTAPI NdisResetEvent( IN PNDIS_EVENT Event); NDISAPI BOOLEAN NTAPI NdisWaitEvent( IN PNDIS_EVENT Event, IN UINT Timeout); /* NDIS intermediate miniport structures */ typedef VOID (NTAPI *W_MINIPORT_CALLBACK)( IN NDIS_HANDLE MiniportAdapterContext, IN PVOID CallbackContext); /* Routines for intermediate miniport drivers */ NDISAPI NDIS_STATUS NTAPI NdisIMDeInitializeDeviceInstance( IN NDIS_HANDLE NdisMiniportHandle); /* * NDIS_STATUS * NdisIMInitializeDeviceInstance( * IN NDIS_HANDLE DriverHandle, * IN PNDIS_STRING DeviceInstance); */ #define NdisIMInitializeDeviceInstance(DriverHandle, DeviceInstance) \ NdisIMInitializeDeviceInstanceEx(DriverHandle, DeviceInstance, NULL) NDISAPI NDIS_STATUS NTAPI NdisIMRegisterLayeredMiniport( IN NDIS_HANDLE NdisWrapperHandle, IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics, IN UINT CharacteristicsLength, OUT PNDIS_HANDLE DriverHandle); /* Functions obsoleted by NDIS 5.0 */ NDISAPI VOID NTAPI NdisFreeDmaChannel( IN PNDIS_HANDLE NdisDmaHandle); NDISAPI VOID NTAPI NdisSetupDmaTransfer( OUT PNDIS_STATUS Status, IN PNDIS_HANDLE NdisDmaHandle, IN PNDIS_BUFFER Buffer, IN ULONG Offset, IN ULONG Length, IN BOOLEAN WriteToDevice); NDISAPI NTSTATUS NTAPI NdisUpcaseUnicodeString( OUT PUNICODE_STRING DestinationString, IN PUNICODE_STRING SourceString); /* Routines for NDIS protocol drivers */ NDISAPI VOID NTAPI NdisRequest( OUT PNDIS_STATUS Status, IN NDIS_HANDLE NdisBindingHandle, IN PNDIS_REQUEST NdisRequest); NDISAPI VOID NTAPI NdisReset( OUT PNDIS_STATUS Status, IN NDIS_HANDLE NdisBindingHandle); NDISAPI VOID NTAPI NdisSend( OUT PNDIS_STATUS Status, IN NDIS_HANDLE NdisBindingHandle, IN PNDIS_PACKET Packet); NDISAPI VOID NTAPI NdisSendPackets( IN NDIS_HANDLE NdisBindingHandle, IN PPNDIS_PACKET PacketArray, IN UINT NumberOfPackets); NDISAPI VOID NTAPI NdisTransferData( OUT PNDIS_STATUS Status, IN NDIS_HANDLE NdisBindingHandle, IN NDIS_HANDLE MacReceiveContext, IN UINT ByteOffset, IN UINT BytesToTransfer, IN OUT PNDIS_PACKET Packet, OUT PUINT BytesTransferred); NDISAPI VOID NTAPI NdisCloseAdapter( OUT PNDIS_STATUS Status, IN NDIS_HANDLE NdisBindingHandle); NDISAPI VOID NTAPI NdisCompleteBindAdapter( IN NDIS_HANDLE BindAdapterContext, IN NDIS_STATUS Status, IN NDIS_STATUS OpenStatus); NDISAPI VOID NTAPI NdisCompleteUnbindAdapter( IN NDIS_HANDLE UnbindAdapterContext, IN NDIS_STATUS Status); NDISAPI VOID NTAPI NdisDeregisterProtocol( OUT PNDIS_STATUS Status, IN NDIS_HANDLE NdisProtocolHandle); NDISAPI VOID NTAPI NdisOpenAdapter( OUT PNDIS_STATUS Status, OUT PNDIS_STATUS OpenErrorStatus, OUT PNDIS_HANDLE NdisBindingHandle, OUT PUINT SelectedMediumIndex, IN PNDIS_MEDIUM MediumArray, IN UINT MediumArraySize, IN NDIS_HANDLE NdisProtocolHandle, IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_STRING AdapterName, IN UINT OpenOptions, IN PSTRING AddressingInformation); NDISAPI VOID NTAPI NdisOpenProtocolConfiguration( OUT PNDIS_STATUS Status, OUT PNDIS_HANDLE ConfigurationHandle, IN PNDIS_STRING ProtocolSection); NDISAPI VOID NTAPI NdisRegisterProtocol( OUT PNDIS_STATUS Status, OUT PNDIS_HANDLE NdisProtocolHandle, IN PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics, IN UINT CharacteristicsLength); NDISAPI NDIS_STATUS NTAPI NdisScheduleWorkItem( IN PNDIS_WORK_ITEM WorkItem); /* Obsoleted in Windows XP */ /* Prototypes for NDIS_MAC_CHARACTERISTICS */ typedef NDIS_STATUS (*OPEN_ADAPTER_HANDLER)( OUT PNDIS_STATUS OpenErrorStatus, OUT NDIS_HANDLE *MacBindingHandle, OUT PUINT SelectedMediumIndex, IN PNDIS_MEDIUM MediumArray, IN UINT MediumArraySize, IN NDIS_HANDLE NdisBindingContext, IN NDIS_HANDLE MacAdapterContext, IN UINT OpenOptions, IN PSTRING AddressingInformation OPTIONAL); typedef NDIS_STATUS (NTAPI *CLOSE_ADAPTER_HANDLER)( IN NDIS_HANDLE MacBindingHandle); typedef NDIS_STATUS (NTAPI *WAN_TRANSFER_DATA_HANDLER)( VOID); typedef NDIS_STATUS (NTAPI *QUERY_GLOBAL_STATISTICS_HANDLER)( IN NDIS_HANDLE MacAdapterContext, IN PNDIS_REQUEST NdisRequest); typedef VOID (NTAPI *UNLOAD_MAC_HANDLER)( IN NDIS_HANDLE MacMacContext); typedef NDIS_STATUS (NTAPI *ADD_ADAPTER_HANDLER)( IN NDIS_HANDLE MacMacContext, IN NDIS_HANDLE WrapperConfigurationContext, IN PNDIS_STRING AdapterName); typedef VOID (*REMOVE_ADAPTER_HANDLER)( IN NDIS_HANDLE MacAdapterContext); typedef struct _NDIS_MAC_CHARACTERISTICS { UCHAR MajorNdisVersion; UCHAR MinorNdisVersion; USHORT Filler; UINT Reserved; OPEN_ADAPTER_HANDLER OpenAdapterHandler; CLOSE_ADAPTER_HANDLER CloseAdapterHandler; SEND_HANDLER SendHandler; TRANSFER_DATA_HANDLER TransferDataHandler; RESET_HANDLER ResetHandler; REQUEST_HANDLER RequestHandler; QUERY_GLOBAL_STATISTICS_HANDLER QueryGlobalStatisticsHandler; UNLOAD_MAC_HANDLER UnloadMacHandler; ADD_ADAPTER_HANDLER AddAdapterHandler; REMOVE_ADAPTER_HANDLER RemoveAdapterHandler; NDIS_STRING Name; } NDIS_MAC_CHARACTERISTICS, *PNDIS_MAC_CHARACTERISTICS; typedef NDIS_MAC_CHARACTERISTICS NDIS_WAN_MAC_CHARACTERISTICS; typedef NDIS_WAN_MAC_CHARACTERISTICS *PNDIS_WAN_MAC_CHARACTERISTICS; #ifdef __cplusplus } #endif #endif /* __NDIS_H */ /* EOF */