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 #if BYTE_ORDER == LITTLE_ENDIAN
47 u_int :8;
48 u_int control:4;
49 u_int addr_type:4;
50 #else
51 u_int :8;
52 u_int addr_type:4;
53 u_int control:4;
54 #endif
55 u_char track;
56 u_int :8;
57 union msf_lba addr;
58 };
59
60 struct cd_sub_channel_header {
61 u_int :8;
62 u_char audio_status;
63 #define CD_AS_AUDIO_INVALID 0x00
64 #define CD_AS_PLAY_IN_PROGRESS 0x11
65 #define CD_AS_PLAY_PAUSED 0x12
66 #define CD_AS_PLAY_COMPLETED 0x13
67 #define CD_AS_PLAY_ERROR 0x14
68 #define CD_AS_NO_STATUS 0x15
69 u_char data_len[2];
70 };
71
72 struct cd_sub_channel_position_data {
73 u_char data_format;
74 u_int control:4;
75 u_int addr_type:4;
76 u_char track_number;
77 u_char index_number;
78 union msf_lba absaddr;
79 union msf_lba reladdr;
80 };
81
82 struct cd_sub_channel_media_catalog {
83 u_char data_format;
84 u_int :8;
85 u_int :8;
86 u_int :8;
87 u_int :7;
88 u_int mc_valid:1;
89 u_char mc_number[15];
90 };
91
92 struct cd_sub_channel_track_info {
93 u_char data_format;
94 u_int :8;
95 u_char track_number;
96 u_int :8;
97 u_int :7;
98 u_int ti_valid:1;
99 u_char ti_number[15];
100 };
101
102 struct cd_sub_channel_info {
103 struct cd_sub_channel_header header;
104 union {
105 struct cd_sub_channel_position_data position;
106 struct cd_sub_channel_media_catalog media_catalog;
107 struct cd_sub_channel_track_info track_info;
108 } what;
109 };
110
111 /***************************************************************\
112 * Ioctls for the CD drive *
113 \***************************************************************/
114
115 struct ioc_play_track {
116 u_char start_track;
117 u_char start_index;
118 u_char end_track;
119 u_char end_index;
120 };
121 #define CDIOCPLAYTRACKS _IOW('c',1,struct ioc_play_track)
122
123 struct ioc_play_blocks {
124 int blk;
125 int len;
126 };
127 #define CDIOCPLAYBLOCKS _IOW('c',2,struct ioc_play_blocks)
128
129 struct ioc_read_subchannel {
130 u_char address_format;
131 #define CD_LBA_FORMAT 1
132 #define CD_MSF_FORMAT 2
133 u_char data_format;
134 #define CD_SUBQ_DATA 0
135 #define CD_CURRENT_POSITION 1
136 #define CD_MEDIA_CATALOG 2
137 #define CD_TRACK_INFO 3
138 u_char track;
139 int data_len;
140 struct cd_sub_channel_info *data;
141 };
142 #define CDIOCREADSUBCHANNEL _IOWR('c', 3 , struct ioc_read_subchannel )
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 struct ioc_read_toc_entry {
152 u_char address_format;
153 u_char starting_track;
154 u_short data_len;
155 struct cd_toc_entry *data;
156 };
157 #define CDIOREADTOCENTRYS _IOWR('c',5,struct ioc_read_toc_entry)
158
159 struct ioc_read_toc_single_entry {
160 u_char address_format;
161 u_char track;
162 struct cd_toc_entry entry;
163 };
164 #define CDIOREADTOCENTRY _IOWR('c',6,struct ioc_read_toc_single_entry)
165
166 struct ioc_patch {
167 u_char patch[4]; /* one for each channel */
168 };
169 #define CDIOCSETPATCH _IOW('c',9,struct ioc_patch)
170
171 struct ioc_vol {
172 u_char vol[4]; /* one for each channel */
173 };
174 #define CDIOCGETVOL _IOR('c',10,struct ioc_vol)
175
176 #define CDIOCSETVOL _IOW('c',11,struct ioc_vol)
177
178 #define CDIOCSETMONO _IO('c',12)
179
180 #define CDIOCSETSTERIO _IO('c',13)
181 #define CDIOCSETSTEREO _IO('c',13)
182
183 #define CDIOCSETMUTE _IO('c',14)
184
185 #define CDIOCSETLEFT _IO('c',15)
186
187 #define CDIOCSETRIGHT _IO('c',16)
188
189 #define CDIOCSETDEBUG _IO('c',17)
190
191 #define CDIOCCLRDEBUG _IO('c',18)
192
193 #define CDIOCPAUSE _IO('c',19)
194
195 #define CDIOCRESUME _IO('c',20)
196
197 #define CDIOCRESET _IO('c',21)
198
199 #define CDIOCSTART _IO('c',22)
200
201 #define CDIOCSTOP _IO('c',23)
202
203 #define CDIOCEJECT _IO('c',24)
204
205 struct ioc_play_msf {
206 u_char start_m;
207 u_char start_s;
208 u_char start_f;
209 u_char end_m;
210 u_char end_s;
211 u_char end_f;
212 };
213 #define CDIOCPLAYMSF _IOW('c',25,struct ioc_play_msf)
214
215 #define CDIOCALLOW _IO('c',26)
216
217 #define CDIOCPREVENT _IO('c',27)
218
219 /*<1>For drives that support it, this*/
220 /*<1>causes the drive to close its door*/
221 /*<1>and make the media (if any) ready*/
222 #define CDIOCCLOSE _IO('c',28) /*<1>*/
223
224 struct ioc_pitch { /*<1>For drives that support it, this*/
225 /*<1>call instructs the drive to play the*/
226 short speed; /*<1>audio at a faster or slower-than-normal*/
227 }; /*<1>rate. -32767 to -1 is slower, 0==normal,*/
228 /*<1>and 1 to 32767 is faster. LSB bits are*/
229 /*<1>discarded first by drives with less res.*/
230 #define CDIOCPITCH _IOW('c',29,struct ioc_pitch) /*<1>*/
231
232 struct ioc_capability { /*<2>*/
233 u_long play_function; /*<2>*/
234 #define CDDOPLAYTRK 0x00000001 /*<2>Can Play tracks/index*/
235 #define CDDOPLAYMSF 0x00000002 /*<2>Can Play msf to msf*/
236 #define CDDOPLAYBLOCKS 0x00000004 /*<2>Can Play range of blocks*/
237 #define CDDOPAUSE 0x00000100 /*<2>Output can be paused*/
238 #define CDDORESUME 0x00000200 /*<2>Output can be resumed*/
239 #define CDDORESET 0x00000400 /*<2>Drive can be completely reset*/
240 #define CDDOSTART 0x00000800 /*<2>Audio can be started*/
241 #define CDDOSTOP 0x00001000 /*<2>Audio can be stopped*/
242 #define CDDOPITCH 0x00002000 /*<2>Audio pitch */
243
244 u_long routing_function; /*<2>*/
245 #define CDREADVOLUME 0x00000001 /*<2>Volume settings can be read*/
246 #define CDSETVOLUME 0x00000002 /*<2>Volume settings can be set*/
247 #define CDSETMONO 0x00000100 /*<2>Output can be set to mono*/
248 #define CDSETSTEREO 0x00000200 /*<2>Output can be set to stereo (def)*/
249 #define CDSETLEFT 0x00000400 /*<2>Output can be set to left only*/
250 #define CDSETRIGHT 0x00000800 /*<2>Output can be set to right only*/
251 #define CDSETMUTE 0x00001000 /*<2>Output can be muted*/
252 #define CDSETPATCH 0x00008000 /*<2>Direct routing control allowed*/
253
254 u_long special_function; /*<2>*/
255 #define CDDOEJECT 0x00000001 /*<2>The tray can be opened*/
256 #define CDDOCLOSE 0x00000002 /*<2>The tray can be closed*/
257 #define CDDOLOCK 0x00000004 /*<2>The tray can be locked*/
258 #define CDREADHEADER 0x00000100 /*<2>Can read Table of Contents*/
259 #define CDREADENTRIES 0x00000200 /*<2>Can read TOC Entries*/
260 #define CDREADSUBQ 0x00000200 /*<2>Can read Subchannel info*/
261 #define CDREADRW 0x00000400 /*<2>Can read subcodes R-W*/
262 #define CDHASDEBUG 0x00004000 /*<2>The tray has dynamic debugging*/
263 }; /*<2>*/
264
265 #define CDIOCCAPABILITY _IOR('c',30,struct ioc_capability) /*<2>*/
266
267 #endif /* !_SYS_CDIO_H_ */
Cache object: 0f5a8d64ca257aedd808110744fa072a
|