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