⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cdrom.h

📁 unxi下共享内存的使用
💻 H
📖 第 1 页 / 共 3 页
字号:
/* * -- <linux/cdrom.h> * General header file for linux CD-ROM drivers  * Copyright (C) 1992         David Giller, rafetmad@oxy.edu *               1994, 1995   Eberhard Moenkeberg, emoenke@gwdg.de *               1996         David van Leeuwen, david@tm.tno.nl *               1997, 1998   Erik Andersen, andersee@debian.org *               1998-2000    Jens Axboe, axboe@suse.de */ #ifndef	_LINUX_CDROM_H#define	_LINUX_CDROM_H#include <asm/byteorder.h>/******************************************************* * As of Linux 2.1.x, all Linux CD-ROM application programs will use this  * (and only this) include file.  It is my hope to provide Linux with * a uniform interface between software accessing CD-ROMs and the various  * device drivers that actually talk to the drives.  There may still be * 23 different kinds of strange CD-ROM drives, but at least there will  * now be one, and only one, Linux CD-ROM interface. * * Additionally, as of Linux 2.1.x, all Linux application programs  * should use the O_NONBLOCK option when opening a CD-ROM device  * for subsequent ioctl commands.  This allows for neat system errors  * like "No medium found" or "Wrong medium type" upon attempting to  * mount or play an empty slot, mount an audio disc, or play a data disc. * Generally, changing an application program to support O_NONBLOCK * is as easy as the following: *       -    drive = open("/dev/cdrom", O_RDONLY); *       +    drive = open("/dev/cdrom", O_RDONLY | O_NONBLOCK); * It is worth the small change. * *  Patches for many common CD programs (provided by David A. van Leeuwen) *  can be found at:  ftp://ftp.gwdg.de/pub/linux/cdrom/drivers/cm206/ *  *******************************************************//* When a driver supports a certain function, but the cdrom drive we are  * using doesn't, we will return the error EDRIVE_CANT_DO_THIS.  We will  * borrow the "Operation not supported" error from the network folks to  * accomplish this.  Maybe someday we will get a more targeted error code,  * but this will do for now... */#define EDRIVE_CANT_DO_THIS  EOPNOTSUPP/******************************************************* * The CD-ROM IOCTL commands  -- these should be supported by  * all the various cdrom drivers.  For the CD-ROM ioctls, we  * will commandeer byte 0x53, or 'S'. *******************************************************/#define CDROMPAUSE		0x5301 /* Pause Audio Operation */ #define CDROMRESUME		0x5302 /* Resume paused Audio Operation */#define CDROMPLAYMSF		0x5303 /* Play Audio MSF (struct cdrom_msf) */#define CDROMPLAYTRKIND		0x5304 /* Play Audio Track/index                                            (struct cdrom_ti) */#define CDROMREADTOCHDR		0x5305 /* Read TOC header                                            (struct cdrom_tochdr) */#define CDROMREADTOCENTRY	0x5306 /* Read TOC entry                                            (struct cdrom_tocentry) */#define CDROMSTOP		0x5307 /* Stop the cdrom drive */#define CDROMSTART		0x5308 /* Start the cdrom drive */#define CDROMEJECT		0x5309 /* Ejects the cdrom media */#define CDROMVOLCTRL		0x530a /* Control output volume                                            (struct cdrom_volctrl) */#define CDROMSUBCHNL		0x530b /* Read subchannel data                                            (struct cdrom_subchnl) */#define CDROMREADMODE2		0x530c /* Read CDROM mode 2 data (2336 Bytes)                                            (struct cdrom_read) */#define CDROMREADMODE1		0x530d /* Read CDROM mode 1 data (2048 Bytes)                                           (struct cdrom_read) */#define CDROMREADAUDIO		0x530e /* (struct cdrom_read_audio) */#define CDROMEJECT_SW		0x530f /* enable(1)/disable(0) auto-ejecting */#define CDROMMULTISESSION	0x5310 /* Obtain the start-of-last-session                                            address of multi session disks                                            (struct cdrom_multisession) */#define CDROM_GET_MCN		0x5311 /* Obtain the "Universal Product Code"                                            if available (struct cdrom_mcn) */#define CDROM_GET_UPC		CDROM_GET_MCN  /* This one is depricated,                                           but here anyway for compatability */#define CDROMRESET		0x5312 /* hard-reset the drive */#define CDROMVOLREAD		0x5313 /* Get the drive's volume setting                                           (struct cdrom_volctrl) */#define CDROMREADRAW		0x5314	/* read data in raw mode (2352 Bytes)                                           (struct cdrom_read) *//*  * These ioctls are used only used in aztcd.c and optcd.c */#define CDROMREADCOOKED		0x5315	/* read data in cooked mode */#define CDROMSEEK		0x5316  /* seek msf address */  /* * This ioctl is only used by the scsi-cd driver.     It is for playing audio in logical block addressing mode. */#define CDROMPLAYBLK		0x5317	/* (struct cdrom_blk) *//*  * These ioctls are only used in optcd.c */#define CDROMREADALL		0x5318	/* read all 2646 bytes *//*  * These ioctls are (now) only in ide-cd.c for controlling  * drive spindown time.  They should be implemented in the * Uniform driver, via generic packet commands, GPCMD_MODE_SELECT_10, * GPCMD_MODE_SENSE_10 and the GPMODE_POWER_PAGE... *  -Erik */#define CDROMGETSPINDOWN        0x531d#define CDROMSETSPINDOWN        0x531e/*  * These ioctls are implemented through the uniform CD-ROM driver * They _will_ be adopted by all CD-ROM drivers, when all the CD-ROM * drivers are eventually ported to the uniform CD-ROM driver interface. */#define CDROMCLOSETRAY		0x5319	/* pendant of CDROMEJECT */#define CDROM_SET_OPTIONS	0x5320  /* Set behavior options */#define CDROM_CLEAR_OPTIONS	0x5321  /* Clear behavior options */#define CDROM_SELECT_SPEED	0x5322  /* Set the CD-ROM speed */#define CDROM_SELECT_DISC	0x5323  /* Select disc (for juke-boxes) */#define CDROM_MEDIA_CHANGED	0x5325  /* Check is media changed  */#define CDROM_DRIVE_STATUS	0x5326  /* Get tray position, etc. */#define CDROM_DISC_STATUS	0x5327  /* Get disc type, etc. */#define CDROM_CHANGER_NSLOTS    0x5328  /* Get number of slots */#define CDROM_LOCKDOOR		0x5329  /* lock or unlock door */#define CDROM_DEBUG		0x5330	/* Turn debug messages on/off */#define CDROM_GET_CAPABILITY	0x5331	/* get capabilities *//* Note that scsi/scsi_ioctl.h also uses 0x5382 - 0x5386. * Future CDROM ioctls should be kept below 0x537F *//* This ioctl is only used by sbpcd at the moment */#define CDROMAUDIOBUFSIZ        0x5382	/* set the audio buffer size */					/* conflict with SCSI_IOCTL_GET_IDLUN *//* DVD-ROM Specific ioctls */#define DVD_READ_STRUCT		0x5390  /* Read structure */#define DVD_WRITE_STRUCT	0x5391  /* Write structure */#define DVD_AUTH		0x5392  /* Authentication */#define CDROM_SEND_PACKET	0x5393	/* send a packet to the drive */#define CDROM_NEXT_WRITABLE	0x5394	/* get next writable block */#define CDROM_LAST_WRITTEN	0x5395	/* get last block written on disc *//******************************************************* * CDROM IOCTL structures *******************************************************//* Address in MSF format */struct cdrom_msf0		{	__u8	minute;	__u8	second;	__u8	frame;};/* Address in either MSF or logical format */union cdrom_addr		{	struct cdrom_msf0	msf;	int			lba;};/* This struct is used by the CDROMPLAYMSF ioctl */ struct cdrom_msf {	__u8	cdmsf_min0;	/* start minute */	__u8	cdmsf_sec0;	/* start second */	__u8	cdmsf_frame0;	/* start frame */	__u8	cdmsf_min1;	/* end minute */	__u8	cdmsf_sec1;	/* end second */	__u8	cdmsf_frame1;	/* end frame */};/* This struct is used by the CDROMPLAYTRKIND ioctl */struct cdrom_ti {	__u8	cdti_trk0;	/* start track */	__u8	cdti_ind0;	/* start index */	__u8	cdti_trk1;	/* end track */	__u8	cdti_ind1;	/* end index */};/* This struct is used by the CDROMREADTOCHDR ioctl */struct cdrom_tochdr 	{	__u8	cdth_trk0;	/* start track */	__u8	cdth_trk1;	/* end track */};/* This struct is used by the CDROMVOLCTRL and CDROMVOLREAD ioctls */struct cdrom_volctrl{	__u8	channel0;	__u8	channel1;	__u8	channel2;	__u8	channel3;};/* This struct is used by the CDROMSUBCHNL ioctl */struct cdrom_subchnl {	__u8	cdsc_format;	__u8	cdsc_audiostatus;	__u8	cdsc_adr:	4;	__u8	cdsc_ctrl:	4;	__u8	cdsc_trk;	__u8	cdsc_ind;	union cdrom_addr cdsc_absaddr;	union cdrom_addr cdsc_reladdr;};/* This struct is used by the CDROMREADTOCENTRY ioctl */struct cdrom_tocentry {	__u8	cdte_track;	__u8	cdte_adr	:4;	__u8	cdte_ctrl	:4;	__u8	cdte_format;	union cdrom_addr cdte_addr;	__u8	cdte_datamode;};/* This struct is used by the CDROMREADMODE1, and CDROMREADMODE2 ioctls */struct cdrom_read      {	int	cdread_lba;	char 	*cdread_bufaddr;	int	cdread_buflen;};/* This struct is used by the CDROMREADAUDIO ioctl */struct cdrom_read_audio{	union cdrom_addr addr; /* frame address */	__u8 addr_format;    /* CDROM_LBA or CDROM_MSF */	int nframes;           /* number of 2352-byte-frames to read at once */	__u8 *buf;           /* frame buffer (size: nframes*2352 bytes) */};/* 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. */	__u8 xa_flag;        /* 1: "is XA disk" */	__u8 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 {  __u8 medium_catalog_number[14]; /* 13 ASCII digits, null-terminated */};/* This is used by the CDROMPLAYBLK ioctl */struct cdrom_blk {	unsigned from;	unsigned short len;};#define CDROM_PACKET_SIZE	12#define CGC_DATA_UNKNOWN	0#define CGC_DATA_WRITE		1#define CGC_DATA_READ		2#define CGC_DATA_NONE		3/* for CDROM_PACKET_COMMAND ioctl */struct cdrom_generic_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];};/* * 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) */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -