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