mmc.h File Reference

Common definitions for MMC (Multimedia Commands). Applications include this for direct MMC access. More...

#include <cdio/cdio.h>
#include <cdio/types.h>
#include <cdio/dvd.h>
#include <cdio/audio.h>

Go to the source code of this file.

Data Structures

struct  mmc_audio_volume_entry_s
struct  mmc_audio_volume_s
struct  mmc_cdb_s
 A Command Descriptor Block (CDB) used in sending MMC commands. More...
struct  mmc_feature_list_header_s
 Format of header block in data returned from an MMC GET_CONFIGURATION command. More...
struct  mmc_subchannel_s

Defines

#define MMC_TIMEOUT_DEFAULT   6000
#define MMC_READ_TIMEOUT_DEFAULT   3*60*1000
#define MAX_CDB_LEN   12
#define CDIO_MMC_SET_COMMAND(cdb, command)   cdb[0] = command
#define CDIO_MMC_SET_READ_TYPE(cdb, sector_type)   cdb[1] = (sector_type << 2)
#define CDIO_MMC_GETPOS_LEN16(p, pos)   (p[pos]<<8) + p[pos+1]
#define CDIO_MMC_GET_LEN16(p)   (p[0]<<8) + p[1]
#define CDIO_MMC_GET_LEN32(p)   (p[0] << 24) + (p[1] << 16) + (p[2] << 8) + p[3];
#define CDIO_MMC_SET_LEN16(cdb, pos, len)
#define CDIO_MMC_SET_READ_LBA(cdb, lba)
#define CDIO_MMC_SET_START_TRACK(cdb, command)   cdb[6] = command
#define CDIO_MMC_SET_READ_LENGTH24(cdb, len)
#define CDIO_MMC_SET_READ_LENGTH16(cdb, len)   CDIO_MMC_SET_LEN16(cdb, 7, len)
#define CDIO_MMC_SET_READ_LENGTH8(cdb, len)   cdb[8] = (len ) & 0xff
#define CDIO_MMC_MCSB_ALL_HEADERS   0xf
#define CDIO_MMC_SET_MAIN_CHANNEL_SELECTION_BITS(cdb, val)   cdb[9] = val << 3;

Typedefs

typedef struct
mmc_audio_volume_entry_s 
mmc_audio_volume_entry_t
typedef struct mmc_audio_volume_s mmc_audio_volume_t
typedef struct mmc_cdb_s mmc_cdb_t
 A Command Descriptor Block (CDB) used in sending MMC commands.
typedef struct
mmc_feature_list_header_s 
cdio_mmc_feature_list_header_t
 Format of header block in data returned from an MMC GET_CONFIGURATION command.
typedef enum mmc_direction_s cdio_mmc_direction_t
typedef struct mmc_subchannel_s cdio_mmc_subchannel_t

Enumerations

enum  cdio_mmc_gpcmd_t {
  CDIO_MMC_GPCMD_INQUIRY = 0x12, CDIO_MMC_GPCMD_MODE_SELECT_6 = 0x15, CDIO_MMC_GPCMD_MODE_SENSE_6 = 0x1a, CDIO_MMC_GPCMD_START_STOP = 0x1b,
  CDIO_MMC_GPCMD_ALLOW_MEDIUM_REMOVAL = 0x1e, CDIO_MMC_GPCMD_READ_10 = 0x28, CDIO_MMC_GPCMD_READ_SUBCHANNEL = 0x42, CDIO_MMC_GPCMD_READ_TOC = 0x43,
  CDIO_MMC_GPCMD_READ_HEADER = 0x44, CDIO_MMC_GPCMD_PLAY_AUDIO_10 = 0x45, CDIO_MMC_GPCMD_GET_CONFIGURATION = 0x46, CDIO_MMC_GPCMD_PLAY_AUDIO_MSF = 0x47,
  CDIO_MMC_GPCMD_PLAY_AUDIO_TI = 0x48, CDIO_MMC_GPCMD_PLAY_TRACK_REL_10 = 0x49, CDIO_MMC_GPCMD_GET_EVENT_STATUS = 0x4a, CDIO_MMC_GPCMD_PAUSE_RESUME = 0x4b,
  CDIO_MMC_GPCMD_READ_DISC_INFO = 0x51, CDIO_MMC_GPCMD_MODE_SELECT_10 = 0x55, CDIO_MMC_GPCMD_MODE_SENSE_10 = 0x5a, CDIO_MMC_GPCMD_PLAY_AUDIO_12 = 0xa5,
  CDIO_MMC_GPCMD_LOAD_UNLOAD = 0xa6, CDIO_MMC_GPCMD_READ_12 = 0xa8, CDIO_MMC_GPCMD_PLAY_TRACK_REL_12 = 0xa9, CDIO_MMC_GPCMD_READ_DVD_STRUCTURE = 0xad,
  CDIO_MMC_GPCMD_READ_MSF = 0xb9, CDIO_MMC_GPCMD_SET_SPEED = 0xbb, CDIO_MMC_GPCMD_READ_CD = 0xbe, CDIO_MMC_GPCMD_CD_PLAYBACK_STATUS = 0xc4,
  CDIO_MMC_GPCMD_PLAYBACK_CONTROL = 0xc9, CDIO_MMC_GPCMD_READ_CDDA = 0xd8, CDIO_MMC_GPCMD_READ_CDXA = 0xdb, CDIO_MMC_GPCMD_READ_ALL_SUBCODES = 0xdf
}
 The opcode-portion (generic packet commands) of an MMC command. More...
