📄 cdrom.h
字号:
__u8 reserved2 : 7; __u8 page_present : 1;#elif defined(__LITTLE_ENDIAN_BITFIELD) __u8 page_present : 1; __u8 reserved2 : 7;#endif __u8 reserved3;};typedef struct { __u16 disc_information_length;#if defined(__BIG_ENDIAN_BITFIELD) __u8 reserved1 : 3; __u8 erasable : 1; __u8 border_status : 2; __u8 disc_status : 2;#elif defined(__LITTLE_ENDIAN_BITFIELD) __u8 disc_status : 2; __u8 border_status : 2; __u8 erasable : 1; __u8 reserved1 : 3;#else#error "Please fix <asm/byteorder.h>"#endif __u8 n_first_track; __u8 n_sessions_lsb; __u8 first_track_lsb; __u8 last_track_lsb;#if defined(__BIG_ENDIAN_BITFIELD) __u8 did_v : 1; __u8 dbc_v : 1; __u8 uru : 1; __u8 reserved2 : 2; __u8 dbit : 1; __u8 mrw_status : 2;#elif defined(__LITTLE_ENDIAN_BITFIELD) __u8 mrw_status : 2; __u8 dbit : 1; __u8 reserved2 : 2; __u8 uru : 1; __u8 dbc_v : 1; __u8 did_v : 1;#endif __u8 disc_type; __u8 n_sessions_msb; __u8 first_track_msb; __u8 last_track_msb; __u32 disc_id; __u32 lead_in; __u32 lead_out; __u8 disc_bar_code[8]; __u8 reserved3; __u8 n_opc;} disc_information;typedef struct { __u16 track_information_length; __u8 track_lsb; __u8 session_lsb; __u8 reserved1;#if defined(__BIG_ENDIAN_BITFIELD) __u8 reserved2 : 2; __u8 damage : 1; __u8 copy : 1; __u8 track_mode : 4; __u8 rt : 1; __u8 blank : 1; __u8 packet : 1; __u8 fp : 1; __u8 data_mode : 4; __u8 reserved3 : 6; __u8 lra_v : 1; __u8 nwa_v : 1;#elif defined(__LITTLE_ENDIAN_BITFIELD) __u8 track_mode : 4; __u8 copy : 1; __u8 damage : 1; __u8 reserved2 : 2; __u8 data_mode : 4; __u8 fp : 1; __u8 packet : 1; __u8 blank : 1; __u8 rt : 1; __u8 nwa_v : 1; __u8 lra_v : 1; __u8 reserved3 : 6;#endif __u32 track_start; __u32 next_writable; __u32 free_blocks; __u32 fixed_packet_size; __u32 track_size; __u32 last_rec_address;} track_information;struct feature_header { __u32 data_len; __u8 reserved1; __u8 reserved2; __u16 curr_profile;};struct mode_page_header { __u16 mode_data_length; __u8 medium_type; __u8 reserved1; __u8 reserved2; __u8 reserved3; __u16 desc_length;};#ifdef __KERNEL__#include <linux/fs.h> /* not really needed, later.. */#include <linux/device.h>struct packet_command{ unsigned char cmd[CDROM_PACKET_SIZE]; unsigned char *buffer; unsigned int buflen; int stat; struct request_sense *sense; unsigned char data_direction; int quiet; int timeout; void *reserved[1];};/* * _OLD will use PIO transfer on atapi devices, _BPC_* will use DMA */#define CDDA_OLD 0 /* old style */#define CDDA_BPC_SINGLE 1 /* single frame block pc */#define CDDA_BPC_FULL 2 /* multi frame block pc *//* Uniform cdrom data structures for cdrom.c */struct cdrom_device_info { struct cdrom_device_ops *ops; /* link to device_ops */ struct cdrom_device_info *next; /* next device_info for this major */ struct gendisk *disk; /* matching block layer disk */ void *handle; /* driver-dependent data *//* specifications */ int mask; /* mask of capability: disables them */ int speed; /* maximum speed for reading data */ int capacity; /* number of discs in jukebox *//* device-related storage */ int options : 30; /* options flags */ unsigned mc_flags : 2; /* media change buffer flags */ int use_count; /* number of times device opened */ char name[20]; /* name of the device type *//* per-device flags */ __u8 sanyo_slot : 2; /* Sanyo 3 CD changer support */ __u8 reserved : 6; /* not used yet */ int cdda_method; /* see flags */ __u8 last_sense; __u8 media_written; /* dirty flag, DVD+RW bookkeeping */ unsigned short mmc3_profile; /* current MMC3 profile */ int for_data; int (*exit)(struct cdrom_device_info *); int mrw_mode_page;};struct cdrom_device_ops {/* routines */ int (*open) (struct cdrom_device_info *, int); void (*release) (struct cdrom_device_info *); int (*drive_status) (struct cdrom_device_info *, int); int (*media_changed) (struct cdrom_device_info *, int); int (*tray_move) (struct cdrom_device_info *, int); int (*lock_door) (struct cdrom_device_info *, int); int (*select_speed) (struct cdrom_device_info *, int); int (*select_disc) (struct cdrom_device_info *, int); int (*get_last_session) (struct cdrom_device_info *, struct cdrom_multisession *); int (*get_mcn) (struct cdrom_device_info *, struct cdrom_mcn *); /* hard reset device */ int (*reset) (struct cdrom_device_info *); /* play stuff */ int (*audio_ioctl) (struct cdrom_device_info *,unsigned int, void *); /* dev-specific */ int (*dev_ioctl) (struct cdrom_device_info *, unsigned int, unsigned long);/* driver specifications */ const int capability; /* capability flags */ int n_minors; /* number of active minor devices */ /* handle uniform packets for scsi type devices (scsi,atapi) */ int (*generic_packet) (struct cdrom_device_info *, struct packet_command *);};/* the general block_device operations structure: */extern int cdrom_open(struct cdrom_device_info *cdi, struct inode *ip, struct file *fp);extern int cdrom_release(struct cdrom_device_info *cdi, struct file *fp);extern int cdrom_ioctl(struct file *file, struct cdrom_device_info *cdi, struct inode *ip, unsigned int cmd, unsigned long arg);extern int cdrom_media_changed(struct cdrom_device_info *);extern int register_cdrom(struct cdrom_device_info *cdi);extern int unregister_cdrom(struct cdrom_device_info *cdi);typedef struct { int data; int audio; int cdi; int xa; long error;} tracktype;extern int cdrom_get_last_written(struct cdrom_device_info *cdi, long *last_written);extern int cdrom_number_of_slots(struct cdrom_device_info *cdi);extern int cdrom_mode_select(struct cdrom_device_info *cdi, struct packet_command *cgc);extern int cdrom_mode_sense(struct cdrom_device_info *cdi, struct packet_command *cgc, int page_code, int page_control);extern void init_cdrom_command(struct packet_command *cgc, void *buffer, int len, int type);/* The SCSI spec says there could be 256 slots. */#define CDROM_MAX_SLOTS 256struct cdrom_mechstat_header {#if defined(__BIG_ENDIAN_BITFIELD) __u8 fault : 1; __u8 changer_state : 2; __u8 curslot : 5; __u8 mech_state : 3; __u8 door_open : 1; __u8 reserved1 : 4;#elif defined(__LITTLE_ENDIAN_BITFIELD) __u8 curslot : 5; __u8 changer_state : 2; __u8 fault : 1; __u8 reserved1 : 4; __u8 door_open : 1; __u8 mech_state : 3;#endif __u8 curlba[3]; __u8 nslots; __u16 slot_tablelen;};struct cdrom_slot {#if defined(__BIG_ENDIAN_BITFIELD) __u8 disc_present : 1; __u8 reserved1 : 6; __u8 change : 1;#elif defined(__LITTLE_ENDIAN_BITFIELD) __u8 change : 1; __u8 reserved1 : 6; __u8 disc_present : 1;#endif __u8 reserved2[3];};struct cdrom_changer_info { struct cdrom_mechstat_header hdr; struct cdrom_slot slots[CDROM_MAX_SLOTS];};typedef enum { mechtype_caddy = 0, mechtype_tray = 1, mechtype_popup = 2, mechtype_individual_changer = 4, mechtype_cartridge_changer = 5} mechtype_t;typedef struct {#if defined(__BIG_ENDIAN_BITFIELD) __u8 ps : 1; __u8 reserved1 : 1; __u8 page_code : 6; __u8 page_length; __u8 reserved2 : 1; __u8 bufe : 1; __u8 ls_v : 1; __u8 test_write : 1; __u8 write_type : 4; __u8 multi_session : 2; /* or border, DVD */ __u8 fp : 1; __u8 copy : 1; __u8 track_mode : 4; __u8 reserved3 : 4; __u8 data_block_type : 4;#elif defined(__LITTLE_ENDIAN_BITFIELD) __u8 page_code : 6; __u8 reserved1 : 1; __u8 ps : 1; __u8 page_length; __u8 write_type : 4; __u8 test_write : 1; __u8 ls_v : 1; __u8 bufe : 1; __u8 reserved2 : 1; __u8 track_mode : 4; __u8 copy : 1; __u8 fp : 1; __u8 multi_session : 2; /* or border, DVD */ __u8 data_block_type : 4; __u8 reserved3 : 4;#endif __u8 link_size; __u8 reserved4;#if defined(__BIG_ENDIAN_BITFIELD) __u8 reserved5 : 2; __u8 app_code : 6;#elif defined(__LITTLE_ENDIAN_BITFIELD) __u8 app_code : 6; __u8 reserved5 : 2;#endif __u8 session_format; __u8 reserved6; __u32 packet_size; __u16 audio_pause; __u8 mcn[16]; __u8 isrc[16]; __u8 subhdr0; __u8 subhdr1; __u8 subhdr2; __u8 subhdr3;} __attribute__((packed)) write_param_page;struct modesel_head{ __u8 reserved1; __u8 medium; __u8 reserved2; __u8 block_desc_length; __u8 density; __u8 number_of_blocks_hi; __u8 number_of_blocks_med; __u8 number_of_blocks_lo; __u8 reserved3; __u8 block_length_hi; __u8 block_length_med; __u8 block_length_lo;};typedef struct { __u16 report_key_length; __u8 reserved1; __u8 reserved2;#if defined(__BIG_ENDIAN_BITFIELD) __u8 type_code : 2; __u8 vra : 3; __u8 ucca : 3;#elif defined(__LITTLE_ENDIAN_BITFIELD) __u8 ucca : 3; __u8 vra : 3; __u8 type_code : 2;#endif __u8 region_mask; __u8 rpc_scheme; __u8 reserved3;} rpc_state_t;struct event_header { __u16 data_len;#if defined(__BIG_ENDIAN_BITFIELD) __u8 nea : 1; __u8 reserved1 : 4; __u8 notification_class : 3;#elif defined(__LITTLE_ENDIAN_BITFIELD) __u8 notification_class : 3; __u8 reserved1 : 4; __u8 nea : 1;#endif __u8 supp_event_class;};struct media_event_desc {#if defined(__BIG_ENDIAN_BITFIELD) __u8 reserved1 : 4; __u8 media_event_code : 4; __u8 reserved2 : 6; __u8 media_present : 1; __u8 door_open : 1;#elif defined(__LITTLE_ENDIAN_BITFIELD) __u8 media_event_code : 4; __u8 reserved1 : 4; __u8 door_open : 1; __u8 media_present : 1; __u8 reserved2 : 6;#endif __u8 start_slot; __u8 end_slot;};extern int cdrom_get_media_event(struct cdrom_device_info *cdi, struct media_event_desc *med);#endif /* End of kernel only stuff */ #endif /* _LINUX_CDROM_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -