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