From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:46084) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ROrEp-0002P0-Ro for qemu-devel@nongnu.org; Fri, 11 Nov 2011 08:33:48 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ROrEo-000653-RW for qemu-devel@nongnu.org; Fri, 11 Nov 2011 08:33:47 -0500 Received: from mx1.redhat.com ([209.132.183.28]:59278) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ROrEo-00064s-J9 for qemu-devel@nongnu.org; Fri, 11 Nov 2011 08:33:46 -0500 Message-ID: <4EBD24F0.9090105@redhat.com> Date: Fri, 11 Nov 2011 14:36:48 +0100 From: Kevin Wolf MIME-Version: 1.0 References: <1320940872-4940-1-git-send-email-pbonzini@redhat.com> <1320940872-4940-2-git-send-email-pbonzini@redhat.com> In-Reply-To: <1320940872-4940-2-git-send-email-pbonzini@redhat.com> Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 1/5] atapi: kill MODE SENSE(6), fix MODE SENSE(10) List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: qemu-devel@nongnu.org, scdbackup@gmx.net, kraxel@redhat.com 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 > Signed-off-by: Paolo Bonzini > --- > 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