enum  cdio_mmc_read_sub_state_t {
  CDIO_MMC_READ_SUB_ST_INVALID = 0x00, CDIO_MMC_READ_SUB_ST_PLAY = 0x11, CDIO_MMC_READ_SUB_ST_PAUSED = 0x12, CDIO_MMC_READ_SUB_ST_COMPLETED = 0x13,
  CDIO_MMC_READ_SUB_ST_ERROR = 0x14, CDIO_MMC_READ_SUB_ST_NO_STATUS = 0x15
}
enum  cdio_mmc_read_cd_type_t {
  CDIO_MMC_READ_TYPE_ANY = 0, CDIO_MMC_READ_TYPE_CDDA = 1, CDIO_MMC_READ_TYPE_MODE1 = 2, CDIO_MMC_READ_TYPE_MODE2 = 3,
  CDIO_MMC_READ_TYPE_M2F1 = 4, CDIO_MMC_READ_TYPE_M2F2 = 5
}
enum  cdio_mmc_readtoc_t {
  CDIO_MMC_READTOC_FMT_TOC = 0, CDIO_MMC_READTOC_FMT_SESSION = 1, CDIO_MMC_READTOC_FMT_FULTOC = 2, CDIO_MMC_READTOC_FMT_PMA = 3,
  CDIO_MMC_READTOC_FMT_ATIP = 4, CDIO_MMC_READTOC_FMT_CDTEXT = 5
}
enum  cdio_mmc_mode_page_t {
  CDIO_MMC_R_W_ERROR_PAGE = 0x01, CDIO_MMC_WRITE_PARMS_PAGE = 0x05, CDIO_MMC_CDR_PARMS_PAGE = 0x0d, CDIO_MMC_AUDIO_CTL_PAGE = 0x0e,
  CDIO_MMC_POWER_PAGE = 0x1a, CDIO_MMC_FAULT_FAIL_PAGE = 0x1c, CDIO_MMC_TO_PROTECT_PAGE = 0x1d, CDIO_MMC_CAPABILITIES_PAGE = 0x2a,
  CDIO_MMC_ALL_PAGES = 0x3f
}
enum  cdio_mmc_get_conf_t { CDIO_MMC_GET_CONF_ALL_FEATURES = 0, CDIO_MMC_GET_CONF_CURRENT_FEATURES = 1, CDIO_MMC_GET_CONF_NAMED_FEATURE = 2 }
enum  cdio_mmc_feature_t {
  CDIO_MMC_FEATURE_PROFILE_LIST = 0x000, CDIO_MMC_FEATURE_CORE = 0x001, CDIO_MMC_FEATURE_MORPHING = 0x002, CDIO_MMC_FEATURE_REMOVABLE_MEDIUM = 0x003,
  CDIO_MMC_FEATURE_WRITE_PROTECT = 0x004, CDIO_MMC_FEATURE_RANDOM_READABLE = 0x010, CDIO_MMC_FEATURE_MULTI_READ = 0x01D, CDIO_MMC_FEATURE_CD_READ = 0x01E,
  CDIO_MMC_FEATURE_DVD_READ = 0x01F, CDIO_MMC_FEATURE_RANDOM_WRITABLE = 0x020, CDIO_MMC_FEATURE_INCR_WRITE = 0x021, CDIO_MMC_FEATURE_SECTOR_ERASE = 0x022,
  CDIO_MMC_FEATURE_FORMATABLE = 0x023, CDIO_MMC_FEATURE_DEFECT_MGMT = 0x024, CDIO_MMC_FEATURE_WRITE_ONCE = 0x025, CDIO_MMC_FEATURE_RESTRICT_OVERW = 0x026,
  CDIO_MMC_FEATURE_CD_RW_CAV = 0x027, CDIO_MMC_FEATURE_MRW = 0x028, CDIO_MMC_FEATURE_ENHANCED_DEFECT = 0x029, CDIO_MMC_FEATURE_DVD_PRW = 0x02A,
  CDIO_MMC_FEATURE_DVD_PR = 0x02B, CDIO_MMC_FEATURE_RIGID_RES_OVERW = 0x02C, CDIO_MMC_FEATURE_CD_TAO = 0x02D, CDIO_MMC_FEATURE_CD_SAO = 0x02E,
  CDIO_MMC_FEATURE_DVD_R_RW_WRITE = 0x02F, CDIO_MMC_FEATURE_CD_RW_MEDIA_WRITE = 0x037, CDIO_MMC_FEATURE_DVD_PR_2_LAYER = 0x03B, CDIO_MMC_FEATURE_POWER_MGMT = 0x100,
  CDIO_MMC_FEATURE_CDDA_EXT_PLAY = 0x103, CDIO_MMC_FEATURE_MCODE_UPGRADE = 0x104, CDIO_MMC_FEATURE_TIME_OUT = 0x105, CDIO_MMC_FEATURE_DVD_CSS = 0x106,
  CDIO_MMC_FEATURE_RT_STREAMING = 0x107, CDIO_MMC_FEATURE_LU_SN = 0x108, CDIO_MMC_FEATURE_FIRMWARE_DATE = 0x1FF
}
enum  cdio_mmc_feature_profile_t {
  CDIO_MMC_FEATURE_PROF_NON_REMOVABLE = 0x0001, CDIO_MMC_FEATURE_PROF_REMOVABLE = 0x0002, CDIO_MMC_FEATURE_PROF_MO_ERASABLE = 0x0003, CDIO_MMC_FEATURE_PROF_MO_WRITE_ONCE = 0x0004,
  CDIO_MMC_FEATURE_PROF_AS_MO = 0x0005, CDIO_MMC_FEATURE_PROF_CD_ROM = 0x0008, CDIO_MMC_FEATURE_PROF_CD_R = 0x0009, CDIO_MMC_FEATURE_PROF_CD_RW = 0x000A,
  CDIO_MMC_FEATURE_PROF_DVD_ROM = 0x0010, CDIO_MMC_FEATURE_PROF_DVD_R_SEQ = 0x0011, CDIO_MMC_FEATURE_PROF_DVD_RAM = 0x0012, CDIO_MMC_FEATURE_PROF_DVD_RW_RO = 0x0013,
  CDIO_MMC_FEATURE_PROF_DVD_RW_SEQ = 0x0014, CDIO_MMC_FEATURE_PROF_DVD_PRW = 0x001A, CDIO_MMC_FEATURE_PROF_DVD_PR = 0x001B, CDIO_MMC_FEATURE_PROF_DDCD_ROM = 0x0020,
  CDIO_MMC_FEATURE_PROF_DDCD_R = 0x0021, CDIO_MMC_FEATURE_PROF_DDCD_RW = 0x0022, CDIO_MMC_FEATURE_PROF_DVD_PR2 = 0x002B, CDIO_MMC_FEATURE_PROF_NON_CONFORM = 0xFFFF
}
enum  cdio_mmc_feature_interface_t {
  CDIO_MMC_FEATURE_INTERFACE_UNSPECIFIED = 0, CDIO_MMC_FEATURE_INTERFACE_SCSI = 1, CDIO_MMC_FEATURE_INTERFACE_ATAPI = 2, CDIO_MMC_FEATURE_INTERFACE_IEEE_1394 = 3,
  CDIO_MMC_FEATURE_INTERFACE_IEEE_1394A = 4, CDIO_MMC_FEATURE_INTERFACE_FIBRE_CH = 5
}
enum  mmc_direction_s { SCSI_MMC_DATA_READ, SCSI_MMC_DATA_WRITE }
enum  cdio_mmc_level_t {
  CDIO_MMC_LEVEL_WEIRD, CDIO_MMC_LEVEL_1, CDIO_MMC_LEVEL_2, CDIO_MMC_LEVEL_3,
  CDIO_MMC_LEVEL_NONE
}

