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