Deleted Added
full compact
scsi_sa.h (256281) scsi_sa.h (280438)
1/*-
2 * Structure and function declarations for the
3 * SCSI Sequential Access Peripheral driver for CAM.
4 *
5 * Copyright (c) 1999, 2000 Matthew Jacob
1/*-
2 * Structure and function declarations for the
3 * SCSI Sequential Access Peripheral driver for CAM.
4 *
5 * Copyright (c) 1999, 2000 Matthew Jacob
6 * Copyright (c) 2013, 2014, 2015 Spectra Logic Corporation
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions, and the following disclaimer,
13 * without modification, immediately at the beginning of the file.

--- 7 unchanged lines hidden (view full) ---

21 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 *
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions, and the following disclaimer,
14 * without modification, immediately at the beginning of the file.

--- 7 unchanged lines hidden (view full) ---

22 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 * SUCH DAMAGE.
29 *
29 * $FreeBSD: stable/10/sys/cam/scsi/scsi_sa.h 139743 2005-01-05 22:34:37Z imp $
30 * $FreeBSD: stable/10/sys/cam/scsi/scsi_sa.h 280438 2015-03-24 14:36:10Z ken $
30 */
31
32#ifndef _SCSI_SCSI_SA_H
33#define _SCSI_SCSI_SA_H 1
34
35#include <sys/cdefs.h>
36
37struct scsi_read_block_limits

--- 99 unchanged lines hidden (view full) ---

137#define SE_LUN_MASK 0xE0
138#define SE_LONG 0x1
139#define SE_IMMED 0x2
140 u_int8_t reserved[3];
141 u_int8_t control;
142};
143
144/*
31 */
32
33#ifndef _SCSI_SCSI_SA_H
34#define _SCSI_SCSI_SA_H 1
35
36#include <sys/cdefs.h>
37
38struct scsi_read_block_limits

--- 99 unchanged lines hidden (view full) ---

138#define SE_LUN_MASK 0xE0
139#define SE_LONG 0x1
140#define SE_IMMED 0x2
141 u_int8_t reserved[3];
142 u_int8_t control;
143};
144
145/*
146 * Set tape capacity.
147 */
148struct scsi_set_capacity
149{
150 u_int8_t opcode;
151 u_int8_t byte1;
152#define SA_SSC_IMMED 0x01
153 u_int8_t reserved;
154 u_int8_t cap_proportion[2];
155 u_int8_t control;
156};
157
158/*
159 * Format tape media. The CDB opcode is the same as the disk-specific
160 * FORMAT UNIT command, but the fields are different inside the CDB. Thus
161 * the reason for a separate definition here.
162 */
163struct scsi_format_medium
164{
165 u_int8_t opcode;
166 u_int8_t byte1;
167#define SFM_IMMED 0x01
168#define SFM_VERIFY 0x02
169 u_int8_t byte2;
170#define SFM_FORMAT_DEFAULT 0x00
171#define SFM_FORMAT_PARTITION 0x01
172#define SFM_FORMAT_DEF_PART 0x02
173#define SFM_FORMAT_MASK 0x0f
174 u_int8_t length[2];
175 u_int8_t control;
176};
177
178struct scsi_allow_overwrite
179{
180 u_int8_t opcode;
181 u_int8_t reserved1;
182 u_int8_t allow_overwrite;
183#define SAO_ALLOW_OVERWRITE_DISABLED 0x00
184#define SAO_ALLOW_OVERWRITE_CUR_POS 0x01
185#define SAO_ALLOW_OVERWRITE_FORMAT 0x02
186 u_int8_t partition;
187 u_int8_t logical_id[8];
188 u_int8_t reserved2[3];
189 u_int8_t control;
190};
191
192/*
145 * Dev specific mode page masks.
146 */
147#define SMH_SA_WP 0x80
148#define SMH_SA_BUF_MODE_MASK 0x70
149#define SMH_SA_BUF_MODE_NOBUF 0x00
150#define SMH_SA_BUF_MODE_SIBUF 0x10 /* Single-Initiator buffering */
151#define SMH_SA_BUF_MODE_MIBUF 0x20 /* Multi-Initiator buffering */
152#define SMH_SA_SPEED_MASK 0x0F

--- 22 unchanged lines hidden (view full) ---

175 u_int8_t wb_full_ratio;
176 u_int8_t rb_empty_ratio;
177 u_int8_t wrdelay_time[2];
178 u_int8_t byte8;
179#define SA_DBR 0x80 /* data buffer recovery */
180#define SA_BIS 0x40 /* block identifiers supported */
181#define SA_RSMK 0x20 /* report setmarks */
182#define SA_AVC 0x10 /* automatic velocity control */
193 * Dev specific mode page masks.
194 */
195#define SMH_SA_WP 0x80
196#define SMH_SA_BUF_MODE_MASK 0x70
197#define SMH_SA_BUF_MODE_NOBUF 0x00
198#define SMH_SA_BUF_MODE_SIBUF 0x10 /* Single-Initiator buffering */
199#define SMH_SA_BUF_MODE_MIBUF 0x20 /* Multi-Initiator buffering */
200#define SMH_SA_SPEED_MASK 0x0F

--- 22 unchanged lines hidden (view full) ---

