From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
To: qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Marcelo Tosatti <mtosatti@redhat.com>
Subject: [Qemu-devel] [PATCH v3 04/38] atapi: kill MODE SENSE(6), fix MODE SENSE(10)
Date: Wed, 23 Nov 2011 11:44:54 +0000 [thread overview]
Message-ID: <1322048728-26061-5-git-send-email-stefanha@linux.vnet.ibm.com> (raw)
In-Reply-To: <1322048728-26061-1-git-send-email-stefanha@linux.vnet.ibm.com>
From: Paolo Bonzini <pbonzini@redhat.com>
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 <scdbackup@gmx.net>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
hw/ide/atapi.c | 20 ++++++++------------
1 files changed, 8 insertions(+), 12 deletions(-)
diff --git a/hw/ide/atapi.c b/hw/ide/atapi.c
index 1fed359..8af1cfd 100644
--- a/hw/ide/atapi.c
+++ b/hw/ide/atapi.c
@@ -695,12 +695,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;
@@ -708,7 +703,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;
@@ -727,7 +722,7 @@ static void cmd_mode_sense(IDEState *s, uint8_t *buf)
ide_atapi_cmd_reply(s, 16, max_len);
break;
case MODE_PAGE_AUDIO_CTL:
- cpu_to_ube16(&buf[0], 24 + 6);
+ cpu_to_ube16(&buf[0], 24 - 2);
buf[2] = 0x70;
buf[3] = 0;
buf[4] = 0;
@@ -746,7 +741,7 @@ static void cmd_mode_sense(IDEState *s, uint8_t *buf)
ide_atapi_cmd_reply(s, 24, max_len);
break;
case MODE_PAGE_CAPABILITIES:
- cpu_to_ube16(&buf[0], 28 + 6);
+ cpu_to_ube16(&buf[0], 30 - 2);
buf[2] = 0x70;
buf[3] = 0;
buf[4] = 0;
@@ -755,7 +750,7 @@ static void cmd_mode_sense(IDEState *s, uint8_t *buf)
buf[7] = 0;
buf[8] = MODE_PAGE_CAPABILITIES;
- buf[9] = 28 - 10;
+ buf[9] = 30 - 10;
buf[10] = 0x3b; /* read CDR/CDRW/DVDROM/DVDR/DVDRAM */
buf[11] = 0x00;
@@ -777,7 +772,9 @@ static void cmd_mode_sense(IDEState *s, uint8_t *buf)
buf[25] = 0;
buf[26] = 0;
buf[27] = 0;
- ide_atapi_cmd_reply(s, 28, max_len);
+ buf[28] = 0;
+ buf[29] = 0;
+ ide_atapi_cmd_reply(s, 30, max_len);
break;
default:
goto error_cmd;
@@ -1043,7 +1040,6 @@ static const struct {
[ 0x00 ] = { cmd_test_unit_ready, CHECK_READY },
[ 0x03 ] = { cmd_request_sense, ALLOW_UA },
[ 0x12 ] = { cmd_inquiry, ALLOW_UA },
- [ 0x1a ] = { cmd_mode_sense, /* (6) */ 0 },
[ 0x1b ] = { cmd_start_stop_unit, 0 }, /* [1] */
[ 0x1e ] = { cmd_prevent_allow_medium_removal, 0 },
[ 0x25 ] = { cmd_read_cdvd_capacity, CHECK_READY },
--
1.7.7.1
next prev parent reply other threads:[~2011-11-23 11:46 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-23 11:44 [Qemu-devel] [PATCH v3 00/38] block: generic copy-on-read Stefan Hajnoczi
2011-11-23 11:44 ` [Qemu-devel] [PATCH v3 01/38] Documentation: Add section about iSCSI LUNS to qemu-doc Stefan Hajnoczi
2011-11-23 11:44 ` [Qemu-devel] [PATCH v3 02/38] scsi: fix fw path Stefan Hajnoczi
2011-11-23 11:44 ` [Qemu-devel] [PATCH v3 03/38] scsi-disk: guess geometry Stefan Hajnoczi
2011-11-23 11:44 ` Stefan Hajnoczi [this message]
2011-11-23 11:44 ` [Qemu-devel] [PATCH v3 05/38] scsi: update list of commands Stefan Hajnoczi
2011-11-23 11:44 ` [Qemu-devel] [PATCH v3 06/38] scsi: fix parsing of allocation length field Stefan Hajnoczi
2011-11-23 11:44 ` [Qemu-devel] [PATCH v3 07/38] scsi: remove block descriptors from CDs Stefan Hajnoczi
2011-11-23 11:44 ` [Qemu-devel] [PATCH v3 08/38] scsi: pass down REQUEST SENSE to the device when there is no stored sense Stefan Hajnoczi
2011-11-23 11:44 ` [Qemu-devel] [PATCH v3 09/38] scsi-block: always use SG_IO for MMC devices Stefan Hajnoczi
2011-11-23 11:45 ` [Qemu-devel] [PATCH v3 10/38] virtio-blk: fix cross-endian config space Stefan Hajnoczi
2011-11-23 11:45 ` [Qemu-devel] [PATCH v3 11/38] usb-msd: do not register twice in the boot order Stefan Hajnoczi
2011-11-23 11:45 ` [Qemu-devel] [PATCH v3 12/38] scsi: fix fw path Stefan Hajnoczi
2011-11-23 11:45 ` [Qemu-devel] [PATCH v3 13/38] scsi-generic: add as boot device Stefan Hajnoczi
2011-11-23 11:45 ` [Qemu-devel] [PATCH v3 14/38] qed: adjust the way to get nb_sectors Stefan Hajnoczi
2011-11-23 11:49 ` [Qemu-devel] [PATCH v3 00/38] block: generic copy-on-read Stefan Hajnoczi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1322048728-26061-5-git-send-email-stefanha@linux.vnet.ibm.com \
--to=stefanha@linux.vnet.ibm.com \
--cc=kwolf@redhat.com \
--cc=mtosatti@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).