This repository has been archived on 2024-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
CodeBlocksPortable/WATCOM/h/nt/ddk/storport.h

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_ */