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