More consolidation of code by adding routines to scsi_mmc.

This commit is contained in:
rocky
2004-07-27 01:06:01 +00:00
parent 46d287060c
commit db337e5665
11 changed files with 246 additions and 261 deletions

View File

@@ -1,5 +1,5 @@
/* /*
$Id: scsi_mmc.h,v 1.17 2004/07/26 03:58:25 rocky Exp $ $Id: scsi_mmc.h,v 1.18 2004/07/27 01:06:01 rocky Exp $
Copyright (C) 2003, 2004 Rocky Bernstein <rocky@panix.com> Copyright (C) 2003, 2004 Rocky Bernstein <rocky@panix.com>
@@ -215,4 +215,7 @@ int scsi_mmc_set_bsize ( const CdIo *cdio, unsigned int bsize);
discmode_t scsi_mmc_get_dvd_struct_physical ( const CdIo *p_cdio, discmode_t scsi_mmc_get_dvd_struct_physical ( const CdIo *p_cdio,
cdio_dvd_struct_t *s); cdio_dvd_struct_t *s);
char *scsi_mmc_get_mcn ( const CdIo *p_cdio );
#endif /* __SCSI_MMC_H__ */ #endif /* __SCSI_MMC_H__ */

View File

@@ -1,5 +1,5 @@
/* /*
$Id: aspi32.c,v 1.39 2004/07/26 04:33:21 rocky Exp $ $Id: aspi32.c,v 1.40 2004/07/27 01:06:02 rocky Exp $
Copyright (C) 2004 Rocky Bernstein <rocky@panix.com> Copyright (C) 2004 Rocky Bernstein <rocky@panix.com>
@@ -27,7 +27,7 @@
# include "config.h" # include "config.h"
#endif #endif
static const char _rcsid[] = "$Id: aspi32.c,v 1.39 2004/07/26 04:33:21 rocky Exp $"; static const char _rcsid[] = "$Id: aspi32.c,v 1.40 2004/07/27 01:06:02 rocky Exp $";
#include <cdio/cdio.h> #include <cdio/cdio.h>
#include <cdio/sector.h> #include <cdio/sector.h>
@@ -211,8 +211,8 @@ get_discmode_aspi (_img_private_t *p_env)
if (!p_env->gen.toc_init) if (!p_env->gen.toc_init)
return CDIO_DISC_MODE_NO_INFO; return CDIO_DISC_MODE_NO_INFO;
for (i_track = p_env->i_first_track; for (i_track = p_env->gen.i_first_track;
i_track < p_env->i_first_track + p_env->i_tracks ; i_track < p_env->gen.i_first_track + p_env->i_tracks ;
i_track ++) { i_track ++) {
track_format_t track_fmt=get_track_format_aspi(p_env, i_track); track_format_t track_fmt=get_track_format_aspi(p_env, i_track);
@@ -675,7 +675,7 @@ read_toc_aspi (_img_private_t *p_env)
if (0 != i_status) return false; if (0 != i_status) return false;
p_env->i_first_track = tocheader[2]; p_env->gen.i_first_track = tocheader[2];
p_env->i_tracks = tocheader[3] - tocheader[2] + 1; p_env->i_tracks = tocheader[3] - tocheader[2] + 1;
{ {
@@ -771,30 +771,10 @@ wnaspi32_eject_media (void *user_data) {
bool bool
init_cdtext_aspi (_img_private_t *p_env) init_cdtext_aspi (_img_private_t *p_env)
{ {
scsi_mmc_cdb_t cdb = {{ 0, }}; return scsi_mmc_init_cdtext_private( p_env->gen.cdio,
uint8_t wdata[5000] = { 0, }; &scsi_mmc_run_cmd_aspi,
int i_status; set_cdtext_field_win32
);
/* Operation code */
CDIO_MMC_SET_COMMAND(cdb.field, CDIO_MMC_GPCMD_READ_TOC);
/* Format */
cdb.field[2] = CDIO_MMC_READTOC_FMT_CDTEXT;
CDIO_MMC_SET_READ_LENGTH(cdb.field, sizeof(wdata));
i_status = scsi_mmc_run_cmd_aspi (p_env, OP_TIMEOUT_MS,
scsi_mmc_get_cmd_len(cdb.field[0]),
&cdb, SCSI_MMC_DATA_READ,
sizeof(wdata), &wdata);
if (0 != i_status) {
cdio_info ("CD-TEXT reading failed\n");
return false;
} else {
return cdtext_data_init(p_env, p_env->i_first_track, wdata,
set_cdtext_field_win32);
}
} }
/*! /*!
@@ -859,36 +839,6 @@ get_drive_cap_aspi (const _img_private_t *p_env,
} }
} }
/*!
Return the media catalog number MCN.
Note: string is malloc'd so caller should free() then returned
string when done with it.
*/
char *
get_mcn_aspi (const _img_private_t *p_env)
{
scsi_mmc_cdb_t cdb = {{0, }};
char buf[28] = { 0, };
int i_status;
CDIO_MMC_SET_COMMAND(cdb.field, CDIO_MMC_GPCMD_READ_SUBCHANNEL);
cdb.field[1] = 0x0;
cdb.field[2] = 0x40;
cdb.field[3] = CDIO_SUBCHANNEL_MEDIA_CATALOG;
CDIO_MMC_SET_READ_LENGTH(cdb.field, sizeof(buf));
i_status = scsi_mmc_run_cmd_aspi(p_env, OP_TIMEOUT_MS,
scsi_mmc_get_cmd_len(cdb.field[0]),
&cdb, SCSI_MMC_DATA_READ,
sizeof(buf), buf);
if(i_status == 0) {
return strdup(&buf[9]);
}
return NULL;
}
/*! /*!
Get format of track. Get format of track.
*/ */

View File

