vmstate: Add support for two dimensional arrays
Add support for migrating two dimensional arrays, by defining a set of new macros VMSTATE_*_2DARRAY paralleling the existing VMSTATE_*_ARRAY macros. 2D arrays are handled the same for actual state serialization; the only difference is that the type check has to change for a 2D array. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Igor Mitsyanko <i.mitsyanko@gmail.com> Message-id: 1363975375-3166-2-git-send-email-peter.maydell@linaro.org
This commit is contained in:
parent
b79269b78d
commit
bd7f92e59e
@ -164,6 +164,7 @@ extern const VMStateInfo vmstate_info_buffer;
|
||||
extern const VMStateInfo vmstate_info_unused_buffer;
|
||||
extern const VMStateInfo vmstate_info_bitmap;
|
||||
|
||||
#define type_check_2darray(t1,t2,n,m) ((t1(*)[n][m])0 - (t2*)0)
|
||||
#define type_check_array(t1,t2,n) ((t1(*)[n])0 - (t2*)0)
|
||||
#define type_check_pointer(t1,t2) ((t1**)0 - (t2*)0)
|
||||
|
||||
@ -179,6 +180,10 @@ extern const VMStateInfo vmstate_info_bitmap;
|
||||
(offsetof(_state, _field) + \
|
||||
type_check_array(_type, typeof_field(_state, _field), _num))
|
||||
|
||||
#define vmstate_offset_2darray(_state, _field, _type, _n1, _n2) \
|
||||
(offsetof(_state, _field) + \
|
||||
type_check_2darray(_type, typeof_field(_state, _field), _n1, _n2))
|
||||
|
||||
#define vmstate_offset_sub_array(_state, _field, _type, _start) \
|
||||
(offsetof(_state, _field[_start]))
|
||||
|
||||
@ -224,6 +229,16 @@ extern const VMStateInfo vmstate_info_bitmap;
|
||||
.offset = vmstate_offset_array(_state, _field, _type, _num), \
|
||||
}
|
||||
|
||||
#define VMSTATE_2DARRAY(_field, _state, _n1, _n2, _version, _info, _type) { \
|
||||
.name = (stringify(_field)), \
|
||||
.version_id = (_version), \
|
||||
.num = (_n1) * (_n2), \
|
||||
.info = &(_info), \
|
||||
.size = sizeof(_type), \
|
||||
.flags = VMS_ARRAY, \
|
||||
.offset = vmstate_offset_2darray(_state, _field, _type, _n1, _n2), \
|
||||
}
|
||||
|
||||
#define VMSTATE_ARRAY_TEST(_field, _state, _num, _test, _info, _type) {\
|
||||
.name = (stringify(_field)), \
|
||||
.field_exists = (_test), \
|
||||
@ -592,15 +607,27 @@ extern const VMStateInfo vmstate_info_bitmap;
|
||||
#define VMSTATE_UINT16_ARRAY_V(_f, _s, _n, _v) \
|
||||
VMSTATE_ARRAY(_f, _s, _n, _v, vmstate_info_uint16, uint16_t)
|
||||
|
||||
#define VMSTATE_UINT16_2DARRAY_V(_f, _s, _n1, _n2, _v) \
|
||||
VMSTATE_2DARRAY(_f, _s, _n1, _n2, _v, vmstate_info_uint16, uint16_t)
|
||||
|
||||
#define VMSTATE_UINT16_ARRAY(_f, _s, _n) \
|
||||
VMSTATE_UINT16_ARRAY_V(_f, _s, _n, 0)
|
||||
|
||||
#define VMSTATE_UINT16_2DARRAY(_f, _s, _n1, _n2) \
|
||||
VMSTATE_UINT16_2DARRAY_V(_f, _s, _n1, _n2, 0)
|
||||
|
||||
#define VMSTATE_UINT8_2DARRAY_V(_f, _s, _n1, _n2, _v) \
|
||||
VMSTATE_2DARRAY(_f, _s, _n1, _n2, _v, vmstate_info_uint8, uint8_t)
|
||||
|
||||
#define VMSTATE_UINT8_ARRAY_V(_f, _s, _n, _v) \
|
||||
VMSTATE_ARRAY(_f, _s, _n, _v, vmstate_info_uint8, uint8_t)
|
||||
|
||||
#define VMSTATE_UINT8_ARRAY(_f, _s, _n) \
|
||||
VMSTATE_UINT8_ARRAY_V(_f, _s, _n, 0)
|
||||
|
||||
#define VMSTATE_UINT8_2DARRAY(_f, _s, _n1, _n2) \
|
||||
VMSTATE_UINT8_2DARRAY_V(_f, _s, _n1, _n2, 0)
|
||||
|
||||
#define VMSTATE_UINT32_ARRAY_V(_f, _s, _n, _v) \
|
||||
VMSTATE_ARRAY(_f, _s, _n, _v, vmstate_info_uint32, uint32_t)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user