/* *************************************************************************** */

/*  */

/*  Name:                        SCSIDEFS.H */

/*  */

/*  Description: SCSI definitions ('C' Language) */

/*  */

/* *************************************************************************** */



/* *************************************************************************** */

/*                       %%% TARGET STATUS VALUES %%% */

/* *************************************************************************** */

#define STATUS_GOOD     0x00            /*  Status Good */

#define STATUS_CHKCOND  0x02            /*  Check Condition */

#define STATUS_CONDMET  0x04            /*  Condition Met */

#define STATUS_BUSY     0x08            /*  Busy */

#define STATUS_INTERM   0x10            /*  Intermediate */

#define STATUS_INTCDMET 0x14            /*  Intermediate-condition met */

#define STATUS_RESCONF  0x18            /*  Reservation conflict */

#define STATUS_COMTERM  0x22            /*  Command Terminated */

#define STATUS_QFULL    0x28            /*  Queue full */



/* *************************************************************************** */

/*                    %%% SCSI MISCELLANEOUS EQUATES %%% */

/* *************************************************************************** */

#define MAXLUN          7               /*  Maximum Logical Unit Id */

#define MAXTARG         7               /*  Maximum Target Id */

#define MAX_SCSI_LUNS   64              /*  Maximum Number of SCSI LUNs */

#define MAX_NUM_HA      8               /*  Maximum Number of SCSI HA's */



/* \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ */

/*  */

/*                         %%% SCSI COMMAND OPCODES %%% */

/*  */

/* /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ */



/* *************************************************************************** */

/*                     %%% Commands for all Device Types %%% */

/* *************************************************************************** */

#define SCSI_CHANGE_DEF 0x40            /*  Change Definition (Optional) */

#define SCSI_COMPARE    0x39            /*  Compare (O) */

#define SCSI_COPY       0x18            /*  Copy (O) */

#define SCSI_COP_VERIFY 0x3A            /*  Copy and Verify (O) */

#define SCSI_INQUIRY    0x12            /*  Inquiry (MANDATORY) */

#define SCSI_LOG_SELECT 0x4C            /*  Log Select (O) */

#define SCSI_LOG_SENSE  0x4D            /*  Log Sense (O) */

#define SCSI_MODE_SEL6  0x15            /*  Mode Select 6-byte (Device Specific) */

#define SCSI_MODE_SEL10 0x55            /*  Mode Select 10-byte (Device Specific) */

#define SCSI_MODE_SEN6  0x1A            /*  Mode Sense 6-byte (Device Specific) */

#define SCSI_MODE_SEN10 0x5A            /*  Mode Sense 10-byte (Device Specific) */

#define SCSI_READ_BUFF  0x3C            /*  Read Buffer (O) */

#define SCSI_REQ_SENSE  0x03            /*  Request Sense (MANDATORY) */

#define SCSI_SEND_DIAG  0x1D            /*  Send Diagnostic (O) */

#define SCSI_RCV_DIAG   0x1C            /*  Receive Diagnostic Results (0) */

#define SCSI_TST_U_RDY  0x00            /*  Test Unit Ready (MANDATORY) */

#define SCSI_WRITE_BUFF 0x3B            /*  Write Buffer (O) */



/* *************************************************************************** */

/*                 %%% Commands Unique to Direct Access Devices %%% */

/* *************************************************************************** */

#define SCSI_FORMAT     0x04            /*  Format Unit (MANDATORY) */

#define SCSI_LCK_UN_CAC 0x36            /*  Lock Unlock Cache (O) */

#define SCSI_PREFETCH   0x34            /*  Prefetch (O) */

#define SCSI_MED_REMOVL 0x1E            /*  Prevent/Allow medium Removal (O) */

#define SCSI_READ6      0x08            /*  Read 6-byte (MANDATORY) */

#define SCSI_READ10     0x28            /*  Read 10-byte (MANDATORY) */

#define SCSI_RD_CAPAC   0x25            /*  Read Capacity (MANDATORY) */

#define SCSI_RD_DEFECT  0x37            /*  Read Defect Data (O) */

#define SCSI_READ_LONG  0x3E            /*  Read Long (O) */

#define SCSI_REASS_BLK  0x07            /*  Reassign Blocks (O) */

#define SCSI_RELEASE    0x17            /*  Release Unit (MANDATORY) */

#define SCSI_REZERO     0x01            /*  Rezero Unit (O) */