@@ -1,5 +1,5 @@
/* /*
$Id: win32.c,v 1.31 2004/07/26 03:39:55 rocky Exp $ $Id: win32.c,v 1.32 2004/07/27 01:06:02 rocky Exp $
Copyright (C) 2003, 2004 Rocky Bernstein <rocky@panix.com> Copyright (C) 2003, 2004 Rocky Bernstein <rocky@panix.com>
@@ -26,7 +26,7 @@
# include "config.h" # include "config.h"
#endif #endif
static const char _rcsid[] = "$Id: win32.c,v 1.31 2004/07/26 03:39:55 rocky Exp $"; static const char _rcsid[] = "$Id: win32.c,v 1.32 2004/07/27 01:06:02 rocky Exp $";
#include <cdio/cdio.h> #include <cdio/cdio.h>
#include <cdio/sector.h> #include <cdio/sector.h>
@@ -545,14 +545,14 @@ _cdio_get_first_track_num(void *user_data)
*/ */
static char * static char *
_cdio_get_mcn (const void *env) { _cdio_get_mcn (const void *p_user_data) {
const _img_private_t *p_env = p_user_data;
const _img_private_t *_env = env;
if( _env->hASPI ) { if( _env->hASPI ) {
return get_mcn_aspi(_env); return scsi_mmc_get_mcn( p_env->gen.cdio );
} else } else {
return get_mcn_win32ioctl(_env); return get_mcn_win32ioctl(p_env);
}
} }
/*! /*!

View File

@@ -1,5 +1,5 @@
/* /*
$Id: win32.h,v 1.15 2004/07/25 22:33:54 rocky Exp $ $Id: win32.h,v 1.16 2004/07/27 01:06:02 rocky Exp $
Copyright (C) 2004 Rocky Bernstein <rocky@panix.com> Copyright (C) 2004 Rocky Bernstein <rocky@panix.com>
@@ -45,7 +45,6 @@ typedef struct {
cdtext_t cdtext; /* CD-TEXT */ cdtext_t cdtext; /* CD-TEXT */
track_t i_tracks; /* number of tracks in image */ track_t i_tracks; /* number of tracks in image */
track_t i_first_track; /* track number of first track */
access_mode_t access_mode; access_mode_t access_mode;

View File

