xref: /freebsd/sys/cam/ctl/ctl_cmd_table.c (revision e0c4386e7e71d93b0edc0c8fa156263fc4a8b0b6)
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause
3  *
4  * Copyright (c) 2003, 2004, 2005, 2009 Silicon Graphics International Corp.
5  * Copyright (c) 2014-2015 Alexander Motin <mav@FreeBSD.org>
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions, and the following disclaimer,
13  *    without modification.
14  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
15  *    substantially similar to the "NO WARRANTY" disclaimer below
16  *    ("Disclaimer") and any redistribution must be conditioned upon
17  *    including a substantially similar Disclaimer requirement for further
18  *    binary redistribution.
19  *
20  * NO WARRANTY
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
24  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
29  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
30  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31  * POSSIBILITY OF SUCH DAMAGES.
32  *
33  * $Id: //depot/users/kenm/FreeBSD-test2/sys/cam/ctl/ctl_cmd_table.c#4 $
34  */
35 /*
36  * CAM Target Layer command table.
37  *
38  * Author: Ken Merry <ken@FreeBSD.org>, Kim Le
39  */
40 
41 #include <sys/param.h>
42 #include <sys/systm.h>
43 #include <sys/kernel.h>
44 #include <sys/types.h>
45 #include <sys/malloc.h>
46 #include <sys/condvar.h>
47 #include <sys/queue.h>
48 #include <sys/sysctl.h>
49 
50 #include <cam/scsi/scsi_all.h>
51 #include <cam/scsi/scsi_da.h>
52 #include <cam/ctl/ctl_io.h>
53 #include <cam/ctl/ctl.h>
54 #include <cam/ctl/ctl_frontend.h>
55 #include <cam/ctl/ctl_backend.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 /* 3B WRITE BUFFER */
66 const struct ctl_cmd_entry ctl_cmd_table_3b[32] =
67 {
68 /* 00 WRITE BUFFER HDR DATA */
69 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
70 
71 /* 01 WRITE BUFFER VENDOR */
72 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
73 
74 /* 02 WRITE BUFFER DATA */
75 {ctl_write_buffer, CTL_SERIDX_MD_SEL, CTL_CMD_FLAG_OK_ON_BOTH |
76 				      CTL_CMD_FLAG_OK_ON_NO_MEDIA |
77 				      CTL_CMD_FLAG_OK_ON_STANDBY |
78 				      CTL_FLAG_DATA_OUT,
79  CTL_LUN_PAT_NONE,
80  10, {0x02, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07}},
81 
82 /* 03 WRITE BUFFER DESCR */
83 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
84 
85 /* 04 WRITE BUFFER DOWNLOAD */
86 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
87 
88 /* 05 WRITE BUFFER DOWNLOAD SAVE */
89 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
90 
91 /* 06 */
92 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
93 
94 /* 07 */
95 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
96 
97 /* 08 */
98 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
99 
100 /* 09 */
101 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
102 
103 /* 0A WRITE BUFFER ECHO */
104 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
105 
106 /* 0B WRITE BUFFER ECHO DESCRIPTOR */
107 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
108 
109 /* 0C */
110 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
111 
112 /* 0D */
113 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
114 
115 /* 0E */
116 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
117 
118 /* 0F */
119 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
120 
121 /* 10 */
122 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
123 
124 /* 11 */
125 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
126 
127 /* 12 */
128 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
129 
130 /* 13 */
131 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
132 
133 /* 14 */
134 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
135 
136 /* 15 */
137 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
138 
139 /* 16 */
140 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
141 
142 /* 17 */
143 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
144 
145 /* 18 */
146 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
147 
148 /* 19 */
149 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
150 
151 /* 1A */
152 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
153 
154 /* 1B */
155 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
156 
157 /* 1C WRITE BUFFER ERROR HISTORY */
158 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
159 
160 /* 1d-1f */
161 };
162 
163 /* 3C READ BUFFER(10) */
164 const struct ctl_cmd_entry ctl_cmd_table_3c[32] =
165 {
166 /* 00 READ BUFFER(10) HDR DATA */
167 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
168 
169 /* 01 READ BUFFER(10) VENDOR */
170 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
171 
172 /* 02 READ BUFFER(10) DATA */
173 {ctl_read_buffer, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
174 				     CTL_CMD_FLAG_OK_ON_NO_MEDIA |
175 				     CTL_CMD_FLAG_OK_ON_STANDBY |
176 				     CTL_FLAG_DATA_IN |
177 				     CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
178  CTL_LUN_PAT_NONE,
179  10, {0x02, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07}},
180 
181 /* 03 READ BUFFER(10) DESCR */
182 {ctl_read_buffer, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
183 				     CTL_CMD_FLAG_OK_ON_NO_MEDIA |
184 				     CTL_CMD_FLAG_OK_ON_STANDBY |
185 				     CTL_FLAG_DATA_IN |
186 				     CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
187  CTL_LUN_PAT_NONE,
188  10, {0x03, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07}},
189 
190 /* 04 */
191 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
192 
193 /* 05 */
194 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
195 
196 /* 06 */
197 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
198 
199 /* 07 */
200 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
201 
202 /* 08 */
203 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
204 
205 /* 09 */
206 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
207 
208 /* 0A READ BUFFER(10) ECHO */
209 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
210 
211 /* 0B READ BUFFER(10) ECHO DESCRIPTOR */
212 {ctl_read_buffer, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
213 				     CTL_CMD_FLAG_OK_ON_NO_MEDIA |
214 				     CTL_CMD_FLAG_OK_ON_STANDBY |
215 				     CTL_FLAG_DATA_IN |
216 				     CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
217  CTL_LUN_PAT_NONE,
218  10, {0x0b, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07}},
219 
220 /* 0C */
221 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
222 
223 /* 0D */
224 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
225 
226 /* 0E */
227 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
228 
229 /* 0F */
230 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
231 
232 /* 10 */
233 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
234 
235 /* 11 */
236 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
237 
238 /* 12 */
239 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
240 
241 /* 13 */
242 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
243 
244 /* 14 */
245 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
246 
247 /* 15 */
248 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
249 
250 /* 16 */
251 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
252 
253 /* 17 */
254 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
255 
256 /* 18 */
257 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
258 
259 /* 19 */
260 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
261 
262 /* 1A */
263 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
264 
265 /* 1B */
266 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
267 
268 /* 1C READ BUFFER(10) ERROR HISTORY */
269 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
270 
271 /* 1d-1f */
272 };
273 
274 /* 5E PERSISTENT RESERVE IN */
275 const struct ctl_cmd_entry ctl_cmd_table_5e[32] =
276 {
277 /* 00 READ KEYS */
278 {ctl_persistent_reserve_in, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
279 						CTL_CMD_FLAG_OK_ON_BOTH |
280 						CTL_CMD_FLAG_OK_ON_NO_MEDIA |
281 						CTL_CMD_FLAG_OK_ON_STANDBY |
282 						CTL_FLAG_DATA_IN |
283 						CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
284  CTL_LUN_PAT_NONE,
285  10, { 0x00, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
286 
287 /* 01 READ RESERVATION */
288 {ctl_persistent_reserve_in, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
289 						CTL_CMD_FLAG_OK_ON_BOTH |
290 						CTL_CMD_FLAG_OK_ON_NO_MEDIA |
291 						CTL_CMD_FLAG_OK_ON_STANDBY |
292 						CTL_FLAG_DATA_IN |
293 						CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
294  CTL_LUN_PAT_NONE,
295  10, { 0x01, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
296 
297 /* 02 REPORT CAPABILITIES */
298 {ctl_persistent_reserve_in, CTL_SERIDX_INQ, CTL_CMD_FLAG_ALLOW_ON_RESV |
299 					    CTL_CMD_FLAG_OK_ON_BOTH |
300 					    CTL_CMD_FLAG_OK_ON_NO_MEDIA |
301 					    CTL_CMD_FLAG_OK_ON_STANDBY |
302 					    CTL_FLAG_DATA_IN |
303 					    CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
304  CTL_LUN_PAT_NONE,
305  10, { 0x02, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
306 
307 /* 03 READ FULL STATUS */
308 {ctl_persistent_reserve_in, CTL_SERIDX_INQ, CTL_CMD_FLAG_ALLOW_ON_RESV |
309 					    CTL_CMD_FLAG_OK_ON_BOTH |
310 					    CTL_CMD_FLAG_OK_ON_NO_MEDIA |
311 					    CTL_CMD_FLAG_OK_ON_STANDBY |
312 					    CTL_FLAG_DATA_IN |
313 					    CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
314  CTL_LUN_PAT_NONE,
315  10, { 0x03, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
316 
317 /* 04-1f */
318 };
319 
320 /* 5F PERSISTENT RESERVE OUT */
321 const struct ctl_cmd_entry ctl_cmd_table_5f[32] =
322 {
323 /* 00 REGISTER */
324 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
325 						CTL_CMD_FLAG_OK_ON_BOTH |
326 						CTL_CMD_FLAG_OK_ON_NO_MEDIA |
327 						CTL_CMD_FLAG_OK_ON_STANDBY |
328 						CTL_FLAG_DATA_OUT |
329 						CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
330  CTL_LUN_PAT_NONE,
331  10, { 0x00, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
332 
333 /* 01 RESERVE */
334 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
335 						CTL_CMD_FLAG_OK_ON_BOTH |
336 						CTL_CMD_FLAG_OK_ON_NO_MEDIA |
337 						CTL_CMD_FLAG_OK_ON_STANDBY |
338 						CTL_FLAG_DATA_OUT |
339 						CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
340  CTL_LUN_PAT_NONE,
341  10, { 0x01, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
342 
343 /* 02 RELEASE */
344 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
345 						CTL_CMD_FLAG_OK_ON_BOTH |
346 						CTL_CMD_FLAG_OK_ON_NO_MEDIA |
347 						CTL_CMD_FLAG_OK_ON_STANDBY |
348 						CTL_FLAG_DATA_OUT |
349 						CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
350  CTL_LUN_PAT_NONE,
351  10, { 0x02, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
352 
353 /* 03 CLEAR */
354 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
355 						CTL_CMD_FLAG_OK_ON_BOTH |
356 						CTL_CMD_FLAG_OK_ON_NO_MEDIA |
357 						CTL_CMD_FLAG_OK_ON_STANDBY |
358 						CTL_FLAG_DATA_OUT |
359 						CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
360  CTL_LUN_PAT_NONE,
361  10, { 0x03, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
362 
363 /* 04 PREEMPT */
364 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
365 						CTL_CMD_FLAG_OK_ON_BOTH |
366 						CTL_CMD_FLAG_OK_ON_NO_MEDIA |
367 						CTL_CMD_FLAG_OK_ON_STANDBY |
368 						CTL_FLAG_DATA_OUT |
369 						CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
370  CTL_LUN_PAT_NONE,
371  10, { 0x04, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
372 
373 /* 05 PREEMPT AND ABORT */
374 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
375 						CTL_CMD_FLAG_OK_ON_BOTH |
376 						CTL_CMD_FLAG_OK_ON_NO_MEDIA |
377 						CTL_CMD_FLAG_OK_ON_STANDBY |
378 						CTL_FLAG_DATA_OUT |
379 						CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
380  CTL_LUN_PAT_NONE,
381  10, { 0x05, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
382 
383 /* 06 REGISTER AND IGNORE EXISTING KEY */
384 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
385 						CTL_CMD_FLAG_OK_ON_BOTH |
386 						CTL_CMD_FLAG_OK_ON_NO_MEDIA |
387 						CTL_CMD_FLAG_OK_ON_STANDBY |
388 						CTL_FLAG_DATA_OUT |
389 						CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
390  CTL_LUN_PAT_NONE,
391  10, { 0x06, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
392 
393 /* 07 REGISTER AND MOVE */
394 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
395 
396 /* 08-1f */
397 };
398 
399 /* 83 EXTENDED COPY */
400 const struct ctl_cmd_entry ctl_cmd_table_83[32] =
401 {
402 /* 00 EXTENDED COPY (LID1) */
403 {ctl_extended_copy_lid1, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_BOTH |
404 					    CTL_CMD_FLAG_OK_ON_NO_MEDIA |
405 					    CTL_FLAG_DATA_OUT,
406  CTL_LUN_PAT_NONE,
407  16, { 0x00, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
408 
409 /* 01 EXTENDED COPY (LID4) */
410 {ctl_extended_copy_lid4, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_BOTH |
411 					    CTL_CMD_FLAG_OK_ON_NO_MEDIA |
412 					    CTL_FLAG_DATA_OUT,
413  CTL_LUN_PAT_NONE,
414  16, { 0x01, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
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 */
441 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
442 
443 /* 0B */
444 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
445 
446 /* 0C */
447 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
448 
449 /* 0D */
450 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
451 
452 /* 0E */
453 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
454 
455 /* 0F */
456 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
457 
458 /* 10 POPULATE TOKEN */
459 {ctl_populate_token, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_DIRECT |
460 					CTL_FLAG_DATA_OUT |
461 					CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
462  CTL_LUN_PAT_NONE,
463  16, { 0x10, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff,
464        0xff, 0xff, 0xff, 0xff, 0, 0x07}},
465 
466 /* 11 WRITE USING TOKEN */
467 {ctl_write_using_token, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_DIRECT |
468 					CTL_FLAG_DATA_OUT,
469  CTL_LUN_PAT_NONE,
470  16, { 0x11, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff,
471        0xff, 0xff, 0xff, 0xff, 0, 0x07}},
472 
473 /* 12 */
474 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
475 
476 /* 13 */
477 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
478 
479 /* 14 */
480 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
481 
482 /* 15 */
483 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
484 
485 /* 16 SET TAPE STREAM MIRRORING */
486 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
487 
488 /* 17 */
489 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
490 
491 /* 18 */
492 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
493 
494 /* 19 */
495 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
496 
497 /* 1A */
498 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
499 
500 /* 1B */
501 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
502 
503 /* 1C COPY OPERATION ABORT */
504 {ctl_copy_operation_abort, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_BOTH |
505 					      CTL_CMD_FLAG_OK_ON_NO_MEDIA |
506 					      CTL_FLAG_DATA_NONE,
507  CTL_LUN_PAT_NONE,
508  16, { 0x1c, 0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x07}},
509 
510 /* 1D COPY OPERATION CLOSE */
511 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
512 
513 /* 1e-1f */
514 };
515 
516 /* 84 RECEIVE COPY STATUS */
517 const struct ctl_cmd_entry ctl_cmd_table_84[32] =
518 {
519 /* 00 RECEIVE COPY STATUS (LID1) */
520 {ctl_receive_copy_status_lid1, CTL_SERIDX_RD_CAP,
521  CTL_CMD_FLAG_OK_ON_BOTH |
522  CTL_CMD_FLAG_OK_ON_NO_MEDIA |
523  CTL_FLAG_DATA_IN |
524  CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
525  CTL_LUN_PAT_NONE,
526  16, {0x00, 0xff, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
527 
528 /* 01 RECEIVE COPY DATA (LID1) */
529 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
530 
531 /* 02 */
532 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
533 
534 /* 03 RECEIVE COPY OPERATING PARAMETERS */
535 {ctl_receive_copy_operating_parameters, CTL_SERIDX_RD_CAP,
536  CTL_CMD_FLAG_OK_ON_BOTH |
537  CTL_CMD_FLAG_OK_ON_NO_MEDIA |
538  CTL_CMD_FLAG_OK_ON_STANDBY |
539  CTL_FLAG_DATA_IN |
540  CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
541  CTL_LUN_PAT_NONE,
542  16, {0x03, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
543 
544 /* 04 RECEIVE COPY FAILURE DETAILS (LID1) */
545 {ctl_receive_copy_failure_details, CTL_SERIDX_RD_CAP,
546  CTL_CMD_FLAG_OK_ON_BOTH |
547  CTL_CMD_FLAG_OK_ON_NO_MEDIA |
548  CTL_FLAG_DATA_IN |
549  CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
550  CTL_LUN_PAT_NONE,
551  16, {0x04, 0xff, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
552 
553 /* 05 RECEIVE COPY STATUS (LID4) */
554 {ctl_receive_copy_status_lid4, CTL_SERIDX_RD_CAP,
555  CTL_CMD_FLAG_OK_ON_BOTH |
556  CTL_CMD_FLAG_OK_ON_NO_MEDIA |
557  CTL_FLAG_DATA_IN |
558  CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
559  CTL_LUN_PAT_NONE,
560  16, {0x05, 0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
561 
562 /* 06 RECEIVE COPY DATA (LID4)*/
563 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
564 
565 /* 07 RECEIVE ROD TOKEN INFORMATION */
566 {ctl_receive_rod_token_information, CTL_SERIDX_RD_CAP,
567  CTL_CMD_FLAG_OK_ON_BOTH |
568  CTL_CMD_FLAG_OK_ON_NO_MEDIA |
569  CTL_FLAG_DATA_IN |
570  CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
571  CTL_LUN_PAT_NONE,
572  16, {0x07, 0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
573 
574 /* 08 REPORT ALL ROD TOKENS */
575 {ctl_report_all_rod_tokens, CTL_SERIDX_RD_CAP,
576  CTL_CMD_FLAG_OK_ON_BOTH |
577  CTL_CMD_FLAG_OK_ON_NO_MEDIA |
578  CTL_FLAG_DATA_IN |
579  CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
580  CTL_LUN_PAT_NONE,
581  16, {0x08, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
582 
583 /* 09 */
584 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
585 
586 /* 0A */
587 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
588 
589 /* 0B */
590 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
591 
592 /* 0C */
593 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
594 
595 /* 0D */
596 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
597 
598 /* 0E */
599 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
600 
601 /* 0F */
602 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
603 
604 /* 10 */
605 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
606 
607 /* 11 */
608 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
609 
610 /* 12 */
611 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
612 
613 /* 13 */
614 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
615 
616 /* 14 */
617 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
618 
619 /* 15 */
620 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
621 
622 /* 16 REPORT TAPE STREAM MIRRORING */
623 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
624 
625 /* 17-1f */
626 };
627 
628 /* 9B READ BUFFER(16) */
629 const struct ctl_cmd_entry ctl_cmd_table_9b[32] =
630 {
631 /* 00 READ BUFFER(16) HDR DATA */
632 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
633 
634 /* 01 READ BUFFER(16) VENDOR */
635 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
636 
637 /* 02 READ BUFFER(16) DATA */
638 {ctl_read_buffer, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
639 				     CTL_CMD_FLAG_OK_ON_NO_MEDIA |
640 				     CTL_CMD_FLAG_OK_ON_STANDBY |
641 				     CTL_FLAG_DATA_IN,
642  CTL_LUN_PAT_NONE,
643  16, {0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
644       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
645 
646 /* 03 READ BUFFER(16) DESCR */
647 {ctl_read_buffer, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
648 				     CTL_CMD_FLAG_OK_ON_NO_MEDIA |
649 				     CTL_CMD_FLAG_OK_ON_STANDBY |
650 				     CTL_FLAG_DATA_IN,
651  CTL_LUN_PAT_NONE,
652  16, {0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
653       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
654 
655 /* 04 READ BUFFER(16) */
656 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
657 
658 /* 05 READ BUFFER(16) */
659 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
660 
661 /* 06 */
662 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
663 
664 /* 07 */
665 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
666 
667 /* 08 */
668 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
669 
670 /* 09 */
671 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
672 
673 /* 0A READ BUFFER(16) ECHO */
674 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
675 
676 /* 0B READ BUFFER(16) ECHO DESCRIPTOR */
677 {ctl_read_buffer, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
678 				     CTL_CMD_FLAG_OK_ON_NO_MEDIA |
679 				     CTL_CMD_FLAG_OK_ON_STANDBY |
680 				     CTL_FLAG_DATA_IN,
681  CTL_LUN_PAT_NONE,
682  16, {0x0b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
683       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
684 
685 /* 0C */
686 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
687 
688 /* 0D */
689 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
690 
691 /* 0E */
692 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
693 
694 /* 0F */
695 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
696 
697 /* 10 */
698 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
699 
700 /* 11 */
701 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
702 
703 /* 12 */
704 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
705 
706 /* 13 */
707 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
708 
709 /* 14 */
710 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
711 
712 /* 15 */
713 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
714 
715 /* 16 */
716 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
717 
718 /* 17 */
719 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
720 
721 /* 18 */
722 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
723 
724 /* 19 */
725 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
726 
727 /* 1A */
728 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
729 
730 /* 1B */
731 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
732 
733 /* 1C READ BUFFER(16) ERROR HISTORY */
734 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
735 
736 /* 1d-1f */
737 };
738 
739 /* 9E SERVICE ACTION IN(16) */
740 const struct ctl_cmd_entry ctl_cmd_table_9e[32] =
741 {
742 /* 00 */
743 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
744 
745 /* 01 */
746 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
747 
748 /* 02 */
749 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
750 
751 /* 03 */
752 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
753 
754 /* 04 */
755 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
756 
757 /* 05 */
758 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
759 
760 /* 06 */
761 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
762 
763 /* 07 */
764 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
765 
766 /* 08 */
767 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
768 
769 /* 09 */
770 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
771 
772 /* 0A */
773 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
774 
775 /* 0B */
776 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
777 
778 /* 0C */
779 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
780 
781 /* 0D */
782 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
783 
784 /* 0E */
785 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
786 
787 /* 0F RECEIVE BINDING REPORT */
788 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
789 
790 /* 10 READ CAPACITY(16) */
791 {ctl_read_capacity_16, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_DIRECT |
792 					  CTL_FLAG_DATA_IN |
793 					  CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
794  CTL_LUN_PAT_READCAP,
795  16, {0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
796 
797 /* 11 */
798 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
799 
800 /* 12 GET LBA STATUS */
801 {ctl_get_lba_status, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_DIRECT |
802 				      CTL_FLAG_DATA_IN |
803 				      CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
804  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
805  16, {0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
806     0xff, 0xff, 0xff, 0xff, 0, 0x07}},
807 
808 /* 13-1f */
809 };
810 
811 /* A3 MAINTENANCE IN */
812 const struct ctl_cmd_entry ctl_cmd_table_a3[32] =
813 {
814 /* 00 */
815 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
816 
817 /* 01 */
818 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
819 
820 /* 02 */
821 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
822 
823 /* 03 */
824 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
825 
826 /* 04 */
827 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
828 
829 /* 05 REPORT IDENTIFYING INFORMATION */
830 {ctl_report_ident_info, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_BOTH |
831 					CTL_CMD_FLAG_OK_ON_NO_MEDIA |
832 					CTL_CMD_FLAG_OK_ON_STANDBY |
833 					CTL_CMD_FLAG_OK_ON_UNAVAIL |
834 					CTL_FLAG_DATA_IN |
835 					CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
836  CTL_LUN_PAT_NONE,
837  12, {0x0f, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x07}},
838 
839 /* 06 */
840 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
841 
842 /* 07 */
843 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
844 
845 /* 08 */
846 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
847 
848 /* 09 */
849 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
850 
851 /* 0A REPORT TARGET PORT GROUPS */
852 {ctl_report_tagret_port_groups, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_BOTH |
853 						CTL_CMD_FLAG_OK_ON_NO_MEDIA |
854 						CTL_CMD_FLAG_OK_ON_STANDBY |
855 						CTL_CMD_FLAG_OK_ON_UNAVAIL |
856 						CTL_FLAG_DATA_IN |
857 						CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
858  CTL_LUN_PAT_NONE,
859  12, {0xea, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
860 
861 /* 0B REPORT ALIASES */
862 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
863 
864 /* 0C REPORT SUPPORTED_OPCODES */
865 {ctl_report_supported_opcodes, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_BOTH |
866 						CTL_CMD_FLAG_OK_ON_NO_MEDIA |
867 						CTL_CMD_FLAG_OK_ON_STANDBY |
868 						CTL_CMD_FLAG_OK_ON_UNAVAIL |
869 						CTL_FLAG_DATA_IN |
870 						CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
871  CTL_LUN_PAT_NONE,
872  12, {0x0c, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
873 
874 /* 0D REPORT SUPPORTED_TASK MANAGEMENT FUNCTIONS */
875 {ctl_report_supported_tmf, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_BOTH |
876 					   CTL_CMD_FLAG_OK_ON_NO_MEDIA |
877 					   CTL_CMD_FLAG_OK_ON_STANDBY |
878 					   CTL_CMD_FLAG_OK_ON_UNAVAIL |
879 					   CTL_FLAG_DATA_IN |
880 					   CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
881  CTL_LUN_PAT_NONE,
882  12, {0x0d, 0x80, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
883 
884 /* 0E REPORT PRIORITY */
885 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
886 
887 /* 0F REPORT TIMESTAMP */
888 {ctl_report_timestamp, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_BOTH |
889 					CTL_CMD_FLAG_OK_ON_NO_MEDIA |
890 					CTL_CMD_FLAG_OK_ON_STANDBY |
891 					CTL_CMD_FLAG_OK_ON_UNAVAIL |
892 					CTL_FLAG_DATA_IN |
893 					CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
894  CTL_LUN_PAT_NONE,
895  12, {0x0f, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
896 
897 /* 10 MANAGEMENT PROTOCOL IN */
898 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
899 
900 /* 11-1f */
901 };
902 
903 const struct ctl_cmd_entry ctl_cmd_table[256] =
904 {
905 /* 00 TEST UNIT READY */
906 {ctl_tur, CTL_SERIDX_TUR, CTL_CMD_FLAG_OK_ON_BOTH |
907 			  CTL_FLAG_DATA_NONE |
908 			  CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
909  CTL_LUN_PAT_TUR, 6, {0, 0, 0, 0, 0x07}},
910 
911 /* 01 REWIND */
912 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
913 
914 /* 02 */
915 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
916 
917 /* 03 REQUEST SENSE */
918 {ctl_request_sense, CTL_SERIDX_RQ_SNS, CTL_FLAG_DATA_IN |
919 				       CTL_CMD_FLAG_OK_ON_NO_LUN |
920 				       CTL_CMD_FLAG_OK_ON_BOTH |
921 				       CTL_CMD_FLAG_ALLOW_ON_RESV |
922 				       CTL_CMD_FLAG_NO_SENSE |
923 				       CTL_CMD_FLAG_OK_ON_NO_MEDIA |
924 				       CTL_CMD_FLAG_OK_ON_STANDBY |
925 				       CTL_CMD_FLAG_OK_ON_UNAVAIL |
926 				       CTL_CMD_FLAG_ALLOW_ON_PR_RESV |
927 				       CTL_CMD_FLAG_RUN_HERE,
928  CTL_LUN_PAT_NONE, 6, {0x01, 0, 0, 0xff, 0x07}},
929 
930 /* 04 FORMAT UNIT */
931 {ctl_format, CTL_SERIDX_FORMAT, CTL_CMD_FLAG_OK_ON_DIRECT |
932 				CTL_FLAG_DATA_OUT,
933  CTL_LUN_PAT_NONE, 6, {0xff, 0, 0, 0, 0x07}},
934 
935 /* 05 READ BLOCK LIMITS */
936 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
937 
938 /* 06 */
939 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
940 
941 /* 07 REASSIGN BLOCKS */
942 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
943 
944 /* 08 READ(6) */
945 {ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_DIRECT |
946 				  CTL_FLAG_DATA_IN |
947 				  CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
948  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE, 6, {0x1f, 0xff, 0xff, 0xff, 0x07}},
949 
950 /* 09 */
951 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
952 
953 /* 0A WRITE(6) */
954 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_DIRECT |
955 				   CTL_FLAG_DATA_OUT,
956  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE, 6, {0x1f, 0xff, 0xff, 0xff, 0x07}},
957 
958 /* 0B SEEK(6) */
959 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
960 
961 /* 0C */
962 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
963 
964 /* 0D */
965 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
966 
967 /* 0E */
968 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
969 
970 /* 0F READ REVERSE(6) */
971 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
972 
973 /* 10 WRITE FILEMARKS(6) */
974 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
975 
976 /* 11 SPACE(6) */
977 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
978 
979 /* 12 INQUIRY */
980 {ctl_inquiry, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_NO_LUN |
981 			      CTL_CMD_FLAG_OK_ON_BOTH |
982 			      CTL_CMD_FLAG_ALLOW_ON_RESV |
983 			      CTL_CMD_FLAG_NO_SENSE |
984 			      CTL_CMD_FLAG_OK_ON_NO_MEDIA |
985 			      CTL_CMD_FLAG_OK_ON_STANDBY |
986 			      CTL_CMD_FLAG_OK_ON_UNAVAIL |
987 			      CTL_FLAG_DATA_IN |
988 			      CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
989  CTL_LUN_PAT_NONE, 6, {0xe1, 0xff, 0xff, 0xff, 0x07}},
990 
991 /* 13 */
992 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
993 
994 /* 14 RECOVER BUFFERED DATA */
995 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
996 
997 /* 15 MODE SELECT(6) */
998 {ctl_mode_select, CTL_SERIDX_MD_SEL, CTL_CMD_FLAG_OK_ON_BOTH |
999 				     CTL_CMD_FLAG_OK_ON_NO_MEDIA |
1000 				     CTL_CMD_FLAG_OK_ON_STANDBY |
1001 				     CTL_FLAG_DATA_OUT,
1002  CTL_LUN_PAT_NONE, 6, {0x13, 0, 0, 0xff, 0x07}},
1003 
1004 /* 16 RESERVE(6) */
1005 {ctl_scsi_reserve, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
1006 				    CTL_CMD_FLAG_OK_ON_BOTH |
1007 				    CTL_CMD_FLAG_OK_ON_NO_MEDIA |
1008 				    CTL_CMD_FLAG_OK_ON_STANDBY |
1009 				    CTL_FLAG_DATA_OUT,
1010  CTL_LUN_PAT_NONE, 6, {0, 0, 0, 0, 0x07}},
1011 
1012 /* 17 RELEASE(6) */
1013 {ctl_scsi_release, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
1014 				   CTL_CMD_FLAG_OK_ON_BOTH |
1015 				   CTL_CMD_FLAG_OK_ON_NO_MEDIA |
1016 				   CTL_CMD_FLAG_OK_ON_STANDBY |
1017 				   CTL_FLAG_DATA_NONE,
1018  CTL_LUN_PAT_NONE, 6, {0, 0, 0, 0, 0x07}},
1019 
1020 /* 18 COPY */
1021 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1022 
1023 /* 19 ERASE(6) */
1024 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1025 
1026 /* 1A MODE SENSE(6) */
1027 {ctl_mode_sense, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
1028 				    CTL_CMD_FLAG_OK_ON_NO_MEDIA |
1029 				    CTL_CMD_FLAG_OK_ON_STANDBY |
1030 				    CTL_FLAG_DATA_IN |
1031 				    CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1032  CTL_LUN_PAT_NONE, 6, {0x08, 0xff, 0xff, 0xff, 0x07}},
1033 
1034 /* 1B START STOP UNIT */
1035 {ctl_start_stop, CTL_SERIDX_START, CTL_CMD_FLAG_OK_ON_DIRECT |
1036 				   CTL_CMD_FLAG_OK_ON_CDROM |
1037 				   CTL_CMD_FLAG_OK_ON_NO_MEDIA |
1038 				   CTL_FLAG_DATA_NONE |
1039 				   CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
1040  CTL_LUN_PAT_NONE, 6, {0x01, 0, 0x0f, 0xf7, 0x07}},
1041 
1042 /* 1C RECEIVE DIAGNOSTIC RESULTS */
1043 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1044 
1045 /* 1D SEND DIAGNOSTIC */
1046 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1047 
1048 /* 1E PREVENT ALLOW MEDIUM REMOVAL */
1049 {ctl_prevent_allow, CTL_SERIDX_START, CTL_CMD_FLAG_OK_ON_DIRECT |
1050 				      CTL_CMD_FLAG_OK_ON_CDROM |
1051 				      CTL_CMD_FLAG_OK_ON_NO_MEDIA |
1052 				      CTL_FLAG_DATA_NONE,
1053  CTL_LUN_PAT_NONE, 6, {0x01, 0, 0, 0x03, 0x07}},
1054 
1055 /* 1F */
1056 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1057 
1058 /* 20 */
1059 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1060 
1061 /* 21 */
1062 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1063 
1064 /* 22 */
1065 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1066 
1067 /* 23 */
1068 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1069 
1070 /* 24 SET WINDOW */
1071 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1072 
1073 /* 25 READ CAPACITY(10) */
1074 {ctl_read_capacity, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_DIRECT |
1075 				       CTL_CMD_FLAG_OK_ON_CDROM |
1076 				       CTL_FLAG_DATA_IN |
1077 				       CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
1078  CTL_LUN_PAT_READCAP, 10, {0, 0, 0, 0, 0, 0, 0, 0, 0x07}},
1079 
1080 /* 26 */
1081 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1082 
1083 /* 27 */
1084 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1085 
1086 /* 28 READ(10) */
1087 {ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_DIRECT |
1088 				  CTL_CMD_FLAG_OK_ON_CDROM |
1089 				  CTL_FLAG_DATA_IN |
1090 				  CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1091  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
1092  10, {0x1a, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
1093 
1094 /* 29 READ GENERATION */
1095 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1096 
1097 /* 2A WRITE(10) */
1098 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_DIRECT| CTL_FLAG_DATA_OUT,
1099  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1100  10, {0x1a, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
1101 
1102 /* 2B SEEK(10) */
1103 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1104 
1105 /* 2C ERASE(10) */
1106 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1107 
1108 /* 2D READ UPDATED BLOCK */
1109 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1110 
1111 /* 2E WRITE AND VERIFY(10) */
1112 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_DIRECT| CTL_FLAG_DATA_OUT,
1113  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1114  10, {0x12, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
1115 
1116 /* 2F VERIFY(10) */
1117 {ctl_verify, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_DIRECT |
1118 			      CTL_FLAG_DATA_OUT |
1119 			      CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1120  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
1121  10, {0x16, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
1122 
1123 /* 30 SEARCH DATA HIGH(10) */
1124 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1125 
1126 /* 31 SEARCH DATA EQUAL(10) */
1127 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1128 
1129 /* 32 SEARCH DATA LOW(10) */
1130 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1131 
1132 /* 33 SET LIMITS(10) */
1133 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1134 
1135 /* 34 PRE-FETCH(10) */
1136 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1137 
1138 /* 35 SYNCHRONIZE CACHE(10) */
1139 {ctl_sync_cache, CTL_SERIDX_SYNC, CTL_CMD_FLAG_OK_ON_DIRECT |
1140 				  CTL_FLAG_DATA_NONE,
1141  CTL_LUN_PAT_WRITE,
1142  10, {0x06, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
1143 
1144 /* 36 LOCK UNLOCK CACHE(10) */
1145 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1146 
1147 /* 37 READ DEFECT DATA(10) */
1148 {ctl_read_defect, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_DIRECT |
1149 				     CTL_FLAG_DATA_IN |
1150 				     CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1151  CTL_LUN_PAT_NONE,
1152  10, {0, 0x1f, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
1153 
1154 /* 38 MEDIUM SCAN */
1155 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1156 
1157 /* 39 COMPARE */
1158 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1159 
1160 /* 3A COPY AND VERIFY */
1161 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1162 
1163 /* 3B WRITE BUFFER */
1164 {__DECONST(ctl_opfunc *, ctl_cmd_table_3b), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1165  CTL_LUN_PAT_NONE},
1166 
1167 /* 3C READ BUFFER */
1168 {__DECONST(ctl_opfunc *, ctl_cmd_table_3c), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1169  CTL_LUN_PAT_NONE},
1170 
1171 /* 3D UPDATE BLOCK */
1172 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1173 
1174 /* 3E READ LONG */
1175 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1176 
1177 /* 3F WRITE LONG */
1178 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1179 
1180 /* 40 CHANGE DEFINITION */
1181 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1182 
1183 /* 41 WRITE SAME(10) */
1184 {ctl_write_same, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_DIRECT |
1185 				   CTL_FLAG_DATA_OUT,
1186  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1187  10, {0x1a, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
1188 
1189 /* 42 READ SUB-CHANNEL / UNMAP */
1190 {ctl_unmap, CTL_SERIDX_UNMAP, CTL_CMD_FLAG_OK_ON_DIRECT | CTL_FLAG_DATA_OUT,
1191  CTL_LUN_PAT_WRITE,
1192  10, {1, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
1193 
1194 /* 43 READ TOC/PMA/ATIP */
1195 {ctl_read_toc, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_CDROM |
1196 				  CTL_CMD_FLAG_ALLOW_ON_PR_WRESV |
1197 				  CTL_FLAG_DATA_IN,
1198  CTL_LUN_PAT_NONE,
1199  10, {0x02, 0x01, 0, 0, 0, 0xff, 0xff, 0xff, 0x07}},
1200 
1201 /* 44 REPORT DENSITY SUPPORT */
1202 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1203 
1204 /* 45 PLAY AUDIO(10) */
1205 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1206 
1207 /* 46 GET CONFIGURATION */
1208 {ctl_get_config, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_CDROM |
1209 				 CTL_CMD_FLAG_OK_ON_NO_MEDIA |
1210 				 CTL_CMD_FLAG_ALLOW_ON_PR_RESV |
1211 				 CTL_FLAG_DATA_IN,
1212  CTL_LUN_PAT_NONE,
1213  10, {0x03, 0xff, 0xff, 0, 0, 0, 0xff, 0xff, 0x07}},
1214 
1215 /* 47 PLAY AUDIO MSF */
1216 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1217 
1218 /* 48 PLAY AUDIO TRACK INDEX */
1219 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1220 
1221 /* 49 PLAY TRACK RELATIVE(10) */
1222 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1223 
1224 /* 4A GET EVENT STATUS NOTIFICATION */
1225 {ctl_get_event_status, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_CDROM |
1226 					  CTL_CMD_FLAG_OK_ON_NO_MEDIA |
1227 					  CTL_CMD_FLAG_ALLOW_ON_PR_RESV |
1228 					  CTL_FLAG_DATA_IN,
1229  CTL_LUN_PAT_NONE,
1230  10, {0x02, 0x01, 0, 0, 0, 0xff, 0xff, 0xff, 0x07}},
1231 
1232 /* 4B PAUSE/RESUME */
1233 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1234 
1235 /* 4C LOG SELECT */
1236 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1237 
1238 /* 4D LOG SENSE */
1239 {ctl_log_sense, CTL_SERIDX_LOG_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
1240 				    CTL_CMD_FLAG_OK_ON_NO_MEDIA |
1241 				    CTL_CMD_FLAG_OK_ON_STANDBY |
1242 				    CTL_FLAG_DATA_IN |
1243 				    CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
1244  CTL_LUN_PAT_NONE, 10, {0, 0xff, 0xff, 0, 0xff, 0xff, 0xff, 0xff, 0x07} },
1245 
1246 /* 4E STOP PLAY/SCAN */
1247 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1248 
1249 /* 4F */
1250 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1251 
1252 /* 50 XDWRITE(10) */
1253 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1254 
1255 /* 51 XPWRITE(10) */
1256 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1257 
1258 /* 52 XDREAD(10) */
1259 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1260 
1261 /* 53 RESERVE TRACK */
1262 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1263 
1264 /* 54 SEND OPC INFORMATION */
1265 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1266 
1267 /* 55 MODE SELECT(10) */
1268 {ctl_mode_select, CTL_SERIDX_MD_SEL, CTL_CMD_FLAG_OK_ON_BOTH |
1269 				     CTL_CMD_FLAG_OK_ON_NO_MEDIA |
1270 				     CTL_CMD_FLAG_OK_ON_STANDBY |
1271 				     CTL_FLAG_DATA_OUT,
1272  CTL_LUN_PAT_NONE, 10, {0x13, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07} },
1273 
1274 /* 56 RESERVE(10) */
1275 {ctl_scsi_reserve, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
1276 				    CTL_CMD_FLAG_OK_ON_BOTH |
1277 				    CTL_CMD_FLAG_OK_ON_NO_MEDIA |
1278 				    CTL_CMD_FLAG_OK_ON_STANDBY |
1279 				    CTL_FLAG_DATA_OUT,
1280  CTL_LUN_PAT_NONE, 10, {0, 0, 0, 0, 0, 0, 0, 0, 0x07} },
1281 
1282 /* 57 RELEASE(10) */
1283 {ctl_scsi_release, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
1284 				   CTL_CMD_FLAG_OK_ON_BOTH |
1285 				   CTL_CMD_FLAG_OK_ON_NO_MEDIA |
1286 				   CTL_CMD_FLAG_OK_ON_STANDBY |
1287 				   CTL_FLAG_DATA_OUT,
1288  CTL_LUN_PAT_NONE, 10, {0, 0, 0, 0, 0, 0, 0, 0, 0x07}},
1289 
1290 /* 58 REPAIR TRACK */
1291 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1292 
1293 /* 59 READ MASTER CUE */
1294 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1295 
1296 /* 5A MODE SENSE(10) */
1297 {ctl_mode_sense, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
1298 				    CTL_CMD_FLAG_OK_ON_NO_MEDIA |
1299 				    CTL_CMD_FLAG_OK_ON_STANDBY |
1300 				    CTL_FLAG_DATA_IN |
1301 				    CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1302  CTL_LUN_PAT_NONE, 10, {0x18, 0xff, 0xff, 0, 0, 0, 0xff, 0xff, 0x07} },
1303 
1304 /* 5B CLOSE TRACK/SESSION */
1305 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1306 
1307 /* 5C READ BUFFER CAPACITY */
1308 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1309 
1310 /* 5D SEND CUE SHEET */
1311 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1312 
1313 /* 5E PERSISTENT RESERVE IN */
1314 {__DECONST(ctl_opfunc *, ctl_cmd_table_5e), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1315  CTL_LUN_PAT_NONE},
1316 
1317 /* 5F PERSISTENT RESERVE OUT */
1318 {__DECONST(ctl_opfunc *, ctl_cmd_table_5f), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1319  CTL_LUN_PAT_NONE},
1320 
1321 /* 60 */
1322 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1323 
1324 /* 61 */
1325 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1326 
1327 /* 62 */
1328 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1329 
1330 /* 63 */
1331 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1332 
1333 /* 64 */
1334 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1335 
1336 /* 65 */
1337 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1338 
1339 /* 66 */
1340 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1341 
1342 /* 67 */
1343 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1344 
1345 /* 68 */
1346 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1347 
1348 /* 69 */
1349 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1350 
1351 /* 6A */
1352 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1353 
1354 /* 6B */
1355 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1356 
1357 /* 6C */
1358 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1359 
1360 /* 6D */
1361 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1362 
1363 /* 6E */
1364 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1365 
1366 /* 6F */
1367 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1368 
1369 /* 70 */
1370 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1371 
1372 /* 71 */
1373 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1374 
1375 /* 72 */
1376 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1377 
1378 /* 73 */
1379 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1380 
1381 /* 74 */
1382 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1383 
1384 /* 75 */
1385 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1386 
1387 /* 76 */
1388 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1389 
1390 /* 77 */
1391 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1392 
1393 /* 78 */
1394 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1395 
1396 /* 79 */
1397 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1398 
1399 /* 7A */
1400 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1401 
1402 /* 7B */
1403 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1404 
1405 /* 7C */
1406 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1407 
1408 /* 7D */
1409 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1410 
1411 /* 7E */
1412 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1413 
1414 /* 7F */
1415 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1416 
1417 /* 80 XDWRITE EXTENDED(16) */
1418 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1419 
1420 /* 81 REBUILD(16) */
1421 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1422 
1423 /* 82 REGENERATE(16) */
1424 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1425 
1426 /* 83 EXTENDED COPY */
1427 {__DECONST(ctl_opfunc *, ctl_cmd_table_83), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1428  CTL_LUN_PAT_NONE},
1429 
1430 /* 84 RECEIVE COPY RESULTS */
1431 {__DECONST(ctl_opfunc *, ctl_cmd_table_84), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1432  CTL_LUN_PAT_NONE},
1433 
1434 /* 85 */
1435 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1436 
1437 /* 86 ACCESS CONTROL IN */
1438 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1439 
1440 /* 87 ACCESS CONTROL OUT */
1441 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1442 
1443 /* 88 READ(16) */
1444 {ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_DIRECT | CTL_FLAG_DATA_IN |
1445                                   CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1446  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
1447  16, {0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1448       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1449 
1450 /* 89 COMPARE AND WRITE */
1451 {ctl_cnw, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_DIRECT| CTL_FLAG_DATA_OUT,
1452  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1453  16, {0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1454       0xff, 0xff, 0, 0, 0, 0xff, 0, 0x07}},
1455 
1456 /* 8A WRITE(16) */
1457 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_DIRECT| CTL_FLAG_DATA_OUT,
1458  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1459  16, {0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1460       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1461 
1462 /* 8B */
1463 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1464 
1465 /* 8C READ ATTRIBUTE */
1466 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1467 
1468 /* 8D WRITE ATTRIBUTE */
1469 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1470 
1471 /* 8E WRITE AND VERIFY(16) */
1472 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_DIRECT| CTL_FLAG_DATA_OUT,
1473  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1474  16, {0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1475       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1476 
1477 /* 8F VERIFY(16) */
1478 {ctl_verify, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_DIRECT |
1479 			      CTL_FLAG_DATA_OUT |
1480 			      CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1481  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
1482  16, {0x16, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1483       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1484 
1485 /* 90 PRE-FETCH(16) */
1486 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1487 
1488 /* 91 SYNCHRONIZE CACHE(16) */
1489 {ctl_sync_cache, CTL_SERIDX_SYNC, CTL_CMD_FLAG_OK_ON_DIRECT |
1490 				  CTL_FLAG_DATA_NONE,
1491  CTL_LUN_PAT_WRITE,
1492  16, {0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1493       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1494 
1495 /* 92 LOCK UNLOCK CACHE(16) */
1496 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1497 
1498 /* 93 WRITE SAME(16) */
1499 {ctl_write_same, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_DIRECT |
1500 				   CTL_FLAG_DATA_OUT,
1501  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1502  16, {0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1503       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1504 
1505 /* 94 */
1506 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1507 
1508 /* 95 */
1509 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1510 
1511 /* 96 */
1512 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1513 
1514 /* 97 */
1515 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1516 
1517 /* 98 */
1518 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1519 
1520 /* 99 */
1521 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1522 
1523 /* 9A */
1524 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1525 
1526 /* 9B READ BUFFER(16) */
1527 {__DECONST(ctl_opfunc *, ctl_cmd_table_9b), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1528  CTL_LUN_PAT_NONE},
1529 
1530 /* 9C WRITE ATOMIC (16) */
1531 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_DIRECT| CTL_FLAG_DATA_OUT,
1532  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1533  16, {0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1534       0xff, 0xff, 0, 0, 0xff, 0xff, 0, 0x07}},
1535 
1536 /* 9D */
1537 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1538 
1539 /* 9E SERVICE ACTION IN(16) */
1540 {__DECONST(ctl_opfunc *, ctl_cmd_table_9e), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1541  CTL_LUN_PAT_NONE},
1542 
1543 /* 9F SERVICE ACTION OUT(16) */
1544 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1545 
1546 /* A0 REPORT LUNS */
1547 {ctl_report_luns, CTL_SERIDX_INQ, CTL_FLAG_DATA_IN |
1548 				  CTL_CMD_FLAG_OK_ON_NO_LUN |
1549 				  CTL_CMD_FLAG_OK_ON_BOTH |
1550 				  CTL_CMD_FLAG_ALLOW_ON_RESV |
1551 				  CTL_CMD_FLAG_NO_SENSE |
1552 				  CTL_CMD_FLAG_OK_ON_NO_MEDIA |
1553 				  CTL_CMD_FLAG_OK_ON_STANDBY |
1554 				  CTL_CMD_FLAG_OK_ON_UNAVAIL |
1555 				  CTL_CMD_FLAG_ALLOW_ON_PR_RESV |
1556 				  CTL_CMD_FLAG_RUN_HERE,
1557  CTL_LUN_PAT_NONE,
1558  12, {0, 0xff, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1559 
1560 /* A1 BLANK */
1561 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1562 
1563 /* A2 SEND EVENT */
1564 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1565 
1566 /* A3 MAINTENANCE IN */
1567 {__DECONST(ctl_opfunc *, ctl_cmd_table_a3), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1568  CTL_LUN_PAT_NONE},
1569 
1570 /* A4 MAINTENANCE OUT */
1571 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1572 
1573 /* A5 MOVE MEDIUM */
1574 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1575 
1576 /* A6 EXCHANGE MEDIUM */
1577 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1578 
1579 /* A7 MOVE MEDIUM ATTACHED */
1580 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1581 
1582 /* A8 READ(12) */
1583 {ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_DIRECT |
1584 				  CTL_CMD_FLAG_OK_ON_CDROM |
1585 				  CTL_FLAG_DATA_IN |
1586 				  CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1587  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
1588  12, {0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1589 
1590 /* A9 PLAY TRACK RELATIVE(12) */
1591 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1592 
1593 /* AA WRITE(12) */
1594 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_DIRECT| CTL_FLAG_DATA_OUT,
1595  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1596  12, {0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1597 
1598 /* AB SERVICE ACTION IN(12) */
1599 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1600 
1601 /* AC ERASE(12) */
1602 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1603 
1604 /* AD READ DVD STRUCTURE */
1605 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1606 
1607 /* AE WRITE AND VERIFY(12) */
1608 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_DIRECT| CTL_FLAG_DATA_OUT,
1609  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1610  12, {0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1611 
1612 /* AF VERIFY(12) */
1613 {ctl_verify, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_DIRECT |
1614 			      CTL_FLAG_DATA_OUT |
1615 			      CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1616  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
1617  12, {0x16, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1618 
1619 /* B0 SEARCH DATA HIGH(12) */
1620 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1621 
1622 /* B1 SEARCH DATA EQUAL(12) */
1623 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1624 
1625 /* B2 SEARCH DATA LOW(12) */
1626 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1627 
1628 /* B3 SET LIMITS(12) */
1629 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1630 
1631 /* B4 READ ELEMENT STATUS ATTACHED */
1632 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1633 
1634 /* B5 REQUEST VOLUME ELEMENT ADDRESS */
1635 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1636 
1637 /* B6 SEND VOLUME TAG */
1638 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1639 
1640 /* B7 READ DEFECT DATA(12) */
1641 {ctl_read_defect, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_DIRECT |
1642 				     CTL_FLAG_DATA_IN |
1643 				     CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1644  CTL_LUN_PAT_NONE,
1645  12, {0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1646 
1647 /* B8 READ ELEMENT STATUS */
1648 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1649 
1650 /* B9 READ CD MSF */
1651 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1652 
1653 /* BA REDUNDANCY GROUP IN */
1654 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1655 
1656 /* BB REDUNDANCY GROUP OUT */
1657 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1658 
1659 /* BC SPARE IN */
1660 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1661 
1662 /* BD SPARE OUT / MECHANISM STATUS */
1663 {ctl_mechanism_status, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_CDROM |
1664 					  CTL_CMD_FLAG_OK_ON_NO_MEDIA |
1665 					  CTL_CMD_FLAG_ALLOW_ON_PR_RESV |
1666 					  CTL_FLAG_DATA_IN,
1667  CTL_LUN_PAT_NONE,
1668  12, {0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0, 0x07}},
1669 
1670 /* BE VOLUME SET IN */
1671 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1672 
1673 /* BF VOLUME SET OUT */
1674 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1675 
1676 /* C0 */
1677 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1678 
1679 /* C1 */
1680 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1681 
1682 /* C2 */
1683 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1684 
1685 /* C3 */
1686 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1687 
1688 /* C4 */
1689 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1690 
1691 /* C5 */
1692 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1693 
1694 /* C6 */
1695 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1696 
1697 /* C7 */
1698 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1699 
1700 /* C8 */
1701 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1702 
1703 /* C9 */
1704 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1705 
1706 /* CA */
1707 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1708 
1709 /* CB */
1710 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1711 
1712 /* CC */
1713 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1714 
1715 /* CD */
1716 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1717 
1718 /* CE */
1719 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1720 
1721 /* CF */
1722 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1723 
1724 /* D0 */
1725 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1726 
1727 /* D1 */
1728 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1729 
1730 /* D2 */
1731 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1732 
1733 /* D3 */
1734 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1735 
1736 /* D4 */
1737 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1738 
1739 /* D5 */
1740 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1741 
1742 /* D6 */
1743 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1744 
1745 /* D7 */
1746 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1747 
1748 /* D8 */
1749 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1750 
1751 /* D9 */
1752 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1753 
1754 /* DA */
1755 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1756 
1757 /* DB */
1758 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1759 
1760 /* DC */
1761 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1762 
1763 /* DD */
1764 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1765 
1766 /* DE */
1767 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1768 
1769 /* DF */
1770 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1771 
1772 /* E0 */
1773 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1774 
1775 /* E1 */
1776 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1777 
1778 /* E2 */
1779 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1780 
1781 /* E3 */
1782 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1783 
1784 /* E4 */
1785 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1786 
1787 /* E5 */
1788 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1789 
1790 /* E6 */
1791 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1792 
1793 /* E7 */
1794 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1795 
1796 /* E8 */
1797 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1798 
1799 /* E9 */
1800 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1801 
1802 /* EA */
1803 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1804 
1805 /* EB */
1806 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1807 
1808 /* EC */
1809 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1810 
1811 /* ED */
1812 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1813 
1814 /* EE */
1815 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1816 
1817 /* EF */
1818 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1819 
1820 /* F0 */
1821 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1822 
1823 /* F1 */
1824 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1825 
1826 /* F2 */
1827 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1828 
1829 /* F3 */
1830 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1831 
1832 /* F4 */
1833 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1834 
1835 /* F5 */
1836 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1837 
1838 /* F6 */
1839 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1840 
1841 /* F7 */
1842 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1843 
1844 /* F8 */
1845 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1846 
1847 /* F9 */
1848 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1849 
1850 /* FA */
1851 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1852 
1853 /* FB */
1854 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1855 
1856 /* FC */
1857 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1858 
1859 /* FD */
1860 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1861 
1862 /* FE */
1863 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1864 
1865 /* FF */
1866 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}
1867 
1868 };
1869