cdio.h revision 346
1/*
2 * 16 Feb 93	Julian Elischer	(julian@dialix.oz.au)
3 */
4/* Shared between kernel & process */
5#ifndef SYS_CDIO_H
6#define SYS_CDIO_H
7
8struct cd_toc_entry {
9	u_char	:8;
10	u_char	control:4;
11	u_char	addr_type:4;
12	u_char  track;
13	u_char	:8;
14	u_char	addr[4];
15};
16
17struct cd_sub_channel_header {
18	u_char	:8;
19	u_char	audio_status;
20#define CD_AS_AUDIO_INVALID        0x00
21#define CD_AS_PLAY_IN_PROGRESS     0x11
22#define CD_AS_PLAY_PAUSED          0x12
23#define CD_AS_PLAY_COMPLETED       0x13
24#define CD_AS_PLAY_ERROR           0x14
25#define CD_AS_NO_STATUS            0x15
26	u_char	data_len[2];
27};
28
29struct cd_sub_channel_position_data {
30	u_char	data_format;
31	u_char	control:4;
32	u_char	addr_type:4;
33	u_char	track_number;
34	u_char	index_number;
35	u_char	absaddr[4];
36	u_char	reladdr[4];
37};
38
39struct cd_sub_channel_media_catalog {
40        u_char  data_format;
41        u_char  :8;
42        u_char  :8;
43        u_char  :8;
44        u_char  :7;
45        u_char  mc_valid:1;
46        u_char  mc_number[15];
47};
48
49struct cd_sub_channel_track_info {
50        u_char  data_format;
51        u_char  :8;
52        u_char  track_number;
53        u_char  :8;
54        u_char  :7;
55        u_char  ti_valid:1;
56        u_char  ti_number[15];
57};
58
59struct cd_sub_channel_info {
60	struct cd_sub_channel_header header;
61	union {
62		struct cd_sub_channel_position_data position;
63		struct cd_sub_channel_media_catalog media_catalog;
64		struct cd_sub_channel_track_info track_info;
65	} what;
66};
67
68/***************************************************************\
69* Ioctls for the CD drive					*
70\***************************************************************/
71struct ioc_play_track
72{
73	u_char	start_track;
74	u_char	start_index;
75	u_char	end_track;
76	u_char	end_index;
77};
78
79#define	CDIOCPLAYTRACKS	_IOW('c',1,struct ioc_play_track)
80struct ioc_play_blocks
81{
82	int	blk;
83	int	len;
84};
85#define	CDIOCPLAYBLOCKS	_IOW('c',2,struct ioc_play_blocks)
86
87struct ioc_read_subchannel {
88	u_char address_format;
89#define CD_LBA_FORMAT	1
90#define CD_MSF_FORMAT	2
91	u_char data_format;
92#define CD_SUBQ_DATA		0
93#define CD_CURRENT_POSITION	1
94#define CD_MEDIA_CATALOG	2
95#define CD_TRACK_INFO		3
96	u_char track;
97	int	data_len;
98	struct  cd_sub_channel_info *data;
99};
100#define CDIOCREADSUBCHANNEL _IOWR('c', 3 , struct ioc_read_subchannel )
101
102
103struct ioc_toc_header {
104	u_short len;
105	u_char  starting_track;
106	u_char  ending_track;
107};
108
109#define CDIOREADTOCHEADER _IOR('c',4,struct ioc_toc_header)
110
111struct ioc_read_toc_entry {
112	u_char	address_format;
113	u_char	starting_track;
114	u_short	data_len;
115	struct  cd_toc_entry *data;
116};
117#define CDIOREADTOCENTRYS _IOWR('c',5,struct ioc_read_toc_entry)
118
119struct	ioc_patch
120{
121	u_char	patch[4];	/* one for each channel */
122};
123#define	CDIOCSETPATCH	_IOW('c',9,struct ioc_patch)
124struct	ioc_vol
125{
126	u_char	vol[4];	/* one for each channel */
127};
128#define	CDIOCGETVOL	_IOR('c',10,struct ioc_vol)
129#define	CDIOCSETVOL	_IOW('c',11,struct ioc_vol)
130#define	CDIOCSETMONO	_IO('c',12)
131#define	CDIOCSETSTERIO	_IO('c',13)
132#define	CDIOCSETMUTE	_IO('c',14)
133#define	CDIOCSETLEFT	_IO('c',15)
134#define	CDIOCSETRIGHT	_IO('c',16)
135#define	CDIOCSETDEBUG	_IO('c',17)
136#define	CDIOCCLRDEBUG	_IO('c',18)
137#define	CDIOCPAUSE	_IO('c',19)
138#define	CDIOCRESUME	_IO('c',20)
139#define	CDIOCRESET	_IO('c',21)
140#define	CDIOCSTART	_IO('c',22)
141#define	CDIOCSTOP	_IO('c',23)
142#define	CDIOCEJECT	_IO('c',24)
143
144struct ioc_play_msf
145{
146	u_char	start_m;
147	u_char	start_s;
148	u_char	start_f;
149	u_char	end_m;
150	u_char	end_s;
151	u_char	end_f;
152};
153#define	CDIOCPLAYMSF	_IOW('c',25,struct ioc_play_msf)
154
155
156
157#endif /* SYS_CDIO_H */
158