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