IOSCSIReducedBlockCommandsDevice.h [plain text]
#ifndef _IOKIT_IO_SCSI_REDUCED_BLOCK_COMMANDS_DEVICE_H_
#define _IOKIT_IO_SCSI_REDUCED_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/SCSIReducedBlockCommands.h>
#include <IOKit/scsi-commands/IOSCSIPrimaryCommandsDevice.h>
enum
{
kRBCPowerStateSystemSleep = 0,
kRBCPowerStateSleep = 1,
kRBCPowerStateStandby = 2,
kRBCPowerStateIdle = 3,
kRBCPowerStateActive = 4,
kRBCNumPowerStates = 5
};
class IOSCSIReducedBlockCommandsDevice : public IOSCSIPrimaryCommandsDevice
{
OSDeclareAbstractStructors ( IOSCSIReducedBlockCommandsDevice );
private:
SCSIReducedBlockCommands * fSCSIReducedBlockCommandObject;
SCSIReducedBlockCommands * GetSCSIReducedBlockCommandObject ( void );
static void AsyncReadWriteComplete ( SCSITaskIdentifier completedTask );
protected:
struct IOSCSIReducedBlockCommandsDeviceExpansionData { };
IOSCSIReducedBlockCommandsDeviceExpansionData *fIOSCSIReducedBlockCommandsDeviceReserved;
bool fMediaChanged;
bool fMediaPresent;
UInt32 fMediaBlockSize;
UInt32 fMediaBlockCount;
bool fMediaIsRemovable;
bool fMediaIsWriteProtected;
thread_call_t fPollingThread;
virtual void CreateStorageServiceNub ( void );
virtual bool DetermineDeviceCharacteristics ( void );
virtual void PollForMedia ( void );
virtual void EnablePolling ( void );
virtual void DisablePolling ( void );
virtual void CheckWriteProtection ( void );
virtual void SetMediaCharacteristics ( UInt32 blockSize, UInt32 blockCount );
virtual void ResetMediaCharacteristics ( void );
virtual bool ClearNotReadyStatus ( void );
virtual IOReturn IssueRead ( IOMemoryDescriptor * buffer,
UInt64 startBlock,
UInt64 blockCount );
virtual IOReturn IssueWrite ( 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,
void * clientData );
virtual SCSIPrimaryCommands * GetSCSIPrimaryCommandObject ( void );
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 CheckMediaPresence ( void );
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 bool CreateCommandSetObjects ( void );
virtual void FreeCommandSetObjects ( void );
public:
virtual IOReturn SyncReadWrite ( IOMemoryDescriptor * buffer,
UInt64 startBlock,
UInt64 blockCount );
virtual IOReturn AsyncReadWrite ( IOMemoryDescriptor * buffer,
UInt64 block,
UInt64 nblks,
void * clientData );
virtual IOReturn EjectTheMedia ( void );
virtual IOReturn FormatMedia ( UInt64 byteCapacity );
virtual UInt32 GetFormatCapacities ( UInt64 * capacities,
UInt32 capacitiesMaxCount ) const;
virtual IOReturn LockUnlockMedia ( bool doLock );
virtual IOReturn SynchronizeCache ( void );
virtual IOReturn ReportBlockSize ( UInt64 * blockSize );
virtual IOReturn ReportEjectability ( bool * isEjectable );
virtual IOReturn ReportLockability ( bool * isLockable );
virtual IOReturn ReportPollRequirements ( bool * pollIsRequired,
bool * pollIsExpensive );
virtual IOReturn ReportMaxReadTransfer ( UInt64 blockSize,
UInt64 * max );
virtual IOReturn ReportMaxValidBlock ( UInt64 * maxBlock );
virtual IOReturn ReportMaxWriteTransfer ( UInt64 blockSize,
UInt64 * max );
virtual IOReturn ReportMediaState ( bool * mediaPresent,
bool * changed );
virtual IOReturn ReportRemovability ( bool * isRemovable );
virtual IOReturn ReportWriteProtection( bool * isWriteProtected );
static void sPollForMedia( void * pdtDriver, void * refCon );
virtual bool FORMAT_UNIT(
SCSITaskIdentifier request,
SCSICmdField1Bit IMMED,
SCSICmdField1Bit PROGRESS,
SCSICmdField1Bit PERCENT_TIME,
SCSICmdField1Bit INCREMENT );
virtual bool INQUIRY (
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
SCSICmdField1Bit CMDDT,
SCSICmdField1Bit EVPD,
SCSICmdField1Byte PAGE_OR_OPERATION_CODE,
SCSICmdField1Byte ALLOCATION_LENGTH );
virtual bool MODE_SELECT_6(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
SCSICmdField1Bit PF,
SCSICmdField1Bit SP,
SCSICmdField1Byte PARAMETER_LIST_LENGTH );
virtual bool MODE_SENSE_6(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
SCSICmdField1Bit DBD,
SCSICmdField2Bit PC,
SCSICmdField6Bit PAGE_CODE,
SCSICmdField1Byte ALLOCATION_LENGTH );
virtual bool PERSISTENT_RESERVE_IN(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
SCSICmdField5Bit SERVICE_ACTION,
SCSICmdField2Byte ALLOCATION_LENGTH );
virtual bool PERSISTENT_RESERVE_OUT(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
SCSICmdField5Bit SERVICE_ACTION,
SCSICmdField4Bit SCOPE,
SCSICmdField4Bit TYPE );
virtual bool PREVENT_ALLOW_MEDIUM_REMOVAL(
SCSITaskIdentifier request,
SCSICmdField2Bit PREVENT );
virtual bool READ_10(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
UInt32 blockSize,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField2Byte TRANSFER_LENGTH );
virtual bool READ_CAPACITY(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer );
virtual bool RELEASE_6(
SCSITaskIdentifier request );
virtual bool REQUEST_SENSE(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
SCSICmdField1Byte ALLOCATION_LENGTH );
virtual bool RESERVE_6(
SCSITaskIdentifier request );
virtual bool START_STOP_UNIT(
SCSITaskIdentifier request,
SCSICmdField1Bit IMMED,
SCSICmdField4Bit POWER_CONDITIONS,
SCSICmdField1Bit LEOJ,
SCSICmdField1Bit START );
virtual bool SYNCHRONIZE_CACHE(
SCSITaskIdentifier request );
virtual bool TEST_UNIT_READY(
SCSITaskIdentifier request );
virtual bool VERIFY(
SCSITaskIdentifier request,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField2Byte VERIFICATION_LENGTH );
virtual bool WRITE_10(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
UInt32 blockSize,
SCSICmdField1Bit FUA,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField2Byte TRANSFER_LENGTH );
virtual bool WRITE_BUFFER(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
SCSICmdField4Bit MODE,
SCSICmdField1Byte BUFFER_ID,
SCSICmdField3Byte BUFFER_OFFSET,
SCSICmdField3Byte PARAMETER_LIST_LENGTH );
private:
OSMetaClassDeclareReservedUnused( IOSCSIReducedBlockCommandsDevice, 1 );
OSMetaClassDeclareReservedUnused( IOSCSIReducedBlockCommandsDevice, 2 );
OSMetaClassDeclareReservedUnused( IOSCSIReducedBlockCommandsDevice, 3 );
OSMetaClassDeclareReservedUnused( IOSCSIReducedBlockCommandsDevice, 4 );
OSMetaClassDeclareReservedUnused( IOSCSIReducedBlockCommandsDevice, 5 );
OSMetaClassDeclareReservedUnused( IOSCSIReducedBlockCommandsDevice, 6 );
OSMetaClassDeclareReservedUnused( IOSCSIReducedBlockCommandsDevice, 7 );
OSMetaClassDeclareReservedUnused( IOSCSIReducedBlockCommandsDevice, 8 );
OSMetaClassDeclareReservedUnused( IOSCSIReducedBlockCommandsDevice, 9 );
OSMetaClassDeclareReservedUnused( IOSCSIReducedBlockCommandsDevice, 10 );
OSMetaClassDeclareReservedUnused( IOSCSIReducedBlockCommandsDevice, 11 );
OSMetaClassDeclareReservedUnused( IOSCSIReducedBlockCommandsDevice, 12 );
OSMetaClassDeclareReservedUnused( IOSCSIReducedBlockCommandsDevice, 13 );
OSMetaClassDeclareReservedUnused( IOSCSIReducedBlockCommandsDevice, 14 );
OSMetaClassDeclareReservedUnused( IOSCSIReducedBlockCommandsDevice, 15 );
OSMetaClassDeclareReservedUnused( IOSCSIReducedBlockCommandsDevice, 16 );
};
#endif
#endif