Windows2000/private/ntos/inc/ndismini.h

2149 lines
63 KiB
C
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <afilter.h>
#include <efilter.h>
#include <tfilter.h>
#include <ffilter.h>
#define NDIS_M_MAX_LOOKAHEAD 526
// declare these first since they point to each other
typedef struct _NDIS_M_DRIVER_BLOCK NDIS_M_DRIVER_BLOCK, *PNDIS_M_DRIVER_BLOCK;
typedef struct _NDIS_MINIPORT_BLOCK NDIS_MINIPORT_BLOCK,*PNDIS_MINIPORT_BLOCK;
typedef struct _CO_CALL_PARAMETERS CO_CALL_PARAMETERS, *PCO_CALL_PARAMETERS;
typedef struct _CO_MEDIA_PARAMETERS CO_MEDIA_PARAMETERS, *PCO_MEDIA_PARAMETERS;
typedef struct _NDIS_CALL_MANAGER_CHARACTERISTICS *PNDIS_CALL_MANAGER_CHARACTERISTICS;
typedef struct _NDIS_AF_LIST NDIS_AF_LIST, *PNDIS_AF_LIST;
typedef struct _NULL_FILTER NULL_FILTER, *PNULL_FILTER;
// 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;
#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
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 MiniportIdField;
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
VOID
(FASTCALL *NDIS_M_PROCESS_DEFERRED)(
IN PNDIS_MINIPORT_BLOCK Miniport
);
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,
NdisWorkItemHalt,
#if !(NDIS_NT)
NdisWorkItemSendLoopback,
#endif
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;
// 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
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;
PARC_FILTER ArcDB;
} FILTERDBS, *PFILTERDBS;
// one of these per mini-port registered on a Driver
struct _NDIS_MINIPORT_BLOCK
{
ULONG NullValue; // used to distinquish between MACs and mini-ports
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 Ref; // 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.
PMAP_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.
PADAPTER_OBJECT SystemAdapterObject;
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)
// 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];
PNDIS_MAC_BLOCK FakeMac;
UCHAR SendFlags;
UCHAR TrResetRing;
UCHAR ArcnetAddress;
union
{
PNDIS_ARC_BUF ArcBuf;
// the following fiels has a different use under NT and Memphis
#if NDIS_NT
PVOID BusInterface;
#else
PVOID PhysicalAddressArray;
#endif
};
// Temp stuff for using the old NDIS functions
ULONG ChannelNumber;
PNDIS_LOG Log;
// Store information here to track adapters
ULONG BusId;
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 CurrentDeviceState;
// 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 PhysicalMapRegistersNeeded;
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;
POID_LIST OidList;
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];
PNDIS_MINIPORT_TIMER TimerQueue;
// flags to fail certain NDIS APIs to make sure the driver does the right things
ULONG DriverVerifyFlags;
// used to queue miniport on global miniport queue
PNDIS_MINIPORT_BLOCK NextGlobalMiniport;
// 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;
#if LOCK_DBG
ULONG LockDbg;
ULONG LockDbgX;
PVOID LockThread;
#endif
#if !(NDIS_NT)
PNDIS_PACKET LoopbackHead;
PNDIS_PACKET LoopbackTail;
#endif
#endif // NDIS_WRAPPER defined
};
// Routines for intermediate miniport drivers.
typedef
VOID
(*W_MINIPORT_CALLBACK)(
IN NDIS_HANDLE MiniportAdapterContext,
IN PVOID CallbackContext
);
// These are now obsolete. Use Deserialized driver model for optimal performance.
EXPORT
NDIS_STATUS
NdisIMQueueMiniportCallback(
IN NDIS_HANDLE MiniportAdapterHandle,
IN W_MINIPORT_CALLBACK CallbackRoutine,
IN PVOID CallbackContext
);
EXPORT
BOOLEAN
NdisIMSwitchToMiniport(
IN NDIS_HANDLE MiniportAdapterHandle,
OUT PNDIS_HANDLE SwitchHandle
);
EXPORT
VOID
NdisIMRevertBack(
IN NDIS_HANDLE MiniportAdapterHandle,
IN NDIS_HANDLE SwitchHandle
);
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 PhysicalMapRegistersNeeded,
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)
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
);
// 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(
IN PNDIS_PACKET DstPacket,
IN PNDIS_PACKET SrcPacket
);
EXPORT
VOID
NdisIMCopySendCompletePerPacketInfo(
IN PNDIS_PACKET DstPacket,
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
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
);
// 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_)