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