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