About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Documentation / ioctl / cdrom.txt


Based on kernel version 4.16.1. Page generated on 2018-04-09 11:53 EST.

1			Summary of CDROM ioctl calls.
2			============================
3	
4			Edward A. Falk <efalk@google.com>
5	
6			November, 2004
7	
8	This document attempts to describe the ioctl(2) calls supported by
9	the CDROM layer.  These are by-and-large implemented (as of Linux 2.6)
10	in drivers/cdrom/cdrom.c and drivers/block/scsi_ioctl.c
11	
12	ioctl values are listed in <linux/cdrom.h>.  As of this writing, they
13	are 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	
70	The information that follows was determined from reading kernel source
71	code.  It is likely that some corrections will be made over time.
72	
73	
74	
75	
76	
77	
78	
79	General:
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	
97	CDROMPAUSE			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	
111	CDROMRESUME			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	
125	CDROMPLAYMSF			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	
149	CDROMPLAYTRKIND			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	
170	CDROMREADTOCHDR			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	
188	CDROMREADTOCENTRY		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	
214	CDROMSTOP			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	
232	CDROMSTART			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	
251	CDROMEJECT			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	
270	CDROMCLOSETRAY			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	
289	CDROMVOLCTRL			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	
307	CDROMVOLREAD			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	
325	CDROMSUBCHNL			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	
348	CDROMREADRAW			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	
383	CDROMREADMODE1			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	
392	CDROMREADMODE2			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	
401	CDROMREADAUDIO			(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	
422	CDROMEJECT_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	
441	CDROMMULTISESSION		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	
461	CDROM_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	
489	CDROM_GET_UPC			CDROM_GET_MCN  (deprecated)
490	
491		Not implemented, as of 2.6.8.1
492	
493	
494	
495	CDROMRESET			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	
512	CDROMREADCOOKED			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	
530	CDROMREADALL			read all 2646 bytes
531	
532		Same as CDROMREADCOOKED, but reads 2646 bytes.
533	
534	
535	
536	CDROMSEEK			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	
550	CDROMPLAYBLK			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	
564	CDROMGETSPINDOWN
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	
579	CDROMSETSPINDOWN
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	
595	CDROM_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	
620	CDROM_CLEAR_OPTIONS		Clear behavior options
621	
622		Same as CDROM_SET_OPTIONS, except that selected options are
623		turned off.
624	
625	
626	
627	CDROM_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	
644	CDROM_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	
661	CDROM_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	
683	CDROM_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	
713	CDROM_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	
758	CDROM_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	
774	CDROM_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	
801	CDROM_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	
819	CDROM_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	
833	CDROMAUDIOBUFSIZ		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	
855	DVD_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	
886	DVD_WRITE_STRUCT		Write structure
887	
888		Not implemented, as of 2.6.8.1
889	
890	
891	
892	DVD_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	
910	CDROM_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	
933	CDROM_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	
951	CDROM_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.
Hide Line Numbers


About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog