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