]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/cam/ctl/ctl_cmd_table.c
MFV: r336486
[FreeBSD/FreeBSD.git] / sys / cam / ctl / ctl_cmd_table.c
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3  *
4  * Copyright (c) 2003, 2004, 2005, 2009 Silicon Graphics International Corp.
5  * Copyright (c) 2014-2015 Alexander Motin <mav@FreeBSD.org>
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions, and the following disclaimer,
13  *    without modification.
14  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
15  *    substantially similar to the "NO WARRANTY" disclaimer below
16  *    ("Disclaimer") and any redistribution must be conditioned upon
17  *    including a substantially similar Disclaimer requirement for further
18  *    binary redistribution.
19  *
20  * NO WARRANTY
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
24  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
29  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
30  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31  * POSSIBILITY OF SUCH DAMAGES.
32  *
33  * $Id: //depot/users/kenm/FreeBSD-test2/sys/cam/ctl/ctl_cmd_table.c#4 $
34  * $FreeBSD$
35  */
36 /*
37  * CAM Target Layer command table.
38  *
39  * Author: Ken Merry <ken@FreeBSD.org>, Kim Le
40  */
41
42 #include <sys/cdefs.h>
43 #include <sys/param.h>
44 #include <sys/systm.h>
45 #include <sys/kernel.h>
46 #include <sys/types.h>
47 #include <sys/malloc.h>
48 #include <sys/condvar.h>
49 #include <sys/queue.h>
50 #include <sys/sysctl.h>
51
52 #include <cam/scsi/scsi_all.h>
53 #include <cam/scsi/scsi_da.h>
54 #include <cam/ctl/ctl_io.h>
55 #include <cam/ctl/ctl.h>
56 #include <cam/ctl/ctl_frontend.h>
57 #include <cam/ctl/ctl_backend.h>
58 #include <cam/ctl/ctl_ioctl.h>
59 #include <cam/ctl/ctl_ha.h>
60 #include <cam/ctl/ctl_private.h>
61
62 /*
63  * Whenever support for a new command is added, it should be added to these
64  * tables.
65  */
66
67 /* 3B WRITE BUFFER */
68 const struct ctl_cmd_entry ctl_cmd_table_3b[32] =
69 {
70 /* 00 WRITE BUFFER HDR DATA */
71 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
72
73 /* 01 WRITE BUFFER VENDOR */
74 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
75
76 /* 02 WRITE BUFFER DATA */
77 {ctl_write_buffer, CTL_SERIDX_MD_SEL, CTL_CMD_FLAG_OK_ON_BOTH |
78                                       CTL_CMD_FLAG_OK_ON_NO_MEDIA |
79                                       CTL_CMD_FLAG_OK_ON_STANDBY |
80                                       CTL_FLAG_DATA_OUT,
81  CTL_LUN_PAT_NONE,
82  10, {0x02, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07}},
83
84 /* 03 WRITE BUFFER DESCR */
85 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
86
87 /* 04 WRITE BUFFER DOWNLOAD */
88 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
89
90 /* 05 WRITE BUFFER DOWNLOAD SAVE */
91 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
92
93 /* 06 */
94 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
95
96 /* 07 */
97 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
98
99 /* 08 */
100 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
101
102 /* 09 */
103 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
104
105 /* 0A WRITE BUFFER ECHO */
106 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
107
108 /* 0B WRITE BUFFER ECHO DESCRIPTOR */
109 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
110
111 /* 0C */
112 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
113
114 /* 0D */
115 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
116
117 /* 0E */
118 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
119
120 /* 0F */
121 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
122
123 /* 10 */
124 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
125
126 /* 11 */
127 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
128
129 /* 12 */
130 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
131
132 /* 13 */
133 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
134
135 /* 14 */
136 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
137
138 /* 15 */
139 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
140
141 /* 16 */
142 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
143
144 /* 17 */
145 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
146
147 /* 18 */
148 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
149
150 /* 19 */
151 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
152
153 /* 1A */
154 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
155
156 /* 1B */
157 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
158
159 /* 1C WRITE BUFFER ERROR HISTORY */
160 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
161
162 /* 1d-1f */
163 };
164
165 /* 3C READ BUFFER(10) */
166 const struct ctl_cmd_entry ctl_cmd_table_3c[32] =
167 {
168 /* 00 READ BUFFER(10) HDR DATA */
169 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
170
171 /* 01 READ BUFFER(10) VENDOR */
172 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
173
174 /* 02 READ BUFFER(10) DATA */
175 {ctl_read_buffer, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
176                                      CTL_CMD_FLAG_OK_ON_NO_MEDIA |
177                                      CTL_CMD_FLAG_OK_ON_STANDBY |
178                                      CTL_FLAG_DATA_IN |
179                                      CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
180  CTL_LUN_PAT_NONE,
181  10, {0x02, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07}},
182
183 /* 03 READ BUFFER(10) DESCR */
184 {ctl_read_buffer, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
185                                      CTL_CMD_FLAG_OK_ON_NO_MEDIA |
186                                      CTL_CMD_FLAG_OK_ON_STANDBY |
187                                      CTL_FLAG_DATA_IN |
188                                      CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
189  CTL_LUN_PAT_NONE,
190  10, {0x03, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07}},
191
192 /* 04 */
193 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
194
195 /* 05 */
196 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
197
198 /* 06 */
199 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
200
201 /* 07 */
202 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
203
204 /* 08 */
205 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
206
207 /* 09 */
208 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
209
210 /* 0A READ BUFFER(10) ECHO */
211 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
212
213 /* 0B READ BUFFER(10) ECHO DESCRIPTOR */
214 {ctl_read_buffer, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
215                                      CTL_CMD_FLAG_OK_ON_NO_MEDIA |
216                                      CTL_CMD_FLAG_OK_ON_STANDBY |
217                                      CTL_FLAG_DATA_IN |
218                                      CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
219  CTL_LUN_PAT_NONE,
220  10, {0x0b, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07}},
221
222 /* 0C */
223 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
224
225 /* 0D */
226 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
227
228 /* 0E */
229 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
230
231 /* 0F */
232 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
233
234 /* 10 */
235 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
236
237 /* 11 */
238 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
239
240 /* 12 */
241 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
242
243 /* 13 */
244 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
245
246 /* 14 */
247 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
248
249 /* 15 */
250 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
251
252 /* 16 */
253 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
254
255 /* 17 */
256 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
257
258 /* 18 */
259 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
260
261 /* 19 */
262 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
263
264 /* 1A */
265 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
266
267 /* 1B */
268 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
269
270 /* 1C READ BUFFER(10) ERROR HISTORY */
271 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
272
273 /* 1d-1f */
274 };
275
276 /* 5E PERSISTENT RESERVE IN */
277 const struct ctl_cmd_entry ctl_cmd_table_5e[32] =
278 {
279 /* 00 READ KEYS */
280 {ctl_persistent_reserve_in, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
281                                                 CTL_CMD_FLAG_OK_ON_BOTH |
282                                                 CTL_CMD_FLAG_OK_ON_NO_MEDIA |
283                                                 CTL_CMD_FLAG_OK_ON_STANDBY |
284                                                 CTL_FLAG_DATA_IN |
285                                                 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
286  CTL_LUN_PAT_NONE,
287  10, { 0x00, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
288
289 /* 01 READ RESERVATION */
290 {ctl_persistent_reserve_in, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
291                                                 CTL_CMD_FLAG_OK_ON_BOTH |
292                                                 CTL_CMD_FLAG_OK_ON_NO_MEDIA |
293                                                 CTL_CMD_FLAG_OK_ON_STANDBY |
294                                                 CTL_FLAG_DATA_IN |
295                                                 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
296  CTL_LUN_PAT_NONE,
297  10, { 0x01, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
298
299 /* 02 REPORT CAPABILITIES */
300 {ctl_persistent_reserve_in, CTL_SERIDX_INQ, CTL_CMD_FLAG_ALLOW_ON_RESV |
301                                             CTL_CMD_FLAG_OK_ON_BOTH |
302                                             CTL_CMD_FLAG_OK_ON_NO_MEDIA |
303                                             CTL_CMD_FLAG_OK_ON_STANDBY |
304                                             CTL_FLAG_DATA_IN |
305                                             CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
306  CTL_LUN_PAT_NONE,
307  10, { 0x02, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
308
309 /* 03 READ FULL STATUS */
310 {ctl_persistent_reserve_in, CTL_SERIDX_INQ, CTL_CMD_FLAG_ALLOW_ON_RESV |
311                                             CTL_CMD_FLAG_OK_ON_BOTH |
312                                             CTL_CMD_FLAG_OK_ON_NO_MEDIA |
313                                             CTL_CMD_FLAG_OK_ON_STANDBY |
314                                             CTL_FLAG_DATA_IN |
315                                             CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
316  CTL_LUN_PAT_NONE,
317  10, { 0x03, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
318
319 /* 04-1f */
320 };
321
322 /* 5F PERSISTENT RESERVE OUT */
323 const struct ctl_cmd_entry ctl_cmd_table_5f[32] =
324 {
325 /* 00 REGISTER */
326 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
327                                                 CTL_CMD_FLAG_OK_ON_BOTH |
328                                                 CTL_CMD_FLAG_OK_ON_NO_MEDIA |
329                                                 CTL_CMD_FLAG_OK_ON_STANDBY |
330                                                 CTL_FLAG_DATA_OUT |
331                                                 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
332  CTL_LUN_PAT_NONE,
333  10, { 0x00, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
334
335 /* 01 RESERVE */
336 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
337                                                 CTL_CMD_FLAG_OK_ON_BOTH |
338                                                 CTL_CMD_FLAG_OK_ON_NO_MEDIA |
339                                                 CTL_CMD_FLAG_OK_ON_STANDBY |
340                                                 CTL_FLAG_DATA_OUT |
341                                                 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
342  CTL_LUN_PAT_NONE,
343  10, { 0x01, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
344
345 /* 02 RELEASE */
346 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
347                                                 CTL_CMD_FLAG_OK_ON_BOTH |
348                                                 CTL_CMD_FLAG_OK_ON_NO_MEDIA |
349                                                 CTL_CMD_FLAG_OK_ON_STANDBY |
350                                                 CTL_FLAG_DATA_OUT |
351                                                 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
352  CTL_LUN_PAT_NONE,
353  10, { 0x02, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
354
355 /* 03 CLEAR */
356 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
357                                                 CTL_CMD_FLAG_OK_ON_BOTH |
358                                                 CTL_CMD_FLAG_OK_ON_NO_MEDIA |
359                                                 CTL_CMD_FLAG_OK_ON_STANDBY |
360                                                 CTL_FLAG_DATA_OUT |
361                                                 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
362  CTL_LUN_PAT_NONE,
363  10, { 0x03, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
364
365 /* 04 PREEMPT */
366 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
367                                                 CTL_CMD_FLAG_OK_ON_BOTH |
368                                                 CTL_CMD_FLAG_OK_ON_NO_MEDIA |
369                                                 CTL_CMD_FLAG_OK_ON_STANDBY |
370                                                 CTL_FLAG_DATA_OUT |
371                                                 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
372  CTL_LUN_PAT_NONE,
373  10, { 0x04, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
374
375 /* 05 PREEMPT AND ABORT */
376 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
377                                                 CTL_CMD_FLAG_OK_ON_BOTH |
378                                                 CTL_CMD_FLAG_OK_ON_NO_MEDIA |
379                                                 CTL_CMD_FLAG_OK_ON_STANDBY |
380                                                 CTL_FLAG_DATA_OUT |
381                                                 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
382  CTL_LUN_PAT_NONE,
383  10, { 0x05, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
384
385 /* 06 REGISTER AND IGNORE EXISTING KEY */
386 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
387                                                 CTL_CMD_FLAG_OK_ON_BOTH |
388                                                 CTL_CMD_FLAG_OK_ON_NO_MEDIA |
389                                                 CTL_CMD_FLAG_OK_ON_STANDBY |
390                                                 CTL_FLAG_DATA_OUT |
391                                                 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
392  CTL_LUN_PAT_NONE,
393  10, { 0x06, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
394
395 /* 07 REGISTER AND MOVE */
396 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
397
398 /* 08-1f */
399 };
400
401 /* 83 EXTENDED COPY */
402 const struct ctl_cmd_entry ctl_cmd_table_83[32] =
403 {
404 /* 00 EXTENDED COPY (LID1) */
405 {ctl_extended_copy_lid1, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_BOTH |
406                                             CTL_CMD_FLAG_OK_ON_NO_MEDIA |
407                                             CTL_FLAG_DATA_OUT,
408  CTL_LUN_PAT_NONE,
409  16, { 0x00, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
410
411 /* 01 EXTENDED COPY (LID4) */
412 {ctl_extended_copy_lid4, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_BOTH |
413                                             CTL_CMD_FLAG_OK_ON_NO_MEDIA |
414                                             CTL_FLAG_DATA_OUT,
415  CTL_LUN_PAT_NONE,
416  16, { 0x01, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
417
418 /* 02 */
419 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
420
421 /* 03 */
422 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
423
424 /* 04 */
425 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
426
427 /* 05 */
428 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
429
430 /* 06 */
431 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
432
433 /* 07 */
434 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
435
436 /* 08 */
437 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
438
439 /* 09 */
440 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
441
442 /* 0A */
443 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
444
445 /* 0B */
446 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
447
448 /* 0C */
449 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
450
451 /* 0D */
452 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
453
454 /* 0E */
455 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
456
457 /* 0F */
458 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
459
460 /* 10 POPULATE TOKEN */
461 {ctl_populate_token, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_DIRECT |
462                                         CTL_FLAG_DATA_OUT |
463                                         CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
464  CTL_LUN_PAT_NONE,
465  16, { 0x10, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff,
466        0xff, 0xff, 0xff, 0xff, 0, 0x07}},
467
468 /* 11 WRITE USING TOKEN */
469 {ctl_write_using_token, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_DIRECT |
470                                         CTL_FLAG_DATA_OUT,
471  CTL_LUN_PAT_NONE,
472  16, { 0x11, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff,
473        0xff, 0xff, 0xff, 0xff, 0, 0x07}},
474
475 /* 12 */
476 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
477
478 /* 13 */
479 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
480
481 /* 14 */
482 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
483
484 /* 15 */
485 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
486
487 /* 16 SET TAPE STREAM MIRRORING */
488 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
489
490 /* 17 */
491 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
492
493 /* 18 */
494 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
495
496 /* 19 */
497 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
498
499 /* 1A */
500 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
501
502 /* 1B */
503 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
504
505 /* 1C COPY OPERATION ABORT */
506 {ctl_copy_operation_abort, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_BOTH |
507                                               CTL_CMD_FLAG_OK_ON_NO_MEDIA |
508                                               CTL_FLAG_DATA_NONE,
509  CTL_LUN_PAT_NONE,
510  16, { 0x1c, 0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x07}},
511
512 /* 1D COPY OPERATION CLOSE */
513 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
514
515 /* 1e-1f */
516 };
517
518 /* 84 RECEIVE COPY STATUS */
519 const struct ctl_cmd_entry ctl_cmd_table_84[32] =
520 {
521 /* 00 RECEIVE COPY STATUS (LID1) */
522 {ctl_receive_copy_status_lid1, CTL_SERIDX_RD_CAP,
523  CTL_CMD_FLAG_OK_ON_BOTH |
524  CTL_CMD_FLAG_OK_ON_NO_MEDIA |
525  CTL_FLAG_DATA_IN |
526  CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
527  CTL_LUN_PAT_NONE,
528  16, {0x00, 0xff, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
529
530 /* 01 RECEIVE COPY DATA (LID1) */
531 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
532
533 /* 02 */
534 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
535
536 /* 03 RECEIVE COPY OPERATING PARAMETERS */
537 {ctl_receive_copy_operating_parameters, CTL_SERIDX_RD_CAP,
538  CTL_CMD_FLAG_OK_ON_BOTH |
539  CTL_CMD_FLAG_OK_ON_NO_MEDIA |
540  CTL_CMD_FLAG_OK_ON_STANDBY |
541  CTL_FLAG_DATA_IN |
542  CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
543  CTL_LUN_PAT_NONE,
544  16, {0x03, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
545
546 /* 04 RECEIVE COPY FAILURE DETAILS (LID1) */
547 {ctl_receive_copy_failure_details, CTL_SERIDX_RD_CAP,
548  CTL_CMD_FLAG_OK_ON_BOTH |
549  CTL_CMD_FLAG_OK_ON_NO_MEDIA |
550  CTL_FLAG_DATA_IN |
551  CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
552  CTL_LUN_PAT_NONE,
553  16, {0x04, 0xff, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
554
555 /* 05 RECEIVE COPY STATUS (LID4) */
556 {ctl_receive_copy_status_lid4, CTL_SERIDX_RD_CAP,
557  CTL_CMD_FLAG_OK_ON_BOTH |
558  CTL_CMD_FLAG_OK_ON_NO_MEDIA |
559  CTL_FLAG_DATA_IN |
560  CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
561  CTL_LUN_PAT_NONE,
562  16, {0x05, 0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
563
564 /* 06 RECEIVE COPY DATA (LID4)*/
565 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
566
567 /* 07 RECEIVE ROD TOKEN INFORMATION */
568 {ctl_receive_rod_token_information, CTL_SERIDX_RD_CAP,
569  CTL_CMD_FLAG_OK_ON_BOTH |
570  CTL_CMD_FLAG_OK_ON_NO_MEDIA |
571  CTL_FLAG_DATA_IN |
572  CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
573  CTL_LUN_PAT_NONE,
574  16, {0x07, 0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
575
576 /* 08 REPORT ALL ROD TOKENS */
577 {ctl_report_all_rod_tokens, CTL_SERIDX_RD_CAP,
578  CTL_CMD_FLAG_OK_ON_BOTH |
579  CTL_CMD_FLAG_OK_ON_NO_MEDIA |
580  CTL_FLAG_DATA_IN |
581  CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
582  CTL_LUN_PAT_NONE,
583  16, {0x08, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
584
585 /* 09 */
586 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
587
588 /* 0A */
589 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
590
591 /* 0B */
592 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
593
594 /* 0C */
595 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
596
597 /* 0D */
598 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
599
600 /* 0E */
601 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
602
603 /* 0F */
604 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
605
606 /* 10 */
607 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
608
609 /* 11 */
610 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
611
612 /* 12 */
613 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
614
615 /* 13 */
616 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
617
618 /* 14 */
619 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
620
621 /* 15 */
622 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
623
624 /* 16 REPORT TAPE STREAM MIRRORING */
625 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
626
627 /* 17-1f */
628 };
629
630 /* 9B READ BUFFER(16) */
631 const struct ctl_cmd_entry ctl_cmd_table_9b[32] =
632 {
633 /* 00 READ BUFFER(16) HDR DATA */
634 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
635
636 /* 01 READ BUFFER(16) VENDOR */
637 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
638
639 /* 02 READ BUFFER(16) DATA */
640 {ctl_read_buffer, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
641                                      CTL_CMD_FLAG_OK_ON_NO_MEDIA |
642                                      CTL_CMD_FLAG_OK_ON_STANDBY |
643                                      CTL_FLAG_DATA_IN,
644  CTL_LUN_PAT_NONE,
645  16, {0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
646       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
647
648 /* 03 READ BUFFER(16) DESCR */
649 {ctl_read_buffer, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
650                                      CTL_CMD_FLAG_OK_ON_NO_MEDIA |
651                                      CTL_CMD_FLAG_OK_ON_STANDBY |
652                                      CTL_FLAG_DATA_IN,
653  CTL_LUN_PAT_NONE,
654  16, {0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
655       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
656
657 /* 04 READ BUFFER(16) */
658 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
659
660 /* 05 READ BUFFER(16) */
661 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
662
663 /* 06 */
664 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
665
666 /* 07 */
667 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
668
669 /* 08 */
670 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
671
672 /* 09 */
673 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
674
675 /* 0A READ BUFFER(16) ECHO */
676 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
677
678 /* 0B READ BUFFER(16) ECHO DESCRIPTOR */
679 {ctl_read_buffer, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
680                                      CTL_CMD_FLAG_OK_ON_NO_MEDIA |
681                                      CTL_CMD_FLAG_OK_ON_STANDBY |
682                                      CTL_FLAG_DATA_IN,
683  CTL_LUN_PAT_NONE,
684  16, {0x0b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
685       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
686
687 /* 0C */
688 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
689
690 /* 0D */
691 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
692
693 /* 0E */
694 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
695
696 /* 0F */
697 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
698
699 /* 10 */
700 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
701
702 /* 11 */
703 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
704
705 /* 12 */
706 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
707
708 /* 13 */
709 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
710
711 /* 14 */
712 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
713
714 /* 15 */
715 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
716
717 /* 16 */
718 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
719
720 /* 17 */
721 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
722
723 /* 18 */
724 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
725
726 /* 19 */
727 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
728
729 /* 1A */
730 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
731
732 /* 1B */
733 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
734
735 /* 1C READ BUFFER(16) ERROR HISTORY */
736 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
737
738 /* 1d-1f */
739 };
740
741
742 /* 9E SERVICE ACTION IN(16) */
743 const struct ctl_cmd_entry ctl_cmd_table_9e[32] =
744 {
745 /* 00 */
746 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
747
748 /* 01 */
749 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
750
751 /* 02 */
752 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
753
754 /* 03 */
755 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
756
757 /* 04 */
758 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
759
760 /* 05 */
761 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
762
763 /* 06 */
764 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
765
766 /* 07 */
767 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
768
769 /* 08 */
770 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
771
772 /* 09 */
773 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
774
775 /* 0A */
776 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
777
778 /* 0B */
779 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
780
781 /* 0C */
782 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
783
784 /* 0D */
785 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
786
787 /* 0E */
788 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
789
790 /* 0F */
791 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
792
793 /* 10 READ CAPACITY(16) */
794 {ctl_read_capacity_16, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_DIRECT |
795                                           CTL_FLAG_DATA_IN |
796                                           CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
797  CTL_LUN_PAT_READCAP,
798  16, {0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
799
800 /* 11 */
801 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
802
803 /* 12 GET LBA STATUS */
804 {ctl_get_lba_status, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_DIRECT |
805                                       CTL_FLAG_DATA_IN |
806                                       CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
807  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
808  16, {0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
809     0xff, 0xff, 0xff, 0xff, 0, 0x07}},
810
811 /* 13-1f */
812 };
813
814 /* A3 MAINTENANCE IN */
815 const struct ctl_cmd_entry ctl_cmd_table_a3[32] =
816 {
817 /* 00 */
818 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
819
820 /* 01 */
821 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
822
823 /* 02 */
824 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
825
826 /* 03 */
827 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
828
829 /* 04 */
830 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
831
832 /* 05 */
833 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
834
835 /* 06 */
836 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
837
838 /* 07 */
839 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
840
841 /* 08 */
842 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
843
844 /* 09 */
845 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
846
847 /* 0A REPORT TARGET PORT GROUPS */
848 {ctl_report_tagret_port_groups, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_BOTH |
849                                                 CTL_CMD_FLAG_OK_ON_NO_MEDIA |
850                                                 CTL_CMD_FLAG_OK_ON_STANDBY |
851                                                 CTL_CMD_FLAG_OK_ON_UNAVAIL |
852                                                 CTL_FLAG_DATA_IN |
853                                                 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
854  CTL_LUN_PAT_NONE,
855  12, {0xea, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
856
857 /* 0B */
858 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
859
860 /* 0C REPORT SUPPORTED_OPCODES */
861 {ctl_report_supported_opcodes, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_BOTH |
862                                                 CTL_CMD_FLAG_OK_ON_NO_MEDIA |
863                                                 CTL_CMD_FLAG_OK_ON_STANDBY |
864                                                 CTL_CMD_FLAG_OK_ON_UNAVAIL |
865                                                 CTL_FLAG_DATA_IN |
866                                                 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
867  CTL_LUN_PAT_NONE,
868  12, {0x0c, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
869
870 /* 0D REPORT SUPPORTED_TASK MANAGEMENT FUNCTIONS */
871 {ctl_report_supported_tmf, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_BOTH |
872                                            CTL_CMD_FLAG_OK_ON_NO_MEDIA |
873                                            CTL_CMD_FLAG_OK_ON_STANDBY |
874                                            CTL_CMD_FLAG_OK_ON_UNAVAIL |
875                                            CTL_FLAG_DATA_IN |
876                                            CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
877  CTL_LUN_PAT_NONE,
878  12, {0x0d, 0x80, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
879
880 /* 0E */
881 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
882
883 /* 0F REPORT TIMESTAMP */
884 {ctl_report_timestamp, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_BOTH |
885                                         CTL_CMD_FLAG_OK_ON_NO_MEDIA |
886                                         CTL_CMD_FLAG_OK_ON_STANDBY |
887                                         CTL_CMD_FLAG_OK_ON_UNAVAIL |
888                                         CTL_FLAG_DATA_IN |
889                                         CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
890  CTL_LUN_PAT_NONE,
891  12, {0x0f, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
892
893 /* 10-1f */
894 };
895
896 const struct ctl_cmd_entry ctl_cmd_table[256] =
897 {
898 /* 00 TEST UNIT READY */
899 {ctl_tur, CTL_SERIDX_TUR, CTL_CMD_FLAG_OK_ON_BOTH |
900                           CTL_FLAG_DATA_NONE |
901                           CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
902  CTL_LUN_PAT_TUR, 6, {0, 0, 0, 0, 0x07}},
903
904 /* 01 REWIND */
905 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
906
907 /* 02 */
908 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
909
910 /* 03 REQUEST SENSE */
911 {ctl_request_sense, CTL_SERIDX_RQ_SNS, CTL_FLAG_DATA_IN |
912                                        CTL_CMD_FLAG_OK_ON_NO_LUN |
913                                        CTL_CMD_FLAG_OK_ON_BOTH |
914                                        CTL_CMD_FLAG_ALLOW_ON_RESV |
915                                        CTL_CMD_FLAG_NO_SENSE |
916                                        CTL_CMD_FLAG_OK_ON_NO_MEDIA |
917                                        CTL_CMD_FLAG_OK_ON_STANDBY |
918                                        CTL_CMD_FLAG_OK_ON_UNAVAIL |
919                                        CTL_CMD_FLAG_ALLOW_ON_PR_RESV |
920                                        CTL_CMD_FLAG_RUN_HERE,
921  CTL_LUN_PAT_NONE, 6, {0x01, 0, 0, 0xff, 0x07}},
922
923 /* 04 FORMAT UNIT */
924 {ctl_format, CTL_SERIDX_FORMAT, CTL_CMD_FLAG_OK_ON_DIRECT |
925                                 CTL_FLAG_DATA_OUT,
926  CTL_LUN_PAT_NONE, 6, {0xff, 0, 0, 0, 0x07}},
927
928 /* 05 READ BLOCK LIMITS */
929 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
930
931 /* 06 */
932 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
933
934 /* 07 REASSIGN BLOCKS */
935 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
936
937 /* 08 READ(6) */
938 {ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_DIRECT |
939                                   CTL_FLAG_DATA_IN |
940                                   CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
941  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE, 6, {0x1f, 0xff, 0xff, 0xff, 0x07}},
942
943 /* 09 */
944 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
945
946 /* 0A WRITE(6) */
947 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_DIRECT |
948                                    CTL_FLAG_DATA_OUT,
949  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE, 6, {0x1f, 0xff, 0xff, 0xff, 0x07}},
950
951 /* 0B SEEK(6) */
952 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
953
954 /* 0C */
955 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
956
957 /* 0D */
958 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
959
960 /* 0E */
961 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
962
963 /* 0F READ REVERSE(6) */
964 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
965
966 /* 10 WRITE FILEMARKS(6) */
967 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
968
969 /* 11 SPACE(6) */
970 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
971
972 /* 12 INQUIRY */
973 {ctl_inquiry, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_NO_LUN |
974                               CTL_CMD_FLAG_OK_ON_BOTH |
975                               CTL_CMD_FLAG_ALLOW_ON_RESV |
976                               CTL_CMD_FLAG_NO_SENSE |
977                               CTL_CMD_FLAG_OK_ON_NO_MEDIA |
978                               CTL_CMD_FLAG_OK_ON_STANDBY |
979                               CTL_CMD_FLAG_OK_ON_UNAVAIL |
980                               CTL_FLAG_DATA_IN |
981                               CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
982  CTL_LUN_PAT_NONE, 6, {0xe1, 0xff, 0xff, 0xff, 0x07}},
983
984 /* 13 */
985 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
986
987 /* 14 RECOVER BUFFERED DATA */
988 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
989
990 /* 15 MODE SELECT(6) */
991 {ctl_mode_select, CTL_SERIDX_MD_SEL, CTL_CMD_FLAG_OK_ON_BOTH |
992                                      CTL_CMD_FLAG_OK_ON_NO_MEDIA |
993                                      CTL_CMD_FLAG_OK_ON_STANDBY |
994                                      CTL_FLAG_DATA_OUT,
995  CTL_LUN_PAT_NONE, 6, {0x13, 0, 0, 0xff, 0x07}},
996
997 /* 16 RESERVE(6) */
998 {ctl_scsi_reserve, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
999                                     CTL_CMD_FLAG_OK_ON_BOTH |
1000                                     CTL_CMD_FLAG_OK_ON_NO_MEDIA |
1001                                     CTL_CMD_FLAG_OK_ON_STANDBY |
1002                                     CTL_FLAG_DATA_OUT,
1003  CTL_LUN_PAT_NONE, 6, {0, 0, 0, 0, 0x07}},
1004
1005 /* 17 RELEASE(6) */
1006 {ctl_scsi_release, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
1007                                    CTL_CMD_FLAG_OK_ON_BOTH |
1008                                    CTL_CMD_FLAG_OK_ON_NO_MEDIA |
1009                                    CTL_CMD_FLAG_OK_ON_STANDBY |
1010                                    CTL_FLAG_DATA_NONE,
1011  CTL_LUN_PAT_NONE, 6, {0, 0, 0, 0, 0x07}},
1012
1013 /* 18 COPY */
1014 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1015
1016 /* 19 ERASE(6) */
1017 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1018
1019 /* 1A MODE SENSE(6) */
1020 {ctl_mode_sense, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
1021                                     CTL_CMD_FLAG_OK_ON_NO_MEDIA |
1022                                     CTL_CMD_FLAG_OK_ON_STANDBY |
1023                                     CTL_FLAG_DATA_IN |
1024                                     CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1025  CTL_LUN_PAT_NONE, 6, {0x08, 0xff, 0xff, 0xff, 0x07}},
1026
1027 /* 1B START STOP UNIT */
1028 {ctl_start_stop, CTL_SERIDX_START, CTL_CMD_FLAG_OK_ON_DIRECT |
1029                                    CTL_CMD_FLAG_OK_ON_CDROM |
1030                                    CTL_CMD_FLAG_OK_ON_NO_MEDIA |
1031                                    CTL_FLAG_DATA_NONE |
1032                                    CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
1033  CTL_LUN_PAT_NONE, 6, {0x01, 0, 0x0f, 0xf7, 0x07}},
1034
1035 /* 1C RECEIVE DIAGNOSTIC RESULTS */
1036 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1037
1038 /* 1D SEND DIAGNOSTIC */
1039 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1040
1041 /* 1E PREVENT ALLOW MEDIUM REMOVAL */
1042 {ctl_prevent_allow, CTL_SERIDX_START, CTL_CMD_FLAG_OK_ON_DIRECT |
1043                                       CTL_CMD_FLAG_OK_ON_CDROM |
1044                                       CTL_CMD_FLAG_OK_ON_NO_MEDIA |
1045                                       CTL_FLAG_DATA_NONE,
1046  CTL_LUN_PAT_NONE, 6, {0x01, 0, 0, 0x03, 0x07}},
1047
1048 /* 1F */
1049 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1050
1051 /* 20 */
1052 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1053
1054 /* 21 */
1055 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1056
1057 /* 22 */
1058 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1059
1060 /* 23 */
1061 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1062
1063 /* 24 SET WINDOW */
1064 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1065
1066 /* 25 READ CAPACITY(10) */
1067 {ctl_read_capacity, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_DIRECT |
1068                                        CTL_CMD_FLAG_OK_ON_CDROM |
1069                                        CTL_FLAG_DATA_IN |
1070                                        CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
1071  CTL_LUN_PAT_READCAP, 10, {0, 0, 0, 0, 0, 0, 0, 0, 0x07}},
1072
1073 /* 26 */
1074 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1075
1076 /* 27 */
1077 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1078
1079 /* 28 READ(10) */
1080 {ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_DIRECT |
1081                                   CTL_CMD_FLAG_OK_ON_CDROM |
1082                                   CTL_FLAG_DATA_IN |
1083                                   CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1084  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
1085  10, {0x1a, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
1086
1087 /* 29 READ GENERATION */
1088 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1089
1090 /* 2A WRITE(10) */
1091 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_DIRECT| CTL_FLAG_DATA_OUT,
1092  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1093  10, {0x1a, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
1094
1095 /* 2B SEEK(10) */
1096 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1097
1098 /* 2C ERASE(10) */
1099 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1100
1101 /* 2D READ UPDATED BLOCK */
1102 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1103
1104 /* 2E WRITE AND VERIFY(10) */
1105 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_DIRECT| CTL_FLAG_DATA_OUT,
1106  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1107  10, {0x12, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
1108
1109 /* 2F VERIFY(10) */
1110 {ctl_verify, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_DIRECT |
1111                               CTL_FLAG_DATA_OUT |
1112                               CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1113  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
1114  10, {0x16, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
1115
1116 /* 30 SEARCH DATA HIGH(10) */
1117 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1118
1119 /* 31 SEARCH DATA EQUAL(10) */
1120 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1121
1122 /* 32 SEARCH DATA LOW(10) */
1123 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1124
1125 /* 33 SET LIMITS(10) */
1126 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1127
1128 /* 34 PRE-FETCH(10) */
1129 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1130
1131 /* 35 SYNCHRONIZE CACHE(10) */
1132 {ctl_sync_cache, CTL_SERIDX_SYNC, CTL_CMD_FLAG_OK_ON_DIRECT |
1133                                   CTL_FLAG_DATA_NONE,
1134  CTL_LUN_PAT_WRITE,
1135  10, {0x06, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
1136
1137 /* 36 LOCK UNLOCK CACHE(10) */
1138 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1139
1140 /* 37 READ DEFECT DATA(10) */
1141 {ctl_read_defect, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_DIRECT |
1142                                      CTL_FLAG_DATA_IN |
1143                                      CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1144  CTL_LUN_PAT_NONE,
1145  10, {0, 0x1f, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
1146
1147 /* 38 MEDIUM SCAN */
1148 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1149
1150 /* 39 COMPARE */
1151 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1152
1153 /* 3A COPY AND VERIFY */
1154 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1155
1156 /* 3B WRITE BUFFER */
1157 {__DECONST(ctl_opfunc *, ctl_cmd_table_3b), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1158  CTL_LUN_PAT_NONE},
1159
1160 /* 3C READ BUFFER */
1161 {__DECONST(ctl_opfunc *, ctl_cmd_table_3c), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1162  CTL_LUN_PAT_NONE},
1163
1164 /* 3D UPDATE BLOCK */
1165 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1166
1167 /* 3E READ LONG */
1168 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1169
1170 /* 3F WRITE LONG */
1171 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1172
1173 /* 40 CHANGE DEFINITION */
1174 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1175
1176 /* 41 WRITE SAME(10) */
1177 {ctl_write_same, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_DIRECT |
1178                                    CTL_FLAG_DATA_OUT,
1179  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1180  10, {0x1a, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
1181
1182 /* 42 READ SUB-CHANNEL / UNMAP */
1183 {ctl_unmap, CTL_SERIDX_UNMAP, CTL_CMD_FLAG_OK_ON_DIRECT | CTL_FLAG_DATA_OUT,
1184  CTL_LUN_PAT_WRITE,
1185  10, {1, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}},
1186
1187 /* 43 READ TOC/PMA/ATIP */
1188 {ctl_read_toc, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_CDROM |
1189                                   CTL_CMD_FLAG_ALLOW_ON_PR_WRESV |
1190                                   CTL_FLAG_DATA_IN,
1191  CTL_LUN_PAT_NONE,
1192  10, {0x02, 0x01, 0, 0, 0, 0xff, 0xff, 0xff, 0x07}},
1193
1194 /* 44 REPORT DENSITY SUPPORT */
1195 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1196
1197 /* 45 PLAY AUDIO(10) */
1198 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1199
1200 /* 46 GET CONFIGURATION */
1201 {ctl_get_config, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_CDROM |
1202                                  CTL_CMD_FLAG_OK_ON_NO_MEDIA |
1203                                  CTL_CMD_FLAG_ALLOW_ON_PR_RESV |
1204                                  CTL_FLAG_DATA_IN,
1205  CTL_LUN_PAT_NONE,
1206  10, {0x03, 0xff, 0xff, 0, 0, 0, 0xff, 0xff, 0x07}},
1207
1208 /* 47 PLAY AUDIO MSF */
1209 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1210
1211 /* 48 PLAY AUDIO TRACK INDEX */
1212 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1213
1214 /* 49 PLAY TRACK RELATIVE(10) */
1215 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1216
1217 /* 4A GET EVENT STATUS NOTIFICATION */
1218 {ctl_get_event_status, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_CDROM |
1219                                           CTL_CMD_FLAG_OK_ON_NO_MEDIA |
1220                                           CTL_CMD_FLAG_ALLOW_ON_PR_RESV |
1221                                           CTL_FLAG_DATA_IN,
1222  CTL_LUN_PAT_NONE,
1223  10, {0x02, 0x01, 0, 0, 0, 0xff, 0xff, 0xff, 0x07}},
1224
1225 /* 4B PAUSE/RESUME */
1226 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1227
1228 /* 4C LOG SELECT */
1229 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1230
1231 /* 4D LOG SENSE */
1232 {ctl_log_sense, CTL_SERIDX_LOG_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
1233                                     CTL_CMD_FLAG_OK_ON_NO_MEDIA |
1234                                     CTL_CMD_FLAG_OK_ON_STANDBY |
1235                                     CTL_FLAG_DATA_IN |
1236                                     CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
1237  CTL_LUN_PAT_NONE, 10, {0, 0xff, 0xff, 0, 0xff, 0xff, 0xff, 0xff, 0x07} },
1238
1239 /* 4E STOP PLAY/SCAN */
1240 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1241
1242 /* 4F */
1243 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1244
1245 /* 50 XDWRITE(10) */
1246 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1247
1248 /* 51 XPWRITE(10) */
1249 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1250
1251 /* 52 XDREAD(10) */
1252 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1253
1254 /* 53 RESERVE TRACK */
1255 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1256
1257 /* 54 SEND OPC INFORMATION */
1258 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1259
1260 /* 55 MODE SELECT(10) */
1261 {ctl_mode_select, CTL_SERIDX_MD_SEL, CTL_CMD_FLAG_OK_ON_BOTH |
1262                                      CTL_CMD_FLAG_OK_ON_NO_MEDIA |
1263                                      CTL_CMD_FLAG_OK_ON_STANDBY |
1264                                      CTL_FLAG_DATA_OUT,
1265  CTL_LUN_PAT_NONE, 10, {0x13, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07} },
1266
1267 /* 56 RESERVE(10) */
1268 {ctl_scsi_reserve, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
1269                                     CTL_CMD_FLAG_OK_ON_BOTH |
1270                                     CTL_CMD_FLAG_OK_ON_NO_MEDIA |
1271                                     CTL_CMD_FLAG_OK_ON_STANDBY |
1272                                     CTL_FLAG_DATA_OUT,
1273  CTL_LUN_PAT_NONE, 10, {0, 0, 0, 0, 0, 0, 0, 0, 0x07} },
1274
1275 /* 57 RELEASE(10) */
1276 {ctl_scsi_release, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
1277                                    CTL_CMD_FLAG_OK_ON_BOTH |
1278                                    CTL_CMD_FLAG_OK_ON_NO_MEDIA |
1279                                    CTL_CMD_FLAG_OK_ON_STANDBY |
1280                                    CTL_FLAG_DATA_OUT,
1281  CTL_LUN_PAT_NONE, 10, {0, 0, 0, 0, 0, 0, 0, 0, 0x07}},
1282
1283 /* 58 REPAIR TRACK */
1284 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1285
1286 /* 59 READ MASTER CUE */
1287 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1288
1289 /* 5A MODE SENSE(10) */
1290 {ctl_mode_sense, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
1291                                     CTL_CMD_FLAG_OK_ON_NO_MEDIA |
1292                                     CTL_CMD_FLAG_OK_ON_STANDBY |
1293                                     CTL_FLAG_DATA_IN |
1294                                     CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1295  CTL_LUN_PAT_NONE, 10, {0x18, 0xff, 0xff, 0, 0, 0, 0xff, 0xff, 0x07} },
1296
1297 /* 5B CLOSE TRACK/SESSION */
1298 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1299
1300 /* 5C READ BUFFER CAPACITY */
1301 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1302
1303 /* 5D SEND CUE SHEET */
1304 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1305
1306 /* 5E PERSISTENT RESERVE IN */
1307 {__DECONST(ctl_opfunc *, ctl_cmd_table_5e), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1308  CTL_LUN_PAT_NONE},
1309
1310 /* 5F PERSISTENT RESERVE OUT */
1311 {__DECONST(ctl_opfunc *, ctl_cmd_table_5f), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1312  CTL_LUN_PAT_NONE},
1313
1314 /* 60 */
1315 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1316
1317 /* 61 */
1318 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1319
1320 /* 62 */
1321 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1322
1323 /* 63 */
1324 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1325
1326 /* 64 */
1327 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1328
1329 /* 65 */
1330 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1331
1332 /* 66 */
1333 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1334
1335 /* 67 */
1336 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1337
1338 /* 68 */
1339 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1340
1341 /* 69 */
1342 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1343
1344 /* 6A */
1345 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1346
1347 /* 6B */
1348 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1349
1350 /* 6C */
1351 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1352
1353 /* 6D */
1354 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1355
1356 /* 6E */
1357 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1358
1359 /* 6F */
1360 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1361
1362 /* 70 */
1363 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1364
1365 /* 71 */
1366 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1367
1368 /* 72 */
1369 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1370
1371 /* 73 */
1372 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1373
1374 /* 74 */
1375 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1376
1377 /* 75 */
1378 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1379
1380 /* 76 */
1381 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1382
1383 /* 77 */
1384 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1385
1386 /* 78 */
1387 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1388
1389 /* 79 */
1390 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1391
1392 /* 7A */
1393 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1394
1395 /* 7B */
1396 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1397
1398 /* 7C */
1399 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1400
1401 /* 7D */
1402 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1403
1404 /* 7E */
1405 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1406
1407 /* 7F */
1408 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1409
1410 /* 80 XDWRITE EXTENDED(16) */
1411 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1412
1413 /* 81 REBUILD(16) */
1414 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1415
1416 /* 82 REGENERATE(16) */
1417 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1418
1419 /* 83 EXTENDED COPY */
1420 {__DECONST(ctl_opfunc *, ctl_cmd_table_83), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1421  CTL_LUN_PAT_NONE},
1422
1423 /* 84 RECEIVE COPY RESULTS */
1424 {__DECONST(ctl_opfunc *, ctl_cmd_table_84), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1425  CTL_LUN_PAT_NONE},
1426
1427 /* 85 */
1428 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1429
1430 /* 86 ACCESS CONTROL IN */
1431 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1432
1433 /* 87 ACCESS CONTROL OUT */
1434 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1435
1436 /* 88 READ(16) */
1437 {ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_DIRECT | CTL_FLAG_DATA_IN |
1438                                   CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1439  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
1440  16, {0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1441       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1442
1443 /* 89 COMPARE AND WRITE */
1444 {ctl_cnw, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_DIRECT| CTL_FLAG_DATA_OUT,
1445  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1446  16, {0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1447       0xff, 0xff, 0, 0, 0, 0xff, 0, 0x07}},
1448
1449 /* 8A WRITE(16) */
1450 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_DIRECT| CTL_FLAG_DATA_OUT,
1451  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1452  16, {0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1453       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1454
1455 /* 8B */
1456 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1457
1458 /* 8C READ ATTRIBUTE */
1459 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1460
1461 /* 8D WRITE ATTRIBUTE */
1462 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1463
1464 /* 8E WRITE AND VERIFY(16) */
1465 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_DIRECT| CTL_FLAG_DATA_OUT,
1466  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1467  16, {0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1468       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1469
1470 /* 8F VERIFY(16) */
1471 {ctl_verify, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_DIRECT |
1472                               CTL_FLAG_DATA_OUT |
1473                               CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1474  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
1475  16, {0x16, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1476       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1477
1478 /* 90 PRE-FETCH(16) */
1479 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1480
1481 /* 91 SYNCHRONIZE CACHE(16) */
1482 {ctl_sync_cache, CTL_SERIDX_SYNC, CTL_CMD_FLAG_OK_ON_DIRECT |
1483                                   CTL_FLAG_DATA_NONE,
1484  CTL_LUN_PAT_WRITE,
1485  16, {0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1486       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1487
1488 /* 92 LOCK UNLOCK CACHE(16) */
1489 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1490
1491 /* 93 WRITE SAME(16) */
1492 {ctl_write_same, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_DIRECT |
1493                                    CTL_FLAG_DATA_OUT,
1494  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1495  16, {0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1496       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1497
1498 /* 94 */
1499 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1500
1501 /* 95 */
1502 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1503
1504 /* 96 */
1505 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1506
1507 /* 97 */
1508 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1509
1510 /* 98 */
1511 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1512
1513 /* 99 */
1514 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1515
1516 /* 9A */
1517 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1518
1519 /* 9B READ BUFFER(16) */
1520 {__DECONST(ctl_opfunc *, ctl_cmd_table_9b), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1521  CTL_LUN_PAT_NONE},
1522
1523 /* 9C WRITE ATOMIC (16) */
1524 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_DIRECT| CTL_FLAG_DATA_OUT,
1525  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1526  16, {0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1527       0xff, 0xff, 0, 0, 0xff, 0xff, 0, 0x07}},
1528
1529 /* 9D */
1530 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1531
1532 /* 9E SERVICE ACTION IN(16) */
1533 {__DECONST(ctl_opfunc *, ctl_cmd_table_9e), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1534  CTL_LUN_PAT_NONE},
1535
1536 /* 9F SERVICE ACTION OUT(16) */
1537 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1538
1539 /* A0 REPORT LUNS */
1540 {ctl_report_luns, CTL_SERIDX_INQ, CTL_FLAG_DATA_IN |
1541                                   CTL_CMD_FLAG_OK_ON_NO_LUN |
1542                                   CTL_CMD_FLAG_OK_ON_BOTH |
1543                                   CTL_CMD_FLAG_ALLOW_ON_RESV |
1544                                   CTL_CMD_FLAG_NO_SENSE |
1545                                   CTL_CMD_FLAG_OK_ON_NO_MEDIA |
1546                                   CTL_CMD_FLAG_OK_ON_STANDBY |
1547                                   CTL_CMD_FLAG_OK_ON_UNAVAIL |
1548                                   CTL_CMD_FLAG_ALLOW_ON_PR_RESV |
1549                                   CTL_CMD_FLAG_RUN_HERE,
1550  CTL_LUN_PAT_NONE,
1551  12, {0, 0xff, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1552
1553 /* A1 BLANK */
1554 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1555
1556 /* A2 SEND EVENT */
1557 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1558
1559 /* A3 MAINTENANCE IN */
1560 {__DECONST(ctl_opfunc *, ctl_cmd_table_a3), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5,
1561  CTL_LUN_PAT_NONE},
1562
1563 /* A4 MAINTENANCE OUT */
1564 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1565
1566 /* A5 MOVE MEDIUM */
1567 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1568
1569 /* A6 EXCHANGE MEDIUM */
1570 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1571
1572 /* A7 MOVE MEDIUM ATTACHED */
1573 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1574
1575 /* A8 READ(12) */
1576 {ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_DIRECT |
1577                                   CTL_CMD_FLAG_OK_ON_CDROM |
1578                                   CTL_FLAG_DATA_IN |
1579                                   CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1580  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
1581  12, {0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1582
1583 /* A9 PLAY TRACK RELATIVE(12) */
1584 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1585
1586 /* AA WRITE(12) */
1587 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_DIRECT| CTL_FLAG_DATA_OUT,
1588  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1589  12, {0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1590
1591 /* AB SERVICE ACTION IN(12) */
1592 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1593
1594 /* AC ERASE(12) */
1595 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1596
1597 /* AD READ DVD STRUCTURE */
1598 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1599
1600 /* AE WRITE AND VERIFY(12) */
1601 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_DIRECT| CTL_FLAG_DATA_OUT,
1602  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE,
1603  12, {0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1604
1605 /* AF VERIFY(12) */
1606 {ctl_verify, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_DIRECT |
1607                               CTL_FLAG_DATA_OUT |
1608                               CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1609  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE,
1610  12, {0x16, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1611
1612 /* B0 SEARCH DATA HIGH(12) */
1613 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1614
1615 /* B1 SEARCH DATA EQUAL(12) */
1616 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1617
1618 /* B2 SEARCH DATA LOW(12) */
1619 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1620
1621 /* B3 SET LIMITS(12) */
1622 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1623
1624 /* B4 READ ELEMENT STATUS ATTACHED */
1625 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1626
1627 /* B5 REQUEST VOLUME ELEMENT ADDRESS */
1628 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1629
1630 /* B6 SEND VOLUME TAG */
1631 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1632
1633 /* B7 READ DEFECT DATA(12) */
1634 {ctl_read_defect, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_DIRECT |
1635                                      CTL_FLAG_DATA_IN |
1636                                      CTL_CMD_FLAG_ALLOW_ON_PR_WRESV,
1637  CTL_LUN_PAT_NONE,
1638  12, {0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
1639
1640 /* B8 READ ELEMENT STATUS */
1641 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1642
1643 /* B9 READ CD MSF */
1644 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1645
1646 /* BA REDUNDANCY GROUP IN */
1647 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1648
1649 /* BB REDUNDANCY GROUP OUT */
1650 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1651
1652 /* BC SPARE IN */
1653 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1654
1655 /* BD SPARE OUT / MECHANISM STATUS */
1656 {ctl_mechanism_status, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_CDROM |
1657                                           CTL_CMD_FLAG_OK_ON_NO_MEDIA |
1658                                           CTL_CMD_FLAG_ALLOW_ON_PR_RESV |
1659                                           CTL_FLAG_DATA_IN,
1660  CTL_LUN_PAT_NONE,
1661  12, {0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0, 0x07}},
1662
1663 /* BE VOLUME SET IN */
1664 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1665
1666 /* BF VOLUME SET OUT */
1667 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1668
1669 /* C0 */
1670 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1671
1672 /* C1 */
1673 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1674
1675 /* C2 */
1676 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1677
1678 /* C3 */
1679 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1680
1681 /* C4 */
1682 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1683
1684 /* C5 */
1685 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1686
1687 /* C6 */
1688 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1689
1690 /* C7 */
1691 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1692
1693 /* C8 */
1694 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1695
1696 /* C9 */
1697 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1698
1699 /* CA */
1700 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1701
1702 /* CB */
1703 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1704
1705 /* CC */
1706 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1707
1708 /* CD */
1709 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1710
1711 /* CE */
1712 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1713
1714 /* CF */
1715 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1716
1717 /* D0 */
1718 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1719
1720 /* D1 */
1721 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1722
1723 /* D2 */
1724 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1725
1726 /* D3 */
1727 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1728
1729 /* D4 */
1730 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1731
1732 /* D5 */
1733 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1734
1735 /* D6 */
1736 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1737
1738 /* D7 */
1739 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1740
1741 /* D8 */
1742 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1743
1744 /* D9 */
1745 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1746
1747 /* DA */
1748 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1749
1750 /* DB */
1751 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1752
1753 /* DC */
1754 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1755
1756 /* DD */
1757 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1758
1759 /* DE */
1760 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1761
1762 /* DF */
1763 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1764
1765 /* E0 */
1766 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1767
1768 /* E1 */
1769 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1770
1771 /* E2 */
1772 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1773
1774 /* E3 */
1775 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1776
1777 /* E4 */
1778 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1779
1780 /* E5 */
1781 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1782
1783 /* E6 */
1784 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1785
1786 /* E7 */
1787 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1788
1789 /* E8 */
1790 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1791
1792 /* E9 */
1793 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1794
1795 /* EA */
1796 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1797
1798 /* EB */
1799 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1800
1801 /* EC */
1802 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1803
1804 /* ED */
1805 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1806
1807 /* EE */
1808 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1809
1810 /* EF */
1811 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1812
1813 /* F0 */
1814 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1815
1816 /* F1 */
1817 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1818
1819 /* F2 */
1820 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1821
1822 /* F3 */
1823 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1824
1825 /* F4 */
1826 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1827
1828 /* F5 */
1829 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1830
1831 /* F6 */
1832 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1833
1834 /* F7 */
1835 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1836
1837 /* F8 */
1838 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1839
1840 /* F9 */
1841 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1842
1843 /* FA */
1844 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1845
1846 /* FB */
1847 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1848
1849 /* FC */
1850 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1851
1852 /* FD */
1853 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1854
1855 /* FE */
1856 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1857
1858 /* FF */
1859 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}
1860
1861 };