xref: /openbmc/qemu/include/sysemu/sysemu.h (revision 8c9a2b71)
19c17d615SPaolo Bonzini #ifndef SYSEMU_H
29c17d615SPaolo Bonzini #define SYSEMU_H
39c17d615SPaolo Bonzini /* Misc. things related to the system emulator.  */
49c17d615SPaolo Bonzini 
59c17d615SPaolo Bonzini #include "qemu/option.h"
69c17d615SPaolo Bonzini #include "qemu/queue.h"
79c17d615SPaolo Bonzini #include "qemu/timer.h"
89c17d615SPaolo Bonzini #include "qapi-types.h"
99c17d615SPaolo Bonzini #include "qemu/notify.h"
109c17d615SPaolo Bonzini #include "qemu/main-loop.h"
118c85901eSWanlong Gao #include "qemu/bitmap.h"
12dfabb8b9SPaolo Bonzini #include "qom/object.h"
139c17d615SPaolo Bonzini 
149c17d615SPaolo Bonzini /* vl.c */
159c17d615SPaolo Bonzini 
169c17d615SPaolo Bonzini extern const char *bios_name;
179c17d615SPaolo Bonzini 
189c17d615SPaolo Bonzini extern const char *qemu_name;
199c17d615SPaolo Bonzini extern uint8_t qemu_uuid[];
20fc3b3295SMarkus Armbruster extern bool qemu_uuid_set;
219c17d615SPaolo Bonzini int qemu_uuid_parse(const char *str, uint8_t *uuid);
225accc840SPaolo Bonzini 
239c17d615SPaolo Bonzini #define UUID_FMT "%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx"
245accc840SPaolo Bonzini #define UUID_NONE "00000000-0000-0000-0000-000000000000"
259c17d615SPaolo Bonzini 
269c17d615SPaolo Bonzini bool runstate_check(RunState state);
279c17d615SPaolo Bonzini void runstate_set(RunState new_state);
289c17d615SPaolo Bonzini int runstate_is_running(void);
29ede085b3SHu Tao bool runstate_needs_reset(void);
305e0f1940SJuan Quintela bool runstate_store(char *str, size_t size);
319c17d615SPaolo Bonzini typedef struct vm_change_state_entry VMChangeStateEntry;
329c17d615SPaolo Bonzini typedef void VMChangeStateHandler(void *opaque, int running, RunState state);
339c17d615SPaolo Bonzini 
349c17d615SPaolo Bonzini VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
359c17d615SPaolo Bonzini                                                      void *opaque);
369c17d615SPaolo Bonzini void qemu_del_vm_change_state_handler(VMChangeStateEntry *e);
379c17d615SPaolo Bonzini void vm_state_notify(int running, RunState state);
389c17d615SPaolo Bonzini 
399c17d615SPaolo Bonzini #define VMRESET_SILENT   false
409c17d615SPaolo Bonzini #define VMRESET_REPORT   true
419c17d615SPaolo Bonzini 
429c17d615SPaolo Bonzini void vm_start(void);
4356983463SKevin Wolf int vm_stop(RunState state);
4456983463SKevin Wolf int vm_stop_force_state(RunState state);
459c17d615SPaolo Bonzini 
469c17d615SPaolo Bonzini typedef enum WakeupReason {
474bc78a87SLiu, Jinsong     /* Always keep QEMU_WAKEUP_REASON_NONE = 0 */
484bc78a87SLiu, Jinsong     QEMU_WAKEUP_REASON_NONE = 0,
499c17d615SPaolo Bonzini     QEMU_WAKEUP_REASON_RTC,
509c17d615SPaolo Bonzini     QEMU_WAKEUP_REASON_PMTIMER,
514bc78a87SLiu, Jinsong     QEMU_WAKEUP_REASON_OTHER,
529c17d615SPaolo Bonzini } WakeupReason;
539c17d615SPaolo Bonzini 
549c17d615SPaolo Bonzini void qemu_system_reset_request(void);
559c17d615SPaolo Bonzini void qemu_system_suspend_request(void);
569c17d615SPaolo Bonzini void qemu_register_suspend_notifier(Notifier *notifier);
579c17d615SPaolo Bonzini void qemu_system_wakeup_request(WakeupReason reason);
589c17d615SPaolo Bonzini void qemu_system_wakeup_enable(WakeupReason reason, bool enabled);
599c17d615SPaolo Bonzini void qemu_register_wakeup_notifier(Notifier *notifier);
609c17d615SPaolo Bonzini void qemu_system_shutdown_request(void);
619c17d615SPaolo Bonzini void qemu_system_powerdown_request(void);
629c17d615SPaolo Bonzini void qemu_register_powerdown_notifier(Notifier *notifier);
639c17d615SPaolo Bonzini void qemu_system_debug_request(void);
649c17d615SPaolo Bonzini void qemu_system_vmstop_request(RunState reason);
6574892d24SPaolo Bonzini void qemu_system_vmstop_request_prepare(void);
669c17d615SPaolo Bonzini int qemu_shutdown_requested_get(void);
679c17d615SPaolo Bonzini int qemu_reset_requested_get(void);
689c17d615SPaolo Bonzini void qemu_system_killed(int signal, pid_t pid);
699c17d615SPaolo Bonzini void qemu_devices_reset(void);
709c17d615SPaolo Bonzini void qemu_system_reset(bool report);
715f5b5942SAndrey Smetanin void qemu_system_guest_panicked(void);
72038629a6SDr. David Alan Gilbert size_t qemu_target_page_bits(void);
739c17d615SPaolo Bonzini 
749c17d615SPaolo Bonzini void qemu_add_exit_notifier(Notifier *notify);
759c17d615SPaolo Bonzini void qemu_remove_exit_notifier(Notifier *notify);
769c17d615SPaolo Bonzini 
779c17d615SPaolo Bonzini void qemu_add_machine_init_done_notifier(Notifier *notify);
789c17d615SPaolo Bonzini 
793e5a50d6SMarkus Armbruster void hmp_savevm(Monitor *mon, const QDict *qdict);
809c17d615SPaolo Bonzini int load_vmstate(const char *name);
813e5a50d6SMarkus Armbruster void hmp_delvm(Monitor *mon, const QDict *qdict);
821ce6be24SMarkus Armbruster void hmp_info_snapshots(Monitor *mon, const QDict *qdict);
839c17d615SPaolo Bonzini 
849c17d615SPaolo Bonzini void qemu_announce_self(void);
859c17d615SPaolo Bonzini 
86c76ca188SDr. David Alan Gilbert /* Subcommands for QEMU_VM_COMMAND */
87c76ca188SDr. David Alan Gilbert enum qemu_vm_cmd {
88c76ca188SDr. David Alan Gilbert     MIG_CMD_INVALID = 0,   /* Must be 0 */
892e37701eSDr. David Alan Gilbert     MIG_CMD_OPEN_RETURN_PATH,  /* Tell the dest to open the Return path */
902e37701eSDr. David Alan Gilbert     MIG_CMD_PING,              /* Request a PONG on the RP */
91093e3c42SDr. David Alan Gilbert 
92093e3c42SDr. David Alan Gilbert     MIG_CMD_POSTCOPY_ADVISE,       /* Prior to any page transfers, just
93093e3c42SDr. David Alan Gilbert                                       warn we might want to do PC */
94093e3c42SDr. David Alan Gilbert     MIG_CMD_POSTCOPY_LISTEN,       /* Start listening for incoming
95093e3c42SDr. David Alan Gilbert                                       pages as it's running. */
96093e3c42SDr. David Alan Gilbert     MIG_CMD_POSTCOPY_RUN,          /* Start execution */
97093e3c42SDr. David Alan Gilbert 
98093e3c42SDr. David Alan Gilbert     MIG_CMD_POSTCOPY_RAM_DISCARD,  /* A list of pages to discard that
99093e3c42SDr. David Alan Gilbert                                       were previously sent during
100093e3c42SDr. David Alan Gilbert                                       precopy but are dirty. */
10111cf1d98SDr. David Alan Gilbert     MIG_CMD_PACKAGED,          /* Send a wrapped stream within this stream */
102c76ca188SDr. David Alan Gilbert     MIG_CMD_MAX
103c76ca188SDr. David Alan Gilbert };
104c76ca188SDr. David Alan Gilbert 
10511cf1d98SDr. David Alan Gilbert #define MAX_VM_CMD_PACKAGED_SIZE (1ul << 24)
10611cf1d98SDr. David Alan Gilbert 
1079c17d615SPaolo Bonzini bool qemu_savevm_state_blocked(Error **errp);
10847c8c17aSPaolo Bonzini void qemu_savevm_state_begin(QEMUFile *f,
1099c17d615SPaolo Bonzini                              const MigrationParams *params);
110f796baa1SDr. David Alan Gilbert void qemu_savevm_state_header(QEMUFile *f);
11135ecd943SDr. David Alan Gilbert int qemu_savevm_state_iterate(QEMUFile *f, bool postcopy);
112ea7415faSLiang Li void qemu_savevm_state_cleanup(void);
113763c906bSDr. David Alan Gilbert void qemu_savevm_state_complete_postcopy(QEMUFile *f);
1141c0d249dSDr. David Alan Gilbert void qemu_savevm_state_complete_precopy(QEMUFile *f, bool iterable_only);
115c31b098fSDr. David Alan Gilbert void qemu_savevm_state_pending(QEMUFile *f, uint64_t max_size,
116c31b098fSDr. David Alan Gilbert                                uint64_t *res_non_postcopiable,
117c31b098fSDr. David Alan Gilbert                                uint64_t *res_postcopiable);
118c76ca188SDr. David Alan Gilbert void qemu_savevm_command_send(QEMUFile *f, enum qemu_vm_cmd command,
119c76ca188SDr. David Alan Gilbert                               uint16_t len, uint8_t *data);
1202e37701eSDr. David Alan Gilbert void qemu_savevm_send_ping(QEMUFile *f, uint32_t value);
1212e37701eSDr. David Alan Gilbert void qemu_savevm_send_open_return_path(QEMUFile *f);
12211cf1d98SDr. David Alan Gilbert int qemu_savevm_send_packaged(QEMUFile *f, const QEMUSizedBuffer *qsb);
123093e3c42SDr. David Alan Gilbert void qemu_savevm_send_postcopy_advise(QEMUFile *f);
124093e3c42SDr. David Alan Gilbert void qemu_savevm_send_postcopy_listen(QEMUFile *f);
125093e3c42SDr. David Alan Gilbert void qemu_savevm_send_postcopy_run(QEMUFile *f);
126093e3c42SDr. David Alan Gilbert 
127093e3c42SDr. David Alan Gilbert void qemu_savevm_send_postcopy_ram_discard(QEMUFile *f, const char *name,
128093e3c42SDr. David Alan Gilbert                                            uint16_t len,
129093e3c42SDr. David Alan Gilbert                                            uint64_t *start_list,
130093e3c42SDr. David Alan Gilbert                                            uint64_t *length_list);
131093e3c42SDr. David Alan Gilbert 
1329c17d615SPaolo Bonzini int qemu_loadvm_state(QEMUFile *f);
1339c17d615SPaolo Bonzini 
1349c17d615SPaolo Bonzini typedef enum DisplayType
1359c17d615SPaolo Bonzini {
1369c17d615SPaolo Bonzini     DT_DEFAULT,
1379c17d615SPaolo Bonzini     DT_CURSES,
1389c17d615SPaolo Bonzini     DT_SDL,
139a4ccabcfSAnthony Liguori     DT_GTK,
1409c17d615SPaolo Bonzini     DT_NOGRAPHIC,
1419c17d615SPaolo Bonzini     DT_NONE,
1429c17d615SPaolo Bonzini } DisplayType;
1439c17d615SPaolo Bonzini 
1449c17d615SPaolo Bonzini extern int autostart;
1459c17d615SPaolo Bonzini 
1469c17d615SPaolo Bonzini typedef enum {
1479c17d615SPaolo Bonzini     VGA_NONE, VGA_STD, VGA_CIRRUS, VGA_VMWARE, VGA_XENFB, VGA_QXL,
148a94f0c5cSGerd Hoffmann     VGA_TCX, VGA_CG3, VGA_DEVICE, VGA_VIRTIO,
149*8c9a2b71SEduardo Habkost     VGA_TYPE_MAX,
1509c17d615SPaolo Bonzini } VGAInterfaceType;
1519c17d615SPaolo Bonzini 
1529c17d615SPaolo Bonzini extern int vga_interface_type;
1539c17d615SPaolo Bonzini #define xenfb_enabled (vga_interface_type == VGA_XENFB)
1549c17d615SPaolo Bonzini 
1559c17d615SPaolo Bonzini extern int graphic_width;
1569c17d615SPaolo Bonzini extern int graphic_height;
1579c17d615SPaolo Bonzini extern int graphic_depth;
1589c17d615SPaolo Bonzini extern DisplayType display_type;
159da076ffeSGerd Hoffmann extern int display_opengl;
1609c17d615SPaolo Bonzini extern const char *keyboard_layout;
1619c17d615SPaolo Bonzini extern int win2k_install_hack;
1629c17d615SPaolo Bonzini extern int alt_grab;
1639c17d615SPaolo Bonzini extern int ctrl_grab;
1649c17d615SPaolo Bonzini extern int smp_cpus;
1659c17d615SPaolo Bonzini extern int max_cpus;
1669c17d615SPaolo Bonzini extern int cursor_hide;
1679c17d615SPaolo Bonzini extern int graphic_rotate;
1689c17d615SPaolo Bonzini extern int no_quit;
1699c17d615SPaolo Bonzini extern int no_shutdown;
1709c17d615SPaolo Bonzini extern int old_param;
1719c17d615SPaolo Bonzini extern int boot_menu;
172bc74112fSGonglei extern bool boot_strict;
1739c17d615SPaolo Bonzini extern uint8_t *boot_splash_filedata;
174d09acb9bSMarkus Armbruster extern size_t boot_splash_filedata_size;
17558b7c17eSDr. David Alan Gilbert extern bool enable_mlock;
1769c17d615SPaolo Bonzini extern uint8_t qemu_extra_params_fw[2];
177884f17c2SAlex Bligh extern QEMUClockType rtc_clock;
178e1c57ab8SPaolo Bonzini extern const char *mem_path;
179e1c57ab8SPaolo Bonzini extern int mem_prealloc;
1809c17d615SPaolo Bonzini 
18145e30bf3SWanlong Gao #define MAX_NODES 128
1826a3042b2SMarcel Apfelbaum #define NUMA_NODE_UNASSIGNED MAX_NODES
183d2995916SEduardo Habkost 
184d2995916SEduardo Habkost /* The following shall be true for all CPUs:
185d2995916SEduardo Habkost  *   cpu->cpu_index < max_cpus <= MAX_CPUMASK_BITS
186d2995916SEduardo Habkost  *
187d2995916SEduardo Habkost  * Note that cpu->get_arch_id() may be larger than MAX_CPUMASK_BITS.
188d2995916SEduardo Habkost  */
1899c17d615SPaolo Bonzini #define MAX_CPUMASK_BITS 255
190d2995916SEduardo Habkost 
1919c17d615SPaolo Bonzini #define MAX_OPTION_ROMS 16
1929c17d615SPaolo Bonzini typedef struct QEMUOptionRom {
1939c17d615SPaolo Bonzini     const char *name;
1949c17d615SPaolo Bonzini     int32_t bootindex;
1959c17d615SPaolo Bonzini } QEMUOptionRom;
1969c17d615SPaolo Bonzini extern QEMUOptionRom option_rom[MAX_OPTION_ROMS];
1979c17d615SPaolo Bonzini extern int nb_option_roms;
1989c17d615SPaolo Bonzini 
1999c17d615SPaolo Bonzini #define MAX_PROM_ENVS 128
2009c17d615SPaolo Bonzini extern const char *prom_envs[MAX_PROM_ENVS];
2019c17d615SPaolo Bonzini extern unsigned int nb_prom_envs;
2029c17d615SPaolo Bonzini 
2039c17d615SPaolo Bonzini /* generic hotplug */
2043e5a50d6SMarkus Armbruster void hmp_drive_add(Monitor *mon, const QDict *qdict);
2059c17d615SPaolo Bonzini 
2069c17d615SPaolo Bonzini /* pcie aer error injection */
20704e00c92SMarkus Armbruster void hmp_pcie_aer_inject_error(Monitor *mon, const QDict *qdict);
2089c17d615SPaolo Bonzini 
2099c17d615SPaolo Bonzini /* serial ports */
2109c17d615SPaolo Bonzini 
2119c17d615SPaolo Bonzini #define MAX_SERIAL_PORTS 4
2129c17d615SPaolo Bonzini 
2139c17d615SPaolo Bonzini extern CharDriverState *serial_hds[MAX_SERIAL_PORTS];
2149c17d615SPaolo Bonzini 
2159c17d615SPaolo Bonzini /* parallel ports */
2169c17d615SPaolo Bonzini 
2179c17d615SPaolo Bonzini #define MAX_PARALLEL_PORTS 3
2189c17d615SPaolo Bonzini 
2199c17d615SPaolo Bonzini extern CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
2209c17d615SPaolo Bonzini 
2213e5a50d6SMarkus Armbruster void hmp_usb_add(Monitor *mon, const QDict *qdict);
2223e5a50d6SMarkus Armbruster void hmp_usb_del(Monitor *mon, const QDict *qdict);
2231ce6be24SMarkus Armbruster void hmp_info_usb(Monitor *mon, const QDict *qdict);
2249c17d615SPaolo Bonzini 
2259c17d615SPaolo Bonzini void add_boot_device_path(int32_t bootindex, DeviceState *dev,
2269c17d615SPaolo Bonzini                           const char *suffix);
22730e32af7SAlexey Kardashevskiy char *get_boot_devices_list(size_t *size, bool ignore_suffixes);
2289c17d615SPaolo Bonzini 
2297dc5af55SDominik Dingel DeviceState *get_boot_device(uint32_t position);
230694fb857SGonglei void check_boot_index(int32_t bootindex, Error **errp);
2319d27572dSGonglei void del_boot_device_path(DeviceState *dev, const char *suffix);
23212da3097SGonglei void device_add_bootindex_property(Object *obj, int32_t *bootindex,
23312da3097SGonglei                                    const char *name, const char *suffix,
23412da3097SGonglei                                    DeviceState *dev, Error **errp);
2359816833dSGonglei void restore_boot_order(void *opaque);
236703008e8SGonglei void validate_bootdevices(const char *devices, Error **errp);
2379816833dSGonglei 
2383b53e45fSEduardo Habkost /* handler to set the boot_device order for a specific type of MachineClass */
239ddcd5531SGonglei typedef void QEMUBootSetHandler(void *opaque, const char *boot_order,
240ddcd5531SGonglei                                 Error **errp);
2419816833dSGonglei void qemu_register_boot_set(QEMUBootSetHandler *func, void *opaque);
242f1839938SGonglei void qemu_boot_set(const char *boot_order, Error **errp);
2437dc5af55SDominik Dingel 
2447f9d6e54SMarkus Armbruster QemuOpts *qemu_get_machine_opts(void);
2457f9d6e54SMarkus Armbruster 
246f8b6f8edSMarcel Apfelbaum bool defaults_enabled(void);
247de77a243SMarcel Apfelbaum bool usb_enabled(void);
2489c17d615SPaolo Bonzini 
249968854c8SAmos Kong extern QemuOptsList qemu_legacy_drive_opts;
250968854c8SAmos Kong extern QemuOptsList qemu_common_drive_opts;
2514d454574SPaolo Bonzini extern QemuOptsList qemu_drive_opts;
2524d454574SPaolo Bonzini extern QemuOptsList qemu_chardev_opts;
2534d454574SPaolo Bonzini extern QemuOptsList qemu_device_opts;
2544d454574SPaolo Bonzini extern QemuOptsList qemu_netdev_opts;
2554d454574SPaolo Bonzini extern QemuOptsList qemu_net_opts;
2564d454574SPaolo Bonzini extern QemuOptsList qemu_global_opts;
2574d454574SPaolo Bonzini extern QemuOptsList qemu_mon_opts;
2584d454574SPaolo Bonzini 
2599c17d615SPaolo Bonzini #endif
260