mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-09-04 20:19:47 +08:00 
			
		
		
		
	 049500715e
			
		
	
	
		049500715e
		
	
	
	
	
		
			
			This is strictly user-space material at this point, so put it with the other user-space API documentation. Signed-off-by: Jonathan Corbet <corbet@lwn.net>
		
			
				
	
	
		
			1234 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			1234 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| ============================
 | |
| Summary of CDROM ioctl calls
 | |
| ============================
 | |
| 
 | |
| - Edward A. Falk <efalk@google.com>
 | |
| 
 | |
| November, 2004
 | |
| 
 | |
| This document attempts to describe the ioctl(2) calls supported by
 | |
| the CDROM layer.  These are by-and-large implemented (as of Linux 2.6)
 | |
| in drivers/cdrom/cdrom.c and drivers/block/scsi_ioctl.c
 | |
| 
 | |
| ioctl values are listed in <linux/cdrom.h>.  As of this writing, they
 | |
| are as follows:
 | |
| 
 | |
| 	======================	===============================================
 | |
| 	CDROMPAUSE		Pause Audio Operation
 | |
| 	CDROMRESUME		Resume paused Audio Operation
 | |
| 	CDROMPLAYMSF		Play Audio MSF (struct cdrom_msf)
 | |
| 	CDROMPLAYTRKIND		Play Audio Track/index (struct cdrom_ti)
 | |
| 	CDROMREADTOCHDR		Read TOC header (struct cdrom_tochdr)
 | |
| 	CDROMREADTOCENTRY	Read TOC entry (struct cdrom_tocentry)
 | |
| 	CDROMSTOP		Stop the cdrom drive
 | |
| 	CDROMSTART		Start the cdrom drive
 | |
| 	CDROMEJECT		Ejects the cdrom media
 | |
| 	CDROMVOLCTRL		Control output volume (struct cdrom_volctrl)
 | |
| 	CDROMSUBCHNL		Read subchannel data (struct cdrom_subchnl)
 | |
| 	CDROMREADMODE2		Read CDROM mode 2 data (2336 Bytes)
 | |
| 				(struct cdrom_read)
 | |
| 	CDROMREADMODE1		Read CDROM mode 1 data (2048 Bytes)
 | |
| 				(struct cdrom_read)
 | |
| 	CDROMREADAUDIO		(struct cdrom_read_audio)
 | |
| 	CDROMEJECT_SW		enable(1)/disable(0) auto-ejecting
 | |
| 	CDROMMULTISESSION	Obtain the start-of-last-session
 | |
| 				address of multi session disks
 | |
| 				(struct cdrom_multisession)
 | |
| 	CDROM_GET_MCN		Obtain the "Universal Product Code"
 | |
| 				if available (struct cdrom_mcn)
 | |
| 	CDROM_GET_UPC		Deprecated, use CDROM_GET_MCN instead.
 | |
| 	CDROMRESET		hard-reset the drive
 | |
| 	CDROMVOLREAD		Get the drive's volume setting
 | |
| 				(struct cdrom_volctrl)
 | |
| 	CDROMREADRAW		read data in raw mode (2352 Bytes)
 | |
| 				(struct cdrom_read)
 | |
| 	CDROMREADCOOKED		read data in cooked mode
 | |
| 	CDROMSEEK		seek msf address
 | |
| 	CDROMPLAYBLK		scsi-cd only, (struct cdrom_blk)
 | |
| 	CDROMREADALL		read all 2646 bytes
 | |
| 	CDROMGETSPINDOWN	return 4-bit spindown value
 | |
| 	CDROMSETSPINDOWN	set 4-bit spindown value
 | |
| 	CDROMCLOSETRAY		pendant of CDROMEJECT
 | |
| 	CDROM_SET_OPTIONS	Set behavior options
 | |
| 	CDROM_CLEAR_OPTIONS	Clear behavior options
 | |
| 	CDROM_SELECT_SPEED	Set the CD-ROM speed
 | |
| 	CDROM_SELECT_DISC	Select disc (for juke-boxes)
 | |
| 	CDROM_MEDIA_CHANGED	Check is media changed
 | |
| 	CDROM_DRIVE_STATUS	Get tray position, etc.
 | |
| 	CDROM_DISC_STATUS	Get disc type, etc.
 | |
| 	CDROM_CHANGER_NSLOTS	Get number of slots
 | |
