]> git.proxmox.com Git - mirror_qemu.git/blame - vl.c
Make `-icount' help fit 80 chars screen width (Robert Riebisch)
[mirror_qemu.git] / vl.c
CommitLineData
0824d6fc 1/*
80cabfad 2 * QEMU System Emulator
5fafdf24 3 *
68d0f70e 4 * Copyright (c) 2003-2008 Fabrice Bellard
5fafdf24 5 *
1df912cf
FB
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 * THE SOFTWARE.
0824d6fc 23 */
0824d6fc 24#include <unistd.h>
0824d6fc
FB
25#include <fcntl.h>
26#include <signal.h>
27#include <time.h>
0824d6fc 28#include <errno.h>
67b915a5 29#include <sys/time.h>
c88676f8 30#include <zlib.h>
67b915a5 31
179a2c19 32/* Needed early for HOST_BSD etc. */
d40cdb10
BS
33#include "config-host.h"
34
67b915a5 35#ifndef _WIN32
0858532e 36#include <pwd.h>
67b915a5 37#include <sys/times.h>
f1510b2c 38#include <sys/wait.h>
67b915a5 39#include <termios.h>
67b915a5 40#include <sys/mman.h>
f1510b2c 41#include <sys/ioctl.h>
24646c7e 42#include <sys/resource.h>
f1510b2c 43#include <sys/socket.h>
c94c8d64 44#include <netinet/in.h>
24646c7e
BS
45#include <net/if.h>
46#if defined(__NetBSD__)
47#include <net/if_tap.h>
48#endif
49#ifdef __linux__
50#include <linux/if_tun.h>
51#endif
52#include <arpa/inet.h>
9d728e8c 53#include <dirent.h>
7c9d8e07 54#include <netdb.h>
cb4b976b 55#include <sys/select.h>
179a2c19 56#ifdef HOST_BSD
7d3505c5 57#include <sys/stat.h>
c5e97233 58#if defined(__FreeBSD__) || defined(__DragonFly__)
7d3505c5 59#include <libutil.h>
24646c7e
BS
60#else
61#include <util.h>
128ab2ff 62#endif
5c40d2bd
TS
63#elif defined (__GLIBC__) && defined (__FreeBSD_kernel__)
64#include <freebsd/stdlib.h>
7d3505c5 65#else
223f0d72 66#ifdef __linux__
7d3505c5
FB
67#include <pty.h>
68#include <malloc.h>
fd872598 69#include <linux/rtc.h>
bd494f4c
TS
70
71/* For the benefit of older linux systems which don't supply it,
72 we use a local copy of hpet.h. */
73/* #include <linux/hpet.h> */
74#include "hpet.h"
75
e57a8c0e 76#include <linux/ppdev.h>
5867c88a 77#include <linux/parport.h>
223f0d72
BS
78#endif
79#ifdef __sun__
d5d10bc3
TS
80#include <sys/stat.h>
81#include <sys/ethernet.h>
82#include <sys/sockio.h>
d5d10bc3
TS
83#include <netinet/arp.h>
84#include <netinet/in.h>
85#include <netinet/in_systm.h>
86#include <netinet/ip.h>
87#include <netinet/ip_icmp.h> // must come after ip.h
88#include <netinet/udp.h>
89#include <netinet/tcp.h>
90#include <net/if.h>
91#include <syslog.h>
92#include <stropts.h>
67b915a5 93#endif
7d3505c5 94#endif
ec530c81 95#endif
67b915a5 96
9892fbfb
BS
97#if defined(__OpenBSD__)
98#include <util.h>
99#endif
100
8a16d273
TS
101#if defined(CONFIG_VDE)
102#include <libvdeplug.h>
103#endif
104
67b915a5 105#ifdef _WIN32
49dc768d 106#include <windows.h>
7d3505c5 107#include <malloc.h>
67b915a5 108#include <sys/timeb.h>
4fddf62a 109#include <mmsystem.h>
67b915a5
FB
110#define getopt_long_only getopt_long
111#define memalign(align, size) malloc(size)
112#endif
113
73332e5c 114#ifdef CONFIG_SDL
96bcd4f8 115#ifdef __APPLE__
83fb7adf 116#include <SDL/SDL.h>
880fec5d 117int qemu_main(int argc, char **argv, char **envp);
118int main(int argc, char **argv)
119{
120 qemu_main(argc, argv, NULL);
121}
122#undef main
123#define main qemu_main
96bcd4f8 124#endif
73332e5c 125#endif /* CONFIG_SDL */
0824d6fc 126
5b0753e0
FB
127#ifdef CONFIG_COCOA
128#undef main
129#define main qemu_main
130#endif /* CONFIG_COCOA */
131
511d2b14
BS
132#include "hw/hw.h"
133#include "hw/boards.h"
134#include "hw/usb.h"
135#include "hw/pcmcia.h"
136#include "hw/pc.h"
137#include "hw/audiodev.h"
138#include "hw/isa.h"
139#include "hw/baum.h"
140#include "hw/bt.h"
5ef4efa4 141#include "bt-host.h"
511d2b14
BS
142#include "net.h"
143#include "monitor.h"
144#include "console.h"
145#include "sysemu.h"
146#include "gdbstub.h"
147#include "qemu-timer.h"
148#include "qemu-char.h"
149#include "cache-utils.h"
150#include "block.h"
a718acec 151#include "dma.h"
511d2b14
BS
152#include "audio/audio.h"
153#include "migration.h"
154#include "kvm.h"
155#include "balloon.h"
156
0824d6fc 157#include "disas.h"
fc01f7e7 158
8a7ddc38 159#include "exec-all.h"
0824d6fc 160
511d2b14
BS
161#include "qemu_socket.h"
162
163#if defined(CONFIG_SLIRP)
164#include "libslirp.h"
165#endif
166
0824d6fc 167//#define DEBUG_UNUSED_IOPORT
fd872598 168//#define DEBUG_IOPORT
9dc63a1e
BS
169//#define DEBUG_NET
170//#define DEBUG_SLIRP
330d0414 171
d12d51d5
AL
172
173#ifdef DEBUG_IOPORT
93fcfe39 174# define LOG_IOPORT(...) qemu_log_mask(CPU_LOG_IOPORT, ## __VA_ARGS__)
d12d51d5
AL
175#else
176# define LOG_IOPORT(...) do { } while (0)
177#endif
178
1bfe856e 179#define DEFAULT_RAM_SIZE 128
313aa567 180
0d92ed30
PB
181/* Max number of USB devices that can be specified on the commandline. */
182#define MAX_USB_CMDLINE 8
183
dc72ac14
AZ
184/* Max number of bluetooth switches on the commandline. */
185#define MAX_BT_CMDLINE 10
186
7dea1da4
FB
187/* XXX: use a two level table to limit memory usage */
188#define MAX_IOPORTS 65536
0824d6fc 189
80cabfad 190const char *bios_dir = CONFIG_QEMU_SHAREDIR;
1192dad8 191const char *bios_name = NULL;
dbed7e40
BS
192static void *ioport_opaque[MAX_IOPORTS];
193static IOPortReadFunc *ioport_read_table[3][MAX_IOPORTS];
194static IOPortWriteFunc *ioport_write_table[3][MAX_IOPORTS];
e4bcb14c 195/* Note: drives_table[MAX_DRIVES] is a dummy block driver if none available
faea38e7 196 to store the VM snapshots */
e4bcb14c
TS
197DriveInfo drives_table[MAX_DRIVES+1];
198int nb_drives;
dbed7e40 199static int vga_ram_size;
cb5a7aa8 200enum vga_retrace_method vga_retrace_method = VGA_RETRACE_DUMB;
3023f332 201static DisplayState *display_state;
a20dd508 202int nographic;
dbed7e40 203static int curses;
7d957bd8 204static int sdl;
3d11d0eb 205const char* keyboard_layout = NULL;
313aa567 206int64_t ticks_per_sec;
00f82b8a 207ram_addr_t ram_size;
c4b1fcc0 208int nb_nics;
7c9d8e07 209NICInfo nd_table[MAX_NICS];
8a7ddc38 210int vm_running;
c0f4ce77 211static int autostart;
f6503059
AZ
212static int rtc_utc = 1;
213static int rtc_date_offset = -1; /* -1 means no change */
1bfe856e 214int cirrus_vga_enabled = 1;
c2b3b41a 215int std_vga_enabled = 0;
d34cab9f 216int vmsvga_enabled = 0;
d827220b
FB
217#ifdef TARGET_SPARC
218int graphic_width = 1024;
219int graphic_height = 768;
eee0b836 220int graphic_depth = 8;
d827220b 221#else
1bfe856e
FB
222int graphic_width = 800;
223int graphic_height = 600;
e9b137c2 224int graphic_depth = 15;
eee0b836 225#endif
dbed7e40 226static int full_screen = 0;
634a21f6 227#ifdef CONFIG_SDL
dbed7e40 228static int no_frame = 0;
634a21f6 229#endif
667accab 230int no_quit = 0;
8d11df9e 231CharDriverState *serial_hds[MAX_SERIAL_PORTS];
6508fe59 232CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
9ede2fde 233CharDriverState *virtcon_hds[MAX_VIRTIO_CONSOLES];
a09db21f
FB
234#ifdef TARGET_I386
235int win2k_install_hack = 0;
73822ec8 236int rtc_td_hack = 0;
a09db21f 237#endif
bb36d470 238int usb_enabled = 0;
6a00d601 239int smp_cpus = 1;
73fc9742 240const char *vnc_display;
6515b203 241int acpi_enabled = 1;
16b29ae1 242int no_hpet = 0;
52ca8d6a 243int fd_bootchk = 1;
d1beab82 244int no_reboot = 0;
b2f76161 245int no_shutdown = 0;
9467cd46 246int cursor_hide = 1;
a171fe39 247int graphic_rotate = 0;
b9e82a59 248#ifndef _WIN32
71e3ceb8 249int daemonize = 0;
b9e82a59 250#endif
9ae02555
TS
251const char *option_rom[MAX_OPTION_ROMS];
252int nb_option_roms;
8e71621f 253int semihosting_enabled = 0;
2b8f2d41
AZ
254#ifdef TARGET_ARM
255int old_param = 0;
256#endif
c35734b2 257const char *qemu_name;
3780e197 258int alt_grab = 0;
95efd11c 259#if defined(TARGET_SPARC) || defined(TARGET_PPC)
66508601
BS
260unsigned int nb_prom_envs = 0;
261const char *prom_envs[MAX_PROM_ENVS];
262#endif
ec691c80
AL
263int nb_drives_opt;
264struct drive_opt drives_opt[MAX_DRIVES];
0824d6fc 265
ee5605e5
AZ
266static CPUState *cur_cpu;
267static CPUState *next_cpu;
76ea08f9 268static int event_pending = 1;
bf20dc07 269/* Conversion factor from emulated instructions to virtual clock ticks. */
2e70f6ef 270static int icount_time_shift;
bf20dc07 271/* Arbitrarily pick 1MIPS as the minimum allowable speed. */
2e70f6ef
PB
272#define MAX_ICOUNT_SHIFT 10
273/* Compensate for varying guest execution speed. */
274static int64_t qemu_icount_bias;
dbed7e40
BS
275static QEMUTimer *icount_rt_timer;
276static QEMUTimer *icount_vm_timer;
9043b62d 277static QEMUTimer *nographic_timer;
ee5605e5 278
8fcb1b90
BS
279uint8_t qemu_uuid[16];
280
0824d6fc 281/***********************************************************/
26aa7d72
FB
282/* x86 ISA bus support */
283
284target_phys_addr_t isa_mem_base = 0;
3de388f6 285PicState2 *isa_pic;
0824d6fc 286
477e3edf
AL
287static IOPortReadFunc default_ioport_readb, default_ioport_readw, default_ioport_readl;
288static IOPortWriteFunc default_ioport_writeb, default_ioport_writew, default_ioport_writel;
289
290static uint32_t ioport_read(int index, uint32_t address)
291{
292 static IOPortReadFunc *default_func[3] = {
293 default_ioport_readb,
294 default_ioport_readw,
295 default_ioport_readl
296 };
297 IOPortReadFunc *func = ioport_read_table[index][address];
298 if (!func)
299 func = default_func[index];
300 return func(ioport_opaque[address], address);
301}
302
303static void ioport_write(int index, uint32_t address, uint32_t data)
304{
305 static IOPortWriteFunc *default_func[3] = {
306 default_ioport_writeb,
307 default_ioport_writew,
308 default_ioport_writel
309 };
310 IOPortWriteFunc *func = ioport_write_table[index][address];
311 if (!func)
312 func = default_func[index];
313 func(ioport_opaque[address], address, data);
314}
315
9596ebb7 316static uint32_t default_ioport_readb(void *opaque, uint32_t address)
0824d6fc
FB
317{
318#ifdef DEBUG_UNUSED_IOPORT
1196be37 319 fprintf(stderr, "unused inb: port=0x%04x\n", address);
0824d6fc 320#endif
fc01f7e7 321 return 0xff;
0824d6fc
FB
322}
323
9596ebb7 324static void default_ioport_writeb(void *opaque, uint32_t address, uint32_t data)
0824d6fc
FB
325{
326#ifdef DEBUG_UNUSED_IOPORT
1196be37 327 fprintf(stderr, "unused outb: port=0x%04x data=0x%02x\n", address, data);
0824d6fc
FB
328#endif
329}
330
331/* default is to make two byte accesses */
9596ebb7 332static uint32_t default_ioport_readw(void *opaque, uint32_t address)
0824d6fc
FB
333{
334 uint32_t data;
477e3edf 335 data = ioport_read(0, address);
db45c29a 336 address = (address + 1) & (MAX_IOPORTS - 1);
477e3edf 337 data |= ioport_read(0, address) << 8;
0824d6fc
FB
338 return data;
339}
340
9596ebb7 341static void default_ioport_writew(void *opaque, uint32_t address, uint32_t data)
0824d6fc 342{
477e3edf 343 ioport_write(0, address, data & 0xff);
db45c29a 344 address = (address + 1) & (MAX_IOPORTS - 1);
477e3edf 345 ioport_write(0, address, (data >> 8) & 0xff);
0824d6fc
FB
346}
347
9596ebb7 348static uint32_t default_ioport_readl(void *opaque, uint32_t address)
0824d6fc 349{
fc01f7e7 350#ifdef DEBUG_UNUSED_IOPORT
1196be37 351 fprintf(stderr, "unused inl: port=0x%04x\n", address);
fc01f7e7
FB
352#endif
353 return 0xffffffff;
0824d6fc
FB
354}
355
9596ebb7 356static void default_ioport_writel(void *opaque, uint32_t address, uint32_t data)
0824d6fc 357{
fc01f7e7 358#ifdef DEBUG_UNUSED_IOPORT
1196be37 359 fprintf(stderr, "unused outl: port=0x%04x data=0x%02x\n", address, data);
fc01f7e7 360#endif
0824d6fc
FB
361}
362
fc01f7e7 363/* size is the word size in byte */
5fafdf24 364int register_ioport_read(int start, int length, int size,
c4b1fcc0 365 IOPortReadFunc *func, void *opaque)
f1510b2c 366{
fc01f7e7 367 int i, bsize;
f1510b2c 368
c4b1fcc0 369 if (size == 1) {
fc01f7e7 370 bsize = 0;
c4b1fcc0 371 } else if (size == 2) {
fc01f7e7 372 bsize = 1;
c4b1fcc0 373 } else if (size == 4) {
fc01f7e7 374 bsize = 2;
c4b1fcc0 375 } else {
88fdf56f 376 hw_error("register_ioport_read: invalid size");
fc01f7e7 377 return -1;
c4b1fcc0
FB
378 }
379 for(i = start; i < start + length; i += size) {
fc01f7e7 380 ioport_read_table[bsize][i] = func;
c4b1fcc0 381 if (ioport_opaque[i] != NULL && ioport_opaque[i] != opaque)
88fdf56f 382 hw_error("register_ioport_read: invalid opaque");
c4b1fcc0
FB
383 ioport_opaque[i] = opaque;
384 }
f1510b2c
FB
385 return 0;
386}
387
fc01f7e7 388/* size is the word size in byte */
5fafdf24 389int register_ioport_write(int start, int length, int size,
c4b1fcc0 390 IOPortWriteFunc *func, void *opaque)
f1510b2c 391{
fc01f7e7 392 int i, bsize;
f1510b2c 393
c4b1fcc0 394 if (size == 1) {
fc01f7e7 395 bsize = 0;
c4b1fcc0 396 } else if (size == 2) {
fc01f7e7 397 bsize = 1;
c4b1fcc0 398 } else if (size == 4) {
fc01f7e7 399 bsize = 2;
c4b1fcc0 400 } else {
88fdf56f 401 hw_error("register_ioport_write: invalid size");
fc01f7e7 402 return -1;
c4b1fcc0
FB
403 }
404 for(i = start; i < start + length; i += size) {
fc01f7e7 405 ioport_write_table[bsize][i] = func;
88fdf56f
AZ
406 if (ioport_opaque[i] != NULL && ioport_opaque[i] != opaque)
407 hw_error("register_ioport_write: invalid opaque");
c4b1fcc0
FB
408 ioport_opaque[i] = opaque;
409 }
f1510b2c
FB
410 return 0;
411}
412
69b91039
FB
413void isa_unassign_ioport(int start, int length)
414{
415 int i;
416
417 for(i = start; i < start + length; i++) {
418 ioport_read_table[0][i] = default_ioport_readb;
419 ioport_read_table[1][i] = default_ioport_readw;
420 ioport_read_table[2][i] = default_ioport_readl;
421
422 ioport_write_table[0][i] = default_ioport_writeb;
423 ioport_write_table[1][i] = default_ioport_writew;
424 ioport_write_table[2][i] = default_ioport_writel;
a7607f7e
AL
425
426 ioport_opaque[i] = NULL;
69b91039
FB
427 }
428}
429
20f32282
FB
430/***********************************************************/
431
c45886db 432void cpu_outb(CPUState *env, int addr, int val)
0824d6fc 433{
d12d51d5 434 LOG_IOPORT("outb: %04x %02x\n", addr, val);
477e3edf 435 ioport_write(0, addr, val);
89bfc105
FB
436#ifdef USE_KQEMU
437 if (env)
438 env->last_io_time = cpu_get_time_fast();
439#endif
0824d6fc
FB
440}
441
c45886db 442void cpu_outw(CPUState *env, int addr, int val)
0824d6fc 443{
d12d51d5 444 LOG_IOPORT("outw: %04x %04x\n", addr, val);
477e3edf 445 ioport_write(1, addr, val);
89bfc105
FB
446#ifdef USE_KQEMU
447 if (env)
448 env->last_io_time = cpu_get_time_fast();
449#endif
0824d6fc
FB
450}
451
c45886db 452void cpu_outl(CPUState *env, int addr, int val)
0824d6fc 453{
d12d51d5 454 LOG_IOPORT("outl: %04x %08x\n", addr, val);
477e3edf 455 ioport_write(2, addr, val);
89bfc105
FB
456#ifdef USE_KQEMU
457 if (env)
458 env->last_io_time = cpu_get_time_fast();
459#endif
0824d6fc
FB
460}
461
c45886db 462int cpu_inb(CPUState *env, int addr)
0824d6fc 463{
fd872598 464 int val;
477e3edf 465 val = ioport_read(0, addr);
d12d51d5 466 LOG_IOPORT("inb : %04x %02x\n", addr, val);
89bfc105
FB
467#ifdef USE_KQEMU
468 if (env)
469 env->last_io_time = cpu_get_time_fast();
fd872598
FB
470#endif
471 return val;
0824d6fc
FB
472}
473
c45886db 474int cpu_inw(CPUState *env, int addr)
0824d6fc 475{
fd872598 476 int val;
477e3edf 477 val = ioport_read(1, addr);
d12d51d5 478 LOG_IOPORT("inw : %04x %04x\n", addr, val);
89bfc105
FB
479#ifdef USE_KQEMU
480 if (env)
481 env->last_io_time = cpu_get_time_fast();
fd872598
FB
482#endif
483 return val;
0824d6fc
FB
484}
485
c45886db 486int cpu_inl(CPUState *env, int addr)
0824d6fc 487{
fd872598 488 int val;
477e3edf 489 val = ioport_read(2, addr);
d12d51d5 490 LOG_IOPORT("inl : %04x %08x\n", addr, val);
89bfc105
FB
491#ifdef USE_KQEMU
492 if (env)
493 env->last_io_time = cpu_get_time_fast();
fd872598
FB
494#endif
495 return val;
0824d6fc
FB
496}
497
498/***********************************************************/
0824d6fc
FB
499void hw_error(const char *fmt, ...)
500{
501 va_list ap;
6a00d601 502 CPUState *env;
0824d6fc
FB
503
504 va_start(ap, fmt);
505 fprintf(stderr, "qemu: hardware error: ");
506 vfprintf(stderr, fmt, ap);
507 fprintf(stderr, "\n");
6a00d601
FB
508 for(env = first_cpu; env != NULL; env = env->next_cpu) {
509 fprintf(stderr, "CPU #%d:\n", env->cpu_index);
0824d6fc 510#ifdef TARGET_I386
6a00d601 511 cpu_dump_state(env, stderr, fprintf, X86_DUMP_FPU);
c45886db 512#else
6a00d601 513 cpu_dump_state(env, stderr, fprintf, 0);
0824d6fc 514#endif
6a00d601 515 }
0824d6fc
FB
516 va_end(ap);
517 abort();
518}
df751fa8
AL
519
520/***************/
521/* ballooning */
522
523static QEMUBalloonEvent *qemu_balloon_event;
524void *qemu_balloon_event_opaque;
525
526void qemu_add_balloon_handler(QEMUBalloonEvent *func, void *opaque)
527{
528 qemu_balloon_event = func;
529 qemu_balloon_event_opaque = opaque;
530}
531
532void qemu_balloon(ram_addr_t target)
533{
534 if (qemu_balloon_event)
535 qemu_balloon_event(qemu_balloon_event_opaque, target);
536}
537
538ram_addr_t qemu_balloon_status(void)
539{
540 if (qemu_balloon_event)
541 return qemu_balloon_event(qemu_balloon_event_opaque, 0);
542 return 0;
543}
0824d6fc 544
63066f4f
FB
545/***********************************************************/
546/* keyboard/mouse */
547
548static QEMUPutKBDEvent *qemu_put_kbd_event;
549static void *qemu_put_kbd_event_opaque;
455204eb
TS
550static QEMUPutMouseEntry *qemu_put_mouse_event_head;
551static QEMUPutMouseEntry *qemu_put_mouse_event_current;
63066f4f
FB
552
553void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque)
554{
555 qemu_put_kbd_event_opaque = opaque;
556 qemu_put_kbd_event = func;
557}
558
455204eb
TS
559QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
560 void *opaque, int absolute,
561 const char *name)
63066f4f 562{
455204eb
TS
563 QEMUPutMouseEntry *s, *cursor;
564
565 s = qemu_mallocz(sizeof(QEMUPutMouseEntry));
455204eb
TS
566
567 s->qemu_put_mouse_event = func;
568 s->qemu_put_mouse_event_opaque = opaque;
569 s->qemu_put_mouse_event_absolute = absolute;
570 s->qemu_put_mouse_event_name = qemu_strdup(name);
571 s->next = NULL;
572
573 if (!qemu_put_mouse_event_head) {
574 qemu_put_mouse_event_head = qemu_put_mouse_event_current = s;
575 return s;
576 }
577
578 cursor = qemu_put_mouse_event_head;
579 while (cursor->next != NULL)
580 cursor = cursor->next;
581
582 cursor->next = s;
583 qemu_put_mouse_event_current = s;
584
585 return s;
586}
587
588void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry)
589{
590 QEMUPutMouseEntry *prev = NULL, *cursor;
591
592 if (!qemu_put_mouse_event_head || entry == NULL)
593 return;
594
595 cursor = qemu_put_mouse_event_head;
596 while (cursor != NULL && cursor != entry) {
597 prev = cursor;
598 cursor = cursor->next;
599 }
600
601 if (cursor == NULL) // does not exist or list empty
602 return;
603 else if (prev == NULL) { // entry is head
604 qemu_put_mouse_event_head = cursor->next;
605 if (qemu_put_mouse_event_current == entry)
606 qemu_put_mouse_event_current = cursor->next;
607 qemu_free(entry->qemu_put_mouse_event_name);
608 qemu_free(entry);
609 return;
610 }
611
612 prev->next = entry->next;
613
614 if (qemu_put_mouse_event_current == entry)
615 qemu_put_mouse_event_current = prev;
616
617 qemu_free(entry->qemu_put_mouse_event_name);
618 qemu_free(entry);
63066f4f
FB
619}
620
621void kbd_put_keycode(int keycode)
622{
623 if (qemu_put_kbd_event) {
624 qemu_put_kbd_event(qemu_put_kbd_event_opaque, keycode);
625 }
626}
627
628void kbd_mouse_event(int dx, int dy, int dz, int buttons_state)
629{
455204eb
TS
630 QEMUPutMouseEvent *mouse_event;
631 void *mouse_event_opaque;
a171fe39 632 int width;
455204eb
TS
633
634 if (!qemu_put_mouse_event_current) {
635 return;
636 }
637
638 mouse_event =
639 qemu_put_mouse_event_current->qemu_put_mouse_event;
640 mouse_event_opaque =
641 qemu_put_mouse_event_current->qemu_put_mouse_event_opaque;
642
643 if (mouse_event) {
a171fe39
AZ
644 if (graphic_rotate) {
645 if (qemu_put_mouse_event_current->qemu_put_mouse_event_absolute)
646 width = 0x7fff;
647 else
b94ed577 648 width = graphic_width - 1;
a171fe39
AZ
649 mouse_event(mouse_event_opaque,
650 width - dy, dx, dz, buttons_state);
651 } else
652 mouse_event(mouse_event_opaque,
653 dx, dy, dz, buttons_state);
63066f4f
FB
654 }
655}
656
09b26c5e
FB
657int kbd_mouse_is_absolute(void)
658{
455204eb
TS
659 if (!qemu_put_mouse_event_current)
660 return 0;
661
662 return qemu_put_mouse_event_current->qemu_put_mouse_event_absolute;
663}
664
376253ec 665void do_info_mice(Monitor *mon)
455204eb
TS
666{
667 QEMUPutMouseEntry *cursor;
668 int index = 0;
669
670 if (!qemu_put_mouse_event_head) {
376253ec 671 monitor_printf(mon, "No mouse devices connected\n");
455204eb
TS
672 return;
673 }
674
376253ec 675 monitor_printf(mon, "Mouse devices available:\n");
455204eb
TS
676 cursor = qemu_put_mouse_event_head;
677 while (cursor != NULL) {
376253ec
AL
678 monitor_printf(mon, "%c Mouse #%d: %s\n",
679 (cursor == qemu_put_mouse_event_current ? '*' : ' '),
680 index, cursor->qemu_put_mouse_event_name);
455204eb
TS
681 index++;
682 cursor = cursor->next;
683 }
684}
685
376253ec 686void do_mouse_set(Monitor *mon, int index)
455204eb
TS
687{
688 QEMUPutMouseEntry *cursor;
689 int i = 0;
690
691 if (!qemu_put_mouse_event_head) {
376253ec 692 monitor_printf(mon, "No mouse devices connected\n");
455204eb
TS
693 return;
694 }
695
696 cursor = qemu_put_mouse_event_head;
697 while (cursor != NULL && index != i) {
698 i++;
699 cursor = cursor->next;
700 }
701
702 if (cursor != NULL)
703 qemu_put_mouse_event_current = cursor;
704 else
376253ec 705 monitor_printf(mon, "Mouse at given index not found\n");
09b26c5e
FB
706}
707
1dce7c3c
FB
708/* compute with 96 bit intermediate result: (a*b)/c */
709uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c)
0824d6fc 710{
1dce7c3c
FB
711 union {
712 uint64_t ll;
713 struct {
714#ifdef WORDS_BIGENDIAN
715 uint32_t high, low;
716#else
717 uint32_t low, high;
3b46e624 718#endif
1dce7c3c
FB
719 } l;
720 } u, res;
721 uint64_t rl, rh;
0824d6fc 722
1dce7c3c
FB
723 u.ll = a;
724 rl = (uint64_t)u.l.low * (uint64_t)b;
725 rh = (uint64_t)u.l.high * (uint64_t)b;
726 rh += (rl >> 32);
727 res.l.high = rh / c;
728 res.l.low = (((rh % c) << 32) + (rl & 0xffffffff)) / c;
729 return res.ll;
34865134
FB
730}
731
1dce7c3c
FB
732/***********************************************************/
733/* real time host monotonic timer */
34865134 734
1dce7c3c 735#define QEMU_TIMER_BASE 1000000000LL
34865134 736
1dce7c3c 737#ifdef WIN32
0824d6fc 738
1dce7c3c 739static int64_t clock_freq;
1115dde7 740
1dce7c3c 741static void init_get_clock(void)
1115dde7 742{
a8e5ac33
FB
743 LARGE_INTEGER freq;
744 int ret;
1dce7c3c
FB
745 ret = QueryPerformanceFrequency(&freq);
746 if (ret == 0) {
747 fprintf(stderr, "Could not calibrate ticks\n");
748 exit(1);
749 }
750 clock_freq = freq.QuadPart;
1115dde7
FB
751}
752
1dce7c3c 753static int64_t get_clock(void)
b8076a74 754{
1dce7c3c
FB
755 LARGE_INTEGER ti;
756 QueryPerformanceCounter(&ti);
757 return muldiv64(ti.QuadPart, QEMU_TIMER_BASE, clock_freq);
b8076a74
FB
758}
759
1dce7c3c 760#else
90cb9493 761
1dce7c3c
FB
762static int use_rt_clock;
763
764static void init_get_clock(void)
90cb9493 765{
1dce7c3c 766 use_rt_clock = 0;
c5e97233
BS
767#if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD_version >= 500000) \
768 || defined(__DragonFly__)
1dce7c3c
FB
769 {
770 struct timespec ts;
771 if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0) {
772 use_rt_clock = 1;
773 }
774 }
775#endif
90cb9493
FB
776}
777
1dce7c3c 778static int64_t get_clock(void)
fdbb4691 779{
c5e97233
BS
780#if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD_version >= 500000) \
781 || defined(__DragonFly__)
1dce7c3c
FB
782 if (use_rt_clock) {
783 struct timespec ts;
784 clock_gettime(CLOCK_MONOTONIC, &ts);
785 return ts.tv_sec * 1000000000LL + ts.tv_nsec;
5fafdf24 786 } else
fdbb4691 787#endif
1dce7c3c
FB
788 {
789 /* XXX: using gettimeofday leads to problems if the date
790 changes, so it should be avoided. */
791 struct timeval tv;
792 gettimeofday(&tv, NULL);
793 return tv.tv_sec * 1000000000LL + (tv.tv_usec * 1000);
794 }
fdbb4691 795}
34865134
FB
796#endif
797
2e70f6ef
PB
798/* Return the virtual CPU time, based on the instruction counter. */
799static int64_t cpu_get_icount(void)
800{
801 int64_t icount;
802 CPUState *env = cpu_single_env;;
803 icount = qemu_icount;
804 if (env) {
805 if (!can_do_io(env))
806 fprintf(stderr, "Bad clock read\n");
807 icount -= (env->icount_decr.u16.low + env->icount_extra);
808 }
809 return qemu_icount_bias + (icount << icount_time_shift);
810}
811
1dce7c3c
FB
812/***********************************************************/
813/* guest cycle counter */
814
eade0f19 815static int64_t cpu_ticks_prev;
34865134 816static int64_t cpu_ticks_offset;
1dce7c3c 817static int64_t cpu_clock_offset;
8a7ddc38 818static int cpu_ticks_enabled;
34865134 819
1dce7c3c
FB
820/* return the host CPU cycle counter and handle stop/restart */
821int64_t cpu_get_ticks(void)
34865134 822{
2e70f6ef
PB
823 if (use_icount) {
824 return cpu_get_icount();
825 }
8a7ddc38
FB
826 if (!cpu_ticks_enabled) {
827 return cpu_ticks_offset;
828 } else {
eade0f19
FB
829 int64_t ticks;
830 ticks = cpu_get_real_ticks();
831 if (cpu_ticks_prev > ticks) {
832 /* Note: non increasing ticks may happen if the host uses
833 software suspend */
834 cpu_ticks_offset += cpu_ticks_prev - ticks;
835 }
836 cpu_ticks_prev = ticks;
837 return ticks + cpu_ticks_offset;
8a7ddc38 838 }
34865134
FB
839}
840
1dce7c3c
FB
841/* return the host CPU monotonic timer and handle stop/restart */
842static int64_t cpu_get_clock(void)
843{
844 int64_t ti;
845 if (!cpu_ticks_enabled) {
846 return cpu_clock_offset;
847 } else {
848 ti = get_clock();
849 return ti + cpu_clock_offset;
850 }
851}
852
34865134
FB
853/* enable cpu_get_ticks() */
854void cpu_enable_ticks(void)
855{
8a7ddc38
FB
856 if (!cpu_ticks_enabled) {
857 cpu_ticks_offset -= cpu_get_real_ticks();
1dce7c3c 858 cpu_clock_offset -= get_clock();
8a7ddc38
FB
859 cpu_ticks_enabled = 1;
860 }
34865134
FB
861}
862
863/* disable cpu_get_ticks() : the clock is stopped. You must not call
864 cpu_get_ticks() after that. */
865void cpu_disable_ticks(void)
866{
8a7ddc38
FB
867 if (cpu_ticks_enabled) {
868 cpu_ticks_offset = cpu_get_ticks();
1dce7c3c 869 cpu_clock_offset = cpu_get_clock();
8a7ddc38
FB
870 cpu_ticks_enabled = 0;
871 }
34865134
FB
872}
873
1dce7c3c
FB
874/***********************************************************/
875/* timers */
5fafdf24 876
8a7ddc38
FB
877#define QEMU_TIMER_REALTIME 0
878#define QEMU_TIMER_VIRTUAL 1
879
880struct QEMUClock {
881 int type;
882 /* XXX: add frequency */
883};
884
885struct QEMUTimer {
886 QEMUClock *clock;
887 int64_t expire_time;
888 QEMUTimerCB *cb;
889 void *opaque;
890 struct QEMUTimer *next;
891};
892
c8994013
TS
893struct qemu_alarm_timer {
894 char const *name;
efe75411 895 unsigned int flags;
c8994013
TS
896
897 int (*start)(struct qemu_alarm_timer *t);
898 void (*stop)(struct qemu_alarm_timer *t);
efe75411 899 void (*rearm)(struct qemu_alarm_timer *t);
c8994013
TS
900 void *priv;
901};
902
efe75411 903#define ALARM_FLAG_DYNTICKS 0x1
d5d08334 904#define ALARM_FLAG_EXPIRED 0x2
efe75411
TS
905
906static inline int alarm_has_dynticks(struct qemu_alarm_timer *t)
907{
908 return t->flags & ALARM_FLAG_DYNTICKS;
909}
910
911static void qemu_rearm_alarm_timer(struct qemu_alarm_timer *t)
912{
913 if (!alarm_has_dynticks(t))
914 return;
915
916 t->rearm(t);
917}
918
919/* TODO: MIN_TIMER_REARM_US should be optimized */
920#define MIN_TIMER_REARM_US 250
921
c8994013 922static struct qemu_alarm_timer *alarm_timer;
f49e58dc 923#ifndef _WIN32
c96f1a48 924static int alarm_timer_rfd, alarm_timer_wfd;
f49e58dc 925#endif
8a7ddc38 926
40c3bac3 927#ifdef _WIN32
c8994013
TS
928
929struct qemu_alarm_win32 {
930 MMRESULT timerId;
931 HANDLE host_alarm;
932 unsigned int period;
933} alarm_win32_data = {0, NULL, -1};
934
935static int win32_start_timer(struct qemu_alarm_timer *t);
936static void win32_stop_timer(struct qemu_alarm_timer *t);
efe75411 937static void win32_rearm_timer(struct qemu_alarm_timer *t);
c8994013 938
40c3bac3 939#else
c8994013
TS
940
941static int unix_start_timer(struct qemu_alarm_timer *t);
942static void unix_stop_timer(struct qemu_alarm_timer *t);
943
231c6586
TS
944#ifdef __linux__
945
efe75411
TS
946static int dynticks_start_timer(struct qemu_alarm_timer *t);
947static void dynticks_stop_timer(struct qemu_alarm_timer *t);
948static void dynticks_rearm_timer(struct qemu_alarm_timer *t);
949
c40ec5a9
TS
950static int hpet_start_timer(struct qemu_alarm_timer *t);
951static void hpet_stop_timer(struct qemu_alarm_timer *t);
952
c8994013
TS
953static int rtc_start_timer(struct qemu_alarm_timer *t);
954static void rtc_stop_timer(struct qemu_alarm_timer *t);
955
efe75411 956#endif /* __linux__ */
8a7ddc38 957
c8994013
TS
958#endif /* _WIN32 */
959
2e70f6ef 960/* Correlation between real and virtual time is always going to be
bf20dc07 961 fairly approximate, so ignore small variation.
2e70f6ef
PB
962 When the guest is idle real and virtual time will be aligned in
963 the IO wait loop. */
964#define ICOUNT_WOBBLE (QEMU_TIMER_BASE / 10)
965
966static void icount_adjust(void)
967{
968 int64_t cur_time;
969 int64_t cur_icount;
970 int64_t delta;
971 static int64_t last_delta;
972 /* If the VM is not running, then do nothing. */
973 if (!vm_running)
974 return;
975
976 cur_time = cpu_get_clock();
977 cur_icount = qemu_get_clock(vm_clock);
978 delta = cur_icount - cur_time;
979 /* FIXME: This is a very crude algorithm, somewhat prone to oscillation. */
980 if (delta > 0
981 && last_delta + ICOUNT_WOBBLE < delta * 2
982 && icount_time_shift > 0) {
983 /* The guest is getting too far ahead. Slow time down. */
984 icount_time_shift--;
985 }
986 if (delta < 0
987 && last_delta - ICOUNT_WOBBLE > delta * 2
988 && icount_time_shift < MAX_ICOUNT_SHIFT) {
989 /* The guest is getting too far behind. Speed time up. */
990 icount_time_shift++;
991 }
992 last_delta = delta;
993 qemu_icount_bias = cur_icount - (qemu_icount << icount_time_shift);
994}
995
996static void icount_adjust_rt(void * opaque)
997{
998 qemu_mod_timer(icount_rt_timer,
999 qemu_get_clock(rt_clock) + 1000);
1000 icount_adjust();
1001}
1002
1003static void icount_adjust_vm(void * opaque)
1004{
1005 qemu_mod_timer(icount_vm_timer,
1006 qemu_get_clock(vm_clock) + QEMU_TIMER_BASE / 10);
1007 icount_adjust();
1008}
1009
1010static void init_icount_adjust(void)
1011{
1012 /* Have both realtime and virtual time triggers for speed adjustment.
1013 The realtime trigger catches emulated time passing too slowly,
1014 the virtual time trigger catches emulated time passing too fast.
1015 Realtime triggers occur even when idle, so use them less frequently
1016 than VM triggers. */
1017 icount_rt_timer = qemu_new_timer(rt_clock, icount_adjust_rt, NULL);
1018 qemu_mod_timer(icount_rt_timer,
1019 qemu_get_clock(rt_clock) + 1000);
1020 icount_vm_timer = qemu_new_timer(vm_clock, icount_adjust_vm, NULL);
1021 qemu_mod_timer(icount_vm_timer,
1022 qemu_get_clock(vm_clock) + QEMU_TIMER_BASE / 10);
1023}
1024
c8994013 1025static struct qemu_alarm_timer alarm_timers[] = {
efe75411 1026#ifndef _WIN32
231c6586 1027#ifdef __linux__
efe75411
TS
1028 {"dynticks", ALARM_FLAG_DYNTICKS, dynticks_start_timer,
1029 dynticks_stop_timer, dynticks_rearm_timer, NULL},
c40ec5a9 1030 /* HPET - if available - is preferred */
efe75411 1031 {"hpet", 0, hpet_start_timer, hpet_stop_timer, NULL, NULL},
c40ec5a9 1032 /* ...otherwise try RTC */
efe75411 1033 {"rtc", 0, rtc_start_timer, rtc_stop_timer, NULL, NULL},
c8994013 1034#endif
efe75411 1035 {"unix", 0, unix_start_timer, unix_stop_timer, NULL, NULL},
c8994013 1036#else
efe75411
TS
1037 {"dynticks", ALARM_FLAG_DYNTICKS, win32_start_timer,
1038 win32_stop_timer, win32_rearm_timer, &alarm_win32_data},
1039 {"win32", 0, win32_start_timer,
1040 win32_stop_timer, NULL, &alarm_win32_data},
c8994013
TS
1041#endif
1042 {NULL, }
1043};
1044
3f47aa8c 1045static void show_available_alarms(void)
f3dcfada
TS
1046{
1047 int i;
1048
1049 printf("Available alarm timers, in order of precedence:\n");
1050 for (i = 0; alarm_timers[i].name; i++)
1051 printf("%s\n", alarm_timers[i].name);
1052}
1053
1054static void configure_alarms(char const *opt)
1055{
1056 int i;
1057 int cur = 0;
b1503cda 1058 int count = ARRAY_SIZE(alarm_timers) - 1;
f3dcfada
TS
1059 char *arg;
1060 char *name;
2e70f6ef 1061 struct qemu_alarm_timer tmp;
f3dcfada 1062
3adda04c 1063 if (!strcmp(opt, "?")) {
f3dcfada
TS
1064 show_available_alarms();
1065 exit(0);
1066 }
1067
1068 arg = strdup(opt);
1069
1070 /* Reorder the array */
1071 name = strtok(arg, ",");
1072 while (name) {
e2b577e5 1073 for (i = 0; i < count && alarm_timers[i].name; i++) {
f3dcfada
TS
1074 if (!strcmp(alarm_timers[i].name, name))
1075 break;
1076 }
1077
1078 if (i == count) {
1079 fprintf(stderr, "Unknown clock %s\n", name);
1080 goto next;
1081 }
1082
1083 if (i < cur)
1084 /* Ignore */
1085 goto next;
1086
1087 /* Swap */
1088 tmp = alarm_timers[i];
1089 alarm_timers[i] = alarm_timers[cur];
1090 alarm_timers[cur] = tmp;
1091
1092 cur++;
1093next:
1094 name = strtok(NULL, ",");
1095 }
1096
1097 free(arg);
1098
1099 if (cur) {
2e70f6ef 1100 /* Disable remaining timers */
f3dcfada
TS
1101 for (i = cur; i < count; i++)
1102 alarm_timers[i].name = NULL;
3adda04c
AJ
1103 } else {
1104 show_available_alarms();
1105 exit(1);
f3dcfada 1106 }
f3dcfada
TS
1107}
1108
c8994013
TS
1109QEMUClock *rt_clock;
1110QEMUClock *vm_clock;
1111
1112static QEMUTimer *active_timers[2];
1113
9596ebb7 1114static QEMUClock *qemu_new_clock(int type)
8a7ddc38
FB
1115{
1116 QEMUClock *clock;
1117 clock = qemu_mallocz(sizeof(QEMUClock));
8a7ddc38
FB
1118 clock->type = type;
1119 return clock;
1120}
1121
1122QEMUTimer *qemu_new_timer(QEMUClock *clock, QEMUTimerCB *cb, void *opaque)
1123{
1124 QEMUTimer *ts;
1125
1126 ts = qemu_mallocz(sizeof(QEMUTimer));
1127 ts->clock = clock;
1128 ts->cb = cb;
1129 ts->opaque = opaque;
1130 return ts;
1131}
1132
1133void qemu_free_timer(QEMUTimer *ts)
1134{
1135 qemu_free(ts);
1136}
1137
1138/* stop a timer, but do not dealloc it */
1139void qemu_del_timer(QEMUTimer *ts)
1140{
1141 QEMUTimer **pt, *t;
1142
1143 /* NOTE: this code must be signal safe because
1144 qemu_timer_expired() can be called from a signal. */
1145 pt = &active_timers[ts->clock->type];
1146 for(;;) {
1147 t = *pt;
1148 if (!t)
1149 break;
1150 if (t == ts) {
1151 *pt = t->next;
1152 break;
1153 }
1154 pt = &t->next;
1155 }
1156}
1157
1158/* modify the current timer so that it will be fired when current_time
1159 >= expire_time. The corresponding callback will be called. */
1160void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time)
1161{
1162 QEMUTimer **pt, *t;
1163
1164 qemu_del_timer(ts);
1165
1166 /* add the timer in the sorted list */
1167 /* NOTE: this code must be signal safe because
1168 qemu_timer_expired() can be called from a signal. */
1169 pt = &active_timers[ts->clock->type];
1170 for(;;) {
1171 t = *pt;
1172 if (!t)
1173 break;
5fafdf24 1174 if (t->expire_time > expire_time)
8a7ddc38
FB
1175 break;
1176 pt = &t->next;
1177 }
1178 ts->expire_time = expire_time;
1179 ts->next = *pt;
1180 *pt = ts;
d5d08334
AZ
1181
1182 /* Rearm if necessary */
2e70f6ef
PB
1183 if (pt == &active_timers[ts->clock->type]) {
1184 if ((alarm_timer->flags & ALARM_FLAG_EXPIRED) == 0) {
1185 qemu_rearm_alarm_timer(alarm_timer);
1186 }
1187 /* Interrupt execution to force deadline recalculation. */
1188 if (use_icount && cpu_single_env) {
3098dba0 1189 cpu_exit(cpu_single_env);
2e70f6ef
PB
1190 }
1191 }
8a7ddc38
FB
1192}
1193
1194int qemu_timer_pending(QEMUTimer *ts)
1195{
1196 QEMUTimer *t;
1197 for(t = active_timers[ts->clock->type]; t != NULL; t = t->next) {
1198 if (t == ts)
1199 return 1;
1200 }
1201 return 0;
1202}
1203
1204static inline int qemu_timer_expired(QEMUTimer *timer_head, int64_t current_time)
1205{
1206 if (!timer_head)
1207 return 0;
1208 return (timer_head->expire_time <= current_time);
1209}
1210
1211static void qemu_run_timers(QEMUTimer **ptimer_head, int64_t current_time)
1212{
1213 QEMUTimer *ts;
3b46e624 1214
8a7ddc38
FB
1215 for(;;) {
1216 ts = *ptimer_head;
e95c8d51 1217 if (!ts || ts->expire_time > current_time)
8a7ddc38
FB
1218 break;
1219 /* remove timer from the list before calling the callback */
1220 *ptimer_head = ts->next;
1221 ts->next = NULL;
3b46e624 1222
8a7ddc38
FB
1223 /* run the callback (the timer list can be modified) */
1224 ts->cb(ts->opaque);
1225 }
1226}
1227
1228int64_t qemu_get_clock(QEMUClock *clock)
1229{
1230 switch(clock->type) {
1231 case QEMU_TIMER_REALTIME:
1dce7c3c 1232 return get_clock() / 1000000;
8a7ddc38
FB
1233 default:
1234 case QEMU_TIMER_VIRTUAL:
2e70f6ef
PB
1235 if (use_icount) {
1236 return cpu_get_icount();
1237 } else {
1238 return cpu_get_clock();
1239 }
8a7ddc38
FB
1240 }
1241}
1242
1dce7c3c
FB
1243static void init_timers(void)
1244{
1245 init_get_clock();
1246 ticks_per_sec = QEMU_TIMER_BASE;
1247 rt_clock = qemu_new_clock(QEMU_TIMER_REALTIME);
1248 vm_clock = qemu_new_clock(QEMU_TIMER_VIRTUAL);
1249}
1250
8a7ddc38
FB
1251/* save a timer */
1252void qemu_put_timer(QEMUFile *f, QEMUTimer *ts)
1253{
1254 uint64_t expire_time;
1255
1256 if (qemu_timer_pending(ts)) {
1257 expire_time = ts->expire_time;
1258 } else {
1259 expire_time = -1;
1260 }
1261 qemu_put_be64(f, expire_time);
1262}
1263
1264void qemu_get_timer(QEMUFile *f, QEMUTimer *ts)
1265{
1266 uint64_t expire_time;
1267
1268 expire_time = qemu_get_be64(f);
1269 if (expire_time != -1) {
1270 qemu_mod_timer(ts, expire_time);
1271 } else {
1272 qemu_del_timer(ts);
1273 }
1274}
1275
1276static void timer_save(QEMUFile *f, void *opaque)
1277{
1278 if (cpu_ticks_enabled) {
1279 hw_error("cannot save state if virtual timers are running");
1280 }
bee8d684
TS
1281 qemu_put_be64(f, cpu_ticks_offset);
1282 qemu_put_be64(f, ticks_per_sec);
1283 qemu_put_be64(f, cpu_clock_offset);
8a7ddc38
FB
1284}
1285
1286static int timer_load(QEMUFile *f, void *opaque, int version_id)
1287{
c88676f8 1288 if (version_id != 1 && version_id != 2)
8a7ddc38
FB
1289 return -EINVAL;
1290 if (cpu_ticks_enabled) {
1291 return -EINVAL;
1292 }
bee8d684
TS
1293 cpu_ticks_offset=qemu_get_be64(f);
1294 ticks_per_sec=qemu_get_be64(f);
c88676f8 1295 if (version_id == 2) {
bee8d684 1296 cpu_clock_offset=qemu_get_be64(f);
c88676f8 1297 }
8a7ddc38
FB
1298 return 0;
1299}
1300
67b915a5 1301#ifdef _WIN32
b9e82a59
BS
1302static void CALLBACK host_alarm_handler(UINT uTimerID, UINT uMsg,
1303 DWORD_PTR dwUser, DWORD_PTR dw1,
1304 DWORD_PTR dw2)
67b915a5 1305#else
8a7ddc38 1306static void host_alarm_handler(int host_signum)
67b915a5 1307#endif
8a7ddc38 1308{
02ba45c5
FB
1309#if 0
1310#define DISP_FREQ 1000
1311 {
1312 static int64_t delta_min = INT64_MAX;
1313 static int64_t delta_max, delta_cum, last_clock, delta, ti;
1314 static int count;
1315 ti = qemu_get_clock(vm_clock);
1316 if (last_clock != 0) {
1317 delta = ti - last_clock;
1318 if (delta < delta_min)
1319 delta_min = delta;
1320 if (delta > delta_max)
1321 delta_max = delta;
1322 delta_cum += delta;
1323 if (++count == DISP_FREQ) {
26a76461 1324 printf("timer: min=%" PRId64 " us max=%" PRId64 " us avg=%" PRId64 " us avg_freq=%0.3f Hz\n",
02ba45c5
FB
1325 muldiv64(delta_min, 1000000, ticks_per_sec),
1326 muldiv64(delta_max, 1000000, ticks_per_sec),
1327 muldiv64(delta_cum, 1000000 / DISP_FREQ, ticks_per_sec),
1328 (double)ticks_per_sec / ((double)delta_cum / DISP_FREQ));
1329 count = 0;
1330 delta_min = INT64_MAX;
1331 delta_max = 0;
1332 delta_cum = 0;
1333 }
1334 }
1335 last_clock = ti;
1336 }
1337#endif
efe75411 1338 if (alarm_has_dynticks(alarm_timer) ||
2e70f6ef
PB
1339 (!use_icount &&
1340 qemu_timer_expired(active_timers[QEMU_TIMER_VIRTUAL],
1341 qemu_get_clock(vm_clock))) ||
8a7ddc38
FB
1342 qemu_timer_expired(active_timers[QEMU_TIMER_REALTIME],
1343 qemu_get_clock(rt_clock))) {
c96f1a48 1344 CPUState *env = next_cpu;
c96f1a48 1345
06d9f2f7 1346#ifdef _WIN32
c8994013
TS
1347 struct qemu_alarm_win32 *data = ((struct qemu_alarm_timer*)dwUser)->priv;
1348 SetEvent(data->host_alarm);
f49e58dc
AL
1349#else
1350 static const char byte = 0;
c96f1a48 1351 write(alarm_timer_wfd, &byte, sizeof(byte));
f49e58dc 1352#endif
d5d08334
AZ
1353 alarm_timer->flags |= ALARM_FLAG_EXPIRED;
1354
4f8eb8da
AZ
1355 if (env) {
1356 /* stop the currently executing cpu because a timer occured */
3098dba0 1357 cpu_exit(env);
a332e112 1358#ifdef USE_KQEMU
4f8eb8da
AZ
1359 if (env->kqemu_enabled) {
1360 kqemu_cpu_interrupt(env);
1361 }
ee5605e5 1362#endif
4f8eb8da 1363 }
ee5605e5 1364 event_pending = 1;
8a7ddc38
FB
1365 }
1366}
1367
2e70f6ef 1368static int64_t qemu_next_deadline(void)
efe75411 1369{
2e70f6ef 1370 int64_t delta;
efe75411
TS
1371
1372 if (active_timers[QEMU_TIMER_VIRTUAL]) {
2e70f6ef
PB
1373 delta = active_timers[QEMU_TIMER_VIRTUAL]->expire_time -
1374 qemu_get_clock(vm_clock);
1375 } else {
1376 /* To avoid problems with overflow limit this to 2^32. */
1377 delta = INT32_MAX;
efe75411
TS
1378 }
1379
2e70f6ef
PB
1380 if (delta < 0)
1381 delta = 0;
efe75411 1382
2e70f6ef
PB
1383 return delta;
1384}
1385
8632fb9a 1386#if defined(__linux__) || defined(_WIN32)
2e70f6ef
PB
1387static uint64_t qemu_next_deadline_dyntick(void)
1388{
1389 int64_t delta;
1390 int64_t rtdelta;
1391
1392 if (use_icount)
1393 delta = INT32_MAX;
1394 else
1395 delta = (qemu_next_deadline() + 999) / 1000;
1396
1397 if (active_timers[QEMU_TIMER_REALTIME]) {
1398 rtdelta = (active_timers[QEMU_TIMER_REALTIME]->expire_time -
1399 qemu_get_clock(rt_clock))*1000;
1400 if (rtdelta < delta)
1401 delta = rtdelta;
1402 }
1403
1404 if (delta < MIN_TIMER_REARM_US)
1405 delta = MIN_TIMER_REARM_US;
1406
1407 return delta;
efe75411 1408}
8632fb9a 1409#endif
efe75411 1410
fd872598
FB
1411#ifndef _WIN32
1412
7183b4b4
AL
1413/* Sets a specific flag */
1414static int fcntl_setfl(int fd, int flag)
1415{
1416 int flags;
1417
1418 flags = fcntl(fd, F_GETFL);
1419 if (flags == -1)
1420 return -errno;
1421
1422 if (fcntl(fd, F_SETFL, flags | flag) == -1)
1423 return -errno;
1424
1425 return 0;
1426}
1427
829309c7
FB
1428#if defined(__linux__)
1429
fd872598
FB
1430#define RTC_FREQ 1024
1431
de9a95f0 1432static void enable_sigio_timer(int fd)
c8994013
TS
1433{
1434 struct sigaction act;
1435
1436 /* timer signal */
1437 sigfillset(&act.sa_mask);
1438 act.sa_flags = 0;
c8994013
TS
1439 act.sa_handler = host_alarm_handler;
1440
1441 sigaction(SIGIO, &act, NULL);
7183b4b4 1442 fcntl_setfl(fd, O_ASYNC);
c8994013
TS
1443 fcntl(fd, F_SETOWN, getpid());
1444}
829309c7 1445
c40ec5a9
TS
1446static int hpet_start_timer(struct qemu_alarm_timer *t)
1447{
1448 struct hpet_info info;
1449 int r, fd;
1450
1451 fd = open("/dev/hpet", O_RDONLY);
1452 if (fd < 0)
1453 return -1;
1454
1455 /* Set frequency */
1456 r = ioctl(fd, HPET_IRQFREQ, RTC_FREQ);
1457 if (r < 0) {
1458 fprintf(stderr, "Could not configure '/dev/hpet' to have a 1024Hz timer. This is not a fatal\n"
1459 "error, but for better emulation accuracy type:\n"
1460 "'echo 1024 > /proc/sys/dev/hpet/max-user-freq' as root.\n");
1461 goto fail;
1462 }
1463
1464 /* Check capabilities */
1465 r = ioctl(fd, HPET_INFO, &info);
1466 if (r < 0)
1467 goto fail;
1468
1469 /* Enable periodic mode */
1470 r = ioctl(fd, HPET_EPI, 0);
1471 if (info.hi_flags && (r < 0))
1472 goto fail;
1473
1474 /* Enable interrupt */
1475 r = ioctl(fd, HPET_IE_ON, 0);
1476 if (r < 0)
1477 goto fail;
1478
1479 enable_sigio_timer(fd);
fcdc2129 1480 t->priv = (void *)(long)fd;
c40ec5a9
TS
1481
1482 return 0;
1483fail:
1484 close(fd);
1485 return -1;
1486}
1487
1488static void hpet_stop_timer(struct qemu_alarm_timer *t)
1489{
fcdc2129 1490 int fd = (long)t->priv;
c40ec5a9
TS
1491
1492 close(fd);
1493}
1494
c8994013 1495static int rtc_start_timer(struct qemu_alarm_timer *t)
fd872598 1496{
c8994013 1497 int rtc_fd;
b5a23ad4 1498 unsigned long current_rtc_freq = 0;
c8994013 1499
aeb30be6 1500 TFR(rtc_fd = open("/dev/rtc", O_RDONLY));
fd872598
FB
1501 if (rtc_fd < 0)
1502 return -1;
b5a23ad4
AZ
1503 ioctl(rtc_fd, RTC_IRQP_READ, &current_rtc_freq);
1504 if (current_rtc_freq != RTC_FREQ &&
1505 ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
fd872598
FB
1506 fprintf(stderr, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n"
1507 "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n"
1508 "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n");
1509 goto fail;
1510 }
1511 if (ioctl(rtc_fd, RTC_PIE_ON, 0) < 0) {
1512 fail:
1513 close(rtc_fd);
1514 return -1;
1515 }
c8994013
TS
1516
1517 enable_sigio_timer(rtc_fd);
1518
fcdc2129 1519 t->priv = (void *)(long)rtc_fd;
c8994013 1520
fd872598
FB
1521 return 0;
1522}
1523
c8994013 1524static void rtc_stop_timer(struct qemu_alarm_timer *t)
829309c7 1525{
fcdc2129 1526 int rtc_fd = (long)t->priv;
c8994013
TS
1527
1528 close(rtc_fd);
829309c7
FB
1529}
1530
efe75411
TS
1531static int dynticks_start_timer(struct qemu_alarm_timer *t)
1532{
1533 struct sigevent ev;
1534 timer_t host_timer;
1535 struct sigaction act;
1536
1537 sigfillset(&act.sa_mask);
1538 act.sa_flags = 0;
efe75411
TS
1539 act.sa_handler = host_alarm_handler;
1540
1541 sigaction(SIGALRM, &act, NULL);
1542
1543 ev.sigev_value.sival_int = 0;
1544 ev.sigev_notify = SIGEV_SIGNAL;
1545 ev.sigev_signo = SIGALRM;
1546
1547 if (timer_create(CLOCK_REALTIME, &ev, &host_timer)) {
1548 perror("timer_create");
1549
1550 /* disable dynticks */
1551 fprintf(stderr, "Dynamic Ticks disabled\n");
1552
1553 return -1;
1554 }
1555
0399bfe0 1556 t->priv = (void *)(long)host_timer;
efe75411
TS
1557
1558 return 0;
1559}
1560
1561static void dynticks_stop_timer(struct qemu_alarm_timer *t)
1562{
0399bfe0 1563 timer_t host_timer = (timer_t)(long)t->priv;
efe75411
TS
1564
1565 timer_delete(host_timer);
1566}
1567
1568static void dynticks_rearm_timer(struct qemu_alarm_timer *t)
1569{
0399bfe0 1570 timer_t host_timer = (timer_t)(long)t->priv;
efe75411
TS
1571 struct itimerspec timeout;
1572 int64_t nearest_delta_us = INT64_MAX;
1573 int64_t current_us;
1574
1575 if (!active_timers[QEMU_TIMER_REALTIME] &&
1576 !active_timers[QEMU_TIMER_VIRTUAL])
d5d08334 1577 return;
efe75411 1578
2e70f6ef 1579 nearest_delta_us = qemu_next_deadline_dyntick();
efe75411
TS
1580
1581 /* check whether a timer is already running */
1582 if (timer_gettime(host_timer, &timeout)) {
1583 perror("gettime");
1584 fprintf(stderr, "Internal timer error: aborting\n");
1585 exit(1);
1586 }
1587 current_us = timeout.it_value.tv_sec * 1000000 + timeout.it_value.tv_nsec/1000;
1588 if (current_us && current_us <= nearest_delta_us)
1589 return;
1590
1591 timeout.it_interval.tv_sec = 0;
1592 timeout.it_interval.tv_nsec = 0; /* 0 for one-shot timer */
1593 timeout.it_value.tv_sec = nearest_delta_us / 1000000;
1594 timeout.it_value.tv_nsec = (nearest_delta_us % 1000000) * 1000;
1595 if (timer_settime(host_timer, 0 /* RELATIVE */, &timeout, NULL)) {
1596 perror("settime");
1597 fprintf(stderr, "Internal timer error: aborting\n");
1598 exit(1);
1599 }
1600}
1601
70744b3a 1602#endif /* defined(__linux__) */
231c6586 1603
c8994013
TS
1604static int unix_start_timer(struct qemu_alarm_timer *t)
1605{
1606 struct sigaction act;
1607 struct itimerval itv;
1608 int err;
1609
1610 /* timer signal */
1611 sigfillset(&act.sa_mask);
1612 act.sa_flags = 0;
c8994013
TS
1613 act.sa_handler = host_alarm_handler;
1614
1615 sigaction(SIGALRM, &act, NULL);
1616
1617 itv.it_interval.tv_sec = 0;
1618 /* for i386 kernel 2.6 to get 1 ms */
1619 itv.it_interval.tv_usec = 999;
1620 itv.it_value.tv_sec = 0;
1621 itv.it_value.tv_usec = 10 * 1000;
1622
1623 err = setitimer(ITIMER_REAL, &itv, NULL);
1624 if (err)
1625 return -1;
1626
1627 return 0;
1628}
1629
1630static void unix_stop_timer(struct qemu_alarm_timer *t)
1631{
1632 struct itimerval itv;
1633
1634 memset(&itv, 0, sizeof(itv));
1635 setitimer(ITIMER_REAL, &itv, NULL);
1636}
1637
829309c7 1638#endif /* !defined(_WIN32) */
fd872598 1639
f49e58dc
AL
1640static void try_to_rearm_timer(void *opaque)
1641{
1642 struct qemu_alarm_timer *t = opaque;
1643#ifndef _WIN32
1644 ssize_t len;
1645
1646 /* Drain the notify pipe */
1647 do {
1648 char buffer[512];
1649 len = read(alarm_timer_rfd, buffer, sizeof(buffer));
1650 } while ((len == -1 && errno == EINTR) || len > 0);
1651#endif
1652
f49e58dc
AL
1653 if (t->flags & ALARM_FLAG_EXPIRED) {
1654 alarm_timer->flags &= ~ALARM_FLAG_EXPIRED;
1655 qemu_rearm_alarm_timer(alarm_timer);
1656 }
1657}
1658
c8994013
TS
1659#ifdef _WIN32
1660
1661static int win32_start_timer(struct qemu_alarm_timer *t)
1662{
1663 TIMECAPS tc;
1664 struct qemu_alarm_win32 *data = t->priv;
efe75411 1665 UINT flags;
c8994013
TS
1666
1667 data->host_alarm = CreateEvent(NULL, FALSE, FALSE, NULL);
1668 if (!data->host_alarm) {
1669 perror("Failed CreateEvent");
c396a7f0 1670 return -1;
c8994013
TS
1671 }
1672
1673 memset(&tc, 0, sizeof(tc));
1674 timeGetDevCaps(&tc, sizeof(tc));
1675
1676 if (data->period < tc.wPeriodMin)
1677 data->period = tc.wPeriodMin;
1678
1679 timeBeginPeriod(data->period);
1680
efe75411
TS
1681 flags = TIME_CALLBACK_FUNCTION;
1682 if (alarm_has_dynticks(t))
1683 flags |= TIME_ONESHOT;
1684 else
1685 flags |= TIME_PERIODIC;
1686
c8994013
TS
1687 data->timerId = timeSetEvent(1, // interval (ms)
1688 data->period, // resolution
1689 host_alarm_handler, // function
1690 (DWORD)t, // parameter
efe75411 1691 flags);
c8994013
TS
1692
1693 if (!data->timerId) {
1694 perror("Failed to initialize win32 alarm timer");
1695
1696 timeEndPeriod(data->period);
1697 CloseHandle(data->host_alarm);
1698 return -1;
1699 }
1700
f49e58dc 1701 qemu_add_wait_object(data->host_alarm, try_to_rearm_timer, t);
c8994013
TS
1702
1703 return 0;
1704}
1705
1706static void win32_stop_timer(struct qemu_alarm_timer *t)
1707{
1708 struct qemu_alarm_win32 *data = t->priv;
1709
1710 timeKillEvent(data->timerId);
1711 timeEndPeriod(data->period);
1712
1713 CloseHandle(data->host_alarm);
1714}
1715
efe75411
TS
1716static void win32_rearm_timer(struct qemu_alarm_timer *t)
1717{
1718 struct qemu_alarm_win32 *data = t->priv;
1719 uint64_t nearest_delta_us;
1720
1721 if (!active_timers[QEMU_TIMER_REALTIME] &&
1722 !active_timers[QEMU_TIMER_VIRTUAL])
d5d08334 1723 return;
efe75411 1724
2e70f6ef 1725 nearest_delta_us = qemu_next_deadline_dyntick();
efe75411
TS
1726 nearest_delta_us /= 1000;
1727
1728 timeKillEvent(data->timerId);
1729
1730 data->timerId = timeSetEvent(1,
1731 data->period,
1732 host_alarm_handler,
1733 (DWORD)t,
1734 TIME_ONESHOT | TIME_PERIODIC);
1735
1736 if (!data->timerId) {
1737 perror("Failed to re-arm win32 alarm timer");
1738
1739 timeEndPeriod(data->period);
1740 CloseHandle(data->host_alarm);
1741 exit(1);
1742 }
1743}
1744
c8994013
TS
1745#endif /* _WIN32 */
1746
7183b4b4 1747static int init_timer_alarm(void)
8a7ddc38 1748{
223f0d72 1749 struct qemu_alarm_timer *t = NULL;
c8994013 1750 int i, err = -1;
f49e58dc
AL
1751
1752#ifndef _WIN32
c96f1a48
AL
1753 int fds[2];
1754
7183b4b4
AL
1755 err = pipe(fds);
1756 if (err == -1)
1757 return -errno;
1758
1759 err = fcntl_setfl(fds[0], O_NONBLOCK);
1760 if (err < 0)
1761 goto fail;
1762
1763 err = fcntl_setfl(fds[1], O_NONBLOCK);
1764 if (err < 0)
1765 goto fail;
1766
c96f1a48
AL
1767 alarm_timer_rfd = fds[0];
1768 alarm_timer_wfd = fds[1];
f49e58dc 1769#endif
c8994013
TS
1770
1771 for (i = 0; alarm_timers[i].name; i++) {
1772 t = &alarm_timers[i];
1773
c8994013
TS
1774 err = t->start(t);
1775 if (!err)
1776 break;
67b915a5 1777 }
fd872598 1778
c8994013 1779 if (err) {
7183b4b4
AL
1780 err = -ENOENT;
1781 goto fail;
67b915a5 1782 }
c8994013 1783
f49e58dc 1784#ifndef _WIN32
6abfbd79
AL
1785 qemu_set_fd_handler2(alarm_timer_rfd, NULL,
1786 try_to_rearm_timer, NULL, t);
f49e58dc 1787#endif
6abfbd79 1788
c8994013 1789 alarm_timer = t;
7183b4b4 1790
6abfbd79 1791 return 0;
7183b4b4
AL
1792
1793fail:
f49e58dc 1794#ifndef _WIN32
7183b4b4
AL
1795 close(fds[0]);
1796 close(fds[1]);
f49e58dc 1797#endif
7183b4b4 1798 return err;
8a7ddc38
FB
1799}
1800
9596ebb7 1801static void quit_timers(void)
40c3bac3 1802{
c8994013
TS
1803 alarm_timer->stop(alarm_timer);
1804 alarm_timer = NULL;
40c3bac3
FB
1805}
1806
f6503059
AZ
1807/***********************************************************/
1808/* host time/date access */
1809void qemu_get_timedate(struct tm *tm, int offset)
1810{
1811 time_t ti;
1812 struct tm *ret;
1813
1814 time(&ti);
1815 ti += offset;
1816 if (rtc_date_offset == -1) {
1817 if (rtc_utc)
1818 ret = gmtime(&ti);
1819 else
1820 ret = localtime(&ti);
1821 } else {
1822 ti -= rtc_date_offset;
1823 ret = gmtime(&ti);
1824 }
1825
1826 memcpy(tm, ret, sizeof(struct tm));
1827}
1828
1829int qemu_timedate_diff(struct tm *tm)
1830{
1831 time_t seconds;
1832
1833 if (rtc_date_offset == -1)
1834 if (rtc_utc)
1835 seconds = mktimegm(tm);
1836 else
1837 seconds = mktime(tm);
1838 else
1839 seconds = mktimegm(tm) + rtc_date_offset;
1840
1841 return seconds - time(NULL);
1842}
1843
fd1dff4b 1844#ifdef _WIN32
fd1dff4b
FB
1845static void socket_cleanup(void)
1846{
1847 WSACleanup();
1848}
82c643ff 1849
fd1dff4b
FB
1850static int socket_init(void)
1851{
1852 WSADATA Data;
1853 int ret, err;
1854
1855 ret = WSAStartup(MAKEWORD(2,2), &Data);
1856 if (ret != 0) {
1857 err = WSAGetLastError();
1858 fprintf(stderr, "WSAStartup: %d\n", err);
1859 return -1;
1860 }
1861 atexit(socket_cleanup);
1862 return 0;
1863}
64b7b733
AJ
1864#endif
1865
63a01ef8 1866const char *get_opt_name(char *buf, int buf_size, const char *p)
609497ab
AZ
1867{
1868 char *q;
1869
1870 q = buf;
1871 while (*p != '\0' && *p != '=') {
1872 if (q && (q - buf) < buf_size - 1)
1873 *q++ = *p;
1874 p++;
1875 }
1876 if (q)
1877 *q = '\0';
1878
1879 return p;
1880}
1881
63a01ef8 1882const char *get_opt_value(char *buf, int buf_size, const char *p)
e4bcb14c
TS
1883{
1884 char *q;
e4bcb14c 1885
e4bcb14c
TS
1886 q = buf;
1887 while (*p != '\0') {
609497ab
AZ
1888 if (*p == ',') {
1889 if (*(p + 1) != ',')
e4bcb14c 1890 break;
e4bcb14c 1891 p++;
609497ab 1892 }
e4bcb14c
TS
1893 if (q && (q - buf) < buf_size - 1)
1894 *q++ = *p;
1895 p++;
1896 }
1897 if (q)
1898 *q = '\0';
1899
1900 return p;
1901}
1902
63a01ef8
AL
1903int get_param_value(char *buf, int buf_size,
1904 const char *tag, const char *str)
7c9d8e07
FB
1905{
1906 const char *p;
7c9d8e07
FB
1907 char option[128];
1908
1909 p = str;
1910 for(;;) {
609497ab 1911 p = get_opt_name(option, sizeof(option), p);
7c9d8e07
FB
1912 if (*p != '=')
1913 break;
1914 p++;
1915 if (!strcmp(tag, option)) {
609497ab 1916 (void)get_opt_value(buf, buf_size, p);
e4bcb14c 1917 return strlen(buf);
7c9d8e07 1918 } else {
609497ab 1919 p = get_opt_value(NULL, 0, p);
7c9d8e07
FB
1920 }
1921 if (*p != ',')
1922 break;
1923 p++;
1924 }
1925 return 0;
1926}
1927
63a01ef8
AL
1928int check_params(char *buf, int buf_size,
1929 const char * const *params, const char *str)
e4bcb14c
TS
1930{
1931 const char *p;
1932 int i;
1933
1934 p = str;
1935 for(;;) {
609497ab 1936 p = get_opt_name(buf, buf_size, p);
e4bcb14c
TS
1937 if (*p != '=')
1938 return -1;
1939 p++;
1940 for(i = 0; params[i] != NULL; i++)
1941 if (!strcmp(params[i], buf))
1942 break;
1943 if (params[i] == NULL)
1944 return -1;
609497ab 1945 p = get_opt_value(NULL, 0, p);
e4bcb14c
TS
1946 if (*p != ',')
1947 break;
1948 p++;
1949 }
1950 return 0;
1951}
1952
1ae26a18
AZ
1953/***********************************************************/
1954/* Bluetooth support */
1955static int nb_hcis;
1956static int cur_hci;
1957static struct HCIInfo *hci_table[MAX_NICS];
dc72ac14 1958
1ae26a18
AZ
1959static struct bt_vlan_s {
1960 struct bt_scatternet_s net;
1961 int id;
1962 struct bt_vlan_s *next;
1963} *first_bt_vlan;
1964
1965/* find or alloc a new bluetooth "VLAN" */
674bb261 1966static struct bt_scatternet_s *qemu_find_bt_vlan(int id)
1ae26a18
AZ
1967{
1968 struct bt_vlan_s **pvlan, *vlan;
1969 for (vlan = first_bt_vlan; vlan != NULL; vlan = vlan->next) {
1970 if (vlan->id == id)
1971 return &vlan->net;
1972 }
1973 vlan = qemu_mallocz(sizeof(struct bt_vlan_s));
1974 vlan->id = id;
1975 pvlan = &first_bt_vlan;
1976 while (*pvlan != NULL)
1977 pvlan = &(*pvlan)->next;
1978 *pvlan = vlan;
1979 return &vlan->net;
1980}
1981
1982static void null_hci_send(struct HCIInfo *hci, const uint8_t *data, int len)
1983{
1984}
1985
1986static int null_hci_addr_set(struct HCIInfo *hci, const uint8_t *bd_addr)
1987{
1988 return -ENOTSUP;
1989}
1990
1991static struct HCIInfo null_hci = {
1992 .cmd_send = null_hci_send,
1993 .sco_send = null_hci_send,
1994 .acl_send = null_hci_send,
1995 .bdaddr_set = null_hci_addr_set,
1996};
1997
1998struct HCIInfo *qemu_next_hci(void)
1999{
2000 if (cur_hci == nb_hcis)
2001 return &null_hci;
2002
2003 return hci_table[cur_hci++];
2004}
2005
dc72ac14
AZ
2006static struct HCIInfo *hci_init(const char *str)
2007{
2008 char *endp;
2009 struct bt_scatternet_s *vlan = 0;
2010
2011 if (!strcmp(str, "null"))
2012 /* null */
2013 return &null_hci;
2014 else if (!strncmp(str, "host", 4) && (str[4] == '\0' || str[4] == ':'))
2015 /* host[:hciN] */
2016 return bt_host_hci(str[4] ? str + 5 : "hci0");
2017 else if (!strncmp(str, "hci", 3)) {
2018 /* hci[,vlan=n] */
2019 if (str[3]) {
2020 if (!strncmp(str + 3, ",vlan=", 6)) {
2021 vlan = qemu_find_bt_vlan(strtol(str + 9, &endp, 0));
2022 if (*endp)
2023 vlan = 0;
2024 }
2025 } else
2026 vlan = qemu_find_bt_vlan(0);
2027 if (vlan)
2028 return bt_new_hci(vlan);
2029 }
2030
2031 fprintf(stderr, "qemu: Unknown bluetooth HCI `%s'.\n", str);
2032
2033 return 0;
2034}
2035
2036static int bt_hci_parse(const char *str)
2037{
2038 struct HCIInfo *hci;
2039 bdaddr_t bdaddr;
2040
2041 if (nb_hcis >= MAX_NICS) {
2042 fprintf(stderr, "qemu: Too many bluetooth HCIs (max %i).\n", MAX_NICS);
2043 return -1;
2044 }
2045
2046 hci = hci_init(str);
2047 if (!hci)
2048 return -1;
2049
2050 bdaddr.b[0] = 0x52;
2051 bdaddr.b[1] = 0x54;
2052 bdaddr.b[2] = 0x00;
2053 bdaddr.b[3] = 0x12;
2054 bdaddr.b[4] = 0x34;
2055 bdaddr.b[5] = 0x56 + nb_hcis;
2056 hci->bdaddr_set(hci, bdaddr.b);
2057
2058 hci_table[nb_hcis++] = hci;
2059
2060 return 0;
2061}
2062
2063static void bt_vhci_add(int vlan_id)
2064{
2065 struct bt_scatternet_s *vlan = qemu_find_bt_vlan(vlan_id);
2066
2067 if (!vlan->slave)
2068 fprintf(stderr, "qemu: warning: adding a VHCI to "
2069 "an empty scatternet %i\n", vlan_id);
2070
2071 bt_vhci_init(bt_new_hci(vlan));
2072}
2073
2074static struct bt_device_s *bt_device_add(const char *opt)
2075{
2076 struct bt_scatternet_s *vlan;
2077 int vlan_id = 0;
2078 char *endp = strstr(opt, ",vlan=");
2079 int len = (endp ? endp - opt : strlen(opt)) + 1;
2080 char devname[10];
2081
2082 pstrcpy(devname, MIN(sizeof(devname), len), opt);
2083
2084 if (endp) {
2085 vlan_id = strtol(endp + 6, &endp, 0);
2086 if (*endp) {
2087 fprintf(stderr, "qemu: unrecognised bluetooth vlan Id\n");
2088 return 0;
2089 }
2090 }
2091
2092 vlan = qemu_find_bt_vlan(vlan_id);
2093
2094 if (!vlan->slave)
2095 fprintf(stderr, "qemu: warning: adding a slave device to "
2096 "an empty scatternet %i\n", vlan_id);
2097
2098 if (!strcmp(devname, "keyboard"))
2099 return bt_keyboard_init(vlan);
2100
2101 fprintf(stderr, "qemu: unsupported bluetooth device `%s'\n", devname);
2102 return 0;
2103}
2104
2105static int bt_parse(const char *opt)
2106{
2107 const char *endp, *p;
2108 int vlan;
2109
2110 if (strstart(opt, "hci", &endp)) {
2111 if (!*endp || *endp == ',') {
2112 if (*endp)
2113 if (!strstart(endp, ",vlan=", 0))
2114 opt = endp + 1;
2115
2116 return bt_hci_parse(opt);
2117 }
2118 } else if (strstart(opt, "vhci", &endp)) {
2119 if (!*endp || *endp == ',') {
2120 if (*endp) {
2121 if (strstart(endp, ",vlan=", &p)) {
2122 vlan = strtol(p, (char **) &endp, 0);
2123 if (*endp) {
2124 fprintf(stderr, "qemu: bad scatternet '%s'\n", p);
2125 return 1;
2126 }
2127 } else {
2128 fprintf(stderr, "qemu: bad parameter '%s'\n", endp + 1);
2129 return 1;
2130 }
2131 } else
2132 vlan = 0;
2133
2134 bt_vhci_add(vlan);
2135 return 0;
2136 }
2137 } else if (strstart(opt, "device:", &endp))
2138 return !bt_device_add(endp);
2139
2140 fprintf(stderr, "qemu: bad bluetooth parameter '%s'\n", opt);
2141 return 1;
2142}
2143
1ae26a18
AZ
2144/***********************************************************/
2145/* QEMU Block devices */
2146
609497ab 2147#define HD_ALIAS "index=%d,media=disk"
e4bcb14c 2148#define CDROM_ALIAS "index=2,media=cdrom"
e4bcb14c 2149#define FD_ALIAS "index=%d,if=floppy"
609497ab
AZ
2150#define PFLASH_ALIAS "if=pflash"
2151#define MTD_ALIAS "if=mtd"
9d413d1d 2152#define SD_ALIAS "index=0,if=sd"
e4bcb14c 2153
7d5aca9e
AL
2154static int drive_opt_get_free_idx(void)
2155{
2156 int index;
2157
2158 for (index = 0; index < MAX_DRIVES; index++)
2159 if (!drives_opt[index].used) {
2160 drives_opt[index].used = 1;
2161 return index;
2162 }
2163
2164 return -1;
2165}
2166
2167static int drive_get_free_idx(void)
2168{
2169 int index;
2170
2171 for (index = 0; index < MAX_DRIVES; index++)
2172 if (!drives_table[index].used) {
2173 drives_table[index].used = 1;
2174 return index;
2175 }
2176
2177 return -1;
2178}
2179
4d73cd3b 2180int drive_add(const char *file, const char *fmt, ...)
e4bcb14c
TS
2181{
2182 va_list ap;
7d5aca9e 2183 int index = drive_opt_get_free_idx();
e4bcb14c 2184
7d5aca9e 2185 if (nb_drives_opt >= MAX_DRIVES || index == -1) {
e4bcb14c 2186 fprintf(stderr, "qemu: too many drives\n");
4d73cd3b 2187 return -1;
e4bcb14c
TS
2188 }
2189
7d5aca9e 2190 drives_opt[index].file = file;
e4bcb14c 2191 va_start(ap, fmt);
7d5aca9e 2192 vsnprintf(drives_opt[index].opt,
609497ab 2193 sizeof(drives_opt[0].opt), fmt, ap);
e4bcb14c
TS
2194 va_end(ap);
2195
7d5aca9e
AL
2196 nb_drives_opt++;
2197 return index;
e4bcb14c
TS
2198}
2199
b01b1111
AL
2200void drive_remove(int index)
2201{
2202 drives_opt[index].used = 0;
2203 nb_drives_opt--;
2204}
2205
f60d39bc 2206int drive_get_index(BlockInterfaceType type, int bus, int unit)
e4bcb14c
TS
2207{
2208 int index;
2209
2210 /* seek interface, bus and unit */
2211
7d5aca9e 2212 for (index = 0; index < MAX_DRIVES; index++)
f60d39bc 2213 if (drives_table[index].type == type &&
e4bcb14c 2214 drives_table[index].bus == bus &&
7d5aca9e
AL
2215 drives_table[index].unit == unit &&
2216 drives_table[index].used)
e4bcb14c
TS
2217 return index;
2218
2219 return -1;
2220}
2221
f60d39bc 2222int drive_get_max_bus(BlockInterfaceType type)
e4bcb14c
TS
2223{
2224 int max_bus;
2225 int index;
2226
2227 max_bus = -1;
2228 for (index = 0; index < nb_drives; index++) {
f60d39bc 2229 if(drives_table[index].type == type &&
e4bcb14c
TS
2230 drives_table[index].bus > max_bus)
2231 max_bus = drives_table[index].bus;
2232 }
2233 return max_bus;
2234}
2235
fa879c64
AL
2236const char *drive_get_serial(BlockDriverState *bdrv)
2237{
2238 int index;
2239
2240 for (index = 0; index < nb_drives; index++)
2241 if (drives_table[index].bdrv == bdrv)
2242 return drives_table[index].serial;
2243
2244 return "\0";
2245}
2246
428c5705
AL
2247BlockInterfaceErrorAction drive_get_onerror(BlockDriverState *bdrv)
2248{
2249 int index;
2250
2251 for (index = 0; index < nb_drives; index++)
2252 if (drives_table[index].bdrv == bdrv)
2253 return drives_table[index].onerror;
2254
cdad4bd8 2255 return BLOCK_ERR_STOP_ENOSPC;
428c5705
AL
2256}
2257
a1620fac
AJ
2258static void bdrv_format_print(void *opaque, const char *name)
2259{
2260 fprintf(stderr, " %s", name);
2261}
2262
b01b1111
AL
2263void drive_uninit(BlockDriverState *bdrv)
2264{
2265 int i;
2266
2267 for (i = 0; i < MAX_DRIVES; i++)
2268 if (drives_table[i].bdrv == bdrv) {
2269 drives_table[i].bdrv = NULL;
2270 drives_table[i].used = 0;
2271 drive_remove(drives_table[i].drive_opt_idx);
2272 nb_drives--;
2273 break;
2274 }
2275}
2276
4d73cd3b 2277int drive_init(struct drive_opt *arg, int snapshot, void *opaque)
e4bcb14c
TS
2278{
2279 char buf[128];
2280 char file[1024];
c8522bdf 2281 char devname[128];
fa879c64 2282 char serial[21];
c8522bdf 2283 const char *mediastr = "";
f60d39bc 2284 BlockInterfaceType type;
e4bcb14c
TS
2285 enum { MEDIA_DISK, MEDIA_CDROM } media;
2286 int bus_id, unit_id;
2287 int cyls, heads, secs, translation;
2288 BlockDriverState *bdrv;
1e72d3b7 2289 BlockDriver *drv = NULL;
4d73cd3b 2290 QEMUMachine *machine = opaque;
e4bcb14c
TS
2291 int max_devs;
2292 int index;
33f00271 2293 int cache;
428c5705 2294 int bdrv_flags, onerror;
7d5aca9e 2295 int drives_table_idx;
609497ab 2296 char *str = arg->opt;
7ccfb2eb
BS
2297 static const char * const params[] = { "bus", "unit", "if", "index",
2298 "cyls", "heads", "secs", "trans",
2299 "media", "snapshot", "file",
428c5705
AL
2300 "cache", "format", "serial", "werror",
2301 NULL };
e4bcb14c
TS
2302
2303 if (check_params(buf, sizeof(buf), params, str) < 0) {
ff993638 2304 fprintf(stderr, "qemu: unknown parameter '%s' in '%s'\n",
e4bcb14c
TS
2305 buf, str);
2306 return -1;
2307 }
2308
2309 file[0] = 0;
2310 cyls = heads = secs = 0;
2311 bus_id = 0;
2312 unit_id = -1;
2313 translation = BIOS_ATA_TRANSLATION_AUTO;
2314 index = -1;
4dc822d7 2315 cache = 3;
e4bcb14c 2316
c9b1ae2c 2317 if (machine->use_scsi) {
f60d39bc 2318 type = IF_SCSI;
e4bcb14c 2319 max_devs = MAX_SCSI_DEVS;
363a37d5 2320 pstrcpy(devname, sizeof(devname), "scsi");
e4bcb14c 2321 } else {
f60d39bc 2322 type = IF_IDE;
e4bcb14c 2323 max_devs = MAX_IDE_DEVS;
363a37d5 2324 pstrcpy(devname, sizeof(devname), "ide");
e4bcb14c
TS
2325 }
2326 media = MEDIA_DISK;
2327
2328 /* extract parameters */
2329
2330 if (get_param_value(buf, sizeof(buf), "bus", str)) {
2331 bus_id = strtol(buf, NULL, 0);
2332 if (bus_id < 0) {
2333 fprintf(stderr, "qemu: '%s' invalid bus id\n", str);
2334 return -1;
2335 }
2336 }
2337
2338 if (get_param_value(buf, sizeof(buf), "unit", str)) {
2339 unit_id = strtol(buf, NULL, 0);
2340 if (unit_id < 0) {
2341 fprintf(stderr, "qemu: '%s' invalid unit id\n", str);
2342 return -1;
2343 }
2344 }
2345
2346 if (get_param_value(buf, sizeof(buf), "if", str)) {
ae45d369 2347 pstrcpy(devname, sizeof(devname), buf);
e4bcb14c 2348 if (!strcmp(buf, "ide")) {
f60d39bc 2349 type = IF_IDE;
e4bcb14c
TS
2350 max_devs = MAX_IDE_DEVS;
2351 } else if (!strcmp(buf, "scsi")) {
f60d39bc 2352 type = IF_SCSI;
e4bcb14c
TS
2353 max_devs = MAX_SCSI_DEVS;
2354 } else if (!strcmp(buf, "floppy")) {
f60d39bc 2355 type = IF_FLOPPY;
e4bcb14c
TS
2356 max_devs = 0;
2357 } else if (!strcmp(buf, "pflash")) {
f60d39bc 2358 type = IF_PFLASH;
e4bcb14c
TS
2359 max_devs = 0;
2360 } else if (!strcmp(buf, "mtd")) {
f60d39bc 2361 type = IF_MTD;
e4bcb14c
TS
2362 max_devs = 0;
2363 } else if (!strcmp(buf, "sd")) {
f60d39bc 2364 type = IF_SD;
e4bcb14c 2365 max_devs = 0;
6e02c38d
AL
2366 } else if (!strcmp(buf, "virtio")) {
2367 type = IF_VIRTIO;
2368 max_devs = 0;
2369 } else {
e4bcb14c
TS
2370 fprintf(stderr, "qemu: '%s' unsupported bus type '%s'\n", str, buf);
2371 return -1;
2372 }
2373 }
2374
2375 if (get_param_value(buf, sizeof(buf), "index", str)) {
2376 index = strtol(buf, NULL, 0);
2377 if (index < 0) {
2378 fprintf(stderr, "qemu: '%s' invalid index\n", str);
2379 return -1;
2380 }
2381 }
2382
2383 if (get_param_value(buf, sizeof(buf), "cyls", str)) {
2384 cyls = strtol(buf, NULL, 0);
2385 }
2386
2387 if (get_param_value(buf, sizeof(buf), "heads", str)) {
2388 heads = strtol(buf, NULL, 0);
2389 }
2390
2391 if (get_param_value(buf, sizeof(buf), "secs", str)) {
2392 secs = strtol(buf, NULL, 0);
2393 }
2394
2395 if (cyls || heads || secs) {
2396 if (cyls < 1 || cyls > 16383) {
2397 fprintf(stderr, "qemu: '%s' invalid physical cyls number\n", str);
2398 return -1;
2399 }
2400 if (heads < 1 || heads > 16) {
2401 fprintf(stderr, "qemu: '%s' invalid physical heads number\n", str);
2402 return -1;
2403 }
2404 if (secs < 1 || secs > 63) {
2405 fprintf(stderr, "qemu: '%s' invalid physical secs number\n", str);
2406 return -1;
2407 }
2408 }
2409
2410 if (get_param_value(buf, sizeof(buf), "trans", str)) {
2411 if (!cyls) {
2412 fprintf(stderr,
2413 "qemu: '%s' trans must be used with cyls,heads and secs\n",
2414 str);
2415 return -1;
2416 }
2417 if (!strcmp(buf, "none"))
2418 translation = BIOS_ATA_TRANSLATION_NONE;
2419 else if (!strcmp(buf, "lba"))
2420 translation = BIOS_ATA_TRANSLATION_LBA;
2421 else if (!strcmp(buf, "auto"))
2422 translation = BIOS_ATA_TRANSLATION_AUTO;
2423 else {
2424 fprintf(stderr, "qemu: '%s' invalid translation type\n", str);
2425 return -1;
2426 }
2427 }
2428
2429 if (get_param_value(buf, sizeof(buf), "media", str)) {
2430 if (!strcmp(buf, "disk")) {
2431 media = MEDIA_DISK;
2432 } else if (!strcmp(buf, "cdrom")) {
2433 if (cyls || secs || heads) {
2434 fprintf(stderr,
2435 "qemu: '%s' invalid physical CHS format\n", str);
2436 return -1;
2437 }
2438 media = MEDIA_CDROM;
2439 } else {
2440 fprintf(stderr, "qemu: '%s' invalid media\n", str);
2441 return -1;
2442 }
2443 }
2444
2445 if (get_param_value(buf, sizeof(buf), "snapshot", str)) {
2446 if (!strcmp(buf, "on"))
2447 snapshot = 1;
2448 else if (!strcmp(buf, "off"))
2449 snapshot = 0;
2450 else {
2451 fprintf(stderr, "qemu: '%s' invalid snapshot option\n", str);
2452 return -1;
2453 }
2454 }
2455
33f00271 2456 if (get_param_value(buf, sizeof(buf), "cache", str)) {
9f7965c7 2457 if (!strcmp(buf, "off") || !strcmp(buf, "none"))
33f00271 2458 cache = 0;
9f7965c7 2459 else if (!strcmp(buf, "writethrough"))
33f00271 2460 cache = 1;
9f7965c7
AL
2461 else if (!strcmp(buf, "writeback"))
2462 cache = 2;
33f00271
AZ
2463 else {
2464 fprintf(stderr, "qemu: invalid cache option\n");
2465 return -1;
2466 }
2467 }
2468
1e72d3b7 2469 if (get_param_value(buf, sizeof(buf), "format", str)) {
a1620fac
AJ
2470 if (strcmp(buf, "?") == 0) {
2471 fprintf(stderr, "qemu: Supported formats:");
2472 bdrv_iterate_format(bdrv_format_print, NULL);
2473 fprintf(stderr, "\n");
2474 return -1;
2475 }
1e72d3b7
AJ
2476 drv = bdrv_find_format(buf);
2477 if (!drv) {
2478 fprintf(stderr, "qemu: '%s' invalid format\n", buf);
2479 return -1;
2480 }
2481 }
2482
609497ab
AZ
2483 if (arg->file == NULL)
2484 get_param_value(file, sizeof(file), "file", str);
2485 else
2486 pstrcpy(file, sizeof(file), arg->file);
e4bcb14c 2487
fa879c64
AL
2488 if (!get_param_value(serial, sizeof(serial), "serial", str))
2489 memset(serial, 0, sizeof(serial));
2490
cdad4bd8 2491 onerror = BLOCK_ERR_STOP_ENOSPC;
428c5705 2492 if (get_param_value(buf, sizeof(serial), "werror", str)) {
869a5c6d 2493 if (type != IF_IDE && type != IF_SCSI && type != IF_VIRTIO) {
ea8a5d7f 2494 fprintf(stderr, "werror is no supported by this format\n");
428c5705
AL
2495 return -1;
2496 }
2497 if (!strcmp(buf, "ignore"))
2498 onerror = BLOCK_ERR_IGNORE;
2499 else if (!strcmp(buf, "enospc"))
2500 onerror = BLOCK_ERR_STOP_ENOSPC;
2501 else if (!strcmp(buf, "stop"))
2502 onerror = BLOCK_ERR_STOP_ANY;
2503 else if (!strcmp(buf, "report"))
2504 onerror = BLOCK_ERR_REPORT;
2505 else {
2506 fprintf(stderr, "qemu: '%s' invalid write error action\n", buf);
2507 return -1;
2508 }
2509 }
2510
e4bcb14c
TS
2511 /* compute bus and unit according index */
2512
2513 if (index != -1) {
2514 if (bus_id != 0 || unit_id != -1) {
2515 fprintf(stderr,
2516 "qemu: '%s' index cannot be used with bus and unit\n", str);
2517 return -1;
2518 }
2519 if (max_devs == 0)
2520 {
2521 unit_id = index;
2522 bus_id = 0;
2523 } else {
2524 unit_id = index % max_devs;
2525 bus_id = index / max_devs;
2526 }
2527 }
2528
2529 /* if user doesn't specify a unit_id,
2530 * try to find the first free
2531 */
2532
2533 if (unit_id == -1) {
2534 unit_id = 0;
f60d39bc 2535 while (drive_get_index(type, bus_id, unit_id) != -1) {
e4bcb14c
TS
2536 unit_id++;
2537 if (max_devs && unit_id >= max_devs) {
2538 unit_id -= max_devs;
2539 bus_id++;
2540 }
2541 }
2542 }
2543
2544 /* check unit id */
2545
2546 if (max_devs && unit_id >= max_devs) {
2547 fprintf(stderr, "qemu: '%s' unit %d too big (max is %d)\n",
2548 str, unit_id, max_devs - 1);
2549 return -1;
2550 }
2551
2552 /*
2553 * ignore multiple definitions
2554 */
2555
f60d39bc 2556 if (drive_get_index(type, bus_id, unit_id) != -1)
4d73cd3b 2557 return -2;
e4bcb14c
TS
2558
2559 /* init */
2560
f60d39bc 2561 if (type == IF_IDE || type == IF_SCSI)
c8522bdf 2562 mediastr = (media == MEDIA_CDROM) ? "-cd" : "-hd";
e6198a70
AZ
2563 if (max_devs)
2564 snprintf(buf, sizeof(buf), "%s%i%s%i",
2565 devname, bus_id, mediastr, unit_id);
2566 else
2567 snprintf(buf, sizeof(buf), "%s%s%i",
2568 devname, mediastr, unit_id);
e4bcb14c 2569 bdrv = bdrv_new(buf);
7d5aca9e
AL
2570 drives_table_idx = drive_get_free_idx();
2571 drives_table[drives_table_idx].bdrv = bdrv;
2572 drives_table[drives_table_idx].type = type;
2573 drives_table[drives_table_idx].bus = bus_id;
2574 drives_table[drives_table_idx].unit = unit_id;
2575 drives_table[drives_table_idx].onerror = onerror;
b01b1111 2576 drives_table[drives_table_idx].drive_opt_idx = arg - drives_opt;
fa879c64 2577 strncpy(drives_table[nb_drives].serial, serial, sizeof(serial));
e4bcb14c
TS
2578 nb_drives++;
2579
f60d39bc 2580 switch(type) {
e4bcb14c
TS
2581 case IF_IDE:
2582 case IF_SCSI:
2583 switch(media) {
2584 case MEDIA_DISK:
2585 if (cyls != 0) {
2586 bdrv_set_geometry_hint(bdrv, cyls, heads, secs);
2587 bdrv_set_translation_hint(bdrv, translation);
2588 }
2589 break;
2590 case MEDIA_CDROM:
2591 bdrv_set_type_hint(bdrv, BDRV_TYPE_CDROM);
2592 break;
2593 }
2594 break;
2595 case IF_SD:
2596 /* FIXME: This isn't really a floppy, but it's a reasonable
2597 approximation. */
2598 case IF_FLOPPY:
2599 bdrv_set_type_hint(bdrv, BDRV_TYPE_FLOPPY);
2600 break;
2601 case IF_PFLASH:
2602 case IF_MTD:
6e02c38d 2603 case IF_VIRTIO:
e4bcb14c
TS
2604 break;
2605 }
2606 if (!file[0])
4d73cd3b 2607 return -2;
33f00271 2608 bdrv_flags = 0;
9f7965c7 2609 if (snapshot) {
33f00271 2610 bdrv_flags |= BDRV_O_SNAPSHOT;
9f7965c7
AL
2611 cache = 2; /* always use write-back with snapshot */
2612 }
2613 if (cache == 0) /* no caching */
2614 bdrv_flags |= BDRV_O_NOCACHE;
2615 else if (cache == 2) /* write-back */
2616 bdrv_flags |= BDRV_O_CACHE_WB;
4dc822d7
AL
2617 else if (cache == 3) /* not specified */
2618 bdrv_flags |= BDRV_O_CACHE_DEF;
c0f4ce77 2619 if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0) {
e4bcb14c
TS
2620 fprintf(stderr, "qemu: could not open disk image %s\n",
2621 file);
2622 return -1;
2623 }
c0f4ce77
AL
2624 if (bdrv_key_required(bdrv))
2625 autostart = 0;
4d73cd3b 2626 return drives_table_idx;
e4bcb14c
TS
2627}
2628
a594cfbf
FB
2629/***********************************************************/
2630/* USB devices */
2631
0d92ed30
PB
2632static USBPort *used_usb_ports;
2633static USBPort *free_usb_ports;
2634
2635/* ??? Maybe change this to register a hub to keep track of the topology. */
2636void qemu_register_usb_port(USBPort *port, void *opaque, int index,
2637 usb_attachfn attach)
2638{
2639 port->opaque = opaque;
2640 port->index = index;
2641 port->attach = attach;
2642 port->next = free_usb_ports;
2643 free_usb_ports = port;
2644}
2645
4b096fc9
AL
2646int usb_device_add_dev(USBDevice *dev)
2647{
2648 USBPort *port;
2649
2650 /* Find a USB port to add the device to. */
2651 port = free_usb_ports;
2652 if (!port->next) {
2653 USBDevice *hub;
2654
2655 /* Create a new hub and chain it on. */
2656 free_usb_ports = NULL;
2657 port->next = used_usb_ports;
2658 used_usb_ports = port;
2659
2660 hub = usb_hub_init(VM_USB_HUB_SIZE);
2661 usb_attach(port, hub);
2662 port = free_usb_ports;
2663 }
2664
2665 free_usb_ports = port->next;
2666 port->next = used_usb_ports;
2667 used_usb_ports = port;
2668 usb_attach(port, dev);
2669 return 0;
2670}
2671
bb5fc20f
AL
2672static void usb_msd_password_cb(void *opaque, int err)
2673{
2674 USBDevice *dev = opaque;
2675
2676 if (!err)
2677 usb_device_add_dev(dev);
2678 else
2679 dev->handle_destroy(dev);
2680}
2681
c0f4ce77 2682static int usb_device_add(const char *devname, int is_hotplug)
a594cfbf
FB
2683{
2684 const char *p;
2685 USBDevice *dev;
a594cfbf 2686
0d92ed30 2687 if (!free_usb_ports)
a594cfbf
FB
2688 return -1;
2689
2690 if (strstart(devname, "host:", &p)) {
2691 dev = usb_host_device_open(p);
a594cfbf
FB
2692 } else if (!strcmp(devname, "mouse")) {
2693 dev = usb_mouse_init();
09b26c5e 2694 } else if (!strcmp(devname, "tablet")) {
47b2d338
AZ
2695 dev = usb_tablet_init();
2696 } else if (!strcmp(devname, "keyboard")) {
2697 dev = usb_keyboard_init();
2e5d83bb 2698 } else if (strstart(devname, "disk:", &p)) {
c0f4ce77
AL
2699 BlockDriverState *bs;
2700
bb5fc20f 2701 dev = usb_msd_init(p);
c0f4ce77
AL
2702 if (!dev)
2703 return -1;
bb5fc20f 2704 bs = usb_msd_get_bdrv(dev);
c0f4ce77
AL
2705 if (bdrv_key_required(bs)) {
2706 autostart = 0;
bb5fc20f 2707 if (is_hotplug) {
376253ec
AL
2708 monitor_read_bdrv_key_start(cur_mon, bs, usb_msd_password_cb,
2709 dev);
bb5fc20f 2710 return 0;
c0f4ce77
AL
2711 }
2712 }
f6d2a316
AZ
2713 } else if (!strcmp(devname, "wacom-tablet")) {
2714 dev = usb_wacom_init();
a7954218
AZ
2715 } else if (strstart(devname, "serial:", &p)) {
2716 dev = usb_serial_init(p);
2e4d9fb1
AJ
2717#ifdef CONFIG_BRLAPI
2718 } else if (!strcmp(devname, "braille")) {
2719 dev = usb_baum_init();
2720#endif
6c9f886c 2721 } else if (strstart(devname, "net:", &p)) {
9ad97e65 2722 int nic = nb_nics;
6c9f886c 2723
9ad97e65 2724 if (net_client_init("nic", p) < 0)
6c9f886c 2725 return -1;
9ad97e65
AZ
2726 nd_table[nic].model = "usb";
2727 dev = usb_net_init(&nd_table[nic]);
dc72ac14
AZ
2728 } else if (!strcmp(devname, "bt") || strstart(devname, "bt:", &p)) {
2729 dev = usb_bt_init(devname[2] ? hci_init(p) :
2730 bt_new_hci(qemu_find_bt_vlan(0)));
a594cfbf
FB
2731 } else {
2732 return -1;
2733 }
0d92ed30
PB
2734 if (!dev)
2735 return -1;
2736
4b096fc9 2737 return usb_device_add_dev(dev);
a594cfbf
FB
2738}
2739
1f3870ab 2740int usb_device_del_addr(int bus_num, int addr)
a594cfbf 2741{
0d92ed30
PB
2742 USBPort *port;
2743 USBPort **lastp;
059809e4 2744 USBDevice *dev;
a594cfbf 2745
0d92ed30 2746 if (!used_usb_ports)
a594cfbf
FB
2747 return -1;
2748
a594cfbf
FB
2749 if (bus_num != 0)
2750 return -1;
0d92ed30
PB
2751
2752 lastp = &used_usb_ports;
2753 port = used_usb_ports;
2754 while (port && port->dev->addr != addr) {
2755 lastp = &port->next;
2756 port = port->next;
a594cfbf 2757 }
0d92ed30
PB
2758
2759 if (!port)
a594cfbf 2760 return -1;
0d92ed30 2761
059809e4 2762 dev = port->dev;
0d92ed30
PB
2763 *lastp = port->next;
2764 usb_attach(port, NULL);
059809e4 2765 dev->handle_destroy(dev);
0d92ed30
PB
2766 port->next = free_usb_ports;
2767 free_usb_ports = port;
a594cfbf
FB
2768 return 0;
2769}
2770
1f3870ab
AL
2771static int usb_device_del(const char *devname)
2772{
2773 int bus_num, addr;
2774 const char *p;
2775
5d0c5750
AL
2776 if (strstart(devname, "host:", &p))
2777 return usb_host_device_close(p);
2778
1f3870ab
AL
2779 if (!used_usb_ports)
2780 return -1;
2781
2782 p = strchr(devname, '.');
2783 if (!p)
2784 return -1;
2785 bus_num = strtoul(devname, NULL, 0);
2786 addr = strtoul(p + 1, NULL, 0);
2787
2788 return usb_device_del_addr(bus_num, addr);
2789}
2790
376253ec 2791void do_usb_add(Monitor *mon, const char *devname)
a594cfbf 2792{
c0f4ce77 2793 usb_device_add(devname, 1);
a594cfbf
FB
2794}
2795
376253ec 2796void do_usb_del(Monitor *mon, const char *devname)
a594cfbf 2797{
4b096fc9 2798 usb_device_del(devname);
a594cfbf
FB
2799}
2800
376253ec 2801void usb_info(Monitor *mon)
a594cfbf
FB
2802{
2803 USBDevice *dev;
0d92ed30 2804 USBPort *port;
a594cfbf
FB
2805 const char *speed_str;
2806
0d92ed30 2807 if (!usb_enabled) {
376253ec 2808 monitor_printf(mon, "USB support not enabled\n");
a594cfbf
FB
2809 return;
2810 }
2811
0d92ed30
PB
2812 for (port = used_usb_ports; port; port = port->next) {
2813 dev = port->dev;
2814 if (!dev)
2815 continue;
2816 switch(dev->speed) {
5fafdf24
TS
2817 case USB_SPEED_LOW:
2818 speed_str = "1.5";
0d92ed30 2819 break;
5fafdf24
TS
2820 case USB_SPEED_FULL:
2821 speed_str = "12";
0d92ed30 2822 break;
5fafdf24
TS
2823 case USB_SPEED_HIGH:
2824 speed_str = "480";
0d92ed30
PB
2825 break;
2826 default:
5fafdf24 2827 speed_str = "?";
0d92ed30 2828 break;
a594cfbf 2829 }
376253ec
AL
2830 monitor_printf(mon, " Device %d.%d, Speed %s Mb/s, Product %s\n",
2831 0, dev->addr, speed_str, dev->devname);
a594cfbf
FB
2832 }
2833}
2834
201a51fc
AZ
2835/***********************************************************/
2836/* PCMCIA/Cardbus */
2837
2838static struct pcmcia_socket_entry_s {
2839 struct pcmcia_socket_s *socket;
2840 struct pcmcia_socket_entry_s *next;
2841} *pcmcia_sockets = 0;
2842
2843void pcmcia_socket_register(struct pcmcia_socket_s *socket)
2844{
2845 struct pcmcia_socket_entry_s *entry;
2846
2847 entry = qemu_malloc(sizeof(struct pcmcia_socket_entry_s));
2848 entry->socket = socket;
2849 entry->next = pcmcia_sockets;
2850 pcmcia_sockets = entry;
2851}
2852
2853void pcmcia_socket_unregister(struct pcmcia_socket_s *socket)
2854{
2855 struct pcmcia_socket_entry_s *entry, **ptr;
2856
2857 ptr = &pcmcia_sockets;
2858 for (entry = *ptr; entry; ptr = &entry->next, entry = *ptr)
2859 if (entry->socket == socket) {
2860 *ptr = entry->next;
2861 qemu_free(entry);
2862 }
2863}
2864
376253ec 2865void pcmcia_info(Monitor *mon)
201a51fc
AZ
2866{
2867 struct pcmcia_socket_entry_s *iter;
376253ec 2868
201a51fc 2869 if (!pcmcia_sockets)
376253ec 2870 monitor_printf(mon, "No PCMCIA sockets\n");
201a51fc
AZ
2871
2872 for (iter = pcmcia_sockets; iter; iter = iter->next)
376253ec
AL
2873 monitor_printf(mon, "%s: %s\n", iter->socket->slot_string,
2874 iter->socket->attached ? iter->socket->card_string :
2875 "Empty");
201a51fc
AZ
2876}
2877
2ff89790 2878/***********************************************************/
3023f332
AL
2879/* register display */
2880
7b5d76da
AL
2881struct DisplayAllocator default_allocator = {
2882 defaultallocator_create_displaysurface,
2883 defaultallocator_resize_displaysurface,
2884 defaultallocator_free_displaysurface
2885};
2886
3023f332
AL
2887void register_displaystate(DisplayState *ds)
2888{
2889 DisplayState **s;
2890 s = &display_state;
2891 while (*s != NULL)
2892 s = &(*s)->next;
2893 ds->next = NULL;
2894 *s = ds;
2895}
2896
2897DisplayState *get_displaystate(void)
2898{
2899 return display_state;
2900}
2901
7b5d76da
AL
2902DisplayAllocator *register_displayallocator(DisplayState *ds, DisplayAllocator *da)
2903{
2904 if(ds->allocator == &default_allocator) ds->allocator = da;
2905 return ds->allocator;
2906}
2907
2ff89790
TS
2908/* dumb display */
2909
8f391ab4 2910static void dumb_display_init(void)
2ff89790 2911{
8f391ab4 2912 DisplayState *ds = qemu_mallocz(sizeof(DisplayState));
7b5d76da
AL
2913 ds->allocator = &default_allocator;
2914 ds->surface = qemu_create_displaysurface(ds, 640, 480);
8f391ab4 2915 register_displaystate(ds);
2ff89790
TS
2916}
2917
8a7ddc38
FB
2918/***********************************************************/
2919/* I/O handling */
0824d6fc 2920
c4b1fcc0
FB
2921typedef struct IOHandlerRecord {
2922 int fd;
7c9d8e07
FB
2923 IOCanRWHandler *fd_read_poll;
2924 IOHandler *fd_read;
2925 IOHandler *fd_write;
cafffd40 2926 int deleted;
c4b1fcc0
FB
2927 void *opaque;
2928 /* temporary data */
2929 struct pollfd *ufd;
8a7ddc38 2930 struct IOHandlerRecord *next;
c4b1fcc0
FB
2931} IOHandlerRecord;
2932
8a7ddc38 2933static IOHandlerRecord *first_io_handler;
c4b1fcc0 2934
7c9d8e07
FB
2935/* XXX: fd_read_poll should be suppressed, but an API change is
2936 necessary in the character devices to suppress fd_can_read(). */
5fafdf24
TS
2937int qemu_set_fd_handler2(int fd,
2938 IOCanRWHandler *fd_read_poll,
2939 IOHandler *fd_read,
2940 IOHandler *fd_write,
7c9d8e07 2941 void *opaque)
c4b1fcc0 2942{
7c9d8e07 2943 IOHandlerRecord **pioh, *ioh;
c4b1fcc0 2944
7c9d8e07
FB
2945 if (!fd_read && !fd_write) {
2946 pioh = &first_io_handler;
2947 for(;;) {
2948 ioh = *pioh;
2949 if (ioh == NULL)
2950 break;
2951 if (ioh->fd == fd) {
cafffd40 2952 ioh->deleted = 1;
7c9d8e07
FB
2953 break;
2954 }
2955 pioh = &ioh->next;
2956 }
2957 } else {
2958 for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
2959 if (ioh->fd == fd)
2960 goto found;
2961 }
2962 ioh = qemu_mallocz(sizeof(IOHandlerRecord));
7c9d8e07
FB
2963 ioh->next = first_io_handler;
2964 first_io_handler = ioh;
2965 found:
2966 ioh->fd = fd;
2967 ioh->fd_read_poll = fd_read_poll;
2968 ioh->fd_read = fd_read;
2969 ioh->fd_write = fd_write;
2970 ioh->opaque = opaque;
cafffd40 2971 ioh->deleted = 0;
7c9d8e07 2972 }
c4b1fcc0
FB
2973 return 0;
2974}
2975
5fafdf24
TS
2976int qemu_set_fd_handler(int fd,
2977 IOHandler *fd_read,
2978 IOHandler *fd_write,
7c9d8e07 2979 void *opaque)
8a7ddc38 2980{
7c9d8e07 2981 return qemu_set_fd_handler2(fd, NULL, fd_read, fd_write, opaque);
8a7ddc38
FB
2982}
2983
56f3a5d0 2984#ifdef _WIN32
f331110f
FB
2985/***********************************************************/
2986/* Polling handling */
2987
2988typedef struct PollingEntry {
2989 PollingFunc *func;
2990 void *opaque;
2991 struct PollingEntry *next;
2992} PollingEntry;
2993
2994static PollingEntry *first_polling_entry;
2995
2996int qemu_add_polling_cb(PollingFunc *func, void *opaque)
2997{
2998 PollingEntry **ppe, *pe;
2999 pe = qemu_mallocz(sizeof(PollingEntry));
f331110f
FB
3000 pe->func = func;
3001 pe->opaque = opaque;
3002 for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next);
3003 *ppe = pe;
3004 return 0;
3005}
3006
3007void qemu_del_polling_cb(PollingFunc *func, void *opaque)
3008{
3009 PollingEntry **ppe, *pe;
3010 for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next) {
3011 pe = *ppe;
3012 if (pe->func == func && pe->opaque == opaque) {
3013 *ppe = pe->next;
3014 qemu_free(pe);
3015 break;
3016 }
3017 }
3018}
3019
a18e524a
FB
3020/***********************************************************/
3021/* Wait objects support */
3022typedef struct WaitObjects {
3023 int num;
3024 HANDLE events[MAXIMUM_WAIT_OBJECTS + 1];
3025 WaitObjectFunc *func[MAXIMUM_WAIT_OBJECTS + 1];
3026 void *opaque[MAXIMUM_WAIT_OBJECTS + 1];
3027} WaitObjects;
3028
3029static WaitObjects wait_objects = {0};
3b46e624 3030
a18e524a
FB
3031int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
3032{
3033 WaitObjects *w = &wait_objects;
3034
3035 if (w->num >= MAXIMUM_WAIT_OBJECTS)
3036 return -1;
3037 w->events[w->num] = handle;
3038 w->func[w->num] = func;
3039 w->opaque[w->num] = opaque;
3040 w->num++;
3041 return 0;
3042}
3043
3044void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
3045{
3046 int i, found;
3047 WaitObjects *w = &wait_objects;
3048
3049 found = 0;
3050 for (i = 0; i < w->num; i++) {
3051 if (w->events[i] == handle)
3052 found = 1;
3053 if (found) {
3054 w->events[i] = w->events[i + 1];
3055 w->func[i] = w->func[i + 1];
3056 w->opaque[i] = w->opaque[i + 1];
3b46e624 3057 }
a18e524a
FB
3058 }
3059 if (found)
3060 w->num--;
3061}
3062#endif
3063
8a7ddc38
FB
3064/***********************************************************/
3065/* ram save/restore */
3066
8a7ddc38
FB
3067static int ram_get_page(QEMUFile *f, uint8_t *buf, int len)
3068{
3069 int v;
3070
3071 v = qemu_get_byte(f);
3072 switch(v) {
3073 case 0:
3074 if (qemu_get_buffer(f, buf, len) != len)
3075 return -EIO;
3076 break;
3077 case 1:
3078 v = qemu_get_byte(f);
3079 memset(buf, v, len);
3080 break;
3081 default:
3082 return -EINVAL;
3083 }
871d2f07
AL
3084
3085 if (qemu_file_has_error(f))
3086 return -EIO;
3087
8a7ddc38
FB
3088 return 0;
3089}
3090
c88676f8
FB
3091static int ram_load_v1(QEMUFile *f, void *opaque)
3092{
00f82b8a
AJ
3093 int ret;
3094 ram_addr_t i;
c88676f8
FB
3095
3096 if (qemu_get_be32(f) != phys_ram_size)
3097 return -EINVAL;
3098 for(i = 0; i < phys_ram_size; i+= TARGET_PAGE_SIZE) {
3099 ret = ram_get_page(f, phys_ram_base + i, TARGET_PAGE_SIZE);
3100 if (ret)
3101 return ret;
3102 }
3103 return 0;
3104}
3105
3106#define BDRV_HASH_BLOCK_SIZE 1024
3107#define IOBUF_SIZE 4096
3108#define RAM_CBLOCK_MAGIC 0xfabe
3109
c88676f8
FB
3110typedef struct RamDecompressState {
3111 z_stream zstream;
3112 QEMUFile *f;
3113 uint8_t buf[IOBUF_SIZE];
3114} RamDecompressState;
3115
3116static int ram_decompress_open(RamDecompressState *s, QEMUFile *f)
3117{
3118 int ret;
3119 memset(s, 0, sizeof(*s));
3120 s->f = f;
3121 ret = inflateInit(&s->zstream);
3122 if (ret != Z_OK)
3123 return -1;
3124 return 0;
3125}
3126
3127static int ram_decompress_buf(RamDecompressState *s, uint8_t *buf, int len)
3128{
3129 int ret, clen;
3130
3131 s->zstream.avail_out = len;
3132 s->zstream.next_out = buf;
3133 while (s->zstream.avail_out > 0) {
3134 if (s->zstream.avail_in == 0) {
3135 if (qemu_get_be16(s->f) != RAM_CBLOCK_MAGIC)
3136 return -1;
3137 clen = qemu_get_be16(s->f);
3138 if (clen > IOBUF_SIZE)
3139 return -1;
3140 qemu_get_buffer(s->f, s->buf, clen);
3141 s->zstream.avail_in = clen;
3142 s->zstream.next_in = s->buf;
3143 }
3144 ret = inflate(&s->zstream, Z_PARTIAL_FLUSH);
3145 if (ret != Z_OK && ret != Z_STREAM_END) {
3146 return -1;
3147 }
3148 }
3149 return 0;
3150}
3151
3152static void ram_decompress_close(RamDecompressState *s)
3153{
3154 inflateEnd(&s->zstream);
3155}
3156
475e4277
AL
3157#define RAM_SAVE_FLAG_FULL 0x01
3158#define RAM_SAVE_FLAG_COMPRESS 0x02
3159#define RAM_SAVE_FLAG_MEM_SIZE 0x04
3160#define RAM_SAVE_FLAG_PAGE 0x08
3161#define RAM_SAVE_FLAG_EOS 0x10
3162
3163static int is_dup_page(uint8_t *page, uint8_t ch)
8a7ddc38 3164{
475e4277
AL
3165 uint32_t val = ch << 24 | ch << 16 | ch << 8 | ch;
3166 uint32_t *array = (uint32_t *)page;
3167 int i;
3b46e624 3168
475e4277
AL
3169 for (i = 0; i < (TARGET_PAGE_SIZE / 4); i++) {
3170 if (array[i] != val)
3171 return 0;
3172 }
3173
3174 return 1;
3175}
3176
3177static int ram_save_block(QEMUFile *f)
3178{
3179 static ram_addr_t current_addr = 0;
3180 ram_addr_t saved_addr = current_addr;
3181 ram_addr_t addr = 0;
3182 int found = 0;
3183
3184 while (addr < phys_ram_size) {
3185 if (cpu_physical_memory_get_dirty(current_addr, MIGRATION_DIRTY_FLAG)) {
3186 uint8_t ch;
3187
3188 cpu_physical_memory_reset_dirty(current_addr,
3189 current_addr + TARGET_PAGE_SIZE,
3190 MIGRATION_DIRTY_FLAG);
3191
3192 ch = *(phys_ram_base + current_addr);
3193
3194 if (is_dup_page(phys_ram_base + current_addr, ch)) {
3195 qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_COMPRESS);
3196 qemu_put_byte(f, ch);
3197 } else {
3198 qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_PAGE);
3199 qemu_put_buffer(f, phys_ram_base + current_addr, TARGET_PAGE_SIZE);
c88676f8 3200 }
475e4277
AL
3201
3202 found = 1;
3203 break;
c88676f8 3204 }
475e4277
AL
3205 addr += TARGET_PAGE_SIZE;
3206 current_addr = (saved_addr + addr) % phys_ram_size;
8a7ddc38 3207 }
475e4277
AL
3208
3209 return found;
8a7ddc38
FB
3210}
3211
475e4277
AL
3212static ram_addr_t ram_save_threshold = 10;
3213
3214static ram_addr_t ram_save_remaining(void)
3215{
3216 ram_addr_t addr;
3217 ram_addr_t count = 0;
3218
3219 for (addr = 0; addr < phys_ram_size; addr += TARGET_PAGE_SIZE) {
3220 if (cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
3221 count++;
3222 }
3223
3224 return count;
3225}
3226
3227static int ram_save_live(QEMUFile *f, int stage, void *opaque)
3228{
3229 ram_addr_t addr;
3230
3231 if (stage == 1) {
3232 /* Make sure all dirty bits are set */
3233 for (addr = 0; addr < phys_ram_size; addr += TARGET_PAGE_SIZE) {
3234 if (!cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
3235 cpu_physical_memory_set_dirty(addr);
3236 }
3237
3238 /* Enable dirty memory tracking */
3239 cpu_physical_memory_set_dirty_tracking(1);
3240
3241 qemu_put_be64(f, phys_ram_size | RAM_SAVE_FLAG_MEM_SIZE);
3242 }
3243
3244 while (!qemu_file_rate_limit(f)) {
3245 int ret;
3246
3247 ret = ram_save_block(f);
3248 if (ret == 0) /* no more blocks */
3249 break;
3250 }
3251
3252 /* try transferring iterative blocks of memory */
3253
3254 if (stage == 3) {
3255 cpu_physical_memory_set_dirty_tracking(0);
3256
3257 /* flush all remaining blocks regardless of rate limiting */
3258 while (ram_save_block(f) != 0);
3259 }
3260
3261 qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
3262
3263 return (stage == 2) && (ram_save_remaining() < ram_save_threshold);
3264}
3265
3266static int ram_load_dead(QEMUFile *f, void *opaque)
8a7ddc38 3267{
c88676f8
FB
3268 RamDecompressState s1, *s = &s1;
3269 uint8_t buf[10];
00f82b8a 3270 ram_addr_t i;
8a7ddc38 3271
c88676f8
FB
3272 if (ram_decompress_open(s, f) < 0)
3273 return -EINVAL;
3274 for(i = 0; i < phys_ram_size; i+= BDRV_HASH_BLOCK_SIZE) {
3275 if (ram_decompress_buf(s, buf, 1) < 0) {
3276 fprintf(stderr, "Error while reading ram block header\n");
3277 goto error;
3278 }
3279 if (buf[0] == 0) {
3280 if (ram_decompress_buf(s, phys_ram_base + i, BDRV_HASH_BLOCK_SIZE) < 0) {
00f82b8a 3281 fprintf(stderr, "Error while reading ram block address=0x%08" PRIx64, (uint64_t)i);
c88676f8
FB
3282 goto error;
3283 }
475e4277 3284 } else {
c88676f8
FB
3285 error:
3286 printf("Error block header\n");
3287 return -EINVAL;
3288 }
8a7ddc38 3289 }
c88676f8 3290 ram_decompress_close(s);
475e4277
AL
3291
3292 return 0;
3293}
3294
3295static int ram_load(QEMUFile *f, void *opaque, int version_id)
3296{
3297 ram_addr_t addr;
3298 int flags;
3299
3300 if (version_id == 1)
3301 return ram_load_v1(f, opaque);
3302
3303 if (version_id == 2) {
3304 if (qemu_get_be32(f) != phys_ram_size)
3305 return -EINVAL;
3306 return ram_load_dead(f, opaque);
3307 }
3308
3309 if (version_id != 3)
3310 return -EINVAL;
3311
3312 do {
3313 addr = qemu_get_be64(f);
3314
3315 flags = addr & ~TARGET_PAGE_MASK;
3316 addr &= TARGET_PAGE_MASK;
3317
3318 if (flags & RAM_SAVE_FLAG_MEM_SIZE) {
3319 if (addr != phys_ram_size)
3320 return -EINVAL;
3321 }
3322
3323 if (flags & RAM_SAVE_FLAG_FULL) {
3324 if (ram_load_dead(f, opaque) < 0)
3325 return -EINVAL;
3326 }
3327
3328 if (flags & RAM_SAVE_FLAG_COMPRESS) {
3329 uint8_t ch = qemu_get_byte(f);
3330 memset(phys_ram_base + addr, ch, TARGET_PAGE_SIZE);
3331 } else if (flags & RAM_SAVE_FLAG_PAGE)
3332 qemu_get_buffer(f, phys_ram_base + addr, TARGET_PAGE_SIZE);
3333 } while (!(flags & RAM_SAVE_FLAG_EOS));
3334
8a7ddc38
FB
3335 return 0;
3336}
3337
9e472e10
AL
3338void qemu_service_io(void)
3339{
3340 CPUState *env = cpu_single_env;
3341 if (env) {
3098dba0 3342 cpu_exit(env);
9e472e10
AL
3343#ifdef USE_KQEMU
3344 if (env->kqemu_enabled) {
3345 kqemu_cpu_interrupt(env);
3346 }
3347#endif
3348 }
3349}
3350
83f64091
FB
3351/***********************************************************/
3352/* bottom halves (can be seen as timers which expire ASAP) */
3353
3354struct QEMUBH {
3355 QEMUBHFunc *cb;
3356 void *opaque;
3357 int scheduled;
1b435b10
AL
3358 int idle;
3359 int deleted;
83f64091
FB
3360 QEMUBH *next;
3361};
3362
3363static QEMUBH *first_bh = NULL;
3364
3365QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque)
3366{
3367 QEMUBH *bh;
3368 bh = qemu_mallocz(sizeof(QEMUBH));
83f64091
FB
3369 bh->cb = cb;
3370 bh->opaque = opaque;
1b435b10
AL
3371 bh->next = first_bh;
3372 first_bh = bh;
83f64091
FB
3373 return bh;
3374}
3375
6eb5733a 3376int qemu_bh_poll(void)
83f64091 3377{
1b435b10 3378 QEMUBH *bh, **bhp;
6eb5733a 3379 int ret;
83f64091 3380
6eb5733a 3381 ret = 0;
1b435b10
AL
3382 for (bh = first_bh; bh; bh = bh->next) {
3383 if (!bh->deleted && bh->scheduled) {
3384 bh->scheduled = 0;
3385 if (!bh->idle)
3386 ret = 1;
3387 bh->idle = 0;
3388 bh->cb(bh->opaque);
3389 }
83f64091 3390 }
1b435b10
AL
3391
3392 /* remove deleted bhs */
3393 bhp = &first_bh;
3394 while (*bhp) {
3395 bh = *bhp;
3396 if (bh->deleted) {
3397 *bhp = bh->next;
3398 qemu_free(bh);
3399 } else
3400 bhp = &bh->next;
3401 }
3402
6eb5733a 3403 return ret;
83f64091
FB
3404}
3405
1b435b10
AL
3406void qemu_bh_schedule_idle(QEMUBH *bh)
3407{
3408 if (bh->scheduled)
3409 return;
3410 bh->scheduled = 1;
3411 bh->idle = 1;
3412}
3413
83f64091
FB
3414void qemu_bh_schedule(QEMUBH *bh)
3415{
3416 CPUState *env = cpu_single_env;
3417 if (bh->scheduled)
3418 return;
3419 bh->scheduled = 1;
1b435b10 3420 bh->idle = 0;
83f64091
FB
3421 /* stop the currently executing CPU to execute the BH ASAP */
3422 if (env) {
3098dba0 3423 cpu_exit(env);
83f64091
FB
3424 }
3425}
3426
3427void qemu_bh_cancel(QEMUBH *bh)
3428{
1b435b10 3429 bh->scheduled = 0;
83f64091
FB
3430}
3431
3432void qemu_bh_delete(QEMUBH *bh)
3433{
1b435b10
AL
3434 bh->scheduled = 0;
3435 bh->deleted = 1;
83f64091
FB
3436}
3437
56f3a5d0
AL
3438static void qemu_bh_update_timeout(int *timeout)
3439{
3440 QEMUBH *bh;
3441
3442 for (bh = first_bh; bh; bh = bh->next) {
3443 if (!bh->deleted && bh->scheduled) {
3444 if (bh->idle) {
3445 /* idle bottom halves will be polled at least
3446 * every 10ms */
3447 *timeout = MIN(10, *timeout);
3448 } else {
3449 /* non-idle bottom halves will be executed
3450 * immediately */
3451 *timeout = 0;
3452 break;
3453 }
3454 }
3455 }
3456}
3457
cc1daa40
FB
3458/***********************************************************/
3459/* machine registration */
3460
bdaf78e0 3461static QEMUMachine *first_machine = NULL;
6f338c34 3462QEMUMachine *current_machine = NULL;
cc1daa40
FB
3463
3464int qemu_register_machine(QEMUMachine *m)
3465{
3466 QEMUMachine **pm;
3467 pm = &first_machine;
3468 while (*pm != NULL)
3469 pm = &(*pm)->next;
3470 m->next = NULL;
3471 *pm = m;
3472 return 0;
3473}
3474
9596ebb7 3475static QEMUMachine *find_machine(const char *name)
cc1daa40
FB
3476{
3477 QEMUMachine *m;
3478
3479 for(m = first_machine; m != NULL; m = m->next) {
3480 if (!strcmp(m->name, name))
3481 return m;
3482 }
3483 return NULL;
3484}
3485
8a7ddc38
FB
3486/***********************************************************/
3487/* main execution loop */
3488
9596ebb7 3489static void gui_update(void *opaque)
8a7ddc38 3490{
7d957bd8 3491 uint64_t interval = GUI_REFRESH_INTERVAL;
740733bb 3492 DisplayState *ds = opaque;
7d957bd8
AL
3493 DisplayChangeListener *dcl = ds->listeners;
3494
3495 dpy_refresh(ds);
3496
3497 while (dcl != NULL) {
3498 if (dcl->gui_timer_interval &&
3499 dcl->gui_timer_interval < interval)
3500 interval = dcl->gui_timer_interval;
3501 dcl = dcl->next;
3502 }
3503 qemu_mod_timer(ds->gui_timer, interval + qemu_get_clock(rt_clock));
8a7ddc38
FB
3504}
3505
9043b62d
BS
3506static void nographic_update(void *opaque)
3507{
3508 uint64_t interval = GUI_REFRESH_INTERVAL;
3509
3510 qemu_mod_timer(nographic_timer, interval + qemu_get_clock(rt_clock));
3511}
3512
0bd48850
FB
3513struct vm_change_state_entry {
3514 VMChangeStateHandler *cb;
3515 void *opaque;
3516 LIST_ENTRY (vm_change_state_entry) entries;
3517};
3518
3519static LIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head;
3520
3521VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
3522 void *opaque)
3523{
3524 VMChangeStateEntry *e;
3525
3526 e = qemu_mallocz(sizeof (*e));
0bd48850
FB
3527
3528 e->cb = cb;
3529 e->opaque = opaque;
3530 LIST_INSERT_HEAD(&vm_change_state_head, e, entries);
3531 return e;
3532}
3533
3534void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
3535{
3536 LIST_REMOVE (e, entries);
3537 qemu_free (e);
3538}
3539
9781e040 3540static void vm_state_notify(int running, int reason)
0bd48850
FB
3541{
3542 VMChangeStateEntry *e;
3543
3544 for (e = vm_change_state_head.lh_first; e; e = e->entries.le_next) {
9781e040 3545 e->cb(e->opaque, running, reason);
0bd48850
FB
3546 }
3547}
3548
8a7ddc38
FB
3549void vm_start(void)
3550{
3551 if (!vm_running) {
3552 cpu_enable_ticks();
3553 vm_running = 1;
9781e040 3554 vm_state_notify(1, 0);
efe75411 3555 qemu_rearm_alarm_timer(alarm_timer);
8a7ddc38
FB
3556 }
3557}
3558
5fafdf24 3559void vm_stop(int reason)
8a7ddc38
FB
3560{
3561 if (vm_running) {
3562 cpu_disable_ticks();
3563 vm_running = 0;
9781e040 3564 vm_state_notify(0, reason);
8a7ddc38
FB
3565 }
3566}
3567
bb0c6722
FB
3568/* reset/shutdown handler */
3569
3570typedef struct QEMUResetEntry {
3571 QEMUResetHandler *func;
3572 void *opaque;
3573 struct QEMUResetEntry *next;
3574} QEMUResetEntry;
3575
3576static QEMUResetEntry *first_reset_entry;
3577static int reset_requested;
3578static int shutdown_requested;
3475187d 3579static int powerdown_requested;
bb0c6722 3580
cf7a2fe2
AJ
3581int qemu_shutdown_requested(void)
3582{
3583 int r = shutdown_requested;
3584 shutdown_requested = 0;
3585 return r;
3586}
3587
3588int qemu_reset_requested(void)
3589{
3590 int r = reset_requested;
3591 reset_requested = 0;
3592 return r;
3593}
3594
3595int qemu_powerdown_requested(void)
3596{
3597 int r = powerdown_requested;
3598 powerdown_requested = 0;
3599 return r;
3600}
3601
bb0c6722
FB
3602void qemu_register_reset(QEMUResetHandler *func, void *opaque)
3603{
3604 QEMUResetEntry **pre, *re;
3605
3606 pre = &first_reset_entry;
3607 while (*pre != NULL)
3608 pre = &(*pre)->next;
3609 re = qemu_mallocz(sizeof(QEMUResetEntry));
3610 re->func = func;
3611 re->opaque = opaque;
3612 re->next = NULL;
3613 *pre = re;
3614}
3615
cf7a2fe2 3616void qemu_system_reset(void)
bb0c6722
FB
3617{
3618 QEMUResetEntry *re;
3619
3620 /* reset all devices */
3621 for(re = first_reset_entry; re != NULL; re = re->next) {
3622 re->func(re->opaque);
3623 }
3624}
3625
3626void qemu_system_reset_request(void)
3627{
d1beab82
FB
3628 if (no_reboot) {
3629 shutdown_requested = 1;
3630 } else {
3631 reset_requested = 1;
3632 }
6a00d601 3633 if (cpu_single_env)
3098dba0 3634 cpu_exit(cpu_single_env);
bb0c6722
FB
3635}
3636
3637void qemu_system_shutdown_request(void)
3638{
3639 shutdown_requested = 1;
6a00d601 3640 if (cpu_single_env)
3098dba0 3641 cpu_exit(cpu_single_env);
bb0c6722
FB
3642}
3643
3475187d
FB
3644void qemu_system_powerdown_request(void)
3645{
3646 powerdown_requested = 1;
6a00d601 3647 if (cpu_single_env)
3098dba0 3648 cpu_exit(cpu_single_env);
bb0c6722
FB
3649}
3650
877cf882 3651#ifdef _WIN32
69d6451c 3652static void host_main_loop_wait(int *timeout)
56f3a5d0
AL
3653{
3654 int ret, ret2, i;
f331110f
FB
3655 PollingEntry *pe;
3656
c4b1fcc0 3657
f331110f
FB
3658 /* XXX: need to suppress polling by better using win32 events */
3659 ret = 0;
3660 for(pe = first_polling_entry; pe != NULL; pe = pe->next) {
3661 ret |= pe->func(pe->opaque);
3662 }
e6b1e558 3663 if (ret == 0) {
a18e524a
FB
3664 int err;
3665 WaitObjects *w = &wait_objects;
3b46e624 3666
56f3a5d0 3667 ret = WaitForMultipleObjects(w->num, w->events, FALSE, *timeout);
a18e524a
FB
3668 if (WAIT_OBJECT_0 + 0 <= ret && ret <= WAIT_OBJECT_0 + w->num - 1) {
3669 if (w->func[ret - WAIT_OBJECT_0])
3670 w->func[ret - WAIT_OBJECT_0](w->opaque[ret - WAIT_OBJECT_0]);
3b46e624 3671
5fafdf24 3672 /* Check for additional signaled events */
e6b1e558 3673 for(i = (ret - WAIT_OBJECT_0 + 1); i < w->num; i++) {
3b46e624 3674
e6b1e558
TS
3675 /* Check if event is signaled */
3676 ret2 = WaitForSingleObject(w->events[i], 0);
3677 if(ret2 == WAIT_OBJECT_0) {
3678 if (w->func[i])
3679 w->func[i](w->opaque[i]);
3680 } else if (ret2 == WAIT_TIMEOUT) {
3681 } else {
3682 err = GetLastError();
3683 fprintf(stderr, "WaitForSingleObject error %d %d\n", i, err);
3b46e624
TS
3684 }
3685 }
a18e524a
FB
3686 } else if (ret == WAIT_TIMEOUT) {
3687 } else {
3688 err = GetLastError();
e6b1e558 3689 fprintf(stderr, "WaitForMultipleObjects error %d %d\n", ret, err);
a18e524a 3690 }
f331110f 3691 }
56f3a5d0
AL
3692
3693 *timeout = 0;
3694}
3695#else
69d6451c 3696static void host_main_loop_wait(int *timeout)
56f3a5d0
AL
3697{
3698}
fd1dff4b 3699#endif
56f3a5d0
AL
3700
3701void main_loop_wait(int timeout)
3702{
3703 IOHandlerRecord *ioh;
3704 fd_set rfds, wfds, xfds;
3705 int ret, nfds;
3706 struct timeval tv;
3707
3708 qemu_bh_update_timeout(&timeout);
3709
3710 host_main_loop_wait(&timeout);
3711
fd1dff4b
FB
3712 /* poll any events */
3713 /* XXX: separate device handlers from system ones */
6abfbd79 3714 nfds = -1;
fd1dff4b
FB
3715 FD_ZERO(&rfds);
3716 FD_ZERO(&wfds);
e035649e 3717 FD_ZERO(&xfds);
fd1dff4b 3718 for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
cafffd40
TS
3719 if (ioh->deleted)
3720 continue;
fd1dff4b
FB
3721 if (ioh->fd_read &&
3722 (!ioh->fd_read_poll ||
3723 ioh->fd_read_poll(ioh->opaque) != 0)) {
3724 FD_SET(ioh->fd, &rfds);
3725 if (ioh->fd > nfds)
3726 nfds = ioh->fd;
3727 }
3728 if (ioh->fd_write) {
3729 FD_SET(ioh->fd, &wfds);
3730 if (ioh->fd > nfds)
3731 nfds = ioh->fd;
3732 }
3733 }
3b46e624 3734
56f3a5d0
AL
3735 tv.tv_sec = timeout / 1000;
3736 tv.tv_usec = (timeout % 1000) * 1000;
3737
e035649e 3738#if defined(CONFIG_SLIRP)
63a01ef8 3739 if (slirp_is_inited()) {
e035649e
FB
3740 slirp_select_fill(&nfds, &rfds, &wfds, &xfds);
3741 }
3742#endif
3743 ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv);
fd1dff4b 3744 if (ret > 0) {
cafffd40
TS
3745 IOHandlerRecord **pioh;
3746
3747 for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
6ab43fdc 3748 if (!ioh->deleted && ioh->fd_read && FD_ISSET(ioh->fd, &rfds)) {
fd1dff4b 3749 ioh->fd_read(ioh->opaque);
7c9d8e07 3750 }
6ab43fdc 3751 if (!ioh->deleted && ioh->fd_write && FD_ISSET(ioh->fd, &wfds)) {
fd1dff4b 3752 ioh->fd_write(ioh->opaque);
c4b1fcc0 3753 }
b4608c04 3754 }
cafffd40
TS
3755
3756 /* remove deleted IO handlers */
3757 pioh = &first_io_handler;
3758 while (*pioh) {
3759 ioh = *pioh;
3760 if (ioh->deleted) {
3761 *pioh = ioh->next;
3762 qemu_free(ioh);
5fafdf24 3763 } else
cafffd40
TS
3764 pioh = &ioh->next;
3765 }
fd1dff4b 3766 }
c20709aa 3767#if defined(CONFIG_SLIRP)
63a01ef8 3768 if (slirp_is_inited()) {
e035649e
FB
3769 if (ret < 0) {
3770 FD_ZERO(&rfds);
3771 FD_ZERO(&wfds);
3772 FD_ZERO(&xfds);
c20709aa 3773 }
e035649e 3774 slirp_select_poll(&rfds, &wfds, &xfds);
fd1dff4b 3775 }
e035649e 3776#endif
b4608c04 3777
357c692c
AL
3778 /* vm time timers */
3779 if (vm_running && likely(!(cur_cpu->singlestep_enabled & SSTEP_NOTIMER)))
3780 qemu_run_timers(&active_timers[QEMU_TIMER_VIRTUAL],
3781 qemu_get_clock(vm_clock));
3782
3783 /* real time timers */
3784 qemu_run_timers(&active_timers[QEMU_TIMER_REALTIME],
3785 qemu_get_clock(rt_clock));
3786
423f0742
PB
3787 /* Check bottom-halves last in case any of the earlier events triggered
3788 them. */
3789 qemu_bh_poll();
3b46e624 3790
5905b2e5
FB
3791}
3792
9596ebb7 3793static int main_loop(void)
5905b2e5
FB
3794{
3795 int ret, timeout;
89bfc105
FB
3796#ifdef CONFIG_PROFILER
3797 int64_t ti;
3798#endif
6a00d601 3799 CPUState *env;
5905b2e5 3800
6a00d601 3801 cur_cpu = first_cpu;
ee5605e5 3802 next_cpu = cur_cpu->next_cpu ?: first_cpu;
5905b2e5
FB
3803 for(;;) {
3804 if (vm_running) {
15a76449 3805
15a76449
FB
3806 for(;;) {
3807 /* get next cpu */
ee5605e5 3808 env = next_cpu;
89bfc105
FB
3809#ifdef CONFIG_PROFILER
3810 ti = profile_getclock();
3811#endif
2e70f6ef
PB
3812 if (use_icount) {
3813 int64_t count;
3814 int decr;
3815 qemu_icount -= (env->icount_decr.u16.low + env->icount_extra);
3816 env->icount_decr.u16.low = 0;
3817 env->icount_extra = 0;
3818 count = qemu_next_deadline();
3819 count = (count + (1 << icount_time_shift) - 1)
3820 >> icount_time_shift;
3821 qemu_icount += count;
3822 decr = (count > 0xffff) ? 0xffff : count;
3823 count -= decr;
3824 env->icount_decr.u16.low = decr;
3825 env->icount_extra = count;
3826 }
6a00d601 3827 ret = cpu_exec(env);
89bfc105
FB
3828#ifdef CONFIG_PROFILER
3829 qemu_time += profile_getclock() - ti;
3830#endif
2e70f6ef
PB
3831 if (use_icount) {
3832 /* Fold pending instructions back into the
3833 instruction counter, and clear the interrupt flag. */
3834 qemu_icount -= (env->icount_decr.u16.low
3835 + env->icount_extra);
3836 env->icount_decr.u32 = 0;
3837 env->icount_extra = 0;
3838 }
ee5605e5 3839 next_cpu = env->next_cpu ?: first_cpu;
95b01009 3840 if (event_pending && likely(ret != EXCP_DEBUG)) {
ee5605e5
AZ
3841 ret = EXCP_INTERRUPT;
3842 event_pending = 0;
3843 break;
3844 }
bd967e05
PB
3845 if (ret == EXCP_HLT) {
3846 /* Give the next CPU a chance to run. */
3847 cur_cpu = env;
3848 continue;
3849 }
15a76449
FB
3850 if (ret != EXCP_HALTED)
3851 break;
3852 /* all CPUs are halted ? */
bd967e05 3853 if (env == cur_cpu)
15a76449 3854 break;
15a76449
FB
3855 }
3856 cur_cpu = env;
3857
5905b2e5 3858 if (shutdown_requested) {
3475187d 3859 ret = EXCP_INTERRUPT;
b2f76161
AJ
3860 if (no_shutdown) {
3861 vm_stop(0);
3862 no_shutdown = 0;
3863 }
3864 else
3865 break;
5905b2e5
FB
3866 }
3867 if (reset_requested) {
3868 reset_requested = 0;
3869 qemu_system_reset();
3475187d
FB
3870 ret = EXCP_INTERRUPT;
3871 }
3872 if (powerdown_requested) {
3873 powerdown_requested = 0;
3874 qemu_system_powerdown();
3875 ret = EXCP_INTERRUPT;
5905b2e5 3876 }
95b01009 3877 if (unlikely(ret == EXCP_DEBUG)) {
880a7578 3878 gdb_set_stop_cpu(cur_cpu);
5905b2e5
FB
3879 vm_stop(EXCP_DEBUG);
3880 }
bd967e05 3881 /* If all cpus are halted then wait until the next IRQ */
5905b2e5 3882 /* XXX: use timeout computed from timers */
2e70f6ef
PB
3883 if (ret == EXCP_HALTED) {
3884 if (use_icount) {
3885 int64_t add;
3886 int64_t delta;
3887 /* Advance virtual time to the next event. */
3888 if (use_icount == 1) {
3889 /* When not using an adaptive execution frequency
3890 we tend to get badly out of sync with real time,
bf20dc07 3891 so just delay for a reasonable amount of time. */
2e70f6ef
PB
3892 delta = 0;
3893 } else {
3894 delta = cpu_get_icount() - cpu_get_clock();
3895 }
3896 if (delta > 0) {
3897 /* If virtual time is ahead of real time then just
3898 wait for IO. */
3899 timeout = (delta / 1000000) + 1;
3900 } else {
3901 /* Wait for either IO to occur or the next
3902 timer event. */
3903 add = qemu_next_deadline();
3904 /* We advance the timer before checking for IO.
3905 Limit the amount we advance so that early IO
3906 activity won't get the guest too far ahead. */
3907 if (add > 10000000)
3908 add = 10000000;
3909 delta += add;
3910 add = (add + (1 << icount_time_shift) - 1)
3911 >> icount_time_shift;
3912 qemu_icount += add;
3913 timeout = delta / 1000000;
3914 if (timeout < 0)
3915 timeout = 0;
3916 }
3917 } else {
0a1af395 3918 timeout = 5000;
2e70f6ef
PB
3919 }
3920 } else {
5905b2e5 3921 timeout = 0;
2e70f6ef 3922 }
5905b2e5 3923 } else {
98448f58
BS
3924 if (shutdown_requested) {
3925 ret = EXCP_INTERRUPT;
5b08fc10 3926 break;
98448f58 3927 }
0a1af395 3928 timeout = 5000;
5905b2e5 3929 }
89bfc105
FB
3930#ifdef CONFIG_PROFILER
3931 ti = profile_getclock();
3932#endif
5905b2e5 3933 main_loop_wait(timeout);
89bfc105
FB
3934#ifdef CONFIG_PROFILER
3935 dev_time += profile_getclock() - ti;
3936#endif
b4608c04 3937 }
34865134
FB
3938 cpu_disable_ticks();
3939 return ret;
b4608c04
FB
3940}
3941
15f82208 3942static void help(int exitcode)
0824d6fc 3943{
68d0f70e 3944 printf("QEMU PC emulator version " QEMU_VERSION ", Copyright (c) 2003-2008 Fabrice Bellard\n"
0db63474 3945 "usage: %s [options] [disk_image]\n"
0824d6fc 3946 "\n"
a20dd508 3947 "'disk_image' is a raw hard image image for IDE hard disk 0\n"
fc01f7e7 3948 "\n"
5824d651
BS
3949#define DEF(option, opt_arg, opt_enum, opt_help) \
3950 opt_help
3951#define DEFHEADING(text) stringify(text) "\n"
3952#include "qemu-options.h"
3953#undef DEF
3954#undef DEFHEADING
3955#undef GEN_DOCS
0824d6fc 3956 "\n"
82c643ff 3957 "During emulation, the following keys are useful:\n"
032a8c9e
FB
3958 "ctrl-alt-f toggle full screen\n"
3959 "ctrl-alt-n switch to virtual console 'n'\n"
3960 "ctrl-alt toggle mouse and keyboard grab\n"
82c643ff
FB
3961 "\n"
3962 "When using -nographic, press 'ctrl-a h' to get some help.\n"
3963 ,
0db63474 3964 "qemu",
a00bad7e 3965 DEFAULT_RAM_SIZE,
7c9d8e07 3966#ifndef _WIN32
a00bad7e 3967 DEFAULT_NETWORK_SCRIPT,
b46a8906 3968 DEFAULT_NETWORK_DOWN_SCRIPT,
7c9d8e07 3969#endif
6e44ba7f 3970 DEFAULT_GDBSTUB_PORT,
bce61846 3971 "/tmp/qemu.log");
15f82208 3972 exit(exitcode);
0824d6fc
FB
3973}
3974
cd6f1169
FB
3975#define HAS_ARG 0x0001
3976
3977enum {
5824d651
BS
3978#define DEF(option, opt_arg, opt_enum, opt_help) \
3979 opt_enum,
3980#define DEFHEADING(text)
3981#include "qemu-options.h"
3982#undef DEF
3983#undef DEFHEADING
3984#undef GEN_DOCS
cd6f1169
FB
3985};
3986
3987typedef struct QEMUOption {
3988 const char *name;
3989 int flags;
3990 int index;
3991} QEMUOption;
3992
dbed7e40 3993static const QEMUOption qemu_options[] = {
cd6f1169 3994 { "h", 0, QEMU_OPTION_h },
5824d651
BS
3995#define DEF(option, opt_arg, opt_enum, opt_help) \
3996 { option, opt_arg, opt_enum },
3997#define DEFHEADING(text)
3998#include "qemu-options.h"
3999#undef DEF
4000#undef DEFHEADING
4001#undef GEN_DOCS
cd6f1169 4002 { NULL },
fc01f7e7
FB
4003};
4004
1d14ffa9 4005#ifdef HAS_AUDIO
6a36d84e 4006struct soundhw soundhw[] = {
b00052e4 4007#ifdef HAS_AUDIO_CHOICE
4ce7ff6e 4008#if defined(TARGET_I386) || defined(TARGET_MIPS)
fd06c375
FB
4009 {
4010 "pcspk",
4011 "PC speaker",
4012 0,
4013 1,
4014 { .init_isa = pcspk_audio_init }
4015 },
4016#endif
4c9b53e3 4017
4018#ifdef CONFIG_SB16
6a36d84e
FB
4019 {
4020 "sb16",
4021 "Creative Sound Blaster 16",
4022 0,
4023 1,
4024 { .init_isa = SB16_init }
4025 },
4c9b53e3 4026#endif
6a36d84e 4027
cc53d26d 4028#ifdef CONFIG_CS4231A
4029 {
4030 "cs4231a",
4031 "CS4231A",
4032 0,
4033 1,
4034 { .init_isa = cs4231a_init }
4035 },
4036#endif
4037
1d14ffa9 4038#ifdef CONFIG_ADLIB
6a36d84e
FB
4039 {
4040 "adlib",
1d14ffa9 4041#ifdef HAS_YMF262
6a36d84e 4042 "Yamaha YMF262 (OPL3)",
1d14ffa9 4043#else
6a36d84e 4044 "Yamaha YM3812 (OPL2)",
1d14ffa9 4045#endif
6a36d84e
FB
4046 0,
4047 1,
4048 { .init_isa = Adlib_init }
4049 },
1d14ffa9 4050#endif
6a36d84e 4051
1d14ffa9 4052#ifdef CONFIG_GUS
6a36d84e
FB
4053 {
4054 "gus",
4055 "Gravis Ultrasound GF1",
4056 0,
4057 1,
4058 { .init_isa = GUS_init }
4059 },
1d14ffa9 4060#endif
6a36d84e 4061
4c9b53e3 4062#ifdef CONFIG_AC97
e5c9a13e
AZ
4063 {
4064 "ac97",
4065 "Intel 82801AA AC97 Audio",
4066 0,
4067 0,
4068 { .init_pci = ac97_init }
4069 },
4c9b53e3 4070#endif
e5c9a13e 4071
4c9b53e3 4072#ifdef CONFIG_ES1370
6a36d84e
FB
4073 {
4074 "es1370",
4075 "ENSONIQ AudioPCI ES1370",
4076 0,
4077 0,
4078 { .init_pci = es1370_init }
4079 },
b00052e4 4080#endif
6a36d84e 4081
4c9b53e3 4082#endif /* HAS_AUDIO_CHOICE */
4083
6a36d84e
FB
4084 { NULL, NULL, 0, 0, { NULL } }
4085};
4086
4087static void select_soundhw (const char *optarg)
4088{
4089 struct soundhw *c;
4090
4091 if (*optarg == '?') {
4092 show_valid_cards:
4093
4094 printf ("Valid sound card names (comma separated):\n");
4095 for (c = soundhw; c->name; ++c) {
4096 printf ("%-11s %s\n", c->name, c->descr);
4097 }
4098 printf ("\n-soundhw all will enable all of the above\n");
1d14ffa9
FB
4099 exit (*optarg != '?');
4100 }
4101 else {
6a36d84e 4102 size_t l;
1d14ffa9
FB
4103 const char *p;
4104 char *e;
4105 int bad_card = 0;
4106
6a36d84e
FB
4107 if (!strcmp (optarg, "all")) {
4108 for (c = soundhw; c->name; ++c) {
4109 c->enabled = 1;
4110 }
4111 return;
4112 }
1d14ffa9 4113
6a36d84e 4114 p = optarg;
1d14ffa9
FB
4115 while (*p) {
4116 e = strchr (p, ',');
4117 l = !e ? strlen (p) : (size_t) (e - p);
6a36d84e
FB
4118
4119 for (c = soundhw; c->name; ++c) {
4120 if (!strncmp (c->name, p, l)) {
4121 c->enabled = 1;
1d14ffa9
FB
4122 break;
4123 }
4124 }
6a36d84e
FB
4125
4126 if (!c->name) {
1d14ffa9
FB
4127 if (l > 80) {
4128 fprintf (stderr,
4129 "Unknown sound card name (too big to show)\n");
4130 }
4131 else {
4132 fprintf (stderr, "Unknown sound card name `%.*s'\n",
4133 (int) l, p);
4134 }
4135 bad_card = 1;
4136 }
4137 p += l + (e != NULL);
4138 }
4139
4140 if (bad_card)
4141 goto show_valid_cards;
4142 }
4143}
4144#endif
4145
3893c124 4146static void select_vgahw (const char *p)
4147{
4148 const char *opts;
4149
4150 if (strstart(p, "std", &opts)) {
c2b3b41a 4151 std_vga_enabled = 1;
3893c124 4152 cirrus_vga_enabled = 0;
4153 vmsvga_enabled = 0;
4154 } else if (strstart(p, "cirrus", &opts)) {
4155 cirrus_vga_enabled = 1;
c2b3b41a 4156 std_vga_enabled = 0;
3893c124 4157 vmsvga_enabled = 0;
4158 } else if (strstart(p, "vmware", &opts)) {
4159 cirrus_vga_enabled = 0;
c2b3b41a 4160 std_vga_enabled = 0;
3893c124 4161 vmsvga_enabled = 1;
c2b3b41a
AL
4162 } else if (strstart(p, "none", &opts)) {
4163 cirrus_vga_enabled = 0;
4164 std_vga_enabled = 0;
4165 vmsvga_enabled = 0;
3893c124 4166 } else {
4167 invalid_vga:
4168 fprintf(stderr, "Unknown vga type: %s\n", p);
4169 exit(1);
4170 }
cb5a7aa8 4171 while (*opts) {
4172 const char *nextopt;
4173
4174 if (strstart(opts, ",retrace=", &nextopt)) {
4175 opts = nextopt;
4176 if (strstart(opts, "dumb", &nextopt))
4177 vga_retrace_method = VGA_RETRACE_DUMB;
4178 else if (strstart(opts, "precise", &nextopt))
4179 vga_retrace_method = VGA_RETRACE_PRECISE;
4180 else goto invalid_vga;
4181 } else goto invalid_vga;
4182 opts = nextopt;
4183 }
3893c124 4184}
4185
3587d7e6
FB
4186#ifdef _WIN32
4187static BOOL WINAPI qemu_ctrl_handler(DWORD type)
4188{
4189 exit(STATUS_CONTROL_C_EXIT);
4190 return TRUE;
4191}
4192#endif
4193
8fcb1b90
BS
4194static int qemu_uuid_parse(const char *str, uint8_t *uuid)
4195{
4196 int ret;
4197
4198 if(strlen(str) != 36)
4199 return -1;
4200
4201 ret = sscanf(str, UUID_FMT, &uuid[0], &uuid[1], &uuid[2], &uuid[3],
4202 &uuid[4], &uuid[5], &uuid[6], &uuid[7], &uuid[8], &uuid[9],
4203 &uuid[10], &uuid[11], &uuid[12], &uuid[13], &uuid[14], &uuid[15]);
4204
4205 if(ret != 16)
4206 return -1;
4207
4208 return 0;
4209}
4210
7c9d8e07 4211#define MAX_NET_CLIENTS 32
c20709aa 4212
5b08fc10
AL
4213#ifndef _WIN32
4214
4215static void termsig_handler(int signal)
4216{
4217 qemu_system_shutdown_request();
4218}
4219
6f9e3801 4220static void termsig_setup(void)
5b08fc10
AL
4221{
4222 struct sigaction act;
4223
4224 memset(&act, 0, sizeof(act));
4225 act.sa_handler = termsig_handler;
4226 sigaction(SIGINT, &act, NULL);
4227 sigaction(SIGHUP, &act, NULL);
4228 sigaction(SIGTERM, &act, NULL);
4229}
4230
4231#endif
4232
902b3d5c 4233int main(int argc, char **argv, char **envp)
0824d6fc 4234{
67b915a5 4235#ifdef CONFIG_GDBSTUB
cfc3475a
PB
4236 int use_gdbstub;
4237 const char *gdbstub_port;
67b915a5 4238#endif
28c5af54 4239 uint32_t boot_devices_bitmap = 0;
e4bcb14c 4240 int i;
28c5af54 4241 int snapshot, linux_boot, net_boot;
7f7f9873 4242 const char *initrd_filename;
a20dd508 4243 const char *kernel_filename, *kernel_cmdline;
28c5af54 4244 const char *boot_devices = "";
3023f332 4245 DisplayState *ds;
7d957bd8 4246 DisplayChangeListener *dcl;
46d4767d 4247 int cyls, heads, secs, translation;
fd5f393a 4248 const char *net_clients[MAX_NET_CLIENTS];
7c9d8e07 4249 int nb_net_clients;
dc72ac14
AZ
4250 const char *bt_opts[MAX_BT_CMDLINE];
4251 int nb_bt_opts;
e4bcb14c 4252 int hda_index;
cd6f1169
FB
4253 int optind;
4254 const char *r, *optarg;
4c621805 4255 CharDriverState *monitor_hd = NULL;
fd5f393a
PB
4256 const char *monitor_device;
4257 const char *serial_devices[MAX_SERIAL_PORTS];
8d11df9e 4258 int serial_device_index;
fd5f393a 4259 const char *parallel_devices[MAX_PARALLEL_PORTS];
6508fe59 4260 int parallel_device_index;
9ede2fde
AL
4261 const char *virtio_consoles[MAX_VIRTIO_CONSOLES];
4262 int virtio_console_index;
d63d307f 4263 const char *loadvm = NULL;
cc1daa40 4264 QEMUMachine *machine;
94fc95cd 4265 const char *cpu_model;
fd5f393a 4266 const char *usb_devices[MAX_USB_CMDLINE];
a594cfbf 4267 int usb_devices_index;
b9e82a59 4268#ifndef _WIN32
71e3ceb8 4269 int fds[2];
b9e82a59 4270#endif
26a5f13b 4271 int tb_size;
93815bc2 4272 const char *pid_file = NULL;
5bb7910a 4273 const char *incoming = NULL;
b9e82a59 4274#ifndef _WIN32
54042bcf
AL
4275 int fd = 0;
4276 struct passwd *pwd = NULL;
0858532e
AL
4277 const char *chroot_dir = NULL;
4278 const char *run_as = NULL;
b9e82a59 4279#endif
0bd48850 4280
902b3d5c 4281 qemu_cache_utils_init(envp);
4282
0bd48850 4283 LIST_INIT (&vm_change_state_head);
be995c27
FB
4284#ifndef _WIN32
4285 {
4286 struct sigaction act;
4287 sigfillset(&act.sa_mask);
4288 act.sa_flags = 0;
4289 act.sa_handler = SIG_IGN;
4290 sigaction(SIGPIPE, &act, NULL);
4291 }
3587d7e6
FB
4292#else
4293 SetConsoleCtrlHandler(qemu_ctrl_handler, TRUE);
a8e5ac33
FB
4294 /* Note: cpu_interrupt() is currently not SMP safe, so we force
4295 QEMU to run on a single CPU */
4296 {
4297 HANDLE h;
4298 DWORD mask, smask;
4299 int i;
4300 h = GetCurrentProcess();
4301 if (GetProcessAffinityMask(h, &mask, &smask)) {
4302 for(i = 0; i < 32; i++) {
4303 if (mask & (1 << i))
4304 break;
4305 }
4306 if (i != 32) {
4307 mask = 1 << i;
4308 SetProcessAffinityMask(h, mask);
4309 }
4310 }
4311 }
67b915a5 4312#endif
be995c27 4313
cc1daa40
FB
4314 register_machines();
4315 machine = first_machine;
94fc95cd 4316 cpu_model = NULL;
fc01f7e7 4317 initrd_filename = NULL;
4fc5d071 4318 ram_size = 0;
313aa567 4319 vga_ram_size = VGA_RAM_SIZE;
67b915a5 4320#ifdef CONFIG_GDBSTUB
b4608c04 4321 use_gdbstub = 0;
c636bb66 4322 gdbstub_port = DEFAULT_GDBSTUB_PORT;
67b915a5 4323#endif
33e3963e 4324 snapshot = 0;
a20dd508 4325 nographic = 0;
4d3b6f6e 4326 curses = 0;
a20dd508
FB
4327 kernel_filename = NULL;
4328 kernel_cmdline = "";
c4b1fcc0 4329 cyls = heads = secs = 0;
46d4767d 4330 translation = BIOS_ATA_TRANSLATION_AUTO;
d47d13b9 4331 monitor_device = "vc:80Cx24C";
c4b1fcc0 4332
c75a823c 4333 serial_devices[0] = "vc:80Cx24C";
8d11df9e 4334 for(i = 1; i < MAX_SERIAL_PORTS; i++)
fd5f393a 4335 serial_devices[i] = NULL;
8d11df9e 4336 serial_device_index = 0;
3b46e624 4337
8290edda 4338 parallel_devices[0] = "vc:80Cx24C";
6508fe59 4339 for(i = 1; i < MAX_PARALLEL_PORTS; i++)
fd5f393a 4340 parallel_devices[i] = NULL;
6508fe59 4341 parallel_device_index = 0;
3b46e624 4342
1b8fc811 4343 for(i = 0; i < MAX_VIRTIO_CONSOLES; i++)
9ede2fde
AL
4344 virtio_consoles[i] = NULL;
4345 virtio_console_index = 0;
4346
a594cfbf 4347 usb_devices_index = 0;
3b46e624 4348
7c9d8e07 4349 nb_net_clients = 0;
dc72ac14 4350 nb_bt_opts = 0;
e4bcb14c
TS
4351 nb_drives = 0;
4352 nb_drives_opt = 0;
4353 hda_index = -1;
7c9d8e07
FB
4354
4355 nb_nics = 0;
3b46e624 4356
26a5f13b 4357 tb_size = 0;
41bd639b
BS
4358 autostart= 1;
4359
cd6f1169 4360 optind = 1;
0824d6fc 4361 for(;;) {
cd6f1169 4362 if (optind >= argc)
0824d6fc 4363 break;
cd6f1169
FB
4364 r = argv[optind];
4365 if (r[0] != '-') {
609497ab 4366 hda_index = drive_add(argv[optind++], HD_ALIAS, 0);
cd6f1169
FB
4367 } else {
4368 const QEMUOption *popt;
4369
4370 optind++;
dff5efc8
PB
4371 /* Treat --foo the same as -foo. */
4372 if (r[1] == '-')
4373 r++;
cd6f1169
FB
4374 popt = qemu_options;
4375 for(;;) {
4376 if (!popt->name) {
5fafdf24 4377 fprintf(stderr, "%s: invalid option -- '%s'\n",
cd6f1169
FB
4378 argv[0], r);
4379 exit(1);
4380 }
4381 if (!strcmp(popt->name, r + 1))
4382 break;
4383 popt++;
4384 }
4385 if (popt->flags & HAS_ARG) {
4386 if (optind >= argc) {
4387 fprintf(stderr, "%s: option '%s' requires an argument\n",
4388 argv[0], r);
4389 exit(1);
4390 }
4391 optarg = argv[optind++];
4392 } else {
4393 optarg = NULL;
4394 }
4395
4396 switch(popt->index) {
cc1daa40
FB
4397 case QEMU_OPTION_M:
4398 machine = find_machine(optarg);
4399 if (!machine) {
4400 QEMUMachine *m;
4401 printf("Supported machines are:\n");
4402 for(m = first_machine; m != NULL; m = m->next) {
4403 printf("%-10s %s%s\n",
5fafdf24 4404 m->name, m->desc,
cc1daa40
FB
4405 m == first_machine ? " (default)" : "");
4406 }
15f82208 4407 exit(*optarg != '?');
cc1daa40
FB
4408 }
4409 break;
94fc95cd
JM
4410 case QEMU_OPTION_cpu:
4411 /* hw initialization will check this */
15f82208 4412 if (*optarg == '?') {
c732abe2
JM
4413/* XXX: implement xxx_cpu_list for targets that still miss it */
4414#if defined(cpu_list)
4415 cpu_list(stdout, &fprintf);
94fc95cd 4416#endif
15f82208 4417 exit(0);
94fc95cd
JM
4418 } else {
4419 cpu_model = optarg;
4420 }
4421 break;
cd6f1169 4422 case QEMU_OPTION_initrd:
fc01f7e7
FB
4423 initrd_filename = optarg;
4424 break;
cd6f1169 4425 case QEMU_OPTION_hda:
e4bcb14c 4426 if (cyls == 0)
609497ab 4427 hda_index = drive_add(optarg, HD_ALIAS, 0);
e4bcb14c 4428 else
609497ab 4429 hda_index = drive_add(optarg, HD_ALIAS
e4bcb14c 4430 ",cyls=%d,heads=%d,secs=%d%s",
609497ab 4431 0, cyls, heads, secs,
e4bcb14c
TS
4432 translation == BIOS_ATA_TRANSLATION_LBA ?
4433 ",trans=lba" :
4434 translation == BIOS_ATA_TRANSLATION_NONE ?
4435 ",trans=none" : "");
4436 break;
cd6f1169 4437 case QEMU_OPTION_hdb:
cc1daa40
FB
4438 case QEMU_OPTION_hdc:
4439 case QEMU_OPTION_hdd:
609497ab 4440 drive_add(optarg, HD_ALIAS, popt->index - QEMU_OPTION_hda);
fc01f7e7 4441 break;
e4bcb14c 4442 case QEMU_OPTION_drive:
609497ab 4443 drive_add(NULL, "%s", optarg);
e4bcb14c 4444 break;
3e3d5815 4445 case QEMU_OPTION_mtdblock:
609497ab 4446 drive_add(optarg, MTD_ALIAS);
3e3d5815 4447 break;
a1bb27b1 4448 case QEMU_OPTION_sd:
609497ab 4449 drive_add(optarg, SD_ALIAS);
a1bb27b1 4450 break;
86f55663 4451 case QEMU_OPTION_pflash:
609497ab 4452 drive_add(optarg, PFLASH_ALIAS);
86f55663 4453 break;
cd6f1169 4454 case QEMU_OPTION_snapshot:
33e3963e
FB
4455 snapshot = 1;
4456 break;
cd6f1169 4457 case QEMU_OPTION_hdachs:
330d0414 4458 {
330d0414
FB
4459 const char *p;
4460 p = optarg;
4461 cyls = strtol(p, (char **)&p, 0);
46d4767d
FB
4462 if (cyls < 1 || cyls > 16383)
4463 goto chs_fail;
330d0414
FB
4464 if (*p != ',')
4465 goto chs_fail;
4466 p++;
4467 heads = strtol(p, (char **)&p, 0);
46d4767d
FB
4468 if (heads < 1 || heads > 16)
4469 goto chs_fail;
330d0414
FB
4470 if (*p != ',')
4471 goto chs_fail;
4472 p++;
4473 secs = strtol(p, (char **)&p, 0);
46d4767d
FB
4474 if (secs < 1 || secs > 63)
4475 goto chs_fail;
4476 if (*p == ',') {
4477 p++;
4478 if (!strcmp(p, "none"))
4479 translation = BIOS_ATA_TRANSLATION_NONE;
4480 else if (!strcmp(p, "lba"))
4481 translation = BIOS_ATA_TRANSLATION_LBA;
4482 else if (!strcmp(p, "auto"))
4483 translation = BIOS_ATA_TRANSLATION_AUTO;
4484 else
4485 goto chs_fail;
4486 } else if (*p != '\0') {
c4b1fcc0 4487 chs_fail:
46d4767d
FB
4488 fprintf(stderr, "qemu: invalid physical CHS format\n");
4489 exit(1);
c4b1fcc0 4490 }
e4bcb14c 4491 if (hda_index != -1)
609497ab
AZ
4492 snprintf(drives_opt[hda_index].opt,
4493 sizeof(drives_opt[hda_index].opt),
4494 HD_ALIAS ",cyls=%d,heads=%d,secs=%d%s",
4495 0, cyls, heads, secs,
e4bcb14c
TS
4496 translation == BIOS_ATA_TRANSLATION_LBA ?
4497 ",trans=lba" :
4498 translation == BIOS_ATA_TRANSLATION_NONE ?
4499 ",trans=none" : "");
330d0414
FB
4500 }
4501 break;
cd6f1169 4502 case QEMU_OPTION_nographic:
a20dd508
FB
4503 nographic = 1;
4504 break;
4d3b6f6e
AZ
4505#ifdef CONFIG_CURSES
4506 case QEMU_OPTION_curses:
4507 curses = 1;
4508 break;
4509#endif
a171fe39
AZ
4510 case QEMU_OPTION_portrait:
4511 graphic_rotate = 1;
4512 break;
cd6f1169 4513 case QEMU_OPTION_kernel:
a20dd508
FB
4514 kernel_filename = optarg;
4515 break;
cd6f1169 4516 case QEMU_OPTION_append:
a20dd508 4517 kernel_cmdline = optarg;
313aa567 4518 break;
cd6f1169 4519 case QEMU_OPTION_cdrom:
609497ab 4520 drive_add(optarg, CDROM_ALIAS);
36b486bb 4521 break;
cd6f1169 4522 case QEMU_OPTION_boot:
28c5af54
JM
4523 boot_devices = optarg;
4524 /* We just do some generic consistency checks */
4525 {
4526 /* Could easily be extended to 64 devices if needed */
60fe76f3 4527 const char *p;
28c5af54
JM
4528
4529 boot_devices_bitmap = 0;
4530 for (p = boot_devices; *p != '\0'; p++) {
4531 /* Allowed boot devices are:
4532 * a b : floppy disk drives
4533 * c ... f : IDE disk drives
4534 * g ... m : machine implementation dependant drives
4535 * n ... p : network devices
4536 * It's up to each machine implementation to check
4537 * if the given boot devices match the actual hardware
4538 * implementation and firmware features.
4539 */
4540 if (*p < 'a' || *p > 'q') {
4541 fprintf(stderr, "Invalid boot device '%c'\n", *p);
4542 exit(1);
4543 }
4544 if (boot_devices_bitmap & (1 << (*p - 'a'))) {
4545 fprintf(stderr,
4546 "Boot device '%c' was given twice\n",*p);
4547 exit(1);
4548 }
4549 boot_devices_bitmap |= 1 << (*p - 'a');
4550 }
36b486bb
FB
4551 }
4552 break;
cd6f1169 4553 case QEMU_OPTION_fda:
cd6f1169 4554 case QEMU_OPTION_fdb:
609497ab 4555 drive_add(optarg, FD_ALIAS, popt->index - QEMU_OPTION_fda);
c45886db 4556 break;
52ca8d6a
FB
4557#ifdef TARGET_I386
4558 case QEMU_OPTION_no_fd_bootchk:
4559 fd_bootchk = 0;
4560 break;
4561#endif
7c9d8e07
FB
4562 case QEMU_OPTION_net:
4563 if (nb_net_clients >= MAX_NET_CLIENTS) {
4564 fprintf(stderr, "qemu: too many network clients\n");
c4b1fcc0
FB
4565 exit(1);
4566 }
fd5f393a 4567 net_clients[nb_net_clients] = optarg;
7c9d8e07 4568 nb_net_clients++;
702c651c 4569 break;
c7f74643
FB
4570#ifdef CONFIG_SLIRP
4571 case QEMU_OPTION_tftp:
c7f74643 4572 tftp_prefix = optarg;
9bf05444 4573 break;
47d5d01a
TS
4574 case QEMU_OPTION_bootp:
4575 bootp_filename = optarg;
4576 break;
c94c8d64 4577#ifndef _WIN32
9d728e8c
FB
4578 case QEMU_OPTION_smb:
4579 net_slirp_smb(optarg);
4580 break;
c94c8d64 4581#endif
9bf05444 4582 case QEMU_OPTION_redir:
3b46e624 4583 net_slirp_redir(optarg);
9bf05444 4584 break;
c7f74643 4585#endif
dc72ac14
AZ
4586 case QEMU_OPTION_bt:
4587 if (nb_bt_opts >= MAX_BT_CMDLINE) {
4588 fprintf(stderr, "qemu: too many bluetooth options\n");
4589 exit(1);
4590 }
4591 bt_opts[nb_bt_opts++] = optarg;
4592 break;
1d14ffa9 4593#ifdef HAS_AUDIO
1d14ffa9
FB
4594 case QEMU_OPTION_audio_help:
4595 AUD_help ();
4596 exit (0);
4597 break;
4598 case QEMU_OPTION_soundhw:
4599 select_soundhw (optarg);
4600 break;
4601#endif
cd6f1169 4602 case QEMU_OPTION_h:
15f82208 4603 help(0);
cd6f1169 4604 break;
00f82b8a
AJ
4605 case QEMU_OPTION_m: {
4606 uint64_t value;
4607 char *ptr;
4608
4609 value = strtoul(optarg, &ptr, 10);
4610 switch (*ptr) {
4611 case 0: case 'M': case 'm':
4612 value <<= 20;
4613 break;
4614 case 'G': case 'g':
4615 value <<= 30;
4616 break;
4617 default:
4618 fprintf(stderr, "qemu: invalid ram size: %s\n", optarg);
cd6f1169
FB
4619 exit(1);
4620 }
00f82b8a
AJ
4621
4622 /* On 32-bit hosts, QEMU is limited by virtual address space */
4623 if (value > (2047 << 20)
4624#ifndef USE_KQEMU
4625 && HOST_LONG_BITS == 32
4626#endif
4627 ) {
4628 fprintf(stderr, "qemu: at most 2047 MB RAM can be simulated\n");
4629 exit(1);
4630 }
4631 if (value != (uint64_t)(ram_addr_t)value) {
4632 fprintf(stderr, "qemu: ram size too large\n");
4633 exit(1);
4634 }
4635 ram_size = value;
cd6f1169 4636 break;
00f82b8a 4637 }
cd6f1169
FB
4638 case QEMU_OPTION_d:
4639 {
4640 int mask;
c7cd6a37 4641 const CPULogItem *item;
3b46e624 4642
cd6f1169
FB
4643 mask = cpu_str_to_log_mask(optarg);
4644 if (!mask) {
4645 printf("Log items (comma separated):\n");
f193c797
FB
4646 for(item = cpu_log_items; item->mask != 0; item++) {
4647 printf("%-10s %s\n", item->name, item->help);
4648 }
4649 exit(1);
cd6f1169
FB
4650 }
4651 cpu_set_log(mask);
f193c797 4652 }
cd6f1169 4653 break;
67b915a5 4654#ifdef CONFIG_GDBSTUB
cd6f1169
FB
4655 case QEMU_OPTION_s:
4656 use_gdbstub = 1;
4657 break;
4658 case QEMU_OPTION_p:
cfc3475a 4659 gdbstub_port = optarg;
cd6f1169 4660 break;
67b915a5 4661#endif
cd6f1169
FB
4662 case QEMU_OPTION_L:
4663 bios_dir = optarg;
4664 break;
1192dad8
JM
4665 case QEMU_OPTION_bios:
4666 bios_name = optarg;
4667 break;
cd6f1169 4668 case QEMU_OPTION_S:
3c07f8e8 4669 autostart = 0;
cd6f1169 4670 break;
5824d651 4671#ifndef _WIN32
3d11d0eb
FB
4672 case QEMU_OPTION_k:
4673 keyboard_layout = optarg;
4674 break;
5824d651 4675#endif
ee22c2f7
FB
4676 case QEMU_OPTION_localtime:
4677 rtc_utc = 0;
4678 break;
3893c124 4679 case QEMU_OPTION_vga:
4680 select_vgahw (optarg);
1bfe856e 4681 break;
5824d651 4682#if defined(TARGET_PPC) || defined(TARGET_SPARC)
e9b137c2
FB
4683 case QEMU_OPTION_g:
4684 {
4685 const char *p;
4686 int w, h, depth;
4687 p = optarg;
4688 w = strtol(p, (char **)&p, 10);
4689 if (w <= 0) {
4690 graphic_error:
4691 fprintf(stderr, "qemu: invalid resolution or depth\n");
4692 exit(1);
4693 }
4694 if (*p != 'x')
4695 goto graphic_error;
4696 p++;
4697 h = strtol(p, (char **)&p, 10);
4698 if (h <= 0)
4699 goto graphic_error;
4700 if (*p == 'x') {
4701 p++;
4702 depth = strtol(p, (char **)&p, 10);
5fafdf24 4703 if (depth != 8 && depth != 15 && depth != 16 &&
e9b137c2
FB
4704 depth != 24 && depth != 32)
4705 goto graphic_error;
4706 } else if (*p == '\0') {
4707 depth = graphic_depth;
4708 } else {
4709 goto graphic_error;
4710 }
3b46e624 4711
e9b137c2
FB
4712 graphic_width = w;
4713 graphic_height = h;
4714 graphic_depth = depth;
4715 }
4716 break;
5824d651 4717#endif
20d8a3ed
TS
4718 case QEMU_OPTION_echr:
4719 {
4720 char *r;
4721 term_escape_char = strtol(optarg, &r, 0);
4722 if (r == optarg)
4723 printf("Bad argument to echr\n");
4724 break;
4725 }
82c643ff 4726 case QEMU_OPTION_monitor:
fd5f393a 4727 monitor_device = optarg;
82c643ff
FB
4728 break;
4729 case QEMU_OPTION_serial:
8d11df9e
FB
4730 if (serial_device_index >= MAX_SERIAL_PORTS) {
4731 fprintf(stderr, "qemu: too many serial ports\n");
4732 exit(1);
4733 }
fd5f393a 4734 serial_devices[serial_device_index] = optarg;
8d11df9e 4735 serial_device_index++;
82c643ff 4736 break;
51ecf136
AL
4737 case QEMU_OPTION_virtiocon:
4738 if (virtio_console_index >= MAX_VIRTIO_CONSOLES) {
4739 fprintf(stderr, "qemu: too many virtio consoles\n");
4740 exit(1);
4741 }
4742 virtio_consoles[virtio_console_index] = optarg;
4743 virtio_console_index++;
4744 break;
6508fe59
FB
4745 case QEMU_OPTION_parallel:
4746 if (parallel_device_index >= MAX_PARALLEL_PORTS) {
4747 fprintf(stderr, "qemu: too many parallel ports\n");
4748 exit(1);
4749 }
fd5f393a 4750 parallel_devices[parallel_device_index] = optarg;
6508fe59
FB
4751 parallel_device_index++;
4752 break;
d63d307f
FB
4753 case QEMU_OPTION_loadvm:
4754 loadvm = optarg;
4755 break;
4756 case QEMU_OPTION_full_screen:
4757 full_screen = 1;
4758 break;
667accab 4759#ifdef CONFIG_SDL
43523e93
TS
4760 case QEMU_OPTION_no_frame:
4761 no_frame = 1;
4762 break;
3780e197
TS
4763 case QEMU_OPTION_alt_grab:
4764 alt_grab = 1;
4765 break;
667accab
TS
4766 case QEMU_OPTION_no_quit:
4767 no_quit = 1;
4768 break;
7d957bd8
AL
4769 case QEMU_OPTION_sdl:
4770 sdl = 1;
4771 break;
667accab 4772#endif
f7cce898 4773 case QEMU_OPTION_pidfile:
93815bc2 4774 pid_file = optarg;
f7cce898 4775 break;
a09db21f
FB
4776#ifdef TARGET_I386
4777 case QEMU_OPTION_win2k_hack:
4778 win2k_install_hack = 1;
4779 break;
73822ec8
AL
4780 case QEMU_OPTION_rtc_td_hack:
4781 rtc_td_hack = 1;
4782 break;
8a92ea2f
AL
4783 case QEMU_OPTION_acpitable:
4784 if(acpi_table_add(optarg) < 0) {
4785 fprintf(stderr, "Wrong acpi table provided\n");
4786 exit(1);
4787 }
4788 break;
a09db21f 4789#endif
d993e026
FB
4790#ifdef USE_KQEMU
4791 case QEMU_OPTION_no_kqemu:
4792 kqemu_allowed = 0;
4793 break;
89bfc105
FB
4794 case QEMU_OPTION_kernel_kqemu:
4795 kqemu_allowed = 2;
4796 break;
7ba1e619
AL
4797#endif
4798#ifdef CONFIG_KVM
4799 case QEMU_OPTION_enable_kvm:
4800 kvm_allowed = 1;
4801#ifdef USE_KQEMU
4802 kqemu_allowed = 0;
4803#endif
4804 break;
d993e026 4805#endif
bb36d470
FB
4806 case QEMU_OPTION_usb:
4807 usb_enabled = 1;
4808 break;
a594cfbf
FB
4809 case QEMU_OPTION_usbdevice:
4810 usb_enabled = 1;
0d92ed30 4811 if (usb_devices_index >= MAX_USB_CMDLINE) {
a594cfbf
FB
4812 fprintf(stderr, "Too many USB devices\n");
4813 exit(1);
4814 }
fd5f393a 4815 usb_devices[usb_devices_index] = optarg;
a594cfbf
FB
4816 usb_devices_index++;
4817 break;
6a00d601
FB
4818 case QEMU_OPTION_smp:
4819 smp_cpus = atoi(optarg);
b2097003 4820 if (smp_cpus < 1) {
6a00d601
FB
4821 fprintf(stderr, "Invalid number of CPUs\n");
4822 exit(1);
4823 }
4824 break;
24236869 4825 case QEMU_OPTION_vnc:
73fc9742 4826 vnc_display = optarg;
24236869 4827 break;
5824d651 4828#ifdef TARGET_I386
6515b203
FB
4829 case QEMU_OPTION_no_acpi:
4830 acpi_enabled = 0;
4831 break;
16b29ae1
AL
4832 case QEMU_OPTION_no_hpet:
4833 no_hpet = 1;
4834 break;
5824d651 4835#endif
d1beab82
FB
4836 case QEMU_OPTION_no_reboot:
4837 no_reboot = 1;
4838 break;
b2f76161
AJ
4839 case QEMU_OPTION_no_shutdown:
4840 no_shutdown = 1;
4841 break;
9467cd46
AZ
4842 case QEMU_OPTION_show_cursor:
4843 cursor_hide = 0;
4844 break;
8fcb1b90
BS
4845 case QEMU_OPTION_uuid:
4846 if(qemu_uuid_parse(optarg, qemu_uuid) < 0) {
4847 fprintf(stderr, "Fail to parse UUID string."
4848 " Wrong format.\n");
4849 exit(1);
4850 }
4851 break;
5824d651 4852#ifndef _WIN32
71e3ceb8
TS
4853 case QEMU_OPTION_daemonize:
4854 daemonize = 1;
4855 break;
5824d651 4856#endif
9ae02555
TS
4857 case QEMU_OPTION_option_rom:
4858 if (nb_option_roms >= MAX_OPTION_ROMS) {
4859 fprintf(stderr, "Too many option ROMs\n");
4860 exit(1);
4861 }
4862 option_rom[nb_option_roms] = optarg;
4863 nb_option_roms++;
4864 break;
5824d651 4865#if defined(TARGET_ARM) || defined(TARGET_M68K)
8e71621f
PB
4866 case QEMU_OPTION_semihosting:
4867 semihosting_enabled = 1;
4868 break;
5824d651 4869#endif
c35734b2
TS
4870 case QEMU_OPTION_name:
4871 qemu_name = optarg;
4872 break;
95efd11c 4873#if defined(TARGET_SPARC) || defined(TARGET_PPC)
66508601
BS
4874 case QEMU_OPTION_prom_env:
4875 if (nb_prom_envs >= MAX_PROM_ENVS) {
4876 fprintf(stderr, "Too many prom variables\n");
4877 exit(1);
4878 }
4879 prom_envs[nb_prom_envs] = optarg;
4880 nb_prom_envs++;
4881 break;
2b8f2d41
AZ
4882#endif
4883#ifdef TARGET_ARM
4884 case QEMU_OPTION_old_param:
4885 old_param = 1;
05ebd537 4886 break;
66508601 4887#endif
f3dcfada
TS
4888 case QEMU_OPTION_clock:
4889 configure_alarms(optarg);
4890 break;
7e0af5d0
FB
4891 case QEMU_OPTION_startdate:
4892 {
4893 struct tm tm;
f6503059 4894 time_t rtc_start_date;
7e0af5d0 4895 if (!strcmp(optarg, "now")) {
f6503059 4896 rtc_date_offset = -1;
7e0af5d0
FB
4897 } else {
4898 if (sscanf(optarg, "%d-%d-%dT%d:%d:%d",
4899 &tm.tm_year,
4900 &tm.tm_mon,
4901 &tm.tm_mday,
4902 &tm.tm_hour,
4903 &tm.tm_min,
4904 &tm.tm_sec) == 6) {
4905 /* OK */
4906 } else if (sscanf(optarg, "%d-%d-%d",
4907 &tm.tm_year,
4908 &tm.tm_mon,
4909 &tm.tm_mday) == 3) {
4910 tm.tm_hour = 0;
4911 tm.tm_min = 0;
4912 tm.tm_sec = 0;
4913 } else {
4914 goto date_fail;
4915 }
4916 tm.tm_year -= 1900;
4917 tm.tm_mon--;
3c6b2088 4918 rtc_start_date = mktimegm(&tm);
7e0af5d0
FB
4919 if (rtc_start_date == -1) {
4920 date_fail:
4921 fprintf(stderr, "Invalid date format. Valid format are:\n"
4922 "'now' or '2006-06-17T16:01:21' or '2006-06-17'\n");
4923 exit(1);
4924 }
f6503059 4925 rtc_date_offset = time(NULL) - rtc_start_date;
7e0af5d0
FB
4926 }
4927 }
4928 break;
26a5f13b
FB
4929 case QEMU_OPTION_tb_size:
4930 tb_size = strtol(optarg, NULL, 0);
4931 if (tb_size < 0)
4932 tb_size = 0;
4933 break;
2e70f6ef
PB
4934 case QEMU_OPTION_icount:
4935 use_icount = 1;
4936 if (strcmp(optarg, "auto") == 0) {
4937 icount_time_shift = -1;
4938 } else {
4939 icount_time_shift = strtol(optarg, NULL, 0);
4940 }
4941 break;
5bb7910a
AL
4942 case QEMU_OPTION_incoming:
4943 incoming = optarg;
4944 break;
5824d651 4945#ifndef _WIN32
0858532e
AL
4946 case QEMU_OPTION_chroot:
4947 chroot_dir = optarg;
4948 break;
4949 case QEMU_OPTION_runas:
4950 run_as = optarg;
4951 break;
5824d651 4952#endif
cd6f1169 4953 }
0824d6fc
FB
4954 }
4955 }
330d0414 4956
7ba1e619
AL
4957#if defined(CONFIG_KVM) && defined(USE_KQEMU)
4958 if (kvm_allowed && kqemu_allowed) {
4959 fprintf(stderr,
4960 "You can not enable both KVM and kqemu at the same time\n");
4961 exit(1);
4962 }
4963#endif
4964
3d878caa 4965 machine->max_cpus = machine->max_cpus ?: 1; /* Default to UP */
b2097003
AL
4966 if (smp_cpus > machine->max_cpus) {
4967 fprintf(stderr, "Number of SMP cpus requested (%d), exceeds max cpus "
4968 "supported by machine `%s' (%d)\n", smp_cpus, machine->name,
4969 machine->max_cpus);
4970 exit(1);
4971 }
4972
bc0129d9
AL
4973 if (nographic) {
4974 if (serial_device_index == 0)
4975 serial_devices[0] = "stdio";
4976 if (parallel_device_index == 0)
4977 parallel_devices[0] = "null";
4978 if (strncmp(monitor_device, "vc", 2) == 0)
4979 monitor_device = "stdio";
4980 }
4981
71e3ceb8 4982#ifndef _WIN32
71e3ceb8
TS
4983 if (daemonize) {
4984 pid_t pid;
4985
4986 if (pipe(fds) == -1)
4987 exit(1);
4988
4989 pid = fork();
4990 if (pid > 0) {
4991 uint8_t status;
4992 ssize_t len;
4993
4994 close(fds[1]);
4995
4996 again:
93815bc2
TS
4997 len = read(fds[0], &status, 1);
4998 if (len == -1 && (errno == EINTR))
4999 goto again;
5000
5001 if (len != 1)
5002 exit(1);
5003 else if (status == 1) {
5004 fprintf(stderr, "Could not acquire pidfile\n");
5005 exit(1);
5006 } else
5007 exit(0);
71e3ceb8 5008 } else if (pid < 0)
93815bc2 5009 exit(1);
71e3ceb8
TS
5010
5011 setsid();
5012
5013 pid = fork();
5014 if (pid > 0)
5015 exit(0);
5016 else if (pid < 0)
5017 exit(1);
5018
5019 umask(027);
71e3ceb8
TS
5020
5021 signal(SIGTSTP, SIG_IGN);
5022 signal(SIGTTOU, SIG_IGN);
5023 signal(SIGTTIN, SIG_IGN);
5024 }
71e3ceb8 5025
aa26bb2d 5026 if (pid_file && qemu_create_pidfile(pid_file) != 0) {
93815bc2
TS
5027 if (daemonize) {
5028 uint8_t status = 1;
5029 write(fds[1], &status, 1);
5030 } else
5031 fprintf(stderr, "Could not acquire pid file\n");
5032 exit(1);
5033 }
b9e82a59 5034#endif
93815bc2 5035
ff3fbb30
FB
5036#ifdef USE_KQEMU
5037 if (smp_cpus > 1)
5038 kqemu_allowed = 0;
5039#endif
a20dd508 5040 linux_boot = (kernel_filename != NULL);
7317b8ca 5041 net_boot = (boot_devices_bitmap >> ('n' - 'a')) & 0xF;
6c41b272 5042
f8d39c01
TS
5043 if (!linux_boot && *kernel_cmdline != '\0') {
5044 fprintf(stderr, "-append only allowed with -kernel option\n");
5045 exit(1);
5046 }
5047
5048 if (!linux_boot && initrd_filename != NULL) {
5049 fprintf(stderr, "-initrd only allowed with -kernel option\n");
5050 exit(1);
5051 }
5052
96d30e48 5053 /* boot to floppy or the default cd if no hard disk defined yet */
28c5af54 5054 if (!boot_devices[0]) {
e4bcb14c 5055 boot_devices = "cad";
96d30e48 5056 }
b118d61e 5057 setvbuf(stdout, NULL, _IOLBF, 0);
3b46e624 5058
634fce96 5059 init_timers();
7183b4b4
AL
5060 if (init_timer_alarm() < 0) {
5061 fprintf(stderr, "could not initialize alarm timer\n");
5062 exit(1);
5063 }
2e70f6ef
PB
5064 if (use_icount && icount_time_shift < 0) {
5065 use_icount = 2;
5066 /* 125MIPS seems a reasonable initial guess at the guest speed.
5067 It will be corrected fairly quickly anyway. */
5068 icount_time_shift = 3;
5069 init_icount_adjust();
5070 }
634fce96 5071
fd1dff4b
FB
5072#ifdef _WIN32
5073 socket_init();
5074#endif
5075
7c9d8e07
FB
5076 /* init network clients */
5077 if (nb_net_clients == 0) {
5078 /* if no clients, we use a default config */
f441b28b
AL
5079 net_clients[nb_net_clients++] = "nic";
5080#ifdef CONFIG_SLIRP
5081 net_clients[nb_net_clients++] = "user";
5082#endif
c20709aa
FB
5083 }
5084
7c9d8e07 5085 for(i = 0;i < nb_net_clients; i++) {
9ad97e65 5086 if (net_client_parse(net_clients[i]) < 0)
7c9d8e07 5087 exit(1);
702c651c 5088 }
63a01ef8 5089 net_client_check();
f1510b2c 5090
eec85c2a 5091#ifdef TARGET_I386
ed494d87 5092 /* XXX: this should be moved in the PC machine instantiation code */
28c5af54
JM
5093 if (net_boot != 0) {
5094 int netroms = 0;
5095 for (i = 0; i < nb_nics && i < 4; i++) {
eec85c2a
TS
5096 const char *model = nd_table[i].model;
5097 char buf[1024];
28c5af54
JM
5098 if (net_boot & (1 << i)) {
5099 if (model == NULL)
5100 model = "ne2k_pci";
5101 snprintf(buf, sizeof(buf), "%s/pxe-%s.bin", bios_dir, model);
5102 if (get_image_size(buf) > 0) {
5103 if (nb_option_roms >= MAX_OPTION_ROMS) {
5104 fprintf(stderr, "Too many option ROMs\n");
5105 exit(1);
5106 }
5107 option_rom[nb_option_roms] = strdup(buf);
5108 nb_option_roms++;
5109 netroms++;
5110 }
5111 }
eec85c2a 5112 }
28c5af54 5113 if (netroms == 0) {
eec85c2a
TS
5114 fprintf(stderr, "No valid PXE rom found for network device\n");
5115 exit(1);
5116 }
eec85c2a
TS
5117 }
5118#endif
5119
dc72ac14
AZ
5120 /* init the bluetooth world */
5121 for (i = 0; i < nb_bt_opts; i++)
5122 if (bt_parse(bt_opts[i]))
5123 exit(1);
5124
0824d6fc 5125 /* init the memory */
7fb4fdcf
AZ
5126 phys_ram_size = machine->ram_require & ~RAMSIZE_FIXED;
5127
5128 if (machine->ram_require & RAMSIZE_FIXED) {
5129 if (ram_size > 0) {
5130 if (ram_size < phys_ram_size) {
cd940061
AJ
5131 fprintf(stderr, "Machine `%s' requires %llu bytes of memory\n",
5132 machine->name, (unsigned long long) phys_ram_size);
7fb4fdcf
AZ
5133 exit(-1);
5134 }
5135
5136 phys_ram_size = ram_size;
5137 } else
5138 ram_size = phys_ram_size;
5139 } else {
4fc5d071 5140 if (ram_size == 0)
7fb4fdcf
AZ
5141 ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
5142
5143 phys_ram_size += ram_size;
5144 }
9ae02555 5145
d993e026 5146 phys_ram_base = qemu_vmalloc(phys_ram_size);
7f7f9873
FB
5147 if (!phys_ram_base) {
5148 fprintf(stderr, "Could not allocate physical memory\n");
0824d6fc
FB
5149 exit(1);
5150 }
5151
26a5f13b
FB
5152 /* init the dynamic translator */
5153 cpu_exec_init_all(tb_size * 1024 * 1024);
5154
5905b2e5 5155 bdrv_init();
6512a2a7 5156 dma_helper_init();
c4b1fcc0 5157
e4bcb14c 5158 /* we always create the cdrom drive, even if no disk is there */
c4b1fcc0 5159
e4bcb14c 5160 if (nb_drives_opt < MAX_DRIVES)
609497ab 5161 drive_add(NULL, CDROM_ALIAS);
c4b1fcc0 5162
9d413d1d 5163 /* we always create at least one floppy */
33e3963e 5164
e4bcb14c 5165 if (nb_drives_opt < MAX_DRIVES)
609497ab 5166 drive_add(NULL, FD_ALIAS, 0);
86f55663 5167
9d413d1d
AZ
5168 /* we always create one sd slot, even if no card is in it */
5169
5170 if (nb_drives_opt < MAX_DRIVES)
609497ab 5171 drive_add(NULL, SD_ALIAS);
9d413d1d 5172
e4bcb14c
TS
5173 /* open the virtual block devices */
5174
5175 for(i = 0; i < nb_drives_opt; i++)
609497ab 5176 if (drive_init(&drives_opt[i], snapshot, machine) == -1)
e4bcb14c 5177 exit(1);
3e3d5815 5178
c88676f8 5179 register_savevm("timer", 0, 2, timer_save, timer_load, NULL);
475e4277 5180 register_savevm_live("ram", 0, 3, ram_save_live, NULL, ram_load, NULL);
8a7ddc38 5181
3023f332
AL
5182#ifndef _WIN32
5183 /* must be after terminal init, SDL library changes signal handlers */
5184 termsig_setup();
5185#endif
5186
5187 /* Maintain compatibility with multiple stdio monitors */
5188 if (!strcmp(monitor_device,"stdio")) {
5189 for (i = 0; i < MAX_SERIAL_PORTS; i++) {
5190 const char *devname = serial_devices[i];
5191 if (devname && !strcmp(devname,"mon:stdio")) {
5192 monitor_device = NULL;
5193 break;
5194 } else if (devname && !strcmp(devname,"stdio")) {
5195 monitor_device = NULL;
5196 serial_devices[i] = "mon:stdio";
5197 break;
5198 }
5199 }
5200 }
5201
5202 if (kvm_enabled()) {
5203 int ret;
5204
5205 ret = kvm_init(smp_cpus);
5206 if (ret < 0) {
5207 fprintf(stderr, "failed to initialize KVM\n");
5208 exit(1);
5209 }
5210 }
5211
4c621805 5212 if (monitor_device) {
ceecf1d1 5213 monitor_hd = qemu_chr_open("monitor", monitor_device, NULL);
4c621805
AL
5214 if (!monitor_hd) {
5215 fprintf(stderr, "qemu: could not open monitor device '%s'\n", monitor_device);
5216 exit(1);
5217 }
5218 }
5219
2796dae0
AL
5220 for(i = 0; i < MAX_SERIAL_PORTS; i++) {
5221 const char *devname = serial_devices[i];
5222 if (devname && strcmp(devname, "none")) {
5223 char label[32];
5224 snprintf(label, sizeof(label), "serial%d", i);
ceecf1d1 5225 serial_hds[i] = qemu_chr_open(label, devname, NULL);
2796dae0
AL
5226 if (!serial_hds[i]) {
5227 fprintf(stderr, "qemu: could not open serial device '%s'\n",
5228 devname);
5229 exit(1);
5230 }
5231 }
5232 }
5233
5234 for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
5235 const char *devname = parallel_devices[i];
5236 if (devname && strcmp(devname, "none")) {
5237 char label[32];
5238 snprintf(label, sizeof(label), "parallel%d", i);
ceecf1d1 5239 parallel_hds[i] = qemu_chr_open(label, devname, NULL);
2796dae0
AL
5240 if (!parallel_hds[i]) {
5241 fprintf(stderr, "qemu: could not open parallel device '%s'\n",
5242 devname);
5243 exit(1);
5244 }
5245 }
5246 }
5247
5248 for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
5249 const char *devname = virtio_consoles[i];
5250 if (devname && strcmp(devname, "none")) {
5251 char label[32];
5252 snprintf(label, sizeof(label), "virtcon%d", i);
ceecf1d1 5253 virtcon_hds[i] = qemu_chr_open(label, devname, NULL);
2796dae0
AL
5254 if (!virtcon_hds[i]) {
5255 fprintf(stderr, "qemu: could not open virtio console '%s'\n",
5256 devname);
5257 exit(1);
5258 }
5259 }
5260 }
5261
3023f332
AL
5262 machine->init(ram_size, vga_ram_size, boot_devices,
5263 kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
5264
6f338c34
AL
5265 current_machine = machine;
5266
3023f332
AL
5267 /* Set KVM's vcpu state to qemu's initial CPUState. */
5268 if (kvm_enabled()) {
5269 int ret;
5270
5271 ret = kvm_sync_vcpus();
5272 if (ret < 0) {
5273 fprintf(stderr, "failed to initialize vcpus\n");
5274 exit(1);
5275 }
5276 }
5277
5278 /* init USB devices */
5279 if (usb_enabled) {
5280 for(i = 0; i < usb_devices_index; i++) {
c0f4ce77 5281 if (usb_device_add(usb_devices[i], 0) < 0) {
3023f332
AL
5282 fprintf(stderr, "Warning: could not add USB device %s\n",
5283 usb_devices[i]);
5284 }
5285 }
5286 }
5287
8f391ab4
AL
5288 if (!display_state)
5289 dumb_display_init();
3023f332
AL
5290 /* just use the first displaystate for the moment */
5291 ds = display_state;
313aa567 5292 /* terminal init */
a20dd508 5293 if (nographic) {
4d3b6f6e
AZ
5294 if (curses) {
5295 fprintf(stderr, "fatal: -nographic can't be used with -curses\n");
5296 exit(1);
5297 }
7d957bd8 5298 } else {
4d3b6f6e 5299#if defined(CONFIG_CURSES)
7d957bd8
AL
5300 if (curses) {
5301 /* At the moment curses cannot be used with other displays */
5302 curses_display_init(ds, full_screen);
5303 } else
4d3b6f6e 5304#endif
7d957bd8
AL
5305 {
5306 if (vnc_display != NULL) {
5307 vnc_display_init(ds);
5308 if (vnc_display_open(ds, vnc_display) < 0)
5309 exit(1);
5310 }
5b0753e0 5311#if defined(CONFIG_SDL)
d268de04 5312 if (sdl || !vnc_display)
7d957bd8 5313 sdl_display_init(ds, full_screen, no_frame);
5b0753e0 5314#elif defined(CONFIG_COCOA)
d268de04 5315 if (sdl || !vnc_display)
7d957bd8 5316 cocoa_display_init(ds, full_screen);
313aa567 5317#endif
7d957bd8 5318 }
313aa567 5319 }
7d957bd8 5320 dpy_resize(ds);
5b08fc10 5321
3023f332
AL
5322 dcl = ds->listeners;
5323 while (dcl != NULL) {
5324 if (dcl->dpy_refresh != NULL) {
5325 ds->gui_timer = qemu_new_timer(rt_clock, gui_update, ds);
5326 qemu_mod_timer(ds->gui_timer, qemu_get_clock(rt_clock));
20d8a3ed 5327 }
3023f332 5328 dcl = dcl->next;
20d8a3ed 5329 }
3023f332 5330
9043b62d
BS
5331 if (nographic || (vnc_display && !sdl)) {
5332 nographic_timer = qemu_new_timer(rt_clock, nographic_update, NULL);
5333 qemu_mod_timer(nographic_timer, qemu_get_clock(rt_clock));
5334 }
5335
2796dae0 5336 text_consoles_set_display(display_state);
2970a6c9 5337 qemu_chr_initial_reset();
2796dae0 5338
4c621805 5339 if (monitor_device && monitor_hd)
cde76ee1 5340 monitor_init(monitor_hd, MONITOR_USE_READLINE | MONITOR_IS_DEFAULT);
82c643ff 5341
8d11df9e 5342 for(i = 0; i < MAX_SERIAL_PORTS; i++) {
c03b0f0f 5343 const char *devname = serial_devices[i];
fd5f393a 5344 if (devname && strcmp(devname, "none")) {
5ccfae10
AL
5345 char label[32];
5346 snprintf(label, sizeof(label), "serial%d", i);
af3a9031 5347 if (strstart(devname, "vc", 0))
7ba1260a 5348 qemu_chr_printf(serial_hds[i], "serial%d console\r\n", i);
8d11df9e 5349 }
82c643ff 5350 }
82c643ff 5351
6508fe59 5352 for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
c03b0f0f 5353 const char *devname = parallel_devices[i];
fd5f393a 5354 if (devname && strcmp(devname, "none")) {
5ccfae10
AL
5355 char label[32];
5356 snprintf(label, sizeof(label), "parallel%d", i);
af3a9031 5357 if (strstart(devname, "vc", 0))
7ba1260a 5358 qemu_chr_printf(parallel_hds[i], "parallel%d console\r\n", i);
6508fe59
FB
5359 }
5360 }
5361
9ede2fde
AL
5362 for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
5363 const char *devname = virtio_consoles[i];
2796dae0 5364 if (virtcon_hds[i] && devname) {
9ede2fde
AL
5365 char label[32];
5366 snprintf(label, sizeof(label), "virtcon%d", i);
9ede2fde
AL
5367 if (strstart(devname, "vc", 0))
5368 qemu_chr_printf(virtcon_hds[i], "virtio console%d\r\n", i);
5369 }
5370 }
5371
67b915a5 5372#ifdef CONFIG_GDBSTUB
b4608c04 5373 if (use_gdbstub) {
c636bb66
FB
5374 /* XXX: use standard host:port notation and modify options
5375 accordingly. */
cfc3475a
PB
5376 if (gdbserver_start(gdbstub_port) < 0) {
5377 fprintf(stderr, "qemu: could not open gdbstub device on port '%s'\n",
c636bb66 5378 gdbstub_port);
8a7ddc38 5379 exit(1);
8a7ddc38 5380 }
45669e00 5381 }
67b915a5 5382#endif
45669e00 5383
d63d307f 5384 if (loadvm)
376253ec 5385 do_loadvm(cur_mon, loadvm);
d63d307f 5386
5bb7910a
AL
5387 if (incoming) {
5388 autostart = 0; /* fixme how to deal with -daemonize */
5389 qemu_start_incoming_migration(incoming);
5390 }
5391
c0f4ce77
AL
5392 if (autostart)
5393 vm_start();
ffd843bc 5394
b9e82a59 5395#ifndef _WIN32
71e3ceb8
TS
5396 if (daemonize) {
5397 uint8_t status = 0;
5398 ssize_t len;
71e3ceb8
TS
5399
5400 again1:
5401 len = write(fds[1], &status, 1);
5402 if (len == -1 && (errno == EINTR))
5403 goto again1;
5404
5405 if (len != 1)
5406 exit(1);
5407
bd54b863 5408 chdir("/");
aeb30be6 5409 TFR(fd = open("/dev/null", O_RDWR));
71e3ceb8
TS
5410 if (fd == -1)
5411 exit(1);
0858532e 5412 }
71e3ceb8 5413
0858532e
AL
5414 if (run_as) {
5415 pwd = getpwnam(run_as);
5416 if (!pwd) {
5417 fprintf(stderr, "User \"%s\" doesn't exist\n", run_as);
5418 exit(1);
5419 }
5420 }
5421
5422 if (chroot_dir) {
5423 if (chroot(chroot_dir) < 0) {
5424 fprintf(stderr, "chroot failed\n");
5425 exit(1);
5426 }
5427 chdir("/");
5428 }
5429
5430 if (run_as) {
5431 if (setgid(pwd->pw_gid) < 0) {
5432 fprintf(stderr, "Failed to setgid(%d)\n", pwd->pw_gid);
5433 exit(1);
5434 }
5435 if (setuid(pwd->pw_uid) < 0) {
5436 fprintf(stderr, "Failed to setuid(%d)\n", pwd->pw_uid);
5437 exit(1);
5438 }
5439 if (setuid(0) != -1) {
5440 fprintf(stderr, "Dropping privileges failed\n");
5441 exit(1);
5442 }
5443 }
0858532e
AL
5444
5445 if (daemonize) {
5446 dup2(fd, 0);
5447 dup2(fd, 1);
5448 dup2(fd, 2);
71e3ceb8 5449
0858532e 5450 close(fd);
71e3ceb8 5451 }
b9e82a59 5452#endif
71e3ceb8 5453
8a7ddc38 5454 main_loop();
40c3bac3 5455 quit_timers();
63a01ef8 5456 net_cleanup();
b46a8906 5457
0824d6fc
FB
5458 return 0;
5459}