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