Unit SCSI

From Ultibo.org
Revision as of 00:32, 29 November 2016 by Ultibo (Talk | contribs)

Jump to: navigation, search

Return to Unit Reference


Description


The SCSI interface unit is device non specific in that it implements only the SCSI protocol.

Actual command transfer is performed by a device specific driver that implements the exact semantics of the device. eg USB Mass Storage devices use the SCSI protocol, the SCSI interface implements the protocol behaviour but the actual command transfer is handled by the USB storage driver.

Constants



SCSI specific constants SCSI_*
SCSI_NAME_PREFIX = 'SCSI'; Name prefix for SCSI Devices
SCSI_HOST_PREFIX = 'SCSIHost'; Name prefix for Host Devices


SCSI device type constants SCSI_TYPE_*
SCSI_TYPE_NONE = 0;  
SCSI_TYPE_HDD = 1;  


SCSI device state constants SCSI_STATE_*
SCSI_STATE_EJECTED = 0;  
SCSI_STATE_INSERTED = 1;  


SCSI device flag constants SCSI_FLAG_*
SCSI_FLAG_NONE = $00000000;  


SCSI protocol message constants SCSI_MESSAGE_*
SCSI_MESSAGE_COMPLETE = $00;  
SCSI_MESSAGE_EXTENDED = $01;  
SCSI_MESSAGE_SAVE_DP = $02;  
SCSI_MESSAGE_RESTORE_DP = $03;  
SCSI_MESSAGE_DISCONNECT = $04;  
SCSI_MESSAGE_ID_ERROR = $05;  
SCSI_MESSAGE_ABORT = $06;  
SCSI_MESSAGE_REJECT = $07;  
SCSI_MESSAGE_NOOP = $08;  
SCSI_MESSAGE_PARITY = $09;  
SCSI_MESSAGE_LCOMPLETE = $0a;  
SCSI_MESSAGE_FCOMPLETE = $0b;  
SCSI_MESSAGE_RESET = $0c;  
SCSI_MESSAGE_ABORT_TAG = $0d;  
SCSI_MESSAGE_CLEAR_QUEUE = $0e;  
SCSI_MESSAGE_INIT_REC = $0f;  
SCSI_MESSAGE_REL_REC = $10;  
SCSI_MESSAGE_TERMINATE = $11;  
SCSI_MESSAGE_SIMPLE_TAG = $20;  
SCSI_MESSAGE_HEAD_TAG = $21;  
SCSI_MESSAGE_ORDERED_TAG = $22;  
SCSI_MESSAGE_IGN_RESIDUE = $23;  
SCSI_MESSAGE_IDENTIFY = $80;  
 
SCSI_MESSAGE_X_MODIFY_DP = $00;  
SCSI_MESSAGE_X_SYNC_REQ = $01;  
SCSI_MESSAGE_X_WIDE_REQ = $03;  
SCSI_MESSAGE_X_PPR_REQ = $04;  


SCSI protocol status constants SCSI_STATUS_*
SCSI_STATUS_GOOD = $00;  
SCSI_STATUS_CHECK_COND = $02;  
SCSI_STATUS_COND_MET = $04;  
SCSI_STATUS_BUSY = $08;  
SCSI_STATUS_INT = $10;  
SCSI_STATUS_INT_COND_MET = $14;  
SCSI_STATUS_CONFLICT = $18;  
SCSI_STATUS_TERMINATED = $20;  
SCSI_STATUS_QUEUE_FULL = $28;  
SCSI_STATUS_ILLEGAL = $ff;  
SCSI_STATUS_SENSE = $80;  


