Linux 4.15.6
[linux/fpc-iii.git] / Documentation / ioctl / cdrom.txt
bloba4d62a9d677120bf16903aa1d046c1d55f8faef5
1                 Summary of CDROM ioctl calls.
2                 ============================
4                 Edward A. Falk <efalk@google.com>
6                 November, 2004
8 This document attempts to describe the ioctl(2) calls supported by
9 the CDROM layer.  These are by-and-large implemented (as of Linux 2.6)
10 in drivers/cdrom/cdrom.c and drivers/block/scsi_ioctl.c
12 ioctl values are listed in <linux/cdrom.h>.  As of this writing, they
13 are as follows:
15         CDROMPAUSE              Pause Audio Operation
16         CDROMRESUME             Resume paused Audio Operation
17         CDROMPLAYMSF            Play Audio MSF (struct cdrom_msf)
18         CDROMPLAYTRKIND         Play Audio Track/index (struct cdrom_ti)
19         CDROMREADTOCHDR         Read TOC header (struct cdrom_tochdr)
20         CDROMREADTOCENTRY       Read TOC entry (struct cdrom_tocentry)
21         CDROMSTOP               Stop the cdrom drive
22         CDROMSTART              Start the cdrom drive
23         CDROMEJECT              Ejects the cdrom media
24         CDROMVOLCTRL            Control output volume (struct cdrom_volctrl)
25         CDROMSUBCHNL            Read subchannel data (struct cdrom_subchnl)
26         CDROMREADMODE2          Read CDROM mode 2 data (2336 Bytes)
27                                            (struct cdrom_read)
28         CDROMREADMODE1          Read CDROM mode 1 data (2048 Bytes)
29                                            (struct cdrom_read)
30         CDROMREADAUDIO          (struct cdrom_read_audio)
31         CDROMEJECT_SW           enable(1)/disable(0) auto-ejecting
32         CDROMMULTISESSION       Obtain the start-of-last-session
33                                   address of multi session disks
34                                   (struct cdrom_multisession)
35         CDROM_GET_MCN           Obtain the "Universal Product Code"
36                                    if available (struct cdrom_mcn)
37         CDROM_GET_UPC           Deprecated, use CDROM_GET_MCN instead.
38         CDROMRESET              hard-reset the drive
39         CDROMVOLREAD            Get the drive's volume setting
40                                           (struct cdrom_volctrl)
41         CDROMREADRAW            read data in raw mode (2352 Bytes)
42                                            (struct cdrom_read)
43         CDROMREADCOOKED         read data in cooked mode
44         CDROMSEEK               seek msf address
45         CDROMPLAYBLK            scsi-cd only, (struct cdrom_blk)
46         CDROMREADALL            read all 2646 bytes
47         CDROMGETSPINDOWN        return 4-bit spindown value
48         CDROMSETSPINDOWN        set 4-bit spindown value
49         CDROMCLOSETRAY          pendant of CDROMEJECT
50         CDROM_SET_OPTIONS       Set behavior options
51         CDROM_CLEAR_OPTIONS     Clear behavior options
52         CDROM_SELECT_SPEED      Set the CD-ROM speed
53         CDROM_SELECT_DISC       Select disc (for juke-boxes)
54         CDROM_MEDIA_CHANGED     Check is media changed
55         CDROM_DRIVE_STATUS      Get tray position, etc.
56         CDROM_DISC_STATUS       Get disc type, etc.
57         CDROM_CHANGER_NSLOTS    Get number of slots
58         CDROM_LOCKDOOR          lock or unlock door
59         CDROM_DEBUG             Turn debug messages on/off
60         CDROM_GET_CAPABILITY    get capabilities
61         CDROMAUDIOBUFSIZ        set the audio buffer size
62         DVD_READ_STRUCT         Read structure
63         DVD_WRITE_STRUCT        Write structure
64         DVD_AUTH                Authentication
65         CDROM_SEND_PACKET       send a packet to the drive
66         CDROM_NEXT_WRITABLE     get next writable block
67         CDROM_LAST_WRITTEN      get last block written on disc
70 The information that follows was determined from reading kernel source
71 code.  It is likely that some corrections will be made over time.
79 General:
81         Unless otherwise specified, all ioctl calls return 0 on success
82         and -1 with errno set to an appropriate value on error.  (Some
83         ioctls return non-negative data values.)
85         Unless otherwise specified, all ioctl calls return -1 and set
86         errno to EFAULT on a failed attempt to copy data to or from user
87         address space.
89         Individual drivers may return error codes not listed here.
91         Unless otherwise specified, all data structures and constants
92         are defined in <linux/cdrom.h>
97 CDROMPAUSE                      Pause Audio Operation
99         usage:
101           ioctl(fd, CDROMPAUSE, 0);
103         inputs:         none
105         outputs:        none
107         error return:
108           ENOSYS        cd drive not audio-capable.
111 CDROMRESUME                     Resume paused Audio Operation
113         usage:
115           ioctl(fd, CDROMRESUME, 0);
117         inputs:         none
119         outputs:        none
121         error return:
122           ENOSYS        cd drive not audio-capable.
125 CDROMPLAYMSF                    Play Audio MSF (struct cdrom_msf)
127         usage:
129           struct cdrom_msf msf;
130           ioctl(fd, CDROMPLAYMSF, &msf);
132         inputs:
133           cdrom_msf structure, describing a segment of music to play
135         outputs:        none
137         error return:
138           ENOSYS        cd drive not audio-capable.
140         notes:
141           MSF stands for minutes-seconds-frames
142           LBA stands for logical block address
144           Segment is described as start and end times, where each time
145           is described as minutes:seconds:frames.  A frame is 1/75 of
146           a second.
149 CDROMPLAYTRKIND                 Play Audio Track/index (struct cdrom_ti)
151         usage:
153           struct cdrom_ti ti;
154           ioctl(fd, CDROMPLAYTRKIND, &ti);
156         inputs:
157           cdrom_ti structure, describing a segment of music to play
159         outputs:        none
161         error return:
162           ENOSYS        cd drive not audio-capable.
164         notes:
165           Segment is described as start and end times, where each time
166           is described as a track and an index.
170 CDROMREADTOCHDR                 Read TOC header (struct cdrom_tochdr)
172         usage:
174           cdrom_tochdr header;
175           ioctl(fd, CDROMREADTOCHDR, &header);
177         inputs:
178           cdrom_tochdr structure
180         outputs:
181           cdrom_tochdr structure
183         error return:
184           ENOSYS        cd drive not audio-capable.
188 CDROMREADTOCENTRY               Read TOC entry (struct cdrom_tocentry)
190         usage:
192           struct cdrom_tocentry entry;
193           ioctl(fd, CDROMREADTOCENTRY, &entry);
195         inputs:
196           cdrom_tocentry structure
198         outputs:
199           cdrom_tocentry structure
201         error return:
202           ENOSYS        cd drive not audio-capable.
203           EINVAL        entry.cdte_format not CDROM_MSF or CDROM_LBA
204           EINVAL        requested track out of bounds
205           EIO           I/O error reading TOC
207         notes:
208           TOC stands for Table Of Contents
209           MSF stands for minutes-seconds-frames
210           LBA stands for logical block address
214 CDROMSTOP                       Stop the cdrom drive
216         usage:
218           ioctl(fd, CDROMSTOP, 0);
220         inputs:         none
222         outputs:        none
224         error return:
225           ENOSYS        cd drive not audio-capable.
227         notes:
228           Exact interpretation of this ioctl depends on the device,
229           but most seem to spin the drive down.
232 CDROMSTART                      Start the cdrom drive
234         usage:
236           ioctl(fd, CDROMSTART, 0);
238         inputs:         none
240         outputs:        none
242         error return:
243           ENOSYS        cd drive not audio-capable.
245         notes:
246           Exact interpretation of this ioctl depends on the device,
247           but most seem to spin the drive up and/or close the tray.
248           Other devices ignore the ioctl completely.
251 CDROMEJECT                      Ejects the cdrom media
253         usage:
255           ioctl(fd, CDROMEJECT, 0);
257         inputs:         none
259         outputs:        none
261         error returns:
262           ENOSYS        cd drive not capable of ejecting
263           EBUSY         other processes are accessing drive, or door is locked
265         notes:
266           See CDROM_LOCKDOOR, below.
270 CDROMCLOSETRAY                  pendant of CDROMEJECT
272         usage:
274           ioctl(fd, CDROMCLOSETRAY, 0);
276         inputs:         none
278         outputs:        none
280         error returns:
281           ENOSYS        cd drive not capable of closing the tray
282           EBUSY         other processes are accessing drive, or door is locked
284         notes:
285           See CDROM_LOCKDOOR, below.
289 CDROMVOLCTRL                    Control output volume (struct cdrom_volctrl)
291         usage:
293           struct cdrom_volctrl volume;
294           ioctl(fd, CDROMVOLCTRL, &volume);
296         inputs:
297           cdrom_volctrl structure containing volumes for up to 4
298           channels.
300         outputs:        none
302         error return:
303           ENOSYS        cd drive not audio-capable.
307 CDROMVOLREAD                    Get the drive's volume setting
308                                           (struct cdrom_volctrl)
310         usage:
312           struct cdrom_volctrl volume;
313           ioctl(fd, CDROMVOLREAD, &volume);
315         inputs:         none
317         outputs:
318           The current volume settings.
320         error return:
321           ENOSYS        cd drive not audio-capable.
325 CDROMSUBCHNL                    Read subchannel data (struct cdrom_subchnl)
327         usage:
329           struct cdrom_subchnl q;
330           ioctl(fd, CDROMSUBCHNL, &q);
332         inputs:
333           cdrom_subchnl structure
335         outputs:
336           cdrom_subchnl structure
338         error return:
339           ENOSYS        cd drive not audio-capable.
340           EINVAL        format not CDROM_MSF or CDROM_LBA
342         notes:
343           Format is converted to CDROM_MSF or CDROM_LBA
344           as per user request on return
348 CDROMREADRAW                    read data in raw mode (2352 Bytes)
349                                            (struct cdrom_read)
351         usage:
353           union {
354             struct cdrom_msf msf;               /* input */
355             char buffer[CD_FRAMESIZE_RAW];      /* return */
356           } arg;
357           ioctl(fd, CDROMREADRAW, &arg);
359         inputs:
360           cdrom_msf structure indicating an address to read.
361           Only the start values are significant.
363         outputs:
364           Data written to address provided by user.
366         error return:
367           EINVAL        address less than 0, or msf less than 0:2:0
368           ENOMEM        out of memory
370         notes:
371           As of 2.6.8.1, comments in <linux/cdrom.h> indicate that this
372           ioctl accepts a cdrom_read structure, but actual source code
373           reads a cdrom_msf structure and writes a buffer of data to
374           the same address.
376           MSF values are converted to LBA values via this formula:
378             lba = (((m * CD_SECS) + s) * CD_FRAMES + f) - CD_MSF_OFFSET;
383 CDROMREADMODE1                  Read CDROM mode 1 data (2048 Bytes)
384                                            (struct cdrom_read)
386         notes:
387           Identical to CDROMREADRAW except that block size is
388           CD_FRAMESIZE (2048) bytes
392 CDROMREADMODE2                  Read CDROM mode 2 data (2336 Bytes)
393                                            (struct cdrom_read)
395         notes:
396           Identical to CDROMREADRAW except that block size is
397           CD_FRAMESIZE_RAW0 (2336) bytes
401 CDROMREADAUDIO                  (struct cdrom_read_audio)
403         usage:
405           struct cdrom_read_audio ra;
406           ioctl(fd, CDROMREADAUDIO, &ra);
408         inputs:
409           cdrom_read_audio structure containing read start
410           point and length
412         outputs:
413           audio data, returned to buffer indicated by ra
415         error return:
416           EINVAL        format not CDROM_MSF or CDROM_LBA
417           EINVAL        nframes not in range [1 75]
418           ENXIO         drive has no queue (probably means invalid fd)
419           ENOMEM        out of memory
422 CDROMEJECT_SW                   enable(1)/disable(0) auto-ejecting
424         usage:
426           int val;
427           ioctl(fd, CDROMEJECT_SW, val);
429         inputs:
430           Flag specifying auto-eject flag.
432         outputs:        none
434         error return:
435           ENOSYS        Drive is not capable of ejecting.
436           EBUSY         Door is locked
441 CDROMMULTISESSION               Obtain the start-of-last-session
442                                   address of multi session disks
443                                   (struct cdrom_multisession)
444         usage:
446           struct cdrom_multisession ms_info;
447           ioctl(fd, CDROMMULTISESSION, &ms_info);
449         inputs:
450           cdrom_multisession structure containing desired
451           format.
453         outputs:
454           cdrom_multisession structure is filled with last_session
455           information.
457         error return:
458           EINVAL        format not CDROM_MSF or CDROM_LBA
461 CDROM_GET_MCN                   Obtain the "Universal Product Code"
462                                    if available (struct cdrom_mcn)
464         usage:
466           struct cdrom_mcn mcn;
467           ioctl(fd, CDROM_GET_MCN, &mcn);
469         inputs:         none
471         outputs:
472           Universal Product Code
474         error return:
475           ENOSYS        Drive is not capable of reading MCN data.
477         notes:
478           Source code comments state:
480             The following function is implemented, although very few
481             audio discs give Universal Product Code information, which
482             should just be the Medium Catalog Number on the box.  Note,
483             that the way the code is written on the CD is /not/ uniform
484             across all discs!
489 CDROM_GET_UPC                   CDROM_GET_MCN  (deprecated)
491         Not implemented, as of 2.6.8.1
495 CDROMRESET                      hard-reset the drive
497         usage:
499           ioctl(fd, CDROMRESET, 0);
501         inputs:         none
503         outputs:        none
505         error return:
506           EACCES        Access denied:  requires CAP_SYS_ADMIN
507           ENOSYS        Drive is not capable of resetting.
512 CDROMREADCOOKED                 read data in cooked mode
514         usage:
516           u8 buffer[CD_FRAMESIZE]
517           ioctl(fd, CDROMREADCOOKED, buffer);
519         inputs:         none
521         outputs:
522           2048 bytes of data, "cooked" mode.
524         notes:
525           Not implemented on all drives.
530 CDROMREADALL                    read all 2646 bytes
532         Same as CDROMREADCOOKED, but reads 2646 bytes.
536 CDROMSEEK                       seek msf address
538         usage:
540           struct cdrom_msf msf;
541           ioctl(fd, CDROMSEEK, &msf);
543         inputs:
544           MSF address to seek to.
546         outputs:        none
550 CDROMPLAYBLK                    scsi-cd only, (struct cdrom_blk)
552         usage:
554           struct cdrom_blk blk;
555           ioctl(fd, CDROMPLAYBLK, &blk);
557         inputs:
558           Region to play
560         outputs:        none
564 CDROMGETSPINDOWN
566         usage:
568           char spindown;
569           ioctl(fd, CDROMGETSPINDOWN, &spindown);
571         inputs:         none
573         outputs:
574           The value of the current 4-bit spindown value.
579 CDROMSETSPINDOWN
581         usage:
583           char spindown
584           ioctl(fd, CDROMSETSPINDOWN, &spindown);
586         inputs:
587           4-bit value used to control spindown (TODO: more detail here)
589         outputs:        none
595 CDROM_SET_OPTIONS               Set behavior options
597         usage:
599           int options;
600           ioctl(fd, CDROM_SET_OPTIONS, options);
602         inputs:
603           New values for drive options.  The logical 'or' of:
604             CDO_AUTO_CLOSE      close tray on first open(2)
605             CDO_AUTO_EJECT      open tray on last release
606             CDO_USE_FFLAGS      use O_NONBLOCK information on open
607             CDO_LOCK            lock tray on open files
608             CDO_CHECK_TYPE      check type on open for data
610         outputs:
611           Returns the resulting options settings in the
612           ioctl return value.  Returns -1 on error.
614         error return:
615           ENOSYS        selected option(s) not supported by drive.
620 CDROM_CLEAR_OPTIONS             Clear behavior options
622         Same as CDROM_SET_OPTIONS, except that selected options are
623         turned off.
627 CDROM_SELECT_SPEED              Set the CD-ROM speed
629         usage:
631           int speed;
632           ioctl(fd, CDROM_SELECT_SPEED, speed);
634         inputs:
635           New drive speed.
637         outputs:        none
639         error return:
640           ENOSYS        speed selection not supported by drive.
644 CDROM_SELECT_DISC               Select disc (for juke-boxes)
646         usage:
648           int disk;
649           ioctl(fd, CDROM_SELECT_DISC, disk);
651         inputs:
652           Disk to load into drive.
654         outputs:        none
656         error return:
657           EINVAL        Disk number beyond capacity of drive
661 CDROM_MEDIA_CHANGED             Check is media changed
663         usage:
665           int slot;
666           ioctl(fd, CDROM_MEDIA_CHANGED, slot);
668         inputs:
669           Slot number to be tested, always zero except for jukeboxes.
670           May also be special values CDSL_NONE or CDSL_CURRENT
672         outputs:
673           Ioctl return value is 0 or 1 depending on whether the media
674           has been changed, or -1 on error.
676         error returns:
677           ENOSYS        Drive can't detect media change
678           EINVAL        Slot number beyond capacity of drive
679           ENOMEM        Out of memory
683 CDROM_DRIVE_STATUS              Get tray position, etc.
685         usage:
687           int slot;
688           ioctl(fd, CDROM_DRIVE_STATUS, slot);
690         inputs:
691           Slot number to be tested, always zero except for jukeboxes.
692           May also be special values CDSL_NONE or CDSL_CURRENT
694         outputs:
695           Ioctl return value will be one of the following values
696           from <linux/cdrom.h>:
698             CDS_NO_INFO         Information not available.
699             CDS_NO_DISC
700             CDS_TRAY_OPEN
701             CDS_DRIVE_NOT_READY
702             CDS_DISC_OK
703             -1                  error
705         error returns:
706           ENOSYS        Drive can't detect drive status
707           EINVAL        Slot number beyond capacity of drive
708           ENOMEM        Out of memory
713 CDROM_DISC_STATUS               Get disc type, etc.
715         usage:
717           ioctl(fd, CDROM_DISC_STATUS, 0);
719         inputs:         none
721         outputs:
722           Ioctl return value will be one of the following values
723           from <linux/cdrom.h>:
724             CDS_NO_INFO
725             CDS_AUDIO
726             CDS_MIXED
727             CDS_XA_2_2
728             CDS_XA_2_1
729             CDS_DATA_1
731         error returns:  none at present
733         notes:
734           Source code comments state:
736             Ok, this is where problems start.  The current interface for
737             the CDROM_DISC_STATUS ioctl is flawed.  It makes the false
738             assumption that CDs are all CDS_DATA_1 or all CDS_AUDIO, etc.
739             Unfortunately, while this is often the case, it is also
740             very common for CDs to have some tracks with data, and some
741             tracks with audio.  Just because I feel like it, I declare
742             the following to be the best way to cope.  If the CD has
743             ANY data tracks on it, it will be returned as a data CD.
744             If it has any XA tracks, I will return it as that.  Now I
745             could simplify this interface by combining these returns with
746             the above, but this more clearly demonstrates the problem
747             with the current interface.  Too bad this wasn't designed
748             to use bitmasks...         -Erik
750             Well, now we have the option CDS_MIXED: a mixed-type CD.
751             User level programmers might feel the ioctl is not very
752             useful.
753                         ---david
758 CDROM_CHANGER_NSLOTS            Get number of slots
760         usage:
762           ioctl(fd, CDROM_CHANGER_NSLOTS, 0);
764         inputs:         none
766         outputs:
767           The ioctl return value will be the number of slots in a
768           CD changer.  Typically 1 for non-multi-disk devices.
770         error returns:  none
774 CDROM_LOCKDOOR                  lock or unlock door
776         usage:
778           int lock;
779           ioctl(fd, CDROM_LOCKDOOR, lock);
781         inputs:
782           Door lock flag, 1=lock, 0=unlock
784         outputs:        none
786         error returns:
787           EDRIVE_CANT_DO_THIS   Door lock function not supported.
788           EBUSY                 Attempt to unlock when multiple users
789                                 have the drive open and not CAP_SYS_ADMIN
791         notes:
792           As of 2.6.8.1, the lock flag is a global lock, meaning that
793           all CD drives will be locked or unlocked together.  This is
794           probably a bug.
796           The EDRIVE_CANT_DO_THIS value is defined in <linux/cdrom.h>
797           and is currently (2.6.8.1) the same as EOPNOTSUPP
801 CDROM_DEBUG                     Turn debug messages on/off
803         usage:
805           int debug;
806           ioctl(fd, CDROM_DEBUG, debug);
808         inputs:
809           Cdrom debug flag, 0=disable, 1=enable
811         outputs:
812           The ioctl return value will be the new debug flag.
814         error return:
815           EACCES        Access denied:  requires CAP_SYS_ADMIN
819 CDROM_GET_CAPABILITY            get capabilities
821         usage:
823           ioctl(fd, CDROM_GET_CAPABILITY, 0);
825         inputs:         none
827         outputs:
828           The ioctl return value is the current device capability
829           flags.  See CDC_CLOSE_TRAY, CDC_OPEN_TRAY, etc.
833 CDROMAUDIOBUFSIZ                set the audio buffer size
835         usage:
837           int arg;
838           ioctl(fd, CDROMAUDIOBUFSIZ, val);
840         inputs:
841           New audio buffer size
843         outputs:
844           The ioctl return value is the new audio buffer size, or -1
845           on error.
847         error return:
848           ENOSYS        Not supported by this driver.
850         notes:
851           Not supported by all drivers.
855 DVD_READ_STRUCT                 Read structure
857         usage:
859           dvd_struct s;
860           ioctl(fd, DVD_READ_STRUCT, &s);
862         inputs:
863           dvd_struct structure, containing:
864             type                specifies the information desired, one of
865                                 DVD_STRUCT_PHYSICAL, DVD_STRUCT_COPYRIGHT,
866                                 DVD_STRUCT_DISCKEY, DVD_STRUCT_BCA,
867                                 DVD_STRUCT_MANUFACT
868             physical.layer_num  desired layer, indexed from 0
869             copyright.layer_num desired layer, indexed from 0
870             disckey.agid
872         outputs:
873           dvd_struct structure, containing:
874             physical            for type == DVD_STRUCT_PHYSICAL
875             copyright           for type == DVD_STRUCT_COPYRIGHT
876             disckey.value       for type == DVD_STRUCT_DISCKEY
877             bca.{len,value}     for type == DVD_STRUCT_BCA
878             manufact.{len,valu} for type == DVD_STRUCT_MANUFACT
880         error returns:
881           EINVAL        physical.layer_num exceeds number of layers
882           EIO           Received invalid response from drive
886 DVD_WRITE_STRUCT                Write structure
888         Not implemented, as of 2.6.8.1
892 DVD_AUTH                        Authentication
894         usage:
896           dvd_authinfo ai;
897           ioctl(fd, DVD_AUTH, &ai);
899         inputs:
900           dvd_authinfo structure.  See <linux/cdrom.h>
902         outputs:
903           dvd_authinfo structure.
905         error return:
906           ENOTTY        ai.type not recognized.
910 CDROM_SEND_PACKET               send a packet to the drive
912         usage:
914           struct cdrom_generic_command cgc;
915           ioctl(fd, CDROM_SEND_PACKET, &cgc);
917         inputs:
918           cdrom_generic_command structure containing the packet to send.
920         outputs:        none
921           cdrom_generic_command structure containing results.
923         error return:
924           EIO           command failed.
925           EPERM         Operation not permitted, either because a
926                         write command was attempted on a drive which
927                         is opened read-only, or because the command
928                         requires CAP_SYS_RAWIO
929           EINVAL        cgc.data_direction not set
933 CDROM_NEXT_WRITABLE             get next writable block
935         usage:
937           long next;
938           ioctl(fd, CDROM_NEXT_WRITABLE, &next);
940         inputs:         none
942         outputs:
943           The next writable block.
945         notes:
946           If the device does not support this ioctl directly, the
947           ioctl will return CDROM_LAST_WRITTEN + 7.
951 CDROM_LAST_WRITTEN              get last block written on disc
953         usage:
955           long last;
956           ioctl(fd, CDROM_LAST_WRITTEN, &last);
958         inputs:         none
960         outputs:
961           The last block written on disc
963         notes:
964           If the device does not support this ioctl directly, the
965           result is derived from the disc's table of contents.  If the
966           table of contents can't be read, this ioctl returns an
967           error.