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