Functions

driver_return_code_t mmc_audio_read_subchannel (CdIo_t *p_cdio, cdio_subchannel_t *p_subchannel)
const char * mmc_audio_state2str (uint8_t i_audio_state)
driver_return_code_t mmc_eject_media (const CdIo_t *p_cdio)
const char * mmc_feature2str (int i_feature)
const char * mmc_feature_profile2str (int i_feature_profile)
uint8_t mmc_get_cmd_len (uint8_t mmc_cmd)
int mmc_get_blocksize (CdIo_t *p_cdio)
driver_return_code_t mmc_close_tray (CdIo_t *p_cdio)
lsn_t mmc_get_disc_last_lsn (const CdIo_t *p_cdio)
discmode_t mmc_get_discmode (const CdIo_t *p_cdio)
void mmc_get_drive_cap (CdIo_t *p_cdio, cdio_drive_read_cap_t *p_read_cap, cdio_drive_write_cap_t *p_write_cap, cdio_drive_misc_cap_t *p_misc_cap)
cdio_mmc_level_t mmc_get_drive_mmc_cap (CdIo_t *p_cdio)
discmode_t mmc_get_dvd_struct_physical (const CdIo_t *p_cdio, cdio_dvd_struct_t *s)
int mmc_get_event_status (const CdIo_t *p_cdio, uint8_t out_buf[2])
int mmc_get_tray_status (const CdIo_t *p_cdio)
bool mmc_get_hwinfo (const CdIo_t *p_cdio, cdio_hwinfo_t *p_hw_info)
int mmc_get_media_changed (const CdIo_t *p_cdio)
char * mmc_get_mcn (const CdIo_t *p_cdio)
driver_return_code_t mmc_audio_get_volume (CdIo_t *p_cdio, mmc_audio_volume_t *p_volume)
bool_3way_t mmc_have_interface (CdIo_t *p_cdio, cdio_mmc_feature_interface_t e_interface)
int mmc_mode_sense (CdIo_t *p_cdio, void *p_buf, int i_size, int page)
int mmc_mode_sense_10 (CdIo_t *p_cdio, void *p_buf, int i_size, int page)
int mmc_mode_sense_6 (CdIo_t *p_cdio, void *p_buf, int i_size, int page)
driver_return_code_t mmc_read_cd (const CdIo_t *p_cdio, void *p_buf, lsn_t i_lsn, int expected_sector_type, bool b_digital_audio_play, bool b_sync, uint8_t header_codes, bool b_user_data, bool b_edc_ecc, uint8_t c2_error_information, uint8_t subchannel_selection, uint16_t i_blocksize, uint32_t i_blocks)
driver_return_code_t mmc_read_data_sectors (CdIo_t *p_cdio, void *p_buf, lsn_t i_lsn, uint16_t i_blocksize, uint32_t i_blocks)
driver_return_code_t mmc_read_sectors (const CdIo_t *p_cdio, void *p_buf, lsn_t i_lsn, int read_sector_type, uint32_t i_blocks)
int mmc_run_cmd (const CdIo_t *p_cdio, unsigned int i_timeout_ms, const mmc_cdb_t *p_cdb, cdio_mmc_direction_t e_direction, unsigned int i_buf, void *p_buf)
int mmc_run_cmd_len (const CdIo_t *p_cdio, unsigned int i_timeout_ms, const mmc_cdb_t *p_cdb, unsigned int i_cdb, cdio_mmc_direction_t e_direction, unsigned int i_buf, void *p_buf)
driver_return_code_t mmc_set_blocksize (const CdIo_t *p_cdio, uint16_t i_blocksize)
driver_return_code_t mmc_set_drive_speed (const CdIo_t *p_cdio, int i_drive_speed)
driver_return_code_t mmc_set_speed (const CdIo_t *p_cdio, int i_Kbs_speed)
driver_return_code_t mmc_start_stop_media (const CdIo_t *p_cdio, bool b_eject, bool b_immediate, uint8_t power_condition)

Variables

uint32_t mmc_timeout_ms
uint32_t mmc_read_timeout_ms
PRAGMA_BEGIN_PACKED struct
mmc_audio_volume_entry_s 
GNUC_PACKED
cdio_mmc_feature_t debug_cdio_mmc_feature
cdio_mmc_feature_interface_t debug_cdio_mmc_feature_interface
cdio_mmc_feature_profile_t debug_cdio_mmc_feature_profile
cdio_mmc_get_conf_t debug_cdio_mmc_get_conf
cdio_mmc_gpcmd_t debug_cdio_mmc_gpcmd
cdio_mmc_read_sub_state_t debug_cdio_mmc_read_sub_state
cdio_mmc_read_cd_type_t debug_cdio_mmc_read_cd_type
cdio_mmc_readtoc_t debug_cdio_mmc_readtoc
cdio_mmc_mode_page_t debug_cdio_mmc_mode_page


Detailed Description

Common definitions for MMC (Multimedia Commands). Applications include this for direct MMC access.


Define Documentation

#define CDIO_MMC_GET_LEN16 (  )     (p[0]<<8) + p[1]

