SCSIParallelTask.h [plain text]
#ifndef __SCSI_PARALLEL_TASK_H__
#define __SCSI_PARALLEL_TASK_H__
#include <IOKit/IODMACommand.h>
#include <IOKit/scsi/spi/IOSCSIParallelInterfaceController.h>
#include <IOKit/scsi/SCSITask.h>
#include <IOKit/scsi/SCSITaskDefinition.h>
class SCSIParallelTask: public IODMACommand
{
OSDeclareDefaultStructors ( SCSIParallelTask )
public:
static SCSIParallelTask * Create ( UInt32 sizeOfHBAData, UInt64 alignmentMask );
void free ( void );
bool InitWithSize ( UInt32 sizeOfHBAData, UInt64 alignmentMask );
void ResetForNewTask ( void );
bool SetSCSITaskIdentifier ( SCSITaskIdentifier scsiRequest );
SCSITaskIdentifier GetSCSITaskIdentifier ( void );
bool SetTargetIdentifier ( SCSITargetIdentifier theTargetID );
SCSITargetIdentifier GetTargetIdentifier ( void );
bool SetDevice ( IOSCSIParallelInterfaceDevice * device );
IOSCSIParallelInterfaceDevice * GetDevice ( void );
SCSILogicalUnitNumber GetLogicalUnitNumber ( void );
SCSITaskAttribute GetTaskAttribute ( void );
SCSITaggedTaskIdentifier GetTaggedTaskIdentifier ( void );
UInt8 GetCommandDescriptorBlockSize ( void );
bool GetCommandDescriptorBlock (
SCSICommandDescriptorBlock * cdbData );
UInt8 GetDataTransferDirection ( void );
UInt64 GetRequestedDataTransferCount ( void );
UInt64 GetRealizedDataTransferCount ( void );
bool SetRealizedDataTransferCount ( UInt64 realizedTransferCountInBytes );
void IncrementRealizedDataTransferCount ( UInt64 realizedTransferCountInBytes );
IOMemoryDescriptor * GetDataBuffer ( void );
UInt64 GetDataBufferOffset ( void );
UInt32 GetTimeoutDuration ( void );
bool SetAutoSenseData ( SCSI_Sense_Data * senseData, UInt8 senseDataSize );
bool GetAutoSenseData ( SCSI_Sense_Data * receivingBuffer, UInt8 senseDataSize );
UInt8 GetAutoSenseDataSize ( void );
UInt64 GetAutosenseRealizedDataCount ( void );
void SetSCSIParallelFeatureNegotiation ( SCSIParallelFeature requestedFeature,
SCSIParallelFeatureRequest newRequest );
SCSIParallelFeatureRequest GetSCSIParallelFeatureNegotiation ( SCSIParallelFeature requestedFeature );
UInt64 GetSCSIParallelFeatureNegotiationCount ( void );
void SetSCSIParallelFeatureNegotiationResult ( SCSIParallelFeature requestedFeature,
SCSIParallelFeatureResult newResult );
SCSIParallelFeatureResult GetSCSIParallelFeatureNegotiationResult ( SCSIParallelFeature requestedFeature );
UInt64 GetSCSIParallelFeatureNegotiationResultCount ( void );
void SetControllerTaskIdentifier ( UInt64 newIdentifier );
UInt64 GetControllerTaskIdentifier ( void );
UInt32 GetHBADataSize ( void );
void * GetHBADataPointer ( void );
IOMemoryDescriptor * GetHBADataDescriptor ( void );
SCSIParallelTask * GetPreviousTaskInList ( void );
void SetPreviousTaskInList ( SCSIParallelTask * newPrev );
SCSIParallelTask * GetNextTaskInList ( void );
void SetNextTaskInList( SCSIParallelTask * newNext );
SCSIParallelTask * GetPreviousResendTaskInList ( void );
void SetPreviousResendTaskInList ( SCSIParallelTask * newPrev );
SCSIParallelTask * GetNextResendTaskInList ( void );
void SetNextResendTaskInList ( SCSIParallelTask * newNext );
SCSIParallelTask * GetNextTimeoutTaskInList ( void );
void SetNextTimeoutTaskInList ( SCSIParallelTask * newNext );
AbsoluteTime GetTimeoutDeadline ( void );
void SetTimeoutDeadline ( AbsoluteTime time );
inline IOReturn SetBuffer ( IOMemoryDescriptor * buffer )
{
return setMemoryDescriptor ( buffer, false );
}
private:
SCSITargetIdentifier fTargetID;
IOSCSIParallelInterfaceDevice * fDevice;
SCSIParallelFeatureRequest fSCSIParallelFeatureRequest[kSCSIParallelFeature_TotalFeatureCount];
SCSIParallelFeatureResult fSCSIParallelFeatureResult[kSCSIParallelFeature_TotalFeatureCount];
UInt64 fSCSIParallelFeatureRequestCount;
UInt64 fSCSIParallelFeatureRequestResultCount;
SCSITaskIdentifier fSCSITask;
UInt64 fControllerTaskIdentifier;
UInt32 fHBADataSize;
void * fHBAData;
IOMemoryDescriptor * fHBADataDescriptor;
UInt64 fRealizedTransferCount;
SCSIParallelTask * fPreviousParallelTask;
SCSIParallelTask * fNextParallelTask;
SCSIParallelTask * fPreviousResendTask;
SCSIParallelTask * fNextResendTask;
SCSIParallelTask * fNextTimeoutTask;
AbsoluteTime fTimeoutDeadline;
};
#endif