aboutsummaryrefslogtreecommitdiff
path: root/sys/sys/cdio.h
blob: c49dfed2b34b9c0e0b97ca92d0531806cb7ea17f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
/*
 * 16 Feb 93	Julian Elischer	(julian@dialix.oz.au)
 *
 *	$Id: cdio.h,v 1.5 1994/01/29 10:31:20 rgrimes Exp $
 */
/* Shared between kernel & process */
#ifndef _SYS_CDIO_H_
#define _SYS_CDIO_H_

union msf_lba {
	struct {
		unsigned char   unused;
		unsigned char   minute;
		unsigned char   second;
		unsigned char   frame;
	} msf;
	int     lba;
	u_char	addr[4];
};

struct cd_toc_entry {
	u_char	:8;
	u_char	control:4;
	u_char	addr_type:4;
	u_char  track;
	u_char	:8;
	union msf_lba  addr;
};

struct cd_sub_channel_header {
	u_char	:8;   
	u_char	audio_status; 
#define CD_AS_AUDIO_INVALID        0x00
#define CD_AS_PLAY_IN_PROGRESS     0x11
#define CD_AS_PLAY_PAUSED          0x12
#define CD_AS_PLAY_COMPLETED       0x13
#define CD_AS_PLAY_ERROR           0x14
#define CD_AS_NO_STATUS            0x15
	u_char	data_len[2];
};

struct cd_sub_channel_position_data {
	u_char	data_format;
	u_char	control:4;
	u_char	addr_type:4;
	u_char	track_number;
	u_char	index_number;
	union msf_lba  absaddr;
	union msf_lba  reladdr;
};

struct cd_sub_channel_media_catalog {
        u_char  data_format;
        u_char  :8;
        u_char  :8;
        u_char  :8;
        u_char  :7;
        u_char  mc_valid:1;
        u_char  mc_number[15]; 
};

struct cd_sub_channel_track_info {
        u_char  data_format;
        u_char  :8;
        u_char  track_number;
        u_char  :8;
        u_char  :7;
        u_char  ti_valid:1;   
        u_char  ti_number[15]; 
};

struct cd_sub_channel_info {
	struct cd_sub_channel_header header;
	union {
		struct cd_sub_channel_position_data position;
		struct cd_sub_channel_media_catalog media_catalog;
		struct cd_sub_channel_track_info track_info;	
	} what;
};

/***************************************************************\
* Ioctls for the CD drive					*
\***************************************************************/
struct ioc_play_track
{
	u_char	start_track;
	u_char	start_index;
	u_char	end_track;
	u_char	end_index;
};

#define	CDIOCPLAYTRACKS	_IOW('c',1,struct ioc_play_track)
struct ioc_play_blocks
{
	int	blk;
	int	len;
};
#define	CDIOCPLAYBLOCKS	_IOW('c',2,struct ioc_play_blocks)

struct ioc_read_subchannel {
	u_char address_format;
#define CD_LBA_FORMAT	1
#define CD_MSF_FORMAT	2
	u_char data_format;
#define CD_SUBQ_DATA		0
#define CD_CURRENT_POSITION	1
#define CD_MEDIA_CATALOG	2
#define CD_TRACK_INFO		3
	u_char track;
	int	data_len;
	struct  cd_sub_channel_info *data;
};
#define CDIOCREADSUBCHANNEL _IOWR('c', 3 , struct ioc_read_subchannel )


struct ioc_toc_header {
	u_short len;
	u_char  starting_track;
	u_char  ending_track;
};

#define CDIOREADTOCHEADER _IOR('c',4,struct ioc_toc_header)

struct ioc_read_toc_entry {
	u_char	address_format;
	u_char	starting_track;
	u_short	data_len;
	struct  cd_toc_entry *data;
};
#define CDIOREADTOCENTRYS _IOWR('c',5,struct ioc_read_toc_entry)

struct	ioc_patch
{
	u_char	patch[4];	/* one for each channel */
};
#define	CDIOCSETPATCH	_IOW('c',9,struct ioc_patch)
struct	ioc_vol
{
	u_char	vol[4];	/* one for each channel */
};
#define	CDIOCGETVOL	_IOR('c',10,struct ioc_vol)
#define	CDIOCSETVOL	_IOW('c',11,struct ioc_vol)
#define	CDIOCSETMONO	_IO('c',12)
#define	CDIOCSETSTERIO	_IO('c',13)
#define	CDIOCSETMUTE	_IO('c',14)
#define	CDIOCSETLEFT	_IO('c',15)
#define	CDIOCSETRIGHT	_IO('c',16)
#define	CDIOCSETDEBUG	_IO('c',17)
#define	CDIOCCLRDEBUG	_IO('c',18)
#define	CDIOCPAUSE	_IO('c',19)
#define	CDIOCRESUME	_IO('c',20)
#define	CDIOCRESET	_IO('c',21)
#define	CDIOCSTART	_IO('c',22)
#define	CDIOCSTOP	_IO('c',23)
#define	CDIOCEJECT	_IO('c',24)
#define	CDIOCALLOW	_IO('c',25)
#define	CDIOCPREVENT	_IO('c',26)

struct ioc_play_msf
{
	u_char	start_m;
	u_char	start_s;
	u_char	start_f;
	u_char	end_m;
	u_char	end_s;
	u_char	end_f;
};
#define	CDIOCPLAYMSF	_IOW('c',25,struct ioc_play_msf)

#endif /* _SYS_CDIO_H_ */