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