| 	CDROM_LOCKDOOR		lock or unlock door
 | |
| 	CDROM_DEBUG		Turn debug messages on/off
 | |
| 	CDROM_GET_CAPABILITY	get capabilities
 | |
| 	CDROMAUDIOBUFSIZ	set the audio buffer size
 | |
| 	DVD_READ_STRUCT		Read structure
 | |
| 	DVD_WRITE_STRUCT	Write structure
 | |
| 	DVD_AUTH		Authentication
 | |
| 	CDROM_SEND_PACKET	send a packet to the drive
 | |
| 	CDROM_NEXT_WRITABLE	get next writable block
 | |
| 	CDROM_LAST_WRITTEN	get last block written on disc
 | |
| 	======================	===============================================
 | |
| 
 | |
| 
 | |
| The information that follows was determined from reading kernel source
 | |
| code.  It is likely that some corrections will be made over time.
 | |
| 
 | |
| ------------------------------------------------------------------------------
 | |
| 
 | |
| General:
 | |
| 
 | |
| 	Unless otherwise specified, all ioctl calls return 0 on success
 | |
| 	and -1 with errno set to an appropriate value on error.  (Some
 | |
| 	ioctls return non-negative data values.)
 | |
| 
 | |
| 	Unless otherwise specified, all ioctl calls return -1 and set
 | |
| 	errno to EFAULT on a failed attempt to copy data to or from user
 | |
| 	address space.
 | |
| 
 | |
| 	Individual drivers may return error codes not listed here.
 | |
| 
 | |
| 	Unless otherwise specified, all data structures and constants
 | |
| 	are defined in <linux/cdrom.h>
 | |
| 
 | |
| ------------------------------------------------------------------------------
 | |
| 
 | |
| 
 | |
| CDROMPAUSE
 | |
| 	Pause Audio Operation
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  ioctl(fd, CDROMPAUSE, 0);
 | |
| 
 | |
| 
 | |
| 	inputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	error return:
 | |
| 	  - ENOSYS	cd drive not audio-capable.
 | |
| 
 | |
| 
 | |
| CDROMRESUME
 | |
| 	Resume paused Audio Operation
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  ioctl(fd, CDROMRESUME, 0);
 | |
| 
 | |
| 
 | |
| 	inputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	error return:
 | |
| 	  - ENOSYS	cd drive not audio-capable.
 | |
| 
 | |
| 
 | |
| CDROMPLAYMSF
 | |
| 	Play Audio MSF
 | |
| 
 | |
| 	(struct cdrom_msf)
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  struct cdrom_msf msf;
 | |
| 
 | |
| 	  ioctl(fd, CDROMPLAYMSF, &msf);
 | |
| 
 | |
| 	inputs:
 | |
| 		cdrom_msf structure, describing a segment of music to play
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	error return:
 | |
| 	  - ENOSYS	cd drive not audio-capable.
 | |
| 
 | |
| 	notes:
 | |
| 		- MSF stands for minutes-seconds-frames
 | |
| 		- LBA stands for logical block address
 | |
| 		- Segment is described as start and end times, where each time
 | |
| 		  is described as minutes:seconds:frames.
 | |
| 		  A frame is 1/75 of a second.
 | |
| 
 | |
| 
 | |
| CDROMPLAYTRKIND
 | |
| 	Play Audio Track/index
 | |
| 
 | |
| 	(struct cdrom_ti)
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  struct cdrom_ti ti;
 | |
| 
 | |
| 	  ioctl(fd, CDROMPLAYTRKIND, &ti);
 | |
| 
 | |
| 	inputs:
 | |
| 		cdrom_ti structure, describing a segment of music to play
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	error return:
 | |
| 	  - ENOSYS	cd drive not audio-capable.
 | |
| 
 | |
| 	notes:
 | |
| 		- Segment is described as start and end times, where each time
 | |
| 		  is described as a track and an index.
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROMREADTOCHDR
 | |
| 	Read TOC header
 | |
| 
 | |
| 	(struct cdrom_tochdr)
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  cdrom_tochdr header;
 | |
| 
 | |
| 	  ioctl(fd, CDROMREADTOCHDR, &header);
 | |
| 
 | |
| 	inputs:
 | |
| 		cdrom_tochdr structure
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		cdrom_tochdr structure
 | |
| 
 | |
| 
 | |
| 	error return:
 | |
