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