1 /* $OpenBSD: scsi_tape.h,v 1.5 1996/10/31 01:09:24 niklas Exp $ */ 2 /* $NetBSD: scsi_tape.h,v 1.8 1996/03/19 03:07:36 mycroft 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 214 where Code means: 215 NRZI Non Return to Zero, change on ones 216 GCR Group Code Recording 217 PE Phase Encoded 218 IMFM Inverted Modified Frequency Modulation 219 MFM Modified Frequency Modulation 220 DDS Dat Data Storage 221 RLL Run Length Encoding 222 223 where Type means: 224 R Reel-to-Reel 225 C Cartridge 226 CS cassette 227 228 where Notes means: 229 1 Serial Recorded 230 2 Parallel Recorded 231 3 Old format know as QIC-11 232 4 Helical Scan 233 5 Not ANSI standard, rather industry standard. 234 ********************************************************************/ 235 236 #define HALFINCH_800 0x01 237 #define HALFINCH_1600 0x02 238 #define HALFINCH_6250 0x03 239 #define QIC_11 0x04 /* from Archive 150S Theory of Op. XXX */ 240 #define QIC_24 0x05 /* may be bad, works for CIPHER ST150S XXX */ 241 #define QIC_120 0x0f 242 #define QIC_150 0x10 243 #define QIC_320 0x11 244 #define QIC_525 0x11 245 #define QIC_1320 0x12 246 #define DDS 0x13 247 #define DAT_1 0x13 248 249 #endif /* _SCSI_TAPE_H_ */ 250