720 lines
30 KiB
C
720 lines
30 KiB
C
/*
|
|
* storport.h Storage port functions
|
|
*
|
|
* =========================================================================
|
|
*
|
|
* Open Watcom Project
|
|
*
|
|
* Copyright (c) 2004-2010 The Open Watcom Contributors. All Rights Reserved.
|
|
*
|
|
* This file is automatically generated. Do not edit directly.
|
|
*
|
|
* =========================================================================
|
|
*/
|
|
|
|
#ifndef _NTSTORPORT_
|
|
#define _NTSTORPORT_
|
|
|
|
#ifndef _ENABLE_AUTODEPEND
|
|
#pragma read_only_file;
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* Macro to specify storage port functions */
|
|
#ifdef _NTDDK_
|
|
#define STORPORT_API
|
|
#else
|
|
#define STORPORT_API DECLSPEC_IMPORT
|
|
#endif
|
|
|
|
/* Primitive data types */
|
|
typedef PHYSICAL_ADDRESS STOR_PHYSICAL_ADDRESS;
|
|
typedef PHYSICAL_ADDRESS *PSTOR_PHYSICAL_ADDRESS;
|
|
|
|
/* Storage synchronization models */
|
|
typedef enum _STOR_SYNCHRONIZATION_MODEL {
|
|
StorSynchronizeHalfDuplex = 0,
|
|
StorSynchronizeFullDuplex = 1
|
|
} STOR_SYNCHRONIZATION_MODEL;
|
|
|
|
/* Hardware message signaled interrupt routine */
|
|
typedef BOOLEAN (NTAPI *PHW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE)( PVOID, ULONG );
|
|
|
|
/* Interrupt synchronization modes */
|
|
typedef enum _INTERRUPT_SYNCHRONIZATION_MODE {
|
|
InterruptSupportNone = 0,
|
|
InterruptSynchronizeAll = 1,
|
|
InterruptSynchronizePerMessage = 2
|
|
} INTERRUPT_SYNCHRONIZATION_MODE;
|
|
|
|
typedef struct _MEMORY_REGION {
|
|
PUCHAR VirtualBase;
|
|
PHYSICAL_ADDRESS PhysicalBase;
|
|
ULONG Length;
|
|
} MEMORY_REGION;
|
|
typedef MEMORY_REGION *PMEMORY_REGION;
|
|
|
|
/* Hardware build I/O callback */
|
|
typedef BOOLEAN (NTAPI *PHW_BUILDIO)( PVOID, struct SCSI_REQUEST_BLOCK * );
|
|
|
|
/* The Microsoft version of storport.h is mostly a lot of the same stuff that's in
|
|
* other headers. To save space, include those headers and just define those constants
|
|
* and structures that are unique to this header.
|
|
*/
|
|
#include <scsi.h>
|
|
#include <srb.h>
|
|
|
|
/* Storage map constants */
|
|
#define STOR_MAP_NO_BUFFERS 0
|
|
#define STOR_MAP_ALL_BUFFERS 1
|
|
#define STOR_MAP_NON_READ_WRITE_BUFFERS 2
|
|
|
|
/* Extended flags */
|
|
#define EXTENDED_FLAG_POWER 0x00000001L
|
|
|
|
/* SCSI 64-bit DMA flags */
|
|
#define SCSI_DMA64_SYSTEM_SUPPORTED 0x80
|
|
#define SCSI_DMA64_MINIPORT_SUPPORTED 0x01
|
|
#if (NTDDI_VERSION >= 0x05020100)
|
|
#define SCSI_DMA64_MINIPORT_FULL64BIT_SUPPORTED 0x02
|
|
#endif
|
|
|
|
/* Storage performance flags */
|
|
#define STOR_PERF_DPC_REDIRECTION 0x00000001L
|
|
#define STOR_PERF_CONCURRENT_CHANNELS 0x00000002L
|
|
#define STOR_PERF_INTERRUPT_MESSAGE_RANGES 0x00000004L
|
|
#define STOR_PERF_ADV_CONFIG_LOCALITY 0x00000008L
|
|
#define STOR_PERF_OPTIMIZE_FOR_COMPLETION_DURING_STARTIO 0x00000010L
|
|
|
|
/* Storage performance version number */
|
|
#define STOR_PERF_VERSION 0x00000003L
|
|
|
|
/* Storage status codes */
|
|
#define STOR_STATUS_SUCCESS 0x00000000L
|
|
#define STOR_STATUS_UNSUCCCESSFUL 0xC1000001L
|
|
#define STOR_STATUS_NOT_IMPLEMENTED 0xC1000002L
|
|
#define STOR_STATUS_INSUFFICIENT_RESOURCES 0xC1000003L
|
|
#define STOR_STATUS_BUFFER_TOO_SMALL 0xC1000004L
|
|
#define STOR_STATUS_ACCESS_DENIED 0xC1000005L
|
|
#define STOR_STATUS_INVALID_PARAMETER 0xC1000006L
|
|
#define STOR_STATUS_INVALID_DEVICE_REQUEST 0xC1000007L
|
|
#define STOR_STATUS_INVALID_IRQL 0xC1000008L
|
|
#define STOR_STATUS_INVALID_DEVICE_STATE 0xC1000009L
|
|
#define STOR_STATUS_INVALID_BUFFER_SIZE 0xC100000AL
|
|
#define STOR_STATUS_UNSUPPORTED_VERSION 0xC100000BL
|
|
|
|
/* Miniport dump constants */
|
|
#define DUMP_MINIPORT_VERSION_1 0x0100
|
|
#define DUMP_MINIPORT_VERSION 0x0200
|
|
#define DUMP_MINIPORT_NAME_LENGTH 15
|
|
|
|
/* Storage current log interface revision number */
|
|
#define STOR_CURRENT_LOG_INTERFACE_REVISION 0x0100
|
|
|
|
/* Miniport registry value types */
|
|
#define MINIPORT_REG_SZ 1
|
|
#define MINIPORT_REG_BINARY 3
|
|
#define MINIPORT_REG_DWORD 4
|
|
|
|
/* Message interrupt information */
|
|
typedef struct _MESSAGE_INTERRUPT_INFORMATION {
|
|
ULONG MessageId;
|
|
ULONG MessageData;
|
|
STOR_PHYSICAL_ADDRESS MessageAddress;
|
|
ULONG InterruptVector;
|
|
ULONG InterruptLevel;
|
|
KINTERRUPT_MODE InterruptMode;
|
|
} MESSAGE_INTERRUPT_INFORMATION;
|
|
typedef MESSAGE_INTERRUPT_INFORMATION *PMESSAGE_INTERRUPT_INFORMATION;
|
|
|
|
/* Storage scatter/gather element */
|
|
typedef struct _STOR_SCATTER_GATHER_ELEMENT {
|
|
STOR_PHYSICAL_ADDRESS PhysicalAddress;
|
|
ULONG Length;
|
|
ULONG_PTR Reserved;
|
|
} STOR_SCATTER_GATHER_ELEMENT;
|
|
typedef STOR_SCATTER_GATHER_ELEMENT *PSTOR_SCATTER_GATHER_ELEMENT;
|
|
|
|
/* Storage scatter/gather list */
|
|
typedef struct _STOR_SCATTER_GATHER_LIST {
|
|
ULONG NumberOfElements;
|
|
ULONG_PTR Reserved;
|
|
STOR_SCATTER_GATHER_ELEMENT List[1];
|
|
} STOR_SCATTER_GATHER_LIST;
|
|
typedef STOR_SCATTER_GATHER_LIST *PSTOR_SCATTER_GATHER_LIST;
|
|
|
|
/* Scatter/gather status codes */
|
|
typedef enum _GETSGSTATUS {
|
|
SG_ALLOCATED = 0,
|
|
SG_BUFFER_TOO_SMALL = 1
|
|
} GETSGSTATUS;
|
|
typedef GETSGSTATUS *PGETSGSTATUS;
|
|
|
|
/* Deferred procedure call buffer */
|
|
typedef struct _DPC_BUFFER {
|
|
CSHORT Type;
|
|
UCHAR Number;
|
|
UCHAR Importance;
|
|
struct {
|
|
PVOID F;
|
|
PVOID B;
|
|
};
|
|
PVOID DeferredRoutine;
|
|
PVOID DeferredContext;
|
|
PVOID SystemArgument1;
|
|
PVOID SystemArgument2;
|
|
PVOID DpcData;
|
|
} DPC_BUFFER;
|
|
|
|
/* Storage deferred procedure call */
|
|
typedef struct _STOR_DPC {
|
|
DPC_BUFFER Dpc;
|
|
ULONG_PTR Lock;
|
|
} STOR_DPC;
|
|
typedef STOR_DPC *PSTOR_DPC;
|
|
|
|
/* Storage spin lock */
|
|
typedef enum _STOR_SPINLOCK {
|
|
DpcLock = 1,
|
|
StartIoLock = 2,
|
|
InterruptLock = 3
|
|
} STOR_SPINLOCK;
|
|
|
|
/* Storage lock handles */
|
|
typedef struct _STOR_LOCK_HANDLE {
|
|
STOR_SPINLOCK Lock;
|
|
struct {
|
|
struct {
|
|
PVOID Next;
|
|
PVOID Lock;
|
|
} LockQueue;
|
|
KIRQL OldIrql;
|
|
} Context;
|
|
} STOR_LOCK_HANDLE;
|
|
typedef STOR_LOCK_HANDLE *PSTOR_LOCK_HANDLE;
|
|
|
|
/* Performance configuration data */
|
|
typedef struct _PERF_CONFIGURATION_DATA {
|
|
ULONG Version;
|
|
ULONG Size;
|
|
ULONG Flags;
|
|
ULONG ConcurrentChannels;
|
|
ULONG FirstRedirectionMessageNumber;
|
|
ULONG LastRedirectionMessageNumber;
|
|
} PERF_CONFIGURATION_DATA;
|
|
typedef PERF_CONFIGURATION_DATA *PPERF_CONFIGURATION_DATA;
|
|
|
|
/* Start I/O performance parameters */
|
|
typedef struct _STARTIO_PERFORMANCE_PARAMETERS {
|
|
ULONG Version;
|
|
ULONG Size;
|
|
ULONG MessageNumber;
|
|
ULONG ChannelNumber;
|
|
} STARTIO_PERFORMANCE_PARAMETERS;
|
|
typedef STARTIO_PERFORMANCE_PARAMETERS *PSTARTIO_PERFORMANCE_PARAMETERS;
|
|
|
|
/* Hardware callbacks */
|
|
typedef BOOLEAN (NTAPI *PHW_PASSIVE_INITIALIZE_ROUTINE)( PVOID );
|
|
typedef VOID (NTAPI *PHW_DPC_ROUTINE)( PSTOR_DPC, PVOID, PVOID, PVOID );
|
|
typedef VOID (NTAPI *PHW_FREE_ADAPTER_RESOURCES)( PVOID );
|
|
typedef VOID (NTAPI *PHW_PROCESS_SERVICE_REQUEST)( PVOID, PVOID );
|
|
typedef VOID (NTAPI *PHW_COMPLETE_SERVICE_IRP)( PVOID );
|
|
typedef VOID (NTAPI *PHW_INITIALIZE_TRACING)( PVOID, PVOID );
|
|
typedef VOID (NTAPI *PHW_CLEANUP_TRACING)( PVOID );
|
|
typedef ULONG (NTAPI *PVIRTUAL_HW_FIND_ADAPTER)( PVOID, PVOID, PVOID, PVOID, PCHAR, PPORT_CONFIGURATION_INFORMATION, PBOOLEAN );
|
|
|
|
/* Storage port callbacks */
|
|
typedef BOOLEAN (NTAPI *PStorPortGetMessageInterruptInformation)( PVOID, ULONG, PMESSAGE_INTERRUPT_INFORMATION );
|
|
typedef VOID (NTAPI *PStorPortPutScatterGatherList)( PVOID, PSTOR_SCATTER_GATHER_LIST, BOOLEAN );
|
|
typedef VOID (NTAPI *PpostScaterGatherExecute)( PVOID *, PVOID *, PSTOR_SCATTER_GATHER_LIST, PVOID );
|
|
typedef GETSGSTATUS (NTAPI *PStorPortBuildScatterGatherList)( PVOID, PVOID, PVOID, ULONG, PpostScaterGatherExecute, PVOID, BOOLEAN, PVOID, ULONG );
|
|
typedef VOID (NTAPI *PStorPortFreePool)( PVOID, PVOID, PVOID );
|
|
typedef PVOID (NTAPI *PStorPortAllocatePool)( ULONG, ULONG, PVOID, PVOID * );
|
|
typedef PVOID (NTAPI *PStorPortGetSystemAddress)( PSCSI_REQUEST_BLOCK );
|
|
typedef ULONG (NTAPI *PStorPortAcquireMSISpinLock)( PVOID, ULONG );
|
|
typedef VOID (NTAPI *PStorPortReleaseMSISpinLock)( PVOID, ULONG, ULONG );
|
|
typedef VOID (NTAPI *PStorPortCompleteServiceIrp)( PVOID, PVOID );
|
|
typedef PVOID (NTAPI *PStorPortGetOriginalMdl)( PSCSI_REQUEST_BLOCK );
|
|
|
|
/* Storage port extended functions */
|
|
typedef struct _STORPORT_EXTENDED_FUNCTIONS {
|
|
ULONG Version;
|
|
PStorPortGetMessageInterruptInformation GetMessageInterruptInformation;
|
|
PStorPortPutScatterGatherList PutScatterGatherList;
|
|
PStorPortBuildScatterGatherList BuildScatterGatherList;
|
|
PStorPortFreePool FreePool;
|
|
PStorPortAllocatePool AllocatePool;
|
|
PStorPortGetSystemAddress GetSystemAddress;
|
|
PStorPortAcquireMSISpinLock AcquireMSISpinLock;
|
|
PStorPortReleaseMSISpinLock ReleaseMSISpinLock;
|
|
PStorPortCompleteServiceIrp CompleteServiceIrp;
|
|
PStorPortGetOriginalMdl GetOriginalMdl;
|
|
} STORPORT_EXTENDED_FUNCTIONS;
|
|
typedef STORPORT_EXTENDED_FUNCTIONS *PSTORPORT_EXTENDED_FUNCTIONS;
|
|
|
|
/* Storage port function codes */
|
|
typedef enum _STORPORT_FUNCTION_CODE {
|
|
ExtFunctionAllocatePool = 0,
|
|
ExtFunctionFreePool = 1,
|
|
ExtFunctionAllocateMdl = 2,
|
|
ExtFunctionFreeMdl = 3,
|
|
ExtFunctionBuildMdlForNonPagedPool = 4,
|
|
ExtFunctionGetSystemAddress = 5,
|
|
ExtFunctionGetOriginalMdl = 6,
|
|
ExtFunctionCompleteServiceIrp = 7,
|
|
ExtFunctionGetDeviceObjects = 8,
|
|
ExtFunctionBuildScatterGatherList = 9,
|
|
ExtFunctionPutScatterGatherList = 10,
|
|
ExtFunctionAcquireMSISpinLock = 11,
|
|
ExtFunctionReleaseMSISpinLock = 12,
|
|
ExtFunctionGetMessageInterruptInformation = 13,
|
|
ExtFunctionInitializePerformanceOptimizations = 14,
|
|
ExtFunctionGetStartIoPerformanceParameters = 15,
|
|
ExtFunctionLogSystemEvent = 16,
|
|
ExtFunctionGetCurrentProcessorNumber = 17,
|
|
ExtFunctionGetActiveGroupCount = 18,
|
|
ExtFunctionGetGroupAffinity = 19,
|
|
ExtFunctionGetActiveNodeCount = 20,
|
|
ExtFunctionGetNodeAffinity = 21,
|
|
ExtFunctionGetHighestNodeNumber = 22,
|
|
ExtFunctionGetLogicalProcessorRelationship = 23,
|
|
ExtFunctionAllocateContiguousMemorySpecifyCacheNode = 24,
|
|
ExtFunctionFreeContiguousMemorySpecifyCache = 25
|
|
} STORPORT_FUNCTION_CODE;
|
|
typedef STORPORT_FUNCTION_CODE *PSTORPORT_FUNCTION_CODE;
|
|
|
|
/* Virtual hardware initialization data */
|
|
typedef struct _VIRTUAL_HW_INITIALIZATION_DATA {
|
|
ULONG HwInitializationDataSize;
|
|
INTERFACE_TYPE AdapterInterfaceType;
|
|
PHW_INITIALIZE HwInitialize;
|
|
PHW_STARTIO HwStartIo;
|
|
PHW_INTERRUPT HwInterrupt;
|
|
PVIRTUAL_HW_FIND_ADAPTER HwFindAdapter;
|
|
PHW_RESET_BUS HwResetBus;
|
|
PHW_DMA_STARTED HwDmaStarted;
|
|
PHW_ADAPTER_STATE HwAdapterState;
|
|
ULONG DeviceExtensionSize;
|
|
ULONG SpecificLuExtensionSize;
|
|
ULONG SrbExtensionSize;
|
|
ULONG NumberOfAccessRanges;
|
|
PVOID Reserved;
|
|
UCHAR MapBuffers;
|
|
BOOLEAN NeedPhysicalAddresses;
|
|
BOOLEAN TaggedQueuing;
|
|
BOOLEAN AutoRequestSense;
|
|
BOOLEAN MultipleRequestPerLu;
|
|
BOOLEAN ReceiveEvent;
|
|
USHORT VendorIdLength;
|
|
PVOID VendorId;
|
|
union {
|
|
USHORT ReservedUshort;
|
|
USHORT PortVersionFlags;
|
|
};
|
|
USHORT DeviceIdLength;
|
|
PVOID DeviceId;
|
|
PHW_ADAPTER_CONTROL HwAdapterControl;
|
|
PHW_BUILDIO HwBuildIo;
|
|
PHW_FREE_ADAPTER_RESOURCES HwFreeAdapterResources;
|
|
PHW_PROCESS_SERVICE_REQUEST HwProcessServiceRequest;
|
|
PHW_COMPLETE_SERVICE_IRP HwCompleteServiceIrp;
|
|
PHW_INITIALIZE_TRACING HwInitializeTracing;
|
|
PHW_CLEANUP_TRACING HwCleanupTracing;
|
|
} VIRTUAL_HW_INITIALIZATION_DATA;
|
|
typedef VIRTUAL_HW_INITIALIZATION_DATA *PVIRTUAL_HW_INITIALIZATION_DATA;
|
|
|
|
/* Miniport mappings */
|
|
typedef struct _MINIPORT_MAPPINGS {
|
|
USHORT Version;
|
|
PVOID IBFTable;
|
|
PVOID Nic0Map;
|
|
PVOID Nic1Map;
|
|
ULONG NumberOfAdditionalNic;
|
|
PVOID NicMap[];
|
|
} MINIPORT_MAPPINGS;
|
|
typedef MINIPORT_MAPPINGS *PMINIPORT_MAPPINGS;
|
|
|
|
/* Miniport dump pointers */
|
|
typedef struct _MINIPORT_DUMP_POINTERS {
|
|
USHORT Version;
|
|
USHORT Size;
|
|
WCHAR DriverName[DUMP_MINIPORT_NAME_LENGTH];
|
|
struct _ADAPTER_OBJECT *AdapterObject;
|
|
PVOID MappedRegisterBase;
|
|
ULONG CommonBufferSize;
|
|
PVOID MiniportPrivateDumpData;
|
|
ULONG SystemIoBusNumber;
|
|
INTERFACE_TYPE AdapterInterfaceType;
|
|
ULONG MaximumTransferLength;
|
|
ULONG NumberOfPhysicalBreaks;
|
|
ULONG AlignmentMask;
|
|
ULONG NumberOfAccessRanges;
|
|
ACCESS_RANGE (*AccessRanges)[];
|
|
UCHAR NumberOfBuses;
|
|
BOOLEAN Master;
|
|
BOOLEAN MapBuffers;
|
|
UCHAR MaximumNumberOfTargets;
|
|
} MINIPORT_DUMP_POINTERS;
|
|
typedef MINIPORT_DUMP_POINTERS *PMINIPORT_DUMP_POINTERS;
|
|
|
|
/* Storage event association enumeration */
|
|
typedef enum _STOR_EVENT_ASSOCIATION_ENUM {
|
|
StorEventAdapterAssociation = 0,
|
|
StorEventLunAssociation = 1,
|
|
StorEventTargetAssociation = 2,
|
|
StorEventInvalidAssociation = 3
|
|
} STOR_EVENT_ASSOCIATION_ENUM;
|
|
|
|
/* Storage log event details */
|
|
typedef struct _STOR_LOG_EVENT_DETAILS {
|
|
ULONG InterfaceRevision;
|
|
ULONG Size;
|
|
ULONG Flags;
|
|
STOR_EVENT_ASSOCIATION_ENUM EventAssociation;
|
|
ULONG PathId;
|
|
ULONG TargetId;
|
|
ULONG LunId;
|
|
BOOLEAN StorportSpecificErrorCode;
|
|
ULONG ErrorCode;
|
|
ULONG UniqueId;
|
|
ULONG DumpDataSize;
|
|
PVOID DumpData;
|
|
ULONG StringCount;
|
|
PWSTR *StringList;
|
|
} STOR_LOG_EVENT_DETAILS;
|
|
typedef STOR_LOG_EVENT_DETAILS *PSTOR_LOG_EVENT_DETAILS;
|
|
|
|
/* Storage callbacks */
|
|
typedef BOOLEAN (NTAPI *PSTOR_SYNCHRONIZED_ACCESS)( PVOID, PVOID );
|
|
|
|
/* Functions in STORPORT.SYS */
|
|
STORPORT_API PUCHAR NTAPI StorPortAllocateRegistryBuffer( PVOID, PULONG );
|
|
STORPORT_API BOOLEAN NTAPI StorPortBusy( PVOID, ULONG );
|
|
STORPORT_API VOID NTAPI StorPortCompleteRequest( PVOID, UCHAR, UCHAR, UCHAR, UCHAR );
|
|
STORPORT_API STOR_PHYSICAL_ADDRESS NTAPI StorPortConvertUlongToPhysicalAddress( ULONG_PTR );
|
|
STORPORT_API VOID __cdecl StorPortDebugPrint( ULONG, PCCHAR, ... );
|
|
STORPORT_API BOOLEAN NTAPI StorPortDeviceBusy( PVOID, UCHAR, UCHAR, UCHAR, ULONG );
|
|
STORPORT_API BOOLEAN NTAPI StorPortDeviceReady( PVOID, UCHAR, UCHAR, UCHAR );
|
|
STORPORT_API ULONG __cdecl StorPortExtendedFunction( STORPORT_FUNCTION_CODE, PVOID, ... );
|
|
STORPORT_API VOID NTAPI StorPortFreeDeviceBase( PVOID, PVOID );
|
|
STORPORT_API VOID NTAPI StorPortFreeRegistryBuffer( PVOID, PUCHAR );
|
|
STORPORT_API ULONG NTAPI StorPortGetBusData( PVOID, ULONG, ULONG, ULONG, PVOID, ULONG );
|
|
STORPORT_API PVOID NTAPI StorPortGetDeviceBase( PVOID, INTERFACE_TYPE, ULONG, STOR_PHYSICAL_ADDRESS, ULONG, BOOLEAN );
|
|
STORPORT_API PVOID NTAPI StorPortGetLogicalUnit( PVOID, UCHAR, UCHAR, UCHAR );
|
|
STORPORT_API STOR_PHYSICAL_ADDRESS NTAPI StorPortGetPhysicalAddress( PVOID, PSCSI_REQUEST_BLOCK, PVOID, ULONG * );
|
|
STORPORT_API PSTOR_SCATTER_GATHER_LIST NTAPI StorPortGetScatterGatherList( PVOID, PSCSI_REQUEST_BLOCK );
|
|
STORPORT_API PVOID NTAPI StorPortGetUncachedExtension( PVOID, PPORT_CONFIGURATION_INFORMATION, ULONG );
|
|
STORPORT_API PVOID NTAPI StorPortGetVirtualAddress( PVOID, STOR_PHYSICAL_ADDRESS );
|
|
STORPORT_API ULONG NTAPI StorPortInitialize( PVOID, PVOID, struct _HW_INITIALIZATION_DATA *, PVOID );
|
|
STORPORT_API VOID NTAPI StorPortLogError( PVOID, PSCSI_REQUEST_BLOCK, UCHAR, UCHAR, UCHAR, ULONG, ULONG );
|
|
STORPORT_API VOID NTAPI StorPortMoveMemory( PVOID, PVOID, ULONG );
|
|
STORPORT_API VOID __cdecl StorPortNotification( SCSI_NOTIFICATION_TYPE, PVOID, ... );
|
|
STORPORT_API BOOLEAN NTAPI StorPortPause( PVOID, ULONG );
|
|
STORPORT_API BOOLEAN NTAPI StorPortPauseDevice( PVOID, UCHAR, UCHAR, UCHAR, ULONG );
|
|
STORPORT_API VOID NTAPI StorPortQuerySystemTime( PLARGE_INTEGER );
|
|
STORPORT_API VOID NTAPI StorPortReadPortBufferUchar( PVOID, PUCHAR, PUCHAR, ULONG );
|
|
STORPORT_API VOID NTAPI StorPortReadPortBufferUlong( PVOID, PULONG, PULONG, ULONG );
|
|
STORPORT_API VOID NTAPI StorPortReadPortBufferUshort( PVOID, PUSHORT, PUSHORT, ULONG );
|
|
STORPORT_API UCHAR NTAPI StorPortReadPortUchar( PVOID, PUCHAR );
|
|
STORPORT_API ULONG NTAPI StorPortReadPortUlong( PVOID, PULONG );
|
|
STORPORT_API USHORT NTAPI StorPortReadPortUshort( PVOID, PUSHORT );
|
|
STORPORT_API VOID NTAPI StorPortReadRegisterBufferUchar( PVOID, PUCHAR, PUCHAR, ULONG );
|
|
STORPORT_API VOID NTAPI StorPortReadRegisterBufferUlong( PVOID, PULONG, PULONG, ULONG );
|
|
STORPORT_API VOID NTAPI StorPortReadRegisterBufferUshort( PVOID, PUSHORT, PUSHORT, ULONG );
|
|
STORPORT_API UCHAR NTAPI StorPortReadRegisterUchar( PVOID, PUCHAR );
|
|
STORPORT_API ULONG NTAPI StorPortReadRegisterUlong( PVOID, PULONG );
|
|
STORPORT_API USHORT NTAPI StorPortReadRegisterUshort( PVOID, PUSHORT );
|
|
STORPORT_API BOOLEAN NTAPI StorPortReady( PVOID );
|
|
STORPORT_API BOOLEAN NTAPI StorPortRegistryRead( PVOID, PUCHAR, ULONG, ULONG, PUCHAR, PULONG );
|
|
STORPORT_API BOOLEAN NTAPI StorPortRegistryWrite( PVOID, PUCHAR, ULONG, ULONG, PUCHAR, ULONG );
|
|
STORPORT_API BOOLEAN NTAPI StorPortResume( PVOID );
|
|
STORPORT_API BOOLEAN NTAPI StorPortResumeDevice( PVOID, UCHAR, UCHAR, UCHAR );
|
|
STORPORT_API ULONG NTAPI StorPortSetBusDataByOffset( PVOID, ULONG, ULONG, ULONG, PVOID, ULONG, ULONG );
|
|
STORPORT_API BOOLEAN NTAPI StorPortSetDeviceQueueDepth( PVOID, UCHAR, UCHAR, UCHAR, ULONG );
|
|
STORPORT_API VOID NTAPI StorPortStallExecution( ULONG );
|
|
STORPORT_API BOOLEAN NTAPI StorPortSynchronizeAccess( PVOID, PSTOR_SYNCHRONIZED_ACCESS, PVOID );
|
|
STORPORT_API BOOLEAN NTAPI StorPortValidateRange( PVOID, INTERFACE_TYPE, ULONG, STOR_PHYSICAL_ADDRESS, ULONG, BOOLEAN );
|
|
STORPORT_API VOID NTAPI StorPortWritePortBufferUchar( PVOID, PUCHAR, PUCHAR, ULONG );
|
|
STORPORT_API VOID NTAPI StorPortWritePortBufferUlong( PVOID, PULONG, PULONG, ULONG );
|
|
STORPORT_API VOID NTAPI StorPortWritePortBufferUshort( PVOID, PUSHORT, PUSHORT, ULONG );
|
|
STORPORT_API VOID NTAPI StorPortWritePortUchar( PVOID, PUCHAR, UCHAR );
|
|
STORPORT_API VOID NTAPI StorPortWritePortUlong( PVOID, PULONG, ULONG );
|
|
STORPORT_API VOID NTAPI StorPortWritePortUshort( PVOID, PUSHORT, USHORT );
|
|
STORPORT_API VOID NTAPI StorPortWriteRegisterBufferUchar( PVOID, PUCHAR, PUCHAR, ULONG );
|
|
STORPORT_API VOID NTAPI StorPortWriteRegisterBufferUlong( PVOID, PULONG, PULONG, ULONG );
|
|
STORPORT_API VOID NTAPI StorPortWriteRegisterBufferUshort( PVOID, PUSHORT, PUSHORT, ULONG );
|
|
STORPORT_API VOID NTAPI StorPortWriteRegisterUchar( PVOID, PUCHAR, UCHAR );
|
|
STORPORT_API VOID NTAPI StorPortWriteRegisterUlong( PVOID, PULONG, ULONG );
|
|
STORPORT_API VOID NTAPI StorPortWriteRegisterUshort( PVOID, PUSHORT, USHORT );
|
|
|
|
/* Functions implemented as macros */
|
|
#define StorPortConvertPhysicalAddressToUlong( x ) ((x).LowPart)
|
|
#define StorPortConvertPhysicalAddressToULong64( x ) ((x).QuadPart)
|
|
#if (NTDDI_VERSION >= 0x05020100)
|
|
#define StorPortCopyMemory( p1, p2, p3 ) memcpy( p1, p2, p3 )
|
|
#endif
|
|
#undef DebugPrint
|
|
#if DBG
|
|
#define DebugPrint( x ) StorPortDebugPrint x
|
|
#else
|
|
#define DebugPrint( x )
|
|
#endif
|
|
|
|
/* Aliases */
|
|
#ifdef STOR_USE_SCSI_ALIASES
|
|
#define ScsiDebugPrint StorPortDebugPrint
|
|
#define ScsiPortCompleteRequest StorPortCompleteRequest
|
|
#define ScsiPortConvertPhysicalAddressToUlong StorPortConvertPhysicalAddressToUlong
|
|
#define ScsiPortConvertUlongToPhysicalAddress StorPortConvertUlongToPhysicalAddress
|
|
#define ScsiPortFlushDma StorPortFlushDma
|
|
#define ScsiPortFreeDeviceBase StorPortFreeDeviceBase
|
|
#define ScsiPortGetBusData StorPortGetBusData
|
|
#define ScsiPortGetDeviceBase StorPortGetDeviceBase
|
|
#define ScsiPortGetLogicalUnit StorPortGetLogicalUnit
|
|
#define ScsiPortGetPhysicalAddress StorPortGetPhysicalAddress
|
|
#define ScsiPortGetSrb StorPortGetSrb
|
|
#define ScsiPortGetUncachedExtension StorPortGetUncachedExtension
|
|
#define ScsiPortGetVirtualAddress StorPortGetVirtualAddress
|
|
#define ScsiPortInitialize StorPortInitialize
|
|
#define ScsiPortIoMapTransfer StorPortIoMapTransfer
|
|
#define ScsiPortLogError StorPortLogError
|
|
#define ScsiPortMoveMemory StorPortMoveMemory
|
|
#define ScsiPortNotification StorPortNotification
|
|
#define ScsiPortQuerySystemTime StorPortQuerySystemTime
|
|
#define ScsiPortReadPortBufferUchar( p1, p2, p3 ) \
|
|
StorPortReadPortBufferUchar( NULL, p1, p2, p3 )
|
|
#define ScsiPortReadPortBufferUlong( p1, p2, p3 ) \
|
|
StorPortReadPortBufferUlong( NULL, p1, p2, p3 )
|
|
#define ScsiPortReadPortBufferUshort( p1, p2, p3 ) \
|
|
StorPortReadPortBufferUshort( NULL, p1, p2, p3 )
|
|
#define ScsiPortReadPortUchar( x ) StorPortReadPortUchar( NULL, x )
|
|
#define ScsiPortReadPortUlong( x ) StorPortReadPortUlong( NULL, x )
|
|
#define ScsiPortReadPortUshort( x ) StorPortReadPortUshort( NULL, x )
|
|
#define ScsiPortReadRegisterBufferUchar( p1, p2, p3 ) \
|
|
ScsiPortReadRegisterBufferUchar( NULL, p1, p2, p3 )
|
|
#define ScsiPortReadRegisterBufferUlong( p1, p2, p3 ) \
|
|
ScsiPortReadRegisterBufferUlong( NULL, p1, p2, p3 )
|
|
#define ScsiPortReadRegisterBufferUshort( p1, p2, p3 ) \
|
|
ScsiPortReadRegisterBufferUshort( NULL, p1, p2, p3 )
|
|
#define ScsiPortReadRegisterUchar( x ) StorPortReadRegisterUchar( NULL, x )
|
|
#define ScsiPortReadRegisterUlong( x ) StorPortReadRegisterUlong( NULL, x )
|
|
#define ScsiPortReadRegisterUshort( x ) StorPortReadRegisterUshort( NULL, x )
|
|
#define ScsiPortSetBusDataByOffset StorPortSetBusDataByOffset
|
|
#define ScsiPortStallExecution StorPortStallExecution
|
|
#define ScsiPortValidateRange StorPortValidateRange
|
|
#define ScsiPortWritePortBufferUchar( p1, p2, p3 ) \
|
|
StorPortWritePortBufferUchar( NULL, p1, p2, p3 )
|
|
#define ScsiPortWritePortBufferUlong( p1, p2, p3 ) \
|
|
StorPortWritePortBufferUlong( NULL, p1, p2, p3 )
|
|
#define ScsiPortWritePortBufferUshort( p1, p2, p3 ) \
|
|
StorPortWritePortBufferUshort( NULL, p1, p2, p3 )
|
|
#define ScsiPortWritePortUchar( p1, p2 ) \
|
|
StorPortWritePortUchar( NULL, p1, p2 )
|
|
#define ScsiPortWritePortUlong( p1, p2 ) \
|
|
StorPortWritePortUlong( NULL, p1, p2 )
|
|
#define ScsiPortWritePortUshort( p1, p2 ) \
|
|
StorPortWritePortUshort( NULL, p1, p2 )
|
|
#define ScsiPortWriteRegisterBufferUchar( p1, p2, p3 ) \
|
|
StorPortWriteRegisterBufferUchar( NULL, p1, p2, p3 )
|
|
#define ScsiPortWriteRegisterBufferUlong( p1, p2, p3 ) \
|
|
StorPortWriteRegisterBufferUlong( NULL, p1, p2, p3 )
|
|
#define ScsiPortWriteRegisterBufferUshort( p1, p2, p3 ) \
|
|
StorPortWriteRegisterBufferUshort( NULL, p1, p2, p3 )
|
|
#define ScsiPortWriteRegisterUchar( p1, p2 ) \
|
|
StorPortWriteRegisterUchar( NULL, p1, p2 )
|
|
#define ScsiPortWriteRegisterUlong( p1, p2 ) \
|
|
StorPortWriteRegisterUlong( NULL, p1, p2 )
|
|
#define ScsiPortWriteRegisterUshort( p1, p2 ) \
|
|
StorPortWriteRegisterUshort( NULL, p1, p2 )
|
|
#endif
|
|
|
|
__inline BOOLEAN StorPortEnablePassiveInitialization( PVOID p1,
|
|
PHW_PASSIVE_INITIALIZE_ROUTINE p2 )
|
|
{
|
|
LONG v;
|
|
v = FALSE;
|
|
StorPortNotification( EnablePassiveInitialization, p1, p2, &v );
|
|
return( (BOOLEAN)v );
|
|
}
|
|
|
|
__inline VOID StorPortInitializeDpc( PVOID p1, PSTOR_DPC p2, PHW_DPC_ROUTINE p3 )
|
|
{
|
|
StorPortNotification( InitializeDpc, p1, p2, p3 );
|
|
}
|
|
|
|
__inline BOOLEAN StorPortIssueDpc( PVOID p1, PSTOR_DPC p2, PVOID p3, PVOID p4 )
|
|
{
|
|
LONG v;
|
|
v = FALSE;
|
|
StorPortNotification( IssueDpc, p1, p2, p3, p4, &v );
|
|
return( (BOOLEAN)v );
|
|
}
|
|
|
|
__inline VOID StorPortAcquireSpinLock( PVOID p1, STOR_SPINLOCK p2, PVOID p3,
|
|
PSTOR_LOCK_HANDLE p4 )
|
|
{
|
|
StorPortNotification( AcquireSpinLock, p1, p2, p3, p4 );
|
|
}
|
|
|
|
__inline VOID StorPortReleaseSpinLock( PVOID p1, PSTOR_LOCK_HANDLE p2 )
|
|
{
|
|
StorPortNotification( ReleaseSpinLock, p1, p2 );
|
|
}
|
|
|
|
__inline ULONG StorPortAllocatePool( PVOID p1, ULONG p2, ULONG p3, PVOID *p4 )
|
|
{
|
|
return( StorPortExtendedFunction( ExtFunctionAllocatePool, p1, p2, p3, p4 ) );
|
|
}
|
|
|
|
__inline ULONG StorPortFreePool( PVOID p1, PVOID p2 )
|
|
{
|
|
return( StorPortExtendedFunction( ExtFunctionFreePool, p1, p2 ) );
|
|
}
|
|
|
|
__inline ULONG StorPortAllocateMdl( PVOID p1, PVOID p2, ULONG p3, PVOID *p4 )
|
|
{
|
|
return( StorPortExtendedFunction( ExtFunctionAllocateMdl, p1, p2, p3, p4 ) );
|
|
}
|
|
|
|
__inline ULONG StorPortFreeMdl( PVOID p1, PVOID p2 )
|
|
{
|
|
return( StorPortExtendedFunction( ExtFunctionFreeMdl, p1, p2 ) );
|
|
}
|
|
|
|
__inline ULONG StorPortBuildMdlForNonPagedPool( PVOID p1, PVOID p2 )
|
|
{
|
|
return( StorPortExtendedFunction( ExtFunctionBuildMdlForNonPagedPool, p1, p2 ) );
|
|
}
|
|
|
|
__inline ULONG StorPortGetSystemAddress( PVOID p1, PSCSI_REQUEST_BLOCK p2, PVOID *p3 )
|
|
{
|
|
return( StorPortExtendedFunction( ExtFunctionGetSystemAddress, p1, p2, p3 ) );
|
|
}
|
|
|
|
__inline ULONG StorPortGetOriginalMdl( PVOID p1, PSCSI_REQUEST_BLOCK p2, PVOID *p3 )
|
|
{
|
|
return( StorPortExtendedFunction( ExtFunctionGetOriginalMdl, p1, p2, p3 ) );
|
|
}
|
|
|
|
__inline ULONG StorPortCompleteServiceIrp( PVOID p1, PVOID p2 )
|
|
{
|
|
return( StorPortExtendedFunction( ExtFunctionCompleteServiceIrp, p1, p2 ) );
|
|
}
|
|
|
|
__inline ULONG StorPortGetDeviceObjects( PVOID p1, PVOID *p2, PVOID *p3, PVOID *p4 )
|
|
{
|
|
return( StorPortExtendedFunction( ExtFunctionGetDeviceObjects, p1, p2, p3, p4 ) );
|
|
}
|
|
|
|
__inline ULONG StorPortBuildScatterGatherList( PVOID p1, PVOID p2, PVOID p3, ULONG p4,
|
|
PpostScaterGatherExecute p5, PVOID p6,
|
|
BOOLEAN p7, PVOID p8, ULONG p9 )
|
|
{
|
|
return( StorPortExtendedFunction( ExtFunctionBuildScatterGatherList, p1, p2, p3, p4,
|
|
p5, p6, p7, p8, p9 ) );
|
|
}
|
|
|
|
__inline ULONG StorPortPutScatterGatherList( PVOID p1, PSTOR_SCATTER_GATHER_LIST p2,
|
|
BOOLEAN p3 )
|
|
{
|
|
return( StorPortExtendedFunction( ExtFunctionPutScatterGatherList, p1, p2, p3 ) );
|
|
}
|
|
|
|
__inline ULONG StorPortAcquireMSISpinLock( PVOID p1, ULONG p2, PULONG p3 )
|
|
{
|
|
return( StorPortExtendedFunction( ExtFunctionAcquireMSISpinLock, p1, p2, p3 ) );
|
|
}
|
|
|
|
__inline ULONG StorPortReleaseMSISpinLock( PVOID p1, ULONG p2, ULONG p3 )
|
|
{
|
|
return( StorPortExtendedFunction( ExtFunctionReleaseMSISpinLock, p1, p2, p3 ) );
|
|
}
|
|
|
|
__inline ULONG StorPortGetMSIInfo( PVOID p1, ULONG p2,
|
|
PMESSAGE_INTERRUPT_INFORMATION p3 )
|
|
{
|
|
return( StorPortExtendedFunction( ExtFunctionGetMessageInterruptInformation, p1, p2,
|
|
p3 ) );
|
|
}
|
|
|
|
__inline ULONG StorPortInitializePerfOpts( PVOID p1, BOOLEAN p2,
|
|
PPERF_CONFIGURATION_DATA p3 )
|
|
{
|
|
return( StorPortExtendedFunction( ExtFunctionInitializePerformanceOptimizations, p1,
|
|
p2, p3 ) );
|
|
}
|
|
|
|
__inline ULONG StorPortGetStartIoPerfParams( PVOID p1, PSCSI_REQUEST_BLOCK p2,
|
|
PSTARTIO_PERFORMANCE_PARAMETERS p3 )
|
|
{
|
|
return( StorPortExtendedFunction( ExtFunctionGetStartIoPerformanceParameters, p1, p2,
|
|
p3 ) );
|
|
}
|
|
|
|
__inline ULONG StorPortLogSystemEvent( PVOID p1, PSTOR_LOG_EVENT_DETAILS p2, PULONG p3 )
|
|
{
|
|
return( StorPortExtendedFunction( ExtFunctionLogSystemEvent, p1, p2, p3 ) );
|
|
}
|
|
|
|
__inline ULONG StorPortGetCurrentProcessorNumber( PVOID p1, PPROCESSOR_NUMBER p2 )
|
|
{
|
|
return( StorPortExtendedFunction( ExtFunctionGetCurrentProcessorNumber, p1, p2 ) );
|
|
}
|
|
|
|
__inline ULONG StorPortGetGroupAffinity( PVOID p1, USHORT p2, PKAFFINITY p3 )
|
|
{
|
|
return( StorPortExtendedFunction( ExtFunctionGetGroupAffinity, p1, p2, p3 ) );
|
|
}
|
|
|
|
__inline ULONG StorPortGetActiveGroupCount( PVOID p1, PUSHORT p2 )
|
|
{
|
|
return( StorPortExtendedFunction( ExtFunctionGetActiveGroupCount, p1, p2 ) );
|
|
}
|
|
|
|
__inline ULONG StorPortGetNodeAffinity( PVOID p1, ULONG p2, PGROUP_AFFINITY p3 )
|
|
{
|
|
return( StorPortExtendedFunction( ExtFunctionGetNodeAffinity, p1, p2, p3 ) );
|
|
}
|
|
|
|
__inline ULONG StorPortGetActiveNodeCount( PVOID p1, PULONG p2 )
|
|
{
|
|
return( StorPortExtendedFunction( ExtFunctionGetActiveNodeCount, p1, p2 ) );
|
|
}
|
|
|
|
__inline ULONG StorPortGetHighestNodeNumber( PVOID p1, PULONG p2 )
|
|
{
|
|
return( StorPortExtendedFunction( ExtFunctionGetHighestNodeNumber, p1, p2 ) );
|
|
}
|
|
|
|
__inline ULONG StorPortGetLogicalProcessorRelationship( PVOID p1, PPROCESSOR_NUMBER p2,
|
|
LOGICAL_PROCESSOR_RELATIONSHIP p3, PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX p4,
|
|
PULONG p5 )
|
|
{
|
|
return( StorPortExtendedFunction( ExtFunctionGetLogicalProcessorRelationship, p1, p2,
|
|
p3, p4, p5 ) );
|
|
}
|
|
|
|
__inline ULONG StorPortAllocateContiguousMemorySpecifyCacheNode( PVOID p1, SIZE_T p2,
|
|
PHYSICAL_ADDRESS p3, PHYSICAL_ADDRESS p4, PHYSICAL_ADDRESS p5,
|
|
MEMORY_CACHING_TYPE p6, NODE_REQUIREMENT p7, PVOID *p8 )
|
|
{
|
|
return( StorPortExtendedFunction( ExtFunctionAllocateContiguousMemorySpecifyCacheNode,
|
|
p1, p2, p3, p4, p5, p6, p7, p8 ) );
|
|
}
|
|
|
|
__inline ULONG StorPortFreeContiguousMemorySpecifyCache( PVOID p1, PVOID p2, SIZE_T p3,
|
|
MEMORY_CACHING_TYPE p4 )
|
|
{
|
|
return( StorPortExtendedFunction( ExtFunctionFreeContiguousMemorySpecifyCache, p1,
|
|
p2, p3, p4 ) );
|
|
}
|
|
|
|
#ifdef __cplusplus
|
|
} /* extern "C" */
|
|
#endif
|
|
|
|
#endif /* _NTSTORPORT_ */
|