Blame lib/driver/mmc/mmc_private.h

Packit dd8086
/* private MMC helper routines.
Packit dd8086
  Copyright (C) 2004, 2005, 2006, 2008 Rocky Bernstein <rocky@gnu.org>
Packit dd8086
Packit dd8086
  This program is free software: you can redistribute it and/or modify
Packit dd8086
  it under the terms of the GNU General Public License as published by
Packit dd8086
  the Free Software Foundation, either version 3 of the License, or
Packit dd8086
  (at your option) any later version.
Packit dd8086
Packit dd8086
  This program is distributed in the hope that it will be useful,
Packit dd8086
  but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit dd8086
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit dd8086
  GNU General Public License for more details.
Packit dd8086
Packit dd8086
  You should have received a copy of the GNU General Public License
Packit dd8086
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit dd8086
*/
Packit dd8086
Packit dd8086
#include <cdio/mmc.h>
Packit dd8086
Packit dd8086
/*! Convert milliseconds to seconds taking the ceiling value, i.e.
Packit dd8086
    1002 milliseconds gets rounded to 2 seconds.
Packit dd8086
*/
Packit dd8086
#define SECS2MSECS 1000
Packit dd8086
static inline unsigned int 
Packit dd8086
msecs2secs(unsigned int msecs) 
Packit dd8086
{
Packit dd8086
  return (msecs+(SECS2MSECS-1)) / SECS2MSECS;
Packit dd8086
}
Packit dd8086
#undef SECS2MSECS
Packit dd8086
Packit dd8086
/***********************************************************
Packit dd8086
  MMC CdIo Operations which a driver may use. 
Packit dd8086
  These are not directly user-accessible.
Packit dd8086
************************************************************/
Packit dd8086
/*!
Packit dd8086
  Read Audio Subchannel information
Packit dd8086
  
Packit dd8086
  @param p_user_data the CD object to be acted upon.
Packit dd8086
  
Packit dd8086
*/
Packit dd8086
driver_return_code_t
Packit dd8086
audio_read_subchannel_mmc ( void *p_user_data, 
Packit dd8086
			    cdio_subchannel_t *p_subchannel);
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Get the block size for subsequest read requests, via a SCSI MMC 
Packit dd8086
  MODE_SENSE 6 command.
Packit dd8086
*/
Packit dd8086
int get_blocksize_mmc (void *p_user_data);
Packit dd8086
Packit dd8086
/*!  
Packit dd8086
  Get the lsn of the end of the CD
Packit dd8086
  
Packit dd8086
  @return the lsn. On error return CDIO_INVALID_LSN.
Packit dd8086
*/
Packit dd8086
lsn_t get_disc_last_lsn_mmc( void *p_user_data );
Packit dd8086
  
Packit dd8086
void get_drive_cap_mmc (const void *p_user_data,
Packit dd8086
			/*out*/ cdio_drive_read_cap_t  *p_read_cap,
Packit dd8086
			/*out*/ cdio_drive_write_cap_t *p_write_cap,
Packit dd8086
			/*out*/ cdio_drive_misc_cap_t  *p_misc_cap);
Packit dd8086
Packit dd8086
int get_media_changed_mmc (const void *p_user_data);
Packit dd8086
Packit dd8086
char *get_mcn_mmc (const void *p_user_data);
Packit dd8086
char *get_track_isrc_mmc (const void *p_user_data, track_t i_track);
Packit dd8086
Packit dd8086
driver_return_code_t get_tray_status (const void *p_user_data);
Packit dd8086
Packit dd8086
/*! Read just the user data part of some sort of data sector (via 
Packit dd8086
    mmc_read_cd). 
Packit dd8086
Packit dd8086
    @param p_user_data object to read from
Packit dd8086
Packit dd8086
    @param p_buf place to read data into.  The caller should make sure
Packit dd8086
                 this location can store at least CDIO_CD_FRAMESIZE,
Packit dd8086
                 M2RAW_SECTOR_SIZE, or M2F2_SECTOR_SIZE depending on
Packit dd8086
                 the kind of sector getting read. If you don't know
Packit dd8086
                 whether you have a Mode 1/2, Form 1/ Form 2/Formless
Packit dd8086
                 sector best to reserve space for the maximum,
Packit dd8086
                 M2RAW_SECTOR_SIZE.
Packit dd8086
Packit dd8086
    @param i_lsn sector to read
Packit dd8086
    @param i_blocksize size of block. Should be either CDIO_CD_FRAMESIZE, 
Packit dd8086
    M2RAW_SECTOR_SIZE, or M2F2_SECTOR_SIZE. See comment above under p_buf.
Packit dd8086
Packit dd8086
*/
Packit dd8086
driver_return_code_t read_data_sectors_mmc ( void *p_user_data, 
Packit dd8086
					     void *p_buf,  lsn_t i_lsn,
Packit dd8086
					     uint16_t i_blocksize,
Packit dd8086
					     uint32_t i_blocks );
