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