|
@@ -2254,10 +2254,8 @@ static void ide_perform_srst(IDEState *s)
|
|
|
/* Cancel PIO callback, reset registers/signature, etc */
|
|
|
ide_reset(s);
|
|
|
|
|
|
- if (s->drive_kind == IDE_CD) {
|
|
|
- /* ATAPI drives do not set READY or SEEK */
|
|
|
- s->status = 0x00;
|
|
|
- }
|
|
|
+ /* perform diagnostic */
|
|
|
+ cmd_exec_dev_diagnostic(s, WIN_DIAGNOSE);
|
|
|
}
|
|
|
|
|
|
static void ide_bus_perform_srst(void *opaque)
|
|
@@ -2270,6 +2268,8 @@ static void ide_bus_perform_srst(void *opaque)
|
|
|
s = &bus->ifs[i];
|
|
|
ide_perform_srst(s);
|
|
|
}
|
|
|
+
|
|
|
+ bus->cmd &= ~IDE_CTRL_RESET;
|
|
|
}
|
|
|
|
|
|
void ide_ctrl_write(void *opaque, uint32_t addr, uint32_t val)
|
|
@@ -2282,9 +2282,7 @@ void ide_ctrl_write(void *opaque, uint32_t addr, uint32_t val)
|
|
|
|
|
|
/* Device0 and Device1 each have their own control register,
|
|
|
* but QEMU models it as just one register in the controller. */
|
|
|
- if ((bus->cmd & IDE_CTRL_RESET) &&
|
|
|
- !(val & IDE_CTRL_RESET)) {
|
|
|
- /* SRST triggers on falling edge */
|
|
|
+ if (!(bus->cmd & IDE_CTRL_RESET) && (val & IDE_CTRL_RESET)) {
|
|
|
for (i = 0; i < 2; i++) {
|
|
|
s = &bus->ifs[i];
|
|
|
s->status |= BUSY_STAT;
|