X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fdevices%2F8254.c;h=b945d2b2ffceefc887d60812c6400edb0b276213;hb=0dc44b36f3d1f95efe8fe96484e76e65aeebd197;hp=4c3a8af70856864283d3af3341a67b9c6ef888b6;hpb=030c1391e319bfeb97ed16fa1dd76545ab3f5f9d;p=palacios-OLD.git diff --git a/palacios/src/devices/8254.c b/palacios/src/devices/8254.c index 4c3a8af..b945d2b 100644 --- a/palacios/src/devices/8254.c +++ b/palacios/src/devices/8254.c @@ -660,11 +660,66 @@ static int pit_free(void * private_data) { return 0; } +#ifdef CONFIG_KEYED_STREAMS +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; + + +} +#endif + +static struct v3_device_ops dev_ops = { + .free = (int (*)(void *))pit_free, +#ifdef CONFIG_KEYED_STREAMS + .checkpoint = pit_checkpoint, + .restore = pit_restore, +#endif }; #include