Add the source code for /usr/src/usr.bin from the Net/2 tape
[unix-history] / usr / src / sys.386bsd / scsi / scsi_cd.h
CommitLineData
65d7dd25
JE
1/*
2 * Written by Julian Elischer (julian@tfs.com)
3 * for TRW Financial Systems.
4 *
5 * TRW Financial Systems, in accordance with their agreement with Carnegie
6 * Mellon University, makes this software available to CMU to distribute
7 * or use in any manner that they see fit as long as this message is kept with
8 * the software. For this reason TFS also grants any other persons or
9 * organisations permission to use or modify this software.
10 *
11 * TFS supplies this software to be publicly redistributed
12 * on the understanding that TFS is not responsible for the correct
13 * functioning of this software in any circumstances.
14 *
15 *
16 * PATCHES MAGIC LEVEL PATCH THAT GOT US HERE
17 * -------------------- ----- ----------------------
18 * CURRENT PATCH LEVEL: 1 00098
19 * -------------------- ----- ----------------------
20 *
21 * 16 Feb 93 Julian Elischer ADDED for SCSI system
22 */
23
24
25
26/*
27 * Ported to run under 386BSD by Julian Elischer (julian@tfs.com) Sept 1992
28 */
29
30/*
31 * SCSI command format
32 */
33
34struct scsi_read_capacity_cd
35{
36 u_char op_code;
37 u_char :5;
38 u_char lun:3;
39 u_char addr_3; /* Most Significant */
40 u_char addr_2;
41 u_char addr_1;
42 u_char addr_0; /* Least Significant */
43 u_char unused[3];
44 u_char link:1;
45 u_char flag:1;
46 u_char :6;
47};
48
49struct scsi_pause
50{
51 u_char op_code;
52 u_char :5;
53 u_char lun:3;
54 u_char unused[6];
55 u_char resume:1;
56 u_char :7;
57 u_char link:1;
58 u_char flag:1;
59 u_char :6;
60};
61#define PA_PAUSE 1
62#define PA_RESUME 0
63
64struct scsi_play_msf
65{
66 u_char op_code;
67 u_char :5;
68 u_char lun:3;
69 u_char unused;
70 u_char start_m;
71 u_char start_s;
72 u_char start_f;
73 u_char end_m;
74 u_char end_s;
75 u_char end_f;
76 u_char link:1;
77 u_char flag:1;
78 u_char :6;
79};
80
81struct scsi_play_track
82{
83 u_char op_code;
84 u_char :5;
85 u_char lun:3;
86 u_char unused[2];
87 u_char start_track;
88 u_char start_index;
89 u_char unused1;
90 u_char end_track;
91 u_char end_index;
92 u_char link:1;
93 u_char flag:1;
94 u_char :6;
95};
96
97struct scsi_play
98{
99 u_char op_code;
100 u_char reladdr:1;
101 u_char :4;
102 u_char lun:3;
103 u_char blk_addr[4];
104 u_char unused;
105 u_char xfer_len[2];
106 u_char link:1;
107 u_char flag:1;
108 u_char :6;
109};
110
111struct scsi_play_big
112{
113 u_char op_code;
114 u_char reladdr:1;
115 u_char :4;
116 u_char lun:3;
117 u_char blk_addr[4];
118 u_char xfer_len[4];
119 u_char unused;
120 u_char link:1;
121 u_char flag:1;
122 u_char :6;
123};
124
125struct scsi_play_rel_big
126{
127 u_char op_code;
128 u_char reladdr:1;
129 u_char :4;
130 u_char lun:3;
131 u_char blk_addr[4];
132 u_char xfer_len[4];
133 u_char track;
134 u_char link:1;
135 u_char flag:1;
136 u_char :6;
137};
138
139struct scsi_read_header
140{
141 u_char op_code;
142 u_char :1;
143 u_char msf:1;
144 u_char :3;
145 u_char lun:3;
146 u_char blk_addr[4];
147 u_char unused;
148 u_char data_len[2];
149 u_char link:1;
150 u_char flag:1;
151 u_char :6;
152};
153
154struct scsi_read_subchannel
155{
156 u_char op_code;
157 u_char :1;
158 u_char msf:1;
159 u_char :3;
160 u_char lun:3;
161 u_char :6;
162 u_char subQ:1;
163 u_char :1;
164 u_char subchan_format;
165 u_char unused[2];
166 u_char track;
167 u_char data_len[2];
168 u_char link:1;
169 u_char flag:1;
170 u_char :6;
171};
172
173struct scsi_read_toc
174{
175 u_char op_code;
176 u_char :1;
177 u_char msf:1;
178 u_char :3;
179 u_char lun:3;
180 u_char unused[4];
181 u_char from_track;
182 u_char data_len[2];
183 u_char link:1;
184 u_char flag:1;
185 u_char :6;
186};
187;
188
189struct scsi_read_cd_capacity
190{
191 u_char op_code;
192 u_char :5;
193 u_char lun:3;
194 u_char addr_3; /* Most Significant */
195 u_char addr_2;
196 u_char addr_1;
197 u_char addr_0; /* Least Significant */
198 u_char unused[3];
199 u_char link:1;
200 u_char flag:1;
201 u_char :6;
202};
203
204/*
205 * Opcodes
206 */
207
208#define READ_CD_CAPACITY 0x25 /* slightly different from disk */
209#define READ_SUBCHANNEL 0x42 /* cdrom read Subchannel */
210#define READ_TOC 0x43 /* cdrom read TOC */
211#define READ_HEADER 0x44 /* cdrom read header */
212#define PLAY 0x45 /* cdrom play 'play audio' mode */
213#define PLAY_MSF 0x47 /* cdrom play Min,Sec,Frames mode */
214#define PLAY_TRACK 0x48 /* cdrom play track/index mode */
215#define PLAY_TRACK_REL 0x49 /* cdrom play track/index mode */
216#define PAUSE 0x4b /* cdrom pause in 'play audio' mode */
217#define PLAY_BIG 0xa5 /* cdrom pause in 'play audio' mode */
218#define PLAY_TRACK_REL_BIG 0xa9 /* cdrom play track/index mode */
219
220
221struct cd_inquiry_data /* in case there is some special info */
222{
223 u_char device_type:5;
224 u_char device_qualifier:3;
225 u_char dev_qual2:7;
226 u_char removable:1;
227 u_char ansii_version:3;
228 u_char :5;
229 u_char response_format;
230 u_char additional_length;
231 u_char unused[2];
232 u_char :3;
233 u_char can_link:1;
234 u_char can_sync:1;
235 u_char :3;
236 char vendor[8];
237 char product[16];
238 char revision[4];
239 u_char extra[8];
240};
241
242struct scsi_read_cd_cap_data
243{
244 u_char addr_3; /* Most significant */
245 u_char addr_2;
246 u_char addr_1;
247 u_char addr_0; /* Least significant */
248 u_char length_3; /* Most significant */
249 u_char length_2;
250 u_char length_1;
251 u_char length_0; /* Least significant */
252};
253
254union cd_pages
255{
256#define AUDIO_PAGE 0x0e
257 struct audio_page
258 {
259 u_char page_code:6;
260 u_char :1;
261 u_char ps:1;
262 u_char param_len;
263 u_char :1;
264 u_char sotc:1;
265 u_char immed:1;
266 u_char :5;
267 u_char unused[2];
268 u_char format_lba:4;
269 u_char :3;
270 u_char apr_valid:1;
271 u_char lb_per_sec[2];
272 struct port_control
273 {
274 u_char channels:4;
275#define CHANNEL_0 1
276#define CHANNEL_1 2
277#define CHANNEL_2 4
278#define CHANNEL_3 8
279#define LEFT_CHANNEL CHANNEL_0
280#define RIGHT_CHANNEL CHANNEL_1
281 u_char :4;
282 u_char volume;
283 } port[4];
284#define LEFT_PORT 0
285#define RIGHT_PORT 1
286 }audio;
287};
288
289struct cd_mode_data
290{
291 struct scsi_mode_header header;
292 struct blk_desc blk_desc;
293 union cd_pages page;
294};
295