#define SPARC_VMSTATE_VER 9 #endif const VMStateDescription vmstate_sparc_cpu = { .name = "cpu", .version_id = SPARC_VMSTATE_VER, .minimum_version_id = SPARC_VMSTATE_VER, .minimum_version_id_old = SPARC_VMSTATE_VER, .pre_save = cpu_pre_save, .fields = (VMStateField[]) { VMSTATE_UINTTL_ARRAY(env.gregs, SPARCCPU, 8), VMSTATE_UINT32(env.nwindows, SPARCCPU), VMSTATE_VARRAY_MULTIPLY(env.regbase, SPARCCPU, env.nwindows, 16, vmstate_info_uinttl, target_ulong), VMSTATE_CPUDOUBLE_ARRAY(env.fpr, SPARCCPU, TARGET_DPREGS), VMSTATE_UINTTL(env.pc, SPARCCPU), VMSTATE_UINTTL(env.npc, SPARCCPU), VMSTATE_UINTTL(env.y, SPARCCPU), { .name = "psr", .version_id = 0, .size = sizeof(uint32_t), .info = &vmstate_psr, .flags = VMS_SINGLE, .offset = 0, }, VMSTATE_UINTTL(env.fsr, SPARCCPU), VMSTATE_UINTTL(env.tbr, SPARCCPU), VMSTATE_INT32(env.interrupt_index, SPARCCPU), VMSTATE_UINT32(env.pil_in, SPARCCPU),
static bool fpu_needed(void *opaque) { PowerPCCPU *cpu = opaque; return (cpu->env.insns_flags & PPC_FLOAT); } static const VMStateDescription vmstate_fpu = { .name = "cpu/fpu", .version_id = 1, .minimum_version_id = 1, .needed = fpu_needed, .fields = (VMStateField[]) { VMSTATE_FLOAT64_ARRAY(env.fpr, PowerPCCPU, 32), VMSTATE_UINTTL(env.fpscr, PowerPCCPU), VMSTATE_END_OF_LIST() }, }; static bool altivec_needed(void *opaque) { PowerPCCPU *cpu = opaque; return (cpu->env.insns_flags & PPC_ALTIVEC); } static const VMStateDescription vmstate_altivec = { .name = "cpu/altivec", .version_id = 1, .minimum_version_id = 1,
#include "hw/hw.h" #include "hw/boards.h" #include "hw/i386/pc.h" #include "hw/isa/isa.h" #include "cpu.h" #include "sysemu/kvm.h" static const VMStateDescription vmstate_segment = { .name = "segment", .version_id = 1, .minimum_version_id = 1, .minimum_version_id_old = 1, .fields = (VMStateField []) { VMSTATE_UINT32(selector, SegmentCache), VMSTATE_UINTTL(base, SegmentCache), VMSTATE_UINT32(limit, SegmentCache), VMSTATE_UINT32(flags, SegmentCache), VMSTATE_END_OF_LIST() } }; #define VMSTATE_SEGMENT(_field, _state) { \ .name = (stringify(_field)), \ .size = sizeof(SegmentCache), \ .vmsd = &vmstate_segment, \ .flags = VMS_STRUCT, \ .offset = offsetof(_state, _field) \ + type_check(SegmentCache,typeof_field(_state, _field)) \ }
.minimum_version_id = 1, .fields = vmstate_fpu_fields }; const VMStateDescription vmstate_inactive_fpu = { .name = "cpu/inactive_fpu", .version_id = 1, .minimum_version_id = 1, .fields = vmstate_fpu_fields }; /* TC state */ static VMStateField vmstate_tc_fields[] = { VMSTATE_UINTTL_ARRAY(gpr, TCState, 32), VMSTATE_UINTTL(PC, TCState), VMSTATE_UINTTL_ARRAY(HI, TCState, MIPS_DSP_ACC), VMSTATE_UINTTL_ARRAY(LO, TCState, MIPS_DSP_ACC), VMSTATE_UINTTL_ARRAY(ACX, TCState, MIPS_DSP_ACC), VMSTATE_UINTTL(DSPControl, TCState), VMSTATE_INT32(CP0_TCStatus, TCState), VMSTATE_INT32(CP0_TCBind, TCState), VMSTATE_UINTTL(CP0_TCHalt, TCState), VMSTATE_UINTTL(CP0_TCContext, TCState), VMSTATE_UINTTL(CP0_TCSchedule, TCState), VMSTATE_UINTTL(CP0_TCScheFBack, TCState), VMSTATE_INT32(CP0_Debug_tcstatus, TCState), VMSTATE_UINTTL(CP0_UserLocal, TCState), VMSTATE_INT32(msacsr, TCState), VMSTATE_END_OF_LIST() };
} else { env->tlb->cpu_openrisc_map_address_code = &cpu_openrisc_get_phys_nommu; } return 0; } static const VMStateDescription vmstate_tlb_entry = { .name = "tlb_entry", .version_id = 1, .minimum_version_id = 1, .minimum_version_id_old = 1, .fields = (VMStateField[]) { VMSTATE_UINTTL(mr, OpenRISCTLBEntry), VMSTATE_UINTTL(tr, OpenRISCTLBEntry), VMSTATE_END_OF_LIST() } }; static const VMStateDescription vmstate_cpu_tlb = { .name = "cpu_tlb", .version_id = 1, .minimum_version_id = 1, .minimum_version_id_old = 1, .fields = (VMStateField[]) { VMSTATE_STRUCT_2DARRAY(itlb, CPUOpenRISCTLBContext, ITLB_WAYS, ITLB_SIZE, 0, vmstate_tlb_entry, OpenRISCTLBEntry), VMSTATE_STRUCT_2DARRAY(dtlb, CPUOpenRISCTLBContext,
static Property spapr_vlan_properties[] = { DEFINE_SPAPR_PROPERTIES(VIOsPAPRVLANDevice, sdev), DEFINE_NIC_PROPERTIES(VIOsPAPRVLANDevice, nicconf), DEFINE_PROP_END_OF_LIST(), }; static const VMStateDescription vmstate_spapr_llan = { .name = "spapr_llan", .version_id = 1, .minimum_version_id = 1, .fields = (VMStateField[]) { VMSTATE_SPAPR_VIO(sdev, VIOsPAPRVLANDevice), /* LLAN state */ VMSTATE_BOOL(isopen, VIOsPAPRVLANDevice), VMSTATE_UINTTL(buf_list, VIOsPAPRVLANDevice), VMSTATE_UINT32(add_buf_ptr, VIOsPAPRVLANDevice), VMSTATE_UINT32(use_buf_ptr, VIOsPAPRVLANDevice), VMSTATE_UINT32(rx_bufs, VIOsPAPRVLANDevice), VMSTATE_UINTTL(rxq_ptr, VIOsPAPRVLANDevice), VMSTATE_END_OF_LIST() }, }; static void spapr_vlan_class_init(ObjectClass *klass, void *data) { DeviceClass *dc = DEVICE_CLASS(klass); VIOsPAPRDeviceClass *k = VIO_SPAPR_DEVICE_CLASS(klass); k->init = spapr_vlan_init;