- GC no longer useful post-patch target and GNU_CONFIGURE_MANPREFIX - Replace stripping in post-install with proper BSD_INSTALL_* calls PR: 200925
313 lines
6.7 KiB
Plaintext
313 lines
6.7 KiB
Plaintext
Fix the cdda_enable bug that would cause the -A tests to fail on
|
|
drives that require a density set
|
|
|
|
Correct a bug that would cause a failed density set to abort out of
|
|
verify_read_command
|
|
|
|
Improve autosense order; non-density-set modes should be chacked
|
|
before even NULL-density modes because there's not necessarily any
|
|
going back (eg, Plextor lets you *set* the mode descriptor density,
|
|
but does not let you read it; it always reports '0')
|
|
|
|
Index: interface/interface.c
|
|
===================================================================
|
|
--- interface/interface.c (revision 15313)
|
|
+++ interface/interface.c (revision 15314)
|
|
@@ -90,11 +90,11 @@
|
|
}
|
|
}
|
|
|
|
+ if(d->bigendianp==-1)d->bigendianp=data_bigendianp(d);
|
|
+
|
|
if((ret=d->enable_cdda(d,1)))
|
|
return(ret);
|
|
|
|
- /* d->select_speed(d,d->maxspeed); most drives are full speed by default */
|
|
- if(d->bigendianp==-1)d->bigendianp=data_bigendianp(d);
|
|
return(0);
|
|
}
|
|
|
|
Index: interface/scsi_interface.c
|
|
===================================================================
|
|
--- interface/scsi_interface.c (revision 15313)
|
|
+++ interface/scsi_interface.c (revision 15314)
|
|
@@ -1298,7 +1298,7 @@
|
|
|
|
static int verify_read_command(cdrom_drive *d){
|
|
int i,j,k;
|
|
- int audioflag=0;
|
|
+ int audioflag=1;
|
|
|
|
int (*enablecommand) (struct cdrom_drive *d, int speed);
|
|
long (*readcommand) (struct cdrom_drive *d, void *p, long begin,
|
|
@@ -1313,7 +1313,7 @@
|
|
for data */
|
|
|
|
if(d->enable_cdda(d,1)==0){
|
|
-
|
|
+ audioflag=0;
|
|
for(i=1;i<=d->tracks;i++){
|
|
if(cdda_track_audiop(d,i)==1){
|
|
long firstsector=cdda_track_firstsector(d,i);
|
|
@@ -1358,115 +1358,111 @@
|
|
/* NEC test must come before sony; the nec drive expects d8 to be
|
|
10 bytes, and a 12 byte verson (Sony) crashes the drive */
|
|
|
|
- for(j=0;j<15;j++){
|
|
- int densitypossible=1;
|
|
-
|
|
- switch(j){
|
|
+ for(i=0;i<5;i++){
|
|
+ switch(i){
|
|
case 0:
|
|
- d->read_audio=scsi_read_28;
|
|
- rs="28 0x,00";
|
|
+ d->density=0;
|
|
+ d->enable_cdda=Dummy;
|
|
+ es="none ";
|
|
break;
|
|
case 1:
|
|
- d->read_audio=scsi_read_A8;
|
|
- rs="a8 0x,00";
|
|
+ d->density=0;
|
|
+ d->enable_cdda=scsi_enable_cdda;
|
|
+ es="yes/0x00";
|
|
break;
|
|
-
|
|
case 2:
|
|
- d->read_audio=scsi_read_mmcB;
|
|
- rs="be 02,10";
|
|
- densitypossible=0;
|
|
+ d->density=0x04;
|
|
+ d->enable_cdda=scsi_enable_cdda;
|
|
+ es="yes/0x04";
|
|
break;
|
|
case 3:
|
|
- d->read_audio=scsi_read_mmc2B;
|
|
- rs="be 02,f8";
|
|
- densitypossible=0;
|
|
+ d->density=0x82;
|
|
+ d->enable_cdda=scsi_enable_cdda;
|
|
+ es="yes/0x82";
|
|
break;
|
|
case 4:
|
|
- d->read_audio=scsi_read_mmc3B;
|
|
- rs="be 06,f8";
|
|
- densitypossible=0;
|
|
+ d->density=0x81;
|
|
+ d->enable_cdda=scsi_enable_cdda;
|
|
+ es="yes/0x81";
|
|
break;
|
|
+ }
|
|
|
|
- case 5:
|
|
- d->read_audio=scsi_read_mmc;
|
|
- rs="be 00,10";
|
|
- densitypossible=0;
|
|
- break;
|
|
- case 6:
|
|
- d->read_audio=scsi_read_mmc2;
|
|
- rs="be 00,f8";
|
|
- densitypossible=0;
|
|
- break;
|
|
- case 7:
|
|
- d->read_audio=scsi_read_mmc3;
|
|
- rs="be 04,f8";
|
|
- densitypossible=0;
|
|
- break;
|
|
-
|
|
- case 8:
|
|
- d->read_audio=scsi_read_msf;
|
|
- rs="b9 00,10";
|
|
- densitypossible=0;
|
|
- break;
|
|
- case 9:
|
|
- d->read_audio=scsi_read_msf2;
|
|
- rs="b9 00,f8";
|
|
- densitypossible=0;
|
|
- break;
|
|
- case 10:
|
|
- d->read_audio=scsi_read_msf3;
|
|
- rs="b9 04,f8";
|
|
- densitypossible=0;
|
|
- break;
|
|
-
|
|
- case 11:
|
|
- d->read_audio=scsi_read_D4_10;
|
|
- rs="d4(10)0x";
|
|
- break;
|
|
- case 12:
|
|
- d->read_audio=scsi_read_D4_12;
|
|
- rs="d4(12)0x";
|
|
- break;
|
|
- case 13:
|
|
- d->read_audio=scsi_read_D5;
|
|
- rs="d5 0x,00";
|
|
- break;
|
|
- case 14:
|
|
- d->read_audio=scsi_read_D8;
|
|
- rs="d8 0x,00";
|
|
- break;
|
|
- }
|
|
-
|
|
- for(i=0;i<5;i++){
|
|
- switch(i){
|
|
+ for(j=0;j<15;j++){
|
|
+
|
|
+ switch(j){
|
|
case 0:
|
|
- d->density=0;
|
|
- d->enable_cdda=Dummy;
|
|
- es="none ";
|
|
- if(!densitypossible)i=5; /* short circuit MMC style commands */
|
|
+ d->read_audio=scsi_read_28;
|
|
+ rs="28 0x,00";
|
|
break;
|
|
case 1:
|
|
- d->density=0;
|
|
- d->enable_cdda=scsi_enable_cdda;
|
|
- es="yes/0x00";
|
|
+ d->read_audio=scsi_read_A8;
|
|
+ rs="a8 0x,00";
|
|
break;
|
|
+
|
|
+ /* 2 through 10 do not allow/require density */
|
|
case 2:
|
|
- d->density=0x04;
|
|
- d->enable_cdda=scsi_enable_cdda;
|
|
- es="yes/0x04";
|
|
- break;
|
|
+ d->read_audio=scsi_read_mmcB;
|
|
+ rs="be 02,10";
|
|
+ if(i==0)break;
|
|
case 3:
|
|
- d->density=0x82;
|
|
- d->enable_cdda=scsi_enable_cdda;
|
|
- es="yes/0x82";
|
|
- break;
|
|
+ j=3;
|
|
+ d->read_audio=scsi_read_mmc2B;
|
|
+ rs="be 02,f8";
|
|
+ if(i==0)break;
|
|
case 4:
|
|
- d->density=0x81;
|
|
- d->enable_cdda=scsi_enable_cdda;
|
|
- es="yes/0x81";
|
|
+ j=4;
|
|
+ d->read_audio=scsi_read_mmc3B;
|
|
+ rs="be 06,f8";
|
|
+ if(i==0)break;
|
|
+ case 5:
|
|
+ j=5;
|
|
+ d->read_audio=scsi_read_mmc;
|
|
+ rs="be 00,10";
|
|
+ if(i==0)break;
|
|
+ case 6:
|
|
+ j=6;
|
|
+ d->read_audio=scsi_read_mmc2;
|
|
+ rs="be 00,f8";
|
|
+ if(i==0)break;
|
|
+ case 7:
|
|
+ j=7;
|
|
+ d->read_audio=scsi_read_mmc3;
|
|
+ rs="be 04,f8";
|
|
+ if(i==0)break;
|
|
+ case 8:
|
|
+ j=8;
|
|
+ d->read_audio=scsi_read_msf;
|
|
+ rs="b9 00,10";
|
|
+ if(i==0)break;
|
|
+ case 9:
|
|
+ j=9;
|
|
+ d->read_audio=scsi_read_msf2;
|
|
+ rs="b9 00,f8";
|
|
+ if(i==0)break;
|
|
+ case 10:
|
|
+ j=10;
|
|
+ d->read_audio=scsi_read_msf3;
|
|
+ rs="b9 04,f8";
|
|
+ if(i==0)break;
|
|
+
|
|
+ case 11:
|
|
+ d->read_audio=scsi_read_D4_10;
|
|
+ rs="d4(10)0x";
|
|
break;
|
|
+ case 12:
|
|
+ d->read_audio=scsi_read_D4_12;
|
|
+ rs="d4(12)0x";
|
|
+ break;
|
|
+ case 13:
|
|
+ d->read_audio=scsi_read_D5;
|
|
+ rs="d5 0x,00";
|
|
+ break;
|
|
+ case 14:
|
|
+ d->read_audio=scsi_read_D8;
|
|
+ rs="d8 0x,00";
|
|
+ break;
|
|
}
|
|
-
|
|
+
|
|
cdmessage(d,"\ttest -> density: [");
|
|
cdmessage(d,es);
|
|
cdmessage(d,"] command: [");
|
|
@@ -1525,21 +1521,21 @@
|
|
if(zeroflag){
|
|
char buffer[256];
|
|
sprintf(buffer,"\t\tDrive returned %d packet(s), but contents\n"
|
|
- "\t\twere entirely zero\n",zeroflag);
|
|
+ "\t\twere entirely zero\n",zeroflag);
|
|
cdmessage(d,buffer);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
+
|
|
/* D'oh. */
|
|
d->density=density;
|
|
d->read_audio=readcommand;
|
|
d->enable_cdda=enablecommand;
|
|
-
|
|
+
|
|
cdmessage(d,"\tUnable to find any suitable command set from probe;\n"
|
|
"\tdrive probably not CDDA capable.\n");
|
|
-
|
|
+
|
|
cderror(d,"006: Could not read any data from drive\n");
|
|
|
|
}
|
|
@@ -1690,33 +1686,20 @@
|
|
if(d->is_atapi)d->lun=0; /* it should already be; just to make sure */
|
|
|
|
if(d->is_mmc){
|
|
-
|
|
d->read_audio = scsi_read_mmc2B;
|
|
d->bigendianp=0;
|
|
-
|
|
check_exceptions(d,mmc_list);
|
|
-
|
|
}else{
|
|
-
|
|
if(d->is_atapi){
|
|
/* Not MMC maybe still uses 0xbe */
|
|
-
|
|
d->read_audio = scsi_read_mmc2B;
|
|
d->bigendianp=0;
|
|
-
|
|
check_exceptions(d,atapi_list);
|
|
-
|
|
}else{
|
|
-
|
|
check_exceptions(d,scsi_list);
|
|
-
|
|
}
|
|
}
|
|
|
|
- if(!d->is_atapi)set_sectorsize(d,2048); /* we really do want the
|
|
- sector size at 2048 to begin.*/
|
|
- d->enable_cdda(d,0);
|
|
-
|
|
d->read_toc = (!memcmp(d->drive_model, "IMS", 3) && !d->is_atapi) ? scsi_read_toc2 :
|
|
scsi_read_toc;
|
|
d->set_speed = scsi_set_speed;
|