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 ;
157
158
# define BLOCK_SERIAL_STRLEN 20
ths
authored
17 years ago
159
160
typedef struct DriveInfo {
BlockDriverState * bdrv ;
161
const char * devaddr ;
ths
authored
17 years ago
162
BlockInterfaceType type ;
ths
authored
17 years ago
163
164
int bus ;
int unit ;
165
int used ;
166
int drive_opt_idx ;
167
BlockInterfaceErrorAction onerror ;
168
char serial [ BLOCK_SERIAL_STRLEN + 1 ];
ths
authored
17 years ago
169
170
171
172
173
174
} DriveInfo ;
# define MAX_IDE_DEVS 2
# define MAX_SCSI_DEVS 7
# define MAX_DRIVES 32
175
176
extern int nb_drives ;
extern DriveInfo drives_table [ MAX_DRIVES + 1 ];
ths
authored
17 years ago
177
ths
authored
17 years ago
178
179
extern int drive_get_index ( BlockInterfaceType type , int bus , int unit );
extern int drive_get_max_bus ( BlockInterfaceType type );
180
181
extern void drive_uninit ( BlockDriverState * bdrv );
extern void drive_remove ( int index );
182
extern const char * drive_get_serial ( BlockDriverState * bdrv );
183
extern BlockInterfaceErrorAction drive_get_onerror ( BlockDriverState * bdrv );
184
185
186
BlockDriverState * qdev_init_bdrv ( DeviceState * dev , BlockInterfaceType type );
187
188
189
190
191
192
193
194
195
struct drive_opt {
const char * file ;
char opt [ 1024 ];
int used ;
};
extern struct drive_opt drives_opt [ MAX_DRIVES ];
extern int nb_drives_opt ;
196
197
198
extern int drive_add ( const char * file , const char * fmt , ...);
extern int drive_init ( struct drive_opt * arg , int snapshot , void * machine );
199
/* acpi */
200
201
typedef void ( * qemu_system_device_hot_add_t )( int pcibus , int slot , int state );
void qemu_system_device_hot_add_register ( qemu_system_device_hot_add_t callback );
202
void qemu_system_device_hot_add ( int pcibus , int slot , int state );
203
204
205
206
207
208
209
210
211
212
/* 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 */
213
214
215
216
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 );
217
218
void pci_device_hot_remove_success ( int pcibus , int slot );
219
220
221
222
223
224
225
226
227
228
229
230
/* 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 ];
231
232
233
234
235
236
/* virtio consoles */
# define MAX_VIRTIO_CONSOLES 1
extern CharDriverState * virtcon_hds [ MAX_VIRTIO_CONSOLES ];
237
238
# define TFR ( expr ) do { if (( expr ) != - 1 ) break ; } while ( errno == EINTR )
239
240
241
# ifdef NEED_CPU_H
/* loader.c */
int get_image_size ( const char * filename );
242
243
int load_image ( const char * filename , uint8_t * addr ); /* deprecated */
int load_image_targphys ( const char * filename , target_phys_addr_t , int max_sz );
244
int load_elf ( const char * filename , int64_t address_offset ,
245
uint64_t * pentry , uint64_t * lowaddr , uint64_t * highaddr );
246
int load_aout ( const char * filename , target_phys_addr_t addr , int max_sz );
247
248
int load_uimage ( const char * filename , target_ulong * ep , target_ulong * loadaddr ,
int * is_linux );
249
250
251
252
253
254
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 );
255
256
257
258
259
260
261
262
263
# endif
# ifdef HAS_AUDIO
struct soundhw {
const char * name ;
const char * descr ;
int enabled ;
int isa ;
union {
264
265
int ( * init_isa ) ( qemu_irq * pic );
int ( * init_pci ) ( PCIBus * bus );
266
267
268
269
270
271
} init ;
};
extern struct soundhw soundhw [];
# endif
272
273
274
void do_usb_add ( Monitor * mon , const char * devname );
void do_usb_del ( Monitor * mon , const char * devname );
void usb_info ( Monitor * mon );
275
276
277
int get_param_value ( char * buf , int buf_size ,
const char * tag , const char * str );
278
279
int get_next_param_value ( char * buf , int buf_size ,
const char * tag , const char ** pstr );
280
281
int check_params ( char * buf , int buf_size ,
const char * const * params , const char * str );
282
283
284
void register_devices ( void );
285
# endif