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