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