@@ -3368,6 +3368,8 @@ static void piix3_reset(void *opaque)
for (i = 0; i < 2; i++)
ide_dma_cancel(&d->bmdma[i]);
+ for (i = 0; i < 4; i++)
+ ide_reset(&d->ide_if[i]);
pci_conf[0x04] = 0x00;
pci_conf[0x05] = 0x00;
@@ -3399,9 +3401,6 @@ void pci_piix3_ide_init(PCIBus *bus, BlockDriverState **hd_table, int devfn,
pci_config_set_class(pci_conf, PCI_CLASS_STORAGE_IDE);
pci_conf[PCI_HEADER_TYPE] = PCI_HEADER_TYPE_NORMAL; // header_type
- qemu_register_reset(piix3_reset, d);
- piix3_reset(d);
-
pci_register_bar((PCIDevice *)d, 4, 0x10,
PCI_ADDRESS_SPACE_IO, bmdma_map);
@@ -3414,6 +3413,9 @@ void pci_piix3_ide_init(PCIBus *bus, BlockDriverState **hd_table, int devfn,
if (hd_table[i])
hd_table[i]->private = &d->dev;
+ qemu_register_reset(piix3_reset, d);
+ piix3_reset(d);
+
register_savevm("ide", 0, 2, pci_ide_save, pci_ide_load, d);
}
@@ -3439,9 +3441,6 @@ void pci_piix4_ide_init(PCIBus *bus, BlockDriverState **hd_table, int devfn,
pci_config_set_class(pci_conf, PCI_CLASS_STORAGE_IDE);
pci_conf[PCI_HEADER_TYPE] = PCI_HEADER_TYPE_NORMAL; // header_type
- qemu_register_reset(piix3_reset, d);
- piix3_reset(d);
-
pci_register_bar((PCIDevice *)d, 4, 0x10,
PCI_ADDRESS_SPACE_IO, bmdma_map);
@@ -3450,6 +3449,9 @@ void pci_piix4_ide_init(PCIBus *bus, BlockDriverState **hd_table, int devfn,
ide_init_ioport(&d->ide_if[0], 0x1f0, 0x3f6);
ide_init_ioport(&d->ide_if[2], 0x170, 0x376);
+ qemu_register_reset(piix3_reset, d);
+ piix3_reset(d);
+
register_savevm("ide", 0, 2, pci_ide_save, pci_ide_load, d);
}