IOSCSIBlockCommandsDevice.h [plain text]
#ifndef _IOKIT_IO_SCSI_BLOCK_COMMANDS_DEVICE_H_
#define _IOKIT_IO_SCSI_BLOCK_COMMANDS_DEVICE_H_
#if defined(KERNEL) && defined(__cplusplus)
#include <IOKit/IOLib.h>
#include <IOKit/IOMemoryDescriptor.h>
#include <IOKit/storage/IOStorage.h>
#include <IOKit/scsi-commands/SCSIBlockCommands.h>
#include <IOKit/scsi-commands/IOSCSIPrimaryCommandsDevice.h>
enum
{
kSBCPowerStateSystemSleep = 0,
kSBCPowerStateSleep = 1,
kSBCPowerStateStandby = 2,
kSBCPowerStateIdle = 3,
kSBCPowerStateActive = 4,
kSBCNumPowerStates = 5
};
class IOSCSIBlockCommandsDevice : public IOSCSIPrimaryCommandsDevice
{
OSDeclareAbstractStructors ( IOSCSIBlockCommandsDevice )
private:
SCSIBlockCommands *fSCSIBlockCommandObject;
SCSIBlockCommands *GetSCSIBlockCommandObject( void );
static void AsyncReadWriteComplete( SCSITaskIdentifier completedTask );
protected:
struct IOSCSIBlockCommandsDeviceExpansionData { };
IOSCSIBlockCommandsDeviceExpansionData *fIOSCSIBlockCommandsDeviceReserved;
UInt8 fANSIVersion;
bool fMediaIsRemovable;
bool fMediumPresent;
UInt32 fMediumBlockSize;
UInt32 fMediumBlockCount;
bool fMediumIsWriteProtected;
bool fMediumRemovalPrevented;
bool fKnownManualEject;
thread_call_t fPollingThread;
UInt32 fPollingMode;
enum
{
kPollingMode_Suspended = 0,
kPollingMode_NewMedia = 1,
kPollingMode_MediaRemoval = 2
};
virtual bool InitializeDeviceSupport( void );
virtual void StartDeviceSupport( void );
virtual void SuspendDeviceSupport( void );
virtual void ResumeDeviceSupport( void );
virtual void StopDeviceSupport( void );
virtual void TerminateDeviceSupport( void );
virtual SCSIPrimaryCommands * GetSCSIPrimaryCommandObject ( void );
virtual bool CreateCommandSetObjects ( void );
virtual void FreeCommandSetObjects ( void );
virtual bool ClearNotReadyStatus( void );
virtual void CreateStorageServiceNub( void );
virtual bool DetermineDeviceCharacteristics( void );
virtual void ProcessPoll( void );
virtual void EnablePolling( void );
virtual void DisablePolling( void );
virtual void PollForNewMedia( void );
virtual bool DetermineMediaPresence( void );
virtual bool PreventMediumRemoval( void );
virtual bool DetermineMediumCapacity(
UInt64 * blockSize,
UInt64 * blockCount );
virtual bool DetermineMediumWriteProtectState( void );
virtual void PollForMediaRemoval( void );
virtual void SetMediumCharacteristics(
UInt32 blockSize,
UInt32 blockCount );
virtual void ResetMediumCharacteristics( void );
virtual IOReturn IssueRead(
IOMemoryDescriptor * buffer,
UInt64 startBlock,
UInt64 blockCount );
virtual IOReturn IssueRead(
IOMemoryDescriptor * buffer,
UInt64 startBlock,
UInt64 blockCount,
void * clientData );
virtual IOReturn IssueWrite(
IOMemoryDescriptor * buffer,
UInt64 startBlock,
UInt64 blockCount );
virtual IOReturn IssueWrite(
IOMemoryDescriptor * buffer,
UInt64 startBlock,
UInt64 blockCount,
void * clientData );
virtual void InitializePowerManagement( IOService * provider );
virtual UInt32 GetInitialPowerState( void );
virtual UInt32 GetNumberOfPowerStateTransitions( void );
virtual void TicklePowerManager( void );
virtual void HandlePowerChange( void );
virtual void HandleCheckPowerState( void );
virtual bool VerifyMediumPresence( void );
public:
static void sProcessPoll( void * pdtDriver, void * refCon );
virtual IOReturn SyncReadWrite(
IOMemoryDescriptor * buffer,
UInt64 startBlock,
UInt64 blockCount,
UInt64 blockSize );
virtual IOReturn AsyncReadWrite(
IOMemoryDescriptor * buffer,
UInt64 startBlock,
UInt64 blockCount,
UInt64 blockSize,
void * clientData );
virtual IOReturn EjectTheMedium( void );
virtual IOReturn LockUnlockMedium( bool doLock );
virtual IOReturn SynchronizeCache( void );
virtual IOReturn FormatMedium(
UInt64 blockCount,
UInt64 blockSize );
virtual UInt32 GetFormatCapacities(
UInt64 * capacities,
UInt32 capacitiesMaxCount ) const;
virtual UInt64 ReportDeviceMaxBlocksReadTransfer( void );
virtual UInt64 ReportDeviceMaxBlocksWriteTransfer( void );
virtual bool ReportDeviceMediaRemovability( void );
virtual UInt64 ReportMediumBlockSize( void );
virtual UInt64 ReportMediumTotalBlockCount( void );
virtual bool ReportMediumWriteProtection( void );
virtual bool ERASE_10(
SCSITaskIdentifier request,
SCSICmdField1Bit ERA,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField2Byte TRANSFER_LENGTH,
SCSICmdField1Byte CONTROL );
virtual bool ERASE_12(
SCSITaskIdentifier request,
SCSICmdField1Bit ERA,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField4Byte TRANSFER_LENGTH,
SCSICmdField1Byte CONTROL );
virtual bool FORMAT_UNIT(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
IOByteCount defectListSize,
SCSICmdField1Bit FMTDATA,
SCSICmdField1Bit CMPLST,
SCSICmdField3Bit DEFECT_LIST_FORMAT,
SCSICmdField1Byte VENDOR_SPECIFIC,
SCSICmdField2Byte INTERLEAVE,
SCSICmdField1Byte CONTROL );
virtual bool LOCK_UNLOCK_CACHE(
SCSITaskIdentifier request,
SCSICmdField1Bit LOCK,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField2Byte NUMBER_OF_BLOCKS,
SCSICmdField1Byte CONTROL );
virtual bool MEDIUM_SCAN(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
SCSICmdField1Bit WBS,
SCSICmdField1Bit ASA,
SCSICmdField1Bit PSD,
SCSICmdField1Bit PRA,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField2Byte PARAMETER_LIST_LENGTH,
SCSICmdField1Byte CONTROL );
virtual bool PREFETCH(
SCSITaskIdentifier request,
SCSICmdField1Bit IMMED,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField2Byte TRANSFER_LENGTH,
SCSICmdField1Byte CONTROL );
virtual bool READ_6(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
UInt32 blockSize,
SCSICmdField21Bit LOGICAL_BLOCK_ADDRESS,
SCSICmdField1Byte TRANSFER_LENGTH,
SCSICmdField1Byte CONTROL );
virtual bool READ_10(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
UInt32 blockSize,
SCSICmdField1Bit DPO,
SCSICmdField1Bit FUA,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField2Byte TRANSFER_LENGTH,
SCSICmdField1Byte CONTROL );
virtual bool READ_12(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
UInt32 blockSize,
SCSICmdField1Bit DPO,
SCSICmdField1Bit FUA,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField4Byte TRANSFER_LENGTH,
SCSICmdField1Byte CONTROL );
virtual bool READ_CAPACITY(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField1Bit PMI,
SCSICmdField1Byte CONTROL );
virtual bool READ_DEFECT_DATA_10(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
SCSICmdField1Bit PLIST,
SCSICmdField1Bit GLIST,
SCSICmdField3Bit DEFECT_LIST_FORMAT,
SCSICmdField2Byte ALLOCATION_LENGTH,
SCSICmdField1Byte CONTROL );
virtual bool READ_DEFECT_DATA_12(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
SCSICmdField1Bit PLIST,
SCSICmdField1Bit GLIST,
SCSICmdField3Bit DEFECT_LIST_FORMAT,
SCSICmdField4Byte ALLOCATION_LENGTH,
SCSICmdField1Byte CONTROL );
virtual bool READ_GENERATION(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField1Byte ALLOCATION_LENGTH,
SCSICmdField1Byte CONTROL );
virtual bool READ_LONG(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
SCSICmdField1Bit CORRCT,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField2Byte BYTE_TRANSFER_LENGTH,
SCSICmdField1Byte CONTROL );
virtual bool READ_UPDATED_BLOCK_10(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
SCSICmdField1Bit DPO,
SCSICmdField1Bit FUA,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField1Bit LATEST,
SCSICmdField15Bit GENERATION_ADDRESS,
SCSICmdField1Byte CONTROL );
virtual bool REASSIGN_BLOCKS(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
SCSICmdField1Byte CONTROL );
virtual bool REBUILD(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
SCSICmdField1Bit DPO,
SCSICmdField1Bit FUA,
SCSICmdField1Bit INTDATA,
SCSICmdField2Bit PORT_CONTROL,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField4Byte REBUILD_LENGTH,
SCSICmdField4Byte PARAMETER_LIST_LENGTH,
SCSICmdField1Byte CONTROL );
virtual bool REGENERATE(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
SCSICmdField1Bit DPO,
SCSICmdField1Bit FUA,
SCSICmdField1Bit INTDATA,
SCSICmdField2Bit PORT_CONTROL,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField4Byte REBUILD_LENGTH,
SCSICmdField4Byte PARAMETER_LIST_LENGTH,
SCSICmdField1Byte CONTROL );
virtual bool REZERO_UNIT(
SCSITaskIdentifier request,
SCSICmdField1Byte CONTROL );
virtual bool SEARCH_DATA_EQUAL_10(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
SCSICmdField1Bit INVERT,
SCSICmdField1Bit SPNDAT,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField2Byte NUMBER_OF_BLOCKS_TO_SEARCH,
SCSICmdField1Byte CONTROL );
virtual bool SEARCH_DATA_HIGH_10(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
SCSICmdField1Bit INVERT,
SCSICmdField1Bit SPNDAT,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField2Byte NUMBER_OF_BLOCKS_TO_SEARCH,
SCSICmdField1Byte CONTROL );
virtual bool SEARCH_DATA_LOW_10(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
SCSICmdField1Bit INVERT,
SCSICmdField1Bit SPNDAT,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField2Byte NUMBER_OF_BLOCKS_TO_SEARCH,
SCSICmdField1Byte CONTROL );
virtual bool SEEK_6(
SCSITaskIdentifier request,
SCSICmdField21Bit LOGICAL_BLOCK_ADDRESS,
SCSICmdField1Byte CONTROL );
virtual bool SEEK_10(
SCSITaskIdentifier request,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField1Byte CONTROL );
virtual bool SET_LIMITS_10(
SCSITaskIdentifier request,
SCSICmdField1Bit RDINH,
SCSICmdField1Bit WRINH,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField2Byte NUMBER_OF_BLOCKS,
SCSICmdField1Byte CONTROL );
virtual bool SET_LIMITS_12(
SCSITaskIdentifier request,
SCSICmdField1Bit RDINH,
SCSICmdField1Bit WRINH,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField4Byte NUMBER_OF_BLOCKS,
SCSICmdField1Byte CONTROL );
virtual bool START_STOP_UNIT(
SCSITaskIdentifier request,
SCSICmdField1Bit IMMED,
SCSICmdField4Bit POWER_CONDITIONS,
SCSICmdField1Bit LOEJ,
SCSICmdField1Bit START,
SCSICmdField1Byte CONTROL );
virtual bool SYNCHRONIZE_CACHE(
SCSITaskIdentifier request,
SCSICmdField1Bit IMMED,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField2Byte NUMBER_OF_BLOCKS,
SCSICmdField1Byte CONTROL );
virtual bool UPDATE_BLOCK(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField1Byte CONTROL );
virtual bool VERIFY_10(
SCSITaskIdentifier request,
SCSICmdField1Bit DPO,
SCSICmdField1Bit BLKVFY,
SCSICmdField1Bit BYTCHK,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField2Byte VERIFICATION_LENGTH,
SCSICmdField1Byte CONTROL );
virtual bool VERIFY_12(
SCSITaskIdentifier request,
SCSICmdField1Bit DPO,
SCSICmdField1Bit BLKVFY,
SCSICmdField1Bit BYTCHK,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField4Byte VERIFICATION_LENGTH,
SCSICmdField1Byte CONTROL );
virtual bool WRITE_6(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
UInt32 blockSize,
SCSICmdField2Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField1Byte TRANSFER_LENGTH,
SCSICmdField1Byte CONTROL );
virtual bool WRITE_10(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
UInt32 blockSize,
SCSICmdField1Bit DPO,
SCSICmdField1Bit FUA,
SCSICmdField1Bit EBP,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField2Byte TRANSFER_LENGTH,
SCSICmdField1Byte CONTROL );
virtual bool WRITE_12(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
UInt32 blockSize,
SCSICmdField1Bit DPO,
SCSICmdField1Bit FUA,
SCSICmdField1Bit EBP,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField4Byte TRANSFER_LENGTH,
SCSICmdField1Byte CONTROL );
virtual bool WRITE_AND_VERIFY_10(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
UInt32 blockSize,
SCSICmdField1Bit DPO,
SCSICmdField1Bit EBP,
SCSICmdField1Bit BYTCHK,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField2Byte TRANSFER_LENGTH,
SCSICmdField1Byte CONTROL );
virtual bool WRITE_AND_VERIFY_12(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
UInt32 blockSize,
SCSICmdField1Bit DPO,
SCSICmdField1Bit EBP,
SCSICmdField1Bit BYTCHK,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField4Byte TRANSFER_LENGTH,
SCSICmdField1Byte CONTROL );
virtual bool WRITE_LONG(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField2Byte TRANSFER_LENGTH,
SCSICmdField1Byte CONTROL );
virtual bool WRITE_SAME(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
SCSICmdField1Bit PBDATA,
SCSICmdField1Bit LBDATA,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField2Byte TRANSFER_LENGTH,
SCSICmdField1Byte CONTROL );
virtual bool XDREAD(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField2Byte TRANSFER_LENGTH,
SCSICmdField1Byte CONTROL );
virtual bool XDWRITE(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
SCSICmdField1Bit DPO,
SCSICmdField1Bit FUA,
SCSICmdField1Bit DISABLE_WRITE,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField2Byte TRANSFER_LENGTH,
SCSICmdField1Byte CONTROL );
virtual bool XDWRITE_EXTENDED(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
SCSICmdField1Bit TABLE_ADDRESS,
SCSICmdField1Bit DPO,
SCSICmdField1Bit FUA,
SCSICmdField1Bit DISABLE_WRITE,
SCSICmdField2Bit PORT_CONTROL,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField4Byte SECONDARY_BLOCK_ADDRESS,
SCSICmdField4Byte TRANSFER_LENGTH,
SCSICmdField1Byte SECONDARY_ADDRESS,
SCSICmdField1Byte CONTROL );
virtual bool XPWRITE(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
SCSICmdField1Bit DPO,
SCSICmdField1Bit FUA,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField2Byte TRANSFER_LENGTH,
SCSICmdField1Byte CONTROL );
private:
OSMetaClassDeclareReservedUnused( IOSCSIBlockCommandsDevice, 1 );
OSMetaClassDeclareReservedUnused( IOSCSIBlockCommandsDevice, 2 );
OSMetaClassDeclareReservedUnused( IOSCSIBlockCommandsDevice, 3 );
OSMetaClassDeclareReservedUnused( IOSCSIBlockCommandsDevice, 4 );
OSMetaClassDeclareReservedUnused( IOSCSIBlockCommandsDevice, 5 );
OSMetaClassDeclareReservedUnused( IOSCSIBlockCommandsDevice, 6 );
OSMetaClassDeclareReservedUnused( IOSCSIBlockCommandsDevice, 7 );
OSMetaClassDeclareReservedUnused( IOSCSIBlockCommandsDevice, 8 );
OSMetaClassDeclareReservedUnused( IOSCSIBlockCommandsDevice, 9 );
OSMetaClassDeclareReservedUnused( IOSCSIBlockCommandsDevice, 10 );
OSMetaClassDeclareReservedUnused( IOSCSIBlockCommandsDevice, 11 );
OSMetaClassDeclareReservedUnused( IOSCSIBlockCommandsDevice, 12 );
OSMetaClassDeclareReservedUnused( IOSCSIBlockCommandsDevice, 13 );
OSMetaClassDeclareReservedUnused( IOSCSIBlockCommandsDevice, 14 );
OSMetaClassDeclareReservedUnused( IOSCSIBlockCommandsDevice, 15 );
OSMetaClassDeclareReservedUnused( IOSCSIBlockCommandsDevice, 16 );
};
#endif
#endif