sm501: Add vmstate descriptor
Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Tested-by: Aurelien Jarno <aurelien@aurel32.net> Message-id: 86803c6f40cd678b61b3b1a1429683f60f0aa89a.1492787889.git.balaton@eik.bme.hu Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
b612a49db2
commit
2edd6e4ac5
@ -66,6 +66,7 @@
|
||||
|
||||
#define MMIO_BASE_OFFSET 0x3e00000
|
||||
#define MMIO_SIZE 0x200000
|
||||
#define DC_PALETTE_ENTRIES (0x400 * 3)
|
||||
|
||||
/* SM501 register definitions taken from "linux/include/linux/sm501-regs.h" */
|
||||
|
||||
@ -492,7 +493,7 @@ typedef struct SM501State {
|
||||
uint32_t uart0_mcr;
|
||||
uint32_t uart0_scr;
|
||||
|
||||
uint8_t dc_palette[0x400 * 3];
|
||||
uint8_t dc_palette[DC_PALETTE_ENTRIES];
|
||||
|
||||
uint32_t dc_panel_control;
|
||||
uint32_t dc_panel_panning_control;
|
||||
@ -1618,6 +1619,78 @@ static void sm501_init(SM501State *s, DeviceState *dev,
|
||||
s->con = graphic_console_init(DEVICE(dev), 0, &sm501_ops, s);
|
||||
}
|
||||
|
||||
static const VMStateDescription vmstate_sm501_state = {
|
||||
.name = "sm501-state",
|
||||
.version_id = 1,
|
||||
.minimum_version_id = 1,
|
||||
.fields = (VMStateField[]) {
|
||||
VMSTATE_UINT32(local_mem_size_index, SM501State),
|
||||
VMSTATE_UINT32(system_control, SM501State),
|
||||
VMSTATE_UINT32(misc_control, SM501State),
|
||||
VMSTATE_UINT32(gpio_31_0_control, SM501State),
|
||||
VMSTATE_UINT32(gpio_63_32_control, SM501State),
|
||||
VMSTATE_UINT32(dram_control, SM501State),
|
||||
VMSTATE_UINT32(arbitration_control, SM501State),
|
||||
VMSTATE_UINT32(irq_mask, SM501State),
|
||||
VMSTATE_UINT32(misc_timing, SM501State),
|
||||
VMSTATE_UINT32(power_mode_control, SM501State),
|
||||
VMSTATE_UINT32(uart0_ier, SM501State),
|
||||
VMSTATE_UINT32(uart0_lcr, SM501State),
|
||||
VMSTATE_UINT32(uart0_mcr, SM501State),
|
||||
VMSTATE_UINT32(uart0_scr, SM501State),
|
||||
VMSTATE_UINT8_ARRAY(dc_palette, SM501State, DC_PALETTE_ENTRIES),
|
||||
VMSTATE_UINT32(dc_panel_control, SM501State),
|
||||
VMSTATE_UINT32(dc_panel_panning_control, SM501State),
|
||||
VMSTATE_UINT32(dc_panel_fb_addr, SM501State),
|
||||
VMSTATE_UINT32(dc_panel_fb_offset, SM501State),
|
||||
VMSTATE_UINT32(dc_panel_fb_width, SM501State),
|
||||
VMSTATE_UINT32(dc_panel_fb_height, SM501State),
|
||||
VMSTATE_UINT32(dc_panel_tl_location, SM501State),
|
||||
VMSTATE_UINT32(dc_panel_br_location, SM501State),
|
||||
VMSTATE_UINT32(dc_panel_h_total, SM501State),
|
||||
VMSTATE_UINT32(dc_panel_h_sync, SM501State),
|
||||
VMSTATE_UINT32(dc_panel_v_total, SM501State),
|
||||
VMSTATE_UINT32(dc_panel_v_sync, SM501State),
|
||||
VMSTATE_UINT32(dc_panel_hwc_addr, SM501State),
|
||||
VMSTATE_UINT32(dc_panel_hwc_location, SM501State),
|
||||
VMSTATE_UINT32(dc_panel_hwc_color_1_2, SM501State),
|
||||
VMSTATE_UINT32(dc_panel_hwc_color_3, SM501State),
|
||||
VMSTATE_UINT32(dc_video_control, SM501State),
|
||||
VMSTATE_UINT32(dc_crt_control, SM501State),
|
||||
VMSTATE_UINT32(dc_crt_fb_addr, SM501State),
|
||||
VMSTATE_UINT32(dc_crt_fb_offset, SM501State),
|
||||
VMSTATE_UINT32(dc_crt_h_total, SM501State),
|
||||
VMSTATE_UINT32(dc_crt_h_sync, SM501State),
|
||||
VMSTATE_UINT32(dc_crt_v_total, SM501State),
|
||||
VMSTATE_UINT32(dc_crt_v_sync, SM501State),
|
||||
VMSTATE_UINT32(dc_crt_hwc_addr, SM501State),
|
||||
VMSTATE_UINT32(dc_crt_hwc_location, SM501State),
|
||||
VMSTATE_UINT32(dc_crt_hwc_color_1_2, SM501State),
|
||||
VMSTATE_UINT32(dc_crt_hwc_color_3, SM501State),
|
||||
VMSTATE_UINT32(twoD_source, SM501State),
|
||||
VMSTATE_UINT32(twoD_destination, SM501State),
|
||||
VMSTATE_UINT32(twoD_dimension, SM501State),
|
||||
VMSTATE_UINT32(twoD_control, SM501State),
|
||||
VMSTATE_UINT32(twoD_pitch, SM501State),
|
||||
VMSTATE_UINT32(twoD_foreground, SM501State),
|
||||
VMSTATE_UINT32(twoD_background, SM501State),
|
||||
VMSTATE_UINT32(twoD_stretch, SM501State),
|
||||
VMSTATE_UINT32(twoD_color_compare, SM501State),
|
||||
VMSTATE_UINT32(twoD_color_compare_mask, SM501State),
|
||||
VMSTATE_UINT32(twoD_mask, SM501State),
|
||||
VMSTATE_UINT32(twoD_clip_tl, SM501State),
|
||||
VMSTATE_UINT32(twoD_clip_br, SM501State),
|
||||
VMSTATE_UINT32(twoD_mono_pattern_low, SM501State),
|
||||
VMSTATE_UINT32(twoD_mono_pattern_high, SM501State),
|
||||
VMSTATE_UINT32(twoD_window_width, SM501State),
|
||||
VMSTATE_UINT32(twoD_source_base, SM501State),
|
||||
VMSTATE_UINT32(twoD_destination_base, SM501State),
|
||||
VMSTATE_UINT32(twoD_alpha, SM501State),
|
||||
VMSTATE_UINT32(twoD_wrap, SM501State),
|
||||
VMSTATE_END_OF_LIST()
|
||||
}
|
||||
};
|
||||
|
||||
#define TYPE_SYSBUS_SM501 "sysbus-sm501"
|
||||
#define SYSBUS_SM501(obj) \
|
||||
OBJECT_CHECK(SM501SysBusState, (obj), TYPE_SYSBUS_SM501)
|
||||
@ -1677,6 +1750,17 @@ static void sm501_reset_sysbus(DeviceState *dev)
|
||||
sm501_reset(&s->state);
|
||||
}
|
||||
|
||||
static const VMStateDescription vmstate_sm501_sysbus = {
|
||||
.name = TYPE_SYSBUS_SM501,
|
||||
.version_id = 1,
|
||||
.minimum_version_id = 1,
|
||||
.fields = (VMStateField[]) {
|
||||
VMSTATE_STRUCT(state, SM501SysBusState, 1,
|
||||
vmstate_sm501_state, SM501State),
|
||||
VMSTATE_END_OF_LIST()
|
||||
}
|
||||
};
|
||||
|
||||
static void sm501_sysbus_class_init(ObjectClass *klass, void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
@ -1686,6 +1770,7 @@ static void sm501_sysbus_class_init(ObjectClass *klass, void *data)
|
||||
dc->desc = "SM501 Multimedia Companion";
|
||||
dc->props = sm501_sysbus_properties;
|
||||
dc->reset = sm501_reset_sysbus;
|
||||
dc->vmsd = &vmstate_sm501_sysbus;
|
||||
/* Note: pointer property "chr-state" may remain null, thus
|
||||
* no need for dc->cannot_instantiate_with_device_add_yet = true;
|
||||
*/
|
||||
@ -1738,6 +1823,18 @@ static void sm501_reset_pci(DeviceState *dev)
|
||||
s->state.misc_control |= 1;
|
||||
}
|
||||
|
||||
static const VMStateDescription vmstate_sm501_pci = {
|
||||
.name = TYPE_PCI_SM501,
|
||||
.version_id = 1,
|
||||
.minimum_version_id = 1,
|
||||
.fields = (VMStateField[]) {
|
||||
VMSTATE_PCI_DEVICE(parent_obj, SM501PCIState),
|
||||
VMSTATE_STRUCT(state, SM501PCIState, 1,
|
||||
vmstate_sm501_state, SM501State),
|
||||
VMSTATE_END_OF_LIST()
|
||||
}
|
||||
};
|
||||
|
||||
static void sm501_pci_class_init(ObjectClass *klass, void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
@ -1752,6 +1849,7 @@ static void sm501_pci_class_init(ObjectClass *klass, void *data)
|
||||
dc->props = sm501_pci_properties;
|
||||
dc->reset = sm501_reset_pci;
|
||||
dc->hotpluggable = false;
|
||||
dc->vmsd = &vmstate_sm501_pci;
|
||||
}
|
||||
|
||||
static const TypeInfo sm501_pci_info = {
|
||||
|
Loading…
Reference in New Issue
Block a user