2 * Copyright (c) 2003, 2004, 2005, 2009 Silicon Graphics International Corp.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions, and the following disclaimer,
10 * without modification.
11 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
12 * substantially similar to the "NO WARRANTY" disclaimer below
13 * ("Disclaimer") and any redistribution must be conditioned upon
14 * including a substantially similar Disclaimer requirement for further
15 * binary redistribution.
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
27 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 * POSSIBILITY OF SUCH DAMAGES.
30 * $Id: //depot/users/kenm/FreeBSD-test2/sys/cam/ctl/ctl_cmd_table.c#4 $
34 * CAM Target Layer command table.
36 * Author: Ken Merry <ken@FreeBSD.org>, Kim Le
39 #include <sys/cdefs.h>
40 #include <sys/param.h>
41 #include <sys/systm.h>
42 #include <sys/kernel.h>
43 #include <sys/types.h>
44 #include <sys/malloc.h>
45 #include <sys/condvar.h>
46 #include <sys/queue.h>
47 #include <sys/sysctl.h>
49 #include <cam/scsi/scsi_all.h>
50 #include <cam/scsi/scsi_da.h>
51 #include <cam/ctl/ctl_io.h>
52 #include <cam/ctl/ctl.h>
53 #include <cam/ctl/ctl_frontend.h>
54 #include <cam/ctl/ctl_backend.h>
55 #include <cam/ctl/ctl_ioctl.h>
56 #include <cam/ctl/ctl_ha.h>
57 #include <cam/ctl/ctl_private.h>
60 * Whenever support for a new command is added, it should be added to these
64 /* 5E PERSISTENT RESERVE IN */
65 const struct ctl_cmd_entry ctl_cmd_table_5e[32] =
68 {ctl_persistent_reserve_in, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
69 CTL_CMD_FLAG_OK_ON_BOTH |
70 CTL_CMD_FLAG_OK_ON_STOPPED |
71 CTL_CMD_FLAG_OK_ON_INOPERABLE |
72 CTL_CMD_FLAG_OK_ON_OFFLINE |
73 CTL_CMD_FLAG_OK_ON_SECONDARY |
75 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
77 10, { 0x00, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
79 /* 01 READ RESERVATION */
80 {ctl_persistent_reserve_in, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
81 CTL_CMD_FLAG_OK_ON_BOTH |
82 CTL_CMD_FLAG_OK_ON_STOPPED |
83 CTL_CMD_FLAG_OK_ON_INOPERABLE |
84 CTL_CMD_FLAG_OK_ON_OFFLINE |
85 CTL_CMD_FLAG_OK_ON_SECONDARY |
87 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
89 10, { 0x01, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
91 /* 02 REPORT CAPABILITIES */
92 {ctl_persistent_reserve_in, CTL_SERIDX_INQ, CTL_CMD_FLAG_ALLOW_ON_RESV |
93 CTL_CMD_FLAG_OK_ON_BOTH |
94 CTL_CMD_FLAG_OK_ON_STOPPED |
95 CTL_CMD_FLAG_OK_ON_INOPERABLE |
96 CTL_CMD_FLAG_OK_ON_OFFLINE |
97 CTL_CMD_FLAG_OK_ON_SECONDARY |
99 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
101 10, { 0x02, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
103 /* 03 READ FULL STATUS */
104 {ctl_persistent_reserve_in, CTL_SERIDX_INQ, CTL_CMD_FLAG_ALLOW_ON_RESV |
105 CTL_CMD_FLAG_OK_ON_BOTH |
106 CTL_CMD_FLAG_OK_ON_STOPPED |
107 CTL_CMD_FLAG_OK_ON_INOPERABLE |
108 CTL_CMD_FLAG_OK_ON_OFFLINE |
109 CTL_CMD_FLAG_OK_ON_SECONDARY |
111 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
113 10, { 0x03, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
118 /* 5F PERSISTENT RESERVE OUT */
119 const struct ctl_cmd_entry ctl_cmd_table_5f[32] =
122 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
123 CTL_CMD_FLAG_OK_ON_BOTH |
124 CTL_CMD_FLAG_OK_ON_STOPPED |
125 CTL_CMD_FLAG_OK_ON_INOPERABLE |
126 CTL_CMD_FLAG_OK_ON_OFFLINE |
127 CTL_CMD_FLAG_OK_ON_SECONDARY |
129 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
131 10, { 0x00, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
134 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
135 CTL_CMD_FLAG_OK_ON_BOTH |
136 CTL_CMD_FLAG_OK_ON_STOPPED |
137 CTL_CMD_FLAG_OK_ON_INOPERABLE |
138 CTL_CMD_FLAG_OK_ON_OFFLINE |
139 CTL_CMD_FLAG_OK_ON_SECONDARY |
141 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
143 10, { 0x01, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
146 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
147 CTL_CMD_FLAG_OK_ON_BOTH |
148 CTL_CMD_FLAG_OK_ON_STOPPED |
149 CTL_CMD_FLAG_OK_ON_INOPERABLE |
150 CTL_CMD_FLAG_OK_ON_OFFLINE |
151 CTL_CMD_FLAG_OK_ON_SECONDARY |
153 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
155 10, { 0x02, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
158 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
159 CTL_CMD_FLAG_OK_ON_BOTH |
160 CTL_CMD_FLAG_OK_ON_STOPPED |
161 CTL_CMD_FLAG_OK_ON_INOPERABLE |
162 CTL_CMD_FLAG_OK_ON_OFFLINE |
163 CTL_CMD_FLAG_OK_ON_SECONDARY |
165 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
167 10, { 0x03, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
170 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
171 CTL_CMD_FLAG_OK_ON_BOTH |
172 CTL_CMD_FLAG_OK_ON_STOPPED |
173 CTL_CMD_FLAG_OK_ON_INOPERABLE |
174 CTL_CMD_FLAG_OK_ON_OFFLINE |
175 CTL_CMD_FLAG_OK_ON_SECONDARY |
177 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
179 10, { 0x04, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
181 /* 05 PREEMPT AND ABORT */
182 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
183 CTL_CMD_FLAG_OK_ON_BOTH |
184 CTL_CMD_FLAG_OK_ON_STOPPED |
185 CTL_CMD_FLAG_OK_ON_INOPERABLE |
186 CTL_CMD_FLAG_OK_ON_OFFLINE |
187 CTL_CMD_FLAG_OK_ON_SECONDARY |
189 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
191 10, { 0x05, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
193 /* 06 REGISTER AND IGNORE EXISTING KEY */
194 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
195 CTL_CMD_FLAG_OK_ON_BOTH |
196 CTL_CMD_FLAG_OK_ON_STOPPED |
197 CTL_CMD_FLAG_OK_ON_INOPERABLE |
198 CTL_CMD_FLAG_OK_ON_OFFLINE |
199 CTL_CMD_FLAG_OK_ON_SECONDARY |
201 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
203 10, { 0x06, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
205 /* 07 REGISTER AND MOVE */
206 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
211 /* 83 EXTENDED COPY */
212 const struct ctl_cmd_entry ctl_cmd_table_83[32] =
214 /* 00 EXTENDED COPY (LID1) */
215 {ctl_extended_copy_lid1, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_BOTH |
218 16, { 0x00, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
220 /* 01 EXTENDED COPY (LID4) */
221 {ctl_extended_copy_lid4, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_BOTH |
224 16, { 0x01, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
227 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
230 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
233 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
236 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
239 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
242 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
245 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
248 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
251 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
254 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
257 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
260 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
263 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
266 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
268 /* 10 POPULATE TOKEN */
269 {ctl_populate_token, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_SLUN |
271 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
273 16, { 0x10, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff,
274 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
276 /* 11 WRITE USING TOKEN */
277 {ctl_write_using_token, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_SLUN |
280 16, { 0x11, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff,
281 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
284 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
287 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
290 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
293 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
296 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
299 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
302 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
305 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
308 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
311 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
313 /* 1C COPY OPERATION ABORT */
314 {ctl_copy_operation_abort, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_BOTH |
317 16, { 0x1c, 0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x07}},
320 /* 84 RECEIVE COPY STATUS */
321 const struct ctl_cmd_entry ctl_cmd_table_84[32] =
323 /* 00 RECEIVE COPY STATUS (LID1) */
324 {ctl_receive_copy_status_lid1, CTL_SERIDX_RD_CAP,
325 CTL_CMD_FLAG_OK_ON_BOTH |
327 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
329 16, {0x00, 0xff, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
331 /* 01 RECEIVE COPY DATA (LID1) */
332 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
335 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
337 /* 03 RECEIVE COPY OPERATING PARAMETERS */
338 {ctl_receive_copy_operating_parameters, CTL_SERIDX_RD_CAP,
339 CTL_CMD_FLAG_OK_ON_BOTH |
340 CTL_CMD_FLAG_OK_ON_STOPPED |
341 CTL_CMD_FLAG_OK_ON_INOPERABLE |
342 CTL_CMD_FLAG_OK_ON_SECONDARY |
344 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
346 16, {0x03, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
348 /* 04 RECEIVE COPY FAILURE DETAILS (LID1) */
349 {ctl_receive_copy_failure_details, CTL_SERIDX_RD_CAP,
350 CTL_CMD_FLAG_OK_ON_BOTH |
352 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
354 16, {0x04, 0xff, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
356 /* 05 RECEIVE COPY STATUS (LID4) */
357 {ctl_receive_copy_status_lid4, CTL_SERIDX_RD_CAP,
358 CTL_CMD_FLAG_OK_ON_BOTH |
360 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
362 16, {0x05, 0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
364 /* 06 RECEIVE COPY DATA (LID4)*/
365 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
367 /* 07 RECEIVE ROD TOKEN INFORMATION */
368 {ctl_receive_rod_token_information, CTL_SERIDX_RD_CAP,
369 CTL_CMD_FLAG_OK_ON_BOTH |
371 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
373 16, {0x07, 0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
375 /* 08 REPORT ALL ROD TOKENS */
376 {ctl_report_all_rod_tokens, CTL_SERIDX_RD_CAP,
377 CTL_CMD_FLAG_OK_ON_BOTH |
379 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
381 16, {0x08, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
384 /* 9E SERVICE ACTION IN(16) */
385 const struct ctl_cmd_entry ctl_cmd_table_9e[32] =
388 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
391 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
394 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
397 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
400 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
403 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
406 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
409 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
412 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
415 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
418 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
421 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
424 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
427 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
430 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
433 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
435 /* 10 READ CAPACITY(16) */
436 {ctl_read_capacity_16, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_SLUN |
437 CTL_CMD_FLAG_OK_ON_STOPPED |
438 CTL_CMD_FLAG_OK_ON_INOPERABLE |
439 CTL_CMD_FLAG_OK_ON_SECONDARY |
441 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
443 16, {0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
446 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
448 /* 12 GET LBA STATUS */
449 {ctl_get_lba_status, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN |
451 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
452 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
453 16, {0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
454 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
459 /* A3 MAINTENANCE IN */
460 const struct ctl_cmd_entry ctl_cmd_table_a3[32] =
463 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
466 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
469 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
472 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
475 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
478 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
481 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
484 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
487 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
490 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
492 /* 0A REPORT TARGET PORT GROUPS */
493 {ctl_report_tagret_port_groups, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_BOTH |
494 CTL_CMD_FLAG_OK_ON_STOPPED |
495 CTL_CMD_FLAG_OK_ON_INOPERABLE |
496 CTL_CMD_FLAG_OK_ON_OFFLINE |
497 CTL_CMD_FLAG_OK_ON_SECONDARY |
499 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
501 12, {0x0a, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
504 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
506 /* 0C REPORT SUPPORTED_OPCODES */
507 {ctl_report_supported_opcodes, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_BOTH |
508 CTL_CMD_FLAG_OK_ON_STOPPED |
509 CTL_CMD_FLAG_OK_ON_INOPERABLE |
510 CTL_CMD_FLAG_OK_ON_OFFLINE |
511 CTL_CMD_FLAG_OK_ON_SECONDARY |
513 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
515 12, {0x0c, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
517 /* 0D REPORT SUPPORTED_TASK MANAGEMENT FUNCTIONS */
518 {ctl_report_supported_tmf, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_BOTH |
519 CTL_CMD_FLAG_OK_ON_STOPPED |
520 CTL_CMD_FLAG_OK_ON_INOPERABLE |
521 CTL_CMD_FLAG_OK_ON_OFFLINE |
522 CTL_CMD_FLAG_OK_ON_SECONDARY |
524 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
526 12, {0x0d, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
529 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
531 /* 0F REPORT TIMESTAMP */
532 {ctl_report_timestamp, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_BOTH |
533 CTL_CMD_FLAG_OK_ON_STOPPED |
534 CTL_CMD_FLAG_OK_ON_INOPERABLE |
535 CTL_CMD_FLAG_OK_ON_OFFLINE |
536 CTL_CMD_FLAG_OK_ON_SECONDARY |
538 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
540 12, {0x0f, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
545 const struct ctl_cmd_entry ctl_cmd_table[256] =
547 /* 00 TEST UNIT READY */
548 {ctl_tur, CTL_SERIDX_TUR, CTL_CMD_FLAG_OK_ON_BOTH |
550 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
551 CTL_LUN_PAT_TUR, 6, {0, 0, 0, 0, 0x07}},
554 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
557 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
559 /* 03 REQUEST SENSE */
560 {ctl_request_sense, CTL_SERIDX_RQ_SNS, CTL_FLAG_DATA_IN |
561 CTL_CMD_FLAG_OK_ON_ALL_LUNS |
562 CTL_CMD_FLAG_ALLOW_ON_RESV |
563 CTL_CMD_FLAG_NO_SENSE |
564 CTL_CMD_FLAG_OK_ON_STOPPED |
565 CTL_CMD_FLAG_OK_ON_INOPERABLE |
566 CTL_CMD_FLAG_OK_ON_OFFLINE |
567 CTL_CMD_FLAG_OK_ON_SECONDARY |
568 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
569 CTL_LUN_PAT_NONE, 6, {0x01, 0, 0, 0xff, 0x07}},
572 {ctl_format, CTL_SERIDX_FORMAT, CTL_CMD_FLAG_OK_ON_SLUN |
573 CTL_CMD_FLAG_OK_ON_INOPERABLE |
575 CTL_LUN_PAT_NONE, 6, {0xff, 0, 0, 0, 0x07}},
577 /* 05 READ BLOCK LIMITS */
578 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
581 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
583 /* 07 REASSIGN BLOCKS */
584 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
587 {ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN |
589 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
590 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE, 6, {0x1f, 0xff, 0xff, 0xff, 0x07}},
593 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
596 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN |
598 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE, 6, {0x1f, 0xff, 0xff, 0xff, 0x07}},
601 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
604 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
607 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
610 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
612 /* 0F READ REVERSE(6) */
613 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
615 /* 10 WRITE FILEMARKS(6) */
616 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
619 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
622 {ctl_inquiry, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_ALL_LUNS |
623 CTL_CMD_FLAG_ALLOW_ON_RESV |
624 CTL_CMD_FLAG_NO_SENSE |
625 CTL_CMD_FLAG_OK_ON_STOPPED |
626 CTL_CMD_FLAG_OK_ON_INOPERABLE |
627 CTL_CMD_FLAG_OK_ON_OFFLINE |
628 CTL_CMD_FLAG_OK_ON_SECONDARY |
630 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
631 CTL_LUN_PAT_NONE, 6, {0xe1, 0xff, 0xff, 0xff, 0x07}},
634 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
636 /* 14 RECOVER BUFFERED DATA */
637 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
639 /* 15 MODE SELECT(6) */
640 {ctl_mode_select, CTL_SERIDX_MD_SEL, CTL_CMD_FLAG_OK_ON_BOTH |
641 CTL_CMD_FLAG_OK_ON_STOPPED |
642 CTL_CMD_FLAG_OK_ON_INOPERABLE |
643 CTL_CMD_FLAG_OK_ON_OFFLINE |
644 CTL_CMD_FLAG_OK_ON_SECONDARY |
646 CTL_LUN_PAT_NONE, 6, {0x11, 0, 0, 0xff, 0x07}},
649 {ctl_scsi_reserve, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
650 CTL_CMD_FLAG_OK_ON_BOTH |
651 CTL_CMD_FLAG_OK_ON_STOPPED |
652 CTL_CMD_FLAG_OK_ON_INOPERABLE |
653 CTL_CMD_FLAG_OK_ON_OFFLINE |
654 CTL_CMD_FLAG_OK_ON_SECONDARY |
656 CTL_LUN_PAT_NONE, 6, {0, 0, 0, 0, 0x07}},
659 {ctl_scsi_release, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
660 CTL_CMD_FLAG_OK_ON_BOTH |
661 CTL_CMD_FLAG_OK_ON_STOPPED |
662 CTL_CMD_FLAG_OK_ON_INOPERABLE |
663 CTL_CMD_FLAG_OK_ON_OFFLINE |
664 CTL_CMD_FLAG_OK_ON_SECONDARY |
666 CTL_LUN_PAT_NONE, 6, {0, 0, 0, 0, 0x07}},
669 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
672 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
674 /* 1A MODE SENSE(6) */
675 {ctl_mode_sense, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
676 CTL_CMD_FLAG_OK_ON_STOPPED |
677 CTL_CMD_FLAG_OK_ON_INOPERABLE |
678 CTL_CMD_FLAG_OK_ON_OFFLINE |
679 CTL_CMD_FLAG_OK_ON_SECONDARY |
681 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
682 CTL_LUN_PAT_NONE, 6, {0x08, 0xff, 0xff, 0xff, 0x07}},
684 /* 1B START STOP UNIT */
685 {ctl_start_stop, CTL_SERIDX_START, CTL_CMD_FLAG_OK_ON_SLUN |
686 CTL_CMD_FLAG_OK_ON_STOPPED |
687 CTL_CMD_FLAG_OK_ON_INOPERABLE |
688 CTL_CMD_FLAG_OK_ON_OFFLINE |
690 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
691 CTL_LUN_PAT_NONE, 6, {0x01, 0, 0, 0x03, 0x07}},
693 /* 1C RECEIVE DIAGNOSTIC RESULTS */
694 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
696 /* 1D SEND DIAGNOSTIC */
697 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
699 /* 1E PREVENT ALLOW MEDIUM REMOVAL */
700 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
703 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
706 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
709 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
712 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
715 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
718 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
720 /* 25 READ CAPACITY(10) */
721 {ctl_read_capacity, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_SLUN|
722 CTL_CMD_FLAG_OK_ON_STOPPED |
723 CTL_CMD_FLAG_OK_ON_INOPERABLE |
724 CTL_CMD_FLAG_OK_ON_SECONDARY |
726 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
727 CTL_LUN_PAT_READCAP, 10, {0, 0, 0, 0, 0, 0, 0, 0, 0x07}},
730 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
733 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
736 {ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN |
738 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
739 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
740 10, {0x1a, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
742 /* 29 READ GENERATION */
743 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
746 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
747 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
748 10, {0x1a, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
751 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
754 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
756 /* 2D READ UPDATED BLOCK */
757 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
759 /* 2E WRITE AND VERIFY(10) */
760 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
761 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
762 10, {0x12, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
765 {ctl_verify, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN |
767 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
768 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
769 10, {0x16, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
771 /* 30 SEARCH DATA HIGH(10) */
772 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
774 /* 31 SEARCH DATA EQUAL(10) */
775 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
777 /* 32 SEARCH DATA LOW(10) */
778 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
780 /* 33 SET LIMITS(10) */
781 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
783 /* 34 PRE-FETCH(10) */
784 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
786 /* 35 SYNCHRONIZE CACHE(10) */
787 {ctl_sync_cache, CTL_SERIDX_SYNC, CTL_CMD_FLAG_OK_ON_SLUN |
790 10, {0x02, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
792 /* 36 LOCK UNLOCK CACHE(10) */
793 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
795 /* 37 READ DEFECT DATA(10) */
796 {ctl_read_defect, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_SLUN |
798 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
800 10, {0, 0x1f, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
803 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
806 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
808 /* 3A COPY AND VERIFY */
809 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
811 /* 3B WRITE BUFFER */
812 {ctl_write_buffer, CTL_SERIDX_MD_SEL, CTL_CMD_FLAG_OK_ON_BOTH |
813 CTL_CMD_FLAG_OK_ON_STOPPED |
814 CTL_CMD_FLAG_OK_ON_INOPERABLE |
815 CTL_CMD_FLAG_OK_ON_OFFLINE |
818 10, {0x1f, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07}},
821 {ctl_read_buffer, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
822 CTL_CMD_FLAG_OK_ON_STOPPED |
823 CTL_CMD_FLAG_OK_ON_INOPERABLE |
824 CTL_CMD_FLAG_OK_ON_OFFLINE |
826 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
828 10, {0x1f, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07}},
830 /* 3D UPDATE BLOCK */
831 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
834 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
837 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
839 /* 40 CHANGE DEFINITION */
840 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
842 /* 41 WRITE SAME(10) */
843 {ctl_write_same, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN |
845 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
846 10, {0x1a, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
848 /* 42 READ SUB-CHANNEL / UNMAP */
849 {ctl_unmap, CTL_SERIDX_UNMAP, CTL_CMD_FLAG_OK_ON_SLUN | CTL_FLAG_DATA_OUT,
851 10, {1, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
853 /* 43 READ TOC/PMA/ATIP */
854 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
856 /* 44 REPORT DENSITY SUPPORT */
857 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
859 /* 45 PLAY AUDIO(10) */
860 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
862 /* 46 GET CONFIGURATION */
863 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
865 /* 47 PLAY AUDIO MSF */
866 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
868 /* 48 PLAY AUDIO TRACK INDEX */
869 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
871 /* 49 PLAY TRACK RELATIVE(10) */
872 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
874 /* 4A GET EVENT STATUS NOTIFICATION */
875 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
877 /* 4B PAUSE/RESUME */
878 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
881 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
884 {ctl_log_sense, CTL_SERIDX_LOG_SNS, CTL_CMD_FLAG_OK_ON_SLUN |
886 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
887 CTL_LUN_PAT_NONE, 10, {0, 0xff, 0xff, 0, 0xff, 0xff, 0xff, 0xff, 0x07} },
889 /* 4E STOP PLAY/SCAN */
890 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
893 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
896 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
899 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
902 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
904 /* 53 RESERVE TRACK */
905 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
907 /* 54 SEND OPC INFORMATION */
908 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
910 /* 55 MODE SELECT(10) */
911 {ctl_mode_select, CTL_SERIDX_MD_SEL, CTL_CMD_FLAG_OK_ON_BOTH |
912 CTL_CMD_FLAG_OK_ON_STOPPED |
913 CTL_CMD_FLAG_OK_ON_INOPERABLE |
914 CTL_CMD_FLAG_OK_ON_OFFLINE |
915 CTL_CMD_FLAG_OK_ON_SECONDARY |
917 CTL_LUN_PAT_NONE, 10, {0x11, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07} },
920 {ctl_scsi_reserve, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
921 CTL_CMD_FLAG_OK_ON_BOTH |
922 CTL_CMD_FLAG_OK_ON_STOPPED |
923 CTL_CMD_FLAG_OK_ON_INOPERABLE |
924 CTL_CMD_FLAG_OK_ON_OFFLINE |
925 CTL_CMD_FLAG_OK_ON_SECONDARY |
927 CTL_LUN_PAT_NONE, 10, {0x02, 0, 0xff, 0, 0, 0, 0xff, 0xff, 0x07} },
930 {ctl_scsi_release, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
931 CTL_CMD_FLAG_OK_ON_BOTH |
932 CTL_CMD_FLAG_OK_ON_STOPPED |
933 CTL_CMD_FLAG_OK_ON_INOPERABLE |
934 CTL_CMD_FLAG_OK_ON_OFFLINE |
935 CTL_CMD_FLAG_OK_ON_SECONDARY |
937 CTL_LUN_PAT_NONE, 10, {0x02, 0, 0xff, 0, 0, 0, 0xff, 0xff, 0x07} },
939 /* 58 REPAIR TRACK */
940 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
942 /* 59 READ MASTER CUE */
943 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
945 /* 5A MODE SENSE(10) */
946 {ctl_mode_sense, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
947 CTL_CMD_FLAG_OK_ON_STOPPED |
948 CTL_CMD_FLAG_OK_ON_INOPERABLE |
949 CTL_CMD_FLAG_OK_ON_OFFLINE |
950 CTL_CMD_FLAG_OK_ON_SECONDARY |
952 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
953 CTL_LUN_PAT_NONE, 10, {0x18, 0xff, 0xff, 0, 0, 0, 0xff, 0xff, 0x07} },
955 /* 5B CLOSE TRACK/SESSION */
956 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
958 /* 5C READ BUFFER CAPACITY */
959 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
961 /* 5D SEND CUE SHEET */
962 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
964 /* 5E PERSISTENT RESERVE IN */
965 {__DECONST(ctl_opfunc *, ctl_cmd_table_5e), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
968 /* 5F PERSISTENT RESERVE OUT */
969 {__DECONST(ctl_opfunc *, ctl_cmd_table_5f), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
973 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
976 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
979 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
982 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
985 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
988 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
991 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
994 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
997 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1000 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1003 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1006 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1009 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1012 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1015 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1018 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1021 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1024 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1027 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1030 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1033 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1036 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1039 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1042 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1045 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1048 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1051 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1054 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1057 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1060 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1063 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1066 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1068 /* 80 XDWRITE EXTENDED(16) */
1069 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1071 /* 81 REBUILD(16) */
1072 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1074 /* 82 REGENERATE(16) */
1075 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1077 /* 83 EXTENDED COPY */
1078 {__DECONST(ctl_opfunc *, ctl_cmd_table_83), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1081 /* 84 RECEIVE COPY RESULTS */
1082 {__DECONST(ctl_opfunc *, ctl_cmd_table_84), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1086 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1088 /* 86 ACCESS CONTROL IN */
1089 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1091 /* 87 ACCESS CONTROL OUT */
1092 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1095 {ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN | CTL_FLAG_DATA_IN |
1096 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1097 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
1098 16, {0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1099 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1101 /* 89 COMPARE AND WRITE */
1102 {ctl_cnw, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
1103 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1104 16, {0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1105 0xff, 0xff, 0, 0, 0, 0xff, 0, 0x07}},
1108 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
1109 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1110 16, {0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1111 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1114 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1116 /* 8C READ ATTRIBUTE */
1117 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1119 /* 8D WRITE ATTRIBUTE */
1120 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1122 /* 8E WRITE AND VERIFY(16) */
1123 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
1124 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1125 16, {0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1126 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1129 {ctl_verify, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN |
1131 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1132 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
1133 16, {0x16, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1134 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1136 /* 90 PRE-FETCH(16) */
1137 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1139 /* 91 SYNCHRONIZE CACHE(16) */
1140 {ctl_sync_cache, CTL_SERIDX_SYNC, CTL_CMD_FLAG_OK_ON_SLUN |
1143 16, {0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1144 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1146 /* 92 LOCK UNLOCK CACHE(16) */
1147 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1149 /* 93 WRITE SAME(16) */
1150 {ctl_write_same, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN |
1152 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1153 16, {0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1154 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1157 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1160 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1163 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1166 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1169 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1172 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1175 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1178 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1180 /* 9C WRITE ATOMIC (16) */
1181 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
1182 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1183 16, {0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1184 0xff, 0xff, 0, 0, 0xff, 0xff, 0, 0x07}},
1187 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1189 /* 9E SERVICE ACTION IN(16) */
1190 {__DECONST(ctl_opfunc *, ctl_cmd_table_9e), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1193 /* 9F SERVICE ACTION OUT(16) */
1194 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1196 /* A0 REPORT LUNS */
1197 {ctl_report_luns, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_ALL_LUNS |
1198 CTL_CMD_FLAG_ALLOW_ON_RESV |
1199 CTL_CMD_FLAG_NO_SENSE |
1200 CTL_CMD_FLAG_OK_ON_STOPPED |
1201 CTL_CMD_FLAG_OK_ON_INOPERABLE |
1202 CTL_CMD_FLAG_OK_ON_OFFLINE |
1203 CTL_CMD_FLAG_OK_ON_SECONDARY |
1205 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
1207 12, {0, 0xff, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1210 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1213 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1215 /* A3 MAINTENANCE IN */
1216 {__DECONST(ctl_opfunc *, ctl_cmd_table_a3), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1219 /* A4 MAINTENANCE OUT */
1220 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1222 /* A5 MOVE MEDIUM */
1223 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1225 /* A6 EXCHANGE MEDIUM */
1226 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1228 /* A7 MOVE MEDIUM ATTACHED */
1229 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1232 {ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN | CTL_FLAG_DATA_IN |
1233 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1234 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
1235 12, {0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1237 /* A9 PLAY TRACK RELATIVE(12) */
1238 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1241 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
1242 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1243 12, {0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1245 /* AB SERVICE ACTION IN(12) */
1246 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1249 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1251 /* AD READ DVD STRUCTURE */
1252 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1254 /* AE WRITE AND VERIFY(12) */
1255 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
1256 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1257 12, {0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1260 {ctl_verify, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN |
1262 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1263 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
1264 12, {0x16, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1266 /* B0 SEARCH DATA HIGH(12) */
1267 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1269 /* B1 SEARCH DATA EQUAL(12) */
1270 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1272 /* B2 SEARCH DATA LOW(12) */
1273 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1275 /* B3 SET LIMITS(12) */
1276 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1278 /* B4 READ ELEMENT STATUS ATTACHED */
1279 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1281 /* B5 REQUEST VOLUME ELEMENT ADDRESS */
1282 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1284 /* B6 SEND VOLUME TAG */
1285 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1287 /* B7 READ DEFECT DATA(12) */
1288 {ctl_read_defect, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_SLUN |
1290 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1292 12, {0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1294 /* B8 READ ELEMENT STATUS */
1295 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1297 /* B9 READ CD MSF */
1298 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1300 /* BA REDUNDANCY GROUP IN */
1301 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1303 /* BB REDUNDANCY GROUP OUT */
1304 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1307 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1310 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1312 /* BE VOLUME SET IN */
1313 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1315 /* BF VOLUME SET OUT */
1316 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1318 /* C0 - ISC_SEND_MSG_SHORT */
1319 //{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE},
1320 {ctl_isc, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_PROC | CTL_FLAG_DATA_NONE,
1322 16, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1323 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}},
1325 /* C1 - ISC_SEND_MSG */
1326 //{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE},
1327 {ctl_isc, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_PROC | CTL_FLAG_DATA_OUT,
1329 16, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1330 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}},
1332 /* C2 - ISC_WRITE */
1333 //{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE},
1334 {ctl_isc, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_PROC | CTL_FLAG_DATA_OUT,
1336 16, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1337 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}},
1340 //{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE},
1341 {ctl_isc, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_PROC | CTL_FLAG_DATA_IN,
1343 16, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1344 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}},
1347 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1350 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1353 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1356 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1359 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1362 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1365 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1368 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1371 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1374 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1377 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1380 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1383 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1386 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1389 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1392 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1395 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1398 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1401 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1404 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1407 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1410 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1413 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1416 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1419 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1422 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1425 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1428 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1431 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1434 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1437 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1440 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1443 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1446 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1449 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1452 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1455 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1458 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1461 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1464 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1467 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1470 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1473 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1476 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1479 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1482 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1485 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1488 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1491 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1494 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1497 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1500 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1503 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1506 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1509 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1512 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1515 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1518 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1521 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1524 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}