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