| 	  - ENOSYS	cd drive not audio-capable.
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROMREADTOCENTRY
 | |
| 	Read TOC entry
 | |
| 
 | |
| 	(struct cdrom_tocentry)
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  struct cdrom_tocentry entry;
 | |
| 
 | |
| 	  ioctl(fd, CDROMREADTOCENTRY, &entry);
 | |
| 
 | |
| 	inputs:
 | |
| 		cdrom_tocentry structure
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		cdrom_tocentry structure
 | |
| 
 | |
| 
 | |
| 	error return:
 | |
| 	  - ENOSYS	cd drive not audio-capable.
 | |
| 	  - EINVAL	entry.cdte_format not CDROM_MSF or CDROM_LBA
 | |
| 	  - EINVAL	requested track out of bounds
 | |
| 	  - EIO		I/O error reading TOC
 | |
| 
 | |
| 	notes:
 | |
| 		- TOC stands for Table Of Contents
 | |
| 		- MSF stands for minutes-seconds-frames
 | |
| 		- LBA stands for logical block address
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROMSTOP
 | |
| 	Stop the cdrom drive
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  ioctl(fd, CDROMSTOP, 0);
 | |
| 
 | |
| 
 | |
| 	inputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	error return:
 | |
| 	  - ENOSYS	cd drive not audio-capable.
 | |
| 
 | |
| 	notes:
 | |
| 	  - Exact interpretation of this ioctl depends on the device,
 | |
| 	    but most seem to spin the drive down.
 | |
| 
 | |
| 
 | |
| CDROMSTART
 | |
| 	Start the cdrom drive
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  ioctl(fd, CDROMSTART, 0);
 | |
| 
 | |
| 
 | |
| 	inputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	error return:
 | |
| 	  - ENOSYS	cd drive not audio-capable.
 | |
| 
 | |
| 	notes:
 | |
| 	  - Exact interpretation of this ioctl depends on the device,
 | |
| 	    but most seem to spin the drive up and/or close the tray.
 | |
| 	    Other devices ignore the ioctl completely.
 | |
| 
 | |
| 
 | |
| CDROMEJECT
 | |
| 	- Ejects the cdrom media
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  ioctl(fd, CDROMEJECT, 0);
 | |
| 
 | |
| 
 | |
| 	inputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	error returns:
 | |
| 	  - ENOSYS	cd drive not capable of ejecting
 | |
| 	  - EBUSY	other processes are accessing drive, or door is locked
 | |
| 
 | |
| 	notes:
 | |
| 		- See CDROM_LOCKDOOR, below.
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROMCLOSETRAY
 | |
| 	pendant of CDROMEJECT
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  ioctl(fd, CDROMCLOSETRAY, 0);
 | |
| 
 | |
| 
 | |
| 	inputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	error returns:
 | |
| 	  - ENOSYS	cd drive not capable of closing the tray
 | |
| 	  - EBUSY	other processes are accessing drive, or door is locked
 | |
| 
 | |
| 	notes:
 | |
| 		- See CDROM_LOCKDOOR, below.
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROMVOLCTRL
 | |
| 	Control output volume (struct cdrom_volctrl)
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  struct cdrom_volctrl volume;
 | |
| 
 | |
| 	  ioctl(fd, CDROMVOLCTRL, &volume);
 | |
| 
 | |
| 	inputs:
 | |
| 		cdrom_volctrl structure containing volumes for up to 4
 | |
| 		channels.
 | |
| 
 | |
| 	outputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	error return:
 | |
| 	  - ENOSYS	cd drive not audio-capable.
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROMVOLREAD
 | |
| 	Get the drive's volume setting
 | |
| 
 | |
| 	(struct cdrom_volctrl)
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  struct cdrom_volctrl volume;
 | |
| 
 | |
| 	  ioctl(fd, CDROMVOLREAD, &volume);
 | |
| 
 | |
| 	inputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		The current volume settings.
 | |
| 
 | |
| 
 | |
| 	error return:
 | |
| 	  - ENOSYS	cd drive not audio-capable.
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROMSUBCHNL
 | |
| 	Read subchannel data
 | |
| 
 | |
| 	(struct cdrom_subchnl)
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  struct cdrom_subchnl q;
 | |
| 
 | |
| 	  ioctl(fd, CDROMSUBCHNL, &q);
 | |
| 
 | |
