~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/userspace-api/ioctl/cdrom.rst

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 ============================
  2 Summary of CDROM ioctl calls
  3 ============================
  4 
  5 - Edward A. Falk <efalk@google.com>
  6 
  7 November, 2004
  8 
  9 This document attempts to describe the ioctl(2) calls supported by
 10 the CDROM layer.  These are by-and-large implemented (as of Linux 2.6)
 11 in drivers/cdrom/cdrom.c and drivers/block/scsi_ioctl.c
 12 
 13 ioctl values are listed in <linux/cdrom.h>.  As of this writing, they
 14 are as follows:
 15 
 16         ========================  ===============================================
 17         CDROMPAUSE                Pause Audio Operation
 18         CDROMRESUME               Resume paused Audio Operation
 19         CDROMPLAYMSF              Play Audio MSF (struct cdrom_msf)
 20         CDROMPLAYTRKIND           Play Audio Track/index (struct cdrom_ti)
 21         CDROMREADTOCHDR           Read TOC header (struct cdrom_tochdr)
 22         CDROMREADTOCENTRY         Read TOC entry (struct cdrom_tocentry)
 23         CDROMSTOP                 Stop the cdrom drive
 24         CDROMSTART                Start the cdrom drive
 25         CDROMEJECT                Ejects the cdrom media
 26         CDROMVOLCTRL              Control output volume (struct cdrom_volctrl)
 27         CDROMSUBCHNL              Read subchannel data (struct cdrom_subchnl)
 28         CDROMREADMODE2            Read CDROM mode 2 data (2336 Bytes)
 29                                   (struct cdrom_read)
 30         CDROMREADMODE1            Read CDROM mode 1 data (2048 Bytes)
 31                                   (struct cdrom_read)
 32         CDROMREADAUDIO            (struct cdrom_read_audio)
 33         CDROMEJECT_SW             enable(1)/disable(0) auto-ejecting
 34         CDROMMULTISESSION         Obtain the start-of-last-session
 35                                   address of multi session disks
 36                                   (struct cdrom_multisession)
 37         CDROM_GET_MCN             Obtain the "Universal Product Code"
 38                                   if available (struct cdrom_mcn)
 39         CDROM_GET_UPC             Deprecated, use CDROM_GET_MCN instead.
 40         CDROMRESET                hard-reset the drive
 41         CDROMVOLREAD              Get the drive's volume setting
 42                                   (struct cdrom_volctrl)
 43         CDROMREADRAW              read data in raw mode (2352 Bytes)
 44                                   (struct cdrom_read)
 45         CDROMREADCOOKED           read data in cooked mode
 46         CDROMSEEK                 seek msf address
 47         CDROMPLAYBLK              scsi-cd only, (struct cdrom_blk)
 48         CDROMREADALL              read all 2646 bytes
 49         CDROMGETSPINDOWN          return 4-bit spindown value
 50         CDROMSETSPINDOWN          set 4-bit spindown value
 51         CDROMCLOSETRAY            pendant of CDROMEJECT
 52         CDROM_SET_OPTIONS         Set behavior options
 53         CDROM_CLEAR_OPTIONS       Clear behavior options
 54         CDROM_SELECT_SPEED        Set the CD-ROM speed
 55         CDROM_SELECT_DISC         Select disc (for juke-boxes)
 56         CDROM_MEDIA_CHANGED       Check is media changed
 57         CDROM_TIMED_MEDIA_CHANGE  Check if media changed
 58                                   since given time
 59                                   (struct cdrom_timed_media_change_info)
 60         CDROM_DRIVE_STATUS        Get tray position, etc.
 61         CDROM_DISC_STATUS         Get disc type, etc.
 62         CDROM_CHANGER_NSLOTS      Get number of slots
 63         CDROM_LOCKDOOR            lock or unlock door
 64         CDROM_DEBUG               Turn debug messages on/off
 65         CDROM_GET_CAPABILITY      get capabilities
 66         CDROMAUDIOBUFSIZ          set the audio buffer size
 67         DVD_READ_STRUCT           Read structure
 68         DVD_WRITE_STRUCT          Write structure
 69         DVD_AUTH                  Authentication
 70         CDROM_SEND_PACKET         send a packet to the drive
 71         CDROM_NEXT_WRITABLE       get next writable block
 72         CDROM_LAST_WRITTEN        get last block written on disc
 73         ========================  ===============================================
 74 
 75 
 76 The information that follows was determined from reading kernel source
 77 code.  It is likely that some corrections will be made over time.
 78 
 79 ------------------------------------------------------------------------------
 80 
 81 General:
 82 
 83         Unless otherwise specified, all ioctl calls return 0 on success
 84         and -1 with errno set to an appropriate value on error.  (Some
 85         ioctls return non-negative data values.)
 86 
 87         Unless otherwise specified, all ioctl calls return -1 and set
 88         errno to EFAULT on a failed attempt to copy data to or from user
 89         address space.
 90 
 91         Individual drivers may return error codes not listed here.
 92 
 93         Unless otherwise specified, all data structures and constants
 94         are defined in <linux/cdrom.h>
 95 
 96 ------------------------------------------------------------------------------
 97 
 98 
 99 CDROMPAUSE