SCSI protocol sense key constants SCSI_SENSE_*
SCSI_SENSE_NO_SENSE = $00;  
SCSI_SENSE_RECOVERED_ERROR = $01;  
SCSI_SENSE_NOT_READY = $02;  
SCSI_SENSE_MEDIUM_ERROR = $03;  
SCSI_SENSE_HARDWARE_ERROR = $04;  
SCSI_SENSE_ILLEGAL_REQUEST = $05;  
SCSI_SENSE_UNIT_ATTENTION = $06;  
SCSI_SENSE_DATA_PROTECT = $07;  
SCSI_SENSE_BLANK_CHECK = $08;  
SCSI_SENSE_VENDOR_SPECIFIC = $09;  
SCSI_SENSE_COPY_ABORTED = $0A;  
SCSI_SENSE_ABORTED_COMMAND = $0B;  
SCSI_SENSE_VOLUME_OVERFLOW = $0D;  
SCSI_SENSE_MISCOMPARE = $0E;  


SCSI protocol additional sense code constants SCSI_ASC_*
SCSI_ASC_NO_SENSE = $00; NO SENSE
SCSI_ASC_RECOVERED_RETRIES = $17; RECOVERED DATA WITH RETRIES
SCSI_ASC_RECOVERED_ECC = $18; RECOVERED DATA WITH ECC
SCSI_ASC_NOT_READY_LUN = $04; LOGICAL UNIT NOT READY
SCSI_ASC_NOT_READY_NO_REF_POS = $06; NO REFERENCE POSITION FOUND
SCSI_ASC_NOT_READY_LUN_COMM = $08; LOGICAL UNIT COMMUNICATION
SCSI_ASC_NOT_READY_MEDIUM_NOT_PRESENT = $3A; MEDIUM NOT PRESENT


SCSI protocol additional sense code qualifier constants SCSI_ASCQ_*
SCSI_ASCQ_NO_SENSE = $00; NO SENSE
SCSI_ASCQ_RECOVERED_RETRIES = $01; RECOVERED DATA WITH RETRIES
SCSI_ASCQ_RECOVERED_ECC = $00; RECOVERED DATA WITH ECC
SCSI_ASCQ_NOT_READY_LUN_BECOME_READY = $01; LOGICAL DRIVE NOT READY - BECOMING READY
SCSI_ASCQ_NOT_READY_LUN_INIT_REQUIRED = $02; LOGICAL DRIVE NOT READY - INITIALIZATION REQUIRED
SCSI_ASCQ_NOT_READY_LUN_FORMAT_PROGRESS = $04; LOGICAL UNIT NOT READY - FORMAT IN PROGRESS
SCSI_ASCQ_NOT_READY_LUN_DEVICE_BUSY = $FF; LOGICAL DRIVE NOT READY - DEVICE IS BUSY
SCSI_ASCQ_NOT_READY_LUN_COMM_FAILURE = $00; LOGICAL UNIT COMMUNICATION FAILURE
SCSI_ASCQ_NOT_READY_LUN_COMM_TIMEOUT = $01; LOGICAL UNIT COMMUNICATION TIME-OUT
SCSI_ASCQ_NOT_READY_LUN_COMM_OVERRUN = $80; LOGICAL UNIT COMMUNICATION OVERRUN


SCSI protocol command constants SCSI_COMMAND_*
SCSI_COMMAND_CHANGE_DEF = $40; Change Definition (Optional)
SCSI_COMMAND_COMPARE = $39; Compare (Optional)
SCSI_COMMAND_COPY = $18; Copy (Optional)
SCSI_COMMAND_COP_VERIFY = $3A; Copy and Verify (Optional)
SCSI_COMMAND_INQUIRY = $12; Inquiry (MANDATORY)
SCSI_COMMAND_LOG_SELECT = $4C; Log Select (Optional)
SCSI_COMMAND_LOG_SENSE = $4D; Log Sense (Optional)
SCSI_COMMAND_MODE_SEL6 = $15; Mode Select 6-byte (Device Specific)
SCSI_COMMAND_MODE_SEL10 = $55; Mode Select 10-byte (Device Specific)
SCSI_COMMAND_MODE_SEN6 = $1A; Mode Sense 6-byte (Device Specific)
SCSI_COMMAND_MODE_SEN10 = $5A; Mode Sense 10-byte (Device Specific)
SCSI_COMMAND_READ_BUFF = $3C; Read Buffer (Optional)
SCSI_COMMAND_REQ_SENSE = $03; Request Sense (MANDATORY)
SCSI_COMMAND_SEND_DIAG = $1D; Send Diagnostic (Optional)
SCSI_COMMAND_TST_U_RDY = $00; Test Unit Ready (MANDATORY)
SCSI_COMMAND_WRITE_BUFF = $3B; Write Buffer (Optional)
 
