Revision 5122b431 hw/i8254.c

b/hw/i8254.c
389 389
    pit_irq_timer_update(s, s->next_transition_time);
390 390
}
391 391

  
392
static void pit_save(QEMUFile *f, void *opaque)
393
{
394
    PITState *pit = opaque;
395
    PITChannelState *s;
396
    int i;
397

  
398
    for(i = 0; i < 3; i++) {
399
        s = &pit->channels[i];
400
        qemu_put_be32(f, s->count);
401
        qemu_put_be16s(f, &s->latched_count);
402
        qemu_put_8s(f, &s->count_latched);
403
        qemu_put_8s(f, &s->status_latched);
404
        qemu_put_8s(f, &s->status);
405
        qemu_put_8s(f, &s->read_state);
406
        qemu_put_8s(f, &s->write_state);
407
        qemu_put_8s(f, &s->write_latch);
408
        qemu_put_8s(f, &s->rw_mode);
409
        qemu_put_8s(f, &s->mode);
410
        qemu_put_8s(f, &s->bcd);
411
        qemu_put_8s(f, &s->gate);
412
        qemu_put_be64(f, s->count_load_time);
413
        if (s->irq_timer) {
414
            qemu_put_be64(f, s->next_transition_time);
415
            qemu_put_timer(f, s->irq_timer);
416
        }
392
static const VMStateDescription vmstate_pit_channel = {
393
    .name = "pit channel",
394
    .version_id = 2,
395
    .minimum_version_id = 2,
396
    .minimum_version_id_old = 2,
397
    .fields      = (VMStateField []) {
398
        VMSTATE_INT32(count, PITChannelState),
399
        VMSTATE_UINT16(latched_count, PITChannelState),
400
        VMSTATE_UINT8(count_latched, PITChannelState),
401
        VMSTATE_UINT8(status_latched, PITChannelState),
402
        VMSTATE_UINT8(status, PITChannelState),
403
        VMSTATE_UINT8(read_state, PITChannelState),
404
        VMSTATE_UINT8(write_state, PITChannelState),
405
        VMSTATE_UINT8(write_latch, PITChannelState),
406
        VMSTATE_UINT8(rw_mode, PITChannelState),
407
        VMSTATE_UINT8(mode, PITChannelState),
408
        VMSTATE_UINT8(bcd, PITChannelState),
409
        VMSTATE_UINT8(gate, PITChannelState),
410
        VMSTATE_INT64(count_load_time, PITChannelState),
411
        VMSTATE_INT64(next_transition_time, PITChannelState),
412
        VMSTATE_END_OF_LIST()
417 413
    }
418
}
414
};
419 415

  
420
static int pit_load(QEMUFile *f, void *opaque, int version_id)
416
static int pit_load_old(QEMUFile *f, void *opaque, int version_id)
421 417
{
422 418
    PITState *pit = opaque;
423 419
    PITChannelState *s;
......
449 445
    return 0;
450 446
}
451 447

  
448
static const VMStateDescription vmstate_pit = {
449
    .name = "i8254",
450
    .version_id = 2,
451
    .minimum_version_id = 2,
452
    .minimum_version_id_old = 1,
453
    .load_state_old = pit_load_old,
454
    .fields      = (VMStateField []) {
455
        VMSTATE_STRUCT_ARRAY(channels, PITState, 3, 2, vmstate_pit_channel, PITChannelState),
456
        VMSTATE_TIMER(channels[0].irq_timer, PITState),
457
        VMSTATE_END_OF_LIST()
458
    }
459
};
460

  
452 461
static void pit_reset(void *opaque)
453 462
{
454 463
    PITState *pit = opaque;
......
495 504
    s->irq_timer = qemu_new_timer(vm_clock, pit_irq_timer, s);
496 505
    s->irq = irq;
497 506

  
498
    register_savevm("i8254", base, 1, pit_save, pit_load, pit);
499

  
507
    vmstate_register(base, &vmstate_pit, pit);
500 508
    qemu_register_reset(pit_reset, pit);
501 509
    register_ioport_write(base, 4, 1, pit_ioport_write, pit);
502 510
    register_ioport_read(base, 3, 1, pit_ioport_read, pit);

Also available in: Unified diff