133 lines
3.2 KiB
C
133 lines
3.2 KiB
C
|
|
#ifndef __SCSI_H__
|
|
#define __SCSI_H__
|
|
/*
|
|
For documentation on the OPCODES, MESSAGES, and SENSE values,
|
|
please consult the SCSI standard.
|
|
*/
|
|
|
|
/*
|
|
SCSI opcodes
|
|
*/
|
|
|
|
#define TEST_UNIT_READY 0x00
|
|
#define REZERO_UNIT 0x01
|
|
#define REQUEST_SENSE 0x03
|
|
#define FORMAT_UNIT 0x04
|
|
#define REASSIGN_BLOCKS 0x07
|
|
#define READ_6 0x08
|
|
#define WRITE_6 0x0a
|
|
#define SEEK 0x0b
|
|
#define INQUIRY 0x12
|
|
#define MODE_SELECT 0x15
|
|
#define RESERVE 0x16
|
|
#define RELEASE 0x17
|
|
#define COPY 0x18
|
|
#define MODE_SENSE 0x1a
|
|
#define START_STOP 0x1b
|
|
#define RECIEVE_DAIGNOSTIC 0x1c
|
|
#define SEND_DIAGNOSTIC 0x1d
|
|
#define ALLOW_MEDIUM_REMOVAL 0x1e
|
|
|
|
#define READ_CAPACITY 0x25
|
|
#define READ_10 0x28
|
|
#define WRITE_10 0x2a
|
|
#define SEEK_10 0x2b
|
|
#define WRITE_VERIFY 0x2e
|
|
#define VERIFY 0x2f
|
|
#define SEARCH_HIGH 0x30
|
|
#define SEARCH_EQUAL 0x31
|
|
#define SEARCH_LOW 0x32
|
|
#define SET_LIMITS 0x33
|
|
#define COMPARE 0x39
|
|
#define COPY_VERIFY 0x3a
|
|
|
|
/*
|
|
MESSAGE CODES
|
|
*/
|
|
|
|
#define COMMAND_COMPLETE 0x00
|
|
#define EXTENDED_MESSAGE 0x01
|
|
#define SAVE_POINTERS 0x02
|
|
#define RESTORE_POINTERS 0x03
|
|
#define DISCONNECT 0x04
|
|
#define INITIATOR_ERROR 0x05
|
|
#define ABORT 0x06
|
|
#define MESAGE_REJECT 0x07
|
|
#define NOP 0x08
|
|
#define MSG_PARITY_ERROR 0x09
|
|
#define LINKED_CMD_COMPLETE 0x0a
|
|
#define LINKED_FLG_CMD_COMPLETE 0x0b
|
|
#define BUS_DEVICE_RESET 0x0c
|
|
#define IDENTIFY 0x80
|
|
|
|
/*
|
|
Our errors returned by OUR driver, NOT SCSI message. Orr'd with
|
|
SCSI message passed back to driver <IF any>.
|
|
*/
|
|
|
|
/* NO error */
|
|
#define DID_OK 0x0000
|
|
/* Couldn't connect before timeout period */
|
|
#define DID_NO_CONNECT 0x0100
|
|
/* BUS stayed busy through time out period */
|
|
#define DID_BUS_BUSY 0x0200
|
|
/* TIMED OUT for other reason */
|
|
#define DID_TIME_OUT 0x0300
|
|
/* ERROR from TARGET */
|
|
#define DID_TERROR 0x0400
|
|
/* TARGET was busy */
|
|
#define DID_TBUSY 0x0500
|
|
/* TARGET disconnected prematurely */
|
|
#define DID_TDISCONNECT 0x0600
|
|
/* TARGET was off line */
|
|
#define DID_TOFFLINE 0x0700
|
|
/* TARGET wants US to send IT a message */
|
|
#defibe DID_TREQ_MSG_OUT 0x0800
|
|
/* TARGET parity error */
|
|
#define DID_TPARITY 0x0900
|
|
/* TARGET requested reselect */
|
|
#define DID_TRESELECT 0x0A00
|
|
/* TARGET was not in the range 0-6 inlclusive */
|
|
#define DID_BAD_TARGET 0x0B00
|
|
|
|
/*
|
|
SENSE KEYS
|
|
*/
|
|
|
|
#define NO_SENSE 0x00
|
|
#define RECOVERED_ERROR 0x01
|
|
#define NOT_READY 0x02
|
|
#define MEDIUM_ERROR 0x03
|
|
#define HARDWARE_ERROR 0x04
|
|
#define ILLEGAL_REQUEST 0x05
|
|
#define UNIT_ATTENTION 0x06
|
|
#define DATA_PROTECT 0x07
|
|
#define BLANK_CHECK 0x08
|
|
#define COPY_ABORTED 0x0a
|
|
#define ABORTED_COMMAND 0x0b
|
|
#define VOLUME_OVERFLOW 0x0d
|
|
#define MISCOMPARE 0x0e
|
|
|
|
|
|
/*
|
|
DEVICE TYPES
|
|
|
|
*/
|
|
|
|
#define TYPE_DISK 0x00
|
|
#define TYPE_TAPE 0x01
|
|
#define TYPE_WORM 0x04 /* Treated as ROM by our system */
|
|
#define TYPE_ROM 0x05
|
|
#define TYPE_NO_LUN 0x7f
|
|
/*
|
|
Every SCSI command starts with a one byte OP-code.
|
|
The next byte's high three bits are the LUN of the
|
|
device. Any multi-byte quantities are stored high byte
|
|
first, and may have a 5 bit MSB in the same byte
|
|
as the LUN.
|
|
*/
|
|
|
|
|
|
#endif
|