home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Developer CD v1.2
/
amidev_cd_12.iso
/
inc&ad2.0
/
includes
/
devices
/
scsidisk.i
< prev
next >
Wrap
Text File
|
1992-09-01
|
4KB
|
119 lines
IFND DEVICES_SCSIDISK_I
DEVICES_SCSIDISK_I EQU 1
**
** $Filename: devices/scsidisk.i $
** $Release: 2.04 Includes, V37.4 $
** $Revision: 36.2 $
** $Date: 90/11/07 $
**
** SCSI exec-level device command
**
** (C) Copyright 1988-1991 Commodore-Amiga, Inc.
** All Rights Reserved
**
IFND EXEC_TYPES_I
INCLUDE "exec/types.i"
ENDC ; EXEC_TYPES_I
;---------------------------------------------------------------------
;
; 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
APTR scsi_SenseData ; sense data: filled if SCSIF_[OLD]AUTOSENSE
; is set and scsi_Status has CHECK CONDITION
; (bit 1) set
UWORD scsi_SenseLength ; size of scsi_SenseData, also bytes to
; request w/ SCSIF_AUTOSENSE, must be 4..255
UWORD scsi_SenseActual ; amount actually fetched (0 means no sense)
LABEL scsi_SIZEOF
;------ scsi_Flags ------
SCSIF_WRITE EQU 0 ; intended data direction is out
SCSIF_READ EQU 1 ; intended data direction is in
SCSIB_READ_WRITE EQU 0 ; (the bit to test)
SCSIF_NOSENSE EQU 0 ; no automatic request sense
SCSIF_AUTOSENSE EQU 2 ; do standard extended request sense
; on check condition
SCSIF_OLDAUTOSENSE EQU 6 ; do 4 byte non-extended request
; sense on check condition
SCSIB_AUTOSENSE EQU 1 ; (the bit to test)
SCSIB_OLDAUTOSENSE EQU 2 ; (the bit to test)
;------ 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