Commands Unique to Direct Access Devices
SCSI_COMMAND_COMPARE = $39; Compare (Optional)
SCSI_COMMAND_FORMAT = $04; Format Unit (MANDATORY)
SCSI_COMMAND_LCK_UN_CAC = $36; Lock Unlock Cache (Optional)
SCSI_COMMAND_PREFETCH = $34; Prefetch (Optional)
SCSI_COMMAND_MED_REMOVL = $1E; Prevent/Allow medium Removal (Optional)
SCSI_COMMAND_READ6 = $08; Read 6-byte (MANDATORY)
SCSI_COMMAND_READ10 = $28; Read 10-byte (MANDATORY)
SCSI_COMMAND_READ12 = $A8; Read 12-byte (Optional)
SCSI_COMMAND_READ16 = $88; Read 16-byte (Optional)
SCSI_COMMAND_RD_CAPAC = $25; Read Capacity (MANDATORY)
SCSI_COMMAND_RD_CAPAC10 = SCSI_COMMAND_RD_CAPAC; Read Capacity (10)
SCSI_COMMAND_RD_DEFECT = $37; Read Defect Data (Optional)
SCSI_COMMAND_READ_LONG = $3E; Read Long (Optional)
SCSI_COMMAND_REASS_BLK = $07; Reassign Blocks (Optional)
SCSI_COMMAND_RCV_DIAG = $1C; Receive Diagnostic Results (Optional)
SCSI_COMMAND_RELEASE = $17; Release Unit (MANDATORY)
SCSI_COMMAND_REZERO = $01; Rezero Unit (Optional)
SCSI_COMMAND_SRCH_DAT_E = $31; Search Data Equal (Optional)
SCSI_COMMAND_SRCH_DAT_H = $30; Search Data High (Optional)
SCSI_COMMAND_SRCH_DAT_L = $32; Search Data Low (Optional)
SCSI_COMMAND_SEEK6 = $0B; Seek 6-Byte (Optional)
SCSI_COMMAND_SEEK10 = $2B; Seek 10-Byte (Optional)
SCSI_COMMAND_SEND_DIAG = $1D; Send Diagnostics (MANDATORY)
SCSI_COMMAND_SET_LIMIT = $33; Set Limits (Optional)
SCSI_COMMAND_START_STP = $1B; Start/Stop Unit (Optional)
SCSI_COMMAND_SYNC_CACHE = $35; Synchronize Cache (Optional)
SCSI_COMMAND_VERIFY = $2F; Verify (Optional)
SCSI_COMMAND_WRITE6 = $0A; Write 6-Byte (MANDATORY)
SCSI_COMMAND_WRITE10 = $2A; Write 10-Byte (MANDATORY)
SCSI_COMMAND_WRITE12 = $AA; Write 12-Byte (Optional)
SCSI_COMMAND_WRITE16 = $8A; Write 16-Byte (Optional)
SCSI_COMMAND_WRT_VERIFY = $2E; Write and Verify (Optional)
SCSI_COMMAND_WRITE_LONG = $3F; Write Long (Optional)
SCSI_COMMAND_WRITE_SAME = $41; Write Same (Optional)
SCSI_COMMAND_RD_FMT_CAP = $23; Read Format Capacities
SCSI_COMMAND_SVC_ACT_IN = $9E; Service Action In


SCSI command data constants SCSI_COMMAND_MAX_*
SCSI_COMMAND_MAX_SIZE = 16;  


