/* When a driver supports a certain function, but the cdrom drive we are *usingdoesn't,wewillreturntheerrorEDRIVE_CANT_DO_THIS.Wewill *borrowthe"Operationnotsupported"errorfromthenetworkfolksto *accomplishthis.Maybesomedaywewillgetamoretargetederrorcode,
* but this will do for now... */ #define EDRIVE_CANT_DO_THIS EOPNOTSUPP
/******************************************************* *TheCD-ROMIOCTLcommands--theseshouldbesupportedby *allthevariouscdromdrivers.FortheCD-ROMioctls,we *willcommandeerbyte0x53,or'S'.
*******************************************************/ #define CDROMPAUSE 0x5301 /* Pause Audio Operation */ #define CDROMRESUME 0x5302 /* Resume paused Audio Operation */ #define CDROMPLAYMSF 0x5303 /* Play Audio MSF (struct cdrom_msf) */ #define CDROMPLAYTRKIND 0x5304 /* Play Audio Track/index
(struct cdrom_ti) */ #define CDROMREADTOCHDR 0x5305 /* Read TOC header
(struct cdrom_tochdr) */ #define CDROMREADTOCENTRY 0x5306 /* Read TOC entry
(struct cdrom_tocentry) */ #define CDROMSTOP 0x5307 /* Stop the cdrom drive */ #define CDROMSTART 0x5308 /* Start the cdrom drive */ #define CDROMEJECT 0x5309 /* Ejects the cdrom media */ #define CDROMVOLCTRL 0x530a /* Control output volume
(struct cdrom_volctrl) */ #define CDROMSUBCHNL 0x530b /* Read subchannel data
(struct cdrom_subchnl) */ #define CDROMREADMODE2 0x530c /* Read CDROM mode 2 data (2336 Bytes)
(struct cdrom_read) */ #define CDROMREADMODE1 0x530d /* Read CDROM mode 1 data (2048 Bytes)
(struct cdrom_read) */ #define CDROMREADAUDIO 0x530e /* (struct cdrom_read_audio) */ #define CDROMEJECT_SW 0x530f /* enable(1)/disable(0) auto-ejecting */ #define CDROMMULTISESSION 0x5310 /* Obtain the start-of-last-session addressofmultisessiondisks
(struct cdrom_multisession) */ #define CDROM_GET_MCN 0x5311 /* Obtain the "Universal Product Code"
if available (struct cdrom_mcn) */ #define CDROM_GET_UPC CDROM_GET_MCN /* This one is deprecated,
but here anyway for compatibility */ #define CDROMRESET 0x5312 /* hard-reset the drive */ #define CDROMVOLREAD 0x5313 /* Get the drive's volume setting
(struct cdrom_volctrl) */ #define CDROMREADRAW 0x5314 /* read data in raw mode (2352 Bytes)
(struct cdrom_read) */ /* *Theseioctlsareusedonlyusedinaztcd.candoptcd.c
*/ #define CDROMREADCOOKED 0x5315 /* read data in cooked mode */ #define CDROMSEEK 0x5316 /* seek msf address */
/* *TheseioctlsareimplementedthroughtheuniformCD-ROMdriver *They_will_beadoptedbyallCD-ROMdrivers,whenalltheCD-ROM *driversareeventuallyportedtotheuniformCD-ROMdriverinterface.
*/ #define CDROMCLOSETRAY 0x5319 /* pendant of CDROMEJECT */ #define CDROM_SET_OPTIONS 0x5320 /* Set behavior options */ #define CDROM_CLEAR_OPTIONS 0x5321 /* Clear behavior options */ #define CDROM_SELECT_SPEED 0x5322 /* Set the CD-ROM speed */ #define CDROM_SELECT_DISC 0x5323 /* Select disc (for juke-boxes) */ #define CDROM_MEDIA_CHANGED 0x5325 /* Check is media changed */ #define CDROM_DRIVE_STATUS 0x5326 /* Get tray position, etc. */ #define CDROM_DISC_STATUS 0x5327 /* Get disc type, etc. */ #define CDROM_CHANGER_NSLOTS 0x5328 /* Get number of slots */ #define CDROM_LOCKDOOR 0x5329 /* lock or unlock door */ #define CDROM_DEBUG 0x5330 /* Turn debug messages on/off */ #define CDROM_GET_CAPABILITY 0x5331 /* get capabilities */
/* Note that scsi/scsi_ioctl.h also uses 0x5382 - 0x5386. *FutureCDROMioctlsshouldbekeptbelow0x537F
*/
/* This ioctl is only used by sbpcd at the moment */ #define CDROMAUDIOBUFSIZ 0x5382 /* set the audio buffer size */ /* conflict with SCSI_IOCTL_GET_IDLUN */
#define CDROM_SEND_PACKET 0x5393 /* send a packet to the drive */ #define CDROM_NEXT_WRITABLE 0x5394 /* get next writable block */ #define CDROM_LAST_WRITTEN 0x5395 /* get last block written on disc */
#define CDROM_TIMED_MEDIA_CHANGE 0x5396 /* get the timestamp of the last media change */
/* Address in MSF format */ struct cdrom_msf0
{
__u8 minute;
__u8 second;
__u8 frame;
};
/* Address in either MSF or logical format */ union cdrom_addr
{ struct cdrom_msf0 msf; int lba;
};
/* This struct is used by the CDROMPLAYMSF ioctl */ struct cdrom_msf
{
__u8 cdmsf_min0; /* start minute */
__u8 cdmsf_sec0; /* start second */
__u8 cdmsf_frame0; /* start frame */
__u8 cdmsf_min1; /* end minute */
__u8 cdmsf_sec1; /* end second */
__u8 cdmsf_frame1; /* end frame */
};
/* This struct is used by the CDROMPLAYTRKIND ioctl */ struct cdrom_ti
{
__u8 cdti_trk0; /* start track */
__u8 cdti_ind0; /* start index */
__u8 cdti_trk1; /* end track */
__u8 cdti_ind1; /* end index */
};
/* This struct is used by the CDROMREADTOCHDR ioctl */ struct cdrom_tochdr
{
__u8 cdth_trk0; /* start track */
__u8 cdth_trk1; /* end track */
};
/* This struct is used by the CDROMVOLCTRL and CDROMVOLREAD ioctls */ struct cdrom_volctrl
{
__u8 channel0;
__u8 channel1;
__u8 channel2;
__u8 channel3;
};
/* This struct is used by the CDROMSUBCHNL ioctl */ struct cdrom_subchnl
{
__u8 cdsc_format;
__u8 cdsc_audiostatus;
__u8 cdsc_adr: 4;
__u8 cdsc_ctrl: 4;
__u8 cdsc_trk;
__u8 cdsc_ind; union cdrom_addr cdsc_absaddr; union cdrom_addr cdsc_reladdr;
};
/* This struct is used by the CDROMREADTOCENTRY ioctl */ struct cdrom_tocentry
{
__u8 cdte_track;
__u8 cdte_adr :4;
__u8 cdte_ctrl :4;
__u8 cdte_format; union cdrom_addr cdte_addr;
__u8 cdte_datamode;
};
/* This struct is used by the CDROMREADMODE1, and CDROMREADMODE2 ioctls */ struct cdrom_read
{ int cdread_lba; char *cdread_bufaddr; int cdread_buflen;
};
/* This struct is used by the CDROMREADAUDIO ioctl */ struct cdrom_read_audio
{ union cdrom_addr addr; /* frame address */
__u8 addr_format; /* CDROM_LBA or CDROM_MSF */ int nframes; /* number of 2352-byte-frames to read at once */
__u8 __user *buf; /* frame buffer (size: nframes*2352 bytes) */
};
/* This struct is used with the CDROMMULTISESSION ioctl */ struct cdrom_multisession
{ union cdrom_addr addr; /* frame address: start-of-last-session (notthenew"frame16"!).Onlyvalid
if the "xa_flag" is true. */
__u8 xa_flag; /* 1: "is XA disk" */
__u8 addr_format; /* CDROM_LBA or CDROM_MSF */
};
/* This struct is used with the CDROM_GET_MCN ioctl. *VeryfewaudiodiscsactuallyhaveUniversalProductCodeinformation, *whichshouldjustbetheMediumCatalogNumberonthebox.Alsonote *thatthewaythecodeiswrittenonCDis_not_uniformacrossalldiscs!
*/ struct cdrom_mcn
{
__u8 medium_catalog_number[14]; /* 13 ASCII digits, null-terminated */
};
/* This is used by the CDROMPLAYBLK ioctl */ struct cdrom_blk
{ unsigned from; unsignedshort len;
};
/* for CDROM_PACKET_COMMAND ioctl */ struct cdrom_generic_command
{ unsignedchar cmd[CDROM_PACKET_SIZE]; unsignedchar __user *buffer; unsignedint buflen; int stat; struct request_sense __user *sense; unsignedchar data_direction; int quiet; int timeout; union { void __user *reserved[1]; /* unused, actually */ void __user *unused;
};
};
/* This struct is used by CDROM_TIMED_MEDIA_CHANGE */ struct cdrom_timed_media_change_info {
__s64 last_media_change; /* Timestamp of the last detected media *changeinms.Maybesetbycaller, *updateduponsuccessfulreturnof *ioctl.
*/
__u64 media_flags; /* Flags returned by ioctl to indicate *mediastatus.
*/
}; #define MEDIA_CHANGED_FLAG 0x1 /* Last detected media change was more *recentthanlast_media_changesetby *caller.
*/ /* other bits of media_flags available for future use */
/* Some generally useful CD-ROM information -- mostly based on the above */ #define CD_MINS 74/* max. minutes per CD, not really a limit */ #define CD_SECS 60/* seconds per minute */ #define CD_FRAMES 75/* frames per second */ #define CD_SYNC_SIZE 12/* 12 sync bytes per raw data frame */ #define CD_MSF_OFFSET 150/* MSF numbering offset of first frame */ #define CD_CHUNK_SIZE 24/* lowest-level "data bytes piece" */ #define CD_NUM_OF_CHUNKS 98/* chunks per frame */ #define CD_FRAMESIZE_SUB 96/* subchannel data "frame" size */ #define CD_HEAD_SIZE 4/* header (address) bytes per raw data frame */ #define CD_SUBHEAD_SIZE 8/* subheader bytes per raw XA data frame */ #define CD_EDC_SIZE 4/* bytes EDC per most raw data frame types */ #define CD_ZERO_SIZE 8/* bytes zero per yellow book mode 1 frame */ #define CD_ECC_SIZE 276/* bytes ECC per most raw data frame types */ #define CD_FRAMESIZE 2048/* bytes per frame, "cooked" mode */ #define CD_FRAMESIZE_RAW 2352/* bytes per frame, "raw" mode */ #define CD_FRAMESIZE_RAWER 2646/* The maximum possible returned bytes */ /* most drives don't deliver everything: */ #define CD_FRAMESIZE_RAW1 (CD_FRAMESIZE_RAW-CD_SYNC_SIZE) /*2340*/ #define CD_FRAMESIZE_RAW0 (CD_FRAMESIZE_RAW-CD_SYNC_SIZE-CD_HEAD_SIZE) /*2336*/
#define CD_XA_HEAD (CD_HEAD_SIZE+CD_SUBHEAD_SIZE) /* "before data" part of raw XA frame */ #define CD_XA_TAIL (CD_EDC_SIZE+CD_ECC_SIZE) /* "after data" part of raw XA frame */ #define CD_XA_SYNC_HEAD (CD_SYNC_SIZE+CD_XA_HEAD) /* sync bytes + header of XA frame */
/* CD-ROM address types (cdrom_tocentry.cdte_format) */ #define CDROM_LBA 0x01 /* "logical block": first frame is #0 */ #define CDROM_MSF 0x02 /* "minute-second-frame": binary, not bcd here! */
/* bit to tell whether track is data or audio (cdrom_tocentry.cdte_ctrl) */ #define CDROM_DATA_TRACK 0x04
/* The leadout track is always 0xAA, regardless of # of tracks on disc */ #define CDROM_LEADOUT 0xAA
/* audio states (from SCSI-2, but seen with other drives, too) */ #define CDROM_AUDIO_INVALID 0x00 /* audio status not supported */ #define CDROM_AUDIO_PLAY 0x11 /* audio play operation in progress */ #define CDROM_AUDIO_PAUSED 0x12 /* audio play operation paused */ #define CDROM_AUDIO_COMPLETED 0x13 /* audio play successfully completed */ #define CDROM_AUDIO_ERROR 0x14 /* audio play stopped due to error */ #define CDROM_AUDIO_NO_STATUS 0x15 /* no current audio status to return */
/* capability flags used with the uniform CD-ROM driver */ #define CDC_CLOSE_TRAY 0x1 /* caddy systems _can't_ close */ #define CDC_OPEN_TRAY 0x2 /* but _can_ eject. */ #define CDC_LOCK 0x4 /* disable manual eject */ #define CDC_SELECT_SPEED 0x8 /* programmable speed */ #define CDC_SELECT_DISC 0x10 /* select disc from juke-box */ #define CDC_MULTI_SESSION 0x20 /* read sessions>1 */ #define CDC_MCN 0x40 /* Medium Catalog Number */ #define CDC_MEDIA_CHANGED 0x80 /* media changed */ #define CDC_PLAY_AUDIO 0x100 /* audio functions */ #define CDC_RESET 0x200 /* hard reset device */ #define CDC_DRIVE_STATUS 0x800 /* driver implements drive status */ #define CDC_GENERIC_PACKET 0x1000 /* driver implements generic packets */ #define CDC_CD_R 0x2000 /* drive is a CD-R */ #define CDC_CD_RW 0x4000 /* drive is a CD-RW */ #define CDC_DVD 0x8000 /* drive is a DVD */ #define CDC_DVD_R 0x10000 /* drive can write DVD-R */ #define CDC_DVD_RAM 0x20000 /* drive can write DVD-RAM */ #define CDC_MO_DRIVE 0x40000 /* drive is an MO device */ #define CDC_MRW 0x80000 /* drive can read MRW */ #define CDC_MRW_W 0x100000 /* drive can write MRW */ #define CDC_RAM 0x200000 /* ok to open for WRITE */
/* drive status possibilities returned by CDROM_DRIVE_STATUS ioctl */ #define CDS_NO_INFO 0/* if not implemented */ #define CDS_NO_DISC 1 #define CDS_TRAY_OPEN 2 #define CDS_DRIVE_NOT_READY 3 #define CDS_DISC_OK 4
/* return values for the CDROM_DISC_STATUS ioctl */ /* can also return CDS_NO_[INFO|DISC], from above */ #define CDS_AUDIO 100 #define CDS_DATA_1 101 #define CDS_DATA_2 102 #define CDS_XA_2_1 103 #define CDS_XA_2_2 104 #define CDS_MIXED 105
/* User-configurable behavior options for the uniform CD-ROM driver */ #define CDO_AUTO_CLOSE 0x1 /* close tray on first open() */ #define CDO_AUTO_EJECT 0x2 /* open tray on last release() */ #define CDO_USE_FFLAGS 0x4 /* use O_NONBLOCK information on open */ #define CDO_LOCK 0x8 /* lock tray on open files */ #define CDO_CHECK_TYPE 0x10 /* check type on open for data */
/* Special codes used when specifying changer slots. */ #define CDSL_NONE (INT_MAX-1) #define CDSL_CURRENT INT_MAX
/* For partition based multisession access. IDE can handle 64 partitions *perdrive-SCSICD-ROM'suseminorstodifferentiatebetweenthe *variousdrives,sowecan'tdomultisessionsthesamewaythere. *Usethe-osession=xoptiontomountonthem.
*/ #define CD_PART_MAX 64 #define CD_PART_MASK (CD_PART_MAX - 1)
/* State data */ typedef __u8 dvd_key[5]; /* 40-bit value, MSB is first elem. */ typedef __u8 dvd_challenge[10]; /* 80-bit value, MSB is first elem. */
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.17Bemerkung:
(vorverarbeitet am 2026-09-28)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.