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