xref: /freebsd/sys/cam/ctl/ctl_cmd_table.c (revision 984a2ea91fbc21063e931d117aed354cfe0c02f5)
1 /*-
2  * Copyright (c) 2003, 2004, 2005, 2009 Silicon Graphics International Corp.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
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.
16  *
17  * NO WARRANTY
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.
29  *
30  * $Id: //depot/users/kenm/FreeBSD-test2/sys/cam/ctl/ctl_cmd_table.c#4 $
31  * $FreeBSD$
32  */
33 /*
34  * CAM Target Layer command table.
35  *
36  * Author: Ken Merry <ken@FreeBSD.org>, Kim Le
37  */
38 
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>
48 
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>
59 
60 /*
61  * Whenever support for a new command is added, it should be added to these
62  * tables.
63  */
64 
65 /* 5E PERSISTENT RESERVE IN */
66 const struct ctl_cmd_entry ctl_cmd_table_5e[32] =
67 {
68 /* 00 READ KEYS */
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_SECONDARY |
74 						CTL_FLAG_DATA_IN |
75 						CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
76  CTL_LUN_PAT_NONE,
77  10, { 0x00, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
78 
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_SECONDARY |
85 						CTL_FLAG_DATA_IN |
86 						CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
87  CTL_LUN_PAT_NONE,
88  10, { 0x01, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
89 
90 /* 02 REPORT CAPABILITIES */
91 {ctl_persistent_reserve_in, CTL_SERIDX_INQ, CTL_CMD_FLAG_ALLOW_ON_RESV |
92 					    CTL_CMD_FLAG_OK_ON_BOTH |
93 					    CTL_CMD_FLAG_OK_ON_STOPPED |
94 					    CTL_CMD_FLAG_OK_ON_INOPERABLE |
95 					    CTL_CMD_FLAG_OK_ON_SECONDARY |
96 					    CTL_FLAG_DATA_IN |
97 					    CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
98  CTL_LUN_PAT_NONE,
99  10, { 0x02, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
100 
101 /* 03 READ FULL STATUS */
102 {ctl_persistent_reserve_in, CTL_SERIDX_INQ, CTL_CMD_FLAG_ALLOW_ON_RESV |
103 					    CTL_CMD_FLAG_OK_ON_BOTH |
104 					    CTL_CMD_FLAG_OK_ON_STOPPED |
105 					    CTL_CMD_FLAG_OK_ON_INOPERABLE |
106 					    CTL_CMD_FLAG_OK_ON_SECONDARY |
107 					    CTL_FLAG_DATA_IN |
108 					    CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
109  CTL_LUN_PAT_NONE,
110  10, { 0x03, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
111 
112 /* 04-1f */
113 };
114 
115 /* 5F PERSISTENT RESERVE OUT */
116 const struct ctl_cmd_entry ctl_cmd_table_5f[32] =
117 {
118 /* 00 REGISTER */
119 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
120 						CTL_CMD_FLAG_OK_ON_BOTH |
121 						CTL_CMD_FLAG_OK_ON_STOPPED |
122 						CTL_CMD_FLAG_OK_ON_INOPERABLE |
123 						CTL_CMD_FLAG_OK_ON_SECONDARY |
124 						CTL_FLAG_DATA_OUT |
125 						CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
126  CTL_LUN_PAT_NONE,
127  10, { 0x00, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
128 
129 /* 01 RESERVE */
130 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
131 						CTL_CMD_FLAG_OK_ON_BOTH |
132 						CTL_CMD_FLAG_OK_ON_STOPPED |
133 						CTL_CMD_FLAG_OK_ON_INOPERABLE |
134 						CTL_CMD_FLAG_OK_ON_SECONDARY |
135 						CTL_FLAG_DATA_OUT |
136 						CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
137  CTL_LUN_PAT_NONE,
138  10, { 0x01, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
139 
140 /* 02 RELEASE */
141 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
142 						CTL_CMD_FLAG_OK_ON_BOTH |
143 						CTL_CMD_FLAG_OK_ON_STOPPED |
144 						CTL_CMD_FLAG_OK_ON_INOPERABLE |
145 						CTL_CMD_FLAG_OK_ON_SECONDARY |
146 						CTL_FLAG_DATA_OUT |
147 						CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
148  CTL_LUN_PAT_NONE,
149  10, { 0x02, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
150 
151 /* 03 CLEAR */
152 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
153 						CTL_CMD_FLAG_OK_ON_BOTH |
154 						CTL_CMD_FLAG_OK_ON_STOPPED |
155 						CTL_CMD_FLAG_OK_ON_INOPERABLE |
156 						CTL_CMD_FLAG_OK_ON_SECONDARY |
157 						CTL_FLAG_DATA_OUT |
158 						CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
159  CTL_LUN_PAT_NONE,
160  10, { 0x03, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
161 
162 /* 04 PREEMPT */
163 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
164 						CTL_CMD_FLAG_OK_ON_BOTH |
165 						CTL_CMD_FLAG_OK_ON_STOPPED |
166 						CTL_CMD_FLAG_OK_ON_INOPERABLE |
167 						CTL_CMD_FLAG_OK_ON_SECONDARY |
168 						CTL_FLAG_DATA_OUT |
169 						CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
170  CTL_LUN_PAT_NONE,
171  10, { 0x04, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
172 
173 /* 05 PREEMPT AND ABORT */
174 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
175 
176 /* 06 REGISTER AND IGNORE EXISTING KEY */
177 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
178 						CTL_CMD_FLAG_OK_ON_BOTH |
179 						CTL_CMD_FLAG_OK_ON_STOPPED |
180 						CTL_CMD_FLAG_OK_ON_INOPERABLE |
181 						CTL_CMD_FLAG_OK_ON_SECONDARY |
182 						CTL_FLAG_DATA_OUT |
183 						CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
184  CTL_LUN_PAT_NONE,
185  10, { 0x06, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
186 
187 /* 07 REGISTER AND MOVE */
188 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
189 
190 /* 08-1f */
191 };
192 
193 /* 83 EXTENDED COPY */
194 const struct ctl_cmd_entry ctl_cmd_table_83[32] =
195 {
196 /* 00 EXTENDED COPY (LID1) */
197 {ctl_extended_copy_lid1, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_BOTH |
198 					    CTL_FLAG_DATA_OUT,
199  CTL_LUN_PAT_NONE,
200  16, { 0x00, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
201 
202 /* 01 EXTENDED COPY (LID4) */
203 {ctl_extended_copy_lid4, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_BOTH |
204 					    CTL_FLAG_DATA_OUT,
205  CTL_LUN_PAT_NONE,
206  16, { 0x01, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
207 
208 /* 02 */
209 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
210 
211 /* 03 */
212 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
213 
214 /* 04 */
215 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
216 
217 /* 05 */
218 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
219 
220 /* 06 */
221 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
222 
223 /* 07 */
224 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
225 
226 /* 08 */
227 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
228 
229 /* 09 */
230 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
231 
232 /* 0A */
233 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
234 
235 /* 0B */
236 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
237 
238 /* 0C */
239 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
240 
241 /* 0D */
242 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
243 
244 /* 0E */
245 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
246 
247 /* 0F */
248 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
249 
250 /* 10 POPULATE TOKEN */
251 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
252 
253 /* 11 WRITE USING TOKEN */
254 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
255 
256 /* 12 */
257 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
258 
259 /* 13 */
260 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
261 
262 /* 14 */
263 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
264 
265 /* 15 */
266 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
267 
268 /* 16 */
269 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
270 
271 /* 17 */
272 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
273 
274 /* 18 */
275 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
276 
277 /* 19 */
278 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
279 
280 /* 1A */
281 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
282 
283 /* 1B */
284 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
285 
286 /* 1C COPY OPERATION ABORT */
287 {ctl_copy_operation_abort, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_BOTH |
288 					      CTL_FLAG_DATA_NONE,
289  CTL_LUN_PAT_NONE,
290  16, { 0x1c, 0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x07}},
291 };
292 
293 /* 84 RECEIVE COPY STATUS */
294 const struct ctl_cmd_entry ctl_cmd_table_84[32] =
295 {
296 /* 00 RECEIVE COPY STATUS (LID1) */
297 {ctl_receive_copy_status_lid1, CTL_SERIDX_RD_CAP,
298  CTL_CMD_FLAG_OK_ON_BOTH |
299  CTL_FLAG_DATA_IN,
300  CTL_LUN_PAT_NONE,
301  16, {0x00, 0xff, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
302 
303 /* 01 RECEIVE COPY DATA (LID1) */
304 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
305 
306 /* 02 */
307 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
308 
309 /* 03 RECEIVE COPY OPERATING PARAMETERS */
310 {ctl_receive_copy_operating_parameters, CTL_SERIDX_RD_CAP,
311  CTL_CMD_FLAG_OK_ON_BOTH |
312  CTL_CMD_FLAG_OK_ON_STOPPED |
313  CTL_CMD_FLAG_OK_ON_INOPERABLE |
314  CTL_CMD_FLAG_OK_ON_SECONDARY |
315  CTL_FLAG_DATA_IN,
316  CTL_LUN_PAT_NONE,
317  16, {0x03, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
318 
319 /* 04 RECEIVE COPY FAILURE DETAILS (LID1) */
320 {ctl_receive_copy_failure_details, CTL_SERIDX_RD_CAP,
321  CTL_CMD_FLAG_OK_ON_BOTH |
322  CTL_FLAG_DATA_IN,
323  CTL_LUN_PAT_NONE,
324  16, {0x04, 0xff, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
325 
326 /* 05 RECEIVE COPY STATUS (LID4) */
327 {ctl_receive_copy_status_lid4, CTL_SERIDX_RD_CAP,
328  CTL_CMD_FLAG_OK_ON_BOTH |
329  CTL_FLAG_DATA_IN,
330  CTL_LUN_PAT_NONE,
331  16, {0x05, 0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
332 
333 /* 06 RECEIVE COPY DATA (LID4)*/
334 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
335 
336 /* 07 RECEIVE ROD TOKEN INFORMATION */
337 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
338 
339 /* 08 REPORT ALL ROD TOKENS */
340 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
341 };
342 
343 /* 9E SERVICE ACTION IN(16) */
344 const struct ctl_cmd_entry ctl_cmd_table_9e[32] =
345 {
346 /* 00 */
347 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
348 
349 /* 01 */
350 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
351 
352 /* 02 */
353 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
354 
355 /* 03 */
356 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
357 
358 /* 04 */
359 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
360 
361 /* 05 */
362 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
363 
364 /* 06 */
365 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
366 
367 /* 07 */
368 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
369 
370 /* 08 */
371 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
372 
373 /* 09 */
374 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
375 
376 /* 0A */
377 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
378 
379 /* 0B */
380 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
381 
382 /* 0C */
383 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
384 
385 /* 0D */
386 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
387 
388 /* 0E */
389 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
390 
391 /* 0F */
392 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
393 
394 /* 10 */
395 {ctl_read_capacity_16, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_SLUN |
396 					  CTL_CMD_FLAG_OK_ON_STOPPED |
397 					  CTL_CMD_FLAG_OK_ON_INOPERABLE |
398 					  CTL_CMD_FLAG_OK_ON_SECONDARY |
399 					  CTL_FLAG_DATA_IN |
400 					  CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
401  CTL_LUN_PAT_READCAP,
402  16, {0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
403 
404 /* 11-1f */
405 };
406 
407 /* A3 MAINTENANCE IN */
408 const struct ctl_cmd_entry ctl_cmd_table_a3[32] =
409 {
410 /* 00 */
411 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
412 
413 /* 01 */
414 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
415 
416 /* 02 */
417 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
418 
419 /* 03 */
420 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
421 
422 /* 04 */
423 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
424 
425 /* 05 */
426 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
427 
428 /* 06 */
429 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
430 
431 /* 07 */
432 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
433 
434 /* 08 */
435 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
436 
437 /* 09 */
438 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
439 
440 /* 0A REPORT TARGET PORT GROUPS */
441 {ctl_report_tagret_port_groups, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_BOTH |
442 						CTL_CMD_FLAG_OK_ON_STOPPED |
443 						CTL_CMD_FLAG_OK_ON_INOPERABLE |
444 						CTL_CMD_FLAG_OK_ON_SECONDARY |
445 						CTL_FLAG_DATA_IN,
446  CTL_LUN_PAT_NONE,
447  12, {0x0a, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
448 
449 /* 0B */
450 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
451 
452 /* 0C REPORT SUPPORTED_OPCODES */
453 {ctl_report_supported_opcodes, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_BOTH |
454 						CTL_CMD_FLAG_OK_ON_STOPPED |
455 						CTL_CMD_FLAG_OK_ON_INOPERABLE |
456 						CTL_CMD_FLAG_OK_ON_SECONDARY |
457 						CTL_FLAG_DATA_IN,
458  CTL_LUN_PAT_NONE,
459  12, {0x0c, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
460 
461 /* 0D REPORT SUPPORTED_TASK MANAGEMENT FUNCTIONS */
462 {ctl_report_supported_tmf, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_BOTH |
463 					   CTL_CMD_FLAG_OK_ON_STOPPED |
464 					   CTL_CMD_FLAG_OK_ON_INOPERABLE |
465 					   CTL_CMD_FLAG_OK_ON_SECONDARY |
466 					   CTL_FLAG_DATA_IN,
467  CTL_LUN_PAT_NONE,
468  12, {0x0d, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
469 
470 /* 0E */
471 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
472 
473 /* 0F REPORT TIMESTAMP */
474 {ctl_report_timestamp, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_BOTH |
475 					CTL_CMD_FLAG_OK_ON_STOPPED |
476 					CTL_CMD_FLAG_OK_ON_INOPERABLE |
477 					CTL_CMD_FLAG_OK_ON_SECONDARY |
478 					CTL_FLAG_DATA_IN,
479  CTL_LUN_PAT_NONE,
480  12, {0x0f, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
481 
482 /* 10-1f */
483 };
484 
485 const struct ctl_cmd_entry ctl_cmd_table[256] =
486 {
487 /* 00 TEST UNIT READY */
488 {ctl_tur, CTL_SERIDX_TUR, CTL_CMD_FLAG_OK_ON_BOTH |
489 			  CTL_FLAG_DATA_NONE |
490 			  CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
491  CTL_LUN_PAT_TUR, 6, {0, 0, 0, 0, 0x07}},
492 
493 /* 01 REWIND */
494 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
495 
496 /* 02 */
497 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
498 
499 /* 03 REQUEST SENSE */
500 {ctl_request_sense, CTL_SERIDX_RQ_SNS, CTL_FLAG_DATA_IN |
501 				       CTL_CMD_FLAG_OK_ON_ALL_LUNS |
502 				       CTL_CMD_FLAG_ALLOW_ON_RESV |
503 				       CTL_CMD_FLAG_NO_SENSE |
504 				       CTL_CMD_FLAG_OK_ON_STOPPED |
505 				       CTL_CMD_FLAG_OK_ON_INOPERABLE |
506 				       CTL_CMD_FLAG_OK_ON_OFFLINE |
507 				       CTL_CMD_FLAG_OK_ON_SECONDARY |
508 				       CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
509  CTL_LUN_PAT_NONE, 6, {0x01, 0, 0, 0xff, 0x07}},
510 
511 /* 04 FORMAT UNIT */
512 {ctl_format, CTL_SERIDX_FORMAT, CTL_CMD_FLAG_OK_ON_SLUN |
513 				CTL_CMD_FLAG_OK_ON_INOPERABLE |
514 				CTL_FLAG_DATA_OUT,
515  CTL_LUN_PAT_NONE, 6, {0xff, 0, 0, 0, 0x07}},
516 
517 /* 05 READ BLOCK LIMITS */
518 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
519 
520 /* 06 */
521 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
522 
523 /* 07 REASSIGN BLOCKS */
524 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
525 
526 /* 08 READ(6) */
527 {ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN |
528 				  CTL_FLAG_DATA_IN |
529 				  CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
530  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE, 6, {0x1f, 0xff, 0xff, 0xff, 0x07}},
531 
532 /* 09 */
533 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
534 
535 /* 0A WRITE(6) */
536 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN |
537 				   CTL_FLAG_DATA_OUT,
538  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE, 6, {0x1f, 0xff, 0xff, 0xff, 0x07}},
539 
540 /* 0B SEEK(6) */
541 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
542 
543 /* 0C */
544 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
545 
546 /* 0D */
547 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
548 
549 /* 0E */
550 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
551 
552 /* 0F READ REVERSE(6) */
553 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
554 
555 /* 10 WRITE FILEMARKS(6) */
556 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
557 
558 /* 11 SPACE(6) */
559 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
560 
561 /* 12 INQUIRY */
562 {ctl_inquiry, CTL_SERIDX_INQ, 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_FLAG_DATA_IN |
570 			      CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
571  CTL_LUN_PAT_NONE, 6, {0xe1, 0xff, 0xff, 0xff, 0x07}},
572 
573 /* 13 */
574 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
575 
576 /* 14 RECOVER BUFFERED DATA */
577 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
578 
579 /* 15 MODE SELECT(6) */
580 {ctl_mode_select, CTL_SERIDX_MD_SEL, CTL_CMD_FLAG_OK_ON_BOTH |
581 				     CTL_CMD_FLAG_OK_ON_STOPPED |
582 				     CTL_CMD_FLAG_OK_ON_INOPERABLE |
583 				     CTL_CMD_FLAG_OK_ON_SECONDARY |
584 				     CTL_FLAG_DATA_OUT,
585  CTL_LUN_PAT_NONE, 6, {0x11, 0, 0, 0xff, 0x07}},
586 
587 /* 16 RESERVE(6) */
588 {ctl_scsi_reserve, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
589 				    CTL_CMD_FLAG_OK_ON_BOTH |
590 				    CTL_CMD_FLAG_OK_ON_STOPPED |
591 				    CTL_CMD_FLAG_OK_ON_INOPERABLE |
592 				    CTL_CMD_FLAG_OK_ON_SECONDARY |
593 				    CTL_FLAG_DATA_OUT,
594  CTL_LUN_PAT_NONE, 6, {0, 0, 0, 0, 0x07}},
595 
596 /* 17 RELEASE(6) */
597 {ctl_scsi_release, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
598 				   CTL_CMD_FLAG_OK_ON_BOTH |
599 				   CTL_CMD_FLAG_OK_ON_STOPPED |
600 				   CTL_CMD_FLAG_OK_ON_INOPERABLE |
601 				   CTL_CMD_FLAG_OK_ON_SECONDARY |
602 				   CTL_FLAG_DATA_NONE,
603  CTL_LUN_PAT_NONE, 6, {0, 0, 0, 0, 0x07}},
604 
605 /* 18 COPY */
606 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
607 
608 /* 19 ERASE(6) */
609 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
610 
611 /* 1A MODE SENSE(6) */
612 {ctl_mode_sense, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
613 				    CTL_CMD_FLAG_OK_ON_STOPPED |
614 				    CTL_CMD_FLAG_OK_ON_INOPERABLE |
615 				    CTL_CMD_FLAG_OK_ON_SECONDARY |
616 				    CTL_FLAG_DATA_IN |
617 				    CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
618  CTL_LUN_PAT_NONE, 6, {0x08, 0xff, 0, 0xff, 0x07}},
619 
620 /* 1B START STOP UNIT */
621 {ctl_start_stop, CTL_SERIDX_START, CTL_CMD_FLAG_OK_ON_SLUN |
622 				   CTL_CMD_FLAG_OK_ON_STOPPED |
623 				   CTL_CMD_FLAG_OK_ON_INOPERABLE |
624 				   CTL_CMD_FLAG_OK_ON_OFFLINE |
625 				   CTL_FLAG_DATA_NONE |
626 				   CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
627  CTL_LUN_PAT_NONE, 6, {0x01, 0, 0, 0x03, 0x07}},
628 
629 /* 1C RECEIVE DIAGNOSTIC RESULTS */
630 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
631 
632 /* 1D SEND DIAGNOSTIC */
633 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
634 
635 /* 1E PREVENT ALLOW MEDIUM REMOVAL */
636 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
637 
638 /* 1F */
639 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
640 
641 /* 20 */
642 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
643 
644 /* 21 */
645 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
646 
647 /* 22 */
648 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
649 
650 /* 23 */
651 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
652 
653 /* 24 SET WINDOW */
654 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
655 
656 /* 25 READ CAPACITY(10) */
657 {ctl_read_capacity, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_SLUN|
658 				       CTL_CMD_FLAG_OK_ON_STOPPED |
659 				       CTL_CMD_FLAG_OK_ON_INOPERABLE |
660 				       CTL_CMD_FLAG_OK_ON_SECONDARY |
661 				       CTL_FLAG_DATA_IN |
662 				       CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
663  CTL_LUN_PAT_READCAP, 10, {0, 0, 0, 0, 0, 0, 0, 0, 0x07}},
664 
665 /* 26 */
666 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
667 
668 /* 27 */
669 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
670 
671 /* 28 READ(10) */
672 {ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN |
673 				  CTL_FLAG_DATA_IN |
674 				  CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
675  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
676  10, {0x18, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
677 
678 /* 29 READ GENERATION */
679 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
680 
681 /* 2A WRITE(10) */
682 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
683  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
684  10, {0x18, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
685 
686 /* 2B SEEK(10) */
687 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
688 
689 /* 2C ERASE(10) */
690 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
691 
692 /* 2D READ UPDATED BLOCK */
693 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
694 
695 /* 2E WRITE AND VERIFY(10) */
696 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
697  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
698  10, {0x10, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
699 
700 /* 2F VERIFY(10) */
701 {ctl_verify, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN |
702 			      CTL_FLAG_DATA_OUT |
703 			      CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
704  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
705  10, {0x16, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
706 
707 /* 30 SEARCH DATA HIGH(10) */
708 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
709 
710 /* 31 SEARCH DATA EQUAL(10) */
711 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
712 
713 /* 32 SEARCH DATA LOW(10) */
714 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
715 
716 /* 33 SET LIMITS(10) */
717 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
718 
719 /* 34 PRE-FETCH(10) */
720 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
721 
722 /* 35 SYNCHRONIZE CACHE(10) */
723 {ctl_sync_cache, CTL_SERIDX_START, CTL_CMD_FLAG_OK_ON_SLUN |
724 				   CTL_FLAG_DATA_NONE,
725  CTL_LUN_PAT_NONE,
726  10, {0, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
727 
728 /* 36 LOCK UNLOCK CACHE(10) */
729 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
730 
731 /* 37 READ DEFECT DATA(10) */
732 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
733 
734 /* 38 MEDIUM SCAN */
735 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
736 
737 /* 39 COMPARE */
738 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
739 
740 /* 3A COPY AND VERIFY */
741 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
742 
743 /* 3B WRITE BUFFER */
744 {ctl_write_buffer, CTL_SERIDX_MD_SEL, CTL_CMD_FLAG_OK_ON_BOTH |
745 				      CTL_FLAG_DATA_OUT,
746  CTL_LUN_PAT_NONE,
747  10, {0x1f, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07}},
748 
749 /* 3C READ BUFFER */
750 {ctl_read_buffer, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
751 				     CTL_FLAG_DATA_IN |
752 				     CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
753  CTL_LUN_PAT_NONE,
754  10, {0x1f, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07}},
755 
756 /* 3D UPDATE BLOCK */
757 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
758 
759 /* 3E READ LONG */
760 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
761 
762 /* 3F WRITE LONG */
763 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
764 
765 /* 40 CHANGE DEFINITION */
766 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
767 
768 /* 41 WRITE SAME(10) */
769 {ctl_write_same, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN |
770 				   CTL_FLAG_DATA_OUT,
771  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
772  10, {0x0a, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
773 
774 /* 42 READ SUB-CHANNEL / UNMAP */
775 {ctl_unmap, CTL_SERIDX_UNMAP, CTL_CMD_FLAG_OK_ON_SLUN | CTL_FLAG_DATA_OUT,
776  CTL_LUN_PAT_WRITE,
777  10, {0, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
778 
779 /* 43 READ TOC/PMA/ATIP */
780 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
781 
782 /* 44 REPORT DENSITY SUPPORT */
783 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
784 
785 /* 45 PLAY AUDIO(10) */
786 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
787 
788 /* 46 GET CONFIGURATION */
789 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
790 
791 /* 47 PLAY AUDIO MSF */
792 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
793 
794 /* 48 PLAY AUDIO TRACK INDEX */
795 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
796 
797 /* 49 PLAY TRACK RELATIVE(10) */
798 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
799 
800 /* 4A GET EVENT STATUS NOTIFICATION */
801 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
802 
803 /* 4B PAUSE/RESUME */
804 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
805 
806 /* 4C LOG SELECT */
807 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
808 
809 /* 4D LOG SENSE */
810 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
811 
812 /* 4E STOP PLAY/SCAN */
813 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
814 
815 /* 4F */
816 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
817 
818 /* 50 XDWRITE(10) */
819 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
820 
821 /* 51 XPWRITE(10) */
822 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
823 
824 /* 52 XDREAD(10) */
825 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
826 
827 /* 53 RESERVE TRACK */
828 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
829 
830 /* 54 SEND OPC INFORMATION */
831 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
832 
833 /* 55 MODE SELECT(10) */
834 {ctl_mode_select, CTL_SERIDX_MD_SEL, CTL_CMD_FLAG_OK_ON_BOTH |
835 				     CTL_CMD_FLAG_OK_ON_STOPPED |
836 				     CTL_CMD_FLAG_OK_ON_INOPERABLE |
837 				     CTL_CMD_FLAG_OK_ON_SECONDARY |
838 				     CTL_FLAG_DATA_OUT,
839  CTL_LUN_PAT_NONE, 10, {0x11, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07} },
840 
841 /* 56 RESERVE(10) */
842 {ctl_scsi_reserve, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
843 				    CTL_CMD_FLAG_OK_ON_BOTH |
844 				    CTL_CMD_FLAG_OK_ON_STOPPED |
845 				    CTL_CMD_FLAG_OK_ON_INOPERABLE |
846 				    CTL_CMD_FLAG_OK_ON_SECONDARY |
847 				    CTL_FLAG_DATA_OUT,
848  CTL_LUN_PAT_NONE, 10, {0x02, 0, 0xff, 0, 0, 0, 0xff, 0xff, 0x07} },
849 
850 /* 57 RELEASE(10) */
851 {ctl_scsi_release, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
852 				   CTL_CMD_FLAG_OK_ON_BOTH |
853 				   CTL_CMD_FLAG_OK_ON_STOPPED |
854 				   CTL_CMD_FLAG_OK_ON_INOPERABLE |
855 				   CTL_CMD_FLAG_OK_ON_SECONDARY |
856 				   CTL_FLAG_DATA_OUT,
857  CTL_LUN_PAT_NONE, 10, {0x02, 0, 0xff, 0, 0, 0, 0xff, 0xff, 0x07} },
858 
859 /* 58 REPAIR TRACK */
860 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
861 
862 /* 59 READ MASTER CUE */
863 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
864 
865 /* 5A MODE SENSE(10) */
866 {ctl_mode_sense, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
867 				    CTL_CMD_FLAG_OK_ON_STOPPED |
868 				    CTL_CMD_FLAG_OK_ON_INOPERABLE |
869 				    CTL_CMD_FLAG_OK_ON_SECONDARY |
870 				    CTL_FLAG_DATA_IN |
871 				    CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
872  CTL_LUN_PAT_NONE, 10, {0x18, 0xff, 0, 0, 0, 0, 0xff, 0xff, 0x07} },
873 
874 /* 5B CLOSE TRACK/SESSION */
875 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
876 
877 /* 5C READ BUFFER CAPACITY */
878 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
879 
880 /* 5D SEND CUE SHEET */
881 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
882 
883 /* 5E PERSISTENT RESERVE IN */
884 {__DECONST(ctl_opfunc *, ctl_cmd_table_5e), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
885  CTL_LUN_PAT_NONE},
886 
887 /* 5F PERSISTENT RESERVE OUT */
888 {__DECONST(ctl_opfunc *, ctl_cmd_table_5f), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
889  CTL_LUN_PAT_NONE},
890 
891 /* 60 */
892 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
893 
894 /* 61 */
895 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
896 
897 /* 62 */
898 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
899 
900 /* 63 */
901 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
902 
903 /* 64 */
904 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
905 
906 /* 65 */
907 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
908 
909 /* 66 */
910 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
911 
912 /* 67 */
913 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
914 
915 /* 68 */
916 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
917 
918 /* 69 */
919 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
920 
921 /* 6A */
922 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
923 
924 /* 6B */
925 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
926 
927 /* 6C */
928 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
929 
930 /* 6D */
931 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
932 
933 /* 6E */
934 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
935 
936 /* 6F */
937 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
938 
939 /* 70 */
940 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
941 
942 /* 71 */
943 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
944 
945 /* 72 */
946 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
947 
948 /* 73 */
949 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
950 
951 /* 74 */
952 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
953 
954 /* 75 */
955 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
956 
957 /* 76 */
958 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
959 
960 /* 77 */
961 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
962 
963 /* 78 */
964 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
965 
966 /* 79 */
967 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
968 
969 /* 7A */
970 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
971 
972 /* 7B */
973 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
974 
975 /* 7C */
976 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
977 
978 /* 7D */
979 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
980 
981 /* 7E */
982 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
983 
984 /* 7F */
985 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
986 
987 /* 80 XDWRITE EXTENDED(16) */
988 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
989 
990 /* 81 REBUILD(16) */
991 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
992 
993 /* 82 REGENERATE(16) */
994 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
995 
996 /* 83 EXTENDED COPY */
997 {__DECONST(ctl_opfunc *, ctl_cmd_table_83), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
998  CTL_LUN_PAT_NONE},
999 
1000 /* 84 RECEIVE COPY RESULTS */
1001 {__DECONST(ctl_opfunc *, ctl_cmd_table_84), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1002  CTL_LUN_PAT_NONE},
1003 
1004 /* 85 */
1005 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1006 
1007 /* 86 ACCESS CONTROL IN */
1008 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1009 
1010 /* 87 ACCESS CONTROL OUT */
1011 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1012 
1013 /* 88 READ(16) */
1014 {ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN | CTL_FLAG_DATA_IN |
1015                                   CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
1016  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
1017  16, {0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1018       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1019 
1020 /* 89 COMPARE AND WRITE */
1021 {ctl_cnw, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
1022  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1023  16, {0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1024       0xff, 0xff, 0, 0, 0, 0xff, 0, 0x07}},
1025 
1026 /* 8A WRITE(16) */
1027 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
1028  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1029  16, {0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1030       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1031 
1032 /* 8B */
1033 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1034 
1035 /* 8C READ ATTRIBUTE */
1036 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1037 
1038 /* 8D WRITE ATTRIBUTE */
1039 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1040 
1041 /* 8E WRITE AND VERIFY(16) */
1042 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
1043  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1044  16, {0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1045       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1046 
1047 /* 8F VERIFY(16) */
1048 {ctl_verify, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN |
1049 			      CTL_FLAG_DATA_OUT |
1050 			      CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
1051  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
1052  16, {0x16, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1053       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1054 
1055 /* 90 PRE-FETCH(16) */
1056 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1057 
1058 /* 91 SYNCHRONIZE CACHE(16) */
1059 {ctl_sync_cache, CTL_SERIDX_START, CTL_CMD_FLAG_OK_ON_SLUN |
1060 				   CTL_FLAG_DATA_NONE,
1061  CTL_LUN_PAT_NONE,
1062  16, {0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1063       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1064 
1065 /* 92 LOCK UNLOCK CACHE(16) */
1066 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1067 
1068 /* 93 WRITE SAME(16) */
1069 {ctl_write_same, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN |
1070 				   CTL_FLAG_DATA_OUT,
1071  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1072  16, {0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1073       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1074 
1075 /* 94 */
1076 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1077 
1078 /* 95 */
1079 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1080 
1081 /* 96 */
1082 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1083 
1084 /* 97 */
1085 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1086 
1087 /* 98 */
1088 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1089 
1090 /* 99 */
1091 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1092 
1093 /* 9A */
1094 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1095 
1096 /* 9B */
1097 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1098 
1099 /* 9C */
1100 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1101 
1102 /* 9D */
1103 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1104 
1105 /* 9E SERVICE ACTION IN(16) */
1106 {__DECONST(ctl_opfunc *, ctl_cmd_table_9e), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1107  CTL_LUN_PAT_NONE},
1108 
1109 /* 9F SERVICE ACTION OUT(16) */
1110 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1111 
1112 /* A0 REPORT LUNS */
1113 {ctl_report_luns, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_ALL_LUNS |
1114 				  CTL_CMD_FLAG_ALLOW_ON_RESV |
1115 				  CTL_CMD_FLAG_NO_SENSE |
1116 				  CTL_CMD_FLAG_OK_ON_STOPPED |
1117 				  CTL_CMD_FLAG_OK_ON_INOPERABLE |
1118 				  CTL_CMD_FLAG_OK_ON_OFFLINE |
1119 				  CTL_CMD_FLAG_OK_ON_SECONDARY |
1120 				  CTL_FLAG_DATA_IN |
1121 				  CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
1122  CTL_LUN_PAT_NONE,
1123  12, {0, 0xff, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1124 
1125 /* A1 BLANK */
1126 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1127 
1128 /* A2 SEND EVENT */
1129 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1130 
1131 /* A3 MAINTENANCE IN */
1132 {__DECONST(ctl_opfunc *, ctl_cmd_table_a3), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1133  CTL_LUN_PAT_NONE},
1134 
1135 /* A4 MAINTENANCE OUT */
1136 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1137 
1138 /* A5 MOVE MEDIUM */
1139 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1140 
1141 /* A6 EXCHANGE MEDIUM */
1142 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1143 
1144 /* A7 MOVE MEDIUM ATTACHED */
1145 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1146 
1147 /* A8 READ(12) */
1148 {ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN | CTL_FLAG_DATA_IN |
1149                                   CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
1150  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
1151  12, {0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1152 
1153 /* A9 PLAY TRACK RELATIVE(12) */
1154 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1155 
1156 /* AA WRITE(12) */
1157 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
1158  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1159  12, {0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1160 
1161 /* AB SERVICE ACTION IN(12) */
1162 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1163 
1164 /* AC ERASE(12) */
1165 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1166 
1167 /* AD READ DVD STRUCTURE */
1168 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1169 
1170 /* AE WRITE AND VERIFY(12) */
1171 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
1172  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1173  12, {0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1174 
1175 /* AF VERIFY(12) */
1176 {ctl_verify, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN |
1177 			      CTL_FLAG_DATA_OUT |
1178 			      CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
1179  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
1180  12, {0x16, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1181 
1182 /* B0 SEARCH DATA HIGH(12) */
1183 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1184 
1185 /* B1 SEARCH DATA EQUAL(12) */
1186 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1187 
1188 /* B2 SEARCH DATA LOW(12) */
1189 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1190 
1191 /* B3 SET LIMITS(12) */
1192 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1193 
1194 /* B4 READ ELEMENT STATUS ATTACHED */
1195 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1196 
1197 /* B5 REQUEST VOLUME ELEMENT ADDRESS */
1198 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1199 
1200 /* B6 SEND VOLUME TAG */
1201 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1202 
1203 /* B7 READ DEFECT DATA(12) */
1204 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1205 
1206 /* B8 READ ELEMENT STATUS */
1207 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1208 
1209 /* B9 READ CD MSF */
1210 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1211 
1212 /* BA REDUNDANCY GROUP IN */
1213 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1214 
1215 /* BB REDUNDANCY GROUP OUT */
1216 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1217 
1218 /* BC SPARE IN */
1219 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1220 
1221 /* BD SPARE OUT */
1222 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1223 
1224 /* BE VOLUME SET IN */
1225 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1226 
1227 /* BF VOLUME SET OUT */
1228 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1229 
1230 /* C0 - ISC_SEND_MSG_SHORT */
1231 //{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE},
1232 {ctl_isc, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_PROC | CTL_FLAG_DATA_NONE,
1233  CTL_LUN_PAT_NONE,
1234  16, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1235       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}},
1236 
1237 /* C1 - ISC_SEND_MSG */
1238 //{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE},
1239 {ctl_isc, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_PROC | CTL_FLAG_DATA_OUT,
1240  CTL_LUN_PAT_NONE,
1241  16, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1242       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}},
1243 
1244 /* C2 - ISC_WRITE */
1245 //{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE},
1246 {ctl_isc, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_PROC | CTL_FLAG_DATA_OUT,
1247  CTL_LUN_PAT_NONE,
1248  16, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1249       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}},
1250 
1251 /* C3 - ISC_READ */
1252 //{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE},
1253 {ctl_isc, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_PROC | CTL_FLAG_DATA_IN,
1254  CTL_LUN_PAT_NONE,
1255  16, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1256       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}},
1257 
1258 /* C4 */
1259 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1260 
1261 /* C5 */
1262 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1263 
1264 /* C6 */
1265 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1266 
1267 /* C7 */
1268 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1269 
1270 /* C8 */
1271 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1272 
1273 /* C9 */
1274 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1275 
1276 /* CA */
1277 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1278 
1279 /* CB */
1280 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1281 
1282 /* CC */
1283 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1284 
1285 /* CD */
1286 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1287 
1288 /* CE */
1289 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1290 
1291 /* CF */
1292 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1293 
1294 /* D0 */
1295 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1296 
1297 /* D1 */
1298 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1299 
1300 /* D2 */
1301 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1302 
1303 /* D3 */
1304 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1305 
1306 /* D4 */
1307 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1308 
1309 /* D5 */
1310 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1311 
1312 /* D6 */
1313 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1314 
1315 /* D7 */
1316 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1317 
1318 /* D8 */
1319 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1320 
1321 /* D9 */
1322 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1323 
1324 /* DA */
1325 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1326 
1327 /* DB */
1328 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1329 
1330 /* DC */
1331 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1332 
1333 /* DD */
1334 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1335 
1336 /* DE */
1337 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1338 
1339 /* DF */
1340 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1341 
1342 /* E0 */
1343 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1344 
1345 /* E1 */
1346 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1347 
1348 /* E2 */
1349 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1350 
1351 /* E3 */
1352 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1353 
1354 /* E4 */
1355 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1356 
1357 /* E5 */
1358 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1359 
1360 /* E6 */
1361 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1362 
1363 /* E7 */
1364 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1365 
1366 /* E8 */
1367 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1368 
1369 /* E9 */
1370 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1371 
1372 /* EA */
1373 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1374 
1375 /* EB */
1376 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1377 
1378 /* EC */
1379 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1380 
1381 /* ED */
1382 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1383 
1384 /* EE */
1385 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1386 
1387 /* EF */
1388 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1389 
1390 /* F0 */
1391 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1392 
1393 /* F1 */
1394 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1395 
1396 /* F2 */
1397 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1398 
1399 /* F3 */
1400 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1401 
1402 /* F4 */
1403 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1404 
1405 /* F5 */
1406 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1407 
1408 /* F6 */
1409 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1410 
1411 /* F7 */
1412 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1413 
1414 /* F8 */
1415 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1416 
1417 /* F9 */
1418 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1419 
1420 /* FA */
1421 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1422 
1423 /* FB */
1424 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1425 
1426 /* FC */
1427 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1428 
1429 /* FD */
1430 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1431 
1432 /* FE */
1433 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1434 
1435 /* FF */
1436 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}
1437 
1438 };
1439