diff -r 000000000000 -r 76b1f169d9fe mingw-5.1.4/win32/include/ddk/srb.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mingw-5.1.4/win32/include/ddk/srb.h Fri Apr 03 17:16:45 2009 +0100 @@ -0,0 +1,753 @@ +/* + * scsi.h + * + * Interface between SCSI miniport drivers and the SCSI port driver. + * + * 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 __SRB_H +#define __SRB_H + +#if __GNUC__ >=3 +#pragma GCC system_header +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#include "ntddk.h" + +#if defined(_SCSIPORT_) + #define SCSIPORTAPI DECLSPEC_EXPORT +#else + #define SCSIPORTAPI DECLSPEC_IMPORT +#endif + +#ifdef DBG +#define DebugPrint(x) ScsiDebugPrint x +#else +#define DebugPrint(x) +#endif + +typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS; + +#define SP_UNINITIALIZED_VALUE ((ULONG) ~0) +#define SP_UNTAGGED ((UCHAR) ~0) + +#define SRB_SIMPLE_TAG_REQUEST 0x20 +#define SRB_HEAD_OF_QUEUE_TAG_REQUEST 0x21 +#define SRB_ORDERED_QUEUE_TAG_REQUEST 0x22 + +#define SRB_STATUS_QUEUE_FROZEN 0x40 +#define SRB_STATUS_AUTOSENSE_VALID 0x80 + +#define SRB_STATUS(Status) \ + (Status & ~(SRB_STATUS_AUTOSENSE_VALID | SRB_STATUS_QUEUE_FROZEN)) + +#define MAXIMUM_CDB_SIZE 12 + +#ifdef DBG +#define SCSI_PORT_SIGNATURE 0x54524f50 +#endif + + +#define SCSI_MAXIMUM_LOGICAL_UNITS 8 +#define SCSI_MAXIMUM_TARGETS_PER_BUS 128 +#define SCSI_MAXIMUM_LUNS_PER_TARGET 255 +#define SCSI_MAXIMUM_BUSES 8 +#define SCSI_MINIMUM_PHYSICAL_BREAKS 16 +#define SCSI_MAXIMUM_PHYSICAL_BREAKS 255 +#define SCSI_MAXIMUM_TARGETS 8 + +#define SRB_FUNCTION_WMI 0x17 + +#define SRB_WMI_FLAGS_ADAPTER_REQUEST 0x0001 + +#define SP_BUS_PARITY_ERROR 0x0001 +#define SP_UNEXPECTED_DISCONNECT 0x0002 +#define SP_INVALID_RESELECTION 0x0003 +#define SP_BUS_TIME_OUT 0x0004 +#define SP_PROTOCOL_ERROR 0x0005 +#define SP_INTERNAL_ADAPTER_ERROR 0x0006 +#define SP_REQUEST_TIMEOUT 0x0007 +#define SP_IRQ_NOT_RESPONDING 0x0008 +#define SP_BAD_FW_WARNING 0x0009 +#define SP_BAD_FW_ERROR 0x000a +#define SP_LOST_WMI_MINIPORT_REQUEST 0x000b + +/* SCSI_REQUEST_BLOCK.Function constants */ +#define SRB_FUNCTION_EXECUTE_SCSI 0x00 +#define SRB_FUNCTION_CLAIM_DEVICE 0x01 +#define SRB_FUNCTION_IO_CONTROL 0x02 +#define SRB_FUNCTION_RECEIVE_EVENT 0x03 +#define SRB_FUNCTION_RELEASE_QUEUE 0x04 +#define SRB_FUNCTION_ATTACH_DEVICE 0x05 +#define SRB_FUNCTION_RELEASE_DEVICE 0x06 +#define SRB_FUNCTION_SHUTDOWN 0x07 +#define SRB_FUNCTION_FLUSH 0x08 +#define SRB_FUNCTION_ABORT_COMMAND 0x10 +#define SRB_FUNCTION_RELEASE_RECOVERY 0x11 +#define SRB_FUNCTION_RESET_BUS 0x12 +#define SRB_FUNCTION_RESET_DEVICE 0x13 +#define SRB_FUNCTION_TERMINATE_IO 0x14 +#define SRB_FUNCTION_FLUSH_QUEUE 0x15 +#define SRB_FUNCTION_REMOVE_DEVICE 0x16 +#define SRB_FUNCTION_WMI 0x17 +#define SRB_FUNCTION_LOCK_QUEUE 0x18 +#define SRB_FUNCTION_UNLOCK_QUEUE 0x19 +#define SRB_FUNCTION_RESET_LOGICAL_UNIT 0x20 + +/* SCSI_REQUEST_BLOCK.SrbStatus constants */ +#define SRB_STATUS_PENDING 0x00 +#define SRB_STATUS_SUCCESS 0x01 +#define SRB_STATUS_ABORTED 0x02 +#define SRB_STATUS_ABORT_FAILED 0x03 +#define SRB_STATUS_ERROR 0x04 +#define SRB_STATUS_BUSY 0x05 +#define SRB_STATUS_INVALID_REQUEST 0x06 +#define SRB_STATUS_INVALID_PATH_ID 0x07 +#define SRB_STATUS_NO_DEVICE 0x08 +#define SRB_STATUS_TIMEOUT 0x09 +#define SRB_STATUS_SELECTION_TIMEOUT 0x0A +#define SRB_STATUS_COMMAND_TIMEOUT 0x0B +#define SRB_STATUS_MESSAGE_REJECTED 0x0D +#define SRB_STATUS_BUS_RESET 0x0E +#define SRB_STATUS_PARITY_ERROR 0x0F +#define SRB_STATUS_REQUEST_SENSE_FAILED 0x10 +#define SRB_STATUS_NO_HBA 0x11 +#define SRB_STATUS_DATA_OVERRUN 0x12 +#define SRB_STATUS_UNEXPECTED_BUS_FREE 0x13 +#define SRB_STATUS_PHASE_SEQUENCE_FAILURE 0x14 +#define SRB_STATUS_BAD_SRB_BLOCK_LENGTH 0x15 +#define SRB_STATUS_REQUEST_FLUSHED 0x16 +#define SRB_STATUS_INVALID_LUN 0x20 +#define SRB_STATUS_INVALID_TARGET_ID 0x21 +#define SRB_STATUS_BAD_FUNCTION 0x22 +#define SRB_STATUS_ERROR_RECOVERY 0x23 +#define SRB_STATUS_NOT_POWERED 0x24 +#define SRB_STATUS_INTERNAL_ERROR 0x30 + +/* SCSI_REQUEST_BLOCK.SrbFlags constants */ +#define SRB_FLAGS_QUEUE_ACTION_ENABLE 0x00000002 +#define SRB_FLAGS_DISABLE_DISCONNECT 0x00000004 +#define SRB_FLAGS_DISABLE_SYNCH_TRANSFER 0x00000008 +#define SRB_FLAGS_BYPASS_FROZEN_QUEUE 0x00000010 +#define SRB_FLAGS_DISABLE_AUTOSENSE 0x00000020 +#define SRB_FLAGS_DATA_IN 0x00000040 +#define SRB_FLAGS_DATA_OUT 0x00000080 +#define SRB_FLAGS_NO_DATA_TRANSFER 0x00000000 +#define SRB_FLAGS_UNSPECIFIED_DIRECTION (SRB_FLAGS_DATA_IN | SRB_FLAGS_DATA_OUT) +#define SRB_FLAGS_NO_QUEUE_FREEZE 0x00000100 +#define SRB_FLAGS_ADAPTER_CACHE_ENABLE 0x00000200 +#define SRB_FLAGS_FREE_SENSE_BUFFER 0x00000400 +#define SRB_FLAGS_IS_ACTIVE 0x00010000 +#define SRB_FLAGS_ALLOCATED_FROM_ZONE 0x00020000 +#define SRB_FLAGS_SGLIST_FROM_POOL 0x00040000 +#define SRB_FLAGS_BYPASS_LOCKED_QUEUE 0x00080000 +#define SRB_FLAGS_NO_KEEP_AWAKE 0x00100000 +#define SRB_FLAGS_PORT_DRIVER_ALLOCSENSE 0x00200000 +#define SRB_FLAGS_PORT_DRIVER_SENSEHASPORT 0x00400000 +#define SRB_FLAGS_DONT_START_NEXT_PACKET 0x00800000 +#define SRB_FLAGS_PORT_DRIVER_RESERVED 0x0F000000 +#define SRB_FLAGS_CLASS_DRIVER_RESERVED 0xF0000000 + +typedef struct _SCSI_REQUEST_BLOCK { + USHORT Length; + UCHAR Function; + UCHAR SrbStatus; + UCHAR ScsiStatus; + UCHAR PathId; + UCHAR TargetId; + UCHAR Lun; + UCHAR QueueTag; + UCHAR QueueAction; + UCHAR CdbLength; + UCHAR SenseInfoBufferLength; + ULONG SrbFlags; + ULONG DataTransferLength; + ULONG TimeOutValue; + PVOID DataBuffer; + PVOID SenseInfoBuffer; + struct _SCSI_REQUEST_BLOCK *NextSrb; + PVOID OriginalRequest; + PVOID SrbExtension; + _ANONYMOUS_UNION union { + ULONG InternalStatus; + ULONG QueueSortKey; + } DUMMYUNIONNAME; +#if defined(_WIN64) + ULONG Reserved; +#endif + UCHAR Cdb[16]; +} SCSI_REQUEST_BLOCK, *PSCSI_REQUEST_BLOCK; + +#define SCSI_REQUEST_BLOCK_SIZE sizeof(SCSI_REQUEST_BLOCK) + +typedef struct _ACCESS_RANGE { + SCSI_PHYSICAL_ADDRESS RangeStart; + ULONG RangeLength; + BOOLEAN RangeInMemory; +} ACCESS_RANGE, *PACCESS_RANGE; + +/* PORT_CONFIGURATION_INFORMATION.Dma64BitAddresses constants */ +#define SCSI_DMA64_MINIPORT_SUPPORTED 0x01 +#define SCSI_DMA64_SYSTEM_SUPPORTED 0x80 + +typedef struct _PORT_CONFIGURATION_INFORMATION { + ULONG Length; + ULONG SystemIoBusNumber; + INTERFACE_TYPE AdapterInterfaceType; + ULONG BusInterruptLevel; + ULONG BusInterruptVector; + KINTERRUPT_MODE InterruptMode; + ULONG MaximumTransferLength; + ULONG NumberOfPhysicalBreaks; + ULONG DmaChannel; + ULONG DmaPort; + DMA_WIDTH DmaWidth; + DMA_SPEED DmaSpeed; + ULONG AlignmentMask; + ULONG NumberOfAccessRanges; + ACCESS_RANGE (*AccessRanges)[]; + PVOID Reserved; + UCHAR NumberOfBuses; + UCHAR InitiatorBusId[8]; + BOOLEAN ScatterGather; + BOOLEAN Master; + BOOLEAN CachesData; + BOOLEAN AdapterScansDown; + BOOLEAN AtdiskPrimaryClaimed; + BOOLEAN AtdiskSecondaryClaimed; + BOOLEAN Dma32BitAddresses; + BOOLEAN DemandMode; + BOOLEAN MapBuffers; + BOOLEAN NeedPhysicalAddresses; + BOOLEAN TaggedQueuing; + BOOLEAN AutoRequestSense; + BOOLEAN MultipleRequestPerLu; + BOOLEAN ReceiveEvent; + BOOLEAN RealModeInitialized; + BOOLEAN BufferAccessScsiPortControlled; + UCHAR MaximumNumberOfTargets; + UCHAR ReservedUchars[2]; + ULONG SlotNumber; + ULONG BusInterruptLevel2; + ULONG BusInterruptVector2; + KINTERRUPT_MODE InterruptMode2; + ULONG DmaChannel2; + ULONG DmaPort2; + DMA_WIDTH DmaWidth2; + DMA_SPEED DmaSpeed2; + ULONG DeviceExtensionSize; + ULONG SpecificLuExtensionSize; + ULONG SrbExtensionSize; + UCHAR Dma64BitAddresses; + BOOLEAN ResetTargetSupported; + UCHAR MaximumNumberOfLogicalUnits; + BOOLEAN WmiDataProvider; +} PORT_CONFIGURATION_INFORMATION, *PPORT_CONFIGURATION_INFORMATION; + +#define CONFIG_INFO_VERSION_2 sizeof(PORT_CONFIGURATION_INFORMATION) + +typedef enum _SCSI_NOTIFICATION_TYPE { + RequestComplete, + NextRequest, + NextLuRequest, + ResetDetected, + CallDisableInterrupts, + CallEnableInterrupts, + RequestTimerCall, + BusChangeDetected, + WMIEvent, + WMIReregister +} SCSI_NOTIFICATION_TYPE, *PSCSI_NOTIFICATION_TYPE; + +#ifdef __GNUC__ +__extension__ /* enums limited to range of integer */ +#endif +typedef enum _SCSI_ADAPTER_CONTROL_TYPE { + ScsiQuerySupportedControlTypes = 0, + ScsiStopAdapter, + ScsiRestartAdapter, + ScsiSetBootConfig, + ScsiSetRunningConfig, + ScsiAdapterControlMax, + MakeAdapterControlTypeSizeOfUlong = 0xffffffff +} SCSI_ADAPTER_CONTROL_TYPE, *PSCSI_ADAPTER_CONTROL_TYPE; + +typedef enum _SCSI_ADAPTER_CONTROL_STATUS { + ScsiAdapterControlSuccess = 0, + ScsiAdapterControlUnsuccessful +} SCSI_ADAPTER_CONTROL_STATUS, *PSCSI_ADAPTER_CONTROL_STATUS; + +typedef struct _SCSI_SUPPORTED_CONTROL_TYPE_LIST { + ULONG MaxControlType; + BOOLEAN SupportedTypeList[0]; +} SCSI_SUPPORTED_CONTROL_TYPE_LIST, *PSCSI_SUPPORTED_CONTROL_TYPE_LIST; + +typedef SCSI_ADAPTER_CONTROL_STATUS DDKAPI +(*PHW_ADAPTER_CONTROL)( + /*IN*/ PVOID DeviceExtension, + /*IN*/ SCSI_ADAPTER_CONTROL_TYPE ControlType, + /*IN*/ PVOID Parameters); + +typedef BOOLEAN DDKAPI +(*PHW_ADAPTER_STATE)( + /*IN*/ PVOID DeviceExtension, + /*IN*/ PVOID Context, + /*IN*/ BOOLEAN SaveState); + +#define SP_RETURN_NOT_FOUND 0 +#define SP_RETURN_FOUND 1 +#define SP_RETURN_ERROR 2 +#define SP_RETURN_BAD_CONFIG 3 + +typedef ULONG DDKAPI +(*PHW_FIND_ADAPTER)( + /*IN*/ PVOID DeviceExtension, + /*IN*/ PVOID HwContext, + /*IN*/ PVOID BusInformation, + /*IN*/ PCHAR ArgumentString, + /*IN OUT*/ PPORT_CONFIGURATION_INFORMATION ConfigInfo, + /*OUT*/ PBOOLEAN Again); + +typedef BOOLEAN DDKAPI +(*PHW_INITIALIZE)( + /*IN*/ PVOID DeviceExtension); + +typedef BOOLEAN DDKAPI +(*PHW_INTERRUPT)( + /*IN*/ PVOID DeviceExtension); + +typedef BOOLEAN DDKAPI +(*PHW_RESET_BUS)( + /*IN*/ PVOID DeviceExtension, + /*IN*/ ULONG PathId); + +typedef VOID DDKAPI +(*PHW_DMA_STARTED)( + /*IN*/ PVOID DeviceExtension); + +typedef BOOLEAN DDKAPI +(*PHW_STARTIO)( + /*IN*/ PVOID DeviceExtension, + /*IN*/ PSCSI_REQUEST_BLOCK Srb); + +typedef VOID DDKAPI +(*PHW_TIMER)( + /*IN*/ PVOID DeviceExtension); + +typedef struct _HW_INITIALIZATION_DATA { + ULONG HwInitializationDataSize; + INTERFACE_TYPE AdapterInterfaceType; + PHW_INITIALIZE HwInitialize; + PHW_STARTIO HwStartIo; + PHW_INTERRUPT HwInterrupt; + PHW_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; + BOOLEAN MapBuffers; + BOOLEAN NeedPhysicalAddresses; + BOOLEAN TaggedQueuing; + BOOLEAN AutoRequestSense; + BOOLEAN MultipleRequestPerLu; + BOOLEAN ReceiveEvent; + USHORT VendorIdLength; + PVOID VendorId; + USHORT ReservedUshort; + USHORT DeviceIdLength; + PVOID DeviceId; + PHW_ADAPTER_CONTROL HwAdapterControl; +} HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA; + +SCSIPORTAPI +VOID +DDKAPI +ScsiPortCompleteRequest( + /*IN*/ PVOID HwDeviceExtension, + /*IN*/ UCHAR PathId, + /*IN*/ UCHAR TargetId, + /*IN*/ UCHAR Lun, + /*IN*/ UCHAR SrbStatus); + +/* + * ULONG + * ScsiPortConvertPhysicalAddressToUlong( + * IN SCSI_PHYSICAL_ADDRESS Address); + */ +#define ScsiPortConvertPhysicalAddressToUlong(Address) ((Address).LowPart) + +SCSIPORTAPI +SCSI_PHYSICAL_ADDRESS +DDKAPI +ScsiPortConvertUlongToPhysicalAddress( + /*IN*/ ULONG UlongAddress); + +SCSIPORTAPI +VOID +DDKAPI +ScsiPortFlushDma( + /*IN*/ PVOID DeviceExtension); + +SCSIPORTAPI +VOID +DDKAPI +ScsiPortFreeDeviceBase( + /*IN*/ PVOID HwDeviceExtension, + /*IN*/ PVOID MappedAddress); + +SCSIPORTAPI +ULONG +DDKAPI +ScsiPortGetBusData( + /*IN*/ PVOID DeviceExtension, + /*IN*/ ULONG BusDataType, + /*IN*/ ULONG SystemIoBusNumber, + /*IN*/ ULONG SlotNumber, + /*IN*/ PVOID Buffer, + /*IN*/ ULONG Length); + +SCSIPORTAPI +PVOID +DDKAPI +ScsiPortGetDeviceBase( + /*IN*/ PVOID HwDeviceExtension, + /*IN*/ INTERFACE_TYPE BusType, + /*IN*/ ULONG SystemIoBusNumber, + /*IN*/ SCSI_PHYSICAL_ADDRESS IoAddress, + /*IN*/ ULONG NumberOfBytes, + /*IN*/ BOOLEAN InIoSpace); + +SCSIPORTAPI +PVOID +DDKAPI +ScsiPortGetLogicalUnit( + /*IN*/ PVOID HwDeviceExtension, + /*IN*/ UCHAR PathId, + /*IN*/ UCHAR TargetId, + /*IN*/ UCHAR Lun); + +SCSIPORTAPI +SCSI_PHYSICAL_ADDRESS +DDKAPI +ScsiPortGetPhysicalAddress( + /*IN*/ PVOID HwDeviceExtension, + /*IN*/ PSCSI_REQUEST_BLOCK Srb /*OPTIONAL*/, + /*IN*/ PVOID VirtualAddress, + /*OUT*/ ULONG *Length); + +SCSIPORTAPI +PSCSI_REQUEST_BLOCK +DDKAPI +ScsiPortGetSrb( + /*IN*/ PVOID DeviceExtension, + /*IN*/ UCHAR PathId, + /*IN*/ UCHAR TargetId, + /*IN*/ UCHAR Lun, + /*IN*/ LONG QueueTag); + +SCSIPORTAPI +PVOID +DDKAPI +ScsiPortGetUncachedExtension( + /*IN*/ PVOID HwDeviceExtension, + /*IN*/ PPORT_CONFIGURATION_INFORMATION ConfigInfo, + /*IN*/ ULONG NumberOfBytes); + +SCSIPORTAPI +PVOID +DDKAPI +ScsiPortGetVirtualAddress( + /*IN*/ PVOID HwDeviceExtension, + /*IN*/ SCSI_PHYSICAL_ADDRESS PhysicalAddress); + +SCSIPORTAPI +ULONG +DDKAPI +ScsiPortInitialize( + /*IN*/ PVOID Argument1, + /*IN*/ PVOID Argument2, + /*IN*/ struct _HW_INITIALIZATION_DATA *HwInitializationData, + /*IN*/ PVOID HwContext /*OPTIONAL*/); + +SCSIPORTAPI +VOID +DDKAPI +ScsiPortIoMapTransfer( + /*IN*/ PVOID HwDeviceExtension, + /*IN*/ PSCSI_REQUEST_BLOCK Srb, + /*IN*/ ULONG LogicalAddress, + /*IN*/ ULONG Length); + +SCSIPORTAPI +VOID +DDKAPI +ScsiPortLogError( + /*IN*/ PVOID HwDeviceExtension, + /*IN*/ PSCSI_REQUEST_BLOCK Srb /*OPTIONAL*/, + /*IN*/ UCHAR PathId, + /*IN*/ UCHAR TargetId, + /*IN*/ UCHAR Lun, + /*IN*/ ULONG ErrorCode, + /*IN*/ ULONG UniqueId); + +SCSIPORTAPI +VOID +DDKAPI +ScsiPortMoveMemory( + /*IN*/ PVOID WriteBuffer, + /*IN*/ PVOID ReadBuffer, + /*IN*/ ULONG Length); + +SCSIPORTAPI +VOID +DDKCDECLAPI +ScsiPortNotification( + /*IN*/ SCSI_NOTIFICATION_TYPE NotificationType, + /*IN*/ PVOID HwDeviceExtension, + /*IN*/ ...); + +SCSIPORTAPI +VOID +DDKAPI +ScsiPortQuerySystemTime( + /*OUT*/ PLARGE_INTEGER CurrentTime); + +SCSIPORTAPI +VOID +DDKAPI +ScsiPortReadPortBufferUchar( + /*IN*/ PUCHAR Port, + /*IN*/ PUCHAR Buffer, + /*IN*/ ULONG Count); + +SCSIPORTAPI +VOID +DDKAPI +ScsiPortReadPortBufferUlong( + /*IN*/ PULONG Port, + /*IN*/ PULONG Buffer, + /*IN*/ ULONG Count); + +SCSIPORTAPI +VOID +DDKAPI +ScsiPortReadPortBufferUshort( + /*IN*/ PUSHORT Port, + /*IN*/ PUSHORT Buffer, + /*IN*/ ULONG Count); + +SCSIPORTAPI +UCHAR +DDKAPI +ScsiPortReadPortUchar( + /*IN*/ PUCHAR Port); + +SCSIPORTAPI +ULONG +DDKAPI +ScsiPortReadPortUlong( + /*IN*/ PULONG Port); + +SCSIPORTAPI +USHORT +DDKAPI +ScsiPortReadPortUshort( + /*IN*/ PUSHORT Port); + +SCSIPORTAPI +VOID +DDKAPI +ScsiPortReadRegisterBufferUchar( + /*IN*/ PUCHAR Register, + /*IN*/ PUCHAR Buffer, + /*IN*/ ULONG Count); + +SCSIPORTAPI +VOID +DDKAPI +ScsiPortReadRegisterBufferUlong( + /*IN*/ PULONG Register, + /*IN*/ PULONG Buffer, + /*IN*/ ULONG Count); + +SCSIPORTAPI +VOID +DDKAPI +ScsiPortReadRegisterBufferUshort( + /*IN*/ PUSHORT Register, + /*IN*/ PUSHORT Buffer, + /*IN*/ ULONG Count); + +SCSIPORTAPI +UCHAR +DDKAPI +ScsiPortReadRegisterUchar( + /*IN*/ PUCHAR Register); + +SCSIPORTAPI +ULONG +DDKAPI +ScsiPortReadRegisterUlong( + /*IN*/ PULONG Register); + +SCSIPORTAPI +USHORT +DDKAPI +ScsiPortReadRegisterUshort( + /*IN*/ PUSHORT Register); + +SCSIPORTAPI +ULONG +DDKAPI +ScsiPortSetBusDataByOffset( + /*IN*/ PVOID DeviceExtension, + /*IN*/ ULONG BusDataType, + /*IN*/ ULONG SystemIoBusNumber, + /*IN*/ ULONG SlotNumber, + /*IN*/ PVOID Buffer, + /*IN*/ ULONG Offset, + /*IN*/ ULONG Length); + +SCSIPORTAPI +VOID +DDKAPI +ScsiPortStallExecution( + /*IN*/ ULONG Delay); + +SCSIPORTAPI +BOOLEAN +DDKAPI +ScsiPortValidateRange( + /*IN*/ PVOID HwDeviceExtension, + /*IN*/ INTERFACE_TYPE BusType, + /*IN*/ ULONG SystemIoBusNumber, + /*IN*/ SCSI_PHYSICAL_ADDRESS IoAddress, + /*IN*/ ULONG NumberOfBytes, + /*IN*/ BOOLEAN InIoSpace); + +SCSIPORTAPI +VOID +DDKAPI +ScsiPortWritePortBufferUchar( + /*IN*/ PUCHAR Port, + /*IN*/ PUCHAR Buffer, + /*IN*/ ULONG Count); + +SCSIPORTAPI +VOID +DDKAPI +ScsiPortWritePortBufferUlong( + /*IN*/ PULONG Port, + /*IN*/ PULONG Buffer, + /*IN*/ ULONG Count); + +SCSIPORTAPI +VOID +DDKAPI +ScsiPortWritePortBufferUshort( + /*IN*/ PUSHORT Port, + /*IN*/ PUSHORT Buffer, + /*IN*/ ULONG Count); + +SCSIPORTAPI +VOID +DDKAPI +ScsiPortWritePortUchar( + /*IN*/ PUCHAR Port, + /*IN*/ UCHAR Value); + +SCSIPORTAPI +VOID +DDKAPI +ScsiPortWritePortUlong( + /*IN*/ PULONG Port, + /*IN*/ ULONG Value); + +SCSIPORTAPI +VOID +DDKAPI +ScsiPortWritePortUshort( + /*IN*/ PUSHORT Port, + /*IN*/ USHORT Value); + +SCSIPORTAPI +VOID +DDKAPI +ScsiPortWriteRegisterBufferUchar( + /*IN*/ PUCHAR Register, + /*IN*/ PUCHAR Buffer, + /*IN*/ ULONG Count); + +SCSIPORTAPI +VOID +DDKAPI +ScsiPortWriteRegisterBufferUlong( + /*IN*/ PULONG Register, + /*IN*/ PULONG Buffer, + /*IN*/ ULONG Count); + +SCSIPORTAPI +VOID +DDKAPI +ScsiPortWriteRegisterBufferUshort( + /*IN*/ PUSHORT Register, + /*IN*/ PUSHORT Buffer, + /*IN*/ ULONG Count); + +SCSIPORTAPI +VOID +DDKAPI +ScsiPortWriteRegisterUchar( + /*IN*/ PUCHAR Register, + /*IN*/ ULONG Value); + +SCSIPORTAPI +VOID +DDKAPI +ScsiPortWriteRegisterUlong( + /*IN*/ PULONG Register, + /*IN*/ ULONG Value); + +SCSIPORTAPI +VOID +DDKAPI +ScsiPortWriteRegisterUshort( + /*IN*/ PUSHORT Register, + /*IN*/ USHORT Value); + +SCSIPORTAPI +VOID +DDKCDECLAPI +ScsiDebugPrint( + /*IN*/ ULONG DebugPrintLevel, + /*IN*/ PCCHAR DebugMessage, + /*IN*/ ...); + +#ifdef __cplusplus +} +#endif + +#endif /* __SRB_H */