| 	inputs:
 | |
| 		cdrom_subchnl structure
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		cdrom_subchnl structure
 | |
| 
 | |
| 
 | |
| 	error return:
 | |
| 	  - ENOSYS	cd drive not audio-capable.
 | |
| 	  - EINVAL	format not CDROM_MSF or CDROM_LBA
 | |
| 
 | |
| 	notes:
 | |
| 		- Format is converted to CDROM_MSF or CDROM_LBA
 | |
| 		  as per user request on return
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROMREADRAW
 | |
| 	read data in raw mode (2352 Bytes)
 | |
| 
 | |
| 	(struct cdrom_read)
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  union {
 | |
| 
 | |
| 	    struct cdrom_msf msf;		/* input */
 | |
| 	    char buffer[CD_FRAMESIZE_RAW];	/* return */
 | |
| 	  } arg;
 | |
| 	  ioctl(fd, CDROMREADRAW, &arg);
 | |
| 
 | |
| 	inputs:
 | |
| 		cdrom_msf structure indicating an address to read.
 | |
| 
 | |
| 		Only the start values are significant.
 | |
| 
 | |
| 	outputs:
 | |
| 		Data written to address provided by user.
 | |
| 
 | |
| 
 | |
| 	error return:
 | |
| 	  - EINVAL	address less than 0, or msf less than 0:2:0
 | |
| 	  - ENOMEM	out of memory
 | |
| 
 | |
| 	notes:
 | |
| 		- As of 2.6.8.1, comments in <linux/cdrom.h> indicate that this
 | |
| 		  ioctl accepts a cdrom_read structure, but actual source code
 | |
| 		  reads a cdrom_msf structure and writes a buffer of data to
 | |
| 		  the same address.
 | |
| 
 | |
| 		- MSF values are converted to LBA values via this formula::
 | |
| 
 | |
| 		    lba = (((m * CD_SECS) + s) * CD_FRAMES + f) - CD_MSF_OFFSET;
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROMREADMODE1
 | |
| 	Read CDROM mode 1 data (2048 Bytes)
 | |
| 
 | |
| 	(struct cdrom_read)
 | |
| 
 | |
| 	notes:
 | |
| 		Identical to CDROMREADRAW except that block size is
 | |
| 		CD_FRAMESIZE (2048) bytes
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROMREADMODE2
 | |
| 	Read CDROM mode 2 data (2336 Bytes)
 | |
| 
 | |
| 	(struct cdrom_read)
 | |
| 
 | |
| 	notes:
 | |
| 		Identical to CDROMREADRAW except that block size is
 | |
| 		CD_FRAMESIZE_RAW0 (2336) bytes
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROMREADAUDIO
 | |
| 	(struct cdrom_read_audio)
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  struct cdrom_read_audio ra;
 | |
| 
 | |
| 	  ioctl(fd, CDROMREADAUDIO, &ra);
 | |
| 
 | |
| 	inputs:
 | |
| 		cdrom_read_audio structure containing read start
 | |
| 		point and length
 | |
| 
 | |
| 	outputs:
 | |
| 		audio data, returned to buffer indicated by ra
 | |
| 
 | |
| 
 | |
| 	error return:
 | |
| 	  - EINVAL	format not CDROM_MSF or CDROM_LBA
 | |
| 	  - EINVAL	nframes not in range [1 75]
 | |
| 	  - ENXIO	drive has no queue (probably means invalid fd)
 | |
| 	  - ENOMEM	out of memory
 | |
| 
 | |
| 
 | |
| CDROMEJECT_SW
 | |
| 	enable(1)/disable(0) auto-ejecting
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  int val;
 | |
| 
 | |
| 	  ioctl(fd, CDROMEJECT_SW, val);
 | |
| 
 | |
| 	inputs:
 | |
| 		Flag specifying auto-eject flag.
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	error return:
 | |
| 	  - ENOSYS	Drive is not capable of ejecting.
 | |
| 	  - EBUSY	Door is locked
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROMMULTISESSION
 | |
| 	Obtain the start-of-last-session address of multi session disks
 | |
| 
 | |
| 	(struct cdrom_multisession)
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  struct cdrom_multisession ms_info;
 | |
| 
 | |
| 	  ioctl(fd, CDROMMULTISESSION, &ms_info);
 | |
| 
 | |
| 	inputs:
 | |
