Revision c9e95029
b/hw/slavio_intctl.c | ||
---|---|---|
374 | 374 |
} |
375 | 375 |
} |
376 | 376 |
|
377 |
static void slavio_intctl_save(QEMUFile *f, void *opaque)
|
|
377 |
static int vmstate_intctl_after_load(void *opaque)
|
|
378 | 378 |
{ |
379 | 379 |
SLAVIO_INTCTLState *s = opaque; |
380 |
int i; |
|
381 | 380 |
|
382 |
for (i = 0; i < MAX_CPUS; i++) { |
|
383 |
qemu_put_be32s(f, &s->slaves[i].intreg_pending); |
|
384 |
} |
|
385 |
qemu_put_be32s(f, &s->intregm_pending); |
|
386 |
qemu_put_be32s(f, &s->intregm_disabled); |
|
387 |
qemu_put_be32s(f, &s->target_cpu); |
|
381 |
slavio_check_interrupts(s, 0); |
|
382 |
return 0; |
|
388 | 383 |
} |
389 | 384 |
|
390 |
static int slavio_intctl_load(QEMUFile *f, void *opaque, int version_id) |
|
391 |
{ |
|
392 |
SLAVIO_INTCTLState *s = opaque; |
|
393 |
int i; |
|
394 |
|
|
395 |
if (version_id != 1) |
|
396 |
return -EINVAL; |
|
385 |
static const VMStateDescription vmstate_intctl_cpu = { |
|
386 |
.name ="slavio_intctl_cpu", |
|
387 |
.version_id = 1, |
|
388 |
.minimum_version_id = 1, |
|
389 |
.minimum_version_id_old = 1, |
|
390 |
.fields = (VMStateField []) { |
|
391 |
VMSTATE_UINT32(intreg_pending, SLAVIO_CPUINTCTLState), |
|
392 |
VMSTATE_END_OF_LIST() |
|
393 |
} |
|
394 |
}; |
|
397 | 395 |
|
398 |
for (i = 0; i < MAX_CPUS; i++) { |
|
399 |
qemu_get_be32s(f, &s->slaves[i].intreg_pending); |
|
396 |
static const VMStateDescription vmstate_intctl = { |
|
397 |
.name ="slavio_intctl", |
|
398 |
.version_id = 1, |
|
399 |
.minimum_version_id = 1, |
|
400 |
.minimum_version_id_old = 1, |
|
401 |
.run_after_load = vmstate_intctl_after_load, |
|
402 |
.fields = (VMStateField []) { |
|
403 |
VMSTATE_STRUCT_ARRAY(slaves, SLAVIO_INTCTLState, MAX_CPUS, 1, |
|
404 |
vmstate_intctl_cpu, SLAVIO_CPUINTCTLState), |
|
405 |
VMSTATE_UINT32(intregm_pending, SLAVIO_INTCTLState), |
|
406 |
VMSTATE_UINT32(intregm_disabled, SLAVIO_INTCTLState), |
|
407 |
VMSTATE_UINT32(target_cpu, SLAVIO_INTCTLState), |
|
408 |
VMSTATE_END_OF_LIST() |
|
400 | 409 |
} |
401 |
qemu_get_be32s(f, &s->intregm_pending); |
|
402 |
qemu_get_be32s(f, &s->intregm_disabled); |
|
403 |
qemu_get_be32s(f, &s->target_cpu); |
|
404 |
slavio_check_interrupts(s, 0); |
|
405 |
return 0; |
|
406 |
} |
|
410 |
}; |
|
407 | 411 |
|
408 | 412 |
static void slavio_intctl_reset(void *opaque) |
409 | 413 |
{ |
... | ... | |
442 | 446 |
s->slaves[i].cpu = i; |
443 | 447 |
s->slaves[i].master = s; |
444 | 448 |
} |
445 |
register_savevm("slavio_intctl", -1, 1, slavio_intctl_save, |
|
446 |
slavio_intctl_load, s); |
|
449 |
vmstate_register(-1, &vmstate_intctl, s); |
|
447 | 450 |
qemu_register_reset(slavio_intctl_reset, s); |
448 | 451 |
slavio_intctl_reset(s); |
449 | 452 |
return 0; |
Also available in: Unified diff