xref: /openbmc/qemu/include/sysemu/runstate.h (revision d7482ffe)
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);
90a389509SPhilippe Mathieu-Daudé bool runstate_is_running(void);
1054d31236SMarkus Armbruster bool runstate_needs_reset(void);
1154d31236SMarkus Armbruster bool runstate_store(char *str, size_t size);
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);
1954d31236SMarkus Armbruster VMChangeStateEntry *qdev_add_vm_change_state_handler(DeviceState *dev,
2054d31236SMarkus Armbruster                                                      VMChangeStateHandler *cb,
2154d31236SMarkus Armbruster                                                      void *opaque);
2254d31236SMarkus Armbruster void qemu_del_vm_change_state_handler(VMChangeStateEntry *e);
23538f0497SPhilippe Mathieu-Daudé /**
24538f0497SPhilippe Mathieu-Daudé  * vm_state_notify: Notify the state of the VM
25538f0497SPhilippe Mathieu-Daudé  *
26538f0497SPhilippe Mathieu-Daudé  * @running: whether the VM is running or not.
27538f0497SPhilippe Mathieu-Daudé  * @state: the #RunState of the VM.
28538f0497SPhilippe Mathieu-Daudé  */
29538f0497SPhilippe Mathieu-Daudé void vm_state_notify(bool running, RunState state);
3054d31236SMarkus Armbruster 
3154d31236SMarkus Armbruster static inline bool shutdown_caused_by_guest(ShutdownCause cause)
3254d31236SMarkus Armbruster {
3354d31236SMarkus Armbruster     return cause >= SHUTDOWN_CAUSE_GUEST_SHUTDOWN;
3454d31236SMarkus Armbruster }
3554d31236SMarkus Armbruster 
3654d31236SMarkus Armbruster void vm_start(void);
37*d7482ffeSIvan Shcherbakov 
38*d7482ffeSIvan Shcherbakov /**
39*d7482ffeSIvan Shcherbakov  * vm_prepare_start: Prepare for starting/resuming the VM
40*d7482ffeSIvan Shcherbakov  *
41*d7482ffeSIvan Shcherbakov  * @step_pending: whether any of the CPUs is about to be single-stepped by gdb
42*d7482ffeSIvan Shcherbakov  */
43*d7482ffeSIvan Shcherbakov int vm_prepare_start(bool step_pending);
4454d31236SMarkus Armbruster int vm_stop(RunState state);
4554d31236SMarkus Armbruster int vm_stop_force_state(RunState state);
4654d31236SMarkus Armbruster int vm_shutdown(void);
4754d31236SMarkus Armbruster 
4854d31236SMarkus Armbruster typedef enum WakeupReason {
4954d31236SMarkus Armbruster     /* Always keep QEMU_WAKEUP_REASON_NONE = 0 */
5054d31236SMarkus Armbruster     QEMU_WAKEUP_REASON_NONE = 0,
5154d31236SMarkus Armbruster     QEMU_WAKEUP_REASON_RTC,
5254d31236SMarkus Armbruster     QEMU_WAKEUP_REASON_PMTIMER,
5354d31236SMarkus Armbruster     QEMU_WAKEUP_REASON_OTHER,
5454d31236SMarkus Armbruster } WakeupReason;
5554d31236SMarkus Armbruster 
5654d31236SMarkus Armbruster void qemu_system_reset_request(ShutdownCause reason);
5754d31236SMarkus Armbruster void qemu_system_suspend_request(void);
5854d31236SMarkus Armbruster void qemu_register_suspend_notifier(Notifier *notifier);
5954d31236SMarkus Armbruster bool qemu_wakeup_suspend_enabled(void);
6054d31236SMarkus Armbruster void qemu_system_wakeup_request(WakeupReason reason, Error **errp);
6154d31236SMarkus Armbruster void qemu_system_wakeup_enable(WakeupReason reason, bool enabled);
6254d31236SMarkus Armbruster void qemu_register_wakeup_notifier(Notifier *notifier);
6354d31236SMarkus Armbruster void qemu_register_wakeup_support(void);
6454d31236SMarkus Armbruster void qemu_system_shutdown_request(ShutdownCause reason);
6554d31236SMarkus Armbruster void qemu_system_powerdown_request(void);
6654d31236SMarkus Armbruster void qemu_register_powerdown_notifier(Notifier *notifier);
6754d31236SMarkus Armbruster void qemu_register_shutdown_notifier(Notifier *notifier);
6854d31236SMarkus Armbruster void qemu_system_debug_request(void);
6954d31236SMarkus Armbruster void qemu_system_vmstop_request(RunState reason);
7054d31236SMarkus Armbruster void qemu_system_vmstop_request_prepare(void);
7154d31236SMarkus Armbruster bool qemu_vmstop_requested(RunState *r);
7254d31236SMarkus Armbruster ShutdownCause qemu_shutdown_requested_get(void);
7354d31236SMarkus Armbruster ShutdownCause qemu_reset_requested_get(void);
7454d31236SMarkus Armbruster void qemu_system_killed(int signal, pid_t pid);
7554d31236SMarkus Armbruster void qemu_system_reset(ShutdownCause reason);
7654d31236SMarkus Armbruster void qemu_system_guest_panicked(GuestPanicInformation *info);
777dc58deeSzhenwei pi void qemu_system_guest_crashloaded(GuestPanicInformation *info);
78544803c7SMarc-André Lureau bool qemu_system_dump_in_progress(void);
7954d31236SMarkus Armbruster 
8054d31236SMarkus Armbruster #endif
8154d31236SMarkus Armbruster 
82