home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / library / os2 / gtak / source / tape / scsi.h < prev    next >
Encoding:
C/C++ Source or Header  |  1992-09-12  |  7.5 KB  |  236 lines

  1. /*****************************************************************************
  2.  * $Id: scsi.h,v 1.3 1992/09/12 18:11:02 ak Exp $
  3.  *****************************************************************************
  4.  * $Log: scsi.h,v $
  5.  * Revision 1.3  1992/09/12  18:11:02  ak
  6.  * Added scsi_name
  7.  * Added device name support to tctl.c
  8.  *
  9.  * Revision 1.2  1992/09/02  19:05:32  ak
  10.  * Version 2.0
  11.  * - EMX version
  12.  * - AIX version
  13.  * - SCSI-2 commands
  14.  * - ADD Driver
  15.  * - blocksize support
  16.  *
  17.  * Revision 1.1.1.1  1992/01/06  20:27:28  ak
  18.  * Interface now based on ST01 and ASPI.
  19.  * AHA_DRVR no longer supported.
  20.  * Files reorganized.
  21.  *
  22.  * Revision 1.1  1992/01/06  20:27:26  ak
  23.  * Initial revision
  24.  *
  25.  *****************************************************************************/
  26.  
  27. /************************************************************************
  28.  *        S C S I   C o m m a n d   D e f i n i t i o n s        *
  29.  *                (SCSI-2)                *
  30.  ************************************************************************/
  31.  
  32. /*
  33.  * Command Codes
  34.  *    Codes 00..1F:  6 bytes
  35.  *    Codes 20..5F: 10 bytes
  36.  *    Codes 60..9F: reserved
  37.  *    Codes A0..BF: 12 bytes
  38.  *    Codes C0..FF: vendor specific
  39.  *
  40.  */
  41.     /* General commands: */
  42. #define CmdTestUnitReady    0x00
  43. #define CmdRequestSense        0x03
  44. #define CmdInquiry        0x12
  45. #define CmdModeSelect        0x15
  46. #define CmdModeSense        0x1A
  47. #define CmdReserveUnit        0x16
  48. #define CmdReleaseUnit        0x17
  49. #define CmdCopy            0x18
  50. #define CmdReceiveDiagnostics    0x1C
  51. #define CmdSendDiagnostics    0x1D
  52. #define CmdCompare        0x39
  53. #define CmdCopyAndVerify    0x3A
  54. #define CmdWriteBuffer        0x3B
  55. #define CmdReadBuffer        0x3C
  56. #define CmdChangeDefinition    0x40
  57. #define CmdLogSelect        0x4C
  58. #define CmdLogSense        0x4D
  59. #define CmdModeSelect2        0x55
  60. #define CmdModeSense2        0x5A
  61.     /* Random access device commands: */
  62. #define RanRezeroUnit        0x01
  63. #define RanFormatUnit        0x04
  64. #define RanReassignBlocks    0x07
  65. #define RanRead            0x08
  66. #define RanWrite        0x0A
  67. #define RanSeek            0x0B
  68. #define RanReserve        0x16
  69. #define RanRelease        0x17
  70. #define RanStartStopUnit    0x1B
  71. #define RanRequestDiagnostics    0x1C
  72. #define RanSendDiagnostics    0x1D
  73. #define RanPreventMediaRemoval    0x1E
  74. #define RanReadCapacity        0x25
  75. #define RanRead2        0x28
  76. #define RanWrite2        0x2A
  77. #define RanSeek2        0x2B
  78. #define RanWriteAndVerify    0x2E
  79. #define RanVerify        0x2F
  80. #define RanSearchDataHigh    0x30
  81. #define RanSearchDataEqual    0x31
  82. #define RanSearchDataLow    0x32
  83. #define RanSetLimits        0x33
  84. #define RanPreFetch        0x34
  85. #define RanSynchronizeCache    0x35
  86. #define RanLockUnloadCache    0x36
  87. #define RanReadDefectData    0x37
  88. #define RanReadLong        0x3E
  89. #define RanWriteLong        0x3F
  90. #define RanWriteSame        0x41
  91.     /* Sequential access device commands: */
  92. #define SeqRewind        0x01
  93. #define SeqRequestBlockAddress    0x02    /* Tandberg specific */
  94. #define SeqReadBlockLimits    0x05
  95. #define SeqRead            0x08
  96. #define SeqWrite        0x0A
  97. #define SeqSeek            0x0C    /* Tandberg specific */
  98. #define SeqReadReverse        0x0F
  99. #define SeqWriteFilemarks    0x10
  100. #define SeqSpace        0x11
  101. #define SeqVerify        0x13
  102. #define SeqRecoverBufferedData    0x14
  103. #define SeqCopy            0x18
  104. #define SeqErase        0x19
  105. #define SeqLoad            0x1B
  106. #define SeqRequestDiagnostics    0x1C
  107. #define SeqSendDiagnostics    0x1D
  108. #define SeqPreventMediaRemoval    0x1E
  109. #define SeqLocate        0x2B
  110. #define SeqReadPosition        0x34
  111.     /* Processor type device commands (Adaptec AHA154x/1640): */
  112. #define ProcReceive        0x08
  113. #define ProcSend        0x0A
  114.  
  115. /*
  116.  * Status bits.
  117.  */
  118. #define VADD    0x80
  119. #define FM    0x80
  120. #define EOM    0x40
  121.  
  122. /*
  123.  * SCSI Command Sense Keys:
  124.  */
  125.                 /* QTA (Quantum,Tandberg,Adaptec) */
  126. #define NoSense        0x0    /* QT  No sense code / Invalid command (A) */
  127. #define RecoveredData    0x1    /* Q   Recovered data error */
  128. #define NotReady    0x2    /* QT  Unit not ready */
  129. #define MediaError    0x3    /* QT  Unrecoverable data error */
  130. #define Hardware    0x4    /* QT  Hardware error */
  131. #define IllegalRequest    0x5    /* QTA Illegal parameter */
  132. #define UnitAttention    0x6    /* QTA Reset, Media changed, Mode changed, ..*/
  133. #define WriteProtected    0x7    /*  T  Write protected */
  134. #define BlankCheck    0x8    /*  T  Logical end-of-media detected */
  135. #define VendorUnique    0x9    /* Q   Look at additional sense code */
  136. #define CopyAborted    0xA    /*  T  Error in copy command */
  137. #define AbortedCommand    0xB    /* QTA Aborted command / Parity error (A) */
  138. #define Reserved_SC_1    0xC    /*     ? */
  139. #define MediaOverflow    0xD    /*  T  Beyond physical end-of-media */
  140. #define Miscompare    0xE    /*  T  Verification failed */
  141. #define Reserved_SC_2    0xF    /*     ? */
  142.  
  143. /*
  144.  * SCSI Status Byte:
  145.  */
  146. #define GoodStatus        0x00    /* Command successful, good status */
  147. #define CheckStatus        0x02    /* Command failed, check status */
  148. #define ConditionMet        0x04    /* Search/prefetch operation satisfied */
  149. #define BusyStatus        0x08    /* Drive busy */
  150. #define Intermediate        0x10    /* Linked command successful */
  151. #define IntermediateCondMet    0x14    /* Intermediate + ConditionMet */
  152. #define ReservationConflict    0x18    /* Reservation conflict */
  153. #define CommandTerminated    0x22    /* Terminated by TERMINATE I/O PROCESS */
  154. #define QueueFull        0x28    /* Command Queue is full */
  155.  
  156. /************************************************************************
  157.  *            S C S I   C o m m a n d s            *
  158.  ************************************************************************/
  159.  
  160. #ifndef ASM_DECL
  161.  
  162. #if OS2 >= 2 || defined(unix)
  163.   #define _far
  164. #endif
  165.  
  166. extern void scsi_init(void);
  167. extern void scsi_name(char *name);
  168. extern void scsi_file(int fd);
  169. extern void scsi_term(void);
  170.  
  171. extern void * scsi_alloc(void);        /* allocate control block */
  172. extern void   scsi_free(void *);    /* deallocate control block */
  173.  
  174. extern void scsi_trace(int);
  175.  
  176. extern int scsi_cmd (int target, int lun,
  177.             void *cdb, int cdb_len, void *sense, int sense_len,
  178.             void _far *data, long data_len,
  179.             int readflag);
  180.  
  181. extern int scsi_start (void *dcb,
  182.             int target, int lun,
  183.             void *cdb, int cdb_len, int sense_len,
  184.             void _far *data, long data_len,
  185.             int readflag);
  186. extern int scsi_wait (void *dcb, void *sense, int wait);
  187.  
  188. extern int scsi_reset (int target, int lun, int bus);
  189.  
  190. extern long scsi_get_blocksize (int target, int lun);
  191. extern long scsi_set_blocksize (int target, int lun, long size);
  192. extern int scsi_set_trace (int level);
  193.  
  194. /*
  195.  * Sense data mode:
  196.  */
  197. typedef enum SenseMode {
  198.     Sensekey    = 0,
  199.     TDC3600        = 1,
  200.     SCSI2        = 2
  201. } SenseMode;
  202.  
  203. extern SenseMode    senseMode;
  204.  
  205. typedef struct ErrorTable {
  206.     unsigned    code;
  207.     char        *text;
  208. } ErrorTable;
  209.  
  210. extern char *        senseTab[];
  211. extern ErrorTable    targetStatusTab[];
  212. extern ErrorTable    tdc3600ercd[];
  213. extern ErrorTable    tdc3600xercd[];
  214. extern ErrorTable    scsi2asc[];
  215. extern ErrorTable    addErrorTab[];
  216.  
  217. extern char *    scsi_error (int);
  218. extern char *    find_error (ErrorTable *, unsigned);
  219.  
  220. #define ErrorClass(x)    ((x) & ~0x07FF)
  221. #define ErrorCode(x)    ((x) & 0x07FF)
  222. #define NoError        0            /* completed without error */
  223. #define SenseKey    (-0x8000L+0x0800)    /* SCSI sense key code, see below */
  224. #define ExtendedError    (-0x8000L+0x1000)    /* SCSI sense error class + error code */
  225.                         /* only if standard sense block received */
  226. #define StatusError    (-0x8000L+0x1800)    /* SCSI status byte */
  227. #define DriverError    (-0x8000L+0x2000)    /* Driver error code */
  228. #define SystemError    (-0x8000L+0x2800)    /* System error code */
  229. #define HostError    (-0x8000L+0x3000)    /* host adapter error */
  230. #define UnknownError    (-0x8000L+0x3800)    /* Cannot find error code */
  231. #define TapeError    (-0x8000L+0x4000)    /* -> tape.h */
  232. #define MappedError    (-0x8000L+0x4800)    /* Packed ADD error codes */
  233. #define ComeAgain    -1            /* Command not yet completed */
  234.  
  235. #endif
  236.