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