xref: /linux/Documentation/userspace-api/ioctl/cdrom.rst (revision da1d9caf95def6f0320819cf941c9fd1069ba9e1)
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.
1243