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