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