aboutsummaryrefslogtreecommitdiff
path: root/hw/ne2000.c
diff options
context:
space:
mode:
Diffstat (limited to 'hw/ne2000.c')
-rw-r--r--hw/ne2000.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/hw/ne2000.c b/hw/ne2000.c
index e23c6df..14d48ee 100644
--- a/hw/ne2000.c
+++ b/hw/ne2000.c
@@ -648,6 +648,9 @@ static void ne2000_save(QEMUFile* f,void* opaque)
{
NE2000State* s=(NE2000State*)opaque;
+ if (s->pci_dev)
+ pci_device_save(s->pci_dev, f);
+
qemu_put_8s(f, &s->rxcr);
qemu_put_8s(f, &s->cmd);
@@ -673,13 +676,21 @@ static void ne2000_save(QEMUFile* f,void* opaque)
static int ne2000_load(QEMUFile* f,void* opaque,int version_id)
{
NE2000State* s=(NE2000State*)opaque;
+ int ret;
+
+ if (version_id > 3)
+ return -EINVAL;
+
+ if (s->pci_dev && version_id >= 3) {
+ ret = pci_device_load(s->pci_dev, f);
+ if (ret < 0)
+ return ret;
+ }
- if (version_id == 2) {
+ if (version_id >= 2) {
qemu_get_8s(f, &s->rxcr);
- } else if (version_id == 1) {
- s->rxcr = 0x0c;
} else {
- return -EINVAL;
+ s->rxcr = 0x0c;
}
qemu_get_8s(f, &s->cmd);
@@ -810,7 +821,5 @@ void pci_ne2000_init(PCIBus *bus, NICInfo *nd)
s->macaddr[5]);
/* XXX: instance number ? */
- register_savevm("ne2000", 0, 2, ne2000_save, ne2000_load, s);
- register_savevm("ne2000_pci", 0, 1, generic_pci_save, generic_pci_load,
- &d->dev);
+ register_savevm("ne2000", 0, 3, ne2000_save, ne2000_load, s);
}