Fix bugs in the ATAPI cdrom driver, by Brandon Philips.
authorths <ths@c046a42c-6fe2-441c-8c8c-71466251a162>
Sun, 19 Aug 2007 21:46:53 +0000 (21:46 +0000)
committerths <ths@c046a42c-6fe2-441c-8c8c-71466251a162>
Sun, 19 Aug 2007 21:46:53 +0000 (21:46 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3124 c046a42c-6fe2-441c-8c8c-71466251a162

hw/ide.c

index 9acb02a85e2c9aed319c4c8d3cde9f1510978477..e84c4d67f95bb113083c0ee889bac2b0a5c39aae 100644 (file)
--- a/hw/ide.c
+++ b/hw/ide.c
@@ -671,7 +671,8 @@ static void ide_transfer_start(IDEState *s, uint8_t *buf, int size,
     s->end_transfer_func = end_transfer_func;
     s->data_ptr = buf;
     s->data_end = buf + size;
-    s->status |= DRQ_STAT;
+    if (!(s->status & ERR_STAT))
+        s->status |= DRQ_STAT;
 }
 
 static void ide_transfer_stop(IDEState *s)
@@ -1969,6 +1970,7 @@ static void ide_ioport_write(void *opaque, uint32_t addr, uint32_t val)
             /* overlapping commands not supported */
             if (s->feature & 0x02)
                 goto abort_cmd;
+            s->status = READY_STAT;
             s->atapi_dma = s->feature & 1;
             s->nsector = 1;
             ide_transfer_start(s, s->io_buffer, ATAPI_PACKET_SIZE,