#define SCSI_RESERVE    0x16            /*  Reserve Unit (MANDATORY) */

#define SCSI_SRCH_DAT_E 0x31            /*  Search Data Equal (O) */

#define SCSI_SRCH_DAT_H 0x30            /*  Search Data High (O) */

#define SCSI_SRCH_DAT_L 0x32            /*  Search Data Low (O) */

#define SCSI_SEEK6      0x0B            /*  Seek 6-Byte (O) */

#define SCSI_SEEK10     0x2B            /*  Seek 10-Byte (O) */

#define SCSI_SET_LIMIT  0x33            /*  Set Limits (O) */

#define SCSI_START_STP  0x1B            /*  Start/Stop Unit (O) */

#define SCSI_SYNC_CACHE 0x35            /*  Synchronize Cache (O) */

#define SCSI_VERIFY     0x2F            /*  Verify (O) */

#define SCSI_WRITE6     0x0A            /*  Write 6-Byte (MANDATORY) */

#define SCSI_WRITE10    0x2A            /*  Write 10-Byte (MANDATORY) */

#define SCSI_WRT_VERIFY 0x2E            /*  Write and Verify (O) */

#define SCSI_WRITE_LONG 0x3F            /*  Write Long (O) */

#define SCSI_WRITE_SAME 0x41            /*  Write Same (O) */



/* *************************************************************************** */

/*               %%% Commands Unique to Sequential Access Devices %%% */

/* *************************************************************************** */

#define SCSI_ERASE      0x19            /*  Erase (MANDATORY) */

#define SCSI_LOAD_UN    0x1B            /*  Load/Unload (O) */

#define SCSI_LOCATE     0x2B            /*  Locate (O) */

#define SCSI_RD_BLK_LIM 0x05            /*  Read Block Limits (MANDATORY) */

#define SCSI_READ_POS   0x34            /*  Read Position (O) */

#define SCSI_READ_REV   0x0F            /*  Read Reverse (O) */

#define SCSI_REC_BF_DAT 0x14            /*  Recover Buffer Data (O) */

#define SCSI_REWIND     0x01            /*  Rewind (MANDATORY) */

#define SCSI_SPACE      0x11            /*  Space (MANDATORY) */

#define SCSI_VERIFY_T   0x13            /*  Verify (Tape) (O) */

#define SCSI_WRT_FILE   0x10            /*  Write Filemarks (MANDATORY) */

#define SCSI_PARTITION  0x0D            /*  DAT/QFA Partition Select */

#define SCSI_READWRITE  0x06            /*  Set Read/Write Parameters */



/* *************************************************************************** */

/*              %%% Commands Unique to Printer Devices %%% */

/* *************************************************************************** */

#define SCSI_PRINT      0x0A            /*  Print (MANDATORY) */

#define SCSI_SLEW_PNT   0x0B            /*  Slew and Print (O) */

#define SCSI_STOP_PNT   0x1B            /*  Stop Print (O) */

#define SCSI_SYNC_BUFF  0x10            /*  Synchronize Buffer (O) */



/* *************************************************************************** */

/*                  %%% Commands Unique to Processor Devices %%% */

/* *************************************************************************** */

#define SCSI_RECEIVE    0x08            /*  Receive (O) */

#define SCSI_SEND       0x0A            /*  Send (O) */



/* *************************************************************************** */

/*                  %%% Commands Unique to Write-Once Devices %%% */

/* *************************************************************************** */

#define SCSI_MEDIUM_SCN 0x38    /*  Medium Scan (O) */

#define SCSI_SRCHDATE10 0x31    /*  Search Data Equal 10-Byte (O) */

#define SCSI_SRCHDATE12 0xB1    /*  Search Data Equal 12-Byte (O) */

#define SCSI_SRCHDATH10 0x30    /*  Search Data High 10-Byte (O) */

#define SCSI_SRCHDATH12 0xB0    /*  Search Data High 12-Byte (O) */

#define SCSI_SRCHDATL10 0x32    /*  Search Data Low 10-Byte (O) */

#define SCSI_SRCHDATL12 0xB2    /*  Search Data Low 12-Byte (O) */

#define SCSI_SET_LIM_10 0x33    /*  Set Limits 10-Byte (O) */

#define SCSI_SET_LIM_12 0xB3    /*  Set Limits 10-Byte (O) */

#define SCSI_VERIFY10   0x2F    /*  Verify 10-Byte (O) */