| 		cdrom_multisession structure containing desired
 | |
| 
 | |
| 	  format.
 | |
| 
 | |
| 	outputs:
 | |
| 		cdrom_multisession structure is filled with last_session
 | |
| 		information.
 | |
| 
 | |
| 	error return:
 | |
| 	  - EINVAL	format not CDROM_MSF or CDROM_LBA
 | |
| 
 | |
| 
 | |
| CDROM_GET_MCN
 | |
| 	Obtain the "Universal Product Code"
 | |
| 	if available
 | |
| 
 | |
| 	(struct cdrom_mcn)
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  struct cdrom_mcn mcn;
 | |
| 
 | |
| 	  ioctl(fd, CDROM_GET_MCN, &mcn);
 | |
| 
 | |
| 	inputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		Universal Product Code
 | |
| 
 | |
| 
 | |
| 	error return:
 | |
| 	  - ENOSYS	Drive is not capable of reading MCN data.
 | |
| 
 | |
| 	notes:
 | |
| 		- Source code comments state::
 | |
| 
 | |
| 		    The following function is implemented, although very few
 | |
| 		    audio discs give Universal Product Code information, which
 | |
| 		    should just be the Medium Catalog Number on the box.  Note,
 | |
| 		    that the way the code is written on the CD is /not/ uniform
 | |
| 		    across all discs!
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROM_GET_UPC
 | |
| 	CDROM_GET_MCN  (deprecated)
 | |
| 
 | |
| 
 | |
| 	Not implemented, as of 2.6.8.1
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROMRESET
 | |
| 	hard-reset the drive
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  ioctl(fd, CDROMRESET, 0);
 | |
| 
 | |
| 
 | |
| 	inputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	error return:
 | |
| 	  - EACCES	Access denied:  requires CAP_SYS_ADMIN
 | |
| 	  - ENOSYS	Drive is not capable of resetting.
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROMREADCOOKED
 | |
| 	read data in cooked mode
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  u8 buffer[CD_FRAMESIZE]
 | |
| 
 | |
| 	  ioctl(fd, CDROMREADCOOKED, buffer);
 | |
| 
 | |
| 	inputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		2048 bytes of data, "cooked" mode.
 | |
| 
 | |
| 
 | |
| 	notes:
 | |
| 		Not implemented on all drives.
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROMREADALL
 | |
| 	read all 2646 bytes
 | |
| 
 | |
| 
 | |
| 	Same as CDROMREADCOOKED, but reads 2646 bytes.
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROMSEEK
 | |
| 	seek msf address
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  struct cdrom_msf msf;
 | |
| 
 | |
| 	  ioctl(fd, CDROMSEEK, &msf);
 | |
| 
 | |
| 	inputs:
 | |
| 		MSF address to seek to.
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROMPLAYBLK
 | |
| 	scsi-cd only
 | |
| 
 | |
| 	(struct cdrom_blk)
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  struct cdrom_blk blk;
 | |
| 
 | |
| 	  ioctl(fd, CDROMPLAYBLK, &blk);
 | |
| 
 | |
| 	inputs:
 | |
| 		Region to play
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROMGETSPINDOWN
 | |
| 	usage::
 | |
| 
 | |
| 	  char spindown;
 | |
| 
 | |
| 	  ioctl(fd, CDROMGETSPINDOWN, &spindown);
 | |
| 
 | |
| 	inputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		The value of the current 4-bit spindown value.
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROMSETSPINDOWN
 | |
| 	usage::
 | |
| 
 | |
| 	  char spindown
 | |
| 
 | |
| 	  ioctl(fd, CDROMSETSPINDOWN, &spindown);
 | |
| 
 | |
| 	inputs:
 | |
| 		4-bit value used to control spindown (TODO: more detail here)
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROM_SET_OPTIONS
 | |
| 	Set behavior options
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  int options;
 | |
| 
 | |
| 	  ioctl(fd, CDROM_SET_OPTIONS, options);
 | |
| 
 | |
| 	inputs:
 | |
| 		New values for drive options.  The logical 'or' of:
 | |
| 
 | |
| 	    ==============      ==================================
 | |
| 	    CDO_AUTO_CLOSE	close tray on first open(2)
 | |
| 	    CDO_AUTO_EJECT	open tray on last release
 | |
| 	    CDO_USE_FFLAGS	use O_NONBLOCK information on open
 | |
