]> git.proxmox.com Git - qemu.git/blame - sysemu.h
GPIO I2C rework
[qemu.git] / sysemu.h
CommitLineData
87ecb68b
PB
1#ifndef SYSEMU_H
2#define SYSEMU_H
3/* Misc. things related to the system emulator. */
4
376253ec 5#include "qemu-common.h"
62c5802e 6#include "qemu-option.h"
72cf2d4f 7#include "qemu-queue.h"
6875204c 8#include "qemu-timer.h"
d54908a5 9#include "qdict.h"
376253ec 10
49dc768d
AL
11#ifdef _WIN32
12#include <windows.h>
13#endif
14
87ecb68b
PB
15/* vl.c */
16extern const char *bios_name;
5cea8590
PB
17
18#define QEMU_FILE_TYPE_BIOS 0
19#define QEMU_FILE_TYPE_KEYMAP 1
20char *qemu_find_file(int type, const char *name);
87ecb68b
PB
21
22extern int vm_running;
23extern const char *qemu_name;
8fcb1b90 24extern uint8_t qemu_uuid[];
c4be29ff 25int qemu_uuid_parse(const char *str, uint8_t *uuid);
8fcb1b90 26#define UUID_FMT "%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx"
87ecb68b
PB
27
28typedef struct vm_change_state_entry VMChangeStateEntry;
9781e040 29typedef void VMChangeStateHandler(void *opaque, int running, int reason);
87ecb68b
PB
30
31VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
32 void *opaque);
33void qemu_del_vm_change_state_handler(VMChangeStateEntry *e);
34
87ecb68b
PB
35void vm_start(void);
36void vm_stop(int reason);
37
9f9e28cd
GC
38uint64_t ram_bytes_remaining(void);
39uint64_t ram_bytes_transferred(void);
40uint64_t ram_bytes_total(void);
41
87ecb68b
PB
42int64_t cpu_get_ticks(void);
43void cpu_enable_ticks(void);
44void cpu_disable_ticks(void);
45
46void qemu_system_reset_request(void);
47void qemu_system_shutdown_request(void);
48void qemu_system_powerdown_request(void);
cf7a2fe2
AJ
49int qemu_shutdown_requested(void);
50int qemu_reset_requested(void);
51int qemu_powerdown_requested(void);
d9c32310 52extern qemu_irq qemu_system_powerdown;
cf7a2fe2 53void qemu_system_reset(void);
87ecb68b 54
d54908a5 55void do_savevm(Monitor *mon, const QDict *qdict);
05f2401e 56int load_vmstate(Monitor *mon, const char *name);
d54908a5 57void do_delvm(Monitor *mon, const QDict *qdict);
376253ec 58void do_info_snapshots(Monitor *mon);
87ecb68b 59
210f41ba
AL
60void qemu_announce_self(void);
61
87ecb68b
PB
62void main_loop_wait(int timeout);
63
c163b5ca 64int qemu_savevm_state_begin(QEMUFile *f, int blk_enable, int shared);
9366f418
AL
65int qemu_savevm_state_iterate(QEMUFile *f);
66int qemu_savevm_state_complete(QEMUFile *f);
67int qemu_savevm_state(QEMUFile *f);
68int qemu_loadvm_state(QEMUFile *f);
69
ac7531ec
GH
70void qemu_errors_to_file(FILE *fp);
71void qemu_errors_to_mon(Monitor *mon);
72void qemu_errors_to_previous(void);
73void qemu_error(const char *fmt, ...) __attribute__ ((format(printf, 1, 2)));
74
56f3a5d0 75#ifdef _WIN32
87ecb68b
PB
76/* Polling handling */
77
78/* return TRUE if no sleep should be done afterwards */
79typedef int PollingFunc(void *opaque);
80
81int qemu_add_polling_cb(PollingFunc *func, void *opaque);
82void qemu_del_polling_cb(PollingFunc *func, void *opaque);
83
87ecb68b
PB
84/* Wait objects handling */
85typedef void WaitObjectFunc(void *opaque);
86
87int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque);
88void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque);
89#endif
90
87ecb68b 91/* SLIRP */
376253ec 92void do_info_slirp(Monitor *mon);
87ecb68b 93
993fbfdb
AL
94typedef enum DisplayType
95{
96 DT_DEFAULT,
97 DT_CURSES,
98 DT_SDL,
99 DT_VNC,
100 DT_NOGRAPHIC,
101} DisplayType;
102
d399f677 103extern int autostart;
87ecb68b 104extern int bios_size;
86176759
ZA
105
106typedef enum {
107 VGA_NONE, VGA_STD, VGA_CIRRUS, VGA_VMWARE, VGA_XENFB
108} VGAInterfaceType;
109
110extern int vga_interface_type;
111#define cirrus_vga_enabled (vga_interface_type == VGA_CIRRUS)
112#define std_vga_enabled (vga_interface_type == VGA_STD)
113#define xenfb_enabled (vga_interface_type == VGA_XENFB)
114#define vmsvga_enabled (vga_interface_type == VGA_VMWARE)
115
87ecb68b
PB
116extern int graphic_width;
117extern int graphic_height;
118extern int graphic_depth;
6b35e7bf 119extern uint8_t irq0override;
993fbfdb 120extern DisplayType display_type;
87ecb68b
PB
121extern const char *keyboard_layout;
122extern int win2k_install_hack;
73822ec8 123extern int rtc_td_hack;
87ecb68b 124extern int alt_grab;
0ca9f8a4 125extern int ctrl_grab;
87ecb68b
PB
126extern int usb_enabled;
127extern int smp_cpus;
6be68d7e 128extern int max_cpus;
87ecb68b
PB
129extern int cursor_hide;
130extern int graphic_rotate;
131extern int no_quit;
132extern int semihosting_enabled;
87ecb68b 133extern int old_param;
95387491 134extern int boot_menu;
6875204c 135extern QEMUClock *rtc_clock;
87ecb68b 136
268a362c
AL
137#define MAX_NODES 64
138extern int nb_numa_nodes;
139extern uint64_t node_mem[MAX_NODES];
075cd324 140extern uint64_t node_cpumask[MAX_NODES];
268a362c 141
87ecb68b
PB
142#define MAX_OPTION_ROMS 16
143extern const char *option_rom[MAX_OPTION_ROMS];
144extern int nb_option_roms;
145
1ad2134f 146#ifdef NEED_CPU_H
95efd11c 147#if defined(TARGET_SPARC) || defined(TARGET_PPC)
87ecb68b
PB
148#define MAX_PROM_ENVS 128
149extern const char *prom_envs[MAX_PROM_ENVS];
150extern unsigned int nb_prom_envs;
151#endif
1ad2134f 152#endif
87ecb68b 153
e4bcb14c 154typedef enum {
a8659e90 155 IF_NONE,
aae9460e
PB
156 IF_IDE, IF_SCSI, IF_FLOPPY, IF_PFLASH, IF_MTD, IF_SD, IF_VIRTIO, IF_XEN,
157 IF_COUNT
e4bcb14c
TS
158} BlockInterfaceType;
159
428c5705
AL
160typedef enum {
161 BLOCK_ERR_REPORT, BLOCK_ERR_IGNORE, BLOCK_ERR_STOP_ENOSPC,
162 BLOCK_ERR_STOP_ANY
163} BlockInterfaceErrorAction;
164
bf011293 165#define BLOCK_SERIAL_STRLEN 20
166
e4bcb14c
TS
167typedef struct DriveInfo {
168 BlockDriverState *bdrv;
1dae12e6 169 char *id;
c2cc47a4 170 const char *devaddr;
f60d39bc 171 BlockInterfaceType type;
e4bcb14c
TS
172 int bus;
173 int unit;
9dfd7c7a 174 QemuOpts *opts;
428c5705 175 BlockInterfaceErrorAction onerror;
bf011293 176 char serial[BLOCK_SERIAL_STRLEN + 1];
72cf2d4f 177 QTAILQ_ENTRY(DriveInfo) next;
e4bcb14c
TS
178} DriveInfo;
179
180#define MAX_IDE_DEVS 2
181#define MAX_SCSI_DEVS 7
182#define MAX_DRIVES 32
183
72cf2d4f
BS
184extern QTAILQ_HEAD(drivelist, DriveInfo) drives;
185extern QTAILQ_HEAD(driveoptlist, DriveOpt) driveopts;
e4bcb14c 186
751c6a17 187extern DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit);
2e810b36 188extern DriveInfo *drive_get_by_id(const char *id);
f60d39bc 189extern int drive_get_max_bus(BlockInterfaceType type);
56a14938 190extern void drive_uninit(DriveInfo *dinfo);
fa879c64 191extern const char *drive_get_serial(BlockDriverState *bdrv);
428c5705 192extern BlockInterfaceErrorAction drive_get_onerror(BlockDriverState *bdrv);
87ecb68b 193
aae9460e
PB
194BlockDriverState *qdev_init_bdrv(DeviceState *dev, BlockInterfaceType type);
195
9dfd7c7a
GH
196extern QemuOpts *drive_add(const char *file, const char *fmt, ...);
197extern DriveInfo *drive_init(QemuOpts *arg, void *machine, int *fatal_error);
4d73cd3b 198
6f338c34
AL
199/* device-hotplug */
200
751c6a17 201DriveInfo *add_init_drive(const char *opts);
6f338c34
AL
202
203/* pci-hotplug */
1d4daa91 204void pci_device_hot_add(Monitor *mon, const QDict *qdict);
f18c16de 205void drive_hot_add(Monitor *mon, const QDict *qdict);
376253ec 206void pci_device_hot_remove(Monitor *mon, const char *pci_addr);
6848d827
LC
207void do_pci_device_hot_remove(Monitor *mon, const QDict *qdict,
208 QObject **ret_data);
6f338c34 209
87ecb68b
PB
210/* serial ports */
211
212#define MAX_SERIAL_PORTS 4
213
214extern CharDriverState *serial_hds[MAX_SERIAL_PORTS];
215
216/* parallel ports */
217
218#define MAX_PARALLEL_PORTS 3
219
220extern CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
221
9ede2fde
AL
222/* virtio consoles */
223
224#define MAX_VIRTIO_CONSOLES 1
225
226extern CharDriverState *virtcon_hds[MAX_VIRTIO_CONSOLES];
227
0e82f34d
AL
228#define TFR(expr) do { if ((expr) != -1) break; } while (errno == EINTR)
229
87ecb68b
PB
230#ifdef HAS_AUDIO
231struct soundhw {
232 const char *name;
233 const char *descr;
234 int enabled;
235 int isa;
236 union {
22d83b14
PB
237 int (*init_isa) (qemu_irq *pic);
238 int (*init_pci) (PCIBus *bus);
87ecb68b
PB
239 } init;
240};
241
242extern struct soundhw soundhw[];
243#endif
244
d54908a5
LC
245void do_usb_add(Monitor *mon, const QDict *qdict);
246void do_usb_del(Monitor *mon, const QDict *qdict);
376253ec 247void usb_info(Monitor *mon);
87ecb68b 248
aae9460e
PB
249void register_devices(void);
250
87ecb68b 251#endif