1 /*- 2 * Structure and function declarations for the 3 * SCSI Sequential Access Peripheral driver for CAM. 4 * 5 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD 6 * 7 * Copyright (c) 1999, 2000 Matthew Jacob 8 * Copyright (c) 2013, 2014, 2015 Spectra Logic Corporation 9 * All rights reserved. 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions 13 * are met: 14 * 1. Redistributions of source code must retain the above copyright 15 * notice, this list of conditions, and the following disclaimer, 16 * without modification, immediately at the beginning of the file. 17 * 2. The name of the author may not be used to endorse or promote products 18 * derived from this software without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 21 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR 24 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30 * SUCH DAMAGE. 31 * 32 * $FreeBSD$ 33 */ 34 35 #ifndef _SCSI_SCSI_SA_H 36 #define _SCSI_SCSI_SA_H 1 37 38 #include <sys/cdefs.h> 39 40 struct scsi_read_block_limits 41 { 42 u_int8_t opcode; 43 u_int8_t byte2; 44 u_int8_t unused[3]; 45 u_int8_t control; 46 }; 47 48 struct scsi_read_block_limits_data 49 { 50 u_int8_t gran; 51 #define RBL_GRAN_MASK 0x1F 52 #define RBL_GRAN(rblim) ((rblim)->gran & RBL_GRAN_MASK) 53 u_int8_t maximum[3]; 54 u_int8_t minimum[2]; 55 }; 56 57 struct scsi_sa_rw 58 { 59 u_int8_t opcode; 60 u_int8_t sli_fixed; 61 #define SAR_SLI 0x02 62 #define SARW_FIXED 0x01 63 u_int8_t length[3]; 64 u_int8_t control; 65 }; 66 67 struct scsi_load_unload 68 { 69 u_int8_t opcode; 70 u_int8_t immediate; 71 #define SLU_IMMED 0x01 72 u_int8_t reserved[2]; 73 u_int8_t eot_reten_load; 74 #define SLU_EOT 0x04 75 #define SLU_RETEN 0x02 76 #define SLU_LOAD 0x01 77 u_int8_t control; 78 }; 79 80 struct scsi_rewind 81 { 82 u_int8_t opcode; 83 u_int8_t immediate; 84 #define SREW_IMMED 0x01 85 u_int8_t reserved[3]; 86 u_int8_t control; 87 }; 88 89 typedef enum { 90 SS_BLOCKS, 91 SS_FILEMARKS, 92 SS_SEQFILEMARKS, 93 SS_EOD, 94 SS_SETMARKS, 95 SS_SEQSETMARKS 96 } scsi_space_code; 97 98 struct scsi_space 99 { 100 u_int8_t opcode; 101 u_int8_t code; 102 #define SREW_IMMED 0x01 103 u_int8_t count[3]; 104 u_int8_t control; 105 }; 106 107 struct scsi_write_filemarks 108 { 109 u_int8_t opcode; 110 u_int8_t byte2; 111 #define SWFMRK_IMMED 0x01 112 #define SWFMRK_WSMK 0x02 113 u_int8_t num_marks[3]; 114 u_int8_t control; 115 }; 116 117 /* 118 * Reserve and release unit have the same exact cdb format, but different 119 * opcodes. 120 */ 121 struct scsi_reserve_release_unit 122 { 123 u_int8_t opcode; 124 u_int8_t lun_thirdparty; 125 #define SRRU_LUN_MASK 0xE0 126 #define SRRU_3RD_PARTY 0x10 127 #define SRRU_3RD_SHAMT 1 128 #define SRRU_3RD_MASK 0xE 129 u_int8_t reserved[3]; 130 u_int8_t control; 131 }; 132 133 /* 134 * Erase a tape 135 */ 136 struct scsi_erase 137 { 138 u_int8_t opcode; 139 u_int8_t lun_imm_long; 140 #define SE_LUN_MASK 0xE0 141 #define SE_LONG 0x1 142 #define SE_IMMED 0x2 143 u_int8_t reserved[3]; 144 u_int8_t control; 145 }; 146 147 /* 148 * Set tape capacity. 149 */ 150 struct scsi_set_capacity 151 { 152 u_int8_t opcode; 153 u_int8_t byte1; 154 #define SA_SSC_IMMED 0x01 155 u_int8_t reserved; 156 u_int8_t cap_proportion[2]; 157 u_int8_t control; 158 }; 159 160 /* 161 * Format tape media. The CDB opcode is the same as the disk-specific 162 * FORMAT UNIT command, but the fields are different inside the CDB. Thus 163 * the reason for a separate definition here. 164 */ 165 struct scsi_format_medium 166 { 167 u_int8_t opcode; 168 u_int8_t byte1; 169 #define SFM_IMMED 0x01 170 #define SFM_VERIFY 0x02 171 u_int8_t byte2; 172 #define SFM_FORMAT_DEFAULT 0x00 173 #define SFM_FORMAT_PARTITION 0x01 174 #define SFM_FORMAT_DEF_PART 0x02 175 #define SFM_FORMAT_MASK 0x0f 176 u_int8_t length[2]; 177 u_int8_t control; 178 }; 179 180 struct scsi_allow_overwrite 181 { 182 u_int8_t opcode; 183 u_int8_t reserved1; 184 u_int8_t allow_overwrite; 185 #define SAO_ALLOW_OVERWRITE_DISABLED 0x00 186 #define SAO_ALLOW_OVERWRITE_CUR_POS 0x01 187 #define SAO_ALLOW_OVERWRITE_FORMAT 0x02 188 u_int8_t partition; 189 u_int8_t logical_id[8]; 190 u_int8_t reserved2[3]; 191 u_int8_t control; 192 }; 193 194 /* 195 * Dev specific mode page masks. 196 */ 197 #define SMH_SA_WP 0x80 198 #define SMH_SA_BUF_MODE_MASK 0x70 199 #define SMH_SA_BUF_MODE_NOBUF 0x00 200 #define SMH_SA_BUF_MODE_SIBUF 0x10 /* Single-Initiator buffering */ 201 #define SMH_SA_BUF_MODE_MIBUF 0x20 /* Multi-Initiator buffering */ 202 #define SMH_SA_SPEED_MASK 0x0F 203 #define SMH_SA_SPEED_DEFAULT 0x00 204 205 /* 206 * Sequential-access specific mode page numbers. 207 */ 208 #define SA_DEVICE_CONFIGURATION_PAGE 0x10 209 #define SA_MEDIUM_PARTITION_PAGE_1 0x11 210 #define SA_MEDIUM_PARTITION_PAGE_2 0x12 211 #define SA_MEDIUM_PARTITION_PAGE_3 0x13 212 #define SA_MEDIUM_PARTITION_PAGE_4 0x14 213 #define SA_DATA_COMPRESSION_PAGE 0x0f /* SCSI-3 */ 214 215 /* 216 * Mode page definitions. 217 */ 218 219 /* See SCSI-II spec 9.3.3.1 */ 220 struct scsi_dev_conf_page { 221 u_int8_t pagecode; /* 0x10 */ 222 u_int8_t pagelength; /* 0x0e */ 223 u_int8_t byte2; /* CAP, CAF, Active Format */ 224 u_int8_t active_partition; 225 u_int8_t wb_full_ratio; 226 u_int8_t rb_empty_ratio; 227 u_int8_t wrdelay_time[2]; 228 u_int8_t byte8; 229 #define SA_DBR 0x80 /* data buffer recovery */ 230 #define SA_BIS 0x40 /* block identifiers supported */ 231 #define SA_RSMK 0x20 /* report setmarks */ 232 #define SA_AVC 0x10 /* automatic velocity control */ 233 #define SA_SOCF_MASK 0x0c /* stop on consecutive formats */ 234 #define SA_RBO 0x02 /* recover buffer order */ 235 #define SA_REW 0x01 /* report early warning */ 236 u_int8_t gap_size; 237 u_int8_t byte10; 238 /* from SCSI-3: SSC-4 Working draft (2/14) 8.3.3 */ 239 #define SA_EOD_DEF_MASK 0xe0 /* EOD defined */ 240 #define SA_EEG 0x10 /* Enable EOD Generation */ 241 #define SA_SEW 0x08 /* Synchronize at Early Warning */ 242 #define SA_SOFT_WP 0x04 /* Software Write Protect */ 243 #define SA_BAML 0x02 /* Block Address Mode Lock */ 244 #define SA_BAM 0x01 /* Block Address Mode */ 245 u_int8_t ew_bufsize[3]; 246 u_int8_t sel_comp_alg; 247 #define SA_COMP_NONE 0x00 248 #define SA_COMP_DEFAULT 0x01 249 /* the following is 'reserved' in SCSI-2 but is defined in SSC-r22 */ 250 u_int8_t extra_wp; 251 #define SA_ASOC_WP 0x04 /* Associated Write Protect */ 252 #define SA_PERS_WP 0x02 /* Persistent Write Protect */ 253 #define SA_PERM_WP 0x01 /* Permanent Write Protect */ 254 }; 255 256 /* from SCSI-3: SSC-Rev10 (6/97) */ 257 struct scsi_data_compression_page { 258 u_int8_t page_code; /* 0x0f */ 259 u_int8_t page_length; /* 0x0e */ 260 u_int8_t dce_and_dcc; 261 #define SA_DCP_DCE 0x80 /* Data compression enable */ 262 #define SA_DCP_DCC 0x40 /* Data compression capable */ 263 u_int8_t dde_and_red; 264 #define SA_DCP_DDE 0x80 /* Data decompression enable */ 265 #define SA_DCP_RED_MASK 0x60 /* Report Exception on Decomp. */ 266 #define SA_DCP_RED_SHAMT 5 267 #define SA_DCP_RED_0 0x00 268 #define SA_DCP_RED_1 0x20 269 #define SA_DCP_RED_2 0x40 270 u_int8_t comp_algorithm[4]; 271 u_int8_t decomp_algorithm[4]; 272 u_int8_t reserved[4]; 273 }; 274 275 typedef union { 276 struct { u_int8_t pagecode, pagelength; } hdr; 277 struct scsi_dev_conf_page dconf; 278 struct scsi_data_compression_page dcomp; 279 } sa_comp_t; 280 281 /* 282 * Control Data Protection subpage. This is as defined in SSC3r03. 283 */ 284 struct scsi_control_data_prot_subpage { 285 uint8_t page_code; 286 #define SA_CTRL_DP_PAGE_CODE 0x0a 287 uint8_t subpage_code; 288 #define SA_CTRL_DP_SUBPAGE_CODE 0xf0 289 uint8_t length[2]; 290 uint8_t prot_method; 291 #define SA_CTRL_DP_NO_LBP 0x00 292 #define SA_CTRL_DP_REED_SOLOMON 0x01 293 #define SA_CTRL_DP_METHOD_MAX 0xff 294 uint8_t pi_length; 295 #define SA_CTRL_DP_PI_LENGTH_MASK 0x3f 296 #define SA_CTRL_DP_RS_LENGTH 4 297 uint8_t prot_bits; 298 #define SA_CTRL_DP_LBP_W 0x80 299 #define SA_CTRL_DP_LBP_R 0x40 300 #define SA_CTRL_DP_RBDP 0x20 301 uint8_t reserved[]; 302 }; 303 304 /* 305 * This is the Read/Write Control mode page used on IBM Enterprise Tape 306 * Drives. They are known as 3592, TS, or Jaguar drives. The SCSI inquiry 307 * data will show a Product ID "03592XXX", where XXX is 'J1A', 'E05' (TS1120), 308 * 'E06' (TS1130), 'E07' (TS1140) or 'E08' (TS1150). 309 * 310 * This page definition is current as of the 3592 SCSI Reference v6, 311 * released on December 16th, 2014. 312 */ 313 struct scsi_tape_ibm_rw_control { 314 uint8_t page_code; 315 #define SA_IBM_RW_CTRL_PAGE_CODE 0x25 316 uint8_t page_length; 317 uint8_t ignore_seq_checks; 318 #define SA_IBM_RW_CTRL_LOC_IGNORE_SEQ 0x04 319 #define SA_IBM_RW_CTRL_SPC_BLK_IGNORE_SEQ 0x02 320 #define SA_IBM_RW_CTRL_SPC_FM_IGNORE_SEQ 0x01 321 uint8_t ignore_data_checks; 322 #define SA_IBM_RW_CTRL_LOC_IGNORE_DATA 0x04 323 #define SA_IBM_RW_CTRL_SPC_BLK_IGNORE_DATA 0x02 324 #define SA_IBM_RW_CTRL_SPC_FM_IGNORE_DATA 0x01 325 uint8_t reserved1; 326 uint8_t leop_method; 327 #define SA_IBM_RW_CTRL_LEOP_DEFAULT 0x00 328 #define SA_IBM_RW_CTRL_LEOP_MAX_CAP 0x01 329 #define SA_IBM_RW_CTRL_LEOP_CONST_CAP 0x02 330 uint8_t leop_ew[2]; 331 uint8_t byte8; 332 #define SA_IBM_RW_CTRL_DISABLE_FASTSYNC 0x80 333 #define SA_IBM_RW_CTRL_DISABLE_SKIPSYNC 0x40 334 #define SA_IBM_RW_CTRL_DISABLE_CROSS_EOD 0x08 335 #define SA_IBM_RW_CTRL_DISABLE_CROSS_PERM_ERR 0x04 336 #define SA_IBM_RW_CTRL_REPORT_SEG_EW 0x02 337 #define SA_IBM_RW_CTRL_REPORT_HOUSEKEEPING_ERR 0x01 338 uint8_t default_write_dens_bop_0; 339 uint8_t pending_write_dens_bop_0; 340 uint8_t reserved2[21]; 341 }; 342 343 struct scsi_tape_read_position { 344 u_int8_t opcode; /* READ_POSITION */ 345 u_int8_t byte1; /* set LSB to read hardware block pos */ 346 #define SA_RPOS_SHORT_FORM 0x00 347 #define SA_RPOS_SHORT_VENDOR 0x01 348 #define SA_RPOS_LONG_FORM 0x06 349 #define SA_RPOS_EXTENDED_FORM 0x08 350 u_int8_t reserved[5]; 351 u_int8_t length[2]; 352 u_int8_t control; 353 }; 354 355 struct scsi_tape_position_data { /* Short Form */ 356 u_int8_t flags; 357 #define SA_RPOS_BOP 0x80 /* Beginning of Partition */ 358 #define SA_RPOS_EOP 0x40 /* End of Partition */ 359 #define SA_RPOS_BCU 0x20 /* Block Count Unknown (SCSI3) */ 360 #define SA_RPOS_BYCU 0x10 /* Byte Count Unknown (SCSI3) */ 361 #define SA_RPOS_BPU 0x04 /* Block Position Unknown */ 362 #define SA_RPOS_PERR 0x02 /* Position Error (SCSI3) */ 363 #define SA_RPOS_BPEW 0x01 /* Beyond Programmable Early Warning */ 364 #define SA_RPOS_UNCERTAIN SA_RPOS_BPU 365 u_int8_t partition; 366 u_int8_t reserved[2]; 367 u_int8_t firstblk[4]; 368 u_int8_t lastblk[4]; 369 u_int8_t reserved2; 370 u_int8_t nbufblk[3]; 371 u_int8_t nbufbyte[4]; 372 }; 373 374 struct scsi_tape_position_long_data { 375 u_int8_t flags; 376 #define SA_RPOS_LONG_BOP 0x80 /* Beginning of Partition */ 377 #define SA_RPOS_LONG_EOP 0x40 /* End of Partition */ 378 #define SA_RPOS_LONG_MPU 0x08 /* Mark Position Unknown */ 379 #define SA_RPOS_LONG_LONU 0x04 /* Logical Object Number Unknown */ 380 #define SA_RPOS_LONG_BPEW 0x01 /* Beyond Programmable Early Warning */ 381 u_int8_t reserved[3]; 382 u_int8_t partition[4]; 383 u_int8_t logical_object_num[8]; 384 u_int8_t logical_file_num[8]; 385 u_int8_t set_id[8]; 386 }; 387 388 struct scsi_tape_position_ext_data { 389 u_int8_t flags; 390 #define SA_RPOS_EXT_BOP 0x80 /* Beginning of Partition */ 391 #define SA_RPOS_EXT_EOP 0x40 /* End of Partition */ 392 #define SA_RPOS_EXT_LOCU 0x20 /* Logical Object Count Unknown */ 393 #define SA_RPOS_EXT_BYCU 0x10 /* Byte Count Unknown */ 394 #define SA_RPOS_EXT_LOLU 0x04 /* Logical Object Location Unknown */ 395 #define SA_RPOS_EXT_PERR 0x02 /* Position Error */ 396 #define SA_RPOS_EXT_BPEW 0x01 /* Beyond Programmable Early Warning */ 397 u_int8_t partition; 398 u_int8_t length[2]; 399 u_int8_t reserved; 400 u_int8_t num_objects[3]; 401 u_int8_t first_object[8]; 402 u_int8_t last_object[8]; 403 u_int8_t bytes_in_buffer[8]; 404 }; 405 406 struct scsi_tape_locate { 407 u_int8_t opcode; 408 u_int8_t byte1; 409 #define SA_SPOS_IMMED 0x01 410 #define SA_SPOS_CP 0x02 411 #define SA_SPOS_BT 0x04 412 u_int8_t reserved1; 413 u_int8_t blkaddr[4]; 414 #define SA_SPOS_MAX_BLK 0xffffffff 415 u_int8_t reserved2; 416 u_int8_t partition; 417 u_int8_t control; 418 }; 419 420 struct scsi_locate_16 { 421 u_int8_t opcode; 422 u_int8_t byte1; 423 #define SA_LC_IMMEDIATE 0x01 424 #define SA_LC_CP 0x02 425 #define SA_LC_DEST_TYPE_MASK 0x38 426 #define SA_LC_DEST_TYPE_SHIFT 3 427 #define SA_LC_DEST_OBJECT 0x00 428 #define SA_LC_DEST_FILE 0x01 429 #define SA_LC_DEST_SET 0x02 430 #define SA_LC_DEST_EOD 0x03 431 u_int8_t byte2; 432 #define SA_LC_BAM_IMPLICIT 0x00 433 #define SA_LC_BAM_EXPLICIT 0x01 434 u_int8_t partition; 435 u_int8_t logical_id[8]; 436 u_int8_t reserved[3]; 437 u_int8_t control; 438 }; 439 440 struct scsi_report_density_support { 441 u_int8_t opcode; 442 u_int8_t byte1; 443 #define SRDS_MEDIA 0x01 444 #define SRDS_MEDIUM_TYPE 0x02 445 u_int8_t reserved[5]; 446 u_int8_t length[2]; 447 #define SRDS_MAX_LENGTH 0xffff 448 u_int8_t control; 449 }; 450 451 struct scsi_density_hdr { 452 u_int8_t length[2]; 453 u_int8_t reserved[2]; 454 u_int8_t descriptor[]; 455 }; 456 457 struct scsi_density_data { 458 u_int8_t primary_density_code; 459 u_int8_t secondary_density_code; 460 u_int8_t byte2; 461 #define SDD_DLV 0x01 462 #define SDD_DEFLT 0x20 463 #define SDD_DUP 0x40 464 #define SDD_WRTOK 0x80 465 u_int8_t length[2]; 466 #define SDD_DEFAULT_LENGTH 52 467 u_int8_t bits_per_mm[3]; 468 u_int8_t media_width[2]; 469 u_int8_t tracks[2]; 470 u_int8_t capacity[4]; 471 u_int8_t assigning_org[8]; 472 u_int8_t density_name[8]; 473 u_int8_t description[20]; 474 }; 475 476 struct scsi_medium_type_data { 477 u_int8_t medium_type; 478 u_int8_t reserved1; 479 u_int8_t length[2]; 480 #define SMTD_DEFAULT_LENGTH 52 481 u_int8_t num_density_codes; 482 u_int8_t primary_density_codes[9]; 483 u_int8_t media_width[2]; 484 u_int8_t medium_length[2]; 485 u_int8_t reserved2[2]; 486 u_int8_t assigning_org[8]; 487 u_int8_t medium_type_name[8]; 488 u_int8_t description[20]; 489 }; 490 491 /* 492 * Manufacturer-assigned Serial Number VPD page. 493 * Current as of SSC-5r03, 28 September 2016. 494 */ 495 struct scsi_vpd_mfg_serial_number 496 { 497 u_int8_t device; 498 u_int8_t page_code; 499 #define SVPD_MFG_SERIAL_NUMBER_PAGE_CODE 0xB1 500 u_int8_t page_length[2]; 501 u_int8_t mfg_serial_num[]; 502 }; 503 504 /* 505 * Security Protocol Specific values for the Tape Data Encryption protocol 506 * (0x20) used with SECURITY PROTOCOL IN. See below for values used with 507 * SECURITY PROTOCOL OUT. Current as of SSC4r03. 508 */ 509 #define TDE_IN_SUPPORT_PAGE 0x0000 510 #define TDE_OUT_SUPPORT_PAGE 0x0001 511 #define TDE_DATA_ENC_CAP_PAGE 0x0010 512 #define TDE_SUPPORTED_KEY_FORMATS_PAGE 0x0011 513 #define TDE_DATA_ENC_MAN_CAP_PAGE 0x0012 514 #define TDE_DATA_ENC_STATUS_PAGE 0x0020 515 #define TDE_NEXT_BLOCK_ENC_STATUS_PAGE 0x0021 516 #define TDE_GET_ENC_MAN_ATTR_PAGE 0x0022 517 #define TDE_RANDOM_NUM_PAGE 0x0030 518 #define TDE_KEY_WRAP_PK_PAGE 0x0031 519 520 /* 521 * Tape Data Encryption protocol pages used with SECURITY PROTOCOL IN and 522 * SECURITY PROTOCOL OUT. 523 */ 524 /* 525 * Tape Data Encryption In Support page (0x0000). 526 */ 527 struct tde_in_support_page { 528 uint8_t page_code[2]; 529 uint8_t page_length[2]; 530 uint8_t page_codes[]; 531 }; 532 533 /* 534 * Tape Data Encryption Out Support page (0x0001). 535 */ 536 struct tde_out_support_page { 537 uint8_t page_code[2]; 538 uint8_t page_length[2]; 539 uint8_t page_codes[]; 540 }; 541 542 /* 543 * Logical block encryption algorithm descriptor. This is reported in the 544 * Data Encryption Capabilities page. 545 */ 546 struct tde_block_enc_alg_desc { 547 uint8_t alg_index; 548 uint8_t reserved1; 549 uint8_t desc_length[2]; 550 uint8_t byte4; 551 #define TDE_BEA_AVFMV 0x80 552 #define TDE_BEA_SDK_C 0x40 553 #define TDE_BEA_MAC_C 0x20 554 #define TDE_BEA_DELB_C 0x10 555 #define TDE_BEA_DECRYPT_C_MASK 0x0c 556 #define TDE_BEA_DECRYPT_C_EXT 0x0c 557 #define TDE_BEA_DECRYPT_C_HARD 0x08 558 #define TDE_BEA_DECRYPT_C_SOFT 0x04 559 #define TDE_BEA_DECRYPT_C_NO_CAP 0x00 560 #define TDE_BEA_ENCRYPT_C_MASK 0x03 561 #define TDE_BEA_ENCRYPT_C_EXT 0x03 562 #define TDE_BEA_ENCRYPT_C_HARD 0x02 563 #define TDE_BEA_ENCRYPT_C_SOFT 0x01 564 #define TDE_BEA_ENCRYPT_C_NO_CAP 0x00 565 uint8_t byte5; 566 #define TDE_BEA_AVFCLP_MASK 0xc0 567 #define TDE_BEA_AVFCLP_VALID 0x80 568 #define TDE_BEA_AVFCLP_NOT_VALID 0x40 569 #define TDE_BEA_AVFCLP_NOT_APP 0x00 570 #define TDE_BEA_NONCE_C_MASK 0x30 571 #define TDE_BEA_NONCE_C_SUPPORTED 0x30 572 #define TDE_BEA_NONCE_C_PROVIDED 0x20 573 #define TDE_BEA_NONCE_C_GENERATED 0x10 574 #define TDE_BEA_NONCE_C_NOT_REQUIRED 0x00 575 #define TDE_BEA_KADF_C 0x08 576 #define TDE_BEA_VCELB_C 0x04 577 #define TDE_BEA_UKADF 0x02 578 #define TDE_BEA_AKADF 0x01 579 uint8_t max_unauth_key_bytes[2]; 580 uint8_t max_auth_key_bytes[2]; 581 uint8_t lbe_key_size[2]; 582 uint8_t byte12; 583 #define TDE_BEA_DKAD_C_MASK 0xc0 584 #define TDE_BEA_DKAD_C_CAPABLE 0xc0 585 #define TDE_BEA_DKAD_C_NOT_ALLOWED 0x80 586 #define TDE_BEA_DKAD_C_REQUIRED 0x40 587 #define TDE_BEA_EEMC_C_MASK 0x30 588 #define TDE_BEA_EEMC_C_ALLOWED 0x20 589 #define TDE_BEA_EEMC_C_NOT_ALLOWED 0x10 590 #define TDE_BEA_EEMC_C_NOT_SPECIFIED 0x00 591 /* 592 * Raw Decryption Mode Control Capabilities (RDMC_C) field. The 593 * descriptions are too complex to represent as a simple name. 594 */ 595 #define TDE_BEA_RDMC_C_MASK 0x0e 596 #define TDE_BEA_RDMC_C_MODE_7 0x0e 597 #define TDE_BEA_RDMC_C_MODE_6 0x0c 598 #define TDE_BEA_RDMC_C_MODE_5 0x0a 599 #define TDE_BEA_RDMC_C_MODE_4 0x08 600 #define TDE_BEA_RDMC_C_MODE_1 0x02 601 #define TDE_BEA_EAREM 0x01 602 uint8_t byte13; 603 #define TDE_BEA_MAX_EEDKS_MASK 0x0f 604 uint8_t msdk_count[2]; 605 uint8_t max_eedk_size[2]; 606 uint8_t reserved2[2]; 607 uint8_t security_algo_code[4]; 608 }; 609 610 /* 611 * Data Encryption Capabilities page (0x0010). 612 */ 613 struct tde_data_enc_cap_page { 614 uint8_t page_code[2]; 615 uint8_t page_length; 616 uint8_t byte4; 617 #define DATA_ENC_CAP_EXTDECC_MASK 0x0c 618 #define DATA_ENC_CAP_EXTDECC_NOT_REPORTED 0x00 619 #define DATA_ENC_CAP_EXTDECC_NOT_CAPABLE 0x04 620 #define DATA_ENC_CAP_EXTDECC_CAPABLE 0x08 621 #define DATA_ENC_CAP_CFG_P_MASK 0x03 622 #define DATA_ENC_CAP_CFG_P_NOT_REPORTED 0x00 623 #define DATA_ENC_CAP_CFG_P_ALLOWED 0x01 624 #define DATA_ENC_CAP_CFG_P_NOT_ALLOWED 0x02 625 uint8_t reserved[15]; 626 struct tde_block_enc_alg_desc alg_descs[]; 627 }; 628 629 /* 630 * Tape Data Encryption Supported Key Formats page (0x0011). 631 */ 632 struct tde_supported_key_formats_page { 633 uint8_t page_code[2]; 634 uint8_t page_length[2]; 635 uint8_t key_formats_list[]; 636 }; 637 638 /* 639 * Tape Data Encryption Management Capabilities page (0x0012). 640 */ 641 struct tde_data_enc_man_cap_page { 642 uint8_t page_code[2]; 643 uint8_t page_length[2]; 644 uint8_t byte4; 645 #define TDE_DEMC_LOCK_C 0x01 646 uint8_t byte5; 647 #define TDE_DEMC_CKOD_C 0x04 648 #define TDE_DEMC_CKORP_C 0x02 649 #define TDE_DEMC_CKORL_C 0x01 650 uint8_t reserved1; 651 uint8_t byte7; 652 #define TDE_DEMC_AITN_C 0x04 653 #define TDE_DEMC_LOCAL_C 0x02 654 #define TDE_DEMC_PUBLIC_C 0x01 655 uint8_t reserved2[8]; 656 }; 657 658 /* 659 * Tape Data Encryption Status Page (0x0020). 660 */ 661 struct tde_data_enc_status_page { 662 uint8_t page_code[2]; 663 uint8_t page_length[2]; 664 uint8_t scope; 665 #define TDE_DES_IT_NEXUS_SCOPE_MASK 0xe0 666 #define TDE_DES_LBE_SCOPE_MASK 0x07 667 uint8_t encryption_mode; 668 uint8_t decryption_mode; 669 uint8_t algo_index; 670 uint8_t key_instance_counter[4]; 671 uint8_t byte12; 672 #define TDE_DES_PARAM_CTRL_MASK 0x70 673 #define TDE_DES_PARAM_CTRL_MGMT 0x40 674 #define TDE_DES_PARAM_CTRL_CHANGER 0x30 675 #define TDE_DES_PARAM_CTRL_DRIVE 0x20 676 #define TDE_DES_PARAM_CTRL_EXT 0x10 677 #define TDE_DES_PARAM_CTRL_NOT_REPORTED 0x00 678 #define TDE_DES_VCELB 0x08 679 #define TDE_DES_CEEMS_MASK 0x06 680 #define TDE_DES_RDMD 0x01 681 uint8_t enc_params_kad_format; 682 uint8_t asdk_count[2]; 683 uint8_t reserved[8]; 684 uint8_t key_assoc_data_desc[]; 685 }; 686 687 /* 688 * Tape Data Encryption Next Block Encryption Status page (0x0021). 689 */ 690 struct tde_next_block_enc_status_page { 691 uint8_t page_code[2]; 692 uint8_t page_length[2]; 693 uint8_t logical_obj_number[8]; 694 uint8_t status; 695 #define TDE_NBES_COMP_STATUS_MASK 0xf0 696 #define TDE_NBES_COMP_INCAPABLE 0x00 697 #define TDE_NBES_COMP_NOT_YET 0x10 698 #define TDE_NBES_COMP_NOT_A_BLOCK 0x20 699 #define TDE_NBES_COMP_NOT_COMPRESSED 0x30 700 #define TDE_NBES_COMP_COMPRESSED 0x40 701 #define TDE_NBES_ENC_STATUS_MASK 0x0f 702 #define TDE_NBES_ENC_INCAPABLE 0x00 703 #define TDE_NBES_ENC_NOT_YET 0x01 704 #define TDE_NBES_ENC_NOT_A_BLOCK 0x02 705 #define TDE_NBES_ENC_NOT_ENCRYPTED 0x03 706 #define TDE_NBES_ENC_ALG_NOT_SUPPORTED 0x04 707 #define TDE_NBES_ENC_SUPPORTED_ALG 0x05 708 #define TDE_NBES_ENC_NO_KEY 0x06 709 uint8_t algo_index; 710 uint8_t byte14; 711 #define TDE_NBES_EMES 0x02 712 #define TDE_NBES_RDMDS 0x01 713 uint8_t next_block_kad_format; 714 uint8_t key_assoc_data_desc[]; 715 }; 716 717 /* 718 * Tape Data Encryption Get Encryption Management Attributes page (0x0022). 719 */ 720 struct tde_get_enc_man_attr_page { 721 uint8_t page_code[2]; 722 uint8_t reserved[3]; 723 uint8_t byte5; 724 #define TDE_GEMA_CAOD 0x01 725 uint8_t page_length[2]; 726 uint8_t enc_mgmt_attr_desc[]; 727 }; 728 729 /* 730 * Tape Data Encryption Random Number page (0x0030). 731 */ 732 struct tde_random_num_page { 733 uint8_t page_code[2]; 734 uint8_t page_length[2]; 735 uint8_t random_number[32]; 736 }; 737 738 /* 739 * Tape Data Encryption Device Server Key Wrapping Public Key page (0x0031). 740 */ 741 struct tde_key_wrap_pk_page { 742 uint8_t page_code[2]; 743 uint8_t page_length[2]; 744 uint8_t public_key_type[4]; 745 uint8_t public_key_format[4]; 746 uint8_t public_key_length[2]; 747 uint8_t public_key[]; 748 }; 749 750 /* 751 * Security Protocol Specific values for the Tape Data Encryption protocol 752 * (0x20) used with SECURITY PROTOCOL OUT. See above for values used with 753 * SECURITY PROTOCOL IN. Current as of SSCr03. 754 */ 755 #define TDE_SET_DATA_ENC_PAGE 0x0010 756 #define TDE_SA_ENCAP_PAGE 0x0011 757 #define TDE_SET_ENC_MGMT_ATTR_PAGE 0x0022 758 759 /* 760 * Tape Data Encryption Set Data Encryption page (0x0010). 761 */ 762 struct tde_set_data_enc_page { 763 uint8_t page_code[2]; 764 uint8_t page_length[2]; 765 uint8_t byte4; 766 #define TDE_SDE_SCOPE_MASK 0xe0 767 #define TDE_SDE_SCOPE_ALL_IT_NEXUS 0x80 768 #define TDE_SDE_SCOPE_LOCAL 0x40 769 #define TDE_SDE_SCOPE_PUBLIC 0x00 770 #define TDE_SDE_LOCK 0x01 771 uint8_t byte5; 772 #define TDE_SDE_CEEM_MASK 0xc0 773 #define TDE_SDE_CEEM_ENCRYPT 0xc0 774 #define TDE_SDE_CEEM_EXTERNAL 0x80 775 #define TDE_SDE_CEEM_NO_CHECK 0x40 776 #define TDE_SDE_RDMC_MASK 0x30 777 #define TDE_SDE_RDMC_DISABLED 0x30 778 #define TDE_SDE_RDMC_ENABLED 0x20 779 #define TDE_SDE_RDMC_DEFAULT 0x00 780 #define TDE_SDE_SDK 0x08 781 #define TDE_SDE_CKOD 0x04 782 #define TDE_SDE_CKORP 0x02 783 #define TDE_SDE_CKORL 0x01 784 uint8_t encryption_mode; 785 #define TDE_SDE_ENC_MODE_DISABLE 0x00 786 #define TDE_SDE_ENC_MODE_EXTERNAL 0x01 787 #define TDE_SDE_ENC_MODE_ENCRYPT 0x02 788 uint8_t decryption_mode; 789 #define TDE_SDE_DEC_MODE_DISABLE 0x00 790 #define TDE_SDE_DEC_MODE_RAW 0x01 791 #define TDE_SDE_DEC_MODE_DECRYPT 0x02 792 #define TDE_SDE_DEC_MODE_MIXED 0x03 793 uint8_t algo_index; 794 uint8_t lbe_key_format; 795 #define TDE_SDE_KEY_PLAINTEXT 0x00 796 #define TDE_SDE_KEY_VENDOR_SPEC 0x01 797 #define TDE_SDE_KEY_PUBLIC_WRAP 0x02 798 #define TDE_SDE_KEY_ESP_SCSI 0x03 799 uint8_t kad_format; 800 #define TDE_SDE_KAD_ASCII 0x02 801 #define TDE_SDE_KAD_BINARY 0x01 802 #define TDE_SDE_KAD_UNSPECIFIED 0x00 803 uint8_t reserved[7]; 804 uint8_t lbe_key_length[2]; 805 uint8_t lbe_key[]; 806 }; 807 808 /* 809 * Used for the Vendor Specific key format (0x01). 810 */ 811 struct tde_key_format_vendor { 812 uint8_t t10_vendor_id[8]; 813 uint8_t vendor_key[]; 814 }; 815 816 /* 817 * Used for the public key wrapped format (0x02). 818 */ 819 struct tde_key_format_public_wrap { 820 uint8_t parameter_set[2]; 821 #define TDE_PARAM_SET_RSA2048 0x0000 822 #define TDE_PARAM_SET_ECC521 0x0010 823 uint8_t label_length[2]; 824 uint8_t label[]; 825 }; 826 827 /* 828 * Tape Data Encryption SA Encapsulation page (0x0011). 829 */ 830 struct tde_sa_encap_page { 831 uint8_t page_code[2]; 832 uint8_t data_desc[]; 833 }; 834 835 /* 836 * Tape Data Encryption Set Encryption Management Attributes page (0x0022). 837 */ 838 struct tde_set_enc_mgmt_attr_page { 839 uint8_t page_code[2]; 840 uint8_t reserved[3]; 841 uint8_t byte5; 842 #define TDE_SEMA_CAOD 0x01 843 uint8_t page_length[2]; 844 uint8_t attr_desc[]; 845 }; 846 847 /* 848 * Tape Data Encryption descriptor format. 849 * SSC4r03 Section 8.5.4.2.1 Table 197 850 */ 851 struct tde_data_enc_desc { 852 uint8_t key_desc_type; 853 #define TDE_KEY_DESC_WK_KAD 0x04 854 #define TDE_KEY_DESC_M_KAD 0x03 855 #define TDE_KEY_DESC_NONCE_VALUE 0x02 856 #define TDE_KEY_DESC_A_KAD 0x01 857 #define TDE_KEY_DESC_U_KAD 0x00 858 uint8_t byte2; 859 #define TDE_KEY_DESC_AUTH_MASK 0x07 860 #define TDE_KEY_DESC_AUTH_FAILED 0x04 861 #define TDE_KEY_DESC_AUTH_SUCCESS 0x03 862 #define TDE_KEY_DESC_AUTH_NO_ATTEMPT 0x02 863 #define TDE_KEY_DESC_AUTH_U_KAD 0x01 864 uint8_t key_desc_length[2]; 865 uint8_t key_desc[]; 866 }; 867 868 /* 869 * Wrapped Key descriptor format. 870 * SSC4r03 Section 8.5.4.3.1 Table 200 871 */ 872 struct tde_wrapped_key_desc { 873 uint8_t wrapped_key_type; 874 #define TDE_WRAP_KEY_DESC_LENGTH 0x04 875 #define TDE_WRAP_KEY_DESC_IDENT 0x03 876 #define TDE_WRAP_KEY_DESC_INFO 0x02 877 #define TDE_WRAP_KEY_DESC_ENTITY_ID 0x01 878 #define TDE_WRAP_KEY_DESC_DEVICE_ID 0x00 879 uint8_t reserved; 880 uint8_t wrapped_desc_length[2]; 881 uint8_t wrapped_desc[]; 882 }; 883 884 /* 885 * Encryption management attributes descriptor format. 886 * SSC4r03 Section 8.5.4.4.1 Table 202 887 */ 888 struct tde_enc_mgmt_attr_desc { 889 uint8_t enc_mgmt_attr_type[2]; 890 #define TDE_EMAD_DESIRED_KEY_MGR_OP 0x0000 891 #define TDE_EMAD_LOG_BLOCK_ENC_KEY_CRIT 0x0001 892 #define TDE_EMAD_LOG_BLOCK_ENC_KEY_WRAP 0x0002 893 uint8_t reserved; 894 uint8_t byte2; 895 #define TDE_EMAD_CRIT 0x80 896 uint8_t attr_length[2]; 897 uint8_t attributes[]; 898 #define TDE_EMAD_DESIRED_KEY_CREATE 0x0001 899 #define TDE_EMAD_DESIRED_KEY_RESOLVE 0x0002 900 }; 901 902 /* 903 * Logical block encryption key selection criteria descriptor format. 904 * SSC4r03 Section 8.5.4.4.3.1 Table 206 905 */ 906 struct tde_lb_enc_key_sel_desc { 907 uint8_t lbe_key_sel_crit_type[2]; 908 /* 909 * The CRIT bit is the top bit of the first byte of the type. 910 */ 911 #define TDE_LBE_KEY_SEL_CRIT 0x80 912 #define TDE_LBE_KEY_SEL_ALGO 0x0001 913 #define TDE_LBE_KEY_SEL_ID 0x0002 914 uint8_t lbe_key_sel_crit_length[2]; 915 uint8_t lbe_key_sel_crit[]; 916 }; 917 918 /* 919 * Logical block encryption key wrapping attribute descriptor format. 920 * SSC4r03 Section 8.5.4.4.4.1 Table 209 921 */ 922 struct tde_lb_enc_key_wrap_desc { 923 uint8_t lbe_key_wrap_type[2]; 924 /* 925 * The CRIT bit is the top bit of the first byte of the type. 926 */ 927 #define TDE_LBE_KEY_WRAP_CRIT 0x80 928 #define TDE_LBE_KEY_WRAP_KEKS 0x0001 929 uint8_t lbe_key_wrap_length[2]; 930 uint8_t lbe_key_wrap_attr[]; 931 }; 932 933 /* 934 * Opcodes 935 */ 936 #define REWIND 0x01 937 #define FORMAT_MEDIUM 0x04 938 #define READ_BLOCK_LIMITS 0x05 939 #define SA_READ 0x08 940 #define SA_WRITE 0x0A 941 #define SET_CAPACITY 0x0B 942 #define WRITE_FILEMARKS 0x10 943 #define SPACE 0x11 944 #define RESERVE_UNIT 0x16 945 #define RELEASE_UNIT 0x17 946 #define ERASE 0x19 947 #define LOAD_UNLOAD 0x1B 948 #define LOCATE 0x2B 949 #define READ_POSITION 0x34 950 #define REPORT_DENSITY_SUPPORT 0x44 951 #define ALLOW_OVERWRITE 0x82 952 #define LOCATE_16 0x92 953 954 /* 955 * Tape specific density codes- only enough of them here to recognize 956 * some specific older units so we can choose 2FM@EOD or FIXED blocksize 957 * quirks. 958 */ 959 #define SCSI_DENSITY_HALFINCH_800 0x01 960 #define SCSI_DENSITY_HALFINCH_1600 0x02 961 #define SCSI_DENSITY_HALFINCH_6250 0x03 962 #define SCSI_DENSITY_HALFINCH_6250C 0xC3 /* HP Compressed 6250 */ 963 #define SCSI_DENSITY_QIC_11_4TRK 0x04 964 #define SCSI_DENSITY_QIC_11_9TRK 0x84 /* Vendor Unique Emulex */ 965 #define SCSI_DENSITY_QIC_24 0x05 966 #define SCSI_DENSITY_HALFINCH_PE 0x06 967 #define SCSI_DENSITY_QIC_120 0x0f 968 #define SCSI_DENSITY_QIC_150 0x10 969 #define SCSI_DENSITY_QIC_525_320 0x11 970 #define SCSI_DENSITY_QIC_1320 0x12 971 #define SCSI_DENSITY_QIC_2GB 0x22 972 #define SCSI_DENSITY_QIC_4GB 0x26 973 #define SCSI_DENSITY_QIC_3080 0x29 974 975 __BEGIN_DECLS 976 void scsi_read_block_limits(struct ccb_scsiio *, u_int32_t, 977 void (*cbfcnp)(struct cam_periph *, union ccb *), 978 u_int8_t, struct scsi_read_block_limits_data *, 979 u_int8_t , u_int32_t); 980 981 void scsi_sa_read_write(struct ccb_scsiio *csio, u_int32_t retries, 982 void (*cbfcnp)(struct cam_periph *, union ccb *), 983 u_int8_t tag_action, int readop, int sli, 984 int fixed, u_int32_t length, u_int8_t *data_ptr, 985 u_int32_t dxfer_len, u_int8_t sense_len, 986 u_int32_t timeout); 987 988 void scsi_rewind(struct ccb_scsiio *csio, u_int32_t retries, 989 void (*cbfcnp)(struct cam_periph *, union ccb *), 990 u_int8_t tag_action, int immediate, u_int8_t sense_len, 991 u_int32_t timeout); 992 993 void scsi_space(struct ccb_scsiio *csio, u_int32_t retries, 994 void (*cbfcnp)(struct cam_periph *, union ccb *), 995 u_int8_t tag_action, scsi_space_code code, 996 u_int32_t count, u_int8_t sense_len, u_int32_t timeout); 997 998 void scsi_load_unload(struct ccb_scsiio *csio, u_int32_t retries, 999 void (*cbfcnp)(struct cam_periph *, union ccb *), 1000 u_int8_t tag_action, int immediate, int eot, 1001 int reten, int load, u_int8_t sense_len, 1002 u_int32_t timeout); 1003 1004 void scsi_write_filemarks(struct ccb_scsiio *csio, u_int32_t retries, 1005 void (*cbfcnp)(struct cam_periph *, union ccb *), 1006 u_int8_t tag_action, int immediate, int setmark, 1007 u_int32_t num_marks, u_int8_t sense_len, 1008 u_int32_t timeout); 1009 1010 void scsi_reserve_release_unit(struct ccb_scsiio *csio, u_int32_t retries, 1011 void (*cbfcnp)(struct cam_periph *, 1012 union ccb *), u_int8_t tag_action, 1013 int third_party, int third_party_id, 1014 u_int8_t sense_len, u_int32_t timeout, 1015 int reserve); 1016 1017 void scsi_erase(struct ccb_scsiio *csio, u_int32_t retries, 1018 void (*cbfcnp)(struct cam_periph *, union ccb *), 1019 u_int8_t tag_action, int immediate, int long_erase, 1020 u_int8_t sense_len, u_int32_t timeout); 1021 1022 void scsi_data_comp_page(struct scsi_data_compression_page *page, 1023 u_int8_t dce, u_int8_t dde, u_int8_t red, 1024 u_int32_t comp_algorithm, 1025 u_int32_t decomp_algorithm); 1026 1027 void scsi_read_position(struct ccb_scsiio *csio, u_int32_t retries, 1028 void (*cbfcnp)(struct cam_periph *, union ccb *), 1029 u_int8_t tag_action, int hardsoft, 1030 struct scsi_tape_position_data *sbp, 1031 u_int8_t sense_len, u_int32_t timeout); 1032 void scsi_read_position_10(struct ccb_scsiio *csio, u_int32_t retries, 1033 void (*cbfcnp)(struct cam_periph *, union ccb *), 1034 u_int8_t tag_action, int service_action, 1035 u_int8_t *data_ptr, u_int32_t length, 1036 u_int32_t sense_len, u_int32_t timeout); 1037 1038 void scsi_set_position(struct ccb_scsiio *csio, u_int32_t retries, 1039 void (*cbfcnp)(struct cam_periph *, union ccb *), 1040 u_int8_t tag_action, int hardsoft, u_int32_t blkno, 1041 u_int8_t sense_len, u_int32_t timeout); 1042 1043 void scsi_locate_10(struct ccb_scsiio *csio, u_int32_t retries, 1044 void (*cbfcnp)(struct cam_periph *, union ccb *), 1045 u_int8_t tag_action, int immed, int cp, int hard, 1046 int64_t partition, u_int32_t block_address, 1047 int sense_len, u_int32_t timeout); 1048 1049 void scsi_locate_16(struct ccb_scsiio *csio, u_int32_t retries, 1050 void (*cbfcnp)(struct cam_periph *, union ccb *), 1051 u_int8_t tag_action, int immed, int cp, 1052 u_int8_t dest_type, int bam, int64_t partition, 1053 u_int64_t logical_id, int sense_len, 1054 u_int32_t timeout); 1055 1056 void scsi_report_density_support(struct ccb_scsiio *csio, u_int32_t retries, 1057 void (*cbfcnp)(struct cam_periph *, 1058 union ccb *), 1059 u_int8_t tag_action, int media, 1060 int medium_type, u_int8_t *data_ptr, 1061 u_int32_t length, u_int32_t sense_len, 1062 u_int32_t timeout); 1063 1064 void scsi_set_capacity(struct ccb_scsiio *csio, u_int32_t retries, 1065 void (*cbfcnp)(struct cam_periph *, union ccb *), 1066 u_int8_t tag_action, int byte1, u_int32_t proportion, 1067 u_int32_t sense_len, u_int32_t timeout); 1068 1069 void scsi_format_medium(struct ccb_scsiio *csio, u_int32_t retries, 1070 void (*cbfcnp)(struct cam_periph *, union ccb *), 1071 u_int8_t tag_action, int byte1, int byte2, 1072 u_int8_t *data_ptr, u_int32_t length, 1073 u_int32_t sense_len, u_int32_t timeout); 1074 1075 void scsi_allow_overwrite(struct ccb_scsiio *csio, u_int32_t retries, 1076 void (*cbfcnp)(struct cam_periph *, union ccb *), 1077 u_int8_t tag_action, int allow_overwrite, 1078 int partition, u_int64_t logical_id, 1079 u_int32_t sense_len, u_int32_t timeout); 1080 1081 __END_DECLS 1082 1083 #endif /* _SCSI_SCSI_SA_H */ 1084