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