#ifndef _SYS_CDIO_H_
#define _SYS_CDIO_H_
#ifndef _KERNEL
#include <sys/types.h>
#endif
#include <sys/ioccom.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 {
#if BYTE_ORDER == LITTLE_ENDIAN
u_int :8;
u_int control:4;
u_int addr_type:4;
#else
u_int :8;
u_int addr_type:4;
u_int control:4;
#endif
u_char track;
u_int :8;
union msf_lba addr;
};
struct cd_sub_channel_header {
u_int :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_int control:4;
u_int 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_int :8;
u_int :8;
u_int :8;
u_int :7;
u_int mc_valid:1;
u_char mc_number[15];
};
struct cd_sub_channel_track_info {
u_char data_format;
u_int :8;
u_char track_number;
u_int :8;
u_int :7;
u_int 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;
};
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_read_toc_single_entry {
u_char address_format;
u_char track;
struct cd_toc_entry entry;
};
#define CDIOREADTOCENTRY _IOWR('c',6,struct ioc_read_toc_single_entry)
struct ioc_patch {
u_char patch[4];
};
#define CDIOCSETPATCH _IOW('c',9,struct ioc_patch)
struct ioc_vol {
u_char vol[4];
};
#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 CDIOCSETSTEREO _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)
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)
#define CDIOCALLOW _IO('c',26)
#define CDIOCPREVENT _IO('c',27)
#define CDIOCCLOSE _IO('c',28)
struct ioc_pitch {
short speed;
};
#define CDIOCPITCH _IOW('c',29,struct ioc_pitch)
struct ioc_capability {
u_long play_function;
#define CDDOPLAYTRK 0x00000001
#define CDDOPLAYMSF 0x00000002
#define CDDOPLAYBLOCKS 0x00000004
#define CDDOPAUSE 0x00000100
#define CDDORESUME 0x00000200
#define CDDORESET 0x00000400
#define CDDOSTART 0x00000800
#define CDDOSTOP 0x00001000
#define CDDOPITCH 0x00002000
u_long routing_function;
#define CDREADVOLUME 0x00000001
#define CDSETVOLUME 0x00000002
#define CDSETMONO 0x00000100
#define CDSETSTEREO 0x00000200
#define CDSETLEFT 0x00000400
#define CDSETRIGHT 0x00000800
#define CDSETMUTE 0x00001000
#define CDSETPATCH 0x00008000
u_long special_function;
#define CDDOEJECT 0x00000001
#define CDDOCLOSE 0x00000002
#define CDDOLOCK 0x00000004
#define CDREADHEADER 0x00000100
#define CDREADENTRIES 0x00000200
#define CDREADSUBQ 0x00000200
#define CDREADRW 0x00000400
#define CDHASDEBUG 0x00004000
};
#define CDIOCCAPABILITY _IOR('c',30,struct ioc_capability)
#endif