Home | History | Annotate | Download | only in qemu
      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 "qdict.h"
     10 #include "qerror.h"
     11 
     12 #ifdef _WIN32
     13 #include <windows.h>
     14 #endif
     15 
     16 /* vl.c */
     17 extern const char *bios_name;
     18 
     19 #define QEMU_FILE_TYPE_BIOS   0
     20 #define QEMU_FILE_TYPE_KEYMAP 1
     21 char *qemu_find_file(int type, const char *name);
     22 
     23 extern int vm_running;
     24 extern const char *qemu_name;
     25 extern uint8_t qemu_uuid[];
     26 int 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 
     29 typedef struct vm_change_state_entry VMChangeStateEntry;
     30 typedef void VMChangeStateHandler(void *opaque, int running, int reason);
     31 
     32 VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
     33                                                      void *opaque);
     34 void qemu_del_vm_change_state_handler(VMChangeStateEntry *e);
     35 
     36 void vm_start(void);
     37 void vm_stop(int reason);
     38 
     39 uint64_t ram_bytes_remaining(void);
     40 uint64_t ram_bytes_transferred(void);
     41 uint64_t ram_bytes_total(void);
     42 
     43 int64_t cpu_get_ticks(void);
     44 void cpu_enable_ticks(void);
     45 void cpu_disable_ticks(void);
     46 
     47 void qemu_system_reset_request(void);
     48 void qemu_system_shutdown_request(void);
     49 void qemu_system_powerdown_request(void);
     50 int qemu_shutdown_requested(void);
     51 int qemu_reset_requested(void);
     52 int qemu_powerdown_requested(void);
     53 #ifdef NEED_CPU_H
     54 #if !defined(TARGET_SPARC) && !defined(TARGET_I386)
     55 // Please implement a power failure function to signal the OS
     56 #define qemu_system_powerdown() do{}while(0)
     57 #else
     58 void qemu_system_powerdown(void);
     59 #endif
     60 #endif
     61 void qemu_system_reset(void);
     62 
     63 void do_savevm(Monitor *mon, const char *name);
     64 void do_loadvm(Monitor *mon, const char *name);
     65 void do_delvm(Monitor *mon, const char *name);
     66 void do_info_snapshots(Monitor *mon);
     67 
     68 void qemu_announce_self(void);
     69 
     70 void main_loop_wait(int timeout);
     71 
     72 int qemu_savevm_state_begin(QEMUFile *f);
     73 int qemu_savevm_state_iterate(QEMUFile *f);
     74 int qemu_savevm_state_complete(QEMUFile *f);
     75 int qemu_savevm_state(QEMUFile *f);
     76 int qemu_loadvm_state(QEMUFile *f);
     77 
     78 void qemu_errors_to_file(FILE *fp);
     79 void qemu_errors_to_mon(Monitor *mon);
     80 void qemu_errors_to_previous(void);
     81 void qemu_error(const char *fmt, ...) __attribute__ ((format(printf, 1, 2)));
     82 void qemu_error_internal(const char *file, int linenr, const char *func,
     83                          const char *fmt, ...)
     84                          __attribute__ ((format(printf, 4, 5)));
     85 
     86 #define qemu_error_new(fmt, ...) \
     87     qemu_error_internal(__FILE__, __LINE__, __func__, fmt, ## __VA_ARGS__)
     88 
     89 #ifdef _WIN32
     90 /* Polling handling */
     91 
     92 /* return TRUE if no sleep should be done afterwards */
     93 typedef int PollingFunc(void *opaque);
     94 
     95 int qemu_add_polling_cb(PollingFunc *func, void *opaque);
     96 void qemu_del_polling_cb(PollingFunc *func, void *opaque);
     97 
     98 /* Wait objects handling */
     99 typedef void WaitObjectFunc(void *opaque);
    100 
    101 int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque);
    102 void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque);
    103 #endif
    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_VNC,
    118     DT_NOGRAPHIC,
    119 } DisplayType;
    120 
    121 extern int bios_size;
    122 extern int cirrus_vga_enabled;
    123 extern int std_vga_enabled;
    124 extern int vmsvga_enabled;
    125 extern int xenfb_enabled;
    126 extern int graphic_width;
    127 extern int graphic_height;
    128 extern int graphic_depth;
    129 extern DisplayType display_type;
    130 extern const char *keyboard_layout;
    131 extern int win2k_install_hack;
    132 extern int rtc_td_hack;
    133 extern int alt_grab;
    134 extern int usb_enabled;
    135 extern int no_virtio_balloon;
    136 extern int smp_cpus;
    137 extern int cursor_hide;
    138 extern int graphic_rotate;
    139 extern int no_quit;
    140 extern int semihosting_enabled;
    141 extern int old_param;
    142 
    143 #ifdef CONFIG_KQEMU
    144 extern int kqemu_allowed;
    145 #endif
    146 
    147 #define MAX_NODES 64
    148 extern int nb_numa_nodes;
    149 extern uint64_t node_mem[MAX_NODES];
    150 
    151 #define MAX_OPTION_ROMS 16
    152 extern const char *option_rom[MAX_OPTION_ROMS];
    153 extern int nb_option_roms;
    154 
    155 #ifdef NEED_CPU_H
    156 #if defined(TARGET_SPARC) || defined(TARGET_PPC)
    157 #define MAX_PROM_ENVS 128
    158 extern const char *prom_envs[MAX_PROM_ENVS];
    159 extern unsigned int nb_prom_envs;
    160 #endif
    161 #endif
    162 
    163 typedef enum {
    164     IF_IDE, IF_SCSI, IF_FLOPPY, IF_PFLASH, IF_MTD, IF_SD, IF_VIRTIO, IF_XEN,
    165     IF_COUNT
    166 } BlockInterfaceType;
    167 
    168 typedef enum {
    169     BLOCK_ERR_REPORT, BLOCK_ERR_IGNORE, BLOCK_ERR_STOP_ENOSPC,
    170     BLOCK_ERR_STOP_ANY
    171 } BlockInterfaceErrorAction;
    172 
    173 typedef struct DriveInfo {
    174     BlockDriverState *bdrv;
    175     BlockInterfaceType type;
    176     int bus;
    177     int unit;
    178     int used;
    179     int drive_opt_idx;
    180     BlockInterfaceErrorAction onerror;
    181     char serial[21];
    182 } DriveInfo;
    183 
    184 #define MAX_IDE_DEVS	2
    185 #define MAX_SCSI_DEVS	7
    186 #define MAX_DRIVES 32
    187 
    188 extern int nb_drives;
    189 extern DriveInfo drives_table[MAX_DRIVES+1];
    190 
    191 extern int drive_get_index(BlockInterfaceType type, int bus, int unit);
    192 extern int drive_get_max_bus(BlockInterfaceType type);
    193 extern void drive_uninit(BlockDriverState *bdrv);
    194 extern void drive_remove(int index);
    195 extern const char *drive_get_serial(BlockDriverState *bdrv);
    196 extern BlockInterfaceErrorAction drive_get_onerror(BlockDriverState *bdrv);
    197 
    198 BlockDriverState *qdev_init_bdrv(DeviceState *dev, BlockInterfaceType type);
    199 
    200 struct drive_opt {
    201     const char *file;
    202     char opt[1024];
    203     int used;
    204 };
    205 
    206 extern struct drive_opt drives_opt[MAX_DRIVES];
    207 extern int nb_drives_opt;
    208 
    209 extern int drive_add(const char *file, const char *fmt, ...);
    210 extern int drive_init(struct drive_opt *arg, int snapshot, void *machine);
    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 int add_init_drive(const char *opts);
    221 void destroy_nic(dev_match_fn *match_fn, void *arg);
    222 void destroy_bdrvs(dev_match_fn *match_fn, void *arg);
    223 
    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 
    231 /* serial ports */
    232 
    233 #define MAX_SERIAL_PORTS 4
    234 
    235 extern CharDriverState *serial_hds[MAX_SERIAL_PORTS];
    236 
    237 /* parallel ports */
    238 
    239 #define MAX_PARALLEL_PORTS 3
    240 
    241 extern CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
    242 
    243 /* virtio consoles */
    244 
    245 #define MAX_VIRTIO_CONSOLES 1
    246 
    247 extern CharDriverState *virtcon_hds[MAX_VIRTIO_CONSOLES];
    248 
    249 #define TFR(expr) do { if ((expr) != -1) break; } while (errno == EINTR)
    250 
    251 #ifdef NEED_CPU_H
    252 /* loader.c */
    253 int get_image_size(const char *filename);
    254 int load_image(const char *filename, uint8_t *addr); /* deprecated */
    255 int load_image_targphys(const char *filename, target_phys_addr_t, int max_sz);
    256 int load_elf(const char *filename, int64_t address_offset,
    257              uint64_t *pentry, uint64_t *lowaddr, uint64_t *highaddr);
    258 int load_aout(const char *filename, target_phys_addr_t addr, int max_sz);
    259 int load_uimage(const char *filename, target_ulong *ep, target_ulong *loadaddr,
    260                 int *is_linux);
    261 
    262 int fread_targphys(target_phys_addr_t dst_addr, size_t nbytes, FILE *f);
    263 int fread_targphys_ok(target_phys_addr_t dst_addr, size_t nbytes, FILE *f);
    264 int read_targphys(int fd, target_phys_addr_t dst_addr, size_t nbytes);
    265 void pstrcpy_targphys(target_phys_addr_t dest, int buf_size,
    266                       const char *source);
    267 #endif
    268 
    269 #ifdef HAS_AUDIO
    270 struct soundhw {
    271     const char *name;
    272     const char *descr;
    273     int enabled;
    274     int isa;
    275     union {
    276         int (*init_isa) (qemu_irq *pic);
    277         int (*init_pci) (PCIBus *bus);
    278     } init;
    279 };
    280 
    281 extern struct soundhw soundhw[];
    282 #endif
    283 
    284 void do_usb_add(Monitor *mon, const char *devname);
    285 void do_usb_del(Monitor *mon, const char *devname);
    286 void usb_info(Monitor *mon);
    287 
    288 int get_param_value(char *buf, int buf_size,
    289                     const char *tag, const char *str);
    290 int check_params(char *buf, int buf_size,
    291                  const char * const *params, const char *str);
    292 
    293 void register_devices(void);
    294 
    295 #endif
    296