summaryrefslogtreecommitdiff
path: root/usr/src/man/man4i/cdio.4i
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/man/man4i/cdio.4i')
-rw-r--r--usr/src/man/man4i/cdio.4i692
1 files changed, 692 insertions, 0 deletions
diff --git a/usr/src/man/man4i/cdio.4i b/usr/src/man/man4i/cdio.4i
new file mode 100644
index 0000000000..cf86e92801
--- /dev/null
+++ b/usr/src/man/man4i/cdio.4i
@@ -0,0 +1,692 @@
+.\" Copyright (c) 2001, Sun Microsystems, Inc. All Rights Reserved
+.\" Copryright 2017, Joyent, Inc.
+.\" The contents of this file are subject to the terms of the
+.\" Common Development and Distribution License (the "License").
+.\" You may not use this file except in compliance with the License.
+.\"
+.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+.\" or http://www.opensolaris.org/os/licensing.
+.\" See the License for the specific language governing permissions
+.\" and limitations under the License.
+.\"
+.\" When distributing Covered Code, include this CDDL HEADER in each
+.\" file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+.\" If applicable, add the following below this CDDL HEADER, with the
+.\" fields enclosed by brackets "[]" replaced with your own identifying
+.\" information: Portions Copyright [yyyy] [name of copyright owner]
+.Dd October 22, 2017
+.Dt CDIO 4I
+.Os
+.Sh NAME
+.Nm cdio
+.Nd CD-ROM control operations
+.Sh SYNOPSIS
+.In sys/cdio.h
+.Sh DESCRIPTION
+The set of
+.Xr ioctl 2
+commands described below are used to perform audio and
+.Sy CD-ROM
+specific operations.
+Basic to these
+.Sy cdio
+ioctl requests are the definitions in
+.In sys/cdio.h .
+.Pp
+Several
+.Sy CD-ROM
+specific commands can report addresses either in
+.Sy LBA
+(Logical Block Address) format or in
+.Sy MSF
+(Minute, Second, Frame) format.
+The
+.Sy READ HEADER ,
+.Sy BREAD SUBCHANNEL ,
+and
+.Sy BREAD TABLE OF CONTENTS
+commands have this feature.
+.Pp
+.Sy LBA
+format represents the logical block address for the
+.Sy CD-ROM
+absolute address field or for the offset from the beginning of the current
+track expressed as a number of logical blocks in a
+.Sy CD-ROM
+track relative address field.
+.Sy MSF
+format represents the physical address written on
+.Sy CD-ROM
+discs, expressed as a sector count relative to either the
+beginning of the medium or the beginning of the current track.
+.Sh IOCTLS
+The following
+.Sy I/O
+controls do not have any additional data passed into or received from them.
+.Bl -tag -width CDROMCLOSETRAY
+.It Dv CDROMSTART
+This
+.Xr ioctl 2
+spins up the disc and seeks to the last address requested.
+.It Dv CDROMSTOP
+This
+.Xr ioctl 2
+spins down the disc.
+.It Dv CDROMPAUSE
+This
+.Xr ioctl 2
+pauses the current audio play operation.
+.It Dv CDROMRESUME
+This
+.Xr ioctl 2
+resumes the paused audio play operation.
+.It Dv CDROMEJECT
+This
+.Xr ioctl 2
+ejects the caddy with the disc.
+.It Dv CDROMCLOSETRAY
+This
+.Xr ioctl 2
+closes the caddy with the disc.
+.El
+.Pp
+The following
+.Sy I/O
+controls require a pointer to the structure for that
+.Xr ioctl 2 ,
+with data being passed into the
+.Xr ioctl 2 .
+.Bl -tag -width CDROMPLAYTRKIND
+.It Dv CDROMPLAYMSF
+This
+.Xr ioctl 2
+command requests the drive to output the audio signals at
+the specified starting address and continue the audio play until the specified
+ending address is detected.
+The address is in
+.Sy MSF
+format.
+The third argument of this
+.Xr ioctl 2
+call is a pointer to the type
+.Vt "struct cdrom_msf" .
+.Bd -literal -offset 2n
+/*
+ * definition of play audio msf structure
+ */
+struct cdrom_msf {
+ /* starting minute */
+ unsigned char cdmsf_min0;
+ /* starting second */
+ unsigned char cdmsf_sec0;
+ /* starting frame */
+ unsigned char cdmsf_frame0;
+ /* ending minute */
+ unsigned char cdmsf_min1;
+ /* ending second */
+ unsigned char cdmsf_sec1;
+ /* ending frame */
+ unsigned char cdmsf_frame1;
+};
+.Ed
+.Pp
+The
+.Dv CDROMREADTOCENTRY
+ioctl request may be used to obtain the start time for a track.
+An approximation of the finish time can be obtained by using the
+.Dv CDROMREADTOCENTRY
+ioctl request to retrieve the start time of the track
+following the current track.
+.Pp
+The leadout track is the next consecutive track after the last audio track.
+Hence, the start time of the leadout track may be used as the effective finish
+time of the last audio track.
+.It Dv CDROMPLAYTRKIND
+This
+.Xr ioctl 2
+command is similar to
+.Dv CDROMPLAYMSF .
+The starting and ending address is in track/index format.
+The third argument of the
+.Xr ioctl 2
+call is a pointer to the type
+.Vt "struct cdrom_ti" .
+.Bd -literal -offset 2n
+/*
+ * definition of play audio track/index structure
+ */
+struct cdrom_ti {
+ /* starting track */
+ unsigned char cdti_trk0;
+ /* starting index */
+ unsigned char cdti_ind0;
+ /* ending track */
+ unsigned char cdti_trk1;
+ /* ending index */
+ unsigned char cdti_ind1;
+};
+.Ed
+.It Dv CDROMVOLCTRL
+This
+.Xr ioctl 2
+command controls the audio output level.
+The
+.Sy SCSI
+command allows the control of up to four channels.
+The current implementation of the supported
+.Sy CD-ROM
+drive only uses channel 0 and channel 1.
+The valid values of volume control are between 0x00 and 0xFF, with a value of
+0xFF indicating maximum volume.
+The third argument of the
+.Xr ioctl 2
+call is a pointer to
+.Vt "struct cdrom_volctrl"
+which contains the output volume values.
+.Bd -literal -offset 2n
+/*
+ * definition of audio volume control structure
+ */
+struct cdrom_volctrl {
+ unsigned char channel0;
+ unsigned char channel1;
+ unsigned char channel2;
+ unsigned char channel3;
+};
+.Ed
+.El
+.Pp
+The following
+.Sy I/O
+controls take a pointer that will have data returned to
+the user program from the
+.Sy CD-ROM
+driver.
+.Bl -tag -width CDROMREADOFFSET
+.It Dv CDROMREADTOCHDR
+This
+.Xr ioctl 2
+command returns the header of the table of contents (TOC).
+The header consists of the starting track number and the ending track number
+of the disc.
+These two numbers are returned through a pointer of
+.Vt "struct cdrom_tochdr" .
+While the disc can start at any number, all tracks between the
+first and last tracks are in contiguous ascending order.
+.Bd -literal -offset 2n
+/*
+ * definition of read toc header structure
+ */
+struct cdrom_tochdr {
+ unsigned char cdth_trk0; /* starting track */
+ unsigned char cdth_trk1; /* ending track */
+};
+.Ed
+.It Dv CDROMREADTOCENTRY
+This
+.Xr ioctl 2
+command returns the information of a specified track.
+The third argument of the function call is a pointer to the type
+.Vt "struct cdrom_tocentry" .
+The caller needs to supply the track number and the address format.
+This command will return a 4-bit
+.Sy adr
+field, a 4-bit
+.Sy ctrl
+field, the starting address in
+.Sy MSF
+format or
+.Sy LBA
+format, and the data mode if the track is a data track.
+The
+.Sy ctrl
+field specifies whether the track is data or audio.
+.Bd -literal -offset 2n
+/*
+ * definition of read toc entry structure
+ */
+struct cdrom_tocentry {
+ unsigned char cdte_track;
+ unsigned char cdte_adr :4;
+ unsigned char cdte_ctrl :4;
+ unsigned char cdte_format;
+ union {
+ struct {
+ unsigned char minute;
+ unsigned char second;
+ unsigned char frame;
+ } msf;
+ int lba;
+ } cdte_addr;
+ unsigned char cdte_datamode;
+};
+.Ed
+.Pp
+To get the information from the leadout track, the following value is
+appropriate for the
+.Fa cdte_track
+field:
+.\" These next few lists all use the same width so they align better
+.Bl -tag -offset indent -width CDROM_DATA_TRACK
+.It Dv CDROM_LEADOUT
+Leadout track
+.El
+.Pp
+To get the information from the data track, the following value is appropriate
+for the
+.Fa cdte_ctrl
+field:
+.Bl -tag -offset indent -width CDROM_DATA_TRACK
+.It Dv CDROM_DATA_TRACK
+Data track
+.El
+.Pp
+The following values are appropriate for the
+.Fa cdte_format
+field:
+.Bl -tag -offset indent -width CDROM_DATA_TRACK
+.It Dv CDROM_LBA
+.Sy LBA
+format
+.It Dv CDROM_MSF
+.Sy MSF
+format
+.El
+.It Dv CDROMSUBCHNL
+This
+.Xr ioctl 2
+command reads the Q sub-channel data of the current block.
+The subchannel data includes track number, index number, absolute
+.Sy CD-ROM
+address, track relative
+.Sy CD-ROM
+address, control data and audio status.
+All information is returned through a pointer to
+.Vt "struct cdrom_subchnl" .
+The caller needs to supply the address format for the returned address.
+.Bd -literal -offset 2n
+struct cdrom_subchnl {
+ unsigned char cdsc_format;
+ unsigned char cdsc_audiostatus;
+ unsigned char cdsc_adr :4;
+ unsigned char cdsc_ctrl :4;
+ unsigned char cdsc_trk;
+ unsigned char cdsc_ind;
+ union {
+ struct {
+ unsigned char minute;
+ unsigned char second;
+ unsigned char frame;
+ } msf;
+ int lba;
+ } cdsc_absaddr;
+ union {
+ struct {
+ unsigned char minute;
+ unsigned char second;
+ unsigned char frame;
+ } msf;
+ int lba;
+ } cdsc_reladdr;
+};
+.Ed
+.Pp
+The following values are valid for the audio status field returned from
+.Sy "READ SUBCHANNEL"
+command:
+.Bl -tag -width CDROM_AUDIO_NO_STATUS
+.It Dv CDROM_AUDIO_INVALID
+Audio status not supported.
+.It Dv CDROM_AUDIO_PLAY
+Audio play operation in progress.
+.It Dv CDROM_AUDIO_PAUSED
+Audio play operation paused.
+.It Dv CDROM_AUDIO_COMPLETED
+Audio play successfully completed.
+.It Dv CDROM_AUDIO_ERROR
+Audio play stopped due to error.
+.It Dv CDROM_AUDIO_NO_STATUS
+No current audio status to return.
+.El
+.It Dv CDROMREADOFFSET
+This
+.Xr ioctl 2
+command returns the absolute
+.Sy CD-ROM
+address of the first track in the last session of a Multi-Session
+.Sy CD-ROM .
+The third argument of the
+.Xr ioctl 2
+call is a pointer to an
+.Vt int .
+.It Dv CDROMCDDA
+This
+.Xr ioctl 2
+command returns the
+.Sy CD-DA
+data or the subcode data.
+The third argument of the
+.Xr ioctl 2
+call is a pointer to the type
+.Vt "struct cdrom_cdda" .
+In addition to allocating memory and supplying its address, the
+caller needs to supply the starting address of the data, the transfer length in
+terms of the number of blocks to be transferred, and the subcode options.
+The caller also needs to issue the
+.Dv CDROMREADTOCENTRY
+.Xr ioctl 2
+to find out which tracks contain
+.Sy CD-DA
+data before issuing this
+.Xr ioctl 2 .
+.Bd -literal -offset 2n
+/*
+ * Definition of CD-DA structure
+ */
+struct cdrom_cdda {
+ unsigned int cdda_addr;
+ unsigned int cdda_length;
+ caddr_t cdda_data;
+ unsigned char cdda_subcode;
+};
+.Ed
+.Pp
+.Sy cdda_addr
+signifies the starting logical block address.
+.Sy cdda_length
+signifies the transfer length in blocks.
+The length of the block depends on the
+.Sy cdda_subcode
+selection, which is explained below.
+To get the subcode information related to
+.Sy CD-DA
+data, the following values are appropriate for the
+.Sy cdda_subcode
+field:
+.Bl -tag -width CDROM_DA_SUBCODE_ONLY
+.It Sy CDROM_DA_NO_SUBCODE
+.Sy CD-DA
+data with no subcode.
+.It Sy CDROM_DA_SUBQ
+.Sy CD-DA
+data with sub Q code.
+.It Sy CDROM_DA_ALL_SUBCODE
+.Sy CD-DA
+data with all subcode.
+.It Sy CDROM_DA_SUBCODE_ONLY
+All subcode only.
+.El
+.Pp
+To allocate the memory related to
+.Sy CD-DA
+and/or subcode data, the
+following values are appropriate for each data block transferred:
+.Bl -tag -width "CD-DA data with all subcode"
+.It Sy CD-DA data with no subcode
+2352 bytes
+.It Sy CD-DA data with sub Q code
+2368 bytes
+.It Sy CD-DA data with all subcode
+2448 bytes
+.It Sy "All subcode only"
+96 bytes
+.El
+.It Dv CDROMCDXA
+This
+.Xr ioctl 2
+command returns the
+.Sy "CD-ROM XA"
+(CD-ROM Extended Architecture) data according to
+.Sy "CD-ROM XA"
+format.
+The third argument of the
+.Xr ioctl 2
+call is a pointer to the type
+.Vt "struct cdrom_cdxa" .
+In addition to allocating memory and supplying its address, the
+caller needs to supply the starting address of the data, the transfer length
+in terms of number of blocks, and the format.
+The caller also needs to issue
+the
+.Sy CDROMREADTOCENTRY
+.Xr ioctl 2
+to find out which tracks contain
+.Sy "CD-ROM XA"
+data before issuing this
+.Xr ioctl 2 .
+.Bd -literal -offset 2n
+/*
+ * Definition of CD-ROM XA structure
+ */
+struct cdrom_cdxa {
+ unsigned int cdxa_addr;
+ unsigned int cdxa_length;
+ caddr_t cdxa_data;
+ unsigned char cdxa_format;
+};
+.Ed
+.Pp
+To get the proper
+.Sy "CD-ROM XA"
+data, the following values are appropriate for the
+.Fa cdxa_format
+field:
+.Bl -tag -width CDROM_XA_DATA_W_ERROR
+.It Dv CDROM_XA_DATA
+.Sy "CD-ROM XA"
+data only
+.It Dv CDROM_XA_SECTOR_DATA
+.Sy "CD-ROM XA"
+all sector data
+.It Dv CDROM_XA_DATA_W_ERROR
+.Sy CD-ROM \fBXA\fR
+data with error flags data
+.El
+.Pp
+To allocate the memory related to
+.Sy "CD-ROM XA"
+format, the following values are appropriate for each data block transferred:
+.Bl -tag -width "CD-ROM XA data with error flags data"
+.It Sy "CD-ROM XA" data only
+2048 bytes
+.It Sy "CD-ROM XA" all sector data
+2352 bytes
+.It Sy "CD-ROM XA" data with error flags data
+2646 bytes
+.El
+.It Dv CDROMSUBCODE
+This
+.Xr ioctl 2
+command returns raw subcode data (subcodes P ~ W are
+described in the "Red Book," see
+.Sx SEE ALSO )
+to the initiator while the target is playing audio.
+The third argument of the
+.Xr ioctl 2
+call is a pointer to the type
+.Vt "struct cdrom_subcode" .
+The caller needs to supply the transfer length in terms of number of blocks and
+allocate memory for subcode data.
+The memory allocated should be a multiple of 96 bytes depending on the
+transfer length.
+.Bd -literal -offset 2n
+/*
+ * Definition of subcode structure
+ */
+struct cdrom_subcode {
+ unsigned int cdsc_length;
+ caddr_t cdsc_addr;
+};
+.Ed
+.El
+.Pp
+The next group of
+.Sy I/O
+controls get and set various
+.Sy CD-ROM
+drive parameters.
+.Bl -tag -width CDROMGDRVSPEED
+.It Dv CDROMGBLKMODE
+This
+.Xr ioctl 2
+command returns the current block size used by the
+.Sy CD-ROM
+drive.
+The third argument of the
+.Xr ioctl 2
+call is a pointer to an integer.
+.It Dv CDROMSBLKMODE
+This
+.Xr ioctl 2
+command requests the
+.Sy CD-ROM
+drive to change from the current block size to the requested block size.
+The third argument of the
+.Xr ioctl 2
+call is an integer which contains the requested block size.
+This
+.Xr ioctl 2
+command operates in exclusive-use mode only.
+The caller must ensure that no other processes can operate on the same
+.Sy CD-ROM
+device before issuing this
+.Xr ioctl 2 .
+.Xr read 2
+behavior subsequent to this
+.Xr ioctl 2
+remains the same: the caller is still constrained to read the raw
+device on block boundaries and in block multiples.
+To set the proper block size, the following values are appropriate:
+.Bl -tag -width CDROM_BLK_1024
+.It Dv CDROM_BLK_512
+512 bytes
+.It Dv CDROM_BLK_1024
+1024 bytes
+.It Dv CDROM_BLK_2048
+2048 bytes
+.It Dv CDROM_BLK_2056
+2056 bytes
+.It Dv CDROM_BLK_2336
+2336 bytes
+.It Dv CDROM_BLK_2340
+2340 bytes
+.It Dv CDROM_BLK_2352
+2352 bytes
+.It Dv CDROM_BLK_2368
+2368 bytes
+.It Dv CDROM_BLK_2448
+2448 bytes
+.It Dv CDROM_BLK_2646
+2646 bytes
+.It Dv CDROM_BLK_2647
+2647 bytes
+.El
+.It Dv CDROMGDRVSPEED
+This
+.Xr ioctl 2
+command returns the current
+.Sy CD-ROM
+drive speed.
+The third argument of the
+.Xr ioctl 2
+call is a pointer to an integer.
+.It Dv CDROMSDRVSPEED
+This
+.Xr ioctl 2
+command requests the
+.Sy CD-ROM
+drive to change the current drive speed to the requested drive speed.
+This speed setting is only applicable when reading data areas.
+The third argument of the
+.Xr ioctl 2
+is an integer which contains the requested drive speed.
+To set the
+.Sy CD-ROM
+drive to the proper speed, the following values are appropriate:
+.Bl -tag -width CDROM_MAXIMUM_SPEED
+.It Dv CDROM_NORMAL_SPEED
+150k/second
+.It Dv CDROM_DOUBLE_SPEED
+300k/second
+.It Dv CDROM_QUAD_SPEED
+600k/second
+.It Dv CDROM_MAXIMUM_SPEED
+300k/second (2x drive)
+.Pp
+600k/second (4x drive)
+.El
+.Pp
+Note that these numbers are only accurate when reading 2048 byte blocks.
+The
+.Sy CD-ROM
+drive will automatically switch to normal speed when playing audio
+tracks and will switch back to the speed setting when accessing data.
+.El
+.Sh ARCHITECTURE
+All
+.Sh INTERFACE STABILITY
+Uncommitted
+.Sh SEE ALSO
+.Xr ioctl 2 ,
+.Xr read 2 ,
+.Xr attributes 7
+.Rs
+.%Q N. V. Phillips
+.%Q Sony Corporation
+.%B System Description Compact Disc Digital Audio
+.%O ("Red Book")
+.Re
+.Rs
+.%Q N. V. Phillips
+.%Q Sony Corporation
+.%B System Description of Compact Disc Read Only Memory
+.%O ("Yellow Book")
+.Re
+.Rs
+.%Q N. V. Phillips
+.%Q Microsoft
+.%Q Sony Corporation
+.%B System Description CD-ROM XA
+.%D 1991
+.Re
+.Rs
+.%T Volume and File Structure of CD-ROM for Information Interchange
+.%N ISO 9660:1988(E)
+.Re
+.Rs
+.%T SCSI-2 Standard
+.%N document X3T9.2/86-109
+.Re
+.Rs
+.%T SCSI Multimedia Commands, Version 2 (MMC-2)
+.Re
+.Sh NOTES
+The
+.Dv CDROMCDDA ,
+.Dv CDROMCDXA ,
+.Dv CDROMSUBCODE ,
+.Dv CDROMGDRVSPEED ,
+.Dv CDROMSDRVSPEED ,
+and some of the block sizes in
+.Dv CDROMSBLKMODE
+are designed for new Sun-supported
+.Sy CD-ROM
+drives and might not work on some of the older
+.Sy CD-ROM
+drives.
+.Pp
+.Dv CDROMCDDA ,
+.Dv CDROMCDXA ,
+and
+.Dv CDROMSUBCODE
+will return error if the transfer length exceeds valid limits as determined appropriate.
+Example: for MMC-2 drives, length can not exceed 3 bytes (i\&.e\&. 0xffffff).
+The same restriction is enforced for older, pre-MMC-2 drives, as no limit was
+published for these older drives (and 3 bytes is reasonable for all media).
+Note that enforcing this limit does not imply that values passed in below this
+limit will actually be applicable for each and every piece of media.
+.Pp
+The interface to this device is preliminary and subject to change in future
+releases.
+Programs should be written in a modular fashion so that future
+changes can be easily incorporated.