]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/cam/ctl/ctl_cmd_table.c
MFV illumos
[FreeBSD/FreeBSD.git] / sys / cam / ctl / ctl_cmd_table.c
1 /*-
2  * Copyright (c) 2003, 2004, 2005, 2009 Silicon Graphics International Corp.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions, and the following disclaimer,
10  *    without modification.
11  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
12  *    substantially similar to the "NO WARRANTY" disclaimer below
13  *    ("Disclaimer") and any redistribution must be conditioned upon
14  *    including a substantially similar Disclaimer requirement for further
15  *    binary redistribution.
16  *
17  * NO WARRANTY
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
27  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28  * POSSIBILITY OF SUCH DAMAGES.
29  *
30  * $Id: //depot/users/kenm/FreeBSD-test2/sys/cam/ctl/ctl_cmd_table.c#4 $
31  * $FreeBSD$
32  */
33 /*
34  * CAM Target Layer command table.
35  *
36  * Author: Ken Merry <ken@FreeBSD.org>, Kim Le
37  */
38
39 #include <sys/cdefs.h>
40 #include <sys/param.h>
41 #include <sys/systm.h>
42 #include <sys/kernel.h>
43 #include <sys/types.h>
44 #include <sys/malloc.h>
45 #include <sys/condvar.h>
46 #include <sys/queue.h>
47 #include <sys/sysctl.h>
48
49 #include <cam/scsi/scsi_all.h>
50 #include <cam/scsi/scsi_da.h>
51 #include <cam/ctl/ctl_io.h>
52 #include <cam/ctl/ctl.h>
53 #include <cam/ctl/ctl_frontend.h>
54 #include <cam/ctl/ctl_backend.h>
55 #include <cam/ctl/ctl_frontend_internal.h>
56 #include <cam/ctl/ctl_ioctl.h>
57 #include <cam/ctl/ctl_ha.h>
58 #include <cam/ctl/ctl_private.h>
59
60 /*
61  * Whenever support for a new command is added, it should be added to 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_CMD_FLAG_ALLOW_ON_PR_RESV,
197  CTL_LUN_PAT_NONE},
198
199 /* 1B START STOP UNIT */
200 {ctl_start_stop, CTL_SERIDX_START, CTL_CMD_FLAG_OK_ON_SLUN |
201                                    CTL_CMD_FLAG_OK_ON_STOPPED |
202                                    CTL_CMD_FLAG_OK_ON_INOPERABLE |
203                                    CTL_CMD_FLAG_OK_ON_OFFLINE |
204                                    CTL_FLAG_DATA_NONE |
205                                    CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
206  CTL_LUN_PAT_NONE},
207
208 /* 1C RECEIVE DIAGNOSTIC RESULTS */
209 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
210
211 /* 1D SEND DIAGNOSTIC */
212 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
213
214 /* 1E PREVENT ALLOW MEDIUM REMOVAL */
215 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
216
217 /* 1F */
218 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
219
220 /* 20 */
221 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
222
223 /* 21 */
224 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
225
226 /* 22 */
227 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
228
229 /* 23 */
230 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
231
232 /* 24 SET WINDOW */
233 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
234
235 /* 25 READ CAPACITY(10) */
236 {ctl_read_capacity, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_SLUN|
237                                        CTL_CMD_FLAG_OK_ON_STOPPED |
238                                        CTL_CMD_FLAG_OK_ON_INOPERABLE |
239                                        CTL_CMD_FLAG_OK_ON_SECONDARY |
240                                        CTL_FLAG_DATA_IN |
241                                        CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
242  CTL_LUN_PAT_READCAP},
243
244 /* 26 */
245 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
246
247 /* 27 */
248 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
249
250 /* 28 READ(10) */
251 {ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN |
252                                   CTL_FLAG_DATA_IN |
253                                   CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
254  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE},
255
256 /* 29 READ GENERATION */
257 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
258
259 /* 2A WRITE(10) */
260 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
261  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE},
262
263 /* 2B SEEK(10) */
264 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
265
266 /* 2C ERASE(10) */
267 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
268
269 /* 2D READ UPDATED BLOCK */
270 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
271
272 /* 2E WRITE AND VERIFY(10) */
273 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
274  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE},
275
276 /* 2F VERIFY(10) */
277 {ctl_verify, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN |
278                               CTL_FLAG_DATA_OUT |
279                               CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
280  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE},
281
282 /* 30 SEARCH DATA HIGH(10) */
283 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
284
285 /* 31 SEARCH DATA EQUAL(10) */
286 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
287
288 /* 32 SEARCH DATA LOW(10) */
289 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
290
291 /* 33 SET LIMITS(10) */
292 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
293
294 /* 34 PRE-FETCH(10) */
295 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
296
297 /* 35 SYNCHRONIZE CACHE(10) */
298 {ctl_sync_cache, CTL_SERIDX_START, CTL_CMD_FLAG_OK_ON_SLUN |
299                                    CTL_FLAG_DATA_NONE,
300  CTL_LUN_PAT_NONE},
301
302 /* 36 LOCK UNLOCK CACHE(10) */
303 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
304
305 /* 37 READ DEFECT DATA(10) */
306 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
307
308 /* 38 MEDIUM SCAN */
309 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
310
311 /* 39 COMPARE */
312 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
313
314 /* 3A COPY AND VERIFY */
315 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
316
317 /* 3B WRITE BUFFER */
318 {ctl_write_buffer, CTL_SERIDX_MD_SEL, CTL_CMD_FLAG_OK_ON_BOTH |
319                                       CTL_FLAG_DATA_OUT,
320  CTL_LUN_PAT_NONE},
321
322 /* 3C READ BUFFER */
323 {ctl_read_buffer, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
324                                      CTL_FLAG_DATA_IN |
325                                      CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
326  CTL_LUN_PAT_NONE},
327
328 /* 3D UPDATE BLOCK */
329 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
330
331 /* 3E READ LONG */
332 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
333
334 /* 3F WRITE LONG */
335 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
336
337 /* 40 CHANGE DEFINITION */
338 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
339
340 /* 41 WRITE SAME(10) */
341 {ctl_write_same, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN |
342                                    CTL_FLAG_DATA_OUT,
343  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE},
344
345 /* 42 READ SUB-CHANNEL / UNMAP */
346 {ctl_unmap, CTL_SERIDX_UNMAP, CTL_CMD_FLAG_OK_ON_SLUN | CTL_FLAG_DATA_OUT,
347  CTL_LUN_PAT_WRITE},
348
349 /* 43 READ TOC/PMA/ATIP */
350 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
351
352 /* 44 REPORT DENSITY SUPPORT */
353 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
354
355 /* 45 PLAY AUDIO(10) */
356 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
357
358 /* 46 GET CONFIGURATION */
359 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
360
361 /* 47 PLAY AUDIO MSF */
362 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
363
364 /* 48 PLAY AUDIO TRACK INDEX */
365 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
366
367 /* 49 PLAY TRACK RELATIVE(10) */
368 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
369
370 /* 4A GET EVENT STATUS NOTIFICATION */
371 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
372
373 /* 4B PAUSE/RESUME */
374 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
375
376 /* 4C LOG SELECT */
377 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
378
379 /* 4D LOG SENSE */
380 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
381
382 /* 4E STOP PLAY/SCAN */
383 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
384
385 /* 4F */
386 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
387
388 /* 50 XDWRITE(10) */
389 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
390
391 /* 51 XPWRITE(10) */
392 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
393
394 /* 52 XDREAD(10) */
395 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
396
397 /* 53 RESERVE TRACK */
398 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
399
400 /* 54 SEND OPC INFORMATION */
401 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
402
403 /* 55 MODE SELECT(10) */
404 {ctl_mode_select, CTL_SERIDX_MD_SEL, CTL_CMD_FLAG_OK_ON_BOTH |
405                                      CTL_CMD_FLAG_OK_ON_STOPPED |
406                                      CTL_CMD_FLAG_OK_ON_INOPERABLE |
407                                      CTL_CMD_FLAG_OK_ON_SECONDARY |
408                                      CTL_FLAG_DATA_OUT,
409  CTL_LUN_PAT_NONE},
410
411 /* 56 RESERVE(10) */
412 {ctl_scsi_reserve, CTL_SERIDX_RESV, CTL_CMD_FLAG_ALLOW_ON_RESV |
413                                     CTL_CMD_FLAG_OK_ON_BOTH |
414                                     CTL_CMD_FLAG_OK_ON_STOPPED |
415                                     CTL_CMD_FLAG_OK_ON_INOPERABLE |
416                                     CTL_CMD_FLAG_OK_ON_SECONDARY |
417                                     CTL_FLAG_DATA_OUT,
418  CTL_LUN_PAT_NONE},
419
420 /* 57 RELEASE(10) */
421 {ctl_scsi_release, CTL_SERIDX_REL, CTL_CMD_FLAG_ALLOW_ON_RESV |
422                                    CTL_CMD_FLAG_OK_ON_BOTH |
423                                    CTL_CMD_FLAG_OK_ON_STOPPED |
424                                    CTL_CMD_FLAG_OK_ON_INOPERABLE |
425                                    CTL_CMD_FLAG_OK_ON_SECONDARY |
426                                    CTL_FLAG_DATA_OUT,
427  CTL_LUN_PAT_NONE},
428
429 /* 58 REPAIR TRACK */
430 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
431
432 /* 59 READ MASTER CUE */
433 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
434
435 /* 5A MODE SENSE(10) */
436 {ctl_mode_sense, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH |
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_NONE},
443
444 /* 5B CLOSE TRACK/SESSION */
445 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
446
447 /* 5C READ BUFFER CAPACITY */
448 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
449
450 /* 5D SEND CUE SHEET */
451 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
452
453 /* 5E PERSISTENT RESERVE IN */
454 {ctl_persistent_reserve_in, CTL_SERIDX_PRES_IN, 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_IN |
460                                                 CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
461  CTL_LUN_PAT_NONE},
462
463 //{ctl_persistent_reserve_in, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE},
464
465 /* 5F PERSISTENT RESERVE OUT */
466 {ctl_persistent_reserve_out, CTL_SERIDX_PRES_OUT, CTL_CMD_FLAG_ALLOW_ON_RESV |
467                                                   CTL_CMD_FLAG_OK_ON_BOTH |
468                                                   CTL_CMD_FLAG_OK_ON_STOPPED |
469                                                   CTL_CMD_FLAG_OK_ON_INOPERABLE|
470                                                   CTL_CMD_FLAG_OK_ON_SECONDARY |
471                                                   CTL_FLAG_DATA_OUT |
472                                                   CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
473  CTL_LUN_PAT_NONE},
474
475 //{ctl_persistent_reserve_out, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE},
476
477 /* 60 */
478 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
479
480 /* 61 */
481 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
482
483 /* 62 */
484 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
485
486 /* 63 */
487 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
488
489 /* 64 */
490 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
491
492 /* 65 */
493 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
494
495 /* 66 */
496 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
497
498 /* 67 */
499 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
500
501 /* 68 */
502 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
503
504 /* 69 */
505 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
506
507 /* 6A */
508 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
509
510 /* 6B */
511 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
512
513 /* 6C */
514 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
515
516 /* 6D */
517 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
518
519 /* 6E */
520 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
521
522 /* 6F */
523 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
524
525 /* 70 */
526 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
527
528 /* 71 */
529 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
530
531 /* 72 */
532 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
533
534 /* 73 */
535 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
536
537 /* 74 */
538 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
539
540 /* 75 */
541 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
542
543 /* 76 */
544 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
545
546 /* 77 */
547 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
548
549 /* 78 */
550 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
551
552 /* 79 */
553 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
554
555 /* 7A */
556 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
557
558 /* 7B */
559 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
560
561 /* 7C */
562 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
563
564 /* 7D */
565 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
566
567 /* 7E */
568 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
569
570 /* 7F */
571 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
572
573 /* 80 XDWRITE EXTENDED(16) */
574 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
575
576 /* 81 REBUILD(16) */
577 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
578
579 /* 82 REGENERATE(16) */
580 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
581
582 /* 83 EXTENDED COPY */
583 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
584
585 /* 84 RECEIVE COPY RESULTS */
586 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
587
588 /* 85 */
589 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
590
591 /* 86 ACCESS CONTROL IN */
592 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
593
594 /* 87 ACCESS CONTROL OUT */
595 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
596
597 /* 88 READ(16) */
598 {ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN | CTL_FLAG_DATA_IN |
599                                   CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
600  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE},
601
602 /* 89 COMPARE AND WRITE */
603 {ctl_cnw, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
604  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE},
605
606 /* 8A WRITE(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 /* 8B */
611 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
612
613 /* 8C READ ATTRIBUTE */
614 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
615
616 /* 8D WRITE ATTRIBUTE */
617 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
618
619 /* 8E WRITE AND VERIFY(16) */
620 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
621  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE},
622
623 /* 8F VERIFY(16) */
624 {ctl_verify, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN |
625                               CTL_FLAG_DATA_OUT |
626                               CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
627  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE},
628
629 /* 90 PRE-FETCH(16) */
630 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
631
632 /* 91 SYNCHRONIZE CACHE(16) */
633 {ctl_sync_cache, CTL_SERIDX_START, CTL_CMD_FLAG_OK_ON_SLUN |
634                                    CTL_FLAG_DATA_NONE,
635  CTL_LUN_PAT_NONE},
636
637 /* 92 LOCK UNLOCK CACHE(16) */
638 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
639
640 /* 93 WRITE SAME(16) */
641 {ctl_write_same, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN |
642                                    CTL_FLAG_DATA_OUT,
643  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE},
644
645 /* 94 */
646 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
647
648 /* 95 */
649 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
650
651 /* 96 */
652 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
653
654 /* 97 */
655 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
656
657 /* 98 */
658 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
659
660 /* 99 */
661 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
662
663 /* 9A */
664 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
665
666 /* 9B */
667 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
668
669 /* 9C */
670 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
671
672 /* 9D */
673 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
674
675 /* 9E SERVICE ACTION IN(16) */
676 /* XXX KDM not all service actions will be read capacity!! */
677 {ctl_service_action_in, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_SLUN |
678                                            CTL_CMD_FLAG_OK_ON_STOPPED |
679                                            CTL_CMD_FLAG_OK_ON_INOPERABLE |
680                                            CTL_CMD_FLAG_OK_ON_SECONDARY |
681                                            CTL_FLAG_DATA_IN |
682                                            CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
683  CTL_LUN_PAT_READCAP},
684
685 /* 9F SERVICE ACTION OUT(16) */
686 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
687
688 /* A0 REPORT LUNS */
689 {ctl_report_luns, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_ALL_LUNS |
690                                   CTL_CMD_FLAG_ALLOW_ON_RESV |
691                                   CTL_CMD_FLAG_NO_SENSE |
692                                   CTL_CMD_FLAG_OK_ON_STOPPED |
693                                   CTL_CMD_FLAG_OK_ON_INOPERABLE |
694                                   CTL_CMD_FLAG_OK_ON_OFFLINE |
695                                   CTL_CMD_FLAG_OK_ON_SECONDARY |
696                                   CTL_FLAG_DATA_IN |
697                                   CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
698  CTL_LUN_PAT_NONE},
699
700 /* A1 BLANK */
701 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
702
703 /* A2 SEND EVENT */
704 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
705
706 /* A3 MAINTENANCE (IN) Service Action - (0A) REPORT TARGET PORT GROUP */
707 {ctl_maintenance_in, CTL_SERIDX_MAIN_IN, CTL_CMD_FLAG_OK_ON_BOTH |
708                                          CTL_CMD_FLAG_OK_ON_STOPPED |
709                                          CTL_CMD_FLAG_OK_ON_INOPERABLE |
710                                          CTL_CMD_FLAG_OK_ON_SECONDARY |
711                                          CTL_FLAG_DATA_IN,
712  CTL_LUN_PAT_NONE},
713
714 /* A4 MAINTENANCE (OUT) */
715 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
716
717 /* A5 MOVE MEDIUM */
718 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
719
720 /* A6 EXCHANGE MEDIUM */
721 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
722
723 /* A7 MOVE MEDIUM ATTACHED */
724 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
725
726 /* A8 READ(12) */
727 {ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN | CTL_FLAG_DATA_IN |
728                                   CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
729  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE},
730
731 /* A9 PLAY TRACK RELATIVE(12) */
732 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
733
734 /* AA WRITE(12) */
735 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
736  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE},
737
738 /* AB SERVICE ACTION IN(12) */
739 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
740
741 /* AC ERASE(12) */
742 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
743
744 /* AD READ DVD STRUCTURE */
745 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
746
747 /* AE WRITE AND VERIFY(12) */
748 {ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT,
749  CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE},
750
751 /* AF VERIFY(12) */
752 {ctl_verify, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN |
753                               CTL_FLAG_DATA_OUT |
754                               CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
755  CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE},
756
757 /* B0 SEARCH DATA HIGH(12) */
758 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
759
760 /* B1 SEARCH DATA EQUAL(12) */
761 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
762
763 /* B2 SEARCH DATA LOW(12) */
764 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
765
766 /* B3 SET LIMITS(12) */
767 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
768
769 /* B4 READ ELEMENT STATUS ATTACHED */
770 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
771
772 /* B5 REQUEST VOLUME ELEMENT ADDRESS */
773 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
774
775 /* B6 SEND VOLUME TAG */
776 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
777
778 /* B7 READ DEFECT DATA(12) */
779 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
780
781 /* B8 READ ELEMENT STATUS */
782 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
783
784 /* B9 READ CD MSF */
785 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
786
787 /* BA REDUNDANCY GROUP (IN) */
788 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
789
790 /* BB REDUNDANCY GROUP (OUT) */
791 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
792
793 /* BC SPARE (IN) */
794 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
795
796 /* BD SPARE (OUT) */
797 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
798
799 /* BE VOLUME SET (IN) */
800 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
801
802 /* BF VOLUME SET (OUT) */
803 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
804
805 /* C0 - ISC_SEND_MSG_SHORT */
806 //{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE},
807 {ctl_isc, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_PROC | CTL_FLAG_DATA_NONE,
808  CTL_LUN_PAT_NONE},
809
810 /* C1 - ISC_SEND_MSG */
811 //{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE},
812 {ctl_isc, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_PROC | CTL_FLAG_DATA_OUT,
813  CTL_LUN_PAT_NONE},
814
815 /* C2 - ISC_WRITE */
816 //{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE},
817 {ctl_isc, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_PROC | CTL_FLAG_DATA_OUT,
818  CTL_LUN_PAT_NONE},
819
820 /* C3 - ISC_READ */
821 //{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE},
822 {ctl_isc, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_PROC | CTL_FLAG_DATA_IN,
823  CTL_LUN_PAT_NONE},
824
825 /* C4 */
826 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
827
828 /* C5 */
829 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
830
831 /* C6 */
832 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
833
834 /* C7 */
835 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
836
837 /* C8 */
838 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
839
840 /* C9 */
841 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
842
843 /* CA */
844 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
845
846 /* CB */
847 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
848
849 /* CC */
850 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
851
852 /* CD */
853 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
854
855 /* CE */
856 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
857
858 /* CF */
859 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
860
861 /* D0 */
862 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
863
864 /* D1 */
865 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
866
867 /* D2 */
868 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
869
870 /* D3 */
871 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
872
873 /* D4 */
874 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
875
876 /* D5 */
877 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
878
879 /* D6 */
880 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
881
882 /* D7 */
883 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
884
885 /* D8 */
886 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
887
888 /* D9 */
889 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
890
891 /* DA */
892 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
893
894 /* DB */
895 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
896
897 /* DC */
898 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
899
900 /* DD */
901 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
902
903 /* DE */
904 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
905
906 /* DF */
907 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
908
909 /* E0 */
910 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
911
912 /* E1 */
913 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
914
915 /* E2 */
916 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
917
918 /* E3 */
919 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
920
921 /* E4 */
922 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
923
924 /* E5 */
925 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
926
927 /* E6 */
928 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
929
930 /* E7 */
931 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
932
933 /* E8 */
934 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
935
936 /* E9 */
937 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
938
939 /* EA */
940 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
941
942 /* EB */
943 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
944
945 /* EC */
946 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
947
948 /* ED */
949 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
950
951 /* EE */
952 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
953
954 /* EF */
955 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
956
957 /* F0 */
958 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
959
960 /* F1 */
961 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
962
963 /* F2 */
964 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
965
966 /* F3 */
967 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
968
969 /* F4 */
970 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
971
972 /* F5 */
973 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
974
975 /* F6 */
976 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
977
978 /* F7 */
979 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
980
981 /* F8 */
982 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
983
984 /* F9 */
985 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
986
987 /* FA */
988 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
989
990 /* FB */
991 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
992
993 /* FC */
994 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
995
996 /* FD */
997 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
998
999 /* FE */
1000 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
1001
1002 /* FF */
1003 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}
1004
1005 };