提交 5122b431 编写于 作者: J Juan Quintela 提交者: Anthony Liguori

Port i8254 to new VMState design

Signed-off-by: NJuan Quintela <quintela@redhat.com>
Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
上级 79c451b9
...@@ -389,35 +389,31 @@ static void pit_irq_timer(void *opaque) ...@@ -389,35 +389,31 @@ static void pit_irq_timer(void *opaque)
pit_irq_timer_update(s, s->next_transition_time); pit_irq_timer_update(s, s->next_transition_time);
} }
static void pit_save(QEMUFile *f, void *opaque) static const VMStateDescription vmstate_pit_channel = {
{ .name = "pit channel",
PITState *pit = opaque; .version_id = 2,
PITChannelState *s; .minimum_version_id = 2,
int i; .minimum_version_id_old = 2,
.fields = (VMStateField []) {
for(i = 0; i < 3; i++) { VMSTATE_INT32(count, PITChannelState),
s = &pit->channels[i]; VMSTATE_UINT16(latched_count, PITChannelState),
qemu_put_be32(f, s->count); VMSTATE_UINT8(count_latched, PITChannelState),
qemu_put_be16s(f, &s->latched_count); VMSTATE_UINT8(status_latched, PITChannelState),
qemu_put_8s(f, &s->count_latched); VMSTATE_UINT8(status, PITChannelState),
qemu_put_8s(f, &s->status_latched); VMSTATE_UINT8(read_state, PITChannelState),
qemu_put_8s(f, &s->status); VMSTATE_UINT8(write_state, PITChannelState),
qemu_put_8s(f, &s->read_state); VMSTATE_UINT8(write_latch, PITChannelState),
qemu_put_8s(f, &s->write_state); VMSTATE_UINT8(rw_mode, PITChannelState),
qemu_put_8s(f, &s->write_latch); VMSTATE_UINT8(mode, PITChannelState),
qemu_put_8s(f, &s->rw_mode); VMSTATE_UINT8(bcd, PITChannelState),
qemu_put_8s(f, &s->mode); VMSTATE_UINT8(gate, PITChannelState),
qemu_put_8s(f, &s->bcd); VMSTATE_INT64(count_load_time, PITChannelState),
qemu_put_8s(f, &s->gate); VMSTATE_INT64(next_transition_time, PITChannelState),
qemu_put_be64(f, s->count_load_time); VMSTATE_END_OF_LIST()
if (s->irq_timer) {
qemu_put_be64(f, s->next_transition_time);
qemu_put_timer(f, s->irq_timer);
} }
} };
}
static int pit_load(QEMUFile *f, void *opaque, int version_id) static int pit_load_old(QEMUFile *f, void *opaque, int version_id)
{ {
PITState *pit = opaque; PITState *pit = opaque;
PITChannelState *s; PITChannelState *s;
...@@ -449,6 +445,19 @@ static int pit_load(QEMUFile *f, void *opaque, int version_id) ...@@ -449,6 +445,19 @@ static int pit_load(QEMUFile *f, void *opaque, int version_id)
return 0; return 0;
} }
static const VMStateDescription vmstate_pit = {
.name = "i8254",
.version_id = 2,
.minimum_version_id = 2,
.minimum_version_id_old = 1,
.load_state_old = pit_load_old,
.fields = (VMStateField []) {
VMSTATE_STRUCT_ARRAY(channels, PITState, 3, 2, vmstate_pit_channel, PITChannelState),
VMSTATE_TIMER(channels[0].irq_timer, PITState),
VMSTATE_END_OF_LIST()
}
};
static void pit_reset(void *opaque) static void pit_reset(void *opaque)
{ {
PITState *pit = opaque; PITState *pit = opaque;
...@@ -495,8 +504,7 @@ PITState *pit_init(int base, qemu_irq irq) ...@@ -495,8 +504,7 @@ PITState *pit_init(int base, qemu_irq irq)
s->irq_timer = qemu_new_timer(vm_clock, pit_irq_timer, s); s->irq_timer = qemu_new_timer(vm_clock, pit_irq_timer, s);
s->irq = irq; s->irq = irq;
register_savevm("i8254", base, 1, pit_save, pit_load, pit); vmstate_register(base, &vmstate_pit, pit);
qemu_register_reset(pit_reset, pit); qemu_register_reset(pit_reset, pit);
register_ioport_write(base, 4, 1, pit_ioport_write, pit); register_ioport_write(base, 4, 1, pit_ioport_write, pit);
register_ioport_read(base, 3, 1, pit_ioport_read, pit); register_ioport_read(base, 3, 1, pit_ioport_read, pit);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册