sysemu.h revision 34c48ff1e3ad5cd2084ca40188754d45f423750b
1#ifndef SYSEMU_H 2#define SYSEMU_H 3/* Misc. things related to the system emulator. */ 4 5#include "qemu-common.h" 6#include "qemu-option.h" 7#include "qemu-queue.h" 8#include "qemu/timer.h" 9#include "qapi/qmp/qdict.h" 10#include "qapi/qmp/qerror.h" 11 12#ifdef _WIN32 13#include <windows.h> 14#endif 15 16/* vl.c */ 17extern const char *bios_name; 18 19#define QEMU_FILE_TYPE_BIOS 0 20#define QEMU_FILE_TYPE_KEYMAP 1 21char *qemu_find_file(int type, const char *name); 22 23extern int vm_running; 24extern const char *qemu_name; 25extern uint8_t qemu_uuid[]; 26int qemu_uuid_parse(const char *str, uint8_t *uuid); 27#define UUID_FMT "%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx" 28 29typedef struct vm_change_state_entry VMChangeStateEntry; 30typedef void VMChangeStateHandler(void *opaque, int running, int reason); 31 32VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb, 33 void *opaque); 34void qemu_del_vm_change_state_handler(VMChangeStateEntry *e); 35 36void vm_start(void); 37void vm_stop(int reason); 38 39uint64_t ram_bytes_remaining(void); 40uint64_t ram_bytes_transferred(void); 41uint64_t ram_bytes_total(void); 42 43int64_t cpu_get_ticks(void); 44void cpu_enable_ticks(void); 45void cpu_disable_ticks(void); 46 47void qemu_system_reset_request(void); 48void qemu_system_shutdown_request(void); 49void qemu_system_powerdown_request(void); 50int qemu_shutdown_requested(void); 51int qemu_reset_requested(void); 52int qemu_powerdown_requested(void); 53void qemu_system_killed(int signal, pid_t pid); 54#ifdef NEED_CPU_H 55#if !defined(TARGET_SPARC) 56// Please implement a power failure function to signal the OS 57#define qemu_system_powerdown() do{}while(0) 58#else 59void qemu_system_powerdown(void); 60#endif 61#endif 62void qemu_system_reset(void); 63 64void do_savevm(Monitor *mon, const char *name); 65void do_loadvm(Monitor *mon, const char *name); 66void do_delvm(Monitor *mon, const char *name); 67void do_info_snapshots(Monitor *mon, Monitor* err); 68 69void qemu_announce_self(void); 70 71void main_loop_wait(int timeout); 72 73int qemu_savevm_state_begin(QEMUFile *f); 74int qemu_savevm_state_iterate(QEMUFile *f); 75int qemu_savevm_state_complete(QEMUFile *f); 76int qemu_savevm_state(QEMUFile *f); 77int qemu_loadvm_state(QEMUFile *f); 78 79void qemu_errors_to_file(FILE *fp); 80void qemu_errors_to_mon(Monitor *mon); 81void qemu_errors_to_previous(void); 82void qemu_error(const char *fmt, ...) __attribute__ ((format(printf, 1, 2))); 83void qemu_error_internal(const char *file, int linenr, const char *func, 84 const char *fmt, ...) 85 __attribute__ ((format(printf, 4, 5))); 86 87#define qemu_error_new(fmt, ...) \ 88 qemu_error_internal(__FILE__, __LINE__, __func__, fmt, ## __VA_ARGS__) 89 90/* TAP win32 */ 91int tap_win32_init(VLANState *vlan, const char *model, 92 const char *name, const char *ifname); 93 94/* SLIRP */ 95void do_info_slirp(Monitor *mon); 96 97extern int autostart; 98extern int bios_size; 99extern int cirrus_vga_enabled; 100extern int std_vga_enabled; 101extern int vmsvga_enabled; 102extern int xenfb_enabled; 103extern int graphic_width; 104extern int graphic_height; 105extern int graphic_depth; 106extern DisplayType display_type; 107extern const char *keyboard_layout; 108extern int win2k_install_hack; 109extern int rtc_td_hack; 110extern int alt_grab; 111extern int usb_enabled; 112extern int no_virtio_balloon; 113extern int smp_cpus; 114extern int cursor_hide; 115extern int graphic_rotate; 116extern int no_quit; 117extern int semihosting_enabled; 118extern int old_param; 119extern QEMUClock *rtc_clock; 120 121#define MAX_NODES 64 122extern int nb_numa_nodes; 123extern uint64_t node_mem[MAX_NODES]; 124 125#define MAX_OPTION_ROMS 16 126extern const char *option_rom[MAX_OPTION_ROMS]; 127extern int nb_option_roms; 128 129#ifdef NEED_CPU_H 130#if defined(TARGET_SPARC) || defined(TARGET_PPC) 131#define MAX_PROM_ENVS 128 132extern const char *prom_envs[MAX_PROM_ENVS]; 133extern unsigned int nb_prom_envs; 134#endif 135#endif 136 137#if 0 138typedef enum { 139 BLOCK_ERR_REPORT, BLOCK_ERR_IGNORE, BLOCK_ERR_STOP_ENOSPC, 140 BLOCK_ERR_STOP_ANY 141} BlockInterfaceErrorAction; 142 143struct DriveInfo { 144 BlockDriverState *bdrv; 145 BlockInterfaceType type; 146 int bus; 147 int unit; 148 int used; 149 int drive_opt_idx; 150 BlockInterfaceErrorAction onerror; 151 char serial[21]; 152}; 153 154#define MAX_IDE_DEVS 2 155#define MAX_SCSI_DEVS 7 156#define MAX_DRIVES 32 157 158extern int nb_drives; 159extern DriveInfo drives_table[MAX_DRIVES+1]; 160 161extern int drive_get_index(BlockInterfaceType type, int bus, int unit); 162extern int drive_get_max_bus(BlockInterfaceType type); 163extern void drive_uninit(BlockDriverState *bdrv); 164extern void drive_remove(int index); 165extern const char *drive_get_serial(BlockDriverState *bdrv); 166extern BlockInterfaceErrorAction drive_get_onerror(BlockDriverState *bdrv); 167 168BlockDriverState *qdev_init_bdrv(DeviceState *dev, BlockInterfaceType type); 169 170struct drive_opt { 171 const char *file; 172 char opt[1024]; 173 int used; 174}; 175 176extern struct drive_opt drives_opt[MAX_DRIVES]; 177extern int nb_drives_opt; 178 179extern int drive_add(const char *file, const char *fmt, ...); 180extern int drive_init(struct drive_opt *arg, int snapshot, void *machine); 181int add_init_drive(const char *opts); 182#endif 183 184/* acpi */ 185void qemu_system_hot_add_init(void); 186void qemu_system_device_hot_add(int pcibus, int slot, int state); 187 188/* device-hotplug */ 189 190typedef int (dev_match_fn)(void *dev_private, void *arg); 191 192void destroy_nic(dev_match_fn *match_fn, void *arg); 193void destroy_bdrvs(dev_match_fn *match_fn, void *arg); 194 195#ifndef CONFIG_ANDROID 196/* pci-hotplug */ 197void pci_device_hot_add(Monitor *mon, const char *pci_addr, const char *type, 198 const char *opts); 199void drive_hot_add(Monitor *mon, const char *pci_addr, const char *opts); 200void pci_device_hot_remove(Monitor *mon, const char *pci_addr); 201void pci_device_hot_remove_success(int pcibus, int slot); 202#endif 203 204/* serial ports */ 205 206#define MAX_SERIAL_PORTS 4 207 208extern CharDriverState *serial_hds[MAX_SERIAL_PORTS]; 209 210/* parallel ports */ 211 212#define MAX_PARALLEL_PORTS 3 213 214extern CharDriverState *parallel_hds[MAX_PARALLEL_PORTS]; 215 216/* virtio consoles */ 217 218#define MAX_VIRTIO_CONSOLES 1 219 220extern CharDriverState *virtcon_hds[MAX_VIRTIO_CONSOLES]; 221 222#define TFR(expr) do { if ((expr) != -1) break; } while (errno == EINTR) 223 224#ifdef NEED_CPU_H 225/* loader.c */ 226int get_image_size(const char *filename); 227int load_image(const char *filename, uint8_t *addr); /* deprecated */ 228int load_image_targphys(const char *filename, target_phys_addr_t, int max_sz); 229int load_elf(const char *filename, int64_t address_offset, 230 uint64_t *pentry, uint64_t *lowaddr, uint64_t *highaddr); 231int load_aout(const char *filename, target_phys_addr_t addr, int max_sz); 232int load_uimage(const char *filename, target_ulong *ep, target_ulong *loadaddr, 233 int *is_linux); 234 235int fread_targphys(target_phys_addr_t dst_addr, size_t nbytes, FILE *f); 236int fread_targphys_ok(target_phys_addr_t dst_addr, size_t nbytes, FILE *f); 237int read_targphys(int fd, target_phys_addr_t dst_addr, size_t nbytes); 238void pstrcpy_targphys(target_phys_addr_t dest, int buf_size, 239 const char *source); 240#endif 241 242void do_usb_add(Monitor *mon, const char *devname); 243void do_usb_del(Monitor *mon, const char *devname); 244void usb_info(Monitor *mon); 245 246int get_param_value(char *buf, int buf_size, 247 const char *tag, const char *str); 248int check_params(char *buf, int buf_size, 249 const char * const *params, const char *str); 250 251void register_devices(void); 252 253#endif 254