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