amos-professional/AMOSPro Sources/includes/devices/scsidisk.i

97 lines
3.3 KiB
OpenEdge ABL

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