2 * 16 Feb 93 Julian Elischer (julian@dialix.oz.au)
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
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
24 /* Shared between kernel & process */
30 #include <sys/types.h>
32 #include <sys/ioccom.h>
41 int lba; /* network byte order */
46 #if BYTE_ORDER == LITTLE_ENDIAN
60 struct cd_sub_channel_header {
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
72 struct cd_sub_channel_position_data {
78 union msf_lba absaddr;
79 union msf_lba reladdr;
82 struct cd_sub_channel_media_catalog {
92 struct cd_sub_channel_track_info {
102 struct cd_sub_channel_info {
103 struct cd_sub_channel_header header;
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;
111 /***************************************************************\
112 * Ioctls for the CD drive *
113 \***************************************************************/
115 struct ioc_play_track {
121 #define CDIOCPLAYTRACKS _IOW('c',1,struct ioc_play_track)
123 struct ioc_play_blocks {
127 #define CDIOCPLAYBLOCKS _IOW('c',2,struct ioc_play_blocks)
129 struct ioc_read_subchannel {
130 u_char address_format;
131 #define CD_LBA_FORMAT 1
132 #define CD_MSF_FORMAT 2
134 #define CD_SUBQ_DATA 0
135 #define CD_CURRENT_POSITION 1
136 #define CD_MEDIA_CATALOG 2
137 #define CD_TRACK_INFO 3
140 struct cd_sub_channel_info *data;
142 #define CDIOCREADSUBCHANNEL _IOWR('c', 3 , struct ioc_read_subchannel )
144 struct ioc_toc_header {
146 u_char starting_track;
149 #define CDIOREADTOCHEADER _IOR('c',4,struct ioc_toc_header)
151 struct ioc_read_toc_entry {
152 u_char address_format;
153 u_char starting_track;
155 struct cd_toc_entry *data;
157 #define CDIOREADTOCENTRYS _IOWR('c',5,struct ioc_read_toc_entry)
159 struct ioc_read_toc_single_entry {
160 u_char address_format;
162 struct cd_toc_entry entry;
164 #define CDIOREADTOCENTRY _IOWR('c',6,struct ioc_read_toc_single_entry)
167 u_char patch[4]; /* one for each channel */
169 #define CDIOCSETPATCH _IOW('c',9,struct ioc_patch)
172 u_char vol[4]; /* one for each channel */
174 #define CDIOCGETVOL _IOR('c',10,struct ioc_vol)
176 #define CDIOCSETVOL _IOW('c',11,struct ioc_vol)
178 #define CDIOCSETMONO _IO('c',12)
180 #define CDIOCSETSTERIO _IO('c',13)
181 #define CDIOCSETSTEREO _IO('c',13)
183 #define CDIOCSETMUTE _IO('c',14)
185 #define CDIOCSETLEFT _IO('c',15)
187 #define CDIOCSETRIGHT _IO('c',16)
189 #define CDIOCSETDEBUG _IO('c',17)
191 #define CDIOCCLRDEBUG _IO('c',18)
193 #define CDIOCPAUSE _IO('c',19)
195 #define CDIOCRESUME _IO('c',20)
197 #define CDIOCRESET _IO('c',21)
199 #define CDIOCSTART _IO('c',22)
201 #define CDIOCSTOP _IO('c',23)
203 #define CDIOCEJECT _IO('c',24)
205 struct ioc_play_msf {
213 #define CDIOCPLAYMSF _IOW('c',25,struct ioc_play_msf)
215 #define CDIOCALLOW _IO('c',26)
217 #define CDIOCPREVENT _IO('c',27)
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>*/
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>*/
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 */
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*/
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*/
265 #define CDIOCCAPABILITY _IOR('c',30,struct ioc_capability) /*<2>*/
267 #endif /* !_SYS_CDIO_H_ */