]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Include/IndustryStandard/Scsi.h
MdePkg: Clean up source files
[mirror_edk2.git] / MdePkg / Include / IndustryStandard / Scsi.h
CommitLineData
a7ed1e2e 1/** @file\r
4135253b 2 Support for SCSI-2 standard\r
a7ed1e2e 3\r
9095d37b
LG
4 Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
5 This program and the accompanying materials\r
6 are licensed and made available under the terms and conditions of the BSD License\r
7 which accompanies this distribution. The full text of the license may be found at\r
8 http://opensource.org/licenses/bsd-license.php\r
a7ed1e2e 9\r
9095d37b
LG
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
a7ed1e2e 12\r
a7ed1e2e 13**/\r
14\r
842f5579
A
15#ifndef __SCSI_H__\r
16#define __SCSI_H__\r
a7ed1e2e 17\r
18//\r
19// SCSI command OP Code\r
20//\r
21//\r
22// Commands for all device types\r
23//\r
24#define EFI_SCSI_OP_CHANGE_DEFINITION 0x40\r
25#define EFI_SCSI_OP_COMPARE 0x39\r
26#define EFI_SCSI_OP_COPY 0x18\r
27#define EFI_SCSI_OP_COPY_VERIFY 0x3a\r
28#define EFI_SCSI_OP_INQUIRY 0x12\r
29#define EFI_SCSI_OP_LOG_SELECT 0x4c\r
30#define EFI_SCSI_OP_LOG_SENSE 0x4d\r
31#define EFI_SCSI_OP_MODE_SEL6 0x15\r
32#define EFI_SCSI_OP_MODE_SEL10 0x55\r
33#define EFI_SCSI_OP_MODE_SEN6 0x1a\r
34#define EFI_SCSI_OP_MODE_SEN10 0x5a\r
35#define EFI_SCSI_OP_READ_BUFFER 0x3c\r
4135253b 36#define EFI_SCSI_OP_RECEIVE_DIAG 0x1c\r
a7ed1e2e 37#define EFI_SCSI_OP_REQUEST_SENSE 0x03\r
38#define EFI_SCSI_OP_SEND_DIAG 0x1d\r
39#define EFI_SCSI_OP_TEST_UNIT_READY 0x00\r
40#define EFI_SCSI_OP_WRITE_BUFF 0x3b\r
41\r
42//\r
4135253b 43// Additional commands for Direct Access Devices\r
a7ed1e2e 44//\r
a7ed1e2e 45#define EFI_SCSI_OP_FORMAT 0x04\r
46#define EFI_SCSI_OP_LOCK_UN_CACHE 0x36\r
47#define EFI_SCSI_OP_PREFETCH 0x34\r
48#define EFI_SCSI_OP_MEDIA_REMOVAL 0x1e\r
49#define EFI_SCSI_OP_READ6 0x08\r
50#define EFI_SCSI_OP_READ10 0x28\r
a24faca3 51#define EFI_SCSI_OP_READ16 0x88\r
a7ed1e2e 52#define EFI_SCSI_OP_READ_CAPACITY 0x25\r
ccb491c8 53#define EFI_SCSI_OP_READ_CAPACITY16 0x9e\r
a7ed1e2e 54#define EFI_SCSI_OP_READ_DEFECT 0x37\r
55#define EFI_SCSI_OP_READ_LONG 0x3e\r
56#define EFI_SCSI_OP_REASSIGN_BLK 0x07\r
a7ed1e2e 57#define EFI_SCSI_OP_RELEASE 0x17\r
58#define EFI_SCSI_OP_REZERO 0x01\r
59#define EFI_SCSI_OP_SEARCH_DATA_E 0x31\r
60#define EFI_SCSI_OP_SEARCH_DATA_H 0x30\r
61#define EFI_SCSI_OP_SEARCH_DATA_L 0x32\r
62#define EFI_SCSI_OP_SEEK6 0x0b\r
63#define EFI_SCSI_OP_SEEK10 0x2b\r
64#define EFI_SCSI_OP_SEND_DIAG 0x1d\r
65#define EFI_SCSI_OP_SET_LIMIT 0x33\r
66#define EFI_SCSI_OP_START_STOP_UNIT 0x1b\r
67#define EFI_SCSI_OP_SYNC_CACHE 0x35\r
68#define EFI_SCSI_OP_VERIFY 0x2f\r
69#define EFI_SCSI_OP_WRITE6 0x0a\r
70#define EFI_SCSI_OP_WRITE10 0x2a\r
a24faca3 71#define EFI_SCSI_OP_WRITE16 0x8a\r
a7ed1e2e 72#define EFI_SCSI_OP_WRITE_VERIFY 0x2e\r
73#define EFI_SCSI_OP_WRITE_LONG 0x3f\r
74#define EFI_SCSI_OP_WRITE_SAME 0x41\r
69c31e08 75#define EFI_SCSI_OP_UNMAP 0x42\r
a7ed1e2e 76\r
77//\r
4135253b 78// Additional commands for Sequential Access Devices\r
a7ed1e2e 79//\r
80#define EFI_SCSI_OP_ERASE 0x19\r
81#define EFI_SCSI_OP_LOAD_UNLOAD 0x1b\r
82#define EFI_SCSI_OP_LOCATE 0x2b\r
83#define EFI_SCSI_OP_READ_BLOCK_LIMIT 0x05\r
84#define EFI_SCSI_OP_READ_POS 0x34\r
85#define EFI_SCSI_OP_READ_REVERSE 0x0f\r
86#define EFI_SCSI_OP_RECOVER_BUF_DATA 0x14\r
87#define EFI_SCSI_OP_RESERVE_UNIT 0x16\r
88#define EFI_SCSI_OP_REWIND 0x01\r
89#define EFI_SCSI_OP_SPACE 0x11\r
90#define EFI_SCSI_OP_VERIFY_TAPE 0x13\r
91#define EFI_SCSI_OP_WRITE_FILEMARK 0x10\r
92\r
93//\r
4135253b 94// Additional commands for Printer Devices\r
a7ed1e2e 95//\r
96#define EFI_SCSI_OP_PRINT 0x0a\r
97#define EFI_SCSI_OP_SLEW_PRINT 0x0b\r
98#define EFI_SCSI_OP_STOP_PRINT 0x1b\r
99#define EFI_SCSI_OP_SYNC_BUFF 0x10\r
100\r
101//\r
4135253b 102// Additional commands for Processor Devices\r
a7ed1e2e 103//\r
104#define EFI_SCSI_OP_RECEIVE 0x08\r
105#define EFI_SCSI_OP_SEND 0x0a\r
106\r
107//\r
4135253b 108// Additional commands for Write-Once Devices\r
a7ed1e2e 109//\r
110#define EFI_SCSI_OP_MEDIUM_SCAN 0x38\r
111#define EFI_SCSI_OP_SEARCH_DAT_E10 0x31\r
112#define EFI_SCSI_OP_SEARCH_DAT_E12 0xb1\r
113#define EFI_SCSI_OP_SEARCH_DAT_H10 0x30\r
114#define EFI_SCSI_OP_SEARCH_DAT_H12 0xb0\r
115#define EFI_SCSI_OP_SEARCH_DAT_L10 0x32\r
116#define EFI_SCSI_OP_SEARCH_DAT_L12 0xb2\r
117#define EFI_SCSI_OP_SET_LIMIT10 0x33\r
118#define EFI_SCSI_OP_SET_LIMIT12 0xb3\r
119#define EFI_SCSI_OP_VERIFY10 0x2f\r
120#define EFI_SCSI_OP_VERIFY12 0xaf\r
121#define EFI_SCSI_OP_WRITE12 0xaa\r
122#define EFI_SCSI_OP_WRITE_VERIFY10 0x2e\r
123#define EFI_SCSI_OP_WRITE_VERIFY12 0xae\r
124\r
125//\r
4135253b 126// Additional commands for CD-ROM Devices\r
a7ed1e2e 127//\r
128#define EFI_SCSI_OP_PLAY_AUD_10 0x45\r
129#define EFI_SCSI_OP_PLAY_AUD_12 0xa5\r
130#define EFI_SCSI_OP_PLAY_AUD_MSF 0x47\r
131#define EFI_SCSI_OP_PLAY_AUD_TKIN 0x48\r
132#define EFI_SCSI_OP_PLAY_TK_REL10 0x49\r
133#define EFI_SCSI_OP_PLAY_TK_REL12 0xa9\r
134#define EFI_SCSI_OP_READ_CD_CAPACITY 0x25\r
135#define EFI_SCSI_OP_READ_HEADER 0x44\r
136#define EFI_SCSI_OP_READ_SUB_CHANNEL 0x42\r
137#define EFI_SCSI_OP_READ_TOC 0x43\r
138\r
139//\r
4135253b 140// Additional commands for Scanner Devices\r
a7ed1e2e 141//\r
142#define EFI_SCSI_OP_GET_DATABUFF_STAT 0x34\r
143#define EFI_SCSI_OP_GET_WINDOW 0x25\r
144#define EFI_SCSI_OP_OBJECT_POS 0x31\r
145#define EFI_SCSI_OP_SCAN 0x1b\r
146#define EFI_SCSI_OP_SET_WINDOW 0x24\r
147\r
148//\r
4135253b 149// Additional commands for Optical Memory Devices\r
a7ed1e2e 150//\r
151#define EFI_SCSI_OP_UPDATE_BLOCK 0x3d\r
152\r
153//\r
4135253b 154// Additional commands for Medium Changer Devices\r
a7ed1e2e 155//\r
156#define EFI_SCSI_OP_EXCHANGE_MEDIUM 0xa6\r
157#define EFI_SCSI_OP_INIT_ELEMENT_STAT 0x07\r
158#define EFI_SCSI_OP_POS_TO_ELEMENT 0x2b\r
159#define EFI_SCSI_OP_REQUEST_VE_ADDR 0xb5\r
160#define EFI_SCSI_OP_SEND_VOL_TAG 0xb6\r
161\r
162//\r
4135253b 163// Additional commands for Communition Devices\r
a7ed1e2e 164//\r
165#define EFI_SCSI_OP_GET_MESSAGE6 0x08\r
166#define EFI_SCSI_OP_GET_MESSAGE10 0x28\r
167#define EFI_SCSI_OP_GET_MESSAGE12 0xa8\r
168#define EFI_SCSI_OP_SEND_MESSAGE6 0x0a\r
169#define EFI_SCSI_OP_SEND_MESSAGE10 0x2a\r
170#define EFI_SCSI_OP_SEND_MESSAGE12 0xaa\r
171\r
172//\r
173// SCSI Data Transfer Direction\r
174//\r
175#define EFI_SCSI_DATA_IN 0\r
176#define EFI_SCSI_DATA_OUT 1\r
177\r
178//\r
179// Peripheral Device Type Definitions\r
180//\r
4135253b 181#define EFI_SCSI_TYPE_DISK 0x00 ///< Direct-access device (e.g. magnetic disk)\r
182#define EFI_SCSI_TYPE_TAPE 0x01 ///< Sequential-access device (e.g. magnetic tape)\r
183#define EFI_SCSI_TYPE_PRINTER 0x02 ///< Printer device\r
184#define EFI_SCSI_TYPE_PROCESSOR 0x03 ///< Processor device\r
185#define EFI_SCSI_TYPE_WORM 0x04 ///< Write-once device (e.g. some optical disks)\r
186#define EFI_SCSI_TYPE_CDROM 0x05 ///< CD-ROM device\r
187#define EFI_SCSI_TYPE_SCANNER 0x06 ///< Scanner device\r
188#define EFI_SCSI_TYPE_OPTICAL 0x07 ///< Optical memory device (e.g. some optical disks)\r
189#define EFI_SCSI_TYPE_MEDIUMCHANGER 0x08 ///< Medium changer device (e.g. jukeboxes)\r
190#define EFI_SCSI_TYPE_COMMUNICATION 0x09 ///< Communications device\r
191#define EFI_SCSI_TYPE_ASCIT8_1 0x0A ///< Defined by ASC IT8 (Graphic arts pre-press devices)\r
192#define EFI_SCSI_TYPE_ASCIT8_2 0x0B ///< Defined by ASC IT8 (Graphic arts pre-press devices)\r
193//\r
194// 0Ch - 1Eh are reserved\r
195//\r
196#define EFI_SCSI_TYPE_UNKNOWN 0x1F ///< Unknown or no device type\r
197\r
b8a62661
RN
198//\r
199// Page Codes for INQUIRY command\r
200//\r
201#define EFI_SCSI_PAGE_CODE_SUPPORTED_VPD 0x00\r
202#define EFI_SCSI_PAGE_CODE_BLOCK_LIMITS_VPD 0xB0\r
203\r
766f4bc1 204#pragma pack(1)\r
4135253b 205///\r
206/// Standard INQUIRY data format\r
207///\r
a7ed1e2e 208typedef struct {\r
209 UINT8 Peripheral_Type : 5;\r
210 UINT8 Peripheral_Qualifier : 3;\r
211 UINT8 DeviceType_Modifier : 7;\r
fbfa4a1d 212 UINT8 Rmb : 1;\r
a7ed1e2e 213 UINT8 Version;\r
214 UINT8 Response_Data_Format;\r
215 UINT8 Addnl_Length;\r
216 UINT8 Reserved_5_95[95 - 5 + 1];\r
217} EFI_SCSI_INQUIRY_DATA;\r
218\r
b8a62661
RN
219///\r
220/// Supported VPD Pages VPD page\r
221///\r
222typedef struct {\r
223 UINT8 Peripheral_Type : 5;\r
224 UINT8 Peripheral_Qualifier : 3;\r
225 UINT8 PageCode;\r
226 UINT8 PageLength2;\r
227 UINT8 PageLength1;\r
228 UINT8 SupportedVpdPageList[0x100];\r
229} EFI_SCSI_SUPPORTED_VPD_PAGES_VPD_PAGE;\r
230\r
231///\r
232/// Block Limits VPD page\r
233///\r
234typedef struct {\r
235 UINT8 Peripheral_Type : 5;\r
236 UINT8 Peripheral_Qualifier : 3;\r
237 UINT8 PageCode;\r
69c31e08
HW
238 UINT8 PageLength2;\r
239 UINT8 PageLength1;\r
240 UINT8 WriteSameNonZero : 1;\r
241 UINT8 Reserved_4 : 7;\r
242 UINT8 MaximumCompareAndWriteLength;\r
b8a62661
RN
243 UINT8 OptimalTransferLengthGranularity2;\r
244 UINT8 OptimalTransferLengthGranularity1;\r
245 UINT8 MaximumTransferLength4;\r
246 UINT8 MaximumTransferLength3;\r
247 UINT8 MaximumTransferLength2;\r
248 UINT8 MaximumTransferLength1;\r
249 UINT8 OptimalTransferLength4;\r
250 UINT8 OptimalTransferLength3;\r
251 UINT8 OptimalTransferLength2;\r
252 UINT8 OptimalTransferLength1;\r
253 UINT8 MaximumPrefetchXdreadXdwriteTransferLength4;\r
254 UINT8 MaximumPrefetchXdreadXdwriteTransferLength3;\r
255 UINT8 MaximumPrefetchXdreadXdwriteTransferLength2;\r
256 UINT8 MaximumPrefetchXdreadXdwriteTransferLength1;\r
69c31e08
HW
257 UINT8 MaximumUnmapLbaCount4;\r
258 UINT8 MaximumUnmapLbaCount3;\r
259 UINT8 MaximumUnmapLbaCount2;\r
260 UINT8 MaximumUnmapLbaCount1;\r
261 UINT8 MaximumUnmapBlockDescriptorCount4;\r
262 UINT8 MaximumUnmapBlockDescriptorCount3;\r
263 UINT8 MaximumUnmapBlockDescriptorCount2;\r
264 UINT8 MaximumUnmapBlockDescriptorCount1;\r
265 UINT8 OptimalUnmapGranularity4;\r
266 UINT8 OptimalUnmapGranularity3;\r
267 UINT8 OptimalUnmapGranularity2;\r
268 UINT8 OptimalUnmapGranularity1;\r
269 UINT8 UnmapGranularityAlignment4 : 7;\r
270 UINT8 UnmapGranularityAlignmentValid : 1;\r
271 UINT8 UnmapGranularityAlignment3;\r
272 UINT8 UnmapGranularityAlignment2;\r
273 UINT8 UnmapGranularityAlignment1;\r
274 UINT8 MaximumWriteSameLength4;\r
275 UINT8 MaximumWriteSameLength3;\r
276 UINT8 MaximumWriteSameLength2;\r
277 UINT8 MaximumWriteSameLength1;\r
278 UINT8 MaximumAtomicTransferLength4;\r
279 UINT8 MaximumAtomicTransferLength3;\r
280 UINT8 MaximumAtomicTransferLength2;\r
281 UINT8 MaximumAtomicTransferLength1;\r
282 UINT8 AtomicAlignment4;\r
283 UINT8 AtomicAlignment3;\r
284 UINT8 AtomicAlignment2;\r
285 UINT8 AtomicAlignment1;\r
286 UINT8 AtomicTransferLengthGranularity4;\r
287 UINT8 AtomicTransferLengthGranularity3;\r
288 UINT8 AtomicTransferLengthGranularity2;\r
289 UINT8 AtomicTransferLengthGranularity1;\r
290 UINT8 MaximumAtomicTransferLengthWithAtomicBoundary4;\r
291 UINT8 MaximumAtomicTransferLengthWithAtomicBoundary3;\r
292 UINT8 MaximumAtomicTransferLengthWithAtomicBoundary2;\r
293 UINT8 MaximumAtomicTransferLengthWithAtomicBoundary1;\r
294 UINT8 MaximumAtomicBoundarySize4;\r
295 UINT8 MaximumAtomicBoundarySize3;\r
296 UINT8 MaximumAtomicBoundarySize2;\r
297 UINT8 MaximumAtomicBoundarySize1;\r
b8a62661
RN
298} EFI_SCSI_BLOCK_LIMITS_VPD_PAGE;\r
299\r
4135253b 300///\r
301/// Error codes 70h and 71h sense data format\r
302///\r
a7ed1e2e 303typedef struct {\r
304 UINT8 Error_Code : 7;\r
305 UINT8 Valid : 1;\r
306 UINT8 Segment_Number;\r
307 UINT8 Sense_Key : 4;\r
308 UINT8 Reserved_21 : 1;\r
fbfa4a1d 309 UINT8 Ili : 1;\r
a7ed1e2e 310 UINT8 Reserved_22 : 2;\r
311 UINT8 Information_3_6[4];\r
4135253b 312 UINT8 Addnl_Sense_Length; ///< Additional sense length (n-7)\r
a7ed1e2e 313 UINT8 Vendor_Specific_8_11[4];\r
4135253b 314 UINT8 Addnl_Sense_Code; ///< Additional sense code\r
315 UINT8 Addnl_Sense_Code_Qualifier; ///< Additional sense code qualifier\r
316 UINT8 Field_Replaceable_Unit_Code; ///< Field replaceable unit code\r
a7ed1e2e 317 UINT8 Reserved_15_17[3];\r
318} EFI_SCSI_SENSE_DATA;\r
319\r
190f29c0 320///\r
321/// SCSI Disk READ CAPACITY Data\r
322///\r
a7ed1e2e 323typedef struct {\r
324 UINT8 LastLba3;\r
325 UINT8 LastLba2;\r
326 UINT8 LastLba1;\r
327 UINT8 LastLba0;\r
328 UINT8 BlockSize3;\r
329 UINT8 BlockSize2;\r
330 UINT8 BlockSize1;\r
331 UINT8 BlockSize0;\r
332} EFI_SCSI_DISK_CAPACITY_DATA;\r
333\r
ccb491c8 334typedef struct {\r
335 UINT8 LastLba7;\r
336 UINT8 LastLba6;\r
337 UINT8 LastLba5;\r
338 UINT8 LastLba4;\r
339 UINT8 LastLba3;\r
340 UINT8 LastLba2;\r
341 UINT8 LastLba1;\r
342 UINT8 LastLba0;\r
343 UINT8 BlockSize3;\r
344 UINT8 BlockSize2;\r
345 UINT8 BlockSize1;\r
346 UINT8 BlockSize0;\r
347 UINT8 Protection;\r
348 UINT8 LogicPerPhysical;\r
9095d37b
LG
349 UINT8 LowestAlignLogic2;\r
350 UINT8 LowestAlignLogic1;\r
351 UINT8 Reserved[16];\r
ccb491c8 352} EFI_SCSI_DISK_CAPACITY_DATA16;\r
353\r
69c31e08
HW
354typedef struct {\r
355 UINT16 DataLen;\r
356 UINT16 BlkDespDataLen;\r
357 UINT8 Reserved[4];\r
358} EFI_SCSI_DISK_UNMAP_PARAM_LIST_HEADER;\r
359\r
360typedef struct {\r
361 UINT64 Lba;\r
362 UINT32 BlockNum;\r
363 UINT8 Reserved[4];\r
364} EFI_SCSI_DISK_UNMAP_BLOCK_DESP;\r
365\r
ccb491c8 366\r
766f4bc1 367#pragma pack()\r
368\r
a7ed1e2e 369//\r
370// Sense Key\r
371//\r
a7ed1e2e 372#define EFI_SCSI_SK_NO_SENSE (0x0)\r
373#define EFI_SCSI_SK_RECOVERY_ERROR (0x1)\r
374#define EFI_SCSI_SK_NOT_READY (0x2)\r
375#define EFI_SCSI_SK_MEDIUM_ERROR (0x3)\r
376#define EFI_SCSI_SK_HARDWARE_ERROR (0x4)\r
377#define EFI_SCSI_SK_ILLEGAL_REQUEST (0x5)\r
378#define EFI_SCSI_SK_UNIT_ATTENTION (0x6)\r
379#define EFI_SCSI_SK_DATA_PROTECT (0x7)\r
380#define EFI_SCSI_SK_BLANK_CHECK (0x8)\r
381#define EFI_SCSI_SK_VENDOR_SPECIFIC (0x9)\r
382#define EFI_SCSI_SK_RESERVED_A (0xA)\r
383#define EFI_SCSI_SK_ABORT (0xB)\r
384#define EFI_SCSI_SK_RESERVED_C (0xC)\r
385#define EFI_SCSI_SK_OVERFLOW (0xD)\r
386#define EFI_SCSI_SK_MISCOMPARE (0xE)\r
387#define EFI_SCSI_SK_RESERVED_F (0xF)\r
388\r
389//\r
4135253b 390// Additional Sense Codes and Sense Code Qualifiers.\r
391// Only some frequently used additional sense codes and qualifiers are\r
392// defined here. Please refer to SCSI standard for full value definition.\r
a7ed1e2e 393//\r
394#define EFI_SCSI_ASC_NOT_READY (0x04)\r
14996c96 395#define EFI_SCSI_ASCQ_IN_PROGRESS (0x01)\r
4135253b 396\r
a7ed1e2e 397#define EFI_SCSI_ASC_MEDIA_ERR1 (0x10)\r
398#define EFI_SCSI_ASC_MEDIA_ERR2 (0x11)\r
399#define EFI_SCSI_ASC_MEDIA_ERR3 (0x14)\r
400#define EFI_SCSI_ASC_MEDIA_ERR4 (0x30)\r
401#define EFI_SCSI_ASC_MEDIA_UPSIDE_DOWN (0x06)\r
402#define EFI_SCSI_ASC_INVALID_CMD (0x20)\r
403#define EFI_SCSI_ASC_LBA_OUT_OF_RANGE (0x21)\r
404#define EFI_SCSI_ASC_INVALID_FIELD (0x24)\r
405#define EFI_SCSI_ASC_WRITE_PROTECTED (0x27)\r
406#define EFI_SCSI_ASC_MEDIA_CHANGE (0x28)\r
190f29c0 407#define EFI_SCSI_ASC_RESET (0x29) ///< Power On Reset or Bus Reset occurred\r
a7ed1e2e 408#define EFI_SCSI_ASC_ILLEGAL_FIELD (0x26)\r
409#define EFI_SCSI_ASC_NO_MEDIA (0x3A)\r
410#define EFI_SCSI_ASC_ILLEGAL_MODE_FOR_THIS_TRACK (0x64)\r
411\r
a7ed1e2e 412#endif\r