示例#1
0
/*!
   Reads i_blocks of audio sectors from cd device into data starting from lsn.
   Returns 0 if no error. 
 */
static driver_return_code_t
read_audio_sectors_freebsd (void *p_user_data, void *p_buf, lsn_t i_lsn,
			     unsigned int i_blocks)
{
  _img_private_t *p_env = p_user_data;
  if ( p_env->access_mode == _AM_CAM ) {
    return mmc_read_sectors( p_env->gen.cdio, p_buf, i_lsn,
                                  CDIO_MMC_READ_TYPE_CDDA, i_blocks);
  } else 
    return read_audio_sectors_freebsd_ioctl(p_user_data, p_buf, i_lsn, 
					    i_blocks);
}
示例#2
0
/*!
   Reads a single mode2 sector from cd device into data starting
   from lsn. Returns 0 if no error. 
 */
int
read_mode2_sector_freebsd_ioctl (_img_private_t *p_env, void *data, lsn_t lsn, 
				 bool b_form2)
{
  char buf[CDIO_CD_FRAMESIZE_RAW] = { 0, };
  int retval;

  if ( !b_form2 )
    return cdio_generic_read_form1_sector (p_env, buf, lsn);
  
  if ( (retval = read_audio_sectors_freebsd_ioctl (p_env, buf, lsn, 1)) )
    return retval;
    
  memcpy (data, buf + CDIO_CD_XA_SYNC_HEADER, M2RAW_SECTOR_SIZE);
  
  return 0;
}
示例#3
0
/*!
   Reads i_blocks of audio sectors from cd device into data starting from lsn.
   Returns 0 if no error.
 */
static driver_return_code_t
read_audio_sectors_freebsd (void *p_user_data, void *p_buf, lsn_t i_lsn,
			     unsigned int i_blocks)
{
  _img_private_t *p_env = p_user_data;
  switch (p_env->access_mode) {
    case _AM_CAM:
    case _AM_MMC_RDWR:
    case _AM_MMC_RDWR_EXCL:
      return mmc_read_sectors( p_env->gen.cdio, p_buf, i_lsn,
                                  CDIO_MMC_READ_TYPE_CDDA, i_blocks);
    case _AM_IOCTL:
      return read_audio_sectors_freebsd_ioctl(p_user_data, p_buf, i_lsn,
					      i_blocks);
    case _AM_NONE:
      cdio_info ("access mode not set");
      return DRIVER_OP_ERROR;
  }
  return DRIVER_OP_ERROR;
}