Inquiring GET PERFORMANCE independently of existence of mode page 2A
This commit is contained in:
parent
b6afe92e47
commit
31abdedade
@ -1 +1 @@
|
||||
#define Cdrskin_timestamP "2014.02.14.200129"
|
||||
#define Cdrskin_timestamP "2014.02.16.203859"
|
||||
|
@ -406,6 +406,32 @@ void spc_allow(struct burn_drive *d)
|
||||
d->issue_command(d, c);
|
||||
}
|
||||
|
||||
|
||||
/* ts B40216 : Outsourced from spc_sense_caps_al().
|
||||
To be called by spc_sense_caps() after spc_sense_caps_al()
|
||||
*/
|
||||
static int spc_try_get_performance(struct burn_drive *d, int flag)
|
||||
{
|
||||
int ret;
|
||||
struct burn_feature_descr *feature_descr;
|
||||
|
||||
/* ts B40107 : Feature 0x107 announces availability of GET PERFORMANCE
|
||||
Its WSPD bit announces Type 3.
|
||||
Try this even if the feature is not current.
|
||||
*/
|
||||
ret = burn_drive_has_feature(d, 0x107, &feature_descr, 0);
|
||||
if (ret <= 0)
|
||||
return ret;
|
||||
if (feature_descr->data_lenght <= 0)
|
||||
return 1;
|
||||
if (feature_descr->data[0] & 2) /* WSPD */
|
||||
ret = mmc_get_write_performance(d);
|
||||
/* Get read performance */
|
||||
mmc_get_performance(d, 0x00, 0);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
ts A70518 - A90603 : Do not call with *alloc_len < 10
|
||||
*/
|
||||
@ -423,7 +449,6 @@ static int spc_sense_caps_al(struct burn_drive *d, int *alloc_len, int flag)
|
||||
struct command *c = NULL;
|
||||
struct burn_speed_descriptor *sd;
|
||||
char *msg = NULL;
|
||||
struct burn_feature_descr *feature_descr;
|
||||
|
||||
/* ts A61225 : 1 = report about post-MMC-1 speed descriptors */
|
||||
static int speed_debug = 0;
|
||||
@ -552,7 +577,7 @@ static int spc_sense_caps_al(struct burn_drive *d, int *alloc_len, int flag)
|
||||
|
||||
/* ts A61225 : end of MMC-1 , begin of MMC-3 */
|
||||
if (page_length < 30) /* no write speed descriptors ? */
|
||||
goto try_mmc_get_performance;
|
||||
goto no_speed_descriptors;
|
||||
|
||||
m->cur_write_speed = page[28] * 256 + page[29];
|
||||
|
||||
@ -606,26 +631,8 @@ static int spc_sense_caps_al(struct burn_drive *d, int *alloc_len, int flag)
|
||||
"LIBBURN_DEBUG: 5Ah,2Ah min_write_speed = %d , max_write_speed = %d\n",
|
||||
m->min_write_speed, m->max_write_speed);
|
||||
|
||||
try_mmc_get_performance:;
|
||||
/* ts B40107 : Feature 0x107 announces availability of GET PERFORMANCE
|
||||
Its WSPD bit announces Type 3.
|
||||
Try this even if the feature is not current.
|
||||
*/
|
||||
ret = burn_drive_has_feature(d, 0x107, &feature_descr, 0);
|
||||
if (ret > 0) {
|
||||
if (feature_descr->data_lenght > 0) {
|
||||
if (feature_descr->data[0] & 2) { /* WSPD */
|
||||
ret = mmc_get_write_performance(d);
|
||||
if (ret > 0 && speed_debug)
|
||||
fprintf(stderr,
|
||||
"LIBBURN_DEBUG: ACh min_write_speed = %d , max_write_speed = %d\n",
|
||||
m->min_write_speed,
|
||||
m->max_write_speed);
|
||||
}
|
||||
/* Get read performance */
|
||||
mmc_get_performance(d, 0x00, 0);
|
||||
}
|
||||
}
|
||||
no_speed_descriptors:;
|
||||
|
||||
ret = !was_error;
|
||||
ex:
|
||||
BURN_FREE_MEM(msg);
|
||||
@ -654,7 +661,7 @@ void spc_sense_caps(struct burn_drive *d)
|
||||
*/
|
||||
ret = spc_sense_caps_al(d, &alloc_len, 1);
|
||||
if (ret == 2)
|
||||
return;
|
||||
goto try_get_performance;
|
||||
}
|
||||
/* ts B11103:
|
||||
qemu ATAPI DVD-ROM delivers only 28.
|
||||
@ -664,6 +671,9 @@ void spc_sense_caps(struct burn_drive *d)
|
||||
if (alloc_len >= minimum_len && ret > 0)
|
||||
/* second execution with announced length */
|
||||
spc_sense_caps_al(d, &alloc_len, 0);
|
||||
|
||||
try_get_performance:;
|
||||
spc_try_get_performance(d, 0);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user