Supports the Integrate Device Electronics (IDE) CD-ROM devices.
#include <sys/devinfo.h>
#include <sys/ide.h>
#include <sys/idecdrom.h>
Typical CD-ROM drive operations are implemented using the open, close, read, and ioctl subroutines.
open and close Subroutines
The openx subroutine is intended primarily for use by the utilities.
The ext parameter passed to the openx subroutine selects the operation to be used for the target device. The /usr/include/sys/idecdrom.h file defines possible values for the ext parameter.
The ext parameter can contain any combination of the following flag values logically ORed together:
Flag Value | Description |
---|---|
IDE_CACHE_DISABLE | Overrides the write_caching attribute in the Object Data Manager (ODM) and disables write caching in the drive. |
IDE_SINGLE | Places the selected device in the exclusive access mode. Only one process at a time can open a device in the exclusive access mode. |
SC_DIAGNOSTIC | Places the selected device in the diagnostic
mode. This mode is singularly entrant, that is, only one process at
a time can open it. If the bit is set, write caching is disabled irrespective
of the write_caching attribute read from ODM. Note: This flag
is defined in the sys/scsi.h file.
|
A device can be opened in exclusive access mode only if the device is not currently open. If an attempt is made to open a device in exclusive access mode and the device is already open, the subroutine returns a value of -1 and sets the errno global variable to a value of EBUSY.
IDECDROM user modifiable attributes
Attributes | Detail |
---|---|
max_transfer | Indicates the maximum size of transactions, in bytes, that the disk driver will issue to the adapter driver. The adapter driver has its own maximum transfer size that is independent of the disk driver setting. You can also configure the maximum transfer size of the adapter driver based on the adapter attribute that determines DMA resources allocated to it. If the max_transfer value of the disk driver is larger than the maximum transfer size of the adapter driver, the maximum transfer size of the adapter takes precedence. The default value is 256KB(0x40000). |
prevent_eject | Indicates if a drive's media is locked in the drive while the device is open. When this attribute is set to the Yes value, ejection of the media is prevented if the device is open, that is, a file system from the media is mounted. If the device is not open, then media ejection is permitted. This feature is primarily for eliminating the potential of data corruption that can occur if writable media is interchanged while the system is writing to the media. If writable media is used in the drive, you must set this attribute to Yes. When you set this attribute to No, the media can be removed even if the system is in the process of writing to the media. The default value is Yes. |
write_caching | Enables or disables write caching feature. During
write operations, the drive can use the write cache to store data
that is to be written to the medium at a later time. This is called
write caching. Setting this attribute to yes enables
write caching and setting it to no disables write
caching. The default value is no. Enabling the write
cache improves overall data throughput as it reduces the access time
to a disc's logical block during write operations. Note: Enabling
write cache can lead to deferred errors or optical media becoming
out of sync with the operating system or an application. If power
loses, system crashes, or drive errors occur, while you are performing
an action on this drive, then you must repeat the action.
|
ioctl Subroutine
ioctl subroutine operations that are used for the idecdrom device driver are:
Operation | Description |
---|---|
IOCINFO | Returns the devinfo structure defined in the /usr/include/sys/devinfo.h file. The IOCINFO operation is the only operation defined for all device drivers that use the ioctl subroutine. The remaining operations discussed in this article are all specific to CD-ROM devices. |
IDE_CDIORDSE | Provides a means for issuing a read command to the device and obtaining the target-device sense data when an error occurs. If the IDE_CDIORDSE operation returns a value of -1 and the status_validity field has the ATA_ERROR bit set, valid sense data is returned. Otherwise, target sense data is omitted. |
The IDE_CDIORDSE operation is provided for diagnostic use. It allows the limited use of the target device while operating in an active system environment. The arg parameter to the IDE_CDIOROSE operation contains the address of an sc_rdwrt structure. This structure is defined in the /usr/include/sys/scsi.h file.
The devinfo structure defines the maximum transfer size for a read operation. If an attempt is made to transfer more than the maximum, the subroutine returns a value of -1 and sets the errno global variable to a value of EINVAL. Refer to the ATA Packet Interface for CD-ROMS Specification for the format of the request-sense data for a particular device.
Operation | Description |
---|---|
IDE_CDPMR | Issues an IDE prevent media removal command when the device has been successfully opened. This command prevents media from being ejected until the device is closed, powered off and then back on, or until a IDE_CDAMR operation is issued. The arg parameter for the IDE_CDPMR operation is null. If the IDE_CDPMR operation is successful, the subroutine returns a value of 0. If the IDE_CDPMR operation fails for any reason, the subroutine returns a value of -1 and sets the errno global variable to a value of EIO. |
IDE_CDAMR | Issues an allow media removal command when the device has been successfully opened. As a result media can be ejected using either the drive's eject button or the IDE_CDEJECT operation. The arg parameter for this ioctl is null. If the IDE_CDAMR operation is successful, the subroutine returns a value of 0. For any failure of this operation, the subroutine returns a value of -1 and sets the errno global variable to a value of EIO. |
IDE_CDEJECT | Issues an eject media command to the drive when the device has been successfully opened. The arg parameter for this operation is null. If the IDE_CDEJECT operation is successful, the subroutine returns a value of 0. For any failure of this operation, the subroutine returns a value of -1 and sets the errno variable to a value of EIO. |
IDE_CDAUDIO | Issues play-audio commands to the specified device and controls
the volume on the device's output ports. Play audio commands include:
play audio MSF (play audio track index is not supported), pause, resume,
stop, determine the number of tracks, and determine the status of
a current audio operation. The IDE_CDAUDIO operation plays
audio only through the CD-ROM drive's output ports. The arg parameter
of this operation is the address of a cd_audio_cmd structure,
which is defined in the /usr/include/sys/scdisk.h file. Exclusive
access mode is required. If IDE_CDAUDIO operation is attempted when the device's audio-supported attribute is set to no, the subroutine returns a value of -1 and sets the errno global variable to a value of EINVAL. If the IDE_CDAUDIO operation fails, the subroutine returns a value of -1 and sets the errno global variable to a nonzero value. In this case, the caller should evaluate the returned status bytes to determine why the operation failed and what recovery actions should be taken. |
IDE_CDMODE | Determines or changes the CD-ROM data mode for the specified
device. The CD-ROM data mode specifies what block size and special
file are used for data read across the IDE bus from the device.The IDE_CDMODE operation
supports the following CD-ROM data modes:
The IDE_CDMODE arg parameter contains the address of the mode_form_op structure defined in the /usr/include/sys/scdisk.h file. To have the IDE_CDMODE operation determine or change the CD-ROM data mode, set the action field of the change_mode_form structure to one of the following values:
|
If a CD-ROM has not been configured for different data modes, and an attempt is made to change the CD-ROM data mode (by setting the action field of the change_mode_form structure set to CD_CHG_MODE), the subroutine returns a value of -1 and sets the errno global variable to a value of EINVAL.
If the IDE_CDMODE operation for CD_CHG_MODE is attempted when the device is not in exclusive access mode, the subroutine returns a value of -1 and sets the errno global variable to a value of EACCES. For any other failure of this operation, the subroutine returns a value of -1 and sets the errno global variable to a value of EIO.
Operation | Description |
---|---|
IDEPASSTHRU | Issues any ATAPI command to the specified device when the device is successfully opened. The IDEPASSTHRU operation does not require an openx command with the ext parameter value set to SC_DIAGNOSTIC. Because of this, an IDEPASSTHRU operation can be issued to devices that are in use by other operations. |
The ATA status bytes and the ATA error bytes are returned through the arg parameter, which contains the address of an ide_atapi_passthru structure (defined in the /usr/include/sys/ide.h file). If the IDEPASSTHRU operation fails, the subroutine returns a value of -1 and sets the errno global variable to a nonzero value. If this happens, the caller evaluates the returned status bytes to determine why the operation was unsuccessful and what recovery actions should be taken.
The device driver will perform limited error recovery if the IDEPASSTHRU operation fails. If this operation fails because a field in the ide_atapi_passthru structure has an invalid value, the subroutine will return a value of -1 and set the errno global variable to EINVAL. The rsv0 field of the ide_atapi_passthru structure is used as the version field. The rsv0 field of the ide_atapi_passthru structure can be set to the value of IDE_PASSTHRU_VERSION01, and you can provide the following fields:
Field | Description |
---|---|
sense_data_length | Determines the length (in bytes) of the sense data buffer provided by the user. |
ense_data | Pointer to buffer where sense data will be transferred. Sense data will only be transferred when a check condition occurs and valid sense data is obtained from the device. |
Refer to the Small Computer System Interface (SCSI) for the format of the request-sense data for a particular device.
IDE CD-ROM drives have the following hardware requirements:
Possible errno values for ioctl, open, read, and write subroutines when using the idecdrom device driver include:
Value | Description |
---|---|
EACCES | Indicates one of the following circumstances:
|
EBUSY | An attempt was made to open a session in exclusive access mode on a device already opened. |
EFAULT | Indicates an illegal user address. |
EFORMAT | Indicates the target device has unformatted media or media in an incompatible format. |
EINPROGRESS | Indicates a CD-ROM drive has a play-audio operation in progress. |
EINVAL | Indicates one of the following circumstances:
|
EIO | Indicates one of the following circumstances:
|
EMEDIA | Indicates one of the following circumstances:
|
EMFILE | Indicates an open operation was attempted for an adapter that already has the maximum permissible number of opened devices. |
ENODEV | Indicates one of the following circumstances:
|
ENOTREADY | Indicates no media is in the drive. |
ENXIO | Indicates one of the following circumstances:
|
EPERM | Indicates the attempted subroutine requires appropriate authority. |
ESTALE | Indicates a read-only disk was ejected (without first being closed by the user) and then either reinserted or replaced with a second disk. |
ETIMEDOUT | Indicates an I/O operation has exceeded the given timer value. |
EWRPROTECT | Indicates one of the following circumstances:
|
IDE CD-ROM drives return the following errors:
Error | Description |
---|---|
ABORTED COMMAND | Indicates the device ended the command. |
GOOD COMPLETION | Indicates the command completed successfully. |
HARDWARE ERROR | Indicates an unrecoverable hardware failure occurred during command execution or during a self-test. |
ILLEGAL REQUEST | Indicates an illegal command or command parameter. |
MEDIUM ERROR | Indicates the command ended with an unrecovered media error condition. |
NOT READY | Indicates the logical unit is offline or media is missing. |
RECOVERED ERROR | Indicates the command was successful after some recovery was applied. |
UNIT ATTENTION | Indicates the device has been reset or the power has been turned on. |
Error Record Values for Media Errors
The fields defined in the error record template for CD-ROM media errors are:
Field | Description |
---|---|
Comment | Indicates CD-ROM read media error. |
Class | Equals a value of H, which indicates a hardware error. |
Report | Equals a value of True, which indicates this error should be included when an error report is generated. |
Log | Equals a value of True, which indicates an error log entry should be created when this error occurs. |
Alert | Equals a value of False, which indicates this error is not alertable. |
Err_Type | Equals a value of Perm, which indicates a permanent failure. |
Err_Desc | Equals a value of 1312, which indicates a disk operation failure. |
Prob_Causes | Equals a value of 5000, which indicates media. |
User_Causes | Equals a value of 5100, which indicates the media is defective. |
User_Actions | Equals the following values:
|
Fail_Causes | Equals the following values:
|
Fail_Actions | Equals the following values:
|
Detail_Data | Equals a value of 156, 11, HEX. This value indicates hexadecimal format. |
The idecdrom_error_rec structure contains the following fields:
Field | Description |
---|---|
req_sense_data | Contains the request-sense information from the particular device that had the error, if it is valid. |
reserved2 | Contains the segment count, which is the number of megabytes read from the device at the time the error occurred. |
reserved3 | Contains the number of bytes read since the segment count was last increased. |
Refer to the ATA Packet Interface for CD-ROMs Specification for the format of the request-sense data for a particular device.
Error Record Values for Hardware Errors
The fields defined in the error record template for CD-ROM hardware errors, as well as hard-aborted command errors are:
Field | Description |
---|---|
Comment | Indicates CD-ROM hardware error. |
Class | Equals a value of H, which indicates a hardware error. |
Report | Equals a value of True, which indicates this error should be included when an error report is generated. |
Log | Equals a value of True, which indicates an error log entry should be created when this error occurs. |
Alert | Equal to a value of FALSE, which indicates this error is not alertable. |
Err_Type | Equals a value of Perm, which indicates a permanent failure. |
Err_Desc | Equals a value of 1312, which indicates a disk operation failure. |
Prob_Causes | Equals a value of 6310, which indicates disk drive. |
Fail_Causes | Equals the following values:
|
Fail_Actions | Equals a value of 0000, which indicates problem-determination procedures should be performed. |
Detail_Data | Equals a value of 156, 11, HEX. This value indicates hexadecimal format. |
The idecdrom_error_rec structure contains the following fields:
Field | Description |
---|---|
req_sense_data | Contains the request-sense information from the particular device that had the error, if it is valid. |
reserved2 | Contains the segment count, which is the number of megabytes read from the device at the time the error occurred. |
reserved3 | Contains the number of bytes read since the segment count was last increased. |
Refer to the ATA Packet Interface for CD-ROMs Specification for the format of the request-sense data for a particular device.
Error Record Values for Recovered Errors
The fields defined in the error record template for CD-ROM media errors recovered errors are:
Field | Description |
---|---|
Comment | Indicates CD-ROM recovered error. |
Class | Equals a value of H, which indicates a hardware error. |
Report | Equals a value of True, which indicates this error should be included when an error report is generated. |
Log | Equals a value of True, which indicates an error log entry should be created when this error occurs. |
Alert | Equal to a value of FALSE, which indicates this error is not alertable. |
Err_Type | Equals a value of Temp, which indicates a temporary failure. |
Err_Desc | Equals a value of 1312, which indicates a physical volume operation failure. |
Prob_Causes | Equals the following values:
|
User_Causes | Equals a value of 5100, which indicates media is defective. |
User_Actions | Equals the following values:
|
Fail_Causes | Equals the following values:
|
Fail_Actions | Equals the following values:
|
Detail_Data | Equals a value of 156, 11, HEX. This value indicates hexadecimal format. |
The idecdrom_error_rec structure contains the following fields:
Field | Description |
---|---|
req_sense_data | Contains the request-sense information from the particular device that had the error, if it is valid. |
reserved2 | Contains the segment count, which is the number of megabytes read from the device at the time the error occurred. |
reserved3 | Contains the number of bytes read since the segment count was last increased. |
Refer to the ATA Packet Interface for CD-ROMs Specification for the format of the request-sense data for a particular device.
Error Record Values for Unknown Errors
The fields defined in the error record template for CD-ROM media errors unknown errors are:
Field | Description |
---|---|
Comment | Indicates CD-ROM unknown failure. |
Class | Equals a value of H, which indicates a hardware error. |
Report | Equals a value of True, which indicates this error should be included when an error report is generated. |
Log | Equals a value of True, which indicates an error log entry should be created when this error occurs. |
Alert | Equal to a value of FALSE, which indicates this error is not alertable. |
Err_Type | Equals a value of Unkn, which indicates the type of error is unknown. |
Err_Desc | Equals a value of FE00, which indicates an undetermined error. |
Prob_Causes | Equals the following values:
|
Fail_Causes | Equals a value of FFFF, which indicates the failure causes are unknown. |
Fail_Actions | Equals the following values:
|
Detail_Data | Equals a value of 156, 11, HEX. This value indicates hexadecimal format. |
The idecdrom_error_rec structure contains the following fields:
Field | Description |
---|---|
req_sense_data | Contains the request-sense information from the particular device that had the error, if it is valid. |
reserved2 | Contains the segment count, which is the number of megabytes read from the device at the time the error occurred. |
reserved3 | Contains the number of bytes read since the segment count was last increased. |
Refer to the ATA Packet Interface for CD-ROMs Specification for the format of the request-sense data for a particular device.
The idecdrom IDE device driver uses raw and block special files in performing its functions.
Attention: Data corruption, loss of data, or loss of system integrity (system crash) will occur if devices supporting paging, logical volumes, or mounted file systems are accessed using block special files. Block special files are provided for logical volumes and disk devices and are solely for system use in managing file systems, paging devices, and logical volumes. These files should not be used for other purposes.
The special files used by the idecdrom, device driver include the following:
File | Description |
---|---|
/dev/rcd0, /dev/rcd1,..., /dev/rcdn | Provide an interface to allow IDE device drivers character access (raw I/O access and control functions) to IDE CD-ROM disks. |
/dev/cd0, /dev/cd1,..., /dev/cdn | Provide an interface to allow IDE device drivers block I/O access to IDE CD-ROM disks. |
The prefix r on a special file name indicates the drive is accessed as a raw device rather than a block device. Performing raw I/O with a CD-ROM drive requires that all data transfers be in multiples of the device block size. Also, all lseek subroutines that are made to the raw device driver must result in a file pointer value that is a multiple of the device block size.