1		Summary of CDROM ioctl calls.
2		============================
3
4		Edward A. Falk <efalk@google.com>
5
6		November, 2004
7
8This document attempts to describe the ioctl(2) calls supported by
9the CDROM layer.  These are by-and-large implemented (as of Linux 2.6)
10in drivers/cdrom/cdrom.c and drivers/block/scsi_ioctl.c
11
12ioctl values are listed in <linux/cdrom.h>.  As of this writing, they
13are as follows:
14
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
68
69
70The information that follows was determined from reading kernel source
71code.  It is likely that some corrections will be made over time.
72
73
74
75
76
77
78
79General:
80
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.)
84
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.
88
89	Individual drivers may return error codes not listed here.
90
91	Unless otherwise specified, all data structures and constants
92	are defined in <linux/cdrom.h>
93
94
95
96
97CDROMPAUSE			Pause Audio Operation
98
99	usage:
100
101	  ioctl(fd, CDROMPAUSE, 0);
102
103	inputs:		none
104
105	outputs:	none
106
107	error return:
108	  ENOSYS	cd drive not audio-capable.
109
110
111CDROMRESUME			Resume paused Audio Operation
112
113	usage:
114
115	  ioctl(fd, CDROMRESUME, 0);
116
117	inputs:		none
118
119	outputs:	none
120
121	error return:
122	  ENOSYS	cd drive not audio-capable.
123
124
125CDROMPLAYMSF			Play Audio MSF (struct cdrom_msf)
126
127	usage:
128
129	  struct cdrom_msf msf;
130	  ioctl(fd, CDROMPLAYMSF, &msf);
131
132	inputs:
133	  cdrom_msf structure, describing a segment of music to play
134
135	outputs:	none
136
137	error return:
138	  ENOSYS	cd drive not audio-capable.
139
140	notes:
141	  MSF stands for minutes-seconds-frames
142	  LBA stands for logical block address
143
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.
147
148
149CDROMPLAYTRKIND			Play Audio Track/index (struct cdrom_ti)
150
151	usage:
152
153	  struct cdrom_ti ti;
154	  ioctl(fd, CDROMPLAYTRKIND, &ti);
155
156	inputs:
157	  cdrom_ti structure, describing a segment of music to play
158
159	outputs:	none
160
161	error return:
162	  ENOSYS	cd drive not audio-capable.
163
164	notes:
165	  Segment is described as start and end times, where each time
166	  is described as a track and an index.
167
168
169
170CDROMREADTOCHDR			Read TOC header (struct cdrom_tochdr)
171
172	usage:
173
174	  cdrom_tochdr header;
175	  ioctl(fd, CDROMREADTOCHDR, &header);
176
177	inputs:
178	  cdrom_tochdr structure
179
180	outputs:
181	  cdrom_tochdr structure
182
183	error return:
184	  ENOSYS	cd drive not audio-capable.
185
186
187
188CDROMREADTOCENTRY		Read TOC entry (struct cdrom_tocentry)
189
190	usage:
191
192	  struct cdrom_tocentry entry;
193	  ioctl(fd, CDROMREADTOCENTRY, &entry);
194
195	inputs:
196	  cdrom_tocentry structure
197
198	outputs:
199	  cdrom_tocentry structure
200
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
206
207	notes:
208	  TOC stands for Table Of Contents
209	  MSF stands for minutes-seconds-frames
210	  LBA stands for logical block address
211
212
213
214CDROMSTOP			Stop the cdrom drive
215
216	usage:
217
218	  ioctl(fd, CDROMSTOP, 0);
219
220	inputs:		none
221
222	outputs:	none
223
224	error return:
225	  ENOSYS	cd drive not audio-capable.
226
227	notes:
228	  Exact interpretation of this ioctl depends on the device,
229	  but most seem to spin the drive down.
230
231
232CDROMSTART			Start the cdrom drive
233
234	usage:
235
236	  ioctl(fd, CDROMSTART, 0);
237
238	inputs:		none
239
240	outputs:	none
241
242	error return:
243	  ENOSYS	cd drive not audio-capable.
244
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.
249
250
251CDROMEJECT			Ejects the cdrom media
252
253	usage:
254
255	  ioctl(fd, CDROMEJECT, 0);
256
257	inputs:		none
258
259	outputs:	none
260
261	error returns:
262	  ENOSYS	cd drive not capable of ejecting
263	  EBUSY		other processes are accessing drive, or door is locked
264
265	notes:
266	  See CDROM_LOCKDOOR, below.
267
268
269
270CDROMCLOSETRAY			pendant of CDROMEJECT
271
272	usage:
273
274	  ioctl(fd, CDROMCLOSETRAY, 0);
275
276	inputs:		none
277
278	outputs:	none
279
280	error returns:
281	  ENOSYS	cd drive not capable of closing the tray
282	  EBUSY		other processes are accessing drive, or door is locked
283
284	notes:
285	  See CDROM_LOCKDOOR, below.
286
287
288
289CDROMVOLCTRL			Control output volume (struct cdrom_volctrl)
290
291	usage:
292
293	  struct cdrom_volctrl volume;
294	  ioctl(fd, CDROMVOLCTRL, &volume);
295
296	inputs:
297	  cdrom_volctrl structure containing volumes for up to 4
298	  channels.
299
300	outputs:	none
301
302	error return:
303	  ENOSYS	cd drive not audio-capable.
304
305
306
307CDROMVOLREAD			Get the drive's volume setting
308					  (struct cdrom_volctrl)
309
310	usage:
311
312	  struct cdrom_volctrl volume;
313	  ioctl(fd, CDROMVOLREAD, &volume);
314
315	inputs:		none
316
317	outputs:
318	  The current volume settings.
319
320	error return:
321	  ENOSYS	cd drive not audio-capable.
322
323
324
325CDROMSUBCHNL			Read subchannel data (struct cdrom_subchnl)
326
327	usage:
328
329	  struct cdrom_subchnl q;
330	  ioctl(fd, CDROMSUBCHNL, &q);
331
332	inputs:
333	  cdrom_subchnl structure
334
335	outputs:
336	  cdrom_subchnl structure
337
338	error return:
339	  ENOSYS	cd drive not audio-capable.
340	  EINVAL	format not CDROM_MSF or CDROM_LBA
341
342	notes:
343	  Format is converted to CDROM_MSF or CDROM_LBA
344	  as per user request on return
345
346
347
348CDROMREADRAW			read data in raw mode (2352 Bytes)
349					   (struct cdrom_read)
350
351	usage:
352
353	  union {
354	    struct cdrom_msf msf;		/* input */
355	    char buffer[CD_FRAMESIZE_RAW];	/* return */
356	  } arg;
357	  ioctl(fd, CDROMREADRAW, &arg);
358
359	inputs:
360	  cdrom_msf structure indicating an address to read.
361	  Only the start values are significant.
362
363	outputs:
364	  Data written to address provided by user.
365
366	error return:
367	  EINVAL	address less than 0, or msf less than 0:2:0
368	  ENOMEM	out of memory
369
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.
375
376	  MSF values are converted to LBA values via this formula:
377
378	    lba = (((m * CD_SECS) + s) * CD_FRAMES + f) - CD_MSF_OFFSET;
379
380
381
382
383CDROMREADMODE1			Read CDROM mode 1 data (2048 Bytes)
384					   (struct cdrom_read)
385
386	notes:
387	  Identical to CDROMREADRAW except that block size is
388	  CD_FRAMESIZE (2048) bytes
389
390
391
392CDROMREADMODE2			Read CDROM mode 2 data (2336 Bytes)
393					   (struct cdrom_read)
394
395	notes:
396	  Identical to CDROMREADRAW except that block size is
397	  CD_FRAMESIZE_RAW0 (2336) bytes
398
399
400
401CDROMREADAUDIO			(struct cdrom_read_audio)
402
403	usage:
404
405	  struct cdrom_read_audio ra;
406	  ioctl(fd, CDROMREADAUDIO, &ra);
407
408	inputs:
409	  cdrom_read_audio structure containing read start
410	  point and length
411
412	outputs:
413	  audio data, returned to buffer indicated by ra
414
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
420
421
422CDROMEJECT_SW			enable(1)/disable(0) auto-ejecting
423
424	usage:
425
426	  int val;
427	  ioctl(fd, CDROMEJECT_SW, val);
428
429	inputs:
430	  Flag specifying auto-eject flag.
431
432	outputs:	none
433
434	error return:
435	  ENOSYS	Drive is not capable of ejecting.
436	  EBUSY		Door is locked
437
438
439
440
441CDROMMULTISESSION		Obtain the start-of-last-session
442				  address of multi session disks
443				  (struct cdrom_multisession)
444	usage:
445
446	  struct cdrom_multisession ms_info;
447	  ioctl(fd, CDROMMULTISESSION, &ms_info);
448
449	inputs:
450	  cdrom_multisession structure containing desired
451	  format.
452
453	outputs:
454	  cdrom_multisession structure is filled with last_session
455	  information.
456
457	error return:
458	  EINVAL	format not CDROM_MSF or CDROM_LBA
459
460
461CDROM_GET_MCN			Obtain the "Universal Product Code"
462				   if available (struct cdrom_mcn)
463
464	usage:
465
466	  struct cdrom_mcn mcn;
467	  ioctl(fd, CDROM_GET_MCN, &mcn);
468
469	inputs:		none
470
471	outputs:
472	  Universal Product Code
473
474	error return:
475	  ENOSYS	Drive is not capable of reading MCN data.
476
477	notes:
478	  Source code comments state:
479
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!
485
486
487
488
489CDROM_GET_UPC			CDROM_GET_MCN  (deprecated)
490
491	Not implemented, as of 2.6.8.1
492
493
494
495CDROMRESET			hard-reset the drive
496
497	usage:
498
499	  ioctl(fd, CDROMRESET, 0);
500
501	inputs:		none
502
503	outputs:	none
504
505	error return:
506	  EACCES	Access denied:  requires CAP_SYS_ADMIN
507	  ENOSYS	Drive is not capable of resetting.
508
509
510
511
512CDROMREADCOOKED			read data in cooked mode
513
514	usage:
515
516	  u8 buffer[CD_FRAMESIZE]
517	  ioctl(fd, CDROMREADCOOKED, buffer);
518
519	inputs:		none
520
521	outputs:
522	  2048 bytes of data, "cooked" mode.
523
524	notes:
525	  Not implemented on all drives.
526
527
528
529
530CDROMREADALL			read all 2646 bytes
531
532	Same as CDROMREADCOOKED, but reads 2646 bytes.
533
534
535
536CDROMSEEK			seek msf address
537
538	usage:
539
540	  struct cdrom_msf msf;
541	  ioctl(fd, CDROMSEEK, &msf);
542
543	inputs:
544	  MSF address to seek to.
545
546	outputs:	none
547
548
549
550CDROMPLAYBLK			scsi-cd only, (struct cdrom_blk)
551
552	usage:
553
554	  struct cdrom_blk blk;
555	  ioctl(fd, CDROMPLAYBLK, &blk);
556
557	inputs:
558	  Region to play
559
560	outputs:	none
561
562
563
564CDROMGETSPINDOWN
565
566	usage:
567
568	  char spindown;
569	  ioctl(fd, CDROMGETSPINDOWN, &spindown);
570
571	inputs:		none
572
573	outputs:
574	  The value of the current 4-bit spindown value.
575
576
577
578
579CDROMSETSPINDOWN
580
581	usage:
582
583	  char spindown
584	  ioctl(fd, CDROMSETSPINDOWN, &spindown);
585
586	inputs:
587	  4-bit value used to control spindown (TODO: more detail here)
588
589	outputs:	none
590
591
592
593
594
595CDROM_SET_OPTIONS		Set behavior options
596
597	usage:
598
599	  int options;
600	  ioctl(fd, CDROM_SET_OPTIONS, options);
601
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
609
610	outputs:
611	  Returns the resulting options settings in the
612	  ioctl return value.  Returns -1 on error.
613
614	error return:
615	  ENOSYS	selected option(s) not supported by drive.
616
617
618
619
620CDROM_CLEAR_OPTIONS		Clear behavior options
621
622	Same as CDROM_SET_OPTIONS, except that selected options are
623	turned off.
624
625
626
627CDROM_SELECT_SPEED		Set the CD-ROM speed
628
629	usage:
630
631	  int speed;
632	  ioctl(fd, CDROM_SELECT_SPEED, speed);
633
634	inputs:
635	  New drive speed.
636
637	outputs:	none
638
639	error return:
640	  ENOSYS	speed selection not supported by drive.
641
642
643
644CDROM_SELECT_DISC		Select disc (for juke-boxes)
645
646	usage:
647
648	  int disk;
649	  ioctl(fd, CDROM_SELECT_DISC, disk);
650
651	inputs:
652	  Disk to load into drive.
653
654	outputs:	none
655
656	error return:
657	  EINVAL	Disk number beyond capacity of drive
658
659
660
661CDROM_MEDIA_CHANGED		Check is media changed
662
663	usage:
664
665	  int slot;
666	  ioctl(fd, CDROM_MEDIA_CHANGED, slot);
667
668	inputs:
669	  Slot number to be tested, always zero except for jukeboxes.
670	  May also be special values CDSL_NONE or CDSL_CURRENT
671
672	outputs:
673	  Ioctl return value is 0 or 1 depending on whether the media
674	  has been changed, or -1 on error.
675
676	error returns:
677	  ENOSYS	Drive can't detect media change
678	  EINVAL	Slot number beyond capacity of drive
679	  ENOMEM	Out of memory
680
681
682
683CDROM_DRIVE_STATUS		Get tray position, etc.
684
685	usage:
686
687	  int slot;
688	  ioctl(fd, CDROM_DRIVE_STATUS, slot);
689
690	inputs:
691	  Slot number to be tested, always zero except for jukeboxes.
692	  May also be special values CDSL_NONE or CDSL_CURRENT
693
694	outputs:
695	  Ioctl return value will be one of the following values
696	  from <linux/cdrom.h>:
697
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
704
705	error returns:
706	  ENOSYS	Drive can't detect drive status
707	  EINVAL	Slot number beyond capacity of drive
708	  ENOMEM	Out of memory
709
710
711
712
713CDROM_DISC_STATUS		Get disc type, etc.
714
715	usage:
716
717	  ioctl(fd, CDROM_DISC_STATUS, 0);
718
719	inputs:		none
720
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
730
731	error returns:	none at present
732
733	notes:
734	  Source code comments state:
735
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
749
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
754
755
756
757
758CDROM_CHANGER_NSLOTS		Get number of slots
759
760	usage:
761
762	  ioctl(fd, CDROM_CHANGER_NSLOTS, 0);
763
764	inputs:		none
765
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.
769
770	error returns:	none
771
772
773
774CDROM_LOCKDOOR			lock or unlock door
775
776	usage:
777
778	  int lock;
779	  ioctl(fd, CDROM_LOCKDOOR, lock);
780
781	inputs:
782	  Door lock flag, 1=lock, 0=unlock
783
784	outputs:	none
785
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
790
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.
795
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
798
799
800
801CDROM_DEBUG			Turn debug messages on/off
802
803	usage:
804
805	  int debug;
806	  ioctl(fd, CDROM_DEBUG, debug);
807
808	inputs:
809	  Cdrom debug flag, 0=disable, 1=enable
810
811	outputs:
812	  The ioctl return value will be the new debug flag.
813
814	error return:
815	  EACCES	Access denied:  requires CAP_SYS_ADMIN
816
817
818
819CDROM_GET_CAPABILITY		get capabilities
820
821	usage:
822
823	  ioctl(fd, CDROM_GET_CAPABILITY, 0);
824
825	inputs:		none
826
827	outputs:
828	  The ioctl return value is the current device capability
829	  flags.  See CDC_CLOSE_TRAY, CDC_OPEN_TRAY, etc.
830
831
832
833CDROMAUDIOBUFSIZ		set the audio buffer size
834
835	usage:
836
837	  int arg;
838	  ioctl(fd, CDROMAUDIOBUFSIZ, val);
839
840	inputs:
841	  New audio buffer size
842
843	outputs:
844	  The ioctl return value is the new audio buffer size, or -1
845	  on error.
846
847	error return:
848	  ENOSYS	Not supported by this driver.
849
850	notes:
851	  Not supported by all drivers.
852
853
854
855DVD_READ_STRUCT			Read structure
856
857	usage:
858
859	  dvd_struct s;
860	  ioctl(fd, DVD_READ_STRUCT, &s);
861
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
871
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
879
880	error returns:
881	  EINVAL	physical.layer_num exceeds number of layers
882	  EIO		Received invalid response from drive
883
884
885
886DVD_WRITE_STRUCT		Write structure
887
888	Not implemented, as of 2.6.8.1
889
890
891
892DVD_AUTH			Authentication
893
894	usage:
895
896	  dvd_authinfo ai;
897	  ioctl(fd, DVD_AUTH, &ai);
898
899	inputs:
900	  dvd_authinfo structure.  See <linux/cdrom.h>
901
902	outputs:
903	  dvd_authinfo structure.
904
905	error return:
906	  ENOTTY	ai.type not recognized.
907
908
909
910CDROM_SEND_PACKET		send a packet to the drive
911
912	usage:
913
914	  struct cdrom_generic_command cgc;
915	  ioctl(fd, CDROM_SEND_PACKET, &cgc);
916
917	inputs:
918	  cdrom_generic_command structure containing the packet to send.
919
920	outputs:	none
921	  cdrom_generic_command structure containing results.
922
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
930
931
932
933CDROM_NEXT_WRITABLE		get next writable block
934
935	usage:
936
937	  long next;
938	  ioctl(fd, CDROM_NEXT_WRITABLE, &next);
939
940	inputs:		none
941
942	outputs:
943	  The next writable block.
944
945	notes:
946	  If the device does not support this ioctl directly, the
947	  ioctl will return CDROM_LAST_WRITTEN + 7.
948
949
950
951CDROM_LAST_WRITTEN		get last block written on disc
952
953	usage:
954
955	  long last;
956	  ioctl(fd, CDROM_LAST_WRITTEN, &last);
957
958	inputs:		none
959
960	outputs:
961	  The last block written on disc
962
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.
968