#define SCSI_VERIFY12   0xAF    /*  Verify 12-Byte (O) */

#define SCSI_WRITE12    0xAA    /*  Write 12-Byte (O) */

#define SCSI_WRT_VER10  0x2E    /*  Write and Verify 10-Byte (O) */

#define SCSI_WRT_VER12  0xAE    /*  Write and Verify 12-Byte (O) */



/* *************************************************************************** */

/*                   %%% Commands Unique to CD-ROM Devices %%% */

/* *************************************************************************** */

#define SCSI_PLAYAUD_10 0x45    /*  Play Audio 10-Byte (O) */

#define SCSI_PLAYAUD_12 0xA5    /*  Play Audio 12-Byte 12-Byte (O) */

#define SCSI_PLAYAUDMSF 0x47    /*  Play Audio MSF (O) */

#define SCSI_PLAYA_TKIN 0x48    /*  Play Audio Track/Index (O) */

#define SCSI_PLYTKREL10 0x49    /*  Play Track Relative 10-Byte (O) */

#define SCSI_PLYTKREL12 0xA9    /*  Play Track Relative 12-Byte (O) */

#define SCSI_READCDCAP  0x25    /*  Read CD-ROM Capacity (MANDATORY) */

#define SCSI_READHEADER 0x44    /*  Read Header (O) */

#define SCSI_SUBCHANNEL 0x42    /*  Read Subchannel (O) */

#define SCSI_READ_TOC   0x43    /*  Read TOC (O) */



/* *************************************************************************** */

/*                     %%% Commands Unique to Scanner Devices %%% */

/* *************************************************************************** */

#define SCSI_GETDBSTAT  0x34    /*  Get Data Buffer Status (O) */

#define SCSI_GETWINDOW  0x25    /*  Get Window (O) */

#define SCSI_OBJECTPOS  0x31    /*  Object Postion (O) */

#define SCSI_SCAN       0x1B    /*  Scan (O) */

#define SCSI_SETWINDOW  0x24    /*  Set Window (MANDATORY) */



/* *************************************************************************** */

/*               %%% Commands Unique to Optical Memory Devices %%% */

/* *************************************************************************** */

#define SCSI_UpdateBlk  0x3D    /*  Update Block (O) */



/* *************************************************************************** */

/*               %%% Commands Unique to Medium Changer Devices %%% */

/* *************************************************************************** */

#define SCSI_EXCHMEDIUM 0xA6    /*  Exchange Medium (O) */

#define SCSI_INITELSTAT 0x07    /*  Initialize Element Status (O) */

#define SCSI_POSTOELEM  0x2B    /*  Position to Element (O) */

#define SCSI_REQ_VE_ADD 0xB5    /*  Request Volume Element Address (O) */

#define SCSI_SENDVOLTAG 0xB6    /*  Send Volume Tag (O) */



/* *************************************************************************** */

/*               %%% Commands Unique to Communication Devices %%% */

/* *************************************************************************** */

#define SCSI_GET_MSG_6  0x08    /*  Get Message 6-Byte (MANDATORY) */

#define SCSI_GET_MSG_10 0x28    /*  Get Message 10-Byte (O) */

#define SCSI_GET_MSG_12 0xA8    /*  Get Message 12-Byte (O) */

#define SCSI_SND_MSG_6  0x0A    /*  Send Message 6-Byte (MANDATORY) */

#define SCSI_SND_MSG_10 0x2A    /*  Send Message 10-Byte (O) */

#define SCSI_SND_MSG_12 0xAA    /*  Send Message 12-Byte (O) */



/* \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ */

/*  */

/*                    %%% END OF SCSI COMMAND OPCODES %%% */

/*  */

/* /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ */



/* *************************************************************************** */

/*                      %%% Request Sense Data Format %%% */

/* *************************************************************************** */

