12457 lines
382 KiB
C
12457 lines
382 KiB
C
|
/*++ BUILD Version: ???? // Increment this if a change has global effects
|
||
|
|
||
|
Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
ndis.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This module defines the structures, macros, and functions available
|
||
|
to NDIS drivers.
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#if !defined(_NDIS_)
|
||
|
#define _NDIS_
|
||
|
|
||
|
#if !defined(NDIS_WDM)
|
||
|
#define NDIS_WDM 0
|
||
|
#endif
|
||
|
|
||
|
|
||
|
//
|
||
|
// Set BINARY_COMPATIBLE to 0 if it is not defined. Error out if user tries
|
||
|
// to build a Win9x binary compatible driver using this DDK.
|
||
|
//
|
||
|
|
||
|
#if !defined(BINARY_COMPATIBLE)
|
||
|
#define BINARY_COMPATIBLE 0
|
||
|
#else
|
||
|
#if (BINARY_COMPATIBLE != 0)
|
||
|
#error "can not build Win9x binary compatible drivers, please remove the definition for BINARY_COMPATIBLE or set it to 0"
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
|
||
|
//
|
||
|
// BEGIN INTERNAL DEFINITIONS
|
||
|
//
|
||
|
|
||
|
|
||
|
#include <ntddk.h>
|
||
|
|
||
|
//
|
||
|
// END INTERNAL DEFINITIONS
|
||
|
//
|
||
|
// The following definitions may be used by NDIS drivers, except as noted.
|
||
|
//
|
||
|
|
||
|
#ifndef __NET_PNP__
|
||
|
#define __NET_PNP__
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
//
|
||
|
// PnP and PM event codes that can be indicated up to transports
|
||
|
// and clients.
|
||
|
//
|
||
|
typedef enum _NET_PNP_EVENT_CODE
|
||
|
{
|
||
|
NetEventSetPower,
|
||
|
NetEventQueryPower,
|
||
|
NetEventQueryRemoveDevice,
|
||
|
NetEventCancelRemoveDevice,
|
||
|
NetEventReconfigure,
|
||
|
NetEventBindList,
|
||
|
NetEventBindsComplete,
|
||
|
NetEventPnPCapabilities,
|
||
|
NetEventPause,
|
||
|
NetEventRestart,
|
||
|
NetEventPortActivation,
|
||
|
NetEventPortDeactivation,
|
||
|
NetEventIMReEnableDevice,
|
||
|
NetEventMaximum
|
||
|
} NET_PNP_EVENT_CODE, *PNET_PNP_EVENT_CODE;
|
||
|
|
||
|
//
|
||
|
// Networking PnP event indication structure.
|
||
|
//
|
||
|
typedef struct _NET_PNP_EVENT
|
||
|
{
|
||
|
//
|
||
|
// Event code describing action to take.
|
||
|
//
|
||
|
NET_PNP_EVENT_CODE NetEvent;
|
||
|
|
||
|
//
|
||
|
// Event specific data.
|
||
|
//
|
||
|
PVOID Buffer;
|
||
|
|
||
|
//
|
||
|
// Length of event specific data.
|
||
|
//
|
||
|
ULONG BufferLength;
|
||
|
|
||
|
//
|
||
|
// Reserved values are for use by respective components only.
|
||
|
//
|
||
|
// Note: these reserved areas must be pointer aligned.
|
||
|
//
|
||
|
|
||
|
ULONG_PTR NdisReserved[4];
|
||
|
ULONG_PTR TransportReserved[4];
|
||
|
ULONG_PTR TdiReserved[4];
|
||
|
ULONG_PTR TdiClientReserved[4];
|
||
|
} NET_PNP_EVENT, *PNET_PNP_EVENT;
|
||
|
|
||
|
//
|
||
|
// The following structure defines the device power states.
|
||
|
//
|
||
|
typedef enum _NET_DEVICE_POWER_STATE
|
||
|
{
|
||
|
NetDeviceStateUnspecified = 0,
|
||
|
NetDeviceStateD0,
|
||
|
NetDeviceStateD1,
|
||
|
NetDeviceStateD2,
|
||
|
NetDeviceStateD3,
|
||
|
NetDeviceStateMaximum
|
||
|
} NET_DEVICE_POWER_STATE, *PNET_DEVICE_POWER_STATE;
|
||
|
|
||
|
#endif // __NET_PNP__
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
//
|
||
|
// Indicate that we're building for NT. NDIS_NT is always used for
|
||
|
// miniport builds.
|
||
|
//
|
||
|
|
||
|
#define NDIS_NT 1
|
||
|
|
||
|
#if defined(NDIS_DOS)
|
||
|
#undef NDIS_DOS
|
||
|
#endif
|
||
|
|
||
|
//
|
||
|
// Define status codes and event log codes.
|
||
|
//
|
||
|
|
||
|
#include <ntstatus.h>
|
||
|
#include <netevent.h>
|
||
|
#include <driverspecs.h>
|
||
|
|
||
|
#pragma warning(push)
|
||
|
|
||
|
|
||
|
#pragma warning(disable:4201) // (nonstandard extension used : nameless struct/union)
|
||
|
#pragma warning(disable:4214) // (extension used : bit field types other than int)
|
||
|
|
||
|
|
||
|
//
|
||
|
// Define a couple of extra types.
|
||
|
//
|
||
|
|
||
|
#if !defined(_WINDEF_) // these are defined in windows.h too
|
||
|
typedef signed int INT, *PINT;
|
||
|
typedef unsigned int UINT, *PUINT;
|
||
|
#endif
|
||
|
|
||
|
typedef UNICODE_STRING NDIS_STRING, *PNDIS_STRING;
|
||
|
//
|
||
|
// Landmarks for PFD and SDV to detect kernel mode drivers
|
||
|
//
|
||
|
|
||
|
__drv_Mode_impl(NDIS_INCLUDED)
|
||
|
|
||
|
//
|
||
|
// Portability extentions
|
||
|
//
|
||
|
|
||
|
#define NDIS_INIT_FUNCTION(_F) alloc_text(INIT,_F)
|
||
|
#define NDIS_PAGABLE_FUNCTION(_F) alloc_text(PAGE,_F)
|
||
|
#define NDIS_PAGEABLE_FUNCTION(_F) alloc_text(PAGE,_F)
|
||
|
|
||
|
//
|
||
|
// This file contains the definition of an NDIS_OID as
|
||
|
// well as #defines for all the current OID values.
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// Define NDIS_STATUS and NDIS_HANDLE here
|
||
|
//
|
||
|
typedef PVOID NDIS_HANDLE, *PNDIS_HANDLE;
|
||
|
|
||
|
typedef int NDIS_STATUS, *PNDIS_STATUS; // note default size
|
||
|
|
||
|
#if (!defined(NDIS_WRAPPER))
|
||
|
|
||
|
|
||
|
#if defined(NTDDI_VERSION)
|
||
|
#if (NTDDI_VERSION > NTDDI_WIN7)
|
||
|
#error "unsupported NTDDI_VERSION"
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
|
||
|
//
|
||
|
//
|
||
|
// error out if driver has defined these values
|
||
|
//
|
||
|
#if (defined(NDIS_MINIPORT_MAJOR_VERSION) || \
|
||
|
(defined(NDIS_MINIPORT_MINOR_VERSION)) || \
|
||
|
(defined(NDIS_PROTOCOL_MAJOR_VERSION)) || \
|
||
|
(defined(NDIS_PROTOCOL_MINOR_VERSION)) || \
|
||
|
(defined(NDIS_FILTER_MAJOR_VERSION)) || \
|
||
|
(defined(NDIS_FILTER_MINOR_VERSION)))
|
||
|
#error "Driver is re-defining NDIS reserved macros"
|
||
|
#endif
|
||
|
|
||
|
#if (defined(NDIS_MINIPORT_DRIVER))
|
||
|
|
||
|
//
|
||
|
// for Miniports versions 5.0 and up, provide a consistent way to match
|
||
|
// Ndis version in their characteristics with their makefile defines
|
||
|
//
|
||
|
#if (defined(NDIS620_MINIPORT))
|
||
|
#define NDIS_MINIPORT_MAJOR_VERSION 6
|
||
|
#define NDIS_MINIPORT_MINOR_VERSION 20
|
||
|
#elif (defined(NDIS61_MINIPORT))
|
||
|
#define NDIS_MINIPORT_MAJOR_VERSION 6
|
||
|
#define NDIS_MINIPORT_MINOR_VERSION 1
|
||
|
#elif (defined(NDIS60_MINIPORT))
|
||
|
#define NDIS_MINIPORT_MAJOR_VERSION 6
|
||
|
#define NDIS_MINIPORT_MINOR_VERSION 0
|
||
|
#elif (defined(NDIS51_MINIPORT))
|
||
|
#define NDIS_MINIPORT_MAJOR_VERSION 5
|
||
|
#define NDIS_MINIPORT_MINOR_VERSION 1
|
||
|
#elif (defined(NDIS50_MINIPORT))
|
||
|
#define NDIS_MINIPORT_MAJOR_VERSION 5
|
||
|
#define NDIS_MINIPORT_MINOR_VERSION 0
|
||
|
#else
|
||
|
#error ("Only NDIS miniport drivers with version >= 5 are supported")
|
||
|
#endif
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// disallow invalid major/minor combination
|
||
|
//
|
||
|
#if ((NDIS_MINIPORT_MAJOR_VERSION == 6) && \
|
||
|
(NDIS_MINIPORT_MINOR_VERSION != 20) && \
|
||
|
(NDIS_MINIPORT_MINOR_VERSION != 1) && \
|
||
|
(NDIS_MINIPORT_MINOR_VERSION != 0))
|
||
|
#error "Invalid Miniport major/minor version"
|
||
|
#elif ((NDIS_MINIPORT_MAJOR_VERSION == 5) && \
|
||
|
(NDIS_MINIPORT_MINOR_VERSION != 1) && \
|
||
|
(NDIS_MINIPORT_MINOR_VERSION != 0))
|
||
|
#error "Invalid Miniport major/minor version"
|
||
|
#endif
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// make sure the target platform is consistent with miniport version
|
||
|
//
|
||
|
#if (NDIS_MINIPORT_MAJOR_VERSION == 6) && \
|
||
|
((NDIS_MINIPORT_MINOR_VERSION == 20 && NTDDI_VERSION < NTDDI_WIN7) || \
|
||
|
(NDIS_MINIPORT_MINOR_VERSION == 1 && NTDDI_VERSION < NTDDI_VISTA) || \
|
||
|
(NDIS_MINIPORT_MINOR_VERSION == 0 && NTDDI_VERSION < NTDDI_VISTA))
|
||
|
#error "Wrong NDIS or DDI version specified"
|
||
|
#elif ((NDIS_MINIPORT_MAJOR_VERSION == 5) && \
|
||
|
(((NDIS_MINIPORT_MINOR_VERSION == 1) && (NTDDI_VERSION < NTDDI_WINXP)) || \
|
||
|
((NDIS_MINIPORT_MINOR_VERSION == 0) && (NTDDI_VERSION < NTDDI_WIN2K))))
|
||
|
#error "Wrong NDIS or DDI version specified"
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#endif // NDIS_MINIPORT_DRIVER
|
||
|
|
||
|
|
||
|
|
||
|
#if (defined(NDIS30))
|
||
|
#error "Only NDIS Protocol drivers versions >= 4 are supported"
|
||
|
#endif
|
||
|
|
||
|
//
|
||
|
// for protocol versions 4.0 and up, provide a consistent way to match
|
||
|
// Ndis version in their characteristics with their makefile defines
|
||
|
//
|
||
|
//
|
||
|
// a protocol only or filter driver
|
||
|
//
|
||
|
|
||
|
#if (defined(NDIS620))
|
||
|
#define NDIS_PROTOCOL_MAJOR_VERSION 6
|
||
|
#define NDIS_PROTOCOL_MINOR_VERSION 20
|
||
|
#define NDIS_FILTER_MAJOR_VERSION 6
|
||
|
#define NDIS_FILTER_MINOR_VERSION 20
|
||
|
#elif (defined(NDIS61))
|
||
|
#define NDIS_PROTOCOL_MAJOR_VERSION 6
|
||
|
#define NDIS_PROTOCOL_MINOR_VERSION 1
|
||
|
#define NDIS_FILTER_MAJOR_VERSION 6
|
||
|
#define NDIS_FILTER_MINOR_VERSION 1
|
||
|
#elif (defined(NDIS60))
|
||
|
#define NDIS_PROTOCOL_MAJOR_VERSION 6
|
||
|
#define NDIS_PROTOCOL_MINOR_VERSION 0
|
||
|
#define NDIS_FILTER_MAJOR_VERSION 6
|
||
|
#define NDIS_FILTER_MINOR_VERSION 0
|
||
|
#elif (defined(NDIS51))
|
||
|
#define NDIS_PROTOCOL_MAJOR_VERSION 5
|
||
|
#define NDIS_PROTOCOL_MINOR_VERSION 1
|
||
|
#elif (defined(NDIS50))
|
||
|
#define NDIS_PROTOCOL_MAJOR_VERSION 5
|
||
|
#define NDIS_PROTOCOL_MINOR_VERSION 0
|
||
|
#elif(defined(NDIS40))
|
||
|
#define NDIS_PROTOCOL_MAJOR_VERSION 4
|
||
|
#define NDIS_PROTOCOL_MINOR_VERSION 0
|
||
|
#endif // (defined(NDIS60))
|
||
|
|
||
|
|
||
|
#if (!defined(NDIS_MINIPORT_DRIVER) && !defined (NDIS_PROTOCOL_MAJOR_VERSION))
|
||
|
//
|
||
|
// if it is not a miniport and
|
||
|
// NDIS_PROTOCOL_MAJOR_VERSION is not defined, define it here
|
||
|
//
|
||
|
#define NDIS40
|
||
|
#define NDIS_PROTOCOL_MAJOR_VERSION 4
|
||
|
#define NDIS_PROTOCOL_MINOR_VERSION 0
|
||
|
#endif // (!defined(NDIS_MINIPORT_DRIVER) && !defined (NDIS_PROTOCOL_MAJOR_VERSION))
|
||
|
|
||
|
|
||
|
|
||
|
#if defined (NDIS_FILTER_MAJOR_VERSION)
|
||
|
//
|
||
|
// disallow invalid major/minor combination
|
||
|
//
|
||
|
#if ((NDIS_FILTER_MAJOR_VERSION == 6) && \
|
||
|
(NDIS_FILTER_MINOR_VERSION != 20) && \
|
||
|
(NDIS_FILTER_MINOR_VERSION != 1) && \
|
||
|
(NDIS_FILTER_MINOR_VERSION != 0))
|
||
|
#error "Invalid Filter version"
|
||
|
#endif
|
||
|
#endif // defined (NDIS_FILTER_MAJOR_VERSION)
|
||
|
|
||
|
|
||
|
#if defined (NDIS_PROTOCOL_MAJOR_VERSION)
|
||
|
//
|
||
|
// disallow invalid major/minor combination
|
||
|
//
|
||
|
#if ((NDIS_PROTOCOL_MAJOR_VERSION == 6) && \
|
||
|
(NDIS_PROTOCOL_MINOR_VERSION != 20) && \
|
||
|
(NDIS_PROTOCOL_MINOR_VERSION != 1) && \
|
||
|
(NDIS_PROTOCOL_MINOR_VERSION != 0))
|
||
|
#error "Invalid Protocol version"
|
||
|
#elif ((NDIS_PROTOCOL_MAJOR_VERSION == 5) && \
|
||
|
(NDIS_PROTOCOL_MINOR_VERSION != 1) && (NDIS_PROTOCOL_MINOR_VERSION != 0))
|
||
|
#error "Invalid Protocol version"
|
||
|
#elif ((NDIS_PROTOCOL_MAJOR_VERSION == 4) && (NDIS_PROTOCOL_MINOR_VERSION != 0))
|
||
|
#error "Invalid Protocol major/minor version"
|
||
|
#endif
|
||
|
|
||
|
//
|
||
|
// make sure the target platform is consistent with protocol version
|
||
|
// but don't stop NDIS protocol drivers older than 6.0 from specifying NTDDI_VISTA
|
||
|
//
|
||
|
#if ((NDIS_PROTOCOL_MAJOR_VERSION == 6) && (NTDDI_VERSION < NTDDI_VISTA))
|
||
|
#error "Wrong NDIS or DDI version specified"
|
||
|
#endif
|
||
|
#endif // defined (NDIS_PROTOCOL_MAJOR_VERSION)
|
||
|
|
||
|
|
||
|
|
||
|
#endif // !NDIS_WRAPPER
|
||
|
|
||
|
//
|
||
|
// identify Legacy miniport drivers
|
||
|
//
|
||
|
#if !defined(NDIS_LEGACY_MINIPORT)
|
||
|
#if ((defined(NDIS_MINIPORT_DRIVER) && (NDIS_MINIPORT_MAJOR_VERSION < 6)) || NDIS_WRAPPER)
|
||
|
#define NDIS_LEGACY_MINIPORT 1
|
||
|
#else
|
||
|
#define NDIS_LEGACY_MINIPORT 0
|
||
|
#endif // ((defined(NDIS_MINIPORT_DRIVER) && (NDIS_MINIPORT_MAJOR_VERSION < 6)) || NDIS_WRAPPER)
|
||
|
#endif // !defined(NDIS_LEGACY_MINIPORT)
|
||
|
|
||
|
|
||
|
//
|
||
|
// identify Legacy protocol drivers
|
||
|
//
|
||
|
#if !defined(NDIS_LEGACY_PROTOCOL)
|
||
|
#if ((defined(NDIS_PROTOCOL_MAJOR_VERSION) && (NDIS_PROTOCOL_MAJOR_VERSION < 6)) || NDIS_WRAPPER)
|
||
|
#define NDIS_LEGACY_PROTOCOL 1
|
||
|
#else
|
||
|
#define NDIS_LEGACY_PROTOCOL 0
|
||
|
#endif // ((defined(NDIS_PROTOCOL_MAJOR_VERSION) && (NDIS_PROTOCOL_MAJOR_VERSION < 6)) || NDIS_WRAPPER)
|
||
|
#endif // !defined(NDIS_LEGACY_PROTOCOL)
|
||
|
|
||
|
|
||
|
//
|
||
|
// use something to identify legacy (pre NDIS 6 drivers) + NDIS itself
|
||
|
//
|
||
|
#if !defined(NDIS_LEGACY_DRIVER)
|
||
|
#if (NDIS_LEGACY_MINIPORT || NDIS_LEGACY_PROTOCOL || NDIS_WRAPPER)
|
||
|
#define NDIS_LEGACY_DRIVER 1
|
||
|
#else
|
||
|
#define NDIS_LEGACY_DRIVER 0
|
||
|
#endif // either protocol is legacy or miniport is legacy or this is NDIS
|
||
|
#endif // !defined(NDIS_LEGACY_DRIVER)
|
||
|
|
||
|
|
||
|
//
|
||
|
// and something to identify Vista+ drivers + NDIS itself
|
||
|
//
|
||
|
#if !defined(NDIS_SUPPORT_NDIS6)
|
||
|
#if ((defined (NDIS_MINIPORT_MAJOR_VERSION) && (NDIS_MINIPORT_MAJOR_VERSION >= 6)) || \
|
||
|
(defined (NDIS60)) || NDIS_WRAPPER)
|
||
|
#define NDIS_SUPPORT_NDIS6 1
|
||
|
#else
|
||
|
#define NDIS_SUPPORT_NDIS6 0
|
||
|
#endif
|
||
|
#endif // !defined(NDIS_SUPPORT_NDIS6)
|
||
|
|
||
|
|
||
|
//
|
||
|
// and something to identify Server 2008+ drivers + NDIS itself
|
||
|
//
|
||
|
#if !defined(NDIS_SUPPORT_NDIS61)
|
||
|
#if (((defined (NDIS_MINIPORT_MAJOR_VERSION) && (NDIS_MINIPORT_MAJOR_VERSION >= 6)) && \
|
||
|
(defined (NDIS_MINIPORT_MINOR_VERSION) && (NDIS_MINIPORT_MINOR_VERSION >= 1))) || \
|
||
|
(defined (NDIS61)) || NDIS_WRAPPER)
|
||
|
#define NDIS_SUPPORT_NDIS61 1
|
||
|
#else
|
||
|
#define NDIS_SUPPORT_NDIS61 0
|
||
|
#endif
|
||
|
#endif // !defined(NDIS_SUPPORT_NDIS61)
|
||
|
|
||
|
|
||
|
//
|
||
|
// and something to identify new (Win7 and up) drivers + NDIS itself
|
||
|
//
|
||
|
#if !defined(NDIS_SUPPORT_NDIS620)
|
||
|
#if (((defined (NDIS_MINIPORT_MAJOR_VERSION) && (NDIS_MINIPORT_MAJOR_VERSION >= 6)) && \
|
||
|
(defined (NDIS_MINIPORT_MINOR_VERSION) && (NDIS_MINIPORT_MINOR_VERSION >= 20))) || \
|
||
|
(defined (NDIS620)) || NDIS_WRAPPER)
|
||
|
#define NDIS_SUPPORT_NDIS620 1
|
||
|
#else
|
||
|
#define NDIS_SUPPORT_NDIS620 0
|
||
|
#endif
|
||
|
#endif // !defined(NDIS_SUPPORT_NDIS620)
|
||
|
|
||
|
//
|
||
|
// Enable NDIS61 defines for NDIS 62 drivers
|
||
|
//
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
#undef NDIS_SUPPORT_NDIS61
|
||
|
#define NDIS_SUPPORT_NDIS61 1
|
||
|
#endif
|
||
|
|
||
|
//
|
||
|
// Enable NDIS60 defines for NDIS 61 drivers
|
||
|
//
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
#undef NDIS_SUPPORT_NDIS6
|
||
|
#define NDIS_SUPPORT_NDIS6 1
|
||
|
#endif
|
||
|
|
||
|
//
|
||
|
// Enable deprecated NDIS 6.0/1 APIs for NDIS 6.20+ drivers
|
||
|
// that also want to run the same binary on NDIS 6.0/1
|
||
|
// In this case, such a driver would need to define both
|
||
|
// NDIS620_MINIPORT and NDIS60/61_MINIPORT
|
||
|
// Note: We cannot use NDIS_SUPPORT_NDIS6/61 in this check because
|
||
|
// that would be defined even for NDIS 6.20+
|
||
|
//
|
||
|
#if defined(NDIS61_MINIPORT) || defined(NDIS60_MINIPORT) || \
|
||
|
defined(NDIS61) || defined(NDIS60) || \
|
||
|
defined(NDIS_WRAPPER) || defined(NDIS_LEGACY_DRIVER)
|
||
|
#define NDIS_SUPPORT_60_COMPATIBLE_API 1
|
||
|
#else
|
||
|
#define NDIS_SUPPORT_60_COMPATIBLE_API 0
|
||
|
#endif
|
||
|
|
||
|
#include <ntddndis.h>
|
||
|
|
||
|
//
|
||
|
// Ndis defines for configuration manager data structures
|
||
|
//
|
||
|
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;
|
||
|
|
||
|
//
|
||
|
// Define an exported function.
|
||
|
//
|
||
|
#if defined(NDIS_WRAPPER)
|
||
|
#define EXPORT
|
||
|
#else
|
||
|
#define EXPORT DECLSPEC_IMPORT
|
||
|
#endif
|
||
|
|
||
|
#if NDIS_SUPPORT_NDIS6
|
||
|
typedef struct _NDIS_GENERIC_OBJECT
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
PVOID Caller;
|
||
|
PVOID CallersCaller;
|
||
|
PDRIVER_OBJECT DriverObject;
|
||
|
} NDIS_GENERIC_OBJECT, *PNDIS_GENERIC_OBJECT;
|
||
|
|
||
|
EXPORT
|
||
|
PNDIS_GENERIC_OBJECT
|
||
|
NdisAllocateGenericObject(
|
||
|
PDRIVER_OBJECT DriverObject OPTIONAL,
|
||
|
ULONG Tag,
|
||
|
USHORT Size
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFreeGenericObject(
|
||
|
IN PNDIS_GENERIC_OBJECT NdisObject
|
||
|
);
|
||
|
|
||
|
#endif // NDIS_SUPPORT_NDIS6
|
||
|
|
||
|
|
||
|
//
|
||
|
// Memory manipulation functions.
|
||
|
//
|
||
|
#define NdisMoveMemory(Destination, Source, Length) RtlCopyMemory(Destination, Source, Length)
|
||
|
#define NdisZeroMemory(Destination, Length) RtlZeroMemory(Destination, Length)
|
||
|
#define NdisEqualMemory(Source1, Source2, Length) RtlEqualMemory(Source1, Source2, Length)
|
||
|
#define NdisFillMemory(Destination, Length, Fill) RtlFillMemory(Destination, Length, Fill)
|
||
|
#define NdisRetrieveUlong(Destination, Source) RtlRetrieveUlong(Destination, Source)
|
||
|
#define NdisStoreUlong(Destination, Value) RtlStoreUlong(Destination, Value)
|
||
|
|
||
|
#define NDIS_STRING_CONST(x) {sizeof(L##x)-2, sizeof(L##x), L##x}
|
||
|
|
||
|
//
|
||
|
// On a RISC machine, I/O mapped memory can't be accessed with
|
||
|
// the Rtl routines.
|
||
|
//
|
||
|
#if defined(_M_IX86) || defined(_M_AMD64)
|
||
|
|
||
|
#define NdisMoveMappedMemory(Destination,Source,Length) RtlCopyMemory(Destination,Source,Length)
|
||
|
#define NdisZeroMappedMemory(Destination,Length) RtlZeroMemory(Destination,Length)
|
||
|
|
||
|
#elif defined(_M_IA64)
|
||
|
|
||
|
#define NdisMoveMappedMemory(Destination,Source,Length) \
|
||
|
{ \
|
||
|
PUCHAR _Src = (Source); \
|
||
|
PUCHAR _Dest = (Destination); \
|
||
|
PUCHAR _End = _Dest + (Length); \
|
||
|
while (_Dest < _End) \
|
||
|
{ \
|
||
|
*_Dest++ = *_Src++; \
|
||
|
} \
|
||
|
}
|
||
|
|
||
|
#define NdisZeroMappedMemory(Destination,Length) \
|
||
|
{ \
|
||
|
PUCHAR _Dest = (Destination); \
|
||
|
PUCHAR _End = _Dest + (Length); \
|
||
|
while (_Dest < _End) \
|
||
|
{ \
|
||
|
*_Dest++ = 0; \
|
||
|
} \
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#define NdisMoveToMappedMemory(Destination,Source,Length) \
|
||
|
NdisMoveMappedMemory(Destination,Source,Length)
|
||
|
#define NdisMoveFromMappedMemory(Destination,Source,Length) \
|
||
|
NdisMoveMappedMemory(Destination,Source,Length)
|
||
|
|
||
|
|
||
|
//
|
||
|
// definition of the basic spin lock structure
|
||
|
//
|
||
|
|
||
|
typedef struct _NDIS_SPIN_LOCK
|
||
|
{
|
||
|
KSPIN_LOCK SpinLock;
|
||
|
KIRQL OldIrql;
|
||
|
} NDIS_SPIN_LOCK, * PNDIS_SPIN_LOCK;
|
||
|
|
||
|
|
||
|
//
|
||
|
// definition of the ndis event structure
|
||
|
//
|
||
|
typedef struct _NDIS_EVENT
|
||
|
{
|
||
|
KEVENT Event;
|
||
|
} NDIS_EVENT, *PNDIS_EVENT;
|
||
|
|
||
|
#pragma warning(push)
|
||
|
#pragma warning(disable:4115) // named type definition in parenthesis
|
||
|
typedef VOID (*NDIS_PROC)(struct _NDIS_WORK_ITEM *, PVOID);
|
||
|
#pragma warning(pop)
|
||
|
|
||
|
|
||
|
//
|
||
|
// Definition of an ndis work-item
|
||
|
//
|
||
|
typedef struct _NDIS_WORK_ITEM
|
||
|
{
|
||
|
PVOID Context;
|
||
|
NDIS_PROC Routine;
|
||
|
UCHAR WrapperReserved[8*sizeof(PVOID)];
|
||
|
} NDIS_WORK_ITEM, *PNDIS_WORK_ITEM;
|
||
|
|
||
|
#define NdisInterruptLatched Latched
|
||
|
#define NdisInterruptLevelSensitive LevelSensitive
|
||
|
typedef KINTERRUPT_MODE NDIS_INTERRUPT_MODE, *PNDIS_INTERRUPT_MODE;
|
||
|
|
||
|
//
|
||
|
// Configuration definitions
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// Possible data types
|
||
|
//
|
||
|
|
||
|
typedef enum _NDIS_PARAMETER_TYPE
|
||
|
{
|
||
|
NdisParameterInteger,
|
||
|
NdisParameterHexInteger,
|
||
|
NdisParameterString,
|
||
|
NdisParameterMultiString,
|
||
|
NdisParameterBinary
|
||
|
} NDIS_PARAMETER_TYPE, *PNDIS_PARAMETER_TYPE;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
USHORT Length;
|
||
|
PVOID Buffer;
|
||
|
} BINARY_DATA;
|
||
|
|
||
|
//
|
||
|
// To store configuration information
|
||
|
//
|
||
|
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;
|
||
|
|
||
|
|
||
|
//
|
||
|
// Definitions for the "ProcessorType" keyword
|
||
|
//
|
||
|
typedef enum _NDIS_PROCESSOR_TYPE
|
||
|
{
|
||
|
NdisProcessorX86,
|
||
|
NdisProcessorMips,
|
||
|
NdisProcessorAlpha,
|
||
|
NdisProcessorPpc,
|
||
|
NdisProcessorAmd64,
|
||
|
NdisProcessorIA64
|
||
|
} NDIS_PROCESSOR_TYPE, *PNDIS_PROCESSOR_TYPE;
|
||
|
|
||
|
//
|
||
|
// Definitions for the "Environment" keyword
|
||
|
//
|
||
|
typedef enum _NDIS_ENVIRONMENT_TYPE
|
||
|
{
|
||
|
NdisEnvironmentWindows,
|
||
|
NdisEnvironmentWindowsNt
|
||
|
} NDIS_ENVIRONMENT_TYPE, *PNDIS_ENVIRONMENT_TYPE;
|
||
|
|
||
|
|
||
|
//
|
||
|
// Possible Hardware Architecture. Define these to
|
||
|
// match the HAL INTERFACE_TYPE enum.
|
||
|
//
|
||
|
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,
|
||
|
NdisInterfaceUSB,
|
||
|
NdisInterfaceIrda,
|
||
|
NdisInterface1394,
|
||
|
NdisMaximumInterfaceType
|
||
|
} NDIS_INTERFACE_TYPE, *PNDIS_INTERFACE_TYPE;
|
||
|
|
||
|
//
|
||
|
// Stuff for PCI configuring
|
||
|
//
|
||
|
|
||
|
typedef CM_PARTIAL_RESOURCE_LIST NDIS_RESOURCE_LIST, *PNDIS_RESOURCE_LIST;
|
||
|
|
||
|
|
||
|
//
|
||
|
// The structure passed up on a WAN_LINE_UP indication
|
||
|
//
|
||
|
|
||
|
typedef struct _NDIS_WAN_LINE_UP
|
||
|
{
|
||
|
IN ULONG LinkSpeed; // 100 bps units
|
||
|
IN ULONG MaximumTotalSize; // suggested max for send packets
|
||
|
IN NDIS_WAN_QUALITY Quality;
|
||
|
IN USHORT SendWindow; // suggested by the MAC
|
||
|
IN UCHAR RemoteAddress[6];
|
||
|
IN OUT UCHAR LocalAddress[6];
|
||
|
IN ULONG ProtocolBufferLength; // Length of protocol info buffer
|
||
|
IN PUCHAR ProtocolBuffer; // Information used by protocol
|
||
|
IN USHORT ProtocolType; // Protocol ID
|
||
|
IN OUT NDIS_STRING DeviceName;
|
||
|
} NDIS_WAN_LINE_UP, *PNDIS_WAN_LINE_UP;
|
||
|
|
||
|
|
||
|
//
|
||
|
// The structure passed up on a WAN_LINE_DOWN indication
|
||
|
//
|
||
|
|
||
|
typedef struct _NDIS_WAN_LINE_DOWN
|
||
|
{
|
||
|
IN UCHAR RemoteAddress[6];
|
||
|
IN UCHAR LocalAddress[6];
|
||
|
} NDIS_WAN_LINE_DOWN, *PNDIS_WAN_LINE_DOWN;
|
||
|
|
||
|
//
|
||
|
// The structure passed up on a WAN_FRAGMENT indication
|
||
|
//
|
||
|
|
||
|
typedef struct _NDIS_WAN_FRAGMENT
|
||
|
{
|
||
|
IN UCHAR RemoteAddress[6];
|
||
|
IN UCHAR LocalAddress[6];
|
||
|
} NDIS_WAN_FRAGMENT, *PNDIS_WAN_FRAGMENT;
|
||
|
|
||
|
//
|
||
|
// The structure passed up on a WAN_GET_STATS indication
|
||
|
//
|
||
|
|
||
|
typedef struct _NDIS_WAN_GET_STATS
|
||
|
{
|
||
|
IN UCHAR LocalAddress[6];
|
||
|
OUT ULONG BytesSent;
|
||
|
OUT ULONG BytesRcvd;
|
||
|
OUT ULONG FramesSent;
|
||
|
OUT ULONG FramesRcvd;
|
||
|
OUT ULONG CRCErrors; // Serial-like info only
|
||
|
OUT ULONG TimeoutErrors; // Serial-like info only
|
||
|
OUT ULONG AlignmentErrors; // Serial-like info only
|
||
|
OUT ULONG SerialOverrunErrors; // Serial-like info only
|
||
|
OUT ULONG FramingErrors; // Serial-like info only
|
||
|
OUT ULONG BufferOverrunErrors; // Serial-like info only
|
||
|
OUT ULONG BytesTransmittedUncompressed; // Compression info only
|
||
|
OUT ULONG BytesReceivedUncompressed; // Compression info only
|
||
|
OUT ULONG BytesTransmittedCompressed; // Compression info only
|
||
|
OUT ULONG BytesReceivedCompressed; // Compression info only
|
||
|
} NDIS_WAN_GET_STATS, *PNDIS_WAN_GET_STATS;
|
||
|
|
||
|
|
||
|
//
|
||
|
// Ndis Buffer is actually an Mdl
|
||
|
//
|
||
|
typedef MDL NDIS_BUFFER, *PNDIS_BUFFER;
|
||
|
|
||
|
#if NDIS_LEGACY_DRIVER
|
||
|
struct _NDIS_PACKET;
|
||
|
typedef NDIS_HANDLE PNDIS_PACKET_POOL;
|
||
|
|
||
|
//
|
||
|
//
|
||
|
// wrapper-specific part of a packet
|
||
|
//
|
||
|
typedef struct _NDIS_PACKET_PRIVATE
|
||
|
{
|
||
|
UINT PhysicalCount; // number of physical pages in packet.
|
||
|
UINT TotalLength; // Total amount of data in the packet.
|
||
|
PNDIS_BUFFER Head; // first buffer in the chain
|
||
|
PNDIS_BUFFER Tail; // last buffer in the chain
|
||
|
|
||
|
// if Head is NULL the chain is empty; Tail doesn't have to be NULL also
|
||
|
|
||
|
PNDIS_PACKET_POOL Pool; // so we know where to free it back to
|
||
|
UINT Count;
|
||
|
ULONG Flags;
|
||
|
BOOLEAN ValidCounts;
|
||
|
UCHAR NdisPacketFlags; // See fPACKET_xxx bits below
|
||
|
USHORT NdisPacketOobOffset;
|
||
|
} NDIS_PACKET_PRIVATE, * PNDIS_PACKET_PRIVATE;
|
||
|
|
||
|
//
|
||
|
// The bits define the bits in the Flags
|
||
|
//
|
||
|
#define NDIS_FLAGS_PROTOCOL_ID_MASK 0x0000000F // The low 4 bits are defined for protocol-id
|
||
|
// The values are defined in ntddndis.h
|
||
|
#define NDIS_FLAGS_MULTICAST_PACKET 0x00000010 // don't use
|
||
|
#define NDIS_FLAGS_RESERVED2 0x00000020 // don't use
|
||
|
#define NDIS_FLAGS_RESERVED3 0x00000040 // don't use
|
||
|
#define NDIS_FLAGS_DONT_LOOPBACK 0x00000080 // Write only
|
||
|
#define NDIS_FLAGS_IS_LOOPBACK_PACKET 0x00000100 // Read only
|
||
|
#define NDIS_FLAGS_LOOPBACK_ONLY 0x00000200 // Write only
|
||
|
#define NDIS_FLAGS_RESERVED4 0x00000400 // don't use
|
||
|
#define NDIS_FLAGS_DOUBLE_BUFFERED 0x00000800 // used by ndis
|
||
|
#define NDIS_FLAGS_SENT_AT_DPC 0x00001000 // the protocol sent this packet at DPC
|
||
|
#define NDIS_FLAGS_USES_SG_BUFFER_LIST 0x00002000 // used by Ndis
|
||
|
#define NDIS_FLAGS_USES_ORIGINAL_PACKET 0x00004000 // used by Ndis
|
||
|
#define NDIS_FLAGS_PADDED 0x00010000 // used by NDIS
|
||
|
#define NDIS_FLAGS_XLATE_AT_TOP 0x00020000 // used by NDIS
|
||
|
|
||
|
//
|
||
|
// Low-bits in the NdisPacketFlags are reserved by NDIS Wrapper for internal use
|
||
|
//
|
||
|
#define fPACKET_WRAPPER_RESERVED 0x3F
|
||
|
#define fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO 0x40
|
||
|
#define fPACKET_ALLOCATED_BY_NDIS 0x80
|
||
|
|
||
|
#endif // NDIS_LEGACY_DRIVER
|
||
|
|
||
|
//
|
||
|
// Definition for layout of the media-specific data. More than one class of media-specific
|
||
|
// information can be tagged onto a packet.
|
||
|
//
|
||
|
typedef enum _NDIS_CLASS_ID
|
||
|
{
|
||
|
NdisClass802_3Priority,
|
||
|
NdisClassWirelessWanMbxMailbox,
|
||
|
NdisClassIrdaPacketInfo,
|
||
|
NdisClassAtmAALInfo
|
||
|
|
||
|
} NDIS_CLASS_ID;
|
||
|
|
||
|
typedef struct _MEDIA_SPECIFIC_INFORMATION
|
||
|
{
|
||
|
UINT NextEntryOffset;
|
||
|
NDIS_CLASS_ID ClassId;
|
||
|
UINT Size;
|
||
|
UCHAR ClassInformation[1];
|
||
|
|
||
|
} MEDIA_SPECIFIC_INFORMATION, *PMEDIA_SPECIFIC_INFORMATION;
|
||
|
|
||
|
#if NDIS_LEGACY_DRIVER
|
||
|
|
||
|
typedef struct _NDIS_PACKET_OOB_DATA
|
||
|
{
|
||
|
union
|
||
|
{
|
||
|
ULONGLONG TimeToSend;
|
||
|
ULONGLONG TimeSent;
|
||
|
};
|
||
|
ULONGLONG TimeReceived;
|
||
|
UINT HeaderSize;
|
||
|
UINT SizeMediaSpecificInfo;
|
||
|
PVOID MediaSpecificInformation;
|
||
|
|
||
|
NDIS_STATUS Status;
|
||
|
} NDIS_PACKET_OOB_DATA, *PNDIS_PACKET_OOB_DATA;
|
||
|
|
||
|
#define NDIS_GET_PACKET_PROTOCOL_TYPE(_Packet_) ((_Packet_)->Private.Flags & NDIS_PROTOCOL_ID_MASK)
|
||
|
|
||
|
#define NDIS_OOB_DATA_FROM_PACKET(_p) \
|
||
|
(PNDIS_PACKET_OOB_DATA)((PUCHAR)(_p) + \
|
||
|
(_p)->Private.NdisPacketOobOffset)
|
||
|
#define NDIS_GET_PACKET_HEADER_SIZE(_Packet) \
|
||
|
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
|
||
|
(_Packet)->Private.NdisPacketOobOffset))->HeaderSize
|
||
|
#define NDIS_GET_PACKET_STATUS(_Packet) \
|
||
|
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
|
||
|
(_Packet)->Private.NdisPacketOobOffset))->Status
|
||
|
#define NDIS_GET_PACKET_TIME_TO_SEND(_Packet) \
|
||
|
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
|
||
|
(_Packet)->Private.NdisPacketOobOffset))->TimeToSend
|
||
|
#define NDIS_GET_PACKET_TIME_SENT(_Packet) \
|
||
|
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
|
||
|
(_Packet)->Private.NdisPacketOobOffset))->TimeSent
|
||
|
#define NDIS_GET_PACKET_TIME_RECEIVED(_Packet) \
|
||
|
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
|
||
|
(_Packet)->Private.NdisPacketOobOffset))->TimeReceived
|
||
|
#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;\
|
||
|
} \
|
||
|
}
|
||
|
|
||
|
#define NDIS_SET_PACKET_HEADER_SIZE(_Packet, _HdrSize) \
|
||
|
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
|
||
|
(_Packet)->Private.NdisPacketOobOffset))->HeaderSize = (_HdrSize)
|
||
|
#define NDIS_SET_PACKET_STATUS(_Packet, _Status) \
|
||
|
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
|
||
|
(_Packet)->Private.NdisPacketOobOffset))->Status = (_Status)
|
||
|
#define NDIS_SET_PACKET_TIME_TO_SEND(_Packet, _TimeToSend) \
|
||
|
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
|
||
|
(_Packet)->Private.NdisPacketOobOffset))->TimeToSend = (_TimeToSend)
|
||
|
#define NDIS_SET_PACKET_TIME_SENT(_Packet, _TimeSent) \
|
||
|
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
|
||
|
(_Packet)->Private.NdisPacketOobOffset))->TimeSent = (_TimeSent)
|
||
|
#define NDIS_SET_PACKET_TIME_RECEIVED(_Packet, _TimeReceived) \
|
||
|
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
|
||
|
(_Packet)->Private.NdisPacketOobOffset))->TimeReceived = (_TimeReceived)
|
||
|
#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);\
|
||
|
} \
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// packet definition
|
||
|
//
|
||
|
typedef struct _NDIS_PACKET
|
||
|
{
|
||
|
NDIS_PACKET_PRIVATE Private;
|
||
|
|
||
|
union
|
||
|
{
|
||
|
struct // For Connection-less miniports
|
||
|
{
|
||
|
UCHAR MiniportReserved[2*sizeof(PVOID)];
|
||
|
UCHAR WrapperReserved[2*sizeof(PVOID)];
|
||
|
};
|
||
|
|
||
|
struct
|
||
|
{
|
||
|
//
|
||
|
// For de-serialized miniports. And by implication conn-oriented miniports.
|
||
|
//
|
||
|
UCHAR MiniportReservedEx[3*sizeof(PVOID)];
|
||
|
UCHAR WrapperReservedEx[sizeof(PVOID)];
|
||
|
};
|
||
|
|
||
|
struct
|
||
|
{
|
||
|
UCHAR MacReserved[4*sizeof(PVOID)];
|
||
|
};
|
||
|
};
|
||
|
|
||
|
ULONG_PTR Reserved[2]; // For compatibility with Win95
|
||
|
UCHAR ProtocolReserved[1];
|
||
|
|
||
|
} NDIS_PACKET, *PNDIS_PACKET, **PPNDIS_PACKET;
|
||
|
|
||
|
#endif // NDIS_LEGACY_DRIVER
|
||
|
|
||
|
//
|
||
|
// NDIS per-packet information.
|
||
|
//
|
||
|
typedef enum _NDIS_PER_PACKET_INFO
|
||
|
{
|
||
|
TcpIpChecksumPacketInfo,
|
||
|
IpSecPacketInfo,
|
||
|
TcpLargeSendPacketInfo,
|
||
|
ClassificationHandlePacketInfo,
|
||
|
NdisReserved,
|
||
|
ScatterGatherListPacketInfo,
|
||
|
Ieee8021QInfo,
|
||
|
OriginalPacketInfo,
|
||
|
PacketCancelId,
|
||
|
OriginalNetBufferList,
|
||
|
CachedNetBufferList,
|
||
|
ShortPacketPaddingInfo,
|
||
|
MaxPerPacketInfo
|
||
|
} NDIS_PER_PACKET_INFO, *PNDIS_PER_PACKET_INFO;
|
||
|
|
||
|
#if NDIS_LEGACY_DRIVER
|
||
|
typedef struct _NDIS_PACKET_EXTENSION
|
||
|
{
|
||
|
PVOID NdisPacketInfo[MaxPerPacketInfo];
|
||
|
} NDIS_PACKET_EXTENSION, *PNDIS_PACKET_EXTENSION;
|
||
|
|
||
|
#define NDIS_PACKET_EXTENSION_FROM_PACKET(_P) ((PNDIS_PACKET_EXTENSION)((PUCHAR)(_P) + (_P)->Private.NdisPacketOobOffset + sizeof(NDIS_PACKET_OOB_DATA)))
|
||
|
#define NDIS_PER_PACKET_INFO_FROM_PACKET(_P, _Id) ((PNDIS_PACKET_EXTENSION)((PUCHAR)(_P) + (_P)->Private.NdisPacketOobOffset + sizeof(NDIS_PACKET_OOB_DATA)))->NdisPacketInfo[(_Id)]
|
||
|
#define NDIS_GET_ORIGINAL_PACKET(_P) NDIS_PER_PACKET_INFO_FROM_PACKET(_P, OriginalPacketInfo)
|
||
|
#define NDIS_SET_ORIGINAL_PACKET(_P, _OP) NDIS_PER_PACKET_INFO_FROM_PACKET(_P, OriginalPacketInfo) = _OP
|
||
|
#define NDIS_GET_PACKET_CANCEL_ID(_P) NDIS_PER_PACKET_INFO_FROM_PACKET(_P, PacketCancelId)
|
||
|
#define NDIS_SET_PACKET_CANCEL_ID(_P, _cId) NDIS_PER_PACKET_INFO_FROM_PACKET(_P, PacketCancelId) = _cId
|
||
|
|
||
|
|
||
|
//
|
||
|
// Ndis 5.1 entry points for setting/gettign packet's CancelId and cancelling send packets
|
||
|
//
|
||
|
|
||
|
/*
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisSetPacketCancelId(
|
||
|
IN PNDIS_PACKET Packet,
|
||
|
IN PVOID CancelId
|
||
|
);
|
||
|
*/
|
||
|
#define NdisSetPacketCancelId(_Packet, _CancelId) NDIS_SET_PACKET_CANCEL_ID(_Packet, _CancelId)
|
||
|
|
||
|
/*
|
||
|
EXPORT
|
||
|
PVOID
|
||
|
NdisGetPacketCancelId(
|
||
|
IN PNDIS_PACKET Packet
|
||
|
);
|
||
|
*/
|
||
|
#define NdisGetPacketCancelId(_Packet) NDIS_GET_PACKET_CANCEL_ID(_Packet)
|
||
|
|
||
|
|
||
|
typedef struct _NDIS_PACKET_STACK
|
||
|
{
|
||
|
ULONG_PTR IMReserved[2];
|
||
|
ULONG_PTR NdisReserved[4];
|
||
|
} NDIS_PACKET_STACK, *PNDIS_PACKET_STACK;
|
||
|
|
||
|
|
||
|
#endif // NDIS_LEGACY_DRIVER
|
||
|
|
||
|
//
|
||
|
// Per-packet information for TcpIpChecksumPacketInfo.
|
||
|
//
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
typedef struct _NDIS_TCP_IP_CHECKSUM_PACKET_INFO
|
||
|
{
|
||
|
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;
|
||
|
};
|
||
|
} NDIS_TCP_IP_CHECKSUM_PACKET_INFO, *PNDIS_TCP_IP_CHECKSUM_PACKET_INFO;
|
||
|
|
||
|
|
||
|
//
|
||
|
// Per-packet information for Ieee8021QInfo.
|
||
|
//
|
||
|
typedef struct _NDIS_PACKET_8021Q_INFO
|
||
|
{
|
||
|
union
|
||
|
{
|
||
|
struct
|
||
|
{
|
||
|
UINT32 UserPriority:3; // 802.1p priority
|
||
|
UINT32 CanonicalFormatId:1; // always 0
|
||
|
UINT32 VlanId:12; // VLAN Identification
|
||
|
UINT32 Reserved:16; // set to 0
|
||
|
} TagHeader;
|
||
|
|
||
|
PVOID Value;
|
||
|
};
|
||
|
} NDIS_PACKET_8021Q_INFO, *PNDIS_PACKET_8021Q_INFO;
|
||
|
|
||
|
|
||
|
#if NDIS_LEGACY_DRIVER
|
||
|
//
|
||
|
// Old definitions, to be obsoleted.
|
||
|
//
|
||
|
#define Ieee8021pPriority Ieee8021QInfo
|
||
|
typedef UINT IEEE8021PPRIORITY;
|
||
|
|
||
|
//
|
||
|
// WAN Packet. This is used by WAN miniports only. This is the legacy model.
|
||
|
// Co-Ndis is the preferred model for WAN miniports
|
||
|
//
|
||
|
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;
|
||
|
|
||
|
//
|
||
|
// Routines to get/set packet flags
|
||
|
//
|
||
|
|
||
|
/*++
|
||
|
|
||
|
UINT
|
||
|
NdisGetPacketFlags(
|
||
|
IN PNDIS_PACKET Packet
|
||
|
);
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#define NdisGetPacketFlags(_Packet) ((_Packet)->Private.Flags)
|
||
|
|
||
|
#define NDIS_PACKET_FIRST_NDIS_BUFFER(_Packet) ((_Packet)->Private.Head)
|
||
|
#define NDIS_PACKET_LAST_NDIS_BUFFER(_Packet) ((_Packet)->Private.Tail)
|
||
|
#define NDIS_PACKET_VALID_COUNTS(_Packet) ((_Packet)->Private.ValidCounts)
|
||
|
|
||
|
|
||
|
/*++
|
||
|
|
||
|
VOID
|
||
|
NdisSetPacketFlags(
|
||
|
IN PNDIS_PACKET Packet,
|
||
|
IN UINT Flags
|
||
|
);
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#define NdisSetPacketFlags(_Packet, _Flags) (_Packet)->Private.Flags |= (_Flags)
|
||
|
#define NdisClearPacketFlags(_Packet, _Flags) (_Packet)->Private.Flags &= ~(_Flags)
|
||
|
|
||
|
#endif // NDIS_LEGACY_DRIVER
|
||
|
|
||
|
//
|
||
|
// Request types used by NdisRequest; constants are added for
|
||
|
// all entry points in the MAC, for those that want to create
|
||
|
// their own internal requests.
|
||
|
//
|
||
|
|
||
|
#if NDIS_SUPPORT_NDIS6
|
||
|
typedef enum _NDIS_REQUEST_TYPE
|
||
|
{
|
||
|
NdisRequestQueryInformation,
|
||
|
NdisRequestSetInformation,
|
||
|
NdisRequestQueryStatistics,
|
||
|
NdisRequestOpen,
|
||
|
NdisRequestClose,
|
||
|
NdisRequestSend,
|
||
|
NdisRequestTransferData,
|
||
|
NdisRequestReset,
|
||
|
NdisRequestGeneric1,
|
||
|
NdisRequestGeneric2,
|
||
|
NdisRequestGeneric3,
|
||
|
NdisRequestGeneric4,
|
||
|
NdisRequestMethod,
|
||
|
} NDIS_REQUEST_TYPE, *PNDIS_REQUEST_TYPE;
|
||
|
#else
|
||
|
typedef enum _NDIS_REQUEST_TYPE
|
||
|
{
|
||
|
NdisRequestQueryInformation,
|
||
|
NdisRequestSetInformation,
|
||
|
NdisRequestQueryStatistics,
|
||
|
NdisRequestOpen,
|
||
|
NdisRequestClose,
|
||
|
NdisRequestSend,
|
||
|
NdisRequestTransferData,
|
||
|
NdisRequestReset,
|
||
|
NdisRequestGeneric1,
|
||
|
NdisRequestGeneric2,
|
||
|
NdisRequestGeneric3,
|
||
|
NdisRequestGeneric4,
|
||
|
} NDIS_REQUEST_TYPE, *PNDIS_REQUEST_TYPE;
|
||
|
#endif // NDIS_SUPPORT_NDIS6
|
||
|
|
||
|
|
||
|
#if NDIS_LEGACY_DRIVER
|
||
|
|
||
|
//
|
||
|
// Structure of requests sent via NdisRequest
|
||
|
//
|
||
|
|
||
|
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) || defined(NDIS50_MINIPORT) || defined(NDIS51_MINIPORT))
|
||
|
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;
|
||
|
|
||
|
#endif
|
||
|
|
||
|
//
|
||
|
// NDIS Address Family definitions.
|
||
|
//
|
||
|
typedef ULONG NDIS_AF, *PNDIS_AF;
|
||
|
#define CO_ADDRESS_FAMILY_Q2931 ((NDIS_AF)0x1) // ATM
|
||
|
#define CO_ADDRESS_FAMILY_PSCHED ((NDIS_AF)0x2) // Packet scheduler
|
||
|
#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_INFINIBAND ((NDIS_AF)0x7)
|
||
|
#define CO_ADDRESS_FAMILY_TAPI ((NDIS_AF)0x800)
|
||
|
#define CO_ADDRESS_FAMILY_TAPI_PROXY ((NDIS_AF)0x801)
|
||
|
|
||
|
//
|
||
|
// The following is OR'ed with the base AF to denote proxy support
|
||
|
//
|
||
|
#define CO_ADDRESS_FAMILY_PROXY 0x80000000
|
||
|
|
||
|
|
||
|
//
|
||
|
// Address family structure registered/opened via
|
||
|
// NdisCmRegisterAddressFamily
|
||
|
// NdisClOpenAddressFamily
|
||
|
//
|
||
|
typedef struct
|
||
|
{
|
||
|
NDIS_AF AddressFamily; // one of the CO_ADDRESS_FAMILY_xxx values above
|
||
|
ULONG MajorVersion; // the major version of call manager
|
||
|
ULONG MinorVersion; // the minor version of call manager
|
||
|
} CO_ADDRESS_FAMILY, *PCO_ADDRESS_FAMILY;
|
||
|
|
||
|
//
|
||
|
// Definition for a SAP
|
||
|
//
|
||
|
typedef struct
|
||
|
{
|
||
|
ULONG SapType;
|
||
|
ULONG SapLength;
|
||
|
UCHAR Sap[1];
|
||
|
} CO_SAP, *PCO_SAP;
|
||
|
|
||
|
//
|
||
|
// Definitions for physical address.
|
||
|
//
|
||
|
|
||
|
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;
|
||
|
|
||
|
|
||
|
/*++
|
||
|
|
||
|
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)
|
||
|
|
||
|
//
|
||
|
// Macro to initialize an NDIS_PHYSICAL_ADDRESS constant
|
||
|
//
|
||
|
|
||
|
#define NDIS_PHYSICAL_ADDRESS_CONST(_Low, _High) \
|
||
|
{ (ULONG)(_Low), (LONG)(_High) }
|
||
|
|
||
|
//
|
||
|
// block used for references...
|
||
|
//
|
||
|
typedef struct _REFERENCE
|
||
|
{
|
||
|
KSPIN_LOCK SpinLock;
|
||
|
USHORT ReferenceCount;
|
||
|
BOOLEAN Closing;
|
||
|
} REFERENCE, * PREFERENCE;
|
||
|
|
||
|
//
|
||
|
// Types of Memory (not mutually exclusive)
|
||
|
//
|
||
|
|
||
|
#define NDIS_MEMORY_CONTIGUOUS 0x00000001
|
||
|
#define NDIS_MEMORY_NONCACHED 0x00000002
|
||
|
|
||
|
//
|
||
|
// Open options
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// This flag has been deprecated
|
||
|
//
|
||
|
#pragma deprecated(NDIS_OPEN_RECEIVE_NOT_REENTRANT)
|
||
|
#define NDIS_OPEN_RECEIVE_NOT_REENTRANT 0x00000001
|
||
|
|
||
|
//
|
||
|
// NDIS_STATUS values used in status indication
|
||
|
//
|
||
|
|
||
|
#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_WAN_CO_MTULINKPARAMS ((NDIS_STATUS)0x40010025L)
|
||
|
//
|
||
|
// new status indication codes used by NDIS 6 drivers
|
||
|
//
|
||
|
#if NDIS_SUPPORT_NDIS6
|
||
|
#define NDIS_STATUS_LINK_STATE ((NDIS_STATUS)0x40010017L)
|
||
|
#define NDIS_STATUS_NETWORK_CHANGE ((NDIS_STATUS)0x40010018L)
|
||
|
#define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION_EX ((NDIS_STATUS)0x40010019L)
|
||
|
#define NDIS_STATUS_PORT_STATE ((NDIS_STATUS)0x40010022L)
|
||
|
#define NDIS_STATUS_OPER_STATUS ((NDIS_STATUS)0x40010023L)
|
||
|
#define NDIS_STATUS_PACKET_FILTER ((NDIS_STATUS)0x40010024L)
|
||
|
// Note that 0x40010025L is reserved for NDIS_STATUS_WAN_CO_MTULINKPARAMS
|
||
|
|
||
|
#define NDIS_STATUS_IP_OPER_STATUS ((NDIS_STATUS)0x40010026L)
|
||
|
|
||
|
//
|
||
|
// offload specific status indication codes
|
||
|
//
|
||
|
#define NDIS_STATUS_OFFLOAD_PAUSE ((NDIS_STATUS)0x40020001L)
|
||
|
#define NDIS_STATUS_UPLOAD_ALL ((NDIS_STATUS)0x40020002L)
|
||
|
#define NDIS_STATUS_OFFLOAD_RESUME ((NDIS_STATUS)0x40020003L)
|
||
|
#define NDIS_STATUS_OFFLOAD_PARTIAL_SUCCESS ((NDIS_STATUS)0x40020004L)
|
||
|
#define NDIS_STATUS_OFFLOAD_STATE_INVALID ((NDIS_STATUS)0x40020005L)
|
||
|
#define NDIS_STATUS_TASK_OFFLOAD_CURRENT_CONFIG ((NDIS_STATUS)0x40020006L)
|
||
|
#define NDIS_STATUS_TASK_OFFLOAD_HARDWARE_CAPABILITIES ((NDIS_STATUS)0x40020007L)
|
||
|
#define NDIS_STATUS_OFFLOAD_ENCASPULATION_CHANGE ((NDIS_STATUS)0x40020008L)
|
||
|
#define NDIS_STATUS_TCP_CONNECTION_OFFLOAD_HARDWARE_CAPABILITIES ((NDIS_STATUS)0x4002000BL)
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
#define NDIS_STATUS_HD_SPLIT_CURRENT_CONFIG ((NDIS_STATUS)0x4002000CL)
|
||
|
#endif // (NDIS_SUPPORT_NDIS61)
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
#define NDIS_STATUS_RECEIVE_QUEUE_STATE ((NDIS_STATUS)0x4002000DL)
|
||
|
#endif
|
||
|
|
||
|
#define NDIS_STATUS_OFFLOAD_IM_RESERVED1 ((NDIS_STATUS)0x40020100L)
|
||
|
#define NDIS_STATUS_OFFLOAD_IM_RESERVED2 ((NDIS_STATUS)0x40020101L)
|
||
|
#define NDIS_STATUS_OFFLOAD_IM_RESERVED3 ((NDIS_STATUS)0x40020102L)
|
||
|
|
||
|
//
|
||
|
// 802.11 specific status indication codes
|
||
|
//
|
||
|
#define NDIS_STATUS_DOT11_SCAN_CONFIRM ((NDIS_STATUS)0x40030000L)
|
||
|
#define NDIS_STATUS_DOT11_MPDU_MAX_LENGTH_CHANGED ((NDIS_STATUS)0x40030001L)
|
||
|
#define NDIS_STATUS_DOT11_ASSOCIATION_START ((NDIS_STATUS)0x40030002L)
|
||
|
#define NDIS_STATUS_DOT11_ASSOCIATION_COMPLETION ((NDIS_STATUS)0x40030003L)
|
||
|
#define NDIS_STATUS_DOT11_CONNECTION_START ((NDIS_STATUS)0x40030004L)
|
||
|
#define NDIS_STATUS_DOT11_CONNECTION_COMPLETION ((NDIS_STATUS)0x40030005L)
|
||
|
#define NDIS_STATUS_DOT11_ROAMING_START ((NDIS_STATUS)0x40030006L)
|
||
|
#define NDIS_STATUS_DOT11_ROAMING_COMPLETION ((NDIS_STATUS)0x40030007L)
|
||
|
#define NDIS_STATUS_DOT11_DISASSOCIATION ((NDIS_STATUS)0x40030008L)
|
||
|
#define NDIS_STATUS_DOT11_TKIPMIC_FAILURE ((NDIS_STATUS)0x40030009L)
|
||
|
#define NDIS_STATUS_DOT11_PMKID_CANDIDATE_LIST ((NDIS_STATUS)0x4003000AL)
|
||
|
#define NDIS_STATUS_DOT11_PHY_STATE_CHANGED ((NDIS_STATUS)0x4003000BL)
|
||
|
#define NDIS_STATUS_DOT11_LINK_QUALITY ((NDIS_STATUS)0x4003000CL)
|
||
|
#define NDIS_STATUS_DOT11_INCOMING_ASSOC_STARTED ((NDIS_STATUS)0x4003000DL)
|
||
|
#define NDIS_STATUS_DOT11_INCOMING_ASSOC_REQUEST_RECEIVED ((NDIS_STATUS)0x4003000EL)
|
||
|
#define NDIS_STATUS_DOT11_INCOMING_ASSOC_COMPLETION ((NDIS_STATUS)0x4003000FL)
|
||
|
#define NDIS_STATUS_DOT11_STOP_AP ((NDIS_STATUS)0x40030010L)
|
||
|
#define NDIS_STATUS_DOT11_PHY_FREQUENCY_ADOPTED ((NDIS_STATUS)0x40030011L)
|
||
|
#define NDIS_STATUS_DOT11_CAN_SUSTAIN_AP ((NDIS_STATUS)0x40030012L)
|
||
|
|
||
|
//
|
||
|
// Add WWAN specific status indication codes
|
||
|
//
|
||
|
#define NDIS_STATUS_WWAN_DEVICE_CAPS ((NDIS_STATUS)0x40041000)
|
||
|
#define NDIS_STATUS_WWAN_READY_INFO ((NDIS_STATUS)0x40041001)
|
||
|
#define NDIS_STATUS_WWAN_RADIO_STATE ((NDIS_STATUS)0x40041002)
|
||
|
#define NDIS_STATUS_WWAN_PIN_INFO ((NDIS_STATUS)0x40041003)
|
||
|
#define NDIS_STATUS_WWAN_PIN_LIST ((NDIS_STATUS)0x40041004)
|
||
|
#define NDIS_STATUS_WWAN_HOME_PROVIDER ((NDIS_STATUS)0x40041005)
|
||
|
#define NDIS_STATUS_WWAN_PREFERRED_PROVIDERS ((NDIS_STATUS)0x40041006)
|
||
|
#define NDIS_STATUS_WWAN_VISIBLE_PROVIDERS ((NDIS_STATUS)0x40041007)
|
||
|
#define NDIS_STATUS_WWAN_REGISTER_STATE ((NDIS_STATUS)0x40041008)
|
||
|
#define NDIS_STATUS_WWAN_PACKET_SERVICE ((NDIS_STATUS)0x40041009)
|
||
|
#define NDIS_STATUS_WWAN_SIGNAL_STATE ((NDIS_STATUS)0x4004100a)
|
||
|
#define NDIS_STATUS_WWAN_CONTEXT_STATE ((NDIS_STATUS)0x4004100b)
|
||
|
#define NDIS_STATUS_WWAN_PROVISIONED_CONTEXTS ((NDIS_STATUS)0x4004100c)
|
||
|
#define NDIS_STATUS_WWAN_SERVICE_ACTIVATION ((NDIS_STATUS)0x4004100d)
|
||
|
#define NDIS_STATUS_WWAN_SMS_CONFIGURATION ((NDIS_STATUS)0x4004100e)
|
||
|
#define NDIS_STATUS_WWAN_SMS_RECEIVE ((NDIS_STATUS)0x4004100f)
|
||
|
#define NDIS_STATUS_WWAN_SMS_SEND ((NDIS_STATUS)0x40041010)
|
||
|
#define NDIS_STATUS_WWAN_SMS_DELETE ((NDIS_STATUS)0x40041011)
|
||
|
#define NDIS_STATUS_WWAN_SMS_STATUS ((NDIS_STATUS)0x40041012)
|
||
|
#define NDIS_STATUS_WWAN_DNS_ADDRESS ((NDIS_STATUS)0x40041013)
|
||
|
|
||
|
#define NDIS_STATUS_WWAN_VENDOR_SPECIFIC ((NDIS_STATUS)0x40043000)
|
||
|
//
|
||
|
// End of WWAN specific status indication codes
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// Add WiMAX specific status indication codes
|
||
|
//
|
||
|
|
||
|
|
||
|
#endif NDIS_SUPPORT_NDIS6
|
||
|
|
||
|
//
|
||
|
// Status codes for NDIS 6.20 Power Management
|
||
|
//
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
#define NDIS_STATUS_PM_WOL_PATTERN_REJECTED ((NDIS_STATUS)0x40030051L)
|
||
|
#define NDIS_STATUS_PM_OFFLOAD_REJECTED ((NDIS_STATUS)0x40030052L)
|
||
|
#define NDIS_STATUS_PM_CAPABILITIES_CHANGE ((NDIS_STATUS)0x40030053L)
|
||
|
#endif
|
||
|
|
||
|
|
||
|
//
|
||
|
// status codes returned by drivers
|
||
|
//
|
||
|
#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_INDICATION_REQUIRED ((NDIS_STATUS)STATUS_NDIS_INDICATION_REQUIRED)
|
||
|
#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_DEVICE_REQUEST ((NDIS_STATUS)STATUS_INVALID_DEVICE_REQUEST)
|
||
|
#define NDIS_STATUS_NETWORK_UNREACHABLE ((NDIS_STATUS)STATUS_NETWORK_UNREACHABLE)
|
||
|
|
||
|
//
|
||
|
// CO-NDIS specific
|
||
|
//
|
||
|
#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) // cause 27
|
||
|
#define NDIS_STATUS_VC_NOT_AVAILABLE ((NDIS_STATUS)0xC0010025L) // cause 35,45
|
||
|
#define NDIS_STATUS_CELLRATE_NOT_AVAILABLE ((NDIS_STATUS)0xC0010026L) // cause 37
|
||
|
#define NDIS_STATUS_INCOMPATABLE_QOS ((NDIS_STATUS)0xC0010027L) // cause 49
|
||
|
#define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED ((NDIS_STATUS)0xC0010028L) // cause 93
|
||
|
#define NDIS_STATUS_NO_ROUTE_TO_DESTINATION ((NDIS_STATUS)0xC0010029L) // cause 3
|
||
|
|
||
|
//
|
||
|
// 802.5 specific
|
||
|
//
|
||
|
#define NDIS_STATUS_TOKEN_RING_OPEN_ERROR ((NDIS_STATUS)0xC0011000L)
|
||
|
|
||
|
|
||
|
//
|
||
|
// new status codes used in NDIS 6
|
||
|
//
|
||
|
#if NDIS_SUPPORT_NDIS6
|
||
|
#define NDIS_STATUS_SEND_ABORTED ((NDIS_STATUS)STATUS_NDIS_REQUEST_ABORTED)
|
||
|
#define NDIS_STATUS_PAUSED ((NDIS_STATUS)STATUS_NDIS_PAUSED)
|
||
|
#define NDIS_STATUS_INTERFACE_NOT_FOUND ((NDIS_STATUS)STATUS_NDIS_INTERFACE_NOT_FOUND)
|
||
|
#define NDIS_STATUS_INVALID_PARAMETER ((NDIS_STATUS)STATUS_INVALID_PARAMETER)
|
||
|
#define NDIS_STATUS_UNSUPPORTED_REVISION ((NDIS_STATUS)STATUS_NDIS_UNSUPPORTED_REVISION)
|
||
|
#define NDIS_STATUS_INVALID_PORT ((NDIS_STATUS)STATUS_NDIS_INVALID_PORT)
|
||
|
#define NDIS_STATUS_INVALID_PORT_STATE ((NDIS_STATUS)STATUS_NDIS_INVALID_PORT_STATE)
|
||
|
#define NDIS_STATUS_INVALID_STATE ((NDIS_STATUS)STATUS_INVALID_DEVICE_STATE)
|
||
|
#define NDIS_STATUS_MEDIA_DISCONNECTED ((NDIS_STATUS)STATUS_NDIS_MEDIA_DISCONNECTED)
|
||
|
#define NDIS_STATUS_LOW_POWER_STATE ((NDIS_STATUS)STATUS_NDIS_LOW_POWER_STATE)
|
||
|
|
||
|
#define NDIS_STATUS_DOT11_AUTO_CONFIG_ENABLED ((NDIS_STATUS)STATUS_NDIS_DOT11_AUTO_CONFIG_ENABLED)
|
||
|
#define NDIS_STATUS_DOT11_MEDIA_IN_USE ((NDIS_STATUS)STATUS_NDIS_DOT11_MEDIA_IN_USE)
|
||
|
#define NDIS_STATUS_DOT11_POWER_STATE_INVALID ((NDIS_STATUS)STATUS_NDIS_DOT11_POWER_STATE_INVALID)
|
||
|
|
||
|
//
|
||
|
// new status codes used in NDIS 6.20
|
||
|
//
|
||
|
#if NDIS_SUPPORT_NDIS620
|
||
|
#define NDIS_STATUS_PM_WOL_PATTERN_LIST_FULL ((NDIS_STATUS)STATUS_NDIS_PM_WOL_PATTERN_LIST_FULL)
|
||
|
#define NDIS_STATUS_PM_PROTOCOL_OFFLOAD_LIST_FULL ((NDIS_STATUS)STATUS_NDIS_PM_PROTOCOL_OFFLOAD_LIST_FULL)
|
||
|
#endif
|
||
|
|
||
|
//
|
||
|
// status codes for offload operations
|
||
|
//
|
||
|
#define NDIS_STATUS_UPLOAD_IN_PROGRESS ((NDIS_STATUS)0xC0231001L)
|
||
|
#define NDIS_STATUS_REQUEST_UPLOAD ((NDIS_STATUS)0xC0231002L)
|
||
|
#define NDIS_STATUS_UPLOAD_REQUESTED ((NDIS_STATUS)0xC0231003L)
|
||
|
#define NDIS_STATUS_OFFLOAD_TCP_ENTRIES ((NDIS_STATUS)0xC0231004L)
|
||
|
#define NDIS_STATUS_OFFLOAD_PATH_ENTRIES ((NDIS_STATUS)0xC0231005L)
|
||
|
#define NDIS_STATUS_OFFLOAD_NEIGHBOR_ENTRIES ((NDIS_STATUS)0xC0231006L)
|
||
|
#define NDIS_STATUS_OFFLOAD_IP_ADDRESS_ENTRIES ((NDIS_STATUS)0xC0231007L)
|
||
|
#define NDIS_STATUS_OFFLOAD_HW_ADDRESS_ENTRIES ((NDIS_STATUS)0xC0231008L)
|
||
|
#define NDIS_STATUS_OFFLOAD_VLAN_ENTRIES ((NDIS_STATUS)0xC0231009L)
|
||
|
#define NDIS_STATUS_OFFLOAD_TCP_XMIT_BUFFER ((NDIS_STATUS)0xC023100AL)
|
||
|
#define NDIS_STATUS_OFFLOAD_TCP_RCV_BUFFER ((NDIS_STATUS)0xC023100BL)
|
||
|
#define NDIS_STATUS_OFFLOAD_TCP_RCV_WINDOW ((NDIS_STATUS)0xC023100CL)
|
||
|
#define NDIS_STATUS_OFFLOAD_VLAN_MISMATCH ((NDIS_STATUS)0xC023100DL)
|
||
|
#define NDIS_STATUS_OFFLOAD_DATA_NOT_ACCEPTED ((NDIS_STATUS)0xC023100EL)
|
||
|
#define NDIS_STATUS_OFFLOAD_POLICY ((NDIS_STATUS)0xC023100FL)
|
||
|
#define NDIS_STATUS_OFFLOAD_DATA_PARTIALLY_ACCEPTED ((NDIS_STATUS)0xC0231010L)
|
||
|
#define NDIS_STATUS_OFFLOAD_REQUEST_RESET ((NDIS_STATUS)0xC0231011L)
|
||
|
#endif // NDIS_SUPPORT_NDIS6
|
||
|
|
||
|
//
|
||
|
// Status codes for NDIS 6.20 capable Chimney offload miniports.
|
||
|
//
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
#define NDIS_STATUS_OFFLOAD_CONNECTION_REJECTED ((NDIS_STATUS)STATUS_NDIS_OFFLOAD_CONNECTION_REJECTED)
|
||
|
#endif
|
||
|
|
||
|
//
|
||
|
// used in error logging
|
||
|
//
|
||
|
|
||
|
#define NDIS_ERROR_CODE ULONG
|
||
|
|
||
|
#define NDIS_ERROR_CODE_RESOURCE_CONFLICT EVENT_NDIS_RESOURCE_CONFLICT
|
||
|
#define NDIS_ERROR_CODE_OUT_OF_RESOURCES EVENT_NDIS_OUT_OF_RESOURCE
|
||
|
#define NDIS_ERROR_CODE_HARDWARE_FAILURE EVENT_NDIS_HARDWARE_FAILURE
|
||
|
#define NDIS_ERROR_CODE_ADAPTER_NOT_FOUND EVENT_NDIS_ADAPTER_NOT_FOUND
|
||
|
#define NDIS_ERROR_CODE_INTERRUPT_CONNECT EVENT_NDIS_INTERRUPT_CONNECT
|
||
|
#define NDIS_ERROR_CODE_DRIVER_FAILURE EVENT_NDIS_DRIVER_FAILURE
|
||
|
#define NDIS_ERROR_CODE_BAD_VERSION EVENT_NDIS_BAD_VERSION
|
||
|
#define NDIS_ERROR_CODE_TIMEOUT EVENT_NDIS_TIMEOUT
|
||
|
#define NDIS_ERROR_CODE_NETWORK_ADDRESS EVENT_NDIS_NETWORK_ADDRESS
|
||
|
#define NDIS_ERROR_CODE_UNSUPPORTED_CONFIGURATION EVENT_NDIS_UNSUPPORTED_CONFIGURATION
|
||
|
#define NDIS_ERROR_CODE_INVALID_VALUE_FROM_ADAPTER EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER
|
||
|
#define NDIS_ERROR_CODE_MISSING_CONFIGURATION_PARAMETER EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER
|
||
|
#define NDIS_ERROR_CODE_BAD_IO_BASE_ADDRESS EVENT_NDIS_BAD_IO_BASE_ADDRESS
|
||
|
#define NDIS_ERROR_CODE_RECEIVE_SPACE_SMALL EVENT_NDIS_RECEIVE_SPACE_SMALL
|
||
|
#define NDIS_ERROR_CODE_ADAPTER_DISABLED EVENT_NDIS_ADAPTER_DISABLED
|
||
|
|
||
|
|
||
|
#define NdisAllocateSpinLock(_SpinLock) KeInitializeSpinLock(&(_SpinLock)->SpinLock)
|
||
|
|
||
|
#define NdisFreeSpinLock(_SpinLock)
|
||
|
|
||
|
#define NdisAcquireSpinLock(_SpinLock) KeAcquireSpinLock(&(_SpinLock)->SpinLock, &(_SpinLock)->OldIrql)
|
||
|
|
||
|
#define NdisReleaseSpinLock(_SpinLock) KeReleaseSpinLock(&(_SpinLock)->SpinLock,(_SpinLock)->OldIrql)
|
||
|
|
||
|
#define NdisDprAcquireSpinLock(_SpinLock) \
|
||
|
{ \
|
||
|
KeAcquireSpinLockAtDpcLevel(&(_SpinLock)->SpinLock); \
|
||
|
}
|
||
|
|
||
|
#define NdisDprReleaseSpinLock(_SpinLock) KeReleaseSpinLockFromDpcLevel(&(_SpinLock)->SpinLock)
|
||
|
|
||
|
#define NdisGetCurrentSystemTime(_pSystemTime) \
|
||
|
{ \
|
||
|
KeQuerySystemTime(_pSystemTime); \
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Interlocked support functions
|
||
|
//
|
||
|
|
||
|
#define NdisInterlockedIncrement(Addend) InterlockedIncrement(Addend)
|
||
|
|
||
|
#define NdisInterlockedDecrement(Addend) InterlockedDecrement(Addend)
|
||
|
|
||
|
#define NdisInterlockedAddUlong(_Addend, _Increment, _SpinLock) \
|
||
|
ExInterlockedAddUlong(_Addend, _Increment, &(_SpinLock)->SpinLock)
|
||
|
|
||
|
#define NdisInterlockedInsertHeadList(_ListHead, _ListEntry, _SpinLock) \
|
||
|
ExInterlockedInsertHeadList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
|
||
|
|
||
|
#define NdisInterlockedInsertTailList(_ListHead, _ListEntry, _SpinLock) \
|
||
|
ExInterlockedInsertTailList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
|
||
|
|
||
|
#define NdisInterlockedRemoveHeadList(_ListHead, _SpinLock) \
|
||
|
ExInterlockedRemoveHeadList(_ListHead, &(_SpinLock)->SpinLock)
|
||
|
|
||
|
#define NdisInterlockedPushEntryList(ListHead, ListEntry, Lock) \
|
||
|
ExInterlockedPushEntryList(ListHead, ListEntry, &(Lock)->SpinLock)
|
||
|
|
||
|
#define NdisInterlockedPopEntryList(ListHead, Lock) \
|
||
|
ExInterlockedPopEntryList(ListHead, &(Lock)->SpinLock)
|
||
|
|
||
|
|
||
|
|
||
|
#if NDIS_SUPPORT_60_COMPATIBLE_API
|
||
|
|
||
|
typedef union _NDIS_RW_LOCK_REFCOUNT
|
||
|
{
|
||
|
ULONG RefCount;
|
||
|
UCHAR cacheLine[16]; // This is smaller than a cacheline on most CPUs now
|
||
|
} NDIS_RW_LOCK_REFCOUNT;
|
||
|
|
||
|
typedef struct _NDIS_RW_LOCK
|
||
|
{
|
||
|
union
|
||
|
{
|
||
|
struct
|
||
|
{
|
||
|
KSPIN_LOCK SpinLock;
|
||
|
PVOID Context;
|
||
|
};
|
||
|
UCHAR Reserved[16];
|
||
|
};
|
||
|
|
||
|
union
|
||
|
{
|
||
|
NDIS_RW_LOCK_REFCOUNT RefCount[MAXIMUM_PROCESSORS];
|
||
|
ULONG RefCountEx[sizeof(NDIS_RW_LOCK_REFCOUNT)/sizeof(ULONG)
|
||
|
* MAXIMUM_PROCESSORS];
|
||
|
struct
|
||
|
{
|
||
|
KSPIN_LOCK RefCountLock;
|
||
|
volatile ULONG SharedRefCount;
|
||
|
volatile BOOLEAN WriterWaiting;
|
||
|
};
|
||
|
};
|
||
|
} NDIS_RW_LOCK, *PNDIS_RW_LOCK;
|
||
|
|
||
|
typedef struct _LOCK_STATE
|
||
|
{
|
||
|
USHORT LockState;
|
||
|
KIRQL OldIrql;
|
||
|
} LOCK_STATE, *PLOCK_STATE;
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisInitializeReadWriteLock(
|
||
|
__out PNDIS_RW_LOCK Lock
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
__drv_setsIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisAcquireReadWriteLock(
|
||
|
__inout __drv_acquiresResource(NdisReadWriteLock) PNDIS_RW_LOCK Lock,
|
||
|
__in BOOLEAN fWrite,// TRUE -> Write, FALSE -> Read
|
||
|
__out __drv_savesIRQL
|
||
|
__drv_deref(__drv_acquiresExclusiveResource(NdisReadWriteLockState))
|
||
|
PLOCK_STATE LockState
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
__drv_minIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisReleaseReadWriteLock(
|
||
|
__inout __drv_releasesResource(NdisReadWriteLock) PNDIS_RW_LOCK Lock,
|
||
|
__in __drv_restoresIRQL __drv_deref(
|
||
|
__drv_releasesExclusiveResource(NdisReadWriteLockState))
|
||
|
PLOCK_STATE LockState
|
||
|
);
|
||
|
|
||
|
#if NDIS_SUPPORT_NDIS6
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisDprAcquireReadWriteLock(
|
||
|
IN PNDIS_RW_LOCK Lock,
|
||
|
IN BOOLEAN fWrite, // TRUE -> Write, FALSE -> Read
|
||
|
IN PLOCK_STATE LockState
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisDprReleaseReadWriteLock(
|
||
|
IN PNDIS_RW_LOCK Lock,
|
||
|
IN PLOCK_STATE LockState
|
||
|
);
|
||
|
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#if NDIS_SUPPORT_NDIS620
|
||
|
|
||
|
struct _NDIS_RW_LOCK_EX;
|
||
|
typedef struct _NDIS_RW_LOCK_EX NDIS_RW_LOCK_EX;
|
||
|
typedef struct _NDIS_RW_LOCK_EX* PNDIS_RW_LOCK_EX;
|
||
|
|
||
|
typedef struct _LOCK_STATE_EX
|
||
|
{
|
||
|
KIRQL OldIrql;
|
||
|
UCHAR LockState;
|
||
|
UCHAR Flags;
|
||
|
} LOCK_STATE_EX, *PLOCK_STATE_EX;
|
||
|
|
||
|
#define NDIS_RWL_AT_DISPATCH_LEVEL 1
|
||
|
|
||
|
EXPORT
|
||
|
PNDIS_RW_LOCK_EX
|
||
|
NdisAllocateRWLock(
|
||
|
NDIS_HANDLE NdisHandle
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFreeRWLock(
|
||
|
__in PNDIS_RW_LOCK_EX Lock
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisAcquireRWLockRead(
|
||
|
__in PNDIS_RW_LOCK_EX Lock,
|
||
|
__out PLOCK_STATE_EX LockState,
|
||
|
__in UCHAR Flags
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisAcquireRWLockWrite(
|
||
|
__in PNDIS_RW_LOCK_EX Lock,
|
||
|
__out PLOCK_STATE_EX LockState,
|
||
|
__in UCHAR Flags
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisReleaseRWLock(
|
||
|
__in PNDIS_RW_LOCK_EX Lock,
|
||
|
__in PLOCK_STATE_EX LockState
|
||
|
);
|
||
|
|
||
|
#endif
|
||
|
|
||
|
#define NdisInterlockedAddLargeStatistic(_Addend, _Increment) \
|
||
|
ExInterlockedAddLargeStatistic((PLARGE_INTEGER)_Addend, _Increment)
|
||
|
|
||
|
//
|
||
|
// S-List support
|
||
|
//
|
||
|
|
||
|
#define NdisInterlockedPushEntrySList(SListHead, SListEntry, Lock) \
|
||
|
ExInterlockedPushEntrySList(SListHead, SListEntry, &(Lock)->SpinLock)
|
||
|
|
||
|
#define NdisInterlockedPopEntrySList(SListHead, Lock) \
|
||
|
ExInterlockedPopEntrySList(SListHead, &(Lock)->SpinLock)
|
||
|
|
||
|
#define NdisInterlockedFlushSList(SListHead) ExInterlockedFlushSList(SListHead)
|
||
|
|
||
|
#define NdisInitializeSListHead(SListHead) ExInitializeSListHead(SListHead)
|
||
|
|
||
|
#define NdisQueryDepthSList(SListHead) ExQueryDepthSList(SListHead)
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisGetCurrentProcessorCpuUsage(
|
||
|
OUT PULONG pCpuUsage
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisGetCurrentProcessorCounts(
|
||
|
__out PULONG pIdleCount,
|
||
|
__out PULONG pKernelAndUser,
|
||
|
__out PULONG pIndex
|
||
|
);
|
||
|
|
||
|
|
||
|
#if NDIS_LEGACY_DRIVER
|
||
|
|
||
|
/*
|
||
|
NdisGetSystemUpTime is deprecated, use NdisGetSystemUpTimeEx instead.
|
||
|
*/
|
||
|
DECLSPEC_DEPRECATED_DDK
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisGetSystemUpTime(
|
||
|
OUT PULONG pSystemUpTime
|
||
|
);
|
||
|
|
||
|
#endif // NDIS_LEGACY_DRIVER
|
||
|
|
||
|
//
|
||
|
// List manipulation
|
||
|
//
|
||
|
|
||
|
/*++
|
||
|
|
||
|
VOID
|
||
|
NdisInitializeListHead(
|
||
|
IN PLIST_ENTRY ListHead
|
||
|
);
|
||
|
|
||
|
--*/
|
||
|
#define NdisInitializeListHead(_ListHead) InitializeListHead(_ListHead)
|
||
|
|
||
|
//
|
||
|
// Configuration Requests
|
||
|
//
|
||
|
|
||
|
#if NDIS_LEGACY_DRIVER
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisOpenConfiguration(
|
||
|
OUT __checkReturn PNDIS_STATUS Status,
|
||
|
OUT PNDIS_HANDLE ConfigurationHandle,
|
||
|
IN NDIS_HANDLE WrapperConfigurationContext
|
||
|
);
|
||
|
|
||
|
#endif // NDIS_LEGACY_DRIVER
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(APC_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisOpenConfigurationKeyByName(
|
||
|
__out __checkReturn PNDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE ConfigurationHandle,
|
||
|
__in PNDIS_STRING SubKeyName,
|
||
|
__out PNDIS_HANDLE SubKeyHandle
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(APC_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisOpenConfigurationKeyByIndex(
|
||
|
__out __checkReturn PNDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE ConfigurationHandle,
|
||
|
__in ULONG Index,
|
||
|
__out PNDIS_STRING KeyName,
|
||
|
__out PNDIS_HANDLE KeyHandle
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisReadConfiguration(
|
||
|
__out __checkReturn PNDIS_STATUS Status,
|
||
|
__deref_out PNDIS_CONFIGURATION_PARAMETER *ParameterValue,
|
||
|
__in NDIS_HANDLE ConfigurationHandle,
|
||
|
__in PNDIS_STRING Keyword,
|
||
|
__in NDIS_PARAMETER_TYPE ParameterType
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisWriteConfiguration(
|
||
|
__out __checkReturn PNDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE ConfigurationHandle,
|
||
|
__in PNDIS_STRING Keyword,
|
||
|
__in PNDIS_CONFIGURATION_PARAMETER ParameterValue
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCloseConfiguration(
|
||
|
__in __drv_freesMem(mem) NDIS_HANDLE ConfigurationHandle
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisReadNetworkAddress(
|
||
|
__out __checkReturn PNDIS_STATUS Status,
|
||
|
__deref_out_bcount(*NetworkAddressLength) PVOID * NetworkAddress,
|
||
|
__out PUINT NetworkAddressLength,
|
||
|
__in NDIS_HANDLE ConfigurationHandle
|
||
|
);
|
||
|
|
||
|
|
||
|
#if NDIS_LEGACY_MINIPORT
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
ULONG
|
||
|
NdisReadPciSlotInformation(
|
||
|
__in NDIS_HANDLE NdisAdapterHandle,
|
||
|
__in ULONG SlotNumber,
|
||
|
__in ULONG Offset,
|
||
|
__out_bcount(Length)
|
||
|
PVOID Buffer,
|
||
|
__in ULONG Length
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
ULONG
|
||
|
NdisWritePciSlotInformation(
|
||
|
__in NDIS_HANDLE NdisAdapterHandle,
|
||
|
__in ULONG SlotNumber,
|
||
|
__in ULONG Offset,
|
||
|
__in_bcount(Length)
|
||
|
PVOID Buffer,
|
||
|
__in ULONG Length
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
ULONG
|
||
|
NdisReadPcmciaAttributeMemory(
|
||
|
__in NDIS_HANDLE NdisAdapterHandle,
|
||
|
__in ULONG Offset,
|
||
|
__out_bcount(Length)
|
||
|
PVOID Buffer,
|
||
|
__in ULONG Length
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
ULONG
|
||
|
NdisWritePcmciaAttributeMemory(
|
||
|
__in NDIS_HANDLE NdisAdapterHandle,
|
||
|
__in ULONG Offset,
|
||
|
__in_bcount(Length)
|
||
|
PVOID Buffer,
|
||
|
__in ULONG Length
|
||
|
);
|
||
|
|
||
|
#endif // NDIS_LEGACY_MINIPORT
|
||
|
|
||
|
|
||
|
#if NDIS_LEGACY_DRIVER
|
||
|
//
|
||
|
// Buffer Pool
|
||
|
//
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisAllocateBufferPool(
|
||
|
__out PNDIS_STATUS Status,
|
||
|
__out PNDIS_HANDLE PoolHandle,
|
||
|
__in UINT NumberOfDescriptors
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFreeBufferPool(
|
||
|
__in NDIS_HANDLE PoolHandle
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisAllocateBuffer(
|
||
|
__out PNDIS_STATUS Status,
|
||
|
__out PNDIS_BUFFER * Buffer,
|
||
|
__in_opt NDIS_HANDLE PoolHandle,
|
||
|
__in_bcount(Length)
|
||
|
PVOID VirtualAddress,
|
||
|
__in UINT Length
|
||
|
);
|
||
|
|
||
|
#define NdisFreeBuffer(Buffer) IoFreeMdl(Buffer)
|
||
|
#endif
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCopyBuffer(
|
||
|
__out PNDIS_STATUS Status,
|
||
|
__out PNDIS_BUFFER * Buffer,
|
||
|
__in NDIS_HANDLE PoolHandle,
|
||
|
__in PVOID MemoryDescriptor,
|
||
|
__in UINT Offset,
|
||
|
__in UINT Length
|
||
|
);
|
||
|
|
||
|
|
||
|
//
|
||
|
// VOID
|
||
|
// NdisCopyLookaheadData(
|
||
|
// IN PVOID Destination,
|
||
|
// IN PVOID Source,
|
||
|
// IN ULONG Length,
|
||
|
// IN ULONG ReceiveFlags
|
||
|
// );
|
||
|
//
|
||
|
|
||
|
#if defined(_M_IX86) || defined(_M_AMD64)
|
||
|
#define NdisCopyLookaheadData(_Destination, _Source, _Length, _MacOptions) \
|
||
|
RtlCopyMemory(_Destination, _Source, _Length)
|
||
|
#else
|
||
|
#define NdisCopyLookaheadData(_Destination, _Source, _Length, _MacOptions) \
|
||
|
{ \
|
||
|
if ((_MacOptions) & NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA) \
|
||
|
{ \
|
||
|
RtlCopyMemory(_Destination, _Source, _Length); \
|
||
|
} \
|
||
|
else \
|
||
|
{ \
|
||
|
PUCHAR _Src = (PUCHAR)(_Source); \
|
||
|
PUCHAR _Dest = (PUCHAR)(_Destination); \
|
||
|
PUCHAR _End = _Dest + (_Length); \
|
||
|
while (_Dest < _End) \
|
||
|
{ \
|
||
|
*_Dest++ = *_Src++; \
|
||
|
} \
|
||
|
} \
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#if NDIS_LEGACY_DRIVER
|
||
|
//
|
||
|
// Packet Pool
|
||
|
//
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisAllocatePacketPool(
|
||
|
__out PNDIS_STATUS Status,
|
||
|
__out PNDIS_HANDLE PoolHandle,
|
||
|
__in UINT NumberOfDescriptors,
|
||
|
__in UINT ProtocolReservedLength
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisAllocatePacketPoolEx(
|
||
|
__out PNDIS_STATUS Status,
|
||
|
__out PNDIS_HANDLE PoolHandle,
|
||
|
__in UINT NumberOfDescriptors,
|
||
|
__in UINT NumberOfOverflowDescriptors,
|
||
|
__in UINT ProtocolReservedLength
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisSetPacketPoolProtocolId(
|
||
|
__in NDIS_HANDLE PacketPoolHandle,
|
||
|
__in UINT ProtocolId
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
UINT
|
||
|
NdisPacketPoolUsage(
|
||
|
__in NDIS_HANDLE PoolHandle
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
UINT
|
||
|
NdisPacketSize(
|
||
|
__in UINT ProtocolReservedSize
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_HANDLE
|
||
|
NdisGetPoolFromPacket(
|
||
|
__in PNDIS_PACKET Packet
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
PNDIS_PACKET_STACK
|
||
|
NdisIMGetCurrentPacketStack(
|
||
|
__in PNDIS_PACKET Packet,
|
||
|
__out BOOLEAN * StacksRemaining
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFreePacketPool(
|
||
|
__in NDIS_HANDLE PoolHandle
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFreePacket(
|
||
|
__in PNDIS_PACKET Packet
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
__drv_minIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisDprFreePacket(
|
||
|
__in PNDIS_PACKET Packet
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
__drv_minIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisDprFreePacketNonInterlocked(
|
||
|
__in PNDIS_PACKET Packet
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisAllocatePacket(
|
||
|
__out PNDIS_STATUS Status,
|
||
|
__out PNDIS_PACKET * Packet,
|
||
|
__in NDIS_HANDLE PoolHandle
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
__drv_minIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisDprAllocatePacket(
|
||
|
__out PNDIS_STATUS Status,
|
||
|
__out PNDIS_PACKET* Packet,
|
||
|
__in NDIS_HANDLE PoolHandle
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
__drv_minIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisDprAllocatePacketNonInterlocked(
|
||
|
__out PNDIS_STATUS Status,
|
||
|
__out PNDIS_PACKET * Packet,
|
||
|
__in NDIS_HANDLE PoolHandle
|
||
|
);
|
||
|
|
||
|
// VOID
|
||
|
// NdisReinitializePacket(
|
||
|
// IN OUT PNDIS_PACKET Packet
|
||
|
// );
|
||
|
#define NdisReinitializePacket(Packet) \
|
||
|
{ \
|
||
|
(Packet)->Private.Head = (PNDIS_BUFFER)NULL; \
|
||
|
(Packet)->Private.ValidCounts = FALSE; \
|
||
|
}
|
||
|
|
||
|
#endif // NDIS_LEGACY_DRIVER
|
||
|
|
||
|
#define NdisFreeBuffer(Buffer) IoFreeMdl(Buffer)
|
||
|
|
||
|
#if NDIS_LEGACY_DRIVER
|
||
|
#define NdisQueryBuffer(_Buffer, _VirtualAddress, _Length) \
|
||
|
{ \
|
||
|
if (ARGUMENT_PRESENT(_VirtualAddress)) \
|
||
|
{ \
|
||
|
*(PVOID *)(_VirtualAddress) = MmGetSystemAddressForMdl(_Buffer); \
|
||
|
} \
|
||
|
*(_Length) = MmGetMdlByteCount(_Buffer); \
|
||
|
}
|
||
|
#endif // NDIS_LEGACY_DRIVER
|
||
|
|
||
|
#define NdisQueryBufferSafe(_Buffer, _VirtualAddress, _Length, _Priority) \
|
||
|
{ \
|
||
|
if (ARGUMENT_PRESENT(_VirtualAddress)) \
|
||
|
{ \
|
||
|
*(PVOID *)(_VirtualAddress) = MmGetSystemAddressForMdlSafe(_Buffer, _Priority); \
|
||
|
} \
|
||
|
*(_Length) = MmGetMdlByteCount(_Buffer); \
|
||
|
}
|
||
|
|
||
|
#define NdisQueryBufferOffset(_Buffer, _Offset, _Length) \
|
||
|
{ \
|
||
|
*(_Offset) = MmGetMdlByteOffset(_Buffer); \
|
||
|
*(_Length) = MmGetMdlByteCount(_Buffer); \
|
||
|
}
|
||
|
|
||
|
|
||
|
#if NDIS_LEGACY_DRIVER
|
||
|
|
||
|
#define NdisGetFirstBufferFromPacket(_Packet, \
|
||
|
_FirstBuffer, \
|
||
|
_FirstBufferVA, \
|
||
|
_FirstBufferLength, \
|
||
|
_TotalBufferLength) \
|
||
|
{ \
|
||
|
PNDIS_BUFFER _pBuf; \
|
||
|
\
|
||
|
_pBuf = (_Packet)->Private.Head; \
|
||
|
*(_FirstBuffer) = _pBuf; \
|
||
|
if (_pBuf) \
|
||
|
{ \
|
||
|
*(_FirstBufferVA) = MmGetSystemAddressForMdl(_pBuf); \
|
||
|
*(_FirstBufferLength) = \
|
||
|
*(_TotalBufferLength) = MmGetMdlByteCount(_pBuf); \
|
||
|
for (_pBuf = _pBuf->Next; \
|
||
|
_pBuf != NULL; \
|
||
|
_pBuf = _pBuf->Next) \
|
||
|
{ \
|
||
|
*(_TotalBufferLength) += MmGetMdlByteCount(_pBuf); \
|
||
|
} \
|
||
|
} \
|
||
|
else \
|
||
|
{ \
|
||
|
*(_FirstBufferVA) = 0; \
|
||
|
*(_FirstBufferLength) = 0; \
|
||
|
*(_TotalBufferLength) = 0; \
|
||
|
} \
|
||
|
}
|
||
|
|
||
|
#define NdisGetFirstBufferFromPacketSafe(_Packet, \
|
||
|
_FirstBuffer, \
|
||
|
_FirstBufferVA, \
|
||
|
_FirstBufferLength, \
|
||
|
_TotalBufferLength, \
|
||
|
_Priority) \
|
||
|
{ \
|
||
|
PNDIS_BUFFER _pBuf; \
|
||
|
\
|
||
|
_pBuf = (_Packet)->Private.Head; \
|
||
|
*(_FirstBuffer) = _pBuf; \
|
||
|
if (_pBuf) \
|
||
|
{ \
|
||
|
*(_FirstBufferVA) = MmGetSystemAddressForMdlSafe(_pBuf, _Priority); \
|
||
|
*(_FirstBufferLength) = *(_TotalBufferLength) = MmGetMdlByteCount(_pBuf); \
|
||
|
for (_pBuf = _pBuf->Next; \
|
||
|
_pBuf != NULL; \
|
||
|
_pBuf = _pBuf->Next) \
|
||
|
{ \
|
||
|
*(_TotalBufferLength) += MmGetMdlByteCount(_pBuf); \
|
||
|
} \
|
||
|
} \
|
||
|
else \
|
||
|
{ \
|
||
|
*(_FirstBufferVA) = 0; \
|
||
|
*(_FirstBufferLength) = 0; \
|
||
|
*(_TotalBufferLength) = 0; \
|
||
|
} \
|
||
|
}
|
||
|
|
||
|
#endif // NDIS_LEGACY_DRIVER
|
||
|
|
||
|
#define NDIS_BUFFER_TO_SPAN_PAGES(_Buffer) \
|
||
|
(MmGetMdlByteCount(_Buffer)==0 ? \
|
||
|
1 : \
|
||
|
(ADDRESS_AND_SIZE_TO_SPAN_PAGES( \
|
||
|
MmGetMdlVirtualAddress(_Buffer), \
|
||
|
MmGetMdlByteCount(_Buffer))))
|
||
|
|
||
|
#define NdisGetBufferPhysicalArraySize(Buffer, ArraySize) \
|
||
|
(*(ArraySize) = NDIS_BUFFER_TO_SPAN_PAGES(Buffer))
|
||
|
|
||
|
|
||
|
/*++
|
||
|
|
||
|
NDIS_BUFFER_LINKAGE(
|
||
|
IN PNDIS_BUFFER Buffer
|
||
|
);
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#define NDIS_BUFFER_LINKAGE(Buffer) ((Buffer)->Next)
|
||
|
|
||
|
|
||
|
#if NDIS_LEGACY_DRIVER
|
||
|
|
||
|
/*++
|
||
|
|
||
|
VOID
|
||
|
NdisRecalculatePacketCounts(
|
||
|
IN OUT PNDIS_PACKET Packet
|
||
|
);
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#define NdisRecalculatePacketCounts(Packet) \
|
||
|
{ \
|
||
|
{ \
|
||
|
PNDIS_BUFFER TmpBuffer = (Packet)->Private.Head; \
|
||
|
if (TmpBuffer) \
|
||
|
{ \
|
||
|
while (TmpBuffer->Next) \
|
||
|
{ \
|
||
|
TmpBuffer = TmpBuffer->Next; \
|
||
|
} \
|
||
|
(Packet)->Private.Tail = TmpBuffer; \
|
||
|
} \
|
||
|
(Packet)->Private.ValidCounts = FALSE; \
|
||
|
} \
|
||
|
}
|
||
|
|
||
|
|
||
|
/*++
|
||
|
|
||
|
VOID
|
||
|
NdisChainBufferAtFront(
|
||
|
IN OUT PNDIS_PACKET Packet,
|
||
|
IN OUT PNDIS_BUFFER Buffer
|
||
|
);
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#define NdisChainBufferAtFront(Packet, Buffer) \
|
||
|
{ \
|
||
|
PNDIS_BUFFER TmpBuffer = (Buffer); \
|
||
|
\
|
||
|
for (;;) \
|
||
|
{ \
|
||
|
if (TmpBuffer->Next == (PNDIS_BUFFER)NULL) \
|
||
|
break; \
|
||
|
TmpBuffer = TmpBuffer->Next; \
|
||
|
} \
|
||
|
if ((Packet)->Private.Head == NULL) \
|
||
|
{ \
|
||
|
(Packet)->Private.Tail = TmpBuffer; \
|
||
|
} \
|
||
|
TmpBuffer->Next = (Packet)->Private.Head; \
|
||
|
(Packet)->Private.Head = (Buffer); \
|
||
|
(Packet)->Private.ValidCounts = FALSE; \
|
||
|
}
|
||
|
|
||
|
/*++
|
||
|
|
||
|
VOID
|
||
|
NdisChainBufferAtBack(
|
||
|
IN OUT PNDIS_PACKET Packet,
|
||
|
IN OUT PNDIS_BUFFER Buffer
|
||
|
);
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#define NdisChainBufferAtBack(Packet, Buffer) \
|
||
|
{ \
|
||
|
PNDIS_BUFFER TmpBuffer = (Buffer); \
|
||
|
\
|
||
|
for (;;) \
|
||
|
{ \
|
||
|
if (TmpBuffer->Next == NULL) \
|
||
|
break; \
|
||
|
TmpBuffer = TmpBuffer->Next; \
|
||
|
} \
|
||
|
if ((Packet)->Private.Head != NULL) \
|
||
|
{ \
|
||
|
(Packet)->Private.Tail->Next = (Buffer); \
|
||
|
} \
|
||
|
else \
|
||
|
{ \
|
||
|
(Packet)->Private.Head = (Buffer); \
|
||
|
} \
|
||
|
(Packet)->Private.Tail = TmpBuffer; \
|
||
|
(Packet)->Private.ValidCounts = FALSE; \
|
||
|
}
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisUnchainBufferAtFront(
|
||
|
IN OUT PNDIS_PACKET Packet,
|
||
|
OUT PNDIS_BUFFER * Buffer
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisUnchainBufferAtBack(
|
||
|
IN OUT PNDIS_PACKET Packet,
|
||
|
OUT PNDIS_BUFFER * Buffer
|
||
|
);
|
||
|
|
||
|
|
||
|
/*++
|
||
|
|
||
|
VOID
|
||
|
NdisQueryPacket(
|
||
|
IN PNDIS_PACKET _Packet,
|
||
|
OUT PUINT _PhysicalBufferCount OPTIONAL,
|
||
|
OUT PUINT _BufferCount OPTIONAL,
|
||
|
OUT PNDIS_BUFFER * _FirstBuffer OPTIONAL,
|
||
|
OUT PUINT _TotalPacketLength OPTIONAL
|
||
|
);
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#pragma warning(push)
|
||
|
#pragma warning(disable:4127)
|
||
|
__inline
|
||
|
VOID
|
||
|
NdisQueryPacket(
|
||
|
IN PNDIS_PACKET _Packet,
|
||
|
OUT PUINT _PhysicalBufferCount OPTIONAL,
|
||
|
OUT PUINT _BufferCount OPTIONAL,
|
||
|
OUT PNDIS_BUFFER * _FirstBuffer OPTIONAL,
|
||
|
OUT PUINT _TotalPacketLength OPTIONAL
|
||
|
)
|
||
|
{
|
||
|
if ((_FirstBuffer) != NULL)
|
||
|
{
|
||
|
PNDIS_BUFFER * __FirstBuffer = (_FirstBuffer);
|
||
|
*(__FirstBuffer) = (_Packet)->Private.Head;
|
||
|
}
|
||
|
if ((_TotalPacketLength) || (_BufferCount) || (_PhysicalBufferCount))
|
||
|
{
|
||
|
if (!(_Packet)->Private.ValidCounts)
|
||
|
{
|
||
|
PNDIS_BUFFER TmpBuffer = (_Packet)->Private.Head;
|
||
|
UINT PTotalLength = 0, PPhysicalCount = 0, PAddedCount = 0;
|
||
|
UINT PacketLength, Offset;
|
||
|
|
||
|
while (TmpBuffer != (PNDIS_BUFFER)NULL)
|
||
|
{
|
||
|
NdisQueryBufferOffset(TmpBuffer, &Offset, &PacketLength);
|
||
|
PTotalLength += PacketLength;
|
||
|
PPhysicalCount += (UINT)NDIS_BUFFER_TO_SPAN_PAGES(TmpBuffer);
|
||
|
++PAddedCount;
|
||
|
TmpBuffer = TmpBuffer->Next;
|
||
|
}
|
||
|
(_Packet)->Private.Count = PAddedCount;
|
||
|
(_Packet)->Private.TotalLength = PTotalLength;
|
||
|
(_Packet)->Private.PhysicalCount = PPhysicalCount;
|
||
|
(_Packet)->Private.ValidCounts = TRUE;
|
||
|
}
|
||
|
|
||
|
if (_PhysicalBufferCount)
|
||
|
{
|
||
|
PUINT __PhysicalBufferCount = (_PhysicalBufferCount);
|
||
|
*(__PhysicalBufferCount) = (_Packet)->Private.PhysicalCount;
|
||
|
}
|
||
|
if (_BufferCount)
|
||
|
{
|
||
|
PUINT __BufferCount = (_BufferCount);
|
||
|
*(__BufferCount) = (_Packet)->Private.Count;
|
||
|
}
|
||
|
if (_TotalPacketLength)
|
||
|
{
|
||
|
PUINT __TotalPacketLength = (_TotalPacketLength);
|
||
|
*(__TotalPacketLength) = (_Packet)->Private.TotalLength;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
#pragma warning(pop)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
VOID
|
||
|
NdisQueryPacketLength(
|
||
|
IN PNDIS_PACKET _Packet,
|
||
|
OUT PUINT _TotalPacketLength OPTIONAL
|
||
|
);
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#define NdisQueryPacketLength(_Packet, \
|
||
|
_TotalPacketLength) \
|
||
|
{ \
|
||
|
if (!(_Packet)->Private.ValidCounts) \
|
||
|
{ \
|
||
|
NdisQueryPacket(_Packet, NULL, NULL, NULL, _TotalPacketLength); \
|
||
|
} \
|
||
|
else *(_TotalPacketLength) = (_Packet)->Private.TotalLength; \
|
||
|
}
|
||
|
|
||
|
#endif // NDIS_LEGACY_DRIVER
|
||
|
|
||
|
|
||
|
/*++
|
||
|
|
||
|
VOID
|
||
|
NdisGetNextBuffer(
|
||
|
IN PNDIS_BUFFER CurrentBuffer,
|
||
|
OUT PNDIS_BUFFER * NextBuffer
|
||
|
);
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#define NdisGetNextBuffer(CurrentBuffer, NextBuffer) \
|
||
|
{ \
|
||
|
*(NextBuffer) = (CurrentBuffer)->Next; \
|
||
|
}
|
||
|
|
||
|
|
||
|
#define NdisAdjustBufferLength(Buffer, Length) (((Buffer)->ByteCount) = (Length))
|
||
|
|
||
|
|
||
|
#if NDIS_SUPPORT_NDIS6
|
||
|
/*
|
||
|
VOID
|
||
|
NdisAdjustMdlLength(
|
||
|
IN PMDL Mdl,
|
||
|
IN UINT Length
|
||
|
);
|
||
|
|
||
|
*/
|
||
|
#define NdisAdjustMdlLength(_Mdl, _Length) (((_Mdl)->ByteCount) = (_Length))
|
||
|
#endif // NDIS_SUPPORT_NDIS6
|
||
|
|
||
|
#if NDIS_LEGACY_DRIVER
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCopyFromPacketToPacket(
|
||
|
__in PNDIS_PACKET Destination,
|
||
|
__in UINT DestinationOffset,
|
||
|
__in UINT BytesToCopy,
|
||
|
__in PNDIS_PACKET Source,
|
||
|
__in UINT SourceOffset,
|
||
|
__out PUINT BytesCopied
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCopyFromPacketToPacketSafe(
|
||
|
IN PNDIS_PACKET Destination,
|
||
|
IN UINT DestinationOffset,
|
||
|
IN UINT BytesToCopy,
|
||
|
IN PNDIS_PACKET Source,
|
||
|
IN UINT SourceOffset,
|
||
|
OUT PUINT BytesCopied,
|
||
|
IN MM_PAGE_PRIORITY Priority
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
__drv_preferredFunction("NdisAllocateMemoryWithTag", "Obsolete")
|
||
|
DECLSPEC_DEPRECATED_DDK
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisAllocateMemory(
|
||
|
__deref_out_bcount_opt(Length) __drv_allocatesMem(Mem)
|
||
|
PVOID * VirtualAddress,
|
||
|
__in UINT Length,
|
||
|
__in UINT MemoryFlags,
|
||
|
__in NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress
|
||
|
);
|
||
|
|
||
|
#endif // NDIS_LEGACY_DRIVER
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisAllocateMemoryWithTag(
|
||
|
__deref_out_bcount_opt(Length) __drv_allocatesMem(Mem)
|
||
|
PVOID * VirtualAddress,
|
||
|
__in UINT Length,
|
||
|
__in ULONG Tag
|
||
|
);
|
||
|
|
||
|
__drv_when(MemoryFlags==0,
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL))
|
||
|
__drv_when(MemoryFlags==NDIS_MEMORY_NONCACHED,
|
||
|
__drv_maxIRQL(APC_LEVEL))
|
||
|
__drv_when(MemoryFlags==NDIS_MEMORY_CONTIGUOUS,
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL))
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFreeMemory(
|
||
|
__in_bcount(Length) __drv_freesMem(Mem)
|
||
|
PVOID VirtualAddress,
|
||
|
__in UINT Length,
|
||
|
__in __drv_in(__drv_valueIs(==0;
|
||
|
==NDIS_MEMORY_NONCACHED;
|
||
|
==NDIS_MEMORY_CONTIGUOUS))
|
||
|
UINT MemoryFlags
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFreeMemoryWithTag(
|
||
|
IN PVOID VirtualAddress,
|
||
|
IN ULONG Tag
|
||
|
);
|
||
|
|
||
|
/*++
|
||
|
VOID
|
||
|
NdisStallExecution(
|
||
|
IN UINT MicrosecondsToStall
|
||
|
)
|
||
|
--*/
|
||
|
|
||
|
#define NdisStallExecution(MicroSecondsToStall) KeStallExecutionProcessor(MicroSecondsToStall)
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisInitializeEvent(
|
||
|
__out PNDIS_EVENT Event
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisSetEvent(
|
||
|
__in PNDIS_EVENT Event
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisResetEvent(
|
||
|
__in PNDIS_EVENT Event
|
||
|
);
|
||
|
|
||
|
__drv_when(MsToWait !=0, __checkReturn)
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
BOOLEAN
|
||
|
NdisWaitEvent(
|
||
|
__in PNDIS_EVENT Event,
|
||
|
__in UINT MsToWait
|
||
|
);
|
||
|
|
||
|
|
||
|
#if NDIS_LEGACY_DRIVER
|
||
|
/*++
|
||
|
VOID
|
||
|
NdisInitializeWorkItem(
|
||
|
IN PNDIS_WORK_ITEM WorkItem,
|
||
|
IN NDIS_PROC Routine,
|
||
|
IN PVOID Context
|
||
|
);
|
||
|
--*/
|
||
|
|
||
|
#define NdisInitializeWorkItem(_WI_, _R_, _C_) \
|
||
|
{ \
|
||
|
(_WI_)->Context = _C_; \
|
||
|
(_WI_)->Routine = _R_; \
|
||
|
}
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisScheduleWorkItem(
|
||
|
__in PNDIS_WORK_ITEM WorkItem
|
||
|
);
|
||
|
|
||
|
#endif // NDIS_LEGACY_DRIVER
|
||
|
|
||
|
//
|
||
|
// Simple I/O support
|
||
|
//
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisOpenFile(
|
||
|
__out PNDIS_STATUS Status,
|
||
|
__out PNDIS_HANDLE FileHandle,
|
||
|
__out PUINT FileLength,
|
||
|
__in PNDIS_STRING FileName,
|
||
|
__in NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCloseFile(
|
||
|
__in NDIS_HANDLE FileHandle
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMapFile(
|
||
|
__out PNDIS_STATUS Status,
|
||
|
__out PVOID * MappedBuffer,
|
||
|
__in NDIS_HANDLE FileHandle
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisUnmapFile(
|
||
|
__in NDIS_HANDLE FileHandle
|
||
|
);
|
||
|
|
||
|
|
||
|
//
|
||
|
// Portability extensions
|
||
|
//
|
||
|
|
||
|
/*++
|
||
|
VOID
|
||
|
NdisFlushBuffer(
|
||
|
IN PNDIS_BUFFER Buffer,
|
||
|
IN BOOLEAN WriteToDevice
|
||
|
)
|
||
|
--*/
|
||
|
|
||
|
#define NdisFlushBuffer(Buffer,WriteToDevice) \
|
||
|
KeFlushIoBuffers((Buffer),!(WriteToDevice), TRUE)
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
ULONG
|
||
|
NdisGetSharedDataAlignment(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
|
||
|
//
|
||
|
// Raw Routines
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// Write Port Raw
|
||
|
//
|
||
|
|
||
|
/*++
|
||
|
VOID
|
||
|
NdisRawWritePortUchar(
|
||
|
IN ULONG_PTR Port,
|
||
|
IN UCHAR Data
|
||
|
)
|
||
|
--*/
|
||
|
#define NdisRawWritePortUchar(Port,Data) \
|
||
|
WRITE_PORT_UCHAR((PUCHAR)(Port),(UCHAR)(Data))
|
||
|
|
||
|
/*++
|
||
|
VOID
|
||
|
NdisRawWritePortUshort(
|
||
|
IN ULONG_PTR Port,
|
||
|
IN USHORT Data
|
||
|
)
|
||
|
--*/
|
||
|
#define NdisRawWritePortUshort(Port,Data) \
|
||
|
WRITE_PORT_USHORT((PUSHORT)(Port),(USHORT)(Data))
|
||
|
|
||
|
/*++
|
||
|
VOID
|
||
|
NdisRawWritePortUlong(
|
||
|
IN ULONG_PTR Port,
|
||
|
IN ULONG Data
|
||
|
)
|
||
|
--*/
|
||
|
#define NdisRawWritePortUlong(Port,Data) \
|
||
|
WRITE_PORT_ULONG((PULONG)(Port),(ULONG)(Data))
|
||
|
|
||
|
|
||
|
//
|
||
|
// Raw Write Port Buffers
|
||
|
//
|
||
|
|
||
|
/*++
|
||
|
VOID
|
||
|
NdisRawWritePortBufferUchar(
|
||
|
IN ULONG_PTR Port,
|
||
|
IN PUCHAR Buffer,
|
||
|
IN ULONG Length
|
||
|
)
|
||
|
--*/
|
||
|
#define NdisRawWritePortBufferUchar(Port,Buffer,Length) \
|
||
|
WRITE_PORT_BUFFER_UCHAR((PUCHAR)(Port),(PUCHAR)(Buffer),(Length))
|
||
|
|
||
|
/*++
|
||
|
VOID
|
||
|
NdisRawWritePortBufferUshort(
|
||
|
IN ULONG_PTR Port,
|
||
|
IN PUSHORT Buffer,
|
||
|
IN ULONG Length
|
||
|
)
|
||
|
--*/
|
||
|
#if defined(_M_IX86) || defined(_M_AMD64)
|
||
|
#define NdisRawWritePortBufferUshort(Port,Buffer,Length) \
|
||
|
WRITE_PORT_BUFFER_USHORT((PUSHORT)(Port),(PUSHORT)(Buffer),(Length))
|
||
|
#else
|
||
|
#define NdisRawWritePortBufferUshort(Port,Buffer,Length) \
|
||
|
{ \
|
||
|
ULONG_PTR _Port = (ULONG_PTR)(Port); \
|
||
|
PUSHORT _Current = (Buffer); \
|
||
|
PUSHORT _End = _Current + (Length); \
|
||
|
for ( ; _Current < _End; ++_Current) \
|
||
|
{ \
|
||
|
WRITE_PORT_USHORT((PUSHORT)_Port,*(UNALIGNED USHORT *)_Current);\
|
||
|
} \
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*++
|
||
|
VOID
|
||
|
NdisRawWritePortBufferUlong(
|
||
|
IN ULONG_PTR Port,
|
||
|
IN PULONG Buffer,
|
||
|
IN ULONG Length
|
||
|
)
|
||
|
--*/
|
||
|
#if defined(_M_IX86) || defined(_M_AMD64)
|
||
|
#define NdisRawWritePortBufferUlong(Port,Buffer,Length) \
|
||
|
WRITE_PORT_BUFFER_ULONG((PULONG)(Port),(PULONG)(Buffer),(Length))
|
||
|
#else
|
||
|
#define NdisRawWritePortBufferUlong(Port,Buffer,Length) \
|
||
|
{ \
|
||
|
ULONG_PTR _Port = (ULONG_PTR)(Port); \
|
||
|
PULONG _Current = (Buffer); \
|
||
|
PULONG _End = _Current + (Length); \
|
||
|
for ( ; _Current < _End; ++_Current) \
|
||
|
{ \
|
||
|
WRITE_PORT_ULONG((PULONG)_Port,*(UNALIGNED ULONG *)_Current); \
|
||
|
} \
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
|
||
|
//
|
||
|
// Raw Read Ports
|
||
|
//
|
||
|
|
||
|
/*++
|
||
|
VOID
|
||
|
NdisRawReadPortUchar(
|
||
|
IN ULONG_PTR Port,
|
||
|
OUT PUCHAR Data
|
||
|
)
|
||
|
--*/
|
||
|
#define NdisRawReadPortUchar(Port, Data) \
|
||
|
*(Data) = READ_PORT_UCHAR((PUCHAR)(Port))
|
||
|
|
||
|
/*++
|
||
|
VOID
|
||
|
NdisRawReadPortUshort(
|
||
|
IN ULONG_PTR Port,
|
||
|
OUT PUSHORT Data
|
||
|
)
|
||
|
--*/
|
||
|
#define NdisRawReadPortUshort(Port,Data) \
|
||
|
*(Data) = READ_PORT_USHORT((PUSHORT)(Port))
|
||
|
|
||
|
/*++
|
||
|
VOID
|
||
|
NdisRawReadPortUlong(
|
||
|
IN ULONG_PTR Port,
|
||
|
OUT PULONG Data
|
||
|
)
|
||
|
--*/
|
||
|
#define NdisRawReadPortUlong(Port,Data) \
|
||
|
*(Data) = READ_PORT_ULONG((PULONG)(Port))
|
||
|
|
||
|
|
||
|
//
|
||
|
// Raw Read Buffer Ports
|
||
|
//
|
||
|
|
||
|
/*++
|
||
|
VOID
|
||
|
NdisRawReadPortBufferUchar(
|
||
|
IN ULONG_PTR Port,
|
||
|
OUT PUCHAR Buffer,
|
||
|
IN ULONG Length
|
||
|
)
|
||
|
--*/
|
||
|
#define NdisRawReadPortBufferUchar(Port,Buffer,Length) \
|
||
|
READ_PORT_BUFFER_UCHAR((PUCHAR)(Port),(PUCHAR)(Buffer),(Length))
|
||
|
|
||
|
|
||
|
/*++
|
||
|
VOID
|
||
|
NdisRawReadPortBufferUshort(
|
||
|
IN ULONG_PTR Port,
|
||
|
OUT PUSHORT Buffer,
|
||
|
IN ULONG Length
|
||
|
)
|
||
|
--*/
|
||
|
#if defined(_M_IX86) || defined(_M_AMD64)
|
||
|
#define NdisRawReadPortBufferUshort(Port,Buffer,Length) \
|
||
|
READ_PORT_BUFFER_USHORT((PUSHORT)(Port),(PUSHORT)(Buffer),(Length))
|
||
|
#else
|
||
|
#define NdisRawReadPortBufferUshort(Port,Buffer,Length) \
|
||
|
{ \
|
||
|
ULONG_PTR _Port = (ULONG_PTR)(Port); \
|
||
|
PUSHORT _Current = (Buffer); \
|
||
|
PUSHORT _End = _Current + (Length); \
|
||
|
for ( ; _Current < _End; ++_Current) \
|
||
|
{ \
|
||
|
*(UNALIGNED USHORT *)_Current = READ_PORT_USHORT((PUSHORT)_Port); \
|
||
|
} \
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*++
|
||
|
VOID
|
||
|
NdisRawReadPortBufferUlong(
|
||
|
IN ULONG_PTR Port,
|
||
|
OUT PULONG Buffer,
|
||
|
IN ULONG Length
|
||
|
)
|
||
|
--*/
|
||
|
#if defined(_M_IX86) || defined(_M_AMD64)
|
||
|
#define NdisRawReadPortBufferUlong(Port,Buffer,Length) \
|
||
|
READ_PORT_BUFFER_ULONG((PULONG)(Port),(PULONG)(Buffer),(Length))
|
||
|
#else
|
||
|
#define NdisRawReadPortBufferUlong(Port,Buffer,Length) \
|
||
|
{ \
|
||
|
ULONG_PTR _Port = (ULONG_PTR)(Port); \
|
||
|
PULONG _Current = (Buffer); \
|
||
|
PULONG _End = _Current + (Length); \
|
||
|
for ( ; _Current < _End; ++_Current) \
|
||
|
{ \
|
||
|
*(UNALIGNED ULONG *)_Current = READ_PORT_ULONG((PULONG)_Port); \
|
||
|
} \
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
|
||
|
//
|
||
|
// Write Registers
|
||
|
//
|
||
|
|
||
|
/*++
|
||
|
VOID
|
||
|
NdisWriteRegisterUchar(
|
||
|
IN PUCHAR Register,
|
||
|
IN UCHAR Data
|
||
|
)
|
||
|
--*/
|
||
|
|
||
|
#if defined(_M_IX86) || defined(_M_AMD64)
|
||
|
#define NdisWriteRegisterUchar(Register,Data) \
|
||
|
WRITE_REGISTER_UCHAR((Register),(Data))
|
||
|
#else
|
||
|
#define NdisWriteRegisterUchar(Register,Data) \
|
||
|
{ \
|
||
|
WRITE_REGISTER_UCHAR((Register),(Data)); \
|
||
|
READ_REGISTER_UCHAR(Register); \
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
/*++
|
||
|
VOID
|
||
|
NdisWriteRegisterUshort(
|
||
|
IN PUCHAR Register,
|
||
|
IN USHORT Data
|
||
|
)
|
||
|
--*/
|
||
|
|
||
|
#if defined(_M_IX86) || defined(_M_AMD64)
|
||
|
#define NdisWriteRegisterUshort(Register,Data) \
|
||
|
WRITE_REGISTER_USHORT((Register),(Data))
|
||
|
#else
|
||
|
#define NdisWriteRegisterUshort(Register,Data) \
|
||
|
{ \
|
||
|
WRITE_REGISTER_USHORT((Register),(Data)); \
|
||
|
READ_REGISTER_USHORT(Register); \
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
/*++
|
||
|
VOID
|
||
|
NdisWriteRegisterUlong(
|
||
|
IN PUCHAR Register,
|
||
|
IN ULONG Data
|
||
|
)
|
||
|
--*/
|
||
|
|
||
|
#if defined(_M_IX86) || defined(_M_AMD64)
|
||
|
#define NdisWriteRegisterUlong(Register,Data) WRITE_REGISTER_ULONG((Register),(Data))
|
||
|
#else
|
||
|
#define NdisWriteRegisterUlong(Register,Data) \
|
||
|
{ \
|
||
|
WRITE_REGISTER_ULONG((Register),(Data)); \
|
||
|
READ_REGISTER_ULONG(Register); \
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
/*++
|
||
|
VOID
|
||
|
NdisReadRegisterUchar(
|
||
|
IN PUCHAR Register,
|
||
|
OUT PUCHAR Data
|
||
|
)
|
||
|
--*/
|
||
|
#if defined(_M_IX86)
|
||
|
#define NdisReadRegisterUchar(Register,Data) \
|
||
|
_ReadWriteBarrier(); \
|
||
|
*(Data) = *((volatile UCHAR * const)(Register));
|
||
|
#else
|
||
|
#define NdisReadRegisterUchar(Register,Data) *(Data) = READ_REGISTER_UCHAR((PUCHAR)(Register))
|
||
|
#endif
|
||
|
|
||
|
/*++
|
||
|
VOID
|
||
|
NdisReadRegisterUshort(
|
||
|
IN PUSHORT Register,
|
||
|
OUT PUSHORT Data
|
||
|
)
|
||
|
--*/
|
||
|
#if defined(_M_IX86)
|
||
|
#define NdisReadRegisterUshort(Register,Data) \
|
||
|
_ReadWriteBarrier(); \
|
||
|
*(Data) = *((volatile USHORT * const)(Register))
|
||
|
#else
|
||
|
#define NdisReadRegisterUshort(Register,Data) *(Data) = READ_REGISTER_USHORT((PUSHORT)(Register))
|
||
|
#endif
|
||
|
|
||
|
/*++
|
||
|
VOID
|
||
|
NdisReadRegisterUlong(
|
||
|
IN PULONG Register,
|
||
|
OUT PULONG Data
|
||
|
)
|
||
|
--*/
|
||
|
#if defined(_M_IX86)
|
||
|
#define NdisReadRegisterUlong(Register,Data) \
|
||
|
_ReadWriteBarrier(); \
|
||
|
*(Data) = *((volatile ULONG * const)(Register))
|
||
|
#else
|
||
|
#define NdisReadRegisterUlong(Register,Data) *(Data) = READ_REGISTER_ULONG((PULONG)(Register))
|
||
|
#endif
|
||
|
|
||
|
#define NdisEqualString(_String1, _String2, _CaseInsensitive) \
|
||
|
RtlEqualUnicodeString(_String1, _String2, _CaseInsensitive)
|
||
|
|
||
|
#define NdisEqualUnicodeString(_String1, _String2, _CaseInsensitive) \
|
||
|
RtlEqualUnicodeString(_String1, _String2, _CaseInsensitive)
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID __cdecl
|
||
|
NdisWriteErrorLogEntry(
|
||
|
__in NDIS_HANDLE NdisAdapterHandle,
|
||
|
__in NDIS_ERROR_CODE ErrorCode,
|
||
|
__in ULONG NumberOfErrorValues,
|
||
|
...
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisInitializeString(
|
||
|
__out PNDIS_STRING Destination,
|
||
|
__in PUCHAR Source
|
||
|
);
|
||
|
|
||
|
#define NdisFreeString(String) NdisFreeMemory((String).Buffer, (String).MaximumLength, 0)
|
||
|
|
||
|
#define NdisPrintString(String) DbgPrint("%ls",(String).Buffer)
|
||
|
|
||
|
|
||
|
/*++
|
||
|
|
||
|
VOID
|
||
|
NdisCreateLookaheadBufferFromSharedMemory(
|
||
|
IN PVOID pSharedMemory,
|
||
|
IN UINT LookaheadLength,
|
||
|
OUT PVOID * pLookaheadBuffer
|
||
|
);
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#define NdisCreateLookaheadBufferFromSharedMemory(_S, _L, _B) ((*(_B)) = (_S))
|
||
|
|
||
|
/*++
|
||
|
|
||
|
VOID
|
||
|
NdisDestroyLookaheadBufferFromSharedMemory(
|
||
|
IN PVOID pLookaheadBuffer
|
||
|
);
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#define NdisDestroyLookaheadBufferFromSharedMemory(_B)
|
||
|
|
||
|
|
||
|
//
|
||
|
// The following declarations are shared between ndismac.h and ndismini.h. They
|
||
|
// are meant to be for internal use only. They should not be used directly by
|
||
|
// miniport drivers.
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// declare these first since they point to each other
|
||
|
//
|
||
|
|
||
|
typedef struct _NDIS_WRAPPER_HANDLE NDIS_WRAPPER_HANDLE, *PNDIS_WRAPPER_HANDLE;
|
||
|
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_MINIPORT_BLOCK NDIS_MINIPORT_BLOCK,*PNDIS_MINIPORT_BLOCK;
|
||
|
typedef struct _CO_CALL_PARAMETERS CO_CALL_PARAMETERS, *PCO_CALL_PARAMETERS;
|
||
|
typedef struct _CO_MEDIA_PARAMETERS CO_MEDIA_PARAMETERS, *PCO_MEDIA_PARAMETERS;
|
||
|
typedef struct _NDIS_CALL_MANAGER_CHARACTERISTICS *PNDIS_CALL_MANAGER_CHARACTERISTICS;
|
||
|
typedef struct _NDIS_OFFLOAD NDIS_OFFLOAD, *PNDIS_OFFLOAD;
|
||
|
typedef struct _NDIS_AF_LIST NDIS_AF_LIST, *PNDIS_AF_LIST;
|
||
|
typedef struct _X_FILTER ETH_FILTER, *PETH_FILTER;
|
||
|
typedef struct _X_FILTER TR_FILTER, *PTR_FILTER;
|
||
|
typedef struct _X_FILTER NULL_FILTER, *PNULL_FILTER;
|
||
|
|
||
|
#if NDIS_SUPPORT_NDIS6
|
||
|
|
||
|
typedef USHORT NET_FRAME_TYPE, *PNET_FRAME_TYPE;
|
||
|
|
||
|
#endif NDIS_SUPPORT_NDIS6
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Timers.
|
||
|
//
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(NDIS_TIMER_FUNCTION) (
|
||
|
__in PVOID SystemSpecific1,
|
||
|
__in PVOID FunctionContext,
|
||
|
__in PVOID SystemSpecific2,
|
||
|
__in PVOID SystemSpecific3
|
||
|
);
|
||
|
typedef NDIS_TIMER_FUNCTION (*PNDIS_TIMER_FUNCTION);
|
||
|
|
||
|
typedef struct _NDIS_TIMER
|
||
|
{
|
||
|
KTIMER Timer;
|
||
|
KDPC Dpc;
|
||
|
} NDIS_TIMER, *PNDIS_TIMER;
|
||
|
|
||
|
|
||
|
#if NDIS_SUPPORT_NDIS6
|
||
|
__drv_preferredFunction(NdisAllocateTimerObject, "Not supported for NDIS 6.0 drivers in Windows Vista. Use NdisAllocateTimerObject instead.")
|
||
|
#endif NDIS_SUPPORT_NDIS6
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisInitializeTimer(
|
||
|
__inout PNDIS_TIMER Timer,
|
||
|
__in PNDIS_TIMER_FUNCTION TimerFunction,
|
||
|
__in_opt __drv_isObjectPointer
|
||
|
PVOID FunctionContext
|
||
|
);
|
||
|
|
||
|
#if NDIS_SUPPORT_NDIS6
|
||
|
__drv_preferredFunction(NdisCancelTimerObject, "Not supported for NDIS 6.0 drivers in Windows Vista. Use NdisCancelTimerObject instead.")
|
||
|
#endif NDIS_SUPPORT_NDIS6
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
NdisCancelTimer(
|
||
|
__in PNDIS_TIMER Timer,
|
||
|
__out __checkReturn
|
||
|
PBOOLEAN TimerCancelled
|
||
|
);
|
||
|
|
||
|
#if NDIS_SUPPORT_NDIS6
|
||
|
__drv_preferredFunction(NdisSetTimerObject, "Not supported for NDIS 6.0 drivers in Windows Vista. Use NdisSetTimerObject instead.")
|
||
|
#endif NDIS_SUPPORT_NDIS6
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisSetTimer(
|
||
|
__in PNDIS_TIMER Timer,
|
||
|
__in UINT MillisecondsToDelay
|
||
|
);
|
||
|
|
||
|
#if NDIS_SUPPORT_NDIS6
|
||
|
__drv_preferredFunction(NdisSetTimerObject, "Not supported for NDIS 6.0 drivers in Windows Vista. Use NdisSetTimerObject instead.")
|
||
|
#endif NDIS_SUPPORT_NDIS6
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisSetPeriodicTimer(
|
||
|
__in PNDIS_TIMER NdisTimer,
|
||
|
__in UINT MillisecondsPeriod
|
||
|
);
|
||
|
|
||
|
#if NDIS_SUPPORT_NDIS6
|
||
|
__drv_preferredFunction(NdisSetTimerObject, "Not supported for NDIS 6.0 drivers in Windows Vista. Use NdisSetTimerObject instead.")
|
||
|
#endif NDIS_SUPPORT_NDIS6
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisSetTimerEx(
|
||
|
__in PNDIS_TIMER NdisTimer,
|
||
|
__in UINT MillisecondsToDelay,
|
||
|
__in __drv_isObjectPointer
|
||
|
PVOID FunctionContext
|
||
|
);
|
||
|
|
||
|
|
||
|
#if NDIS_SUPPORT_60_COMPATIBLE_API
|
||
|
//
|
||
|
// System processor count
|
||
|
//
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
CCHAR
|
||
|
NdisSystemProcessorCount(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
#endif
|
||
|
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
PVOID
|
||
|
NdisGetRoutineAddress(
|
||
|
__in PNDIS_STRING NdisRoutineName
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
UINT
|
||
|
NdisGetVersion(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
|
||
|
//
|
||
|
// Ansi/Unicode support routines
|
||
|
//
|
||
|
|
||
|
|
||
|
#define NdisInitAnsiString(_as, s) RtlInitString(_as, s)
|
||
|
#define NdisInitUnicodeString(_us, s) RtlInitUnicodeString(_us, s)
|
||
|
#define NdisAnsiStringToUnicodeString(_us, _as) RtlAnsiStringToUnicodeString(_us, _as, FALSE)
|
||
|
#define NdisUnicodeStringToAnsiString(_as, _us) RtlUnicodeStringToAnsiString(_as, _us, FALSE)
|
||
|
#define NdisUpcaseUnicodeString(_d, _s) RtlUpcaseUnicodeString(_d, _s, FALSE)
|
||
|
|
||
|
|
||
|
//
|
||
|
// Non-paged lookaside list support routines
|
||
|
//
|
||
|
|
||
|
#define NdisInitializeNPagedLookasideList(_L, _AR, _FR, _Fl, _S, _T, _D) \
|
||
|
ExInitializeNPagedLookasideList(_L, _AR, _FR, _Fl, _S, _T, _D)
|
||
|
|
||
|
#define NdisDeleteNPagedLookasideList(_L) ExDeleteNPagedLookasideList(_L)
|
||
|
#define NdisAllocateFromNPagedLookasideList(_L) ExAllocateFromNPagedLookasideList(_L)
|
||
|
#define NdisFreeToNPagedLookasideList(_L, _E) ExFreeToNPagedLookasideList(_L, _E)
|
||
|
|
||
|
#if NDIS_LEGACY_DRIVER
|
||
|
/*
|
||
|
NdisSetPacketStatus is deprecated. use NDIS_SET_PACKET_STATUS macro
|
||
|
*/
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
DECLSPEC_DEPRECATED_DDK
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisSetPacketStatus(
|
||
|
__in PNDIS_PACKET Packet,
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE Handle,
|
||
|
__in ULONG Code
|
||
|
);
|
||
|
|
||
|
#endif
|
||
|
|
||
|
#define NDIS_MAX_EVENT_LOG_DATA_SIZE ((ERROR_LOG_MAXIMUM_SIZE - sizeof(IO_ERROR_LOG_PACKET) + sizeof(ULONG)) & ~3)
|
||
|
|
||
|
#if NDIS_SUPPORT_60_COMPATIBLE_API && !defined(NDIS_WRAPPER)
|
||
|
|
||
|
#ifdef _WIN64
|
||
|
#define NDIS_MAX_PROCESSOR_COUNT 64
|
||
|
#else
|
||
|
#define NDIS_MAX_PROCESSOR_COUNT 32
|
||
|
#endif
|
||
|
|
||
|
#endif
|
||
|
|
||
|
#if NDIS_SUPPORT_NDIS6
|
||
|
|
||
|
//
|
||
|
// NDIS_RESTART_ATTRIBUTES is used in NDIS_FILTER_RESTART_PARAMETERS,
|
||
|
// NDIS_MINIPORT_RESTART_PARAMETERS and NDIS_PROTOCOL_RESTART_PARAMETERS
|
||
|
//
|
||
|
typedef struct _NDIS_RESTART_ATTRIBUTES NDIS_RESTART_ATTRIBUTES, *PNDIS_RESTART_ATTRIBUTES;
|
||
|
|
||
|
typedef struct _NDIS_RESTART_ATTRIBUTES
|
||
|
{
|
||
|
PNDIS_RESTART_ATTRIBUTES Next;
|
||
|
NDIS_OID Oid;
|
||
|
ULONG DataLength;
|
||
|
DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) UCHAR Data[1];
|
||
|
}NDIS_RESTART_ATTRIBUTES, *PNDIS_RESTART_ATTRIBUTES;
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// used in all NDIS drivers
|
||
|
//
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(SET_OPTIONS)(
|
||
|
__in NDIS_HANDLE NdisDriverHandle,
|
||
|
__in NDIS_HANDLE DriverContext
|
||
|
);
|
||
|
|
||
|
typedef SET_OPTIONS (*SET_OPTIONS_HANDLER);
|
||
|
typedef SET_OPTIONS (MINIPORT_SET_OPTIONS);
|
||
|
typedef SET_OPTIONS (PROTOCOL_SET_OPTIONS);
|
||
|
typedef SET_OPTIONS (FILTER_SET_OPTIONS);
|
||
|
|
||
|
#endif // NDIS_SUPPORT_NDIS6
|
||
|
|
||
|
#if NDIS_LEGACY_DRIVER
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(*WAN_SEND_HANDLER)(
|
||
|
__in NDIS_HANDLE NdisBindingHandle,
|
||
|
__in NDIS_HANDLE LinkHandle,
|
||
|
__in PVOID Packet
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(*SEND_HANDLER)(
|
||
|
__in NDIS_HANDLE NdisBindingHandle,
|
||
|
__in PNDIS_PACKET Packet
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(*TRANSFER_DATA_HANDLER)(
|
||
|
__in NDIS_HANDLE NdisBindingHandle,
|
||
|
__in NDIS_HANDLE MacReceiveContext,
|
||
|
__in UINT ByteOffset,
|
||
|
__in UINT BytesToTransfer,
|
||
|
__out PNDIS_PACKET Packet,
|
||
|
__out PUINT BytesTransferred
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(*RESET_HANDLER)(
|
||
|
__in NDIS_HANDLE NdisBindingHandle
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(*REQUEST_HANDLER)(
|
||
|
__in NDIS_HANDLE NdisBindingHandle,
|
||
|
__in PNDIS_REQUEST NdisRequest
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*SEND_PACKETS_HANDLER)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext,
|
||
|
__in PPNDIS_PACKET PacketArray,
|
||
|
__in UINT NumberOfPackets
|
||
|
);
|
||
|
|
||
|
#endif // NDIS_LEGACY_DRIVER
|
||
|
|
||
|
//
|
||
|
// NDIS object types created by NDIS drivers
|
||
|
//
|
||
|
|
||
|
|
||
|
#if NDIS_SUPPORT_NDIS6
|
||
|
|
||
|
#if NDIS_SUPPORT_60_COMPATIBLE_API
|
||
|
#define NDIS_CURRENT_PROCESSOR_NUMBER KeGetCurrentProcessorNumber()
|
||
|
#endif
|
||
|
|
||
|
#define NDIS_CURRENT_IRQL() KeGetCurrentIrql()
|
||
|
|
||
|
#define NDIS_RAISE_IRQL_TO_DISPATCH(_pIrql_) KeRaiseIrql(DISPATCH_LEVEL, _pIrql_)
|
||
|
|
||
|
#define NDIS_LOWER_IRQL(_OldIrql_, _CurIrql_) \
|
||
|
{ \
|
||
|
if (_OldIrql_ != _CurIrql_) KeLowerIrql(_OldIrql_); \
|
||
|
}
|
||
|
|
||
|
typedef KMUTEX NDIS_MUTEX, *PNDIS_MUTEX;
|
||
|
|
||
|
#define NDIS_INIT_MUTEX(_M_) KeInitializeMutex(_M_, 0xFFFF)
|
||
|
#define NDIS_RELEASE_MUTEX(_M_) KeReleaseMutex(_M_, FALSE)
|
||
|
|
||
|
#define NDIS_WAIT_FOR_MUTEX(_M_) KeWaitForSingleObject(_M_, \
|
||
|
Executive,\
|
||
|
KernelMode,\
|
||
|
FALSE, \
|
||
|
NULL) \
|
||
|
|
||
|
|
||
|
|
||
|
#if NDIS_SUPPORT_60_COMPATIBLE_API
|
||
|
|
||
|
EXPORT
|
||
|
ULONG
|
||
|
NdisSystemActiveProcessorCount(
|
||
|
PKAFFINITY ActiveProcessors
|
||
|
);
|
||
|
|
||
|
#endif
|
||
|
|
||
|
#if NDIS_SUPPORT_NDIS620
|
||
|
|
||
|
EXPORT
|
||
|
USHORT
|
||
|
NdisActiveGroupCount(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
USHORT
|
||
|
NdisMaxGroupCount(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
ULONG
|
||
|
NdisGroupMaxProcessorCount(
|
||
|
USHORT Group
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
ULONG
|
||
|
NdisGroupActiveProcessorCount(
|
||
|
USHORT Group
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
KAFFINITY
|
||
|
NdisGroupActiveProcessorMask(
|
||
|
USHORT Group
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
PROCESSOR_NUMBER
|
||
|
NdisCurrentGroupAndProcessor(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
ULONG
|
||
|
NdisCurrentProcessorIndex(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
ULONG
|
||
|
NdisProcessorNumberToIndex(
|
||
|
PROCESSOR_NUMBER ProcNum
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
NTSTATUS
|
||
|
NdisProcessorIndexToNumber(
|
||
|
__in ULONG ProcIndex,
|
||
|
__out PPROCESSOR_NUMBER ProcNum
|
||
|
);
|
||
|
|
||
|
#endif
|
||
|
|
||
|
#define NDIS_CONFIGURATION_OBJECT_REVISION_1 1
|
||
|
|
||
|
//
|
||
|
// Flags for NdisOpenConfigurationEx
|
||
|
//
|
||
|
#define NDIS_CONFIG_FLAG_FILTER_INSTANCE_CONFIGURATION 0x00000001
|
||
|
|
||
|
typedef struct _NDIS_CONFIGURATION_OBJECT
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
NDIS_HANDLE NdisHandle;
|
||
|
ULONG Flags;
|
||
|
} NDIS_CONFIGURATION_OBJECT, *PNDIS_CONFIGURATION_OBJECT;
|
||
|
|
||
|
#define NDIS_SIZEOF_CONFIGURATION_OBJECT_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_CONFIGURATION_OBJECT, Flags)
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisOpenConfigurationEx(
|
||
|
__in PNDIS_CONFIGURATION_OBJECT ConfigObject,
|
||
|
__out __drv_when(return==NDIS_STATUS_SUCCESS,
|
||
|
__drv_deref(__drv_allocatesMem(mem))) PNDIS_HANDLE ConfigurationHandle
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
__drv_allocatesMem(Mem)
|
||
|
EXPORT
|
||
|
PVOID
|
||
|
NdisAllocateMemoryWithTagPriority(
|
||
|
__in NDIS_HANDLE NdisHandle,
|
||
|
__in UINT Length,
|
||
|
__in ULONG Tag,
|
||
|
__in EX_POOL_PRIORITY Priority
|
||
|
);
|
||
|
|
||
|
|
||
|
typedef struct _NDIS_DRIVER_OPTIONAL_HANDLERS
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
} NDIS_DRIVER_OPTIONAL_HANDLERS, *PNDIS_DRIVER_OPTIONAL_HANDLERS;
|
||
|
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisSetOptionalHandlers(
|
||
|
NDIS_HANDLE NdisDriverHandle,
|
||
|
PNDIS_DRIVER_OPTIONAL_HANDLERS OptionalHandlers
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Flags used in NET_PNP_EVENT_NOTIFICATION Flags field
|
||
|
//
|
||
|
|
||
|
#define NET_EVENT_HALT_MINIPORT_ON_LOW_POWER 0x00000001
|
||
|
|
||
|
#define NET_PNP_EVENT_NOTIFICATION_REVISION_1 1
|
||
|
|
||
|
typedef struct _NET_PNP_EVENT_NOTIFICATION
|
||
|
{
|
||
|
//
|
||
|
// Caller must set Header to
|
||
|
// Type = NDIS_OBJECT_TYPE_DEFAULT
|
||
|
// Revision = NET_PNP_EVENT_NOTIFICATION_REVISION_1
|
||
|
// Size = sizeof(_NET_PNP_EVENT_NOTIFICATION)
|
||
|
//
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
|
||
|
NDIS_PORT_NUMBER PortNumber;
|
||
|
|
||
|
NET_PNP_EVENT NetPnPEvent;
|
||
|
ULONG Flags;
|
||
|
|
||
|
|
||
|
} NET_PNP_EVENT_NOTIFICATION, *PNET_PNP_EVENT_NOTIFICATION;
|
||
|
|
||
|
#define NDIS_SIZEOF_NET_PNP_EVENT_NOTIFICATION_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NET_PNP_EVENT_NOTIFICATION, NetPnPEvent)
|
||
|
|
||
|
//
|
||
|
// new request and status structures
|
||
|
//
|
||
|
|
||
|
#define NDIS_OID_REQUEST_REVISION_1 1
|
||
|
#define NDIS_OID_REQUEST_TIMEOUT_INFINITE 0
|
||
|
#define NDIS_OID_REQUEST_NDIS_RESERVED_SIZE 16
|
||
|
|
||
|
typedef struct _NDIS_OID_REQUEST
|
||
|
{
|
||
|
//
|
||
|
// Caller must set Header to
|
||
|
// Header.Type = NDIS_OBJECT_TYPE_OID_REQUEST
|
||
|
// Header.Revision = NDIS_OID_REQUEST_REVISION_1
|
||
|
// Header.Size = NDIS_SIZEOF_OID_REQUEST_REVISION_1
|
||
|
//
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
NDIS_REQUEST_TYPE RequestType;
|
||
|
NDIS_PORT_NUMBER PortNumber;
|
||
|
UINT Timeout; // in Seconds
|
||
|
PVOID RequestId;
|
||
|
NDIS_HANDLE RequestHandle;
|
||
|
|
||
|
//
|
||
|
// OID - Information
|
||
|
//
|
||
|
union _REQUEST_DATA
|
||
|
{
|
||
|
struct _QUERY
|
||
|
{
|
||
|
NDIS_OID Oid;
|
||
|
PVOID InformationBuffer;
|
||
|
UINT InformationBufferLength;
|
||
|
UINT BytesWritten;
|
||
|
UINT BytesNeeded;
|
||
|
} QUERY_INFORMATION;
|
||
|
|
||
|
struct _SET
|
||
|
{
|
||
|
NDIS_OID Oid;
|
||
|
PVOID InformationBuffer;
|
||
|
UINT InformationBufferLength;
|
||
|
UINT BytesRead;
|
||
|
UINT BytesNeeded;
|
||
|
} SET_INFORMATION;
|
||
|
|
||
|
struct _METHOD
|
||
|
{
|
||
|
NDIS_OID Oid;
|
||
|
PVOID InformationBuffer;
|
||
|
ULONG InputBufferLength;
|
||
|
ULONG OutputBufferLength;
|
||
|
ULONG MethodId;
|
||
|
UINT BytesWritten;
|
||
|
UINT BytesRead;
|
||
|
UINT BytesNeeded;
|
||
|
} METHOD_INFORMATION;
|
||
|
} DATA;
|
||
|
//
|
||
|
// NDIS Reserved
|
||
|
//
|
||
|
UCHAR NdisReserved[NDIS_OID_REQUEST_NDIS_RESERVED_SIZE * sizeof(PVOID)];
|
||
|
UCHAR MiniportReserved[2*sizeof(PVOID)];
|
||
|
UCHAR SourceReserved[2*sizeof(PVOID)];
|
||
|
UCHAR SupportedRevision;
|
||
|
UCHAR Reserved1;
|
||
|
USHORT Reserved2;
|
||
|
|
||
|
}NDIS_OID_REQUEST, *PNDIS_OID_REQUEST;
|
||
|
|
||
|
#define NDIS_SIZEOF_OID_REQUEST_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_OID_REQUEST, Reserved2)
|
||
|
//
|
||
|
// Macros to set, clear and test NDIS_STATUS_INDICATION Flags
|
||
|
//
|
||
|
#define NDIS_STATUS_INDICATION_SET_FLAG(_StatusIndication, _F) \
|
||
|
((_StatusIndication)->Flags |= (_F))
|
||
|
|
||
|
#define NDIS_STATUS_INDICATION_TEST_FLAG(_StatusIndication, _F) \
|
||
|
(((_StatusIndication)->Flags & (_F)) != 0)
|
||
|
|
||
|
#define NDIS_STATUS_INDICATION_CLEAR_FLAG(_StatusIndication, _F) \
|
||
|
((_StatusIndication)->Flags &= ~(_F))
|
||
|
|
||
|
#define NDIS_STATUS_INDICATION_FLAGS_NDIS_RESERVED 0xFFF
|
||
|
|
||
|
//
|
||
|
// Public flags for NDIS_STATUS_INDICATION
|
||
|
//
|
||
|
#define NDIS_STATUS_INDICATION_FLAGS_MEDIA_CONNECT_TO_CONNECT 0x1000
|
||
|
|
||
|
#define NDIS_STATUS_INDICATION_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_STATUS_INDICATION
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
NDIS_HANDLE SourceHandle;
|
||
|
NDIS_PORT_NUMBER PortNumber;
|
||
|
NDIS_STATUS StatusCode;
|
||
|
ULONG Flags;
|
||
|
NDIS_HANDLE DestinationHandle;
|
||
|
PVOID RequestId;
|
||
|
PVOID StatusBuffer;
|
||
|
ULONG StatusBufferSize;
|
||
|
GUID Guid; // optional and valid only if StatusCode = NDIS_STATUS_MEDIA_SPECIFIC_INDICATION
|
||
|
PVOID NdisReserved[4];
|
||
|
}NDIS_STATUS_INDICATION, *PNDIS_STATUS_INDICATION;
|
||
|
|
||
|
#define NDIS_SIZEOF_STATUS_INDICATION_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_STATUS_INDICATION, NdisReserved)
|
||
|
|
||
|
|
||
|
//
|
||
|
// Generic Timer support
|
||
|
//
|
||
|
|
||
|
#define NDIS_TIMER_CHARACTERISTICS_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_TIMER_CHARACTERISTICS
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
ULONG AllocationTag;
|
||
|
PNDIS_TIMER_FUNCTION TimerFunction;
|
||
|
PVOID FunctionContext;
|
||
|
} NDIS_TIMER_CHARACTERISTICS, *PNDIS_TIMER_CHARACTERISTICS;
|
||
|
|
||
|
#define NDIS_SIZEOF_TIMER_CHARACTERISTICS_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_TIMER_CHARACTERISTICS, FunctionContext)
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
#define NDIS_MAX_LOOKAHEAD_SIZE_ACCESSED_UNDEFINED -1
|
||
|
|
||
|
//
|
||
|
// Bits used in Flags field of NDIS_RESTART_GENERAL_ATTRIBUTES structure
|
||
|
//
|
||
|
#define NDIS_RESTART_GENERAL_ATTRIBUTES_MAX_LOOKAHEAD_ACCESSED_DEFINED 0x00000001
|
||
|
#endif
|
||
|
|
||
|
//
|
||
|
// NDIS_RESTART_GENERAL_ATTRIBUTES is used in NDIS_RESTART_ATTRIBUTES
|
||
|
//
|
||
|
|
||
|
#define NDIS_RESTART_GENERAL_ATTRIBUTES_REVISION_1 1
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
#define NDIS_RESTART_GENERAL_ATTRIBUTES_REVISION_2 2
|
||
|
#endif
|
||
|
|
||
|
typedef struct _NDIS_RESTART_GENERAL_ATTRIBUTES
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
ULONG MtuSize;
|
||
|
ULONG64 MaxXmitLinkSpeed;
|
||
|
ULONG64 MaxRcvLinkSpeed;
|
||
|
ULONG LookaheadSize;
|
||
|
ULONG MacOptions;
|
||
|
ULONG SupportedPacketFilters;
|
||
|
ULONG MaxMulticastListSize;
|
||
|
PNDIS_RECEIVE_SCALE_CAPABILITIES RecvScaleCapabilities;
|
||
|
NET_IF_ACCESS_TYPE AccessType;
|
||
|
ULONG Flags;
|
||
|
NET_IF_CONNECTION_TYPE ConnectionType;
|
||
|
ULONG SupportedStatistics;
|
||
|
ULONG DataBackFillSize;
|
||
|
ULONG ContextBackFillSize;
|
||
|
PNDIS_OID SupportedOidList;
|
||
|
ULONG SupportedOidListLength;
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
ULONG MaxLookaheadSizeAccessed;
|
||
|
#endif
|
||
|
}NDIS_RESTART_GENERAL_ATTRIBUTES, *PNDIS_RESTART_GENERAL_ATTRIBUTES;
|
||
|
|
||
|
#define NDIS_SIZEOF_RESTART_GENERAL_ATTRIBUTES_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_RESTART_GENERAL_ATTRIBUTES, SupportedOidListLength)
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
#define NDIS_SIZEOF_RESTART_GENERAL_ATTRIBUTES_REVISION_2 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_RESTART_GENERAL_ATTRIBUTES, MaxLookaheadSizeAccessed)
|
||
|
#endif
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisAllocateTimerObject(
|
||
|
__in NDIS_HANDLE NdisHandle,
|
||
|
__in PNDIS_TIMER_CHARACTERISTICS TimerCharacteristics,
|
||
|
__out __drv_deref(__drv_isObjectPointer)
|
||
|
PNDIS_HANDLE pTimerObject
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
BOOLEAN
|
||
|
NdisSetTimerObject(
|
||
|
__in NDIS_HANDLE TimerObject,
|
||
|
__in LARGE_INTEGER DueTime,
|
||
|
__in_opt LONG MillisecondsPeriod,
|
||
|
__in_opt PVOID FunctionContext
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Marking this as <= DISPATCH but in reality this should actually be == PASSIVE
|
||
|
// (in some cases). It depends if the TimerObject was created to be a Periodic Timer
|
||
|
// or not. We'll rely on SDV to catch these extra cases for now.
|
||
|
//
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
__checkReturn
|
||
|
EXPORT
|
||
|
BOOLEAN
|
||
|
NdisCancelTimerObject(
|
||
|
__in NDIS_HANDLE TimerObject
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFreeTimerObject(
|
||
|
__in NDIS_HANDLE TimerObject
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisAllocateCloneOidRequest(
|
||
|
IN NDIS_HANDLE SourceHandle,
|
||
|
IN PNDIS_OID_REQUEST OidRequest,
|
||
|
IN UINT PoolTag,
|
||
|
OUT PNDIS_OID_REQUEST* ClonedOidRequest
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFreeCloneOidRequest(
|
||
|
IN NDIS_HANDLE SourceHandle,
|
||
|
IN PNDIS_OID_REQUEST Request
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisGetSystemUpTimeEx(
|
||
|
OUT PLARGE_INTEGER pSystemUpTime
|
||
|
);
|
||
|
|
||
|
#if NDIS_SUPPORT_60_COMPATIBLE_API
|
||
|
|
||
|
typedef struct _NDIS_PROCESSOR_INFO
|
||
|
{
|
||
|
ULONG CpuNumber;
|
||
|
ULONG PhysicalPackageId;
|
||
|
ULONG CoreId;
|
||
|
ULONG HyperThreadID;
|
||
|
}NDIS_PROCESSOR_INFO, *PNDIS_PROCESSOR_INFO;
|
||
|
|
||
|
#define NDIS_SYSTEM_PROCESSOR_INFO_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_SYSTEM_PROCESSOR_INFO
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
ULONG Flags;
|
||
|
NDIS_PROCESSOR_VENDOR ProcessorVendor;
|
||
|
ULONG NumPhysicalPackages;
|
||
|
ULONG NumCores;
|
||
|
ULONG NumCoresPerPhysicalPackage;
|
||
|
ULONG MaxHyperThreadingCpusPerCore;
|
||
|
ULONG RssBaseCpu;
|
||
|
ULONG RssCpuCount;
|
||
|
__out_ecount(MAXIMUM_PROC_PER_GROUP) PUCHAR RssProcessors;
|
||
|
NDIS_PROCESSOR_INFO CpuInfo[MAXIMUM_PROC_PER_GROUP];
|
||
|
}NDIS_SYSTEM_PROCESSOR_INFO, *PNDIS_SYSTEM_PROCESSOR_INFO;
|
||
|
|
||
|
#define NDIS_SIZEOF_SYSTEM_PROCESSOR_INFO_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_SYSTEM_PROCESSOR_INFO, CpuInfo)
|
||
|
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisGetProcessorInformation(
|
||
|
__inout PNDIS_SYSTEM_PROCESSOR_INFO SystemProcessorInfo
|
||
|
);
|
||
|
|
||
|
#endif // NDIS_SUPPORT_60_COMPATIBLE_API
|
||
|
|
||
|
#if NDIS_SUPPORT_NDIS620
|
||
|
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisGetRssProcessorInformation(
|
||
|
__in NDIS_HANDLE NdisHandle,
|
||
|
__out_bcount_opt(*Size) PNDIS_RSS_PROCESSOR_INFO RssProcessorInfo,
|
||
|
__inout PSIZE_T Size
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisGetProcessorInformationEx(
|
||
|
__in_opt NDIS_HANDLE NdisHandle,
|
||
|
__out_bcount_opt(*Size) PNDIS_SYSTEM_PROCESSOR_INFO_EX SystemProcessorInfo,
|
||
|
__inout PSIZE_T Size
|
||
|
);
|
||
|
|
||
|
#endif
|
||
|
|
||
|
|
||
|
//
|
||
|
// Pause reason used in NDIS_MINIPORT_PAUSE_PARAMETERS, NDIS_FILTER_PAUSE_PARAMETERS
|
||
|
// and NDIS_PROTOCOL_PAUSE_PARAMETERS
|
||
|
//
|
||
|
#define NDIS_PAUSE_NDIS_INTERNAL 0x00000001
|
||
|
#define NDIS_PAUSE_LOW_POWER 0x00000002
|
||
|
#define NDIS_PAUSE_BIND_PROTOCOL 0x00000004
|
||
|
#define NDIS_PAUSE_UNBIND_PROTOCOL 0x00000008
|
||
|
#define NDIS_PAUSE_ATTACH_FILTER 0x00000010
|
||
|
#define NDIS_PAUSE_DETACH_FILTER 0x00000020
|
||
|
#define NDIS_PAUSE_FILTER_RESTART_STACK 0x00000040
|
||
|
#define NDIS_PAUSE_MINIPORT_DEVICE_REMOVE 0x00000080
|
||
|
|
||
|
#endif // NDIS_SUPPORT_NDIS6
|
||
|
|
||
|
#if (NTDDI_VERSION >= NTDDI_VISTA)
|
||
|
#if (NDIS_LEGACY_DRIVER || NDIS_SUPPORT_NDIS6)
|
||
|
//
|
||
|
// Flags used in NDIS_FILTER_INTERFACE
|
||
|
//
|
||
|
#define NDIS_FILTER_INTERFACE_IM_FILTER 0x00000001
|
||
|
#define NDIS_FILTER_INTERFACE_LW_FILTER 0x00000002
|
||
|
|
||
|
|
||
|
//
|
||
|
// NDIS_FILTER_INTERFACE is used in NDIS_ENUM_FILTERS
|
||
|
// structure that is used in NdisEnumerateFilterModules
|
||
|
//
|
||
|
#define NDIS_FILTER_INTERFACE_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_FILTER_INTERFACE
|
||
|
{
|
||
|
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
ULONG Flags;
|
||
|
ULONG FilterType;
|
||
|
ULONG FilterRunType;
|
||
|
NET_IFINDEX IfIndex;
|
||
|
NET_LUID NetLuid;
|
||
|
NDIS_STRING FilterClass;
|
||
|
NDIS_STRING FilterInstanceName;
|
||
|
} NDIS_FILTER_INTERFACE, *PNDIS_FILTER_INTERFACE;
|
||
|
|
||
|
#define NDIS_SIZEOF_FILTER_INTERFACE_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_FILTER_INTERFACE, FilterInstanceName)
|
||
|
|
||
|
//
|
||
|
// NDIS_ENUM_FILTERS is used in NdisEnumerateFilterModules
|
||
|
//
|
||
|
#define NDIS_ENUM_FILTERS_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_ENUM_FILTERS
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
ULONG Flags;
|
||
|
ULONG NumberOfFilters;
|
||
|
ULONG OffsetFirstFilter;
|
||
|
NDIS_FILTER_INTERFACE Filter[1];
|
||
|
} NDIS_ENUM_FILTERS, *PNDIS_ENUM_FILTERS;
|
||
|
|
||
|
#define NDIS_SIZEOF_ENUM_FILTERS_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_ENUM_FILTERS, Filter)
|
||
|
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisEnumerateFilterModules(
|
||
|
IN NDIS_HANDLE NdisHandle,
|
||
|
IN PVOID InterfaceBuffer,
|
||
|
IN ULONG InterfaceBufferLength,
|
||
|
IN OUT PULONG BytesNeeded,
|
||
|
IN OUT PULONG BytesWritten
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// The NdisRegisterDeviceEx is used by NDIS 5 and 6 drivers on NTDDI_VISTA
|
||
|
// These drivers use NdisRegisterDeviceEx to use the new security features
|
||
|
// not available in NdisRegisterDevice or NdisMRegisterDevice
|
||
|
//
|
||
|
#define NDIS_DEVICE_OBJECT_ATTRIBUTES_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_DEVICE_OBJECT_ATTRIBUTES
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
PNDIS_STRING DeviceName;
|
||
|
PNDIS_STRING SymbolicName;
|
||
|
PDRIVER_DISPATCH* MajorFunctions;
|
||
|
ULONG ExtensionSize;
|
||
|
PCUNICODE_STRING DefaultSDDLString;
|
||
|
LPCGUID DeviceClassGuid;
|
||
|
} NDIS_DEVICE_OBJECT_ATTRIBUTES, *PNDIS_DEVICE_OBJECT_ATTRIBUTES;
|
||
|
|
||
|
#define NDIS_SIZEOF_DEVICE_OBJECT_ATTRIBUTES_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_DEVICE_OBJECT_ATTRIBUTES, DeviceClassGuid)
|
||
|
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisRegisterDeviceEx(
|
||
|
IN NDIS_HANDLE NdisObjectHandle,
|
||
|
IN PNDIS_DEVICE_OBJECT_ATTRIBUTES DeviceObjectAttributes,
|
||
|
OUT PDEVICE_OBJECT * pDeviceObject,
|
||
|
OUT PNDIS_HANDLE NdisDeviceHandle
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisDeregisterDeviceEx(
|
||
|
IN NDIS_HANDLE NdisDeviceHandle
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
PVOID
|
||
|
NdisGetDeviceReservedExtension(
|
||
|
IN PDEVICE_OBJECT DeviceObject
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// This structure is used by NDIS 5.x drivers that want to use
|
||
|
// NdisRegisterDeviceEx
|
||
|
//
|
||
|
#define NDIS_OBJECT_TYPE_DRIVER_WRAPPER_REVISION_1 1
|
||
|
typedef struct _NDIS_DRIVER_WRAPPER_HANDLE
|
||
|
{
|
||
|
//
|
||
|
// Caller must set Header to
|
||
|
// Header.Type = NDIS_OBJECT_TYPE_DRIVER_WRAPPER_OBJECT
|
||
|
// Header.Revision = NDIS_OBJECT_TYPE_DRIVER_WRAPPER_REVISION_1
|
||
|
// Header.Size = sizeof(NDIS_DRIVER_WRAPPER_HANDLE)
|
||
|
//
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
NDIS_HANDLE NdisWrapperHandle;
|
||
|
|
||
|
} NDIS_DRIVER_WRAPPER_HANDLE, *PNDIS_DRIVER_WRAPPER_HANDLE;
|
||
|
|
||
|
#define NDIS_SIZEOF_DRIVER_WRAPPER_HANDLE_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_DRIVER_WRAPPER_HANDLE, NdisWrapperHandle)
|
||
|
|
||
|
#endif // NDIS_SUPPORT_NDIS6 || NDIS_LEGACY_DRIVER
|
||
|
#endif // NTDDI_VERSION >= NTDDI_VISTA
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
|
||
|
//
|
||
|
// shared memory usage types used in NDIS_SHARED_MEMORY_PARAMETERS
|
||
|
//
|
||
|
|
||
|
typedef enum _NDIS_SHARED_MEMORY_USAGE
|
||
|
{
|
||
|
NdisSharedMemoryUsageUndefined,
|
||
|
NdisSharedMemoryUsageXmit,
|
||
|
NdisSharedMemoryUsageXmitHeader,
|
||
|
NdisSharedMemoryUsageXmitData,
|
||
|
NdisSharedMemoryUsageReceive,
|
||
|
NdisSharedMemoryUsageReceiveLookahead,
|
||
|
NdisSharedMemoryUsageReceivePostLookahead,
|
||
|
NdisSharedMemoryUsageReceiveHeader,
|
||
|
NdisSharedMemoryUsageReceiveData,
|
||
|
NdisSharedMemoryUsageOther,
|
||
|
NdisSharedMemoryUsageMax
|
||
|
}NDIS_SHARED_MEMORY_USAGE, *PNDIS_SHARED_MEMORY_USAGE;
|
||
|
|
||
|
//
|
||
|
// NDIS_SHARED_MEMORY_PARAMETERS structure describes
|
||
|
// a shared memory allocation request for a receive queue.
|
||
|
// This structure is used in NdisMAllocateSharedMemoryEx API
|
||
|
// as well as ALLOCATE_SHARED_MEMORY_HANDLER entry point
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// TODO: Temporary definition to get around VSP build break
|
||
|
//
|
||
|
typedef ULONG NODE_REQUIREMENT;
|
||
|
|
||
|
//
|
||
|
// flags used in Flags field of NDIS_SHARED_MEMORY_PARAMETERS structure
|
||
|
//
|
||
|
#define NDIS_SHARED_MEM_PARAMETERS_CONTIGOUS 0x00000001
|
||
|
|
||
|
|
||
|
//
|
||
|
// shared memory handle used for allocation from HAL
|
||
|
//
|
||
|
#define NDIS_SHARED_MEM_HANDLE_HAL_ALLOCATED ((NDIS_HANDLE)(NULL))
|
||
|
|
||
|
#define NDIS_SHARED_MEMORY_PARAMETERS_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_SHARED_MEMORY_PARAMETERS
|
||
|
{
|
||
|
__in NDIS_OBJECT_HEADER Header;
|
||
|
__in ULONG Flags;
|
||
|
__in NDIS_RECEIVE_QUEUE_ID QueueId;
|
||
|
__out NDIS_HANDLE SharedMemoryHandle;
|
||
|
__in NODE_REQUIREMENT PreferredNode;
|
||
|
__in NDIS_SHARED_MEMORY_USAGE Usage;
|
||
|
__in ULONG Length;
|
||
|
__out PVOID VirtualAddress;
|
||
|
__in ULONG SGListBufferLength;
|
||
|
__inout PSCATTER_GATHER_LIST SGListBuffer;
|
||
|
}NDIS_SHARED_MEMORY_PARAMETERS, *PNDIS_SHARED_MEMORY_PARAMETERS;
|
||
|
|
||
|
#define NDIS_SIZEOF_SHARED_MEMORY_PARAMETERS_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_SHARED_MEMORY_PARAMETERS, SGListBuffer)
|
||
|
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(*ALLOCATE_SHARED_MEMORY_HANDLER)(
|
||
|
__in NDIS_HANDLE ProviderContext,
|
||
|
__in PNDIS_SHARED_MEMORY_PARAMETERS SharedMemoryParameters,
|
||
|
__inout PNDIS_HANDLE pSharedMemoryProviderContext
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*FREE_SHARED_MEMORY_HANDLER)(
|
||
|
__in NDIS_HANDLE ProviderContext,
|
||
|
__in NDIS_HANDLE SharedMemoryProviderContext
|
||
|
);
|
||
|
|
||
|
#define NDIS_SHARED_MEMORY_PROVIDER_CHARACTERISTICS_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_SHARED_MEMORY_PROVIDER_CHARACTERISTICS
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header; // Header.Type = NDIS_OBJECT_TYPE_SHARED_MEMORY_PROVIDER_CHARACTERISTICS
|
||
|
ULONG Flags;
|
||
|
NDIS_HANDLE ProviderContext;
|
||
|
ALLOCATE_SHARED_MEMORY_HANDLER AllocateSharedMemoryHandler;
|
||
|
FREE_SHARED_MEMORY_HANDLER FreeSharedMemoryHandler;
|
||
|
} NDIS_SHARED_MEMORY_PROVIDER_CHARACTERISTICS, *PNDIS_SHARED_MEMORY_PROVIDER_CHARACTERISTICS;
|
||
|
|
||
|
#define NDIS_SIZEOF_SHARED_MEMORY_PROVIDER_CHARACTERISTICS_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_SHARED_MEMORY_PROVIDER_CHARACTERISTICS, FreeSharedMemoryHandler)
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFreeMemoryWithTagPriority(
|
||
|
IN NDIS_HANDLE NdisHandle,
|
||
|
IN PVOID VirtualAddress,
|
||
|
IN ULONG Tag
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// the following structure is used in NDIS_STATUS_RECEIVE_QUEUE_STATE
|
||
|
// status indication
|
||
|
//
|
||
|
#define NDIS_RECEIVE_QUEUE_STATE_REVISION_1 1
|
||
|
typedef struct _NDIS_RECEIVE_QUEUE_STATE
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
ULONG Flags;
|
||
|
NDIS_RECEIVE_QUEUE_ID QueueId;
|
||
|
NDIS_RECEIVE_QUEUE_OPERATIONAL_STATE QueueState;
|
||
|
}NDIS_RECEIVE_QUEUE_STATE, *PNDIS_RECEIVE_QUEUE_STATE;
|
||
|
|
||
|
#define NDIS_SIZEOF_NDIS_RECEIVE_QUEUE_STATE_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_RECEIVE_QUEUE_STATE, QueueState)
|
||
|
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisAllocateSharedMemory(
|
||
|
IN NDIS_HANDLE NdisHandle,
|
||
|
IN PNDIS_SHARED_MEMORY_PARAMETERS SharedMemoryParameters,
|
||
|
IN OUT PNDIS_HANDLE pAllocationHandle
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFreeSharedMemory(
|
||
|
IN NDIS_HANDLE NdisHandle,
|
||
|
IN NDIS_HANDLE AllocationHandle
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// NDIS_PROCESS_SG_LIST is a driver supplied callback routine used
|
||
|
// in NdisBuildScatterGatherList
|
||
|
//
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(NDIS_PROCESS_SG_LIST)(
|
||
|
__in PDEVICE_OBJECT DeviceObject,
|
||
|
__in PVOID Reserved,
|
||
|
__in PSCATTER_GATHER_LIST ScatterGatherListBuffer,
|
||
|
__in PVOID Context
|
||
|
);
|
||
|
|
||
|
typedef NDIS_PROCESS_SG_LIST (*NDIS_PROCESS_SG_LIST_HANDLER);
|
||
|
|
||
|
|
||
|
//
|
||
|
// NDIS_SCATTER_GATHER_LIST_PARAMETERS is used in NdisBuildScatterGatherList
|
||
|
// API call to build a scatter gather list for a buffer
|
||
|
//
|
||
|
|
||
|
#define NDIS_SCATTER_GATHER_LIST_PARAMETERS_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_SCATTER_GATHER_LIST_PARAMETERS
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
ULONG Flags;
|
||
|
NDIS_RECEIVE_QUEUE_ID QueueId;
|
||
|
NDIS_SHARED_MEMORY_USAGE SharedMemoryUsage;
|
||
|
PMDL Mdl;
|
||
|
PVOID CurrentVa;
|
||
|
ULONG Length;
|
||
|
NDIS_PROCESS_SG_LIST_HANDLER ProcessSGListHandler;
|
||
|
PVOID Context;
|
||
|
PSCATTER_GATHER_LIST ScatterGatherListBuffer;
|
||
|
ULONG ScatterGatherListBufferSize;
|
||
|
ULONG ScatterGatherListBufferSizeNeeded;
|
||
|
}NDIS_SCATTER_GATHER_LIST_PARAMETERS, *PNDIS_SCATTER_GATHER_LIST_PARAMETERS;
|
||
|
#define NDIS_SIZEOF_SCATTER_GATHER_LIST_PARAMETERS_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_SCATTER_GATHER_LIST_PARAMETERS, ScatterGatherListBufferSizeNeeded)
|
||
|
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisBuildScatterGatherList(
|
||
|
IN NDIS_HANDLE NdisHandle,
|
||
|
IN PNDIS_SCATTER_GATHER_LIST_PARAMETERS SGListParameters
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFreeScatterGatherList(
|
||
|
IN NDIS_HANDLE NdisHandle,
|
||
|
IN PSCATTER_GATHER_LIST ScatterGatherListBuffer,
|
||
|
IN BOOLEAN WriteToDevice
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
BOOLEAN
|
||
|
NdisSetCoalescableTimerObject(
|
||
|
__in NDIS_HANDLE TimerObject,
|
||
|
__in LARGE_INTEGER DueTime,
|
||
|
__in_opt LONG MillisecondsPeriod,
|
||
|
__in_opt PVOID FunctionContext,
|
||
|
__in_opt ULONG Tolerance
|
||
|
);
|
||
|
|
||
|
NDIS_STATUS
|
||
|
NdisGetHypervisorInfo(
|
||
|
__inout PNDIS_HYPERVISOR_INFO HypervisorInfo
|
||
|
);
|
||
|
|
||
|
#endif // #if (NDIS_SUPPORT_NDIS620)
|
||
|
|
||
|
|
||
|
#ifndef AFFINITY_MASK
|
||
|
#define AFFINITY_MASK(n) ((KAFFINITY)1 << (n))
|
||
|
#endif
|
||
|
|
||
|
#pragma warning(pop)
|
||
|
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
#pragma warning(push)
|
||
|
|
||
|
#pragma warning(disable:4201) // (nonstandard extension used : nameless struct/union)
|
||
|
#pragma warning(disable:4214) // (extension used : bit field types other than int)
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS6 || NDIS60)
|
||
|
|
||
|
//
|
||
|
// NET_BUFFER data structures, APIs and macros
|
||
|
//
|
||
|
|
||
|
typedef struct _NET_BUFFER NET_BUFFER, *PNET_BUFFER;
|
||
|
typedef struct _NET_BUFFER_LIST_CONTEXT NET_BUFFER_LIST_CONTEXT, *PNET_BUFFER_LIST_CONTEXT;
|
||
|
typedef struct _NET_BUFFER_LIST NET_BUFFER_LIST, *PNET_BUFFER_LIST;
|
||
|
|
||
|
struct _SCATTER_GATHER_LIST;
|
||
|
typedef struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST;
|
||
|
|
||
|
typedef union _NET_BUFFER_DATA_LENGTH
|
||
|
{
|
||
|
ULONG DataLength;
|
||
|
SIZE_T stDataLength;
|
||
|
} NET_BUFFER_DATA_LENGTH, *PNET_BUFFER_DATA_LENGTH;
|
||
|
|
||
|
|
||
|
typedef struct _NET_BUFFER_DATA
|
||
|
{
|
||
|
PNET_BUFFER Next;
|
||
|
PMDL CurrentMdl;
|
||
|
ULONG CurrentMdlOffset;
|
||
|
#ifdef __cplusplus
|
||
|
NET_BUFFER_DATA_LENGTH NbDataLength;
|
||
|
#else
|
||
|
NET_BUFFER_DATA_LENGTH;
|
||
|
#endif
|
||
|
PMDL MdlChain;
|
||
|
ULONG DataOffset;
|
||
|
} NET_BUFFER_DATA, *PNET_BUFFER_DATA;
|
||
|
|
||
|
typedef union _NET_BUFFER_HEADER
|
||
|
{
|
||
|
#ifdef __cplusplus
|
||
|
NET_BUFFER_DATA NetBufferData;
|
||
|
#else
|
||
|
NET_BUFFER_DATA;
|
||
|
#endif
|
||
|
SLIST_HEADER Link;
|
||
|
|
||
|
} NET_BUFFER_HEADER, *PNET_BUFFER_HEADER;
|
||
|
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
|
||
|
//
|
||
|
// NET_BUFFER_SHARED_MEMORY is used to describe the
|
||
|
// shared memory segments used in each NET_BUFFER.
|
||
|
// for NDIS 6.20, they are used in VM queue capable NICs
|
||
|
// used in virtualization environment
|
||
|
//
|
||
|
typedef struct _NET_BUFFER_SHARED_MEMORY NET_BUFFER_SHARED_MEMORY, *PNET_BUFFER_SHARED_MEMORY;
|
||
|
|
||
|
typedef struct _NET_BUFFER_SHARED_MEMORY
|
||
|
{
|
||
|
PNET_BUFFER_SHARED_MEMORY NextSharedMemorySegment;
|
||
|
ULONG SharedMemoryFlags;
|
||
|
NDIS_HANDLE SharedMemoryHandle;
|
||
|
ULONG SharedMemoryOffset;
|
||
|
ULONG SharedMemoryLength;
|
||
|
}NET_BUFFER_SHARED_MEMORY, *PNET_BUFFER_SHARED_MEMORY;
|
||
|
|
||
|
#endif // NDIS_SUPPORT_NDIS620
|
||
|
|
||
|
|
||
|
|
||
|
typedef struct _NET_BUFFER
|
||
|
{
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
NET_BUFFER_HEADER NetBufferHeader;
|
||
|
#else
|
||
|
NET_BUFFER_HEADER;
|
||
|
#endif
|
||
|
|
||
|
USHORT ChecksumBias;
|
||
|
USHORT Reserved;
|
||
|
NDIS_HANDLE NdisPoolHandle;
|
||
|
DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT)PVOID NdisReserved[2];
|
||
|
DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT)PVOID ProtocolReserved[6];
|
||
|
DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT)PVOID MiniportReserved[4];
|
||
|
NDIS_PHYSICAL_ADDRESS DataPhysicalAddress;
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
union
|
||
|
{
|
||
|
PNET_BUFFER_SHARED_MEMORY SharedMemoryInfo;
|
||
|
PSCATTER_GATHER_LIST ScatterGatherList;
|
||
|
};
|
||
|
#endif
|
||
|
}NET_BUFFER, *PNET_BUFFER;
|
||
|
|
||
|
#pragma warning(push)
|
||
|
#pragma warning(disable:4200) // nonstandard extension used : zero-sized array in struct/union
|
||
|
|
||
|
typedef struct _NET_BUFFER_LIST_CONTEXT
|
||
|
{
|
||
|
PNET_BUFFER_LIST_CONTEXT Next;
|
||
|
USHORT Size;
|
||
|
USHORT Offset;
|
||
|
DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) UCHAR ContextData[];
|
||
|
} NET_BUFFER_LIST_CONTEXT, *PNET_BUFFER_LIST_CONTEXT;
|
||
|
|
||
|
#pragma warning(pop)
|
||
|
|
||
|
typedef enum _NDIS_NET_BUFFER_LIST_INFO
|
||
|
{
|
||
|
TcpIpChecksumNetBufferListInfo,
|
||
|
TcpOffloadBytesTransferred = TcpIpChecksumNetBufferListInfo,
|
||
|
IPsecOffloadV1NetBufferListInfo,
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
IPsecOffloadV2NetBufferListInfo = IPsecOffloadV1NetBufferListInfo,
|
||
|
#endif // (NDIS_SUPPORT_NDIS61)
|
||
|
TcpLargeSendNetBufferListInfo,
|
||
|
TcpReceiveNoPush = TcpLargeSendNetBufferListInfo,
|
||
|
ClassificationHandleNetBufferListInfo,
|
||
|
Ieee8021QNetBufferListInfo,
|
||
|
NetBufferListCancelId,
|
||
|
MediaSpecificInformation,
|
||
|
NetBufferListFrameType,
|
||
|
NetBufferListProtocolId = NetBufferListFrameType,
|
||
|
NetBufferListHashValue,
|
||
|
NetBufferListHashInfo,
|
||
|
WfpNetBufferListInfo,
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
IPsecOffloadV2TunnelNetBufferListInfo,
|
||
|
IPsecOffloadV2HeaderNetBufferListInfo,
|
||
|
#endif // (NDIS_SUPPORT_NDIS61)
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
NetBufferListCorrelationId,
|
||
|
NetBufferListFilteringInfo,
|
||
|
|
||
|
|
||
|
MediaSpecificInformationEx,
|
||
|
NblOriginalInterfaceIfIndex,
|
||
|
NblReAuthWfpFlowContext = NblOriginalInterfaceIfIndex,
|
||
|
TcpReceiveBytesTransferred,
|
||
|
#endif // (NDIS_SUPPORT_NDIS620)
|
||
|
|
||
|
|
||
|
MaxNetBufferListInfo
|
||
|
} NDIS_NET_BUFFER_LIST_INFO, *PNDIS_NET_BUFFER_LIST_INFO;
|
||
|
|
||
|
typedef struct _NET_BUFFER_LIST_DATA
|
||
|
{
|
||
|
PNET_BUFFER_LIST Next; // Next NetBufferList in the chain
|
||
|
PNET_BUFFER FirstNetBuffer; // First NetBuffer on this NetBufferList
|
||
|
} NET_BUFFER_LIST_DATA, *PNET_BUFFER_LIST_DATA;
|
||
|
|
||
|
typedef union _NET_BUFFER_LIST_HEADER
|
||
|
{
|
||
|
#ifdef __cplusplus
|
||
|
NET_BUFFER_LIST_DATA NetBufferListData;
|
||
|
#else
|
||
|
NET_BUFFER_LIST_DATA;
|
||
|
#endif
|
||
|
SLIST_HEADER Link; // used in SLIST of free NetBuffers in the block
|
||
|
} NET_BUFFER_LIST_HEADER, *PNET_BUFFER_LIST_HEADER;
|
||
|
|
||
|
|
||
|
typedef struct _NET_BUFFER_LIST
|
||
|
{
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
NET_BUFFER_LIST_HEADER NetBufferListHeader;
|
||
|
#else
|
||
|
NET_BUFFER_LIST_HEADER;
|
||
|
#endif
|
||
|
|
||
|
PNET_BUFFER_LIST_CONTEXT Context;
|
||
|
PNET_BUFFER_LIST ParentNetBufferList;
|
||
|
NDIS_HANDLE NdisPoolHandle;
|
||
|
DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT)PVOID NdisReserved[2];
|
||
|
DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT)PVOID ProtocolReserved[4];
|
||
|
DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT)PVOID MiniportReserved[2];
|
||
|
PVOID Scratch;
|
||
|
NDIS_HANDLE SourceHandle;
|
||
|
ULONG NblFlags; // public flags
|
||
|
LONG ChildRefCount;
|
||
|
ULONG Flags; // private flags used by NDIs, protocols, miniport, etc.
|
||
|
NDIS_STATUS Status;
|
||
|
PVOID NetBufferListInfo[MaxNetBufferListInfo];
|
||
|
} NET_BUFFER_LIST, *PNET_BUFFER_LIST;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
#define NET_BUFFER_NEXT_NB(_NB) ((_NB)->NetBufferHeader.NetBufferData.Next)
|
||
|
#define NET_BUFFER_FIRST_MDL(_NB) ((_NB)->NetBufferHeader.NetBufferData.MdlChain)
|
||
|
#define NET_BUFFER_DATA_LENGTH(_NB) ((_NB)->NetBufferHeader.NetBufferData.NbDataLength.DataLength)
|
||
|
#define NET_BUFFER_DATA_OFFSET(_NB) ((_NB)->NetBufferHeader.NetBufferData.DataOffset)
|
||
|
#define NET_BUFFER_CURRENT_MDL(_NB) ((_NB)->NetBufferHeader.NetBufferData.CurrentMdl)
|
||
|
#define NET_BUFFER_CURRENT_MDL_OFFSET(_NB) ((_NB)->NetBufferHeader.NetBufferData.CurrentMdlOffset)
|
||
|
#else
|
||
|
#define NET_BUFFER_NEXT_NB(_NB) ((_NB)->Next)
|
||
|
#define NET_BUFFER_FIRST_MDL(_NB) ((_NB)->MdlChain)
|
||
|
#define NET_BUFFER_DATA_LENGTH(_NB) ((_NB)->DataLength)
|
||
|
#define NET_BUFFER_DATA_OFFSET(_NB) ((_NB)->DataOffset)
|
||
|
#define NET_BUFFER_CURRENT_MDL(_NB) ((_NB)->CurrentMdl)
|
||
|
#define NET_BUFFER_CURRENT_MDL_OFFSET(_NB) ((_NB)->CurrentMdlOffset)
|
||
|
#endif
|
||
|
|
||
|
#define NET_BUFFER_PROTOCOL_RESERVED(_NB) ((_NB)->ProtocolReserved)
|
||
|
#define NET_BUFFER_MINIPORT_RESERVED(_NB) ((_NB)->MiniportReserved)
|
||
|
#define NET_BUFFER_CHECKSUM_BIAS(_NB) ((_NB)->ChecksumBias)
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
#define NET_BUFFER_DATA_PHYSICAL_ADDRESS(_NB) ((_NB)->DataPhysicalAddress)
|
||
|
#endif // (NDIS_SUPPORT_NDIS61)
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
#define NET_BUFFER_FIRST_SHARED_MEM_INFO(_NB) ((_NB)->SharedMemoryInfo)
|
||
|
#define NET_BUFFER_SHARED_MEM_NEXT_SEGMENT(_SHI) ((_SHI)->NextSharedMemorySegment)
|
||
|
#define NET_BUFFER_SHARED_MEM_FLAGS(_SHI) ((_SHI)->SharedMemoryFlags)
|
||
|
#define NET_BUFFER_SHARED_MEM_HANDLE(_SHI) ((_SHI)->SharedMemoryHandle)
|
||
|
#define NET_BUFFER_SHARED_MEM_OFFSET(_SHI) ((_SHI)->SharedMemoryOffset)
|
||
|
#define NET_BUFFER_SHARED_MEM_LENGTH(_SHI) ((_SHI)->SharedMemoryLength)
|
||
|
|
||
|
#define NET_BUFFER_SCATTER_GATHER_LIST(_NB) ((_NB)->ScatterGatherList)
|
||
|
|
||
|
#endif // (NDIS_SUPPORT_NDIS620)
|
||
|
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
#define NET_BUFFER_LIST_NEXT_NBL(_NBL) ((_NBL)->NetBufferListHeader.NetBufferListData.Next)
|
||
|
#define NET_BUFFER_LIST_FIRST_NB(_NBL) ((_NBL)->NetBufferListHeader.NetBufferListData.FirstNetBuffer)
|
||
|
#else
|
||
|
#define NET_BUFFER_LIST_NEXT_NBL(_NBL) ((_NBL)->Next)
|
||
|
#define NET_BUFFER_LIST_FIRST_NB(_NBL) ((_NBL)->FirstNetBuffer)
|
||
|
#endif
|
||
|
|
||
|
#define NET_BUFFER_LIST_FLAGS(_NBL) ((_NBL)->Flags)
|
||
|
#define NET_BUFFER_LIST_NBL_FLAGS(_NBL) ((_NBL)->NblFlags)
|
||
|
#define NET_BUFFER_LIST_PROTOCOL_RESERVED(_NBL) ((_NBL)->ProtocolReserved)
|
||
|
#define NET_BUFFER_LIST_MINIPORT_RESERVED(_NBL) ((_NBL)->MiniportReserved)
|
||
|
#define NET_BUFFER_LIST_CONTEXT_DATA_START(_NBL) ((PUCHAR)(((_NBL)->Context)+1)+(_NBL)->Context->Offset)
|
||
|
#define NET_BUFFER_LIST_CONTEXT_DATA_SIZE(_NBL) (((_NBL)->Context)->Size)
|
||
|
|
||
|
#define NET_BUFFER_LIST_INFO(_NBL, _Id) ((_NBL)->NetBufferListInfo[(_Id)])
|
||
|
#define NET_BUFFER_LIST_STATUS(_NBL) ((_NBL)->Status)
|
||
|
|
||
|
|
||
|
#define NDIS_GET_NET_BUFFER_LIST_CANCEL_ID(_NBL) (NET_BUFFER_LIST_INFO(_NBL, NetBufferListCancelId))
|
||
|
#define NDIS_SET_NET_BUFFER_LIST_CANCEL_ID(_NBL, _CancelId) \
|
||
|
NET_BUFFER_LIST_INFO(_NBL, NetBufferListCancelId) = _CancelId
|
||
|
|
||
|
|
||
|
//
|
||
|
// Per-NBL information for Ieee8021QNetBufferListInfo.
|
||
|
//
|
||
|
typedef struct _NDIS_NET_BUFFER_LIST_8021Q_INFO
|
||
|
{
|
||
|
union
|
||
|
{
|
||
|
struct
|
||
|
{
|
||
|
UINT32 UserPriority:3; // 802.1p priority
|
||
|
UINT32 CanonicalFormatId:1; // always 0
|
||
|
UINT32 VlanId:12; // VLAN Identification
|
||
|
UINT32 Reserved:16; // set to 0 for ethernet
|
||
|
}TagHeader;
|
||
|
|
||
|
struct
|
||
|
{
|
||
|
UINT32 UserPriority:3; // 802.1p priority
|
||
|
UINT32 CanonicalFormatId:1; // always 0
|
||
|
UINT32 VlanId:12; // VLAN Identification
|
||
|
UINT32 WMMInfo:4;
|
||
|
UINT32 Reserved:12; // set to 0 for wireless lan
|
||
|
|
||
|
}WLanTagHeader;
|
||
|
|
||
|
PVOID Value;
|
||
|
};
|
||
|
} NDIS_NET_BUFFER_LIST_8021Q_INFO, *PNDIS_NET_BUFFER_LIST_8021Q_INFO;
|
||
|
|
||
|
typedef struct _NDIS_NET_BUFFER_LIST_MEDIA_SPECIFIC_INFO
|
||
|
{
|
||
|
union
|
||
|
{
|
||
|
PVOID MediaSpecificInfo;
|
||
|
PVOID NativeWifiSpecificInfo;
|
||
|
|
||
|
PVOID Value;
|
||
|
};
|
||
|
|
||
|
} NDIS_NET_BUFFER_LIST_MEDIA_SPECIFIC_INFO, *PNDIS_NET_BUFFER_LIST_MEDIA_SPECIFIC_INFO;
|
||
|
|
||
|
typedef struct _NDIS_NBL_MEDIA_MEDIA_SPECIFIC_INFORMATION NDIS_NBL_MEDIA_SPECIFIC_INFORMATION, *PNDIS_NBL_MEDIA_SPECIFIC_INFORMATION;
|
||
|
|
||
|
|
||
|
struct _NDIS_NBL_MEDIA_MEDIA_SPECIFIC_INFORMATION
|
||
|
{
|
||
|
PNDIS_NBL_MEDIA_SPECIFIC_INFORMATION NextEntry;
|
||
|
ULONG Tag;
|
||
|
DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) UCHAR Data[1];
|
||
|
};
|
||
|
|
||
|
#define NDIS_NBL_ADD_MEDIA_SPECIFIC_INFO(_NBL, _MediaSpecificInfo) \
|
||
|
{ \
|
||
|
PNDIS_NBL_MEDIA_SPECIFIC_INFORMATION HeadEntry = NULL; \
|
||
|
if (NET_BUFFER_LIST_INFO((_NBL), MediaSpecificInformation) != NULL) \
|
||
|
{ \
|
||
|
HeadEntry = (PNDIS_NBL_MEDIA_SPECIFIC_INFORMATION)(NET_BUFFER_LIST_INFO((_NBL), MediaSpecificInformation)); \
|
||
|
} \
|
||
|
NET_BUFFER_LIST_INFO((_NBL), MediaSpecificInformation) = (_MediaSpecificInfo); \
|
||
|
(_MediaSpecificInfo)->NextEntry = HeadEntry; \
|
||
|
}
|
||
|
|
||
|
#define NDIS_NBL_REMOVE_MEDIA_SPECIFIC_INFO(_NBL, _MediaSpecificInfo) \
|
||
|
{ \
|
||
|
PNDIS_NBL_MEDIA_SPECIFIC_INFORMATION *HeadEntry; \
|
||
|
HeadEntry = (PNDIS_NBL_MEDIA_SPECIFIC_INFORMATION *)&(NET_BUFFER_LIST_INFO((_NBL), MediaSpecificInformation)); \
|
||
|
for (; *HeadEntry != NULL; HeadEntry = &(*HeadEntry)->NextEntry) \
|
||
|
{ \
|
||
|
if ((*HeadEntry)->Tag == (_MediaSpecificInfo)->Tag) \
|
||
|
{ \
|
||
|
*HeadEntry = (*HeadEntry)->NextEntry; \
|
||
|
break; \
|
||
|
} \
|
||
|
} \
|
||
|
}
|
||
|
|
||
|
#define NDIS_NBL_GET_MEDIA_SPECIFIC_INFO(_NBL, _Tag, _MediaSpecificInfo) \
|
||
|
{ \
|
||
|
PNDIS_NBL_MEDIA_SPECIFIC_INFORMATION HeadEntry; \
|
||
|
(_MediaSpecificInfo) = NULL; \
|
||
|
HeadEntry = (PNDIS_NBL_MEDIA_SPECIFIC_INFORMATION)(NET_BUFFER_LIST_INFO((_NBL), MediaSpecificInformation)); \
|
||
|
for (; HeadEntry != NULL; HeadEntry = HeadEntry->NextEntry) \
|
||
|
{ \
|
||
|
if (HeadEntry->Tag == (_Tag)) \
|
||
|
{ \
|
||
|
(_MediaSpecificInfo) = HeadEntry; \
|
||
|
break; \
|
||
|
} \
|
||
|
} \
|
||
|
}
|
||
|
|
||
|
#if NDIS_SUPPORT_NDIS620
|
||
|
|
||
|
typedef struct _NDIS_NBL_MEDIA_SPECIFIC_INFORMATION_EX
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
struct _NDIS_NBL_MEDIA_SPECIFIC_INFORMATION_EX* NextEntry;
|
||
|
ULONG Tag;
|
||
|
PVOID Data;
|
||
|
} NDIS_NBL_MEDIA_SPECIFIC_INFORMATION_EX, *PNDIS_NBL_MEDIA_SPECIFIC_INFORMATION_EX;
|
||
|
|
||
|
#define NDIS_NBL_MEDIA_SPECIFIC_INFO_REVISION_1 1
|
||
|
|
||
|
#define NDIS_SIZEOF_NBL_MEDIA_SPECIFIC_INFO_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_NBL_MEDIA_SPECIFIC_INFORMATION_EX,Data)
|
||
|
|
||
|
#define NDIS_NBL_ADD_MEDIA_SPECIFIC_INFO_EX(_NBL, _MediaSpecificInfo) \
|
||
|
{ \
|
||
|
PNDIS_NBL_MEDIA_SPECIFIC_INFORMATION_EX HeadEntry; \
|
||
|
\
|
||
|
HeadEntry = NET_BUFFER_LIST_INFO(_NBL, MediaSpecificInformationEx); \
|
||
|
NET_BUFFER_LIST_INFO((_NBL), MediaSpecificInformationEx) = (_MediaSpecificInfo); \
|
||
|
(_MediaSpecificInfo)->NextEntry = HeadEntry; \
|
||
|
}
|
||
|
|
||
|
#define NDIS_NBL_REMOVE_MEDIA_SPECIFIC_INFO_EX(_NBL, _MediaSpecificInfo) \
|
||
|
{ \
|
||
|
PNDIS_NBL_MEDIA_SPECIFIC_INFORMATION_EX *HeadEntry; \
|
||
|
HeadEntry = (PNDIS_NBL_MEDIA_SPECIFIC_INFORMATION_EX *)&(NET_BUFFER_LIST_INFO((_NBL), MediaSpecificInformationEx)); \
|
||
|
for (; *HeadEntry != NULL; HeadEntry = &(*HeadEntry)->NextEntry) \
|
||
|
{ \
|
||
|
if ((*HeadEntry)->Tag == (_MediaSpecificInfo)->Tag) \
|
||
|
{ \
|
||
|
*HeadEntry = (*HeadEntry)->NextEntry; \
|
||
|
break; \
|
||
|
} \
|
||
|
} \
|
||
|
}
|
||
|
|
||
|
#define NDIS_NBL_GET_MEDIA_SPECIFIC_INFO_EX(_NBL, _Tag, _MediaSpecificInfo) \
|
||
|
{ \
|
||
|
PNDIS_NBL_MEDIA_SPECIFIC_INFORMATION_EX HeadEntry; \
|
||
|
(_MediaSpecificInfo) = NULL; \
|
||
|
HeadEntry = (PNDIS_NBL_MEDIA_SPECIFIC_INFORMATION_EX)(NET_BUFFER_LIST_INFO((_NBL), MediaSpecificInformationEx)); \
|
||
|
for (; HeadEntry != NULL; HeadEntry = HeadEntry->NextEntry) \
|
||
|
{ \
|
||
|
if (HeadEntry->Tag == (_Tag)) \
|
||
|
{ \
|
||
|
(_MediaSpecificInfo) = HeadEntry; \
|
||
|
break; \
|
||
|
} \
|
||
|
} \
|
||
|
}
|
||
|
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*
|
||
|
Bit 31 - 0 for MS tag
|
||
|
1 for Vendor tag
|
||
|
Bits 30-16 - Vendor ID (if Bit 31 = 1)
|
||
|
- Technology ID (if Bit 31 = 0)
|
||
|
Bits 15-0 - Tag ID
|
||
|
|
||
|
*/
|
||
|
|
||
|
//
|
||
|
// Microsoft Media Specific-Info tags
|
||
|
//
|
||
|
//TUNNEL - Technology ID : 1
|
||
|
#define NDIS_MEDIA_SPECIFIC_INFO_TUNDL 0x00010001
|
||
|
//
|
||
|
// Intel Media Specific Info tags
|
||
|
//
|
||
|
#define NDIS_MEDIA_SPECIFIC_INFO_FCOE 0x80010000
|
||
|
#define NDIS_MEDIA_SPECIFIC_INFO_EAPOL 0x80010001
|
||
|
#define NDIS_MEDIA_SPECIFIC_INFO_LLDP 0x80010002
|
||
|
#define NDIS_MEDIA_SPECIFIC_INFO_TIMESYNC 0x80010003
|
||
|
|
||
|
|
||
|
#ifndef NDIS_HASH_FUNCTION_MASK
|
||
|
#define NDIS_HASH_FUNCTION_MASK 0x000000FF
|
||
|
#define NDIS_HASH_TYPE_MASK 0x00FFFF00
|
||
|
#endif
|
||
|
|
||
|
//
|
||
|
// The following macros are used by miniport driver and protocol driver to set and get
|
||
|
// the hash value, hash type and hash function.
|
||
|
//
|
||
|
VOID
|
||
|
FORCEINLINE
|
||
|
NET_BUFFER_LIST_SET_HASH_TYPE(
|
||
|
__in PNET_BUFFER_LIST _NBL,
|
||
|
__in volatile ULONG _HashType
|
||
|
)
|
||
|
{
|
||
|
(NET_BUFFER_LIST_INFO(_NBL, NetBufferListHashInfo) =
|
||
|
UlongToPtr(((PtrToUlong (NET_BUFFER_LIST_INFO(_NBL, NetBufferListHashInfo)) & (~NDIS_HASH_TYPE_MASK)) | ((_HashType) & (NDIS_HASH_TYPE_MASK)))));
|
||
|
}
|
||
|
|
||
|
VOID
|
||
|
FORCEINLINE
|
||
|
NET_BUFFER_LIST_SET_HASH_FUNCTION(
|
||
|
__in PNET_BUFFER_LIST _NBL,
|
||
|
__in volatile ULONG _HashFunction
|
||
|
)
|
||
|
{
|
||
|
(NET_BUFFER_LIST_INFO(_NBL, NetBufferListHashInfo) =
|
||
|
UlongToPtr(((PtrToUlong(NET_BUFFER_LIST_INFO(_NBL, NetBufferListHashInfo)) & (~NDIS_HASH_FUNCTION_MASK)) | ((_HashFunction) & (NDIS_HASH_FUNCTION_MASK)))));
|
||
|
}
|
||
|
|
||
|
#define NET_BUFFER_LIST_SET_HASH_VALUE(_NBL, _HashValue) \
|
||
|
(NET_BUFFER_LIST_INFO(_NBL, NetBufferListHashValue) = UlongToPtr(_HashValue))
|
||
|
|
||
|
#define NET_BUFFER_LIST_GET_HASH_TYPE(_NBL) \
|
||
|
(PtrToUlong(NET_BUFFER_LIST_INFO(_NBL, NetBufferListHashInfo)) & (NDIS_HASH_TYPE_MASK))
|
||
|
|
||
|
#define NET_BUFFER_LIST_GET_HASH_FUNCTION(_NBL) \
|
||
|
(PtrToUlong(NET_BUFFER_LIST_INFO(_NBL, NetBufferListHashInfo)) & (NDIS_HASH_FUNCTION_MASK))
|
||
|
|
||
|
#define NET_BUFFER_LIST_GET_HASH_VALUE(_NBL) \
|
||
|
(PtrToUlong(NET_BUFFER_LIST_INFO(_NBL, NetBufferListHashValue)))
|
||
|
|
||
|
#define NdisSetNetBufferListProtocolId(_NBL,_ProtocolId) \
|
||
|
*((PUCHAR)(&NET_BUFFER_LIST_INFO(_NBL, NetBufferListProtocolId))) = _ProtocolId
|
||
|
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
|
||
|
//
|
||
|
// Per-NBL information for NetBufferListFilteringInfo.
|
||
|
//
|
||
|
typedef struct _NDIS_NET_BUFFER_LIST_FILTERING_INFO
|
||
|
{
|
||
|
union
|
||
|
{
|
||
|
struct
|
||
|
{
|
||
|
USHORT FilterId;
|
||
|
USHORT QueueId;
|
||
|
} FilteringInfo;
|
||
|
PVOID Value;
|
||
|
};
|
||
|
} NDIS_NET_BUFFER_LIST_FILTERING_INFO, *PNDIS_NET_BUFFER_LIST_FILTERING_INFO;
|
||
|
|
||
|
#define NET_BUFFER_LIST_RECEIVE_FILTER_ID(_NBL) \
|
||
|
(((PNDIS_NET_BUFFER_LIST_FILTERING_INFO)&NET_BUFFER_LIST_INFO(_NBL, NetBufferListFilteringInfo))->FilteringInfo.FilterId)
|
||
|
|
||
|
#define NET_BUFFER_LIST_RECEIVE_QUEUE_ID(_NBL) \
|
||
|
(((PNDIS_NET_BUFFER_LIST_FILTERING_INFO)&NET_BUFFER_LIST_INFO(_NBL, NetBufferListFilteringInfo))->FilteringInfo.QueueId)
|
||
|
|
||
|
|
||
|
|
||
|
#endif // (NDIS_SUPPORT_NDIS620)
|
||
|
|
||
|
|
||
|
#define NdisQueryMdl(_Mdl, _VirtualAddress, _Length, _Priority) \
|
||
|
{ \
|
||
|
if (ARGUMENT_PRESENT(_VirtualAddress)) \
|
||
|
{ \
|
||
|
*(PVOID *)(_VirtualAddress) = MmGetSystemAddressForMdlSafe(_Mdl, _Priority); \
|
||
|
} \
|
||
|
*(_Length) = MmGetMdlByteCount(_Mdl); \
|
||
|
}
|
||
|
|
||
|
#define NdisQueryMdlOffset(_Mdl, _Offset, _Length) \
|
||
|
{ \
|
||
|
*(_Offset) = MmGetMdlByteOffset(_Mdl); \
|
||
|
*(_Length) = MmGetMdlByteCount(_Mdl); \
|
||
|
}
|
||
|
|
||
|
#define NDIS_MDL_TO_SPAN_PAGES(_Mdl) \
|
||
|
(MmGetMdlByteCount(_Mdl)==0 ? \
|
||
|
1 : \
|
||
|
(ADDRESS_AND_SIZE_TO_SPAN_PAGES( \
|
||
|
MmGetMdlVirtualAddress(_Mdl), \
|
||
|
MmGetMdlByteCount(_Mdl))))
|
||
|
|
||
|
#define NdisGetMdlPhysicalArraySize(_Mdl, _ArraySize) \
|
||
|
(*(_ArraySize) = NDIS_MDL_TO_SPAN_PAGES(_Mdl))
|
||
|
|
||
|
|
||
|
#define NDIS_MDL_LINKAGE(_Mdl) ((_Mdl)->Next)
|
||
|
|
||
|
#define NdisGetNextMdl(_CurrentMdl, _NextMdl) \
|
||
|
{ \
|
||
|
*(_NextMdl) = (_CurrentMdl)->Next; \
|
||
|
}
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
UCHAR
|
||
|
NdisGetNetBufferListProtocolId(
|
||
|
__in PNET_BUFFER_LIST NetBufferList
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
NdisAdjustNetBufferCurrentMdl(
|
||
|
__in PNET_BUFFER NetBuffer
|
||
|
);
|
||
|
|
||
|
|
||
|
//
|
||
|
// The flags that can be set at NET_BUFFER_LIST.Flags are defined below.
|
||
|
//
|
||
|
#define NBL_FLAGS_PROTOCOL_RESERVED 0xFFF00000
|
||
|
#define NBL_FLAGS_MINIPORT_RESERVED 0x0000F000
|
||
|
#define NBL_FLAGS_SCRATCH 0x000F0000
|
||
|
#define NBL_FLAGS_NDIS_RESERVED 0x00000FFF
|
||
|
|
||
|
|
||
|
#define NBL_TEST_FLAG(_NBL, _F) (((_NBL)->Flags & (_F)) != 0)
|
||
|
#define NBL_SET_FLAG(_NBL, _F) ((_NBL)->Flags |= (_F))
|
||
|
#define NBL_CLEAR_FLAG(_NBL, _F) ((_NBL)->Flags &= ~(_F))
|
||
|
|
||
|
#define NBL_SET_PROTOCOL_RSVD_FLAG(_NBL, _F) ((_NBL)->Flags |= ((_F) & NBL_FLAGS_PROTOCOL_RESERVED))
|
||
|
#define NBL_CLEAR_PROTOCOL_RSVD_FLAG(_NBL, _F) ((_NBL)->Flags &= ~((_F) & NBL_FLAGS_PROTOCOL_RESERVED))
|
||
|
#define NBL_TEST_PROTOCOL_RSVD_FLAG(_NBL, _F) (((_NBL)->Flags & ((_F) & NBL_FLAGS_PROTOCOL_RESERVED)) != 0)
|
||
|
|
||
|
|
||
|
//
|
||
|
// Define some flags for protocols' own use
|
||
|
//
|
||
|
#define NBL_PROT_RSVD_FLAGS NBL_FLAGS_PROTOCOL_RESERVED
|
||
|
#define NBL_SET_PROT_RSVD_FLAG(_NBL, _F) NBL_SET_PROTOCOL_RSVD_FLAG(_NBL,_F)
|
||
|
#define NBL_CLEAR_PROT_RSVD_FLAG(_NBL, _F) NBL_CLEAR_PROTOCOL_RSVD_FLAG(_NBL, _F)
|
||
|
#define NBL_TEST_PROT_RSVD_FLAG(_NBL, _F) NBL_TEST_PROTOCOL_RSVD_FLAG(_NBL, _F)
|
||
|
|
||
|
|
||
|
//
|
||
|
// Flags used in NBL->NblFlags
|
||
|
// 0x01 to 0xFF are reserved for use by NDIS
|
||
|
//
|
||
|
#define NDIS_NBL_FLAGS_SEND_READ_ONLY 0x00000001
|
||
|
#define NDIS_NBL_FLAGS_RECV_READ_ONLY 0x00000002
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
#define NDIS_NBL_FLAGS_HD_SPLIT 0x00000100 // Data and header are split
|
||
|
#define NDIS_NBL_FLAGS_IS_IPV4 0x00000200 // Packet is an IPv4 packet
|
||
|
#define NDIS_NBL_FLAGS_IS_IPV6 0x00000400 // Packet is an IPv6 packet
|
||
|
#define NDIS_NBL_FLAGS_IS_TCP 0x00000800 // Packet is a TCP packet
|
||
|
#define NDIS_NBL_FLAGS_IS_UDP 0x00001000 // Packet is a UDP packet
|
||
|
#define NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER 0x00002000 // Packet is split at the beginning of upper layer protocol header
|
||
|
#define NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD 0x00004000 // Packet is split at the beginning of upper layer protocol data (TCP or UDP)
|
||
|
#endif // (NDIS_SUPPORT_NDIS61)
|
||
|
|
||
|
#define NDIS_NBL_FLAGS_IS_LOOPBACK_PACKET 0x00008000 // The NBL is loopback NBL.
|
||
|
|
||
|
#define NdisTestNblFlag(_NBL, _F) (((_NBL)->NblFlags & (_F)) != 0)
|
||
|
#define NdisTestNblFlags(_NBL, _F) (((_NBL)->NblFlags & (_F)) == (_F))
|
||
|
#define NdisSetNblFlag(_NBL, _F) ((_NBL)->NblFlags |= (_F))
|
||
|
#define NdisClearNblFlag(_NBL, _F) ((_NBL)->NblFlags &= ~(_F))
|
||
|
|
||
|
|
||
|
|
||
|
#define NET_BUFFER_LIST_POOL_PARAMETERS_REVISION_1 1
|
||
|
|
||
|
typedef struct _NET_BUFFER_LIST_POOL_PARAMETERS
|
||
|
{
|
||
|
//
|
||
|
// Set ObjectHeader.Type to NDIS_OBJECT_TYPE_DEFAULT
|
||
|
//
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
UCHAR ProtocolId;
|
||
|
BOOLEAN fAllocateNetBuffer;
|
||
|
USHORT ContextSize;
|
||
|
ULONG PoolTag;
|
||
|
ULONG DataSize;
|
||
|
}NET_BUFFER_LIST_POOL_PARAMETERS, *PNET_BUFFER_LIST_POOL_PARAMETERS;
|
||
|
|
||
|
#define NDIS_SIZEOF_NET_BUFFER_LIST_POOL_PARAMETERS_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NET_BUFFER_LIST_POOL_PARAMETERS, DataSize)
|
||
|
|
||
|
#define NET_BUFFER_POOL_PARAMETERS_REVISION_1 1
|
||
|
|
||
|
typedef struct _NET_BUFFER_POOL_PARAMETERS
|
||
|
{
|
||
|
//
|
||
|
// Set ObjectHeader.Type to NDIS_OBJECT_TYPE_DEFAULT
|
||
|
//
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
ULONG PoolTag;
|
||
|
ULONG DataSize;
|
||
|
}NET_BUFFER_POOL_PARAMETERS,*PNET_BUFFER_POOL_PARAMETERS;
|
||
|
|
||
|
#define NDIS_SIZEOF_NET_BUFFER_POOL_PARAMETERS_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NET_BUFFER_POOL_PARAMETERS, DataSize);
|
||
|
|
||
|
//
|
||
|
// Prototypes of the MDL allocation and free callback.
|
||
|
//
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
PMDL
|
||
|
(*NET_BUFFER_ALLOCATE_MDL_HANDLER)(
|
||
|
__inout PULONG BufferSize
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(*NET_BUFFER_FREE_MDL_HANDLER)(
|
||
|
__in PMDL Mdl
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_ret(__drv_allocatesMem(mem))
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_HANDLE
|
||
|
NdisAllocateNetBufferPool(
|
||
|
__in_opt NDIS_HANDLE NdisHandle,
|
||
|
__in PNET_BUFFER_POOL_PARAMETERS Parameters
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFreeNetBufferPool(
|
||
|
__in __drv_freesMem(mem) NDIS_HANDLE PoolHandle
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_ret(__drv_allocatesMem(mem))
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
PNET_BUFFER
|
||
|
NdisAllocateNetBuffer(
|
||
|
__in NDIS_HANDLE PoolHandle,
|
||
|
__in_opt PMDL MdlChain,
|
||
|
__in ULONG DataOffset,
|
||
|
__in SIZE_T DataLength
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFreeNetBuffer(
|
||
|
__in __drv_freesMem(mem) PNET_BUFFER NetBuffer
|
||
|
);
|
||
|
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_ret(__drv_allocatesMem(mem))
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
PNET_BUFFER
|
||
|
NdisAllocateNetBufferMdlAndData(
|
||
|
__in NDIS_HANDLE PoolHandle
|
||
|
);
|
||
|
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_ret(__drv_allocatesMem(mem))
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_HANDLE
|
||
|
NdisAllocateNetBufferListPool(
|
||
|
__in_opt NDIS_HANDLE NdisHandle,
|
||
|
__in PNET_BUFFER_LIST_POOL_PARAMETERS Parameters
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFreeNetBufferListPool(
|
||
|
__in __drv_freesMem(mem) NDIS_HANDLE PoolHandle
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_ret(__drv_allocatesMem(mem))
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
PNET_BUFFER_LIST
|
||
|
NdisAllocateNetBufferList(
|
||
|
__in NDIS_HANDLE PoolHandle,
|
||
|
__in USHORT ContextSize,
|
||
|
__in USHORT ContextBackFill
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFreeNetBufferList(
|
||
|
__in __drv_freesMem(mem) PNET_BUFFER_LIST NetBufferList
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisRetreatNetBufferDataStart(
|
||
|
__in PNET_BUFFER NetBuffer,
|
||
|
__in ULONG DataOffsetDelta,
|
||
|
__in ULONG DataBackFill,
|
||
|
__in_opt NET_BUFFER_ALLOCATE_MDL_HANDLER AllocateMdlHandler
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisAdvanceNetBufferDataStart(
|
||
|
__in PNET_BUFFER NetBuffer,
|
||
|
__in ULONG DataOffsetDelta,
|
||
|
__in BOOLEAN FreeMdl,
|
||
|
__in_opt NET_BUFFER_FREE_MDL_HANDLER FreeMdlHandler
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisRetreatNetBufferListDataStart(
|
||
|
__in PNET_BUFFER_LIST NetBufferList,
|
||
|
__in ULONG DataOffsetDelta,
|
||
|
__in ULONG DataBackFill,
|
||
|
__in_opt NET_BUFFER_ALLOCATE_MDL_HANDLER AllocateMdlHandler,
|
||
|
__in_opt NET_BUFFER_FREE_MDL_HANDLER FreeMdlHandler
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisAdvanceNetBufferListDataStart(
|
||
|
__in PNET_BUFFER_LIST NetBufferList,
|
||
|
__in ULONG DataOffsetDelta,
|
||
|
__in BOOLEAN FreeMdl,
|
||
|
__in_opt NET_BUFFER_FREE_MDL_HANDLER FreeMdlMdlHandler
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
__drv_when(return==0,__drv_at(NetBufferList->Context, __drv_allocatesMem(mem)))
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisAllocateNetBufferListContext(
|
||
|
__in PNET_BUFFER_LIST NetBufferList,
|
||
|
__in USHORT ContextSize,
|
||
|
__in USHORT ContextBackFill,
|
||
|
__in ULONG PoolTag
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
__drv_at(NetBufferList->Context, __drv_freesMem(mem))
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFreeNetBufferListContext(
|
||
|
__in PNET_BUFFER_LIST NetBufferList,
|
||
|
__in USHORT ContextSize
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_ret(__drv_allocatesMem(mem))
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
PNET_BUFFER_LIST
|
||
|
NdisAllocateCloneNetBufferList(
|
||
|
__in PNET_BUFFER_LIST OriginalNetBufferList,
|
||
|
__in_opt NDIS_HANDLE NetBufferListPoolHandle,
|
||
|
__in_opt NDIS_HANDLE NetBufferPoolHandle,
|
||
|
__in ULONG AllocateCloneFlags
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFreeCloneNetBufferList(
|
||
|
__in __drv_freesMem(mem) PNET_BUFFER_LIST CloneNetBufferList,
|
||
|
__in ULONG FreeCloneFlags
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_ret(__drv_allocatesMem(mem))
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
PNET_BUFFER_LIST
|
||
|
NdisAllocateFragmentNetBufferList(
|
||
|
__in PNET_BUFFER_LIST OriginalNetBufferList,
|
||
|
__in_opt NDIS_HANDLE NetBufferListPool,
|
||
|
__in_opt NDIS_HANDLE NetBufferPool,
|
||
|
__in ULONG StartOffset,
|
||
|
__in ULONG MaximumLength,
|
||
|
__in ULONG DataOffsetDelta,
|
||
|
__in ULONG DataBackFill,
|
||
|
__in ULONG AllocateFragmentFlags
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFreeFragmentNetBufferList(
|
||
|
__in __drv_freesMem(mem) PNET_BUFFER_LIST FragmentNetBufferList,
|
||
|
__in ULONG DataOffsetDelta,
|
||
|
__in ULONG FreeFragmentFlags
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_ret(__drv_allocatesMem(mem))
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
PNET_BUFFER_LIST
|
||
|
NdisAllocateReassembledNetBufferList(
|
||
|
__in PNET_BUFFER_LIST FagmentNetBufferList,
|
||
|
__in_opt NDIS_HANDLE NetBufferAndNetBufferListPoolHandle,
|
||
|
__in ULONG StartOffset,
|
||
|
__in ULONG DataOffsetDelta,
|
||
|
__in ULONG DataBackFill,
|
||
|
__in ULONG AllocateReassembleFlags
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFreeReassembledNetBufferList(
|
||
|
__in __drv_freesMem(mem) PNET_BUFFER_LIST ReassembledNetBufferList,
|
||
|
__in ULONG DataOffsetDelta,
|
||
|
__in ULONG FreeReassembleFlags
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_ret(__drv_allocatesMem(mem))
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
PNET_BUFFER_LIST
|
||
|
NdisAllocateNetBufferAndNetBufferList(
|
||
|
__in NDIS_HANDLE PoolHandle,
|
||
|
__in USHORT ContextSize,
|
||
|
__in USHORT ContextBackFill,
|
||
|
__in_opt __drv_aliasesMem PMDL MdlChain,
|
||
|
__in ULONG DataOffset,
|
||
|
__in SIZE_T DataLength
|
||
|
);
|
||
|
|
||
|
__allocator
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
PVOID
|
||
|
NdisGetDataBuffer(
|
||
|
__in PNET_BUFFER NetBuffer,
|
||
|
__in ULONG BytesNeeded,
|
||
|
__in_opt PVOID Storage,
|
||
|
__in UINT AlignMultiple,
|
||
|
__in UINT AlignOffset
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_HANDLE
|
||
|
NdisGetPoolFromNetBufferList(
|
||
|
__in PNET_BUFFER_LIST NetBufferList
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_HANDLE
|
||
|
NdisGetPoolFromNetBuffer(
|
||
|
__in PNET_BUFFER NetBuffer
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisCopyFromNetBufferToNetBuffer(
|
||
|
__in PNET_BUFFER Destination,
|
||
|
__in ULONG DestinationOffset,
|
||
|
__in ULONG BytesToCopy,
|
||
|
__in PNET_BUFFER Source,
|
||
|
__in ULONG SourceOffset,
|
||
|
__out PULONG BytesCopied
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCopySendNetBufferListInfo(
|
||
|
__in PNET_BUFFER_LIST DestNetBufferList,
|
||
|
__in PNET_BUFFER_LIST SrcNetBufferList
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCopyReceiveNetBufferListInfo(
|
||
|
__in PNET_BUFFER_LIST DestNetBufferList,
|
||
|
__in PNET_BUFFER_LIST SrcNetBufferList
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
ULONG
|
||
|
NdisQueryNetBufferPhysicalCount(
|
||
|
__in PNET_BUFFER NetBuffer
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_ret(__drv_allocatesMem(mem))
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
PMDL
|
||
|
NdisAllocateMdl(
|
||
|
__in NDIS_HANDLE NdisHandle,
|
||
|
__in_bcount(Length)
|
||
|
PVOID VirtualAddress,
|
||
|
__in UINT Length
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFreeMdl(
|
||
|
__in __drv_freesMem(mem) PMDL Mdl
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// The following flags are used in the Send APIs such as Ndis(F)SendNetBufferLists
|
||
|
// and MINIPORT_SEND_NET_BUFFER_LISTS_HANDLER
|
||
|
//
|
||
|
#define NDIS_SEND_FLAGS_DISPATCH_LEVEL 0x00000001
|
||
|
#define NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK 0x00000002
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
#define NDIS_SEND_FLAGS_SINGLE_QUEUE 0x00000004
|
||
|
#endif
|
||
|
|
||
|
#define NDIS_TEST_SEND_FLAG(_Flags, _Fl) (((_Flags) & (_Fl)) == (_Fl))
|
||
|
#define NDIS_SET_SEND_FLAG(_Flags, _Fl) ((_Flags) |= (_Fl))
|
||
|
|
||
|
#define NDIS_TEST_SEND_AT_DISPATCH_LEVEL(_Flags) \
|
||
|
NDIS_TEST_SEND_FLAG((_Flags), NDIS_SEND_FLAGS_DISPATCH_LEVEL)
|
||
|
|
||
|
//
|
||
|
// The following flags are used in the SendComplete APIs such as
|
||
|
// NdisMSendNetBufferListsComplete
|
||
|
//
|
||
|
#define NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL 0x00000001
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
#define NDIS_SEND_COMPLETE_FLAGS_SINGLE_QUEUE 0x00000002
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#define NDIS_TEST_SEND_COMPLETE_FLAG(_Flags, _Fl) (((_Flags) & (_Fl)) == (_Fl))
|
||
|
#define NDIS_SET_SEND_COMPLETE_FLAG(_Flags, _Fl) ((_Flags) |= (_Fl))
|
||
|
|
||
|
#define NDIS_TEST_SEND_COMPLETE_AT_DISPATCH_LEVEL(_Flags) \
|
||
|
NDIS_TEST_SEND_COMPLETE_FLAG((_Flags), NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL)
|
||
|
|
||
|
//
|
||
|
// The following flags are used in the IndicateReceive APIs such
|
||
|
// as NdisMIndicateReceiveNetBufferLists and RECEIVE_NET_BUFFER_LISTS_HANDLER
|
||
|
//
|
||
|
#define NDIS_RECEIVE_FLAGS_DISPATCH_LEVEL 0x00000001
|
||
|
#define NDIS_RECEIVE_FLAGS_RESOURCES 0x00000002
|
||
|
#define NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE 0x00000100
|
||
|
#define NDIS_RECEIVE_FLAGS_SINGLE_VLAN 0x00000200
|
||
|
#define NDIS_RECEIVE_FLAGS_PERFECT_FILTERED 0x00000400
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
#define NDIS_RECEIVE_FLAGS_SINGLE_QUEUE 0x00000800
|
||
|
#define NDIS_RECEIVE_FLAGS_SHARED_MEMORY_INFO_VALID 0x00001000
|
||
|
#define NDIS_RECEIVE_FLAGS_MORE_NBLS 0x00002000
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#define NDIS_TEST_RECEIVE_FLAG(_Flags, _Fl) (((_Flags) & (_Fl)) == (_Fl))
|
||
|
#define NDIS_SET_RECEIVE_FLAG(_Flags, _Fl) ((_Flags) |= (_Fl))
|
||
|
|
||
|
#define NDIS_TEST_RECEIVE_AT_DISPATCH_LEVEL(_Flags) \
|
||
|
NDIS_TEST_RECEIVE_FLAG((_Flags), NDIS_RECEIVE_FLAGS_DISPATCH_LEVEL)
|
||
|
|
||
|
#define NDIS_TEST_RECEIVE_CANNOT_PEND(_Flags) \
|
||
|
NDIS_TEST_RECEIVE_FLAG((_Flags), NDIS_RECEIVE_FLAGS_RESOURCES)
|
||
|
|
||
|
#define NDIS_TEST_RECEIVE_CAN_PEND(_Flags) \
|
||
|
(((_Flags) & NDIS_RECEIVE_FLAGS_RESOURCES) == 0)
|
||
|
//
|
||
|
// The following flags are used in the ReturnNetBufferLists APIs such
|
||
|
// as NdisReturnNetBufferLists and MINIPORT_RETURN_NET_BUFFER_LISTS
|
||
|
//
|
||
|
#define NDIS_RETURN_FLAGS_DISPATCH_LEVEL 0x00000001
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
#define NDIS_RETURN_FLAGS_SINGLE_QUEUE 0x00000002
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#define NDIS_TEST_RETURN_FLAG(_Flags, _Fl) (((_Flags) & (_Fl)) == (_Fl))
|
||
|
#define NDIS_SET_RETURN_FLAG(_Flags, _Fl) ((_Flags) |= (_Fl))
|
||
|
|
||
|
#define NDIS_TEST_RETURN_AT_DISPATCH_LEVEL(_Flags) \
|
||
|
NDIS_TEST_RETURN_FLAG((_Flags),NDIS_RETURN_FLAGS_DISPATCH_LEVEL)
|
||
|
|
||
|
|
||
|
//
|
||
|
// The following flags are used in the NdisAllocateCloneNetBufferList
|
||
|
// and NdisFreeCloneNetBufferList
|
||
|
//
|
||
|
|
||
|
#define NDIS_CLONE_FLAGS_RESERVED 0x00000001
|
||
|
#define NDIS_CLONE_FLAGS_USE_ORIGINAL_MDLS 0x00000002
|
||
|
|
||
|
#define NDIS_TEST_CLONE_FLAG(_Flags, _Fl) (((_Flags) & (_Fl)) == (_Fl))
|
||
|
#define NDIS_SET_CLONE_FLAG(_Flags, _Fl) ((_Flags) |= (_Fl))
|
||
|
#define NDIS_CLEAR_CLONE_FLAG(_Flags, _Fl) ((_Flags) &= ~(_Fl))
|
||
|
|
||
|
|
||
|
#endif // (NDIS_SUPPORT_NDIS6 || NDIS60)
|
||
|
|
||
|
#pragma warning(pop)
|
||
|
|
||
|
|
||
|
#pragma once
|
||
|
#pragma warning(push)
|
||
|
|
||
|
#pragma warning(disable:4201) // (nonstandard extension used : nameless struct/union)
|
||
|
#pragma warning(disable:4214) // (extension used : bit field types other than int)
|
||
|
|
||
|
#define NDIS_TASK_OFFLOAD_VERSION 1
|
||
|
|
||
|
#define MAX_HASHES 4
|
||
|
#define TRUNCATED_HASH_LEN 12
|
||
|
|
||
|
#define CRYPTO_SUCCESS 0
|
||
|
#define CRYPTO_GENERIC_ERROR 1
|
||
|
#define CRYPTO_TRANSPORT_AH_AUTH_FAILED 2
|
||
|
#define CRYPTO_TRANSPORT_ESP_AUTH_FAILED 3
|
||
|
#define CRYPTO_TUNNEL_AH_AUTH_FAILED 4
|
||
|
#define CRYPTO_TUNNEL_ESP_AUTH_FAILED 5
|
||
|
#define CRYPTO_INVALID_PACKET_SYNTAX 6
|
||
|
#define CRYPTO_INVALID_PROTOCOL 7
|
||
|
|
||
|
#if NDIS_LEGACY_DRIVER
|
||
|
typedef struct _NDIS_IPSEC_PACKET_INFO
|
||
|
{
|
||
|
union
|
||
|
{
|
||
|
struct
|
||
|
{
|
||
|
NDIS_HANDLE OffloadHandle;
|
||
|
NDIS_HANDLE NextOffloadHandle;
|
||
|
|
||
|
} Transmit;
|
||
|
|
||
|
struct
|
||
|
{
|
||
|
ULONG SA_DELETE_REQ:1;
|
||
|
ULONG CRYPTO_DONE:1;
|
||
|
ULONG NEXT_CRYPTO_DONE:1;
|
||
|
ULONG CryptoStatus;
|
||
|
} Receive;
|
||
|
};
|
||
|
} NDIS_IPSEC_PACKET_INFO, *PNDIS_IPSEC_PACKET_INFO;
|
||
|
#endif // NDIS_LEGACY_DRIVER
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS6 || NDIS60)
|
||
|
typedef struct _NDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO
|
||
|
{
|
||
|
union
|
||
|
{
|
||
|
struct
|
||
|
{
|
||
|
NDIS_HANDLE OffloadHandle;
|
||
|
|
||
|
} Transmit;
|
||
|
|
||
|
struct
|
||
|
{
|
||
|
USHORT SaDeleteReq:1;
|
||
|
USHORT CryptoDone:1;
|
||
|
USHORT NextCryptoDone:1;
|
||
|
USHORT Pad:13;
|
||
|
USHORT CryptoStatus;
|
||
|
} Receive;
|
||
|
};
|
||
|
} NDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO, *PNDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO;
|
||
|
#endif // (NDIS_SUPPORT_NDIS6 || NDIS60)
|
||
|
|
||
|
#if NDIS_LEGACY_DRIVER
|
||
|
//
|
||
|
// The following defines are used in the Task field above to define
|
||
|
// the type of task offloading necessary.
|
||
|
//
|
||
|
typedef enum _NDIS_TASK
|
||
|
{
|
||
|
TcpIpChecksumNdisTask,
|
||
|
IpSecNdisTask,
|
||
|
TcpLargeSendNdisTask,
|
||
|
MaxNdisTask
|
||
|
} NDIS_TASK, *PNDIS_TASK;
|
||
|
|
||
|
|
||
|
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;
|
||
|
|
||
|
//
|
||
|
// Encapsulation header format
|
||
|
//
|
||
|
typedef struct _NDIS_ENCAPSULATION_FORMAT
|
||
|
{
|
||
|
NDIS_ENCAPSULATION Encapsulation; // Encapsulation type
|
||
|
struct
|
||
|
{
|
||
|
ULONG FixedHeaderSize:1;
|
||
|
ULONG Reserved:31;
|
||
|
} Flags;
|
||
|
|
||
|
ULONG EncapsulationHeaderSize; // Encapsulation header size
|
||
|
|
||
|
} NDIS_ENCAPSULATION_FORMAT,*PNDIS_ENCAPSULATION_FORMAT;
|
||
|
|
||
|
|
||
|
//
|
||
|
// OFFLOAD header structure for OID_TCP_TASK_OFFLOAD
|
||
|
//
|
||
|
typedef struct _NDIS_TASK_OFFLOAD_HEADER
|
||
|
{
|
||
|
ULONG Version; // set to NDIS_TASK_OFFLOAD_VERSION
|
||
|
ULONG Size; // Size of this structure
|
||
|
ULONG Reserved; // Reserved for future use
|
||
|
ULONG OffsetFirstTask; // Offset to the first
|
||
|
NDIS_ENCAPSULATION_FORMAT EncapsulationFormat; // Encapsulation information.
|
||
|
// NDIS_TASK_OFFLOAD structure(s)
|
||
|
|
||
|
} NDIS_TASK_OFFLOAD_HEADER, *PNDIS_TASK_OFFLOAD_HEADER;
|
||
|
|
||
|
|
||
|
//
|
||
|
// Task offload Structure, which follows the above header in ndis query
|
||
|
//
|
||
|
typedef struct _NDIS_TASK_OFFLOAD
|
||
|
{
|
||
|
ULONG Version; // NDIS_TASK_OFFLOAD_VERSION
|
||
|
ULONG Size; // Size of this structure. Used for version checking.
|
||
|
NDIS_TASK Task; // Task.
|
||
|
ULONG OffsetNextTask; // Offset to the next NDIS_TASK_OFFLOAD
|
||
|
ULONG TaskBufferLength; // Length of the task offload information.
|
||
|
UCHAR TaskBuffer[1]; // The task offload information.
|
||
|
} NDIS_TASK_OFFLOAD, *PNDIS_TASK_OFFLOAD;
|
||
|
|
||
|
//
|
||
|
// Offload structure for NDIS_TASK_TCP_IP_CHECKSUM
|
||
|
//
|
||
|
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; // This field implies IpExtensionHeaders support
|
||
|
ULONG TcpOptionsSupported:1;
|
||
|
ULONG TcpChecksum:1;
|
||
|
ULONG UdpChecksum:1;
|
||
|
|
||
|
} V6Transmit;
|
||
|
|
||
|
struct
|
||
|
{
|
||
|
ULONG IpOptionsSupported:1; // This field implies IpExtensionHeaders support
|
||
|
ULONG TcpOptionsSupported:1;
|
||
|
ULONG TcpChecksum:1;
|
||
|
ULONG UdpChecksum:1;
|
||
|
|
||
|
} V6Receive;
|
||
|
|
||
|
|
||
|
} NDIS_TASK_TCP_IP_CHECKSUM, *PNDIS_TASK_TCP_IP_CHECKSUM;
|
||
|
|
||
|
//
|
||
|
// Off-load structure for NDIS_TASK_TCP_LARGE_SEND
|
||
|
//
|
||
|
#define NDIS_TASK_TCP_LARGE_SEND_V0 0
|
||
|
|
||
|
typedef struct _NDIS_TASK_TCP_LARGE_SEND
|
||
|
{
|
||
|
ULONG Version; // set to NDIS_TASK_TCP_LARGE_SEND_V0
|
||
|
ULONG MaxOffLoadSize;
|
||
|
ULONG MinSegmentCount;
|
||
|
BOOLEAN TcpOptions;
|
||
|
BOOLEAN IpOptions;
|
||
|
|
||
|
} NDIS_TASK_TCP_LARGE_SEND, *PNDIS_TASK_TCP_LARGE_SEND;
|
||
|
|
||
|
|
||
|
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;
|
||
|
#endif // NDIS_LEGACY_DRIVER
|
||
|
|
||
|
//
|
||
|
// flags used in NDIS_TASK_IPSEC->Supprted.RESERVED and
|
||
|
// NDIS_IPSEC_OFFLOAD_V1->Supported.Flags
|
||
|
//
|
||
|
#define IPSEC_TPT_UDPESP_ENCAPTYPE_IKE 0x00000001
|
||
|
#define IPSEC_TUN_UDPESP_ENCAPTYPE_IKE 0x00000002
|
||
|
#define IPSEC_TPTOVERTUN_UDPESP_ENCAPTYPE_IKE 0x00000004
|
||
|
#define IPSEC_TPT_UDPESP_OVER_PURE_TUN_ENCAPTYPE_IKE 0x00000008
|
||
|
#define IPSEC_TPT_UDPESP_ENCAPTYPE_OTHER 0x00000010
|
||
|
#define IPSEC_TUN_UDPESP_ENCAPTYPE_OTHER 0x00000020
|
||
|
#define IPSEC_TPTOVERTUN_UDPESP_ENCAPTYPE_OTHER 0x00000040
|
||
|
#define IPSEC_TPT_UDPESP_OVER_PURE_TUN_ENCAPTYPE_OTHER 0x00000080
|
||
|
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS6 || NDIS60)
|
||
|
|
||
|
//
|
||
|
// The definitions for the NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO.Transmit.Type
|
||
|
// A miniport will use this definition to identify what offload type to use
|
||
|
// on the NetBufferList
|
||
|
//
|
||
|
#define NDIS_TCP_LARGE_SEND_OFFLOAD_V1_TYPE 0
|
||
|
#define NDIS_TCP_LARGE_SEND_OFFLOAD_V2_TYPE 1
|
||
|
|
||
|
//
|
||
|
// IP protocol version encoded in IPVersion field of
|
||
|
// NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO->LsoV2Transmit.IPVersion
|
||
|
//
|
||
|
#define NDIS_TCP_LARGE_SEND_OFFLOAD_IPv4 0
|
||
|
#define NDIS_TCP_LARGE_SEND_OFFLOAD_IPv6 1
|
||
|
|
||
|
//
|
||
|
// The maximum length of the headers (MAC+IP+IP option or extension headers+TCP+TCP options)
|
||
|
// when stack does large send offload. If header is bigger than this value, it will not do
|
||
|
// LSO
|
||
|
//
|
||
|
#define NDIS_LARGE_SEND_OFFLOAD_MAX_HEADER_LENGTH 128
|
||
|
|
||
|
//
|
||
|
// This structure is used in the OOB TcpLargeSendNetBufferListInfo.
|
||
|
//
|
||
|
typedef struct _NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO
|
||
|
{
|
||
|
union
|
||
|
{
|
||
|
struct
|
||
|
{
|
||
|
ULONG Unused:30;
|
||
|
ULONG Type:1;
|
||
|
ULONG Reserved2:1;
|
||
|
} Transmit;
|
||
|
|
||
|
struct
|
||
|
{
|
||
|
ULONG MSS:20;
|
||
|
ULONG TcpHeaderOffset:10;
|
||
|
ULONG Type:1;
|
||
|
ULONG Reserved2:1;
|
||
|
} LsoV1Transmit;
|
||
|
|
||
|
struct
|
||
|
{
|
||
|
ULONG TcpPayload:30;
|
||
|
ULONG Type:1;
|
||
|
ULONG Reserved2:1;
|
||
|
} LsoV1TransmitComplete;
|
||
|
|
||
|
struct
|
||
|
{
|
||
|
ULONG MSS:20;
|
||
|
ULONG TcpHeaderOffset:10;
|
||
|
ULONG Type:1;
|
||
|
ULONG IPVersion:1;
|
||
|
} LsoV2Transmit;
|
||
|
|
||
|
struct
|
||
|
{
|
||
|
ULONG Reserved:30;
|
||
|
ULONG Type:1;
|
||
|
ULONG Reserved2:1;
|
||
|
} LsoV2TransmitComplete;
|
||
|
|
||
|
PVOID Value;
|
||
|
};
|
||
|
} NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO,*PNDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO;
|
||
|
|
||
|
|
||
|
//
|
||
|
// Per-NetBufferList information for TcpIpChecksumNetBufferListInfo.
|
||
|
//
|
||
|
typedef struct _NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO
|
||
|
{
|
||
|
union
|
||
|
{
|
||
|
struct
|
||
|
{
|
||
|
ULONG IsIPv4:1;
|
||
|
ULONG IsIPv6:1;
|
||
|
ULONG TcpChecksum:1;
|
||
|
ULONG UdpChecksum:1;
|
||
|
ULONG IpHeaderChecksum:1;
|
||
|
ULONG Reserved:11;
|
||
|
ULONG TcpHeaderOffset:10;
|
||
|
} Transmit;
|
||
|
|
||
|
struct
|
||
|
{
|
||
|
ULONG TcpChecksumFailed:1;
|
||
|
ULONG UdpChecksumFailed:1;
|
||
|
ULONG IpChecksumFailed:1;
|
||
|
ULONG TcpChecksumSucceeded:1;
|
||
|
ULONG UdpChecksumSucceeded:1;
|
||
|
ULONG IpChecksumSucceeded:1;
|
||
|
ULONG Loopback:1;
|
||
|
} Receive;
|
||
|
|
||
|
PVOID Value;
|
||
|
};
|
||
|
} NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO, *PNDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO;
|
||
|
|
||
|
//
|
||
|
// used in NDIS_STATUS_OFFLOAD_ENCASPULATION_CHANGE status indication and
|
||
|
// and OID_OFFLOAD_ENCAPSULATION OID request
|
||
|
//
|
||
|
#define NDIS_OFFLOAD_ENCAPSULATION_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_OFFLOAD_ENCAPSULATION
|
||
|
{
|
||
|
//
|
||
|
// Header.Type = NDIS_OBJECT_TYPE_OFFLOAD_ENCAPSULATION;
|
||
|
// Header.Size = sizeof(NDIS_OFFLOAD_ENCAPSULATION);
|
||
|
// Header.Revision = NDIS_OFFLOAD_ENCAPSULATION_REVISION_1;
|
||
|
//
|
||
|
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
|
||
|
struct
|
||
|
{
|
||
|
//
|
||
|
// A Protocol sets Enable to NDIS_OFFLOAD_SET_ON if it is enabling IPv4 LSO,
|
||
|
// or XSum offloads
|
||
|
// otherwise it is set to NDIS_OFFLOAD_SET_NO_CHANGE
|
||
|
//
|
||
|
ULONG Enabled;
|
||
|
|
||
|
//
|
||
|
// If Enabled is TRUE, a Protocol must set this to
|
||
|
// either NDIS_ENCAPSULATION_IEEE_802_3
|
||
|
// or NDIS_ENCAPSULATION_IEEE_LLC_SNAP_ROUTED
|
||
|
//
|
||
|
ULONG EncapsulationType;
|
||
|
|
||
|
//
|
||
|
// If Enabled is TRUE, a protocol must set this field to the
|
||
|
// HeaderSize it uses
|
||
|
//
|
||
|
ULONG HeaderSize;
|
||
|
} IPv4;
|
||
|
|
||
|
|
||
|
struct
|
||
|
{
|
||
|
//
|
||
|
// A Protocol sets Enable to NDIS_OFFLOAD_SET_ON if it is enabling IPv6 LSO,
|
||
|
// or XSum offloads
|
||
|
// otherwise it is set to NDIS_OFFLOAD_SET_NO_CHANGE
|
||
|
//
|
||
|
ULONG Enabled;
|
||
|
//
|
||
|
// If Enabled is TRUE, a Protocol must set this to
|
||
|
// either NDIS_ENCAPSULATION_IEEE_802_3
|
||
|
// or NDIS_ENCAPSULATION_IEEE_LLC_SNAP_ROUTED
|
||
|
//
|
||
|
ULONG EncapsulationType;
|
||
|
|
||
|
//
|
||
|
// If Enabled is TRUE, a protocol must set this field to the
|
||
|
// HeaderSize it uses
|
||
|
//
|
||
|
ULONG HeaderSize;
|
||
|
} IPv6;
|
||
|
|
||
|
}NDIS_OFFLOAD_ENCAPSULATION, *PNDIS_OFFLOAD_ENCAPSULATION;
|
||
|
|
||
|
#define NDIS_SIZEOF_OFFLOAD_ENCAPSULATION_REVISION_1 RTL_SIZEOF_THROUGH_FIELD(NDIS_OFFLOAD_ENCAPSULATION, IPv6.HeaderSize)
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
//
|
||
|
// Per-NetBufferList information for IPsecOffloadV2NetBufferListInfo.
|
||
|
//
|
||
|
typedef struct _NDIS_IPSEC_OFFLOAD_V2_NET_BUFFER_LIST_INFO
|
||
|
{
|
||
|
union
|
||
|
{
|
||
|
struct
|
||
|
{
|
||
|
PVOID OffloadHandle;
|
||
|
} Transmit;
|
||
|
|
||
|
struct
|
||
|
{
|
||
|
ULONG SaDeleteReq:1;
|
||
|
ULONG CryptoDone:1;
|
||
|
ULONG NextCryptoDone:1; // Required for transport over tunnel
|
||
|
ULONG Reserved:13;
|
||
|
ULONG CryptoStatus:16;
|
||
|
} Receive;
|
||
|
};
|
||
|
} NDIS_IPSEC_OFFLOAD_V2_NET_BUFFER_LIST_INFO, *PNDIS_IPSEC_OFFLOAD_V2_NET_BUFFER_LIST_INFO;
|
||
|
|
||
|
//
|
||
|
// Per-NetBufferList information for IPsecOffloadV2TunnelNetBufferListInfo.
|
||
|
//
|
||
|
typedef struct _NDIS_IPSEC_OFFLOAD_V2_TUNNEL_NET_BUFFER_LIST_INFO
|
||
|
{
|
||
|
struct
|
||
|
{
|
||
|
NDIS_HANDLE TunnelHandle; // Tunnel SA handle in Transport over tunnel
|
||
|
} Transmit;
|
||
|
} NDIS_IPSEC_OFFLOAD_V2_TUNNEL_NET_BUFFER_LIST_INFO, *PNDIS_IPSEC_OFFLOAD_V2_TUNNEL_NET_BUFFER_LIST_INFO;
|
||
|
|
||
|
//
|
||
|
// Per-NetBufferList information for IPsecOffloadV2HeaderNetBufferListInfo.
|
||
|
//
|
||
|
typedef struct _NDIS_IPSEC_OFFLOAD_V2_HEADER_NET_BUFFER_LIST_INFO
|
||
|
{
|
||
|
union
|
||
|
{
|
||
|
struct
|
||
|
{
|
||
|
ULONG NextHeader:8; // Next Header value is the one carried in ESP trailer
|
||
|
ULONG PadLength:8;
|
||
|
ULONG AhHeaderOffset:8; // This is offset from beginning of IP Header and is measured in 4 byte increments
|
||
|
ULONG EspHeaderOffset:8; // This is offset from beginning of IP Header and is measured in 4 byte increments
|
||
|
} Transmit;
|
||
|
|
||
|
struct
|
||
|
{
|
||
|
ULONG NextHeader:8;
|
||
|
ULONG PadLength:8;
|
||
|
ULONG HeaderInfoSet:1;
|
||
|
} Receive;
|
||
|
};
|
||
|
} NDIS_IPSEC_OFFLOAD_V2_HEADER_NET_BUFFER_LIST_INFO, *PNDIS_IPSEC_OFFLOAD_V2_HEADER_NET_BUFFER_LIST_INFO;
|
||
|
|
||
|
//
|
||
|
// Used in IPSEC_OFFLOAD_V2_ADD_SA.SecAssoc
|
||
|
//
|
||
|
#define IPSEC_OFFLOAD_V2_MAX_EXTENSION_HEADERS 2
|
||
|
|
||
|
//
|
||
|
// used in IPSEC_OFFLOAD_V2_ADD_SA.UdpEspEncapsulation and
|
||
|
// NDIS_IPSEC_OFFLOAD_V2.UdpEsp
|
||
|
//
|
||
|
#define IPSEC_OFFLOAD_V2_UDP_ESP_ENCAPSULATION_NONE 0x00000000
|
||
|
#define IPSEC_OFFLOAD_V2_UDP_ESP_ENCAPSULATION_TRANSPORT 0x00000001
|
||
|
#define IPSEC_OFFLOAD_V2_UDP_ESP_ENCAPSULATION_TUNNEL 0x00000002
|
||
|
#define IPSEC_OFFLOAD_V2_TRANSPORT_OVER_UDP_ESP_ENCAPSULATION_TUNNEL 0x00000004
|
||
|
#define IPSEC_OFFLOAD_V2_UDP_ESP_ENCAPSULATION_TRANSPORT_OVER_TUNNEL 0x00000008
|
||
|
|
||
|
//
|
||
|
// used in IPSEC_OFFLOAD_V2_SECURITY_ASSOCIATION.Flags
|
||
|
//
|
||
|
#define IPSEC_OFFLOAD_V2_ESN_SA 0x00000001
|
||
|
|
||
|
//
|
||
|
// used in IPSEC_OFFLOAD_V2_SECURITY_ASSOCIATION.Operation
|
||
|
//
|
||
|
typedef enum _IPSEC_OFFLOAD_V2_OPERATION
|
||
|
{
|
||
|
IPsecOffloadV2Ah = 1,
|
||
|
IPsecOffloadV2Esp,
|
||
|
IPsecOffloadV2Max
|
||
|
} IPSEC_OFFLOAD_V2_OPERATION, *PIPSEC_OFFLOAD_V2_OPERATION;
|
||
|
|
||
|
//
|
||
|
// used in IPSEC_OFFLOAD_V2_SECURITY_ASSOCIATION.Spi
|
||
|
//
|
||
|
typedef ULONG IPSEC_OFFLOAD_V2_SPI_TYPE;
|
||
|
|
||
|
//
|
||
|
// used in AuthenticationAlgorithm and EncryptionAlgorithm fields
|
||
|
// of IPSEC_OFFLOAD_V2_SECURITY_ASSOCIATION structure
|
||
|
//
|
||
|
typedef struct _IPSEC_OFFLOAD_V2_ALGORITHM_INFO
|
||
|
{
|
||
|
ULONG Identifier;
|
||
|
ULONG KeyLength;
|
||
|
ULONG KeyOffsetBytes;
|
||
|
ULONG AdditionalInfo;
|
||
|
} IPSEC_OFFLOAD_V2_ALGORITHM_INFO, *PIPSEC_OFFLOAD_V2_ALGORITHM_INFO;
|
||
|
|
||
|
//
|
||
|
// used in IPSEC_OFFLOAD_V2_ADD_SA.SecAssoc
|
||
|
//
|
||
|
typedef struct _IPSEC_OFFLOAD_V2_SECURITY_ASSOCIATION
|
||
|
{
|
||
|
ULONG Flags;
|
||
|
IPSEC_OFFLOAD_V2_OPERATION Operation; // AH - SA is used for AH, ESP - SA is used for ESP
|
||
|
IPSEC_OFFLOAD_V2_SPI_TYPE Spi;
|
||
|
IPSEC_OFFLOAD_V2_ALGORITHM_INFO AuthenticationAlgorithm;
|
||
|
IPSEC_OFFLOAD_V2_ALGORITHM_INFO EncryptionAlgorithm;
|
||
|
ULONG SequenceNumberHighOrder;
|
||
|
} IPSEC_OFFLOAD_V2_SECURITY_ASSOCIATION, *PIPSEC_OFFLOAD_V2_SECURITY_ASSOCIATION;
|
||
|
|
||
|
//
|
||
|
// used in IPSEC_OFFLOAD_V2_ADD_SA.Flags
|
||
|
//
|
||
|
#define IPSEC_OFFLOAD_V2_INBOUND 0x00000001
|
||
|
#define IPSEC_OFFLOAD_V2_IPv6 0x00000010
|
||
|
|
||
|
//
|
||
|
// used in OID_TCP_TASK_IPSEC_OFFLOAD_V2_ADD_SA
|
||
|
//
|
||
|
typedef struct _IPSEC_OFFLOAD_V2_ADD_SA IPSEC_OFFLOAD_V2_ADD_SA, *PIPSEC_OFFLOAD_V2_ADD_SA;
|
||
|
|
||
|
#define NDIS_IPSEC_OFFLOAD_V2_ADD_SA_REVISION_1 1
|
||
|
|
||
|
typedef struct _IPSEC_OFFLOAD_V2_ADD_SA
|
||
|
{
|
||
|
//
|
||
|
// Header.Type = NDIS_OBJECT_TYPE_DEFAULT;
|
||
|
// Header.Revision = NDIS_IPSEC_OFFLOAD_V2_ADD_SA_REVISION_1;
|
||
|
// Header.Size = sizeof(IPSEC_OFFLOAD_V2_ADD_SA);
|
||
|
//
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
PIPSEC_OFFLOAD_V2_ADD_SA Next;
|
||
|
ULONG NumExtHdrs;
|
||
|
ULONG Flags;
|
||
|
|
||
|
union
|
||
|
{
|
||
|
struct
|
||
|
{
|
||
|
IPAddr SrcAddr;
|
||
|
IPAddr DestAddr;
|
||
|
} IPv4Endpoints;
|
||
|
|
||
|
struct
|
||
|
{
|
||
|
UCHAR SrcAddr[16];
|
||
|
UCHAR DestAddr[16];
|
||
|
} IPv6Endpoints;
|
||
|
};
|
||
|
|
||
|
NDIS_HANDLE OffloadHandle;
|
||
|
ULONG UdpEspEncapsulation;
|
||
|
IPSEC_OFFLOAD_V2_SECURITY_ASSOCIATION SecAssoc[IPSEC_OFFLOAD_V2_MAX_EXTENSION_HEADERS];
|
||
|
ULONG KeyLength;
|
||
|
UCHAR KeyData[1];
|
||
|
} IPSEC_OFFLOAD_V2_ADD_SA, *PIPSEC_OFFLOAD_V2_ADD_SA;
|
||
|
|
||
|
#define NDIS_SIZEOF_IPSEC_OFFLOAD_V2_ADD_SA_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(IPSEC_OFFLOAD_V2_ADD_SA, KeyData)
|
||
|
|
||
|
//
|
||
|
// used in OID_TCP_TASK_IPSEC_OFFLOAD_V2_DELETE_SA
|
||
|
//
|
||
|
typedef struct _IPSEC_OFFLOAD_V2_DELETE_SA IPSEC_OFFLOAD_V2_DELETE_SA, *PIPSEC_OFFLOAD_V2_DELETE_SA;
|
||
|
|
||
|
#define NDIS_IPSEC_OFFLOAD_V2_DELETE_SA_REVISION_1 1
|
||
|
|
||
|
typedef struct _IPSEC_OFFLOAD_V2_DELETE_SA
|
||
|
{
|
||
|
//
|
||
|
// Header.Type = NDIS_OBJECT_TYPE_DEFAULT;
|
||
|
// Header.Revision = NDIS_IPSEC_OFFLOAD_V2_DELETE_SA_REVISION_1;
|
||
|
// Header.Size = sizeof(IPSEC_OFFLOAD_V2_DELETE_SA);
|
||
|
//
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
PIPSEC_OFFLOAD_V2_DELETE_SA Next;
|
||
|
NDIS_HANDLE OffloadHandle;
|
||
|
} IPSEC_OFFLOAD_V2_DELETE_SA, *PIPSEC_OFFLOAD_V2_DELETE_SA;
|
||
|
|
||
|
#define NDIS_SIZEOF_IPSEC_OFFLOAD_V2_DELETE_SA_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(IPSEC_OFFLOAD_V2_DELETE_SA, OffloadHandle)
|
||
|
|
||
|
//
|
||
|
// Structure and defines used in
|
||
|
// OID_TCP_TASK_IPSEC_OFFLOAD_V2_UPDATE_SA
|
||
|
//
|
||
|
|
||
|
#define NDIS_IPSEC_OFFLOAD_V2_UPDATE_SA_REVISION_1 1
|
||
|
|
||
|
typedef struct _IPSEC_OFFLOAD_V2_UPDATE_SA
|
||
|
{
|
||
|
//
|
||
|
// Header.Type = NDIS_OBJECT_TYPE_DEFAULT;
|
||
|
// Header.Revision = NDIS_IPSEC_OFFLOAD_V2_UPDATE_SA_REVISION_1;
|
||
|
// Header.Size = sizeof(IPSEC_OFFLOAD_V2_UPDATE_SA);
|
||
|
//
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
NDIS_HANDLE OffloadHandle;
|
||
|
IPSEC_OFFLOAD_V2_OPERATION Operation;
|
||
|
IPSEC_OFFLOAD_V2_SPI_TYPE Spi;
|
||
|
ULONG SequenceNumberHighOrder;
|
||
|
} IPSEC_OFFLOAD_V2_UPDATE_SA, *PIPSEC_OFFLOAD_V2_UPDATE_SA;
|
||
|
|
||
|
#define NDIS_SIZEOF_IPSEC_OFFLOAD_V2_UPDATE_SA_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(IPSEC_OFFLOAD_V2_UPDATE_SA, SequenceNumberHighOrder)
|
||
|
|
||
|
#endif // (NDIS_SUPPORT_NDIS61)
|
||
|
|
||
|
#endif // (NDIS_SUPPORT_NDIS6 || NDIS60)
|
||
|
|
||
|
#pragma warning(pop)
|
||
|
|
||
|
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
#if NDIS_LEGACY_PROTOCOL
|
||
|
|
||
|
//
|
||
|
// Function types for NDIS_PROTOCOL_CHARACTERISTICS
|
||
|
//
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*OPEN_ADAPTER_COMPLETE_HANDLER)(
|
||
|
__in NDIS_HANDLE ProtocolBindingContext,
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_STATUS OpenErrorStatus
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*CLOSE_ADAPTER_COMPLETE_HANDLER)(
|
||
|
__in NDIS_HANDLE ProtocolBindingContext,
|
||
|
__in NDIS_STATUS Status
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*RESET_COMPLETE_HANDLER)(
|
||
|
__in NDIS_HANDLE ProtocolBindingContext,
|
||
|
__in NDIS_STATUS Status
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*REQUEST_COMPLETE_HANDLER)(
|
||
|
__in NDIS_HANDLE ProtocolBindingContext,
|
||
|
__in PNDIS_REQUEST NdisRequest,
|
||
|
__in NDIS_STATUS Status
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*STATUS_HANDLER)(
|
||
|
__in NDIS_HANDLE ProtocolBindingContext,
|
||
|
__in NDIS_STATUS GeneralStatus,
|
||
|
__in PVOID StatusBuffer,
|
||
|
__in UINT StatusBufferSize
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*STATUS_COMPLETE_HANDLER)(
|
||
|
__in NDIS_HANDLE ProtocolBindingContext
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*SEND_COMPLETE_HANDLER)(
|
||
|
__in NDIS_HANDLE ProtocolBindingContext,
|
||
|
__in PNDIS_PACKET Packet,
|
||
|
__in NDIS_STATUS Status
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*WAN_SEND_COMPLETE_HANDLER) (
|
||
|
__in NDIS_HANDLE ProtocolBindingContext,
|
||
|
__in PNDIS_WAN_PACKET Packet,
|
||
|
__in NDIS_STATUS Status
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*TRANSFER_DATA_COMPLETE_HANDLER)(
|
||
|
__in NDIS_HANDLE ProtocolBindingContext,
|
||
|
__in PNDIS_PACKET Packet,
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in UINT BytesTransferred
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*WAN_TRANSFER_DATA_COMPLETE_HANDLER)(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(*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
|
||
|
(*WAN_RECEIVE_HANDLER)(
|
||
|
__in NDIS_HANDLE NdisLinkHandle,
|
||
|
__in PUCHAR Packet,
|
||
|
__in ULONG PacketSize
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*RECEIVE_COMPLETE_HANDLER)(
|
||
|
__in NDIS_HANDLE ProtocolBindingContext
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Function types extensions for NDIS 4.0 Protocols
|
||
|
//
|
||
|
typedef
|
||
|
INT
|
||
|
(*RECEIVE_PACKET_HANDLER)(
|
||
|
__in NDIS_HANDLE ProtocolBindingContext,
|
||
|
__in PNDIS_PACKET Packet
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*BIND_HANDLER)(
|
||
|
__out PNDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE BindContext,
|
||
|
__in PNDIS_STRING DeviceName,
|
||
|
__in PVOID SystemSpecific1,
|
||
|
__in PVOID SystemSpecific2
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*UNBIND_HANDLER)(
|
||
|
__out PNDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE ProtocolBindingContext,
|
||
|
__in NDIS_HANDLE UnbindContext
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(*PNP_EVENT_HANDLER)(
|
||
|
__in NDIS_HANDLE ProtocolBindingContext,
|
||
|
__in PNET_PNP_EVENT NetPnPEvent
|
||
|
);
|
||
|
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*UNLOAD_PROTOCOL_HANDLER)(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Protocol characteristics for NDIS 4.0 protocols
|
||
|
//
|
||
|
typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS
|
||
|
{
|
||
|
UCHAR MajorNdisVersion;
|
||
|
UCHAR MinorNdisVersion;
|
||
|
USHORT Filler;
|
||
|
union
|
||
|
{
|
||
|
UINT Reserved;
|
||
|
UINT Flags;
|
||
|
};
|
||
|
OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler;
|
||
|
CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler;
|
||
|
union
|
||
|
{
|
||
|
SEND_COMPLETE_HANDLER SendCompleteHandler;
|
||
|
WAN_SEND_COMPLETE_HANDLER WanSendCompleteHandler;
|
||
|
};
|
||
|
union
|
||
|
{
|
||
|
TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler;
|
||
|
WAN_TRANSFER_DATA_COMPLETE_HANDLER WanTransferDataCompleteHandler;
|
||
|
};
|
||
|
|
||
|
RESET_COMPLETE_HANDLER ResetCompleteHandler;
|
||
|
REQUEST_COMPLETE_HANDLER RequestCompleteHandler;
|
||
|
union
|
||
|
{
|
||
|
RECEIVE_HANDLER ReceiveHandler;
|
||
|
WAN_RECEIVE_HANDLER WanReceiveHandler;
|
||
|
};
|
||
|
RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler;
|
||
|
STATUS_HANDLER StatusHandler;
|
||
|
STATUS_COMPLETE_HANDLER StatusCompleteHandler;
|
||
|
NDIS_STRING Name;
|
||
|
|
||
|
//
|
||
|
// Start of NDIS 4.0 extensions.
|
||
|
//
|
||
|
RECEIVE_PACKET_HANDLER ReceivePacketHandler;
|
||
|
|
||
|
//
|
||
|
// PnP protocol entry-points
|
||
|
//
|
||
|
BIND_HANDLER BindAdapterHandler;
|
||
|
UNBIND_HANDLER UnbindAdapterHandler;
|
||
|
PNP_EVENT_HANDLER PnPEventHandler;
|
||
|
UNLOAD_PROTOCOL_HANDLER UnloadHandler;
|
||
|
|
||
|
} NDIS40_PROTOCOL_CHARACTERISTICS;
|
||
|
|
||
|
#endif
|
||
|
|
||
|
#if NDIS_LEGACY_DRIVER
|
||
|
|
||
|
//
|
||
|
// NDIS 5.0 co-NDIS Protocol handler proto-types - used by clients as well as call manager modules
|
||
|
//
|
||
|
typedef
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
VOID
|
||
|
(*CO_SEND_COMPLETE_HANDLER)(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE ProtocolVcContext,
|
||
|
__in PNDIS_PACKET Packet
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(*CO_STATUS_HANDLER)(
|
||
|
__in NDIS_HANDLE ProtocolBindingContext,
|
||
|
__in_opt NDIS_HANDLE ProtocolVcContext,
|
||
|
__in NDIS_STATUS GeneralStatus,
|
||
|
__in PVOID StatusBuffer,
|
||
|
__in UINT StatusBufferSize
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
UINT
|
||
|
(*CO_RECEIVE_PACKET_HANDLER)(
|
||
|
__in NDIS_HANDLE ProtocolBindingContext,
|
||
|
__in NDIS_HANDLE ProtocolVcContext,
|
||
|
__in PNDIS_PACKET Packet
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
NDIS_STATUS
|
||
|
(*CO_REQUEST_HANDLER)(
|
||
|
__in NDIS_HANDLE ProtocolAfContext,
|
||
|
__in_opt NDIS_HANDLE ProtocolVcContext,
|
||
|
__in_opt NDIS_HANDLE ProtocolPartyContext,
|
||
|
__inout PNDIS_REQUEST NdisRequest
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(*CO_REQUEST_COMPLETE_HANDLER)(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in_opt NDIS_HANDLE ProtocolAfContext,
|
||
|
__in_opt NDIS_HANDLE ProtocolVcContext,
|
||
|
__in_opt NDIS_HANDLE ProtocolPartyContext,
|
||
|
__in PNDIS_REQUEST NdisRequest
|
||
|
);
|
||
|
|
||
|
#endif // NDIS_LEGACY_DRIVER
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS6 || defined(NDIS60))
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
NDIS_STATUS
|
||
|
(PROTOCOL_CO_OID_REQUEST)(
|
||
|
__in NDIS_HANDLE ProtocolAfContext,
|
||
|
__in_opt NDIS_HANDLE ProtocolVcContext,
|
||
|
__in_opt NDIS_HANDLE ProtocolPartyContext,
|
||
|
__inout PNDIS_OID_REQUEST OidRequest
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CO_OID_REQUEST (*CO_OID_REQUEST_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_CO_OID_REQUEST_COMPLETE)(
|
||
|
__in_opt NDIS_HANDLE ProtocolAfContext,
|
||
|
__in_opt NDIS_HANDLE ProtocolVcContext,
|
||
|
__in_opt NDIS_HANDLE ProtocolPartyContext,
|
||
|
__in PNDIS_OID_REQUEST OidRequest,
|
||
|
__in NDIS_STATUS Status
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CO_OID_REQUEST_COMPLETE (*CO_OID_REQUEST_COMPLETE_HANDLER);
|
||
|
|
||
|
#endif // (NDIS_SUPPORT_NDIS6 || defined(NDIS60))
|
||
|
|
||
|
//
|
||
|
// CO_CREATE_VC_HANDLER and CO_DELETE_VC_HANDLER are synchronous calls
|
||
|
// the following APIs are used by NDIS 6 protocols as well as NDIS 5 protocols
|
||
|
//
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
NDIS_STATUS
|
||
|
(PROTOCOL_CO_CREATE_VC)(
|
||
|
__in NDIS_HANDLE ProtocolAfContext,
|
||
|
__in NDIS_HANDLE NdisVcHandle,
|
||
|
__out PNDIS_HANDLE ProtocolVcContext
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CO_CREATE_VC (*CO_CREATE_VC_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
NDIS_STATUS
|
||
|
(PROTOCOL_CO_DELETE_VC)(
|
||
|
__in NDIS_HANDLE ProtocolVcContext
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CO_DELETE_VC (*CO_DELETE_VC_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
VOID
|
||
|
(PROTCOL_CO_AF_REGISTER_NOTIFY)(
|
||
|
__in NDIS_HANDLE ProtocolBindingContext,
|
||
|
__in PCO_ADDRESS_FAMILY AddressFamily
|
||
|
);
|
||
|
typedef PROTCOL_CO_AF_REGISTER_NOTIFY (*CO_AF_REGISTER_NOTIFY_HANDLER);
|
||
|
|
||
|
#if NDIS_LEGACY_PROTOCOL
|
||
|
|
||
|
typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS
|
||
|
{
|
||
|
#ifdef __cplusplus
|
||
|
NDIS40_PROTOCOL_CHARACTERISTICS Ndis40Chars;
|
||
|
#else
|
||
|
NDIS40_PROTOCOL_CHARACTERISTICS;
|
||
|
#endif
|
||
|
|
||
|
//
|
||
|
// Placeholders for protocol extensions for PnP/PM etc.
|
||
|
//
|
||
|
PVOID ReservedHandlers[4];
|
||
|
|
||
|
//
|
||
|
// Start of NDIS 5.0 extensions.
|
||
|
//
|
||
|
|
||
|
CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler;
|
||
|
CO_STATUS_HANDLER CoStatusHandler;
|
||
|
CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler;
|
||
|
CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
|
||
|
|
||
|
} NDIS50_PROTOCOL_CHARACTERISTICS;
|
||
|
|
||
|
#endif // NDIS_LEGACY_PROTOCOL
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS6 || defined(NDIS60))
|
||
|
|
||
|
//
|
||
|
// CONDIS 6.0 protocol's entry points
|
||
|
//
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS)(
|
||
|
__in NDIS_HANDLE ProtocolBindingContext,
|
||
|
__in NDIS_HANDLE ProtocolVcContext,
|
||
|
__in PNET_BUFFER_LIST NetBufferLists,
|
||
|
__in ULONG NumberOfNetBufferLists,
|
||
|
__in ULONG ReceiveFlags
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS (*CO_RECEIVE_NET_BUFFER_LISTS_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_CO_SEND_NET_BUFFER_LISTS_COMPLETE)(
|
||
|
__in NDIS_HANDLE ProtocolVcContext,
|
||
|
__in PNET_BUFFER_LIST NetBufferLists,
|
||
|
__in ULONG SendCompleteFlags
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CO_SEND_NET_BUFFER_LISTS_COMPLETE (*CO_SEND_NET_BUFFER_LISTS_COMPLETE_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_CO_STATUS_EX)(
|
||
|
__in NDIS_HANDLE ProtocolBindingContext,
|
||
|
__in NDIS_HANDLE ProtocolVcContext,
|
||
|
__in PNDIS_STATUS_INDICATION StatusIndication
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CO_STATUS_EX (*CO_STATUS_HANDLER_EX);
|
||
|
|
||
|
//
|
||
|
// CoNDIS 6 Client handler
|
||
|
//
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
NDIS_STATUS
|
||
|
(PROTOCOL_CL_NOTIFY_CLOSE_AF)(
|
||
|
__in NDIS_HANDLE ClientAfContext
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CL_NOTIFY_CLOSE_AF (*CL_NOTIFY_CLOSE_AF_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_CL_OPEN_AF_COMPLETE_EX)(
|
||
|
__in NDIS_HANDLE ProtocolAfContext,
|
||
|
__in NDIS_HANDLE NdisAfHandle,
|
||
|
__in NDIS_STATUS Status
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CL_OPEN_AF_COMPLETE_EX (*CL_OPEN_AF_COMPLETE_HANDLER_EX);
|
||
|
|
||
|
//
|
||
|
// CoNDIS 6 Call manager handler
|
||
|
//
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_CM_NOTIFY_CLOSE_AF_COMPLETE)(
|
||
|
__in NDIS_HANDLE CallMgrAfContext,
|
||
|
__in NDIS_STATUS Status
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CM_NOTIFY_CLOSE_AF_COMPLETE (*CM_NOTIFY_CLOSE_AF_COMPLETE_HANDLER);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisDeregisterProtocolDriver(
|
||
|
__in NDIS_HANDLE NdisProtocolHandle
|
||
|
);
|
||
|
|
||
|
|
||
|
#endif // (NDIS_SUPPORT_NDIS6 || defined(NDIS60))
|
||
|
|
||
|
|
||
|
#if NDIS_LEGACY_PROTOCOL
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisDeregisterProtocol(
|
||
|
__out PNDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE NdisProtocolHandle
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisOpenAdapter(
|
||
|
__out __checkReturn 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_opt PSTRING AddressingInformation
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCloseAdapter(
|
||
|
__out PNDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE NdisBindingHandle
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCompleteBindAdapter(
|
||
|
__in NDIS_HANDLE BindAdapterContext,
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_STATUS OpenStatus
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCompleteUnbindAdapter(
|
||
|
__in NDIS_HANDLE UnbindAdapterContext,
|
||
|
__in NDIS_STATUS Status
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisSetProtocolFilter(
|
||
|
__out __checkReturn
|
||
|
PNDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE NdisBindingHandle,
|
||
|
__in RECEIVE_HANDLER ReceiveHandler,
|
||
|
__in RECEIVE_PACKET_HANDLER ReceivePacketHandler,
|
||
|
__in NDIS_MEDIUM Medium,
|
||
|
__in UINT Offset,
|
||
|
__in UINT Size,
|
||
|
__in PUCHAR Pattern
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisGetDriverHandle(
|
||
|
__in NDIS_HANDLE NdisBindingHandle,
|
||
|
__out PNDIS_HANDLE NdisDriverHandle
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisOpenProtocolConfiguration(
|
||
|
__out PNDIS_STATUS Status,
|
||
|
__out PNDIS_HANDLE ConfigurationHandle,
|
||
|
__in PNDIS_STRING ProtocolSection
|
||
|
);
|
||
|
|
||
|
#endif // NDIS_LEGACY_PROTOCOL
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisReEnumerateProtocolBindings(
|
||
|
__in NDIS_HANDLE NdisProtocolHandle
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisWriteEventLogEntry(
|
||
|
__in __drv_isObjectPointer
|
||
|
PVOID LogHandle,
|
||
|
__in NDIS_STATUS EventCode,
|
||
|
__in ULONG UniqueEventValue,
|
||
|
__in USHORT NumStrings,
|
||
|
__in_opt PVOID StringsList,
|
||
|
__in ULONG DataSize,
|
||
|
__in_bcount_opt(DataSize)
|
||
|
PVOID Data
|
||
|
);
|
||
|
|
||
|
#if NDIS_LEGACY_PROTOCOL
|
||
|
|
||
|
//
|
||
|
// The following routine is used by transports to complete pending
|
||
|
// network PnP events.
|
||
|
//
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCompletePnPEvent(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE NdisBindingHandle,
|
||
|
__in PNET_PNP_EVENT NetPnPEvent
|
||
|
);
|
||
|
|
||
|
#endif // NDIS_LEGACY_PROTOCOL
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS6 || defined(NDIS60))
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCompleteNetPnPEvent(
|
||
|
__in NDIS_HANDLE NdisBindingHandle,
|
||
|
__in PNET_PNP_EVENT_NOTIFICATION NetPnPEventNotification,
|
||
|
__in NDIS_STATUS Status
|
||
|
);
|
||
|
#endif // (NDIS_SUPPORT_NDIS6 || defined(NDIS60))
|
||
|
|
||
|
//
|
||
|
// The following routine is used by a transport to query the localized
|
||
|
// friendly instance name of the adapter that they are bound to. There
|
||
|
// are two variations of this, one uses the binding handle and the other
|
||
|
// the binding context. Some transports need this before they bind - like
|
||
|
// TCP/IP for instance.
|
||
|
//
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisQueryAdapterInstanceName(
|
||
|
__out PNDIS_STRING pAdapterInstanceName,
|
||
|
__in NDIS_HANDLE NdisBindingHandle
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisQueryBindInstanceName(
|
||
|
__out PNDIS_STRING pAdapterInstanceName,
|
||
|
__in NDIS_HANDLE BindingContext
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// The following is used by TDI/NDIS interface as part of Network PnP.
|
||
|
// For use by TDI alone.
|
||
|
//
|
||
|
typedef
|
||
|
NTSTATUS
|
||
|
(*TDI_REGISTER_CALLBACK)(
|
||
|
__in PUNICODE_STRING DeviceName,
|
||
|
__out HANDLE * TdiHandle
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
NTSTATUS
|
||
|
(*TDI_PNP_HANDLER)(
|
||
|
__in PUNICODE_STRING UpperComponent,
|
||
|
__in PUNICODE_STRING LowerComponent,
|
||
|
__in PUNICODE_STRING BindList,
|
||
|
__in PVOID ReconfigBuffer,
|
||
|
__in UINT ReconfigBufferSize,
|
||
|
__in UINT Operation
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisRegisterTdiCallBack(
|
||
|
__in TDI_REGISTER_CALLBACK RegisterCallback,
|
||
|
__in TDI_PNP_HANDLER PnPHandler
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisDeregisterTdiCallBack(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
#if NDIS_LEGACY_PROTOCOL
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
NdisReset(
|
||
|
__out PNDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE NdisBindingHandle
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
NdisRequest(
|
||
|
__out PNDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE NdisBindingHandle,
|
||
|
__in PNDIS_REQUEST NdisRequest
|
||
|
);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
|
||
|
#define NdisSend(Status, NdisBindingHandle, Packet) \
|
||
|
{ \
|
||
|
*(Status) = \
|
||
|
(((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->NdisCommonOpenBlock.SendHandler)( \
|
||
|
((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->NdisCommonOpenBlock.BindingHandle, \
|
||
|
(Packet)); \
|
||
|
}
|
||
|
|
||
|
#define NdisSendPackets(NdisBindingHandle, PacketArray, NumberOfPackets) \
|
||
|
{ \
|
||
|
(((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->NdisCommonOpenBlock.SendPacketsHandler)( \
|
||
|
(PNDIS_OPEN_BLOCK)(NdisBindingHandle), \
|
||
|
(PacketArray), \
|
||
|
(NumberOfPackets)); \
|
||
|
}
|
||
|
|
||
|
|
||
|
#define NdisTransferData(Status, \
|
||
|
NdisBindingHandle, \
|
||
|
MacReceiveContext, \
|
||
|
ByteOffset, \
|
||
|
BytesToTransfer, \
|
||
|
Packet, \
|
||
|
BytesTransferred) \
|
||
|
{ \
|
||
|
*(Status) = \
|
||
|
(((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->NdisCommonOpenBlock.TransferDataHandler)( \
|
||
|
((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->NdisCommonOpenBlock.BindingHandle, \
|
||
|
(MacReceiveContext), \
|
||
|
(ByteOffset), \
|
||
|
(BytesToTransfer), \
|
||
|
(Packet), \
|
||
|
(BytesTransferred)); \
|
||
|
}
|
||
|
|
||
|
#else
|
||
|
|
||
|
#define NdisSend(Status, NdisBindingHandle, Packet) \
|
||
|
{ \
|
||
|
*(Status) = \
|
||
|
(((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->SendHandler)( \
|
||
|
((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->BindingHandle, \
|
||
|
(Packet)); \
|
||
|
}
|
||
|
|
||
|
|
||
|
#define NdisSendPackets(NdisBindingHandle, PacketArray, NumberOfPackets) \
|
||
|
{ \
|
||
|
(((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->SendPacketsHandler)( \
|
||
|
(PNDIS_OPEN_BLOCK)(NdisBindingHandle), \
|
||
|
(PacketArray), \
|
||
|
(NumberOfPackets)); \
|
||
|
}
|
||
|
|
||
|
#define NdisTransferData(Status, \
|
||
|
NdisBindingHandle, \
|
||
|
MacReceiveContext, \
|
||
|
ByteOffset, \
|
||
|
BytesToTransfer, \
|
||
|
Packet, \
|
||
|
BytesTransferred) \
|
||
|
{ \
|
||
|
*(Status) = \
|
||
|
(((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->TransferDataHandler)( \
|
||
|
((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->BindingHandle, \
|
||
|
(MacReceiveContext), \
|
||
|
(ByteOffset), \
|
||
|
(BytesToTransfer), \
|
||
|
(Packet), \
|
||
|
(BytesTransferred)); \
|
||
|
}
|
||
|
|
||
|
#endif // ifdef __cplusplus
|
||
|
#endif // NDIS_LEGACY_PROTOCOL
|
||
|
|
||
|
#if NDIS_LEGACY_PROTOCOL
|
||
|
//
|
||
|
// Routines to access packet flags
|
||
|
//
|
||
|
|
||
|
/*++
|
||
|
|
||
|
VOID
|
||
|
NdisSetSendFlags(
|
||
|
IN PNDIS_PACKET Packet,
|
||
|
IN UINT Flags
|
||
|
);
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#define NdisSetSendFlags(_Packet,_Flags) (_Packet)->Private.Flags = (_Flags)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
VOID
|
||
|
NdisQuerySendFlags(
|
||
|
IN PNDIS_PACKET Packet,
|
||
|
OUT PUINT Flags
|
||
|
);
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#define NdisQuerySendFlags(_Packet,_Flags) *(_Flags) = (_Packet)->Private.Flags
|
||
|
|
||
|
#endif // NDIS_LEGACY_PROTOCOL
|
||
|
|
||
|
#if NDIS_LEGACY_DRIVER
|
||
|
//
|
||
|
// The following is the minimum size of packets a miniport must allocate
|
||
|
// when it indicates packets via NdisMIndicatePacket or NdisMCoIndicatePacket
|
||
|
//
|
||
|
#define PROTOCOL_RESERVED_SIZE_IN_PACKET (4 * sizeof(PVOID))
|
||
|
#endif // NDIS_LEGACY_DRIVER
|
||
|
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
#define WanMiniportSend(Status, \
|
||
|
NdisBindingHandle, \
|
||
|
NdisLinkHandle, \
|
||
|
WanPacket) \
|
||
|
{ \
|
||
|
*(Status) = \
|
||
|
((((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->NdisCommonOpenBlock.WanSendHandler))( \
|
||
|
((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->NdisCommonOpenBlock.BindingHandle, \
|
||
|
(NdisLinkHandle), \
|
||
|
(PNDIS_PACKET)(WanPacket)); \
|
||
|
}
|
||
|
|
||
|
#else
|
||
|
#define WanMiniportSend(Status, \
|
||
|
NdisBindingHandle, \
|
||
|
NdisLinkHandle, \
|
||
|
WanPacket) \
|
||
|
{ \
|
||
|
*(Status) = \
|
||
|
((((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->WanSendHandler))( \
|
||
|
((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->BindingHandle, \
|
||
|
(NdisLinkHandle), \
|
||
|
(PNDIS_PACKET)(WanPacket)); \
|
||
|
}
|
||
|
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#if NDIS_LEGACY_PROTOCOL
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisReturnPackets(
|
||
|
__in PNDIS_PACKET * PacketsToReturn,
|
||
|
__in UINT NumberOfPackets
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
PNDIS_PACKET
|
||
|
NdisGetReceivedPacket(
|
||
|
__in NDIS_HANDLE NdisBindingHandle,
|
||
|
__in NDIS_HANDLE MacContext
|
||
|
);
|
||
|
|
||
|
#endif // NDIS_LEGACY_PROTOCOL
|
||
|
|
||
|
//
|
||
|
// Macros to portably manipulate NDIS buffers.
|
||
|
//
|
||
|
|
||
|
#define NdisBufferLength(Buffer) MmGetMdlByteCount(Buffer)
|
||
|
#define NdisBufferVirtualAddress(_Buffer) MmGetSystemAddressForMdl(_Buffer)
|
||
|
#define NdisBufferVirtualAddressSafe(_Buffer, _Priority) MmGetSystemAddressForMdlSafe(_Buffer, _Priority)
|
||
|
|
||
|
|
||
|
|
||
|
#if NDIS_LEGACY_PROTOCOL
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCancelSendPackets(
|
||
|
__in NDIS_HANDLE NdisBindingHandle,
|
||
|
__in __drv_isObjectPointer
|
||
|
PVOID CancelId
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisQueryPendingIOCount(
|
||
|
__in __drv_isObjectPointer
|
||
|
PVOID NdisBindingHandle,
|
||
|
__out PULONG IoCount
|
||
|
);
|
||
|
|
||
|
#endif // NDIS_LEGACY_PROTOCOL
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
UCHAR
|
||
|
NdisGeneratePartialCancelId(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS6 || defined(NDIS60))
|
||
|
|
||
|
//
|
||
|
// NDIS 6.0 protocol's entry points
|
||
|
//
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_OID_REQUEST_COMPLETE)(
|
||
|
__in NDIS_HANDLE ProtocolBindingContext,
|
||
|
__in PNDIS_OID_REQUEST OidRequest,
|
||
|
__in NDIS_STATUS Status
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_OID_REQUEST_COMPLETE (*OID_REQUEST_COMPLETE_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_RECEIVE_NET_BUFFER_LISTS)(
|
||
|
__in NDIS_HANDLE ProtocolBindingContext,
|
||
|
__in PNET_BUFFER_LIST NetBufferLists,
|
||
|
__in NDIS_PORT_NUMBER PortNumber,
|
||
|
__in ULONG NumberOfNetBufferLists,
|
||
|
__in ULONG ReceiveFlags
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_RECEIVE_NET_BUFFER_LISTS (*RECEIVE_NET_BUFFER_LISTS_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_SEND_NET_BUFFER_LISTS_COMPLETE)(
|
||
|
__in NDIS_HANDLE ProtocolBindingContext,
|
||
|
__in PNET_BUFFER_LIST NetBufferList,
|
||
|
__in ULONG SendCompleteFlags
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_SEND_NET_BUFFER_LISTS_COMPLETE (*SEND_NET_BUFFER_LISTS_COMPLETE_HANDLER);
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
//
|
||
|
// NDIS 6.1 protocol's entry points
|
||
|
//
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_DIRECT_OID_REQUEST_COMPLETE)(
|
||
|
__in NDIS_HANDLE ProtocolBindingContext,
|
||
|
__in PNDIS_OID_REQUEST OidRequest,
|
||
|
__in NDIS_STATUS Status
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_DIRECT_OID_REQUEST_COMPLETE (*DIRECT_OID_REQUEST_COMPLETE_HANDLER);
|
||
|
|
||
|
#endif // (NDIS_SUPPORT_NDIS61)
|
||
|
|
||
|
//
|
||
|
// structure passed to protocol's BIND_HANDLER_EX
|
||
|
//
|
||
|
#define NDIS_BIND_PARAMETERS_REVISION_1 1
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
#define NDIS_BIND_PARAMETERS_REVISION_2 2
|
||
|
#endif // (NDIS_SUPPORT_NDIS61)
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
#define NDIS_BIND_PARAMETERS_REVISION_3 3
|
||
|
#endif // (NDIS_SUPPORT_NDIS620)
|
||
|
|
||
|
|
||
|
typedef struct _NDIS_BIND_PARAMETERS
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
PNDIS_STRING ProtocolSection;
|
||
|
PNDIS_STRING AdapterName;
|
||
|
PDEVICE_OBJECT PhysicalDeviceObject;
|
||
|
NDIS_MEDIUM MediaType;
|
||
|
ULONG MtuSize;
|
||
|
ULONG64 MaxXmitLinkSpeed;
|
||
|
ULONG64 XmitLinkSpeed;
|
||
|
ULONG64 MaxRcvLinkSpeed;
|
||
|
ULONG64 RcvLinkSpeed;
|
||
|
NDIS_MEDIA_CONNECT_STATE MediaConnectState;
|
||
|
NDIS_MEDIA_DUPLEX_STATE MediaDuplexState;
|
||
|
ULONG LookaheadSize;
|
||
|
PNDIS_PNP_CAPABILITIES PowerManagementCapabilities; // 6.20 drivers must use PowerManagementCapabilitiesEx
|
||
|
ULONG SupportedPacketFilters;
|
||
|
ULONG MaxMulticastListSize;
|
||
|
USHORT MacAddressLength;
|
||
|
UCHAR CurrentMacAddress[NDIS_MAX_PHYS_ADDRESS_LENGTH];
|
||
|
NDIS_PHYSICAL_MEDIUM PhysicalMediumType;
|
||
|
PNDIS_RECEIVE_SCALE_CAPABILITIES RcvScaleCapabilities;
|
||
|
NET_LUID BoundIfNetluid;
|
||
|
NET_IFINDEX BoundIfIndex;
|
||
|
NET_LUID LowestIfNetluid;
|
||
|
NET_IFINDEX LowestIfIndex;
|
||
|
NET_IF_ACCESS_TYPE AccessType; // NET_IF_ACCESS_BROADCAST for a typical ethernet adapter
|
||
|
NET_IF_DIRECTION_TYPE DirectionType; // NET_IF_DIRECTION_SENDRECEIVE for a typical ethernet adapter
|
||
|
NET_IF_CONNECTION_TYPE ConnectionType; // NET_IF_CONNECTION_DEDICATED for a typical ethernet adapter
|
||
|
NET_IFTYPE IfType; // IF_TYPE_ETHERNET_CSMACD for a typical ethernet adapter (regardless of speed)
|
||
|
BOOLEAN IfConnectorPresent; // RFC 2665 TRUE if physical adapter
|
||
|
PNDIS_PORT ActivePorts;
|
||
|
ULONG DataBackFillSize;
|
||
|
ULONG ContextBackFillSize;
|
||
|
ULONG MacOptions;
|
||
|
NET_IF_COMPARTMENT_ID CompartmentId;
|
||
|
PNDIS_OFFLOAD DefaultOffloadConfiguration;
|
||
|
PNDIS_TCP_CONNECTION_OFFLOAD TcpConnectionOffloadCapabilities;
|
||
|
PNDIS_STRING BoundAdapterName;
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
PNDIS_HD_SPLIT_CURRENT_CONFIG HDSplitCurrentConfig;
|
||
|
#endif // (NDIS_SUPPORT_NDIS61)
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
PNDIS_RECEIVE_FILTER_CAPABILITIES ReceiveFilterCapabilities;
|
||
|
PNDIS_PM_CAPABILITIES PowerManagementCapabilitiesEx;
|
||
|
PNDIS_NIC_SWITCH_CAPABILITIES NicSwitchCapabilities;
|
||
|
#endif // (NDIS_SUPPORT_NDIS620)
|
||
|
}NDIS_BIND_PARAMETERS, *PNDIS_BIND_PARAMETERS;
|
||
|
|
||
|
#define NDIS_SIZEOF_BIND_PARAMETERS_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_BIND_PARAMETERS, BoundAdapterName)
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
#define NDIS_SIZEOF_BIND_PARAMETERS_REVISION_2 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_BIND_PARAMETERS, HDSplitCurrentConfig)
|
||
|
#endif // (NDIS_SUPPORT_NDIS61)
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
#define NDIS_SIZEOF_BIND_PARAMETERS_REVISION_3 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_BIND_PARAMETERS, NicSwitchCapabilities)
|
||
|
#endif // (NDIS_SUPPORT_NDIS620)
|
||
|
|
||
|
typedef
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
NDIS_STATUS
|
||
|
(PROTOCOL_BIND_ADAPTER_EX)(
|
||
|
__in NDIS_HANDLE ProtocolDriverContext,
|
||
|
__in NDIS_HANDLE BindContext,
|
||
|
__in PNDIS_BIND_PARAMETERS BindParameters
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_BIND_ADAPTER_EX (*BIND_HANDLER_EX);
|
||
|
|
||
|
typedef
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
NDIS_STATUS
|
||
|
(PROTOCOL_UNBIND_ADAPTER_EX)(
|
||
|
__in NDIS_HANDLE UnbindContext,
|
||
|
__in NDIS_HANDLE ProtocolBindingContext
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_UNBIND_ADAPTER_EX (*UNBIND_HANDLER_EX);
|
||
|
|
||
|
typedef
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_OPEN_ADAPTER_COMPLETE_EX)(
|
||
|
__in NDIS_HANDLE ProtocolBindingContext,
|
||
|
__in NDIS_STATUS Status
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_OPEN_ADAPTER_COMPLETE_EX (*OPEN_ADAPTER_COMPLETE_HANDLER_EX);
|
||
|
|
||
|
typedef
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_CLOSE_ADAPTER_COMPLETE_EX)(
|
||
|
__in NDIS_HANDLE ProtocolBindingContext
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CLOSE_ADAPTER_COMPLETE_EX (*CLOSE_ADAPTER_COMPLETE_HANDLER_EX);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_STATUS_EX)(
|
||
|
__in NDIS_HANDLE ProtocolBindingContext,
|
||
|
__in PNDIS_STATUS_INDICATION StatusIndication
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_STATUS_EX (*STATUS_HANDLER_EX);
|
||
|
|
||
|
typedef
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
NDIS_STATUS
|
||
|
(PROTOCOL_NET_PNP_EVENT)(
|
||
|
__in NDIS_HANDLE ProtocolBindingContext,
|
||
|
__in PNET_PNP_EVENT_NOTIFICATION NetPnPEventNotification
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_NET_PNP_EVENT (*NET_PNP_EVENT_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_UNINSTALL)(
|
||
|
VOID
|
||
|
);
|
||
|
typedef PROTOCOL_UNINSTALL (*UNINSTALL_PROTOCOL_HANDLER);
|
||
|
|
||
|
|
||
|
#define NDIS_PROTOCOL_CO_CHARACTERISTICS_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_PROTOCOL_CO_CHARACTERISTICS
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header; // Header.Type = NDIS_OBJECT_TYPE_PROTOCOL_CO_CHARACTERISTICS
|
||
|
ULONG Flags;
|
||
|
CO_STATUS_HANDLER_EX CoStatusHandlerEx;
|
||
|
CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
|
||
|
CO_RECEIVE_NET_BUFFER_LISTS_HANDLER CoReceiveNetBufferListsHandler;
|
||
|
CO_SEND_NET_BUFFER_LISTS_COMPLETE_HANDLER CoSendNetBufferListsCompleteHandler;
|
||
|
} NDIS_PROTOCOL_CO_CHARACTERISTICS, *PNDIS_PROTOCOL_CO_CHARACTERISTICS;
|
||
|
|
||
|
#define NDIS_SIZEOF_PROTOCOL_CO_CHARACTERISTICS_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_PROTOCOL_CO_CHARACTERISTICS, CoSendNetBufferListsCompleteHandler)
|
||
|
|
||
|
#define NDIS_PROTOCOL_DRIVER_CHARACTERISTICS_REVISION_1 1
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
#define NDIS_PROTOCOL_DRIVER_CHARACTERISTICS_REVISION_2 2
|
||
|
#endif // (NDIS_SUPPORT_NDIS61)
|
||
|
|
||
|
typedef struct _NDIS_PROTOCOL_DRIVER_CHARACTERISTICS
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
UCHAR MajorNdisVersion;
|
||
|
UCHAR MinorNdisVersion;
|
||
|
UCHAR MajorDriverVersion;
|
||
|
UCHAR MinorDriverVersion;
|
||
|
ULONG Flags;
|
||
|
NDIS_STRING Name;
|
||
|
SET_OPTIONS_HANDLER SetOptionsHandler;
|
||
|
BIND_HANDLER_EX BindAdapterHandlerEx;
|
||
|
UNBIND_HANDLER_EX UnbindAdapterHandlerEx;
|
||
|
OPEN_ADAPTER_COMPLETE_HANDLER_EX OpenAdapterCompleteHandlerEx;
|
||
|
CLOSE_ADAPTER_COMPLETE_HANDLER_EX CloseAdapterCompleteHandlerEx;
|
||
|
NET_PNP_EVENT_HANDLER NetPnPEventHandler;
|
||
|
UNINSTALL_PROTOCOL_HANDLER UninstallHandler;
|
||
|
OID_REQUEST_COMPLETE_HANDLER OidRequestCompleteHandler;
|
||
|
STATUS_HANDLER_EX StatusHandlerEx;
|
||
|
RECEIVE_NET_BUFFER_LISTS_HANDLER ReceiveNetBufferListsHandler;
|
||
|
SEND_NET_BUFFER_LISTS_COMPLETE_HANDLER SendNetBufferListsCompleteHandler;
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
DIRECT_OID_REQUEST_COMPLETE_HANDLER DirectOidRequestCompleteHandler;
|
||
|
#endif // (NDIS_SUPPORT_NDIS61)
|
||
|
} NDIS_PROTOCOL_DRIVER_CHARACTERISTICS, *PNDIS_PROTOCOL_DRIVER_CHARACTERISTICS;
|
||
|
|
||
|
#define NDIS_SIZEOF_PROTOCOL_DRIVER_CHARACTERISTICS_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_PROTOCOL_DRIVER_CHARACTERISTICS, SendNetBufferListsCompleteHandler)
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
#define NDIS_SIZEOF_PROTOCOL_DRIVER_CHARACTERISTICS_REVISION_2 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_PROTOCOL_DRIVER_CHARACTERISTICS, DirectOidRequestCompleteHandler)
|
||
|
#endif // (NDIS_SUPPORT_NDIS61)
|
||
|
|
||
|
#endif // (NDIS_SUPPORT_NDIS6 || defined(NDIS60))
|
||
|
|
||
|
|
||
|
#if NDIS_LEGACY_PROTOCOL
|
||
|
|
||
|
#if (defined(NDIS50) || defined(NDIS51))
|
||
|
typedef NDIS50_PROTOCOL_CHARACTERISTICS NDIS_PROTOCOL_CHARACTERISTICS;
|
||
|
#else
|
||
|
typedef NDIS40_PROTOCOL_CHARACTERISTICS NDIS_PROTOCOL_CHARACTERISTICS;
|
||
|
#endif
|
||
|
|
||
|
|
||
|
typedef NDIS_PROTOCOL_CHARACTERISTICS *PNDIS_PROTOCOL_CHARACTERISTICS;
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisRegisterProtocol(
|
||
|
__out PNDIS_STATUS Status,
|
||
|
__out PNDIS_HANDLE NdisProtocolHandle,
|
||
|
__in PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics,
|
||
|
__in UINT CharacteristicsLength
|
||
|
);
|
||
|
|
||
|
#endif // NDIS_LEGACY_PROTOCOL
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS6 || defined(NDIS60))
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisRegisterProtocolDriver(
|
||
|
__in_opt NDIS_HANDLE ProtocolDriverContext,
|
||
|
__in PNDIS_PROTOCOL_DRIVER_CHARACTERISTICS ProtocolCharacteristics,
|
||
|
__out PNDIS_HANDLE NdisProtocolHandle
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisSendNetBufferLists(
|
||
|
__in NDIS_HANDLE NdisBindingHandle,
|
||
|
__in __drv_aliasesMem PNET_BUFFER_LIST NetBufferLists,
|
||
|
__in NDIS_PORT_NUMBER PortNumber,
|
||
|
__in ULONG SendFlags
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisReturnNetBufferLists(
|
||
|
__in NDIS_HANDLE NdisBindingHandle,
|
||
|
__in PNET_BUFFER_LIST NetBufferLists,
|
||
|
__in ULONG ReturnFlags
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCancelSendNetBufferLists(
|
||
|
__in NDIS_HANDLE NdisBindingHandle,
|
||
|
__in __drv_isObjectPointer
|
||
|
PVOID CancelId
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisOidRequest(
|
||
|
__in NDIS_HANDLE NdisBindingHandle,
|
||
|
__in PNDIS_OID_REQUEST OidRequest
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCancelOidRequest(
|
||
|
__in NDIS_HANDLE NdisBindingHandle,
|
||
|
__in __drv_isObjectPointer
|
||
|
PVOID RequestId
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisUnbindAdapter(
|
||
|
__in NDIS_HANDLE NdisBindingHandle
|
||
|
);
|
||
|
|
||
|
|
||
|
//
|
||
|
// structure passed to NdisOpenAdapterEx
|
||
|
//
|
||
|
|
||
|
#define NDIS_OPEN_PARAMETERS_REVISION_1 1
|
||
|
typedef struct _NDIS_OPEN_PARAMETERS
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
PNDIS_STRING AdapterName;
|
||
|
PNDIS_MEDIUM MediumArray;
|
||
|
UINT MediumArraySize;
|
||
|
PUINT SelectedMediumIndex;
|
||
|
PNET_FRAME_TYPE FrameTypeArray;
|
||
|
UINT FrameTypeArraySize;
|
||
|
} NDIS_OPEN_PARAMETERS, *PNDIS_OPEN_PARAMETERS;
|
||
|
|
||
|
#define NDIS_SIZEOF_OPEN_PARAMETERS_REVSION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_OPEN_PARAMETERS, FrameTypeArraySize)
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisOpenAdapterEx(
|
||
|
__in NDIS_HANDLE NdisProtocolHandle,
|
||
|
__in NDIS_HANDLE ProtocolBindingContext,
|
||
|
__in PNDIS_OPEN_PARAMETERS OpenParameters,
|
||
|
__in NDIS_HANDLE BindContext,
|
||
|
__out PNDIS_HANDLE NdisBindingHandle
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCompleteBindAdapterEx(
|
||
|
__in NDIS_HANDLE BindAdapterContext,
|
||
|
__in NDIS_STATUS Status
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisCloseAdapterEx(
|
||
|
__in NDIS_HANDLE NdisBindingHandle
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCompleteUnbindAdapterEx(
|
||
|
__in NDIS_HANDLE UnbindContext
|
||
|
);
|
||
|
|
||
|
|
||
|
|
||
|
#define NDIS_PROTOCOL_PAUSE_PARAMETERS_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_PROTOCOL_PAUSE_PARAMETERS
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
ULONG Flags;
|
||
|
ULONG PauseReason;
|
||
|
} NDIS_PROTOCOL_PAUSE_PARAMETERS, *PNDIS_PROTOCOL_PAUSE_PARAMETERS;
|
||
|
|
||
|
#define NDIS_SIZEOF_PROTOCOL_PAUSE_PARAMETERS_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_PROTOCOL_PAUSE_PARAMETERS, PauseReason)
|
||
|
|
||
|
|
||
|
//
|
||
|
// NDIS_PROTOCOL_RESTART_PARAMETERS is used in
|
||
|
// NetEventRestart event indication to the protocols
|
||
|
//
|
||
|
#define NDIS_PROTOCOL_RESTART_PARAMETERS_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_PROTOCOL_RESTART_PARAMETERS
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
PUCHAR FilterModuleNameBuffer;
|
||
|
ULONG FilterModuleNameBufferLength;
|
||
|
PNDIS_RESTART_ATTRIBUTES RestartAttributes;
|
||
|
NET_IFINDEX BoundIfIndex;
|
||
|
NET_LUID BoundIfNetluid;
|
||
|
ULONG Flags;
|
||
|
} NDIS_PROTOCOL_RESTART_PARAMETERS, *PNDIS_PROTOCOL_RESTART_PARAMETERS;
|
||
|
|
||
|
#define NDIS_SIZEOF_PROTOCOL_RESTART_PARAMETERS_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_PROTOCOL_RESTART_PARAMETERS, Flags)
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisDirectOidRequest(
|
||
|
__in NDIS_HANDLE NdisBindingHandle,
|
||
|
__in PNDIS_OID_REQUEST OidRequest
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCancelDirectOidRequest(
|
||
|
__in NDIS_HANDLE NdisBindingHandle,
|
||
|
__in __drv_isObjectPointer
|
||
|
PVOID RequestId
|
||
|
);
|
||
|
#endif // (NDIS_SUPPORT_NDIS61)
|
||
|
|
||
|
#endif // (NDIS_SUPPORT_NDIS6 || defined(NDIS60))
|
||
|
|
||
|
|
||
|
//
|
||
|
// needed for macros used by legacy protocols
|
||
|
//
|
||
|
#if !defined(NDIS_WRAPPER)
|
||
|
#if NDIS_LEGACY_PROTOCOL
|
||
|
typedef struct _NDIS_COMMON_OPEN_BLOCK
|
||
|
{
|
||
|
PVOID MacHandle; // needed for backward compatibility
|
||
|
|
||
|
NDIS_HANDLE BindingHandle;
|
||
|
NDIS_HANDLE Reserved6;
|
||
|
NDIS_HANDLE Reserved7;
|
||
|
NDIS_HANDLE Reserved8;
|
||
|
|
||
|
PVOID Reserved9;
|
||
|
NDIS_HANDLE Reserved10;
|
||
|
|
||
|
NDIS_HANDLE Reserved11;
|
||
|
BOOLEAN Reserved12;
|
||
|
BOOLEAN Reserved2;
|
||
|
BOOLEAN Reserved3;
|
||
|
BOOLEAN Reserved4;
|
||
|
PVOID Reserved13;
|
||
|
KSPIN_LOCK Reserved5;
|
||
|
NDIS_HANDLE Reserved14;
|
||
|
|
||
|
//
|
||
|
// These are referenced by the macros used by protocols to call.
|
||
|
// All of the ones referenced by the macros are internal NDIS handlers for the miniports
|
||
|
//
|
||
|
union
|
||
|
{
|
||
|
SEND_HANDLER SendHandler;
|
||
|
WAN_SEND_HANDLER WanSendHandler;
|
||
|
};
|
||
|
TRANSFER_DATA_HANDLER TransferDataHandler;
|
||
|
|
||
|
//
|
||
|
// These are referenced internally by NDIS
|
||
|
//
|
||
|
SEND_COMPLETE_HANDLER SendCompleteHandler;
|
||
|
TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler;
|
||
|
RECEIVE_HANDLER ReceiveHandler;
|
||
|
RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler;
|
||
|
WAN_RECEIVE_HANDLER WanReceiveHandler;
|
||
|
REQUEST_COMPLETE_HANDLER RequestCompleteHandler;
|
||
|
|
||
|
//
|
||
|
// NDIS 4.0 extensions
|
||
|
//
|
||
|
RECEIVE_PACKET_HANDLER ReceivePacketHandler;
|
||
|
SEND_PACKETS_HANDLER SendPacketsHandler;
|
||
|
|
||
|
//
|
||
|
// More Cached Handlers
|
||
|
//
|
||
|
RESET_HANDLER ResetHandler;
|
||
|
REQUEST_HANDLER RequestHandler;
|
||
|
RESET_COMPLETE_HANDLER ResetCompleteHandler;
|
||
|
STATUS_HANDLER StatusHandler;
|
||
|
STATUS_COMPLETE_HANDLER StatusCompleteHandler;
|
||
|
|
||
|
}NDIS_COMMON_OPEN_BLOCK, *PNDIS_COMMON_OPEN_BLOCK;
|
||
|
//
|
||
|
// one of these per open on an adapter/protocol
|
||
|
//
|
||
|
struct _NDIS_OPEN_BLOCK
|
||
|
{
|
||
|
#ifdef __cplusplus
|
||
|
NDIS_COMMON_OPEN_BLOCK NdisCommonOpenBlock;
|
||
|
#else
|
||
|
NDIS_COMMON_OPEN_BLOCK;
|
||
|
#endif
|
||
|
|
||
|
};
|
||
|
|
||
|
#endif // NDIS_LEGACY_PROTOCOL
|
||
|
#endif // NDIS_WRAPPER
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
#include <xfilter.h>
|
||
|
|
||
|
#define NDIS_M_MAX_LOOKAHEAD 526
|
||
|
|
||
|
#if NDIS_LEGACY_MINIPORT
|
||
|
|
||
|
//
|
||
|
// Function types for NDIS_MINIPORT_CHARACTERISTICS
|
||
|
//
|
||
|
|
||
|
|
||
|
typedef
|
||
|
BOOLEAN
|
||
|
(*W_CHECK_FOR_HANG_HANDLER)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*W_DISABLE_INTERRUPT_HANDLER)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*W_ENABLE_INTERRUPT_HANDLER)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*W_HALT_HANDLER)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*W_HANDLE_INTERRUPT_HANDLER)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(*W_INITIALIZE_HANDLER)(
|
||
|
__out PNDIS_STATUS OpenErrorStatus,
|
||
|
__out PUINT SelectedMediumIndex,
|
||
|
__in PNDIS_MEDIUM MediumArray,
|
||
|
__in UINT MediumArraySize,
|
||
|
__in NDIS_HANDLE MiniportAdapterContext,
|
||
|
__in NDIS_HANDLE WrapperConfigurationContext
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*W_ISR_HANDLER)(
|
||
|
__out PBOOLEAN InterruptRecognized,
|
||
|
__out PBOOLEAN QueueMiniportHandleInterrupt,
|
||
|
__in NDIS_HANDLE MiniportAdapterContext
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(*W_QUERY_INFORMATION_HANDLER)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext,
|
||
|
__in NDIS_OID Oid,
|
||
|
__in PVOID InformationBuffer,
|
||
|
__in ULONG InformationBufferLength,
|
||
|
__out PULONG BytesWritten,
|
||
|
__out PULONG BytesNeeded
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(*W_RECONFIGURE_HANDLER)(
|
||
|
__out PNDIS_STATUS OpenErrorStatus,
|
||
|
__in NDIS_HANDLE MiniportAdapterContext OPTIONAL,
|
||
|
__in NDIS_HANDLE WrapperConfigurationContext
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(*W_RESET_HANDLER)(
|
||
|
__out PBOOLEAN AddressingReset,
|
||
|
__in NDIS_HANDLE MiniportAdapterContext
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(*W_SEND_HANDLER)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext,
|
||
|
__in PNDIS_PACKET Packet,
|
||
|
__in UINT Flags
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(*WM_SEND_HANDLER)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext,
|
||
|
__in NDIS_HANDLE NdisLinkHandle,
|
||
|
__in PNDIS_WAN_PACKET Packet
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(*W_SET_INFORMATION_HANDLER)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext,
|
||
|
__in NDIS_OID Oid,
|
||
|
__in PVOID InformationBuffer,
|
||
|
__in ULONG InformationBufferLength,
|
||
|
__out PULONG BytesRead,
|
||
|
__out PULONG BytesNeeded
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(*W_TRANSFER_DATA_HANDLER)(
|
||
|
__out PNDIS_PACKET Packet,
|
||
|
__out PUINT BytesTransferred,
|
||
|
__in NDIS_HANDLE MiniportAdapterContext,
|
||
|
__in NDIS_HANDLE MiniportReceiveContext,
|
||
|
__in UINT ByteOffset,
|
||
|
__in UINT BytesToTransfer
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(*WM_TRANSFER_DATA_HANDLER)(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Definition for shutdown handler
|
||
|
//
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*ADAPTER_SHUTDOWN_HANDLER) (
|
||
|
__in PVOID ShutdownContext
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Miniport extensions for NDIS 4.0
|
||
|
//
|
||
|
typedef
|
||
|
VOID
|
||
|
(*W_RETURN_PACKET_HANDLER)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext,
|
||
|
__in PNDIS_PACKET Packet
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// NDIS 4.0 extension
|
||
|
//
|
||
|
typedef
|
||
|
VOID
|
||
|
(*W_SEND_PACKETS_HANDLER)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext,
|
||
|
__in PPNDIS_PACKET PacketArray,
|
||
|
__in UINT NumberOfPackets
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*W_ALLOCATE_COMPLETE_HANDLER)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext,
|
||
|
__in PVOID VirtualAddress,
|
||
|
__in PNDIS_PHYSICAL_ADDRESS PhysicalAddress,
|
||
|
__in ULONG Length,
|
||
|
__in PVOID Context
|
||
|
);
|
||
|
|
||
|
#endif // NDIS_LEGACY_MINIPORT
|
||
|
|
||
|
|
||
|
//
|
||
|
// W_CO_CREATE_VC_HANDLER is a synchronous call
|
||
|
//
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(MINIPORT_CO_CREATE_VC)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext,
|
||
|
__in NDIS_HANDLE NdisVcHandle,
|
||
|
__out PNDIS_HANDLE MiniportVcContext
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_CO_CREATE_VC (*W_CO_CREATE_VC_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(MINIPORT_CO_DELETE_VC)(
|
||
|
__in NDIS_HANDLE MiniportVcContext
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_CO_DELETE_VC (*W_CO_DELETE_VC_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(MINIPORT_CO_ACTIVATE_VC)(
|
||
|
__in NDIS_HANDLE MiniportVcContext,
|
||
|
__inout PCO_CALL_PARAMETERS CallParameters
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_CO_ACTIVATE_VC (*W_CO_ACTIVATE_VC_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(MINIPORT_CO_DEACTIVATE_VC)(
|
||
|
__in NDIS_HANDLE MiniportVcContext
|
||
|
);
|
||
|
typedef MINIPORT_CO_DEACTIVATE_VC (*W_CO_DEACTIVATE_VC_HANDLER);
|
||
|
|
||
|
#if NDIS_LEGACY_MINIPORT
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*W_CO_SEND_PACKETS_HANDLER)(
|
||
|
__in NDIS_HANDLE MiniportVcContext,
|
||
|
__in PPNDIS_PACKET PacketArray,
|
||
|
__in UINT NumberOfPackets
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(*W_CO_REQUEST_HANDLER)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext,
|
||
|
__in NDIS_HANDLE MiniportVcContext OPTIONAL,
|
||
|
__inout PNDIS_REQUEST NdisRequest
|
||
|
);
|
||
|
|
||
|
#endif // NDIS_LEGACY_MINIPORT
|
||
|
|
||
|
|
||
|
#if NDIS_SUPPORT_NDIS6
|
||
|
|
||
|
//
|
||
|
// CONDIS 6.0 handlers
|
||
|
//
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(MINIPORT_CO_SEND_NET_BUFFER_LISTS)(
|
||
|
__in NDIS_HANDLE MiniportVcContext,
|
||
|
__in PNET_BUFFER_LIST NetBufferLists,
|
||
|
__in ULONG SendFlags
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_CO_SEND_NET_BUFFER_LISTS (*W_CO_SEND_NET_BUFFER_LISTS_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(MINIPORT_CO_OID_REQUEST)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext,
|
||
|
__in NDIS_HANDLE MiniportVcContext OPTIONAL,
|
||
|
__inout PNDIS_OID_REQUEST NdisRequest
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_CO_OID_REQUEST (*W_CO_OID_REQUEST_HANDLER);
|
||
|
|
||
|
#endif // NDIS_SUPPORT_NDIS6
|
||
|
|
||
|
typedef enum _NDIS_DEVICE_PNP_EVENT
|
||
|
{
|
||
|
NdisDevicePnPEventQueryRemoved,
|
||
|
NdisDevicePnPEventRemoved,
|
||
|
NdisDevicePnPEventSurpriseRemoved,
|
||
|
NdisDevicePnPEventQueryStopped,
|
||
|
NdisDevicePnPEventStopped,
|
||
|
NdisDevicePnPEventPowerProfileChanged,
|
||
|
#if NDIS_SUPPORT_NDIS6
|
||
|
NdisDevicePnPEventFilterListChanged,
|
||
|
#endif // NDIS_SUPPORT_NDIS6
|
||
|
NdisDevicePnPEventMaximum
|
||
|
} NDIS_DEVICE_PNP_EVENT, *PNDIS_DEVICE_PNP_EVENT;
|
||
|
|
||
|
//
|
||
|
// power profiles
|
||
|
//
|
||
|
typedef enum _NDIS_POWER_PROFILE
|
||
|
{
|
||
|
NdisPowerProfileBattery,
|
||
|
NdisPowerProfileAcOnLine
|
||
|
} NDIS_POWER_PROFILE, *PNDIS_POWER_PROFILE;
|
||
|
|
||
|
#if NDIS_LEGACY_MINIPORT
|
||
|
|
||
|
typedef struct _NDIS50_MINIPORT_CHARACTERISTICS
|
||
|
{
|
||
|
UCHAR MajorNdisVersion;
|
||
|
UCHAR MinorNdisVersion;
|
||
|
USHORT Filler;
|
||
|
UINT Reserved;
|
||
|
W_CHECK_FOR_HANG_HANDLER CheckForHangHandler;
|
||
|
W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler;
|
||
|
W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler;
|
||
|
W_HALT_HANDLER HaltHandler;
|
||
|
W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler;
|
||
|
W_INITIALIZE_HANDLER InitializeHandler;
|
||
|
W_ISR_HANDLER ISRHandler;
|
||
|
W_QUERY_INFORMATION_HANDLER QueryInformationHandler;
|
||
|
W_RECONFIGURE_HANDLER ReconfigureHandler;
|
||
|
W_RESET_HANDLER ResetHandler;
|
||
|
union
|
||
|
{
|
||
|
W_SEND_HANDLER SendHandler;
|
||
|
WM_SEND_HANDLER WanSendHandler;
|
||
|
};
|
||
|
W_SET_INFORMATION_HANDLER SetInformationHandler;
|
||
|
union
|
||
|
{
|
||
|
W_TRANSFER_DATA_HANDLER TransferDataHandler;
|
||
|
WM_TRANSFER_DATA_HANDLER WanTransferDataHandler;
|
||
|
};
|
||
|
|
||
|
//
|
||
|
// Extensions for NDIS 4.0
|
||
|
//
|
||
|
W_RETURN_PACKET_HANDLER ReturnPacketHandler;
|
||
|
W_SEND_PACKETS_HANDLER SendPacketsHandler;
|
||
|
W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
|
||
|
|
||
|
//
|
||
|
// Extensions for NDIS 5.0
|
||
|
//
|
||
|
W_CO_CREATE_VC_HANDLER CoCreateVcHandler;
|
||
|
W_CO_DELETE_VC_HANDLER CoDeleteVcHandler;
|
||
|
W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler;
|
||
|
W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler;
|
||
|
W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler;
|
||
|
W_CO_REQUEST_HANDLER CoRequestHandler;
|
||
|
} NDIS50_MINIPORT_CHARACTERISTICS;
|
||
|
|
||
|
#if (((NDIS_MINIPORT_MAJOR_VERSION == 5) && (NDIS_MINIPORT_MINOR_VERSION == 1)) || NDIS_WRAPPER)
|
||
|
//
|
||
|
// Miniport extensions for NDIS 5.1
|
||
|
//
|
||
|
typedef VOID
|
||
|
(*W_CANCEL_SEND_PACKETS_HANDLER)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext,
|
||
|
__in PVOID CancelId
|
||
|
);
|
||
|
|
||
|
typedef VOID
|
||
|
(*W_PNP_EVENT_NOTIFY_HANDLER)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext,
|
||
|
__in NDIS_DEVICE_PNP_EVENT DevicePnPEvent,
|
||
|
__in PVOID InformationBuffer,
|
||
|
__in ULONG InformationBufferLength
|
||
|
);
|
||
|
|
||
|
typedef VOID
|
||
|
(*W_MINIPORT_SHUTDOWN_HANDLER) (
|
||
|
__in NDIS_HANDLE MiniportAdapterContext
|
||
|
);
|
||
|
|
||
|
#endif // (((NDIS_MINIPORT_MAJOR_VERSION == 5) && (NDIS_MINIPORT_MINOR_VERSION == 1)) || NDIS_WRAPPER)
|
||
|
|
||
|
#endif // NDIS_LEGACY_MINIPORT
|
||
|
|
||
|
#if NDIS_SUPPORT_NDIS6
|
||
|
typedef
|
||
|
BOOLEAN
|
||
|
(MINIPORT_ISR)(
|
||
|
__in NDIS_HANDLE MiniportInterruptContext,
|
||
|
__out PBOOLEAN QueueDefaultInterruptDpc,
|
||
|
__out PULONG TargetProcessors
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_ISR (*MINIPORT_ISR_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(MINIPORT_INTERRUPT_DPC)(
|
||
|
__in NDIS_HANDLE MiniportInterruptContext,
|
||
|
__in PVOID MiniportDpcContext,
|
||
|
__in PVOID ReceiveThrottleParameters,
|
||
|
__in PVOID NdisReserved2
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_INTERRUPT_DPC (*MINIPORT_INTERRUPT_DPC_HANDLER);
|
||
|
|
||
|
#if NDIS_SUPPORT_NDIS620
|
||
|
|
||
|
typedef struct _NDIS_RECEIVE_THROTTLE_PARAMETERS
|
||
|
{
|
||
|
__in ULONG MaxNblsToIndicate;
|
||
|
__out ULONG MoreNblsPending:1;
|
||
|
} NDIS_RECEIVE_THROTTLE_PARAMETERS, *PNDIS_RECEIVE_THROTTLE_PARAMETERS;
|
||
|
|
||
|
#define NDIS_INDICATE_ALL_NBLS (~0ul)
|
||
|
|
||
|
#endif
|
||
|
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(MINIPORT_DISABLE_INTERRUPT)(
|
||
|
__in NDIS_HANDLE MiniportInterruptContext
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_DISABLE_INTERRUPT (*MINIPORT_DISABLE_INTERRUPT_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(MINIPORT_ENABLE_INTERRUPT)(
|
||
|
__in NDIS_HANDLE MiniportInterruptContext
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_ENABLE_INTERRUPT (*MINIPORT_ENABLE_INTERRUPT_HANDLER);
|
||
|
//
|
||
|
// MSI support handlers
|
||
|
//
|
||
|
typedef
|
||
|
BOOLEAN
|
||
|
(MINIPORT_MESSAGE_INTERRUPT)(
|
||
|
__in NDIS_HANDLE MiniportInterruptContext,
|
||
|
__in ULONG MessageId,
|
||
|
__out PBOOLEAN QueueDefaultInterruptDpc,
|
||
|
__out PULONG TargetProcessors
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_MESSAGE_INTERRUPT (*MINIPORT_MSI_ISR_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(MINIPORT_MESSAGE_INTERRUPT_DPC)(
|
||
|
__in NDIS_HANDLE MiniportInterruptContext,
|
||
|
__in ULONG MessageId,
|
||
|
__in PVOID MiniportDpcContext,
|
||
|
#if NDIS_SUPPORT_NDIS620
|
||
|
__in PVOID ReceiveThrottleParameters,
|
||
|
__in PVOID NdisReserved2
|
||
|
#else
|
||
|
__in PULONG NdisReserved1,
|
||
|
__in PULONG NdisReserved2
|
||
|
#endif
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_MESSAGE_INTERRUPT_DPC (*MINIPORT_MSI_INTERRUPT_DPC_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(MINIPORT_DISABLE_MESSAGE_INTERRUPT)(
|
||
|
__in NDIS_HANDLE MiniportInterruptContext,
|
||
|
__in ULONG MessageId
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_DISABLE_MESSAGE_INTERRUPT (*MINIPORT_DISABLE_MSI_INTERRUPT_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(MINIPORT_ENABLE_MESSAGE_INTERRUPT)(
|
||
|
__in NDIS_HANDLE MiniportInterruptContext,
|
||
|
__in ULONG MessageId
|
||
|
);
|
||
|
typedef MINIPORT_ENABLE_MESSAGE_INTERRUPT (*MINIPORT_ENABLE_MSI_INTERRUPT_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
BOOLEAN
|
||
|
(MINIPORT_SYNCHRONIZE_INTERRUPT)(
|
||
|
__in NDIS_HANDLE SynchronizeContext
|
||
|
);
|
||
|
typedef MINIPORT_SYNCHRONIZE_INTERRUPT (*MINIPORT_SYNCHRONIZE_INTERRUPT_HANDLER);
|
||
|
typedef MINIPORT_SYNCHRONIZE_INTERRUPT (MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT);
|
||
|
typedef MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT (*MINIPORT_SYNCHRONIZE_MSI_INTERRUPT_HANDLER);
|
||
|
|
||
|
typedef enum _NDIS_INTERRUPT_TYPE
|
||
|
{
|
||
|
NDIS_CONNECT_LINE_BASED = 1,
|
||
|
NDIS_CONNECT_MESSAGE_BASED
|
||
|
} NDIS_INTERRUPT_TYPE, *PNDIS_INTERRUPT_TYPE;
|
||
|
|
||
|
#define NDIS_MINIPORT_INTERRUPT_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS
|
||
|
{
|
||
|
__in NDIS_OBJECT_HEADER Header;
|
||
|
__in MINIPORT_ISR_HANDLER InterruptHandler;
|
||
|
__in MINIPORT_INTERRUPT_DPC_HANDLER InterruptDpcHandler;
|
||
|
__in MINIPORT_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler;
|
||
|
__in MINIPORT_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler;
|
||
|
__in BOOLEAN MsiSupported;
|
||
|
__in BOOLEAN MsiSyncWithAllMessages;
|
||
|
__in MINIPORT_MSI_ISR_HANDLER MessageInterruptHandler;
|
||
|
__in MINIPORT_MSI_INTERRUPT_DPC_HANDLER MessageInterruptDpcHandler;
|
||
|
__in MINIPORT_DISABLE_MSI_INTERRUPT_HANDLER DisableMessageInterruptHandler;
|
||
|
__in MINIPORT_ENABLE_MSI_INTERRUPT_HANDLER EnableMessageInterruptHandler;
|
||
|
__out NDIS_INTERRUPT_TYPE InterruptType;
|
||
|
__out PIO_INTERRUPT_MESSAGE_INFO MessageInfoTable;
|
||
|
} NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS, *PNDIS_MINIPORT_INTERRUPT_CHARACTERISTICS;
|
||
|
|
||
|
#define NDIS_SIZEOF_MINIPORT_INTERRUPT_CHARACTERISTICS_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS, MessageInfoTable)
|
||
|
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(MINIPORT_ADD_DEVICE)(
|
||
|
__in NDIS_HANDLE NdisMiniportHandle,
|
||
|
__in NDIS_HANDLE MiniportDriverContext
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_ADD_DEVICE (*MINIPORT_ADD_DEVICE_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(MINIPORT_REMOVE_DEVICE)(
|
||
|
__in NDIS_HANDLE MiniportAddDeviceContext
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_REMOVE_DEVICE (*MINIPORT_REMOVE_DEVICE_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(MINIPORT_PNP_IRP)(
|
||
|
__in NDIS_HANDLE MiniportAddDeviceContext,
|
||
|
__in PIRP Irp
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_PNP_IRP (*MINIPORT_PNP_IRP_HANDLER);
|
||
|
|
||
|
typedef MINIPORT_PNP_IRP (MINIPORT_START_DEVICE);
|
||
|
typedef MINIPORT_PNP_IRP (* MINIPORT_START_DEVICE_HANDLER);
|
||
|
typedef MINIPORT_PNP_IRP (MINIPORT_FILTER_RESOURCE_REQUIREMENTS);
|
||
|
typedef MINIPORT_PNP_IRP (*MINIPORT_FILTER_RESOURCE_REQUIREMENTS_HANDLER);
|
||
|
|
||
|
#define NDIS_MINIPORT_PNP_CHARACTERISTICS_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_MINIPORT_PNP_CHARACTERISTICS
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
MINIPORT_ADD_DEVICE_HANDLER MiniportAddDeviceHandler;
|
||
|
MINIPORT_REMOVE_DEVICE_HANDLER MiniportRemoveDeviceHandler;
|
||
|
MINIPORT_FILTER_RESOURCE_REQUIREMENTS_HANDLER MiniportFilterResourceRequirementsHandler;
|
||
|
MINIPORT_START_DEVICE_HANDLER MiniportStartDeviceHandler;
|
||
|
ULONG Flags;
|
||
|
|
||
|
} NDIS_MINIPORT_PNP_CHARACTERISTICS, *PNDIS_MINIPORT_PNP_CHARACTERISTICS;
|
||
|
|
||
|
#define NDIS_SIZEOF_MINIPORT_PNP_CHARACTERISTICS_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_MINIPORT_PNP_CHARACTERISTICS, Flags)
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMRegisterInterruptEx(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in NDIS_HANDLE MiniportInterruptContext,
|
||
|
__in PNDIS_MINIPORT_INTERRUPT_CHARACTERISTICS MiniportInterruptCharacteristics,
|
||
|
__out PNDIS_HANDLE NdisInterruptHandle
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMDeregisterInterruptEx(
|
||
|
__in NDIS_HANDLE NdisInterruptHandle
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
BOOLEAN
|
||
|
NdisMSynchronizeWithInterruptEx(
|
||
|
__in NDIS_HANDLE NdisInterruptHandle,
|
||
|
__in ULONG MessageId,
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
__in MINIPORT_SYNCHRONIZE_INTERRUPT_HANDLER SynchronizeFunction,
|
||
|
#else
|
||
|
__in PVOID SynchronizeFunction,
|
||
|
#endif
|
||
|
__in __drv_isObjectPointer
|
||
|
PVOID SynchronizeContext
|
||
|
);
|
||
|
|
||
|
#if NDIS_SUPPORT_60_COMPATIBLE_API
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
ULONG
|
||
|
NdisMQueueDpc(
|
||
|
__in NDIS_HANDLE NdisInterruptHandle,
|
||
|
__in ULONG MessageId,
|
||
|
__in ULONG TargetProcessors,
|
||
|
__in_opt __drv_isObjectPointer
|
||
|
PVOID MiniportDpcContext
|
||
|
);
|
||
|
|
||
|
#endif
|
||
|
|
||
|
#if NDIS_SUPPORT_NDIS620
|
||
|
|
||
|
EXPORT
|
||
|
KAFFINITY
|
||
|
NdisMQueueDpcEx(
|
||
|
IN NDIS_HANDLE NdisInterruptHandle,
|
||
|
IN ULONG MessageId,
|
||
|
IN PGROUP_AFFINITY TargetProcessors,
|
||
|
IN PVOID MiniportDpcContext
|
||
|
);
|
||
|
|
||
|
#endif
|
||
|
|
||
|
|
||
|
|
||
|
#endif // NDIS_SUPPORT_NDIS6
|
||
|
|
||
|
#if NDIS_LEGACY_MINIPORT
|
||
|
#if (((NDIS_MINIPORT_MAJOR_VERSION == 5) && (NDIS_MINIPORT_MINOR_VERSION == 1)) || NDIS_WRAPPER)
|
||
|
typedef struct _NDIS51_MINIPORT_CHARACTERISTICS
|
||
|
{
|
||
|
#ifdef __cplusplus
|
||
|
NDIS50_MINIPORT_CHARACTERISTICS Ndis50Chars;
|
||
|
#else
|
||
|
NDIS50_MINIPORT_CHARACTERISTICS;
|
||
|
#endif
|
||
|
//
|
||
|
// Extensions for NDIS 5.1
|
||
|
//
|
||
|
W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler;
|
||
|
W_PNP_EVENT_NOTIFY_HANDLER PnPEventNotifyHandler;
|
||
|
W_MINIPORT_SHUTDOWN_HANDLER AdapterShutdownHandler;
|
||
|
PVOID Reserved1;
|
||
|
PVOID Reserved2;
|
||
|
PVOID Reserved3;
|
||
|
PVOID Reserved4;
|
||
|
} NDIS51_MINIPORT_CHARACTERISTICS;
|
||
|
#endif // (((NDIS_MINIPORT_MAJOR_VERSION == 5) && (NDIS_MINIPORT_MINOR_VERSION == 1)) || NDIS_WRAPPER)
|
||
|
|
||
|
typedef struct _NDIS_MINIPORT_INTERRUPT
|
||
|
{
|
||
|
PKINTERRUPT InterruptObject;
|
||
|
KSPIN_LOCK DpcCountLock;
|
||
|
PVOID Reserved;
|
||
|
W_ISR_HANDLER MiniportIsr;
|
||
|
W_HANDLE_INTERRUPT_HANDLER MiniportDpc;
|
||
|
KDPC InterruptDpc;
|
||
|
PNDIS_MINIPORT_BLOCK Miniport;
|
||
|
|
||
|
UCHAR DpcCount;
|
||
|
BOOLEAN Filler1;
|
||
|
|
||
|
//
|
||
|
// This is used to tell when all the Dpcs for the adapter are completed.
|
||
|
//
|
||
|
|
||
|
KEVENT DpcsCompletedEvent;
|
||
|
|
||
|
BOOLEAN SharedInterrupt;
|
||
|
BOOLEAN IsrRequested;
|
||
|
|
||
|
} NDIS_MINIPORT_INTERRUPT, *PNDIS_MINIPORT_INTERRUPT;
|
||
|
#endif // NDIS_LEGACY_MINIPORT
|
||
|
|
||
|
typedef struct _NDIS_MINIPORT_TIMER
|
||
|
{
|
||
|
KTIMER Timer;
|
||
|
KDPC Dpc;
|
||
|
PNDIS_TIMER_FUNCTION MiniportTimerFunction;
|
||
|
PVOID MiniportTimerContext;
|
||
|
PNDIS_MINIPORT_BLOCK Miniport;
|
||
|
struct _NDIS_MINIPORT_TIMER *NextTimer;
|
||
|
} NDIS_MINIPORT_TIMER, *PNDIS_MINIPORT_TIMER;
|
||
|
|
||
|
#if NDIS_LEGACY_MINIPORT
|
||
|
typedef
|
||
|
VOID
|
||
|
(*ETH_RCV_INDICATE_HANDLER)(
|
||
|
__in PETH_FILTER Filter,
|
||
|
__in NDIS_HANDLE MacReceiveContext,
|
||
|
__in PCHAR Address,
|
||
|
__in PVOID HeaderBuffer,
|
||
|
__in UINT HeaderBufferSize,
|
||
|
__in PVOID LookaheadBuffer,
|
||
|
__in UINT LookaheadBufferSize,
|
||
|
__in UINT PacketSize
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*ETH_RCV_COMPLETE_HANDLER)(
|
||
|
__in PETH_FILTER Filter
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*TR_RCV_INDICATE_HANDLER)(
|
||
|
__in PTR_FILTER Filter,
|
||
|
__in NDIS_HANDLE MacReceiveContext,
|
||
|
__in PVOID HeaderBuffer,
|
||
|
__in UINT HeaderBufferSize,
|
||
|
__in PVOID LookaheadBuffer,
|
||
|
__in UINT LookaheadBufferSize,
|
||
|
__in UINT PacketSize
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*TR_RCV_COMPLETE_HANDLER)(
|
||
|
__in PTR_FILTER Filter
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*WAN_RCV_HANDLER)(
|
||
|
__out PNDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in NDIS_HANDLE NdisLinkContext,
|
||
|
__in PUCHAR Packet,
|
||
|
__in ULONG PacketSize
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*WAN_RCV_COMPLETE_HANDLER)(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in NDIS_HANDLE NdisLinkContext
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*NDIS_M_SEND_COMPLETE_HANDLER)(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in PNDIS_PACKET Packet,
|
||
|
__in NDIS_STATUS Status
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*NDIS_WM_SEND_COMPLETE_HANDLER)(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in PVOID Packet,
|
||
|
__in NDIS_STATUS Status
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*NDIS_M_TD_COMPLETE_HANDLER)(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in PNDIS_PACKET Packet,
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in UINT BytesTransferred
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*NDIS_M_SEND_RESOURCES_HANDLER)(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*NDIS_M_STATUS_HANDLER)(
|
||
|
__in NDIS_HANDLE MiniportHandle,
|
||
|
__in NDIS_STATUS GeneralStatus,
|
||
|
__in PVOID StatusBuffer,
|
||
|
__in UINT StatusBufferSize
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*NDIS_M_STS_COMPLETE_HANDLER)(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*NDIS_M_REQ_COMPLETE_HANDLER)(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in NDIS_STATUS Status
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(*NDIS_M_RESET_COMPLETE_HANDLER)(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in BOOLEAN AddressingReset
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
BOOLEAN
|
||
|
(FASTCALL *NDIS_M_START_SENDS)(
|
||
|
__in PNDIS_MINIPORT_BLOCK Miniport
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Wrapper initialization and termination.
|
||
|
//
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisInitializeWrapper(
|
||
|
OUT PNDIS_HANDLE NdisWrapperHandle,
|
||
|
IN PVOID SystemSpecific1,
|
||
|
IN PVOID SystemSpecific2,
|
||
|
IN PVOID SystemSpecific3
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisTerminateWrapper(
|
||
|
__in NDIS_HANDLE NdisWrapperHandle,
|
||
|
__in PVOID SystemSpecific
|
||
|
);
|
||
|
|
||
|
#endif // NDIS_LEGACY_MINIPORT
|
||
|
|
||
|
#if NDIS_SUPPORT_NDIS6
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(MINIPORT_PROCESS_SG_LIST)(
|
||
|
__in PDEVICE_OBJECT pDO,
|
||
|
__in PVOID Reserved,
|
||
|
__in PSCATTER_GATHER_LIST pSGL,
|
||
|
__in PVOID Context
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_PROCESS_SG_LIST (*MINIPORT_PROCESS_SG_LIST_HANDLER);
|
||
|
//
|
||
|
// NDIS DMA description structure
|
||
|
//
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(MINIPORT_ALLOCATE_SHARED_MEM_COMPLETE)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext,
|
||
|
__in PVOID VirtualAddress,
|
||
|
__in PNDIS_PHYSICAL_ADDRESS PhysicalAddress,
|
||
|
__in ULONG Length,
|
||
|
__in PVOID Context
|
||
|
);
|
||
|
typedef MINIPORT_ALLOCATE_SHARED_MEM_COMPLETE (*MINIPORT_ALLOCATE_SHARED_MEM_COMPLETE_HANDLER);
|
||
|
|
||
|
/*
|
||
|
NDIS_STATUS
|
||
|
NdisMAllocateSharedMemoryAsyncEx(
|
||
|
IN NDIS_HANDLE MiniportDmaHandle,
|
||
|
IN ULONG Length,
|
||
|
IN BOOLEAN Cached,
|
||
|
IN PVOID Context
|
||
|
);
|
||
|
*/
|
||
|
#define NdisMAllocateSharedMemoryAsyncEx(_H, _L, _C, _X) NdisMAllocateSharedMemoryAsync(_H, _L, _C, _X)
|
||
|
#endif // NDIS_SUPPORT_NDIS6
|
||
|
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMAllocateSharedMemoryAsync(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in ULONG Length,
|
||
|
__in BOOLEAN Cached,
|
||
|
__in PVOID Context
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// defintions for subordinate (as referred in Master/subordinate) DMA
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// 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;
|
||
|
|
||
|
//
|
||
|
// Internal structure representing an NDIS DMA channel
|
||
|
//
|
||
|
typedef struct _NDIS_DMA_BLOCK
|
||
|
{
|
||
|
PVOID MapRegisterBase;
|
||
|
KEVENT AllocationEvent;
|
||
|
PVOID SystemAdapterObject;
|
||
|
PVOID Miniport;
|
||
|
BOOLEAN InProgress;
|
||
|
} NDIS_DMA_BLOCK, *PNDIS_DMA_BLOCK;
|
||
|
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisSetupDmaTransfer(
|
||
|
OUT PNDIS_STATUS Status,
|
||
|
IN NDIS_HANDLE NdisDmaHandle,
|
||
|
IN PNDIS_BUFFER Buffer,
|
||
|
IN ULONG Offset,
|
||
|
IN ULONG Length,
|
||
|
IN BOOLEAN WriteToDevice
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCompleteDmaTransfer(
|
||
|
OUT PNDIS_STATUS Status,
|
||
|
IN NDIS_HANDLE NdisDmaHandle,
|
||
|
IN PNDIS_BUFFER Buffer,
|
||
|
IN ULONG Offset,
|
||
|
IN ULONG Length,
|
||
|
IN BOOLEAN WriteToDevice
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMRegisterDmaChannel(
|
||
|
__out PNDIS_HANDLE MiniportDmaHandle,
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in UINT DmaChannel,
|
||
|
__in BOOLEAN Dma32BitAddresses,
|
||
|
__in PNDIS_DMA_DESCRIPTION DmaDescription,
|
||
|
__in ULONG MaximumLength
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMDeregisterDmaChannel(
|
||
|
__in NDIS_HANDLE MiniportDmaHandle
|
||
|
);
|
||
|
|
||
|
/*++
|
||
|
VOID
|
||
|
NdisMSetupDmaTransfer(
|
||
|
OUT PNDIS_STATUS Status,
|
||
|
IN NDIS_HANDLE MiniportDmaHandle,
|
||
|
IN PNDIS_BUFFER Buffer,
|
||
|
IN ULONG Offset,
|
||
|
IN ULONG Length,
|
||
|
IN BOOLEAN WriteToDevice
|
||
|
)
|
||
|
--*/
|
||
|
#define NdisMSetupDmaTransfer(_S, _H, _B, _O, _L, _M_) \
|
||
|
NdisSetupDmaTransfer(_S, _H, _B, _O, _L, _M_)
|
||
|
|
||
|
/*++
|
||
|
VOID
|
||
|
NdisMCompleteDmaTransfer(
|
||
|
OUT PNDIS_STATUS Status,
|
||
|
IN NDIS_HANDLE MiniportDmaHandle,
|
||
|
IN PNDIS_BUFFER Buffer,
|
||
|
IN ULONG Offset,
|
||
|
IN ULONG Length,
|
||
|
IN BOOLEAN WriteToDevice
|
||
|
)
|
||
|
--*/
|
||
|
#define NdisMCompleteDmaTransfer(_S, _H, _B, _O, _L, _M_) \
|
||
|
NdisCompleteDmaTransfer(_S, _H, _B, _O, _L, _M_)
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
ULONG
|
||
|
NdisMReadDmaCounter(
|
||
|
__in NDIS_HANDLE MiniportDmaHandle
|
||
|
);
|
||
|
|
||
|
|
||
|
//
|
||
|
// This API has been deprecated
|
||
|
//
|
||
|
DECLSPEC_DEPRECATED_DDK
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisUpdateSharedMemory(
|
||
|
IN NDIS_HANDLE NdisAdapterHandle,
|
||
|
IN ULONG Length,
|
||
|
IN PVOID VirtualAddress,
|
||
|
IN NDIS_PHYSICAL_ADDRESS PhysicalAddress
|
||
|
);
|
||
|
|
||
|
|
||
|
#if NDIS_SUPPORT_NDIS6
|
||
|
|
||
|
|
||
|
//
|
||
|
// Flags used in NDIS_SG_DMA_DESCRIPTION
|
||
|
//
|
||
|
|
||
|
#define NDIS_SG_DMA_64_BIT_ADDRESS 0x00000001
|
||
|
|
||
|
//
|
||
|
// supported revision
|
||
|
//
|
||
|
#define NDIS_SG_DMA_DESCRIPTION_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_SG_DMA_DESCRIPTION
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
ULONG Flags;
|
||
|
ULONG MaximumPhysicalMapping;
|
||
|
MINIPORT_PROCESS_SG_LIST_HANDLER ProcessSGListHandler;
|
||
|
MINIPORT_ALLOCATE_SHARED_MEM_COMPLETE_HANDLER SharedMemAllocateCompleteHandler;
|
||
|
ULONG ScatterGatherListSize;
|
||
|
} NDIS_SG_DMA_DESCRIPTION, *PNDIS_SG_DMA_DESCRIPTION;
|
||
|
|
||
|
#define NDIS_SIZEOF_SG_DMA_DESCRIPTION_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_SG_DMA_DESCRIPTION, ScatterGatherListSize)
|
||
|
|
||
|
#define NDIS_MINIPORT_INIT_PARAMETERS_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_MINIPORT_INIT_PARAMETERS
|
||
|
{
|
||
|
__in NDIS_OBJECT_HEADER Header;
|
||
|
__in ULONG Flags;
|
||
|
__in PNDIS_RESOURCE_LIST AllocatedResources;
|
||
|
__in NDIS_HANDLE IMDeviceInstanceContext;
|
||
|
__in NDIS_HANDLE MiniportAddDeviceContext;
|
||
|
__in NET_IFINDEX IfIndex;
|
||
|
__in NET_LUID NetLuid;
|
||
|
__in PNDIS_PORT_AUTHENTICATION_PARAMETERS DefaultPortAuthStates;
|
||
|
__in PNDIS_PCI_DEVICE_CUSTOM_PROPERTIES PciDeviceCustomProperties;
|
||
|
} NDIS_MINIPORT_INIT_PARAMETERS, *PNDIS_MINIPORT_INIT_PARAMETERS;
|
||
|
|
||
|
#define NDIS_SIZEOF_MINIPORT_INIT_PARAMETER_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_MINIPORT_INIT_PARAMETERS, PciDeviceCustomProperties)
|
||
|
|
||
|
//
|
||
|
// NDIS_MINIPORT_RESTART_PARAMETERS is used in MINIPORT_RESTART handler
|
||
|
//
|
||
|
#define NDIS_MINIPORT_RESTART_PARAMETERS_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_MINIPORT_RESTART_PARAMETERS
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
PNDIS_RESTART_ATTRIBUTES RestartAttributes;
|
||
|
ULONG Flags;
|
||
|
} NDIS_MINIPORT_RESTART_PARAMETERS, *PNDIS_MINIPORT_RESTART_PARAMETERS;
|
||
|
|
||
|
#define NDIS_SIZEOF_MINIPORT_RESTART_PARAMETERS_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_MINIPORT_RESTART_PARAMETERS, Flags)
|
||
|
|
||
|
#define NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
NDIS_HANDLE MiniportAdapterContext;
|
||
|
ULONG AttributeFlags;
|
||
|
UINT CheckForHangTimeInSeconds;
|
||
|
NDIS_INTERFACE_TYPE InterfaceType;
|
||
|
} NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES, *PNDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES;
|
||
|
|
||
|
#define NDIS_SIZEOF_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES, InterfaceType)
|
||
|
|
||
|
//
|
||
|
// flags used in NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES->SupportedStatistics
|
||
|
//
|
||
|
|
||
|
#define NDIS_STATISTICS_XMIT_OK_SUPPORTED 0x00000001
|
||
|
#define NDIS_STATISTICS_RCV_OK_SUPPORTED 0x00000002
|
||
|
#define NDIS_STATISTICS_XMIT_ERROR_SUPPORTED 0x00000004
|
||
|
#define NDIS_STATISTICS_RCV_ERROR_SUPPORTED 0x00000008
|
||
|
#define NDIS_STATISTICS_RCV_NO_BUFFER_SUPPORTED 0x00000010
|
||
|
#define NDIS_STATISTICS_DIRECTED_BYTES_XMIT_SUPPORTED 0x00000020
|
||
|
#define NDIS_STATISTICS_DIRECTED_FRAMES_XMIT_SUPPORTED 0x00000040
|
||
|
#define NDIS_STATISTICS_MULTICAST_BYTES_XMIT_SUPPORTED 0x00000080
|
||
|
#define NDIS_STATISTICS_MULTICAST_FRAMES_XMIT_SUPPORTED 0x00000100
|
||
|
#define NDIS_STATISTICS_BROADCAST_BYTES_XMIT_SUPPORTED 0x00000200
|
||
|
#define NDIS_STATISTICS_BROADCAST_FRAMES_XMIT_SUPPORTED 0x00000400
|
||
|
#define NDIS_STATISTICS_DIRECTED_BYTES_RCV_SUPPORTED 0x00000800
|
||
|
#define NDIS_STATISTICS_DIRECTED_FRAMES_RCV_SUPPORTED 0x00001000
|
||
|
#define NDIS_STATISTICS_MULTICAST_BYTES_RCV_SUPPORTED 0x00002000
|
||
|
#define NDIS_STATISTICS_MULTICAST_FRAMES_RCV_SUPPORTED 0x00004000
|
||
|
#define NDIS_STATISTICS_BROADCAST_BYTES_RCV_SUPPORTED 0x00008000
|
||
|
#define NDIS_STATISTICS_BROADCAST_FRAMES_RCV_SUPPORTED 0x00010000
|
||
|
#define NDIS_STATISTICS_RCV_CRC_ERROR_SUPPORTED 0x00020000
|
||
|
#define NDIS_STATISTICS_TRANSMIT_QUEUE_LENGTH_SUPPORTED 0x00040000
|
||
|
#define NDIS_STATISTICS_BYTES_RCV_SUPPORTED 0x00080000
|
||
|
#define NDIS_STATISTICS_BYTES_XMIT_SUPPORTED 0x00100000
|
||
|
#define NDIS_STATISTICS_RCV_DISCARDS_SUPPORTED 0x00200000
|
||
|
#define NDIS_STATISTICS_GEN_STATISTICS_SUPPORTED 0x00400000
|
||
|
#define NDIS_STATISTICS_XMIT_DISCARDS_SUPPORTED 0x08000000
|
||
|
|
||
|
|
||
|
#define NDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
NDIS_HANDLE MiniportAddDeviceContext;
|
||
|
ULONG Flags;
|
||
|
|
||
|
} NDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES,
|
||
|
*PNDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES;
|
||
|
|
||
|
#define NDIS_SIZEOF_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES, Flags)
|
||
|
|
||
|
#define NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES_REVISION_1 1
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
#define NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES_REVISION_2 2
|
||
|
#endif
|
||
|
|
||
|
typedef struct _NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
ULONG Flags;
|
||
|
NDIS_MEDIUM MediaType;
|
||
|
NDIS_PHYSICAL_MEDIUM PhysicalMediumType;
|
||
|
ULONG MtuSize;
|
||
|
ULONG64 MaxXmitLinkSpeed;
|
||
|
ULONG64 XmitLinkSpeed;
|
||
|
ULONG64 MaxRcvLinkSpeed;
|
||
|
ULONG64 RcvLinkSpeed;
|
||
|
NDIS_MEDIA_CONNECT_STATE MediaConnectState;
|
||
|
NDIS_MEDIA_DUPLEX_STATE MediaDuplexState;
|
||
|
ULONG LookaheadSize;
|
||
|
PNDIS_PNP_CAPABILITIES PowerManagementCapabilities; // 6.20 drivers must use PowerManagementCapabilitiesEx
|
||
|
ULONG MacOptions;
|
||
|
ULONG SupportedPacketFilters;
|
||
|
ULONG MaxMulticastListSize;
|
||
|
USHORT MacAddressLength;
|
||
|
UCHAR PermanentMacAddress[NDIS_MAX_PHYS_ADDRESS_LENGTH];
|
||
|
UCHAR CurrentMacAddress[NDIS_MAX_PHYS_ADDRESS_LENGTH];
|
||
|
PNDIS_RECEIVE_SCALE_CAPABILITIES RecvScaleCapabilities;
|
||
|
NET_IF_ACCESS_TYPE AccessType; // NET_IF_ACCESS_BROADCAST for a typical ethernet adapter
|
||
|
NET_IF_DIRECTION_TYPE DirectionType; // NET_IF_DIRECTION_SENDRECEIVE for a typical ethernet adapter
|
||
|
NET_IF_CONNECTION_TYPE ConnectionType; // IF_CONNECTION_DEDICATED for a typical ethernet adapter
|
||
|
NET_IFTYPE IfType; // IF_TYPE_ETHERNET_CSMACD for a typical ethernet adapter (regardless of speed)
|
||
|
BOOLEAN IfConnectorPresent; // RFC 2665 TRUE if physical adapter
|
||
|
ULONG SupportedStatistics; // use NDIS_STATISTICS_XXXX_SUPPORTED
|
||
|
ULONG SupportedPauseFunctions; // IEEE 802.3 37.2.1
|
||
|
ULONG DataBackFillSize;
|
||
|
ULONG ContextBackFillSize;
|
||
|
PNDIS_OID SupportedOidList;
|
||
|
ULONG SupportedOidListLength;
|
||
|
ULONG AutoNegotiationFlags;
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
PNDIS_PM_CAPABILITIES PowerManagementCapabilitiesEx;
|
||
|
#endif
|
||
|
} NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES, *PNDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES;
|
||
|
|
||
|
#define NDIS_SIZEOF_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES, AutoNegotiationFlags)
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
#define NDIS_SIZEOF_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES_REVISION_2 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES, PowerManagementCapabilitiesEx)
|
||
|
#endif
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
|
||
|
//
|
||
|
// Flags and structure for Header/Data split
|
||
|
//
|
||
|
#define NDIS_HD_SPLIT_ATTRIBUTES_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_HD_SPLIT_ATTRIBUTES
|
||
|
{
|
||
|
__in NDIS_OBJECT_HEADER Header;
|
||
|
__in ULONG HardwareCapabilities;
|
||
|
__in ULONG CurrentCapabilities;
|
||
|
__out ULONG HDSplitFlags;
|
||
|
__out ULONG BackfillSize;
|
||
|
__out ULONG MaxHeaderSize;
|
||
|
} NDIS_HD_SPLIT_ATTRIBUTES, *PNDIS_HD_SPLIT_ATTRIBUTES;
|
||
|
|
||
|
#define NDIS_SIZEOF_HD_SPLIT_ATTRIBUTES_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_HD_SPLIT_ATTRIBUTES, MaxHeaderSize)
|
||
|
|
||
|
//
|
||
|
// The miniport registers its hardware assist capabilities through this
|
||
|
// structure
|
||
|
//
|
||
|
#define NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES_REVISION_1 1
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
#define NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES_REVISION_2 2
|
||
|
#endif
|
||
|
|
||
|
|
||
|
typedef struct _NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
PNDIS_HD_SPLIT_ATTRIBUTES HDSplitAttributes;
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
PNDIS_RECEIVE_FILTER_CAPABILITIES HardwareReceiveFilterCapabilities;
|
||
|
PNDIS_RECEIVE_FILTER_CAPABILITIES CurrentReceiveFilterCapabilities;
|
||
|
PNDIS_NIC_SWITCH_CAPABILITIES HardwareNicSwitchCapabilities;
|
||
|
PNDIS_NIC_SWITCH_CAPABILITIES CurrentNicSwitchCapabilities;
|
||
|
#endif
|
||
|
} NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES, *PNDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES;
|
||
|
|
||
|
#define NDIS_SIZEOF_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES, HDSplitAttributes)
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
#define NDIS_SIZEOF_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES_REVISION_2 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES, CurrentNicSwitchCapabilities)
|
||
|
#endif
|
||
|
|
||
|
#endif // (NDIS_SUPPORT_NDIS61)
|
||
|
|
||
|
//
|
||
|
// The miniport registers its offload capabilities through this
|
||
|
// structure
|
||
|
//
|
||
|
#define NDIS_MINIPORT_ADAPTER_OFFLOAD_ATTRIBUTES_REVISION_1 1
|
||
|
typedef struct _NDIS_MINIPORT_ADAPTER_OFFLOAD_ATTRIBUTES
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
PNDIS_OFFLOAD DefaultOffloadConfiguration;
|
||
|
PNDIS_OFFLOAD HardwareOffloadCapabilities;
|
||
|
PNDIS_TCP_CONNECTION_OFFLOAD DefaultTcpConnectionOffloadConfiguration;
|
||
|
PNDIS_TCP_CONNECTION_OFFLOAD TcpConnectionOffloadHardwareCapabilities;
|
||
|
} NDIS_MINIPORT_ADAPTER_OFFLOAD_ATTRIBUTES, *PNDIS_MINIPORT_ADAPTER_OFFLOAD_ATTRIBUTES;
|
||
|
|
||
|
#define NDIS_SIZEOF_MINIPORT_ADAPTER_OFFLOAD_ATTRIBUTES_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_MINIPORT_ADAPTER_OFFLOAD_ATTRIBUTES, TcpConnectionOffloadHardwareCapabilities)
|
||
|
|
||
|
#include <windot11.h>
|
||
|
|
||
|
#define NDIS_MINIPORT_ADAPTER_802_11_ATTRIBUTES_REVISION_1 1
|
||
|
#define NDIS_MINIPORT_ADAPTER_802_11_ATTRIBUTES_REVISION_2 2
|
||
|
|
||
|
typedef struct _NDIS_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
|
||
|
ULONG OpModeCapability;
|
||
|
ULONG NumOfTXBuffers;
|
||
|
ULONG NumOfRXBuffers;
|
||
|
BOOLEAN MultiDomainCapabilityImplemented;
|
||
|
ULONG NumSupportedPhys;
|
||
|
#ifdef __midl
|
||
|
[size_is(NumSupportedPhys)]
|
||
|
#endif
|
||
|
PDOT11_PHY_ATTRIBUTES SupportedPhyAttributes;
|
||
|
|
||
|
// Attributes specific to the operation modes
|
||
|
PDOT11_EXTSTA_ATTRIBUTES ExtSTAAttributes;
|
||
|
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
// virtual wifi specific attributes
|
||
|
PDOT11_VWIFI_ATTRIBUTES VWiFiAttributes;
|
||
|
// Ext AP specific attributes
|
||
|
PDOT11_EXTAP_ATTRIBUTES ExtAPAttributes;
|
||
|
#endif // (NDIS_SUPPORT_NDIS620)
|
||
|
|
||
|
|
||
|
}NDIS_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES,
|
||
|
*PNDIS_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES;
|
||
|
|
||
|
#define NDIS_SIZEOF_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES, ExtSTAAttributes)
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
|
||
|
#define NDIS_SIZEOF_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES_REVISION_2 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES, ExtAPAttributes)
|
||
|
|
||
|
#endif // (NDIS_SUPPORT_NDIS620)
|
||
|
|
||
|
|
||
|
typedef union _NDIS_MINIPORT_ADAPTER_ATTRIBUTES
|
||
|
{
|
||
|
NDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES AddDeviceRegistrationAttributes;
|
||
|
NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES RegistrationAttributes;
|
||
|
NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES GeneralAttributes;
|
||
|
NDIS_MINIPORT_ADAPTER_OFFLOAD_ATTRIBUTES OffloadAttributes;
|
||
|
NDIS_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES Native_802_11_Attributes;
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES HardwareAssistAttributes;
|
||
|
#endif // (NDIS_SUPPORT_NDIS61)
|
||
|
} NDIS_MINIPORT_ADAPTER_ATTRIBUTES, *PNDIS_MINIPORT_ADAPTER_ATTRIBUTES;
|
||
|
|
||
|
|
||
|
//
|
||
|
// flags used in NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES
|
||
|
//
|
||
|
|
||
|
#define NDIS_MINIPORT_ATTRIBUTES_HARDWARE_DEVICE 0x00000001
|
||
|
#define NDIS_MINIPORT_ATTRIBUTES_NDIS_WDM 0x00000002
|
||
|
#define NDIS_MINIPORT_ATTRIBUTES_SURPRISE_REMOVE_OK 0x00000004
|
||
|
#define NDIS_MINIPORT_ATTRIBUTES_NOT_CO_NDIS 0x00000008
|
||
|
#define NDIS_MINIPORT_ATTRIBUTES_DO_NOT_BIND_TO_ALL_CO 0x00000010
|
||
|
#define NDIS_MINIPORT_ATTRIBUTES_NO_HALT_ON_SUSPEND 0x00000020
|
||
|
#define NDIS_MINIPORT_ATTRIBUTES_BUS_MASTER 0x00000040
|
||
|
#define NDIS_MINIPORT_ATTRIBUTES_CONTROLS_DEFAULT_PORT 0x00000080
|
||
|
|
||
|
//
|
||
|
// NDIS 6.0 miniport's entry points
|
||
|
//
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMSetMiniportAttributes(
|
||
|
__in NDIS_HANDLE NdisMiniportHandle,
|
||
|
__in_bcount(((NDIS_OBJECT_HEADER)MiniportAttributes).Size)
|
||
|
PNDIS_MINIPORT_ADAPTER_ATTRIBUTES MiniportAttributes
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(MINIPORT_INITIALIZE)(
|
||
|
__in NDIS_HANDLE NdisMiniportHandle,
|
||
|
__in NDIS_HANDLE MiniportDriverContext,
|
||
|
__in PNDIS_MINIPORT_INIT_PARAMETERS MiniportInitParameters
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_INITIALIZE (*MINIPORT_INITIALIZE_HANDLER);
|
||
|
|
||
|
typedef enum _NDIS_HALT_ACTION
|
||
|
{
|
||
|
NdisHaltDeviceDisabled,
|
||
|
NdisHaltDeviceInstanceDeInitialized,
|
||
|
NdisHaltDevicePoweredDown,
|
||
|
NdisHaltDeviceSurpriseRemoved,
|
||
|
NdisHaltDeviceFailed,
|
||
|
NdisHaltDeviceInitializationFailed,
|
||
|
NdisHaltDeviceStopped
|
||
|
} NDIS_HALT_ACTION, *PNDIS_HALT_ACTION;
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(MINIPORT_HALT)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext,
|
||
|
__in NDIS_HALT_ACTION HaltAction
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_HALT (*MINIPORT_HALT_HANDLER);
|
||
|
|
||
|
|
||
|
#define NDIS_MINIPORT_PAUSE_PARAMETERS_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_MINIPORT_PAUSE_PARAMETERS
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
ULONG Flags;
|
||
|
ULONG PauseReason;
|
||
|
} NDIS_MINIPORT_PAUSE_PARAMETERS, *PNDIS_MINIPORT_PAUSE_PARAMETERS;
|
||
|
|
||
|
#define NDIS_SIZEOF_MINIPORT_PAUSE_PARAMETERS_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_MINIPORT_PAUSE_PARAMETERS, PauseReason)
|
||
|
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(MINIPORT_PAUSE)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext,
|
||
|
__in PNDIS_MINIPORT_PAUSE_PARAMETERS PauseParameters
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_PAUSE (*MINIPORT_PAUSE_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(MINIPORT_RESTART)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext,
|
||
|
__in PNDIS_MINIPORT_RESTART_PARAMETERS RestartParameters
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_RESTART (*MINIPORT_RESTART_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(MINIPORT_OID_REQUEST) (
|
||
|
__in NDIS_HANDLE MiniportAdapterContext,
|
||
|
__in PNDIS_OID_REQUEST OidRequest
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_OID_REQUEST (*MINIPORT_OID_REQUEST_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(MINIPORT_UNLOAD) (
|
||
|
__in PDRIVER_OBJECT DriverObject
|
||
|
);
|
||
|
typedef MINIPORT_UNLOAD (*MINIPORT_DRIVER_UNLOAD);
|
||
|
|
||
|
//
|
||
|
// reasons for calling shutdown handler
|
||
|
//
|
||
|
typedef enum _NDIS_SHUTDOWN_ACTION {
|
||
|
NdisShutdownPowerOff,
|
||
|
NdisShutdownBugCheck
|
||
|
} NDIS_SHUTDOWN_ACTION, PNDIS_SHUTDOWN_ACTION;
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(MINIPORT_SHUTDOWN) (
|
||
|
__in NDIS_HANDLE MiniportAdapterContext,
|
||
|
__in NDIS_SHUTDOWN_ACTION ShutdownAction
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_SHUTDOWN (*MINIPORT_SHUTDOWN_HANDLER);
|
||
|
|
||
|
|
||
|
#define NET_DEVICE_PNP_EVENT_REVISION_1 1
|
||
|
|
||
|
typedef struct _NET_DEVICE_PNP_EVENT
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
NDIS_PORT_NUMBER PortNumber;
|
||
|
NDIS_DEVICE_PNP_EVENT DevicePnPEvent;
|
||
|
PVOID InformationBuffer;
|
||
|
ULONG InformationBufferLength;
|
||
|
UCHAR NdisReserved[2 * sizeof(PVOID)];
|
||
|
|
||
|
} NET_DEVICE_PNP_EVENT, *PNET_DEVICE_PNP_EVENT;
|
||
|
|
||
|
#define NDIS_SIZEOF_NET_DEVICE_PNP_EVENT_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NET_DEVICE_PNP_EVENT, NdisReserved)
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(MINIPORT_DEVICE_PNP_EVENT_NOTIFY)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext,
|
||
|
__in PNET_DEVICE_PNP_EVENT NetDevicePnPEvent
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_DEVICE_PNP_EVENT_NOTIFY (*MINIPORT_DEVICE_PNP_EVENT_NOTIFY_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(MINIPORT_CANCEL_SEND)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext,
|
||
|
__in PVOID CancelId
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_CANCEL_SEND (*MINIPORT_CANCEL_SEND_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
BOOLEAN
|
||
|
(MINIPORT_CHECK_FOR_HANG)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_CHECK_FOR_HANG (*MINIPORT_CHECK_FOR_HANG_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(MINIPORT_RESET)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext,
|
||
|
__out PBOOLEAN AddressingReset
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_RESET (*MINIPORT_RESET_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(MINIPORT_CANCEL_OID_REQUEST)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext,
|
||
|
__in PVOID RequestId
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_CANCEL_OID_REQUEST (*MINIPORT_CANCEL_OID_REQUEST_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(MINIPORT_SEND_NET_BUFFER_LISTS)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext,
|
||
|
__in PNET_BUFFER_LIST NetBufferList,
|
||
|
__in NDIS_PORT_NUMBER PortNumber,
|
||
|
__in ULONG SendFlags
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_SEND_NET_BUFFER_LISTS (*MINIPORT_SEND_NET_BUFFER_LISTS_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(MINIPORT_RETURN_NET_BUFFER_LISTS)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext,
|
||
|
__in PNET_BUFFER_LIST NetBufferLists,
|
||
|
__in ULONG ReturnFlags
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_RETURN_NET_BUFFER_LISTS (*MINIPORT_RETURN_NET_BUFFER_LISTS_HANDLER);
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
//
|
||
|
// NDIS 6.1 miniport's entry points
|
||
|
//
|
||
|
|
||
|
typedef
|
||
|
NDIS_STATUS
|
||
|
(MINIPORT_DIRECT_OID_REQUEST) (
|
||
|
__in NDIS_HANDLE MiniportAdapterContext,
|
||
|
__in PNDIS_OID_REQUEST OidRequest
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_DIRECT_OID_REQUEST (*MINIPORT_DIRECT_OID_REQUEST_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(MINIPORT_CANCEL_DIRECT_OID_REQUEST)(
|
||
|
__in NDIS_HANDLE MiniportAdapterContext,
|
||
|
__in PVOID RequestId
|
||
|
);
|
||
|
|
||
|
typedef MINIPORT_CANCEL_DIRECT_OID_REQUEST (*MINIPORT_CANCEL_DIRECT_OID_REQUEST_HANDLER);
|
||
|
|
||
|
|
||
|
#endif // (NDIS_SUPPORT_NDIS61)
|
||
|
|
||
|
//
|
||
|
// flags used in Flags field of NDIS60_MINIPORT_CHARACTERISTICS
|
||
|
//
|
||
|
#define NDIS_INTERMEDIATE_DRIVER 0x00000001
|
||
|
#define NDIS_WDM_DRIVER 0x00000002
|
||
|
|
||
|
|
||
|
#define NDIS_MINIPORT_DRIVER_CHARACTERISTICS_REVISION_1 1
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
#define NDIS_MINIPORT_DRIVER_CHARACTERISTICS_REVISION_2 2
|
||
|
#endif // (NDIS_SUPPORT_NDIS61)
|
||
|
|
||
|
typedef struct _NDIS_MINIPORT_DRIVER_CHARACTERISTICS
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
UCHAR MajorNdisVersion;
|
||
|
UCHAR MinorNdisVersion;
|
||
|
UCHAR MajorDriverVersion;
|
||
|
UCHAR MinorDriverVersion;
|
||
|
ULONG Flags;
|
||
|
SET_OPTIONS_HANDLER SetOptionsHandler;
|
||
|
MINIPORT_INITIALIZE_HANDLER InitializeHandlerEx;
|
||
|
MINIPORT_HALT_HANDLER HaltHandlerEx;
|
||
|
MINIPORT_DRIVER_UNLOAD UnloadHandler;
|
||
|
MINIPORT_PAUSE_HANDLER PauseHandler;
|
||
|
MINIPORT_RESTART_HANDLER RestartHandler;
|
||
|
MINIPORT_OID_REQUEST_HANDLER OidRequestHandler;
|
||
|
MINIPORT_SEND_NET_BUFFER_LISTS_HANDLER SendNetBufferListsHandler;
|
||
|
MINIPORT_RETURN_NET_BUFFER_LISTS_HANDLER ReturnNetBufferListsHandler;
|
||
|
MINIPORT_CANCEL_SEND_HANDLER CancelSendHandler;
|
||
|
MINIPORT_CHECK_FOR_HANG_HANDLER CheckForHangHandlerEx;
|
||
|
MINIPORT_RESET_HANDLER ResetHandlerEx;
|
||
|
MINIPORT_DEVICE_PNP_EVENT_NOTIFY_HANDLER DevicePnPEventNotifyHandler;
|
||
|
MINIPORT_SHUTDOWN_HANDLER ShutdownHandlerEx;
|
||
|
MINIPORT_CANCEL_OID_REQUEST_HANDLER CancelOidRequestHandler;
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
MINIPORT_DIRECT_OID_REQUEST_HANDLER DirectOidRequestHandler;
|
||
|
MINIPORT_CANCEL_DIRECT_OID_REQUEST_HANDLER CancelDirectOidRequestHandler;
|
||
|
#endif // (NDIS_SUPPORT_NDIS61)
|
||
|
} NDIS_MINIPORT_DRIVER_CHARACTERISTICS, *PNDIS_MINIPORT_DRIVER_CHARACTERISTICS;
|
||
|
|
||
|
#define NDIS_SIZEOF_MINIPORT_DRIVER_CHARACTERISTICS_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_MINIPORT_DRIVER_CHARACTERISTICS, CancelOidRequestHandler)
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
#define NDIS_SIZEOF_MINIPORT_DRIVER_CHARACTERISTICS_REVISION_2 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_MINIPORT_DRIVER_CHARACTERISTICS, CancelDirectOidRequestHandler)
|
||
|
#endif // (NDIS_SUPPORT_NDIS61)
|
||
|
|
||
|
//
|
||
|
// CO NDIS 6.0 handlers
|
||
|
//
|
||
|
|
||
|
#define NDIS_MINIPORT_CO_CHARACTERISTICS_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_MINIPORT_CO_CHARACTERISTICS
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header; // Header.Type = NDIS_OBJECT_TYPE_PROTOCOL_CO_CHARACTERISTICS
|
||
|
ULONG Flags;
|
||
|
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_NET_BUFFER_LISTS_HANDLER CoSendNetBufferListsHandler;
|
||
|
W_CO_OID_REQUEST_HANDLER CoOidRequestHandler;
|
||
|
|
||
|
} NDIS_MINIPORT_CO_CHARACTERISTICS, *PNDIS_MINIPORT_CO_CHARACTERISTICS;
|
||
|
|
||
|
#define NDIS_SIZEOF_MINIPORT_CO_CHARACTERISTICS_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_MINIPORT_CO_CHARACTERISTICS, CoOidRequestHandler)
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMIndicateStatusEx(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in PNDIS_STATUS_INDICATION StatusIndication
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMCoOidRequestComplete(
|
||
|
IN NDIS_HANDLE MiniportAdapterHandle,
|
||
|
IN NDIS_HANDLE NdisMiniportVcHandle,
|
||
|
IN PNDIS_OID_REQUEST Request,
|
||
|
IN NDIS_STATUS Status
|
||
|
);
|
||
|
|
||
|
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMCmOidRequest(
|
||
|
IN NDIS_HANDLE NdisAfHandle,
|
||
|
IN NDIS_HANDLE NdisVcHandle OPTIONAL,
|
||
|
IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
|
||
|
IN OUT PNDIS_OID_REQUEST NdisRequest
|
||
|
);
|
||
|
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMCoIndicateStatusEx(
|
||
|
IN NDIS_HANDLE MiniportAdapterHandle,
|
||
|
IN NDIS_HANDLE NdisVcHandle OPTIONAL,
|
||
|
IN PNDIS_STATUS_INDICATION StatusIndication
|
||
|
);
|
||
|
|
||
|
#endif // NDIS_SUPPORT_NDIS6
|
||
|
|
||
|
|
||
|
//
|
||
|
// Do not change the structure below !!!
|
||
|
//
|
||
|
typedef struct
|
||
|
{
|
||
|
union
|
||
|
{
|
||
|
PETH_FILTER EthDB;
|
||
|
PNULL_FILTER NullDB; // Default Filter
|
||
|
};
|
||
|
PTR_FILTER TrDB;
|
||
|
|
||
|
PVOID YYYDB;
|
||
|
|
||
|
PVOID XXXDB;
|
||
|
} FILTERDBS, *PFILTERDBS;
|
||
|
|
||
|
#if NDIS_LEGACY_MINIPORT
|
||
|
typedef
|
||
|
VOID
|
||
|
(*FILTER_PACKET_INDICATION_HANDLER)(
|
||
|
__in NDIS_HANDLE Miniport,
|
||
|
__in PPNDIS_PACKET PacketArray,
|
||
|
__in UINT NumberOfPackets
|
||
|
);
|
||
|
|
||
|
#endif // NDIS_LEGACY_MINIPORT
|
||
|
|
||
|
#if !NDIS_WRAPPER
|
||
|
//
|
||
|
// one of these per mini-port registered on a Driver
|
||
|
//
|
||
|
|
||
|
#if NDIS_LEGACY_MINIPORT
|
||
|
|
||
|
#pragma warning(push)
|
||
|
|
||
|
#pragma warning(disable:4201) // (nonstandard extension used : nameless struct/union)
|
||
|
|
||
|
|
||
|
struct _NDIS_MINIPORT_BLOCK
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
PNDIS_MINIPORT_BLOCK NextMiniport; // used by driver's MiniportQueue
|
||
|
PNDIS_MINIPORT_BLOCK BaseMiniport;
|
||
|
NDIS_HANDLE MiniportAdapterContext; // context when calling mini-port functions
|
||
|
UNICODE_STRING Reserved4;
|
||
|
PVOID Reserved10;
|
||
|
NDIS_HANDLE OpenQueue; // queue of opens for this mini-port
|
||
|
REFERENCE ShortRef; // contains spinlock for OpenQueue
|
||
|
|
||
|
NDIS_HANDLE Reserved12;
|
||
|
|
||
|
UCHAR Padding1; // DO NOT REMOVE OR NDIS WILL BREAK!!!
|
||
|
|
||
|
//
|
||
|
// Synchronization stuff.
|
||
|
//
|
||
|
// The boolean is used to lock out several DPCs from running at the same time.
|
||
|
//
|
||
|
UCHAR LockAcquired; // EXPOSED via macros. Do not move
|
||
|
|
||
|
UCHAR PmodeOpens; // Count of opens which turned on pmode/all_local
|
||
|
|
||
|
//
|
||
|
// This is the processor number that the miniport's
|
||
|
// interrupt DPC and timers are running on.
|
||
|
//
|
||
|
// Note: This field is no longer used
|
||
|
//
|
||
|
UCHAR Reserved23;
|
||
|
|
||
|
KSPIN_LOCK Lock;
|
||
|
|
||
|
PNDIS_REQUEST MediaRequest;
|
||
|
|
||
|
PVOID Interrupt;
|
||
|
|
||
|
ULONG Flags; // Flags to keep track of the miniport's state.
|
||
|
ULONG PnPFlags;
|
||
|
|
||
|
//
|
||
|
// Send information
|
||
|
//
|
||
|
LIST_ENTRY PacketList;
|
||
|
PNDIS_PACKET FirstPendingPacket; // This is head of the queue of packets
|
||
|
// waiting to be sent to miniport.
|
||
|
PNDIS_PACKET ReturnPacketsQueue;
|
||
|
|
||
|
//
|
||
|
// Space used for temp. use during request processing
|
||
|
//
|
||
|
ULONG RequestBuffer;
|
||
|
PVOID SetMCastBuffer;
|
||
|
|
||
|
PNDIS_MINIPORT_BLOCK PrimaryMiniport;
|
||
|
PVOID Reserved11;
|
||
|
|
||
|
//
|
||
|
// context to pass to bus driver when reading or writing config space
|
||
|
//
|
||
|
PVOID BusDataContext;
|
||
|
ULONG Reserved3;
|
||
|
|
||
|
//
|
||
|
// Resource information
|
||
|
//
|
||
|
PCM_RESOURCE_LIST Resources;
|
||
|
|
||
|
//
|
||
|
// Watch-dog timer
|
||
|
//
|
||
|
NDIS_TIMER WakeUpDpcTimer;
|
||
|
|
||
|
//
|
||
|
// Needed for PnP. Upcased version. The buffer is allocated as part of the
|
||
|
// NDIS_MINIPORT_BLOCK itself.
|
||
|
//
|
||
|
// Note:
|
||
|
// the following two fields should be explicitly UNICODE_STRING because
|
||
|
// under Win9x the NDIS_STRING is an ANSI_STRING
|
||
|
//
|
||
|
UNICODE_STRING Reserved20;
|
||
|
UNICODE_STRING SymbolicLinkName;
|
||
|
|
||
|
//
|
||
|
// Check for hang stuff
|
||
|
//
|
||
|
ULONG CheckForHangSeconds;
|
||
|
USHORT CFHangTicks;
|
||
|
USHORT CFHangCurrentTick;
|
||
|
|
||
|
//
|
||
|
// Reset information
|
||
|
//
|
||
|
NDIS_STATUS ResetStatus;
|
||
|
NDIS_HANDLE ResetOpen;
|
||
|
|
||
|
//
|
||
|
// Holds media specific information.
|
||
|
//
|
||
|
#ifdef __cplusplus
|
||
|
FILTERDBS FilterDbs; // EXPOSED via macros. Do not move
|
||
|
#else
|
||
|
FILTERDBS; // EXPOSED via macros. Do not move
|
||
|
#endif
|
||
|
|
||
|
FILTER_PACKET_INDICATION_HANDLER PacketIndicateHandler;
|
||
|
NDIS_M_SEND_COMPLETE_HANDLER SendCompleteHandler;
|
||
|
NDIS_M_SEND_RESOURCES_HANDLER SendResourcesHandler;
|
||
|
NDIS_M_RESET_COMPLETE_HANDLER ResetCompleteHandler;
|
||
|
|
||
|
NDIS_MEDIUM MediaType;
|
||
|
|
||
|
//
|
||
|
// contains mini-port information
|
||
|
//
|
||
|
ULONG BusNumber;
|
||
|
NDIS_INTERFACE_TYPE BusType;
|
||
|
NDIS_INTERFACE_TYPE AdapterType;
|
||
|
|
||
|
PDEVICE_OBJECT Reserved6;
|
||
|
PDEVICE_OBJECT Reserved7;
|
||
|
PDEVICE_OBJECT Reserved8;
|
||
|
|
||
|
|
||
|
PVOID MiniportSGDmaBlock;
|
||
|
|
||
|
//
|
||
|
// List of registered address families. Valid for the call-manager, Null for the client
|
||
|
//
|
||
|
PNDIS_AF_LIST CallMgrAfList;
|
||
|
|
||
|
PVOID MiniportThread;
|
||
|
PVOID SetInfoBuf;
|
||
|
USHORT SetInfoBufLen;
|
||
|
USHORT MaxSendPackets;
|
||
|
|
||
|
//
|
||
|
// Status code that is returned from the fake handlers.
|
||
|
//
|
||
|
NDIS_STATUS FakeStatus;
|
||
|
|
||
|
PVOID Reserved24; // For the filter lock
|
||
|
|
||
|
PUNICODE_STRING Reserved9;
|
||
|
|
||
|
PVOID Reserved21;
|
||
|
|
||
|
UINT MacOptions;
|
||
|
|
||
|
//
|
||
|
// RequestInformation
|
||
|
//
|
||
|
PNDIS_REQUEST PendingRequest;
|
||
|
UINT MaximumLongAddresses;
|
||
|
UINT MaximumShortAddresses;
|
||
|
UINT CurrentLookahead;
|
||
|
UINT MaximumLookahead;
|
||
|
|
||
|
//
|
||
|
// For efficiency
|
||
|
//
|
||
|
ULONG_PTR Reserved1;
|
||
|
W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler;
|
||
|
W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler;
|
||
|
W_SEND_PACKETS_HANDLER SendPacketsHandler;
|
||
|
NDIS_M_START_SENDS DeferredSendHandler;
|
||
|
|
||
|
//
|
||
|
// The following cannot be unionized.
|
||
|
//
|
||
|
ETH_RCV_INDICATE_HANDLER EthRxIndicateHandler; // EXPOSED via macros. Do not move
|
||
|
TR_RCV_INDICATE_HANDLER TrRxIndicateHandler; // EXPOSED via macros. Do not move
|
||
|
PVOID Reserved2;
|
||
|
|
||
|
ETH_RCV_COMPLETE_HANDLER EthRxCompleteHandler; // EXPOSED via macros. Do not move
|
||
|
TR_RCV_COMPLETE_HANDLER TrRxCompleteHandler; // EXPOSED via macros. Do not move
|
||
|
PVOID Reserved22;
|
||
|
|
||
|
NDIS_M_STATUS_HANDLER StatusHandler; // EXPOSED via macros. Do not move
|
||
|
NDIS_M_STS_COMPLETE_HANDLER StatusCompleteHandler; // EXPOSED via macros. Do not move
|
||
|
NDIS_M_TD_COMPLETE_HANDLER TDCompleteHandler; // EXPOSED via macros. Do not move
|
||
|
NDIS_M_REQ_COMPLETE_HANDLER QueryCompleteHandler; // EXPOSED via macros. Do not move
|
||
|
NDIS_M_REQ_COMPLETE_HANDLER SetCompleteHandler; // EXPOSED via macros. Do not move
|
||
|
|
||
|
NDIS_WM_SEND_COMPLETE_HANDLER WanSendCompleteHandler;// EXPOSED via macros. Do not move
|
||
|
WAN_RCV_HANDLER WanRcvHandler; // EXPOSED via macros. Do not move
|
||
|
WAN_RCV_COMPLETE_HANDLER WanRcvCompleteHandler; // EXPOSED via macros. Do not move
|
||
|
|
||
|
/********************************************************************************************/
|
||
|
/**************** **********/
|
||
|
/**************** STUFF ABOVE IS POTENTIALLY ACCESSED BY MACROS. ADD STUFF BELOW **********/
|
||
|
/**************** SEVERE POSSIBILITY OF BREAKING SOMETHING IF STUFF ABOVE IS MOVED **********/
|
||
|
/**************** **********/
|
||
|
/********************************************************************************************/
|
||
|
|
||
|
};
|
||
|
|
||
|
#pragma warning(pop)
|
||
|
|
||
|
|
||
|
#endif // NDIS_LEGACY_MINIPORT
|
||
|
|
||
|
#endif // NDIS_WRAPPER not defined
|
||
|
|
||
|
|
||
|
#if NDIS_LEGACY_MINIPORT
|
||
|
|
||
|
#ifdef NDIS51_MINIPORT
|
||
|
typedef struct _NDIS51_MINIPORT_CHARACTERISTICS NDIS_MINIPORT_CHARACTERISTICS;
|
||
|
#else
|
||
|
#ifdef NDIS50_MINIPORT
|
||
|
typedef struct _NDIS50_MINIPORT_CHARACTERISTICS NDIS_MINIPORT_CHARACTERISTICS;
|
||
|
#else
|
||
|
#ifdef NDIS40_MINIPORT
|
||
|
typedef struct _NDIS40_MINIPORT_CHARACTERISTICS NDIS_MINIPORT_CHARACTERISTICS;
|
||
|
#else
|
||
|
typedef struct _NDIS30_MINIPORT_CHARACTERISTICS NDIS_MINIPORT_CHARACTERISTICS;
|
||
|
#endif
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
typedef NDIS_MINIPORT_CHARACTERISTICS * PNDIS_MINIPORT_CHARACTERISTICS;
|
||
|
typedef NDIS_MINIPORT_CHARACTERISTICS NDIS_WAN_MINIPORT_CHARACTERISTICS;
|
||
|
typedef NDIS_WAN_MINIPORT_CHARACTERISTICS * PNDIS_MINIPORT_CHARACTERISTICS;
|
||
|
|
||
|
|
||
|
//
|
||
|
// Routines for intermediate miniport drivers. NDIS 6 IM drivers
|
||
|
// use the same registration deregistration APIs as regular miniports
|
||
|
//
|
||
|
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisIMRegisterLayeredMiniport(
|
||
|
IN NDIS_HANDLE NdisWrapperHandle,
|
||
|
IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,
|
||
|
IN UINT CharacteristicsLength,
|
||
|
OUT PNDIS_HANDLE DriverHandle
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisIMDeregisterLayeredMiniport(
|
||
|
__in NDIS_HANDLE DriverHandle
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMRegisterDevice(
|
||
|
__in NDIS_HANDLE NdisWrapperHandle,
|
||
|
__in PNDIS_STRING DeviceName,
|
||
|
__in PNDIS_STRING SymbolicName,
|
||
|
__in PDRIVER_DISPATCH MajorFunctions[],
|
||
|
__out PDEVICE_OBJECT * pDeviceObject,
|
||
|
__out NDIS_HANDLE * NdisDeviceHandle
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMDeregisterDevice(
|
||
|
__in NDIS_HANDLE NdisDeviceHandle
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMRegisterUnloadHandler(
|
||
|
__in NDIS_HANDLE NdisWrapperHandle,
|
||
|
__in PDRIVER_UNLOAD UnloadHandler
|
||
|
);
|
||
|
|
||
|
#endif // NDIS_LEGACY_MINIPORT
|
||
|
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisIMAssociateMiniport(
|
||
|
__in NDIS_HANDLE DriverHandle,
|
||
|
__in NDIS_HANDLE ProtocolHandle
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Operating System Requests
|
||
|
//
|
||
|
typedef UCHAR NDIS_DMA_SIZE;
|
||
|
|
||
|
#define NDIS_DMA_24BITS ((NDIS_DMA_SIZE)0)
|
||
|
#define NDIS_DMA_32BITS ((NDIS_DMA_SIZE)1)
|
||
|
#define NDIS_DMA_64BITS ((NDIS_DMA_SIZE)2)
|
||
|
|
||
|
#if NDIS_LEGACY_MINIPORT
|
||
|
__checkReturn
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
__drv_preferredFunction("NdisMInitializeScatterGatherDma", "See details in NdisMAllocateMapRegisters documentation")
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMAllocateMapRegisters(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in UINT DmaChannel,
|
||
|
__in NDIS_DMA_SIZE DmaSize,
|
||
|
__in ULONG BaseMapRegistersNeeded,
|
||
|
__in ULONG MaximumPhysicalMapping
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMFreeMapRegisters(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMInitializeScatterGatherDma(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in BOOLEAN Dma64BitAddresses,
|
||
|
__in ULONG MaximumPhysicalMapping
|
||
|
);
|
||
|
|
||
|
#endif // NDIS_LEGACY_MINIPORT
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMRegisterIoPortRange(
|
||
|
__out PVOID * PortOffset,
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in UINT InitialPort,
|
||
|
__in UINT NumberOfPorts
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMDeregisterIoPortRange(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in UINT InitialPort,
|
||
|
__in UINT NumberOfPorts,
|
||
|
__in PVOID PortOffset
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMMapIoSpace(
|
||
|
__deref_out_bcount(Length) PVOID * VirtualAddress,
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in NDIS_PHYSICAL_ADDRESS PhysicalAddress,
|
||
|
__in UINT Length
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMUnmapIoSpace(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in_bcount(Length) PVOID VirtualAddress,
|
||
|
__in UINT Length
|
||
|
);
|
||
|
|
||
|
#if NDIS_LEGACY_MINIPORT
|
||
|
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMRegisterInterrupt(
|
||
|
OUT PNDIS_MINIPORT_INTERRUPT Interrupt,
|
||
|
IN NDIS_HANDLE MiniportAdapterHandle,
|
||
|
IN UINT InterruptVector,
|
||
|
IN UINT InterruptLevel,
|
||
|
IN BOOLEAN RequestIsr,
|
||
|
IN BOOLEAN SharedInterrupt,
|
||
|
IN NDIS_INTERRUPT_MODE InterruptMode
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMDeregisterInterrupt(
|
||
|
__in PNDIS_MINIPORT_INTERRUPT Interrupt
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
BOOLEAN
|
||
|
NdisMSynchronizeWithInterrupt(
|
||
|
IN PNDIS_MINIPORT_INTERRUPT Interrupt,
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
IN MINIPORT_SYNCHRONIZE_INTERRUPT_HANDLER SynchronizeFunction,
|
||
|
#else
|
||
|
IN PVOID SynchronizeFunction,
|
||
|
#endif
|
||
|
IN PVOID SynchronizeContext
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMQueryAdapterResources(
|
||
|
__out PNDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE WrapperConfigurationContext,
|
||
|
__out PNDIS_RESOURCE_LIST ResourceList,
|
||
|
__deref_inout PUINT BufferSize
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Physical Mapping
|
||
|
//
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMStartBufferPhysicalMapping(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in PNDIS_BUFFER Buffer,
|
||
|
__in ULONG PhysicalMapRegister,
|
||
|
__in BOOLEAN WriteToDevice,
|
||
|
__out PNDIS_PHYSICAL_ADDRESS_UNIT PhysicalAddressArray,
|
||
|
__out PUINT ArraySize
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMCompleteBufferPhysicalMapping(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in PNDIS_BUFFER Buffer,
|
||
|
__in ULONG PhysicalMapRegister
|
||
|
);
|
||
|
|
||
|
/*++
|
||
|
//
|
||
|
// This API has been deprecated
|
||
|
//
|
||
|
VOID
|
||
|
NdisMUpdateSharedMemory(
|
||
|
IN NDIS_HANDLE MiniportAdapterHandle,
|
||
|
IN ULONG Length,
|
||
|
IN PVOID VirtualAddress,
|
||
|
IN NDIS_PHYSICAL_ADDRESS PhysicalAddress
|
||
|
);
|
||
|
*/
|
||
|
#define NdisMUpdateSharedMemory(_H, _L, _V, _P)
|
||
|
#pragma deprecated(NdisMUpdateSharedMemory)
|
||
|
|
||
|
|
||
|
#endif // NDIS_LEGACY_MINIPORT
|
||
|
|
||
|
//
|
||
|
// Timers
|
||
|
//
|
||
|
// VOID
|
||
|
// NdisMSetTimer(
|
||
|
// IN PNDIS_MINIPORT_TIMER Timer,
|
||
|
// IN UINT MillisecondsToDelay
|
||
|
// );
|
||
|
#define NdisMSetTimer(_Timer, _Delay) NdisSetTimer((PNDIS_TIMER)_Timer, _Delay)
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMSetPeriodicTimer(
|
||
|
__in PNDIS_MINIPORT_TIMER Timer,
|
||
|
__in UINT MillisecondPeriod
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMInitializeTimer(
|
||
|
__in OUT PNDIS_MINIPORT_TIMER Timer,
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in PNDIS_TIMER_FUNCTION TimerFunction,
|
||
|
__in PVOID FunctionContext
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMCancelTimer(
|
||
|
__in PNDIS_MINIPORT_TIMER Timer,
|
||
|
__out __checkReturn
|
||
|
PBOOLEAN TimerCancelled
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(APC_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMSleep(
|
||
|
__in ULONG MicrosecondsToSleep
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
ULONG
|
||
|
NdisMGetDmaAlignment(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Shared memory
|
||
|
//
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMAllocateSharedMemory(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in ULONG Length,
|
||
|
__in BOOLEAN Cached,
|
||
|
__deref_out __checkReturn
|
||
|
PVOID * VirtualAddress,
|
||
|
__out __checkReturn
|
||
|
PNDIS_PHYSICAL_ADDRESS PhysicalAddress
|
||
|
);
|
||
|
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMFreeSharedMemory(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in ULONG Length,
|
||
|
__in BOOLEAN Cached,
|
||
|
__in_bcount(Length) PVOID VirtualAddress,
|
||
|
__in NDIS_PHYSICAL_ADDRESS PhysicalAddress
|
||
|
);
|
||
|
|
||
|
#if NDIS_LEGACY_MINIPORT
|
||
|
|
||
|
//
|
||
|
// Requests Used by Miniport Drivers
|
||
|
//
|
||
|
#define NdisMInitializeWrapper(_a,_b,_c,_d) NdisInitializeWrapper((_a),(_b),(_c),(_d))
|
||
|
|
||
|
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMRegisterMiniport(
|
||
|
IN NDIS_HANDLE NdisWrapperHandle,
|
||
|
IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,
|
||
|
IN UINT CharacteristicsLength
|
||
|
);
|
||
|
|
||
|
|
||
|
// EXPORT
|
||
|
// NDIS_STATUS
|
||
|
// NdisIMInitializeDeviceInstance(
|
||
|
// IN NDIS_HANDLE DriverHandle,
|
||
|
// IN PNDIS_STRING DriverInstance
|
||
|
// );
|
||
|
#define NdisIMInitializeDeviceInstance(_H_, _I_) \
|
||
|
NdisIMInitializeDeviceInstanceEx(_H_, _I_, NULL)
|
||
|
#endif // NDIS_LEGACY_MINIPORT
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisIMInitializeDeviceInstanceEx(
|
||
|
__in NDIS_HANDLE DriverHandle,
|
||
|
__in PNDIS_STRING DriverInstance,
|
||
|
__in_opt NDIS_HANDLE DeviceContext
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisIMCancelInitializeDeviceInstance(
|
||
|
__in NDIS_HANDLE DriverHandle,
|
||
|
__in PNDIS_STRING DeviceInstance
|
||
|
);
|
||
|
|
||
|
#if NDIS_LEGACY_MINIPORT
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_HANDLE
|
||
|
NdisIMGetDeviceContext(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle
|
||
|
);
|
||
|
|
||
|
#endif // NDIS_LEGACY_MINIPORT
|
||
|
|
||
|
__drv_maxIRQL(APC_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_HANDLE
|
||
|
NdisIMGetBindingContext(
|
||
|
__in NDIS_HANDLE NdisBindingHandle
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisIMDeInitializeDeviceInstance(
|
||
|
__in NDIS_HANDLE NdisMiniportHandle
|
||
|
);
|
||
|
|
||
|
|
||
|
#if NDIS_LEGACY_MINIPORT
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisIMCopySendPerPacketInfo(
|
||
|
OUT PNDIS_PACKET DstPacket,
|
||
|
IN PNDIS_PACKET SrcPacket
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisIMCopySendCompletePerPacketInfo(
|
||
|
OUT PNDIS_PACKET DstPacket,
|
||
|
IN PNDIS_PACKET SrcPacket
|
||
|
);
|
||
|
|
||
|
// EXPORT
|
||
|
// VOID
|
||
|
// NdisMSetAttributes(
|
||
|
// IN NDIS_HANDLE MiniportAdapterHandle,
|
||
|
// IN NDIS_HANDLE MiniportAdapterContext,
|
||
|
// IN BOOLEAN BusMaster,
|
||
|
// IN NDIS_INTERFACE_TYPE AdapterType
|
||
|
// );
|
||
|
#define NdisMSetAttributes(_H_, _C_, _M_, _T_) \
|
||
|
NdisMSetAttributesEx(_H_, \
|
||
|
_C_, \
|
||
|
0, \
|
||
|
(_M_) ? NDIS_ATTRIBUTE_BUS_MASTER : 0, \
|
||
|
_T_) \
|
||
|
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMSetAttributesEx(
|
||
|
IN NDIS_HANDLE MiniportAdapterHandle,
|
||
|
IN NDIS_HANDLE MiniportAdapterContext,
|
||
|
IN UINT CheckForHangTimeInSeconds OPTIONAL,
|
||
|
IN ULONG AttributeFlags,
|
||
|
IN NDIS_INTERFACE_TYPE AdapterType OPTIONAL
|
||
|
);
|
||
|
|
||
|
#define NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT 0x00000001
|
||
|
#define NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT 0x00000002
|
||
|
#define NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS 0x00000004
|
||
|
#define NDIS_ATTRIBUTE_BUS_MASTER 0x00000008
|
||
|
#define NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER 0x00000010
|
||
|
#define NDIS_ATTRIBUTE_DESERIALIZE 0x00000020
|
||
|
#define NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND 0x00000040
|
||
|
#define NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK 0x00000080
|
||
|
#define NDIS_ATTRIBUTE_NOT_CO_NDIS 0x00000100
|
||
|
#define NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS 0x00000200
|
||
|
#define NDIS_ATTRIBUTE_DO_NOT_BIND_TO_ALL_CO 0x00000400
|
||
|
#define NDIS_ATTRIBUTE_MINIPORT_PADS_SHORT_PACKETS 0x00000800
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMSetMiniportSecondary(
|
||
|
__in NDIS_HANDLE MiniportHandle,
|
||
|
__in NDIS_HANDLE PrimaryMiniportHandle
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMPromoteMiniport(
|
||
|
__in NDIS_HANDLE MiniportHandle
|
||
|
);
|
||
|
|
||
|
#endif // NDIS_LEGACY_MINIPORT
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMRemoveMiniport(
|
||
|
__in NDIS_HANDLE MiniportHandle
|
||
|
);
|
||
|
|
||
|
|
||
|
#if NDIS_LEGACY_MINIPORT
|
||
|
|
||
|
#define NdisMSendComplete(_M, _P, _S) (*((PNDIS_MINIPORT_BLOCK)(_M))->SendCompleteHandler)(_M, _P, _S)
|
||
|
|
||
|
#define NdisMSendResourcesAvailable(_M) (*((PNDIS_MINIPORT_BLOCK)(_M))->SendResourcesHandler)(_M)
|
||
|
|
||
|
#if (!NDIS_WRAPPER)
|
||
|
#if (!NDIS_SUPPORT_NDIS6)
|
||
|
|
||
|
#define NdisMResetComplete(_M, _S, _A) (*((PNDIS_MINIPORT_BLOCK)(_M))->ResetCompleteHandler)(_M, _S, _A)
|
||
|
#endif // NDIS_SUPPORT_NDIS6
|
||
|
#endif // !NDIS_WRAPPER
|
||
|
|
||
|
#define NdisMTransferDataComplete(_M, _P, _S, _B) \
|
||
|
(*((PNDIS_MINIPORT_BLOCK)(_M))->TDCompleteHandler)(_M, _P, _S, _B)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
VOID
|
||
|
NdisMWanSendComplete(
|
||
|
IN NDIS_HANDLE MiniportAdapterHandle,
|
||
|
IN PVOID Packet,
|
||
|
IN NDIS_STATUS Status
|
||
|
);
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#define NdisMWanSendComplete(_M_, _P_, _S_) \
|
||
|
(*((PNDIS_MINIPORT_BLOCK)(_M_))->WanSendCompleteHandler)(_M_, _P_, _S_)
|
||
|
|
||
|
#define NdisMQueryInformationComplete(_M, _S) \
|
||
|
(*((PNDIS_MINIPORT_BLOCK)(_M))->QueryCompleteHandler)(_M, _S)
|
||
|
|
||
|
#define NdisMSetInformationComplete(_M, _S) \
|
||
|
(*((PNDIS_MINIPORT_BLOCK)(_M))->SetCompleteHandler)(_M, _S)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
VOID
|
||
|
NdisMIndicateReceivePacket(
|
||
|
IN NDIS_HANDLE MiniportAdapterHandle,
|
||
|
IN PPNDIS_PACKET ReceivedPackets,
|
||
|
IN UINT NumberOfPackets
|
||
|
);
|
||
|
|
||
|
--*/
|
||
|
#define NdisMIndicateReceivePacket(_H, _P, _N) \
|
||
|
{ \
|
||
|
(*((PNDIS_MINIPORT_BLOCK)(_H))->PacketIndicateHandler)( \
|
||
|
_H, \
|
||
|
_P, \
|
||
|
_N); \
|
||
|
}
|
||
|
|
||
|
/*++
|
||
|
|
||
|
VOID
|
||
|
NdisMWanIndicateReceive(
|
||
|
OUT PNDIS_STATUS Status,
|
||
|
IN NDIS_HANDLE MiniportAdapterHandle,
|
||
|
IN NDIS_HANDLE NdisLinkContext,
|
||
|
IN PUCHAR Packet,
|
||
|
IN ULONG PacketSize
|
||
|
);
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#define NdisMWanIndicateReceive(_S_, _M_, _C_, _P_, _Z_) \
|
||
|
(*((PNDIS_MINIPORT_BLOCK)(_M_))->WanRcvHandler)(_S_, _M_, _C_, _P_, _Z_)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
VOID
|
||
|
NdisMWanIndicateReceiveComplete(
|
||
|
IN NDIS_HANDLE MiniportAdapterHandle,
|
||
|
IN NDIS_HANDLE NdisLinkContext
|
||
|
);
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#define NdisMWanIndicateReceiveComplete(_M_, _C_) \
|
||
|
(*((PNDIS_MINIPORT_BLOCK)(_M_))->WanRcvCompleteHandler)(_M_, _C_)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
VOID
|
||
|
NdisMEthIndicateReceive(
|
||
|
IN NDIS_HANDLE MiniportAdapterHandle,
|
||
|
IN NDIS_HANDLE MiniportReceiveContext,
|
||
|
IN PVOID HeaderBuffer,
|
||
|
IN UINT HeaderBufferSize,
|
||
|
IN PVOID LookaheadBuffer,
|
||
|
IN UINT LookaheadBufferSize,
|
||
|
IN UINT PacketSize
|
||
|
)
|
||
|
|
||
|
--*/
|
||
|
#ifdef __cplusplus
|
||
|
|
||
|
#define NdisMEthIndicateReceive( _H, _C, _B, _SZ, _L, _LSZ, _PSZ) \
|
||
|
{ \
|
||
|
(*((PNDIS_MINIPORT_BLOCK)(_H))->EthRxIndicateHandler)( \
|
||
|
((PNDIS_MINIPORT_BLOCK)(_H))->FilterDbs.EthDB, \
|
||
|
_C, \
|
||
|
_B, \
|
||
|
_B, \
|
||
|
_SZ, \
|
||
|
_L, \
|
||
|
_LSZ, \
|
||
|
_PSZ \
|
||
|
); \
|
||
|
}
|
||
|
|
||
|
#else
|
||
|
|
||
|
#define NdisMEthIndicateReceive( _H, _C, _B, _SZ, _L, _LSZ, _PSZ) \
|
||
|
{ \
|
||
|
(*((PNDIS_MINIPORT_BLOCK)(_H))->EthRxIndicateHandler)( \
|
||
|
((PNDIS_MINIPORT_BLOCK)(_H))->EthDB, \
|
||
|
_C, \
|
||
|
_B, \
|
||
|
_B, \
|
||
|
_SZ, \
|
||
|
_L, \
|
||
|
_LSZ, \
|
||
|
_PSZ \
|
||
|
); \
|
||
|
}
|
||
|
|
||
|
#endif
|
||
|
|
||
|
/*++
|
||
|
|
||
|
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
|
||
|
)
|
||
|
|
||
|
--*/
|
||
|
#ifdef __cplusplus
|
||
|
#define NdisMTrIndicateReceive( _H, _C, _B, _SZ, _L, _LSZ, _PSZ) \
|
||
|
{ \
|
||
|
(*((PNDIS_MINIPORT_BLOCK)(_H))->TrRxIndicateHandler)( \
|
||
|
((PNDIS_MINIPORT_BLOCK)(_H))->FilterDbs.TrDB, \
|
||
|
_C, \
|
||
|
_B, \
|
||
|
_SZ, \
|
||
|
_L, \
|
||
|
_LSZ, \
|
||
|
_PSZ \
|
||
|
); \
|
||
|
}
|
||
|
|
||
|
#else
|
||
|
|
||
|
#define NdisMTrIndicateReceive( _H, _C, _B, _SZ, _L, _LSZ, _PSZ) \
|
||
|
{ \
|
||
|
(*((PNDIS_MINIPORT_BLOCK)(_H))->TrRxIndicateHandler)( \
|
||
|
((PNDIS_MINIPORT_BLOCK)(_H))->TrDB, \
|
||
|
_C, \
|
||
|
_B, \
|
||
|
_SZ, \
|
||
|
_L, \
|
||
|
_LSZ, \
|
||
|
_PSZ \
|
||
|
); \
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
/*++
|
||
|
|
||
|
VOID
|
||
|
NdisMEthIndicateReceiveComplete(
|
||
|
IN NDIS_HANDLE MiniportHandle
|
||
|
);
|
||
|
|
||
|
--*/
|
||
|
#ifdef __cplusplus
|
||
|
|
||
|
#define NdisMEthIndicateReceiveComplete( _H ) \
|
||
|
{ \
|
||
|
(*((PNDIS_MINIPORT_BLOCK)(_H))->EthRxCompleteHandler)( \
|
||
|
((PNDIS_MINIPORT_BLOCK)_H)->FilterDbs.EthDB); \
|
||
|
}
|
||
|
|
||
|
#else
|
||
|
|
||
|
#define NdisMEthIndicateReceiveComplete( _H ) \
|
||
|
{ \
|
||
|
(*((PNDIS_MINIPORT_BLOCK)(_H))->EthRxCompleteHandler)( \
|
||
|
((PNDIS_MINIPORT_BLOCK)_H)->EthDB); \
|
||
|
}
|
||
|
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*++
|
||
|
|
||
|
VOID
|
||
|
NdisMTrIndicateReceiveComplete(
|
||
|
IN NDIS_HANDLE MiniportHandle
|
||
|
);
|
||
|
|
||
|
--*/
|
||
|
#ifdef __cplusplus
|
||
|
#define NdisMTrIndicateReceiveComplete( _H ) \
|
||
|
{ \
|
||
|
(*((PNDIS_MINIPORT_BLOCK)(_H))->TrRxCompleteHandler)( \
|
||
|
((PNDIS_MINIPORT_BLOCK)_H)->FilterDbs.TrDB); \
|
||
|
}
|
||
|
#else
|
||
|
#define NdisMTrIndicateReceiveComplete( _H ) \
|
||
|
{ \
|
||
|
(*((PNDIS_MINIPORT_BLOCK)(_H))->TrRxCompleteHandler)( \
|
||
|
((PNDIS_MINIPORT_BLOCK)_H)->TrDB); \
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMIndicateStatus(
|
||
|
__in NDIS_HANDLE MiniportHandle,
|
||
|
__in NDIS_STATUS GeneralStatus,
|
||
|
__in_bcount(StatusBufferSize)
|
||
|
PVOID StatusBuffer,
|
||
|
__in UINT StatusBufferSize
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMIndicateStatusComplete(
|
||
|
__in NDIS_HANDLE MiniportHandle
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMRegisterAdapterShutdownHandler(
|
||
|
__in NDIS_HANDLE MiniportHandle,
|
||
|
__in PVOID ShutdownContext,
|
||
|
__in ADAPTER_SHUTDOWN_HANDLER ShutdownHandler
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMDeregisterAdapterShutdownHandler(
|
||
|
__in NDIS_HANDLE MiniportHandle
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
__drv_preferredFunction("NdisMQueryAdapterResources", "Obsolete")
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMPciAssignResources(
|
||
|
__in NDIS_HANDLE MiniportHandle,
|
||
|
__in ULONG SlotNumber,
|
||
|
__out PNDIS_RESOURCE_LIST * AssignedResources
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisIMNotifyPnPEvent(
|
||
|
__in NDIS_HANDLE MiniportHandle,
|
||
|
__in PNET_PNP_EVENT NetPnPEvent
|
||
|
);
|
||
|
|
||
|
#endif // NDIS_LEGACY_MINIPORT
|
||
|
|
||
|
|
||
|
//
|
||
|
// Logging support for miniports
|
||
|
//
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMCreateLog(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in UINT Size,
|
||
|
__out PNDIS_HANDLE LogHandle
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMCloseLog(
|
||
|
__in NDIS_HANDLE LogHandle
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMWriteLogData(
|
||
|
__in NDIS_HANDLE LogHandle,
|
||
|
__in_bcount(LogBufferSize)
|
||
|
PVOID LogBuffer,
|
||
|
__in UINT LogBufferSize
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMFlushLog(
|
||
|
__in NDIS_HANDLE LogHandle
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMGetDeviceProperty(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__inout_opt PDEVICE_OBJECT * PhysicalDeviceObject,
|
||
|
__inout_opt PDEVICE_OBJECT * FunctionalDeviceObject,
|
||
|
__inout_opt PDEVICE_OBJECT * NextDeviceObject,
|
||
|
__inout_opt PCM_RESOURCE_LIST * AllocatedResources,
|
||
|
__inout_opt PCM_RESOURCE_LIST * AllocatedResourcesTranslated
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Get a pointer to the adapter's localized instance name.
|
||
|
//
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMQueryAdapterInstanceName(
|
||
|
__out PNDIS_STRING pAdapterInstanceName,
|
||
|
__in NDIS_HANDLE MiniportHandle
|
||
|
);
|
||
|
|
||
|
|
||
|
#if NDIS_LEGACY_MINIPORT
|
||
|
|
||
|
//
|
||
|
// NDIS 5.0 extensions for miniports
|
||
|
//
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
__drv_minIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMCoIndicateReceivePacket(
|
||
|
__in NDIS_HANDLE NdisVcHandle,
|
||
|
__in PPNDIS_PACKET PacketArray,
|
||
|
__in UINT NumberOfPackets
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
NdisMCoIndicateStatus(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in_opt NDIS_HANDLE NdisVcHandle,
|
||
|
__in NDIS_STATUS GeneralStatus,
|
||
|
__in_bcount_opt(StatusBufferSize)
|
||
|
PVOID StatusBuffer,
|
||
|
__in ULONG StatusBufferSize
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
__drv_minIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMCoReceiveComplete(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
__drv_minIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMCoSendComplete(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE NdisVcHandle,
|
||
|
__in PNDIS_PACKET Packet
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMCoRequestComplete(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in PNDIS_REQUEST Request
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMCmRequest(
|
||
|
__in NDIS_HANDLE NdisAfHandle,
|
||
|
__in_opt NDIS_HANDLE NdisVcHandle,
|
||
|
__in_opt NDIS_HANDLE NdisPartyHandle,
|
||
|
__inout PNDIS_REQUEST NdisRequest
|
||
|
);
|
||
|
|
||
|
#endif // NDIS_LEGACY_MINIPORT
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMCoActivateVcComplete(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE NdisVcHandle,
|
||
|
__in PCO_CALL_PARAMETERS CallParameters
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMCoDeactivateVcComplete(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE NdisVcHandle
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMCmRegisterAddressFamily(
|
||
|
IN NDIS_HANDLE MiniportAdapterHandle,
|
||
|
IN PCO_ADDRESS_FAMILY AddressFamily,
|
||
|
IN PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics,
|
||
|
IN UINT SizeOfCmCharacteristics
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
NDIS_STATUS
|
||
|
NdisMCmCreateVc(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in NDIS_HANDLE NdisAfHandle,
|
||
|
__in NDIS_HANDLE MiniportVcContext,
|
||
|
__out PNDIS_HANDLE NdisVcHandle
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMCmDeleteVc(
|
||
|
__in NDIS_HANDLE NdisVcHandle
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMCmActivateVc(
|
||
|
__in NDIS_HANDLE NdisVcHandle,
|
||
|
__in PCO_CALL_PARAMETERS CallParameters
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMCmDeactivateVc(
|
||
|
__in NDIS_HANDLE NdisVcHandle
|
||
|
);
|
||
|
|
||
|
|
||
|
#if NDIS_LEGACY_MINIPORT
|
||
|
|
||
|
// EXPORT
|
||
|
// VOID
|
||
|
// NdisMCmRequestComplete(
|
||
|
// IN NDIS_STATUS Status,
|
||
|
// IN NDIS_HANDLE NdisAfHandle,
|
||
|
// IN NDIS_HANDLE NdisVcHandle OPTIONAL,
|
||
|
// IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
|
||
|
// IN PNDIS_REQUEST NdisRequest
|
||
|
// );
|
||
|
#define NdisMCmRequestComplete(_S_, _AH_, _VH_, _PH_, _R_) \
|
||
|
NdisCoRequestComplete(_S_, _AH_, _VH_, _PH_, _R_)
|
||
|
#endif // NDIS_LEGACY_MINIPORT
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS6 || NDIS60)
|
||
|
|
||
|
// EXPORT
|
||
|
// VOID
|
||
|
// NdisMCmOidRequestComplete(
|
||
|
// IN NDIS_HANDLE NdisAfHandle,
|
||
|
// IN NDIS_HANDLE NdisVcHandle OPTIONAL,
|
||
|
// IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
|
||
|
// IN PNDIS_OID_REQUEST OidRequest,
|
||
|
// IN NDIS_STATUS Status
|
||
|
// );
|
||
|
#define NdisMCmOidRequestComplete(_AH_, _VH_, _PH_, _R_, _S_) \
|
||
|
NdisCoOidRequestComplete(_AH_, _VH_, _PH_, _R_, _S_)
|
||
|
#endif // NDIS_SUPPORT_NDIS6 || NDIS60
|
||
|
|
||
|
|
||
|
// EXPORT
|
||
|
// VOID
|
||
|
// NdisMCmOpenAddressFamilyComplete(
|
||
|
// IN NDIS_STATUS Status,
|
||
|
// IN NDIS_HANDLE NdisAfHandle,
|
||
|
// IN NDIS_HANDLE CallMgrAfContext
|
||
|
// );
|
||
|
|
||
|
#define NdisMCmOpenAddressFamilyComplete(_S_, _H_, _C_) \
|
||
|
NdisCmOpenAddressFamilyComplete(_S_, _H_, _C_)
|
||
|
// EXPORT
|
||
|
// NDIS_STATUS
|
||
|
// NdisMCmNotifyCloseAddressFamily(
|
||
|
// IN NDIS_HANDLE NdisAfHandle
|
||
|
// );
|
||
|
|
||
|
#define NdisMCmNotifyCloseAddressFamily(_AH_) \
|
||
|
NdisCmNotifyCloseAddressFamily(_AH_)
|
||
|
|
||
|
// EXPORT
|
||
|
// VOID
|
||
|
// NdisMCmCloseAddressFamilyComplete(
|
||
|
// IN NDIS_STATUS Status,
|
||
|
// IN NDIS_HANDLE NdisAfHandle
|
||
|
// );
|
||
|
|
||
|
#define NdisMCmCloseAddressFamilyComplete(_S_, _H_) \
|
||
|
NdisCmCloseAddressFamilyComplete(_S_, _H_)
|
||
|
|
||
|
|
||
|
|
||
|
// EXPORT
|
||
|
// VOID
|
||
|
// NdisMCmRegisterSapComplete(
|
||
|
// IN NDIS_STATUS Status,
|
||
|
// IN NDIS_HANDLE NdisSapHandle,
|
||
|
// IN NDIS_HANDLE CallMgrSapContext
|
||
|
// );
|
||
|
|
||
|
#define NdisMCmRegisterSapComplete(_S_, _H_, _C_) \
|
||
|
NdisCmRegisterSapComplete(_S_, _H_, _C_)
|
||
|
|
||
|
|
||
|
// EXPORT
|
||
|
// VOID
|
||
|
// NdisMCmDeregisterSapComplete(
|
||
|
// IN NDIS_STATUS Status,
|
||
|
// IN NDIS_HANDLE NdisSapHandle
|
||
|
// );
|
||
|
|
||
|
#define NdisMCmDeregisterSapComplete(_S_, _H_) \
|
||
|
NdisCmDeregisterSapComplete(_S_, _H_)
|
||
|
|
||
|
|
||
|
// EXPORT
|
||
|
// VOID
|
||
|
// NdisMCmMakeCallComplete(
|
||
|
// IN NDIS_STATUS Status,
|
||
|
// IN NDIS_HANDLE NdisVcHandle,
|
||
|
// IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
|
||
|
// IN NDIS_HANDLE CallMgrPartyContext OPTIONAL,
|
||
|
// IN PCO_CALL_PARAMETERS CallParameters
|
||
|
// );
|
||
|
|
||
|
#define NdisMCmMakeCallComplete(_S_, _VH_, _PH_, _CC_, _CP_) \
|
||
|
NdisCmMakeCallComplete(_S_, _VH_, _PH_, _CC_, _CP_)
|
||
|
|
||
|
|
||
|
// EXPORT
|
||
|
// VOID
|
||
|
// NdisMCmCloseCallComplete(
|
||
|
// IN NDIS_STATUS Status,
|
||
|
// IN NDIS_HANDLE NdisVcHandle,
|
||
|
// IN NDIS_HANDLE NdisPartyHandle OPTIONAL
|
||
|
// );
|
||
|
|
||
|
#define NdisMCmCloseCallComplete(_S_, _VH_, _PH_) \
|
||
|
NdisCmCloseCallComplete(_S_, _VH_, _PH_)
|
||
|
|
||
|
|
||
|
// EXPORT
|
||
|
// VOID
|
||
|
// NdisMCmAddPartyComplete(
|
||
|
// IN NDIS_STATUS Status,
|
||
|
// IN NDIS_HANDLE NdisPartyHandle,
|
||
|
// IN NDIS_HANDLE CallMgrPartyContext OPTIONAL,
|
||
|
// IN PCO_CALL_PARAMETERS CallParameters
|
||
|
// );
|
||
|
|
||
|
#define NdisMCmAddPartyComplete(_S_, _H_, _C_, _P_) \
|
||
|
NdisCmAddPartyComplete(_S_, _H_, _C_, _P_)
|
||
|
|
||
|
|
||
|
// EXPORT
|
||
|
// VOID
|
||
|
// NdisMCmDropPartyComplete(
|
||
|
// IN NDIS_STATUS Status,
|
||
|
// IN NDIS_HANDLE NdisPartyHandle
|
||
|
// );
|
||
|
|
||
|
#define NdisMCmDropPartyComplete(_S_, _H_) \
|
||
|
NdisCmDropPartyComplete(_S_, _H_)
|
||
|
|
||
|
|
||
|
// EXPORT
|
||
|
// NDIS_STATUS
|
||
|
// NdisMCmDispatchIncomingCall(
|
||
|
// IN NDIS_HANDLE NdisSapHandle,
|
||
|
// IN NDIS_HANDLE NdisVcHandle,
|
||
|
// IN PCO_CALL_PARAMETERS CallParameters
|
||
|
// );
|
||
|
|
||
|
#define NdisMCmDispatchIncomingCall(_SH_, _VH_, _CP_) \
|
||
|
NdisCmDispatchIncomingCall(_SH_, _VH_, _CP_)
|
||
|
|
||
|
|
||
|
// EXPORT
|
||
|
// VOID
|
||
|
// NdisMCmDispatchCallConnected(
|
||
|
// IN NDIS_HANDLE NdisVcHandle
|
||
|
// );
|
||
|
|
||
|
#define NdisMCmDispatchCallConnected(_H_) \
|
||
|
NdisCmDispatchCallConnected(_H_)
|
||
|
|
||
|
|
||
|
// EXPORT
|
||
|
// NdisMCmModifyCallQoSComplete(
|
||
|
// IN NDIS_STATUS Status,
|
||
|
// IN NDIS_HANDLE NdisVcHandle,
|
||
|
// IN PCO_CALL_PARAMETERS CallParameters
|
||
|
// );
|
||
|
|
||
|
#define NdisMCmModifyCallQoSComplete(_S_, _H_, _P_) \
|
||
|
NdisCmModifyCallQoSComplete(_S_, _H_, _P_)
|
||
|
|
||
|
|
||
|
// EXPORT
|
||
|
// VOID
|
||
|
// VOID
|
||
|
// NdisMCmDispatchIncomingCallQoSChange(
|
||
|
// IN NDIS_HANDLE NdisVcHandle,
|
||
|
// IN PCO_CALL_PARAMETERS CallParameters
|
||
|
// );
|
||
|
|
||
|
#define NdisMCmDispatchIncomingCallQoSChange(_H_, _P_) \
|
||
|
NdisCmDispatchIncomingCallQoSChange(_H_, _P_)
|
||
|
|
||
|
|
||
|
// EXPORT
|
||
|
// VOID
|
||
|
// NdisMCmDispatchIncomingCloseCall(
|
||
|
// IN NDIS_STATUS CloseStatus,
|
||
|
// IN NDIS_HANDLE NdisVcHandle,
|
||
|
// IN PVOID Buffer OPTIONAL,
|
||
|
// IN UINT Size
|
||
|
// );
|
||
|
|
||
|
#define NdisMCmDispatchIncomingCloseCall(_S_, _H_, _B_, _Z_) \
|
||
|
NdisCmDispatchIncomingCloseCall(_S_, _H_, _B_, _Z_)
|
||
|
|
||
|
|
||
|
// EXPORT
|
||
|
// VOID
|
||
|
// NdisMCmDispatchIncomingDropParty(
|
||
|
// IN NDIS_STATUS DropStatus,
|
||
|
// IN NDIS_HANDLE NdisPartyHandle,
|
||
|
// IN PVOID Buffer OPTIONAL,
|
||
|
// IN UINT Size
|
||
|
// );
|
||
|
#define NdisMCmDispatchIncomingDropParty(_S_, _H_, _B_, _Z_) \
|
||
|
NdisCmDispatchIncomingDropParty(_S_, _H_, _B_, _Z_)
|
||
|
|
||
|
|
||
|
#if NDIS_SUPPORT_NDIS6
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMRegisterScatterGatherDma(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in PNDIS_SG_DMA_DESCRIPTION DmaDescription,
|
||
|
__out PNDIS_HANDLE NdisMiniportDmaHandle
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMDeregisterScatterGatherDma(
|
||
|
__in NDIS_HANDLE NdisMiniportDmaHandle
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// flags used in the call to NdisMAllocateNetBufferSGList
|
||
|
//
|
||
|
#define NDIS_SG_LIST_WRITE_TO_DEVICE 0x000000001
|
||
|
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_requiresIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMAllocateNetBufferSGList(
|
||
|
__in NDIS_HANDLE NdisMiniportDmaHandle,
|
||
|
__in PNET_BUFFER NetBuffer,
|
||
|
__in __drv_isObjectPointer
|
||
|
PVOID Context,
|
||
|
__in ULONG Flags,
|
||
|
__in_bcount_opt(ScatterGatherListBufferSize) __drv_isObjectPointer
|
||
|
PVOID ScatterGatherListBuffer,
|
||
|
__in ULONG ScatterGatherListBufferSize
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMFreeNetBufferSGList(
|
||
|
__in NDIS_HANDLE NdisMiniportDmaHandle,
|
||
|
__in PSCATTER_GATHER_LIST pSGL,
|
||
|
__in PNET_BUFFER NetBuffer
|
||
|
);
|
||
|
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMRegisterMiniportDriver(
|
||
|
__in PDRIVER_OBJECT DriverObject,
|
||
|
__in PUNICODE_STRING RegistryPath,
|
||
|
__in_opt NDIS_HANDLE MiniportDriverContext,
|
||
|
__in PNDIS_MINIPORT_DRIVER_CHARACTERISTICS MiniportDriverCharacteristics,
|
||
|
__out PNDIS_HANDLE NdisMiniportDriverHandle
|
||
|
);
|
||
|
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMDeregisterMiniportDriver(
|
||
|
__in NDIS_HANDLE NdisMiniportDriverHandle
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMPauseComplete(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMRestartComplete(
|
||
|
IN NDIS_HANDLE MiniportAdapterHandle,
|
||
|
IN NDIS_STATUS Status
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMOidRequestComplete(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in PNDIS_OID_REQUEST OidRequest,
|
||
|
__in NDIS_STATUS Status
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMSendNetBufferListsComplete(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in PNET_BUFFER_LIST NetBufferList,
|
||
|
__in ULONG SendCompleteFlags
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMIndicateReceiveNetBufferLists(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in PNET_BUFFER_LIST NetBufferList,
|
||
|
__in NDIS_PORT_NUMBER PortNumber,
|
||
|
__in ULONG NumberOfNetBufferLists,
|
||
|
__in ULONG ReceiveFlags
|
||
|
);
|
||
|
|
||
|
|
||
|
//
|
||
|
// IO workitem routines
|
||
|
//
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_HANDLE
|
||
|
NdisAllocateIoWorkItem(
|
||
|
__in NDIS_HANDLE NdisObjectHandle
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
VOID
|
||
|
(NDIS_IO_WORKITEM_FUNCTION)(
|
||
|
IN PVOID WorkItemContext,
|
||
|
IN NDIS_HANDLE NdisIoWorkItemHandle
|
||
|
);
|
||
|
typedef NDIS_IO_WORKITEM_FUNCTION (*NDIS_IO_WORKITEM_ROUTINE);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisQueueIoWorkItem(
|
||
|
__in NDIS_HANDLE NdisIoWorkItemHandle,
|
||
|
__in NDIS_IO_WORKITEM_ROUTINE Routine,
|
||
|
__in __drv_isObjectPointer PVOID WorkItemContext
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFreeIoWorkItem(
|
||
|
__in NDIS_HANDLE NdisIoWorkItemHandle
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// CONDIS 6.0 extensions
|
||
|
//
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMCoSendNetBufferListsComplete(
|
||
|
IN NDIS_HANDLE NdisVcHandle,
|
||
|
IN PNET_BUFFER_LIST NetBufferLists,
|
||
|
IN ULONG SendCompleteFlags
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMCoIndicateReceiveNetBufferLists(
|
||
|
IN NDIS_HANDLE NdisVcHandle,
|
||
|
IN PNET_BUFFER_LIST NetBufferLists,
|
||
|
IN ULONG NumberOfNetBufferLists,
|
||
|
IN ULONG CoReceiveFlags
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMNetPnPEvent(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in PNET_PNP_EVENT_NOTIFICATION NetPnPEventNotification
|
||
|
);
|
||
|
|
||
|
|
||
|
#if NDIS_SUPPORT_NDIS6
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
#endif NDIS_SUPPORT_NDIS6
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMResetComplete(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in BOOLEAN AddressingReset
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
ULONG
|
||
|
NdisMGetBusData(
|
||
|
__in NDIS_HANDLE NdisMiniportHandle,
|
||
|
__in ULONG WhichSpace,
|
||
|
__in ULONG Offset,
|
||
|
__out_bcount_full(Length) PVOID Buffer,
|
||
|
__in ULONG Length
|
||
|
);
|
||
|
|
||
|
EXPORT
|
||
|
ULONG
|
||
|
NdisMSetBusData(
|
||
|
IN NDIS_HANDLE NdisMiniportHandle,
|
||
|
IN ULONG WhichSpace,
|
||
|
IN ULONG Offset,
|
||
|
IN PVOID Buffer,
|
||
|
IN ULONG Length
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// NDIS port APIs
|
||
|
//
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMAllocatePort(
|
||
|
__in NDIS_HANDLE NdisMiniportHandle,
|
||
|
__inout PNDIS_PORT_CHARACTERISTICS PortCharacteristics
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMFreePort(
|
||
|
__in NDIS_HANDLE NdisMiniportHandle,
|
||
|
__in NDIS_PORT_NUMBER PortNumber
|
||
|
);
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisMDirectOidRequestComplete(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in PNDIS_OID_REQUEST OidRequest,
|
||
|
__in NDIS_STATUS Status
|
||
|
);
|
||
|
|
||
|
typedef enum _NDIS_MSIX_TABLE_CONFIG
|
||
|
{
|
||
|
NdisMSIXTableConfigSetTableEntry,
|
||
|
NdisMSIXTableConfigMaskTableEntry,
|
||
|
NdisMSIXTableConfigUnmaskTableEntry,
|
||
|
NdisMSIXTableConfigMax
|
||
|
}NDIS_MSIX_TABLE_OPERATION, *PNDIS_MSIX_TABLE_OPERATION;
|
||
|
|
||
|
#define NDIS_MSIX_CONFIG_PARAMETERS_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_MSIX_CONFIG_PARAMETERS
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
NDIS_MSIX_TABLE_OPERATION ConfigOperation;
|
||
|
ULONG TableEntry;
|
||
|
ULONG MessageNumber;
|
||
|
}NDIS_MSIX_CONFIG_PARAMETERS, *PNDIS_MSIX_CONFIG_PARAMETERS;
|
||
|
|
||
|
#define NDIS_SIZEOF_MSIX_CONFIG_PARAMETERS_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_MSIX_CONFIG_PARAMETERS, MessageNumber)
|
||
|
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMConfigMSIXTableEntry(
|
||
|
__in NDIS_HANDLE NdisMiniportHandle,
|
||
|
__in PNDIS_MSIX_CONFIG_PARAMETERS MSIXConfigParameters
|
||
|
);
|
||
|
|
||
|
#endif // (NDIS_SUPPORT_NDIS61)
|
||
|
|
||
|
#endif // NDIS_SUPPORT_NDIS6
|
||
|
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
typedef struct _CO_CALL_PARAMETERS CO_CALL_PARAMETERS, *PCO_CALL_PARAMETERS;
|
||
|
typedef struct _CO_MEDIA_PARAMETERS CO_MEDIA_PARAMETERS, *PCO_MEDIA_PARAMETERS;
|
||
|
|
||
|
//
|
||
|
// CoNdis client only handler proto-types - used by clients of call managers
|
||
|
//
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_CL_OPEN_AF_COMPLETE)(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE ProtocolAfContext,
|
||
|
__in NDIS_HANDLE NdisAfHandle
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CL_OPEN_AF_COMPLETE (*CL_OPEN_AF_COMPLETE_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_CL_CLOSE_AF_COMPLETE)(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE ProtocolAfContext
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CL_CLOSE_AF_COMPLETE (*CL_CLOSE_AF_COMPLETE_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_CL_REGISTER_SAP_COMPLETE)(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE ProtocolSapContext,
|
||
|
__in PCO_SAP Sap,
|
||
|
__in NDIS_HANDLE NdisSapHandle
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CL_REGISTER_SAP_COMPLETE (*CL_REG_SAP_COMPLETE_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_CL_DEREGISTER_SAP_COMPLETE)(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE ProtocolSapContext
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CL_DEREGISTER_SAP_COMPLETE (*CL_DEREG_SAP_COMPLETE_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_CL_MAKE_CALL_COMPLETE)(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE ProtocolVcContext,
|
||
|
__in_opt NDIS_HANDLE NdisPartyHandle,
|
||
|
__in PCO_CALL_PARAMETERS CallParameters
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CL_MAKE_CALL_COMPLETE (*CL_MAKE_CALL_COMPLETE_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_CL_CLOSE_CALL_COMPLETE)(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE ProtocolVcContext,
|
||
|
__in_opt NDIS_HANDLE ProtocolPartyContext
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CL_CLOSE_CALL_COMPLETE (*CL_CLOSE_CALL_COMPLETE_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_CL_ADD_PARTY_COMPLETE)(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE ProtocolPartyContext,
|
||
|
__in NDIS_HANDLE NdisPartyHandle,
|
||
|
__in PCO_CALL_PARAMETERS CallParameters
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CL_ADD_PARTY_COMPLETE (*CL_ADD_PARTY_COMPLETE_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_CL_DROP_PARTY_COMPLETE)(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE ProtocolPartyContext
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CL_DROP_PARTY_COMPLETE (*CL_DROP_PARTY_COMPLETE_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
NDIS_STATUS
|
||
|
(PROTOCOL_CL_INCOMING_CALL)(
|
||
|
__in NDIS_HANDLE ProtocolSapContext,
|
||
|
__in NDIS_HANDLE ProtocolVcContext,
|
||
|
__inout PCO_CALL_PARAMETERS CallParameters
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CL_INCOMING_CALL (*CL_INCOMING_CALL_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_CL_CALL_CONNECTED)(
|
||
|
__in NDIS_HANDLE ProtocolVcContext
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CL_CALL_CONNECTED (*CL_CALL_CONNECTED_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_CL_INCOMING_CLOSE_CALL)(
|
||
|
__in NDIS_STATUS CloseStatus,
|
||
|
__in NDIS_HANDLE ProtocolVcContext,
|
||
|
__in_opt PVOID CloseData,
|
||
|
__in_opt UINT Size
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CL_INCOMING_CLOSE_CALL (*CL_INCOMING_CLOSE_CALL_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_CL_INCOMING_DROP_PARTY)(
|
||
|
__in NDIS_STATUS DropStatus,
|
||
|
__in NDIS_HANDLE ProtocolPartyContext,
|
||
|
__in_opt PVOID CloseData,
|
||
|
__in_opt UINT Size
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CL_INCOMING_DROP_PARTY (*CL_INCOMING_DROP_PARTY_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_CL_MODIFY_CALL_QOS_COMPLETE)(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE ProtocolVcContext,
|
||
|
__in PCO_CALL_PARAMETERS CallParameters
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CL_MODIFY_CALL_QOS_COMPLETE (*CL_MODIFY_CALL_QOS_COMPLETE_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_CL_INCOMING_CALL_QOS_CHANGE)(
|
||
|
__in NDIS_HANDLE ProtocolVcContext,
|
||
|
__in PCO_CALL_PARAMETERS CallParameters
|
||
|
);
|
||
|
typedef PROTOCOL_CL_INCOMING_CALL_QOS_CHANGE (*CL_INCOMING_CALL_QOS_CHANGE_HANDLER);
|
||
|
|
||
|
#if NDIS_LEGACY_PROTOCOL
|
||
|
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;
|
||
|
#endif // NDIS_LEGACY_PROTOCOL
|
||
|
|
||
|
//
|
||
|
// CoNdis call-manager only handler proto-types - used by call managers only
|
||
|
//
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
NDIS_STATUS
|
||
|
(PROTOCOL_CM_OPEN_AF)(
|
||
|
__in NDIS_HANDLE CallMgrBindingContext,
|
||
|
__in PCO_ADDRESS_FAMILY AddressFamily,
|
||
|
__in NDIS_HANDLE NdisAfHandle,
|
||
|
__out PNDIS_HANDLE CallMgrAfContext
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CM_OPEN_AF (*CM_OPEN_AF_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
NDIS_STATUS
|
||
|
(PROTOCOL_CM_CLOSE_AF)(
|
||
|
__in NDIS_HANDLE CallMgrAfContext
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CM_CLOSE_AF (*CM_CLOSE_AF_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
NDIS_STATUS
|
||
|
(PROTOCOL_CM_REG_SAP)(
|
||
|
__in NDIS_HANDLE CallMgrAfContext,
|
||
|
__in PCO_SAP Sap,
|
||
|
__in NDIS_HANDLE NdisSapHandle,
|
||
|
__out PNDIS_HANDLE CallMgrSapContext
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CM_REG_SAP (*CM_REG_SAP_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
NDIS_STATUS
|
||
|
(PROTOCOL_CM_DEREGISTER_SAP)(
|
||
|
__in NDIS_HANDLE CallMgrSapContext
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CM_DEREGISTER_SAP (*CM_DEREG_SAP_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
NDIS_STATUS
|
||
|
(PROTOCOL_CM_MAKE_CALL)(
|
||
|
__in NDIS_HANDLE CallMgrVcContext,
|
||
|
__inout PCO_CALL_PARAMETERS CallParameters,
|
||
|
__in_opt NDIS_HANDLE NdisPartyHandle,
|
||
|
__out_opt PNDIS_HANDLE CallMgrPartyContext
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CM_MAKE_CALL (*CM_MAKE_CALL_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
NDIS_STATUS
|
||
|
(PROTOCOL_CM_CLOSE_CALL)(
|
||
|
__in NDIS_HANDLE CallMgrVcContext,
|
||
|
__in_opt NDIS_HANDLE CallMgrPartyContext,
|
||
|
__in_opt PVOID CloseData,
|
||
|
__in_opt UINT Size
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CM_CLOSE_CALL (*CM_CLOSE_CALL_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
NDIS_STATUS
|
||
|
(PROTOCOL_CM_MODIFY_QOS_CALL)(
|
||
|
__in NDIS_HANDLE CallMgrVcContext,
|
||
|
__in PCO_CALL_PARAMETERS CallParameters
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CM_MODIFY_QOS_CALL (*CM_MODIFY_CALL_QOS_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_CM_INCOMING_CALL_COMPLETE)(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE CallMgrVcContext,
|
||
|
__in PCO_CALL_PARAMETERS CallParameters
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CM_INCOMING_CALL_COMPLETE (*CM_INCOMING_CALL_COMPLETE_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_CM_ACTIVATE_VC_COMPLETE)(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE CallMgrVcContext,
|
||
|
__in PCO_CALL_PARAMETERS CallParameters
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CM_ACTIVATE_VC_COMPLETE (*CM_ACTIVATE_VC_COMPLETE_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(PROTOCOL_CM_DEACTIVATE_VC_COMPLETE)(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE CallMgrVcContext
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CM_DEACTIVATE_VC_COMPLETE (*CM_DEACTIVATE_VC_COMPLETE_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
NDIS_STATUS
|
||
|
(PROTOCOL_CM_ADD_PARTY)(
|
||
|
__in NDIS_HANDLE CallMgrVcContext,
|
||
|
__inout PCO_CALL_PARAMETERS CallParameters,
|
||
|
__in NDIS_HANDLE NdisPartyHandle,
|
||
|
__out PNDIS_HANDLE CallMgrPartyContext
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CM_ADD_PARTY (*CM_ADD_PARTY_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
NDIS_STATUS
|
||
|
(PROTOCOL_CM_DROP_PARTY)(
|
||
|
__in NDIS_HANDLE CallMgrPartyContext,
|
||
|
__in_opt PVOID CloseData,
|
||
|
__in_opt UINT Size
|
||
|
);
|
||
|
|
||
|
typedef PROTOCOL_CM_DROP_PARTY (*CM_DROP_PARTY_HANDLER);
|
||
|
|
||
|
#if NDIS_LEGACY_DRIVER
|
||
|
|
||
|
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;
|
||
|
|
||
|
#endif // NDIS_LEGACY_DRIVER
|
||
|
|
||
|
//
|
||
|
// this send flag is used on ATM net cards to set ( turn on ) the CLP bit
|
||
|
// (Cell Loss Priority) bit
|
||
|
//
|
||
|
#define CO_SEND_FLAG_SET_DISCARD_ELIBILITY 0x00000001
|
||
|
|
||
|
//
|
||
|
// the Address structure used on NDIS_CO_ADD_ADDRESS or NDIS_CO_DELETE_ADDRESS
|
||
|
//
|
||
|
typedef struct _CO_ADDRESS
|
||
|
{
|
||
|
ULONG AddressSize;
|
||
|
UCHAR Address[1];
|
||
|
} CO_ADDRESS, *PCO_ADDRESS;
|
||
|
|
||
|
//
|
||
|
// the list of addresses returned from the CallMgr on a NDIS_CO_GET_ADDRESSES
|
||
|
//
|
||
|
typedef struct _CO_ADDRESS_LIST
|
||
|
{
|
||
|
ULONG NumberOfAddressesAvailable;
|
||
|
ULONG NumberOfAddresses;
|
||
|
CO_ADDRESS AddressList;
|
||
|
} CO_ADDRESS_LIST, *PCO_ADDRESS_LIST;
|
||
|
|
||
|
#ifndef FAR
|
||
|
#define FAR
|
||
|
#endif
|
||
|
#include <qos.h>
|
||
|
|
||
|
typedef struct _CO_SPECIFIC_PARAMETERS
|
||
|
{
|
||
|
ULONG ParamType;
|
||
|
ULONG Length;
|
||
|
UCHAR Parameters[1];
|
||
|
} CO_SPECIFIC_PARAMETERS, *PCO_SPECIFIC_PARAMETERS;
|
||
|
|
||
|
typedef struct _CO_CALL_MANAGER_PARAMETERS
|
||
|
{
|
||
|
FLOWSPEC Transmit;
|
||
|
FLOWSPEC Receive;
|
||
|
CO_SPECIFIC_PARAMETERS CallMgrSpecific;
|
||
|
} CO_CALL_MANAGER_PARAMETERS, *PCO_CALL_MANAGER_PARAMETERS;
|
||
|
|
||
|
|
||
|
//
|
||
|
// this is the generic portion of the media parameters, including the media
|
||
|
// specific component too.
|
||
|
//
|
||
|
typedef struct _CO_MEDIA_PARAMETERS
|
||
|
{
|
||
|
ULONG Flags;
|
||
|
ULONG ReceivePriority;
|
||
|
ULONG ReceiveSizeHint;
|
||
|
CO_SPECIFIC_PARAMETERS POINTER_ALIGNMENT MediaSpecific;
|
||
|
} CO_MEDIA_PARAMETERS, *PCO_MEDIA_PARAMETERS;
|
||
|
|
||
|
|
||
|
//
|
||
|
// definitions for the flags in CO_MEDIA_PARAMETERS
|
||
|
//
|
||
|
#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
|
||
|
//
|
||
|
// define a flag to set in the flags of an Ndis packet when the miniport
|
||
|
// indicates a receive with an error in it
|
||
|
//
|
||
|
#define ERRED_PACKET_INDICATION 0x00000001
|
||
|
|
||
|
//
|
||
|
// this is the structure passed during call-setup
|
||
|
//
|
||
|
typedef struct _CO_CALL_PARAMETERS
|
||
|
{
|
||
|
ULONG Flags;
|
||
|
PCO_CALL_MANAGER_PARAMETERS CallMgrParameters;
|
||
|
PCO_MEDIA_PARAMETERS MediaParameters;
|
||
|
} CO_CALL_PARAMETERS, *PCO_CALL_PARAMETERS;
|
||
|
|
||
|
//
|
||
|
// Definitions for the Flags in CO_CALL_PARAMETERS
|
||
|
//
|
||
|
#define PERMANENT_VC 0x00000001
|
||
|
#define CALL_PARAMETERS_CHANGED 0x00000002
|
||
|
#define QUERY_CALL_PARAMETERS 0x00000004
|
||
|
#define BROADCAST_VC 0x00000008
|
||
|
#define MULTIPOINT_VC 0x00000010
|
||
|
|
||
|
//
|
||
|
// The format of the Request for adding/deleting a PVC
|
||
|
//
|
||
|
typedef struct _CO_PVC
|
||
|
{
|
||
|
NDIS_HANDLE NdisAfHandle;
|
||
|
CO_SPECIFIC_PARAMETERS PvcParameters;
|
||
|
} CO_PVC,*PCO_PVC;
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// NDIS 5.0 Extensions for protocols
|
||
|
//
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
__drv_minIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisCoAssignInstanceName(
|
||
|
__in NDIS_HANDLE NdisVcHandle,
|
||
|
__in PNDIS_STRING BaseInstanceName,
|
||
|
__out_opt PNDIS_STRING VcInstanceName
|
||
|
);
|
||
|
|
||
|
#if NDIS_LEGACY_PROTOCOL
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCoSendPackets(
|
||
|
__in NDIS_HANDLE NdisVcHandle,
|
||
|
__in PPNDIS_PACKET PacketArray,
|
||
|
__in UINT NumberOfPackets
|
||
|
);
|
||
|
|
||
|
#endif // NDIS_LEGACY_PROTOCOL
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisCoCreateVc(
|
||
|
__in NDIS_HANDLE NdisBindingHandle,
|
||
|
__in_opt NDIS_HANDLE NdisAfHandle, // For CM signalling VCs
|
||
|
__in NDIS_HANDLE ProtocolVcContext,
|
||
|
__inout PNDIS_HANDLE NdisVcHandle
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisCoDeleteVc(
|
||
|
__in NDIS_HANDLE NdisVcHandle
|
||
|
);
|
||
|
|
||
|
#if NDIS_LEGACY_PROTOCOL
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisCoRequest(
|
||
|
__in NDIS_HANDLE NdisBindingHandle,
|
||
|
__in_opt NDIS_HANDLE NdisAfHandle,
|
||
|
__in_opt NDIS_HANDLE NdisVcHandle,
|
||
|
__in_opt NDIS_HANDLE NdisPartyHandle,
|
||
|
__inout PNDIS_REQUEST NdisRequest
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCoRequestComplete(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE NdisAfHandle,
|
||
|
__in_opt NDIS_HANDLE NdisVcHandle,
|
||
|
__in_opt NDIS_HANDLE NdisPartyHandle,
|
||
|
__in PNDIS_REQUEST NdisRequest
|
||
|
);
|
||
|
|
||
|
#endif // NDIS_LEGACY_PROTOCOL
|
||
|
|
||
|
#ifndef __NDISTAPI_VAR_STRING_DECLARED
|
||
|
#define __NDISTAPI_VAR_STRING_DECLARED
|
||
|
|
||
|
typedef struct _VAR_STRING
|
||
|
{
|
||
|
ULONG ulTotalSize;
|
||
|
ULONG ulNeededSize;
|
||
|
ULONG ulUsedSize;
|
||
|
|
||
|
ULONG ulStringFormat;
|
||
|
ULONG ulStringSize;
|
||
|
ULONG ulStringOffset;
|
||
|
|
||
|
} VAR_STRING, *PVAR_STRING;
|
||
|
|
||
|
#endif // __NDISTAPI_VAR_STRING_DECLARED
|
||
|
|
||
|
|
||
|
#ifndef __NDISTAPI_STRINGFORMATS_DEFINED
|
||
|
#define __NDISTAPI_STRINGFORMATS_DEFINED
|
||
|
|
||
|
#define STRINGFORMAT_ASCII 0x00000001
|
||
|
#define STRINGFORMAT_DBCS 0x00000002
|
||
|
#define STRINGFORMAT_UNICODE 0x00000003
|
||
|
#define STRINGFORMAT_BINARY 0x00000004
|
||
|
|
||
|
#endif // __NDISTAPI_STRINGFORMATS_DEFINED
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
__drv_minIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisCoGetTapiCallId(
|
||
|
__in NDIS_HANDLE NdisVcHandle,
|
||
|
__inout PVAR_STRING TapiCallId
|
||
|
);
|
||
|
|
||
|
#if NDIS_LEGACY_PROTOCOL
|
||
|
//
|
||
|
// Client Apis
|
||
|
//
|
||
|
__checkReturn
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
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
|
||
|
);
|
||
|
|
||
|
#endif // NDIS_LEGACY_PROTOCOL
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisClCloseAddressFamily(
|
||
|
__in NDIS_HANDLE NdisAfHandle
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisClRegisterSap(
|
||
|
__in NDIS_HANDLE NdisAfHandle,
|
||
|
__in NDIS_HANDLE ProtocolSapContext,
|
||
|
__in PCO_SAP Sap,
|
||
|
__out PNDIS_HANDLE NdisSapHandle
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisClDeregisterSap(
|
||
|
__in NDIS_HANDLE NdisSapHandle
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisClMakeCall(
|
||
|
__in NDIS_HANDLE NdisVcHandle,
|
||
|
__inout PCO_CALL_PARAMETERS CallParameters,
|
||
|
__in_opt NDIS_HANDLE ProtocolPartyContext,
|
||
|
__out_opt PNDIS_HANDLE NdisPartyHandle
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisClCloseCall(
|
||
|
__in NDIS_HANDLE NdisVcHandle,
|
||
|
__in_opt NDIS_HANDLE NdisPartyHandle,
|
||
|
__in_bcount_opt(Size) PVOID Buffer,
|
||
|
__in UINT Size
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisClModifyCallQoS(
|
||
|
__in NDIS_HANDLE NdisVcHandle,
|
||
|
__in PCO_CALL_PARAMETERS CallParameters
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisClIncomingCallComplete(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE NdisVcHandle,
|
||
|
__in PCO_CALL_PARAMETERS CallParameters
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisClAddParty(
|
||
|
__in NDIS_HANDLE NdisVcHandle,
|
||
|
__in NDIS_HANDLE ProtocolPartyContext,
|
||
|
__inout PCO_CALL_PARAMETERS CallParameters,
|
||
|
__out PNDIS_HANDLE NdisPartyHandle
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisClDropParty(
|
||
|
__in NDIS_HANDLE NdisPartyHandle,
|
||
|
__in_bcount_opt(Size) PVOID Buffer,
|
||
|
__in_opt UINT Size
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
__drv_minIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisClGetProtocolVcContextFromTapiCallId(
|
||
|
__in UNICODE_STRING TapiCallId,
|
||
|
__out PNDIS_HANDLE ProtocolVcContext
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Call Manager Apis
|
||
|
//
|
||
|
|
||
|
#if NDIS_LEGACY_DRIVER
|
||
|
__checkReturn
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisCmRegisterAddressFamily(
|
||
|
__in NDIS_HANDLE NdisBindingHandle,
|
||
|
__in PCO_ADDRESS_FAMILY AddressFamily,
|
||
|
__in PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics,
|
||
|
__in UINT SizeOfCmCharacteristics
|
||
|
);
|
||
|
|
||
|
#endif
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCmOpenAddressFamilyComplete(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE NdisAfHandle,
|
||
|
__in NDIS_HANDLE CallMgrAfContext
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCmCloseAddressFamilyComplete(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE NdisAfHandle
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCmRegisterSapComplete(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE NdisSapHandle,
|
||
|
__in NDIS_HANDLE CallMgrSapContext
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCmDeregisterSapComplete(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE NdisSapHandle
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisCmActivateVc(
|
||
|
__in NDIS_HANDLE NdisVcHandle,
|
||
|
__inout PCO_CALL_PARAMETERS CallParameters
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisCmDeactivateVc(
|
||
|
__in NDIS_HANDLE NdisVcHandle
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCmMakeCallComplete(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE NdisVcHandle,
|
||
|
__in_opt NDIS_HANDLE NdisPartyHandle,
|
||
|
__in_opt NDIS_HANDLE CallMgrPartyContext,
|
||
|
__in PCO_CALL_PARAMETERS CallParameters
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCmCloseCallComplete(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE NdisVcHandle,
|
||
|
__in_opt NDIS_HANDLE NdisPartyHandle
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCmAddPartyComplete(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE NdisPartyHandle,
|
||
|
__in_opt NDIS_HANDLE CallMgrPartyContext,
|
||
|
__in PCO_CALL_PARAMETERS CallParameters
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCmDropPartyComplete(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE NdisPartyHandle
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisCmDispatchIncomingCall(
|
||
|
__in NDIS_HANDLE NdisSapHandle,
|
||
|
__in NDIS_HANDLE NdisVcHandle,
|
||
|
__in PCO_CALL_PARAMETERS CallParameters
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCmDispatchCallConnected(
|
||
|
__in NDIS_HANDLE NdisVcHandle
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCmModifyCallQoSComplete(
|
||
|
__in NDIS_STATUS Status,
|
||
|
__in NDIS_HANDLE NdisVcHandle,
|
||
|
__in PCO_CALL_PARAMETERS CallParameters
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCmDispatchIncomingCallQoSChange(
|
||
|
__in NDIS_HANDLE NdisVcHandle,
|
||
|
__in PCO_CALL_PARAMETERS CallParameters
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCmDispatchIncomingCloseCall(
|
||
|
__in NDIS_STATUS CloseStatus,
|
||
|
__in NDIS_HANDLE NdisVcHandle,
|
||
|
__in_bcount_opt(Size) PVOID Buffer,
|
||
|
__in UINT Size
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCmDispatchIncomingDropParty(
|
||
|
__in NDIS_STATUS DropStatus,
|
||
|
__in NDIS_HANDLE NdisPartyHandle,
|
||
|
__in_bcount_opt(Size) PVOID Buffer,
|
||
|
__in UINT Size
|
||
|
);
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS6)
|
||
|
|
||
|
//
|
||
|
// CONDIS 6.0 extensions
|
||
|
//
|
||
|
#define NDIS_CO_CLIENT_OPTIONAL_HANDLERS_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_CO_CLIENT_OPTIONAL_HANDLERS
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
ULONG Reserved;
|
||
|
|
||
|
CO_CREATE_VC_HANDLER ClCreateVcHandler;
|
||
|
CO_DELETE_VC_HANDLER ClDeleteVcHandler;
|
||
|
CO_OID_REQUEST_HANDLER ClOidRequestHandler;
|
||
|
CO_OID_REQUEST_COMPLETE_HANDLER ClOidRequestCompleteHandler;
|
||
|
CL_OPEN_AF_COMPLETE_HANDLER_EX ClOpenAfCompleteHandlerEx;
|
||
|
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;
|
||
|
CL_NOTIFY_CLOSE_AF_HANDLER ClNotifyCloseAfHandler;
|
||
|
}NDIS_CO_CLIENT_OPTIONAL_HANDLERS, *PNDIS_CO_CLIENT_OPTIONAL_HANDLERS;
|
||
|
|
||
|
#define NDIS_SIZEOF_CO_CLIENT_OPTIONAL_HANDLERS_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_CO_CLIENT_OPTIONAL_HANDLERS, ClNotifyCloseAfHandler)
|
||
|
|
||
|
#define NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
ULONG 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_OID_REQUEST_HANDLER CmOidRequestHandler;
|
||
|
CO_OID_REQUEST_COMPLETE_HANDLER CmOidRequestCompleteHandler;
|
||
|
CM_NOTIFY_CLOSE_AF_COMPLETE_HANDLER CmNotifyCloseAfCompleteHandler;
|
||
|
|
||
|
} NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS, *PNDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS;
|
||
|
|
||
|
#define NDIS_SIZEOF_CO_CALL_MANAGER_OPTIONAL_HANDLERS_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS, CmOidRequestCompleteHandler)
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCoSendNetBufferLists(
|
||
|
__in NDIS_HANDLE NdisVcHandle,
|
||
|
__in PNET_BUFFER_LIST NetBufferLists,
|
||
|
__in ULONG SendFlags
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisCoOidRequest(
|
||
|
__in NDIS_HANDLE NdisBindingHandle,
|
||
|
__in_opt NDIS_HANDLE NdisAfHandle,
|
||
|
__in_opt NDIS_HANDLE NdisVcHandle,
|
||
|
__in_opt NDIS_HANDLE NdisPartyHandle,
|
||
|
__inout PNDIS_OID_REQUEST OidRequest
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisCoOidRequestComplete(
|
||
|
__in NDIS_HANDLE NdisAfHandle,
|
||
|
__in_opt NDIS_HANDLE NdisVcHandle,
|
||
|
__in_opt NDIS_HANDLE NdisPartyHandle,
|
||
|
__in PNDIS_OID_REQUEST OidRequest,
|
||
|
__in NDIS_STATUS Status
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisClOpenAddressFamilyEx (
|
||
|
__in NDIS_HANDLE NdisBindingHandle,
|
||
|
__in PCO_ADDRESS_FAMILY AddressFamily,
|
||
|
__in NDIS_HANDLE ClientAfContext,
|
||
|
__out PNDIS_HANDLE NdisAfHandle
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisCmRegisterAddressFamilyEx(
|
||
|
__in NDIS_HANDLE NdisBindingHandle,
|
||
|
__in PCO_ADDRESS_FAMILY AddressFamily
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisMCmRegisterAddressFamilyEx(
|
||
|
__in NDIS_HANDLE MiniportAdapterHandle,
|
||
|
__in PCO_ADDRESS_FAMILY AddressFamily
|
||
|
);
|
||
|
|
||
|
__checkReturn
|
||
|
__drv_requiresIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisCmNotifyCloseAddressFamily (
|
||
|
__in NDIS_HANDLE NdisAfHandle
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisClNotifyCloseAddressFamilyComplete (
|
||
|
__in NDIS_HANDLE NdisAfHandle,
|
||
|
__in NDIS_STATUS Status
|
||
|
);
|
||
|
|
||
|
|
||
|
#endif // NDIS_SUPPORT_NDIS6
|
||
|
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
#if NDIS_SUPPORT_NDIS6
|
||
|
//
|
||
|
// Ndis Light Weight filters
|
||
|
//
|
||
|
|
||
|
|
||
|
//
|
||
|
// init / de-init
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// Flags used in NDIS_FILTER_ATTACH_PARAMETERS
|
||
|
//
|
||
|
|
||
|
#define NDIS_FILTER_ATTACH_FLAGS_IGNORE_MANDATORY 0x00000001 // If a mandatory filter fails to attach, it can set the flag
|
||
|
// to ask NDIS to ignore it is a mandatory filter
|
||
|
|
||
|
|
||
|
#define NDIS_FILTER_ATTACH_PARAMETERS_REVISION_1 1
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
#define NDIS_FILTER_ATTACH_PARAMETERS_REVISION_2 2
|
||
|
#endif // (NDIS_SUPPORT_NDIS61)
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
#define NDIS_FILTER_ATTACH_PARAMETERS_REVISION_3 3
|
||
|
#endif // (NDIS_SUPPORT_NDIS61)
|
||
|
|
||
|
typedef struct _NDIS_FILTER_ATTACH_PARAMETERS
|
||
|
{
|
||
|
__in NDIS_OBJECT_HEADER Header;
|
||
|
__in NET_IFINDEX IfIndex;
|
||
|
__in NET_LUID NetLuid;
|
||
|
__in PNDIS_STRING FilterModuleGuidName;
|
||
|
__in NET_IFINDEX BaseMiniportIfIndex;
|
||
|
__in PNDIS_STRING BaseMiniportInstanceName;
|
||
|
__in PNDIS_STRING BaseMiniportName;
|
||
|
__in NDIS_MEDIA_CONNECT_STATE MediaConnectState;
|
||
|
__in NET_IF_MEDIA_DUPLEX_STATE MediaDuplexState;
|
||
|
__in ULONG64 XmitLinkSpeed;
|
||
|
__in ULONG64 RcvLinkSpeed;
|
||
|
__inout NDIS_MEDIUM MiniportMediaType;
|
||
|
__inout NDIS_PHYSICAL_MEDIUM MiniportPhysicalMediaType;
|
||
|
__in NDIS_HANDLE MiniportMediaSpecificAttributes;
|
||
|
__in PNDIS_OFFLOAD DefaultOffloadConfiguration;
|
||
|
__in USHORT MacAddressLength;
|
||
|
__in UCHAR CurrentMacAddress[NDIS_MAX_PHYS_ADDRESS_LENGTH];
|
||
|
__in NET_LUID BaseMiniportNetLuid;
|
||
|
__in NET_IFINDEX LowerIfIndex;
|
||
|
__in NET_LUID LowerIfNetLuid;
|
||
|
__inout ULONG Flags;
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
__in PNDIS_HD_SPLIT_CURRENT_CONFIG HDSplitCurrentConfig;
|
||
|
#endif // (NDIS_SUPPORT_NDIS61)
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
__in PNDIS_RECEIVE_FILTER_CAPABILITIES ReceiveFilterCapabilities;
|
||
|
__in PDEVICE_OBJECT MiniportPhysicalDeviceObject;
|
||
|
__in PNDIS_NIC_SWITCH_CAPABILITIES NicSwitchCapabilities;
|
||
|
#endif
|
||
|
} NDIS_FILTER_ATTACH_PARAMETERS, *PNDIS_FILTER_ATTACH_PARAMETERS;
|
||
|
#define NDIS_SIZEOF_FILTER_ATTACH_PARAMETERS_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_FILTER_ATTACH_PARAMETERS, Flags)
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
#define NDIS_SIZEOF_FILTER_ATTACH_PARAMETERS_REVISION_2 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_FILTER_ATTACH_PARAMETERS, HDSplitCurrentConfig)
|
||
|
#endif // (NDIS_SUPPORT_NDIS61)
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS620)
|
||
|
#define NDIS_SIZEOF_FILTER_ATTACH_PARAMETERS_REVISION_3 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_FILTER_ATTACH_PARAMETERS, NicSwitchCapabilities)
|
||
|
#endif // (NDIS_SUPPORT_NDIS620)
|
||
|
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(PASSIVE_LEVEL)
|
||
|
NDIS_STATUS
|
||
|
(FILTER_ATTACH)(
|
||
|
__in NDIS_HANDLE NdisFilterHandle,
|
||
|
__in NDIS_HANDLE FilterDriverContext,
|
||
|
__in PNDIS_FILTER_ATTACH_PARAMETERS AttachParameters
|
||
|
);
|
||
|
|
||
|
typedef FILTER_ATTACH (*FILTER_ATTACH_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(PASSIVE_LEVEL)
|
||
|
VOID
|
||
|
(FILTER_DETACH)(
|
||
|
__in NDIS_HANDLE FilterModuleContext
|
||
|
);
|
||
|
|
||
|
typedef FILTER_DETACH (*FILTER_DETACH_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
NDIS_STATUS
|
||
|
(FILTER_SET_MODULE_OPTIONS)(
|
||
|
__in NDIS_HANDLE FilterModuleContext
|
||
|
);
|
||
|
|
||
|
typedef FILTER_SET_MODULE_OPTIONS (*FILTER_SET_FILTER_MODULE_OPTIONS_HANDLER);
|
||
|
|
||
|
|
||
|
//
|
||
|
// NDIS_FILTER_RESTART_PARAMETERS is used in FILTER_RESTART handler
|
||
|
//
|
||
|
#define NDIS_FILTER_RESTART_PARAMETERS_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_FILTER_RESTART_PARAMETERS
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
NDIS_MEDIUM MiniportMediaType;
|
||
|
NDIS_PHYSICAL_MEDIUM MiniportPhysicalMediaType;
|
||
|
PNDIS_RESTART_ATTRIBUTES RestartAttributes;
|
||
|
NET_IFINDEX LowerIfIndex;
|
||
|
NET_LUID LowerIfNetLuid;
|
||
|
ULONG Flags;
|
||
|
} NDIS_FILTER_RESTART_PARAMETERS, *PNDIS_FILTER_RESTART_PARAMETERS;
|
||
|
|
||
|
#define NDIS_SIZEOF__FILTER_RESTART_PARAMETERS_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_FILTER_RESTART_PARAMETERS, Flags)
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(PASSIVE_LEVEL)
|
||
|
NDIS_STATUS
|
||
|
(FILTER_RESTART)(
|
||
|
__in NDIS_HANDLE FilterModuleContext,
|
||
|
__in PNDIS_FILTER_RESTART_PARAMETERS RestartParameters
|
||
|
);
|
||
|
typedef FILTER_RESTART (*FILTER_RESTART_HANDLER);
|
||
|
|
||
|
#define NDIS_FILTER_PAUSE_PARAMETERS_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_FILTER_PAUSE_PARAMETERS
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
ULONG Flags;
|
||
|
ULONG PauseReason;
|
||
|
} NDIS_FILTER_PAUSE_PARAMETERS, *PNDIS_FILTER_PAUSE_PARAMETERS;
|
||
|
|
||
|
#define NDIS_SIZEOF_FILTER_PAUSE_PARAMETERS_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_FILTER_PAUSE_PARAMETERS, PauseReason)
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(PASSIVE_LEVEL)
|
||
|
NDIS_STATUS
|
||
|
(FILTER_PAUSE)(
|
||
|
__in NDIS_HANDLE FilterModuleContext,
|
||
|
__in PNDIS_FILTER_PAUSE_PARAMETERS PauseParameters
|
||
|
);
|
||
|
|
||
|
typedef FILTER_PAUSE (*FILTER_PAUSE_HANDLER);
|
||
|
//
|
||
|
// inbound requests/data
|
||
|
//
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
NDIS_STATUS
|
||
|
(FILTER_OID_REQUEST)(
|
||
|
__in NDIS_HANDLE FilterModuleContext,
|
||
|
__in PNDIS_OID_REQUEST OidRequest
|
||
|
);
|
||
|
|
||
|
typedef FILTER_OID_REQUEST (*FILTER_OID_REQUEST_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(FILTER_CANCEL_OID_REQUEST)(
|
||
|
__in NDIS_HANDLE FilterModuleContext,
|
||
|
__in PVOID RequestId
|
||
|
);
|
||
|
|
||
|
typedef FILTER_CANCEL_OID_REQUEST (*FILTER_CANCEL_OID_REQUEST_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(FILTER_SEND_NET_BUFFER_LISTS)(
|
||
|
__in NDIS_HANDLE FilterModuleContext,
|
||
|
__in PNET_BUFFER_LIST NetBufferList,
|
||
|
__in NDIS_PORT_NUMBER PortNumber,
|
||
|
__in ULONG SendFlags
|
||
|
);
|
||
|
|
||
|
typedef FILTER_SEND_NET_BUFFER_LISTS (*FILTER_SEND_NET_BUFFER_LISTS_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(FILTER_CANCEL_SEND_NET_BUFFER_LISTS)(
|
||
|
__in NDIS_HANDLE FilterModuleContext,
|
||
|
__in PVOID CancelId
|
||
|
);
|
||
|
|
||
|
typedef FILTER_CANCEL_SEND_NET_BUFFER_LISTS (*FILTER_CANCEL_SEND_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(FILTER_RETURN_NET_BUFFER_LISTS)(
|
||
|
__in NDIS_HANDLE FilterModuleContext,
|
||
|
__in PNET_BUFFER_LIST NetBufferLists,
|
||
|
__in ULONG ReturnFlags
|
||
|
);
|
||
|
|
||
|
typedef FILTER_RETURN_NET_BUFFER_LISTS (*FILTER_RETURN_NET_BUFFER_LISTS_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(FILTER_SEND_NET_BUFFER_LISTS_COMPLETE)(
|
||
|
__in NDIS_HANDLE FilterModuleContext,
|
||
|
__in PNET_BUFFER_LIST NetBufferList,
|
||
|
__in ULONG SendCompleteFlags
|
||
|
);
|
||
|
|
||
|
typedef FILTER_SEND_NET_BUFFER_LISTS_COMPLETE (*FILTER_SEND_NET_BUFFER_LISTS_COMPLETE_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(FILTER_RECEIVE_NET_BUFFER_LISTS)(
|
||
|
__in NDIS_HANDLE FilterModuleContext,
|
||
|
__in PNET_BUFFER_LIST NetBufferLists,
|
||
|
__in NDIS_PORT_NUMBER PortNumber,
|
||
|
__in ULONG NumberOfNetBufferLists,
|
||
|
__in ULONG ReceiveFlags
|
||
|
);
|
||
|
|
||
|
typedef FILTER_RECEIVE_NET_BUFFER_LISTS (*FILTER_RECEIVE_NET_BUFFER_LISTS_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(PASSIVE_LEVEL)
|
||
|
VOID
|
||
|
(FILTER_DEVICE_PNP_EVENT_NOTIFY)(
|
||
|
__in NDIS_HANDLE FilterModuleContext,
|
||
|
__in PNET_DEVICE_PNP_EVENT NetDevicePnPEvent
|
||
|
);
|
||
|
|
||
|
typedef FILTER_DEVICE_PNP_EVENT_NOTIFY (*FILTER_DEVICE_PNP_EVENT_NOTIFY_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(PASSIVE_LEVEL)
|
||
|
NDIS_STATUS
|
||
|
(FILTER_NET_PNP_EVENT)(
|
||
|
__in NDIS_HANDLE FilterModuleContext,
|
||
|
__in PNET_PNP_EVENT_NOTIFICATION NetPnPEventNotification
|
||
|
);
|
||
|
|
||
|
typedef FILTER_NET_PNP_EVENT (*FILTER_NET_PNP_EVENT_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(FILTER_STATUS)(
|
||
|
__in NDIS_HANDLE FilterModuleContext,
|
||
|
__in PNDIS_STATUS_INDICATION StatusIndication
|
||
|
);
|
||
|
|
||
|
typedef FILTER_STATUS (*FILTER_STATUS_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(FILTER_OID_REQUEST_COMPLETE)(
|
||
|
__in NDIS_HANDLE FilterModuleContext,
|
||
|
__in PNDIS_OID_REQUEST OidRequest,
|
||
|
__in NDIS_STATUS Status
|
||
|
);
|
||
|
|
||
|
typedef FILTER_OID_REQUEST_COMPLETE (*FILTER_OID_REQUEST_COMPLETE_HANDLER);
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
//
|
||
|
// NDIS 6.1 filter's entry points
|
||
|
//
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
NDIS_STATUS
|
||
|
(FILTER_DIRECT_OID_REQUEST)(
|
||
|
__in NDIS_HANDLE FilterModuleContext,
|
||
|
__in PNDIS_OID_REQUEST OidRequest
|
||
|
);
|
||
|
|
||
|
typedef FILTER_DIRECT_OID_REQUEST (*FILTER_DIRECT_OID_REQUEST_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(FILTER_DIRECT_OID_REQUEST_COMPLETE)(
|
||
|
__in NDIS_HANDLE FilterModuleContext,
|
||
|
__in PNDIS_OID_REQUEST OidRequest,
|
||
|
__in NDIS_STATUS Status
|
||
|
);
|
||
|
|
||
|
typedef FILTER_DIRECT_OID_REQUEST_COMPLETE (*FILTER_DIRECT_OID_REQUEST_COMPLETE_HANDLER);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
VOID
|
||
|
(FILTER_CANCEL_DIRECT_OID_REQUEST)(
|
||
|
__in NDIS_HANDLE FilterModuleContext,
|
||
|
__in PVOID RequestId
|
||
|
);
|
||
|
|
||
|
typedef FILTER_CANCEL_DIRECT_OID_REQUEST (*FILTER_CANCEL_DIRECT_OID_REQUEST_HANDLER);
|
||
|
#endif (NDIS_SUPPORT_NDIS61)
|
||
|
|
||
|
#define NDIS_FILTER_PARTIAL_CHARACTERISTICS_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_FILTER_PARTIAL_CHARACTERISTICS
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header; // Header.Type = NDIS_OBJECT_TYPE_FILTER_PARTIAL_CHARACTERISTICS
|
||
|
ULONG Flags;
|
||
|
FILTER_SEND_NET_BUFFER_LISTS_HANDLER SendNetBufferListsHandler;
|
||
|
FILTER_SEND_NET_BUFFER_LISTS_COMPLETE_HANDLER SendNetBufferListsCompleteHandler;
|
||
|
FILTER_CANCEL_SEND_HANDLER CancelSendNetBufferListsHandler;
|
||
|
FILTER_RECEIVE_NET_BUFFER_LISTS_HANDLER ReceiveNetBufferListsHandler;
|
||
|
FILTER_RETURN_NET_BUFFER_LISTS_HANDLER ReturnNetBufferListsHandler;
|
||
|
} NDIS_FILTER_PARTIAL_CHARACTERISTICS, *PNDIS_FILTER_PARTIAL_CHARACTERISTICS;
|
||
|
|
||
|
#define NDIS_SIZEOF_FILTER_PARTIAL_CHARACTERISTICS_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_FILTER_PARTIAL_CHARACTERISTICS, ReturnNetBufferListsHandler)
|
||
|
|
||
|
//
|
||
|
// Filter driver flags
|
||
|
//
|
||
|
#define NDIS_FILTER_DRIVER_MANDATORY 0x00000001
|
||
|
|
||
|
#define NDIS_FILTER_CHARACTERISTICS_REVISION_1 1
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
#define NDIS_FILTER_CHARACTERISTICS_REVISION_2 2
|
||
|
#endif // (NDIS_SUPPORT_NDIS61)
|
||
|
|
||
|
typedef struct _NDIS_FILTER_DRIVER_CHARACTERISTICS
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
UCHAR MajorNdisVersion;
|
||
|
UCHAR MinorNdisVersion;
|
||
|
UCHAR MajorDriverVersion;
|
||
|
UCHAR MinorDriverVersion;
|
||
|
ULONG Flags;
|
||
|
NDIS_STRING FriendlyName;
|
||
|
NDIS_STRING UniqueName;
|
||
|
NDIS_STRING ServiceName;
|
||
|
SET_OPTIONS_HANDLER SetOptionsHandler;
|
||
|
FILTER_SET_FILTER_MODULE_OPTIONS_HANDLER SetFilterModuleOptionsHandler;
|
||
|
FILTER_ATTACH_HANDLER AttachHandler;
|
||
|
FILTER_DETACH_HANDLER DetachHandler;
|
||
|
FILTER_RESTART_HANDLER RestartHandler;
|
||
|
FILTER_PAUSE_HANDLER PauseHandler;
|
||
|
FILTER_SEND_NET_BUFFER_LISTS_HANDLER SendNetBufferListsHandler;
|
||
|
FILTER_SEND_NET_BUFFER_LISTS_COMPLETE_HANDLER SendNetBufferListsCompleteHandler;
|
||
|
FILTER_CANCEL_SEND_HANDLER CancelSendNetBufferListsHandler;
|
||
|
FILTER_RECEIVE_NET_BUFFER_LISTS_HANDLER ReceiveNetBufferListsHandler;
|
||
|
FILTER_RETURN_NET_BUFFER_LISTS_HANDLER ReturnNetBufferListsHandler;
|
||
|
FILTER_OID_REQUEST_HANDLER OidRequestHandler;
|
||
|
FILTER_OID_REQUEST_COMPLETE_HANDLER OidRequestCompleteHandler;
|
||
|
FILTER_CANCEL_OID_REQUEST_HANDLER CancelOidRequestHandler;
|
||
|
FILTER_DEVICE_PNP_EVENT_NOTIFY_HANDLER DevicePnPEventNotifyHandler;
|
||
|
FILTER_NET_PNP_EVENT_HANDLER NetPnPEventHandler;
|
||
|
FILTER_STATUS_HANDLER StatusHandler;
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
FILTER_DIRECT_OID_REQUEST_HANDLER DirectOidRequestHandler;
|
||
|
FILTER_DIRECT_OID_REQUEST_COMPLETE_HANDLER DirectOidRequestCompleteHandler;
|
||
|
FILTER_CANCEL_DIRECT_OID_REQUEST_HANDLER CancelDirectOidRequestHandler;
|
||
|
#endif // (NDIS_SUPPORT_NDIS61)
|
||
|
} NDIS_FILTER_DRIVER_CHARACTERISTICS, *PNDIS_FILTER_DRIVER_CHARACTERISTICS;
|
||
|
#define NDIS_SIZEOF_FILTER_DRIVER_CHARACTERISTICS_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_FILTER_DRIVER_CHARACTERISTICS, StatusHandler)
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
#define NDIS_SIZEOF_FILTER_DRIVER_CHARACTERISTICS_REVISION_2 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_FILTER_DRIVER_CHARACTERISTICS, CancelDirectOidRequestHandler)
|
||
|
#endif //(NDIS_SUPPORT_NDIS61)
|
||
|
|
||
|
#define NDIS_FILTER_ATTRIBUTES_REVISION_1 1
|
||
|
|
||
|
typedef struct _NDIS_FILTER_ATTRIBUTES
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
ULONG Flags;
|
||
|
} NDIS_FILTER_ATTRIBUTES, *PNDIS_FILTER_ATTRIBUTES;
|
||
|
|
||
|
#define NDIS_SIZEOF_FILTER_ATTRIBUTES_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_FILTER_ATTRIBUTES, Flags)
|
||
|
|
||
|
__drv_maxIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisFRegisterFilterDriver(
|
||
|
__in PDRIVER_OBJECT DriverObject,
|
||
|
__in NDIS_HANDLE FilterDriverContext,
|
||
|
__in PNDIS_FILTER_DRIVER_CHARACTERISTICS FilterDriverCharacteristics,
|
||
|
__out PNDIS_HANDLE NdisFilterDriverHandle
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFDeregisterFilterDriver(
|
||
|
__in NDIS_HANDLE NdisFilterDriverHandle
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisFSetAttributes(
|
||
|
__in NDIS_HANDLE NdisFilterHandle,
|
||
|
__in NDIS_HANDLE FilterModuleContext,
|
||
|
__in PNDIS_FILTER_ATTRIBUTES FilterAttributes
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisFRestartFilter(
|
||
|
__in NDIS_HANDLE NdisFilterHandle
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFSendNetBufferLists(
|
||
|
__in NDIS_HANDLE NdisFilterHandle,
|
||
|
__in PNET_BUFFER_LIST NetBufferList,
|
||
|
__in NDIS_PORT_NUMBER PortNumber,
|
||
|
__in ULONG SendFlags
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFReturnNetBufferLists(
|
||
|
__in NDIS_HANDLE NdisFilterHandle,
|
||
|
__in PNET_BUFFER_LIST NetBufferLists,
|
||
|
__in ULONG ReturnFlags
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFSendNetBufferListsComplete(
|
||
|
__in NDIS_HANDLE NdisFilterHandle,
|
||
|
__in PNET_BUFFER_LIST NetBufferList,
|
||
|
__in ULONG SendCompleteFlags
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFIndicateReceiveNetBufferLists(
|
||
|
__in NDIS_HANDLE NdisFilterHandle,
|
||
|
__in PNET_BUFFER_LIST NetBufferLists,
|
||
|
__in NDIS_PORT_NUMBER PortNumber,
|
||
|
__in ULONG NumberOfNetBufferLists,
|
||
|
__in ULONG ReceiveFlags
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisFOidRequest(
|
||
|
__in NDIS_HANDLE NdisFilterHandle,
|
||
|
__in PNDIS_OID_REQUEST OidRequest
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFOidRequestComplete(
|
||
|
__in NDIS_HANDLE NdisFilterHandle,
|
||
|
__in PNDIS_OID_REQUEST OidRequest,
|
||
|
__in NDIS_STATUS Status
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFIndicateStatus(
|
||
|
__in NDIS_HANDLE NdisFilterHandle,
|
||
|
__in PNDIS_STATUS_INDICATION StatusIndication
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFRestartComplete(
|
||
|
__in NDIS_HANDLE NdisFilterHandle,
|
||
|
__in NDIS_STATUS Status
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFPauseComplete(
|
||
|
__in NDIS_HANDLE NdisFilterHandle
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFDevicePnPEventNotify(
|
||
|
__in NDIS_HANDLE NdisFilterHandle,
|
||
|
__in PNET_DEVICE_PNP_EVENT NetDevicePnPEvent
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisFNetPnPEvent(
|
||
|
__in NDIS_HANDLE NdisFilterHandle,
|
||
|
__in PNET_PNP_EVENT_NOTIFICATION NetPnPEventNotification
|
||
|
);
|
||
|
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFCancelSendNetBufferLists(
|
||
|
__in NDIS_HANDLE NdisFilterHandle,
|
||
|
__in PVOID CancelId
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFCancelOidRequest(
|
||
|
__in NDIS_HANDLE NdisFilterHandle,
|
||
|
__in PVOID RequestId
|
||
|
);
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS61)
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisFDirectOidRequest(
|
||
|
__in NDIS_HANDLE NdisFilterHandle,
|
||
|
__in PNDIS_OID_REQUEST OidRequest
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFDirectOidRequestComplete(
|
||
|
__in NDIS_HANDLE NdisFilterHandle,
|
||
|
__in PNDIS_OID_REQUEST OidRequest,
|
||
|
__in NDIS_STATUS Status
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(DISPATCH_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisFCancelDirectOidRequest(
|
||
|
__in NDIS_HANDLE NdisFilterHandle,
|
||
|
__in PVOID RequestId
|
||
|
);
|
||
|
|
||
|
#endif // (NDIS_SUPPORT_NDIS61)
|
||
|
|
||
|
#endif // NDIS_SUPPORT_NDIS6
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
#if (NDIS_SUPPORT_NDIS6 || defined(NDIS60))
|
||
|
|
||
|
//
|
||
|
// NDIS IF data structures, function prototypes and macros
|
||
|
//
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(PASSIVE_LEVEL)
|
||
|
NDIS_STATUS
|
||
|
(*IFP_QUERY_OBJECT)(
|
||
|
__in NDIS_HANDLE ProviderIfContext,
|
||
|
__in NET_IF_OBJECT_ID ObjectId,
|
||
|
__inout PULONG pOutputBufferLength,
|
||
|
__out PVOID pOutputBuffer
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
__drv_maxIRQL(PASSIVE_LEVEL)
|
||
|
NDIS_STATUS
|
||
|
(*IFP_SET_OBJECT)(
|
||
|
__in NDIS_HANDLE ProviderIfContext,
|
||
|
__in NET_IF_OBJECT_ID ObjectId,
|
||
|
__in ULONG InputBufferLength,
|
||
|
__in PVOID pInputBuffer
|
||
|
);
|
||
|
|
||
|
|
||
|
typedef struct _NDIS_IF_PROVIDER_CHARACTERISTICS
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
|
||
|
//
|
||
|
// Generic query and set handlers:
|
||
|
//
|
||
|
IFP_QUERY_OBJECT QueryObjectHandler;
|
||
|
IFP_SET_OBJECT SetObjectHandler;
|
||
|
|
||
|
PVOID Reserved1;
|
||
|
PVOID Reserved2;
|
||
|
|
||
|
} NDIS_IF_PROVIDER_CHARACTERISTICS, *PNDIS_IF_PROVIDER_CHARACTERISTICS;
|
||
|
|
||
|
#define NDIS_SIZEOF_IF_PROVIDER_CHARACTERISTICS_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NDIS_IF_PROVIDER_CHARACTERISTICS, Reserved2)
|
||
|
|
||
|
//
|
||
|
// NET_IF_INFORMATION is passed to NdisIfRegisterInterface
|
||
|
//
|
||
|
typedef struct _NET_IF_INFORMATION
|
||
|
{
|
||
|
NDIS_OBJECT_HEADER Header;
|
||
|
ULONG Flags; // Misc. information
|
||
|
NET_PHYSICAL_LOCATION PhysicalLocation; // physical location on machine
|
||
|
ULONG WanTunnelType; // tunnelIfEncapsMethod (RFC 2667)
|
||
|
ULONG PortNumber; // for WAN devices.
|
||
|
NET_IF_ACCESS_TYPE AccessType;
|
||
|
NET_IF_DIRECTION_TYPE DirectionType;
|
||
|
NET_IF_CONNECTION_TYPE ConnectionType;
|
||
|
BOOLEAN ifConnectorPresent;
|
||
|
USHORT PhysAddressLength; // in bytes (ifPhysAddress). this is -current- mac address
|
||
|
USHORT PhysAddressOffset; // from beginning of this struct
|
||
|
USHORT PermanentPhysAddressOffset; // from beginning of this struct
|
||
|
//
|
||
|
// The "friendly name" represents ifDescr:
|
||
|
//
|
||
|
USHORT FriendlyNameLength; // in bytes
|
||
|
USHORT FriendlyNameOffset; // from beginning of this struct
|
||
|
GUID InterfaceGuid;
|
||
|
NET_IF_NETWORK_GUID NetworkGuid;
|
||
|
ULONG SupportedStatistics;
|
||
|
NDIS_MEDIUM MediaType;
|
||
|
NDIS_PHYSICAL_MEDIUM PhysicalMediumType;
|
||
|
} NET_IF_INFORMATION, *PNET_IF_INFORMATION;
|
||
|
|
||
|
|
||
|
#define NDIS_SIZEOF_NET_IF_INFORMATION_REVISION_1 \
|
||
|
RTL_SIZEOF_THROUGH_FIELD(NET_IF_INFORMATION, PhysicalMediumType)
|
||
|
|
||
|
__drv_maxIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisIfRegisterProvider(
|
||
|
__in PNDIS_IF_PROVIDER_CHARACTERISTICS ProviderCharacteristics,
|
||
|
__in NDIS_HANDLE IfProviderContext,
|
||
|
__out PNDIS_HANDLE pNdisIfProviderHandle
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisIfDeregisterProvider(
|
||
|
__in NDIS_HANDLE NdisProviderHandle
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisIfAllocateNetLuidIndex(
|
||
|
__in NET_IFTYPE ifType,
|
||
|
__out PUINT32 pNetLuidIndex
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisIfFreeNetLuidIndex(
|
||
|
__in NET_IFTYPE ifType,
|
||
|
__in UINT32 NetLuidIndex
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisIfRegisterInterface(
|
||
|
__in NDIS_HANDLE NdisProviderHandle,
|
||
|
__in NET_LUID NetLuid,
|
||
|
__in NDIS_HANDLE ProviderIfContext,
|
||
|
__in PNET_IF_INFORMATION pIfInfo,
|
||
|
__out PNET_IFINDEX pfIndex
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisIfDeregisterInterface(
|
||
|
__in NET_IFINDEX ifIndex
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisIfGetInterfaceIndexFromNetLuid(
|
||
|
__in NET_LUID NetLuid,
|
||
|
__out PNET_IFINDEX pIfIndex
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisIfGetNetLuidFromInterfaceIndex(
|
||
|
__in NET_IFINDEX ifIndex,
|
||
|
__out PNET_LUID pNetLuid
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisIfQueryBindingIfIndex(
|
||
|
__in NDIS_HANDLE NdisBindingHandle,
|
||
|
__out PNET_IFINDEX pBoundIfIndex,
|
||
|
__out PNET_LUID pBoundIfNetLuid,
|
||
|
__out PNET_IFINDEX pLowestIfIndex,
|
||
|
__out PNET_LUID pLowestIfNetLuid
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
NDIS_STATUS
|
||
|
NdisIfAddIfStackEntry(
|
||
|
__in NET_IFINDEX HigherLayerIfIndex,
|
||
|
__in NET_IFINDEX LowerLayerIfIndex
|
||
|
);
|
||
|
|
||
|
__drv_maxIRQL(PASSIVE_LEVEL)
|
||
|
EXPORT
|
||
|
VOID
|
||
|
NdisIfDeleteIfStackEntry(
|
||
|
__in NET_IFINDEX HigherLayerIfIndex,
|
||
|
__in NET_IFINDEX LowerLayerIfIndex
|
||
|
);
|
||
|
|
||
|
#endif // (NDIS_SUPPORT_NDIS6 || defined(NDIS60))
|
||
|
|
||
|
#endif // _NDIS_
|
||
|
|