From patchwork Mon Oct 19 18:42:49 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [04/25] vmstate: add VMSTATE_UINT16_EQUAL[_V] Date: Mon, 19 Oct 2009 08:42:49 -0000 From: Juan Quintela X-Patchwork-Id: 36395 Message-Id: <4e686d3875d0c8fa6e42eafac9b59f0d47bebd30.1255976538.git.quintela@redhat.com> To: qemu-devel@nongnu.org Signed-off-by: Juan Quintela --- hw/hw.h | 7 +++++++ savevm.c | 20 ++++++++++++++++++++ 2 files changed, 27 insertions(+), 0 deletions(-) diff --git a/hw/hw.h b/hw/hw.h index 5f48ef8..9a40b43 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; @@ -550,6 +551,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 3d91202..6a10bc7 100644 --- a/savevm.c +++ b/savevm.c @@ -868,6 +868,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)