From dc3b83a062337d55edd537645fded337ba013343 Mon Sep 17 00:00:00 2001 From: Juan Quintela Date: Thu, 15 Oct 2009 23:16:13 +0200 Subject: [PATCH] vmstate: add VMSTATE_UINT16_EQUAL[_V] Signed-off-by: Juan Quintela Signed-off-by: Anthony Liguori --- hw/hw.h | 7 +++++++ savevm.c | 20 ++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/hw/hw.h b/hw/hw.h index 0fda06aee3..b0a62df94f 100644 --- a/hw/hw.h +++ b/hw/hw.h @@ -322,6 +322,7 @@ extern const VMStateInfo vmstate_info_int32; extern const VMStateInfo vmstate_info_int64; extern const VMStateInfo vmstate_info_uint8_equal; +extern const VMStateInfo vmstate_info_uint16_equal; extern const VMStateInfo vmstate_info_int32_equal; extern const VMStateInfo vmstate_info_int32_le; @@ -560,6 +561,12 @@ extern const VMStateDescription vmstate_i2c_slave; #define VMSTATE_UINT8_EQUAL(_f, _s) \ VMSTATE_SINGLE(_f, _s, 0, vmstate_info_uint8_equal, uint8_t) +#define VMSTATE_UINT16_EQUAL(_f, _s) \ + VMSTATE_SINGLE(_f, _s, 0, vmstate_info_uint16_equal, uint16_t) + +#define VMSTATE_UINT16_EQUAL_V(_f, _s, _v) \ + VMSTATE_SINGLE(_f, _s, _v, vmstate_info_uint16_equal, uint16_t) + #define VMSTATE_INT32_EQUAL(_f, _s) \ VMSTATE_SINGLE(_f, _s, 0, vmstate_info_int32_equal, int32_t) diff --git a/savevm.c b/savevm.c index 6eca31a5d2..0db5fc7d0d 100644 --- a/savevm.c +++ b/savevm.c @@ -882,6 +882,26 @@ const VMStateInfo vmstate_info_uint8_equal = { .put = put_uint8, }; +/* 16 bit unsigned int int. See that the received value is the same than the one + in the field */ + +static int get_uint16_equal(QEMUFile *f, void *pv, size_t size) +{ + uint16_t *v = pv; + uint16_t v2; + qemu_get_be16s(f, &v2); + + if (*v == v2) + return 0; + return -EINVAL; +} + +const VMStateInfo vmstate_info_uint16_equal = { + .name = "uint16 equal", + .get = get_uint16_equal, + .put = put_uint16, +}; + /* timers */ static int get_timer(QEMUFile *f, void *pv, size_t size)