|
|
1.1 root 1: /*
2: * SCSI interface description
1.1.1.2 ! root 3: *
1.1 root 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 ([email protected])
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: *
1.1.1.2 ! root 45: * scsi_disk.h,v 1.3 1993/05/20 03:46:32 cgd Exp
1.1 root 46: */
47:
48: /*
49: * Ported to run under 386BSD by Julian Elischer ([email protected]) 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:
1.1.1.2 ! root 135: #define FORMAT_DISK 0x04
1.1 root 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:
1.1.1.2 ! root 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:
1.1 root 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: } ;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.