| 	    CDO_LOCK		lock tray on open files
 | |
| 	    CDO_CHECK_TYPE	check type on open for data
 | |
| 	    ==============      ==================================
 | |
| 
 | |
| 	outputs:
 | |
| 		Returns the resulting options settings in the
 | |
| 		ioctl return value.  Returns -1 on error.
 | |
| 
 | |
| 	error return:
 | |
| 	  - ENOSYS	selected option(s) not supported by drive.
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROM_CLEAR_OPTIONS
 | |
| 	Clear behavior options
 | |
| 
 | |
| 
 | |
| 	Same as CDROM_SET_OPTIONS, except that selected options are
 | |
| 	turned off.
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROM_SELECT_SPEED
 | |
| 	Set the CD-ROM speed
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  int speed;
 | |
| 
 | |
| 	  ioctl(fd, CDROM_SELECT_SPEED, speed);
 | |
| 
 | |
| 	inputs:
 | |
| 		New drive speed.
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	error return:
 | |
| 	  - ENOSYS	speed selection not supported by drive.
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROM_SELECT_DISC
 | |
| 	Select disc (for juke-boxes)
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  int disk;
 | |
| 
 | |
| 	  ioctl(fd, CDROM_SELECT_DISC, disk);
 | |
| 
 | |
| 	inputs:
 | |
| 		Disk to load into drive.
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	error return:
 | |
| 	  - EINVAL	Disk number beyond capacity of drive
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROM_MEDIA_CHANGED
 | |
| 	Check is media changed
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  int slot;
 | |
| 
 | |
| 	  ioctl(fd, CDROM_MEDIA_CHANGED, slot);
 | |
| 
 | |
| 	inputs:
 | |
| 		Slot number to be tested, always zero except for jukeboxes.
 | |
| 
 | |
| 		May also be special values CDSL_NONE or CDSL_CURRENT
 | |
| 
 | |
| 	outputs:
 | |
| 		Ioctl return value is 0 or 1 depending on whether the media
 | |
| 
 | |
| 	  has been changed, or -1 on error.
 | |
| 
 | |
| 	error returns:
 | |
| 	  - ENOSYS	Drive can't detect media change
 | |
| 	  - EINVAL	Slot number beyond capacity of drive
 | |
| 	  - ENOMEM	Out of memory
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROM_DRIVE_STATUS
 | |
| 	Get tray position, etc.
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  int slot;
 | |
| 
 | |
| 	  ioctl(fd, CDROM_DRIVE_STATUS, slot);
 | |
| 
 | |
| 	inputs:
 | |
| 		Slot number to be tested, always zero except for jukeboxes.
 | |
| 
 | |
| 		May also be special values CDSL_NONE or CDSL_CURRENT
 | |
| 
 | |
| 	outputs:
 | |
| 		Ioctl return value will be one of the following values
 | |
| 
 | |
| 	  from <linux/cdrom.h>:
 | |
| 
 | |
| 	    =================== ==========================
 | |
| 	    CDS_NO_INFO		Information not available.
 | |
| 	    CDS_NO_DISC
 | |
| 	    CDS_TRAY_OPEN
 | |
| 	    CDS_DRIVE_NOT_READY
 | |
| 	    CDS_DISC_OK
 | |
| 	    -1			error
 | |
| 	    =================== ==========================
 | |
| 
 | |
| 	error returns:
 | |
| 	  - ENOSYS	Drive can't detect drive status
 | |
| 	  - EINVAL	Slot number beyond capacity of drive
 | |
| 	  - ENOMEM	Out of memory
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROM_DISC_STATUS
 | |
| 	Get disc type, etc.
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  ioctl(fd, CDROM_DISC_STATUS, 0);
 | |
| 
 | |
| 
 | |
| 	inputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		Ioctl return value will be one of the following values
 | |
| 
 | |
| 	  from <linux/cdrom.h>:
 | |
| 
 | |
| 	    - CDS_NO_INFO
 | |
| 	    - CDS_AUDIO
 | |
| 	    - CDS_MIXED
 | |
| 	    - CDS_XA_2_2
 | |
| 	    - CDS_XA_2_1
 | |
| 	    - CDS_DATA_1
 | |
| 
 | |
| 	error returns:
 | |
| 		none at present
 | |
| 
 | |
| 	notes:
 | |
