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