IMPORT openssh-9.8p1
[dragonfly.git] / sys / sys / cdio.h
blob4a0addd53e6940c3550d8198f69b5ba4eaef2cf2
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 */
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
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 */
26 #ifndef _SYS_CDIO_H_
27 #define _SYS_CDIO_H_
29 #ifndef _SYS_TYPES_H_
30 #include <sys/types.h>
31 #endif
32 #ifndef _SYS_IOCCOM_H_
33 #include <sys/ioccom.h>
34 #endif
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];
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;
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];
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;
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];
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];
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;
108 /***************************************************************\
109 * Ioctls for the CD drive *
110 \***************************************************************/
112 struct ioc_play_track
114 u_char start_track;
115 u_char start_index;
116 u_char end_track;
117 u_char end_index;
119 #define CDIOCPLAYTRACKS _IOW('c',1,struct ioc_play_track)
122 struct ioc_play_blocks
124 int blk;
125 int len;
127 #define CDIOCPLAYBLOCKS _IOW('c',2,struct ioc_play_blocks)
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;
143 #define CDIOCREADSUBCHANNEL _IOWR('c', 3 , struct ioc_read_subchannel )
146 struct ioc_toc_header {
147 u_short len;
148 u_char starting_track;
149 u_char ending_track;
151 #define CDIOREADTOCHEADER _IOR('c',4,struct ioc_toc_header)
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;
160 #define CDIOREADTOCENTRYS _IOWR('c',5,struct ioc_read_toc_entry)
163 struct ioc_read_toc_single_entry {
164 u_char address_format;
165 u_char track;
166 struct cd_toc_entry entry;
168 #define CDIOREADTOCENTRY _IOWR('c',6,struct ioc_read_toc_single_entry)
171 struct ioc_patch
173 u_char patch[4]; /* one for each channel */
175 #define CDIOCSETPATCH _IOW('c',9,struct ioc_patch)
178 struct ioc_vol
180 u_char vol[4]; /* one for each channel */
182 #define CDIOCGETVOL _IOR('c',10,struct ioc_vol)
184 #define CDIOCSETVOL _IOW('c',11,struct ioc_vol)
186 #define CDIOCSETMONO _IO('c',12)
188 #define CDIOCSETSTEREO _IO('c',13)
190 #define CDIOCSETMUTE _IO('c',14)
192 #define CDIOCSETLEFT _IO('c',15)
194 #define CDIOCSETRIGHT _IO('c',16)
196 #define CDIOCSETDEBUG _IO('c',17)
198 #define CDIOCCLRDEBUG _IO('c',18)
200 #define CDIOCPAUSE _IO('c',19)
202 #define CDIOCRESUME _IO('c',20)
204 #define CDIOCRESET _IO('c',21)
206 #define CDIOCSTART _IO('c',22)
208 #define CDIOCSTOP _IO('c',23)
210 #define CDIOCEJECT _IO('c',24)
213 struct ioc_play_msf
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;
222 #define CDIOCPLAYMSF _IOW('c',25,struct ioc_play_msf)
224 #define CDIOCALLOW _IO('c',26)
226 #define CDIOCPREVENT _IO('c',27)
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>*/
233 #endif /* !_SYS_CDIO_H_ */