223 u_int8_t wb_full_ratio;
224 u_int8_t rb_empty_ratio;
225 u_int8_t wrdelay_time[2];
226 u_int8_t byte8;
227#define SA_DBR 0x80 /* data buffer recovery */
228#define SA_BIS 0x40 /* block identifiers supported */
229#define SA_RSMK 0x20 /* report setmarks */
230#define SA_AVC 0x10 /* automatic velocity control */
183#define SA_SOCF_MASK 0xc0 /* stop on consecutive formats */
184#define SA_RBO 0x20 /* recover buffer order */
185#define SA_REW 0x10 /* report early warning */
231#define SA_SOCF_MASK 0x0c /* stop on consecutive formats */
232#define SA_RBO 0x02 /* recover buffer order */
233#define SA_REW 0x01 /* report early warning */
186 u_int8_t gap_size;
187 u_int8_t byte10;
234 u_int8_t gap_size;
235 u_int8_t byte10;
236/* from SCSI-3: SSC-4 Working draft (2/14) 8.3.3 */
237#define SA_EOD_DEF_MASK 0xe0 /* EOD defined */
238#define SA_EEG 0x10 /* Enable EOD Generation */
239#define SA_SEW 0x08 /* Synchronize at Early Warning */
240#define SA_SOFT_WP 0x04 /* Software Write Protect */
241#define SA_BAML 0x02 /* Block Address Mode Lock */
242#define SA_BAM 0x01 /* Block Address Mode */
188 u_int8_t ew_bufsize[3];
189 u_int8_t sel_comp_alg;
190#define SA_COMP_NONE 0x00
191#define SA_COMP_DEFAULT 0x01
192 /* the following is 'reserved' in SCSI-2 but is defined in SSC-r22 */
193 u_int8_t extra_wp;
194#define SA_ASOC_WP 0x04 /* Associated Write Protect */
195#define SA_PERS_WP 0x02 /* Persistent Write Protect */

--- 20 unchanged lines hidden (view full) ---

216};
217
218typedef union {
219 struct { u_int8_t pagecode, pagelength; } hdr;
220 struct scsi_dev_conf_page dconf;
221 struct scsi_data_compression_page dcomp;
222} sa_comp_t;
223
243 u_int8_t ew_bufsize[3];
244 u_int8_t sel_comp_alg;
245#define SA_COMP_NONE 0x00
246#define SA_COMP_DEFAULT 0x01
247 /* the following is 'reserved' in SCSI-2 but is defined in SSC-r22 */
248 u_int8_t extra_wp;
249#define SA_ASOC_WP 0x04 /* Associated Write Protect */
250#define SA_PERS_WP 0x02 /* Persistent Write Protect */

--- 20 unchanged lines hidden (view full) ---

