#ifndef _SCSIPUBLIC_H
#define _SCSIPUBLIC_H
typedef struct _SCSIInquiry
{
unsigned char devType;
unsigned char devTypeMod;
unsigned char version;
unsigned char format;
unsigned char length;
unsigned char reserved5;
unsigned char reserved6;
unsigned char flags;
unsigned char vendorName[8];
unsigned char productName[16];
unsigned char productRevision[4];
unsigned char vendorSpecific[20];
unsigned char scsi3Options;
unsigned char moreReserved[39];
} SCSIInquiry;
enum
{
kSCSIDevTypeQualifierConnected = 0x00,
kSCSIDevTypeQualifierNotConnected = 0x20,
kSCSIDevTypeQualifierReserved = 0x40,
kSCSIDevTypeQualifierMissing = 0x60,
kSCSIDevTypeQualifierVendorSpecific = 0x80,
kSCSIDevTypeQualifierMask = 0xE0
};
enum
{
kSCSIDevTypeModRemovable = 0x80
};
enum _SCSIDevFlags
{
kSCSIDevCapRelAdr = 0x80,
kSCSIDevCapWBus32 = 0x40,
kSCSIDevCapWBus16 = 0x20,
kSCSIDevCapSync = 0x10,
kSCSIDevCapLinked = 0x08,
kSCSIDevCapCmdQue = 0x02,
kSCSIDevCapSftRe = 0x01
};
typedef struct _SCSISenseData
{
unsigned char errorCode;
unsigned char segmentNumber;
unsigned char senseKey;
unsigned char info[4];
unsigned char additionalSenseLength;
unsigned char reservedForCopy[4];
unsigned char additionalSenseCode;
unsigned char additionalSenseQualifier;
unsigned char fruCode;
unsigned char senseKeySpecific[2];
unsigned char additional[101];
} SCSISenseData;
enum _SCSIErrorCode
{
kSCSISenseHasLBN = 0x80,
kSCSISenseInfoValid = 0x70,
kSCSISenseInfoMask = 0x70,
kSCSISenseCurrentErr = 0x70,
kSCSISenseDeferredErr = 0x71
};
enum _SCSISenseKeyMasks
{
kSCSISenseKeyMask = 0x0F,
kSCSISenseILI = 0x20,
kSCSISenseEOM = 0x40,
kSCSISenseFileMark = 0x80
};
enum _SCSISenseKeys
{
kSCSISenseNone = 0x00,
kSCSISenseRecoveredErr = 0x01,
kSCSISenseNotReady = 0x02,
kSCSISenseMediumErr = 0x03,
kSCSISenseHardwareErr = 0x04,
kSCSISenseIllegalReq = 0x05,
kSCSISenseUnitAtn = 0x06,
kSCSISenseDataProtect = 0x07,
kSCSISenseBlankCheck = 0x08,
kSCSISenseVendorSpecific = 0x09,
kSCSISenseCopyAborted = 0x0a,
kSCSISenseAbortedCmd = 0x0b,
kSCSISenseEqual = 0x0c,
kSCSISenseVolumeOverflow = 0x0d,
kSCSISenseMiscompare = 0x0e
};
enum _SCSIStatus
{
kSCSIStatusGood = 0x00,
kSCSIStatusCheckCondition = 0x02,
kSCSIStatusConditionMet = 0x04,
kSCSIStatusBusy = 0x08,
kSCSIStatusIntermediate = 0x10,
kSCSIStatusIntermediateMet = 0x14,
kSCSIStatusReservationConfict = 0x18,
kSCSIStatusCommandTerminated = 0x22,
kSCSIStatusQueueFull = 0x28
};
enum _SCSIDevTypes
{
kSCSIDevTypeDirect = 0,
kSCSIDevTypeSequential,
kSCSIDevTypePrinter,
kSCSIDevTypeProcessor,
kSCSIDevTypeWorm,
kSCSIDevTypeCDROM,
kSCSIDevTypeScanner,
kSCSIDevTypeOptical,
kSCSIDevTypeChanger,
kSCSIDevTypeComm,
kSCSIDevTypeGraphicArts0A,
kSCSIDevTypeGraphicArts0B,
kSCSIDevTypeFirstReserved,
kSCSIDevTypeUnknownOrMissing = 0x1F,
kSCSIDevTypeMask = 0x1F
};
enum _SCSIInqVersion
{
kSCSIInqVersionSCSI3 = 0x03
};
enum _SCSI3Options
{
kSCSI3InqOptionIUS = 0x01,
kSCSI3InqOptionQAS = 0x02,
kSCSI3InqOptionClockDT = 0x04
};
enum _SCSICmds
{
kSCSICmdChangeDefinition = 0x40,
kSCSICmdCompare = 0x39,
kSCSICmdCopy = 0x18,
kSCSICmdCopyAndVerify = 0x3a,
kSCSICmdInquiry = 0x12,
kSCSICmdLogSelect = 0x4c,
kSCSICmdLogSense = 0x4d,
kSCSICmdModeSelect12 = 0x55,
kSCSICmdModeSelect6 = 0x15,
kSCSICmdModeSense12 = 0x5a,
kSCSICmdModeSense6 = 0x1a,
kSCSICmdReadBuffer = 0x3c,
kSCSICmdRecvDiagResult = 0x1c,
kSCSICmdRequestSense = 0x03,
kSCSICmdSendDiagnostic = 0x1d,
kSCSICmdTestUnitReady = 0x00,
kSCSICmdWriteBuffer = 0x3b,
kSCSICmdFormatUnit = 0x04,
kSCSICmdLockUnlockCache = 0x36,
kSCSICmdPrefetch = 0x34,
kSCSICmdPreventAllowRemoval = 0x1e,
kSCSICmdRead6 = 0x08,
kSCSICmdRead10 = 0x28,
kSCSICmdReadCapacity = 0x25,
kSCSICmdReadDefectData = 0x37,
kSCSICmdReadLong = 0x3e,
kSCSICmdReassignBlocks = 0x07,
kSCSICmdRelease = 0x17,
kSCSICmdReserve = 0x16,
kSCSICmdRezeroUnit = 0x01,
kSCSICmdSearchDataEql = 0x31,
kSCSICmdSearchDataHigh = 0x30,
kSCSICmdSearchDataLow = 0x32,
kSCSICmdSeek6 = 0x0b,
kSCSICmdSeek10 = 0x2b,
kSCSICmdSetLimits = 0x33,
kSCSICmdStartStopUnit = 0x1b,
kSCSICmdSynchronizeCache = 0x35,
kSCSICmdVerify = 0x2f,
kSCSICmdWrite6 = 0x0a,
kSCSICmdWrite10 = 0x2a,
kSCSICmdWriteAndVerify = 0x2e,
kSCSICmdWriteLong = 0x3f,
kSCSICmdWriteSame = 0x41,
kSCSICmdRewind = 0x01,
kSCSICmdWriteFilemarks = 0x10,
kSCSICmdSpace = 0x11,
kSCSICmdLoadUnload = 0x1B,
kSCSICmdReadCDTableOfContents = 0x43
};
enum _SCSIMsgs
{
kSCSIMsgAbort = 0x06,
kSCSIMsgAbortTag = 0x0d,
kSCSIMsgBusDeviceReset = 0x0c,
kSCSIMsgClearQueue = 0x0e,
kSCSIMsgCmdComplete = 0x00,
kSCSIMsgDisconnect = 0x04,
kSCSIMsgIdentify = 0x80,
kSCSIMsgIgnoreWideResdue = 0x23,
kSCSIMsgInitiateRecovery = 0x0f,
kSCSIMsgInitiatorDetectedErr = 0x05,
kSCSIMsgLinkedCmdComplete = 0x0a,
kSCSIMsgLinkedCmdCompleteFlag = 0x0b,
kSCSIMsgParityErr = 0x09,
kSCSIMsgRejectMsg = 0x07,
kSCSIMsgModifyDataPtr = 0x00,
kSCSIMsgNop = 0x08,
kSCSIMsgHeadOfQueueTag = 0x21,
kSCSIMsgOrderedQueueTag = 0x22,
kSCSIMsgSimpleQueueTag = 0x20,
kSCSIMsgReleaseRecovery = 0x10,
kSCSIMsgRestorePointers = 0x03,
kSCSIMsgSaveDataPointers = 0x02,
kSCSIMsgSyncXferReq = 0x01,
kSCSIMsgWideDataXferReq = 0x03,
kSCSIMsgTerminateIOP = 0x11,
kSCSIMsgExtended = 0x01,
kSCSIMsgEnableDisconnectMask = 0x40
};
#endif