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