brintos

brintos / linux-shallow public Read only

0
0
Text · 20.1 KiB · 2ad91db Raw
1243 lines · plain
1============================2Summary of CDROM ioctl calls3============================4 5- Edward A. Falk <efalk@google.com>6 7November, 20048 9This document attempts to describe the ioctl(2) calls supported by10the CDROM layer.  These are by-and-large implemented (as of Linux 2.6)11in drivers/cdrom/cdrom.c and drivers/block/scsi_ioctl.c12 13ioctl values are listed in <linux/cdrom.h>.  As of this writing, they14are as follows:15 16	========================  ===============================================17	CDROMPAUSE		  Pause Audio Operation18	CDROMRESUME		  Resume paused Audio Operation19	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 drive24	CDROMSTART		  Start the cdrom drive25	CDROMEJECT		  Ejects the cdrom media26	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-ejecting34	CDROMMULTISESSION	  Obtain the start-of-last-session35				  address of multi session disks36				  (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 drive41	CDROMVOLREAD		  Get the drive's volume setting42				  (struct cdrom_volctrl)43	CDROMREADRAW		  read data in raw mode (2352 Bytes)44				  (struct cdrom_read)45	CDROMREADCOOKED		  read data in cooked mode46	CDROMSEEK		  seek msf address47	CDROMPLAYBLK		  scsi-cd only, (struct cdrom_blk)48	CDROMREADALL		  read all 2646 bytes49	CDROMGETSPINDOWN	  return 4-bit spindown value50	CDROMSETSPINDOWN	  set 4-bit spindown value51	CDROMCLOSETRAY		  pendant of CDROMEJECT52	CDROM_SET_OPTIONS	  Set behavior options53	CDROM_CLEAR_OPTIONS	  Clear behavior options54	CDROM_SELECT_SPEED	  Set the CD-ROM speed55	CDROM_SELECT_DISC	  Select disc (for juke-boxes)56	CDROM_MEDIA_CHANGED	  Check is media changed57	CDROM_TIMED_MEDIA_CHANGE  Check if media changed58				  since given time59				  (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 slots63	CDROM_LOCKDOOR		  lock or unlock door64	CDROM_DEBUG		  Turn debug messages on/off65	CDROM_GET_CAPABILITY	  get capabilities66	CDROMAUDIOBUFSIZ	  set the audio buffer size67	DVD_READ_STRUCT		  Read structure68	DVD_WRITE_STRUCT	  Write structure69	DVD_AUTH		  Authentication70	CDROM_SEND_PACKET	  send a packet to the drive71	CDROM_NEXT_WRITABLE	  get next writable block72	CDROM_LAST_WRITTEN	  get last block written on disc73	========================  ===============================================74 75 76The information that follows was determined from reading kernel source77code.  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 success84	and -1 with errno set to an appropriate value on error.  (Some85	ioctls return non-negative data values.)86 87	Unless otherwise specified, all ioctl calls return -1 and set88	errno to EFAULT on a failed attempt to copy data to or from user89	address space.90 91	Individual drivers may return error codes not listed here.92 93	Unless otherwise specified, all data structures and constants94	are defined in <linux/cdrom.h>95 96------------------------------------------------------------------------------97 98 99CDROMPAUSE100	Pause Audio Operation101 102 103	usage::104 105	  ioctl(fd, CDROMPAUSE, 0);106 107 108	inputs:109		none110 111 112	outputs:113		none114 115 116	error return:117	  - ENOSYS	cd drive not audio-capable.118 119 120CDROMRESUME121	Resume paused Audio Operation122 123 124	usage::125 126	  ioctl(fd, CDROMRESUME, 0);127 128 129	inputs:130		none131 132 133	outputs:134		none135 136 137	error return:138	  - ENOSYS	cd drive not audio-capable.139 140 141CDROMPLAYMSF142	Play Audio MSF143 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 play155 156 157	outputs:158		none159 160 161	error return:162	  - ENOSYS	cd drive not audio-capable.163 164	notes:165		- MSF stands for minutes-seconds-frames166		- LBA stands for logical block address167		- Segment is described as start and end times, where each time168		  is described as minutes:seconds:frames.169		  A frame is 1/75 of a second.170 171 172CDROMPLAYTRKIND173	Play Audio Track/index174 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 play186 187 188	outputs:189		none190 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 time197		  is described as a track and an index.198 199 200 201CDROMREADTOCHDR202	Read TOC header203 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 structure215 216 217	outputs:218		cdrom_tochdr structure219 220 221	error return:222	  - ENOSYS	cd drive not audio-capable.223 224 225 226CDROMREADTOCENTRY227	Read TOC entry228 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 structure240 241 242	outputs:243		cdrom_tocentry structure244 245 246	error return:247	  - ENOSYS	cd drive not audio-capable.248	  - EINVAL	entry.cdte_format not CDROM_MSF or CDROM_LBA249	  - EINVAL	requested track out of bounds250	  - EIO		I/O error reading TOC251 252	notes:253		- TOC stands for Table Of Contents254		- MSF stands for minutes-seconds-frames255		- LBA stands for logical block address256 257 258 259CDROMSTOP260	Stop the cdrom drive261 262 263	usage::264 265	  ioctl(fd, CDROMSTOP, 0);266 267 268	inputs:269		none270 271 272	outputs:273		none274 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 284CDROMSTART285	Start the cdrom drive286 287 288	usage::289 290	  ioctl(fd, CDROMSTART, 0);291 292 293	inputs:294		none295 296 297	outputs:298		none299 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 310CDROMEJECT311	- Ejects the cdrom media312 313 314	usage::315 316	  ioctl(fd, CDROMEJECT, 0);317 318 319	inputs:320		none321 322 323	outputs:324		none325 326 327	error returns:328	  - ENOSYS	cd drive not capable of ejecting329	  - EBUSY	other processes are accessing drive, or door is locked330 331	notes:332		- See CDROM_LOCKDOOR, below.333 334 335 336 337CDROMCLOSETRAY338	pendant of CDROMEJECT339 340 341	usage::342 343	  ioctl(fd, CDROMCLOSETRAY, 0);344 345 346	inputs:347		none348 349 350	outputs:351		none352 353 354	error returns:355	  - ENOSYS	cd drive not capable of closing the tray356	  - EBUSY	other processes are accessing drive, or door is locked357 358	notes:359		- See CDROM_LOCKDOOR, below.360 361 362 363 364CDROMVOLCTRL365	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 4376		channels.377 378	outputs:379		none380 381 382	error return:383	  - ENOSYS	cd drive not audio-capable.384 385 386 387CDROMVOLREAD388	Get the drive's volume setting389 390	(struct cdrom_volctrl)391 392 393	usage::394 395	  struct cdrom_volctrl volume;396 397	  ioctl(fd, CDROMVOLREAD, &volume);398 399	inputs:400		none401 402 403	outputs:404		The current volume settings.405 406 407	error return:408	  - ENOSYS	cd drive not audio-capable.409 410 411 412CDROMSUBCHNL413	Read subchannel data414 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 structure426 427 428	outputs:429		cdrom_subchnl structure430 431 432	error return:433	  - ENOSYS	cd drive not audio-capable.434	  - EINVAL	format not CDROM_MSF or CDROM_LBA435 436	notes:437		- Format is converted to CDROM_MSF or CDROM_LBA438		  as per user request on return439 440 441 442CDROMREADRAW443	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:0467	  - ENOMEM	out of memory468 469	notes:470		- As of 2.6.8.1, comments in <linux/cdrom.h> indicate that this471		  ioctl accepts a cdrom_read structure, but actual source code472		  reads a cdrom_msf structure and writes a buffer of data to473		  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 482CDROMREADMODE1483	Read CDROM mode 1 data (2048 Bytes)484 485	(struct cdrom_read)486 487	notes:488		Identical to CDROMREADRAW except that block size is489		CD_FRAMESIZE (2048) bytes490 491 492 493CDROMREADMODE2494	Read CDROM mode 2 data (2336 Bytes)495 496	(struct cdrom_read)497 498	notes:499		Identical to CDROMREADRAW except that block size is500		CD_FRAMESIZE_RAW0 (2336) bytes501 502 503 504CDROMREADAUDIO505	(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 start515		point and length516 517	outputs:518		audio data, returned to buffer indicated by ra519 520 521	error return:522	  - EINVAL	format not CDROM_MSF or CDROM_LBA523	  - EINVAL	nframes not in range [1 75]524	  - ENXIO	drive has no queue (probably means invalid fd)525	  - ENOMEM	out of memory526 527 528CDROMEJECT_SW529	enable(1)/disable(0) auto-ejecting530 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		none544 545 546	error return:547	  - ENOSYS	Drive is not capable of ejecting.548	  - EBUSY	Door is locked549 550 551 552 553CDROMMULTISESSION554	Obtain the start-of-last-session address of multi session disks555 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 desired566 567	  format.568 569	outputs:570		cdrom_multisession structure is filled with last_session571		information.572 573	error return:574	  - EINVAL	format not CDROM_MSF or CDROM_LBA575 576 577CDROM_GET_MCN578	Obtain the "Universal Product Code"579	if available580 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		none592 593 594	outputs:595		Universal Product Code596 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 few605		    audio discs give Universal Product Code information, which606		    should just be the Medium Catalog Number on the box.  Note,607		    that the way the code is written on the CD is /not/ uniform608		    across all discs!609 610 611 612 613CDROM_GET_UPC614	CDROM_GET_MCN  (deprecated)615 616 617	Not implemented, as of 2.6.8.1618 619 620 621CDROMRESET622	hard-reset the drive623 624 625	usage::626 627	  ioctl(fd, CDROMRESET, 0);628 629 630	inputs:631		none632 633 634	outputs:635		none636 637 638	error return:639	  - EACCES	Access denied:  requires CAP_SYS_ADMIN640	  - ENOSYS	Drive is not capable of resetting.641 642 643 644 645CDROMREADCOOKED646	read data in cooked mode647 648 649	usage::650 651	  u8 buffer[CD_FRAMESIZE]652 653	  ioctl(fd, CDROMREADCOOKED, buffer);654 655	inputs:656		none657 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 670CDROMREADALL671	read all 2646 bytes672 673 674	Same as CDROMREADCOOKED, but reads 2646 bytes.675 676 677 678CDROMSEEK679	seek msf address680 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		none694 695 696 697 698CDROMPLAYBLK699	scsi-cd only700 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 play712 713 714	outputs:715		none716 717 718 719 720CDROMGETSPINDOWN721	Obsolete, was ide-cd only722 723 724	usage::725 726	  char spindown;727 728	  ioctl(fd, CDROMGETSPINDOWN, &spindown);729 730	inputs:731		none732 733 734	outputs:735		The value of the current 4-bit spindown value.736 737 738 739 740 741CDROMSETSPINDOWN742	Obsolete, was ide-cd only743 744 745	usage::746 747	  char spindown748 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		none757 758 759 760 761 762 763CDROM_SET_OPTIONS764	Set behavior options765 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 release779	    CDO_USE_FFLAGS	use O_NONBLOCK information on open780	    CDO_LOCK		lock tray on open files781	    CDO_CHECK_TYPE	check type on open for data782	    ==============      ==================================783 784	outputs:785		Returns the resulting options settings in the786		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_OPTIONS795	Clear behavior options796 797 798	Same as CDROM_SET_OPTIONS, except that selected options are799	turned off.800 801 802 803CDROM_SELECT_SPEED804	Set the CD-ROM speed805 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		none819 820 821	error return:822	  - ENOSYS	speed selection not supported by drive.823 824 825 826CDROM_SELECT_DISC827	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		none842 843 844	error return:845	  - EINVAL	Disk number beyond capacity of drive846 847 848 849CDROM_MEDIA_CHANGED850	Check is media changed851 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_CURRENT863 864	outputs:865		Ioctl return value is 0 or 1 depending on whether the media866 867	  has been changed, or -1 on error.868 869	error returns:870	  - ENOSYS	Drive can't detect media change871	  - EINVAL	Slot number beyond capacity of drive872	  - ENOMEM	Out of memory873 874 875 876CDROM_DRIVE_STATUS877	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_CURRENT890 891	outputs:892		Ioctl return value will be one of the following values893 894	  from <linux/cdrom.h>:895 896	    =================== ==========================897	    CDS_NO_INFO		Information not available.898	    CDS_NO_DISC899	    CDS_TRAY_OPEN900	    CDS_DRIVE_NOT_READY901	    CDS_DISC_OK902	    -1			error903	    =================== ==========================904 905	error returns:906	  - ENOSYS	Drive can't detect drive status907	  - EINVAL	Slot number beyond capacity of drive908	  - ENOMEM	Out of memory909 910 911 912 913CDROM_DISC_STATUS914	Get disc type, etc.915 916 917	usage::918 919	  ioctl(fd, CDROM_DISC_STATUS, 0);920 921 922	inputs:923		none924 925 926	outputs:927		Ioctl return value will be one of the following values928 929	  from <linux/cdrom.h>:930 931	    - CDS_NO_INFO932	    - CDS_AUDIO933	    - CDS_MIXED934	    - CDS_XA_2_2935	    - CDS_XA_2_1936	    - CDS_DATA_1937 938	error returns:939		none at present940 941	notes:942	    - Source code comments state::943 944 945		Ok, this is where problems start.  The current interface for946		the CDROM_DISC_STATUS ioctl is flawed.  It makes the false947		assumption that CDs are all CDS_DATA_1 or all CDS_AUDIO, etc.948		Unfortunately, while this is often the case, it is also949		very common for CDs to have some tracks with data, and some950		tracks with audio.	Just because I feel like it, I declare951		the following to be the best way to cope.  If the CD has952		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 I954		could simplify this interface by combining these returns with955		the above, but this more clearly demonstrates the problem956		with the current interface.  Too bad this wasn't designed957		to use bitmasks...	       -Erik958 959		Well, now we have the option CDS_MIXED: a mixed-type CD.960		User level programmers might feel the ioctl is not very961		useful.962				---david963 964 965 966 967CDROM_CHANGER_NSLOTS968	Get number of slots969 970 971	usage::972 973	  ioctl(fd, CDROM_CHANGER_NSLOTS, 0);974 975 976	inputs:977		none978 979 980	outputs:981		The ioctl return value will be the number of slots in a982		CD changer.  Typically 1 for non-multi-disk devices.983 984	error returns:985		none986 987 988 989CDROM_LOCKDOOR990	lock or unlock door991 992 993	usage::994 995	  int lock;996 997	  ioctl(fd, CDROM_LOCKDOOR, lock);998 999	inputs:1000		Door lock flag, 1=lock, 0=unlock1001 1002 1003	outputs:1004		none1005 1006 1007	error returns:1008	  - EDRIVE_CANT_DO_THIS1009 1010				Door lock function not supported.1011	  - EBUSY1012 1013				Attempt to unlock when multiple users1014				have the drive open and not CAP_SYS_ADMIN1015 1016	notes:1017		As of 2.6.8.1, the lock flag is a global lock, meaning that1018		all CD drives will be locked or unlocked together.  This is1019		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 EOPNOTSUPP1023 1024 1025 1026CDROM_DEBUG1027	Turn debug messages on/off1028 1029 1030	usage::1031 1032	  int debug;1033 1034	  ioctl(fd, CDROM_DEBUG, debug);1035 1036	inputs:1037		Cdrom debug flag, 0=disable, 1=enable1038 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_ADMIN1046 1047 1048 1049CDROM_GET_CAPABILITY1050	get capabilities1051 1052 1053	usage::1054 1055	  ioctl(fd, CDROM_GET_CAPABILITY, 0);1056 1057 1058	inputs:1059		none1060 1061 1062	outputs:1063		The ioctl return value is the current device capability1064		flags.  See CDC_CLOSE_TRAY, CDC_OPEN_TRAY, etc.1065 1066 1067 1068CDROMAUDIOBUFSIZ1069	set the audio buffer size1070 1071 1072	usage::1073 1074	  int arg;1075 1076	  ioctl(fd, CDROMAUDIOBUFSIZ, val);1077 1078	inputs:1079		New audio buffer size1080 1081 1082	outputs:1083		The ioctl return value is the new audio buffer size, or -11084		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 structure1096 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 of1108				DVD_STRUCT_PHYSICAL, DVD_STRUCT_COPYRIGHT,1109				DVD_STRUCT_DISCKEY, DVD_STRUCT_BCA,1110				DVD_STRUCT_MANUFACT1111	    physical.layer_num	desired layer, indexed from 01112	    copyright.layer_num	desired layer, indexed from 01113	    disckey.agid1114	    =================== ==========================================1115 1116	outputs:1117		dvd_struct structure, containing:1118 1119	    =================== ================================1120	    physical		for type == DVD_STRUCT_PHYSICAL1121	    copyright		for type == DVD_STRUCT_COPYRIGHT1122	    disckey.value	for type == DVD_STRUCT_DISCKEY1123	    bca.{len,value}	for type == DVD_STRUCT_BCA1124	    manufact.{len,valu}	for type == DVD_STRUCT_MANUFACT1125	    =================== ================================1126 1127	error returns:1128	  - EINVAL	physical.layer_num exceeds number of layers1129	  - EIO		Received invalid response from drive1130 1131 1132 1133DVD_WRITE_STRUCT		Write structure1134 1135	Not implemented, as of 2.6.8.11136 1137 1138 1139DVD_AUTH			Authentication1140 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_PACKET1161	send a packet to the drive1162 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		none1176 1177	  cdrom_generic_command structure containing results.1178 1179	error return:1180	  - EIO1181 1182			command failed.1183	  - EPERM1184 1185			Operation not permitted, either because a1186			write command was attempted on a drive which1187			is opened read-only, or because the command1188			requires CAP_SYS_RAWIO1189	  - EINVAL1190 1191			cgc.data_direction not set1192 1193 1194 1195CDROM_NEXT_WRITABLE1196	get next writable block1197 1198 1199	usage::1200 1201	  long next;1202 1203	  ioctl(fd, CDROM_NEXT_WRITABLE, &next);1204 1205	inputs:1206		none1207 1208 1209	outputs:1210		The next writable block.1211 1212 1213	notes:1214		If the device does not support this ioctl directly, the1215 1216	  ioctl will return CDROM_LAST_WRITTEN + 7.1217 1218 1219 1220CDROM_LAST_WRITTEN1221	get last block written on disc1222 1223 1224	usage::1225 1226	  long last;1227 1228	  ioctl(fd, CDROM_LAST_WRITTEN, &last);1229 1230	inputs:1231		none1232 1233 1234	outputs:1235		The last block written on disc1236 1237 1238	notes:1239		If the device does not support this ioctl directly, the1240		result is derived from the disc's table of contents.  If the1241		table of contents can't be read, this ioctl returns an1242		error.1243