271};
272
273typedef union {
274 struct { u_int8_t pagecode, pagelength; } hdr;
275 struct scsi_dev_conf_page dconf;
276 struct scsi_data_compression_page dcomp;
277} sa_comp_t;
278
279/*
280 * Control Data Protection subpage. This is as defined in SSC3r03.
281 */
282struct scsi_control_data_prot_subpage {
283 uint8_t page_code;
284#define SA_CTRL_DP_PAGE_CODE 0x0a
285 uint8_t subpage_code;
286#define SA_CTRL_DP_SUBPAGE_CODE 0xf0
287 uint8_t length[2];
288 uint8_t prot_method;
289#define SA_CTRL_DP_NO_LBP 0x00
290#define SA_CTRL_DP_REED_SOLOMON 0x01
291#define SA_CTRL_DP_METHOD_MAX 0xff
292 uint8_t pi_length;
293#define SA_CTRL_DP_PI_LENGTH_MASK 0x3f
294#define SA_CTRL_DP_RS_LENGTH 4
295 uint8_t prot_bits;
296#define SA_CTRL_DP_LBP_W 0x80
297#define SA_CTRL_DP_LBP_R 0x40
298#define SA_CTRL_DP_RBDP 0x20
299 uint8_t reserved[];
300};
301
302/*
303 * This is the Read/Write Control mode page used on IBM Enterprise Tape
304 * Drives. They are known as 3592, TS, or Jaguar drives. The SCSI inquiry
305 * data will show a Product ID "03592XXX", where XXX is 'J1A', 'E05' (TS1120),
306 * 'E06' (TS1130), 'E07' (TS1140) or 'E08' (TS1150).
307 *
308 * This page definition is current as of the 3592 SCSI Reference v6,
309 * released on December 16th, 2014.
310 */
311struct scsi_tape_ibm_rw_control {
312 uint8_t page_code;
313#define SA_IBM_RW_CTRL_PAGE_CODE 0x25
314 uint8_t page_length;
315 uint8_t ignore_seq_checks;
316#define SA_IBM_RW_CTRL_LOC_IGNORE_SEQ 0x04
317#define SA_IBM_RW_CTRL_SPC_BLK_IGNORE_SEQ 0x02
318#define SA_IBM_RW_CTRL_SPC_FM_IGNORE_SEQ 0x01
319 uint8_t ignore_data_checks;
320#define SA_IBM_RW_CTRL_LOC_IGNORE_DATA 0x04
321#define SA_IBM_RW_CTRL_SPC_BLK_IGNORE_DATA 0x02
322#define SA_IBM_RW_CTRL_SPC_FM_IGNORE_DATA 0x01
323 uint8_t reserved1;
324 uint8_t leop_method;
325#define SA_IBM_RW_CTRL_LEOP_DEFAULT 0x00
326#define SA_IBM_RW_CTRL_LEOP_MAX_CAP 0x01
327#define SA_IBM_RW_CTRL_LEOP_CONST_CAP 0x02
328 uint8_t leop_ew[2];
329 uint8_t byte8;
330#define SA_IBM_RW_CTRL_DISABLE_FASTSYNC 0x80
331#define SA_IBM_RW_CTRL_DISABLE_SKIPSYNC 0x40
332#define SA_IBM_RW_CTRL_DISABLE_CROSS_EOD 0x08
333#define SA_IBM_RW_CTRL_DISABLE_CROSS_PERM_ERR 0x04
334#define SA_IBM_RW_CTRL_REPORT_SEG_EW 0x02
335#define SA_IBM_RW_CTRL_REPORT_HOUSEKEEPING_ERR 0x01
336 uint8_t default_write_dens_bop_0;
337 uint8_t pending_write_dens_bop_0;
338 uint8_t reserved2[21];
339};
340
224struct scsi_tape_read_position {
225 u_int8_t opcode; /* READ_POSITION */
226 u_int8_t byte1; /* set LSB to read hardware block pos */
341struct scsi_tape_read_position {
342 u_int8_t opcode; /* READ_POSITION */
343 u_int8_t byte1; /* set LSB to read hardware block pos */
227 u_int8_t reserved[8];
344#define SA_RPOS_SHORT_FORM 0x00
345#define SA_RPOS_SHORT_VENDOR 0x01
346#define SA_RPOS_LONG_FORM 0x06
347#define SA_RPOS_EXTENDED_FORM 0x08
348 u_int8_t reserved[5];
349 u_int8_t length[2];
350 u_int8_t control;
228};
229
230struct scsi_tape_position_data { /* Short Form */
231 u_int8_t flags;
232#define SA_RPOS_BOP 0x80 /* Beginning of Partition */
233#define SA_RPOS_EOP 0x40 /* End of Partition */
234#define SA_RPOS_BCU 0x20 /* Block Count Unknown (SCSI3) */
235#define SA_RPOS_BYCU 0x10 /* Byte Count Unknown (SCSI3) */
236#define SA_RPOS_BPU 0x04 /* Block Position Unknown */
237#define SA_RPOS_PERR 0x02 /* Position Error (SCSI3) */
351};
352
353struct scsi_tape_position_data { /* Short Form */
354 u_int8_t flags;
355#define SA_RPOS_BOP 0x80 /* Beginning of Partition */
356#define SA_RPOS_EOP 0x40 /* End of Partition */
357#define SA_RPOS_BCU 0x20 /* Block Count Unknown (SCSI3) */
358#define SA_RPOS_BYCU 0x10 /* Byte Count Unknown (SCSI3) */
359#define SA_RPOS_BPU 0x04 /* Block Position Unknown */
360#define SA_RPOS_PERR 0x02 /* Position Error (SCSI3) */
361#define SA_RPOS_BPEW 0x01 /* Beyond Programmable Early Warning */
238#define SA_RPOS_UNCERTAIN SA_RPOS_BPU
239 u_int8_t partition;
240 u_int8_t reserved[2];
241 u_int8_t firstblk[4];
242 u_int8_t lastblk[4];
243 u_int8_t reserved2;
244 u_int8_t nbufblk[3];
245 u_int8_t nbufbyte[4];
246};
247
362#define SA_RPOS_UNCERTAIN SA_RPOS_BPU
363 u_int8_t partition;
364 u_int8_t reserved[2];
365 u_int8_t firstblk[4];
366 u_int8_t lastblk[4];
367 u_int8_t reserved2;
368 u_int8_t nbufblk[3];
369 u_int8_t nbufbyte[4];
370};
371
372struct scsi_tape_position_long_data {
373 u_int8_t flags;
374#define SA_RPOS_LONG_BOP 0x80 /* Beginning of Partition */
375#define SA_RPOS_LONG_EOP 0x40 /* End of Partition */
376#define SA_RPOS_LONG_MPU 0x08 /* Mark Position Unknown */
377#define SA_RPOS_LONG_LONU 0x04 /* Logical Object Number Unknown */
378#define SA_RPOS_LONG_BPEW 0x01 /* Beyond Programmable Early Warning */
379 u_int8_t reserved[3];
380 u_int8_t partition[4];
381 u_int8_t logical_object_num[8];
382 u_int8_t logical_file_num[8];
383 u_int8_t set_id[8];
384};
385
386struct scsi_tape_position_ext_data {
387 u_int8_t flags;
388#define SA_RPOS_EXT_BOP 0x80 /* Beginning of Partition */
389#define SA_RPOS_EXT_EOP 0x40 /* End of Partition */
390#define SA_RPOS_EXT_LOCU 0x20 /* Logical Object Count Unknown */
391#define SA_RPOS_EXT_BYCU 0x10 /* Byte Count Unknown */
392#define SA_RPOS_EXT_LOLU 0x04 /* Logical Object Location Unknown */
393#define SA_RPOS_EXT_PERR 0x02 /* Position Error */
394#define SA_RPOS_EXT_BPEW 0x01 /* Beyond Programmable Early Warning */
395 u_int8_t partition;
396 u_int8_t length[2];
397 u_int8_t reserved;
398 u_int8_t num_objects[3];
399 u_int8_t first_object[8];
400 u_int8_t last_object[8];
401 u_int8_t bytes_in_buffer[8];
402};
403
248struct scsi_tape_locate {
249 u_int8_t opcode;
250 u_int8_t byte1;
251#define SA_SPOS_IMMED 0x01
252#define SA_SPOS_CP 0x02
253#define SA_SPOS_BT 0x04
254 u_int8_t reserved1;
255 u_int8_t blkaddr[4];
404struct scsi_tape_locate {
405 u_int8_t opcode;
406 u_int8_t byte1;
407#define SA_SPOS_IMMED 0x01
408#define SA_SPOS_CP 0x02
409#define SA_SPOS_BT 0x04
410 u_int8_t reserved1;
411 u_int8_t blkaddr[4];
412#define SA_SPOS_MAX_BLK 0xffffffff
256 u_int8_t reserved2;
257 u_int8_t partition;
258 u_int8_t control;
259};
260
413 u_int8_t reserved2;
414 u_int8_t partition;
415 u_int8_t control;
416};
417
418struct scsi_locate_16 {
419 u_int8_t opcode;
420 u_int8_t byte1;
421#define SA_LC_IMMEDIATE 0x01
422#define SA_LC_CP 0x02
423#define SA_LC_DEST_TYPE_MASK 0x38
424#define SA_LC_DEST_TYPE_SHIFT 3
425#define SA_LC_DEST_OBJECT 0x00
426#define SA_LC_DEST_FILE 0x01
427#define SA_LC_DEST_SET 0x02
428#define SA_LC_DEST_EOD 0x03
429 u_int8_t byte2;
430#define SA_LC_BAM_IMPLICIT 0x00
431#define SA_LC_BAM_EXPLICIT 0x01
432 u_int8_t partition;
433 u_int8_t logical_id[8];
434 u_int8_t reserved[3];
435 u_int8_t control;
436};
437
438struct scsi_report_density_support {
439 u_int8_t opcode;
440 u_int8_t byte1;
441#define SRDS_MEDIA 0x01
442#define SRDS_MEDIUM_TYPE 0x02
443 u_int8_t reserved[5];
444 u_int8_t length[2];
445#define SRDS_MAX_LENGTH 0xffff
446 u_int8_t control;
447};
448
449struct scsi_density_hdr {
450 u_int8_t length[2];
451 u_int8_t reserved[2];
452 u_int8_t descriptor[];
453};
454
455struct scsi_density_data {
456 u_int8_t primary_density_code;
457 u_int8_t secondary_density_code;
458 u_int8_t byte2;
459#define SDD_DLV 0x01
460#define SDD_DEFLT 0x20
461#define SDD_DUP 0x40
462#define SDD_WRTOK 0x80
463 u_int8_t length[2];
464#define SDD_DEFAULT_LENGTH 52
465 u_int8_t bits_per_mm[3];
466 u_int8_t media_width[2];
467 u_int8_t tracks[2];
468 u_int8_t capacity[4];
469 u_int8_t assigning_org[8];
470 u_int8_t density_name[8];
471 u_int8_t description[20];
472};
473
474struct scsi_medium_type_data {
475 u_int8_t medium_type;
476 u_int8_t reserved1;
477 u_int8_t length[2];
478#define SMTD_DEFAULT_LENGTH 52
479 u_int8_t num_density_codes;
480 u_int8_t primary_density_codes[9];
481 u_int8_t media_width[2];
482 u_int8_t medium_length[2];
483 u_int8_t reserved2[2];
484 u_int8_t assigning_org[8];
485 u_int8_t medium_type_name[8];
486 u_int8_t description[20];
487};
488
261/*
489/*
490 * Security Protocol Specific values for the Tape Data Encryption protocol
491 * (0x20) used with SECURITY PROTOCOL IN. See below for values used with
492 * SECURITY PROTOCOL OUT. Current as of SSC4r03.
493 */
494#define TDE_IN_SUPPORT_PAGE 0x0000
495#define TDE_OUT_SUPPORT_PAGE 0x0001
496#define TDE_DATA_ENC_CAP_PAGE 0x0010
497#define TDE_SUPPORTED_KEY_FORMATS_PAGE 0x0011
498#define TDE_DATA_ENC_MAN_CAP_PAGE 0x0012
499#define TDE_DATA_ENC_STATUS_PAGE 0x0020
500#define TDE_NEXT_BLOCK_ENC_STATUS_PAGE 0x0021
501#define TDE_GET_ENC_MAN_ATTR_PAGE 0x0022
502#define TDE_RANDOM_NUM_PAGE 0x0030
503#define TDE_KEY_WRAP_PK_PAGE 0x0031
504
505/*
506 * Tape Data Encryption protocol pages used with SECURITY PROTOCOL IN and
507 * SECURITY PROTOCOL OUT.
508 */
509/*
510 * Tape Data Encryption In Support page (0x0000).
511 */
512struct tde_in_support_page {
513 uint8_t page_code[2];
514 uint8_t page_length[2];
515 uint8_t page_codes[];
516};
517
518/*
519 * Tape Data Encryption Out Support page (0x0001).
520 */
521struct tde_out_support_page {
522 uint8_t page_code[2];
523 uint8_t page_length[2];
524 uint8_t page_codes[];
525};
526
527/*
528 * Logical block encryption algorithm descriptor. This is reported in the
529 * Data Encryption Capabilities page.
530 */
531struct tde_block_enc_alg_desc {
532 uint8_t alg_index;
533 uint8_t reserved1;
534 uint8_t desc_length[2];
535 uint8_t byte4;
536#define TDE_BEA_AVFMV 0x80
537#define TDE_BEA_SDK_C 0x40
538#define TDE_BEA_MAC_C 0x20
539#define TDE_BEA_DELB_C 0x10
540#define TDE_BEA_DECRYPT_C_MASK 0x0c
541#define TDE_BEA_DECRYPT_C_EXT 0x0c
542#define TDE_BEA_DECRYPT_C_HARD 0x08
543#define TDE_BEA_DECRYPT_C_SOFT 0x04
544#define TDE_BEA_DECRYPT_C_NO_CAP 0x00
545#define TDE_BEA_ENCRYPT_C_MASK 0x03
546#define TDE_BEA_ENCRYPT_C_EXT 0x03
547#define TDE_BEA_ENCRYPT_C_HARD 0x02
548#define TDE_BEA_ENCRYPT_C_SOFT 0x01
549#define TDE_BEA_ENCRYPT_C_NO_CAP 0x00
550 uint8_t byte5;
551#define TDE_BEA_AVFCLP_MASK 0xc0
552#define TDE_BEA_AVFCLP_VALID 0x80
553#define TDE_BEA_AVFCLP_NOT_VALID 0x40
554#define TDE_BEA_AVFCLP_NOT_APP 0x00
555#define TDE_BEA_NONCE_C_MASK 0x30
556#define TDE_BEA_NONCE_C_SUPPORTED 0x30
557#define TDE_BEA_NONCE_C_PROVIDED 0x20
558#define TDE_BEA_NONCE_C_GENERATED 0x10
559#define TDE_BEA_NONCE_C_NOT_REQUIRED 0x00
560#define TDE_BEA_KADF_C 0x08
561#define TDE_BEA_VCELB_C 0x04
562#define TDE_BEA_UKADF 0x02
563#define TDE_BEA_AKADF 0x01
564 uint8_t max_unauth_key_bytes[2];
565 uint8_t max_auth_key_bytes[2];
566 uint8_t lbe_key_size[2];
567 uint8_t byte12;
568#define TDE_BEA_DKAD_C_MASK 0xc0
569#define TDE_BEA_DKAD_C_CAPABLE 0xc0
570#define TDE_BEA_DKAD_C_NOT_ALLOWED 0x80
571#define TDE_BEA_DKAD_C_REQUIRED 0x40
572#define TDE_BEA_EEMC_C_MASK 0x30
573#define TDE_BEA_EEMC_C_ALLOWED 0x20
574#define TDE_BEA_EEMC_C_NOT_ALLOWED 0x10
575#define TDE_BEA_EEMC_C_NOT_SPECIFIED 0x00
576 /*
577 * Raw Decryption Mode Control Capabilities (RDMC_C) field. The
578 * descriptions are too complex to represent as a simple name.
579 */
580#define TDE_BEA_RDMC_C_MASK 0x0e
581#define TDE_BEA_RDMC_C_MODE_7 0x0e
582#define TDE_BEA_RDMC_C_MODE_6 0x0c
583#define TDE_BEA_RDMC_C_MODE_5 0x0a
584#define TDE_BEA_RDMC_C_MODE_4 0x08
585#define TDE_BEA_RDMC_C_MODE_1 0x02
586#define TDE_BEA_EAREM 0x01
587 uint8_t byte13;
588#define TDE_BEA_MAX_EEDKS_MASK 0x0f
589 uint8_t msdk_count[2];
590 uint8_t max_eedk_size[2];
591 uint8_t reserved2[2];
592 uint8_t security_algo_code[4];
593};
594
595/*
596 * Data Encryption Capabilities page (0x0010).
597 */
598struct tde_data_enc_cap_page {
599 uint8_t page_code[2];
600 uint8_t page_length;
601 uint8_t byte4;
602#define DATA_ENC_CAP_EXTDECC_MASK 0x0c
603#define DATA_ENC_CAP_EXTDECC_NOT_REPORTED 0x00
604#define DATA_ENC_CAP_EXTDECC_NOT_CAPABLE 0x04
605#define DATA_ENC_CAP_EXTDECC_CAPABLE 0x08
606#define DATA_ENC_CAP_CFG_P_MASK 0x03
607#define DATA_ENC_CAP_CFG_P_NOT_REPORTED 0x00
608#define DATA_ENC_CAP_CFG_P_ALLOWED 0x01
609#define DATA_ENC_CAP_CFG_P_NOT_ALLOWED 0x02
610 uint8_t reserved[15];
611 struct tde_block_enc_alg_desc alg_descs[];
612};
613
614/*
615 * Tape Data Encryption Supported Key Formats page (0x0011).
616 */
617struct tde_supported_key_formats_page {
618 uint8_t page_code[2];
619 uint8_t page_length[2];
620 uint8_t key_formats_list[];
621};
622
623/*
624 * Tape Data Encryption Management Capabilities page (0x0012).
625 */
626struct tde_data_enc_man_cap_page {
627 uint8_t page_code[2];
628 uint8_t page_length[2];
629 uint8_t byte4;
630#define TDE_DEMC_LOCK_C 0x01
631 uint8_t byte5;
632#define TDE_DEMC_CKOD_C 0x04
633#define TDE_DEMC_CKORP_C 0x02
634#define TDE_DEMC_CKORL_C 0x01
635 uint8_t reserved1;
636 uint8_t byte7;
637#define TDE_DEMC_AITN_C 0x04
638#define TDE_DEMC_LOCAL_C 0x02
639#define TDE_DEMC_PUBLIC_C 0x01
640 uint8_t reserved2[8];
641};
642
643/*
644 * Tape Data Encryption Status Page (0x0020).
645 */
646struct tde_data_enc_status_page {
647 uint8_t page_code[2];
648 uint8_t page_length[2];
649 uint8_t scope;
650#define TDE_DES_IT_NEXUS_SCOPE_MASK 0xe0
651#define TDE_DES_LBE_SCOPE_MASK 0x07
652 uint8_t encryption_mode;
653 uint8_t decryption_mode;
654 uint8_t algo_index;
655 uint8_t key_instance_counter[4];
656 uint8_t byte12;
657#define TDE_DES_PARAM_CTRL_MASK 0x70
658#define TDE_DES_PARAM_CTRL_MGMT 0x40
659#define TDE_DES_PARAM_CTRL_CHANGER 0x30
660#define TDE_DES_PARAM_CTRL_DRIVE 0x20
661#define TDE_DES_PARAM_CTRL_EXT 0x10
662#define TDE_DES_PARAM_CTRL_NOT_REPORTED 0x00
663#define TDE_DES_VCELB 0x08
664#define TDE_DES_CEEMS_MASK 0x06
665#define TDE_DES_RDMD 0x01
666 uint8_t enc_params_kad_format;
667 uint8_t asdk_count[2];
668 uint8_t reserved[8];
669 uint8_t key_assoc_data_desc[];
670};
671
672/*
673 * Tape Data Encryption Next Block Encryption Status page (0x0021).
674 */
675struct tde_next_block_enc_status_page {
676 uint8_t page_code[2];
677 uint8_t page_length[2];
678 uint8_t logical_obj_number[8];
679 uint8_t status;
680#define TDE_NBES_COMP_STATUS_MASK 0xf0
681#define TDE_NBES_COMP_INCAPABLE 0x00
682#define TDE_NBES_COMP_NOT_YET 0x10
683#define TDE_NBES_COMP_NOT_A_BLOCK 0x20
684#define TDE_NBES_COMP_NOT_COMPRESSED 0x30
685#define TDE_NBES_COMP_COMPRESSED 0x40
686#define TDE_NBES_ENC_STATUS_MASK 0x0f
687#define TDE_NBES_ENC_INCAPABLE 0x00
688#define TDE_NBES_ENC_NOT_YET 0x01
689#define TDE_NBES_ENC_NOT_A_BLOCK 0x02
690#define TDE_NBES_ENC_NOT_ENCRYPTED 0x03
691#define TDE_NBES_ENC_ALG_NOT_SUPPORTED 0x04
692#define TDE_NBES_ENC_SUPPORTED_ALG 0x05
693#define TDE_NBES_ENC_NO_KEY 0x06
694 uint8_t algo_index;
695 uint8_t byte14;
696#define TDE_NBES_EMES 0x02
697#define TDE_NBES_RDMDS 0x01
698 uint8_t next_block_kad_format;
699 uint8_t key_assoc_data_desc[];
700};
701
702/*
703 * Tape Data Encryption Get Encryption Management Attributes page (0x0022).
704 */
705struct tde_get_enc_man_attr_page {
706 uint8_t page_code[2];
707 uint8_t reserved[3];
708 uint8_t byte5;
709#define TDE_GEMA_CAOD 0x01
710 uint8_t page_length[2];
711 uint8_t enc_mgmt_attr_desc[];
712};
713
714/*
715 * Tape Data Encryption Random Number page (0x0030).
716 */
717struct tde_random_num_page {
718 uint8_t page_code[2];
719 uint8_t page_length[2];
720 uint8_t random_number[32];
721};
722
723/*
724 * Tape Data Encryption Device Server Key Wrapping Public Key page (0x0031).
725 */
726struct tde_key_wrap_pk_page {
727 uint8_t page_code[2];
728 uint8_t page_length[2];
729 uint8_t public_key_type[4];
730 uint8_t public_key_format[4];
731 uint8_t public_key_length[2];
732 uint8_t public_key[];
733};
734
735/*
736 * Security Protocol Specific values for the Tape Data Encryption protocol
737 * (0x20) used with SECURITY PROTOCOL OUT. See above for values used with
738 * SECURITY PROTOCOL IN. Current as of SSCr03.
739 */
740#define TDE_SET_DATA_ENC_PAGE 0x0010
741#define TDE_SA_ENCAP_PAGE 0x0011
742#define TDE_SET_ENC_MGMT_ATTR_PAGE 0x0022
743
744/*
745 * Tape Data Encryption Set Data Encryption page (0x0010).
746 */
747struct tde_set_data_enc_page {
748 uint8_t page_code[2];
749 uint8_t page_length[2];
750 uint8_t byte4;
751#define TDE_SDE_SCOPE_MASK 0xe0
752#define TDE_SDE_SCOPE_ALL_IT_NEXUS 0x80
753#define TDE_SDE_SCOPE_LOCAL 0x40
754#define TDE_SDE_SCOPE_PUBLIC 0x00
755#define TDE_SDE_LOCK 0x01
756 uint8_t byte5;
757#define TDE_SDE_CEEM_MASK 0xc0
758#define TDE_SDE_CEEM_ENCRYPT 0xc0
759#define TDE_SDE_CEEM_EXTERNAL 0x80
760#define TDE_SDE_CEEM_NO_CHECK 0x40
761#define TDE_SDE_RDMC_MASK 0x30
762#define TDE_SDE_RDMC_DISABLED 0x30
763#define TDE_SDE_RDMC_ENABLED 0x20
764#define TDE_SDE_RDMC_DEFAULT 0x00
765#define TDE_SDE_SDK 0x08
766#define TDE_SDE_CKOD 0x04
767#define TDE_SDE_CKORP 0x02
768#define TDE_SDE_CKORL 0x01
769 uint8_t encryption_mode;
770#define TDE_SDE_ENC_MODE_DISABLE 0x00
771#define TDE_SDE_ENC_MODE_EXTERNAL 0x01
772#define TDE_SDE_ENC_MODE_ENCRYPT 0x02
773 uint8_t decryption_mode;
774#define TDE_SDE_DEC_MODE_DISABLE 0x00
775#define TDE_SDE_DEC_MODE_RAW 0x01
776#define TDE_SDE_DEC_MODE_DECRYPT 0x02
777#define TDE_SDE_DEC_MODE_MIXED 0x03
778 uint8_t algo_index;
779 uint8_t lbe_key_format;
780#define TDE_SDE_KEY_PLAINTEXT 0x00
781#define TDE_SDE_KEY_VENDOR_SPEC 0x01
782#define TDE_SDE_KEY_PUBLIC_WRAP 0x02
783#define TDE_SDE_KEY_ESP_SCSI 0x03
784 uint8_t kad_format;
785#define TDE_SDE_KAD_ASCII 0x02
786#define TDE_SDE_KAD_BINARY 0x01
787#define TDE_SDE_KAD_UNSPECIFIED 0x00
788 uint8_t reserved[7];
789 uint8_t lbe_key_length[2];
790 uint8_t lbe_key[];
791};
792
793/*
794 * Used for the Vendor Specific key format (0x01).
795 */
796struct tde_key_format_vendor {
797 uint8_t t10_vendor_id[8];
798 uint8_t vendor_key[];
799};
800
801/*
802 * Used for the public key wrapped format (0x02).
803 */
804struct tde_key_format_public_wrap {
805 uint8_t parameter_set[2];
806#define TDE_PARAM_SET_RSA2048 0x0000
807#define TDE_PARAM_SET_ECC521 0x0010
808 uint8_t label_length[2];
809 uint8_t label[];
810};
811
812/*
813 * Tape Data Encryption SA Encapsulation page (0x0011).
814 */
815struct tde_sa_encap_page {
816 uint8_t page_code[2];
817 uint8_t data_desc[];
818};
819
820/*
821 * Tape Data Encryption Set Encryption Management Attributes page (0x0022).
822 */
823struct tde_set_enc_mgmt_attr_page {
824 uint8_t page_code[2];
825 uint8_t reserved[3];
826 uint8_t byte5;
827#define TDE_SEMA_CAOD 0x01
828 uint8_t page_length[2];
829 uint8_t attr_desc[];
830};
831
832/*
833 * Tape Data Encryption descriptor format.
834 * SSC4r03 Section 8.5.4.2.1 Table 197
835 */
836struct tde_data_enc_desc {
837 uint8_t key_desc_type;
838#define TDE_KEY_DESC_WK_KAD 0x04
839#define TDE_KEY_DESC_M_KAD 0x03
840#define TDE_KEY_DESC_NONCE_VALUE 0x02
841#define TDE_KEY_DESC_A_KAD 0x01
842#define TDE_KEY_DESC_U_KAD 0x00
843 uint8_t byte2;
844#define TDE_KEY_DESC_AUTH_MASK 0x07
845#define TDE_KEY_DESC_AUTH_FAILED 0x04
846#define TDE_KEY_DESC_AUTH_SUCCESS 0x03
847#define TDE_KEY_DESC_AUTH_NO_ATTEMPT 0x02
848#define TDE_KEY_DESC_AUTH_U_KAD 0x01
849 uint8_t key_desc_length[2];
850 uint8_t key_desc[];
851};
852
853/*
854 * Wrapped Key descriptor format.
855 * SSC4r03 Section 8.5.4.3.1 Table 200
856 */
857struct tde_wrapped_key_desc {
858 uint8_t wrapped_key_type;
859#define TDE_WRAP_KEY_DESC_LENGTH 0x04
860#define TDE_WRAP_KEY_DESC_IDENT 0x03
861#define TDE_WRAP_KEY_DESC_INFO 0x02
862#define TDE_WRAP_KEY_DESC_ENTITY_ID 0x01
863#define TDE_WRAP_KEY_DESC_DEVICE_ID 0x00
864 uint8_t reserved;
865 uint8_t wrapped_desc_length[2];
866 uint8_t wrapped_desc[];
867};
868
869/*
870 * Encryption management attributes descriptor format.
871 * SSC4r03 Section 8.5.4.4.1 Table 202
872 */
873struct tde_enc_mgmt_attr_desc {
874 uint8_t enc_mgmt_attr_type[2];
875#define TDE_EMAD_DESIRED_KEY_MGR_OP 0x0000
876#define TDE_EMAD_LOG_BLOCK_ENC_KEY_CRIT 0x0001
877#define TDE_EMAD_LOG_BLOCK_ENC_KEY_WRAP 0x0002
878 uint8_t reserved;
879 uint8_t byte2;
880#define TDE_EMAD_CRIT 0x80
881 uint8_t attr_length[2];
882 uint8_t attributes[];
883#define TDE_EMAD_DESIRED_KEY_CREATE 0x0001
884#define TDE_EMAD_DESIRED_KEY_RESOLVE 0x0002
885};
886
887/*
888 * Logical block encryption key selection criteria descriptor format.
889 * SSC4r03 Section 8.5.4.4.3.1 Table 206
890 */
891struct tde_lb_enc_key_sel_desc {
892 uint8_t lbe_key_sel_crit_type[2];
893 /*
894 * The CRIT bit is the top bit of the first byte of the type.
895 */
896#define TDE_LBE_KEY_SEL_CRIT 0x80
897#define TDE_LBE_KEY_SEL_ALGO 0x0001
898#define TDE_LBE_KEY_SEL_ID 0x0002
899 uint8_t lbe_key_sel_crit_length[2];
900 uint8_t lbe_key_sel_crit[];
901};
902
903/*
904 * Logical block encryption key wrapping attribute descriptor format.
905 * SSC4r03 Section 8.5.4.4.4.1 Table 209
906 */
907struct tde_lb_enc_key_wrap_desc {
908 uint8_t lbe_key_wrap_type[2];
909 /*
910 * The CRIT bit is the top bit of the first byte of the type.
911 */
912#define TDE_LBE_KEY_WRAP_CRIT 0x80
913#define TDE_LBE_KEY_WRAP_KEKS 0x0001
914 uint8_t lbe_key_wrap_length[2];
915 uint8_t lbe_key_wrap_attr[];
916};
917
918/*
262 * Opcodes
263 */
264#define REWIND 0x01
919 * Opcodes
920 */
921#define REWIND 0x01
922#define FORMAT_MEDIUM 0x04
265#define READ_BLOCK_LIMITS 0x05
266#define SA_READ 0x08
267#define SA_WRITE 0x0A
923#define READ_BLOCK_LIMITS 0x05
924#define SA_READ 0x08
925#define SA_WRITE 0x0A
926#define SET_CAPACITY 0x0B
268#define WRITE_FILEMARKS 0x10
269#define SPACE 0x11
270#define RESERVE_UNIT 0x16
271#define RELEASE_UNIT 0x17
272#define ERASE 0x19
273#define LOAD_UNLOAD 0x1B
274#define LOCATE 0x2B
275#define READ_POSITION 0x34
927#define WRITE_FILEMARKS 0x10
928#define SPACE 0x11
929#define RESERVE_UNIT 0x16
930#define RELEASE_UNIT 0x17
931#define ERASE 0x19
932#define LOAD_UNLOAD 0x1B
933#define LOCATE 0x2B
934#define READ_POSITION 0x34
935#define REPORT_DENSITY_SUPPORT 0x44
936#define ALLOW_OVERWRITE 0x82
937#define LOCATE_16 0x92
276
277/*
278 * Tape specific density codes- only enough of them here to recognize
279 * some specific older units so we can choose 2FM@EOD or FIXED blocksize
280 * quirks.
281 */
282#define SCSI_DENSITY_HALFINCH_800 0x01
283#define SCSI_DENSITY_HALFINCH_1600 0x02

