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