ctl_cmd_table.c revision 288738
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 288738 2015-10-05 09:03:00Z 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_ALL_LUNS | 550 CTL_CMD_FLAG_ALLOW_ON_RESV | 551 CTL_CMD_FLAG_NO_SENSE | 552 CTL_CMD_FLAG_OK_ON_STOPPED | 553 CTL_CMD_FLAG_OK_ON_INOPERABLE | 554 CTL_CMD_FLAG_OK_ON_STANDBY | 555 CTL_CMD_FLAG_OK_ON_UNAVAIL | 556 CTL_CMD_FLAG_ALLOW_ON_PR_RESV, 557 CTL_LUN_PAT_NONE, 6, {0x01, 0, 0, 0xff, 0x07}}, 558 559/* 04 FORMAT UNIT */ 560{ctl_format, CTL_SERIDX_FORMAT, CTL_CMD_FLAG_OK_ON_SLUN | 561 CTL_CMD_FLAG_OK_ON_INOPERABLE | 562 CTL_FLAG_DATA_OUT, 563 CTL_LUN_PAT_NONE, 6, {0xff, 0, 0, 0, 0x07}}, 564 565/* 05 READ BLOCK LIMITS */ 566{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 567 568/* 06 */ 569{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 570 571/* 07 REASSIGN BLOCKS */ 572{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 573 574/* 08 READ(6) */ 575{ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN | 576 CTL_FLAG_DATA_IN | 577 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV, 578 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE, 6, {0x1f, 0xff, 0xff, 0xff, 0x07}}, 579 580/* 09 */ 581{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 582 583/* 0A WRITE(6) */ 584{ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN | 585 CTL_FLAG_DATA_OUT, 586 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE, 6, {0x1f, 0xff, 0xff, 0xff, 0x07}}, 587 588/* 0B SEEK(6) */ 589{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 590 591/* 0C */ 592{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 593 594/* 0D */ 595{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 596 597/* 0E */ 598{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 599 600/* 0F READ REVERSE(6) */ 601{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 602 603/* 10 WRITE FILEMARKS(6) */ 604{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 605 606/* 11 SPACE(6) */ 607{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 608 609/* 12 INQUIRY */ 610{ctl_inquiry, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_ALL_LUNS | 611 CTL_CMD_FLAG_ALLOW_ON_RESV | 612 CTL_CMD_FLAG_NO_SENSE | 613 CTL_CMD_FLAG_OK_ON_STOPPED | 614 CTL_CMD_FLAG_OK_ON_INOPERABLE | 615 CTL_CMD_FLAG_OK_ON_STANDBY | 616 CTL_CMD_FLAG_OK_ON_UNAVAIL | 617 CTL_FLAG_DATA_IN | 618 CTL_CMD_FLAG_ALLOW_ON_PR_RESV, 619 CTL_LUN_PAT_NONE, 6, {0xe1, 0xff, 0xff, 0xff, 0x07}}, 620 621/* 13 */ 622{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 623 624/* 14 RECOVER BUFFERED DATA */ 625{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 626 627/* 15 MODE SELECT(6) */ 628{ctl_mode_select, CTL_SERIDX_MD_SEL, CTL_CMD_FLAG_OK_ON_BOTH | 629 CTL_CMD_FLAG_OK_ON_STOPPED | 630 CTL_CMD_FLAG_OK_ON_INOPERABLE | 631 CTL_CMD_FLAG_OK_ON_STANDBY | 632 CTL_FLAG_DATA_OUT, 633 CTL_LUN_PAT_NONE, 6, {0x11, 0, 0, 0xff, 0x07}}, 634 635/* 16 RESERVE(6) */ 636{ctl_scsi_reserve, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV | 637 CTL_CMD_FLAG_OK_ON_BOTH | 638 CTL_CMD_FLAG_OK_ON_STOPPED | 639 CTL_CMD_FLAG_OK_ON_INOPERABLE | 640 CTL_CMD_FLAG_OK_ON_STANDBY | 641 CTL_FLAG_DATA_OUT, 642 CTL_LUN_PAT_NONE, 6, {0, 0, 0, 0, 0x07}}, 643 644/* 17 RELEASE(6) */ 645{ctl_scsi_release, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV | 646 CTL_CMD_FLAG_OK_ON_BOTH | 647 CTL_CMD_FLAG_OK_ON_STOPPED | 648 CTL_CMD_FLAG_OK_ON_INOPERABLE | 649 CTL_CMD_FLAG_OK_ON_STANDBY | 650 CTL_FLAG_DATA_NONE, 651 CTL_LUN_PAT_NONE, 6, {0, 0, 0, 0, 0x07}}, 652 653/* 18 COPY */ 654{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 655 656/* 19 ERASE(6) */ 657{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 658 659/* 1A MODE SENSE(6) */ 660{ctl_mode_sense, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH | 661 CTL_CMD_FLAG_OK_ON_STOPPED | 662 CTL_CMD_FLAG_OK_ON_INOPERABLE | 663 CTL_CMD_FLAG_OK_ON_STANDBY | 664 CTL_FLAG_DATA_IN | 665 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV, 666 CTL_LUN_PAT_NONE, 6, {0x08, 0xff, 0xff, 0xff, 0x07}}, 667 668/* 1B START STOP UNIT */ 669{ctl_start_stop, CTL_SERIDX_START, CTL_CMD_FLAG_OK_ON_SLUN | 670 CTL_CMD_FLAG_OK_ON_STOPPED | 671 CTL_CMD_FLAG_OK_ON_INOPERABLE | 672 CTL_FLAG_DATA_NONE | 673 CTL_CMD_FLAG_ALLOW_ON_PR_RESV, 674 CTL_LUN_PAT_NONE, 6, {0x01, 0, 0, 0x03, 0x07}}, 675 676/* 1C RECEIVE DIAGNOSTIC RESULTS */ 677{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 678 679/* 1D SEND DIAGNOSTIC */ 680{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 681 682/* 1E PREVENT ALLOW MEDIUM REMOVAL */ 683{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 684 685/* 1F */ 686{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 687 688/* 20 */ 689{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 690 691/* 21 */ 692{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 693 694/* 22 */ 695{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 696 697/* 23 */ 698{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 699 700/* 24 SET WINDOW */ 701{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 702 703/* 25 READ CAPACITY(10) */ 704{ctl_read_capacity, CTL_SERIDX_RD_CAP, CTL_CMD_FLAG_OK_ON_SLUN| 705 CTL_CMD_FLAG_OK_ON_STOPPED | 706 CTL_CMD_FLAG_OK_ON_INOPERABLE | 707 CTL_FLAG_DATA_IN | 708 CTL_CMD_FLAG_ALLOW_ON_PR_RESV, 709 CTL_LUN_PAT_READCAP, 10, {0, 0, 0, 0, 0, 0, 0, 0, 0x07}}, 710 711/* 26 */ 712{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 713 714/* 27 */ 715{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 716 717/* 28 READ(10) */ 718{ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN | 719 CTL_FLAG_DATA_IN | 720 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV, 721 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE, 722 10, {0x1a, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}}, 723 724/* 29 READ GENERATION */ 725{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 726 727/* 2A WRITE(10) */ 728{ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT, 729 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE, 730 10, {0x1a, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}}, 731 732/* 2B SEEK(10) */ 733{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 734 735/* 2C ERASE(10) */ 736{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 737 738/* 2D READ UPDATED BLOCK */ 739{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 740 741/* 2E WRITE AND VERIFY(10) */ 742{ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT, 743 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE, 744 10, {0x12, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}}, 745 746/* 2F VERIFY(10) */ 747{ctl_verify, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN | 748 CTL_FLAG_DATA_OUT | 749 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV, 750 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE, 751 10, {0x16, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}}, 752 753/* 30 SEARCH DATA HIGH(10) */ 754{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 755 756/* 31 SEARCH DATA EQUAL(10) */ 757{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 758 759/* 32 SEARCH DATA LOW(10) */ 760{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 761 762/* 33 SET LIMITS(10) */ 763{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 764 765/* 34 PRE-FETCH(10) */ 766{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 767 768/* 35 SYNCHRONIZE CACHE(10) */ 769{ctl_sync_cache, CTL_SERIDX_SYNC, CTL_CMD_FLAG_OK_ON_SLUN | 770 CTL_FLAG_DATA_NONE, 771 CTL_LUN_PAT_NONE, 772 10, {0x02, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}}, 773 774/* 36 LOCK UNLOCK CACHE(10) */ 775{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 776 777/* 37 READ DEFECT DATA(10) */ 778{ctl_read_defect, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_SLUN | 779 CTL_FLAG_DATA_IN | 780 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV, 781 CTL_LUN_PAT_NONE, 782 10, {0, 0x1f, 0, 0, 0, 0, 0xff, 0xff, 0x07}}, 783 784/* 38 MEDIUM SCAN */ 785{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 786 787/* 39 COMPARE */ 788{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 789 790/* 3A COPY AND VERIFY */ 791{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 792 793/* 3B WRITE BUFFER */ 794{ctl_write_buffer, CTL_SERIDX_MD_SEL, CTL_CMD_FLAG_OK_ON_BOTH | 795 CTL_CMD_FLAG_OK_ON_STOPPED | 796 CTL_CMD_FLAG_OK_ON_INOPERABLE | 797 CTL_CMD_FLAG_OK_ON_STANDBY | 798 CTL_FLAG_DATA_OUT, 799 CTL_LUN_PAT_NONE, 800 10, {0x1f, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07}}, 801 802/* 3C READ BUFFER */ 803{ctl_read_buffer, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH | 804 CTL_CMD_FLAG_OK_ON_STOPPED | 805 CTL_CMD_FLAG_OK_ON_INOPERABLE | 806 CTL_CMD_FLAG_OK_ON_STANDBY | 807 CTL_FLAG_DATA_IN | 808 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV, 809 CTL_LUN_PAT_NONE, 810 10, {0x1f, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07}}, 811 812/* 3D UPDATE BLOCK */ 813{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 814 815/* 3E READ LONG */ 816{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 817 818/* 3F WRITE LONG */ 819{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 820 821/* 40 CHANGE DEFINITION */ 822{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 823 824/* 41 WRITE SAME(10) */ 825{ctl_write_same, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN | 826 CTL_FLAG_DATA_OUT, 827 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE, 828 10, {0x1a, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}}, 829 830/* 42 READ SUB-CHANNEL / UNMAP */ 831{ctl_unmap, CTL_SERIDX_UNMAP, CTL_CMD_FLAG_OK_ON_SLUN | CTL_FLAG_DATA_OUT, 832 CTL_LUN_PAT_WRITE, 833 10, {1, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07}}, 834 835/* 43 READ TOC/PMA/ATIP */ 836{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 837 838/* 44 REPORT DENSITY SUPPORT */ 839{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 840 841/* 45 PLAY AUDIO(10) */ 842{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 843 844/* 46 GET CONFIGURATION */ 845{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 846 847/* 47 PLAY AUDIO MSF */ 848{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 849 850/* 48 PLAY AUDIO TRACK INDEX */ 851{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 852 853/* 49 PLAY TRACK RELATIVE(10) */ 854{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 855 856/* 4A GET EVENT STATUS NOTIFICATION */ 857{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 858 859/* 4B PAUSE/RESUME */ 860{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 861 862/* 4C LOG SELECT */ 863{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 864 865/* 4D LOG SENSE */ 866{ctl_log_sense, CTL_SERIDX_LOG_SNS, CTL_CMD_FLAG_OK_ON_SLUN | 867 CTL_FLAG_DATA_IN | 868 CTL_CMD_FLAG_ALLOW_ON_PR_RESV, 869 CTL_LUN_PAT_NONE, 10, {0, 0xff, 0xff, 0, 0xff, 0xff, 0xff, 0xff, 0x07} }, 870 871/* 4E STOP PLAY/SCAN */ 872{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 873 874/* 4F */ 875{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 876 877/* 50 XDWRITE(10) */ 878{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 879 880/* 51 XPWRITE(10) */ 881{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 882 883/* 52 XDREAD(10) */ 884{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 885 886/* 53 RESERVE TRACK */ 887{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 888 889/* 54 SEND OPC INFORMATION */ 890{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 891 892/* 55 MODE SELECT(10) */ 893{ctl_mode_select, CTL_SERIDX_MD_SEL, CTL_CMD_FLAG_OK_ON_BOTH | 894 CTL_CMD_FLAG_OK_ON_STOPPED | 895 CTL_CMD_FLAG_OK_ON_INOPERABLE | 896 CTL_CMD_FLAG_OK_ON_STANDBY | 897 CTL_FLAG_DATA_OUT, 898 CTL_LUN_PAT_NONE, 10, {0x11, 0, 0, 0, 0, 0, 0xff, 0xff, 0x07} }, 899 900/* 56 RESERVE(10) */ 901{ctl_scsi_reserve, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV | 902 CTL_CMD_FLAG_OK_ON_BOTH | 903 CTL_CMD_FLAG_OK_ON_STOPPED | 904 CTL_CMD_FLAG_OK_ON_INOPERABLE | 905 CTL_CMD_FLAG_OK_ON_STANDBY | 906 CTL_FLAG_DATA_OUT, 907 CTL_LUN_PAT_NONE, 10, {0x02, 0, 0xff, 0, 0, 0, 0xff, 0xff, 0x07} }, 908 909/* 57 RELEASE(10) */ 910{ctl_scsi_release, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV | 911 CTL_CMD_FLAG_OK_ON_BOTH | 912 CTL_CMD_FLAG_OK_ON_STOPPED | 913 CTL_CMD_FLAG_OK_ON_INOPERABLE | 914 CTL_CMD_FLAG_OK_ON_STANDBY | 915 CTL_FLAG_DATA_OUT, 916 CTL_LUN_PAT_NONE, 10, {0x02, 0, 0xff, 0, 0, 0, 0xff, 0xff, 0x07} }, 917 918/* 58 REPAIR TRACK */ 919{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 920 921/* 59 READ MASTER CUE */ 922{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 923 924/* 5A MODE SENSE(10) */ 925{ctl_mode_sense, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_BOTH | 926 CTL_CMD_FLAG_OK_ON_STOPPED | 927 CTL_CMD_FLAG_OK_ON_INOPERABLE | 928 CTL_CMD_FLAG_OK_ON_STANDBY | 929 CTL_FLAG_DATA_IN | 930 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV, 931 CTL_LUN_PAT_NONE, 10, {0x18, 0xff, 0xff, 0, 0, 0, 0xff, 0xff, 0x07} }, 932 933/* 5B CLOSE TRACK/SESSION */ 934{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 935 936/* 5C READ BUFFER CAPACITY */ 937{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 938 939/* 5D SEND CUE SHEET */ 940{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 941 942/* 5E PERSISTENT RESERVE IN */ 943{__DECONST(ctl_opfunc *, ctl_cmd_table_5e), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5, 944 CTL_LUN_PAT_NONE}, 945 946/* 5F PERSISTENT RESERVE OUT */ 947{__DECONST(ctl_opfunc *, ctl_cmd_table_5f), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5, 948 CTL_LUN_PAT_NONE}, 949 950/* 60 */ 951{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 952 953/* 61 */ 954{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 955 956/* 62 */ 957{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 958 959/* 63 */ 960{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 961 962/* 64 */ 963{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 964 965/* 65 */ 966{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 967 968/* 66 */ 969{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 970 971/* 67 */ 972{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 973 974/* 68 */ 975{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 976 977/* 69 */ 978{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 979 980/* 6A */ 981{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 982 983/* 6B */ 984{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 985 986/* 6C */ 987{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 988 989/* 6D */ 990{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 991 992/* 6E */ 993{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 994 995/* 6F */ 996{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 997 998/* 70 */ 999{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1000 1001/* 71 */ 1002{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1003 1004/* 72 */ 1005{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1006 1007/* 73 */ 1008{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1009 1010/* 74 */ 1011{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1012 1013/* 75 */ 1014{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1015 1016/* 76 */ 1017{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1018 1019/* 77 */ 1020{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1021 1022/* 78 */ 1023{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1024 1025/* 79 */ 1026{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1027 1028/* 7A */ 1029{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1030 1031/* 7B */ 1032{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1033 1034/* 7C */ 1035{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1036 1037/* 7D */ 1038{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1039 1040/* 7E */ 1041{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1042 1043/* 7F */ 1044{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1045 1046/* 80 XDWRITE EXTENDED(16) */ 1047{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1048 1049/* 81 REBUILD(16) */ 1050{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1051 1052/* 82 REGENERATE(16) */ 1053{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1054 1055/* 83 EXTENDED COPY */ 1056{__DECONST(ctl_opfunc *, ctl_cmd_table_83), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5, 1057 CTL_LUN_PAT_NONE}, 1058 1059/* 84 RECEIVE COPY RESULTS */ 1060{__DECONST(ctl_opfunc *, ctl_cmd_table_84), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5, 1061 CTL_LUN_PAT_NONE}, 1062 1063/* 85 */ 1064{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1065 1066/* 86 ACCESS CONTROL IN */ 1067{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1068 1069/* 87 ACCESS CONTROL OUT */ 1070{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1071 1072/* 88 READ(16) */ 1073{ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN | CTL_FLAG_DATA_IN | 1074 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV, 1075 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE, 1076 16, {0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1077 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}}, 1078 1079/* 89 COMPARE AND WRITE */ 1080{ctl_cnw, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT, 1081 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE, 1082 16, {0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1083 0xff, 0xff, 0, 0, 0, 0xff, 0, 0x07}}, 1084 1085/* 8A WRITE(16) */ 1086{ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT, 1087 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE, 1088 16, {0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1089 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}}, 1090 1091/* 8B */ 1092{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1093 1094/* 8C READ ATTRIBUTE */ 1095{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1096 1097/* 8D WRITE ATTRIBUTE */ 1098{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1099 1100/* 8E WRITE AND VERIFY(16) */ 1101{ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT, 1102 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE, 1103 16, {0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1104 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}}, 1105 1106/* 8F VERIFY(16) */ 1107{ctl_verify, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN | 1108 CTL_FLAG_DATA_OUT | 1109 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV, 1110 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE, 1111 16, {0x16, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1112 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}}, 1113 1114/* 90 PRE-FETCH(16) */ 1115{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1116 1117/* 91 SYNCHRONIZE CACHE(16) */ 1118{ctl_sync_cache, CTL_SERIDX_SYNC, CTL_CMD_FLAG_OK_ON_SLUN | 1119 CTL_FLAG_DATA_NONE, 1120 CTL_LUN_PAT_NONE, 1121 16, {0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1122 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}}, 1123 1124/* 92 LOCK UNLOCK CACHE(16) */ 1125{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1126 1127/* 93 WRITE SAME(16) */ 1128{ctl_write_same, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN | 1129 CTL_FLAG_DATA_OUT, 1130 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE, 1131 16, {0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1132 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}}, 1133 1134/* 94 */ 1135{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1136 1137/* 95 */ 1138{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1139 1140/* 96 */ 1141{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1142 1143/* 97 */ 1144{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1145 1146/* 98 */ 1147{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1148 1149/* 99 */ 1150{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1151 1152/* 9A */ 1153{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1154 1155/* 9B */ 1156{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1157 1158/* 9C WRITE ATOMIC (16) */ 1159{ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT, 1160 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE, 1161 16, {0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1162 0xff, 0xff, 0, 0, 0xff, 0xff, 0, 0x07}}, 1163 1164/* 9D */ 1165{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1166 1167/* 9E SERVICE ACTION IN(16) */ 1168{__DECONST(ctl_opfunc *, ctl_cmd_table_9e), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5, 1169 CTL_LUN_PAT_NONE}, 1170 1171/* 9F SERVICE ACTION OUT(16) */ 1172{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1173 1174/* A0 REPORT LUNS */ 1175{ctl_report_luns, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_ALL_LUNS | 1176 CTL_CMD_FLAG_ALLOW_ON_RESV | 1177 CTL_CMD_FLAG_NO_SENSE | 1178 CTL_CMD_FLAG_OK_ON_STOPPED | 1179 CTL_CMD_FLAG_OK_ON_INOPERABLE | 1180 CTL_CMD_FLAG_OK_ON_STANDBY | 1181 CTL_CMD_FLAG_OK_ON_UNAVAIL | 1182 CTL_FLAG_DATA_IN | 1183 CTL_CMD_FLAG_ALLOW_ON_PR_RESV, 1184 CTL_LUN_PAT_NONE, 1185 12, {0, 0xff, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}}, 1186 1187/* A1 BLANK */ 1188{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1189 1190/* A2 SEND EVENT */ 1191{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1192 1193/* A3 MAINTENANCE IN */ 1194{__DECONST(ctl_opfunc *, ctl_cmd_table_a3), CTL_SERIDX_INVLD, CTL_CMD_FLAG_SA5, 1195 CTL_LUN_PAT_NONE}, 1196 1197/* A4 MAINTENANCE OUT */ 1198{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1199 1200/* A5 MOVE MEDIUM */ 1201{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1202 1203/* A6 EXCHANGE MEDIUM */ 1204{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1205 1206/* A7 MOVE MEDIUM ATTACHED */ 1207{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1208 1209/* A8 READ(12) */ 1210{ctl_read_write, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN | CTL_FLAG_DATA_IN | 1211 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV, 1212 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE, 1213 12, {0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}}, 1214 1215/* A9 PLAY TRACK RELATIVE(12) */ 1216{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1217 1218/* AA WRITE(12) */ 1219{ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT, 1220 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE, 1221 12, {0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}}, 1222 1223/* AB SERVICE ACTION IN(12) */ 1224{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1225 1226/* AC ERASE(12) */ 1227{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1228 1229/* AD READ DVD STRUCTURE */ 1230{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1231 1232/* AE WRITE AND VERIFY(12) */ 1233{ctl_read_write, CTL_SERIDX_WRITE, CTL_CMD_FLAG_OK_ON_SLUN| CTL_FLAG_DATA_OUT, 1234 CTL_LUN_PAT_WRITE | CTL_LUN_PAT_RANGE, 1235 12, {0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}}, 1236 1237/* AF VERIFY(12) */ 1238{ctl_verify, CTL_SERIDX_READ, CTL_CMD_FLAG_OK_ON_SLUN | 1239 CTL_FLAG_DATA_OUT | 1240 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV, 1241 CTL_LUN_PAT_READ | CTL_LUN_PAT_RANGE, 1242 12, {0x16, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}}, 1243 1244/* B0 SEARCH DATA HIGH(12) */ 1245{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1246 1247/* B1 SEARCH DATA EQUAL(12) */ 1248{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1249 1250/* B2 SEARCH DATA LOW(12) */ 1251{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1252 1253/* B3 SET LIMITS(12) */ 1254{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1255 1256/* B4 READ ELEMENT STATUS ATTACHED */ 1257{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1258 1259/* B5 REQUEST VOLUME ELEMENT ADDRESS */ 1260{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1261 1262/* B6 SEND VOLUME TAG */ 1263{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1264 1265/* B7 READ DEFECT DATA(12) */ 1266{ctl_read_defect, CTL_SERIDX_MD_SNS, CTL_CMD_FLAG_OK_ON_SLUN | 1267 CTL_FLAG_DATA_IN | 1268 CTL_CMD_FLAG_ALLOW_ON_PR_WRESV, 1269 CTL_LUN_PAT_NONE, 1270 12, {0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}}, 1271 1272/* B8 READ ELEMENT STATUS */ 1273{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1274 1275/* B9 READ CD MSF */ 1276{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1277 1278/* BA REDUNDANCY GROUP IN */ 1279{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1280 1281/* BB REDUNDANCY GROUP OUT */ 1282{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1283 1284/* BC SPARE IN */ 1285{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1286 1287/* BD SPARE OUT */ 1288{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1289 1290/* BE VOLUME SET IN */ 1291{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1292 1293/* BF VOLUME SET OUT */ 1294{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1295 1296/* C0 */ 1297{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1298 1299/* C1 */ 1300{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1301 1302/* C2 */ 1303{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1304 1305/* C3 */ 1306{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1307 1308/* C4 */ 1309{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1310 1311/* C5 */ 1312{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1313 1314/* C6 */ 1315{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1316 1317/* C7 */ 1318{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1319 1320/* C8 */ 1321{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1322 1323/* C9 */ 1324{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1325 1326/* CA */ 1327{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1328 1329/* CB */ 1330{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1331 1332/* CC */ 1333{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1334 1335/* CD */ 1336{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1337 1338/* CE */ 1339{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1340 1341/* CF */ 1342{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1343 1344/* D0 */ 1345{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1346 1347/* D1 */ 1348{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1349 1350/* D2 */ 1351{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1352 1353/* D3 */ 1354{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1355 1356/* D4 */ 1357{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1358 1359/* D5 */ 1360{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1361 1362/* D6 */ 1363{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1364 1365/* D7 */ 1366{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1367 1368/* D8 */ 1369{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1370 1371/* D9 */ 1372{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1373 1374/* DA */ 1375{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1376 1377/* DB */ 1378{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1379 1380/* DC */ 1381{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1382 1383/* DD */ 1384{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1385 1386/* DE */ 1387{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1388 1389/* DF */ 1390{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1391 1392/* E0 */ 1393{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1394 1395/* E1 */ 1396{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1397 1398/* E2 */ 1399{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1400 1401/* E3 */ 1402{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1403 1404/* E4 */ 1405{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1406 1407/* E5 */ 1408{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1409 1410/* E6 */ 1411{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1412 1413/* E7 */ 1414{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1415 1416/* E8 */ 1417{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1418 1419/* E9 */ 1420{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1421 1422/* EA */ 1423{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1424 1425/* EB */ 1426{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1427 1428/* EC */ 1429{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1430 1431/* ED */ 1432{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1433 1434/* EE */ 1435{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1436 1437/* EF */ 1438{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1439 1440/* F0 */ 1441{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1442 1443/* F1 */ 1444{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1445 1446/* F2 */ 1447{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1448 1449/* F3 */ 1450{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1451 1452/* F4 */ 1453{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1454 1455/* F5 */ 1456{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1457 1458/* F6 */ 1459{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1460 1461/* F7 */ 1462{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1463 1464/* F8 */ 1465{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1466 1467/* F9 */ 1468{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1469 1470/* FA */ 1471{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1472 1473/* FB */ 1474{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1475 1476/* FC */ 1477{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1478 1479/* FD */ 1480{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1481 1482/* FE */ 1483{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE}, 1484 1485/* FF */ 1486{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE} 1487 1488}; 1489