--- 63 unchanged lines hidden (view full) ---

347 u_int32_t comp_algorithm,
348 u_int32_t decomp_algorithm);
349
350void scsi_read_position(struct ccb_scsiio *csio, u_int32_t retries,
351 void (*cbfcnp)(struct cam_periph *, union ccb *),
352 u_int8_t tag_action, int hardsoft,
353 struct scsi_tape_position_data *sbp,
354 u_int8_t sense_len, u_int32_t timeout);
938
939/*
940 * Tape specific density codes- only enough of them here to recognize
941 * some specific older units so we can choose 2FM@EOD or FIXED blocksize
942 * quirks.
943 */
944#define SCSI_DENSITY_HALFINCH_800 0x01
945#define SCSI_DENSITY_HALFINCH_1600 0x02

--- 63 unchanged lines hidden (view full) ---

1009 u_int32_t comp_algorithm,
1010 u_int32_t decomp_algorithm);
1011
1012void scsi_read_position(struct ccb_scsiio *csio, u_int32_t retries,
1013 void (*cbfcnp)(struct cam_periph *, union ccb *),
1014 u_int8_t tag_action, int hardsoft,
1015 struct scsi_tape_position_data *sbp,
1016 u_int8_t sense_len, u_int32_t timeout);
1017void scsi_read_position_10(struct ccb_scsiio *csio, u_int32_t retries,
1018 void (*cbfcnp)(struct cam_periph *, union ccb *),
1019 u_int8_t tag_action, int service_action,
1020 u_int8_t *data_ptr, u_int32_t length,
1021 u_int32_t sense_len, u_int32_t timeout);
355
356void scsi_set_position(struct ccb_scsiio *csio, u_int32_t retries,
357 void (*cbfcnp)(struct cam_periph *, union ccb *),
358 u_int8_t tag_action, int hardsoft, u_int32_t blkno,
359 u_int8_t sense_len, u_int32_t timeout);
1022
1023void scsi_set_position(struct ccb_scsiio *csio, u_int32_t retries,
1024 void (*cbfcnp)(struct cam_periph *, union ccb *),
1025 u_int8_t tag_action, int hardsoft, u_int32_t blkno,
1026 u_int8_t sense_len, u_int32_t timeout);
1027
1028void scsi_locate_10(struct ccb_scsiio *csio, u_int32_t retries,
1029 void (*cbfcnp)(struct cam_periph *, union ccb *),
1030 u_int8_t tag_action, int immed, int cp, int hard,
1031 int64_t partition, u_int32_t block_address,
1032 int sense_len, u_int32_t timeout);
1033
1034void scsi_locate_16(struct ccb_scsiio *csio, u_int32_t retries,
1035 void (*cbfcnp)(struct cam_periph *, union ccb *),
1036 u_int8_t tag_action, int immed, int cp,
1037 u_int8_t dest_type, int bam, int64_t partition,
1038 u_int64_t logical_id, int sense_len,
1039 u_int32_t timeout);
1040
1041void scsi_report_density_support(struct ccb_scsiio *csio, u_int32_t retries,
1042 void (*cbfcnp)(struct cam_periph *,
1043 union ccb *),
1044 u_int8_t tag_action, int media,
1045 int medium_type, u_int8_t *data_ptr,
1046 u_int32_t length, u_int32_t sense_len,
1047 u_int32_t timeout);
1048
1049void scsi_set_capacity(struct ccb_scsiio *csio, u_int32_t retries,
1050 void (*cbfcnp)(struct cam_periph *, union ccb *),
1051 u_int8_t tag_action, int byte1, u_int32_t proportion,
1052 u_int32_t sense_len, u_int32_t timeout);
1053
1054void scsi_format_medium(struct ccb_scsiio *csio, u_int32_t retries,
1055 void (*cbfcnp)(struct cam_periph *, union ccb *),
1056 u_int8_t tag_action, int byte1, int byte2,
1057 u_int8_t *data_ptr, u_int32_t length,
1058 u_int32_t sense_len, u_int32_t timeout);
1059
1060void scsi_allow_overwrite(struct ccb_scsiio *csio, u_int32_t retries,
1061 void (*cbfcnp)(struct cam_periph *, union ccb *),
1062 u_int8_t tag_action, int allow_overwrite,
1063 int partition, u_int64_t logical_id,
1064 u_int32_t sense_len, u_int32_t timeout);
1065
360__END_DECLS
361
362#endif /* _SCSI_SCSI_SA_H */
1066__END_DECLS
1067
1068#endif /* _SCSI_SCSI_SA_H */