xref: /openbmc/qemu/include/sysemu/sysemu.h (revision 9c17d615)
1*9c17d615SPaolo Bonzini #ifndef SYSEMU_H
2*9c17d615SPaolo Bonzini #define SYSEMU_H
3*9c17d615SPaolo Bonzini /* Misc. things related to the system emulator.  */
4*9c17d615SPaolo Bonzini 
5*9c17d615SPaolo Bonzini #include "qemu/typedefs.h"
6*9c17d615SPaolo Bonzini #include "qemu/option.h"
7*9c17d615SPaolo Bonzini #include "qemu/queue.h"
8*9c17d615SPaolo Bonzini #include "qemu/timer.h"
9*9c17d615SPaolo Bonzini #include "qapi-types.h"
10*9c17d615SPaolo Bonzini #include "qemu/notify.h"
11*9c17d615SPaolo Bonzini #include "qemu/main-loop.h"
12*9c17d615SPaolo Bonzini 
13*9c17d615SPaolo Bonzini /* vl.c */
14*9c17d615SPaolo Bonzini 
15*9c17d615SPaolo Bonzini extern const char *bios_name;
16*9c17d615SPaolo Bonzini 
17*9c17d615SPaolo Bonzini extern const char *qemu_name;
18*9c17d615SPaolo Bonzini extern uint8_t qemu_uuid[];
19*9c17d615SPaolo Bonzini int qemu_uuid_parse(const char *str, uint8_t *uuid);
20*9c17d615SPaolo Bonzini #define UUID_FMT "%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx"
21*9c17d615SPaolo Bonzini 
22*9c17d615SPaolo Bonzini bool runstate_check(RunState state);
23*9c17d615SPaolo Bonzini void runstate_set(RunState new_state);
24*9c17d615SPaolo Bonzini int runstate_is_running(void);
25*9c17d615SPaolo Bonzini typedef struct vm_change_state_entry VMChangeStateEntry;
26*9c17d615SPaolo Bonzini typedef void VMChangeStateHandler(void *opaque, int running, RunState state);
27*9c17d615SPaolo Bonzini 
28*9c17d615SPaolo Bonzini VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
29*9c17d615SPaolo Bonzini                                                      void *opaque);
30*9c17d615SPaolo Bonzini void qemu_del_vm_change_state_handler(VMChangeStateEntry *e);
31*9c17d615SPaolo Bonzini void vm_state_notify(int running, RunState state);
32*9c17d615SPaolo Bonzini 
33*9c17d615SPaolo Bonzini #define VMRESET_SILENT   false
34*9c17d615SPaolo Bonzini #define VMRESET_REPORT   true
35*9c17d615SPaolo Bonzini 
36*9c17d615SPaolo Bonzini void vm_start(void);
37*9c17d615SPaolo Bonzini void vm_stop(RunState state);
38*9c17d615SPaolo Bonzini void vm_stop_force_state(RunState state);
39*9c17d615SPaolo Bonzini 
40*9c17d615SPaolo Bonzini typedef enum WakeupReason {
41*9c17d615SPaolo Bonzini     QEMU_WAKEUP_REASON_OTHER = 0,
42*9c17d615SPaolo Bonzini     QEMU_WAKEUP_REASON_RTC,
43*9c17d615SPaolo Bonzini     QEMU_WAKEUP_REASON_PMTIMER,
44*9c17d615SPaolo Bonzini } WakeupReason;
45*9c17d615SPaolo Bonzini 
46*9c17d615SPaolo Bonzini void qemu_system_reset_request(void);
47*9c17d615SPaolo Bonzini void qemu_system_suspend_request(void);
48*9c17d615SPaolo Bonzini void qemu_register_suspend_notifier(Notifier *notifier);
49*9c17d615SPaolo Bonzini void qemu_system_wakeup_request(WakeupReason reason);
50*9c17d615SPaolo Bonzini void qemu_system_wakeup_enable(WakeupReason reason, bool enabled);
51*9c17d615SPaolo Bonzini void qemu_register_wakeup_notifier(Notifier *notifier);
52*9c17d615SPaolo Bonzini void qemu_system_shutdown_request(void);
53*9c17d615SPaolo Bonzini void qemu_system_powerdown_request(void);
54*9c17d615SPaolo Bonzini void qemu_register_powerdown_notifier(Notifier *notifier);
55*9c17d615SPaolo Bonzini void qemu_system_debug_request(void);
56*9c17d615SPaolo Bonzini void qemu_system_vmstop_request(RunState reason);
57*9c17d615SPaolo Bonzini int qemu_shutdown_requested_get(void);
58*9c17d615SPaolo Bonzini int qemu_reset_requested_get(void);
59*9c17d615SPaolo Bonzini void qemu_system_killed(int signal, pid_t pid);
60*9c17d615SPaolo Bonzini void qemu_devices_reset(void);
61*9c17d615SPaolo Bonzini void qemu_system_reset(bool report);
62*9c17d615SPaolo Bonzini 
63*9c17d615SPaolo Bonzini void qemu_add_exit_notifier(Notifier *notify);
64*9c17d615SPaolo Bonzini void qemu_remove_exit_notifier(Notifier *notify);
65*9c17d615SPaolo Bonzini 
66*9c17d615SPaolo Bonzini void qemu_add_machine_init_done_notifier(Notifier *notify);
67*9c17d615SPaolo Bonzini 
68*9c17d615SPaolo Bonzini void do_savevm(Monitor *mon, const QDict *qdict);
69*9c17d615SPaolo Bonzini int load_vmstate(const char *name);
70*9c17d615SPaolo Bonzini void do_delvm(Monitor *mon, const QDict *qdict);
71*9c17d615SPaolo Bonzini void do_info_snapshots(Monitor *mon);
72*9c17d615SPaolo Bonzini 
73*9c17d615SPaolo Bonzini void qemu_announce_self(void);
74*9c17d615SPaolo Bonzini 
75*9c17d615SPaolo Bonzini bool qemu_savevm_state_blocked(Error **errp);
76*9c17d615SPaolo Bonzini int qemu_savevm_state_begin(QEMUFile *f,
77*9c17d615SPaolo Bonzini                             const MigrationParams *params);
78*9c17d615SPaolo Bonzini int qemu_savevm_state_iterate(QEMUFile *f);
79*9c17d615SPaolo Bonzini int qemu_savevm_state_complete(QEMUFile *f);
80*9c17d615SPaolo Bonzini void qemu_savevm_state_cancel(QEMUFile *f);
81*9c17d615SPaolo Bonzini int qemu_loadvm_state(QEMUFile *f);
82*9c17d615SPaolo Bonzini 
83*9c17d615SPaolo Bonzini /* SLIRP */
84*9c17d615SPaolo Bonzini void do_info_slirp(Monitor *mon);
85*9c17d615SPaolo Bonzini 
86*9c17d615SPaolo Bonzini typedef enum DisplayType
87*9c17d615SPaolo Bonzini {
88*9c17d615SPaolo Bonzini     DT_DEFAULT,
89*9c17d615SPaolo Bonzini     DT_CURSES,
90*9c17d615SPaolo Bonzini     DT_SDL,
91*9c17d615SPaolo Bonzini     DT_NOGRAPHIC,
92*9c17d615SPaolo Bonzini     DT_NONE,
93*9c17d615SPaolo Bonzini } DisplayType;
94*9c17d615SPaolo Bonzini 
95*9c17d615SPaolo Bonzini extern int autostart;
96*9c17d615SPaolo Bonzini extern int bios_size;
97*9c17d615SPaolo Bonzini 
98*9c17d615SPaolo Bonzini typedef enum {
99*9c17d615SPaolo Bonzini     VGA_NONE, VGA_STD, VGA_CIRRUS, VGA_VMWARE, VGA_XENFB, VGA_QXL,
100*9c17d615SPaolo Bonzini } VGAInterfaceType;
101*9c17d615SPaolo Bonzini 
102*9c17d615SPaolo Bonzini extern int vga_interface_type;
103*9c17d615SPaolo Bonzini #define xenfb_enabled (vga_interface_type == VGA_XENFB)
104*9c17d615SPaolo Bonzini #define qxl_enabled (vga_interface_type == VGA_QXL)
105*9c17d615SPaolo Bonzini 
106*9c17d615SPaolo Bonzini extern int graphic_width;
107*9c17d615SPaolo Bonzini extern int graphic_height;
108*9c17d615SPaolo Bonzini extern int graphic_depth;
109*9c17d615SPaolo Bonzini extern DisplayType display_type;
110*9c17d615SPaolo Bonzini extern const char *keyboard_layout;
111*9c17d615SPaolo Bonzini extern int win2k_install_hack;
112*9c17d615SPaolo Bonzini extern int alt_grab;
113*9c17d615SPaolo Bonzini extern int ctrl_grab;
114*9c17d615SPaolo Bonzini extern int smp_cpus;
115*9c17d615SPaolo Bonzini extern int max_cpus;
116*9c17d615SPaolo Bonzini extern int cursor_hide;
117*9c17d615SPaolo Bonzini extern int graphic_rotate;
118*9c17d615SPaolo Bonzini extern int no_quit;
119*9c17d615SPaolo Bonzini extern int no_shutdown;
120*9c17d615SPaolo Bonzini extern int semihosting_enabled;
121*9c17d615SPaolo Bonzini extern int old_param;
122*9c17d615SPaolo Bonzini extern int boot_menu;
123*9c17d615SPaolo Bonzini extern uint8_t *boot_splash_filedata;
124*9c17d615SPaolo Bonzini extern int boot_splash_filedata_size;
125*9c17d615SPaolo Bonzini extern uint8_t qemu_extra_params_fw[2];
126*9c17d615SPaolo Bonzini extern QEMUClock *rtc_clock;
127*9c17d615SPaolo Bonzini 
128*9c17d615SPaolo Bonzini #define MAX_NODES 64
129*9c17d615SPaolo Bonzini #define MAX_CPUMASK_BITS 255
130*9c17d615SPaolo Bonzini extern int nb_numa_nodes;
131*9c17d615SPaolo Bonzini extern uint64_t node_mem[MAX_NODES];
132*9c17d615SPaolo Bonzini extern unsigned long *node_cpumask[MAX_NODES];
133*9c17d615SPaolo Bonzini 
134*9c17d615SPaolo Bonzini #define MAX_OPTION_ROMS 16
135*9c17d615SPaolo Bonzini typedef struct QEMUOptionRom {
136*9c17d615SPaolo Bonzini     const char *name;
137*9c17d615SPaolo Bonzini     int32_t bootindex;
138*9c17d615SPaolo Bonzini } QEMUOptionRom;
139*9c17d615SPaolo Bonzini extern QEMUOptionRom option_rom[MAX_OPTION_ROMS];
140*9c17d615SPaolo Bonzini extern int nb_option_roms;
141*9c17d615SPaolo Bonzini 
142*9c17d615SPaolo Bonzini #define MAX_PROM_ENVS 128
143*9c17d615SPaolo Bonzini extern const char *prom_envs[MAX_PROM_ENVS];
144*9c17d615SPaolo Bonzini extern unsigned int nb_prom_envs;
145*9c17d615SPaolo Bonzini 
146*9c17d615SPaolo Bonzini /* pci-hotplug */
147*9c17d615SPaolo Bonzini void pci_device_hot_add(Monitor *mon, const QDict *qdict);
148*9c17d615SPaolo Bonzini int pci_drive_hot_add(Monitor *mon, const QDict *qdict, DriveInfo *dinfo);
149*9c17d615SPaolo Bonzini void do_pci_device_hot_remove(Monitor *mon, const QDict *qdict);
150*9c17d615SPaolo Bonzini 
151*9c17d615SPaolo Bonzini /* generic hotplug */
152*9c17d615SPaolo Bonzini void drive_hot_add(Monitor *mon, const QDict *qdict);
153*9c17d615SPaolo Bonzini 
154*9c17d615SPaolo Bonzini /* pcie aer error injection */
155*9c17d615SPaolo Bonzini void pcie_aer_inject_error_print(Monitor *mon, const QObject *data);
156*9c17d615SPaolo Bonzini int do_pcie_aer_inject_error(Monitor *mon,
157*9c17d615SPaolo Bonzini                              const QDict *qdict, QObject **ret_data);
158*9c17d615SPaolo Bonzini 
159*9c17d615SPaolo Bonzini /* serial ports */
160*9c17d615SPaolo Bonzini 
161*9c17d615SPaolo Bonzini #define MAX_SERIAL_PORTS 4
162*9c17d615SPaolo Bonzini 
163*9c17d615SPaolo Bonzini extern CharDriverState *serial_hds[MAX_SERIAL_PORTS];
164*9c17d615SPaolo Bonzini 
165*9c17d615SPaolo Bonzini /* parallel ports */
166*9c17d615SPaolo Bonzini 
167*9c17d615SPaolo Bonzini #define MAX_PARALLEL_PORTS 3
168*9c17d615SPaolo Bonzini 
169*9c17d615SPaolo Bonzini extern CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
170*9c17d615SPaolo Bonzini 
171*9c17d615SPaolo Bonzini void do_usb_add(Monitor *mon, const QDict *qdict);
172*9c17d615SPaolo Bonzini void do_usb_del(Monitor *mon, const QDict *qdict);
173*9c17d615SPaolo Bonzini void usb_info(Monitor *mon);
174*9c17d615SPaolo Bonzini 
175*9c17d615SPaolo Bonzini void rtc_change_mon_event(struct tm *tm);
176*9c17d615SPaolo Bonzini 
177*9c17d615SPaolo Bonzini void register_devices(void);
178*9c17d615SPaolo Bonzini 
179*9c17d615SPaolo Bonzini void add_boot_device_path(int32_t bootindex, DeviceState *dev,
180*9c17d615SPaolo Bonzini                           const char *suffix);
181*9c17d615SPaolo Bonzini char *get_boot_devices_list(uint32_t *size);
182*9c17d615SPaolo Bonzini 
183*9c17d615SPaolo Bonzini bool usb_enabled(bool default_usb);
184*9c17d615SPaolo Bonzini 
185*9c17d615SPaolo Bonzini #endif
186