home *** CD-ROM | disk | FTP | other *** search
- 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
-