]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/blob - sys/cam/ctl/ctl_cmd_table.c
MFC r271930: Allow SUBPAGE CODE field in MODE SENSE commands.
[FreeBSD/stable/10.git] / sys / cam / ctl / ctl_cmd_table.c
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$
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 */
66 const 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 */
116 const 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 */
194 const 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 */
302 const 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) */
363 const 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 */
427 const 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
506 const 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, {0x18, 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, {0x18, 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, {0x10, 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, {0x18, 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, {0x18, 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, {0x10, 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, {0x18, 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, {0x18, 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, {0x10, 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 };