The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/cam/scsi/scsi_sa.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    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 */

Cache object: bb46686098a52f2b83ca3b3c76772ac1


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.