reactos/reactos/include/net/ndis.h
2004-10-10 17:16:42 +00:00

5697 lines
161 KiB
C

/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS NDIS library
* FILE: include/net/ndis.h
* PURPOSE: Structures used by NDIS drivers
* DEFINES: i386 - Target platform is i386
* NDIS_WRAPPER - Define only for NDIS wrapper 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
* NDIS_WDM - Include wdm.h (currently just pulls in ntddk.h)
*
* NOTES: If NDIS_WDM is not defined, ntddk.h is included instead
*
* I have removed the following standard flag, used for building binary-compatible
* drivers for windows 98 and windows me:
*
* BINARY_COMPATIBLE - 0 = Use macros for some features
* - 1 = Use imports for features not available
*
* rationale: you're never going to use *this* ndis.h to build a driver for win9x. You'll
* use the MS ddk. This assumption drammatically simplifies ndis.h.
*
* There have been lots of instances of stdcall/cdecl mismatches, particularly in the
* callback routines. I have now nailed them all to STDCALL, which is what they ought to
* be. If you cross-check with the ndis.h from the MS DDK, you'll note that the compiler
* is set to a default calling conveition of stdcall with the /Gz command-line switch.
* There are only a few functions that should actually be cdecl:
* - DbgPrint()
* - DbgPrintReturnControlC()
* - NdisWriteErrorLogEntry()
*
* All other functions declared in ndis.h should be stdcall.
*
* TODO:
* - finish sanitizing NDIS40 and NDIS50; think about NDIS51
* - make sure everything is stdcall
*/
#ifndef __NDIS_H
#define __NDIS_H
#if __GNUC__ >=3
#pragma GCC system_header
#endif
#ifdef __cplusplus
extern "C" {
#endif
#pragma pack(push,4)
#include "ntddk.h"
#include "ntddndis.h"
#include <ddk/netpnp.h>
#ifdef NDIS50
#undef NDIS40
#define NDIS40
#endif
#ifndef UNALIGNED
#define UNALIGNED
#endif
#ifndef FASTCALL
#define FASTCALL __attribute__((fastcall))
#endif
/* The NDIS library exports functions. NDIS miniport drivers import functions */
#ifdef NDIS_WRAPPER
#ifdef _MSC_VER
#define DDKAPI __declspec(dllexport)
#else
#define DDKAPI STDCALL /* MS ndis.h is 100% stdcall due to compiler flag /Gz */
#endif
#else /* NDIS_WRAPPER */
#ifdef _MSC_VER
#define DDKAPI __declspec(dllimport)
#else
#define DDKAPI STDCALL
#endif
#endif /* NDIS_WRAPPER */
/* support NDIS_WDM and MAC drivers */
#if defined (NDIS_WDM)
#include <wdm.h>
#else
#include <ntddk.h>
#endif
/* Assert stuff */
#ifdef DBG
VOID
STDCALL
RtlAssert (
PVOID FailedAssertion,
PVOID FileName,
ULONG LineNumber,
PCHAR Message
);
#define ASSERT( exp ) if (!(exp)) RtlAssert( #exp, __FILE__, __LINE__, NULL )
#define ASSERTMSG( msg, exp ) if (!(exp)) RtlAssert( #exp, __FILE__, __LINE__, msg )
#define PAGED_CODE() if (KeGetCurrentIrql() > APC_LEVEL) ASSERT(0);
#else
#define ASSERT( exp )
#define ASSERTMSG( msg, exp )
#define PAGED_CODE()
#endif /* DBG */
/* Base types */
#define IN
#define OUT
#define OPTIONAL
typedef CONST CHAR *PCSTR;
typedef struct _DMA_CONFIGURATION_BYTE0
{
UCHAR Channel:3;
UCHAR Reserved:3;
UCHAR Shared:1;
UCHAR MoreEntries:1;
} DMA_CONFIGURATION_BYTE0;
typedef struct _DMA_CONFIGURATION_BYTE1
{
UCHAR Reserved0:2;
UCHAR TransferSize:2;
UCHAR Timing:2;
UCHAR Reserved1:2;
} DMA_CONFIGURATION_BYTE1;
typedef struct _EISA_MEMORY_TYPE
{
UCHAR ReadWrite:1;
UCHAR Cached:1;
UCHAR Reserved0:1;
UCHAR Type:2;
UCHAR Shared:1;
UCHAR Reserved1:1;
UCHAR MoreEntries:1;
} EISA_MEMORY_TYPE, *PEISA_MEMORY_TYPE;
typedef struct _EISA_MEMORY_CONFIGURATION
{
EISA_MEMORY_TYPE ConfigurationByte;
UCHAR DataSize;
USHORT AddressLowWord;
UCHAR AddressHighByte;
USHORT MemorySize;
} EISA_MEMORY_CONFIGURATION, *PEISA_MEMORY_CONFIGURATION;
typedef struct _EISA_IRQ_DESCRIPTOR
{
UCHAR Interrupt:4;
UCHAR Reserved:1;
UCHAR LevelTriggered:1;
UCHAR Shared:1;
UCHAR MoreEntries:1;
} EISA_IRQ_DESCRIPTOR, *PEISA_IRQ_DESCRIPTOR;
typedef struct _EISA_IRQ_CONFIGURATION
{
EISA_IRQ_DESCRIPTOR ConfigurationByte;
UCHAR Reserved;
} EISA_IRQ_CONFIGURATION, *PEISA_IRQ_CONFIGURATION;
typedef struct _EISA_DMA_CONFIGURATION
{
DMA_CONFIGURATION_BYTE0 ConfigurationByte0;
DMA_CONFIGURATION_BYTE1 ConfigurationByte1;
} EISA_DMA_CONFIGURATION, *PEISA_DMA_CONFIGURATION;
typedef struct _EISA_PORT_DESCRIPTOR
{
UCHAR NumberPorts:5;
UCHAR Reserved:1;
UCHAR Shared:1;
UCHAR MoreEntries:1;
} EISA_PORT_DESCRIPTOR, *PEISA_PORT_DESCRIPTOR;
typedef struct _EISA_PORT_CONFIGURATION
{
EISA_PORT_DESCRIPTOR Configuration;
USHORT PortAddress;
} EISA_PORT_CONFIGURATION, *PEISA_PORT_CONFIGURATION;
typedef struct _CM_EISA_SLOT_INFORMATION
{
UCHAR ReturnCode;
UCHAR ReturnFlags;
UCHAR MajorRevision;
UCHAR MinorRevision;
USHORT Checksum;
UCHAR NumberFunctions;
UCHAR FunctionInformation;
ULONG CompressedId;
} CM_EISA_SLOT_INFORMATION, *PCM_EISA_SLOT_INFORMATION;
typedef struct _CM_EISA_FUNCTION_INFORMATION
{
ULONG CompressedId;
UCHAR IdSlotFlags1;
UCHAR IdSlotFlags2;
UCHAR MinorRevision;
UCHAR MajorRevision;
UCHAR Selections[26];
UCHAR FunctionFlags;
UCHAR TypeString[80];
EISA_MEMORY_CONFIGURATION EisaMemory[9];
EISA_IRQ_CONFIGURATION EisaIrq[7];
EISA_DMA_CONFIGURATION EisaDma[4];
EISA_PORT_CONFIGURATION EisaPort[20];
UCHAR InitializationData[60];
} CM_EISA_FUNCTION_INFORMATION, *PCM_EISA_FUNCTION_INFORMATION;
ULONG CDECL DbgPrint(
PCH Format,
...);
/* Core kernel functions */
VOID
STDCALL
KeStallExecutionProcessor(
ULONG MicroSeconds);
#include <ddk/netevent.h>
#include "ndisoid.h"
#include "ntddndis.h"
#if !defined(_MSC_VER)
#ifndef GUID_DEFINED
#define GUID_DEFINED
typedef struct _GUID {
ULONG Data1;
USHORT Data2;
USHORT Data3;
UCHAR Data4[8];
} GUID;
#endif /* _GUID_DEFINED */
#endif /* _MSC_VER */
/* 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 UNICODE_STRING NDIS_STRING, *PNDIS_STRING;
typedef MDL NDIS_BUFFER, *PNDIS_BUFFER;
/* 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_WW_INDICATION ((NDIS_STATUS)0x40010012L)
#define NDIS_STATUS_TAPI_INDICATION ((NDIS_STATUS)0x40010080L)
#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)
/* NDIS error codes for error logging */
#define NDIS_ERROR_CODE ULONG
#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 MAXIMUM_PROCESSORS 32
/* Lock */
typedef union _NDIS_RW_LOCK_REFCOUNT {
UINT RefCount;
UCHAR cacheLine[16];
} NDIS_RW_LOCK_REFCOUNT;
typedef struct _NDIS_RW_LOCK {
union {
struct {
KSPIN_LOCK SpinLock;
PVOID Context;
} s;
UCHAR Reserved[16];
} u;
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
(*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;
VOID
DDKAPI
NdisInitializeTimer(
IN OUT PNDIS_TIMER Timer,
IN PNDIS_TIMER_FUNCTION TimerFunction,
IN PVOID FunctionContext);
VOID
DDKAPI
NdisSetTimer(
IN PNDIS_TIMER Timer,
IN UINT MillisecondsToDelay);
/* 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 driver medium (OID_GEN_MEDIA_SUPPORTED / OID_GEN_MEDIA_IN_USE) */
typedef enum _NDIS_MEDIUM {
NdisMedium802_3,
NdisMedium802_5,
NdisMediumFddi,
NdisMediumWan,
NdisMediumLocalTalk,
NdisMediumDix, /* Defined for convenience, not a real medium */
NdisMediumArcnetRaw,
NdisMediumArcnet878_2,
NdisMediumAtm,
NdisMediumWirelessWan,
NdisMediumIrda,
NdisMediumBpc,
NdisMediumCoWan,
NdisMedium1394,
NdisMediumMax
} NDIS_MEDIUM, *PNDIS_MEDIUM;
/* 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 struct _NDIS_PACKET_POOL {
NDIS_SPIN_LOCK SpinLock;
struct _NDIS_PACKET *FreeList;
UINT PacketLength;
UCHAR Buffer[1];
} NDIS_PACKET_POOL, * PNDIS_PACKET_POOL;
typedef struct _NDIS_PACKET_PRIVATE {
UINT PhysicalCount;
UINT TotalLength;
PNDIS_BUFFER Head;
PNDIS_BUFFER Tail;
PNDIS_PACKET_POOL Pool;
UINT Count;
ULONG Flags; /* See fPACKET_xxx bits below */
BOOLEAN ValidCounts;
UCHAR NdisPacketFlags;
USHORT NdisPacketOobOffset;
} NDIS_PACKET_PRIVATE, * PNDIS_PACKET_PRIVATE;
#define fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO 0x40
#define fPACKET_ALLOCATED_BY_NDIS 0x80
typedef struct _NDIS_PACKET {
NDIS_PACKET_PRIVATE Private;
union {
struct {
UCHAR MiniportReserved[2*sizeof(PVOID)];
UCHAR WrapperReserved[2*sizeof(PVOID)];
} s1;
struct {
UCHAR MiniportReservedEx[3*sizeof(PVOID)];
UCHAR WrapperReservedEx[sizeof(PVOID)];
} s2;
struct {
UCHAR MacReserved[4*sizeof(PVOID)];
} s3;
} u;
ULONG_PTR Reserved[2];
UCHAR ProtocolReserved[1];
} NDIS_PACKET, *PNDIS_PACKET, **PPNDIS_PACKET;
typedef struct _NDIS_PACKET_OOB_DATA {
union {
ULONGLONG TimeToSend;
ULONGLONG TimeSent;
} u;
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;
/* 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[16];
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;
#ifdef NDIS50
UCHAR NdisReserved[36];
union {
UCHAR CallMgrReserved[8];
UCHAR ProtocolReserved[8];
};
UCHAR MiniportReserved[8];
#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;
BOOLEAN InProgress;
} NDIS_DMA_BLOCK, *PNDIS_DMA_BLOCK;
#define NDIS_DMA_24BITS 0
#define NDIS_DMA_32BITS 1
#define NDIS_DMA_64BITS 2
/* Possible hardware architecture */
typedef enum _NDIS_INTERFACE_TYPE {
NdisInterfaceInternal = Internal,
NdisInterfaceIsa = Isa,
NdisInterfaceEisa = Eisa,
NdisInterfaceMca = MicroChannel,
NdisInterfaceTurboChannel = TurboChannel,
NdisInterfacePci = PCIBus,
NdisInterfacePcMcia = PCMCIABus
} NDIS_INTERFACE_TYPE, *PNDIS_INTERFACE_TYPE;
#define NdisInterruptLevelSensitive LevelSensitive
#define NdisInterruptLatched Latched
typedef KINTERRUPT_MODE NDIS_INTERRUPT_MODE, *PNDIS_INTERRUPT_MODE;
typedef enum _NDIS_PROCESSOR_TYPE {
NdisProcessorX86,
NdisProcessorMips,
NdisProcessorAlpha,
NdisProcessorPpc
} NDIS_PROCESSOR_TYPE, *PNDIS_PROCESSOR_TYPE;
typedef enum _NDIS_ENVIRONMENT_TYPE {
NdisEnvironmentWindows,
NdisEnvironmentWindowsNt
} NDIS_ENVIRONMENT_TYPE, *PNDIS_ENVIRONMENT_TYPE;
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 VOID
(STDCALL *ADAPTER_SHUTDOWN_HANDLER)(
IN PVOID ShutdownContext);
//#ifdef NDIS_WRAPPER
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
//#endif /* NDIS_WRAPPER */
typedef struct _ATM_ADDRESS ATM_ADDRESS, *PATM_ADDRESS;
/* 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 enum _NDIS_AF {
CO_ADDRESS_FAMILY_Q2931 = 1,
CO_ADDRESS_FAMILY_SPANS,
} NDIS_AF, *PNDIS_AF;
typedef struct {
NDIS_AF AddressFamily;
ULONG MajorVersion;
ULONG MinorVersion;
} CO_ADDRESS_FAMILY, *PCO_ADDRESS_FAMILY;
typedef enum {
BestEffortService,
PredictiveService,
GuaranteedService
} GUARANTEE;
typedef struct _CO_FLOW_PARAMETERS {
ULONG TokenRate; /* In Bytes/sec */
ULONG TokenBucketSize; /* In Bytes */
ULONG PeakBandwidth; /* In Bytes/sec */
ULONG Latency; /* In microseconds */
ULONG DelayVariation; /* In microseconds */
GUARANTEE LevelOfGuarantee; /* Guaranteed, Predictive or Best Effort */
ULONG CostOfCall; /* Reserved for future use, */
/* must be set to 0 now */
ULONG NetworkAvailability; /* read-only: 1 if accessible, 0 if not */
ULONG MaxSduSize; /* In Bytes */
} CO_FLOW_PARAMETERS, *PCO_FLOW_PARAMETERS;
typedef struct _CO_SPECIFIC_PARAMETERS {
ULONG ParamType;
ULONG Length;
UCHAR Parameters[1];
} CO_SPECIFIC_PARAMETERS, *PCO_SPECIFIC_PARAMETERS;
typedef struct _CO_CALL_MANAGER_PARAMETERS {
CO_FLOW_PARAMETERS Transmit;
CO_FLOW_PARAMETERS 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;
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 {
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;
} u;
} NDIS_IPSEC_PACKET_INFO, *PNDIS_IPSEC_PACKET_INFO;
#if 0
/* Plug and play and power management */
/* PnP and PM event codes */
typedef enum _NET_PNP_EVENT_CODE {
NetEventSetPower,
NetEventQueryPower,
NetEventQueryRemoveDevice,
NetEventCancelRemoveDevice,
NetEventReconfigure,
NetEventBindList,
NetEventBindsComplete,
NetEventPnPCapabilities,
NetEventMaximum
} NET_PNP_EVENT_CODE, *PNET_PNP_EVENT_CODE;
/* Networking PnP event indication structure */
typedef struct _NET_PNP_EVENT {
/* Event code */
NET_PNP_EVENT_CODE NetEvent;
/* Event specific data */
PVOID Buffer;
/* Length of event specific data */
ULONG BufferLength;
/* Reserved areas */
ULONG_PTR NdisReserved[4];
ULONG_PTR TransportReserved[4];
ULONG_PTR TdiReserved[4];
ULONG_PTR TdiClientReserved[4];
} NET_PNP_EVENT, *PNET_PNP_EVENT;
/* Device power state structure */
typedef enum _NET_DEVICE_POWER_STATE {
NetDeviceStateUnspecified = 0,
NetDeviceStateD0,
NetDeviceStateD1,
NetDeviceStateD2,
NetDeviceStateD3,
NetDeviceStateMaximum
} NET_DEVICE_POWER_STATE, *PNET_DEVICE_POWER_STATE;
#endif
/* Call Manager */
typedef NDIS_STATUS STDCALL_FUNC (*CO_CREATE_VC_HANDLER)(
IN NDIS_HANDLE ProtocolAfContext,
IN NDIS_HANDLE NdisVcHandle,
OUT PNDIS_HANDLE ProtocolVcContext);
typedef NDIS_STATUS STDCALL_FUNC (*CO_DELETE_VC_HANDLER)(
IN NDIS_HANDLE ProtocolVcContext);
typedef NDIS_STATUS STDCALL_FUNC (*CO_REQUEST_HANDLER)(
IN NDIS_HANDLE ProtocolAfContext,
IN NDIS_HANDLE ProtocolVcContext OPTIONAL,
IN NDIS_HANDLE ProtocolPartyContext OPTIONAL,
IN OUT PNDIS_REQUEST NdisRequest);
typedef VOID STDCALL_FUNC (*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 STDCALL_FUNC (*CM_OPEN_AF_HANDLER)(
IN NDIS_HANDLE CallMgrBindingContext,
IN PCO_ADDRESS_FAMILY AddressFamily,
IN NDIS_HANDLE NdisAfHandle,
OUT PNDIS_HANDLE CallMgrAfContext
);
typedef
NDIS_STATUS
(STDCALL *CM_CLOSE_AF_HANDLER)(
IN NDIS_HANDLE CallMgrAfContext);
typedef
NDIS_STATUS
(STDCALL *CM_REG_SAP_HANDLER)(
IN NDIS_HANDLE CallMgrAfContext,
IN PCO_SAP Sap,
IN NDIS_HANDLE NdisSapHandle,
OUT PNDIS_HANDLE CallMgrSapContext);
typedef
NDIS_STATUS
(STDCALL *CM_DEREG_SAP_HANDLER)(
IN NDIS_HANDLE CallMgrSapContext);
typedef
NDIS_STATUS
(STDCALL *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
(STDCALL *CM_CLOSE_CALL_HANDLER)(
IN NDIS_HANDLE CallMgrVcContext,
IN NDIS_HANDLE CallMgrPartyContext OPTIONAL,
IN PVOID CloseData OPTIONAL,
IN UINT Size OPTIONAL);
typedef
VOID
(STDCALL *CM_INCOMING_CALL_COMPLETE_HANDLER)(
IN NDIS_STATUS Status,
IN NDIS_HANDLE CallMgrVcContext,
IN PCO_CALL_PARAMETERS CallParameters);
typedef
NDIS_STATUS
STDCALL_FUNC (*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
STDCALL_FUNC (*CM_DROP_PARTY_HANDLER)(
IN NDIS_HANDLE CallMgrPartyContext,
IN PVOID CloseData OPTIONAL,
IN UINT Size OPTIONAL
);
typedef
VOID
STDCALL_FUNC (*CM_ACTIVATE_VC_COMPLETE_HANDLER)(
IN NDIS_STATUS Status,
IN NDIS_HANDLE CallMgrVcContext,
IN PCO_CALL_PARAMETERS CallParameters
);
typedef
VOID
STDCALL_FUNC (*CM_DEACTIVATE_VC_COMPLETE_HANDLER)(
IN NDIS_STATUS Status,
IN NDIS_HANDLE CallMgrVcContext
);
typedef
NDIS_STATUS
(STDCALL *CM_MODIFY_CALL_QOS_HANDLER)(
IN NDIS_HANDLE CallMgrVcContext,
IN PCO_CALL_PARAMETERS CallParameters);
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 STDCALL_FUNC (*CL_OPEN_AF_COMPLETE_HANDLER)(
IN NDIS_STATUS Status,
IN NDIS_HANDLE ProtocolAfContext,
IN NDIS_HANDLE NdisAfHandle);
typedef VOID
(STDCALL *CL_CLOSE_AF_COMPLETE_HANDLER)(
IN NDIS_STATUS Status,
IN NDIS_HANDLE ProtocolAfContext);
typedef VOID
(STDCALL *CL_REG_SAP_COMPLETE_HANDLER)(
IN NDIS_STATUS Status,
IN NDIS_HANDLE ProtocolSapContext,
IN PCO_SAP Sap,
IN NDIS_HANDLE NdisSapHandle);
typedef VOID
(STDCALL *CL_DEREG_SAP_COMPLETE_HANDLER)(
IN NDIS_STATUS Status,
IN NDIS_HANDLE ProtocolSapContext);
typedef VOID
(STDCALL *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
(STDCALL *CL_MODIFY_CALL_QOS_COMPLETE_HANDLER)(
IN NDIS_STATUS Status,
IN NDIS_HANDLE ProtocolVcContext,
IN PCO_CALL_PARAMETERS CallParameters);
typedef VOID
(STDCALL *CL_CLOSE_CALL_COMPLETE_HANDLER)(
IN NDIS_STATUS Status,
IN NDIS_HANDLE ProtocolVcContext,
IN NDIS_HANDLE ProtocolPartyContext OPTIONAL);
typedef VOID
(STDCALL *CL_ADD_PARTY_COMPLETE_HANDLER)(
IN NDIS_STATUS Status,
IN NDIS_HANDLE ProtocolPartyContext,
IN NDIS_HANDLE NdisPartyHandle,
IN PCO_CALL_PARAMETERS CallParameters);
typedef VOID
(STDCALL *CL_DROP_PARTY_COMPLETE_HANDLER)(
IN NDIS_STATUS Status,
IN NDIS_HANDLE ProtocolPartyContext);
typedef NDIS_STATUS
(STDCALL *CL_INCOMING_CALL_HANDLER)(
IN NDIS_HANDLE ProtocolSapContext,
IN NDIS_HANDLE ProtocolVcContext,
IN OUT PCO_CALL_PARAMETERS CallParameters);
typedef VOID
(STDCALL *CL_INCOMING_CALL_QOS_CHANGE_HANDLER)(
IN NDIS_HANDLE ProtocolVcContext,
IN PCO_CALL_PARAMETERS CallParameters);
typedef VOID
(STDCALL *CL_INCOMING_CLOSE_CALL_HANDLER)(
IN NDIS_STATUS CloseStatus,
IN NDIS_HANDLE ProtocolVcContext,
IN PVOID CloseData OPTIONAL,
IN UINT Size OPTIONAL);
typedef VOID
(STDCALL *CL_INCOMING_DROP_PARTY_HANDLER)(
IN NDIS_STATUS DropStatus,
IN NDIS_HANDLE ProtocolPartyContext,
IN PVOID CloseData OPTIONAL,
IN UINT Size OPTIONAL);
typedef VOID
(STDCALL *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
(STDCALL *OPEN_ADAPTER_COMPLETE_HANDLER)(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_STATUS Status,
IN NDIS_STATUS OpenErrorStatus);
typedef VOID
(STDCALL *CLOSE_ADAPTER_COMPLETE_HANDLER)(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_STATUS Status);
typedef VOID
(STDCALL *RESET_COMPLETE_HANDLER)(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_STATUS Status);
typedef VOID
(STDCALL *REQUEST_COMPLETE_HANDLER)(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_REQUEST NdisRequest,
IN NDIS_STATUS Status);
typedef VOID
(STDCALL *STATUS_HANDLER)(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_STATUS GeneralStatus,
IN PVOID StatusBuffer,
IN UINT StatusBufferSize);
typedef VOID
(STDCALL *STATUS_COMPLETE_HANDLER)(
IN NDIS_HANDLE ProtocolBindingContext);
typedef VOID
(STDCALL *SEND_COMPLETE_HANDLER)(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_PACKET Packet,
IN NDIS_STATUS Status);
typedef VOID
(STDCALL *WAN_SEND_COMPLETE_HANDLER)(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_WAN_PACKET Packet,
IN NDIS_STATUS Status);
typedef VOID
(STDCALL *TRANSFER_DATA_COMPLETE_HANDLER)(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_PACKET Packet,
IN NDIS_STATUS Status,
IN UINT BytesTransferred);
typedef VOID
(STDCALL *WAN_TRANSFER_DATA_COMPLETE_HANDLER)(
VOID);
typedef NDIS_STATUS
(STDCALL *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
(STDCALL *WAN_RECEIVE_HANDLER)(
IN NDIS_HANDLE NdisLinkHandle,
IN PUCHAR Packet,
IN ULONG PacketSize);
typedef VOID
(STDCALL *RECEIVE_COMPLETE_HANDLER)(
IN NDIS_HANDLE ProtocolBindingContext);
/* Protocol characteristics for NDIS 3.0 protocols */
#ifdef _MSC_VER
typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS {
UCHAR MajorNdisVersion;
UCHAR MinorNdisVersion;
union
{
UINT Reserved;
UINT Flags;
} u1;
OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler;
CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler;
union
{
SEND_COMPLETE_HANDLER SendCompleteHandler;
WAN_SEND_COMPLETE_HANDLER WanSendCompleteHandler;
} u2;
union
{
TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler;
WAN_TRANSFER_DATA_COMPLETE_HANDLER WanTransferDataCompleteHandler;
} u3;
RESET_COMPLETE_HANDLER ResetCompleteHandler;
REQUEST_COMPLETE_HANDLER RequestCompleteHandler;
union
{
RECEIVE_HANDLER ReceiveHandler;
WAN_RECEIVE_HANDLER WanReceiveHandler;
} u4;
RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler;
STATUS_HANDLER StatusHandler;
STATUS_COMPLETE_HANDLER StatusCompleteHandler;
NDIS_STRING Name;
} NDIS30_PROTOCOL_CHARACTERISTICS;
typedef NDIS30_PROTOCOL_CHARACTERISTICS NDIS30_PROTOCOL_CHARACTERISTICS_S;
#else
#define NDIS30_PROTOCOL_CHARACTERISTICS \
UCHAR MajorNdisVersion; \
UCHAR MinorNdisVersion; \
union { \
UINT Reserved; \
UINT Flags; \
} u1; \
OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler; \
CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler; \
union { \
SEND_COMPLETE_HANDLER SendCompleteHandler; \
WAN_SEND_COMPLETE_HANDLER WanSendCompleteHandler; \
} u2; \
union { \
TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler; \
WAN_TRANSFER_DATA_COMPLETE_HANDLER WanTransferDataCompleteHandler; \
} u3; \
RESET_COMPLETE_HANDLER ResetCompleteHandler; \
REQUEST_COMPLETE_HANDLER RequestCompleteHandler; \
union { \
RECEIVE_HANDLER ReceiveHandler; \
WAN_RECEIVE_HANDLER WanReceiveHandler; \
} u4; \
RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler; \
STATUS_HANDLER StatusHandler; \
STATUS_COMPLETE_HANDLER StatusCompleteHandler; \
NDIS_STRING Name;
typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS_S {
NDIS30_PROTOCOL_CHARACTERISTICS;
} NDIS30_PROTOCOL_CHARACTERISTICS_S, *PNDIS30_PROTOCOL_CHARACTERISTICS_S;
#endif
/* Prototypes for NDIS 4.0 protocol characteristics */
typedef INT
(STDCALL *RECEIVE_PACKET_HANDLER)(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_PACKET Packet);
typedef VOID
(STDCALL *BIND_HANDLER)(
OUT PNDIS_STATUS Status,
IN NDIS_HANDLE BindContext,
IN PNDIS_STRING DeviceName,
IN PVOID SystemSpecific1,
IN PVOID SystemSpecific2);
typedef VOID
(STDCALL *UNBIND_HANDLER)(
OUT PNDIS_STATUS Status,
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_HANDLE UnbindContext);
typedef VOID
(STDCALL *TRANSLATE_HANDLER)(
OUT PNDIS_STATUS Status,
IN NDIS_HANDLE ProtocolBindingContext,
OUT PNET_PNP_ID IdList,
IN ULONG IdListLength,
OUT PULONG BytesReturned);
typedef VOID
(STDCALL *UNLOAD_PROTOCOL_HANDLER)(
VOID);
/* Protocol characteristics for NDIS 4.0 protocols */
#ifdef _MSC_VER
typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS {
NDIS30_PROTOCOL_CHARACTERISTICS;
RECEIVE_PACKET_HANDLER ReceivePacketHandler;
BIND_HANDLER BindAdapterHandler;
UNBIND_HANDLER UnbindAdapterHandler;
TRANSLATE_HANDLER TranslateHandler;
UNLOAD_PROTOCOL_HANDLER UnloadHandler;
} NDIS40_PROTOCOL_CHARACTERISTICS;
typedef NDIS40_PROTOCOL_CHARACTERISTICS NDIS40_PROTOCOL_CHARACTERISTICS_S;
#else
#define NDIS40_PROTOCOL_CHARACTERISTICS \
NDIS30_PROTOCOL_CHARACTERISTICS; \
RECEIVE_PACKET_HANDLER ReceivePacketHandler; \
BIND_HANDLER BindAdapterHandler; \
UNBIND_HANDLER UnbindAdapterHandler; \
TRANSLATE_HANDLER TranslateHandler; \
UNLOAD_PROTOCOL_HANDLER UnloadHandler;
typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS_S {
NDIS40_PROTOCOL_CHARACTERISTICS;
} NDIS40_PROTOCOL_CHARACTERISTICS_S, *PNDIS40_PROTOCOL_CHARACTERISTICS_S;
#endif
/* Prototypes for NDIS 5.0 protocol characteristics */
#ifdef NDIS50
typedef VOID
(STDCALL *CO_SEND_COMPLETE_HANDLER)(
IN NDIS_STATUS Status,
IN NDIS_HANDLE ProtocolVcContext,
IN PNDIS_PACKET Packet);
typedef VOID
(STDCALL *CO_STATUS_HANDLER)(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_HANDLE ProtocolVcContext OPTIONAL,
IN NDIS_STATUS GeneralStatus,
IN PVOID StatusBuffer,
IN UINT StatusBufferSize);
typedef UINT
(STDCALL *CO_RECEIVE_PACKET_HANDLER)(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_HANDLE ProtocolVcContext,
IN PNDIS_PACKET Packet);
typedef VOID
(STDCALL *CO_AF_REGISTER_NOTIFY_HANDLER)(
IN NDIS_HANDLE ProtocolBindingContext,
IN PCO_ADDRESS_FAMILY AddressFamily);
#ifdef _MSC_VER
typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS {
NDIS40_PROTOCOL_CHARACTERISTICS;
PVOID ReservedHandlers[4];
CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler;
CO_STATUS_HANDLER CoStatusHandler;
CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler;
CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
} NDIS50_PROTOCOL_CHARACTERISTICS;
typedef NDIS50_PROTOCOL_CHARACTERISTICS NDIS50_PROTOCOL_CHARACTERISTICS_S;
#else
#define NDIS50_PROTOCOL_CHARACTERISTICS \
NDIS40_PROTOCOL_CHARACTERISTICS; \
PVOID ReservedHandlers[4]; \
CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler; \
CO_STATUS_HANDLER CoStatusHandler; \
CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler; \
CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS_S {
NDIS50_PROTOCOL_CHARACTERISTICS;
} NDIS50_PROTOCOL_CHARACTERISTICS_S, *PNDIS50_PROTOCOL_CHARACTERISTICS_S;
#endif
#endif /* NDIS50 */
#ifndef NDIS50
#ifndef NDIS40
typedef struct _NDIS_PROTOCOL_CHARACTERISTICS {
NDIS30_PROTOCOL_CHARACTERISTICS;
} NDIS_PROTOCOL_CHARACTERISTICS;
#else /* NDIS40 */
typedef struct _NDIS_PROTOCOL_CHARACTERISTICS {
NDIS40_PROTOCOL_CHARACTERISTICS;
} NDIS_PROTOCOL_CHARACTERISTICS;
#endif /* NDIS40 */
#else /* NDIS50 */
typedef struct _NDIS_PROTOCOL_CHARACTERISTICS {
NDIS50_PROTOCOL_CHARACTERISTICS;
} NDIS_PROTOCOL_CHARACTERISTICS;
#endif /* NDIS50 */
typedef NDIS_PROTOCOL_CHARACTERISTICS *PNDIS_PROTOCOL_CHARACTERISTICS;
/* Buffer management routines */
VOID
DDKAPI
NdisAllocateBuffer(
OUT PNDIS_STATUS Status,
OUT PNDIS_BUFFER *Buffer,
IN NDIS_HANDLE PoolHandle,
IN PVOID VirtualAddress,
IN UINT Length);
VOID
DDKAPI
NdisAllocateBufferPool(
OUT PNDIS_STATUS Status,
OUT PNDIS_HANDLE PoolHandle,
IN UINT NumberOfDescriptors);
VOID
DDKAPI
NdisAllocatePacket(
OUT PNDIS_STATUS Status,
OUT PNDIS_PACKET *Packet,
IN NDIS_HANDLE PoolHandle);
VOID
DDKAPI
NdisAllocatePacketPool(
OUT PNDIS_STATUS Status,
OUT PNDIS_HANDLE PoolHandle,
IN UINT NumberOfDescriptors,
IN UINT ProtocolReservedLength);
VOID
DDKAPI
NdisCopyBuffer(
OUT PNDIS_STATUS Status,
OUT PNDIS_BUFFER *Buffer,
IN NDIS_HANDLE PoolHandle,
IN PVOID MemoryDescriptor,
IN UINT Offset,
IN UINT Length);
VOID
DDKAPI
NdisCopyFromPacketToPacket(
IN PNDIS_PACKET Destination,
IN UINT DestinationOffset,
IN UINT BytesToCopy,
IN PNDIS_PACKET Source,
IN UINT SourceOffset,
OUT PUINT BytesCopied);
VOID
DDKAPI
NdisDprAllocatePacket(
OUT PNDIS_STATUS Status,
OUT PNDIS_PACKET *Packet,
IN NDIS_HANDLE PoolHandle);
VOID
DDKAPI
NdisDprAllocatePacketNonInterlocked(
OUT PNDIS_STATUS Status,
OUT PNDIS_PACKET *Packet,
IN NDIS_HANDLE PoolHandle);
VOID
DDKAPI
NdisDprFreePacket(
IN PNDIS_PACKET Packet);
VOID
DDKAPI
NdisDprFreePacketNonInterlocked(
IN PNDIS_PACKET Packet);
VOID
DDKAPI
NdisFreeBufferPool(
IN NDIS_HANDLE PoolHandle);
VOID
DDKAPI
NdisFreePacket(
IN PNDIS_PACKET Packet);
VOID
DDKAPI
NdisFreePacketPool(
IN NDIS_HANDLE PoolHandle);
VOID
DDKAPI
NdisReturnPackets(
IN PNDIS_PACKET *PacketsToReturn,
IN UINT NumberOfPackets);
VOID
DDKAPI
NdisUnchainBufferAtBack(
IN OUT PNDIS_PACKET Packet,
OUT PNDIS_BUFFER *Buffer);
VOID
DDKAPI
NdisUnchainBufferAtFront(
IN OUT PNDIS_PACKET Packet,
OUT PNDIS_BUFFER *Buffer);
VOID
DDKAPI
NdisAdjustBufferLength(
IN PNDIS_BUFFER Buffer,
IN UINT Length);
ULONG
DDKAPI
NDIS_BUFFER_TO_SPAN_PAGES(
IN PNDIS_BUFFER Buffer);
VOID
DDKAPI
NdisFreeBuffer(
IN PNDIS_BUFFER Buffer);
/*
* VOID NdisGetBufferPhysicalArraySize(
* IN PNDIS_BUFFER Buffer,
* OUT PUINT ArraySize);
*/
VOID
DDKAPI
NdisGetBufferPhysicalArraySize(
IN PNDIS_BUFFER Buffer,
OUT PUINT ArraySize);
/*
* VOID NdisGetFirstBufferFromPacket(
* IN PNDIS_PACKET _Packet,
* OUT PNDIS_BUFFER * _FirstBuffer,
* OUT PVOID * _FirstBufferVA,
* OUT PUINT _FirstBufferLength,
* OUT PUINT _TotalBufferLength)
*/
VOID
DDKAPI
NdisGetFirstBufferFromPacket(
IN PNDIS_PACKET _Packet,
OUT PNDIS_BUFFER * _FirstBuffer,
OUT PVOID * _FirstBufferVA,
OUT PUINT _FirstBufferLength,
OUT PUINT _TotalBufferLength);
VOID
DDKAPI
NdisQueryBuffer(
IN PNDIS_BUFFER Buffer,
OUT PVOID *VirtualAddress OPTIONAL,
OUT PUINT Length);
VOID
DDKAPI
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; \
}
/*
* UINT NDIS_GET_PACKET_HEADER_SIZE(
* IN PNDIS_PACKET Packet);
*/
#define NDIS_GET_PACKET_HEADER_SIZE(Packet) \
{ \
}
/*
* 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) \
{ \
}
/*
* VOID
* NDIS_STATUS NDIS_GET_PACKET_STATUS(
* IN PNDIS_PACKET Packet);
*/
#define NDIS_GET_PACKET_STATUS (Packet) \
{ \
}
/*
* ULONGLONG NDIS_GET_PACKET_TIME_RECEIVED(
* IN PNDIS_PACKET Packet);
*/
#define NDIS_GET_PACKET_TIME_RECEIVED(Packet) \
{ \
}
/*
* ULONGLONG
* NDIS_GET_PACKET_TIME_SENT(
* IN PNDIS_PACKET Packet);
*/
#define NDIS_GET_PACKET_TIME_SENT(Packet) \
{ \
}
/*
* ULONGLONG
* NDIS_GET_PACKET_TIME_TO_SEND(
* IN PNDIS_PACKET Packet);
*/
#define NDIS_GET_PACKET_TIME_TO_SEND(Packet) \
{ \
}
/*
* PNDIS_PACKET_OOB_DATA
* NDIS_OOB_DATA_FROM_PACKET(
* IN PNDIS_PACKET _Packet);
*/
#define NDIS_OOB_DATA_FROM_PACKET(_Packet) \
{ \
}
/*
* VOID
* NdisQueryPacket(
* IN PNDIS_PACKET Packet,
* OUT PUINT PhysicalBufferCount OPTIONAL,
* OUT PUINT BufferCount OPTIONAL,
* OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
* OUT PUINT TotalPacketLength OPTIONAL);
*/
#define NdisQueryPacket(Packet, \
PhysicalBufferCount, \
BufferCount, \
FirstBuffer, \
TotalPacketLength) \
{ \
if (FirstBuffer) \
*((PNDIS_BUFFER*)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) \
*((PUINT)PhysicalBufferCount) = (Packet)->Private.PhysicalCount; \
\
if (BufferCount) \
*((PUINT)BufferCount) = (Packet)->Private.Count; \
\
if (TotalPacketLength) \
*((PUINT)TotalPacketLength) = (Packet)->Private.TotalLength; \
} \
}
/*
* VOID
* NdisRecalculatePacketCounts(
* IN OUT PNDIS_PACKET Packet);
*/
#define NdisRecalculatePacketCounts(Packet) \
{ \
}
VOID
DDKAPI
NdisReinitializePacket(
IN OUT PNDIS_PACKET Packet);
/*
* 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) \
{ \
}
/*
* 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) \
{ \
}
/*
* VOID
* NDIS_SET_PACKET_STATUS(
* IN PNDIS_PACKET Packet,
* IN NDIS_STATUS Status);
*/
#define NDIS_SET_PACKET_STATUS(Packet, \
Status) \
{ \
}
/*
* VOID
* NDIS_SET_PACKET_TIME_RECEIVED(
* IN PNDIS_PACKET Packet,
* IN ULONGLONG TimeReceived);
*/
#define NDIS_SET_PACKET_TIME_RECEIVED(Packet) \
TimeReceived) \
{ \
}
/*
* VOID
* NDIS_SET_PACKET_TIME_SENT(
* IN PNDIS_PACKET Packet,
* IN ULONGLONG TimeSent);
*/
#define NDIS_SET_PACKET_TIME_SENT(Packet, \
TimeSent) \
{ \
}
/*
* VOID
* NDIS_SET_PACKET_TIME_TO_SEND(
* IN PNDIS_PACKET Packet,
* IN ULONGLONG TimeToSend);
*/
#define NDIS_SET_PACKET_TIME_TO_SEND(Packet, \
TimeToSend) \
{ \
}
/*
* VOID
* NdisSetSendFlags(
* IN PNDIS_PACKET Packet,
* IN UINT Flags);
*/
#define NdisSetSendFlags(Packet, Flags)( \
NdisSetPacketFlags((Packet), (Flags)))
/* Memory management routines */
VOID
DDKAPI
NdisCreateLookaheadBufferFromSharedMemory(
IN PVOID pSharedMemory,
IN UINT LookaheadLength,
OUT PVOID *pLookaheadBuffer);
VOID
DDKAPI
NdisDestroyLookaheadBufferFromSharedMemory(
IN PVOID pLookaheadBuffer);
VOID
DDKAPI
NdisMoveFromMappedMemory(
OUT PVOID Destination,
IN PVOID Source,
IN ULONG Length);
VOID
DDKAPI
NdisMoveMappedMemory(
OUT PVOID Destination,
IN PVOID Source,
IN ULONG Length);
VOID
DDKAPI
NdisMoveToMappedMemory(
OUT PVOID Destination,
IN PVOID Source,
IN ULONG Length);
VOID
DDKAPI
NdisMUpdateSharedMemory(
IN NDIS_HANDLE MiniportAdapterHandle,
IN ULONG Length,
IN PVOID VirtualAddress,
IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
NDIS_STATUS
DDKAPI
NdisAllocateMemory(
OUT PVOID *VirtualAddress,
IN UINT Length,
IN UINT MemoryFlags,
IN NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress);
VOID
DDKAPI
NdisFreeMemory(
IN PVOID VirtualAddress,
IN UINT Length,
IN UINT MemoryFlags);
VOID
DDKAPI
NdisImmediateReadSharedMemory(
IN NDIS_HANDLE WrapperConfigurationContext,
IN ULONG SharedMemoryAddress,
OUT PUCHAR Buffer,
IN ULONG Length);
VOID
DDKAPI
NdisImmediateWriteSharedMemory(
IN NDIS_HANDLE WrapperConfigurationContext,
IN ULONG SharedMemoryAddress,
IN PUCHAR Buffer,
IN ULONG Length);
VOID
DDKAPI
NdisMAllocateSharedMemory(
IN NDIS_HANDLE MiniportAdapterHandle,
IN ULONG Length,
IN BOOLEAN Cached,
OUT PVOID *VirtualAddress,
OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
NDIS_STATUS
DDKAPI
NdisMAllocateSharedMemoryAsync(
IN NDIS_HANDLE MiniportAdapterHandle,
IN ULONG Length,
IN BOOLEAN Cached,
IN PVOID Context);
VOID
DDKAPI
NdisMFreeSharedMemory(
IN NDIS_HANDLE MiniportAdapterHandle,
IN ULONG Length,
IN BOOLEAN Cached,
IN PVOID VirtualAddress,
IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
VOID
DDKAPI
NdisUpdateSharedMemory(
IN NDIS_HANDLE NdisAdapterHandle,
IN ULONG Length,
IN PVOID VirtualAddress,
IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
/*
* 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)} }
/*
* 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)
//
// System processor count
//
CCHAR
DDKAPI
NdisSystemProcessorCount(
VOID);
VOID
DDKAPI
NdisImmediateReadPortUchar(
IN NDIS_HANDLE WrapperConfigurationContext,
IN ULONG Port,
OUT PUCHAR Data);
VOID
DDKAPI
NdisImmediateReadPortUshort(
IN NDIS_HANDLE WrapperConfigurationContext,
IN ULONG Port,
OUT PUSHORT Data);
VOID
DDKAPI
NdisImmediateReadPortUlong(
IN NDIS_HANDLE WrapperConfigurationContext,
IN ULONG Port,
OUT PULONG Data);
VOID
DDKAPI
NdisImmediateWritePortUchar(
IN NDIS_HANDLE WrapperConfigurationContext,
IN ULONG Port,
IN UCHAR Data);
VOID
DDKAPI
NdisImmediateWritePortUshort(
IN NDIS_HANDLE WrapperConfigurationContext,
IN ULONG Port,
IN USHORT Data);
VOID
DDKAPI
NdisImmediateWritePortUlong(
IN NDIS_HANDLE WrapperConfigurationContext,
IN ULONG Port,
IN ULONG Data);
VOID
DDKAPI
NdisImmediateReadSharedMemory(
IN NDIS_HANDLE WrapperConfigurationContext,
IN ULONG SharedMemoryAddress,
IN PUCHAR Buffer,
IN ULONG Length);
VOID
DDKAPI
NdisImmediateWriteSharedMemory(
IN NDIS_HANDLE WrapperConfigurationContext,
IN ULONG SharedMemoryAddress,
IN PUCHAR Buffer,
IN ULONG Length);
ULONG
DDKAPI
NdisImmediateReadPciSlotInformation(
IN NDIS_HANDLE WrapperConfigurationContext,
IN ULONG SlotNumber,
IN ULONG Offset,
IN PVOID Buffer,
IN ULONG Length);
ULONG
DDKAPI
NdisImmediateWritePciSlotInformation(
IN NDIS_HANDLE WrapperConfigurationContext,
IN ULONG SlotNumber,
IN ULONG Offset,
IN PVOID Buffer,
IN ULONG Length);
ULONG
DDKAPI
NdisReadPciSlotInformation(
IN NDIS_HANDLE NdisAdapterHandle,
IN ULONG SlotNumber,
IN ULONG Offset,
IN PVOID Buffer,
IN ULONG Length);
ULONG
DDKAPI
NdisWritePciSlotInformation(
IN NDIS_HANDLE NdisAdapterHandle,
IN ULONG SlotNumber,
IN ULONG Offset,
IN PVOID Buffer,
IN ULONG Length);
/* String management routines */
/*
* NDIS_STATUS NdisAnsiStringToUnicodeString(
* IN OUT PNDIS_STRING DestinationString,
* IN PNDIS_ANSI_STRING SourceString);
*/
NDIS_STATUS
DDKAPI
NdisAnsiStringToUnicodeString(
IN OUT PNDIS_STRING DestinationString,
IN PANSI_STRING SourceString);
/*
* BOOLEAN
* NdisEqualString(
* IN PNDIS_STRING String1,
* IN PNDIS_STRING String2,
* IN BOOLEAN CaseInsensitive)
*/
BOOLEAN
DDKAPI
NdisEqualString(
IN PNDIS_STRING String1,
IN PNDIS_STRING String2,
IN BOOLEAN CaseInsensitive);
/*
* VOID NdisInitAnsiString(
* IN OUT PNDIS_ANSI_STRING DestinationString,
* IN PCSTR SourceString)
*/
VOID
DDKAPI
NdisInitAnsiString(
IN OUT PANSI_STRING DestinationString,
IN PCSTR SourceString);
/*
* VOID NdisInitUnicodeString(
* IN OUT PNDIS_STRING DestinationString,
* IN PCWSTR SourceString)
*/
VOID
DDKAPI
NdisInitUnicodeString(
IN OUT PNDIS_STRING DestinationString,
IN PCWSTR SourceString);
/*
* NDIS_STATUS NdisUnicodeStringToAnsiString(
* IN OUT PNDIS_ANSI_STRING DestinationString,
* IN PNDIS_STRING SourceString)
*/
NDIS_STATUS
DDKAPI
NdisUnicodeStringToAnsiString(
IN OUT PANSI_STRING DestinationString,
IN PNDIS_STRING SourceString);
#define NdisFreeString(_s) NdisFreeMemory((s).Buffer, (s).MaximumLength, 0)
#define NdisPrintString(_s) DbgPrint("%ls", (s).Buffer)
/* 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) \
*((PUCHAR)(Data)) = *(Register)
/*
* VOID
* NdisReadRegisterUlong(
* IN PULONG Register,
* OUT PULONG Data);
*/
#define NdisReadRegisterUlong(Register, Data) \
*((PULONG)(Data)) = *(Register)
/*
* VOID
* NdisReadRegisterUshort(
* IN PUSHORT Register,
* OUT PUSHORT Data);
*/
#define NdisReadRegisterUshort(Register, Data) \
*((PUSHORT)(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
DDKAPI
NdisInitializeListHead(
IN PLIST_ENTRY ListHead);
VOID
DDKAPI
NdisInterlockedAddUlong(
IN PULONG Addend,
IN ULONG Increment,
IN PNDIS_SPIN_LOCK SpinLock);
PLIST_ENTRY
DDKAPI
NdisInterlockedInsertHeadList(
IN PLIST_ENTRY ListHead,
IN PLIST_ENTRY ListEntry,
IN PNDIS_SPIN_LOCK SpinLock);
PLIST_ENTRY
DDKAPI
NdisInterlockedInsertTailList(
IN PLIST_ENTRY ListHead,
IN PLIST_ENTRY ListEntry,
IN PNDIS_SPIN_LOCK SpinLock);
PLIST_ENTRY
DDKAPI
NdisInterlockedRemoveHeadList(
IN PLIST_ENTRY ListHead,
IN PNDIS_SPIN_LOCK SpinLock);
VOID
DDKAPI
NdisCloseConfiguration(
IN NDIS_HANDLE ConfigurationHandle);
VOID
DDKAPI
NdisReadConfiguration(
OUT PNDIS_STATUS Status,
OUT PNDIS_CONFIGURATION_PARAMETER *ParameterValue,
IN NDIS_HANDLE ConfigurationHandle,
IN PNDIS_STRING Keyword,
IN NDIS_PARAMETER_TYPE ParameterType);
VOID
DDKAPI
NdisReadNetworkAddress(
OUT PNDIS_STATUS Status,
OUT PVOID *NetworkAddress,
OUT PUINT NetworkAddressLength,
IN NDIS_HANDLE ConfigurationHandle);
VOID
DDKAPI
NdisWriteConfiguration(
OUT PNDIS_STATUS Status,
IN NDIS_HANDLE ConfigurationHandle,
IN PNDIS_STRING Keyword,
IN PNDIS_CONFIGURATION_PARAMETER ParameterValue);
VOID
DDKAPI
NdisOpenConfiguration(
OUT PNDIS_STATUS Status,
OUT PNDIS_HANDLE ConfigurationHandle,
IN NDIS_HANDLE WrapperConfigurationContext);
VOID
DDKAPI
NdisOpenConfigurationKeyByIndex(
OUT PNDIS_STATUS Status,
IN NDIS_HANDLE ConfigurationHandle,
IN ULONG Index,
OUT PNDIS_STRING KeyName,
OUT PNDIS_HANDLE KeyHandle);
VOID
DDKAPI
NdisOpenConfigurationKeyByName(
OUT PNDIS_STATUS Status,
IN NDIS_HANDLE ConfigurationHandle,
IN PNDIS_STRING SubKeyName,
OUT PNDIS_HANDLE SubKeyHandle);
VOID
/*DDKAPI*/
NdisWriteErrorLogEntry(
IN NDIS_HANDLE NdisAdapterHandle,
IN NDIS_ERROR_CODE ErrorCode,
IN ULONG NumberOfErrorValues,
...);
/*
* VOID
* NdisStallExecution(
* IN UINT MicrosecondsToStall)
*/
#define NdisStallExecution(MicroSecondsToStall) \
KeStallExecutionProcessor(MicroSecondsToStall)
#define NdisZeroMappedMemory(Destination,Length) RtlZeroMemory(Destination,Length)
/* moved to ndis/memory.c by robd
#define NdisMoveMappedMemory(Destination,Source,Length) RtlCopyMemory(Destination,Source,Length)
*/
/* moved to ndis/control.c by robd
#define NdisReinitializePacket(Packet) \
{ \
(Packet)->Private.Head = (PNDIS_BUFFER)NULL; \
(Packet)->Private.ValidCounts = FALSE; \
}
*/
VOID
DDKAPI
NdisInitializeEvent(
IN PNDIS_EVENT Event
);
VOID
DDKAPI
NdisSetEvent(
IN PNDIS_EVENT Event
);
VOID
DDKAPI
NdisResetEvent(
IN PNDIS_EVENT Event
);
BOOLEAN
DDKAPI
NdisWaitEvent(
IN PNDIS_EVENT Event,
IN UINT msToWait
);
/* NDIS helper macros */
/*
* NDIS_INIT_FUNCTION(FunctionName)
*/
#define NDIS_INIT_FUNCTION(FunctionName) \
alloc_text(init, FunctionName)
/*
* NDIS_PAGABLE_FUNCTION(FunctionName)
*/
#define NDIS_PAGABLE_FUNCTION(FunctionName) \
alloc_text(page, FunctionName)
/* NDIS 4.0 extensions */
#ifdef NDIS40
VOID
DDKAPI
NdisMFreeSharedMemory(
IN NDIS_HANDLE MiniportAdapterHandle,
IN ULONG Length,
IN BOOLEAN Cached,
IN PVOID VirtualAddress,
IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
VOID
DDKAPI
NdisMWanIndicateReceive(
OUT PNDIS_STATUS Status,
IN NDIS_HANDLE MiniportAdapterHandle,
IN NDIS_HANDLE NdisLinkContext,
IN PUCHAR PacketBuffer,
IN UINT PacketSize);
VOID
DDKAPI
NdisMWanIndicateReceiveComplete(
IN NDIS_HANDLE MiniportAdapterHandle);
VOID
DDKAPI
NdisMWanSendComplete(
IN NDIS_HANDLE MiniportAdapterHandle,
IN PNDIS_WAN_PACKET Packet,
IN NDIS_STATUS Status);
NDIS_STATUS
DDKAPI
NdisPciAssignResources(
IN NDIS_HANDLE NdisMacHandle,
IN NDIS_HANDLE NdisWrapperHandle,
IN NDIS_HANDLE WrapperConfigurationContext,
IN ULONG SlotNumber,
OUT PNDIS_RESOURCE_LIST *AssignedResources);
VOID
DDKAPI
NdisReadEisaSlotInformationEx(
OUT PNDIS_STATUS Status,
IN NDIS_HANDLE WrapperConfigurationContext,
OUT PUINT SlotNumber,
OUT PNDIS_EISA_FUNCTION_INFORMATION *EisaData,
OUT PUINT NumberOfFunctions);
VOID
DDKAPI
NdisReadMcaPosInformation(
OUT PNDIS_STATUS Status,
IN NDIS_HANDLE WrapperConfigurationContext,
IN PUINT ChannelNumber,
OUT PNDIS_MCA_POS_DATA McaData);
#endif /* NDIS40 */
#if USE_KLOCKS
#define DISPATCH_LEVEL 2
#define NdisAllocateSpinLock(_SpinLock) KeInitializeSpinLock(&(_SpinLock)->SpinLock)
#define NdisFreeSpinLock(_SpinLock)
#define NdisAcquireSpinLock(_SpinLock) KeAcquireSpinLock(&(_SpinLock)->SpinLock, &(_SpinLock)->OldIrql)
#define NdisReleaseSpinLock(_SpinLock) KeReleaseSpinLock(&(_SpinLock)->SpinLock,(_SpinLock)->OldIrql)
#define NdisDprAcquireSpinLock(_SpinLock) \
{ \
KeAcquireSpinLockAtDpcLevel(&(_SpinLock)->SpinLock); \
(_SpinLock)->OldIrql = DISPATCH_LEVEL; \
}
#define NdisDprReleaseSpinLock(_SpinLock) KeReleaseSpinLockFromDpcLevel(&(_SpinLock)->SpinLock)
#else
//
// Ndis Spin Locks
//
VOID
DDKAPI
NdisAllocateSpinLock(
IN PNDIS_SPIN_LOCK SpinLock
);
VOID
DDKAPI
NdisFreeSpinLock(
IN PNDIS_SPIN_LOCK SpinLock
);
VOID
DDKAPI
NdisAcquireSpinLock(
IN PNDIS_SPIN_LOCK SpinLock
);
VOID
DDKAPI
NdisReleaseSpinLock(
IN PNDIS_SPIN_LOCK SpinLock
);
VOID
DDKAPI
NdisDprAcquireSpinLock(
IN PNDIS_SPIN_LOCK SpinLock
);
VOID
DDKAPI
NdisDprReleaseSpinLock(
IN PNDIS_SPIN_LOCK SpinLock
);
#endif
VOID
DDKAPI
NdisGetCurrentSystemTime(
PLARGE_INTEGER pSystemTime
);
VOID
DDKAPI
NdisAcquireReadWriteLock(
IN PNDIS_RW_LOCK Lock,
IN BOOLEAN fWrite,
IN PLOCK_STATE LockState);
NDIS_STATUS
DDKAPI
NdisAllocateMemoryWithTag(
OUT PVOID *VirtualAddress,
IN UINT Length,
IN ULONG Tag);
VOID
DDKAPI
NdisAllocatePacketPoolEx(
OUT PNDIS_STATUS Status,
OUT PNDIS_HANDLE PoolHandle,
IN UINT NumberOfDescriptors,
IN UINT NumberOfOverflowDescriptors,
IN UINT ProtocolReservedLength);
ULONG
DDKAPI
NdisBufferLength(
IN PNDIS_BUFFER Buffer);
PVOID
DDKAPI
NdisBufferVirtualAddress(
IN PNDIS_BUFFER Buffer);
VOID
DDKAPI
NdisCompletePnPEvent(
IN NDIS_STATUS Status,
IN NDIS_HANDLE NdisBindingHandle,
IN PNET_PNP_EVENT NetPnPEvent);
VOID
DDKAPI
NdisConvertStringToAtmAddress(
OUT PNDIS_STATUS Status,
IN PNDIS_STRING String,
OUT PATM_ADDRESS AtmAddress);
VOID
DDKAPI
NdisGetCurrentProcessorCounts(
OUT PULONG pIdleCount,
OUT PULONG pKernelAndUser,
OUT PULONG pIndex);
VOID
DDKAPI
NdisGetDriverHandle(
IN PNDIS_HANDLE NdisBindingHandle,
OUT PNDIS_HANDLE NdisDriverHandle);
PNDIS_PACKET
DDKAPI
NdisGetReceivedPacket(
IN PNDIS_HANDLE NdisBindingHandle,
IN PNDIS_HANDLE MacContext);
VOID
DDKAPI
NdisGetSystemUptime(
OUT PULONG pSystemUpTime);
VOID
DDKAPI
NdisInitializeReadWriteLock(
IN PNDIS_RW_LOCK Lock);
LONG
DDKAPI
NdisInterlockedDecrement(
IN PLONG Addend);
LONG
DDKAPI
NdisInterlockedIncrement(
IN PLONG Addend);
PSINGLE_LIST_ENTRY
DDKAPI
NdisInterlockedPopEntrySList(
IN PSLIST_HEADER ListHead,
IN PKSPIN_LOCK Lock);
PSINGLE_LIST_ENTRY
DDKAPI
NdisInterlockedPushEntrySList(
IN PSLIST_HEADER ListHead,
IN PSINGLE_LIST_ENTRY ListEntry,
IN PKSPIN_LOCK Lock);
NDIS_STATUS
DDKAPI
NdisMDeregisterDevice(
IN NDIS_HANDLE NdisDeviceHandle);
VOID
DDKAPI
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);
NDIS_STATUS
DDKAPI
NdisMInitializeScatterGatherDma(
IN NDIS_HANDLE MiniportAdapterHandle,
IN BOOLEAN Dma64BitAddresses,
IN ULONG MaximumPhysicalMapping);
NDIS_STATUS
DDKAPI
NdisMPromoteMiniport(
IN NDIS_HANDLE MiniportAdapterHandle);
NDIS_STATUS
DDKAPI
NdisMQueryAdapterInstanceName(
OUT PNDIS_STRING AdapterInstanceName,
IN NDIS_HANDLE MiniportAdapterHandle);
NDIS_STATUS
DDKAPI
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);
VOID
DDKAPI
NdisMRegisterUnloadHandler(
IN NDIS_HANDLE NdisWrapperHandle,
IN PDRIVER_UNLOAD UnloadHandler);
NDIS_STATUS
DDKAPI
NdisMRemoveMiniport(
IN NDIS_HANDLE MiniportAdapterHandle);
NDIS_STATUS
DDKAPI
NdisMSetMiniportSecondary(
IN NDIS_HANDLE MiniportAdapterHandle,
IN NDIS_HANDLE PrimaryMiniportAdapterHandle);
UINT
DDKAPI
NdisPacketPoolUsage(
IN NDIS_HANDLE PoolHandle);
NDIS_STATUS
DDKAPI
NdisQueryAdapterInstanceName(
OUT PNDIS_STRING AdapterInstanceName,
IN NDIS_HANDLE NdisBindingHandle);
VOID
DDKAPI
NdisQueryBufferSafe(
IN PNDIS_BUFFER Buffer,
OUT PVOID *VirtualAddress OPTIONAL,
OUT PUINT Length,
IN UINT Priority);
ULONG
DDKAPI
NdisReadPcmciaAttributeMemory(
IN NDIS_HANDLE NdisAdapterHandle,
IN ULONG Offset,
IN PVOID Buffer,
IN ULONG Length);
VOID
DDKAPI
NdisReleaseReadWriteLock(
IN PNDIS_RW_LOCK Lock,
IN PLOCK_STATE LockState);
NDIS_STATUS
DDKAPI
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);
ULONG
DDKAPI
NdisWritePcmciaAttributeMemory(
IN NDIS_HANDLE NdisAdapterHandle,
IN ULONG Offset,
IN PVOID Buffer,
IN ULONG Length);
/* Connectionless services */
NDIS_STATUS
DDKAPI
NdisClAddParty(
IN NDIS_HANDLE NdisVcHandle,
IN NDIS_HANDLE ProtocolPartyContext,
IN OUT PCO_CALL_PARAMETERS CallParameters,
OUT PNDIS_HANDLE NdisPartyHandle);
NDIS_STATUS
DDKAPI
NdisClCloseAddressFamily(
IN NDIS_HANDLE NdisAfHandle);
NDIS_STATUS
DDKAPI
NdisClCloseCall(
IN NDIS_HANDLE NdisVcHandle,
IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
IN PVOID Buffer OPTIONAL,
IN UINT Size);
NDIS_STATUS
DDKAPI
NdisClDeregisterSap(
IN NDIS_HANDLE NdisSapHandle);
NDIS_STATUS
DDKAPI
NdisClDropParty(
IN NDIS_HANDLE NdisPartyHandle,
IN PVOID Buffer OPTIONAL,
IN UINT Size);
VOID
DDKAPI
NdisClIncomingCallComplete(
IN NDIS_STATUS Status,
IN NDIS_HANDLE NdisVcHandle,
IN PCO_CALL_PARAMETERS CallParameters);
NDIS_STATUS
DDKAPI
NdisClMakeCall(
IN NDIS_HANDLE NdisVcHandle,
IN OUT PCO_CALL_PARAMETERS CallParameters,
IN NDIS_HANDLE ProtocolPartyContext OPTIONAL,
OUT PNDIS_HANDLE NdisPartyHandle OPTIONAL);
NDIS_STATUS
DDKAPI
NdisClModifyCallQoS(
IN NDIS_HANDLE NdisVcHandle,
IN PCO_CALL_PARAMETERS CallParameters);
NDIS_STATUS
DDKAPI
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);
NDIS_STATUS
DDKAPI
NdisClRegisterSap(
IN NDIS_HANDLE NdisAfHandle,
IN NDIS_HANDLE ProtocolSapContext,
IN PCO_SAP Sap,
OUT PNDIS_HANDLE NdisSapHandle);
/* Call Manager services */
NDIS_STATUS
DDKAPI
NdisCmActivateVc(
IN NDIS_HANDLE NdisVcHandle,
IN OUT PCO_CALL_PARAMETERS CallParameters);
VOID
DDKAPI
NdisCmAddPartyComplete(
IN NDIS_STATUS Status,
IN NDIS_HANDLE NdisPartyHandle,
IN NDIS_HANDLE CallMgrPartyContext OPTIONAL,
IN PCO_CALL_PARAMETERS CallParameters);
VOID
DDKAPI
NdisCmCloseAddressFamilyComplete(
IN NDIS_STATUS Status,
IN NDIS_HANDLE NdisAfHandle);
VOID
DDKAPI
NdisCmCloseCallComplete(
IN NDIS_STATUS Status,
IN NDIS_HANDLE NdisVcHandle,
IN NDIS_HANDLE NdisPartyHandle OPTIONAL);
NDIS_STATUS
DDKAPI
NdisCmDeactivateVc(
IN NDIS_HANDLE NdisVcHandle);
VOID
DDKAPI
NdisCmDeregisterSapComplete(
IN NDIS_STATUS Status,
IN NDIS_HANDLE NdisSapHandle);
VOID
DDKAPI
NdisCmDispatchCallConnected(
IN NDIS_HANDLE NdisVcHandle);
NDIS_STATUS
DDKAPI
NdisCmDispatchIncomingCall(
IN NDIS_HANDLE NdisSapHandle,
IN NDIS_HANDLE NdisVcHandle,
IN PCO_CALL_PARAMETERS CallParameters);
VOID
DDKAPI
NdisCmDispatchIncomingCallQoSChange(
IN NDIS_HANDLE NdisVcHandle,
IN PCO_CALL_PARAMETERS CallParameters);
VOID
DDKAPI
NdisCmDispatchIncomingCloseCall(
IN NDIS_STATUS CloseStatus,
IN NDIS_HANDLE NdisVcHandle,
IN PVOID Buffer OPTIONAL,
IN UINT Size);
VOID
DDKAPI
NdisCmDispatchIncomingDropParty(
IN NDIS_STATUS DropStatus,
IN NDIS_HANDLE NdisPartyHandle,
IN PVOID Buffer OPTIONAL,
IN UINT Size);
VOID
DDKAPI
NdisCmDropPartyComplete(
IN NDIS_STATUS Status,
IN NDIS_HANDLE NdisPartyHandle);
VOID
DDKAPI
NdisCmMakeCallComplete(
IN NDIS_STATUS Status,
IN NDIS_HANDLE NdisVcHandle,
IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
IN NDIS_HANDLE CallMgrPartyContext OPTIONAL,
IN PCO_CALL_PARAMETERS CallParameters);
VOID
DDKAPI
NdisCmModifyCallQoSComplete(
IN NDIS_STATUS Status,
IN NDIS_HANDLE NdisVcHandle,
IN PCO_CALL_PARAMETERS CallParameters);
VOID
DDKAPI
NdisCmOpenAddressFamilyComplete(
IN NDIS_STATUS Status,
IN NDIS_HANDLE NdisAfHandle,
IN NDIS_HANDLE CallMgrAfContext);
NDIS_STATUS
DDKAPI
NdisCmRegisterAddressFamily(
IN NDIS_HANDLE NdisBindingHandle,
IN PCO_ADDRESS_FAMILY AddressFamily,
IN PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics,
IN UINT SizeOfCmCharacteristics);
VOID
DDKAPI
NdisCmRegisterSapComplete(
IN NDIS_STATUS Status,
IN NDIS_HANDLE NdisSapHandle,
IN NDIS_HANDLE CallMgrSapContext);
NDIS_STATUS
DDKAPI
NdisMCmActivateVc(
IN NDIS_HANDLE NdisVcHandle,
IN PCO_CALL_PARAMETERS CallParameters);
NDIS_STATUS
DDKAPI
NdisMCmCreateVc(
IN NDIS_HANDLE MiniportAdapterHandle,
IN NDIS_HANDLE NdisAfHandle,
IN NDIS_HANDLE MiniportVcContext,
OUT PNDIS_HANDLE NdisVcHandle);
NDIS_STATUS
DDKAPI
NdisMCmDeactivateVc(
IN NDIS_HANDLE NdisVcHandle);
NDIS_STATUS
DDKAPI
NdisMCmDeleteVc(
IN NDIS_HANDLE NdisVcHandle);
NDIS_STATUS
DDKAPI
NdisMCmRegisterAddressFamily(
IN NDIS_HANDLE MiniportAdapterHandle,
IN PCO_ADDRESS_FAMILY AddressFamily,
IN PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics,
IN UINT SizeOfCmCharacteristics);
NDIS_STATUS
DDKAPI
NdisMCmRequest(
IN NDIS_HANDLE NdisAfHandle,
IN NDIS_HANDLE NdisVcHandle OPTIONAL,
IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
IN OUT PNDIS_REQUEST NdisRequest);
/* Connection-oriented services */
NDIS_STATUS
DDKAPI
NdisCoCreateVc(
IN NDIS_HANDLE NdisBindingHandle,
IN NDIS_HANDLE NdisAfHandle OPTIONAL,
IN NDIS_HANDLE ProtocolVcContext,
IN OUT PNDIS_HANDLE NdisVcHandle);
NDIS_STATUS
DDKAPI
NdisCoDeleteVc(
IN NDIS_HANDLE NdisVcHandle);
NDIS_STATUS
DDKAPI
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);
VOID
DDKAPI
NdisCoRequestComplete(
IN NDIS_STATUS Status,
IN NDIS_HANDLE NdisAfHandle,
IN NDIS_HANDLE NdisVcHandle OPTIONAL,
IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
IN PNDIS_REQUEST NdisRequest);
VOID
DDKAPI
NdisCoSendPackets(
IN NDIS_HANDLE NdisVcHandle,
IN PPNDIS_PACKET PacketArray,
IN UINT NumberOfPackets);
VOID
DDKAPI
NdisMCoActivateVcComplete(
IN NDIS_STATUS Status,
IN NDIS_HANDLE NdisVcHandle,
IN PCO_CALL_PARAMETERS CallParameters);
VOID
DDKAPI
NdisMCoDeactivateVcComplete(
IN NDIS_STATUS Status,
IN NDIS_HANDLE NdisVcHandle);
VOID
DDKAPI
NdisMCoIndicateReceivePacket(
IN NDIS_HANDLE NdisVcHandle,
IN PPNDIS_PACKET PacketArray,
IN UINT NumberOfPackets);
VOID
DDKAPI
NdisMCoIndicateStatus(
IN NDIS_HANDLE MiniportAdapterHandle,
IN NDIS_HANDLE NdisVcHandle OPTIONAL,
IN NDIS_STATUS GeneralStatus,
IN PVOID StatusBuffer OPTIONAL,
IN ULONG StatusBufferSize);
VOID
DDKAPI
NdisMCoReceiveComplete(
IN NDIS_HANDLE MiniportAdapterHandle);
VOID
DDKAPI
NdisMCoRequestComplete(
IN NDIS_STATUS Status,
IN NDIS_HANDLE MiniportAdapterHandle,
IN PNDIS_REQUEST Request);
VOID
DDKAPI
NdisMCoSendComplete(
IN NDIS_STATUS Status,
IN NDIS_HANDLE NdisVcHandle,
IN PNDIS_PACKET Packet);
/* NDIS 5.0 extensions for intermediate drivers */
VOID
DDKAPI
NdisIMAssociateMiniport(
IN NDIS_HANDLE DriverHandle,
IN NDIS_HANDLE ProtocolHandle);
NDIS_STATUS
DDKAPI
NdisIMCancelInitializeDeviceInstance(
IN NDIS_HANDLE DriverHandle,
IN PNDIS_STRING DeviceInstance);
VOID
DDKAPI
NdisIMCopySendCompletePerPacketInfo(
IN PNDIS_PACKET DstPacket,
IN PNDIS_PACKET SrcPacket);
VOID
DDKAPI
NdisIMCopySendPerPacketInfo(
IN PNDIS_PACKET DstPacket,
IN PNDIS_PACKET SrcPacket);
VOID
DDKAPI
NdisIMDeregisterLayeredMiniport(
IN NDIS_HANDLE DriverHandle);
NDIS_HANDLE
DDKAPI
NdisIMGetBindingContext(
IN NDIS_HANDLE NdisBindingHandle);
NDIS_HANDLE
DDKAPI
NdisIMGetDeviceContext(
IN NDIS_HANDLE MiniportAdapterHandle);
NDIS_STATUS
DDKAPI
NdisIMInitializeDeviceInstanceEx(
IN NDIS_HANDLE DriverHandle,
IN PNDIS_STRING DriverInstance,
IN NDIS_HANDLE DeviceContext OPTIONAL);
//#endif /* NDIS50 */
/* Prototypes for NDIS_MINIPORT_CHARACTERISTICS */
typedef BOOLEAN
(STDCALL *W_CHECK_FOR_HANG_HANDLER)(
IN NDIS_HANDLE MiniportAdapterContext);
typedef VOID
(STDCALL *W_DISABLE_INTERRUPT_HANDLER)(
IN NDIS_HANDLE MiniportAdapterContext);
typedef VOID
(STDCALL *W_ENABLE_INTERRUPT_HANDLER)(
IN NDIS_HANDLE MiniportAdapterContext);
typedef VOID
(STDCALL *W_HALT_HANDLER)(
IN NDIS_HANDLE MiniportAdapterContext);
typedef VOID
(STDCALL *W_HANDLE_INTERRUPT_HANDLER)(
IN NDIS_HANDLE MiniportAdapterContext);
typedef NDIS_STATUS
(STDCALL *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
(STDCALL *W_ISR_HANDLER)(
OUT PBOOLEAN InterruptRecognized,
OUT PBOOLEAN QueueMiniportHandleInterrupt,
IN NDIS_HANDLE MiniportAdapterContext);
typedef NDIS_STATUS
(STDCALL *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
(STDCALL *W_RECONFIGURE_HANDLER)(
OUT PNDIS_STATUS OpenErrorStatus,
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_HANDLE WrapperConfigurationContext);
typedef NDIS_STATUS
(STDCALL *W_RESET_HANDLER)(
OUT PBOOLEAN AddressingReset,
IN NDIS_HANDLE MiniportAdapterContext);
typedef NDIS_STATUS
(STDCALL *W_SEND_HANDLER)(
IN NDIS_HANDLE MiniportAdapterContext,
IN PNDIS_PACKET Packet,
IN UINT Flags);
typedef NDIS_STATUS
(STDCALL *WM_SEND_HANDLER)(
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_HANDLE NdisLinkHandle,
IN PNDIS_WAN_PACKET Packet);
typedef NDIS_STATUS
(STDCALL *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
(STDCALL *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
(STDCALL *WM_TRANSFER_DATA_HANDLER)(
VOID);
/* NDIS structures available only to miniport drivers */
/* Technology specific defines */
#define DECLARE_UNKNOWN_STRUCT(BaseName) \
typedef struct _##BaseName BaseName, *P##BaseName;
/* ARCnet */
typedef struct _ARC_BUFFER_LIST
{
PVOID Buffer;
UINT Size;
UINT BytesLeft;
struct _ARC_BUFFER_LIST *Next;
} ARC_BUFFER_LIST, *PARC_BUFFER_LIST;
DECLARE_UNKNOWN_STRUCT(ARC_FILTER)
VOID
DDKAPI
ArcFilterDprIndicateReceive(
IN PARC_FILTER Filter,
IN PUCHAR pRawHeader,
IN PUCHAR pData,
IN UINT Length);
VOID
DDKAPI
ArcFilterDprIndicateReceiveComplete(
IN PARC_FILTER Filter);
/* Ethernet */
#define ETH_LENGTH_OF_ADDRESS 6
DECLARE_UNKNOWN_STRUCT(ETH_BINDING_INFO);
typedef VOID (*ETH_ADDRESS_CHANGE)(VOID);
typedef VOID (*ETH_FILTER_CHANGE)(VOID);
typedef VOID (*ETH_DEFERRED_CLOSE)(VOID);
typedef struct _ETH_FILTER
{
PNDIS_SPIN_LOCK Lock;
CHAR (*MCastAddressBuf)[ETH_LENGTH_OF_ADDRESS];
struct _NDIS_MINIPORT_BLOCK *Miniport;
UINT CombinedPacketFilter;
PETH_BINDING_INFO OpenList;
ETH_ADDRESS_CHANGE AddressChangeAction;
ETH_FILTER_CHANGE FilterChangeAction;
ETH_DEFERRED_CLOSE CloseAction;
UINT MaxMulticastAddresses;
UINT NumAddresses;
UCHAR AdapterAddress[ETH_LENGTH_OF_ADDRESS];
UINT OldCombinedPacketFilter;
CHAR (*OldMCastAddressBuf)[ETH_LENGTH_OF_ADDRESS];
UINT OldNumAddresses;
PETH_BINDING_INFO DirectedList;
PETH_BINDING_INFO BMList;
PETH_BINDING_INFO MCastSet;
#if 0
#ifdef NDIS_WRAPPER
UINT NumOpens;
NDIS_RW_LOCK BindListLock;
#endif
#endif
} ETH_FILTER, *PETH_FILTER;
NDIS_STATUS
DDKAPI
EthChangeFilterAddresses(
IN PETH_FILTER Filter,
IN NDIS_HANDLE NdisFilterHandle,
IN PNDIS_REQUEST NdisRequest,
IN UINT AddressCount,
IN CHAR Addresses[] [ETH_LENGTH_OF_ADDRESS],
IN BOOLEAN Set);
BOOLEAN
DDKAPI
EthCreateFilter(
IN UINT MaximumMulticastAddresses,
IN ETH_ADDRESS_CHANGE AddressChangeAction,
IN ETH_FILTER_CHANGE FilterChangeAction,
IN ETH_DEFERRED_CLOSE CloseAction,
IN PUCHAR AdapterAddress,
IN PNDIS_SPIN_LOCK Lock,
OUT PETH_FILTER *Filter);
VOID
DDKAPI
EthDeleteFilter(
IN PETH_FILTER Filter);
NDIS_STATUS
DDKAPI
EthDeleteFilterOpenAdapter(
IN PETH_FILTER Filter,
IN NDIS_HANDLE NdisFilterHandle,
IN PNDIS_REQUEST NdisRequest);
NDIS_STATUS
DDKAPI
EthFilterAdjust(
IN PETH_FILTER Filter,
IN NDIS_HANDLE NdisFilterHandle,
IN PNDIS_REQUEST NdisRequest,
IN UINT FilterClasses,
IN BOOLEAN Set);
VOID
DDKAPI
EthFilterIndicateReceive(
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);
VOID
DDKAPI
EthFilterIndicateReceiveComplete(
IN PETH_FILTER Filter);
BOOLEAN
DDKAPI
EthNoteFilterOpenAdapter(
IN PETH_FILTER Filter,
IN NDIS_HANDLE MacBindingHandle,
IN NDIS_HANDLE NdisBindingContext,
OUT PNDIS_HANDLE NdisFilterHandle);
UINT
DDKAPI
EthNumberOfOpenFilterAddresses(
IN PETH_FILTER Filter,
IN NDIS_HANDLE NdisFilterHandle);
VOID
DDKAPI
EthQueryGlobalFilterAddresses (
OUT PNDIS_STATUS Status,
IN PETH_FILTER Filter,
IN UINT SizeOfArray,
OUT PUINT NumberOfAddresses,
IN OUT CHAR AddressArray[] [ETH_LENGTH_OF_ADDRESS]);
VOID
DDKAPI
EthQueryOpenFilterAddresses(
OUT PNDIS_STATUS Status,
IN PETH_FILTER Filter,
IN NDIS_HANDLE NdisFilterHandle,
IN UINT SizeOfArray,
OUT PUINT NumberOfAddresses,
IN OUT CHAR AddressArray[] [ETH_LENGTH_OF_ADDRESS]);
BOOLEAN
DDKAPI
EthShouldAddressLoopBack(
IN PETH_FILTER Filter,
IN CHAR Address[ETH_LENGTH_OF_ADDRESS]);
/* FDDI */
#define FDDI_LENGTH_OF_LONG_ADDRESS 6
#define FDDI_LENGTH_OF_SHORT_ADDRESS 2
DECLARE_UNKNOWN_STRUCT(FDDI_FILTER)
typedef VOID (*FDDI_ADDRESS_CHANGE)(VOID);
typedef VOID (*FDDI_FILTER_CHANGE)(VOID);
typedef VOID (*FDDI_DEFERRED_CLOSE)(VOID);
NDIS_STATUS
DDKAPI
FddiChangeFilterLongAddresses(
IN PFDDI_FILTER Filter,
IN NDIS_HANDLE NdisFilterHandle,
IN PNDIS_REQUEST NdisRequest,
IN UINT AddressCount,
IN CHAR Addresses[] [FDDI_LENGTH_OF_LONG_ADDRESS],
IN BOOLEAN Set);
NDIS_STATUS
DDKAPI
FddiChangeFilterShortAddresses(
IN PFDDI_FILTER Filter,
IN NDIS_HANDLE NdisFilterHandle,
IN PNDIS_REQUEST NdisRequest,
IN UINT AddressCount,
IN CHAR Addresses[] [FDDI_LENGTH_OF_SHORT_ADDRESS],
IN BOOLEAN Set);
BOOLEAN
DDKAPI
FddiCreateFilter(
IN UINT MaximumMulticastLongAddresses,
IN UINT MaximumMulticastShortAddresses,
IN FDDI_ADDRESS_CHANGE AddressChangeAction,
IN FDDI_FILTER_CHANGE FilterChangeAction,
IN FDDI_DEFERRED_CLOSE CloseAction,
IN PUCHAR AdapterLongAddress,
IN PUCHAR AdapterShortAddress,
IN PNDIS_SPIN_LOCK Lock,
OUT PFDDI_FILTER *Filter);
VOID
DDKAPI
FddiDeleteFilter(
IN PFDDI_FILTER Filter);
NDIS_STATUS
DDKAPI
FddiDeleteFilterOpenAdapter(
IN PFDDI_FILTER Filter,
IN NDIS_HANDLE NdisFilterHandle,
IN PNDIS_REQUEST NdisRequest);
NDIS_STATUS
DDKAPI
FddiFilterAdjust(
IN PFDDI_FILTER Filter,
IN NDIS_HANDLE NdisFilterHandle,
IN PNDIS_REQUEST NdisRequest,
IN UINT FilterClasses,
IN BOOLEAN Set);
VOID
DDKAPI
FddiFilterIndicateReceive(
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);
VOID
DDKAPI
FddiFilterIndicateReceiveComplete(
IN PFDDI_FILTER Filter);
BOOLEAN
DDKAPI
FddiNoteFilterOpenAdapter(
IN PFDDI_FILTER Filter,
IN NDIS_HANDLE MacBindingHandle,
IN NDIS_HANDLE NdisBindingContext,
OUT PNDIS_HANDLE NdisFilterHandle);
UINT
DDKAPI
FddiNumberOfOpenFilterLongAddresses(
IN PFDDI_FILTER Filter,
IN NDIS_HANDLE NdisFilterHandle);
UINT
DDKAPI
FddiNumberOfOpenFilterShortAddresses(
IN PFDDI_FILTER Filter,
IN NDIS_HANDLE NdisFilterHandle);
VOID
DDKAPI
FddiQueryGlobalFilterLongAddresses(
OUT PNDIS_STATUS Status,
IN PFDDI_FILTER Filter,
IN UINT SizeOfArray,
OUT PUINT NumberOfAddresses,
IN OUT CHAR AddressArray[] [FDDI_LENGTH_OF_LONG_ADDRESS]);
VOID
DDKAPI
FddiQueryGlobalFilterShortAddresses(
OUT PNDIS_STATUS Status,
IN PFDDI_FILTER Filter,
IN UINT SizeOfArray,
OUT PUINT NumberOfAddresses,
IN OUT CHAR AddressArray[] [FDDI_LENGTH_OF_SHORT_ADDRESS]);
VOID
DDKAPI
FddiQueryOpenFilterLongAddresses(
OUT PNDIS_STATUS Status,
IN PFDDI_FILTER Filter,
IN NDIS_HANDLE NdisFilterHandle,
IN UINT SizeOfArray,
OUT PUINT NumberOfAddresses,
IN OUT CHAR AddressArray[] [FDDI_LENGTH_OF_LONG_ADDRESS]);
VOID
DDKAPI
FddiQueryOpenFilterShortAddresses(
OUT PNDIS_STATUS Status,
IN PFDDI_FILTER Filter,
IN NDIS_HANDLE NdisFilterHandle,
IN UINT SizeOfArray,
OUT PUINT NumberOfAddresses,
IN OUT CHAR AddressArray[] [FDDI_LENGTH_OF_SHORT_ADDRESS]);
BOOLEAN
DDKAPI
FddiShouldAddressLoopBack(
IN PFDDI_FILTER Filter,
IN CHAR Address[],
IN UINT LengthOfAddress);
/* Token Ring */
#define TR_LENGTH_OF_FUNCTIONAL 4
#define TR_LENGTH_OF_ADDRESS 6
DECLARE_UNKNOWN_STRUCT(TR_FILTER)
typedef VOID (*TR_ADDRESS_CHANGE)(VOID);
typedef VOID (*TR_GROUP_CHANGE)(VOID);
typedef VOID (*TR_FILTER_CHANGE)(VOID);
typedef VOID (*TR_DEFERRED_CLOSE)(VOID);
NDIS_STATUS
DDKAPI
TrChangeFunctionalAddress(
IN PTR_FILTER Filter,
IN NDIS_HANDLE NdisFilterHandle,
IN PNDIS_REQUEST NdisRequest,
IN CHAR FunctionalAddressArray[TR_LENGTH_OF_FUNCTIONAL],
IN BOOLEAN Set);
NDIS_STATUS
DDKAPI
TrChangeGroupAddress(
IN PTR_FILTER Filter,
IN NDIS_HANDLE NdisFilterHandle,
IN PNDIS_REQUEST NdisRequest,
IN CHAR GroupAddressArray[TR_LENGTH_OF_FUNCTIONAL],
IN BOOLEAN Set);
BOOLEAN
DDKAPI
TrCreateFilter(
IN TR_ADDRESS_CHANGE AddressChangeAction,
IN TR_GROUP_CHANGE GroupChangeAction,
IN TR_FILTER_CHANGE FilterChangeAction,
IN TR_DEFERRED_CLOSE CloseAction,
IN PUCHAR AdapterAddress,
IN PNDIS_SPIN_LOCK Lock,
OUT PTR_FILTER *Filter);
VOID
DDKAPI
TrDeleteFilter(
IN PTR_FILTER Filter);
NDIS_STATUS
DDKAPI
TrDeleteFilterOpenAdapter (
IN PTR_FILTER Filter,
IN NDIS_HANDLE NdisFilterHandle,
IN PNDIS_REQUEST NdisRequest);
NDIS_STATUS
DDKAPI
TrFilterAdjust(
IN PTR_FILTER Filter,
IN NDIS_HANDLE NdisFilterHandle,
IN PNDIS_REQUEST NdisRequest,
IN UINT FilterClasses,
IN BOOLEAN Set);
VOID
DDKAPI
TrFilterIndicateReceive(
IN PTR_FILTER Filter,
IN NDIS_HANDLE MacReceiveContext,
IN PVOID HeaderBuffer,
IN UINT HeaderBufferSize,
IN PVOID LookaheadBuffer,
IN UINT LookaheadBufferSize,
IN UINT PacketSize);
VOID
DDKAPI
TrFilterIndicateReceiveComplete(
IN PTR_FILTER Filter);
BOOLEAN
DDKAPI
TrNoteFilterOpenAdapter(
IN PTR_FILTER Filter,
IN NDIS_HANDLE MacBindingHandle,
IN NDIS_HANDLE NdisBindingContext,
OUT PNDIS_HANDLE NdisFilterHandle);
BOOLEAN
DDKAPI
TrShouldAddressLoopBack(
IN PTR_FILTER Filter,
IN CHAR DestinationAddress[TR_LENGTH_OF_ADDRESS],
IN CHAR SourceAddress[TR_LENGTH_OF_ADDRESS]);
#ifdef _MSC_VER
typedef struct _NDIS30_MINIPORT_CHARACTERISTICS
{
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;
union
{
W_SEND_HANDLER SendHandler;
WM_SEND_HANDLER WanSendHandler;
} u1;
W_SET_INFORMATION_HANDLER SetInformationHandler;
union
{
W_TRANSFER_DATA_HANDLER TransferDataHandler;
WM_TRANSFER_DATA_HANDLER WanTransferDataHandler;
} u2;
} NDIS30_MINIPORT_CHARACTERISTICS;
typedef NDIS30_MINIPORT_CHARACTERISTICS NDIS30_MINIPORT_CHARACTERISTICS_S;
#else
#define NDIS30_MINIPORT_CHARACTERISTICS \
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; \
union { \
W_SEND_HANDLER SendHandler; \
WM_SEND_HANDLER WanSendHandler; \
} u1; \
W_SET_INFORMATION_HANDLER SetInformationHandler; \
union { \
W_TRANSFER_DATA_HANDLER TransferDataHandler; \
WM_TRANSFER_DATA_HANDLER WanTransferDataHandler; \
} u2;
typedef struct _NDIS30_MINIPORT_CHARACTERISTICS_S {
NDIS30_MINIPORT_CHARACTERISTICS;
} NDIS30_MINIPORT_CHARACTERISTICS_S, *PSNDIS30_MINIPORT_CHARACTERISTICS_S;
#endif
/* Extensions for NDIS 4.0 miniports */
typedef VOID
(STDCALL *W_SEND_PACKETS_HANDLER)(
IN NDIS_HANDLE MiniportAdapterContext,
IN PPNDIS_PACKET PacketArray,
IN UINT NumberOfPackets);
#ifdef NDIS40
typedef VOID
(STDCALL *W_RETURN_PACKET_HANDLER)(
IN NDIS_HANDLE MiniportAdapterContext,
IN PNDIS_PACKET Packet);
typedef VOID
(STDCALL *W_ALLOCATE_COMPLETE_HANDLER)(
IN NDIS_HANDLE MiniportAdapterContext,
IN PVOID VirtualAddress,
IN PNDIS_PHYSICAL_ADDRESS PhysicalAddress,
IN ULONG Length,
IN PVOID Context);
#ifdef _MSC_VER
typedef struct _NDIS40_MINIPORT_CHARACTERISTICS
{
NDIS30_MINIPORT_CHARACTERISTICS;
W_RETURN_PACKET_HANDLER ReturnPacketHandler;
W_SEND_PACKETS_HANDLER SendPacketsHandler;
W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
} NDIS40_MINIPORT_CHARACTERISTICS;
typedef NDIS40_MINIPORT_CHARACTERISTICS NDIS40_MINIPORT_CHARACTERISTICS_S;
#else
#define NDIS40_MINIPORT_CHARACTERISTICS \
NDIS30_MINIPORT_CHARACTERISTICS; \
W_RETURN_PACKET_HANDLER ReturnPacketHandler; \
W_SEND_PACKETS_HANDLER SendPacketsHandler; \
W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
typedef struct _NDIS40_MINIPORT_CHARACTERISTICS_S
{
NDIS40_MINIPORT_CHARACTERISTICS;
} NDIS40_MINIPORT_CHARACTERISTICS_S, *PSNDIS40_MINIPORT_CHARACTERISTICS_S;
#endif
#endif /* NDIS40 */
/* Extensions for NDIS 5.0 miniports */
#ifdef NDIS50
typedef NDIS_STATUS
(STDCALL *W_CO_CREATE_VC_HANDLER)(
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_HANDLE NdisVcHandle,
OUT PNDIS_HANDLE MiniportVcContext);
typedef NDIS_STATUS
(STDCALL *W_CO_DELETE_VC_HANDLER)(
IN NDIS_HANDLE MiniportVcContext);
typedef NDIS_STATUS
(STDCALL *W_CO_ACTIVATE_VC_HANDLER)(
IN NDIS_HANDLE MiniportVcContext,
IN OUT PCO_CALL_PARAMETERS CallParameters);
typedef NDIS_STATUS
(STDCALL *W_CO_DEACTIVATE_VC_HANDLER)(
IN NDIS_HANDLE MiniportVcContext);
typedef VOID
(STDCALL *W_CO_SEND_PACKETS_HANDLER)(
IN NDIS_HANDLE MiniportVcContext,
IN PPNDIS_PACKET PacketArray,
IN UINT NumberOfPackets);
typedef NDIS_STATUS
(STDCALL *W_CO_REQUEST_HANDLER)(
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_HANDLE MiniportVcContext OPTIONAL,
IN OUT PNDIS_REQUEST NdisRequest);
#ifdef _MSC_VER
typedef struct _NDIS50_MINIPORT_CHARACTERISTICS {
NDIS40_MINIPORT_CHARACTERISTICS;
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;
typedef NDIS50_MINIPORT_CHARACTERISTICS NDIS50_MINIPORT_CHARACTERISTICS_S;
#else
#define NDIS50_MINIPORT_CHARACTERISTICS \
NDIS40_MINIPORT_CHARACTERISTICS; \
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;
typedef struct _NDIS50_MINIPORT_CHARACTERISTICS_S {
NDIS50_MINIPORT_CHARACTERISTICS;
} NDIS50_MINIPORT_CHARACTERISTICS_S, *PSNDIS50_MINIPORT_CHARACTERISTICS_S;
#endif
#endif /* NDIS50 */
#ifndef NDIS50
#ifndef NDIS40
typedef struct _NDIS_MINIPORT_CHARACTERISTICS
{
NDIS30_MINIPORT_CHARACTERISTICS;
} NDIS_MINIPORT_CHARACTERISTICS;
#else /* NDIS40 */
typedef struct _NDIS_MINIPORT_CHARACTERISTICS
{
NDIS40_MINIPORT_CHARACTERISTICS;
} NDIS_MINIPORT_CHARACTERISTICS;
#endif /* NDIS40 */
#else /* NDIS50 */
typedef struct _NDIS_MINIPORT_CHARACTERISTICS
{
NDIS50_MINIPORT_CHARACTERISTICS;
} NDIS_MINIPORT_CHARACTERISTICS;
#endif /* NDIS50 */
typedef NDIS_MINIPORT_CHARACTERISTICS *PNDIS_MINIPORT_CHARACTERISTICS;
typedef NDIS_STATUS
(STDCALL *SEND_HANDLER)(
IN NDIS_HANDLE MacBindingHandle,
IN PNDIS_PACKET Packet);
typedef NDIS_STATUS
(STDCALL *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
(STDCALL *RESET_HANDLER)(
IN NDIS_HANDLE MacBindingHandle);
typedef NDIS_STATUS
(STDCALL *REQUEST_HANDLER)(
IN NDIS_HANDLE MacBindingHandle,
IN PNDIS_REQUEST NdisRequest);
/* Structures available only to full MAC drivers */
typedef BOOLEAN
(*PNDIS_INTERRUPT_SERVICE)(
IN PVOID InterruptContext);
typedef VOID
(*PNDIS_DEFERRED_PROCESSING)(
IN PVOID SystemSpecific1,
IN PVOID InterruptContext,
IN PVOID SystemSpecific2,
IN PVOID SystemSpecific3);
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;
/* Used to tell when all DPCs for the adapter are completed */
KEVENT DpcsCompletedEvent;
} NDIS_INTERRUPT, *PNDIS_INTERRUPT;
/* NDIS adapter information */
typedef NDIS_STATUS (*PNDIS_ACTIVATE_CALLBACK)(
IN NDIS_HANDLE NdisAdatperHandle,
IN NDIS_HANDLE MacAdapterContext,
IN ULONG DmaChannel);
typedef struct _NDIS_PORT_DESCRIPTOR
{
ULONG InitialPort;
ULONG NumberOfPorts;
PVOID * PortOffset;
} NDIS_PORT_DESCRIPTOR, *PNDIS_PORT_DESCRIPTOR;
typedef struct _NDIS_ADAPTER_INFORMATION
{
ULONG DmaChannel;
BOOLEAN Master;
BOOLEAN Dma32BitAddresses;
PNDIS_ACTIVATE_CALLBACK ActivateCallback;
NDIS_INTERFACE_TYPE AdapterType;
ULONG PhysicalMapRegistersNeeded;
ULONG MaximumPhysicalMapping;
ULONG NumberOfPortDescriptors;
NDIS_PORT_DESCRIPTOR PortDescriptors[1];
} NDIS_ADAPTER_INFORMATION, *PNDIS_ADAPTER_INFORMATION;
/* Prototypes for NDIS_MAC_CHARACTERISTICS */
typedef NDIS_STATUS STDCALL_FUNC (*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 STDCALL_FUNC (*CLOSE_ADAPTER_HANDLER)(
IN NDIS_HANDLE MacBindingHandle);
typedef NDIS_STATUS STDCALL_FUNC (*WAN_TRANSFER_DATA_HANDLER)(
VOID);
typedef NDIS_STATUS STDCALL_FUNC (*QUERY_GLOBAL_STATISTICS_HANDLER)(
IN NDIS_HANDLE MacAdapterContext,
IN PNDIS_REQUEST NdisRequest);
typedef VOID STDCALL_FUNC (*UNLOAD_MAC_HANDLER)(
IN NDIS_HANDLE MacMacContext);
typedef NDIS_STATUS STDCALL_FUNC (*ADD_ADAPTER_HANDLER)(
IN NDIS_HANDLE MacMacContext,
IN NDIS_HANDLE WrapperConfigurationContext,
IN PNDIS_STRING AdapterName);
typedef VOID STDCALL_FUNC (*REMOVE_ADAPTER_HANDLER)(
IN NDIS_HANDLE MacAdapterContext);
typedef struct _NDIS_MAC_CHARACTERISTICS
{
UCHAR MajorNdisVersion;
UCHAR MinorNdisVersion;
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;
VOID
DDKAPI
NdisAllocateSharedMemory(
IN NDIS_HANDLE NdisAdapterHandle,
IN ULONG Length,
IN BOOLEAN Cached,
OUT PVOID *VirtualAddress,
OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
VOID
DDKAPI
NdisCompleteCloseAdapter(
IN NDIS_HANDLE NdisBindingContext,
IN NDIS_STATUS Status);
VOID
DDKAPI
NdisCompleteOpenAdapter(
IN NDIS_HANDLE NdisBindingContext,
IN NDIS_STATUS Status,
IN NDIS_STATUS OpenErrorStatus);
NDIS_STATUS
DDKAPI
NdisDeregisterAdapter(
IN NDIS_HANDLE NdisAdapterHandle);
VOID
DDKAPI
NdisDeregisterAdapterShutdownHandler(
IN NDIS_HANDLE NdisAdapterHandle);
VOID
DDKAPI
NdisFreeSharedMemory(
IN NDIS_HANDLE NdisAdapterHandle,
IN ULONG Length,
IN BOOLEAN Cached,
IN PVOID VirtualAddress,
IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
VOID
DDKAPI
NdisInitializeInterrupt(
OUT PNDIS_STATUS Status,
IN OUT PNDIS_INTERRUPT Interrupt,
IN NDIS_HANDLE NdisAdapterHandle,
IN PNDIS_INTERRUPT_SERVICE InterruptServiceRoutine,
IN PVOID InterruptContext,
IN PNDIS_DEFERRED_PROCESSING DeferredProcessingRoutine,
IN UINT InterruptVector,
IN UINT InterruptLevel,
IN BOOLEAN SharedInterrupt,
IN NDIS_INTERRUPT_MODE InterruptMode);
VOID
DDKAPI
NdisMapIoSpace(
OUT PNDIS_STATUS Status,
OUT PVOID *VirtualAddress,
IN NDIS_HANDLE NdisAdapterHandle,
IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
IN UINT Length);
NDIS_STATUS
DDKAPI
NdisRegisterAdapter(
OUT PNDIS_HANDLE NdisAdapterHandle,
IN NDIS_HANDLE NdisMacHandle,
IN NDIS_HANDLE MacAdapterContext,
IN NDIS_HANDLE WrapperConfigurationContext,
IN PNDIS_STRING AdapterName,
IN PVOID AdapterInformation);
VOID
DDKAPI
NdisRegisterAdapterShutdownHandler(
IN NDIS_HANDLE NdisAdapterHandle,
IN PVOID ShutdownContext,
IN ADAPTER_SHUTDOWN_HANDLER ShutdownHandler);
VOID
DDKAPI
NdisRegisterMac(
OUT PNDIS_STATUS Status,
OUT PNDIS_HANDLE NdisMacHandle,
IN NDIS_HANDLE NdisWrapperHandle,
IN NDIS_HANDLE MacMacContext,
IN PNDIS_MAC_CHARACTERISTICS MacCharacteristics,
IN UINT CharacteristicsLength);
VOID
DDKAPI
NdisReleaseAdapterResources(
IN NDIS_HANDLE NdisAdapterHandle);
VOID
DDKAPI
NdisRemoveInterrupt(
IN PNDIS_INTERRUPT Interrupt);
typedef struct _NDIS_MAC_BLOCK NDIS_MAC_BLOCK, *PNDIS_MAC_BLOCK;
typedef struct _NDIS_ADAPTER_BLOCK NDIS_ADAPTER_BLOCK, *PNDIS_ADAPTER_BLOCK;
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;
typedef struct _NULL_FILTER NULL_FILTER, *PNULL_FILTER;
typedef struct _REFERENCE {
KSPIN_LOCK SpinLock;
USHORT ReferenceCount;
BOOLEAN Closing;
} REFERENCE, *PREFERENCE;
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 _MAP_REGISTER_ENTRY {
PVOID MapRegister;
BOOLEAN WriteToDevice;
} MAP_REGISTER_ENTRY, *PMAP_REGISTER_ENTRY;
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;
BOOLEAN Allocated;
NDIS_HANDLE Initiator;
} NDIS_MINIPORT_WORK_ITEM, *PNDIS_MINIPORT_WORK_ITEM;
typedef struct _NDIS_BIND_PATHS {
UINT Number;
NDIS_STRING Paths[1];
} NDIS_BIND_PATHS, *PNDIS_BIND_PATHS;
typedef struct _FILTERDBS {
union {
PETH_FILTER EthDB;
PNULL_FILTER NullDB;
} u;
PTR_FILTER TrDB;
PFDDI_FILTER FddiDB;
PARC_FILTER ArcDB;
} FILTERDBS, *PFILTERDBS;
typedef VOID
(STDCALL *ETH_RCV_COMPLETE_HANDLER)(
IN PETH_FILTER Filter);
typedef VOID
(STDCALL *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
(STDCALL *FDDI_RCV_COMPLETE_HANDLER)(
IN PFDDI_FILTER Filter);
typedef VOID
(STDCALL *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
(STDCALL *FILTER_PACKET_INDICATION_HANDLER)(
IN NDIS_HANDLE Miniport,
IN PPNDIS_PACKET PacketArray,
IN UINT NumberOfPackets);
typedef VOID
(STDCALL *TR_RCV_COMPLETE_HANDLER)(
IN PTR_FILTER Filter);
typedef VOID
(STDCALL *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
(STDCALL *WAN_RCV_COMPLETE_HANDLER)(
IN NDIS_HANDLE MiniportAdapterHandle,
IN NDIS_HANDLE NdisLinkContext);
typedef VOID
(STDCALL *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 VOID (FASTCALL *NDIS_M_PROCESS_DEFERRED)(
IN PNDIS_MINIPORT_BLOCK Miniport);
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 STDCALL_FUNC (*NDIS_M_REQ_COMPLETE_HANDLER)(
IN NDIS_HANDLE MiniportAdapterHandle,
IN NDIS_STATUS Status);
typedef VOID STDCALL_FUNC (*NDIS_M_RESET_COMPLETE_HANDLER)(
IN NDIS_HANDLE MiniportAdapterHandle,
IN NDIS_STATUS Status,
IN BOOLEAN AddressingReset);
typedef VOID STDCALL_FUNC (*NDIS_M_SEND_COMPLETE_HANDLER)(
IN NDIS_HANDLE MiniportAdapterHandle,
IN PNDIS_PACKET Packet,
IN NDIS_STATUS Status);
typedef VOID STDCALL_FUNC (*NDIS_M_SEND_RESOURCES_HANDLER)(
IN NDIS_HANDLE MiniportAdapterHandle);
typedef BOOLEAN (FASTCALL *NDIS_M_START_SENDS)(
IN PNDIS_MINIPORT_BLOCK Miniport);
typedef VOID
(STDCALL *NDIS_M_STATUS_HANDLER)(
IN NDIS_HANDLE MiniportHandle,
IN NDIS_STATUS GeneralStatus,
IN PVOID StatusBuffer,
IN UINT StatusBufferSize);
typedef VOID
(STDCALL *NDIS_M_STS_COMPLETE_HANDLER)(
IN NDIS_HANDLE MiniportAdapterHandle);
typedef VOID
(STDCALL *NDIS_M_TD_COMPLETE_HANDLER)(
IN NDIS_HANDLE MiniportAdapterHandle,
IN PNDIS_PACKET Packet,
IN NDIS_STATUS Status,
IN UINT BytesTransferred);
typedef VOID
(STDCALL *NDIS_WM_SEND_COMPLETE_HANDLER)(
IN NDIS_HANDLE MiniportAdapterHandle,
IN PVOID Packet,
IN NDIS_STATUS Status);
//#ifdef NDIS_WRAPPER
#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;
#define NDIS_MINIPORT_WORK_QUEUE_SIZE 10
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;
//#endif /* NDIS_WRAPPER */
struct _NDIS_ADAPTER_BLOCK
{
PDEVICE_OBJECT DeviceObject;
PNDIS_MAC_BLOCK MacHandle;
NDIS_HANDLE MacAdapterContext;
NDIS_STRING AdapterName;
PNDIS_OPEN_BLOCK OpenQueue;
PNDIS_ADAPTER_BLOCK NextAdapter;
REFERENCE Ref;
PVOID BusDataContext;
BOOLEAN BeingRemoved;
UCHAR Flags;
PCM_RESOURCE_LIST Resources;
PNDIS_STRING pAdapterInstanceName;
PVOID WrapperContext;
ULONG BusNumber;
NDIS_INTERFACE_TYPE BusType;
ULONG ChannelNumber;
NDIS_INTERFACE_TYPE AdapterType;
BOOLEAN Master;
UCHAR AssignedProcessor;
ULONG PhysicalMapRegistersNeeded;
ULONG MaximumPhysicalMapping;
ULONG InitialPort;
ULONG NumberOfPorts;
PUCHAR InitialPortMapping;
BOOLEAN InitialPortMapped;
PUCHAR PortOffset;
PMAP_REGISTER_ENTRY MapRegisters;
KEVENT AllocationEvent;
UINT CurrentMapRegister;
PADAPTER_OBJECT SystemAdapterObject;
#if 0
#ifdef NDIS_WRAPPER
ULONG BusId;
ULONG SlotNumber;
NDIS_STRING BaseName;
PDEVICE_OBJECT PhysicalDeviceObject;
PDEVICE_OBJECT NextDeviceObject;
PCM_RESOURCE_LIST AllocatedResources;
PCM_RESOURCE_LIST AllocatedResourcesTranslated;
NDIS_EVENT OpenReadyEvent;
NDIS_PNP_DEVICE_STATE PnPDeviceState;
PGET_SET_DEVICE_DATA SetBusData;
PGET_SET_DEVICE_DATA GetBusData;
POID_LIST OidList;
ULONG PnPCapabilities;
#endif /* NDIS_WRAPPER */
#endif
};
/* XXX anyone with info on what this really is - please fix or mail me */
#define NDIS_STATS PVOID
struct _NDIS_MINIPORT_BLOCK {
ULONG NullValue;
PNDIS_MINIPORT_BLOCK NextMiniport;
PNDIS_M_DRIVER_BLOCK DriverHandle;
NDIS_HANDLE MiniportAdapterContext;
UNICODE_STRING MiniportName;
PNDIS_BIND_PATHS BindPaths;
NDIS_HANDLE OpenQueue;
REFERENCE Ref;
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 FilterDbs;
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;
PADAPTER_OBJECT SystemAdapterObject;
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;
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;
PVOID BusInterface;
};
ULONG ChannelNumber;
PNDIS_LOG Log;
ULONG BusId;
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 CurrentDeviceState;
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 PhysicalMapRegistersNeeded;
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;
POID_LIST OidList;
KDPC DeferredDpc;
NDIS_STATS NdisStats;
PNDIS_PACKET IndicatedPacket[MAXIMUM_PROCESSORS];
PKEVENT RemoveReadyEvent;
PKEVENT AllOpensClosedEvent;
PKEVENT AllRequestsCompletedEvent;
ULONG InitTimeMs;
NDIS_MINIPORT_WORK_ITEM WorkItemBuffer[NUMBER_OF_SINGLE_WORK_ITEMS];
PNDIS_MINIPORT_TIMER TimerQueue;
ULONG DriverVerifyFlags;
PNDIS_MINIPORT_BLOCK NextGlobalMiniport;
USHORT InternalResetCount;
USHORT MiniportResetCount;
USHORT MediaSenseConnectCount;
USHORT MediaSenseDisconnectCount;
PNDIS_PACKET *xPackets;
ULONG UserModeOpenReferences;
};
/* Handler prototypes for NDIS_OPEN_BLOCK */
typedef NDIS_STATUS STDCALL_FUNC (*WAN_SEND_HANDLER)(
IN NDIS_HANDLE MacBindingHandle,
IN NDIS_HANDLE LinkHandle,
IN PVOID Packet);
/* NDIS 4.0 extension */
typedef VOID STDCALL_FUNC (*SEND_PACKETS_HANDLER)(
IN NDIS_HANDLE MiniportAdapterContext,
IN PPNDIS_PACKET PacketArray,
IN UINT NumberOfPackets);
struct _NDIS_OPEN_BLOCK
{
PNDIS_MAC_BLOCK MacHandle;
NDIS_HANDLE MacBindingHandle;
PNDIS_ADAPTER_BLOCK AdapterHandle;
PNDIS_PROTOCOL_BLOCK ProtocolHandle;
NDIS_HANDLE ProtocolBindingContext;
PNDIS_OPEN_BLOCK AdapterNextOpen;
PNDIS_OPEN_BLOCK ProtocolNextOpen;
PNDIS_OPEN_BLOCK NextGlobalOpen;
BOOLEAN Closing;
BOOLEAN Unbinding;
BOOLEAN NoProtRsvdOnRcvPkt;
BOOLEAN ProcessingOpens;
PNDIS_STRING BindDeviceName;
KSPIN_LOCK SpinLock;
PNDIS_STRING RootDeviceName;
union
{
SEND_HANDLER SendHandler;
WAN_SEND_HANDLER WanSendHandler;
} u1;
TRANSFER_DATA_HANDLER TransferDataHandler;
SEND_COMPLETE_HANDLER SendCompleteHandler;
TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler;
RECEIVE_HANDLER ReceiveHandler;
RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler;
union
{
RECEIVE_HANDLER PostNt31ReceiveHandler;
WAN_RECEIVE_HANDLER WanReceiveHandler;
} u2;
RECEIVE_COMPLETE_HANDLER PostNt31ReceiveCompleteHandler;
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;
REQUEST_COMPLETE_HANDLER RequestCompleteHandler;
};
/* Routines for NDIS miniport drivers */
/*
* 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))
VOID
DDKAPI
NdisInitializeWrapper(
OUT PNDIS_HANDLE NdisWrapperHandle,
IN PVOID SystemSpecific1,
IN PVOID SystemSpecific2,
IN PVOID SystemSpecific3);
NDIS_STATUS
DDKAPI
NdisMAllocateMapRegisters(
IN NDIS_HANDLE MiniportAdapterHandle,
IN UINT DmaChannel,
IN BOOLEAN Dma32BitAddresses,
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))->FilterDbs.ArcDB), \
(HeaderBuffer), \
(DataBuffer), \
(Length)); \
}
/*
* VOID NdisMArcIndicateReceiveComplete(
* IN NDIS_HANDLE MiniportAdapterHandle);
*/
#define NdisMArcIndicateReceiveComplete(MiniportAdapterHandle) \
{ \
(*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->ArcRxCompleteHandler)( \
((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FilterDbs.ArcDB); \
}
VOID
DDKAPI
NdisMCloseLog(
IN NDIS_HANDLE LogHandle);
NDIS_STATUS
DDKAPI
NdisMCreateLog(
IN NDIS_HANDLE MiniportAdapterHandle,
IN UINT Size,
OUT PNDIS_HANDLE LogHandle);
VOID
DDKAPI
NdisMDeregisterAdapterShutdownHandler(
IN NDIS_HANDLE MiniportHandle);
VOID
DDKAPI
NdisMDeregisterInterrupt(
IN PNDIS_MINIPORT_INTERRUPT Interrupt);
VOID
DDKAPI
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))->FilterDbs.u.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)->FilterDbs.u.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))->FilterDbs.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)->FilterDbs.FddiDB); \
}
VOID
DDKAPI
NdisMFlushLog(
IN NDIS_HANDLE LogHandle);
VOID
DDKAPI
NdisMFreeMapRegisters(
IN NDIS_HANDLE MiniportAdapterHandle);
VOID
DDKAPI
NdisMIndicateStatus(
IN NDIS_HANDLE MiniportAdapterHandle,
IN NDIS_STATUS GeneralStatus,
IN PVOID StatusBuffer,
IN UINT StatusBufferSize);
VOID
DDKAPI
NdisMIndicateStatusComplete(
IN NDIS_HANDLE MiniportAdapterHandle);
NDIS_STATUS
DDKAPI
NdisMMapIoSpace(
OUT PVOID * VirtualAddress,
IN NDIS_HANDLE MiniportAdapterHandle,
IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
IN UINT Length);
VOID
DDKAPI
NdisMQueryInformationComplete(
IN NDIS_HANDLE MiniportAdapterHandle,
IN NDIS_STATUS Status);
VOID
DDKAPI
NdisMRegisterAdapterShutdownHandler(
IN NDIS_HANDLE MiniportHandle,
IN PVOID ShutdownContext,
IN ADAPTER_SHUTDOWN_HANDLER ShutdownHandler);
NDIS_STATUS
DDKAPI
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);
NDIS_STATUS
DDKAPI
NdisMRegisterIoPortRange(
OUT PVOID * PortOffset,
IN NDIS_HANDLE MiniportAdapterHandle,
IN UINT InitialPort,
IN UINT NumberOfPorts);
NDIS_STATUS
DDKAPI
NdisMRegisterMiniport(
IN NDIS_HANDLE NdisWrapperHandle,
IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,
IN UINT CharacteristicsLength);
VOID
DDKAPI
NdisMSetTimer(
IN PNDIS_MINIPORT_TIMER Timer,
IN UINT MillisecondsToDelay);
VOID
DDKAPI
NdisMInitializeTimer(
IN OUT PNDIS_MINIPORT_TIMER Timer,
IN NDIS_HANDLE MiniportAdapterHandle,
IN PNDIS_TIMER_FUNCTION TimerFunction,
IN PVOID FunctionContext);
VOID
DDKAPI
NdisMSetPeriodicTimer(
IN PNDIS_MINIPORT_TIMER Timer,
IN UINT MillisecondPeriod);
VOID
DDKAPI
NdisMCancelTimer(
IN PNDIS_MINIPORT_TIMER Timer,
OUT PBOOLEAN TimerCancelled);
#ifndef 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_WRAPPER */
VOID
DDKAPI
NdisMSetAttributes(
IN NDIS_HANDLE MiniportAdapterHandle,
IN NDIS_HANDLE MiniportAdapterContext,
IN BOOLEAN BusMaster,
IN NDIS_INTERFACE_TYPE AdapterType);
VOID
DDKAPI
NdisMSetAttributesEx(
IN NDIS_HANDLE MiniportAdapterHandle,
IN NDIS_HANDLE MiniportAdapterContext,
IN UINT CheckForHangTimeInSeconds OPTIONAL,
IN ULONG AttributeFlags,
IN NDIS_INTERFACE_TYPE AdapterType);
VOID
DDKAPI
NdisMSetInformationComplete(
IN NDIS_HANDLE MiniportAdapterHandle,
IN NDIS_STATUS Status);
VOID
DDKAPI
NdisMSleep(
IN ULONG MicrosecondsToSleep);
BOOLEAN
DDKAPI
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))->FilterDbs.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)->FilterDbs.TrDB); \
}
NDIS_STATUS
DDKAPI
NdisMWriteLogData(
IN NDIS_HANDLE LogHandle,
IN PVOID LogBuffer,
IN UINT LogBufferSize);
VOID
DDKAPI
NdisMQueryAdapterResources(
OUT PNDIS_STATUS Status,
IN NDIS_HANDLE WrapperConfigurationContext,
OUT PNDIS_RESOURCE_LIST ResourceList,
IN OUT PUINT BufferSize);
VOID
DDKAPI
NdisTerminateWrapper(
IN NDIS_HANDLE NdisWrapperHandle,
IN PVOID SystemSpecific);
VOID
DDKAPI
NdisMUnmapIoSpace(
IN NDIS_HANDLE MiniportAdapterHandle,
IN PVOID VirtualAddress,
IN UINT Length);
/* NDIS intermediate miniport structures */
typedef VOID (*W_MINIPORT_CALLBACK)(
IN NDIS_HANDLE MiniportAdapterContext,
IN PVOID CallbackContext);
/* Routines for intermediate miniport drivers */
NDIS_STATUS
DDKAPI
NdisIMDeInitializeDeviceInstance(
IN NDIS_HANDLE NdisMiniportHandle);
NDIS_STATUS
DDKAPI
NdisIMInitializeDeviceInstance(
IN NDIS_HANDLE DriverHandle,
IN PNDIS_STRING DeviceInstance);
NDIS_STATUS
DDKAPI
NdisIMQueueMiniportCallback(
IN NDIS_HANDLE MiniportAdapterHandle,
IN W_MINIPORT_CALLBACK CallbackRoutine,
IN PVOID CallbackContext);
NDIS_STATUS
DDKAPI
NdisIMRegisterLayeredMiniport(
IN NDIS_HANDLE NdisWrapperHandle,
IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,
IN UINT CharacteristicsLength,
OUT PNDIS_HANDLE DriverHandle);
VOID
DDKAPI
NdisIMRevertBack(
IN NDIS_HANDLE MiniportAdapterHandle,
IN NDIS_HANDLE SwitchHandle);
BOOLEAN
DDKAPI
NdisIMSwitchToMiniport(
IN NDIS_HANDLE MiniportAdapterHandle,
OUT PNDIS_HANDLE SwitchHandle);
/* Functions obsoleted by NDIS 5.0 */
VOID
DDKAPI
NdisFreeDmaChannel(
IN PNDIS_HANDLE NdisDmaHandle);
VOID
DDKAPI
NdisFreeSharedMemory(
IN NDIS_HANDLE NdisAdapterHandle,
IN ULONG Length,
IN BOOLEAN Cached,
IN PVOID VirtualAddress,
IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
NDIS_STATUS
DDKAPI
NdisIMQueueMiniportCallback(
IN NDIS_HANDLE MiniportAdapterHandle,
IN W_MINIPORT_CALLBACK CallbackRoutine,
IN PVOID CallbackContext);
VOID
DDKAPI
NdisIMRevertBack(
IN NDIS_HANDLE MiniportAdapterHandle,
IN NDIS_HANDLE SwitchHandle);
BOOLEAN
DDKAPI
NdisIMSwitchToMiniport(
IN NDIS_HANDLE MiniportAdapterHandle,
OUT PNDIS_HANDLE SwitchHandle);
VOID
DDKAPI
NdisSetupDmaTransfer(
OUT PNDIS_STATUS Status,
IN PNDIS_HANDLE NdisDmaHandle,
IN PNDIS_BUFFER Buffer,
IN ULONG Offset,
IN ULONG Length,
IN BOOLEAN WriteToDevice);
NTSTATUS
DDKAPI
NdisUpcaseUnicodeString(
OUT PUNICODE_STRING DestinationString,
IN PUNICODE_STRING SourceString);
VOID
DDKAPI
NdisUpdateSharedMemory(
IN NDIS_HANDLE NdisAdapterHandle,
IN ULONG Length,
IN PVOID VirtualAddress,
IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
/* Routines for NDIS protocol drivers */
VOID
DDKAPI
NdisRequest(
OUT PNDIS_STATUS Status,
IN NDIS_HANDLE NdisBindingHandle,
IN PNDIS_REQUEST NdisRequest);
VOID
DDKAPI
NdisReset(
OUT PNDIS_STATUS Status,
IN NDIS_HANDLE NdisBindingHandle);
VOID
DDKAPI
NdisSend(
OUT PNDIS_STATUS Status,
IN NDIS_HANDLE NdisBindingHandle,
IN PNDIS_PACKET Packet);
VOID
DDKAPI
NdisSendPackets(
IN NDIS_HANDLE NdisBindingHandle,
IN PPNDIS_PACKET PacketArray,
IN UINT NumberOfPackets);
VOID
DDKAPI
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);
/*
#define NdisTransferData(Status, \
NdisBindingHandle, \
MacReceiveContext, \
ByteOffset, \
BytesToTransfer, \
Packet, \
BytesTransferred) \
{ \
*(Status) = (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->TransferDataHandler)( \
((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacBindingHandle, \
(MacReceiveContext), \
(ByteOffset), \
(BytesToTransfer), \
(Packet), \
(BytesTransferred)); \
}
*/
VOID
DDKAPI
NdisCloseAdapter(
OUT PNDIS_STATUS Status,
IN NDIS_HANDLE NdisBindingHandle);
VOID
DDKAPI
NdisCompleteBindAdapter(
IN NDIS_HANDLE BindAdapterContext,
IN NDIS_STATUS Status,
IN NDIS_STATUS OpenStatus);
VOID
DDKAPI
NdisCompleteUnbindAdapter(
IN NDIS_HANDLE UnbindAdapterContext,
IN NDIS_STATUS Status);
VOID
DDKAPI
NdisDeregisterProtocol(
OUT PNDIS_STATUS Status,
IN NDIS_HANDLE NdisProtocolHandle);
VOID
DDKAPI
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);
VOID
DDKAPI
NdisOpenProtocolConfiguration(
OUT PNDIS_STATUS Status,
OUT PNDIS_HANDLE ConfigurationHandle,
IN PNDIS_STRING ProtocolSection);
NDIS_STATUS
DDKAPI
NdisQueryReceiveInformation(
IN NDIS_HANDLE NdisBindingHandle,
IN NDIS_HANDLE MacContext,
OUT PLONGLONG TimeSent OPTIONAL,
OUT PLONGLONG TimeReceived OPTIONAL,
IN PUCHAR Buffer,
IN UINT BufferSize,
OUT PUINT SizeNeeded);
VOID
DDKAPI
NdisRegisterProtocol(
OUT PNDIS_STATUS Status,
OUT PNDIS_HANDLE NdisProtocolHandle,
IN PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics,
IN UINT CharacteristicsLength);
VOID
DDKAPI
NdisReturnPackets(
IN PNDIS_PACKET *PacketsToReturn,
IN UINT NumberOfPackets);
#ifdef __cplusplus
};
#endif /* __cplusplus */
#endif /* __NDIS_H */
/* EOF */
/*
* XXX - these macros are disabled for the moment due to the fact that there are definitions for them elsewhere.
* We will have to decide which to keep; we don't need both (no BINARY_COMPATIBLE)
*/
#if 0
#define NdisAdjustBufferLength(Buffer, \
Length) \
{ \
(Buffer)->ByteCount = (Length); \
}
#define NDIS_BUFFER_TO_SPAN_PAGES(Buffer) \
( \
MmGetMdlByteCount(Buffer) == 0 ? \
1 : \
ADDRESS_AND_SIZE_TO_SPAN_PAGES( \
MmGetMdlVirtualAddress(Buffer), \
MmGetMdlByteCount(Buffer)) \
)
#define NdisFreeBuffer(Buffer) \
{ \
IoFreeMdl(Buffer) /* ??? */ \
}
#define NdisGetBufferPhysicalArraySize(Buffer, \
ArraySize) \
{ \
}
#define NdisGetFirstBufferFromPacket(Packet, \
FirstBuffer, \
FirstBufferVA, \
FirstBufferLength, \
TotalBufferLength) \
{ \
PNDIS_BUFFER _Buffer; \
\
_Buffer = (Packet)->Private.Head; \
*(FirstBuffer) = _Buffer; \
*(FirstBufferVA) = MmGetMdlVirtualAddress(_Buffer); \
if (_Buffer != NULL) { \
*(FirstBufferLength) = MmGetMdlByteCount(_Buffer); \
_Buffer = _Buffer->Next; \
} else \
*(FirstBufferLength) = 0; \
*(TotalBufferLength) = *(FirstBufferLength); \
while (_Buffer != NULL) { \
*(TotalBufferLength) += MmGetMdlByteCount(_Buffer); \
_Buffer = _Buffer->Next; \
} \
}
#define NdisQueryBuffer(Buffer, \
VirtualAddress, \
Length) \
{ \
if (VirtualAddress) \
*((PVOID*)VirtualAddress) = MmGetSystemAddressForMdl(Buffer); \
\
*((PUINT)Length) = MmGetMdlByteCount(Buffer); \
}
#define NdisQueryBufferOffset(Buffer, \
Offset, \
Length) \
{ \
*((PUINT)Offset) = MmGetMdlByteOffset(Buffer); \
*((PUINT)Length) = MmGetMdlByteCount(Buffer); \
}
#define NdisAnsiStringToUnicodeString(DestinationString, \
SourceString) \
RtlAnsiStringToUnicodeString((DestinationString), (SourceString), FALSE)
#define NdisEqualString(String1, \
String2, \
CaseInsensitive) \
RtlEqualUnicodeString((String1), (String2), (CaseInsensitive))
#define NdisInitAnsiString(DestinationString, \
SourceString) \
RtlInitString((DestinationString), (SourceString))
#define NdisInitUnicodeString(DestinationString, \
SourceString) \
RtlInitUnicodeString((DestinationString), (SourceString))
#define NdisUnicodeStringToAnsiString(DestinationString, \
SourceString) \
RtlUnicodeStringToAnsiString((DestinationString), (SourceString), FALSE)
#define NdisRequest(Status, \
NdisBindingHandle, \
NdisRequest) \
{ \
*(Status) = (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->RequestHandler)( \
((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacBindingHandle, (NdisRequest)); \
}
#define NdisReset(Status, \
NdisBindingHandle) \
{ \
*(Status) = (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->ResetHandler)( \
((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacBindingHandle); \
}
#define NdisSend(Status, \
NdisBindingHandle, \
Packet) \
{ \
*(Status) = (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->u1.SendHandler)( \
((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacBindingHandle, (Packet)); \
}
#define NdisSendPackets(NdisBindingHandle, \
PacketArray, \
NumberOfPackets) \
{ \
(((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->SendPacketsHandler)( \
(PNDIS_OPEN_BLOCK)(NdisBindingHandle), (PacketArray), (NumberOfPackets)); \
}
#ifdef __cplusplus
}
#endif
#endif /* __NDIS_H */
/* EOF */