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