SCSI service action constants SCSI_SAI_*
SCSI_SAI_READ_CAPACITY_16 = $10; Read Capacity (16)
SCSI_SAI_GET_LBA_STATUS = $12; Get LBA Status


SCSI inquiry data constants SCSI_INQUIRY_*
SCSI_INQUIRY_STANDARD = $00;  


SCSI standard inquiry data constants SCSI_STANDARD_INQUIRY_*
SCSI_STANDARD_INQUIRY_SIZE = 36;  


SCSI inquiry peripheral device type constants SCSI_DEVICE_TYPE_*
SCSI_DEVICE_TYPE_DISK = $00; SBC-3 - Direct access block device (e.g., magnetic disk)
SCSI_DEVICE_TYPE_TAPE = $01; SSC-3 - Sequential-access device (e.g., magnetic tape)
SCSI_DEVICE_TYPE_PRINTER = $02; SSC - Printer device
SCSI_DEVICE_TYPE_PROCESSOR = $03; SPC-2 - Processor device
SCSI_DEVICE_TYPE_WRITE_ONCE = $04; SBC - Write-once device (e.g., some optical disks)
SCSI_DEVICE_TYPE_CD_DVD = $05; MMC-5 - CD/DVD device
SCSI_DEVICE_TYPE_SCANNER = $06; Scanner device (obsolete)
SCSI_DEVICE_TYPE_OPTICAL = $07; SBC - Optical memory device (e.g., some optical disks)
SCSI_DEVICE_TYPE_CHANGER = $08; SMC-3 - Medium changer device (e.g., jukeboxes)
SCSI_DEVICE_TYPE_COMMS = $09; Communications device (obsolete)
SCSI_DEVICE_TYPE_ARRAY = $0C; SCC-2 - Storage array controller device (e.g., RAID)
SCSI_DEVICE_TYPE_ENCLOSURE = $0D; SES - Enclosure services device
SCSI_DEVICE_TYPE_RBC = $0E; RBC - Simplified direct-access device (e.g., magnetic disk)
SCSI_DEVICE_TYPE_CARD = $0F; OCRW - Optical card reader/writer device
SCSI_DEVICE_TYPE_BRIDGE = $10; BCC - Bridge Controller Commands
SCSI_DEVICE_TYPE_OBJECT = $11; OSD - Object-based Storage Device
SCSI_DEVICE_TYPE_AUTOMATION = $12; ADC-2 - Automation/Drive Interface
SCSI_DEVICE_TYPE_WELL_KNOWN = $1E; Well known logical unit
SCSI_DEVICE_TYPE_UNKNOWN = $1F; Unknown or no device type


SCSI inquiry removable media bit constants SCSI_REMOVABLE_MEDIA_*
SCSI_REMOVABLE_MEDIA_BIT = $80;  


SCSI request sense data constants SCSI_REQUEST_SENSE_*
SCSI_REQUEST_SENSE_SIZE = 18;  


SCSI read capacity data constants SCSI_READ_CAPACITY_*
SCSI_READ_CAPACITY_SIZE = 8;  
SCSI_READ_CAPACITY_16_SIZE = 32;  


SCSI read 10 data constants SCSI_READ_10_*
SCSI_READ_10_MAX_BLOCKS = $FFFF;  


SCSI write 10 data constants SCSI_WRITE_10_*
SCSI_WRITE_10_MAX_BLOCKS = $FFFF;  


SCSI logging constants SCSI_LOG_*
SCSI_LOG_LEVEL_DEBUG = LOG_LEVEL_DEBUG; SCSI debugging messages
SCSI_LOG_LEVEL_INFO = LOG_LEVEL_INFO; SCSI informational messages, such as a device being attached or detached
SCSI_LOG_LEVEL_ERROR = LOG_LEVEL_ERROR; SCSI error messages
SCSI_LOG_LEVEL_NONE = LOG_LEVEL_NONE; No SCSI messages


Type definitions


To be documented

Public variables


To be documented

Function declarations


To be documented


Return to Unit Reference