From: Peter Dinda Date: Thu, 7 Apr 2011 21:13:40 +0000 (-0500) Subject: Added checkpoint and restore support for 8254 (PIT) X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=commitdiff_plain;h=fbe9ba34153fdfd6c67a59b5284b2d23de70e878;p=palacios.git Added checkpoint and restore support for 8254 (PIT) --- diff --git a/palacios/src/devices/8254.c b/palacios/src/devices/8254.c index 4c3a8af..3472669 100644 --- a/palacios/src/devices/8254.c +++ b/palacios/src/devices/8254.c @@ -660,11 +660,63 @@ static int pit_free(void * private_data) { return 0; } +static int pit_checkpoint(struct vm_device *dev, v3_keyed_stream_t stream) +{ + struct pit *p = (struct pit *) (dev->private_data); -static struct v3_device_ops dev_ops = { - .free = (int (*)(void *))pit_free, + v3_keyed_stream_key_t ks; + + ks = v3_keyed_stream_open_key(stream,dev->name); + + if (!ks) { + return -1; + } + + STD_SAVE(stream,ks,p->pit_counter); + STD_SAVE(stream,ks,p->pit_reload); + STD_SAVE(stream,ks,p->ch_0); + STD_SAVE(stream,ks,p->ch_1); + STD_SAVE(stream,ks,p->ch_2); + STD_SAVE(stream,ks,p->speaker); + + v3_keyed_stream_close_key(stream,ks); + + return 0; + + +} + +static int pit_restore(struct vm_device *dev, v3_keyed_stream_t stream) +{ + struct pit *p = (struct pit *) (dev->private_data); + v3_keyed_stream_key_t ks; + ks = v3_keyed_stream_open_key(stream,dev->name); + + if (!ks) { + return -1; + } + + STD_LOAD(stream,ks,p->pit_counter); + STD_LOAD(stream,ks,p->pit_reload); + STD_LOAD(stream,ks,p->ch_0); + STD_LOAD(stream,ks,p->ch_1); + STD_LOAD(stream,ks,p->ch_2); + STD_LOAD(stream,ks,p->speaker); + + v3_keyed_stream_close_key(stream,ks); + + return 0; + + +} + + +static struct v3_device_ops dev_ops = { + .free = (int (*)(void *))pit_free, + .checkpoint = pit_checkpoint, + .restore = pit_restore, }; #include