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