IFND DEVICES_SCSIDISK_I DEVICES_SCSIDISK_I EQU 1 ** ** $Filename: devices/scsidisk.i $ ** $Revision: 1.0 $ ** $Date: 88/07/11 15:33:14 $ ** ** SCSI exec-level device command ** ** (C) Copyright 1988 Commodore-Amiga, Inc. ** All Rights Reserved ** ;--------------------------------------------------------------------- ; ; SCSI Command ; Several Amiga SCSI controller manufacturers are converging on ; standard ways to talk to their controllers. This include ; file describes an exec-device command (e.g. for hddisk.device) ; that can be used to issue SCSI commands ; ; UNIT NUMBERS ; Unit numbers to the OpenDevice call have encoded in them which ; SCSI device is being referred to. The three decimal digits of ; the unit number refer to the SCSI Target ID (bus address) in ; the 1's digit, the SCSI logical unit (LUN) in the 10's digit, ; and the controller board in the 100's digit. ; ; Examples: ; 0 drive at address 0 ; 12 LUN 1 on multiple drive controller at address 2 ; 104 second controller board, address 4 ; 88 not valid: both logical units and addresses ; range from 0..7. ; ; CAVEATS ; Original 2090 code did not support this command. ; ; Commodore 2090/2090A unit numbers are different. The SCSI ; logical unit is the 100's digit, and the SCSI Target ID ; is a permuted 1's digit: Target ID 0..6 maps to unit 3..9 ; (7 is reserved for the controller). ; ; Examples: ; 3 drive at address 0 ; 109 drive at address 6, logical unit 1 ; 1 not valid: this is not a SCSI unit. Perhaps ; it's an ST506 unit. ; ; Some controller boards generate a unique name (e.g. 2090A's ; iddisk.device) for the second controller board, instead of ; implementing the 100's digit. ; ; There are optional restrictions on the alignment, bus ; accessability, and size of the data for the data phase. ; Be conservative to work with all manufacturer's controllers. ; ;--------------------------------------------------------------------- HD_SCSICMD EQU 28 ; issue a SCSI command to the unit ; io_Data points to a SCSICmd ; io_Length is sizeof(struct SCSICmd) ; io_Actual and io_Offset are not used STRUCTURE SCSICmd,0 APTR scsi_Data ; word aligned data for SCSI Data Phase ; (optional) data need not be byte aligned ; (optional) data need not be bus accessable ULONG scsi_Length ; even length of Data area ; (optional) data can have odd length ; (optional) data length can be > 2**24 ULONG scsi_Actual ; actual Data used APTR scsi_Command ; SCSI Command (same options as scsi_Data) UWORD scsi_CmdLength ; length of Command UWORD scsi_CmdActual ; actual Command used UBYTE scsi_Flags ; includes intended data direction UBYTE scsi_Status ; SCSI status of command LABEL scsi_SIZEOF ;------ scsi_Flags ------ SCSIF_WRITE EQU 0 ; intended data direction is out SCSIF_READ EQU 1 ; intended data direction is in ;------ SCSI io_Error values ------ HFERR_SelfUnit EQU 40 ; cannot issue SCSI command to self HFERR_DMA EQU 41 ; DMA error HFERR_Phase EQU 42 ; illegal or unexpected SCSI phase HFERR_Parity EQU 43 ; SCSI parity error HFERR_SelTimeout EQU 44 ; Select timed out HFERR_BadStatus EQU 45 ; status and/or sense error ;------ OpenDevice io_Error values ------ HFERR_NoBoard EQU 50 ; Open failed for non-existant board ENDC ; DEVICES_SCSIDISK_I