Enabled recognition of QEMU DVD-ROM 0.12 as ATAPI drive
This commit is contained in:
parent
a247f7e7e9
commit
42b6c22dca
@ -1 +1 @@
|
|||||||
#define Cdrskin_timestamP "2011.10.27.094705"
|
#define Cdrskin_timestamP "2011.10.31.164236"
|
||||||
|
@ -1735,6 +1735,7 @@ static int mmc_read_disc_info_al(struct burn_drive *d, int *alloc_len)
|
|||||||
/* ts A70131 : had to move mmc_read_toc() to end of function */
|
/* ts A70131 : had to move mmc_read_toc() to end of function */
|
||||||
int do_read_toc = 0, disc_status, len, old_alloc_len;
|
int do_read_toc = 0, disc_status, len, old_alloc_len;
|
||||||
int ret, number_of_sessions = -1;
|
int ret, number_of_sessions = -1;
|
||||||
|
int key, asc, ascq;
|
||||||
|
|
||||||
BURN_ALLOC_MEM(buf, struct buffer, 1);
|
BURN_ALLOC_MEM(buf, struct buffer, 1);
|
||||||
BURN_ALLOC_MEM(c, struct command, 1);
|
BURN_ALLOC_MEM(c, struct command, 1);
|
||||||
@ -1772,6 +1773,22 @@ static int mmc_read_disc_info_al(struct burn_drive *d, int *alloc_len)
|
|||||||
d->issue_command(d, c);
|
d->issue_command(d, c);
|
||||||
|
|
||||||
if (c->error) {
|
if (c->error) {
|
||||||
|
spc_decode_sense(c->sense, 0, &key, &asc, &ascq);
|
||||||
|
if (key == 5 && asc == 0x20 && ascq == 0) {
|
||||||
|
/* ts B11031 : qemu -cdrom does not know
|
||||||
|
051h READ DISC INFORMATION
|
||||||
|
*/
|
||||||
|
ret = mmc_read_toc_fmt0(d);
|
||||||
|
if (ret > 0) {
|
||||||
|
|
||||||
|
/* >>> ??? anything more to be set ? */;
|
||||||
|
|
||||||
|
mmc_read_capacity(d);
|
||||||
|
*alloc_len = 0;
|
||||||
|
goto ex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
d->busy = BURN_DRIVE_IDLE;
|
d->busy = BURN_DRIVE_IDLE;
|
||||||
{ret = 0; goto ex;}
|
{ret = 0; goto ex;}
|
||||||
}
|
}
|
||||||
|
@ -398,6 +398,8 @@ static int spc_sense_caps_al(struct burn_drive *d, int *alloc_len, int flag)
|
|||||||
2Ah is part of MMC-1 to MMC-3. In MMC-1 5.2.3.4. it has 22 bytes,
|
2Ah is part of MMC-1 to MMC-3. In MMC-1 5.2.3.4. it has 22 bytes,
|
||||||
in MMC-3 6.3.11 there are at least 28 bytes plus a variable length
|
in MMC-3 6.3.11 there are at least 28 bytes plus a variable length
|
||||||
set of speed descriptors. In MMC-5 E.11 it is declared "legacy".
|
set of speed descriptors. In MMC-5 E.11 it is declared "legacy".
|
||||||
|
ts B11031 : qemu emulates a pre-MMC-1 "DVD-ROM" (which makes not
|
||||||
|
much sense as DVD appeared first in MMC-3)
|
||||||
*/
|
*/
|
||||||
/* ts A90603 :
|
/* ts A90603 :
|
||||||
SPC-1 8.3.3 enumerates mode page format bytes from 0 to n and
|
SPC-1 8.3.3 enumerates mode page format bytes from 0 to n and
|
||||||
@ -412,7 +414,8 @@ static int spc_sense_caps_al(struct burn_drive *d, int *alloc_len, int flag)
|
|||||||
page_length = old_alloc_len - 10;
|
page_length = old_alloc_len - 10;
|
||||||
|
|
||||||
/* ts A90602 : 20 asserts page[21]. (see SPC-1 8.3.3) */
|
/* ts A90602 : 20 asserts page[21]. (see SPC-1 8.3.3) */
|
||||||
if (page_length < 20) {
|
/* ts B11031 : qemu drive has a page_length of 18 */
|
||||||
|
if (page_length < 18) {
|
||||||
m->valid = -1;
|
m->valid = -1;
|
||||||
sprintf(msg, "MODE SENSE page 2A too short: %s : %d",
|
sprintf(msg, "MODE SENSE page 2A too short: %s : %d",
|
||||||
d->devname, page_length);
|
d->devname, page_length);
|
||||||
@ -441,7 +444,10 @@ static int spc_sense_caps_al(struct burn_drive *d, int *alloc_len, int flag)
|
|||||||
m->max_read_speed = page[8] * 256 + page[9];
|
m->max_read_speed = page[8] * 256 + page[9];
|
||||||
m->cur_read_speed = page[14] * 256 + page[15];
|
m->cur_read_speed = page[14] * 256 + page[15];
|
||||||
|
|
||||||
|
m->max_write_speed = m->cur_write_speed = 0;
|
||||||
|
if (page_length >= 20)
|
||||||
m->max_write_speed = page[18] * 256 + page[19];
|
m->max_write_speed = page[18] * 256 + page[19];
|
||||||
|
if (page_length >= 22)
|
||||||
m->cur_write_speed = page[20] * 256 + page[21];
|
m->cur_write_speed = page[20] * 256 + page[21];
|
||||||
|
|
||||||
/* ts A61021 : New field to be set by atip (or following MMC-3 info) */
|
/* ts A61021 : New field to be set by atip (or following MMC-3 info) */
|
||||||
@ -542,7 +548,7 @@ ex:
|
|||||||
|
|
||||||
void spc_sense_caps(struct burn_drive *d)
|
void spc_sense_caps(struct burn_drive *d)
|
||||||
{
|
{
|
||||||
int alloc_len, start_len = 30, ret;
|
int alloc_len, start_len = 28, ret;
|
||||||
|
|
||||||
mmc_start_if_needed(d, 1);
|
mmc_start_if_needed(d, 1);
|
||||||
if (mmc_function_spy(d, "sense_caps") <= 0)
|
if (mmc_function_spy(d, "sense_caps") <= 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user