|
|
#if ARCNET #include <afilter.h> #endif #include <xfilter.h>
#define NDIS_M_MAX_LOOKAHEAD 526
// // Function types for NDIS_MINIPORT_CHARACTERISTICS //
typedef BOOLEAN (*W_CHECK_FOR_HANG_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext );
typedef VOID (*W_DISABLE_INTERRUPT_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext );
typedef VOID (*W_ENABLE_INTERRUPT_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext );
typedef VOID (*W_HALT_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext );
typedef VOID (*W_HANDLE_INTERRUPT_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext );
typedef NDIS_STATUS (*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 (*W_ISR_HANDLER)( OUT PBOOLEAN InterruptRecognized, OUT PBOOLEAN QueueMiniportHandleInterrupt, IN NDIS_HANDLE MiniportAdapterContext );
typedef NDIS_STATUS (*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 (*W_RECONFIGURE_HANDLER)( OUT PNDIS_STATUS OpenErrorStatus, IN NDIS_HANDLE MiniportAdapterContext OPTIONAL, IN NDIS_HANDLE WrapperConfigurationContext );
typedef NDIS_STATUS (*W_RESET_HANDLER)( OUT PBOOLEAN AddressingReset, IN NDIS_HANDLE MiniportAdapterContext );
typedef NDIS_STATUS (*W_SEND_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext, IN PNDIS_PACKET Packet, IN UINT Flags );
typedef NDIS_STATUS (*WM_SEND_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_HANDLE NdisLinkHandle, IN PNDIS_WAN_PACKET Packet );
typedef NDIS_STATUS (*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 (*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 (*WM_TRANSFER_DATA_HANDLER)( VOID );
typedef struct _NDIS30_MINIPORT_CHARACTERISTICS { UCHAR MajorNdisVersion; UCHAR MinorNdisVersion; USHORT Filler; 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; union { W_SEND_HANDLER SendHandler; WM_SEND_HANDLER WanSendHandler; }; W_SET_INFORMATION_HANDLER SetInformationHandler; union { W_TRANSFER_DATA_HANDLER TransferDataHandler; WM_TRANSFER_DATA_HANDLER WanTransferDataHandler; }; } NDIS30_MINIPORT_CHARACTERISTICS;
// // Miniport extensions for NDIS 4.0 // typedef VOID (*W_RETURN_PACKET_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext, IN PNDIS_PACKET Packet );
// // NDIS 4.0 extension // typedef VOID (*W_SEND_PACKETS_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext, IN PPNDIS_PACKET PacketArray, IN UINT NumberOfPackets );
typedef VOID (*W_ALLOCATE_COMPLETE_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext, IN PVOID VirtualAddress, IN PNDIS_PHYSICAL_ADDRESS PhysicalAddress, IN ULONG Length, IN PVOID Context );
typedef struct _NDIS40_MINIPORT_CHARACTERISTICS { #ifdef __cplusplus NDIS30_MINIPORT_CHARACTERISTICS Ndis30Chars; #else NDIS30_MINIPORT_CHARACTERISTICS; #endif // // Extensions for NDIS 4.0 // W_RETURN_PACKET_HANDLER ReturnPacketHandler; W_SEND_PACKETS_HANDLER SendPacketsHandler; W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
} NDIS40_MINIPORT_CHARACTERISTICS;
// // Miniport extensions for NDIS 5.0 // // // NDIS 5.0 extension - however available for miniports only //
// // W_CO_CREATE_VC_HANDLER is a synchronous call // typedef NDIS_STATUS (*W_CO_CREATE_VC_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_HANDLE NdisVcHandle, OUT PNDIS_HANDLE MiniportVcContext );
typedef NDIS_STATUS (*W_CO_DELETE_VC_HANDLER)( IN NDIS_HANDLE MiniportVcContext );
typedef NDIS_STATUS (*W_CO_ACTIVATE_VC_HANDLER)( IN NDIS_HANDLE MiniportVcContext, IN OUT PCO_CALL_PARAMETERS CallParameters );
typedef NDIS_STATUS (*W_CO_DEACTIVATE_VC_HANDLER)( IN NDIS_HANDLE MiniportVcContext );
typedef VOID (*W_CO_SEND_PACKETS_HANDLER)( IN NDIS_HANDLE MiniportVcContext, IN PPNDIS_PACKET PacketArray, IN UINT NumberOfPackets );
typedef NDIS_STATUS (*W_CO_REQUEST_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_HANDLE MiniportVcContext OPTIONAL, IN OUT PNDIS_REQUEST NdisRequest );
typedef struct _NDIS50_MINIPORT_CHARACTERISTICS { #ifdef __cplusplus NDIS40_MINIPORT_CHARACTERISTICS Ndis40Chars; #else NDIS40_MINIPORT_CHARACTERISTICS; #endif // // Extensions for NDIS 5.0 // 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; } NDIS50_MINIPORT_CHARACTERISTICS;
// // Miniport extensions for NDIS 5.1 // typedef VOID (*W_CANCEL_SEND_PACKETS_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext, IN PVOID CancelId );
// // power profiles // typedef enum _NDIS_POWER_PROFILE { NdisPowerProfileBattery, NdisPowerProfileAcOnLine } NDIS_POWER_PROFILE, *PNDIS_POWER_PROFILE;
typedef enum _NDIS_DEVICE_PNP_EVENT { NdisDevicePnPEventQueryRemoved, NdisDevicePnPEventRemoved, NdisDevicePnPEventSurpriseRemoved, NdisDevicePnPEventQueryStopped, NdisDevicePnPEventStopped, NdisDevicePnPEventPowerProfileChanged, NdisDevicePnPEventMaximum } NDIS_DEVICE_PNP_EVENT, *PNDIS_DEVICE_PNP_EVENT;
typedef VOID (*W_PNP_EVENT_NOTIFY_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_DEVICE_PNP_EVENT DevicePnPEvent, IN PVOID InformationBuffer, IN ULONG InformationBufferLength );
typedef VOID (*W_MINIPORT_SHUTDOWN_HANDLER) ( IN NDIS_HANDLE MiniportAdapterContext );
#if NDIS_RECV_SCALE
typedef BOOLEAN (*MINIPORT_ISR_HANDLER)( IN NDIS_HANDLE MiniportInterruptContext, OUT PBOOLEAN QueueDefaultInterruptDpc, OUT PULONG TargetProcessors );
typedef VOID (*MINIPORT_INTERRUPT_DPC_HANDLER)( IN NDIS_HANDLE MiniportInterruptContext, OUT PULONG TargetProcessors );
typedef struct _NDIS_MINIPORT_INTERRUPT_EX { PKINTERRUPT InterruptObject; KSPIN_LOCK DpcCountLock; union { PVOID Reserved; PVOID InterruptContext; }; MINIPORT_ISR_HANDLER MiniportIsr; MINIPORT_INTERRUPT_DPC_HANDLER MiniportDpc; KDPC InterruptDpc; PNDIS_MINIPORT_BLOCK Miniport;
UCHAR DpcCount; BOOLEAN Filler1;
// // This is used to tell when all the Dpcs for the adapter are completed. //
KEVENT DpcsCompletedEvent;
BOOLEAN SharedInterrupt; BOOLEAN IsrRequested; struct _NDIS_MINIPORT_INTERRUPT_EX *NextInterrupt; ULONG DpcQueued; // bitmap of processors for which a Dpc is already queud KDPC Dpc[NDIS_MAX_PROCESSOR_COUNT]; } NDIS_MINIPORT_INTERRUPT_EX, *PNDIS_MINIPORT_INTERRUPT_EX;
EXPORT NDIS_STATUS NdisMRegisterInterruptEx( OUT PNDIS_MINIPORT_INTERRUPT_EX Interrupt, IN NDIS_HANDLE MiniportAdapterHandle, IN UINT InterruptVector, IN UINT InterruptLevel, IN BOOLEAN RequestIsr, IN BOOLEAN SharedInterrupt, IN NDIS_INTERRUPT_MODE InterruptMode );
EXPORT VOID NdisMDeregisterInterruptEx( IN PNDIS_MINIPORT_INTERRUPT_EX MiniportInterrupt );
// // for interrupts registered with NdisMRegisterInterruptEx // BOOLEAN // NdisMSynchronizeWithInterruptEx( // IN PNDIS_MINIPORT_INTERRUPT_EX Interrupt, // IN PVOID SynchronizeFunction, // IN PVOID SynchronizeContext // );
#define NdisMSynchronizeWithInterruptEx(_Interrupt, _SynchronizeFunction, _SynchronizeContext) \ NdisMSynchronizeWithInterrupt((PNDIS_MINIPORT_INTERRUPT)(_Interrupt), _SynchronizeFunction, _SynchronizeContext)
#endif
typedef struct _NDIS51_MINIPORT_CHARACTERISTICS { #ifdef __cplusplus NDIS50_MINIPORT_CHARACTERISTICS Ndis50Chars; #else NDIS50_MINIPORT_CHARACTERISTICS; #endif // // Extensions for NDIS 5.1 // W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler; W_PNP_EVENT_NOTIFY_HANDLER PnPEventNotifyHandler; W_MINIPORT_SHUTDOWN_HANDLER AdapterShutdownHandler; #if NDIS_RECV_SCALE MINIPORT_ISR_HANDLER MiniportISRHandler; MINIPORT_INTERRUPT_DPC_HANDLER InterruptDpcHandler; #else PVOID Reserved1; PVOID Reserved2; #endif PVOID Reserved3; PVOID Reserved4; } NDIS51_MINIPORT_CHARACTERISTICS;
#ifdef NDIS51_MINIPORT typedef struct _NDIS51_MINIPORT_CHARACTERISTICS NDIS_MINIPORT_CHARACTERISTICS; #else #ifdef NDIS50_MINIPORT typedef struct _NDIS50_MINIPORT_CHARACTERISTICS NDIS_MINIPORT_CHARACTERISTICS; #else #ifdef NDIS40_MINIPORT typedef struct _NDIS40_MINIPORT_CHARACTERISTICS NDIS_MINIPORT_CHARACTERISTICS; #else typedef struct _NDIS30_MINIPORT_CHARACTERISTICS NDIS_MINIPORT_CHARACTERISTICS; #endif #endif #endif
typedef NDIS_MINIPORT_CHARACTERISTICS * PNDIS_MINIPORT_CHARACTERISTICS; typedef NDIS_MINIPORT_CHARACTERISTICS NDIS_WAN_MINIPORT_CHARACTERISTICS; typedef NDIS_WAN_MINIPORT_CHARACTERISTICS * PNDIS_MINIPORT_CHARACTERISTICS;
typedef struct _NDIS_MINIPORT_INTERRUPT { PKINTERRUPT InterruptObject; KSPIN_LOCK DpcCountLock; PVOID Reserved; W_ISR_HANDLER MiniportIsr; W_HANDLE_INTERRUPT_HANDLER MiniportDpc; KDPC InterruptDpc; PNDIS_MINIPORT_BLOCK Miniport;
UCHAR DpcCount; BOOLEAN Filler1;
// // This is used to tell when all the Dpcs for the adapter are completed. //
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 *NextTimer; } NDIS_MINIPORT_TIMER, *PNDIS_MINIPORT_TIMER;
typedef VOID (*FILTER_PACKET_INDICATION_HANDLER)( IN NDIS_HANDLE Miniport, IN PPNDIS_PACKET PacketArray, IN UINT NumberOfPackets );
typedef VOID (*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 (*ETH_RCV_COMPLETE_HANDLER)( IN PETH_FILTER Filter );
typedef VOID (*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 (*FDDI_RCV_COMPLETE_HANDLER)( IN PFDDI_FILTER Filter );
typedef VOID (*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 (*TR_RCV_COMPLETE_HANDLER)( IN PTR_FILTER Filter );
typedef VOID (*WAN_RCV_HANDLER)( OUT PNDIS_STATUS Status, IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_HANDLE NdisLinkContext, IN PUCHAR Packet, IN ULONG PacketSize );
typedef VOID (*WAN_RCV_COMPLETE_HANDLER)( IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_HANDLE NdisLinkContext );
typedef VOID (*NDIS_M_SEND_COMPLETE_HANDLER)( IN NDIS_HANDLE MiniportAdapterHandle, IN PNDIS_PACKET Packet, IN NDIS_STATUS Status );
typedef VOID (*NDIS_WM_SEND_COMPLETE_HANDLER)( IN NDIS_HANDLE MiniportAdapterHandle, IN PVOID Packet, IN NDIS_STATUS Status );
typedef VOID (*NDIS_M_TD_COMPLETE_HANDLER)( IN NDIS_HANDLE MiniportAdapterHandle, IN PNDIS_PACKET Packet, IN NDIS_STATUS Status, IN UINT BytesTransferred );
typedef VOID (*NDIS_M_SEND_RESOURCES_HANDLER)( IN NDIS_HANDLE MiniportAdapterHandle );
typedef VOID (*NDIS_M_STATUS_HANDLER)( IN NDIS_HANDLE MiniportHandle, IN NDIS_STATUS GeneralStatus, IN PVOID StatusBuffer, IN UINT StatusBufferSize );
typedef VOID (*NDIS_M_STS_COMPLETE_HANDLER)( IN NDIS_HANDLE MiniportAdapterHandle );
typedef VOID (*NDIS_M_REQ_COMPLETE_HANDLER)( IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_STATUS Status );
typedef VOID (*NDIS_M_RESET_COMPLETE_HANDLER)( IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_STATUS Status, IN BOOLEAN AddressingReset );
typedef BOOLEAN (FASTCALL *NDIS_M_START_SENDS)( IN PNDIS_MINIPORT_BLOCK Miniport );
// // Defines the type of work item. // typedef enum _NDIS_WORK_ITEM_TYPE { NdisWorkItemRequest, NdisWorkItemSend, NdisWorkItemReturnPackets, NdisWorkItemResetRequested, NdisWorkItemResetInProgress, NdisWorkItemReserved, NdisWorkItemMiniportCallback, NdisMaxWorkItems } NDIS_WORK_ITEM_TYPE, *PNDIS_WORK_ITEM_TYPE;
#define NUMBER_OF_WORK_ITEM_TYPES NdisMaxWorkItems #define NUMBER_OF_SINGLE_WORK_ITEMS 6
// // Work item structure // typedef struct _NDIS_MINIPORT_WORK_ITEM { // // Link for the list of work items of this type. // SINGLE_LIST_ENTRY Link;
// // type of work item and context information. // NDIS_WORK_ITEM_TYPE WorkItemType; PVOID WorkItemContext; } NDIS_MINIPORT_WORK_ITEM, *PNDIS_MINIPORT_WORK_ITEM;
typedef NDIS_STATUS (FASTCALL *NDIS_M_QUEUE_WORK_ITEM)( IN PNDIS_MINIPORT_BLOCK Miniport, IN NDIS_WORK_ITEM_TYPE WorkItemType, IN 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 VOID (FASTCALL *NDIS_M_DEQUEUE_WORK_ITEM)( IN PNDIS_MINIPORT_BLOCK Miniport, IN NDIS_WORK_ITEM_TYPE WorkItemType, OUT PVOID * WorkItemContext );
#if defined(NDIS_WRAPPER)
// // Structure used by the logging apis // typedef struct _NDIS_LOG { PNDIS_MINIPORT_BLOCK Miniport; // The owning miniport block KSPIN_LOCK LogLock; // For serialization PIRP Irp; // Pending Irp to consume this log UINT TotalSize; // Size of the log buffer UINT CurrentSize;// Size of the log buffer UINT InPtr; // IN part of the circular buffer UINT OutPtr; // OUT part of the circular buffer UCHAR LogBuf[1]; // The circular buffer } NDIS_LOG, *PNDIS_LOG;
#if ARCNET
// // Arcnet specific stuff // #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
#endif
typedef struct _NDIS_BIND_PATHS { UINT Number; NDIS_STRING Paths[1]; } NDIS_BIND_PATHS, *PNDIS_BIND_PATHS;
// // Do not change the structure below !!! // typedef struct { union { PETH_FILTER EthDB; PNULL_FILTER NullDB; // Default Filter }; PTR_FILTER TrDB; PFDDI_FILTER FddiDB; #if ARCNET PARC_FILTER ArcDB; #else PVOID XXXDB; #endif } FILTERDBS, *PFILTERDBS;
// // one of these per mini-port registered on a Driver // struct _NDIS_MINIPORT_BLOCK { PVOID Signature; // MINIPORT_DEVICE_MAGIC_VALUE PNDIS_MINIPORT_BLOCK NextMiniport; // used by driver's MiniportQueue PNDIS_M_DRIVER_BLOCK DriverHandle; // pointer to our Driver block NDIS_HANDLE MiniportAdapterContext; // context when calling mini-port functions UNICODE_STRING MiniportName; // how mini-port refers to us PNDIS_BIND_PATHS BindPaths; NDIS_HANDLE OpenQueue; // queue of opens for this mini-port REFERENCE ShortRef; // contains spinlock for OpenQueue
NDIS_HANDLE DeviceContext; // Context associated with the intermediate driver
UCHAR Padding1; // DO NOT REMOVE OR NDIS WILL BREAK!!!
// // Synchronization stuff. // // The boolean is used to lock out several DPCs from running at the same time. // UCHAR LockAcquired; // EXPOSED via macros. Do not move
UCHAR PmodeOpens; // Count of opens which turned on pmode/all_local
// // This is the processor number that the miniport's // interrupt DPC and timers are running on. // UCHAR AssignedProcessor;
KSPIN_LOCK Lock;
PNDIS_REQUEST MediaRequest;
PNDIS_MINIPORT_INTERRUPT Interrupt;
ULONG Flags; // Flags to keep track of the // miniport's state. ULONG PnPFlags;
// // Send information // LIST_ENTRY PacketList; PNDIS_PACKET FirstPendingPacket; // This is head of the queue of packets // waiting to be sent to miniport. PNDIS_PACKET ReturnPacketsQueue;
// // Space used for temp. use during request processing // ULONG RequestBuffer; PVOID SetMCastBuffer;
PNDIS_MINIPORT_BLOCK PrimaryMiniport; PVOID WrapperContext;
// // context to pass to bus driver when reading or writing config space // PVOID BusDataContext; // // flag to specify PnP capabilities of the device. we need this to fail query_stop // query_remove or suspend request if the device can not handle it // ULONG PnPCapabilities; // // Resource information // PCM_RESOURCE_LIST Resources;
// // Watch-dog timer // NDIS_TIMER WakeUpDpcTimer;
// // Needed for PnP. Upcased version. The buffer is allocated as part of the // NDIS_MINIPORT_BLOCK itself. // // Note: // the following two fields should be explicitly UNICODE_STRING because // under Win9x the NDIS_STRING is an ANSI_STRING // UNICODE_STRING BaseName; UNICODE_STRING SymbolicLinkName;
// // Check for hang stuff // ULONG CheckForHangSeconds; USHORT CFHangTicks; USHORT CFHangCurrentTick;
// // Reset information // NDIS_STATUS ResetStatus; NDIS_HANDLE ResetOpen;
// // Holds media specific information. // #ifdef __cplusplus FILTERDBS FilterDbs; // EXPOSED via macros. Do not move #else FILTERDBS; // EXPOSED via macros. Do not move #endif
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;
// // contains mini-port information // ULONG BusNumber; NDIS_INTERFACE_TYPE BusType; NDIS_INTERFACE_TYPE AdapterType;
PDEVICE_OBJECT DeviceObject; PDEVICE_OBJECT PhysicalDeviceObject; PDEVICE_OBJECT NextDeviceObject;
// // Holds the map registers for this mini-port. // struct _MAP_REGISTER_ENTRY *MapRegisters; // EXPOSED via macros. Do not move
// // List of registered address families. Valid for the call-manager, Null for the client // PNDIS_AF_LIST CallMgrAfList;
PVOID MiniportThread; PVOID SetInfoBuf; USHORT SetInfoBufLen; USHORT MaxSendPackets;
// // Status code that is returned from the fake handlers. // NDIS_STATUS FakeStatus;
PVOID LockHandler; // For the filter lock
// // the following field should be explicitly UNICODE_STRING because // under Win9x the NDIS_STRING is an ANSI_STRING // PUNICODE_STRING pAdapterInstanceName; // Instance specific name for the adapter.
PNDIS_MINIPORT_TIMER TimerQueue;
UINT MacOptions;
// // RequestInformation // PNDIS_REQUEST PendingRequest; UINT MaximumLongAddresses; UINT MaximumShortAddresses; UINT CurrentLookahead; UINT MaximumLookahead;
// // For efficiency // 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;
// // The following cannot be unionized. // ETH_RCV_INDICATE_HANDLER EthRxIndicateHandler; // EXPOSED via macros. Do not move TR_RCV_INDICATE_HANDLER TrRxIndicateHandler; // EXPOSED via macros. Do not move FDDI_RCV_INDICATE_HANDLER FddiRxIndicateHandler; // EXPOSED via macros. Do not move
ETH_RCV_COMPLETE_HANDLER EthRxCompleteHandler; // EXPOSED via macros. Do not move TR_RCV_COMPLETE_HANDLER TrRxCompleteHandler; // EXPOSED via macros. Do not move FDDI_RCV_COMPLETE_HANDLER FddiRxCompleteHandler; // EXPOSED via macros. Do not move
NDIS_M_STATUS_HANDLER StatusHandler; // EXPOSED via macros. Do not move NDIS_M_STS_COMPLETE_HANDLER StatusCompleteHandler; // EXPOSED via macros. Do not move NDIS_M_TD_COMPLETE_HANDLER TDCompleteHandler; // EXPOSED via macros. Do not move NDIS_M_REQ_COMPLETE_HANDLER QueryCompleteHandler; // EXPOSED via macros. Do not move NDIS_M_REQ_COMPLETE_HANDLER SetCompleteHandler; // EXPOSED via macros. Do not move
NDIS_WM_SEND_COMPLETE_HANDLER WanSendCompleteHandler;// EXPOSED via macros. Do not move WAN_RCV_HANDLER WanRcvHandler; // EXPOSED via macros. Do not move WAN_RCV_COMPLETE_HANDLER WanRcvCompleteHandler; // EXPOSED via macros. Do not move
/********************************************************************************************/ /**************** **********/ /**************** STUFF ABOVE IS POTENTIALLY ACCESSED BY MACROS. ADD STUFF BELOW **********/ /**************** SEVERE POSSIBILITY OF BREAKING SOMETHING IF STUFF ABOVE IS MOVED **********/ /**************** **********/ /********************************************************************************************/ #if defined(NDIS_WRAPPER) PNDIS_MINIPORT_BLOCK NextGlobalMiniport; // used to queue miniport on global miniport queue
// // Work that the miniport needs to do. // 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; // flag to indicate why we have set the fake handlers union { #if ARCNET PNDIS_ARC_BUF ArcBuf; #endif // // the following field has a different use under NT and Memphis // PVOID BusInterface; };
PNDIS_LOG Log;
// // Store information here to track adapters // ULONG SlotNumber;
PCM_RESOURCE_LIST AllocatedResources; PCM_RESOURCE_LIST AllocatedResourcesTranslated;
// // Contains a list of the packet patterns that have been added to the // adapter. // SINGLE_LIST_ENTRY PatternList;
// // The driver's power management capabilities. // NDIS_PNP_CAPABILITIES PMCapabilities;
// // DeviceCapabilites as received from bus driver // DEVICE_CAPABILITIES DeviceCaps;
// // Contains the wake-up events that are enabled for the miniport. // ULONG WakeUpEnable;
// // The current device state that the adapter is in. // DEVICE_POWER_STATE CurrentDevicePowerState;
// // The following IRP is created in response to a cable disconnect // from the device. We keep a pointer around in case we need to cancel // it. // PIRP pIrpWaitWake;
SYSTEM_POWER_STATE WaitWakeSystemState;
// // The following is a pointer to a dynamically allocated array // of GUID structs. This is used to map GUIDs to OIDs // for custom GUIDs provided by the miniport. //
LARGE_INTEGER VcIndex; // Index used to identify a VC. KSPIN_LOCK VcCountLock; // Lock used to protect VC instance count. LIST_ENTRY WmiEnabledVcs; // List of WMI enabled VCs PNDIS_GUID pNdisGuidMap; // This is a list of all the GUIDs // and OIDs supported including any // customg GUIDs. PNDIS_GUID pCustomGuidMap; // This is a pointer into // the pGuidToOidMap to the // first custom GUID. USHORT VcCount; // Number of VC's that have instance names.
USHORT cNdisGuidMap; // This is the number of std. GUIDs USHORT cCustomGuidMap; // This is the number of custom GUIDs
// // These two are used temporarily while allocating the map registers. // USHORT CurrentMapRegister; PKEVENT AllocationEvent;
USHORT BaseMapRegistersNeeded; USHORT SGMapRegistersNeeded; ULONG MaximumPhysicalMapping;
// // This timer is used for media disconnect timouts. // NDIS_TIMER MediaDisconnectTimer;
// // The timeout value for media disconnect timer to fire // default is 20 seconds // USHORT MediaDisconnectTimeOut;
// // Used for WMI support // USHORT InstanceNumber;
// // this event will be set at the end of adapter initialization // NDIS_EVENT OpenReadyEvent;
// // current PnP state of the device, ex. started, stopped, query_removed, etc. // NDIS_PNP_DEVICE_STATE PnPDeviceState; // // previous device state. to be used when we get a cancel_remove or a cancel_stop // NDIS_PNP_DEVICE_STATE OldPnPDeviceState; // // Handlers to Write/Read Bus data // PGET_SET_DEVICE_DATA SetBusData; PGET_SET_DEVICE_DATA GetBusData;
KDPC DeferredDpc;
// // Some NDIS gathered stats // NDIS_STATS NdisStats;
// // Valid during Packet Indication // PNDIS_PACKET IndicatedPacket[MAXIMUM_PROCESSORS];
// // this event is for protecting against returning from REMOVE IRP // too early and while we still have pending workitems // PKEVENT RemoveReadyEvent;
// // this event gets signaled when all opens on the miniport are closed // PKEVENT AllOpensClosedEvent;
// // this event gets signaled when all requests on the miniport are gone // PKEVENT AllRequestsCompletedEvent;
// // Init time for the miniport in milliseconds // ULONG InitTimeMs;
NDIS_MINIPORT_WORK_ITEM WorkItemBuffer[NUMBER_OF_SINGLE_WORK_ITEMS];
PDMA_ADAPTER SystemAdapterObject; // // flags to fail certain NDIS APIs to make sure the driver does the right things // ULONG DriverVerifyFlags; POID_LIST OidList; // // InternalResetCount: The # of times NDIS decided a miniport was hung // MiniportResetCount The # of times miniport decided it was hung // USHORT InternalResetCount; USHORT MiniportResetCount;
USHORT MediaSenseConnectCount; USHORT MediaSenseDisconnectCount;
PNDIS_PACKET * xPackets;
// // track the user mode requests // ULONG UserModeOpenReferences;
// // Saved handlers. The handlers in the NDIS_OPEN_BLOCK are saved here // by ndisMSwapOpenHandlers and restored by ndisMRestoreOpenHandlers. // union { PVOID SavedSendHandler; PVOID SavedWanSendHandler; }; W_SEND_PACKETS_HANDLER SavedSendPacketsHandler; W_CANCEL_SEND_PACKETS_HANDLER SavedCancelSendPacketsHandler;
// // real SendPacketsHandler // W_SEND_PACKETS_HANDLER WSendPacketsHandler; ULONG MiniportAttributes;
PDMA_ADAPTER SavedSystemAdapterObject; USHORT NumOpens; // // extra check for hang ticks allowed for OID_GEN_MEDIA_CONNECT_STATUS and OID_GEN_LINK_SPEED // USHORT CFHangXTicks; ULONG RequestCount; ULONG IndicatedPacketsCount; ULONG PhysicalMediumType; // // last request. needed for debugging purpose // 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; PKEVENT WakeUpTimerEvent;
PSECURITY_DESCRIPTOR SecurityDescriptor; // // both these variables are protected by Ref->SpinLock // ULONG NumUserOpens; // number of non-admin open handles ULONG NumAdminOpens; // number of admin open handles ULONG_REFERENCE Ref; #if NDIS_RECV_SCALE NDIS_RECEIVE_SCALE_CAPABILITIES RecvScaleCapabilities; #endif
#if DBG ULONG cDpcSendCompletes; ULONG cDpcRcvIndications; ULONG cDpcRcvIndicationCalls; #endif
#endif // NDIS_WRAPPER defined };
// // Routines for intermediate miniport drivers. // typedef VOID (*W_MINIPORT_CALLBACK)( IN NDIS_HANDLE MiniportAdapterContext, IN PVOID CallbackContext );
EXPORT NDIS_STATUS NdisIMRegisterLayeredMiniport( IN NDIS_HANDLE NdisWrapperHandle, IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics, IN UINT CharacteristicsLength, OUT PNDIS_HANDLE DriverHandle );
EXPORT VOID NdisIMDeregisterLayeredMiniport( IN NDIS_HANDLE DriverHandle );
EXPORT VOID NdisIMAssociateMiniport( IN NDIS_HANDLE DriverHandle, IN NDIS_HANDLE ProtocolHandle );
EXPORT NDIS_STATUS 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 );
EXPORT NDIS_STATUS NdisMDeregisterDevice( IN NDIS_HANDLE NdisDeviceHandle );
EXPORT VOID NdisMRegisterUnloadHandler( IN NDIS_HANDLE NdisWrapperHandle, IN PDRIVER_UNLOAD UnloadHandler );
// // Operating System Requests // 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)
EXPORT NDIS_STATUS NdisMAllocateMapRegisters( IN NDIS_HANDLE MiniportAdapterHandle, IN UINT DmaChannel, IN NDIS_DMA_SIZE DmaSize, IN ULONG BaseMapRegistersNeeded, IN ULONG MaximumPhysicalMapping );
EXPORT VOID NdisMFreeMapRegisters( IN NDIS_HANDLE MiniportAdapterHandle );
EXPORT NDIS_STATUS NdisMInitializeScatterGatherDma( IN NDIS_HANDLE MiniportAdapterHandle, IN BOOLEAN Dma64BitAddresses, IN ULONG MaximumPhysicalMapping );
EXPORT NDIS_STATUS NdisMRegisterIoPortRange( OUT PVOID * PortOffset, IN NDIS_HANDLE MiniportAdapterHandle, IN UINT InitialPort, IN UINT NumberOfPorts );
EXPORT VOID NdisMDeregisterIoPortRange( IN NDIS_HANDLE MiniportAdapterHandle, IN UINT InitialPort, IN UINT NumberOfPorts, IN PVOID PortOffset );
EXPORT NDIS_STATUS NdisMMapIoSpace( OUT PVOID * VirtualAddress, IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_PHYSICAL_ADDRESS PhysicalAddress, IN UINT Length );
EXPORT VOID NdisMUnmapIoSpace( IN NDIS_HANDLE MiniportAdapterHandle, IN PVOID VirtualAddress, IN UINT Length );
EXPORT NDIS_STATUS 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 );
EXPORT VOID NdisMDeregisterInterrupt( IN PNDIS_MINIPORT_INTERRUPT Interrupt );
EXPORT BOOLEAN NdisMSynchronizeWithInterrupt( IN PNDIS_MINIPORT_INTERRUPT Interrupt, IN PVOID SynchronizeFunction, IN PVOID SynchronizeContext );
EXPORT VOID NdisMQueryAdapterResources( OUT PNDIS_STATUS Status, IN NDIS_HANDLE WrapperConfigurationContext, OUT PNDIS_RESOURCE_LIST ResourceList, IN OUT PUINT BufferSize );
// // Timers // // VOID // NdisMSetTimer( // IN PNDIS_MINIPORT_TIMER Timer, // IN UINT MillisecondsToDelay // ); #define NdisMSetTimer(_Timer, _Delay) NdisSetTimer((PNDIS_TIMER)_Timer, _Delay)
EXPORT VOID NdisMSetPeriodicTimer( IN PNDIS_MINIPORT_TIMER Timer, IN UINT MillisecondPeriod );
EXPORT VOID NdisMInitializeTimer( IN OUT PNDIS_MINIPORT_TIMER Timer, IN NDIS_HANDLE MiniportAdapterHandle, IN PNDIS_TIMER_FUNCTION TimerFunction, IN PVOID FunctionContext );
EXPORT VOID NdisMCancelTimer( IN PNDIS_MINIPORT_TIMER Timer, OUT PBOOLEAN TimerCancelled );
EXPORT VOID NdisMSleep( IN ULONG MicrosecondsToSleep );
// // Physical Mapping // EXPORT VOID NdisMStartBufferPhysicalMapping( IN NDIS_HANDLE MiniportAdapterHandle, IN PNDIS_BUFFER Buffer, IN ULONG PhysicalMapRegister, IN BOOLEAN WriteToDevice, OUT PNDIS_PHYSICAL_ADDRESS_UNIT PhysicalAddressArray, OUT PUINT ArraySize );
EXPORT VOID NdisMCompleteBufferPhysicalMapping( IN NDIS_HANDLE MiniportAdapterHandle, IN PNDIS_BUFFER Buffer, IN ULONG PhysicalMapRegister );
EXPORT ULONG NdisMGetDmaAlignment( IN NDIS_HANDLE MiniportAdapterHandle );
// // Shared memory // EXPORT VOID NdisMAllocateSharedMemory( IN NDIS_HANDLE MiniportAdapterHandle, IN ULONG Length, IN BOOLEAN Cached, OUT PVOID * VirtualAddress, OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress );
EXPORT NDIS_STATUS NdisMAllocateSharedMemoryAsync( IN NDIS_HANDLE MiniportAdapterHandle, IN ULONG Length, IN BOOLEAN Cached, IN PVOID Context );
/*++ 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)
EXPORT VOID NdisMFreeSharedMemory( IN NDIS_HANDLE MiniportAdapterHandle, IN ULONG Length, IN BOOLEAN Cached, IN PVOID VirtualAddress, IN NDIS_PHYSICAL_ADDRESS PhysicalAddress );
// // DMA operations. // EXPORT NDIS_STATUS NdisMRegisterDmaChannel( OUT PNDIS_HANDLE MiniportDmaHandle, IN NDIS_HANDLE MiniportAdapterHandle, IN UINT DmaChannel, IN BOOLEAN Dma32BitAddresses, IN PNDIS_DMA_DESCRIPTION DmaDescription, IN ULONG MaximumLength );
EXPORT VOID NdisMDeregisterDmaChannel( IN NDIS_HANDLE MiniportDmaHandle );
/*++ VOID NdisMSetupDmaTransfer( OUT PNDIS_STATUS Status, IN NDIS_HANDLE MiniportDmaHandle, IN PNDIS_BUFFER Buffer, IN ULONG Offset, IN ULONG Length, IN BOOLEAN WriteToDevice ) --*/ #define NdisMSetupDmaTransfer(_S, _H, _B, _O, _L, _M_) \ NdisSetupDmaTransfer(_S, _H, _B, _O, _L, _M_)
/*++ VOID NdisMCompleteDmaTransfer( OUT PNDIS_STATUS Status, IN NDIS_HANDLE MiniportDmaHandle, IN PNDIS_BUFFER Buffer, IN ULONG Offset, IN ULONG Length, IN BOOLEAN WriteToDevice ) --*/ #define NdisMCompleteDmaTransfer(_S, _H, _B, _O, _L, _M_) \ NdisCompleteDmaTransfer(_S, _H, _B, _O, _L, _M_)
EXPORT ULONG NdisMReadDmaCounter( IN NDIS_HANDLE MiniportDmaHandle );
// // Requests Used by Miniport Drivers // #define NdisMInitializeWrapper(_a,_b,_c,_d) NdisInitializeWrapper((_a),(_b),(_c),(_d))
EXPORT NDIS_STATUS NdisMRegisterMiniport( IN NDIS_HANDLE NdisWrapperHandle, IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics, IN UINT CharacteristicsLength );
// EXPORT // NDIS_STATUS // NdisIMInitializeDeviceInstance( // IN NDIS_HANDLE DriverHandle, // IN PNDIS_STRING DriverInstance // ); #define NdisIMInitializeDeviceInstance(_H_, _I_) \ NdisIMInitializeDeviceInstanceEx(_H_, _I_, NULL)
EXPORT NDIS_STATUS NdisIMInitializeDeviceInstanceEx( IN NDIS_HANDLE DriverHandle, IN PNDIS_STRING DriverInstance, IN NDIS_HANDLE DeviceContext OPTIONAL );
EXPORT NDIS_STATUS NdisIMCancelInitializeDeviceInstance( IN NDIS_HANDLE DriverHandle, IN PNDIS_STRING DeviceInstance );
EXPORT NDIS_HANDLE NdisIMGetDeviceContext( IN NDIS_HANDLE MiniportAdapterHandle );
EXPORT NDIS_HANDLE NdisIMGetBindingContext( IN NDIS_HANDLE NdisBindingHandle );
EXPORT NDIS_STATUS NdisIMDeInitializeDeviceInstance( IN NDIS_HANDLE NdisMiniportHandle );
EXPORT VOID NdisIMCopySendPerPacketInfo( OUT PNDIS_PACKET DstPacket, IN PNDIS_PACKET SrcPacket );
EXPORT VOID NdisIMCopySendCompletePerPacketInfo( OUT PNDIS_PACKET DstPacket, IN PNDIS_PACKET SrcPacket );
// EXPORT // VOID // NdisMSetAttributes( // IN NDIS_HANDLE MiniportAdapterHandle, // IN NDIS_HANDLE MiniportAdapterContext, // IN BOOLEAN BusMaster, // IN NDIS_INTERFACE_TYPE AdapterType // ); #define NdisMSetAttributes(_H_, _C_, _M_, _T_) \ NdisMSetAttributesEx(_H_, \ _C_, \ 0, \ (_M_) ? NDIS_ATTRIBUTE_BUS_MASTER : 0, \ _T_) \
EXPORT VOID NdisMSetAttributesEx( IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_HANDLE MiniportAdapterContext, IN UINT CheckForHangTimeInSeconds OPTIONAL, IN ULONG AttributeFlags, IN NDIS_INTERFACE_TYPE AdapterType OPTIONAL );
#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 #define NDIS_ATTRIBUTE_DO_NOT_BIND_TO_ALL_CO 0x00000400
EXPORT NDIS_STATUS NdisMSetMiniportSecondary( IN NDIS_HANDLE MiniportHandle, IN NDIS_HANDLE PrimaryMiniportHandle );
EXPORT NDIS_STATUS NdisMPromoteMiniport( IN NDIS_HANDLE MiniportHandle );
EXPORT NDIS_STATUS NdisMRemoveMiniport( IN NDIS_HANDLE MiniportHandle );
#define NdisMSendComplete(_M, _P, _S) (*((PNDIS_MINIPORT_BLOCK)(_M))->SendCompleteHandler)(_M, _P, _S)
#define NdisMSendResourcesAvailable(_M) (*((PNDIS_MINIPORT_BLOCK)(_M))->SendResourcesHandler)(_M)
#define NdisMResetComplete(_M, _S, _A) (*((PNDIS_MINIPORT_BLOCK)(_M))->ResetCompleteHandler)(_M, _S, _A)
#define NdisMTransferDataComplete(_M, _P, _S, _B) \ (*((PNDIS_MINIPORT_BLOCK)(_M))->TDCompleteHandler)(_M, _P, _S, _B)
/*++
VOID NdisMWanSendComplete( IN NDIS_HANDLE MiniportAdapterHandle, IN PVOID Packet, IN NDIS_STATUS Status );
--*/
#define NdisMWanSendComplete(_M_, _P_, _S_) \ (*((PNDIS_MINIPORT_BLOCK)(_M_))->WanSendCompleteHandler)(_M_, _P_, _S_)
#define NdisMQueryInformationComplete(_M, _S) \ (*((PNDIS_MINIPORT_BLOCK)(_M))->QueryCompleteHandler)(_M, _S)
#define NdisMSetInformationComplete(_M, _S) \ (*((PNDIS_MINIPORT_BLOCK)(_M))->SetCompleteHandler)(_M, _S)
/*++
VOID NdisMIndicateReceivePacket( IN NDIS_HANDLE MiniportAdapterHandle, IN PPNDIS_PACKET ReceivedPackets, IN UINT NumberOfPackets );
--*/ #define NdisMIndicateReceivePacket(_H, _P, _N) \ { \ (*((PNDIS_MINIPORT_BLOCK)(_H))->PacketIndicateHandler)( \ _H, \ _P, \ _N); \ }
/*++
VOID NdisMWanIndicateReceive( OUT PNDIS_STATUS Status, IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_HANDLE NdisLinkContext, IN PUCHAR Packet, IN ULONG PacketSize );
--*/
#define NdisMWanIndicateReceive(_S_, _M_, _C_, _P_, _Z_) \ (*((PNDIS_MINIPORT_BLOCK)(_M_))->WanRcvHandler)(_S_, _M_, _C_, _P_, _Z_)
/*++
VOID NdisMWanIndicateReceiveComplete( IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_HANDLE NdisLinkContext );
--*/
#define NdisMWanIndicateReceiveComplete(_M_, _C_) \ (*((PNDIS_MINIPORT_BLOCK)(_M_))->WanRcvCompleteHandler)(_M_, _C_)
/*++
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( _H, _C, _B, _SZ, _L, _LSZ, _PSZ) \ { \ (*((PNDIS_MINIPORT_BLOCK)(_H))->EthRxIndicateHandler)( \ ((PNDIS_MINIPORT_BLOCK)(_H))->EthDB, \ _C, \ _B, \ _B, \ _SZ, \ _L, \ _LSZ, \ _PSZ \ ); \ }
/*++
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( _H, _C, _B, _SZ, _L, _LSZ, _PSZ) \ { \ (*((PNDIS_MINIPORT_BLOCK)(_H))->TrRxIndicateHandler)( \ ((PNDIS_MINIPORT_BLOCK)(_H))->TrDB, \ _C, \ _B, \ _SZ, \ _L, \ _LSZ, \ _PSZ \ ); \ }
/*++
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( _H, _C, _B, _SZ, _L, _LSZ, _PSZ) \ { \ (*((PNDIS_MINIPORT_BLOCK)(_H))->FddiRxIndicateHandler)( \ ((PNDIS_MINIPORT_BLOCK)(_H))->FddiDB, \ _C, \ (PUCHAR)_B + 1, \ ((((PUCHAR)_B)[0] & 0x40) ? FDDI_LENGTH_OF_LONG_ADDRESS \ : FDDI_LENGTH_OF_SHORT_ADDRESS), \ _B, \ _SZ, \ _L, \ _LSZ, \ _PSZ \ ); \ }
/*++
VOID NdisMArcIndicateReceive( IN NDIS_HANDLE MiniportHandle, IN PUCHAR pRawHeader, // Pointer to Arcnet frame header IN PUCHAR pData, // Pointer to data portion of Arcnet frame IN UINT Length // Data Length )
--*/ #define NdisMArcIndicateReceive( _H, _HD, _D, _SZ) \ { \ ArcFilterDprIndicateReceive(((PNDIS_MINIPORT_BLOCK)(_H))->ArcDB, \ _HD, \ _D, \ _SZ \ ); \ }
/*++
VOID NdisMEthIndicateReceiveComplete( IN NDIS_HANDLE MiniportHandle );
--*/
#define NdisMEthIndicateReceiveComplete( _H ) \ { \ (*((PNDIS_MINIPORT_BLOCK)(_H))->EthRxCompleteHandler)( \ ((PNDIS_MINIPORT_BLOCK)_H)->EthDB); \ }
/*++
VOID NdisMTrIndicateReceiveComplete( IN NDIS_HANDLE MiniportHandle );
--*/
#define NdisMTrIndicateReceiveComplete( _H ) \ { \ (*((PNDIS_MINIPORT_BLOCK)(_H))->TrRxCompleteHandler)( \ ((PNDIS_MINIPORT_BLOCK)_H)->TrDB); \ }
/*++
VOID NdisMFddiIndicateReceiveComplete( IN NDIS_HANDLE MiniportHandle );
--*/
#define NdisMFddiIndicateReceiveComplete( _H ) \ { \ (*((PNDIS_MINIPORT_BLOCK)(_H))->FddiRxCompleteHandler)( \ ((PNDIS_MINIPORT_BLOCK)_H)->FddiDB); \ }
/*++
VOID NdisMArcIndicateReceiveComplete( IN NDIS_HANDLE MiniportHandle );
--*/
#define NdisMArcIndicateReceiveComplete( _H ) \ { \ if (((PNDIS_MINIPORT_BLOCK)_H)->EthDB) \ { \ NdisMEthIndicateReceiveComplete(_H); \ } \ \ ArcFilterDprIndicateReceiveComplete(((PNDIS_MINIPORT_BLOCK)_H)->ArcDB); \ }
/*++
EXPORT VOID NdisMIndicateStatus( IN NDIS_HANDLE MiniportHandle, IN NDIS_STATUS GeneralStatus, IN PVOID StatusBuffer, IN UINT StatusBufferSize ); --*/
#define NdisMIndicateStatus(_M, _G, _SB, _BS) (*((PNDIS_MINIPORT_BLOCK)(_M))->StatusHandler)(_M, _G, _SB, _BS)
/*++
EXPORT VOID NdisMIndicateStatusComplete( IN NDIS_HANDLE MiniportHandle );
--*/
#define NdisMIndicateStatusComplete(_M) (*((PNDIS_MINIPORT_BLOCK)(_M))->StatusCompleteHandler)(_M)
EXPORT VOID NdisMRegisterAdapterShutdownHandler( IN NDIS_HANDLE MiniportHandle, IN PVOID ShutdownContext, IN ADAPTER_SHUTDOWN_HANDLER ShutdownHandler );
EXPORT VOID NdisMDeregisterAdapterShutdownHandler( IN NDIS_HANDLE MiniportHandle );
EXPORT NDIS_STATUS NdisMPciAssignResources( IN NDIS_HANDLE MiniportHandle, IN ULONG SlotNumber, IN PNDIS_RESOURCE_LIST * AssignedResources );
#ifdef NDIS51_MINIPORT EXPORT NDIS_STATUS NdisIMNotifyPnPEvent( IN NDIS_HANDLE MiniportHandle, IN PNET_PNP_EVENT NetPnPEvent );
#endif
// // Logging support for miniports //
EXPORT NDIS_STATUS NdisMCreateLog( IN NDIS_HANDLE MiniportAdapterHandle, IN UINT Size, OUT PNDIS_HANDLE LogHandle );
EXPORT VOID NdisMCloseLog( IN NDIS_HANDLE LogHandle );
EXPORT NDIS_STATUS NdisMWriteLogData( IN NDIS_HANDLE LogHandle, IN PVOID LogBuffer, IN UINT LogBufferSize );
EXPORT VOID NdisMFlushLog( IN NDIS_HANDLE LogHandle );
EXPORT VOID 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 );
// // Get a pointer to the adapter's localized instance name. // EXPORT NDIS_STATUS NdisMQueryAdapterInstanceName( OUT PNDIS_STRING pAdapterInstanceName, IN NDIS_HANDLE MiniportHandle );
// // NDIS 5.0 extensions for miniports //
EXPORT VOID NdisMCoIndicateReceivePacket( IN NDIS_HANDLE NdisVcHandle, IN PPNDIS_PACKET PacketArray, IN UINT NumberOfPackets );
EXPORT VOID NdisMCoIndicateStatus( IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_HANDLE NdisVcHandle OPTIONAL, IN NDIS_STATUS GeneralStatus, IN PVOID StatusBuffer OPTIONAL, IN ULONG StatusBufferSize );
EXPORT VOID NdisMCoReceiveComplete( IN NDIS_HANDLE MiniportAdapterHandle );
EXPORT VOID NdisMCoSendComplete( IN NDIS_STATUS Status, IN NDIS_HANDLE NdisVcHandle, IN PNDIS_PACKET Packet );
EXPORT VOID NdisMCoActivateVcComplete( IN NDIS_STATUS Status, IN NDIS_HANDLE NdisVcHandle, IN PCO_CALL_PARAMETERS CallParameters );
EXPORT VOID NdisMCoDeactivateVcComplete( IN NDIS_STATUS Status, IN NDIS_HANDLE NdisVcHandle );
EXPORT VOID NdisMCoRequestComplete( IN NDIS_STATUS Status, IN NDIS_HANDLE MiniportAdapterHandle, IN PNDIS_REQUEST Request );
EXPORT NDIS_STATUS NdisMCmRegisterAddressFamily( IN NDIS_HANDLE MiniportAdapterHandle, IN PCO_ADDRESS_FAMILY AddressFamily, IN PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics, IN UINT SizeOfCmCharacteristics );
EXPORT NDIS_STATUS NdisMCmCreateVc( IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_HANDLE NdisAfHandle, IN NDIS_HANDLE MiniportVcContext, OUT PNDIS_HANDLE NdisVcHandle );
EXPORT NDIS_STATUS NdisMCmDeleteVc( IN NDIS_HANDLE NdisVcHandle );
EXPORT NDIS_STATUS NdisMCmActivateVc( IN NDIS_HANDLE NdisVcHandle, IN PCO_CALL_PARAMETERS CallParameters );
EXPORT NDIS_STATUS NdisMCmDeactivateVc( IN NDIS_HANDLE NdisVcHandle );
EXPORT NDIS_STATUS NdisMCmRequest( IN NDIS_HANDLE NdisAfHandle, IN NDIS_HANDLE NdisVcHandle OPTIONAL, IN NDIS_HANDLE NdisPartyHandle OPTIONAL, IN OUT PNDIS_REQUEST NdisRequest );
// EXPORT // VOID // NdisMCmRequestComplete( // IN NDIS_STATUS Status, // IN NDIS_HANDLE NdisAfHandle, // IN NDIS_HANDLE NdisVcHandle OPTIONAL, // IN NDIS_HANDLE NdisPartyHandle OPTIONAL, // IN PNDIS_REQUEST NdisRequest // ); #define NdisMCmRequestComplete(_S_, _AH_, _VH_, _PH_, _R_) \ NdisCoRequestComplete(_S_, _AH_, _VH_, _PH_, _R_)
// EXPORT // VOID // NdisMCmOpenAddressFamilyComplete( // IN NDIS_STATUS Status, // IN NDIS_HANDLE NdisAfHandle, // IN NDIS_HANDLE CallMgrAfContext // );
#define NdisMCmOpenAddressFamilyComplete(_S_, _H_, _C_) \ NdisCmOpenAddressFamilyComplete(_S_, _H_, _C_)
// EXPORT // VOID // NdisMCmCloseAddressFamilyComplete( // IN NDIS_STATUS Status, // IN NDIS_HANDLE NdisAfHandle // );
#define NdisMCmCloseAddressFamilyComplete(_S_, _H_) \ NdisCmCloseAddressFamilyComplete(_S_, _H_)
// EXPORT // VOID // NdisMCmRegisterSapComplete( // IN NDIS_STATUS Status, // IN NDIS_HANDLE NdisSapHandle, // IN NDIS_HANDLE CallMgrSapContext // );
#define NdisMCmRegisterSapComplete(_S_, _H_, _C_) \ NdisCmRegisterSapComplete(_S_, _H_, _C_)
// EXPORT // VOID // NdisMCmDeregisterSapComplete( // IN NDIS_STATUS Status, // IN NDIS_HANDLE NdisSapHandle // );
#define NdisMCmDeregisterSapComplete(_S_, _H_) \ NdisCmDeregisterSapComplete(_S_, _H_)
// EXPORT // VOID // NdisMCmMakeCallComplete( // IN NDIS_STATUS Status, // IN NDIS_HANDLE NdisVcHandle, // IN NDIS_HANDLE NdisPartyHandle OPTIONAL, // IN NDIS_HANDLE CallMgrPartyContext OPTIONAL, // IN PCO_CALL_PARAMETERS CallParameters // );
#define NdisMCmMakeCallComplete(_S_, _VH_, _PH_, _CC_, _CP_) \ NdisCmMakeCallComplete(_S_, _VH_, _PH_, _CC_, _CP_)
// EXPORT // VOID // NdisMCmCloseCallComplete( // IN NDIS_STATUS Status, // IN NDIS_HANDLE NdisVcHandle, // IN NDIS_HANDLE NdisPartyHandle OPTIONAL // );
#define NdisMCmCloseCallComplete(_S_, _VH_, _PH_) \ NdisCmCloseCallComplete(_S_, _VH_, _PH_)
// EXPORT // VOID // NdisMCmAddPartyComplete( // IN NDIS_STATUS Status, // IN NDIS_HANDLE NdisPartyHandle, // IN NDIS_HANDLE CallMgrPartyContext OPTIONAL, // IN PCO_CALL_PARAMETERS CallParameters // );
#define NdisMCmAddPartyComplete(_S_, _H_, _C_, _P_) \ NdisCmAddPartyComplete(_S_, _H_, _C_, _P_)
// EXPORT // VOID // NdisMCmDropPartyComplete( // IN NDIS_STATUS Status, // IN NDIS_HANDLE NdisPartyHandle // );
#define NdisMCmDropPartyComplete(_S_, _H_) \ NdisCmDropPartyComplete(_S_, _H_)
// EXPORT // NDIS_STATUS // NdisMCmDispatchIncomingCall( // IN NDIS_HANDLE NdisSapHandle, // IN NDIS_HANDLE NdisVcHandle, // IN PCO_CALL_PARAMETERS CallParameters // );
#define NdisMCmDispatchIncomingCall(_SH_, _VH_, _CP_) \ NdisCmDispatchIncomingCall(_SH_, _VH_, _CP_)
// EXPORT // VOID // NdisMCmDispatchCallConnected( // IN NDIS_HANDLE NdisVcHandle // );
#define NdisMCmDispatchCallConnected(_H_) \ NdisCmDispatchCallConnected(_H_)
// EXPORT // NdisMCmModifyCallQoSComplete( // IN NDIS_STATUS Status, // IN NDIS_HANDLE NdisVcHandle, // IN PCO_CALL_PARAMETERS CallParameters // );
#define NdisMCmModifyCallQoSComplete(_S_, _H_, _P_) \ NdisCmModifyCallQoSComplete(_S_, _H_, _P_)
// EXPORT // VOID // VOID // NdisMCmDispatchIncomingCallQoSChange( // IN NDIS_HANDLE NdisVcHandle, // IN PCO_CALL_PARAMETERS CallParameters // );
#define NdisMCmDispatchIncomingCallQoSChange(_H_, _P_) \ NdisCmDispatchIncomingCallQoSChange(_H_, _P_)
// EXPORT // VOID // NdisMCmDispatchIncomingCloseCall( // IN NDIS_STATUS CloseStatus, // IN NDIS_HANDLE NdisVcHandle, // IN PVOID Buffer OPTIONAL, // IN UINT Size // );
#define NdisMCmDispatchIncomingCloseCall(_S_, _H_, _B_, _Z_) \ NdisCmDispatchIncomingCloseCall(_S_, _H_, _B_, _Z_)
// EXPORT // VOID // NdisMCmDispatchIncomingDropParty( // IN NDIS_STATUS DropStatus, // IN NDIS_HANDLE NdisPartyHandle, // IN PVOID Buffer OPTIONAL, // IN UINT Size // ); #define NdisMCmDispatchIncomingDropParty(_S_, _H_, _B_, _Z_) \ NdisCmDispatchIncomingDropParty(_S_, _H_, _B_, _Z_)
|