162306a36Sopenharmony_ci============================ 262306a36Sopenharmony_ciSummary of CDROM ioctl calls 362306a36Sopenharmony_ci============================ 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci- Edward A. Falk <efalk@google.com> 662306a36Sopenharmony_ci 762306a36Sopenharmony_ciNovember, 2004 862306a36Sopenharmony_ci 962306a36Sopenharmony_ciThis document attempts to describe the ioctl(2) calls supported by 1062306a36Sopenharmony_cithe CDROM layer. These are by-and-large implemented (as of Linux 2.6) 1162306a36Sopenharmony_ciin drivers/cdrom/cdrom.c and drivers/block/scsi_ioctl.c 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ciioctl values are listed in <linux/cdrom.h>. As of this writing, they 1462306a36Sopenharmony_ciare as follows: 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci ======================== =============================================== 1762306a36Sopenharmony_ci CDROMPAUSE Pause Audio Operation 1862306a36Sopenharmony_ci CDROMRESUME Resume paused Audio Operation 1962306a36Sopenharmony_ci CDROMPLAYMSF Play Audio MSF (struct cdrom_msf) 2062306a36Sopenharmony_ci CDROMPLAYTRKIND Play Audio Track/index (struct cdrom_ti) 2162306a36Sopenharmony_ci CDROMREADTOCHDR Read TOC header (struct cdrom_tochdr) 2262306a36Sopenharmony_ci CDROMREADTOCENTRY Read TOC entry (struct cdrom_tocentry) 2362306a36Sopenharmony_ci CDROMSTOP Stop the cdrom drive 2462306a36Sopenharmony_ci CDROMSTART Start the cdrom drive 2562306a36Sopenharmony_ci CDROMEJECT Ejects the cdrom media 2662306a36Sopenharmony_ci CDROMVOLCTRL Control output volume (struct cdrom_volctrl) 2762306a36Sopenharmony_ci CDROMSUBCHNL Read subchannel data (struct cdrom_subchnl) 2862306a36Sopenharmony_ci CDROMREADMODE2 Read CDROM mode 2 data (2336 Bytes) 2962306a36Sopenharmony_ci (struct cdrom_read) 3062306a36Sopenharmony_ci CDROMREADMODE1 Read CDROM mode 1 data (2048 Bytes) 3162306a36Sopenharmony_ci (struct cdrom_read) 3262306a36Sopenharmony_ci CDROMREADAUDIO (struct cdrom_read_audio) 3362306a36Sopenharmony_ci CDROMEJECT_SW enable(1)/disable(0) auto-ejecting 3462306a36Sopenharmony_ci CDROMMULTISESSION Obtain the start-of-last-session 3562306a36Sopenharmony_ci address of multi session disks 3662306a36Sopenharmony_ci (struct cdrom_multisession) 3762306a36Sopenharmony_ci CDROM_GET_MCN Obtain the "Universal Product Code" 3862306a36Sopenharmony_ci if available (struct cdrom_mcn) 3962306a36Sopenharmony_ci CDROM_GET_UPC Deprecated, use CDROM_GET_MCN instead. 4062306a36Sopenharmony_ci CDROMRESET hard-reset the drive 4162306a36Sopenharmony_ci CDROMVOLREAD Get the drive's volume setting 4262306a36Sopenharmony_ci (struct cdrom_volctrl) 4362306a36Sopenharmony_ci CDROMREADRAW read data in raw mode (2352 Bytes) 4462306a36Sopenharmony_ci (struct cdrom_read) 4562306a36Sopenharmony_ci CDROMREADCOOKED read data in cooked mode 4662306a36Sopenharmony_ci CDROMSEEK seek msf address 4762306a36Sopenharmony_ci CDROMPLAYBLK scsi-cd only, (struct cdrom_blk) 4862306a36Sopenharmony_ci CDROMREADALL read all 2646 bytes 4962306a36Sopenharmony_ci CDROMGETSPINDOWN return 4-bit spindown value 5062306a36Sopenharmony_ci CDROMSETSPINDOWN set 4-bit spindown value 5162306a36Sopenharmony_ci CDROMCLOSETRAY pendant of CDROMEJECT 5262306a36Sopenharmony_ci CDROM_SET_OPTIONS Set behavior options 5362306a36Sopenharmony_ci CDROM_CLEAR_OPTIONS Clear behavior options 5462306a36Sopenharmony_ci CDROM_SELECT_SPEED Set the CD-ROM speed 5562306a36Sopenharmony_ci CDROM_SELECT_DISC Select disc (for juke-boxes) 5662306a36Sopenharmony_ci CDROM_MEDIA_CHANGED Check is media changed 5762306a36Sopenharmony_ci CDROM_TIMED_MEDIA_CHANGE Check if media changed 5862306a36Sopenharmony_ci since given time 5962306a36Sopenharmony_ci (struct cdrom_timed_media_change_info) 6062306a36Sopenharmony_ci CDROM_DRIVE_STATUS Get tray position, etc. 6162306a36Sopenharmony_ci CDROM_DISC_STATUS Get disc type, etc. 6262306a36Sopenharmony_ci CDROM_CHANGER_NSLOTS Get number of slots 6362306a36Sopenharmony_ci CDROM_LOCKDOOR lock or unlock door 6462306a36Sopenharmony_ci CDROM_DEBUG Turn debug messages on/off 6562306a36Sopenharmony_ci CDROM_GET_CAPABILITY get capabilities 6662306a36Sopenharmony_ci CDROMAUDIOBUFSIZ set the audio buffer size 6762306a36Sopenharmony_ci DVD_READ_STRUCT Read structure 6862306a36Sopenharmony_ci DVD_WRITE_STRUCT Write structure 6962306a36Sopenharmony_ci DVD_AUTH Authentication 7062306a36Sopenharmony_ci CDROM_SEND_PACKET send a packet to the drive 7162306a36Sopenharmony_ci CDROM_NEXT_WRITABLE get next writable block 7262306a36Sopenharmony_ci CDROM_LAST_WRITTEN get last block written on disc 7362306a36Sopenharmony_ci ======================== =============================================== 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_ciThe information that follows was determined from reading kernel source 7762306a36Sopenharmony_cicode. It is likely that some corrections will be made over time. 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ci------------------------------------------------------------------------------ 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ciGeneral: 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci Unless otherwise specified, all ioctl calls return 0 on success 8462306a36Sopenharmony_ci and -1 with errno set to an appropriate value on error. (Some 8562306a36Sopenharmony_ci ioctls return non-negative data values.) 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ci Unless otherwise specified, all ioctl calls return -1 and set 8862306a36Sopenharmony_ci errno to EFAULT on a failed attempt to copy data to or from user 8962306a36Sopenharmony_ci address space. 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci Individual drivers may return error codes not listed here. 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_ci Unless otherwise specified, all data structures and constants 9462306a36Sopenharmony_ci are defined in <linux/cdrom.h> 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_ci------------------------------------------------------------------------------ 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_ciCDROMPAUSE 10062306a36Sopenharmony_ci Pause Audio Operation 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_ci usage:: 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci ioctl(fd, CDROMPAUSE, 0); 10662306a36Sopenharmony_ci 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ci inputs: 10962306a36Sopenharmony_ci none 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ci outputs: 11362306a36Sopenharmony_ci none 11462306a36Sopenharmony_ci 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_ci error return: 11762306a36Sopenharmony_ci - ENOSYS cd drive not audio-capable. 11862306a36Sopenharmony_ci 11962306a36Sopenharmony_ci 12062306a36Sopenharmony_ciCDROMRESUME 12162306a36Sopenharmony_ci Resume paused Audio Operation 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ci 12462306a36Sopenharmony_ci usage:: 12562306a36Sopenharmony_ci 12662306a36Sopenharmony_ci ioctl(fd, CDROMRESUME, 0); 12762306a36Sopenharmony_ci 12862306a36Sopenharmony_ci 12962306a36Sopenharmony_ci inputs: 13062306a36Sopenharmony_ci none 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_ci 13362306a36Sopenharmony_ci outputs: 13462306a36Sopenharmony_ci none 13562306a36Sopenharmony_ci 13662306a36Sopenharmony_ci 13762306a36Sopenharmony_ci error return: 13862306a36Sopenharmony_ci - ENOSYS cd drive not audio-capable. 13962306a36Sopenharmony_ci 14062306a36Sopenharmony_ci 14162306a36Sopenharmony_ciCDROMPLAYMSF 14262306a36Sopenharmony_ci Play Audio MSF 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_ci (struct cdrom_msf) 14562306a36Sopenharmony_ci 14662306a36Sopenharmony_ci 14762306a36Sopenharmony_ci usage:: 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ci struct cdrom_msf msf; 15062306a36Sopenharmony_ci 15162306a36Sopenharmony_ci ioctl(fd, CDROMPLAYMSF, &msf); 15262306a36Sopenharmony_ci 15362306a36Sopenharmony_ci inputs: 15462306a36Sopenharmony_ci cdrom_msf structure, describing a segment of music to play 15562306a36Sopenharmony_ci 15662306a36Sopenharmony_ci 15762306a36Sopenharmony_ci outputs: 15862306a36Sopenharmony_ci none 15962306a36Sopenharmony_ci 16062306a36Sopenharmony_ci 16162306a36Sopenharmony_ci error return: 16262306a36Sopenharmony_ci - ENOSYS cd drive not audio-capable. 16362306a36Sopenharmony_ci 16462306a36Sopenharmony_ci notes: 16562306a36Sopenharmony_ci - MSF stands for minutes-seconds-frames 16662306a36Sopenharmony_ci - LBA stands for logical block address 16762306a36Sopenharmony_ci - Segment is described as start and end times, where each time 16862306a36Sopenharmony_ci is described as minutes:seconds:frames. 16962306a36Sopenharmony_ci A frame is 1/75 of a second. 17062306a36Sopenharmony_ci 17162306a36Sopenharmony_ci 17262306a36Sopenharmony_ciCDROMPLAYTRKIND 17362306a36Sopenharmony_ci Play Audio Track/index 17462306a36Sopenharmony_ci 17562306a36Sopenharmony_ci (struct cdrom_ti) 17662306a36Sopenharmony_ci 17762306a36Sopenharmony_ci 17862306a36Sopenharmony_ci usage:: 17962306a36Sopenharmony_ci 18062306a36Sopenharmony_ci struct cdrom_ti ti; 18162306a36Sopenharmony_ci 18262306a36Sopenharmony_ci ioctl(fd, CDROMPLAYTRKIND, &ti); 18362306a36Sopenharmony_ci 18462306a36Sopenharmony_ci inputs: 18562306a36Sopenharmony_ci cdrom_ti structure, describing a segment of music to play 18662306a36Sopenharmony_ci 18762306a36Sopenharmony_ci 18862306a36Sopenharmony_ci outputs: 18962306a36Sopenharmony_ci none 19062306a36Sopenharmony_ci 19162306a36Sopenharmony_ci 19262306a36Sopenharmony_ci error return: 19362306a36Sopenharmony_ci - ENOSYS cd drive not audio-capable. 19462306a36Sopenharmony_ci 19562306a36Sopenharmony_ci notes: 19662306a36Sopenharmony_ci - Segment is described as start and end times, where each time 19762306a36Sopenharmony_ci is described as a track and an index. 19862306a36Sopenharmony_ci 19962306a36Sopenharmony_ci 20062306a36Sopenharmony_ci 20162306a36Sopenharmony_ciCDROMREADTOCHDR 20262306a36Sopenharmony_ci Read TOC header 20362306a36Sopenharmony_ci 20462306a36Sopenharmony_ci (struct cdrom_tochdr) 20562306a36Sopenharmony_ci 20662306a36Sopenharmony_ci 20762306a36Sopenharmony_ci usage:: 20862306a36Sopenharmony_ci 20962306a36Sopenharmony_ci cdrom_tochdr header; 21062306a36Sopenharmony_ci 21162306a36Sopenharmony_ci ioctl(fd, CDROMREADTOCHDR, &header); 21262306a36Sopenharmony_ci 21362306a36Sopenharmony_ci inputs: 21462306a36Sopenharmony_ci cdrom_tochdr structure 21562306a36Sopenharmony_ci 21662306a36Sopenharmony_ci 21762306a36Sopenharmony_ci outputs: 21862306a36Sopenharmony_ci cdrom_tochdr structure 21962306a36Sopenharmony_ci 22062306a36Sopenharmony_ci 22162306a36Sopenharmony_ci error return: 22262306a36Sopenharmony_ci - ENOSYS cd drive not audio-capable. 22362306a36Sopenharmony_ci 22462306a36Sopenharmony_ci 22562306a36Sopenharmony_ci 22662306a36Sopenharmony_ciCDROMREADTOCENTRY 22762306a36Sopenharmony_ci Read TOC entry 22862306a36Sopenharmony_ci 22962306a36Sopenharmony_ci (struct cdrom_tocentry) 23062306a36Sopenharmony_ci 23162306a36Sopenharmony_ci 23262306a36Sopenharmony_ci usage:: 23362306a36Sopenharmony_ci 23462306a36Sopenharmony_ci struct cdrom_tocentry entry; 23562306a36Sopenharmony_ci 23662306a36Sopenharmony_ci ioctl(fd, CDROMREADTOCENTRY, &entry); 23762306a36Sopenharmony_ci 23862306a36Sopenharmony_ci inputs: 23962306a36Sopenharmony_ci cdrom_tocentry structure 24062306a36Sopenharmony_ci 24162306a36Sopenharmony_ci 24262306a36Sopenharmony_ci outputs: 24362306a36Sopenharmony_ci cdrom_tocentry structure 24462306a36Sopenharmony_ci 24562306a36Sopenharmony_ci 24662306a36Sopenharmony_ci error return: 24762306a36Sopenharmony_ci - ENOSYS cd drive not audio-capable. 24862306a36Sopenharmony_ci - EINVAL entry.cdte_format not CDROM_MSF or CDROM_LBA 24962306a36Sopenharmony_ci - EINVAL requested track out of bounds 25062306a36Sopenharmony_ci - EIO I/O error reading TOC 25162306a36Sopenharmony_ci 25262306a36Sopenharmony_ci notes: 25362306a36Sopenharmony_ci - TOC stands for Table Of Contents 25462306a36Sopenharmony_ci - MSF stands for minutes-seconds-frames 25562306a36Sopenharmony_ci - LBA stands for logical block address 25662306a36Sopenharmony_ci 25762306a36Sopenharmony_ci 25862306a36Sopenharmony_ci 25962306a36Sopenharmony_ciCDROMSTOP 26062306a36Sopenharmony_ci Stop the cdrom drive 26162306a36Sopenharmony_ci 26262306a36Sopenharmony_ci 26362306a36Sopenharmony_ci usage:: 26462306a36Sopenharmony_ci 26562306a36Sopenharmony_ci ioctl(fd, CDROMSTOP, 0); 26662306a36Sopenharmony_ci 26762306a36Sopenharmony_ci 26862306a36Sopenharmony_ci inputs: 26962306a36Sopenharmony_ci none 27062306a36Sopenharmony_ci 27162306a36Sopenharmony_ci 27262306a36Sopenharmony_ci outputs: 27362306a36Sopenharmony_ci none 27462306a36Sopenharmony_ci 27562306a36Sopenharmony_ci 27662306a36Sopenharmony_ci error return: 27762306a36Sopenharmony_ci - ENOSYS cd drive not audio-capable. 27862306a36Sopenharmony_ci 27962306a36Sopenharmony_ci notes: 28062306a36Sopenharmony_ci - Exact interpretation of this ioctl depends on the device, 28162306a36Sopenharmony_ci but most seem to spin the drive down. 28262306a36Sopenharmony_ci 28362306a36Sopenharmony_ci 28462306a36Sopenharmony_ciCDROMSTART 28562306a36Sopenharmony_ci Start the cdrom drive 28662306a36Sopenharmony_ci 28762306a36Sopenharmony_ci 28862306a36Sopenharmony_ci usage:: 28962306a36Sopenharmony_ci 29062306a36Sopenharmony_ci ioctl(fd, CDROMSTART, 0); 29162306a36Sopenharmony_ci 29262306a36Sopenharmony_ci 29362306a36Sopenharmony_ci inputs: 29462306a36Sopenharmony_ci none 29562306a36Sopenharmony_ci 29662306a36Sopenharmony_ci 29762306a36Sopenharmony_ci outputs: 29862306a36Sopenharmony_ci none 29962306a36Sopenharmony_ci 30062306a36Sopenharmony_ci 30162306a36Sopenharmony_ci error return: 30262306a36Sopenharmony_ci - ENOSYS cd drive not audio-capable. 30362306a36Sopenharmony_ci 30462306a36Sopenharmony_ci notes: 30562306a36Sopenharmony_ci - Exact interpretation of this ioctl depends on the device, 30662306a36Sopenharmony_ci but most seem to spin the drive up and/or close the tray. 30762306a36Sopenharmony_ci Other devices ignore the ioctl completely. 30862306a36Sopenharmony_ci 30962306a36Sopenharmony_ci 31062306a36Sopenharmony_ciCDROMEJECT 31162306a36Sopenharmony_ci - Ejects the cdrom media 31262306a36Sopenharmony_ci 31362306a36Sopenharmony_ci 31462306a36Sopenharmony_ci usage:: 31562306a36Sopenharmony_ci 31662306a36Sopenharmony_ci ioctl(fd, CDROMEJECT, 0); 31762306a36Sopenharmony_ci 31862306a36Sopenharmony_ci 31962306a36Sopenharmony_ci inputs: 32062306a36Sopenharmony_ci none 32162306a36Sopenharmony_ci 32262306a36Sopenharmony_ci 32362306a36Sopenharmony_ci outputs: 32462306a36Sopenharmony_ci none 32562306a36Sopenharmony_ci 32662306a36Sopenharmony_ci 32762306a36Sopenharmony_ci error returns: 32862306a36Sopenharmony_ci - ENOSYS cd drive not capable of ejecting 32962306a36Sopenharmony_ci - EBUSY other processes are accessing drive, or door is locked 33062306a36Sopenharmony_ci 33162306a36Sopenharmony_ci notes: 33262306a36Sopenharmony_ci - See CDROM_LOCKDOOR, below. 33362306a36Sopenharmony_ci 33462306a36Sopenharmony_ci 33562306a36Sopenharmony_ci 33662306a36Sopenharmony_ci 33762306a36Sopenharmony_ciCDROMCLOSETRAY 33862306a36Sopenharmony_ci pendant of CDROMEJECT 33962306a36Sopenharmony_ci 34062306a36Sopenharmony_ci 34162306a36Sopenharmony_ci usage:: 34262306a36Sopenharmony_ci 34362306a36Sopenharmony_ci ioctl(fd, CDROMCLOSETRAY, 0); 34462306a36Sopenharmony_ci 34562306a36Sopenharmony_ci 34662306a36Sopenharmony_ci inputs: 34762306a36Sopenharmony_ci none 34862306a36Sopenharmony_ci 34962306a36Sopenharmony_ci 35062306a36Sopenharmony_ci outputs: 35162306a36Sopenharmony_ci none 35262306a36Sopenharmony_ci 35362306a36Sopenharmony_ci 35462306a36Sopenharmony_ci error returns: 35562306a36Sopenharmony_ci - ENOSYS cd drive not capable of closing the tray 35662306a36Sopenharmony_ci - EBUSY other processes are accessing drive, or door is locked 35762306a36Sopenharmony_ci 35862306a36Sopenharmony_ci notes: 35962306a36Sopenharmony_ci - See CDROM_LOCKDOOR, below. 36062306a36Sopenharmony_ci 36162306a36Sopenharmony_ci 36262306a36Sopenharmony_ci 36362306a36Sopenharmony_ci 36462306a36Sopenharmony_ciCDROMVOLCTRL 36562306a36Sopenharmony_ci Control output volume (struct cdrom_volctrl) 36662306a36Sopenharmony_ci 36762306a36Sopenharmony_ci 36862306a36Sopenharmony_ci usage:: 36962306a36Sopenharmony_ci 37062306a36Sopenharmony_ci struct cdrom_volctrl volume; 37162306a36Sopenharmony_ci 37262306a36Sopenharmony_ci ioctl(fd, CDROMVOLCTRL, &volume); 37362306a36Sopenharmony_ci 37462306a36Sopenharmony_ci inputs: 37562306a36Sopenharmony_ci cdrom_volctrl structure containing volumes for up to 4 37662306a36Sopenharmony_ci channels. 37762306a36Sopenharmony_ci 37862306a36Sopenharmony_ci outputs: 37962306a36Sopenharmony_ci none 38062306a36Sopenharmony_ci 38162306a36Sopenharmony_ci 38262306a36Sopenharmony_ci error return: 38362306a36Sopenharmony_ci - ENOSYS cd drive not audio-capable. 38462306a36Sopenharmony_ci 38562306a36Sopenharmony_ci 38662306a36Sopenharmony_ci 38762306a36Sopenharmony_ciCDROMVOLREAD 38862306a36Sopenharmony_ci Get the drive's volume setting 38962306a36Sopenharmony_ci 39062306a36Sopenharmony_ci (struct cdrom_volctrl) 39162306a36Sopenharmony_ci 39262306a36Sopenharmony_ci 39362306a36Sopenharmony_ci usage:: 39462306a36Sopenharmony_ci 39562306a36Sopenharmony_ci struct cdrom_volctrl volume; 39662306a36Sopenharmony_ci 39762306a36Sopenharmony_ci ioctl(fd, CDROMVOLREAD, &volume); 39862306a36Sopenharmony_ci 39962306a36Sopenharmony_ci inputs: 40062306a36Sopenharmony_ci none 40162306a36Sopenharmony_ci 40262306a36Sopenharmony_ci 40362306a36Sopenharmony_ci outputs: 40462306a36Sopenharmony_ci The current volume settings. 40562306a36Sopenharmony_ci 40662306a36Sopenharmony_ci 40762306a36Sopenharmony_ci error return: 40862306a36Sopenharmony_ci - ENOSYS cd drive not audio-capable. 40962306a36Sopenharmony_ci 41062306a36Sopenharmony_ci 41162306a36Sopenharmony_ci 41262306a36Sopenharmony_ciCDROMSUBCHNL 41362306a36Sopenharmony_ci Read subchannel data 41462306a36Sopenharmony_ci 41562306a36Sopenharmony_ci (struct cdrom_subchnl) 41662306a36Sopenharmony_ci 41762306a36Sopenharmony_ci 41862306a36Sopenharmony_ci usage:: 41962306a36Sopenharmony_ci 42062306a36Sopenharmony_ci struct cdrom_subchnl q; 42162306a36Sopenharmony_ci 42262306a36Sopenharmony_ci ioctl(fd, CDROMSUBCHNL, &q); 42362306a36Sopenharmony_ci 42462306a36Sopenharmony_ci inputs: 42562306a36Sopenharmony_ci cdrom_subchnl structure 42662306a36Sopenharmony_ci 42762306a36Sopenharmony_ci 42862306a36Sopenharmony_ci outputs: 42962306a36Sopenharmony_ci cdrom_subchnl structure 43062306a36Sopenharmony_ci 43162306a36Sopenharmony_ci 43262306a36Sopenharmony_ci error return: 43362306a36Sopenharmony_ci - ENOSYS cd drive not audio-capable. 43462306a36Sopenharmony_ci - EINVAL format not CDROM_MSF or CDROM_LBA 43562306a36Sopenharmony_ci 43662306a36Sopenharmony_ci notes: 43762306a36Sopenharmony_ci - Format is converted to CDROM_MSF or CDROM_LBA 43862306a36Sopenharmony_ci as per user request on return 43962306a36Sopenharmony_ci 44062306a36Sopenharmony_ci 44162306a36Sopenharmony_ci 44262306a36Sopenharmony_ciCDROMREADRAW 44362306a36Sopenharmony_ci read data in raw mode (2352 Bytes) 44462306a36Sopenharmony_ci 44562306a36Sopenharmony_ci (struct cdrom_read) 44662306a36Sopenharmony_ci 44762306a36Sopenharmony_ci usage:: 44862306a36Sopenharmony_ci 44962306a36Sopenharmony_ci union { 45062306a36Sopenharmony_ci 45162306a36Sopenharmony_ci struct cdrom_msf msf; /* input */ 45262306a36Sopenharmony_ci char buffer[CD_FRAMESIZE_RAW]; /* return */ 45362306a36Sopenharmony_ci } arg; 45462306a36Sopenharmony_ci ioctl(fd, CDROMREADRAW, &arg); 45562306a36Sopenharmony_ci 45662306a36Sopenharmony_ci inputs: 45762306a36Sopenharmony_ci cdrom_msf structure indicating an address to read. 45862306a36Sopenharmony_ci 45962306a36Sopenharmony_ci Only the start values are significant. 46062306a36Sopenharmony_ci 46162306a36Sopenharmony_ci outputs: 46262306a36Sopenharmony_ci Data written to address provided by user. 46362306a36Sopenharmony_ci 46462306a36Sopenharmony_ci 46562306a36Sopenharmony_ci error return: 46662306a36Sopenharmony_ci - EINVAL address less than 0, or msf less than 0:2:0 46762306a36Sopenharmony_ci - ENOMEM out of memory 46862306a36Sopenharmony_ci 46962306a36Sopenharmony_ci notes: 47062306a36Sopenharmony_ci - As of 2.6.8.1, comments in <linux/cdrom.h> indicate that this 47162306a36Sopenharmony_ci ioctl accepts a cdrom_read structure, but actual source code 47262306a36Sopenharmony_ci reads a cdrom_msf structure and writes a buffer of data to 47362306a36Sopenharmony_ci the same address. 47462306a36Sopenharmony_ci 47562306a36Sopenharmony_ci - MSF values are converted to LBA values via this formula:: 47662306a36Sopenharmony_ci 47762306a36Sopenharmony_ci lba = (((m * CD_SECS) + s) * CD_FRAMES + f) - CD_MSF_OFFSET; 47862306a36Sopenharmony_ci 47962306a36Sopenharmony_ci 48062306a36Sopenharmony_ci 48162306a36Sopenharmony_ci 48262306a36Sopenharmony_ciCDROMREADMODE1 48362306a36Sopenharmony_ci Read CDROM mode 1 data (2048 Bytes) 48462306a36Sopenharmony_ci 48562306a36Sopenharmony_ci (struct cdrom_read) 48662306a36Sopenharmony_ci 48762306a36Sopenharmony_ci notes: 48862306a36Sopenharmony_ci Identical to CDROMREADRAW except that block size is 48962306a36Sopenharmony_ci CD_FRAMESIZE (2048) bytes 49062306a36Sopenharmony_ci 49162306a36Sopenharmony_ci 49262306a36Sopenharmony_ci 49362306a36Sopenharmony_ciCDROMREADMODE2 49462306a36Sopenharmony_ci Read CDROM mode 2 data (2336 Bytes) 49562306a36Sopenharmony_ci 49662306a36Sopenharmony_ci (struct cdrom_read) 49762306a36Sopenharmony_ci 49862306a36Sopenharmony_ci notes: 49962306a36Sopenharmony_ci Identical to CDROMREADRAW except that block size is 50062306a36Sopenharmony_ci CD_FRAMESIZE_RAW0 (2336) bytes 50162306a36Sopenharmony_ci 50262306a36Sopenharmony_ci 50362306a36Sopenharmony_ci 50462306a36Sopenharmony_ciCDROMREADAUDIO 50562306a36Sopenharmony_ci (struct cdrom_read_audio) 50662306a36Sopenharmony_ci 50762306a36Sopenharmony_ci usage:: 50862306a36Sopenharmony_ci 50962306a36Sopenharmony_ci struct cdrom_read_audio ra; 51062306a36Sopenharmony_ci 51162306a36Sopenharmony_ci ioctl(fd, CDROMREADAUDIO, &ra); 51262306a36Sopenharmony_ci 51362306a36Sopenharmony_ci inputs: 51462306a36Sopenharmony_ci cdrom_read_audio structure containing read start 51562306a36Sopenharmony_ci point and length 51662306a36Sopenharmony_ci 51762306a36Sopenharmony_ci outputs: 51862306a36Sopenharmony_ci audio data, returned to buffer indicated by ra 51962306a36Sopenharmony_ci 52062306a36Sopenharmony_ci 52162306a36Sopenharmony_ci error return: 52262306a36Sopenharmony_ci - EINVAL format not CDROM_MSF or CDROM_LBA 52362306a36Sopenharmony_ci - EINVAL nframes not in range [1 75] 52462306a36Sopenharmony_ci - ENXIO drive has no queue (probably means invalid fd) 52562306a36Sopenharmony_ci - ENOMEM out of memory 52662306a36Sopenharmony_ci 52762306a36Sopenharmony_ci 52862306a36Sopenharmony_ciCDROMEJECT_SW 52962306a36Sopenharmony_ci enable(1)/disable(0) auto-ejecting 53062306a36Sopenharmony_ci 53162306a36Sopenharmony_ci 53262306a36Sopenharmony_ci usage:: 53362306a36Sopenharmony_ci 53462306a36Sopenharmony_ci int val; 53562306a36Sopenharmony_ci 53662306a36Sopenharmony_ci ioctl(fd, CDROMEJECT_SW, val); 53762306a36Sopenharmony_ci 53862306a36Sopenharmony_ci inputs: 53962306a36Sopenharmony_ci Flag specifying auto-eject flag. 54062306a36Sopenharmony_ci 54162306a36Sopenharmony_ci 54262306a36Sopenharmony_ci outputs: 54362306a36Sopenharmony_ci none 54462306a36Sopenharmony_ci 54562306a36Sopenharmony_ci 54662306a36Sopenharmony_ci error return: 54762306a36Sopenharmony_ci - ENOSYS Drive is not capable of ejecting. 54862306a36Sopenharmony_ci - EBUSY Door is locked 54962306a36Sopenharmony_ci 55062306a36Sopenharmony_ci 55162306a36Sopenharmony_ci 55262306a36Sopenharmony_ci 55362306a36Sopenharmony_ciCDROMMULTISESSION 55462306a36Sopenharmony_ci Obtain the start-of-last-session address of multi session disks 55562306a36Sopenharmony_ci 55662306a36Sopenharmony_ci (struct cdrom_multisession) 55762306a36Sopenharmony_ci 55862306a36Sopenharmony_ci usage:: 55962306a36Sopenharmony_ci 56062306a36Sopenharmony_ci struct cdrom_multisession ms_info; 56162306a36Sopenharmony_ci 56262306a36Sopenharmony_ci ioctl(fd, CDROMMULTISESSION, &ms_info); 56362306a36Sopenharmony_ci 56462306a36Sopenharmony_ci inputs: 56562306a36Sopenharmony_ci cdrom_multisession structure containing desired 56662306a36Sopenharmony_ci 56762306a36Sopenharmony_ci format. 56862306a36Sopenharmony_ci 56962306a36Sopenharmony_ci outputs: 57062306a36Sopenharmony_ci cdrom_multisession structure is filled with last_session 57162306a36Sopenharmony_ci information. 57262306a36Sopenharmony_ci 57362306a36Sopenharmony_ci error return: 57462306a36Sopenharmony_ci - EINVAL format not CDROM_MSF or CDROM_LBA 57562306a36Sopenharmony_ci 57662306a36Sopenharmony_ci 57762306a36Sopenharmony_ciCDROM_GET_MCN 57862306a36Sopenharmony_ci Obtain the "Universal Product Code" 57962306a36Sopenharmony_ci if available 58062306a36Sopenharmony_ci 58162306a36Sopenharmony_ci (struct cdrom_mcn) 58262306a36Sopenharmony_ci 58362306a36Sopenharmony_ci 58462306a36Sopenharmony_ci usage:: 58562306a36Sopenharmony_ci 58662306a36Sopenharmony_ci struct cdrom_mcn mcn; 58762306a36Sopenharmony_ci 58862306a36Sopenharmony_ci ioctl(fd, CDROM_GET_MCN, &mcn); 58962306a36Sopenharmony_ci 59062306a36Sopenharmony_ci inputs: 59162306a36Sopenharmony_ci none 59262306a36Sopenharmony_ci 59362306a36Sopenharmony_ci 59462306a36Sopenharmony_ci outputs: 59562306a36Sopenharmony_ci Universal Product Code 59662306a36Sopenharmony_ci 59762306a36Sopenharmony_ci 59862306a36Sopenharmony_ci error return: 59962306a36Sopenharmony_ci - ENOSYS Drive is not capable of reading MCN data. 60062306a36Sopenharmony_ci 60162306a36Sopenharmony_ci notes: 60262306a36Sopenharmony_ci - Source code comments state:: 60362306a36Sopenharmony_ci 60462306a36Sopenharmony_ci The following function is implemented, although very few 60562306a36Sopenharmony_ci audio discs give Universal Product Code information, which 60662306a36Sopenharmony_ci should just be the Medium Catalog Number on the box. Note, 60762306a36Sopenharmony_ci that the way the code is written on the CD is /not/ uniform 60862306a36Sopenharmony_ci across all discs! 60962306a36Sopenharmony_ci 61062306a36Sopenharmony_ci 61162306a36Sopenharmony_ci 61262306a36Sopenharmony_ci 61362306a36Sopenharmony_ciCDROM_GET_UPC 61462306a36Sopenharmony_ci CDROM_GET_MCN (deprecated) 61562306a36Sopenharmony_ci 61662306a36Sopenharmony_ci 61762306a36Sopenharmony_ci Not implemented, as of 2.6.8.1 61862306a36Sopenharmony_ci 61962306a36Sopenharmony_ci 62062306a36Sopenharmony_ci 62162306a36Sopenharmony_ciCDROMRESET 62262306a36Sopenharmony_ci hard-reset the drive 62362306a36Sopenharmony_ci 62462306a36Sopenharmony_ci 62562306a36Sopenharmony_ci usage:: 62662306a36Sopenharmony_ci 62762306a36Sopenharmony_ci ioctl(fd, CDROMRESET, 0); 62862306a36Sopenharmony_ci 62962306a36Sopenharmony_ci 63062306a36Sopenharmony_ci inputs: 63162306a36Sopenharmony_ci none 63262306a36Sopenharmony_ci 63362306a36Sopenharmony_ci 63462306a36Sopenharmony_ci outputs: 63562306a36Sopenharmony_ci none 63662306a36Sopenharmony_ci 63762306a36Sopenharmony_ci 63862306a36Sopenharmony_ci error return: 63962306a36Sopenharmony_ci - EACCES Access denied: requires CAP_SYS_ADMIN 64062306a36Sopenharmony_ci - ENOSYS Drive is not capable of resetting. 64162306a36Sopenharmony_ci 64262306a36Sopenharmony_ci 64362306a36Sopenharmony_ci 64462306a36Sopenharmony_ci 64562306a36Sopenharmony_ciCDROMREADCOOKED 64662306a36Sopenharmony_ci read data in cooked mode 64762306a36Sopenharmony_ci 64862306a36Sopenharmony_ci 64962306a36Sopenharmony_ci usage:: 65062306a36Sopenharmony_ci 65162306a36Sopenharmony_ci u8 buffer[CD_FRAMESIZE] 65262306a36Sopenharmony_ci 65362306a36Sopenharmony_ci ioctl(fd, CDROMREADCOOKED, buffer); 65462306a36Sopenharmony_ci 65562306a36Sopenharmony_ci inputs: 65662306a36Sopenharmony_ci none 65762306a36Sopenharmony_ci 65862306a36Sopenharmony_ci 65962306a36Sopenharmony_ci outputs: 66062306a36Sopenharmony_ci 2048 bytes of data, "cooked" mode. 66162306a36Sopenharmony_ci 66262306a36Sopenharmony_ci 66362306a36Sopenharmony_ci notes: 66462306a36Sopenharmony_ci Not implemented on all drives. 66562306a36Sopenharmony_ci 66662306a36Sopenharmony_ci 66762306a36Sopenharmony_ci 66862306a36Sopenharmony_ci 66962306a36Sopenharmony_ci 67062306a36Sopenharmony_ciCDROMREADALL 67162306a36Sopenharmony_ci read all 2646 bytes 67262306a36Sopenharmony_ci 67362306a36Sopenharmony_ci 67462306a36Sopenharmony_ci Same as CDROMREADCOOKED, but reads 2646 bytes. 67562306a36Sopenharmony_ci 67662306a36Sopenharmony_ci 67762306a36Sopenharmony_ci 67862306a36Sopenharmony_ciCDROMSEEK 67962306a36Sopenharmony_ci seek msf address 68062306a36Sopenharmony_ci 68162306a36Sopenharmony_ci 68262306a36Sopenharmony_ci usage:: 68362306a36Sopenharmony_ci 68462306a36Sopenharmony_ci struct cdrom_msf msf; 68562306a36Sopenharmony_ci 68662306a36Sopenharmony_ci ioctl(fd, CDROMSEEK, &msf); 68762306a36Sopenharmony_ci 68862306a36Sopenharmony_ci inputs: 68962306a36Sopenharmony_ci MSF address to seek to. 69062306a36Sopenharmony_ci 69162306a36Sopenharmony_ci 69262306a36Sopenharmony_ci outputs: 69362306a36Sopenharmony_ci none 69462306a36Sopenharmony_ci 69562306a36Sopenharmony_ci 69662306a36Sopenharmony_ci 69762306a36Sopenharmony_ci 69862306a36Sopenharmony_ciCDROMPLAYBLK 69962306a36Sopenharmony_ci scsi-cd only 70062306a36Sopenharmony_ci 70162306a36Sopenharmony_ci (struct cdrom_blk) 70262306a36Sopenharmony_ci 70362306a36Sopenharmony_ci 70462306a36Sopenharmony_ci usage:: 70562306a36Sopenharmony_ci 70662306a36Sopenharmony_ci struct cdrom_blk blk; 70762306a36Sopenharmony_ci 70862306a36Sopenharmony_ci ioctl(fd, CDROMPLAYBLK, &blk); 70962306a36Sopenharmony_ci 71062306a36Sopenharmony_ci inputs: 71162306a36Sopenharmony_ci Region to play 71262306a36Sopenharmony_ci 71362306a36Sopenharmony_ci 71462306a36Sopenharmony_ci outputs: 71562306a36Sopenharmony_ci none 71662306a36Sopenharmony_ci 71762306a36Sopenharmony_ci 71862306a36Sopenharmony_ci 71962306a36Sopenharmony_ci 72062306a36Sopenharmony_ciCDROMGETSPINDOWN 72162306a36Sopenharmony_ci Obsolete, was ide-cd only 72262306a36Sopenharmony_ci 72362306a36Sopenharmony_ci 72462306a36Sopenharmony_ci usage:: 72562306a36Sopenharmony_ci 72662306a36Sopenharmony_ci char spindown; 72762306a36Sopenharmony_ci 72862306a36Sopenharmony_ci ioctl(fd, CDROMGETSPINDOWN, &spindown); 72962306a36Sopenharmony_ci 73062306a36Sopenharmony_ci inputs: 73162306a36Sopenharmony_ci none 73262306a36Sopenharmony_ci 73362306a36Sopenharmony_ci 73462306a36Sopenharmony_ci outputs: 73562306a36Sopenharmony_ci The value of the current 4-bit spindown value. 73662306a36Sopenharmony_ci 73762306a36Sopenharmony_ci 73862306a36Sopenharmony_ci 73962306a36Sopenharmony_ci 74062306a36Sopenharmony_ci 74162306a36Sopenharmony_ciCDROMSETSPINDOWN 74262306a36Sopenharmony_ci Obsolete, was ide-cd only 74362306a36Sopenharmony_ci 74462306a36Sopenharmony_ci 74562306a36Sopenharmony_ci usage:: 74662306a36Sopenharmony_ci 74762306a36Sopenharmony_ci char spindown 74862306a36Sopenharmony_ci 74962306a36Sopenharmony_ci ioctl(fd, CDROMSETSPINDOWN, &spindown); 75062306a36Sopenharmony_ci 75162306a36Sopenharmony_ci inputs: 75262306a36Sopenharmony_ci 4-bit value used to control spindown (TODO: more detail here) 75362306a36Sopenharmony_ci 75462306a36Sopenharmony_ci 75562306a36Sopenharmony_ci outputs: 75662306a36Sopenharmony_ci none 75762306a36Sopenharmony_ci 75862306a36Sopenharmony_ci 75962306a36Sopenharmony_ci 76062306a36Sopenharmony_ci 76162306a36Sopenharmony_ci 76262306a36Sopenharmony_ci 76362306a36Sopenharmony_ciCDROM_SET_OPTIONS 76462306a36Sopenharmony_ci Set behavior options 76562306a36Sopenharmony_ci 76662306a36Sopenharmony_ci 76762306a36Sopenharmony_ci usage:: 76862306a36Sopenharmony_ci 76962306a36Sopenharmony_ci int options; 77062306a36Sopenharmony_ci 77162306a36Sopenharmony_ci ioctl(fd, CDROM_SET_OPTIONS, options); 77262306a36Sopenharmony_ci 77362306a36Sopenharmony_ci inputs: 77462306a36Sopenharmony_ci New values for drive options. The logical 'or' of: 77562306a36Sopenharmony_ci 77662306a36Sopenharmony_ci ============== ================================== 77762306a36Sopenharmony_ci CDO_AUTO_CLOSE close tray on first open(2) 77862306a36Sopenharmony_ci CDO_AUTO_EJECT open tray on last release 77962306a36Sopenharmony_ci CDO_USE_FFLAGS use O_NONBLOCK information on open 78062306a36Sopenharmony_ci CDO_LOCK lock tray on open files 78162306a36Sopenharmony_ci CDO_CHECK_TYPE check type on open for data 78262306a36Sopenharmony_ci ============== ================================== 78362306a36Sopenharmony_ci 78462306a36Sopenharmony_ci outputs: 78562306a36Sopenharmony_ci Returns the resulting options settings in the 78662306a36Sopenharmony_ci ioctl return value. Returns -1 on error. 78762306a36Sopenharmony_ci 78862306a36Sopenharmony_ci error return: 78962306a36Sopenharmony_ci - ENOSYS selected option(s) not supported by drive. 79062306a36Sopenharmony_ci 79162306a36Sopenharmony_ci 79262306a36Sopenharmony_ci 79362306a36Sopenharmony_ci 79462306a36Sopenharmony_ciCDROM_CLEAR_OPTIONS 79562306a36Sopenharmony_ci Clear behavior options 79662306a36Sopenharmony_ci 79762306a36Sopenharmony_ci 79862306a36Sopenharmony_ci Same as CDROM_SET_OPTIONS, except that selected options are 79962306a36Sopenharmony_ci turned off. 80062306a36Sopenharmony_ci 80162306a36Sopenharmony_ci 80262306a36Sopenharmony_ci 80362306a36Sopenharmony_ciCDROM_SELECT_SPEED 80462306a36Sopenharmony_ci Set the CD-ROM speed 80562306a36Sopenharmony_ci 80662306a36Sopenharmony_ci 80762306a36Sopenharmony_ci usage:: 80862306a36Sopenharmony_ci 80962306a36Sopenharmony_ci int speed; 81062306a36Sopenharmony_ci 81162306a36Sopenharmony_ci ioctl(fd, CDROM_SELECT_SPEED, speed); 81262306a36Sopenharmony_ci 81362306a36Sopenharmony_ci inputs: 81462306a36Sopenharmony_ci New drive speed. 81562306a36Sopenharmony_ci 81662306a36Sopenharmony_ci 81762306a36Sopenharmony_ci outputs: 81862306a36Sopenharmony_ci none 81962306a36Sopenharmony_ci 82062306a36Sopenharmony_ci 82162306a36Sopenharmony_ci error return: 82262306a36Sopenharmony_ci - ENOSYS speed selection not supported by drive. 82362306a36Sopenharmony_ci 82462306a36Sopenharmony_ci 82562306a36Sopenharmony_ci 82662306a36Sopenharmony_ciCDROM_SELECT_DISC 82762306a36Sopenharmony_ci Select disc (for juke-boxes) 82862306a36Sopenharmony_ci 82962306a36Sopenharmony_ci 83062306a36Sopenharmony_ci usage:: 83162306a36Sopenharmony_ci 83262306a36Sopenharmony_ci int disk; 83362306a36Sopenharmony_ci 83462306a36Sopenharmony_ci ioctl(fd, CDROM_SELECT_DISC, disk); 83562306a36Sopenharmony_ci 83662306a36Sopenharmony_ci inputs: 83762306a36Sopenharmony_ci Disk to load into drive. 83862306a36Sopenharmony_ci 83962306a36Sopenharmony_ci 84062306a36Sopenharmony_ci outputs: 84162306a36Sopenharmony_ci none 84262306a36Sopenharmony_ci 84362306a36Sopenharmony_ci 84462306a36Sopenharmony_ci error return: 84562306a36Sopenharmony_ci - EINVAL Disk number beyond capacity of drive 84662306a36Sopenharmony_ci 84762306a36Sopenharmony_ci 84862306a36Sopenharmony_ci 84962306a36Sopenharmony_ciCDROM_MEDIA_CHANGED 85062306a36Sopenharmony_ci Check is media changed 85162306a36Sopenharmony_ci 85262306a36Sopenharmony_ci 85362306a36Sopenharmony_ci usage:: 85462306a36Sopenharmony_ci 85562306a36Sopenharmony_ci int slot; 85662306a36Sopenharmony_ci 85762306a36Sopenharmony_ci ioctl(fd, CDROM_MEDIA_CHANGED, slot); 85862306a36Sopenharmony_ci 85962306a36Sopenharmony_ci inputs: 86062306a36Sopenharmony_ci Slot number to be tested, always zero except for jukeboxes. 86162306a36Sopenharmony_ci 86262306a36Sopenharmony_ci May also be special values CDSL_NONE or CDSL_CURRENT 86362306a36Sopenharmony_ci 86462306a36Sopenharmony_ci outputs: 86562306a36Sopenharmony_ci Ioctl return value is 0 or 1 depending on whether the media 86662306a36Sopenharmony_ci 86762306a36Sopenharmony_ci has been changed, or -1 on error. 86862306a36Sopenharmony_ci 86962306a36Sopenharmony_ci error returns: 87062306a36Sopenharmony_ci - ENOSYS Drive can't detect media change 87162306a36Sopenharmony_ci - EINVAL Slot number beyond capacity of drive 87262306a36Sopenharmony_ci - ENOMEM Out of memory 87362306a36Sopenharmony_ci 87462306a36Sopenharmony_ci 87562306a36Sopenharmony_ci 87662306a36Sopenharmony_ciCDROM_DRIVE_STATUS 87762306a36Sopenharmony_ci Get tray position, etc. 87862306a36Sopenharmony_ci 87962306a36Sopenharmony_ci 88062306a36Sopenharmony_ci usage:: 88162306a36Sopenharmony_ci 88262306a36Sopenharmony_ci int slot; 88362306a36Sopenharmony_ci 88462306a36Sopenharmony_ci ioctl(fd, CDROM_DRIVE_STATUS, slot); 88562306a36Sopenharmony_ci 88662306a36Sopenharmony_ci inputs: 88762306a36Sopenharmony_ci Slot number to be tested, always zero except for jukeboxes. 88862306a36Sopenharmony_ci 88962306a36Sopenharmony_ci May also be special values CDSL_NONE or CDSL_CURRENT 89062306a36Sopenharmony_ci 89162306a36Sopenharmony_ci outputs: 89262306a36Sopenharmony_ci Ioctl return value will be one of the following values 89362306a36Sopenharmony_ci 89462306a36Sopenharmony_ci from <linux/cdrom.h>: 89562306a36Sopenharmony_ci 89662306a36Sopenharmony_ci =================== ========================== 89762306a36Sopenharmony_ci CDS_NO_INFO Information not available. 89862306a36Sopenharmony_ci CDS_NO_DISC 89962306a36Sopenharmony_ci CDS_TRAY_OPEN 90062306a36Sopenharmony_ci CDS_DRIVE_NOT_READY 90162306a36Sopenharmony_ci CDS_DISC_OK 90262306a36Sopenharmony_ci -1 error 90362306a36Sopenharmony_ci =================== ========================== 90462306a36Sopenharmony_ci 90562306a36Sopenharmony_ci error returns: 90662306a36Sopenharmony_ci - ENOSYS Drive can't detect drive status 90762306a36Sopenharmony_ci - EINVAL Slot number beyond capacity of drive 90862306a36Sopenharmony_ci - ENOMEM Out of memory 90962306a36Sopenharmony_ci 91062306a36Sopenharmony_ci 91162306a36Sopenharmony_ci 91262306a36Sopenharmony_ci 91362306a36Sopenharmony_ciCDROM_DISC_STATUS 91462306a36Sopenharmony_ci Get disc type, etc. 91562306a36Sopenharmony_ci 91662306a36Sopenharmony_ci 91762306a36Sopenharmony_ci usage:: 91862306a36Sopenharmony_ci 91962306a36Sopenharmony_ci ioctl(fd, CDROM_DISC_STATUS, 0); 92062306a36Sopenharmony_ci 92162306a36Sopenharmony_ci 92262306a36Sopenharmony_ci inputs: 92362306a36Sopenharmony_ci none 92462306a36Sopenharmony_ci 92562306a36Sopenharmony_ci 92662306a36Sopenharmony_ci outputs: 92762306a36Sopenharmony_ci Ioctl return value will be one of the following values 92862306a36Sopenharmony_ci 92962306a36Sopenharmony_ci from <linux/cdrom.h>: 93062306a36Sopenharmony_ci 93162306a36Sopenharmony_ci - CDS_NO_INFO 93262306a36Sopenharmony_ci - CDS_AUDIO 93362306a36Sopenharmony_ci - CDS_MIXED 93462306a36Sopenharmony_ci - CDS_XA_2_2 93562306a36Sopenharmony_ci - CDS_XA_2_1 93662306a36Sopenharmony_ci - CDS_DATA_1 93762306a36Sopenharmony_ci 93862306a36Sopenharmony_ci error returns: 93962306a36Sopenharmony_ci none at present 94062306a36Sopenharmony_ci 94162306a36Sopenharmony_ci notes: 94262306a36Sopenharmony_ci - Source code comments state:: 94362306a36Sopenharmony_ci 94462306a36Sopenharmony_ci 94562306a36Sopenharmony_ci Ok, this is where problems start. The current interface for 94662306a36Sopenharmony_ci the CDROM_DISC_STATUS ioctl is flawed. It makes the false 94762306a36Sopenharmony_ci assumption that CDs are all CDS_DATA_1 or all CDS_AUDIO, etc. 94862306a36Sopenharmony_ci Unfortunately, while this is often the case, it is also 94962306a36Sopenharmony_ci very common for CDs to have some tracks with data, and some 95062306a36Sopenharmony_ci tracks with audio. Just because I feel like it, I declare 95162306a36Sopenharmony_ci the following to be the best way to cope. If the CD has 95262306a36Sopenharmony_ci ANY data tracks on it, it will be returned as a data CD. 95362306a36Sopenharmony_ci If it has any XA tracks, I will return it as that. Now I 95462306a36Sopenharmony_ci could simplify this interface by combining these returns with 95562306a36Sopenharmony_ci the above, but this more clearly demonstrates the problem 95662306a36Sopenharmony_ci with the current interface. Too bad this wasn't designed 95762306a36Sopenharmony_ci to use bitmasks... -Erik 95862306a36Sopenharmony_ci 95962306a36Sopenharmony_ci Well, now we have the option CDS_MIXED: a mixed-type CD. 96062306a36Sopenharmony_ci User level programmers might feel the ioctl is not very 96162306a36Sopenharmony_ci useful. 96262306a36Sopenharmony_ci ---david 96362306a36Sopenharmony_ci 96462306a36Sopenharmony_ci 96562306a36Sopenharmony_ci 96662306a36Sopenharmony_ci 96762306a36Sopenharmony_ciCDROM_CHANGER_NSLOTS 96862306a36Sopenharmony_ci Get number of slots 96962306a36Sopenharmony_ci 97062306a36Sopenharmony_ci 97162306a36Sopenharmony_ci usage:: 97262306a36Sopenharmony_ci 97362306a36Sopenharmony_ci ioctl(fd, CDROM_CHANGER_NSLOTS, 0); 97462306a36Sopenharmony_ci 97562306a36Sopenharmony_ci 97662306a36Sopenharmony_ci inputs: 97762306a36Sopenharmony_ci none 97862306a36Sopenharmony_ci 97962306a36Sopenharmony_ci 98062306a36Sopenharmony_ci outputs: 98162306a36Sopenharmony_ci The ioctl return value will be the number of slots in a 98262306a36Sopenharmony_ci CD changer. Typically 1 for non-multi-disk devices. 98362306a36Sopenharmony_ci 98462306a36Sopenharmony_ci error returns: 98562306a36Sopenharmony_ci none 98662306a36Sopenharmony_ci 98762306a36Sopenharmony_ci 98862306a36Sopenharmony_ci 98962306a36Sopenharmony_ciCDROM_LOCKDOOR 99062306a36Sopenharmony_ci lock or unlock door 99162306a36Sopenharmony_ci 99262306a36Sopenharmony_ci 99362306a36Sopenharmony_ci usage:: 99462306a36Sopenharmony_ci 99562306a36Sopenharmony_ci int lock; 99662306a36Sopenharmony_ci 99762306a36Sopenharmony_ci ioctl(fd, CDROM_LOCKDOOR, lock); 99862306a36Sopenharmony_ci 99962306a36Sopenharmony_ci inputs: 100062306a36Sopenharmony_ci Door lock flag, 1=lock, 0=unlock 100162306a36Sopenharmony_ci 100262306a36Sopenharmony_ci 100362306a36Sopenharmony_ci outputs: 100462306a36Sopenharmony_ci none 100562306a36Sopenharmony_ci 100662306a36Sopenharmony_ci 100762306a36Sopenharmony_ci error returns: 100862306a36Sopenharmony_ci - EDRIVE_CANT_DO_THIS 100962306a36Sopenharmony_ci 101062306a36Sopenharmony_ci Door lock function not supported. 101162306a36Sopenharmony_ci - EBUSY 101262306a36Sopenharmony_ci 101362306a36Sopenharmony_ci Attempt to unlock when multiple users 101462306a36Sopenharmony_ci have the drive open and not CAP_SYS_ADMIN 101562306a36Sopenharmony_ci 101662306a36Sopenharmony_ci notes: 101762306a36Sopenharmony_ci As of 2.6.8.1, the lock flag is a global lock, meaning that 101862306a36Sopenharmony_ci all CD drives will be locked or unlocked together. This is 101962306a36Sopenharmony_ci probably a bug. 102062306a36Sopenharmony_ci 102162306a36Sopenharmony_ci The EDRIVE_CANT_DO_THIS value is defined in <linux/cdrom.h> 102262306a36Sopenharmony_ci and is currently (2.6.8.1) the same as EOPNOTSUPP 102362306a36Sopenharmony_ci 102462306a36Sopenharmony_ci 102562306a36Sopenharmony_ci 102662306a36Sopenharmony_ciCDROM_DEBUG 102762306a36Sopenharmony_ci Turn debug messages on/off 102862306a36Sopenharmony_ci 102962306a36Sopenharmony_ci 103062306a36Sopenharmony_ci usage:: 103162306a36Sopenharmony_ci 103262306a36Sopenharmony_ci int debug; 103362306a36Sopenharmony_ci 103462306a36Sopenharmony_ci ioctl(fd, CDROM_DEBUG, debug); 103562306a36Sopenharmony_ci 103662306a36Sopenharmony_ci inputs: 103762306a36Sopenharmony_ci Cdrom debug flag, 0=disable, 1=enable 103862306a36Sopenharmony_ci 103962306a36Sopenharmony_ci 104062306a36Sopenharmony_ci outputs: 104162306a36Sopenharmony_ci The ioctl return value will be the new debug flag. 104262306a36Sopenharmony_ci 104362306a36Sopenharmony_ci 104462306a36Sopenharmony_ci error return: 104562306a36Sopenharmony_ci - EACCES Access denied: requires CAP_SYS_ADMIN 104662306a36Sopenharmony_ci 104762306a36Sopenharmony_ci 104862306a36Sopenharmony_ci 104962306a36Sopenharmony_ciCDROM_GET_CAPABILITY 105062306a36Sopenharmony_ci get capabilities 105162306a36Sopenharmony_ci 105262306a36Sopenharmony_ci 105362306a36Sopenharmony_ci usage:: 105462306a36Sopenharmony_ci 105562306a36Sopenharmony_ci ioctl(fd, CDROM_GET_CAPABILITY, 0); 105662306a36Sopenharmony_ci 105762306a36Sopenharmony_ci 105862306a36Sopenharmony_ci inputs: 105962306a36Sopenharmony_ci none 106062306a36Sopenharmony_ci 106162306a36Sopenharmony_ci 106262306a36Sopenharmony_ci outputs: 106362306a36Sopenharmony_ci The ioctl return value is the current device capability 106462306a36Sopenharmony_ci flags. See CDC_CLOSE_TRAY, CDC_OPEN_TRAY, etc. 106562306a36Sopenharmony_ci 106662306a36Sopenharmony_ci 106762306a36Sopenharmony_ci 106862306a36Sopenharmony_ciCDROMAUDIOBUFSIZ 106962306a36Sopenharmony_ci set the audio buffer size 107062306a36Sopenharmony_ci 107162306a36Sopenharmony_ci 107262306a36Sopenharmony_ci usage:: 107362306a36Sopenharmony_ci 107462306a36Sopenharmony_ci int arg; 107562306a36Sopenharmony_ci 107662306a36Sopenharmony_ci ioctl(fd, CDROMAUDIOBUFSIZ, val); 107762306a36Sopenharmony_ci 107862306a36Sopenharmony_ci inputs: 107962306a36Sopenharmony_ci New audio buffer size 108062306a36Sopenharmony_ci 108162306a36Sopenharmony_ci 108262306a36Sopenharmony_ci outputs: 108362306a36Sopenharmony_ci The ioctl return value is the new audio buffer size, or -1 108462306a36Sopenharmony_ci on error. 108562306a36Sopenharmony_ci 108662306a36Sopenharmony_ci error return: 108762306a36Sopenharmony_ci - ENOSYS Not supported by this driver. 108862306a36Sopenharmony_ci 108962306a36Sopenharmony_ci notes: 109062306a36Sopenharmony_ci Not supported by all drivers. 109162306a36Sopenharmony_ci 109262306a36Sopenharmony_ci 109362306a36Sopenharmony_ci 109462306a36Sopenharmony_ci 109562306a36Sopenharmony_ciDVD_READ_STRUCT Read structure 109662306a36Sopenharmony_ci 109762306a36Sopenharmony_ci usage:: 109862306a36Sopenharmony_ci 109962306a36Sopenharmony_ci dvd_struct s; 110062306a36Sopenharmony_ci 110162306a36Sopenharmony_ci ioctl(fd, DVD_READ_STRUCT, &s); 110262306a36Sopenharmony_ci 110362306a36Sopenharmony_ci inputs: 110462306a36Sopenharmony_ci dvd_struct structure, containing: 110562306a36Sopenharmony_ci 110662306a36Sopenharmony_ci =================== ========================================== 110762306a36Sopenharmony_ci type specifies the information desired, one of 110862306a36Sopenharmony_ci DVD_STRUCT_PHYSICAL, DVD_STRUCT_COPYRIGHT, 110962306a36Sopenharmony_ci DVD_STRUCT_DISCKEY, DVD_STRUCT_BCA, 111062306a36Sopenharmony_ci DVD_STRUCT_MANUFACT 111162306a36Sopenharmony_ci physical.layer_num desired layer, indexed from 0 111262306a36Sopenharmony_ci copyright.layer_num desired layer, indexed from 0 111362306a36Sopenharmony_ci disckey.agid 111462306a36Sopenharmony_ci =================== ========================================== 111562306a36Sopenharmony_ci 111662306a36Sopenharmony_ci outputs: 111762306a36Sopenharmony_ci dvd_struct structure, containing: 111862306a36Sopenharmony_ci 111962306a36Sopenharmony_ci =================== ================================ 112062306a36Sopenharmony_ci physical for type == DVD_STRUCT_PHYSICAL 112162306a36Sopenharmony_ci copyright for type == DVD_STRUCT_COPYRIGHT 112262306a36Sopenharmony_ci disckey.value for type == DVD_STRUCT_DISCKEY 112362306a36Sopenharmony_ci bca.{len,value} for type == DVD_STRUCT_BCA 112462306a36Sopenharmony_ci manufact.{len,valu} for type == DVD_STRUCT_MANUFACT 112562306a36Sopenharmony_ci =================== ================================ 112662306a36Sopenharmony_ci 112762306a36Sopenharmony_ci error returns: 112862306a36Sopenharmony_ci - EINVAL physical.layer_num exceeds number of layers 112962306a36Sopenharmony_ci - EIO Received invalid response from drive 113062306a36Sopenharmony_ci 113162306a36Sopenharmony_ci 113262306a36Sopenharmony_ci 113362306a36Sopenharmony_ciDVD_WRITE_STRUCT Write structure 113462306a36Sopenharmony_ci 113562306a36Sopenharmony_ci Not implemented, as of 2.6.8.1 113662306a36Sopenharmony_ci 113762306a36Sopenharmony_ci 113862306a36Sopenharmony_ci 113962306a36Sopenharmony_ciDVD_AUTH Authentication 114062306a36Sopenharmony_ci 114162306a36Sopenharmony_ci usage:: 114262306a36Sopenharmony_ci 114362306a36Sopenharmony_ci dvd_authinfo ai; 114462306a36Sopenharmony_ci 114562306a36Sopenharmony_ci ioctl(fd, DVD_AUTH, &ai); 114662306a36Sopenharmony_ci 114762306a36Sopenharmony_ci inputs: 114862306a36Sopenharmony_ci dvd_authinfo structure. See <linux/cdrom.h> 114962306a36Sopenharmony_ci 115062306a36Sopenharmony_ci 115162306a36Sopenharmony_ci outputs: 115262306a36Sopenharmony_ci dvd_authinfo structure. 115362306a36Sopenharmony_ci 115462306a36Sopenharmony_ci 115562306a36Sopenharmony_ci error return: 115662306a36Sopenharmony_ci - ENOTTY ai.type not recognized. 115762306a36Sopenharmony_ci 115862306a36Sopenharmony_ci 115962306a36Sopenharmony_ci 116062306a36Sopenharmony_ciCDROM_SEND_PACKET 116162306a36Sopenharmony_ci send a packet to the drive 116262306a36Sopenharmony_ci 116362306a36Sopenharmony_ci 116462306a36Sopenharmony_ci usage:: 116562306a36Sopenharmony_ci 116662306a36Sopenharmony_ci struct cdrom_generic_command cgc; 116762306a36Sopenharmony_ci 116862306a36Sopenharmony_ci ioctl(fd, CDROM_SEND_PACKET, &cgc); 116962306a36Sopenharmony_ci 117062306a36Sopenharmony_ci inputs: 117162306a36Sopenharmony_ci cdrom_generic_command structure containing the packet to send. 117262306a36Sopenharmony_ci 117362306a36Sopenharmony_ci 117462306a36Sopenharmony_ci outputs: 117562306a36Sopenharmony_ci none 117662306a36Sopenharmony_ci 117762306a36Sopenharmony_ci cdrom_generic_command structure containing results. 117862306a36Sopenharmony_ci 117962306a36Sopenharmony_ci error return: 118062306a36Sopenharmony_ci - EIO 118162306a36Sopenharmony_ci 118262306a36Sopenharmony_ci command failed. 118362306a36Sopenharmony_ci - EPERM 118462306a36Sopenharmony_ci 118562306a36Sopenharmony_ci Operation not permitted, either because a 118662306a36Sopenharmony_ci write command was attempted on a drive which 118762306a36Sopenharmony_ci is opened read-only, or because the command 118862306a36Sopenharmony_ci requires CAP_SYS_RAWIO 118962306a36Sopenharmony_ci - EINVAL 119062306a36Sopenharmony_ci 119162306a36Sopenharmony_ci cgc.data_direction not set 119262306a36Sopenharmony_ci 119362306a36Sopenharmony_ci 119462306a36Sopenharmony_ci 119562306a36Sopenharmony_ciCDROM_NEXT_WRITABLE 119662306a36Sopenharmony_ci get next writable block 119762306a36Sopenharmony_ci 119862306a36Sopenharmony_ci 119962306a36Sopenharmony_ci usage:: 120062306a36Sopenharmony_ci 120162306a36Sopenharmony_ci long next; 120262306a36Sopenharmony_ci 120362306a36Sopenharmony_ci ioctl(fd, CDROM_NEXT_WRITABLE, &next); 120462306a36Sopenharmony_ci 120562306a36Sopenharmony_ci inputs: 120662306a36Sopenharmony_ci none 120762306a36Sopenharmony_ci 120862306a36Sopenharmony_ci 120962306a36Sopenharmony_ci outputs: 121062306a36Sopenharmony_ci The next writable block. 121162306a36Sopenharmony_ci 121262306a36Sopenharmony_ci 121362306a36Sopenharmony_ci notes: 121462306a36Sopenharmony_ci If the device does not support this ioctl directly, the 121562306a36Sopenharmony_ci 121662306a36Sopenharmony_ci ioctl will return CDROM_LAST_WRITTEN + 7. 121762306a36Sopenharmony_ci 121862306a36Sopenharmony_ci 121962306a36Sopenharmony_ci 122062306a36Sopenharmony_ciCDROM_LAST_WRITTEN 122162306a36Sopenharmony_ci get last block written on disc 122262306a36Sopenharmony_ci 122362306a36Sopenharmony_ci 122462306a36Sopenharmony_ci usage:: 122562306a36Sopenharmony_ci 122662306a36Sopenharmony_ci long last; 122762306a36Sopenharmony_ci 122862306a36Sopenharmony_ci ioctl(fd, CDROM_LAST_WRITTEN, &last); 122962306a36Sopenharmony_ci 123062306a36Sopenharmony_ci inputs: 123162306a36Sopenharmony_ci none 123262306a36Sopenharmony_ci 123362306a36Sopenharmony_ci 123462306a36Sopenharmony_ci outputs: 123562306a36Sopenharmony_ci The last block written on disc 123662306a36Sopenharmony_ci 123762306a36Sopenharmony_ci 123862306a36Sopenharmony_ci notes: 123962306a36Sopenharmony_ci If the device does not support this ioctl directly, the 124062306a36Sopenharmony_ci result is derived from the disc's table of contents. If the 124162306a36Sopenharmony_ci table of contents can't be read, this ioctl returns an 124262306a36Sopenharmony_ci error. 1243