xref: /freebsd/sys/cam/ctl/ctl_cmd_table.c (revision 9a14aa017b21c292740c00ee098195cd46642730)
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 
48 #include <cam/scsi/scsi_all.h>
49 #include <cam/scsi/scsi_da.h>
50 #include <cam/ctl/ctl_io.h>
51 #include <cam/ctl/ctl.h>
52 #include <cam/ctl/ctl_frontend.h>
53 #include <cam/ctl/ctl_backend.h>
54 #include <cam/ctl/ctl_frontend_internal.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 this
61  * table.
62  */
63 struct ctl_cmd_entry ctl_cmd_table[] =
64 {
65 /* 00 TEST UNIT READY */
66 {ctl_tur, CTL_SERIDX_TUR, CTL_CMD_FLAG_OK_ON_BOTH |
67 			  CTL_FLAG_DATA_NONE |
68 			  CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
69  CTL_LUN_PAT_TUR},
70 
71 /* 01 REWIND */
72 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
73 
74 /* 02 */
75 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
76 
77 /* 03 REQUEST SENSE */
78 {ctl_request_sense, CTL_SERIDX_RQ_SNS, CTL_FLAG_DATA_IN |
79 				       CTL_CMD_FLAG_OK_ON_ALL_LUNS |
80 				       CTL_CMD_FLAG_ALLOW_ON_RESV |
81 				       CTL_CMD_FLAG_NO_SENSE |
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_CMD_FLAG_ALLOW_ON_PR_RESV,
87  CTL_LUN_PAT_NONE},
88 
89 /* 04 FORMAT UNIT */
90 {ctl_format, CTL_SERIDX_FORMAT, CTL_CMD_FLAG_OK_ON_SLUN |
91 				CTL_CMD_FLAG_OK_ON_INOPERABLE |
92 				CTL_FLAG_DATA_OUT,
93  CTL_LUN_PAT_NONE},
94 
95 /* 05 READ BLOCK LIMITS */
96 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
97 
98 /* 06 */
99 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
100 
101 /* 07 REASSIGN BLOCKS */
102 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
103 
104 /* 08 READ(6) */
105 {ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN |
106 				  CTL_FLAG_DATA_IN |
107 				  CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
108  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE},
109 
110 /* 09 */
111 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
112 
113 /* 0A WRITE(6) */
114 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN |
115 				   CTL_FLAG_DATA_OUT,
116  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE},
117 
118 /* 0B SEEK(6) */
119 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
120 
121 /* 0C */
122 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
123 
124 /* 0D */
125 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
126 
127 /* 0E */
128 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
129 
130 /* 0F READ REVERSE(6) */
131 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
132 
133 /* 10 WRITE FILEMARKS(6) */
134 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
135 
136 /* 11 SPACE(6) */
137 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
138 
139 /* 12 INQUIRY */
140 {ctl_inquiry, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_ALL_LUNS |
141 			      CTL_CMD_FLAG_ALLOW_ON_RESV |
142 			      CTL_CMD_FLAG_NO_SENSE |
143 			      CTL_CMD_FLAG_OK_ON_STOPPED |
144 			      CTL_CMD_FLAG_OK_ON_INOPERABLE |
145 			      CTL_CMD_FLAG_OK_ON_OFFLINE |
146 			      CTL_CMD_FLAG_OK_ON_SECONDARY |
147 			      CTL_FLAG_DATA_IN |
148 			      CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
149  CTL_LUN_PAT_NONE},
150 
151 /* 13 */
152 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
153 
154 /* 14 RECOVER BUFFERED DATA */
155 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
156 
157 /* 15 MODE SELECT(6) */
158 {ctl_mode_select, CTL_SERIDX_MD_SEL, CTL_CMD_FLAG_OK_ON_BOTH |
159 				     CTL_CMD_FLAG_OK_ON_STOPPED |
160 				     CTL_CMD_FLAG_OK_ON_INOPERABLE |
161 				     CTL_CMD_FLAG_OK_ON_SECONDARY |
162 				     CTL_FLAG_DATA_OUT,
163  CTL_LUN_PAT_NONE},
164 
165 /* 16 RESERVE(6) */
166 {ctl_scsi_reserve, CTL_SERIDX_RESV, CTL_CMD_FLAG_ALLOW_ON_RESV |
167 				    CTL_CMD_FLAG_OK_ON_BOTH |
168 				    CTL_CMD_FLAG_OK_ON_STOPPED |
169 				    CTL_CMD_FLAG_OK_ON_INOPERABLE |
170 				    CTL_CMD_FLAG_OK_ON_SECONDARY |
171 				    CTL_FLAG_DATA_OUT,
172  CTL_LUN_PAT_NONE},
173 
174 /* 17 RELEASE(6) */
175 {ctl_scsi_release, CTL_SERIDX_REL, CTL_CMD_FLAG_ALLOW_ON_RESV |
176 				   CTL_CMD_FLAG_OK_ON_BOTH |
177 				   CTL_CMD_FLAG_OK_ON_STOPPED |
178 				   CTL_CMD_FLAG_OK_ON_INOPERABLE |
179 				   CTL_CMD_FLAG_OK_ON_SECONDARY |
180 				   CTL_FLAG_DATA_NONE,
181  CTL_LUN_PAT_NONE},
182 
183 /* 18 COPY */
184 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
185 
186 /* 19 ERASE(6) */
187 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
188 
189 /* 1A MODE SENSE(6) */
190 {ctl_mode_sense, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
191 				    CTL_CMD_FLAG_OK_ON_STOPPED |
192 				    CTL_CMD_FLAG_OK_ON_INOPERABLE |
193 				    CTL_CMD_FLAG_OK_ON_SECONDARY |
194 				    CTL_FLAG_DATA_IN,
195  CTL_LUN_PAT_NONE},
196 
197 /* 1B START STOP UNIT */
198 {ctl_start_stop, CTL_SERIDX_START, CTL_CMD_FLAG_OK_ON_SLUN |
199 				   CTL_CMD_FLAG_OK_ON_STOPPED |
200 				   CTL_CMD_FLAG_OK_ON_INOPERABLE |
201 				   CTL_CMD_FLAG_OK_ON_OFFLINE |
202 				   CTL_FLAG_DATA_NONE |
203 				   CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
204  CTL_LUN_PAT_NONE},
205 
206 /* 1C RECEIVE DIAGNOSTIC RESULTS */
207 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
208 
209 /* 1D SEND DIAGNOSTIC */
210 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
211 
212 /* 1E PREVENT ALLOW MEDIUM REMOVAL */
213 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
214 
215 /* 1F */
216 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
217 
218 /* 20 */
219 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
220 
221 /* 21 */
222 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
223 
224 /* 22 */
225 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
226 
227 /* 23 */
228 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
229 
230 /* 24 SET WINDOW */
231 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
232 
233 /* 25 READ CAPACITY(10) */
234 {ctl_read_capacity, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_SLUN|
235 				       CTL_CMD_FLAG_OK_ON_STOPPED |
236 				       CTL_CMD_FLAG_OK_ON_INOPERABLE |
237 				       CTL_CMD_FLAG_OK_ON_SECONDARY |
238 				       CTL_FLAG_DATA_IN |
239 				       CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
240  CTL_LUN_PAT_READCAP},
241 
242 /* 26 */
243 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
244 
245 /* 27 */
246 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
247 
248 /* 28 READ(10) */
249 {ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN |
250 				  CTL_FLAG_DATA_IN |
251 				  CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
252  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE},
253 
254 /* 29 READ GENERATION */
255 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
256 
257 /* 2A WRITE(10) */
258 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
259  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE},
260 
261 /* 2B SEEK(10) */
262 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
263 
264 /* 2C ERASE(10) */
265 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
266 
267 /* 2D READ UPDATED BLOCK */
268 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
269 
270 /* 2E WRITE AND VERIFY(10) */
271 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
272  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE},
273 
274 /* 2F VERIFY(10) */
275 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
276 
277 /* 30 SEARCH DATA HIGH(10) */
278 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
279 
280 /* 31 SEARCH DATA EQUAL(10) */
281 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
282 
283 /* 32 SEARCH DATA LOW(10) */
284 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
285 
286 /* 33 SET LIMITS(10) */
287 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
288 
289 /* 34 PRE-FETCH(10) */
290 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
291 
292 /* 35 SYNCHRONIZE CACHE(10) */
293 {ctl_sync_cache, CTL_SERIDX_START, CTL_CMD_FLAG_OK_ON_SLUN |
294 				   CTL_FLAG_DATA_NONE,
295  CTL_LUN_PAT_NONE},
296 
297 /* 36 LOCK UNLOCK CACHE(10) */
298 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
299 
300 /* 37 READ DEFECT DATA(10) */
301 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
302 
303 /* 38 MEDIUM SCAN */
304 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
305 
306 /* 39 COMPARE */
307 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
308 
309 /* 3A COPY AND VERIFY */
310 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
311 
312 /* 3B WRITE BUFFER */
313 {ctl_write_buffer, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_PROC |
314 				     CTL_FLAG_DATA_OUT,
315  CTL_LUN_PAT_NONE},
316 
317 /* 3C READ BUFFER */
318 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
319 
320 /* 3D UPDATE BLOCK */
321 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
322 
323 /* 3E READ LONG */
324 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
325 
326 /* 3F WRITE LONG */
327 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
328 
329 /* 40 CHANGE DEFINITION */
330 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
331 
332 /* 41 WRITE SAME(10) */
333 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
334 
335 /* 42 READ SUB-CHANNEL */
336 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
337 
338 /* 43 READ TOC/PMA/ATIP */
339 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
340 
341 /* 44 REPORT DENSITY SUPPORT */
342 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
343 
344 /* 45 PLAY AUDIO(10) */
345 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
346 
347 /* 46 GET CONFIGURATION */
348 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
349 
350 /* 47 PLAY AUDIO MSF */
351 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
352 
353 /* 48 PLAY AUDIO TRACK INDEX */
354 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
355 
356 /* 49 PLAY TRACK RELATIVE(10) */
357 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
358 
359 /* 4A GET EVENT STATUS NOTIFICATION */
360 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
361 
362 /* 4B PAUSE/RESUME */
363 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
364 
365 /* 4C LOG SELECT */
366 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
367 
368 /* 4D LOG SENSE */
369 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
370 
371 /* 4E STOP PLAY/SCAN */
372 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
373 
374 /* 4F */
375 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
376 
377 /* 50 XDWRITE(10) */
378 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
379 
380 /* 51 XPWRITE(10) */
381 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
382 
383 /* 52 XDREAD(10) */
384 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
385 
386 /* 53 RESERVE TRACK */
387 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
388 
389 /* 54 SEND OPC INFORMATION */
390 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
391 
392 /* 55 MODE SELECT(10) */
393 {ctl_mode_select, CTL_SERIDX_MD_SEL, CTL_CMD_FLAG_OK_ON_BOTH |
394 				     CTL_CMD_FLAG_OK_ON_STOPPED |
395 				     CTL_CMD_FLAG_OK_ON_INOPERABLE |
396 				     CTL_CMD_FLAG_OK_ON_SECONDARY |
397 				     CTL_FLAG_DATA_OUT,
398  CTL_LUN_PAT_NONE},
399 
400 /* 56 RESERVE(10) */
401 {ctl_scsi_reserve, CTL_SERIDX_RESV, CTL_CMD_FLAG_ALLOW_ON_RESV |
402 				    CTL_CMD_FLAG_OK_ON_BOTH |
403 				    CTL_CMD_FLAG_OK_ON_STOPPED |
404 				    CTL_CMD_FLAG_OK_ON_INOPERABLE |
405 				    CTL_CMD_FLAG_OK_ON_SECONDARY |
406 				    CTL_FLAG_DATA_OUT,
407  CTL_LUN_PAT_NONE},
408 
409 /* 57 RELEASE(10) */
410 {ctl_scsi_release, CTL_SERIDX_REL, CTL_CMD_FLAG_ALLOW_ON_RESV |
411 				   CTL_CMD_FLAG_OK_ON_BOTH |
412 				   CTL_CMD_FLAG_OK_ON_STOPPED |
413 				   CTL_CMD_FLAG_OK_ON_INOPERABLE |
414 				   CTL_CMD_FLAG_OK_ON_SECONDARY |
415 				   CTL_FLAG_DATA_OUT,
416  CTL_LUN_PAT_NONE},
417 
418 /* 58 REPAIR TRACK */
419 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
420 
421 /* 59 READ MASTER CUE */
422 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
423 
424 /* 5A MODE SENSE(10) */
425 {ctl_mode_sense, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
426 				    CTL_CMD_FLAG_OK_ON_STOPPED |
427 				    CTL_CMD_FLAG_OK_ON_INOPERABLE |
428 				    CTL_CMD_FLAG_OK_ON_SECONDARY |
429 				    CTL_FLAG_DATA_IN,
430  CTL_LUN_PAT_NONE},
431 
432 /* 5B CLOSE TRACK/SESSION */
433 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
434 
435 /* 5C READ BUFFER CAPACITY */
436 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
437 
438 /* 5D SEND CUE SHEET */
439 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
440 
441 /* 5E PERSISTENT RESERVE IN */
442 {ctl_persistent_reserve_in, CTL_SERIDX_PRES_IN, CTL_CMD_FLAG_ALLOW_ON_RESV |
443 						CTL_CMD_FLAG_OK_ON_BOTH |
444 						CTL_CMD_FLAG_OK_ON_STOPPED |
445 						CTL_CMD_FLAG_OK_ON_INOPERABLE |
446 						CTL_CMD_FLAG_OK_ON_SECONDARY |
447 						CTL_FLAG_DATA_IN |
448 						CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
449  CTL_LUN_PAT_NONE},
450 
451 //{ctl_persistent_reserve_in, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE},
452 
453 /* 5F PERSISTENT RESERVE OUT */
454 {ctl_persistent_reserve_out, CTL_SERIDX_PRES_OUT, CTL_CMD_FLAG_ALLOW_ON_RESV |
455 						  CTL_CMD_FLAG_OK_ON_BOTH |
456 						  CTL_CMD_FLAG_OK_ON_STOPPED |
457 						  CTL_CMD_FLAG_OK_ON_INOPERABLE|
458 						  CTL_CMD_FLAG_OK_ON_SECONDARY |
459 						  CTL_FLAG_DATA_OUT |
460 						  CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
461  CTL_LUN_PAT_NONE},
462 
463 //{ctl_persistent_reserve_out, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE},
464 
465 /* 60 */
466 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
467 
468 /* 61 */
469 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
470 
471 /* 62 */
472 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
473 
474 /* 63 */
475 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
476 
477 /* 64 */
478 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
479 
480 /* 65 */
481 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
482 
483 /* 66 */
484 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
485 
486 /* 67 */
487 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
488 
489 /* 68 */
490 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
491 
492 /* 69 */
493 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
494 
495 /* 6A */
496 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
497 
498 /* 6B */
499 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
500 
501 /* 6C */
502 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
503 
504 /* 6D */
505 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
506 
507 /* 6E */
508 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
509 
510 /* 6F */
511 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
512 
513 /* 70 */
514 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
515 
516 /* 71 */
517 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
518 
519 /* 72 */
520 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
521 
522 /* 73 */
523 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
524 
525 /* 74 */
526 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
527 
528 /* 75 */
529 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
530 
531 /* 76 */
532 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
533 
534 /* 77 */
535 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
536 
537 /* 78 */
538 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
539 
540 /* 79 */
541 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
542 
543 /* 7A */
544 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
545 
546 /* 7B */
547 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
548 
549 /* 7C */
550 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
551 
552 /* 7D */
553 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
554 
555 /* 7E */
556 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
557 
558 /* 7F */
559 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
560 
561 /* 80 XDWRITE EXTENDED(16) */
562 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
563 
564 /* 81 REBUILD(16) */
565 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
566 
567 /* 82 REGENERATE(16) */
568 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
569 
570 /* 83 EXTENDED COPY */
571 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
572 
573 /* 84 RECEIVE COPY RESULTS */
574 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
575 
576 /* 85 */
577 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
578 
579 /* 86 ACCESS CONTROL IN */
580 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
581 
582 /* 87 ACCESS CONTROL OUT */
583 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
584 
585 /* 88 READ(16) */
586 {ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN | CTL_FLAG_DATA_IN |
587                                   CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
588  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE},
589 
590 /* 89 */
591 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
592 
593 /* 8A WRITE(16) */
594 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
595  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE},
596 
597 /* 8B */
598 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
599 
600 /* 8C READ ATTRIBUTE */
601 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
602 
603 /* 8D WRITE ATTRIBUTE */
604 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
605 
606 /* 8E WRITE AND VERIFY(16) */
607 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
608  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE},
609 
610 /* 8F VERIFY(16) */
611 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
612 
613 /* 90 PRE-FETCH(16) */
614 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
615 
616 /* 91 SYNCHRONIZE CACHE(16) */
617 {ctl_sync_cache, CTL_SERIDX_START, CTL_CMD_FLAG_OK_ON_SLUN |
618 				   CTL_FLAG_DATA_NONE,
619  CTL_LUN_PAT_NONE},
620 
621 /* 92 LOCK UNLOCK CACHE(16) */
622 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
623 
624 /* 93 WRITE SAME(16) */
625 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
626 
627 /* 94 */
628 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
629 
630 /* 95 */
631 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
632 
633 /* 96 */
634 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
635 
636 /* 97 */
637 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
638 
639 /* 98 */
640 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
641 
642 /* 99 */
643 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
644 
645 /* 9A */
646 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
647 
648 /* 9B */
649 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
650 
651 /* 9C */
652 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
653 
654 /* 9D */
655 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
656 
657 /* 9E SERVICE ACTION IN(16) */
658 /* XXX KDM not all service actions will be read capacity!! */
659 {ctl_service_action_in, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_SLUN |
660 					   CTL_CMD_FLAG_OK_ON_STOPPED |
661 					   CTL_CMD_FLAG_OK_ON_INOPERABLE |
662 					   CTL_CMD_FLAG_OK_ON_SECONDARY |
663 					   CTL_FLAG_DATA_IN |
664 					   CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
665  CTL_LUN_PAT_READCAP},
666 
667 /* 9F SERVICE ACTION OUT(16) */
668 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
669 
670 /* A0 REPORT LUNS */
671 {ctl_report_luns, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_ALL_LUNS |
672 				  CTL_CMD_FLAG_ALLOW_ON_RESV |
673 				  CTL_CMD_FLAG_NO_SENSE |
674 				  CTL_CMD_FLAG_OK_ON_STOPPED |
675 				  CTL_CMD_FLAG_OK_ON_INOPERABLE |
676 				  CTL_CMD_FLAG_OK_ON_OFFLINE |
677 				  CTL_CMD_FLAG_OK_ON_SECONDARY |
678 				  CTL_FLAG_DATA_IN |
679 				  CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
680  CTL_LUN_PAT_NONE},
681 
682 /* A1 BLANK */
683 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
684 
685 /* A2 SEND EVENT */
686 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
687 
688 /* A3 MAINTENANCE (IN) Service Action - (0A) REPORT TARGET PORT GROUP */
689 {ctl_maintenance_in, CTL_SERIDX_MAIN_IN, CTL_CMD_FLAG_OK_ON_BOTH |
690 				         CTL_CMD_FLAG_OK_ON_STOPPED |
691 				         CTL_CMD_FLAG_OK_ON_INOPERABLE |
692 				         CTL_CMD_FLAG_OK_ON_SECONDARY |
693 				         CTL_FLAG_DATA_IN,
694  CTL_LUN_PAT_NONE},
695 
696 /* A4 MAINTENANCE (OUT) */
697 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
698 
699 /* A5 MOVE MEDIUM */
700 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
701 
702 /* A6 EXCHANGE MEDIUM */
703 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
704 
705 /* A7 MOVE MEDIUM ATTACHED */
706 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
707 
708 /* A8 READ(12) */
709 {ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN | CTL_FLAG_DATA_IN |
710                                   CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
711  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE},
712 
713 /* A9 PLAY TRACK RELATIVE(12) */
714 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
715 
716 /* AA WRITE(12) */
717 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
718  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE},
719 
720 /* AB SERVICE ACTION IN(12) */
721 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
722 
723 /* AC ERASE(12) */
724 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
725 
726 /* AD READ DVD STRUCTURE */
727 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
728 
729 /* AE WRITE AND VERIFY(12) */
730 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
731  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE},
732 
733 /* AF VERIFY(12) */
734 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
735 
736 /* B0 SEARCH DATA HIGH(12) */
737 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
738 
739 /* B1 SEARCH DATA EQUAL(12) */
740 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
741 
742 /* B2 SEARCH DATA LOW(12) */
743 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
744 
745 /* B3 SET LIMITS(12) */
746 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
747 
748 /* B4 READ ELEMENT STATUS ATTACHED */
749 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
750 
751 /* B5 REQUEST VOLUME ELEMENT ADDRESS */
752 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
753 
754 /* B6 SEND VOLUME TAG */
755 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
756 
757 /* B7 READ DEFECT DATA(12) */
758 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
759 
760 /* B8 READ ELEMENT STATUS */
761 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
762 
763 /* B9 READ CD MSF */
764 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
765 
766 /* BA REDUNDANCY GROUP (IN) */
767 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
768 
769 /* BB REDUNDANCY GROUP (OUT) */
770 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
771 
772 /* BC SPARE (IN) */
773 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
774 
775 /* BD SPARE (OUT) */
776 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
777 
778 /* BE VOLUME SET (IN) */
779 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
780 
781 /* BF VOLUME SET (OUT) */
782 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
783 
784 /* C0 - ISC_SEND_MSG_SHORT */
785 //{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE},
786 {ctl_isc, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_PROC | CTL_FLAG_DATA_NONE,
787  CTL_LUN_PAT_NONE},
788 
789 /* C1 - ISC_SEND_MSG */
790 //{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE},
791 {ctl_isc, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_PROC | CTL_FLAG_DATA_OUT,
792  CTL_LUN_PAT_NONE},
793 
794 /* C2 - ISC_WRITE */
795 //{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE},
796 {ctl_isc, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_PROC | CTL_FLAG_DATA_OUT,
797  CTL_LUN_PAT_NONE},
798 
799 /* C3 - ISC_READ */
800 //{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE},
801 {ctl_isc, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_PROC | CTL_FLAG_DATA_IN,
802  CTL_LUN_PAT_NONE},
803 
804 /* C4 */
805 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
806 
807 /* C5 */
808 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
809 
810 /* C6 */
811 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
812 
813 /* C7 */
814 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
815 
816 /* C8 */
817 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
818 
819 /* C9 */
820 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
821 
822 /* CA */
823 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
824 
825 /* CB */
826 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
827 
828 /* CC */
829 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
830 
831 /* CD */
832 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
833 
834 /* CE */
835 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
836 
837 /* CF */
838 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
839 
840 /* D0 */
841 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
842 
843 /* D1 */
844 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
845 
846 /* D2 */
847 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
848 
849 /* D3 */
850 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
851 
852 /* D4 */
853 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
854 
855 /* D5 */
856 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
857 
858 /* D6 */
859 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
860 
861 /* D7 */
862 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
863 
864 /* D8 */
865 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
866 
867 /* D9 */
868 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
869 
870 /* DA */
871 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
872 
873 /* DB */
874 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
875 
876 /* DC */
877 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
878 
879 /* DD */
880 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
881 
882 /* DE */
883 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
884 
885 /* DF */
886 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
887 
888 /* E0 */
889 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
890 
891 /* E1 */
892 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
893 
894 /* E2 */
895 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
896 
897 /* E3 */
898 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
899 
900 /* E4 */
901 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
902 
903 /* E5 */
904 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
905 
906 /* E6 */
907 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
908 
909 /* E7 */
910 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
911 
912 /* E8 */
913 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
914 
915 /* E9 */
916 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
917 
918 /* EA */
919 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
920 
921 /* EB */
922 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
923 
924 /* EC */
925 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
926 
927 /* ED */
928 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
929 
930 /* EE */
931 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
932 
933 /* EF */
934 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
935 
936 /* F0 */
937 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
938 
939 /* F1 */
940 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
941 
942 /* F2 */
943 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
944 
945 /* F3 */
946 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
947 
948 /* F4 */
949 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
950 
951 /* F5 */
952 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
953 
954 /* F6 */
955 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
956 
957 /* F7 */
958 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
959 
960 /* F8 */
961 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
962 
963 /* F9 */
964 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
965 
966 /* FA */
967 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
968 
969 /* FB */
970 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
971 
972 /* FC */
973 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
974 
975 /* FD */
976 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
977 
978 /* FE */
979 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
980 
981 /* FF */
982 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}
983 
984 };
985