123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437 |
- /* $OpenBSD: cdio.h,v 1.16 2006/12/23 17:35:35 krw Exp $ */
- /* $NetBSD: cdio.h,v 1.11 1996/02/19 18:29:04 scottr Exp $ */
- #ifndef _SYS_CDIO_H_
- #define _SYS_CDIO_H_
- #include <sys/types.h>
- #include <sys/ioccom.h>
- /* Shared between kernel & process */
- union msf_lba {
- struct {
- u_char unused;
- u_char minute;
- u_char second;
- u_char frame;
- } msf;
- u_int32_t lba;
- u_char addr[4];
- };
- struct cd_toc_entry {
- u_char nothing1;
- #if _BYTE_ORDER == _LITTLE_ENDIAN
- u_int control:4;
- u_int addr_type:4;
- #endif
- #if _BYTE_ORDER == _BIG_ENDIAN
- u_int addr_type:4;
- u_int control:4;
- #endif
- u_char track;
- u_char nothing2;
- union msf_lba addr;
- };
- struct cd_sub_channel_header {
- u_char nothing1;
- 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_q_data {
- u_char data_format;
- #if _BYTE_ORDER == _LITTLE_ENDIAN
- u_int control:4;
- u_int addr_type:4;
- #endif
- #if _BYTE_ORDER == _BIG_ENDIAN
- u_int addr_type:4;
- u_int control:4;
- #endif
- u_char track_number;
- u_char index_number;
- u_char absaddr[4];
- u_char reladdr[4];
- #if _BYTE_ORDER == _LITTLE_ENDIAN
- u_int :7;
- u_int mc_valid:1;
- #endif
- #if _BYTE_ORDER == _BIG_ENDIAN
- u_int mc_valid:1;
- u_int :7;
- #endif
- u_char mc_number[15];
- #if _BYTE_ORDER == _LITTLE_ENDIAN
- u_int :7;
- u_int ti_valid:1;
- #endif
- #if _BYTE_ORDER == _BIG_ENDIAN
- u_int ti_valid:1;
- u_int :7;
- #endif
- u_char ti_number[15];
- };
- struct cd_sub_channel_position_data {
- u_char data_format;
- #if _BYTE_ORDER == _LITTLE_ENDIAN
- u_int control:4;
- u_int addr_type:4;
- #endif
- #if _BYTE_ORDER == _BIG_ENDIAN
- u_int addr_type:4;
- u_int control:4;
- #endif
- 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 nothing1;
- u_char nothing2;
- u_char nothing3;
- #if _BYTE_ORDER == _LITTLE_ENDIAN
- u_int :7;
- u_int mc_valid:1;
- #endif
- #if _BYTE_ORDER == _BIG_ENDIAN
- u_int mc_valid:1;
- u_int :7;
- #endif
- u_char mc_number[15];
- };
- struct cd_sub_channel_track_info {
- u_char data_format;
- u_char nothing1;
- u_char track_number;
- u_char nothing2;
- #if _BYTE_ORDER == _LITTLE_ENDIAN
- u_int :7;
- u_int ti_valid:1;
- #endif
- #if _BYTE_ORDER == _BIG_ENDIAN
- u_int ti_valid:1;
- u_int :7;
- #endif
- u_char ti_number[15];
- };
- struct cd_sub_channel_info {
- struct cd_sub_channel_header header;
- union {
- struct cd_sub_channel_q_data q_data;
- 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;
- #define CD_TRACK_LEADOUT 0xaa
- u_short data_len;
- struct cd_toc_entry *data;
- };
- #define CDIOREADTOCENTRIES _IOWR('c', 5, struct ioc_read_toc_entry)
- #define CDIOREADTOCENTRYS CDIOREADTOCENTRIES
- /* read LBA start of a given session; 0=last, others not yet supported */
- #define CDIOREADMSADDR _IOWR('c', 6, int)
- 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 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)
- #define CDIOCALLOW _IO('c', 25)
- #define CDIOCPREVENT _IO('c', 26)
- #define CDIOCCLOSE _IO('c', 27)
- #define CDIOCSETCDDA _IOW('c', 28, int) /* (re)set CDDA reading mode */
- 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)
- struct ioc_load_unload {
- u_char options;
- #define CD_LU_ABORT 0x1 /* NOTE: These are the same as the ATAPI */
- #define CD_LU_UNLOAD 0x2 /* op values for the LOAD_UNLOAD command */
- #define CD_LU_LOAD 0x3
- u_char slot;
- };
- #define CDIOCLOADUNLOAD _IOW('c', 26, struct ioc_load_unload)
- /* DVD definitions */
- /* DVD-ROM Specific ioctls */
- #define DVD_READ_STRUCT _IOWR('d', 0, union dvd_struct)
- #define DVD_WRITE_STRUCT _IOWR('d', 1, union dvd_struct)
- #define DVD_AUTH _IOWR('d', 2, union dvd_authinfo)
- #define GPCMD_READ_DVD_STRUCTURE 0xad
- #define GPCMD_SEND_DVD_STRUCTURE 0xad
- #define GPCMD_REPORT_KEY 0xa4
- #define GPCMD_SEND_KEY 0xa3
- /* DVD struct types */
- #define DVD_STRUCT_PHYSICAL 0x00
- #define DVD_STRUCT_COPYRIGHT 0x01
- #define DVD_STRUCT_DISCKEY 0x02
- #define DVD_STRUCT_BCA 0x03
- #define DVD_STRUCT_MANUFACT 0x04
- struct dvd_layer {
- u_int8_t book_version;
- u_int8_t book_type;
- u_int8_t min_rate;
- u_int8_t disc_size;
- u_int8_t layer_type;
- u_int8_t track_path;
- u_int8_t nlayers;
- u_int8_t track_density;
- u_int8_t linear_density;
- u_int8_t bca;
- u_int32_t start_sector;
- u_int32_t end_sector;
- u_int32_t end_sector_l0;
- };
-
- struct dvd_physical {
- u_int8_t type;
- u_int8_t layer_num;
- struct dvd_layer layer[4];
- };
- struct dvd_copyright {
- u_int8_t type;
- u_int8_t layer_num;
- u_int8_t cpst;
- u_int8_t rmi;
- };
- struct dvd_disckey {
- u_int8_t type;
- u_int8_t agid;
- u_int8_t value[2048];
- };
- struct dvd_bca {
- u_int8_t type;
- int len;
- u_int8_t value[188];
- };
- struct dvd_manufact {
- u_int8_t type;
- u_int8_t layer_num;
- int len;
- u_int8_t value[2048];
- };
- union dvd_struct {
- u_int8_t type;
- struct dvd_physical physical;
- struct dvd_copyright copyright;
- struct dvd_disckey disckey;
- struct dvd_bca bca;
- struct dvd_manufact manufact;
- };
- /*
- * DVD authentication ioctl
- */
- /* Authentication states */
- #define DVD_LU_SEND_AGID 0
- #define DVD_HOST_SEND_CHALLENGE 1
- #define DVD_LU_SEND_KEY1 2
- #define DVD_LU_SEND_CHALLENGE 3
- #define DVD_HOST_SEND_KEY2 4
- /* Termination states */
- #define DVD_AUTH_ESTABLISHED 5
- #define DVD_AUTH_FAILURE 6
- /* Other functions */
- #define DVD_LU_SEND_TITLE_KEY 7
- #define DVD_LU_SEND_ASF 8
- #define DVD_INVALIDATE_AGID 9
- #define DVD_LU_SEND_RPC_STATE 10
- #define DVD_HOST_SEND_RPC_STATE 11
- #if 0
- /* State data */
- typedef u_int8_t dvd_key[5]; /* 40-bit value, MSB is first elem. */
- typedef u_int8_t dvd_challenge[10]; /* 80-bit value, MSB is first elem. */
- #endif
- #define DVD_KEY_SIZE 5
- #define DVD_CHALLENGE_SIZE 10
- struct dvd_lu_send_agid {
- u_int8_t type;
- u_int8_t agid;
- };
- struct dvd_host_send_challenge {
- u_int8_t type;
- u_int8_t agid;
- u_int8_t chal[DVD_CHALLENGE_SIZE];
- };
- struct dvd_send_key {
- u_int8_t type;
- u_int8_t agid;
- u_int8_t key[DVD_KEY_SIZE];
- };
- struct dvd_lu_send_challenge {
- u_int8_t type;
- u_int8_t agid;
- u_int8_t chal[DVD_CHALLENGE_SIZE];
- };
- #define DVD_CPM_NO_COPYRIGHT 0
- #define DVD_CPM_COPYRIGHTED 1
- #define DVD_CP_SEC_NONE 0
- #define DVD_CP_SEC_EXIST 1
- #define DVD_CGMS_UNRESTRICTED 0
- #define DVD_CGMS_SINGLE 2
- #define DVD_CGMS_RESTRICTED 3
- struct dvd_lu_send_title_key {
- u_int8_t type;
- u_int8_t agid;
- u_int8_t title_key[DVD_KEY_SIZE];
- int lba;
- u_int8_t cpm;
- u_int8_t cp_sec;
- u_int8_t cgms;
- };
- struct dvd_lu_send_asf {
- u_int8_t type;
- u_int8_t agid;
- u_int8_t asf;
- };
- struct dvd_host_send_rpcstate {
- u_int8_t type;
- u_int8_t pdrc;
- };
- struct dvd_lu_send_rpcstate {
- u_int8_t type;
- u_int8_t vra;
- u_int8_t ucca;
- u_int8_t region_mask;
- u_int8_t rpc_scheme;
- };
- union dvd_authinfo {
- u_int8_t type;
- struct dvd_lu_send_agid lsa;
- struct dvd_host_send_challenge hsc;
- struct dvd_send_key lsk;
- struct dvd_lu_send_challenge lsc;
- struct dvd_send_key hsk;
- struct dvd_lu_send_title_key lstk;
- struct dvd_lu_send_asf lsasf;
- struct dvd_host_send_rpcstate hrpcs;
- struct dvd_lu_send_rpcstate lrpcs;
- };
- #endif /* !_SYS_CDIO_H_ */
|