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