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