FreeBSD/Linux Kernel Cross Reference
sys/sys/cdio.h
1 /*
2 * 16 Feb 93 Julian Elischer (julian@dialix.oz.au)
3 *
4 * $FreeBSD$
5 */
6
7 /*
8 <1> Fixed a conflict with ioctl usage. There were two different
9 functions using code #25. Made file formatting consistent.
10 Added two new ioctl codes: door closing and audio pitch playback.
11 Added a STEREO union called STEREO.
12 5-Mar-95 Frank Durda IV bsdmail@nemesis.lonestar.org
13
14 <2> Added a new ioctl that allows you to find out what capabilities
15 a drive has and what commands it will accept. This allows a
16 user application to only offer controls (buttons, sliders, etc)
17 for functions that drive can actually do. Things it can't do
18 can disappear or be greyed-out (like some other system).
19 If the driver doesn't respond to this call, well, handle it the
20 way you used to do it.
21 2-Apr-95 Frank Durda IV bsdmail@nemesis.lonestar.org
22 */
23
24 /* Shared between kernel & process */
25
26 #ifndef _SYS_CDIO_H_
27 #define _SYS_CDIO_H_
28
29 #ifndef KERNEL
30 #include <sys/types.h>
31 #endif
32 #include <sys/ioccom.h>
33
34 union msf_lba {
35 struct {
36 unsigned char unused;
37 unsigned char minute;
38 unsigned char second;
39 unsigned char frame;
40 } msf;
41 int lba; /* network byte order */
42 u_char addr[4];
43 };
44
45 struct cd_toc_entry {
46 u_int :8;
47 u_int control:4;
48 u_int addr_type:4;
49 u_char track;
50 u_int :8;
51 union msf_lba addr;
52 };
53
54 struct cd_sub_channel_header {
55 u_int :8;
56 u_char audio_status;
57 #define CD_AS_AUDIO_INVALID 0x00
58 #define CD_AS_PLAY_IN_PROGRESS 0x11
59 #define CD_AS_PLAY_PAUSED 0x12
60 #define CD_AS_PLAY_COMPLETED 0x13
61 #define CD_AS_PLAY_ERROR 0x14
62 #define CD_AS_NO_STATUS 0x15
63 u_char data_len[2];
64 };
65
66 struct cd_sub_channel_position_data {
67 u_char data_format;
68 u_int control:4;
69 u_int addr_type:4;
70 u_char track_number;
71 u_char index_number;
72 union msf_lba absaddr;
73 union msf_lba reladdr;
74 };
75
76 struct cd_sub_channel_media_catalog {
77 u_char data_format;
78 u_int :8;
79 u_int :8;
80 u_int :8;
81 u_int :7;
82 u_int mc_valid:1;
83 u_char mc_number[15];
84 };
85
86 struct cd_sub_channel_track_info {
87 u_char data_format;
88 u_int :8;
89 u_char track_number;
90 u_int :8;
91 u_int :7;
92 u_int ti_valid:1;
93 u_char ti_number[15];
94 };
95
96 struct cd_sub_channel_info {
97 struct cd_sub_channel_header header;
98 union {
99 struct cd_sub_channel_position_data position;
100 struct cd_sub_channel_media_catalog media_catalog;
101 struct cd_sub_channel_track_info track_info;
102 } what;
103 };
104
105
106 /***************************************************************\
107 * Ioctls for the CD drive *
108 \***************************************************************/
109
110 struct ioc_play_track
111 {
112 u_char start_track;
113 u_char start_index;
114 u_char end_track;
115 u_char end_index;
116 };
117 #define CDIOCPLAYTRACKS _IOW('c',1,struct ioc_play_track)
118
119
120 struct ioc_play_blocks
121 {
122 int blk;
123 int len;
124 };
125 #define CDIOCPLAYBLOCKS _IOW('c',2,struct ioc_play_blocks)
126
127
128 struct ioc_read_subchannel {
129 u_char address_format;
130 #define CD_LBA_FORMAT 1
131 #define CD_MSF_FORMAT 2
132 u_char data_format;
133 #define CD_SUBQ_DATA 0
134 #define CD_CURRENT_POSITION 1
135 #define CD_MEDIA_CATALOG 2
136 #define CD_TRACK_INFO 3
137 u_char track;
138 int data_len;
139 struct cd_sub_channel_info *data;
140 };
141 #define CDIOCREADSUBCHANNEL _IOWR('c', 3 , struct ioc_read_subchannel )
142
143
144 struct ioc_toc_header {
145 u_short len;
146 u_char starting_track;
147 u_char ending_track;
148 };
149 #define CDIOREADTOCHEADER _IOR('c',4,struct ioc_toc_header)
150
151
152 struct ioc_read_toc_entry {
153 u_char address_format;
154 u_char starting_track;
155 u_short data_len;
156 struct cd_toc_entry *data;
157 };
158 #define CDIOREADTOCENTRYS _IOWR('c',5,struct ioc_read_toc_entry)
159
160
161 struct ioc_read_toc_single_entry {
162 u_char address_format;
163 u_char track;
164 struct cd_toc_entry entry;
165 };
166 #define CDIOREADTOCENTRY _IOWR('c',6,struct ioc_read_toc_single_entry)
167
168
169 struct ioc_patch
170 {
171 u_char patch[4]; /* one for each channel */
172 };
173 #define CDIOCSETPATCH _IOW('c',9,struct ioc_patch)
174
175
176 struct ioc_vol
177 {
178 u_char vol[4]; /* one for each channel */
179 };
180 #define CDIOCGETVOL _IOR('c',10,struct ioc_vol)
181
182 #define CDIOCSETVOL _IOW('c',11,struct ioc_vol)
183
184 #define CDIOCSETMONO _IO('c',12)
185
186 #define CDIOCSETSTERIO _IO('c',13)
187 #define CDIOCSETSTEREO _IO('c',13)
188
189 #define CDIOCSETMUTE _IO('c',14)
190
191 #define CDIOCSETLEFT _IO('c',15)
192
193 #define CDIOCSETRIGHT _IO('c',16)
194
195 #define CDIOCSETDEBUG _IO('c',17)
196
197 #define CDIOCCLRDEBUG _IO('c',18)
198
199 #define CDIOCPAUSE _IO('c',19)
200
201 #define CDIOCRESUME _IO('c',20)
202
203 #define CDIOCRESET _IO('c',21)
204
205 #define CDIOCSTART _IO('c',22)
206
207 #define CDIOCSTOP _IO('c',23)
208
209 #define CDIOCEJECT _IO('c',24)
210
211
212 struct ioc_play_msf
213 {
214 u_char start_m;
215 u_char start_s;
216 u_char start_f;
217 u_char end_m;
218 u_char end_s;
219 u_char end_f;
220 };
221 #define CDIOCPLAYMSF _IOW('c',25,struct ioc_play_msf)
222
223 #define CDIOCALLOW _IO('c',26)
224
225 #define CDIOCPREVENT _IO('c',27)
226
227 /*<1>For drives that support it, this*/
228 /*<1>causes the drive to close its door*/
229 /*<1>and make the media (if any) ready*/
230 #define CDIOCCLOSE _IO('c',28) /*<1>*/
231
232
233 struct ioc_pitch /*<1>For drives that support it, this*/
234 { /*<1>call instructs the drive to play the*/
235 short speed; /*<1>audio at a faster or slower-than-normal*/
236 }; /*<1>rate. -32767 to -1 is slower, 0==normal,*/
237 /*<1>and 1 to 32767 is faster. LSB bits are*/
238 /*<1>discarded first by drives with less res.*/
239 #define CDIOCPITCH _IOW('c',29,struct ioc_pitch) /*<1>*/
240
241 struct ioc_capability { /*<2>*/
242 u_long play_function; /*<2>*/
243 #define CDDOPLAYTRK 0x00000001 /*<2>Can Play tracks/index*/
244 #define CDDOPLAYMSF 0x00000002 /*<2>Can Play msf to msf*/
245 #define CDDOPLAYBLOCKS 0x00000004 /*<2>Can Play range of blocks*/
246 #define CDDOPAUSE 0x00000100 /*<2>Output can be paused*/
247 #define CDDORESUME 0x00000200 /*<2>Output can be resumed*/
248 #define CDDORESET 0x00000400 /*<2>Drive can be completely reset*/
249 #define CDDOSTART 0x00000800 /*<2>Audio can be started*/
250 #define CDDOSTOP 0x00001000 /*<2>Audio can be stopped*/
251 #define CDDOPITCH 0x00002000 /*<2>Audio pitch */
252
253 u_long routing_function; /*<2>*/
254 #define CDREADVOLUME 0x00000001 /*<2>Volume settings can be read*/
255 #define CDSETVOLUME 0x00000002 /*<2>Volume settings can be set*/
256 #define CDSETMONO 0x00000100 /*<2>Output can be set to mono*/
257 #define CDSETSTEREO 0x00000200 /*<2>Output can be set to stereo (def)*/
258 #define CDSETLEFT 0x00000400 /*<2>Output can be set to left only*/
259 #define CDSETRIGHT 0x00000800 /*<2>Output can be set to right only*/
260 #define CDSETMUTE 0x00001000 /*<2>Output can be muted*/
261 #define CDSETPATCH 0x00008000 /*<2>Direct routing control allowed*/
262
263 u_long special_function; /*<2>*/
264 #define CDDOEJECT 0x00000001 /*<2>The tray can be opened*/
265 #define CDDOCLOSE 0x00000002 /*<2>The tray can be closed*/
266 #define CDDOLOCK 0x00000004 /*<2>The tray can be locked*/
267 #define CDREADHEADER 0x00000100 /*<2>Can read Table of Contents*/
268 #define CDREADENTRIES 0x00000200 /*<2>Can read TOC Entries*/
269 #define CDREADSUBQ 0x00000200 /*<2>Can read Subchannel info*/
270 #define CDREADRW 0x00000400 /*<2>Can read subcodes R-W*/
271 #define CDHASDEBUG 0x00004000 /*<2>The tray has dynamic debugging*/
272 }; /*<2>*/
273
274 #define CDIOCCAPABILITY _IOR('c',30,struct ioc_capability) /*<2>*/
275
276 struct ioc_read_audio
277 {
278 u_char address_format;
279 union msf_lba address;
280 int nframes;
281 u_char* buffer;
282 };
283
284 #define CDIOCREADAUDIO _IOWR('c',31,struct ioc_read_audio)
285
286 #endif /* !_SYS_CDIO_H_ */
Cache object: ac0c006ea2e9234ed03651f2fa97cfab
|