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