xref: /netbsd-src/sys/dev/scsipi/scsi_disk.h (revision 811e6386f8c5e4a3521c7003da29ec8673e344fa)
1 /*
2  * HISTORY
3  * $Log: scsi_disk.h,v $
4  * Revision 1.2  1993/04/12 08:19:32  deraadt
5  * new scsi subsystem.
6  * changes also in config/mkioconf.c
7  * 	i386/isa/wd.c, fd.c, and all scsi drivers.
8  *
9  * Revision 1.1  1993/03/21  18:13:00  cgd
10  * after 0.2.2 "stable" patches applied
11  *
12  * Revision 1.2  1992/10/13  03:14:21  julian
13  * added the load-eject field in 'start/stop' for removable devices.
14  *
15  * Revision 1.1  1992/09/26  22:11:29  julian
16  * Initial revision
17  *
18  *
19  * PATCHES MAGIC                LEVEL   PATCH THAT GOT US HERE
20  * --------------------         -----   ----------------------
21  * CURRENT PATCH LEVEL:         1       00098
22  * --------------------         -----   ----------------------
23  *
24  * 16 Feb 93	Julian Elischer		ADDED for SCSI system
25  *
26  */
27 
28 /*
29  * SCSI interface description
30  */
31 
32 /*
33  * Some lines of this file comes from a file of the name "scsi.h"
34  * distributed by OSF as part of mach2.5,
35  *  so the following disclaimer has been kept.
36  *
37  * Copyright 1990 by Open Software Foundation,
38  * Grenoble, FRANCE
39  *
40  * 		All Rights Reserved
41  *
42  *   Permission to use, copy, modify, and distribute this software and
43  * its documentation for any purpose and without fee is hereby granted,
44  * provided that the above copyright notice appears in all copies and
45  * that both the copyright notice and this permission notice appear in
46  * supporting documentation, and that the name of OSF or Open Software
47  * Foundation not be used in advertising or publicity pertaining to
48  * distribution of the software without specific, written prior
49  * permission.
50  *
51  *   OSF DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
52  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
53  * IN NO EVENT SHALL OSF BE LIABLE FOR ANY SPECIAL, INDIRECT, OR
54  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
55  * LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT,
56  * NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
57  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
58  */
59 
60 /*
61  * Largely written by Julian Elischer (julian@tfs.com)
62  * for TRW Financial Systems.
63  *
64  * TRW Financial Systems, in accordance with their agreement with Carnegie
65  * Mellon University, makes this software available to CMU to distribute
66  * or use in any manner that they see fit as long as this message is kept with
67  * the software. For this reason TFS also grants any other persons or
68  * organisations permission to use or modify this software.
69  *
70  * TFS supplies this software to be publicly redistributed
71  * on the understanding that TFS is not responsible for the correct
72  * functioning of this software in any circumstances.
73  *
74  */
75 
76 /*
77  * Ported to run under 386BSD by Julian Elischer (julian@tfs.com) Sept 1992
78  */
79 
80 /*
81  * SCSI command format
82  */
83 
84 
85 struct scsi_reassign_blocks
86 {
87 	u_char	op_code;
88 	u_char	:5;
89 	u_char	lun:3;
90 	u_char	unused[3];
91 	u_char	link:1;
92 	u_char	flag:1;
93 	u_char	:6;
94 };
95 
96 struct scsi_rw
97 {
98 	u_char	op_code;
99 	u_char	addr_2:5;	/* Most significant */
100 	u_char	lun:3;
101 	u_char	addr_1;
102 	u_char	addr_0;		/* least significant */
103 	u_char	length;
104 	u_char	link:1;
105 	u_char	flag:1;
106 	u_char	:6;
107 };
108 
109 struct scsi_rw_big
110 {
111 	u_char	op_code;
112 	u_char	rel_addr:1;
113 	u_char	:4;	/* Most significant */
114 	u_char	lun:3;
115 	u_char	addr_3;
116 	u_char	addr_2;
117 	u_char	addr_1;
118 	u_char	addr_0;		/* least significant */
119 	u_char	reserved;;
120 	u_char	length2;
121 	u_char	length1;
122 	u_char	link:1;
123 	u_char	flag:1;
124 	u_char	:4;
125 	u_char	vendor:2;
126 };
127 
128 struct scsi_read_capacity
129 {
130 	u_char	op_code;
131 	u_char	:5;
132 	u_char	lun:3;
133 	u_char	addr_3;	/* Most Significant */
134 	u_char	addr_2;
135 	u_char	addr_1;
136 	u_char	addr_0;	/* Least Significant */
137 	u_char	unused[3];
138 	u_char	link:1;
139 	u_char	flag:1;
140 	u_char	:6;
141 };
142 
143 struct scsi_start_stop
144 {
145 	u_char	op_code;
146 	u_char	:5;
147 	u_char	lun:3;
148 	u_char	unused[2];
149 	u_char	start:1;
150 	u_char	loej:1;
151 	u_char	:6;
152 	u_char	link:1;
153 	u_char	flag:1;
154 	u_char	:6;
155 };
156 
157 
158 
159 /*
160  * Opcodes
161  */
162 
163 #define FORMAT_DISK		0x04
164 #define	REASSIGN_BLOCKS		0x07
165 #define	READ_COMMAND		0x08
166 #define WRITE_COMMAND		0x0a
167 #define MODE_SELECT		0x15
168 #define MODE_SENSE		0x1a
169 #define START_STOP		0x1b
170 #define PREVENT_ALLOW		0x1e
171 #define	READ_CAPACITY		0x25
172 #define	READ_BIG		0x28
173 #define WRITE_BIG		0x2a
174 
175 
176 struct scsi_format_parms {			/* physical BFI format */
177 	u_short reserved;
178 	u_short list_len;
179 	struct defect {
180 		unsigned cyl  : 24;
181 		unsigned head : 8;
182 		long    bytes_from_index;
183 	} defect[127];
184 } format_parms;
185 
186 
187 struct scsi_read_cap_data
188 {
189 	u_char	addr_3;	/* Most significant */
190 	u_char	addr_2;
191 	u_char	addr_1;
192 	u_char	addr_0;	/* Least significant */
193 	u_char	length_3;	/* Most significant */
194 	u_char	length_2;
195 	u_char	length_1;
196 	u_char	length_0;	/* Least significant */
197 };
198 
199 struct scsi_reassign_blocks_data
200 {
201 	u_char	reserved[2];
202 	u_char	length_msb;
203 	u_char	length_lsb;
204 	struct
205 	{
206 		u_char	dlbaddr_3;	/* defect logical block address (MSB) */
207 		u_char	dlbaddr_2;
208 		u_char	dlbaddr_1;
209 		u_char	dlbaddr_0;	/* defect logical block address (LSB) */
210 	} defect_descriptor[1];
211 };
212 
213 union	disk_pages /* this is the structure copied from osf */
214 {
215 	struct page_disk_format {
216 	   u_char pg_code:6;	/* page code (should be 3)	      */
217 	   u_char :2;
218 	   u_char pg_length;	/* page length (should be 0x16)	      */
219 	   u_char trk_z_1;	/* tracks per zone (MSB)	      */
220 	   u_char trk_z_0;	/* tracks per zone (LSB)	      */
221 	   u_char alt_sec_1;	/* alternate sectors per zone (MSB)   */
222 	   u_char alt_sec_0;	/* alternate sectors per zone (LSB)   */
223 	   u_char alt_trk_z_1;	/* alternate tracks per zone (MSB)    */
224 	   u_char alt_trk_z_0;	/* alternate tracks per zone (LSB)    */
225 	   u_char alt_trk_v_1;	/* alternate tracks per volume (MSB)  */
226 	   u_char alt_trk_v_0;	/* alternate tracks per volume (LSB)  */
227 	   u_char ph_sec_t_1;	/* physical sectors per track (MSB)   */
228 	   u_char ph_sec_t_0;	/* physical sectors per track (LSB)   */
229 	   u_char bytes_s_1;	/* bytes per sector (MSB)	      */
230 	   u_char bytes_s_0;	/* bytes per sector (LSB)	      */
231 	   u_char interleave_1;/* interleave (MSB)		      */
232 	   u_char interleave_0;/* interleave (LSB)		      */
233 	   u_char trk_skew_1;	/* track skew factor (MSB)	      */
234 	   u_char trk_skew_0;	/* track skew factor (LSB)	      */
235 	   u_char cyl_skew_1;	/* cylinder skew (MSB)		      */
236 	   u_char cyl_skew_0;	/* cylinder skew (LSB)		      */
237 	   u_char reserved1:4;
238 	   u_char surf:1;
239 	   u_char rmb:1;
240 	   u_char hsec:1;
241 	   u_char ssec:1;
242 	   u_char reserved2;
243 	   u_char reserved3;
244 	} disk_format;
245 	struct page_rigid_geometry {
246 	   u_char pg_code:7;	/* page code (should be 4)	      */
247 	   u_char mbone:1;	/* must be one			      */
248 	   u_char pg_length;	/* page length (should be 0x16)	      */
249 	   u_char ncyl_2;	/* number of cylinders (MSB)	      */
250 	   u_char ncyl_1;	/* number of cylinders 		      */
251 	   u_char ncyl_0;	/* number of cylinders (LSB)	      */
252 	   u_char nheads;	/* number of heads 		      */
253 	   u_char st_cyl_wp_2;	/* starting cyl., write precomp (MSB) */
254 	   u_char st_cyl_wp_1;	/* starting cyl., write precomp	      */
255 	   u_char st_cyl_wp_0;	/* starting cyl., write precomp (LSB) */
256 	   u_char st_cyl_rwc_2;/* starting cyl., red. write cur (MSB)*/
257 	   u_char st_cyl_rwc_1;/* starting cyl., red. write cur      */
258 	   u_char st_cyl_rwc_0;/* starting cyl., red. write cur (LSB)*/
259 	   u_char driv_step_1;	/* drive step rate (MSB)	      */
260 	   u_char driv_step_0;	/* drive step rate (LSB)	      */
261 	   u_char land_zone_2;	/* landing zone cylinder (MSB)	      */
262 	   u_char land_zone_1;	/* landing zone cylinder 	      */
263 	   u_char land_zone_0;	/* landing zone cylinder (LSB)	      */
264 	   u_char reserved1;
265 	   u_char reserved2;
266 	   u_char reserved3;
267     	} rigid_geometry;
268 } ;
269