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
11
12
/* vl.c */
extern const char * bios_name ;
extern const char * bios_dir ;
extern int vm_running ;
extern const char * qemu_name ;
13
14
extern uint8_t qemu_uuid [];
# define UUID_FMT "%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx"
15
16
typedef struct vm_change_state_entry VMChangeStateEntry ;
17
typedef void VMChangeStateHandler ( void * opaque , int running , int reason );
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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 );
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 );
33
34
35
36
int qemu_shutdown_requested ( void );
int qemu_reset_requested ( void );
int qemu_powerdown_requested ( void );
# if ! defined ( TARGET_SPARC ) && ! defined ( TARGET_I386 )
37
38
39
40
41
// Please implement a power failure function to signal the OS
# define qemu_system_powerdown () do {} while ( 0 )
# else
void qemu_system_powerdown ( void );
# endif
42
void qemu_system_reset ( void );
43
44
45
46
47
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 );
48
49
50
void qemu_announce_self ( void );
51
52
void main_loop_wait ( int timeout );
53
54
55
56
57
58
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 );
59
# ifdef _WIN32
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/* 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 */
76
77
int tap_win32_init ( VLANState * vlan , const char * model ,
const char * name , const char * ifname );
78
79
/* SLIRP */
80
void do_info_slirp ( Monitor * mon );
81
82
83
extern int bios_size ;
extern int cirrus_vga_enabled ;
84
extern int std_vga_enabled ;
85
86
87
88
extern int vmsvga_enabled ;
extern int graphic_width ;
extern int graphic_height ;
extern int graphic_depth ;
89
extern int nographic ;
90
91
extern const char * keyboard_layout ;
extern int win2k_install_hack ;
92
extern int rtc_td_hack ;
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
extern int alt_grab ;
extern int usb_enabled ;
extern int smp_cpus ;
extern int cursor_hide ;
extern int graphic_rotate ;
extern int no_quit ;
extern int semihosting_enabled ;
extern int old_param ;
extern const char * bootp_filename ;
# ifdef USE_KQEMU
extern int kqemu_allowed ;
# endif
# define MAX_OPTION_ROMS 16
extern const char * option_rom [ MAX_OPTION_ROMS ];
extern int nb_option_roms ;
111
# if defined ( TARGET_SPARC ) || defined ( TARGET_PPC )
112
113
114
115
116
117
118
119
120
121
122
123
124
# define MAX_PROM_ENVS 128
extern const char * prom_envs [ MAX_PROM_ENVS ];
extern unsigned int nb_prom_envs ;
# endif
# if defined ( TARGET_PPC )
# define BIOS_SIZE ( 1024 * 1024 )
# elif defined ( TARGET_SPARC64 )
# define BIOS_SIZE (( 512 + 32 ) * 1024 )
# elif defined ( TARGET_MIPS )
# define BIOS_SIZE ( 4 * 1024 * 1024 )
# endif
ths
authored
17 years ago
125
typedef enum {
126
IF_IDE , IF_SCSI , IF_FLOPPY , IF_PFLASH , IF_MTD , IF_SD , IF_VIRTIO
ths
authored
17 years ago
127
128
} BlockInterfaceType ;
129
130
131
132
133
typedef enum {
BLOCK_ERR_REPORT , BLOCK_ERR_IGNORE , BLOCK_ERR_STOP_ENOSPC ,
BLOCK_ERR_STOP_ANY
} BlockInterfaceErrorAction ;
ths
authored
17 years ago
134
135
typedef struct DriveInfo {
BlockDriverState * bdrv ;
ths
authored
17 years ago
136
BlockInterfaceType type ;
ths
authored
17 years ago
137
138
int bus ;
int unit ;
139
int used ;
140
int drive_opt_idx ;
141
BlockInterfaceErrorAction onerror ;
142
char serial [ 21 ];
ths
authored
17 years ago
143
144
145
146
147
148
} DriveInfo ;
# define MAX_IDE_DEVS 2
# define MAX_SCSI_DEVS 7
# define MAX_DRIVES 32
149
150
extern int nb_drives ;
extern DriveInfo drives_table [ MAX_DRIVES + 1 ];
ths
authored
17 years ago
151
ths
authored
17 years ago
152
153
extern int drive_get_index ( BlockInterfaceType type , int bus , int unit );
extern int drive_get_max_bus ( BlockInterfaceType type );
154
155
extern void drive_uninit ( BlockDriverState * bdrv );
extern void drive_remove ( int index );
156
extern const char * drive_get_serial ( BlockDriverState * bdrv );
157
extern BlockInterfaceErrorAction drive_get_onerror ( BlockDriverState * bdrv );
158
159
160
161
162
163
164
165
166
167
struct drive_opt {
const char * file ;
char opt [ 1024 ];
int used ;
};
extern struct drive_opt drives_opt [ MAX_DRIVES ];
extern int nb_drives_opt ;
168
169
170
extern int drive_add ( const char * file , const char * fmt , ...);
extern int drive_init ( struct drive_opt * arg , int snapshot , void * machine );
171
172
/* acpi */
void qemu_system_hot_add_init ( void );
173
void qemu_system_device_hot_add ( int pcibus , int slot , int state );
174
175
176
177
178
179
180
181
182
183
/* 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 */
184
185
186
187
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 );
188
189
void pci_device_hot_remove_success ( int pcibus , int slot );
190
191
192
193
194
195
196
197
198
199
200
201
/* 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 ];
202
203
204
205
206
207
/* virtio consoles */
# define MAX_VIRTIO_CONSOLES 1
extern CharDriverState * virtcon_hds [ MAX_VIRTIO_CONSOLES ];
208
209
# define TFR ( expr ) do { if (( expr ) != - 1 ) break ; } while ( errno == EINTR )
210
211
212
# ifdef NEED_CPU_H
/* loader.c */
int get_image_size ( const char * filename );
213
214
int load_image ( const char * filename , uint8_t * addr ); /* deprecated */
int load_image_targphys ( const char * filename , target_phys_addr_t , int max_sz );
215
int load_elf ( const char * filename , int64_t address_offset ,
216
uint64_t * pentry , uint64_t * lowaddr , uint64_t * highaddr );
217
int load_aout ( const char * filename , target_phys_addr_t addr , int max_sz );
218
219
int load_uimage ( const char * filename , target_ulong * ep , target_ulong * loadaddr ,
int * is_linux );
220
221
222
223
224
225
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 );
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
# endif
# ifdef HAS_AUDIO
struct soundhw {
const char * name ;
const char * descr ;
int enabled ;
int isa ;
union {
int ( * init_isa ) ( AudioState * s , qemu_irq * pic );
int ( * init_pci ) ( PCIBus * bus , AudioState * s );
} init ;
};
extern struct soundhw soundhw [];
# endif
243
244
245
void do_usb_add ( Monitor * mon , const char * devname );
void do_usb_del ( Monitor * mon , const char * devname );
void usb_info ( Monitor * mon );
246
247
248
249
250
251
252
253
const char * get_opt_name ( char * buf , int buf_size , const char * p );
const char * get_opt_value ( char * buf , int buf_size , const char * p );
int get_param_value ( char * buf , int buf_size ,
const char * tag , const char * str );
int check_params ( char * buf , int buf_size ,
const char * const * params , const char * str );
254
# endif