Am 10.11.2011 17:01, schrieb Paolo Bonzini: > Mode page 2A of emulated ATAPI DVD-ROM should have page length 0x14 > like SCSI CD-ROM, rather than 0x12. > > Mode page length is off by 8, as it should contain the length of the > payload after the first two bytes. > > MODE SENSE(6) should be thrown out of ATAPI DVD-ROM emulation. It is > not specified in the ATAPI list of MMC-2, and MMC-5 prescribes to use > MODE SENSE(10). Anyway, its implementation is wrong. > > Reported-by: Thomas Schmitt <scdbac...@gmx.net> > Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> > --- > hw/ide/atapi.c | 21 ++++++++------------- > 1 files changed, 8 insertions(+), 13 deletions(-) > > diff --git a/hw/ide/atapi.c b/hw/ide/atapi.c > index d4179a0..cf0e66b 100644 > --- a/hw/ide/atapi.c > +++ b/hw/ide/atapi.c > @@ -689,12 +689,7 @@ static void cmd_mode_sense(IDEState *s, uint8_t *buf) > int action, code; > int max_len; > > - if (buf[0] == GPCMD_MODE_SENSE_10) { > - max_len = ube16_to_cpu(buf + 7); > - } else { > - max_len = buf[4]; > - } > - > + max_len = ube16_to_cpu(buf + 7); > action = buf[2] >> 6; > code = buf[2] & 0x3f; > > @@ -702,7 +697,7 @@ static void cmd_mode_sense(IDEState *s, uint8_t *buf) > case 0: /* current values */ > switch(code) { > case MODE_PAGE_R_W_ERROR: /* error recovery */ > - cpu_to_ube16(&buf[0], 16 + 6); > + cpu_to_ube16(&buf[0], 16 - 2); > buf[2] = 0x70; > buf[3] = 0; > buf[4] = 0; > @@ -717,11 +712,10 @@ static void cmd_mode_sense(IDEState *s, uint8_t *buf) > buf[12] = 0x00; > buf[13] = 0x00; > buf[14] = 0x00; > - buf[15] = 0x00;
Why did you drop this? It still seems to be part of the buffer. Kevin