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