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