ctl_cmd_table.c revision 288750
1241675Suqs/*-
2241675Suqs * Copyright (c) 2003, 2004, 2005, 2009 Silicon Graphics International Corp.
3241675Suqs * All rights reserved.
4241675Suqs *
5241675Suqs * Redistribution and use in source and binary forms, with or without
6241675Suqs * modification, are permitted provided that the following conditions
7241675Suqs * are met:
8241675Suqs * 1. Redistributions of source code must retain the above copyright
9241675Suqs *    notice, this list of conditions, and the following disclaimer,
10241675Suqs *    without modification.
11241675Suqs * 2. Redistributions in binary form must reproduce at minimum a disclaimer
12241675Suqs *    substantially similar to the "NO WARRANTY" disclaimer below
13241675Suqs *    ("Disclaimer") and any redistribution must be conditioned upon
14241675Suqs *    including a substantially similar Disclaimer requirement for further
15241675Suqs *    binary redistribution.
16241675Suqs *
17241675Suqs * NO WARRANTY
18241675Suqs * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19241675Suqs * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20241675Suqs * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
21241675Suqs * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22241675Suqs * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23241675Suqs * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24241675Suqs * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25241675Suqs * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26241675Suqs * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
27241675Suqs * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28241675Suqs * POSSIBILITY OF SUCH DAMAGES.
29241675Suqs *
30241675Suqs * $Id: //depot/users/kenm/FreeBSD-test2/sys/cam/ctl/ctl_cmd_table.c#4 $
31241675Suqs * $FreeBSD: stable/10/sys/cam/ctl/ctl_cmd_table.c 288750 2015-10-05 09:13:30Z mav $
32241675Suqs */
33241675Suqs/*
34241675Suqs * CAM Target Layer command table.
35241675Suqs *
36241675Suqs * Author: Ken Merry <ken@FreeBSD.org>, Kim Le
37241675Suqs */
38241675Suqs
39241675Suqs#include <sys/cdefs.h>
40241675Suqs#include <sys/param.h>
41241675Suqs#include <sys/systm.h>
42241675Suqs#include <sys/kernel.h>
43241675Suqs#include <sys/types.h>
44241675Suqs#include <sys/malloc.h>
45241675Suqs#include <sys/condvar.h>
46241675Suqs#include <sys/queue.h>
47241675Suqs#include <sys/sysctl.h>
48241675Suqs
49241675Suqs#include <cam/scsi/scsi_all.h>
50241675Suqs#include <cam/scsi/scsi_da.h>
51241675Suqs#include <cam/ctl/ctl_io.h>
52241675Suqs#include <cam/ctl/ctl.h>
53241675Suqs#include <cam/ctl/ctl_frontend.h>
54241675Suqs#include <cam/ctl/ctl_backend.h>
55241675Suqs#include <cam/ctl/ctl_ioctl.h>
56241675Suqs#include <cam/ctl/ctl_ha.h>
57241675Suqs#include <cam/ctl/ctl_private.h>
58241675Suqs
59241675Suqs/*
60241675Suqs * Whenever support for a new command is added, it should be added to these
61241675Suqs * tables.
62241675Suqs */
63241675Suqs
64241675Suqs/* 5E PERSISTENT RESERVE IN */
65241675Suqsconst struct ctl_cmd_entry ctl_cmd_table_5e[32] =
66241675Suqs{
67241675Suqs/* 00 READ KEYS */
68241675Suqs{ctl_persistent_reserve_in, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
69241675Suqs						CTL_CMD_FLAG_OK_ON_BOTH |
70241675Suqs						CTL_CMD_FLAG_OK_ON_STOPPED |
71241675Suqs						CTL_CMD_FLAG_OK_ON_INOPERABLE |
72241675Suqs						CTL_CMD_FLAG_OK_ON_STANDBY |
73241675Suqs						CTL_FLAG_DATA_IN |
74241675Suqs						CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
75241675Suqs CTL_LUN_PAT_NONE,
76241675Suqs 10, { 0x00, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
77241675Suqs
78241675Suqs/* 01 READ RESERVATION */
79241675Suqs{ctl_persistent_reserve_in, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
80241675Suqs						CTL_CMD_FLAG_OK_ON_BOTH |
81241675Suqs						CTL_CMD_FLAG_OK_ON_STOPPED |
82241675Suqs						CTL_CMD_FLAG_OK_ON_INOPERABLE |
83241675Suqs						CTL_CMD_FLAG_OK_ON_STANDBY |
84241675Suqs						CTL_FLAG_DATA_IN |
85241675Suqs						CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
86241675Suqs CTL_LUN_PAT_NONE,
87241675Suqs 10, { 0x01, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
88241675Suqs
89241675Suqs/* 02 REPORT CAPABILITIES */
90241675Suqs{ctl_persistent_reserve_in, CTL_SERIDX_INQ, CTL_CMD_FLAG_ALLOW_ON_RESV |
91241675Suqs					    CTL_CMD_FLAG_OK_ON_BOTH |
92241675Suqs					    CTL_CMD_FLAG_OK_ON_STOPPED |
93241675Suqs					    CTL_CMD_FLAG_OK_ON_INOPERABLE |
94241675Suqs					    CTL_CMD_FLAG_OK_ON_STANDBY |
95241675Suqs					    CTL_FLAG_DATA_IN |
96241675Suqs					    CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
97241675Suqs CTL_LUN_PAT_NONE,
98241675Suqs 10, { 0x02, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
99241675Suqs
100241675Suqs/* 03 READ FULL STATUS */
101241675Suqs{ctl_persistent_reserve_in, CTL_SERIDX_INQ, CTL_CMD_FLAG_ALLOW_ON_RESV |
102241675Suqs					    CTL_CMD_FLAG_OK_ON_BOTH |
103241675Suqs					    CTL_CMD_FLAG_OK_ON_STOPPED |
104241675Suqs					    CTL_CMD_FLAG_OK_ON_INOPERABLE |
105241675Suqs					    CTL_CMD_FLAG_OK_ON_STANDBY |
106241675Suqs					    CTL_FLAG_DATA_IN |
107241675Suqs					    CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
108241675Suqs CTL_LUN_PAT_NONE,
109241675Suqs 10, { 0x03, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
110241675Suqs
111241675Suqs/* 04-1f */
112241675Suqs};
113241675Suqs
114241675Suqs/* 5F PERSISTENT RESERVE OUT */
115241675Suqsconst struct ctl_cmd_entry ctl_cmd_table_5f[32] =
116241675Suqs{
117241675Suqs/* 00 REGISTER */
118241675Suqs{ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
119241675Suqs						CTL_CMD_FLAG_OK_ON_BOTH |
120241675Suqs						CTL_CMD_FLAG_OK_ON_STOPPED |
121241675Suqs						CTL_CMD_FLAG_OK_ON_INOPERABLE |
122241675Suqs						CTL_CMD_FLAG_OK_ON_STANDBY |
123241675Suqs						CTL_FLAG_DATA_OUT |
124241675Suqs						CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
125241675Suqs CTL_LUN_PAT_NONE,
126241675Suqs 10, { 0x00, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
127241675Suqs
128241675Suqs/* 01 RESERVE */
129241675Suqs{ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
130241675Suqs						CTL_CMD_FLAG_OK_ON_BOTH |
131241675Suqs						CTL_CMD_FLAG_OK_ON_STOPPED |
132241675Suqs						CTL_CMD_FLAG_OK_ON_INOPERABLE |
133241675Suqs						CTL_CMD_FLAG_OK_ON_STANDBY |
134241675Suqs						CTL_FLAG_DATA_OUT |
135241675Suqs						CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
136241675Suqs CTL_LUN_PAT_NONE,
137241675Suqs 10, { 0x01, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
138241675Suqs
139241675Suqs/* 02 RELEASE */
140241675Suqs{ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
141241675Suqs						CTL_CMD_FLAG_OK_ON_BOTH |
142241675Suqs						CTL_CMD_FLAG_OK_ON_STOPPED |
143241675Suqs						CTL_CMD_FLAG_OK_ON_INOPERABLE |
144241675Suqs						CTL_CMD_FLAG_OK_ON_STANDBY |
145241675Suqs						CTL_FLAG_DATA_OUT |
146241675Suqs						CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
147241675Suqs CTL_LUN_PAT_NONE,
148241675Suqs 10, { 0x02, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
149241675Suqs
150241675Suqs/* 03 CLEAR */
151241675Suqs{ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
152241675Suqs						CTL_CMD_FLAG_OK_ON_BOTH |
153241675Suqs						CTL_CMD_FLAG_OK_ON_STOPPED |
154241675Suqs						CTL_CMD_FLAG_OK_ON_INOPERABLE |
155241675Suqs						CTL_CMD_FLAG_OK_ON_STANDBY |
156241675Suqs						CTL_FLAG_DATA_OUT |
157241675Suqs						CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
158241675Suqs CTL_LUN_PAT_NONE,
159241675Suqs 10, { 0x03, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
160241675Suqs
161241675Suqs/* 04 PREEMPT */
162241675Suqs{ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
163241675Suqs						CTL_CMD_FLAG_OK_ON_BOTH |
164241675Suqs						CTL_CMD_FLAG_OK_ON_STOPPED |
165241675Suqs						CTL_CMD_FLAG_OK_ON_INOPERABLE |
166241675Suqs						CTL_CMD_FLAG_OK_ON_STANDBY |
167241675Suqs						CTL_FLAG_DATA_OUT |
168241675Suqs						CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
169241675Suqs CTL_LUN_PAT_NONE,
170241675Suqs 10, { 0x04, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
171241675Suqs
172241675Suqs/* 05 PREEMPT AND ABORT */
173241675Suqs{ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
174241675Suqs						CTL_CMD_FLAG_OK_ON_BOTH |
175241675Suqs						CTL_CMD_FLAG_OK_ON_STOPPED |
176241675Suqs						CTL_CMD_FLAG_OK_ON_INOPERABLE |
177241675Suqs						CTL_CMD_FLAG_OK_ON_STANDBY |
178241675Suqs						CTL_FLAG_DATA_OUT |
179241675Suqs						CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
180241675Suqs CTL_LUN_PAT_NONE,
181241675Suqs 10, { 0x05, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
182241675Suqs
183241675Suqs/* 06 REGISTER AND IGNORE EXISTING KEY */
184241675Suqs{ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
185241675Suqs						CTL_CMD_FLAG_OK_ON_BOTH |
186241675Suqs						CTL_CMD_FLAG_OK_ON_STOPPED |
187241675Suqs						CTL_CMD_FLAG_OK_ON_INOPERABLE |
188241675Suqs						CTL_CMD_FLAG_OK_ON_STANDBY |
189241675Suqs						CTL_FLAG_DATA_OUT |
190241675Suqs						CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
191241675Suqs CTL_LUN_PAT_NONE,
192241675Suqs 10, { 0x06, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
193241675Suqs
194241675Suqs/* 07 REGISTER AND MOVE */
195241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
196241675Suqs
197241675Suqs/* 08-1f */
198241675Suqs};
199241675Suqs
200241675Suqs/* 83 EXTENDED COPY */
201241675Suqsconst struct ctl_cmd_entry ctl_cmd_table_83[32] =
202241675Suqs{
203241675Suqs/* 00 EXTENDED COPY (LID1) */
204241675Suqs{ctl_extended_copy_lid1, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_BOTH |
205241675Suqs					    CTL_FLAG_DATA_OUT,
206241675Suqs CTL_LUN_PAT_NONE,
207241675Suqs 16, { 0x00, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
208241675Suqs
209241675Suqs/* 01 EXTENDED COPY (LID4) */
210241675Suqs{ctl_extended_copy_lid4, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_BOTH |
211241675Suqs					    CTL_FLAG_DATA_OUT,
212241675Suqs CTL_LUN_PAT_NONE,
213241675Suqs 16, { 0x01, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
214241675Suqs
215241675Suqs/* 02 */
216241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
217241675Suqs
218241675Suqs/* 03 */
219241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
220241675Suqs
221241675Suqs/* 04 */
222241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
223241675Suqs
224241675Suqs/* 05 */
225241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
226241675Suqs
227241675Suqs/* 06 */
228241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
229241675Suqs
230241675Suqs/* 07 */
231241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
232241675Suqs
233241675Suqs/* 08 */
234241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
235241675Suqs
236241675Suqs/* 09 */
237241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
238241675Suqs
239241675Suqs/* 0A */
240241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
241241675Suqs
242241675Suqs/* 0B */
243241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
244241675Suqs
245241675Suqs/* 0C */
246241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
247241675Suqs
248241675Suqs/* 0D */
249241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
250241675Suqs
251241675Suqs/* 0E */
252241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
253241675Suqs
254241675Suqs/* 0F */
255241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
256241675Suqs
257241675Suqs/* 10 POPULATE TOKEN */
258241675Suqs{ctl_populate_token, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_SLUN |
259241675Suqs					CTL_FLAG_DATA_OUT |
260241675Suqs					CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
261241675Suqs CTL_LUN_PAT_NONE,
262241675Suqs 16, { 0x10, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff,
263241675Suqs       0xff, 0xff, 0xff, 0xff, 0, 0x07}},
264241675Suqs
265241675Suqs/* 11 WRITE USING TOKEN */
266241675Suqs{ctl_write_using_token, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_SLUN |
267241675Suqs					CTL_FLAG_DATA_OUT,
268241675Suqs CTL_LUN_PAT_NONE,
269241675Suqs 16, { 0x11, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff,
270241675Suqs       0xff, 0xff, 0xff, 0xff, 0, 0x07}},
271241675Suqs
272241675Suqs/* 12 */
273241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
274241675Suqs
275241675Suqs/* 13 */
276241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
277241675Suqs
278241675Suqs/* 14 */
279241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
280241675Suqs
281241675Suqs/* 15 */
282241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
283241675Suqs
284241675Suqs/* 16 */
285241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
286241675Suqs
287241675Suqs/* 17 */
288241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
289241675Suqs
290241675Suqs/* 18 */
291241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
292241675Suqs
293241675Suqs/* 19 */
294241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
295241675Suqs
296241675Suqs/* 1A */
297241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
298241675Suqs
299241675Suqs/* 1B */
300241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
301241675Suqs
302241675Suqs/* 1C COPY OPERATION ABORT */
303241675Suqs{ctl_copy_operation_abort, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_BOTH |
304241675Suqs					      CTL_FLAG_DATA_NONE,
305241675Suqs CTL_LUN_PAT_NONE,
306241675Suqs 16, { 0x1c, 0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x07}},
307241675Suqs};
308241675Suqs
309241675Suqs/* 84 RECEIVE COPY STATUS */
310241675Suqsconst struct ctl_cmd_entry ctl_cmd_table_84[32] =
311241675Suqs{
312241675Suqs/* 00 RECEIVE COPY STATUS (LID1) */
313241675Suqs{ctl_receive_copy_status_lid1, CTL_SERIDX_RD_CAP,
314241675Suqs CTL_CMD_FLAG_OK_ON_BOTH |
315241675Suqs CTL_FLAG_DATA_IN |
316241675Suqs CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
317241675Suqs CTL_LUN_PAT_NONE,
318241675Suqs 16, {0x00, 0xff, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
319241675Suqs
320241675Suqs/* 01 RECEIVE COPY DATA (LID1) */
321241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
322241675Suqs
323241675Suqs/* 02 */
324241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
325241675Suqs
326241675Suqs/* 03 RECEIVE COPY OPERATING PARAMETERS */
327241675Suqs{ctl_receive_copy_operating_parameters, CTL_SERIDX_RD_CAP,
328241675Suqs CTL_CMD_FLAG_OK_ON_BOTH |
329241675Suqs CTL_CMD_FLAG_OK_ON_STOPPED |
330241675Suqs CTL_CMD_FLAG_OK_ON_INOPERABLE |
331241675Suqs CTL_CMD_FLAG_OK_ON_STANDBY |
332241675Suqs CTL_FLAG_DATA_IN |
333241675Suqs CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
334241675Suqs CTL_LUN_PAT_NONE,
335241675Suqs 16, {0x03, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
336241675Suqs
337241675Suqs/* 04 RECEIVE COPY FAILURE DETAILS (LID1) */
338241675Suqs{ctl_receive_copy_failure_details, CTL_SERIDX_RD_CAP,
339241675Suqs CTL_CMD_FLAG_OK_ON_BOTH |
340241675Suqs CTL_FLAG_DATA_IN |
341241675Suqs CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
342241675Suqs CTL_LUN_PAT_NONE,
343241675Suqs 16, {0x04, 0xff, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
344241675Suqs
345241675Suqs/* 05 RECEIVE COPY STATUS (LID4) */
346241675Suqs{ctl_receive_copy_status_lid4, CTL_SERIDX_RD_CAP,
347241675Suqs CTL_CMD_FLAG_OK_ON_BOTH |
348241675Suqs CTL_FLAG_DATA_IN |
349241675Suqs CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
350241675Suqs CTL_LUN_PAT_NONE,
351241675Suqs 16, {0x05, 0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
352241675Suqs
353241675Suqs/* 06 RECEIVE COPY DATA (LID4)*/
354241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
355241675Suqs
356241675Suqs/* 07 RECEIVE ROD TOKEN INFORMATION */
357241675Suqs{ctl_receive_rod_token_information, CTL_SERIDX_RD_CAP,
358241675Suqs CTL_CMD_FLAG_OK_ON_BOTH |
359241675Suqs CTL_FLAG_DATA_IN |
360241675Suqs CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
361241675Suqs CTL_LUN_PAT_NONE,
362241675Suqs 16, {0x07, 0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
363241675Suqs
364241675Suqs/* 08 REPORT ALL ROD TOKENS */
365241675Suqs{ctl_report_all_rod_tokens, CTL_SERIDX_RD_CAP,
366241675Suqs CTL_CMD_FLAG_OK_ON_BOTH |
367241675Suqs CTL_FLAG_DATA_IN |
368241675Suqs CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
369241675Suqs CTL_LUN_PAT_NONE,
370241675Suqs 16, {0x08, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
371241675Suqs};
372241675Suqs
373241675Suqs/* 9E SERVICE ACTION IN(16) */
374241675Suqsconst struct ctl_cmd_entry ctl_cmd_table_9e[32] =
375241675Suqs{
376241675Suqs/* 00 */
377241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
378241675Suqs
379241675Suqs/* 01 */
380241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
381241675Suqs
382241675Suqs/* 02 */
383241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
384241675Suqs
385241675Suqs/* 03 */
386241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
387241675Suqs
388241675Suqs/* 04 */
389241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
390241675Suqs
391241675Suqs/* 05 */
392241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
393241675Suqs
394241675Suqs/* 06 */
395241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
396241675Suqs
397241675Suqs/* 07 */
398241675Suqs{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
399241675Suqs
400241675Suqs/* 08 */
401241675Suqs{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_ALL_LUNS |
550				       CTL_CMD_FLAG_ALLOW_ON_RESV |
551				       CTL_CMD_FLAG_NO_SENSE |
552				       CTL_CMD_FLAG_OK_ON_STOPPED |
553				       CTL_CMD_FLAG_OK_ON_INOPERABLE |
554				       CTL_CMD_FLAG_OK_ON_STANDBY |
555				       CTL_CMD_FLAG_OK_ON_UNAVAIL |
556				       CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
557 CTL_LUN_PAT_NONE, 6, {0x01, 0, 0, 0xff, 0x07}},
558
559/* 04 FORMAT UNIT */
560{ctl_format, CTL_SERIDX_FORMAT, CTL_CMD_FLAG_OK_ON_SLUN |
561				CTL_CMD_FLAG_OK_ON_INOPERABLE |
562				CTL_FLAG_DATA_OUT,
563 CTL_LUN_PAT_NONE, 6, {0xff, 0, 0, 0, 0x07}},
564
565/* 05 READ BLOCK LIMITS */
566{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
567
568/* 06 */
569{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
570
571/* 07 REASSIGN BLOCKS */
572{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
573
574/* 08 READ(6) */
575{ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN |
576				  CTL_FLAG_DATA_IN |
577				  CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
578 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE, 6, {0x1f, 0xff, 0xff, 0xff, 0x07}},
579
580/* 09 */
581{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
582
583/* 0A WRITE(6) */
584{ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN |
585				   CTL_FLAG_DATA_OUT,
586 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE, 6, {0x1f, 0xff, 0xff, 0xff, 0x07}},
587
588/* 0B SEEK(6) */
589{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
590
591/* 0C */
592{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
593
594/* 0D */
595{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
596
597/* 0E */
598{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
599
600/* 0F READ REVERSE(6) */
601{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
602
603/* 10 WRITE FILEMARKS(6) */
604{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
605
606/* 11 SPACE(6) */
607{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
608
609/* 12 INQUIRY */
610{ctl_inquiry, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_ALL_LUNS |
611			      CTL_CMD_FLAG_ALLOW_ON_RESV |
612			      CTL_CMD_FLAG_NO_SENSE |
613			      CTL_CMD_FLAG_OK_ON_STOPPED |
614			      CTL_CMD_FLAG_OK_ON_INOPERABLE |
615			      CTL_CMD_FLAG_OK_ON_STANDBY |
616			      CTL_CMD_FLAG_OK_ON_UNAVAIL |
617			      CTL_FLAG_DATA_IN |
618			      CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
619 CTL_LUN_PAT_NONE, 6, {0xe1, 0xff, 0xff, 0xff, 0x07}},
620
621/* 13 */
622{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
623
624/* 14 RECOVER BUFFERED DATA */
625{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
626
627/* 15 MODE SELECT(6) */
628{ctl_mode_select, CTL_SERIDX_MD_SEL, CTL_CMD_FLAG_OK_ON_BOTH |
629				     CTL_CMD_FLAG_OK_ON_STOPPED |
630				     CTL_CMD_FLAG_OK_ON_INOPERABLE |
631				     CTL_CMD_FLAG_OK_ON_STANDBY |
632				     CTL_FLAG_DATA_OUT,
633 CTL_LUN_PAT_NONE, 6, {0x11, 0, 0, 0xff, 0x07}},
634
635/* 16 RESERVE(6) */
636{ctl_scsi_reserve, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
637				    CTL_CMD_FLAG_OK_ON_BOTH |
638				    CTL_CMD_FLAG_OK_ON_STOPPED |
639				    CTL_CMD_FLAG_OK_ON_INOPERABLE |
640				    CTL_CMD_FLAG_OK_ON_STANDBY |
641				    CTL_FLAG_DATA_OUT,
642 CTL_LUN_PAT_NONE, 6, {0, 0, 0, 0, 0x07}},
643
644/* 17 RELEASE(6) */
645{ctl_scsi_release, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
646				   CTL_CMD_FLAG_OK_ON_BOTH |
647				   CTL_CMD_FLAG_OK_ON_STOPPED |
648				   CTL_CMD_FLAG_OK_ON_INOPERABLE |
649				   CTL_CMD_FLAG_OK_ON_STANDBY |
650				   CTL_FLAG_DATA_NONE,
651 CTL_LUN_PAT_NONE, 6, {0, 0, 0, 0, 0x07}},
652
653/* 18 COPY */
654{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
655
656/* 19 ERASE(6) */
657{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
658
659/* 1A MODE SENSE(6) */
660{ctl_mode_sense, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
661				    CTL_CMD_FLAG_OK_ON_STOPPED |
662				    CTL_CMD_FLAG_OK_ON_INOPERABLE |
663				    CTL_CMD_FLAG_OK_ON_STANDBY |
664				    CTL_FLAG_DATA_IN |
665				    CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
666 CTL_LUN_PAT_NONE, 6, {0x08, 0xff, 0xff, 0xff, 0x07}},
667
668/* 1B START STOP UNIT */
669{ctl_start_stop, CTL_SERIDX_START, CTL_CMD_FLAG_OK_ON_SLUN |
670				   CTL_CMD_FLAG_OK_ON_STOPPED |
671				   CTL_CMD_FLAG_OK_ON_INOPERABLE |
672				   CTL_FLAG_DATA_NONE |
673				   CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
674 CTL_LUN_PAT_NONE, 6, {0x01, 0, 0, 0x03, 0x07}},
675
676/* 1C RECEIVE DIAGNOSTIC RESULTS */
677{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
678
679/* 1D SEND DIAGNOSTIC */
680{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
681
682/* 1E PREVENT ALLOW MEDIUM REMOVAL */
683{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
684
685/* 1F */
686{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
687
688/* 20 */
689{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
690
691/* 21 */
692{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
693
694/* 22 */
695{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
696
697/* 23 */
698{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
699
700/* 24 SET WINDOW */
701{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
702
703/* 25 READ CAPACITY(10) */
704{ctl_read_capacity, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_SLUN|
705				       CTL_CMD_FLAG_OK_ON_STOPPED |
706				       CTL_CMD_FLAG_OK_ON_INOPERABLE |
707				       CTL_FLAG_DATA_IN |
708				       CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
709 CTL_LUN_PAT_READCAP, 10, {0, 0, 0, 0, 0, 0, 0, 0, 0x07}},
710
711/* 26 */
712{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
713
714/* 27 */
715{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
716
717/* 28 READ(10) */
718{ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN |
719				  CTL_FLAG_DATA_IN |
720				  CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
721 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
722 10, {0x1a, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
723
724/* 29 READ GENERATION */
725{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
726
727/* 2A WRITE(10) */
728{ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
729 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
730 10, {0x1a, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
731
732/* 2B SEEK(10) */
733{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
734
735/* 2C ERASE(10) */
736{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
737
738/* 2D READ UPDATED BLOCK */
739{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
740
741/* 2E WRITE AND VERIFY(10) */
742{ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
743 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
744 10, {0x12, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
745
746/* 2F VERIFY(10) */
747{ctl_verify, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN |
748			      CTL_FLAG_DATA_OUT |
749			      CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
750 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
751 10, {0x16, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
752
753/* 30 SEARCH DATA HIGH(10) */
754{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
755
756/* 31 SEARCH DATA EQUAL(10) */
757{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
758
759/* 32 SEARCH DATA LOW(10) */
760{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
761
762/* 33 SET LIMITS(10) */
763{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
764
765/* 34 PRE-FETCH(10) */
766{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
767
768/* 35 SYNCHRONIZE CACHE(10) */
769{ctl_sync_cache, CTL_SERIDX_SYNC, CTL_CMD_FLAG_OK_ON_SLUN |
770				  CTL_FLAG_DATA_NONE,
771 CTL_LUN_PAT_WRITE,
772 10, {0x02, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
773
774/* 36 LOCK UNLOCK CACHE(10) */
775{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
776
777/* 37 READ DEFECT DATA(10) */
778{ctl_read_defect, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_SLUN |
779				     CTL_FLAG_DATA_IN |
780				     CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
781 CTL_LUN_PAT_NONE,
782 10, {0, 0x1f, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
783
784/* 38 MEDIUM SCAN */
785{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
786
787/* 39 COMPARE */
788{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
789
790/* 3A COPY AND VERIFY */
791{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
792
793/* 3B WRITE BUFFER */
794{ctl_write_buffer, CTL_SERIDX_MD_SEL, CTL_CMD_FLAG_OK_ON_BOTH |
795				      CTL_CMD_FLAG_OK_ON_STOPPED |
796				      CTL_CMD_FLAG_OK_ON_INOPERABLE |
797				      CTL_CMD_FLAG_OK_ON_STANDBY |
798				      CTL_FLAG_DATA_OUT,
799 CTL_LUN_PAT_NONE,
800 10, {0x1f, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07}},
801
802/* 3C READ BUFFER */
803{ctl_read_buffer, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
804				     CTL_CMD_FLAG_OK_ON_STOPPED |
805				     CTL_CMD_FLAG_OK_ON_INOPERABLE |
806				     CTL_CMD_FLAG_OK_ON_STANDBY |
807				     CTL_FLAG_DATA_IN |
808				     CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
809 CTL_LUN_PAT_NONE,
810 10, {0x1f, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07}},
811
812/* 3D UPDATE BLOCK */
813{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
814
815/* 3E READ LONG */
816{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
817
818/* 3F WRITE LONG */
819{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
820
821/* 40 CHANGE DEFINITION */
822{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
823
824/* 41 WRITE SAME(10) */
825{ctl_write_same, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN |
826				   CTL_FLAG_DATA_OUT,
827 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
828 10, {0x1a, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
829
830/* 42 READ SUB-CHANNEL / UNMAP */
831{ctl_unmap, CTL_SERIDX_UNMAP, CTL_CMD_FLAG_OK_ON_SLUN | CTL_FLAG_DATA_OUT,
832 CTL_LUN_PAT_WRITE,
833 10, {1, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
834
835/* 43 READ TOC/PMA/ATIP */
836{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
837
838/* 44 REPORT DENSITY SUPPORT */
839{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
840
841/* 45 PLAY AUDIO(10) */
842{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
843
844/* 46 GET CONFIGURATION */
845{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
846
847/* 47 PLAY AUDIO MSF */
848{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
849
850/* 48 PLAY AUDIO TRACK INDEX */
851{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
852
853/* 49 PLAY TRACK RELATIVE(10) */
854{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
855
856/* 4A GET EVENT STATUS NOTIFICATION */
857{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
858
859/* 4B PAUSE/RESUME */
860{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
861
862/* 4C LOG SELECT */
863{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
864
865/* 4D LOG SENSE */
866{ctl_log_sense, CTL_SERIDX_LOG_SNS, CTL_CMD_FLAG_OK_ON_SLUN |
867				    CTL_FLAG_DATA_IN |
868				    CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
869 CTL_LUN_PAT_NONE, 10, {0, 0xff, 0xff, 0, 0xff, 0xff, 0xff, 0xff, 0x07} },
870
871/* 4E STOP PLAY/SCAN */
872{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
873
874/* 4F */
875{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
876
877/* 50 XDWRITE(10) */
878{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
879
880/* 51 XPWRITE(10) */
881{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
882
883/* 52 XDREAD(10) */
884{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
885
886/* 53 RESERVE TRACK */
887{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
888
889/* 54 SEND OPC INFORMATION */
890{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
891
892/* 55 MODE SELECT(10) */
893{ctl_mode_select, CTL_SERIDX_MD_SEL, CTL_CMD_FLAG_OK_ON_BOTH |
894				     CTL_CMD_FLAG_OK_ON_STOPPED |
895				     CTL_CMD_FLAG_OK_ON_INOPERABLE |
896				     CTL_CMD_FLAG_OK_ON_STANDBY |
897				     CTL_FLAG_DATA_OUT,
898 CTL_LUN_PAT_NONE, 10, {0x11, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07} },
899
900/* 56 RESERVE(10) */
901{ctl_scsi_reserve, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
902				    CTL_CMD_FLAG_OK_ON_BOTH |
903				    CTL_CMD_FLAG_OK_ON_STOPPED |
904				    CTL_CMD_FLAG_OK_ON_INOPERABLE |
905				    CTL_CMD_FLAG_OK_ON_STANDBY |
906				    CTL_FLAG_DATA_OUT,
907 CTL_LUN_PAT_NONE, 10, {0x02, 0, 0xff, 0, 0, 0, 0xff, 0xff, 0x07} },
908
909/* 57 RELEASE(10) */
910{ctl_scsi_release, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
911				   CTL_CMD_FLAG_OK_ON_BOTH |
912				   CTL_CMD_FLAG_OK_ON_STOPPED |
913				   CTL_CMD_FLAG_OK_ON_INOPERABLE |
914				   CTL_CMD_FLAG_OK_ON_STANDBY |
915				   CTL_FLAG_DATA_OUT,
916 CTL_LUN_PAT_NONE, 10, {0x02, 0, 0xff, 0, 0, 0, 0xff, 0xff, 0x07} },
917
918/* 58 REPAIR TRACK */
919{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
920
921/* 59 READ MASTER CUE */
922{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
923
924/* 5A MODE SENSE(10) */
925{ctl_mode_sense, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
926				    CTL_CMD_FLAG_OK_ON_STOPPED |
927				    CTL_CMD_FLAG_OK_ON_INOPERABLE |
928				    CTL_CMD_FLAG_OK_ON_STANDBY |
929				    CTL_FLAG_DATA_IN |
930				    CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
931 CTL_LUN_PAT_NONE, 10, {0x18, 0xff, 0xff, 0, 0, 0, 0xff, 0xff, 0x07} },
932
933/* 5B CLOSE TRACK/SESSION */
934{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
935
936/* 5C READ BUFFER CAPACITY */
937{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
938
939/* 5D SEND CUE SHEET */
940{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
941
942/* 5E PERSISTENT RESERVE IN */
943{__DECONST(ctl_opfunc *, ctl_cmd_table_5e), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
944 CTL_LUN_PAT_NONE},
945
946/* 5F PERSISTENT RESERVE OUT */
947{__DECONST(ctl_opfunc *, ctl_cmd_table_5f), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
948 CTL_LUN_PAT_NONE},
949
950/* 60 */
951{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
952
953/* 61 */
954{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
955
956/* 62 */
957{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
958
959/* 63 */
960{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
961
962/* 64 */
963{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
964
965/* 65 */
966{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
967
968/* 66 */
969{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
970
971/* 67 */
972{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
973
974/* 68 */
975{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
976
977/* 69 */
978{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
979
980/* 6A */
981{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
982
983/* 6B */
984{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
985
986/* 6C */
987{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
988
989/* 6D */
990{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
991
992/* 6E */
993{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
994
995/* 6F */
996{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
997
998/* 70 */
999{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1000
1001/* 71 */
1002{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1003
1004/* 72 */
1005{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1006
1007/* 73 */
1008{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1009
1010/* 74 */
1011{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1012
1013/* 75 */
1014{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1015
1016/* 76 */
1017{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1018
1019/* 77 */
1020{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1021
1022/* 78 */
1023{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1024
1025/* 79 */
1026{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1027
1028/* 7A */
1029{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1030
1031/* 7B */
1032{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1033
1034/* 7C */
1035{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1036
1037/* 7D */
1038{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1039
1040/* 7E */
1041{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1042
1043/* 7F */
1044{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1045
1046/* 80 XDWRITE EXTENDED(16) */
1047{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1048
1049/* 81 REBUILD(16) */
1050{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1051
1052/* 82 REGENERATE(16) */
1053{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1054
1055/* 83 EXTENDED COPY */
1056{__DECONST(ctl_opfunc *, ctl_cmd_table_83), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1057 CTL_LUN_PAT_NONE},
1058
1059/* 84 RECEIVE COPY RESULTS */
1060{__DECONST(ctl_opfunc *, ctl_cmd_table_84), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1061 CTL_LUN_PAT_NONE},
1062
1063/* 85 */
1064{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1065
1066/* 86 ACCESS CONTROL IN */
1067{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1068
1069/* 87 ACCESS CONTROL OUT */
1070{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1071
1072/* 88 READ(16) */
1073{ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN | CTL_FLAG_DATA_IN |
1074                                  CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1075 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
1076 16, {0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1077      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1078
1079/* 89 COMPARE AND WRITE */
1080{ctl_cnw, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
1081 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1082 16, {0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1083      0xff, 0xff, 0, 0, 0, 0xff, 0, 0x07}},
1084
1085/* 8A WRITE(16) */
1086{ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
1087 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1088 16, {0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1089      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1090
1091/* 8B */
1092{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1093
1094/* 8C READ ATTRIBUTE */
1095{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1096
1097/* 8D WRITE ATTRIBUTE */
1098{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1099
1100/* 8E WRITE AND VERIFY(16) */
1101{ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
1102 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1103 16, {0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1104      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1105
1106/* 8F VERIFY(16) */
1107{ctl_verify, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN |
1108			      CTL_FLAG_DATA_OUT |
1109			      CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1110 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
1111 16, {0x16, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1112      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1113
1114/* 90 PRE-FETCH(16) */
1115{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1116
1117/* 91 SYNCHRONIZE CACHE(16) */
1118{ctl_sync_cache, CTL_SERIDX_SYNC, CTL_CMD_FLAG_OK_ON_SLUN |
1119				  CTL_FLAG_DATA_NONE,
1120 CTL_LUN_PAT_WRITE,
1121 16, {0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1122      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1123
1124/* 92 LOCK UNLOCK CACHE(16) */
1125{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1126
1127/* 93 WRITE SAME(16) */
1128{ctl_write_same, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN |
1129				   CTL_FLAG_DATA_OUT,
1130 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1131 16, {0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1132      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1133
1134/* 94 */
1135{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1136
1137/* 95 */
1138{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1139
1140/* 96 */
1141{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1142
1143/* 97 */
1144{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1145
1146/* 98 */
1147{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1148
1149/* 99 */
1150{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1151
1152/* 9A */
1153{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1154
1155/* 9B */
1156{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1157
1158/* 9C WRITE ATOMIC (16) */
1159{ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
1160 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1161 16, {0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1162      0xff, 0xff, 0, 0, 0xff, 0xff, 0, 0x07}},
1163
1164/* 9D */
1165{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1166
1167/* 9E SERVICE ACTION IN(16) */
1168{__DECONST(ctl_opfunc *, ctl_cmd_table_9e), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1169 CTL_LUN_PAT_NONE},
1170
1171/* 9F SERVICE ACTION OUT(16) */
1172{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1173
1174/* A0 REPORT LUNS */
1175{ctl_report_luns, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_ALL_LUNS |
1176				  CTL_CMD_FLAG_ALLOW_ON_RESV |
1177				  CTL_CMD_FLAG_NO_SENSE |
1178				  CTL_CMD_FLAG_OK_ON_STOPPED |
1179				  CTL_CMD_FLAG_OK_ON_INOPERABLE |
1180				  CTL_CMD_FLAG_OK_ON_STANDBY |
1181				  CTL_CMD_FLAG_OK_ON_UNAVAIL |
1182				  CTL_FLAG_DATA_IN |
1183				  CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
1184 CTL_LUN_PAT_NONE,
1185 12, {0, 0xff, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1186
1187/* A1 BLANK */
1188{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1189
1190/* A2 SEND EVENT */
1191{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1192
1193/* A3 MAINTENANCE IN */
1194{__DECONST(ctl_opfunc *, ctl_cmd_table_a3), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1195 CTL_LUN_PAT_NONE},
1196
1197/* A4 MAINTENANCE OUT */
1198{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1199
1200/* A5 MOVE MEDIUM */
1201{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1202
1203/* A6 EXCHANGE MEDIUM */
1204{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1205
1206/* A7 MOVE MEDIUM ATTACHED */
1207{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1208
1209/* A8 READ(12) */
1210{ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN | CTL_FLAG_DATA_IN |
1211                                  CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1212 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
1213 12, {0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1214
1215/* A9 PLAY TRACK RELATIVE(12) */
1216{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1217
1218/* AA WRITE(12) */
1219{ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
1220 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1221 12, {0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1222
1223/* AB SERVICE ACTION IN(12) */
1224{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1225
1226/* AC ERASE(12) */
1227{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1228
1229/* AD READ DVD STRUCTURE */
1230{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1231
1232/* AE WRITE AND VERIFY(12) */
1233{ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
1234 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1235 12, {0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1236
1237/* AF VERIFY(12) */
1238{ctl_verify, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN |
1239			      CTL_FLAG_DATA_OUT |
1240			      CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1241 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
1242 12, {0x16, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1243
1244/* B0 SEARCH DATA HIGH(12) */
1245{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1246
1247/* B1 SEARCH DATA EQUAL(12) */
1248{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1249
1250/* B2 SEARCH DATA LOW(12) */
1251{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1252
1253/* B3 SET LIMITS(12) */
1254{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1255
1256/* B4 READ ELEMENT STATUS ATTACHED */
1257{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1258
1259/* B5 REQUEST VOLUME ELEMENT ADDRESS */
1260{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1261
1262/* B6 SEND VOLUME TAG */
1263{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1264
1265/* B7 READ DEFECT DATA(12) */
1266{ctl_read_defect, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_SLUN |
1267				     CTL_FLAG_DATA_IN |
1268				     CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1269 CTL_LUN_PAT_NONE,
1270 12, {0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1271
1272/* B8 READ ELEMENT STATUS */
1273{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1274
1275/* B9 READ CD MSF */
1276{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1277
1278/* BA REDUNDANCY GROUP IN */
1279{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1280
1281/* BB REDUNDANCY GROUP OUT */
1282{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1283
1284/* BC SPARE IN */
1285{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1286
1287/* BD SPARE OUT */
1288{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1289
1290/* BE VOLUME SET IN */
1291{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1292
1293/* BF VOLUME SET OUT */
1294{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1295
1296/* C0 */
1297{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1298
1299/* C1 */
1300{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1301
1302/* C2 */
1303{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1304
1305/* C3 */
1306{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1307
1308/* C4 */
1309{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1310
1311/* C5 */
1312{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1313
1314/* C6 */
1315{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1316
1317/* C7 */
1318{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1319
1320/* C8 */
1321{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1322
1323/* C9 */
1324{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1325
1326/* CA */
1327{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1328
1329/* CB */
1330{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1331
1332/* CC */
1333{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1334
1335/* CD */
1336{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1337
1338/* CE */
1339{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1340
1341/* CF */
1342{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1343
1344/* D0 */
1345{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1346
1347/* D1 */
1348{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1349
1350/* D2 */
1351{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1352
1353/* D3 */
1354{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1355
1356/* D4 */
1357{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1358
1359/* D5 */
1360{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1361
1362/* D6 */
1363{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1364
1365/* D7 */
1366{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1367
1368/* D8 */
1369{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1370
1371/* D9 */
1372{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1373
1374/* DA */
1375{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1376
1377/* DB */
1378{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1379
1380/* DC */
1381{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1382
1383/* DD */
1384{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1385
1386/* DE */
1387{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1388
1389/* DF */
1390{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1391
1392/* E0 */
1393{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1394
1395/* E1 */
1396{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1397
1398/* E2 */
1399{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1400
1401/* E3 */
1402{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1403
1404/* E4 */
1405{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1406
1407/* E5 */
1408{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1409
1410/* E6 */
1411{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1412
1413/* E7 */
1414{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1415
1416/* E8 */
1417{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1418
1419/* E9 */
1420{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1421
1422/* EA */
1423{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1424
1425/* EB */
1426{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1427
1428/* EC */
1429{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1430
1431/* ED */
1432{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1433
1434/* EE */
1435{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1436
1437/* EF */
1438{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1439
1440/* F0 */
1441{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1442
1443/* F1 */
1444{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1445
1446/* F2 */
1447{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1448
1449/* F3 */
1450{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1451
1452/* F4 */
1453{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1454
1455/* F5 */
1456{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1457
1458/* F6 */
1459{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1460
1461/* F7 */
1462{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1463
1464/* F8 */
1465{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1466
1467/* F9 */
1468{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1469
1470/* FA */
1471{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1472
1473/* FB */
1474{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1475
1476/* FC */
1477{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1478
1479/* FD */
1480{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1481
1482/* FE */
1483{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1484
1485/* FF */
1486{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}
1487
1488};
1489