home *** CD-ROM | disk | FTP | other *** search
- #ifndef DEVICES_SCSIDISK_H
- #define DEVICES_SCSIDISK_H
- /*
- ** $VER: scsidisk.h 36.2 (7.11.90)
- ** Includes Release 40.15
- **
- ** SCSI exec-level device command
- **
- ** (C) Copyright 1988-1993 Commodore-Amiga, Inc.
- ** All Rights Reserved
- */
-
-
- #ifndef EXEC_TYPES_H
- #include "exec/types.h"
- #endif /* EXEC_TYPES_H */
-
-
-
- /*--------------------------------------------------------------------
- *
- * 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.
- *
- *------------------------------------------------------------------*/
-
- #define HD_SCSICMD 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 */
-
- struct SCSICmd {
- UWORD *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 */
- UBYTE *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 */
- UBYTE *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) */
- };
-
-
- /*----- scsi_Flags -----*/
- #define SCSIF_WRITE 0 /* intended data direction is out */
- #define SCSIF_READ 1 /* intended data direction is in */
- #define SCSIB_READ_WRITE 0 /* (the bit to test) */
-
- #define SCSIF_NOSENSE 0 /* no automatic request sense */
- #define SCSIF_AUTOSENSE 2 /* do standard extended request sense */
- /* on check condition */
- #define SCSIF_OLDAUTOSENSE 6 /* do 4 byte non-extended request */
- /* sense on check condition */
- #define SCSIB_AUTOSENSE 1 /* (the bit to test) */
- #define SCSIB_OLDAUTOSENSE 2 /* (the bit to test) */
-
- /*----- SCSI io_Error values -----*/
- #define HFERR_SelfUnit 40 /* cannot issue SCSI command to self */
- #define HFERR_DMA 41 /* DMA error */
- #define HFERR_Phase 42 /* illegal or unexpected SCSI phase */
- #define HFERR_Parity 43 /* SCSI parity error */
- #define HFERR_SelTimeout 44 /* Select timed out */
- #define HFERR_BadStatus 45 /* status and/or sense error */
-
- /*----- OpenDevice io_Error values -----*/
- #define HFERR_NoBoard 50 /* Open failed for non-existant board */
-
- #endif /* DEVICES_SCSIDISK_H */
-