IOUSBMassStorageUFISubclass.h [plain text]
#ifndef _IOKIT_IOUSBMASSSTORAGEUFISUBCLASS_H
#define _IOKIT_IOUSBMASSSTORAGEUFISUBCLASS_H
#include <IOKit/usb/IOUSBMassStorageClass.h>
#include <IOKit/scsi/IOSCSIPrimaryCommandsDevice.h>
#pragma mark -
#pragma mark IOUSBMassStorageUFIDevice declaration
class IOUSBMassStorageUFIDevice : public IOSCSIPrimaryCommandsDevice
{
OSDeclareDefaultStructors(IOUSBMassStorageUFIDevice)
private:
static void AsyncReadWriteComplete( SCSITaskIdentifier completedTask );
protected:
struct IOUSBMassStorageUFIDeviceExpansionData
{
};
IOUSBMassStorageUFIDeviceExpansionData *fIOUSBMassStorageUFIDeviceReserved;
bool fMediumPresent;
UInt32 fMediumBlockSize;
UInt32 fMediumBlockCount;
bool fMediumIsWriteProtected;
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 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 DetermineMediumCapacity(
UInt64 * blockSize,
UInt64 * blockCount );
virtual bool DetermineMediumWriteProtectState( void );
virtual void PollForMediaRemoval( void );
virtual UInt32 GetInitialPowerState ( void );
virtual void InitializePowerManagement ( IOService * provider );
virtual void HandlePowerChange ( void );
virtual void HandleCheckPowerState ( void );
virtual void TicklePowerManager ( void );
virtual UInt32 GetNumberOfPowerStateTransitions ( 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 );
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 FormatMedium(
UInt64 blockCount,
UInt64 blockSize );
virtual UInt32 GetFormatCapacities(
UInt64 * capacities,
UInt32 capacitiesMaxCount ) const;
virtual UInt64 ReportDeviceMaxBlocksReadTransfer( void );
virtual UInt64 ReportDeviceMaxBlocksWriteTransfer( void );
virtual UInt64 ReportMediumBlockSize( void );
virtual UInt64 ReportMediumTotalBlockCount( void );
virtual bool ReportMediumWriteProtection( void );
virtual char * GetVendorString( void );
virtual char * GetProductString( void );
virtual char * GetRevisionString( void );
OSDictionary * GetProtocolCharacteristicsDictionary ( void );
OSDictionary * GetDeviceCharacteristicsDictionary ( void );
protected:
bool IsParameterValid(
SCSICmdField1Byte param,
SCSICmdField1Byte mask );
bool IsParameterValid(
SCSICmdField2Byte param,
SCSICmdField2Byte mask );
bool IsParameterValid(
SCSICmdField4Byte param,
SCSICmdField4Byte mask );
virtual bool FORMAT_UNIT(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
IOByteCount defectListSize,
SCSICmdField1Byte TRACK_NUMBER,
SCSICmdField2Byte INTERLEAVE );
virtual bool INQUIRY(
SCSITaskIdentifier request,
IOMemoryDescriptor *dataBuffer,
SCSICmdField1Byte PAGE_OR_OPERATION_CODE,
SCSICmdField1Byte ALLOCATION_LENGTH );
virtual bool MODE_SELECT_10(
SCSITaskIdentifier request,
IOMemoryDescriptor *dataBuffer,
SCSICmdField1Bit PF,
SCSICmdField1Bit SP,
SCSICmdField2Byte PARAMETER_LIST_LENGTH );
virtual bool MODE_SENSE_10(
SCSITaskIdentifier request,
IOMemoryDescriptor *dataBuffer,
SCSICmdField1Bit DBD,
SCSICmdField2Bit PC,
SCSICmdField6Bit PAGE_CODE,
SCSICmdField2Byte PARAMETER_LIST_LENGTH );
virtual bool PREVENT_ALLOW_MEDIUM_REMOVAL(
SCSITaskIdentifier request,
SCSICmdField1Bit PREVENT );
virtual bool READ_10(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
UInt32 blockSize,
SCSICmdField1Bit DPO,
SCSICmdField1Bit FUA,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField2Byte TRANSFER_LENGTH );
virtual bool READ_12(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
UInt32 blockSize,
SCSICmdField1Bit DPO,
SCSICmdField1Bit FUA,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField4Byte TRANSFER_LENGTH );
virtual bool READ_CAPACITY(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField1Bit PMI );
virtual bool READ_FORMAT_CAPACITIES(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
SCSICmdField2Byte ALLOCATION_LENGTH );
virtual bool REQUEST_SENSE(
SCSITaskIdentifier request,
IOMemoryDescriptor *dataBuffer,
SCSICmdField1Byte ALLOCATION_LENGTH );
virtual bool REZERO_UNIT(
SCSITaskIdentifier request );
virtual bool SEEK(
SCSITaskIdentifier request,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS );
virtual bool SEND_DIAGNOSTICS(
SCSITaskIdentifier request,
SCSICmdField1Bit PF,
SCSICmdField1Bit SELF_TEST,
SCSICmdField1Bit DEF_OFL,
SCSICmdField1Bit UNIT_OFL );
virtual bool START_STOP_UNIT(
SCSITaskIdentifier request,
SCSICmdField1Bit IMMED,
SCSICmdField1Bit LOEJ,
SCSICmdField1Bit START );
virtual bool TEST_UNIT_READY(
SCSITaskIdentifier request );
virtual bool VERIFY(
SCSITaskIdentifier request,
SCSICmdField1Bit DPO,
SCSICmdField1Bit BYTCHK,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField2Byte VERIFICATION_LENGTH );
virtual bool WRITE_10(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
UInt32 blockSize,
SCSICmdField1Bit DPO,
SCSICmdField1Bit FUA,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField2Byte TRANSFER_LENGTH );
virtual bool WRITE_12(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
UInt32 blockSize,
SCSICmdField1Bit DPO,
SCSICmdField1Bit EBP,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField4Byte TRANSFER_LENGTH );
virtual bool WRITE_AND_VERIFY(
SCSITaskIdentifier request,
IOMemoryDescriptor * dataBuffer,
UInt32 blockSize,
SCSICmdField1Bit DPO,
SCSICmdField1Bit BYTCHK,
SCSICmdField1Bit RELADR,
SCSICmdField4Byte LOGICAL_BLOCK_ADDRESS,
SCSICmdField2Byte TRANSFER_LENGTH );
};
#pragma mark -
#pragma mark IOUSBMassStorageUFISubclass declaration
class IOUSBMassStorageUFISubclass : public IOUSBMassStorageClass
{
OSDeclareDefaultStructors(IOUSBMassStorageUFISubclass)
protected:
virtual bool BeginProvidedServices( void );
virtual bool EndProvidedServices( void );
};
#endif _IOKIT_IOUSBMASSSTORAGEUFISUBCLASS_H