| 	    - Source code comments state::
 | |
| 
 | |
| 
 | |
| 		Ok, this is where problems start.  The current interface for
 | |
| 		the CDROM_DISC_STATUS ioctl is flawed.  It makes the false
 | |
| 		assumption that CDs are all CDS_DATA_1 or all CDS_AUDIO, etc.
 | |
| 		Unfortunately, while this is often the case, it is also
 | |
| 		very common for CDs to have some tracks with data, and some
 | |
| 		tracks with audio.	Just because I feel like it, I declare
 | |
| 		the following to be the best way to cope.  If the CD has
 | |
| 		ANY data tracks on it, it will be returned as a data CD.
 | |
| 		If it has any XA tracks, I will return it as that.	Now I
 | |
| 		could simplify this interface by combining these returns with
 | |
| 		the above, but this more clearly demonstrates the problem
 | |
| 		with the current interface.  Too bad this wasn't designed
 | |
| 		to use bitmasks...	       -Erik
 | |
| 
 | |
| 		Well, now we have the option CDS_MIXED: a mixed-type CD.
 | |
| 		User level programmers might feel the ioctl is not very
 | |
| 		useful.
 | |
| 				---david
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROM_CHANGER_NSLOTS
 | |
| 	Get number of slots
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  ioctl(fd, CDROM_CHANGER_NSLOTS, 0);
 | |
| 
 | |
| 
 | |
| 	inputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		The ioctl return value will be the number of slots in a
 | |
| 		CD changer.  Typically 1 for non-multi-disk devices.
 | |
| 
 | |
| 	error returns:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROM_LOCKDOOR
 | |
| 	lock or unlock door
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  int lock;
 | |
| 
 | |
| 	  ioctl(fd, CDROM_LOCKDOOR, lock);
 | |
| 
 | |
| 	inputs:
 | |
| 		Door lock flag, 1=lock, 0=unlock
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	error returns:
 | |
| 	  - EDRIVE_CANT_DO_THIS
 | |
| 
 | |
| 				Door lock function not supported.
 | |
| 	  - EBUSY
 | |
| 
 | |
| 				Attempt to unlock when multiple users
 | |
| 				have the drive open and not CAP_SYS_ADMIN
 | |
| 
 | |
| 	notes:
 | |
| 		As of 2.6.8.1, the lock flag is a global lock, meaning that
 | |
| 		all CD drives will be locked or unlocked together.  This is
 | |
| 		probably a bug.
 | |
| 
 | |
| 		The EDRIVE_CANT_DO_THIS value is defined in <linux/cdrom.h>
 | |
| 		and is currently (2.6.8.1) the same as EOPNOTSUPP
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROM_DEBUG
 | |
| 	Turn debug messages on/off
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  int debug;
 | |
| 
 | |
| 	  ioctl(fd, CDROM_DEBUG, debug);
 | |
| 
 | |
| 	inputs:
 | |
| 		Cdrom debug flag, 0=disable, 1=enable
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		The ioctl return value will be the new debug flag.
 | |
| 
 | |
| 
 | |
| 	error return:
 | |
| 	  - EACCES	Access denied:  requires CAP_SYS_ADMIN
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROM_GET_CAPABILITY
 | |
| 	get capabilities
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  ioctl(fd, CDROM_GET_CAPABILITY, 0);
 | |
| 
 | |
| 
 | |
| 	inputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		The ioctl return value is the current device capability
 | |
| 		flags.  See CDC_CLOSE_TRAY, CDC_OPEN_TRAY, etc.
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROMAUDIOBUFSIZ
 | |
| 	set the audio buffer size
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  int arg;
 | |
| 
 | |
| 	  ioctl(fd, CDROMAUDIOBUFSIZ, val);
 | |
| 
 | |
| 	inputs:
 | |
| 		New audio buffer size
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		The ioctl return value is the new audio buffer size, or -1
 | |
| 		on error.
 | |
| 
 | |
| 	error return:
 | |
| 	  - ENOSYS	Not supported by this driver.
 | |
| 
 | |
| 	notes:
 | |
| 		Not supported by all drivers.
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| DVD_READ_STRUCT			Read structure
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  dvd_struct s;
 | |
| 
 | |
| 	  ioctl(fd, DVD_READ_STRUCT, &s);
 | |
| 
 | |
| 	inputs:
 | |
| 		dvd_struct structure, containing:
 | |
