1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22 /*
23 * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
25 */
26
27 #ifndef _SYS_SCSI_GENERIC_COMMANDS_H
28 #define _SYS_SCSI_GENERIC_COMMANDS_H
29
30 #pragma ident "@(#)commands.h 1.43 08/03/03 SMI"
31
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
35
36 /*
37 * Standard SCSI Command Definitions
38 *
39 * Macros to determine known command sizes
40 */
41 #define CDB_GROUPID(cmd) ((cmd >> 5) & 0x7)
42 #define CDB_GROUPID_0 0
43 #define CDB_GROUPID_1 1
44 #define CDB_GROUPID_2 2
45 #define CDB_GROUPID_3 3
46 #define CDB_GROUPID_4 4
47 #define CDB_GROUPID_5 5
48 #define CDB_GROUPID_6 6
49 #define CDB_GROUPID_7 7
50
51 #define CDB_GROUP0 6 /* 6-byte cdb's */
52 #define CDB_GROUP1 10 /* 10-byte cdb's */
53 #define CDB_GROUP2 10 /* 10-byte cdb's */
54 #define CDB_GROUP3 0 /* reserved */
55 #define CDB_GROUP4 16 /* 16-byte cdb's */
56 #define CDB_GROUP5 12 /* 12-byte cdb's */
57 #define CDB_GROUP6 0 /* reserved */
58 #define CDB_GROUP7 0 /* reserved */
59
60 /*
61 * Generic Command Definitions
62 * NOTE: CDROM commands are defined in cdio.h
63 */
64
65 /*
66 * Group 0 Commands (CDB range 0x00 - 0x1F)
67 */
68 #define SCMD_GROUP0 0x00
69
70 /*
71 * Group 0 commands, All Devices
72 */
73 #define SCMD_TEST_UNIT_READY 0x00
74 #define SCMD_REQUEST_SENSE 0x03
75 #define SCMD_INQUIRY 0x12
76 #define SCMD_COPY 0x18
77 #define SCMD_GDIAG 0x1C /* receive diagnostic results */
78 #define SCMD_SDIAG 0x1D /* send diagnostic results */
79
80 /*
81 * Group 0 commands, Direct Access Devices
82 */
83 /* SCMD_TEST_UNIT_READY 0x00 */
84 #define SCMD_REZERO_UNIT 0x01
85 /* SCMD_REQUEST_SENSE 0x03 */
86 #define SCMD_FORMAT 0x04
87 #define SCMD_REASSIGN_BLOCK 0x07
88 #define SCMD_READ 0x08
89 #define SCMD_WRITE 0x0a
90 #define SCMD_SEEK 0x0b
91 /* SCMD_INQUIRY 0x12 */
92 #define SCMD_MODE_SELECT 0x15
93 #define SCMD_RESERVE 0x16
94 #define SCMD_RELEASE 0x17
95 /* SCMD_COPY 0x18 */
96 #define SCMD_MODE_SENSE 0x1a
97 #define SCMD_START_STOP 0x1b
98 /* SCMD_GDIAG 0x1C */
99 /* SCMD_SDIAG 0x1D */
100 #define SCMD_DOORLOCK 0x1E /* Prevent/Allow Medium Removal */
101
102 /*
103 * Group 0 commands, Sequential Access Devices
104 */
105 /* SCMD_TEST_UNIT_READY 0x00 */
106 #define SCMD_REWIND 0x01 /* Note similarity to SCMD_REZERO */
107 /* SCMD_REQUEST_SENSE 0x03 */
108 #define SCMD_READ_BLKLIM 0x05
109 /* SCMD_READ 0x08 */
110 /* SCMD_WRITE 0x0a */
111 #define SCMD_TRK_SEL 0x0b /* Note similarity to SCMD_SEEK */
112 #define SCMD_READ_REVERSE 0x0f
113 #define SCMD_WRITE_FILE_MARK 0x10
114 #define SCMD_SPACE 0x11
115 /* SCMD_INQUIRY 0x12 */
116 #define SCMD_VERIFY_G0 0x13
117 #define SCMD_RECOVER_BUF 0x14
118 /* SCMD_MODE_SELECT 0x15 */
119 /* SCMD_RESERVE 0x16 */
120 /* SCMD_RELEASE 0x17 */
121 /* SCMD_COPY 0x18 */
122 #define SCMD_ERASE 0x19
123 /* SCMD_MODE_SENSE 0x1a */
124 #define SCMD_LOAD 0x1b /* Note similarity to SCMD_START_STOP */
125 /* SCMD_GDIAG 0x1c */
126 /* SCMD_SDIAG 0x1d */
127 /* SCMD_DOORLOCK 0x1e */
128
129
130 /*
131 * Group 0 commands, Printer Devices
132 */
133 /* SCMD_TEST_UNIT_READY 0x00 */
134 /* SCMD_REQUEST_SENSE 0x03 */
135 /* SCMD_FORMAT 0x04 */
136 #define SCMD_PRINT 0x0a /* Note similarity to SCMD_WRITE */
137 #define SCMD_SLEW_PRINT 0x0b /* ? similar to SCMD_SEEK ? */
138 #define SCMD_FLUSH_PRINT_BUF 0x10 /* ? similar to SCMD_WRITE_FILE_MARK */
139 /* SCMD_INQUIRY 0x12 */
140 /* SCMD_RECOVER_BUF 0x14 */
141 /* SCMD_MODE_SELECT 0x15 */
142 /* SCMD_RESERVE 0x16 */
143 /* SCMD_RELEASE 0x17 */
144 /* SCMD_COPY 0x18 */
145 /* SCMD_MODE_SENSE 0x1a */
146 #define SCMD_STOP_PRINT 0x1b /* Note similarity to SCMD_START_STOP */
147 /* SCMD_GDIAG 0x1c */
148 /* SCMD_SDIAG 0x1d */
149
150 /*
151 * Group 0 commands, Processor Devices
152 */
153 /* SCMD_TEST_UNIT_READY 0x00 */
154 /* SCMD_REQUEST_SENSE 0x03 */
155 #define SCMD_RECEIVE 0x08 /* Note similarity to SCMD_READ */
156 #define SCMD_SEND 0x0a /* Note similarity to SCMD_WRITE */
157 /* SCMD_INQUIRY 0x12 */
158 /* SCMD_COPY 0x18 */
159 /* SCMD_MODE_SENSE 0x1a */
160 /* SCMD_GDIAG 0x1c */
161 /* SCMD_SDIAG 0x1d */
162
163 /*
164 * Group 0 commands, WORM Devices
165 */
166 /* SCMD_TEST_UNIT_READY 0x00 */
167 /* SCMD_REZERO_UNIT 0x01 */
168 /* SCMD_REQUEST_SENSE 0x03 */
169 /* SCMD_REASSIGN_BLOCK 0x07 */
170 /* SCMD_READ 0x08 */
171 /* SCMD_WRITE 0x0a */
172 /* SCMD_SEEK 0x0b */
173 /* SCMD_INQUIRY 0x12 */
174 /* SCMD_MODE_SELECT 0x15 */
175 /* SCMD_RESERVE 0x16 */
176 /* SCMD_RELEASE 0x17 */
177 /* SCMD_COPY 0x18 */
178 /* SCMD_MODE_SENSE 0x1a */
179 /* SCMD_START_STOP 0x1b */
180 /* SCMD_GDIAG 0x1C */
181 /* SCMD_SDIAG 0x1D */
182 /* SCMD_DOORLOCK 0x1E */
183
184 /*
185 * Group 0 commands, Read Only Devices
186 */
187 /* SCMD_TEST_UNIT_READY 0x00 */
188 /* SCMD_REZERO_UNIT 0x01 */
189 /* SCMD_REQUEST_SENSE 0x03 */
190 /* SCMD_REASSIGN_BLOCK 0x07 */
191 /* SCMD_READ 0x08 */
192 /* SCMD_SEEK 0x0b */
193 /* SCMD_INQUIRY 0x12 */
194 /* SCMD_MODE_SELECT 0x15 */
195 /* SCMD_RESERVE 0x16 */
196 /* SCMD_RELEASE 0x17 */
197 /* SCMD_COPY 0x18 */
198 /* SCMD_MODE_SENSE 0x1a */
199 /* SCMD_START_STOP 0x1b */
200 /* SCMD_GDIAG 0x1C */
201 /* SCMD_SDIAG 0x1D */
202 /* SCMD_DOORLOCK 0x1E */
203
204 /*
205 * Group 1 Commands (CDB range 0x20 - 0x3F)
206 */
207 #define SCMD_GROUP1 0x20
208
209 /*
210 * Group 1 Commands, All Devices
211 */
212 #define SCMD_COMPARE 0x39
213 #define SCMD_COPY_VERIFY 0x3A
214 #define SCMD_PERSISTENT_RESERVE_IN 0x5E
215 #define SCMD_PERSISTENT_RESERVE_OUT 0x5F
216 #define SCMD_PRIN SCMD_PERSISTENT_RESERVE_IN
217 #define SCMD_PROUT SCMD_PERSISTENT_RESERVE_OUT
218
219 /*
220 * Group 1 Commands, Direct Access Devices
221 */
222 #define SCMD_READ_FORMAT_CAP 0x23
223 #define SCMD_READ_CAPACITY 0x25
224 #define SCMD_READ_G1 0x28 /* Note that only the group changed */
225 #define SCMD_WRITE_G1 0x2a /* Note that only the group changed */
226 #define SCMD_SEEK_G1 0x2b /* Note that only the group changed */
227 #define SCMD_WRITE_VERIFY 0x2e
228 #define SCMD_VERIFY 0x2f
229 #define SCMD_SEARCH_HIGH 0x30
230 #define SCMD_SEARCH_EQUAL 0x31
231 #define SCMD_SEARCH_LOW 0x32
232 #define SCMD_SET_LIMITS 0x33
233 #define SCMD_SYNCHRONIZE_CACHE 0x35
234 #define SCMD_READ_DEFECT_LIST 0x37
235 #define SCMD_WRITE_BUFFER 0x3B
236 #define SCMD_READ_BUFFER 0x3c
237 #define SCMD_READ_LONG 0x3E
238 #define SCMD_WRITE_LONG 0x3F
239 #define SCMD_RESERVE_G1 0x56
240 #define SCMD_RELEASE_G1 0x57
241 #define SCMD_MODE_SELECT_G1 0x55
242 #define SCMD_MODE_SENSE_G1 0x5A
243 #define SCMD_GET_CONFIGURATION 0x46
244 #define SCMD_LOG_SELECT_G1 0x4C
245 #define SCMD_LOG_SENSE_G1 0x4d
246
247
248 /*
249 * Group 1 Commands, Sequential Access Devices
250 */
251 #define SCMD_LOCATE 0x2B /* Note similarity to SCMD_SEEK_G1 */
252 #define SCMD_READ_POSITION 0x34
253 #define SCMD_REPORT_DENSITIES 0x44
254
255 /*
256 * Group 1 Commands, Printer Devices
257 */
258 /* (None Defined) */
259
260 /*
261 * Group 1 Commands, Processor Devices
262 */
263 /* (None Defined) */
264
265 /*
266 * Group 1 Commands, WORM Devices
267 */
268 /* SCMD_READ_CAPACITY 0x25 */
269 /* SCMD_READ_G1 0x28 */
270 /* SCMD_WRITE_G1 0x2a */
271 /* SCMD_SEEK_G1 0x2b */
272 /* SCMD_WRITE_VERIFY 0x2e */
273 /* SCMD_VERIFY 0x2f */
274 /* SCMD_SEARCH_HIGH 0x30 */
275 /* SCMD_SEARCH_EQUAL 0x31 */
276 /* SCMD_SEARCH_LOW 0x32 */
277 /* SCMD_SET_LIMITS 0x33 */
278
279 /*
280 * Group 1 Commands, Read Only Devices
281 */
282 /* SCMD_READ_CAPACITY 0x25 */
283 /* SCMD_READ_G1 0x28 */
284 /* SCMD_SEEK_G1 0x2b */
285 /* SCMD_VERIFY 0x2f */
286 /* SCMD_SEARCH_HIGH 0x30 */
287 /* SCMD_SEARCH_EQUAL 0x31 */
288 /* SCMD_SEARCH_LOW 0x32 */
289 /* SCMD_SET_LIMITS 0x33 */
290
291 /*
292 * Group 3 Commands
293 */
294 #define SCMD_VAR_LEN 0x7f
295
296 /*
297 * Group 4 Commands, All Devices
298 */
299 #define SCMD_GROUP4 0x80
300 #define SCMD_EXTENDED_COPY 0x83
301 #define SCMD_VERIFY_G4 0x8f
302
303 /*
304 * Group 4 Commands, Direct Access Devices
305 */
306 #define SCMD_READ_G4 0x88
307 #define SCMD_WRITE_G4 0x8a
308 #define SCMD_SVC_ACTION_IN_G4 0x9e
309 #define SCMD_SVC_ACTION_OUT_G4 0x9f
310
311 /*
312 * Group 4 Service Actions for Service Action In (16)
313 */
314 #define SSVC_ACTION_READ_CAPACITY_G4 0x10
315 #define SSVC_ACTION_READ_LONG_G4 0x11
316
317 /*
318 * Group 4 Service Actions for Service Action Out (16)
319 */
320 #define SSVC_ACTION_WRITE_LONG_G4 0x11
321
322 /*
323 * Group 4 Commands, Sequential Access Devics
324 */
325 #define SCMD_WRITE_FILE_MARK_G4 0x80
326 #define SCMD_READ_REVERSE_G4 0x81
327 #define SCMD_READ_ATTRIBUTE 0x8c
328 #define SCMD_WRITE_ATTRIBUTE 0x8d
329 #define SCMD_SPACE_G4 0x91
330 #define SCMD_LOCATE_G4 0x92
331
332 /*
333 * Group 5 commands.
334 */
335 #define SCMD_GROUP5 0xA0
336 #define SCMD_REPORT_LUNS 0xA0
337 #define SCMD_SECURITY_PROTO_IN 0xA2
338 #define SCMD_MAINTENANCE_IN 0xA3
339 #define SCMD_MAINTENANCE_OUT 0xA4
340 #define SCMD_READ_G5 0xA8
341 #define SCMD_WRITE_G5 0xAA
342 #define SCMD_SVC_ACTION_OUT_G5 0xA9
343 #define SCMD_SVC_ACTION_IN_G5 0xAB
344 #define SCMD_GET_PERFORMANCE 0xAC
345 #define SCMD_VERIFY_G5 0xAF
346 #define SCMD_SECURITY_PROTO_OUT 0xB5
347
348 /*
349 * Group 5 Service Actions for Maintenance In (12)
350 */
351 #define SSVC_ACTION_GET_TARGET_PORT_GROUPS 0x0a
352 #define SSVC_ACTION_GET_SUPPORTED_OPERATIONS 0x0c
353 #define SSVC_SCTION_GET_SUPPORTED_MANAGEMENT 0x0d
354 #define SSVC_ACTION_GET_TIMESTAMP 0x0f
355
356 /*
357 * Group 5 Service Actions for Maintenance Out (12)
358 */
359 #define SSVC_ACTION_SET_DEVICE_IDENTIFIER 0x06
360 #define SSVC_ACTION_SET_PRIORITY 0x0e
361 #define SSVC_ACTION_SET_TARGET_PORT_GROUPS 0x0a
362 #define SSVC_ACTION_SET_TIMESTAMP 0x0f
363
364 /*
365 * Group 5 Service Actions for Service Action In (12)
366 */
367 #define SSVC_ACTION_READ_MEDIA_SERIAL 0x01
368 /*
369 * scsi_key_strings for SCMD_ definitions
370 * NOTE: see SCSI_CMDS_KEY_STRINGS_CDIO in cdio.h for additional
371 * command-to-string translations.
372 */
373 #define SCSI_CMDS_KEY_STRINGS \
374 /* 0x00 */ SCMD_TEST_UNIT_READY, "test_unit_ready", \
375 /* 0x01 */ SCMD_REWIND | \
376 SCMD_REZERO_UNIT, "rezero/rewind", \
377 /* 0x03 */ SCMD_REQUEST_SENSE, "request_sense", \
378 /* 0x04 */ SCMD_FORMAT, "format", \
379 /* 0x05 */ SCMD_READ_BLKLIM, "read_block_limits", \
380 /* 0x07 */ SCMD_REASSIGN_BLOCK, "reassign", \
381 /* 0x08 */ SCMD_READ | \
382 SCMD_RECEIVE, "read", \
383 /* 0x0a */ SCMD_PRINT | \
384 SCMD_SEND | \
385 SCMD_WRITE, "write", \
386 /* 0x0b */ SCMD_SEEK | \
387 SCMD_SLEW_PRINT | \
388 SCMD_TRK_SEL, "seek", \
389 /* 0x0f */ SCMD_READ_REVERSE, "read_reverse", \
390 /* 0x10 */ SCMD_WRITE_FILE_MARK | \
391 SCMD_FLUSH_PRINT_BUF, "write_file_mark", \
392 /* 0x11 */ SCMD_SPACE, "space", \
393 /* 0x12 */ SCMD_INQUIRY, "inquiry", \
394 /* 0x13 */ SCMD_VERIFY_G0, "verify", \
395 /* 0x14 */ SCMD_RECOVER_BUF, "recover_buffer_data", \
396 /* 0x15 */ SCMD_MODE_SELECT, "mode_select", \
397 /* 0x16 */ SCMD_RESERVE, "reserve", \
398 /* 0x17 */ SCMD_RELEASE, "release", \
399 /* 0x18 */ SCMD_COPY, "copy", \
400 /* 0x19 */ SCMD_ERASE, "erase_tape", \
401 /* 0x1a */ SCMD_MODE_SENSE, "mode_sense", \
402 /* 0x1b */ SCMD_LOAD | \
403 SCMD_START_STOP | \
404 SCMD_STOP_PRINT, "load/start/stop", \
405 /* 0x1c */ SCMD_GDIAG, "get_diagnostic_results", \
406 /* 0x1d */ SCMD_SDIAG, "send_diagnostic_command", \
407 /* 0x1e */ SCMD_DOORLOCK, "door_lock", \
408 /* 0x23 */ SCMD_READ_FORMAT_CAP, "read_format_capacity", \
409 /* 0x25 */ SCMD_READ_CAPACITY, "read_capacity", \
410 /* 0x28 */ SCMD_READ_G1, "read(10)", \
411 /* 0x2a */ SCMD_WRITE_G1, "write(10)", \
412 /* 0x2b */ SCMD_SEEK_G1 | \
413 SCMD_LOCATE, "seek(10)", \
414 /* 0x2e */ SCMD_WRITE_VERIFY, "write_verify", \
415 /* 0x2f */ SCMD_VERIFY, "verify(10)", \
416 /* 0x30 */ SCMD_SEARCH_HIGH, "search_data_high", \
417 /* 0x31 */ SCMD_SEARCH_EQUAL, "search_data_equal", \
418 /* 0x32 */ SCMD_SEARCH_LOW, "search_data_low", \
419 /* 0x33 */ SCMD_SET_LIMITS, "set_limits", \
420 /* 0x34 */ SCMD_READ_POSITION, "read_position", \
421 /* 0x35 */ SCMD_SYNCHRONIZE_CACHE, "synchronize_cache", \
422 /* 0x37 */ SCMD_READ_DEFECT_LIST, "read_defect_data", \
423 /* 0x39 */ SCMD_COMPARE, "compare", \
424 /* 0x3a */ SCMD_COPY_VERIFY, "copy_verify", \
425 /* 0x3b */ SCMD_WRITE_BUFFER, "write_buffer", \
426 /* 0x3c */ SCMD_READ_BUFFER, "read_buffer", \
427 /* 0x3e */ SCMD_READ_LONG, "read_long", \
428 /* 0x3f */ SCMD_WRITE_LONG, "write_long", \
429 /* 0x44 */ SCMD_REPORT_DENSITIES | \
430 /* SCMD_READ_HEADER (from cdio.h) | */ \
431 0, "report_densities/read_header", \
432 /* 0x4c */ SCMD_LOG_SELECT_G1, "log_select", \
433 /* 0x4d */ SCMD_LOG_SENSE_G1, "log_sense", \
434 /* 0x55 */ SCMD_MODE_SELECT_G1, "mode_select(10)", \
435 /* 0x56 */ SCMD_RESERVE_G1, "reserve(10)", \
436 /* 0x57 */ SCMD_RELEASE_G1, "release(10)", \
437 /* 0x5a */ SCMD_MODE_SENSE_G1, "mode_sense(10)", \
438 /* 0x5e */ SCMD_PERSISTENT_RESERVE_IN, "persistent_reserve_in", \
439 /* 0x5f */ SCMD_PERSISTENT_RESERVE_OUT, "persistent_reserve_out", \
440 /* 0x80 */ SCMD_WRITE_FILE_MARK_G4, "write_file_mark(16)", \
441 /* 0x81 */ SCMD_READ_REVERSE_G4, "read_reverse(16)", \
442 /* 0x83 */ SCMD_EXTENDED_COPY, "extended_copy", \
443 /* 0x88 */ SCMD_READ_G4, "read(16)", \
444 /* 0x8a */ SCMD_WRITE_G4, "write(16)", \
445 /* 0x8c */ SCMD_READ_ATTRIBUTE, "read_attribute", \
446 /* 0x8d */ SCMD_WRITE_ATTRIBUTE, "write_attribute", \
447 /* 0x8f */ SCMD_VERIFY_G4, "verify(16)", \
448 /* 0x91 */ SCMD_SPACE_G4, "space(16)", \
449 /* 0x92 */ SCMD_LOCATE_G4, "locate(16)", \
450 /* 0x9e */ SCMD_SVC_ACTION_IN_G4, "service_action_in(16)", \
451 /* 0x9f */ SCMD_SVC_ACTION_OUT_G4, "service_action_out(16)", \
452 /* 0xa0 */ SCMD_REPORT_LUNS, "report_luns", \
453 /* 0xa2 */ SCMD_SECURITY_PROTO_IN, "security_protocol_in", \
454 /* 0xa3 */ SCMD_MAINTENANCE_IN, "maintenance_in", \
455 /* 0xa4 */ SCMD_MAINTENANCE_OUT, "maintenance_out", \
456 /* 0xa8 */ SCMD_READ_G5, "read(12)", \
457 /* 0xa9 */ SCMD_SVC_ACTION_OUT_G5, "service_action_out(12)", \
458 /* 0xaa */ SCMD_WRITE_G5, "write(12)", \
459 /* 0xab */ SCMD_SVC_ACTION_IN_G5, "service_action_in(12)", \
460 /* 0xac */ SCMD_GET_PERFORMANCE, "get_performance", \
461 /* 0xAF */ SCMD_VERIFY_G5, "verify(12)", \
462 /* 0xb5 */ SCMD_SECURITY_PROTO_OUT, "security_protocol_out" \
463 /* see cdio.h for additional command-to-string translations */
464
465 /* XXX not a command code, does not belong here */
466 #define ATAPI_CAPABILITIES 0x2A
467
468 #ifdef __cplusplus
469 }
470 #endif
471
472 /*
473 * Below are inclusions of files describing various command structures
474 * of interest.
475 */
476 #include <sys/scsi/generic/inquiry.h>
477 #include <sys/scsi/generic/sense.h>
478
479 /*
480 * Private Vendor Unique Commands - Each implementation provides this.
481 */
482 #include <sys/scsi/impl/commands.h>
483
484 #endif /* _SYS_SCSI_GENERIC_COMMANDS_H */