📄 cdrom.h
字号:
/* This struct is used with the CDROMMULTISESSION ioctl */struct cdrom_multisession{ union cdrom_addr addr; /* frame address: start-of-last-session (not the new "frame 16"!). Only valid if the "xa_flag" is true. */ u_char xa_flag; /* 1: "is XA disk" */ u_char addr_format; /* CDROM_LBA or CDROM_MSF */};/* This struct is used with the CDROM_GET_MCN ioctl. * Very few audio discs actually have Universal Product Code information, * which should just be the Medium Catalog Number on the box. Also note * that the way the codeis written on CD is _not_ uniform across all discs! */ struct cdrom_mcn { u_char medium_catalog_number[14]; /* 13 ASCII digits, null-terminated */};/* This is used by the CDROMPLAYBLK ioctl */struct cdrom_blk { unsigned from; unsigned short len;};/* * A CD-ROM physical sector size is 2048, 2052, 2056, 2324, 2332, 2336, * 2340, or 2352 bytes long. * Sector types of the standard CD-ROM data formats: * * format sector type user data size (bytes) * ----------------------------------------------------------------------------- * 1 (Red Book) CD-DA 2352 (CD_FRAMESIZE_RAW) * 2 (Yellow Book) Mode1 Form1 2048 (CD_FRAMESIZE) * 3 (Yellow Book) Mode1 Form2 2336 (CD_FRAMESIZE_RAW0) * 4 (Green Book) Mode2 Form1 2048 (CD_FRAMESIZE) * 5 (Green Book) Mode2 Form2 2328 (2324+4 spare bytes) * * * The layout of the standard CD-ROM data formats: * ----------------------------------------------------------------------------- * - audio (red): | audio_sample_bytes | * | 2352 | * * - data (yellow, mode1): | sync - head - data - EDC - zero - ECC | * | 12 - 4 - 2048 - 4 - 8 - 276 | * * - data (yellow, mode2): | sync - head - data | * | 12 - 4 - 2336 | * * - XA data (green, mode2 form1): | sync - head - sub - data - EDC - ECC | * | 12 - 4 - 8 - 2048 - 4 - 276 | * * - XA data (green, mode2 form2): | sync - head - sub - data - Spare | * | 12 - 4 - 8 - 2324 - 4 | * *//* Some generally useful CD-ROM information -- mostly based on the above */#define CD_MINS 74 /* max. minutes per CD, not really a limit */#define CD_SECS 60 /* seconds per minute */#define CD_FRAMES 75 /* frames per second */#define CD_SYNC_SIZE 12 /* 12 sync bytes per raw data frame */#define CD_MSF_OFFSET 150 /* MSF numbering offset of first frame */#define CD_CHUNK_SIZE 24 /* lowest-level "data bytes piece" */#define CD_NUM_OF_CHUNKS 98 /* chunks per frame */#define CD_FRAMESIZE_SUB 96 /* subchannel data "frame" size */#define CD_HEAD_SIZE 4 /* header (address) bytes per raw data frame */#define CD_SUBHEAD_SIZE 8 /* subheader bytes per raw XA data frame */#define CD_EDC_SIZE 4 /* bytes EDC per most raw data frame types */#define CD_ZERO_SIZE 8 /* bytes zero per yellow book mode 1 frame */#define CD_ECC_SIZE 276 /* bytes ECC per most raw data frame types */#define CD_FRAMESIZE 2048 /* bytes per frame, "cooked" mode */#define CD_FRAMESIZE_RAW 2352 /* bytes per frame, "raw" mode */#define CD_FRAMESIZE_RAWER 2646 /* The maximum possible returned bytes */ /* most drives don't deliver everything: */#define CD_FRAMESIZE_RAW1 (CD_FRAMESIZE_RAW-CD_SYNC_SIZE) /*2340*/#define CD_FRAMESIZE_RAW0 (CD_FRAMESIZE_RAW-CD_SYNC_SIZE-CD_HEAD_SIZE) /*2336*/#define CD_XA_HEAD (CD_HEAD_SIZE+CD_SUBHEAD_SIZE) /* "before data" part of raw XA frame */#define CD_XA_TAIL (CD_EDC_SIZE+CD_ECC_SIZE) /* "after data" part of raw XA frame */#define CD_XA_SYNC_HEAD (CD_SYNC_SIZE+CD_XA_HEAD) /* sync bytes + header of XA frame *//* CD-ROM address types (cdrom_tocentry.cdte_format) */#define CDROM_LBA 0x01 /* "logical block": first frame is #0 */#define CDROM_MSF 0x02 /* "minute-second-frame": binary, not bcd here! *//* bit to tell whether track is data or audio (cdrom_tocentry.cdte_ctrl) */#define CDROM_DATA_TRACK 0x04/* The leadout track is always 0xAA, regardless of # of tracks on disc */#define CDROM_LEADOUT 0xAA/* audio states (from SCSI-2, but seen with other drives, too) */#define CDROM_AUDIO_INVALID 0x00 /* audio status not supported */#define CDROM_AUDIO_PLAY 0x11 /* audio play operation in progress */#define CDROM_AUDIO_PAUSED 0x12 /* audio play operation paused */#define CDROM_AUDIO_COMPLETED 0x13 /* audio play successfully completed */#define CDROM_AUDIO_ERROR 0x14 /* audio play stopped due to error */#define CDROM_AUDIO_NO_STATUS 0x15 /* no current audio status to return *//* CD-ROM-specific SCSI command opcodes */#define SCMD_READ_TOC 0x43 /* read table of contents */#define SCMD_PLAYAUDIO_MSF 0x47 /* play data at time offset */#define SCMD_PLAYAUDIO_TI 0x48 /* play data at track/index */#define SCMD_PAUSE_RESUME 0x4B /* pause/resume audio */#define SCMD_READ_SUBCHANNEL 0x42 /* read SC info on playing disc */#define SCMD_PLAYAUDIO10 0x45 /* play data at logical block *//* capability flags used with the uniform CD-ROM driver */ #define CDC_CLOSE_TRAY 0x1 /* caddy systems _can't_ close */#define CDC_OPEN_TRAY 0x2 /* but _can_ eject. */#define CDC_LOCK 0x4 /* disable manual eject */#define CDC_SELECT_SPEED 0x8 /* programmable speed */#define CDC_SELECT_DISC 0x10 /* select disc from juke-box */#define CDC_MULTI_SESSION 0x20 /* read sessions>1 */#define CDC_MCN 0x40 /* Medium Catalog Number */#define CDC_MEDIA_CHANGED 0x80 /* media changed */#define CDC_PLAY_AUDIO 0x100 /* audio functions */#define CDC_RESET 0x200 /* hard reset device */#define CDC_IOCTLS 0x400 /* driver has non-standard ioctls */#define CDC_DRIVE_STATUS 0x800 /* driver implements drive status *//* drive status possibilities returned by CDROM_DRIVE_STATUS ioctl */#define CDS_NO_INFO 0 /* if not implemented */#define CDS_NO_DISC 1#define CDS_TRAY_OPEN 2#define CDS_DRIVE_NOT_READY 3#define CDS_DISC_OK 4/* return values for the CDROM_DISC_STATUS ioctl *//* can also return CDS_NO_[INFO|DISC], from above */#define CDS_AUDIO 100#define CDS_DATA_1 101#define CDS_DATA_2 102#define CDS_XA_2_1 103#define CDS_XA_2_2 104#define CDS_MIXED 105/* User-configurable behavior options for the uniform CD-ROM driver */#define CDO_AUTO_CLOSE 0x1 /* close tray on first open() */#define CDO_AUTO_EJECT 0x2 /* open tray on last release() */#define CDO_USE_FFLAGS 0x4 /* use O_NONBLOCK information on open */#define CDO_LOCK 0x8 /* lock tray on open files */#define CDO_CHECK_TYPE 0x10 /* check type on open for data *//* Special codes used when specifying changer slots. */#define CDSL_NONE ((int) (~0U>>1)-1)#define CDSL_CURRENT ((int) (~0U>>1))#ifdef __KERNEL__/* 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 *//* 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 */};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 */};/* the general file operations structure: */extern struct file_operations cdrom_fops;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 void cdrom_count_tracks(struct cdrom_device_info *cdi,tracktype* tracks);#endif /* End of kernel only stuff */ #endif /* _LINUX_CDROM_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -