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