104950071SJonathan Corbet============================ 204950071SJonathan CorbetSummary of CDROM ioctl calls 304950071SJonathan Corbet============================ 404950071SJonathan Corbet 504950071SJonathan Corbet- Edward A. Falk <efalk@google.com> 604950071SJonathan Corbet 704950071SJonathan CorbetNovember, 2004 804950071SJonathan Corbet 904950071SJonathan CorbetThis document attempts to describe the ioctl(2) calls supported by 1004950071SJonathan Corbetthe CDROM layer. These are by-and-large implemented (as of Linux 2.6) 1104950071SJonathan Corbetin drivers/cdrom/cdrom.c and drivers/block/scsi_ioctl.c 1204950071SJonathan Corbet 1304950071SJonathan Corbetioctl values are listed in <linux/cdrom.h>. As of this writing, they 1404950071SJonathan Corbetare as follows: 1504950071SJonathan Corbet 169c03fee7SPhillip Potter ======================== =============================================== 1704950071SJonathan Corbet CDROMPAUSE Pause Audio Operation 1804950071SJonathan Corbet CDROMRESUME Resume paused Audio Operation 1904950071SJonathan Corbet CDROMPLAYMSF Play Audio MSF (struct cdrom_msf) 2004950071SJonathan Corbet CDROMPLAYTRKIND Play Audio Track/index (struct cdrom_ti) 2104950071SJonathan Corbet CDROMREADTOCHDR Read TOC header (struct cdrom_tochdr) 2204950071SJonathan Corbet CDROMREADTOCENTRY Read TOC entry (struct cdrom_tocentry) 2304950071SJonathan Corbet CDROMSTOP Stop the cdrom drive 2404950071SJonathan Corbet CDROMSTART Start the cdrom drive 2504950071SJonathan Corbet CDROMEJECT Ejects the cdrom media 2604950071SJonathan Corbet CDROMVOLCTRL Control output volume (struct cdrom_volctrl) 2704950071SJonathan Corbet CDROMSUBCHNL Read subchannel data (struct cdrom_subchnl) 2804950071SJonathan Corbet CDROMREADMODE2 Read CDROM mode 2 data (2336 Bytes) 2904950071SJonathan Corbet (struct cdrom_read) 3004950071SJonathan Corbet CDROMREADMODE1 Read CDROM mode 1 data (2048 Bytes) 3104950071SJonathan Corbet (struct cdrom_read) 3204950071SJonathan Corbet CDROMREADAUDIO (struct cdrom_read_audio) 3304950071SJonathan Corbet CDROMEJECT_SW enable(1)/disable(0) auto-ejecting 3404950071SJonathan Corbet CDROMMULTISESSION Obtain the start-of-last-session 3504950071SJonathan Corbet address of multi session disks 3604950071SJonathan Corbet (struct cdrom_multisession) 3704950071SJonathan Corbet CDROM_GET_MCN Obtain the "Universal Product Code" 3804950071SJonathan Corbet if available (struct cdrom_mcn) 3904950071SJonathan Corbet CDROM_GET_UPC Deprecated, use CDROM_GET_MCN instead. 4004950071SJonathan Corbet CDROMRESET hard-reset the drive 4104950071SJonathan Corbet CDROMVOLREAD Get the drive's volume setting 4204950071SJonathan Corbet (struct cdrom_volctrl) 4304950071SJonathan Corbet CDROMREADRAW read data in raw mode (2352 Bytes) 4404950071SJonathan Corbet (struct cdrom_read) 4504950071SJonathan Corbet CDROMREADCOOKED read data in cooked mode 4604950071SJonathan Corbet CDROMSEEK seek msf address 4704950071SJonathan Corbet CDROMPLAYBLK scsi-cd only, (struct cdrom_blk) 4804950071SJonathan Corbet CDROMREADALL read all 2646 bytes 4904950071SJonathan Corbet CDROMGETSPINDOWN return 4-bit spindown value 5004950071SJonathan Corbet CDROMSETSPINDOWN set 4-bit spindown value 5104950071SJonathan Corbet CDROMCLOSETRAY pendant of CDROMEJECT 5204950071SJonathan Corbet CDROM_SET_OPTIONS Set behavior options 5304950071SJonathan Corbet CDROM_CLEAR_OPTIONS Clear behavior options 5404950071SJonathan Corbet CDROM_SELECT_SPEED Set the CD-ROM speed 5504950071SJonathan Corbet CDROM_SELECT_DISC Select disc (for juke-boxes) 5604950071SJonathan Corbet CDROM_MEDIA_CHANGED Check is media changed 5767f1e027SLukas Prediger CDROM_TIMED_MEDIA_CHANGE Check if media changed 5867f1e027SLukas Prediger since given time 5967f1e027SLukas Prediger (struct cdrom_timed_media_change_info) 6004950071SJonathan Corbet CDROM_DRIVE_STATUS Get tray position, etc. 6104950071SJonathan Corbet CDROM_DISC_STATUS Get disc type, etc. 6204950071SJonathan Corbet CDROM_CHANGER_NSLOTS Get number of slots 6304950071SJonathan Corbet CDROM_LOCKDOOR lock or unlock door 6404950071SJonathan Corbet CDROM_DEBUG Turn debug messages on/off 6504950071SJonathan Corbet CDROM_GET_CAPABILITY get capabilities 6604950071SJonathan Corbet CDROMAUDIOBUFSIZ set the audio buffer size 6704950071SJonathan Corbet DVD_READ_STRUCT Read structure 6804950071SJonathan Corbet DVD_WRITE_STRUCT Write structure 6904950071SJonathan Corbet DVD_AUTH Authentication 7004950071SJonathan Corbet CDROM_SEND_PACKET send a packet to the drive 7104950071SJonathan Corbet CDROM_NEXT_WRITABLE get next writable block 7204950071SJonathan Corbet CDROM_LAST_WRITTEN get last block written on disc 739c03fee7SPhillip Potter ======================== =============================================== 7404950071SJonathan Corbet 7504950071SJonathan Corbet 7604950071SJonathan CorbetThe information that follows was determined from reading kernel source 7704950071SJonathan Corbetcode. It is likely that some corrections will be made over time. 7804950071SJonathan Corbet 7904950071SJonathan Corbet------------------------------------------------------------------------------ 8004950071SJonathan Corbet 8104950071SJonathan CorbetGeneral: 8204950071SJonathan Corbet 8304950071SJonathan Corbet Unless otherwise specified, all ioctl calls return 0 on success 8404950071SJonathan Corbet and -1 with errno set to an appropriate value on error. (Some 8504950071SJonathan Corbet ioctls return non-negative data values.) 8604950071SJonathan Corbet 8704950071SJonathan Corbet Unless otherwise specified, all ioctl calls return -1 and set 8804950071SJonathan Corbet errno to EFAULT on a failed attempt to copy data to or from user 8904950071SJonathan Corbet address space. 9004950071SJonathan Corbet 9104950071SJonathan Corbet Individual drivers may return error codes not listed here. 9204950071SJonathan Corbet 9304950071SJonathan Corbet Unless otherwise specified, all data structures and constants 9404950071SJonathan Corbet are defined in <linux/cdrom.h> 9504950071SJonathan Corbet 9604950071SJonathan Corbet------------------------------------------------------------------------------ 9704950071SJonathan Corbet 9804950071SJonathan Corbet 9904950071SJonathan CorbetCDROMPAUSE 10004950071SJonathan Corbet Pause Audio Operation 10104950071SJonathan Corbet 10204950071SJonathan Corbet 10304950071SJonathan Corbet usage:: 10404950071SJonathan Corbet 10504950071SJonathan Corbet ioctl(fd, CDROMPAUSE, 0); 10604950071SJonathan Corbet 10704950071SJonathan Corbet 10804950071SJonathan Corbet inputs: 10904950071SJonathan Corbet none 11004950071SJonathan Corbet 11104950071SJonathan Corbet 11204950071SJonathan Corbet outputs: 11304950071SJonathan Corbet none 11404950071SJonathan Corbet 11504950071SJonathan Corbet 11604950071SJonathan Corbet error return: 11704950071SJonathan Corbet - ENOSYS cd drive not audio-capable. 11804950071SJonathan Corbet 11904950071SJonathan Corbet 12004950071SJonathan CorbetCDROMRESUME 12104950071SJonathan Corbet Resume paused Audio Operation 12204950071SJonathan Corbet 12304950071SJonathan Corbet 12404950071SJonathan Corbet usage:: 12504950071SJonathan Corbet 12604950071SJonathan Corbet ioctl(fd, CDROMRESUME, 0); 12704950071SJonathan Corbet 12804950071SJonathan Corbet 12904950071SJonathan Corbet inputs: 13004950071SJonathan Corbet none 13104950071SJonathan Corbet 13204950071SJonathan Corbet 13304950071SJonathan Corbet outputs: 13404950071SJonathan Corbet none 13504950071SJonathan Corbet 13604950071SJonathan Corbet 13704950071SJonathan Corbet error return: 13804950071SJonathan Corbet - ENOSYS cd drive not audio-capable. 13904950071SJonathan Corbet 14004950071SJonathan Corbet 14104950071SJonathan CorbetCDROMPLAYMSF 14204950071SJonathan Corbet Play Audio MSF 14304950071SJonathan Corbet 14404950071SJonathan Corbet (struct cdrom_msf) 14504950071SJonathan Corbet 14604950071SJonathan Corbet 14704950071SJonathan Corbet usage:: 14804950071SJonathan Corbet 14904950071SJonathan Corbet struct cdrom_msf msf; 15004950071SJonathan Corbet 15104950071SJonathan Corbet ioctl(fd, CDROMPLAYMSF, &msf); 15204950071SJonathan Corbet 15304950071SJonathan Corbet inputs: 15404950071SJonathan Corbet cdrom_msf structure, describing a segment of music to play 15504950071SJonathan Corbet 15604950071SJonathan Corbet 15704950071SJonathan Corbet outputs: 15804950071SJonathan Corbet none 15904950071SJonathan Corbet 16004950071SJonathan Corbet 16104950071SJonathan Corbet error return: 16204950071SJonathan Corbet - ENOSYS cd drive not audio-capable. 16304950071SJonathan Corbet 16404950071SJonathan Corbet notes: 16504950071SJonathan Corbet - MSF stands for minutes-seconds-frames 16604950071SJonathan Corbet - LBA stands for logical block address 16704950071SJonathan Corbet - Segment is described as start and end times, where each time 16804950071SJonathan Corbet is described as minutes:seconds:frames. 16904950071SJonathan Corbet A frame is 1/75 of a second. 17004950071SJonathan Corbet 17104950071SJonathan Corbet 17204950071SJonathan CorbetCDROMPLAYTRKIND 17304950071SJonathan Corbet Play Audio Track/index 17404950071SJonathan Corbet 17504950071SJonathan Corbet (struct cdrom_ti) 17604950071SJonathan Corbet 17704950071SJonathan Corbet 17804950071SJonathan Corbet usage:: 17904950071SJonathan Corbet 18004950071SJonathan Corbet struct cdrom_ti ti; 18104950071SJonathan Corbet 18204950071SJonathan Corbet ioctl(fd, CDROMPLAYTRKIND, &ti); 18304950071SJonathan Corbet 18404950071SJonathan Corbet inputs: 18504950071SJonathan Corbet cdrom_ti structure, describing a segment of music to play 18604950071SJonathan Corbet 18704950071SJonathan Corbet 18804950071SJonathan Corbet outputs: 18904950071SJonathan Corbet none 19004950071SJonathan Corbet 19104950071SJonathan Corbet 19204950071SJonathan Corbet error return: 19304950071SJonathan Corbet - ENOSYS cd drive not audio-capable. 19404950071SJonathan Corbet 19504950071SJonathan Corbet notes: 19604950071SJonathan Corbet - Segment is described as start and end times, where each time 19704950071SJonathan Corbet is described as a track and an index. 19804950071SJonathan Corbet 19904950071SJonathan Corbet 20004950071SJonathan Corbet 20104950071SJonathan CorbetCDROMREADTOCHDR 20204950071SJonathan Corbet Read TOC header 20304950071SJonathan Corbet 20404950071SJonathan Corbet (struct cdrom_tochdr) 20504950071SJonathan Corbet 20604950071SJonathan Corbet 20704950071SJonathan Corbet usage:: 20804950071SJonathan Corbet 20904950071SJonathan Corbet cdrom_tochdr header; 21004950071SJonathan Corbet 21104950071SJonathan Corbet ioctl(fd, CDROMREADTOCHDR, &header); 21204950071SJonathan Corbet 21304950071SJonathan Corbet inputs: 21404950071SJonathan Corbet cdrom_tochdr structure 21504950071SJonathan Corbet 21604950071SJonathan Corbet 21704950071SJonathan Corbet outputs: 21804950071SJonathan Corbet cdrom_tochdr structure 21904950071SJonathan Corbet 22004950071SJonathan Corbet 22104950071SJonathan Corbet error return: 22204950071SJonathan Corbet - ENOSYS cd drive not audio-capable. 22304950071SJonathan Corbet 22404950071SJonathan Corbet 22504950071SJonathan Corbet 22604950071SJonathan CorbetCDROMREADTOCENTRY 22704950071SJonathan Corbet Read TOC entry 22804950071SJonathan Corbet 22904950071SJonathan Corbet (struct cdrom_tocentry) 23004950071SJonathan Corbet 23104950071SJonathan Corbet 23204950071SJonathan Corbet usage:: 23304950071SJonathan Corbet 23404950071SJonathan Corbet struct cdrom_tocentry entry; 23504950071SJonathan Corbet 23604950071SJonathan Corbet ioctl(fd, CDROMREADTOCENTRY, &entry); 23704950071SJonathan Corbet 23804950071SJonathan Corbet inputs: 23904950071SJonathan Corbet cdrom_tocentry structure 24004950071SJonathan Corbet 24104950071SJonathan Corbet 24204950071SJonathan Corbet outputs: 24304950071SJonathan Corbet cdrom_tocentry structure 24404950071SJonathan Corbet 24504950071SJonathan Corbet 24604950071SJonathan Corbet error return: 24704950071SJonathan Corbet - ENOSYS cd drive not audio-capable. 24804950071SJonathan Corbet - EINVAL entry.cdte_format not CDROM_MSF or CDROM_LBA 24904950071SJonathan Corbet - EINVAL requested track out of bounds 25004950071SJonathan Corbet - EIO I/O error reading TOC 25104950071SJonathan Corbet 25204950071SJonathan Corbet notes: 25304950071SJonathan Corbet - TOC stands for Table Of Contents 25404950071SJonathan Corbet - MSF stands for minutes-seconds-frames 25504950071SJonathan Corbet - LBA stands for logical block address 25604950071SJonathan Corbet 25704950071SJonathan Corbet 25804950071SJonathan Corbet 25904950071SJonathan CorbetCDROMSTOP 26004950071SJonathan Corbet Stop the cdrom drive 26104950071SJonathan Corbet 26204950071SJonathan Corbet 26304950071SJonathan Corbet usage:: 26404950071SJonathan Corbet 26504950071SJonathan Corbet ioctl(fd, CDROMSTOP, 0); 26604950071SJonathan Corbet 26704950071SJonathan Corbet 26804950071SJonathan Corbet inputs: 26904950071SJonathan Corbet none 27004950071SJonathan Corbet 27104950071SJonathan Corbet 27204950071SJonathan Corbet outputs: 27304950071SJonathan Corbet none 27404950071SJonathan Corbet 27504950071SJonathan Corbet 27604950071SJonathan Corbet error return: 27704950071SJonathan Corbet - ENOSYS cd drive not audio-capable. 27804950071SJonathan Corbet 27904950071SJonathan Corbet notes: 28004950071SJonathan Corbet - Exact interpretation of this ioctl depends on the device, 28104950071SJonathan Corbet but most seem to spin the drive down. 28204950071SJonathan Corbet 28304950071SJonathan Corbet 28404950071SJonathan CorbetCDROMSTART 28504950071SJonathan Corbet Start the cdrom drive 28604950071SJonathan Corbet 28704950071SJonathan Corbet 28804950071SJonathan Corbet usage:: 28904950071SJonathan Corbet 29004950071SJonathan Corbet ioctl(fd, CDROMSTART, 0); 29104950071SJonathan Corbet 29204950071SJonathan Corbet 29304950071SJonathan Corbet inputs: 29404950071SJonathan Corbet none 29504950071SJonathan Corbet 29604950071SJonathan Corbet 29704950071SJonathan Corbet outputs: 29804950071SJonathan Corbet none 29904950071SJonathan Corbet 30004950071SJonathan Corbet 30104950071SJonathan Corbet error return: 30204950071SJonathan Corbet - ENOSYS cd drive not audio-capable. 30304950071SJonathan Corbet 30404950071SJonathan Corbet notes: 30504950071SJonathan Corbet - Exact interpretation of this ioctl depends on the device, 30604950071SJonathan Corbet but most seem to spin the drive up and/or close the tray. 30704950071SJonathan Corbet Other devices ignore the ioctl completely. 30804950071SJonathan Corbet 30904950071SJonathan Corbet 31004950071SJonathan CorbetCDROMEJECT 31104950071SJonathan Corbet - Ejects the cdrom media 31204950071SJonathan Corbet 31304950071SJonathan Corbet 31404950071SJonathan Corbet usage:: 31504950071SJonathan Corbet 31604950071SJonathan Corbet ioctl(fd, CDROMEJECT, 0); 31704950071SJonathan Corbet 31804950071SJonathan Corbet 31904950071SJonathan Corbet inputs: 32004950071SJonathan Corbet none 32104950071SJonathan Corbet 32204950071SJonathan Corbet 32304950071SJonathan Corbet outputs: 32404950071SJonathan Corbet none 32504950071SJonathan Corbet 32604950071SJonathan Corbet 32704950071SJonathan Corbet error returns: 32804950071SJonathan Corbet - ENOSYS cd drive not capable of ejecting 32904950071SJonathan Corbet - EBUSY other processes are accessing drive, or door is locked 33004950071SJonathan Corbet 33104950071SJonathan Corbet notes: 33204950071SJonathan Corbet - See CDROM_LOCKDOOR, below. 33304950071SJonathan Corbet 33404950071SJonathan Corbet 33504950071SJonathan Corbet 33604950071SJonathan Corbet 33704950071SJonathan CorbetCDROMCLOSETRAY 33804950071SJonathan Corbet pendant of CDROMEJECT 33904950071SJonathan Corbet 34004950071SJonathan Corbet 34104950071SJonathan Corbet usage:: 34204950071SJonathan Corbet 34304950071SJonathan Corbet ioctl(fd, CDROMCLOSETRAY, 0); 34404950071SJonathan Corbet 34504950071SJonathan Corbet 34604950071SJonathan Corbet inputs: 34704950071SJonathan Corbet none 34804950071SJonathan Corbet 34904950071SJonathan Corbet 35004950071SJonathan Corbet outputs: 35104950071SJonathan Corbet none 35204950071SJonathan Corbet 35304950071SJonathan Corbet 35404950071SJonathan Corbet error returns: 35504950071SJonathan Corbet - ENOSYS cd drive not capable of closing the tray 35604950071SJonathan Corbet - EBUSY other processes are accessing drive, or door is locked 35704950071SJonathan Corbet 35804950071SJonathan Corbet notes: 35904950071SJonathan Corbet - See CDROM_LOCKDOOR, below. 36004950071SJonathan Corbet 36104950071SJonathan Corbet 36204950071SJonathan Corbet 36304950071SJonathan Corbet 36404950071SJonathan CorbetCDROMVOLCTRL 36504950071SJonathan Corbet Control output volume (struct cdrom_volctrl) 36604950071SJonathan Corbet 36704950071SJonathan Corbet 36804950071SJonathan Corbet usage:: 36904950071SJonathan Corbet 37004950071SJonathan Corbet struct cdrom_volctrl volume; 37104950071SJonathan Corbet 37204950071SJonathan Corbet ioctl(fd, CDROMVOLCTRL, &volume); 37304950071SJonathan Corbet 37404950071SJonathan Corbet inputs: 37504950071SJonathan Corbet cdrom_volctrl structure containing volumes for up to 4 37604950071SJonathan Corbet channels. 37704950071SJonathan Corbet 37804950071SJonathan Corbet outputs: 37904950071SJonathan Corbet none 38004950071SJonathan Corbet 38104950071SJonathan Corbet 38204950071SJonathan Corbet error return: 38304950071SJonathan Corbet - ENOSYS cd drive not audio-capable. 38404950071SJonathan Corbet 38504950071SJonathan Corbet 38604950071SJonathan Corbet 38704950071SJonathan CorbetCDROMVOLREAD 38804950071SJonathan Corbet Get the drive's volume setting 38904950071SJonathan Corbet 39004950071SJonathan Corbet (struct cdrom_volctrl) 39104950071SJonathan Corbet 39204950071SJonathan Corbet 39304950071SJonathan Corbet usage:: 39404950071SJonathan Corbet 39504950071SJonathan Corbet struct cdrom_volctrl volume; 39604950071SJonathan Corbet 39704950071SJonathan Corbet ioctl(fd, CDROMVOLREAD, &volume); 39804950071SJonathan Corbet 39904950071SJonathan Corbet inputs: 40004950071SJonathan Corbet none 40104950071SJonathan Corbet 40204950071SJonathan Corbet 40304950071SJonathan Corbet outputs: 40404950071SJonathan Corbet The current volume settings. 40504950071SJonathan Corbet 40604950071SJonathan Corbet 40704950071SJonathan Corbet error return: 40804950071SJonathan Corbet - ENOSYS cd drive not audio-capable. 40904950071SJonathan Corbet 41004950071SJonathan Corbet 41104950071SJonathan Corbet 41204950071SJonathan CorbetCDROMSUBCHNL 41304950071SJonathan Corbet Read subchannel data 41404950071SJonathan Corbet 41504950071SJonathan Corbet (struct cdrom_subchnl) 41604950071SJonathan Corbet 41704950071SJonathan Corbet 41804950071SJonathan Corbet usage:: 41904950071SJonathan Corbet 42004950071SJonathan Corbet struct cdrom_subchnl q; 42104950071SJonathan Corbet 42204950071SJonathan Corbet ioctl(fd, CDROMSUBCHNL, &q); 42304950071SJonathan Corbet 42404950071SJonathan Corbet inputs: 42504950071SJonathan Corbet cdrom_subchnl structure 42604950071SJonathan Corbet 42704950071SJonathan Corbet 42804950071SJonathan Corbet outputs: 42904950071SJonathan Corbet cdrom_subchnl structure 43004950071SJonathan Corbet 43104950071SJonathan Corbet 43204950071SJonathan Corbet error return: 43304950071SJonathan Corbet - ENOSYS cd drive not audio-capable. 43404950071SJonathan Corbet - EINVAL format not CDROM_MSF or CDROM_LBA 43504950071SJonathan Corbet 43604950071SJonathan Corbet notes: 43704950071SJonathan Corbet - Format is converted to CDROM_MSF or CDROM_LBA 43804950071SJonathan Corbet as per user request on return 43904950071SJonathan Corbet 44004950071SJonathan Corbet 44104950071SJonathan Corbet 44204950071SJonathan CorbetCDROMREADRAW 44304950071SJonathan Corbet read data in raw mode (2352 Bytes) 44404950071SJonathan Corbet 44504950071SJonathan Corbet (struct cdrom_read) 44604950071SJonathan Corbet 44704950071SJonathan Corbet usage:: 44804950071SJonathan Corbet 44904950071SJonathan Corbet union { 45004950071SJonathan Corbet 45104950071SJonathan Corbet struct cdrom_msf msf; /* input */ 45204950071SJonathan Corbet char buffer[CD_FRAMESIZE_RAW]; /* return */ 45304950071SJonathan Corbet } arg; 45404950071SJonathan Corbet ioctl(fd, CDROMREADRAW, &arg); 45504950071SJonathan Corbet 45604950071SJonathan Corbet inputs: 45704950071SJonathan Corbet cdrom_msf structure indicating an address to read. 45804950071SJonathan Corbet 45904950071SJonathan Corbet Only the start values are significant. 46004950071SJonathan Corbet 46104950071SJonathan Corbet outputs: 46204950071SJonathan Corbet Data written to address provided by user. 46304950071SJonathan Corbet 46404950071SJonathan Corbet 46504950071SJonathan Corbet error return: 46604950071SJonathan Corbet - EINVAL address less than 0, or msf less than 0:2:0 46704950071SJonathan Corbet - ENOMEM out of memory 46804950071SJonathan Corbet 46904950071SJonathan Corbet notes: 47004950071SJonathan Corbet - As of 2.6.8.1, comments in <linux/cdrom.h> indicate that this 47104950071SJonathan Corbet ioctl accepts a cdrom_read structure, but actual source code 47204950071SJonathan Corbet reads a cdrom_msf structure and writes a buffer of data to 47304950071SJonathan Corbet the same address. 47404950071SJonathan Corbet 47504950071SJonathan Corbet - MSF values are converted to LBA values via this formula:: 47604950071SJonathan Corbet 47704950071SJonathan Corbet lba = (((m * CD_SECS) + s) * CD_FRAMES + f) - CD_MSF_OFFSET; 47804950071SJonathan Corbet 47904950071SJonathan Corbet 48004950071SJonathan Corbet 48104950071SJonathan Corbet 48204950071SJonathan CorbetCDROMREADMODE1 48304950071SJonathan Corbet Read CDROM mode 1 data (2048 Bytes) 48404950071SJonathan Corbet 48504950071SJonathan Corbet (struct cdrom_read) 48604950071SJonathan Corbet 48704950071SJonathan Corbet notes: 48804950071SJonathan Corbet Identical to CDROMREADRAW except that block size is 48904950071SJonathan Corbet CD_FRAMESIZE (2048) bytes 49004950071SJonathan Corbet 49104950071SJonathan Corbet 49204950071SJonathan Corbet 49304950071SJonathan CorbetCDROMREADMODE2 49404950071SJonathan Corbet Read CDROM mode 2 data (2336 Bytes) 49504950071SJonathan Corbet 49604950071SJonathan Corbet (struct cdrom_read) 49704950071SJonathan Corbet 49804950071SJonathan Corbet notes: 49904950071SJonathan Corbet Identical to CDROMREADRAW except that block size is 50004950071SJonathan Corbet CD_FRAMESIZE_RAW0 (2336) bytes 50104950071SJonathan Corbet 50204950071SJonathan Corbet 50304950071SJonathan Corbet 50404950071SJonathan CorbetCDROMREADAUDIO 50504950071SJonathan Corbet (struct cdrom_read_audio) 50604950071SJonathan Corbet 50704950071SJonathan Corbet usage:: 50804950071SJonathan Corbet 50904950071SJonathan Corbet struct cdrom_read_audio ra; 51004950071SJonathan Corbet 51104950071SJonathan Corbet ioctl(fd, CDROMREADAUDIO, &ra); 51204950071SJonathan Corbet 51304950071SJonathan Corbet inputs: 51404950071SJonathan Corbet cdrom_read_audio structure containing read start 51504950071SJonathan Corbet point and length 51604950071SJonathan Corbet 51704950071SJonathan Corbet outputs: 51804950071SJonathan Corbet audio data, returned to buffer indicated by ra 51904950071SJonathan Corbet 52004950071SJonathan Corbet 52104950071SJonathan Corbet error return: 52204950071SJonathan Corbet - EINVAL format not CDROM_MSF or CDROM_LBA 52304950071SJonathan Corbet - EINVAL nframes not in range [1 75] 52404950071SJonathan Corbet - ENXIO drive has no queue (probably means invalid fd) 52504950071SJonathan Corbet - ENOMEM out of memory 52604950071SJonathan Corbet 52704950071SJonathan Corbet 52804950071SJonathan CorbetCDROMEJECT_SW 52904950071SJonathan Corbet enable(1)/disable(0) auto-ejecting 53004950071SJonathan Corbet 53104950071SJonathan Corbet 53204950071SJonathan Corbet usage:: 53304950071SJonathan Corbet 53404950071SJonathan Corbet int val; 53504950071SJonathan Corbet 53604950071SJonathan Corbet ioctl(fd, CDROMEJECT_SW, val); 53704950071SJonathan Corbet 53804950071SJonathan Corbet inputs: 53904950071SJonathan Corbet Flag specifying auto-eject flag. 54004950071SJonathan Corbet 54104950071SJonathan Corbet 54204950071SJonathan Corbet outputs: 54304950071SJonathan Corbet none 54404950071SJonathan Corbet 54504950071SJonathan Corbet 54604950071SJonathan Corbet error return: 54704950071SJonathan Corbet - ENOSYS Drive is not capable of ejecting. 54804950071SJonathan Corbet - EBUSY Door is locked 54904950071SJonathan Corbet 55004950071SJonathan Corbet 55104950071SJonathan Corbet 55204950071SJonathan Corbet 55304950071SJonathan CorbetCDROMMULTISESSION 55404950071SJonathan Corbet Obtain the start-of-last-session address of multi session disks 55504950071SJonathan Corbet 55604950071SJonathan Corbet (struct cdrom_multisession) 55704950071SJonathan Corbet 55804950071SJonathan Corbet usage:: 55904950071SJonathan Corbet 56004950071SJonathan Corbet struct cdrom_multisession ms_info; 56104950071SJonathan Corbet 56204950071SJonathan Corbet ioctl(fd, CDROMMULTISESSION, &ms_info); 56304950071SJonathan Corbet 56404950071SJonathan Corbet inputs: 56504950071SJonathan Corbet cdrom_multisession structure containing desired 56604950071SJonathan Corbet 56704950071SJonathan Corbet format. 56804950071SJonathan Corbet 56904950071SJonathan Corbet outputs: 57004950071SJonathan Corbet cdrom_multisession structure is filled with last_session 57104950071SJonathan Corbet information. 57204950071SJonathan Corbet 57304950071SJonathan Corbet error return: 57404950071SJonathan Corbet - EINVAL format not CDROM_MSF or CDROM_LBA 57504950071SJonathan Corbet 57604950071SJonathan Corbet 57704950071SJonathan CorbetCDROM_GET_MCN 57804950071SJonathan Corbet Obtain the "Universal Product Code" 57904950071SJonathan Corbet if available 58004950071SJonathan Corbet 58104950071SJonathan Corbet (struct cdrom_mcn) 58204950071SJonathan Corbet 58304950071SJonathan Corbet 58404950071SJonathan Corbet usage:: 58504950071SJonathan Corbet 58604950071SJonathan Corbet struct cdrom_mcn mcn; 58704950071SJonathan Corbet 58804950071SJonathan Corbet ioctl(fd, CDROM_GET_MCN, &mcn); 58904950071SJonathan Corbet 59004950071SJonathan Corbet inputs: 59104950071SJonathan Corbet none 59204950071SJonathan Corbet 59304950071SJonathan Corbet 59404950071SJonathan Corbet outputs: 59504950071SJonathan Corbet Universal Product Code 59604950071SJonathan Corbet 59704950071SJonathan Corbet 59804950071SJonathan Corbet error return: 59904950071SJonathan Corbet - ENOSYS Drive is not capable of reading MCN data. 60004950071SJonathan Corbet 60104950071SJonathan Corbet notes: 60204950071SJonathan Corbet - Source code comments state:: 60304950071SJonathan Corbet 60404950071SJonathan Corbet The following function is implemented, although very few 60504950071SJonathan Corbet audio discs give Universal Product Code information, which 60604950071SJonathan Corbet should just be the Medium Catalog Number on the box. Note, 60704950071SJonathan Corbet that the way the code is written on the CD is /not/ uniform 60804950071SJonathan Corbet across all discs! 60904950071SJonathan Corbet 61004950071SJonathan Corbet 61104950071SJonathan Corbet 61204950071SJonathan Corbet 61304950071SJonathan CorbetCDROM_GET_UPC 61404950071SJonathan Corbet CDROM_GET_MCN (deprecated) 61504950071SJonathan Corbet 61604950071SJonathan Corbet 61704950071SJonathan Corbet Not implemented, as of 2.6.8.1 61804950071SJonathan Corbet 61904950071SJonathan Corbet 62004950071SJonathan Corbet 62104950071SJonathan CorbetCDROMRESET 62204950071SJonathan Corbet hard-reset the drive 62304950071SJonathan Corbet 62404950071SJonathan Corbet 62504950071SJonathan Corbet usage:: 62604950071SJonathan Corbet 62704950071SJonathan Corbet ioctl(fd, CDROMRESET, 0); 62804950071SJonathan Corbet 62904950071SJonathan Corbet 63004950071SJonathan Corbet inputs: 63104950071SJonathan Corbet none 63204950071SJonathan Corbet 63304950071SJonathan Corbet 63404950071SJonathan Corbet outputs: 63504950071SJonathan Corbet none 63604950071SJonathan Corbet 63704950071SJonathan Corbet 63804950071SJonathan Corbet error return: 63904950071SJonathan Corbet - EACCES Access denied: requires CAP_SYS_ADMIN 64004950071SJonathan Corbet - ENOSYS Drive is not capable of resetting. 64104950071SJonathan Corbet 64204950071SJonathan Corbet 64304950071SJonathan Corbet 64404950071SJonathan Corbet 64504950071SJonathan CorbetCDROMREADCOOKED 64604950071SJonathan Corbet read data in cooked mode 64704950071SJonathan Corbet 64804950071SJonathan Corbet 64904950071SJonathan Corbet usage:: 65004950071SJonathan Corbet 65104950071SJonathan Corbet u8 buffer[CD_FRAMESIZE] 65204950071SJonathan Corbet 65304950071SJonathan Corbet ioctl(fd, CDROMREADCOOKED, buffer); 65404950071SJonathan Corbet 65504950071SJonathan Corbet inputs: 65604950071SJonathan Corbet none 65704950071SJonathan Corbet 65804950071SJonathan Corbet 65904950071SJonathan Corbet outputs: 66004950071SJonathan Corbet 2048 bytes of data, "cooked" mode. 66104950071SJonathan Corbet 66204950071SJonathan Corbet 66304950071SJonathan Corbet notes: 66404950071SJonathan Corbet Not implemented on all drives. 66504950071SJonathan Corbet 66604950071SJonathan Corbet 66704950071SJonathan Corbet 66804950071SJonathan Corbet 66904950071SJonathan Corbet 67004950071SJonathan CorbetCDROMREADALL 67104950071SJonathan Corbet read all 2646 bytes 67204950071SJonathan Corbet 67304950071SJonathan Corbet 67404950071SJonathan Corbet Same as CDROMREADCOOKED, but reads 2646 bytes. 67504950071SJonathan Corbet 67604950071SJonathan Corbet 67704950071SJonathan Corbet 67804950071SJonathan CorbetCDROMSEEK 67904950071SJonathan Corbet seek msf address 68004950071SJonathan Corbet 68104950071SJonathan Corbet 68204950071SJonathan Corbet usage:: 68304950071SJonathan Corbet 68404950071SJonathan Corbet struct cdrom_msf msf; 68504950071SJonathan Corbet 68604950071SJonathan Corbet ioctl(fd, CDROMSEEK, &msf); 68704950071SJonathan Corbet 68804950071SJonathan Corbet inputs: 68904950071SJonathan Corbet MSF address to seek to. 69004950071SJonathan Corbet 69104950071SJonathan Corbet 69204950071SJonathan Corbet outputs: 69304950071SJonathan Corbet none 69404950071SJonathan Corbet 69504950071SJonathan Corbet 69604950071SJonathan Corbet 69704950071SJonathan Corbet 69804950071SJonathan CorbetCDROMPLAYBLK 69904950071SJonathan Corbet scsi-cd only 70004950071SJonathan Corbet 70104950071SJonathan Corbet (struct cdrom_blk) 70204950071SJonathan Corbet 70304950071SJonathan Corbet 70404950071SJonathan Corbet usage:: 70504950071SJonathan Corbet 70604950071SJonathan Corbet struct cdrom_blk blk; 70704950071SJonathan Corbet 70804950071SJonathan Corbet ioctl(fd, CDROMPLAYBLK, &blk); 70904950071SJonathan Corbet 71004950071SJonathan Corbet inputs: 71104950071SJonathan Corbet Region to play 71204950071SJonathan Corbet 71304950071SJonathan Corbet 71404950071SJonathan Corbet outputs: 71504950071SJonathan Corbet none 71604950071SJonathan Corbet 71704950071SJonathan Corbet 71804950071SJonathan Corbet 71904950071SJonathan Corbet 72004950071SJonathan CorbetCDROMGETSPINDOWN 7218fa10ee1SPaul Gortmaker Obsolete, was ide-cd only 7228fa10ee1SPaul Gortmaker 7238fa10ee1SPaul Gortmaker 72404950071SJonathan Corbet usage:: 72504950071SJonathan Corbet 72604950071SJonathan Corbet char spindown; 72704950071SJonathan Corbet 72804950071SJonathan Corbet ioctl(fd, CDROMGETSPINDOWN, &spindown); 72904950071SJonathan Corbet 73004950071SJonathan Corbet inputs: 73104950071SJonathan Corbet none 73204950071SJonathan Corbet 73304950071SJonathan Corbet 73404950071SJonathan Corbet outputs: 73504950071SJonathan Corbet The value of the current 4-bit spindown value. 73604950071SJonathan Corbet 73704950071SJonathan Corbet 73804950071SJonathan Corbet 73904950071SJonathan Corbet 74004950071SJonathan Corbet 74104950071SJonathan CorbetCDROMSETSPINDOWN 7428fa10ee1SPaul Gortmaker Obsolete, was ide-cd only 7438fa10ee1SPaul Gortmaker 7448fa10ee1SPaul Gortmaker 74504950071SJonathan Corbet usage:: 74604950071SJonathan Corbet 74704950071SJonathan Corbet char spindown 74804950071SJonathan Corbet 74904950071SJonathan Corbet ioctl(fd, CDROMSETSPINDOWN, &spindown); 75004950071SJonathan Corbet 75104950071SJonathan Corbet inputs: 75204950071SJonathan Corbet 4-bit value used to control spindown (TODO: more detail here) 75304950071SJonathan Corbet 75404950071SJonathan Corbet 75504950071SJonathan Corbet outputs: 75604950071SJonathan Corbet none 75704950071SJonathan Corbet 75804950071SJonathan Corbet 75904950071SJonathan Corbet 76004950071SJonathan Corbet 76104950071SJonathan Corbet 76204950071SJonathan Corbet 76304950071SJonathan CorbetCDROM_SET_OPTIONS 76404950071SJonathan Corbet Set behavior options 76504950071SJonathan Corbet 76604950071SJonathan Corbet 76704950071SJonathan Corbet usage:: 76804950071SJonathan Corbet 76904950071SJonathan Corbet int options; 77004950071SJonathan Corbet 77104950071SJonathan Corbet ioctl(fd, CDROM_SET_OPTIONS, options); 77204950071SJonathan Corbet 77304950071SJonathan Corbet inputs: 77404950071SJonathan Corbet New values for drive options. The logical 'or' of: 77504950071SJonathan Corbet 77604950071SJonathan Corbet ============== ================================== 77704950071SJonathan Corbet CDO_AUTO_CLOSE close tray on first open(2) 77804950071SJonathan Corbet CDO_AUTO_EJECT open tray on last release 77904950071SJonathan Corbet CDO_USE_FFLAGS use O_NONBLOCK information on open 78004950071SJonathan Corbet CDO_LOCK lock tray on open files 78104950071SJonathan Corbet CDO_CHECK_TYPE check type on open for data 78204950071SJonathan Corbet ============== ================================== 78304950071SJonathan Corbet 78404950071SJonathan Corbet outputs: 78504950071SJonathan Corbet Returns the resulting options settings in the 78604950071SJonathan Corbet ioctl return value. Returns -1 on error. 78704950071SJonathan Corbet 78804950071SJonathan Corbet error return: 78904950071SJonathan Corbet - ENOSYS selected option(s) not supported by drive. 79004950071SJonathan Corbet 79104950071SJonathan Corbet 79204950071SJonathan Corbet 79304950071SJonathan Corbet 79404950071SJonathan CorbetCDROM_CLEAR_OPTIONS 79504950071SJonathan Corbet Clear behavior options 79604950071SJonathan Corbet 79704950071SJonathan Corbet 79804950071SJonathan Corbet Same as CDROM_SET_OPTIONS, except that selected options are 79904950071SJonathan Corbet turned off. 80004950071SJonathan Corbet 80104950071SJonathan Corbet 80204950071SJonathan Corbet 80304950071SJonathan CorbetCDROM_SELECT_SPEED 80404950071SJonathan Corbet Set the CD-ROM speed 80504950071SJonathan Corbet 80604950071SJonathan Corbet 80704950071SJonathan Corbet usage:: 80804950071SJonathan Corbet 80904950071SJonathan Corbet int speed; 81004950071SJonathan Corbet 81104950071SJonathan Corbet ioctl(fd, CDROM_SELECT_SPEED, speed); 81204950071SJonathan Corbet 81304950071SJonathan Corbet inputs: 81404950071SJonathan Corbet New drive speed. 81504950071SJonathan Corbet 81604950071SJonathan Corbet 81704950071SJonathan Corbet outputs: 81804950071SJonathan Corbet none 81904950071SJonathan Corbet 82004950071SJonathan Corbet 82104950071SJonathan Corbet error return: 82204950071SJonathan Corbet - ENOSYS speed selection not supported by drive. 82304950071SJonathan Corbet 82404950071SJonathan Corbet 82504950071SJonathan Corbet 82604950071SJonathan CorbetCDROM_SELECT_DISC 82704950071SJonathan Corbet Select disc (for juke-boxes) 82804950071SJonathan Corbet 82904950071SJonathan Corbet 83004950071SJonathan Corbet usage:: 83104950071SJonathan Corbet 83204950071SJonathan Corbet int disk; 83304950071SJonathan Corbet 83404950071SJonathan Corbet ioctl(fd, CDROM_SELECT_DISC, disk); 83504950071SJonathan Corbet 83604950071SJonathan Corbet inputs: 83704950071SJonathan Corbet Disk to load into drive. 83804950071SJonathan Corbet 83904950071SJonathan Corbet 84004950071SJonathan Corbet outputs: 84104950071SJonathan Corbet none 84204950071SJonathan Corbet 84304950071SJonathan Corbet 84404950071SJonathan Corbet error return: 84504950071SJonathan Corbet - EINVAL Disk number beyond capacity of drive 84604950071SJonathan Corbet 84704950071SJonathan Corbet 84804950071SJonathan Corbet 84904950071SJonathan CorbetCDROM_MEDIA_CHANGED 85004950071SJonathan Corbet Check is media changed 85104950071SJonathan Corbet 85204950071SJonathan Corbet 85304950071SJonathan Corbet usage:: 85404950071SJonathan Corbet 85504950071SJonathan Corbet int slot; 85604950071SJonathan Corbet 85704950071SJonathan Corbet ioctl(fd, CDROM_MEDIA_CHANGED, slot); 85804950071SJonathan Corbet 85904950071SJonathan Corbet inputs: 86004950071SJonathan Corbet Slot number to be tested, always zero except for jukeboxes. 86104950071SJonathan Corbet 86204950071SJonathan Corbet May also be special values CDSL_NONE or CDSL_CURRENT 86304950071SJonathan Corbet 86404950071SJonathan Corbet outputs: 86504950071SJonathan Corbet Ioctl return value is 0 or 1 depending on whether the media 86604950071SJonathan Corbet 86704950071SJonathan Corbet has been changed, or -1 on error. 86804950071SJonathan Corbet 86904950071SJonathan Corbet error returns: 87004950071SJonathan Corbet - ENOSYS Drive can't detect media change 87104950071SJonathan Corbet - EINVAL Slot number beyond capacity of drive 87204950071SJonathan Corbet - ENOMEM Out of memory 87304950071SJonathan Corbet 87404950071SJonathan Corbet 87504950071SJonathan Corbet 87604950071SJonathan CorbetCDROM_DRIVE_STATUS 87704950071SJonathan Corbet Get tray position, etc. 87804950071SJonathan Corbet 87904950071SJonathan Corbet 88004950071SJonathan Corbet usage:: 88104950071SJonathan Corbet 88204950071SJonathan Corbet int slot; 88304950071SJonathan Corbet 88404950071SJonathan Corbet ioctl(fd, CDROM_DRIVE_STATUS, slot); 88504950071SJonathan Corbet 88604950071SJonathan Corbet inputs: 88704950071SJonathan Corbet Slot number to be tested, always zero except for jukeboxes. 88804950071SJonathan Corbet 88904950071SJonathan Corbet May also be special values CDSL_NONE or CDSL_CURRENT 89004950071SJonathan Corbet 89104950071SJonathan Corbet outputs: 89204950071SJonathan Corbet Ioctl return value will be one of the following values 89304950071SJonathan Corbet 89404950071SJonathan Corbet from <linux/cdrom.h>: 89504950071SJonathan Corbet 89604950071SJonathan Corbet =================== ========================== 89704950071SJonathan Corbet CDS_NO_INFO Information not available. 89804950071SJonathan Corbet CDS_NO_DISC 89904950071SJonathan Corbet CDS_TRAY_OPEN 90004950071SJonathan Corbet CDS_DRIVE_NOT_READY 90104950071SJonathan Corbet CDS_DISC_OK 90204950071SJonathan Corbet -1 error 90304950071SJonathan Corbet =================== ========================== 90404950071SJonathan Corbet 90504950071SJonathan Corbet error returns: 90604950071SJonathan Corbet - ENOSYS Drive can't detect drive status 90704950071SJonathan Corbet - EINVAL Slot number beyond capacity of drive 90804950071SJonathan Corbet - ENOMEM Out of memory 90904950071SJonathan Corbet 91004950071SJonathan Corbet 91104950071SJonathan Corbet 91204950071SJonathan Corbet 91304950071SJonathan CorbetCDROM_DISC_STATUS 91404950071SJonathan Corbet Get disc type, etc. 91504950071SJonathan Corbet 91604950071SJonathan Corbet 91704950071SJonathan Corbet usage:: 91804950071SJonathan Corbet 91904950071SJonathan Corbet ioctl(fd, CDROM_DISC_STATUS, 0); 92004950071SJonathan Corbet 92104950071SJonathan Corbet 92204950071SJonathan Corbet inputs: 92304950071SJonathan Corbet none 92404950071SJonathan Corbet 92504950071SJonathan Corbet 92604950071SJonathan Corbet outputs: 92704950071SJonathan Corbet Ioctl return value will be one of the following values 92804950071SJonathan Corbet 92904950071SJonathan Corbet from <linux/cdrom.h>: 93004950071SJonathan Corbet 93104950071SJonathan Corbet - CDS_NO_INFO 93204950071SJonathan Corbet - CDS_AUDIO 93304950071SJonathan Corbet - CDS_MIXED 93404950071SJonathan Corbet - CDS_XA_2_2 93504950071SJonathan Corbet - CDS_XA_2_1 93604950071SJonathan Corbet - CDS_DATA_1 93704950071SJonathan Corbet 93804950071SJonathan Corbet error returns: 93904950071SJonathan Corbet none at present 94004950071SJonathan Corbet 94104950071SJonathan Corbet notes: 94204950071SJonathan Corbet - Source code comments state:: 94304950071SJonathan Corbet 94404950071SJonathan Corbet 94504950071SJonathan Corbet Ok, this is where problems start. The current interface for 94604950071SJonathan Corbet the CDROM_DISC_STATUS ioctl is flawed. It makes the false 94704950071SJonathan Corbet assumption that CDs are all CDS_DATA_1 or all CDS_AUDIO, etc. 94804950071SJonathan Corbet Unfortunately, while this is often the case, it is also 94904950071SJonathan Corbet very common for CDs to have some tracks with data, and some 95004950071SJonathan Corbet tracks with audio. Just because I feel like it, I declare 95104950071SJonathan Corbet the following to be the best way to cope. If the CD has 95204950071SJonathan Corbet ANY data tracks on it, it will be returned as a data CD. 95304950071SJonathan Corbet If it has any XA tracks, I will return it as that. Now I 95404950071SJonathan Corbet could simplify this interface by combining these returns with 95504950071SJonathan Corbet the above, but this more clearly demonstrates the problem 95604950071SJonathan Corbet with the current interface. Too bad this wasn't designed 95704950071SJonathan Corbet to use bitmasks... -Erik 95804950071SJonathan Corbet 95904950071SJonathan Corbet Well, now we have the option CDS_MIXED: a mixed-type CD. 96004950071SJonathan Corbet User level programmers might feel the ioctl is not very 96104950071SJonathan Corbet useful. 96204950071SJonathan Corbet ---david 96304950071SJonathan Corbet 96404950071SJonathan Corbet 96504950071SJonathan Corbet 96604950071SJonathan Corbet 96704950071SJonathan CorbetCDROM_CHANGER_NSLOTS 96804950071SJonathan Corbet Get number of slots 96904950071SJonathan Corbet 97004950071SJonathan Corbet 97104950071SJonathan Corbet usage:: 97204950071SJonathan Corbet 97304950071SJonathan Corbet ioctl(fd, CDROM_CHANGER_NSLOTS, 0); 97404950071SJonathan Corbet 97504950071SJonathan Corbet 97604950071SJonathan Corbet inputs: 97704950071SJonathan Corbet none 97804950071SJonathan Corbet 97904950071SJonathan Corbet 98004950071SJonathan Corbet outputs: 98104950071SJonathan Corbet The ioctl return value will be the number of slots in a 98204950071SJonathan Corbet CD changer. Typically 1 for non-multi-disk devices. 98304950071SJonathan Corbet 98404950071SJonathan Corbet error returns: 98504950071SJonathan Corbet none 98604950071SJonathan Corbet 98704950071SJonathan Corbet 98804950071SJonathan Corbet 98904950071SJonathan CorbetCDROM_LOCKDOOR 99004950071SJonathan Corbet lock or unlock door 99104950071SJonathan Corbet 99204950071SJonathan Corbet 99304950071SJonathan Corbet usage:: 99404950071SJonathan Corbet 99504950071SJonathan Corbet int lock; 99604950071SJonathan Corbet 99704950071SJonathan Corbet ioctl(fd, CDROM_LOCKDOOR, lock); 99804950071SJonathan Corbet 99904950071SJonathan Corbet inputs: 100004950071SJonathan Corbet Door lock flag, 1=lock, 0=unlock 100104950071SJonathan Corbet 100204950071SJonathan Corbet 100304950071SJonathan Corbet outputs: 100404950071SJonathan Corbet none 100504950071SJonathan Corbet 100604950071SJonathan Corbet 100704950071SJonathan Corbet error returns: 100804950071SJonathan Corbet - EDRIVE_CANT_DO_THIS 100904950071SJonathan Corbet 101004950071SJonathan Corbet Door lock function not supported. 101104950071SJonathan Corbet - EBUSY 101204950071SJonathan Corbet 101304950071SJonathan Corbet Attempt to unlock when multiple users 101404950071SJonathan Corbet have the drive open and not CAP_SYS_ADMIN 101504950071SJonathan Corbet 101604950071SJonathan Corbet notes: 101704950071SJonathan Corbet As of 2.6.8.1, the lock flag is a global lock, meaning that 101804950071SJonathan Corbet all CD drives will be locked or unlocked together. This is 101904950071SJonathan Corbet probably a bug. 102004950071SJonathan Corbet 102104950071SJonathan Corbet The EDRIVE_CANT_DO_THIS value is defined in <linux/cdrom.h> 102204950071SJonathan Corbet and is currently (2.6.8.1) the same as EOPNOTSUPP 102304950071SJonathan Corbet 102404950071SJonathan Corbet 102504950071SJonathan Corbet 102604950071SJonathan CorbetCDROM_DEBUG 102704950071SJonathan Corbet Turn debug messages on/off 102804950071SJonathan Corbet 102904950071SJonathan Corbet 103004950071SJonathan Corbet usage:: 103104950071SJonathan Corbet 103204950071SJonathan Corbet int debug; 103304950071SJonathan Corbet 103404950071SJonathan Corbet ioctl(fd, CDROM_DEBUG, debug); 103504950071SJonathan Corbet 103604950071SJonathan Corbet inputs: 103704950071SJonathan Corbet Cdrom debug flag, 0=disable, 1=enable 103804950071SJonathan Corbet 103904950071SJonathan Corbet 104004950071SJonathan Corbet outputs: 104104950071SJonathan Corbet The ioctl return value will be the new debug flag. 104204950071SJonathan Corbet 104304950071SJonathan Corbet 104404950071SJonathan Corbet error return: 104504950071SJonathan Corbet - EACCES Access denied: requires CAP_SYS_ADMIN 104604950071SJonathan Corbet 104704950071SJonathan Corbet 104804950071SJonathan Corbet 104904950071SJonathan CorbetCDROM_GET_CAPABILITY 105004950071SJonathan Corbet get capabilities 105104950071SJonathan Corbet 105204950071SJonathan Corbet 105304950071SJonathan Corbet usage:: 105404950071SJonathan Corbet 105504950071SJonathan Corbet ioctl(fd, CDROM_GET_CAPABILITY, 0); 105604950071SJonathan Corbet 105704950071SJonathan Corbet 105804950071SJonathan Corbet inputs: 105904950071SJonathan Corbet none 106004950071SJonathan Corbet 106104950071SJonathan Corbet 106204950071SJonathan Corbet outputs: 106304950071SJonathan Corbet The ioctl return value is the current device capability 106404950071SJonathan Corbet flags. See CDC_CLOSE_TRAY, CDC_OPEN_TRAY, etc. 106504950071SJonathan Corbet 106604950071SJonathan Corbet 106704950071SJonathan Corbet 106804950071SJonathan CorbetCDROMAUDIOBUFSIZ 106904950071SJonathan Corbet set the audio buffer size 107004950071SJonathan Corbet 107104950071SJonathan Corbet 107204950071SJonathan Corbet usage:: 107304950071SJonathan Corbet 107404950071SJonathan Corbet int arg; 107504950071SJonathan Corbet 107604950071SJonathan Corbet ioctl(fd, CDROMAUDIOBUFSIZ, val); 107704950071SJonathan Corbet 107804950071SJonathan Corbet inputs: 107904950071SJonathan Corbet New audio buffer size 108004950071SJonathan Corbet 108104950071SJonathan Corbet 108204950071SJonathan Corbet outputs: 108304950071SJonathan Corbet The ioctl return value is the new audio buffer size, or -1 108404950071SJonathan Corbet on error. 108504950071SJonathan Corbet 108604950071SJonathan Corbet error return: 108704950071SJonathan Corbet - ENOSYS Not supported by this driver. 108804950071SJonathan Corbet 108904950071SJonathan Corbet notes: 109004950071SJonathan Corbet Not supported by all drivers. 109104950071SJonathan Corbet 109204950071SJonathan Corbet 109304950071SJonathan Corbet 109404950071SJonathan Corbet 109504950071SJonathan CorbetDVD_READ_STRUCT Read structure 109604950071SJonathan Corbet 109704950071SJonathan Corbet usage:: 109804950071SJonathan Corbet 109904950071SJonathan Corbet dvd_struct s; 110004950071SJonathan Corbet 110104950071SJonathan Corbet ioctl(fd, DVD_READ_STRUCT, &s); 110204950071SJonathan Corbet 110304950071SJonathan Corbet inputs: 110404950071SJonathan Corbet dvd_struct structure, containing: 110504950071SJonathan Corbet 110604950071SJonathan Corbet =================== ========================================== 110704950071SJonathan Corbet type specifies the information desired, one of 110804950071SJonathan Corbet DVD_STRUCT_PHYSICAL, DVD_STRUCT_COPYRIGHT, 110904950071SJonathan Corbet DVD_STRUCT_DISCKEY, DVD_STRUCT_BCA, 111004950071SJonathan Corbet DVD_STRUCT_MANUFACT 111104950071SJonathan Corbet physical.layer_num desired layer, indexed from 0 111204950071SJonathan Corbet copyright.layer_num desired layer, indexed from 0 111304950071SJonathan Corbet disckey.agid 111404950071SJonathan Corbet =================== ========================================== 111504950071SJonathan Corbet 111604950071SJonathan Corbet outputs: 111704950071SJonathan Corbet dvd_struct structure, containing: 111804950071SJonathan Corbet 111904950071SJonathan Corbet =================== ================================ 112004950071SJonathan Corbet physical for type == DVD_STRUCT_PHYSICAL 112104950071SJonathan Corbet copyright for type == DVD_STRUCT_COPYRIGHT 112204950071SJonathan Corbet disckey.value for type == DVD_STRUCT_DISCKEY 112304950071SJonathan Corbet bca.{len,value} for type == DVD_STRUCT_BCA 112404950071SJonathan Corbet manufact.{len,valu} for type == DVD_STRUCT_MANUFACT 112504950071SJonathan Corbet =================== ================================ 112604950071SJonathan Corbet 112704950071SJonathan Corbet error returns: 112804950071SJonathan Corbet - EINVAL physical.layer_num exceeds number of layers 112904950071SJonathan Corbet - EIO Received invalid response from drive 113004950071SJonathan Corbet 113104950071SJonathan Corbet 113204950071SJonathan Corbet 113304950071SJonathan CorbetDVD_WRITE_STRUCT Write structure 113404950071SJonathan Corbet 113504950071SJonathan Corbet Not implemented, as of 2.6.8.1 113604950071SJonathan Corbet 113704950071SJonathan Corbet 113804950071SJonathan Corbet 113904950071SJonathan CorbetDVD_AUTH Authentication 114004950071SJonathan Corbet 114104950071SJonathan Corbet usage:: 114204950071SJonathan Corbet 114304950071SJonathan Corbet dvd_authinfo ai; 114404950071SJonathan Corbet 114504950071SJonathan Corbet ioctl(fd, DVD_AUTH, &ai); 114604950071SJonathan Corbet 114704950071SJonathan Corbet inputs: 114804950071SJonathan Corbet dvd_authinfo structure. See <linux/cdrom.h> 114904950071SJonathan Corbet 115004950071SJonathan Corbet 115104950071SJonathan Corbet outputs: 115204950071SJonathan Corbet dvd_authinfo structure. 115304950071SJonathan Corbet 115404950071SJonathan Corbet 115504950071SJonathan Corbet error return: 115604950071SJonathan Corbet - ENOTTY ai.type not recognized. 115704950071SJonathan Corbet 115804950071SJonathan Corbet 115904950071SJonathan Corbet 116004950071SJonathan CorbetCDROM_SEND_PACKET 116104950071SJonathan Corbet send a packet to the drive 116204950071SJonathan Corbet 116304950071SJonathan Corbet 116404950071SJonathan Corbet usage:: 116504950071SJonathan Corbet 116604950071SJonathan Corbet struct cdrom_generic_command cgc; 116704950071SJonathan Corbet 116804950071SJonathan Corbet ioctl(fd, CDROM_SEND_PACKET, &cgc); 116904950071SJonathan Corbet 117004950071SJonathan Corbet inputs: 117104950071SJonathan Corbet cdrom_generic_command structure containing the packet to send. 117204950071SJonathan Corbet 117304950071SJonathan Corbet 117404950071SJonathan Corbet outputs: 117504950071SJonathan Corbet none 117604950071SJonathan Corbet 117704950071SJonathan Corbet cdrom_generic_command structure containing results. 117804950071SJonathan Corbet 117904950071SJonathan Corbet error return: 118004950071SJonathan Corbet - EIO 118104950071SJonathan Corbet 118204950071SJonathan Corbet command failed. 118304950071SJonathan Corbet - EPERM 118404950071SJonathan Corbet 118504950071SJonathan Corbet Operation not permitted, either because a 118604950071SJonathan Corbet write command was attempted on a drive which 118704950071SJonathan Corbet is opened read-only, or because the command 118804950071SJonathan Corbet requires CAP_SYS_RAWIO 118904950071SJonathan Corbet - EINVAL 119004950071SJonathan Corbet 119104950071SJonathan Corbet cgc.data_direction not set 119204950071SJonathan Corbet 119304950071SJonathan Corbet 119404950071SJonathan Corbet 119504950071SJonathan CorbetCDROM_NEXT_WRITABLE 119604950071SJonathan Corbet get next writable block 119704950071SJonathan Corbet 119804950071SJonathan Corbet 119904950071SJonathan Corbet usage:: 120004950071SJonathan Corbet 120104950071SJonathan Corbet long next; 120204950071SJonathan Corbet 120304950071SJonathan Corbet ioctl(fd, CDROM_NEXT_WRITABLE, &next); 120404950071SJonathan Corbet 120504950071SJonathan Corbet inputs: 120604950071SJonathan Corbet none 120704950071SJonathan Corbet 120804950071SJonathan Corbet 120904950071SJonathan Corbet outputs: 121004950071SJonathan Corbet The next writable block. 121104950071SJonathan Corbet 121204950071SJonathan Corbet 121304950071SJonathan Corbet notes: 121404950071SJonathan Corbet If the device does not support this ioctl directly, the 121504950071SJonathan Corbet 121604950071SJonathan Corbet ioctl will return CDROM_LAST_WRITTEN + 7. 121704950071SJonathan Corbet 121804950071SJonathan Corbet 121904950071SJonathan Corbet 122004950071SJonathan CorbetCDROM_LAST_WRITTEN 122104950071SJonathan Corbet get last block written on disc 122204950071SJonathan Corbet 122304950071SJonathan Corbet 122404950071SJonathan Corbet usage:: 122504950071SJonathan Corbet 122604950071SJonathan Corbet long last; 122704950071SJonathan Corbet 122804950071SJonathan Corbet ioctl(fd, CDROM_LAST_WRITTEN, &last); 122904950071SJonathan Corbet 123004950071SJonathan Corbet inputs: 123104950071SJonathan Corbet none 123204950071SJonathan Corbet 123304950071SJonathan Corbet 123404950071SJonathan Corbet outputs: 123504950071SJonathan Corbet The last block written on disc 123604950071SJonathan Corbet 123704950071SJonathan Corbet 123804950071SJonathan Corbet notes: 123904950071SJonathan Corbet If the device does not support this ioctl directly, the 124004950071SJonathan Corbet result is derived from the disc's table of contents. If the 124104950071SJonathan Corbet table of contents can't be read, this ioctl returns an 124204950071SJonathan Corbet error. 1243