Put back some of the GNU/Linux-ism for detecting drive endian-ness.
The data-driven endian correction isn't working correctly. Ultimately though this code should move down into libcdio (and get removed from here.)
This commit is contained in:
@@ -19,7 +19,7 @@ define(RELEASE_NUM, 72)
|
|||||||
define(CDIO_VERSION_STR, 0.$1cvs)
|
define(CDIO_VERSION_STR, 0.$1cvs)
|
||||||
|
|
||||||
AC_PREREQ(2.52)
|
AC_PREREQ(2.52)
|
||||||
AC_REVISION([$Id: configure.ac,v 1.125 2005/01/07 22:15:24 rocky Exp $])dnl
|
AC_REVISION([$Id: configure.ac,v 1.126 2005/01/08 20:39:40 rocky Exp $])dnl
|
||||||
AC_INIT(libcdio, CDIO_VERSION_STR(RELEASE_NUM))
|
AC_INIT(libcdio, CDIO_VERSION_STR(RELEASE_NUM))
|
||||||
AC_CONFIG_SRCDIR(src/cd-info.c)
|
AC_CONFIG_SRCDIR(src/cd-info.c)
|
||||||
AM_INIT_AUTOMAKE
|
AM_INIT_AUTOMAKE
|
||||||
@@ -331,7 +331,7 @@ case $host_os in
|
|||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
linux*)
|
linux*)
|
||||||
AC_CHECK_HEADERS(linux/version.h)
|
AC_CHECK_HEADERS(linux/version.h linux/major.h)
|
||||||
AC_CHECK_HEADERS(linux/cdrom.h, [have_linux_cdrom_h="yes"])
|
AC_CHECK_HEADERS(linux/cdrom.h, [have_linux_cdrom_h="yes"])
|
||||||
if test "x$have_linux_cdrom_h" = "xyes" ; then
|
if test "x$have_linux_cdrom_h" = "xyes" ; then
|
||||||
AC_TRY_COMPILE(,[
|
AC_TRY_COMPILE(,[
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
$Id: cdda.h,v 1.2 2005/01/06 23:34:13 rocky Exp $
|
$Id: cdda.h,v 1.3 2005/01/08 20:39:40 rocky Exp $
|
||||||
|
|
||||||
Copyright (C) 2004, 2005 Rocky Bernstein <rocky@panix.com>
|
Copyright (C) 2004, 2005 Rocky Bernstein <rocky@panix.com>
|
||||||
Copyright (C) 2001 Xiph.org
|
Copyright (C) 2001 Xiph.org
|
||||||
@@ -63,13 +63,17 @@ typedef struct TOC { /* structure of table of contents */
|
|||||||
struct cdrom_drive_s {
|
struct cdrom_drive_s {
|
||||||
|
|
||||||
CdIo_t *p_cdio;
|
CdIo_t *p_cdio;
|
||||||
int opened; /* This struct may just represent a candidate for opening */
|
int opened; /**< This struct may just represent a candidate for opening */
|
||||||
|
|
||||||
char *cdda_device_name;
|
char *cdda_device_name;
|
||||||
|
|
||||||
char *drive_model;
|
char *drive_model;
|
||||||
|
int drive_type;
|
||||||
int interface;
|
int interface;
|
||||||
int bigendianp;
|
int bigendianp; /**< Whether data returned on the CDDA is bigendian or
|
||||||
|
not. 1 if big endian, 0 if little endian and -1 if
|
||||||
|
we don't know.
|
||||||
|
*/
|
||||||
int nsectors;
|
int nsectors;
|
||||||
|
|
||||||
int cd_extra;
|
int cd_extra;
|
||||||
@@ -83,7 +87,7 @@ struct cdrom_drive_s {
|
|||||||
char *errorbuf;
|
char *errorbuf;
|
||||||
char *messagebuf;
|
char *messagebuf;
|
||||||
|
|
||||||
/* functions specific to particular drives/interrfaces */
|
/* functions specific to particular drives/interfaces */
|
||||||
|
|
||||||
int (*enable_cdda) (cdrom_drive_t *d, int onoff);
|
int (*enable_cdda) (cdrom_drive_t *d, int onoff);
|
||||||
int (*read_toc) (cdrom_drive_t *d);
|
int (*read_toc) (cdrom_drive_t *d);
|
||||||
@@ -96,23 +100,12 @@ struct cdrom_drive_s {
|
|||||||
int is_atapi;
|
int is_atapi;
|
||||||
int is_mmc;
|
int is_mmc;
|
||||||
|
|
||||||
/* SCSI command buffer and offset pointers */
|
|
||||||
unsigned char *sg;
|
|
||||||
unsigned char *sg_buffer;
|
|
||||||
unsigned char inqbytes[4];
|
|
||||||
|
|
||||||
/* Scsi parameters and state */
|
/* Scsi parameters and state */
|
||||||
unsigned char density;
|
unsigned char density;
|
||||||
unsigned char orgdens;
|
unsigned char orgdens;
|
||||||
unsigned int orgsize;
|
unsigned int orgsize;
|
||||||
long bigbuff;
|
long bigbuff;
|
||||||
int adjust_ssize;
|
int adjust_ssize;
|
||||||
|
|
||||||
int fua;
|
|
||||||
int lun;
|
|
||||||
|
|
||||||
sigset_t sigset;
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/** autosense functions */
|
/** autosense functions */
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
$Id: cooked_interface.c,v 1.6 2005/01/06 03:38:58 rocky Exp $
|
$Id: cooked_interface.c,v 1.7 2005/01/08 20:39:40 rocky Exp $
|
||||||
|
|
||||||
Copyright (C) 2004, 2005 Rocky Bernstein <rocky@panix.com>
|
Copyright (C) 2004, 2005 Rocky Bernstein <rocky@panix.com>
|
||||||
Original interface.c Copyright (C) 1994-1997
|
Original interface.c Copyright (C) 1994-1997
|
||||||
@@ -171,7 +171,7 @@ verify_read_command(cdrom_drive_t *d)
|
|||||||
|
|
||||||
#include "drive_exceptions.h"
|
#include "drive_exceptions.h"
|
||||||
|
|
||||||
#if CHECK_EXCEPTIONS_FIXED
|
#ifdef HAVE_LINUX_MAJOR_H
|
||||||
static void
|
static void
|
||||||
check_exceptions(cdrom_drive_t *d, const exception_t *list)
|
check_exceptions(cdrom_drive_t *d, const exception_t *list)
|
||||||
{
|
{
|
||||||
@@ -185,14 +185,14 @@ check_exceptions(cdrom_drive_t *d, const exception_t *list)
|
|||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* HAVE_LINUX_MAJOR_H */
|
||||||
|
|
||||||
/* set function pointers to use the ioctl routines */
|
/* set function pointers to use the ioctl routines */
|
||||||
int
|
int
|
||||||
cooked_init_drive (cdrom_drive_t *d){
|
cooked_init_drive (cdrom_drive_t *d){
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
#if BUFSIZE_DETERMINATION_FIXED
|
#if HAVE_LINUX_MAJOR_H
|
||||||
switch(d->drive_type){
|
switch(d->drive_type){
|
||||||
case MATSUSHITA_CDROM_MAJOR: /* sbpcd 1 */
|
case MATSUSHITA_CDROM_MAJOR: /* sbpcd 1 */
|
||||||
case MATSUSHITA_CDROM2_MAJOR: /* sbpcd 2 */
|
case MATSUSHITA_CDROM2_MAJOR: /* sbpcd 2 */
|
||||||
@@ -203,6 +203,8 @@ cooked_init_drive (cdrom_drive_t *d){
|
|||||||
cdmessage(d,"Attempting to set sbpcd buffer size...\n");
|
cdmessage(d,"Attempting to set sbpcd buffer size...\n");
|
||||||
|
|
||||||
d->nsectors=8;
|
d->nsectors=8;
|
||||||
|
|
||||||
|
#if BUFSIZE_DETERMINATION_FIXED
|
||||||
while(1){
|
while(1){
|
||||||
|
|
||||||
/* this ioctl returns zero on error; exactly wrong, but that's
|
/* this ioctl returns zero on error; exactly wrong, but that's
|
||||||
@@ -226,6 +228,7 @@ cooked_init_drive (cdrom_drive_t *d){
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif /* BUFSIZE_DETERMINATION_FIXED */
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case IDE0_MAJOR:
|
case IDE0_MAJOR:
|
||||||
@@ -241,18 +244,9 @@ cooked_init_drive (cdrom_drive_t *d){
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
d->nsectors=40;
|
d->nsectors=25; /* The max for SCSI MMC2 */
|
||||||
}
|
}
|
||||||
#else
|
#endif /*HAVE_LINUX_MAJOR_H*/
|
||||||
{
|
|
||||||
char buffer[256];
|
|
||||||
d->nsectors = 8;
|
|
||||||
sprintf(buffer,"\tSetting read block size at %d sectors (%ld bytes).\n",
|
|
||||||
d->nsectors,(long)d->nsectors*CDIO_CD_FRAMESIZE_RAW);
|
|
||||||
cdmessage(d,buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
d->enable_cdda = Dummy;
|
d->enable_cdda = Dummy;
|
||||||
d->read_audio = cooked_read;
|
d->read_audio = cooked_read;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
$Id: drive_exceptions.h,v 1.2 2005/01/05 04:16:11 rocky Exp $
|
$Id: drive_exceptions.h,v 1.3 2005/01/08 20:39:40 rocky Exp $
|
||||||
|
|
||||||
Copyright (C) 2004 Rocky Bernstein <rocky@panix.com>
|
Copyright (C) 2004 Rocky Bernstein <rocky@panix.com>
|
||||||
Copyright (C) 1998 Monty xiphmont@mit.edu
|
Copyright (C) 1998 Monty xiphmont@mit.edu
|
||||||
@@ -21,7 +21,6 @@
|
|||||||
|
|
||||||
extern int scsi_enable_cdda(cdrom_drive_t *d, int);
|
extern int scsi_enable_cdda(cdrom_drive_t *d, int);
|
||||||
extern long scsi_read_mmc(cdrom_drive_t *d, void *,long,long);
|
extern long scsi_read_mmc(cdrom_drive_t *d, void *,long,long);
|
||||||
extern long scsi_read_mmc2(cdrom_drive_t *d, void *,long,long);
|
|
||||||
extern long scsi_read_D4_10(cdrom_drive_t *, void *,long,long);
|
extern long scsi_read_D4_10(cdrom_drive_t *, void *,long,long);
|
||||||
extern long scsi_read_D4_12(cdrom_drive_t *, void *,long,long);
|
extern long scsi_read_D4_12(cdrom_drive_t *, void *,long,long);
|
||||||
extern long scsi_read_D8(cdrom_drive_t *, void *,long,long);
|
extern long scsi_read_D8(cdrom_drive_t *, void *,long,long);
|
||||||
@@ -40,6 +39,11 @@ typedef struct exception {
|
|||||||
/* specific to general */
|
/* specific to general */
|
||||||
|
|
||||||
#ifdef FINISHED_DRIVE_EXCEPTIONS
|
#ifdef FINISHED_DRIVE_EXCEPTIONS
|
||||||
|
extern long scsi_read_mmc2(cdrom_drive_t *d, void *,long,long);
|
||||||
|
#else
|
||||||
|
#define scsi_read_mmc2 NULL
|
||||||
|
#endif
|
||||||
|
|
||||||
/* list of drives that affect autosensing in ATAPI specific portions of code
|
/* list of drives that affect autosensing in ATAPI specific portions of code
|
||||||
(force drives to detect as ATAPI or SCSI, force ATAPI read command */
|
(force drives to detect as ATAPI or SCSI, force ATAPI read command */
|
||||||
|
|
||||||
@@ -49,7 +53,6 @@ static exception_t atapi_list[]={
|
|||||||
{"SONY CD-ROM CDU-561", 0, 0, Dummy, NULL,0},
|
{"SONY CD-ROM CDU-561", 0, 0, Dummy, NULL,0},
|
||||||
{"Chinon CD-ROM CDS-525", 0, 0, Dummy, NULL,0},
|
{"Chinon CD-ROM CDS-525", 0, 0, Dummy, NULL,0},
|
||||||
{NULL,0,0,NULL,NULL,0}};
|
{NULL,0,0,NULL,NULL,0}};
|
||||||
#endif /*FINISHED_DRIVE_EXCEPTIONS*/
|
|
||||||
|
|
||||||
/* list of drives that affect MMC default settings */
|
/* list of drives that affect MMC default settings */
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
$Id: interface.c,v 1.7 2005/01/06 03:38:58 rocky Exp $
|
$Id: interface.c,v 1.8 2005/01/08 20:39:40 rocky Exp $
|
||||||
|
|
||||||
Copyright (C) 2005 Rocky Bernstein <rocky@panix.com>
|
Copyright (C) 2005 Rocky Bernstein <rocky@panix.com>
|
||||||
Copyright (C) 1998 Monty xiphmont@mit.edu
|
Copyright (C) 1998 Monty xiphmont@mit.edu
|
||||||
@@ -53,7 +53,6 @@ cdda_close(cdrom_drive_t *d)
|
|||||||
_clean_messages(d);
|
_clean_messages(d);
|
||||||
if (d->cdda_device_name) free(d->cdda_device_name);
|
if (d->cdda_device_name) free(d->cdda_device_name);
|
||||||
if (d->drive_model) free(d->drive_model);
|
if (d->drive_model) free(d->drive_model);
|
||||||
if (d->sg) free(d->sg);
|
|
||||||
|
|
||||||
free(d);
|
free(d);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
$Id: scan_devices.c,v 1.6 2005/01/08 00:56:09 rocky Exp $
|
$Id: scan_devices.c,v 1.7 2005/01/08 20:39:40 rocky Exp $
|
||||||
|
|
||||||
Copyright (C) 2004 Rocky Bernstein <rocky@panix.com>
|
Copyright (C) 2004 Rocky Bernstein <rocky@panix.com>
|
||||||
Copyright (C) 1998 Monty xiphmont@mit.edu
|
Copyright (C) 1998 Monty xiphmont@mit.edu
|
||||||
@@ -156,6 +156,11 @@ cdda_identify_cooked(const char *dev, int messagedest, char **messages)
|
|||||||
{
|
{
|
||||||
|
|
||||||
cdrom_drive_t *d=NULL;
|
cdrom_drive_t *d=NULL;
|
||||||
|
struct stat st;
|
||||||
|
#ifdef HAVE_LINUX_MAJOR_H
|
||||||
|
int drive_type = 0;
|
||||||
|
#endif
|
||||||
|
char *description=NULL;
|
||||||
char *device = NULL;
|
char *device = NULL;
|
||||||
CdIo_t *p_cdio = NULL;
|
CdIo_t *p_cdio = NULL;
|
||||||
|
|
||||||
@@ -172,11 +177,78 @@ cdda_identify_cooked(const char *dev, int messagedest, char **messages)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_LINUX_MAJOR_H
|
||||||
|
if ( 0 == stat(device, &st) ) {
|
||||||
|
if (S_ISCHR(st.st_mode) || S_ISBLK(st.st_mode)) {
|
||||||
|
drive_type=(int)(st.st_rdev>>8);
|
||||||
|
switch (drive_type) {
|
||||||
|
case IDE0_MAJOR:
|
||||||
|
case IDE1_MAJOR:
|
||||||
|
case IDE2_MAJOR:
|
||||||
|
case IDE3_MAJOR:
|
||||||
|
/* Yay, ATAPI... */
|
||||||
|
description=strdup("ATAPI compatible ");
|
||||||
|
break;
|
||||||
|
case CDU31A_CDROM_MAJOR:
|
||||||
|
/* major indicates this is a cdrom; no ping necessary. */
|
||||||
|
description=strdup("Sony CDU31A or compatible");
|
||||||
|
break;
|
||||||
|
case CDU535_CDROM_MAJOR:
|
||||||
|
/* major indicates this is a cdrom; no ping necessary. */
|
||||||
|
description=strdup("Sony CDU535 or compatible");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MATSUSHITA_CDROM_MAJOR:
|
||||||
|
case MATSUSHITA_CDROM2_MAJOR:
|
||||||
|
case MATSUSHITA_CDROM3_MAJOR:
|
||||||
|
case MATSUSHITA_CDROM4_MAJOR:
|
||||||
|
/* major indicates this is a cdrom; no ping necessary. */
|
||||||
|
description=strdup("non-ATAPI IDE-style Matsushita/Panasonic CR-5xx or compatible");
|
||||||
|
break;
|
||||||
|
case SANYO_CDROM_MAJOR:
|
||||||
|
description=strdup("Sanyo proprietary or compatible: NOT CDDA CAPABLE");
|
||||||
|
break;
|
||||||
|
case MITSUMI_CDROM_MAJOR:
|
||||||
|
case MITSUMI_X_CDROM_MAJOR:
|
||||||
|
description=strdup("Mitsumi proprietary or compatible: NOT CDDA CAPABLE");
|
||||||
|
break;
|
||||||
|
case OPTICS_CDROM_MAJOR:
|
||||||
|
description=strdup("Optics Dolphin or compatible: NOT CDDA CAPABLE");
|
||||||
|
break;
|
||||||
|
case AZTECH_CDROM_MAJOR:
|
||||||
|
description=strdup("Aztech proprietary or compatible: NOT CDDA CAPABLE");
|
||||||
|
break;
|
||||||
|
case GOLDSTAR_CDROM_MAJOR:
|
||||||
|
description=strdup("Goldstar proprietary: NOT CDDA CAPABLE");
|
||||||
|
break;
|
||||||
|
case CM206_CDROM_MAJOR:
|
||||||
|
description=strdup("Philips/LMS CM206 proprietary: NOT CDDA CAPABLE");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SCSI_CDROM_MAJOR:
|
||||||
|
case SCSI_GENERIC_MAJOR:
|
||||||
|
/* Nope nope nope */
|
||||||
|
idmessage(messagedest,messages,"\t\t%s is not a cooked ioctl CDROM.",
|
||||||
|
device);
|
||||||
|
free(device);
|
||||||
|
return(NULL);
|
||||||
|
default:
|
||||||
|
/* What the hell is this? */
|
||||||
|
idmessage(messagedest,messages,"\t\t%s is not a cooked ioctl CDROM.",
|
||||||
|
device);
|
||||||
|
free(device);
|
||||||
|
return(NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* HAVE_LINUX_MAJOR_H */
|
||||||
|
|
||||||
/* Minimum init */
|
/* Minimum init */
|
||||||
|
|
||||||
d=calloc(1,sizeof(cdrom_drive_t));
|
d=calloc(1,sizeof(cdrom_drive_t));
|
||||||
d->p_cdio = p_cdio;
|
d->p_cdio = p_cdio;
|
||||||
d->cdda_device_name = device;
|
d->cdda_device_name = device;
|
||||||
|
d->drive_type = drive_type;
|
||||||
d->interface = COOKED_IOCTL;
|
d->interface = COOKED_IOCTL;
|
||||||
d->bigendianp = -1; /* We don't know yet... */
|
d->bigendianp = -1; /* We don't know yet... */
|
||||||
d->nsectors = -1;
|
d->nsectors = -1;
|
||||||
@@ -185,28 +257,19 @@ cdda_identify_cooked(const char *dev, int messagedest, char **messages)
|
|||||||
cdio_hwinfo_t hw_info;
|
cdio_hwinfo_t hw_info;
|
||||||
|
|
||||||
if ( scsi_mmc_get_hwinfo( p_cdio, &hw_info ) ) {
|
if ( scsi_mmc_get_hwinfo( p_cdio, &hw_info ) ) {
|
||||||
d->drive_model=calloc(38,1);
|
d->drive_model=calloc(36,1);
|
||||||
snprintf(d->drive_model, 38, "%s %s %s",
|
snprintf(d->drive_model, 36, "%s%s%s ",
|
||||||
hw_info.psz_vendor, hw_info.psz_model, hw_info.psz_revision );
|
hw_info.psz_vendor, hw_info.psz_model, hw_info.psz_revision );
|
||||||
|
catstring(d->drive_model, description);
|
||||||
idmessage(messagedest,messages,"\t\tCDROM sensed: %s\n",
|
idmessage(messagedest,messages,"\t\tCDROM sensed: %s\n",
|
||||||
d->drive_model);
|
d->drive_model);
|
||||||
|
if (description) free(description);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return(d);
|
return(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct sg_id {
|
|
||||||
long l1; /* target | lun << 8 | channel << 16 | low_ino << 24 */
|
|
||||||
long l2; /* Unique id */
|
|
||||||
} sg_id;
|
|
||||||
|
|
||||||
typedef struct scsiid{
|
|
||||||
int bus;
|
|
||||||
int id;
|
|
||||||
int lun;
|
|
||||||
} scsiid;
|
|
||||||
|
|
||||||
#ifdef CDDA_TEST
|
#ifdef CDDA_TEST
|
||||||
|
|
||||||
cdrom_drive_t *cdda_identify_test(const char *filename, int messagedest,
|
cdrom_drive_t *cdda_identify_test(const char *filename, int messagedest,
|
||||||
|
|||||||
Reference in New Issue
Block a user