PageRenderTime 44ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/edk2/EdkCompatibilityPkg/Foundation/Include/IndustryStandard/scsi.h

https://gitlab.com/envieidoc/Clover
C Header | 314 lines | 214 code | 23 blank | 77 comment | 0 complexity | bdd2e68ef25d93b90aa2321ec65ec4e2 MD5 | raw file
  1. /*++
  2. Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>
  3. This program and the accompanying materials
  4. are licensed and made available under the terms and conditions of the BSD License
  5. which accompanies this distribution. The full text of the license may be found at
  6. http://opensource.org/licenses/bsd-license.php
  7. THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
  8. WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
  9. Module Name:
  10. scsi.h
  11. Abstract:
  12. support for SCSI standard
  13. Revision History
  14. --*/
  15. #ifndef _SCSI_H
  16. #define _SCSI_H
  17. //
  18. // SCSI command OP Code
  19. //
  20. //
  21. // Commands for all device types
  22. //
  23. #define EFI_SCSI_OP_CHANGE_DEFINITION 0x40
  24. #define EFI_SCSI_OP_COMPARE 0x39
  25. #define EFI_SCSI_OP_COPY 0x18
  26. #define EFI_SCSI_OP_COPY_VERIFY 0x3a
  27. #define EFI_SCSI_OP_INQUIRY 0x12
  28. #define EFI_SCSI_OP_LOG_SELECT 0x4c
  29. #define EFI_SCSI_OP_LOG_SENSE 0x4d
  30. #define EFI_SCSI_OP_MODE_SEL6 0x15
  31. #define EFI_SCSI_OP_MODE_SEL10 0x55
  32. #define EFI_SCSI_OP_MODE_SEN6 0x1a
  33. #define EFI_SCSI_OP_MODE_SEN10 0x5a
  34. #define EFI_SCSI_OP_READ_BUFFER 0x3c
  35. #define EFI_SCSI_OP_REQUEST_SENSE 0x03
  36. #define EFI_SCSI_OP_SEND_DIAG 0x1d
  37. #define EFI_SCSI_OP_TEST_UNIT_READY 0x00
  38. #define EFI_SCSI_OP_WRITE_BUFF 0x3b
  39. //
  40. // Commands unique to Direct Access Devices
  41. //
  42. #define EFI_SCSI_OP_COMPARE 0x39
  43. #define EFI_SCSI_OP_FORMAT 0x04
  44. #define EFI_SCSI_OP_LOCK_UN_CACHE 0x36
  45. #define EFI_SCSI_OP_PREFETCH 0x34
  46. #define EFI_SCSI_OP_MEDIA_REMOVAL 0x1e
  47. #define EFI_SCSI_OP_READ6 0x08
  48. #define EFI_SCSI_OP_READ10 0x28
  49. #define EFI_SCSI_OP_READ_CAPACITY 0x25
  50. #define EFI_SCSI_OP_READ_CAPACITY16 0x9e
  51. #define EFI_SCSI_OP_READ_DEFECT 0x37
  52. #define EFI_SCSI_OP_READ_LONG 0x3e
  53. #define EFI_SCSI_OP_REASSIGN_BLK 0x07
  54. #define EFI_SCSI_OP_RECEIVE_DIAG 0x1c
  55. #define EFI_SCSI_OP_RELEASE 0x17
  56. #define EFI_SCSI_OP_REZERO 0x01
  57. #define EFI_SCSI_OP_SEARCH_DATA_E 0x31
  58. #define EFI_SCSI_OP_SEARCH_DATA_H 0x30
  59. #define EFI_SCSI_OP_SEARCH_DATA_L 0x32
  60. #define EFI_SCSI_OP_SEEK6 0x0b
  61. #define EFI_SCSI_OP_SEEK10 0x2b
  62. #define EFI_SCSI_OP_SEND_DIAG 0x1d
  63. #define EFI_SCSI_OP_SET_LIMIT 0x33
  64. #define EFI_SCSI_OP_START_STOP_UNIT 0x1b
  65. #define EFI_SCSI_OP_SYNC_CACHE 0x35
  66. #define EFI_SCSI_OP_VERIFY 0x2f
  67. #define EFI_SCSI_OP_WRITE6 0x0a
  68. #define EFI_SCSI_OP_WRITE10 0x2a
  69. #define EFI_SCSI_OP_WRITE_VERIFY 0x2e
  70. #define EFI_SCSI_OP_WRITE_LONG 0x3f
  71. #define EFI_SCSI_OP_WRITE_SAME 0x41
  72. //
  73. // Commands unique to Sequential Access Devices
  74. //
  75. #define EFI_SCSI_OP_ERASE 0x19
  76. #define EFI_SCSI_OP_LOAD_UNLOAD 0x1b
  77. #define EFI_SCSI_OP_LOCATE 0x2b
  78. #define EFI_SCSI_OP_READ_BLOCK_LIMIT 0x05
  79. #define EFI_SCSI_OP_READ_POS 0x34
  80. #define EFI_SCSI_OP_READ_REVERSE 0x0f
  81. #define EFI_SCSI_OP_RECOVER_BUF_DATA 0x14
  82. #define EFI_SCSI_OP_RESERVE_UNIT 0x16
  83. #define EFI_SCSI_OP_REWIND 0x01
  84. #define EFI_SCSI_OP_SPACE 0x11
  85. #define EFI_SCSI_OP_VERIFY_TAPE 0x13
  86. #define EFI_SCSI_OP_WRITE_FILEMARK 0x10
  87. //
  88. // Commands unique to Printer Devices
  89. //
  90. #define EFI_SCSI_OP_PRINT 0x0a
  91. #define EFI_SCSI_OP_SLEW_PRINT 0x0b
  92. #define EFI_SCSI_OP_STOP_PRINT 0x1b
  93. #define EFI_SCSI_OP_SYNC_BUFF 0x10
  94. //
  95. // Commands unique to Processor Devices
  96. //
  97. #define EFI_SCSI_OP_RECEIVE 0x08
  98. #define EFI_SCSI_OP_SEND 0x0a
  99. //
  100. // Commands unique to Write-Once Devices
  101. //
  102. #define EFI_SCSI_OP_MEDIUM_SCAN 0x38
  103. #define EFI_SCSI_OP_SEARCH_DAT_E10 0x31
  104. #define EFI_SCSI_OP_SEARCH_DAT_E12 0xb1
  105. #define EFI_SCSI_OP_SEARCH_DAT_H10 0x30
  106. #define EFI_SCSI_OP_SEARCH_DAT_H12 0xb0
  107. #define EFI_SCSI_OP_SEARCH_DAT_L10 0x32
  108. #define EFI_SCSI_OP_SEARCH_DAT_L12 0xb2
  109. #define EFI_SCSI_OP_SET_LIMIT10 0x33
  110. #define EFI_SCSI_OP_SET_LIMIT12 0xb3
  111. #define EFI_SCSI_OP_VERIFY10 0x2f
  112. #define EFI_SCSI_OP_VERIFY12 0xaf
  113. #define EFI_SCSI_OP_WRITE12 0xaa
  114. #define EFI_SCSI_OP_WRITE_VERIFY10 0x2e
  115. #define EFI_SCSI_OP_WRITE_VERIFY12 0xae
  116. //
  117. // Commands unique to CD-ROM Devices
  118. //
  119. #define EFI_SCSI_OP_PLAY_AUD_10 0x45
  120. #define EFI_SCSI_OP_PLAY_AUD_12 0xa5
  121. #define EFI_SCSI_OP_PLAY_AUD_MSF 0x47
  122. #define EFI_SCSI_OP_PLAY_AUD_TKIN 0x48
  123. #define EFI_SCSI_OP_PLAY_TK_REL10 0x49
  124. #define EFI_SCSI_OP_PLAY_TK_REL12 0xa9
  125. #define EFI_SCSI_OP_READ_CD_CAPACITY 0x25
  126. #define EFI_SCSI_OP_READ_HEADER 0x44
  127. #define EFI_SCSI_OP_READ_SUB_CHANNEL 0x42
  128. #define EFI_SCSI_OP_READ_TOC 0x43
  129. //
  130. // Commands unique to Scanner Devices
  131. //
  132. #define EFI_SCSI_OP_GET_DATABUFF_STAT 0x34
  133. #define EFI_SCSI_OP_GET_WINDOW 0x25
  134. #define EFI_SCSI_OP_OBJECT_POS 0x31
  135. #define EFI_SCSI_OP_SCAN 0x1b
  136. #define EFI_SCSI_OP_SET_WINDOW 0x24
  137. //
  138. // Commands unique to Optical Memory Devices
  139. //
  140. #define EFI_SCSI_OP_UPDATE_BLOCK 0x3d
  141. //
  142. // Commands unique to Medium Changer Devices
  143. //
  144. #define EFI_SCSI_OP_EXCHANGE_MEDIUM 0xa6
  145. #define EFI_SCSI_OP_INIT_ELEMENT_STAT 0x07
  146. #define EFI_SCSI_OP_POS_TO_ELEMENT 0x2b
  147. #define EFI_SCSI_OP_REQUEST_VE_ADDR 0xb5
  148. #define EFI_SCSI_OP_SEND_VOL_TAG 0xb6
  149. //
  150. // Commands unique to Communition Devices
  151. //
  152. #define EFI_SCSI_OP_GET_MESSAGE6 0x08
  153. #define EFI_SCSI_OP_GET_MESSAGE10 0x28
  154. #define EFI_SCSI_OP_GET_MESSAGE12 0xa8
  155. #define EFI_SCSI_OP_SEND_MESSAGE6 0x0a
  156. #define EFI_SCSI_OP_SEND_MESSAGE10 0x2a
  157. #define EFI_SCSI_OP_SEND_MESSAGE12 0xaa
  158. //
  159. // SCSI Data Transfer Direction
  160. //
  161. #define EFI_SCSI_DATA_IN 0
  162. #define EFI_SCSI_DATA_OUT 1
  163. //
  164. // Peripheral Device Type Definitions
  165. //
  166. #define EFI_SCSI_TYPE_DISK 0x00 // Disk device
  167. #define EFI_SCSI_TYPE_TAPE 0x01 // Tape device
  168. #define EFI_SCSI_TYPE_PRINTER 0x02 // Printer
  169. #define EFI_SCSI_TYPE_PROCESSOR 0x03 // Processor
  170. #define EFI_SCSI_TYPE_WORM 0x04 // Write-once read-multiple
  171. #define EFI_SCSI_TYPE_CDROM 0x05 // CD-ROM device
  172. #define EFI_SCSI_TYPE_SCANNER 0x06 // Scanner device
  173. #define EFI_SCSI_TYPE_OPTICAL 0x07 // Optical memory device
  174. #define EFI_SCSI_TYPE_MEDIUMCHANGER 0x08 // Medium Changer device
  175. #define EFI_SCSI_TYPE_COMMUNICATION 0x09 // Communications device
  176. #define EFI_SCSI_TYPE_RESERVED_LOW 0x0A // Reserved (low)
  177. #define EFI_SCSI_TYPE_RESERVED_HIGH 0x1E // Reserved (high)
  178. #define EFI_SCSI_TYPE_UNKNOWN 0x1F // Unknown or no device type
  179. #pragma pack(1)
  180. //
  181. // Data structures for scsi command use
  182. //
  183. typedef struct {
  184. UINT8 Peripheral_Type : 5;
  185. UINT8 Peripheral_Qualifier : 3;
  186. UINT8 DeviceType_Modifier : 7;
  187. UINT8 RMB : 1;
  188. UINT8 Version;
  189. UINT8 Response_Data_Format;
  190. UINT8 Addnl_Length;
  191. UINT8 Reserved_5_95[95 - 5 + 1];
  192. } EFI_SCSI_INQUIRY_DATA;
  193. typedef struct {
  194. UINT8 Error_Code : 7;
  195. UINT8 Valid : 1;
  196. UINT8 Segment_Number;
  197. UINT8 Sense_Key : 4;
  198. UINT8 Reserved_21 : 1;
  199. UINT8 ILI : 1;
  200. UINT8 Reserved_22 : 2;
  201. UINT8 Information_3_6[4];
  202. UINT8 Addnl_Sense_Length; // n - 7
  203. UINT8 Vendor_Specific_8_11[4];
  204. UINT8 Addnl_Sense_Code; // mandatory
  205. UINT8 Addnl_Sense_Code_Qualifier; // mandatory
  206. UINT8 Field_Replaceable_Unit_Code; // optional
  207. UINT8 Reserved_15_17[3];
  208. } EFI_SCSI_SENSE_DATA;
  209. typedef struct {
  210. UINT8 LastLba3;
  211. UINT8 LastLba2;
  212. UINT8 LastLba1;
  213. UINT8 LastLba0;
  214. UINT8 BlockSize3;
  215. UINT8 BlockSize2;
  216. UINT8 BlockSize1;
  217. UINT8 BlockSize0;
  218. } EFI_SCSI_DISK_CAPACITY_DATA;
  219. typedef struct {
  220. UINT8 LastLba7;
  221. UINT8 LastLba6;
  222. UINT8 LastLba5;
  223. UINT8 LastLba4;
  224. UINT8 LastLba3;
  225. UINT8 LastLba2;
  226. UINT8 LastLba1;
  227. UINT8 LastLba0;
  228. UINT8 BlockSize3;
  229. UINT8 BlockSize2;
  230. UINT8 BlockSize1;
  231. UINT8 BlockSize0;
  232. UINT8 Protection;
  233. UINT8 LogicPerPhysical;
  234. UINT8 LowestAlignLogic2;
  235. UINT8 LowestAlignLogic1;
  236. UINT8 Reserved[16];
  237. } EFI_SCSI_DISK_CAPACITY_DATA16;
  238. #pragma pack()
  239. //
  240. // Sense Key
  241. //
  242. #define EFI_SCSI_REQUEST_SENSE_ERROR (0x70)
  243. #define EFI_SCSI_SK_NO_SENSE (0x0)
  244. #define EFI_SCSI_SK_RECOVERY_ERROR (0x1)
  245. #define EFI_SCSI_SK_NOT_READY (0x2)
  246. #define EFI_SCSI_SK_MEDIUM_ERROR (0x3)
  247. #define EFI_SCSI_SK_HARDWARE_ERROR (0x4)
  248. #define EFI_SCSI_SK_ILLEGAL_REQUEST (0x5)
  249. #define EFI_SCSI_SK_UNIT_ATTENTION (0x6)
  250. #define EFI_SCSI_SK_DATA_PROTECT (0x7)
  251. #define EFI_SCSI_SK_BLANK_CHECK (0x8)
  252. #define EFI_SCSI_SK_VENDOR_SPECIFIC (0x9)
  253. #define EFI_SCSI_SK_RESERVED_A (0xA)
  254. #define EFI_SCSI_SK_ABORT (0xB)
  255. #define EFI_SCSI_SK_RESERVED_C (0xC)
  256. #define EFI_SCSI_SK_OVERFLOW (0xD)
  257. #define EFI_SCSI_SK_MISCOMPARE (0xE)
  258. #define EFI_SCSI_SK_RESERVED_F (0xF)
  259. //
  260. // Additional Sense Codes
  261. //
  262. #define EFI_SCSI_ASC_NOT_READY (0x04)
  263. #define EFI_SCSI_ASC_MEDIA_ERR1 (0x10)
  264. #define EFI_SCSI_ASC_MEDIA_ERR2 (0x11)
  265. #define EFI_SCSI_ASC_MEDIA_ERR3 (0x14)
  266. #define EFI_SCSI_ASC_MEDIA_ERR4 (0x30)
  267. #define EFI_SCSI_ASC_MEDIA_UPSIDE_DOWN (0x06)
  268. #define EFI_SCSI_ASC_INVALID_CMD (0x20)
  269. #define EFI_SCSI_ASC_LBA_OUT_OF_RANGE (0x21)
  270. #define EFI_SCSI_ASC_INVALID_FIELD (0x24)
  271. #define EFI_SCSI_ASC_WRITE_PROTECTED (0x27)
  272. #define EFI_SCSI_ASC_MEDIA_CHANGE (0x28)
  273. #define EFI_SCSI_ASC_RESET (0x29) /* Power On Reset or Bus Reset occurred */
  274. #define EFI_SCSI_ASC_ILLEGAL_FIELD (0x26)
  275. #define EFI_SCSI_ASC_NO_MEDIA (0x3A)
  276. #define EFI_SCSI_ASC_ILLEGAL_MODE_FOR_THIS_TRACK (0x64)
  277. //
  278. // Additional Sense Code Qualifier
  279. //
  280. #define EFI_SCSI_ASCQ_IN_PROGRESS (0x01)
  281. //
  282. // Max bytes needed to represent ID of a SCSI device
  283. //
  284. #define EFI_SCSI_TARGET_MAX_BYTES (0x10)
  285. #endif