1
0

SCSIDEFS.H 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. //**********************************************************************
  2. //
  3. // Name: SCSIDEFS.H
  4. //
  5. // Description: SCSI definitions ('C' Language)
  6. //
  7. //**********************************************************************
  8. //**********************************************************************
  9. // %%% TARGET STATUS VALUES %%%
  10. //**********************************************************************
  11. #define STATUS_GOOD 0x00 // Status Good
  12. #define STATUS_CHKCOND 0x02 // Check Condition
  13. #define STATUS_CONDMET 0x04 // Condition Met
  14. #define STATUS_BUSY 0x08 // Busy
  15. #define STATUS_INTERM 0x10 // Intermediate
  16. #define STATUS_INTCDMET 0x14 // Intermediate-condition met
  17. #define STATUS_RESCONF 0x18 // Reservation conflict
  18. #define STATUS_COMTERM 0x22 // Command Terminated
  19. #define STATUS_QFULL 0x28 // Queue full
  20. //**********************************************************************
  21. // %%% SCSI MISCELLANEOUS EQUATES %%%
  22. //**********************************************************************
  23. #define MAXLUN 7 // Maximum Logical Unit Id
  24. #define MAXTARG 7 // Maximum Target Id
  25. #define MAX_SCSI_LUNS 64 // Maximum Number of SCSI LUNs
  26. #define MAX_NUM_HA 8 // Maximum Number of SCSI HA's
  27. ///\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
  28. //
  29. // %%% SCSI COMMAND OPCODES %%%
  30. //
  31. ///\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
  32. //**********************************************************************
  33. // %%% Commands for all Device Types %%%
  34. //**********************************************************************
  35. #define SCSI_CHANGE_DEF 0x40 // Change Definition (Optional)
  36. #define SCSI_COMPARE 0x39 // Compare (O)
  37. #define SCSI_COPY 0x18 // Copy (O)
  38. #define SCSI_COP_VERIFY 0x3A // Copy and Verify (O)
  39. #define SCSI_INQUIRY 0x12 // Inquiry (MANDATORY)
  40. #define SCSI_LOG_SELECT 0x4C // Log Select (O)
  41. #define SCSI_LOG_SENSE 0x4D // Log Sense (O)
  42. #define SCSI_MODE_SEL6 0x15 // Mode Select 6-byte (Device Specific)
  43. #define SCSI_MODE_SEL10 0x55 // Mode Select 10-byte (Device Specific)
  44. #define SCSI_MODE_SEN6 0x1A // Mode Sense 6-byte (Device Specific)
  45. #define SCSI_MODE_SEN10 0x5A // Mode Sense 10-byte (Device Specific)
  46. #define SCSI_READ_BUFF 0x3C // Read Buffer (O)
  47. #define SCSI_REQ_SENSE 0x03 // Request Sense (MANDATORY)
  48. #define SCSI_SEND_DIAG 0x1D // Send Diagnostic (O)
  49. #define SCSI_RCV_DIAG 0x1C // Receive Diagnostic Results (O)
  50. #define SCSI_TST_U_RDY 0x00 // Test Unit Ready (MANDATORY)
  51. #define SCSI_WRITE_BUFF 0x3B // Write Buffer (O)
  52. //**********************************************************************
  53. // %%% Commands Unique to Direct Access Devices %%%
  54. //**********************************************************************
  55. #define SCSI_FORMAT 0x04 // Format Unit (MANDATORY)
  56. #define SCSI_LCK_UN_CAC 0x36 // Lock Unlock Cache (O)
  57. #define SCSI_PREFETCH 0x34 // Prefetch (O)
  58. #define SCSI_MED_REMOVL 0x1E // Prevent/Allow medium Removal (O)
  59. #define SCSI_READ6 0x08 // Read 6-byte (MANDATORY)
  60. #define SCSI_READ10 0x28 // Read 10-byte (MANDATORY)
  61. #define SCSI_RD_CAPAC 0x25 // Read Capacity (MANDATORY)
  62. #define SCSI_RD_DEFECT 0x37 // Read Defect Data (O)
  63. #define SCSI_READ_LONG 0x3E // Read Long (O)
  64. #define SCSI_REASS_BLK 0x07 // Reassign Blocks (O)
  65. #define SCSI_RELEASE 0x17 // Release Unit (MANDATORY)
  66. #define SCSI_RESERVE 0x16 // Reserve Unit (MANDATORY)
  67. #define SCSI_REZERO 0x01 // Rezero Unit (O)
  68. #define SCSI_SRCH_DAT_E 0x31 // Search Data Equal (O)
  69. #define SCSI_SRCH_DAT_H 0x30 // Search Data High (O)
  70. #define SCSI_SRCH_DAT_L 0x32 // Search Data Low (O)
  71. #define SCSI_SEEK6 0x0B // Seek 6-Byte (O)
  72. #define SCSI_SEEK10 0x2B // Seek 10-Byte (O)
  73. #define SCSI_SET_LIMIT 0x33 // Set Limits (O)
  74. #define SCSI_START_STP 0x1B // Start/Stop Unit (O)
  75. #define SCSI_SYNC_CACHE 0x35 // Synchronize Cache (O)
  76. #define SCSI_VERIFY 0x2F // Verify (O)
  77. #define SCSI_WRITE6 0x0A // Write 6-Byte (MANDATORY)
  78. #define SCSI_WRITE10 0x2A // Write 10-Byte (MANDATORY)
  79. #define SCSI_WRT_VERIFY 0x2E // Write and Verify (O)
  80. #define SCSI_WRITE_LONG 0x3F // Write Long (O)
  81. #define SCSI_WRITE_SAME 0x41 // Write Same (O)
  82. //**********************************************************************
  83. // %%% Commands Unique to Sequential Access Devices %%%
  84. //**********************************************************************
  85. #define SCSI_ERASE 0x19 // Erase (MANDATORY)
  86. #define SCSI_LOAD_UN 0x1B // Load/Unload (O)
  87. #define SCSI_LOCATE 0x2B // Locate (O)
  88. #define SCSI_RD_BLK_LIM 0x05 // Read Block Limits (MANDATORY)
  89. #define SCSI_READ_POS 0x34 // Read Position (O)
  90. #define SCSI_READ_REV 0x0F // Read Reverse (O)
  91. #define SCSI_REC_BF_DAT 0x14 // Recover Buffer Data (O)
  92. #define SCSI_REWIND 0x01 // Rewind (MANDATORY)
  93. #define SCSI_SPACE 0x11 // Space (MANDATORY)
  94. #define SCSI_VERIFY_T 0x13 // Verify (Tape) (O)
  95. #define SCSI_WRT_FILE 0x10 // Write Filemarks (MANDATORY)
  96. #define SCSI_PARTITION 0x0D // DAT/QFA Partition Select
  97. #define SCSI_READWRITE 0x06 // Set Read/Write Parameters
  98. //**********************************************************************
  99. // %%% Commands Unique to Printer Devices %%%
  100. //**********************************************************************
  101. #define SCSI_PRINT 0x0A // Print (MANDATORY)
  102. #define SCSI_SLEW_PNT 0x0B // Slew and Print (O)
  103. #define SCSI_STOP_PNT 0x1B // Stop Print (O)
  104. #define SCSI_SYNC_BUFF 0x10 // Synchronize Buffer (O)
  105. //**********************************************************************
  106. // %%% Commands Unique to Processor Devices %%%
  107. //**********************************************************************
  108. #define SCSI_RECEIVE 0x08 // Receive (O)
  109. #define SCSI_SEND 0x0A // Send (O)
  110. //**********************************************************************
  111. // %%% Commands Unique to Write-Once Devices %%%
  112. //**********************************************************************
  113. #define SCSI_MEDIUM_SCN 0x38 // Medium Scan (O)
  114. #define SCSI_SRCHDATE10 0x31 // Search Data Equal 10-Byte (O)
  115. #define SCSI_SRCHDATE12 0xB1 // Search Data Equal 12-Byte (O)
  116. #define SCSI_SRCHDATH10 0x30 // Search Data High 10-Byte (O)
  117. #define SCSI_SRCHDATH12 0xB0 // Search Data High 12-Byte (O)
  118. #define SCSI_SRCHDATL10 0x32 // Search Data Low 10-Byte (O)
  119. #define SCSI_SRCHDATL12 0xB2 // Search Data Low 12-Byte (O)
  120. #define SCSI_SET_LIM_10 0x33 // Set Limits 10-Byte (O)
  121. #define SCSI_SET_LIM_12 0xB3 // Set Limits 10-Byte (O)
  122. #define SCSI_VERIFY10 0x2F // Verify 10-Byte (O)
  123. #define SCSI_VERIFY12 0xAF // Verify 12-Byte (O)
  124. #define SCSI_WRITE12 0xAA // Write 12-Byte (O)
  125. #define SCSI_WRT_VER10 0x2E // Write and Verify 10-Byte (O)
  126. #define SCSI_WRT_VER12 0xAE // Write and Verify 12-Byte (O)
  127. //**********************************************************************
  128. // %%% Commands Unique to CD-ROM Devices %%%
  129. //**********************************************************************
  130. #define SCSI_PLAYAUD_10 0x45 // Play Audio 10-Byte (O)
  131. #define SCSI_PLAYAUD_12 0xA5 // Play Audio 12-Byte 12-Byte (O)
  132. #define SCSI_PLAYAUDMSF 0x47 // Play Audio MSF (O)
  133. #define SCSI_PLAYA_TKIN 0x48 // Play Audio Track/Index (O)
  134. #define SCSI_PLYTKREL10 0x49 // Play Track Relative 10-Byte (O)
  135. #define SCSI_PLYTKREL12 0xA9 // Play Track Relative 12-Byte (O)
  136. #define SCSI_READCDCAP 0x25 // Read CD-ROM Capacity (MANDATORY)
  137. #define SCSI_READHEADER 0x44 // Read Header (O)
  138. #define SCSI_SUBCHANNEL 0x42 // Read Subchannel (O)
  139. #define SCSI_READ_TOC 0x43 // Read TOC (O)
  140. //**********************************************************************
  141. // %%% Commands Unique to Scanner Devices %%%
  142. //**********************************************************************
  143. #define SCSI_GETDBSTAT 0x34 // Get Data Buffer Status (O)
  144. #define SCSI_GETWINDOW 0x25 // Get Window (O)
  145. #define SCSI_OBJECTPOS 0x31 // Object Position (O)
  146. #define SCSI_SCAN 0x1B // Scan (O)
  147. #define SCSI_SETWINDOW 0x24 // Set Window (MANDATORY)
  148. //**********************************************************************
  149. // %%% Commands Unique to Optical Memory Devices %%%
  150. //**********************************************************************
  151. #define SCSI_UpdateBlk 0x3D // Update Block (O)
  152. //**********************************************************************
  153. // %%% Commands Unique to Medium Changer Devices %%%
  154. //**********************************************************************
  155. #define SCSI_EXCHMEDIUM 0xA6 // Exchange Medium (O)
  156. #define SCSI_INITELSTAT 0x07 // Initialize Element Status (O)
  157. #define SCSI_POSTOELEM 0x2B // Position to Element (O)
  158. #define SCSI_REQ_VE_ADD 0xB5 // Request Volume Element Address (O)
  159. #define SCSI_SENDVOLTAG 0xB6 // Send Volume Tag (O)
  160. //**********************************************************************
  161. // %%% Commands Unique to Communication Devices %%%
  162. //**********************************************************************
  163. #define SCSI_GET_MSG_6 0x08 // Get Message 6-Byte (MANDATORY)
  164. #define SCSI_GET_MSG_10 0x28 // Get Message 10-Byte (O)
  165. #define SCSI_GET_MSG_12 0xA8 // Get Message 12-Byte (O)
  166. #define SCSI_SND_MSG_6 0x0A // Send Message 6-Byte (MANDATORY)
  167. #define SCSI_SND_MSG_10 0x2A // Send Message 10-Byte (O)
  168. #define SCSI_SND_MSG_12 0xAA // Send Message 12-Byte (O)
  169. ///\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
  170. //
  171. // %%% END OF SCSI COMMAND OPCODES %%%
  172. //
  173. ///\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
  174. //**********************************************************************
  175. // %%% Request Sense Data Format %%%
  176. //**********************************************************************
  177. typedef struct {
  178. BYTE ErrorCode; // Error Code (70H or 71H)
  179. BYTE SegmentNum; // Number of current segment descriptor
  180. BYTE SenseKey; // Sense Key(See bit definitions too)
  181. BYTE InfoByte0; // Information MSB
  182. BYTE InfoByte1; // Information MID
  183. BYTE InfoByte2; // Information MID
  184. BYTE InfoByte3; // Information LSB
  185. BYTE AddSenLen; // Additional Sense Length
  186. BYTE ComSpecInf0; // Command Specific Information MSB
  187. BYTE ComSpecInf1; // Command Specific Information MID
  188. BYTE ComSpecInf2; // Command Specific Information MID
  189. BYTE ComSpecInf3; // Command Specific Information LSB
  190. BYTE AddSenseCode; // Additional Sense Code
  191. BYTE AddSenQual; // Additional Sense Code Qualifier
  192. // BYTE FieldRepUCode; // Field Replaceable Unit Code
  193. // BYTE SenKeySpec15; // Sense Key Specific 15th byte
  194. // BYTE SenKeySpec16; // Sense Key Specific 16th byte
  195. // BYTE SenKeySpec17; // Sense Key Specific 17th byte
  196. // BYTE AddSenseBytes; // Additional Sense Bytes
  197. } SENSE_DATA_FMT;
  198. //**********************************************************************
  199. // %%% REQUEST SENSE ERROR CODE %%%
  200. //**********************************************************************
  201. #define SERROR_CURRENT 0x70 // Current Errors
  202. #define SERROR_DEFERED 0x71 // Deferred Errors
  203. //**********************************************************************
  204. // %%% REQUEST SENSE BIT DEFINITIONS %%%
  205. //**********************************************************************
  206. #define SENSE_VALID 0x80 // Byte 0 Bit 7
  207. #define SENSE_FILEMRK 0x80 // Byte 2 Bit 7
  208. #define SENSE_EOM 0x40 // Byte 2 Bit 6
  209. #define SENSE_ILI 0x20 // Byte 2 Bit 5
  210. //**********************************************************************
  211. // %%% REQUEST SENSE SENSE KEY DEFINITIONS %%%
  212. //**********************************************************************
  213. #define KEY_NOSENSE 0x00 // No Sense
  214. #define KEY_RECERROR 0x01 // Recovered Error
  215. #define KEY_NOTREADY 0x02 // Not Ready
  216. #define KEY_MEDIUMERR 0x03 // Medium Error
  217. #define KEY_HARDERROR 0x04 // Hardware Error
  218. #define KEY_ILLGLREQ 0x05 // Illegal Request
  219. #define KEY_UNITATT 0x06 // Unit Attention
  220. #define KEY_DATAPROT 0x07 // Data Protect
  221. #define KEY_BLANKCHK 0x08 // Blank Check
  222. #define KEY_VENDSPEC 0x09 // Vendor Specific
  223. #define KEY_COPYABORT 0x0A // Copy Abort
  224. #define KEY_ABORT 0x0B // Abort
  225. #define KEY_EQUAL 0x0C // Equal (Search)
  226. #define KEY_VOLOVRFLW 0x0D // Volume Overflow
  227. #define KEY_MISCOMP 0x0E // Miscompare (Search)
  228. #define KEY_RESERVED 0x0F // Reserved
  229. //**********************************************************************
  230. // %%% PERIPHERAL DEVICE TYPE DEFINITIONS %%%
  231. //**********************************************************************
  232. #define DTYPE_DASD 0x00 // Disk Device
  233. #define DTYPE_SEQD 0x01 // Tape Device
  234. #define DTYPE_PRNT 0x02 // Printer
  235. #define DTYPE_PROC 0x03 // Processor
  236. #define DTYPE_WORM 0x04 // Write-once read-multiple
  237. #define DTYPE_CROM 0x05 // CD-ROM device
  238. #define DTYPE_SCAN 0x06 // Scanner device
  239. #define DTYPE_OPTI 0x07 // Optical memory device
  240. #define DTYPE_JUKE 0x08 // Medium Changer device
  241. #define DTYPE_COMM 0x09 // Communications device
  242. #define DTYPE_RESL 0x0A // Reserved (low)
  243. #define DTYPE_RESH 0x1E // Reserved (high)
  244. #define DTYPE_UNKNOWN 0x1F // Unknown or no device type
  245. //**********************************************************************
  246. // %%% ANSI APPROVED VERSION DEFINITIONS %%%
  247. //**********************************************************************
  248. #define ANSI_MAYBE 0x0 // Device may or may not be ANSI approved stand
  249. #define ANSI_SCSI1 0x1 // Device complies to ANSI X3.131-1986 (SCSI-1)
  250. #define ANSI_SCSI2 0x2 // Device complies to SCSI-2
  251. #define ANSI_RESLO 0x3 // Reserved (low)
  252. #define ANSI_RESHI 0x7 // Reserved (high)