commit 78fbd17ddc98a2e96e05db62afbe3a69c5fad5e5 Author: Gerd Hoffmann Date: Thu Feb 9 12:52:48 2012 +0100 reason: infra diff --git a/sysemu.h b/sysemu.h index 3b9d7f5..e7060aa 100644 --- a/sysemu.h +++ b/sysemu.h @@ -38,10 +38,16 @@ void vm_start(void); void vm_stop(RunState state); void vm_stop_force_state(RunState state); +typedef enum WakeupReason { + QEMU_WAKEUP_REASON_OTHER = 0, + QEMU_WAKEUP_REASON_RTC, +} WakeupReason; + void qemu_system_reset_request(void); void qemu_system_suspend_request(void); void qemu_register_suspend_notifier(Notifier *notifier); -void qemu_system_wakeup_request(void); +void qemu_system_wakeup_request(WakeupReason reason); +void qemu_register_wakeup_notifier(Notifier *notifier); void qemu_system_shutdown_request(void); void qemu_system_powerdown_request(void); void qemu_system_debug_request(void); diff --git a/vl.c b/vl.c index 822fd58..17d4b72 100644 --- a/vl.c +++ b/vl.c @@ -1286,6 +1286,8 @@ static int debug_requested; static bool is_suspended; static NotifierList suspend_notifiers = NOTIFIER_LIST_INITIALIZER(suspend_notifiers); +static NotifierList wakeup_notifiers = + NOTIFIER_LIST_INITIALIZER(wakeup_notifiers); static RunState vmstop_requested = RUN_STATE_MAX; int qemu_shutdown_requested_get(void) @@ -1416,16 +1418,22 @@ void qemu_register_suspend_notifier(Notifier *notifier) notifier_list_add(&suspend_notifiers, notifier); } -void qemu_system_wakeup_request(void) +void qemu_system_wakeup_request(WakeupReason reason) { if (!is_suspended) { return; } + notifier_list_notify(&wakeup_notifiers, &reason); reset_requested = 1; qemu_notify_event(); is_suspended = false; } +void qemu_register_wakeup_notifier(Notifier *notifier) +{ + notifier_list_add(&wakeup_notifiers, notifier); +} + void qemu_system_killed(int signal, pid_t pid) { shutdown_signal = signal;