26 lines
854 B
Diff
26 lines
854 B
Diff
|
Index: qemu-0.9.0/hw/ide.c
|
||
|
===================================================================
|
||
|
--- qemu-0.9.0.orig/hw/ide.c
|
||
|
+++ qemu-0.9.0/hw/ide.c
|
||
|
@@ -586,7 +586,9 @@ static void ide_transfer_start(IDEState
|
||
|
s->end_transfer_func = end_transfer_func;
|
||
|
s->data_ptr = buf;
|
||
|
s->data_end = buf + size;
|
||
|
- s->status |= DRQ_STAT;
|
||
|
+ /* don't violate the HSM */
|
||
|
+ if (!(s->status & ERR_STAT))
|
||
|
+ s->status |= DRQ_STAT;
|
||
|
}
|
||
|
|
||
|
static void ide_transfer_stop(IDEState *s)
|
||
|
@@ -1805,6 +1807,7 @@ static void ide_ioport_write(void *opaqu
|
||
|
/* 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,
|
||
|
|
||
|
|