1898b0535SWarner Losh /*- 229815710SSteve Price * Structure and function declarations for the 376babe50SJustin T. Gibbs * SCSI Sequential Access Peripheral driver for CAM. 476babe50SJustin T. Gibbs * 54d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause 6bec9534dSPedro F. Giffuni * 747c27de5SMatt Jacob * Copyright (c) 1999, 2000 Matthew Jacob 843518607SKenneth D. Merry * Copyright (c) 2013, 2014, 2015 Spectra Logic Corporation 976babe50SJustin T. Gibbs * All rights reserved. 1076babe50SJustin T. Gibbs * 1176babe50SJustin T. Gibbs * Redistribution and use in source and binary forms, with or without 1276babe50SJustin T. Gibbs * modification, are permitted provided that the following conditions 1376babe50SJustin T. Gibbs * are met: 1476babe50SJustin T. Gibbs * 1. Redistributions of source code must retain the above copyright 1576babe50SJustin T. Gibbs * notice, this list of conditions, and the following disclaimer, 1676babe50SJustin T. Gibbs * without modification, immediately at the beginning of the file. 1776babe50SJustin T. Gibbs * 2. The name of the author may not be used to endorse or promote products 1876babe50SJustin T. Gibbs * derived from this software without specific prior written permission. 1976babe50SJustin T. Gibbs * 2076babe50SJustin T. Gibbs * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 2176babe50SJustin T. Gibbs * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2276babe50SJustin T. Gibbs * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2376babe50SJustin T. Gibbs * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR 2476babe50SJustin T. Gibbs * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2576babe50SJustin T. Gibbs * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2676babe50SJustin T. Gibbs * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2776babe50SJustin T. Gibbs * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2876babe50SJustin T. Gibbs * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2976babe50SJustin T. Gibbs * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 3076babe50SJustin T. Gibbs * SUCH DAMAGE. 3176babe50SJustin T. Gibbs */ 3276babe50SJustin T. Gibbs 3376babe50SJustin T. Gibbs #ifndef _SCSI_SCSI_SA_H 3476babe50SJustin T. Gibbs #define _SCSI_SCSI_SA_H 1 3576babe50SJustin T. Gibbs 3676babe50SJustin T. Gibbs 3776babe50SJustin T. Gibbs struct scsi_read_block_limits 3876babe50SJustin T. Gibbs { 39*7c5d20a6SWarner Losh uint8_t opcode; 40*7c5d20a6SWarner Losh uint8_t byte2; 41*7c5d20a6SWarner Losh uint8_t unused[3]; 42*7c5d20a6SWarner Losh uint8_t control; 4376babe50SJustin T. Gibbs }; 4476babe50SJustin T. Gibbs 4576babe50SJustin T. Gibbs struct scsi_read_block_limits_data 4676babe50SJustin T. Gibbs { 47*7c5d20a6SWarner Losh uint8_t gran; 4876babe50SJustin T. Gibbs #define RBL_GRAN_MASK 0x1F 4976babe50SJustin T. Gibbs #define RBL_GRAN(rblim) ((rblim)->gran & RBL_GRAN_MASK) 50*7c5d20a6SWarner Losh uint8_t maximum[3]; 51*7c5d20a6SWarner Losh uint8_t minimum[2]; 5276babe50SJustin T. Gibbs }; 5376babe50SJustin T. Gibbs 5476babe50SJustin T. Gibbs struct scsi_sa_rw 5576babe50SJustin T. Gibbs { 56*7c5d20a6SWarner Losh uint8_t opcode; 57*7c5d20a6SWarner Losh uint8_t sli_fixed; 5876babe50SJustin T. Gibbs #define SAR_SLI 0x02 5976babe50SJustin T. Gibbs #define SARW_FIXED 0x01 60*7c5d20a6SWarner Losh uint8_t length[3]; 61*7c5d20a6SWarner Losh uint8_t control; 6276babe50SJustin T. Gibbs }; 6376babe50SJustin T. Gibbs 6476babe50SJustin T. Gibbs struct scsi_load_unload 6576babe50SJustin T. Gibbs { 66*7c5d20a6SWarner Losh uint8_t opcode; 67*7c5d20a6SWarner Losh uint8_t immediate; 6876babe50SJustin T. Gibbs #define SLU_IMMED 0x01 69*7c5d20a6SWarner Losh uint8_t reserved[2]; 70*7c5d20a6SWarner Losh uint8_t eot_reten_load; 7176babe50SJustin T. Gibbs #define SLU_EOT 0x04 7276babe50SJustin T. Gibbs #define SLU_RETEN 0x02 7376babe50SJustin T. Gibbs #define SLU_LOAD 0x01 74*7c5d20a6SWarner Losh uint8_t control; 7576babe50SJustin T. Gibbs }; 7676babe50SJustin T. Gibbs 7776babe50SJustin T. Gibbs struct scsi_rewind 7876babe50SJustin T. Gibbs { 79*7c5d20a6SWarner Losh uint8_t opcode; 80*7c5d20a6SWarner Losh uint8_t immediate; 8176babe50SJustin T. Gibbs #define SREW_IMMED 0x01 82*7c5d20a6SWarner Losh uint8_t reserved[3]; 83*7c5d20a6SWarner Losh uint8_t control; 8476babe50SJustin T. Gibbs }; 8576babe50SJustin T. Gibbs 8676babe50SJustin T. Gibbs typedef enum { 8776babe50SJustin T. Gibbs SS_BLOCKS, 8876babe50SJustin T. Gibbs SS_FILEMARKS, 8976babe50SJustin T. Gibbs SS_SEQFILEMARKS, 9076babe50SJustin T. Gibbs SS_EOD, 9176babe50SJustin T. Gibbs SS_SETMARKS, 9276babe50SJustin T. Gibbs SS_SEQSETMARKS 9376babe50SJustin T. Gibbs } scsi_space_code; 9476babe50SJustin T. Gibbs 9576babe50SJustin T. Gibbs struct scsi_space 9676babe50SJustin T. Gibbs { 97*7c5d20a6SWarner Losh uint8_t opcode; 98*7c5d20a6SWarner Losh uint8_t code; 9976babe50SJustin T. Gibbs #define SREW_IMMED 0x01 100*7c5d20a6SWarner Losh uint8_t count[3]; 101*7c5d20a6SWarner Losh uint8_t control; 10276babe50SJustin T. Gibbs }; 10376babe50SJustin T. Gibbs 10476babe50SJustin T. Gibbs struct scsi_write_filemarks 10576babe50SJustin T. Gibbs { 106*7c5d20a6SWarner Losh uint8_t opcode; 107*7c5d20a6SWarner Losh uint8_t byte2; 10876babe50SJustin T. Gibbs #define SWFMRK_IMMED 0x01 10976babe50SJustin T. Gibbs #define SWFMRK_WSMK 0x02 110*7c5d20a6SWarner Losh uint8_t num_marks[3]; 111*7c5d20a6SWarner Losh uint8_t control; 11276babe50SJustin T. Gibbs }; 11376babe50SJustin T. Gibbs 11476babe50SJustin T. Gibbs /* 11576babe50SJustin T. Gibbs * Reserve and release unit have the same exact cdb format, but different 11676babe50SJustin T. Gibbs * opcodes. 11776babe50SJustin T. Gibbs */ 11876babe50SJustin T. Gibbs struct scsi_reserve_release_unit 11976babe50SJustin T. Gibbs { 120*7c5d20a6SWarner Losh uint8_t opcode; 121*7c5d20a6SWarner Losh uint8_t lun_thirdparty; 12276babe50SJustin T. Gibbs #define SRRU_LUN_MASK 0xE0 12376babe50SJustin T. Gibbs #define SRRU_3RD_PARTY 0x10 12476babe50SJustin T. Gibbs #define SRRU_3RD_SHAMT 1 12576babe50SJustin T. Gibbs #define SRRU_3RD_MASK 0xE 126*7c5d20a6SWarner Losh uint8_t reserved[3]; 127*7c5d20a6SWarner Losh uint8_t control; 12876babe50SJustin T. Gibbs }; 12976babe50SJustin T. Gibbs 13076babe50SJustin T. Gibbs /* 13176babe50SJustin T. Gibbs * Erase a tape 13276babe50SJustin T. Gibbs */ 13376babe50SJustin T. Gibbs struct scsi_erase 13476babe50SJustin T. Gibbs { 135*7c5d20a6SWarner Losh uint8_t opcode; 136*7c5d20a6SWarner Losh uint8_t lun_imm_long; 13776babe50SJustin T. Gibbs #define SE_LUN_MASK 0xE0 13876babe50SJustin T. Gibbs #define SE_LONG 0x1 13976babe50SJustin T. Gibbs #define SE_IMMED 0x2 140*7c5d20a6SWarner Losh uint8_t reserved[3]; 141*7c5d20a6SWarner Losh uint8_t control; 14276babe50SJustin T. Gibbs }; 14376babe50SJustin T. Gibbs 14476babe50SJustin T. Gibbs /* 14543518607SKenneth D. Merry * Set tape capacity. 14643518607SKenneth D. Merry */ 14743518607SKenneth D. Merry struct scsi_set_capacity 14843518607SKenneth D. Merry { 149*7c5d20a6SWarner Losh uint8_t opcode; 150*7c5d20a6SWarner Losh uint8_t byte1; 15143518607SKenneth D. Merry #define SA_SSC_IMMED 0x01 152*7c5d20a6SWarner Losh uint8_t reserved; 153*7c5d20a6SWarner Losh uint8_t cap_proportion[2]; 154*7c5d20a6SWarner Losh uint8_t control; 15543518607SKenneth D. Merry }; 15643518607SKenneth D. Merry 15743518607SKenneth D. Merry /* 15843518607SKenneth D. Merry * Format tape media. The CDB opcode is the same as the disk-specific 15943518607SKenneth D. Merry * FORMAT UNIT command, but the fields are different inside the CDB. Thus 16043518607SKenneth D. Merry * the reason for a separate definition here. 16143518607SKenneth D. Merry */ 16243518607SKenneth D. Merry struct scsi_format_medium 16343518607SKenneth D. Merry { 164*7c5d20a6SWarner Losh uint8_t opcode; 165*7c5d20a6SWarner Losh uint8_t byte1; 16643518607SKenneth D. Merry #define SFM_IMMED 0x01 16743518607SKenneth D. Merry #define SFM_VERIFY 0x02 168*7c5d20a6SWarner Losh uint8_t byte2; 16943518607SKenneth D. Merry #define SFM_FORMAT_DEFAULT 0x00 17043518607SKenneth D. Merry #define SFM_FORMAT_PARTITION 0x01 17143518607SKenneth D. Merry #define SFM_FORMAT_DEF_PART 0x02 17243518607SKenneth D. Merry #define SFM_FORMAT_MASK 0x0f 173*7c5d20a6SWarner Losh uint8_t length[2]; 174*7c5d20a6SWarner Losh uint8_t control; 17543518607SKenneth D. Merry }; 17643518607SKenneth D. Merry 17743518607SKenneth D. Merry struct scsi_allow_overwrite 17843518607SKenneth D. Merry { 179*7c5d20a6SWarner Losh uint8_t opcode; 180*7c5d20a6SWarner Losh uint8_t reserved1; 181*7c5d20a6SWarner Losh uint8_t allow_overwrite; 18243518607SKenneth D. Merry #define SAO_ALLOW_OVERWRITE_DISABLED 0x00 18343518607SKenneth D. Merry #define SAO_ALLOW_OVERWRITE_CUR_POS 0x01 18443518607SKenneth D. Merry #define SAO_ALLOW_OVERWRITE_FORMAT 0x02 185*7c5d20a6SWarner Losh uint8_t partition; 186*7c5d20a6SWarner Losh uint8_t logical_id[8]; 187*7c5d20a6SWarner Losh uint8_t reserved2[3]; 188*7c5d20a6SWarner Losh uint8_t control; 18943518607SKenneth D. Merry }; 19043518607SKenneth D. Merry 19143518607SKenneth D. Merry /* 19276babe50SJustin T. Gibbs * Dev specific mode page masks. 19376babe50SJustin T. Gibbs */ 19476babe50SJustin T. Gibbs #define SMH_SA_WP 0x80 19576babe50SJustin T. Gibbs #define SMH_SA_BUF_MODE_MASK 0x70 19676babe50SJustin T. Gibbs #define SMH_SA_BUF_MODE_NOBUF 0x00 19776babe50SJustin T. Gibbs #define SMH_SA_BUF_MODE_SIBUF 0x10 /* Single-Initiator buffering */ 19876babe50SJustin T. Gibbs #define SMH_SA_BUF_MODE_MIBUF 0x20 /* Multi-Initiator buffering */ 19976babe50SJustin T. Gibbs #define SMH_SA_SPEED_MASK 0x0F 20076babe50SJustin T. Gibbs #define SMH_SA_SPEED_DEFAULT 0x00 20176babe50SJustin T. Gibbs 20276babe50SJustin T. Gibbs /* 20376babe50SJustin T. Gibbs * Sequential-access specific mode page numbers. 20476babe50SJustin T. Gibbs */ 20576babe50SJustin T. Gibbs #define SA_DEVICE_CONFIGURATION_PAGE 0x10 20676babe50SJustin T. Gibbs #define SA_MEDIUM_PARTITION_PAGE_1 0x11 20776babe50SJustin T. Gibbs #define SA_MEDIUM_PARTITION_PAGE_2 0x12 20876babe50SJustin T. Gibbs #define SA_MEDIUM_PARTITION_PAGE_3 0x13 20976babe50SJustin T. Gibbs #define SA_MEDIUM_PARTITION_PAGE_4 0x14 21000bb66d7SMatt Jacob #define SA_DATA_COMPRESSION_PAGE 0x0f /* SCSI-3 */ 21176babe50SJustin T. Gibbs 21276babe50SJustin T. Gibbs /* 21376babe50SJustin T. Gibbs * Mode page definitions. 21476babe50SJustin T. Gibbs */ 21576babe50SJustin T. Gibbs 21600bb66d7SMatt Jacob /* See SCSI-II spec 9.3.3.1 */ 21700bb66d7SMatt Jacob struct scsi_dev_conf_page { 218*7c5d20a6SWarner Losh uint8_t pagecode; /* 0x10 */ 219*7c5d20a6SWarner Losh uint8_t pagelength; /* 0x0e */ 220*7c5d20a6SWarner Losh uint8_t byte2; /* CAP, CAF, Active Format */ 221*7c5d20a6SWarner Losh uint8_t active_partition; 222*7c5d20a6SWarner Losh uint8_t wb_full_ratio; 223*7c5d20a6SWarner Losh uint8_t rb_empty_ratio; 224*7c5d20a6SWarner Losh uint8_t wrdelay_time[2]; 225*7c5d20a6SWarner Losh uint8_t byte8; 22600bb66d7SMatt Jacob #define SA_DBR 0x80 /* data buffer recovery */ 22700bb66d7SMatt Jacob #define SA_BIS 0x40 /* block identifiers supported */ 22800bb66d7SMatt Jacob #define SA_RSMK 0x20 /* report setmarks */ 22900bb66d7SMatt Jacob #define SA_AVC 0x10 /* automatic velocity control */ 23043518607SKenneth D. Merry #define SA_SOCF_MASK 0x0c /* stop on consecutive formats */ 23143518607SKenneth D. Merry #define SA_RBO 0x02 /* recover buffer order */ 23243518607SKenneth D. Merry #define SA_REW 0x01 /* report early warning */ 233*7c5d20a6SWarner Losh uint8_t gap_size; 234*7c5d20a6SWarner Losh uint8_t byte10; 23543518607SKenneth D. Merry /* from SCSI-3: SSC-4 Working draft (2/14) 8.3.3 */ 23643518607SKenneth D. Merry #define SA_EOD_DEF_MASK 0xe0 /* EOD defined */ 23743518607SKenneth D. Merry #define SA_EEG 0x10 /* Enable EOD Generation */ 23843518607SKenneth D. Merry #define SA_SEW 0x08 /* Synchronize at Early Warning */ 23943518607SKenneth D. Merry #define SA_SOFT_WP 0x04 /* Software Write Protect */ 24043518607SKenneth D. Merry #define SA_BAML 0x02 /* Block Address Mode Lock */ 24143518607SKenneth D. Merry #define SA_BAM 0x01 /* Block Address Mode */ 242*7c5d20a6SWarner Losh uint8_t ew_bufsize[3]; 243*7c5d20a6SWarner Losh uint8_t sel_comp_alg; 24400bb66d7SMatt Jacob #define SA_COMP_NONE 0x00 24500bb66d7SMatt Jacob #define SA_COMP_DEFAULT 0x01 246eab2467fSMatt Jacob /* the following is 'reserved' in SCSI-2 but is defined in SSC-r22 */ 247*7c5d20a6SWarner Losh uint8_t extra_wp; 248eab2467fSMatt Jacob #define SA_ASOC_WP 0x04 /* Associated Write Protect */ 249eab2467fSMatt Jacob #define SA_PERS_WP 0x02 /* Persistent Write Protect */ 250eab2467fSMatt Jacob #define SA_PERM_WP 0x01 /* Permanent Write Protect */ 25100bb66d7SMatt Jacob }; 25200bb66d7SMatt Jacob 25300bb66d7SMatt Jacob /* from SCSI-3: SSC-Rev10 (6/97) */ 25476babe50SJustin T. Gibbs struct scsi_data_compression_page { 255*7c5d20a6SWarner Losh uint8_t page_code; /* 0x0f */ 256*7c5d20a6SWarner Losh uint8_t page_length; /* 0x0e */ 257*7c5d20a6SWarner Losh uint8_t dce_and_dcc; 25876babe50SJustin T. Gibbs #define SA_DCP_DCE 0x80 /* Data compression enable */ 25976babe50SJustin T. Gibbs #define SA_DCP_DCC 0x40 /* Data compression capable */ 260*7c5d20a6SWarner Losh uint8_t dde_and_red; 26176babe50SJustin T. Gibbs #define SA_DCP_DDE 0x80 /* Data decompression enable */ 26276babe50SJustin T. Gibbs #define SA_DCP_RED_MASK 0x60 /* Report Exception on Decomp. */ 26376babe50SJustin T. Gibbs #define SA_DCP_RED_SHAMT 5 26476babe50SJustin T. Gibbs #define SA_DCP_RED_0 0x00 26576babe50SJustin T. Gibbs #define SA_DCP_RED_1 0x20 26676babe50SJustin T. Gibbs #define SA_DCP_RED_2 0x40 267*7c5d20a6SWarner Losh uint8_t comp_algorithm[4]; 268*7c5d20a6SWarner Losh uint8_t decomp_algorithm[4]; 269*7c5d20a6SWarner Losh uint8_t reserved[4]; 27076babe50SJustin T. Gibbs }; 27176babe50SJustin T. Gibbs 27200bb66d7SMatt Jacob typedef union { 273*7c5d20a6SWarner Losh struct { uint8_t pagecode, pagelength; } hdr; 27400bb66d7SMatt Jacob struct scsi_dev_conf_page dconf; 27500bb66d7SMatt Jacob struct scsi_data_compression_page dcomp; 27600bb66d7SMatt Jacob } sa_comp_t; 27700bb66d7SMatt Jacob 27843518607SKenneth D. Merry /* 27943518607SKenneth D. Merry * Control Data Protection subpage. This is as defined in SSC3r03. 28043518607SKenneth D. Merry */ 28143518607SKenneth D. Merry struct scsi_control_data_prot_subpage { 28243518607SKenneth D. Merry uint8_t page_code; 28343518607SKenneth D. Merry #define SA_CTRL_DP_PAGE_CODE 0x0a 28443518607SKenneth D. Merry uint8_t subpage_code; 28543518607SKenneth D. Merry #define SA_CTRL_DP_SUBPAGE_CODE 0xf0 28643518607SKenneth D. Merry uint8_t length[2]; 28743518607SKenneth D. Merry uint8_t prot_method; 28843518607SKenneth D. Merry #define SA_CTRL_DP_NO_LBP 0x00 28943518607SKenneth D. Merry #define SA_CTRL_DP_REED_SOLOMON 0x01 29043518607SKenneth D. Merry #define SA_CTRL_DP_METHOD_MAX 0xff 29143518607SKenneth D. Merry uint8_t pi_length; 29243518607SKenneth D. Merry #define SA_CTRL_DP_PI_LENGTH_MASK 0x3f 29343518607SKenneth D. Merry #define SA_CTRL_DP_RS_LENGTH 4 29443518607SKenneth D. Merry uint8_t prot_bits; 29543518607SKenneth D. Merry #define SA_CTRL_DP_LBP_W 0x80 29643518607SKenneth D. Merry #define SA_CTRL_DP_LBP_R 0x40 29743518607SKenneth D. Merry #define SA_CTRL_DP_RBDP 0x20 29843518607SKenneth D. Merry uint8_t reserved[]; 29943518607SKenneth D. Merry }; 30043518607SKenneth D. Merry 30143518607SKenneth D. Merry /* 30243518607SKenneth D. Merry * This is the Read/Write Control mode page used on IBM Enterprise Tape 30343518607SKenneth D. Merry * Drives. They are known as 3592, TS, or Jaguar drives. The SCSI inquiry 30443518607SKenneth D. Merry * data will show a Product ID "03592XXX", where XXX is 'J1A', 'E05' (TS1120), 30543518607SKenneth D. Merry * 'E06' (TS1130), 'E07' (TS1140) or 'E08' (TS1150). 30643518607SKenneth D. Merry * 30743518607SKenneth D. Merry * This page definition is current as of the 3592 SCSI Reference v6, 30843518607SKenneth D. Merry * released on December 16th, 2014. 30943518607SKenneth D. Merry */ 31043518607SKenneth D. Merry struct scsi_tape_ibm_rw_control { 31143518607SKenneth D. Merry uint8_t page_code; 31243518607SKenneth D. Merry #define SA_IBM_RW_CTRL_PAGE_CODE 0x25 31343518607SKenneth D. Merry uint8_t page_length; 31443518607SKenneth D. Merry uint8_t ignore_seq_checks; 31543518607SKenneth D. Merry #define SA_IBM_RW_CTRL_LOC_IGNORE_SEQ 0x04 31643518607SKenneth D. Merry #define SA_IBM_RW_CTRL_SPC_BLK_IGNORE_SEQ 0x02 31743518607SKenneth D. Merry #define SA_IBM_RW_CTRL_SPC_FM_IGNORE_SEQ 0x01 31843518607SKenneth D. Merry uint8_t ignore_data_checks; 31943518607SKenneth D. Merry #define SA_IBM_RW_CTRL_LOC_IGNORE_DATA 0x04 32043518607SKenneth D. Merry #define SA_IBM_RW_CTRL_SPC_BLK_IGNORE_DATA 0x02 32143518607SKenneth D. Merry #define SA_IBM_RW_CTRL_SPC_FM_IGNORE_DATA 0x01 32243518607SKenneth D. Merry uint8_t reserved1; 32343518607SKenneth D. Merry uint8_t leop_method; 32443518607SKenneth D. Merry #define SA_IBM_RW_CTRL_LEOP_DEFAULT 0x00 32543518607SKenneth D. Merry #define SA_IBM_RW_CTRL_LEOP_MAX_CAP 0x01 32643518607SKenneth D. Merry #define SA_IBM_RW_CTRL_LEOP_CONST_CAP 0x02 32743518607SKenneth D. Merry uint8_t leop_ew[2]; 32843518607SKenneth D. Merry uint8_t byte8; 32943518607SKenneth D. Merry #define SA_IBM_RW_CTRL_DISABLE_FASTSYNC 0x80 33043518607SKenneth D. Merry #define SA_IBM_RW_CTRL_DISABLE_SKIPSYNC 0x40 33143518607SKenneth D. Merry #define SA_IBM_RW_CTRL_DISABLE_CROSS_EOD 0x08 33243518607SKenneth D. Merry #define SA_IBM_RW_CTRL_DISABLE_CROSS_PERM_ERR 0x04 33343518607SKenneth D. Merry #define SA_IBM_RW_CTRL_REPORT_SEG_EW 0x02 33443518607SKenneth D. Merry #define SA_IBM_RW_CTRL_REPORT_HOUSEKEEPING_ERR 0x01 33543518607SKenneth D. Merry uint8_t default_write_dens_bop_0; 33643518607SKenneth D. Merry uint8_t pending_write_dens_bop_0; 33743518607SKenneth D. Merry uint8_t reserved2[21]; 33843518607SKenneth D. Merry }; 33943518607SKenneth D. Merry 340d902101eSMatt Jacob struct scsi_tape_read_position { 341*7c5d20a6SWarner Losh uint8_t opcode; /* READ_POSITION */ 342*7c5d20a6SWarner Losh uint8_t byte1; /* set LSB to read hardware block pos */ 34343518607SKenneth D. Merry #define SA_RPOS_SHORT_FORM 0x00 34443518607SKenneth D. Merry #define SA_RPOS_SHORT_VENDOR 0x01 34543518607SKenneth D. Merry #define SA_RPOS_LONG_FORM 0x06 34643518607SKenneth D. Merry #define SA_RPOS_EXTENDED_FORM 0x08 347*7c5d20a6SWarner Losh uint8_t reserved[5]; 348*7c5d20a6SWarner Losh uint8_t length[2]; 349*7c5d20a6SWarner Losh uint8_t control; 350d902101eSMatt Jacob }; 351d902101eSMatt Jacob 352d902101eSMatt Jacob struct scsi_tape_position_data { /* Short Form */ 353*7c5d20a6SWarner Losh uint8_t flags; 354d902101eSMatt Jacob #define SA_RPOS_BOP 0x80 /* Beginning of Partition */ 355d902101eSMatt Jacob #define SA_RPOS_EOP 0x40 /* End of Partition */ 356d902101eSMatt Jacob #define SA_RPOS_BCU 0x20 /* Block Count Unknown (SCSI3) */ 357d902101eSMatt Jacob #define SA_RPOS_BYCU 0x10 /* Byte Count Unknown (SCSI3) */ 358d902101eSMatt Jacob #define SA_RPOS_BPU 0x04 /* Block Position Unknown */ 359d902101eSMatt Jacob #define SA_RPOS_PERR 0x02 /* Position Error (SCSI3) */ 36043518607SKenneth D. Merry #define SA_RPOS_BPEW 0x01 /* Beyond Programmable Early Warning */ 361d902101eSMatt Jacob #define SA_RPOS_UNCERTAIN SA_RPOS_BPU 362*7c5d20a6SWarner Losh uint8_t partition; 363*7c5d20a6SWarner Losh uint8_t reserved[2]; 364*7c5d20a6SWarner Losh uint8_t firstblk[4]; 365*7c5d20a6SWarner Losh uint8_t lastblk[4]; 366*7c5d20a6SWarner Losh uint8_t reserved2; 367*7c5d20a6SWarner Losh uint8_t nbufblk[3]; 368*7c5d20a6SWarner Losh uint8_t nbufbyte[4]; 369d902101eSMatt Jacob }; 370d902101eSMatt Jacob 37143518607SKenneth D. Merry struct scsi_tape_position_long_data { 372*7c5d20a6SWarner Losh uint8_t flags; 37343518607SKenneth D. Merry #define SA_RPOS_LONG_BOP 0x80 /* Beginning of Partition */ 37443518607SKenneth D. Merry #define SA_RPOS_LONG_EOP 0x40 /* End of Partition */ 37543518607SKenneth D. Merry #define SA_RPOS_LONG_MPU 0x08 /* Mark Position Unknown */ 37643518607SKenneth D. Merry #define SA_RPOS_LONG_LONU 0x04 /* Logical Object Number Unknown */ 37743518607SKenneth D. Merry #define SA_RPOS_LONG_BPEW 0x01 /* Beyond Programmable Early Warning */ 378*7c5d20a6SWarner Losh uint8_t reserved[3]; 379*7c5d20a6SWarner Losh uint8_t partition[4]; 380*7c5d20a6SWarner Losh uint8_t logical_object_num[8]; 381*7c5d20a6SWarner Losh uint8_t logical_file_num[8]; 382*7c5d20a6SWarner Losh uint8_t set_id[8]; 38343518607SKenneth D. Merry }; 38443518607SKenneth D. Merry 38543518607SKenneth D. Merry struct scsi_tape_position_ext_data { 386*7c5d20a6SWarner Losh uint8_t flags; 38743518607SKenneth D. Merry #define SA_RPOS_EXT_BOP 0x80 /* Beginning of Partition */ 38843518607SKenneth D. Merry #define SA_RPOS_EXT_EOP 0x40 /* End of Partition */ 38943518607SKenneth D. Merry #define SA_RPOS_EXT_LOCU 0x20 /* Logical Object Count Unknown */ 39043518607SKenneth D. Merry #define SA_RPOS_EXT_BYCU 0x10 /* Byte Count Unknown */ 39143518607SKenneth D. Merry #define SA_RPOS_EXT_LOLU 0x04 /* Logical Object Location Unknown */ 39243518607SKenneth D. Merry #define SA_RPOS_EXT_PERR 0x02 /* Position Error */ 39343518607SKenneth D. Merry #define SA_RPOS_EXT_BPEW 0x01 /* Beyond Programmable Early Warning */ 394*7c5d20a6SWarner Losh uint8_t partition; 395*7c5d20a6SWarner Losh uint8_t length[2]; 396*7c5d20a6SWarner Losh uint8_t reserved; 397*7c5d20a6SWarner Losh uint8_t num_objects[3]; 398*7c5d20a6SWarner Losh uint8_t first_object[8]; 399*7c5d20a6SWarner Losh uint8_t last_object[8]; 400*7c5d20a6SWarner Losh uint8_t bytes_in_buffer[8]; 40143518607SKenneth D. Merry }; 40243518607SKenneth D. Merry 403d902101eSMatt Jacob struct scsi_tape_locate { 404*7c5d20a6SWarner Losh uint8_t opcode; 405*7c5d20a6SWarner Losh uint8_t byte1; 406d902101eSMatt Jacob #define SA_SPOS_IMMED 0x01 407d902101eSMatt Jacob #define SA_SPOS_CP 0x02 408d902101eSMatt Jacob #define SA_SPOS_BT 0x04 409*7c5d20a6SWarner Losh uint8_t reserved1; 410*7c5d20a6SWarner Losh uint8_t blkaddr[4]; 41143518607SKenneth D. Merry #define SA_SPOS_MAX_BLK 0xffffffff 412*7c5d20a6SWarner Losh uint8_t reserved2; 413*7c5d20a6SWarner Losh uint8_t partition; 414*7c5d20a6SWarner Losh uint8_t control; 415d902101eSMatt Jacob }; 416d902101eSMatt Jacob 41743518607SKenneth D. Merry struct scsi_locate_16 { 418*7c5d20a6SWarner Losh uint8_t opcode; 419*7c5d20a6SWarner Losh uint8_t byte1; 42043518607SKenneth D. Merry #define SA_LC_IMMEDIATE 0x01 42143518607SKenneth D. Merry #define SA_LC_CP 0x02 42243518607SKenneth D. Merry #define SA_LC_DEST_TYPE_MASK 0x38 42343518607SKenneth D. Merry #define SA_LC_DEST_TYPE_SHIFT 3 42443518607SKenneth D. Merry #define SA_LC_DEST_OBJECT 0x00 42543518607SKenneth D. Merry #define SA_LC_DEST_FILE 0x01 42643518607SKenneth D. Merry #define SA_LC_DEST_SET 0x02 42743518607SKenneth D. Merry #define SA_LC_DEST_EOD 0x03 428*7c5d20a6SWarner Losh uint8_t byte2; 42943518607SKenneth D. Merry #define SA_LC_BAM_IMPLICIT 0x00 43043518607SKenneth D. Merry #define SA_LC_BAM_EXPLICIT 0x01 431*7c5d20a6SWarner Losh uint8_t partition; 432*7c5d20a6SWarner Losh uint8_t logical_id[8]; 433*7c5d20a6SWarner Losh uint8_t reserved[3]; 434*7c5d20a6SWarner Losh uint8_t control; 43543518607SKenneth D. Merry }; 43643518607SKenneth D. Merry 43743518607SKenneth D. Merry struct scsi_report_density_support { 438*7c5d20a6SWarner Losh uint8_t opcode; 439*7c5d20a6SWarner Losh uint8_t byte1; 44043518607SKenneth D. Merry #define SRDS_MEDIA 0x01 44143518607SKenneth D. Merry #define SRDS_MEDIUM_TYPE 0x02 442*7c5d20a6SWarner Losh uint8_t reserved[5]; 443*7c5d20a6SWarner Losh uint8_t length[2]; 44443518607SKenneth D. Merry #define SRDS_MAX_LENGTH 0xffff 445*7c5d20a6SWarner Losh uint8_t control; 44643518607SKenneth D. Merry }; 44743518607SKenneth D. Merry 44843518607SKenneth D. Merry struct scsi_density_hdr { 449*7c5d20a6SWarner Losh uint8_t length[2]; 450*7c5d20a6SWarner Losh uint8_t reserved[2]; 451*7c5d20a6SWarner Losh uint8_t descriptor[]; 45243518607SKenneth D. Merry }; 45343518607SKenneth D. Merry 45443518607SKenneth D. Merry struct scsi_density_data { 455*7c5d20a6SWarner Losh uint8_t primary_density_code; 456*7c5d20a6SWarner Losh uint8_t secondary_density_code; 457*7c5d20a6SWarner Losh uint8_t byte2; 45843518607SKenneth D. Merry #define SDD_DLV 0x01 45943518607SKenneth D. Merry #define SDD_DEFLT 0x20 46043518607SKenneth D. Merry #define SDD_DUP 0x40 46143518607SKenneth D. Merry #define SDD_WRTOK 0x80 462*7c5d20a6SWarner Losh uint8_t length[2]; 46343518607SKenneth D. Merry #define SDD_DEFAULT_LENGTH 52 464*7c5d20a6SWarner Losh uint8_t bits_per_mm[3]; 465*7c5d20a6SWarner Losh uint8_t media_width[2]; 466*7c5d20a6SWarner Losh uint8_t tracks[2]; 467*7c5d20a6SWarner Losh uint8_t capacity[4]; 468*7c5d20a6SWarner Losh uint8_t assigning_org[8]; 469*7c5d20a6SWarner Losh uint8_t density_name[8]; 470*7c5d20a6SWarner Losh uint8_t description[20]; 47143518607SKenneth D. Merry }; 47243518607SKenneth D. Merry 47343518607SKenneth D. Merry struct scsi_medium_type_data { 474*7c5d20a6SWarner Losh uint8_t medium_type; 475*7c5d20a6SWarner Losh uint8_t reserved1; 476*7c5d20a6SWarner Losh uint8_t length[2]; 47743518607SKenneth D. Merry #define SMTD_DEFAULT_LENGTH 52 478*7c5d20a6SWarner Losh uint8_t num_density_codes; 479*7c5d20a6SWarner Losh uint8_t primary_density_codes[9]; 480*7c5d20a6SWarner Losh uint8_t media_width[2]; 481*7c5d20a6SWarner Losh uint8_t medium_length[2]; 482*7c5d20a6SWarner Losh uint8_t reserved2[2]; 483*7c5d20a6SWarner Losh uint8_t assigning_org[8]; 484*7c5d20a6SWarner Losh uint8_t medium_type_name[8]; 485*7c5d20a6SWarner Losh uint8_t description[20]; 48643518607SKenneth D. Merry }; 48743518607SKenneth D. Merry 48843518607SKenneth D. Merry /* 4894ab55886SKenneth D. Merry * Manufacturer-assigned Serial Number VPD page. 4904ab55886SKenneth D. Merry * Current as of SSC-5r03, 28 September 2016. 4914ab55886SKenneth D. Merry */ 4924ab55886SKenneth D. Merry struct scsi_vpd_mfg_serial_number 4934ab55886SKenneth D. Merry { 494*7c5d20a6SWarner Losh uint8_t device; 495*7c5d20a6SWarner Losh uint8_t page_code; 4964ab55886SKenneth D. Merry #define SVPD_MFG_SERIAL_NUMBER_PAGE_CODE 0xB1 497*7c5d20a6SWarner Losh uint8_t page_length[2]; 498*7c5d20a6SWarner Losh uint8_t mfg_serial_num[]; 4994ab55886SKenneth D. Merry }; 5004ab55886SKenneth D. Merry 5014ab55886SKenneth D. Merry /* 50243518607SKenneth D. Merry * Security Protocol Specific values for the Tape Data Encryption protocol 50343518607SKenneth D. Merry * (0x20) used with SECURITY PROTOCOL IN. See below for values used with 50443518607SKenneth D. Merry * SECURITY PROTOCOL OUT. Current as of SSC4r03. 50543518607SKenneth D. Merry */ 50643518607SKenneth D. Merry #define TDE_IN_SUPPORT_PAGE 0x0000 50743518607SKenneth D. Merry #define TDE_OUT_SUPPORT_PAGE 0x0001 50843518607SKenneth D. Merry #define TDE_DATA_ENC_CAP_PAGE 0x0010 50943518607SKenneth D. Merry #define TDE_SUPPORTED_KEY_FORMATS_PAGE 0x0011 51043518607SKenneth D. Merry #define TDE_DATA_ENC_MAN_CAP_PAGE 0x0012 51143518607SKenneth D. Merry #define TDE_DATA_ENC_STATUS_PAGE 0x0020 51243518607SKenneth D. Merry #define TDE_NEXT_BLOCK_ENC_STATUS_PAGE 0x0021 51343518607SKenneth D. Merry #define TDE_GET_ENC_MAN_ATTR_PAGE 0x0022 51443518607SKenneth D. Merry #define TDE_RANDOM_NUM_PAGE 0x0030 51543518607SKenneth D. Merry #define TDE_KEY_WRAP_PK_PAGE 0x0031 51643518607SKenneth D. Merry 51743518607SKenneth D. Merry /* 51843518607SKenneth D. Merry * Tape Data Encryption protocol pages used with SECURITY PROTOCOL IN and 51943518607SKenneth D. Merry * SECURITY PROTOCOL OUT. 52043518607SKenneth D. Merry */ 52143518607SKenneth D. Merry /* 52243518607SKenneth D. Merry * Tape Data Encryption In Support page (0x0000). 52343518607SKenneth D. Merry */ 52443518607SKenneth D. Merry struct tde_in_support_page { 52543518607SKenneth D. Merry uint8_t page_code[2]; 52643518607SKenneth D. Merry uint8_t page_length[2]; 52743518607SKenneth D. Merry uint8_t page_codes[]; 52843518607SKenneth D. Merry }; 52943518607SKenneth D. Merry 53043518607SKenneth D. Merry /* 53143518607SKenneth D. Merry * Tape Data Encryption Out Support page (0x0001). 53243518607SKenneth D. Merry */ 53343518607SKenneth D. Merry struct tde_out_support_page { 53443518607SKenneth D. Merry uint8_t page_code[2]; 53543518607SKenneth D. Merry uint8_t page_length[2]; 53643518607SKenneth D. Merry uint8_t page_codes[]; 53743518607SKenneth D. Merry }; 53843518607SKenneth D. Merry 53943518607SKenneth D. Merry /* 54043518607SKenneth D. Merry * Logical block encryption algorithm descriptor. This is reported in the 54143518607SKenneth D. Merry * Data Encryption Capabilities page. 54243518607SKenneth D. Merry */ 54343518607SKenneth D. Merry struct tde_block_enc_alg_desc { 54443518607SKenneth D. Merry uint8_t alg_index; 54543518607SKenneth D. Merry uint8_t reserved1; 54643518607SKenneth D. Merry uint8_t desc_length[2]; 54743518607SKenneth D. Merry uint8_t byte4; 54843518607SKenneth D. Merry #define TDE_BEA_AVFMV 0x80 54943518607SKenneth D. Merry #define TDE_BEA_SDK_C 0x40 55043518607SKenneth D. Merry #define TDE_BEA_MAC_C 0x20 55143518607SKenneth D. Merry #define TDE_BEA_DELB_C 0x10 55243518607SKenneth D. Merry #define TDE_BEA_DECRYPT_C_MASK 0x0c 55343518607SKenneth D. Merry #define TDE_BEA_DECRYPT_C_EXT 0x0c 55443518607SKenneth D. Merry #define TDE_BEA_DECRYPT_C_HARD 0x08 55543518607SKenneth D. Merry #define TDE_BEA_DECRYPT_C_SOFT 0x04 55643518607SKenneth D. Merry #define TDE_BEA_DECRYPT_C_NO_CAP 0x00 55743518607SKenneth D. Merry #define TDE_BEA_ENCRYPT_C_MASK 0x03 55843518607SKenneth D. Merry #define TDE_BEA_ENCRYPT_C_EXT 0x03 55943518607SKenneth D. Merry #define TDE_BEA_ENCRYPT_C_HARD 0x02 56043518607SKenneth D. Merry #define TDE_BEA_ENCRYPT_C_SOFT 0x01 56143518607SKenneth D. Merry #define TDE_BEA_ENCRYPT_C_NO_CAP 0x00 56243518607SKenneth D. Merry uint8_t byte5; 56343518607SKenneth D. Merry #define TDE_BEA_AVFCLP_MASK 0xc0 56443518607SKenneth D. Merry #define TDE_BEA_AVFCLP_VALID 0x80 56543518607SKenneth D. Merry #define TDE_BEA_AVFCLP_NOT_VALID 0x40 56643518607SKenneth D. Merry #define TDE_BEA_AVFCLP_NOT_APP 0x00 56743518607SKenneth D. Merry #define TDE_BEA_NONCE_C_MASK 0x30 56843518607SKenneth D. Merry #define TDE_BEA_NONCE_C_SUPPORTED 0x30 56943518607SKenneth D. Merry #define TDE_BEA_NONCE_C_PROVIDED 0x20 57043518607SKenneth D. Merry #define TDE_BEA_NONCE_C_GENERATED 0x10 57143518607SKenneth D. Merry #define TDE_BEA_NONCE_C_NOT_REQUIRED 0x00 57243518607SKenneth D. Merry #define TDE_BEA_KADF_C 0x08 57343518607SKenneth D. Merry #define TDE_BEA_VCELB_C 0x04 57443518607SKenneth D. Merry #define TDE_BEA_UKADF 0x02 57543518607SKenneth D. Merry #define TDE_BEA_AKADF 0x01 57643518607SKenneth D. Merry uint8_t max_unauth_key_bytes[2]; 57743518607SKenneth D. Merry uint8_t max_auth_key_bytes[2]; 57843518607SKenneth D. Merry uint8_t lbe_key_size[2]; 57943518607SKenneth D. Merry uint8_t byte12; 58043518607SKenneth D. Merry #define TDE_BEA_DKAD_C_MASK 0xc0 58143518607SKenneth D. Merry #define TDE_BEA_DKAD_C_CAPABLE 0xc0 58243518607SKenneth D. Merry #define TDE_BEA_DKAD_C_NOT_ALLOWED 0x80 58343518607SKenneth D. Merry #define TDE_BEA_DKAD_C_REQUIRED 0x40 58443518607SKenneth D. Merry #define TDE_BEA_EEMC_C_MASK 0x30 58543518607SKenneth D. Merry #define TDE_BEA_EEMC_C_ALLOWED 0x20 58643518607SKenneth D. Merry #define TDE_BEA_EEMC_C_NOT_ALLOWED 0x10 58743518607SKenneth D. Merry #define TDE_BEA_EEMC_C_NOT_SPECIFIED 0x00 58843518607SKenneth D. Merry /* 58943518607SKenneth D. Merry * Raw Decryption Mode Control Capabilities (RDMC_C) field. The 59043518607SKenneth D. Merry * descriptions are too complex to represent as a simple name. 59143518607SKenneth D. Merry */ 59243518607SKenneth D. Merry #define TDE_BEA_RDMC_C_MASK 0x0e 59343518607SKenneth D. Merry #define TDE_BEA_RDMC_C_MODE_7 0x0e 59443518607SKenneth D. Merry #define TDE_BEA_RDMC_C_MODE_6 0x0c 59543518607SKenneth D. Merry #define TDE_BEA_RDMC_C_MODE_5 0x0a 59643518607SKenneth D. Merry #define TDE_BEA_RDMC_C_MODE_4 0x08 59743518607SKenneth D. Merry #define TDE_BEA_RDMC_C_MODE_1 0x02 59843518607SKenneth D. Merry #define TDE_BEA_EAREM 0x01 59943518607SKenneth D. Merry uint8_t byte13; 60043518607SKenneth D. Merry #define TDE_BEA_MAX_EEDKS_MASK 0x0f 60143518607SKenneth D. Merry uint8_t msdk_count[2]; 60243518607SKenneth D. Merry uint8_t max_eedk_size[2]; 60343518607SKenneth D. Merry uint8_t reserved2[2]; 60443518607SKenneth D. Merry uint8_t security_algo_code[4]; 60543518607SKenneth D. Merry }; 60643518607SKenneth D. Merry 60743518607SKenneth D. Merry /* 60843518607SKenneth D. Merry * Data Encryption Capabilities page (0x0010). 60943518607SKenneth D. Merry */ 61043518607SKenneth D. Merry struct tde_data_enc_cap_page { 61143518607SKenneth D. Merry uint8_t page_code[2]; 61243518607SKenneth D. Merry uint8_t page_length; 61343518607SKenneth D. Merry uint8_t byte4; 61443518607SKenneth D. Merry #define DATA_ENC_CAP_EXTDECC_MASK 0x0c 61543518607SKenneth D. Merry #define DATA_ENC_CAP_EXTDECC_NOT_REPORTED 0x00 61643518607SKenneth D. Merry #define DATA_ENC_CAP_EXTDECC_NOT_CAPABLE 0x04 61743518607SKenneth D. Merry #define DATA_ENC_CAP_EXTDECC_CAPABLE 0x08 61843518607SKenneth D. Merry #define DATA_ENC_CAP_CFG_P_MASK 0x03 61943518607SKenneth D. Merry #define DATA_ENC_CAP_CFG_P_NOT_REPORTED 0x00 62043518607SKenneth D. Merry #define DATA_ENC_CAP_CFG_P_ALLOWED 0x01 62143518607SKenneth D. Merry #define DATA_ENC_CAP_CFG_P_NOT_ALLOWED 0x02 62243518607SKenneth D. Merry uint8_t reserved[15]; 62343518607SKenneth D. Merry struct tde_block_enc_alg_desc alg_descs[]; 62443518607SKenneth D. Merry }; 62543518607SKenneth D. Merry 62643518607SKenneth D. Merry /* 62743518607SKenneth D. Merry * Tape Data Encryption Supported Key Formats page (0x0011). 62843518607SKenneth D. Merry */ 62943518607SKenneth D. Merry struct tde_supported_key_formats_page { 63043518607SKenneth D. Merry uint8_t page_code[2]; 63143518607SKenneth D. Merry uint8_t page_length[2]; 63243518607SKenneth D. Merry uint8_t key_formats_list[]; 63343518607SKenneth D. Merry }; 63443518607SKenneth D. Merry 63543518607SKenneth D. Merry /* 63643518607SKenneth D. Merry * Tape Data Encryption Management Capabilities page (0x0012). 63743518607SKenneth D. Merry */ 63843518607SKenneth D. Merry struct tde_data_enc_man_cap_page { 63943518607SKenneth D. Merry uint8_t page_code[2]; 64043518607SKenneth D. Merry uint8_t page_length[2]; 64143518607SKenneth D. Merry uint8_t byte4; 64243518607SKenneth D. Merry #define TDE_DEMC_LOCK_C 0x01 64343518607SKenneth D. Merry uint8_t byte5; 64443518607SKenneth D. Merry #define TDE_DEMC_CKOD_C 0x04 64543518607SKenneth D. Merry #define TDE_DEMC_CKORP_C 0x02 64643518607SKenneth D. Merry #define TDE_DEMC_CKORL_C 0x01 64743518607SKenneth D. Merry uint8_t reserved1; 64843518607SKenneth D. Merry uint8_t byte7; 64943518607SKenneth D. Merry #define TDE_DEMC_AITN_C 0x04 65043518607SKenneth D. Merry #define TDE_DEMC_LOCAL_C 0x02 65143518607SKenneth D. Merry #define TDE_DEMC_PUBLIC_C 0x01 65243518607SKenneth D. Merry uint8_t reserved2[8]; 65343518607SKenneth D. Merry }; 65443518607SKenneth D. Merry 65543518607SKenneth D. Merry /* 65643518607SKenneth D. Merry * Tape Data Encryption Status Page (0x0020). 65743518607SKenneth D. Merry */ 65843518607SKenneth D. Merry struct tde_data_enc_status_page { 65943518607SKenneth D. Merry uint8_t page_code[2]; 66043518607SKenneth D. Merry uint8_t page_length[2]; 66143518607SKenneth D. Merry uint8_t scope; 66243518607SKenneth D. Merry #define TDE_DES_IT_NEXUS_SCOPE_MASK 0xe0 66343518607SKenneth D. Merry #define TDE_DES_LBE_SCOPE_MASK 0x07 66443518607SKenneth D. Merry uint8_t encryption_mode; 66543518607SKenneth D. Merry uint8_t decryption_mode; 66643518607SKenneth D. Merry uint8_t algo_index; 66743518607SKenneth D. Merry uint8_t key_instance_counter[4]; 66843518607SKenneth D. Merry uint8_t byte12; 66943518607SKenneth D. Merry #define TDE_DES_PARAM_CTRL_MASK 0x70 67043518607SKenneth D. Merry #define TDE_DES_PARAM_CTRL_MGMT 0x40 67143518607SKenneth D. Merry #define TDE_DES_PARAM_CTRL_CHANGER 0x30 67243518607SKenneth D. Merry #define TDE_DES_PARAM_CTRL_DRIVE 0x20 67343518607SKenneth D. Merry #define TDE_DES_PARAM_CTRL_EXT 0x10 67443518607SKenneth D. Merry #define TDE_DES_PARAM_CTRL_NOT_REPORTED 0x00 67543518607SKenneth D. Merry #define TDE_DES_VCELB 0x08 67643518607SKenneth D. Merry #define TDE_DES_CEEMS_MASK 0x06 67743518607SKenneth D. Merry #define TDE_DES_RDMD 0x01 67843518607SKenneth D. Merry uint8_t enc_params_kad_format; 67943518607SKenneth D. Merry uint8_t asdk_count[2]; 68043518607SKenneth D. Merry uint8_t reserved[8]; 68143518607SKenneth D. Merry uint8_t key_assoc_data_desc[]; 68243518607SKenneth D. Merry }; 68343518607SKenneth D. Merry 68443518607SKenneth D. Merry /* 68543518607SKenneth D. Merry * Tape Data Encryption Next Block Encryption Status page (0x0021). 68643518607SKenneth D. Merry */ 68743518607SKenneth D. Merry struct tde_next_block_enc_status_page { 68843518607SKenneth D. Merry uint8_t page_code[2]; 68943518607SKenneth D. Merry uint8_t page_length[2]; 69043518607SKenneth D. Merry uint8_t logical_obj_number[8]; 69143518607SKenneth D. Merry uint8_t status; 69243518607SKenneth D. Merry #define TDE_NBES_COMP_STATUS_MASK 0xf0 69343518607SKenneth D. Merry #define TDE_NBES_COMP_INCAPABLE 0x00 69443518607SKenneth D. Merry #define TDE_NBES_COMP_NOT_YET 0x10 69543518607SKenneth D. Merry #define TDE_NBES_COMP_NOT_A_BLOCK 0x20 69643518607SKenneth D. Merry #define TDE_NBES_COMP_NOT_COMPRESSED 0x30 69743518607SKenneth D. Merry #define TDE_NBES_COMP_COMPRESSED 0x40 69843518607SKenneth D. Merry #define TDE_NBES_ENC_STATUS_MASK 0x0f 69943518607SKenneth D. Merry #define TDE_NBES_ENC_INCAPABLE 0x00 70043518607SKenneth D. Merry #define TDE_NBES_ENC_NOT_YET 0x01 70143518607SKenneth D. Merry #define TDE_NBES_ENC_NOT_A_BLOCK 0x02 70243518607SKenneth D. Merry #define TDE_NBES_ENC_NOT_ENCRYPTED 0x03 70343518607SKenneth D. Merry #define TDE_NBES_ENC_ALG_NOT_SUPPORTED 0x04 70443518607SKenneth D. Merry #define TDE_NBES_ENC_SUPPORTED_ALG 0x05 70543518607SKenneth D. Merry #define TDE_NBES_ENC_NO_KEY 0x06 70643518607SKenneth D. Merry uint8_t algo_index; 70743518607SKenneth D. Merry uint8_t byte14; 70843518607SKenneth D. Merry #define TDE_NBES_EMES 0x02 70943518607SKenneth D. Merry #define TDE_NBES_RDMDS 0x01 71043518607SKenneth D. Merry uint8_t next_block_kad_format; 71143518607SKenneth D. Merry uint8_t key_assoc_data_desc[]; 71243518607SKenneth D. Merry }; 71343518607SKenneth D. Merry 71443518607SKenneth D. Merry /* 71543518607SKenneth D. Merry * Tape Data Encryption Get Encryption Management Attributes page (0x0022). 71643518607SKenneth D. Merry */ 71743518607SKenneth D. Merry struct tde_get_enc_man_attr_page { 71843518607SKenneth D. Merry uint8_t page_code[2]; 71943518607SKenneth D. Merry uint8_t reserved[3]; 72043518607SKenneth D. Merry uint8_t byte5; 72143518607SKenneth D. Merry #define TDE_GEMA_CAOD 0x01 72243518607SKenneth D. Merry uint8_t page_length[2]; 72343518607SKenneth D. Merry uint8_t enc_mgmt_attr_desc[]; 72443518607SKenneth D. Merry }; 72543518607SKenneth D. Merry 72643518607SKenneth D. Merry /* 72743518607SKenneth D. Merry * Tape Data Encryption Random Number page (0x0030). 72843518607SKenneth D. Merry */ 72943518607SKenneth D. Merry struct tde_random_num_page { 73043518607SKenneth D. Merry uint8_t page_code[2]; 73143518607SKenneth D. Merry uint8_t page_length[2]; 73243518607SKenneth D. Merry uint8_t random_number[32]; 73343518607SKenneth D. Merry }; 73443518607SKenneth D. Merry 73543518607SKenneth D. Merry /* 73643518607SKenneth D. Merry * Tape Data Encryption Device Server Key Wrapping Public Key page (0x0031). 73743518607SKenneth D. Merry */ 73843518607SKenneth D. Merry struct tde_key_wrap_pk_page { 73943518607SKenneth D. Merry uint8_t page_code[2]; 74043518607SKenneth D. Merry uint8_t page_length[2]; 74143518607SKenneth D. Merry uint8_t public_key_type[4]; 74243518607SKenneth D. Merry uint8_t public_key_format[4]; 74343518607SKenneth D. Merry uint8_t public_key_length[2]; 74443518607SKenneth D. Merry uint8_t public_key[]; 74543518607SKenneth D. Merry }; 74643518607SKenneth D. Merry 74743518607SKenneth D. Merry /* 74843518607SKenneth D. Merry * Security Protocol Specific values for the Tape Data Encryption protocol 74943518607SKenneth D. Merry * (0x20) used with SECURITY PROTOCOL OUT. See above for values used with 75043518607SKenneth D. Merry * SECURITY PROTOCOL IN. Current as of SSCr03. 75143518607SKenneth D. Merry */ 75243518607SKenneth D. Merry #define TDE_SET_DATA_ENC_PAGE 0x0010 75343518607SKenneth D. Merry #define TDE_SA_ENCAP_PAGE 0x0011 75443518607SKenneth D. Merry #define TDE_SET_ENC_MGMT_ATTR_PAGE 0x0022 75543518607SKenneth D. Merry 75643518607SKenneth D. Merry /* 75743518607SKenneth D. Merry * Tape Data Encryption Set Data Encryption page (0x0010). 75843518607SKenneth D. Merry */ 75943518607SKenneth D. Merry struct tde_set_data_enc_page { 76043518607SKenneth D. Merry uint8_t page_code[2]; 76143518607SKenneth D. Merry uint8_t page_length[2]; 76243518607SKenneth D. Merry uint8_t byte4; 76343518607SKenneth D. Merry #define TDE_SDE_SCOPE_MASK 0xe0 76443518607SKenneth D. Merry #define TDE_SDE_SCOPE_ALL_IT_NEXUS 0x80 76543518607SKenneth D. Merry #define TDE_SDE_SCOPE_LOCAL 0x40 76643518607SKenneth D. Merry #define TDE_SDE_SCOPE_PUBLIC 0x00 76743518607SKenneth D. Merry #define TDE_SDE_LOCK 0x01 76843518607SKenneth D. Merry uint8_t byte5; 76943518607SKenneth D. Merry #define TDE_SDE_CEEM_MASK 0xc0 77043518607SKenneth D. Merry #define TDE_SDE_CEEM_ENCRYPT 0xc0 77143518607SKenneth D. Merry #define TDE_SDE_CEEM_EXTERNAL 0x80 77243518607SKenneth D. Merry #define TDE_SDE_CEEM_NO_CHECK 0x40 77343518607SKenneth D. Merry #define TDE_SDE_RDMC_MASK 0x30 77443518607SKenneth D. Merry #define TDE_SDE_RDMC_DISABLED 0x30 77543518607SKenneth D. Merry #define TDE_SDE_RDMC_ENABLED 0x20 77643518607SKenneth D. Merry #define TDE_SDE_RDMC_DEFAULT 0x00 77743518607SKenneth D. Merry #define TDE_SDE_SDK 0x08 77843518607SKenneth D. Merry #define TDE_SDE_CKOD 0x04 77943518607SKenneth D. Merry #define TDE_SDE_CKORP 0x02 78043518607SKenneth D. Merry #define TDE_SDE_CKORL 0x01 78143518607SKenneth D. Merry uint8_t encryption_mode; 78243518607SKenneth D. Merry #define TDE_SDE_ENC_MODE_DISABLE 0x00 78343518607SKenneth D. Merry #define TDE_SDE_ENC_MODE_EXTERNAL 0x01 78443518607SKenneth D. Merry #define TDE_SDE_ENC_MODE_ENCRYPT 0x02 78543518607SKenneth D. Merry uint8_t decryption_mode; 78643518607SKenneth D. Merry #define TDE_SDE_DEC_MODE_DISABLE 0x00 78743518607SKenneth D. Merry #define TDE_SDE_DEC_MODE_RAW 0x01 78843518607SKenneth D. Merry #define TDE_SDE_DEC_MODE_DECRYPT 0x02 78943518607SKenneth D. Merry #define TDE_SDE_DEC_MODE_MIXED 0x03 79043518607SKenneth D. Merry uint8_t algo_index; 79143518607SKenneth D. Merry uint8_t lbe_key_format; 79243518607SKenneth D. Merry #define TDE_SDE_KEY_PLAINTEXT 0x00 79343518607SKenneth D. Merry #define TDE_SDE_KEY_VENDOR_SPEC 0x01 79443518607SKenneth D. Merry #define TDE_SDE_KEY_PUBLIC_WRAP 0x02 79543518607SKenneth D. Merry #define TDE_SDE_KEY_ESP_SCSI 0x03 79643518607SKenneth D. Merry uint8_t kad_format; 79743518607SKenneth D. Merry #define TDE_SDE_KAD_ASCII 0x02 79843518607SKenneth D. Merry #define TDE_SDE_KAD_BINARY 0x01 79943518607SKenneth D. Merry #define TDE_SDE_KAD_UNSPECIFIED 0x00 80043518607SKenneth D. Merry uint8_t reserved[7]; 80143518607SKenneth D. Merry uint8_t lbe_key_length[2]; 80243518607SKenneth D. Merry uint8_t lbe_key[]; 80343518607SKenneth D. Merry }; 80443518607SKenneth D. Merry 80543518607SKenneth D. Merry /* 80643518607SKenneth D. Merry * Used for the Vendor Specific key format (0x01). 80743518607SKenneth D. Merry */ 80843518607SKenneth D. Merry struct tde_key_format_vendor { 80943518607SKenneth D. Merry uint8_t t10_vendor_id[8]; 81043518607SKenneth D. Merry uint8_t vendor_key[]; 81143518607SKenneth D. Merry }; 81243518607SKenneth D. Merry 81343518607SKenneth D. Merry /* 81443518607SKenneth D. Merry * Used for the public key wrapped format (0x02). 81543518607SKenneth D. Merry */ 81643518607SKenneth D. Merry struct tde_key_format_public_wrap { 81743518607SKenneth D. Merry uint8_t parameter_set[2]; 81843518607SKenneth D. Merry #define TDE_PARAM_SET_RSA2048 0x0000 81943518607SKenneth D. Merry #define TDE_PARAM_SET_ECC521 0x0010 82043518607SKenneth D. Merry uint8_t label_length[2]; 82143518607SKenneth D. Merry uint8_t label[]; 82243518607SKenneth D. Merry }; 82343518607SKenneth D. Merry 82443518607SKenneth D. Merry /* 82543518607SKenneth D. Merry * Tape Data Encryption SA Encapsulation page (0x0011). 82643518607SKenneth D. Merry */ 82743518607SKenneth D. Merry struct tde_sa_encap_page { 82843518607SKenneth D. Merry uint8_t page_code[2]; 82943518607SKenneth D. Merry uint8_t data_desc[]; 83043518607SKenneth D. Merry }; 83143518607SKenneth D. Merry 83243518607SKenneth D. Merry /* 83343518607SKenneth D. Merry * Tape Data Encryption Set Encryption Management Attributes page (0x0022). 83443518607SKenneth D. Merry */ 83543518607SKenneth D. Merry struct tde_set_enc_mgmt_attr_page { 83643518607SKenneth D. Merry uint8_t page_code[2]; 83743518607SKenneth D. Merry uint8_t reserved[3]; 83843518607SKenneth D. Merry uint8_t byte5; 83943518607SKenneth D. Merry #define TDE_SEMA_CAOD 0x01 84043518607SKenneth D. Merry uint8_t page_length[2]; 84143518607SKenneth D. Merry uint8_t attr_desc[]; 84243518607SKenneth D. Merry }; 84343518607SKenneth D. Merry 84443518607SKenneth D. Merry /* 84543518607SKenneth D. Merry * Tape Data Encryption descriptor format. 84643518607SKenneth D. Merry * SSC4r03 Section 8.5.4.2.1 Table 197 84743518607SKenneth D. Merry */ 84843518607SKenneth D. Merry struct tde_data_enc_desc { 84943518607SKenneth D. Merry uint8_t key_desc_type; 85043518607SKenneth D. Merry #define TDE_KEY_DESC_WK_KAD 0x04 85143518607SKenneth D. Merry #define TDE_KEY_DESC_M_KAD 0x03 85243518607SKenneth D. Merry #define TDE_KEY_DESC_NONCE_VALUE 0x02 85343518607SKenneth D. Merry #define TDE_KEY_DESC_A_KAD 0x01 85443518607SKenneth D. Merry #define TDE_KEY_DESC_U_KAD 0x00 85543518607SKenneth D. Merry uint8_t byte2; 85643518607SKenneth D. Merry #define TDE_KEY_DESC_AUTH_MASK 0x07 85743518607SKenneth D. Merry #define TDE_KEY_DESC_AUTH_FAILED 0x04 85843518607SKenneth D. Merry #define TDE_KEY_DESC_AUTH_SUCCESS 0x03 85943518607SKenneth D. Merry #define TDE_KEY_DESC_AUTH_NO_ATTEMPT 0x02 86043518607SKenneth D. Merry #define TDE_KEY_DESC_AUTH_U_KAD 0x01 86143518607SKenneth D. Merry uint8_t key_desc_length[2]; 86243518607SKenneth D. Merry uint8_t key_desc[]; 86343518607SKenneth D. Merry }; 86443518607SKenneth D. Merry 86543518607SKenneth D. Merry /* 86643518607SKenneth D. Merry * Wrapped Key descriptor format. 86743518607SKenneth D. Merry * SSC4r03 Section 8.5.4.3.1 Table 200 86843518607SKenneth D. Merry */ 86943518607SKenneth D. Merry struct tde_wrapped_key_desc { 87043518607SKenneth D. Merry uint8_t wrapped_key_type; 87143518607SKenneth D. Merry #define TDE_WRAP_KEY_DESC_LENGTH 0x04 87243518607SKenneth D. Merry #define TDE_WRAP_KEY_DESC_IDENT 0x03 87343518607SKenneth D. Merry #define TDE_WRAP_KEY_DESC_INFO 0x02 87443518607SKenneth D. Merry #define TDE_WRAP_KEY_DESC_ENTITY_ID 0x01 87543518607SKenneth D. Merry #define TDE_WRAP_KEY_DESC_DEVICE_ID 0x00 87643518607SKenneth D. Merry uint8_t reserved; 87743518607SKenneth D. Merry uint8_t wrapped_desc_length[2]; 87843518607SKenneth D. Merry uint8_t wrapped_desc[]; 87943518607SKenneth D. Merry }; 88043518607SKenneth D. Merry 88143518607SKenneth D. Merry /* 88243518607SKenneth D. Merry * Encryption management attributes descriptor format. 88343518607SKenneth D. Merry * SSC4r03 Section 8.5.4.4.1 Table 202 88443518607SKenneth D. Merry */ 88543518607SKenneth D. Merry struct tde_enc_mgmt_attr_desc { 88643518607SKenneth D. Merry uint8_t enc_mgmt_attr_type[2]; 88743518607SKenneth D. Merry #define TDE_EMAD_DESIRED_KEY_MGR_OP 0x0000 88843518607SKenneth D. Merry #define TDE_EMAD_LOG_BLOCK_ENC_KEY_CRIT 0x0001 88943518607SKenneth D. Merry #define TDE_EMAD_LOG_BLOCK_ENC_KEY_WRAP 0x0002 89043518607SKenneth D. Merry uint8_t reserved; 89143518607SKenneth D. Merry uint8_t byte2; 89243518607SKenneth D. Merry #define TDE_EMAD_CRIT 0x80 89343518607SKenneth D. Merry uint8_t attr_length[2]; 89443518607SKenneth D. Merry uint8_t attributes[]; 89543518607SKenneth D. Merry #define TDE_EMAD_DESIRED_KEY_CREATE 0x0001 89643518607SKenneth D. Merry #define TDE_EMAD_DESIRED_KEY_RESOLVE 0x0002 89743518607SKenneth D. Merry }; 89843518607SKenneth D. Merry 89943518607SKenneth D. Merry /* 90043518607SKenneth D. Merry * Logical block encryption key selection criteria descriptor format. 90143518607SKenneth D. Merry * SSC4r03 Section 8.5.4.4.3.1 Table 206 90243518607SKenneth D. Merry */ 90343518607SKenneth D. Merry struct tde_lb_enc_key_sel_desc { 90443518607SKenneth D. Merry uint8_t lbe_key_sel_crit_type[2]; 90543518607SKenneth D. Merry /* 90643518607SKenneth D. Merry * The CRIT bit is the top bit of the first byte of the type. 90743518607SKenneth D. Merry */ 90843518607SKenneth D. Merry #define TDE_LBE_KEY_SEL_CRIT 0x80 90943518607SKenneth D. Merry #define TDE_LBE_KEY_SEL_ALGO 0x0001 91043518607SKenneth D. Merry #define TDE_LBE_KEY_SEL_ID 0x0002 91143518607SKenneth D. Merry uint8_t lbe_key_sel_crit_length[2]; 91243518607SKenneth D. Merry uint8_t lbe_key_sel_crit[]; 91343518607SKenneth D. Merry }; 91443518607SKenneth D. Merry 91543518607SKenneth D. Merry /* 91643518607SKenneth D. Merry * Logical block encryption key wrapping attribute descriptor format. 91743518607SKenneth D. Merry * SSC4r03 Section 8.5.4.4.4.1 Table 209 91843518607SKenneth D. Merry */ 91943518607SKenneth D. Merry struct tde_lb_enc_key_wrap_desc { 92043518607SKenneth D. Merry uint8_t lbe_key_wrap_type[2]; 92143518607SKenneth D. Merry /* 92243518607SKenneth D. Merry * The CRIT bit is the top bit of the first byte of the type. 92343518607SKenneth D. Merry */ 92443518607SKenneth D. Merry #define TDE_LBE_KEY_WRAP_CRIT 0x80 92543518607SKenneth D. Merry #define TDE_LBE_KEY_WRAP_KEKS 0x0001 92643518607SKenneth D. Merry uint8_t lbe_key_wrap_length[2]; 92743518607SKenneth D. Merry uint8_t lbe_key_wrap_attr[]; 92843518607SKenneth D. Merry }; 92943518607SKenneth D. Merry 93076babe50SJustin T. Gibbs /* 93176babe50SJustin T. Gibbs * Opcodes 93276babe50SJustin T. Gibbs */ 93376babe50SJustin T. Gibbs #define REWIND 0x01 93443518607SKenneth D. Merry #define FORMAT_MEDIUM 0x04 93576babe50SJustin T. Gibbs #define READ_BLOCK_LIMITS 0x05 93676babe50SJustin T. Gibbs #define SA_READ 0x08 93776babe50SJustin T. Gibbs #define SA_WRITE 0x0A 93843518607SKenneth D. Merry #define SET_CAPACITY 0x0B 93976babe50SJustin T. Gibbs #define WRITE_FILEMARKS 0x10 94076babe50SJustin T. Gibbs #define SPACE 0x11 94176babe50SJustin T. Gibbs #define RESERVE_UNIT 0x16 94276babe50SJustin T. Gibbs #define RELEASE_UNIT 0x17 94376babe50SJustin T. Gibbs #define ERASE 0x19 94476babe50SJustin T. Gibbs #define LOAD_UNLOAD 0x1B 945d902101eSMatt Jacob #define LOCATE 0x2B 946d902101eSMatt Jacob #define READ_POSITION 0x34 94743518607SKenneth D. Merry #define REPORT_DENSITY_SUPPORT 0x44 94843518607SKenneth D. Merry #define ALLOW_OVERWRITE 0x82 94943518607SKenneth D. Merry #define LOCATE_16 0x92 95076babe50SJustin T. Gibbs 95130382683SMatt Jacob /* 95230382683SMatt Jacob * Tape specific density codes- only enough of them here to recognize 95330382683SMatt Jacob * some specific older units so we can choose 2FM@EOD or FIXED blocksize 95430382683SMatt Jacob * quirks. 95530382683SMatt Jacob */ 95630382683SMatt Jacob #define SCSI_DENSITY_HALFINCH_800 0x01 95730382683SMatt Jacob #define SCSI_DENSITY_HALFINCH_1600 0x02 95830382683SMatt Jacob #define SCSI_DENSITY_HALFINCH_6250 0x03 95930382683SMatt Jacob #define SCSI_DENSITY_HALFINCH_6250C 0xC3 /* HP Compressed 6250 */ 96030382683SMatt Jacob #define SCSI_DENSITY_QIC_11_4TRK 0x04 96130382683SMatt Jacob #define SCSI_DENSITY_QIC_11_9TRK 0x84 /* Vendor Unique Emulex */ 96230382683SMatt Jacob #define SCSI_DENSITY_QIC_24 0x05 96330382683SMatt Jacob #define SCSI_DENSITY_HALFINCH_PE 0x06 96430382683SMatt Jacob #define SCSI_DENSITY_QIC_120 0x0f 96530382683SMatt Jacob #define SCSI_DENSITY_QIC_150 0x10 966d032c79fSMatt Jacob #define SCSI_DENSITY_QIC_525_320 0x11 967d032c79fSMatt Jacob #define SCSI_DENSITY_QIC_1320 0x12 96800bb66d7SMatt Jacob #define SCSI_DENSITY_QIC_2GB 0x22 96900bb66d7SMatt Jacob #define SCSI_DENSITY_QIC_4GB 0x26 970d032c79fSMatt Jacob #define SCSI_DENSITY_QIC_3080 0x29 97130382683SMatt Jacob 97276babe50SJustin T. Gibbs __BEGIN_DECLS 973*7c5d20a6SWarner Losh void scsi_read_block_limits(struct ccb_scsiio *, uint32_t, 97476babe50SJustin T. Gibbs void (*cbfcnp)(struct cam_periph *, union ccb *), 975*7c5d20a6SWarner Losh uint8_t, struct scsi_read_block_limits_data *, 976*7c5d20a6SWarner Losh uint8_t , uint32_t); 97776babe50SJustin T. Gibbs 978*7c5d20a6SWarner Losh void scsi_sa_read_write(struct ccb_scsiio *csio, uint32_t retries, 97976babe50SJustin T. Gibbs void (*cbfcnp)(struct cam_periph *, union ccb *), 980*7c5d20a6SWarner Losh uint8_t tag_action, int readop, int sli, 981*7c5d20a6SWarner Losh int fixed, uint32_t length, uint8_t *data_ptr, 982*7c5d20a6SWarner Losh uint32_t dxfer_len, uint8_t sense_len, 983*7c5d20a6SWarner Losh uint32_t timeout); 98476babe50SJustin T. Gibbs 985*7c5d20a6SWarner Losh void scsi_rewind(struct ccb_scsiio *csio, uint32_t retries, 98676babe50SJustin T. Gibbs void (*cbfcnp)(struct cam_periph *, union ccb *), 987*7c5d20a6SWarner Losh uint8_t tag_action, int immediate, uint8_t sense_len, 988*7c5d20a6SWarner Losh uint32_t timeout); 98976babe50SJustin T. Gibbs 990*7c5d20a6SWarner Losh void scsi_space(struct ccb_scsiio *csio, uint32_t retries, 99176babe50SJustin T. Gibbs void (*cbfcnp)(struct cam_periph *, union ccb *), 992*7c5d20a6SWarner Losh uint8_t tag_action, scsi_space_code code, 993*7c5d20a6SWarner Losh uint32_t count, uint8_t sense_len, uint32_t timeout); 99476babe50SJustin T. Gibbs 995*7c5d20a6SWarner Losh void scsi_load_unload(struct ccb_scsiio *csio, uint32_t retries, 99676babe50SJustin T. Gibbs void (*cbfcnp)(struct cam_periph *, union ccb *), 997*7c5d20a6SWarner Losh uint8_t tag_action, int immediate, int eot, 998*7c5d20a6SWarner Losh int reten, int load, uint8_t sense_len, 999*7c5d20a6SWarner Losh uint32_t timeout); 100076babe50SJustin T. Gibbs 1001*7c5d20a6SWarner Losh void scsi_write_filemarks(struct ccb_scsiio *csio, uint32_t retries, 100276babe50SJustin T. Gibbs void (*cbfcnp)(struct cam_periph *, union ccb *), 1003*7c5d20a6SWarner Losh uint8_t tag_action, int immediate, int setmark, 1004*7c5d20a6SWarner Losh uint32_t num_marks, uint8_t sense_len, 1005*7c5d20a6SWarner Losh uint32_t timeout); 100676babe50SJustin T. Gibbs 1007*7c5d20a6SWarner Losh void scsi_reserve_release_unit(struct ccb_scsiio *csio, uint32_t retries, 100876babe50SJustin T. Gibbs void (*cbfcnp)(struct cam_periph *, 1009*7c5d20a6SWarner Losh union ccb *), uint8_t tag_action, 101076babe50SJustin T. Gibbs int third_party, int third_party_id, 1011*7c5d20a6SWarner Losh uint8_t sense_len, uint32_t timeout, 101276babe50SJustin T. Gibbs int reserve); 101376babe50SJustin T. Gibbs 1014*7c5d20a6SWarner Losh void scsi_erase(struct ccb_scsiio *csio, uint32_t retries, 101576babe50SJustin T. Gibbs void (*cbfcnp)(struct cam_periph *, union ccb *), 1016*7c5d20a6SWarner Losh uint8_t tag_action, int immediate, int long_erase, 1017*7c5d20a6SWarner Losh uint8_t sense_len, uint32_t timeout); 101876babe50SJustin T. Gibbs 101976babe50SJustin T. Gibbs void scsi_data_comp_page(struct scsi_data_compression_page *page, 1020*7c5d20a6SWarner Losh uint8_t dce, uint8_t dde, uint8_t red, 1021*7c5d20a6SWarner Losh uint32_t comp_algorithm, 1022*7c5d20a6SWarner Losh uint32_t decomp_algorithm); 1023d902101eSMatt Jacob 1024*7c5d20a6SWarner Losh void scsi_read_position(struct ccb_scsiio *csio, uint32_t retries, 1025d902101eSMatt Jacob void (*cbfcnp)(struct cam_periph *, union ccb *), 1026*7c5d20a6SWarner Losh uint8_t tag_action, int hardsoft, 1027d902101eSMatt Jacob struct scsi_tape_position_data *sbp, 1028*7c5d20a6SWarner Losh uint8_t sense_len, uint32_t timeout); 1029*7c5d20a6SWarner Losh void scsi_read_position_10(struct ccb_scsiio *csio, uint32_t retries, 103043518607SKenneth D. Merry void (*cbfcnp)(struct cam_periph *, union ccb *), 1031*7c5d20a6SWarner Losh uint8_t tag_action, int service_action, 1032*7c5d20a6SWarner Losh uint8_t *data_ptr, uint32_t length, 1033*7c5d20a6SWarner Losh uint32_t sense_len, uint32_t timeout); 1034d902101eSMatt Jacob 1035*7c5d20a6SWarner Losh void scsi_set_position(struct ccb_scsiio *csio, uint32_t retries, 1036d902101eSMatt Jacob void (*cbfcnp)(struct cam_periph *, union ccb *), 1037*7c5d20a6SWarner Losh uint8_t tag_action, int hardsoft, uint32_t blkno, 1038*7c5d20a6SWarner Losh uint8_t sense_len, uint32_t timeout); 103943518607SKenneth D. Merry 1040*7c5d20a6SWarner Losh void scsi_locate_10(struct ccb_scsiio *csio, uint32_t retries, 104143518607SKenneth D. Merry void (*cbfcnp)(struct cam_periph *, union ccb *), 1042*7c5d20a6SWarner Losh uint8_t tag_action, int immed, int cp, int hard, 1043*7c5d20a6SWarner Losh int64_t partition, uint32_t block_address, 1044*7c5d20a6SWarner Losh int sense_len, uint32_t timeout); 104543518607SKenneth D. Merry 1046*7c5d20a6SWarner Losh void scsi_locate_16(struct ccb_scsiio *csio, uint32_t retries, 104743518607SKenneth D. Merry void (*cbfcnp)(struct cam_periph *, union ccb *), 1048*7c5d20a6SWarner Losh uint8_t tag_action, int immed, int cp, 1049*7c5d20a6SWarner Losh uint8_t dest_type, int bam, int64_t partition, 1050*7c5d20a6SWarner Losh uint64_t logical_id, int sense_len, 1051*7c5d20a6SWarner Losh uint32_t timeout); 105243518607SKenneth D. Merry 1053*7c5d20a6SWarner Losh void scsi_report_density_support(struct ccb_scsiio *csio, uint32_t retries, 105443518607SKenneth D. Merry void (*cbfcnp)(struct cam_periph *, 105543518607SKenneth D. Merry union ccb *), 1056*7c5d20a6SWarner Losh uint8_t tag_action, int media, 1057*7c5d20a6SWarner Losh int medium_type, uint8_t *data_ptr, 1058*7c5d20a6SWarner Losh uint32_t length, uint32_t sense_len, 1059*7c5d20a6SWarner Losh uint32_t timeout); 106043518607SKenneth D. Merry 1061*7c5d20a6SWarner Losh void scsi_set_capacity(struct ccb_scsiio *csio, uint32_t retries, 106243518607SKenneth D. Merry void (*cbfcnp)(struct cam_periph *, union ccb *), 1063*7c5d20a6SWarner Losh uint8_t tag_action, int byte1, uint32_t proportion, 1064*7c5d20a6SWarner Losh uint32_t sense_len, uint32_t timeout); 106543518607SKenneth D. Merry 1066*7c5d20a6SWarner Losh void scsi_format_medium(struct ccb_scsiio *csio, uint32_t retries, 106743518607SKenneth D. Merry void (*cbfcnp)(struct cam_periph *, union ccb *), 1068*7c5d20a6SWarner Losh uint8_t tag_action, int byte1, int byte2, 1069*7c5d20a6SWarner Losh uint8_t *data_ptr, uint32_t length, 1070*7c5d20a6SWarner Losh uint32_t sense_len, uint32_t timeout); 107143518607SKenneth D. Merry 1072*7c5d20a6SWarner Losh void scsi_allow_overwrite(struct ccb_scsiio *csio, uint32_t retries, 107343518607SKenneth D. Merry void (*cbfcnp)(struct cam_periph *, union ccb *), 1074*7c5d20a6SWarner Losh uint8_t tag_action, int allow_overwrite, 1075*7c5d20a6SWarner Losh int partition, uint64_t logical_id, 1076*7c5d20a6SWarner Losh uint32_t sense_len, uint32_t timeout); 107743518607SKenneth D. Merry 107876babe50SJustin T. Gibbs __END_DECLS 107976babe50SJustin T. Gibbs 108076babe50SJustin T. Gibbs #endif /* _SCSI_SCSI_SA_H */ 1081