#define CDIO_MMC_GET_LEN32 (  )     (p[0] << 24) + (p[1] << 16) + (p[2] << 8) + p[3];

#define CDIO_MMC_GETPOS_LEN16 ( p,
pos   )     (p[pos]<<8) + p[pos+1]

#define CDIO_MMC_MCSB_ALL_HEADERS   0xf

#define CDIO_MMC_SET_COMMAND ( cdb,
command   )     cdb[0] = command

#define CDIO_MMC_SET_LEN16 ( cdb,
pos,
len   ) 

Value:

cdb[pos  ] = (len >>  8) & 0xff;              \
  cdb[pos+1] = (len      ) & 0xff

#define CDIO_MMC_SET_MAIN_CHANNEL_SELECTION_BITS ( cdb,
val   )     cdb[9] = val << 3;

#define CDIO_MMC_SET_READ_LBA ( cdb,
lba   ) 

Value:

cdb[2] = (lba >> 24) & 0xff; \
  cdb[3] = (lba >> 16) & 0xff; \
  cdb[4] = (lba >>  8) & 0xff; \
  cdb[5] = (lba      ) & 0xff

#define CDIO_MMC_SET_READ_LENGTH16 ( cdb,
len   )     CDIO_MMC_SET_LEN16(cdb, 7, len)

#define CDIO_MMC_SET_READ_LENGTH24 ( cdb,
len   ) 

Value:

cdb[6] = (len >> 16) & 0xff; \
  cdb[7] = (len >>  8) & 0xff; \
  cdb[8] = (len      ) & 0xff

#define CDIO_MMC_SET_READ_LENGTH8 ( cdb,
len   )     cdb[8] = (len ) & 0xff

#define CDIO_MMC_SET_READ_TYPE ( cdb,
sector_type   )     cdb[1] = (sector_type << 2)

#define CDIO_MMC_SET_START_TRACK ( cdb,
command   )     cdb[6] = command

#define MAX_CDB_LEN   12

The largest Command Descriptor Block (CDB) size. The possible sizes are 6, 10, and 12 bytes.

#define MMC_READ_TIMEOUT_DEFAULT   3*60*1000

The default read timeout is 3 minutes.

#define MMC_TIMEOUT_DEFAULT   6000

The default timeout (non-read) is 6 seconds.


Typedef Documentation

An enumeration indicating whether an MMC command is sending data or getting data.

Format of header block in data returned from an MMC GET_CONFIGURATION command.

typedef struct mmc_cdb_s mmc_cdb_t

A Command Descriptor Block (CDB) used in sending MMC commands.


Enumeration Type Documentation

Enumerator:
CDIO_MMC_FEATURE_INTERFACE_UNSPECIFIED 
CDIO_MMC_FEATURE_INTERFACE_SCSI 
CDIO_MMC_FEATURE_INTERFACE_ATAPI 
CDIO_MMC_FEATURE_INTERFACE_IEEE_1394 
CDIO_MMC_FEATURE_INTERFACE_IEEE_1394A 
CDIO_MMC_FEATURE_INTERFACE_FIBRE_CH 

Profile profile codes used in GET_CONFIGURATION - PROFILE LIST.

Enumerator:
CDIO_MMC_FEATURE_PROF_NON_REMOVABLE  Re-writable disk, capable of changing behavior
CDIO_MMC_FEATURE_PROF_REMOVABLE  disk Re-writable; with removable media
CDIO_MMC_FEATURE_PROF_MO_ERASABLE  Erasable Magneto-Optical disk with sector erase capability
CDIO_MMC_FEATURE_PROF_MO_WRITE_ONCE  Write Once Magneto-Optical write once
CDIO_MMC_FEATURE_PROF_AS_MO  Advance Storage Magneto-Optical
CDIO_MMC_FEATURE_PROF_CD_ROM  Read only Compact Disc capable
CDIO_MMC_FEATURE_PROF_CD_R  Write once Compact Disc capable
CDIO_MMC_FEATURE_PROF_CD_RW  CD-RW Re-writable Compact Disc capable
CDIO_MMC_FEATURE_PROF_DVD_ROM  Read only DVD
CDIO_MMC_FEATURE_PROF_DVD_R_SEQ  Re-recordable DVD using Sequential recording
CDIO_MMC_FEATURE_PROF_DVD_RAM  Re-writable DVD
CDIO_MMC_FEATURE_PROF_DVD_RW_RO  Re-recordable DVD using Restricted Overwrite
CDIO_MMC_FEATURE_PROF_DVD_RW_SEQ  Re-recordable DVD using Sequential recording
CDIO_MMC_FEATURE_PROF_DVD_PRW  DVD+RW - DVD ReWritable
CDIO_MMC_FEATURE_PROF_DVD_PR  DVD+R - DVD Recordable
CDIO_MMC_FEATURE_PROF_DDCD_ROM  Read only DDCD
CDIO_MMC_FEATURE_PROF_DDCD_R  DDCD-R Write only DDCD
CDIO_MMC_FEATURE_PROF_DDCD_RW  Re-Write only DDCD
CDIO_MMC_FEATURE_PROF_DVD_PR2  DVD+R - DVD Recordable double layer
CDIO_MMC_FEATURE_PROF_NON_CONFORM  The Logical Unit does not conform to any Profile.

FEATURE codes used in GET CONFIGURATION.

