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