/* * 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_ */