2935 |
qemu_mod_timer(gui_timer, GUI_REFRESH_INTERVAL + qemu_get_clock(rt_clock)); |
qemu_mod_timer(gui_timer, GUI_REFRESH_INTERVAL + qemu_get_clock(rt_clock)); |
2936 |
} |
} |
2937 |
|
|
2938 |
|
struct vm_change_state_entry { |
2939 |
|
VMChangeStateHandler *cb; |
2940 |
|
void *opaque; |
2941 |
|
LIST_ENTRY (vm_change_state_entry) entries; |
2942 |
|
}; |
2943 |
|
|
2944 |
|
static LIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head; |
2945 |
|
|
2946 |
|
VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb, |
2947 |
|
void *opaque) |
2948 |
|
{ |
2949 |
|
VMChangeStateEntry *e; |
2950 |
|
|
2951 |
|
e = qemu_mallocz(sizeof (*e)); |
2952 |
|
if (!e) |
2953 |
|
return NULL; |
2954 |
|
|
2955 |
|
e->cb = cb; |
2956 |
|
e->opaque = opaque; |
2957 |
|
LIST_INSERT_HEAD(&vm_change_state_head, e, entries); |
2958 |
|
return e; |
2959 |
|
} |
2960 |
|
|
2961 |
|
void qemu_del_vm_change_state_handler(VMChangeStateEntry *e) |
2962 |
|
{ |
2963 |
|
LIST_REMOVE (e, entries); |
2964 |
|
qemu_free (e); |
2965 |
|
} |
2966 |
|
|
2967 |
|
static void vm_state_notify(int running) |
2968 |
|
{ |
2969 |
|
VMChangeStateEntry *e; |
2970 |
|
|
2971 |
|
for (e = vm_change_state_head.lh_first; e; e = e->entries.le_next) { |
2972 |
|
e->cb(e->opaque, running); |
2973 |
|
} |
2974 |
|
} |
2975 |
|
|
2976 |
/* XXX: support several handlers */ |
/* XXX: support several handlers */ |
2977 |
VMStopHandler *vm_stop_cb; |
static VMStopHandler *vm_stop_cb; |
2978 |
VMStopHandler *vm_stop_opaque; |
static void *vm_stop_opaque; |
2979 |
|
|
2980 |
int qemu_add_vm_stop_handler(VMStopHandler *cb, void *opaque) |
int qemu_add_vm_stop_handler(VMStopHandler *cb, void *opaque) |
2981 |
{ |
{ |
2994 |
if (!vm_running) { |
if (!vm_running) { |
2995 |
cpu_enable_ticks(); |
cpu_enable_ticks(); |
2996 |
vm_running = 1; |
vm_running = 1; |
2997 |
|
vm_state_notify(1); |
2998 |
} |
} |
2999 |
} |
} |
3000 |
|
|
3008 |
vm_stop_cb(vm_stop_opaque, reason); |
vm_stop_cb(vm_stop_opaque, reason); |
3009 |
} |
} |
3010 |
} |
} |
3011 |
|
vm_state_notify(0); |
3012 |
} |
} |
3013 |
} |
} |
3014 |
|
|
3628 |
QEMUMachine *machine; |
QEMUMachine *machine; |
3629 |
char usb_devices[MAX_VM_USB_PORTS][128]; |
char usb_devices[MAX_VM_USB_PORTS][128]; |
3630 |
int usb_devices_index; |
int usb_devices_index; |
3631 |
|
|
3632 |
|
LIST_INIT (&vm_change_state_head); |
3633 |
#if !defined(CONFIG_SOFTMMU) |
#if !defined(CONFIG_SOFTMMU) |
3634 |
/* we never want that malloc() uses mmap() */ |
/* we never want that malloc() uses mmap() */ |
3635 |
mallopt(M_MMAP_THRESHOLD, 4096 * 1024); |
mallopt(M_MMAP_THRESHOLD, 4096 * 1024); |