qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 1/5] atapi: kill MODE SENSE(6), fix MODE SENSE(1


From: Kevin Wolf
Subject: Re: [Qemu-devel] [PATCH 1/5] atapi: kill MODE SENSE(6), fix MODE SENSE(10)
Date: Fri, 11 Nov 2011 14:36:48 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:7.0) Gecko/20110927 Thunderbird/7.0

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 <address@hidden>
> Signed-off-by: Paolo Bonzini <address@hidden>
> ---
>  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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]