Enumerator:
CDIO_MMC_FEATURE_PROFILE_LIST  Profile List Feature
CDIO_MMC_FEATURE_CORE 
CDIO_MMC_FEATURE_MORPHING  Report/prevent operational changes
CDIO_MMC_FEATURE_REMOVABLE_MEDIUM  Removable Medium Feature
CDIO_MMC_FEATURE_WRITE_PROTECT  Write Protect Feature
CDIO_MMC_FEATURE_RANDOM_READABLE  Random Readable Feature
CDIO_MMC_FEATURE_MULTI_READ  Multi-Read Feature
CDIO_MMC_FEATURE_CD_READ  CD Read Feature
CDIO_MMC_FEATURE_DVD_READ  DVD Read Feature
CDIO_MMC_FEATURE_RANDOM_WRITABLE  Random Writable Feature
CDIO_MMC_FEATURE_INCR_WRITE  Incremental Streaming Writable Feature
CDIO_MMC_FEATURE_SECTOR_ERASE  Sector Erasable Feature
CDIO_MMC_FEATURE_FORMATABLE  Formattable Feature
CDIO_MMC_FEATURE_DEFECT_MGMT  Management Ability of the Logical Unit/media system to provide an apparently defect-free space.
CDIO_MMC_FEATURE_WRITE_ONCE  Write Once Feature
CDIO_MMC_FEATURE_RESTRICT_OVERW  Restricted Overwrite Feature
CDIO_MMC_FEATURE_CD_RW_CAV  CD-RW CAV Write Feature
CDIO_MMC_FEATURE_MRW  MRW Feature
CDIO_MMC_FEATURE_ENHANCED_DEFECT  Enhanced Defect Reporting
CDIO_MMC_FEATURE_DVD_PRW  DVD+RW Feature
CDIO_MMC_FEATURE_DVD_PR  DVD+R Feature
CDIO_MMC_FEATURE_RIGID_RES_OVERW  Rigid Restricted Overwrite
CDIO_MMC_FEATURE_CD_TAO  CD Track at Once
CDIO_MMC_FEATURE_CD_SAO  CD Mastering (Session at Once)
CDIO_MMC_FEATURE_DVD_R_RW_WRITE  DVD-R/RW Write
CDIO_MMC_FEATURE_CD_RW_MEDIA_WRITE  CD-RW Media Write Support
CDIO_MMC_FEATURE_DVD_PR_2_LAYER  DVD+R Double Layer
CDIO_MMC_FEATURE_POWER_MGMT  Initiator and device directed power management
CDIO_MMC_FEATURE_CDDA_EXT_PLAY  Ability to play audio CDs via the Logical Unit's own analog output
CDIO_MMC_FEATURE_MCODE_UPGRADE 
CDIO_MMC_FEATURE_TIME_OUT  Ability to respond to all commands within a specific time
CDIO_MMC_FEATURE_DVD_CSS  Ability to perform DVD CSS/CPPM authentication and RPC
CDIO_MMC_FEATURE_RT_STREAMING  Ability to read and write using Initiator requested performance parameters
CDIO_MMC_FEATURE_LU_SN  The Logical Unit has a unique identifier.
CDIO_MMC_FEATURE_FIRMWARE_DATE  Firmware creation date report

Return type codes for GET_CONFIGURATION.

Enumerator:
CDIO_MMC_GET_CONF_ALL_FEATURES  all features without regard to currency.
CDIO_MMC_GET_CONF_CURRENT_FEATURES  features which are currently in effect (e.g. based on medium inserted).
CDIO_MMC_GET_CONF_NAMED_FEATURE  just the feature named in the GET_CONFIGURATION cdb.

The opcode-portion (generic packet commands) of an MMC command.

In general, those opcodes that end in 6 take a 6-byte command descriptor, those that end in 10 take a 10-byte descriptor and those that in in 12 take a 12-byte descriptor.

(Not that you need to know that, but it seems to be a big deal in the MMC specification.)

