/* * storport.h * * StorPort interface * * This file is part of the w32api package. * * Contributors: * Created by Casper S. Hornstrup * * THIS SOFTWARE IS NOT COPYRIGHTED * * This source code is offered for use in the public domain. You may * use, modify or distribute it freely. * * This code is distributed in the hope that it will be useful but * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY * DISCLAIMED. This includes but is not limited to warranties of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * */ #ifndef __STORPORT_H #define __STORPORT_H #if __GNUC__ >=3 #pragma GCC system_header #endif #ifdef __cplusplus extern "C" { #endif #include "ntddk.h" #include "srb.h" #if defined(_STORPORT_) #define STORPORTAPI DECLSPEC_EXPORT #else #define STORPORTAPI DECLSPEC_IMPORT #endif typedef PHYSICAL_ADDRESS STOR_PHYSICAL_ADDRESS; typedef struct _STOR_SCATTER_GATHER_ELEMENT { STOR_PHYSICAL_ADDRESS PhysicalAddress; ULONG Length; ULONG_PTR Reserved; } STOR_SCATTER_GATHER_ELEMENT, *PSTOR_SCATTER_GATHER_ELEMENT; typedef struct _STOR_SCATTER_GATHER_LIST { ULONG NumberOfElements; ULONG_PTR Reserved; STOR_SCATTER_GATHER_ELEMENT List[0]; } STOR_SCATTER_GATHER_LIST, *PSTOR_SCATTER_GATHER_LIST; typedef struct _SCSI_WMI_REQUEST_BLOCK { USHORT Length; UCHAR Function; UCHAR SrbStatus; UCHAR WMISubFunction; UCHAR PathId; UCHAR TargetId; UCHAR Lun; UCHAR Reserved1; UCHAR WMIFlags; UCHAR Reserved2[2]; ULONG SrbFlags; ULONG DataTransferLength; ULONG TimeOutValue; PVOID DataBuffer; PVOID DataPath; PVOID Reserved3; PVOID OriginalRequest; PVOID SrbExtension; ULONG Reserved4; UCHAR Reserved5[16]; } SCSI_WMI_REQUEST_BLOCK, *PSCSI_WMI_REQUEST_BLOCK; STORPORTAPI ULONG DDKAPI StorPortInitialize( /*IN*/ PVOID Argument1, /*IN*/ PVOID Argument2, /*IN*/ PHW_INITIALIZATION_DATA HwInitializationData, /*IN*/ PVOID Unused); STORPORTAPI VOID DDKAPI StorPortFreeDeviceBase( /*IN*/ PVOID HwDeviceExtension, /*IN*/ PVOID MappedAddress); STORPORTAPI ULONG DDKAPI StorPortGetBusData( /*IN*/ PVOID DeviceExtension, /*IN*/ ULONG BusDataType, /*IN*/ ULONG SystemIoBusNumber, /*IN*/ ULONG SlotNumber, /*IN*/ PVOID Buffer, /*IN*/ ULONG Length); STORPORTAPI ULONG DDKAPI StorPortSetBusDataByOffset( /*IN*/ PVOID DeviceExtension, /*IN*/ ULONG BusDataType, /*IN*/ ULONG SystemIoBusNumber, /*IN*/ ULONG SlotNumber, /*IN*/ PVOID Buffer, /*IN*/ ULONG Offset, /*IN*/ ULONG Length); STORPORTAPI PVOID DDKAPI StorPortGetDeviceBase( /*IN*/ PVOID HwDeviceExtension, /*IN*/ INTERFACE_TYPE BusType, /*IN*/ ULONG SystemIoBusNumber, /*IN*/ SCSI_PHYSICAL_ADDRESS IoAddress, /*IN*/ ULONG NumberOfBytes, /*IN*/ BOOLEAN InIoSpace); STORPORTAPI PVOID DDKAPI StorPortGetLogicalUnit( /*IN*/ PVOID HwDeviceExtension, /*IN*/ UCHAR PathId, /*IN*/ UCHAR TargetId, /*IN*/ UCHAR Lun); STORPORTAPI PSCSI_REQUEST_BLOCK DDKAPI StorPortGetSrb( /*IN*/ PVOID DeviceExtension, /*IN*/ UCHAR PathId, /*IN*/ UCHAR TargetId, /*IN*/ UCHAR Lun, /*IN*/ LONG QueueTag); STORPORTAPI STOR_PHYSICAL_ADDRESS DDKAPI StorPortGetPhysicalAddress( /*IN*/ PVOID HwDeviceExtension, /*IN*/ PSCSI_REQUEST_BLOCK Srb, /*IN*/ PVOID VirtualAddress, /*OUT*/ ULONG *Length); STORPORTAPI PVOID DDKAPI StorPortGetVirtualAddress( /*IN*/ PVOID HwDeviceExtension, /*IN*/ STOR_PHYSICAL_ADDRESS PhysicalAddress); STORPORTAPI PVOID DDKAPI StorPortGetUncachedExtension( /*IN*/ PVOID HwDeviceExtension, /*IN*/ PPORT_CONFIGURATION_INFORMATION ConfigInfo, /*IN*/ ULONG NumberOfBytes); STORPORTAPI VOID DDKCDECLAPI StorPortNotification( /*IN*/ SCSI_NOTIFICATION_TYPE NotificationType, /*IN*/ PVOID HwDeviceExtension, /*IN*/ ...); STORPORTAPI VOID DDKAPI StorPortLogError( /*IN*/ PVOID HwDeviceExtension, /*IN*/ PSCSI_REQUEST_BLOCK Srb /*OPTIONAL*/, /*IN*/ UCHAR PathId, /*IN*/ UCHAR TargetId, /*IN*/ UCHAR Lun, /*IN*/ ULONG ErrorCode, /*IN*/ ULONG UniqueId); STORPORTAPI VOID DDKAPI StorPortCompleteRequest( /*IN*/ PVOID HwDeviceExtension, /*IN*/ UCHAR PathId, /*IN*/ UCHAR TargetId, /*IN*/ UCHAR Lun, /*IN*/ UCHAR SrbStatus); STORPORTAPI VOID DDKAPI StorPortMoveMemory( /*IN*/ PVOID WriteBuffer, /*IN*/ PVOID ReadBuffer, /*IN*/ ULONG Length); STORPORTAPI VOID DDKAPI StorPortStallExecution( /*IN*/ ULONG Delay); STORPORTAPI STOR_PHYSICAL_ADDRESS DDKAPI StorPortConvertUlong64ToPhysicalAddress( /*IN*/ ULONG64 UlongAddress); STORPORTAPI ULONG64 DDKAPI StorPortConvertPhysicalAddressToUlong64( /*IN*/ STOR_PHYSICAL_ADDRESS Address); STORPORTAPI BOOLEAN DDKAPI StorPortValidateRange( /*IN*/ PVOID HwDeviceExtension, /*IN*/ INTERFACE_TYPE BusType, /*IN*/ ULONG SystemIoBusNumber, /*IN*/ STOR_PHYSICAL_ADDRESS IoAddress, /*IN*/ ULONG NumberOfBytes, /*IN*/ BOOLEAN InIoSpace); STORPORTAPI VOID DDKCDECLAPI StorPortDebugPrint( /*IN*/ ULONG DebugPrintLevel, /*IN*/ PCCHAR DebugMessage, /*IN*/ ...); STORPORTAPI UCHAR DDKAPI StorPortReadPortUchar( /*IN*/ PUCHAR Port); STORPORTAPI ULONG DDKAPI StorPortReadPortUlong( /*IN*/ PULONG Port); STORPORTAPI USHORT DDKAPI StorPortReadPortUshort( /*IN*/ PUSHORT Port); STORPORTAPI UCHAR DDKAPI StorPortReadRegisterUchar( /*IN*/ PUCHAR Register); STORPORTAPI ULONG DDKAPI StorPortReadRegisterUlong( /*IN*/ PULONG Register); STORPORTAPI USHORT DDKAPI StorPortReadRegisterUshort( /*IN*/ PUSHORT Register); STORPORTAPI VOID DDKAPI StorPortWritePortUchar( /*IN*/ PUCHAR Port, /*IN*/ UCHAR Value); STORPORTAPI VOID DDKAPI StorPortWritePortUlong( /*IN*/ PULONG Port, /*IN*/ ULONG Value); STORPORTAPI VOID DDKAPI StorPortWritePortUshort( /*IN*/ PUSHORT Port, /*IN*/ USHORT Value); STORPORTAPI VOID DDKAPI StorPortWriteRegisterUchar( /*IN*/ PUCHAR Port, /*IN*/ UCHAR Value); STORPORTAPI VOID DDKAPI StorPortWriteRegisterUlong( /*IN*/ PULONG Port, /*IN*/ ULONG Value); STORPORTAPI VOID DDKAPI StorPortWriteRegisterUshort( /*IN*/ PUSHORT Port, /*IN*/ USHORT Value); STORPORTAPI BOOLEAN DDKAPI StorPortPauseDevice( /*IN*/ PVOID HwDeviceExtension, /*IN*/ UCHAR PathId, /*IN*/ UCHAR TargetId, /*IN*/ UCHAR Lun, /*IN*/ ULONG TimeOut); STORPORTAPI BOOLEAN DDKAPI StorPortResumeDevice( /*IN*/ PVOID HwDeviceExtension, /*IN*/ UCHAR PathId, /*IN*/ UCHAR TargetId, /*IN*/ UCHAR Lun); STORPORTAPI BOOLEAN DDKAPI StorPortPause( /*IN*/ PVOID HwDeviceExtension, /*IN*/ ULONG TimeOut); STORPORTAPI BOOLEAN DDKAPI StorPortResume( /*IN*/ PVOID HwDeviceExtension); STORPORTAPI BOOLEAN DDKAPI StorPortDeviceBusy( /*IN*/ PVOID HwDeviceExtension, /*IN*/ UCHAR PathId, /*IN*/ UCHAR TargetId, /*IN*/ UCHAR Lun, /*IN*/ ULONG RequestsToComplete); STORPORTAPI BOOLEAN DDKAPI StorPortDeviceReady( /*IN*/ PVOID HwDeviceExtension, /*IN*/ UCHAR PathId, /*IN*/ UCHAR TargetId, /*IN*/ UCHAR Lun); STORPORTAPI BOOLEAN DDKAPI StorPortBusy( /*IN*/ PVOID HwDeviceExtension, /*IN*/ ULONG RequestsToComplete); STORPORTAPI BOOLEAN DDKAPI StorPortReady( /*IN*/ PVOID HwDeviceExtension); STORPORTAPI PSTOR_SCATTER_GATHER_LIST DDKAPI StorPortGetScatterGatherList( /*IN*/ PVOID DeviceExtension, /*IN*/ PSCSI_REQUEST_BLOCK Srb); typedef BOOLEAN DDKAPI (*PSTOR_SYNCHRONIZED_ACCESS)( /*IN*/ PVOID HwDeviceExtension, /*IN*/ PVOID Context); STORPORTAPI VOID DDKAPI StorPortSynchronizeAccess( /*IN*/ PVOID HwDeviceExtension, /*IN*/ PSTOR_SYNCHRONIZED_ACCESS SynchronizedAccessRoutine, /*IN*/ PVOID Context); #ifdef DBG #define DebugPrint(x) StorPortDebugPrint x #else #define DebugPrint(x) #endif #ifdef __cplusplus } #endif #endif /* __STORPORT_H */