Revision aa1e3b28 hw/lm832x.c
b/hw/lm832x.c | ||
---|---|---|
414 | 414 |
return 0; |
415 | 415 |
} |
416 | 416 |
|
417 |
static void lm_kbd_save(QEMUFile *f, void *opaque)
|
|
417 |
static int lm_kbd_post_load(void *opaque, int version_id)
|
|
418 | 418 |
{ |
419 |
LM823KbdState *s = (LM823KbdState *) opaque; |
|
420 |
int i; |
|
421 |
|
|
422 |
i2c_slave_save(f, &s->i2c); |
|
423 |
qemu_put_byte(f, s->i2c_dir); |
|
424 |
qemu_put_byte(f, s->i2c_cycle); |
|
425 |
qemu_put_byte(f, (uint8_t) s->reg); |
|
426 |
|
|
427 |
qemu_put_8s(f, &s->config); |
|
428 |
qemu_put_8s(f, &s->status); |
|
429 |
qemu_put_8s(f, &s->acttime); |
|
430 |
qemu_put_8s(f, &s->error); |
|
431 |
qemu_put_8s(f, &s->clock); |
|
432 |
|
|
433 |
qemu_put_be16s(f, &s->gpio.pull); |
|
434 |
qemu_put_be16s(f, &s->gpio.mask); |
|
435 |
qemu_put_be16s(f, &s->gpio.dir); |
|
436 |
qemu_put_be16s(f, &s->gpio.level); |
|
437 |
|
|
438 |
qemu_put_byte(f, s->kbd.dbnctime); |
|
439 |
qemu_put_byte(f, s->kbd.size); |
|
440 |
qemu_put_byte(f, s->kbd.start); |
|
441 |
qemu_put_byte(f, s->kbd.len); |
|
442 |
qemu_put_buffer(f, s->kbd.fifo, sizeof(s->kbd.fifo)); |
|
443 |
|
|
444 |
for (i = 0; i < sizeof(s->pwm.file); i ++) |
|
445 |
qemu_put_be16s(f, &s->pwm.file[i]); |
|
446 |
qemu_put_8s(f, &s->pwm.faddr); |
|
447 |
qemu_put_buffer(f, s->pwm.addr, sizeof(s->pwm.addr)); |
|
448 |
qemu_put_timer(f, s->pwm.tm[0]); |
|
449 |
qemu_put_timer(f, s->pwm.tm[1]); |
|
450 |
qemu_put_timer(f, s->pwm.tm[2]); |
|
451 |
} |
|
452 |
|
|
453 |
static int lm_kbd_load(QEMUFile *f, void *opaque, int version_id) |
|
454 |
{ |
|
455 |
LM823KbdState *s = (LM823KbdState *) opaque; |
|
456 |
int i; |
|
457 |
|
|
458 |
i2c_slave_load(f, &s->i2c); |
|
459 |
s->i2c_dir = qemu_get_byte(f); |
|
460 |
s->i2c_cycle = qemu_get_byte(f); |
|
461 |
s->reg = (int8_t) qemu_get_byte(f); |
|
462 |
|
|
463 |
qemu_get_8s(f, &s->config); |
|
464 |
qemu_get_8s(f, &s->status); |
|
465 |
qemu_get_8s(f, &s->acttime); |
|
466 |
qemu_get_8s(f, &s->error); |
|
467 |
qemu_get_8s(f, &s->clock); |
|
468 |
|
|
469 |
qemu_get_be16s(f, &s->gpio.pull); |
|
470 |
qemu_get_be16s(f, &s->gpio.mask); |
|
471 |
qemu_get_be16s(f, &s->gpio.dir); |
|
472 |
qemu_get_be16s(f, &s->gpio.level); |
|
473 |
|
|
474 |
s->kbd.dbnctime = qemu_get_byte(f); |
|
475 |
s->kbd.size = qemu_get_byte(f); |
|
476 |
s->kbd.start = qemu_get_byte(f); |
|
477 |
s->kbd.len = qemu_get_byte(f); |
|
478 |
qemu_get_buffer(f, s->kbd.fifo, sizeof(s->kbd.fifo)); |
|
479 |
|
|
480 |
for (i = 0; i < sizeof(s->pwm.file); i ++) |
|
481 |
qemu_get_be16s(f, &s->pwm.file[i]); |
|
482 |
qemu_get_8s(f, &s->pwm.faddr); |
|
483 |
qemu_get_buffer(f, s->pwm.addr, sizeof(s->pwm.addr)); |
|
484 |
qemu_get_timer(f, s->pwm.tm[0]); |
|
485 |
qemu_get_timer(f, s->pwm.tm[1]); |
|
486 |
qemu_get_timer(f, s->pwm.tm[2]); |
|
419 |
LM823KbdState *s = opaque; |
|
487 | 420 |
|
488 | 421 |
lm_kbd_irq_update(s); |
489 | 422 |
lm_kbd_gpio_update(s); |
... | ... | |
491 | 424 |
return 0; |
492 | 425 |
} |
493 | 426 |
|
427 |
static const VMStateDescription vmstate_lm_kbd = { |
|
428 |
.name = "LM8323", |
|
429 |
.version_id = 0, |
|
430 |
.minimum_version_id = 0, |
|
431 |
.minimum_version_id_old = 0, |
|
432 |
.post_load = lm_kbd_post_load, |
|
433 |
.fields = (VMStateField []) { |
|
434 |
VMSTATE_I2C_SLAVE(i2c, LM823KbdState), |
|
435 |
VMSTATE_UINT8(i2c_dir, LM823KbdState), |
|
436 |
VMSTATE_UINT8(i2c_cycle, LM823KbdState), |
|
437 |
VMSTATE_UINT8(reg, LM823KbdState), |
|
438 |
VMSTATE_UINT8(config, LM823KbdState), |
|
439 |
VMSTATE_UINT8(status, LM823KbdState), |
|
440 |
VMSTATE_UINT8(acttime, LM823KbdState), |
|
441 |
VMSTATE_UINT8(error, LM823KbdState), |
|
442 |
VMSTATE_UINT8(clock, LM823KbdState), |
|
443 |
VMSTATE_UINT16(gpio.pull, LM823KbdState), |
|
444 |
VMSTATE_UINT16(gpio.mask, LM823KbdState), |
|
445 |
VMSTATE_UINT16(gpio.dir, LM823KbdState), |
|
446 |
VMSTATE_UINT16(gpio.level, LM823KbdState), |
|
447 |
VMSTATE_UINT8(kbd.dbnctime, LM823KbdState), |
|
448 |
VMSTATE_UINT8(kbd.size, LM823KbdState), |
|
449 |
VMSTATE_UINT8(kbd.start, LM823KbdState), |
|
450 |
VMSTATE_UINT8(kbd.len, LM823KbdState), |
|
451 |
VMSTATE_BUFFER(kbd.fifo, LM823KbdState), |
|
452 |
VMSTATE_UINT16_ARRAY(pwm.file, LM823KbdState, 256), |
|
453 |
VMSTATE_UINT8(pwm.faddr, LM823KbdState), |
|
454 |
VMSTATE_BUFFER(pwm.addr, LM823KbdState), |
|
455 |
VMSTATE_TIMER_ARRAY(pwm.tm, LM823KbdState, 3), |
|
456 |
VMSTATE_END_OF_LIST() |
|
457 |
} |
|
458 |
}; |
|
459 |
|
|
460 |
|
|
494 | 461 |
static int lm8323_init(i2c_slave *i2c) |
495 | 462 |
{ |
496 | 463 |
LM823KbdState *s = FROM_I2C_SLAVE(LM823KbdState, i2c); |
... | ... | |
504 | 471 |
lm_kbd_reset(s); |
505 | 472 |
|
506 | 473 |
qemu_register_reset((void *) lm_kbd_reset, s); |
507 |
register_savevm("LM8323", -1, 0, lm_kbd_save, lm_kbd_load, s);
|
|
474 |
vmstate_register(-1, &vmstate_lm_kbd, s);
|
|
508 | 475 |
return 0; |
509 | 476 |
} |
510 | 477 |
|
Also available in: Unified diff