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 usage:: 722 723 char spindown; 724 725 ioctl(fd, CDROMGETSPINDOWN, &spindown); 726 727 inputs: 728 none 729 730 731 outputs: 732 The value of the current 4-bit spindown value. 733 734 735 736 737 738CDROMSETSPINDOWN 739 usage:: 740 741 char spindown 742 743 ioctl(fd, CDROMSETSPINDOWN, &spindown); 744 745 inputs: 746 4-bit value used to control spindown (TODO: more detail here) 747 748 749 outputs: 750 none 751 752 753 754 755 756 757CDROM_SET_OPTIONS 758 Set behavior options 759 760 761 usage:: 762 763 int options; 764 765 ioctl(fd, CDROM_SET_OPTIONS, options); 766 767 inputs: 768 New values for drive options. The logical 'or' of: 769 770 ============== ================================== 771 CDO_AUTO_CLOSE close tray on first open(2) 772 CDO_AUTO_EJECT open tray on last release 773 CDO_USE_FFLAGS use O_NONBLOCK information on open 774 CDO_LOCK lock tray on open files 775 CDO_CHECK_TYPE check type on open for data 776 ============== ================================== 777 778 outputs: 779 Returns the resulting options settings in the 780 ioctl return value. Returns -1 on error. 781 782 error return: 783 - ENOSYS selected option(s) not supported by drive. 784 785 786 787 788CDROM_CLEAR_OPTIONS 789 Clear behavior options 790 791 792 Same as CDROM_SET_OPTIONS, except that selected options are 793 turned off. 794 795 796 797CDROM_SELECT_SPEED 798 Set the CD-ROM speed 799 800 801 usage:: 802 803 int speed; 804 805 ioctl(fd, CDROM_SELECT_SPEED, speed); 806 807 inputs: 808 New drive speed. 809 810 811 outputs: 812 none 813 814 815 error return: 816 - ENOSYS speed selection not supported by drive. 817 818 819 820CDROM_SELECT_DISC 821 Select disc (for juke-boxes) 822 823 824 usage:: 825 826 int disk; 827 828 ioctl(fd, CDROM_SELECT_DISC, disk); 829 830 inputs: 831 Disk to load into drive. 832 833 834 outputs: 835 none 836 837 838 error return: 839 - EINVAL Disk number beyond capacity of drive 840 841 842 843CDROM_MEDIA_CHANGED 844 Check is media changed 845 846 847 usage:: 848 849 int slot; 850 851 ioctl(fd, CDROM_MEDIA_CHANGED, slot); 852 853 inputs: 854 Slot number to be tested, always zero except for jukeboxes. 855 856 May also be special values CDSL_NONE or CDSL_CURRENT 857 858 outputs: 859 Ioctl return value is 0 or 1 depending on whether the media 860 861 has been changed, or -1 on error. 862 863 error returns: 864 - ENOSYS Drive can't detect media change 865 - EINVAL Slot number beyond capacity of drive 866 - ENOMEM Out of memory 867 868 869 870CDROM_DRIVE_STATUS 871 Get tray position, etc. 872 873 874 usage:: 875 876 int slot; 877 878 ioctl(fd, CDROM_DRIVE_STATUS, slot); 879 880 inputs: 881 Slot number to be tested, always zero except for jukeboxes. 882 883 May also be special values CDSL_NONE or CDSL_CURRENT 884 885 outputs: 886 Ioctl return value will be one of the following values 887 888 from <linux/cdrom.h>: 889 890 =================== ========================== 891 CDS_NO_INFO Information not available. 892 CDS_NO_DISC 893 CDS_TRAY_OPEN 894 CDS_DRIVE_NOT_READY 895 CDS_DISC_OK 896 -1 error 897 =================== ========================== 898 899 error returns: 900 - ENOSYS Drive can't detect drive status 901 - EINVAL Slot number beyond capacity of drive 902 - ENOMEM Out of memory 903 904 905 906 907CDROM_DISC_STATUS 908 Get disc type, etc. 909 910 911 usage:: 912 913 ioctl(fd, CDROM_DISC_STATUS, 0); 914 915 916 inputs: 917 none 918 919 920 outputs: 921 Ioctl return value will be one of the following values 922 923 from <linux/cdrom.h>: 924 925 - CDS_NO_INFO 926 - CDS_AUDIO 927 - CDS_MIXED 928 - CDS_XA_2_2 929 - CDS_XA_2_1 930 - CDS_DATA_1 931 932 error returns: 933 none at present 934 935 notes: 936 - Source code comments state:: 937 938 939 Ok, this is where problems start. The current interface for 940 the CDROM_DISC_STATUS ioctl is flawed. It makes the false 941 assumption that CDs are all CDS_DATA_1 or all CDS_AUDIO, etc. 942 Unfortunately, while this is often the case, it is also 943 very common for CDs to have some tracks with data, and some 944 tracks with audio. Just because I feel like it, I declare 945 the following to be the best way to cope. If the CD has 946 ANY data tracks on it, it will be returned as a data CD. 947 If it has any XA tracks, I will return it as that. Now I 948 could simplify this interface by combining these returns with 949 the above, but this more clearly demonstrates the problem 950 with the current interface. Too bad this wasn't designed 951 to use bitmasks... -Erik 952 953 Well, now we have the option CDS_MIXED: a mixed-type CD. 954 User level programmers might feel the ioctl is not very 955 useful. 956 ---david 957 958 959 960 961CDROM_CHANGER_NSLOTS 962 Get number of slots 963 964 965 usage:: 966 967 ioctl(fd, CDROM_CHANGER_NSLOTS, 0); 968 969 970 inputs: 971 none 972 973 974 outputs: 975 The ioctl return value will be the number of slots in a 976 CD changer. Typically 1 for non-multi-disk devices. 977 978 error returns: 979 none 980 981 982 983CDROM_LOCKDOOR 984 lock or unlock door 985 986 987 usage:: 988 989 int lock; 990 991 ioctl(fd, CDROM_LOCKDOOR, lock); 992 993 inputs: 994 Door lock flag, 1=lock, 0=unlock 995 996 997 outputs: 998 none 999 1000 1001 error returns: 1002 - EDRIVE_CANT_DO_THIS 1003 1004 Door lock function not supported. 1005 - EBUSY 1006 1007 Attempt to unlock when multiple users 1008 have the drive open and not CAP_SYS_ADMIN 1009 1010 notes: 1011 As of 2.6.8.1, the lock flag is a global lock, meaning that 1012 all CD drives will be locked or unlocked together. This is 1013 probably a bug. 1014 1015 The EDRIVE_CANT_DO_THIS value is defined in <linux/cdrom.h> 1016 and is currently (2.6.8.1) the same as EOPNOTSUPP 1017 1018 1019 1020CDROM_DEBUG 1021 Turn debug messages on/off 1022 1023 1024 usage:: 1025 1026 int debug; 1027 1028 ioctl(fd, CDROM_DEBUG, debug); 1029 1030 inputs: 1031 Cdrom debug flag, 0=disable, 1=enable 1032 1033 1034 outputs: 1035 The ioctl return value will be the new debug flag. 1036 1037 1038 error return: 1039 - EACCES Access denied: requires CAP_SYS_ADMIN 1040 1041 1042 1043CDROM_GET_CAPABILITY 1044 get capabilities 1045 1046 1047 usage:: 1048 1049 ioctl(fd, CDROM_GET_CAPABILITY, 0); 1050 1051 1052 inputs: 1053 none 1054 1055 1056 outputs: 1057 The ioctl return value is the current device capability 1058 flags. See CDC_CLOSE_TRAY, CDC_OPEN_TRAY, etc. 1059 1060 1061 1062CDROMAUDIOBUFSIZ 1063 set the audio buffer size 1064 1065 1066 usage:: 1067 1068 int arg; 1069 1070 ioctl(fd, CDROMAUDIOBUFSIZ, val); 1071 1072 inputs: 1073 New audio buffer size 1074 1075 1076 outputs: 1077 The ioctl return value is the new audio buffer size, or -1 1078 on error. 1079 1080 error return: 1081 - ENOSYS Not supported by this driver. 1082 1083 notes: 1084 Not supported by all drivers. 1085 1086 1087 1088 1089DVD_READ_STRUCT Read structure 1090 1091 usage:: 1092 1093 dvd_struct s; 1094 1095 ioctl(fd, DVD_READ_STRUCT, &s); 1096 1097 inputs: 1098 dvd_struct structure, containing: 1099 1100 =================== ========================================== 1101 type specifies the information desired, one of 1102 DVD_STRUCT_PHYSICAL, DVD_STRUCT_COPYRIGHT, 1103 DVD_STRUCT_DISCKEY, DVD_STRUCT_BCA, 1104 DVD_STRUCT_MANUFACT 1105 physical.layer_num desired layer, indexed from 0 1106 copyright.layer_num desired layer, indexed from 0 1107 disckey.agid 1108 =================== ========================================== 1109 1110 outputs: 1111 dvd_struct structure, containing: 1112 1113 =================== ================================ 1114 physical for type == DVD_STRUCT_PHYSICAL 1115 copyright for type == DVD_STRUCT_COPYRIGHT 1116 disckey.value for type == DVD_STRUCT_DISCKEY 1117 bca.{len,value} for type == DVD_STRUCT_BCA 1118 manufact.{len,valu} for type == DVD_STRUCT_MANUFACT 1119 =================== ================================ 1120 1121 error returns: 1122 - EINVAL physical.layer_num exceeds number of layers 1123 - EIO Received invalid response from drive 1124 1125 1126 1127DVD_WRITE_STRUCT Write structure 1128 1129 Not implemented, as of 2.6.8.1 1130 1131 1132 1133DVD_AUTH Authentication 1134 1135 usage:: 1136 1137 dvd_authinfo ai; 1138 1139 ioctl(fd, DVD_AUTH, &ai); 1140 1141 inputs: 1142 dvd_authinfo structure. See <linux/cdrom.h> 1143 1144 1145 outputs: 1146 dvd_authinfo structure. 1147 1148 1149 error return: 1150 - ENOTTY ai.type not recognized. 1151 1152 1153 1154CDROM_SEND_PACKET 1155 send a packet to the drive 1156 1157 1158 usage:: 1159 1160 struct cdrom_generic_command cgc; 1161 1162 ioctl(fd, CDROM_SEND_PACKET, &cgc); 1163 1164 inputs: 1165 cdrom_generic_command structure containing the packet to send. 1166 1167 1168 outputs: 1169 none 1170 1171 cdrom_generic_command structure containing results. 1172 1173 error return: 1174 - EIO 1175 1176 command failed. 1177 - EPERM 1178 1179 Operation not permitted, either because a 1180 write command was attempted on a drive which 1181 is opened read-only, or because the command 1182 requires CAP_SYS_RAWIO 1183 - EINVAL 1184 1185 cgc.data_direction not set 1186 1187 1188 1189CDROM_NEXT_WRITABLE 1190 get next writable block 1191 1192 1193 usage:: 1194 1195 long next; 1196 1197 ioctl(fd, CDROM_NEXT_WRITABLE, &next); 1198 1199 inputs: 1200 none 1201 1202 1203 outputs: 1204 The next writable block. 1205 1206 1207 notes: 1208 If the device does not support this ioctl directly, the 1209 1210 ioctl will return CDROM_LAST_WRITTEN + 7. 1211 1212 1213 1214CDROM_LAST_WRITTEN 1215 get last block written on disc 1216 1217 1218 usage:: 1219 1220 long last; 1221 1222 ioctl(fd, CDROM_LAST_WRITTEN, &last); 1223 1224 inputs: 1225 none 1226 1227 1228 outputs: 1229 The last block written on disc 1230 1231 1232 notes: 1233 If the device does not support this ioctl directly, the 1234 result is derived from the disc's table of contents. If the 1235 table of contents can't be read, this ioctl returns an 1236 error. 1237