Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1============================
2Summary of CDROM ioctl calls
3============================
4
5- Edward A. Falk <efalk@google.com>
6
7November, 2004
8
9This document attempts to describe the ioctl(2) calls supported by
10the CDROM layer. These are by-and-large implemented (as of Linux 2.6)
11in drivers/cdrom/cdrom.c and drivers/block/scsi_ioctl.c
12
13ioctl values are listed in <linux/cdrom.h>. As of this writing, they
14are 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
76The information that follows was determined from reading kernel source
77code. It is likely that some corrections will be made over time.
78
79------------------------------------------------------------------------------
80
81General:
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
99CDROMPAUSE
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
120CDROMRESUME
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
141CDROMPLAYMSF
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
172CDROMPLAYTRKIND
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
201CDROMREADTOCHDR
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
226CDROMREADTOCENTRY
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
259CDROMSTOP
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
284CDROMSTART
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
310CDROMEJECT
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
337CDROMCLOSETRAY
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
364CDROMVOLCTRL
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
387CDROMVOLREAD
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
412CDROMSUBCHNL
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
442CDROMREADRAW
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
482CDROMREADMODE1
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
493CDROMREADMODE2
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
504CDROMREADAUDIO
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
528CDROMEJECT_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
553CDROMMULTISESSION
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
577CDROM_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
613CDROM_GET_UPC
614 CDROM_GET_MCN (deprecated)
615
616
617 Not implemented, as of 2.6.8.1
618
619
620
621CDROMRESET
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
645CDROMREADCOOKED
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
670CDROMREADALL
671 read all 2646 bytes
672
673
674 Same as CDROMREADCOOKED, but reads 2646 bytes.
675
676
677
678CDROMSEEK
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
698CDROMPLAYBLK
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
720CDROMGETSPINDOWN
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
741CDROMSETSPINDOWN
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
763CDROM_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
794CDROM_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
803CDROM_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
826CDROM_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
849CDROM_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
876CDROM_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
913CDROM_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
967CDROM_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
989CDROM_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
1026CDROM_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
1049CDROM_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
1068CDROMAUDIOBUFSIZ
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
1095DVD_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
1133DVD_WRITE_STRUCT Write structure
1134
1135 Not implemented, as of 2.6.8.1
1136
1137
1138
1139DVD_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
1160CDROM_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
1195CDROM_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
1220CDROM_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.