net: Fix -net socket parameter checks
[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/smbios.h"
142 #include "hw/xen.h"
143 #include "bt-host.h"
144 #include "net.h"
145 #include "monitor.h"
146 #include "console.h"
147 #include "sysemu.h"
148 #include "gdbstub.h"
149 #include "qemu-timer.h"
150 #include "qemu-char.h"
151 #include "cache-utils.h"
152 #include "block.h"
153 #include "dma.h"
154 #include "audio/audio.h"
155 #include "migration.h"
156 #include "kvm.h"
157 #include "balloon.h"
158
159 #include "disas.h"
160
161 #include "exec-all.h"
162
163 #include "qemu_socket.h"
164
165 #if defined(CONFIG_SLIRP)
166 #include "libslirp.h"
167 #endif
168
169 //#define DEBUG_UNUSED_IOPORT
170 //#define DEBUG_IOPORT
171 //#define DEBUG_NET
172 //#define DEBUG_SLIRP
173
174
175 #ifdef DEBUG_IOPORT
176 #  define LOG_IOPORT(...) qemu_log_mask(CPU_LOG_IOPORT, ## __VA_ARGS__)
177 #else
178 #  define LOG_IOPORT(...) do { } while (0)
179 #endif
180
181 #define DEFAULT_RAM_SIZE 128
182
183 /* Max number of USB devices that can be specified on the commandline.  */
184 #define MAX_USB_CMDLINE 8
185
186 /* Max number of bluetooth switches on the commandline.  */
187 #define MAX_BT_CMDLINE 10
188
189 /* XXX: use a two level table to limit memory usage */
190 #define MAX_IOPORTS 65536
191
192 const char *bios_dir = CONFIG_QEMU_SHAREDIR;
193 const char *bios_name = NULL;
194 static void *ioport_opaque[MAX_IOPORTS];
195 static IOPortReadFunc *ioport_read_table[3][MAX_IOPORTS];
196 static IOPortWriteFunc *ioport_write_table[3][MAX_IOPORTS];
197 /* Note: drives_table[MAX_DRIVES] is a dummy block driver if none available
198    to store the VM snapshots */
199 DriveInfo drives_table[MAX_DRIVES+1];
200 int nb_drives;
201 static int vga_ram_size;
202 enum vga_retrace_method vga_retrace_method = VGA_RETRACE_DUMB;
203 static DisplayState *display_state;
204 int nographic;
205 static int curses;
206 static int sdl;
207 const char* keyboard_layout = NULL;
208 int64_t ticks_per_sec;
209 ram_addr_t ram_size;
210 int nb_nics;
211 NICInfo nd_table[MAX_NICS];
212 int vm_running;
213 static int autostart;
214 static int rtc_utc = 1;
215 static int rtc_date_offset = -1; /* -1 means no change */
216 int cirrus_vga_enabled = 1;
217 int std_vga_enabled = 0;
218 int vmsvga_enabled = 0;
219 int xenfb_enabled = 0;
220 #ifdef TARGET_SPARC
221 int graphic_width = 1024;
222 int graphic_height = 768;
223 int graphic_depth = 8;
224 #else
225 int graphic_width = 800;
226 int graphic_height = 600;
227 int graphic_depth = 15;
228 #endif
229 static int full_screen = 0;
230 #ifdef CONFIG_SDL
231 static int no_frame = 0;
232 #endif
233 int no_quit = 0;
234 CharDriverState *serial_hds[MAX_SERIAL_PORTS];
235 CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
236 CharDriverState *virtcon_hds[MAX_VIRTIO_CONSOLES];
237 #ifdef TARGET_I386
238 int win2k_install_hack = 0;
239 int rtc_td_hack = 0;
240 #endif
241 int usb_enabled = 0;
242 int singlestep = 0;
243 int smp_cpus = 1;
244 const char *vnc_display;
245 int acpi_enabled = 1;
246 int no_hpet = 0;
247 int fd_bootchk = 1;
248 int no_reboot = 0;
249 int no_shutdown = 0;
250 int cursor_hide = 1;
251 int graphic_rotate = 0;
252 #ifndef _WIN32
253 int daemonize = 0;
254 #endif
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->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         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     ev.sigev_value.sival_int = 0;
1544     ev.sigev_notify = SIGEV_SIGNAL;
1545     ev.sigev_signo = SIGALRM;
1546
1547     if (timer_create(CLOCK_REALTIME, &ev, &host_timer)) {
1548         perror("timer_create");
1549
1550         /* disable dynticks */
1551         fprintf(stderr, "Dynamic Ticks disabled\n");
1552
1553         return -1;
1554     }
1555
1556     t->priv = (void *)(long)host_timer;
1557
1558     return 0;
1559 }
1560
1561 static void dynticks_stop_timer(struct qemu_alarm_timer *t)
1562 {
1563     timer_t host_timer = (timer_t)(long)t->priv;
1564
1565     timer_delete(host_timer);
1566 }
1567
1568 static void dynticks_rearm_timer(struct qemu_alarm_timer *t)
1569 {
1570     timer_t host_timer = (timer_t)(long)t->priv;
1571     struct itimerspec timeout;
1572     int64_t nearest_delta_us = INT64_MAX;
1573     int64_t current_us;
1574
1575     if (!active_timers[QEMU_TIMER_REALTIME] &&
1576                 !active_timers[QEMU_TIMER_VIRTUAL])
1577         return;
1578
1579     nearest_delta_us = qemu_next_deadline_dyntick();
1580
1581     /* check whether a timer is already running */
1582     if (timer_gettime(host_timer, &timeout)) {
1583         perror("gettime");
1584         fprintf(stderr, "Internal timer error: aborting\n");
1585         exit(1);
1586     }
1587     current_us = timeout.it_value.tv_sec * 1000000 + timeout.it_value.tv_nsec/1000;
1588     if (current_us && current_us <= nearest_delta_us)
1589         return;
1590
1591     timeout.it_interval.tv_sec = 0;
1592     timeout.it_interval.tv_nsec = 0; /* 0 for one-shot timer */
1593     timeout.it_value.tv_sec =  nearest_delta_us / 1000000;
1594     timeout.it_value.tv_nsec = (nearest_delta_us % 1000000) * 1000;
1595     if (timer_settime(host_timer, 0 /* RELATIVE */, &timeout, NULL)) {
1596         perror("settime");
1597         fprintf(stderr, "Internal timer error: aborting\n");
1598         exit(1);
1599     }
1600 }
1601
1602 #endif /* defined(__linux__) */
1603
1604 static int unix_start_timer(struct qemu_alarm_timer *t)
1605 {
1606     struct sigaction act;
1607     struct itimerval itv;
1608     int err;
1609
1610     /* timer signal */
1611     sigfillset(&act.sa_mask);
1612     act.sa_flags = 0;
1613     act.sa_handler = host_alarm_handler;
1614
1615     sigaction(SIGALRM, &act, NULL);
1616
1617     itv.it_interval.tv_sec = 0;
1618     /* for i386 kernel 2.6 to get 1 ms */
1619     itv.it_interval.tv_usec = 999;
1620     itv.it_value.tv_sec = 0;
1621     itv.it_value.tv_usec = 10 * 1000;
1622
1623     err = setitimer(ITIMER_REAL, &itv, NULL);
1624     if (err)
1625         return -1;
1626
1627     return 0;
1628 }
1629
1630 static void unix_stop_timer(struct qemu_alarm_timer *t)
1631 {
1632     struct itimerval itv;
1633
1634     memset(&itv, 0, sizeof(itv));
1635     setitimer(ITIMER_REAL, &itv, NULL);
1636 }
1637
1638 #endif /* !defined(_WIN32) */
1639
1640
1641 #ifdef _WIN32
1642
1643 static int win32_start_timer(struct qemu_alarm_timer *t)
1644 {
1645     TIMECAPS tc;
1646     struct qemu_alarm_win32 *data = t->priv;
1647     UINT flags;
1648
1649     memset(&tc, 0, sizeof(tc));
1650     timeGetDevCaps(&tc, sizeof(tc));
1651
1652     if (data->period < tc.wPeriodMin)
1653         data->period = tc.wPeriodMin;
1654
1655     timeBeginPeriod(data->period);
1656
1657     flags = TIME_CALLBACK_FUNCTION;
1658     if (alarm_has_dynticks(t))
1659         flags |= TIME_ONESHOT;
1660     else
1661         flags |= TIME_PERIODIC;
1662
1663     data->timerId = timeSetEvent(1,         // interval (ms)
1664                         data->period,       // resolution
1665                         host_alarm_handler, // function
1666                         (DWORD)t,           // parameter
1667                         flags);
1668
1669     if (!data->timerId) {
1670         perror("Failed to initialize win32 alarm timer");
1671         timeEndPeriod(data->period);
1672         return -1;
1673     }
1674
1675     return 0;
1676 }
1677
1678 static void win32_stop_timer(struct qemu_alarm_timer *t)
1679 {
1680     struct qemu_alarm_win32 *data = t->priv;
1681
1682     timeKillEvent(data->timerId);
1683     timeEndPeriod(data->period);
1684 }
1685
1686 static void win32_rearm_timer(struct qemu_alarm_timer *t)
1687 {
1688     struct qemu_alarm_win32 *data = t->priv;
1689     uint64_t nearest_delta_us;
1690
1691     if (!active_timers[QEMU_TIMER_REALTIME] &&
1692                 !active_timers[QEMU_TIMER_VIRTUAL])
1693         return;
1694
1695     nearest_delta_us = qemu_next_deadline_dyntick();
1696     nearest_delta_us /= 1000;
1697
1698     timeKillEvent(data->timerId);
1699
1700     data->timerId = timeSetEvent(1,
1701                         data->period,
1702                         host_alarm_handler,
1703                         (DWORD)t,
1704                         TIME_ONESHOT | TIME_PERIODIC);
1705
1706     if (!data->timerId) {
1707         perror("Failed to re-arm win32 alarm timer");
1708
1709         timeEndPeriod(data->period);
1710         exit(1);
1711     }
1712 }
1713
1714 #endif /* _WIN32 */
1715
1716 static int init_timer_alarm(void)
1717 {
1718     struct qemu_alarm_timer *t = NULL;
1719     int i, err = -1;
1720
1721     for (i = 0; alarm_timers[i].name; i++) {
1722         t = &alarm_timers[i];
1723
1724         err = t->start(t);
1725         if (!err)
1726             break;
1727     }
1728
1729     if (err) {
1730         err = -ENOENT;
1731         goto fail;
1732     }
1733
1734     alarm_timer = t;
1735
1736     return 0;
1737
1738 fail:
1739     return err;
1740 }
1741
1742 static void quit_timers(void)
1743 {
1744     alarm_timer->stop(alarm_timer);
1745     alarm_timer = NULL;
1746 }
1747
1748 /***********************************************************/
1749 /* host time/date access */
1750 void qemu_get_timedate(struct tm *tm, int offset)
1751 {
1752     time_t ti;
1753     struct tm *ret;
1754
1755     time(&ti);
1756     ti += offset;
1757     if (rtc_date_offset == -1) {
1758         if (rtc_utc)
1759             ret = gmtime(&ti);
1760         else
1761             ret = localtime(&ti);
1762     } else {
1763         ti -= rtc_date_offset;
1764         ret = gmtime(&ti);
1765     }
1766
1767     memcpy(tm, ret, sizeof(struct tm));
1768 }
1769
1770 int qemu_timedate_diff(struct tm *tm)
1771 {
1772     time_t seconds;
1773
1774     if (rtc_date_offset == -1)
1775         if (rtc_utc)
1776             seconds = mktimegm(tm);
1777         else
1778             seconds = mktime(tm);
1779     else
1780         seconds = mktimegm(tm) + rtc_date_offset;
1781
1782     return seconds - time(NULL);
1783 }
1784
1785 #ifdef _WIN32
1786 static void socket_cleanup(void)
1787 {
1788     WSACleanup();
1789 }
1790
1791 static int socket_init(void)
1792 {
1793     WSADATA Data;
1794     int ret, err;
1795
1796     ret = WSAStartup(MAKEWORD(2,2), &Data);
1797     if (ret != 0) {
1798         err = WSAGetLastError();
1799         fprintf(stderr, "WSAStartup: %d\n", err);
1800         return -1;
1801     }
1802     atexit(socket_cleanup);
1803     return 0;
1804 }
1805 #endif
1806
1807 const char *get_opt_name(char *buf, int buf_size, const char *p, char delim)
1808 {
1809     char *q;
1810
1811     q = buf;
1812     while (*p != '\0' && *p != delim) {
1813         if (q && (q - buf) < buf_size - 1)
1814             *q++ = *p;
1815         p++;
1816     }
1817     if (q)
1818         *q = '\0';
1819
1820     return p;
1821 }
1822
1823 const char *get_opt_value(char *buf, int buf_size, const char *p)
1824 {
1825     char *q;
1826
1827     q = buf;
1828     while (*p != '\0') {
1829         if (*p == ',') {
1830             if (*(p + 1) != ',')
1831                 break;
1832             p++;
1833         }
1834         if (q && (q - buf) < buf_size - 1)
1835             *q++ = *p;
1836         p++;
1837     }
1838     if (q)
1839         *q = '\0';
1840
1841     return p;
1842 }
1843
1844 int get_param_value(char *buf, int buf_size,
1845                     const char *tag, const char *str)
1846 {
1847     const char *p;
1848     char option[128];
1849
1850     p = str;
1851     for(;;) {
1852         p = get_opt_name(option, sizeof(option), p, '=');
1853         if (*p != '=')
1854             break;
1855         p++;
1856         if (!strcmp(tag, option)) {
1857             (void)get_opt_value(buf, buf_size, p);
1858             return strlen(buf);
1859         } else {
1860             p = get_opt_value(NULL, 0, p);
1861         }
1862         if (*p != ',')
1863             break;
1864         p++;
1865     }
1866     return 0;
1867 }
1868
1869 int check_params(const char * const *params, const char *str)
1870 {
1871     int name_buf_size = 1;
1872     const char *p;
1873     char *name_buf;
1874     int i, len;
1875     int ret = 0;
1876
1877     for (i = 0; params[i] != NULL; i++) {
1878         len = strlen(params[i]) + 1;
1879         if (len > name_buf_size) {
1880             name_buf_size = len;
1881         }
1882     }
1883     name_buf = qemu_malloc(name_buf_size);
1884
1885     p = str;
1886     while (*p != '\0') {
1887         p = get_opt_name(name_buf, name_buf_size, p, '=');
1888         if (*p != '=') {
1889             ret = -1;
1890             break;
1891         }
1892         p++;
1893         for(i = 0; params[i] != NULL; i++)
1894             if (!strcmp(params[i], name_buf))
1895                 break;
1896         if (params[i] == NULL) {
1897             ret = -1;
1898             break;
1899         }
1900         p = get_opt_value(NULL, 0, p);
1901         if (*p != ',')
1902             break;
1903         p++;
1904     }
1905
1906     qemu_free(name_buf);
1907     return ret;
1908 }
1909
1910 /***********************************************************/
1911 /* Bluetooth support */
1912 static int nb_hcis;
1913 static int cur_hci;
1914 static struct HCIInfo *hci_table[MAX_NICS];
1915
1916 static struct bt_vlan_s {
1917     struct bt_scatternet_s net;
1918     int id;
1919     struct bt_vlan_s *next;
1920 } *first_bt_vlan;
1921
1922 /* find or alloc a new bluetooth "VLAN" */
1923 static struct bt_scatternet_s *qemu_find_bt_vlan(int id)
1924 {
1925     struct bt_vlan_s **pvlan, *vlan;
1926     for (vlan = first_bt_vlan; vlan != NULL; vlan = vlan->next) {
1927         if (vlan->id == id)
1928             return &vlan->net;
1929     }
1930     vlan = qemu_mallocz(sizeof(struct bt_vlan_s));
1931     vlan->id = id;
1932     pvlan = &first_bt_vlan;
1933     while (*pvlan != NULL)
1934         pvlan = &(*pvlan)->next;
1935     *pvlan = vlan;
1936     return &vlan->net;
1937 }
1938
1939 static void null_hci_send(struct HCIInfo *hci, const uint8_t *data, int len)
1940 {
1941 }
1942
1943 static int null_hci_addr_set(struct HCIInfo *hci, const uint8_t *bd_addr)
1944 {
1945     return -ENOTSUP;
1946 }
1947
1948 static struct HCIInfo null_hci = {
1949     .cmd_send = null_hci_send,
1950     .sco_send = null_hci_send,
1951     .acl_send = null_hci_send,
1952     .bdaddr_set = null_hci_addr_set,
1953 };
1954
1955 struct HCIInfo *qemu_next_hci(void)
1956 {
1957     if (cur_hci == nb_hcis)
1958         return &null_hci;
1959
1960     return hci_table[cur_hci++];
1961 }
1962
1963 static struct HCIInfo *hci_init(const char *str)
1964 {
1965     char *endp;
1966     struct bt_scatternet_s *vlan = 0;
1967
1968     if (!strcmp(str, "null"))
1969         /* null */
1970         return &null_hci;
1971     else if (!strncmp(str, "host", 4) && (str[4] == '\0' || str[4] == ':'))
1972         /* host[:hciN] */
1973         return bt_host_hci(str[4] ? str + 5 : "hci0");
1974     else if (!strncmp(str, "hci", 3)) {
1975         /* hci[,vlan=n] */
1976         if (str[3]) {
1977             if (!strncmp(str + 3, ",vlan=", 6)) {
1978                 vlan = qemu_find_bt_vlan(strtol(str + 9, &endp, 0));
1979                 if (*endp)
1980                     vlan = 0;
1981             }
1982         } else
1983             vlan = qemu_find_bt_vlan(0);
1984         if (vlan)
1985            return bt_new_hci(vlan);
1986     }
1987
1988     fprintf(stderr, "qemu: Unknown bluetooth HCI `%s'.\n", str);
1989
1990     return 0;
1991 }
1992
1993 static int bt_hci_parse(const char *str)
1994 {
1995     struct HCIInfo *hci;
1996     bdaddr_t bdaddr;
1997
1998     if (nb_hcis >= MAX_NICS) {
1999         fprintf(stderr, "qemu: Too many bluetooth HCIs (max %i).\n", MAX_NICS);
2000         return -1;
2001     }
2002
2003     hci = hci_init(str);
2004     if (!hci)
2005         return -1;
2006
2007     bdaddr.b[0] = 0x52;
2008     bdaddr.b[1] = 0x54;
2009     bdaddr.b[2] = 0x00;
2010     bdaddr.b[3] = 0x12;
2011     bdaddr.b[4] = 0x34;
2012     bdaddr.b[5] = 0x56 + nb_hcis;
2013     hci->bdaddr_set(hci, bdaddr.b);
2014
2015     hci_table[nb_hcis++] = hci;
2016
2017     return 0;
2018 }
2019
2020 static void bt_vhci_add(int vlan_id)
2021 {
2022     struct bt_scatternet_s *vlan = qemu_find_bt_vlan(vlan_id);
2023
2024     if (!vlan->slave)
2025         fprintf(stderr, "qemu: warning: adding a VHCI to "
2026                         "an empty scatternet %i\n", vlan_id);
2027
2028     bt_vhci_init(bt_new_hci(vlan));
2029 }
2030
2031 static struct bt_device_s *bt_device_add(const char *opt)
2032 {
2033     struct bt_scatternet_s *vlan;
2034     int vlan_id = 0;
2035     char *endp = strstr(opt, ",vlan=");
2036     int len = (endp ? endp - opt : strlen(opt)) + 1;
2037     char devname[10];
2038
2039     pstrcpy(devname, MIN(sizeof(devname), len), opt);
2040
2041     if (endp) {
2042         vlan_id = strtol(endp + 6, &endp, 0);
2043         if (*endp) {
2044             fprintf(stderr, "qemu: unrecognised bluetooth vlan Id\n");
2045             return 0;
2046         }
2047     }
2048
2049     vlan = qemu_find_bt_vlan(vlan_id);
2050
2051     if (!vlan->slave)
2052         fprintf(stderr, "qemu: warning: adding a slave device to "
2053                         "an empty scatternet %i\n", vlan_id);
2054
2055     if (!strcmp(devname, "keyboard"))
2056         return bt_keyboard_init(vlan);
2057
2058     fprintf(stderr, "qemu: unsupported bluetooth device `%s'\n", devname);
2059     return 0;
2060 }
2061
2062 static int bt_parse(const char *opt)
2063 {
2064     const char *endp, *p;
2065     int vlan;
2066
2067     if (strstart(opt, "hci", &endp)) {
2068         if (!*endp || *endp == ',') {
2069             if (*endp)
2070                 if (!strstart(endp, ",vlan=", 0))
2071                     opt = endp + 1;
2072
2073             return bt_hci_parse(opt);
2074        }
2075     } else if (strstart(opt, "vhci", &endp)) {
2076         if (!*endp || *endp == ',') {
2077             if (*endp) {
2078                 if (strstart(endp, ",vlan=", &p)) {
2079                     vlan = strtol(p, (char **) &endp, 0);
2080                     if (*endp) {
2081                         fprintf(stderr, "qemu: bad scatternet '%s'\n", p);
2082                         return 1;
2083                     }
2084                 } else {
2085                     fprintf(stderr, "qemu: bad parameter '%s'\n", endp + 1);
2086                     return 1;
2087                 }
2088             } else
2089                 vlan = 0;
2090
2091             bt_vhci_add(vlan);
2092             return 0;
2093         }
2094     } else if (strstart(opt, "device:", &endp))
2095         return !bt_device_add(endp);
2096
2097     fprintf(stderr, "qemu: bad bluetooth parameter '%s'\n", opt);
2098     return 1;
2099 }
2100
2101 /***********************************************************/
2102 /* QEMU Block devices */
2103
2104 #define HD_ALIAS "index=%d,media=disk"
2105 #define CDROM_ALIAS "index=2,media=cdrom"
2106 #define FD_ALIAS "index=%d,if=floppy"
2107 #define PFLASH_ALIAS "if=pflash"
2108 #define MTD_ALIAS "if=mtd"
2109 #define SD_ALIAS "index=0,if=sd"
2110
2111 static int drive_opt_get_free_idx(void)
2112 {
2113     int index;
2114
2115     for (index = 0; index < MAX_DRIVES; index++)
2116         if (!drives_opt[index].used) {
2117             drives_opt[index].used = 1;
2118             return index;
2119         }
2120
2121     return -1;
2122 }
2123
2124 static int drive_get_free_idx(void)
2125 {
2126     int index;
2127
2128     for (index = 0; index < MAX_DRIVES; index++)
2129         if (!drives_table[index].used) {
2130             drives_table[index].used = 1;
2131             return index;
2132         }
2133
2134     return -1;
2135 }
2136
2137 int drive_add(const char *file, const char *fmt, ...)
2138 {
2139     va_list ap;
2140     int index = drive_opt_get_free_idx();
2141
2142     if (nb_drives_opt >= MAX_DRIVES || index == -1) {
2143         fprintf(stderr, "qemu: too many drives\n");
2144         return -1;
2145     }
2146
2147     drives_opt[index].file = file;
2148     va_start(ap, fmt);
2149     vsnprintf(drives_opt[index].opt,
2150               sizeof(drives_opt[0].opt), fmt, ap);
2151     va_end(ap);
2152
2153     nb_drives_opt++;
2154     return index;
2155 }
2156
2157 void drive_remove(int index)
2158 {
2159     drives_opt[index].used = 0;
2160     nb_drives_opt--;
2161 }
2162
2163 int drive_get_index(BlockInterfaceType type, int bus, int unit)
2164 {
2165     int index;
2166
2167     /* seek interface, bus and unit */
2168
2169     for (index = 0; index < MAX_DRIVES; index++)
2170         if (drives_table[index].type == type &&
2171             drives_table[index].bus == bus &&
2172             drives_table[index].unit == unit &&
2173             drives_table[index].used)
2174         return index;
2175
2176     return -1;
2177 }
2178
2179 int drive_get_max_bus(BlockInterfaceType type)
2180 {
2181     int max_bus;
2182     int index;
2183
2184     max_bus = -1;
2185     for (index = 0; index < nb_drives; index++) {
2186         if(drives_table[index].type == type &&
2187            drives_table[index].bus > max_bus)
2188             max_bus = drives_table[index].bus;
2189     }
2190     return max_bus;
2191 }
2192
2193 const char *drive_get_serial(BlockDriverState *bdrv)
2194 {
2195     int index;
2196
2197     for (index = 0; index < nb_drives; index++)
2198         if (drives_table[index].bdrv == bdrv)
2199             return drives_table[index].serial;
2200
2201     return "\0";
2202 }
2203
2204 BlockInterfaceErrorAction drive_get_onerror(BlockDriverState *bdrv)
2205 {
2206     int index;
2207
2208     for (index = 0; index < nb_drives; index++)
2209         if (drives_table[index].bdrv == bdrv)
2210             return drives_table[index].onerror;
2211
2212     return BLOCK_ERR_STOP_ENOSPC;
2213 }
2214
2215 static void bdrv_format_print(void *opaque, const char *name)
2216 {
2217     fprintf(stderr, " %s", name);
2218 }
2219
2220 void drive_uninit(BlockDriverState *bdrv)
2221 {
2222     int i;
2223
2224     for (i = 0; i < MAX_DRIVES; i++)
2225         if (drives_table[i].bdrv == bdrv) {
2226             drives_table[i].bdrv = NULL;
2227             drives_table[i].used = 0;
2228             drive_remove(drives_table[i].drive_opt_idx);
2229             nb_drives--;
2230             break;
2231         }
2232 }
2233
2234 int drive_init(struct drive_opt *arg, int snapshot, void *opaque)
2235 {
2236     char buf[128];
2237     char file[1024];
2238     char devname[128];
2239     char serial[21];
2240     const char *mediastr = "";
2241     BlockInterfaceType type;
2242     enum { MEDIA_DISK, MEDIA_CDROM } media;
2243     int bus_id, unit_id;
2244     int cyls, heads, secs, translation;
2245     BlockDriverState *bdrv;
2246     BlockDriver *drv = NULL;
2247     QEMUMachine *machine = opaque;
2248     int max_devs;
2249     int index;
2250     int cache;
2251     int bdrv_flags, onerror;
2252     int drives_table_idx;
2253     char *str = arg->opt;
2254     static const char * const params[] = { "bus", "unit", "if", "index",
2255                                            "cyls", "heads", "secs", "trans",
2256                                            "media", "snapshot", "file",
2257                                            "cache", "format", "serial", "werror",
2258                                            NULL };
2259
2260     if (check_params(params, str) < 0) {
2261          fprintf(stderr, "qemu: unknown parameter '%s' in '%s'\n",
2262                          buf, str);
2263          return -1;
2264     }
2265
2266     file[0] = 0;
2267     cyls = heads = secs = 0;
2268     bus_id = 0;
2269     unit_id = -1;
2270     translation = BIOS_ATA_TRANSLATION_AUTO;
2271     index = -1;
2272     cache = 3;
2273
2274     if (machine->use_scsi) {
2275         type = IF_SCSI;
2276         max_devs = MAX_SCSI_DEVS;
2277         pstrcpy(devname, sizeof(devname), "scsi");
2278     } else {
2279         type = IF_IDE;
2280         max_devs = MAX_IDE_DEVS;
2281         pstrcpy(devname, sizeof(devname), "ide");
2282     }
2283     media = MEDIA_DISK;
2284
2285     /* extract parameters */
2286
2287     if (get_param_value(buf, sizeof(buf), "bus", str)) {
2288         bus_id = strtol(buf, NULL, 0);
2289         if (bus_id < 0) {
2290             fprintf(stderr, "qemu: '%s' invalid bus id\n", str);
2291             return -1;
2292         }
2293     }
2294
2295     if (get_param_value(buf, sizeof(buf), "unit", str)) {
2296         unit_id = strtol(buf, NULL, 0);
2297         if (unit_id < 0) {
2298             fprintf(stderr, "qemu: '%s' invalid unit id\n", str);
2299             return -1;
2300         }
2301     }
2302
2303     if (get_param_value(buf, sizeof(buf), "if", str)) {
2304         pstrcpy(devname, sizeof(devname), buf);
2305         if (!strcmp(buf, "ide")) {
2306             type = IF_IDE;
2307             max_devs = MAX_IDE_DEVS;
2308         } else if (!strcmp(buf, "scsi")) {
2309             type = IF_SCSI;
2310             max_devs = MAX_SCSI_DEVS;
2311         } else if (!strcmp(buf, "floppy")) {
2312             type = IF_FLOPPY;
2313             max_devs = 0;
2314         } else if (!strcmp(buf, "pflash")) {
2315             type = IF_PFLASH;
2316             max_devs = 0;
2317         } else if (!strcmp(buf, "mtd")) {
2318             type = IF_MTD;
2319             max_devs = 0;
2320         } else if (!strcmp(buf, "sd")) {
2321             type = IF_SD;
2322             max_devs = 0;
2323         } else if (!strcmp(buf, "virtio")) {
2324             type = IF_VIRTIO;
2325             max_devs = 0;
2326         } else if (!strcmp(buf, "xen")) {
2327             type = IF_XEN;
2328             max_devs = 0;
2329         } else {
2330             fprintf(stderr, "qemu: '%s' unsupported bus type '%s'\n", str, buf);
2331             return -1;
2332         }
2333     }
2334
2335     if (get_param_value(buf, sizeof(buf), "index", str)) {
2336         index = strtol(buf, NULL, 0);
2337         if (index < 0) {
2338             fprintf(stderr, "qemu: '%s' invalid index\n", str);
2339             return -1;
2340         }
2341     }
2342
2343     if (get_param_value(buf, sizeof(buf), "cyls", str)) {
2344         cyls = strtol(buf, NULL, 0);
2345     }
2346
2347     if (get_param_value(buf, sizeof(buf), "heads", str)) {
2348         heads = strtol(buf, NULL, 0);
2349     }
2350
2351     if (get_param_value(buf, sizeof(buf), "secs", str)) {
2352         secs = strtol(buf, NULL, 0);
2353     }
2354
2355     if (cyls || heads || secs) {
2356         if (cyls < 1 || cyls > 16383) {
2357             fprintf(stderr, "qemu: '%s' invalid physical cyls number\n", str);
2358             return -1;
2359         }
2360         if (heads < 1 || heads > 16) {
2361             fprintf(stderr, "qemu: '%s' invalid physical heads number\n", str);
2362             return -1;
2363         }
2364         if (secs < 1 || secs > 63) {
2365             fprintf(stderr, "qemu: '%s' invalid physical secs number\n", str);
2366             return -1;
2367         }
2368     }
2369
2370     if (get_param_value(buf, sizeof(buf), "trans", str)) {
2371         if (!cyls) {
2372             fprintf(stderr,
2373                     "qemu: '%s' trans must be used with cyls,heads and secs\n",
2374                     str);
2375             return -1;
2376         }
2377         if (!strcmp(buf, "none"))
2378             translation = BIOS_ATA_TRANSLATION_NONE;
2379         else if (!strcmp(buf, "lba"))
2380             translation = BIOS_ATA_TRANSLATION_LBA;
2381         else if (!strcmp(buf, "auto"))
2382             translation = BIOS_ATA_TRANSLATION_AUTO;
2383         else {
2384             fprintf(stderr, "qemu: '%s' invalid translation type\n", str);
2385             return -1;
2386         }
2387     }
2388
2389     if (get_param_value(buf, sizeof(buf), "media", str)) {
2390         if (!strcmp(buf, "disk")) {
2391             media = MEDIA_DISK;
2392         } else if (!strcmp(buf, "cdrom")) {
2393             if (cyls || secs || heads) {
2394                 fprintf(stderr,
2395                         "qemu: '%s' invalid physical CHS format\n", str);
2396                 return -1;
2397             }
2398             media = MEDIA_CDROM;
2399         } else {
2400             fprintf(stderr, "qemu: '%s' invalid media\n", str);
2401             return -1;
2402         }
2403     }
2404
2405     if (get_param_value(buf, sizeof(buf), "snapshot", str)) {
2406         if (!strcmp(buf, "on"))
2407             snapshot = 1;
2408         else if (!strcmp(buf, "off"))
2409             snapshot = 0;
2410         else {
2411             fprintf(stderr, "qemu: '%s' invalid snapshot option\n", str);
2412             return -1;
2413         }
2414     }
2415
2416     if (get_param_value(buf, sizeof(buf), "cache", str)) {
2417         if (!strcmp(buf, "off") || !strcmp(buf, "none"))
2418             cache = 0;
2419         else if (!strcmp(buf, "writethrough"))
2420             cache = 1;
2421         else if (!strcmp(buf, "writeback"))
2422             cache = 2;
2423         else {
2424            fprintf(stderr, "qemu: invalid cache option\n");
2425            return -1;
2426         }
2427     }
2428
2429     if (get_param_value(buf, sizeof(buf), "format", str)) {
2430        if (strcmp(buf, "?") == 0) {
2431             fprintf(stderr, "qemu: Supported formats:");
2432             bdrv_iterate_format(bdrv_format_print, NULL);
2433             fprintf(stderr, "\n");
2434             return -1;
2435         }
2436         drv = bdrv_find_format(buf);
2437         if (!drv) {
2438             fprintf(stderr, "qemu: '%s' invalid format\n", buf);
2439             return -1;
2440         }
2441     }
2442
2443     if (arg->file == NULL)
2444         get_param_value(file, sizeof(file), "file", str);
2445     else
2446         pstrcpy(file, sizeof(file), arg->file);
2447
2448     if (!get_param_value(serial, sizeof(serial), "serial", str))
2449             memset(serial, 0,  sizeof(serial));
2450
2451     onerror = BLOCK_ERR_STOP_ENOSPC;
2452     if (get_param_value(buf, sizeof(serial), "werror", str)) {
2453         if (type != IF_IDE && type != IF_SCSI && type != IF_VIRTIO) {
2454             fprintf(stderr, "werror is no supported by this format\n");
2455             return -1;
2456         }
2457         if (!strcmp(buf, "ignore"))
2458             onerror = BLOCK_ERR_IGNORE;
2459         else if (!strcmp(buf, "enospc"))
2460             onerror = BLOCK_ERR_STOP_ENOSPC;
2461         else if (!strcmp(buf, "stop"))
2462             onerror = BLOCK_ERR_STOP_ANY;
2463         else if (!strcmp(buf, "report"))
2464             onerror = BLOCK_ERR_REPORT;
2465         else {
2466             fprintf(stderr, "qemu: '%s' invalid write error action\n", buf);
2467             return -1;
2468         }
2469     }
2470
2471     /* compute bus and unit according index */
2472
2473     if (index != -1) {
2474         if (bus_id != 0 || unit_id != -1) {
2475             fprintf(stderr,
2476                     "qemu: '%s' index cannot be used with bus and unit\n", str);
2477             return -1;
2478         }
2479         if (max_devs == 0)
2480         {
2481             unit_id = index;
2482             bus_id = 0;
2483         } else {
2484             unit_id = index % max_devs;
2485             bus_id = index / max_devs;
2486         }
2487     }
2488
2489     /* if user doesn't specify a unit_id,
2490      * try to find the first free
2491      */
2492
2493     if (unit_id == -1) {
2494        unit_id = 0;
2495        while (drive_get_index(type, bus_id, unit_id) != -1) {
2496            unit_id++;
2497            if (max_devs && unit_id >= max_devs) {
2498                unit_id -= max_devs;
2499                bus_id++;
2500            }
2501        }
2502     }
2503
2504     /* check unit id */
2505
2506     if (max_devs && unit_id >= max_devs) {
2507         fprintf(stderr, "qemu: '%s' unit %d too big (max is %d)\n",
2508                         str, unit_id, max_devs - 1);
2509         return -1;
2510     }
2511
2512     /*
2513      * ignore multiple definitions
2514      */
2515
2516     if (drive_get_index(type, bus_id, unit_id) != -1)
2517         return -2;
2518
2519     /* init */
2520
2521     if (type == IF_IDE || type == IF_SCSI)
2522         mediastr = (media == MEDIA_CDROM) ? "-cd" : "-hd";
2523     if (max_devs)
2524         snprintf(buf, sizeof(buf), "%s%i%s%i",
2525                  devname, bus_id, mediastr, unit_id);
2526     else
2527         snprintf(buf, sizeof(buf), "%s%s%i",
2528                  devname, mediastr, unit_id);
2529     bdrv = bdrv_new(buf);
2530     drives_table_idx = drive_get_free_idx();
2531     drives_table[drives_table_idx].bdrv = bdrv;
2532     drives_table[drives_table_idx].type = type;
2533     drives_table[drives_table_idx].bus = bus_id;
2534     drives_table[drives_table_idx].unit = unit_id;
2535     drives_table[drives_table_idx].onerror = onerror;
2536     drives_table[drives_table_idx].drive_opt_idx = arg - drives_opt;
2537     strncpy(drives_table[nb_drives].serial, serial, sizeof(serial));
2538     nb_drives++;
2539
2540     switch(type) {
2541     case IF_IDE:
2542     case IF_SCSI:
2543     case IF_XEN:
2544         switch(media) {
2545         case MEDIA_DISK:
2546             if (cyls != 0) {
2547                 bdrv_set_geometry_hint(bdrv, cyls, heads, secs);
2548                 bdrv_set_translation_hint(bdrv, translation);
2549             }
2550             break;
2551         case MEDIA_CDROM:
2552             bdrv_set_type_hint(bdrv, BDRV_TYPE_CDROM);
2553             break;
2554         }
2555         break;
2556     case IF_SD:
2557         /* FIXME: This isn't really a floppy, but it's a reasonable
2558            approximation.  */
2559     case IF_FLOPPY:
2560         bdrv_set_type_hint(bdrv, BDRV_TYPE_FLOPPY);
2561         break;
2562     case IF_PFLASH:
2563     case IF_MTD:
2564     case IF_VIRTIO:
2565         break;
2566     }
2567     if (!file[0])
2568         return -2;
2569     bdrv_flags = 0;
2570     if (snapshot) {
2571         bdrv_flags |= BDRV_O_SNAPSHOT;
2572         cache = 2; /* always use write-back with snapshot */
2573     }
2574     if (cache == 0) /* no caching */
2575         bdrv_flags |= BDRV_O_NOCACHE;
2576     else if (cache == 2) /* write-back */
2577         bdrv_flags |= BDRV_O_CACHE_WB;
2578     else if (cache == 3) /* not specified */
2579         bdrv_flags |= BDRV_O_CACHE_DEF;
2580     if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0) {
2581         fprintf(stderr, "qemu: could not open disk image %s\n",
2582                         file);
2583         return -1;
2584     }
2585     if (bdrv_key_required(bdrv))
2586         autostart = 0;
2587     return drives_table_idx;
2588 }
2589
2590 static void numa_add(const char *optarg)
2591 {
2592     char option[128];
2593     char *endptr;
2594     unsigned long long value, endvalue;
2595     int nodenr;
2596
2597     optarg = get_opt_name(option, 128, optarg, ',') + 1;
2598     if (!strcmp(option, "node")) {
2599         if (get_param_value(option, 128, "nodeid", optarg) == 0) {
2600             nodenr = nb_numa_nodes;
2601         } else {
2602             nodenr = strtoull(option, NULL, 10);
2603         }
2604
2605         if (get_param_value(option, 128, "mem", optarg) == 0) {
2606             node_mem[nodenr] = 0;
2607         } else {
2608             value = strtoull(option, &endptr, 0);
2609             switch (*endptr) {
2610             case 0: case 'M': case 'm':
2611                 value <<= 20;
2612                 break;
2613             case 'G': case 'g':
2614                 value <<= 30;
2615                 break;
2616             }
2617             node_mem[nodenr] = value;
2618         }
2619         if (get_param_value(option, 128, "cpus", optarg) == 0) {
2620             node_cpumask[nodenr] = 0;
2621         } else {
2622             value = strtoull(option, &endptr, 10);
2623             if (value >= 64) {
2624                 value = 63;
2625                 fprintf(stderr, "only 64 CPUs in NUMA mode supported.\n");
2626             } else {
2627                 if (*endptr == '-') {
2628                     endvalue = strtoull(endptr+1, &endptr, 10);
2629                     if (endvalue >= 63) {
2630                         endvalue = 62;
2631                         fprintf(stderr,
2632                             "only 63 CPUs in NUMA mode supported.\n");
2633                     }
2634                     value = (1 << (endvalue + 1)) - (1 << value);
2635                 } else {
2636                     value = 1 << value;
2637                 }
2638             }
2639             node_cpumask[nodenr] = value;
2640         }
2641         nb_numa_nodes++;
2642     }
2643     return;
2644 }
2645
2646 /***********************************************************/
2647 /* USB devices */
2648
2649 static USBPort *used_usb_ports;
2650 static USBPort *free_usb_ports;
2651
2652 /* ??? Maybe change this to register a hub to keep track of the topology.  */
2653 void qemu_register_usb_port(USBPort *port, void *opaque, int index,
2654                             usb_attachfn attach)
2655 {
2656     port->opaque = opaque;
2657     port->index = index;
2658     port->attach = attach;
2659     port->next = free_usb_ports;
2660     free_usb_ports = port;
2661 }
2662
2663 int usb_device_add_dev(USBDevice *dev)
2664 {
2665     USBPort *port;
2666
2667     /* Find a USB port to add the device to.  */
2668     port = free_usb_ports;
2669     if (!port->next) {
2670         USBDevice *hub;
2671
2672         /* Create a new hub and chain it on.  */
2673         free_usb_ports = NULL;
2674         port->next = used_usb_ports;
2675         used_usb_ports = port;
2676
2677         hub = usb_hub_init(VM_USB_HUB_SIZE);
2678         usb_attach(port, hub);
2679         port = free_usb_ports;
2680     }
2681
2682     free_usb_ports = port->next;
2683     port->next = used_usb_ports;
2684     used_usb_ports = port;
2685     usb_attach(port, dev);
2686     return 0;
2687 }
2688
2689 static void usb_msd_password_cb(void *opaque, int err)
2690 {
2691     USBDevice *dev = opaque;
2692
2693     if (!err)
2694         usb_device_add_dev(dev);
2695     else
2696         dev->handle_destroy(dev);
2697 }
2698
2699 static int usb_device_add(const char *devname, int is_hotplug)
2700 {
2701     const char *p;
2702     USBDevice *dev;
2703
2704     if (!free_usb_ports)
2705         return -1;
2706
2707     if (strstart(devname, "host:", &p)) {
2708         dev = usb_host_device_open(p);
2709     } else if (!strcmp(devname, "mouse")) {
2710         dev = usb_mouse_init();
2711     } else if (!strcmp(devname, "tablet")) {
2712         dev = usb_tablet_init();
2713     } else if (!strcmp(devname, "keyboard")) {
2714         dev = usb_keyboard_init();
2715     } else if (strstart(devname, "disk:", &p)) {
2716         BlockDriverState *bs;
2717
2718         dev = usb_msd_init(p);
2719         if (!dev)
2720             return -1;
2721         bs = usb_msd_get_bdrv(dev);
2722         if (bdrv_key_required(bs)) {
2723             autostart = 0;
2724             if (is_hotplug) {
2725                 monitor_read_bdrv_key_start(cur_mon, bs, usb_msd_password_cb,
2726                                             dev);
2727                 return 0;
2728             }
2729         }
2730     } else if (!strcmp(devname, "wacom-tablet")) {
2731         dev = usb_wacom_init();
2732     } else if (strstart(devname, "serial:", &p)) {
2733         dev = usb_serial_init(p);
2734 #ifdef CONFIG_BRLAPI
2735     } else if (!strcmp(devname, "braille")) {
2736         dev = usb_baum_init();
2737 #endif
2738     } else if (strstart(devname, "net:", &p)) {
2739         int nic = nb_nics;
2740
2741         if (net_client_init("nic", p) < 0)
2742             return -1;
2743         nd_table[nic].model = "usb";
2744         dev = usb_net_init(&nd_table[nic]);
2745     } else if (!strcmp(devname, "bt") || strstart(devname, "bt:", &p)) {
2746         dev = usb_bt_init(devname[2] ? hci_init(p) :
2747                         bt_new_hci(qemu_find_bt_vlan(0)));
2748     } else {
2749         return -1;
2750     }
2751     if (!dev)
2752         return -1;
2753
2754     return usb_device_add_dev(dev);
2755 }
2756
2757 int usb_device_del_addr(int bus_num, int addr)
2758 {
2759     USBPort *port;
2760     USBPort **lastp;
2761     USBDevice *dev;
2762
2763     if (!used_usb_ports)
2764         return -1;
2765
2766     if (bus_num != 0)
2767         return -1;
2768
2769     lastp = &used_usb_ports;
2770     port = used_usb_ports;
2771     while (port && port->dev->addr != addr) {
2772         lastp = &port->next;
2773         port = port->next;
2774     }
2775
2776     if (!port)
2777         return -1;
2778
2779     dev = port->dev;
2780     *lastp = port->next;
2781     usb_attach(port, NULL);
2782     dev->handle_destroy(dev);
2783     port->next = free_usb_ports;
2784     free_usb_ports = port;
2785     return 0;
2786 }
2787
2788 static int usb_device_del(const char *devname)
2789 {
2790     int bus_num, addr;
2791     const char *p;
2792
2793     if (strstart(devname, "host:", &p))
2794         return usb_host_device_close(p);
2795
2796     if (!used_usb_ports)
2797         return -1;
2798
2799     p = strchr(devname, '.');
2800     if (!p)
2801         return -1;
2802     bus_num = strtoul(devname, NULL, 0);
2803     addr = strtoul(p + 1, NULL, 0);
2804
2805     return usb_device_del_addr(bus_num, addr);
2806 }
2807
2808 void do_usb_add(Monitor *mon, const char *devname)
2809 {
2810     usb_device_add(devname, 1);
2811 }
2812
2813 void do_usb_del(Monitor *mon, const char *devname)
2814 {
2815     usb_device_del(devname);
2816 }
2817
2818 void usb_info(Monitor *mon)
2819 {
2820     USBDevice *dev;
2821     USBPort *port;
2822     const char *speed_str;
2823
2824     if (!usb_enabled) {
2825         monitor_printf(mon, "USB support not enabled\n");
2826         return;
2827     }
2828
2829     for (port = used_usb_ports; port; port = port->next) {
2830         dev = port->dev;
2831         if (!dev)
2832             continue;
2833         switch(dev->speed) {
2834         case USB_SPEED_LOW:
2835             speed_str = "1.5";
2836             break;
2837         case USB_SPEED_FULL:
2838             speed_str = "12";
2839             break;
2840         case USB_SPEED_HIGH:
2841             speed_str = "480";
2842             break;
2843         default:
2844             speed_str = "?";
2845             break;
2846         }
2847         monitor_printf(mon, "  Device %d.%d, Speed %s Mb/s, Product %s\n",
2848                        0, dev->addr, speed_str, dev->devname);
2849     }
2850 }
2851
2852 /***********************************************************/
2853 /* PCMCIA/Cardbus */
2854
2855 static struct pcmcia_socket_entry_s {
2856     struct pcmcia_socket_s *socket;
2857     struct pcmcia_socket_entry_s *next;
2858 } *pcmcia_sockets = 0;
2859
2860 void pcmcia_socket_register(struct pcmcia_socket_s *socket)
2861 {
2862     struct pcmcia_socket_entry_s *entry;
2863
2864     entry = qemu_malloc(sizeof(struct pcmcia_socket_entry_s));
2865     entry->socket = socket;
2866     entry->next = pcmcia_sockets;
2867     pcmcia_sockets = entry;
2868 }
2869
2870 void pcmcia_socket_unregister(struct pcmcia_socket_s *socket)
2871 {
2872     struct pcmcia_socket_entry_s *entry, **ptr;
2873
2874     ptr = &pcmcia_sockets;
2875     for (entry = *ptr; entry; ptr = &entry->next, entry = *ptr)
2876         if (entry->socket == socket) {
2877             *ptr = entry->next;
2878             qemu_free(entry);
2879         }
2880 }
2881
2882 void pcmcia_info(Monitor *mon)
2883 {
2884     struct pcmcia_socket_entry_s *iter;
2885
2886     if (!pcmcia_sockets)
2887         monitor_printf(mon, "No PCMCIA sockets\n");
2888
2889     for (iter = pcmcia_sockets; iter; iter = iter->next)
2890         monitor_printf(mon, "%s: %s\n", iter->socket->slot_string,
2891                        iter->socket->attached ? iter->socket->card_string :
2892                        "Empty");
2893 }
2894
2895 /***********************************************************/
2896 /* register display */
2897
2898 struct DisplayAllocator default_allocator = {
2899     defaultallocator_create_displaysurface,
2900     defaultallocator_resize_displaysurface,
2901     defaultallocator_free_displaysurface
2902 };
2903
2904 void register_displaystate(DisplayState *ds)
2905 {
2906     DisplayState **s;
2907     s = &display_state;
2908     while (*s != NULL)
2909         s = &(*s)->next;
2910     ds->next = NULL;
2911     *s = ds;
2912 }
2913
2914 DisplayState *get_displaystate(void)
2915 {
2916     return display_state;
2917 }
2918
2919 DisplayAllocator *register_displayallocator(DisplayState *ds, DisplayAllocator *da)
2920 {
2921     if(ds->allocator ==  &default_allocator) ds->allocator = da;
2922     return ds->allocator;
2923 }
2924
2925 /* dumb display */
2926
2927 static void dumb_display_init(void)
2928 {
2929     DisplayState *ds = qemu_mallocz(sizeof(DisplayState));
2930     ds->allocator = &default_allocator;
2931     ds->surface = qemu_create_displaysurface(ds, 640, 480);
2932     register_displaystate(ds);
2933 }
2934
2935 /***********************************************************/
2936 /* I/O handling */
2937
2938 typedef struct IOHandlerRecord {
2939     int fd;
2940     IOCanRWHandler *fd_read_poll;
2941     IOHandler *fd_read;
2942     IOHandler *fd_write;
2943     int deleted;
2944     void *opaque;
2945     /* temporary data */
2946     struct pollfd *ufd;
2947     struct IOHandlerRecord *next;
2948 } IOHandlerRecord;
2949
2950 static IOHandlerRecord *first_io_handler;
2951
2952 /* XXX: fd_read_poll should be suppressed, but an API change is
2953    necessary in the character devices to suppress fd_can_read(). */
2954 int qemu_set_fd_handler2(int fd,
2955                          IOCanRWHandler *fd_read_poll,
2956                          IOHandler *fd_read,
2957                          IOHandler *fd_write,
2958                          void *opaque)
2959 {
2960     IOHandlerRecord **pioh, *ioh;
2961
2962     if (!fd_read && !fd_write) {
2963         pioh = &first_io_handler;
2964         for(;;) {
2965             ioh = *pioh;
2966             if (ioh == NULL)
2967                 break;
2968             if (ioh->fd == fd) {
2969                 ioh->deleted = 1;
2970                 break;
2971             }
2972             pioh = &ioh->next;
2973         }
2974     } else {
2975         for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
2976             if (ioh->fd == fd)
2977                 goto found;
2978         }
2979         ioh = qemu_mallocz(sizeof(IOHandlerRecord));
2980         ioh->next = first_io_handler;
2981         first_io_handler = ioh;
2982     found:
2983         ioh->fd = fd;
2984         ioh->fd_read_poll = fd_read_poll;
2985         ioh->fd_read = fd_read;
2986         ioh->fd_write = fd_write;
2987         ioh->opaque = opaque;
2988         ioh->deleted = 0;
2989     }
2990     return 0;
2991 }
2992
2993 int qemu_set_fd_handler(int fd,
2994                         IOHandler *fd_read,
2995                         IOHandler *fd_write,
2996                         void *opaque)
2997 {
2998     return qemu_set_fd_handler2(fd, NULL, fd_read, fd_write, opaque);
2999 }
3000
3001 #ifdef _WIN32
3002 /***********************************************************/
3003 /* Polling handling */
3004
3005 typedef struct PollingEntry {
3006     PollingFunc *func;
3007     void *opaque;
3008     struct PollingEntry *next;
3009 } PollingEntry;
3010
3011 static PollingEntry *first_polling_entry;
3012
3013 int qemu_add_polling_cb(PollingFunc *func, void *opaque)
3014 {
3015     PollingEntry **ppe, *pe;
3016     pe = qemu_mallocz(sizeof(PollingEntry));
3017     pe->func = func;
3018     pe->opaque = opaque;
3019     for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next);
3020     *ppe = pe;
3021     return 0;
3022 }
3023
3024 void qemu_del_polling_cb(PollingFunc *func, void *opaque)
3025 {
3026     PollingEntry **ppe, *pe;
3027     for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next) {
3028         pe = *ppe;
3029         if (pe->func == func && pe->opaque == opaque) {
3030             *ppe = pe->next;
3031             qemu_free(pe);
3032             break;
3033         }
3034     }
3035 }
3036
3037 /***********************************************************/
3038 /* Wait objects support */
3039 typedef struct WaitObjects {
3040     int num;
3041     HANDLE events[MAXIMUM_WAIT_OBJECTS + 1];
3042     WaitObjectFunc *func[MAXIMUM_WAIT_OBJECTS + 1];
3043     void *opaque[MAXIMUM_WAIT_OBJECTS + 1];
3044 } WaitObjects;
3045
3046 static WaitObjects wait_objects = {0};
3047
3048 int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
3049 {
3050     WaitObjects *w = &wait_objects;
3051
3052     if (w->num >= MAXIMUM_WAIT_OBJECTS)
3053         return -1;
3054     w->events[w->num] = handle;
3055     w->func[w->num] = func;
3056     w->opaque[w->num] = opaque;
3057     w->num++;
3058     return 0;
3059 }
3060
3061 void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
3062 {
3063     int i, found;
3064     WaitObjects *w = &wait_objects;
3065
3066     found = 0;
3067     for (i = 0; i < w->num; i++) {
3068         if (w->events[i] == handle)
3069             found = 1;
3070         if (found) {
3071             w->events[i] = w->events[i + 1];
3072             w->func[i] = w->func[i + 1];
3073             w->opaque[i] = w->opaque[i + 1];
3074         }
3075     }
3076     if (found)
3077         w->num--;
3078 }
3079 #endif
3080
3081 /***********************************************************/
3082 /* ram save/restore */
3083
3084 static int ram_get_page(QEMUFile *f, uint8_t *buf, int len)
3085 {
3086     int v;
3087
3088     v = qemu_get_byte(f);
3089     switch(v) {
3090     case 0:
3091         if (qemu_get_buffer(f, buf, len) != len)
3092             return -EIO;
3093         break;
3094     case 1:
3095         v = qemu_get_byte(f);
3096         memset(buf, v, len);
3097         break;
3098     default:
3099         return -EINVAL;
3100     }
3101
3102     if (qemu_file_has_error(f))
3103         return -EIO;
3104
3105     return 0;
3106 }
3107
3108 static int ram_load_v1(QEMUFile *f, void *opaque)
3109 {
3110     int ret;
3111     ram_addr_t i;
3112
3113     if (qemu_get_be32(f) != last_ram_offset)
3114         return -EINVAL;
3115     for(i = 0; i < last_ram_offset; i+= TARGET_PAGE_SIZE) {
3116         ret = ram_get_page(f, qemu_get_ram_ptr(i), TARGET_PAGE_SIZE);
3117         if (ret)
3118             return ret;
3119     }
3120     return 0;
3121 }
3122
3123 #define BDRV_HASH_BLOCK_SIZE 1024
3124 #define IOBUF_SIZE 4096
3125 #define RAM_CBLOCK_MAGIC 0xfabe
3126
3127 typedef struct RamDecompressState {
3128     z_stream zstream;
3129     QEMUFile *f;
3130     uint8_t buf[IOBUF_SIZE];
3131 } RamDecompressState;
3132
3133 static int ram_decompress_open(RamDecompressState *s, QEMUFile *f)
3134 {
3135     int ret;
3136     memset(s, 0, sizeof(*s));
3137     s->f = f;
3138     ret = inflateInit(&s->zstream);
3139     if (ret != Z_OK)
3140         return -1;
3141     return 0;
3142 }
3143
3144 static int ram_decompress_buf(RamDecompressState *s, uint8_t *buf, int len)
3145 {
3146     int ret, clen;
3147
3148     s->zstream.avail_out = len;
3149     s->zstream.next_out = buf;
3150     while (s->zstream.avail_out > 0) {
3151         if (s->zstream.avail_in == 0) {
3152             if (qemu_get_be16(s->f) != RAM_CBLOCK_MAGIC)
3153                 return -1;
3154             clen = qemu_get_be16(s->f);
3155             if (clen > IOBUF_SIZE)
3156                 return -1;
3157             qemu_get_buffer(s->f, s->buf, clen);
3158             s->zstream.avail_in = clen;
3159             s->zstream.next_in = s->buf;
3160         }
3161         ret = inflate(&s->zstream, Z_PARTIAL_FLUSH);
3162         if (ret != Z_OK && ret != Z_STREAM_END) {
3163             return -1;
3164         }
3165     }
3166     return 0;
3167 }
3168
3169 static void ram_decompress_close(RamDecompressState *s)
3170 {
3171     inflateEnd(&s->zstream);
3172 }
3173
3174 #define RAM_SAVE_FLAG_FULL      0x01
3175 #define RAM_SAVE_FLAG_COMPRESS  0x02
3176 #define RAM_SAVE_FLAG_MEM_SIZE  0x04
3177 #define RAM_SAVE_FLAG_PAGE      0x08
3178 #define RAM_SAVE_FLAG_EOS       0x10
3179
3180 static int is_dup_page(uint8_t *page, uint8_t ch)
3181 {
3182     uint32_t val = ch << 24 | ch << 16 | ch << 8 | ch;
3183     uint32_t *array = (uint32_t *)page;
3184     int i;
3185
3186     for (i = 0; i < (TARGET_PAGE_SIZE / 4); i++) {
3187         if (array[i] != val)
3188             return 0;
3189     }
3190
3191     return 1;
3192 }
3193
3194 static int ram_save_block(QEMUFile *f)
3195 {
3196     static ram_addr_t current_addr = 0;
3197     ram_addr_t saved_addr = current_addr;
3198     ram_addr_t addr = 0;
3199     int found = 0;
3200
3201     while (addr < last_ram_offset) {
3202         if (cpu_physical_memory_get_dirty(current_addr, MIGRATION_DIRTY_FLAG)) {
3203             uint8_t *p;
3204
3205             cpu_physical_memory_reset_dirty(current_addr,
3206                                             current_addr + TARGET_PAGE_SIZE,
3207                                             MIGRATION_DIRTY_FLAG);
3208
3209             p = qemu_get_ram_ptr(current_addr);
3210
3211             if (is_dup_page(p, *p)) {
3212                 qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_COMPRESS);
3213                 qemu_put_byte(f, *p);
3214             } else {
3215                 qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_PAGE);
3216                 qemu_put_buffer(f, p, TARGET_PAGE_SIZE);
3217             }
3218
3219             found = 1;
3220             break;
3221         }
3222         addr += TARGET_PAGE_SIZE;
3223         current_addr = (saved_addr + addr) % last_ram_offset;
3224     }
3225
3226     return found;
3227 }
3228
3229 static ram_addr_t ram_save_threshold = 10;
3230
3231 static ram_addr_t ram_save_remaining(void)
3232 {
3233     ram_addr_t addr;
3234     ram_addr_t count = 0;
3235
3236     for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
3237         if (cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
3238             count++;
3239     }
3240
3241     return count;
3242 }
3243
3244 static int ram_save_live(QEMUFile *f, int stage, void *opaque)
3245 {
3246     ram_addr_t addr;
3247
3248     if (stage == 1) {
3249         /* Make sure all dirty bits are set */
3250         for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
3251             if (!cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
3252                 cpu_physical_memory_set_dirty(addr);
3253         }
3254         
3255         /* Enable dirty memory tracking */
3256         cpu_physical_memory_set_dirty_tracking(1);
3257
3258         qemu_put_be64(f, last_ram_offset | RAM_SAVE_FLAG_MEM_SIZE);
3259     }
3260
3261     while (!qemu_file_rate_limit(f)) {
3262         int ret;
3263
3264         ret = ram_save_block(f);
3265         if (ret == 0) /* no more blocks */
3266             break;
3267     }
3268
3269     /* try transferring iterative blocks of memory */
3270
3271     if (stage == 3) {
3272
3273         /* flush all remaining blocks regardless of rate limiting */
3274         while (ram_save_block(f) != 0);
3275         cpu_physical_memory_set_dirty_tracking(0);
3276     }
3277
3278     qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
3279
3280     return (stage == 2) && (ram_save_remaining() < ram_save_threshold);
3281 }
3282
3283 static int ram_load_dead(QEMUFile *f, void *opaque)
3284 {
3285     RamDecompressState s1, *s = &s1;
3286     uint8_t buf[10];
3287     ram_addr_t i;
3288
3289     if (ram_decompress_open(s, f) < 0)
3290         return -EINVAL;
3291     for(i = 0; i < last_ram_offset; i+= BDRV_HASH_BLOCK_SIZE) {
3292         if (ram_decompress_buf(s, buf, 1) < 0) {
3293             fprintf(stderr, "Error while reading ram block header\n");
3294             goto error;
3295         }
3296         if (buf[0] == 0) {
3297             if (ram_decompress_buf(s, qemu_get_ram_ptr(i),
3298                                    BDRV_HASH_BLOCK_SIZE) < 0) {
3299                 fprintf(stderr, "Error while reading ram block address=0x%08" PRIx64, (uint64_t)i);
3300                 goto error;
3301             }
3302         } else {
3303         error:
3304             printf("Error block header\n");
3305             return -EINVAL;
3306         }
3307     }
3308     ram_decompress_close(s);
3309
3310     return 0;
3311 }
3312
3313 static int ram_load(QEMUFile *f, void *opaque, int version_id)
3314 {
3315     ram_addr_t addr;
3316     int flags;
3317
3318     if (version_id == 1)
3319         return ram_load_v1(f, opaque);
3320
3321     if (version_id == 2) {
3322         if (qemu_get_be32(f) != last_ram_offset)
3323             return -EINVAL;
3324         return ram_load_dead(f, opaque);
3325     }
3326
3327     if (version_id != 3)
3328         return -EINVAL;
3329
3330     do {
3331         addr = qemu_get_be64(f);
3332
3333         flags = addr & ~TARGET_PAGE_MASK;
3334         addr &= TARGET_PAGE_MASK;
3335
3336         if (flags & RAM_SAVE_FLAG_MEM_SIZE) {
3337             if (addr != last_ram_offset)
3338                 return -EINVAL;
3339         }
3340
3341         if (flags & RAM_SAVE_FLAG_FULL) {
3342             if (ram_load_dead(f, opaque) < 0)
3343                 return -EINVAL;
3344         }
3345         
3346         if (flags & RAM_SAVE_FLAG_COMPRESS) {
3347             uint8_t ch = qemu_get_byte(f);
3348             memset(qemu_get_ram_ptr(addr), ch, TARGET_PAGE_SIZE);
3349         } else if (flags & RAM_SAVE_FLAG_PAGE)
3350             qemu_get_buffer(f, qemu_get_ram_ptr(addr), TARGET_PAGE_SIZE);
3351     } while (!(flags & RAM_SAVE_FLAG_EOS));
3352
3353     return 0;
3354 }
3355
3356 void qemu_service_io(void)
3357 {
3358     qemu_notify_event();
3359 }
3360
3361 /***********************************************************/
3362 /* bottom halves (can be seen as timers which expire ASAP) */
3363
3364 struct QEMUBH {
3365     QEMUBHFunc *cb;
3366     void *opaque;
3367     int scheduled;
3368     int idle;
3369     int deleted;
3370     QEMUBH *next;
3371 };
3372
3373 static QEMUBH *first_bh = NULL;
3374
3375 QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque)
3376 {
3377     QEMUBH *bh;
3378     bh = qemu_mallocz(sizeof(QEMUBH));
3379     bh->cb = cb;
3380     bh->opaque = opaque;
3381     bh->next = first_bh;
3382     first_bh = bh;
3383     return bh;
3384 }
3385
3386 int qemu_bh_poll(void)
3387 {
3388     QEMUBH *bh, **bhp;
3389     int ret;
3390
3391     ret = 0;
3392     for (bh = first_bh; bh; bh = bh->next) {
3393         if (!bh->deleted && bh->scheduled) {
3394             bh->scheduled = 0;
3395             if (!bh->idle)
3396                 ret = 1;
3397             bh->idle = 0;
3398             bh->cb(bh->opaque);
3399         }
3400     }
3401
3402     /* remove deleted bhs */
3403     bhp = &first_bh;
3404     while (*bhp) {
3405         bh = *bhp;
3406         if (bh->deleted) {
3407             *bhp = bh->next;
3408             qemu_free(bh);
3409         } else
3410             bhp = &bh->next;
3411     }
3412
3413     return ret;
3414 }
3415
3416 void qemu_bh_schedule_idle(QEMUBH *bh)
3417 {
3418     if (bh->scheduled)
3419         return;
3420     bh->scheduled = 1;
3421     bh->idle = 1;
3422 }
3423
3424 void qemu_bh_schedule(QEMUBH *bh)
3425 {
3426     if (bh->scheduled)
3427         return;
3428     bh->scheduled = 1;
3429     bh->idle = 0;
3430     /* stop the currently executing CPU to execute the BH ASAP */
3431     qemu_notify_event();
3432 }
3433
3434 void qemu_bh_cancel(QEMUBH *bh)
3435 {
3436     bh->scheduled = 0;
3437 }
3438
3439 void qemu_bh_delete(QEMUBH *bh)
3440 {
3441     bh->scheduled = 0;
3442     bh->deleted = 1;
3443 }
3444
3445 static void qemu_bh_update_timeout(int *timeout)
3446 {
3447     QEMUBH *bh;
3448
3449     for (bh = first_bh; bh; bh = bh->next) {
3450         if (!bh->deleted && bh->scheduled) {
3451             if (bh->idle) {
3452                 /* idle bottom halves will be polled at least
3453                  * every 10ms */
3454                 *timeout = MIN(10, *timeout);
3455             } else {
3456                 /* non-idle bottom halves will be executed
3457                  * immediately */
3458                 *timeout = 0;
3459                 break;
3460             }
3461         }
3462     }
3463 }
3464
3465 /***********************************************************/
3466 /* machine registration */
3467
3468 static QEMUMachine *first_machine = NULL;
3469 QEMUMachine *current_machine = NULL;
3470
3471 int qemu_register_machine(QEMUMachine *m)
3472 {
3473     QEMUMachine **pm;
3474     pm = &first_machine;
3475     while (*pm != NULL)
3476         pm = &(*pm)->next;
3477     m->next = NULL;
3478     *pm = m;
3479     return 0;
3480 }
3481
3482 static QEMUMachine *find_machine(const char *name)
3483 {
3484     QEMUMachine *m;
3485
3486     for(m = first_machine; m != NULL; m = m->next) {
3487         if (!strcmp(m->name, name))
3488             return m;
3489     }
3490     return NULL;
3491 }
3492
3493 /***********************************************************/
3494 /* main execution loop */
3495
3496 static void gui_update(void *opaque)
3497 {
3498     uint64_t interval = GUI_REFRESH_INTERVAL;
3499     DisplayState *ds = opaque;
3500     DisplayChangeListener *dcl = ds->listeners;
3501
3502     dpy_refresh(ds);
3503
3504     while (dcl != NULL) {
3505         if (dcl->gui_timer_interval &&
3506             dcl->gui_timer_interval < interval)
3507             interval = dcl->gui_timer_interval;
3508         dcl = dcl->next;
3509     }
3510     qemu_mod_timer(ds->gui_timer, interval + qemu_get_clock(rt_clock));
3511 }
3512
3513 static void nographic_update(void *opaque)
3514 {
3515     uint64_t interval = GUI_REFRESH_INTERVAL;
3516
3517     qemu_mod_timer(nographic_timer, interval + qemu_get_clock(rt_clock));
3518 }
3519
3520 struct vm_change_state_entry {
3521     VMChangeStateHandler *cb;
3522     void *opaque;
3523     LIST_ENTRY (vm_change_state_entry) entries;
3524 };
3525
3526 static LIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head;
3527
3528 VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
3529                                                      void *opaque)
3530 {
3531     VMChangeStateEntry *e;
3532
3533     e = qemu_mallocz(sizeof (*e));
3534
3535     e->cb = cb;
3536     e->opaque = opaque;
3537     LIST_INSERT_HEAD(&vm_change_state_head, e, entries);
3538     return e;
3539 }
3540
3541 void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
3542 {
3543     LIST_REMOVE (e, entries);
3544     qemu_free (e);
3545 }
3546
3547 static void vm_state_notify(int running, int reason)
3548 {
3549     VMChangeStateEntry *e;
3550
3551     for (e = vm_change_state_head.lh_first; e; e = e->entries.le_next) {
3552         e->cb(e->opaque, running, reason);
3553     }
3554 }
3555
3556 static void resume_all_vcpus(void);
3557 static void pause_all_vcpus(void);
3558
3559 void vm_start(void)
3560 {
3561     if (!vm_running) {
3562         cpu_enable_ticks();
3563         vm_running = 1;
3564         vm_state_notify(1, 0);
3565         qemu_rearm_alarm_timer(alarm_timer);
3566         resume_all_vcpus();
3567     }
3568 }
3569
3570 /* reset/shutdown handler */
3571
3572 typedef struct QEMUResetEntry {
3573     QEMUResetHandler *func;
3574     void *opaque;
3575     struct QEMUResetEntry *next;
3576 } QEMUResetEntry;
3577
3578 static QEMUResetEntry *first_reset_entry;
3579 static int reset_requested;
3580 static int shutdown_requested;
3581 static int powerdown_requested;
3582 static int debug_requested;
3583 static int vmstop_requested;
3584
3585 int qemu_shutdown_requested(void)
3586 {
3587     int r = shutdown_requested;
3588     shutdown_requested = 0;
3589     return r;
3590 }
3591
3592 int qemu_reset_requested(void)
3593 {
3594     int r = reset_requested;
3595     reset_requested = 0;
3596     return r;
3597 }
3598
3599 int qemu_powerdown_requested(void)
3600 {
3601     int r = powerdown_requested;
3602     powerdown_requested = 0;
3603     return r;
3604 }
3605
3606 static int qemu_debug_requested(void)
3607 {
3608     int r = debug_requested;
3609     debug_requested = 0;
3610     return r;
3611 }
3612
3613 static int qemu_vmstop_requested(void)
3614 {
3615     int r = vmstop_requested;
3616     vmstop_requested = 0;
3617     return r;
3618 }
3619
3620 static void do_vm_stop(int reason)
3621 {
3622     if (vm_running) {
3623         cpu_disable_ticks();
3624         vm_running = 0;
3625         pause_all_vcpus();
3626         vm_state_notify(0, reason);
3627     }
3628 }
3629
3630 void qemu_register_reset(QEMUResetHandler *func, void *opaque)
3631 {
3632     QEMUResetEntry **pre, *re;
3633
3634     pre = &first_reset_entry;
3635     while (*pre != NULL)
3636         pre = &(*pre)->next;
3637     re = qemu_mallocz(sizeof(QEMUResetEntry));
3638     re->func = func;
3639     re->opaque = opaque;
3640     re->next = NULL;
3641     *pre = re;
3642 }
3643
3644 void qemu_system_reset(void)
3645 {
3646     QEMUResetEntry *re;
3647
3648     /* reset all devices */
3649     for(re = first_reset_entry; re != NULL; re = re->next) {
3650         re->func(re->opaque);
3651     }
3652     if (kvm_enabled())
3653         kvm_sync_vcpus();
3654 }
3655
3656 void qemu_system_reset_request(void)
3657 {
3658     if (no_reboot) {
3659         shutdown_requested = 1;
3660     } else {
3661         reset_requested = 1;
3662     }
3663     qemu_notify_event();
3664 }
3665
3666 void qemu_system_shutdown_request(void)
3667 {
3668     shutdown_requested = 1;
3669     qemu_notify_event();
3670 }
3671
3672 void qemu_system_powerdown_request(void)
3673 {
3674     powerdown_requested = 1;
3675     qemu_notify_event();
3676 }
3677
3678 #ifdef CONFIG_IOTHREAD
3679 static void qemu_system_vmstop_request(int reason)
3680 {
3681     vmstop_requested = reason;
3682     qemu_notify_event();
3683 }
3684 #endif
3685
3686 #ifndef _WIN32
3687 static int io_thread_fd = -1;
3688
3689 static void qemu_event_increment(void)
3690 {
3691     static const char byte = 0;
3692
3693     if (io_thread_fd == -1)
3694         return;
3695
3696     write(io_thread_fd, &byte, sizeof(byte));
3697 }
3698
3699 static void qemu_event_read(void *opaque)
3700 {
3701     int fd = (unsigned long)opaque;
3702     ssize_t len;
3703
3704     /* Drain the notify pipe */
3705     do {
3706         char buffer[512];
3707         len = read(fd, buffer, sizeof(buffer));
3708     } while ((len == -1 && errno == EINTR) || len > 0);
3709 }
3710
3711 static int qemu_event_init(void)
3712 {
3713     int err;
3714     int fds[2];
3715
3716     err = pipe(fds);
3717     if (err == -1)
3718         return -errno;
3719
3720     err = fcntl_setfl(fds[0], O_NONBLOCK);
3721     if (err < 0)
3722         goto fail;
3723
3724     err = fcntl_setfl(fds[1], O_NONBLOCK);
3725     if (err < 0)
3726         goto fail;
3727
3728     qemu_set_fd_handler2(fds[0], NULL, qemu_event_read, NULL,
3729                          (void *)(unsigned long)fds[0]);
3730
3731     io_thread_fd = fds[1];
3732     return 0;
3733
3734 fail:
3735     close(fds[0]);
3736     close(fds[1]);
3737     return err;
3738 }
3739 #else
3740 HANDLE qemu_event_handle;
3741
3742 static void dummy_event_handler(void *opaque)
3743 {
3744 }
3745
3746 static int qemu_event_init(void)
3747 {
3748     qemu_event_handle = CreateEvent(NULL, FALSE, FALSE, NULL);
3749     if (!qemu_event_handle) {
3750         perror("Failed CreateEvent");
3751         return -1;
3752     }
3753     qemu_add_wait_object(qemu_event_handle, dummy_event_handler, NULL);
3754     return 0;
3755 }
3756
3757 static void qemu_event_increment(void)
3758 {
3759     SetEvent(qemu_event_handle);
3760 }
3761 #endif
3762
3763 static int cpu_can_run(CPUState *env)
3764 {
3765     if (env->stop)
3766         return 0;
3767     if (env->stopped)
3768         return 0;
3769     return 1;
3770 }
3771
3772 #ifndef CONFIG_IOTHREAD
3773 static int qemu_init_main_loop(void)
3774 {
3775     return qemu_event_init();
3776 }
3777
3778 void qemu_init_vcpu(void *_env)
3779 {
3780     CPUState *env = _env;
3781
3782     if (kvm_enabled())
3783         kvm_init_vcpu(env);
3784     return;
3785 }
3786
3787 int qemu_cpu_self(void *env)
3788 {
3789     return 1;
3790 }
3791
3792 static void resume_all_vcpus(void)
3793 {
3794 }
3795
3796 static void pause_all_vcpus(void)
3797 {
3798 }
3799
3800 void qemu_cpu_kick(void *env)
3801 {
3802     return;
3803 }
3804
3805 void qemu_notify_event(void)
3806 {
3807     CPUState *env = cpu_single_env;
3808
3809     if (env) {
3810         cpu_exit(env);
3811 #ifdef USE_KQEMU
3812         if (env->kqemu_enabled)
3813             kqemu_cpu_interrupt(env);
3814 #endif
3815      }
3816 }
3817
3818 #define qemu_mutex_lock_iothread() do { } while (0)
3819 #define qemu_mutex_unlock_iothread() do { } while (0)
3820
3821 void vm_stop(int reason)
3822 {
3823     do_vm_stop(reason);
3824 }
3825
3826 #else /* CONFIG_IOTHREAD */
3827
3828 #include "qemu-thread.h"
3829
3830 QemuMutex qemu_global_mutex;
3831 static QemuMutex qemu_fair_mutex;
3832
3833 static QemuThread io_thread;
3834
3835 static QemuThread *tcg_cpu_thread;
3836 static QemuCond *tcg_halt_cond;
3837
3838 static int qemu_system_ready;
3839 /* cpu creation */
3840 static QemuCond qemu_cpu_cond;
3841 /* system init */
3842 static QemuCond qemu_system_cond;
3843 static QemuCond qemu_pause_cond;
3844
3845 static void block_io_signals(void);
3846 static void unblock_io_signals(void);
3847 static int tcg_has_work(void);
3848
3849 static int qemu_init_main_loop(void)
3850 {
3851     int ret;
3852
3853     ret = qemu_event_init();
3854     if (ret)
3855         return ret;
3856
3857     qemu_cond_init(&qemu_pause_cond);
3858     qemu_mutex_init(&qemu_fair_mutex);
3859     qemu_mutex_init(&qemu_global_mutex);
3860     qemu_mutex_lock(&qemu_global_mutex);
3861
3862     unblock_io_signals();
3863     qemu_thread_self(&io_thread);
3864
3865     return 0;
3866 }
3867
3868 static void qemu_wait_io_event(CPUState *env)
3869 {
3870     while (!tcg_has_work())
3871         qemu_cond_timedwait(env->halt_cond, &qemu_global_mutex, 1000);
3872
3873     qemu_mutex_unlock(&qemu_global_mutex);
3874
3875     /*
3876      * Users of qemu_global_mutex can be starved, having no chance
3877      * to acquire it since this path will get to it first.
3878      * So use another lock to provide fairness.
3879      */
3880     qemu_mutex_lock(&qemu_fair_mutex);
3881     qemu_mutex_unlock(&qemu_fair_mutex);
3882
3883     qemu_mutex_lock(&qemu_global_mutex);
3884     if (env->stop) {
3885         env->stop = 0;
3886         env->stopped = 1;
3887         qemu_cond_signal(&qemu_pause_cond);
3888     }
3889 }
3890
3891 static int qemu_cpu_exec(CPUState *env);
3892
3893 static void *kvm_cpu_thread_fn(void *arg)
3894 {
3895     CPUState *env = arg;
3896
3897     block_io_signals();
3898     qemu_thread_self(env->thread);
3899
3900     /* signal CPU creation */
3901     qemu_mutex_lock(&qemu_global_mutex);
3902     env->created = 1;
3903     qemu_cond_signal(&qemu_cpu_cond);
3904
3905     /* and wait for machine initialization */
3906     while (!qemu_system_ready)
3907         qemu_cond_timedwait(&qemu_system_cond, &qemu_global_mutex, 100);
3908
3909     while (1) {
3910         if (cpu_can_run(env))
3911             qemu_cpu_exec(env);
3912         qemu_wait_io_event(env);
3913     }
3914
3915     return NULL;
3916 }
3917
3918 static void tcg_cpu_exec(void);
3919
3920 static void *tcg_cpu_thread_fn(void *arg)
3921 {
3922     CPUState *env = arg;
3923
3924     block_io_signals();
3925     qemu_thread_self(env->thread);
3926
3927     /* signal CPU creation */
3928     qemu_mutex_lock(&qemu_global_mutex);
3929     for (env = first_cpu; env != NULL; env = env->next_cpu)
3930         env->created = 1;
3931     qemu_cond_signal(&qemu_cpu_cond);
3932
3933     /* and wait for machine initialization */
3934     while (!qemu_system_ready)
3935         qemu_cond_timedwait(&qemu_system_cond, &qemu_global_mutex, 100);
3936
3937     while (1) {
3938         tcg_cpu_exec();
3939         qemu_wait_io_event(cur_cpu);
3940     }
3941
3942     return NULL;
3943 }
3944
3945 void qemu_cpu_kick(void *_env)
3946 {
3947     CPUState *env = _env;
3948     qemu_cond_broadcast(env->halt_cond);
3949     if (kvm_enabled())
3950         qemu_thread_signal(env->thread, SIGUSR1);
3951 }
3952
3953 int qemu_cpu_self(void *env)
3954 {
3955     return (cpu_single_env != NULL);
3956 }
3957
3958 static void cpu_signal(int sig)
3959 {
3960     if (cpu_single_env)
3961         cpu_exit(cpu_single_env);
3962 }
3963
3964 static void block_io_signals(void)
3965 {
3966     sigset_t set;
3967     struct sigaction sigact;
3968
3969     sigemptyset(&set);
3970     sigaddset(&set, SIGUSR2);
3971     sigaddset(&set, SIGIO);
3972     sigaddset(&set, SIGALRM);
3973     pthread_sigmask(SIG_BLOCK, &set, NULL);
3974
3975     sigemptyset(&set);
3976     sigaddset(&set, SIGUSR1);
3977     pthread_sigmask(SIG_UNBLOCK, &set, NULL);
3978
3979     memset(&sigact, 0, sizeof(sigact));
3980     sigact.sa_handler = cpu_signal;
3981     sigaction(SIGUSR1, &sigact, NULL);
3982 }
3983
3984 static void unblock_io_signals(void)
3985 {
3986     sigset_t set;
3987
3988     sigemptyset(&set);
3989     sigaddset(&set, SIGUSR2);
3990     sigaddset(&set, SIGIO);
3991     sigaddset(&set, SIGALRM);
3992     pthread_sigmask(SIG_UNBLOCK, &set, NULL);
3993
3994     sigemptyset(&set);
3995     sigaddset(&set, SIGUSR1);
3996     pthread_sigmask(SIG_BLOCK, &set, NULL);
3997 }
3998
3999 static void qemu_signal_lock(unsigned int msecs)
4000 {
4001     qemu_mutex_lock(&qemu_fair_mutex);
4002
4003     while (qemu_mutex_trylock(&qemu_global_mutex)) {
4004         qemu_thread_signal(tcg_cpu_thread, SIGUSR1);
4005         if (!qemu_mutex_timedlock(&qemu_global_mutex, msecs))
4006             break;
4007     }
4008     qemu_mutex_unlock(&qemu_fair_mutex);
4009 }
4010
4011 static void qemu_mutex_lock_iothread(void)
4012 {
4013     if (kvm_enabled()) {
4014         qemu_mutex_lock(&qemu_fair_mutex);
4015         qemu_mutex_lock(&qemu_global_mutex);
4016         qemu_mutex_unlock(&qemu_fair_mutex);
4017     } else
4018         qemu_signal_lock(100);
4019 }
4020
4021 static void qemu_mutex_unlock_iothread(void)
4022 {
4023     qemu_mutex_unlock(&qemu_global_mutex);
4024 }
4025
4026 static int all_vcpus_paused(void)
4027 {
4028     CPUState *penv = first_cpu;
4029
4030     while (penv) {
4031         if (!penv->stopped)
4032             return 0;
4033         penv = (CPUState *)penv->next_cpu;
4034     }
4035
4036     return 1;
4037 }
4038
4039 static void pause_all_vcpus(void)
4040 {
4041     CPUState *penv = first_cpu;
4042
4043     while (penv) {
4044         penv->stop = 1;
4045         qemu_thread_signal(penv->thread, SIGUSR1);
4046         qemu_cpu_kick(penv);
4047         penv = (CPUState *)penv->next_cpu;
4048     }
4049
4050     while (!all_vcpus_paused()) {
4051         qemu_cond_timedwait(&qemu_pause_cond, &qemu_global_mutex, 100);
4052         penv = first_cpu;
4053         while (penv) {
4054             qemu_thread_signal(penv->thread, SIGUSR1);
4055             penv = (CPUState *)penv->next_cpu;
4056         }
4057     }
4058 }
4059
4060 static void resume_all_vcpus(void)
4061 {
4062     CPUState *penv = first_cpu;
4063
4064     while (penv) {
4065         penv->stop = 0;
4066         penv->stopped = 0;
4067         qemu_thread_signal(penv->thread, SIGUSR1);
4068         qemu_cpu_kick(penv);
4069         penv = (CPUState *)penv->next_cpu;
4070     }
4071 }
4072
4073 static void tcg_init_vcpu(void *_env)
4074 {
4075     CPUState *env = _env;
4076     /* share a single thread for all cpus with TCG */
4077     if (!tcg_cpu_thread) {
4078         env->thread = qemu_mallocz(sizeof(QemuThread));
4079         env->halt_cond = qemu_mallocz(sizeof(QemuCond));
4080         qemu_cond_init(env->halt_cond);
4081         qemu_thread_create(env->thread, tcg_cpu_thread_fn, env);
4082         while (env->created == 0)
4083             qemu_cond_timedwait(&qemu_cpu_cond, &qemu_global_mutex, 100);
4084         tcg_cpu_thread = env->thread;
4085         tcg_halt_cond = env->halt_cond;
4086     } else {
4087         env->thread = tcg_cpu_thread;
4088         env->halt_cond = tcg_halt_cond;
4089     }
4090 }
4091
4092 static void kvm_start_vcpu(CPUState *env)
4093 {
4094     kvm_init_vcpu(env);
4095     env->thread = qemu_mallocz(sizeof(QemuThread));
4096     env->halt_cond = qemu_mallocz(sizeof(QemuCond));
4097     qemu_cond_init(env->halt_cond);
4098     qemu_thread_create(env->thread, kvm_cpu_thread_fn, env);
4099     while (env->created == 0)
4100         qemu_cond_timedwait(&qemu_cpu_cond, &qemu_global_mutex, 100);
4101 }
4102
4103 void qemu_init_vcpu(void *_env)
4104 {
4105     CPUState *env = _env;
4106
4107     if (kvm_enabled())
4108         kvm_start_vcpu(env);
4109     else
4110         tcg_init_vcpu(env);
4111 }
4112
4113 void qemu_notify_event(void)
4114 {
4115     qemu_event_increment();
4116 }
4117
4118 void vm_stop(int reason)
4119 {
4120     QemuThread me;
4121     qemu_thread_self(&me);
4122
4123     if (!qemu_thread_equal(&me, &io_thread)) {
4124         qemu_system_vmstop_request(reason);
4125         /*
4126          * FIXME: should not return to device code in case
4127          * vm_stop() has been requested.
4128          */
4129         if (cpu_single_env) {
4130             cpu_exit(cpu_single_env);
4131             cpu_single_env->stop = 1;
4132         }
4133         return;
4134     }
4135     do_vm_stop(reason);
4136 }
4137
4138 #endif
4139
4140
4141 #ifdef _WIN32
4142 static void host_main_loop_wait(int *timeout)
4143 {
4144     int ret, ret2, i;
4145     PollingEntry *pe;
4146
4147
4148     /* XXX: need to suppress polling by better using win32 events */
4149     ret = 0;
4150     for(pe = first_polling_entry; pe != NULL; pe = pe->next) {
4151         ret |= pe->func(pe->opaque);
4152     }
4153     if (ret == 0) {
4154         int err;
4155         WaitObjects *w = &wait_objects;
4156
4157         ret = WaitForMultipleObjects(w->num, w->events, FALSE, *timeout);
4158         if (WAIT_OBJECT_0 + 0 <= ret && ret <= WAIT_OBJECT_0 + w->num - 1) {
4159             if (w->func[ret - WAIT_OBJECT_0])
4160                 w->func[ret - WAIT_OBJECT_0](w->opaque[ret - WAIT_OBJECT_0]);
4161
4162             /* Check for additional signaled events */
4163             for(i = (ret - WAIT_OBJECT_0 + 1); i < w->num; i++) {
4164
4165                 /* Check if event is signaled */
4166                 ret2 = WaitForSingleObject(w->events[i], 0);
4167                 if(ret2 == WAIT_OBJECT_0) {
4168                     if (w->func[i])
4169                         w->func[i](w->opaque[i]);
4170                 } else if (ret2 == WAIT_TIMEOUT) {
4171                 } else {
4172                     err = GetLastError();
4173                     fprintf(stderr, "WaitForSingleObject error %d %d\n", i, err);
4174                 }
4175             }
4176         } else if (ret == WAIT_TIMEOUT) {
4177         } else {
4178             err = GetLastError();
4179             fprintf(stderr, "WaitForMultipleObjects error %d %d\n", ret, err);
4180         }
4181     }
4182
4183     *timeout = 0;
4184 }
4185 #else
4186 static void host_main_loop_wait(int *timeout)
4187 {
4188 }
4189 #endif
4190
4191 void main_loop_wait(int timeout)
4192 {
4193     IOHandlerRecord *ioh;
4194     fd_set rfds, wfds, xfds;
4195     int ret, nfds;
4196     struct timeval tv;
4197
4198     qemu_bh_update_timeout(&timeout);
4199
4200     host_main_loop_wait(&timeout);
4201
4202     /* poll any events */
4203     /* XXX: separate device handlers from system ones */
4204     nfds = -1;
4205     FD_ZERO(&rfds);
4206     FD_ZERO(&wfds);
4207     FD_ZERO(&xfds);
4208     for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
4209         if (ioh->deleted)
4210             continue;
4211         if (ioh->fd_read &&
4212             (!ioh->fd_read_poll ||
4213              ioh->fd_read_poll(ioh->opaque) != 0)) {
4214             FD_SET(ioh->fd, &rfds);
4215             if (ioh->fd > nfds)
4216                 nfds = ioh->fd;
4217         }
4218         if (ioh->fd_write) {
4219             FD_SET(ioh->fd, &wfds);
4220             if (ioh->fd > nfds)
4221                 nfds = ioh->fd;
4222         }
4223     }
4224
4225     tv.tv_sec = timeout / 1000;
4226     tv.tv_usec = (timeout % 1000) * 1000;
4227
4228 #if defined(CONFIG_SLIRP)
4229     if (slirp_is_inited()) {
4230         slirp_select_fill(&nfds, &rfds, &wfds, &xfds);
4231     }
4232 #endif
4233     qemu_mutex_unlock_iothread();
4234     ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv);
4235     qemu_mutex_lock_iothread();
4236     if (ret > 0) {
4237         IOHandlerRecord **pioh;
4238
4239         for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
4240             if (!ioh->deleted && ioh->fd_read && FD_ISSET(ioh->fd, &rfds)) {
4241                 ioh->fd_read(ioh->opaque);
4242             }
4243             if (!ioh->deleted && ioh->fd_write && FD_ISSET(ioh->fd, &wfds)) {
4244                 ioh->fd_write(ioh->opaque);
4245             }
4246         }
4247
4248         /* remove deleted IO handlers */
4249         pioh = &first_io_handler;
4250         while (*pioh) {
4251             ioh = *pioh;
4252             if (ioh->deleted) {
4253                 *pioh = ioh->next;
4254                 qemu_free(ioh);
4255             } else
4256                 pioh = &ioh->next;
4257         }
4258     }
4259 #if defined(CONFIG_SLIRP)
4260     if (slirp_is_inited()) {
4261         if (ret < 0) {
4262             FD_ZERO(&rfds);
4263             FD_ZERO(&wfds);
4264             FD_ZERO(&xfds);
4265         }
4266         slirp_select_poll(&rfds, &wfds, &xfds);
4267     }
4268 #endif
4269
4270     /* rearm timer, if not periodic */
4271     if (alarm_timer->flags & ALARM_FLAG_EXPIRED) {
4272         alarm_timer->flags &= ~ALARM_FLAG_EXPIRED;
4273         qemu_rearm_alarm_timer(alarm_timer);
4274     }
4275
4276     /* vm time timers */
4277     if (vm_running) {
4278         if (!cur_cpu || likely(!(cur_cpu->singlestep_enabled & SSTEP_NOTIMER)))
4279             qemu_run_timers(&active_timers[QEMU_TIMER_VIRTUAL],
4280                 qemu_get_clock(vm_clock));
4281     }
4282
4283     /* real time timers */
4284     qemu_run_timers(&active_timers[QEMU_TIMER_REALTIME],
4285                     qemu_get_clock(rt_clock));
4286
4287     /* Check bottom-halves last in case any of the earlier events triggered
4288        them.  */
4289     qemu_bh_poll();
4290
4291 }
4292
4293 static int qemu_cpu_exec(CPUState *env)
4294 {
4295     int ret;
4296 #ifdef CONFIG_PROFILER
4297     int64_t ti;
4298 #endif
4299
4300 #ifdef CONFIG_PROFILER
4301     ti = profile_getclock();
4302 #endif
4303     if (use_icount) {
4304         int64_t count;
4305         int decr;
4306         qemu_icount -= (env->icount_decr.u16.low + env->icount_extra);
4307         env->icount_decr.u16.low = 0;
4308         env->icount_extra = 0;
4309         count = qemu_next_deadline();
4310         count = (count + (1 << icount_time_shift) - 1)
4311                 >> icount_time_shift;
4312         qemu_icount += count;
4313         decr = (count > 0xffff) ? 0xffff : count;
4314         count -= decr;
4315         env->icount_decr.u16.low = decr;
4316         env->icount_extra = count;
4317     }
4318     ret = cpu_exec(env);
4319 #ifdef CONFIG_PROFILER
4320     qemu_time += profile_getclock() - ti;
4321 #endif
4322     if (use_icount) {
4323         /* Fold pending instructions back into the
4324            instruction counter, and clear the interrupt flag.  */
4325         qemu_icount -= (env->icount_decr.u16.low
4326                         + env->icount_extra);
4327         env->icount_decr.u32 = 0;
4328         env->icount_extra = 0;
4329     }
4330     return ret;
4331 }
4332
4333 static void tcg_cpu_exec(void)
4334 {
4335     int ret = 0;
4336
4337     if (next_cpu == NULL)
4338         next_cpu = first_cpu;
4339     for (; next_cpu != NULL; next_cpu = next_cpu->next_cpu) {
4340         CPUState *env = cur_cpu = next_cpu;
4341
4342         if (!vm_running)
4343             break;
4344         if (timer_alarm_pending) {
4345             timer_alarm_pending = 0;
4346             break;
4347         }
4348         if (cpu_can_run(env))
4349             ret = qemu_cpu_exec(env);
4350         if (ret == EXCP_DEBUG) {
4351             gdb_set_stop_cpu(env);
4352             debug_requested = 1;
4353             break;
4354         }
4355     }
4356 }
4357
4358 static int cpu_has_work(CPUState *env)
4359 {
4360     if (env->stop)
4361         return 1;
4362     if (env->stopped)
4363         return 0;
4364     if (!env->halted)
4365         return 1;
4366     if (qemu_cpu_has_work(env))
4367         return 1;
4368     return 0;
4369 }
4370
4371 static int tcg_has_work(void)
4372 {
4373     CPUState *env;
4374
4375     for (env = first_cpu; env != NULL; env = env->next_cpu)
4376         if (cpu_has_work(env))
4377             return 1;
4378     return 0;
4379 }
4380
4381 static int qemu_calculate_timeout(void)
4382 {
4383     int timeout;
4384
4385     if (!vm_running)
4386         timeout = 5000;
4387     else if (tcg_has_work())
4388         timeout = 0;
4389     else if (!use_icount)
4390         timeout = 5000;
4391     else {
4392      /* XXX: use timeout computed from timers */
4393         int64_t add;
4394         int64_t delta;
4395         /* Advance virtual time to the next event.  */
4396         if (use_icount == 1) {
4397             /* When not using an adaptive execution frequency
4398                we tend to get badly out of sync with real time,
4399                so just delay for a reasonable amount of time.  */
4400             delta = 0;
4401         } else {
4402             delta = cpu_get_icount() - cpu_get_clock();
4403         }
4404         if (delta > 0) {
4405             /* If virtual time is ahead of real time then just
4406                wait for IO.  */
4407             timeout = (delta / 1000000) + 1;
4408         } else {
4409             /* Wait for either IO to occur or the next
4410                timer event.  */
4411             add = qemu_next_deadline();
4412             /* We advance the timer before checking for IO.
4413                Limit the amount we advance so that early IO
4414                activity won't get the guest too far ahead.  */
4415             if (add > 10000000)
4416                 add = 10000000;
4417             delta += add;
4418             add = (add + (1 << icount_time_shift) - 1)
4419                   >> icount_time_shift;
4420             qemu_icount += add;
4421             timeout = delta / 1000000;
4422             if (timeout < 0)
4423                 timeout = 0;
4424         }
4425     }
4426
4427     return timeout;
4428 }
4429
4430 static int vm_can_run(void)
4431 {
4432     if (powerdown_requested)
4433         return 0;
4434     if (reset_requested)
4435         return 0;
4436     if (shutdown_requested)
4437         return 0;
4438     if (debug_requested)
4439         return 0;
4440     return 1;
4441 }
4442
4443 static void main_loop(void)
4444 {
4445     int r;
4446
4447 #ifdef CONFIG_IOTHREAD
4448     qemu_system_ready = 1;
4449     qemu_cond_broadcast(&qemu_system_cond);
4450 #endif
4451
4452     for (;;) {
4453         do {
4454 #ifdef CONFIG_PROFILER
4455             int64_t ti;
4456 #endif
4457 #ifndef CONFIG_IOTHREAD
4458             tcg_cpu_exec();
4459 #endif
4460 #ifdef CONFIG_PROFILER
4461             ti = profile_getclock();
4462 #endif
4463 #ifdef CONFIG_IOTHREAD
4464             main_loop_wait(1000);
4465 #else
4466             main_loop_wait(qemu_calculate_timeout());
4467 #endif
4468 #ifdef CONFIG_PROFILER
4469             dev_time += profile_getclock() - ti;
4470 #endif
4471         } while (vm_can_run());
4472
4473         if (qemu_debug_requested())
4474             vm_stop(EXCP_DEBUG);
4475         if (qemu_shutdown_requested()) {
4476             if (no_shutdown) {
4477                 vm_stop(0);
4478                 no_shutdown = 0;
4479             } else
4480                 break;
4481         }
4482         if (qemu_reset_requested()) {
4483             pause_all_vcpus();
4484             qemu_system_reset();
4485             resume_all_vcpus();
4486         }
4487         if (qemu_powerdown_requested())
4488             qemu_system_powerdown();
4489         if ((r = qemu_vmstop_requested()))
4490             vm_stop(r);
4491     }
4492     pause_all_vcpus();
4493 }
4494
4495 static void version(void)
4496 {
4497     printf("QEMU PC emulator version " QEMU_VERSION QEMU_PKGVERSION ", Copyright (c) 2003-2008 Fabrice Bellard\n");
4498 }
4499
4500 static void help(int exitcode)
4501 {
4502     version();
4503     printf("usage: %s [options] [disk_image]\n"
4504            "\n"
4505            "'disk_image' is a raw hard image image for IDE hard disk 0\n"
4506            "\n"
4507 #define DEF(option, opt_arg, opt_enum, opt_help)        \
4508            opt_help
4509 #define DEFHEADING(text) stringify(text) "\n"
4510 #include "qemu-options.h"
4511 #undef DEF
4512 #undef DEFHEADING
4513 #undef GEN_DOCS
4514            "\n"
4515            "During emulation, the following keys are useful:\n"
4516            "ctrl-alt-f      toggle full screen\n"
4517            "ctrl-alt-n      switch to virtual console 'n'\n"
4518            "ctrl-alt        toggle mouse and keyboard grab\n"
4519            "\n"
4520            "When using -nographic, press 'ctrl-a h' to get some help.\n"
4521            ,
4522            "qemu",
4523            DEFAULT_RAM_SIZE,
4524 #ifndef _WIN32
4525            DEFAULT_NETWORK_SCRIPT,
4526            DEFAULT_NETWORK_DOWN_SCRIPT,
4527 #endif
4528            DEFAULT_GDBSTUB_PORT,
4529            "/tmp/qemu.log");
4530     exit(exitcode);
4531 }
4532
4533 #define HAS_ARG 0x0001
4534
4535 enum {
4536 #define DEF(option, opt_arg, opt_enum, opt_help)        \
4537     opt_enum,
4538 #define DEFHEADING(text)
4539 #include "qemu-options.h"
4540 #undef DEF
4541 #undef DEFHEADING
4542 #undef GEN_DOCS
4543 };
4544
4545 typedef struct QEMUOption {
4546     const char *name;
4547     int flags;
4548     int index;
4549 } QEMUOption;
4550
4551 static const QEMUOption qemu_options[] = {
4552     { "h", 0, QEMU_OPTION_h },
4553 #define DEF(option, opt_arg, opt_enum, opt_help)        \
4554     { option, opt_arg, opt_enum },
4555 #define DEFHEADING(text)
4556 #include "qemu-options.h"
4557 #undef DEF
4558 #undef DEFHEADING
4559 #undef GEN_DOCS
4560     { NULL },
4561 };
4562
4563 #ifdef HAS_AUDIO
4564 struct soundhw soundhw[] = {
4565 #ifdef HAS_AUDIO_CHOICE
4566 #if defined(TARGET_I386) || defined(TARGET_MIPS)
4567     {
4568         "pcspk",
4569         "PC speaker",
4570         0,
4571         1,
4572         { .init_isa = pcspk_audio_init }
4573     },
4574 #endif
4575
4576 #ifdef CONFIG_SB16
4577     {
4578         "sb16",
4579         "Creative Sound Blaster 16",
4580         0,
4581         1,
4582         { .init_isa = SB16_init }
4583     },
4584 #endif
4585
4586 #ifdef CONFIG_CS4231A
4587     {
4588         "cs4231a",
4589         "CS4231A",
4590         0,
4591         1,
4592         { .init_isa = cs4231a_init }
4593     },
4594 #endif
4595
4596 #ifdef CONFIG_ADLIB
4597     {
4598         "adlib",
4599 #ifdef HAS_YMF262
4600         "Yamaha YMF262 (OPL3)",
4601 #else
4602         "Yamaha YM3812 (OPL2)",
4603 #endif
4604         0,
4605         1,
4606         { .init_isa = Adlib_init }
4607     },
4608 #endif
4609
4610 #ifdef CONFIG_GUS
4611     {
4612         "gus",
4613         "Gravis Ultrasound GF1",
4614         0,
4615         1,
4616         { .init_isa = GUS_init }
4617     },
4618 #endif
4619
4620 #ifdef CONFIG_AC97
4621     {
4622         "ac97",
4623         "Intel 82801AA AC97 Audio",
4624         0,
4625         0,
4626         { .init_pci = ac97_init }
4627     },
4628 #endif
4629
4630 #ifdef CONFIG_ES1370
4631     {
4632         "es1370",
4633         "ENSONIQ AudioPCI ES1370",
4634         0,
4635         0,
4636         { .init_pci = es1370_init }
4637     },
4638 #endif
4639
4640 #endif /* HAS_AUDIO_CHOICE */
4641
4642     { NULL, NULL, 0, 0, { NULL } }
4643 };
4644
4645 static void select_soundhw (const char *optarg)
4646 {
4647     struct soundhw *c;
4648
4649     if (*optarg == '?') {
4650     show_valid_cards:
4651
4652         printf ("Valid sound card names (comma separated):\n");
4653         for (c = soundhw; c->name; ++c) {
4654             printf ("%-11s %s\n", c->name, c->descr);
4655         }
4656         printf ("\n-soundhw all will enable all of the above\n");
4657         exit (*optarg != '?');
4658     }
4659     else {
4660         size_t l;
4661         const char *p;
4662         char *e;
4663         int bad_card = 0;
4664
4665         if (!strcmp (optarg, "all")) {
4666             for (c = soundhw; c->name; ++c) {
4667                 c->enabled = 1;
4668             }
4669             return;
4670         }
4671
4672         p = optarg;
4673         while (*p) {
4674             e = strchr (p, ',');
4675             l = !e ? strlen (p) : (size_t) (e - p);
4676
4677             for (c = soundhw; c->name; ++c) {
4678                 if (!strncmp (c->name, p, l)) {
4679                     c->enabled = 1;
4680                     break;
4681                 }
4682             }
4683
4684             if (!c->name) {
4685                 if (l > 80) {
4686                     fprintf (stderr,
4687                              "Unknown sound card name (too big to show)\n");
4688                 }
4689                 else {
4690                     fprintf (stderr, "Unknown sound card name `%.*s'\n",
4691                              (int) l, p);
4692                 }
4693                 bad_card = 1;
4694             }
4695             p += l + (e != NULL);
4696         }
4697
4698         if (bad_card)
4699             goto show_valid_cards;
4700     }
4701 }
4702 #endif
4703
4704 static void select_vgahw (const char *p)
4705 {
4706     const char *opts;
4707
4708     cirrus_vga_enabled = 0;
4709     std_vga_enabled = 0;
4710     vmsvga_enabled = 0;
4711     xenfb_enabled = 0;
4712     if (strstart(p, "std", &opts)) {
4713         std_vga_enabled = 1;
4714     } else if (strstart(p, "cirrus", &opts)) {
4715         cirrus_vga_enabled = 1;
4716     } else if (strstart(p, "vmware", &opts)) {
4717         vmsvga_enabled = 1;
4718     } else if (strstart(p, "xenfb", &opts)) {
4719         xenfb_enabled = 1;
4720     } else if (!strstart(p, "none", &opts)) {
4721     invalid_vga:
4722         fprintf(stderr, "Unknown vga type: %s\n", p);
4723         exit(1);
4724     }
4725     while (*opts) {
4726         const char *nextopt;
4727
4728         if (strstart(opts, ",retrace=", &nextopt)) {
4729             opts = nextopt;
4730             if (strstart(opts, "dumb", &nextopt))
4731                 vga_retrace_method = VGA_RETRACE_DUMB;
4732             else if (strstart(opts, "precise", &nextopt))
4733                 vga_retrace_method = VGA_RETRACE_PRECISE;
4734             else goto invalid_vga;
4735         } else goto invalid_vga;
4736         opts = nextopt;
4737     }
4738 }
4739
4740 #ifdef _WIN32
4741 static BOOL WINAPI qemu_ctrl_handler(DWORD type)
4742 {
4743     exit(STATUS_CONTROL_C_EXIT);
4744     return TRUE;
4745 }
4746 #endif
4747
4748 int qemu_uuid_parse(const char *str, uint8_t *uuid)
4749 {
4750     int ret;
4751
4752     if(strlen(str) != 36)
4753         return -1;
4754
4755     ret = sscanf(str, UUID_FMT, &uuid[0], &uuid[1], &uuid[2], &uuid[3],
4756             &uuid[4], &uuid[5], &uuid[6], &uuid[7], &uuid[8], &uuid[9],
4757             &uuid[10], &uuid[11], &uuid[12], &uuid[13], &uuid[14], &uuid[15]);
4758
4759     if(ret != 16)
4760         return -1;
4761
4762 #ifdef TARGET_I386
4763     smbios_add_field(1, offsetof(struct smbios_type_1, uuid), 16, uuid);
4764 #endif
4765
4766     return 0;
4767 }
4768
4769 #define MAX_NET_CLIENTS 32
4770
4771 #ifndef _WIN32
4772
4773 static void termsig_handler(int signal)
4774 {
4775     qemu_system_shutdown_request();
4776 }
4777
4778 static void termsig_setup(void)
4779 {
4780     struct sigaction act;
4781
4782     memset(&act, 0, sizeof(act));
4783     act.sa_handler = termsig_handler;
4784     sigaction(SIGINT,  &act, NULL);
4785     sigaction(SIGHUP,  &act, NULL);
4786     sigaction(SIGTERM, &act, NULL);
4787 }
4788
4789 #endif
4790
4791 int main(int argc, char **argv, char **envp)
4792 {
4793 #ifdef CONFIG_GDBSTUB
4794     const char *gdbstub_dev = NULL;
4795 #endif
4796     uint32_t boot_devices_bitmap = 0;
4797     int i;
4798     int snapshot, linux_boot, net_boot;
4799     const char *initrd_filename;
4800     const char *kernel_filename, *kernel_cmdline;
4801     const char *boot_devices = "";
4802     DisplayState *ds;
4803     DisplayChangeListener *dcl;
4804     int cyls, heads, secs, translation;
4805     const char *net_clients[MAX_NET_CLIENTS];
4806     int nb_net_clients;
4807     const char *bt_opts[MAX_BT_CMDLINE];
4808     int nb_bt_opts;
4809     int hda_index;
4810     int optind;
4811     const char *r, *optarg;
4812     CharDriverState *monitor_hd = NULL;
4813     const char *monitor_device;
4814     const char *serial_devices[MAX_SERIAL_PORTS];
4815     int serial_device_index;
4816     const char *parallel_devices[MAX_PARALLEL_PORTS];
4817     int parallel_device_index;
4818     const char *virtio_consoles[MAX_VIRTIO_CONSOLES];
4819     int virtio_console_index;
4820     const char *loadvm = NULL;
4821     QEMUMachine *machine;
4822     const char *cpu_model;
4823     const char *usb_devices[MAX_USB_CMDLINE];
4824     int usb_devices_index;
4825 #ifndef _WIN32
4826     int fds[2];
4827 #endif
4828     int tb_size;
4829     const char *pid_file = NULL;
4830     const char *incoming = NULL;
4831 #ifndef _WIN32
4832     int fd = 0;
4833     struct passwd *pwd = NULL;
4834     const char *chroot_dir = NULL;
4835     const char *run_as = NULL;
4836 #endif
4837     CPUState *env;
4838
4839     qemu_cache_utils_init(envp);
4840
4841     LIST_INIT (&vm_change_state_head);
4842 #ifndef _WIN32
4843     {
4844         struct sigaction act;
4845         sigfillset(&act.sa_mask);
4846         act.sa_flags = 0;
4847         act.sa_handler = SIG_IGN;
4848         sigaction(SIGPIPE, &act, NULL);
4849     }
4850 #else
4851     SetConsoleCtrlHandler(qemu_ctrl_handler, TRUE);
4852     /* Note: cpu_interrupt() is currently not SMP safe, so we force
4853        QEMU to run on a single CPU */
4854     {
4855         HANDLE h;
4856         DWORD mask, smask;
4857         int i;
4858         h = GetCurrentProcess();
4859         if (GetProcessAffinityMask(h, &mask, &smask)) {
4860             for(i = 0; i < 32; i++) {
4861                 if (mask & (1 << i))
4862                     break;
4863             }
4864             if (i != 32) {
4865                 mask = 1 << i;
4866                 SetProcessAffinityMask(h, mask);
4867             }
4868         }
4869     }
4870 #endif
4871
4872     register_machines();
4873     machine = first_machine;
4874     cpu_model = NULL;
4875     initrd_filename = NULL;
4876     ram_size = 0;
4877     vga_ram_size = VGA_RAM_SIZE;
4878     snapshot = 0;
4879     nographic = 0;
4880     curses = 0;
4881     kernel_filename = NULL;
4882     kernel_cmdline = "";
4883     cyls = heads = secs = 0;
4884     translation = BIOS_ATA_TRANSLATION_AUTO;
4885     monitor_device = "vc:80Cx24C";
4886
4887     serial_devices[0] = "vc:80Cx24C";
4888     for(i = 1; i < MAX_SERIAL_PORTS; i++)
4889         serial_devices[i] = NULL;
4890     serial_device_index = 0;
4891
4892     parallel_devices[0] = "vc:80Cx24C";
4893     for(i = 1; i < MAX_PARALLEL_PORTS; i++)
4894         parallel_devices[i] = NULL;
4895     parallel_device_index = 0;
4896
4897     for(i = 0; i < MAX_VIRTIO_CONSOLES; i++)
4898         virtio_consoles[i] = NULL;
4899     virtio_console_index = 0;
4900
4901     for (i = 0; i < MAX_NODES; i++) {
4902         node_mem[i] = 0;
4903         node_cpumask[i] = 0;
4904     }
4905
4906     usb_devices_index = 0;
4907
4908     nb_net_clients = 0;
4909     nb_bt_opts = 0;
4910     nb_drives = 0;
4911     nb_drives_opt = 0;
4912     nb_numa_nodes = 0;
4913     hda_index = -1;
4914
4915     nb_nics = 0;
4916
4917     tb_size = 0;
4918     autostart= 1;
4919
4920     optind = 1;
4921     for(;;) {
4922         if (optind >= argc)
4923             break;
4924         r = argv[optind];
4925         if (r[0] != '-') {
4926             hda_index = drive_add(argv[optind++], HD_ALIAS, 0);
4927         } else {
4928             const QEMUOption *popt;
4929
4930             optind++;
4931             /* Treat --foo the same as -foo.  */
4932             if (r[1] == '-')
4933                 r++;
4934             popt = qemu_options;
4935             for(;;) {
4936                 if (!popt->name) {
4937                     fprintf(stderr, "%s: invalid option -- '%s'\n",
4938                             argv[0], r);
4939                     exit(1);
4940                 }
4941                 if (!strcmp(popt->name, r + 1))
4942                     break;
4943                 popt++;
4944             }
4945             if (popt->flags & HAS_ARG) {
4946                 if (optind >= argc) {
4947                     fprintf(stderr, "%s: option '%s' requires an argument\n",
4948                             argv[0], r);
4949                     exit(1);
4950                 }
4951                 optarg = argv[optind++];
4952             } else {
4953                 optarg = NULL;
4954             }
4955
4956             switch(popt->index) {
4957             case QEMU_OPTION_M:
4958                 machine = find_machine(optarg);
4959                 if (!machine) {
4960                     QEMUMachine *m;
4961                     printf("Supported machines are:\n");
4962                     for(m = first_machine; m != NULL; m = m->next) {
4963                         printf("%-10s %s%s\n",
4964                                m->name, m->desc,
4965                                m == first_machine ? " (default)" : "");
4966                     }
4967                     exit(*optarg != '?');
4968                 }
4969                 break;
4970             case QEMU_OPTION_cpu:
4971                 /* hw initialization will check this */
4972                 if (*optarg == '?') {
4973 /* XXX: implement xxx_cpu_list for targets that still miss it */
4974 #if defined(cpu_list)
4975                     cpu_list(stdout, &fprintf);
4976 #endif
4977                     exit(0);
4978                 } else {
4979                     cpu_model = optarg;
4980                 }
4981                 break;
4982             case QEMU_OPTION_initrd:
4983                 initrd_filename = optarg;
4984                 break;
4985             case QEMU_OPTION_hda:
4986                 if (cyls == 0)
4987                     hda_index = drive_add(optarg, HD_ALIAS, 0);
4988                 else
4989                     hda_index = drive_add(optarg, HD_ALIAS
4990                              ",cyls=%d,heads=%d,secs=%d%s",
4991                              0, cyls, heads, secs,
4992                              translation == BIOS_ATA_TRANSLATION_LBA ?
4993                                  ",trans=lba" :
4994                              translation == BIOS_ATA_TRANSLATION_NONE ?
4995                                  ",trans=none" : "");
4996                  break;
4997             case QEMU_OPTION_hdb:
4998             case QEMU_OPTION_hdc:
4999             case QEMU_OPTION_hdd:
5000                 drive_add(optarg, HD_ALIAS, popt->index - QEMU_OPTION_hda);
5001                 break;
5002             case QEMU_OPTION_drive:
5003                 drive_add(NULL, "%s", optarg);
5004                 break;
5005             case QEMU_OPTION_mtdblock:
5006                 drive_add(optarg, MTD_ALIAS);
5007                 break;
5008             case QEMU_OPTION_sd:
5009                 drive_add(optarg, SD_ALIAS);
5010                 break;
5011             case QEMU_OPTION_pflash:
5012                 drive_add(optarg, PFLASH_ALIAS);
5013                 break;
5014             case QEMU_OPTION_snapshot:
5015                 snapshot = 1;
5016                 break;
5017             case QEMU_OPTION_hdachs:
5018                 {
5019                     const char *p;
5020                     p = optarg;
5021                     cyls = strtol(p, (char **)&p, 0);
5022                     if (cyls < 1 || cyls > 16383)
5023                         goto chs_fail;
5024                     if (*p != ',')
5025                         goto chs_fail;
5026                     p++;
5027                     heads = strtol(p, (char **)&p, 0);
5028                     if (heads < 1 || heads > 16)
5029                         goto chs_fail;
5030                     if (*p != ',')
5031                         goto chs_fail;
5032                     p++;
5033                     secs = strtol(p, (char **)&p, 0);
5034                     if (secs < 1 || secs > 63)
5035                         goto chs_fail;
5036                     if (*p == ',') {
5037                         p++;
5038                         if (!strcmp(p, "none"))
5039                             translation = BIOS_ATA_TRANSLATION_NONE;
5040                         else if (!strcmp(p, "lba"))
5041                             translation = BIOS_ATA_TRANSLATION_LBA;
5042                         else if (!strcmp(p, "auto"))
5043                             translation = BIOS_ATA_TRANSLATION_AUTO;
5044                         else
5045                             goto chs_fail;
5046                     } else if (*p != '\0') {
5047                     chs_fail:
5048                         fprintf(stderr, "qemu: invalid physical CHS format\n");
5049                         exit(1);
5050                     }
5051                     if (hda_index != -1)
5052                         snprintf(drives_opt[hda_index].opt,
5053                                  sizeof(drives_opt[hda_index].opt),
5054                                  HD_ALIAS ",cyls=%d,heads=%d,secs=%d%s",
5055                                  0, cyls, heads, secs,
5056                                  translation == BIOS_ATA_TRANSLATION_LBA ?
5057                                     ",trans=lba" :
5058                                  translation == BIOS_ATA_TRANSLATION_NONE ?
5059                                      ",trans=none" : "");
5060                 }
5061                 break;
5062             case QEMU_OPTION_numa:
5063                 if (nb_numa_nodes >= MAX_NODES) {
5064                     fprintf(stderr, "qemu: too many NUMA nodes\n");
5065                     exit(1);
5066                 }
5067                 numa_add(optarg);
5068                 break;
5069             case QEMU_OPTION_nographic:
5070                 nographic = 1;
5071                 break;
5072 #ifdef CONFIG_CURSES
5073             case QEMU_OPTION_curses:
5074                 curses = 1;
5075                 break;
5076 #endif
5077             case QEMU_OPTION_portrait:
5078                 graphic_rotate = 1;
5079                 break;
5080             case QEMU_OPTION_kernel:
5081                 kernel_filename = optarg;
5082                 break;
5083             case QEMU_OPTION_append:
5084                 kernel_cmdline = optarg;
5085                 break;
5086             case QEMU_OPTION_cdrom:
5087                 drive_add(optarg, CDROM_ALIAS);
5088                 break;
5089             case QEMU_OPTION_boot:
5090                 boot_devices = optarg;
5091                 /* We just do some generic consistency checks */
5092                 {
5093                     /* Could easily be extended to 64 devices if needed */
5094                     const char *p;
5095                     
5096                     boot_devices_bitmap = 0;
5097                     for (p = boot_devices; *p != '\0'; p++) {
5098                         /* Allowed boot devices are:
5099                          * a b     : floppy disk drives
5100                          * c ... f : IDE disk drives
5101                          * g ... m : machine implementation dependant drives
5102                          * n ... p : network devices
5103                          * It's up to each machine implementation to check
5104                          * if the given boot devices match the actual hardware
5105                          * implementation and firmware features.
5106                          */
5107                         if (*p < 'a' || *p > 'q') {
5108                             fprintf(stderr, "Invalid boot device '%c'\n", *p);
5109                             exit(1);
5110                         }
5111                         if (boot_devices_bitmap & (1 << (*p - 'a'))) {
5112                             fprintf(stderr,
5113                                     "Boot device '%c' was given twice\n",*p);
5114                             exit(1);
5115                         }
5116                         boot_devices_bitmap |= 1 << (*p - 'a');
5117                     }
5118                 }
5119                 break;
5120             case QEMU_OPTION_fda:
5121             case QEMU_OPTION_fdb:
5122                 drive_add(optarg, FD_ALIAS, popt->index - QEMU_OPTION_fda);
5123                 break;
5124 #ifdef TARGET_I386
5125             case QEMU_OPTION_no_fd_bootchk:
5126                 fd_bootchk = 0;
5127                 break;
5128 #endif
5129             case QEMU_OPTION_net:
5130                 if (nb_net_clients >= MAX_NET_CLIENTS) {
5131                     fprintf(stderr, "qemu: too many network clients\n");
5132                     exit(1);
5133                 }
5134                 net_clients[nb_net_clients] = optarg;
5135                 nb_net_clients++;
5136                 break;
5137 #ifdef CONFIG_SLIRP
5138             case QEMU_OPTION_tftp:
5139                 tftp_prefix = optarg;
5140                 break;
5141             case QEMU_OPTION_bootp:
5142                 bootp_filename = optarg;
5143                 break;
5144 #ifndef _WIN32
5145             case QEMU_OPTION_smb:
5146                 net_slirp_smb(optarg);
5147                 break;
5148 #endif
5149             case QEMU_OPTION_redir:
5150                 net_slirp_redir(NULL, optarg);
5151                 break;
5152 #endif
5153             case QEMU_OPTION_bt:
5154                 if (nb_bt_opts >= MAX_BT_CMDLINE) {
5155                     fprintf(stderr, "qemu: too many bluetooth options\n");
5156                     exit(1);
5157                 }
5158                 bt_opts[nb_bt_opts++] = optarg;
5159                 break;
5160 #ifdef HAS_AUDIO
5161             case QEMU_OPTION_audio_help:
5162                 AUD_help ();
5163                 exit (0);
5164                 break;
5165             case QEMU_OPTION_soundhw:
5166                 select_soundhw (optarg);
5167                 break;
5168 #endif
5169             case QEMU_OPTION_h:
5170                 help(0);
5171                 break;
5172             case QEMU_OPTION_version:
5173                 version();
5174                 exit(0);
5175                 break;
5176             case QEMU_OPTION_m: {
5177                 uint64_t value;
5178                 char *ptr;
5179
5180                 value = strtoul(optarg, &ptr, 10);
5181                 switch (*ptr) {
5182                 case 0: case 'M': case 'm':
5183                     value <<= 20;
5184                     break;
5185                 case 'G': case 'g':
5186                     value <<= 30;
5187                     break;
5188                 default:
5189                     fprintf(stderr, "qemu: invalid ram size: %s\n", optarg);
5190                     exit(1);
5191                 }
5192
5193                 /* On 32-bit hosts, QEMU is limited by virtual address space */
5194                 if (value > (2047 << 20)
5195 #ifndef CONFIG_KQEMU
5196                     && HOST_LONG_BITS == 32
5197 #endif
5198                     ) {
5199                     fprintf(stderr, "qemu: at most 2047 MB RAM can be simulated\n");
5200                     exit(1);
5201                 }
5202                 if (value != (uint64_t)(ram_addr_t)value) {
5203                     fprintf(stderr, "qemu: ram size too large\n");
5204                     exit(1);
5205                 }
5206                 ram_size = value;
5207                 break;
5208             }
5209             case QEMU_OPTION_d:
5210                 {
5211                     int mask;
5212                     const CPULogItem *item;
5213
5214                     mask = cpu_str_to_log_mask(optarg);
5215                     if (!mask) {
5216                         printf("Log items (comma separated):\n");
5217                     for(item = cpu_log_items; item->mask != 0; item++) {
5218                         printf("%-10s %s\n", item->name, item->help);
5219                     }
5220                     exit(1);
5221                     }
5222                     cpu_set_log(mask);
5223                 }
5224                 break;
5225 #ifdef CONFIG_GDBSTUB
5226             case QEMU_OPTION_s:
5227                 gdbstub_dev = "tcp::" DEFAULT_GDBSTUB_PORT;
5228                 break;
5229             case QEMU_OPTION_gdb:
5230                 gdbstub_dev = optarg;
5231                 break;
5232 #endif
5233             case QEMU_OPTION_L:
5234                 bios_dir = optarg;
5235                 break;
5236             case QEMU_OPTION_bios:
5237                 bios_name = optarg;
5238                 break;
5239             case QEMU_OPTION_singlestep:
5240                 singlestep = 1;
5241                 break;
5242             case QEMU_OPTION_S:
5243                 autostart = 0;
5244                 break;
5245 #ifndef _WIN32
5246             case QEMU_OPTION_k:
5247                 keyboard_layout = optarg;
5248                 break;
5249 #endif
5250             case QEMU_OPTION_localtime:
5251                 rtc_utc = 0;
5252                 break;
5253             case QEMU_OPTION_vga:
5254                 select_vgahw (optarg);
5255                 break;
5256 #if defined(TARGET_PPC) || defined(TARGET_SPARC)
5257             case QEMU_OPTION_g:
5258                 {
5259                     const char *p;
5260                     int w, h, depth;
5261                     p = optarg;
5262                     w = strtol(p, (char **)&p, 10);
5263                     if (w <= 0) {
5264                     graphic_error:
5265                         fprintf(stderr, "qemu: invalid resolution or depth\n");
5266                         exit(1);
5267                     }
5268                     if (*p != 'x')
5269                         goto graphic_error;
5270                     p++;
5271                     h = strtol(p, (char **)&p, 10);
5272                     if (h <= 0)
5273                         goto graphic_error;
5274                     if (*p == 'x') {
5275                         p++;
5276                         depth = strtol(p, (char **)&p, 10);
5277                         if (depth != 8 && depth != 15 && depth != 16 &&
5278                             depth != 24 && depth != 32)
5279                             goto graphic_error;
5280                     } else if (*p == '\0') {
5281                         depth = graphic_depth;
5282                     } else {
5283                         goto graphic_error;
5284                     }
5285
5286                     graphic_width = w;
5287                     graphic_height = h;
5288                     graphic_depth = depth;
5289                 }
5290                 break;
5291 #endif
5292             case QEMU_OPTION_echr:
5293                 {
5294                     char *r;
5295                     term_escape_char = strtol(optarg, &r, 0);
5296                     if (r == optarg)
5297                         printf("Bad argument to echr\n");
5298                     break;
5299                 }
5300             case QEMU_OPTION_monitor:
5301                 monitor_device = optarg;
5302                 break;
5303             case QEMU_OPTION_serial:
5304                 if (serial_device_index >= MAX_SERIAL_PORTS) {
5305                     fprintf(stderr, "qemu: too many serial ports\n");
5306                     exit(1);
5307                 }
5308                 serial_devices[serial_device_index] = optarg;
5309                 serial_device_index++;
5310                 break;
5311             case QEMU_OPTION_virtiocon:
5312                 if (virtio_console_index >= MAX_VIRTIO_CONSOLES) {
5313                     fprintf(stderr, "qemu: too many virtio consoles\n");
5314                     exit(1);
5315                 }
5316                 virtio_consoles[virtio_console_index] = optarg;
5317                 virtio_console_index++;
5318                 break;
5319             case QEMU_OPTION_parallel:
5320                 if (parallel_device_index >= MAX_PARALLEL_PORTS) {
5321                     fprintf(stderr, "qemu: too many parallel ports\n");
5322                     exit(1);
5323                 }
5324                 parallel_devices[parallel_device_index] = optarg;
5325                 parallel_device_index++;
5326                 break;
5327             case QEMU_OPTION_loadvm:
5328                 loadvm = optarg;
5329                 break;
5330             case QEMU_OPTION_full_screen:
5331                 full_screen = 1;
5332                 break;
5333 #ifdef CONFIG_SDL
5334             case QEMU_OPTION_no_frame:
5335                 no_frame = 1;
5336                 break;
5337             case QEMU_OPTION_alt_grab:
5338                 alt_grab = 1;
5339                 break;
5340             case QEMU_OPTION_no_quit:
5341                 no_quit = 1;
5342                 break;
5343             case QEMU_OPTION_sdl:
5344                 sdl = 1;
5345                 break;
5346 #endif
5347             case QEMU_OPTION_pidfile:
5348                 pid_file = optarg;
5349                 break;
5350 #ifdef TARGET_I386
5351             case QEMU_OPTION_win2k_hack:
5352                 win2k_install_hack = 1;
5353                 break;
5354             case QEMU_OPTION_rtc_td_hack:
5355                 rtc_td_hack = 1;
5356                 break;
5357             case QEMU_OPTION_acpitable:
5358                 if(acpi_table_add(optarg) < 0) {
5359                     fprintf(stderr, "Wrong acpi table provided\n");
5360                     exit(1);
5361                 }
5362                 break;
5363             case QEMU_OPTION_smbios:
5364                 if(smbios_entry_add(optarg) < 0) {
5365                     fprintf(stderr, "Wrong smbios provided\n");
5366                     exit(1);
5367                 }
5368                 break;
5369 #endif
5370 #ifdef CONFIG_KQEMU
5371             case QEMU_OPTION_no_kqemu:
5372                 kqemu_allowed = 0;
5373                 break;
5374             case QEMU_OPTION_kernel_kqemu:
5375                 kqemu_allowed = 2;
5376                 break;
5377 #endif
5378 #ifdef CONFIG_KVM
5379             case QEMU_OPTION_enable_kvm:
5380                 kvm_allowed = 1;
5381 #ifdef CONFIG_KQEMU
5382                 kqemu_allowed = 0;
5383 #endif
5384                 break;
5385 #endif
5386             case QEMU_OPTION_usb:
5387                 usb_enabled = 1;
5388                 break;
5389             case QEMU_OPTION_usbdevice:
5390                 usb_enabled = 1;
5391                 if (usb_devices_index >= MAX_USB_CMDLINE) {
5392                     fprintf(stderr, "Too many USB devices\n");
5393                     exit(1);
5394                 }
5395                 usb_devices[usb_devices_index] = optarg;
5396                 usb_devices_index++;
5397                 break;
5398             case QEMU_OPTION_smp:
5399                 smp_cpus = atoi(optarg);
5400                 if (smp_cpus < 1) {
5401                     fprintf(stderr, "Invalid number of CPUs\n");
5402                     exit(1);
5403                 }
5404                 break;
5405             case QEMU_OPTION_vnc:
5406                 vnc_display = optarg;
5407                 break;
5408 #ifdef TARGET_I386
5409             case QEMU_OPTION_no_acpi:
5410                 acpi_enabled = 0;
5411                 break;
5412             case QEMU_OPTION_no_hpet:
5413                 no_hpet = 1;
5414                 break;
5415 #endif
5416             case QEMU_OPTION_no_reboot:
5417                 no_reboot = 1;
5418                 break;
5419             case QEMU_OPTION_no_shutdown:
5420                 no_shutdown = 1;
5421                 break;
5422             case QEMU_OPTION_show_cursor:
5423                 cursor_hide = 0;
5424                 break;
5425             case QEMU_OPTION_uuid:
5426                 if(qemu_uuid_parse(optarg, qemu_uuid) < 0) {
5427                     fprintf(stderr, "Fail to parse UUID string."
5428                             " Wrong format.\n");
5429                     exit(1);
5430                 }
5431                 break;
5432 #ifndef _WIN32
5433             case QEMU_OPTION_daemonize:
5434                 daemonize = 1;
5435                 break;
5436 #endif
5437             case QEMU_OPTION_option_rom:
5438                 if (nb_option_roms >= MAX_OPTION_ROMS) {
5439                     fprintf(stderr, "Too many option ROMs\n");
5440                     exit(1);
5441                 }
5442                 option_rom[nb_option_roms] = optarg;
5443                 nb_option_roms++;
5444                 break;
5445 #if defined(TARGET_ARM) || defined(TARGET_M68K)
5446             case QEMU_OPTION_semihosting:
5447                 semihosting_enabled = 1;
5448                 break;
5449 #endif
5450             case QEMU_OPTION_name:
5451                 qemu_name = optarg;
5452                 break;
5453 #if defined(TARGET_SPARC) || defined(TARGET_PPC)
5454             case QEMU_OPTION_prom_env:
5455                 if (nb_prom_envs >= MAX_PROM_ENVS) {
5456                     fprintf(stderr, "Too many prom variables\n");
5457                     exit(1);
5458                 }
5459                 prom_envs[nb_prom_envs] = optarg;
5460                 nb_prom_envs++;
5461                 break;
5462 #endif
5463 #ifdef TARGET_ARM
5464             case QEMU_OPTION_old_param:
5465                 old_param = 1;
5466                 break;
5467 #endif
5468             case QEMU_OPTION_clock:
5469                 configure_alarms(optarg);
5470                 break;
5471             case QEMU_OPTION_startdate:
5472                 {
5473                     struct tm tm;
5474                     time_t rtc_start_date;
5475                     if (!strcmp(optarg, "now")) {
5476                         rtc_date_offset = -1;
5477                     } else {
5478                         if (sscanf(optarg, "%d-%d-%dT%d:%d:%d",
5479                                &tm.tm_year,
5480                                &tm.tm_mon,
5481                                &tm.tm_mday,
5482                                &tm.tm_hour,
5483                                &tm.tm_min,
5484                                &tm.tm_sec) == 6) {
5485                             /* OK */
5486                         } else if (sscanf(optarg, "%d-%d-%d",
5487                                           &tm.tm_year,
5488                                           &tm.tm_mon,
5489                                           &tm.tm_mday) == 3) {
5490                             tm.tm_hour = 0;
5491                             tm.tm_min = 0;
5492                             tm.tm_sec = 0;
5493                         } else {
5494                             goto date_fail;
5495                         }
5496                         tm.tm_year -= 1900;
5497                         tm.tm_mon--;
5498                         rtc_start_date = mktimegm(&tm);
5499                         if (rtc_start_date == -1) {
5500                         date_fail:
5501                             fprintf(stderr, "Invalid date format. Valid format are:\n"
5502                                     "'now' or '2006-06-17T16:01:21' or '2006-06-17'\n");
5503                             exit(1);
5504                         }
5505                         rtc_date_offset = time(NULL) - rtc_start_date;
5506                     }
5507                 }
5508                 break;
5509             case QEMU_OPTION_tb_size:
5510                 tb_size = strtol(optarg, NULL, 0);
5511                 if (tb_size < 0)
5512                     tb_size = 0;
5513                 break;
5514             case QEMU_OPTION_icount:
5515                 use_icount = 1;
5516                 if (strcmp(optarg, "auto") == 0) {
5517                     icount_time_shift = -1;
5518                 } else {
5519                     icount_time_shift = strtol(optarg, NULL, 0);
5520                 }
5521                 break;
5522             case QEMU_OPTION_incoming:
5523                 incoming = optarg;
5524                 break;
5525 #ifndef _WIN32
5526             case QEMU_OPTION_chroot:
5527                 chroot_dir = optarg;
5528                 break;
5529             case QEMU_OPTION_runas:
5530                 run_as = optarg;
5531                 break;
5532 #endif
5533 #ifdef CONFIG_XEN
5534             case QEMU_OPTION_xen_domid:
5535                 xen_domid = atoi(optarg);
5536                 break;
5537             case QEMU_OPTION_xen_create:
5538                 xen_mode = XEN_CREATE;
5539                 break;
5540             case QEMU_OPTION_xen_attach:
5541                 xen_mode = XEN_ATTACH;
5542                 break;
5543 #endif
5544             }
5545         }
5546     }
5547
5548 #if defined(CONFIG_KVM) && defined(CONFIG_KQEMU)
5549     if (kvm_allowed && kqemu_allowed) {
5550         fprintf(stderr,
5551                 "You can not enable both KVM and kqemu at the same time\n");
5552         exit(1);
5553     }
5554 #endif
5555
5556     machine->max_cpus = machine->max_cpus ?: 1; /* Default to UP */
5557     if (smp_cpus > machine->max_cpus) {
5558         fprintf(stderr, "Number of SMP cpus requested (%d), exceeds max cpus "
5559                 "supported by machine `%s' (%d)\n", smp_cpus,  machine->name,
5560                 machine->max_cpus);
5561         exit(1);
5562     }
5563
5564     if (nographic) {
5565        if (serial_device_index == 0)
5566            serial_devices[0] = "stdio";
5567        if (parallel_device_index == 0)
5568            parallel_devices[0] = "null";
5569        if (strncmp(monitor_device, "vc", 2) == 0)
5570            monitor_device = "stdio";
5571     }
5572
5573 #ifndef _WIN32
5574     if (daemonize) {
5575         pid_t pid;
5576
5577         if (pipe(fds) == -1)
5578             exit(1);
5579
5580         pid = fork();
5581         if (pid > 0) {
5582             uint8_t status;
5583             ssize_t len;
5584
5585             close(fds[1]);
5586
5587         again:
5588             len = read(fds[0], &status, 1);
5589             if (len == -1 && (errno == EINTR))
5590                 goto again;
5591
5592             if (len != 1)
5593                 exit(1);
5594             else if (status == 1) {
5595                 fprintf(stderr, "Could not acquire pidfile\n");
5596                 exit(1);
5597             } else
5598                 exit(0);
5599         } else if (pid < 0)
5600             exit(1);
5601
5602         setsid();
5603
5604         pid = fork();
5605         if (pid > 0)
5606             exit(0);
5607         else if (pid < 0)
5608             exit(1);
5609
5610         umask(027);
5611
5612         signal(SIGTSTP, SIG_IGN);
5613         signal(SIGTTOU, SIG_IGN);
5614         signal(SIGTTIN, SIG_IGN);
5615     }
5616
5617     if (pid_file && qemu_create_pidfile(pid_file) != 0) {
5618         if (daemonize) {
5619             uint8_t status = 1;
5620             write(fds[1], &status, 1);
5621         } else
5622             fprintf(stderr, "Could not acquire pid file\n");
5623         exit(1);
5624     }
5625 #endif
5626
5627 #ifdef CONFIG_KQEMU
5628     if (smp_cpus > 1)
5629         kqemu_allowed = 0;
5630 #endif
5631     if (qemu_init_main_loop()) {
5632         fprintf(stderr, "qemu_init_main_loop failed\n");
5633         exit(1);
5634     }
5635     linux_boot = (kernel_filename != NULL);
5636     net_boot = (boot_devices_bitmap >> ('n' - 'a')) & 0xF;
5637
5638     if (!linux_boot && *kernel_cmdline != '\0') {
5639         fprintf(stderr, "-append only allowed with -kernel option\n");
5640         exit(1);
5641     }
5642
5643     if (!linux_boot && initrd_filename != NULL) {
5644         fprintf(stderr, "-initrd only allowed with -kernel option\n");
5645         exit(1);
5646     }
5647
5648     /* boot to floppy or the default cd if no hard disk defined yet */
5649     if (!boot_devices[0]) {
5650         boot_devices = "cad";
5651     }
5652     setvbuf(stdout, NULL, _IOLBF, 0);
5653
5654     init_timers();
5655     if (init_timer_alarm() < 0) {
5656         fprintf(stderr, "could not initialize alarm timer\n");
5657         exit(1);
5658     }
5659     if (use_icount && icount_time_shift < 0) {
5660         use_icount = 2;
5661         /* 125MIPS seems a reasonable initial guess at the guest speed.
5662            It will be corrected fairly quickly anyway.  */
5663         icount_time_shift = 3;
5664         init_icount_adjust();
5665     }
5666
5667 #ifdef _WIN32
5668     socket_init();
5669 #endif
5670
5671     /* init network clients */
5672     if (nb_net_clients == 0) {
5673         /* if no clients, we use a default config */
5674         net_clients[nb_net_clients++] = "nic";
5675 #ifdef CONFIG_SLIRP
5676         net_clients[nb_net_clients++] = "user";
5677 #endif
5678     }
5679
5680     for(i = 0;i < nb_net_clients; i++) {
5681         if (net_client_parse(net_clients[i]) < 0)
5682             exit(1);
5683     }
5684     net_client_check();
5685
5686 #ifdef TARGET_I386
5687     /* XXX: this should be moved in the PC machine instantiation code */
5688     if (net_boot != 0) {
5689         int netroms = 0;
5690         for (i = 0; i < nb_nics && i < 4; i++) {
5691             const char *model = nd_table[i].model;
5692             char buf[1024];
5693             if (net_boot & (1 << i)) {
5694                 if (model == NULL)
5695                     model = "ne2k_pci";
5696                 snprintf(buf, sizeof(buf), "%s/pxe-%s.bin", bios_dir, model);
5697                 if (get_image_size(buf) > 0) {
5698                     if (nb_option_roms >= MAX_OPTION_ROMS) {
5699                         fprintf(stderr, "Too many option ROMs\n");
5700                         exit(1);
5701                     }
5702                     option_rom[nb_option_roms] = strdup(buf);
5703                     nb_option_roms++;
5704                     netroms++;
5705                 }
5706             }
5707         }
5708         if (netroms == 0) {
5709             fprintf(stderr, "No valid PXE rom found for network device\n");
5710             exit(1);
5711         }
5712     }
5713 #endif
5714
5715     /* init the bluetooth world */
5716     for (i = 0; i < nb_bt_opts; i++)
5717         if (bt_parse(bt_opts[i]))
5718             exit(1);
5719
5720     /* init the memory */
5721     if (ram_size == 0)
5722         ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
5723
5724 #ifdef CONFIG_KQEMU
5725     /* FIXME: This is a nasty hack because kqemu can't cope with dynamic
5726        guest ram allocation.  It needs to go away.  */
5727     if (kqemu_allowed) {
5728         kqemu_phys_ram_size = ram_size + VGA_RAM_SIZE + 4 * 1024 * 1024;
5729         kqemu_phys_ram_base = qemu_vmalloc(kqemu_phys_ram_size);
5730         if (!kqemu_phys_ram_base) {
5731             fprintf(stderr, "Could not allocate physical memory\n");
5732             exit(1);
5733         }
5734     }
5735 #endif
5736
5737     /* init the dynamic translator */
5738     cpu_exec_init_all(tb_size * 1024 * 1024);
5739
5740     bdrv_init();
5741     dma_helper_init();
5742
5743     /* we always create the cdrom drive, even if no disk is there */
5744
5745     if (nb_drives_opt < MAX_DRIVES)
5746         drive_add(NULL, CDROM_ALIAS);
5747
5748     /* we always create at least one floppy */
5749
5750     if (nb_drives_opt < MAX_DRIVES)
5751         drive_add(NULL, FD_ALIAS, 0);
5752
5753     /* we always create one sd slot, even if no card is in it */
5754
5755     if (nb_drives_opt < MAX_DRIVES)
5756         drive_add(NULL, SD_ALIAS);
5757
5758     /* open the virtual block devices */
5759
5760     for(i = 0; i < nb_drives_opt; i++)
5761         if (drive_init(&drives_opt[i], snapshot, machine) == -1)
5762             exit(1);
5763
5764     register_savevm("timer", 0, 2, timer_save, timer_load, NULL);
5765     register_savevm_live("ram", 0, 3, ram_save_live, NULL, ram_load, NULL);
5766
5767 #ifndef _WIN32
5768     /* must be after terminal init, SDL library changes signal handlers */
5769     termsig_setup();
5770 #endif
5771
5772     /* Maintain compatibility with multiple stdio monitors */
5773     if (!strcmp(monitor_device,"stdio")) {
5774         for (i = 0; i < MAX_SERIAL_PORTS; i++) {
5775             const char *devname = serial_devices[i];
5776             if (devname && !strcmp(devname,"mon:stdio")) {
5777                 monitor_device = NULL;
5778                 break;
5779             } else if (devname && !strcmp(devname,"stdio")) {
5780                 monitor_device = NULL;
5781                 serial_devices[i] = "mon:stdio";
5782                 break;
5783             }
5784         }
5785     }
5786
5787     if (nb_numa_nodes > 0) {
5788         int i;
5789
5790         if (nb_numa_nodes > smp_cpus) {
5791             nb_numa_nodes = smp_cpus;
5792         }
5793
5794         /* If no memory size if given for any node, assume the default case
5795          * and distribute the available memory equally across all nodes
5796          */
5797         for (i = 0; i < nb_numa_nodes; i++) {
5798             if (node_mem[i] != 0)
5799                 break;
5800         }
5801         if (i == nb_numa_nodes) {
5802             uint64_t usedmem = 0;
5803
5804             /* On Linux, the each node's border has to be 8MB aligned,
5805              * the final node gets the rest.
5806              */
5807             for (i = 0; i < nb_numa_nodes - 1; i++) {
5808                 node_mem[i] = (ram_size / nb_numa_nodes) & ~((1 << 23UL) - 1);
5809                 usedmem += node_mem[i];
5810             }
5811             node_mem[i] = ram_size - usedmem;
5812         }
5813
5814         for (i = 0; i < nb_numa_nodes; i++) {
5815             if (node_cpumask[i] != 0)
5816                 break;
5817         }
5818         /* assigning the VCPUs round-robin is easier to implement, guest OSes
5819          * must cope with this anyway, because there are BIOSes out there in
5820          * real machines which also use this scheme.
5821          */
5822         if (i == nb_numa_nodes) {
5823             for (i = 0; i < smp_cpus; i++) {
5824                 node_cpumask[i % nb_numa_nodes] |= 1 << i;
5825             }
5826         }
5827     }
5828
5829     if (kvm_enabled()) {
5830         int ret;
5831
5832         ret = kvm_init(smp_cpus);
5833         if (ret < 0) {
5834             fprintf(stderr, "failed to initialize KVM\n");
5835             exit(1);
5836         }
5837     }
5838
5839     if (monitor_device) {
5840         monitor_hd = qemu_chr_open("monitor", monitor_device, NULL);
5841         if (!monitor_hd) {
5842             fprintf(stderr, "qemu: could not open monitor device '%s'\n", monitor_device);
5843             exit(1);
5844         }
5845     }
5846
5847     for(i = 0; i < MAX_SERIAL_PORTS; i++) {
5848         const char *devname = serial_devices[i];
5849         if (devname && strcmp(devname, "none")) {
5850             char label[32];
5851             snprintf(label, sizeof(label), "serial%d", i);
5852             serial_hds[i] = qemu_chr_open(label, devname, NULL);
5853             if (!serial_hds[i]) {
5854                 fprintf(stderr, "qemu: could not open serial device '%s'\n",
5855                         devname);
5856                 exit(1);
5857             }
5858         }
5859     }
5860
5861     for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
5862         const char *devname = parallel_devices[i];
5863         if (devname && strcmp(devname, "none")) {
5864             char label[32];
5865             snprintf(label, sizeof(label), "parallel%d", i);
5866             parallel_hds[i] = qemu_chr_open(label, devname, NULL);
5867             if (!parallel_hds[i]) {
5868                 fprintf(stderr, "qemu: could not open parallel device '%s'\n",
5869                         devname);
5870                 exit(1);
5871             }
5872         }
5873     }
5874
5875     for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
5876         const char *devname = virtio_consoles[i];
5877         if (devname && strcmp(devname, "none")) {
5878             char label[32];
5879             snprintf(label, sizeof(label), "virtcon%d", i);
5880             virtcon_hds[i] = qemu_chr_open(label, devname, NULL);
5881             if (!virtcon_hds[i]) {
5882                 fprintf(stderr, "qemu: could not open virtio console '%s'\n",
5883                         devname);
5884                 exit(1);
5885             }
5886         }
5887     }
5888
5889     machine->init(ram_size, vga_ram_size, boot_devices,
5890                   kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
5891
5892
5893     for (env = first_cpu; env != NULL; env = env->next_cpu) {
5894         for (i = 0; i < nb_numa_nodes; i++) {
5895             if (node_cpumask[i] & (1 << env->cpu_index)) {
5896                 env->numa_node = i;
5897             }
5898         }
5899     }
5900
5901     current_machine = machine;
5902
5903     /* Set KVM's vcpu state to qemu's initial CPUState. */
5904     if (kvm_enabled()) {
5905         int ret;
5906
5907         ret = kvm_sync_vcpus();
5908         if (ret < 0) {
5909             fprintf(stderr, "failed to initialize vcpus\n");
5910             exit(1);
5911         }
5912     }
5913
5914     /* init USB devices */
5915     if (usb_enabled) {
5916         for(i = 0; i < usb_devices_index; i++) {
5917             if (usb_device_add(usb_devices[i], 0) < 0) {
5918                 fprintf(stderr, "Warning: could not add USB device %s\n",
5919                         usb_devices[i]);
5920             }
5921         }
5922     }
5923
5924     if (!display_state)
5925         dumb_display_init();
5926     /* just use the first displaystate for the moment */
5927     ds = display_state;
5928     /* terminal init */
5929     if (nographic) {
5930         if (curses) {
5931             fprintf(stderr, "fatal: -nographic can't be used with -curses\n");
5932             exit(1);
5933         }
5934     } else { 
5935 #if defined(CONFIG_CURSES)
5936             if (curses) {
5937                 /* At the moment curses cannot be used with other displays */
5938                 curses_display_init(ds, full_screen);
5939             } else
5940 #endif
5941             {
5942                 if (vnc_display != NULL) {
5943                     vnc_display_init(ds);
5944                     if (vnc_display_open(ds, vnc_display) < 0)
5945                         exit(1);
5946                 }
5947 #if defined(CONFIG_SDL)
5948                 if (sdl || !vnc_display)
5949                     sdl_display_init(ds, full_screen, no_frame);
5950 #elif defined(CONFIG_COCOA)
5951                 if (sdl || !vnc_display)
5952                     cocoa_display_init(ds, full_screen);
5953 #endif
5954             }
5955     }
5956     dpy_resize(ds);
5957
5958     dcl = ds->listeners;
5959     while (dcl != NULL) {
5960         if (dcl->dpy_refresh != NULL) {
5961             ds->gui_timer = qemu_new_timer(rt_clock, gui_update, ds);
5962             qemu_mod_timer(ds->gui_timer, qemu_get_clock(rt_clock));
5963         }
5964         dcl = dcl->next;
5965     }
5966
5967     if (nographic || (vnc_display && !sdl)) {
5968         nographic_timer = qemu_new_timer(rt_clock, nographic_update, NULL);
5969         qemu_mod_timer(nographic_timer, qemu_get_clock(rt_clock));
5970     }
5971
5972     text_consoles_set_display(display_state);
5973     qemu_chr_initial_reset();
5974
5975     if (monitor_device && monitor_hd)
5976         monitor_init(monitor_hd, MONITOR_USE_READLINE | MONITOR_IS_DEFAULT);
5977
5978     for(i = 0; i < MAX_SERIAL_PORTS; i++) {
5979         const char *devname = serial_devices[i];
5980         if (devname && strcmp(devname, "none")) {
5981             char label[32];
5982             snprintf(label, sizeof(label), "serial%d", i);
5983             if (strstart(devname, "vc", 0))
5984                 qemu_chr_printf(serial_hds[i], "serial%d console\r\n", i);
5985         }
5986     }
5987
5988     for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
5989         const char *devname = parallel_devices[i];
5990         if (devname && strcmp(devname, "none")) {
5991             char label[32];
5992             snprintf(label, sizeof(label), "parallel%d", i);
5993             if (strstart(devname, "vc", 0))
5994                 qemu_chr_printf(parallel_hds[i], "parallel%d console\r\n", i);
5995         }
5996     }
5997
5998     for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
5999         const char *devname = virtio_consoles[i];
6000         if (virtcon_hds[i] && devname) {
6001             char label[32];
6002             snprintf(label, sizeof(label), "virtcon%d", i);
6003             if (strstart(devname, "vc", 0))
6004                 qemu_chr_printf(virtcon_hds[i], "virtio console%d\r\n", i);
6005         }
6006     }
6007
6008 #ifdef CONFIG_GDBSTUB
6009     if (gdbstub_dev && gdbserver_start(gdbstub_dev) < 0) {
6010         fprintf(stderr, "qemu: could not open gdbserver on device '%s'\n",
6011                 gdbstub_dev);
6012         exit(1);
6013     }
6014 #endif
6015
6016     if (loadvm)
6017         do_loadvm(cur_mon, loadvm);
6018
6019     if (incoming) {
6020         autostart = 0; /* fixme how to deal with -daemonize */
6021         qemu_start_incoming_migration(incoming);
6022     }
6023
6024     if (autostart)
6025         vm_start();
6026
6027 #ifndef _WIN32
6028     if (daemonize) {
6029         uint8_t status = 0;
6030         ssize_t len;
6031
6032     again1:
6033         len = write(fds[1], &status, 1);
6034         if (len == -1 && (errno == EINTR))
6035             goto again1;
6036
6037         if (len != 1)
6038             exit(1);
6039
6040         chdir("/");
6041         TFR(fd = open("/dev/null", O_RDWR));
6042         if (fd == -1)
6043             exit(1);
6044     }
6045
6046     if (run_as) {
6047         pwd = getpwnam(run_as);
6048         if (!pwd) {
6049             fprintf(stderr, "User \"%s\" doesn't exist\n", run_as);
6050             exit(1);
6051         }
6052     }
6053
6054     if (chroot_dir) {
6055         if (chroot(chroot_dir) < 0) {
6056             fprintf(stderr, "chroot failed\n");
6057             exit(1);
6058         }
6059         chdir("/");
6060     }
6061
6062     if (run_as) {
6063         if (setgid(pwd->pw_gid) < 0) {
6064             fprintf(stderr, "Failed to setgid(%d)\n", pwd->pw_gid);
6065             exit(1);
6066         }
6067         if (setuid(pwd->pw_uid) < 0) {
6068             fprintf(stderr, "Failed to setuid(%d)\n", pwd->pw_uid);
6069             exit(1);
6070         }
6071         if (setuid(0) != -1) {
6072             fprintf(stderr, "Dropping privileges failed\n");
6073             exit(1);
6074         }
6075     }
6076
6077     if (daemonize) {
6078         dup2(fd, 0);
6079         dup2(fd, 1);
6080         dup2(fd, 2);
6081
6082         close(fd);
6083     }
6084 #endif
6085
6086     main_loop();
6087     quit_timers();
6088     net_cleanup();
6089
6090     return 0;
6091 }