typedef struct {



	char    ErrorCode;              /*  Error Code (70H or 71H) */

	char    SegmentNum;             /*  Number of current segment descriptor */

	char    SenseKey;               /*  Sense Key(See bit definitions too) */

	char    InfoByte0;              /*  Information MSB */

	char    InfoByte1;              /*  Information MID */

	char    InfoByte2;              /*  Information MID */

	char    InfoByte3;              /*  Information LSB */

	char    AddSenLen;              /*  Additional Sense Length */

	char    ComSpecInf0;            /*  Command Specific Information MSB */

	char    ComSpecInf1;            /*  Command Specific Information MID */

	char    ComSpecInf2;            /*  Command Specific Information MID */

	char    ComSpecInf3;            /*  Command Specific Information LSB */

	char    AddSenseCode;           /*  Additional Sense Code */

	char    AddSenQual;             /*  Additional Sense Code Qualifier */

/*       char    FieldRepUCode;          // Field Replaceable Unit Code */

/*       char    SenKeySpec15;           // Sense Key Specific 15th byte */

/*       char    SenKeySpec16;           // Sense Key Specific 16th byte */

/*       char    SenKeySpec17;           // Sense Key Specific 17th byte */

/*       char    AddSenseBytes;          // Additional Sense Bytes */



} SENSE_DATA_FMT;



/* *************************************************************************** */

/*                       %%% REQUEST SENSE ERROR CODE %%% */

/* *************************************************************************** */

#define SERROR_CURRENT  0x70    /*  Current Errors */

#define SERROR_DEFERED  0x71    /*  Deferred Errors */



/* *************************************************************************** */

/*                    %%% REQUEST SENSE BIT DEFINITIONS %%% */

/* *************************************************************************** */

#define SENSE_VALID     0x80    /*  Byte 0 Bit 7 */

#define SENSE_FILEMRK   0x80    /*  Byte 2 Bit 7 */

#define SENSE_EOM       0x40    /*  Byte 2 Bit 6 */

#define SENSE_ILI       0x20    /*  Byte 2 Bit 5 */



/* *************************************************************************** */

/*              %%% REQUEST SENSE SENSE KEY DEFINITIONS %%% */

/* *************************************************************************** */

#define KEY_NOSENSE     0x00    /*  No Sense */

#define KEY_RECERROR    0x01    /*  Recovered Error */

#define KEY_NOTREADY    0x02    /*  Not Ready */

#define KEY_MEDIUMERR   0x03    /*  Medium Error */

#define KEY_HARDERROR   0x04    /*  Hardware Error */

#define KEY_ILLGLREQ    0x05    /*  Illegal Request */

#define KEY_UNITATT     0x06    /*  Unit Attention */

#define KEY_DATAPROT    0x07    /*  Data Protect */

#define KEY_BLANKCHK    0x08    /*  Blank Check */

#define KEY_VENDSPEC    0x09    /*  Vendor Specific */

#define KEY_COPYABORT   0x0A    /*  Copy Abort */

#define KEY_ABORT       0x0B    /*  Abort */

#define KEY_EQUAL       0x0C    /*  Equal (Search) */

#define KEY_VOLOVRFLW   0x0D    /*  Volume Overflow */

#define KEY_MISCOMP     0x0E    /*  Miscompare (Search) */

#define KEY_RESERVED    0x0F    /*  Reserved */



/* *************************************************************************** */

/*             %%% PERIPHERAL DEVICE TYPE DEFINITIONS %%% */

/* *************************************************************************** */

#define DTYPE_DASD      0x00    /*  Disk Device */

#define DTYPE_SEQD      0x01    /*  Tape Device */

#define DTYPE_PRNT      0x02    /*  Printer */

#define DTYPE_PROC      0x03    /*  Processor */

#define DTYPE_WORM      0x04    /*  Write-once read-multiple */

#define DTYPE_CROM      0x05    /*  CD-ROM device */

#define DTYPE_SCAN      0x06    /*  Scanner device */

#define DTYPE_OPTI      0x07    /*  Optical memory device */

#define DTYPE_JUKE      0x08    /*  Medium Changer device */

#define DTYPE_COMM      0x09    /*  Communications device */

#define DTYPE_RESL      0x0A    /*  Reserved (low) */

#define DTYPE_RESH      0x1E    /*  Reserved (high) */

#define DTYPE_UNKNOWN   0x1F    /*  Unknown or no device type */



/* *************************************************************************** */

/*              %%% ANSI APPROVED VERSION DEFINITIONS %%% */

/* *************************************************************************** */

#define ANSI_MAYBE       0x0     /*  Device may or may not be ANSI approved stand */

#define ANSI_SCSI1       0x1     /*  Device complies to ANSI X3.131-1986 (SCSI-1) */

#define ANSI_SCSI2       0x2     /*  Device complies to SCSI-2 */

#define ANSI_RESLO       0x3     /*  Reserved (low) */

#define ANSI_RESHI       0x7     /*  Reserved (high) */

