ctl_cmd_table.c revision 274562
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: stable/10/sys/cam/ctl/ctl_cmd_table.c 274562 2014-11-16 01:47:43Z mav $ 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 */ 66const 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 */ 120const 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 */ 213const 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 */ 322const 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) */ 386const 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 */ 450const 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 535const 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_FLAG_DATA_OUT, 804 CTL_LUN_PAT_NONE, 805 10, {0x1f, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07}}, 806 807/* 3C READ BUFFER */ 808{ctl_read_buffer, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH | 809 CTL_FLAG_DATA_IN | 810 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV, 811 CTL_LUN_PAT_NONE, 812 10, {0x1f, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07}}, 813 814/* 3D UPDATE BLOCK */ 815{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 816 817/* 3E READ LONG */ 818{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 819 820/* 3F WRITE LONG */ 821{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 822 823/* 40 CHANGE DEFINITION */ 824{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 825 826/* 41 WRITE SAME(10) */ 827{ctl_write_same, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN | 828 CTL_FLAG_DATA_OUT, 829 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE, 830 10, {0x1a, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}}, 831 832/* 42 READ SUB-CHANNEL / UNMAP */ 833{ctl_unmap, CTL_SERIDX_UNMAP, CTL_CMD_FLAG_OK_ON_SLUN | CTL_FLAG_DATA_OUT, 834 CTL_LUN_PAT_WRITE, 835 10, {1, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}}, 836 837/* 43 READ TOC/PMA/ATIP */ 838{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 839 840/* 44 REPORT DENSITY SUPPORT */ 841{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 842 843/* 45 PLAY AUDIO(10) */ 844{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 845 846/* 46 GET CONFIGURATION */ 847{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 848 849/* 47 PLAY AUDIO MSF */ 850{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 851 852/* 48 PLAY AUDIO TRACK INDEX */ 853{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 854 855/* 49 PLAY TRACK RELATIVE(10) */ 856{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 857 858/* 4A GET EVENT STATUS NOTIFICATION */ 859{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 860 861/* 4B PAUSE/RESUME */ 862{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 863 864/* 4C LOG SELECT */ 865{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 866 867/* 4D LOG SENSE */ 868{ctl_log_sense, CTL_SERIDX_LOG_SNS, CTL_CMD_FLAG_OK_ON_SLUN | 869 CTL_FLAG_DATA_IN | 870 CTL_CMD_FLAG_ALLOW_ON_PR_RESV, 871 CTL_LUN_PAT_NONE, 10, {0, 0xff, 0xff, 0, 0xff, 0xff, 0xff, 0xff, 0x07} }, 872 873/* 4E STOP PLAY/SCAN */ 874{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 875 876/* 4F */ 877{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 878 879/* 50 XDWRITE(10) */ 880{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 881 882/* 51 XPWRITE(10) */ 883{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 884 885/* 52 XDREAD(10) */ 886{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 887 888/* 53 RESERVE TRACK */ 889{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 890 891/* 54 SEND OPC INFORMATION */ 892{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 893 894/* 55 MODE SELECT(10) */ 895{ctl_mode_select, CTL_SERIDX_MD_SEL, CTL_CMD_FLAG_OK_ON_BOTH | 896 CTL_CMD_FLAG_OK_ON_STOPPED | 897 CTL_CMD_FLAG_OK_ON_INOPERABLE | 898 CTL_CMD_FLAG_OK_ON_OFFLINE | 899 CTL_CMD_FLAG_OK_ON_SECONDARY | 900 CTL_FLAG_DATA_OUT, 901 CTL_LUN_PAT_NONE, 10, {0x11, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07} }, 902 903/* 56 RESERVE(10) */ 904{ctl_scsi_reserve, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV | 905 CTL_CMD_FLAG_OK_ON_BOTH | 906 CTL_CMD_FLAG_OK_ON_STOPPED | 907 CTL_CMD_FLAG_OK_ON_INOPERABLE | 908 CTL_CMD_FLAG_OK_ON_OFFLINE | 909 CTL_CMD_FLAG_OK_ON_SECONDARY | 910 CTL_FLAG_DATA_OUT, 911 CTL_LUN_PAT_NONE, 10, {0x02, 0, 0xff, 0, 0, 0, 0xff, 0xff, 0x07} }, 912 913/* 57 RELEASE(10) */ 914{ctl_scsi_release, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV | 915 CTL_CMD_FLAG_OK_ON_BOTH | 916 CTL_CMD_FLAG_OK_ON_STOPPED | 917 CTL_CMD_FLAG_OK_ON_INOPERABLE | 918 CTL_CMD_FLAG_OK_ON_OFFLINE | 919 CTL_CMD_FLAG_OK_ON_SECONDARY | 920 CTL_FLAG_DATA_OUT, 921 CTL_LUN_PAT_NONE, 10, {0x02, 0, 0xff, 0, 0, 0, 0xff, 0xff, 0x07} }, 922 923/* 58 REPAIR TRACK */ 924{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 925 926/* 59 READ MASTER CUE */ 927{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 928 929/* 5A MODE SENSE(10) */ 930{ctl_mode_sense, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH | 931 CTL_CMD_FLAG_OK_ON_STOPPED | 932 CTL_CMD_FLAG_OK_ON_INOPERABLE | 933 CTL_CMD_FLAG_OK_ON_OFFLINE | 934 CTL_CMD_FLAG_OK_ON_SECONDARY | 935 CTL_FLAG_DATA_IN | 936 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV, 937 CTL_LUN_PAT_NONE, 10, {0x18, 0xff, 0xff, 0, 0, 0, 0xff, 0xff, 0x07} }, 938 939/* 5B CLOSE TRACK/SESSION */ 940{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 941 942/* 5C READ BUFFER CAPACITY */ 943{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 944 945/* 5D SEND CUE SHEET */ 946{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 947 948/* 5E PERSISTENT RESERVE IN */ 949{__DECONST(ctl_opfunc *, ctl_cmd_table_5e), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5, 950 CTL_LUN_PAT_NONE}, 951 952/* 5F PERSISTENT RESERVE OUT */ 953{__DECONST(ctl_opfunc *, ctl_cmd_table_5f), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5, 954 CTL_LUN_PAT_NONE}, 955 956/* 60 */ 957{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 958 959/* 61 */ 960{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 961 962/* 62 */ 963{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 964 965/* 63 */ 966{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 967 968/* 64 */ 969{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 970 971/* 65 */ 972{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 973 974/* 66 */ 975{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 976 977/* 67 */ 978{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 979 980/* 68 */ 981{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 982 983/* 69 */ 984{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 985 986/* 6A */ 987{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 988 989/* 6B */ 990{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 991 992/* 6C */ 993{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 994 995/* 6D */ 996{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 997 998/* 6E */ 999{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1000 1001/* 6F */ 1002{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1003 1004/* 70 */ 1005{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1006 1007/* 71 */ 1008{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1009 1010/* 72 */ 1011{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1012 1013/* 73 */ 1014{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1015 1016/* 74 */ 1017{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1018 1019/* 75 */ 1020{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1021 1022/* 76 */ 1023{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1024 1025/* 77 */ 1026{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1027 1028/* 78 */ 1029{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1030 1031/* 79 */ 1032{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1033 1034/* 7A */ 1035{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1036 1037/* 7B */ 1038{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1039 1040/* 7C */ 1041{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1042 1043/* 7D */ 1044{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1045 1046/* 7E */ 1047{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1048 1049/* 7F */ 1050{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1051 1052/* 80 XDWRITE EXTENDED(16) */ 1053{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1054 1055/* 81 REBUILD(16) */ 1056{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1057 1058/* 82 REGENERATE(16) */ 1059{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1060 1061/* 83 EXTENDED COPY */ 1062{__DECONST(ctl_opfunc *, ctl_cmd_table_83), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5, 1063 CTL_LUN_PAT_NONE}, 1064 1065/* 84 RECEIVE COPY RESULTS */ 1066{__DECONST(ctl_opfunc *, ctl_cmd_table_84), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5, 1067 CTL_LUN_PAT_NONE}, 1068 1069/* 85 */ 1070{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1071 1072/* 86 ACCESS CONTROL IN */ 1073{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1074 1075/* 87 ACCESS CONTROL OUT */ 1076{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1077 1078/* 88 READ(16) */ 1079{ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN | CTL_FLAG_DATA_IN | 1080 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV, 1081 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE, 1082 16, {0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1083 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}}, 1084 1085/* 89 COMPARE AND WRITE */ 1086{ctl_cnw, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT, 1087 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE, 1088 16, {0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1089 0xff, 0xff, 0, 0, 0, 0xff, 0, 0x07}}, 1090 1091/* 8A WRITE(16) */ 1092{ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT, 1093 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE, 1094 16, {0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1095 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}}, 1096 1097/* 8B */ 1098{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1099 1100/* 8C READ ATTRIBUTE */ 1101{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1102 1103/* 8D WRITE ATTRIBUTE */ 1104{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1105 1106/* 8E WRITE AND VERIFY(16) */ 1107{ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT, 1108 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE, 1109 16, {0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1110 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}}, 1111 1112/* 8F VERIFY(16) */ 1113{ctl_verify, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN | 1114 CTL_FLAG_DATA_OUT | 1115 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV, 1116 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE, 1117 16, {0x16, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1118 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}}, 1119 1120/* 90 PRE-FETCH(16) */ 1121{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1122 1123/* 91 SYNCHRONIZE CACHE(16) */ 1124{ctl_sync_cache, CTL_SERIDX_START, CTL_CMD_FLAG_OK_ON_SLUN | 1125 CTL_FLAG_DATA_NONE, 1126 CTL_LUN_PAT_NONE, 1127 16, {0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1128 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}}, 1129 1130/* 92 LOCK UNLOCK CACHE(16) */ 1131{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1132 1133/* 93 WRITE SAME(16) */ 1134{ctl_write_same, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN | 1135 CTL_FLAG_DATA_OUT, 1136 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE, 1137 16, {0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1138 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}}, 1139 1140/* 94 */ 1141{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1142 1143/* 95 */ 1144{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1145 1146/* 96 */ 1147{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1148 1149/* 97 */ 1150{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1151 1152/* 98 */ 1153{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1154 1155/* 99 */ 1156{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1157 1158/* 9A */ 1159{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1160 1161/* 9B */ 1162{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1163 1164/* 9C WRITE ATOMIC (16) */ 1165{ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT, 1166 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE, 1167 16, {0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1168 0xff, 0xff, 0, 0, 0xff, 0xff, 0, 0x07}}, 1169 1170/* 9D */ 1171{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1172 1173/* 9E SERVICE ACTION IN(16) */ 1174{__DECONST(ctl_opfunc *, ctl_cmd_table_9e), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5, 1175 CTL_LUN_PAT_NONE}, 1176 1177/* 9F SERVICE ACTION OUT(16) */ 1178{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1179 1180/* A0 REPORT LUNS */ 1181{ctl_report_luns, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_ALL_LUNS | 1182 CTL_CMD_FLAG_ALLOW_ON_RESV | 1183 CTL_CMD_FLAG_NO_SENSE | 1184 CTL_CMD_FLAG_OK_ON_STOPPED | 1185 CTL_CMD_FLAG_OK_ON_INOPERABLE | 1186 CTL_CMD_FLAG_OK_ON_OFFLINE | 1187 CTL_CMD_FLAG_OK_ON_SECONDARY | 1188 CTL_FLAG_DATA_IN | 1189 CTL_CMD_FLAG_ALLOW_ON_PR_RESV, 1190 CTL_LUN_PAT_NONE, 1191 12, {0, 0xff, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}}, 1192 1193/* A1 BLANK */ 1194{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1195 1196/* A2 SEND EVENT */ 1197{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1198 1199/* A3 MAINTENANCE IN */ 1200{__DECONST(ctl_opfunc *, ctl_cmd_table_a3), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5, 1201 CTL_LUN_PAT_NONE}, 1202 1203/* A4 MAINTENANCE OUT */ 1204{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1205 1206/* A5 MOVE MEDIUM */ 1207{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1208 1209/* A6 EXCHANGE MEDIUM */ 1210{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1211 1212/* A7 MOVE MEDIUM ATTACHED */ 1213{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1214 1215/* A8 READ(12) */ 1216{ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN | CTL_FLAG_DATA_IN | 1217 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV, 1218 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE, 1219 12, {0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}}, 1220 1221/* A9 PLAY TRACK RELATIVE(12) */ 1222{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1223 1224/* AA WRITE(12) */ 1225{ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT, 1226 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE, 1227 12, {0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}}, 1228 1229/* AB SERVICE ACTION IN(12) */ 1230{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1231 1232/* AC ERASE(12) */ 1233{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1234 1235/* AD READ DVD STRUCTURE */ 1236{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1237 1238/* AE WRITE AND VERIFY(12) */ 1239{ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT, 1240 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE, 1241 12, {0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}}, 1242 1243/* AF VERIFY(12) */ 1244{ctl_verify, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN | 1245 CTL_FLAG_DATA_OUT | 1246 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV, 1247 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE, 1248 12, {0x16, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}}, 1249 1250/* B0 SEARCH DATA HIGH(12) */ 1251{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1252 1253/* B1 SEARCH DATA EQUAL(12) */ 1254{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1255 1256/* B2 SEARCH DATA LOW(12) */ 1257{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1258 1259/* B3 SET LIMITS(12) */ 1260{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1261 1262/* B4 READ ELEMENT STATUS ATTACHED */ 1263{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1264 1265/* B5 REQUEST VOLUME ELEMENT ADDRESS */ 1266{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1267 1268/* B6 SEND VOLUME TAG */ 1269{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1270 1271/* B7 READ DEFECT DATA(12) */ 1272{ctl_read_defect, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_SLUN | 1273 CTL_FLAG_DATA_IN | 1274 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV, 1275 CTL_LUN_PAT_NONE, 1276 12, {0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}}, 1277 1278/* B8 READ ELEMENT STATUS */ 1279{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1280 1281/* B9 READ CD MSF */ 1282{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1283 1284/* BA REDUNDANCY GROUP IN */ 1285{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1286 1287/* BB REDUNDANCY GROUP OUT */ 1288{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1289 1290/* BC SPARE IN */ 1291{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1292 1293/* BD SPARE OUT */ 1294{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1295 1296/* BE VOLUME SET IN */ 1297{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1298 1299/* BF VOLUME SET OUT */ 1300{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1301 1302/* C0 - ISC_SEND_MSG_SHORT */ 1303//{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE}, 1304{ctl_isc, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_PROC | CTL_FLAG_DATA_NONE, 1305 CTL_LUN_PAT_NONE, 1306 16, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1307 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}}, 1308 1309/* C1 - ISC_SEND_MSG */ 1310//{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE}, 1311{ctl_isc, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_PROC | CTL_FLAG_DATA_OUT, 1312 CTL_LUN_PAT_NONE, 1313 16, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1314 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}}, 1315 1316/* C2 - ISC_WRITE */ 1317//{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE}, 1318{ctl_isc, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_PROC | CTL_FLAG_DATA_OUT, 1319 CTL_LUN_PAT_NONE, 1320 16, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1321 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}}, 1322 1323/* C3 - ISC_READ */ 1324//{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE}, 1325{ctl_isc, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_PROC | CTL_FLAG_DATA_IN, 1326 CTL_LUN_PAT_NONE, 1327 16, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1328 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}}, 1329 1330/* C4 */ 1331{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1332 1333/* C5 */ 1334{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1335 1336/* C6 */ 1337{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1338 1339/* C7 */ 1340{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1341 1342/* C8 */ 1343{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1344 1345/* C9 */ 1346{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1347 1348/* CA */ 1349{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1350 1351/* CB */ 1352{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1353 1354/* CC */ 1355{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1356 1357/* CD */ 1358{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1359 1360/* CE */ 1361{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1362 1363/* CF */ 1364{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1365 1366/* D0 */ 1367{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1368 1369/* D1 */ 1370{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1371 1372/* D2 */ 1373{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1374 1375/* D3 */ 1376{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1377 1378/* D4 */ 1379{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1380 1381/* D5 */ 1382{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1383 1384/* D6 */ 1385{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1386 1387/* D7 */ 1388{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1389 1390/* D8 */ 1391{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1392 1393/* D9 */ 1394{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1395 1396/* DA */ 1397{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1398 1399/* DB */ 1400{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1401 1402/* DC */ 1403{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1404 1405/* DD */ 1406{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1407 1408/* DE */ 1409{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1410 1411/* DF */ 1412{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1413 1414/* E0 */ 1415{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1416 1417/* E1 */ 1418{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1419 1420/* E2 */ 1421{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1422 1423/* E3 */ 1424{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1425 1426/* E4 */ 1427{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1428 1429/* E5 */ 1430{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1431 1432/* E6 */ 1433{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1434 1435/* E7 */ 1436{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1437 1438/* E8 */ 1439{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1440 1441/* E9 */ 1442{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1443 1444/* EA */ 1445{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1446 1447/* EB */ 1448{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1449 1450/* EC */ 1451{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1452 1453/* ED */ 1454{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1455 1456/* EE */ 1457{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1458 1459/* EF */ 1460{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1461 1462/* F0 */ 1463{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1464 1465/* F1 */ 1466{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1467 1468/* F2 */ 1469{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1470 1471/* F3 */ 1472{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1473 1474/* F4 */ 1475{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1476 1477/* F5 */ 1478{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1479 1480/* F6 */ 1481{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1482 1483/* F7 */ 1484{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1485 1486/* F8 */ 1487{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1488 1489/* F9 */ 1490{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1491 1492/* FA */ 1493{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1494 1495/* FB */ 1496{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1497 1498/* FC */ 1499{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1500 1501/* FD */ 1502{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1503 1504/* FE */ 1505{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1506 1507/* FF */ 1508{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE} 1509 1510}; 1511