Get rid of sys/poll.h
[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 "hw/hw.h"
25 #include "hw/boards.h"
26 #include "hw/usb.h"
27 #include "hw/pcmcia.h"
28 #include "hw/pc.h"
29 #include "hw/audiodev.h"
30 #include "hw/isa.h"
31 #include "hw/baum.h"
32 #include "hw/bt.h"
33 #include "net.h"
34 #include "console.h"
35 #include "sysemu.h"
36 #include "gdbstub.h"
37 #include "qemu-timer.h"
38 #include "qemu-char.h"
39 #include "block.h"
40 #include "audio/audio.h"
41
42 #include <unistd.h>
43 #include <fcntl.h>
44 #include <signal.h>
45 #include <time.h>
46 #include <errno.h>
47 #include <sys/time.h>
48 #include <zlib.h>
49
50 #ifndef _WIN32
51 #include <sys/times.h>
52 #include <sys/wait.h>
53 #include <termios.h>
54 #include <sys/mman.h>
55 #include <sys/ioctl.h>
56 #include <sys/socket.h>
57 #include <netinet/in.h>
58 #include <dirent.h>
59 #include <netdb.h>
60 #include <sys/select.h>
61 #include <arpa/inet.h>
62 #ifdef _BSD
63 #include <sys/stat.h>
64 #if !defined(__APPLE__) && !defined(__OpenBSD__)
65 #include <libutil.h>
66 #endif
67 #ifdef __OpenBSD__
68 #include <net/if.h>
69 #endif
70 #elif defined (__GLIBC__) && defined (__FreeBSD_kernel__)
71 #include <freebsd/stdlib.h>
72 #else
73 #ifdef __linux__
74 #include <linux/if.h>
75 #include <linux/if_tun.h>
76 #include <pty.h>
77 #include <malloc.h>
78 #include <linux/rtc.h>
79
80 /* For the benefit of older linux systems which don't supply it,
81    we use a local copy of hpet.h. */
82 /* #include <linux/hpet.h> */
83 #include "hpet.h"
84
85 #include <linux/ppdev.h>
86 #include <linux/parport.h>
87 #endif
88 #ifdef __sun__
89 #include <sys/stat.h>
90 #include <sys/ethernet.h>
91 #include <sys/sockio.h>
92 #include <netinet/arp.h>
93 #include <netinet/in.h>
94 #include <netinet/in_systm.h>
95 #include <netinet/ip.h>
96 #include <netinet/ip_icmp.h> // must come after ip.h
97 #include <netinet/udp.h>
98 #include <netinet/tcp.h>
99 #include <net/if.h>
100 #include <syslog.h>
101 #include <stropts.h>
102 #endif
103 #endif
104 #endif
105
106 #include "qemu_socket.h"
107
108 #if defined(CONFIG_SLIRP)
109 #include "libslirp.h"
110 #endif
111
112 #if defined(__OpenBSD__)
113 #include <util.h>
114 #endif
115
116 #if defined(CONFIG_VDE)
117 #include <libvdeplug.h>
118 #endif
119
120 #ifdef _WIN32
121 #include <malloc.h>
122 #include <sys/timeb.h>
123 #include <mmsystem.h>
124 #define getopt_long_only getopt_long
125 #define memalign(align, size) malloc(size)
126 #endif
127
128 #ifdef CONFIG_SDL
129 #ifdef __APPLE__
130 #include <SDL/SDL.h>
131 #endif
132 #endif /* CONFIG_SDL */
133
134 #ifdef CONFIG_COCOA
135 #undef main
136 #define main qemu_main
137 #endif /* CONFIG_COCOA */
138
139 #include "disas.h"
140
141 #include "exec-all.h"
142
143 #define DEFAULT_NETWORK_SCRIPT "/etc/qemu-ifup"
144 #define DEFAULT_NETWORK_DOWN_SCRIPT "/etc/qemu-ifdown"
145 #ifdef __sun__
146 #define SMBD_COMMAND "/usr/sfw/sbin/smbd"
147 #else
148 #define SMBD_COMMAND "/usr/sbin/smbd"
149 #endif
150
151 //#define DEBUG_UNUSED_IOPORT
152 //#define DEBUG_IOPORT
153 //#define DEBUG_NET
154 //#define DEBUG_SLIRP
155
156 #ifdef TARGET_PPC
157 #define DEFAULT_RAM_SIZE 144
158 #else
159 #define DEFAULT_RAM_SIZE 128
160 #endif
161
162 /* Max number of USB devices that can be specified on the commandline.  */
163 #define MAX_USB_CMDLINE 8
164
165 /* XXX: use a two level table to limit memory usage */
166 #define MAX_IOPORTS 65536
167
168 const char *bios_dir = CONFIG_QEMU_SHAREDIR;
169 const char *bios_name = NULL;
170 static void *ioport_opaque[MAX_IOPORTS];
171 static IOPortReadFunc *ioport_read_table[3][MAX_IOPORTS];
172 static IOPortWriteFunc *ioport_write_table[3][MAX_IOPORTS];
173 /* Note: drives_table[MAX_DRIVES] is a dummy block driver if none available
174    to store the VM snapshots */
175 DriveInfo drives_table[MAX_DRIVES+1];
176 int nb_drives;
177 /* point to the block driver where the snapshots are managed */
178 static BlockDriverState *bs_snapshots;
179 static int vga_ram_size;
180 enum vga_retrace_method vga_retrace_method = VGA_RETRACE_DUMB;
181 static DisplayState display_state;
182 int nographic;
183 static int curses;
184 const char* keyboard_layout = NULL;
185 int64_t ticks_per_sec;
186 ram_addr_t ram_size;
187 int nb_nics;
188 NICInfo nd_table[MAX_NICS];
189 int vm_running;
190 static int rtc_utc = 1;
191 static int rtc_date_offset = -1; /* -1 means no change */
192 int cirrus_vga_enabled = 1;
193 int vmsvga_enabled = 0;
194 #ifdef TARGET_SPARC
195 int graphic_width = 1024;
196 int graphic_height = 768;
197 int graphic_depth = 8;
198 #else
199 int graphic_width = 800;
200 int graphic_height = 600;
201 int graphic_depth = 15;
202 #endif
203 static int full_screen = 0;
204 static int no_frame = 0;
205 int no_quit = 0;
206 CharDriverState *serial_hds[MAX_SERIAL_PORTS];
207 CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
208 #ifdef TARGET_I386
209 int win2k_install_hack = 0;
210 #endif
211 int usb_enabled = 0;
212 static VLANState *first_vlan;
213 int smp_cpus = 1;
214 const char *vnc_display;
215 int acpi_enabled = 1;
216 int fd_bootchk = 1;
217 int no_reboot = 0;
218 int no_shutdown = 0;
219 int cursor_hide = 1;
220 int graphic_rotate = 0;
221 int daemonize = 0;
222 const char *option_rom[MAX_OPTION_ROMS];
223 int nb_option_roms;
224 int semihosting_enabled = 0;
225 #ifdef TARGET_ARM
226 int old_param = 0;
227 #endif
228 const char *qemu_name;
229 int alt_grab = 0;
230 #ifdef TARGET_SPARC
231 unsigned int nb_prom_envs = 0;
232 const char *prom_envs[MAX_PROM_ENVS];
233 #endif
234 static int nb_drives_opt;
235 static struct drive_opt {
236     const char *file;
237     char opt[1024];
238 } drives_opt[MAX_DRIVES];
239
240 static CPUState *cur_cpu;
241 static CPUState *next_cpu;
242 static int event_pending = 1;
243 /* Conversion factor from emulated instructions to virtual clock ticks.  */
244 static int icount_time_shift;
245 /* Arbitrarily pick 1MIPS as the minimum allowable speed.  */
246 #define MAX_ICOUNT_SHIFT 10
247 /* Compensate for varying guest execution speed.  */
248 static int64_t qemu_icount_bias;
249 static QEMUTimer *icount_rt_timer;
250 static QEMUTimer *icount_vm_timer;
251
252 uint8_t qemu_uuid[16];
253
254 #define TFR(expr) do { if ((expr) != -1) break; } while (errno == EINTR)
255
256 /***********************************************************/
257 /* x86 ISA bus support */
258
259 target_phys_addr_t isa_mem_base = 0;
260 PicState2 *isa_pic;
261
262 static IOPortReadFunc default_ioport_readb, default_ioport_readw, default_ioport_readl;
263 static IOPortWriteFunc default_ioport_writeb, default_ioport_writew, default_ioport_writel;
264
265 static uint32_t ioport_read(int index, uint32_t address)
266 {
267     static IOPortReadFunc *default_func[3] = {
268         default_ioport_readb,
269         default_ioport_readw,
270         default_ioport_readl
271     };
272     IOPortReadFunc *func = ioport_read_table[index][address];
273     if (!func)
274         func = default_func[index];
275     return func(ioport_opaque[address], address);
276 }
277
278 static void ioport_write(int index, uint32_t address, uint32_t data)
279 {
280     static IOPortWriteFunc *default_func[3] = {
281         default_ioport_writeb,
282         default_ioport_writew,
283         default_ioport_writel
284     };
285     IOPortWriteFunc *func = ioport_write_table[index][address];
286     if (!func)
287         func = default_func[index];
288     func(ioport_opaque[address], address, data);
289 }
290
291 static uint32_t default_ioport_readb(void *opaque, uint32_t address)
292 {
293 #ifdef DEBUG_UNUSED_IOPORT
294     fprintf(stderr, "unused inb: port=0x%04x\n", address);
295 #endif
296     return 0xff;
297 }
298
299 static void default_ioport_writeb(void *opaque, uint32_t address, uint32_t data)
300 {
301 #ifdef DEBUG_UNUSED_IOPORT
302     fprintf(stderr, "unused outb: port=0x%04x data=0x%02x\n", address, data);
303 #endif
304 }
305
306 /* default is to make two byte accesses */
307 static uint32_t default_ioport_readw(void *opaque, uint32_t address)
308 {
309     uint32_t data;
310     data = ioport_read(0, address);
311     address = (address + 1) & (MAX_IOPORTS - 1);
312     data |= ioport_read(0, address) << 8;
313     return data;
314 }
315
316 static void default_ioport_writew(void *opaque, uint32_t address, uint32_t data)
317 {
318     ioport_write(0, address, data & 0xff);
319     address = (address + 1) & (MAX_IOPORTS - 1);
320     ioport_write(0, address, (data >> 8) & 0xff);
321 }
322
323 static uint32_t default_ioport_readl(void *opaque, uint32_t address)
324 {
325 #ifdef DEBUG_UNUSED_IOPORT
326     fprintf(stderr, "unused inl: port=0x%04x\n", address);
327 #endif
328     return 0xffffffff;
329 }
330
331 static void default_ioport_writel(void *opaque, uint32_t address, uint32_t data)
332 {
333 #ifdef DEBUG_UNUSED_IOPORT
334     fprintf(stderr, "unused outl: port=0x%04x data=0x%02x\n", address, data);
335 #endif
336 }
337
338 /* size is the word size in byte */
339 int register_ioport_read(int start, int length, int size,
340                          IOPortReadFunc *func, void *opaque)
341 {
342     int i, bsize;
343
344     if (size == 1) {
345         bsize = 0;
346     } else if (size == 2) {
347         bsize = 1;
348     } else if (size == 4) {
349         bsize = 2;
350     } else {
351         hw_error("register_ioport_read: invalid size");
352         return -1;
353     }
354     for(i = start; i < start + length; i += size) {
355         ioport_read_table[bsize][i] = func;
356         if (ioport_opaque[i] != NULL && ioport_opaque[i] != opaque)
357             hw_error("register_ioport_read: invalid opaque");
358         ioport_opaque[i] = opaque;
359     }
360     return 0;
361 }
362
363 /* size is the word size in byte */
364 int register_ioport_write(int start, int length, int size,
365                           IOPortWriteFunc *func, void *opaque)
366 {
367     int i, bsize;
368
369     if (size == 1) {
370         bsize = 0;
371     } else if (size == 2) {
372         bsize = 1;
373     } else if (size == 4) {
374         bsize = 2;
375     } else {
376         hw_error("register_ioport_write: invalid size");
377         return -1;
378     }
379     for(i = start; i < start + length; i += size) {
380         ioport_write_table[bsize][i] = func;
381         if (ioport_opaque[i] != NULL && ioport_opaque[i] != opaque)
382             hw_error("register_ioport_write: invalid opaque");
383         ioport_opaque[i] = opaque;
384     }
385     return 0;
386 }
387
388 void isa_unassign_ioport(int start, int length)
389 {
390     int i;
391
392     for(i = start; i < start + length; i++) {
393         ioport_read_table[0][i] = default_ioport_readb;
394         ioport_read_table[1][i] = default_ioport_readw;
395         ioport_read_table[2][i] = default_ioport_readl;
396
397         ioport_write_table[0][i] = default_ioport_writeb;
398         ioport_write_table[1][i] = default_ioport_writew;
399         ioport_write_table[2][i] = default_ioport_writel;
400     }
401 }
402
403 /***********************************************************/
404
405 void cpu_outb(CPUState *env, int addr, int val)
406 {
407 #ifdef DEBUG_IOPORT
408     if (loglevel & CPU_LOG_IOPORT)
409         fprintf(logfile, "outb: %04x %02x\n", addr, val);
410 #endif
411     ioport_write(0, addr, val);
412 #ifdef USE_KQEMU
413     if (env)
414         env->last_io_time = cpu_get_time_fast();
415 #endif
416 }
417
418 void cpu_outw(CPUState *env, int addr, int val)
419 {
420 #ifdef DEBUG_IOPORT
421     if (loglevel & CPU_LOG_IOPORT)
422         fprintf(logfile, "outw: %04x %04x\n", addr, val);
423 #endif
424     ioport_write(1, addr, val);
425 #ifdef USE_KQEMU
426     if (env)
427         env->last_io_time = cpu_get_time_fast();
428 #endif
429 }
430
431 void cpu_outl(CPUState *env, int addr, int val)
432 {
433 #ifdef DEBUG_IOPORT
434     if (loglevel & CPU_LOG_IOPORT)
435         fprintf(logfile, "outl: %04x %08x\n", addr, val);
436 #endif
437     ioport_write(2, addr, val);
438 #ifdef USE_KQEMU
439     if (env)
440         env->last_io_time = cpu_get_time_fast();
441 #endif
442 }
443
444 int cpu_inb(CPUState *env, int addr)
445 {
446     int val;
447     val = ioport_read(0, addr);
448 #ifdef DEBUG_IOPORT
449     if (loglevel & CPU_LOG_IOPORT)
450         fprintf(logfile, "inb : %04x %02x\n", addr, val);
451 #endif
452 #ifdef USE_KQEMU
453     if (env)
454         env->last_io_time = cpu_get_time_fast();
455 #endif
456     return val;
457 }
458
459 int cpu_inw(CPUState *env, int addr)
460 {
461     int val;
462     val = ioport_read(1, addr);
463 #ifdef DEBUG_IOPORT
464     if (loglevel & CPU_LOG_IOPORT)
465         fprintf(logfile, "inw : %04x %04x\n", addr, val);
466 #endif
467 #ifdef USE_KQEMU
468     if (env)
469         env->last_io_time = cpu_get_time_fast();
470 #endif
471     return val;
472 }
473
474 int cpu_inl(CPUState *env, int addr)
475 {
476     int val;
477     val = ioport_read(2, addr);
478 #ifdef DEBUG_IOPORT
479     if (loglevel & CPU_LOG_IOPORT)
480         fprintf(logfile, "inl : %04x %08x\n", addr, val);
481 #endif
482 #ifdef USE_KQEMU
483     if (env)
484         env->last_io_time = cpu_get_time_fast();
485 #endif
486     return val;
487 }
488
489 /***********************************************************/
490 void hw_error(const char *fmt, ...)
491 {
492     va_list ap;
493     CPUState *env;
494
495     va_start(ap, fmt);
496     fprintf(stderr, "qemu: hardware error: ");
497     vfprintf(stderr, fmt, ap);
498     fprintf(stderr, "\n");
499     for(env = first_cpu; env != NULL; env = env->next_cpu) {
500         fprintf(stderr, "CPU #%d:\n", env->cpu_index);
501 #ifdef TARGET_I386
502         cpu_dump_state(env, stderr, fprintf, X86_DUMP_FPU);
503 #else
504         cpu_dump_state(env, stderr, fprintf, 0);
505 #endif
506     }
507     va_end(ap);
508     abort();
509 }
510
511 /***********************************************************/
512 /* keyboard/mouse */
513
514 static QEMUPutKBDEvent *qemu_put_kbd_event;
515 static void *qemu_put_kbd_event_opaque;
516 static QEMUPutMouseEntry *qemu_put_mouse_event_head;
517 static QEMUPutMouseEntry *qemu_put_mouse_event_current;
518
519 void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque)
520 {
521     qemu_put_kbd_event_opaque = opaque;
522     qemu_put_kbd_event = func;
523 }
524
525 QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
526                                                 void *opaque, int absolute,
527                                                 const char *name)
528 {
529     QEMUPutMouseEntry *s, *cursor;
530
531     s = qemu_mallocz(sizeof(QEMUPutMouseEntry));
532     if (!s)
533         return NULL;
534
535     s->qemu_put_mouse_event = func;
536     s->qemu_put_mouse_event_opaque = opaque;
537     s->qemu_put_mouse_event_absolute = absolute;
538     s->qemu_put_mouse_event_name = qemu_strdup(name);
539     s->next = NULL;
540
541     if (!qemu_put_mouse_event_head) {
542         qemu_put_mouse_event_head = qemu_put_mouse_event_current = s;
543         return s;
544     }
545
546     cursor = qemu_put_mouse_event_head;
547     while (cursor->next != NULL)
548         cursor = cursor->next;
549
550     cursor->next = s;
551     qemu_put_mouse_event_current = s;
552
553     return s;
554 }
555
556 void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry)
557 {
558     QEMUPutMouseEntry *prev = NULL, *cursor;
559
560     if (!qemu_put_mouse_event_head || entry == NULL)
561         return;
562
563     cursor = qemu_put_mouse_event_head;
564     while (cursor != NULL && cursor != entry) {
565         prev = cursor;
566         cursor = cursor->next;
567     }
568
569     if (cursor == NULL) // does not exist or list empty
570         return;
571     else if (prev == NULL) { // entry is head
572         qemu_put_mouse_event_head = cursor->next;
573         if (qemu_put_mouse_event_current == entry)
574             qemu_put_mouse_event_current = cursor->next;
575         qemu_free(entry->qemu_put_mouse_event_name);
576         qemu_free(entry);
577         return;
578     }
579
580     prev->next = entry->next;
581
582     if (qemu_put_mouse_event_current == entry)
583         qemu_put_mouse_event_current = prev;
584
585     qemu_free(entry->qemu_put_mouse_event_name);
586     qemu_free(entry);
587 }
588
589 void kbd_put_keycode(int keycode)
590 {
591     if (qemu_put_kbd_event) {
592         qemu_put_kbd_event(qemu_put_kbd_event_opaque, keycode);
593     }
594 }
595
596 void kbd_mouse_event(int dx, int dy, int dz, int buttons_state)
597 {
598     QEMUPutMouseEvent *mouse_event;
599     void *mouse_event_opaque;
600     int width;
601
602     if (!qemu_put_mouse_event_current) {
603         return;
604     }
605
606     mouse_event =
607         qemu_put_mouse_event_current->qemu_put_mouse_event;
608     mouse_event_opaque =
609         qemu_put_mouse_event_current->qemu_put_mouse_event_opaque;
610
611     if (mouse_event) {
612         if (graphic_rotate) {
613             if (qemu_put_mouse_event_current->qemu_put_mouse_event_absolute)
614                 width = 0x7fff;
615             else
616                 width = graphic_width - 1;
617             mouse_event(mouse_event_opaque,
618                                  width - dy, dx, dz, buttons_state);
619         } else
620             mouse_event(mouse_event_opaque,
621                                  dx, dy, dz, buttons_state);
622     }
623 }
624
625 int kbd_mouse_is_absolute(void)
626 {
627     if (!qemu_put_mouse_event_current)
628         return 0;
629
630     return qemu_put_mouse_event_current->qemu_put_mouse_event_absolute;
631 }
632
633 void do_info_mice(void)
634 {
635     QEMUPutMouseEntry *cursor;
636     int index = 0;
637
638     if (!qemu_put_mouse_event_head) {
639         term_printf("No mouse devices connected\n");
640         return;
641     }
642
643     term_printf("Mouse devices available:\n");
644     cursor = qemu_put_mouse_event_head;
645     while (cursor != NULL) {
646         term_printf("%c Mouse #%d: %s\n",
647                     (cursor == qemu_put_mouse_event_current ? '*' : ' '),
648                     index, cursor->qemu_put_mouse_event_name);
649         index++;
650         cursor = cursor->next;
651     }
652 }
653
654 void do_mouse_set(int index)
655 {
656     QEMUPutMouseEntry *cursor;
657     int i = 0;
658
659     if (!qemu_put_mouse_event_head) {
660         term_printf("No mouse devices connected\n");
661         return;
662     }
663
664     cursor = qemu_put_mouse_event_head;
665     while (cursor != NULL && index != i) {
666         i++;
667         cursor = cursor->next;
668     }
669
670     if (cursor != NULL)
671         qemu_put_mouse_event_current = cursor;
672     else
673         term_printf("Mouse at given index not found\n");
674 }
675
676 /* compute with 96 bit intermediate result: (a*b)/c */
677 uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c)
678 {
679     union {
680         uint64_t ll;
681         struct {
682 #ifdef WORDS_BIGENDIAN
683             uint32_t high, low;
684 #else
685             uint32_t low, high;
686 #endif
687         } l;
688     } u, res;
689     uint64_t rl, rh;
690
691     u.ll = a;
692     rl = (uint64_t)u.l.low * (uint64_t)b;
693     rh = (uint64_t)u.l.high * (uint64_t)b;
694     rh += (rl >> 32);
695     res.l.high = rh / c;
696     res.l.low = (((rh % c) << 32) + (rl & 0xffffffff)) / c;
697     return res.ll;
698 }
699
700 /***********************************************************/
701 /* real time host monotonic timer */
702
703 #define QEMU_TIMER_BASE 1000000000LL
704
705 #ifdef WIN32
706
707 static int64_t clock_freq;
708
709 static void init_get_clock(void)
710 {
711     LARGE_INTEGER freq;
712     int ret;
713     ret = QueryPerformanceFrequency(&freq);
714     if (ret == 0) {
715         fprintf(stderr, "Could not calibrate ticks\n");
716         exit(1);
717     }
718     clock_freq = freq.QuadPart;
719 }
720
721 static int64_t get_clock(void)
722 {
723     LARGE_INTEGER ti;
724     QueryPerformanceCounter(&ti);
725     return muldiv64(ti.QuadPart, QEMU_TIMER_BASE, clock_freq);
726 }
727
728 #else
729
730 static int use_rt_clock;
731
732 static void init_get_clock(void)
733 {
734     use_rt_clock = 0;
735 #if defined(__linux__)
736     {
737         struct timespec ts;
738         if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0) {
739             use_rt_clock = 1;
740         }
741     }
742 #endif
743 }
744
745 static int64_t get_clock(void)
746 {
747 #if defined(__linux__)
748     if (use_rt_clock) {
749         struct timespec ts;
750         clock_gettime(CLOCK_MONOTONIC, &ts);
751         return ts.tv_sec * 1000000000LL + ts.tv_nsec;
752     } else
753 #endif
754     {
755         /* XXX: using gettimeofday leads to problems if the date
756            changes, so it should be avoided. */
757         struct timeval tv;
758         gettimeofday(&tv, NULL);
759         return tv.tv_sec * 1000000000LL + (tv.tv_usec * 1000);
760     }
761 }
762 #endif
763
764 /* Return the virtual CPU time, based on the instruction counter.  */
765 static int64_t cpu_get_icount(void)
766 {
767     int64_t icount;
768     CPUState *env = cpu_single_env;;
769     icount = qemu_icount;
770     if (env) {
771         if (!can_do_io(env))
772             fprintf(stderr, "Bad clock read\n");
773         icount -= (env->icount_decr.u16.low + env->icount_extra);
774     }
775     return qemu_icount_bias + (icount << icount_time_shift);
776 }
777
778 /***********************************************************/
779 /* guest cycle counter */
780
781 static int64_t cpu_ticks_prev;
782 static int64_t cpu_ticks_offset;
783 static int64_t cpu_clock_offset;
784 static int cpu_ticks_enabled;
785
786 /* return the host CPU cycle counter and handle stop/restart */
787 int64_t cpu_get_ticks(void)
788 {
789     if (use_icount) {
790         return cpu_get_icount();
791     }
792     if (!cpu_ticks_enabled) {
793         return cpu_ticks_offset;
794     } else {
795         int64_t ticks;
796         ticks = cpu_get_real_ticks();
797         if (cpu_ticks_prev > ticks) {
798             /* Note: non increasing ticks may happen if the host uses
799                software suspend */
800             cpu_ticks_offset += cpu_ticks_prev - ticks;
801         }
802         cpu_ticks_prev = ticks;
803         return ticks + cpu_ticks_offset;
804     }
805 }
806
807 /* return the host CPU monotonic timer and handle stop/restart */
808 static int64_t cpu_get_clock(void)
809 {
810     int64_t ti;
811     if (!cpu_ticks_enabled) {
812         return cpu_clock_offset;
813     } else {
814         ti = get_clock();
815         return ti + cpu_clock_offset;
816     }
817 }
818
819 /* enable cpu_get_ticks() */
820 void cpu_enable_ticks(void)
821 {
822     if (!cpu_ticks_enabled) {
823         cpu_ticks_offset -= cpu_get_real_ticks();
824         cpu_clock_offset -= get_clock();
825         cpu_ticks_enabled = 1;
826     }
827 }
828
829 /* disable cpu_get_ticks() : the clock is stopped. You must not call
830    cpu_get_ticks() after that.  */
831 void cpu_disable_ticks(void)
832 {
833     if (cpu_ticks_enabled) {
834         cpu_ticks_offset = cpu_get_ticks();
835         cpu_clock_offset = cpu_get_clock();
836         cpu_ticks_enabled = 0;
837     }
838 }
839
840 /***********************************************************/
841 /* timers */
842
843 #define QEMU_TIMER_REALTIME 0
844 #define QEMU_TIMER_VIRTUAL  1
845
846 struct QEMUClock {
847     int type;
848     /* XXX: add frequency */
849 };
850
851 struct QEMUTimer {
852     QEMUClock *clock;
853     int64_t expire_time;
854     QEMUTimerCB *cb;
855     void *opaque;
856     struct QEMUTimer *next;
857 };
858
859 struct qemu_alarm_timer {
860     char const *name;
861     unsigned int flags;
862
863     int (*start)(struct qemu_alarm_timer *t);
864     void (*stop)(struct qemu_alarm_timer *t);
865     void (*rearm)(struct qemu_alarm_timer *t);
866     void *priv;
867 };
868
869 #define ALARM_FLAG_DYNTICKS  0x1
870 #define ALARM_FLAG_EXPIRED   0x2
871
872 static inline int alarm_has_dynticks(struct qemu_alarm_timer *t)
873 {
874     return t->flags & ALARM_FLAG_DYNTICKS;
875 }
876
877 static void qemu_rearm_alarm_timer(struct qemu_alarm_timer *t)
878 {
879     if (!alarm_has_dynticks(t))
880         return;
881
882     t->rearm(t);
883 }
884
885 /* TODO: MIN_TIMER_REARM_US should be optimized */
886 #define MIN_TIMER_REARM_US 250
887
888 static struct qemu_alarm_timer *alarm_timer;
889
890 #ifdef _WIN32
891
892 struct qemu_alarm_win32 {
893     MMRESULT timerId;
894     HANDLE host_alarm;
895     unsigned int period;
896 } alarm_win32_data = {0, NULL, -1};
897
898 static int win32_start_timer(struct qemu_alarm_timer *t);
899 static void win32_stop_timer(struct qemu_alarm_timer *t);
900 static void win32_rearm_timer(struct qemu_alarm_timer *t);
901
902 #else
903
904 static int unix_start_timer(struct qemu_alarm_timer *t);
905 static void unix_stop_timer(struct qemu_alarm_timer *t);
906
907 #ifdef __linux__
908
909 static int dynticks_start_timer(struct qemu_alarm_timer *t);
910 static void dynticks_stop_timer(struct qemu_alarm_timer *t);
911 static void dynticks_rearm_timer(struct qemu_alarm_timer *t);
912
913 static int hpet_start_timer(struct qemu_alarm_timer *t);
914 static void hpet_stop_timer(struct qemu_alarm_timer *t);
915
916 static int rtc_start_timer(struct qemu_alarm_timer *t);
917 static void rtc_stop_timer(struct qemu_alarm_timer *t);
918
919 #endif /* __linux__ */
920
921 #endif /* _WIN32 */
922
923 /* Correlation between real and virtual time is always going to be
924    fairly approximate, so ignore small variation.
925    When the guest is idle real and virtual time will be aligned in
926    the IO wait loop.  */
927 #define ICOUNT_WOBBLE (QEMU_TIMER_BASE / 10)
928
929 static void icount_adjust(void)
930 {
931     int64_t cur_time;
932     int64_t cur_icount;
933     int64_t delta;
934     static int64_t last_delta;
935     /* If the VM is not running, then do nothing.  */
936     if (!vm_running)
937         return;
938
939     cur_time = cpu_get_clock();
940     cur_icount = qemu_get_clock(vm_clock);
941     delta = cur_icount - cur_time;
942     /* FIXME: This is a very crude algorithm, somewhat prone to oscillation.  */
943     if (delta > 0
944         && last_delta + ICOUNT_WOBBLE < delta * 2
945         && icount_time_shift > 0) {
946         /* The guest is getting too far ahead.  Slow time down.  */
947         icount_time_shift--;
948     }
949     if (delta < 0
950         && last_delta - ICOUNT_WOBBLE > delta * 2
951         && icount_time_shift < MAX_ICOUNT_SHIFT) {
952         /* The guest is getting too far behind.  Speed time up.  */
953         icount_time_shift++;
954     }
955     last_delta = delta;
956     qemu_icount_bias = cur_icount - (qemu_icount << icount_time_shift);
957 }
958
959 static void icount_adjust_rt(void * opaque)
960 {
961     qemu_mod_timer(icount_rt_timer,
962                    qemu_get_clock(rt_clock) + 1000);
963     icount_adjust();
964 }
965
966 static void icount_adjust_vm(void * opaque)
967 {
968     qemu_mod_timer(icount_vm_timer,
969                    qemu_get_clock(vm_clock) + QEMU_TIMER_BASE / 10);
970     icount_adjust();
971 }
972
973 static void init_icount_adjust(void)
974 {
975     /* Have both realtime and virtual time triggers for speed adjustment.
976        The realtime trigger catches emulated time passing too slowly,
977        the virtual time trigger catches emulated time passing too fast.
978        Realtime triggers occur even when idle, so use them less frequently
979        than VM triggers.  */
980     icount_rt_timer = qemu_new_timer(rt_clock, icount_adjust_rt, NULL);
981     qemu_mod_timer(icount_rt_timer,
982                    qemu_get_clock(rt_clock) + 1000);
983     icount_vm_timer = qemu_new_timer(vm_clock, icount_adjust_vm, NULL);
984     qemu_mod_timer(icount_vm_timer,
985                    qemu_get_clock(vm_clock) + QEMU_TIMER_BASE / 10);
986 }
987
988 static struct qemu_alarm_timer alarm_timers[] = {
989 #ifndef _WIN32
990 #ifdef __linux__
991     {"dynticks", ALARM_FLAG_DYNTICKS, dynticks_start_timer,
992      dynticks_stop_timer, dynticks_rearm_timer, NULL},
993     /* HPET - if available - is preferred */
994     {"hpet", 0, hpet_start_timer, hpet_stop_timer, NULL, NULL},
995     /* ...otherwise try RTC */
996     {"rtc", 0, rtc_start_timer, rtc_stop_timer, NULL, NULL},
997 #endif
998     {"unix", 0, unix_start_timer, unix_stop_timer, NULL, NULL},
999 #else
1000     {"dynticks", ALARM_FLAG_DYNTICKS, win32_start_timer,
1001      win32_stop_timer, win32_rearm_timer, &alarm_win32_data},
1002     {"win32", 0, win32_start_timer,
1003      win32_stop_timer, NULL, &alarm_win32_data},
1004 #endif
1005     {NULL, }
1006 };
1007
1008 static void show_available_alarms(void)
1009 {
1010     int i;
1011
1012     printf("Available alarm timers, in order of precedence:\n");
1013     for (i = 0; alarm_timers[i].name; i++)
1014         printf("%s\n", alarm_timers[i].name);
1015 }
1016
1017 static void configure_alarms(char const *opt)
1018 {
1019     int i;
1020     int cur = 0;
1021     int count = (sizeof(alarm_timers) / sizeof(*alarm_timers)) - 1;
1022     char *arg;
1023     char *name;
1024     struct qemu_alarm_timer tmp;
1025
1026     if (!strcmp(opt, "?")) {
1027         show_available_alarms();
1028         exit(0);
1029     }
1030
1031     arg = strdup(opt);
1032
1033     /* Reorder the array */
1034     name = strtok(arg, ",");
1035     while (name) {
1036         for (i = 0; i < count && alarm_timers[i].name; i++) {
1037             if (!strcmp(alarm_timers[i].name, name))
1038                 break;
1039         }
1040
1041         if (i == count) {
1042             fprintf(stderr, "Unknown clock %s\n", name);
1043             goto next;
1044         }
1045
1046         if (i < cur)
1047             /* Ignore */
1048             goto next;
1049
1050         /* Swap */
1051         tmp = alarm_timers[i];
1052         alarm_timers[i] = alarm_timers[cur];
1053         alarm_timers[cur] = tmp;
1054
1055         cur++;
1056 next:
1057         name = strtok(NULL, ",");
1058     }
1059
1060     free(arg);
1061
1062     if (cur) {
1063         /* Disable remaining timers */
1064         for (i = cur; i < count; i++)
1065             alarm_timers[i].name = NULL;
1066     } else {
1067         show_available_alarms();
1068         exit(1);
1069     }
1070 }
1071
1072 QEMUClock *rt_clock;
1073 QEMUClock *vm_clock;
1074
1075 static QEMUTimer *active_timers[2];
1076
1077 static QEMUClock *qemu_new_clock(int type)
1078 {
1079     QEMUClock *clock;
1080     clock = qemu_mallocz(sizeof(QEMUClock));
1081     if (!clock)
1082         return NULL;
1083     clock->type = type;
1084     return clock;
1085 }
1086
1087 QEMUTimer *qemu_new_timer(QEMUClock *clock, QEMUTimerCB *cb, void *opaque)
1088 {
1089     QEMUTimer *ts;
1090
1091     ts = qemu_mallocz(sizeof(QEMUTimer));
1092     ts->clock = clock;
1093     ts->cb = cb;
1094     ts->opaque = opaque;
1095     return ts;
1096 }
1097
1098 void qemu_free_timer(QEMUTimer *ts)
1099 {
1100     qemu_free(ts);
1101 }
1102
1103 /* stop a timer, but do not dealloc it */
1104 void qemu_del_timer(QEMUTimer *ts)
1105 {
1106     QEMUTimer **pt, *t;
1107
1108     /* NOTE: this code must be signal safe because
1109        qemu_timer_expired() can be called from a signal. */
1110     pt = &active_timers[ts->clock->type];
1111     for(;;) {
1112         t = *pt;
1113         if (!t)
1114             break;
1115         if (t == ts) {
1116             *pt = t->next;
1117             break;
1118         }
1119         pt = &t->next;
1120     }
1121 }
1122
1123 /* modify the current timer so that it will be fired when current_time
1124    >= expire_time. The corresponding callback will be called. */
1125 void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time)
1126 {
1127     QEMUTimer **pt, *t;
1128
1129     qemu_del_timer(ts);
1130
1131     /* add the timer in the sorted list */
1132     /* NOTE: this code must be signal safe because
1133        qemu_timer_expired() can be called from a signal. */
1134     pt = &active_timers[ts->clock->type];
1135     for(;;) {
1136         t = *pt;
1137         if (!t)
1138             break;
1139         if (t->expire_time > expire_time)
1140             break;
1141         pt = &t->next;
1142     }
1143     ts->expire_time = expire_time;
1144     ts->next = *pt;
1145     *pt = ts;
1146
1147     /* Rearm if necessary  */
1148     if (pt == &active_timers[ts->clock->type]) {
1149         if ((alarm_timer->flags & ALARM_FLAG_EXPIRED) == 0) {
1150             qemu_rearm_alarm_timer(alarm_timer);
1151         }
1152         /* Interrupt execution to force deadline recalculation.  */
1153         if (use_icount && cpu_single_env) {
1154             cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
1155         }
1156     }
1157 }
1158
1159 int qemu_timer_pending(QEMUTimer *ts)
1160 {
1161     QEMUTimer *t;
1162     for(t = active_timers[ts->clock->type]; t != NULL; t = t->next) {
1163         if (t == ts)
1164             return 1;
1165     }
1166     return 0;
1167 }
1168
1169 static inline int qemu_timer_expired(QEMUTimer *timer_head, int64_t current_time)
1170 {
1171     if (!timer_head)
1172         return 0;
1173     return (timer_head->expire_time <= current_time);
1174 }
1175
1176 static void qemu_run_timers(QEMUTimer **ptimer_head, int64_t current_time)
1177 {
1178     QEMUTimer *ts;
1179
1180     for(;;) {
1181         ts = *ptimer_head;
1182         if (!ts || ts->expire_time > current_time)
1183             break;
1184         /* remove timer from the list before calling the callback */
1185         *ptimer_head = ts->next;
1186         ts->next = NULL;
1187
1188         /* run the callback (the timer list can be modified) */
1189         ts->cb(ts->opaque);
1190     }
1191 }
1192
1193 int64_t qemu_get_clock(QEMUClock *clock)
1194 {
1195     switch(clock->type) {
1196     case QEMU_TIMER_REALTIME:
1197         return get_clock() / 1000000;
1198     default:
1199     case QEMU_TIMER_VIRTUAL:
1200         if (use_icount) {
1201             return cpu_get_icount();
1202         } else {
1203             return cpu_get_clock();
1204         }
1205     }
1206 }
1207
1208 static void init_timers(void)
1209 {
1210     init_get_clock();
1211     ticks_per_sec = QEMU_TIMER_BASE;
1212     rt_clock = qemu_new_clock(QEMU_TIMER_REALTIME);
1213     vm_clock = qemu_new_clock(QEMU_TIMER_VIRTUAL);
1214 }
1215
1216 /* save a timer */
1217 void qemu_put_timer(QEMUFile *f, QEMUTimer *ts)
1218 {
1219     uint64_t expire_time;
1220
1221     if (qemu_timer_pending(ts)) {
1222         expire_time = ts->expire_time;
1223     } else {
1224         expire_time = -1;
1225     }
1226     qemu_put_be64(f, expire_time);
1227 }
1228
1229 void qemu_get_timer(QEMUFile *f, QEMUTimer *ts)
1230 {
1231     uint64_t expire_time;
1232
1233     expire_time = qemu_get_be64(f);
1234     if (expire_time != -1) {
1235         qemu_mod_timer(ts, expire_time);
1236     } else {
1237         qemu_del_timer(ts);
1238     }
1239 }
1240
1241 static void timer_save(QEMUFile *f, void *opaque)
1242 {
1243     if (cpu_ticks_enabled) {
1244         hw_error("cannot save state if virtual timers are running");
1245     }
1246     qemu_put_be64(f, cpu_ticks_offset);
1247     qemu_put_be64(f, ticks_per_sec);
1248     qemu_put_be64(f, cpu_clock_offset);
1249 }
1250
1251 static int timer_load(QEMUFile *f, void *opaque, int version_id)
1252 {
1253     if (version_id != 1 && version_id != 2)
1254         return -EINVAL;
1255     if (cpu_ticks_enabled) {
1256         return -EINVAL;
1257     }
1258     cpu_ticks_offset=qemu_get_be64(f);
1259     ticks_per_sec=qemu_get_be64(f);
1260     if (version_id == 2) {
1261         cpu_clock_offset=qemu_get_be64(f);
1262     }
1263     return 0;
1264 }
1265
1266 #ifdef _WIN32
1267 void CALLBACK host_alarm_handler(UINT uTimerID, UINT uMsg,
1268                                  DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2)
1269 #else
1270 static void host_alarm_handler(int host_signum)
1271 #endif
1272 {
1273 #if 0
1274 #define DISP_FREQ 1000
1275     {
1276         static int64_t delta_min = INT64_MAX;
1277         static int64_t delta_max, delta_cum, last_clock, delta, ti;
1278         static int count;
1279         ti = qemu_get_clock(vm_clock);
1280         if (last_clock != 0) {
1281             delta = ti - last_clock;
1282             if (delta < delta_min)
1283                 delta_min = delta;
1284             if (delta > delta_max)
1285                 delta_max = delta;
1286             delta_cum += delta;
1287             if (++count == DISP_FREQ) {
1288                 printf("timer: min=%" PRId64 " us max=%" PRId64 " us avg=%" PRId64 " us avg_freq=%0.3f Hz\n",
1289                        muldiv64(delta_min, 1000000, ticks_per_sec),
1290                        muldiv64(delta_max, 1000000, ticks_per_sec),
1291                        muldiv64(delta_cum, 1000000 / DISP_FREQ, ticks_per_sec),
1292                        (double)ticks_per_sec / ((double)delta_cum / DISP_FREQ));
1293                 count = 0;
1294                 delta_min = INT64_MAX;
1295                 delta_max = 0;
1296                 delta_cum = 0;
1297             }
1298         }
1299         last_clock = ti;
1300     }
1301 #endif
1302     if (alarm_has_dynticks(alarm_timer) ||
1303         (!use_icount &&
1304             qemu_timer_expired(active_timers[QEMU_TIMER_VIRTUAL],
1305                                qemu_get_clock(vm_clock))) ||
1306         qemu_timer_expired(active_timers[QEMU_TIMER_REALTIME],
1307                            qemu_get_clock(rt_clock))) {
1308 #ifdef _WIN32
1309         struct qemu_alarm_win32 *data = ((struct qemu_alarm_timer*)dwUser)->priv;
1310         SetEvent(data->host_alarm);
1311 #endif
1312         CPUState *env = next_cpu;
1313
1314         alarm_timer->flags |= ALARM_FLAG_EXPIRED;
1315
1316         if (env) {
1317             /* stop the currently executing cpu because a timer occured */
1318             cpu_interrupt(env, CPU_INTERRUPT_EXIT);
1319 #ifdef USE_KQEMU
1320             if (env->kqemu_enabled) {
1321                 kqemu_cpu_interrupt(env);
1322             }
1323 #endif
1324         }
1325         event_pending = 1;
1326     }
1327 }
1328
1329 static int64_t qemu_next_deadline(void)
1330 {
1331     int64_t delta;
1332
1333     if (active_timers[QEMU_TIMER_VIRTUAL]) {
1334         delta = active_timers[QEMU_TIMER_VIRTUAL]->expire_time -
1335                      qemu_get_clock(vm_clock);
1336     } else {
1337         /* To avoid problems with overflow limit this to 2^32.  */
1338         delta = INT32_MAX;
1339     }
1340
1341     if (delta < 0)
1342         delta = 0;
1343
1344     return delta;
1345 }
1346
1347 #if defined(__linux__) || defined(_WIN32)
1348 static uint64_t qemu_next_deadline_dyntick(void)
1349 {
1350     int64_t delta;
1351     int64_t rtdelta;
1352
1353     if (use_icount)
1354         delta = INT32_MAX;
1355     else
1356         delta = (qemu_next_deadline() + 999) / 1000;
1357
1358     if (active_timers[QEMU_TIMER_REALTIME]) {
1359         rtdelta = (active_timers[QEMU_TIMER_REALTIME]->expire_time -
1360                  qemu_get_clock(rt_clock))*1000;
1361         if (rtdelta < delta)
1362             delta = rtdelta;
1363     }
1364
1365     if (delta < MIN_TIMER_REARM_US)
1366         delta = MIN_TIMER_REARM_US;
1367
1368     return delta;
1369 }
1370 #endif
1371
1372 #ifndef _WIN32
1373
1374 #if defined(__linux__)
1375
1376 #define RTC_FREQ 1024
1377
1378 static void enable_sigio_timer(int fd)
1379 {
1380     struct sigaction act;
1381
1382     /* timer signal */
1383     sigfillset(&act.sa_mask);
1384     act.sa_flags = 0;
1385     act.sa_handler = host_alarm_handler;
1386
1387     sigaction(SIGIO, &act, NULL);
1388     fcntl(fd, F_SETFL, O_ASYNC);
1389     fcntl(fd, F_SETOWN, getpid());
1390 }
1391
1392 static int hpet_start_timer(struct qemu_alarm_timer *t)
1393 {
1394     struct hpet_info info;
1395     int r, fd;
1396
1397     fd = open("/dev/hpet", O_RDONLY);
1398     if (fd < 0)
1399         return -1;
1400
1401     /* Set frequency */
1402     r = ioctl(fd, HPET_IRQFREQ, RTC_FREQ);
1403     if (r < 0) {
1404         fprintf(stderr, "Could not configure '/dev/hpet' to have a 1024Hz timer. This is not a fatal\n"
1405                 "error, but for better emulation accuracy type:\n"
1406                 "'echo 1024 > /proc/sys/dev/hpet/max-user-freq' as root.\n");
1407         goto fail;
1408     }
1409
1410     /* Check capabilities */
1411     r = ioctl(fd, HPET_INFO, &info);
1412     if (r < 0)
1413         goto fail;
1414
1415     /* Enable periodic mode */
1416     r = ioctl(fd, HPET_EPI, 0);
1417     if (info.hi_flags && (r < 0))
1418         goto fail;
1419
1420     /* Enable interrupt */
1421     r = ioctl(fd, HPET_IE_ON, 0);
1422     if (r < 0)
1423         goto fail;
1424
1425     enable_sigio_timer(fd);
1426     t->priv = (void *)(long)fd;
1427
1428     return 0;
1429 fail:
1430     close(fd);
1431     return -1;
1432 }
1433
1434 static void hpet_stop_timer(struct qemu_alarm_timer *t)
1435 {
1436     int fd = (long)t->priv;
1437
1438     close(fd);
1439 }
1440
1441 static int rtc_start_timer(struct qemu_alarm_timer *t)
1442 {
1443     int rtc_fd;
1444     unsigned long current_rtc_freq = 0;
1445
1446     TFR(rtc_fd = open("/dev/rtc", O_RDONLY));
1447     if (rtc_fd < 0)
1448         return -1;
1449     ioctl(rtc_fd, RTC_IRQP_READ, &current_rtc_freq);
1450     if (current_rtc_freq != RTC_FREQ &&
1451         ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
1452         fprintf(stderr, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n"
1453                 "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n"
1454                 "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n");
1455         goto fail;
1456     }
1457     if (ioctl(rtc_fd, RTC_PIE_ON, 0) < 0) {
1458     fail:
1459         close(rtc_fd);
1460         return -1;
1461     }
1462
1463     enable_sigio_timer(rtc_fd);
1464
1465     t->priv = (void *)(long)rtc_fd;
1466
1467     return 0;
1468 }
1469
1470 static void rtc_stop_timer(struct qemu_alarm_timer *t)
1471 {
1472     int rtc_fd = (long)t->priv;
1473
1474     close(rtc_fd);
1475 }
1476
1477 static int dynticks_start_timer(struct qemu_alarm_timer *t)
1478 {
1479     struct sigevent ev;
1480     timer_t host_timer;
1481     struct sigaction act;
1482
1483     sigfillset(&act.sa_mask);
1484     act.sa_flags = 0;
1485     act.sa_handler = host_alarm_handler;
1486
1487     sigaction(SIGALRM, &act, NULL);
1488
1489     ev.sigev_value.sival_int = 0;
1490     ev.sigev_notify = SIGEV_SIGNAL;
1491     ev.sigev_signo = SIGALRM;
1492
1493     if (timer_create(CLOCK_REALTIME, &ev, &host_timer)) {
1494         perror("timer_create");
1495
1496         /* disable dynticks */
1497         fprintf(stderr, "Dynamic Ticks disabled\n");
1498
1499         return -1;
1500     }
1501
1502     t->priv = (void *)host_timer;
1503
1504     return 0;
1505 }
1506
1507 static void dynticks_stop_timer(struct qemu_alarm_timer *t)
1508 {
1509     timer_t host_timer = (timer_t)t->priv;
1510
1511     timer_delete(host_timer);
1512 }
1513
1514 static void dynticks_rearm_timer(struct qemu_alarm_timer *t)
1515 {
1516     timer_t host_timer = (timer_t)t->priv;
1517     struct itimerspec timeout;
1518     int64_t nearest_delta_us = INT64_MAX;
1519     int64_t current_us;
1520
1521     if (!active_timers[QEMU_TIMER_REALTIME] &&
1522                 !active_timers[QEMU_TIMER_VIRTUAL])
1523         return;
1524
1525     nearest_delta_us = qemu_next_deadline_dyntick();
1526
1527     /* check whether a timer is already running */
1528     if (timer_gettime(host_timer, &timeout)) {
1529         perror("gettime");
1530         fprintf(stderr, "Internal timer error: aborting\n");
1531         exit(1);
1532     }
1533     current_us = timeout.it_value.tv_sec * 1000000 + timeout.it_value.tv_nsec/1000;
1534     if (current_us && current_us <= nearest_delta_us)
1535         return;
1536
1537     timeout.it_interval.tv_sec = 0;
1538     timeout.it_interval.tv_nsec = 0; /* 0 for one-shot timer */
1539     timeout.it_value.tv_sec =  nearest_delta_us / 1000000;
1540     timeout.it_value.tv_nsec = (nearest_delta_us % 1000000) * 1000;
1541     if (timer_settime(host_timer, 0 /* RELATIVE */, &timeout, NULL)) {
1542         perror("settime");
1543         fprintf(stderr, "Internal timer error: aborting\n");
1544         exit(1);
1545     }
1546 }
1547
1548 #endif /* defined(__linux__) */
1549
1550 static int unix_start_timer(struct qemu_alarm_timer *t)
1551 {
1552     struct sigaction act;
1553     struct itimerval itv;
1554     int err;
1555
1556     /* timer signal */
1557     sigfillset(&act.sa_mask);
1558     act.sa_flags = 0;
1559     act.sa_handler = host_alarm_handler;
1560
1561     sigaction(SIGALRM, &act, NULL);
1562
1563     itv.it_interval.tv_sec = 0;
1564     /* for i386 kernel 2.6 to get 1 ms */
1565     itv.it_interval.tv_usec = 999;
1566     itv.it_value.tv_sec = 0;
1567     itv.it_value.tv_usec = 10 * 1000;
1568
1569     err = setitimer(ITIMER_REAL, &itv, NULL);
1570     if (err)
1571         return -1;
1572
1573     return 0;
1574 }
1575
1576 static void unix_stop_timer(struct qemu_alarm_timer *t)
1577 {
1578     struct itimerval itv;
1579
1580     memset(&itv, 0, sizeof(itv));
1581     setitimer(ITIMER_REAL, &itv, NULL);
1582 }
1583
1584 #endif /* !defined(_WIN32) */
1585
1586 #ifdef _WIN32
1587
1588 static int win32_start_timer(struct qemu_alarm_timer *t)
1589 {
1590     TIMECAPS tc;
1591     struct qemu_alarm_win32 *data = t->priv;
1592     UINT flags;
1593
1594     data->host_alarm = CreateEvent(NULL, FALSE, FALSE, NULL);
1595     if (!data->host_alarm) {
1596         perror("Failed CreateEvent");
1597         return -1;
1598     }
1599
1600     memset(&tc, 0, sizeof(tc));
1601     timeGetDevCaps(&tc, sizeof(tc));
1602
1603     if (data->period < tc.wPeriodMin)
1604         data->period = tc.wPeriodMin;
1605
1606     timeBeginPeriod(data->period);
1607
1608     flags = TIME_CALLBACK_FUNCTION;
1609     if (alarm_has_dynticks(t))
1610         flags |= TIME_ONESHOT;
1611     else
1612         flags |= TIME_PERIODIC;
1613
1614     data->timerId = timeSetEvent(1,         // interval (ms)
1615                         data->period,       // resolution
1616                         host_alarm_handler, // function
1617                         (DWORD)t,           // parameter
1618                         flags);
1619
1620     if (!data->timerId) {
1621         perror("Failed to initialize win32 alarm timer");
1622
1623         timeEndPeriod(data->period);
1624         CloseHandle(data->host_alarm);
1625         return -1;
1626     }
1627
1628     qemu_add_wait_object(data->host_alarm, NULL, NULL);
1629
1630     return 0;
1631 }
1632
1633 static void win32_stop_timer(struct qemu_alarm_timer *t)
1634 {
1635     struct qemu_alarm_win32 *data = t->priv;
1636
1637     timeKillEvent(data->timerId);
1638     timeEndPeriod(data->period);
1639
1640     CloseHandle(data->host_alarm);
1641 }
1642
1643 static void win32_rearm_timer(struct qemu_alarm_timer *t)
1644 {
1645     struct qemu_alarm_win32 *data = t->priv;
1646     uint64_t nearest_delta_us;
1647
1648     if (!active_timers[QEMU_TIMER_REALTIME] &&
1649                 !active_timers[QEMU_TIMER_VIRTUAL])
1650         return;
1651
1652     nearest_delta_us = qemu_next_deadline_dyntick();
1653     nearest_delta_us /= 1000;
1654
1655     timeKillEvent(data->timerId);
1656
1657     data->timerId = timeSetEvent(1,
1658                         data->period,
1659                         host_alarm_handler,
1660                         (DWORD)t,
1661                         TIME_ONESHOT | TIME_PERIODIC);
1662
1663     if (!data->timerId) {
1664         perror("Failed to re-arm win32 alarm timer");
1665
1666         timeEndPeriod(data->period);
1667         CloseHandle(data->host_alarm);
1668         exit(1);
1669     }
1670 }
1671
1672 #endif /* _WIN32 */
1673
1674 static void init_timer_alarm(void)
1675 {
1676     struct qemu_alarm_timer *t = NULL;
1677     int i, err = -1;
1678
1679     for (i = 0; alarm_timers[i].name; i++) {
1680         t = &alarm_timers[i];
1681
1682         err = t->start(t);
1683         if (!err)
1684             break;
1685     }
1686
1687     if (err) {
1688         fprintf(stderr, "Unable to find any suitable alarm timer.\n");
1689         fprintf(stderr, "Terminating\n");
1690         exit(1);
1691     }
1692
1693     alarm_timer = t;
1694 }
1695
1696 static void quit_timers(void)
1697 {
1698     alarm_timer->stop(alarm_timer);
1699     alarm_timer = NULL;
1700 }
1701
1702 /***********************************************************/
1703 /* host time/date access */
1704 void qemu_get_timedate(struct tm *tm, int offset)
1705 {
1706     time_t ti;
1707     struct tm *ret;
1708
1709     time(&ti);
1710     ti += offset;
1711     if (rtc_date_offset == -1) {
1712         if (rtc_utc)
1713             ret = gmtime(&ti);
1714         else
1715             ret = localtime(&ti);
1716     } else {
1717         ti -= rtc_date_offset;
1718         ret = gmtime(&ti);
1719     }
1720
1721     memcpy(tm, ret, sizeof(struct tm));
1722 }
1723
1724 int qemu_timedate_diff(struct tm *tm)
1725 {
1726     time_t seconds;
1727
1728     if (rtc_date_offset == -1)
1729         if (rtc_utc)
1730             seconds = mktimegm(tm);
1731         else
1732             seconds = mktime(tm);
1733     else
1734         seconds = mktimegm(tm) + rtc_date_offset;
1735
1736     return seconds - time(NULL);
1737 }
1738
1739 /***********************************************************/
1740 /* character device */
1741
1742 static void qemu_chr_event(CharDriverState *s, int event)
1743 {
1744     if (!s->chr_event)
1745         return;
1746     s->chr_event(s->handler_opaque, event);
1747 }
1748
1749 static void qemu_chr_reset_bh(void *opaque)
1750 {
1751     CharDriverState *s = opaque;
1752     qemu_chr_event(s, CHR_EVENT_RESET);
1753     qemu_bh_delete(s->bh);
1754     s->bh = NULL;
1755 }
1756
1757 void qemu_chr_reset(CharDriverState *s)
1758 {
1759     if (s->bh == NULL) {
1760         s->bh = qemu_bh_new(qemu_chr_reset_bh, s);
1761         qemu_bh_schedule(s->bh);
1762     }
1763 }
1764
1765 int qemu_chr_write(CharDriverState *s, const uint8_t *buf, int len)
1766 {
1767     return s->chr_write(s, buf, len);
1768 }
1769
1770 int qemu_chr_ioctl(CharDriverState *s, int cmd, void *arg)
1771 {
1772     if (!s->chr_ioctl)
1773         return -ENOTSUP;
1774     return s->chr_ioctl(s, cmd, arg);
1775 }
1776
1777 int qemu_chr_can_read(CharDriverState *s)
1778 {
1779     if (!s->chr_can_read)
1780         return 0;
1781     return s->chr_can_read(s->handler_opaque);
1782 }
1783
1784 void qemu_chr_read(CharDriverState *s, uint8_t *buf, int len)
1785 {
1786     s->chr_read(s->handler_opaque, buf, len);
1787 }
1788
1789 void qemu_chr_accept_input(CharDriverState *s)
1790 {
1791     if (s->chr_accept_input)
1792         s->chr_accept_input(s);
1793 }
1794
1795 void qemu_chr_printf(CharDriverState *s, const char *fmt, ...)
1796 {
1797     char buf[4096];
1798     va_list ap;
1799     va_start(ap, fmt);
1800     vsnprintf(buf, sizeof(buf), fmt, ap);
1801     qemu_chr_write(s, (uint8_t *)buf, strlen(buf));
1802     va_end(ap);
1803 }
1804
1805 void qemu_chr_send_event(CharDriverState *s, int event)
1806 {
1807     if (s->chr_send_event)
1808         s->chr_send_event(s, event);
1809 }
1810
1811 void qemu_chr_add_handlers(CharDriverState *s,
1812                            IOCanRWHandler *fd_can_read,
1813                            IOReadHandler *fd_read,
1814                            IOEventHandler *fd_event,
1815                            void *opaque)
1816 {
1817     s->chr_can_read = fd_can_read;
1818     s->chr_read = fd_read;
1819     s->chr_event = fd_event;
1820     s->handler_opaque = opaque;
1821     if (s->chr_update_read_handler)
1822         s->chr_update_read_handler(s);
1823 }
1824
1825 static int null_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
1826 {
1827     return len;
1828 }
1829
1830 static CharDriverState *qemu_chr_open_null(void)
1831 {
1832     CharDriverState *chr;
1833
1834     chr = qemu_mallocz(sizeof(CharDriverState));
1835     if (!chr)
1836         return NULL;
1837     chr->chr_write = null_chr_write;
1838     return chr;
1839 }
1840
1841 /* MUX driver for serial I/O splitting */
1842 static int term_timestamps;
1843 static int64_t term_timestamps_start;
1844 #define MAX_MUX 4
1845 #define MUX_BUFFER_SIZE 32      /* Must be a power of 2.  */
1846 #define MUX_BUFFER_MASK (MUX_BUFFER_SIZE - 1)
1847 typedef struct {
1848     IOCanRWHandler *chr_can_read[MAX_MUX];
1849     IOReadHandler *chr_read[MAX_MUX];
1850     IOEventHandler *chr_event[MAX_MUX];
1851     void *ext_opaque[MAX_MUX];
1852     CharDriverState *drv;
1853     unsigned char buffer[MUX_BUFFER_SIZE];
1854     int prod;
1855     int cons;
1856     int mux_cnt;
1857     int term_got_escape;
1858     int max_size;
1859 } MuxDriver;
1860
1861
1862 static int mux_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
1863 {
1864     MuxDriver *d = chr->opaque;
1865     int ret;
1866     if (!term_timestamps) {
1867         ret = d->drv->chr_write(d->drv, buf, len);
1868     } else {
1869         int i;
1870
1871         ret = 0;
1872         for(i = 0; i < len; i++) {
1873             ret += d->drv->chr_write(d->drv, buf+i, 1);
1874             if (buf[i] == '\n') {
1875                 char buf1[64];
1876                 int64_t ti;
1877                 int secs;
1878
1879                 ti = get_clock();
1880                 if (term_timestamps_start == -1)
1881                     term_timestamps_start = ti;
1882                 ti -= term_timestamps_start;
1883                 secs = ti / 1000000000;
1884                 snprintf(buf1, sizeof(buf1),
1885                          "[%02d:%02d:%02d.%03d] ",
1886                          secs / 3600,
1887                          (secs / 60) % 60,
1888                          secs % 60,
1889                          (int)((ti / 1000000) % 1000));
1890                 d->drv->chr_write(d->drv, (uint8_t *)buf1, strlen(buf1));
1891             }
1892         }
1893     }
1894     return ret;
1895 }
1896
1897 static const char * const mux_help[] = {
1898     "% h    print this help\n\r",
1899     "% x    exit emulator\n\r",
1900     "% s    save disk data back to file (if -snapshot)\n\r",
1901     "% t    toggle console timestamps\n\r"
1902     "% b    send break (magic sysrq)\n\r",
1903     "% c    switch between console and monitor\n\r",
1904     "% %  sends %\n\r",
1905     NULL
1906 };
1907
1908 static int term_escape_char = 0x01; /* ctrl-a is used for escape */
1909 static void mux_print_help(CharDriverState *chr)
1910 {
1911     int i, j;
1912     char ebuf[15] = "Escape-Char";
1913     char cbuf[50] = "\n\r";
1914
1915     if (term_escape_char > 0 && term_escape_char < 26) {
1916         snprintf(cbuf, sizeof(cbuf), "\n\r");
1917         snprintf(ebuf, sizeof(ebuf), "C-%c", term_escape_char - 1 + 'a');
1918     } else {
1919         snprintf(cbuf, sizeof(cbuf),
1920                  "\n\rEscape-Char set to Ascii: 0x%02x\n\r\n\r",
1921                  term_escape_char);
1922     }
1923     chr->chr_write(chr, (uint8_t *)cbuf, strlen(cbuf));
1924     for (i = 0; mux_help[i] != NULL; i++) {
1925         for (j=0; mux_help[i][j] != '\0'; j++) {
1926             if (mux_help[i][j] == '%')
1927                 chr->chr_write(chr, (uint8_t *)ebuf, strlen(ebuf));
1928             else
1929                 chr->chr_write(chr, (uint8_t *)&mux_help[i][j], 1);
1930         }
1931     }
1932 }
1933
1934 static int mux_proc_byte(CharDriverState *chr, MuxDriver *d, int ch)
1935 {
1936     if (d->term_got_escape) {
1937         d->term_got_escape = 0;
1938         if (ch == term_escape_char)
1939             goto send_char;
1940         switch(ch) {
1941         case '?':
1942         case 'h':
1943             mux_print_help(chr);
1944             break;
1945         case 'x':
1946             {
1947                  const char *term =  "QEMU: Terminated\n\r";
1948                  chr->chr_write(chr,(uint8_t *)term,strlen(term));
1949                  exit(0);
1950                  break;
1951             }
1952         case 's':
1953             {
1954                 int i;
1955                 for (i = 0; i < nb_drives; i++) {
1956                         bdrv_commit(drives_table[i].bdrv);
1957                 }
1958             }
1959             break;
1960         case 'b':
1961             qemu_chr_event(chr, CHR_EVENT_BREAK);
1962             break;
1963         case 'c':
1964             /* Switch to the next registered device */
1965             chr->focus++;
1966             if (chr->focus >= d->mux_cnt)
1967                 chr->focus = 0;
1968             break;
1969        case 't':
1970            term_timestamps = !term_timestamps;
1971            term_timestamps_start = -1;
1972            break;
1973         }
1974     } else if (ch == term_escape_char) {
1975         d->term_got_escape = 1;
1976     } else {
1977     send_char:
1978         return 1;
1979     }
1980     return 0;
1981 }
1982
1983 static void mux_chr_accept_input(CharDriverState *chr)
1984 {
1985     int m = chr->focus;
1986     MuxDriver *d = chr->opaque;
1987
1988     while (d->prod != d->cons &&
1989            d->chr_can_read[m] &&
1990            d->chr_can_read[m](d->ext_opaque[m])) {
1991         d->chr_read[m](d->ext_opaque[m],
1992                        &d->buffer[d->cons++ & MUX_BUFFER_MASK], 1);
1993     }
1994 }
1995
1996 static int mux_chr_can_read(void *opaque)
1997 {
1998     CharDriverState *chr = opaque;
1999     MuxDriver *d = chr->opaque;
2000
2001     if ((d->prod - d->cons) < MUX_BUFFER_SIZE)
2002         return 1;
2003     if (d->chr_can_read[chr->focus])
2004         return d->chr_can_read[chr->focus](d->ext_opaque[chr->focus]);
2005     return 0;
2006 }
2007
2008 static void mux_chr_read(void *opaque, const uint8_t *buf, int size)
2009 {
2010     CharDriverState *chr = opaque;
2011     MuxDriver *d = chr->opaque;
2012     int m = chr->focus;
2013     int i;
2014
2015     mux_chr_accept_input (opaque);
2016
2017     for(i = 0; i < size; i++)
2018         if (mux_proc_byte(chr, d, buf[i])) {
2019             if (d->prod == d->cons &&
2020                 d->chr_can_read[m] &&
2021                 d->chr_can_read[m](d->ext_opaque[m]))
2022                 d->chr_read[m](d->ext_opaque[m], &buf[i], 1);
2023             else
2024                 d->buffer[d->prod++ & MUX_BUFFER_MASK] = buf[i];
2025         }
2026 }
2027
2028 static void mux_chr_event(void *opaque, int event)
2029 {
2030     CharDriverState *chr = opaque;
2031     MuxDriver *d = chr->opaque;
2032     int i;
2033
2034     /* Send the event to all registered listeners */
2035     for (i = 0; i < d->mux_cnt; i++)
2036         if (d->chr_event[i])
2037             d->chr_event[i](d->ext_opaque[i], event);
2038 }
2039
2040 static void mux_chr_update_read_handler(CharDriverState *chr)
2041 {
2042     MuxDriver *d = chr->opaque;
2043
2044     if (d->mux_cnt >= MAX_MUX) {
2045         fprintf(stderr, "Cannot add I/O handlers, MUX array is full\n");
2046         return;
2047     }
2048     d->ext_opaque[d->mux_cnt] = chr->handler_opaque;
2049     d->chr_can_read[d->mux_cnt] = chr->chr_can_read;
2050     d->chr_read[d->mux_cnt] = chr->chr_read;
2051     d->chr_event[d->mux_cnt] = chr->chr_event;
2052     /* Fix up the real driver with mux routines */
2053     if (d->mux_cnt == 0) {
2054         qemu_chr_add_handlers(d->drv, mux_chr_can_read, mux_chr_read,
2055                               mux_chr_event, chr);
2056     }
2057     chr->focus = d->mux_cnt;
2058     d->mux_cnt++;
2059 }
2060
2061 static CharDriverState *qemu_chr_open_mux(CharDriverState *drv)
2062 {
2063     CharDriverState *chr;
2064     MuxDriver *d;
2065
2066     chr = qemu_mallocz(sizeof(CharDriverState));
2067     if (!chr)
2068         return NULL;
2069     d = qemu_mallocz(sizeof(MuxDriver));
2070     if (!d) {
2071         free(chr);
2072         return NULL;
2073     }
2074
2075     chr->opaque = d;
2076     d->drv = drv;
2077     chr->focus = -1;
2078     chr->chr_write = mux_chr_write;
2079     chr->chr_update_read_handler = mux_chr_update_read_handler;
2080     chr->chr_accept_input = mux_chr_accept_input;
2081     return chr;
2082 }
2083
2084
2085 #ifdef _WIN32
2086
2087 static void socket_cleanup(void)
2088 {
2089     WSACleanup();
2090 }
2091
2092 static int socket_init(void)
2093 {
2094     WSADATA Data;
2095     int ret, err;
2096
2097     ret = WSAStartup(MAKEWORD(2,2), &Data);
2098     if (ret != 0) {
2099         err = WSAGetLastError();
2100         fprintf(stderr, "WSAStartup: %d\n", err);
2101         return -1;
2102     }
2103     atexit(socket_cleanup);
2104     return 0;
2105 }
2106
2107 static int send_all(int fd, const uint8_t *buf, int len1)
2108 {
2109     int ret, len;
2110
2111     len = len1;
2112     while (len > 0) {
2113         ret = send(fd, buf, len, 0);
2114         if (ret < 0) {
2115             int errno;
2116             errno = WSAGetLastError();
2117             if (errno != WSAEWOULDBLOCK) {
2118                 return -1;
2119             }
2120         } else if (ret == 0) {
2121             break;
2122         } else {
2123             buf += ret;
2124             len -= ret;
2125         }
2126     }
2127     return len1 - len;
2128 }
2129
2130 #else
2131
2132 static int unix_write(int fd, const uint8_t *buf, int len1)
2133 {
2134     int ret, len;
2135
2136     len = len1;
2137     while (len > 0) {
2138         ret = write(fd, buf, len);
2139         if (ret < 0) {
2140             if (errno != EINTR && errno != EAGAIN)
2141                 return -1;
2142         } else if (ret == 0) {
2143             break;
2144         } else {
2145             buf += ret;
2146             len -= ret;
2147         }
2148     }
2149     return len1 - len;
2150 }
2151
2152 static inline int send_all(int fd, const uint8_t *buf, int len1)
2153 {
2154     return unix_write(fd, buf, len1);
2155 }
2156 #endif /* !_WIN32 */
2157
2158 #ifndef _WIN32
2159
2160 typedef struct {
2161     int fd_in, fd_out;
2162     int max_size;
2163 } FDCharDriver;
2164
2165 #define STDIO_MAX_CLIENTS 1
2166 static int stdio_nb_clients = 0;
2167
2168 static int fd_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
2169 {
2170     FDCharDriver *s = chr->opaque;
2171     return unix_write(s->fd_out, buf, len);
2172 }
2173
2174 static int fd_chr_read_poll(void *opaque)
2175 {
2176     CharDriverState *chr = opaque;
2177     FDCharDriver *s = chr->opaque;
2178
2179     s->max_size = qemu_chr_can_read(chr);
2180     return s->max_size;
2181 }
2182
2183 static void fd_chr_read(void *opaque)
2184 {
2185     CharDriverState *chr = opaque;
2186     FDCharDriver *s = chr->opaque;
2187     int size, len;
2188     uint8_t buf[1024];
2189
2190     len = sizeof(buf);
2191     if (len > s->max_size)
2192         len = s->max_size;
2193     if (len == 0)
2194         return;
2195     size = read(s->fd_in, buf, len);
2196     if (size == 0) {
2197         /* FD has been closed. Remove it from the active list.  */
2198         qemu_set_fd_handler2(s->fd_in, NULL, NULL, NULL, NULL);
2199         return;
2200     }
2201     if (size > 0) {
2202         qemu_chr_read(chr, buf, size);
2203     }
2204 }
2205
2206 static void fd_chr_update_read_handler(CharDriverState *chr)
2207 {
2208     FDCharDriver *s = chr->opaque;
2209
2210     if (s->fd_in >= 0) {
2211         if (nographic && s->fd_in == 0) {
2212         } else {
2213             qemu_set_fd_handler2(s->fd_in, fd_chr_read_poll,
2214                                  fd_chr_read, NULL, chr);
2215         }
2216     }
2217 }
2218
2219 static void fd_chr_close(struct CharDriverState *chr)
2220 {
2221     FDCharDriver *s = chr->opaque;
2222
2223     if (s->fd_in >= 0) {
2224         if (nographic && s->fd_in == 0) {
2225         } else {
2226             qemu_set_fd_handler2(s->fd_in, NULL, NULL, NULL, NULL);
2227         }
2228     }
2229
2230     qemu_free(s);
2231 }
2232
2233 /* open a character device to a unix fd */
2234 static CharDriverState *qemu_chr_open_fd(int fd_in, int fd_out)
2235 {
2236     CharDriverState *chr;
2237     FDCharDriver *s;
2238
2239     chr = qemu_mallocz(sizeof(CharDriverState));
2240     if (!chr)
2241         return NULL;
2242     s = qemu_mallocz(sizeof(FDCharDriver));
2243     if (!s) {
2244         free(chr);
2245         return NULL;
2246     }
2247     s->fd_in = fd_in;
2248     s->fd_out = fd_out;
2249     chr->opaque = s;
2250     chr->chr_write = fd_chr_write;
2251     chr->chr_update_read_handler = fd_chr_update_read_handler;
2252     chr->chr_close = fd_chr_close;
2253
2254     qemu_chr_reset(chr);
2255
2256     return chr;
2257 }
2258
2259 static CharDriverState *qemu_chr_open_file_out(const char *file_out)
2260 {
2261     int fd_out;
2262
2263     TFR(fd_out = open(file_out, O_WRONLY | O_TRUNC | O_CREAT | O_BINARY, 0666));
2264     if (fd_out < 0)
2265         return NULL;
2266     return qemu_chr_open_fd(-1, fd_out);
2267 }
2268
2269 static CharDriverState *qemu_chr_open_pipe(const char *filename)
2270 {
2271     int fd_in, fd_out;
2272     char filename_in[256], filename_out[256];
2273
2274     snprintf(filename_in, 256, "%s.in", filename);
2275     snprintf(filename_out, 256, "%s.out", filename);
2276     TFR(fd_in = open(filename_in, O_RDWR | O_BINARY));
2277     TFR(fd_out = open(filename_out, O_RDWR | O_BINARY));
2278     if (fd_in < 0 || fd_out < 0) {
2279         if (fd_in >= 0)
2280             close(fd_in);
2281         if (fd_out >= 0)
2282             close(fd_out);
2283         TFR(fd_in = fd_out = open(filename, O_RDWR | O_BINARY));
2284         if (fd_in < 0)
2285             return NULL;
2286     }
2287     return qemu_chr_open_fd(fd_in, fd_out);
2288 }
2289
2290
2291 /* for STDIO, we handle the case where several clients use it
2292    (nographic mode) */
2293
2294 #define TERM_FIFO_MAX_SIZE 1
2295
2296 static uint8_t term_fifo[TERM_FIFO_MAX_SIZE];
2297 static int term_fifo_size;
2298
2299 static int stdio_read_poll(void *opaque)
2300 {
2301     CharDriverState *chr = opaque;
2302
2303     /* try to flush the queue if needed */
2304     if (term_fifo_size != 0 && qemu_chr_can_read(chr) > 0) {
2305         qemu_chr_read(chr, term_fifo, 1);
2306         term_fifo_size = 0;
2307     }
2308     /* see if we can absorb more chars */
2309     if (term_fifo_size == 0)
2310         return 1;
2311     else
2312         return 0;
2313 }
2314
2315 static void stdio_read(void *opaque)
2316 {
2317     int size;
2318     uint8_t buf[1];
2319     CharDriverState *chr = opaque;
2320
2321     size = read(0, buf, 1);
2322     if (size == 0) {
2323         /* stdin has been closed. Remove it from the active list.  */
2324         qemu_set_fd_handler2(0, NULL, NULL, NULL, NULL);
2325         return;
2326     }
2327     if (size > 0) {
2328         if (qemu_chr_can_read(chr) > 0) {
2329             qemu_chr_read(chr, buf, 1);
2330         } else if (term_fifo_size == 0) {
2331             term_fifo[term_fifo_size++] = buf[0];
2332         }
2333     }
2334 }
2335
2336 /* init terminal so that we can grab keys */
2337 static struct termios oldtty;
2338 static int old_fd0_flags;
2339 static int term_atexit_done;
2340
2341 static void term_exit(void)
2342 {
2343     tcsetattr (0, TCSANOW, &oldtty);
2344     fcntl(0, F_SETFL, old_fd0_flags);
2345 }
2346
2347 static void term_init(void)
2348 {
2349     struct termios tty;
2350
2351     tcgetattr (0, &tty);
2352     oldtty = tty;
2353     old_fd0_flags = fcntl(0, F_GETFL);
2354
2355     tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
2356                           |INLCR|IGNCR|ICRNL|IXON);
2357     tty.c_oflag |= OPOST;
2358     tty.c_lflag &= ~(ECHO|ECHONL|ICANON|IEXTEN);
2359     /* if graphical mode, we allow Ctrl-C handling */
2360     if (nographic)
2361         tty.c_lflag &= ~ISIG;
2362     tty.c_cflag &= ~(CSIZE|PARENB);
2363     tty.c_cflag |= CS8;
2364     tty.c_cc[VMIN] = 1;
2365     tty.c_cc[VTIME] = 0;
2366
2367     tcsetattr (0, TCSANOW, &tty);
2368
2369     if (!term_atexit_done++)
2370         atexit(term_exit);
2371
2372     fcntl(0, F_SETFL, O_NONBLOCK);
2373 }
2374
2375 static void qemu_chr_close_stdio(struct CharDriverState *chr)
2376 {
2377     term_exit();
2378     stdio_nb_clients--;
2379     qemu_set_fd_handler2(0, NULL, NULL, NULL, NULL);
2380     fd_chr_close(chr);
2381 }
2382
2383 static CharDriverState *qemu_chr_open_stdio(void)
2384 {
2385     CharDriverState *chr;
2386
2387     if (stdio_nb_clients >= STDIO_MAX_CLIENTS)
2388         return NULL;
2389     chr = qemu_chr_open_fd(0, 1);
2390     chr->chr_close = qemu_chr_close_stdio;
2391     qemu_set_fd_handler2(0, stdio_read_poll, stdio_read, NULL, chr);
2392     stdio_nb_clients++;
2393     term_init();
2394
2395     return chr;
2396 }
2397
2398 #ifdef __sun__
2399 /* Once Solaris has openpty(), this is going to be removed. */
2400 int openpty(int *amaster, int *aslave, char *name,
2401             struct termios *termp, struct winsize *winp)
2402 {
2403         const char *slave;
2404         int mfd = -1, sfd = -1;
2405
2406         *amaster = *aslave = -1;
2407
2408         mfd = open("/dev/ptmx", O_RDWR | O_NOCTTY);
2409         if (mfd < 0)
2410                 goto err;
2411
2412         if (grantpt(mfd) == -1 || unlockpt(mfd) == -1)
2413                 goto err;
2414
2415         if ((slave = ptsname(mfd)) == NULL)
2416                 goto err;
2417
2418         if ((sfd = open(slave, O_RDONLY | O_NOCTTY)) == -1)
2419                 goto err;
2420
2421         if (ioctl(sfd, I_PUSH, "ptem") == -1 ||
2422             (termp != NULL && tcgetattr(sfd, termp) < 0))
2423                 goto err;
2424
2425         if (amaster)
2426                 *amaster = mfd;
2427         if (aslave)
2428                 *aslave = sfd;
2429         if (winp)
2430                 ioctl(sfd, TIOCSWINSZ, winp);
2431
2432         return 0;
2433
2434 err:
2435         if (sfd != -1)
2436                 close(sfd);
2437         close(mfd);
2438         return -1;
2439 }
2440
2441 void cfmakeraw (struct termios *termios_p)
2442 {
2443         termios_p->c_iflag &=
2444                 ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON);
2445         termios_p->c_oflag &= ~OPOST;
2446         termios_p->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
2447         termios_p->c_cflag &= ~(CSIZE|PARENB);
2448         termios_p->c_cflag |= CS8;
2449
2450         termios_p->c_cc[VMIN] = 0;
2451         termios_p->c_cc[VTIME] = 0;
2452 }
2453 #endif
2454
2455 #if defined(__linux__) || defined(__sun__) || defined(__FreeBSD__) \
2456     || defined(__NetBSD__) || defined(__OpenBSD__)
2457
2458 typedef struct {
2459     int fd;
2460     int connected;
2461     int polling;
2462     int read_bytes;
2463     QEMUTimer *timer;
2464 } PtyCharDriver;
2465
2466 static void pty_chr_update_read_handler(CharDriverState *chr);
2467 static void pty_chr_state(CharDriverState *chr, int connected);
2468
2469 static int pty_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
2470 {
2471     PtyCharDriver *s = chr->opaque;
2472
2473     if (!s->connected) {
2474         /* guest sends data, check for (re-)connect */
2475         pty_chr_update_read_handler(chr);
2476         return 0;
2477     }
2478     return unix_write(s->fd, buf, len);
2479 }
2480
2481 static int pty_chr_read_poll(void *opaque)
2482 {
2483     CharDriverState *chr = opaque;
2484     PtyCharDriver *s = chr->opaque;
2485
2486     s->read_bytes = qemu_chr_can_read(chr);
2487     return s->read_bytes;
2488 }
2489
2490 static void pty_chr_read(void *opaque)
2491 {
2492     CharDriverState *chr = opaque;
2493     PtyCharDriver *s = chr->opaque;
2494     int size, len;
2495     uint8_t buf[1024];
2496
2497     len = sizeof(buf);
2498     if (len > s->read_bytes)
2499         len = s->read_bytes;
2500     if (len == 0)
2501         return;
2502     size = read(s->fd, buf, len);
2503     if ((size == -1 && errno == EIO) ||
2504         (size == 0)) {
2505         pty_chr_state(chr, 0);
2506         return;
2507     }
2508     if (size > 0) {
2509         pty_chr_state(chr, 1);
2510         qemu_chr_read(chr, buf, size);
2511     }
2512 }
2513
2514 static void pty_chr_update_read_handler(CharDriverState *chr)
2515 {
2516     PtyCharDriver *s = chr->opaque;
2517
2518     qemu_set_fd_handler2(s->fd, pty_chr_read_poll,
2519                          pty_chr_read, NULL, chr);
2520     s->polling = 1;
2521     /*
2522      * Short timeout here: just need wait long enougth that qemu makes
2523      * it through the poll loop once.  When reconnected we want a
2524      * short timeout so we notice it almost instantly.  Otherwise
2525      * read() gives us -EIO instantly, making pty_chr_state() reset the
2526      * timeout to the normal (much longer) poll interval before the
2527      * timer triggers.
2528      */
2529     qemu_mod_timer(s->timer, qemu_get_clock(rt_clock) + 10);
2530 }
2531
2532 static void pty_chr_state(CharDriverState *chr, int connected)
2533 {
2534     PtyCharDriver *s = chr->opaque;
2535
2536     if (!connected) {
2537         qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
2538         s->connected = 0;
2539         s->polling = 0;
2540         /* (re-)connect poll interval for idle guests: once per second.
2541          * We check more frequently in case the guests sends data to
2542          * the virtual device linked to our pty. */
2543         qemu_mod_timer(s->timer, qemu_get_clock(rt_clock) + 1000);
2544     } else {
2545         if (!s->connected)
2546             qemu_chr_reset(chr);
2547         s->connected = 1;
2548     }
2549 }
2550
2551 static void pty_chr_timer(void *opaque)
2552 {
2553     struct CharDriverState *chr = opaque;
2554     PtyCharDriver *s = chr->opaque;
2555
2556     if (s->connected)
2557         return;
2558     if (s->polling) {
2559         /* If we arrive here without polling being cleared due
2560          * read returning -EIO, then we are (re-)connected */
2561         pty_chr_state(chr, 1);
2562         return;
2563     }
2564
2565     /* Next poll ... */
2566     pty_chr_update_read_handler(chr);
2567 }
2568
2569 static void pty_chr_close(struct CharDriverState *chr)
2570 {
2571     PtyCharDriver *s = chr->opaque;
2572
2573     qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
2574     close(s->fd);
2575     qemu_free(s);
2576 }
2577
2578 static CharDriverState *qemu_chr_open_pty(void)
2579 {
2580     CharDriverState *chr;
2581     PtyCharDriver *s;
2582     struct termios tty;
2583     int slave_fd;
2584 #if defined(__OpenBSD__)
2585     char pty_name[PATH_MAX];
2586 #define q_ptsname(x) pty_name
2587 #else
2588     char *pty_name = NULL;
2589 #define q_ptsname(x) ptsname(x)
2590 #endif
2591
2592     chr = qemu_mallocz(sizeof(CharDriverState));
2593     if (!chr)
2594         return NULL;
2595     s = qemu_mallocz(sizeof(PtyCharDriver));
2596     if (!s) {
2597         qemu_free(chr);
2598         return NULL;
2599     }
2600
2601     if (openpty(&s->fd, &slave_fd, pty_name, NULL, NULL) < 0) {
2602         return NULL;
2603     }
2604
2605     /* Set raw attributes on the pty. */
2606     cfmakeraw(&tty);
2607     tcsetattr(slave_fd, TCSAFLUSH, &tty);
2608     close(slave_fd);
2609
2610     fprintf(stderr, "char device redirected to %s\n", q_ptsname(s->fd));
2611
2612     chr->opaque = s;
2613     chr->chr_write = pty_chr_write;
2614     chr->chr_update_read_handler = pty_chr_update_read_handler;
2615     chr->chr_close = pty_chr_close;
2616
2617     s->timer = qemu_new_timer(rt_clock, pty_chr_timer, chr);
2618
2619     return chr;
2620 }
2621
2622 static void tty_serial_init(int fd, int speed,
2623                             int parity, int data_bits, int stop_bits)
2624 {
2625     struct termios tty;
2626     speed_t spd;
2627
2628 #if 0
2629     printf("tty_serial_init: speed=%d parity=%c data=%d stop=%d\n",
2630            speed, parity, data_bits, stop_bits);
2631 #endif
2632     tcgetattr (fd, &tty);
2633
2634 #define MARGIN 1.1
2635     if (speed <= 50 * MARGIN)
2636         spd = B50;
2637     else if (speed <= 75 * MARGIN)
2638         spd = B75;
2639     else if (speed <= 300 * MARGIN)
2640         spd = B300;
2641     else if (speed <= 600 * MARGIN)
2642         spd = B600;
2643     else if (speed <= 1200 * MARGIN)
2644         spd = B1200;
2645     else if (speed <= 2400 * MARGIN)
2646         spd = B2400;
2647     else if (speed <= 4800 * MARGIN)
2648         spd = B4800;
2649     else if (speed <= 9600 * MARGIN)
2650         spd = B9600;
2651     else if (speed <= 19200 * MARGIN)
2652         spd = B19200;
2653     else if (speed <= 38400 * MARGIN)
2654         spd = B38400;
2655     else if (speed <= 57600 * MARGIN)
2656         spd = B57600;
2657     else if (speed <= 115200 * MARGIN)
2658         spd = B115200;
2659     else
2660         spd = B115200;
2661
2662     cfsetispeed(&tty, spd);
2663     cfsetospeed(&tty, spd);
2664
2665     tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
2666                           |INLCR|IGNCR|ICRNL|IXON);
2667     tty.c_oflag |= OPOST;
2668     tty.c_lflag &= ~(ECHO|ECHONL|ICANON|IEXTEN|ISIG);
2669     tty.c_cflag &= ~(CSIZE|PARENB|PARODD|CRTSCTS|CSTOPB);
2670     switch(data_bits) {
2671     default:
2672     case 8:
2673         tty.c_cflag |= CS8;
2674         break;
2675     case 7:
2676         tty.c_cflag |= CS7;
2677         break;
2678     case 6:
2679         tty.c_cflag |= CS6;
2680         break;
2681     case 5:
2682         tty.c_cflag |= CS5;
2683         break;
2684     }
2685     switch(parity) {
2686     default:
2687     case 'N':
2688         break;
2689     case 'E':
2690         tty.c_cflag |= PARENB;
2691         break;
2692     case 'O':
2693         tty.c_cflag |= PARENB | PARODD;
2694         break;
2695     }
2696     if (stop_bits == 2)
2697         tty.c_cflag |= CSTOPB;
2698
2699     tcsetattr (fd, TCSANOW, &tty);
2700 }
2701
2702 static int tty_serial_ioctl(CharDriverState *chr, int cmd, void *arg)
2703 {
2704     FDCharDriver *s = chr->opaque;
2705
2706     switch(cmd) {
2707     case CHR_IOCTL_SERIAL_SET_PARAMS:
2708         {
2709             QEMUSerialSetParams *ssp = arg;
2710             tty_serial_init(s->fd_in, ssp->speed, ssp->parity,
2711                             ssp->data_bits, ssp->stop_bits);
2712         }
2713         break;
2714     case CHR_IOCTL_SERIAL_SET_BREAK:
2715         {
2716             int enable = *(int *)arg;
2717             if (enable)
2718                 tcsendbreak(s->fd_in, 1);
2719         }
2720         break;
2721     case CHR_IOCTL_SERIAL_GET_TIOCM:
2722         {
2723             int sarg = 0;
2724             int *targ = (int *)arg;
2725             ioctl(s->fd_in, TIOCMGET, &sarg);
2726             *targ = 0;
2727             if (sarg | TIOCM_CTS)
2728                 *targ |= CHR_TIOCM_CTS;
2729             if (sarg | TIOCM_CAR)
2730                 *targ |= CHR_TIOCM_CAR;
2731             if (sarg | TIOCM_DSR)
2732                 *targ |= CHR_TIOCM_DSR;
2733             if (sarg | TIOCM_RI)
2734                 *targ |= CHR_TIOCM_RI;
2735             if (sarg | TIOCM_DTR)
2736                 *targ |= CHR_TIOCM_DTR;
2737             if (sarg | TIOCM_RTS)
2738                 *targ |= CHR_TIOCM_RTS;
2739         }
2740         break;
2741     case CHR_IOCTL_SERIAL_SET_TIOCM:
2742         {
2743             int sarg = *(int *)arg;
2744             int targ = 0;
2745             if (sarg | CHR_TIOCM_DTR)
2746                 targ |= TIOCM_DTR;
2747             if (sarg | CHR_TIOCM_RTS)
2748                 targ |= TIOCM_RTS;
2749             ioctl(s->fd_in, TIOCMSET, &targ);
2750         }
2751         break;
2752     default:
2753         return -ENOTSUP;
2754     }
2755     return 0;
2756 }
2757
2758 static CharDriverState *qemu_chr_open_tty(const char *filename)
2759 {
2760     CharDriverState *chr;
2761     int fd;
2762
2763     TFR(fd = open(filename, O_RDWR | O_NONBLOCK));
2764     tty_serial_init(fd, 115200, 'N', 8, 1);
2765     chr = qemu_chr_open_fd(fd, fd);
2766     if (!chr) {
2767         close(fd);
2768         return NULL;
2769     }
2770     chr->chr_ioctl = tty_serial_ioctl;
2771     qemu_chr_reset(chr);
2772     return chr;
2773 }
2774 #else  /* ! __linux__ && ! __sun__ */
2775 static CharDriverState *qemu_chr_open_pty(void)
2776 {
2777     return NULL;
2778 }
2779 #endif /* __linux__ || __sun__ */
2780
2781 #if defined(__linux__)
2782 typedef struct {
2783     int fd;
2784     int mode;
2785 } ParallelCharDriver;
2786
2787 static int pp_hw_mode(ParallelCharDriver *s, uint16_t mode)
2788 {
2789     if (s->mode != mode) {
2790         int m = mode;
2791         if (ioctl(s->fd, PPSETMODE, &m) < 0)
2792             return 0;
2793         s->mode = mode;
2794     }
2795     return 1;
2796 }
2797
2798 static int pp_ioctl(CharDriverState *chr, int cmd, void *arg)
2799 {
2800     ParallelCharDriver *drv = chr->opaque;
2801     int fd = drv->fd;
2802     uint8_t b;
2803
2804     switch(cmd) {
2805     case CHR_IOCTL_PP_READ_DATA:
2806         if (ioctl(fd, PPRDATA, &b) < 0)
2807             return -ENOTSUP;
2808         *(uint8_t *)arg = b;
2809         break;
2810     case CHR_IOCTL_PP_WRITE_DATA:
2811         b = *(uint8_t *)arg;
2812         if (ioctl(fd, PPWDATA, &b) < 0)
2813             return -ENOTSUP;
2814         break;
2815     case CHR_IOCTL_PP_READ_CONTROL:
2816         if (ioctl(fd, PPRCONTROL, &b) < 0)
2817             return -ENOTSUP;
2818         /* Linux gives only the lowest bits, and no way to know data
2819            direction! For better compatibility set the fixed upper
2820            bits. */
2821         *(uint8_t *)arg = b | 0xc0;
2822         break;
2823     case CHR_IOCTL_PP_WRITE_CONTROL:
2824         b = *(uint8_t *)arg;
2825         if (ioctl(fd, PPWCONTROL, &b) < 0)
2826             return -ENOTSUP;
2827         break;
2828     case CHR_IOCTL_PP_READ_STATUS:
2829         if (ioctl(fd, PPRSTATUS, &b) < 0)
2830             return -ENOTSUP;
2831         *(uint8_t *)arg = b;
2832         break;
2833     case CHR_IOCTL_PP_DATA_DIR:
2834         if (ioctl(fd, PPDATADIR, (int *)arg) < 0)
2835             return -ENOTSUP;
2836         break;
2837     case CHR_IOCTL_PP_EPP_READ_ADDR:
2838         if (pp_hw_mode(drv, IEEE1284_MODE_EPP|IEEE1284_ADDR)) {
2839             struct ParallelIOArg *parg = arg;
2840             int n = read(fd, parg->buffer, parg->count);
2841             if (n != parg->count) {
2842                 return -EIO;
2843             }
2844         }
2845         break;
2846     case CHR_IOCTL_PP_EPP_READ:
2847         if (pp_hw_mode(drv, IEEE1284_MODE_EPP)) {
2848             struct ParallelIOArg *parg = arg;
2849             int n = read(fd, parg->buffer, parg->count);
2850             if (n != parg->count) {
2851                 return -EIO;
2852             }
2853         }
2854         break;
2855     case CHR_IOCTL_PP_EPP_WRITE_ADDR:
2856         if (pp_hw_mode(drv, IEEE1284_MODE_EPP|IEEE1284_ADDR)) {
2857             struct ParallelIOArg *parg = arg;
2858             int n = write(fd, parg->buffer, parg->count);
2859             if (n != parg->count) {
2860                 return -EIO;
2861             }
2862         }
2863         break;
2864     case CHR_IOCTL_PP_EPP_WRITE:
2865         if (pp_hw_mode(drv, IEEE1284_MODE_EPP)) {
2866             struct ParallelIOArg *parg = arg;
2867             int n = write(fd, parg->buffer, parg->count);
2868             if (n != parg->count) {
2869                 return -EIO;
2870             }
2871         }
2872         break;
2873     default:
2874         return -ENOTSUP;
2875     }
2876     return 0;
2877 }
2878
2879 static void pp_close(CharDriverState *chr)
2880 {
2881     ParallelCharDriver *drv = chr->opaque;
2882     int fd = drv->fd;
2883
2884     pp_hw_mode(drv, IEEE1284_MODE_COMPAT);
2885     ioctl(fd, PPRELEASE);
2886     close(fd);
2887     qemu_free(drv);
2888 }
2889
2890 static CharDriverState *qemu_chr_open_pp(const char *filename)
2891 {
2892     CharDriverState *chr;
2893     ParallelCharDriver *drv;
2894     int fd;
2895
2896     TFR(fd = open(filename, O_RDWR));
2897     if (fd < 0)
2898         return NULL;
2899
2900     if (ioctl(fd, PPCLAIM) < 0) {
2901         close(fd);
2902         return NULL;
2903     }
2904
2905     drv = qemu_mallocz(sizeof(ParallelCharDriver));
2906     if (!drv) {
2907         close(fd);
2908         return NULL;
2909     }
2910     drv->fd = fd;
2911     drv->mode = IEEE1284_MODE_COMPAT;
2912
2913     chr = qemu_mallocz(sizeof(CharDriverState));
2914     if (!chr) {
2915         qemu_free(drv);
2916         close(fd);
2917         return NULL;
2918     }
2919     chr->chr_write = null_chr_write;
2920     chr->chr_ioctl = pp_ioctl;
2921     chr->chr_close = pp_close;
2922     chr->opaque = drv;
2923
2924     qemu_chr_reset(chr);
2925
2926     return chr;
2927 }
2928 #endif /* __linux__ */
2929
2930 #else /* _WIN32 */
2931
2932 typedef struct {
2933     int max_size;
2934     HANDLE hcom, hrecv, hsend;
2935     OVERLAPPED orecv, osend;
2936     BOOL fpipe;
2937     DWORD len;
2938 } WinCharState;
2939
2940 #define NSENDBUF 2048
2941 #define NRECVBUF 2048
2942 #define MAXCONNECT 1
2943 #define NTIMEOUT 5000
2944
2945 static int win_chr_poll(void *opaque);
2946 static int win_chr_pipe_poll(void *opaque);
2947
2948 static void win_chr_close(CharDriverState *chr)
2949 {
2950     WinCharState *s = chr->opaque;
2951
2952     if (s->hsend) {
2953         CloseHandle(s->hsend);
2954         s->hsend = NULL;
2955     }
2956     if (s->hrecv) {
2957         CloseHandle(s->hrecv);
2958         s->hrecv = NULL;
2959     }
2960     if (s->hcom) {
2961         CloseHandle(s->hcom);
2962         s->hcom = NULL;
2963     }
2964     if (s->fpipe)
2965         qemu_del_polling_cb(win_chr_pipe_poll, chr);
2966     else
2967         qemu_del_polling_cb(win_chr_poll, chr);
2968 }
2969
2970 static int win_chr_init(CharDriverState *chr, const char *filename)
2971 {
2972     WinCharState *s = chr->opaque;
2973     COMMCONFIG comcfg;
2974     COMMTIMEOUTS cto = { 0, 0, 0, 0, 0};
2975     COMSTAT comstat;
2976     DWORD size;
2977     DWORD err;
2978
2979     s->hsend = CreateEvent(NULL, TRUE, FALSE, NULL);
2980     if (!s->hsend) {
2981         fprintf(stderr, "Failed CreateEvent\n");
2982         goto fail;
2983     }
2984     s->hrecv = CreateEvent(NULL, TRUE, FALSE, NULL);
2985     if (!s->hrecv) {
2986         fprintf(stderr, "Failed CreateEvent\n");
2987         goto fail;
2988     }
2989
2990     s->hcom = CreateFile(filename, GENERIC_READ|GENERIC_WRITE, 0, NULL,
2991                       OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
2992     if (s->hcom == INVALID_HANDLE_VALUE) {
2993         fprintf(stderr, "Failed CreateFile (%lu)\n", GetLastError());
2994         s->hcom = NULL;
2995         goto fail;
2996     }
2997
2998     if (!SetupComm(s->hcom, NRECVBUF, NSENDBUF)) {
2999         fprintf(stderr, "Failed SetupComm\n");
3000         goto fail;
3001     }
3002
3003     ZeroMemory(&comcfg, sizeof(COMMCONFIG));
3004     size = sizeof(COMMCONFIG);
3005     GetDefaultCommConfig(filename, &comcfg, &size);
3006     comcfg.dcb.DCBlength = sizeof(DCB);
3007     CommConfigDialog(filename, NULL, &comcfg);
3008
3009     if (!SetCommState(s->hcom, &comcfg.dcb)) {
3010         fprintf(stderr, "Failed SetCommState\n");
3011         goto fail;
3012     }
3013
3014     if (!SetCommMask(s->hcom, EV_ERR)) {
3015         fprintf(stderr, "Failed SetCommMask\n");
3016         goto fail;
3017     }
3018
3019     cto.ReadIntervalTimeout = MAXDWORD;
3020     if (!SetCommTimeouts(s->hcom, &cto)) {
3021         fprintf(stderr, "Failed SetCommTimeouts\n");
3022         goto fail;
3023     }
3024
3025     if (!ClearCommError(s->hcom, &err, &comstat)) {
3026         fprintf(stderr, "Failed ClearCommError\n");
3027         goto fail;
3028     }
3029     qemu_add_polling_cb(win_chr_poll, chr);
3030     return 0;
3031
3032  fail:
3033     win_chr_close(chr);
3034     return -1;
3035 }
3036
3037 static int win_chr_write(CharDriverState *chr, const uint8_t *buf, int len1)
3038 {
3039     WinCharState *s = chr->opaque;
3040     DWORD len, ret, size, err;
3041
3042     len = len1;
3043     ZeroMemory(&s->osend, sizeof(s->osend));
3044     s->osend.hEvent = s->hsend;
3045     while (len > 0) {
3046         if (s->hsend)
3047             ret = WriteFile(s->hcom, buf, len, &size, &s->osend);
3048         else
3049             ret = WriteFile(s->hcom, buf, len, &size, NULL);
3050         if (!ret) {
3051             err = GetLastError();
3052             if (err == ERROR_IO_PENDING) {
3053                 ret = GetOverlappedResult(s->hcom, &s->osend, &size, TRUE);
3054                 if (ret) {
3055                     buf += size;
3056                     len -= size;
3057                 } else {
3058                     break;
3059                 }
3060             } else {
3061                 break;
3062             }
3063         } else {
3064             buf += size;
3065             len -= size;
3066         }
3067     }
3068     return len1 - len;
3069 }
3070
3071 static int win_chr_read_poll(CharDriverState *chr)
3072 {
3073     WinCharState *s = chr->opaque;
3074
3075     s->max_size = qemu_chr_can_read(chr);
3076     return s->max_size;
3077 }
3078
3079 static void win_chr_readfile(CharDriverState *chr)
3080 {
3081     WinCharState *s = chr->opaque;
3082     int ret, err;
3083     uint8_t buf[1024];
3084     DWORD size;
3085
3086     ZeroMemory(&s->orecv, sizeof(s->orecv));
3087     s->orecv.hEvent = s->hrecv;
3088     ret = ReadFile(s->hcom, buf, s->len, &size, &s->orecv);
3089     if (!ret) {
3090         err = GetLastError();
3091         if (err == ERROR_IO_PENDING) {
3092             ret = GetOverlappedResult(s->hcom, &s->orecv, &size, TRUE);
3093         }
3094     }
3095
3096     if (size > 0) {
3097         qemu_chr_read(chr, buf, size);
3098     }
3099 }
3100
3101 static void win_chr_read(CharDriverState *chr)
3102 {
3103     WinCharState *s = chr->opaque;
3104
3105     if (s->len > s->max_size)
3106         s->len = s->max_size;
3107     if (s->len == 0)
3108         return;
3109
3110     win_chr_readfile(chr);
3111 }
3112
3113 static int win_chr_poll(void *opaque)
3114 {
3115     CharDriverState *chr = opaque;
3116     WinCharState *s = chr->opaque;
3117     COMSTAT status;
3118     DWORD comerr;
3119
3120     ClearCommError(s->hcom, &comerr, &status);
3121     if (status.cbInQue > 0) {
3122         s->len = status.cbInQue;
3123         win_chr_read_poll(chr);
3124         win_chr_read(chr);
3125         return 1;
3126     }
3127     return 0;
3128 }
3129
3130 static CharDriverState *qemu_chr_open_win(const char *filename)
3131 {
3132     CharDriverState *chr;
3133     WinCharState *s;
3134
3135     chr = qemu_mallocz(sizeof(CharDriverState));
3136     if (!chr)
3137         return NULL;
3138     s = qemu_mallocz(sizeof(WinCharState));
3139     if (!s) {
3140         free(chr);
3141         return NULL;
3142     }
3143     chr->opaque = s;
3144     chr->chr_write = win_chr_write;
3145     chr->chr_close = win_chr_close;
3146
3147     if (win_chr_init(chr, filename) < 0) {
3148         free(s);
3149         free(chr);
3150         return NULL;
3151     }
3152     qemu_chr_reset(chr);
3153     return chr;
3154 }
3155
3156 static int win_chr_pipe_poll(void *opaque)
3157 {
3158     CharDriverState *chr = opaque;
3159     WinCharState *s = chr->opaque;
3160     DWORD size;
3161
3162     PeekNamedPipe(s->hcom, NULL, 0, NULL, &size, NULL);
3163     if (size > 0) {
3164         s->len = size;
3165         win_chr_read_poll(chr);
3166         win_chr_read(chr);
3167         return 1;
3168     }
3169     return 0;
3170 }
3171
3172 static int win_chr_pipe_init(CharDriverState *chr, const char *filename)
3173 {
3174     WinCharState *s = chr->opaque;
3175     OVERLAPPED ov;
3176     int ret;
3177     DWORD size;
3178     char openname[256];
3179
3180     s->fpipe = TRUE;
3181
3182     s->hsend = CreateEvent(NULL, TRUE, FALSE, NULL);
3183     if (!s->hsend) {
3184         fprintf(stderr, "Failed CreateEvent\n");
3185         goto fail;
3186     }
3187     s->hrecv = CreateEvent(NULL, TRUE, FALSE, NULL);
3188     if (!s->hrecv) {
3189         fprintf(stderr, "Failed CreateEvent\n");
3190         goto fail;
3191     }
3192
3193     snprintf(openname, sizeof(openname), "\\\\.\\pipe\\%s", filename);
3194     s->hcom = CreateNamedPipe(openname, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
3195                               PIPE_TYPE_BYTE | PIPE_READMODE_BYTE |
3196                               PIPE_WAIT,
3197                               MAXCONNECT, NSENDBUF, NRECVBUF, NTIMEOUT, NULL);
3198     if (s->hcom == INVALID_HANDLE_VALUE) {
3199         fprintf(stderr, "Failed CreateNamedPipe (%lu)\n", GetLastError());
3200         s->hcom = NULL;
3201         goto fail;
3202     }
3203
3204     ZeroMemory(&ov, sizeof(ov));
3205     ov.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
3206     ret = ConnectNamedPipe(s->hcom, &ov);
3207     if (ret) {
3208         fprintf(stderr, "Failed ConnectNamedPipe\n");
3209         goto fail;
3210     }
3211
3212     ret = GetOverlappedResult(s->hcom, &ov, &size, TRUE);
3213     if (!ret) {
3214         fprintf(stderr, "Failed GetOverlappedResult\n");
3215         if (ov.hEvent) {
3216             CloseHandle(ov.hEvent);
3217             ov.hEvent = NULL;
3218         }
3219         goto fail;
3220     }
3221
3222     if (ov.hEvent) {
3223         CloseHandle(ov.hEvent);
3224         ov.hEvent = NULL;
3225     }
3226     qemu_add_polling_cb(win_chr_pipe_poll, chr);
3227     return 0;
3228
3229  fail:
3230     win_chr_close(chr);
3231     return -1;
3232 }
3233
3234
3235 static CharDriverState *qemu_chr_open_win_pipe(const char *filename)
3236 {
3237     CharDriverState *chr;
3238     WinCharState *s;
3239
3240     chr = qemu_mallocz(sizeof(CharDriverState));
3241     if (!chr)
3242         return NULL;
3243     s = qemu_mallocz(sizeof(WinCharState));
3244     if (!s) {
3245         free(chr);
3246         return NULL;
3247     }
3248     chr->opaque = s;
3249     chr->chr_write = win_chr_write;
3250     chr->chr_close = win_chr_close;
3251
3252     if (win_chr_pipe_init(chr, filename) < 0) {
3253         free(s);
3254         free(chr);
3255         return NULL;
3256     }
3257     qemu_chr_reset(chr);
3258     return chr;
3259 }
3260
3261 static CharDriverState *qemu_chr_open_win_file(HANDLE fd_out)
3262 {
3263     CharDriverState *chr;
3264     WinCharState *s;
3265
3266     chr = qemu_mallocz(sizeof(CharDriverState));
3267     if (!chr)
3268         return NULL;
3269     s = qemu_mallocz(sizeof(WinCharState));
3270     if (!s) {
3271         free(chr);
3272         return NULL;
3273     }
3274     s->hcom = fd_out;
3275     chr->opaque = s;
3276     chr->chr_write = win_chr_write;
3277     qemu_chr_reset(chr);
3278     return chr;
3279 }
3280
3281 static CharDriverState *qemu_chr_open_win_con(const char *filename)
3282 {
3283     return qemu_chr_open_win_file(GetStdHandle(STD_OUTPUT_HANDLE));
3284 }
3285
3286 static CharDriverState *qemu_chr_open_win_file_out(const char *file_out)
3287 {
3288     HANDLE fd_out;
3289
3290     fd_out = CreateFile(file_out, GENERIC_WRITE, FILE_SHARE_READ, NULL,
3291                         OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
3292     if (fd_out == INVALID_HANDLE_VALUE)
3293         return NULL;
3294
3295     return qemu_chr_open_win_file(fd_out);
3296 }
3297 #endif /* !_WIN32 */
3298
3299 /***********************************************************/
3300 /* UDP Net console */
3301
3302 typedef struct {
3303     int fd;
3304     struct sockaddr_in daddr;
3305     uint8_t buf[1024];
3306     int bufcnt;
3307     int bufptr;
3308     int max_size;
3309 } NetCharDriver;
3310
3311 static int udp_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
3312 {
3313     NetCharDriver *s = chr->opaque;
3314
3315     return sendto(s->fd, buf, len, 0,
3316                   (struct sockaddr *)&s->daddr, sizeof(struct sockaddr_in));
3317 }
3318
3319 static int udp_chr_read_poll(void *opaque)
3320 {
3321     CharDriverState *chr = opaque;
3322     NetCharDriver *s = chr->opaque;
3323
3324     s->max_size = qemu_chr_can_read(chr);
3325
3326     /* If there were any stray characters in the queue process them
3327      * first
3328      */
3329     while (s->max_size > 0 && s->bufptr < s->bufcnt) {
3330         qemu_chr_read(chr, &s->buf[s->bufptr], 1);
3331         s->bufptr++;
3332         s->max_size = qemu_chr_can_read(chr);
3333     }
3334     return s->max_size;
3335 }
3336
3337 static void udp_chr_read(void *opaque)
3338 {
3339     CharDriverState *chr = opaque;
3340     NetCharDriver *s = chr->opaque;
3341
3342     if (s->max_size == 0)
3343         return;
3344     s->bufcnt = recv(s->fd, s->buf, sizeof(s->buf), 0);
3345     s->bufptr = s->bufcnt;
3346     if (s->bufcnt <= 0)
3347         return;
3348
3349     s->bufptr = 0;
3350     while (s->max_size > 0 && s->bufptr < s->bufcnt) {
3351         qemu_chr_read(chr, &s->buf[s->bufptr], 1);
3352         s->bufptr++;
3353         s->max_size = qemu_chr_can_read(chr);
3354     }
3355 }
3356
3357 static void udp_chr_update_read_handler(CharDriverState *chr)
3358 {
3359     NetCharDriver *s = chr->opaque;
3360
3361     if (s->fd >= 0) {
3362         qemu_set_fd_handler2(s->fd, udp_chr_read_poll,
3363                              udp_chr_read, NULL, chr);
3364     }
3365 }
3366
3367 int parse_host_port(struct sockaddr_in *saddr, const char *str);
3368 #ifndef _WIN32
3369 static int parse_unix_path(struct sockaddr_un *uaddr, const char *str);
3370 #endif
3371 int parse_host_src_port(struct sockaddr_in *haddr,
3372                         struct sockaddr_in *saddr,
3373                         const char *str);
3374
3375 static CharDriverState *qemu_chr_open_udp(const char *def)
3376 {
3377     CharDriverState *chr = NULL;
3378     NetCharDriver *s = NULL;
3379     int fd = -1;
3380     struct sockaddr_in saddr;
3381
3382     chr = qemu_mallocz(sizeof(CharDriverState));
3383     if (!chr)
3384         goto return_err;
3385     s = qemu_mallocz(sizeof(NetCharDriver));
3386     if (!s)
3387         goto return_err;
3388
3389     fd = socket(PF_INET, SOCK_DGRAM, 0);
3390     if (fd < 0) {
3391         perror("socket(PF_INET, SOCK_DGRAM)");
3392         goto return_err;
3393     }
3394
3395     if (parse_host_src_port(&s->daddr, &saddr, def) < 0) {
3396         printf("Could not parse: %s\n", def);
3397         goto return_err;
3398     }
3399
3400     if (bind(fd, (struct sockaddr *)&saddr, sizeof(saddr)) < 0)
3401     {
3402         perror("bind");
3403         goto return_err;
3404     }
3405
3406     s->fd = fd;
3407     s->bufcnt = 0;
3408     s->bufptr = 0;
3409     chr->opaque = s;
3410     chr->chr_write = udp_chr_write;
3411     chr->chr_update_read_handler = udp_chr_update_read_handler;
3412     return chr;
3413
3414 return_err:
3415     if (chr)
3416         free(chr);
3417     if (s)
3418         free(s);
3419     if (fd >= 0)
3420         closesocket(fd);
3421     return NULL;
3422 }
3423
3424 /***********************************************************/
3425 /* TCP Net console */
3426
3427 typedef struct {
3428     int fd, listen_fd;
3429     int connected;
3430     int max_size;
3431     int do_telnetopt;
3432     int do_nodelay;
3433     int is_unix;
3434 } TCPCharDriver;
3435
3436 static void tcp_chr_accept(void *opaque);
3437
3438 static int tcp_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
3439 {
3440     TCPCharDriver *s = chr->opaque;
3441     if (s->connected) {
3442         return send_all(s->fd, buf, len);
3443     } else {
3444         /* XXX: indicate an error ? */
3445         return len;
3446     }
3447 }
3448
3449 static int tcp_chr_read_poll(void *opaque)
3450 {
3451     CharDriverState *chr = opaque;
3452     TCPCharDriver *s = chr->opaque;
3453     if (!s->connected)
3454         return 0;
3455     s->max_size = qemu_chr_can_read(chr);
3456     return s->max_size;
3457 }
3458
3459 #define IAC 255
3460 #define IAC_BREAK 243
3461 static void tcp_chr_process_IAC_bytes(CharDriverState *chr,
3462                                       TCPCharDriver *s,
3463                                       uint8_t *buf, int *size)
3464 {
3465     /* Handle any telnet client's basic IAC options to satisfy char by
3466      * char mode with no echo.  All IAC options will be removed from
3467      * the buf and the do_telnetopt variable will be used to track the
3468      * state of the width of the IAC information.
3469      *
3470      * IAC commands come in sets of 3 bytes with the exception of the
3471      * "IAC BREAK" command and the double IAC.
3472      */
3473
3474     int i;
3475     int j = 0;
3476
3477     for (i = 0; i < *size; i++) {
3478         if (s->do_telnetopt > 1) {
3479             if ((unsigned char)buf[i] == IAC && s->do_telnetopt == 2) {
3480                 /* Double IAC means send an IAC */
3481                 if (j != i)
3482                     buf[j] = buf[i];
3483                 j++;
3484                 s->do_telnetopt = 1;
3485             } else {
3486                 if ((unsigned char)buf[i] == IAC_BREAK && s->do_telnetopt == 2) {
3487                     /* Handle IAC break commands by sending a serial break */
3488                     qemu_chr_event(chr, CHR_EVENT_BREAK);
3489                     s->do_telnetopt++;
3490                 }
3491                 s->do_telnetopt++;
3492             }
3493             if (s->do_telnetopt >= 4) {
3494                 s->do_telnetopt = 1;
3495             }
3496         } else {
3497             if ((unsigned char)buf[i] == IAC) {
3498                 s->do_telnetopt = 2;
3499             } else {
3500                 if (j != i)
3501                     buf[j] = buf[i];
3502                 j++;
3503             }
3504         }
3505     }
3506     *size = j;
3507 }
3508
3509 static void tcp_chr_read(void *opaque)
3510 {
3511     CharDriverState *chr = opaque;
3512     TCPCharDriver *s = chr->opaque;
3513     uint8_t buf[1024];
3514     int len, size;
3515
3516     if (!s->connected || s->max_size <= 0)
3517         return;
3518     len = sizeof(buf);
3519     if (len > s->max_size)
3520         len = s->max_size;
3521     size = recv(s->fd, buf, len, 0);
3522     if (size == 0) {
3523         /* connection closed */
3524         s->connected = 0;
3525         if (s->listen_fd >= 0) {
3526             qemu_set_fd_handler(s->listen_fd, tcp_chr_accept, NULL, chr);
3527         }
3528         qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
3529         closesocket(s->fd);
3530         s->fd = -1;
3531     } else if (size > 0) {
3532         if (s->do_telnetopt)
3533             tcp_chr_process_IAC_bytes(chr, s, buf, &size);
3534         if (size > 0)
3535             qemu_chr_read(chr, buf, size);
3536     }
3537 }
3538
3539 static void tcp_chr_connect(void *opaque)
3540 {
3541     CharDriverState *chr = opaque;
3542     TCPCharDriver *s = chr->opaque;
3543
3544     s->connected = 1;
3545     qemu_set_fd_handler2(s->fd, tcp_chr_read_poll,
3546                          tcp_chr_read, NULL, chr);
3547     qemu_chr_reset(chr);
3548 }
3549
3550 #define IACSET(x,a,b,c) x[0] = a; x[1] = b; x[2] = c;
3551 static void tcp_chr_telnet_init(int fd)
3552 {
3553     char buf[3];
3554     /* Send the telnet negotion to put telnet in binary, no echo, single char mode */
3555     IACSET(buf, 0xff, 0xfb, 0x01);  /* IAC WILL ECHO */
3556     send(fd, (char *)buf, 3, 0);
3557     IACSET(buf, 0xff, 0xfb, 0x03);  /* IAC WILL Suppress go ahead */
3558     send(fd, (char *)buf, 3, 0);
3559     IACSET(buf, 0xff, 0xfb, 0x00);  /* IAC WILL Binary */
3560     send(fd, (char *)buf, 3, 0);
3561     IACSET(buf, 0xff, 0xfd, 0x00);  /* IAC DO Binary */
3562     send(fd, (char *)buf, 3, 0);
3563 }
3564
3565 static void socket_set_nodelay(int fd)
3566 {
3567     int val = 1;
3568     setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char *)&val, sizeof(val));
3569 }
3570
3571 static void tcp_chr_accept(void *opaque)
3572 {
3573     CharDriverState *chr = opaque;
3574     TCPCharDriver *s = chr->opaque;
3575     struct sockaddr_in saddr;
3576 #ifndef _WIN32
3577     struct sockaddr_un uaddr;
3578 #endif
3579     struct sockaddr *addr;
3580     socklen_t len;
3581     int fd;
3582
3583     for(;;) {
3584 #ifndef _WIN32
3585         if (s->is_unix) {
3586             len = sizeof(uaddr);
3587             addr = (struct sockaddr *)&uaddr;
3588         } else
3589 #endif
3590         {
3591             len = sizeof(saddr);
3592             addr = (struct sockaddr *)&saddr;
3593         }
3594         fd = accept(s->listen_fd, addr, &len);
3595         if (fd < 0 && errno != EINTR) {
3596             return;
3597         } else if (fd >= 0) {
3598             if (s->do_telnetopt)
3599                 tcp_chr_telnet_init(fd);
3600             break;
3601         }
3602     }
3603     socket_set_nonblock(fd);
3604     if (s->do_nodelay)
3605         socket_set_nodelay(fd);
3606     s->fd = fd;
3607     qemu_set_fd_handler(s->listen_fd, NULL, NULL, NULL);
3608     tcp_chr_connect(chr);
3609 }
3610
3611 static void tcp_chr_close(CharDriverState *chr)
3612 {
3613     TCPCharDriver *s = chr->opaque;
3614     if (s->fd >= 0)
3615         closesocket(s->fd);
3616     if (s->listen_fd >= 0)
3617         closesocket(s->listen_fd);
3618     qemu_free(s);
3619 }
3620
3621 static CharDriverState *qemu_chr_open_tcp(const char *host_str,
3622                                           int is_telnet,
3623                                           int is_unix)
3624 {
3625     CharDriverState *chr = NULL;
3626     TCPCharDriver *s = NULL;
3627     int fd = -1, ret, err, val;
3628     int is_listen = 0;
3629     int is_waitconnect = 1;
3630     int do_nodelay = 0;
3631     const char *ptr;
3632     struct sockaddr_in saddr;
3633 #ifndef _WIN32
3634     struct sockaddr_un uaddr;
3635 #endif
3636     struct sockaddr *addr;
3637     socklen_t addrlen;
3638
3639 #ifndef _WIN32
3640     if (is_unix) {
3641         addr = (struct sockaddr *)&uaddr;
3642         addrlen = sizeof(uaddr);
3643         if (parse_unix_path(&uaddr, host_str) < 0)
3644             goto fail;
3645     } else
3646 #endif
3647     {
3648         addr = (struct sockaddr *)&saddr;
3649         addrlen = sizeof(saddr);
3650         if (parse_host_port(&saddr, host_str) < 0)
3651             goto fail;
3652     }
3653
3654     ptr = host_str;
3655     while((ptr = strchr(ptr,','))) {
3656         ptr++;
3657         if (!strncmp(ptr,"server",6)) {
3658             is_listen = 1;
3659         } else if (!strncmp(ptr,"nowait",6)) {
3660             is_waitconnect = 0;
3661         } else if (!strncmp(ptr,"nodelay",6)) {
3662             do_nodelay = 1;
3663         } else {
3664             printf("Unknown option: %s\n", ptr);
3665             goto fail;
3666         }
3667     }
3668     if (!is_listen)
3669         is_waitconnect = 0;
3670
3671     chr = qemu_mallocz(sizeof(CharDriverState));
3672     if (!chr)
3673         goto fail;
3674     s = qemu_mallocz(sizeof(TCPCharDriver));
3675     if (!s)
3676         goto fail;
3677
3678 #ifndef _WIN32
3679     if (is_unix)
3680         fd = socket(PF_UNIX, SOCK_STREAM, 0);
3681     else
3682 #endif
3683         fd = socket(PF_INET, SOCK_STREAM, 0);
3684
3685     if (fd < 0)
3686         goto fail;
3687
3688     if (!is_waitconnect)
3689         socket_set_nonblock(fd);
3690
3691     s->connected = 0;
3692     s->fd = -1;
3693     s->listen_fd = -1;
3694     s->is_unix = is_unix;
3695     s->do_nodelay = do_nodelay && !is_unix;
3696
3697     chr->opaque = s;
3698     chr->chr_write = tcp_chr_write;
3699     chr->chr_close = tcp_chr_close;
3700
3701     if (is_listen) {
3702         /* allow fast reuse */
3703 #ifndef _WIN32
3704         if (is_unix) {
3705             char path[109];
3706             pstrcpy(path, sizeof(path), uaddr.sun_path);
3707             unlink(path);
3708         } else
3709 #endif
3710         {
3711             val = 1;
3712             setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (const char *)&val, sizeof(val));
3713         }
3714
3715         ret = bind(fd, addr, addrlen);
3716         if (ret < 0)
3717             goto fail;
3718
3719         ret = listen(fd, 0);
3720         if (ret < 0)
3721             goto fail;
3722
3723         s->listen_fd = fd;
3724         qemu_set_fd_handler(s->listen_fd, tcp_chr_accept, NULL, chr);
3725         if (is_telnet)
3726             s->do_telnetopt = 1;
3727     } else {
3728         for(;;) {
3729             ret = connect(fd, addr, addrlen);
3730             if (ret < 0) {
3731                 err = socket_error();
3732                 if (err == EINTR || err == EWOULDBLOCK) {
3733                 } else if (err == EINPROGRESS) {
3734                     break;
3735 #ifdef _WIN32
3736                 } else if (err == WSAEALREADY) {
3737                     break;
3738 #endif
3739                 } else {
3740                     goto fail;
3741                 }
3742             } else {
3743                 s->connected = 1;
3744                 break;
3745             }
3746         }
3747         s->fd = fd;
3748         socket_set_nodelay(fd);
3749         if (s->connected)
3750             tcp_chr_connect(chr);
3751         else
3752             qemu_set_fd_handler(s->fd, NULL, tcp_chr_connect, chr);
3753     }
3754
3755     if (is_listen && is_waitconnect) {
3756         printf("QEMU waiting for connection on: %s\n", host_str);
3757         tcp_chr_accept(chr);
3758         socket_set_nonblock(s->listen_fd);
3759     }
3760
3761     return chr;
3762  fail:
3763     if (fd >= 0)
3764         closesocket(fd);
3765     qemu_free(s);
3766     qemu_free(chr);
3767     return NULL;
3768 }
3769
3770 CharDriverState *qemu_chr_open(const char *filename)
3771 {
3772     const char *p;
3773
3774     if (!strcmp(filename, "vc")) {
3775         return text_console_init(&display_state, 0);
3776     } else if (strstart(filename, "vc:", &p)) {
3777         return text_console_init(&display_state, p);
3778     } else if (!strcmp(filename, "null")) {
3779         return qemu_chr_open_null();
3780     } else
3781     if (strstart(filename, "tcp:", &p)) {
3782         return qemu_chr_open_tcp(p, 0, 0);
3783     } else
3784     if (strstart(filename, "telnet:", &p)) {
3785         return qemu_chr_open_tcp(p, 1, 0);
3786     } else
3787     if (strstart(filename, "udp:", &p)) {
3788         return qemu_chr_open_udp(p);
3789     } else
3790     if (strstart(filename, "mon:", &p)) {
3791         CharDriverState *drv = qemu_chr_open(p);
3792         if (drv) {
3793             drv = qemu_chr_open_mux(drv);
3794             monitor_init(drv, !nographic);
3795             return drv;
3796         }
3797         printf("Unable to open driver: %s\n", p);
3798         return 0;
3799     } else
3800 #ifndef _WIN32
3801     if (strstart(filename, "unix:", &p)) {
3802         return qemu_chr_open_tcp(p, 0, 1);
3803     } else if (strstart(filename, "file:", &p)) {
3804         return qemu_chr_open_file_out(p);
3805     } else if (strstart(filename, "pipe:", &p)) {
3806         return qemu_chr_open_pipe(p);
3807     } else if (!strcmp(filename, "pty")) {
3808         return qemu_chr_open_pty();
3809     } else if (!strcmp(filename, "stdio")) {
3810         return qemu_chr_open_stdio();
3811     } else
3812 #if defined(__linux__)
3813     if (strstart(filename, "/dev/parport", NULL)) {
3814         return qemu_chr_open_pp(filename);
3815     } else
3816 #endif
3817 #if defined(__linux__) || defined(__sun__) || defined(__FreeBSD__) \
3818     || defined(__NetBSD__) || defined(__OpenBSD__)
3819     if (strstart(filename, "/dev/", NULL)) {
3820         return qemu_chr_open_tty(filename);
3821     } else
3822 #endif
3823 #else /* !_WIN32 */
3824     if (strstart(filename, "COM", NULL)) {
3825         return qemu_chr_open_win(filename);
3826     } else
3827     if (strstart(filename, "pipe:", &p)) {
3828         return qemu_chr_open_win_pipe(p);
3829     } else
3830     if (strstart(filename, "con:", NULL)) {
3831         return qemu_chr_open_win_con(filename);
3832     } else
3833     if (strstart(filename, "file:", &p)) {
3834         return qemu_chr_open_win_file_out(p);
3835     } else
3836 #endif
3837 #ifdef CONFIG_BRLAPI
3838     if (!strcmp(filename, "braille")) {
3839         return chr_baum_init();
3840     } else
3841 #endif
3842     {
3843         return NULL;
3844     }
3845 }
3846
3847 void qemu_chr_close(CharDriverState *chr)
3848 {
3849     if (chr->chr_close)
3850         chr->chr_close(chr);
3851     qemu_free(chr);
3852 }
3853
3854 /***********************************************************/
3855 /* network device redirectors */
3856
3857 #if defined(DEBUG_NET) || defined(DEBUG_SLIRP)
3858 static void hex_dump(FILE *f, const uint8_t *buf, int size)
3859 {
3860     int len, i, j, c;
3861
3862     for(i=0;i<size;i+=16) {
3863         len = size - i;
3864         if (len > 16)
3865             len = 16;
3866         fprintf(f, "%08x ", i);
3867         for(j=0;j<16;j++) {
3868             if (j < len)
3869                 fprintf(f, " %02x", buf[i+j]);
3870             else
3871                 fprintf(f, "   ");
3872         }
3873         fprintf(f, " ");
3874         for(j=0;j<len;j++) {
3875             c = buf[i+j];
3876             if (c < ' ' || c > '~')
3877                 c = '.';
3878             fprintf(f, "%c", c);
3879         }
3880         fprintf(f, "\n");
3881     }
3882 }
3883 #endif
3884
3885 static int parse_macaddr(uint8_t *macaddr, const char *p)
3886 {
3887     int i;
3888     char *last_char;
3889     long int offset;
3890
3891     errno = 0;
3892     offset = strtol(p, &last_char, 0);    
3893     if (0 == errno && '\0' == *last_char &&
3894             offset >= 0 && offset <= 0xFFFFFF) {
3895         macaddr[3] = (offset & 0xFF0000) >> 16;
3896         macaddr[4] = (offset & 0xFF00) >> 8;
3897         macaddr[5] = offset & 0xFF;
3898         return 0;
3899     } else {
3900         for(i = 0; i < 6; i++) {
3901             macaddr[i] = strtol(p, (char **)&p, 16);
3902             if (i == 5) {
3903                 if (*p != '\0')
3904                     return -1;
3905             } else {
3906                 if (*p != ':' && *p != '-')
3907                     return -1;
3908                 p++;
3909             }
3910         }
3911         return 0;    
3912     }
3913
3914     return -1;
3915 }
3916
3917 static int get_str_sep(char *buf, int buf_size, const char **pp, int sep)
3918 {
3919     const char *p, *p1;
3920     int len;
3921     p = *pp;
3922     p1 = strchr(p, sep);
3923     if (!p1)
3924         return -1;
3925     len = p1 - p;
3926     p1++;
3927     if (buf_size > 0) {
3928         if (len > buf_size - 1)
3929             len = buf_size - 1;
3930         memcpy(buf, p, len);
3931         buf[len] = '\0';
3932     }
3933     *pp = p1;
3934     return 0;
3935 }
3936
3937 int parse_host_src_port(struct sockaddr_in *haddr,
3938                         struct sockaddr_in *saddr,
3939                         const char *input_str)
3940 {
3941     char *str = strdup(input_str);
3942     char *host_str = str;
3943     char *src_str;
3944     const char *src_str2;
3945     char *ptr;
3946
3947     /*
3948      * Chop off any extra arguments at the end of the string which
3949      * would start with a comma, then fill in the src port information
3950      * if it was provided else use the "any address" and "any port".
3951      */
3952     if ((ptr = strchr(str,',')))
3953         *ptr = '\0';
3954
3955     if ((src_str = strchr(input_str,'@'))) {
3956         *src_str = '\0';
3957         src_str++;
3958     }
3959
3960     if (parse_host_port(haddr, host_str) < 0)
3961         goto fail;
3962
3963     src_str2 = src_str;
3964     if (!src_str || *src_str == '\0')
3965         src_str2 = ":0";
3966
3967     if (parse_host_port(saddr, src_str2) < 0)
3968         goto fail;
3969
3970     free(str);
3971     return(0);
3972
3973 fail:
3974     free(str);
3975     return -1;
3976 }
3977
3978 int parse_host_port(struct sockaddr_in *saddr, const char *str)
3979 {
3980     char buf[512];
3981     struct hostent *he;
3982     const char *p, *r;
3983     int port;
3984
3985     p = str;
3986     if (get_str_sep(buf, sizeof(buf), &p, ':') < 0)
3987         return -1;
3988     saddr->sin_family = AF_INET;
3989     if (buf[0] == '\0') {
3990         saddr->sin_addr.s_addr = 0;
3991     } else {
3992         if (isdigit(buf[0])) {
3993             if (!inet_aton(buf, &saddr->sin_addr))
3994                 return -1;
3995         } else {
3996             if ((he = gethostbyname(buf)) == NULL)
3997                 return - 1;
3998             saddr->sin_addr = *(struct in_addr *)he->h_addr;
3999         }
4000     }
4001     port = strtol(p, (char **)&r, 0);
4002     if (r == p)
4003         return -1;
4004     saddr->sin_port = htons(port);
4005     return 0;
4006 }
4007
4008 #ifndef _WIN32
4009 static int parse_unix_path(struct sockaddr_un *uaddr, const char *str)
4010 {
4011     const char *p;
4012     int len;
4013
4014     len = MIN(108, strlen(str));
4015     p = strchr(str, ',');
4016     if (p)
4017         len = MIN(len, p - str);
4018
4019     memset(uaddr, 0, sizeof(*uaddr));
4020
4021     uaddr->sun_family = AF_UNIX;
4022     memcpy(uaddr->sun_path, str, len);
4023
4024     return 0;
4025 }
4026 #endif
4027
4028 /* find or alloc a new VLAN */
4029 VLANState *qemu_find_vlan(int id)
4030 {
4031     VLANState **pvlan, *vlan;
4032     for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) {
4033         if (vlan->id == id)
4034             return vlan;
4035     }
4036     vlan = qemu_mallocz(sizeof(VLANState));
4037     if (!vlan)
4038         return NULL;
4039     vlan->id = id;
4040     vlan->next = NULL;
4041     pvlan = &first_vlan;
4042     while (*pvlan != NULL)
4043         pvlan = &(*pvlan)->next;
4044     *pvlan = vlan;
4045     return vlan;
4046 }
4047
4048 VLANClientState *qemu_new_vlan_client(VLANState *vlan,
4049                                       IOReadHandler *fd_read,
4050                                       IOCanRWHandler *fd_can_read,
4051                                       void *opaque)
4052 {
4053     VLANClientState *vc, **pvc;
4054     vc = qemu_mallocz(sizeof(VLANClientState));
4055     if (!vc)
4056         return NULL;
4057     vc->fd_read = fd_read;
4058     vc->fd_can_read = fd_can_read;
4059     vc->opaque = opaque;
4060     vc->vlan = vlan;
4061
4062     vc->next = NULL;
4063     pvc = &vlan->first_client;
4064     while (*pvc != NULL)
4065         pvc = &(*pvc)->next;
4066     *pvc = vc;
4067     return vc;
4068 }
4069
4070 void qemu_del_vlan_client(VLANClientState *vc)
4071 {
4072     VLANClientState **pvc = &vc->vlan->first_client;
4073
4074     while (*pvc != NULL)
4075         if (*pvc == vc) {
4076             *pvc = vc->next;
4077             free(vc);
4078             break;
4079         } else
4080             pvc = &(*pvc)->next;
4081 }
4082
4083 int qemu_can_send_packet(VLANClientState *vc1)
4084 {
4085     VLANState *vlan = vc1->vlan;
4086     VLANClientState *vc;
4087
4088     for(vc = vlan->first_client; vc != NULL; vc = vc->next) {
4089         if (vc != vc1) {
4090             if (vc->fd_can_read && vc->fd_can_read(vc->opaque))
4091                 return 1;
4092         }
4093     }
4094     return 0;
4095 }
4096
4097 void qemu_send_packet(VLANClientState *vc1, const uint8_t *buf, int size)
4098 {
4099     VLANState *vlan = vc1->vlan;
4100     VLANClientState *vc;
4101
4102 #ifdef DEBUG_NET
4103     printf("vlan %d send:\n", vlan->id);
4104     hex_dump(stdout, buf, size);
4105 #endif
4106     for(vc = vlan->first_client; vc != NULL; vc = vc->next) {
4107         if (vc != vc1) {
4108             vc->fd_read(vc->opaque, buf, size);
4109         }
4110     }
4111 }
4112
4113 #if defined(CONFIG_SLIRP)
4114
4115 /* slirp network adapter */
4116
4117 static int slirp_inited;
4118 static VLANClientState *slirp_vc;
4119
4120 int slirp_can_output(void)
4121 {
4122     return !slirp_vc || qemu_can_send_packet(slirp_vc);
4123 }
4124
4125 void slirp_output(const uint8_t *pkt, int pkt_len)
4126 {
4127 #ifdef DEBUG_SLIRP
4128     printf("slirp output:\n");
4129     hex_dump(stdout, pkt, pkt_len);
4130 #endif
4131     if (!slirp_vc)
4132         return;
4133     qemu_send_packet(slirp_vc, pkt, pkt_len);
4134 }
4135
4136 static void slirp_receive(void *opaque, const uint8_t *buf, int size)
4137 {
4138 #ifdef DEBUG_SLIRP
4139     printf("slirp input:\n");
4140     hex_dump(stdout, buf, size);
4141 #endif
4142     slirp_input(buf, size);
4143 }
4144
4145 static int net_slirp_init(VLANState *vlan)
4146 {
4147     if (!slirp_inited) {
4148         slirp_inited = 1;
4149         slirp_init();
4150     }
4151     slirp_vc = qemu_new_vlan_client(vlan,
4152                                     slirp_receive, NULL, NULL);
4153     snprintf(slirp_vc->info_str, sizeof(slirp_vc->info_str), "user redirector");
4154     return 0;
4155 }
4156
4157 static void net_slirp_redir(const char *redir_str)
4158 {
4159     int is_udp;
4160     char buf[256], *r;
4161     const char *p;
4162     struct in_addr guest_addr;
4163     int host_port, guest_port;
4164
4165     if (!slirp_inited) {
4166         slirp_inited = 1;
4167         slirp_init();
4168     }
4169
4170     p = redir_str;
4171     if (get_str_sep(buf, sizeof(buf), &p, ':') < 0)
4172         goto fail;
4173     if (!strcmp(buf, "tcp")) {
4174         is_udp = 0;
4175     } else if (!strcmp(buf, "udp")) {
4176         is_udp = 1;
4177     } else {
4178         goto fail;
4179     }
4180
4181     if (get_str_sep(buf, sizeof(buf), &p, ':') < 0)
4182         goto fail;
4183     host_port = strtol(buf, &r, 0);
4184     if (r == buf)
4185         goto fail;
4186
4187     if (get_str_sep(buf, sizeof(buf), &p, ':') < 0)
4188         goto fail;
4189     if (buf[0] == '\0') {
4190         pstrcpy(buf, sizeof(buf), "10.0.2.15");
4191     }
4192     if (!inet_aton(buf, &guest_addr))
4193         goto fail;
4194
4195     guest_port = strtol(p, &r, 0);
4196     if (r == p)
4197         goto fail;
4198
4199     if (slirp_redir(is_udp, host_port, guest_addr, guest_port) < 0) {
4200         fprintf(stderr, "qemu: could not set up redirection\n");
4201         exit(1);
4202     }
4203     return;
4204  fail:
4205     fprintf(stderr, "qemu: syntax: -redir [tcp|udp]:host-port:[guest-host]:guest-port\n");
4206     exit(1);
4207 }
4208
4209 #ifndef _WIN32
4210
4211 static char smb_dir[1024];
4212
4213 static void erase_dir(char *dir_name)
4214 {
4215     DIR *d;
4216     struct dirent *de;
4217     char filename[1024];
4218
4219     /* erase all the files in the directory */
4220     if ((d = opendir(dir_name)) != 0) {
4221         for(;;) {
4222             de = readdir(d);
4223             if (!de)
4224                 break;
4225             if (strcmp(de->d_name, ".") != 0 &&
4226                 strcmp(de->d_name, "..") != 0) {
4227                 snprintf(filename, sizeof(filename), "%s/%s",
4228                          smb_dir, de->d_name);
4229                 if (unlink(filename) != 0)  /* is it a directory? */
4230                     erase_dir(filename);
4231             }
4232         }
4233         closedir(d);
4234         rmdir(dir_name);
4235     }
4236 }
4237
4238 /* automatic user mode samba server configuration */
4239 static void smb_exit(void)
4240 {
4241     erase_dir(smb_dir);
4242 }
4243
4244 /* automatic user mode samba server configuration */
4245 static void net_slirp_smb(const char *exported_dir)
4246 {
4247     char smb_conf[1024];
4248     char smb_cmdline[1024];
4249     FILE *f;
4250
4251     if (!slirp_inited) {
4252         slirp_inited = 1;
4253         slirp_init();
4254     }
4255
4256     /* XXX: better tmp dir construction */
4257     snprintf(smb_dir, sizeof(smb_dir), "/tmp/qemu-smb.%d", getpid());
4258     if (mkdir(smb_dir, 0700) < 0) {
4259         fprintf(stderr, "qemu: could not create samba server dir '%s'\n", smb_dir);
4260         exit(1);
4261     }
4262     snprintf(smb_conf, sizeof(smb_conf), "%s/%s", smb_dir, "smb.conf");
4263
4264     f = fopen(smb_conf, "w");
4265     if (!f) {
4266         fprintf(stderr, "qemu: could not create samba server configuration file '%s'\n", smb_conf);
4267         exit(1);
4268     }
4269     fprintf(f,
4270             "[global]\n"
4271             "private dir=%s\n"
4272             "smb ports=0\n"
4273             "socket address=127.0.0.1\n"
4274             "pid directory=%s\n"
4275             "lock directory=%s\n"
4276             "log file=%s/log.smbd\n"
4277             "smb passwd file=%s/smbpasswd\n"
4278             "security = share\n"
4279             "[qemu]\n"
4280             "path=%s\n"
4281             "read only=no\n"
4282             "guest ok=yes\n",
4283             smb_dir,
4284             smb_dir,
4285             smb_dir,
4286             smb_dir,
4287             smb_dir,
4288             exported_dir
4289             );
4290     fclose(f);
4291     atexit(smb_exit);
4292
4293     snprintf(smb_cmdline, sizeof(smb_cmdline), "%s -s %s",
4294              SMBD_COMMAND, smb_conf);
4295
4296     slirp_add_exec(0, smb_cmdline, 4, 139);
4297 }
4298
4299 #endif /* !defined(_WIN32) */
4300 void do_info_slirp(void)
4301 {
4302     slirp_stats();
4303 }
4304
4305 #endif /* CONFIG_SLIRP */
4306
4307 #if !defined(_WIN32)
4308
4309 typedef struct TAPState {
4310     VLANClientState *vc;
4311     int fd;
4312     char down_script[1024];
4313 } TAPState;
4314
4315 static void tap_receive(void *opaque, const uint8_t *buf, int size)
4316 {
4317     TAPState *s = opaque;
4318     int ret;
4319     for(;;) {
4320         ret = write(s->fd, buf, size);
4321         if (ret < 0 && (errno == EINTR || errno == EAGAIN)) {
4322         } else {
4323             break;
4324         }
4325     }
4326 }
4327
4328 static void tap_send(void *opaque)
4329 {
4330     TAPState *s = opaque;
4331     uint8_t buf[4096];
4332     int size;
4333
4334 #ifdef __sun__
4335     struct strbuf sbuf;
4336     int f = 0;
4337     sbuf.maxlen = sizeof(buf);
4338     sbuf.buf = buf;
4339     size = getmsg(s->fd, NULL, &sbuf, &f) >=0 ? sbuf.len : -1;
4340 #else
4341     size = read(s->fd, buf, sizeof(buf));
4342 #endif
4343     if (size > 0) {
4344         qemu_send_packet(s->vc, buf, size);
4345     }
4346 }
4347
4348 /* fd support */
4349
4350 static TAPState *net_tap_fd_init(VLANState *vlan, int fd)
4351 {
4352     TAPState *s;
4353
4354     s = qemu_mallocz(sizeof(TAPState));
4355     if (!s)
4356         return NULL;
4357     s->fd = fd;
4358     s->vc = qemu_new_vlan_client(vlan, tap_receive, NULL, s);
4359     qemu_set_fd_handler(s->fd, tap_send, NULL, s);
4360     snprintf(s->vc->info_str, sizeof(s->vc->info_str), "tap: fd=%d", fd);
4361     return s;
4362 }
4363
4364 #if defined (_BSD) || defined (__FreeBSD_kernel__)
4365 static int tap_open(char *ifname, int ifname_size)
4366 {
4367     int fd;
4368     char *dev;
4369     struct stat s;
4370
4371     TFR(fd = open("/dev/tap", O_RDWR));
4372     if (fd < 0) {
4373         fprintf(stderr, "warning: could not open /dev/tap: no virtual network emulation\n");
4374         return -1;
4375     }
4376
4377     fstat(fd, &s);
4378     dev = devname(s.st_rdev, S_IFCHR);
4379     pstrcpy(ifname, ifname_size, dev);
4380
4381     fcntl(fd, F_SETFL, O_NONBLOCK);
4382     return fd;
4383 }
4384 #elif defined(__sun__)
4385 #define TUNNEWPPA       (('T'<<16) | 0x0001)
4386 /*
4387  * Allocate TAP device, returns opened fd.
4388  * Stores dev name in the first arg(must be large enough).
4389  */
4390 int tap_alloc(char *dev, size_t dev_size)
4391 {
4392     int tap_fd, if_fd, ppa = -1;
4393     static int ip_fd = 0;
4394     char *ptr;
4395
4396     static int arp_fd = 0;
4397     int ip_muxid, arp_muxid;
4398     struct strioctl  strioc_if, strioc_ppa;
4399     int link_type = I_PLINK;;
4400     struct lifreq ifr;
4401     char actual_name[32] = "";
4402
4403     memset(&ifr, 0x0, sizeof(ifr));
4404
4405     if( *dev ){
4406        ptr = dev;
4407        while( *ptr && !isdigit((int)*ptr) ) ptr++;
4408        ppa = atoi(ptr);
4409     }
4410
4411     /* Check if IP device was opened */
4412     if( ip_fd )
4413        close(ip_fd);
4414
4415     TFR(ip_fd = open("/dev/udp", O_RDWR, 0));
4416     if (ip_fd < 0) {
4417        syslog(LOG_ERR, "Can't open /dev/ip (actually /dev/udp)");
4418        return -1;
4419     }
4420
4421     TFR(tap_fd = open("/dev/tap", O_RDWR, 0));
4422     if (tap_fd < 0) {
4423        syslog(LOG_ERR, "Can't open /dev/tap");
4424        return -1;
4425     }
4426
4427     /* Assign a new PPA and get its unit number. */
4428     strioc_ppa.ic_cmd = TUNNEWPPA;
4429     strioc_ppa.ic_timout = 0;
4430     strioc_ppa.ic_len = sizeof(ppa);
4431     strioc_ppa.ic_dp = (char *)&ppa;
4432     if ((ppa = ioctl (tap_fd, I_STR, &strioc_ppa)) < 0)
4433        syslog (LOG_ERR, "Can't assign new interface");
4434
4435     TFR(if_fd = open("/dev/tap", O_RDWR, 0));
4436     if (if_fd < 0) {
4437        syslog(LOG_ERR, "Can't open /dev/tap (2)");
4438        return -1;
4439     }
4440     if(ioctl(if_fd, I_PUSH, "ip") < 0){
4441        syslog(LOG_ERR, "Can't push IP module");
4442        return -1;
4443     }
4444
4445     if (ioctl(if_fd, SIOCGLIFFLAGS, &ifr) < 0)
4446         syslog(LOG_ERR, "Can't get flags\n");
4447
4448     snprintf (actual_name, 32, "tap%d", ppa);
4449     strncpy (ifr.lifr_name, actual_name, sizeof (ifr.lifr_name));
4450
4451     ifr.lifr_ppa = ppa;
4452     /* Assign ppa according to the unit number returned by tun device */
4453
4454     if (ioctl (if_fd, SIOCSLIFNAME, &ifr) < 0)
4455         syslog (LOG_ERR, "Can't set PPA %d", ppa);
4456     if (ioctl(if_fd, SIOCGLIFFLAGS, &ifr) <0)
4457         syslog (LOG_ERR, "Can't get flags\n");
4458     /* Push arp module to if_fd */
4459     if (ioctl (if_fd, I_PUSH, "arp") < 0)
4460         syslog (LOG_ERR, "Can't push ARP module (2)");
4461
4462     /* Push arp module to ip_fd */
4463     if (ioctl (ip_fd, I_POP, NULL) < 0)
4464         syslog (LOG_ERR, "I_POP failed\n");
4465     if (ioctl (ip_fd, I_PUSH, "arp") < 0)
4466         syslog (LOG_ERR, "Can't push ARP module (3)\n");
4467     /* Open arp_fd */
4468     TFR(arp_fd = open ("/dev/tap", O_RDWR, 0));
4469     if (arp_fd < 0)
4470        syslog (LOG_ERR, "Can't open %s\n", "/dev/tap");
4471
4472     /* Set ifname to arp */
4473     strioc_if.ic_cmd = SIOCSLIFNAME;
4474     strioc_if.ic_timout = 0;
4475     strioc_if.ic_len = sizeof(ifr);
4476     strioc_if.ic_dp = (char *)&ifr;
4477     if (ioctl(arp_fd, I_STR, &strioc_if) < 0){
4478         syslog (LOG_ERR, "Can't set ifname to arp\n");
4479     }
4480
4481     if((ip_muxid = ioctl(ip_fd, I_LINK, if_fd)) < 0){
4482        syslog(LOG_ERR, "Can't link TAP device to IP");
4483        return -1;
4484     }
4485
4486     if ((arp_muxid = ioctl (ip_fd, link_type, arp_fd)) < 0)
4487         syslog (LOG_ERR, "Can't link TAP device to ARP");
4488
4489     close (if_fd);
4490
4491     memset(&ifr, 0x0, sizeof(ifr));
4492     strncpy (ifr.lifr_name, actual_name, sizeof (ifr.lifr_name));
4493     ifr.lifr_ip_muxid  = ip_muxid;
4494     ifr.lifr_arp_muxid = arp_muxid;
4495
4496     if (ioctl (ip_fd, SIOCSLIFMUXID, &ifr) < 0)
4497     {
4498       ioctl (ip_fd, I_PUNLINK , arp_muxid);
4499       ioctl (ip_fd, I_PUNLINK, ip_muxid);
4500       syslog (LOG_ERR, "Can't set multiplexor id");
4501     }
4502
4503     snprintf(dev, dev_size, "tap%d", ppa);
4504     return tap_fd;
4505 }
4506
4507 static int tap_open(char *ifname, int ifname_size)
4508 {
4509     char  dev[10]="";
4510     int fd;
4511     if( (fd = tap_alloc(dev, sizeof(dev))) < 0 ){
4512        fprintf(stderr, "Cannot allocate TAP device\n");
4513        return -1;
4514     }
4515     pstrcpy(ifname, ifname_size, dev);
4516     fcntl(fd, F_SETFL, O_NONBLOCK);
4517     return fd;
4518 }
4519 #else
4520 static int tap_open(char *ifname, int ifname_size)
4521 {
4522     struct ifreq ifr;
4523     int fd, ret;
4524
4525     TFR(fd = open("/dev/net/tun", O_RDWR));
4526     if (fd < 0) {
4527         fprintf(stderr, "warning: could not open /dev/net/tun: no virtual network emulation\n");
4528         return -1;
4529     }
4530     memset(&ifr, 0, sizeof(ifr));
4531     ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
4532     if (ifname[0] != '\0')
4533         pstrcpy(ifr.ifr_name, IFNAMSIZ, ifname);
4534     else
4535         pstrcpy(ifr.ifr_name, IFNAMSIZ, "tap%d");
4536     ret = ioctl(fd, TUNSETIFF, (void *) &ifr);
4537     if (ret != 0) {
4538         fprintf(stderr, "warning: could not configure /dev/net/tun: no virtual network emulation\n");
4539         close(fd);
4540         return -1;
4541     }
4542     pstrcpy(ifname, ifname_size, ifr.ifr_name);
4543     fcntl(fd, F_SETFL, O_NONBLOCK);
4544     return fd;
4545 }
4546 #endif
4547
4548 static int launch_script(const char *setup_script, const char *ifname, int fd)
4549 {
4550     int pid, status;
4551     char *args[3];
4552     char **parg;
4553
4554         /* try to launch network script */
4555         pid = fork();
4556         if (pid >= 0) {
4557             if (pid == 0) {
4558                 int open_max = sysconf (_SC_OPEN_MAX), i;
4559                 for (i = 0; i < open_max; i++)
4560                     if (i != STDIN_FILENO &&
4561                         i != STDOUT_FILENO &&
4562                         i != STDERR_FILENO &&
4563                         i != fd)
4564                         close(i);
4565
4566                 parg = args;
4567                 *parg++ = (char *)setup_script;
4568                 *parg++ = (char *)ifname;
4569                 *parg++ = NULL;
4570                 execv(setup_script, args);
4571                 _exit(1);
4572             }
4573             while (waitpid(pid, &status, 0) != pid);
4574             if (!WIFEXITED(status) ||
4575                 WEXITSTATUS(status) != 0) {
4576                 fprintf(stderr, "%s: could not launch network script\n",
4577                         setup_script);
4578                 return -1;
4579             }
4580         }
4581     return 0;
4582 }
4583
4584 static int net_tap_init(VLANState *vlan, const char *ifname1,
4585                         const char *setup_script, const char *down_script)
4586 {
4587     TAPState *s;
4588     int fd;
4589     char ifname[128];
4590
4591     if (ifname1 != NULL)
4592         pstrcpy(ifname, sizeof(ifname), ifname1);
4593     else
4594         ifname[0] = '\0';
4595     TFR(fd = tap_open(ifname, sizeof(ifname)));
4596     if (fd < 0)
4597         return -1;
4598
4599     if (!setup_script || !strcmp(setup_script, "no"))
4600         setup_script = "";
4601     if (setup_script[0] != '\0') {
4602         if (launch_script(setup_script, ifname, fd))
4603             return -1;
4604     }
4605     s = net_tap_fd_init(vlan, fd);
4606     if (!s)
4607         return -1;
4608     snprintf(s->vc->info_str, sizeof(s->vc->info_str),
4609              "tap: ifname=%s setup_script=%s", ifname, setup_script);
4610     if (down_script && strcmp(down_script, "no"))
4611         snprintf(s->down_script, sizeof(s->down_script), "%s", down_script);
4612     return 0;
4613 }
4614
4615 #endif /* !_WIN32 */
4616
4617 #if defined(CONFIG_VDE)
4618 typedef struct VDEState {
4619     VLANClientState *vc;
4620     VDECONN *vde;
4621 } VDEState;
4622
4623 static void vde_to_qemu(void *opaque)
4624 {
4625     VDEState *s = opaque;
4626     uint8_t buf[4096];
4627     int size;
4628
4629     size = vde_recv(s->vde, buf, sizeof(buf), 0);
4630     if (size > 0) {
4631         qemu_send_packet(s->vc, buf, size);
4632     }
4633 }
4634
4635 static void vde_from_qemu(void *opaque, const uint8_t *buf, int size)
4636 {
4637     VDEState *s = opaque;
4638     int ret;
4639     for(;;) {
4640         ret = vde_send(s->vde, buf, size, 0);
4641         if (ret < 0 && errno == EINTR) {
4642         } else {
4643             break;
4644         }
4645     }
4646 }
4647
4648 static int net_vde_init(VLANState *vlan, const char *sock, int port,
4649                         const char *group, int mode)
4650 {
4651     VDEState *s;
4652     char *init_group = strlen(group) ? (char *)group : NULL;
4653     char *init_sock = strlen(sock) ? (char *)sock : NULL;
4654
4655     struct vde_open_args args = {
4656         .port = port,
4657         .group = init_group,
4658         .mode = mode,
4659     };
4660
4661     s = qemu_mallocz(sizeof(VDEState));
4662     if (!s)
4663         return -1;
4664     s->vde = vde_open(init_sock, "QEMU", &args);
4665     if (!s->vde){
4666         free(s);
4667         return -1;
4668     }
4669     s->vc = qemu_new_vlan_client(vlan, vde_from_qemu, NULL, s);
4670     qemu_set_fd_handler(vde_datafd(s->vde), vde_to_qemu, NULL, s);
4671     snprintf(s->vc->info_str, sizeof(s->vc->info_str), "vde: sock=%s fd=%d",
4672              sock, vde_datafd(s->vde));
4673     return 0;
4674 }
4675 #endif
4676
4677 /* network connection */
4678 typedef struct NetSocketState {
4679     VLANClientState *vc;
4680     int fd;
4681     int state; /* 0 = getting length, 1 = getting data */
4682     int index;
4683     int packet_len;
4684     uint8_t buf[4096];
4685     struct sockaddr_in dgram_dst; /* contains inet host and port destination iff connectionless (SOCK_DGRAM) */
4686 } NetSocketState;
4687
4688 typedef struct NetSocketListenState {
4689     VLANState *vlan;
4690     int fd;
4691 } NetSocketListenState;
4692
4693 /* XXX: we consider we can send the whole packet without blocking */
4694 static void net_socket_receive(void *opaque, const uint8_t *buf, int size)
4695 {
4696     NetSocketState *s = opaque;
4697     uint32_t len;
4698     len = htonl(size);
4699
4700     send_all(s->fd, (const uint8_t *)&len, sizeof(len));
4701     send_all(s->fd, buf, size);
4702 }
4703
4704 static void net_socket_receive_dgram(void *opaque, const uint8_t *buf, int size)
4705 {
4706     NetSocketState *s = opaque;
4707     sendto(s->fd, buf, size, 0,
4708            (struct sockaddr *)&s->dgram_dst, sizeof(s->dgram_dst));
4709 }
4710
4711 static void net_socket_send(void *opaque)
4712 {
4713     NetSocketState *s = opaque;
4714     int l, size, err;
4715     uint8_t buf1[4096];
4716     const uint8_t *buf;
4717
4718     size = recv(s->fd, buf1, sizeof(buf1), 0);
4719     if (size < 0) {
4720         err = socket_error();
4721         if (err != EWOULDBLOCK)
4722             goto eoc;
4723     } else if (size == 0) {
4724         /* end of connection */
4725     eoc:
4726         qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
4727         closesocket(s->fd);
4728         return;
4729     }
4730     buf = buf1;
4731     while (size > 0) {
4732         /* reassemble a packet from the network */
4733         switch(s->state) {
4734         case 0:
4735             l = 4 - s->index;
4736             if (l > size)
4737                 l = size;
4738             memcpy(s->buf + s->index, buf, l);
4739             buf += l;
4740             size -= l;
4741             s->index += l;
4742             if (s->index == 4) {
4743                 /* got length */
4744                 s->packet_len = ntohl(*(uint32_t *)s->buf);
4745                 s->index = 0;
4746                 s->state = 1;
4747             }
4748             break;
4749         case 1:
4750             l = s->packet_len - s->index;
4751             if (l > size)
4752                 l = size;
4753             memcpy(s->buf + s->index, buf, l);
4754             s->index += l;
4755             buf += l;
4756             size -= l;
4757             if (s->index >= s->packet_len) {
4758                 qemu_send_packet(s->vc, s->buf, s->packet_len);
4759                 s->index = 0;
4760                 s->state = 0;
4761             }
4762             break;
4763         }
4764     }
4765 }
4766
4767 static void net_socket_send_dgram(void *opaque)
4768 {
4769     NetSocketState *s = opaque;
4770     int size;
4771
4772     size = recv(s->fd, s->buf, sizeof(s->buf), 0);
4773     if (size < 0)
4774         return;
4775     if (size == 0) {
4776         /* end of connection */
4777         qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
4778         return;
4779     }
4780     qemu_send_packet(s->vc, s->buf, size);
4781 }
4782
4783 static int net_socket_mcast_create(struct sockaddr_in *mcastaddr)
4784 {
4785     struct ip_mreq imr;
4786     int fd;
4787     int val, ret;
4788     if (!IN_MULTICAST(ntohl(mcastaddr->sin_addr.s_addr))) {
4789         fprintf(stderr, "qemu: error: specified mcastaddr \"%s\" (0x%08x) does not contain a multicast address\n",
4790                 inet_ntoa(mcastaddr->sin_addr),
4791                 (int)ntohl(mcastaddr->sin_addr.s_addr));
4792         return -1;
4793
4794     }
4795     fd = socket(PF_INET, SOCK_DGRAM, 0);
4796     if (fd < 0) {
4797         perror("socket(PF_INET, SOCK_DGRAM)");
4798         return -1;
4799     }
4800
4801     val = 1;
4802     ret=setsockopt(fd, SOL_SOCKET, SO_REUSEADDR,
4803                    (const char *)&val, sizeof(val));
4804     if (ret < 0) {
4805         perror("setsockopt(SOL_SOCKET, SO_REUSEADDR)");
4806         goto fail;
4807     }
4808
4809     ret = bind(fd, (struct sockaddr *)mcastaddr, sizeof(*mcastaddr));
4810     if (ret < 0) {
4811         perror("bind");
4812         goto fail;
4813     }
4814
4815     /* Add host to multicast group */
4816     imr.imr_multiaddr = mcastaddr->sin_addr;
4817     imr.imr_interface.s_addr = htonl(INADDR_ANY);
4818
4819     ret = setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP,
4820                      (const char *)&imr, sizeof(struct ip_mreq));
4821     if (ret < 0) {
4822         perror("setsockopt(IP_ADD_MEMBERSHIP)");
4823         goto fail;
4824     }
4825
4826     /* Force mcast msgs to loopback (eg. several QEMUs in same host */
4827     val = 1;
4828     ret=setsockopt(fd, IPPROTO_IP, IP_MULTICAST_LOOP,
4829                    (const char *)&val, sizeof(val));
4830     if (ret < 0) {
4831         perror("setsockopt(SOL_IP, IP_MULTICAST_LOOP)");
4832         goto fail;
4833     }
4834
4835     socket_set_nonblock(fd);
4836     return fd;
4837 fail:
4838     if (fd >= 0)
4839         closesocket(fd);
4840     return -1;
4841 }
4842
4843 static NetSocketState *net_socket_fd_init_dgram(VLANState *vlan, int fd,
4844                                           int is_connected)
4845 {
4846     struct sockaddr_in saddr;
4847     int newfd;
4848     socklen_t saddr_len;
4849     NetSocketState *s;
4850
4851     /* fd passed: multicast: "learn" dgram_dst address from bound address and save it
4852      * Because this may be "shared" socket from a "master" process, datagrams would be recv()
4853      * by ONLY ONE process: we must "clone" this dgram socket --jjo
4854      */
4855
4856     if (is_connected) {
4857         if (getsockname(fd, (struct sockaddr *) &saddr, &saddr_len) == 0) {
4858             /* must be bound */
4859             if (saddr.sin_addr.s_addr==0) {
4860                 fprintf(stderr, "qemu: error: init_dgram: fd=%d unbound, cannot setup multicast dst addr\n",
4861                         fd);
4862                 return NULL;
4863             }
4864             /* clone dgram socket */
4865             newfd = net_socket_mcast_create(&saddr);
4866             if (newfd < 0) {
4867                 /* error already reported by net_socket_mcast_create() */
4868                 close(fd);
4869                 return NULL;
4870             }
4871             /* clone newfd to fd, close newfd */
4872             dup2(newfd, fd);
4873             close(newfd);
4874
4875         } else {
4876             fprintf(stderr, "qemu: error: init_dgram: fd=%d failed getsockname(): %s\n",
4877                     fd, strerror(errno));
4878             return NULL;
4879         }
4880     }
4881
4882     s = qemu_mallocz(sizeof(NetSocketState));
4883     if (!s)
4884         return NULL;
4885     s->fd = fd;
4886
4887     s->vc = qemu_new_vlan_client(vlan, net_socket_receive_dgram, NULL, s);
4888     qemu_set_fd_handler(s->fd, net_socket_send_dgram, NULL, s);
4889
4890     /* mcast: save bound address as dst */
4891     if (is_connected) s->dgram_dst=saddr;
4892
4893     snprintf(s->vc->info_str, sizeof(s->vc->info_str),
4894             "socket: fd=%d (%s mcast=%s:%d)",
4895             fd, is_connected? "cloned" : "",
4896             inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
4897     return s;
4898 }
4899
4900 static void net_socket_connect(void *opaque)
4901 {
4902     NetSocketState *s = opaque;
4903     qemu_set_fd_handler(s->fd, net_socket_send, NULL, s);
4904 }
4905
4906 static NetSocketState *net_socket_fd_init_stream(VLANState *vlan, int fd,
4907                                           int is_connected)
4908 {
4909     NetSocketState *s;
4910     s = qemu_mallocz(sizeof(NetSocketState));
4911     if (!s)
4912         return NULL;
4913     s->fd = fd;
4914     s->vc = qemu_new_vlan_client(vlan,
4915                                  net_socket_receive, NULL, s);
4916     snprintf(s->vc->info_str, sizeof(s->vc->info_str),
4917              "socket: fd=%d", fd);
4918     if (is_connected) {
4919         net_socket_connect(s);
4920     } else {
4921         qemu_set_fd_handler(s->fd, NULL, net_socket_connect, s);
4922     }
4923     return s;
4924 }
4925
4926 static NetSocketState *net_socket_fd_init(VLANState *vlan, int fd,
4927                                           int is_connected)
4928 {
4929     int so_type=-1, optlen=sizeof(so_type);
4930
4931     if(getsockopt(fd, SOL_SOCKET, SO_TYPE, (char *)&so_type,
4932         (socklen_t *)&optlen)< 0) {
4933         fprintf(stderr, "qemu: error: getsockopt(SO_TYPE) for fd=%d failed\n", fd);
4934         return NULL;
4935     }
4936     switch(so_type) {
4937     case SOCK_DGRAM:
4938         return net_socket_fd_init_dgram(vlan, fd, is_connected);
4939     case SOCK_STREAM:
4940         return net_socket_fd_init_stream(vlan, fd, is_connected);
4941     default:
4942         /* who knows ... this could be a eg. a pty, do warn and continue as stream */
4943         fprintf(stderr, "qemu: warning: socket type=%d for fd=%d is not SOCK_DGRAM or SOCK_STREAM\n", so_type, fd);
4944         return net_socket_fd_init_stream(vlan, fd, is_connected);
4945     }
4946     return NULL;
4947 }
4948
4949 static void net_socket_accept(void *opaque)
4950 {
4951     NetSocketListenState *s = opaque;
4952     NetSocketState *s1;
4953     struct sockaddr_in saddr;
4954     socklen_t len;
4955     int fd;
4956
4957     for(;;) {
4958         len = sizeof(saddr);
4959         fd = accept(s->fd, (struct sockaddr *)&saddr, &len);
4960         if (fd < 0 && errno != EINTR) {
4961             return;
4962         } else if (fd >= 0) {
4963             break;
4964         }
4965     }
4966     s1 = net_socket_fd_init(s->vlan, fd, 1);
4967     if (!s1) {
4968         closesocket(fd);
4969     } else {
4970         snprintf(s1->vc->info_str, sizeof(s1->vc->info_str),
4971                  "socket: connection from %s:%d",
4972                  inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
4973     }
4974 }
4975
4976 static int net_socket_listen_init(VLANState *vlan, const char *host_str)
4977 {
4978     NetSocketListenState *s;
4979     int fd, val, ret;
4980     struct sockaddr_in saddr;
4981
4982     if (parse_host_port(&saddr, host_str) < 0)
4983         return -1;
4984
4985     s = qemu_mallocz(sizeof(NetSocketListenState));
4986     if (!s)
4987         return -1;
4988
4989     fd = socket(PF_INET, SOCK_STREAM, 0);
4990     if (fd < 0) {
4991         perror("socket");
4992         return -1;
4993     }
4994     socket_set_nonblock(fd);
4995
4996     /* allow fast reuse */
4997     val = 1;
4998     setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (const char *)&val, sizeof(val));
4999
5000     ret = bind(fd, (struct sockaddr *)&saddr, sizeof(saddr));
5001     if (ret < 0) {
5002         perror("bind");
5003         return -1;
5004     }
5005     ret = listen(fd, 0);
5006     if (ret < 0) {
5007         perror("listen");
5008         return -1;
5009     }
5010     s->vlan = vlan;
5011     s->fd = fd;
5012     qemu_set_fd_handler(fd, net_socket_accept, NULL, s);
5013     return 0;
5014 }
5015
5016 static int net_socket_connect_init(VLANState *vlan, const char *host_str)
5017 {
5018     NetSocketState *s;
5019     int fd, connected, ret, err;
5020     struct sockaddr_in saddr;
5021
5022     if (parse_host_port(&saddr, host_str) < 0)
5023         return -1;
5024
5025     fd = socket(PF_INET, SOCK_STREAM, 0);
5026     if (fd < 0) {
5027         perror("socket");
5028         return -1;
5029     }
5030     socket_set_nonblock(fd);
5031
5032     connected = 0;
5033     for(;;) {
5034         ret = connect(fd, (struct sockaddr *)&saddr, sizeof(saddr));
5035         if (ret < 0) {
5036             err = socket_error();
5037             if (err == EINTR || err == EWOULDBLOCK) {
5038             } else if (err == EINPROGRESS) {
5039                 break;
5040 #ifdef _WIN32
5041             } else if (err == WSAEALREADY) {
5042                 break;
5043 #endif
5044             } else {
5045                 perror("connect");
5046                 closesocket(fd);
5047                 return -1;
5048             }
5049         } else {
5050             connected = 1;
5051             break;
5052         }
5053     }
5054     s = net_socket_fd_init(vlan, fd, connected);
5055     if (!s)
5056         return -1;
5057     snprintf(s->vc->info_str, sizeof(s->vc->info_str),
5058              "socket: connect to %s:%d",
5059              inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
5060     return 0;
5061 }
5062
5063 static int net_socket_mcast_init(VLANState *vlan, const char *host_str)
5064 {
5065     NetSocketState *s;
5066     int fd;
5067     struct sockaddr_in saddr;
5068
5069     if (parse_host_port(&saddr, host_str) < 0)
5070         return -1;
5071
5072
5073     fd = net_socket_mcast_create(&saddr);
5074     if (fd < 0)
5075         return -1;
5076
5077     s = net_socket_fd_init(vlan, fd, 0);
5078     if (!s)
5079         return -1;
5080
5081     s->dgram_dst = saddr;
5082
5083     snprintf(s->vc->info_str, sizeof(s->vc->info_str),
5084              "socket: mcast=%s:%d",
5085              inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
5086     return 0;
5087
5088 }
5089
5090 static const char *get_opt_name(char *buf, int buf_size, const char *p)
5091 {
5092     char *q;
5093
5094     q = buf;
5095     while (*p != '\0' && *p != '=') {
5096         if (q && (q - buf) < buf_size - 1)
5097             *q++ = *p;
5098         p++;
5099     }
5100     if (q)
5101         *q = '\0';
5102
5103     return p;
5104 }
5105
5106 static const char *get_opt_value(char *buf, int buf_size, const char *p)
5107 {
5108     char *q;
5109
5110     q = buf;
5111     while (*p != '\0') {
5112         if (*p == ',') {
5113             if (*(p + 1) != ',')
5114                 break;
5115             p++;
5116         }
5117         if (q && (q - buf) < buf_size - 1)
5118             *q++ = *p;
5119         p++;
5120     }
5121     if (q)
5122         *q = '\0';
5123
5124     return p;
5125 }
5126
5127 static int get_param_value(char *buf, int buf_size,
5128                            const char *tag, const char *str)
5129 {
5130     const char *p;
5131     char option[128];
5132
5133     p = str;
5134     for(;;) {
5135         p = get_opt_name(option, sizeof(option), p);
5136         if (*p != '=')
5137             break;
5138         p++;
5139         if (!strcmp(tag, option)) {
5140             (void)get_opt_value(buf, buf_size, p);
5141             return strlen(buf);
5142         } else {
5143             p = get_opt_value(NULL, 0, p);
5144         }
5145         if (*p != ',')
5146             break;
5147         p++;
5148     }
5149     return 0;
5150 }
5151
5152 static int check_params(char *buf, int buf_size,
5153                         const char * const *params, const char *str)
5154 {
5155     const char *p;
5156     int i;
5157
5158     p = str;
5159     for(;;) {
5160         p = get_opt_name(buf, buf_size, p);
5161         if (*p != '=')
5162             return -1;
5163         p++;
5164         for(i = 0; params[i] != NULL; i++)
5165             if (!strcmp(params[i], buf))
5166                 break;
5167         if (params[i] == NULL)
5168             return -1;
5169         p = get_opt_value(NULL, 0, p);
5170         if (*p != ',')
5171             break;
5172         p++;
5173     }
5174     return 0;
5175 }
5176
5177 static int net_client_init(const char *device, const char *p)
5178 {
5179     char buf[1024];
5180     int vlan_id, ret;
5181     VLANState *vlan;
5182
5183     vlan_id = 0;
5184     if (get_param_value(buf, sizeof(buf), "vlan", p)) {
5185         vlan_id = strtol(buf, NULL, 0);
5186     }
5187     vlan = qemu_find_vlan(vlan_id);
5188     if (!vlan) {
5189         fprintf(stderr, "Could not create vlan %d\n", vlan_id);
5190         return -1;
5191     }
5192     if (!strcmp(device, "nic")) {
5193         NICInfo *nd;
5194         uint8_t *macaddr;
5195
5196         if (nb_nics >= MAX_NICS) {
5197             fprintf(stderr, "Too Many NICs\n");
5198             return -1;
5199         }
5200         nd = &nd_table[nb_nics];
5201         macaddr = nd->macaddr;
5202         macaddr[0] = 0x52;
5203         macaddr[1] = 0x54;
5204         macaddr[2] = 0x00;
5205         macaddr[3] = 0x12;
5206         macaddr[4] = 0x34;
5207         macaddr[5] = 0x56 + nb_nics;
5208
5209         if (get_param_value(buf, sizeof(buf), "macaddr", p)) {
5210             if (parse_macaddr(macaddr, buf) < 0) {
5211                 fprintf(stderr, "invalid syntax for ethernet address\n");
5212                 return -1;
5213             }
5214         }
5215         if (get_param_value(buf, sizeof(buf), "model", p)) {
5216             nd->model = strdup(buf);
5217         }
5218         nd->vlan = vlan;
5219         nb_nics++;
5220         vlan->nb_guest_devs++;
5221         ret = 0;
5222     } else
5223     if (!strcmp(device, "none")) {
5224         /* does nothing. It is needed to signal that no network cards
5225            are wanted */
5226         ret = 0;
5227     } else
5228 #ifdef CONFIG_SLIRP
5229     if (!strcmp(device, "user")) {
5230         if (get_param_value(buf, sizeof(buf), "hostname", p)) {
5231             pstrcpy(slirp_hostname, sizeof(slirp_hostname), buf);
5232         }
5233         vlan->nb_host_devs++;
5234         ret = net_slirp_init(vlan);
5235     } else
5236 #endif
5237 #ifdef _WIN32
5238     if (!strcmp(device, "tap")) {
5239         char ifname[64];
5240         if (get_param_value(ifname, sizeof(ifname), "ifname", p) <= 0) {
5241             fprintf(stderr, "tap: no interface name\n");
5242             return -1;
5243         }
5244         vlan->nb_host_devs++;
5245         ret = tap_win32_init(vlan, ifname);
5246     } else
5247 #else
5248     if (!strcmp(device, "tap")) {
5249         char ifname[64];
5250         char setup_script[1024], down_script[1024];
5251         int fd;
5252         vlan->nb_host_devs++;
5253         if (get_param_value(buf, sizeof(buf), "fd", p) > 0) {
5254             fd = strtol(buf, NULL, 0);
5255             fcntl(fd, F_SETFL, O_NONBLOCK);
5256             ret = -1;
5257             if (net_tap_fd_init(vlan, fd))
5258                 ret = 0;
5259         } else {
5260             if (get_param_value(ifname, sizeof(ifname), "ifname", p) <= 0) {
5261                 ifname[0] = '\0';
5262             }
5263             if (get_param_value(setup_script, sizeof(setup_script), "script", p) == 0) {
5264                 pstrcpy(setup_script, sizeof(setup_script), DEFAULT_NETWORK_SCRIPT);
5265             }
5266             if (get_param_value(down_script, sizeof(down_script), "downscript", p) == 0) {
5267                 pstrcpy(down_script, sizeof(down_script), DEFAULT_NETWORK_DOWN_SCRIPT);
5268             }
5269             ret = net_tap_init(vlan, ifname, setup_script, down_script);
5270         }
5271     } else
5272 #endif
5273     if (!strcmp(device, "socket")) {
5274         if (get_param_value(buf, sizeof(buf), "fd", p) > 0) {
5275             int fd;
5276             fd = strtol(buf, NULL, 0);
5277             ret = -1;
5278             if (net_socket_fd_init(vlan, fd, 1))
5279                 ret = 0;
5280         } else if (get_param_value(buf, sizeof(buf), "listen", p) > 0) {
5281             ret = net_socket_listen_init(vlan, buf);
5282         } else if (get_param_value(buf, sizeof(buf), "connect", p) > 0) {
5283             ret = net_socket_connect_init(vlan, buf);
5284         } else if (get_param_value(buf, sizeof(buf), "mcast", p) > 0) {
5285             ret = net_socket_mcast_init(vlan, buf);
5286         } else {
5287             fprintf(stderr, "Unknown socket options: %s\n", p);
5288             return -1;
5289         }
5290         vlan->nb_host_devs++;
5291     } else
5292 #ifdef CONFIG_VDE
5293     if (!strcmp(device, "vde")) {
5294         char vde_sock[1024], vde_group[512];
5295         int vde_port, vde_mode;
5296         vlan->nb_host_devs++;
5297         if (get_param_value(vde_sock, sizeof(vde_sock), "sock", p) <= 0) {
5298             vde_sock[0] = '\0';
5299         }
5300         if (get_param_value(buf, sizeof(buf), "port", p) > 0) {
5301             vde_port = strtol(buf, NULL, 10);
5302         } else {
5303             vde_port = 0;
5304         }
5305         if (get_param_value(vde_group, sizeof(vde_group), "group", p) <= 0) {
5306             vde_group[0] = '\0';
5307         }
5308         if (get_param_value(buf, sizeof(buf), "mode", p) > 0) {
5309             vde_mode = strtol(buf, NULL, 8);
5310         } else {
5311             vde_mode = 0700;
5312         }
5313         ret = net_vde_init(vlan, vde_sock, vde_port, vde_group, vde_mode);
5314     } else
5315 #endif
5316     {
5317         fprintf(stderr, "Unknown network device: %s\n", device);
5318         return -1;
5319     }
5320     if (ret < 0) {
5321         fprintf(stderr, "Could not initialize device '%s'\n", device);
5322     }
5323
5324     return ret;
5325 }
5326
5327 static int net_client_parse(const char *str)
5328 {
5329     const char *p;
5330     char *q;
5331     char device[64];
5332
5333     p = str;
5334     q = device;
5335     while (*p != '\0' && *p != ',') {
5336         if ((q - device) < sizeof(device) - 1)
5337             *q++ = *p;
5338         p++;
5339     }
5340     *q = '\0';
5341     if (*p == ',')
5342         p++;
5343
5344     return net_client_init(device, p);
5345 }
5346
5347 void do_info_network(void)
5348 {
5349     VLANState *vlan;
5350     VLANClientState *vc;
5351
5352     for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) {
5353         term_printf("VLAN %d devices:\n", vlan->id);
5354         for(vc = vlan->first_client; vc != NULL; vc = vc->next)
5355             term_printf("  %s\n", vc->info_str);
5356     }
5357 }
5358
5359 /***********************************************************/
5360 /* Bluetooth support */
5361 static int nb_hcis;
5362 static int cur_hci;
5363 static struct HCIInfo *hci_table[MAX_NICS];
5364 static struct bt_vlan_s {
5365     struct bt_scatternet_s net;
5366     int id;
5367     struct bt_vlan_s *next;
5368 } *first_bt_vlan;
5369
5370 /* find or alloc a new bluetooth "VLAN" */
5371 static struct bt_scatternet_s *qemu_find_bt_vlan(int id)
5372 {
5373     struct bt_vlan_s **pvlan, *vlan;
5374     for (vlan = first_bt_vlan; vlan != NULL; vlan = vlan->next) {
5375         if (vlan->id == id)
5376             return &vlan->net;
5377     }
5378     vlan = qemu_mallocz(sizeof(struct bt_vlan_s));
5379     vlan->id = id;
5380     pvlan = &first_bt_vlan;
5381     while (*pvlan != NULL)
5382         pvlan = &(*pvlan)->next;
5383     *pvlan = vlan;
5384     return &vlan->net;
5385 }
5386
5387 static void null_hci_send(struct HCIInfo *hci, const uint8_t *data, int len)
5388 {
5389 }
5390
5391 static int null_hci_addr_set(struct HCIInfo *hci, const uint8_t *bd_addr)
5392 {
5393     return -ENOTSUP;
5394 }
5395
5396 static struct HCIInfo null_hci = {
5397     .cmd_send = null_hci_send,
5398     .sco_send = null_hci_send,
5399     .acl_send = null_hci_send,
5400     .bdaddr_set = null_hci_addr_set,
5401 };
5402
5403 struct HCIInfo *qemu_next_hci(void)
5404 {
5405     if (cur_hci == nb_hcis)
5406         return &null_hci;
5407
5408     return hci_table[cur_hci++];
5409 }
5410
5411 /***********************************************************/
5412 /* QEMU Block devices */
5413
5414 #define HD_ALIAS "index=%d,media=disk"
5415 #ifdef TARGET_PPC
5416 #define CDROM_ALIAS "index=1,media=cdrom"
5417 #else
5418 #define CDROM_ALIAS "index=2,media=cdrom"
5419 #endif
5420 #define FD_ALIAS "index=%d,if=floppy"
5421 #define PFLASH_ALIAS "if=pflash"
5422 #define MTD_ALIAS "if=mtd"
5423 #define SD_ALIAS "index=0,if=sd"
5424
5425 static int drive_add(const char *file, const char *fmt, ...)
5426 {
5427     va_list ap;
5428
5429     if (nb_drives_opt >= MAX_DRIVES) {
5430         fprintf(stderr, "qemu: too many drives\n");
5431         exit(1);
5432     }
5433
5434     drives_opt[nb_drives_opt].file = file;
5435     va_start(ap, fmt);
5436     vsnprintf(drives_opt[nb_drives_opt].opt,
5437               sizeof(drives_opt[0].opt), fmt, ap);
5438     va_end(ap);
5439
5440     return nb_drives_opt++;
5441 }
5442
5443 int drive_get_index(BlockInterfaceType type, int bus, int unit)
5444 {
5445     int index;
5446
5447     /* seek interface, bus and unit */
5448
5449     for (index = 0; index < nb_drives; index++)
5450         if (drives_table[index].type == type &&
5451             drives_table[index].bus == bus &&
5452             drives_table[index].unit == unit)
5453         return index;
5454
5455     return -1;
5456 }
5457
5458 int drive_get_max_bus(BlockInterfaceType type)
5459 {
5460     int max_bus;
5461     int index;
5462
5463     max_bus = -1;
5464     for (index = 0; index < nb_drives; index++) {
5465         if(drives_table[index].type == type &&
5466            drives_table[index].bus > max_bus)
5467             max_bus = drives_table[index].bus;
5468     }
5469     return max_bus;
5470 }
5471
5472 static void bdrv_format_print(void *opaque, const char *name)
5473 {
5474     fprintf(stderr, " %s", name);
5475 }
5476
5477 static int drive_init(struct drive_opt *arg, int snapshot,
5478                       QEMUMachine *machine)
5479 {
5480     char buf[128];
5481     char file[1024];
5482     char devname[128];
5483     const char *mediastr = "";
5484     BlockInterfaceType type;
5485     enum { MEDIA_DISK, MEDIA_CDROM } media;
5486     int bus_id, unit_id;
5487     int cyls, heads, secs, translation;
5488     BlockDriverState *bdrv;
5489     BlockDriver *drv = NULL;
5490     int max_devs;
5491     int index;
5492     int cache;
5493     int bdrv_flags;
5494     char *str = arg->opt;
5495     static const char * const params[] = { "bus", "unit", "if", "index",
5496                                            "cyls", "heads", "secs", "trans",
5497                                            "media", "snapshot", "file",
5498                                            "cache", "format", NULL };
5499
5500     if (check_params(buf, sizeof(buf), params, str) < 0) {
5501          fprintf(stderr, "qemu: unknown parameter '%s' in '%s'\n",
5502                          buf, str);
5503          return -1;
5504     }
5505
5506     file[0] = 0;
5507     cyls = heads = secs = 0;
5508     bus_id = 0;
5509     unit_id = -1;
5510     translation = BIOS_ATA_TRANSLATION_AUTO;
5511     index = -1;
5512     cache = 1;
5513
5514     if (machine->use_scsi) {
5515         type = IF_SCSI;
5516         max_devs = MAX_SCSI_DEVS;
5517         pstrcpy(devname, sizeof(devname), "scsi");
5518     } else {
5519         type = IF_IDE;
5520         max_devs = MAX_IDE_DEVS;
5521         pstrcpy(devname, sizeof(devname), "ide");
5522     }
5523     media = MEDIA_DISK;
5524
5525     /* extract parameters */
5526
5527     if (get_param_value(buf, sizeof(buf), "bus", str)) {
5528         bus_id = strtol(buf, NULL, 0);
5529         if (bus_id < 0) {
5530             fprintf(stderr, "qemu: '%s' invalid bus id\n", str);
5531             return -1;
5532         }
5533     }
5534
5535     if (get_param_value(buf, sizeof(buf), "unit", str)) {
5536         unit_id = strtol(buf, NULL, 0);
5537         if (unit_id < 0) {
5538             fprintf(stderr, "qemu: '%s' invalid unit id\n", str);
5539             return -1;
5540         }
5541     }
5542
5543     if (get_param_value(buf, sizeof(buf), "if", str)) {
5544         pstrcpy(devname, sizeof(devname), buf);
5545         if (!strcmp(buf, "ide")) {
5546             type = IF_IDE;
5547             max_devs = MAX_IDE_DEVS;
5548         } else if (!strcmp(buf, "scsi")) {
5549             type = IF_SCSI;
5550             max_devs = MAX_SCSI_DEVS;
5551         } else if (!strcmp(buf, "floppy")) {
5552             type = IF_FLOPPY;
5553             max_devs = 0;
5554         } else if (!strcmp(buf, "pflash")) {
5555             type = IF_PFLASH;
5556             max_devs = 0;
5557         } else if (!strcmp(buf, "mtd")) {
5558             type = IF_MTD;
5559             max_devs = 0;
5560         } else if (!strcmp(buf, "sd")) {
5561             type = IF_SD;
5562             max_devs = 0;
5563         } else {
5564             fprintf(stderr, "qemu: '%s' unsupported bus type '%s'\n", str, buf);
5565             return -1;
5566         }
5567     }
5568
5569     if (get_param_value(buf, sizeof(buf), "index", str)) {
5570         index = strtol(buf, NULL, 0);
5571         if (index < 0) {
5572             fprintf(stderr, "qemu: '%s' invalid index\n", str);
5573             return -1;
5574         }
5575     }
5576
5577     if (get_param_value(buf, sizeof(buf), "cyls", str)) {
5578         cyls = strtol(buf, NULL, 0);
5579     }
5580
5581     if (get_param_value(buf, sizeof(buf), "heads", str)) {
5582         heads = strtol(buf, NULL, 0);
5583     }
5584
5585     if (get_param_value(buf, sizeof(buf), "secs", str)) {
5586         secs = strtol(buf, NULL, 0);
5587     }
5588
5589     if (cyls || heads || secs) {
5590         if (cyls < 1 || cyls > 16383) {
5591             fprintf(stderr, "qemu: '%s' invalid physical cyls number\n", str);
5592             return -1;
5593         }
5594         if (heads < 1 || heads > 16) {
5595             fprintf(stderr, "qemu: '%s' invalid physical heads number\n", str);
5596             return -1;
5597         }
5598         if (secs < 1 || secs > 63) {
5599             fprintf(stderr, "qemu: '%s' invalid physical secs number\n", str);
5600             return -1;
5601         }
5602     }
5603
5604     if (get_param_value(buf, sizeof(buf), "trans", str)) {
5605         if (!cyls) {
5606             fprintf(stderr,
5607                     "qemu: '%s' trans must be used with cyls,heads and secs\n",
5608                     str);
5609             return -1;
5610         }
5611         if (!strcmp(buf, "none"))
5612             translation = BIOS_ATA_TRANSLATION_NONE;
5613         else if (!strcmp(buf, "lba"))
5614             translation = BIOS_ATA_TRANSLATION_LBA;
5615         else if (!strcmp(buf, "auto"))
5616             translation = BIOS_ATA_TRANSLATION_AUTO;
5617         else {
5618             fprintf(stderr, "qemu: '%s' invalid translation type\n", str);
5619             return -1;
5620         }
5621     }
5622
5623     if (get_param_value(buf, sizeof(buf), "media", str)) {
5624         if (!strcmp(buf, "disk")) {
5625             media = MEDIA_DISK;
5626         } else if (!strcmp(buf, "cdrom")) {
5627             if (cyls || secs || heads) {
5628                 fprintf(stderr,
5629                         "qemu: '%s' invalid physical CHS format\n", str);
5630                 return -1;
5631             }
5632             media = MEDIA_CDROM;
5633         } else {
5634             fprintf(stderr, "qemu: '%s' invalid media\n", str);
5635             return -1;
5636         }
5637     }
5638
5639     if (get_param_value(buf, sizeof(buf), "snapshot", str)) {
5640         if (!strcmp(buf, "on"))
5641             snapshot = 1;
5642         else if (!strcmp(buf, "off"))
5643             snapshot = 0;
5644         else {
5645             fprintf(stderr, "qemu: '%s' invalid snapshot option\n", str);
5646             return -1;
5647         }
5648     }
5649
5650     if (get_param_value(buf, sizeof(buf), "cache", str)) {
5651         if (!strcmp(buf, "off"))
5652             cache = 0;
5653         else if (!strcmp(buf, "on"))
5654             cache = 1;
5655         else {
5656            fprintf(stderr, "qemu: invalid cache option\n");
5657            return -1;
5658         }
5659     }
5660
5661     if (get_param_value(buf, sizeof(buf), "format", str)) {
5662        if (strcmp(buf, "?") == 0) {
5663             fprintf(stderr, "qemu: Supported formats:");
5664             bdrv_iterate_format(bdrv_format_print, NULL);
5665             fprintf(stderr, "\n");
5666             return -1;
5667         }
5668         drv = bdrv_find_format(buf);
5669         if (!drv) {
5670             fprintf(stderr, "qemu: '%s' invalid format\n", buf);
5671             return -1;
5672         }
5673     }
5674
5675     if (arg->file == NULL)
5676         get_param_value(file, sizeof(file), "file", str);
5677     else
5678         pstrcpy(file, sizeof(file), arg->file);
5679
5680     /* compute bus and unit according index */
5681
5682     if (index != -1) {
5683         if (bus_id != 0 || unit_id != -1) {
5684             fprintf(stderr,
5685                     "qemu: '%s' index cannot be used with bus and unit\n", str);
5686             return -1;
5687         }
5688         if (max_devs == 0)
5689         {
5690             unit_id = index;
5691             bus_id = 0;
5692         } else {
5693             unit_id = index % max_devs;
5694             bus_id = index / max_devs;
5695         }
5696     }
5697
5698     /* if user doesn't specify a unit_id,
5699      * try to find the first free
5700      */
5701
5702     if (unit_id == -1) {
5703        unit_id = 0;
5704        while (drive_get_index(type, bus_id, unit_id) != -1) {
5705            unit_id++;
5706            if (max_devs && unit_id >= max_devs) {
5707                unit_id -= max_devs;
5708                bus_id++;
5709            }
5710        }
5711     }
5712
5713     /* check unit id */
5714
5715     if (max_devs && unit_id >= max_devs) {
5716         fprintf(stderr, "qemu: '%s' unit %d too big (max is %d)\n",
5717                         str, unit_id, max_devs - 1);
5718         return -1;
5719     }
5720
5721     /*
5722      * ignore multiple definitions
5723      */
5724
5725     if (drive_get_index(type, bus_id, unit_id) != -1)
5726         return 0;
5727
5728     /* init */
5729
5730     if (type == IF_IDE || type == IF_SCSI)
5731         mediastr = (media == MEDIA_CDROM) ? "-cd" : "-hd";
5732     if (max_devs)
5733         snprintf(buf, sizeof(buf), "%s%i%s%i",
5734                  devname, bus_id, mediastr, unit_id);
5735     else
5736         snprintf(buf, sizeof(buf), "%s%s%i",
5737                  devname, mediastr, unit_id);
5738     bdrv = bdrv_new(buf);
5739     drives_table[nb_drives].bdrv = bdrv;
5740     drives_table[nb_drives].type = type;
5741     drives_table[nb_drives].bus = bus_id;
5742     drives_table[nb_drives].unit = unit_id;
5743     nb_drives++;
5744
5745     switch(type) {
5746     case IF_IDE:
5747     case IF_SCSI:
5748         switch(media) {
5749         case MEDIA_DISK:
5750             if (cyls != 0) {
5751                 bdrv_set_geometry_hint(bdrv, cyls, heads, secs);
5752                 bdrv_set_translation_hint(bdrv, translation);
5753             }
5754             break;
5755         case MEDIA_CDROM:
5756             bdrv_set_type_hint(bdrv, BDRV_TYPE_CDROM);
5757             break;
5758         }
5759         break;
5760     case IF_SD:
5761         /* FIXME: This isn't really a floppy, but it's a reasonable
5762            approximation.  */
5763     case IF_FLOPPY:
5764         bdrv_set_type_hint(bdrv, BDRV_TYPE_FLOPPY);
5765         break;
5766     case IF_PFLASH:
5767     case IF_MTD:
5768         break;
5769     }
5770     if (!file[0])
5771         return 0;
5772     bdrv_flags = 0;
5773     if (snapshot)
5774         bdrv_flags |= BDRV_O_SNAPSHOT;
5775     if (!cache)
5776         bdrv_flags |= BDRV_O_DIRECT;
5777     if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0 || qemu_key_check(bdrv, file)) {
5778         fprintf(stderr, "qemu: could not open disk image %s\n",
5779                         file);
5780         return -1;
5781     }
5782     return 0;
5783 }
5784
5785 /***********************************************************/
5786 /* USB devices */
5787
5788 static USBPort *used_usb_ports;
5789 static USBPort *free_usb_ports;
5790
5791 /* ??? Maybe change this to register a hub to keep track of the topology.  */
5792 void qemu_register_usb_port(USBPort *port, void *opaque, int index,
5793                             usb_attachfn attach)
5794 {
5795     port->opaque = opaque;
5796     port->index = index;
5797     port->attach = attach;
5798     port->next = free_usb_ports;
5799     free_usb_ports = port;
5800 }
5801
5802 int usb_device_add_dev(USBDevice *dev)
5803 {
5804     USBPort *port;
5805
5806     /* Find a USB port to add the device to.  */
5807     port = free_usb_ports;
5808     if (!port->next) {
5809         USBDevice *hub;
5810
5811         /* Create a new hub and chain it on.  */
5812         free_usb_ports = NULL;
5813         port->next = used_usb_ports;
5814         used_usb_ports = port;
5815
5816         hub = usb_hub_init(VM_USB_HUB_SIZE);
5817         usb_attach(port, hub);
5818         port = free_usb_ports;
5819     }
5820
5821     free_usb_ports = port->next;
5822     port->next = used_usb_ports;
5823     used_usb_ports = port;
5824     usb_attach(port, dev);
5825     return 0;
5826 }
5827
5828 static int usb_device_add(const char *devname)
5829 {
5830     const char *p;
5831     USBDevice *dev;
5832
5833     if (!free_usb_ports)
5834         return -1;
5835
5836     if (strstart(devname, "host:", &p)) {
5837         dev = usb_host_device_open(p);
5838     } else if (!strcmp(devname, "mouse")) {
5839         dev = usb_mouse_init();
5840     } else if (!strcmp(devname, "tablet")) {
5841         dev = usb_tablet_init();
5842     } else if (!strcmp(devname, "keyboard")) {
5843         dev = usb_keyboard_init();
5844     } else if (strstart(devname, "disk:", &p)) {
5845         dev = usb_msd_init(p);
5846     } else if (!strcmp(devname, "wacom-tablet")) {
5847         dev = usb_wacom_init();
5848     } else if (strstart(devname, "serial:", &p)) {
5849         dev = usb_serial_init(p);
5850 #ifdef CONFIG_BRLAPI
5851     } else if (!strcmp(devname, "braille")) {
5852         dev = usb_baum_init();
5853 #endif
5854     } else if (strstart(devname, "net:", &p)) {
5855         int nic = nb_nics;
5856
5857         if (net_client_init("nic", p) < 0)
5858             return -1;
5859         nd_table[nic].model = "usb";
5860         dev = usb_net_init(&nd_table[nic]);
5861     } else {
5862         return -1;
5863     }
5864     if (!dev)
5865         return -1;
5866
5867     return usb_device_add_dev(dev);
5868 }
5869
5870 int usb_device_del_addr(int bus_num, int addr)
5871 {
5872     USBPort *port;
5873     USBPort **lastp;
5874     USBDevice *dev;
5875
5876     if (!used_usb_ports)
5877         return -1;
5878
5879     if (bus_num != 0)
5880         return -1;
5881
5882     lastp = &used_usb_ports;
5883     port = used_usb_ports;
5884     while (port && port->dev->addr != addr) {
5885         lastp = &port->next;
5886         port = port->next;
5887     }
5888
5889     if (!port)
5890         return -1;
5891
5892     dev = port->dev;
5893     *lastp = port->next;
5894     usb_attach(port, NULL);
5895     dev->handle_destroy(dev);
5896     port->next = free_usb_ports;
5897     free_usb_ports = port;
5898     return 0;
5899 }
5900
5901 static int usb_device_del(const char *devname)
5902 {
5903     int bus_num, addr;
5904     const char *p;
5905
5906     if (strstart(devname, "host:", &p))
5907         return usb_host_device_close(p);
5908
5909     if (!used_usb_ports)
5910         return -1;
5911
5912     p = strchr(devname, '.');
5913     if (!p)
5914         return -1;
5915     bus_num = strtoul(devname, NULL, 0);
5916     addr = strtoul(p + 1, NULL, 0);
5917
5918     return usb_device_del_addr(bus_num, addr);
5919 }
5920
5921 void do_usb_add(const char *devname)
5922 {
5923     usb_device_add(devname);
5924 }
5925
5926 void do_usb_del(const char *devname)
5927 {
5928     usb_device_del(devname);
5929 }
5930
5931 void usb_info(void)
5932 {
5933     USBDevice *dev;
5934     USBPort *port;
5935     const char *speed_str;
5936
5937     if (!usb_enabled) {
5938         term_printf("USB support not enabled\n");
5939         return;
5940     }
5941
5942     for (port = used_usb_ports; port; port = port->next) {
5943         dev = port->dev;
5944         if (!dev)
5945             continue;
5946         switch(dev->speed) {
5947         case USB_SPEED_LOW:
5948             speed_str = "1.5";
5949             break;
5950         case USB_SPEED_FULL:
5951             speed_str = "12";
5952             break;
5953         case USB_SPEED_HIGH:
5954             speed_str = "480";
5955             break;
5956         default:
5957             speed_str = "?";
5958             break;
5959         }
5960         term_printf("  Device %d.%d, Speed %s Mb/s, Product %s\n",
5961                     0, dev->addr, speed_str, dev->devname);
5962     }
5963 }
5964
5965 /***********************************************************/
5966 /* PCMCIA/Cardbus */
5967
5968 static struct pcmcia_socket_entry_s {
5969     struct pcmcia_socket_s *socket;
5970     struct pcmcia_socket_entry_s *next;
5971 } *pcmcia_sockets = 0;
5972
5973 void pcmcia_socket_register(struct pcmcia_socket_s *socket)
5974 {
5975     struct pcmcia_socket_entry_s *entry;
5976
5977     entry = qemu_malloc(sizeof(struct pcmcia_socket_entry_s));
5978     entry->socket = socket;
5979     entry->next = pcmcia_sockets;
5980     pcmcia_sockets = entry;
5981 }
5982
5983 void pcmcia_socket_unregister(struct pcmcia_socket_s *socket)
5984 {
5985     struct pcmcia_socket_entry_s *entry, **ptr;
5986
5987     ptr = &pcmcia_sockets;
5988     for (entry = *ptr; entry; ptr = &entry->next, entry = *ptr)
5989         if (entry->socket == socket) {
5990             *ptr = entry->next;
5991             qemu_free(entry);
5992         }
5993 }
5994
5995 void pcmcia_info(void)
5996 {
5997     struct pcmcia_socket_entry_s *iter;
5998     if (!pcmcia_sockets)
5999         term_printf("No PCMCIA sockets\n");
6000
6001     for (iter = pcmcia_sockets; iter; iter = iter->next)
6002         term_printf("%s: %s\n", iter->socket->slot_string,
6003                     iter->socket->attached ? iter->socket->card_string :
6004                     "Empty");
6005 }
6006
6007 /***********************************************************/
6008 /* dumb display */
6009
6010 static void dumb_update(DisplayState *ds, int x, int y, int w, int h)
6011 {
6012 }
6013
6014 static void dumb_resize(DisplayState *ds, int w, int h)
6015 {
6016 }
6017
6018 static void dumb_refresh(DisplayState *ds)
6019 {
6020 #if defined(CONFIG_SDL)
6021     vga_hw_update();
6022 #endif
6023 }
6024
6025 static void dumb_display_init(DisplayState *ds)
6026 {
6027     ds->data = NULL;
6028     ds->linesize = 0;
6029     ds->depth = 0;
6030     ds->dpy_update = dumb_update;
6031     ds->dpy_resize = dumb_resize;
6032     ds->dpy_refresh = dumb_refresh;
6033     ds->gui_timer_interval = 500;
6034     ds->idle = 1;
6035 }
6036
6037 /***********************************************************/
6038 /* I/O handling */
6039
6040 #define MAX_IO_HANDLERS 64
6041
6042 typedef struct IOHandlerRecord {
6043     int fd;
6044     IOCanRWHandler *fd_read_poll;
6045     IOHandler *fd_read;
6046     IOHandler *fd_write;
6047     int deleted;
6048     void *opaque;
6049     /* temporary data */
6050     struct pollfd *ufd;
6051     struct IOHandlerRecord *next;
6052 } IOHandlerRecord;
6053
6054 static IOHandlerRecord *first_io_handler;
6055
6056 /* XXX: fd_read_poll should be suppressed, but an API change is
6057    necessary in the character devices to suppress fd_can_read(). */
6058 int qemu_set_fd_handler2(int fd,
6059                          IOCanRWHandler *fd_read_poll,
6060                          IOHandler *fd_read,
6061                          IOHandler *fd_write,
6062                          void *opaque)
6063 {
6064     IOHandlerRecord **pioh, *ioh;
6065
6066     if (!fd_read && !fd_write) {
6067         pioh = &first_io_handler;
6068         for(;;) {
6069             ioh = *pioh;
6070             if (ioh == NULL)
6071                 break;
6072             if (ioh->fd == fd) {
6073                 ioh->deleted = 1;
6074                 break;
6075             }
6076             pioh = &ioh->next;
6077         }
6078     } else {
6079         for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
6080             if (ioh->fd == fd)
6081                 goto found;
6082         }
6083         ioh = qemu_mallocz(sizeof(IOHandlerRecord));
6084         if (!ioh)
6085             return -1;
6086         ioh->next = first_io_handler;
6087         first_io_handler = ioh;
6088     found:
6089         ioh->fd = fd;
6090         ioh->fd_read_poll = fd_read_poll;
6091         ioh->fd_read = fd_read;
6092         ioh->fd_write = fd_write;
6093         ioh->opaque = opaque;
6094         ioh->deleted = 0;
6095     }
6096     return 0;
6097 }
6098
6099 int qemu_set_fd_handler(int fd,
6100                         IOHandler *fd_read,
6101                         IOHandler *fd_write,
6102                         void *opaque)
6103 {
6104     return qemu_set_fd_handler2(fd, NULL, fd_read, fd_write, opaque);
6105 }
6106
6107 /***********************************************************/
6108 /* Polling handling */
6109
6110 typedef struct PollingEntry {
6111     PollingFunc *func;
6112     void *opaque;
6113     struct PollingEntry *next;
6114 } PollingEntry;
6115
6116 static PollingEntry *first_polling_entry;
6117
6118 int qemu_add_polling_cb(PollingFunc *func, void *opaque)
6119 {
6120     PollingEntry **ppe, *pe;
6121     pe = qemu_mallocz(sizeof(PollingEntry));
6122     if (!pe)
6123         return -1;
6124     pe->func = func;
6125     pe->opaque = opaque;
6126     for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next);
6127     *ppe = pe;
6128     return 0;
6129 }
6130
6131 void qemu_del_polling_cb(PollingFunc *func, void *opaque)
6132 {
6133     PollingEntry **ppe, *pe;
6134     for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next) {
6135         pe = *ppe;
6136         if (pe->func == func && pe->opaque == opaque) {
6137             *ppe = pe->next;
6138             qemu_free(pe);
6139             break;
6140         }
6141     }
6142 }
6143
6144 #ifdef _WIN32
6145 /***********************************************************/
6146 /* Wait objects support */
6147 typedef struct WaitObjects {
6148     int num;
6149     HANDLE events[MAXIMUM_WAIT_OBJECTS + 1];
6150     WaitObjectFunc *func[MAXIMUM_WAIT_OBJECTS + 1];
6151     void *opaque[MAXIMUM_WAIT_OBJECTS + 1];
6152 } WaitObjects;
6153
6154 static WaitObjects wait_objects = {0};
6155
6156 int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
6157 {
6158     WaitObjects *w = &wait_objects;
6159
6160     if (w->num >= MAXIMUM_WAIT_OBJECTS)
6161         return -1;
6162     w->events[w->num] = handle;
6163     w->func[w->num] = func;
6164     w->opaque[w->num] = opaque;
6165     w->num++;
6166     return 0;
6167 }
6168
6169 void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
6170 {
6171     int i, found;
6172     WaitObjects *w = &wait_objects;
6173
6174     found = 0;
6175     for (i = 0; i < w->num; i++) {
6176         if (w->events[i] == handle)
6177             found = 1;
6178         if (found) {
6179             w->events[i] = w->events[i + 1];
6180             w->func[i] = w->func[i + 1];
6181             w->opaque[i] = w->opaque[i + 1];
6182         }
6183     }
6184     if (found)
6185         w->num--;
6186 }
6187 #endif
6188
6189 /***********************************************************/
6190 /* savevm/loadvm support */
6191
6192 #define IO_BUF_SIZE 32768
6193
6194 struct QEMUFile {
6195     QEMUFilePutBufferFunc *put_buffer;
6196     QEMUFileGetBufferFunc *get_buffer;
6197     QEMUFileCloseFunc *close;
6198     QEMUFileRateLimit *rate_limit;
6199     void *opaque;
6200
6201     int64_t buf_offset; /* start of buffer when writing, end of buffer
6202                            when reading */
6203     int buf_index;
6204     int buf_size; /* 0 when writing */
6205     uint8_t buf[IO_BUF_SIZE];
6206 };
6207
6208 typedef struct QEMUFileFD
6209 {
6210     int fd;
6211     QEMUFile *file;
6212 } QEMUFileFD;
6213
6214 static void fd_put_notify(void *opaque)
6215 {
6216     QEMUFileFD *s = opaque;
6217
6218     /* Remove writable callback and do a put notify */
6219     qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
6220     qemu_file_put_notify(s->file);
6221 }
6222
6223 static void fd_put_buffer(void *opaque, const uint8_t *buf,
6224                           int64_t pos, int size)
6225 {
6226     QEMUFileFD *s = opaque;
6227     ssize_t len;
6228
6229     do {
6230         len = write(s->fd, buf, size);
6231     } while (len == -1 && errno == EINTR);
6232
6233     if (len == -1)
6234         len = -errno;
6235
6236     /* When the fd becomes writable again, register a callback to do
6237      * a put notify */
6238     if (len == -EAGAIN)
6239         qemu_set_fd_handler2(s->fd, NULL, NULL, fd_put_notify, s);
6240 }
6241
6242 static int fd_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
6243 {
6244     QEMUFileFD *s = opaque;
6245     ssize_t len;
6246
6247     do {
6248         len = read(s->fd, buf, size);
6249     } while (len == -1 && errno == EINTR);
6250
6251     if (len == -1)
6252         len = -errno;
6253
6254     return len;
6255 }
6256
6257 static int fd_close(void *opaque)
6258 {
6259     QEMUFileFD *s = opaque;
6260     qemu_free(s);
6261     return 0;
6262 }
6263
6264 QEMUFile *qemu_fopen_fd(int fd)
6265 {
6266     QEMUFileFD *s = qemu_mallocz(sizeof(QEMUFileFD));
6267
6268     if (s == NULL)
6269         return NULL;
6270
6271     s->fd = fd;
6272     s->file = qemu_fopen_ops(s, fd_put_buffer, fd_get_buffer, fd_close, NULL);
6273     return s->file;
6274 }
6275
6276 typedef struct QEMUFileStdio
6277 {
6278     FILE *outfile;
6279 } QEMUFileStdio;
6280
6281 static void file_put_buffer(void *opaque, const uint8_t *buf,
6282                             int64_t pos, int size)
6283 {
6284     QEMUFileStdio *s = opaque;
6285     fseek(s->outfile, pos, SEEK_SET);
6286     fwrite(buf, 1, size, s->outfile);
6287 }
6288
6289 static int file_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
6290 {
6291     QEMUFileStdio *s = opaque;
6292     fseek(s->outfile, pos, SEEK_SET);
6293     return fread(buf, 1, size, s->outfile);
6294 }
6295
6296 static int file_close(void *opaque)
6297 {
6298     QEMUFileStdio *s = opaque;
6299     fclose(s->outfile);
6300     qemu_free(s);
6301     return 0;
6302 }
6303
6304 QEMUFile *qemu_fopen(const char *filename, const char *mode)
6305 {
6306     QEMUFileStdio *s;
6307
6308     s = qemu_mallocz(sizeof(QEMUFileStdio));
6309     if (!s)
6310         return NULL;
6311
6312     s->outfile = fopen(filename, mode);
6313     if (!s->outfile)
6314         goto fail;
6315
6316     if (!strcmp(mode, "wb"))
6317         return qemu_fopen_ops(s, file_put_buffer, NULL, file_close, NULL);
6318     else if (!strcmp(mode, "rb"))
6319         return qemu_fopen_ops(s, NULL, file_get_buffer, file_close, NULL);
6320
6321 fail:
6322     if (s->outfile)
6323         fclose(s->outfile);
6324     qemu_free(s);
6325     return NULL;
6326 }
6327
6328 typedef struct QEMUFileBdrv
6329 {
6330     BlockDriverState *bs;
6331     int64_t base_offset;
6332 } QEMUFileBdrv;
6333
6334 static void bdrv_put_buffer(void *opaque, const uint8_t *buf,
6335                             int64_t pos, int size)
6336 {
6337     QEMUFileBdrv *s = opaque;
6338     bdrv_pwrite(s->bs, s->base_offset + pos, buf, size);
6339 }
6340
6341 static int bdrv_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
6342 {
6343     QEMUFileBdrv *s = opaque;
6344     return bdrv_pread(s->bs, s->base_offset + pos, buf, size);
6345 }
6346
6347 static int bdrv_fclose(void *opaque)
6348 {
6349     QEMUFileBdrv *s = opaque;
6350     qemu_free(s);
6351     return 0;
6352 }
6353
6354 static QEMUFile *qemu_fopen_bdrv(BlockDriverState *bs, int64_t offset, int is_writable)
6355 {
6356     QEMUFileBdrv *s;
6357
6358     s = qemu_mallocz(sizeof(QEMUFileBdrv));
6359     if (!s)
6360         return NULL;
6361
6362     s->bs = bs;
6363     s->base_offset = offset;
6364
6365     if (is_writable)
6366         return qemu_fopen_ops(s, bdrv_put_buffer, NULL, bdrv_fclose, NULL);
6367
6368     return qemu_fopen_ops(s, NULL, bdrv_get_buffer, bdrv_fclose, NULL);
6369 }
6370
6371 QEMUFile *qemu_fopen_ops(void *opaque, QEMUFilePutBufferFunc *put_buffer,
6372                          QEMUFileGetBufferFunc *get_buffer,
6373                          QEMUFileCloseFunc *close,
6374                          QEMUFileRateLimit *rate_limit)
6375 {
6376     QEMUFile *f;
6377
6378     f = qemu_mallocz(sizeof(QEMUFile));
6379     if (!f)
6380         return NULL;
6381
6382     f->opaque = opaque;
6383     f->put_buffer = put_buffer;
6384     f->get_buffer = get_buffer;
6385     f->close = close;
6386     f->rate_limit = rate_limit;
6387
6388     return f;
6389 }
6390
6391 void qemu_fflush(QEMUFile *f)
6392 {
6393     if (!f->put_buffer)
6394         return;
6395
6396     if (f->buf_index > 0) {
6397         f->put_buffer(f->opaque, f->buf, f->buf_offset, f->buf_index);
6398         f->buf_offset += f->buf_index;
6399         f->buf_index = 0;
6400     }
6401 }
6402
6403 static void qemu_fill_buffer(QEMUFile *f)
6404 {
6405     int len;
6406
6407     if (!f->get_buffer)
6408         return;
6409
6410     len = f->get_buffer(f->opaque, f->buf, f->buf_offset, IO_BUF_SIZE);
6411     if (len < 0)
6412         len = 0;
6413
6414     f->buf_index = 0;
6415     f->buf_size = len;
6416     f->buf_offset += len;
6417 }
6418
6419 int qemu_fclose(QEMUFile *f)
6420 {
6421     int ret = 0;
6422     qemu_fflush(f);
6423     if (f->close)
6424         ret = f->close(f->opaque);
6425     qemu_free(f);
6426     return ret;
6427 }
6428
6429 void qemu_file_put_notify(QEMUFile *f)
6430 {
6431     f->put_buffer(f->opaque, NULL, 0, 0);
6432 }
6433
6434 void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size)
6435 {
6436     int l;
6437     while (size > 0) {
6438         l = IO_BUF_SIZE - f->buf_index;
6439         if (l > size)
6440             l = size;
6441         memcpy(f->buf + f->buf_index, buf, l);
6442         f->buf_index += l;
6443         buf += l;
6444         size -= l;
6445         if (f->buf_index >= IO_BUF_SIZE)
6446             qemu_fflush(f);
6447     }
6448 }
6449
6450 void qemu_put_byte(QEMUFile *f, int v)
6451 {
6452     f->buf[f->buf_index++] = v;
6453     if (f->buf_index >= IO_BUF_SIZE)
6454         qemu_fflush(f);
6455 }
6456
6457 int qemu_get_buffer(QEMUFile *f, uint8_t *buf, int size1)
6458 {
6459     int size, l;
6460
6461     size = size1;
6462     while (size > 0) {
6463         l = f->buf_size - f->buf_index;
6464         if (l == 0) {
6465             qemu_fill_buffer(f);
6466             l = f->buf_size - f->buf_index;
6467             if (l == 0)
6468                 break;
6469         }
6470         if (l > size)
6471             l = size;
6472         memcpy(buf, f->buf + f->buf_index, l);
6473         f->buf_index += l;
6474         buf += l;
6475         size -= l;
6476     }
6477     return size1 - size;
6478 }
6479
6480 int qemu_get_byte(QEMUFile *f)
6481 {
6482     if (f->buf_index >= f->buf_size) {
6483         qemu_fill_buffer(f);
6484         if (f->buf_index >= f->buf_size)
6485             return 0;
6486     }
6487     return f->buf[f->buf_index++];
6488 }
6489
6490 int64_t qemu_ftell(QEMUFile *f)
6491 {
6492     return f->buf_offset - f->buf_size + f->buf_index;
6493 }
6494
6495 int64_t qemu_fseek(QEMUFile *f, int64_t pos, int whence)
6496 {
6497     if (whence == SEEK_SET) {
6498         /* nothing to do */
6499     } else if (whence == SEEK_CUR) {
6500         pos += qemu_ftell(f);
6501     } else {
6502         /* SEEK_END not supported */
6503         return -1;
6504     }
6505     if (f->put_buffer) {
6506         qemu_fflush(f);
6507         f->buf_offset = pos;
6508     } else {
6509         f->buf_offset = pos;
6510         f->buf_index = 0;
6511         f->buf_size = 0;
6512     }
6513     return pos;
6514 }
6515
6516 int qemu_file_rate_limit(QEMUFile *f)
6517 {
6518     if (f->rate_limit)
6519         return f->rate_limit(f->opaque);
6520
6521     return 0;
6522 }
6523
6524 void qemu_put_be16(QEMUFile *f, unsigned int v)
6525 {
6526     qemu_put_byte(f, v >> 8);
6527     qemu_put_byte(f, v);
6528 }
6529
6530 void qemu_put_be32(QEMUFile *f, unsigned int v)
6531 {
6532     qemu_put_byte(f, v >> 24);
6533     qemu_put_byte(f, v >> 16);
6534     qemu_put_byte(f, v >> 8);
6535     qemu_put_byte(f, v);
6536 }
6537
6538 void qemu_put_be64(QEMUFile *f, uint64_t v)
6539 {
6540     qemu_put_be32(f, v >> 32);
6541     qemu_put_be32(f, v);
6542 }
6543
6544 unsigned int qemu_get_be16(QEMUFile *f)
6545 {
6546     unsigned int v;
6547     v = qemu_get_byte(f) << 8;
6548     v |= qemu_get_byte(f);
6549     return v;
6550 }
6551
6552 unsigned int qemu_get_be32(QEMUFile *f)
6553 {
6554     unsigned int v;
6555     v = qemu_get_byte(f) << 24;
6556     v |= qemu_get_byte(f) << 16;
6557     v |= qemu_get_byte(f) << 8;
6558     v |= qemu_get_byte(f);
6559     return v;
6560 }
6561
6562 uint64_t qemu_get_be64(QEMUFile *f)
6563 {
6564     uint64_t v;
6565     v = (uint64_t)qemu_get_be32(f) << 32;
6566     v |= qemu_get_be32(f);
6567     return v;
6568 }
6569
6570 typedef struct SaveStateEntry {
6571     char idstr[256];
6572     int instance_id;
6573     int version_id;
6574     int section_id;
6575     SaveLiveStateHandler *save_live_state;
6576     SaveStateHandler *save_state;
6577     LoadStateHandler *load_state;
6578     void *opaque;
6579     struct SaveStateEntry *next;
6580 } SaveStateEntry;
6581
6582 static SaveStateEntry *first_se;
6583
6584 /* TODO: Individual devices generally have very little idea about the rest
6585    of the system, so instance_id should be removed/replaced.
6586    Meanwhile pass -1 as instance_id if you do not already have a clearly
6587    distinguishing id for all instances of your device class. */
6588 int register_savevm_live(const char *idstr,
6589                          int instance_id,
6590                          int version_id,
6591                          SaveLiveStateHandler *save_live_state,
6592                          SaveStateHandler *save_state,
6593                          LoadStateHandler *load_state,
6594                          void *opaque)
6595 {
6596     SaveStateEntry *se, **pse;
6597     static int global_section_id;
6598
6599     se = qemu_malloc(sizeof(SaveStateEntry));
6600     if (!se)
6601         return -1;
6602     pstrcpy(se->idstr, sizeof(se->idstr), idstr);
6603     se->instance_id = (instance_id == -1) ? 0 : instance_id;
6604     se->version_id = version_id;
6605     se->section_id = global_section_id++;
6606     se->save_live_state = save_live_state;
6607     se->save_state = save_state;
6608     se->load_state = load_state;
6609     se->opaque = opaque;
6610     se->next = NULL;
6611
6612     /* add at the end of list */
6613     pse = &first_se;
6614     while (*pse != NULL) {
6615         if (instance_id == -1
6616                 && strcmp(se->idstr, (*pse)->idstr) == 0
6617                 && se->instance_id <= (*pse)->instance_id)
6618             se->instance_id = (*pse)->instance_id + 1;
6619         pse = &(*pse)->next;
6620     }
6621     *pse = se;
6622     return 0;
6623 }
6624
6625 int register_savevm(const char *idstr,
6626                     int instance_id,
6627                     int version_id,
6628                     SaveStateHandler *save_state,
6629                     LoadStateHandler *load_state,
6630                     void *opaque)
6631 {
6632     return register_savevm_live(idstr, instance_id, version_id,
6633                                 NULL, save_state, load_state, opaque);
6634 }
6635
6636 #define QEMU_VM_FILE_MAGIC           0x5145564d
6637 #define QEMU_VM_FILE_VERSION_COMPAT  0x00000002
6638 #define QEMU_VM_FILE_VERSION         0x00000003
6639
6640 #define QEMU_VM_EOF                  0x00
6641 #define QEMU_VM_SECTION_START        0x01
6642 #define QEMU_VM_SECTION_PART         0x02
6643 #define QEMU_VM_SECTION_END          0x03
6644 #define QEMU_VM_SECTION_FULL         0x04
6645
6646 int qemu_savevm_state_begin(QEMUFile *f)
6647 {
6648     SaveStateEntry *se;
6649
6650     qemu_put_be32(f, QEMU_VM_FILE_MAGIC);
6651     qemu_put_be32(f, QEMU_VM_FILE_VERSION);
6652
6653     for (se = first_se; se != NULL; se = se->next) {
6654         int len;
6655
6656         if (se->save_live_state == NULL)
6657             continue;
6658
6659         /* Section type */
6660         qemu_put_byte(f, QEMU_VM_SECTION_START);
6661         qemu_put_be32(f, se->section_id);
6662
6663         /* ID string */
6664         len = strlen(se->idstr);
6665         qemu_put_byte(f, len);
6666         qemu_put_buffer(f, (uint8_t *)se->idstr, len);
6667
6668         qemu_put_be32(f, se->instance_id);
6669         qemu_put_be32(f, se->version_id);
6670
6671         se->save_live_state(f, QEMU_VM_SECTION_START, se->opaque);
6672     }
6673
6674     return 0;
6675 }
6676
6677 int qemu_savevm_state_iterate(QEMUFile *f)
6678 {
6679     SaveStateEntry *se;
6680     int ret = 1;
6681
6682     for (se = first_se; se != NULL; se = se->next) {
6683         if (se->save_live_state == NULL)
6684             continue;
6685
6686         /* Section type */
6687         qemu_put_byte(f, QEMU_VM_SECTION_PART);
6688         qemu_put_be32(f, se->section_id);
6689
6690         ret &= !!se->save_live_state(f, QEMU_VM_SECTION_PART, se->opaque);
6691     }
6692
6693     if (ret)
6694         return 1;
6695
6696     return 0;
6697 }
6698
6699 int qemu_savevm_state_complete(QEMUFile *f)
6700 {
6701     SaveStateEntry *se;
6702
6703     for (se = first_se; se != NULL; se = se->next) {
6704         if (se->save_live_state == NULL)
6705             continue;
6706
6707         /* Section type */
6708         qemu_put_byte(f, QEMU_VM_SECTION_END);
6709         qemu_put_be32(f, se->section_id);
6710
6711         se->save_live_state(f, QEMU_VM_SECTION_END, se->opaque);
6712     }
6713
6714     for(se = first_se; se != NULL; se = se->next) {
6715         int len;
6716
6717         if (se->save_state == NULL)
6718             continue;
6719
6720         /* Section type */
6721         qemu_put_byte(f, QEMU_VM_SECTION_FULL);
6722         qemu_put_be32(f, se->section_id);
6723
6724         /* ID string */
6725         len = strlen(se->idstr);
6726         qemu_put_byte(f, len);
6727         qemu_put_buffer(f, (uint8_t *)se->idstr, len);
6728
6729         qemu_put_be32(f, se->instance_id);
6730         qemu_put_be32(f, se->version_id);
6731
6732         se->save_state(f, se->opaque);
6733     }
6734
6735     qemu_put_byte(f, QEMU_VM_EOF);
6736
6737     return 0;
6738 }
6739
6740 int qemu_savevm_state(QEMUFile *f)
6741 {
6742     int saved_vm_running;
6743     int ret;
6744
6745     saved_vm_running = vm_running;
6746     vm_stop(0);
6747
6748     ret = qemu_savevm_state_begin(f);
6749     if (ret < 0)
6750         goto out;
6751
6752     do {
6753         ret = qemu_savevm_state_iterate(f);
6754         if (ret < 0)
6755             goto out;
6756     } while (ret == 0);
6757
6758     ret = qemu_savevm_state_complete(f);
6759
6760 out:
6761     if (saved_vm_running)
6762         vm_start();
6763     return ret;
6764 }
6765
6766 static SaveStateEntry *find_se(const char *idstr, int instance_id)
6767 {
6768     SaveStateEntry *se;
6769
6770     for(se = first_se; se != NULL; se = se->next) {
6771         if (!strcmp(se->idstr, idstr) &&
6772             instance_id == se->instance_id)
6773             return se;
6774     }
6775     return NULL;
6776 }
6777
6778 typedef struct LoadStateEntry {
6779     SaveStateEntry *se;
6780     int section_id;
6781     int version_id;
6782     struct LoadStateEntry *next;
6783 } LoadStateEntry;
6784
6785 static int qemu_loadvm_state_v2(QEMUFile *f)
6786 {
6787     SaveStateEntry *se;
6788     int len, ret, instance_id, record_len, version_id;
6789     int64_t total_len, end_pos, cur_pos;
6790     char idstr[256];
6791
6792     total_len = qemu_get_be64(f);
6793     end_pos = total_len + qemu_ftell(f);
6794     for(;;) {
6795         if (qemu_ftell(f) >= end_pos)
6796             break;
6797         len = qemu_get_byte(f);
6798         qemu_get_buffer(f, (uint8_t *)idstr, len);
6799         idstr[len] = '\0';
6800         instance_id = qemu_get_be32(f);
6801         version_id = qemu_get_be32(f);
6802         record_len = qemu_get_be32(f);
6803         cur_pos = qemu_ftell(f);
6804         se = find_se(idstr, instance_id);
6805         if (!se) {
6806             fprintf(stderr, "qemu: warning: instance 0x%x of device '%s' not present in current VM\n",
6807                     instance_id, idstr);
6808         } else {
6809             ret = se->load_state(f, se->opaque, version_id);
6810             if (ret < 0) {
6811                 fprintf(stderr, "qemu: warning: error while loading state for instance 0x%x of device '%s'\n",
6812                         instance_id, idstr);
6813             }
6814         }
6815         /* always seek to exact end of record */
6816         qemu_fseek(f, cur_pos + record_len, SEEK_SET);
6817     }
6818     return 0;
6819 }
6820
6821 int qemu_loadvm_state(QEMUFile *f)
6822 {
6823     LoadStateEntry *first_le = NULL;
6824     uint8_t section_type;
6825     unsigned int v;
6826     int ret;
6827
6828     v = qemu_get_be32(f);
6829     if (v != QEMU_VM_FILE_MAGIC)
6830         return -EINVAL;
6831
6832     v = qemu_get_be32(f);
6833     if (v == QEMU_VM_FILE_VERSION_COMPAT)
6834         return qemu_loadvm_state_v2(f);
6835     if (v != QEMU_VM_FILE_VERSION)
6836         return -ENOTSUP;
6837
6838     while ((section_type = qemu_get_byte(f)) != QEMU_VM_EOF) {
6839         uint32_t instance_id, version_id, section_id;
6840         LoadStateEntry *le;
6841         SaveStateEntry *se;
6842         char idstr[257];
6843         int len;
6844
6845         switch (section_type) {
6846         case QEMU_VM_SECTION_START:
6847         case QEMU_VM_SECTION_FULL:
6848             /* Read section start */
6849             section_id = qemu_get_be32(f);
6850             len = qemu_get_byte(f);
6851             qemu_get_buffer(f, (uint8_t *)idstr, len);
6852             idstr[len] = 0;
6853             instance_id = qemu_get_be32(f);
6854             version_id = qemu_get_be32(f);
6855
6856             /* Find savevm section */
6857             se = find_se(idstr, instance_id);
6858             if (se == NULL) {
6859                 fprintf(stderr, "Unknown savevm section or instance '%s' %d\n", idstr, instance_id);
6860                 ret = -EINVAL;
6861                 goto out;
6862             }
6863
6864             /* Validate version */
6865             if (version_id > se->version_id) {
6866                 fprintf(stderr, "savevm: unsupported version %d for '%s' v%d\n",
6867                         version_id, idstr, se->version_id);
6868                 ret = -EINVAL;
6869                 goto out;
6870             }
6871
6872             /* Add entry */
6873             le = qemu_mallocz(sizeof(*le));
6874             if (le == NULL) {
6875                 ret = -ENOMEM;
6876                 goto out;
6877             }
6878
6879             le->se = se;
6880             le->section_id = section_id;
6881             le->version_id = version_id;
6882             le->next = first_le;
6883             first_le = le;
6884
6885             le->se->load_state(f, le->se->opaque, le->version_id);
6886             break;
6887         case QEMU_VM_SECTION_PART:
6888         case QEMU_VM_SECTION_END:
6889             section_id = qemu_get_be32(f);
6890
6891             for (le = first_le; le && le->section_id != section_id; le = le->next);
6892             if (le == NULL) {
6893                 fprintf(stderr, "Unknown savevm section %d\n", section_id);
6894                 ret = -EINVAL;
6895                 goto out;
6896             }
6897
6898             le->se->load_state(f, le->se->opaque, le->version_id);
6899             break;
6900         default:
6901             fprintf(stderr, "Unknown savevm section type %d\n", section_type);
6902             ret = -EINVAL;
6903             goto out;
6904         }
6905     }
6906
6907     ret = 0;
6908
6909 out:
6910     while (first_le) {
6911         LoadStateEntry *le = first_le;
6912         first_le = first_le->next;
6913         qemu_free(le);
6914     }
6915
6916     return ret;
6917 }
6918
6919 /* device can contain snapshots */
6920 static int bdrv_can_snapshot(BlockDriverState *bs)
6921 {
6922     return (bs &&
6923             !bdrv_is_removable(bs) &&
6924             !bdrv_is_read_only(bs));
6925 }
6926
6927 /* device must be snapshots in order to have a reliable snapshot */
6928 static int bdrv_has_snapshot(BlockDriverState *bs)
6929 {
6930     return (bs &&
6931             !bdrv_is_removable(bs) &&
6932             !bdrv_is_read_only(bs));
6933 }
6934
6935 static BlockDriverState *get_bs_snapshots(void)
6936 {
6937     BlockDriverState *bs;
6938     int i;
6939
6940     if (bs_snapshots)
6941         return bs_snapshots;
6942     for(i = 0; i <= nb_drives; i++) {
6943         bs = drives_table[i].bdrv;
6944         if (bdrv_can_snapshot(bs))
6945             goto ok;
6946     }
6947     return NULL;
6948  ok:
6949     bs_snapshots = bs;
6950     return bs;
6951 }
6952
6953 static int bdrv_snapshot_find(BlockDriverState *bs, QEMUSnapshotInfo *sn_info,
6954                               const char *name)
6955 {
6956     QEMUSnapshotInfo *sn_tab, *sn;
6957     int nb_sns, i, ret;
6958
6959     ret = -ENOENT;
6960     nb_sns = bdrv_snapshot_list(bs, &sn_tab);
6961     if (nb_sns < 0)
6962         return ret;
6963     for(i = 0; i < nb_sns; i++) {
6964         sn = &sn_tab[i];
6965         if (!strcmp(sn->id_str, name) || !strcmp(sn->name, name)) {
6966             *sn_info = *sn;
6967             ret = 0;
6968             break;
6969         }
6970     }
6971     qemu_free(sn_tab);
6972     return ret;
6973 }
6974
6975 void do_savevm(const char *name)
6976 {
6977     BlockDriverState *bs, *bs1;
6978     QEMUSnapshotInfo sn1, *sn = &sn1, old_sn1, *old_sn = &old_sn1;
6979     int must_delete, ret, i;
6980     BlockDriverInfo bdi1, *bdi = &bdi1;
6981     QEMUFile *f;
6982     int saved_vm_running;
6983 #ifdef _WIN32
6984     struct _timeb tb;
6985 #else
6986     struct timeval tv;
6987 #endif
6988
6989     bs = get_bs_snapshots();
6990     if (!bs) {
6991         term_printf("No block device can accept snapshots\n");
6992         return;
6993     }
6994
6995     /* ??? Should this occur after vm_stop?  */
6996     qemu_aio_flush();
6997
6998     saved_vm_running = vm_running;
6999     vm_stop(0);
7000
7001     must_delete = 0;
7002     if (name) {
7003         ret = bdrv_snapshot_find(bs, old_sn, name);
7004         if (ret >= 0) {
7005             must_delete = 1;
7006         }
7007     }
7008     memset(sn, 0, sizeof(*sn));
7009     if (must_delete) {
7010         pstrcpy(sn->name, sizeof(sn->name), old_sn->name);
7011         pstrcpy(sn->id_str, sizeof(sn->id_str), old_sn->id_str);
7012     } else {
7013         if (name)
7014             pstrcpy(sn->name, sizeof(sn->name), name);
7015     }
7016
7017     /* fill auxiliary fields */
7018 #ifdef _WIN32
7019     _ftime(&tb);
7020     sn->date_sec = tb.time;
7021     sn->date_nsec = tb.millitm * 1000000;
7022 #else
7023     gettimeofday(&tv, NULL);
7024     sn->date_sec = tv.tv_sec;
7025     sn->date_nsec = tv.tv_usec * 1000;
7026 #endif
7027     sn->vm_clock_nsec = qemu_get_clock(vm_clock);
7028
7029     if (bdrv_get_info(bs, bdi) < 0 || bdi->vm_state_offset <= 0) {
7030         term_printf("Device %s does not support VM state snapshots\n",
7031                     bdrv_get_device_name(bs));
7032         goto the_end;
7033     }
7034
7035     /* save the VM state */
7036     f = qemu_fopen_bdrv(bs, bdi->vm_state_offset, 1);
7037     if (!f) {
7038         term_printf("Could not open VM state file\n");
7039         goto the_end;
7040     }
7041     ret = qemu_savevm_state(f);
7042     sn->vm_state_size = qemu_ftell(f);
7043     qemu_fclose(f);
7044     if (ret < 0) {
7045         term_printf("Error %d while writing VM\n", ret);
7046         goto the_end;
7047     }
7048
7049     /* create the snapshots */
7050
7051     for(i = 0; i < nb_drives; i++) {
7052         bs1 = drives_table[i].bdrv;
7053         if (bdrv_has_snapshot(bs1)) {
7054             if (must_delete) {
7055                 ret = bdrv_snapshot_delete(bs1, old_sn->id_str);
7056                 if (ret < 0) {
7057                     term_printf("Error while deleting snapshot on '%s'\n",
7058                                 bdrv_get_device_name(bs1));
7059                 }
7060             }
7061             ret = bdrv_snapshot_create(bs1, sn);
7062             if (ret < 0) {
7063                 term_printf("Error while creating snapshot on '%s'\n",
7064                             bdrv_get_device_name(bs1));
7065             }
7066         }
7067     }
7068
7069  the_end:
7070     if (saved_vm_running)
7071         vm_start();
7072 }
7073
7074 void do_loadvm(const char *name)
7075 {
7076     BlockDriverState *bs, *bs1;
7077     BlockDriverInfo bdi1, *bdi = &bdi1;
7078     QEMUFile *f;
7079     int i, ret;
7080     int saved_vm_running;
7081
7082     bs = get_bs_snapshots();
7083     if (!bs) {
7084         term_printf("No block device supports snapshots\n");
7085         return;
7086     }
7087
7088     /* Flush all IO requests so they don't interfere with the new state.  */
7089     qemu_aio_flush();
7090
7091     saved_vm_running = vm_running;
7092     vm_stop(0);
7093
7094     for(i = 0; i <= nb_drives; i++) {
7095         bs1 = drives_table[i].bdrv;
7096         if (bdrv_has_snapshot(bs1)) {
7097             ret = bdrv_snapshot_goto(bs1, name);
7098             if (ret < 0) {
7099                 if (bs != bs1)
7100                     term_printf("Warning: ");
7101                 switch(ret) {
7102                 case -ENOTSUP:
7103                     term_printf("Snapshots not supported on device '%s'\n",
7104                                 bdrv_get_device_name(bs1));
7105                     break;
7106                 case -ENOENT:
7107                     term_printf("Could not find snapshot '%s' on device '%s'\n",
7108                                 name, bdrv_get_device_name(bs1));
7109                     break;
7110                 default:
7111                     term_printf("Error %d while activating snapshot on '%s'\n",
7112                                 ret, bdrv_get_device_name(bs1));
7113                     break;
7114                 }
7115                 /* fatal on snapshot block device */
7116                 if (bs == bs1)
7117                     goto the_end;
7118             }
7119         }
7120     }
7121
7122     if (bdrv_get_info(bs, bdi) < 0 || bdi->vm_state_offset <= 0) {
7123         term_printf("Device %s does not support VM state snapshots\n",
7124                     bdrv_get_device_name(bs));
7125         return;
7126     }
7127
7128     /* restore the VM state */
7129     f = qemu_fopen_bdrv(bs, bdi->vm_state_offset, 0);
7130     if (!f) {
7131         term_printf("Could not open VM state file\n");
7132         goto the_end;
7133     }
7134     ret = qemu_loadvm_state(f);
7135     qemu_fclose(f);
7136     if (ret < 0) {
7137         term_printf("Error %d while loading VM state\n", ret);
7138     }
7139  the_end:
7140     if (saved_vm_running)
7141         vm_start();
7142 }
7143
7144 void do_delvm(const char *name)
7145 {
7146     BlockDriverState *bs, *bs1;
7147     int i, ret;
7148
7149     bs = get_bs_snapshots();
7150     if (!bs) {
7151         term_printf("No block device supports snapshots\n");
7152         return;
7153     }
7154
7155     for(i = 0; i <= nb_drives; i++) {
7156         bs1 = drives_table[i].bdrv;
7157         if (bdrv_has_snapshot(bs1)) {
7158             ret = bdrv_snapshot_delete(bs1, name);
7159             if (ret < 0) {
7160                 if (ret == -ENOTSUP)
7161                     term_printf("Snapshots not supported on device '%s'\n",
7162                                 bdrv_get_device_name(bs1));
7163                 else
7164                     term_printf("Error %d while deleting snapshot on '%s'\n",
7165                                 ret, bdrv_get_device_name(bs1));
7166             }
7167         }
7168     }
7169 }
7170
7171 void do_info_snapshots(void)
7172 {
7173     BlockDriverState *bs, *bs1;
7174     QEMUSnapshotInfo *sn_tab, *sn;
7175     int nb_sns, i;
7176     char buf[256];
7177
7178     bs = get_bs_snapshots();
7179     if (!bs) {
7180         term_printf("No available block device supports snapshots\n");
7181         return;
7182     }
7183     term_printf("Snapshot devices:");
7184     for(i = 0; i <= nb_drives; i++) {
7185         bs1 = drives_table[i].bdrv;
7186         if (bdrv_has_snapshot(bs1)) {
7187             if (bs == bs1)
7188                 term_printf(" %s", bdrv_get_device_name(bs1));
7189         }
7190     }
7191     term_printf("\n");
7192
7193     nb_sns = bdrv_snapshot_list(bs, &sn_tab);
7194     if (nb_sns < 0) {
7195         term_printf("bdrv_snapshot_list: error %d\n", nb_sns);
7196         return;
7197     }
7198     term_printf("Snapshot list (from %s):\n", bdrv_get_device_name(bs));
7199     term_printf("%s\n", bdrv_snapshot_dump(buf, sizeof(buf), NULL));
7200     for(i = 0; i < nb_sns; i++) {
7201         sn = &sn_tab[i];
7202         term_printf("%s\n", bdrv_snapshot_dump(buf, sizeof(buf), sn));
7203     }
7204     qemu_free(sn_tab);
7205 }
7206
7207 /***********************************************************/
7208 /* ram save/restore */
7209
7210 static int ram_get_page(QEMUFile *f, uint8_t *buf, int len)
7211 {
7212     int v;
7213
7214     v = qemu_get_byte(f);
7215     switch(v) {
7216     case 0:
7217         if (qemu_get_buffer(f, buf, len) != len)
7218             return -EIO;
7219         break;
7220     case 1:
7221         v = qemu_get_byte(f);
7222         memset(buf, v, len);
7223         break;
7224     default:
7225         return -EINVAL;
7226     }
7227     return 0;
7228 }
7229
7230 static int ram_load_v1(QEMUFile *f, void *opaque)
7231 {
7232     int ret;
7233     ram_addr_t i;
7234
7235     if (qemu_get_be32(f) != phys_ram_size)
7236         return -EINVAL;
7237     for(i = 0; i < phys_ram_size; i+= TARGET_PAGE_SIZE) {
7238         ret = ram_get_page(f, phys_ram_base + i, TARGET_PAGE_SIZE);
7239         if (ret)
7240             return ret;
7241     }
7242     return 0;
7243 }
7244
7245 #define BDRV_HASH_BLOCK_SIZE 1024
7246 #define IOBUF_SIZE 4096
7247 #define RAM_CBLOCK_MAGIC 0xfabe
7248
7249 typedef struct RamDecompressState {
7250     z_stream zstream;
7251     QEMUFile *f;
7252     uint8_t buf[IOBUF_SIZE];
7253 } RamDecompressState;
7254
7255 static int ram_decompress_open(RamDecompressState *s, QEMUFile *f)
7256 {
7257     int ret;
7258     memset(s, 0, sizeof(*s));
7259     s->f = f;
7260     ret = inflateInit(&s->zstream);
7261     if (ret != Z_OK)
7262         return -1;
7263     return 0;
7264 }
7265
7266 static int ram_decompress_buf(RamDecompressState *s, uint8_t *buf, int len)
7267 {
7268     int ret, clen;
7269
7270     s->zstream.avail_out = len;
7271     s->zstream.next_out = buf;
7272     while (s->zstream.avail_out > 0) {
7273         if (s->zstream.avail_in == 0) {
7274             if (qemu_get_be16(s->f) != RAM_CBLOCK_MAGIC)
7275                 return -1;
7276             clen = qemu_get_be16(s->f);
7277             if (clen > IOBUF_SIZE)
7278                 return -1;
7279             qemu_get_buffer(s->f, s->buf, clen);
7280             s->zstream.avail_in = clen;
7281             s->zstream.next_in = s->buf;
7282         }
7283         ret = inflate(&s->zstream, Z_PARTIAL_FLUSH);
7284         if (ret != Z_OK && ret != Z_STREAM_END) {
7285             return -1;
7286         }
7287     }
7288     return 0;
7289 }
7290
7291 static void ram_decompress_close(RamDecompressState *s)
7292 {
7293     inflateEnd(&s->zstream);
7294 }
7295
7296 #define RAM_SAVE_FLAG_FULL      0x01
7297 #define RAM_SAVE_FLAG_COMPRESS  0x02
7298 #define RAM_SAVE_FLAG_MEM_SIZE  0x04
7299 #define RAM_SAVE_FLAG_PAGE      0x08
7300 #define RAM_SAVE_FLAG_EOS       0x10
7301
7302 static int is_dup_page(uint8_t *page, uint8_t ch)
7303 {
7304     uint32_t val = ch << 24 | ch << 16 | ch << 8 | ch;
7305     uint32_t *array = (uint32_t *)page;
7306     int i;
7307
7308     for (i = 0; i < (TARGET_PAGE_SIZE / 4); i++) {
7309         if (array[i] != val)
7310             return 0;
7311     }
7312
7313     return 1;
7314 }
7315
7316 static int ram_save_block(QEMUFile *f)
7317 {
7318     static ram_addr_t current_addr = 0;
7319     ram_addr_t saved_addr = current_addr;
7320     ram_addr_t addr = 0;
7321     int found = 0;
7322
7323     while (addr < phys_ram_size) {
7324         if (cpu_physical_memory_get_dirty(current_addr, MIGRATION_DIRTY_FLAG)) {
7325             uint8_t ch;
7326
7327             cpu_physical_memory_reset_dirty(current_addr,
7328                                             current_addr + TARGET_PAGE_SIZE,
7329                                             MIGRATION_DIRTY_FLAG);
7330
7331             ch = *(phys_ram_base + current_addr);
7332
7333             if (is_dup_page(phys_ram_base + current_addr, ch)) {
7334                 qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_COMPRESS);
7335                 qemu_put_byte(f, ch);
7336             } else {
7337                 qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_PAGE);
7338                 qemu_put_buffer(f, phys_ram_base + current_addr, TARGET_PAGE_SIZE);
7339             }
7340
7341             found = 1;
7342             break;
7343         }
7344         addr += TARGET_PAGE_SIZE;
7345         current_addr = (saved_addr + addr) % phys_ram_size;
7346     }
7347
7348     return found;
7349 }
7350
7351 static ram_addr_t ram_save_threshold = 10;
7352
7353 static ram_addr_t ram_save_remaining(void)
7354 {
7355     ram_addr_t addr;
7356     ram_addr_t count = 0;
7357
7358     for (addr = 0; addr < phys_ram_size; addr += TARGET_PAGE_SIZE) {
7359         if (cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
7360             count++;
7361     }
7362
7363     return count;
7364 }
7365
7366 static int ram_save_live(QEMUFile *f, int stage, void *opaque)
7367 {
7368     ram_addr_t addr;
7369
7370     if (stage == 1) {
7371         /* Make sure all dirty bits are set */
7372         for (addr = 0; addr < phys_ram_size; addr += TARGET_PAGE_SIZE) {
7373             if (!cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
7374                 cpu_physical_memory_set_dirty(addr);
7375         }
7376         
7377         /* Enable dirty memory tracking */
7378         cpu_physical_memory_set_dirty_tracking(1);
7379
7380         qemu_put_be64(f, phys_ram_size | RAM_SAVE_FLAG_MEM_SIZE);
7381     }
7382
7383     while (!qemu_file_rate_limit(f)) {
7384         int ret;
7385
7386         ret = ram_save_block(f);
7387         if (ret == 0) /* no more blocks */
7388             break;
7389     }
7390
7391     /* try transferring iterative blocks of memory */
7392
7393     if (stage == 3) {
7394         cpu_physical_memory_set_dirty_tracking(0);
7395
7396         /* flush all remaining blocks regardless of rate limiting */
7397         while (ram_save_block(f) != 0);
7398     }
7399
7400     qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
7401
7402     return (stage == 2) && (ram_save_remaining() < ram_save_threshold);
7403 }
7404
7405 static int ram_load_dead(QEMUFile *f, void *opaque)
7406 {
7407     RamDecompressState s1, *s = &s1;
7408     uint8_t buf[10];
7409     ram_addr_t i;
7410
7411     if (ram_decompress_open(s, f) < 0)
7412         return -EINVAL;
7413     for(i = 0; i < phys_ram_size; i+= BDRV_HASH_BLOCK_SIZE) {
7414         if (ram_decompress_buf(s, buf, 1) < 0) {
7415             fprintf(stderr, "Error while reading ram block header\n");
7416             goto error;
7417         }
7418         if (buf[0] == 0) {
7419             if (ram_decompress_buf(s, phys_ram_base + i, BDRV_HASH_BLOCK_SIZE) < 0) {
7420                 fprintf(stderr, "Error while reading ram block address=0x%08" PRIx64, (uint64_t)i);
7421                 goto error;
7422             }
7423         } else {
7424         error:
7425             printf("Error block header\n");
7426             return -EINVAL;
7427         }
7428     }
7429     ram_decompress_close(s);
7430
7431     return 0;
7432 }
7433
7434 static int ram_load(QEMUFile *f, void *opaque, int version_id)
7435 {
7436     ram_addr_t addr;
7437     int flags;
7438
7439     if (version_id == 1)
7440         return ram_load_v1(f, opaque);
7441
7442     if (version_id == 2) {
7443         if (qemu_get_be32(f) != phys_ram_size)
7444             return -EINVAL;
7445         return ram_load_dead(f, opaque);
7446     }
7447
7448     if (version_id != 3)
7449         return -EINVAL;
7450
7451     do {
7452         addr = qemu_get_be64(f);
7453
7454         flags = addr & ~TARGET_PAGE_MASK;
7455         addr &= TARGET_PAGE_MASK;
7456
7457         if (flags & RAM_SAVE_FLAG_MEM_SIZE) {
7458             if (addr != phys_ram_size)
7459                 return -EINVAL;
7460         }
7461
7462         if (flags & RAM_SAVE_FLAG_FULL) {
7463             if (ram_load_dead(f, opaque) < 0)
7464                 return -EINVAL;
7465         }
7466         
7467         if (flags & RAM_SAVE_FLAG_COMPRESS) {
7468             uint8_t ch = qemu_get_byte(f);
7469             memset(phys_ram_base + addr, ch, TARGET_PAGE_SIZE);
7470         } else if (flags & RAM_SAVE_FLAG_PAGE)
7471             qemu_get_buffer(f, phys_ram_base + addr, TARGET_PAGE_SIZE);
7472     } while (!(flags & RAM_SAVE_FLAG_EOS));
7473
7474     return 0;
7475 }
7476
7477 void qemu_service_io(void)
7478 {
7479     CPUState *env = cpu_single_env;
7480     if (env) {
7481         cpu_interrupt(env, CPU_INTERRUPT_EXIT);
7482 #ifdef USE_KQEMU
7483         if (env->kqemu_enabled) {
7484             kqemu_cpu_interrupt(env);
7485         }
7486 #endif
7487     }
7488 }
7489
7490 /***********************************************************/
7491 /* bottom halves (can be seen as timers which expire ASAP) */
7492
7493 struct QEMUBH {
7494     QEMUBHFunc *cb;
7495     void *opaque;
7496     int scheduled;
7497     QEMUBH *next;
7498 };
7499
7500 static QEMUBH *first_bh = NULL;
7501
7502 QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque)
7503 {
7504     QEMUBH *bh;
7505     bh = qemu_mallocz(sizeof(QEMUBH));
7506     if (!bh)
7507         return NULL;
7508     bh->cb = cb;
7509     bh->opaque = opaque;
7510     return bh;
7511 }
7512
7513 int qemu_bh_poll(void)
7514 {
7515     QEMUBH *bh, **pbh;
7516     int ret;
7517
7518     ret = 0;
7519     for(;;) {
7520         pbh = &first_bh;
7521         bh = *pbh;
7522         if (!bh)
7523             break;
7524         ret = 1;
7525         *pbh = bh->next;
7526         bh->scheduled = 0;
7527         bh->cb(bh->opaque);
7528     }
7529     return ret;
7530 }
7531
7532 void qemu_bh_schedule(QEMUBH *bh)
7533 {
7534     CPUState *env = cpu_single_env;
7535     if (bh->scheduled)
7536         return;
7537     bh->scheduled = 1;
7538     bh->next = first_bh;
7539     first_bh = bh;
7540
7541     /* stop the currently executing CPU to execute the BH ASAP */
7542     if (env) {
7543         cpu_interrupt(env, CPU_INTERRUPT_EXIT);
7544     }
7545 }
7546
7547 void qemu_bh_cancel(QEMUBH *bh)
7548 {
7549     QEMUBH **pbh;
7550     if (bh->scheduled) {
7551         pbh = &first_bh;
7552         while (*pbh != bh)
7553             pbh = &(*pbh)->next;
7554         *pbh = bh->next;
7555         bh->scheduled = 0;
7556     }
7557 }
7558
7559 void qemu_bh_delete(QEMUBH *bh)
7560 {
7561     qemu_bh_cancel(bh);
7562     qemu_free(bh);
7563 }
7564
7565 /***********************************************************/
7566 /* machine registration */
7567
7568 static QEMUMachine *first_machine = NULL;
7569
7570 int qemu_register_machine(QEMUMachine *m)
7571 {
7572     QEMUMachine **pm;
7573     pm = &first_machine;
7574     while (*pm != NULL)
7575         pm = &(*pm)->next;
7576     m->next = NULL;
7577     *pm = m;
7578     return 0;
7579 }
7580
7581 static QEMUMachine *find_machine(const char *name)
7582 {
7583     QEMUMachine *m;
7584
7585     for(m = first_machine; m != NULL; m = m->next) {
7586         if (!strcmp(m->name, name))
7587             return m;
7588     }
7589     return NULL;
7590 }
7591
7592 /***********************************************************/
7593 /* main execution loop */
7594
7595 static void gui_update(void *opaque)
7596 {
7597     DisplayState *ds = opaque;
7598     ds->dpy_refresh(ds);
7599     qemu_mod_timer(ds->gui_timer,
7600         (ds->gui_timer_interval ?
7601             ds->gui_timer_interval :
7602             GUI_REFRESH_INTERVAL)
7603         + qemu_get_clock(rt_clock));
7604 }
7605
7606 struct vm_change_state_entry {
7607     VMChangeStateHandler *cb;
7608     void *opaque;
7609     LIST_ENTRY (vm_change_state_entry) entries;
7610 };
7611
7612 static LIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head;
7613
7614 VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
7615                                                      void *opaque)
7616 {
7617     VMChangeStateEntry *e;
7618
7619     e = qemu_mallocz(sizeof (*e));
7620     if (!e)
7621         return NULL;
7622
7623     e->cb = cb;
7624     e->opaque = opaque;
7625     LIST_INSERT_HEAD(&vm_change_state_head, e, entries);
7626     return e;
7627 }
7628
7629 void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
7630 {
7631     LIST_REMOVE (e, entries);
7632     qemu_free (e);
7633 }
7634
7635 static void vm_state_notify(int running)
7636 {
7637     VMChangeStateEntry *e;
7638
7639     for (e = vm_change_state_head.lh_first; e; e = e->entries.le_next) {
7640         e->cb(e->opaque, running);
7641     }
7642 }
7643
7644 /* XXX: support several handlers */
7645 static VMStopHandler *vm_stop_cb;
7646 static void *vm_stop_opaque;
7647
7648 int qemu_add_vm_stop_handler(VMStopHandler *cb, void *opaque)
7649 {
7650     vm_stop_cb = cb;
7651     vm_stop_opaque = opaque;
7652     return 0;
7653 }
7654
7655 void qemu_del_vm_stop_handler(VMStopHandler *cb, void *opaque)
7656 {
7657     vm_stop_cb = NULL;
7658 }
7659
7660 void vm_start(void)
7661 {
7662     if (!vm_running) {
7663         cpu_enable_ticks();
7664         vm_running = 1;
7665         vm_state_notify(1);
7666         qemu_rearm_alarm_timer(alarm_timer);
7667     }
7668 }
7669
7670 void vm_stop(int reason)
7671 {
7672     if (vm_running) {
7673         cpu_disable_ticks();
7674         vm_running = 0;
7675         if (reason != 0) {
7676             if (vm_stop_cb) {
7677                 vm_stop_cb(vm_stop_opaque, reason);
7678             }
7679         }
7680         vm_state_notify(0);
7681     }
7682 }
7683
7684 /* reset/shutdown handler */
7685
7686 typedef struct QEMUResetEntry {
7687     QEMUResetHandler *func;
7688     void *opaque;
7689     struct QEMUResetEntry *next;
7690 } QEMUResetEntry;
7691
7692 static QEMUResetEntry *first_reset_entry;
7693 static int reset_requested;
7694 static int shutdown_requested;
7695 static int powerdown_requested;
7696
7697 int qemu_shutdown_requested(void)
7698 {
7699     int r = shutdown_requested;
7700     shutdown_requested = 0;
7701     return r;
7702 }
7703
7704 int qemu_reset_requested(void)
7705 {
7706     int r = reset_requested;
7707     reset_requested = 0;
7708     return r;
7709 }
7710
7711 int qemu_powerdown_requested(void)
7712 {
7713     int r = powerdown_requested;
7714     powerdown_requested = 0;
7715     return r;
7716 }
7717
7718 void qemu_register_reset(QEMUResetHandler *func, void *opaque)
7719 {
7720     QEMUResetEntry **pre, *re;
7721
7722     pre = &first_reset_entry;
7723     while (*pre != NULL)
7724         pre = &(*pre)->next;
7725     re = qemu_mallocz(sizeof(QEMUResetEntry));
7726     re->func = func;
7727     re->opaque = opaque;
7728     re->next = NULL;
7729     *pre = re;
7730 }
7731
7732 void qemu_system_reset(void)
7733 {
7734     QEMUResetEntry *re;
7735
7736     /* reset all devices */
7737     for(re = first_reset_entry; re != NULL; re = re->next) {
7738         re->func(re->opaque);
7739     }
7740 }
7741
7742 void qemu_system_reset_request(void)
7743 {
7744     if (no_reboot) {
7745         shutdown_requested = 1;
7746     } else {
7747         reset_requested = 1;
7748     }
7749     if (cpu_single_env)
7750         cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
7751 }
7752
7753 void qemu_system_shutdown_request(void)
7754 {
7755     shutdown_requested = 1;
7756     if (cpu_single_env)
7757         cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
7758 }
7759
7760 void qemu_system_powerdown_request(void)
7761 {
7762     powerdown_requested = 1;
7763     if (cpu_single_env)
7764         cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
7765 }
7766
7767 void main_loop_wait(int timeout)
7768 {
7769     IOHandlerRecord *ioh;
7770     fd_set rfds, wfds, xfds;
7771     int ret, nfds;
7772 #ifdef _WIN32
7773     int ret2, i;
7774 #endif
7775     struct timeval tv;
7776     PollingEntry *pe;
7777
7778
7779     /* XXX: need to suppress polling by better using win32 events */
7780     ret = 0;
7781     for(pe = first_polling_entry; pe != NULL; pe = pe->next) {
7782         ret |= pe->func(pe->opaque);
7783     }
7784 #ifdef _WIN32
7785     if (ret == 0) {
7786         int err;
7787         WaitObjects *w = &wait_objects;
7788
7789         ret = WaitForMultipleObjects(w->num, w->events, FALSE, timeout);
7790         if (WAIT_OBJECT_0 + 0 <= ret && ret <= WAIT_OBJECT_0 + w->num - 1) {
7791             if (w->func[ret - WAIT_OBJECT_0])
7792                 w->func[ret - WAIT_OBJECT_0](w->opaque[ret - WAIT_OBJECT_0]);
7793
7794             /* Check for additional signaled events */
7795             for(i = (ret - WAIT_OBJECT_0 + 1); i < w->num; i++) {
7796
7797                 /* Check if event is signaled */
7798                 ret2 = WaitForSingleObject(w->events[i], 0);
7799                 if(ret2 == WAIT_OBJECT_0) {
7800                     if (w->func[i])
7801                         w->func[i](w->opaque[i]);
7802                 } else if (ret2 == WAIT_TIMEOUT) {
7803                 } else {
7804                     err = GetLastError();
7805                     fprintf(stderr, "WaitForSingleObject error %d %d\n", i, err);
7806                 }
7807             }
7808         } else if (ret == WAIT_TIMEOUT) {
7809         } else {
7810             err = GetLastError();
7811             fprintf(stderr, "WaitForMultipleObjects error %d %d\n", ret, err);
7812         }
7813     }
7814 #endif
7815     /* poll any events */
7816     /* XXX: separate device handlers from system ones */
7817     nfds = -1;
7818     FD_ZERO(&rfds);
7819     FD_ZERO(&wfds);
7820     FD_ZERO(&xfds);
7821     for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
7822         if (ioh->deleted)
7823             continue;
7824         if (ioh->fd_read &&
7825             (!ioh->fd_read_poll ||
7826              ioh->fd_read_poll(ioh->opaque) != 0)) {
7827             FD_SET(ioh->fd, &rfds);
7828             if (ioh->fd > nfds)
7829                 nfds = ioh->fd;
7830         }
7831         if (ioh->fd_write) {
7832             FD_SET(ioh->fd, &wfds);
7833             if (ioh->fd > nfds)
7834                 nfds = ioh->fd;
7835         }
7836     }
7837
7838     tv.tv_sec = 0;
7839 #ifdef _WIN32
7840     tv.tv_usec = 0;
7841 #else
7842     tv.tv_usec = timeout * 1000;
7843 #endif
7844 #if defined(CONFIG_SLIRP)
7845     if (slirp_inited) {
7846         slirp_select_fill(&nfds, &rfds, &wfds, &xfds);
7847     }
7848 #endif
7849     ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv);
7850     if (ret > 0) {
7851         IOHandlerRecord **pioh;
7852
7853         for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
7854             if (!ioh->deleted && ioh->fd_read && FD_ISSET(ioh->fd, &rfds)) {
7855                 ioh->fd_read(ioh->opaque);
7856             }
7857             if (!ioh->deleted && ioh->fd_write && FD_ISSET(ioh->fd, &wfds)) {
7858                 ioh->fd_write(ioh->opaque);
7859             }
7860         }
7861
7862         /* remove deleted IO handlers */
7863         pioh = &first_io_handler;
7864         while (*pioh) {
7865             ioh = *pioh;
7866             if (ioh->deleted) {
7867                 *pioh = ioh->next;
7868                 qemu_free(ioh);
7869             } else
7870                 pioh = &ioh->next;
7871         }
7872     }
7873 #if defined(CONFIG_SLIRP)
7874     if (slirp_inited) {
7875         if (ret < 0) {
7876             FD_ZERO(&rfds);
7877             FD_ZERO(&wfds);
7878             FD_ZERO(&xfds);
7879         }
7880         slirp_select_poll(&rfds, &wfds, &xfds);
7881     }
7882 #endif
7883
7884     if (vm_running) {
7885         if (likely(!(cur_cpu->singlestep_enabled & SSTEP_NOTIMER)))
7886         qemu_run_timers(&active_timers[QEMU_TIMER_VIRTUAL],
7887                         qemu_get_clock(vm_clock));
7888         /* run dma transfers, if any */
7889         DMA_run();
7890     }
7891
7892     /* real time timers */
7893     qemu_run_timers(&active_timers[QEMU_TIMER_REALTIME],
7894                     qemu_get_clock(rt_clock));
7895
7896     if (alarm_timer->flags & ALARM_FLAG_EXPIRED) {
7897         alarm_timer->flags &= ~(ALARM_FLAG_EXPIRED);
7898         qemu_rearm_alarm_timer(alarm_timer);
7899     }
7900
7901     /* Check bottom-halves last in case any of the earlier events triggered
7902        them.  */
7903     qemu_bh_poll();
7904
7905 }
7906
7907 static int main_loop(void)
7908 {
7909     int ret, timeout;
7910 #ifdef CONFIG_PROFILER
7911     int64_t ti;
7912 #endif
7913     CPUState *env;
7914
7915     cur_cpu = first_cpu;
7916     next_cpu = cur_cpu->next_cpu ?: first_cpu;
7917     for(;;) {
7918         if (vm_running) {
7919
7920             for(;;) {
7921                 /* get next cpu */
7922                 env = next_cpu;
7923 #ifdef CONFIG_PROFILER
7924                 ti = profile_getclock();
7925 #endif
7926                 if (use_icount) {
7927                     int64_t count;
7928                     int decr;
7929                     qemu_icount -= (env->icount_decr.u16.low + env->icount_extra);
7930                     env->icount_decr.u16.low = 0;
7931                     env->icount_extra = 0;
7932                     count = qemu_next_deadline();
7933                     count = (count + (1 << icount_time_shift) - 1)
7934                             >> icount_time_shift;
7935                     qemu_icount += count;
7936                     decr = (count > 0xffff) ? 0xffff : count;
7937                     count -= decr;
7938                     env->icount_decr.u16.low = decr;
7939                     env->icount_extra = count;
7940                 }
7941                 ret = cpu_exec(env);
7942 #ifdef CONFIG_PROFILER
7943                 qemu_time += profile_getclock() - ti;
7944 #endif
7945                 if (use_icount) {
7946                     /* Fold pending instructions back into the
7947                        instruction counter, and clear the interrupt flag.  */
7948                     qemu_icount -= (env->icount_decr.u16.low
7949                                     + env->icount_extra);
7950                     env->icount_decr.u32 = 0;
7951                     env->icount_extra = 0;
7952                 }
7953                 next_cpu = env->next_cpu ?: first_cpu;
7954                 if (event_pending && likely(ret != EXCP_DEBUG)) {
7955                     ret = EXCP_INTERRUPT;
7956                     event_pending = 0;
7957                     break;
7958                 }
7959                 if (ret == EXCP_HLT) {
7960                     /* Give the next CPU a chance to run.  */
7961                     cur_cpu = env;
7962                     continue;
7963                 }
7964                 if (ret != EXCP_HALTED)
7965                     break;
7966                 /* all CPUs are halted ? */
7967                 if (env == cur_cpu)
7968                     break;
7969             }
7970             cur_cpu = env;
7971
7972             if (shutdown_requested) {
7973                 ret = EXCP_INTERRUPT;
7974                 if (no_shutdown) {
7975                     vm_stop(0);
7976                     no_shutdown = 0;
7977                 }
7978                 else
7979                     break;
7980             }
7981             if (reset_requested) {
7982                 reset_requested = 0;
7983                 qemu_system_reset();
7984                 ret = EXCP_INTERRUPT;
7985             }
7986             if (powerdown_requested) {
7987                 powerdown_requested = 0;
7988                 qemu_system_powerdown();
7989                 ret = EXCP_INTERRUPT;
7990             }
7991             if (unlikely(ret == EXCP_DEBUG)) {
7992                 vm_stop(EXCP_DEBUG);
7993             }
7994             /* If all cpus are halted then wait until the next IRQ */
7995             /* XXX: use timeout computed from timers */
7996             if (ret == EXCP_HALTED) {
7997                 if (use_icount) {
7998                     int64_t add;
7999                     int64_t delta;
8000                     /* Advance virtual time to the next event.  */
8001                     if (use_icount == 1) {
8002                         /* When not using an adaptive execution frequency
8003                            we tend to get badly out of sync with real time,
8004                            so just delay for a reasonable amount of time.  */
8005                         delta = 0;
8006                     } else {
8007                         delta = cpu_get_icount() - cpu_get_clock();
8008                     }
8009                     if (delta > 0) {
8010                         /* If virtual time is ahead of real time then just
8011                            wait for IO.  */
8012                         timeout = (delta / 1000000) + 1;
8013                     } else {
8014                         /* Wait for either IO to occur or the next
8015                            timer event.  */
8016                         add = qemu_next_deadline();
8017                         /* We advance the timer before checking for IO.
8018                            Limit the amount we advance so that early IO
8019                            activity won't get the guest too far ahead.  */
8020                         if (add > 10000000)
8021                             add = 10000000;
8022                         delta += add;
8023                         add = (add + (1 << icount_time_shift) - 1)
8024                               >> icount_time_shift;
8025                         qemu_icount += add;
8026                         timeout = delta / 1000000;
8027                         if (timeout < 0)
8028                             timeout = 0;
8029                     }
8030                 } else {
8031                     timeout = 10;
8032                 }
8033             } else {
8034                 timeout = 0;
8035             }
8036         } else {
8037             if (shutdown_requested) {
8038                 ret = EXCP_INTERRUPT;
8039                 break;
8040             }
8041             timeout = 10;
8042         }
8043 #ifdef CONFIG_PROFILER
8044         ti = profile_getclock();
8045 #endif
8046         main_loop_wait(timeout);
8047 #ifdef CONFIG_PROFILER
8048         dev_time += profile_getclock() - ti;
8049 #endif
8050     }
8051     cpu_disable_ticks();
8052     return ret;
8053 }
8054
8055 static void help(int exitcode)
8056 {
8057     printf("QEMU PC emulator version " QEMU_VERSION ", Copyright (c) 2003-2008 Fabrice Bellard\n"
8058            "usage: %s [options] [disk_image]\n"
8059            "\n"
8060            "'disk_image' is a raw hard image image for IDE hard disk 0\n"
8061            "\n"
8062            "Standard options:\n"
8063            "-M machine      select emulated machine (-M ? for list)\n"
8064            "-cpu cpu        select CPU (-cpu ? for list)\n"
8065            "-fda/-fdb file  use 'file' as floppy disk 0/1 image\n"
8066            "-hda/-hdb file  use 'file' as IDE hard disk 0/1 image\n"
8067            "-hdc/-hdd file  use 'file' as IDE hard disk 2/3 image\n"
8068            "-cdrom file     use 'file' as IDE cdrom image (cdrom is ide1 master)\n"
8069            "-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]\n"
8070            "       [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off]\n"
8071            "       [,cache=on|off][,format=f]\n"
8072            "                use 'file' as a drive image\n"
8073            "-mtdblock file  use 'file' as on-board Flash memory image\n"
8074            "-sd file        use 'file' as SecureDigital card image\n"
8075            "-pflash file    use 'file' as a parallel flash image\n"
8076            "-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n)\n"
8077            "-snapshot       write to temporary files instead of disk image files\n"
8078 #ifdef CONFIG_SDL
8079            "-no-frame       open SDL window without a frame and window decorations\n"
8080            "-alt-grab       use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt)\n"
8081            "-no-quit        disable SDL window close capability\n"
8082 #endif
8083 #ifdef TARGET_I386
8084            "-no-fd-bootchk  disable boot signature checking for floppy disks\n"
8085 #endif
8086            "-m megs         set virtual RAM size to megs MB [default=%d]\n"
8087            "-smp n          set the number of CPUs to 'n' [default=1]\n"
8088            "-nographic      disable graphical output and redirect serial I/Os to console\n"
8089            "-portrait       rotate graphical output 90 deg left (only PXA LCD)\n"
8090 #ifndef _WIN32
8091            "-k language     use keyboard layout (for example \"fr\" for French)\n"
8092 #endif
8093 #ifdef HAS_AUDIO
8094            "-audio-help     print list of audio drivers and their options\n"
8095            "-soundhw c1,... enable audio support\n"
8096            "                and only specified sound cards (comma separated list)\n"
8097            "                use -soundhw ? to get the list of supported cards\n"
8098            "                use -soundhw all to enable all of them\n"
8099 #endif
8100            "-vga [std|cirrus|vmware]\n"
8101            "                select video card type\n"
8102            "-localtime      set the real time clock to local time [default=utc]\n"
8103            "-full-screen    start in full screen\n"
8104 #ifdef TARGET_I386
8105            "-win2k-hack     use it when installing Windows 2000 to avoid a disk full bug\n"
8106 #endif
8107            "-usb            enable the USB driver (will be the default soon)\n"
8108            "-usbdevice name add the host or guest USB device 'name'\n"
8109 #if defined(TARGET_PPC) || defined(TARGET_SPARC)
8110            "-g WxH[xDEPTH]  Set the initial graphical resolution and depth\n"
8111 #endif
8112            "-name string    set the name of the guest\n"
8113            "-uuid %%08x-%%04x-%%04x-%%04x-%%012x specify machine UUID\n"
8114            "\n"
8115            "Network options:\n"
8116            "-net nic[,vlan=n][,macaddr=addr][,model=type]\n"
8117            "                create a new Network Interface Card and connect it to VLAN 'n'\n"
8118 #ifdef CONFIG_SLIRP
8119            "-net user[,vlan=n][,hostname=host]\n"
8120            "                connect the user mode network stack to VLAN 'n' and send\n"
8121            "                hostname 'host' to DHCP clients\n"
8122 #endif
8123 #ifdef _WIN32
8124            "-net tap[,vlan=n],ifname=name\n"
8125            "                connect the host TAP network interface to VLAN 'n'\n"
8126 #else
8127            "-net tap[,vlan=n][,fd=h][,ifname=name][,script=file][,downscript=dfile]\n"
8128            "                connect the host TAP network interface to VLAN 'n' and use the\n"
8129            "                network scripts 'file' (default=%s)\n"
8130            "                and 'dfile' (default=%s);\n"
8131            "                use '[down]script=no' to disable script execution;\n"
8132            "                use 'fd=h' to connect to an already opened TAP interface\n"
8133 #endif
8134            "-net socket[,vlan=n][,fd=h][,listen=[host]:port][,connect=host:port]\n"
8135            "                connect the vlan 'n' to another VLAN using a socket connection\n"
8136            "-net socket[,vlan=n][,fd=h][,mcast=maddr:port]\n"
8137            "                connect the vlan 'n' to multicast maddr and port\n"
8138 #ifdef CONFIG_VDE
8139            "-net vde[,vlan=n][,sock=socketpath][,port=n][,group=groupname][,mode=octalmode]\n"
8140            "                connect the vlan 'n' to port 'n' of a vde switch running\n"
8141            "                on host and listening for incoming connections on 'socketpath'.\n"
8142            "                Use group 'groupname' and mode 'octalmode' to change default\n"
8143            "                ownership and permissions for communication port.\n"
8144 #endif
8145            "-net none       use it alone to have zero network devices; if no -net option\n"
8146            "                is provided, the default is '-net nic -net user'\n"
8147            "\n"
8148 #ifdef CONFIG_SLIRP
8149            "-tftp dir       allow tftp access to files in dir [-net user]\n"
8150            "-bootp file     advertise file in BOOTP replies\n"
8151 #ifndef _WIN32
8152            "-smb dir        allow SMB access to files in 'dir' [-net user]\n"
8153 #endif
8154            "-redir [tcp|udp]:host-port:[guest-host]:guest-port\n"
8155            "                redirect TCP or UDP connections from host to guest [-net user]\n"
8156 #endif
8157            "\n"
8158            "Linux boot specific:\n"
8159            "-kernel bzImage use 'bzImage' as kernel image\n"
8160            "-append cmdline use 'cmdline' as kernel command line\n"
8161            "-initrd file    use 'file' as initial ram disk\n"
8162            "\n"
8163            "Debug/Expert options:\n"
8164            "-monitor dev    redirect the monitor to char device 'dev'\n"
8165            "-serial dev     redirect the serial port to char device 'dev'\n"
8166            "-parallel dev   redirect the parallel port to char device 'dev'\n"
8167            "-pidfile file   Write PID to 'file'\n"
8168            "-S              freeze CPU at startup (use 'c' to start execution)\n"
8169            "-s              wait gdb connection to port\n"
8170            "-p port         set gdb connection port [default=%s]\n"
8171            "-d item1,...    output log to %s (use -d ? for a list of log items)\n"
8172            "-hdachs c,h,s[,t]  force hard disk 0 physical geometry and the optional BIOS\n"
8173            "                translation (t=none or lba) (usually qemu can guess them)\n"
8174            "-L path         set the directory for the BIOS, VGA BIOS and keymaps\n"
8175 #ifdef USE_KQEMU
8176            "-kernel-kqemu   enable KQEMU full virtualization (default is user mode only)\n"
8177            "-no-kqemu       disable KQEMU kernel module usage\n"
8178 #endif
8179 #ifdef TARGET_I386
8180            "-no-acpi        disable ACPI\n"
8181 #endif
8182 #ifdef CONFIG_CURSES
8183            "-curses         use a curses/ncurses interface instead of SDL\n"
8184 #endif
8185            "-no-reboot      exit instead of rebooting\n"
8186            "-no-shutdown    stop before shutdown\n"
8187            "-loadvm [tag|id]  start right away with a saved state (loadvm in monitor)\n"
8188            "-vnc display    start a VNC server on display\n"
8189 #ifndef _WIN32
8190            "-daemonize      daemonize QEMU after initializing\n"
8191 #endif
8192            "-option-rom rom load a file, rom, into the option ROM space\n"
8193 #ifdef TARGET_SPARC
8194            "-prom-env variable=value  set OpenBIOS nvram variables\n"
8195 #endif
8196            "-clock          force the use of the given methods for timer alarm.\n"
8197            "                To see what timers are available use -clock ?\n"
8198            "-startdate      select initial date of the clock\n"
8199            "-icount [N|auto]\n"
8200            "                Enable virtual instruction counter with 2^N clock ticks per instruction\n"
8201            "\n"
8202            "During emulation, the following keys are useful:\n"
8203            "ctrl-alt-f      toggle full screen\n"
8204            "ctrl-alt-n      switch to virtual console 'n'\n"
8205            "ctrl-alt        toggle mouse and keyboard grab\n"
8206            "\n"
8207            "When using -nographic, press 'ctrl-a h' to get some help.\n"
8208            ,
8209            "qemu",
8210            DEFAULT_RAM_SIZE,
8211 #ifndef _WIN32
8212            DEFAULT_NETWORK_SCRIPT,
8213            DEFAULT_NETWORK_DOWN_SCRIPT,
8214 #endif
8215            DEFAULT_GDBSTUB_PORT,
8216            "/tmp/qemu.log");
8217     exit(exitcode);
8218 }
8219
8220 #define HAS_ARG 0x0001
8221
8222 enum {
8223     QEMU_OPTION_h,
8224
8225     QEMU_OPTION_M,
8226     QEMU_OPTION_cpu,
8227     QEMU_OPTION_fda,
8228     QEMU_OPTION_fdb,
8229     QEMU_OPTION_hda,
8230     QEMU_OPTION_hdb,
8231     QEMU_OPTION_hdc,
8232     QEMU_OPTION_hdd,
8233     QEMU_OPTION_drive,
8234     QEMU_OPTION_cdrom,
8235     QEMU_OPTION_mtdblock,
8236     QEMU_OPTION_sd,
8237     QEMU_OPTION_pflash,
8238     QEMU_OPTION_boot,
8239     QEMU_OPTION_snapshot,
8240 #ifdef TARGET_I386
8241     QEMU_OPTION_no_fd_bootchk,
8242 #endif
8243     QEMU_OPTION_m,
8244     QEMU_OPTION_nographic,
8245     QEMU_OPTION_portrait,
8246 #ifdef HAS_AUDIO
8247     QEMU_OPTION_audio_help,
8248     QEMU_OPTION_soundhw,
8249 #endif
8250
8251     QEMU_OPTION_net,
8252     QEMU_OPTION_tftp,
8253     QEMU_OPTION_bootp,
8254     QEMU_OPTION_smb,
8255     QEMU_OPTION_redir,
8256
8257     QEMU_OPTION_kernel,
8258     QEMU_OPTION_append,
8259     QEMU_OPTION_initrd,
8260
8261     QEMU_OPTION_S,
8262     QEMU_OPTION_s,
8263     QEMU_OPTION_p,
8264     QEMU_OPTION_d,
8265     QEMU_OPTION_hdachs,
8266     QEMU_OPTION_L,
8267     QEMU_OPTION_bios,
8268     QEMU_OPTION_k,
8269     QEMU_OPTION_localtime,
8270     QEMU_OPTION_g,
8271     QEMU_OPTION_vga,
8272     QEMU_OPTION_echr,
8273     QEMU_OPTION_monitor,
8274     QEMU_OPTION_serial,
8275     QEMU_OPTION_parallel,
8276     QEMU_OPTION_loadvm,
8277     QEMU_OPTION_full_screen,
8278     QEMU_OPTION_no_frame,
8279     QEMU_OPTION_alt_grab,
8280     QEMU_OPTION_no_quit,
8281     QEMU_OPTION_pidfile,
8282     QEMU_OPTION_no_kqemu,
8283     QEMU_OPTION_kernel_kqemu,
8284     QEMU_OPTION_win2k_hack,
8285     QEMU_OPTION_usb,
8286     QEMU_OPTION_usbdevice,
8287     QEMU_OPTION_smp,
8288     QEMU_OPTION_vnc,
8289     QEMU_OPTION_no_acpi,
8290     QEMU_OPTION_curses,
8291     QEMU_OPTION_no_reboot,
8292     QEMU_OPTION_no_shutdown,
8293     QEMU_OPTION_show_cursor,
8294     QEMU_OPTION_daemonize,
8295     QEMU_OPTION_option_rom,
8296     QEMU_OPTION_semihosting,
8297     QEMU_OPTION_name,
8298     QEMU_OPTION_prom_env,
8299     QEMU_OPTION_old_param,
8300     QEMU_OPTION_clock,
8301     QEMU_OPTION_startdate,
8302     QEMU_OPTION_tb_size,
8303     QEMU_OPTION_icount,
8304     QEMU_OPTION_uuid,
8305 };
8306
8307 typedef struct QEMUOption {
8308     const char *name;
8309     int flags;
8310     int index;
8311 } QEMUOption;
8312
8313 static const QEMUOption qemu_options[] = {
8314     { "h", 0, QEMU_OPTION_h },
8315     { "help", 0, QEMU_OPTION_h },
8316
8317     { "M", HAS_ARG, QEMU_OPTION_M },
8318     { "cpu", HAS_ARG, QEMU_OPTION_cpu },
8319     { "fda", HAS_ARG, QEMU_OPTION_fda },
8320     { "fdb", HAS_ARG, QEMU_OPTION_fdb },
8321     { "hda", HAS_ARG, QEMU_OPTION_hda },
8322     { "hdb", HAS_ARG, QEMU_OPTION_hdb },
8323     { "hdc", HAS_ARG, QEMU_OPTION_hdc },
8324     { "hdd", HAS_ARG, QEMU_OPTION_hdd },
8325     { "drive", HAS_ARG, QEMU_OPTION_drive },
8326     { "cdrom", HAS_ARG, QEMU_OPTION_cdrom },
8327     { "mtdblock", HAS_ARG, QEMU_OPTION_mtdblock },
8328     { "sd", HAS_ARG, QEMU_OPTION_sd },
8329     { "pflash", HAS_ARG, QEMU_OPTION_pflash },
8330     { "boot", HAS_ARG, QEMU_OPTION_boot },
8331     { "snapshot", 0, QEMU_OPTION_snapshot },
8332 #ifdef TARGET_I386
8333     { "no-fd-bootchk", 0, QEMU_OPTION_no_fd_bootchk },
8334 #endif
8335     { "m", HAS_ARG, QEMU_OPTION_m },
8336     { "nographic", 0, QEMU_OPTION_nographic },
8337     { "portrait", 0, QEMU_OPTION_portrait },
8338     { "k", HAS_ARG, QEMU_OPTION_k },
8339 #ifdef HAS_AUDIO
8340     { "audio-help", 0, QEMU_OPTION_audio_help },
8341     { "soundhw", HAS_ARG, QEMU_OPTION_soundhw },
8342 #endif
8343
8344     { "net", HAS_ARG, QEMU_OPTION_net},
8345 #ifdef CONFIG_SLIRP
8346     { "tftp", HAS_ARG, QEMU_OPTION_tftp },
8347     { "bootp", HAS_ARG, QEMU_OPTION_bootp },
8348 #ifndef _WIN32
8349     { "smb", HAS_ARG, QEMU_OPTION_smb },
8350 #endif
8351     { "redir", HAS_ARG, QEMU_OPTION_redir },
8352 #endif
8353
8354     { "kernel", HAS_ARG, QEMU_OPTION_kernel },
8355     { "append", HAS_ARG, QEMU_OPTION_append },
8356     { "initrd", HAS_ARG, QEMU_OPTION_initrd },
8357
8358     { "S", 0, QEMU_OPTION_S },
8359     { "s", 0, QEMU_OPTION_s },
8360     { "p", HAS_ARG, QEMU_OPTION_p },
8361     { "d", HAS_ARG, QEMU_OPTION_d },
8362     { "hdachs", HAS_ARG, QEMU_OPTION_hdachs },
8363     { "L", HAS_ARG, QEMU_OPTION_L },
8364     { "bios", HAS_ARG, QEMU_OPTION_bios },
8365 #ifdef USE_KQEMU
8366     { "no-kqemu", 0, QEMU_OPTION_no_kqemu },
8367     { "kernel-kqemu", 0, QEMU_OPTION_kernel_kqemu },
8368 #endif
8369 #if defined(TARGET_PPC) || defined(TARGET_SPARC)
8370     { "g", 1, QEMU_OPTION_g },
8371 #endif
8372     { "localtime", 0, QEMU_OPTION_localtime },
8373     { "vga", HAS_ARG, QEMU_OPTION_vga },
8374     { "echr", HAS_ARG, QEMU_OPTION_echr },
8375     { "monitor", HAS_ARG, QEMU_OPTION_monitor },
8376     { "serial", HAS_ARG, QEMU_OPTION_serial },
8377     { "parallel", HAS_ARG, QEMU_OPTION_parallel },
8378     { "loadvm", HAS_ARG, QEMU_OPTION_loadvm },
8379     { "full-screen", 0, QEMU_OPTION_full_screen },
8380 #ifdef CONFIG_SDL
8381     { "no-frame", 0, QEMU_OPTION_no_frame },
8382     { "alt-grab", 0, QEMU_OPTION_alt_grab },
8383     { "no-quit", 0, QEMU_OPTION_no_quit },
8384 #endif
8385     { "pidfile", HAS_ARG, QEMU_OPTION_pidfile },
8386     { "win2k-hack", 0, QEMU_OPTION_win2k_hack },
8387     { "usbdevice", HAS_ARG, QEMU_OPTION_usbdevice },
8388     { "smp", HAS_ARG, QEMU_OPTION_smp },
8389     { "vnc", HAS_ARG, QEMU_OPTION_vnc },
8390 #ifdef CONFIG_CURSES
8391     { "curses", 0, QEMU_OPTION_curses },
8392 #endif
8393     { "uuid", HAS_ARG, QEMU_OPTION_uuid },
8394
8395     /* temporary options */
8396     { "usb", 0, QEMU_OPTION_usb },
8397     { "no-acpi", 0, QEMU_OPTION_no_acpi },
8398     { "no-reboot", 0, QEMU_OPTION_no_reboot },
8399     { "no-shutdown", 0, QEMU_OPTION_no_shutdown },
8400     { "show-cursor", 0, QEMU_OPTION_show_cursor },
8401     { "daemonize", 0, QEMU_OPTION_daemonize },
8402     { "option-rom", HAS_ARG, QEMU_OPTION_option_rom },
8403 #if defined(TARGET_ARM) || defined(TARGET_M68K)
8404     { "semihosting", 0, QEMU_OPTION_semihosting },
8405 #endif
8406     { "name", HAS_ARG, QEMU_OPTION_name },
8407 #if defined(TARGET_SPARC)
8408     { "prom-env", HAS_ARG, QEMU_OPTION_prom_env },
8409 #endif
8410 #if defined(TARGET_ARM)
8411     { "old-param", 0, QEMU_OPTION_old_param },
8412 #endif
8413     { "clock", HAS_ARG, QEMU_OPTION_clock },
8414     { "startdate", HAS_ARG, QEMU_OPTION_startdate },
8415     { "tb-size", HAS_ARG, QEMU_OPTION_tb_size },
8416     { "icount", HAS_ARG, QEMU_OPTION_icount },
8417     { NULL },
8418 };
8419
8420 /* password input */
8421
8422 int qemu_key_check(BlockDriverState *bs, const char *name)
8423 {
8424     char password[256];
8425     int i;
8426
8427     if (!bdrv_is_encrypted(bs))
8428         return 0;
8429
8430     term_printf("%s is encrypted.\n", name);
8431     for(i = 0; i < 3; i++) {
8432         monitor_readline("Password: ", 1, password, sizeof(password));
8433         if (bdrv_set_key(bs, password) == 0)
8434             return 0;
8435         term_printf("invalid password\n");
8436     }
8437     return -EPERM;
8438 }
8439
8440 static BlockDriverState *get_bdrv(int index)
8441 {
8442     if (index > nb_drives)
8443         return NULL;
8444     return drives_table[index].bdrv;
8445 }
8446
8447 static void read_passwords(void)
8448 {
8449     BlockDriverState *bs;
8450     int i;
8451
8452     for(i = 0; i < 6; i++) {
8453         bs = get_bdrv(i);
8454         if (bs)
8455             qemu_key_check(bs, bdrv_get_device_name(bs));
8456     }
8457 }
8458
8459 #ifdef HAS_AUDIO
8460 struct soundhw soundhw[] = {
8461 #ifdef HAS_AUDIO_CHOICE
8462 #if defined(TARGET_I386) || defined(TARGET_MIPS)
8463     {
8464         "pcspk",
8465         "PC speaker",
8466         0,
8467         1,
8468         { .init_isa = pcspk_audio_init }
8469     },
8470 #endif
8471     {
8472         "sb16",
8473         "Creative Sound Blaster 16",
8474         0,
8475         1,
8476         { .init_isa = SB16_init }
8477     },
8478
8479 #ifdef CONFIG_CS4231A
8480     {
8481         "cs4231a",
8482         "CS4231A",
8483         0,
8484         1,
8485         { .init_isa = cs4231a_init }
8486     },
8487 #endif
8488
8489 #ifdef CONFIG_ADLIB
8490     {
8491         "adlib",
8492 #ifdef HAS_YMF262
8493         "Yamaha YMF262 (OPL3)",
8494 #else
8495         "Yamaha YM3812 (OPL2)",
8496 #endif
8497         0,
8498         1,
8499         { .init_isa = Adlib_init }
8500     },
8501 #endif
8502
8503 #ifdef CONFIG_GUS
8504     {
8505         "gus",
8506         "Gravis Ultrasound GF1",
8507         0,
8508         1,
8509         { .init_isa = GUS_init }
8510     },
8511 #endif
8512
8513 #ifdef CONFIG_AC97
8514     {
8515         "ac97",
8516         "Intel 82801AA AC97 Audio",
8517         0,
8518         0,
8519         { .init_pci = ac97_init }
8520     },
8521 #endif
8522
8523     {
8524         "es1370",
8525         "ENSONIQ AudioPCI ES1370",
8526         0,
8527         0,
8528         { .init_pci = es1370_init }
8529     },
8530 #endif
8531
8532     { NULL, NULL, 0, 0, { NULL } }
8533 };
8534
8535 static void select_soundhw (const char *optarg)
8536 {
8537     struct soundhw *c;
8538
8539     if (*optarg == '?') {
8540     show_valid_cards:
8541
8542         printf ("Valid sound card names (comma separated):\n");
8543         for (c = soundhw; c->name; ++c) {
8544             printf ("%-11s %s\n", c->name, c->descr);
8545         }
8546         printf ("\n-soundhw all will enable all of the above\n");
8547         exit (*optarg != '?');
8548     }
8549     else {
8550         size_t l;
8551         const char *p;
8552         char *e;
8553         int bad_card = 0;
8554
8555         if (!strcmp (optarg, "all")) {
8556             for (c = soundhw; c->name; ++c) {
8557                 c->enabled = 1;
8558             }
8559             return;
8560         }
8561
8562         p = optarg;
8563         while (*p) {
8564             e = strchr (p, ',');
8565             l = !e ? strlen (p) : (size_t) (e - p);
8566
8567             for (c = soundhw; c->name; ++c) {
8568                 if (!strncmp (c->name, p, l)) {
8569                     c->enabled = 1;
8570                     break;
8571                 }
8572             }
8573
8574             if (!c->name) {
8575                 if (l > 80) {
8576                     fprintf (stderr,
8577                              "Unknown sound card name (too big to show)\n");
8578                 }
8579                 else {
8580                     fprintf (stderr, "Unknown sound card name `%.*s'\n",
8581                              (int) l, p);
8582                 }
8583                 bad_card = 1;
8584             }
8585             p += l + (e != NULL);
8586         }
8587
8588         if (bad_card)
8589             goto show_valid_cards;
8590     }
8591 }
8592 #endif
8593
8594 static void select_vgahw (const char *p)
8595 {
8596     const char *opts;
8597
8598     if (strstart(p, "std", &opts)) {
8599         cirrus_vga_enabled = 0;
8600         vmsvga_enabled = 0;
8601     } else if (strstart(p, "cirrus", &opts)) {
8602         cirrus_vga_enabled = 1;
8603         vmsvga_enabled = 0;
8604     } else if (strstart(p, "vmware", &opts)) {
8605         cirrus_vga_enabled = 0;
8606         vmsvga_enabled = 1;
8607     } else {
8608     invalid_vga:
8609         fprintf(stderr, "Unknown vga type: %s\n", p);
8610         exit(1);
8611     }
8612     while (*opts) {
8613         const char *nextopt;
8614
8615         if (strstart(opts, ",retrace=", &nextopt)) {
8616             opts = nextopt;
8617             if (strstart(opts, "dumb", &nextopt))
8618                 vga_retrace_method = VGA_RETRACE_DUMB;
8619             else if (strstart(opts, "precise", &nextopt))
8620                 vga_retrace_method = VGA_RETRACE_PRECISE;
8621             else goto invalid_vga;
8622         } else goto invalid_vga;
8623         opts = nextopt;
8624     }
8625 }
8626
8627 #ifdef _WIN32
8628 static BOOL WINAPI qemu_ctrl_handler(DWORD type)
8629 {
8630     exit(STATUS_CONTROL_C_EXIT);
8631     return TRUE;
8632 }
8633 #endif
8634
8635 static int qemu_uuid_parse(const char *str, uint8_t *uuid)
8636 {
8637     int ret;
8638
8639     if(strlen(str) != 36)
8640         return -1;
8641
8642     ret = sscanf(str, UUID_FMT, &uuid[0], &uuid[1], &uuid[2], &uuid[3],
8643             &uuid[4], &uuid[5], &uuid[6], &uuid[7], &uuid[8], &uuid[9],
8644             &uuid[10], &uuid[11], &uuid[12], &uuid[13], &uuid[14], &uuid[15]);
8645
8646     if(ret != 16)
8647         return -1;
8648
8649     return 0;
8650 }
8651
8652 #define MAX_NET_CLIENTS 32
8653
8654 #ifndef _WIN32
8655
8656 static void termsig_handler(int signal)
8657 {
8658     qemu_system_shutdown_request();
8659 }
8660
8661 static void termsig_setup(void)
8662 {
8663     struct sigaction act;
8664
8665     memset(&act, 0, sizeof(act));
8666     act.sa_handler = termsig_handler;
8667     sigaction(SIGINT,  &act, NULL);
8668     sigaction(SIGHUP,  &act, NULL);
8669     sigaction(SIGTERM, &act, NULL);
8670 }
8671
8672 #endif
8673
8674 int main(int argc, char **argv)
8675 {
8676 #ifdef CONFIG_GDBSTUB
8677     int use_gdbstub;
8678     const char *gdbstub_port;
8679 #endif
8680     uint32_t boot_devices_bitmap = 0;
8681     int i;
8682     int snapshot, linux_boot, net_boot;
8683     const char *initrd_filename;
8684     const char *kernel_filename, *kernel_cmdline;
8685     const char *boot_devices = "";
8686     DisplayState *ds = &display_state;
8687     int cyls, heads, secs, translation;
8688     const char *net_clients[MAX_NET_CLIENTS];
8689     int nb_net_clients;
8690     int hda_index;
8691     int optind;
8692     const char *r, *optarg;
8693     CharDriverState *monitor_hd;
8694     const char *monitor_device;
8695     const char *serial_devices[MAX_SERIAL_PORTS];
8696     int serial_device_index;
8697     const char *parallel_devices[MAX_PARALLEL_PORTS];
8698     int parallel_device_index;
8699     const char *loadvm = NULL;
8700     QEMUMachine *machine;
8701     const char *cpu_model;
8702     const char *usb_devices[MAX_USB_CMDLINE];
8703     int usb_devices_index;
8704     int fds[2];
8705     int tb_size;
8706     const char *pid_file = NULL;
8707     VLANState *vlan;
8708     int autostart;
8709
8710     LIST_INIT (&vm_change_state_head);
8711 #ifndef _WIN32
8712     {
8713         struct sigaction act;
8714         sigfillset(&act.sa_mask);
8715         act.sa_flags = 0;
8716         act.sa_handler = SIG_IGN;
8717         sigaction(SIGPIPE, &act, NULL);
8718     }
8719 #else
8720     SetConsoleCtrlHandler(qemu_ctrl_handler, TRUE);
8721     /* Note: cpu_interrupt() is currently not SMP safe, so we force
8722        QEMU to run on a single CPU */
8723     {
8724         HANDLE h;
8725         DWORD mask, smask;
8726         int i;
8727         h = GetCurrentProcess();
8728         if (GetProcessAffinityMask(h, &mask, &smask)) {
8729             for(i = 0; i < 32; i++) {
8730                 if (mask & (1 << i))
8731                     break;
8732             }
8733             if (i != 32) {
8734                 mask = 1 << i;
8735                 SetProcessAffinityMask(h, mask);
8736             }
8737         }
8738     }
8739 #endif
8740
8741     register_machines();
8742     machine = first_machine;
8743     cpu_model = NULL;
8744     initrd_filename = NULL;
8745     ram_size = 0;
8746     vga_ram_size = VGA_RAM_SIZE;
8747 #ifdef CONFIG_GDBSTUB
8748     use_gdbstub = 0;
8749     gdbstub_port = DEFAULT_GDBSTUB_PORT;
8750 #endif
8751     snapshot = 0;
8752     nographic = 0;
8753     curses = 0;
8754     kernel_filename = NULL;
8755     kernel_cmdline = "";
8756     cyls = heads = secs = 0;
8757     translation = BIOS_ATA_TRANSLATION_AUTO;
8758     monitor_device = "vc";
8759
8760     serial_devices[0] = "vc:80Cx24C";
8761     for(i = 1; i < MAX_SERIAL_PORTS; i++)
8762         serial_devices[i] = NULL;
8763     serial_device_index = 0;
8764
8765     parallel_devices[0] = "vc:640x480";
8766     for(i = 1; i < MAX_PARALLEL_PORTS; i++)
8767         parallel_devices[i] = NULL;
8768     parallel_device_index = 0;
8769
8770     usb_devices_index = 0;
8771
8772     nb_net_clients = 0;
8773     nb_drives = 0;
8774     nb_drives_opt = 0;
8775     hda_index = -1;
8776
8777     nb_nics = 0;
8778
8779     tb_size = 0;
8780     autostart= 1;
8781
8782     optind = 1;
8783     for(;;) {
8784         if (optind >= argc)
8785             break;
8786         r = argv[optind];
8787         if (r[0] != '-') {
8788             hda_index = drive_add(argv[optind++], HD_ALIAS, 0);
8789         } else {
8790             const QEMUOption *popt;
8791
8792             optind++;
8793             /* Treat --foo the same as -foo.  */
8794             if (r[1] == '-')
8795                 r++;
8796             popt = qemu_options;
8797             for(;;) {
8798                 if (!popt->name) {
8799                     fprintf(stderr, "%s: invalid option -- '%s'\n",
8800                             argv[0], r);
8801                     exit(1);
8802                 }
8803                 if (!strcmp(popt->name, r + 1))
8804                     break;
8805                 popt++;
8806             }
8807             if (popt->flags & HAS_ARG) {
8808                 if (optind >= argc) {
8809                     fprintf(stderr, "%s: option '%s' requires an argument\n",
8810                             argv[0], r);
8811                     exit(1);
8812                 }
8813                 optarg = argv[optind++];
8814             } else {
8815                 optarg = NULL;
8816             }
8817
8818             switch(popt->index) {
8819             case QEMU_OPTION_M:
8820                 machine = find_machine(optarg);
8821                 if (!machine) {
8822                     QEMUMachine *m;
8823                     printf("Supported machines are:\n");
8824                     for(m = first_machine; m != NULL; m = m->next) {
8825                         printf("%-10s %s%s\n",
8826                                m->name, m->desc,
8827                                m == first_machine ? " (default)" : "");
8828                     }
8829                     exit(*optarg != '?');
8830                 }
8831                 break;
8832             case QEMU_OPTION_cpu:
8833                 /* hw initialization will check this */
8834                 if (*optarg == '?') {
8835 /* XXX: implement xxx_cpu_list for targets that still miss it */
8836 #if defined(cpu_list)
8837                     cpu_list(stdout, &fprintf);
8838 #endif
8839                     exit(0);
8840                 } else {
8841                     cpu_model = optarg;
8842                 }
8843                 break;
8844             case QEMU_OPTION_initrd:
8845                 initrd_filename = optarg;
8846                 break;
8847             case QEMU_OPTION_hda:
8848                 if (cyls == 0)
8849                     hda_index = drive_add(optarg, HD_ALIAS, 0);
8850                 else
8851                     hda_index = drive_add(optarg, HD_ALIAS
8852                              ",cyls=%d,heads=%d,secs=%d%s",
8853                              0, cyls, heads, secs,
8854                              translation == BIOS_ATA_TRANSLATION_LBA ?
8855                                  ",trans=lba" :
8856                              translation == BIOS_ATA_TRANSLATION_NONE ?
8857                                  ",trans=none" : "");
8858                  break;
8859             case QEMU_OPTION_hdb:
8860             case QEMU_OPTION_hdc:
8861             case QEMU_OPTION_hdd:
8862                 drive_add(optarg, HD_ALIAS, popt->index - QEMU_OPTION_hda);
8863                 break;
8864             case QEMU_OPTION_drive:
8865                 drive_add(NULL, "%s", optarg);
8866                 break;
8867             case QEMU_OPTION_mtdblock:
8868                 drive_add(optarg, MTD_ALIAS);
8869                 break;
8870             case QEMU_OPTION_sd:
8871                 drive_add(optarg, SD_ALIAS);
8872                 break;
8873             case QEMU_OPTION_pflash:
8874                 drive_add(optarg, PFLASH_ALIAS);
8875                 break;
8876             case QEMU_OPTION_snapshot:
8877                 snapshot = 1;
8878                 break;
8879             case QEMU_OPTION_hdachs:
8880                 {
8881                     const char *p;
8882                     p = optarg;
8883                     cyls = strtol(p, (char **)&p, 0);
8884                     if (cyls < 1 || cyls > 16383)
8885                         goto chs_fail;
8886                     if (*p != ',')
8887                         goto chs_fail;
8888                     p++;
8889                     heads = strtol(p, (char **)&p, 0);
8890                     if (heads < 1 || heads > 16)
8891                         goto chs_fail;
8892                     if (*p != ',')
8893                         goto chs_fail;
8894                     p++;
8895                     secs = strtol(p, (char **)&p, 0);
8896                     if (secs < 1 || secs > 63)
8897                         goto chs_fail;
8898                     if (*p == ',') {
8899                         p++;
8900                         if (!strcmp(p, "none"))
8901                             translation = BIOS_ATA_TRANSLATION_NONE;
8902                         else if (!strcmp(p, "lba"))
8903                             translation = BIOS_ATA_TRANSLATION_LBA;
8904                         else if (!strcmp(p, "auto"))
8905                             translation = BIOS_ATA_TRANSLATION_AUTO;
8906                         else
8907                             goto chs_fail;
8908                     } else if (*p != '\0') {
8909                     chs_fail:
8910                         fprintf(stderr, "qemu: invalid physical CHS format\n");
8911                         exit(1);
8912                     }
8913                     if (hda_index != -1)
8914                         snprintf(drives_opt[hda_index].opt,
8915                                  sizeof(drives_opt[hda_index].opt),
8916                                  HD_ALIAS ",cyls=%d,heads=%d,secs=%d%s",
8917                                  0, cyls, heads, secs,
8918                                  translation == BIOS_ATA_TRANSLATION_LBA ?
8919                                     ",trans=lba" :
8920                                  translation == BIOS_ATA_TRANSLATION_NONE ?
8921                                      ",trans=none" : "");
8922                 }
8923                 break;
8924             case QEMU_OPTION_nographic:
8925                 nographic = 1;
8926                 break;
8927 #ifdef CONFIG_CURSES
8928             case QEMU_OPTION_curses:
8929                 curses = 1;
8930                 break;
8931 #endif
8932             case QEMU_OPTION_portrait:
8933                 graphic_rotate = 1;
8934                 break;
8935             case QEMU_OPTION_kernel:
8936                 kernel_filename = optarg;
8937                 break;
8938             case QEMU_OPTION_append:
8939                 kernel_cmdline = optarg;
8940                 break;
8941             case QEMU_OPTION_cdrom:
8942                 drive_add(optarg, CDROM_ALIAS);
8943                 break;
8944             case QEMU_OPTION_boot:
8945                 boot_devices = optarg;
8946                 /* We just do some generic consistency checks */
8947                 {
8948                     /* Could easily be extended to 64 devices if needed */
8949                     const char *p;
8950                     
8951                     boot_devices_bitmap = 0;
8952                     for (p = boot_devices; *p != '\0'; p++) {
8953                         /* Allowed boot devices are:
8954                          * a b     : floppy disk drives
8955                          * c ... f : IDE disk drives
8956                          * g ... m : machine implementation dependant drives
8957                          * n ... p : network devices
8958                          * It's up to each machine implementation to check
8959                          * if the given boot devices match the actual hardware
8960                          * implementation and firmware features.
8961                          */
8962                         if (*p < 'a' || *p > 'q') {
8963                             fprintf(stderr, "Invalid boot device '%c'\n", *p);
8964                             exit(1);
8965                         }
8966                         if (boot_devices_bitmap & (1 << (*p - 'a'))) {
8967                             fprintf(stderr,
8968                                     "Boot device '%c' was given twice\n",*p);
8969                             exit(1);
8970                         }
8971                         boot_devices_bitmap |= 1 << (*p - 'a');
8972                     }
8973                 }
8974                 break;
8975             case QEMU_OPTION_fda:
8976             case QEMU_OPTION_fdb:
8977                 drive_add(optarg, FD_ALIAS, popt->index - QEMU_OPTION_fda);
8978                 break;
8979 #ifdef TARGET_I386
8980             case QEMU_OPTION_no_fd_bootchk:
8981                 fd_bootchk = 0;
8982                 break;
8983 #endif
8984             case QEMU_OPTION_net:
8985                 if (nb_net_clients >= MAX_NET_CLIENTS) {
8986                     fprintf(stderr, "qemu: too many network clients\n");
8987                     exit(1);
8988                 }
8989                 net_clients[nb_net_clients] = optarg;
8990                 nb_net_clients++;
8991                 break;
8992 #ifdef CONFIG_SLIRP
8993             case QEMU_OPTION_tftp:
8994                 tftp_prefix = optarg;
8995                 break;
8996             case QEMU_OPTION_bootp:
8997                 bootp_filename = optarg;
8998                 break;
8999 #ifndef _WIN32
9000             case QEMU_OPTION_smb:
9001                 net_slirp_smb(optarg);
9002                 break;
9003 #endif
9004             case QEMU_OPTION_redir:
9005                 net_slirp_redir(optarg);
9006                 break;
9007 #endif
9008 #ifdef HAS_AUDIO
9009             case QEMU_OPTION_audio_help:
9010                 AUD_help ();
9011                 exit (0);
9012                 break;
9013             case QEMU_OPTION_soundhw:
9014                 select_soundhw (optarg);
9015                 break;
9016 #endif
9017             case QEMU_OPTION_h:
9018                 help(0);
9019                 break;
9020             case QEMU_OPTION_m: {
9021                 uint64_t value;
9022                 char *ptr;
9023
9024                 value = strtoul(optarg, &ptr, 10);
9025                 switch (*ptr) {
9026                 case 0: case 'M': case 'm':
9027                     value <<= 20;
9028                     break;
9029                 case 'G': case 'g':
9030                     value <<= 30;
9031                     break;
9032                 default:
9033                     fprintf(stderr, "qemu: invalid ram size: %s\n", optarg);
9034                     exit(1);
9035                 }
9036
9037                 /* On 32-bit hosts, QEMU is limited by virtual address space */
9038                 if (value > (2047 << 20)
9039 #ifndef USE_KQEMU
9040                     && HOST_LONG_BITS == 32
9041 #endif
9042                     ) {
9043                     fprintf(stderr, "qemu: at most 2047 MB RAM can be simulated\n");
9044                     exit(1);
9045                 }
9046                 if (value != (uint64_t)(ram_addr_t)value) {
9047                     fprintf(stderr, "qemu: ram size too large\n");
9048                     exit(1);
9049                 }
9050                 ram_size = value;
9051                 break;
9052             }
9053             case QEMU_OPTION_d:
9054                 {
9055                     int mask;
9056                     const CPULogItem *item;
9057
9058                     mask = cpu_str_to_log_mask(optarg);
9059                     if (!mask) {
9060                         printf("Log items (comma separated):\n");
9061                     for(item = cpu_log_items; item->mask != 0; item++) {
9062                         printf("%-10s %s\n", item->name, item->help);
9063                     }
9064                     exit(1);
9065                     }
9066                     cpu_set_log(mask);
9067                 }
9068                 break;
9069 #ifdef CONFIG_GDBSTUB
9070             case QEMU_OPTION_s:
9071                 use_gdbstub = 1;
9072                 break;
9073             case QEMU_OPTION_p:
9074                 gdbstub_port = optarg;
9075                 break;
9076 #endif
9077             case QEMU_OPTION_L:
9078                 bios_dir = optarg;
9079                 break;
9080             case QEMU_OPTION_bios:
9081                 bios_name = optarg;
9082                 break;
9083             case QEMU_OPTION_S:
9084                 autostart = 0;
9085                 break;
9086             case QEMU_OPTION_k:
9087                 keyboard_layout = optarg;
9088                 break;
9089             case QEMU_OPTION_localtime:
9090                 rtc_utc = 0;
9091                 break;
9092             case QEMU_OPTION_vga:
9093                 select_vgahw (optarg);
9094                 break;
9095             case QEMU_OPTION_g:
9096                 {
9097                     const char *p;
9098                     int w, h, depth;
9099                     p = optarg;
9100                     w = strtol(p, (char **)&p, 10);
9101                     if (w <= 0) {
9102                     graphic_error:
9103                         fprintf(stderr, "qemu: invalid resolution or depth\n");
9104                         exit(1);
9105                     }
9106                     if (*p != 'x')
9107                         goto graphic_error;
9108                     p++;
9109                     h = strtol(p, (char **)&p, 10);
9110                     if (h <= 0)
9111                         goto graphic_error;
9112                     if (*p == 'x') {
9113                         p++;
9114                         depth = strtol(p, (char **)&p, 10);
9115                         if (depth != 8 && depth != 15 && depth != 16 &&
9116                             depth != 24 && depth != 32)
9117                             goto graphic_error;
9118                     } else if (*p == '\0') {
9119                         depth = graphic_depth;
9120                     } else {
9121                         goto graphic_error;
9122                     }
9123
9124                     graphic_width = w;
9125                     graphic_height = h;
9126                     graphic_depth = depth;
9127                 }
9128                 break;
9129             case QEMU_OPTION_echr:
9130                 {
9131                     char *r;
9132                     term_escape_char = strtol(optarg, &r, 0);
9133                     if (r == optarg)
9134                         printf("Bad argument to echr\n");
9135                     break;
9136                 }
9137             case QEMU_OPTION_monitor:
9138                 monitor_device = optarg;
9139                 break;
9140             case QEMU_OPTION_serial:
9141                 if (serial_device_index >= MAX_SERIAL_PORTS) {
9142                     fprintf(stderr, "qemu: too many serial ports\n");
9143                     exit(1);
9144                 }
9145                 serial_devices[serial_device_index] = optarg;
9146                 serial_device_index++;
9147                 break;
9148             case QEMU_OPTION_parallel:
9149                 if (parallel_device_index >= MAX_PARALLEL_PORTS) {
9150                     fprintf(stderr, "qemu: too many parallel ports\n");
9151                     exit(1);
9152                 }
9153                 parallel_devices[parallel_device_index] = optarg;
9154                 parallel_device_index++;
9155                 break;
9156             case QEMU_OPTION_loadvm:
9157                 loadvm = optarg;
9158                 break;
9159             case QEMU_OPTION_full_screen:
9160                 full_screen = 1;
9161                 break;
9162 #ifdef CONFIG_SDL
9163             case QEMU_OPTION_no_frame:
9164                 no_frame = 1;
9165                 break;
9166             case QEMU_OPTION_alt_grab:
9167                 alt_grab = 1;
9168                 break;
9169             case QEMU_OPTION_no_quit:
9170                 no_quit = 1;
9171                 break;
9172 #endif
9173             case QEMU_OPTION_pidfile:
9174                 pid_file = optarg;
9175                 break;
9176 #ifdef TARGET_I386
9177             case QEMU_OPTION_win2k_hack:
9178                 win2k_install_hack = 1;
9179                 break;
9180 #endif
9181 #ifdef USE_KQEMU
9182             case QEMU_OPTION_no_kqemu:
9183                 kqemu_allowed = 0;
9184                 break;
9185             case QEMU_OPTION_kernel_kqemu:
9186                 kqemu_allowed = 2;
9187                 break;
9188 #endif
9189             case QEMU_OPTION_usb:
9190                 usb_enabled = 1;
9191                 break;
9192             case QEMU_OPTION_usbdevice:
9193                 usb_enabled = 1;
9194                 if (usb_devices_index >= MAX_USB_CMDLINE) {
9195                     fprintf(stderr, "Too many USB devices\n");
9196                     exit(1);
9197                 }
9198                 usb_devices[usb_devices_index] = optarg;
9199                 usb_devices_index++;
9200                 break;
9201             case QEMU_OPTION_smp:
9202                 smp_cpus = atoi(optarg);
9203                 if (smp_cpus < 1) {
9204                     fprintf(stderr, "Invalid number of CPUs\n");
9205                     exit(1);
9206                 }
9207                 break;
9208             case QEMU_OPTION_vnc:
9209                 vnc_display = optarg;
9210                 break;
9211             case QEMU_OPTION_no_acpi:
9212                 acpi_enabled = 0;
9213                 break;
9214             case QEMU_OPTION_no_reboot:
9215                 no_reboot = 1;
9216                 break;
9217             case QEMU_OPTION_no_shutdown:
9218                 no_shutdown = 1;
9219                 break;
9220             case QEMU_OPTION_show_cursor:
9221                 cursor_hide = 0;
9222                 break;
9223             case QEMU_OPTION_uuid:
9224                 if(qemu_uuid_parse(optarg, qemu_uuid) < 0) {
9225                     fprintf(stderr, "Fail to parse UUID string."
9226                             " Wrong format.\n");
9227                     exit(1);
9228                 }
9229                 break;
9230             case QEMU_OPTION_daemonize:
9231                 daemonize = 1;
9232                 break;
9233             case QEMU_OPTION_option_rom:
9234                 if (nb_option_roms >= MAX_OPTION_ROMS) {
9235                     fprintf(stderr, "Too many option ROMs\n");
9236                     exit(1);
9237                 }
9238                 option_rom[nb_option_roms] = optarg;
9239                 nb_option_roms++;
9240                 break;
9241             case QEMU_OPTION_semihosting:
9242                 semihosting_enabled = 1;
9243                 break;
9244             case QEMU_OPTION_name:
9245                 qemu_name = optarg;
9246                 break;
9247 #ifdef TARGET_SPARC
9248             case QEMU_OPTION_prom_env:
9249                 if (nb_prom_envs >= MAX_PROM_ENVS) {
9250                     fprintf(stderr, "Too many prom variables\n");
9251                     exit(1);
9252                 }
9253                 prom_envs[nb_prom_envs] = optarg;
9254                 nb_prom_envs++;
9255                 break;
9256 #endif
9257 #ifdef TARGET_ARM
9258             case QEMU_OPTION_old_param:
9259                 old_param = 1;
9260                 break;
9261 #endif
9262             case QEMU_OPTION_clock:
9263                 configure_alarms(optarg);
9264                 break;
9265             case QEMU_OPTION_startdate:
9266                 {
9267                     struct tm tm;
9268                     time_t rtc_start_date;
9269                     if (!strcmp(optarg, "now")) {
9270                         rtc_date_offset = -1;
9271                     } else {
9272                         if (sscanf(optarg, "%d-%d-%dT%d:%d:%d",
9273                                &tm.tm_year,
9274                                &tm.tm_mon,
9275                                &tm.tm_mday,
9276                                &tm.tm_hour,
9277                                &tm.tm_min,
9278                                &tm.tm_sec) == 6) {
9279                             /* OK */
9280                         } else if (sscanf(optarg, "%d-%d-%d",
9281                                           &tm.tm_year,
9282                                           &tm.tm_mon,
9283                                           &tm.tm_mday) == 3) {
9284                             tm.tm_hour = 0;
9285                             tm.tm_min = 0;
9286                             tm.tm_sec = 0;
9287                         } else {
9288                             goto date_fail;
9289                         }
9290                         tm.tm_year -= 1900;
9291                         tm.tm_mon--;
9292                         rtc_start_date = mktimegm(&tm);
9293                         if (rtc_start_date == -1) {
9294                         date_fail:
9295                             fprintf(stderr, "Invalid date format. Valid format are:\n"
9296                                     "'now' or '2006-06-17T16:01:21' or '2006-06-17'\n");
9297                             exit(1);
9298                         }
9299                         rtc_date_offset = time(NULL) - rtc_start_date;
9300                     }
9301                 }
9302                 break;
9303             case QEMU_OPTION_tb_size:
9304                 tb_size = strtol(optarg, NULL, 0);
9305                 if (tb_size < 0)
9306                     tb_size = 0;
9307                 break;
9308             case QEMU_OPTION_icount:
9309                 use_icount = 1;
9310                 if (strcmp(optarg, "auto") == 0) {
9311                     icount_time_shift = -1;
9312                 } else {
9313                     icount_time_shift = strtol(optarg, NULL, 0);
9314                 }
9315                 break;
9316             }
9317         }
9318     }
9319
9320     if (smp_cpus > machine->max_cpus) {
9321         fprintf(stderr, "Number of SMP cpus requested (%d), exceeds max cpus "
9322                 "supported by machine `%s' (%d)\n", smp_cpus,  machine->name,
9323                 machine->max_cpus);
9324         exit(1);
9325     }
9326
9327     if (nographic) {
9328        if (serial_device_index == 0)
9329            serial_devices[0] = "stdio";
9330        if (parallel_device_index == 0)
9331            parallel_devices[0] = "null";
9332        if (strncmp(monitor_device, "vc", 2) == 0)
9333            monitor_device = "stdio";
9334     }
9335
9336 #ifndef _WIN32
9337     if (daemonize) {
9338         pid_t pid;
9339
9340         if (pipe(fds) == -1)
9341             exit(1);
9342
9343         pid = fork();
9344         if (pid > 0) {
9345             uint8_t status;
9346             ssize_t len;
9347
9348             close(fds[1]);
9349
9350         again:
9351             len = read(fds[0], &status, 1);
9352             if (len == -1 && (errno == EINTR))
9353                 goto again;
9354
9355             if (len != 1)
9356                 exit(1);
9357             else if (status == 1) {
9358                 fprintf(stderr, "Could not acquire pidfile\n");
9359                 exit(1);
9360             } else
9361                 exit(0);
9362         } else if (pid < 0)
9363             exit(1);
9364
9365         setsid();
9366
9367         pid = fork();
9368         if (pid > 0)
9369             exit(0);
9370         else if (pid < 0)
9371             exit(1);
9372
9373         umask(027);
9374
9375         signal(SIGTSTP, SIG_IGN);
9376         signal(SIGTTOU, SIG_IGN);
9377         signal(SIGTTIN, SIG_IGN);
9378     }
9379 #endif
9380
9381     if (pid_file && qemu_create_pidfile(pid_file) != 0) {
9382         if (daemonize) {
9383             uint8_t status = 1;
9384             write(fds[1], &status, 1);
9385         } else
9386             fprintf(stderr, "Could not acquire pid file\n");
9387         exit(1);
9388     }
9389
9390 #ifdef USE_KQEMU
9391     if (smp_cpus > 1)
9392         kqemu_allowed = 0;
9393 #endif
9394     linux_boot = (kernel_filename != NULL);
9395     net_boot = (boot_devices_bitmap >> ('n' - 'a')) & 0xF;
9396
9397     if (!linux_boot && net_boot == 0 &&
9398         !machine->nodisk_ok && nb_drives_opt == 0)
9399         help(1);
9400
9401     if (!linux_boot && *kernel_cmdline != '\0') {
9402         fprintf(stderr, "-append only allowed with -kernel option\n");
9403         exit(1);
9404     }
9405
9406     if (!linux_boot && initrd_filename != NULL) {
9407         fprintf(stderr, "-initrd only allowed with -kernel option\n");
9408         exit(1);
9409     }
9410
9411     /* boot to floppy or the default cd if no hard disk defined yet */
9412     if (!boot_devices[0]) {
9413         boot_devices = "cad";
9414     }
9415     setvbuf(stdout, NULL, _IOLBF, 0);
9416
9417     init_timers();
9418     init_timer_alarm();
9419     if (use_icount && icount_time_shift < 0) {
9420         use_icount = 2;
9421         /* 125MIPS seems a reasonable initial guess at the guest speed.
9422            It will be corrected fairly quickly anyway.  */
9423         icount_time_shift = 3;
9424         init_icount_adjust();
9425     }
9426
9427 #ifdef _WIN32
9428     socket_init();
9429 #endif
9430
9431     /* init network clients */
9432     if (nb_net_clients == 0) {
9433         /* if no clients, we use a default config */
9434         net_clients[nb_net_clients++] = "nic";
9435 #ifdef CONFIG_SLIRP
9436         net_clients[nb_net_clients++] = "user";
9437 #endif
9438     }
9439
9440     for(i = 0;i < nb_net_clients; i++) {
9441         if (net_client_parse(net_clients[i]) < 0)
9442             exit(1);
9443     }
9444     for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) {
9445         if (vlan->nb_guest_devs == 0 && vlan->nb_host_devs == 0)
9446             continue;
9447         if (vlan->nb_guest_devs == 0)
9448             fprintf(stderr, "Warning: vlan %d with no nics\n", vlan->id);
9449         if (vlan->nb_host_devs == 0)
9450             fprintf(stderr,
9451                     "Warning: vlan %d is not connected to host network\n",
9452                     vlan->id);
9453     }
9454
9455 #ifdef TARGET_I386
9456     /* XXX: this should be moved in the PC machine instantiation code */
9457     if (net_boot != 0) {
9458         int netroms = 0;
9459         for (i = 0; i < nb_nics && i < 4; i++) {
9460             const char *model = nd_table[i].model;
9461             char buf[1024];
9462             if (net_boot & (1 << i)) {
9463                 if (model == NULL)
9464                     model = "ne2k_pci";
9465                 snprintf(buf, sizeof(buf), "%s/pxe-%s.bin", bios_dir, model);
9466                 if (get_image_size(buf) > 0) {
9467                     if (nb_option_roms >= MAX_OPTION_ROMS) {
9468                         fprintf(stderr, "Too many option ROMs\n");
9469                         exit(1);
9470                     }
9471                     option_rom[nb_option_roms] = strdup(buf);
9472                     nb_option_roms++;
9473                     netroms++;
9474                 }
9475             }
9476         }
9477         if (netroms == 0) {
9478             fprintf(stderr, "No valid PXE rom found for network device\n");
9479             exit(1);
9480         }
9481     }
9482 #endif
9483
9484     /* init the memory */
9485     phys_ram_size = machine->ram_require & ~RAMSIZE_FIXED;
9486
9487     if (machine->ram_require & RAMSIZE_FIXED) {
9488         if (ram_size > 0) {
9489             if (ram_size < phys_ram_size) {
9490                 fprintf(stderr, "Machine `%s' requires %llu bytes of memory\n",
9491                                 machine->name, (unsigned long long) phys_ram_size);
9492                 exit(-1);
9493             }
9494
9495             phys_ram_size = ram_size;
9496         } else
9497             ram_size = phys_ram_size;
9498     } else {
9499         if (ram_size == 0)
9500             ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
9501
9502         phys_ram_size += ram_size;
9503     }
9504
9505     phys_ram_base = qemu_vmalloc(phys_ram_size);
9506     if (!phys_ram_base) {
9507         fprintf(stderr, "Could not allocate physical memory\n");
9508         exit(1);
9509     }
9510
9511     /* init the dynamic translator */
9512     cpu_exec_init_all(tb_size * 1024 * 1024);
9513
9514     bdrv_init();
9515
9516     /* we always create the cdrom drive, even if no disk is there */
9517
9518     if (nb_drives_opt < MAX_DRIVES)
9519         drive_add(NULL, CDROM_ALIAS);
9520
9521     /* we always create at least one floppy */
9522
9523     if (nb_drives_opt < MAX_DRIVES)
9524         drive_add(NULL, FD_ALIAS, 0);
9525
9526     /* we always create one sd slot, even if no card is in it */
9527
9528     if (nb_drives_opt < MAX_DRIVES)
9529         drive_add(NULL, SD_ALIAS);
9530
9531     /* open the virtual block devices */
9532
9533     for(i = 0; i < nb_drives_opt; i++)
9534         if (drive_init(&drives_opt[i], snapshot, machine) == -1)
9535             exit(1);
9536
9537     register_savevm("timer", 0, 2, timer_save, timer_load, NULL);
9538     register_savevm_live("ram", 0, 3, ram_save_live, NULL, ram_load, NULL);
9539
9540     /* terminal init */
9541     memset(&display_state, 0, sizeof(display_state));
9542     if (nographic) {
9543         if (curses) {
9544             fprintf(stderr, "fatal: -nographic can't be used with -curses\n");
9545             exit(1);
9546         }
9547         /* nearly nothing to do */
9548         dumb_display_init(ds);
9549     } else if (vnc_display != NULL) {
9550         vnc_display_init(ds);
9551         if (vnc_display_open(ds, vnc_display) < 0)
9552             exit(1);
9553     } else
9554 #if defined(CONFIG_CURSES)
9555     if (curses) {
9556         curses_display_init(ds, full_screen);
9557     } else
9558 #endif
9559     {
9560 #if defined(CONFIG_SDL)
9561         sdl_display_init(ds, full_screen, no_frame);
9562 #elif defined(CONFIG_COCOA)
9563         cocoa_display_init(ds, full_screen);
9564 #else
9565         dumb_display_init(ds);
9566 #endif
9567     }
9568
9569 #ifndef _WIN32
9570     /* must be after terminal init, SDL library changes signal handlers */
9571     termsig_setup();
9572 #endif
9573
9574     /* Maintain compatibility with multiple stdio monitors */
9575     if (!strcmp(monitor_device,"stdio")) {
9576         for (i = 0; i < MAX_SERIAL_PORTS; i++) {
9577             const char *devname = serial_devices[i];
9578             if (devname && !strcmp(devname,"mon:stdio")) {
9579                 monitor_device = NULL;
9580                 break;
9581             } else if (devname && !strcmp(devname,"stdio")) {
9582                 monitor_device = NULL;
9583                 serial_devices[i] = "mon:stdio";
9584                 break;
9585             }
9586         }
9587     }
9588     if (monitor_device) {
9589         monitor_hd = qemu_chr_open(monitor_device);
9590         if (!monitor_hd) {
9591             fprintf(stderr, "qemu: could not open monitor device '%s'\n", monitor_device);
9592             exit(1);
9593         }
9594         monitor_init(monitor_hd, !nographic);
9595     }
9596
9597     for(i = 0; i < MAX_SERIAL_PORTS; i++) {
9598         const char *devname = serial_devices[i];
9599         if (devname && strcmp(devname, "none")) {
9600             serial_hds[i] = qemu_chr_open(devname);
9601             if (!serial_hds[i]) {
9602                 fprintf(stderr, "qemu: could not open serial device '%s'\n",
9603                         devname);
9604                 exit(1);
9605             }
9606             if (strstart(devname, "vc", 0))
9607                 qemu_chr_printf(serial_hds[i], "serial%d console\r\n", i);
9608         }
9609     }
9610
9611     for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
9612         const char *devname = parallel_devices[i];
9613         if (devname && strcmp(devname, "none")) {
9614             parallel_hds[i] = qemu_chr_open(devname);
9615             if (!parallel_hds[i]) {
9616                 fprintf(stderr, "qemu: could not open parallel device '%s'\n",
9617                         devname);
9618                 exit(1);
9619             }
9620             if (strstart(devname, "vc", 0))
9621                 qemu_chr_printf(parallel_hds[i], "parallel%d console\r\n", i);
9622         }
9623     }
9624
9625     machine->init(ram_size, vga_ram_size, boot_devices, ds,
9626                   kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
9627
9628     /* init USB devices */
9629     if (usb_enabled) {
9630         for(i = 0; i < usb_devices_index; i++) {
9631             if (usb_device_add(usb_devices[i]) < 0) {
9632                 fprintf(stderr, "Warning: could not add USB device %s\n",
9633                         usb_devices[i]);
9634             }
9635         }
9636     }
9637
9638     if (display_state.dpy_refresh) {
9639         display_state.gui_timer = qemu_new_timer(rt_clock, gui_update, &display_state);
9640         qemu_mod_timer(display_state.gui_timer, qemu_get_clock(rt_clock));
9641     }
9642
9643 #ifdef CONFIG_GDBSTUB
9644     if (use_gdbstub) {
9645         /* XXX: use standard host:port notation and modify options
9646            accordingly. */
9647         if (gdbserver_start(gdbstub_port) < 0) {
9648             fprintf(stderr, "qemu: could not open gdbstub device on port '%s'\n",
9649                     gdbstub_port);
9650             exit(1);
9651         }
9652     }
9653 #endif
9654
9655     if (loadvm)
9656         do_loadvm(loadvm);
9657
9658     {
9659         /* XXX: simplify init */
9660         read_passwords();
9661         if (autostart) {
9662             vm_start();
9663         }
9664     }
9665
9666     if (daemonize) {
9667         uint8_t status = 0;
9668         ssize_t len;
9669         int fd;
9670
9671     again1:
9672         len = write(fds[1], &status, 1);
9673         if (len == -1 && (errno == EINTR))
9674             goto again1;
9675
9676         if (len != 1)
9677             exit(1);
9678
9679         chdir("/");
9680         TFR(fd = open("/dev/null", O_RDWR));
9681         if (fd == -1)
9682             exit(1);
9683
9684         dup2(fd, 0);
9685         dup2(fd, 1);
9686         dup2(fd, 2);
9687
9688         close(fd);
9689     }
9690
9691     main_loop();
9692     quit_timers();
9693
9694 #if !defined(_WIN32)
9695     /* close network clients */
9696     for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) {
9697         VLANClientState *vc;
9698
9699         for(vc = vlan->first_client; vc != NULL; vc = vc->next) {
9700             if (vc->fd_read == tap_receive) {
9701                 char ifname[64];
9702                 TAPState *s = vc->opaque;
9703
9704                 if (sscanf(vc->info_str, "tap: ifname=%63s ", ifname) == 1 &&
9705                     s->down_script[0])
9706                     launch_script(s->down_script, ifname, s->fd);
9707             }
9708 #if defined(CONFIG_VDE)
9709             if (vc->fd_read == vde_from_qemu) {
9710                 VDEState *s = vc->opaque;
9711                 vde_close(s->vde);
9712             }
9713 #endif
9714         }
9715     }
9716 #endif
9717     return 0;
9718 }