xref: /openbmc/qemu/include/sysemu/runstate.h (revision 0386f39b)
154d31236SMarkus Armbruster #ifndef SYSEMU_RUNSTATE_H
254d31236SMarkus Armbruster #define SYSEMU_RUNSTATE_H
354d31236SMarkus Armbruster 
454d31236SMarkus Armbruster #include "qapi/qapi-types-run-state.h"
554d31236SMarkus Armbruster #include "qemu/notify.h"
654d31236SMarkus Armbruster 
754d31236SMarkus Armbruster bool runstate_check(RunState state);
854d31236SMarkus Armbruster void runstate_set(RunState new_state);
9242b74ebSVladimir Sementsov-Ogievskiy RunState runstate_get(void);
100a389509SPhilippe Mathieu-Daudé bool runstate_is_running(void);
1154d31236SMarkus Armbruster bool runstate_needs_reset(void);
1254d31236SMarkus Armbruster 
13538f0497SPhilippe Mathieu-Daudé typedef void VMChangeStateHandler(void *opaque, bool running, RunState state);
1454d31236SMarkus Armbruster 
1554d31236SMarkus Armbruster VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
1654d31236SMarkus Armbruster                                                      void *opaque);
1754d31236SMarkus Armbruster VMChangeStateEntry *qemu_add_vm_change_state_handler_prio(
1854d31236SMarkus Armbruster         VMChangeStateHandler *cb, void *opaque, int priority);
199d3103c8SAvihai Horon VMChangeStateEntry *
209d3103c8SAvihai Horon qemu_add_vm_change_state_handler_prio_full(VMChangeStateHandler *cb,
219d3103c8SAvihai Horon                                            VMChangeStateHandler *prepare_cb,
229d3103c8SAvihai Horon                                            void *opaque, int priority);
2354d31236SMarkus Armbruster VMChangeStateEntry *qdev_add_vm_change_state_handler(DeviceState *dev,
2454d31236SMarkus Armbruster                                                      VMChangeStateHandler *cb,
2554d31236SMarkus Armbruster                                                      void *opaque);
2602b2e253SAvihai Horon VMChangeStateEntry *qdev_add_vm_change_state_handler_full(
2702b2e253SAvihai Horon     DeviceState *dev, VMChangeStateHandler *cb,
2802b2e253SAvihai Horon     VMChangeStateHandler *prepare_cb, void *opaque);
2954d31236SMarkus Armbruster void qemu_del_vm_change_state_handler(VMChangeStateEntry *e);
30538f0497SPhilippe Mathieu-Daudé /**
31538f0497SPhilippe Mathieu-Daudé  * vm_state_notify: Notify the state of the VM
32538f0497SPhilippe Mathieu-Daudé  *
33538f0497SPhilippe Mathieu-Daudé  * @running: whether the VM is running or not.
34538f0497SPhilippe Mathieu-Daudé  * @state: the #RunState of the VM.
35538f0497SPhilippe Mathieu-Daudé  */
36538f0497SPhilippe Mathieu-Daudé void vm_state_notify(bool running, RunState state);
3754d31236SMarkus Armbruster 
shutdown_caused_by_guest(ShutdownCause cause)3854d31236SMarkus Armbruster static inline bool shutdown_caused_by_guest(ShutdownCause cause)
3954d31236SMarkus Armbruster {
4054d31236SMarkus Armbruster     return cause >= SHUTDOWN_CAUSE_GUEST_SHUTDOWN;
4154d31236SMarkus Armbruster }
4254d31236SMarkus Armbruster 
4354d31236SMarkus Armbruster void vm_start(void);
44d7482ffeSIvan Shcherbakov 
45d7482ffeSIvan Shcherbakov /**
46d7482ffeSIvan Shcherbakov  * vm_prepare_start: Prepare for starting/resuming the VM
47d7482ffeSIvan Shcherbakov  *
48d7482ffeSIvan Shcherbakov  * @step_pending: whether any of the CPUs is about to be single-stepped by gdb
49d7482ffeSIvan Shcherbakov  */
50d7482ffeSIvan Shcherbakov int vm_prepare_start(bool step_pending);
5154d31236SMarkus Armbruster int vm_stop(RunState state);
5254d31236SMarkus Armbruster int vm_stop_force_state(RunState state);
5354d31236SMarkus Armbruster int vm_shutdown(void);
5454d31236SMarkus Armbruster 
5554d31236SMarkus Armbruster typedef enum WakeupReason {
5654d31236SMarkus Armbruster     /* Always keep QEMU_WAKEUP_REASON_NONE = 0 */
5754d31236SMarkus Armbruster     QEMU_WAKEUP_REASON_NONE = 0,
5854d31236SMarkus Armbruster     QEMU_WAKEUP_REASON_RTC,
5954d31236SMarkus Armbruster     QEMU_WAKEUP_REASON_PMTIMER,
6054d31236SMarkus Armbruster     QEMU_WAKEUP_REASON_OTHER,
6154d31236SMarkus Armbruster } WakeupReason;
6254d31236SMarkus Armbruster 
6354d31236SMarkus Armbruster void qemu_system_reset_request(ShutdownCause reason);
6454d31236SMarkus Armbruster void qemu_system_suspend_request(void);
6554d31236SMarkus Armbruster void qemu_register_suspend_notifier(Notifier *notifier);
6654d31236SMarkus Armbruster bool qemu_wakeup_suspend_enabled(void);
6754d31236SMarkus Armbruster void qemu_system_wakeup_request(WakeupReason reason, Error **errp);
6854d31236SMarkus Armbruster void qemu_system_wakeup_enable(WakeupReason reason, bool enabled);
6954d31236SMarkus Armbruster void qemu_register_wakeup_notifier(Notifier *notifier);
7054d31236SMarkus Armbruster void qemu_register_wakeup_support(void);
71*0386f39bSClément Chigot void qemu_system_shutdown_request_with_code(ShutdownCause reason,
72*0386f39bSClément Chigot                                             int exit_code);
7354d31236SMarkus Armbruster void qemu_system_shutdown_request(ShutdownCause reason);
7454d31236SMarkus Armbruster void qemu_system_powerdown_request(void);
7554d31236SMarkus Armbruster void qemu_register_powerdown_notifier(Notifier *notifier);
7654d31236SMarkus Armbruster void qemu_register_shutdown_notifier(Notifier *notifier);
7754d31236SMarkus Armbruster void qemu_system_debug_request(void);
7854d31236SMarkus Armbruster void qemu_system_vmstop_request(RunState reason);
7954d31236SMarkus Armbruster void qemu_system_vmstop_request_prepare(void);
8054d31236SMarkus Armbruster bool qemu_vmstop_requested(RunState *r);
8154d31236SMarkus Armbruster ShutdownCause qemu_shutdown_requested_get(void);
8254d31236SMarkus Armbruster ShutdownCause qemu_reset_requested_get(void);
8354d31236SMarkus Armbruster void qemu_system_killed(int signal, pid_t pid);
8454d31236SMarkus Armbruster void qemu_system_reset(ShutdownCause reason);
8554d31236SMarkus Armbruster void qemu_system_guest_panicked(GuestPanicInformation *info);
867dc58deeSzhenwei pi void qemu_system_guest_crashloaded(GuestPanicInformation *info);
87544803c7SMarc-André Lureau bool qemu_system_dump_in_progress(void);
8854d31236SMarkus Armbruster 
8954d31236SMarkus Armbruster #endif
9054d31236SMarkus Armbruster 
91