xref: /titanic_54/usr/src/uts/common/sys/cdio.h (revision 7c478bd95313f5f23a4c958a745db2134aa03244)
1*7c478bd9Sstevel@tonic-gate /*
2*7c478bd9Sstevel@tonic-gate  * CDDL HEADER START
3*7c478bd9Sstevel@tonic-gate  *
4*7c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5*7c478bd9Sstevel@tonic-gate  * Common Development and Distribution License, Version 1.0 only
6*7c478bd9Sstevel@tonic-gate  * (the "License").  You may not use this file except in compliance
7*7c478bd9Sstevel@tonic-gate  * with the License.
8*7c478bd9Sstevel@tonic-gate  *
9*7c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*7c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
11*7c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
12*7c478bd9Sstevel@tonic-gate  * and limitations under the License.
13*7c478bd9Sstevel@tonic-gate  *
14*7c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
15*7c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*7c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
17*7c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
18*7c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
19*7c478bd9Sstevel@tonic-gate  *
20*7c478bd9Sstevel@tonic-gate  * CDDL HEADER END
21*7c478bd9Sstevel@tonic-gate  */
22*7c478bd9Sstevel@tonic-gate /*
23*7c478bd9Sstevel@tonic-gate  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
24*7c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
25*7c478bd9Sstevel@tonic-gate  */
26*7c478bd9Sstevel@tonic-gate 
27*7c478bd9Sstevel@tonic-gate #ifndef _SYS_CDIO_H
28*7c478bd9Sstevel@tonic-gate #define	_SYS_CDIO_H
29*7c478bd9Sstevel@tonic-gate 
30*7c478bd9Sstevel@tonic-gate #pragma ident	"%Z%%M%	%I%	%E% SMI"
31*7c478bd9Sstevel@tonic-gate 
32*7c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
33*7c478bd9Sstevel@tonic-gate extern "C" {
34*7c478bd9Sstevel@tonic-gate #endif
35*7c478bd9Sstevel@tonic-gate 
36*7c478bd9Sstevel@tonic-gate /*
37*7c478bd9Sstevel@tonic-gate  * CDROM io controls type definitions
38*7c478bd9Sstevel@tonic-gate  */
39*7c478bd9Sstevel@tonic-gate struct cdrom_msf {
40*7c478bd9Sstevel@tonic-gate 	unsigned char	cdmsf_min0;	/* starting minute */
41*7c478bd9Sstevel@tonic-gate 	unsigned char	cdmsf_sec0;	/* starting second */
42*7c478bd9Sstevel@tonic-gate 	unsigned char	cdmsf_frame0;	/* starting frame  */
43*7c478bd9Sstevel@tonic-gate 	unsigned char	cdmsf_min1;	/* ending minute   */
44*7c478bd9Sstevel@tonic-gate 	unsigned char	cdmsf_sec1;	/* ending second   */
45*7c478bd9Sstevel@tonic-gate 	unsigned char	cdmsf_frame1;	/* ending frame	   */
46*7c478bd9Sstevel@tonic-gate };
47*7c478bd9Sstevel@tonic-gate 
48*7c478bd9Sstevel@tonic-gate struct cdrom_ti {
49*7c478bd9Sstevel@tonic-gate 	unsigned char	cdti_trk0;	/* starting track */
50*7c478bd9Sstevel@tonic-gate 	unsigned char	cdti_ind0;	/* starting index */
51*7c478bd9Sstevel@tonic-gate 	unsigned char	cdti_trk1;	/* ending track */
52*7c478bd9Sstevel@tonic-gate 	unsigned char	cdti_ind1;	/* ending index */
53*7c478bd9Sstevel@tonic-gate };
54*7c478bd9Sstevel@tonic-gate 
55*7c478bd9Sstevel@tonic-gate struct cdrom_tochdr {
56*7c478bd9Sstevel@tonic-gate 	unsigned char	cdth_trk0;	/* starting track */
57*7c478bd9Sstevel@tonic-gate 	unsigned char	cdth_trk1;	/* ending track */
58*7c478bd9Sstevel@tonic-gate };
59*7c478bd9Sstevel@tonic-gate 
60*7c478bd9Sstevel@tonic-gate struct cdrom_tocentry {
61*7c478bd9Sstevel@tonic-gate 	unsigned char	cdte_track;
62*7c478bd9Sstevel@tonic-gate 	unsigned	cdte_adr	:4;
63*7c478bd9Sstevel@tonic-gate 	unsigned	cdte_ctrl	:4;
64*7c478bd9Sstevel@tonic-gate 	unsigned char	cdte_format;
65*7c478bd9Sstevel@tonic-gate 	union {
66*7c478bd9Sstevel@tonic-gate 		struct {
67*7c478bd9Sstevel@tonic-gate 			unsigned char	minute;
68*7c478bd9Sstevel@tonic-gate 			unsigned char	second;
69*7c478bd9Sstevel@tonic-gate 			unsigned char	frame;
70*7c478bd9Sstevel@tonic-gate 		} msf;
71*7c478bd9Sstevel@tonic-gate 		int	lba;
72*7c478bd9Sstevel@tonic-gate 	} cdte_addr;
73*7c478bd9Sstevel@tonic-gate 	unsigned char	cdte_datamode;
74*7c478bd9Sstevel@tonic-gate };
75*7c478bd9Sstevel@tonic-gate 
76*7c478bd9Sstevel@tonic-gate /*
77*7c478bd9Sstevel@tonic-gate  * CDROM address format definition, for use with struct cdrom_tocentry
78*7c478bd9Sstevel@tonic-gate  */
79*7c478bd9Sstevel@tonic-gate #define	CDROM_LBA	0x01
80*7c478bd9Sstevel@tonic-gate #define	CDROM_MSF	0x02
81*7c478bd9Sstevel@tonic-gate 
82*7c478bd9Sstevel@tonic-gate /*
83*7c478bd9Sstevel@tonic-gate  * Bitmask for CD-ROM data track in the cdte_ctrl field
84*7c478bd9Sstevel@tonic-gate  * A track is either data or audio.
85*7c478bd9Sstevel@tonic-gate  */
86*7c478bd9Sstevel@tonic-gate #define	CDROM_DATA_TRACK	0x04
87*7c478bd9Sstevel@tonic-gate 
88*7c478bd9Sstevel@tonic-gate /*
89*7c478bd9Sstevel@tonic-gate  * For CDROMREADTOCENTRY, set the cdte_track to CDROM_LEADOUT to get
90*7c478bd9Sstevel@tonic-gate  * the information for the leadout track.
91*7c478bd9Sstevel@tonic-gate  */
92*7c478bd9Sstevel@tonic-gate #define	CDROM_LEADOUT	0xAA
93*7c478bd9Sstevel@tonic-gate 
94*7c478bd9Sstevel@tonic-gate struct cdrom_subchnl {
95*7c478bd9Sstevel@tonic-gate 	unsigned char	cdsc_format;
96*7c478bd9Sstevel@tonic-gate 	unsigned char	cdsc_audiostatus;
97*7c478bd9Sstevel@tonic-gate 	unsigned	cdsc_adr:	4;
98*7c478bd9Sstevel@tonic-gate 	unsigned	cdsc_ctrl:	4;
99*7c478bd9Sstevel@tonic-gate 	unsigned char	cdsc_trk;
100*7c478bd9Sstevel@tonic-gate 	unsigned char	cdsc_ind;
101*7c478bd9Sstevel@tonic-gate 	union {
102*7c478bd9Sstevel@tonic-gate 		struct {
103*7c478bd9Sstevel@tonic-gate 			unsigned char	minute;
104*7c478bd9Sstevel@tonic-gate 			unsigned char	second;
105*7c478bd9Sstevel@tonic-gate 			unsigned char	frame;
106*7c478bd9Sstevel@tonic-gate 		} msf;
107*7c478bd9Sstevel@tonic-gate 		int	lba;
108*7c478bd9Sstevel@tonic-gate 	} cdsc_absaddr;
109*7c478bd9Sstevel@tonic-gate 	union {
110*7c478bd9Sstevel@tonic-gate 		struct {
111*7c478bd9Sstevel@tonic-gate 			unsigned char	minute;
112*7c478bd9Sstevel@tonic-gate 			unsigned char	second;
113*7c478bd9Sstevel@tonic-gate 			unsigned char	frame;
114*7c478bd9Sstevel@tonic-gate 		} msf;
115*7c478bd9Sstevel@tonic-gate 		int	lba;
116*7c478bd9Sstevel@tonic-gate 	} cdsc_reladdr;
117*7c478bd9Sstevel@tonic-gate };
118*7c478bd9Sstevel@tonic-gate 
119*7c478bd9Sstevel@tonic-gate /*
120*7c478bd9Sstevel@tonic-gate  * Definition for audio status returned from Read Sub-channel
121*7c478bd9Sstevel@tonic-gate  */
122*7c478bd9Sstevel@tonic-gate #define	CDROM_AUDIO_INVALID	0x00	/* audio status not supported */
123*7c478bd9Sstevel@tonic-gate #define	CDROM_AUDIO_PLAY	0x11	/* audio play operation in progress */
124*7c478bd9Sstevel@tonic-gate #define	CDROM_AUDIO_PAUSED	0x12	/* audio play operation paused */
125*7c478bd9Sstevel@tonic-gate #define	CDROM_AUDIO_COMPLETED	0x13	/* audio play successfully completed */
126*7c478bd9Sstevel@tonic-gate #define	CDROM_AUDIO_ERROR	0x14	/* audio play stopped due to error */
127*7c478bd9Sstevel@tonic-gate #define	CDROM_AUDIO_NO_STATUS	0x15	/* no current audio status to return */
128*7c478bd9Sstevel@tonic-gate 
129*7c478bd9Sstevel@tonic-gate /*
130*7c478bd9Sstevel@tonic-gate  * definition of audio volume control structure
131*7c478bd9Sstevel@tonic-gate  */
132*7c478bd9Sstevel@tonic-gate struct cdrom_volctrl {
133*7c478bd9Sstevel@tonic-gate 	unsigned char	channel0;
134*7c478bd9Sstevel@tonic-gate 	unsigned char	channel1;
135*7c478bd9Sstevel@tonic-gate 	unsigned char	channel2;
136*7c478bd9Sstevel@tonic-gate 	unsigned char	channel3;
137*7c478bd9Sstevel@tonic-gate };
138*7c478bd9Sstevel@tonic-gate 
139*7c478bd9Sstevel@tonic-gate struct cdrom_read {
140*7c478bd9Sstevel@tonic-gate 	int		cdread_lba;
141*7c478bd9Sstevel@tonic-gate 	caddr_t		cdread_bufaddr;
142*7c478bd9Sstevel@tonic-gate 	int		cdread_buflen;
143*7c478bd9Sstevel@tonic-gate };
144*7c478bd9Sstevel@tonic-gate 
145*7c478bd9Sstevel@tonic-gate #if defined(_SYSCALL32)
146*7c478bd9Sstevel@tonic-gate 
147*7c478bd9Sstevel@tonic-gate struct cdrom_read32 {
148*7c478bd9Sstevel@tonic-gate 	int		cdread_lba;
149*7c478bd9Sstevel@tonic-gate 	caddr32_t	cdread_bufaddr;
150*7c478bd9Sstevel@tonic-gate 	int		cdread_buflen;
151*7c478bd9Sstevel@tonic-gate };
152*7c478bd9Sstevel@tonic-gate 
153*7c478bd9Sstevel@tonic-gate #define	cdrom_read32tocdrom_read(cdrd32, cdrd)				\
154*7c478bd9Sstevel@tonic-gate 	cdrd->cdread_lba	= cdrd32->cdread_lba;			\
155*7c478bd9Sstevel@tonic-gate 	cdrd->cdread_bufaddr	= (caddr_t)(uintptr_t)cdrd32->cdread_bufaddr; \
156*7c478bd9Sstevel@tonic-gate 	cdrd->cdread_buflen	= cdrd32->cdread_buflen
157*7c478bd9Sstevel@tonic-gate 
158*7c478bd9Sstevel@tonic-gate #define	cdrom_readtocdrom_read32(cdrd, cdrd32)				\
159*7c478bd9Sstevel@tonic-gate 	cdrd32->cdread_lba	= cdrd->cdread_lba;			\
160*7c478bd9Sstevel@tonic-gate 	cdrd32->cdread_bufaddr	= (caddr32_t)(uintptr_t)cdrd->cdread_bufaddr; \
161*7c478bd9Sstevel@tonic-gate 	cdrd32->cdread_buflen	= cdrd->cdread_buflen
162*7c478bd9Sstevel@tonic-gate 
163*7c478bd9Sstevel@tonic-gate #endif	/* _SYSCALL32 */
164*7c478bd9Sstevel@tonic-gate 
165*7c478bd9Sstevel@tonic-gate /*
166*7c478bd9Sstevel@tonic-gate  * Definition of CD/DA structure
167*7c478bd9Sstevel@tonic-gate  */
168*7c478bd9Sstevel@tonic-gate struct cdrom_cdda {
169*7c478bd9Sstevel@tonic-gate 	unsigned int	cdda_addr;
170*7c478bd9Sstevel@tonic-gate 	unsigned int	cdda_length;
171*7c478bd9Sstevel@tonic-gate 	caddr_t		cdda_data;
172*7c478bd9Sstevel@tonic-gate 	unsigned char	cdda_subcode;
173*7c478bd9Sstevel@tonic-gate };
174*7c478bd9Sstevel@tonic-gate 
175*7c478bd9Sstevel@tonic-gate #if defined(_SYSCALL32)
176*7c478bd9Sstevel@tonic-gate struct cdrom_cdda32 {
177*7c478bd9Sstevel@tonic-gate 	unsigned int	cdda_addr;
178*7c478bd9Sstevel@tonic-gate 	unsigned int	cdda_length;
179*7c478bd9Sstevel@tonic-gate 	caddr32_t	cdda_data;
180*7c478bd9Sstevel@tonic-gate 	unsigned char	cdda_subcode;
181*7c478bd9Sstevel@tonic-gate };
182*7c478bd9Sstevel@tonic-gate 
183*7c478bd9Sstevel@tonic-gate #define	cdrom_cdda32tocdrom_cdda(cdda32, cdda)			\
184*7c478bd9Sstevel@tonic-gate 	cdda->cdda_addr		= cdda32->cdda_addr;		\
185*7c478bd9Sstevel@tonic-gate 	cdda->cdda_length	= cdda32->cdda_length;		\
186*7c478bd9Sstevel@tonic-gate 	cdda->cdda_data		= (caddr_t)(uintptr_t)cdda32->cdda_data; \
187*7c478bd9Sstevel@tonic-gate 	cdda->cdda_subcode	= cdda32->cdda_subcode
188*7c478bd9Sstevel@tonic-gate 
189*7c478bd9Sstevel@tonic-gate #define	cdrom_cddatocdrom_cdda32(cdda, cdda32)			\
190*7c478bd9Sstevel@tonic-gate 	cdda32->cdda_addr	= cdda->cdda_addr;		\
191*7c478bd9Sstevel@tonic-gate 	cdda32->cdda_length	= cdda->cdda_length;		\
192*7c478bd9Sstevel@tonic-gate 	cdda32->cdda_data	= (caddr32_t)(uintptr_t)cdda->cdda_data; \
193*7c478bd9Sstevel@tonic-gate 	cdda32->cdda_subcode	= cdda->cdda_subcode
194*7c478bd9Sstevel@tonic-gate 
195*7c478bd9Sstevel@tonic-gate #endif	/* _SYSCALL32 */
196*7c478bd9Sstevel@tonic-gate 
197*7c478bd9Sstevel@tonic-gate /*
198*7c478bd9Sstevel@tonic-gate  * Definitions for cdda_subcode field
199*7c478bd9Sstevel@tonic-gate  */
200*7c478bd9Sstevel@tonic-gate #define	CDROM_DA_NO_SUBCODE	0x00	/* CD/DA data with no subcode */
201*7c478bd9Sstevel@tonic-gate #define	CDROM_DA_SUBQ		0x01	/* CD/DA data with sub Q code */
202*7c478bd9Sstevel@tonic-gate #define	CDROM_DA_ALL_SUBCODE	0x02	/* CD/DA data with all subcode */
203*7c478bd9Sstevel@tonic-gate #define	CDROM_DA_SUBCODE_ONLY	0x03	/* All subcode only */
204*7c478bd9Sstevel@tonic-gate 
205*7c478bd9Sstevel@tonic-gate /*
206*7c478bd9Sstevel@tonic-gate  * Definition of CD/XA structure
207*7c478bd9Sstevel@tonic-gate  */
208*7c478bd9Sstevel@tonic-gate struct cdrom_cdxa {
209*7c478bd9Sstevel@tonic-gate 	unsigned int	cdxa_addr;
210*7c478bd9Sstevel@tonic-gate 	unsigned int	cdxa_length;
211*7c478bd9Sstevel@tonic-gate 	caddr_t		cdxa_data;
212*7c478bd9Sstevel@tonic-gate 	unsigned char	cdxa_format;
213*7c478bd9Sstevel@tonic-gate };
214*7c478bd9Sstevel@tonic-gate 
215*7c478bd9Sstevel@tonic-gate #if defined(_SYSCALL32)
216*7c478bd9Sstevel@tonic-gate 
217*7c478bd9Sstevel@tonic-gate struct cdrom_cdxa32 {
218*7c478bd9Sstevel@tonic-gate 	unsigned int	cdxa_addr;
219*7c478bd9Sstevel@tonic-gate 	unsigned int	cdxa_length;
220*7c478bd9Sstevel@tonic-gate 	caddr32_t	cdxa_data;
221*7c478bd9Sstevel@tonic-gate 	unsigned char	cdxa_format;
222*7c478bd9Sstevel@tonic-gate };
223*7c478bd9Sstevel@tonic-gate 
224*7c478bd9Sstevel@tonic-gate #define	cdrom_cdxa32tocdrom_cdxa(cdxa32, cdxa)				\
225*7c478bd9Sstevel@tonic-gate 	cdxa->cdxa_addr		= cdxa32->cdxa_addr;			\
226*7c478bd9Sstevel@tonic-gate 	cdxa->cdxa_length	= cdxa32->cdxa_length;			\
227*7c478bd9Sstevel@tonic-gate 	cdxa->cdxa_data		= (caddr_t)(uintptr_t)cdxa32->cdxa_data; \
228*7c478bd9Sstevel@tonic-gate 	cdxa->cdxa_format	= cdxa32->cdxa_format
229*7c478bd9Sstevel@tonic-gate 
230*7c478bd9Sstevel@tonic-gate #define	cdrom_cdxatocdrom_cdxa32(cdxa, cdxa32)				\
231*7c478bd9Sstevel@tonic-gate 	cdxa32->cdxa_addr	= cdxa->cdxa_addr;			\
232*7c478bd9Sstevel@tonic-gate 	cdxa32->cdxa_length	= cdxa->cdxa_length;			\
233*7c478bd9Sstevel@tonic-gate 	cdxa32->cdxa_data	= (caddr32_t)(uintptr_t)cdxa->cdxa_data; \
234*7c478bd9Sstevel@tonic-gate 	cdxa32->cdxa_format	= cdxa->cdxa_format
235*7c478bd9Sstevel@tonic-gate 
236*7c478bd9Sstevel@tonic-gate #endif	/* _SYSCALL32 */
237*7c478bd9Sstevel@tonic-gate 
238*7c478bd9Sstevel@tonic-gate /*
239*7c478bd9Sstevel@tonic-gate  * Definitions for cdxa_format field
240*7c478bd9Sstevel@tonic-gate  */
241*7c478bd9Sstevel@tonic-gate #define	CDROM_XA_DATA		0x00	/* CD/XA data only */
242*7c478bd9Sstevel@tonic-gate #define	CDROM_XA_SECTOR_DATA	0x01	/* CD/XA all sector data */
243*7c478bd9Sstevel@tonic-gate #define	CDROM_XA_DATA_W_ERROR	0x02	/* CD/XA data with error flags data */
244*7c478bd9Sstevel@tonic-gate 
245*7c478bd9Sstevel@tonic-gate /*
246*7c478bd9Sstevel@tonic-gate  * Definition of subcode structure
247*7c478bd9Sstevel@tonic-gate  */
248*7c478bd9Sstevel@tonic-gate struct cdrom_subcode {
249*7c478bd9Sstevel@tonic-gate 	unsigned int	cdsc_length;
250*7c478bd9Sstevel@tonic-gate 	caddr_t		cdsc_addr;
251*7c478bd9Sstevel@tonic-gate };
252*7c478bd9Sstevel@tonic-gate 
253*7c478bd9Sstevel@tonic-gate #if defined(_SYSCALL32)
254*7c478bd9Sstevel@tonic-gate 
255*7c478bd9Sstevel@tonic-gate struct cdrom_subcode32 {
256*7c478bd9Sstevel@tonic-gate 	unsigned int	cdsc_length;
257*7c478bd9Sstevel@tonic-gate 	caddr32_t	cdsc_addr;
258*7c478bd9Sstevel@tonic-gate };
259*7c478bd9Sstevel@tonic-gate 
260*7c478bd9Sstevel@tonic-gate #define	cdrom_subcode32tocdrom_subcode(cdsc32, cdsc)			\
261*7c478bd9Sstevel@tonic-gate 	cdsc->cdsc_length	= cdsc32->cdsc_length;			\
262*7c478bd9Sstevel@tonic-gate 	cdsc->cdsc_addr		= (caddr_t)(uintptr_t)cdsc32->cdsc_addr
263*7c478bd9Sstevel@tonic-gate 
264*7c478bd9Sstevel@tonic-gate #define	cdrom_subcodetocdrom_subcode32(cdsc, cdsc32)			\
265*7c478bd9Sstevel@tonic-gate 	cdsc32->cdsc_length	= cdsc->cdsc_length;			\
266*7c478bd9Sstevel@tonic-gate 	cdsc32->cdsc_addr	= (caddr32_t)(uintptr_t)cdsc->cdsc_addr
267*7c478bd9Sstevel@tonic-gate 
268*7c478bd9Sstevel@tonic-gate #endif	/* _SYSCALL32 */
269*7c478bd9Sstevel@tonic-gate 
270*7c478bd9Sstevel@tonic-gate /*
271*7c478bd9Sstevel@tonic-gate  * Definitions for block size supported
272*7c478bd9Sstevel@tonic-gate  */
273*7c478bd9Sstevel@tonic-gate #define	CDROM_BLK_512		512
274*7c478bd9Sstevel@tonic-gate #define	CDROM_BLK_1024		1024
275*7c478bd9Sstevel@tonic-gate #define	CDROM_BLK_2048		2048
276*7c478bd9Sstevel@tonic-gate #define	CDROM_BLK_2056		2056
277*7c478bd9Sstevel@tonic-gate #define	CDROM_BLK_2324		2324
278*7c478bd9Sstevel@tonic-gate #define	CDROM_BLK_2336		2336
279*7c478bd9Sstevel@tonic-gate #define	CDROM_BLK_2340		2340
280*7c478bd9Sstevel@tonic-gate #define	CDROM_BLK_2352		2352
281*7c478bd9Sstevel@tonic-gate #define	CDROM_BLK_2368		2368
282*7c478bd9Sstevel@tonic-gate #define	CDROM_BLK_2448		2448
283*7c478bd9Sstevel@tonic-gate #define	CDROM_BLK_2646		2646
284*7c478bd9Sstevel@tonic-gate #define	CDROM_BLK_2647		2647
285*7c478bd9Sstevel@tonic-gate #define	CDROM_BLK_SUBCODE	96
286*7c478bd9Sstevel@tonic-gate 
287*7c478bd9Sstevel@tonic-gate /*
288*7c478bd9Sstevel@tonic-gate  * Definitions for drive speed supported
289*7c478bd9Sstevel@tonic-gate  */
290*7c478bd9Sstevel@tonic-gate #define	CDROM_NORMAL_SPEED	0x00
291*7c478bd9Sstevel@tonic-gate #define	CDROM_DOUBLE_SPEED	0x01
292*7c478bd9Sstevel@tonic-gate #define	CDROM_QUAD_SPEED	0x03
293*7c478bd9Sstevel@tonic-gate #define	CDROM_TWELVE_SPEED	0x0C
294*7c478bd9Sstevel@tonic-gate #define	CDROM_MAXIMUM_SPEED	0xff
295*7c478bd9Sstevel@tonic-gate 
296*7c478bd9Sstevel@tonic-gate /*
297*7c478bd9Sstevel@tonic-gate  * CDROM io control commands
298*7c478bd9Sstevel@tonic-gate  */
299*7c478bd9Sstevel@tonic-gate #define	CDIOC			(0x04 << 8)
300*7c478bd9Sstevel@tonic-gate #define	CDROMPAUSE		(CDIOC|151)	/* Pause Audio Operation */
301*7c478bd9Sstevel@tonic-gate #define	CDROMRESUME		(CDIOC|152) /* Resume paused Audio Operation */
302*7c478bd9Sstevel@tonic-gate #define	CDROMPLAYMSF		(CDIOC|153)	/* Play Audio MSF */
303*7c478bd9Sstevel@tonic-gate #define	CDROMPLAYTRKIND		(CDIOC|154)	/* Play Audio Track/index */
304*7c478bd9Sstevel@tonic-gate #define	CDROMREADTOCHDR		(CDIOC|155)	/* Read TOC header */
305*7c478bd9Sstevel@tonic-gate #define	CDROMREADTOCENTRY	(CDIOC|156)	/* Read a TOC entry */
306*7c478bd9Sstevel@tonic-gate #define	CDROMSTOP		(CDIOC|157)	/* Stop the cdrom drive */
307*7c478bd9Sstevel@tonic-gate #define	CDROMSTART		(CDIOC|158)	/* Start the cdrom drive */
308*7c478bd9Sstevel@tonic-gate #define	CDROMEJECT		(CDIOC|159)	/* Ejects the cdrom caddy */
309*7c478bd9Sstevel@tonic-gate #define	CDROMVOLCTRL		(CDIOC|160)	/* control output volume */
310*7c478bd9Sstevel@tonic-gate #define	CDROMSUBCHNL		(CDIOC|161)	/* read the subchannel data */
311*7c478bd9Sstevel@tonic-gate #define	CDROMREADMODE2		(CDIOC|162)	/* read CDROM mode 2 data */
312*7c478bd9Sstevel@tonic-gate #define	CDROMREADMODE1		(CDIOC|163)	/* read CDROM mode 1 data */
313*7c478bd9Sstevel@tonic-gate 
314*7c478bd9Sstevel@tonic-gate #define	CDROMREADOFFSET		(CDIOC|164)	/* read multi-session offset */
315*7c478bd9Sstevel@tonic-gate 
316*7c478bd9Sstevel@tonic-gate #define	CDROMGBLKMODE		(CDIOC|165)	/* get current block mode */
317*7c478bd9Sstevel@tonic-gate #define	CDROMSBLKMODE		(CDIOC|166)	/* set current block mode */
318*7c478bd9Sstevel@tonic-gate #define	CDROMCDDA		(CDIOC|167)	/* read CD/DA data */
319*7c478bd9Sstevel@tonic-gate #define	CDROMCDXA		(CDIOC|168)	/* read CD/XA data */
320*7c478bd9Sstevel@tonic-gate #define	CDROMSUBCODE		(CDIOC|169)	/* read subcode */
321*7c478bd9Sstevel@tonic-gate #define	CDROMGDRVSPEED		(CDIOC|170)	/* get current drive speed */
322*7c478bd9Sstevel@tonic-gate #define	CDROMSDRVSPEED		(CDIOC|171)	/* set current drive speed */
323*7c478bd9Sstevel@tonic-gate 
324*7c478bd9Sstevel@tonic-gate #define	CDROMCLOSETRAY		(CDIOC|172)	/* close cd tray,load media */
325*7c478bd9Sstevel@tonic-gate 
326*7c478bd9Sstevel@tonic-gate /*
327*7c478bd9Sstevel@tonic-gate  * Additional commands for CD-ROM
328*7c478bd9Sstevel@tonic-gate  */
329*7c478bd9Sstevel@tonic-gate /*
330*7c478bd9Sstevel@tonic-gate  *
331*7c478bd9Sstevel@tonic-gate  *	Group 2 Commands
332*7c478bd9Sstevel@tonic-gate  *
333*7c478bd9Sstevel@tonic-gate  */
334*7c478bd9Sstevel@tonic-gate 
335*7c478bd9Sstevel@tonic-gate #define	SCMD_READ_TOC		0x43		/* optional SCSI command */
336*7c478bd9Sstevel@tonic-gate #define	SCMD_PLAYAUDIO_MSF	0x47		/* optional SCSI command */
337*7c478bd9Sstevel@tonic-gate #define	SCMD_PLAYAUDIO_TI	0x48		/* optional SCSI command */
338*7c478bd9Sstevel@tonic-gate #define	SCMD_PAUSE_RESUME	0x4B		/* optional SCSI command */
339*7c478bd9Sstevel@tonic-gate #define	SCMD_READ_SUBCHANNEL	0x42		/* optional SCSI command */
340*7c478bd9Sstevel@tonic-gate #define	SCMD_PLAYAUDIO10	0x45		/* optional SCSI command */
341*7c478bd9Sstevel@tonic-gate #define	SCMD_PLAYTRACK_REL10	0x49		/* optional SCSI command */
342*7c478bd9Sstevel@tonic-gate #define	SCMD_READ_HEADER	0x44		/* optional SCSI command */
343*7c478bd9Sstevel@tonic-gate 
344*7c478bd9Sstevel@tonic-gate /*
345*7c478bd9Sstevel@tonic-gate  *
346*7c478bd9Sstevel@tonic-gate  *	Group 5 Commands
347*7c478bd9Sstevel@tonic-gate  *
348*7c478bd9Sstevel@tonic-gate  */
349*7c478bd9Sstevel@tonic-gate #define	SCMD_PLAYAUDIO12	0xA5		/* optional SCSI command */
350*7c478bd9Sstevel@tonic-gate #define	SCMD_PLAYTRACK_REL12	0xA9		/* optional SCSI command */
351*7c478bd9Sstevel@tonic-gate #define	SCMD_READ_CD		0xBE	/* Universal way of accessing CD data */
352*7c478bd9Sstevel@tonic-gate 
353*7c478bd9Sstevel@tonic-gate /*
354*7c478bd9Sstevel@tonic-gate  * These defines are for SCMD_READ_CD command.
355*7c478bd9Sstevel@tonic-gate  * See Expected Sector Type Field Definition (SCSI MMC-2 Spec section 6.1.15)
356*7c478bd9Sstevel@tonic-gate  * This information is used to figure out which block size to use.
357*7c478bd9Sstevel@tonic-gate  */
358*7c478bd9Sstevel@tonic-gate #define	READ_CD_EST_ALLTYPE	0x0	/* All Types */
359*7c478bd9Sstevel@tonic-gate #define	READ_CD_EST_CDDA	0x1	/* Only CD-DA */
360*7c478bd9Sstevel@tonic-gate #define	READ_CD_EST_MODE1	0x2	/* Only Yellow Book 2048 bytes */
361*7c478bd9Sstevel@tonic-gate #define	READ_CD_EST_MODE2	0x3	/* Only Yellow Book 2336 byte sectors */
362*7c478bd9Sstevel@tonic-gate #define	READ_CD_EST_MODE2FORM1	0x4	/* Only sectors with 2048 bytes */
363*7c478bd9Sstevel@tonic-gate #define	READ_CD_EST_MODE2FORM2	0x5	/* Only sectors with 2324 bytes */
364*7c478bd9Sstevel@tonic-gate #define	READ_CD_EST_RSVD1	0x6	/* reserved */
365*7c478bd9Sstevel@tonic-gate #define	READ_CD_EST_RSVD2	0x7	/* reserved */
366*7c478bd9Sstevel@tonic-gate 
367*7c478bd9Sstevel@tonic-gate 
368*7c478bd9Sstevel@tonic-gate /*
369*7c478bd9Sstevel@tonic-gate  *
370*7c478bd9Sstevel@tonic-gate  *	Group 6 Commands
371*7c478bd9Sstevel@tonic-gate  *
372*7c478bd9Sstevel@tonic-gate  */
373*7c478bd9Sstevel@tonic-gate 
374*7c478bd9Sstevel@tonic-gate #define	SCMD_CD_PLAYBACK_CONTROL 0xC9	/* SONY unique SCSI command */
375*7c478bd9Sstevel@tonic-gate #define	SCMD_CD_PLAYBACK_STATUS	0xC4	/* SONY unique SCSI command */
376*7c478bd9Sstevel@tonic-gate #define	SCMD_READ_CDDA		0xD8	/* Vendor unique SCSI command */
377*7c478bd9Sstevel@tonic-gate #define	SCMD_READ_CDXA		0xDB	/* Vendor unique SCSI command */
378*7c478bd9Sstevel@tonic-gate #define	SCMD_READ_ALL_SUBCODES	0xDF	/* Vendor unique SCSI command */
379*7c478bd9Sstevel@tonic-gate 
380*7c478bd9Sstevel@tonic-gate #define	CDROM_MODE2_SIZE	2336
381*7c478bd9Sstevel@tonic-gate 
382*7c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
383*7c478bd9Sstevel@tonic-gate }
384*7c478bd9Sstevel@tonic-gate #endif
385*7c478bd9Sstevel@tonic-gate 
386*7c478bd9Sstevel@tonic-gate #endif	/* _SYS_CDIO_H */
387