qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [5452] Fix IDE DIAGNOSE for packet devices (Vincent Sanders


From: Anthony Liguori
Subject: [Qemu-devel] [5452] Fix IDE DIAGNOSE for packet devices (Vincent Sanders)
Date: Thu, 09 Oct 2008 14:19:35 +0000

Revision: 5452
          http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=5452
Author:   aliguori
Date:     2008-10-09 14:19:34 +0000 (Thu, 09 Oct 2008)

Log Message:
-----------
Fix IDE DIAGNOSE for packet devices (Vincent Sanders)

The DIAGNOSE command in the qemu IDE implementation has an error when
use dfor packet devices. 

The status register value is dependant on the drive being a packet
device or not, this patch corrects the returned status.

>From the ATA/PI specification (V6 draft):

"If the device implements the PACKET command feature set, the device
SHALL clear bits 6,5,4,3,2 and 0 in the Status register to zero."

A selection of physical devices have been checked and do conform to
the specifications behaviour.

Signed-off-by: Vincent Sanders <address@hidden>
Signed-off-by: Anthony Liguori <address@hidden>

Modified Paths:
--------------
    trunk/hw/ide.c

Modified: trunk/hw/ide.c
===================================================================
--- trunk/hw/ide.c      2008-10-08 19:50:24 UTC (rev 5451)
+++ trunk/hw/ide.c      2008-10-09 14:19:34 UTC (rev 5452)
@@ -2308,8 +2308,15 @@
             break;
         case WIN_DIAGNOSE:
             ide_set_signature(s);
-            s->status = READY_STAT | SEEK_STAT;
-            s->error = 0x01;
+            if (s->is_cdrom)
+                s->status = 0; /* ATAPI spec (v6) section 9.10 defines packet
+                                * devices to return a clear status register
+                                * with READY_STAT *not* set. */
+            else
+                s->status = READY_STAT | SEEK_STAT;
+            s->error = 0x01; /* Device 0 passed, Device 1 passed or not
+                              * present. 
+                              */
             ide_set_irq(s);
             break;
         case WIN_SRST:






reply via email to

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