📄 srb.h
字号:
/* * 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 <chorns@users.sourceforge.net> * * 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 __cplusplusextern "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)#endiftypedef 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 0xF0000000typedef 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 0x80typedef 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 */#endiftypedef 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 3typedef 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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -