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