#ifndef _LINUX_CDROM_H
#define _LINUX_CDROM_H
#include <machine/endian.h>
#define LINUX_CDROMPAUSE 0x5301
#define LINUX_CDROMRESUME 0x5302
#define LINUX_CDROMPLAYMSF 0x5303
#define LINUX_CDROMPLAYTRKIND 0x5304
#define LINUX_CDROMREADTOCHDR 0x5305
#define LINUX_CDROMREADTOCENTRY 0x5306
#define LINUX_CDROMSTOP 0x5307
#define LINUX_CDROMSTART 0x5308
#define LINUX_CDROMEJECT 0x5309
#define LINUX_CDROMVOLCTRL 0x530a
#define LINUX_CDROMSUBCHNL 0x530b
#define LINUX_CDROMEJECT_SW 0x530f
#define LINUX_CDROMMULTISESSION 0x5310
#define LINUX_CDROMRESET 0x5312
#define LINUX_CDROMVOLREAD 0x5313
#define LINUX_CDROMPLAYBLK 0x5317
#define LINUX_CDROMCLOSETRAY 0x5319
#define LINUX_CDROM_SET_OPTIONS 0x5320
#define LINUX_CDROM_CLEAR_OPTIONS 0x5321
#define LINUX_CDROM_SELECT_SPEED 0x5322
#define LINUX_CDROM_SELECT_DISC 0x5323
#define LINUX_CDROM_MEDIA_CHANGED 0x5325
#define LINUX_CDROM_DRIVE_STATUS 0x5326
#define LINUX_CDROM_DISC_STATUS 0x5327
#define LINUX_CDROM_CHANGER_NSLOTS 0x5328
#define LINUX_CDROM_LOCKDOOR 0x5329
#define LINUX_CDROM_DEBUG 0x5330
#define LINUX_CDROM_GET_CAPABILITY 0x5331
#define LINUX_DVD_READ_STRUCT 0x5390
#define LINUX_DVD_WRITE_STRUCT 0x5391
#define LINUX_DVD_AUTH 0x5392
struct linux_cdrom_blk {
unsigned from;
unsigned short len;
};
struct linux_cdrom_msf {
u_char cdmsf_min0;
u_char cdmsf_sec0;
u_char cdmsf_frame0;
u_char cdmsf_min1;
u_char cdmsf_sec1;
u_char cdmsf_frame1;
};
struct linux_cdrom_ti {
u_char cdti_trk0;
u_char cdti_ind0;
u_char cdti_trk1;
u_char cdti_ind1;
};
struct linux_cdrom_tochdr {
u_char cdth_trk0;
u_char cdth_trk1;
};
struct linux_cdrom_msf0 {
u_char minute;
u_char second;
u_char frame;
};
union linux_cdrom_addr {
struct linux_cdrom_msf0 msf;
int lba;
};
struct linux_cdrom_tocentry {
u_char cdte_track;
u_char cdte_adr :4;
u_char cdte_ctrl :4;
u_char cdte_format;
union linux_cdrom_addr cdte_addr;
u_char cdte_datamode;
};
struct linux_cdrom_subchnl {
u_char cdsc_format;
u_char cdsc_audiostatus;
u_char cdsc_adr: 4;
u_char cdsc_ctrl: 4;
u_char cdsc_trk;
u_char cdsc_ind;
union linux_cdrom_addr cdsc_absaddr;
union linux_cdrom_addr cdsc_reladdr;
};
struct linux_cdrom_volctrl {
u_char channel0;
u_char channel1;
u_char channel2;
u_char channel3;
};
struct linux_cdrom_multisession {
union linux_cdrom_addr addr;
u_char xa_flag;
u_char addr_format;
};
struct linux_cdrom_mechstat_header {
#if BYTE_ORDER == BIG_ENDIAN
u_int8_t fault : 1;
u_int8_t changer_state : 2;
u_int8_t curslot : 5;
u_int8_t mech_state : 3;
u_int8_t door_open : 1;
u_int8_t reserved1 : 4;
#elif BYTE_ORDER == LITTLE_ENDIAN
u_int8_t curslot : 5;
u_int8_t changer_state : 2;
u_int8_t fault : 1;
u_int8_t reserved1 : 4;
u_int8_t door_open : 1;
u_int8_t mech_state : 3;
#endif
u_int8_t curlba[3];
u_int8_t nslots;
u_int16_t slot_tablelen;
};
struct linux_cdrom_slot {
#if BYTE_ORDER == BIG_ENDIAN
u_int8_t disc_present : 1;
u_int8_t reserved1 : 6;
u_int8_t change : 1;
#elif BYTE_ORDER == LITTLE_ENDIAN
u_int8_t change : 1;
u_int8_t reserved1 : 6;
u_int8_t disc_present : 1;
#endif
u_int8_t reserved2[3];
};
#define LINUX_CDROM_MAX_SLOTS 256
struct linux_cdrom_changer_info {
struct linux_cdrom_mechstat_header hdr;
struct linux_cdrom_slot slots[LINUX_CDROM_MAX_SLOTS];
};
#endif