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