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