cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

cdrom.rst (20562B)


      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.