@@ -1,5 +1,5 @@
/* /*
$Id: win32_ioctl.c,v 1.25 2004/07/26 11:25:51 rocky Exp $ $Id: win32_ioctl.c,v 1.26 2004/07/27 01:06:02 rocky Exp $
Copyright (C) 2004 Rocky Bernstein <rocky@panix.com> Copyright (C) 2004 Rocky Bernstein <rocky@panix.com>
@@ -26,7 +26,7 @@
# include "config.h" # include "config.h"
#endif #endif
static const char _rcsid[] = "$Id: win32_ioctl.c,v 1.25 2004/07/26 11:25:51 rocky Exp $"; static const char _rcsid[] = "$Id: win32_ioctl.c,v 1.26 2004/07/27 01:06:02 rocky Exp $";
#include <cdio/cdio.h> #include <cdio/cdio.h>
#include <cdio/sector.h> #include <cdio/sector.h>
@@ -224,8 +224,8 @@ get_discmode_win32ioctl (_img_private_t *p_env)
if (!p_env->gen.toc_init) if (!p_env->gen.toc_init)
return CDIO_DISC_MODE_NO_INFO; return CDIO_DISC_MODE_NO_INFO;
for (i_track = p_env->i_first_track; for (i_track = p_env->gen.i_first_track;
i_track < p_env->i_first_track + p_env->i_tracks ; i_track < p_env->gen.i_first_track + p_env->i_tracks ;
i_track ++) { i_track ++) {
track_format_t track_fmt=get_track_format_win32ioctl(p_env, i_track); track_format_t track_fmt=get_track_format_win32ioctl(p_env, i_track);
@@ -510,31 +510,10 @@ read_toc_win32ioctl (_img_private_t *env)
bool bool
init_cdtext_win32ioctl (_img_private_t *p_env) init_cdtext_win32ioctl (_img_private_t *p_env)
{ {
scsi_mmc_cdb_t cdb = {{ 0, }}; return scsi_mmc_cdtext_init_private( p_env->gen.cdio,
uint8_t wdata[5000] = { 0, }; &scsi_mmc_run_cmd_win32ioctl,
int i_status; set_cdtext_field_win32
);
/* Operation code */
CDIO_MMC_SET_READ_LENGTH(cdb.field, sizeof(wdata));
CDIO_MMC_SET_COMMAND(cdb.field, CDIO_MMC_GPCMD_READ_TOC);
/* Format */
cdb.field[2] = CDIO_MMC_READTOC_FMT_CDTEXT;
CDIO_MMC_SET_READ_LENGTH(cdb.field, sizeof(wdata));
i_status = scsi_mmc_run_cmd_win32ioctl (p_env, OP_TIMEOUT_MS,
scsi_mmc_get_cmd_len(cdb.field[0]),
&cdb, SCSI_MMC_DATA_READ,
sizeof(wdata), &wdata);
if(0 != i_status) {
cdio_info ("CD-TEXT reading failed\n");
return false;
} else {
return cdtext_data_init(p_env, p_env->i_first_track, wdata,
set_cdtext_field_win32);
}
} }
/*! /*!

View File

@@ -1,5 +1,5 @@
/* /*
$Id: _cdio_bsdi.c,v 1.28 2004/06/26 00:39:00 rocky Exp $ $Id: _cdio_bsdi.c,v 1.29 2004/07/27 01:06:02 rocky Exp $
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org> Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
Copyright (C) 2002, 2003, 2004 Rocky Bernstein <rocky@panix.com> Copyright (C) 2002, 2003, 2004 Rocky Bernstein <rocky@panix.com>
@@ -27,7 +27,7 @@
# include "config.h" # include "config.h"
#endif #endif
static const char _rcsid[] = "$Id: _cdio_bsdi.c,v 1.28 2004/06/26 00:39:00 rocky Exp $"; static const char _rcsid[] = "$Id: _cdio_bsdi.c,v 1.29 2004/07/27 01:06:02 rocky Exp $";
#include <cdio/sector.h> #include <cdio/sector.h>
#include <cdio/util.h> #include <cdio/util.h>
@@ -55,8 +55,7 @@ static const char _rcsid[] = "$Id: _cdio_bsdi.c,v 1.28 2004/06/26 00:39:00 rocky
#include <sys/types.h> #include <sys/types.h>
#include <sys/ioctl.h> #include <sys/ioctl.h>
#define TOTAL_TRACKS (env->tochdr.cdth_trk1) #define TOTAL_TRACKS (p_env->tochdr.cdth_trk1)
#define FIRST_TRACK_NUM (env->tochdr.cdth_trk0)
typedef enum { typedef enum {
_AM_NONE, _AM_NONE,
@@ -378,29 +377,29 @@ _set_arg_bsdi (void *user_data, const char key[], const char value[])
Return false if successful or true if an error. Return false if successful or true if an error.
*/ */
static bool static bool
_cdio_read_toc (_img_private_t *env) _cdio_read_toc (_img_private_t *p_env)
{ {
int i; int i;
/* read TOC header */ /* read TOC header */
if ( ioctl(env->gen.fd, CDROMREADTOCHDR, &env->tochdr) == -1 ) { if ( ioctl(p_env->gen.fd, CDROMREADTOCHDR, &p_env->tochdr) == -1 ) {
cdio_warn("%s: %s\n", cdio_warn("%s: %s\n",
"error in ioctl CDROMREADTOCHDR", strerror(errno)); "error in ioctl CDROMREADTOCHDR", strerror(errno));
return false; return false;
} }
/* read individual tracks */ /* read individual tracks */
for (i= FIRST_TRACK_NUM; i<=TOTAL_TRACKS; i++) { for (i= p_env->gen.i_first_track; i<=TOTAL_TRACKS; i++) {
env->tocent[i-1].cdte_track = i; p_env->tocent[i-1].cdte_track = i;
env->tocent[i-1].cdte_format = CDROM_MSF; p_env->tocent[i-1].cdte_format = CDROM_MSF;
if ( ioctl(env->gen.fd, CDROMREADTOCENTRY, &env->tocent[i-1]) == -1 ) { if (ioctl(p_env->gen.fd, CDROMREADTOCENTRY, &p_env->tocent[i-1]) == -1) {
cdio_warn("%s %d: %s\n", cdio_warn("%s %d: %s\n",
"error in ioctl CDROMREADTOCENTRY for track", "error in ioctl CDROMREADTOCENTRY for track",
i, strerror(errno)); i, strerror(errno));
return false; return false;
} }
/**** /****
struct cdrom_msf0 *msf= &env->tocent[i-1].cdte_addr.msf; struct cdrom_msf0 *msf= &p_env->tocent[i-1].cdte_addr.msf;
fprintf (stdout, "--- track# %d (msf %2.2x:%2.2x:%2.2x)\n", fprintf (stdout, "--- track# %d (msf %2.2x:%2.2x:%2.2x)\n",
i, msf->minute, msf->second, msf->frame); i, msf->minute, msf->second, msf->frame);
@@ -409,11 +408,11 @@ _cdio_read_toc (_img_private_t *env)
} }
/* read the lead-out track */ /* read the lead-out track */
env->tocent[TOTAL_TRACKS].cdte_track = CDIO_CDROM_LEADOUT_TRACK; p_env->tocent[TOTAL_TRACKS].cdte_track = CDIO_CDROM_LEADOUT_TRACK;
env->tocent[TOTAL_TRACKS].cdte_format = CDROM_MSF; p_env->tocent[TOTAL_TRACKS].cdte_format = CDROM_MSF;
if (ioctl(env->gen.fd, CDROMREADTOCENTRY, if (ioctl(p_env->gen.fd, CDROMREADTOCENTRY,
&env->tocent[TOTAL_TRACKS]) == -1 ) { &p_env->tocent[TOTAL_TRACKS]) == -1 ) {
cdio_warn("%s: %s\n", cdio_warn("%s: %s\n",
"error in ioctl CDROMREADTOCENTRY for lead-out", "error in ioctl CDROMREADTOCENTRY for lead-out",
strerror(errno)); strerror(errno));
@@ -421,7 +420,7 @@ _cdio_read_toc (_img_private_t *env)
} }
/* /*
struct cdrom_msf0 *msf= &env->tocent[TOTAL_TRACKS].cdte_addr.msf; struct cdrom_msf0 *msf= &p_env->tocent[TOTAL_TRACKS].cdte_addr.msf;
fprintf (stdout, "--- track# %d (msf %2.2x:%2.2x:%2.2x)\n", fprintf (stdout, "--- track# %d (msf %2.2x:%2.2x:%2.2x)\n",
i, msf->minute, msf->second, msf->frame); i, msf->minute, msf->second, msf->frame);
@@ -437,14 +436,14 @@ _cdio_read_toc (_img_private_t *env)
static int static int
_eject_media_bsdi (void *user_data) { _eject_media_bsdi (void *user_data) {
_img_private_t *env = user_data; _img_private_t *p_env = user_data;
int ret=2; int ret=2;
int status; int status;
int fd; int fd;
close(env->gen.fd); close(p_env->gen.fd);
env->gen.fd = -1; p_env->gen.fd = -1;
if ((fd = open (env->source_name, O_RDONLY|O_NONBLOCK)) > -1) { if ((fd = open (p_env->source_name, O_RDONLY|O_NONBLOCK)) > -1) {
if((status = ioctl(fd, CDROM_DRIVE_STATUS, (void *) CDSL_CURRENT)) > 0) { if((status = ioctl(fd, CDROM_DRIVE_STATUS, (void *) CDSL_CURRENT)) > 0) {
switch(status) { switch(status) {
case CDS_TRAY_OPEN: case CDS_TRAY_OPEN:
@@ -474,12 +473,12 @@ _eject_media_bsdi (void *user_data) {
static const char * static const char *
_get_arg_bsdi (void *user_data, const char key[]) _get_arg_bsdi (void *user_data, const char key[])
{ {
_img_private_t *env = user_data; _img_private_t *p_env = user_data;
if (!strcmp (key, "source")) { if (!strcmp (key, "source")) {
return env->source_name; return p_env->source_name;
} else if (!strcmp (key, "access-mode")) { } else if (!strcmp (key, "access-mode")) {
switch (env->access_mode) { switch (p_env->access_mode) {
case _AM_IOCTL: case _AM_IOCTL:
return "ioctl"; return "ioctl";
case _AM_NONE: case _AM_NONE:
@@ -496,11 +495,11 @@ _get_arg_bsdi (void *user_data, const char key[])
static track_t static track_t
_get_first_track_num_bsdi(void *user_data) _get_first_track_num_bsdi(void *user_data)
{ {
_img_private_t *env = user_data; _img_private_t *p_env = user_data;
if (!env->toc_init) _cdio_read_toc (env) ; if (!p_env->toc_init) _cdio_read_toc (p_env) ;
return FIRST_TRACK_NUM; return p_p_env->gen.i_first_track;
} }
/*! /*!
@@ -512,8 +511,8 @@ static char *
_get_mcn_bsdi (const void *user_data) { _get_mcn_bsdi (const void *user_data) {
struct cdrom_mcn mcn; struct cdrom_mcn mcn;
const _img_private_t *env = user_data; const _img_private_t *p_env = user_data;
if (ioctl(env->gen.fd, CDROM_GET_MCN, &mcn) != 0) if (ioctl(p_env->gen.fd, CDROM_GET_MCN, &mcn) != 0)
return NULL; return NULL;
return strdup(mcn.medium_catalog_number); return strdup(mcn.medium_catalog_number);
} }
@@ -525,9 +524,9 @@ _get_mcn_bsdi (const void *user_data) {
static track_t static track_t
_get_num_tracks_bsdi(void *user_data) _get_num_tracks_bsdi(void *user_data)
{ {
_img_private_t *env = user_data; _img_private_t *p_env = user_data;
if (!env->toc_init) _cdio_read_toc (env) ; if (!p_env->toc_init) _cdio_read_toc (p_env) ;
return TOTAL_TRACKS; return TOTAL_TRACKS;
} }
@@ -538,22 +537,22 @@ _get_num_tracks_bsdi(void *user_data)
static track_format_t static track_format_t
_get_track_format_bsdi(void *user_data, track_t i_track) _get_track_format_bsdi(void *user_data, track_t i_track)
{ {
_img_private_t *env = user_data; _img_private_t *p_env = user_data;
if (!env->toc_init) _cdio_read_toc (env) ; if (!p_env->toc_init) _cdio_read_toc (p_env) ;
if (i_track > TOTAL_TRACKS || i_track == 0) if (i_track > TOTAL_TRACKS || i_track == 0)
return TRACK_FORMAT_ERROR; return TRACK_FORMAT_ERROR;
i_track -= FIRST_TRACK_NUM; i_track -= p_p_env->gen.i_first_track;
/* This is pretty much copied from the "badly broken" cdrom_count_tracks /* This is pretty much copied from the "badly broken" cdrom_count_tracks
in linux/cdrom.c. in linux/cdrom.c.
*/ */
if (env->tocent[i_track].cdte_ctrl & CDROM_DATA_TRACK) { if (p_env->tocent[i_track].cdte_ctrl & CDROM_DATA_TRACK) {
if (env->tocent[i_track].cdte_format == CDIO_CDROM_CDI_TRACK) if (p_env->tocent[i_track].cdte_format == CDIO_CDROM_CDI_TRACK)
return TRACK_FORMAT_CDI; return TRACK_FORMAT_CDI;
else if (env->tocent[i_track].cdte_format == CDIO_CDROM_XA_TRACK) else if (p_env->tocent[i_track].cdte_format == CDIO_CDROM_XA_TRACK)
return TRACK_FORMAT_XA; return TRACK_FORMAT_XA;
else else
return TRACK_FORMAT_DATA; return TRACK_FORMAT_DATA;
@@ -573,9 +572,9 @@ _get_track_format_bsdi(void *user_data, track_t i_track)
static bool static bool
_get_track_green_bsdi(void *user_data, track_t i_track) _get_track_green_bsdi(void *user_data, track_t i_track)
{ {
_img_private_t *env = user_data; _img_private_t *p_env = user_data;
if (!env->toc_init) _cdio_read_toc (env) ; if (!p_env->toc_init) _cdio_read_toc (p_env) ;
if (i_track == CDIO_CDROM_LEADOUT_TRACK) i_track = TOTAL_TRACKS+1; if (i_track == CDIO_CDROM_LEADOUT_TRACK) i_track = TOTAL_TRACKS+1;
@@ -585,7 +584,7 @@ _get_track_green_bsdi(void *user_data, track_t i_track)
/* FIXME: Dunno if this is the right way, but it's what /* FIXME: Dunno if this is the right way, but it's what
I was using in cdinfo for a while. I was using in cdinfo for a while.
*/ */
return ((env->tocent[i_track-1].cdte_ctrl & 2) != 0); return ((p_env->tocent[i_track-1].cdte_ctrl & 2) != 0);
} }
/*! /*!
@@ -598,11 +597,11 @@ _get_track_green_bsdi(void *user_data, track_t i_track)
static bool static bool
_get_track_msf_bsdi(void *user_data, track_t i_track, msf_t *msf) _get_track_msf_bsdi(void *user_data, track_t i_track, msf_t *msf)
{ {
_img_private_t *env = user_data; _img_private_t *p_env = user_data;
if (NULL == msf) return false; if (NULL == msf) return false;
if (!env->toc_init) _cdio_read_toc (env) ; if (!p_env->toc_init) _cdio_read_toc (p_env) ;
if (i_track == CDIO_CDROM_LEADOUT_TRACK) i_track = TOTAL_TRACKS+1; if (i_track == CDIO_CDROM_LEADOUT_TRACK) i_track = TOTAL_TRACKS+1;
@@ -610,10 +609,10 @@ _get_track_msf_bsdi(void *user_data, track_t i_track, msf_t *msf)
return false; return false;
} }
i_track -= FIRST_TRACK_NUM; i_track -= p_p_env->gen.i_first_track;
{ {
struct cdrom_msf0 *msf0= &env->tocent[i_track].cdte_addr.msf; struct cdrom_msf0 *msf0= &p_env->tocent[i_track].cdte_addr.msf;
msf->m = to_bcd8(msf0->minute); msf->m = to_bcd8(msf0->minute);
msf->s = to_bcd8(msf0->second); msf->s = to_bcd8(msf0->second);
msf->f = to_bcd8(msf0->frame); msf->f = to_bcd8(msf0->frame);

View File

@@ -1,5 +1,5 @@
/* /*
$Id: _cdio_linux.c,v 1.82 2004/07/26 03:58:25 rocky Exp $ $Id: _cdio_linux.c,v 1.83 2004/07/27 01:06:02 rocky Exp $
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org> Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
Copyright (C) 2002, 2003, 2004 Rocky Bernstein <rocky@panix.com> Copyright (C) 2002, 2003, 2004 Rocky Bernstein <rocky@panix.com>
@@ -27,7 +27,7 @@
# include "config.h" # include "config.h"
#endif #endif
static const char _rcsid[] = "$Id: _cdio_linux.c,v 1.82 2004/07/26 03:58:25 rocky Exp $"; static const char _rcsid[] = "$Id: _cdio_linux.c,v 1.83 2004/07/27 01:06:02 rocky Exp $";
#include <string.h> #include <string.h>
@@ -75,7 +75,6 @@ static const char _rcsid[] = "$Id: _cdio_linux.c,v 1.82 2004/07/26 03:58:25 rock
#define DEFAULT_TIMEOUT 500 #define DEFAULT_TIMEOUT 500
#define TOTAL_TRACKS (p_env->tochdr.cdth_trk1) #define TOTAL_TRACKS (p_env->tochdr.cdth_trk1)
#define FIRST_TRACK_NUM (p_env->tochdr.cdth_trk0)
typedef enum { typedef enum {
_AM_NONE, _AM_NONE,
@@ -240,7 +239,7 @@ get_first_track_num_linux(void *p_user_data)
if (!p_env->gen.toc_init) read_toc_linux (p_env) ; if (!p_env->gen.toc_init) read_toc_linux (p_env) ;
return p_env->gen.toc_init ? FIRST_TRACK_NUM : CDIO_INVALID_TRACK; return p_env->gen.toc_init ? p_env->gen.i_first_track : CDIO_INVALID_TRACK;
} }
/*! /*!
@@ -349,10 +348,11 @@ _get_track_format_linux(void *p_user_data, track_t i_track)
{ {
_img_private_t *p_env = p_user_data; _img_private_t *p_env = p_user_data;
if (i_track > (TOTAL_TRACKS+FIRST_TRACK_NUM) || i_track < FIRST_TRACK_NUM) if (i_track > (TOTAL_TRACKS+p_env->gen.i_first_track)
|| i_track < p_env->gen.i_first_track)
return TRACK_FORMAT_ERROR; return TRACK_FORMAT_ERROR;
i_track -= FIRST_TRACK_NUM; i_track -= p_env->gen.i_first_track;
/* This is pretty much copied from the "badly broken" cdrom_count_tracks /* This is pretty much copied from the "badly broken" cdrom_count_tracks
in linux/cdrom.c. in linux/cdrom.c.
@@ -384,10 +384,11 @@ _get_track_green_linux(void *p_user_data, track_t i_track)
if (!p_env->gen.toc_init) read_toc_linux (p_env) ; if (!p_env->gen.toc_init) read_toc_linux (p_env) ;
if (i_track >= (TOTAL_TRACKS+FIRST_TRACK_NUM) || i_track < FIRST_TRACK_NUM) if (i_track >= (TOTAL_TRACKS+p_env->gen.i_first_track)
|| i_track < p_env->gen.i_first_track)
return false; return false;
i_track -= FIRST_TRACK_NUM; i_track -= p_env->gen.i_first_track;
/* FIXME: Dunno if this is the right way, but it's what /* FIXME: Dunno if this is the right way, but it's what
I was using in cd-info for a while. I was using in cd-info for a while.
@@ -414,14 +415,14 @@ _get_track_msf_linux(void *p_user_data, track_t i_track, msf_t *msf)
if (!p_env->gen.toc_init) read_toc_linux (p_env) ; if (!p_env->gen.toc_init) read_toc_linux (p_env) ;
if (i_track == CDIO_CDROM_LEADOUT_TRACK) if (i_track == CDIO_CDROM_LEADOUT_TRACK)
i_track = TOTAL_TRACKS + FIRST_TRACK_NUM; i_track = TOTAL_TRACKS + p_env->gen.i_first_track;
if (i_track > (TOTAL_TRACKS+FIRST_TRACK_NUM) if (i_track > (TOTAL_TRACKS+p_env->gen.i_first_track)
|| i_track < FIRST_TRACK_NUM) { || i_track < p_env->gen.i_first_track) {
return false; return false;
} else { } else {
struct cdrom_msf0 *msf0= struct cdrom_msf0 *msf0=
&p_env->tocent[i_track-FIRST_TRACK_NUM].cdte_addr.msf; &p_env->tocent[i_track-p_env->gen.i_first_track].cdte_addr.msf;
msf->m = to_bcd8(msf0->minute); msf->m = to_bcd8(msf0->minute);
msf->s = to_bcd8(msf0->second); msf->s = to_bcd8(msf0->second);
msf->f = to_bcd8(msf0->frame); msf->f = to_bcd8(msf0->frame);
@@ -846,12 +847,14 @@ read_toc_linux (_img_private_t *p_env)
return false; return false;
} }
p_env->gen.i_first_track = p_env->tochdr.cdth_trk0;
/* read individual tracks */ /* read individual tracks */
for (i= FIRST_TRACK_NUM; i<=TOTAL_TRACKS; i++) { for (i= p_env->gen.i_first_track; i<=TOTAL_TRACKS; i++) {
p_env->tocent[i-FIRST_TRACK_NUM].cdte_track = i; p_env->tocent[i-p_env->gen.i_first_track].cdte_track = i;
p_env->tocent[i-FIRST_TRACK_NUM].cdte_format = CDROM_MSF; p_env->tocent[i-p_env->gen.i_first_track].cdte_format = CDROM_MSF;
if ( ioctl(p_env->gen.fd, CDROMREADTOCENTRY, if ( ioctl(p_env->gen.fd, CDROMREADTOCENTRY,
&p_env->tocent[i-FIRST_TRACK_NUM]) == -1 ) { &p_env->tocent[i-p_env->gen.i_first_track]) == -1 ) {
cdio_warn("%s %d: %s\n", cdio_warn("%s %d: %s\n",
"error in ioctl CDROMREADTOCENTRY for track", "error in ioctl CDROMREADTOCENTRY for track",
i, strerror(errno)); i, strerror(errno));
@@ -1009,30 +1012,10 @@ set_cdtext_field_linux(void *user_data, track_t i_track,
static bool static bool
init_cdtext_linux (_img_private_t *p_env) init_cdtext_linux (_img_private_t *p_env)
{ {
return scsi_mmc_init_cdtext_private( p_env->gen.cdio,
scsi_mmc_cdb_t cdb = {{0, }}; &scsi_mmc_run_cmd_linux,
set_cdtext_field_linux
unsigned char wdata[2000]= {0, }; /* Data read from device starts here */ );
int status;
/* Operation code */
CDIO_MMC_SET_COMMAND(cdb.field, CDIO_MMC_GPCMD_READ_TOC);
/* Format */
cdb.field[2] = CDIO_MMC_READTOC_FMT_CDTEXT;
status = scsi_mmc_run_cmd_linux (p_env, DEFAULT_TIMEOUT,
scsi_mmc_get_cmd_len(cdb.field[0]), &cdb,
SCSI_MMC_DATA_READ, sizeof(wdata), &wdata);
if (status < 0) {
cdio_info ("CD-TEXT reading failed\n");
p_env->b_cdtext_error = true;
return false;
} else {
return cdtext_data_init(p_env, FIRST_TRACK_NUM, wdata,
set_cdtext_field_linux);
}
} }
/*! /*!
@@ -1049,7 +1032,7 @@ get_cdtext_linux (void *p_user_data, track_t i_track)
if ( NULL == p_env || if ( NULL == p_env ||
(0 != i_track (0 != i_track
&& i_track >= TOTAL_TRACKS+FIRST_TRACK_NUM ) ) && i_track >= TOTAL_TRACKS+p_env->gen.i_first_track ) )
return NULL; return NULL;
p_env->b_cdtext_init = init_cdtext_linux(p_env); p_env->b_cdtext_init = init_cdtext_linux(p_env);
@@ -1058,7 +1041,7 @@ get_cdtext_linux (void *p_user_data, track_t i_track)
if (0 == i_track) if (0 == i_track)
return &(p_env->cdtext); return &(p_env->cdtext);
else else
return &(p_env->cdtext_track[i_track-FIRST_TRACK_NUM]); return &(p_env->cdtext_track[i_track-p_env->gen.i_first_track]);
} }

View File

@@ -1,5 +1,5 @@
/* /*
$Id: _cdio_sunos.c,v 1.61 2004/07/23 10:37:17 rocky Exp $ $Id: _cdio_sunos.c,v 1.62 2004/07/27 01:06:02 rocky Exp $
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org> Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
Copyright (C) 2002, 2003, 2004 Rocky Bernstein <rocky@panix.com> Copyright (C) 2002, 2003, 2004 Rocky Bernstein <rocky@panix.com>
@@ -38,7 +38,7 @@
#ifdef HAVE_SOLARIS_CDROM #ifdef HAVE_SOLARIS_CDROM
static const char _rcsid[] = "$Id: _cdio_sunos.c,v 1.61 2004/07/23 10:37:17 rocky Exp $"; static const char _rcsid[] = "$Id: _cdio_sunos.c,v 1.62 2004/07/27 01:06:02 rocky Exp $";
#ifdef HAVE_GLOB_H #ifdef HAVE_GLOB_H
#include <glob.h> #include <glob.h>
@@ -69,7 +69,6 @@ static const char _rcsid[] = "$Id: _cdio_sunos.c,v 1.61 2004/07/23 10:37:17 rock
#define DEFAULT_TIMEOUT 30 #define DEFAULT_TIMEOUT 30
#define TOTAL_TRACKS (p_env->tochdr.cdth_trk1) #define TOTAL_TRACKS (p_env->tochdr.cdth_trk1)
#define FIRST_TRACK_NUM (p_env->tochdr.cdth_trk0)
/* reader */ /* reader */
@@ -420,6 +419,8 @@ _cdio_read_toc (_img_private_t *env)
return false; return false;
} }
p_env->gen.i_first_track = p_env->tochdr.cdth_trk0;
/* read individual tracks */ /* read individual tracks */
for (i=env->tochdr.cdth_trk0; i<=env->tochdr.cdth_trk1; i++) { for (i=env->tochdr.cdth_trk0; i<=env->tochdr.cdth_trk1; i++) {
env->tocent[i-1].cdte_track = i; env->tocent[i-1].cdte_track = i;
@@ -474,32 +475,10 @@ set_cdtext_field_solaris(void *p_user_data, track_t i_track,
static bool static bool
_init_cdtext_solaris (_img_private_t *p_env) _init_cdtext_solaris (_img_private_t *p_env)
{ {
return scsi_mmc_init_cdtext_private( p_env->gen.cdio,
scsi_mmc_cdb_t cdb = {{0, }}; &scsi_mmc_run_cmd_solaris,
char wdata[5000] = { 0, }; set_cdtext_field_solaris
int i_status; );
/* Operation code */
CDIO_MMC_SET_COMMAND(cdb.field, CDIO_MMC_GPCMD_READ_TOC);
/* Format */
cdb.field[2] = CDIO_MMC_READTOC_FMT_CDTEXT;
CDIO_MMC_SET_READ_LENGTH(cdb.field, sizeof(wdata));
errno = 0;
i_status = scsi_mmc_run_cmd_solaris (p_env, DEFAULT_TIMEOUT,
scsi_mmc_get_cmd_len(cdb.field[0]),
&cdb, SCSI_MMC_DATA_READ,
sizeof(wdata), &wdata);
if(i_status != 0) {
cdio_info ("CD-TEXT reading failed: %s\n", strerror(errno));
return false;
} else {
return cdtext_data_init(p_env, FIRST_TRACK_NUM, wdata,
set_cdtext_field_solaris);
}
} }
/*! /*!
@@ -516,7 +495,7 @@ _get_cdtext_solaris (void *p_user_data, track_t i_track)
if ( NULL == p_env || if ( NULL == p_env ||
(0 != i_track (0 != i_track
&& i_track >= TOTAL_TRACKS+FIRST_TRACK_NUM ) && i_track >= TOTAL_TRACKS+p_env->gen.i_first_track )
|| p_env ->b_cdtext_error ) || p_env ->b_cdtext_error )
return NULL; return NULL;
@@ -528,7 +507,7 @@ _get_cdtext_solaris (void *p_user_data, track_t i_track)
if (0 == i_track) if (0 == i_track)
return &(p_env->cdtext); return &(p_env->cdtext);
else else
return &(p_env->cdtext_track[i_track-FIRST_TRACK_NUM]); return &(p_env->cdtext_track[i_track-p_env->gen.i_first_track]);
} }
/*! /*!
@@ -705,26 +684,7 @@ static char *
_get_mcn_solaris (const void *p_user_data) _get_mcn_solaris (const void *p_user_data)
{ {
const _img_private_t *p_env = p_user_data; const _img_private_t *p_env = p_user_data;
scsi_mmc_cdb_t cdb = {{0, }}; return scsi_mmc_get_mcn( p_env->gen.cdio );
char buf[28] = { 0, };
int i_status;
CDIO_MMC_SET_COMMAND(cdb.field, CDIO_MMC_GPCMD_READ_SUBCHANNEL);
cdb.field[1] = 0x0;
cdb.field[2] = 0x40;
cdb.field[3] = CDIO_SUBCHANNEL_MEDIA_CATALOG;
CDIO_MMC_SET_READ_LENGTH(cdb.field, sizeof(buf));
i_status = scsi_mmc_run_cmd_solaris (p_env, DEFAULT_TIMEOUT,
scsi_mmc_get_cmd_len(cdb.field[0]),
&cdb, SCSI_MMC_DATA_READ,
sizeof(buf), &buf);
if(i_status == 0) {
return strdup(&buf[9]);
}
return NULL;
} }
@@ -739,7 +699,7 @@ _cdio_get_first_track_num(void *p_user_data)
if (!p_env->gen.toc_init) _cdio_read_toc (p_env) ; if (!p_env->gen.toc_init) _cdio_read_toc (p_env) ;
return FIRST_TRACK_NUM; return p_env->gen.i_first_track;
} }
@@ -762,10 +722,11 @@ _cdio_get_track_format(void *p_user_data, track_t i_track)
{ {
_img_private_t *p_env = p_user_data; _img_private_t *p_env = p_user_data;
if ( (i_track > TOTAL_TRACKS+FIRST_TRACK_NUM) || i_track < FIRST_TRACK_NUM) if ( (i_track > TOTAL_TRACKS+p_env->gen.i_first_track)
|| i_track < p_env->gen.i_first_track)
return TRACK_FORMAT_ERROR; return TRACK_FORMAT_ERROR;
i_track -= FIRST_TRACK_NUM; i_track -= p_env->gen.i_first_track;
/* This is pretty much copied from the "badly broken" cdrom_count_tracks /* This is pretty much copied from the "badly broken" cdrom_count_tracks
in linux/cdrom.c. in linux/cdrom.c.
@@ -798,10 +759,11 @@ _cdio_get_track_green(void *p_user_data, track_t i_track)
if (!p_env->gen.init) init_solaris(p_env); if (!p_env->gen.init) init_solaris(p_env);
if (!p_env->gen.toc_init) _cdio_read_toc (p_env) ; if (!p_env->gen.toc_init) _cdio_read_toc (p_env) ;
if (i_track >= TOTAL_TRACKS+FIRST_TRACK_NUM || i_track < FIRST_TRACK_NUM) if (i_track >= TOTAL_TRACKS+p_env->gen.i_first_track
|| i_track < p_env->gen.i_first_track)
return false; return false;
i_track -= FIRST_TRACK_NUM; i_track -= p_env->gen.i_first_track;
/* FIXME: Dunno if this is the right way, but it's what /* FIXME: Dunno if this is the right way, but it's what
I was using in cd-info for a while. I was using in cd-info for a while.
@@ -829,9 +791,10 @@ _cdio_get_track_msf(void *p_user_data, track_t i_track, msf_t *msf)
if (!p_env->gen.toc_init) _cdio_read_toc (p_env) ; if (!p_env->gen.toc_init) _cdio_read_toc (p_env) ;
if (i_track == CDIO_CDROM_LEADOUT_TRACK) if (i_track == CDIO_CDROM_LEADOUT_TRACK)
i_track = TOTAL_TRACKS + FIRST_TRACK_NUM; i_track = TOTAL_TRACKS + p_env->gen.i_first_track;
if (i_track > (TOTAL_TRACKS+FIRST_TRACK_NUM) || i_track < FIRST_TRACK_NUM) { if (i_track > (TOTAL_TRACKS+p_env->gen.i_first_track)
|| i_track < p_env->gen.i_first_track) {
return false; return false;
} else { } else {
struct cdrom_tocentry *msf0 = &p_env->tocent[i_track-1]; struct cdrom_tocentry *msf0 = &p_env->tocent[i_track-1];

View File

@@ -1,5 +1,5 @@
/* /*
$Id: cdio_private.h,v 1.34 2004/07/26 02:54:37 rocky Exp $ $Id: cdio_private.h,v 1.35 2004/07/27 01:06:02 rocky Exp $
Copyright (C) 2003, 2004 Rocky Bernstein <rocky@panix.com> Copyright (C) 2003, 2004 Rocky Bernstein <rocky@panix.com>
@@ -257,6 +257,7 @@ extern "C" {
and the second for stream reading (bincue, nrg, toc, network). and the second for stream reading (bincue, nrg, toc, network).
*/ */
int fd; /**< File descriptor of device */ int fd; /**< File descriptor of device */
track_t i_first_track; /**< The starting track number. */
CdioDataSource *data_source; CdioDataSource *data_source;
CdIo *cdio; /**< a way to call general cdio routines. */ CdIo *cdio; /**< a way to call general cdio routines. */
} generic_img_private_t; } generic_img_private_t;

View File

@@ -1,6 +1,6 @@
/* Common SCSI Multimedia Command (MMC) routines. /* Common SCSI Multimedia Command (MMC) routines.
$Id: scsi_mmc.c,v 1.11 2004/07/26 04:33:21 rocky Exp $ $Id: scsi_mmc.c,v 1.12 2004/07/27 01:06:02 rocky Exp $
Copyright (C) 2004 Rocky Bernstein <rocky@panix.com> Copyright (C) 2004 Rocky Bernstein <rocky@panix.com>
@@ -24,6 +24,7 @@
#endif #endif
#include <cdio/cdio.h> #include <cdio/cdio.h>
#include <cdio/logging.h>
#include <cdio/scsi_mmc.h> #include <cdio/scsi_mmc.h>
#include "cdio_private.h" #include "cdio_private.h"
@@ -184,8 +185,8 @@ scsi_mmc_read_sectors ( const CdIo *cdio, void *p_buf, lba_t lba,
} }
int int
set_bsize_mmc ( const void *p_env, scsi_mmc_set_bsize_private ( const void *p_env,
const scsi_mmc_run_cmd_fn_t *run_scsi_mmc_cmd, const scsi_mmc_run_cmd_fn_t run_scsi_mmc_cmd,
unsigned int bsize) unsigned int bsize)
{ {
scsi_mmc_cdb_t cdb = {{0, }}; scsi_mmc_cdb_t cdb = {{0, }};
@@ -220,7 +221,7 @@ set_bsize_mmc ( const void *p_env,
cdb.field[1] = 1 << 4; cdb.field[1] = 1 << 4;
cdb.field[4] = 12; cdb.field[4] = 12;
return (*run_scsi_mmc_cmd) (p_env, DEFAULT_TIMEOUT_MS, return run_scsi_mmc_cmd (p_env, DEFAULT_TIMEOUT_MS,
scsi_mmc_get_cmd_len(cdb.field[0]), &cdb, scsi_mmc_get_cmd_len(cdb.field[0]), &cdb,
SCSI_MMC_DATA_WRITE, sizeof(mh), &mh); SCSI_MMC_DATA_WRITE, sizeof(mh), &mh);
} }
@@ -229,14 +230,15 @@ int
scsi_mmc_set_bsize ( const CdIo *cdio, unsigned int bsize) scsi_mmc_set_bsize ( const CdIo *cdio, unsigned int bsize)
{ {
if ( ! cdio ) return -2; if ( ! cdio ) return -2;
return set_bsize_mmc (cdio->env, (&cdio->op.run_scsi_mmc_cmd), bsize); return
scsi_mmc_set_bsize_private (cdio->env, cdio->op.run_scsi_mmc_cmd, bsize);
} }
/*! /*!
Get the DVD type associated with cd object. Get the DVD type associated with cd object.
*/ */
discmode_t discmode_t
get_dvd_struct_physical_mmc ( void *p_env, scsi_mmc_get_dvd_struct_physical_private ( void *p_env,
const scsi_mmc_run_cmd_fn_t run_scsi_mmc_cmd, const scsi_mmc_run_cmd_fn_t run_scsi_mmc_cmd,
cdio_dvd_struct_t *s) cdio_dvd_struct_t *s)
{ {
@@ -298,8 +300,96 @@ discmode_t
scsi_mmc_get_dvd_struct_physical ( const CdIo *p_cdio, cdio_dvd_struct_t *s) scsi_mmc_get_dvd_struct_physical ( const CdIo *p_cdio, cdio_dvd_struct_t *s)
{ {
if ( ! p_cdio ) return -2; if ( ! p_cdio ) return -2;
return get_dvd_struct_physical_mmc (p_cdio->env, return
scsi_mmc_get_dvd_struct_physical_private (p_cdio->env,
p_cdio->op.run_scsi_mmc_cmd, p_cdio->op.run_scsi_mmc_cmd,
s); s);
} }
/*!
Return the media catalog number MCN.
Note: string is malloc'd so caller should free() then returned
string when done with it.
*/
char *
scsi_mmc_get_mcn_private ( void *p_env,
const scsi_mmc_run_cmd_fn_t run_scsi_mmc_cmd
)
{
scsi_mmc_cdb_t cdb = {{0, }};
char buf[28] = { 0, };
int i_status;
if ( ! p_env || ! run_scsi_mmc_cmd )
return NULL;
CDIO_MMC_SET_COMMAND(cdb.field, CDIO_MMC_GPCMD_READ_SUBCHANNEL);
cdb.field[1] = 0x0;
cdb.field[2] = 0x40;
cdb.field[3] = CDIO_SUBCHANNEL_MEDIA_CATALOG;
CDIO_MMC_SET_READ_LENGTH(cdb.field, sizeof(buf));
i_status = run_scsi_mmc_cmd(p_env, DEFAULT_TIMEOUT_MS,
scsi_mmc_get_cmd_len(cdb.field[0]),
&cdb, SCSI_MMC_DATA_READ,
sizeof(buf), buf);
if(i_status == 0) {
return strdup(&buf[9]);
}
return NULL;
}
char *
scsi_mmc_get_mcn ( const CdIo *p_cdio )
{
if ( ! p_cdio ) return NULL;
return scsi_mmc_get_mcn_private (p_cdio->env,
p_cdio->op.run_scsi_mmc_cmd );
}
/*
Read cdtext information for a CdIo object .
return true on success, false on error or CD-TEXT information does
not exist.
*/
bool
scsi_mmc_init_cdtext_private ( void *p_user_data,
const scsi_mmc_run_cmd_fn_t run_scsi_mmc_cmd,
set_cdtext_field_fn_t set_cdtext_field_fn
)
{
generic_img_private_t *p_env = p_user_data;
scsi_mmc_cdb_t cdb = {{0, }};
char wdata[5000] = { 0, };
int i_status;
if ( ! p_env || ! run_scsi_mmc_cmd )
return false;
/* Operation code */
CDIO_MMC_SET_COMMAND(cdb.field, CDIO_MMC_GPCMD_READ_TOC);
/* Format */
cdb.field[2] = CDIO_MMC_READTOC_FMT_CDTEXT;
CDIO_MMC_SET_READ_LENGTH(cdb.field, sizeof(wdata));
errno = 0;
i_status = run_scsi_mmc_cmd (p_env, DEFAULT_TIMEOUT_MS,
scsi_mmc_get_cmd_len(cdb.field[0]),
&cdb, SCSI_MMC_DATA_READ,
sizeof(wdata), &wdata);
if (i_status != 0) {
cdio_info ("CD-TEXT reading failed: %s\n", strerror(errno));
return false;
} else {
return cdtext_data_init(p_env, p_env->i_first_track, wdata,
set_cdtext_field_fn);
}
}

View File

@@ -1,6 +1,6 @@
/* private MMC helper routines. /* private MMC helper routines.
$Id: scsi_mmc_private.h,v 1.4 2004/07/26 04:33:21 rocky Exp $ $Id: scsi_mmc_private.h,v 1.5 2004/07/27 01:06:02 rocky Exp $
Copyright (C) 2004 Rocky Bernstein <rocky@panix.com> Copyright (C) 2004 Rocky Bernstein <rocky@panix.com>
@@ -20,6 +20,7 @@
*/ */
#include <cdio/scsi_mmc.h> #include <cdio/scsi_mmc.h>
#include "cdtext_private.h"
typedef typedef
int (*scsi_mmc_run_cmd_fn_t) ( const void *p_user_data, int i_timeout, int (*scsi_mmc_run_cmd_fn_t) ( const void *p_user_data, int i_timeout,
@@ -28,16 +29,33 @@ int (*scsi_mmc_run_cmd_fn_t) ( const void *p_user_data, int i_timeout,
scsi_mmc_direction_t e_direction, scsi_mmc_direction_t e_direction,
unsigned int i_buf, /*in/out*/ void *p_buf ); unsigned int i_buf, /*in/out*/ void *p_buf );
int set_bsize_mmc ( const void *p_env, int scsi_mmc_set_bsize_mmc_private ( const void *p_env, const
const scsi_mmc_run_cmd_fn_t *run_scsi_mmc_cmd, scsi_mmc_run_cmd_fn_t run_scsi_mmc_cmd,
unsigned int bsize ); unsigned int bsize );
/*! /*!
Get the DVD type associated with cd object. Get the DVD type associated with cd object.
*/ */
discmode_t discmode_t
get_dvd_struct_physical_mmc ( void *p_env, scsi_mmc_get_dvd_struct_physical_private ( void *p_env, const
const scsi_mmc_run_cmd_fn_t run_scsi_mmc_cmd, scsi_mmc_run_cmd_fn_t run_scsi_mmc_cmd,
cdio_dvd_struct_t *s ); cdio_dvd_struct_t *s );
int
scsi_mmc_set_bsize_private ( const void *p_env,
const scsi_mmc_run_cmd_fn_t run_scsi_mmc_cmd,
unsigned int bsize);
char *
scsi_mmc_get_mcn_private ( void *p_env,
const scsi_mmc_run_cmd_fn_t run_scsi_mmc_cmd
);
bool
scsi_mmc_init_cdtext_private ( void *user_data, const
scsi_mmc_run_cmd_fn_t run_scsi_mmc_cmd,
set_cdtext_field_fn_t set_cdtext_field_fn
);