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