xref: /dragonfly/sys/sys/cdio.h (revision 05d547921936ef0b59db86e8422e3a2753937df7)
1 /*
2  * 16 Feb 93        Julian Elischer     (julian@dialix.oz.au)
3  *
4  * $FreeBSD: src/sys/sys/cdio.h,v 1.21 1999/12/29 04:24:38 peter Exp $
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 _SYS_TYPES_H_
30 #include <sys/types.h>
31 #endif
32 #ifndef _SYS_IOCCOM_H_
33 #include <sys/ioccom.h>
34 #endif
35 
36 union msf_lba {
37           struct {
38                     unsigned char   unused;
39                     unsigned char   minute;
40                     unsigned char   second;
41                     unsigned char   frame;
42           } msf;
43           int     lba;    /* network byte order */
44           u_char    addr[4];
45 };
46 
47 struct cd_toc_entry {
48           u_int     :8;
49           u_int     control:4;
50           u_int     addr_type:4;
51           u_char  track;
52           u_int     :8;
53           union msf_lba  addr;
54 };
55 
56 struct cd_sub_channel_header {
57           u_int     :8;
58           u_char    audio_status;
59 #define CD_AS_AUDIO_INVALID        0x00
60 #define CD_AS_PLAY_IN_PROGRESS     0x11
61 #define CD_AS_PLAY_PAUSED          0x12
62 #define CD_AS_PLAY_COMPLETED       0x13
63 #define CD_AS_PLAY_ERROR           0x14
64 #define CD_AS_NO_STATUS            0x15
65           u_char    data_len[2];
66 };
67 
68 struct cd_sub_channel_position_data {
69           u_char    data_format;
70           u_int     control:4;
71           u_int     addr_type:4;
72           u_char    track_number;
73           u_char    index_number;
74           union msf_lba  absaddr;
75           union msf_lba  reladdr;
76 };
77 
78 struct cd_sub_channel_media_catalog {
79         u_char  data_format;
80         u_int   :8;
81         u_int   :8;
82         u_int   :8;
83         u_int   :7;
84         u_int   mc_valid:1;
85         u_char  mc_number[15];
86 };
87 
88 struct cd_sub_channel_track_info {
89         u_char  data_format;
90         u_int   :8;
91         u_char  track_number;
92         u_int   :8;
93         u_int   :7;
94         u_int   ti_valid:1;
95         u_char  ti_number[15];
96 };
97 
98 struct cd_sub_channel_info {
99           struct cd_sub_channel_header header;
100           union {
101                     struct cd_sub_channel_position_data position;
102                     struct cd_sub_channel_media_catalog media_catalog;
103                     struct cd_sub_channel_track_info track_info;
104           } what;
105 };
106 
107 
108 /***************************************************************\
109 * Ioctls for the CD drive                                             *
110 \***************************************************************/
111 
112 struct ioc_play_track
113 {
114           u_char    start_track;
115           u_char    start_index;
116           u_char    end_track;
117           u_char    end_index;
118 };
119 #define   CDIOCPLAYTRACKS     _IOW('c',1,struct ioc_play_track)
120 
121 
122 struct ioc_play_blocks
123 {
124           int       blk;
125           int       len;
126 };
127 #define   CDIOCPLAYBLOCKS     _IOW('c',2,struct ioc_play_blocks)
128 
129 
130 struct ioc_read_subchannel {
131           u_char address_format;
132 #define CD_LBA_FORMAT         1
133 #define CD_MSF_FORMAT         2
134           u_char data_format;
135 #define CD_SUBQ_DATA                    0
136 #define CD_CURRENT_POSITION   1
137 #define CD_MEDIA_CATALOG      2
138 #define CD_TRACK_INFO                   3
139           u_char track;
140           int       data_len;
141           struct  cd_sub_channel_info *data;
142 };
143 #define CDIOCREADSUBCHANNEL _IOWR('c', 3 , struct ioc_read_subchannel )
144 
145 
146 struct ioc_toc_header {
147           u_short len;
148           u_char  starting_track;
149           u_char  ending_track;
150 };
151 #define CDIOREADTOCHEADER _IOR('c',4,struct ioc_toc_header)
152 
153 
154 struct ioc_read_toc_entry {
155           u_char    address_format;
156           u_char    starting_track;
157           u_short   data_len;
158           struct  cd_toc_entry *data;
159 };
160 #define CDIOREADTOCENTRYS _IOWR('c',5,struct ioc_read_toc_entry)
161 
162 
163 struct ioc_read_toc_single_entry {
164           u_char    address_format;
165           u_char    track;
166           struct  cd_toc_entry entry;
167 };
168 #define CDIOREADTOCENTRY _IOWR('c',6,struct ioc_read_toc_single_entry)
169 
170 
171 struct    ioc_patch
172 {
173           u_char    patch[4]; /* one for each channel */
174 };
175 #define   CDIOCSETPATCH       _IOW('c',9,struct ioc_patch)
176 
177 
178 struct    ioc_vol
179 {
180           u_char    vol[4];   /* one for each channel */
181 };
182 #define   CDIOCGETVOL         _IOR('c',10,struct ioc_vol)
183 
184 #define   CDIOCSETVOL         _IOW('c',11,struct ioc_vol)
185 
186 #define   CDIOCSETMONO        _IO('c',12)
187 
188 #define   CDIOCSETSTEREO      _IO('c',13)
189 
190 #define   CDIOCSETMUTE        _IO('c',14)
191 
192 #define   CDIOCSETLEFT        _IO('c',15)
193 
194 #define   CDIOCSETRIGHT       _IO('c',16)
195 
196 #define   CDIOCSETDEBUG       _IO('c',17)
197 
198 #define   CDIOCCLRDEBUG       _IO('c',18)
199 
200 #define   CDIOCPAUSE          _IO('c',19)
201 
202 #define   CDIOCRESUME         _IO('c',20)
203 
204 #define   CDIOCRESET          _IO('c',21)
205 
206 #define   CDIOCSTART          _IO('c',22)
207 
208 #define   CDIOCSTOP _IO('c',23)
209 
210 #define   CDIOCEJECT          _IO('c',24)
211 
212 
213 struct ioc_play_msf
214 {
215           u_char    start_m;
216           u_char    start_s;
217           u_char    start_f;
218           u_char    end_m;
219           u_char    end_s;
220           u_char    end_f;
221 };
222 #define   CDIOCPLAYMSF        _IOW('c',25,struct ioc_play_msf)
223 
224 #define   CDIOCALLOW          _IO('c',26)
225 
226 #define   CDIOCPREVENT        _IO('c',27)
227 
228                                         /*<1>For drives that support it, this*/
229                                         /*<1>causes the drive to close its door*/
230                                         /*<1>and make the media (if any) ready*/
231 #define CDIOCCLOSE  _IO('c',28)         /*<1>*/
232 
233 #endif /* !_SYS_CDIO_H_ */
234