Packit dd8086
char *get_mcn_mmc (const void *p_user_data);
Packit dd8086
Packit dd8086
/* Set read blocksize (via MMC) */
Packit dd8086
driver_return_code_t set_blocksize_mmc (void *p_user_data, 
Packit dd8086
					uint16_t i_blocksize);
Packit dd8086
Packit dd8086
/* Set the drive speed in CD-ROM speed units (via MMC). */
Packit dd8086
driver_return_code_t set_drive_speed_mmc (void *p_user_data, int i_speed);
Packit dd8086
Packit dd8086
/* Set CD-ROM drive speed  in K bytes per second. (via MMC) */
Packit dd8086
driver_return_code_t set_speed_mmc (void *p_user_data, int i_Kbs_speed);
Packit dd8086
Packit dd8086
/***********************************************************
Packit dd8086
  Miscellaenous other "private" routines. Probably need
Packit dd8086
  to better classify these.
Packit dd8086
************************************************************/
Packit dd8086
Packit dd8086
typedef driver_return_code_t (*mmc_run_cmd_fn_t) 
Packit dd8086
     ( void *p_user_data, 
Packit dd8086
       unsigned int i_timeout_ms,
Packit dd8086
       unsigned int i_cdb, 
Packit dd8086
       const mmc_cdb_t *p_cdb, 
Packit dd8086
       cdio_mmc_direction_t e_direction, 
Packit dd8086
       unsigned int i_buf, /*in/out*/ void *p_buf );
Packit dd8086
			     
Packit dd8086
int mmc_set_blocksize_mmc_private ( const void *p_env, const
Packit dd8086
				    mmc_run_cmd_fn_t run_mmc_cmd,
Packit dd8086
				    uint16_t i_blocksize );
Packit dd8086
Packit dd8086
/*! 
Packit dd8086
  Get the DVD type associated with cd object.
Packit dd8086
*/
Packit dd8086
discmode_t 
Packit dd8086
mmc_get_dvd_struct_physical_private ( void *p_env,
Packit dd8086
				      mmc_run_cmd_fn_t run_mmc_cmd, 
Packit dd8086
				      cdio_dvd_struct_t *s );
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  On input a MODE_SENSE command was issued and we have the results
Packit dd8086
  in p. We interpret this and return a bit mask set according to the 
Packit dd8086
  capabilities.
Packit dd8086
 */
Packit dd8086
void mmc_get_drive_cap_buf(const uint8_t *p,
Packit dd8086
			   /*out*/ cdio_drive_read_cap_t  *p_read_cap,
Packit dd8086
			   /*out*/ cdio_drive_write_cap_t *p_write_cap,
Packit dd8086
			   /*out*/ cdio_drive_misc_cap_t  *p_misc_cap);
Packit dd8086
Packit dd8086
driver_return_code_t
Packit dd8086
mmc_set_blocksize_private ( void *p_env, 
Packit dd8086
			    const mmc_run_cmd_fn_t run_mmc_cmd, 
Packit dd8086
			    uint16_t i_blocksize);
Packit dd8086
Packit dd8086
/**
Packit dd8086
  Get the media catalog number (MCN) or the ISRC
Packit dd8086
Packit dd8086
  Note: string is malloc'd so caller should free() then returned
Packit dd8086
  string when done with it.
Packit dd8086
 */
Packit dd8086
char *
Packit dd8086
mmc_get_mcn_isrc_private ( const CdIo_t *p_cdio,
Packit dd8086
                            track_t i_track,
Packit dd8086
                            unsigned char sub_chan_param
Packit dd8086
                  );