On 2012-08-27 14:21, Pavel Dovgaluk wrote: > Save PC speaker state to remove differences between system > states after saving the snapshot and after loading it again. > This patch is needed for deterministic replay of the execution. > > Signed-off-by: Pavel Dovgalyuk<pavel.dovga...@gmail.com> > --- > hw/pcspk.c | 18 ++++++++++++++++++ > 1 files changed, 18 insertions(+), 0 deletions(-) > > diff --git a/hw/pcspk.c b/hw/pcspk.c > index e430324..3fb3dd1 100644 > --- a/hw/pcspk.c > +++ b/hw/pcspk.c > @@ -159,10 +159,28 @@ static const MemoryRegionOps pcspk_io_ops = { > }, > }; > > +static const VMStateDescription vmstate_spk = { > + .name = "pcspk", > + .version_id = 1, > + .minimum_version_id = 1, > + .minimum_version_id_old = 1, > + .fields = (VMStateField[]) { > + VMSTATE_UINT8_ARRAY(sample_buf, PCSpkState, PCSPK_BUF_LEN),
Can be regenerated on load. > + VMSTATE_UINT32(pit_count, PCSpkState), > + VMSTATE_UINT32(samples, PCSpkState), Same here. > + VMSTATE_UINT32(play_pos, PCSpkState), > + VMSTATE_INT32(data_on, PCSpkState), > + VMSTATE_INT32(dummy_refresh_clock, PCSpkState), > + VMSTATE_END_OF_LIST() > + } > +}; > + > static int pcspk_initfn(ISADevice *dev) > { > PCSpkState *s = DO_UPCAST(PCSpkState, dev, dev); > > + vmstate_register(NULL, 0, &vmstate_spk, s); > + This function is for legacy users only. You have to register the vmstate via pcspk_class_initfn (set vmsd of the device class). > memory_region_init_io(&s->ioport, &pcspk_io_ops, s, "elcr", 1); > isa_register_ioport(dev, &s->ioport, s->iobase); > > > > Jan -- Siemens AG, Corporate Technology, CT RTC ITP SDP-DE Corporate Competence Center Embedded Linux