[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 20/21] pckbd: adding new fields to vmstate
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PULL 20/21] pckbd: adding new fields to vmstate |
Date: |
Fri, 12 Sep 2014 15:58:57 +0200 |
From: Pavel Dovgalyuk <address@hidden>
This patch adds outport to VMState to allow correct saving and restoring
the state of PC keyboard controller.
Signed-off-by: Pavel Dovgalyuk <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
hw/input/pckbd.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 51 insertions(+)
diff --git a/hw/input/pckbd.c b/hw/input/pckbd.c
index 2ab8c87..2b0cd3d 100644
--- a/hw/input/pckbd.c
+++ b/hw/input/pckbd.c
@@ -131,6 +131,7 @@ typedef struct KBDState {
uint8_t status;
uint8_t mode;
uint8_t outport;
+ bool outport_present;
/* Bitmask of devices with data available. */
uint8_t pending;
void *kbd;
@@ -367,18 +368,68 @@ static void kbd_reset(void *opaque)
s->mode = KBD_MODE_KBD_INT | KBD_MODE_MOUSE_INT;
s->status = KBD_STAT_CMD | KBD_STAT_UNLOCKED;
s->outport = KBD_OUT_RESET | KBD_OUT_A20;
+ s->outport_present = false;
+}
+
+static uint8_t kbd_outport_default(KBDState *s)
+{
+ return KBD_OUT_RESET | KBD_OUT_A20
+ | (s->status & KBD_STAT_OBF ? KBD_OUT_OBF : 0)
+ | (s->status & KBD_STAT_MOUSE_OBF ? KBD_OUT_MOUSE_OBF : 0);
+}
+
+static int kbd_outport_post_load(void *opaque, int version_id)
+{
+ KBDState *s = opaque;
+ s->outport_present = true;
+ return 0;
+}
+
+static const VMStateDescription vmstate_kbd_outport = {
+ .name = "pckbd_outport",
+ .version_id = 1,
+ .minimum_version_id = 1,
+ .post_load = kbd_outport_post_load,
+ .fields = (VMStateField[]) {
+ VMSTATE_UINT8(outport, KBDState),
+ VMSTATE_END_OF_LIST()
+ }
+};
+
+static bool kbd_outport_needed(void *opaque)
+{
+ KBDState *s = opaque;
+ return s->outport != kbd_outport_default(s);
+}
+
+static int kbd_post_load(void *opaque, int version_id)
+{
+ KBDState *s = opaque;
+ if (!s->outport_present) {
+ s->outport = kbd_outport_default(s);
+ }
+ s->outport_present = false;
+ return 0;
}
static const VMStateDescription vmstate_kbd = {
.name = "pckbd",
.version_id = 3,
.minimum_version_id = 3,
+ .post_load = kbd_post_load,
.fields = (VMStateField[]) {
VMSTATE_UINT8(write_cmd, KBDState),
VMSTATE_UINT8(status, KBDState),
VMSTATE_UINT8(mode, KBDState),
VMSTATE_UINT8(pending, KBDState),
VMSTATE_END_OF_LIST()
+ },
+ .subsections = (VMStateSubsection[]) {
+ {
+ .vmsd = &vmstate_kbd_outport,
+ .needed = kbd_outport_needed,
+ },
+ VMSTATE_END_OF_LIST()
}
};
--
2.1.0
- [Qemu-devel] [PULL 10/21] exec: report error when memory < hpagesize, (continued)
- [Qemu-devel] [PULL 10/21] exec: report error when memory < hpagesize, Paolo Bonzini, 2014/09/12
- [Qemu-devel] [PULL 05/21] rules.mak: Fix DSO build by pulling in archive symbols, Paolo Bonzini, 2014/09/12
- [Qemu-devel] [PULL 13/21] apic_common: vapic_paddr synchronization fix, Paolo Bonzini, 2014/09/12
- [Qemu-devel] [PULL 14/21] cpu: init vmstate for ticks and clock offset, Paolo Bonzini, 2014/09/12
- [Qemu-devel] [PULL 15/21] fdc: adding vmstate for save/restore, Paolo Bonzini, 2014/09/12
- [Qemu-devel] [PULL 12/21] vl: use QLIST_FOREACH_SAFE to visit change state handlers, Paolo Bonzini, 2014/09/12
- [Qemu-devel] [PULL 16/21] parallel: adding vmstate for save/restore, Paolo Bonzini, 2014/09/12
- [Qemu-devel] [PULL 17/21] serial: fixing vmstate for save/restore, Paolo Bonzini, 2014/09/12
- [Qemu-devel] [PULL 19/21] mc146818rtc: add missed field to vmstate, Paolo Bonzini, 2014/09/12
- [Qemu-devel] [PULL 18/21] piix: do not set irq while loading vmstate, Paolo Bonzini, 2014/09/12
- [Qemu-devel] [PULL 20/21] pckbd: adding new fields to vmstate,
Paolo Bonzini <=
- [Qemu-devel] [PULL 21/21] gdbstub: init mon_chr through qemu_chr_alloc, Paolo Bonzini, 2014/09/12
- Re: [Qemu-devel] [PULL 00/21] KVM, memory, build, migration changes for 2014-09-11, Peter Maydell, 2014/09/15