linux/Documentation/userspace-api/ioctl/cdrom.rst
<<
>>
Prefs
   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