[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 1/6] atapi: kill MODE SENSE(6), fix MODE SENSE(10
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PATCH v2 1/6] atapi: kill MODE SENSE(6), fix MODE SENSE(10) |
Date: |
Mon, 14 Nov 2011 14:31:47 +0100 |
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 <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
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 d4179a0..0adb27b 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;
@@ -721,7 +716,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;
@@ -740,7 +735,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;
@@ -749,7 +744,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;
@@ -771,7 +766,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;
@@ -1037,7 +1034,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
- [Qemu-devel] [PATCH v2 0/6] scsi/atapi: MMC fixes, Paolo Bonzini, 2011/11/14
- [Qemu-devel] [PATCH v2 1/6] atapi: kill MODE SENSE(6), fix MODE SENSE(10), Paolo Bonzini, 2011/11/14
- [Qemu-devel] [PATCH v2 4/6] scsi: remove block descriptors from CDs, Paolo Bonzini, 2011/11/14
- [Qemu-devel] [PATCH v2 3/6] scsi: fix parsing of allocation length field, Paolo Bonzini, 2011/11/14
- [Qemu-devel] [PATCH v2 2/6] scsi: update list of commands, Paolo Bonzini, 2011/11/14
- [Qemu-devel] [PATCH v2 5/6] scsi: pass down REQUEST SENSE to the device when there is no stored sense, Paolo Bonzini, 2011/11/14
- [Qemu-devel] [PATCH v2 6/6] scsi-block: always use SG_IO for MMC devices, Paolo Bonzini, 2011/11/14
- [Qemu-devel] [PATCH v2 0/6] scsi/atapi: MMC fixes, Paolo Bonzini, 2011/11/14
- [Qemu-devel] [PATCH v2 1/6] atapi: kill MODE SENSE(6), fix MODE SENSE(10),
Paolo Bonzini <=
- [Qemu-devel] [PATCH v2 2/6] scsi: update list of commands, Paolo Bonzini, 2011/11/14
- [Qemu-devel] [PATCH v2 4/6] scsi: remove block descriptors from CDs, Paolo Bonzini, 2011/11/14
- [Qemu-devel] [PATCH v2 5/6] scsi: pass down REQUEST SENSE to the device when there is no stored sense, Paolo Bonzini, 2011/11/14
- [Qemu-devel] [PATCH v2 3/6] scsi: fix parsing of allocation length field, Paolo Bonzini, 2011/11/14
- [Qemu-devel] [PATCH v2 6/6] scsi-block: always use SG_IO for MMC devices, Paolo Bonzini, 2011/11/14
- Re: [Qemu-devel] [PATCH v2 0/6] scsi/atapi: MMC fixes, Kevin Wolf, 2011/11/18