Revision da64182c
b/hw/piix_pci.c | ||
---|---|---|
157 | 157 |
static void i440fx_save(QEMUFile* f, void *opaque) |
158 | 158 |
{ |
159 | 159 |
PCII440FXState *d = opaque; |
160 |
int i; |
|
161 | 160 |
|
162 | 161 |
pci_device_save(&d->dev, f); |
163 | 162 |
qemu_put_8s(f, &d->smm_enabled); |
164 |
|
|
165 |
for (i = 0; i < 4; i++) |
|
166 |
qemu_put_be32(f, d->irq_state->piix3->pci_irq_levels[i]); |
|
167 | 163 |
} |
168 | 164 |
|
169 | 165 |
static int i440fx_load(QEMUFile* f, void *opaque, int version_id) |
... | ... | |
171 | 167 |
PCII440FXState *d = opaque; |
172 | 168 |
int ret, i; |
173 | 169 |
|
174 |
if (version_id > 2)
|
|
170 |
if (version_id > 3)
|
|
175 | 171 |
return -EINVAL; |
176 | 172 |
ret = pci_device_load(&d->dev, f); |
177 | 173 |
if (ret < 0) |
... | ... | |
179 | 175 |
i440fx_update_memory_mappings(d); |
180 | 176 |
qemu_get_8s(f, &d->smm_enabled); |
181 | 177 |
|
182 |
if (version_id >= 2)
|
|
178 |
if (version_id == 2)
|
|
183 | 179 |
for (i = 0; i < 4; i++) |
184 | 180 |
d->irq_state->piix3->pci_irq_levels[i] = qemu_get_be32(f); |
185 | 181 |
|
... | ... | |
214 | 210 |
|
215 | 211 |
d->dev.config[0x72] = 0x02; /* SMRAM */ |
216 | 212 |
|
217 |
register_savevm("I440FX", 0, 2, i440fx_save, i440fx_load, d);
|
|
213 |
register_savevm("I440FX", 0, 3, i440fx_save, i440fx_load, d);
|
|
218 | 214 |
return 0; |
219 | 215 |
} |
220 | 216 |
|
... | ... | |
309 | 305 |
memset(d->pci_irq_levels, 0, sizeof(d->pci_irq_levels)); |
310 | 306 |
} |
311 | 307 |
|
312 |
static void piix_save(QEMUFile* f, void *opaque) |
|
308 |
static void piix3_save(QEMUFile* f, void *opaque)
|
|
313 | 309 |
{ |
314 |
PCIDevice *d = opaque; |
|
315 |
pci_device_save(d, f); |
|
310 |
PIIX3State *d = opaque; |
|
311 |
int i; |
|
312 |
|
|
313 |
pci_device_save(&d->dev, f); |
|
314 |
|
|
315 |
for (i = 0; i < 4; i++) |
|
316 |
qemu_put_be32(f, d->pci_irq_levels[i]); |
|
316 | 317 |
} |
317 | 318 |
|
318 |
static int piix_load(QEMUFile* f, void *opaque, int version_id) |
|
319 |
static int piix3_load(QEMUFile* f, void *opaque, int version_id)
|
|
319 | 320 |
{ |
320 |
PCIDevice *d = opaque; |
|
321 |
if (version_id != 2) |
|
321 |
PIIX3State *d = opaque; |
|
322 |
int i, ret; |
|
323 |
|
|
324 |
if (version_id > 3 || version_id < 2) |
|
322 | 325 |
return -EINVAL; |
323 |
return pci_device_load(d, f); |
|
326 |
ret = pci_device_load(&d->dev, f); |
|
327 |
if (ret < 0) |
|
328 |
return ret; |
|
329 |
if (version_id >= 3) { |
|
330 |
for (i = 0; i < 4; i++) |
|
331 |
d->pci_irq_levels[i] = qemu_get_be32(f); |
|
332 |
} |
|
333 |
return 0; |
|
324 | 334 |
} |
325 | 335 |
|
326 | 336 |
static int piix3_initfn(PCIDevice *dev) |
... | ... | |
329 | 339 |
uint8_t *pci_conf; |
330 | 340 |
|
331 | 341 |
isa_bus_new(&d->dev.qdev); |
332 |
register_savevm("PIIX3", 0, 2, piix_save, piix_load, d);
|
|
342 |
register_savevm("PIIX3", 0, 3, piix3_save, piix3_load, d);
|
|
333 | 343 |
|
334 | 344 |
pci_conf = d->dev.config; |
335 | 345 |
pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_INTEL); |
Also available in: Unified diff