xen: add -vga xenfb option, configure xenfb (Gerd Hoffmann)
[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 event_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 #ifndef _WIN32
932 static int alarm_timer_rfd, alarm_timer_wfd;
933 #endif
934
935 #ifdef _WIN32
936
937 struct qemu_alarm_win32 {
938     MMRESULT timerId;
939     HANDLE host_alarm;
940     unsigned int period;
941 } alarm_win32_data = {0, NULL, -1};
942
943 static int win32_start_timer(struct qemu_alarm_timer *t);
944 static void win32_stop_timer(struct qemu_alarm_timer *t);
945 static void win32_rearm_timer(struct qemu_alarm_timer *t);
946
947 #else
948
949 static int unix_start_timer(struct qemu_alarm_timer *t);
950 static void unix_stop_timer(struct qemu_alarm_timer *t);
951
952 #ifdef __linux__
953
954 static int dynticks_start_timer(struct qemu_alarm_timer *t);
955 static void dynticks_stop_timer(struct qemu_alarm_timer *t);
956 static void dynticks_rearm_timer(struct qemu_alarm_timer *t);
957
958 static int hpet_start_timer(struct qemu_alarm_timer *t);
959 static void hpet_stop_timer(struct qemu_alarm_timer *t);
960
961 static int rtc_start_timer(struct qemu_alarm_timer *t);
962 static void rtc_stop_timer(struct qemu_alarm_timer *t);
963
964 #endif /* __linux__ */
965
966 #endif /* _WIN32 */
967
968 /* Correlation between real and virtual time is always going to be
969    fairly approximate, so ignore small variation.
970    When the guest is idle real and virtual time will be aligned in
971    the IO wait loop.  */
972 #define ICOUNT_WOBBLE (QEMU_TIMER_BASE / 10)
973
974 static void icount_adjust(void)
975 {
976     int64_t cur_time;
977     int64_t cur_icount;
978     int64_t delta;
979     static int64_t last_delta;
980     /* If the VM is not running, then do nothing.  */
981     if (!vm_running)
982         return;
983
984     cur_time = cpu_get_clock();
985     cur_icount = qemu_get_clock(vm_clock);
986     delta = cur_icount - cur_time;
987     /* FIXME: This is a very crude algorithm, somewhat prone to oscillation.  */
988     if (delta > 0
989         && last_delta + ICOUNT_WOBBLE < delta * 2
990         && icount_time_shift > 0) {
991         /* The guest is getting too far ahead.  Slow time down.  */
992         icount_time_shift--;
993     }
994     if (delta < 0
995         && last_delta - ICOUNT_WOBBLE > delta * 2
996         && icount_time_shift < MAX_ICOUNT_SHIFT) {
997         /* The guest is getting too far behind.  Speed time up.  */
998         icount_time_shift++;
999     }
1000     last_delta = delta;
1001     qemu_icount_bias = cur_icount - (qemu_icount << icount_time_shift);
1002 }
1003
1004 static void icount_adjust_rt(void * opaque)
1005 {
1006     qemu_mod_timer(icount_rt_timer,
1007                    qemu_get_clock(rt_clock) + 1000);
1008     icount_adjust();
1009 }
1010
1011 static void icount_adjust_vm(void * opaque)
1012 {
1013     qemu_mod_timer(icount_vm_timer,
1014                    qemu_get_clock(vm_clock) + QEMU_TIMER_BASE / 10);
1015     icount_adjust();
1016 }
1017
1018 static void init_icount_adjust(void)
1019 {
1020     /* Have both realtime and virtual time triggers for speed adjustment.
1021        The realtime trigger catches emulated time passing too slowly,
1022        the virtual time trigger catches emulated time passing too fast.
1023        Realtime triggers occur even when idle, so use them less frequently
1024        than VM triggers.  */
1025     icount_rt_timer = qemu_new_timer(rt_clock, icount_adjust_rt, NULL);
1026     qemu_mod_timer(icount_rt_timer,
1027                    qemu_get_clock(rt_clock) + 1000);
1028     icount_vm_timer = qemu_new_timer(vm_clock, icount_adjust_vm, NULL);
1029     qemu_mod_timer(icount_vm_timer,
1030                    qemu_get_clock(vm_clock) + QEMU_TIMER_BASE / 10);
1031 }
1032
1033 static struct qemu_alarm_timer alarm_timers[] = {
1034 #ifndef _WIN32
1035 #ifdef __linux__
1036     {"dynticks", ALARM_FLAG_DYNTICKS, dynticks_start_timer,
1037      dynticks_stop_timer, dynticks_rearm_timer, NULL},
1038     /* HPET - if available - is preferred */
1039     {"hpet", 0, hpet_start_timer, hpet_stop_timer, NULL, NULL},
1040     /* ...otherwise try RTC */
1041     {"rtc", 0, rtc_start_timer, rtc_stop_timer, NULL, NULL},
1042 #endif
1043     {"unix", 0, unix_start_timer, unix_stop_timer, NULL, NULL},
1044 #else
1045     {"dynticks", ALARM_FLAG_DYNTICKS, win32_start_timer,
1046      win32_stop_timer, win32_rearm_timer, &alarm_win32_data},
1047     {"win32", 0, win32_start_timer,
1048      win32_stop_timer, NULL, &alarm_win32_data},
1049 #endif
1050     {NULL, }
1051 };
1052
1053 static void show_available_alarms(void)
1054 {
1055     int i;
1056
1057     printf("Available alarm timers, in order of precedence:\n");
1058     for (i = 0; alarm_timers[i].name; i++)
1059         printf("%s\n", alarm_timers[i].name);
1060 }
1061
1062 static void configure_alarms(char const *opt)
1063 {
1064     int i;
1065     int cur = 0;
1066     int count = ARRAY_SIZE(alarm_timers) - 1;
1067     char *arg;
1068     char *name;
1069     struct qemu_alarm_timer tmp;
1070
1071     if (!strcmp(opt, "?")) {
1072         show_available_alarms();
1073         exit(0);
1074     }
1075
1076     arg = strdup(opt);
1077
1078     /* Reorder the array */
1079     name = strtok(arg, ",");
1080     while (name) {
1081         for (i = 0; i < count && alarm_timers[i].name; i++) {
1082             if (!strcmp(alarm_timers[i].name, name))
1083                 break;
1084         }
1085
1086         if (i == count) {
1087             fprintf(stderr, "Unknown clock %s\n", name);
1088             goto next;
1089         }
1090
1091         if (i < cur)
1092             /* Ignore */
1093             goto next;
1094
1095         /* Swap */
1096         tmp = alarm_timers[i];
1097         alarm_timers[i] = alarm_timers[cur];
1098         alarm_timers[cur] = tmp;
1099
1100         cur++;
1101 next:
1102         name = strtok(NULL, ",");
1103     }
1104
1105     free(arg);
1106
1107     if (cur) {
1108         /* Disable remaining timers */
1109         for (i = cur; i < count; i++)
1110             alarm_timers[i].name = NULL;
1111     } else {
1112         show_available_alarms();
1113         exit(1);
1114     }
1115 }
1116
1117 QEMUClock *rt_clock;
1118 QEMUClock *vm_clock;
1119
1120 static QEMUTimer *active_timers[2];
1121
1122 static QEMUClock *qemu_new_clock(int type)
1123 {
1124     QEMUClock *clock;
1125     clock = qemu_mallocz(sizeof(QEMUClock));
1126     clock->type = type;
1127     return clock;
1128 }
1129
1130 QEMUTimer *qemu_new_timer(QEMUClock *clock, QEMUTimerCB *cb, void *opaque)
1131 {
1132     QEMUTimer *ts;
1133
1134     ts = qemu_mallocz(sizeof(QEMUTimer));
1135     ts->clock = clock;
1136     ts->cb = cb;
1137     ts->opaque = opaque;
1138     return ts;
1139 }
1140
1141 void qemu_free_timer(QEMUTimer *ts)
1142 {
1143     qemu_free(ts);
1144 }
1145
1146 /* stop a timer, but do not dealloc it */
1147 void qemu_del_timer(QEMUTimer *ts)
1148 {
1149     QEMUTimer **pt, *t;
1150
1151     /* NOTE: this code must be signal safe because
1152        qemu_timer_expired() can be called from a signal. */
1153     pt = &active_timers[ts->clock->type];
1154     for(;;) {
1155         t = *pt;
1156         if (!t)
1157             break;
1158         if (t == ts) {
1159             *pt = t->next;
1160             break;
1161         }
1162         pt = &t->next;
1163     }
1164 }
1165
1166 /* modify the current timer so that it will be fired when current_time
1167    >= expire_time. The corresponding callback will be called. */
1168 void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time)
1169 {
1170     QEMUTimer **pt, *t;
1171
1172     qemu_del_timer(ts);
1173
1174     /* add the timer in the sorted list */
1175     /* NOTE: this code must be signal safe because
1176        qemu_timer_expired() can be called from a signal. */
1177     pt = &active_timers[ts->clock->type];
1178     for(;;) {
1179         t = *pt;
1180         if (!t)
1181             break;
1182         if (t->expire_time > expire_time)
1183             break;
1184         pt = &t->next;
1185     }
1186     ts->expire_time = expire_time;
1187     ts->next = *pt;
1188     *pt = ts;
1189
1190     /* Rearm if necessary  */
1191     if (pt == &active_timers[ts->clock->type]) {
1192         if ((alarm_timer->flags & ALARM_FLAG_EXPIRED) == 0) {
1193             qemu_rearm_alarm_timer(alarm_timer);
1194         }
1195         /* Interrupt execution to force deadline recalculation.  */
1196         if (use_icount && cpu_single_env) {
1197             cpu_exit(cpu_single_env);
1198         }
1199     }
1200 }
1201
1202 int qemu_timer_pending(QEMUTimer *ts)
1203 {
1204     QEMUTimer *t;
1205     for(t = active_timers[ts->clock->type]; t != NULL; t = t->next) {
1206         if (t == ts)
1207             return 1;
1208     }
1209     return 0;
1210 }
1211
1212 static inline int qemu_timer_expired(QEMUTimer *timer_head, int64_t current_time)
1213 {
1214     if (!timer_head)
1215         return 0;
1216     return (timer_head->expire_time <= current_time);
1217 }
1218
1219 static void qemu_run_timers(QEMUTimer **ptimer_head, int64_t current_time)
1220 {
1221     QEMUTimer *ts;
1222
1223     for(;;) {
1224         ts = *ptimer_head;
1225         if (!ts || ts->expire_time > current_time)
1226             break;
1227         /* remove timer from the list before calling the callback */
1228         *ptimer_head = ts->next;
1229         ts->next = NULL;
1230
1231         /* run the callback (the timer list can be modified) */
1232         ts->cb(ts->opaque);
1233     }
1234 }
1235
1236 int64_t qemu_get_clock(QEMUClock *clock)
1237 {
1238     switch(clock->type) {
1239     case QEMU_TIMER_REALTIME:
1240         return get_clock() / 1000000;
1241     default:
1242     case QEMU_TIMER_VIRTUAL:
1243         if (use_icount) {
1244             return cpu_get_icount();
1245         } else {
1246             return cpu_get_clock();
1247         }
1248     }
1249 }
1250
1251 static void init_timers(void)
1252 {
1253     init_get_clock();
1254     ticks_per_sec = QEMU_TIMER_BASE;
1255     rt_clock = qemu_new_clock(QEMU_TIMER_REALTIME);
1256     vm_clock = qemu_new_clock(QEMU_TIMER_VIRTUAL);
1257 }
1258
1259 /* save a timer */
1260 void qemu_put_timer(QEMUFile *f, QEMUTimer *ts)
1261 {
1262     uint64_t expire_time;
1263
1264     if (qemu_timer_pending(ts)) {
1265         expire_time = ts->expire_time;
1266     } else {
1267         expire_time = -1;
1268     }
1269     qemu_put_be64(f, expire_time);
1270 }
1271
1272 void qemu_get_timer(QEMUFile *f, QEMUTimer *ts)
1273 {
1274     uint64_t expire_time;
1275
1276     expire_time = qemu_get_be64(f);
1277     if (expire_time != -1) {
1278         qemu_mod_timer(ts, expire_time);
1279     } else {
1280         qemu_del_timer(ts);
1281     }
1282 }
1283
1284 static void timer_save(QEMUFile *f, void *opaque)
1285 {
1286     if (cpu_ticks_enabled) {
1287         hw_error("cannot save state if virtual timers are running");
1288     }
1289     qemu_put_be64(f, cpu_ticks_offset);
1290     qemu_put_be64(f, ticks_per_sec);
1291     qemu_put_be64(f, cpu_clock_offset);
1292 }
1293
1294 static int timer_load(QEMUFile *f, void *opaque, int version_id)
1295 {
1296     if (version_id != 1 && version_id != 2)
1297         return -EINVAL;
1298     if (cpu_ticks_enabled) {
1299         return -EINVAL;
1300     }
1301     cpu_ticks_offset=qemu_get_be64(f);
1302     ticks_per_sec=qemu_get_be64(f);
1303     if (version_id == 2) {
1304         cpu_clock_offset=qemu_get_be64(f);
1305     }
1306     return 0;
1307 }
1308
1309 #ifdef _WIN32
1310 static void CALLBACK host_alarm_handler(UINT uTimerID, UINT uMsg,
1311                                         DWORD_PTR dwUser, DWORD_PTR dw1,
1312                                         DWORD_PTR dw2)
1313 #else
1314 static void host_alarm_handler(int host_signum)
1315 #endif
1316 {
1317 #if 0
1318 #define DISP_FREQ 1000
1319     {
1320         static int64_t delta_min = INT64_MAX;
1321         static int64_t delta_max, delta_cum, last_clock, delta, ti;
1322         static int count;
1323         ti = qemu_get_clock(vm_clock);
1324         if (last_clock != 0) {
1325             delta = ti - last_clock;
1326             if (delta < delta_min)
1327                 delta_min = delta;
1328             if (delta > delta_max)
1329                 delta_max = delta;
1330             delta_cum += delta;
1331             if (++count == DISP_FREQ) {
1332                 printf("timer: min=%" PRId64 " us max=%" PRId64 " us avg=%" PRId64 " us avg_freq=%0.3f Hz\n",
1333                        muldiv64(delta_min, 1000000, ticks_per_sec),
1334                        muldiv64(delta_max, 1000000, ticks_per_sec),
1335                        muldiv64(delta_cum, 1000000 / DISP_FREQ, ticks_per_sec),
1336                        (double)ticks_per_sec / ((double)delta_cum / DISP_FREQ));
1337                 count = 0;
1338                 delta_min = INT64_MAX;
1339                 delta_max = 0;
1340                 delta_cum = 0;
1341             }
1342         }
1343         last_clock = ti;
1344     }
1345 #endif
1346     if (alarm_has_dynticks(alarm_timer) ||
1347         (!use_icount &&
1348             qemu_timer_expired(active_timers[QEMU_TIMER_VIRTUAL],
1349                                qemu_get_clock(vm_clock))) ||
1350         qemu_timer_expired(active_timers[QEMU_TIMER_REALTIME],
1351                            qemu_get_clock(rt_clock))) {
1352         CPUState *env = next_cpu;
1353
1354 #ifdef _WIN32
1355         struct qemu_alarm_win32 *data = ((struct qemu_alarm_timer*)dwUser)->priv;
1356         SetEvent(data->host_alarm);
1357 #else
1358         static const char byte = 0;
1359         write(alarm_timer_wfd, &byte, sizeof(byte));
1360 #endif
1361         alarm_timer->flags |= ALARM_FLAG_EXPIRED;
1362
1363         if (env) {
1364             /* stop the currently executing cpu because a timer occured */
1365             cpu_exit(env);
1366 #ifdef CONFIG_KQEMU
1367             if (env->kqemu_enabled) {
1368                 kqemu_cpu_interrupt(env);
1369             }
1370 #endif
1371         }
1372         event_pending = 1;
1373     }
1374 }
1375
1376 static int64_t qemu_next_deadline(void)
1377 {
1378     int64_t delta;
1379
1380     if (active_timers[QEMU_TIMER_VIRTUAL]) {
1381         delta = active_timers[QEMU_TIMER_VIRTUAL]->expire_time -
1382                      qemu_get_clock(vm_clock);
1383     } else {
1384         /* To avoid problems with overflow limit this to 2^32.  */
1385         delta = INT32_MAX;
1386     }
1387
1388     if (delta < 0)
1389         delta = 0;
1390
1391     return delta;
1392 }
1393
1394 #if defined(__linux__) || defined(_WIN32)
1395 static uint64_t qemu_next_deadline_dyntick(void)
1396 {
1397     int64_t delta;
1398     int64_t rtdelta;
1399
1400     if (use_icount)
1401         delta = INT32_MAX;
1402     else
1403         delta = (qemu_next_deadline() + 999) / 1000;
1404
1405     if (active_timers[QEMU_TIMER_REALTIME]) {
1406         rtdelta = (active_timers[QEMU_TIMER_REALTIME]->expire_time -
1407                  qemu_get_clock(rt_clock))*1000;
1408         if (rtdelta < delta)
1409             delta = rtdelta;
1410     }
1411
1412     if (delta < MIN_TIMER_REARM_US)
1413         delta = MIN_TIMER_REARM_US;
1414
1415     return delta;
1416 }
1417 #endif
1418
1419 #ifndef _WIN32
1420
1421 /* Sets a specific flag */
1422 static int fcntl_setfl(int fd, int flag)
1423 {
1424     int flags;
1425
1426     flags = fcntl(fd, F_GETFL);
1427     if (flags == -1)
1428         return -errno;
1429
1430     if (fcntl(fd, F_SETFL, flags | flag) == -1)
1431         return -errno;
1432
1433     return 0;
1434 }
1435
1436 #if defined(__linux__)
1437
1438 #define RTC_FREQ 1024
1439
1440 static void enable_sigio_timer(int fd)
1441 {
1442     struct sigaction act;
1443
1444     /* timer signal */
1445     sigfillset(&act.sa_mask);
1446     act.sa_flags = 0;
1447     act.sa_handler = host_alarm_handler;
1448
1449     sigaction(SIGIO, &act, NULL);
1450     fcntl_setfl(fd, O_ASYNC);
1451     fcntl(fd, F_SETOWN, getpid());
1452 }
1453
1454 static int hpet_start_timer(struct qemu_alarm_timer *t)
1455 {
1456     struct hpet_info info;
1457     int r, fd;
1458
1459     fd = open("/dev/hpet", O_RDONLY);
1460     if (fd < 0)
1461         return -1;
1462
1463     /* Set frequency */
1464     r = ioctl(fd, HPET_IRQFREQ, RTC_FREQ);
1465     if (r < 0) {
1466         fprintf(stderr, "Could not configure '/dev/hpet' to have a 1024Hz timer. This is not a fatal\n"
1467                 "error, but for better emulation accuracy type:\n"
1468                 "'echo 1024 > /proc/sys/dev/hpet/max-user-freq' as root.\n");
1469         goto fail;
1470     }
1471
1472     /* Check capabilities */
1473     r = ioctl(fd, HPET_INFO, &info);
1474     if (r < 0)
1475         goto fail;
1476
1477     /* Enable periodic mode */
1478     r = ioctl(fd, HPET_EPI, 0);
1479     if (info.hi_flags && (r < 0))
1480         goto fail;
1481
1482     /* Enable interrupt */
1483     r = ioctl(fd, HPET_IE_ON, 0);
1484     if (r < 0)
1485         goto fail;
1486
1487     enable_sigio_timer(fd);
1488     t->priv = (void *)(long)fd;
1489
1490     return 0;
1491 fail:
1492     close(fd);
1493     return -1;
1494 }
1495
1496 static void hpet_stop_timer(struct qemu_alarm_timer *t)
1497 {
1498     int fd = (long)t->priv;
1499
1500     close(fd);
1501 }
1502
1503 static int rtc_start_timer(struct qemu_alarm_timer *t)
1504 {
1505     int rtc_fd;
1506     unsigned long current_rtc_freq = 0;
1507
1508     TFR(rtc_fd = open("/dev/rtc", O_RDONLY));
1509     if (rtc_fd < 0)
1510         return -1;
1511     ioctl(rtc_fd, RTC_IRQP_READ, &current_rtc_freq);
1512     if (current_rtc_freq != RTC_FREQ &&
1513         ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
1514         fprintf(stderr, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n"
1515                 "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n"
1516                 "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n");
1517         goto fail;
1518     }
1519     if (ioctl(rtc_fd, RTC_PIE_ON, 0) < 0) {
1520     fail:
1521         close(rtc_fd);
1522         return -1;
1523     }
1524
1525     enable_sigio_timer(rtc_fd);
1526
1527     t->priv = (void *)(long)rtc_fd;
1528
1529     return 0;
1530 }
1531
1532 static void rtc_stop_timer(struct qemu_alarm_timer *t)
1533 {
1534     int rtc_fd = (long)t->priv;
1535
1536     close(rtc_fd);
1537 }
1538
1539 static int dynticks_start_timer(struct qemu_alarm_timer *t)
1540 {
1541     struct sigevent ev;
1542     timer_t host_timer;
1543     struct sigaction act;
1544
1545     sigfillset(&act.sa_mask);
1546     act.sa_flags = 0;
1547     act.sa_handler = host_alarm_handler;
1548
1549     sigaction(SIGALRM, &act, NULL);
1550
1551     ev.sigev_value.sival_int = 0;
1552     ev.sigev_notify = SIGEV_SIGNAL;
1553     ev.sigev_signo = SIGALRM;
1554
1555     if (timer_create(CLOCK_REALTIME, &ev, &host_timer)) {
1556         perror("timer_create");
1557
1558         /* disable dynticks */
1559         fprintf(stderr, "Dynamic Ticks disabled\n");
1560
1561         return -1;
1562     }
1563
1564     t->priv = (void *)(long)host_timer;
1565
1566     return 0;
1567 }
1568
1569 static void dynticks_stop_timer(struct qemu_alarm_timer *t)
1570 {
1571     timer_t host_timer = (timer_t)(long)t->priv;
1572
1573     timer_delete(host_timer);
1574 }
1575
1576 static void dynticks_rearm_timer(struct qemu_alarm_timer *t)
1577 {
1578     timer_t host_timer = (timer_t)(long)t->priv;
1579     struct itimerspec timeout;
1580     int64_t nearest_delta_us = INT64_MAX;
1581     int64_t current_us;
1582
1583     if (!active_timers[QEMU_TIMER_REALTIME] &&
1584                 !active_timers[QEMU_TIMER_VIRTUAL])
1585         return;
1586
1587     nearest_delta_us = qemu_next_deadline_dyntick();
1588
1589     /* check whether a timer is already running */
1590     if (timer_gettime(host_timer, &timeout)) {
1591         perror("gettime");
1592         fprintf(stderr, "Internal timer error: aborting\n");
1593         exit(1);
1594     }
1595     current_us = timeout.it_value.tv_sec * 1000000 + timeout.it_value.tv_nsec/1000;
1596     if (current_us && current_us <= nearest_delta_us)
1597         return;
1598
1599     timeout.it_interval.tv_sec = 0;
1600     timeout.it_interval.tv_nsec = 0; /* 0 for one-shot timer */
1601     timeout.it_value.tv_sec =  nearest_delta_us / 1000000;
1602     timeout.it_value.tv_nsec = (nearest_delta_us % 1000000) * 1000;
1603     if (timer_settime(host_timer, 0 /* RELATIVE */, &timeout, NULL)) {
1604         perror("settime");
1605         fprintf(stderr, "Internal timer error: aborting\n");
1606         exit(1);
1607     }
1608 }
1609
1610 #endif /* defined(__linux__) */
1611
1612 static int unix_start_timer(struct qemu_alarm_timer *t)
1613 {
1614     struct sigaction act;
1615     struct itimerval itv;
1616     int err;
1617
1618     /* timer signal */
1619     sigfillset(&act.sa_mask);
1620     act.sa_flags = 0;
1621     act.sa_handler = host_alarm_handler;
1622
1623     sigaction(SIGALRM, &act, NULL);
1624
1625     itv.it_interval.tv_sec = 0;
1626     /* for i386 kernel 2.6 to get 1 ms */
1627     itv.it_interval.tv_usec = 999;
1628     itv.it_value.tv_sec = 0;
1629     itv.it_value.tv_usec = 10 * 1000;
1630
1631     err = setitimer(ITIMER_REAL, &itv, NULL);
1632     if (err)
1633         return -1;
1634
1635     return 0;
1636 }
1637
1638 static void unix_stop_timer(struct qemu_alarm_timer *t)
1639 {
1640     struct itimerval itv;
1641
1642     memset(&itv, 0, sizeof(itv));
1643     setitimer(ITIMER_REAL, &itv, NULL);
1644 }
1645
1646 #endif /* !defined(_WIN32) */
1647
1648 static void try_to_rearm_timer(void *opaque)
1649 {
1650     struct qemu_alarm_timer *t = opaque;
1651 #ifndef _WIN32
1652     ssize_t len;
1653
1654     /* Drain the notify pipe */
1655     do {
1656         char buffer[512];
1657         len = read(alarm_timer_rfd, buffer, sizeof(buffer));
1658     } while ((len == -1 && errno == EINTR) || len > 0);
1659 #endif
1660
1661     if (t->flags & ALARM_FLAG_EXPIRED) {
1662         alarm_timer->flags &= ~ALARM_FLAG_EXPIRED;
1663         qemu_rearm_alarm_timer(alarm_timer);
1664     }
1665 }
1666
1667 #ifdef _WIN32
1668
1669 static int win32_start_timer(struct qemu_alarm_timer *t)
1670 {
1671     TIMECAPS tc;
1672     struct qemu_alarm_win32 *data = t->priv;
1673     UINT flags;
1674
1675     data->host_alarm = CreateEvent(NULL, FALSE, FALSE, NULL);
1676     if (!data->host_alarm) {
1677         perror("Failed CreateEvent");
1678         return -1;
1679     }
1680
1681     memset(&tc, 0, sizeof(tc));
1682     timeGetDevCaps(&tc, sizeof(tc));
1683
1684     if (data->period < tc.wPeriodMin)
1685         data->period = tc.wPeriodMin;
1686
1687     timeBeginPeriod(data->period);
1688
1689     flags = TIME_CALLBACK_FUNCTION;
1690     if (alarm_has_dynticks(t))
1691         flags |= TIME_ONESHOT;
1692     else
1693         flags |= TIME_PERIODIC;
1694
1695     data->timerId = timeSetEvent(1,         // interval (ms)
1696                         data->period,       // resolution
1697                         host_alarm_handler, // function
1698                         (DWORD)t,           // parameter
1699                         flags);
1700
1701     if (!data->timerId) {
1702         perror("Failed to initialize win32 alarm timer");
1703
1704         timeEndPeriod(data->period);
1705         CloseHandle(data->host_alarm);
1706         return -1;
1707     }
1708
1709     qemu_add_wait_object(data->host_alarm, try_to_rearm_timer, t);
1710
1711     return 0;
1712 }
1713
1714 static void win32_stop_timer(struct qemu_alarm_timer *t)
1715 {
1716     struct qemu_alarm_win32 *data = t->priv;
1717
1718     timeKillEvent(data->timerId);
1719     timeEndPeriod(data->period);
1720
1721     CloseHandle(data->host_alarm);
1722 }
1723
1724 static void win32_rearm_timer(struct qemu_alarm_timer *t)
1725 {
1726     struct qemu_alarm_win32 *data = t->priv;
1727     uint64_t nearest_delta_us;
1728
1729     if (!active_timers[QEMU_TIMER_REALTIME] &&
1730                 !active_timers[QEMU_TIMER_VIRTUAL])
1731         return;
1732
1733     nearest_delta_us = qemu_next_deadline_dyntick();
1734     nearest_delta_us /= 1000;
1735
1736     timeKillEvent(data->timerId);
1737
1738     data->timerId = timeSetEvent(1,
1739                         data->period,
1740                         host_alarm_handler,
1741                         (DWORD)t,
1742                         TIME_ONESHOT | TIME_PERIODIC);
1743
1744     if (!data->timerId) {
1745         perror("Failed to re-arm win32 alarm timer");
1746
1747         timeEndPeriod(data->period);
1748         CloseHandle(data->host_alarm);
1749         exit(1);
1750     }
1751 }
1752
1753 #endif /* _WIN32 */
1754
1755 static int init_timer_alarm(void)
1756 {
1757     struct qemu_alarm_timer *t = NULL;
1758     int i, err = -1;
1759
1760 #ifndef _WIN32
1761     int fds[2];
1762
1763     err = pipe(fds);
1764     if (err == -1)
1765         return -errno;
1766
1767     err = fcntl_setfl(fds[0], O_NONBLOCK);
1768     if (err < 0)
1769         goto fail;
1770
1771     err = fcntl_setfl(fds[1], O_NONBLOCK);
1772     if (err < 0)
1773         goto fail;
1774
1775     alarm_timer_rfd = fds[0];
1776     alarm_timer_wfd = fds[1];
1777 #endif
1778
1779     for (i = 0; alarm_timers[i].name; i++) {
1780         t = &alarm_timers[i];
1781
1782         err = t->start(t);
1783         if (!err)
1784             break;
1785     }
1786
1787     if (err) {
1788         err = -ENOENT;
1789         goto fail;
1790     }
1791
1792 #ifndef _WIN32
1793     qemu_set_fd_handler2(alarm_timer_rfd, NULL,
1794                          try_to_rearm_timer, NULL, t);
1795 #endif
1796
1797     alarm_timer = t;
1798
1799     return 0;
1800
1801 fail:
1802 #ifndef _WIN32
1803     close(fds[0]);
1804     close(fds[1]);
1805 #endif
1806     return err;
1807 }
1808
1809 static void quit_timers(void)
1810 {
1811     alarm_timer->stop(alarm_timer);
1812     alarm_timer = NULL;
1813 }
1814
1815 /***********************************************************/
1816 /* host time/date access */
1817 void qemu_get_timedate(struct tm *tm, int offset)
1818 {
1819     time_t ti;
1820     struct tm *ret;
1821
1822     time(&ti);
1823     ti += offset;
1824     if (rtc_date_offset == -1) {
1825         if (rtc_utc)
1826             ret = gmtime(&ti);
1827         else
1828             ret = localtime(&ti);
1829     } else {
1830         ti -= rtc_date_offset;
1831         ret = gmtime(&ti);
1832     }
1833
1834     memcpy(tm, ret, sizeof(struct tm));
1835 }
1836
1837 int qemu_timedate_diff(struct tm *tm)
1838 {
1839     time_t seconds;
1840
1841     if (rtc_date_offset == -1)
1842         if (rtc_utc)
1843             seconds = mktimegm(tm);
1844         else
1845             seconds = mktime(tm);
1846     else
1847         seconds = mktimegm(tm) + rtc_date_offset;
1848
1849     return seconds - time(NULL);
1850 }
1851
1852 #ifdef _WIN32
1853 static void socket_cleanup(void)
1854 {
1855     WSACleanup();
1856 }
1857
1858 static int socket_init(void)
1859 {
1860     WSADATA Data;
1861     int ret, err;
1862
1863     ret = WSAStartup(MAKEWORD(2,2), &Data);
1864     if (ret != 0) {
1865         err = WSAGetLastError();
1866         fprintf(stderr, "WSAStartup: %d\n", err);
1867         return -1;
1868     }
1869     atexit(socket_cleanup);
1870     return 0;
1871 }
1872 #endif
1873
1874 const char *get_opt_name(char *buf, int buf_size, const char *p, char delim)
1875 {
1876     char *q;
1877
1878     q = buf;
1879     while (*p != '\0' && *p != delim) {
1880         if (q && (q - buf) < buf_size - 1)
1881             *q++ = *p;
1882         p++;
1883     }
1884     if (q)
1885         *q = '\0';
1886
1887     return p;
1888 }
1889
1890 const char *get_opt_value(char *buf, int buf_size, const char *p)
1891 {
1892     char *q;
1893
1894     q = buf;
1895     while (*p != '\0') {
1896         if (*p == ',') {
1897             if (*(p + 1) != ',')
1898                 break;
1899             p++;
1900         }
1901         if (q && (q - buf) < buf_size - 1)
1902             *q++ = *p;
1903         p++;
1904     }
1905     if (q)
1906         *q = '\0';
1907
1908     return p;
1909 }
1910
1911 int get_param_value(char *buf, int buf_size,
1912                     const char *tag, const char *str)
1913 {
1914     const char *p;
1915     char option[128];
1916
1917     p = str;
1918     for(;;) {
1919         p = get_opt_name(option, sizeof(option), p, '=');
1920         if (*p != '=')
1921             break;
1922         p++;
1923         if (!strcmp(tag, option)) {
1924             (void)get_opt_value(buf, buf_size, p);
1925             return strlen(buf);
1926         } else {
1927             p = get_opt_value(NULL, 0, p);
1928         }
1929         if (*p != ',')
1930             break;
1931         p++;
1932     }
1933     return 0;
1934 }
1935
1936 int check_params(char *buf, int buf_size,
1937                  const char * const *params, const char *str)
1938 {
1939     const char *p;
1940     int i;
1941
1942     p = str;
1943     while (*p != '\0') {
1944         p = get_opt_name(buf, buf_size, p, '=');
1945         if (*p != '=')
1946             return -1;
1947         p++;
1948         for(i = 0; params[i] != NULL; i++)
1949             if (!strcmp(params[i], buf))
1950                 break;
1951         if (params[i] == NULL)
1952             return -1;
1953         p = get_opt_value(NULL, 0, p);
1954         if (*p != ',')
1955             break;
1956         p++;
1957     }
1958     return 0;
1959 }
1960
1961 /***********************************************************/
1962 /* Bluetooth support */
1963 static int nb_hcis;
1964 static int cur_hci;
1965 static struct HCIInfo *hci_table[MAX_NICS];
1966
1967 static struct bt_vlan_s {
1968     struct bt_scatternet_s net;
1969     int id;
1970     struct bt_vlan_s *next;
1971 } *first_bt_vlan;
1972
1973 /* find or alloc a new bluetooth "VLAN" */
1974 static struct bt_scatternet_s *qemu_find_bt_vlan(int id)
1975 {
1976     struct bt_vlan_s **pvlan, *vlan;
1977     for (vlan = first_bt_vlan; vlan != NULL; vlan = vlan->next) {
1978         if (vlan->id == id)
1979             return &vlan->net;
1980     }
1981     vlan = qemu_mallocz(sizeof(struct bt_vlan_s));
1982     vlan->id = id;
1983     pvlan = &first_bt_vlan;
1984     while (*pvlan != NULL)
1985         pvlan = &(*pvlan)->next;
1986     *pvlan = vlan;
1987     return &vlan->net;
1988 }
1989
1990 static void null_hci_send(struct HCIInfo *hci, const uint8_t *data, int len)
1991 {
1992 }
1993
1994 static int null_hci_addr_set(struct HCIInfo *hci, const uint8_t *bd_addr)
1995 {
1996     return -ENOTSUP;
1997 }
1998
1999 static struct HCIInfo null_hci = {
2000     .cmd_send = null_hci_send,
2001     .sco_send = null_hci_send,
2002     .acl_send = null_hci_send,
2003     .bdaddr_set = null_hci_addr_set,
2004 };
2005
2006 struct HCIInfo *qemu_next_hci(void)
2007 {
2008     if (cur_hci == nb_hcis)
2009         return &null_hci;
2010
2011     return hci_table[cur_hci++];
2012 }
2013
2014 static struct HCIInfo *hci_init(const char *str)
2015 {
2016     char *endp;
2017     struct bt_scatternet_s *vlan = 0;
2018
2019     if (!strcmp(str, "null"))
2020         /* null */
2021         return &null_hci;
2022     else if (!strncmp(str, "host", 4) && (str[4] == '\0' || str[4] == ':'))
2023         /* host[:hciN] */
2024         return bt_host_hci(str[4] ? str + 5 : "hci0");
2025     else if (!strncmp(str, "hci", 3)) {
2026         /* hci[,vlan=n] */
2027         if (str[3]) {
2028             if (!strncmp(str + 3, ",vlan=", 6)) {
2029                 vlan = qemu_find_bt_vlan(strtol(str + 9, &endp, 0));
2030                 if (*endp)
2031                     vlan = 0;
2032             }
2033         } else
2034             vlan = qemu_find_bt_vlan(0);
2035         if (vlan)
2036            return bt_new_hci(vlan);
2037     }
2038
2039     fprintf(stderr, "qemu: Unknown bluetooth HCI `%s'.\n", str);
2040
2041     return 0;
2042 }
2043
2044 static int bt_hci_parse(const char *str)
2045 {
2046     struct HCIInfo *hci;
2047     bdaddr_t bdaddr;
2048
2049     if (nb_hcis >= MAX_NICS) {
2050         fprintf(stderr, "qemu: Too many bluetooth HCIs (max %i).\n", MAX_NICS);
2051         return -1;
2052     }
2053
2054     hci = hci_init(str);
2055     if (!hci)
2056         return -1;
2057
2058     bdaddr.b[0] = 0x52;
2059     bdaddr.b[1] = 0x54;
2060     bdaddr.b[2] = 0x00;
2061     bdaddr.b[3] = 0x12;
2062     bdaddr.b[4] = 0x34;
2063     bdaddr.b[5] = 0x56 + nb_hcis;
2064     hci->bdaddr_set(hci, bdaddr.b);
2065
2066     hci_table[nb_hcis++] = hci;
2067
2068     return 0;
2069 }
2070
2071 static void bt_vhci_add(int vlan_id)
2072 {
2073     struct bt_scatternet_s *vlan = qemu_find_bt_vlan(vlan_id);
2074
2075     if (!vlan->slave)
2076         fprintf(stderr, "qemu: warning: adding a VHCI to "
2077                         "an empty scatternet %i\n", vlan_id);
2078
2079     bt_vhci_init(bt_new_hci(vlan));
2080 }
2081
2082 static struct bt_device_s *bt_device_add(const char *opt)
2083 {
2084     struct bt_scatternet_s *vlan;
2085     int vlan_id = 0;
2086     char *endp = strstr(opt, ",vlan=");
2087     int len = (endp ? endp - opt : strlen(opt)) + 1;
2088     char devname[10];
2089
2090     pstrcpy(devname, MIN(sizeof(devname), len), opt);
2091
2092     if (endp) {
2093         vlan_id = strtol(endp + 6, &endp, 0);
2094         if (*endp) {
2095             fprintf(stderr, "qemu: unrecognised bluetooth vlan Id\n");
2096             return 0;
2097         }
2098     }
2099
2100     vlan = qemu_find_bt_vlan(vlan_id);
2101
2102     if (!vlan->slave)
2103         fprintf(stderr, "qemu: warning: adding a slave device to "
2104                         "an empty scatternet %i\n", vlan_id);
2105
2106     if (!strcmp(devname, "keyboard"))
2107         return bt_keyboard_init(vlan);
2108
2109     fprintf(stderr, "qemu: unsupported bluetooth device `%s'\n", devname);
2110     return 0;
2111 }
2112
2113 static int bt_parse(const char *opt)
2114 {
2115     const char *endp, *p;
2116     int vlan;
2117
2118     if (strstart(opt, "hci", &endp)) {
2119         if (!*endp || *endp == ',') {
2120             if (*endp)
2121                 if (!strstart(endp, ",vlan=", 0))
2122                     opt = endp + 1;
2123
2124             return bt_hci_parse(opt);
2125        }
2126     } else if (strstart(opt, "vhci", &endp)) {
2127         if (!*endp || *endp == ',') {
2128             if (*endp) {
2129                 if (strstart(endp, ",vlan=", &p)) {
2130                     vlan = strtol(p, (char **) &endp, 0);
2131                     if (*endp) {
2132                         fprintf(stderr, "qemu: bad scatternet '%s'\n", p);
2133                         return 1;
2134                     }
2135                 } else {
2136                     fprintf(stderr, "qemu: bad parameter '%s'\n", endp + 1);
2137                     return 1;
2138                 }
2139             } else
2140                 vlan = 0;
2141
2142             bt_vhci_add(vlan);
2143             return 0;
2144         }
2145     } else if (strstart(opt, "device:", &endp))
2146         return !bt_device_add(endp);
2147
2148     fprintf(stderr, "qemu: bad bluetooth parameter '%s'\n", opt);
2149     return 1;
2150 }
2151
2152 /***********************************************************/
2153 /* QEMU Block devices */
2154
2155 #define HD_ALIAS "index=%d,media=disk"
2156 #define CDROM_ALIAS "index=2,media=cdrom"
2157 #define FD_ALIAS "index=%d,if=floppy"
2158 #define PFLASH_ALIAS "if=pflash"
2159 #define MTD_ALIAS "if=mtd"
2160 #define SD_ALIAS "index=0,if=sd"
2161
2162 static int drive_opt_get_free_idx(void)
2163 {
2164     int index;
2165
2166     for (index = 0; index < MAX_DRIVES; index++)
2167         if (!drives_opt[index].used) {
2168             drives_opt[index].used = 1;
2169             return index;
2170         }
2171
2172     return -1;
2173 }
2174
2175 static int drive_get_free_idx(void)
2176 {
2177     int index;
2178
2179     for (index = 0; index < MAX_DRIVES; index++)
2180         if (!drives_table[index].used) {
2181             drives_table[index].used = 1;
2182             return index;
2183         }
2184
2185     return -1;
2186 }
2187
2188 int drive_add(const char *file, const char *fmt, ...)
2189 {
2190     va_list ap;
2191     int index = drive_opt_get_free_idx();
2192
2193     if (nb_drives_opt >= MAX_DRIVES || index == -1) {
2194         fprintf(stderr, "qemu: too many drives\n");
2195         return -1;
2196     }
2197
2198     drives_opt[index].file = file;
2199     va_start(ap, fmt);
2200     vsnprintf(drives_opt[index].opt,
2201               sizeof(drives_opt[0].opt), fmt, ap);
2202     va_end(ap);
2203
2204     nb_drives_opt++;
2205     return index;
2206 }
2207
2208 void drive_remove(int index)
2209 {
2210     drives_opt[index].used = 0;
2211     nb_drives_opt--;
2212 }
2213
2214 int drive_get_index(BlockInterfaceType type, int bus, int unit)
2215 {
2216     int index;
2217
2218     /* seek interface, bus and unit */
2219
2220     for (index = 0; index < MAX_DRIVES; index++)
2221         if (drives_table[index].type == type &&
2222             drives_table[index].bus == bus &&
2223             drives_table[index].unit == unit &&
2224             drives_table[index].used)
2225         return index;
2226
2227     return -1;
2228 }
2229
2230 int drive_get_max_bus(BlockInterfaceType type)
2231 {
2232     int max_bus;
2233     int index;
2234
2235     max_bus = -1;
2236     for (index = 0; index < nb_drives; index++) {
2237         if(drives_table[index].type == type &&
2238            drives_table[index].bus > max_bus)
2239             max_bus = drives_table[index].bus;
2240     }
2241     return max_bus;
2242 }
2243
2244 const char *drive_get_serial(BlockDriverState *bdrv)
2245 {
2246     int index;
2247
2248     for (index = 0; index < nb_drives; index++)
2249         if (drives_table[index].bdrv == bdrv)
2250             return drives_table[index].serial;
2251
2252     return "\0";
2253 }
2254
2255 BlockInterfaceErrorAction drive_get_onerror(BlockDriverState *bdrv)
2256 {
2257     int index;
2258
2259     for (index = 0; index < nb_drives; index++)
2260         if (drives_table[index].bdrv == bdrv)
2261             return drives_table[index].onerror;
2262
2263     return BLOCK_ERR_STOP_ENOSPC;
2264 }
2265
2266 static void bdrv_format_print(void *opaque, const char *name)
2267 {
2268     fprintf(stderr, " %s", name);
2269 }
2270
2271 void drive_uninit(BlockDriverState *bdrv)
2272 {
2273     int i;
2274
2275     for (i = 0; i < MAX_DRIVES; i++)
2276         if (drives_table[i].bdrv == bdrv) {
2277             drives_table[i].bdrv = NULL;
2278             drives_table[i].used = 0;
2279             drive_remove(drives_table[i].drive_opt_idx);
2280             nb_drives--;
2281             break;
2282         }
2283 }
2284
2285 int drive_init(struct drive_opt *arg, int snapshot, void *opaque)
2286 {
2287     char buf[128];
2288     char file[1024];
2289     char devname[128];
2290     char serial[21];
2291     const char *mediastr = "";
2292     BlockInterfaceType type;
2293     enum { MEDIA_DISK, MEDIA_CDROM } media;
2294     int bus_id, unit_id;
2295     int cyls, heads, secs, translation;
2296     BlockDriverState *bdrv;
2297     BlockDriver *drv = NULL;
2298     QEMUMachine *machine = opaque;
2299     int max_devs;
2300     int index;
2301     int cache;
2302     int bdrv_flags, onerror;
2303     int drives_table_idx;
2304     char *str = arg->opt;
2305     static const char * const params[] = { "bus", "unit", "if", "index",
2306                                            "cyls", "heads", "secs", "trans",
2307                                            "media", "snapshot", "file",
2308                                            "cache", "format", "serial", "werror",
2309                                            NULL };
2310
2311     if (check_params(buf, sizeof(buf), params, str) < 0) {
2312          fprintf(stderr, "qemu: unknown parameter '%s' in '%s'\n",
2313                          buf, str);
2314          return -1;
2315     }
2316
2317     file[0] = 0;
2318     cyls = heads = secs = 0;
2319     bus_id = 0;
2320     unit_id = -1;
2321     translation = BIOS_ATA_TRANSLATION_AUTO;
2322     index = -1;
2323     cache = 3;
2324
2325     if (machine->use_scsi) {
2326         type = IF_SCSI;
2327         max_devs = MAX_SCSI_DEVS;
2328         pstrcpy(devname, sizeof(devname), "scsi");
2329     } else {
2330         type = IF_IDE;
2331         max_devs = MAX_IDE_DEVS;
2332         pstrcpy(devname, sizeof(devname), "ide");
2333     }
2334     media = MEDIA_DISK;
2335
2336     /* extract parameters */
2337
2338     if (get_param_value(buf, sizeof(buf), "bus", str)) {
2339         bus_id = strtol(buf, NULL, 0);
2340         if (bus_id < 0) {
2341             fprintf(stderr, "qemu: '%s' invalid bus id\n", str);
2342             return -1;
2343         }
2344     }
2345
2346     if (get_param_value(buf, sizeof(buf), "unit", str)) {
2347         unit_id = strtol(buf, NULL, 0);
2348         if (unit_id < 0) {
2349             fprintf(stderr, "qemu: '%s' invalid unit id\n", str);
2350             return -1;
2351         }
2352     }
2353
2354     if (get_param_value(buf, sizeof(buf), "if", str)) {
2355         pstrcpy(devname, sizeof(devname), buf);
2356         if (!strcmp(buf, "ide")) {
2357             type = IF_IDE;
2358             max_devs = MAX_IDE_DEVS;
2359         } else if (!strcmp(buf, "scsi")) {
2360             type = IF_SCSI;
2361             max_devs = MAX_SCSI_DEVS;
2362         } else if (!strcmp(buf, "floppy")) {
2363             type = IF_FLOPPY;
2364             max_devs = 0;
2365         } else if (!strcmp(buf, "pflash")) {
2366             type = IF_PFLASH;
2367             max_devs = 0;
2368         } else if (!strcmp(buf, "mtd")) {
2369             type = IF_MTD;
2370             max_devs = 0;
2371         } else if (!strcmp(buf, "sd")) {
2372             type = IF_SD;
2373             max_devs = 0;
2374         } else if (!strcmp(buf, "virtio")) {
2375             type = IF_VIRTIO;
2376             max_devs = 0;
2377         } else if (!strcmp(buf, "xen")) {
2378             type = IF_XEN;
2379             max_devs = 0;
2380         } else {
2381             fprintf(stderr, "qemu: '%s' unsupported bus type '%s'\n", str, buf);
2382             return -1;
2383         }
2384     }
2385
2386     if (get_param_value(buf, sizeof(buf), "index", str)) {
2387         index = strtol(buf, NULL, 0);
2388         if (index < 0) {
2389             fprintf(stderr, "qemu: '%s' invalid index\n", str);
2390             return -1;
2391         }
2392     }
2393
2394     if (get_param_value(buf, sizeof(buf), "cyls", str)) {
2395         cyls = strtol(buf, NULL, 0);
2396     }
2397
2398     if (get_param_value(buf, sizeof(buf), "heads", str)) {
2399         heads = strtol(buf, NULL, 0);
2400     }
2401
2402     if (get_param_value(buf, sizeof(buf), "secs", str)) {
2403         secs = strtol(buf, NULL, 0);
2404     }
2405
2406     if (cyls || heads || secs) {
2407         if (cyls < 1 || cyls > 16383) {
2408             fprintf(stderr, "qemu: '%s' invalid physical cyls number\n", str);
2409             return -1;
2410         }
2411         if (heads < 1 || heads > 16) {
2412             fprintf(stderr, "qemu: '%s' invalid physical heads number\n", str);
2413             return -1;
2414         }
2415         if (secs < 1 || secs > 63) {
2416             fprintf(stderr, "qemu: '%s' invalid physical secs number\n", str);
2417             return -1;
2418         }
2419     }
2420
2421     if (get_param_value(buf, sizeof(buf), "trans", str)) {
2422         if (!cyls) {
2423             fprintf(stderr,
2424                     "qemu: '%s' trans must be used with cyls,heads and secs\n",
2425                     str);
2426             return -1;
2427         }
2428         if (!strcmp(buf, "none"))
2429             translation = BIOS_ATA_TRANSLATION_NONE;
2430         else if (!strcmp(buf, "lba"))
2431             translation = BIOS_ATA_TRANSLATION_LBA;
2432         else if (!strcmp(buf, "auto"))
2433             translation = BIOS_ATA_TRANSLATION_AUTO;
2434         else {
2435             fprintf(stderr, "qemu: '%s' invalid translation type\n", str);
2436             return -1;
2437         }
2438     }
2439
2440     if (get_param_value(buf, sizeof(buf), "media", str)) {
2441         if (!strcmp(buf, "disk")) {
2442             media = MEDIA_DISK;
2443         } else if (!strcmp(buf, "cdrom")) {
2444             if (cyls || secs || heads) {
2445                 fprintf(stderr,
2446                         "qemu: '%s' invalid physical CHS format\n", str);
2447                 return -1;
2448             }
2449             media = MEDIA_CDROM;
2450         } else {
2451             fprintf(stderr, "qemu: '%s' invalid media\n", str);
2452             return -1;
2453         }
2454     }
2455
2456     if (get_param_value(buf, sizeof(buf), "snapshot", str)) {
2457         if (!strcmp(buf, "on"))
2458             snapshot = 1;
2459         else if (!strcmp(buf, "off"))
2460             snapshot = 0;
2461         else {
2462             fprintf(stderr, "qemu: '%s' invalid snapshot option\n", str);
2463             return -1;
2464         }
2465     }
2466
2467     if (get_param_value(buf, sizeof(buf), "cache", str)) {
2468         if (!strcmp(buf, "off") || !strcmp(buf, "none"))
2469             cache = 0;
2470         else if (!strcmp(buf, "writethrough"))
2471             cache = 1;
2472         else if (!strcmp(buf, "writeback"))
2473             cache = 2;
2474         else {
2475            fprintf(stderr, "qemu: invalid cache option\n");
2476            return -1;
2477         }
2478     }
2479
2480     if (get_param_value(buf, sizeof(buf), "format", str)) {
2481        if (strcmp(buf, "?") == 0) {
2482             fprintf(stderr, "qemu: Supported formats:");
2483             bdrv_iterate_format(bdrv_format_print, NULL);
2484             fprintf(stderr, "\n");
2485             return -1;
2486         }
2487         drv = bdrv_find_format(buf);
2488         if (!drv) {
2489             fprintf(stderr, "qemu: '%s' invalid format\n", buf);
2490             return -1;
2491         }
2492     }
2493
2494     if (arg->file == NULL)
2495         get_param_value(file, sizeof(file), "file", str);
2496     else
2497         pstrcpy(file, sizeof(file), arg->file);
2498
2499     if (!get_param_value(serial, sizeof(serial), "serial", str))
2500             memset(serial, 0,  sizeof(serial));
2501
2502     onerror = BLOCK_ERR_STOP_ENOSPC;
2503     if (get_param_value(buf, sizeof(serial), "werror", str)) {
2504         if (type != IF_IDE && type != IF_SCSI && type != IF_VIRTIO) {
2505             fprintf(stderr, "werror is no supported by this format\n");
2506             return -1;
2507         }
2508         if (!strcmp(buf, "ignore"))
2509             onerror = BLOCK_ERR_IGNORE;
2510         else if (!strcmp(buf, "enospc"))
2511             onerror = BLOCK_ERR_STOP_ENOSPC;
2512         else if (!strcmp(buf, "stop"))
2513             onerror = BLOCK_ERR_STOP_ANY;
2514         else if (!strcmp(buf, "report"))
2515             onerror = BLOCK_ERR_REPORT;
2516         else {
2517             fprintf(stderr, "qemu: '%s' invalid write error action\n", buf);
2518             return -1;
2519         }
2520     }
2521
2522     /* compute bus and unit according index */
2523
2524     if (index != -1) {
2525         if (bus_id != 0 || unit_id != -1) {
2526             fprintf(stderr,
2527                     "qemu: '%s' index cannot be used with bus and unit\n", str);
2528             return -1;
2529         }
2530         if (max_devs == 0)
2531         {
2532             unit_id = index;
2533             bus_id = 0;
2534         } else {
2535             unit_id = index % max_devs;
2536             bus_id = index / max_devs;
2537         }
2538     }
2539
2540     /* if user doesn't specify a unit_id,
2541      * try to find the first free
2542      */
2543
2544     if (unit_id == -1) {
2545        unit_id = 0;
2546        while (drive_get_index(type, bus_id, unit_id) != -1) {
2547            unit_id++;
2548            if (max_devs && unit_id >= max_devs) {
2549                unit_id -= max_devs;
2550                bus_id++;
2551            }
2552        }
2553     }
2554
2555     /* check unit id */
2556
2557     if (max_devs && unit_id >= max_devs) {
2558         fprintf(stderr, "qemu: '%s' unit %d too big (max is %d)\n",
2559                         str, unit_id, max_devs - 1);
2560         return -1;
2561     }
2562
2563     /*
2564      * ignore multiple definitions
2565      */
2566
2567     if (drive_get_index(type, bus_id, unit_id) != -1)
2568         return -2;
2569
2570     /* init */
2571
2572     if (type == IF_IDE || type == IF_SCSI)
2573         mediastr = (media == MEDIA_CDROM) ? "-cd" : "-hd";
2574     if (max_devs)
2575         snprintf(buf, sizeof(buf), "%s%i%s%i",
2576                  devname, bus_id, mediastr, unit_id);
2577     else
2578         snprintf(buf, sizeof(buf), "%s%s%i",
2579                  devname, mediastr, unit_id);
2580     bdrv = bdrv_new(buf);
2581     drives_table_idx = drive_get_free_idx();
2582     drives_table[drives_table_idx].bdrv = bdrv;
2583     drives_table[drives_table_idx].type = type;
2584     drives_table[drives_table_idx].bus = bus_id;
2585     drives_table[drives_table_idx].unit = unit_id;
2586     drives_table[drives_table_idx].onerror = onerror;
2587     drives_table[drives_table_idx].drive_opt_idx = arg - drives_opt;
2588     strncpy(drives_table[nb_drives].serial, serial, sizeof(serial));
2589     nb_drives++;
2590
2591     switch(type) {
2592     case IF_IDE:
2593     case IF_SCSI:
2594     case IF_XEN:
2595         switch(media) {
2596         case MEDIA_DISK:
2597             if (cyls != 0) {
2598                 bdrv_set_geometry_hint(bdrv, cyls, heads, secs);
2599                 bdrv_set_translation_hint(bdrv, translation);
2600             }
2601             break;
2602         case MEDIA_CDROM:
2603             bdrv_set_type_hint(bdrv, BDRV_TYPE_CDROM);
2604             break;
2605         }
2606         break;
2607     case IF_SD:
2608         /* FIXME: This isn't really a floppy, but it's a reasonable
2609            approximation.  */
2610     case IF_FLOPPY:
2611         bdrv_set_type_hint(bdrv, BDRV_TYPE_FLOPPY);
2612         break;
2613     case IF_PFLASH:
2614     case IF_MTD:
2615     case IF_VIRTIO:
2616         break;
2617     }
2618     if (!file[0])
2619         return -2;
2620     bdrv_flags = 0;
2621     if (snapshot) {
2622         bdrv_flags |= BDRV_O_SNAPSHOT;
2623         cache = 2; /* always use write-back with snapshot */
2624     }
2625     if (cache == 0) /* no caching */
2626         bdrv_flags |= BDRV_O_NOCACHE;
2627     else if (cache == 2) /* write-back */
2628         bdrv_flags |= BDRV_O_CACHE_WB;
2629     else if (cache == 3) /* not specified */
2630         bdrv_flags |= BDRV_O_CACHE_DEF;
2631     if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0) {
2632         fprintf(stderr, "qemu: could not open disk image %s\n",
2633                         file);
2634         return -1;
2635     }
2636     if (bdrv_key_required(bdrv))
2637         autostart = 0;
2638     return drives_table_idx;
2639 }
2640
2641 static void numa_add(const char *optarg)
2642 {
2643     char option[128];
2644     char *endptr;
2645     unsigned long long value, endvalue;
2646     int nodenr;
2647
2648     optarg = get_opt_name(option, 128, optarg, ',') + 1;
2649     if (!strcmp(option, "node")) {
2650         if (get_param_value(option, 128, "nodeid", optarg) == 0) {
2651             nodenr = nb_numa_nodes;
2652         } else {
2653             nodenr = strtoull(option, NULL, 10);
2654         }
2655
2656         if (get_param_value(option, 128, "mem", optarg) == 0) {
2657             node_mem[nodenr] = 0;
2658         } else {
2659             value = strtoull(option, &endptr, 0);
2660             switch (*endptr) {
2661             case 0: case 'M': case 'm':
2662                 value <<= 20;
2663                 break;
2664             case 'G': case 'g':
2665                 value <<= 30;
2666                 break;
2667             }
2668             node_mem[nodenr] = value;
2669         }
2670         if (get_param_value(option, 128, "cpus", optarg) == 0) {
2671             node_cpumask[nodenr] = 0;
2672         } else {
2673             value = strtoull(option, &endptr, 10);
2674             if (value >= 64) {
2675                 value = 63;
2676                 fprintf(stderr, "only 64 CPUs in NUMA mode supported.\n");
2677             } else {
2678                 if (*endptr == '-') {
2679                     endvalue = strtoull(endptr+1, &endptr, 10);
2680                     if (endvalue >= 63) {
2681                         endvalue = 62;
2682                         fprintf(stderr,
2683                             "only 63 CPUs in NUMA mode supported.\n");
2684                     }
2685                     value = (1 << (endvalue + 1)) - (1 << value);
2686                 } else {
2687                     value = 1 << value;
2688                 }
2689             }
2690             node_cpumask[nodenr] = value;
2691         }
2692         nb_numa_nodes++;
2693     }
2694     return;
2695 }
2696
2697 /***********************************************************/
2698 /* USB devices */
2699
2700 static USBPort *used_usb_ports;
2701 static USBPort *free_usb_ports;
2702
2703 /* ??? Maybe change this to register a hub to keep track of the topology.  */
2704 void qemu_register_usb_port(USBPort *port, void *opaque, int index,
2705                             usb_attachfn attach)
2706 {
2707     port->opaque = opaque;
2708     port->index = index;
2709     port->attach = attach;
2710     port->next = free_usb_ports;
2711     free_usb_ports = port;
2712 }
2713
2714 int usb_device_add_dev(USBDevice *dev)
2715 {
2716     USBPort *port;
2717
2718     /* Find a USB port to add the device to.  */
2719     port = free_usb_ports;
2720     if (!port->next) {
2721         USBDevice *hub;
2722
2723         /* Create a new hub and chain it on.  */
2724         free_usb_ports = NULL;
2725         port->next = used_usb_ports;
2726         used_usb_ports = port;
2727
2728         hub = usb_hub_init(VM_USB_HUB_SIZE);
2729         usb_attach(port, hub);
2730         port = free_usb_ports;
2731     }
2732
2733     free_usb_ports = port->next;
2734     port->next = used_usb_ports;
2735     used_usb_ports = port;
2736     usb_attach(port, dev);
2737     return 0;
2738 }
2739
2740 static void usb_msd_password_cb(void *opaque, int err)
2741 {
2742     USBDevice *dev = opaque;
2743
2744     if (!err)
2745         usb_device_add_dev(dev);
2746     else
2747         dev->handle_destroy(dev);
2748 }
2749
2750 static int usb_device_add(const char *devname, int is_hotplug)
2751 {
2752     const char *p;
2753     USBDevice *dev;
2754
2755     if (!free_usb_ports)
2756         return -1;
2757
2758     if (strstart(devname, "host:", &p)) {
2759         dev = usb_host_device_open(p);
2760     } else if (!strcmp(devname, "mouse")) {
2761         dev = usb_mouse_init();
2762     } else if (!strcmp(devname, "tablet")) {
2763         dev = usb_tablet_init();
2764     } else if (!strcmp(devname, "keyboard")) {
2765         dev = usb_keyboard_init();
2766     } else if (strstart(devname, "disk:", &p)) {
2767         BlockDriverState *bs;
2768
2769         dev = usb_msd_init(p);
2770         if (!dev)
2771             return -1;
2772         bs = usb_msd_get_bdrv(dev);
2773         if (bdrv_key_required(bs)) {
2774             autostart = 0;
2775             if (is_hotplug) {
2776                 monitor_read_bdrv_key_start(cur_mon, bs, usb_msd_password_cb,
2777                                             dev);
2778                 return 0;
2779             }
2780         }
2781     } else if (!strcmp(devname, "wacom-tablet")) {
2782         dev = usb_wacom_init();
2783     } else if (strstart(devname, "serial:", &p)) {
2784         dev = usb_serial_init(p);
2785 #ifdef CONFIG_BRLAPI
2786     } else if (!strcmp(devname, "braille")) {
2787         dev = usb_baum_init();
2788 #endif
2789     } else if (strstart(devname, "net:", &p)) {
2790         int nic = nb_nics;
2791
2792         if (net_client_init("nic", p) < 0)
2793             return -1;
2794         nd_table[nic].model = "usb";
2795         dev = usb_net_init(&nd_table[nic]);
2796     } else if (!strcmp(devname, "bt") || strstart(devname, "bt:", &p)) {
2797         dev = usb_bt_init(devname[2] ? hci_init(p) :
2798                         bt_new_hci(qemu_find_bt_vlan(0)));
2799     } else {
2800         return -1;
2801     }
2802     if (!dev)
2803         return -1;
2804
2805     return usb_device_add_dev(dev);
2806 }
2807
2808 int usb_device_del_addr(int bus_num, int addr)
2809 {
2810     USBPort *port;
2811     USBPort **lastp;
2812     USBDevice *dev;
2813
2814     if (!used_usb_ports)
2815         return -1;
2816
2817     if (bus_num != 0)
2818         return -1;
2819
2820     lastp = &used_usb_ports;
2821     port = used_usb_ports;
2822     while (port && port->dev->addr != addr) {
2823         lastp = &port->next;
2824         port = port->next;
2825     }
2826
2827     if (!port)
2828         return -1;
2829
2830     dev = port->dev;
2831     *lastp = port->next;
2832     usb_attach(port, NULL);
2833     dev->handle_destroy(dev);
2834     port->next = free_usb_ports;
2835     free_usb_ports = port;
2836     return 0;
2837 }
2838
2839 static int usb_device_del(const char *devname)
2840 {
2841     int bus_num, addr;
2842     const char *p;
2843
2844     if (strstart(devname, "host:", &p))
2845         return usb_host_device_close(p);
2846
2847     if (!used_usb_ports)
2848         return -1;
2849
2850     p = strchr(devname, '.');
2851     if (!p)
2852         return -1;
2853     bus_num = strtoul(devname, NULL, 0);
2854     addr = strtoul(p + 1, NULL, 0);
2855
2856     return usb_device_del_addr(bus_num, addr);
2857 }
2858
2859 void do_usb_add(Monitor *mon, const char *devname)
2860 {
2861     usb_device_add(devname, 1);
2862 }
2863
2864 void do_usb_del(Monitor *mon, const char *devname)
2865 {
2866     usb_device_del(devname);
2867 }
2868
2869 void usb_info(Monitor *mon)
2870 {
2871     USBDevice *dev;
2872     USBPort *port;
2873     const char *speed_str;
2874
2875     if (!usb_enabled) {
2876         monitor_printf(mon, "USB support not enabled\n");
2877         return;
2878     }
2879
2880     for (port = used_usb_ports; port; port = port->next) {
2881         dev = port->dev;
2882         if (!dev)
2883             continue;
2884         switch(dev->speed) {
2885         case USB_SPEED_LOW:
2886             speed_str = "1.5";
2887             break;
2888         case USB_SPEED_FULL:
2889             speed_str = "12";
2890             break;
2891         case USB_SPEED_HIGH:
2892             speed_str = "480";
2893             break;
2894         default:
2895             speed_str = "?";
2896             break;
2897         }
2898         monitor_printf(mon, "  Device %d.%d, Speed %s Mb/s, Product %s\n",
2899                        0, dev->addr, speed_str, dev->devname);
2900     }
2901 }
2902
2903 /***********************************************************/
2904 /* PCMCIA/Cardbus */
2905
2906 static struct pcmcia_socket_entry_s {
2907     struct pcmcia_socket_s *socket;
2908     struct pcmcia_socket_entry_s *next;
2909 } *pcmcia_sockets = 0;
2910
2911 void pcmcia_socket_register(struct pcmcia_socket_s *socket)
2912 {
2913     struct pcmcia_socket_entry_s *entry;
2914
2915     entry = qemu_malloc(sizeof(struct pcmcia_socket_entry_s));
2916     entry->socket = socket;
2917     entry->next = pcmcia_sockets;
2918     pcmcia_sockets = entry;
2919 }
2920
2921 void pcmcia_socket_unregister(struct pcmcia_socket_s *socket)
2922 {
2923     struct pcmcia_socket_entry_s *entry, **ptr;
2924
2925     ptr = &pcmcia_sockets;
2926     for (entry = *ptr; entry; ptr = &entry->next, entry = *ptr)
2927         if (entry->socket == socket) {
2928             *ptr = entry->next;
2929             qemu_free(entry);
2930         }
2931 }
2932
2933 void pcmcia_info(Monitor *mon)
2934 {
2935     struct pcmcia_socket_entry_s *iter;
2936
2937     if (!pcmcia_sockets)
2938         monitor_printf(mon, "No PCMCIA sockets\n");
2939
2940     for (iter = pcmcia_sockets; iter; iter = iter->next)
2941         monitor_printf(mon, "%s: %s\n", iter->socket->slot_string,
2942                        iter->socket->attached ? iter->socket->card_string :
2943                        "Empty");
2944 }
2945
2946 /***********************************************************/
2947 /* register display */
2948
2949 struct DisplayAllocator default_allocator = {
2950     defaultallocator_create_displaysurface,
2951     defaultallocator_resize_displaysurface,
2952     defaultallocator_free_displaysurface
2953 };
2954
2955 void register_displaystate(DisplayState *ds)
2956 {
2957     DisplayState **s;
2958     s = &display_state;
2959     while (*s != NULL)
2960         s = &(*s)->next;
2961     ds->next = NULL;
2962     *s = ds;
2963 }
2964
2965 DisplayState *get_displaystate(void)
2966 {
2967     return display_state;
2968 }
2969
2970 DisplayAllocator *register_displayallocator(DisplayState *ds, DisplayAllocator *da)
2971 {
2972     if(ds->allocator ==  &default_allocator) ds->allocator = da;
2973     return ds->allocator;
2974 }
2975
2976 /* dumb display */
2977
2978 static void dumb_display_init(void)
2979 {
2980     DisplayState *ds = qemu_mallocz(sizeof(DisplayState));
2981     ds->allocator = &default_allocator;
2982     ds->surface = qemu_create_displaysurface(ds, 640, 480);
2983     register_displaystate(ds);
2984 }
2985
2986 /***********************************************************/
2987 /* I/O handling */
2988
2989 typedef struct IOHandlerRecord {
2990     int fd;
2991     IOCanRWHandler *fd_read_poll;
2992     IOHandler *fd_read;
2993     IOHandler *fd_write;
2994     int deleted;
2995     void *opaque;
2996     /* temporary data */
2997     struct pollfd *ufd;
2998     struct IOHandlerRecord *next;
2999 } IOHandlerRecord;
3000
3001 static IOHandlerRecord *first_io_handler;
3002
3003 /* XXX: fd_read_poll should be suppressed, but an API change is
3004    necessary in the character devices to suppress fd_can_read(). */
3005 int qemu_set_fd_handler2(int fd,
3006                          IOCanRWHandler *fd_read_poll,
3007                          IOHandler *fd_read,
3008                          IOHandler *fd_write,
3009                          void *opaque)
3010 {
3011     IOHandlerRecord **pioh, *ioh;
3012
3013     if (!fd_read && !fd_write) {
3014         pioh = &first_io_handler;
3015         for(;;) {
3016             ioh = *pioh;
3017             if (ioh == NULL)
3018                 break;
3019             if (ioh->fd == fd) {
3020                 ioh->deleted = 1;
3021                 break;
3022             }
3023             pioh = &ioh->next;
3024         }
3025     } else {
3026         for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
3027             if (ioh->fd == fd)
3028                 goto found;
3029         }
3030         ioh = qemu_mallocz(sizeof(IOHandlerRecord));
3031         ioh->next = first_io_handler;
3032         first_io_handler = ioh;
3033     found:
3034         ioh->fd = fd;
3035         ioh->fd_read_poll = fd_read_poll;
3036         ioh->fd_read = fd_read;
3037         ioh->fd_write = fd_write;
3038         ioh->opaque = opaque;
3039         ioh->deleted = 0;
3040     }
3041     return 0;
3042 }
3043
3044 int qemu_set_fd_handler(int fd,
3045                         IOHandler *fd_read,
3046                         IOHandler *fd_write,
3047                         void *opaque)
3048 {
3049     return qemu_set_fd_handler2(fd, NULL, fd_read, fd_write, opaque);
3050 }
3051
3052 #ifdef _WIN32
3053 /***********************************************************/
3054 /* Polling handling */
3055
3056 typedef struct PollingEntry {
3057     PollingFunc *func;
3058     void *opaque;
3059     struct PollingEntry *next;
3060 } PollingEntry;
3061
3062 static PollingEntry *first_polling_entry;
3063
3064 int qemu_add_polling_cb(PollingFunc *func, void *opaque)
3065 {
3066     PollingEntry **ppe, *pe;
3067     pe = qemu_mallocz(sizeof(PollingEntry));
3068     pe->func = func;
3069     pe->opaque = opaque;
3070     for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next);
3071     *ppe = pe;
3072     return 0;
3073 }
3074
3075 void qemu_del_polling_cb(PollingFunc *func, void *opaque)
3076 {
3077     PollingEntry **ppe, *pe;
3078     for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next) {
3079         pe = *ppe;
3080         if (pe->func == func && pe->opaque == opaque) {
3081             *ppe = pe->next;
3082             qemu_free(pe);
3083             break;
3084         }
3085     }
3086 }
3087
3088 /***********************************************************/
3089 /* Wait objects support */
3090 typedef struct WaitObjects {
3091     int num;
3092     HANDLE events[MAXIMUM_WAIT_OBJECTS + 1];
3093     WaitObjectFunc *func[MAXIMUM_WAIT_OBJECTS + 1];
3094     void *opaque[MAXIMUM_WAIT_OBJECTS + 1];
3095 } WaitObjects;
3096
3097 static WaitObjects wait_objects = {0};
3098
3099 int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
3100 {
3101     WaitObjects *w = &wait_objects;
3102
3103     if (w->num >= MAXIMUM_WAIT_OBJECTS)
3104         return -1;
3105     w->events[w->num] = handle;
3106     w->func[w->num] = func;
3107     w->opaque[w->num] = opaque;
3108     w->num++;
3109     return 0;
3110 }
3111
3112 void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
3113 {
3114     int i, found;
3115     WaitObjects *w = &wait_objects;
3116
3117     found = 0;
3118     for (i = 0; i < w->num; i++) {
3119         if (w->events[i] == handle)
3120             found = 1;
3121         if (found) {
3122             w->events[i] = w->events[i + 1];
3123             w->func[i] = w->func[i + 1];
3124             w->opaque[i] = w->opaque[i + 1];
3125         }
3126     }
3127     if (found)
3128         w->num--;
3129 }
3130 #endif
3131
3132 /***********************************************************/
3133 /* ram save/restore */
3134
3135 static int ram_get_page(QEMUFile *f, uint8_t *buf, int len)
3136 {
3137     int v;
3138
3139     v = qemu_get_byte(f);
3140     switch(v) {
3141     case 0:
3142         if (qemu_get_buffer(f, buf, len) != len)
3143             return -EIO;
3144         break;
3145     case 1:
3146         v = qemu_get_byte(f);
3147         memset(buf, v, len);
3148         break;
3149     default:
3150         return -EINVAL;
3151     }
3152
3153     if (qemu_file_has_error(f))
3154         return -EIO;
3155
3156     return 0;
3157 }
3158
3159 static int ram_load_v1(QEMUFile *f, void *opaque)
3160 {
3161     int ret;
3162     ram_addr_t i;
3163
3164     if (qemu_get_be32(f) != last_ram_offset)
3165         return -EINVAL;
3166     for(i = 0; i < last_ram_offset; i+= TARGET_PAGE_SIZE) {
3167         ret = ram_get_page(f, qemu_get_ram_ptr(i), TARGET_PAGE_SIZE);
3168         if (ret)
3169             return ret;
3170     }
3171     return 0;
3172 }
3173
3174 #define BDRV_HASH_BLOCK_SIZE 1024
3175 #define IOBUF_SIZE 4096
3176 #define RAM_CBLOCK_MAGIC 0xfabe
3177
3178 typedef struct RamDecompressState {
3179     z_stream zstream;
3180     QEMUFile *f;
3181     uint8_t buf[IOBUF_SIZE];
3182 } RamDecompressState;
3183
3184 static int ram_decompress_open(RamDecompressState *s, QEMUFile *f)
3185 {
3186     int ret;
3187     memset(s, 0, sizeof(*s));
3188     s->f = f;
3189     ret = inflateInit(&s->zstream);
3190     if (ret != Z_OK)
3191         return -1;
3192     return 0;
3193 }
3194
3195 static int ram_decompress_buf(RamDecompressState *s, uint8_t *buf, int len)
3196 {
3197     int ret, clen;
3198
3199     s->zstream.avail_out = len;
3200     s->zstream.next_out = buf;
3201     while (s->zstream.avail_out > 0) {
3202         if (s->zstream.avail_in == 0) {
3203             if (qemu_get_be16(s->f) != RAM_CBLOCK_MAGIC)
3204                 return -1;
3205             clen = qemu_get_be16(s->f);
3206             if (clen > IOBUF_SIZE)
3207                 return -1;
3208             qemu_get_buffer(s->f, s->buf, clen);
3209             s->zstream.avail_in = clen;
3210             s->zstream.next_in = s->buf;
3211         }
3212         ret = inflate(&s->zstream, Z_PARTIAL_FLUSH);
3213         if (ret != Z_OK && ret != Z_STREAM_END) {
3214             return -1;
3215         }
3216     }
3217     return 0;
3218 }
3219
3220 static void ram_decompress_close(RamDecompressState *s)
3221 {
3222     inflateEnd(&s->zstream);
3223 }
3224
3225 #define RAM_SAVE_FLAG_FULL      0x01
3226 #define RAM_SAVE_FLAG_COMPRESS  0x02
3227 #define RAM_SAVE_FLAG_MEM_SIZE  0x04
3228 #define RAM_SAVE_FLAG_PAGE      0x08
3229 #define RAM_SAVE_FLAG_EOS       0x10
3230
3231 static int is_dup_page(uint8_t *page, uint8_t ch)
3232 {
3233     uint32_t val = ch << 24 | ch << 16 | ch << 8 | ch;
3234     uint32_t *array = (uint32_t *)page;
3235     int i;
3236
3237     for (i = 0; i < (TARGET_PAGE_SIZE / 4); i++) {
3238         if (array[i] != val)
3239             return 0;
3240     }
3241
3242     return 1;
3243 }
3244
3245 static int ram_save_block(QEMUFile *f)
3246 {
3247     static ram_addr_t current_addr = 0;
3248     ram_addr_t saved_addr = current_addr;
3249     ram_addr_t addr = 0;
3250     int found = 0;
3251
3252     while (addr < last_ram_offset) {
3253         if (cpu_physical_memory_get_dirty(current_addr, MIGRATION_DIRTY_FLAG)) {
3254             uint8_t *p;
3255
3256             cpu_physical_memory_reset_dirty(current_addr,
3257                                             current_addr + TARGET_PAGE_SIZE,
3258                                             MIGRATION_DIRTY_FLAG);
3259
3260             p = qemu_get_ram_ptr(current_addr);
3261
3262             if (is_dup_page(p, *p)) {
3263                 qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_COMPRESS);
3264                 qemu_put_byte(f, *p);
3265             } else {
3266                 qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_PAGE);
3267                 qemu_put_buffer(f, p, TARGET_PAGE_SIZE);
3268             }
3269
3270             found = 1;
3271             break;
3272         }
3273         addr += TARGET_PAGE_SIZE;
3274         current_addr = (saved_addr + addr) % last_ram_offset;
3275     }
3276
3277     return found;
3278 }
3279
3280 static ram_addr_t ram_save_threshold = 10;
3281
3282 static ram_addr_t ram_save_remaining(void)
3283 {
3284     ram_addr_t addr;
3285     ram_addr_t count = 0;
3286
3287     for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
3288         if (cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
3289             count++;
3290     }
3291
3292     return count;
3293 }
3294
3295 static int ram_save_live(QEMUFile *f, int stage, void *opaque)
3296 {
3297     ram_addr_t addr;
3298
3299     if (stage == 1) {
3300         /* Make sure all dirty bits are set */
3301         for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
3302             if (!cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
3303                 cpu_physical_memory_set_dirty(addr);
3304         }
3305         
3306         /* Enable dirty memory tracking */
3307         cpu_physical_memory_set_dirty_tracking(1);
3308
3309         qemu_put_be64(f, last_ram_offset | RAM_SAVE_FLAG_MEM_SIZE);
3310     }
3311
3312     while (!qemu_file_rate_limit(f)) {
3313         int ret;
3314
3315         ret = ram_save_block(f);
3316         if (ret == 0) /* no more blocks */
3317             break;
3318     }
3319
3320     /* try transferring iterative blocks of memory */
3321
3322     if (stage == 3) {
3323
3324         /* flush all remaining blocks regardless of rate limiting */
3325         while (ram_save_block(f) != 0);
3326         cpu_physical_memory_set_dirty_tracking(0);
3327     }
3328
3329     qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
3330
3331     return (stage == 2) && (ram_save_remaining() < ram_save_threshold);
3332 }
3333
3334 static int ram_load_dead(QEMUFile *f, void *opaque)
3335 {
3336     RamDecompressState s1, *s = &s1;
3337     uint8_t buf[10];
3338     ram_addr_t i;
3339
3340     if (ram_decompress_open(s, f) < 0)
3341         return -EINVAL;
3342     for(i = 0; i < last_ram_offset; i+= BDRV_HASH_BLOCK_SIZE) {
3343         if (ram_decompress_buf(s, buf, 1) < 0) {
3344             fprintf(stderr, "Error while reading ram block header\n");
3345             goto error;
3346         }
3347         if (buf[0] == 0) {
3348             if (ram_decompress_buf(s, qemu_get_ram_ptr(i),
3349                                    BDRV_HASH_BLOCK_SIZE) < 0) {
3350                 fprintf(stderr, "Error while reading ram block address=0x%08" PRIx64, (uint64_t)i);
3351                 goto error;
3352             }
3353         } else {
3354         error:
3355             printf("Error block header\n");
3356             return -EINVAL;
3357         }
3358     }
3359     ram_decompress_close(s);
3360
3361     return 0;
3362 }
3363
3364 static int ram_load(QEMUFile *f, void *opaque, int version_id)
3365 {
3366     ram_addr_t addr;
3367     int flags;
3368
3369     if (version_id == 1)
3370         return ram_load_v1(f, opaque);
3371
3372     if (version_id == 2) {
3373         if (qemu_get_be32(f) != last_ram_offset)
3374             return -EINVAL;
3375         return ram_load_dead(f, opaque);
3376     }
3377
3378     if (version_id != 3)
3379         return -EINVAL;
3380
3381     do {
3382         addr = qemu_get_be64(f);
3383
3384         flags = addr & ~TARGET_PAGE_MASK;
3385         addr &= TARGET_PAGE_MASK;
3386
3387         if (flags & RAM_SAVE_FLAG_MEM_SIZE) {
3388             if (addr != last_ram_offset)
3389                 return -EINVAL;
3390         }
3391
3392         if (flags & RAM_SAVE_FLAG_FULL) {
3393             if (ram_load_dead(f, opaque) < 0)
3394                 return -EINVAL;
3395         }
3396         
3397         if (flags & RAM_SAVE_FLAG_COMPRESS) {
3398             uint8_t ch = qemu_get_byte(f);
3399             memset(qemu_get_ram_ptr(addr), ch, TARGET_PAGE_SIZE);
3400         } else if (flags & RAM_SAVE_FLAG_PAGE)
3401             qemu_get_buffer(f, qemu_get_ram_ptr(addr), TARGET_PAGE_SIZE);
3402     } while (!(flags & RAM_SAVE_FLAG_EOS));
3403
3404     return 0;
3405 }
3406
3407 void qemu_service_io(void)
3408 {
3409     CPUState *env = cpu_single_env;
3410     if (env) {
3411         cpu_exit(env);
3412 #ifdef CONFIG_KQEMU
3413         if (env->kqemu_enabled) {
3414             kqemu_cpu_interrupt(env);
3415         }
3416 #endif
3417     }
3418 }
3419
3420 /***********************************************************/
3421 /* bottom halves (can be seen as timers which expire ASAP) */
3422
3423 struct QEMUBH {
3424     QEMUBHFunc *cb;
3425     void *opaque;
3426     int scheduled;
3427     int idle;
3428     int deleted;
3429     QEMUBH *next;
3430 };
3431
3432 static QEMUBH *first_bh = NULL;
3433
3434 QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque)
3435 {
3436     QEMUBH *bh;
3437     bh = qemu_mallocz(sizeof(QEMUBH));
3438     bh->cb = cb;
3439     bh->opaque = opaque;
3440     bh->next = first_bh;
3441     first_bh = bh;
3442     return bh;
3443 }
3444
3445 int qemu_bh_poll(void)
3446 {
3447     QEMUBH *bh, **bhp;
3448     int ret;
3449
3450     ret = 0;
3451     for (bh = first_bh; bh; bh = bh->next) {
3452         if (!bh->deleted && bh->scheduled) {
3453             bh->scheduled = 0;
3454             if (!bh->idle)
3455                 ret = 1;
3456             bh->idle = 0;
3457             bh->cb(bh->opaque);
3458         }
3459     }
3460
3461     /* remove deleted bhs */
3462     bhp = &first_bh;
3463     while (*bhp) {
3464         bh = *bhp;
3465         if (bh->deleted) {
3466             *bhp = bh->next;
3467             qemu_free(bh);
3468         } else
3469             bhp = &bh->next;
3470     }
3471
3472     return ret;
3473 }
3474
3475 void qemu_bh_schedule_idle(QEMUBH *bh)
3476 {
3477     if (bh->scheduled)
3478         return;
3479     bh->scheduled = 1;
3480     bh->idle = 1;
3481 }
3482
3483 void qemu_bh_schedule(QEMUBH *bh)
3484 {
3485     CPUState *env = cpu_single_env;
3486     if (bh->scheduled)
3487         return;
3488     bh->scheduled = 1;
3489     bh->idle = 0;
3490     /* stop the currently executing CPU to execute the BH ASAP */
3491     if (env) {
3492         cpu_exit(env);
3493     }
3494 }
3495
3496 void qemu_bh_cancel(QEMUBH *bh)
3497 {
3498     bh->scheduled = 0;
3499 }
3500
3501 void qemu_bh_delete(QEMUBH *bh)
3502 {
3503     bh->scheduled = 0;
3504     bh->deleted = 1;
3505 }
3506
3507 static void qemu_bh_update_timeout(int *timeout)
3508 {
3509     QEMUBH *bh;
3510
3511     for (bh = first_bh; bh; bh = bh->next) {
3512         if (!bh->deleted && bh->scheduled) {
3513             if (bh->idle) {
3514                 /* idle bottom halves will be polled at least
3515                  * every 10ms */
3516                 *timeout = MIN(10, *timeout);
3517             } else {
3518                 /* non-idle bottom halves will be executed
3519                  * immediately */
3520                 *timeout = 0;
3521                 break;
3522             }
3523         }
3524     }
3525 }
3526
3527 /***********************************************************/
3528 /* machine registration */
3529
3530 static QEMUMachine *first_machine = NULL;
3531 QEMUMachine *current_machine = NULL;
3532
3533 int qemu_register_machine(QEMUMachine *m)
3534 {
3535     QEMUMachine **pm;
3536     pm = &first_machine;
3537     while (*pm != NULL)
3538         pm = &(*pm)->next;
3539     m->next = NULL;
3540     *pm = m;
3541     return 0;
3542 }
3543
3544 static QEMUMachine *find_machine(const char *name)
3545 {
3546     QEMUMachine *m;
3547
3548     for(m = first_machine; m != NULL; m = m->next) {
3549         if (!strcmp(m->name, name))
3550             return m;
3551     }
3552     return NULL;
3553 }
3554
3555 /***********************************************************/
3556 /* main execution loop */
3557
3558 static void gui_update(void *opaque)
3559 {
3560     uint64_t interval = GUI_REFRESH_INTERVAL;
3561     DisplayState *ds = opaque;
3562     DisplayChangeListener *dcl = ds->listeners;
3563
3564     dpy_refresh(ds);
3565
3566     while (dcl != NULL) {
3567         if (dcl->gui_timer_interval &&
3568             dcl->gui_timer_interval < interval)
3569             interval = dcl->gui_timer_interval;
3570         dcl = dcl->next;
3571     }
3572     qemu_mod_timer(ds->gui_timer, interval + qemu_get_clock(rt_clock));
3573 }
3574
3575 static void nographic_update(void *opaque)
3576 {
3577     uint64_t interval = GUI_REFRESH_INTERVAL;
3578
3579     qemu_mod_timer(nographic_timer, interval + qemu_get_clock(rt_clock));
3580 }
3581
3582 struct vm_change_state_entry {
3583     VMChangeStateHandler *cb;
3584     void *opaque;
3585     LIST_ENTRY (vm_change_state_entry) entries;
3586 };
3587
3588 static LIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head;
3589
3590 VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
3591                                                      void *opaque)
3592 {
3593     VMChangeStateEntry *e;
3594
3595     e = qemu_mallocz(sizeof (*e));
3596
3597     e->cb = cb;
3598     e->opaque = opaque;
3599     LIST_INSERT_HEAD(&vm_change_state_head, e, entries);
3600     return e;
3601 }
3602
3603 void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
3604 {
3605     LIST_REMOVE (e, entries);
3606     qemu_free (e);
3607 }
3608
3609 static void vm_state_notify(int running, int reason)
3610 {
3611     VMChangeStateEntry *e;
3612
3613     for (e = vm_change_state_head.lh_first; e; e = e->entries.le_next) {
3614         e->cb(e->opaque, running, reason);
3615     }
3616 }
3617
3618 void vm_start(void)
3619 {
3620     if (!vm_running) {
3621         cpu_enable_ticks();
3622         vm_running = 1;
3623         vm_state_notify(1, 0);
3624         qemu_rearm_alarm_timer(alarm_timer);
3625     }
3626 }
3627
3628 void vm_stop(int reason)
3629 {
3630     if (vm_running) {
3631         cpu_disable_ticks();
3632         vm_running = 0;
3633         vm_state_notify(0, reason);
3634     }
3635 }
3636
3637 /* reset/shutdown handler */
3638
3639 typedef struct QEMUResetEntry {
3640     QEMUResetHandler *func;
3641     void *opaque;
3642     struct QEMUResetEntry *next;
3643 } QEMUResetEntry;
3644
3645 static QEMUResetEntry *first_reset_entry;
3646 static int reset_requested;
3647 static int shutdown_requested;
3648 static int powerdown_requested;
3649
3650 int qemu_shutdown_requested(void)
3651 {
3652     int r = shutdown_requested;
3653     shutdown_requested = 0;
3654     return r;
3655 }
3656
3657 int qemu_reset_requested(void)
3658 {
3659     int r = reset_requested;
3660     reset_requested = 0;
3661     return r;
3662 }
3663
3664 int qemu_powerdown_requested(void)
3665 {
3666     int r = powerdown_requested;
3667     powerdown_requested = 0;
3668     return r;
3669 }
3670
3671 void qemu_register_reset(QEMUResetHandler *func, void *opaque)
3672 {
3673     QEMUResetEntry **pre, *re;
3674
3675     pre = &first_reset_entry;
3676     while (*pre != NULL)
3677         pre = &(*pre)->next;
3678     re = qemu_mallocz(sizeof(QEMUResetEntry));
3679     re->func = func;
3680     re->opaque = opaque;
3681     re->next = NULL;
3682     *pre = re;
3683 }
3684
3685 void qemu_system_reset(void)
3686 {
3687     QEMUResetEntry *re;
3688
3689     /* reset all devices */
3690     for(re = first_reset_entry; re != NULL; re = re->next) {
3691         re->func(re->opaque);
3692     }
3693     if (kvm_enabled())
3694         kvm_sync_vcpus();
3695 }
3696
3697 void qemu_system_reset_request(void)
3698 {
3699     if (no_reboot) {
3700         shutdown_requested = 1;
3701     } else {
3702         reset_requested = 1;
3703     }
3704     if (cpu_single_env)
3705         cpu_exit(cpu_single_env);
3706 }
3707
3708 void qemu_system_shutdown_request(void)
3709 {
3710     shutdown_requested = 1;
3711     if (cpu_single_env)
3712         cpu_exit(cpu_single_env);
3713 }
3714
3715 void qemu_system_powerdown_request(void)
3716 {
3717     powerdown_requested = 1;
3718     if (cpu_single_env)
3719         cpu_exit(cpu_single_env);
3720 }
3721
3722 #ifdef _WIN32
3723 static void host_main_loop_wait(int *timeout)
3724 {
3725     int ret, ret2, i;
3726     PollingEntry *pe;
3727
3728
3729     /* XXX: need to suppress polling by better using win32 events */
3730     ret = 0;
3731     for(pe = first_polling_entry; pe != NULL; pe = pe->next) {
3732         ret |= pe->func(pe->opaque);
3733     }
3734     if (ret == 0) {
3735         int err;
3736         WaitObjects *w = &wait_objects;
3737
3738         ret = WaitForMultipleObjects(w->num, w->events, FALSE, *timeout);
3739         if (WAIT_OBJECT_0 + 0 <= ret && ret <= WAIT_OBJECT_0 + w->num - 1) {
3740             if (w->func[ret - WAIT_OBJECT_0])
3741                 w->func[ret - WAIT_OBJECT_0](w->opaque[ret - WAIT_OBJECT_0]);
3742
3743             /* Check for additional signaled events */
3744             for(i = (ret - WAIT_OBJECT_0 + 1); i < w->num; i++) {
3745
3746                 /* Check if event is signaled */
3747                 ret2 = WaitForSingleObject(w->events[i], 0);
3748                 if(ret2 == WAIT_OBJECT_0) {
3749                     if (w->func[i])
3750                         w->func[i](w->opaque[i]);
3751                 } else if (ret2 == WAIT_TIMEOUT) {
3752                 } else {
3753                     err = GetLastError();
3754                     fprintf(stderr, "WaitForSingleObject error %d %d\n", i, err);
3755                 }
3756             }
3757         } else if (ret == WAIT_TIMEOUT) {
3758         } else {
3759             err = GetLastError();
3760             fprintf(stderr, "WaitForMultipleObjects error %d %d\n", ret, err);
3761         }
3762     }
3763
3764     *timeout = 0;
3765 }
3766 #else
3767 static void host_main_loop_wait(int *timeout)
3768 {
3769 }
3770 #endif
3771
3772 void main_loop_wait(int timeout)
3773 {
3774     IOHandlerRecord *ioh;
3775     fd_set rfds, wfds, xfds;
3776     int ret, nfds;
3777     struct timeval tv;
3778
3779     qemu_bh_update_timeout(&timeout);
3780
3781     host_main_loop_wait(&timeout);
3782
3783     /* poll any events */
3784     /* XXX: separate device handlers from system ones */
3785     nfds = -1;
3786     FD_ZERO(&rfds);
3787     FD_ZERO(&wfds);
3788     FD_ZERO(&xfds);
3789     for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
3790         if (ioh->deleted)
3791             continue;
3792         if (ioh->fd_read &&
3793             (!ioh->fd_read_poll ||
3794              ioh->fd_read_poll(ioh->opaque) != 0)) {
3795             FD_SET(ioh->fd, &rfds);
3796             if (ioh->fd > nfds)
3797                 nfds = ioh->fd;
3798         }
3799         if (ioh->fd_write) {
3800             FD_SET(ioh->fd, &wfds);
3801             if (ioh->fd > nfds)
3802                 nfds = ioh->fd;
3803         }
3804     }
3805
3806     tv.tv_sec = timeout / 1000;
3807     tv.tv_usec = (timeout % 1000) * 1000;
3808
3809 #if defined(CONFIG_SLIRP)
3810     if (slirp_is_inited()) {
3811         slirp_select_fill(&nfds, &rfds, &wfds, &xfds);
3812     }
3813 #endif
3814     ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv);
3815     if (ret > 0) {
3816         IOHandlerRecord **pioh;
3817
3818         for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
3819             if (!ioh->deleted && ioh->fd_read && FD_ISSET(ioh->fd, &rfds)) {
3820                 ioh->fd_read(ioh->opaque);
3821             }
3822             if (!ioh->deleted && ioh->fd_write && FD_ISSET(ioh->fd, &wfds)) {
3823                 ioh->fd_write(ioh->opaque);
3824             }
3825         }
3826
3827         /* remove deleted IO handlers */
3828         pioh = &first_io_handler;
3829         while (*pioh) {
3830             ioh = *pioh;
3831             if (ioh->deleted) {
3832                 *pioh = ioh->next;
3833                 qemu_free(ioh);
3834             } else
3835                 pioh = &ioh->next;
3836         }
3837     }
3838 #if defined(CONFIG_SLIRP)
3839     if (slirp_is_inited()) {
3840         if (ret < 0) {
3841             FD_ZERO(&rfds);
3842             FD_ZERO(&wfds);
3843             FD_ZERO(&xfds);
3844         }
3845         slirp_select_poll(&rfds, &wfds, &xfds);
3846     }
3847 #endif
3848
3849     /* vm time timers */
3850     if (vm_running && likely(!(cur_cpu->singlestep_enabled & SSTEP_NOTIMER)))
3851         qemu_run_timers(&active_timers[QEMU_TIMER_VIRTUAL],
3852                         qemu_get_clock(vm_clock));
3853
3854     /* real time timers */
3855     qemu_run_timers(&active_timers[QEMU_TIMER_REALTIME],
3856                     qemu_get_clock(rt_clock));
3857
3858     /* Check bottom-halves last in case any of the earlier events triggered
3859        them.  */
3860     qemu_bh_poll();
3861
3862 }
3863
3864 static int main_loop(void)
3865 {
3866     int ret, timeout;
3867 #ifdef CONFIG_PROFILER
3868     int64_t ti;
3869 #endif
3870     CPUState *env;
3871
3872     cur_cpu = first_cpu;
3873     next_cpu = cur_cpu->next_cpu ?: first_cpu;
3874     for(;;) {
3875         if (vm_running) {
3876
3877             for(;;) {
3878                 /* get next cpu */
3879                 env = next_cpu;
3880 #ifdef CONFIG_PROFILER
3881                 ti = profile_getclock();
3882 #endif
3883                 if (use_icount) {
3884                     int64_t count;
3885                     int decr;
3886                     qemu_icount -= (env->icount_decr.u16.low + env->icount_extra);
3887                     env->icount_decr.u16.low = 0;
3888                     env->icount_extra = 0;
3889                     count = qemu_next_deadline();
3890                     count = (count + (1 << icount_time_shift) - 1)
3891                             >> icount_time_shift;
3892                     qemu_icount += count;
3893                     decr = (count > 0xffff) ? 0xffff : count;
3894                     count -= decr;
3895                     env->icount_decr.u16.low = decr;
3896                     env->icount_extra = count;
3897                 }
3898                 ret = cpu_exec(env);
3899 #ifdef CONFIG_PROFILER
3900                 qemu_time += profile_getclock() - ti;
3901 #endif
3902                 if (use_icount) {
3903                     /* Fold pending instructions back into the
3904                        instruction counter, and clear the interrupt flag.  */
3905                     qemu_icount -= (env->icount_decr.u16.low
3906                                     + env->icount_extra);
3907                     env->icount_decr.u32 = 0;
3908                     env->icount_extra = 0;
3909                 }
3910                 next_cpu = env->next_cpu ?: first_cpu;
3911                 if (event_pending && likely(ret != EXCP_DEBUG)) {
3912                     ret = EXCP_INTERRUPT;
3913                     event_pending = 0;
3914                     break;
3915                 }
3916                 if (ret == EXCP_HLT) {
3917                     /* Give the next CPU a chance to run.  */
3918                     cur_cpu = env;
3919                     continue;
3920                 }
3921                 if (ret != EXCP_HALTED)
3922                     break;
3923                 /* all CPUs are halted ? */
3924                 if (env == cur_cpu)
3925                     break;
3926             }
3927             cur_cpu = env;
3928
3929             if (shutdown_requested) {
3930                 ret = EXCP_INTERRUPT;
3931                 if (no_shutdown) {
3932                     vm_stop(0);
3933                     no_shutdown = 0;
3934                 }
3935                 else
3936                     break;
3937             }
3938             if (reset_requested) {
3939                 reset_requested = 0;
3940                 qemu_system_reset();
3941                 ret = EXCP_INTERRUPT;
3942             }
3943             if (powerdown_requested) {
3944                 powerdown_requested = 0;
3945                 qemu_system_powerdown();
3946                 ret = EXCP_INTERRUPT;
3947             }
3948             if (unlikely(ret == EXCP_DEBUG)) {
3949                 gdb_set_stop_cpu(cur_cpu);
3950                 vm_stop(EXCP_DEBUG);
3951             }
3952             /* If all cpus are halted then wait until the next IRQ */
3953             /* XXX: use timeout computed from timers */
3954             if (ret == EXCP_HALTED) {
3955                 if (use_icount) {
3956                     int64_t add;
3957                     int64_t delta;
3958                     /* Advance virtual time to the next event.  */
3959                     if (use_icount == 1) {
3960                         /* When not using an adaptive execution frequency
3961                            we tend to get badly out of sync with real time,
3962                            so just delay for a reasonable amount of time.  */
3963                         delta = 0;
3964                     } else {
3965                         delta = cpu_get_icount() - cpu_get_clock();
3966                     }
3967                     if (delta > 0) {
3968                         /* If virtual time is ahead of real time then just
3969                            wait for IO.  */
3970                         timeout = (delta / 1000000) + 1;
3971                     } else {
3972                         /* Wait for either IO to occur or the next
3973                            timer event.  */
3974                         add = qemu_next_deadline();
3975                         /* We advance the timer before checking for IO.
3976                            Limit the amount we advance so that early IO
3977                            activity won't get the guest too far ahead.  */
3978                         if (add > 10000000)
3979                             add = 10000000;
3980                         delta += add;
3981                         add = (add + (1 << icount_time_shift) - 1)
3982                               >> icount_time_shift;
3983                         qemu_icount += add;
3984                         timeout = delta / 1000000;
3985                         if (timeout < 0)
3986                             timeout = 0;
3987                     }
3988                 } else {
3989                     timeout = 5000;
3990                 }
3991             } else {
3992                 timeout = 0;
3993             }
3994         } else {
3995             if (shutdown_requested) {
3996                 ret = EXCP_INTERRUPT;
3997                 break;
3998             }
3999             timeout = 5000;
4000         }
4001 #ifdef CONFIG_PROFILER
4002         ti = profile_getclock();
4003 #endif
4004         main_loop_wait(timeout);
4005 #ifdef CONFIG_PROFILER
4006         dev_time += profile_getclock() - ti;
4007 #endif
4008     }
4009     cpu_disable_ticks();
4010     return ret;
4011 }
4012
4013 static void version(void)
4014 {
4015     printf("QEMU PC emulator version " QEMU_VERSION QEMU_PKGVERSION ", Copyright (c) 2003-2008 Fabrice Bellard\n");
4016 }
4017
4018 static void help(int exitcode)
4019 {
4020     version();
4021     printf("usage: %s [options] [disk_image]\n"
4022            "\n"
4023            "'disk_image' is a raw hard image image for IDE hard disk 0\n"
4024            "\n"
4025 #define DEF(option, opt_arg, opt_enum, opt_help)        \
4026            opt_help
4027 #define DEFHEADING(text) stringify(text) "\n"
4028 #include "qemu-options.h"
4029 #undef DEF
4030 #undef DEFHEADING
4031 #undef GEN_DOCS
4032            "\n"
4033            "During emulation, the following keys are useful:\n"
4034            "ctrl-alt-f      toggle full screen\n"
4035            "ctrl-alt-n      switch to virtual console 'n'\n"
4036            "ctrl-alt        toggle mouse and keyboard grab\n"
4037            "\n"
4038            "When using -nographic, press 'ctrl-a h' to get some help.\n"
4039            ,
4040            "qemu",
4041            DEFAULT_RAM_SIZE,
4042 #ifndef _WIN32
4043            DEFAULT_NETWORK_SCRIPT,
4044            DEFAULT_NETWORK_DOWN_SCRIPT,
4045 #endif
4046            DEFAULT_GDBSTUB_PORT,
4047            "/tmp/qemu.log");
4048     exit(exitcode);
4049 }
4050
4051 #define HAS_ARG 0x0001
4052
4053 enum {
4054 #define DEF(option, opt_arg, opt_enum, opt_help)        \
4055     opt_enum,
4056 #define DEFHEADING(text)
4057 #include "qemu-options.h"
4058 #undef DEF
4059 #undef DEFHEADING
4060 #undef GEN_DOCS
4061 };
4062
4063 typedef struct QEMUOption {
4064     const char *name;
4065     int flags;
4066     int index;
4067 } QEMUOption;
4068
4069 static const QEMUOption qemu_options[] = {
4070     { "h", 0, QEMU_OPTION_h },
4071 #define DEF(option, opt_arg, opt_enum, opt_help)        \
4072     { option, opt_arg, opt_enum },
4073 #define DEFHEADING(text)
4074 #include "qemu-options.h"
4075 #undef DEF
4076 #undef DEFHEADING
4077 #undef GEN_DOCS
4078     { NULL },
4079 };
4080
4081 #ifdef HAS_AUDIO
4082 struct soundhw soundhw[] = {
4083 #ifdef HAS_AUDIO_CHOICE
4084 #if defined(TARGET_I386) || defined(TARGET_MIPS)
4085     {
4086         "pcspk",
4087         "PC speaker",
4088         0,
4089         1,
4090         { .init_isa = pcspk_audio_init }
4091     },
4092 #endif
4093
4094 #ifdef CONFIG_SB16
4095     {
4096         "sb16",
4097         "Creative Sound Blaster 16",
4098         0,
4099         1,
4100         { .init_isa = SB16_init }
4101     },
4102 #endif
4103
4104 #ifdef CONFIG_CS4231A
4105     {
4106         "cs4231a",
4107         "CS4231A",
4108         0,
4109         1,
4110         { .init_isa = cs4231a_init }
4111     },
4112 #endif
4113
4114 #ifdef CONFIG_ADLIB
4115     {
4116         "adlib",
4117 #ifdef HAS_YMF262
4118         "Yamaha YMF262 (OPL3)",
4119 #else
4120         "Yamaha YM3812 (OPL2)",
4121 #endif
4122         0,
4123         1,
4124         { .init_isa = Adlib_init }
4125     },
4126 #endif
4127
4128 #ifdef CONFIG_GUS
4129     {
4130         "gus",
4131         "Gravis Ultrasound GF1",
4132         0,
4133         1,
4134         { .init_isa = GUS_init }
4135     },
4136 #endif
4137
4138 #ifdef CONFIG_AC97
4139     {
4140         "ac97",
4141         "Intel 82801AA AC97 Audio",
4142         0,
4143         0,
4144         { .init_pci = ac97_init }
4145     },
4146 #endif
4147
4148 #ifdef CONFIG_ES1370
4149     {
4150         "es1370",
4151         "ENSONIQ AudioPCI ES1370",
4152         0,
4153         0,
4154         { .init_pci = es1370_init }
4155     },
4156 #endif
4157
4158 #endif /* HAS_AUDIO_CHOICE */
4159
4160     { NULL, NULL, 0, 0, { NULL } }
4161 };
4162
4163 static void select_soundhw (const char *optarg)
4164 {
4165     struct soundhw *c;
4166
4167     if (*optarg == '?') {
4168     show_valid_cards:
4169
4170         printf ("Valid sound card names (comma separated):\n");
4171         for (c = soundhw; c->name; ++c) {
4172             printf ("%-11s %s\n", c->name, c->descr);
4173         }
4174         printf ("\n-soundhw all will enable all of the above\n");
4175         exit (*optarg != '?');
4176     }
4177     else {
4178         size_t l;
4179         const char *p;
4180         char *e;
4181         int bad_card = 0;
4182
4183         if (!strcmp (optarg, "all")) {
4184             for (c = soundhw; c->name; ++c) {
4185                 c->enabled = 1;
4186             }
4187             return;
4188         }
4189
4190         p = optarg;
4191         while (*p) {
4192             e = strchr (p, ',');
4193             l = !e ? strlen (p) : (size_t) (e - p);
4194
4195             for (c = soundhw; c->name; ++c) {
4196                 if (!strncmp (c->name, p, l)) {
4197                     c->enabled = 1;
4198                     break;
4199                 }
4200             }
4201
4202             if (!c->name) {
4203                 if (l > 80) {
4204                     fprintf (stderr,
4205                              "Unknown sound card name (too big to show)\n");
4206                 }
4207                 else {
4208                     fprintf (stderr, "Unknown sound card name `%.*s'\n",
4209                              (int) l, p);
4210                 }
4211                 bad_card = 1;
4212             }
4213             p += l + (e != NULL);
4214         }
4215
4216         if (bad_card)
4217             goto show_valid_cards;
4218     }
4219 }
4220 #endif
4221
4222 static void select_vgahw (const char *p)
4223 {
4224     const char *opts;
4225
4226     cirrus_vga_enabled = 0;
4227     std_vga_enabled = 0;
4228     vmsvga_enabled = 0;
4229     xenfb_enabled = 0;
4230     if (strstart(p, "std", &opts)) {
4231         std_vga_enabled = 1;
4232     } else if (strstart(p, "cirrus", &opts)) {
4233         cirrus_vga_enabled = 1;
4234     } else if (strstart(p, "vmware", &opts)) {
4235         vmsvga_enabled = 1;
4236     } else if (strstart(p, "xenfb", &opts)) {
4237         xenfb_enabled = 1;
4238     } else if (!strstart(p, "none", &opts)) {
4239     invalid_vga:
4240         fprintf(stderr, "Unknown vga type: %s\n", p);
4241         exit(1);
4242     }
4243     while (*opts) {
4244         const char *nextopt;
4245
4246         if (strstart(opts, ",retrace=", &nextopt)) {
4247             opts = nextopt;
4248             if (strstart(opts, "dumb", &nextopt))
4249                 vga_retrace_method = VGA_RETRACE_DUMB;
4250             else if (strstart(opts, "precise", &nextopt))
4251                 vga_retrace_method = VGA_RETRACE_PRECISE;
4252             else goto invalid_vga;
4253         } else goto invalid_vga;
4254         opts = nextopt;
4255     }
4256 }
4257
4258 #ifdef _WIN32
4259 static BOOL WINAPI qemu_ctrl_handler(DWORD type)
4260 {
4261     exit(STATUS_CONTROL_C_EXIT);
4262     return TRUE;
4263 }
4264 #endif
4265
4266 int qemu_uuid_parse(const char *str, uint8_t *uuid)
4267 {
4268     int ret;
4269
4270     if(strlen(str) != 36)
4271         return -1;
4272
4273     ret = sscanf(str, UUID_FMT, &uuid[0], &uuid[1], &uuid[2], &uuid[3],
4274             &uuid[4], &uuid[5], &uuid[6], &uuid[7], &uuid[8], &uuid[9],
4275             &uuid[10], &uuid[11], &uuid[12], &uuid[13], &uuid[14], &uuid[15]);
4276
4277     if(ret != 16)
4278         return -1;
4279
4280 #ifdef TARGET_I386
4281     smbios_add_field(1, offsetof(struct smbios_type_1, uuid), 16, uuid);
4282 #endif
4283
4284     return 0;
4285 }
4286
4287 #define MAX_NET_CLIENTS 32
4288
4289 #ifndef _WIN32
4290
4291 static void termsig_handler(int signal)
4292 {
4293     qemu_system_shutdown_request();
4294 }
4295
4296 static void termsig_setup(void)
4297 {
4298     struct sigaction act;
4299
4300     memset(&act, 0, sizeof(act));
4301     act.sa_handler = termsig_handler;
4302     sigaction(SIGINT,  &act, NULL);
4303     sigaction(SIGHUP,  &act, NULL);
4304     sigaction(SIGTERM, &act, NULL);
4305 }
4306
4307 #endif
4308
4309 int main(int argc, char **argv, char **envp)
4310 {
4311 #ifdef CONFIG_GDBSTUB
4312     const char *gdbstub_dev = NULL;
4313 #endif
4314     uint32_t boot_devices_bitmap = 0;
4315     int i;
4316     int snapshot, linux_boot, net_boot;
4317     const char *initrd_filename;
4318     const char *kernel_filename, *kernel_cmdline;
4319     const char *boot_devices = "";
4320     DisplayState *ds;
4321     DisplayChangeListener *dcl;
4322     int cyls, heads, secs, translation;
4323     const char *net_clients[MAX_NET_CLIENTS];
4324     int nb_net_clients;
4325     const char *bt_opts[MAX_BT_CMDLINE];
4326     int nb_bt_opts;
4327     int hda_index;
4328     int optind;
4329     const char *r, *optarg;
4330     CharDriverState *monitor_hd = NULL;
4331     const char *monitor_device;
4332     const char *serial_devices[MAX_SERIAL_PORTS];
4333     int serial_device_index;
4334     const char *parallel_devices[MAX_PARALLEL_PORTS];
4335     int parallel_device_index;
4336     const char *virtio_consoles[MAX_VIRTIO_CONSOLES];
4337     int virtio_console_index;
4338     const char *loadvm = NULL;
4339     QEMUMachine *machine;
4340     const char *cpu_model;
4341     const char *usb_devices[MAX_USB_CMDLINE];
4342     int usb_devices_index;
4343 #ifndef _WIN32
4344     int fds[2];
4345 #endif
4346     int tb_size;
4347     const char *pid_file = NULL;
4348     const char *incoming = NULL;
4349 #ifndef _WIN32
4350     int fd = 0;
4351     struct passwd *pwd = NULL;
4352     const char *chroot_dir = NULL;
4353     const char *run_as = NULL;
4354 #endif
4355     CPUState *env;
4356
4357     qemu_cache_utils_init(envp);
4358
4359     LIST_INIT (&vm_change_state_head);
4360 #ifndef _WIN32
4361     {
4362         struct sigaction act;
4363         sigfillset(&act.sa_mask);
4364         act.sa_flags = 0;
4365         act.sa_handler = SIG_IGN;
4366         sigaction(SIGPIPE, &act, NULL);
4367     }
4368 #else
4369     SetConsoleCtrlHandler(qemu_ctrl_handler, TRUE);
4370     /* Note: cpu_interrupt() is currently not SMP safe, so we force
4371        QEMU to run on a single CPU */
4372     {
4373         HANDLE h;
4374         DWORD mask, smask;
4375         int i;
4376         h = GetCurrentProcess();
4377         if (GetProcessAffinityMask(h, &mask, &smask)) {
4378             for(i = 0; i < 32; i++) {
4379                 if (mask & (1 << i))
4380                     break;
4381             }
4382             if (i != 32) {
4383                 mask = 1 << i;
4384                 SetProcessAffinityMask(h, mask);
4385             }
4386         }
4387     }
4388 #endif
4389
4390     register_machines();
4391     machine = first_machine;
4392     cpu_model = NULL;
4393     initrd_filename = NULL;
4394     ram_size = 0;
4395     vga_ram_size = VGA_RAM_SIZE;
4396     snapshot = 0;
4397     nographic = 0;
4398     curses = 0;
4399     kernel_filename = NULL;
4400     kernel_cmdline = "";
4401     cyls = heads = secs = 0;
4402     translation = BIOS_ATA_TRANSLATION_AUTO;
4403     monitor_device = "vc:80Cx24C";
4404
4405     serial_devices[0] = "vc:80Cx24C";
4406     for(i = 1; i < MAX_SERIAL_PORTS; i++)
4407         serial_devices[i] = NULL;
4408     serial_device_index = 0;
4409
4410     parallel_devices[0] = "vc:80Cx24C";
4411     for(i = 1; i < MAX_PARALLEL_PORTS; i++)
4412         parallel_devices[i] = NULL;
4413     parallel_device_index = 0;
4414
4415     for(i = 0; i < MAX_VIRTIO_CONSOLES; i++)
4416         virtio_consoles[i] = NULL;
4417     virtio_console_index = 0;
4418
4419     for (i = 0; i < MAX_NODES; i++) {
4420         node_mem[i] = 0;
4421         node_cpumask[i] = 0;
4422     }
4423
4424     usb_devices_index = 0;
4425
4426     nb_net_clients = 0;
4427     nb_bt_opts = 0;
4428     nb_drives = 0;
4429     nb_drives_opt = 0;
4430     nb_numa_nodes = 0;
4431     hda_index = -1;
4432
4433     nb_nics = 0;
4434
4435     tb_size = 0;
4436     autostart= 1;
4437
4438     optind = 1;
4439     for(;;) {
4440         if (optind >= argc)
4441             break;
4442         r = argv[optind];
4443         if (r[0] != '-') {
4444             hda_index = drive_add(argv[optind++], HD_ALIAS, 0);
4445         } else {
4446             const QEMUOption *popt;
4447
4448             optind++;
4449             /* Treat --foo the same as -foo.  */
4450             if (r[1] == '-')
4451                 r++;
4452             popt = qemu_options;
4453             for(;;) {
4454                 if (!popt->name) {
4455                     fprintf(stderr, "%s: invalid option -- '%s'\n",
4456                             argv[0], r);
4457                     exit(1);
4458                 }
4459                 if (!strcmp(popt->name, r + 1))
4460                     break;
4461                 popt++;
4462             }
4463             if (popt->flags & HAS_ARG) {
4464                 if (optind >= argc) {
4465                     fprintf(stderr, "%s: option '%s' requires an argument\n",
4466                             argv[0], r);
4467                     exit(1);
4468                 }
4469                 optarg = argv[optind++];
4470             } else {
4471                 optarg = NULL;
4472             }
4473
4474             switch(popt->index) {
4475             case QEMU_OPTION_M:
4476                 machine = find_machine(optarg);
4477                 if (!machine) {
4478                     QEMUMachine *m;
4479                     printf("Supported machines are:\n");
4480                     for(m = first_machine; m != NULL; m = m->next) {
4481                         printf("%-10s %s%s\n",
4482                                m->name, m->desc,
4483                                m == first_machine ? " (default)" : "");
4484                     }
4485                     exit(*optarg != '?');
4486                 }
4487                 break;
4488             case QEMU_OPTION_cpu:
4489                 /* hw initialization will check this */
4490                 if (*optarg == '?') {
4491 /* XXX: implement xxx_cpu_list for targets that still miss it */
4492 #if defined(cpu_list)
4493                     cpu_list(stdout, &fprintf);
4494 #endif
4495                     exit(0);
4496                 } else {
4497                     cpu_model = optarg;
4498                 }
4499                 break;
4500             case QEMU_OPTION_initrd:
4501                 initrd_filename = optarg;
4502                 break;
4503             case QEMU_OPTION_hda:
4504                 if (cyls == 0)
4505                     hda_index = drive_add(optarg, HD_ALIAS, 0);
4506                 else
4507                     hda_index = drive_add(optarg, HD_ALIAS
4508                              ",cyls=%d,heads=%d,secs=%d%s",
4509                              0, cyls, heads, secs,
4510                              translation == BIOS_ATA_TRANSLATION_LBA ?
4511                                  ",trans=lba" :
4512                              translation == BIOS_ATA_TRANSLATION_NONE ?
4513                                  ",trans=none" : "");
4514                  break;
4515             case QEMU_OPTION_hdb:
4516             case QEMU_OPTION_hdc:
4517             case QEMU_OPTION_hdd:
4518                 drive_add(optarg, HD_ALIAS, popt->index - QEMU_OPTION_hda);
4519                 break;
4520             case QEMU_OPTION_drive:
4521                 drive_add(NULL, "%s", optarg);
4522                 break;
4523             case QEMU_OPTION_mtdblock:
4524                 drive_add(optarg, MTD_ALIAS);
4525                 break;
4526             case QEMU_OPTION_sd:
4527                 drive_add(optarg, SD_ALIAS);
4528                 break;
4529             case QEMU_OPTION_pflash:
4530                 drive_add(optarg, PFLASH_ALIAS);
4531                 break;
4532             case QEMU_OPTION_snapshot:
4533                 snapshot = 1;
4534                 break;
4535             case QEMU_OPTION_hdachs:
4536                 {
4537                     const char *p;
4538                     p = optarg;
4539                     cyls = strtol(p, (char **)&p, 0);
4540                     if (cyls < 1 || cyls > 16383)
4541                         goto chs_fail;
4542                     if (*p != ',')
4543                         goto chs_fail;
4544                     p++;
4545                     heads = strtol(p, (char **)&p, 0);
4546                     if (heads < 1 || heads > 16)
4547                         goto chs_fail;
4548                     if (*p != ',')
4549                         goto chs_fail;
4550                     p++;
4551                     secs = strtol(p, (char **)&p, 0);
4552                     if (secs < 1 || secs > 63)
4553                         goto chs_fail;
4554                     if (*p == ',') {
4555                         p++;
4556                         if (!strcmp(p, "none"))
4557                             translation = BIOS_ATA_TRANSLATION_NONE;
4558                         else if (!strcmp(p, "lba"))
4559                             translation = BIOS_ATA_TRANSLATION_LBA;
4560                         else if (!strcmp(p, "auto"))
4561                             translation = BIOS_ATA_TRANSLATION_AUTO;
4562                         else
4563                             goto chs_fail;
4564                     } else if (*p != '\0') {
4565                     chs_fail:
4566                         fprintf(stderr, "qemu: invalid physical CHS format\n");
4567                         exit(1);
4568                     }
4569                     if (hda_index != -1)
4570                         snprintf(drives_opt[hda_index].opt,
4571                                  sizeof(drives_opt[hda_index].opt),
4572                                  HD_ALIAS ",cyls=%d,heads=%d,secs=%d%s",
4573                                  0, cyls, heads, secs,
4574                                  translation == BIOS_ATA_TRANSLATION_LBA ?
4575                                     ",trans=lba" :
4576                                  translation == BIOS_ATA_TRANSLATION_NONE ?
4577                                      ",trans=none" : "");
4578                 }
4579                 break;
4580             case QEMU_OPTION_numa:
4581                 if (nb_numa_nodes >= MAX_NODES) {
4582                     fprintf(stderr, "qemu: too many NUMA nodes\n");
4583                     exit(1);
4584                 }
4585                 numa_add(optarg);
4586                 break;
4587             case QEMU_OPTION_nographic:
4588                 nographic = 1;
4589                 break;
4590 #ifdef CONFIG_CURSES
4591             case QEMU_OPTION_curses:
4592                 curses = 1;
4593                 break;
4594 #endif
4595             case QEMU_OPTION_portrait:
4596                 graphic_rotate = 1;
4597                 break;
4598             case QEMU_OPTION_kernel:
4599                 kernel_filename = optarg;
4600                 break;
4601             case QEMU_OPTION_append:
4602                 kernel_cmdline = optarg;
4603                 break;
4604             case QEMU_OPTION_cdrom:
4605                 drive_add(optarg, CDROM_ALIAS);
4606                 break;
4607             case QEMU_OPTION_boot:
4608                 boot_devices = optarg;
4609                 /* We just do some generic consistency checks */
4610                 {
4611                     /* Could easily be extended to 64 devices if needed */
4612                     const char *p;
4613                     
4614                     boot_devices_bitmap = 0;
4615                     for (p = boot_devices; *p != '\0'; p++) {
4616                         /* Allowed boot devices are:
4617                          * a b     : floppy disk drives
4618                          * c ... f : IDE disk drives
4619                          * g ... m : machine implementation dependant drives
4620                          * n ... p : network devices
4621                          * It's up to each machine implementation to check
4622                          * if the given boot devices match the actual hardware
4623                          * implementation and firmware features.
4624                          */
4625                         if (*p < 'a' || *p > 'q') {
4626                             fprintf(stderr, "Invalid boot device '%c'\n", *p);
4627                             exit(1);
4628                         }
4629                         if (boot_devices_bitmap & (1 << (*p - 'a'))) {
4630                             fprintf(stderr,
4631                                     "Boot device '%c' was given twice\n",*p);
4632                             exit(1);
4633                         }
4634                         boot_devices_bitmap |= 1 << (*p - 'a');
4635                     }
4636                 }
4637                 break;
4638             case QEMU_OPTION_fda:
4639             case QEMU_OPTION_fdb:
4640                 drive_add(optarg, FD_ALIAS, popt->index - QEMU_OPTION_fda);
4641                 break;
4642 #ifdef TARGET_I386
4643             case QEMU_OPTION_no_fd_bootchk:
4644                 fd_bootchk = 0;
4645                 break;
4646 #endif
4647             case QEMU_OPTION_net:
4648                 if (nb_net_clients >= MAX_NET_CLIENTS) {
4649                     fprintf(stderr, "qemu: too many network clients\n");
4650                     exit(1);
4651                 }
4652                 net_clients[nb_net_clients] = optarg;
4653                 nb_net_clients++;
4654                 break;
4655 #ifdef CONFIG_SLIRP
4656             case QEMU_OPTION_tftp:
4657                 tftp_prefix = optarg;
4658                 break;
4659             case QEMU_OPTION_bootp:
4660                 bootp_filename = optarg;
4661                 break;
4662 #ifndef _WIN32
4663             case QEMU_OPTION_smb:
4664                 net_slirp_smb(optarg);
4665                 break;
4666 #endif
4667             case QEMU_OPTION_redir:
4668                 net_slirp_redir(NULL, optarg);
4669                 break;
4670 #endif
4671             case QEMU_OPTION_bt:
4672                 if (nb_bt_opts >= MAX_BT_CMDLINE) {
4673                     fprintf(stderr, "qemu: too many bluetooth options\n");
4674                     exit(1);
4675                 }
4676                 bt_opts[nb_bt_opts++] = optarg;
4677                 break;
4678 #ifdef HAS_AUDIO
4679             case QEMU_OPTION_audio_help:
4680                 AUD_help ();
4681                 exit (0);
4682                 break;
4683             case QEMU_OPTION_soundhw:
4684                 select_soundhw (optarg);
4685                 break;
4686 #endif
4687             case QEMU_OPTION_h:
4688                 help(0);
4689                 break;
4690             case QEMU_OPTION_version:
4691                 version();
4692                 exit(0);
4693                 break;
4694             case QEMU_OPTION_m: {
4695                 uint64_t value;
4696                 char *ptr;
4697
4698                 value = strtoul(optarg, &ptr, 10);
4699                 switch (*ptr) {
4700                 case 0: case 'M': case 'm':
4701                     value <<= 20;
4702                     break;
4703                 case 'G': case 'g':
4704                     value <<= 30;
4705                     break;
4706                 default:
4707                     fprintf(stderr, "qemu: invalid ram size: %s\n", optarg);
4708                     exit(1);
4709                 }
4710
4711                 /* On 32-bit hosts, QEMU is limited by virtual address space */
4712                 if (value > (2047 << 20)
4713 #ifndef CONFIG_KQEMU
4714                     && HOST_LONG_BITS == 32
4715 #endif
4716                     ) {
4717                     fprintf(stderr, "qemu: at most 2047 MB RAM can be simulated\n");
4718                     exit(1);
4719                 }
4720                 if (value != (uint64_t)(ram_addr_t)value) {
4721                     fprintf(stderr, "qemu: ram size too large\n");
4722                     exit(1);
4723                 }
4724                 ram_size = value;
4725                 break;
4726             }
4727             case QEMU_OPTION_d:
4728                 {
4729                     int mask;
4730                     const CPULogItem *item;
4731
4732                     mask = cpu_str_to_log_mask(optarg);
4733                     if (!mask) {
4734                         printf("Log items (comma separated):\n");
4735                     for(item = cpu_log_items; item->mask != 0; item++) {
4736                         printf("%-10s %s\n", item->name, item->help);
4737                     }
4738                     exit(1);
4739                     }
4740                     cpu_set_log(mask);
4741                 }
4742                 break;
4743 #ifdef CONFIG_GDBSTUB
4744             case QEMU_OPTION_s:
4745                 gdbstub_dev = "tcp::" DEFAULT_GDBSTUB_PORT;
4746                 break;
4747             case QEMU_OPTION_gdb:
4748                 gdbstub_dev = optarg;
4749                 break;
4750 #endif
4751             case QEMU_OPTION_L:
4752                 bios_dir = optarg;
4753                 break;
4754             case QEMU_OPTION_bios:
4755                 bios_name = optarg;
4756                 break;
4757             case QEMU_OPTION_singlestep:
4758                 singlestep = 1;
4759                 break;
4760             case QEMU_OPTION_S:
4761                 autostart = 0;
4762                 break;
4763 #ifndef _WIN32
4764             case QEMU_OPTION_k:
4765                 keyboard_layout = optarg;
4766                 break;
4767 #endif
4768             case QEMU_OPTION_localtime:
4769                 rtc_utc = 0;
4770                 break;
4771             case QEMU_OPTION_vga:
4772                 select_vgahw (optarg);
4773                 break;
4774 #if defined(TARGET_PPC) || defined(TARGET_SPARC)
4775             case QEMU_OPTION_g:
4776                 {
4777                     const char *p;
4778                     int w, h, depth;
4779                     p = optarg;
4780                     w = strtol(p, (char **)&p, 10);
4781                     if (w <= 0) {
4782                     graphic_error:
4783                         fprintf(stderr, "qemu: invalid resolution or depth\n");
4784                         exit(1);
4785                     }
4786                     if (*p != 'x')
4787                         goto graphic_error;
4788                     p++;
4789                     h = strtol(p, (char **)&p, 10);
4790                     if (h <= 0)
4791                         goto graphic_error;
4792                     if (*p == 'x') {
4793                         p++;
4794                         depth = strtol(p, (char **)&p, 10);
4795                         if (depth != 8 && depth != 15 && depth != 16 &&
4796                             depth != 24 && depth != 32)
4797                             goto graphic_error;
4798                     } else if (*p == '\0') {
4799                         depth = graphic_depth;
4800                     } else {
4801                         goto graphic_error;
4802                     }
4803
4804                     graphic_width = w;
4805                     graphic_height = h;
4806                     graphic_depth = depth;
4807                 }
4808                 break;
4809 #endif
4810             case QEMU_OPTION_echr:
4811                 {
4812                     char *r;
4813                     term_escape_char = strtol(optarg, &r, 0);
4814                     if (r == optarg)
4815                         printf("Bad argument to echr\n");
4816                     break;
4817                 }
4818             case QEMU_OPTION_monitor:
4819                 monitor_device = optarg;
4820                 break;
4821             case QEMU_OPTION_serial:
4822                 if (serial_device_index >= MAX_SERIAL_PORTS) {
4823                     fprintf(stderr, "qemu: too many serial ports\n");
4824                     exit(1);
4825                 }
4826                 serial_devices[serial_device_index] = optarg;
4827                 serial_device_index++;
4828                 break;
4829             case QEMU_OPTION_virtiocon:
4830                 if (virtio_console_index >= MAX_VIRTIO_CONSOLES) {
4831                     fprintf(stderr, "qemu: too many virtio consoles\n");
4832                     exit(1);
4833                 }
4834                 virtio_consoles[virtio_console_index] = optarg;
4835                 virtio_console_index++;
4836                 break;
4837             case QEMU_OPTION_parallel:
4838                 if (parallel_device_index >= MAX_PARALLEL_PORTS) {
4839                     fprintf(stderr, "qemu: too many parallel ports\n");
4840                     exit(1);
4841                 }
4842                 parallel_devices[parallel_device_index] = optarg;
4843                 parallel_device_index++;
4844                 break;
4845             case QEMU_OPTION_loadvm:
4846                 loadvm = optarg;
4847                 break;
4848             case QEMU_OPTION_full_screen:
4849                 full_screen = 1;
4850                 break;
4851 #ifdef CONFIG_SDL
4852             case QEMU_OPTION_no_frame:
4853                 no_frame = 1;
4854                 break;
4855             case QEMU_OPTION_alt_grab:
4856                 alt_grab = 1;
4857                 break;
4858             case QEMU_OPTION_no_quit:
4859                 no_quit = 1;
4860                 break;
4861             case QEMU_OPTION_sdl:
4862                 sdl = 1;
4863                 break;
4864 #endif
4865             case QEMU_OPTION_pidfile:
4866                 pid_file = optarg;
4867                 break;
4868 #ifdef TARGET_I386
4869             case QEMU_OPTION_win2k_hack:
4870                 win2k_install_hack = 1;
4871                 break;
4872             case QEMU_OPTION_rtc_td_hack:
4873                 rtc_td_hack = 1;
4874                 break;
4875             case QEMU_OPTION_acpitable:
4876                 if(acpi_table_add(optarg) < 0) {
4877                     fprintf(stderr, "Wrong acpi table provided\n");
4878                     exit(1);
4879                 }
4880                 break;
4881             case QEMU_OPTION_smbios:
4882                 if(smbios_entry_add(optarg) < 0) {
4883                     fprintf(stderr, "Wrong smbios provided\n");
4884                     exit(1);
4885                 }
4886                 break;
4887 #endif
4888 #ifdef CONFIG_KQEMU
4889             case QEMU_OPTION_no_kqemu:
4890                 kqemu_allowed = 0;
4891                 break;
4892             case QEMU_OPTION_kernel_kqemu:
4893                 kqemu_allowed = 2;
4894                 break;
4895 #endif
4896 #ifdef CONFIG_KVM
4897             case QEMU_OPTION_enable_kvm:
4898                 kvm_allowed = 1;
4899 #ifdef CONFIG_KQEMU
4900                 kqemu_allowed = 0;
4901 #endif
4902                 break;
4903 #endif
4904             case QEMU_OPTION_usb:
4905                 usb_enabled = 1;
4906                 break;
4907             case QEMU_OPTION_usbdevice:
4908                 usb_enabled = 1;
4909                 if (usb_devices_index >= MAX_USB_CMDLINE) {
4910                     fprintf(stderr, "Too many USB devices\n");
4911                     exit(1);
4912                 }
4913                 usb_devices[usb_devices_index] = optarg;
4914                 usb_devices_index++;
4915                 break;
4916             case QEMU_OPTION_smp:
4917                 smp_cpus = atoi(optarg);
4918                 if (smp_cpus < 1) {
4919                     fprintf(stderr, "Invalid number of CPUs\n");
4920                     exit(1);
4921                 }
4922                 break;
4923             case QEMU_OPTION_vnc:
4924                 vnc_display = optarg;
4925                 break;
4926 #ifdef TARGET_I386
4927             case QEMU_OPTION_no_acpi:
4928                 acpi_enabled = 0;
4929                 break;
4930             case QEMU_OPTION_no_hpet:
4931                 no_hpet = 1;
4932                 break;
4933 #endif
4934             case QEMU_OPTION_no_reboot:
4935                 no_reboot = 1;
4936                 break;
4937             case QEMU_OPTION_no_shutdown:
4938                 no_shutdown = 1;
4939                 break;
4940             case QEMU_OPTION_show_cursor:
4941                 cursor_hide = 0;
4942                 break;
4943             case QEMU_OPTION_uuid:
4944                 if(qemu_uuid_parse(optarg, qemu_uuid) < 0) {
4945                     fprintf(stderr, "Fail to parse UUID string."
4946                             " Wrong format.\n");
4947                     exit(1);
4948                 }
4949                 break;
4950 #ifndef _WIN32
4951             case QEMU_OPTION_daemonize:
4952                 daemonize = 1;
4953                 break;
4954 #endif
4955             case QEMU_OPTION_option_rom:
4956                 if (nb_option_roms >= MAX_OPTION_ROMS) {
4957                     fprintf(stderr, "Too many option ROMs\n");
4958                     exit(1);
4959                 }
4960                 option_rom[nb_option_roms] = optarg;
4961                 nb_option_roms++;
4962                 break;
4963 #if defined(TARGET_ARM) || defined(TARGET_M68K)
4964             case QEMU_OPTION_semihosting:
4965                 semihosting_enabled = 1;
4966                 break;
4967 #endif
4968             case QEMU_OPTION_name:
4969                 qemu_name = optarg;
4970                 break;
4971 #if defined(TARGET_SPARC) || defined(TARGET_PPC)
4972             case QEMU_OPTION_prom_env:
4973                 if (nb_prom_envs >= MAX_PROM_ENVS) {
4974                     fprintf(stderr, "Too many prom variables\n");
4975                     exit(1);
4976                 }
4977                 prom_envs[nb_prom_envs] = optarg;
4978                 nb_prom_envs++;
4979                 break;
4980 #endif
4981 #ifdef TARGET_ARM
4982             case QEMU_OPTION_old_param:
4983                 old_param = 1;
4984                 break;
4985 #endif
4986             case QEMU_OPTION_clock:
4987                 configure_alarms(optarg);
4988                 break;
4989             case QEMU_OPTION_startdate:
4990                 {
4991                     struct tm tm;
4992                     time_t rtc_start_date;
4993                     if (!strcmp(optarg, "now")) {
4994                         rtc_date_offset = -1;
4995                     } else {
4996                         if (sscanf(optarg, "%d-%d-%dT%d:%d:%d",
4997                                &tm.tm_year,
4998                                &tm.tm_mon,
4999                                &tm.tm_mday,
5000                                &tm.tm_hour,
5001                                &tm.tm_min,
5002                                &tm.tm_sec) == 6) {
5003                             /* OK */
5004                         } else if (sscanf(optarg, "%d-%d-%d",
5005                                           &tm.tm_year,
5006                                           &tm.tm_mon,
5007                                           &tm.tm_mday) == 3) {
5008                             tm.tm_hour = 0;
5009                             tm.tm_min = 0;
5010                             tm.tm_sec = 0;
5011                         } else {
5012                             goto date_fail;
5013                         }
5014                         tm.tm_year -= 1900;
5015                         tm.tm_mon--;
5016                         rtc_start_date = mktimegm(&tm);
5017                         if (rtc_start_date == -1) {
5018                         date_fail:
5019                             fprintf(stderr, "Invalid date format. Valid format are:\n"
5020                                     "'now' or '2006-06-17T16:01:21' or '2006-06-17'\n");
5021                             exit(1);
5022                         }
5023                         rtc_date_offset = time(NULL) - rtc_start_date;
5024                     }
5025                 }
5026                 break;
5027             case QEMU_OPTION_tb_size:
5028                 tb_size = strtol(optarg, NULL, 0);
5029                 if (tb_size < 0)
5030                     tb_size = 0;
5031                 break;
5032             case QEMU_OPTION_icount:
5033                 use_icount = 1;
5034                 if (strcmp(optarg, "auto") == 0) {
5035                     icount_time_shift = -1;
5036                 } else {
5037                     icount_time_shift = strtol(optarg, NULL, 0);
5038                 }
5039                 break;
5040             case QEMU_OPTION_incoming:
5041                 incoming = optarg;
5042                 break;
5043 #ifndef _WIN32
5044             case QEMU_OPTION_chroot:
5045                 chroot_dir = optarg;
5046                 break;
5047             case QEMU_OPTION_runas:
5048                 run_as = optarg;
5049                 break;
5050 #endif
5051 #ifdef CONFIG_XEN
5052             case QEMU_OPTION_xen_domid:
5053                 xen_domid = atoi(optarg);
5054                 break;
5055             case QEMU_OPTION_xen_create:
5056                 xen_mode = XEN_CREATE;
5057                 break;
5058             case QEMU_OPTION_xen_attach:
5059                 xen_mode = XEN_ATTACH;
5060                 break;
5061 #endif
5062             }
5063         }
5064     }
5065
5066 #if defined(CONFIG_KVM) && defined(CONFIG_KQEMU)
5067     if (kvm_allowed && kqemu_allowed) {
5068         fprintf(stderr,
5069                 "You can not enable both KVM and kqemu at the same time\n");
5070         exit(1);
5071     }
5072 #endif
5073
5074     machine->max_cpus = machine->max_cpus ?: 1; /* Default to UP */
5075     if (smp_cpus > machine->max_cpus) {
5076         fprintf(stderr, "Number of SMP cpus requested (%d), exceeds max cpus "
5077                 "supported by machine `%s' (%d)\n", smp_cpus,  machine->name,
5078                 machine->max_cpus);
5079         exit(1);
5080     }
5081
5082     if (nographic) {
5083        if (serial_device_index == 0)
5084            serial_devices[0] = "stdio";
5085        if (parallel_device_index == 0)
5086            parallel_devices[0] = "null";
5087        if (strncmp(monitor_device, "vc", 2) == 0)
5088            monitor_device = "stdio";
5089     }
5090
5091 #ifndef _WIN32
5092     if (daemonize) {
5093         pid_t pid;
5094
5095         if (pipe(fds) == -1)
5096             exit(1);
5097
5098         pid = fork();
5099         if (pid > 0) {
5100             uint8_t status;
5101             ssize_t len;
5102
5103             close(fds[1]);
5104
5105         again:
5106             len = read(fds[0], &status, 1);
5107             if (len == -1 && (errno == EINTR))
5108                 goto again;
5109
5110             if (len != 1)
5111                 exit(1);
5112             else if (status == 1) {
5113                 fprintf(stderr, "Could not acquire pidfile\n");
5114                 exit(1);
5115             } else
5116                 exit(0);
5117         } else if (pid < 0)
5118             exit(1);
5119
5120         setsid();
5121
5122         pid = fork();
5123         if (pid > 0)
5124             exit(0);
5125         else if (pid < 0)
5126             exit(1);
5127
5128         umask(027);
5129
5130         signal(SIGTSTP, SIG_IGN);
5131         signal(SIGTTOU, SIG_IGN);
5132         signal(SIGTTIN, SIG_IGN);
5133     }
5134
5135     if (pid_file && qemu_create_pidfile(pid_file) != 0) {
5136         if (daemonize) {
5137             uint8_t status = 1;
5138             write(fds[1], &status, 1);
5139         } else
5140             fprintf(stderr, "Could not acquire pid file\n");
5141         exit(1);
5142     }
5143 #endif
5144
5145 #ifdef CONFIG_KQEMU
5146     if (smp_cpus > 1)
5147         kqemu_allowed = 0;
5148 #endif
5149     linux_boot = (kernel_filename != NULL);
5150     net_boot = (boot_devices_bitmap >> ('n' - 'a')) & 0xF;
5151
5152     if (!linux_boot && *kernel_cmdline != '\0') {
5153         fprintf(stderr, "-append only allowed with -kernel option\n");
5154         exit(1);
5155     }
5156
5157     if (!linux_boot && initrd_filename != NULL) {
5158         fprintf(stderr, "-initrd only allowed with -kernel option\n");
5159         exit(1);
5160     }
5161
5162     /* boot to floppy or the default cd if no hard disk defined yet */
5163     if (!boot_devices[0]) {
5164         boot_devices = "cad";
5165     }
5166     setvbuf(stdout, NULL, _IOLBF, 0);
5167
5168     init_timers();
5169     if (init_timer_alarm() < 0) {
5170         fprintf(stderr, "could not initialize alarm timer\n");
5171         exit(1);
5172     }
5173     if (use_icount && icount_time_shift < 0) {
5174         use_icount = 2;
5175         /* 125MIPS seems a reasonable initial guess at the guest speed.
5176            It will be corrected fairly quickly anyway.  */
5177         icount_time_shift = 3;
5178         init_icount_adjust();
5179     }
5180
5181 #ifdef _WIN32
5182     socket_init();
5183 #endif
5184
5185     /* init network clients */
5186     if (nb_net_clients == 0) {
5187         /* if no clients, we use a default config */
5188         net_clients[nb_net_clients++] = "nic";
5189 #ifdef CONFIG_SLIRP
5190         net_clients[nb_net_clients++] = "user";
5191 #endif
5192     }
5193
5194     for(i = 0;i < nb_net_clients; i++) {
5195         if (net_client_parse(net_clients[i]) < 0)
5196             exit(1);
5197     }
5198     net_client_check();
5199
5200 #ifdef TARGET_I386
5201     /* XXX: this should be moved in the PC machine instantiation code */
5202     if (net_boot != 0) {
5203         int netroms = 0;
5204         for (i = 0; i < nb_nics && i < 4; i++) {
5205             const char *model = nd_table[i].model;
5206             char buf[1024];
5207             if (net_boot & (1 << i)) {
5208                 if (model == NULL)
5209                     model = "ne2k_pci";
5210                 snprintf(buf, sizeof(buf), "%s/pxe-%s.bin", bios_dir, model);
5211                 if (get_image_size(buf) > 0) {
5212                     if (nb_option_roms >= MAX_OPTION_ROMS) {
5213                         fprintf(stderr, "Too many option ROMs\n");
5214                         exit(1);
5215                     }
5216                     option_rom[nb_option_roms] = strdup(buf);
5217                     nb_option_roms++;
5218                     netroms++;
5219                 }
5220             }
5221         }
5222         if (netroms == 0) {
5223             fprintf(stderr, "No valid PXE rom found for network device\n");
5224             exit(1);
5225         }
5226     }
5227 #endif
5228
5229     /* init the bluetooth world */
5230     for (i = 0; i < nb_bt_opts; i++)
5231         if (bt_parse(bt_opts[i]))
5232             exit(1);
5233
5234     /* init the memory */
5235     if (ram_size == 0)
5236         ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
5237
5238 #ifdef CONFIG_KQEMU
5239     /* FIXME: This is a nasty hack because kqemu can't cope with dynamic
5240        guest ram allocation.  It needs to go away.  */
5241     if (kqemu_allowed) {
5242         kqemu_phys_ram_size = ram_size + VGA_RAM_SIZE + 4 * 1024 * 1024;
5243         kqemu_phys_ram_base = qemu_vmalloc(kqemu_phys_ram_size);
5244         if (!kqemu_phys_ram_base) {
5245             fprintf(stderr, "Could not allocate physical memory\n");
5246             exit(1);
5247         }
5248     }
5249 #endif
5250
5251     /* init the dynamic translator */
5252     cpu_exec_init_all(tb_size * 1024 * 1024);
5253
5254     bdrv_init();
5255     dma_helper_init();
5256
5257     /* we always create the cdrom drive, even if no disk is there */
5258
5259     if (nb_drives_opt < MAX_DRIVES)
5260         drive_add(NULL, CDROM_ALIAS);
5261
5262     /* we always create at least one floppy */
5263
5264     if (nb_drives_opt < MAX_DRIVES)
5265         drive_add(NULL, FD_ALIAS, 0);
5266
5267     /* we always create one sd slot, even if no card is in it */
5268
5269     if (nb_drives_opt < MAX_DRIVES)
5270         drive_add(NULL, SD_ALIAS);
5271
5272     /* open the virtual block devices */
5273
5274     for(i = 0; i < nb_drives_opt; i++)
5275         if (drive_init(&drives_opt[i], snapshot, machine) == -1)
5276             exit(1);
5277
5278     register_savevm("timer", 0, 2, timer_save, timer_load, NULL);
5279     register_savevm_live("ram", 0, 3, ram_save_live, NULL, ram_load, NULL);
5280
5281 #ifndef _WIN32
5282     /* must be after terminal init, SDL library changes signal handlers */
5283     termsig_setup();
5284 #endif
5285
5286     /* Maintain compatibility with multiple stdio monitors */
5287     if (!strcmp(monitor_device,"stdio")) {
5288         for (i = 0; i < MAX_SERIAL_PORTS; i++) {
5289             const char *devname = serial_devices[i];
5290             if (devname && !strcmp(devname,"mon:stdio")) {
5291                 monitor_device = NULL;
5292                 break;
5293             } else if (devname && !strcmp(devname,"stdio")) {
5294                 monitor_device = NULL;
5295                 serial_devices[i] = "mon:stdio";
5296                 break;
5297             }
5298         }
5299     }
5300
5301     if (nb_numa_nodes > 0) {
5302         int i;
5303
5304         if (nb_numa_nodes > smp_cpus) {
5305             nb_numa_nodes = smp_cpus;
5306         }
5307
5308         /* If no memory size if given for any node, assume the default case
5309          * and distribute the available memory equally across all nodes
5310          */
5311         for (i = 0; i < nb_numa_nodes; i++) {
5312             if (node_mem[i] != 0)
5313                 break;
5314         }
5315         if (i == nb_numa_nodes) {
5316             uint64_t usedmem = 0;
5317
5318             /* On Linux, the each node's border has to be 8MB aligned,
5319              * the final node gets the rest.
5320              */
5321             for (i = 0; i < nb_numa_nodes - 1; i++) {
5322                 node_mem[i] = (ram_size / nb_numa_nodes) & ~((1 << 23UL) - 1);
5323                 usedmem += node_mem[i];
5324             }
5325             node_mem[i] = ram_size - usedmem;
5326         }
5327
5328         for (i = 0; i < nb_numa_nodes; i++) {
5329             if (node_cpumask[i] != 0)
5330                 break;
5331         }
5332         /* assigning the VCPUs round-robin is easier to implement, guest OSes
5333          * must cope with this anyway, because there are BIOSes out there in
5334          * real machines which also use this scheme.
5335          */
5336         if (i == nb_numa_nodes) {
5337             for (i = 0; i < smp_cpus; i++) {
5338                 node_cpumask[i % nb_numa_nodes] |= 1 << i;
5339             }
5340         }
5341     }
5342
5343     if (kvm_enabled()) {
5344         int ret;
5345
5346         ret = kvm_init(smp_cpus);
5347         if (ret < 0) {
5348             fprintf(stderr, "failed to initialize KVM\n");
5349             exit(1);
5350         }
5351     }
5352
5353     if (monitor_device) {
5354         monitor_hd = qemu_chr_open("monitor", monitor_device, NULL);
5355         if (!monitor_hd) {
5356             fprintf(stderr, "qemu: could not open monitor device '%s'\n", monitor_device);
5357             exit(1);
5358         }
5359     }
5360
5361     for(i = 0; i < MAX_SERIAL_PORTS; i++) {
5362         const char *devname = serial_devices[i];
5363         if (devname && strcmp(devname, "none")) {
5364             char label[32];
5365             snprintf(label, sizeof(label), "serial%d", i);
5366             serial_hds[i] = qemu_chr_open(label, devname, NULL);
5367             if (!serial_hds[i]) {
5368                 fprintf(stderr, "qemu: could not open serial device '%s'\n",
5369                         devname);
5370                 exit(1);
5371             }
5372         }
5373     }
5374
5375     for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
5376         const char *devname = parallel_devices[i];
5377         if (devname && strcmp(devname, "none")) {
5378             char label[32];
5379             snprintf(label, sizeof(label), "parallel%d", i);
5380             parallel_hds[i] = qemu_chr_open(label, devname, NULL);
5381             if (!parallel_hds[i]) {
5382                 fprintf(stderr, "qemu: could not open parallel device '%s'\n",
5383                         devname);
5384                 exit(1);
5385             }
5386         }
5387     }
5388
5389     for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
5390         const char *devname = virtio_consoles[i];
5391         if (devname && strcmp(devname, "none")) {
5392             char label[32];
5393             snprintf(label, sizeof(label), "virtcon%d", i);
5394             virtcon_hds[i] = qemu_chr_open(label, devname, NULL);
5395             if (!virtcon_hds[i]) {
5396                 fprintf(stderr, "qemu: could not open virtio console '%s'\n",
5397                         devname);
5398                 exit(1);
5399             }
5400         }
5401     }
5402
5403     machine->init(ram_size, vga_ram_size, boot_devices,
5404                   kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
5405
5406
5407     for (env = first_cpu; env != NULL; env = env->next_cpu) {
5408         for (i = 0; i < nb_numa_nodes; i++) {
5409             if (node_cpumask[i] & (1 << env->cpu_index)) {
5410                 env->numa_node = i;
5411             }
5412         }
5413     }
5414
5415     current_machine = machine;
5416
5417     /* Set KVM's vcpu state to qemu's initial CPUState. */
5418     if (kvm_enabled()) {
5419         int ret;
5420
5421         ret = kvm_sync_vcpus();
5422         if (ret < 0) {
5423             fprintf(stderr, "failed to initialize vcpus\n");
5424             exit(1);
5425         }
5426     }
5427
5428     /* init USB devices */
5429     if (usb_enabled) {
5430         for(i = 0; i < usb_devices_index; i++) {
5431             if (usb_device_add(usb_devices[i], 0) < 0) {
5432                 fprintf(stderr, "Warning: could not add USB device %s\n",
5433                         usb_devices[i]);
5434             }
5435         }
5436     }
5437
5438     if (!display_state)
5439         dumb_display_init();
5440     /* just use the first displaystate for the moment */
5441     ds = display_state;
5442     /* terminal init */
5443     if (nographic) {
5444         if (curses) {
5445             fprintf(stderr, "fatal: -nographic can't be used with -curses\n");
5446             exit(1);
5447         }
5448     } else { 
5449 #if defined(CONFIG_CURSES)
5450             if (curses) {
5451                 /* At the moment curses cannot be used with other displays */
5452                 curses_display_init(ds, full_screen);
5453             } else
5454 #endif
5455             {
5456                 if (vnc_display != NULL) {
5457                     vnc_display_init(ds);
5458                     if (vnc_display_open(ds, vnc_display) < 0)
5459                         exit(1);
5460                 }
5461 #if defined(CONFIG_SDL)
5462                 if (sdl || !vnc_display)
5463                     sdl_display_init(ds, full_screen, no_frame);
5464 #elif defined(CONFIG_COCOA)
5465                 if (sdl || !vnc_display)
5466                     cocoa_display_init(ds, full_screen);
5467 #endif
5468             }
5469     }
5470     dpy_resize(ds);
5471
5472     dcl = ds->listeners;
5473     while (dcl != NULL) {
5474         if (dcl->dpy_refresh != NULL) {
5475             ds->gui_timer = qemu_new_timer(rt_clock, gui_update, ds);
5476             qemu_mod_timer(ds->gui_timer, qemu_get_clock(rt_clock));
5477         }
5478         dcl = dcl->next;
5479     }
5480
5481     if (nographic || (vnc_display && !sdl)) {
5482         nographic_timer = qemu_new_timer(rt_clock, nographic_update, NULL);
5483         qemu_mod_timer(nographic_timer, qemu_get_clock(rt_clock));
5484     }
5485
5486     text_consoles_set_display(display_state);
5487     qemu_chr_initial_reset();
5488
5489     if (monitor_device && monitor_hd)
5490         monitor_init(monitor_hd, MONITOR_USE_READLINE | MONITOR_IS_DEFAULT);
5491
5492     for(i = 0; i < MAX_SERIAL_PORTS; i++) {
5493         const char *devname = serial_devices[i];
5494         if (devname && strcmp(devname, "none")) {
5495             char label[32];
5496             snprintf(label, sizeof(label), "serial%d", i);
5497             if (strstart(devname, "vc", 0))
5498                 qemu_chr_printf(serial_hds[i], "serial%d console\r\n", i);
5499         }
5500     }
5501
5502     for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
5503         const char *devname = parallel_devices[i];
5504         if (devname && strcmp(devname, "none")) {
5505             char label[32];
5506             snprintf(label, sizeof(label), "parallel%d", i);
5507             if (strstart(devname, "vc", 0))
5508                 qemu_chr_printf(parallel_hds[i], "parallel%d console\r\n", i);
5509         }
5510     }
5511
5512     for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
5513         const char *devname = virtio_consoles[i];
5514         if (virtcon_hds[i] && devname) {
5515             char label[32];
5516             snprintf(label, sizeof(label), "virtcon%d", i);
5517             if (strstart(devname, "vc", 0))
5518                 qemu_chr_printf(virtcon_hds[i], "virtio console%d\r\n", i);
5519         }
5520     }
5521
5522 #ifdef CONFIG_GDBSTUB
5523     if (gdbstub_dev && gdbserver_start(gdbstub_dev) < 0) {
5524         fprintf(stderr, "qemu: could not open gdbserver on device '%s'\n",
5525                 gdbstub_dev);
5526         exit(1);
5527     }
5528 #endif
5529
5530     if (loadvm)
5531         do_loadvm(cur_mon, loadvm);
5532
5533     if (incoming) {
5534         autostart = 0; /* fixme how to deal with -daemonize */
5535         qemu_start_incoming_migration(incoming);
5536     }
5537
5538     if (autostart)
5539         vm_start();
5540
5541 #ifndef _WIN32
5542     if (daemonize) {
5543         uint8_t status = 0;
5544         ssize_t len;
5545
5546     again1:
5547         len = write(fds[1], &status, 1);
5548         if (len == -1 && (errno == EINTR))
5549             goto again1;
5550
5551         if (len != 1)
5552             exit(1);
5553
5554         chdir("/");
5555         TFR(fd = open("/dev/null", O_RDWR));
5556         if (fd == -1)
5557             exit(1);
5558     }
5559
5560     if (run_as) {
5561         pwd = getpwnam(run_as);
5562         if (!pwd) {
5563             fprintf(stderr, "User \"%s\" doesn't exist\n", run_as);
5564             exit(1);
5565         }
5566     }
5567
5568     if (chroot_dir) {
5569         if (chroot(chroot_dir) < 0) {
5570             fprintf(stderr, "chroot failed\n");
5571             exit(1);
5572         }
5573         chdir("/");
5574     }
5575
5576     if (run_as) {
5577         if (setgid(pwd->pw_gid) < 0) {
5578             fprintf(stderr, "Failed to setgid(%d)\n", pwd->pw_gid);
5579             exit(1);
5580         }
5581         if (setuid(pwd->pw_uid) < 0) {
5582             fprintf(stderr, "Failed to setuid(%d)\n", pwd->pw_uid);
5583             exit(1);
5584         }
5585         if (setuid(0) != -1) {
5586             fprintf(stderr, "Dropping privileges failed\n");
5587             exit(1);
5588         }
5589     }
5590
5591     if (daemonize) {
5592         dup2(fd, 0);
5593         dup2(fd, 1);
5594         dup2(fd, 2);
5595
5596         close(fd);
5597     }
5598 #endif
5599
5600     main_loop();
5601     quit_timers();
5602     net_cleanup();
5603
5604     return 0;
5605 }