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