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