Annotation of sys/scsi/scsi_tape.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: scsi_tape.h,v 1.7 1998/01/07 17:28:38 deraadt Exp $ */
! 2: /* $NetBSD: scsi_tape.h,v 1.9 1996/05/24 02:04:47 thorpej Exp $ */
! 3:
! 4: /*
! 5: * Copyright (c) 1994 Charles Hannum. All rights reserved.
! 6: *
! 7: * Redistribution and use in source and binary forms, with or without
! 8: * modification, are permitted provided that the following conditions
! 9: * are met:
! 10: * 1. Redistributions of source code must retain the above copyright
! 11: * notice, this list of conditions and the following disclaimer.
! 12: * 2. Redistributions in binary form must reproduce the above copyright
! 13: * notice, this list of conditions and the following disclaimer in the
! 14: * documentation and/or other materials provided with the distribution.
! 15: * 3. All advertising materials mentioning features or use of this software
! 16: * must display the following acknowledgement:
! 17: * This product includes software developed by Charles Hannum.
! 18: * 4. The name of the author may not be used to endorse or promote products
! 19: * derived from this software without specific prior written permission.
! 20: *
! 21: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
! 22: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
! 23: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
! 24: * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
! 25: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
! 26: * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
! 27: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
! 28: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
! 29: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
! 30: * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
! 31: */
! 32:
! 33: /*
! 34: * Originally written by Julian Elischer (julian@tfs.com)
! 35: * for TRW Financial Systems.
! 36: *
! 37: * TRW Financial Systems, in accordance with their agreement with Carnegie
! 38: * Mellon University, makes this software available to CMU to distribute
! 39: * or use in any manner that they see fit as long as this message is kept with
! 40: * the software. For this reason TFS also grants any other persons or
! 41: * organisations permission to use or modify this software.
! 42: *
! 43: * TFS supplies this software to be publicly redistributed
! 44: * on the understanding that TFS is not responsible for the correct
! 45: * functioning of this software in any circumstances.
! 46: *
! 47: * Ported to run under 386BSD by Julian Elischer (julian@tfs.com) Sept 1992
! 48: */
! 49:
! 50: /*
! 51: * SCSI tape interface description
! 52: */
! 53:
! 54: #ifndef _SCSI_TAPE_H_
! 55: #define _SCSI_TAPE_H_ 1
! 56:
! 57: /*
! 58: * SCSI command formats
! 59: */
! 60:
! 61: #define READ 0x08
! 62: #define WRITE 0x0a
! 63: struct scsi_rw_tape {
! 64: u_int8_t opcode;
! 65: u_int8_t byte2;
! 66: #define SRW_FIXED 0x01
! 67: u_int8_t len[3];
! 68: u_int8_t control;
! 69: };
! 70:
! 71: #define SPACE 0x11
! 72: struct scsi_space {
! 73: u_int8_t opcode;
! 74: u_int8_t byte2;
! 75: #define SS_CODE 0x03
! 76: #define SP_BLKS 0x00
! 77: #define SP_FILEMARKS 0x01
! 78: #define SP_SEQ_FILEMARKS 0x02
! 79: #define SP_EOM 0x03
! 80: u_int8_t number[3];
! 81: u_int8_t control;
! 82: };
! 83:
! 84: #define WRITE_FILEMARKS 0x10
! 85: struct scsi_write_filemarks {
! 86: u_int8_t opcode;
! 87: u_int8_t byte2;
! 88: u_int8_t number[3];
! 89: u_int8_t control;
! 90: };
! 91:
! 92: #define REWIND 0x01
! 93: struct scsi_rewind {
! 94: u_int8_t opcode;
! 95: u_int8_t byte2;
! 96: #define SR_IMMED 0x01
! 97: u_int8_t unused[3];
! 98: u_int8_t control;
! 99: };
! 100:
! 101: #define LOAD 0x1b
! 102: struct scsi_load {
! 103: u_int8_t opcode;
! 104: u_int8_t byte2;
! 105: #define SL_IMMED 0x01
! 106: u_int8_t unused[2];
! 107: u_int8_t how;
! 108: #define LD_UNLOAD 0x00
! 109: #define LD_LOAD 0x01
! 110: #define LD_RETENSION 0x02
! 111: u_int8_t control;
! 112: };
! 113:
! 114: #define ERASE 0x19
! 115: struct scsi_erase {
! 116: u_int8_t opcode;
! 117: u_int8_t byte2;
! 118: #define SE_LONG 0x01
! 119: #define SE_IMMED 0x02
! 120: u_int8_t unused[3];
! 121: u_int8_t control;
! 122: };
! 123:
! 124: #define READ_BLOCK_LIMITS 0x05
! 125: struct scsi_block_limits {
! 126: u_int8_t opcode;
! 127: u_int8_t byte2;
! 128: u_int8_t unused[3];
! 129: u_int8_t control;
! 130: };
! 131:
! 132: struct scsi_block_limits_data {
! 133: u_int8_t reserved;
! 134: u_int8_t max_length[3]; /* Most significant */
! 135: u_int8_t min_length[2]; /* Most significant */
! 136: };
! 137:
! 138: /* See SCSI-II spec 9.3.3.1 */
! 139: struct scsi_tape_dev_conf_page {
! 140: u_int8_t pagecode; /* 0x10 */
! 141: u_int8_t pagelength; /* 0x0e */
! 142: u_int8_t byte2;
! 143: #define SMT_CAP 0x40 /* change active partition */
! 144: #define SMT_CAF 0x20 /* change active format */
! 145: #define SMT_AFMASK 0x1f /* active format mask */
! 146: u_int8_t active_partition;
! 147: u_int8_t wb_full_ratio;
! 148: u_int8_t rb_empty_ratio;
! 149: u_int8_t wrdelay_time[2];
! 150: u_int8_t byte8;
! 151: #define SMT_DBR 0x80 /* data buffer recovery */
! 152: #define SMT_BIS 0x40 /* block identifiers supported */
! 153: #define SMT_RSMK 0x20 /* report setmarks */
! 154: #define SMT_AVC 0x10 /* automatic velocity control */
! 155: #define SMT_SOCF_MASK 0xc0 /* stop on consecutive formats */
! 156: #define SMT_RBO 0x20 /* recover buffer order */
! 157: #define SMT_REW 0x10 /* report early warning */
! 158: u_int8_t gap_size;
! 159: u_int8_t byte10;
! 160: #define SMT_EODDEFINED 0xe0 /* EOD defined */
! 161: #define SMT_EEG 0x10 /* enable EOD generation */
! 162: #define SMT_SEW 0x80 /* synchronize at early warning */
! 163: u_int8_t ew_bufsize[3];
! 164: u_int8_t sel_comp_alg;
! 165: #define SMT_COMP_NONE 0x00
! 166: #define SMT_COMP_DEFAULT 0x01
! 167: u_int8_t reserved;
! 168: };
! 169:
! 170: /* defines for the device specific byte in the mode select/sense header */
! 171: #define SMH_DSP_SPEED 0x0F
! 172: #define SMH_DSP_BUFF_MODE 0x70
! 173: #define SMH_DSP_BUFF_MODE_OFF 0x00
! 174: #define SMH_DSP_BUFF_MODE_ON 0x10
! 175: #define SMH_DSP_BUFF_MODE_MLTI 0x20
! 176: #define SMH_DSP_WRITE_PROT 0x80
! 177:
! 178: /* A special for the CIPHER ST150S(old drive) */
! 179: struct block_desc_cipher {
! 180: u_int8_t density;
! 181: u_int8_t nblocks[3];
! 182: u_int8_t reserved;
! 183: u_int8_t blklen[3];
! 184: u_int8_t other;
! 185: #define ST150_SEC 0x01 /* soft error count */
! 186: #define SR150_AUI 0x02 /* autoload inhibit */
! 187: };
! 188:
! 189: /**********************************************************************
! 190: from the scsi2 spec
! 191: Value Tracks Density(bpi) Code Type Reference Note
! 192: 0x1 9 800 NRZI R X3.22-1983 2
! 193: 0x2 9 1600 PE R X3.39-1986 2
! 194: 0x3 9 6250 GCR R X3.54-1986 2
! 195: 0x5 4/9 8000 GCR C X3.136-1986 1
! 196: 0x6 9 3200 PE R X3.157-1987 2
! 197: 0x7 4 6400 IMFM C X3.116-1986 1
! 198: 0x8 4 8000 GCR CS X3.158-1986 1
! 199: 0x9 18 37871 GCR C X3B5/87-099 2
! 200: 0xA 22 6667 MFM C X3B5/86-199 1
! 201: 0xB 4 1600 PE C X3.56-1986 1
! 202: 0xC 24 12690 GCR C HI-TC1 1,5
! 203: 0xD 24 25380 GCR C HI-TC2 1,5
! 204: 0xF 15 10000 GCR C QIC-120 1,5
! 205: 0x10 18 10000 GCR C QIC-150 1,5
! 206: 0x11 26 16000 GCR C QIC-320(525?) 1,5
! 207: 0x12 30 51667 RLL C QIC-1350 1,5
! 208: 0x13 1 61000 DDS CS X3B5/88-185A 4
! 209: 0x14 1 43245 RLL CS X3.202-1991 4
! 210: 0x15 1 45434 RLL CS ECMA TC17 4
! 211: 0x16 48 10000 MFM C X3.193-1990 1
! 212: 0x17 48 42500 MFM C X3B5/91-174 1
! 213: 0x45 73 67733 RLL C QIC3095
! 214:
! 215: where Code means:
! 216: NRZI Non Return to Zero, change on ones
! 217: GCR Group Code Recording
! 218: PE Phase Encoded
! 219: IMFM Inverted Modified Frequency Modulation
! 220: MFM Modified Frequency Modulation
! 221: DDS Dat Data Storage
! 222: RLL Run Length Encoding
! 223:
! 224: where Type means:
! 225: R Reel-to-Reel
! 226: C Cartridge
! 227: CS cassette
! 228:
! 229: where Notes means:
! 230: 1 Serial Recorded
! 231: 2 Parallel Recorded
! 232: 3 Old format know as QIC-11
! 233: 4 Helical Scan
! 234: 5 Not ANSI standard, rather industry standard.
! 235: ********************************************************************/
! 236:
! 237: #define HALFINCH_800 0x01
! 238: #define HALFINCH_1600 0x02
! 239: #define HALFINCH_6250 0x03
! 240: #define QIC_11 0x04 /* from Archive 150S Theory of Op. XXX */
! 241: #define QIC_24 0x05 /* may be bad, works for CIPHER ST150S XXX */
! 242: #define QIC_120 0x0f
! 243: #define QIC_150 0x10
! 244: #define QIC_320 0x11
! 245: #define QIC_525 0x11
! 246: #define QIC_1320 0x12
! 247: #define DDS 0x13
! 248: #define DAT_1 0x13
! 249: #define QIC_3080 0x29
! 250: #define QIC_3095 0x45
! 251:
! 252: #endif /* _SCSI_TAPE_H_ */
CVSweb