| 
 | |
| 	    =================== ==========================================
 | |
| 	    type		specifies the information desired, one of
 | |
| 				DVD_STRUCT_PHYSICAL, DVD_STRUCT_COPYRIGHT,
 | |
| 				DVD_STRUCT_DISCKEY, DVD_STRUCT_BCA,
 | |
| 				DVD_STRUCT_MANUFACT
 | |
| 	    physical.layer_num	desired layer, indexed from 0
 | |
| 	    copyright.layer_num	desired layer, indexed from 0
 | |
| 	    disckey.agid
 | |
| 	    =================== ==========================================
 | |
| 
 | |
| 	outputs:
 | |
| 		dvd_struct structure, containing:
 | |
| 
 | |
| 	    =================== ================================
 | |
| 	    physical		for type == DVD_STRUCT_PHYSICAL
 | |
| 	    copyright		for type == DVD_STRUCT_COPYRIGHT
 | |
| 	    disckey.value	for type == DVD_STRUCT_DISCKEY
 | |
| 	    bca.{len,value}	for type == DVD_STRUCT_BCA
 | |
| 	    manufact.{len,valu}	for type == DVD_STRUCT_MANUFACT
 | |
| 	    =================== ================================
 | |
| 
 | |
| 	error returns:
 | |
| 	  - EINVAL	physical.layer_num exceeds number of layers
 | |
| 	  - EIO		Received invalid response from drive
 | |
| 
 | |
| 
 | |
| 
 | |
| DVD_WRITE_STRUCT		Write structure
 | |
| 
 | |
| 	Not implemented, as of 2.6.8.1
 | |
| 
 | |
| 
 | |
| 
 | |
| DVD_AUTH			Authentication
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  dvd_authinfo ai;
 | |
| 
 | |
| 	  ioctl(fd, DVD_AUTH, &ai);
 | |
| 
 | |
| 	inputs:
 | |
| 		dvd_authinfo structure.  See <linux/cdrom.h>
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		dvd_authinfo structure.
 | |
| 
 | |
| 
 | |
| 	error return:
 | |
| 	  - ENOTTY	ai.type not recognized.
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROM_SEND_PACKET
 | |
| 	send a packet to the drive
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  struct cdrom_generic_command cgc;
 | |
| 
 | |
| 	  ioctl(fd, CDROM_SEND_PACKET, &cgc);
 | |
| 
 | |
| 	inputs:
 | |
| 		cdrom_generic_command structure containing the packet to send.
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		none
 | |
| 
 | |
| 	  cdrom_generic_command structure containing results.
 | |
| 
 | |
| 	error return:
 | |
| 	  - EIO
 | |
| 
 | |
| 			command failed.
 | |
| 	  - EPERM
 | |
| 
 | |
| 			Operation not permitted, either because a
 | |
| 			write command was attempted on a drive which
 | |
| 			is opened read-only, or because the command
 | |
| 			requires CAP_SYS_RAWIO
 | |
| 	  - EINVAL
 | |
| 
 | |
| 			cgc.data_direction not set
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROM_NEXT_WRITABLE
 | |
| 	get next writable block
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  long next;
 | |
| 
 | |
| 	  ioctl(fd, CDROM_NEXT_WRITABLE, &next);
 | |
| 
 | |
| 	inputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		The next writable block.
 | |
| 
 | |
| 
 | |
| 	notes:
 | |
| 		If the device does not support this ioctl directly, the
 | |
| 
 | |
| 	  ioctl will return CDROM_LAST_WRITTEN + 7.
 | |
| 
 | |
| 
 | |
| 
 | |
| CDROM_LAST_WRITTEN
 | |
| 	get last block written on disc
 | |
| 
 | |
| 
 | |
| 	usage::
 | |
| 
 | |
| 	  long last;
 | |
| 
 | |
| 	  ioctl(fd, CDROM_LAST_WRITTEN, &last);
 | |
| 
 | |
| 	inputs:
 | |
| 		none
 | |
| 
 | |
| 
 | |
| 	outputs:
 | |
| 		The last block written on disc
 | |
| 
 | |
| 
 | |
| 	notes:
 | |
| 		If the device does not support this ioctl directly, the
 | |
| 		result is derived from the disc's table of contents.  If the
 | |
| 		table of contents can't be read, this ioctl returns an
 | |
| 		error.
 |