Enumerator:
CDIO_MMC_GPCMD_INQUIRY  Request drive information.
CDIO_MMC_GPCMD_MODE_SELECT_6  Select medium (6 bytes).
CDIO_MMC_GPCMD_MODE_SENSE_6  Get medium or device information. Should be issued before MODE SELECT to get mode support or save current settings. (6 bytes).
CDIO_MMC_GPCMD_START_STOP  Enable/disable Disc operations. (6 bytes).
CDIO_MMC_GPCMD_ALLOW_MEDIUM_REMOVAL  Enable/disable Disc removal. (6 bytes).
CDIO_MMC_GPCMD_READ_10  Group 2 Commands (CDB's here are 10-bytes) Read data from drive (10 bytes).
CDIO_MMC_GPCMD_READ_SUBCHANNEL  Read Sub-Channel data. (10 bytes).
CDIO_MMC_GPCMD_READ_TOC  READ TOC/PMA/ATIP. (10 bytes).
CDIO_MMC_GPCMD_READ_HEADER 
CDIO_MMC_GPCMD_PLAY_AUDIO_10  Begin audio playing at current position (10 bytes).
CDIO_MMC_GPCMD_GET_CONFIGURATION  Get drive Capabilities (10 bytes)
CDIO_MMC_GPCMD_PLAY_AUDIO_MSF  Begin audio playing at specified MSF (10 bytes).
CDIO_MMC_GPCMD_PLAY_AUDIO_TI 
CDIO_MMC_GPCMD_PLAY_TRACK_REL_10  Play audio at the track relative LBA. (10 bytes). Doesn't seem to be part of MMC standards but is handled by Plextor drives.
CDIO_MMC_GPCMD_GET_EVENT_STATUS  Report events and Status.
CDIO_MMC_GPCMD_PAUSE_RESUME  Stop or restart audio playback. (10 bytes). Used with a PLAY command.
CDIO_MMC_GPCMD_READ_DISC_INFO  Get CD information. (10 bytes).
CDIO_MMC_GPCMD_MODE_SELECT_10  Select medium (10-bytes).
CDIO_MMC_GPCMD_MODE_SENSE_10  Get medium or device information. Should be issued before MODE SELECT to get mode support or save current settings. (6 bytes).
CDIO_MMC_GPCMD_PLAY_AUDIO_12  Group 5 Commands (CDB's here are 12-bytes) Begin audio playing at current position (12 bytes)
CDIO_MMC_GPCMD_LOAD_UNLOAD  Load/unload a Disc (12 bytes)
CDIO_MMC_GPCMD_READ_12  Read data from drive (12 bytes).
CDIO_MMC_GPCMD_PLAY_TRACK_REL_12  Play audio at the track relative LBA. (12 bytes). Doesn't seem to be part of MMC standards but is handled by Plextor drives.
CDIO_MMC_GPCMD_READ_DVD_STRUCTURE  Get DVD structure info from media (12 bytes).
CDIO_MMC_GPCMD_READ_MSF  Read almost any field of a CD sector at specified MSF. (12 bytes).
CDIO_MMC_GPCMD_SET_SPEED  Set drive speed (12 bytes). This is listed as optional in ATAPI 2.6, but is (curiously) missing from Mt. Fuji, Table 57. It is mentioned in Mt. Fuji Table 377 as an MMC command for SCSI devices though... Most ATAPI drives support it.
CDIO_MMC_GPCMD_READ_CD  Read almost any field of a CD sector at current location. (12 bytes).
CDIO_MMC_GPCMD_CD_PLAYBACK_STATUS  Vendor-unique Commands SONY unique = command
CDIO_MMC_GPCMD_PLAYBACK_CONTROL  SONY unique = command
CDIO_MMC_GPCMD_READ_CDDA  Vendor unique = command
CDIO_MMC_GPCMD_READ_CDXA  Vendor unique = command
CDIO_MMC_GPCMD_READ_ALL_SUBCODES  Vendor unique = command

Enumerator:
CDIO_MMC_LEVEL_WEIRD 
CDIO_MMC_LEVEL_1 
CDIO_MMC_LEVEL_2 
CDIO_MMC_LEVEL_3 
CDIO_MMC_LEVEL_NONE 

Page codes for MODE SENSE and MODE SET.

Enumerator:
CDIO_MMC_R_W_ERROR_PAGE 
CDIO_MMC_WRITE_PARMS_PAGE 
CDIO_MMC_CDR_PARMS_PAGE 
CDIO_MMC_AUDIO_CTL_PAGE 
CDIO_MMC_POWER_PAGE 
CDIO_MMC_FAULT_FAIL_PAGE 
CDIO_MMC_TO_PROTECT_PAGE 
CDIO_MMC_CAPABILITIES_PAGE 
CDIO_MMC_ALL_PAGES 

Level values that can go into READ_CD

Enumerator:
CDIO_MMC_READ_TYPE_ANY  All types
CDIO_MMC_READ_TYPE_CDDA  Only CD-DA sectors
CDIO_MMC_READ_TYPE_MODE1  mode1 sectors (user data = 2048)
CDIO_MMC_READ_TYPE_MODE2  mode2 sectors form1 or form2
CDIO_MMC_READ_TYPE_M2F1  mode2 sectors form1
CDIO_MMC_READ_TYPE_M2F2  mode2 sectors form2

Read Subchannel states

Enumerator:
CDIO_MMC_READ_SUB_ST_INVALID  audio status not supported
CDIO_MMC_READ_SUB_ST_PLAY  audio play operation in progress
CDIO_MMC_READ_SUB_ST_PAUSED  audio play operation paused
CDIO_MMC_READ_SUB_ST_COMPLETED  audio play successfully completed
CDIO_MMC_READ_SUB_ST_ERROR  audio play stopped due to error
CDIO_MMC_READ_SUB_ST_NO_STATUS  no current audio status to return

Format values for READ_TOC

Enumerator:
CDIO_MMC_READTOC_FMT_TOC 
CDIO_MMC_READTOC_FMT_SESSION 
CDIO_MMC_READTOC_FMT_FULTOC 
CDIO_MMC_READTOC_FMT_PMA  Q subcode data
CDIO_MMC_READTOC_FMT_ATIP  includes media type
CDIO_MMC_READTOC_FMT_CDTEXT  CD-TEXT info

An enumeration indicating whether an MMC command is sending data or getting data.

Enumerator:
SCSI_MMC_DATA_READ 
SCSI_MMC_DATA_WRITE 


Function Documentation

driver_return_code_t mmc_audio_get_volume ( CdIo_t p_cdio,
mmc_audio_volume_t p_volume 
)

Get the output port volumes and port selections used on AUDIO PLAY commands via a MMC MODE SENSE command using the CD Audio Control Page.

driver_return_code_t mmc_audio_read_subchannel ( CdIo_t p_cdio,
cdio_subchannel_t p_subchannel 
)

Read Audio Subchannel information

Parameters:
p_cdio the CD object to be acted upon.
p_subchannel place for returned subchannel information

const char* mmc_audio_state2str ( uint8_t  i_audio_state  ) 

Return a string containing the name of the audio state as returned from the Q_SUBCHANNEL.

driver_return_code_t mmc_close_tray ( CdIo_t p_cdio  ) 

Close tray using a MMC START STOP command.

driver_return_code_t mmc_eject_media ( const CdIo_t p_cdio  ) 

Eject using MMC commands. If CD-ROM is "locked" we'll unlock it. Command is not "immediate" -- we'll wait for the command to complete. For a more general (and lower-level) routine,

See also:
mmc_start_stop_media.

const char* mmc_feature2str ( int  i_feature  ) 

Return a string containing the name of the given feature

const char* mmc_feature_profile2str ( int  i_feature_profile  ) 

Return a string containing the name of the given feature

int mmc_get_blocksize ( CdIo_t p_cdio  ) 

Get the block size used in read requests, via MMC.

Returns:
the blocksize if > 0; error if <= 0

uint8_t mmc_get_cmd_len ( uint8_t  mmc_cmd  ) 

Return the length in bytes of the Command Descriptor Buffer (CDB) for a given MMC command. The length will be either 6, 10, or 12.

lsn_t mmc_get_disc_last_lsn ( const CdIo_t p_cdio  ) 

Get the lsn of the end of the CD

Returns:
the lsn. On error return CDIO_INVALID_LSN.

discmode_t mmc_get_discmode ( const CdIo_t p_cdio  ) 

Return the discmode as reported by the MMC Read (FULL) TOC command.

Information was obtained from Section 5.1.13 (Read TOC/PMA/ATIP) pages 56-62 from the MMC draft specification, revision 10a at http://www.t10.org/ftp/t10/drafts/mmc/mmc-r10a.pdf See especially tables 72, 73 and 75.

void mmc_get_drive_cap ( CdIo_t p_cdio,
cdio_drive_read_cap_t p_read_cap,
cdio_drive_write_cap_t p_write_cap,
cdio_drive_misc_cap_t p_misc_cap 
)

Get drive capabilities for a device.

Returns:
the drive capabilities.

cdio_mmc_level_t mmc_get_drive_mmc_cap ( CdIo_t p_cdio  ) 

Get the MMC level supported by the device.

discmode_t mmc_get_dvd_struct_physical ( const CdIo_t p_cdio,
cdio_dvd_struct_t s 
)

Get the DVD type associated with cd object.

Returns:
the DVD discmode.

int mmc_get_event_status ( const CdIo_t p_cdio,
uint8_t  out_buf[2] 
)

Return results of media status

Parameters:
p_cdio the CD object to be acted upon.
out_buf media status code from operation
Returns:
DRIVER_OP_SUCCESS (0) if we got the status. return codes are the same as driver_return_code_t

bool mmc_get_hwinfo ( const CdIo_t p_cdio,
cdio_hwinfo_t p_hw_info 
)

Get the CD-ROM hardware info via an MMC INQUIRY command.

Returns:
true if we were able to get hardware info, false if we had an error.

char* mmc_get_mcn ( const CdIo_t p_cdio  ) 

Get the media catalog number (MCN) from the CD via MMC.

Returns:
the media catalog number r NULL if there is none or we don't have the ability to get it.
Note: string is malloc'd so caller has to free() the returned string when done with it.

int mmc_get_media_changed ( const CdIo_t p_cdio  ) 

Find out if media has changed since the last call.

Parameters:
p_cdio the CD object to be acted upon.
Returns:
1 if media has changed since last call, 0 if not. Error return codes are the same as driver_return_code_t

int mmc_get_tray_status ( const CdIo_t p_cdio  ) 

Find out if media tray is open or closed.

Parameters:
p_cdio the CD object to be acted upon.
Returns:
1 if media is open, 0 if closed. Error return codes are the same as driver_return_code_t

bool_3way_t mmc_have_interface ( CdIo_t p_cdio,
cdio_mmc_feature_interface_t  e_interface 
)

Report if CD-ROM has a praticular kind of interface (ATAPI, SCSCI, ...) Is it possible for an interface to have serveral? If not this routine could probably return the single mmc_feature_interface_t.

Returns:
true if we have the interface and false if not.

int mmc_mode_sense ( CdIo_t p_cdio,
void *  p_buf,
int  i_size,
int  page 
)

Run a MODE_SENSE command (6- or 10-byte version) and put the results in p_buf

Returns:
DRIVER_OP_SUCCESS if we ran the command ok.

int mmc_mode_sense_10 ( CdIo_t p_cdio,
void *  p_buf,
int  i_size,
int  page 
)

Run a MODE_SENSE command (10-byte version) and put the results in p_buf

Returns:
DRIVER_OP_SUCCESS if we ran the command ok.

int mmc_mode_sense_6 ( CdIo_t p_cdio,
void *  p_buf,
int  i_size,
int  page 
)

Run a MODE_SENSE command (6-byte version) and put the results in p_buf

Returns:
DRIVER_OP_SUCCESS if we ran the command ok.

driver_return_code_t mmc_read_cd ( const CdIo_t p_cdio,
void *  p_buf,
lsn_t  i_lsn,
int  expected_sector_type,
bool  b_digital_audio_play,
bool  b_sync,
uint8_t  header_codes,
bool  b_user_data,
bool  b_edc_ecc,
uint8_t  c2_error_information,
uint8_t  subchannel_selection,
uint16_t  i_blocksize,
uint32_t  i_blocks 
)

Issue a MMC READ_CD command.

Parameters:
p_cdio object to read from
p_buf Place to store data. The caller should ensure that p_buf can hold at least i_blocksize * i_blocks bytes.
i_lsn sector to read
expected_sector_type restricts reading to a specific CD sector type. Only 3 bits with values 1-5 are used: 0 all sector types 1 CD-DA sectors only 2 Mode 1 sectors only 3 Mode 2 formless sectors only. Note in contrast to all other values an MMC CD-ROM is not required to support this mode. 4 Mode 2 Form 1 sectors only 5 Mode 2 Form 2 sectors only
b_digital_audio_play Control error concealment when the data being read is CD-DA. If the data being read is not CD-DA, this parameter is ignored. If the data being read is CD-DA and DAP is false zero, then the user data returned should not be modified by flaw obscuring mechanisms such as audio data mute and interpolate. If the data being read is CD-DA and DAP is true, then the user data returned should be modified by flaw obscuring mechanisms such as audio data mute and interpolate.
b_sync_header return the sync header (which will probably have the same value as CDIO_SECTOR_SYNC_HEADER of size CDIO_CD_SYNC_SIZE).

Parameters:
header_codes Header Codes refer to the sector header and the sub-header that is present in mode 2 formed sectors:
0 No header information is returned. 1 The 4-byte sector header of data sectors is be returned, 2 The 8-byte sector sub-header of mode 2 formed sectors is returned. 3 Both sector header and sub-header (12 bytes) is returned. The Header preceeds the rest of the bytes (e.g. user-data bytes) that might get returned.

Parameters:
b_user_data Return user data if true.
For CD-DA, the User Data is CDIO_CD_FRAMESIZE_RAW bytes.

For Mode 1, The User Data is ISO_BLOCKSIZE bytes beginning at offset CDIO_CD_HEADER_SIZE+CDIO_CD_SUBHEADER_SIZE.

For Mode 2 formless, The User Data is M2RAW_SECTOR_SIZE bytes beginning at offset CDIO_CD_HEADER_SIZE+CDIO_CD_SUBHEADER_SIZE.

For data Mode 2, form 1, User Data is ISO_BLOCKSIZE bytes beginning at offset CDIO_CD_XA_SYNC_HEADER.

For data Mode 2, form 2, User Data is 2 324 bytes beginning at offset CDIO_CD_XA_SYNC_HEADER.

Parameters:
b_sync 
b_edc_ecc true if we return EDC/ECC error detection/correction bits.
The presence and size of EDC redundancy or ECC parity is defined according to sector type:

CD-DA sectors have neither EDC redundancy nor ECC parity.

Data Mode 1 sectors have 288 bytes of EDC redundancy, Pad, and ECC parity beginning at offset 2064.

Data Mode 2 formless sectors have neither EDC redundancy nor ECC parity

Data Mode 2 form 1 sectors have 280 bytes of EDC redundancy and ECC parity beginning at offset 2072

Data Mode 2 form 2 sectors optionally have 4 bytes of EDC redundancy beginning at offset 2348.

Parameters:
c2_error_information If true associate a bit with each sector for C2 error The resulting bit field is ordered exactly as the main channel bytes. Each 8-bit boundary defines a byte of flag bits.
subchannel_selection subchannel-selection bits
0 No Sub-channel data shall be returned. (0 bytes) 1 RAW P-W Sub-channel data shall be returned. (96 byte) 2 Formatted Q sub-channel data shall be transferred (16 bytes) 3 Reserved 4 Corrected and de-interleaved R-W sub-channel (96 bytes) 5-7 Reserved

Parameters:
i_blocksize size of the a block expected to be returned
i_blocks number of blocks expected to be returned.

driver_return_code_t mmc_read_data_sectors ( CdIo_t p_cdio,
void *  p_buf,
lsn_t  i_lsn,
uint16_t  i_blocksize,
uint32_t  i_blocks 
)

Read just the user data part of some sort of data sector (via mmc_read_cd).

Parameters:
p_cdio object to read from
p_buf place to read data into. The caller should make sure this location can store at least CDIO_CD_FRAMESIZE, M2RAW_SECTOR_SIZE, or M2F2_SECTOR_SIZE depending on the kind of sector getting read. If you don't know whether you have a Mode 1/2, Form 1/ Form 2/Formless sector best to reserve space for the maximum, M2RAW_SECTOR_SIZE.
i_lsn sector to read
i_blocksize size of each block
i_blocks number of blocks to read

driver_return_code_t mmc_read_sectors ( const CdIo_t p_cdio,
void *  p_buf,
lsn_t  i_lsn,
int  read_sector_type,
uint32_t  i_blocks 
)

Read sectors using SCSI-MMC GPCMD_READ_CD. Can read only up to 25 blocks.

int mmc_run_cmd ( const CdIo_t p_cdio,
unsigned int  i_timeout_ms,
const mmc_cdb_t p_cdb,
cdio_mmc_direction_t  e_direction,
unsigned int  i_buf,
void *  p_buf 
)

Run a Multimedia command (MMC).

Parameters:
p_cdio CD structure set by cdio_open().
i_timeout_ms time in milliseconds we will wait for the command to complete.
p_cdb CDB bytes. All values that are needed should be set on input. We'll figure out what the right CDB length should be.
e_direction direction the transfer is to go.
i_buf Size of buffer
p_buf Buffer for data, both sending and receiving.
Returns:
0 if command completed successfully.

int mmc_run_cmd_len ( const CdIo_t p_cdio,
unsigned int  i_timeout_ms,
const mmc_cdb_t p_cdb,
unsigned int  i_cdb,
cdio_mmc_direction_t  e_direction,
unsigned int  i_buf,
void *  p_buf 
)

Run a Multimedia command (MMC) specifying the CDB length. The motivation here is for example ot use in is an undocumented debug command for LG drives (namely E7), whose length is being miscalculated by mmc_get_cmd_len(); it doesn't follow the usual code number to length conventions. Patch supplied by SukkoPera.

Parameters:
p_cdio CD structure set by cdio_open().
i_timeout_ms time in milliseconds we will wait for the command to complete.
p_cdb CDB bytes. All values that are needed should be set on input.
i_cdb number of CDB bytes.
e_direction direction the transfer is to go.
i_buf Size of buffer
p_buf Buffer for data, both sending and receiving.
Returns:
0 if command completed successfully.

driver_return_code_t mmc_set_blocksize ( const CdIo_t p_cdio,
uint16_t  i_blocksize 
)

Set the block size for subsequest read requests, via MMC.

driver_return_code_t mmc_set_drive_speed ( const CdIo_t p_cdio,
int  i_drive_speed 
)

Set the drive speed in CD-ROM speed units.

Parameters:
p_cdio CD structure set by cdio_open().
i_drive_speed speed in CD-ROM speed units. Note this not Kbs as would be used in the MMC spec or in mmc_set_speed(). To convert CD-ROM speed units to Kbs, multiply the number by 176 (for raw data) and by 150 (for filesystem data). On many CD-ROM drives, specifying a value too large will result in using the fastest speed.
Returns:
the drive speed if greater than 0. -1 if we had an error. is -2 returned if this is not implemented for the current driver.
See also:
cdio_set_speed and mmc_set_speed

driver_return_code_t mmc_set_speed ( const CdIo_t p_cdio,
int  i_Kbs_speed 
)

Set the drive speed in K bytes per second.

Parameters:
p_cdio CD structure set by cdio_open().
i_Kbs_speed speed in K bytes per second. Note this is not in standard CD-ROM speed units, e.g. 1x, 4x, 16x as it is in cdio_set_speed. To convert CD-ROM speed units to Kbs, multiply the number by 176 (for raw data) and by 150 (for filesystem data). Also note that ATAPI specs say that a value less than 176 will result in an error. On many CD-ROM drives, specifying a value too large will result in using the fastest speed.
Returns:
the drive speed if greater than 0. -1 if we had an error. is -2 returned if this is not implemented for the current driver.
See also:
cdio_set_speed and mmc_set_drive_speed

driver_return_code_t mmc_start_stop_media ( const CdIo_t p_cdio,
bool  b_eject,
bool  b_immediate,
uint8_t  power_condition 
)

Load or Unload media using a MMC START STOP command.

Parameters:
p_cdio the CD object to be acted upon.
b_eject eject if true and close tray if false
b_immediate wait or don't wait for operation to complete
power_condition Set CD-ROM to idle/standby/sleep. If nonzero eject/load is ignored, so set to 0 if you want to eject or load.
See also:
mmc_eject_media or mmc_close_tray


Variable Documentation

The below variables are trickery to force the above enum symbol values to be recorded in debug symbol tables. They are used to allow one to refer to the enumeration value names in the typedefs above in a debugger and debugger expressions

This struct is used by cdio_audio_get_volume and cdio_audio_set_volume

Set this to the maximum value in milliseconds that we will wait on an MMC read command.

uint32_t mmc_timeout_ms

Set this to the maximum value in milliseconds that we will wait on an MMC command.


Generated for libcdio by doxygen 1.5.7.1