Sparc32: move sparc32_dma init to sun4m.c
[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 static void main_loop(void)
4285 {
4286     int r;
4287
4288 #ifdef CONFIG_IOTHREAD
4289     qemu_system_ready = 1;
4290     qemu_cond_broadcast(&qemu_system_cond);
4291 #endif
4292
4293     for (;;) {
4294         do {
4295 #ifdef CONFIG_PROFILER
4296             int64_t ti;
4297 #endif
4298 #ifndef CONFIG_IOTHREAD
4299             tcg_cpu_exec();
4300 #endif
4301 #ifdef CONFIG_PROFILER
4302             ti = profile_getclock();
4303 #endif
4304             main_loop_wait(qemu_calculate_timeout());
4305 #ifdef CONFIG_PROFILER
4306             dev_time += profile_getclock() - ti;
4307 #endif
4308         } while (vm_can_run());
4309
4310         if (qemu_debug_requested())
4311             vm_stop(EXCP_DEBUG);
4312         if (qemu_shutdown_requested()) {
4313             if (no_shutdown) {
4314                 vm_stop(0);
4315                 no_shutdown = 0;
4316             } else
4317                 break;
4318         }
4319         if (qemu_reset_requested()) {
4320             pause_all_vcpus();
4321             qemu_system_reset();
4322             resume_all_vcpus();
4323         }
4324         if (qemu_powerdown_requested())
4325             qemu_system_powerdown();
4326         if ((r = qemu_vmstop_requested()))
4327             vm_stop(r);
4328     }
4329     pause_all_vcpus();
4330 }
4331
4332 static void version(void)
4333 {
4334     printf("QEMU PC emulator version " QEMU_VERSION QEMU_PKGVERSION ", Copyright (c) 2003-2008 Fabrice Bellard\n");
4335 }
4336
4337 static void help(int exitcode)
4338 {
4339     version();
4340     printf("usage: %s [options] [disk_image]\n"
4341            "\n"
4342            "'disk_image' is a raw hard image image for IDE hard disk 0\n"
4343            "\n"
4344 #define DEF(option, opt_arg, opt_enum, opt_help)        \
4345            opt_help
4346 #define DEFHEADING(text) stringify(text) "\n"
4347 #include "qemu-options.h"
4348 #undef DEF
4349 #undef DEFHEADING
4350 #undef GEN_DOCS
4351            "\n"
4352            "During emulation, the following keys are useful:\n"
4353            "ctrl-alt-f      toggle full screen\n"
4354            "ctrl-alt-n      switch to virtual console 'n'\n"
4355            "ctrl-alt        toggle mouse and keyboard grab\n"
4356            "\n"
4357            "When using -nographic, press 'ctrl-a h' to get some help.\n"
4358            ,
4359            "qemu",
4360            DEFAULT_RAM_SIZE,
4361 #ifndef _WIN32
4362            DEFAULT_NETWORK_SCRIPT,
4363            DEFAULT_NETWORK_DOWN_SCRIPT,
4364 #endif
4365            DEFAULT_GDBSTUB_PORT,
4366            "/tmp/qemu.log");
4367     exit(exitcode);
4368 }
4369
4370 #define HAS_ARG 0x0001
4371
4372 enum {
4373 #define DEF(option, opt_arg, opt_enum, opt_help)        \
4374     opt_enum,
4375 #define DEFHEADING(text)
4376 #include "qemu-options.h"
4377 #undef DEF
4378 #undef DEFHEADING
4379 #undef GEN_DOCS
4380 };
4381
4382 typedef struct QEMUOption {
4383     const char *name;
4384     int flags;
4385     int index;
4386 } QEMUOption;
4387
4388 static const QEMUOption qemu_options[] = {
4389     { "h", 0, QEMU_OPTION_h },
4390 #define DEF(option, opt_arg, opt_enum, opt_help)        \
4391     { option, opt_arg, opt_enum },
4392 #define DEFHEADING(text)
4393 #include "qemu-options.h"
4394 #undef DEF
4395 #undef DEFHEADING
4396 #undef GEN_DOCS
4397     { NULL },
4398 };
4399
4400 #ifdef HAS_AUDIO
4401 struct soundhw soundhw[] = {
4402 #ifdef HAS_AUDIO_CHOICE
4403 #if defined(TARGET_I386) || defined(TARGET_MIPS)
4404     {
4405         "pcspk",
4406         "PC speaker",
4407         0,
4408         1,
4409         { .init_isa = pcspk_audio_init }
4410     },
4411 #endif
4412
4413 #ifdef CONFIG_SB16
4414     {
4415         "sb16",
4416         "Creative Sound Blaster 16",
4417         0,
4418         1,
4419         { .init_isa = SB16_init }
4420     },
4421 #endif
4422
4423 #ifdef CONFIG_CS4231A
4424     {
4425         "cs4231a",
4426         "CS4231A",
4427         0,
4428         1,
4429         { .init_isa = cs4231a_init }
4430     },
4431 #endif
4432
4433 #ifdef CONFIG_ADLIB
4434     {
4435         "adlib",
4436 #ifdef HAS_YMF262
4437         "Yamaha YMF262 (OPL3)",
4438 #else
4439         "Yamaha YM3812 (OPL2)",
4440 #endif
4441         0,
4442         1,
4443         { .init_isa = Adlib_init }
4444     },
4445 #endif
4446
4447 #ifdef CONFIG_GUS
4448     {
4449         "gus",
4450         "Gravis Ultrasound GF1",
4451         0,
4452         1,
4453         { .init_isa = GUS_init }
4454     },
4455 #endif
4456
4457 #ifdef CONFIG_AC97
4458     {
4459         "ac97",
4460         "Intel 82801AA AC97 Audio",
4461         0,
4462         0,
4463         { .init_pci = ac97_init }
4464     },
4465 #endif
4466
4467 #ifdef CONFIG_ES1370
4468     {
4469         "es1370",
4470         "ENSONIQ AudioPCI ES1370",
4471         0,
4472         0,
4473         { .init_pci = es1370_init }
4474     },
4475 #endif
4476
4477 #endif /* HAS_AUDIO_CHOICE */
4478
4479     { NULL, NULL, 0, 0, { NULL } }
4480 };
4481
4482 static void select_soundhw (const char *optarg)
4483 {
4484     struct soundhw *c;
4485
4486     if (*optarg == '?') {
4487     show_valid_cards:
4488
4489         printf ("Valid sound card names (comma separated):\n");
4490         for (c = soundhw; c->name; ++c) {
4491             printf ("%-11s %s\n", c->name, c->descr);
4492         }
4493         printf ("\n-soundhw all will enable all of the above\n");
4494         exit (*optarg != '?');
4495     }
4496     else {
4497         size_t l;
4498         const char *p;
4499         char *e;
4500         int bad_card = 0;
4501
4502         if (!strcmp (optarg, "all")) {
4503             for (c = soundhw; c->name; ++c) {
4504                 c->enabled = 1;
4505             }
4506             return;
4507         }
4508
4509         p = optarg;
4510         while (*p) {
4511             e = strchr (p, ',');
4512             l = !e ? strlen (p) : (size_t) (e - p);
4513
4514             for (c = soundhw; c->name; ++c) {
4515                 if (!strncmp (c->name, p, l)) {
4516                     c->enabled = 1;
4517                     break;
4518                 }
4519             }
4520
4521             if (!c->name) {
4522                 if (l > 80) {
4523                     fprintf (stderr,
4524                              "Unknown sound card name (too big to show)\n");
4525                 }
4526                 else {
4527                     fprintf (stderr, "Unknown sound card name `%.*s'\n",
4528                              (int) l, p);
4529                 }
4530                 bad_card = 1;
4531             }
4532             p += l + (e != NULL);
4533         }
4534
4535         if (bad_card)
4536             goto show_valid_cards;
4537     }
4538 }
4539 #endif
4540
4541 static void select_vgahw (const char *p)
4542 {
4543     const char *opts;
4544
4545     cirrus_vga_enabled = 0;
4546     std_vga_enabled = 0;
4547     vmsvga_enabled = 0;
4548     xenfb_enabled = 0;
4549     if (strstart(p, "std", &opts)) {
4550         std_vga_enabled = 1;
4551     } else if (strstart(p, "cirrus", &opts)) {
4552         cirrus_vga_enabled = 1;
4553     } else if (strstart(p, "vmware", &opts)) {
4554         vmsvga_enabled = 1;
4555     } else if (strstart(p, "xenfb", &opts)) {
4556         xenfb_enabled = 1;
4557     } else if (!strstart(p, "none", &opts)) {
4558     invalid_vga:
4559         fprintf(stderr, "Unknown vga type: %s\n", p);
4560         exit(1);
4561     }
4562     while (*opts) {
4563         const char *nextopt;
4564
4565         if (strstart(opts, ",retrace=", &nextopt)) {
4566             opts = nextopt;
4567             if (strstart(opts, "dumb", &nextopt))
4568                 vga_retrace_method = VGA_RETRACE_DUMB;
4569             else if (strstart(opts, "precise", &nextopt))
4570                 vga_retrace_method = VGA_RETRACE_PRECISE;
4571             else goto invalid_vga;
4572         } else goto invalid_vga;
4573         opts = nextopt;
4574     }
4575 }
4576
4577 #ifdef TARGET_I386
4578 static int balloon_parse(const char *arg)
4579 {
4580     char buf[128];
4581     const char *p;
4582
4583     if (!strcmp(arg, "none")) {
4584         virtio_balloon = 0;
4585     } else if (!strncmp(arg, "virtio", 6)) {
4586         virtio_balloon = 1;
4587         if (arg[6] == ',')  {
4588             p = arg + 7;
4589             if (get_param_value(buf, sizeof(buf), "addr", p)) {
4590                 virtio_balloon_devaddr = strdup(buf);
4591             }
4592         }
4593     } else {
4594         return -1;
4595     }
4596     return 0;
4597 }
4598 #endif
4599
4600 #ifdef _WIN32
4601 static BOOL WINAPI qemu_ctrl_handler(DWORD type)
4602 {
4603     exit(STATUS_CONTROL_C_EXIT);
4604     return TRUE;
4605 }
4606 #endif
4607
4608 int qemu_uuid_parse(const char *str, uint8_t *uuid)
4609 {
4610     int ret;
4611
4612     if(strlen(str) != 36)
4613         return -1;
4614
4615     ret = sscanf(str, UUID_FMT, &uuid[0], &uuid[1], &uuid[2], &uuid[3],
4616             &uuid[4], &uuid[5], &uuid[6], &uuid[7], &uuid[8], &uuid[9],
4617             &uuid[10], &uuid[11], &uuid[12], &uuid[13], &uuid[14], &uuid[15]);
4618
4619     if(ret != 16)
4620         return -1;
4621
4622 #ifdef TARGET_I386
4623     smbios_add_field(1, offsetof(struct smbios_type_1, uuid), 16, uuid);
4624 #endif
4625
4626     return 0;
4627 }
4628
4629 #define MAX_NET_CLIENTS 32
4630
4631 #ifndef _WIN32
4632
4633 static void termsig_handler(int signal)
4634 {
4635     qemu_system_shutdown_request();
4636 }
4637
4638 static void sigchld_handler(int signal)
4639 {
4640     waitpid(-1, NULL, WNOHANG);
4641 }
4642
4643 static void sighandler_setup(void)
4644 {
4645     struct sigaction act;
4646
4647     memset(&act, 0, sizeof(act));
4648     act.sa_handler = termsig_handler;
4649     sigaction(SIGINT,  &act, NULL);
4650     sigaction(SIGHUP,  &act, NULL);
4651     sigaction(SIGTERM, &act, NULL);
4652
4653     act.sa_handler = sigchld_handler;
4654     act.sa_flags = SA_NOCLDSTOP;
4655     sigaction(SIGCHLD, &act, NULL);
4656 }
4657
4658 #endif
4659
4660 #ifdef _WIN32
4661 /* Look for support files in the same directory as the executable.  */
4662 static char *find_datadir(const char *argv0)
4663 {
4664     char *p;
4665     char buf[MAX_PATH];
4666     DWORD len;
4667
4668     len = GetModuleFileName(NULL, buf, sizeof(buf) - 1);
4669     if (len == 0) {
4670         return NULL;
4671     }
4672
4673     buf[len] = 0;
4674     p = buf + len - 1;
4675     while (p != buf && *p != '\\')
4676         p--;
4677     *p = 0;
4678     if (access(buf, R_OK) == 0) {
4679         return qemu_strdup(buf);
4680     }
4681     return NULL;
4682 }
4683 #else /* !_WIN32 */
4684
4685 /* Find a likely location for support files using the location of the binary.
4686    For installed binaries this will be "$bindir/../share/qemu".  When
4687    running from the build tree this will be "$bindir/../pc-bios".  */
4688 #define SHARE_SUFFIX "/share/qemu"
4689 #define BUILD_SUFFIX "/pc-bios"
4690 static char *find_datadir(const char *argv0)
4691 {
4692     char *dir;
4693     char *p = NULL;
4694     char *res;
4695 #ifdef PATH_MAX
4696     char buf[PATH_MAX];
4697 #endif
4698     size_t max_len;
4699
4700 #if defined(__linux__)
4701     {
4702         int len;
4703         len = readlink("/proc/self/exe", buf, sizeof(buf) - 1);
4704         if (len > 0) {
4705             buf[len] = 0;
4706             p = buf;
4707         }
4708     }
4709 #elif defined(__FreeBSD__)
4710     {
4711         int len;
4712         len = readlink("/proc/curproc/file", buf, sizeof(buf) - 1);
4713         if (len > 0) {
4714             buf[len] = 0;
4715             p = buf;
4716         }
4717     }
4718 #endif
4719     /* If we don't have any way of figuring out the actual executable
4720        location then try argv[0].  */
4721     if (!p) {
4722 #ifdef PATH_MAX
4723         p = buf;
4724 #endif
4725         p = realpath(argv0, p);
4726         if (!p) {
4727             return NULL;
4728         }
4729     }
4730     dir = dirname(p);
4731     dir = dirname(dir);
4732
4733     max_len = strlen(dir) +
4734         MAX(strlen(SHARE_SUFFIX), strlen(BUILD_SUFFIX)) + 1;
4735     res = qemu_mallocz(max_len);
4736     snprintf(res, max_len, "%s%s", dir, SHARE_SUFFIX);
4737     if (access(res, R_OK)) {
4738         snprintf(res, max_len, "%s%s", dir, BUILD_SUFFIX);
4739         if (access(res, R_OK)) {
4740             qemu_free(res);
4741             res = NULL;
4742         }
4743     }
4744 #ifndef PATH_MAX
4745     free(p);
4746 #endif
4747     return res;
4748 }
4749 #undef SHARE_SUFFIX
4750 #undef BUILD_SUFFIX
4751 #endif
4752
4753 char *qemu_find_file(int type, const char *name)
4754 {
4755     int len;
4756     const char *subdir;
4757     char *buf;
4758
4759     /* If name contains path separators then try it as a straight path.  */
4760     if ((strchr(name, '/') || strchr(name, '\\'))
4761         && access(name, R_OK) == 0) {
4762         return strdup(name);
4763     }
4764     switch (type) {
4765     case QEMU_FILE_TYPE_BIOS:
4766         subdir = "";
4767         break;
4768     case QEMU_FILE_TYPE_KEYMAP:
4769         subdir = "keymaps/";
4770         break;
4771     default:
4772         abort();
4773     }
4774     len = strlen(data_dir) + strlen(name) + strlen(subdir) + 2;
4775     buf = qemu_mallocz(len);
4776     snprintf(buf, len, "%s/%s%s", data_dir, subdir, name);
4777     if (access(buf, R_OK)) {
4778         qemu_free(buf);
4779         return NULL;
4780     }
4781     return buf;
4782 }
4783
4784 struct device_config {
4785     enum {
4786         DEV_GENERIC,   /* -device      */
4787         DEV_USB,       /* -usbdevice   */
4788         DEV_BT,        /* -bt          */
4789     } type;
4790     const char *cmdline;
4791     TAILQ_ENTRY(device_config) next;
4792 };
4793 TAILQ_HEAD(, device_config) device_configs = TAILQ_HEAD_INITIALIZER(device_configs);
4794
4795 static void add_device_config(int type, const char *cmdline)
4796 {
4797     struct device_config *conf;
4798
4799     conf = qemu_mallocz(sizeof(*conf));
4800     conf->type = type;
4801     conf->cmdline = cmdline;
4802     TAILQ_INSERT_TAIL(&device_configs, conf, next);
4803 }
4804
4805 static int foreach_device_config(int type, int (*func)(const char *cmdline))
4806 {
4807     struct device_config *conf;
4808     int rc;
4809
4810     TAILQ_FOREACH(conf, &device_configs, next) {
4811         if (conf->type != type)
4812             continue;
4813         rc = func(conf->cmdline);
4814         if (0 != rc)
4815             return rc;
4816     }
4817     return 0;
4818 }
4819
4820 static int generic_parse(const char *cmdline)
4821 {
4822     DeviceState *dev;
4823
4824     dev = qdev_device_add(cmdline);
4825     if (!dev)
4826         return -1;
4827     return 0;
4828 }
4829
4830 int main(int argc, char **argv, char **envp)
4831 {
4832     const char *gdbstub_dev = NULL;
4833     uint32_t boot_devices_bitmap = 0;
4834     int i;
4835     int snapshot, linux_boot, net_boot;
4836     const char *initrd_filename;
4837     const char *kernel_filename, *kernel_cmdline;
4838     char boot_devices[33] = "cad"; /* default to HD->floppy->CD-ROM */
4839     DisplayState *ds;
4840     DisplayChangeListener *dcl;
4841     int cyls, heads, secs, translation;
4842     const char *net_clients[MAX_NET_CLIENTS];
4843     int nb_net_clients;
4844     QemuOpts *hda_opts = NULL;
4845     int optind;
4846     const char *r, *optarg;
4847     CharDriverState *monitor_hd = NULL;
4848     const char *monitor_device;
4849     const char *serial_devices[MAX_SERIAL_PORTS];
4850     int serial_device_index;
4851     const char *parallel_devices[MAX_PARALLEL_PORTS];
4852     int parallel_device_index;
4853     const char *virtio_consoles[MAX_VIRTIO_CONSOLES];
4854     int virtio_console_index;
4855     const char *loadvm = NULL;
4856     QEMUMachine *machine;
4857     const char *cpu_model;
4858 #ifndef _WIN32
4859     int fds[2];
4860 #endif
4861     int tb_size;
4862     const char *pid_file = NULL;
4863     const char *incoming = NULL;
4864 #ifndef _WIN32
4865     int fd = 0;
4866     struct passwd *pwd = NULL;
4867     const char *chroot_dir = NULL;
4868     const char *run_as = NULL;
4869 #endif
4870     CPUState *env;
4871     int show_vnc_port = 0;
4872
4873     qemu_cache_utils_init(envp);
4874
4875     LIST_INIT (&vm_change_state_head);
4876 #ifndef _WIN32
4877     {
4878         struct sigaction act;
4879         sigfillset(&act.sa_mask);
4880         act.sa_flags = 0;
4881         act.sa_handler = SIG_IGN;
4882         sigaction(SIGPIPE, &act, NULL);
4883     }
4884 #else
4885     SetConsoleCtrlHandler(qemu_ctrl_handler, TRUE);
4886     /* Note: cpu_interrupt() is currently not SMP safe, so we force
4887        QEMU to run on a single CPU */
4888     {
4889         HANDLE h;
4890         DWORD mask, smask;
4891         int i;
4892         h = GetCurrentProcess();
4893         if (GetProcessAffinityMask(h, &mask, &smask)) {
4894             for(i = 0; i < 32; i++) {
4895                 if (mask & (1 << i))
4896                     break;
4897             }
4898             if (i != 32) {
4899                 mask = 1 << i;
4900                 SetProcessAffinityMask(h, mask);
4901             }
4902         }
4903     }
4904 #endif
4905
4906     module_call_init(MODULE_INIT_MACHINE);
4907     machine = find_default_machine();
4908     cpu_model = NULL;
4909     initrd_filename = NULL;
4910     ram_size = 0;
4911     snapshot = 0;
4912     kernel_filename = NULL;
4913     kernel_cmdline = "";
4914     cyls = heads = secs = 0;
4915     translation = BIOS_ATA_TRANSLATION_AUTO;
4916     monitor_device = "vc:80Cx24C";
4917
4918     serial_devices[0] = "vc:80Cx24C";
4919     for(i = 1; i < MAX_SERIAL_PORTS; i++)
4920         serial_devices[i] = NULL;
4921     serial_device_index = 0;
4922
4923     parallel_devices[0] = "vc:80Cx24C";
4924     for(i = 1; i < MAX_PARALLEL_PORTS; i++)
4925         parallel_devices[i] = NULL;
4926     parallel_device_index = 0;
4927
4928     for(i = 0; i < MAX_VIRTIO_CONSOLES; i++)
4929         virtio_consoles[i] = NULL;
4930     virtio_console_index = 0;
4931
4932     for (i = 0; i < MAX_NODES; i++) {
4933         node_mem[i] = 0;
4934         node_cpumask[i] = 0;
4935     }
4936
4937     nb_net_clients = 0;
4938     nb_numa_nodes = 0;
4939     nb_nics = 0;
4940
4941     tb_size = 0;
4942     autostart= 1;
4943
4944     register_watchdogs();
4945
4946     optind = 1;
4947     for(;;) {
4948         if (optind >= argc)
4949             break;
4950         r = argv[optind];
4951         if (r[0] != '-') {
4952             hda_opts = drive_add(argv[optind++], HD_ALIAS, 0);
4953         } else {
4954             const QEMUOption *popt;
4955
4956             optind++;
4957             /* Treat --foo the same as -foo.  */
4958             if (r[1] == '-')
4959                 r++;
4960             popt = qemu_options;
4961             for(;;) {
4962                 if (!popt->name) {
4963                     fprintf(stderr, "%s: invalid option -- '%s'\n",
4964                             argv[0], r);
4965                     exit(1);
4966                 }
4967                 if (!strcmp(popt->name, r + 1))
4968                     break;
4969                 popt++;
4970             }
4971             if (popt->flags & HAS_ARG) {
4972                 if (optind >= argc) {
4973                     fprintf(stderr, "%s: option '%s' requires an argument\n",
4974                             argv[0], r);
4975                     exit(1);
4976                 }
4977                 optarg = argv[optind++];
4978             } else {
4979                 optarg = NULL;
4980             }
4981
4982             switch(popt->index) {
4983             case QEMU_OPTION_M:
4984                 machine = find_machine(optarg);
4985                 if (!machine) {
4986                     QEMUMachine *m;
4987                     printf("Supported machines are:\n");
4988                     for(m = first_machine; m != NULL; m = m->next) {
4989                         if (m->alias)
4990                             printf("%-10s %s (alias of %s)\n",
4991                                    m->alias, m->desc, m->name);
4992                         printf("%-10s %s%s\n",
4993                                m->name, m->desc,
4994                                m->is_default ? " (default)" : "");
4995                     }
4996                     exit(*optarg != '?');
4997                 }
4998                 break;
4999             case QEMU_OPTION_cpu:
5000                 /* hw initialization will check this */
5001                 if (*optarg == '?') {
5002 /* XXX: implement xxx_cpu_list for targets that still miss it */
5003 #if defined(cpu_list)
5004                     cpu_list(stdout, &fprintf);
5005 #endif
5006                     exit(0);
5007                 } else {
5008                     cpu_model = optarg;
5009                 }
5010                 break;
5011             case QEMU_OPTION_initrd:
5012                 initrd_filename = optarg;
5013                 break;
5014             case QEMU_OPTION_hda:
5015                 if (cyls == 0)
5016                     hda_opts = drive_add(optarg, HD_ALIAS, 0);
5017                 else
5018                     hda_opts = drive_add(optarg, HD_ALIAS
5019                              ",cyls=%d,heads=%d,secs=%d%s",
5020                              0, cyls, heads, secs,
5021                              translation == BIOS_ATA_TRANSLATION_LBA ?
5022                                  ",trans=lba" :
5023                              translation == BIOS_ATA_TRANSLATION_NONE ?
5024                                  ",trans=none" : "");
5025                  break;
5026             case QEMU_OPTION_hdb:
5027             case QEMU_OPTION_hdc:
5028             case QEMU_OPTION_hdd:
5029                 drive_add(optarg, HD_ALIAS, popt->index - QEMU_OPTION_hda);
5030                 break;
5031             case QEMU_OPTION_drive:
5032                 drive_add(NULL, "%s", optarg);
5033                 break;
5034             case QEMU_OPTION_mtdblock:
5035                 drive_add(optarg, MTD_ALIAS);
5036                 break;
5037             case QEMU_OPTION_sd:
5038                 drive_add(optarg, SD_ALIAS);
5039                 break;
5040             case QEMU_OPTION_pflash:
5041                 drive_add(optarg, PFLASH_ALIAS);
5042                 break;
5043             case QEMU_OPTION_snapshot:
5044                 snapshot = 1;
5045                 break;
5046             case QEMU_OPTION_hdachs:
5047                 {
5048                     const char *p;
5049                     p = optarg;
5050                     cyls = strtol(p, (char **)&p, 0);
5051                     if (cyls < 1 || cyls > 16383)
5052                         goto chs_fail;
5053                     if (*p != ',')
5054                         goto chs_fail;
5055                     p++;
5056                     heads = strtol(p, (char **)&p, 0);
5057                     if (heads < 1 || heads > 16)
5058                         goto chs_fail;
5059                     if (*p != ',')
5060                         goto chs_fail;
5061                     p++;
5062                     secs = strtol(p, (char **)&p, 0);
5063                     if (secs < 1 || secs > 63)
5064                         goto chs_fail;
5065                     if (*p == ',') {
5066                         p++;
5067                         if (!strcmp(p, "none"))
5068                             translation = BIOS_ATA_TRANSLATION_NONE;
5069                         else if (!strcmp(p, "lba"))
5070                             translation = BIOS_ATA_TRANSLATION_LBA;
5071                         else if (!strcmp(p, "auto"))
5072                             translation = BIOS_ATA_TRANSLATION_AUTO;
5073                         else
5074                             goto chs_fail;
5075                     } else if (*p != '\0') {
5076                     chs_fail:
5077                         fprintf(stderr, "qemu: invalid physical CHS format\n");
5078                         exit(1);
5079                     }
5080                     if (hda_opts != NULL) {
5081                         char num[16];
5082                         snprintf(num, sizeof(num), "%d", cyls);
5083                         qemu_opt_set(hda_opts, "cyls", num);
5084                         snprintf(num, sizeof(num), "%d", heads);
5085                         qemu_opt_set(hda_opts, "heads", num);
5086                         snprintf(num, sizeof(num), "%d", secs);
5087                         qemu_opt_set(hda_opts, "secs", num);
5088                         if (translation == BIOS_ATA_TRANSLATION_LBA)
5089                             qemu_opt_set(hda_opts, "trans", "lba");
5090                         if (translation == BIOS_ATA_TRANSLATION_NONE)
5091                             qemu_opt_set(hda_opts, "trans", "none");
5092                     }
5093                 }
5094                 break;
5095             case QEMU_OPTION_numa:
5096                 if (nb_numa_nodes >= MAX_NODES) {
5097                     fprintf(stderr, "qemu: too many NUMA nodes\n");
5098                     exit(1);
5099                 }
5100                 numa_add(optarg);
5101                 break;
5102             case QEMU_OPTION_nographic:
5103                 display_type = DT_NOGRAPHIC;
5104                 break;
5105 #ifdef CONFIG_CURSES
5106             case QEMU_OPTION_curses:
5107                 display_type = DT_CURSES;
5108                 break;
5109 #endif
5110             case QEMU_OPTION_portrait:
5111                 graphic_rotate = 1;
5112                 break;
5113             case QEMU_OPTION_kernel:
5114                 kernel_filename = optarg;
5115                 break;
5116             case QEMU_OPTION_append:
5117                 kernel_cmdline = optarg;
5118                 break;
5119             case QEMU_OPTION_cdrom:
5120                 drive_add(optarg, CDROM_ALIAS);
5121                 break;
5122             case QEMU_OPTION_boot:
5123                 {
5124                     static const char * const params[] = {
5125                         "order", "once", "menu", NULL
5126                     };
5127                     char buf[sizeof(boot_devices)];
5128                     char *standard_boot_devices;
5129                     int legacy = 0;
5130
5131                     if (!strchr(optarg, '=')) {
5132                         legacy = 1;
5133                         pstrcpy(buf, sizeof(buf), optarg);
5134                     } else if (check_params(buf, sizeof(buf), params, optarg) < 0) {
5135                         fprintf(stderr,
5136                                 "qemu: unknown boot parameter '%s' in '%s'\n",
5137                                 buf, optarg);
5138                         exit(1);
5139                     }
5140
5141                     if (legacy ||
5142                         get_param_value(buf, sizeof(buf), "order", optarg)) {
5143                         boot_devices_bitmap = parse_bootdevices(buf);
5144                         pstrcpy(boot_devices, sizeof(boot_devices), buf);
5145                     }
5146                     if (!legacy) {
5147                         if (get_param_value(buf, sizeof(buf),
5148                                             "once", optarg)) {
5149                             boot_devices_bitmap |= parse_bootdevices(buf);
5150                             standard_boot_devices = qemu_strdup(boot_devices);
5151                             pstrcpy(boot_devices, sizeof(boot_devices), buf);
5152                             qemu_register_reset(restore_boot_devices,
5153                                                 standard_boot_devices);
5154                         }
5155                         if (get_param_value(buf, sizeof(buf),
5156                                             "menu", optarg)) {
5157                             if (!strcmp(buf, "on")) {
5158                                 boot_menu = 1;
5159                             } else if (!strcmp(buf, "off")) {
5160                                 boot_menu = 0;
5161                             } else {
5162                                 fprintf(stderr,
5163                                         "qemu: invalid option value '%s'\n",
5164                                         buf);
5165                                 exit(1);
5166                             }
5167                         }
5168                     }
5169                 }
5170                 break;
5171             case QEMU_OPTION_fda:
5172             case QEMU_OPTION_fdb:
5173                 drive_add(optarg, FD_ALIAS, popt->index - QEMU_OPTION_fda);
5174                 break;
5175 #ifdef TARGET_I386
5176             case QEMU_OPTION_no_fd_bootchk:
5177                 fd_bootchk = 0;
5178                 break;
5179 #endif
5180             case QEMU_OPTION_net:
5181                 if (nb_net_clients >= MAX_NET_CLIENTS) {
5182                     fprintf(stderr, "qemu: too many network clients\n");
5183                     exit(1);
5184                 }
5185                 net_clients[nb_net_clients] = optarg;
5186                 nb_net_clients++;
5187                 break;
5188 #ifdef CONFIG_SLIRP
5189             case QEMU_OPTION_tftp:
5190                 legacy_tftp_prefix = optarg;
5191                 break;
5192             case QEMU_OPTION_bootp:
5193                 legacy_bootp_filename = optarg;
5194                 break;
5195 #ifndef _WIN32
5196             case QEMU_OPTION_smb:
5197                 net_slirp_smb(optarg);
5198                 break;
5199 #endif
5200             case QEMU_OPTION_redir:
5201                 net_slirp_redir(optarg);
5202                 break;
5203 #endif
5204             case QEMU_OPTION_bt:
5205                 add_device_config(DEV_BT, optarg);
5206                 break;
5207 #ifdef HAS_AUDIO
5208             case QEMU_OPTION_audio_help:
5209                 AUD_help ();
5210                 exit (0);
5211                 break;
5212             case QEMU_OPTION_soundhw:
5213                 select_soundhw (optarg);
5214                 break;
5215 #endif
5216             case QEMU_OPTION_h:
5217                 help(0);
5218                 break;
5219             case QEMU_OPTION_version:
5220                 version();
5221                 exit(0);
5222                 break;
5223             case QEMU_OPTION_m: {
5224                 uint64_t value;
5225                 char *ptr;
5226
5227                 value = strtoul(optarg, &ptr, 10);
5228                 switch (*ptr) {
5229                 case 0: case 'M': case 'm':
5230                     value <<= 20;
5231                     break;
5232                 case 'G': case 'g':
5233                     value <<= 30;
5234                     break;
5235                 default:
5236                     fprintf(stderr, "qemu: invalid ram size: %s\n", optarg);
5237                     exit(1);
5238                 }
5239
5240                 /* On 32-bit hosts, QEMU is limited by virtual address space */
5241                 if (value > (2047 << 20)
5242 #ifndef CONFIG_KQEMU
5243                     && HOST_LONG_BITS == 32
5244 #endif
5245                     ) {
5246                     fprintf(stderr, "qemu: at most 2047 MB RAM can be simulated\n");
5247                     exit(1);
5248                 }
5249                 if (value != (uint64_t)(ram_addr_t)value) {
5250                     fprintf(stderr, "qemu: ram size too large\n");
5251                     exit(1);
5252                 }
5253                 ram_size = value;
5254                 break;
5255             }
5256             case QEMU_OPTION_d:
5257                 {
5258                     int mask;
5259                     const CPULogItem *item;
5260
5261                     mask = cpu_str_to_log_mask(optarg);
5262                     if (!mask) {
5263                         printf("Log items (comma separated):\n");
5264                     for(item = cpu_log_items; item->mask != 0; item++) {
5265                         printf("%-10s %s\n", item->name, item->help);
5266                     }
5267                     exit(1);
5268                     }
5269                     cpu_set_log(mask);
5270                 }
5271                 break;
5272             case QEMU_OPTION_s:
5273                 gdbstub_dev = "tcp::" DEFAULT_GDBSTUB_PORT;
5274                 break;
5275             case QEMU_OPTION_gdb:
5276                 gdbstub_dev = optarg;
5277                 break;
5278             case QEMU_OPTION_L:
5279                 data_dir = optarg;
5280                 break;
5281             case QEMU_OPTION_bios:
5282                 bios_name = optarg;
5283                 break;
5284             case QEMU_OPTION_singlestep:
5285                 singlestep = 1;
5286                 break;
5287             case QEMU_OPTION_S:
5288                 autostart = 0;
5289                 break;
5290 #ifndef _WIN32
5291             case QEMU_OPTION_k:
5292                 keyboard_layout = optarg;
5293                 break;
5294 #endif
5295             case QEMU_OPTION_localtime:
5296                 rtc_utc = 0;
5297                 break;
5298             case QEMU_OPTION_vga:
5299                 select_vgahw (optarg);
5300                 break;
5301 #if defined(TARGET_PPC) || defined(TARGET_SPARC)
5302             case QEMU_OPTION_g:
5303                 {
5304                     const char *p;
5305                     int w, h, depth;
5306                     p = optarg;
5307                     w = strtol(p, (char **)&p, 10);
5308                     if (w <= 0) {
5309                     graphic_error:
5310                         fprintf(stderr, "qemu: invalid resolution or depth\n");
5311                         exit(1);
5312                     }
5313                     if (*p != 'x')
5314                         goto graphic_error;
5315                     p++;
5316                     h = strtol(p, (char **)&p, 10);
5317                     if (h <= 0)
5318                         goto graphic_error;
5319                     if (*p == 'x') {
5320                         p++;
5321                         depth = strtol(p, (char **)&p, 10);
5322                         if (depth != 8 && depth != 15 && depth != 16 &&
5323                             depth != 24 && depth != 32)
5324                             goto graphic_error;
5325                     } else if (*p == '\0') {
5326                         depth = graphic_depth;
5327                     } else {
5328                         goto graphic_error;
5329                     }
5330
5331                     graphic_width = w;
5332                     graphic_height = h;
5333                     graphic_depth = depth;
5334                 }
5335                 break;
5336 #endif
5337             case QEMU_OPTION_echr:
5338                 {
5339                     char *r;
5340                     term_escape_char = strtol(optarg, &r, 0);
5341                     if (r == optarg)
5342                         printf("Bad argument to echr\n");
5343                     break;
5344                 }
5345             case QEMU_OPTION_monitor:
5346                 monitor_device = optarg;
5347                 break;
5348             case QEMU_OPTION_serial:
5349                 if (serial_device_index >= MAX_SERIAL_PORTS) {
5350                     fprintf(stderr, "qemu: too many serial ports\n");
5351                     exit(1);
5352                 }
5353                 serial_devices[serial_device_index] = optarg;
5354                 serial_device_index++;
5355                 break;
5356             case QEMU_OPTION_watchdog:
5357                 i = select_watchdog(optarg);
5358                 if (i > 0)
5359                     exit (i == 1 ? 1 : 0);
5360                 break;
5361             case QEMU_OPTION_watchdog_action:
5362                 if (select_watchdog_action(optarg) == -1) {
5363                     fprintf(stderr, "Unknown -watchdog-action parameter\n");
5364                     exit(1);
5365                 }
5366                 break;
5367             case QEMU_OPTION_virtiocon:
5368                 if (virtio_console_index >= MAX_VIRTIO_CONSOLES) {
5369                     fprintf(stderr, "qemu: too many virtio consoles\n");
5370                     exit(1);
5371                 }
5372                 virtio_consoles[virtio_console_index] = optarg;
5373                 virtio_console_index++;
5374                 break;
5375             case QEMU_OPTION_parallel:
5376                 if (parallel_device_index >= MAX_PARALLEL_PORTS) {
5377                     fprintf(stderr, "qemu: too many parallel ports\n");
5378                     exit(1);
5379                 }
5380                 parallel_devices[parallel_device_index] = optarg;
5381                 parallel_device_index++;
5382                 break;
5383             case QEMU_OPTION_loadvm:
5384                 loadvm = optarg;
5385                 break;
5386             case QEMU_OPTION_full_screen:
5387                 full_screen = 1;
5388                 break;
5389 #ifdef CONFIG_SDL
5390             case QEMU_OPTION_no_frame:
5391                 no_frame = 1;
5392                 break;
5393             case QEMU_OPTION_alt_grab:
5394                 alt_grab = 1;
5395                 break;
5396             case QEMU_OPTION_no_quit:
5397                 no_quit = 1;
5398                 break;
5399             case QEMU_OPTION_sdl:
5400                 display_type = DT_SDL;
5401                 break;
5402 #endif
5403             case QEMU_OPTION_pidfile:
5404                 pid_file = optarg;
5405                 break;
5406 #ifdef TARGET_I386
5407             case QEMU_OPTION_win2k_hack:
5408                 win2k_install_hack = 1;
5409                 break;
5410             case QEMU_OPTION_rtc_td_hack:
5411                 rtc_td_hack = 1;
5412                 break;
5413             case QEMU_OPTION_acpitable:
5414                 if(acpi_table_add(optarg) < 0) {
5415                     fprintf(stderr, "Wrong acpi table provided\n");
5416                     exit(1);
5417                 }
5418                 break;
5419             case QEMU_OPTION_smbios:
5420                 if(smbios_entry_add(optarg) < 0) {
5421                     fprintf(stderr, "Wrong smbios provided\n");
5422                     exit(1);
5423                 }
5424                 break;
5425 #endif
5426 #ifdef CONFIG_KQEMU
5427             case QEMU_OPTION_enable_kqemu:
5428                 kqemu_allowed = 1;
5429                 break;
5430             case QEMU_OPTION_kernel_kqemu:
5431                 kqemu_allowed = 2;
5432                 break;
5433 #endif
5434 #ifdef CONFIG_KVM
5435             case QEMU_OPTION_enable_kvm:
5436                 kvm_allowed = 1;
5437 #ifdef CONFIG_KQEMU
5438                 kqemu_allowed = 0;
5439 #endif
5440                 break;
5441 #endif
5442             case QEMU_OPTION_usb:
5443                 usb_enabled = 1;
5444                 break;
5445             case QEMU_OPTION_usbdevice:
5446                 usb_enabled = 1;
5447                 add_device_config(DEV_USB, optarg);
5448                 break;
5449             case QEMU_OPTION_device:
5450                 add_device_config(DEV_GENERIC, optarg);
5451                 break;
5452             case QEMU_OPTION_smp:
5453             {
5454                 char *p;
5455                 char option[128];
5456                 smp_cpus = strtol(optarg, &p, 10);
5457                 if (smp_cpus < 1) {
5458                     fprintf(stderr, "Invalid number of CPUs\n");
5459                     exit(1);
5460                 }
5461                 if (*p++ != ',')
5462                     break;
5463                 if (get_param_value(option, 128, "maxcpus", p))
5464                     max_cpus = strtol(option, NULL, 0);
5465                 if (max_cpus < smp_cpus) {
5466                     fprintf(stderr, "maxcpus must be equal to or greater than "
5467                             "smp\n");
5468                     exit(1);
5469                 }
5470                 if (max_cpus > 255) {
5471                     fprintf(stderr, "Unsupported number of maxcpus\n");
5472                     exit(1);
5473                 }
5474                 break;
5475             }
5476             case QEMU_OPTION_vnc:
5477                 display_type = DT_VNC;
5478                 vnc_display = optarg;
5479                 break;
5480 #ifdef TARGET_I386
5481             case QEMU_OPTION_no_acpi:
5482                 acpi_enabled = 0;
5483                 break;
5484             case QEMU_OPTION_no_hpet:
5485                 no_hpet = 1;
5486                 break;
5487             case QEMU_OPTION_balloon:
5488                 if (balloon_parse(optarg) < 0) {
5489                     fprintf(stderr, "Unknown -balloon argument %s\n", optarg);
5490                     exit(1);
5491                 }
5492                 break;
5493 #endif
5494             case QEMU_OPTION_no_reboot:
5495                 no_reboot = 1;
5496                 break;
5497             case QEMU_OPTION_no_shutdown:
5498                 no_shutdown = 1;
5499                 break;
5500             case QEMU_OPTION_show_cursor:
5501                 cursor_hide = 0;
5502                 break;
5503             case QEMU_OPTION_uuid:
5504                 if(qemu_uuid_parse(optarg, qemu_uuid) < 0) {
5505                     fprintf(stderr, "Fail to parse UUID string."
5506                             " Wrong format.\n");
5507                     exit(1);
5508                 }
5509                 break;
5510 #ifndef _WIN32
5511             case QEMU_OPTION_daemonize:
5512                 daemonize = 1;
5513                 break;
5514 #endif
5515             case QEMU_OPTION_option_rom:
5516                 if (nb_option_roms >= MAX_OPTION_ROMS) {
5517                     fprintf(stderr, "Too many option ROMs\n");
5518                     exit(1);
5519                 }
5520                 option_rom[nb_option_roms] = optarg;
5521                 nb_option_roms++;
5522                 break;
5523 #if defined(TARGET_ARM) || defined(TARGET_M68K)
5524             case QEMU_OPTION_semihosting:
5525                 semihosting_enabled = 1;
5526                 break;
5527 #endif
5528             case QEMU_OPTION_name:
5529                 qemu_name = qemu_strdup(optarg);
5530                  {
5531                      char *p = strchr(qemu_name, ',');
5532                      if (p != NULL) {
5533                         *p++ = 0;
5534                         if (strncmp(p, "process=", 8)) {
5535                             fprintf(stderr, "Unknown subargument %s to -name", p);
5536                             exit(1);
5537                         }
5538                         p += 8;
5539                         set_proc_name(p);
5540                      }  
5541                  }      
5542                 break;
5543 #if defined(TARGET_SPARC) || defined(TARGET_PPC)
5544             case QEMU_OPTION_prom_env:
5545                 if (nb_prom_envs >= MAX_PROM_ENVS) {
5546                     fprintf(stderr, "Too many prom variables\n");
5547                     exit(1);
5548                 }
5549                 prom_envs[nb_prom_envs] = optarg;
5550                 nb_prom_envs++;
5551                 break;
5552 #endif
5553 #ifdef TARGET_ARM
5554             case QEMU_OPTION_old_param:
5555                 old_param = 1;
5556                 break;
5557 #endif
5558             case QEMU_OPTION_clock:
5559                 configure_alarms(optarg);
5560                 break;
5561             case QEMU_OPTION_startdate:
5562                 {
5563                     struct tm tm;
5564                     time_t rtc_start_date;
5565                     if (!strcmp(optarg, "now")) {
5566                         rtc_date_offset = -1;
5567                     } else {
5568                         if (sscanf(optarg, "%d-%d-%dT%d:%d:%d",
5569                                &tm.tm_year,
5570                                &tm.tm_mon,
5571                                &tm.tm_mday,
5572                                &tm.tm_hour,
5573                                &tm.tm_min,
5574                                &tm.tm_sec) == 6) {
5575                             /* OK */
5576                         } else if (sscanf(optarg, "%d-%d-%d",
5577                                           &tm.tm_year,
5578                                           &tm.tm_mon,
5579                                           &tm.tm_mday) == 3) {
5580                             tm.tm_hour = 0;
5581                             tm.tm_min = 0;
5582                             tm.tm_sec = 0;
5583                         } else {
5584                             goto date_fail;
5585                         }
5586                         tm.tm_year -= 1900;
5587                         tm.tm_mon--;
5588                         rtc_start_date = mktimegm(&tm);
5589                         if (rtc_start_date == -1) {
5590                         date_fail:
5591                             fprintf(stderr, "Invalid date format. Valid format are:\n"
5592                                     "'now' or '2006-06-17T16:01:21' or '2006-06-17'\n");
5593                             exit(1);
5594                         }
5595                         rtc_date_offset = time(NULL) - rtc_start_date;
5596                     }
5597                 }
5598                 break;
5599             case QEMU_OPTION_tb_size:
5600                 tb_size = strtol(optarg, NULL, 0);
5601                 if (tb_size < 0)
5602                     tb_size = 0;
5603                 break;
5604             case QEMU_OPTION_icount:
5605                 use_icount = 1;
5606                 if (strcmp(optarg, "auto") == 0) {
5607                     icount_time_shift = -1;
5608                 } else {
5609                     icount_time_shift = strtol(optarg, NULL, 0);
5610                 }
5611                 break;
5612             case QEMU_OPTION_incoming:
5613                 incoming = optarg;
5614                 break;
5615 #ifndef _WIN32
5616             case QEMU_OPTION_chroot:
5617                 chroot_dir = optarg;
5618                 break;
5619             case QEMU_OPTION_runas:
5620                 run_as = optarg;
5621                 break;
5622 #endif
5623 #ifdef CONFIG_XEN
5624             case QEMU_OPTION_xen_domid:
5625                 xen_domid = atoi(optarg);
5626                 break;
5627             case QEMU_OPTION_xen_create:
5628                 xen_mode = XEN_CREATE;
5629                 break;
5630             case QEMU_OPTION_xen_attach:
5631                 xen_mode = XEN_ATTACH;
5632                 break;
5633 #endif
5634             }
5635         }
5636     }
5637
5638     /* If no data_dir is specified then try to find it relative to the
5639        executable path.  */
5640     if (!data_dir) {
5641         data_dir = find_datadir(argv[0]);
5642     }
5643     /* If all else fails use the install patch specified when building.  */
5644     if (!data_dir) {
5645         data_dir = CONFIG_QEMU_SHAREDIR;
5646     }
5647
5648 #if defined(CONFIG_KVM) && defined(CONFIG_KQEMU)
5649     if (kvm_allowed && kqemu_allowed) {
5650         fprintf(stderr,
5651                 "You can not enable both KVM and kqemu at the same time\n");
5652         exit(1);
5653     }
5654 #endif
5655
5656     /*
5657      * Default to max_cpus = smp_cpus, in case the user doesn't
5658      * specify a max_cpus value.
5659      */
5660     if (!max_cpus)
5661         max_cpus = smp_cpus;
5662
5663     machine->max_cpus = machine->max_cpus ?: 1; /* Default to UP */
5664     if (smp_cpus > machine->max_cpus) {
5665         fprintf(stderr, "Number of SMP cpus requested (%d), exceeds max cpus "
5666                 "supported by machine `%s' (%d)\n", smp_cpus,  machine->name,
5667                 machine->max_cpus);
5668         exit(1);
5669     }
5670
5671     if (display_type == DT_NOGRAPHIC) {
5672        if (serial_device_index == 0)
5673            serial_devices[0] = "stdio";
5674        if (parallel_device_index == 0)
5675            parallel_devices[0] = "null";
5676        if (strncmp(monitor_device, "vc", 2) == 0)
5677            monitor_device = "stdio";
5678     }
5679
5680 #ifndef _WIN32
5681     if (daemonize) {
5682         pid_t pid;
5683
5684         if (pipe(fds) == -1)
5685             exit(1);
5686
5687         pid = fork();
5688         if (pid > 0) {
5689             uint8_t status;
5690             ssize_t len;
5691
5692             close(fds[1]);
5693
5694         again:
5695             len = read(fds[0], &status, 1);
5696             if (len == -1 && (errno == EINTR))
5697                 goto again;
5698
5699             if (len != 1)
5700                 exit(1);
5701             else if (status == 1) {
5702                 fprintf(stderr, "Could not acquire pidfile\n");
5703                 exit(1);
5704             } else
5705                 exit(0);
5706         } else if (pid < 0)
5707             exit(1);
5708
5709         setsid();
5710
5711         pid = fork();
5712         if (pid > 0)
5713             exit(0);
5714         else if (pid < 0)
5715             exit(1);
5716
5717         umask(027);
5718
5719         signal(SIGTSTP, SIG_IGN);
5720         signal(SIGTTOU, SIG_IGN);
5721         signal(SIGTTIN, SIG_IGN);
5722     }
5723
5724     if (pid_file && qemu_create_pidfile(pid_file) != 0) {
5725         if (daemonize) {
5726             uint8_t status = 1;
5727             write(fds[1], &status, 1);
5728         } else
5729             fprintf(stderr, "Could not acquire pid file\n");
5730         exit(1);
5731     }
5732 #endif
5733
5734 #ifdef CONFIG_KQEMU
5735     if (smp_cpus > 1)
5736         kqemu_allowed = 0;
5737 #endif
5738     if (qemu_init_main_loop()) {
5739         fprintf(stderr, "qemu_init_main_loop failed\n");
5740         exit(1);
5741     }
5742     linux_boot = (kernel_filename != NULL);
5743
5744     if (!linux_boot && *kernel_cmdline != '\0') {
5745         fprintf(stderr, "-append only allowed with -kernel option\n");
5746         exit(1);
5747     }
5748
5749     if (!linux_boot && initrd_filename != NULL) {
5750         fprintf(stderr, "-initrd only allowed with -kernel option\n");
5751         exit(1);
5752     }
5753
5754 #ifndef _WIN32
5755     /* Win32 doesn't support line-buffering and requires size >= 2 */
5756     setvbuf(stdout, NULL, _IOLBF, 0);
5757 #endif
5758
5759     init_timers();
5760     if (init_timer_alarm() < 0) {
5761         fprintf(stderr, "could not initialize alarm timer\n");
5762         exit(1);
5763     }
5764     if (use_icount && icount_time_shift < 0) {
5765         use_icount = 2;
5766         /* 125MIPS seems a reasonable initial guess at the guest speed.
5767            It will be corrected fairly quickly anyway.  */
5768         icount_time_shift = 3;
5769         init_icount_adjust();
5770     }
5771
5772 #ifdef _WIN32
5773     socket_init();
5774 #endif
5775
5776     /* init network clients */
5777     if (nb_net_clients == 0) {
5778         /* if no clients, we use a default config */
5779         net_clients[nb_net_clients++] = "nic";
5780 #ifdef CONFIG_SLIRP
5781         net_clients[nb_net_clients++] = "user";
5782 #endif
5783     }
5784
5785     for(i = 0;i < nb_net_clients; i++) {
5786         if (net_client_parse(net_clients[i]) < 0)
5787             exit(1);
5788     }
5789
5790     net_boot = (boot_devices_bitmap >> ('n' - 'a')) & 0xF;
5791     net_set_boot_mask(net_boot);
5792
5793     net_client_check();
5794
5795     /* init the bluetooth world */
5796     if (foreach_device_config(DEV_BT, bt_parse))
5797         exit(1);
5798
5799     /* init the memory */
5800     if (ram_size == 0)
5801         ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
5802
5803 #ifdef CONFIG_KQEMU
5804     /* FIXME: This is a nasty hack because kqemu can't cope with dynamic
5805        guest ram allocation.  It needs to go away.  */
5806     if (kqemu_allowed) {
5807         kqemu_phys_ram_size = ram_size + 8 * 1024 * 1024 + 4 * 1024 * 1024;
5808         kqemu_phys_ram_base = qemu_vmalloc(kqemu_phys_ram_size);
5809         if (!kqemu_phys_ram_base) {
5810             fprintf(stderr, "Could not allocate physical memory\n");
5811             exit(1);
5812         }
5813     }
5814 #endif
5815
5816     /* init the dynamic translator */
5817     cpu_exec_init_all(tb_size * 1024 * 1024);
5818
5819     bdrv_init();
5820
5821     /* we always create the cdrom drive, even if no disk is there */
5822     drive_add(NULL, CDROM_ALIAS);
5823
5824     /* we always create at least one floppy */
5825     drive_add(NULL, FD_ALIAS, 0);
5826
5827     /* we always create one sd slot, even if no card is in it */
5828     drive_add(NULL, SD_ALIAS);
5829
5830     /* open the virtual block devices */
5831     if (snapshot)
5832         qemu_opts_foreach(&drive_opt_list, drive_enable_snapshot, NULL, 0);
5833     if (qemu_opts_foreach(&drive_opt_list, drive_init_func, machine, 1) != 0)
5834         exit(1);
5835
5836     register_savevm("timer", 0, 2, timer_save, timer_load, NULL);
5837     register_savevm_live("ram", 0, 3, ram_save_live, NULL, ram_load, NULL);
5838
5839 #ifndef _WIN32
5840     /* must be after terminal init, SDL library changes signal handlers */
5841     sighandler_setup();
5842 #endif
5843
5844     /* Maintain compatibility with multiple stdio monitors */
5845     if (!strcmp(monitor_device,"stdio")) {
5846         for (i = 0; i < MAX_SERIAL_PORTS; i++) {
5847             const char *devname = serial_devices[i];
5848             if (devname && !strcmp(devname,"mon:stdio")) {
5849                 monitor_device = NULL;
5850                 break;
5851             } else if (devname && !strcmp(devname,"stdio")) {
5852                 monitor_device = NULL;
5853                 serial_devices[i] = "mon:stdio";
5854                 break;
5855             }
5856         }
5857     }
5858
5859     if (nb_numa_nodes > 0) {
5860         int i;
5861
5862         if (nb_numa_nodes > smp_cpus) {
5863             nb_numa_nodes = smp_cpus;
5864         }
5865
5866         /* If no memory size if given for any node, assume the default case
5867          * and distribute the available memory equally across all nodes
5868          */
5869         for (i = 0; i < nb_numa_nodes; i++) {
5870             if (node_mem[i] != 0)
5871                 break;
5872         }
5873         if (i == nb_numa_nodes) {
5874             uint64_t usedmem = 0;
5875
5876             /* On Linux, the each node's border has to be 8MB aligned,
5877              * the final node gets the rest.
5878              */
5879             for (i = 0; i < nb_numa_nodes - 1; i++) {
5880                 node_mem[i] = (ram_size / nb_numa_nodes) & ~((1 << 23UL) - 1);
5881                 usedmem += node_mem[i];
5882             }
5883             node_mem[i] = ram_size - usedmem;
5884         }
5885
5886         for (i = 0; i < nb_numa_nodes; i++) {
5887             if (node_cpumask[i] != 0)
5888                 break;
5889         }
5890         /* assigning the VCPUs round-robin is easier to implement, guest OSes
5891          * must cope with this anyway, because there are BIOSes out there in
5892          * real machines which also use this scheme.
5893          */
5894         if (i == nb_numa_nodes) {
5895             for (i = 0; i < smp_cpus; i++) {
5896                 node_cpumask[i % nb_numa_nodes] |= 1 << i;
5897             }
5898         }
5899     }
5900
5901     if (kvm_enabled()) {
5902         int ret;
5903
5904         ret = kvm_init(smp_cpus);
5905         if (ret < 0) {
5906             fprintf(stderr, "failed to initialize KVM\n");
5907             exit(1);
5908         }
5909     }
5910
5911     if (monitor_device) {
5912         monitor_hd = qemu_chr_open("monitor", monitor_device, NULL);
5913         if (!monitor_hd) {
5914             fprintf(stderr, "qemu: could not open monitor device '%s'\n", monitor_device);
5915             exit(1);
5916         }
5917     }
5918
5919     for(i = 0; i < MAX_SERIAL_PORTS; i++) {
5920         const char *devname = serial_devices[i];
5921         if (devname && strcmp(devname, "none")) {
5922             char label[32];
5923             snprintf(label, sizeof(label), "serial%d", i);
5924             serial_hds[i] = qemu_chr_open(label, devname, NULL);
5925             if (!serial_hds[i]) {
5926                 fprintf(stderr, "qemu: could not open serial device '%s'\n",
5927                         devname);
5928                 exit(1);
5929             }
5930         }
5931     }
5932
5933     for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
5934         const char *devname = parallel_devices[i];
5935         if (devname && strcmp(devname, "none")) {
5936             char label[32];
5937             snprintf(label, sizeof(label), "parallel%d", i);
5938             parallel_hds[i] = qemu_chr_open(label, devname, NULL);
5939             if (!parallel_hds[i]) {
5940                 fprintf(stderr, "qemu: could not open parallel device '%s'\n",
5941                         devname);
5942                 exit(1);
5943             }
5944         }
5945     }
5946
5947     for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
5948         const char *devname = virtio_consoles[i];
5949         if (devname && strcmp(devname, "none")) {
5950             char label[32];
5951             snprintf(label, sizeof(label), "virtcon%d", i);
5952             virtcon_hds[i] = qemu_chr_open(label, devname, NULL);
5953             if (!virtcon_hds[i]) {
5954                 fprintf(stderr, "qemu: could not open virtio console '%s'\n",
5955                         devname);
5956                 exit(1);
5957             }
5958         }
5959     }
5960
5961     module_call_init(MODULE_INIT_DEVICE);
5962
5963     if (machine->compat_props) {
5964         qdev_prop_register_compat(machine->compat_props);
5965     }
5966     machine->init(ram_size, boot_devices,
5967                   kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
5968
5969
5970     for (env = first_cpu; env != NULL; env = env->next_cpu) {
5971         for (i = 0; i < nb_numa_nodes; i++) {
5972             if (node_cpumask[i] & (1 << env->cpu_index)) {
5973                 env->numa_node = i;
5974             }
5975         }
5976     }
5977
5978     current_machine = machine;
5979
5980     /* init USB devices */
5981     if (usb_enabled) {
5982         foreach_device_config(DEV_USB, usb_parse);
5983     }
5984
5985     /* init generic devices */
5986     if (foreach_device_config(DEV_GENERIC, generic_parse))
5987         exit(1);
5988
5989     if (!display_state)
5990         dumb_display_init();
5991     /* just use the first displaystate for the moment */
5992     ds = display_state;
5993
5994     if (display_type == DT_DEFAULT) {
5995 #if defined(CONFIG_SDL) || defined(CONFIG_COCOA)
5996         display_type = DT_SDL;
5997 #else
5998         display_type = DT_VNC;
5999         vnc_display = "localhost:0,to=99";
6000         show_vnc_port = 1;
6001 #endif
6002     }
6003         
6004
6005     switch (display_type) {
6006     case DT_NOGRAPHIC:
6007         break;
6008 #if defined(CONFIG_CURSES)
6009     case DT_CURSES:
6010         curses_display_init(ds, full_screen);
6011         break;
6012 #endif
6013 #if defined(CONFIG_SDL)
6014     case DT_SDL:
6015         sdl_display_init(ds, full_screen, no_frame);
6016         break;
6017 #elif defined(CONFIG_COCOA)
6018     case DT_SDL:
6019         cocoa_display_init(ds, full_screen);
6020         break;
6021 #endif
6022     case DT_VNC:
6023         vnc_display_init(ds);
6024         if (vnc_display_open(ds, vnc_display) < 0)
6025             exit(1);
6026
6027         if (show_vnc_port) {
6028             printf("VNC server running on `%s'\n", vnc_display_local_addr(ds));
6029         }
6030         break;
6031     default:
6032         break;
6033     }
6034     dpy_resize(ds);
6035
6036     dcl = ds->listeners;
6037     while (dcl != NULL) {
6038         if (dcl->dpy_refresh != NULL) {
6039             ds->gui_timer = qemu_new_timer(rt_clock, gui_update, ds);
6040             qemu_mod_timer(ds->gui_timer, qemu_get_clock(rt_clock));
6041         }
6042         dcl = dcl->next;
6043     }
6044
6045     if (display_type == DT_NOGRAPHIC || display_type == DT_VNC) {
6046         nographic_timer = qemu_new_timer(rt_clock, nographic_update, NULL);
6047         qemu_mod_timer(nographic_timer, qemu_get_clock(rt_clock));
6048     }
6049
6050     text_consoles_set_display(display_state);
6051     qemu_chr_initial_reset();
6052
6053     if (monitor_device && monitor_hd)
6054         monitor_init(monitor_hd, MONITOR_USE_READLINE | MONITOR_IS_DEFAULT);
6055
6056     for(i = 0; i < MAX_SERIAL_PORTS; i++) {
6057         const char *devname = serial_devices[i];
6058         if (devname && strcmp(devname, "none")) {
6059             if (strstart(devname, "vc", 0))
6060                 qemu_chr_printf(serial_hds[i], "serial%d console\r\n", i);
6061         }
6062     }
6063
6064     for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
6065         const char *devname = parallel_devices[i];
6066         if (devname && strcmp(devname, "none")) {
6067             if (strstart(devname, "vc", 0))
6068                 qemu_chr_printf(parallel_hds[i], "parallel%d console\r\n", i);
6069         }
6070     }
6071
6072     for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
6073         const char *devname = virtio_consoles[i];
6074         if (virtcon_hds[i] && devname) {
6075             if (strstart(devname, "vc", 0))
6076                 qemu_chr_printf(virtcon_hds[i], "virtio console%d\r\n", i);
6077         }
6078     }
6079
6080     if (gdbstub_dev && gdbserver_start(gdbstub_dev) < 0) {
6081         fprintf(stderr, "qemu: could not open gdbserver on device '%s'\n",
6082                 gdbstub_dev);
6083         exit(1);
6084     }
6085
6086     if (loadvm)
6087         do_loadvm(cur_mon, loadvm);
6088
6089     if (incoming) {
6090         autostart = 0;
6091         qemu_start_incoming_migration(incoming);
6092     }
6093
6094     else if (autostart)
6095         vm_start();
6096
6097 #ifndef _WIN32
6098     if (daemonize) {
6099         uint8_t status = 0;
6100         ssize_t len;
6101
6102     again1:
6103         len = write(fds[1], &status, 1);
6104         if (len == -1 && (errno == EINTR))
6105             goto again1;
6106
6107         if (len != 1)
6108             exit(1);
6109
6110         chdir("/");
6111         TFR(fd = open("/dev/null", O_RDWR));
6112         if (fd == -1)
6113             exit(1);
6114     }
6115
6116     if (run_as) {
6117         pwd = getpwnam(run_as);
6118         if (!pwd) {
6119             fprintf(stderr, "User \"%s\" doesn't exist\n", run_as);
6120             exit(1);
6121         }
6122     }
6123
6124     if (chroot_dir) {
6125         if (chroot(chroot_dir) < 0) {
6126             fprintf(stderr, "chroot failed\n");
6127             exit(1);
6128         }
6129         chdir("/");
6130     }
6131
6132     if (run_as) {
6133         if (setgid(pwd->pw_gid) < 0) {
6134             fprintf(stderr, "Failed to setgid(%d)\n", pwd->pw_gid);
6135             exit(1);
6136         }
6137         if (setuid(pwd->pw_uid) < 0) {
6138             fprintf(stderr, "Failed to setuid(%d)\n", pwd->pw_uid);
6139             exit(1);
6140         }
6141         if (setuid(0) != -1) {
6142             fprintf(stderr, "Dropping privileges failed\n");
6143             exit(1);
6144         }
6145     }
6146
6147     if (daemonize) {
6148         dup2(fd, 0);
6149         dup2(fd, 1);
6150         dup2(fd, 2);
6151
6152         close(fd);
6153     }
6154 #endif
6155
6156     main_loop();
6157     quit_timers();
6158     net_cleanup();
6159
6160     return 0;
6161 }