100         Pause Audio Operation
101 
102 
103         usage::
104 
105           ioctl(fd, CDROMPAUSE, 0);
106 
107 
108         inputs:
109                 none
110 
111 
112         outputs:
113                 none
114 
115 
116         error return:
117           - ENOSYS      cd drive not audio-capable.
118 
119 
120 CDROMRESUME
121         Resume paused Audio Operation
122 
123 
124         usage::
125 
126           ioctl(fd, CDROMRESUME, 0);
127 
128 
129         inputs:
130                 none
131 
132 
133         outputs:
134                 none
135 
136 
137         error return:
138           - ENOSYS      cd drive not audio-capable.
139 
140 
141 CDROMPLAYMSF
142         Play Audio MSF
143 
144         (struct cdrom_msf)
145 
146 
147         usage::
148 
149           struct cdrom_msf msf;
150 
151           ioctl(fd, CDROMPLAYMSF, &msf);
152 
153         inputs:
154                 cdrom_msf structure, describing a segment of music to play
155 
156 
157         outputs:
158                 none
159 
160 
161         error return:
162           - ENOSYS      cd drive not audio-capable.
163 
164         notes:
165                 - MSF stands for minutes-seconds-frames
166                 - LBA stands for logical block address
167                 - Segment is described as start and end times, where each time
168                   is described as minutes:seconds:frames.
169                   A frame is 1/75 of a second.
170 
171 
172 CDROMPLAYTRKIND
173         Play Audio Track/index
174 
175         (struct cdrom_ti)
176 
177 
178         usage::
179 
180           struct cdrom_ti ti;
181 
182           ioctl(fd, CDROMPLAYTRKIND, &ti);
183 
184         inputs:
185                 cdrom_ti structure, describing a segment of music to play
186 
187 
188         outputs:
189                 none
190 
191 
192         error return:
193           - ENOSYS      cd drive not audio-capable.
194 
195         notes:
196                 - Segment is described as start and end times, where each time
197                   is described as a track and an index.
198 
199 
200 
201 CDROMREADTOCHDR
202         Read TOC header
203 
204         (struct cdrom_tochdr)
205 
206 
207         usage::
208 
209           cdrom_tochdr header;
210 
211           ioctl(fd, CDROMREADTOCHDR, &header);
212 
213         inputs:
214                 cdrom_tochdr structure
215 
216 
217         outputs:
218                 cdrom_tochdr structure
219 
220 
221         error return:
222           - ENOSYS      cd drive not audio-capable.
223 
224 
225 
226 CDROMREADTOCENTRY
227         Read TOC entry
228 
229         (struct cdrom_tocentry)
230 
231 
232         usage::
233 
234           struct cdrom_tocentry entry;
235 
236           ioctl(fd, CDROMREADTOCENTRY, &entry);
237 
238         inputs:
239                 cdrom_tocentry structure
240 
241 
242         outputs:
243                 cdrom_tocentry structure
244 
245 
246         error return:
247           - ENOSYS      cd drive not audio-capable.
248           - EINVAL      entry.cdte_format not CDROM_MSF or CDROM_LBA
249           - EINVAL      requested track out of bounds
250           - EIO         I/O error reading TOC
251 
252         notes:
253                 - TOC stands for Table Of Contents
254                 - MSF stands for minutes-seconds-frames
255                 - LBA stands for logical block address
256 
257 
258 
259 CDROMSTOP
260         Stop the cdrom drive
261 
262 
263         usage::
264 
265           ioctl(fd, CDROMSTOP, 0);
266 
267 
268         inputs:
269                 none
270 
271 
272         outputs:
273                 none
274 
275 
276         error return:
277           - ENOSYS      cd drive not audio-capable.
278 
279         notes:
280           - Exact interpretation of this ioctl depends on the device,
281             but most seem to spin the drive down.
282 
283 
284 CDROMSTART
285         Start the cdrom drive
286 
287 
288         usage::
289 
290           ioctl(fd, CDROMSTART, 0);
291 
292 
293         inputs:
294                 none
295 
296 
297         outputs:
298                 none
299 
300 
301         error return:
302           - ENOSYS      cd drive not audio-capable.
303 
304         notes:
305           - Exact interpretation of this ioctl depends on the device,
306             but most seem to spin the drive up and/or close the tray.
307             Other devices ignore the ioctl completely.
308 
309 
310 CDROMEJECT
311         - Ejects the cdrom media
312 
313 
314         usage::
315 
316           ioctl(fd, CDROMEJECT, 0);
317 
318 
319         inputs:
320                 none
321 
322 
323         outputs:
324                 none
325 
326 
327         error returns:
328           - ENOSYS      cd drive not capable of ejecting
329           - EBUSY       other processes are accessing drive, or door is locked
330 
331         notes:
332                 - See CDROM_LOCKDOOR, below.
333 
334 
335 
336 
337 CDROMCLOSETRAY
338         pendant of CDROMEJECT
339 
340 
341         usage::
342 
343           ioctl(fd, CDROMCLOSETRAY, 0);
344 
345 
346         inputs:
347                 none
348 
349 
350         outputs:
351                 none
352 
353 
354         error returns:
355           - ENOSYS      cd drive not capable of closing the tray
356           - EBUSY       other processes are accessing drive, or door is locked
357 
358         notes:
359                 - See CDROM_LOCKDOOR, below.
360 
361 
362 
363 
364 CDROMVOLCTRL
365         Control output volume (struct cdrom_volctrl)
366 
367 
368         usage::
369 
370           struct cdrom_volctrl volume;
371 
372           ioctl(fd, CDROMVOLCTRL, &volume);
373 
374         inputs:
375                 cdrom_volctrl structure containing volumes for up to 4
376                 channels.
377 
378         outputs:
379                 none
380 
381 
382         error return:
383           - ENOSYS      cd drive not audio-capable.
384 
385 
386 
387 CDROMVOLREAD
388         Get the drive's volume setting
389 
390         (struct cdrom_volctrl)
391 
392 
393         usage::
394 
395           struct cdrom_volctrl volume;
396 
397           ioctl(fd, CDROMVOLREAD, &volume);
398 
399         inputs:
400                 none
401 
402 
403         outputs:
404                 The current volume settings.
405 
406 
407         error return:
408           - ENOSYS      cd drive not audio-capable.
409 
410 
411 
412 CDROMSUBCHNL
413         Read subchannel data
414 
415         (struct cdrom_subchnl)
416 
417 
418         usage::
419 
420           struct cdrom_subchnl q;
421 
422           ioctl(fd, CDROMSUBCHNL, &q);
423 
424         inputs:
425                 cdrom_subchnl structure
426 
427 
428         outputs:
429                 cdrom_subchnl structure
430 
431 
432         error return:
433           - ENOSYS      cd drive not audio-capable.
434           - EINVAL      format not CDROM_MSF or CDROM_LBA
435 
436         notes:
437                 - Format is converted to CDROM_MSF or CDROM_LBA
438                   as per user request on return
439 
440 
441 
442 CDROMREADRAW
443         read data in raw mode (2352 Bytes)
444 
445         (struct cdrom_read)
446 
447         usage::
448 
449           union {
450 
451             struct cdrom_msf msf;               /* input */
452             char buffer[CD_FRAMESIZE_RAW];      /* return */
453           } arg;
454           ioctl(fd, CDROMREADRAW, &arg);
455 
456         inputs:
457                 cdrom_msf structure indicating an address to read.
458 
459                 Only the start values are significant.
460 
461         outputs:
462                 Data written to address provided by user.
463 
464 
465         error return:
466           - EINVAL      address less than 0, or msf less than 0:2:0
467           - ENOMEM      out of memory
468 
469         notes:
470                 - As of 2.6.8.1, comments in <linux/cdrom.h> indicate that this
471                   ioctl accepts a cdrom_read structure, but actual source code
472                   reads a cdrom_msf structure and writes a buffer of data to
473                   the same address.
474 
475                 - MSF values are converted to LBA values via this formula::
476 
477                     lba = (((m * CD_SECS) + s) * CD_FRAMES + f) - CD_MSF_OFFSET;
478 
479 
480 
481 
482 CDROMREADMODE1
483         Read CDROM mode 1 data (2048 Bytes)
484 
485         (struct cdrom_read)
486 
487         notes:
488                 Identical to CDROMREADRAW except that block size is
489                 CD_FRAMESIZE (2048) bytes
490 
491 
492 
493 CDROMREADMODE2
494         Read CDROM mode 2 data (2336 Bytes)
495 
496         (struct cdrom_read)
497 
498         notes:
499                 Identical to CDROMREADRAW except that block size is
500                 CD_FRAMESIZE_RAW0 (2336) bytes
501 
502 
503 
504 CDROMREADAUDIO
505         (struct cdrom_read_audio)
506 
507         usage::
508 
509           struct cdrom_read_audio ra;
510 
511           ioctl(fd, CDROMREADAUDIO, &ra);
512 
513         inputs:
514                 cdrom_read_audio structure containing read start
515                 point and length
516 
517         outputs:
518                 audio data, returned to buffer indicated by ra
519 
520 
521         error return:
522           - EINVAL      format not CDROM_MSF or CDROM_LBA
523           - EINVAL      nframes not in range [1 75]
524           - ENXIO       drive has no queue (probably means invalid fd)
525           - ENOMEM      out of memory
526 
527 
528 CDROMEJECT_SW
529         enable(1)/disable(0) auto-ejecting
530 
531 
532         usage::
533 
534           int val;
535 
536           ioctl(fd, CDROMEJECT_SW, val);
537 
538         inputs:
539                 Flag specifying auto-eject flag.
540 
541 
542         outputs:
543                 none
544 
545 
546         error return:
547           - ENOSYS      Drive is not capable of ejecting.
548           - EBUSY       Door is locked
549 
550 
551 
552 
553 CDROMMULTISESSION
554         Obtain the start-of-last-session address of multi session disks
555 
556         (struct cdrom_multisession)
557 
558         usage::
559 
560           struct cdrom_multisession ms_info;
561 
562           ioctl(fd, CDROMMULTISESSION, &ms_info);
563 
564         inputs:
565                 cdrom_multisession structure containing desired
566 
567           format.
568 
569         outputs:
570                 cdrom_multisession structure is filled with last_session
571                 information.
572 
573         error return:
574           - EINVAL      format not CDROM_MSF or CDROM_LBA
575 
576 
577 CDROM_GET_MCN
578         Obtain the "Universal Product Code"
579         if available
580 
581         (struct cdrom_mcn)
582 
583 
584         usage::
585 
586           struct cdrom_mcn mcn;
587 
588           ioctl(fd, CDROM_GET_MCN, &mcn);
589 
590         inputs:
591                 none
592 
593 
594         outputs:
595                 Universal Product Code
596 
597 
598         error return:
599           - ENOSYS      Drive is not capable of reading MCN data.
600 
601         notes:
602                 - Source code comments state::
603 
604                     The following function is implemented, although very few
605                     audio discs give Universal Product Code information, which
606                     should just be the Medium Catalog Number on the box.  Note,
607                     that the way the code is written on the CD is /not/ uniform
608                     across all discs!
609 
610 
611 
612 
613 CDROM_GET_UPC
614         CDROM_GET_MCN  (deprecated)
615 
616 
617         Not implemented, as of 2.6.8.1
618 
619 
620 
621 CDROMRESET
622         hard-reset the drive
623 
624 
625         usage::
626 
627           ioctl(fd, CDROMRESET, 0);
628 
629 
630         inputs:
631                 none
632 
633 
634         outputs:
635                 none
636 
637 
638         error return:
639           - EACCES      Access denied:  requires CAP_SYS_ADMIN
640           - ENOSYS      Drive is not capable of resetting.
641 
642 
643 
644 
645 CDROMREADCOOKED
646         read data in cooked mode
647 
648 
649         usage::
650 
651           u8 buffer[CD_FRAMESIZE]
652 
653           ioctl(fd, CDROMREADCOOKED, buffer);
654 
655         inputs:
656                 none
657 
658 
659         outputs:
660                 2048 bytes of data, "cooked" mode.
661 
662 
663         notes:
664                 Not implemented on all drives.
665 
666 
667 
668 
669 
670 CDROMREADALL
671         read all 2646 bytes
672 
673 
674         Same as CDROMREADCOOKED, but reads 2646 bytes.
675 
676 
677 
678 CDROMSEEK
679         seek msf address
680 
681 
682         usage::
683 
684           struct cdrom_msf msf;
685 
686           ioctl(fd, CDROMSEEK, &msf);
687 
688         inputs:
689                 MSF address to seek to.
690 
691 
692         outputs:
693                 none
694 
695 
696 
697 
698 CDROMPLAYBLK
699         scsi-cd only
700 
701         (struct cdrom_blk)
702 
703 
704         usage::
705 
706           struct cdrom_blk blk;
707 
708           ioctl(fd, CDROMPLAYBLK, &blk);
709 
710         inputs:
711                 Region to play
712 
713 
714         outputs:
715                 none
716 
717 
718 
719 
720 CDROMGETSPINDOWN
721         Obsolete, was ide-cd only
722 
723 
724         usage::
725 
726           char spindown;
727 
728           ioctl(fd, CDROMGETSPINDOWN, &spindown);
729 
730         inputs:
731                 none
732 
733 
734         outputs:
735                 The value of the current 4-bit spindown value.
736 
737 
738 
739 
740 
741 CDROMSETSPINDOWN
742         Obsolete, was ide-cd only
743 
744 
745         usage::
746 
747           char spindown
748 
749           ioctl(fd, CDROMSETSPINDOWN, &spindown);
750 
751         inputs:
752                 4-bit value used to control spindown (TODO: more detail here)
753 
754 
755         outputs:
756                 none
757 
758 
759 
760 
761 
762 
763 CDROM_SET_OPTIONS
764         Set behavior options
765 
766 
767         usage::
768 
769           int options;
770 
771           ioctl(fd, CDROM_SET_OPTIONS, options);
772 
773         inputs:
774                 New values for drive options.  The logical 'or' of:
775 
776             ==============      ==================================
777             CDO_AUTO_CLOSE      close tray on first open(2)
778             CDO_AUTO_EJECT      open tray on last release
779             CDO_USE_FFLAGS      use O_NONBLOCK information on open
780             CDO_LOCK            lock tray on open files
781             CDO_CHECK_TYPE      check type on open for data
782             ==============      ==================================
783 
784         outputs:
785                 Returns the resulting options settings in the
786                 ioctl return value.  Returns -1 on error.
787 
788         error return:
789           - ENOSYS      selected option(s) not supported by drive.
790 
791 
792 
793 
794 CDROM_CLEAR_OPTIONS
795         Clear behavior options
796 
797 
798         Same as CDROM_SET_OPTIONS, except that selected options are
799         turned off.
800 
801 
802 
803 CDROM_SELECT_SPEED
804         Set the CD-ROM speed
805 
806 
807         usage::
808 
809           int speed;
810 
811           ioctl(fd, CDROM_SELECT_SPEED, speed);
812 
813         inputs:
814                 New drive speed.
815 
816 
817         outputs:
818                 none
819 
820 
821         error return:
822           - ENOSYS      speed selection not supported by drive.
823 
824 
825 
826 CDROM_SELECT_DISC
827         Select disc (for juke-boxes)
828 
829 
830         usage::
831 
832           int disk;
833 
834           ioctl(fd, CDROM_SELECT_DISC, disk);
835 
836         inputs:
837                 Disk to load into drive.
838 
839 
840         outputs:
841                 none
842 
843 
844         error return:
845           - EINVAL      Disk number beyond capacity of drive
846 
847 
848 
849 CDROM_MEDIA_CHANGED
850         Check is media changed
851 
852 
853         usage::
854 
855           int slot;
856 
857           ioctl(fd, CDROM_MEDIA_CHANGED, slot);
858 
859         inputs:
860                 Slot number to be tested, always zero except for jukeboxes.
861 
862                 May also be special values CDSL_NONE or CDSL_CURRENT
863 
864         outputs:
865                 Ioctl return value is 0 or 1 depending on whether the media
866 
867           has been changed, or -1 on error.
868 
869         error returns:
870           - ENOSYS      Drive can't detect media change
871           - EINVAL      Slot number beyond capacity of drive
872           - ENOMEM      Out of memory
873 
874 
875 
876 CDROM_DRIVE_STATUS
877         Get tray position, etc.
878 
879 
880         usage::
881 
882           int slot;
883 
884           ioctl(fd, CDROM_DRIVE_STATUS, slot);
885 
886         inputs:
887                 Slot number to be tested, always zero except for jukeboxes.
888 
889                 May also be special values CDSL_NONE or CDSL_CURRENT
890 
891         outputs:
892                 Ioctl return value will be one of the following values
893 
894           from <linux/cdrom.h>:
895 
896             =================== ==========================
897             CDS_NO_INFO         Information not available.
898             CDS_NO_DISC
899             CDS_TRAY_OPEN
900             CDS_DRIVE_NOT_READY
901             CDS_DISC_OK
902             -1                  error
903             =================== ==========================
904 
905         error returns:
906           - ENOSYS      Drive can't detect drive status
907           - EINVAL      Slot number beyond capacity of drive
908           - ENOMEM      Out of memory
909 
910 
911 
912 
913 CDROM_DISC_STATUS
914         Get disc type, etc.
915 
916 
917         usage::
918 
919           ioctl(fd, CDROM_DISC_STATUS, 0);
920 
921 
922         inputs:
923                 none
924 
925 
926         outputs:
927                 Ioctl return value will be one of the following values
928 
929           from <linux/cdrom.h>:
930 
931             - CDS_NO_INFO
932             - CDS_AUDIO
933             - CDS_MIXED
934             - CDS_XA_2_2
935             - CDS_XA_2_1
936             - CDS_DATA_1
937 
938         error returns:
939                 none at present
940 
941         notes:
942             - Source code comments state::
943 
944 
945                 Ok, this is where problems start.  The current interface for
946                 the CDROM_DISC_STATUS ioctl is flawed.  It makes the false
947                 assumption that CDs are all CDS_DATA_1 or all CDS_AUDIO, etc.
948                 Unfortunately, while this is often the case, it is also
949                 very common for CDs to have some tracks with data, and some
950                 tracks with audio.      Just because I feel like it, I declare
951                 the following to be the best way to cope.  If the CD has
952                 ANY data tracks on it, it will be returned as a data CD.
953                 If it has any XA tracks, I will return it as that.      Now I
954                 could simplify this interface by combining these returns with
955                 the above, but this more clearly demonstrates the problem
956                 with the current interface.  Too bad this wasn't designed
957                 to use bitmasks...             -Erik
958 
959                 Well, now we have the option CDS_MIXED: a mixed-type CD.
960                 User level programmers might feel the ioctl is not very
961                 useful.
962                                 ---david
963 
964 
965 
966 
967 CDROM_CHANGER_NSLOTS
968         Get number of slots
969 
970 
971         usage::
972 
973           ioctl(fd, CDROM_CHANGER_NSLOTS, 0);
974 
975 
976         inputs:
977                 none
978 
979 
980         outputs:
981                 The ioctl return value will be the number of slots in a
982                 CD changer.  Typically 1 for non-multi-disk devices.
983 
984         error returns:
985                 none
986 
987 
988 
989 CDROM_LOCKDOOR
990         lock or unlock door
991 
992 
993         usage::
994 
995           int lock;
996 
997           ioctl(fd, CDROM_LOCKDOOR, lock);
998 
999         inputs:
1000                 Door lock flag, 1=lock, 0=unlock
1001 
1002 
1003         outputs:
1004                 none
1005 
1006 
1007         error returns:
1008           - EDRIVE_CANT_DO_THIS
1009 
1010                                 Door lock function not supported.
1011           - EBUSY
1012 
1013                                 Attempt to unlock when multiple users
1014                                 have the drive open and not CAP_SYS_ADMIN
1015 
1016         notes:
1017                 As of 2.6.8.1, the lock flag is a global lock, meaning that
1018                 all CD drives will be locked or unlocked together.  This is
1019                 probably a bug.
1020 
1021                 The EDRIVE_CANT_DO_THIS value is defined in <linux/cdrom.h>
1022                 and is currently (2.6.8.1) the same as EOPNOTSUPP
1023 
1024 
1025 
1026 CDROM_DEBUG
1027         Turn debug messages on/off
1028 
1029 
1030         usage::
1031 
1032           int debug;
1033 
1034           ioctl(fd, CDROM_DEBUG, debug);
1035 
1036         inputs:
1037                 Cdrom debug flag, 0=disable, 1=enable
1038 
1039 
1040         outputs:
1041                 The ioctl return value will be the new debug flag.
1042 
1043 
1044         error return:
1045           - EACCES      Access denied:  requires CAP_SYS_ADMIN
1046 
1047 
1048 
1049 CDROM_GET_CAPABILITY
1050         get capabilities
1051 
1052 
1053         usage::
1054 
1055           ioctl(fd, CDROM_GET_CAPABILITY, 0);
1056 
1057 
1058         inputs:
1059                 none
1060 
1061 
1062         outputs:
1063                 The ioctl return value is the current device capability
1064                 flags.  See CDC_CLOSE_TRAY, CDC_OPEN_TRAY, etc.
1065 
1066 
1067 
1068 CDROMAUDIOBUFSIZ
1069         set the audio buffer size
1070 
1071 
1072         usage::
1073 
1074           int arg;
1075 
1076           ioctl(fd, CDROMAUDIOBUFSIZ, val);
1077 
1078         inputs:
1079                 New audio buffer size
1080 
1081 
1082         outputs:
1083                 The ioctl return value is the new audio buffer size, or -1
1084                 on error.
1085 
1086         error return:
1087           - ENOSYS      Not supported by this driver.
1088 
1089         notes:
1090                 Not supported by all drivers.
1091 
1092 
1093 
1094 
1095 DVD_READ_STRUCT                 Read structure
1096 
1097         usage::
1098 
1099           dvd_struct s;
1100 
1101           ioctl(fd, DVD_READ_STRUCT, &s);
1102 
1103         inputs:
1104                 dvd_struct structure, containing:
1105 
1106             =================== ==========================================
1107             type                specifies the information desired, one of
1108                                 DVD_STRUCT_PHYSICAL, DVD_STRUCT_COPYRIGHT,
1109                                 DVD_STRUCT_DISCKEY, DVD_STRUCT_BCA,
1110                                 DVD_STRUCT_MANUFACT
1111             physical.layer_num  desired layer, indexed from 0
1112             copyright.layer_num desired layer, indexed from 0
1113             disckey.agid
1114             =================== ==========================================
1115 
1116         outputs:
1117                 dvd_struct structure, containing:
1118 
1119             =================== ================================
1120             physical            for type == DVD_STRUCT_PHYSICAL
1121             copyright           for type == DVD_STRUCT_COPYRIGHT
1122             disckey.value       for type == DVD_STRUCT_DISCKEY
1123             bca.{len,value}     for type == DVD_STRUCT_BCA
1124             manufact.{len,valu} for type == DVD_STRUCT_MANUFACT
1125             =================== ================================
1126 
1127         error returns:
1128           - EINVAL      physical.layer_num exceeds number of layers
1129           - EIO         Received invalid response from drive
1130 
1131 
1132 
1133 DVD_WRITE_STRUCT                Write structure
1134 
1135         Not implemented, as of 2.6.8.1
1136 
1137 
1138 
1139 DVD_AUTH                        Authentication
1140 
1141         usage::
1142 
1143           dvd_authinfo ai;
1144 
1145           ioctl(fd, DVD_AUTH, &ai);
1146 
1147         inputs:
1148                 dvd_authinfo structure.  See <linux/cdrom.h>
1149 
1150 
1151         outputs:
1152                 dvd_authinfo structure.
1153 
1154 
1155         error return:
1156           - ENOTTY      ai.type not recognized.
1157 
1158 
1159 
1160 CDROM_SEND_PACKET
1161         send a packet to the drive
1162 
1163 
1164         usage::
1165 
1166           struct cdrom_generic_command cgc;
1167 
1168           ioctl(fd, CDROM_SEND_PACKET, &cgc);
1169 
1170         inputs:
1171                 cdrom_generic_command structure containing the packet to send.
1172 
1173 
1174         outputs:
1175                 none
1176 
1177           cdrom_generic_command structure containing results.
1178 
1179         error return:
1180           - EIO
1181 
1182                         command failed.
1183           - EPERM
1184 
1185                         Operation not permitted, either because a
1186                         write command was attempted on a drive which
1187                         is opened read-only, or because the command
1188                         requires CAP_SYS_RAWIO
1189           - EINVAL
1190 
1191                         cgc.data_direction not set
1192 
1193 
1194 
1195 CDROM_NEXT_WRITABLE
1196         get next writable block
1197 
1198 
1199         usage::
1200 
1201           long next;
1202 
1203           ioctl(fd, CDROM_NEXT_WRITABLE, &next);
1204 
1205         inputs:
1206                 none
1207 
1208 
1209         outputs:
1210                 The next writable block.
1211 
1212 
1213         notes:
1214                 If the device does not support this ioctl directly, the
1215 
1216           ioctl will return CDROM_LAST_WRITTEN + 7.
1217 
1218 
1219 
1220 CDROM_LAST_WRITTEN
1221         get last block written on disc
1222 
1223 
1224         usage::
1225 
1226           long last;
1227 
1228           ioctl(fd, CDROM_LAST_WRITTEN, &last);
1229 
1230         inputs:
1231                 none
1232 
1233 
1234         outputs:
1235                 The last block written on disc
1236 
1237 
1238         notes:
1239                 If the device does not support this ioctl directly, the
1240                 result is derived from the disc's table of contents.  If the
1241                 table of contents can't be read, this ioctl returns an
1242                 error.

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php