📄 cdrom.h
字号:
__u8 information[4]; __u8 add_sense_len; __u8 command_info[4]; __u8 asc; __u8 ascq; __u8 fruc; __u8 sks[3]; __u8 asb[46];};#ifdef __KERNEL__#include <linux/devfs_fs_kernel.h>struct cdrom_write_settings { unsigned char fpacket; /* fixed/variable packets */ unsigned long packet_size; /* write out this number of packets */ unsigned long nwa; /* next writeable address */ unsigned char writeable; /* cdrom is writeable */};/* 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 */ void *handle; /* driver-dependent data */ devfs_handle_t de; /* real driver should create this */ int number; /* generic driver updates this *//* specifications */ kdev_t dev; /* device number */ 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 */ struct cdrom_write_settings write;};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 cdrom_generic_command *);};/* the general block_device operations structure: */extern int cdrom_open(struct inode *, struct file *);extern int cdrom_release(struct inode *, struct file *);extern int cdrom_ioctl(struct inode *, struct file *, unsigned, unsigned long);extern int cdrom_media_changed(kdev_t);extern int register_cdrom(struct cdrom_device_info *cdi);extern int unregister_cdrom(struct cdrom_device_info *cdi);static inline void devfs_plain_cdrom(struct cdrom_device_info *cdi, struct block_device_operations *ops){ char vname[23]; sprintf (vname, "cdroms/cdrom%d", cdi->number); cdi->de = devfs_register (NULL, vname, DEVFS_FL_DEFAULT, MAJOR (cdi->dev), MINOR (cdi->dev), S_IFBLK | S_IRUGO | S_IWUGO, ops, NULL);}typedef struct { int data; int audio; int cdi; int xa; long error;} tracktype;extern void cdrom_count_tracks(struct cdrom_device_info *cdi,tracktype* tracks);extern int cdrom_get_next_writable(kdev_t dev, long *next_writable);extern int cdrom_get_last_written(kdev_t dev, long *last_written);extern int cdrom_number_of_slots(struct cdrom_device_info *cdi);extern int cdrom_select_disc(struct cdrom_device_info *cdi, int slot);extern int cdrom_mode_select(struct cdrom_device_info *cdi, struct cdrom_generic_command *cgc);extern int cdrom_mode_sense(struct cdrom_device_info *cdi, struct cdrom_generic_command *cgc, int page_code, int page_control);extern void init_cdrom_command(struct cdrom_generic_command *cgc, void *buffer, int len, int type);extern struct cdrom_device_info *cdrom_find_device(kdev_t dev);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 : 5;#elif defined(__LITTLE_ENDIAN_BITFIELD) __u8 reserved2 : 5; __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;extern int cdrom_get_disc_info(kdev_t dev, disc_information *di);extern int cdrom_get_track_info(kdev_t dev, __u16 track, __u8 type, track_information *ti);/* 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;struct mode_page_header { __u16 mode_data_length; __u8 medium_type; __u8 reserved1; __u8 reserved2; __u8 reserved3; __u16 desc_length;};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;#endif /* End of kernel only stuff */ #endif /* _LINUX_CDROM_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -