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_frontend_internal.h>
56 #include <cam/ctl/ctl_ioctl.h>
57 #include <cam/ctl/ctl_ha.h>
58 #include <cam/ctl/ctl_private.h>
61 * Whenever support for a new command is added, it should be added to these
65 /* 5E PERSISTENT RESERVE IN */
66 const struct ctl_cmd_entry ctl_cmd_table_5e[32] =
69 {ctl_persistent_reserve_in, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
70 CTL_CMD_FLAG_OK_ON_BOTH |
71 CTL_CMD_FLAG_OK_ON_STOPPED |
72 CTL_CMD_FLAG_OK_ON_INOPERABLE |
73 CTL_CMD_FLAG_OK_ON_OFFLINE |
74 CTL_CMD_FLAG_OK_ON_SECONDARY |
76 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
78 10, { 0x00, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
80 /* 01 READ RESERVATION */
81 {ctl_persistent_reserve_in, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
82 CTL_CMD_FLAG_OK_ON_BOTH |
83 CTL_CMD_FLAG_OK_ON_STOPPED |
84 CTL_CMD_FLAG_OK_ON_INOPERABLE |
85 CTL_CMD_FLAG_OK_ON_OFFLINE |
86 CTL_CMD_FLAG_OK_ON_SECONDARY |
88 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
90 10, { 0x01, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
92 /* 02 REPORT CAPABILITIES */
93 {ctl_persistent_reserve_in, CTL_SERIDX_INQ, CTL_CMD_FLAG_ALLOW_ON_RESV |
94 CTL_CMD_FLAG_OK_ON_BOTH |
95 CTL_CMD_FLAG_OK_ON_STOPPED |
96 CTL_CMD_FLAG_OK_ON_INOPERABLE |
97 CTL_CMD_FLAG_OK_ON_OFFLINE |
98 CTL_CMD_FLAG_OK_ON_SECONDARY |
100 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
102 10, { 0x02, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
104 /* 03 READ FULL STATUS */
105 {ctl_persistent_reserve_in, CTL_SERIDX_INQ, CTL_CMD_FLAG_ALLOW_ON_RESV |
106 CTL_CMD_FLAG_OK_ON_BOTH |
107 CTL_CMD_FLAG_OK_ON_STOPPED |
108 CTL_CMD_FLAG_OK_ON_INOPERABLE |
109 CTL_CMD_FLAG_OK_ON_OFFLINE |
110 CTL_CMD_FLAG_OK_ON_SECONDARY |
112 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
114 10, { 0x03, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
119 /* 5F PERSISTENT RESERVE OUT */
120 const struct ctl_cmd_entry ctl_cmd_table_5f[32] =
123 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
124 CTL_CMD_FLAG_OK_ON_BOTH |
125 CTL_CMD_FLAG_OK_ON_STOPPED |
126 CTL_CMD_FLAG_OK_ON_INOPERABLE |
127 CTL_CMD_FLAG_OK_ON_OFFLINE |
128 CTL_CMD_FLAG_OK_ON_SECONDARY |
130 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
132 10, { 0x00, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
135 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
136 CTL_CMD_FLAG_OK_ON_BOTH |
137 CTL_CMD_FLAG_OK_ON_STOPPED |
138 CTL_CMD_FLAG_OK_ON_INOPERABLE |
139 CTL_CMD_FLAG_OK_ON_OFFLINE |
140 CTL_CMD_FLAG_OK_ON_SECONDARY |
142 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
144 10, { 0x01, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
147 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
148 CTL_CMD_FLAG_OK_ON_BOTH |
149 CTL_CMD_FLAG_OK_ON_STOPPED |
150 CTL_CMD_FLAG_OK_ON_INOPERABLE |
151 CTL_CMD_FLAG_OK_ON_OFFLINE |
152 CTL_CMD_FLAG_OK_ON_SECONDARY |
154 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
156 10, { 0x02, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
159 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
160 CTL_CMD_FLAG_OK_ON_BOTH |
161 CTL_CMD_FLAG_OK_ON_STOPPED |
162 CTL_CMD_FLAG_OK_ON_INOPERABLE |
163 CTL_CMD_FLAG_OK_ON_OFFLINE |
164 CTL_CMD_FLAG_OK_ON_SECONDARY |
166 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
168 10, { 0x03, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
171 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
172 CTL_CMD_FLAG_OK_ON_BOTH |
173 CTL_CMD_FLAG_OK_ON_STOPPED |
174 CTL_CMD_FLAG_OK_ON_INOPERABLE |
175 CTL_CMD_FLAG_OK_ON_OFFLINE |
176 CTL_CMD_FLAG_OK_ON_SECONDARY |
178 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
180 10, { 0x04, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
182 /* 05 PREEMPT AND ABORT */
183 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
184 CTL_CMD_FLAG_OK_ON_BOTH |
185 CTL_CMD_FLAG_OK_ON_STOPPED |
186 CTL_CMD_FLAG_OK_ON_INOPERABLE |
187 CTL_CMD_FLAG_OK_ON_OFFLINE |
188 CTL_CMD_FLAG_OK_ON_SECONDARY |
190 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
192 10, { 0x05, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
194 /* 06 REGISTER AND IGNORE EXISTING KEY */
195 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
196 CTL_CMD_FLAG_OK_ON_BOTH |
197 CTL_CMD_FLAG_OK_ON_STOPPED |
198 CTL_CMD_FLAG_OK_ON_INOPERABLE |
199 CTL_CMD_FLAG_OK_ON_OFFLINE |
200 CTL_CMD_FLAG_OK_ON_SECONDARY |
202 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
204 10, { 0x06, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
206 /* 07 REGISTER AND MOVE */
207 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
212 /* 83 EXTENDED COPY */
213 const struct ctl_cmd_entry ctl_cmd_table_83[32] =
215 /* 00 EXTENDED COPY (LID1) */
216 {ctl_extended_copy_lid1, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_BOTH |
219 16, { 0x00, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
221 /* 01 EXTENDED COPY (LID4) */
222 {ctl_extended_copy_lid4, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_BOTH |
225 16, { 0x01, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
228 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
231 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
234 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
237 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
240 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
243 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
246 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
249 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
252 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
255 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
258 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
261 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
264 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
267 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
269 /* 10 POPULATE TOKEN */
270 {ctl_populate_token, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_SLUN |
272 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
274 16, { 0x10, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff,
275 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
277 /* 11 WRITE USING TOKEN */
278 {ctl_write_using_token, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_SLUN |
281 16, { 0x11, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff,
282 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
285 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
288 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
291 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
294 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
297 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
300 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
303 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
306 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
309 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
312 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
314 /* 1C COPY OPERATION ABORT */
315 {ctl_copy_operation_abort, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_BOTH |
318 16, { 0x1c, 0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x07}},
321 /* 84 RECEIVE COPY STATUS */
322 const struct ctl_cmd_entry ctl_cmd_table_84[32] =
324 /* 00 RECEIVE COPY STATUS (LID1) */
325 {ctl_receive_copy_status_lid1, CTL_SERIDX_RD_CAP,
326 CTL_CMD_FLAG_OK_ON_BOTH |
328 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
330 16, {0x00, 0xff, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
332 /* 01 RECEIVE COPY DATA (LID1) */
333 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
336 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
338 /* 03 RECEIVE COPY OPERATING PARAMETERS */
339 {ctl_receive_copy_operating_parameters, CTL_SERIDX_RD_CAP,
340 CTL_CMD_FLAG_OK_ON_BOTH |
341 CTL_CMD_FLAG_OK_ON_STOPPED |
342 CTL_CMD_FLAG_OK_ON_INOPERABLE |
343 CTL_CMD_FLAG_OK_ON_SECONDARY |
345 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
347 16, {0x03, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
349 /* 04 RECEIVE COPY FAILURE DETAILS (LID1) */
350 {ctl_receive_copy_failure_details, CTL_SERIDX_RD_CAP,
351 CTL_CMD_FLAG_OK_ON_BOTH |
353 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
355 16, {0x04, 0xff, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
357 /* 05 RECEIVE COPY STATUS (LID4) */
358 {ctl_receive_copy_status_lid4, CTL_SERIDX_RD_CAP,
359 CTL_CMD_FLAG_OK_ON_BOTH |
361 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
363 16, {0x05, 0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
365 /* 06 RECEIVE COPY DATA (LID4)*/
366 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
368 /* 07 RECEIVE ROD TOKEN INFORMATION */
369 {ctl_receive_rod_token_information, CTL_SERIDX_RD_CAP,
370 CTL_CMD_FLAG_OK_ON_BOTH |
372 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
374 16, {0x07, 0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
376 /* 08 REPORT ALL ROD TOKENS */
377 {ctl_report_all_rod_tokens, CTL_SERIDX_RD_CAP,
378 CTL_CMD_FLAG_OK_ON_BOTH |
380 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
382 16, {0x08, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
385 /* 9E SERVICE ACTION IN(16) */
386 const struct ctl_cmd_entry ctl_cmd_table_9e[32] =
389 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
392 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
395 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
398 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
401 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
404 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
407 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
410 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
413 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
416 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
419 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
422 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
425 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
428 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
431 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
434 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
436 /* 10 READ CAPACITY(16) */
437 {ctl_read_capacity_16, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_SLUN |
438 CTL_CMD_FLAG_OK_ON_STOPPED |
439 CTL_CMD_FLAG_OK_ON_INOPERABLE |
440 CTL_CMD_FLAG_OK_ON_SECONDARY |
442 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
444 16, {0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
447 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
449 /* 12 GET LBA STATUS */
450 {ctl_get_lba_status, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN |
452 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
453 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
454 16, {0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
455 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
460 /* A3 MAINTENANCE IN */
461 const struct ctl_cmd_entry ctl_cmd_table_a3[32] =
464 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
467 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
470 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
473 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
476 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
479 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
482 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
485 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
488 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
491 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
493 /* 0A REPORT TARGET PORT GROUPS */
494 {ctl_report_tagret_port_groups, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_BOTH |
495 CTL_CMD_FLAG_OK_ON_STOPPED |
496 CTL_CMD_FLAG_OK_ON_INOPERABLE |
497 CTL_CMD_FLAG_OK_ON_OFFLINE |
498 CTL_CMD_FLAG_OK_ON_SECONDARY |
500 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
502 12, {0x0a, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
505 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
507 /* 0C REPORT SUPPORTED_OPCODES */
508 {ctl_report_supported_opcodes, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_BOTH |
509 CTL_CMD_FLAG_OK_ON_STOPPED |
510 CTL_CMD_FLAG_OK_ON_INOPERABLE |
511 CTL_CMD_FLAG_OK_ON_OFFLINE |
512 CTL_CMD_FLAG_OK_ON_SECONDARY |
514 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
516 12, {0x0c, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
518 /* 0D REPORT SUPPORTED_TASK MANAGEMENT FUNCTIONS */
519 {ctl_report_supported_tmf, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_BOTH |
520 CTL_CMD_FLAG_OK_ON_STOPPED |
521 CTL_CMD_FLAG_OK_ON_INOPERABLE |
522 CTL_CMD_FLAG_OK_ON_OFFLINE |
523 CTL_CMD_FLAG_OK_ON_SECONDARY |
525 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
527 12, {0x0d, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
530 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
532 /* 0F REPORT TIMESTAMP */
533 {ctl_report_timestamp, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_BOTH |
534 CTL_CMD_FLAG_OK_ON_STOPPED |
535 CTL_CMD_FLAG_OK_ON_INOPERABLE |
536 CTL_CMD_FLAG_OK_ON_OFFLINE |
537 CTL_CMD_FLAG_OK_ON_SECONDARY |
539 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
541 12, {0x0f, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
546 const struct ctl_cmd_entry ctl_cmd_table[256] =
548 /* 00 TEST UNIT READY */
549 {ctl_tur, CTL_SERIDX_TUR, CTL_CMD_FLAG_OK_ON_BOTH |
551 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
552 CTL_LUN_PAT_TUR, 6, {0, 0, 0, 0, 0x07}},
555 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
558 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
560 /* 03 REQUEST SENSE */
561 {ctl_request_sense, CTL_SERIDX_RQ_SNS, CTL_FLAG_DATA_IN |
562 CTL_CMD_FLAG_OK_ON_ALL_LUNS |
563 CTL_CMD_FLAG_ALLOW_ON_RESV |
564 CTL_CMD_FLAG_NO_SENSE |
565 CTL_CMD_FLAG_OK_ON_STOPPED |
566 CTL_CMD_FLAG_OK_ON_INOPERABLE |
567 CTL_CMD_FLAG_OK_ON_OFFLINE |
568 CTL_CMD_FLAG_OK_ON_SECONDARY |
569 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
570 CTL_LUN_PAT_NONE, 6, {0x01, 0, 0, 0xff, 0x07}},
573 {ctl_format, CTL_SERIDX_FORMAT, CTL_CMD_FLAG_OK_ON_SLUN |
574 CTL_CMD_FLAG_OK_ON_INOPERABLE |
576 CTL_LUN_PAT_NONE, 6, {0xff, 0, 0, 0, 0x07}},
578 /* 05 READ BLOCK LIMITS */
579 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
582 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
584 /* 07 REASSIGN BLOCKS */
585 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
588 {ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN |
590 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
591 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE, 6, {0x1f, 0xff, 0xff, 0xff, 0x07}},
594 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
597 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN |
599 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE, 6, {0x1f, 0xff, 0xff, 0xff, 0x07}},
602 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
605 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
608 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
611 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
613 /* 0F READ REVERSE(6) */
614 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
616 /* 10 WRITE FILEMARKS(6) */
617 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
620 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
623 {ctl_inquiry, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_ALL_LUNS |
624 CTL_CMD_FLAG_ALLOW_ON_RESV |
625 CTL_CMD_FLAG_NO_SENSE |
626 CTL_CMD_FLAG_OK_ON_STOPPED |
627 CTL_CMD_FLAG_OK_ON_INOPERABLE |
628 CTL_CMD_FLAG_OK_ON_OFFLINE |
629 CTL_CMD_FLAG_OK_ON_SECONDARY |
631 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
632 CTL_LUN_PAT_NONE, 6, {0xe1, 0xff, 0xff, 0xff, 0x07}},
635 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
637 /* 14 RECOVER BUFFERED DATA */
638 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
640 /* 15 MODE SELECT(6) */
641 {ctl_mode_select, CTL_SERIDX_MD_SEL, CTL_CMD_FLAG_OK_ON_BOTH |
642 CTL_CMD_FLAG_OK_ON_STOPPED |
643 CTL_CMD_FLAG_OK_ON_INOPERABLE |
644 CTL_CMD_FLAG_OK_ON_OFFLINE |
645 CTL_CMD_FLAG_OK_ON_SECONDARY |
647 CTL_LUN_PAT_NONE, 6, {0x11, 0, 0, 0xff, 0x07}},
650 {ctl_scsi_reserve, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
651 CTL_CMD_FLAG_OK_ON_BOTH |
652 CTL_CMD_FLAG_OK_ON_STOPPED |
653 CTL_CMD_FLAG_OK_ON_INOPERABLE |
654 CTL_CMD_FLAG_OK_ON_OFFLINE |
655 CTL_CMD_FLAG_OK_ON_SECONDARY |
657 CTL_LUN_PAT_NONE, 6, {0, 0, 0, 0, 0x07}},
660 {ctl_scsi_release, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
661 CTL_CMD_FLAG_OK_ON_BOTH |
662 CTL_CMD_FLAG_OK_ON_STOPPED |
663 CTL_CMD_FLAG_OK_ON_INOPERABLE |
664 CTL_CMD_FLAG_OK_ON_OFFLINE |
665 CTL_CMD_FLAG_OK_ON_SECONDARY |
667 CTL_LUN_PAT_NONE, 6, {0, 0, 0, 0, 0x07}},
670 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
673 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
675 /* 1A MODE SENSE(6) */
676 {ctl_mode_sense, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
677 CTL_CMD_FLAG_OK_ON_STOPPED |
678 CTL_CMD_FLAG_OK_ON_INOPERABLE |
679 CTL_CMD_FLAG_OK_ON_OFFLINE |
680 CTL_CMD_FLAG_OK_ON_SECONDARY |
682 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
683 CTL_LUN_PAT_NONE, 6, {0x08, 0xff, 0xff, 0xff, 0x07}},
685 /* 1B START STOP UNIT */
686 {ctl_start_stop, CTL_SERIDX_START, CTL_CMD_FLAG_OK_ON_SLUN |
687 CTL_CMD_FLAG_OK_ON_STOPPED |
688 CTL_CMD_FLAG_OK_ON_INOPERABLE |
689 CTL_CMD_FLAG_OK_ON_OFFLINE |
691 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
692 CTL_LUN_PAT_NONE, 6, {0x01, 0, 0, 0x03, 0x07}},
694 /* 1C RECEIVE DIAGNOSTIC RESULTS */
695 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
697 /* 1D SEND DIAGNOSTIC */
698 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
700 /* 1E PREVENT ALLOW MEDIUM REMOVAL */
701 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
704 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
707 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
710 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
713 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
716 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
719 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
721 /* 25 READ CAPACITY(10) */
722 {ctl_read_capacity, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_SLUN|
723 CTL_CMD_FLAG_OK_ON_STOPPED |
724 CTL_CMD_FLAG_OK_ON_INOPERABLE |
725 CTL_CMD_FLAG_OK_ON_SECONDARY |
727 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
728 CTL_LUN_PAT_READCAP, 10, {0, 0, 0, 0, 0, 0, 0, 0, 0x07}},
731 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
734 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
737 {ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN |
739 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
740 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
741 10, {0x1a, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
743 /* 29 READ GENERATION */
744 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
747 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
748 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
749 10, {0x1a, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
752 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
755 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
757 /* 2D READ UPDATED BLOCK */
758 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
760 /* 2E WRITE AND VERIFY(10) */
761 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
762 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
763 10, {0x12, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
766 {ctl_verify, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN |
768 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
769 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
770 10, {0x16, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
772 /* 30 SEARCH DATA HIGH(10) */
773 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
775 /* 31 SEARCH DATA EQUAL(10) */
776 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
778 /* 32 SEARCH DATA LOW(10) */
779 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
781 /* 33 SET LIMITS(10) */
782 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
784 /* 34 PRE-FETCH(10) */
785 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
787 /* 35 SYNCHRONIZE CACHE(10) */
788 {ctl_sync_cache, CTL_SERIDX_START, CTL_CMD_FLAG_OK_ON_SLUN |
791 10, {0, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
793 /* 36 LOCK UNLOCK CACHE(10) */
794 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
796 /* 37 READ DEFECT DATA(10) */
797 {ctl_read_defect, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_SLUN |
799 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
801 10, {0, 0x1f, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
804 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
807 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
809 /* 3A COPY AND VERIFY */
810 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
812 /* 3B WRITE BUFFER */
813 {ctl_write_buffer, CTL_SERIDX_MD_SEL, CTL_CMD_FLAG_OK_ON_BOTH |
814 CTL_CMD_FLAG_OK_ON_STOPPED |
815 CTL_CMD_FLAG_OK_ON_INOPERABLE |
816 CTL_CMD_FLAG_OK_ON_OFFLINE |
819 10, {0x1f, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07}},
822 {ctl_read_buffer, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
823 CTL_CMD_FLAG_OK_ON_STOPPED |
824 CTL_CMD_FLAG_OK_ON_INOPERABLE |
825 CTL_CMD_FLAG_OK_ON_OFFLINE |
827 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
829 10, {0x1f, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07}},
831 /* 3D UPDATE BLOCK */
832 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
835 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
838 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
840 /* 40 CHANGE DEFINITION */
841 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
843 /* 41 WRITE SAME(10) */
844 {ctl_write_same, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN |
846 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
847 10, {0x1a, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
849 /* 42 READ SUB-CHANNEL / UNMAP */
850 {ctl_unmap, CTL_SERIDX_UNMAP, CTL_CMD_FLAG_OK_ON_SLUN | CTL_FLAG_DATA_OUT,
852 10, {1, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
854 /* 43 READ TOC/PMA/ATIP */
855 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
857 /* 44 REPORT DENSITY SUPPORT */
858 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
860 /* 45 PLAY AUDIO(10) */
861 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
863 /* 46 GET CONFIGURATION */
864 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
866 /* 47 PLAY AUDIO MSF */
867 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
869 /* 48 PLAY AUDIO TRACK INDEX */
870 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
872 /* 49 PLAY TRACK RELATIVE(10) */
873 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
875 /* 4A GET EVENT STATUS NOTIFICATION */
876 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
878 /* 4B PAUSE/RESUME */
879 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
882 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
885 {ctl_log_sense, CTL_SERIDX_LOG_SNS, CTL_CMD_FLAG_OK_ON_SLUN |
887 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
888 CTL_LUN_PAT_NONE, 10, {0, 0xff, 0xff, 0, 0xff, 0xff, 0xff, 0xff, 0x07} },
890 /* 4E STOP PLAY/SCAN */
891 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
894 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
897 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
900 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
903 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
905 /* 53 RESERVE TRACK */
906 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
908 /* 54 SEND OPC INFORMATION */
909 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
911 /* 55 MODE SELECT(10) */
912 {ctl_mode_select, CTL_SERIDX_MD_SEL, CTL_CMD_FLAG_OK_ON_BOTH |
913 CTL_CMD_FLAG_OK_ON_STOPPED |
914 CTL_CMD_FLAG_OK_ON_INOPERABLE |
915 CTL_CMD_FLAG_OK_ON_OFFLINE |
916 CTL_CMD_FLAG_OK_ON_SECONDARY |
918 CTL_LUN_PAT_NONE, 10, {0x11, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07} },
921 {ctl_scsi_reserve, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
922 CTL_CMD_FLAG_OK_ON_BOTH |
923 CTL_CMD_FLAG_OK_ON_STOPPED |
924 CTL_CMD_FLAG_OK_ON_INOPERABLE |
925 CTL_CMD_FLAG_OK_ON_OFFLINE |
926 CTL_CMD_FLAG_OK_ON_SECONDARY |
928 CTL_LUN_PAT_NONE, 10, {0x02, 0, 0xff, 0, 0, 0, 0xff, 0xff, 0x07} },
931 {ctl_scsi_release, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
932 CTL_CMD_FLAG_OK_ON_BOTH |
933 CTL_CMD_FLAG_OK_ON_STOPPED |
934 CTL_CMD_FLAG_OK_ON_INOPERABLE |
935 CTL_CMD_FLAG_OK_ON_OFFLINE |
936 CTL_CMD_FLAG_OK_ON_SECONDARY |
938 CTL_LUN_PAT_NONE, 10, {0x02, 0, 0xff, 0, 0, 0, 0xff, 0xff, 0x07} },
940 /* 58 REPAIR TRACK */
941 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
943 /* 59 READ MASTER CUE */
944 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
946 /* 5A MODE SENSE(10) */
947 {ctl_mode_sense, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
948 CTL_CMD_FLAG_OK_ON_STOPPED |
949 CTL_CMD_FLAG_OK_ON_INOPERABLE |
950 CTL_CMD_FLAG_OK_ON_OFFLINE |
951 CTL_CMD_FLAG_OK_ON_SECONDARY |
953 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
954 CTL_LUN_PAT_NONE, 10, {0x18, 0xff, 0xff, 0, 0, 0, 0xff, 0xff, 0x07} },
956 /* 5B CLOSE TRACK/SESSION */
957 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
959 /* 5C READ BUFFER CAPACITY */
960 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
962 /* 5D SEND CUE SHEET */
963 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
965 /* 5E PERSISTENT RESERVE IN */
966 {__DECONST(ctl_opfunc *, ctl_cmd_table_5e), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
969 /* 5F PERSISTENT RESERVE OUT */
970 {__DECONST(ctl_opfunc *, ctl_cmd_table_5f), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
974 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
977 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
980 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
983 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
986 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
989 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
992 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
995 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
998 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1001 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1004 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1007 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1010 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1013 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1016 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1019 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1022 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1025 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1028 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1031 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1034 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1037 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1040 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1043 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1046 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1049 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1052 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1055 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1058 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1061 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1064 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1067 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1069 /* 80 XDWRITE EXTENDED(16) */
1070 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1072 /* 81 REBUILD(16) */
1073 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1075 /* 82 REGENERATE(16) */
1076 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1078 /* 83 EXTENDED COPY */
1079 {__DECONST(ctl_opfunc *, ctl_cmd_table_83), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1082 /* 84 RECEIVE COPY RESULTS */
1083 {__DECONST(ctl_opfunc *, ctl_cmd_table_84), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1087 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1089 /* 86 ACCESS CONTROL IN */
1090 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1092 /* 87 ACCESS CONTROL OUT */
1093 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1096 {ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN | CTL_FLAG_DATA_IN |
1097 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1098 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
1099 16, {0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1100 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1102 /* 89 COMPARE AND WRITE */
1103 {ctl_cnw, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
1104 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1105 16, {0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1106 0xff, 0xff, 0, 0, 0, 0xff, 0, 0x07}},
1109 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
1110 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1111 16, {0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1112 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1115 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1117 /* 8C READ ATTRIBUTE */
1118 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1120 /* 8D WRITE ATTRIBUTE */
1121 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1123 /* 8E WRITE AND VERIFY(16) */
1124 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
1125 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1126 16, {0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1127 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1130 {ctl_verify, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN |
1132 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1133 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
1134 16, {0x16, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1135 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1137 /* 90 PRE-FETCH(16) */
1138 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1140 /* 91 SYNCHRONIZE CACHE(16) */
1141 {ctl_sync_cache, CTL_SERIDX_START, CTL_CMD_FLAG_OK_ON_SLUN |
1144 16, {0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1145 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1147 /* 92 LOCK UNLOCK CACHE(16) */
1148 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1150 /* 93 WRITE SAME(16) */
1151 {ctl_write_same, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN |
1153 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1154 16, {0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1155 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1158 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1161 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1164 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1167 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1170 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1173 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1176 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1179 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1181 /* 9C WRITE ATOMIC (16) */
1182 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
1183 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1184 16, {0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1185 0xff, 0xff, 0, 0, 0xff, 0xff, 0, 0x07}},
1188 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1190 /* 9E SERVICE ACTION IN(16) */
1191 {__DECONST(ctl_opfunc *, ctl_cmd_table_9e), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1194 /* 9F SERVICE ACTION OUT(16) */
1195 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1197 /* A0 REPORT LUNS */
1198 {ctl_report_luns, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_ALL_LUNS |
1199 CTL_CMD_FLAG_ALLOW_ON_RESV |
1200 CTL_CMD_FLAG_NO_SENSE |
1201 CTL_CMD_FLAG_OK_ON_STOPPED |
1202 CTL_CMD_FLAG_OK_ON_INOPERABLE |
1203 CTL_CMD_FLAG_OK_ON_OFFLINE |
1204 CTL_CMD_FLAG_OK_ON_SECONDARY |
1206 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
1208 12, {0, 0xff, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1211 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1214 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1216 /* A3 MAINTENANCE IN */
1217 {__DECONST(ctl_opfunc *, ctl_cmd_table_a3), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1220 /* A4 MAINTENANCE OUT */
1221 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1223 /* A5 MOVE MEDIUM */
1224 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1226 /* A6 EXCHANGE MEDIUM */
1227 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1229 /* A7 MOVE MEDIUM ATTACHED */
1230 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1233 {ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN | CTL_FLAG_DATA_IN |
1234 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1235 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
1236 12, {0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1238 /* A9 PLAY TRACK RELATIVE(12) */
1239 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1242 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
1243 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1244 12, {0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1246 /* AB SERVICE ACTION IN(12) */
1247 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1250 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1252 /* AD READ DVD STRUCTURE */
1253 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1255 /* AE WRITE AND VERIFY(12) */
1256 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
1257 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1258 12, {0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1261 {ctl_verify, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN |
1263 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1264 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
1265 12, {0x16, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1267 /* B0 SEARCH DATA HIGH(12) */
1268 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1270 /* B1 SEARCH DATA EQUAL(12) */
1271 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1273 /* B2 SEARCH DATA LOW(12) */
1274 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1276 /* B3 SET LIMITS(12) */
1277 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1279 /* B4 READ ELEMENT STATUS ATTACHED */
1280 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1282 /* B5 REQUEST VOLUME ELEMENT ADDRESS */
1283 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1285 /* B6 SEND VOLUME TAG */
1286 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1288 /* B7 READ DEFECT DATA(12) */
1289 {ctl_read_defect, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_SLUN |
1291 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1293 12, {0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1295 /* B8 READ ELEMENT STATUS */
1296 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1298 /* B9 READ CD MSF */
1299 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1301 /* BA REDUNDANCY GROUP IN */
1302 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1304 /* BB REDUNDANCY GROUP OUT */
1305 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1308 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1311 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1313 /* BE VOLUME SET IN */
1314 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1316 /* BF VOLUME SET OUT */
1317 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1319 /* C0 - ISC_SEND_MSG_SHORT */
1320 //{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE},
1321 {ctl_isc, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_PROC | CTL_FLAG_DATA_NONE,
1323 16, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1324 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}},
1326 /* C1 - ISC_SEND_MSG */
1327 //{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE},
1328 {ctl_isc, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_PROC | CTL_FLAG_DATA_OUT,
1330 16, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1331 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}},
1333 /* C2 - ISC_WRITE */
1334 //{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE},
1335 {ctl_isc, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_PROC | CTL_FLAG_DATA_OUT,
1337 16, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1338 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}},
1341 //{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE},
1342 {ctl_isc, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_PROC | CTL_FLAG_DATA_IN,
1344 16, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1345 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}},
1348 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1351 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1354 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1357 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1360 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1363 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1366 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1369 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1372 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1375 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1378 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1381 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1384 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1387 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1390 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1393 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1396 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1399 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1402 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1405 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1408 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1411 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1414 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1417 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1420 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1423 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1426 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1429 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1432 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1435 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1438 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1441 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1444 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1447 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1450 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1453 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1456 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1459 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1462 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1465 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1468 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1471 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1474 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1477 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1480 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1483 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1486 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1489 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1492 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1495 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1498 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1501 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1504 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1507 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1510 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1513 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1516 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1519 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1522 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1525 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}