Make various generated structures static
[qemu/mini2440.git] / vl.c
blobc94fdc02b6dca4ef25d508d4adca28f8c6b33a2a
1 /*
2 * QEMU System Emulator
4 * Copyright (c) 2003-2008 Fabrice Bellard
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:
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
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.
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"
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>
50 #ifndef _WIN32
51 #include <sys/times.h>
52 #include <sys/wait.h>
53 #include <termios.h>
54 #include <sys/poll.h>
55 #include <sys/mman.h>
56 #include <sys/ioctl.h>
57 #include <sys/socket.h>
58 #include <netinet/in.h>
59 #include <dirent.h>
60 #include <netdb.h>
61 #include <sys/select.h>
62 #include <arpa/inet.h>
63 #ifdef _BSD
64 #include <sys/stat.h>
65 #if !defined(__APPLE__) && !defined(__OpenBSD__)
66 #include <libutil.h>
67 #endif
68 #ifdef __OpenBSD__
69 #include <net/if.h>
70 #endif
71 #elif defined (__GLIBC__) && defined (__FreeBSD_kernel__)
72 #include <freebsd/stdlib.h>
73 #else
74 #ifdef __linux__
75 #include <linux/if.h>
76 #include <linux/if_tun.h>
77 #include <pty.h>
78 #include <malloc.h>
79 #include <linux/rtc.h>
81 /* For the benefit of older linux systems which don't supply it,
82 we use a local copy of hpet.h. */
83 /* #include <linux/hpet.h> */
84 #include "hpet.h"
86 #include <linux/ppdev.h>
87 #include <linux/parport.h>
88 #endif
89 #ifdef __sun__
90 #include <sys/stat.h>
91 #include <sys/ethernet.h>
92 #include <sys/sockio.h>
93 #include <netinet/arp.h>
94 #include <netinet/in.h>
95 #include <netinet/in_systm.h>
96 #include <netinet/ip.h>
97 #include <netinet/ip_icmp.h> // must come after ip.h
98 #include <netinet/udp.h>
99 #include <netinet/tcp.h>
100 #include <net/if.h>
101 #include <syslog.h>
102 #include <stropts.h>
103 #endif
104 #endif
105 #endif
107 #include "qemu_socket.h"
109 #if defined(CONFIG_SLIRP)
110 #include "libslirp.h"
111 #endif
113 #if defined(__OpenBSD__)
114 #include <util.h>
115 #endif
117 #if defined(CONFIG_VDE)
118 #include <libvdeplug.h>
119 #endif
121 #ifdef _WIN32
122 #include <malloc.h>
123 #include <sys/timeb.h>
124 #include <mmsystem.h>
125 #define getopt_long_only getopt_long
126 #define memalign(align, size) malloc(size)
127 #endif
129 #ifdef CONFIG_SDL
130 #ifdef __APPLE__
131 #include <SDL/SDL.h>
132 #endif
133 #endif /* CONFIG_SDL */
135 #ifdef CONFIG_COCOA
136 #undef main
137 #define main qemu_main
138 #endif /* CONFIG_COCOA */
140 #include "disas.h"
142 #include "exec-all.h"
144 #define DEFAULT_NETWORK_SCRIPT "/etc/qemu-ifup"
145 #define DEFAULT_NETWORK_DOWN_SCRIPT "/etc/qemu-ifdown"
146 #ifdef __sun__
147 #define SMBD_COMMAND "/usr/sfw/sbin/smbd"
148 #else
149 #define SMBD_COMMAND "/usr/sbin/smbd"
150 #endif
152 //#define DEBUG_UNUSED_IOPORT
153 //#define DEBUG_IOPORT
154 //#define DEBUG_NET
155 //#define DEBUG_SLIRP
157 #ifdef TARGET_PPC
158 #define DEFAULT_RAM_SIZE 144
159 #else
160 #define DEFAULT_RAM_SIZE 128
161 #endif
163 /* Max number of USB devices that can be specified on the commandline. */
164 #define MAX_USB_CMDLINE 8
166 /* XXX: use a two level table to limit memory usage */
167 #define MAX_IOPORTS 65536
169 const char *bios_dir = CONFIG_QEMU_SHAREDIR;
170 const char *bios_name = NULL;
171 static void *ioport_opaque[MAX_IOPORTS];
172 static IOPortReadFunc *ioport_read_table[3][MAX_IOPORTS];
173 static IOPortWriteFunc *ioport_write_table[3][MAX_IOPORTS];
174 /* Note: drives_table[MAX_DRIVES] is a dummy block driver if none available
175 to store the VM snapshots */
176 DriveInfo drives_table[MAX_DRIVES+1];
177 int nb_drives;
178 /* point to the block driver where the snapshots are managed */
179 static BlockDriverState *bs_snapshots;
180 static int vga_ram_size;
181 enum vga_retrace_method vga_retrace_method = VGA_RETRACE_DUMB;
182 static DisplayState display_state;
183 int nographic;
184 static int curses;
185 const char* keyboard_layout = NULL;
186 int64_t ticks_per_sec;
187 ram_addr_t ram_size;
188 int nb_nics;
189 NICInfo nd_table[MAX_NICS];
190 int vm_running;
191 static int rtc_utc = 1;
192 static int rtc_date_offset = -1; /* -1 means no change */
193 int cirrus_vga_enabled = 1;
194 int vmsvga_enabled = 0;
195 #ifdef TARGET_SPARC
196 int graphic_width = 1024;
197 int graphic_height = 768;
198 int graphic_depth = 8;
199 #else
200 int graphic_width = 800;
201 int graphic_height = 600;
202 int graphic_depth = 15;
203 #endif
204 static int full_screen = 0;
205 static int no_frame = 0;
206 int no_quit = 0;
207 CharDriverState *serial_hds[MAX_SERIAL_PORTS];
208 CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
209 #ifdef TARGET_I386
210 int win2k_install_hack = 0;
211 #endif
212 int usb_enabled = 0;
213 static VLANState *first_vlan;
214 int smp_cpus = 1;
215 const char *vnc_display;
216 #if defined(TARGET_SPARC)
217 #define MAX_CPUS 16
218 #elif defined(TARGET_I386)
219 #define MAX_CPUS 255
220 #else
221 #define MAX_CPUS 1
222 #endif
223 int acpi_enabled = 1;
224 int fd_bootchk = 1;
225 int no_reboot = 0;
226 int no_shutdown = 0;
227 int cursor_hide = 1;
228 int graphic_rotate = 0;
229 int daemonize = 0;
230 const char *option_rom[MAX_OPTION_ROMS];
231 int nb_option_roms;
232 int semihosting_enabled = 0;
233 #ifdef TARGET_ARM
234 int old_param = 0;
235 #endif
236 const char *qemu_name;
237 int alt_grab = 0;
238 #ifdef TARGET_SPARC
239 unsigned int nb_prom_envs = 0;
240 const char *prom_envs[MAX_PROM_ENVS];
241 #endif
242 static int nb_drives_opt;
243 static struct drive_opt {
244 const char *file;
245 char opt[1024];
246 } drives_opt[MAX_DRIVES];
248 static CPUState *cur_cpu;
249 static CPUState *next_cpu;
250 static int event_pending = 1;
251 /* Conversion factor from emulated instructions to virtual clock ticks. */
252 static int icount_time_shift;
253 /* Arbitrarily pick 1MIPS as the minimum allowable speed. */
254 #define MAX_ICOUNT_SHIFT 10
255 /* Compensate for varying guest execution speed. */
256 static int64_t qemu_icount_bias;
257 static QEMUTimer *icount_rt_timer;
258 static QEMUTimer *icount_vm_timer;
260 uint8_t qemu_uuid[16];
262 #define TFR(expr) do { if ((expr) != -1) break; } while (errno == EINTR)
264 /***********************************************************/
265 /* x86 ISA bus support */
267 target_phys_addr_t isa_mem_base = 0;
268 PicState2 *isa_pic;
270 static IOPortReadFunc default_ioport_readb, default_ioport_readw, default_ioport_readl;
271 static IOPortWriteFunc default_ioport_writeb, default_ioport_writew, default_ioport_writel;
273 static uint32_t ioport_read(int index, uint32_t address)
275 static IOPortReadFunc *default_func[3] = {
276 default_ioport_readb,
277 default_ioport_readw,
278 default_ioport_readl
280 IOPortReadFunc *func = ioport_read_table[index][address];
281 if (!func)
282 func = default_func[index];
283 return func(ioport_opaque[address], address);
286 static void ioport_write(int index, uint32_t address, uint32_t data)
288 static IOPortWriteFunc *default_func[3] = {
289 default_ioport_writeb,
290 default_ioport_writew,
291 default_ioport_writel
293 IOPortWriteFunc *func = ioport_write_table[index][address];
294 if (!func)
295 func = default_func[index];
296 func(ioport_opaque[address], address, data);
299 static uint32_t default_ioport_readb(void *opaque, uint32_t address)
301 #ifdef DEBUG_UNUSED_IOPORT
302 fprintf(stderr, "unused inb: port=0x%04x\n", address);
303 #endif
304 return 0xff;
307 static void default_ioport_writeb(void *opaque, uint32_t address, uint32_t data)
309 #ifdef DEBUG_UNUSED_IOPORT
310 fprintf(stderr, "unused outb: port=0x%04x data=0x%02x\n", address, data);
311 #endif
314 /* default is to make two byte accesses */
315 static uint32_t default_ioport_readw(void *opaque, uint32_t address)
317 uint32_t data;
318 data = ioport_read(0, address);
319 address = (address + 1) & (MAX_IOPORTS - 1);
320 data |= ioport_read(0, address) << 8;
321 return data;
324 static void default_ioport_writew(void *opaque, uint32_t address, uint32_t data)
326 ioport_write(0, address, data & 0xff);
327 address = (address + 1) & (MAX_IOPORTS - 1);
328 ioport_write(0, address, (data >> 8) & 0xff);
331 static uint32_t default_ioport_readl(void *opaque, uint32_t address)
333 #ifdef DEBUG_UNUSED_IOPORT
334 fprintf(stderr, "unused inl: port=0x%04x\n", address);
335 #endif
336 return 0xffffffff;
339 static void default_ioport_writel(void *opaque, uint32_t address, uint32_t data)
341 #ifdef DEBUG_UNUSED_IOPORT
342 fprintf(stderr, "unused outl: port=0x%04x data=0x%02x\n", address, data);
343 #endif
346 /* size is the word size in byte */
347 int register_ioport_read(int start, int length, int size,
348 IOPortReadFunc *func, void *opaque)
350 int i, bsize;
352 if (size == 1) {
353 bsize = 0;
354 } else if (size == 2) {
355 bsize = 1;
356 } else if (size == 4) {
357 bsize = 2;
358 } else {
359 hw_error("register_ioport_read: invalid size");
360 return -1;
362 for(i = start; i < start + length; i += size) {
363 ioport_read_table[bsize][i] = func;
364 if (ioport_opaque[i] != NULL && ioport_opaque[i] != opaque)
365 hw_error("register_ioport_read: invalid opaque");
366 ioport_opaque[i] = opaque;
368 return 0;
371 /* size is the word size in byte */
372 int register_ioport_write(int start, int length, int size,
373 IOPortWriteFunc *func, void *opaque)
375 int i, bsize;
377 if (size == 1) {
378 bsize = 0;
379 } else if (size == 2) {
380 bsize = 1;
381 } else if (size == 4) {
382 bsize = 2;
383 } else {
384 hw_error("register_ioport_write: invalid size");
385 return -1;
387 for(i = start; i < start + length; i += size) {
388 ioport_write_table[bsize][i] = func;
389 if (ioport_opaque[i] != NULL && ioport_opaque[i] != opaque)
390 hw_error("register_ioport_write: invalid opaque");
391 ioport_opaque[i] = opaque;
393 return 0;
396 void isa_unassign_ioport(int start, int length)
398 int i;
400 for(i = start; i < start + length; i++) {
401 ioport_read_table[0][i] = default_ioport_readb;
402 ioport_read_table[1][i] = default_ioport_readw;
403 ioport_read_table[2][i] = default_ioport_readl;
405 ioport_write_table[0][i] = default_ioport_writeb;
406 ioport_write_table[1][i] = default_ioport_writew;
407 ioport_write_table[2][i] = default_ioport_writel;
411 /***********************************************************/
413 void cpu_outb(CPUState *env, int addr, int val)
415 #ifdef DEBUG_IOPORT
416 if (loglevel & CPU_LOG_IOPORT)
417 fprintf(logfile, "outb: %04x %02x\n", addr, val);
418 #endif
419 ioport_write(0, addr, val);
420 #ifdef USE_KQEMU
421 if (env)
422 env->last_io_time = cpu_get_time_fast();
423 #endif
426 void cpu_outw(CPUState *env, int addr, int val)
428 #ifdef DEBUG_IOPORT
429 if (loglevel & CPU_LOG_IOPORT)
430 fprintf(logfile, "outw: %04x %04x\n", addr, val);
431 #endif
432 ioport_write(1, addr, val);
433 #ifdef USE_KQEMU
434 if (env)
435 env->last_io_time = cpu_get_time_fast();
436 #endif
439 void cpu_outl(CPUState *env, int addr, int val)
441 #ifdef DEBUG_IOPORT
442 if (loglevel & CPU_LOG_IOPORT)
443 fprintf(logfile, "outl: %04x %08x\n", addr, val);
444 #endif
445 ioport_write(2, addr, val);
446 #ifdef USE_KQEMU
447 if (env)
448 env->last_io_time = cpu_get_time_fast();
449 #endif
452 int cpu_inb(CPUState *env, int addr)
454 int val;
455 val = ioport_read(0, addr);
456 #ifdef DEBUG_IOPORT
457 if (loglevel & CPU_LOG_IOPORT)
458 fprintf(logfile, "inb : %04x %02x\n", addr, val);
459 #endif
460 #ifdef USE_KQEMU
461 if (env)
462 env->last_io_time = cpu_get_time_fast();
463 #endif
464 return val;
467 int cpu_inw(CPUState *env, int addr)
469 int val;
470 val = ioport_read(1, addr);
471 #ifdef DEBUG_IOPORT
472 if (loglevel & CPU_LOG_IOPORT)
473 fprintf(logfile, "inw : %04x %04x\n", addr, val);
474 #endif
475 #ifdef USE_KQEMU
476 if (env)
477 env->last_io_time = cpu_get_time_fast();
478 #endif
479 return val;
482 int cpu_inl(CPUState *env, int addr)
484 int val;
485 val = ioport_read(2, addr);
486 #ifdef DEBUG_IOPORT
487 if (loglevel & CPU_LOG_IOPORT)
488 fprintf(logfile, "inl : %04x %08x\n", addr, val);
489 #endif
490 #ifdef USE_KQEMU
491 if (env)
492 env->last_io_time = cpu_get_time_fast();
493 #endif
494 return val;
497 /***********************************************************/
498 void hw_error(const char *fmt, ...)
500 va_list ap;
501 CPUState *env;
503 va_start(ap, fmt);
504 fprintf(stderr, "qemu: hardware error: ");
505 vfprintf(stderr, fmt, ap);
506 fprintf(stderr, "\n");
507 for(env = first_cpu; env != NULL; env = env->next_cpu) {
508 fprintf(stderr, "CPU #%d:\n", env->cpu_index);
509 #ifdef TARGET_I386
510 cpu_dump_state(env, stderr, fprintf, X86_DUMP_FPU);
511 #else
512 cpu_dump_state(env, stderr, fprintf, 0);
513 #endif
515 va_end(ap);
516 abort();
519 /***********************************************************/
520 /* keyboard/mouse */
522 static QEMUPutKBDEvent *qemu_put_kbd_event;
523 static void *qemu_put_kbd_event_opaque;
524 static QEMUPutMouseEntry *qemu_put_mouse_event_head;
525 static QEMUPutMouseEntry *qemu_put_mouse_event_current;
527 void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque)
529 qemu_put_kbd_event_opaque = opaque;
530 qemu_put_kbd_event = func;
533 QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
534 void *opaque, int absolute,
535 const char *name)
537 QEMUPutMouseEntry *s, *cursor;
539 s = qemu_mallocz(sizeof(QEMUPutMouseEntry));
540 if (!s)
541 return NULL;
543 s->qemu_put_mouse_event = func;
544 s->qemu_put_mouse_event_opaque = opaque;
545 s->qemu_put_mouse_event_absolute = absolute;
546 s->qemu_put_mouse_event_name = qemu_strdup(name);
547 s->next = NULL;
549 if (!qemu_put_mouse_event_head) {
550 qemu_put_mouse_event_head = qemu_put_mouse_event_current = s;
551 return s;
554 cursor = qemu_put_mouse_event_head;
555 while (cursor->next != NULL)
556 cursor = cursor->next;
558 cursor->next = s;
559 qemu_put_mouse_event_current = s;
561 return s;
564 void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry)
566 QEMUPutMouseEntry *prev = NULL, *cursor;
568 if (!qemu_put_mouse_event_head || entry == NULL)
569 return;
571 cursor = qemu_put_mouse_event_head;
572 while (cursor != NULL && cursor != entry) {
573 prev = cursor;
574 cursor = cursor->next;
577 if (cursor == NULL) // does not exist or list empty
578 return;
579 else if (prev == NULL) { // entry is head
580 qemu_put_mouse_event_head = cursor->next;
581 if (qemu_put_mouse_event_current == entry)
582 qemu_put_mouse_event_current = cursor->next;
583 qemu_free(entry->qemu_put_mouse_event_name);
584 qemu_free(entry);
585 return;
588 prev->next = entry->next;
590 if (qemu_put_mouse_event_current == entry)
591 qemu_put_mouse_event_current = prev;
593 qemu_free(entry->qemu_put_mouse_event_name);
594 qemu_free(entry);
597 void kbd_put_keycode(int keycode)
599 if (qemu_put_kbd_event) {
600 qemu_put_kbd_event(qemu_put_kbd_event_opaque, keycode);
604 void kbd_mouse_event(int dx, int dy, int dz, int buttons_state)
606 QEMUPutMouseEvent *mouse_event;
607 void *mouse_event_opaque;
608 int width;
610 if (!qemu_put_mouse_event_current) {
611 return;
614 mouse_event =
615 qemu_put_mouse_event_current->qemu_put_mouse_event;
616 mouse_event_opaque =
617 qemu_put_mouse_event_current->qemu_put_mouse_event_opaque;
619 if (mouse_event) {
620 if (graphic_rotate) {
621 if (qemu_put_mouse_event_current->qemu_put_mouse_event_absolute)
622 width = 0x7fff;
623 else
624 width = graphic_width - 1;
625 mouse_event(mouse_event_opaque,
626 width - dy, dx, dz, buttons_state);
627 } else
628 mouse_event(mouse_event_opaque,
629 dx, dy, dz, buttons_state);
633 int kbd_mouse_is_absolute(void)
635 if (!qemu_put_mouse_event_current)
636 return 0;
638 return qemu_put_mouse_event_current->qemu_put_mouse_event_absolute;
641 void do_info_mice(void)
643 QEMUPutMouseEntry *cursor;
644 int index = 0;
646 if (!qemu_put_mouse_event_head) {
647 term_printf("No mouse devices connected\n");
648 return;
651 term_printf("Mouse devices available:\n");
652 cursor = qemu_put_mouse_event_head;
653 while (cursor != NULL) {
654 term_printf("%c Mouse #%d: %s\n",
655 (cursor == qemu_put_mouse_event_current ? '*' : ' '),
656 index, cursor->qemu_put_mouse_event_name);
657 index++;
658 cursor = cursor->next;
662 void do_mouse_set(int index)
664 QEMUPutMouseEntry *cursor;
665 int i = 0;
667 if (!qemu_put_mouse_event_head) {
668 term_printf("No mouse devices connected\n");
669 return;
672 cursor = qemu_put_mouse_event_head;
673 while (cursor != NULL && index != i) {
674 i++;
675 cursor = cursor->next;
678 if (cursor != NULL)
679 qemu_put_mouse_event_current = cursor;
680 else
681 term_printf("Mouse at given index not found\n");
684 /* compute with 96 bit intermediate result: (a*b)/c */
685 uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c)
687 union {
688 uint64_t ll;
689 struct {
690 #ifdef WORDS_BIGENDIAN
691 uint32_t high, low;
692 #else
693 uint32_t low, high;
694 #endif
695 } l;
696 } u, res;
697 uint64_t rl, rh;
699 u.ll = a;
700 rl = (uint64_t)u.l.low * (uint64_t)b;
701 rh = (uint64_t)u.l.high * (uint64_t)b;
702 rh += (rl >> 32);
703 res.l.high = rh / c;
704 res.l.low = (((rh % c) << 32) + (rl & 0xffffffff)) / c;
705 return res.ll;
708 /***********************************************************/
709 /* real time host monotonic timer */
711 #define QEMU_TIMER_BASE 1000000000LL
713 #ifdef WIN32
715 static int64_t clock_freq;
717 static void init_get_clock(void)
719 LARGE_INTEGER freq;
720 int ret;
721 ret = QueryPerformanceFrequency(&freq);
722 if (ret == 0) {
723 fprintf(stderr, "Could not calibrate ticks\n");
724 exit(1);
726 clock_freq = freq.QuadPart;
729 static int64_t get_clock(void)
731 LARGE_INTEGER ti;
732 QueryPerformanceCounter(&ti);
733 return muldiv64(ti.QuadPart, QEMU_TIMER_BASE, clock_freq);
736 #else
738 static int use_rt_clock;
740 static void init_get_clock(void)
742 use_rt_clock = 0;
743 #if defined(__linux__)
745 struct timespec ts;
746 if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0) {
747 use_rt_clock = 1;
750 #endif
753 static int64_t get_clock(void)
755 #if defined(__linux__)
756 if (use_rt_clock) {
757 struct timespec ts;
758 clock_gettime(CLOCK_MONOTONIC, &ts);
759 return ts.tv_sec * 1000000000LL + ts.tv_nsec;
760 } else
761 #endif
763 /* XXX: using gettimeofday leads to problems if the date
764 changes, so it should be avoided. */
765 struct timeval tv;
766 gettimeofday(&tv, NULL);
767 return tv.tv_sec * 1000000000LL + (tv.tv_usec * 1000);
770 #endif
772 /* Return the virtual CPU time, based on the instruction counter. */
773 static int64_t cpu_get_icount(void)
775 int64_t icount;
776 CPUState *env = cpu_single_env;;
777 icount = qemu_icount;
778 if (env) {
779 if (!can_do_io(env))
780 fprintf(stderr, "Bad clock read\n");
781 icount -= (env->icount_decr.u16.low + env->icount_extra);
783 return qemu_icount_bias + (icount << icount_time_shift);
786 /***********************************************************/
787 /* guest cycle counter */
789 static int64_t cpu_ticks_prev;
790 static int64_t cpu_ticks_offset;
791 static int64_t cpu_clock_offset;
792 static int cpu_ticks_enabled;
794 /* return the host CPU cycle counter and handle stop/restart */
795 int64_t cpu_get_ticks(void)
797 if (use_icount) {
798 return cpu_get_icount();
800 if (!cpu_ticks_enabled) {
801 return cpu_ticks_offset;
802 } else {
803 int64_t ticks;
804 ticks = cpu_get_real_ticks();
805 if (cpu_ticks_prev > ticks) {
806 /* Note: non increasing ticks may happen if the host uses
807 software suspend */
808 cpu_ticks_offset += cpu_ticks_prev - ticks;
810 cpu_ticks_prev = ticks;
811 return ticks + cpu_ticks_offset;
815 /* return the host CPU monotonic timer and handle stop/restart */
816 static int64_t cpu_get_clock(void)
818 int64_t ti;
819 if (!cpu_ticks_enabled) {
820 return cpu_clock_offset;
821 } else {
822 ti = get_clock();
823 return ti + cpu_clock_offset;
827 /* enable cpu_get_ticks() */
828 void cpu_enable_ticks(void)
830 if (!cpu_ticks_enabled) {
831 cpu_ticks_offset -= cpu_get_real_ticks();
832 cpu_clock_offset -= get_clock();
833 cpu_ticks_enabled = 1;
837 /* disable cpu_get_ticks() : the clock is stopped. You must not call
838 cpu_get_ticks() after that. */
839 void cpu_disable_ticks(void)
841 if (cpu_ticks_enabled) {
842 cpu_ticks_offset = cpu_get_ticks();
843 cpu_clock_offset = cpu_get_clock();
844 cpu_ticks_enabled = 0;
848 /***********************************************************/
849 /* timers */
851 #define QEMU_TIMER_REALTIME 0
852 #define QEMU_TIMER_VIRTUAL 1
854 struct QEMUClock {
855 int type;
856 /* XXX: add frequency */
859 struct QEMUTimer {
860 QEMUClock *clock;
861 int64_t expire_time;
862 QEMUTimerCB *cb;
863 void *opaque;
864 struct QEMUTimer *next;
867 struct qemu_alarm_timer {
868 char const *name;
869 unsigned int flags;
871 int (*start)(struct qemu_alarm_timer *t);
872 void (*stop)(struct qemu_alarm_timer *t);
873 void (*rearm)(struct qemu_alarm_timer *t);
874 void *priv;
877 #define ALARM_FLAG_DYNTICKS 0x1
878 #define ALARM_FLAG_EXPIRED 0x2
880 static inline int alarm_has_dynticks(struct qemu_alarm_timer *t)
882 return t->flags & ALARM_FLAG_DYNTICKS;
885 static void qemu_rearm_alarm_timer(struct qemu_alarm_timer *t)
887 if (!alarm_has_dynticks(t))
888 return;
890 t->rearm(t);
893 /* TODO: MIN_TIMER_REARM_US should be optimized */
894 #define MIN_TIMER_REARM_US 250
896 static struct qemu_alarm_timer *alarm_timer;
898 #ifdef _WIN32
900 struct qemu_alarm_win32 {
901 MMRESULT timerId;
902 HANDLE host_alarm;
903 unsigned int period;
904 } alarm_win32_data = {0, NULL, -1};
906 static int win32_start_timer(struct qemu_alarm_timer *t);
907 static void win32_stop_timer(struct qemu_alarm_timer *t);
908 static void win32_rearm_timer(struct qemu_alarm_timer *t);
910 #else
912 static int unix_start_timer(struct qemu_alarm_timer *t);
913 static void unix_stop_timer(struct qemu_alarm_timer *t);
915 #ifdef __linux__
917 static int dynticks_start_timer(struct qemu_alarm_timer *t);
918 static void dynticks_stop_timer(struct qemu_alarm_timer *t);
919 static void dynticks_rearm_timer(struct qemu_alarm_timer *t);
921 static int hpet_start_timer(struct qemu_alarm_timer *t);
922 static void hpet_stop_timer(struct qemu_alarm_timer *t);
924 static int rtc_start_timer(struct qemu_alarm_timer *t);
925 static void rtc_stop_timer(struct qemu_alarm_timer *t);
927 #endif /* __linux__ */
929 #endif /* _WIN32 */
931 /* Correlation between real and virtual time is always going to be
932 fairly approximate, so ignore small variation.
933 When the guest is idle real and virtual time will be aligned in
934 the IO wait loop. */
935 #define ICOUNT_WOBBLE (QEMU_TIMER_BASE / 10)
937 static void icount_adjust(void)
939 int64_t cur_time;
940 int64_t cur_icount;
941 int64_t delta;
942 static int64_t last_delta;
943 /* If the VM is not running, then do nothing. */
944 if (!vm_running)
945 return;
947 cur_time = cpu_get_clock();
948 cur_icount = qemu_get_clock(vm_clock);
949 delta = cur_icount - cur_time;
950 /* FIXME: This is a very crude algorithm, somewhat prone to oscillation. */
951 if (delta > 0
952 && last_delta + ICOUNT_WOBBLE < delta * 2
953 && icount_time_shift > 0) {
954 /* The guest is getting too far ahead. Slow time down. */
955 icount_time_shift--;
957 if (delta < 0
958 && last_delta - ICOUNT_WOBBLE > delta * 2
959 && icount_time_shift < MAX_ICOUNT_SHIFT) {
960 /* The guest is getting too far behind. Speed time up. */
961 icount_time_shift++;
963 last_delta = delta;
964 qemu_icount_bias = cur_icount - (qemu_icount << icount_time_shift);
967 static void icount_adjust_rt(void * opaque)
969 qemu_mod_timer(icount_rt_timer,
970 qemu_get_clock(rt_clock) + 1000);
971 icount_adjust();
974 static void icount_adjust_vm(void * opaque)
976 qemu_mod_timer(icount_vm_timer,
977 qemu_get_clock(vm_clock) + QEMU_TIMER_BASE / 10);
978 icount_adjust();
981 static void init_icount_adjust(void)
983 /* Have both realtime and virtual time triggers for speed adjustment.
984 The realtime trigger catches emulated time passing too slowly,
985 the virtual time trigger catches emulated time passing too fast.
986 Realtime triggers occur even when idle, so use them less frequently
987 than VM triggers. */
988 icount_rt_timer = qemu_new_timer(rt_clock, icount_adjust_rt, NULL);
989 qemu_mod_timer(icount_rt_timer,
990 qemu_get_clock(rt_clock) + 1000);
991 icount_vm_timer = qemu_new_timer(vm_clock, icount_adjust_vm, NULL);
992 qemu_mod_timer(icount_vm_timer,
993 qemu_get_clock(vm_clock) + QEMU_TIMER_BASE / 10);
996 static struct qemu_alarm_timer alarm_timers[] = {
997 #ifndef _WIN32
998 #ifdef __linux__
999 {"dynticks", ALARM_FLAG_DYNTICKS, dynticks_start_timer,
1000 dynticks_stop_timer, dynticks_rearm_timer, NULL},
1001 /* HPET - if available - is preferred */
1002 {"hpet", 0, hpet_start_timer, hpet_stop_timer, NULL, NULL},
1003 /* ...otherwise try RTC */
1004 {"rtc", 0, rtc_start_timer, rtc_stop_timer, NULL, NULL},
1005 #endif
1006 {"unix", 0, unix_start_timer, unix_stop_timer, NULL, NULL},
1007 #else
1008 {"dynticks", ALARM_FLAG_DYNTICKS, win32_start_timer,
1009 win32_stop_timer, win32_rearm_timer, &alarm_win32_data},
1010 {"win32", 0, win32_start_timer,
1011 win32_stop_timer, NULL, &alarm_win32_data},
1012 #endif
1013 {NULL, }
1016 static void show_available_alarms(void)
1018 int i;
1020 printf("Available alarm timers, in order of precedence:\n");
1021 for (i = 0; alarm_timers[i].name; i++)
1022 printf("%s\n", alarm_timers[i].name);
1025 static void configure_alarms(char const *opt)
1027 int i;
1028 int cur = 0;
1029 int count = (sizeof(alarm_timers) / sizeof(*alarm_timers)) - 1;
1030 char *arg;
1031 char *name;
1032 struct qemu_alarm_timer tmp;
1034 if (!strcmp(opt, "?")) {
1035 show_available_alarms();
1036 exit(0);
1039 arg = strdup(opt);
1041 /* Reorder the array */
1042 name = strtok(arg, ",");
1043 while (name) {
1044 for (i = 0; i < count && alarm_timers[i].name; i++) {
1045 if (!strcmp(alarm_timers[i].name, name))
1046 break;
1049 if (i == count) {
1050 fprintf(stderr, "Unknown clock %s\n", name);
1051 goto next;
1054 if (i < cur)
1055 /* Ignore */
1056 goto next;
1058 /* Swap */
1059 tmp = alarm_timers[i];
1060 alarm_timers[i] = alarm_timers[cur];
1061 alarm_timers[cur] = tmp;
1063 cur++;
1064 next:
1065 name = strtok(NULL, ",");
1068 free(arg);
1070 if (cur) {
1071 /* Disable remaining timers */
1072 for (i = cur; i < count; i++)
1073 alarm_timers[i].name = NULL;
1074 } else {
1075 show_available_alarms();
1076 exit(1);
1080 QEMUClock *rt_clock;
1081 QEMUClock *vm_clock;
1083 static QEMUTimer *active_timers[2];
1085 static QEMUClock *qemu_new_clock(int type)
1087 QEMUClock *clock;
1088 clock = qemu_mallocz(sizeof(QEMUClock));
1089 if (!clock)
1090 return NULL;
1091 clock->type = type;
1092 return clock;
1095 QEMUTimer *qemu_new_timer(QEMUClock *clock, QEMUTimerCB *cb, void *opaque)
1097 QEMUTimer *ts;
1099 ts = qemu_mallocz(sizeof(QEMUTimer));
1100 ts->clock = clock;
1101 ts->cb = cb;
1102 ts->opaque = opaque;
1103 return ts;
1106 void qemu_free_timer(QEMUTimer *ts)
1108 qemu_free(ts);
1111 /* stop a timer, but do not dealloc it */
1112 void qemu_del_timer(QEMUTimer *ts)
1114 QEMUTimer **pt, *t;
1116 /* NOTE: this code must be signal safe because
1117 qemu_timer_expired() can be called from a signal. */
1118 pt = &active_timers[ts->clock->type];
1119 for(;;) {
1120 t = *pt;
1121 if (!t)
1122 break;
1123 if (t == ts) {
1124 *pt = t->next;
1125 break;
1127 pt = &t->next;
1131 /* modify the current timer so that it will be fired when current_time
1132 >= expire_time. The corresponding callback will be called. */
1133 void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time)
1135 QEMUTimer **pt, *t;
1137 qemu_del_timer(ts);
1139 /* add the timer in the sorted list */
1140 /* NOTE: this code must be signal safe because
1141 qemu_timer_expired() can be called from a signal. */
1142 pt = &active_timers[ts->clock->type];
1143 for(;;) {
1144 t = *pt;
1145 if (!t)
1146 break;
1147 if (t->expire_time > expire_time)
1148 break;
1149 pt = &t->next;
1151 ts->expire_time = expire_time;
1152 ts->next = *pt;
1153 *pt = ts;
1155 /* Rearm if necessary */
1156 if (pt == &active_timers[ts->clock->type]) {
1157 if ((alarm_timer->flags & ALARM_FLAG_EXPIRED) == 0) {
1158 qemu_rearm_alarm_timer(alarm_timer);
1160 /* Interrupt execution to force deadline recalculation. */
1161 if (use_icount && cpu_single_env) {
1162 cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
1167 int qemu_timer_pending(QEMUTimer *ts)
1169 QEMUTimer *t;
1170 for(t = active_timers[ts->clock->type]; t != NULL; t = t->next) {
1171 if (t == ts)
1172 return 1;
1174 return 0;
1177 static inline int qemu_timer_expired(QEMUTimer *timer_head, int64_t current_time)
1179 if (!timer_head)
1180 return 0;
1181 return (timer_head->expire_time <= current_time);
1184 static void qemu_run_timers(QEMUTimer **ptimer_head, int64_t current_time)
1186 QEMUTimer *ts;
1188 for(;;) {
1189 ts = *ptimer_head;
1190 if (!ts || ts->expire_time > current_time)
1191 break;
1192 /* remove timer from the list before calling the callback */
1193 *ptimer_head = ts->next;
1194 ts->next = NULL;
1196 /* run the callback (the timer list can be modified) */
1197 ts->cb(ts->opaque);
1201 int64_t qemu_get_clock(QEMUClock *clock)
1203 switch(clock->type) {
1204 case QEMU_TIMER_REALTIME:
1205 return get_clock() / 1000000;
1206 default:
1207 case QEMU_TIMER_VIRTUAL:
1208 if (use_icount) {
1209 return cpu_get_icount();
1210 } else {
1211 return cpu_get_clock();
1216 static void init_timers(void)
1218 init_get_clock();
1219 ticks_per_sec = QEMU_TIMER_BASE;
1220 rt_clock = qemu_new_clock(QEMU_TIMER_REALTIME);
1221 vm_clock = qemu_new_clock(QEMU_TIMER_VIRTUAL);
1224 /* save a timer */
1225 void qemu_put_timer(QEMUFile *f, QEMUTimer *ts)
1227 uint64_t expire_time;
1229 if (qemu_timer_pending(ts)) {
1230 expire_time = ts->expire_time;
1231 } else {
1232 expire_time = -1;
1234 qemu_put_be64(f, expire_time);
1237 void qemu_get_timer(QEMUFile *f, QEMUTimer *ts)
1239 uint64_t expire_time;
1241 expire_time = qemu_get_be64(f);
1242 if (expire_time != -1) {
1243 qemu_mod_timer(ts, expire_time);
1244 } else {
1245 qemu_del_timer(ts);
1249 static void timer_save(QEMUFile *f, void *opaque)
1251 if (cpu_ticks_enabled) {
1252 hw_error("cannot save state if virtual timers are running");
1254 qemu_put_be64(f, cpu_ticks_offset);
1255 qemu_put_be64(f, ticks_per_sec);
1256 qemu_put_be64(f, cpu_clock_offset);
1259 static int timer_load(QEMUFile *f, void *opaque, int version_id)
1261 if (version_id != 1 && version_id != 2)
1262 return -EINVAL;
1263 if (cpu_ticks_enabled) {
1264 return -EINVAL;
1266 cpu_ticks_offset=qemu_get_be64(f);
1267 ticks_per_sec=qemu_get_be64(f);
1268 if (version_id == 2) {
1269 cpu_clock_offset=qemu_get_be64(f);
1271 return 0;
1274 #ifdef _WIN32
1275 void CALLBACK host_alarm_handler(UINT uTimerID, UINT uMsg,
1276 DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2)
1277 #else
1278 static void host_alarm_handler(int host_signum)
1279 #endif
1281 #if 0
1282 #define DISP_FREQ 1000
1284 static int64_t delta_min = INT64_MAX;
1285 static int64_t delta_max, delta_cum, last_clock, delta, ti;
1286 static int count;
1287 ti = qemu_get_clock(vm_clock);
1288 if (last_clock != 0) {
1289 delta = ti - last_clock;
1290 if (delta < delta_min)
1291 delta_min = delta;
1292 if (delta > delta_max)
1293 delta_max = delta;
1294 delta_cum += delta;
1295 if (++count == DISP_FREQ) {
1296 printf("timer: min=%" PRId64 " us max=%" PRId64 " us avg=%" PRId64 " us avg_freq=%0.3f Hz\n",
1297 muldiv64(delta_min, 1000000, ticks_per_sec),
1298 muldiv64(delta_max, 1000000, ticks_per_sec),
1299 muldiv64(delta_cum, 1000000 / DISP_FREQ, ticks_per_sec),
1300 (double)ticks_per_sec / ((double)delta_cum / DISP_FREQ));
1301 count = 0;
1302 delta_min = INT64_MAX;
1303 delta_max = 0;
1304 delta_cum = 0;
1307 last_clock = ti;
1309 #endif
1310 if (alarm_has_dynticks(alarm_timer) ||
1311 (!use_icount &&
1312 qemu_timer_expired(active_timers[QEMU_TIMER_VIRTUAL],
1313 qemu_get_clock(vm_clock))) ||
1314 qemu_timer_expired(active_timers[QEMU_TIMER_REALTIME],
1315 qemu_get_clock(rt_clock))) {
1316 #ifdef _WIN32
1317 struct qemu_alarm_win32 *data = ((struct qemu_alarm_timer*)dwUser)->priv;
1318 SetEvent(data->host_alarm);
1319 #endif
1320 CPUState *env = next_cpu;
1322 alarm_timer->flags |= ALARM_FLAG_EXPIRED;
1324 if (env) {
1325 /* stop the currently executing cpu because a timer occured */
1326 cpu_interrupt(env, CPU_INTERRUPT_EXIT);
1327 #ifdef USE_KQEMU
1328 if (env->kqemu_enabled) {
1329 kqemu_cpu_interrupt(env);
1331 #endif
1333 event_pending = 1;
1337 static int64_t qemu_next_deadline(void)
1339 int64_t delta;
1341 if (active_timers[QEMU_TIMER_VIRTUAL]) {
1342 delta = active_timers[QEMU_TIMER_VIRTUAL]->expire_time -
1343 qemu_get_clock(vm_clock);
1344 } else {
1345 /* To avoid problems with overflow limit this to 2^32. */
1346 delta = INT32_MAX;
1349 if (delta < 0)
1350 delta = 0;
1352 return delta;
1355 #if defined(__linux__) || defined(_WIN32)
1356 static uint64_t qemu_next_deadline_dyntick(void)
1358 int64_t delta;
1359 int64_t rtdelta;
1361 if (use_icount)
1362 delta = INT32_MAX;
1363 else
1364 delta = (qemu_next_deadline() + 999) / 1000;
1366 if (active_timers[QEMU_TIMER_REALTIME]) {
1367 rtdelta = (active_timers[QEMU_TIMER_REALTIME]->expire_time -
1368 qemu_get_clock(rt_clock))*1000;
1369 if (rtdelta < delta)
1370 delta = rtdelta;
1373 if (delta < MIN_TIMER_REARM_US)
1374 delta = MIN_TIMER_REARM_US;
1376 return delta;
1378 #endif
1380 #ifndef _WIN32
1382 #if defined(__linux__)
1384 #define RTC_FREQ 1024
1386 static void enable_sigio_timer(int fd)
1388 struct sigaction act;
1390 /* timer signal */
1391 sigfillset(&act.sa_mask);
1392 act.sa_flags = 0;
1393 act.sa_handler = host_alarm_handler;
1395 sigaction(SIGIO, &act, NULL);
1396 fcntl(fd, F_SETFL, O_ASYNC);
1397 fcntl(fd, F_SETOWN, getpid());
1400 static int hpet_start_timer(struct qemu_alarm_timer *t)
1402 struct hpet_info info;
1403 int r, fd;
1405 fd = open("/dev/hpet", O_RDONLY);
1406 if (fd < 0)
1407 return -1;
1409 /* Set frequency */
1410 r = ioctl(fd, HPET_IRQFREQ, RTC_FREQ);
1411 if (r < 0) {
1412 fprintf(stderr, "Could not configure '/dev/hpet' to have a 1024Hz timer. This is not a fatal\n"
1413 "error, but for better emulation accuracy type:\n"
1414 "'echo 1024 > /proc/sys/dev/hpet/max-user-freq' as root.\n");
1415 goto fail;
1418 /* Check capabilities */
1419 r = ioctl(fd, HPET_INFO, &info);
1420 if (r < 0)
1421 goto fail;
1423 /* Enable periodic mode */
1424 r = ioctl(fd, HPET_EPI, 0);
1425 if (info.hi_flags && (r < 0))
1426 goto fail;
1428 /* Enable interrupt */
1429 r = ioctl(fd, HPET_IE_ON, 0);
1430 if (r < 0)
1431 goto fail;
1433 enable_sigio_timer(fd);
1434 t->priv = (void *)(long)fd;
1436 return 0;
1437 fail:
1438 close(fd);
1439 return -1;
1442 static void hpet_stop_timer(struct qemu_alarm_timer *t)
1444 int fd = (long)t->priv;
1446 close(fd);
1449 static int rtc_start_timer(struct qemu_alarm_timer *t)
1451 int rtc_fd;
1452 unsigned long current_rtc_freq = 0;
1454 TFR(rtc_fd = open("/dev/rtc", O_RDONLY));
1455 if (rtc_fd < 0)
1456 return -1;
1457 ioctl(rtc_fd, RTC_IRQP_READ, &current_rtc_freq);
1458 if (current_rtc_freq != RTC_FREQ &&
1459 ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
1460 fprintf(stderr, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n"
1461 "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n"
1462 "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n");
1463 goto fail;
1465 if (ioctl(rtc_fd, RTC_PIE_ON, 0) < 0) {
1466 fail:
1467 close(rtc_fd);
1468 return -1;
1471 enable_sigio_timer(rtc_fd);
1473 t->priv = (void *)(long)rtc_fd;
1475 return 0;
1478 static void rtc_stop_timer(struct qemu_alarm_timer *t)
1480 int rtc_fd = (long)t->priv;
1482 close(rtc_fd);
1485 static int dynticks_start_timer(struct qemu_alarm_timer *t)
1487 struct sigevent ev;
1488 timer_t host_timer;
1489 struct sigaction act;
1491 sigfillset(&act.sa_mask);
1492 act.sa_flags = 0;
1493 act.sa_handler = host_alarm_handler;
1495 sigaction(SIGALRM, &act, NULL);
1497 ev.sigev_value.sival_int = 0;
1498 ev.sigev_notify = SIGEV_SIGNAL;
1499 ev.sigev_signo = SIGALRM;
1501 if (timer_create(CLOCK_REALTIME, &ev, &host_timer)) {
1502 perror("timer_create");
1504 /* disable dynticks */
1505 fprintf(stderr, "Dynamic Ticks disabled\n");
1507 return -1;
1510 t->priv = (void *)host_timer;
1512 return 0;
1515 static void dynticks_stop_timer(struct qemu_alarm_timer *t)
1517 timer_t host_timer = (timer_t)t->priv;
1519 timer_delete(host_timer);
1522 static void dynticks_rearm_timer(struct qemu_alarm_timer *t)
1524 timer_t host_timer = (timer_t)t->priv;
1525 struct itimerspec timeout;
1526 int64_t nearest_delta_us = INT64_MAX;
1527 int64_t current_us;
1529 if (!active_timers[QEMU_TIMER_REALTIME] &&
1530 !active_timers[QEMU_TIMER_VIRTUAL])
1531 return;
1533 nearest_delta_us = qemu_next_deadline_dyntick();
1535 /* check whether a timer is already running */
1536 if (timer_gettime(host_timer, &timeout)) {
1537 perror("gettime");
1538 fprintf(stderr, "Internal timer error: aborting\n");
1539 exit(1);
1541 current_us = timeout.it_value.tv_sec * 1000000 + timeout.it_value.tv_nsec/1000;
1542 if (current_us && current_us <= nearest_delta_us)
1543 return;
1545 timeout.it_interval.tv_sec = 0;
1546 timeout.it_interval.tv_nsec = 0; /* 0 for one-shot timer */
1547 timeout.it_value.tv_sec = nearest_delta_us / 1000000;
1548 timeout.it_value.tv_nsec = (nearest_delta_us % 1000000) * 1000;
1549 if (timer_settime(host_timer, 0 /* RELATIVE */, &timeout, NULL)) {
1550 perror("settime");
1551 fprintf(stderr, "Internal timer error: aborting\n");
1552 exit(1);
1556 #endif /* defined(__linux__) */
1558 static int unix_start_timer(struct qemu_alarm_timer *t)
1560 struct sigaction act;
1561 struct itimerval itv;
1562 int err;
1564 /* timer signal */
1565 sigfillset(&act.sa_mask);
1566 act.sa_flags = 0;
1567 act.sa_handler = host_alarm_handler;
1569 sigaction(SIGALRM, &act, NULL);
1571 itv.it_interval.tv_sec = 0;
1572 /* for i386 kernel 2.6 to get 1 ms */
1573 itv.it_interval.tv_usec = 999;
1574 itv.it_value.tv_sec = 0;
1575 itv.it_value.tv_usec = 10 * 1000;
1577 err = setitimer(ITIMER_REAL, &itv, NULL);
1578 if (err)
1579 return -1;
1581 return 0;
1584 static void unix_stop_timer(struct qemu_alarm_timer *t)
1586 struct itimerval itv;
1588 memset(&itv, 0, sizeof(itv));
1589 setitimer(ITIMER_REAL, &itv, NULL);
1592 #endif /* !defined(_WIN32) */
1594 #ifdef _WIN32
1596 static int win32_start_timer(struct qemu_alarm_timer *t)
1598 TIMECAPS tc;
1599 struct qemu_alarm_win32 *data = t->priv;
1600 UINT flags;
1602 data->host_alarm = CreateEvent(NULL, FALSE, FALSE, NULL);
1603 if (!data->host_alarm) {
1604 perror("Failed CreateEvent");
1605 return -1;
1608 memset(&tc, 0, sizeof(tc));
1609 timeGetDevCaps(&tc, sizeof(tc));
1611 if (data->period < tc.wPeriodMin)
1612 data->period = tc.wPeriodMin;
1614 timeBeginPeriod(data->period);
1616 flags = TIME_CALLBACK_FUNCTION;
1617 if (alarm_has_dynticks(t))
1618 flags |= TIME_ONESHOT;
1619 else
1620 flags |= TIME_PERIODIC;
1622 data->timerId = timeSetEvent(1, // interval (ms)
1623 data->period, // resolution
1624 host_alarm_handler, // function
1625 (DWORD)t, // parameter
1626 flags);
1628 if (!data->timerId) {
1629 perror("Failed to initialize win32 alarm timer");
1631 timeEndPeriod(data->period);
1632 CloseHandle(data->host_alarm);
1633 return -1;
1636 qemu_add_wait_object(data->host_alarm, NULL, NULL);
1638 return 0;
1641 static void win32_stop_timer(struct qemu_alarm_timer *t)
1643 struct qemu_alarm_win32 *data = t->priv;
1645 timeKillEvent(data->timerId);
1646 timeEndPeriod(data->period);
1648 CloseHandle(data->host_alarm);
1651 static void win32_rearm_timer(struct qemu_alarm_timer *t)
1653 struct qemu_alarm_win32 *data = t->priv;
1654 uint64_t nearest_delta_us;
1656 if (!active_timers[QEMU_TIMER_REALTIME] &&
1657 !active_timers[QEMU_TIMER_VIRTUAL])
1658 return;
1660 nearest_delta_us = qemu_next_deadline_dyntick();
1661 nearest_delta_us /= 1000;
1663 timeKillEvent(data->timerId);
1665 data->timerId = timeSetEvent(1,
1666 data->period,
1667 host_alarm_handler,
1668 (DWORD)t,
1669 TIME_ONESHOT | TIME_PERIODIC);
1671 if (!data->timerId) {
1672 perror("Failed to re-arm win32 alarm timer");
1674 timeEndPeriod(data->period);
1675 CloseHandle(data->host_alarm);
1676 exit(1);
1680 #endif /* _WIN32 */
1682 static void init_timer_alarm(void)
1684 struct qemu_alarm_timer *t = NULL;
1685 int i, err = -1;
1687 for (i = 0; alarm_timers[i].name; i++) {
1688 t = &alarm_timers[i];
1690 err = t->start(t);
1691 if (!err)
1692 break;
1695 if (err) {
1696 fprintf(stderr, "Unable to find any suitable alarm timer.\n");
1697 fprintf(stderr, "Terminating\n");
1698 exit(1);
1701 alarm_timer = t;
1704 static void quit_timers(void)
1706 alarm_timer->stop(alarm_timer);
1707 alarm_timer = NULL;
1710 /***********************************************************/
1711 /* host time/date access */
1712 void qemu_get_timedate(struct tm *tm, int offset)
1714 time_t ti;
1715 struct tm *ret;
1717 time(&ti);
1718 ti += offset;
1719 if (rtc_date_offset == -1) {
1720 if (rtc_utc)
1721 ret = gmtime(&ti);
1722 else
1723 ret = localtime(&ti);
1724 } else {
1725 ti -= rtc_date_offset;
1726 ret = gmtime(&ti);
1729 memcpy(tm, ret, sizeof(struct tm));
1732 int qemu_timedate_diff(struct tm *tm)
1734 time_t seconds;
1736 if (rtc_date_offset == -1)
1737 if (rtc_utc)
1738 seconds = mktimegm(tm);
1739 else
1740 seconds = mktime(tm);
1741 else
1742 seconds = mktimegm(tm) + rtc_date_offset;
1744 return seconds - time(NULL);
1747 /***********************************************************/
1748 /* character device */
1750 static void qemu_chr_event(CharDriverState *s, int event)
1752 if (!s->chr_event)
1753 return;
1754 s->chr_event(s->handler_opaque, event);
1757 static void qemu_chr_reset_bh(void *opaque)
1759 CharDriverState *s = opaque;
1760 qemu_chr_event(s, CHR_EVENT_RESET);
1761 qemu_bh_delete(s->bh);
1762 s->bh = NULL;
1765 void qemu_chr_reset(CharDriverState *s)
1767 if (s->bh == NULL) {
1768 s->bh = qemu_bh_new(qemu_chr_reset_bh, s);
1769 qemu_bh_schedule(s->bh);
1773 int qemu_chr_write(CharDriverState *s, const uint8_t *buf, int len)
1775 return s->chr_write(s, buf, len);
1778 int qemu_chr_ioctl(CharDriverState *s, int cmd, void *arg)
1780 if (!s->chr_ioctl)
1781 return -ENOTSUP;
1782 return s->chr_ioctl(s, cmd, arg);
1785 int qemu_chr_can_read(CharDriverState *s)
1787 if (!s->chr_can_read)
1788 return 0;
1789 return s->chr_can_read(s->handler_opaque);
1792 void qemu_chr_read(CharDriverState *s, uint8_t *buf, int len)
1794 s->chr_read(s->handler_opaque, buf, len);
1797 void qemu_chr_accept_input(CharDriverState *s)
1799 if (s->chr_accept_input)
1800 s->chr_accept_input(s);
1803 void qemu_chr_printf(CharDriverState *s, const char *fmt, ...)
1805 char buf[4096];
1806 va_list ap;
1807 va_start(ap, fmt);
1808 vsnprintf(buf, sizeof(buf), fmt, ap);
1809 qemu_chr_write(s, (uint8_t *)buf, strlen(buf));
1810 va_end(ap);
1813 void qemu_chr_send_event(CharDriverState *s, int event)
1815 if (s->chr_send_event)
1816 s->chr_send_event(s, event);
1819 void qemu_chr_add_handlers(CharDriverState *s,
1820 IOCanRWHandler *fd_can_read,
1821 IOReadHandler *fd_read,
1822 IOEventHandler *fd_event,
1823 void *opaque)
1825 s->chr_can_read = fd_can_read;
1826 s->chr_read = fd_read;
1827 s->chr_event = fd_event;
1828 s->handler_opaque = opaque;
1829 if (s->chr_update_read_handler)
1830 s->chr_update_read_handler(s);
1833 static int null_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
1835 return len;
1838 static CharDriverState *qemu_chr_open_null(void)
1840 CharDriverState *chr;
1842 chr = qemu_mallocz(sizeof(CharDriverState));
1843 if (!chr)
1844 return NULL;
1845 chr->chr_write = null_chr_write;
1846 return chr;
1849 /* MUX driver for serial I/O splitting */
1850 static int term_timestamps;
1851 static int64_t term_timestamps_start;
1852 #define MAX_MUX 4
1853 #define MUX_BUFFER_SIZE 32 /* Must be a power of 2. */
1854 #define MUX_BUFFER_MASK (MUX_BUFFER_SIZE - 1)
1855 typedef struct {
1856 IOCanRWHandler *chr_can_read[MAX_MUX];
1857 IOReadHandler *chr_read[MAX_MUX];
1858 IOEventHandler *chr_event[MAX_MUX];
1859 void *ext_opaque[MAX_MUX];
1860 CharDriverState *drv;
1861 unsigned char buffer[MUX_BUFFER_SIZE];
1862 int prod;
1863 int cons;
1864 int mux_cnt;
1865 int term_got_escape;
1866 int max_size;
1867 } MuxDriver;
1870 static int mux_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
1872 MuxDriver *d = chr->opaque;
1873 int ret;
1874 if (!term_timestamps) {
1875 ret = d->drv->chr_write(d->drv, buf, len);
1876 } else {
1877 int i;
1879 ret = 0;
1880 for(i = 0; i < len; i++) {
1881 ret += d->drv->chr_write(d->drv, buf+i, 1);
1882 if (buf[i] == '\n') {
1883 char buf1[64];
1884 int64_t ti;
1885 int secs;
1887 ti = get_clock();
1888 if (term_timestamps_start == -1)
1889 term_timestamps_start = ti;
1890 ti -= term_timestamps_start;
1891 secs = ti / 1000000000;
1892 snprintf(buf1, sizeof(buf1),
1893 "[%02d:%02d:%02d.%03d] ",
1894 secs / 3600,
1895 (secs / 60) % 60,
1896 secs % 60,
1897 (int)((ti / 1000000) % 1000));
1898 d->drv->chr_write(d->drv, (uint8_t *)buf1, strlen(buf1));
1902 return ret;
1905 static const char * const mux_help[] = {
1906 "% h print this help\n\r",
1907 "% x exit emulator\n\r",
1908 "% s save disk data back to file (if -snapshot)\n\r",
1909 "% t toggle console timestamps\n\r"
1910 "% b send break (magic sysrq)\n\r",
1911 "% c switch between console and monitor\n\r",
1912 "% % sends %\n\r",
1913 NULL
1916 static int term_escape_char = 0x01; /* ctrl-a is used for escape */
1917 static void mux_print_help(CharDriverState *chr)
1919 int i, j;
1920 char ebuf[15] = "Escape-Char";
1921 char cbuf[50] = "\n\r";
1923 if (term_escape_char > 0 && term_escape_char < 26) {
1924 snprintf(cbuf, sizeof(cbuf), "\n\r");
1925 snprintf(ebuf, sizeof(ebuf), "C-%c", term_escape_char - 1 + 'a');
1926 } else {
1927 snprintf(cbuf, sizeof(cbuf),
1928 "\n\rEscape-Char set to Ascii: 0x%02x\n\r\n\r",
1929 term_escape_char);
1931 chr->chr_write(chr, (uint8_t *)cbuf, strlen(cbuf));
1932 for (i = 0; mux_help[i] != NULL; i++) {
1933 for (j=0; mux_help[i][j] != '\0'; j++) {
1934 if (mux_help[i][j] == '%')
1935 chr->chr_write(chr, (uint8_t *)ebuf, strlen(ebuf));
1936 else
1937 chr->chr_write(chr, (uint8_t *)&mux_help[i][j], 1);
1942 static int mux_proc_byte(CharDriverState *chr, MuxDriver *d, int ch)
1944 if (d->term_got_escape) {
1945 d->term_got_escape = 0;
1946 if (ch == term_escape_char)
1947 goto send_char;
1948 switch(ch) {
1949 case '?':
1950 case 'h':
1951 mux_print_help(chr);
1952 break;
1953 case 'x':
1955 const char *term = "QEMU: Terminated\n\r";
1956 chr->chr_write(chr,(uint8_t *)term,strlen(term));
1957 exit(0);
1958 break;
1960 case 's':
1962 int i;
1963 for (i = 0; i < nb_drives; i++) {
1964 bdrv_commit(drives_table[i].bdrv);
1967 break;
1968 case 'b':
1969 qemu_chr_event(chr, CHR_EVENT_BREAK);
1970 break;
1971 case 'c':
1972 /* Switch to the next registered device */
1973 chr->focus++;
1974 if (chr->focus >= d->mux_cnt)
1975 chr->focus = 0;
1976 break;
1977 case 't':
1978 term_timestamps = !term_timestamps;
1979 term_timestamps_start = -1;
1980 break;
1982 } else if (ch == term_escape_char) {
1983 d->term_got_escape = 1;
1984 } else {
1985 send_char:
1986 return 1;
1988 return 0;
1991 static void mux_chr_accept_input(CharDriverState *chr)
1993 int m = chr->focus;
1994 MuxDriver *d = chr->opaque;
1996 while (d->prod != d->cons &&
1997 d->chr_can_read[m] &&
1998 d->chr_can_read[m](d->ext_opaque[m])) {
1999 d->chr_read[m](d->ext_opaque[m],
2000 &d->buffer[d->cons++ & MUX_BUFFER_MASK], 1);
2004 static int mux_chr_can_read(void *opaque)
2006 CharDriverState *chr = opaque;
2007 MuxDriver *d = chr->opaque;
2009 if ((d->prod - d->cons) < MUX_BUFFER_SIZE)
2010 return 1;
2011 if (d->chr_can_read[chr->focus])
2012 return d->chr_can_read[chr->focus](d->ext_opaque[chr->focus]);
2013 return 0;
2016 static void mux_chr_read(void *opaque, const uint8_t *buf, int size)
2018 CharDriverState *chr = opaque;
2019 MuxDriver *d = chr->opaque;
2020 int m = chr->focus;
2021 int i;
2023 mux_chr_accept_input (opaque);
2025 for(i = 0; i < size; i++)
2026 if (mux_proc_byte(chr, d, buf[i])) {
2027 if (d->prod == d->cons &&
2028 d->chr_can_read[m] &&
2029 d->chr_can_read[m](d->ext_opaque[m]))
2030 d->chr_read[m](d->ext_opaque[m], &buf[i], 1);
2031 else
2032 d->buffer[d->prod++ & MUX_BUFFER_MASK] = buf[i];
2036 static void mux_chr_event(void *opaque, int event)
2038 CharDriverState *chr = opaque;
2039 MuxDriver *d = chr->opaque;
2040 int i;
2042 /* Send the event to all registered listeners */
2043 for (i = 0; i < d->mux_cnt; i++)
2044 if (d->chr_event[i])
2045 d->chr_event[i](d->ext_opaque[i], event);
2048 static void mux_chr_update_read_handler(CharDriverState *chr)
2050 MuxDriver *d = chr->opaque;
2052 if (d->mux_cnt >= MAX_MUX) {
2053 fprintf(stderr, "Cannot add I/O handlers, MUX array is full\n");
2054 return;
2056 d->ext_opaque[d->mux_cnt] = chr->handler_opaque;
2057 d->chr_can_read[d->mux_cnt] = chr->chr_can_read;
2058 d->chr_read[d->mux_cnt] = chr->chr_read;
2059 d->chr_event[d->mux_cnt] = chr->chr_event;
2060 /* Fix up the real driver with mux routines */
2061 if (d->mux_cnt == 0) {
2062 qemu_chr_add_handlers(d->drv, mux_chr_can_read, mux_chr_read,
2063 mux_chr_event, chr);
2065 chr->focus = d->mux_cnt;
2066 d->mux_cnt++;
2069 static CharDriverState *qemu_chr_open_mux(CharDriverState *drv)
2071 CharDriverState *chr;
2072 MuxDriver *d;
2074 chr = qemu_mallocz(sizeof(CharDriverState));
2075 if (!chr)
2076 return NULL;
2077 d = qemu_mallocz(sizeof(MuxDriver));
2078 if (!d) {
2079 free(chr);
2080 return NULL;
2083 chr->opaque = d;
2084 d->drv = drv;
2085 chr->focus = -1;
2086 chr->chr_write = mux_chr_write;
2087 chr->chr_update_read_handler = mux_chr_update_read_handler;
2088 chr->chr_accept_input = mux_chr_accept_input;
2089 return chr;
2093 #ifdef _WIN32
2095 static void socket_cleanup(void)
2097 WSACleanup();
2100 static int socket_init(void)
2102 WSADATA Data;
2103 int ret, err;
2105 ret = WSAStartup(MAKEWORD(2,2), &Data);
2106 if (ret != 0) {
2107 err = WSAGetLastError();
2108 fprintf(stderr, "WSAStartup: %d\n", err);
2109 return -1;
2111 atexit(socket_cleanup);
2112 return 0;
2115 static int send_all(int fd, const uint8_t *buf, int len1)
2117 int ret, len;
2119 len = len1;
2120 while (len > 0) {
2121 ret = send(fd, buf, len, 0);
2122 if (ret < 0) {
2123 int errno;
2124 errno = WSAGetLastError();
2125 if (errno != WSAEWOULDBLOCK) {
2126 return -1;
2128 } else if (ret == 0) {
2129 break;
2130 } else {
2131 buf += ret;
2132 len -= ret;
2135 return len1 - len;
2138 #else
2140 static int unix_write(int fd, const uint8_t *buf, int len1)
2142 int ret, len;
2144 len = len1;
2145 while (len > 0) {
2146 ret = write(fd, buf, len);
2147 if (ret < 0) {
2148 if (errno != EINTR && errno != EAGAIN)
2149 return -1;
2150 } else if (ret == 0) {
2151 break;
2152 } else {
2153 buf += ret;
2154 len -= ret;
2157 return len1 - len;
2160 static inline int send_all(int fd, const uint8_t *buf, int len1)
2162 return unix_write(fd, buf, len1);
2164 #endif /* !_WIN32 */
2166 #ifndef _WIN32
2168 typedef struct {
2169 int fd_in, fd_out;
2170 int max_size;
2171 } FDCharDriver;
2173 #define STDIO_MAX_CLIENTS 1
2174 static int stdio_nb_clients = 0;
2176 static int fd_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
2178 FDCharDriver *s = chr->opaque;
2179 return unix_write(s->fd_out, buf, len);
2182 static int fd_chr_read_poll(void *opaque)
2184 CharDriverState *chr = opaque;
2185 FDCharDriver *s = chr->opaque;
2187 s->max_size = qemu_chr_can_read(chr);
2188 return s->max_size;
2191 static void fd_chr_read(void *opaque)
2193 CharDriverState *chr = opaque;
2194 FDCharDriver *s = chr->opaque;
2195 int size, len;
2196 uint8_t buf[1024];
2198 len = sizeof(buf);
2199 if (len > s->max_size)
2200 len = s->max_size;
2201 if (len == 0)
2202 return;
2203 size = read(s->fd_in, buf, len);
2204 if (size == 0) {
2205 /* FD has been closed. Remove it from the active list. */
2206 qemu_set_fd_handler2(s->fd_in, NULL, NULL, NULL, NULL);
2207 return;
2209 if (size > 0) {
2210 qemu_chr_read(chr, buf, size);
2214 static void fd_chr_update_read_handler(CharDriverState *chr)
2216 FDCharDriver *s = chr->opaque;
2218 if (s->fd_in >= 0) {
2219 if (nographic && s->fd_in == 0) {
2220 } else {
2221 qemu_set_fd_handler2(s->fd_in, fd_chr_read_poll,
2222 fd_chr_read, NULL, chr);
2227 static void fd_chr_close(struct CharDriverState *chr)
2229 FDCharDriver *s = chr->opaque;
2231 if (s->fd_in >= 0) {
2232 if (nographic && s->fd_in == 0) {
2233 } else {
2234 qemu_set_fd_handler2(s->fd_in, NULL, NULL, NULL, NULL);
2238 qemu_free(s);
2241 /* open a character device to a unix fd */
2242 static CharDriverState *qemu_chr_open_fd(int fd_in, int fd_out)
2244 CharDriverState *chr;
2245 FDCharDriver *s;
2247 chr = qemu_mallocz(sizeof(CharDriverState));
2248 if (!chr)
2249 return NULL;
2250 s = qemu_mallocz(sizeof(FDCharDriver));
2251 if (!s) {
2252 free(chr);
2253 return NULL;
2255 s->fd_in = fd_in;
2256 s->fd_out = fd_out;
2257 chr->opaque = s;
2258 chr->chr_write = fd_chr_write;
2259 chr->chr_update_read_handler = fd_chr_update_read_handler;
2260 chr->chr_close = fd_chr_close;
2262 qemu_chr_reset(chr);
2264 return chr;
2267 static CharDriverState *qemu_chr_open_file_out(const char *file_out)
2269 int fd_out;
2271 TFR(fd_out = open(file_out, O_WRONLY | O_TRUNC | O_CREAT | O_BINARY, 0666));
2272 if (fd_out < 0)
2273 return NULL;
2274 return qemu_chr_open_fd(-1, fd_out);
2277 static CharDriverState *qemu_chr_open_pipe(const char *filename)
2279 int fd_in, fd_out;
2280 char filename_in[256], filename_out[256];
2282 snprintf(filename_in, 256, "%s.in", filename);
2283 snprintf(filename_out, 256, "%s.out", filename);
2284 TFR(fd_in = open(filename_in, O_RDWR | O_BINARY));
2285 TFR(fd_out = open(filename_out, O_RDWR | O_BINARY));
2286 if (fd_in < 0 || fd_out < 0) {
2287 if (fd_in >= 0)
2288 close(fd_in);
2289 if (fd_out >= 0)
2290 close(fd_out);
2291 TFR(fd_in = fd_out = open(filename, O_RDWR | O_BINARY));
2292 if (fd_in < 0)
2293 return NULL;
2295 return qemu_chr_open_fd(fd_in, fd_out);
2299 /* for STDIO, we handle the case where several clients use it
2300 (nographic mode) */
2302 #define TERM_FIFO_MAX_SIZE 1
2304 static uint8_t term_fifo[TERM_FIFO_MAX_SIZE];
2305 static int term_fifo_size;
2307 static int stdio_read_poll(void *opaque)
2309 CharDriverState *chr = opaque;
2311 /* try to flush the queue if needed */
2312 if (term_fifo_size != 0 && qemu_chr_can_read(chr) > 0) {
2313 qemu_chr_read(chr, term_fifo, 1);
2314 term_fifo_size = 0;
2316 /* see if we can absorb more chars */
2317 if (term_fifo_size == 0)
2318 return 1;
2319 else
2320 return 0;
2323 static void stdio_read(void *opaque)
2325 int size;
2326 uint8_t buf[1];
2327 CharDriverState *chr = opaque;
2329 size = read(0, buf, 1);
2330 if (size == 0) {
2331 /* stdin has been closed. Remove it from the active list. */
2332 qemu_set_fd_handler2(0, NULL, NULL, NULL, NULL);
2333 return;
2335 if (size > 0) {
2336 if (qemu_chr_can_read(chr) > 0) {
2337 qemu_chr_read(chr, buf, 1);
2338 } else if (term_fifo_size == 0) {
2339 term_fifo[term_fifo_size++] = buf[0];
2344 /* init terminal so that we can grab keys */
2345 static struct termios oldtty;
2346 static int old_fd0_flags;
2347 static int term_atexit_done;
2349 static void term_exit(void)
2351 tcsetattr (0, TCSANOW, &oldtty);
2352 fcntl(0, F_SETFL, old_fd0_flags);
2355 static void term_init(void)
2357 struct termios tty;
2359 tcgetattr (0, &tty);
2360 oldtty = tty;
2361 old_fd0_flags = fcntl(0, F_GETFL);
2363 tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
2364 |INLCR|IGNCR|ICRNL|IXON);
2365 tty.c_oflag |= OPOST;
2366 tty.c_lflag &= ~(ECHO|ECHONL|ICANON|IEXTEN);
2367 /* if graphical mode, we allow Ctrl-C handling */
2368 if (nographic)
2369 tty.c_lflag &= ~ISIG;
2370 tty.c_cflag &= ~(CSIZE|PARENB);
2371 tty.c_cflag |= CS8;
2372 tty.c_cc[VMIN] = 1;
2373 tty.c_cc[VTIME] = 0;
2375 tcsetattr (0, TCSANOW, &tty);
2377 if (!term_atexit_done++)
2378 atexit(term_exit);
2380 fcntl(0, F_SETFL, O_NONBLOCK);
2383 static void qemu_chr_close_stdio(struct CharDriverState *chr)
2385 term_exit();
2386 stdio_nb_clients--;
2387 qemu_set_fd_handler2(0, NULL, NULL, NULL, NULL);
2388 fd_chr_close(chr);
2391 static CharDriverState *qemu_chr_open_stdio(void)
2393 CharDriverState *chr;
2395 if (stdio_nb_clients >= STDIO_MAX_CLIENTS)
2396 return NULL;
2397 chr = qemu_chr_open_fd(0, 1);
2398 chr->chr_close = qemu_chr_close_stdio;
2399 qemu_set_fd_handler2(0, stdio_read_poll, stdio_read, NULL, chr);
2400 stdio_nb_clients++;
2401 term_init();
2403 return chr;
2406 #ifdef __sun__
2407 /* Once Solaris has openpty(), this is going to be removed. */
2408 int openpty(int *amaster, int *aslave, char *name,
2409 struct termios *termp, struct winsize *winp)
2411 const char *slave;
2412 int mfd = -1, sfd = -1;
2414 *amaster = *aslave = -1;
2416 mfd = open("/dev/ptmx", O_RDWR | O_NOCTTY);
2417 if (mfd < 0)
2418 goto err;
2420 if (grantpt(mfd) == -1 || unlockpt(mfd) == -1)
2421 goto err;
2423 if ((slave = ptsname(mfd)) == NULL)
2424 goto err;
2426 if ((sfd = open(slave, O_RDONLY | O_NOCTTY)) == -1)
2427 goto err;
2429 if (ioctl(sfd, I_PUSH, "ptem") == -1 ||
2430 (termp != NULL && tcgetattr(sfd, termp) < 0))
2431 goto err;
2433 if (amaster)
2434 *amaster = mfd;
2435 if (aslave)
2436 *aslave = sfd;
2437 if (winp)
2438 ioctl(sfd, TIOCSWINSZ, winp);
2440 return 0;
2442 err:
2443 if (sfd != -1)
2444 close(sfd);
2445 close(mfd);
2446 return -1;
2449 void cfmakeraw (struct termios *termios_p)
2451 termios_p->c_iflag &=
2452 ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON);
2453 termios_p->c_oflag &= ~OPOST;
2454 termios_p->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
2455 termios_p->c_cflag &= ~(CSIZE|PARENB);
2456 termios_p->c_cflag |= CS8;
2458 termios_p->c_cc[VMIN] = 0;
2459 termios_p->c_cc[VTIME] = 0;
2461 #endif
2463 #if defined(__linux__) || defined(__sun__) || defined(__FreeBSD__) \
2464 || defined(__NetBSD__) || defined(__OpenBSD__)
2466 typedef struct {
2467 int fd;
2468 int connected;
2469 int polling;
2470 int read_bytes;
2471 QEMUTimer *timer;
2472 } PtyCharDriver;
2474 static void pty_chr_update_read_handler(CharDriverState *chr);
2475 static void pty_chr_state(CharDriverState *chr, int connected);
2477 static int pty_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
2479 PtyCharDriver *s = chr->opaque;
2481 if (!s->connected) {
2482 /* guest sends data, check for (re-)connect */
2483 pty_chr_update_read_handler(chr);
2484 return 0;
2486 return unix_write(s->fd, buf, len);
2489 static int pty_chr_read_poll(void *opaque)
2491 CharDriverState *chr = opaque;
2492 PtyCharDriver *s = chr->opaque;
2494 s->read_bytes = qemu_chr_can_read(chr);
2495 return s->read_bytes;
2498 static void pty_chr_read(void *opaque)
2500 CharDriverState *chr = opaque;
2501 PtyCharDriver *s = chr->opaque;
2502 int size, len;
2503 uint8_t buf[1024];
2505 len = sizeof(buf);
2506 if (len > s->read_bytes)
2507 len = s->read_bytes;
2508 if (len == 0)
2509 return;
2510 size = read(s->fd, buf, len);
2511 if ((size == -1 && errno == EIO) ||
2512 (size == 0)) {
2513 pty_chr_state(chr, 0);
2514 return;
2516 if (size > 0) {
2517 pty_chr_state(chr, 1);
2518 qemu_chr_read(chr, buf, size);
2522 static void pty_chr_update_read_handler(CharDriverState *chr)
2524 PtyCharDriver *s = chr->opaque;
2526 qemu_set_fd_handler2(s->fd, pty_chr_read_poll,
2527 pty_chr_read, NULL, chr);
2528 s->polling = 1;
2530 * Short timeout here: just need wait long enougth that qemu makes
2531 * it through the poll loop once. When reconnected we want a
2532 * short timeout so we notice it almost instantly. Otherwise
2533 * read() gives us -EIO instantly, making pty_chr_state() reset the
2534 * timeout to the normal (much longer) poll interval before the
2535 * timer triggers.
2537 qemu_mod_timer(s->timer, qemu_get_clock(rt_clock) + 10);
2540 static void pty_chr_state(CharDriverState *chr, int connected)
2542 PtyCharDriver *s = chr->opaque;
2544 if (!connected) {
2545 qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
2546 s->connected = 0;
2547 s->polling = 0;
2548 /* (re-)connect poll interval for idle guests: once per second.
2549 * We check more frequently in case the guests sends data to
2550 * the virtual device linked to our pty. */
2551 qemu_mod_timer(s->timer, qemu_get_clock(rt_clock) + 1000);
2552 } else {
2553 if (!s->connected)
2554 qemu_chr_reset(chr);
2555 s->connected = 1;
2559 static void pty_chr_timer(void *opaque)
2561 struct CharDriverState *chr = opaque;
2562 PtyCharDriver *s = chr->opaque;
2564 if (s->connected)
2565 return;
2566 if (s->polling) {
2567 /* If we arrive here without polling being cleared due
2568 * read returning -EIO, then we are (re-)connected */
2569 pty_chr_state(chr, 1);
2570 return;
2573 /* Next poll ... */
2574 pty_chr_update_read_handler(chr);
2577 static void pty_chr_close(struct CharDriverState *chr)
2579 PtyCharDriver *s = chr->opaque;
2581 qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
2582 close(s->fd);
2583 qemu_free(s);
2586 static CharDriverState *qemu_chr_open_pty(void)
2588 CharDriverState *chr;
2589 PtyCharDriver *s;
2590 struct termios tty;
2591 int slave_fd;
2592 #if defined(__OpenBSD__)
2593 char pty_name[PATH_MAX];
2594 #define q_ptsname(x) pty_name
2595 #else
2596 char *pty_name = NULL;
2597 #define q_ptsname(x) ptsname(x)
2598 #endif
2600 chr = qemu_mallocz(sizeof(CharDriverState));
2601 if (!chr)
2602 return NULL;
2603 s = qemu_mallocz(sizeof(PtyCharDriver));
2604 if (!s) {
2605 qemu_free(chr);
2606 return NULL;
2609 if (openpty(&s->fd, &slave_fd, pty_name, NULL, NULL) < 0) {
2610 return NULL;
2613 /* Set raw attributes on the pty. */
2614 cfmakeraw(&tty);
2615 tcsetattr(slave_fd, TCSAFLUSH, &tty);
2616 close(slave_fd);
2618 fprintf(stderr, "char device redirected to %s\n", q_ptsname(s->fd));
2620 chr->opaque = s;
2621 chr->chr_write = pty_chr_write;
2622 chr->chr_update_read_handler = pty_chr_update_read_handler;
2623 chr->chr_close = pty_chr_close;
2625 s->timer = qemu_new_timer(rt_clock, pty_chr_timer, chr);
2627 return chr;
2630 static void tty_serial_init(int fd, int speed,
2631 int parity, int data_bits, int stop_bits)
2633 struct termios tty;
2634 speed_t spd;
2636 #if 0
2637 printf("tty_serial_init: speed=%d parity=%c data=%d stop=%d\n",
2638 speed, parity, data_bits, stop_bits);
2639 #endif
2640 tcgetattr (fd, &tty);
2642 #define MARGIN 1.1
2643 if (speed <= 50 * MARGIN)
2644 spd = B50;
2645 else if (speed <= 75 * MARGIN)
2646 spd = B75;
2647 else if (speed <= 300 * MARGIN)
2648 spd = B300;
2649 else if (speed <= 600 * MARGIN)
2650 spd = B600;
2651 else if (speed <= 1200 * MARGIN)
2652 spd = B1200;
2653 else if (speed <= 2400 * MARGIN)
2654 spd = B2400;
2655 else if (speed <= 4800 * MARGIN)
2656 spd = B4800;
2657 else if (speed <= 9600 * MARGIN)
2658 spd = B9600;
2659 else if (speed <= 19200 * MARGIN)
2660 spd = B19200;
2661 else if (speed <= 38400 * MARGIN)
2662 spd = B38400;
2663 else if (speed <= 57600 * MARGIN)
2664 spd = B57600;
2665 else if (speed <= 115200 * MARGIN)
2666 spd = B115200;
2667 else
2668 spd = B115200;
2670 cfsetispeed(&tty, spd);
2671 cfsetospeed(&tty, spd);
2673 tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
2674 |INLCR|IGNCR|ICRNL|IXON);
2675 tty.c_oflag |= OPOST;
2676 tty.c_lflag &= ~(ECHO|ECHONL|ICANON|IEXTEN|ISIG);
2677 tty.c_cflag &= ~(CSIZE|PARENB|PARODD|CRTSCTS|CSTOPB);
2678 switch(data_bits) {
2679 default:
2680 case 8:
2681 tty.c_cflag |= CS8;
2682 break;
2683 case 7:
2684 tty.c_cflag |= CS7;
2685 break;
2686 case 6:
2687 tty.c_cflag |= CS6;
2688 break;
2689 case 5:
2690 tty.c_cflag |= CS5;
2691 break;
2693 switch(parity) {
2694 default:
2695 case 'N':
2696 break;
2697 case 'E':
2698 tty.c_cflag |= PARENB;
2699 break;
2700 case 'O':
2701 tty.c_cflag |= PARENB | PARODD;
2702 break;
2704 if (stop_bits == 2)
2705 tty.c_cflag |= CSTOPB;
2707 tcsetattr (fd, TCSANOW, &tty);
2710 static int tty_serial_ioctl(CharDriverState *chr, int cmd, void *arg)
2712 FDCharDriver *s = chr->opaque;
2714 switch(cmd) {
2715 case CHR_IOCTL_SERIAL_SET_PARAMS:
2717 QEMUSerialSetParams *ssp = arg;
2718 tty_serial_init(s->fd_in, ssp->speed, ssp->parity,
2719 ssp->data_bits, ssp->stop_bits);
2721 break;
2722 case CHR_IOCTL_SERIAL_SET_BREAK:
2724 int enable = *(int *)arg;
2725 if (enable)
2726 tcsendbreak(s->fd_in, 1);
2728 break;
2729 case CHR_IOCTL_SERIAL_GET_TIOCM:
2731 int sarg = 0;
2732 int *targ = (int *)arg;
2733 ioctl(s->fd_in, TIOCMGET, &sarg);
2734 *targ = 0;
2735 if (sarg | TIOCM_CTS)
2736 *targ |= CHR_TIOCM_CTS;
2737 if (sarg | TIOCM_CAR)
2738 *targ |= CHR_TIOCM_CAR;
2739 if (sarg | TIOCM_DSR)
2740 *targ |= CHR_TIOCM_DSR;
2741 if (sarg | TIOCM_RI)
2742 *targ |= CHR_TIOCM_RI;
2743 if (sarg | TIOCM_DTR)
2744 *targ |= CHR_TIOCM_DTR;
2745 if (sarg | TIOCM_RTS)
2746 *targ |= CHR_TIOCM_RTS;
2748 break;
2749 case CHR_IOCTL_SERIAL_SET_TIOCM:
2751 int sarg = *(int *)arg;
2752 int targ = 0;
2753 if (sarg | CHR_TIOCM_DTR)
2754 targ |= TIOCM_DTR;
2755 if (sarg | CHR_TIOCM_RTS)
2756 targ |= TIOCM_RTS;
2757 ioctl(s->fd_in, TIOCMSET, &targ);
2759 break;
2760 default:
2761 return -ENOTSUP;
2763 return 0;
2766 static CharDriverState *qemu_chr_open_tty(const char *filename)
2768 CharDriverState *chr;
2769 int fd;
2771 TFR(fd = open(filename, O_RDWR | O_NONBLOCK));
2772 tty_serial_init(fd, 115200, 'N', 8, 1);
2773 chr = qemu_chr_open_fd(fd, fd);
2774 if (!chr) {
2775 close(fd);
2776 return NULL;
2778 chr->chr_ioctl = tty_serial_ioctl;
2779 qemu_chr_reset(chr);
2780 return chr;
2782 #else /* ! __linux__ && ! __sun__ */
2783 static CharDriverState *qemu_chr_open_pty(void)
2785 return NULL;
2787 #endif /* __linux__ || __sun__ */
2789 #if defined(__linux__)
2790 typedef struct {
2791 int fd;
2792 int mode;
2793 } ParallelCharDriver;
2795 static int pp_hw_mode(ParallelCharDriver *s, uint16_t mode)
2797 if (s->mode != mode) {
2798 int m = mode;
2799 if (ioctl(s->fd, PPSETMODE, &m) < 0)
2800 return 0;
2801 s->mode = mode;
2803 return 1;
2806 static int pp_ioctl(CharDriverState *chr, int cmd, void *arg)
2808 ParallelCharDriver *drv = chr->opaque;
2809 int fd = drv->fd;
2810 uint8_t b;
2812 switch(cmd) {
2813 case CHR_IOCTL_PP_READ_DATA:
2814 if (ioctl(fd, PPRDATA, &b) < 0)
2815 return -ENOTSUP;
2816 *(uint8_t *)arg = b;
2817 break;
2818 case CHR_IOCTL_PP_WRITE_DATA:
2819 b = *(uint8_t *)arg;
2820 if (ioctl(fd, PPWDATA, &b) < 0)
2821 return -ENOTSUP;
2822 break;
2823 case CHR_IOCTL_PP_READ_CONTROL:
2824 if (ioctl(fd, PPRCONTROL, &b) < 0)
2825 return -ENOTSUP;
2826 /* Linux gives only the lowest bits, and no way to know data
2827 direction! For better compatibility set the fixed upper
2828 bits. */
2829 *(uint8_t *)arg = b | 0xc0;
2830 break;
2831 case CHR_IOCTL_PP_WRITE_CONTROL:
2832 b = *(uint8_t *)arg;
2833 if (ioctl(fd, PPWCONTROL, &b) < 0)
2834 return -ENOTSUP;
2835 break;
2836 case CHR_IOCTL_PP_READ_STATUS:
2837 if (ioctl(fd, PPRSTATUS, &b) < 0)
2838 return -ENOTSUP;
2839 *(uint8_t *)arg = b;
2840 break;
2841 case CHR_IOCTL_PP_DATA_DIR:
2842 if (ioctl(fd, PPDATADIR, (int *)arg) < 0)
2843 return -ENOTSUP;
2844 break;
2845 case CHR_IOCTL_PP_EPP_READ_ADDR:
2846 if (pp_hw_mode(drv, IEEE1284_MODE_EPP|IEEE1284_ADDR)) {
2847 struct ParallelIOArg *parg = arg;
2848 int n = read(fd, parg->buffer, parg->count);
2849 if (n != parg->count) {
2850 return -EIO;
2853 break;
2854 case CHR_IOCTL_PP_EPP_READ:
2855 if (pp_hw_mode(drv, IEEE1284_MODE_EPP)) {
2856 struct ParallelIOArg *parg = arg;
2857 int n = read(fd, parg->buffer, parg->count);
2858 if (n != parg->count) {
2859 return -EIO;
2862 break;
2863 case CHR_IOCTL_PP_EPP_WRITE_ADDR:
2864 if (pp_hw_mode(drv, IEEE1284_MODE_EPP|IEEE1284_ADDR)) {
2865 struct ParallelIOArg *parg = arg;
2866 int n = write(fd, parg->buffer, parg->count);
2867 if (n != parg->count) {
2868 return -EIO;
2871 break;
2872 case CHR_IOCTL_PP_EPP_WRITE:
2873 if (pp_hw_mode(drv, IEEE1284_MODE_EPP)) {
2874 struct ParallelIOArg *parg = arg;
2875 int n = write(fd, parg->buffer, parg->count);
2876 if (n != parg->count) {
2877 return -EIO;
2880 break;
2881 default:
2882 return -ENOTSUP;
2884 return 0;
2887 static void pp_close(CharDriverState *chr)
2889 ParallelCharDriver *drv = chr->opaque;
2890 int fd = drv->fd;
2892 pp_hw_mode(drv, IEEE1284_MODE_COMPAT);
2893 ioctl(fd, PPRELEASE);
2894 close(fd);
2895 qemu_free(drv);
2898 static CharDriverState *qemu_chr_open_pp(const char *filename)
2900 CharDriverState *chr;
2901 ParallelCharDriver *drv;
2902 int fd;
2904 TFR(fd = open(filename, O_RDWR));
2905 if (fd < 0)
2906 return NULL;
2908 if (ioctl(fd, PPCLAIM) < 0) {
2909 close(fd);
2910 return NULL;
2913 drv = qemu_mallocz(sizeof(ParallelCharDriver));
2914 if (!drv) {
2915 close(fd);
2916 return NULL;
2918 drv->fd = fd;
2919 drv->mode = IEEE1284_MODE_COMPAT;
2921 chr = qemu_mallocz(sizeof(CharDriverState));
2922 if (!chr) {
2923 qemu_free(drv);
2924 close(fd);
2925 return NULL;
2927 chr->chr_write = null_chr_write;
2928 chr->chr_ioctl = pp_ioctl;
2929 chr->chr_close = pp_close;
2930 chr->opaque = drv;
2932 qemu_chr_reset(chr);
2934 return chr;
2936 #endif /* __linux__ */
2938 #else /* _WIN32 */
2940 typedef struct {
2941 int max_size;
2942 HANDLE hcom, hrecv, hsend;
2943 OVERLAPPED orecv, osend;
2944 BOOL fpipe;
2945 DWORD len;
2946 } WinCharState;
2948 #define NSENDBUF 2048
2949 #define NRECVBUF 2048
2950 #define MAXCONNECT 1
2951 #define NTIMEOUT 5000
2953 static int win_chr_poll(void *opaque);
2954 static int win_chr_pipe_poll(void *opaque);
2956 static void win_chr_close(CharDriverState *chr)
2958 WinCharState *s = chr->opaque;
2960 if (s->hsend) {
2961 CloseHandle(s->hsend);
2962 s->hsend = NULL;
2964 if (s->hrecv) {
2965 CloseHandle(s->hrecv);
2966 s->hrecv = NULL;
2968 if (s->hcom) {
2969 CloseHandle(s->hcom);
2970 s->hcom = NULL;
2972 if (s->fpipe)
2973 qemu_del_polling_cb(win_chr_pipe_poll, chr);
2974 else
2975 qemu_del_polling_cb(win_chr_poll, chr);
2978 static int win_chr_init(CharDriverState *chr, const char *filename)
2980 WinCharState *s = chr->opaque;
2981 COMMCONFIG comcfg;
2982 COMMTIMEOUTS cto = { 0, 0, 0, 0, 0};
2983 COMSTAT comstat;
2984 DWORD size;
2985 DWORD err;
2987 s->hsend = CreateEvent(NULL, TRUE, FALSE, NULL);
2988 if (!s->hsend) {
2989 fprintf(stderr, "Failed CreateEvent\n");
2990 goto fail;
2992 s->hrecv = CreateEvent(NULL, TRUE, FALSE, NULL);
2993 if (!s->hrecv) {
2994 fprintf(stderr, "Failed CreateEvent\n");
2995 goto fail;
2998 s->hcom = CreateFile(filename, GENERIC_READ|GENERIC_WRITE, 0, NULL,
2999 OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
3000 if (s->hcom == INVALID_HANDLE_VALUE) {
3001 fprintf(stderr, "Failed CreateFile (%lu)\n", GetLastError());
3002 s->hcom = NULL;
3003 goto fail;
3006 if (!SetupComm(s->hcom, NRECVBUF, NSENDBUF)) {
3007 fprintf(stderr, "Failed SetupComm\n");
3008 goto fail;
3011 ZeroMemory(&comcfg, sizeof(COMMCONFIG));
3012 size = sizeof(COMMCONFIG);
3013 GetDefaultCommConfig(filename, &comcfg, &size);
3014 comcfg.dcb.DCBlength = sizeof(DCB);
3015 CommConfigDialog(filename, NULL, &comcfg);
3017 if (!SetCommState(s->hcom, &comcfg.dcb)) {
3018 fprintf(stderr, "Failed SetCommState\n");
3019 goto fail;
3022 if (!SetCommMask(s->hcom, EV_ERR)) {
3023 fprintf(stderr, "Failed SetCommMask\n");
3024 goto fail;
3027 cto.ReadIntervalTimeout = MAXDWORD;
3028 if (!SetCommTimeouts(s->hcom, &cto)) {
3029 fprintf(stderr, "Failed SetCommTimeouts\n");
3030 goto fail;
3033 if (!ClearCommError(s->hcom, &err, &comstat)) {
3034 fprintf(stderr, "Failed ClearCommError\n");
3035 goto fail;
3037 qemu_add_polling_cb(win_chr_poll, chr);
3038 return 0;
3040 fail:
3041 win_chr_close(chr);
3042 return -1;
3045 static int win_chr_write(CharDriverState *chr, const uint8_t *buf, int len1)
3047 WinCharState *s = chr->opaque;
3048 DWORD len, ret, size, err;
3050 len = len1;
3051 ZeroMemory(&s->osend, sizeof(s->osend));
3052 s->osend.hEvent = s->hsend;
3053 while (len > 0) {
3054 if (s->hsend)
3055 ret = WriteFile(s->hcom, buf, len, &size, &s->osend);
3056 else
3057 ret = WriteFile(s->hcom, buf, len, &size, NULL);
3058 if (!ret) {
3059 err = GetLastError();
3060 if (err == ERROR_IO_PENDING) {
3061 ret = GetOverlappedResult(s->hcom, &s->osend, &size, TRUE);
3062 if (ret) {
3063 buf += size;
3064 len -= size;
3065 } else {
3066 break;
3068 } else {
3069 break;
3071 } else {
3072 buf += size;
3073 len -= size;
3076 return len1 - len;
3079 static int win_chr_read_poll(CharDriverState *chr)
3081 WinCharState *s = chr->opaque;
3083 s->max_size = qemu_chr_can_read(chr);
3084 return s->max_size;
3087 static void win_chr_readfile(CharDriverState *chr)
3089 WinCharState *s = chr->opaque;
3090 int ret, err;
3091 uint8_t buf[1024];
3092 DWORD size;
3094 ZeroMemory(&s->orecv, sizeof(s->orecv));
3095 s->orecv.hEvent = s->hrecv;
3096 ret = ReadFile(s->hcom, buf, s->len, &size, &s->orecv);
3097 if (!ret) {
3098 err = GetLastError();
3099 if (err == ERROR_IO_PENDING) {
3100 ret = GetOverlappedResult(s->hcom, &s->orecv, &size, TRUE);
3104 if (size > 0) {
3105 qemu_chr_read(chr, buf, size);
3109 static void win_chr_read(CharDriverState *chr)
3111 WinCharState *s = chr->opaque;
3113 if (s->len > s->max_size)
3114 s->len = s->max_size;
3115 if (s->len == 0)
3116 return;
3118 win_chr_readfile(chr);
3121 static int win_chr_poll(void *opaque)
3123 CharDriverState *chr = opaque;
3124 WinCharState *s = chr->opaque;
3125 COMSTAT status;
3126 DWORD comerr;
3128 ClearCommError(s->hcom, &comerr, &status);
3129 if (status.cbInQue > 0) {
3130 s->len = status.cbInQue;
3131 win_chr_read_poll(chr);
3132 win_chr_read(chr);
3133 return 1;
3135 return 0;
3138 static CharDriverState *qemu_chr_open_win(const char *filename)
3140 CharDriverState *chr;
3141 WinCharState *s;
3143 chr = qemu_mallocz(sizeof(CharDriverState));
3144 if (!chr)
3145 return NULL;
3146 s = qemu_mallocz(sizeof(WinCharState));
3147 if (!s) {
3148 free(chr);
3149 return NULL;
3151 chr->opaque = s;
3152 chr->chr_write = win_chr_write;
3153 chr->chr_close = win_chr_close;
3155 if (win_chr_init(chr, filename) < 0) {
3156 free(s);
3157 free(chr);
3158 return NULL;
3160 qemu_chr_reset(chr);
3161 return chr;
3164 static int win_chr_pipe_poll(void *opaque)
3166 CharDriverState *chr = opaque;
3167 WinCharState *s = chr->opaque;
3168 DWORD size;
3170 PeekNamedPipe(s->hcom, NULL, 0, NULL, &size, NULL);
3171 if (size > 0) {
3172 s->len = size;
3173 win_chr_read_poll(chr);
3174 win_chr_read(chr);
3175 return 1;
3177 return 0;
3180 static int win_chr_pipe_init(CharDriverState *chr, const char *filename)
3182 WinCharState *s = chr->opaque;
3183 OVERLAPPED ov;
3184 int ret;
3185 DWORD size;
3186 char openname[256];
3188 s->fpipe = TRUE;
3190 s->hsend = CreateEvent(NULL, TRUE, FALSE, NULL);
3191 if (!s->hsend) {
3192 fprintf(stderr, "Failed CreateEvent\n");
3193 goto fail;
3195 s->hrecv = CreateEvent(NULL, TRUE, FALSE, NULL);
3196 if (!s->hrecv) {
3197 fprintf(stderr, "Failed CreateEvent\n");
3198 goto fail;
3201 snprintf(openname, sizeof(openname), "\\\\.\\pipe\\%s", filename);
3202 s->hcom = CreateNamedPipe(openname, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
3203 PIPE_TYPE_BYTE | PIPE_READMODE_BYTE |
3204 PIPE_WAIT,
3205 MAXCONNECT, NSENDBUF, NRECVBUF, NTIMEOUT, NULL);
3206 if (s->hcom == INVALID_HANDLE_VALUE) {
3207 fprintf(stderr, "Failed CreateNamedPipe (%lu)\n", GetLastError());
3208 s->hcom = NULL;
3209 goto fail;
3212 ZeroMemory(&ov, sizeof(ov));
3213 ov.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
3214 ret = ConnectNamedPipe(s->hcom, &ov);
3215 if (ret) {
3216 fprintf(stderr, "Failed ConnectNamedPipe\n");
3217 goto fail;
3220 ret = GetOverlappedResult(s->hcom, &ov, &size, TRUE);
3221 if (!ret) {
3222 fprintf(stderr, "Failed GetOverlappedResult\n");
3223 if (ov.hEvent) {
3224 CloseHandle(ov.hEvent);
3225 ov.hEvent = NULL;
3227 goto fail;
3230 if (ov.hEvent) {
3231 CloseHandle(ov.hEvent);
3232 ov.hEvent = NULL;
3234 qemu_add_polling_cb(win_chr_pipe_poll, chr);
3235 return 0;
3237 fail:
3238 win_chr_close(chr);
3239 return -1;
3243 static CharDriverState *qemu_chr_open_win_pipe(const char *filename)
3245 CharDriverState *chr;
3246 WinCharState *s;
3248 chr = qemu_mallocz(sizeof(CharDriverState));
3249 if (!chr)
3250 return NULL;
3251 s = qemu_mallocz(sizeof(WinCharState));
3252 if (!s) {
3253 free(chr);
3254 return NULL;
3256 chr->opaque = s;
3257 chr->chr_write = win_chr_write;
3258 chr->chr_close = win_chr_close;
3260 if (win_chr_pipe_init(chr, filename) < 0) {
3261 free(s);
3262 free(chr);
3263 return NULL;
3265 qemu_chr_reset(chr);
3266 return chr;
3269 static CharDriverState *qemu_chr_open_win_file(HANDLE fd_out)
3271 CharDriverState *chr;
3272 WinCharState *s;
3274 chr = qemu_mallocz(sizeof(CharDriverState));
3275 if (!chr)
3276 return NULL;
3277 s = qemu_mallocz(sizeof(WinCharState));
3278 if (!s) {
3279 free(chr);
3280 return NULL;
3282 s->hcom = fd_out;
3283 chr->opaque = s;
3284 chr->chr_write = win_chr_write;
3285 qemu_chr_reset(chr);
3286 return chr;
3289 static CharDriverState *qemu_chr_open_win_con(const char *filename)
3291 return qemu_chr_open_win_file(GetStdHandle(STD_OUTPUT_HANDLE));
3294 static CharDriverState *qemu_chr_open_win_file_out(const char *file_out)
3296 HANDLE fd_out;
3298 fd_out = CreateFile(file_out, GENERIC_WRITE, FILE_SHARE_READ, NULL,
3299 OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
3300 if (fd_out == INVALID_HANDLE_VALUE)
3301 return NULL;
3303 return qemu_chr_open_win_file(fd_out);
3305 #endif /* !_WIN32 */
3307 /***********************************************************/
3308 /* UDP Net console */
3310 typedef struct {
3311 int fd;
3312 struct sockaddr_in daddr;
3313 uint8_t buf[1024];
3314 int bufcnt;
3315 int bufptr;
3316 int max_size;
3317 } NetCharDriver;
3319 static int udp_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
3321 NetCharDriver *s = chr->opaque;
3323 return sendto(s->fd, buf, len, 0,
3324 (struct sockaddr *)&s->daddr, sizeof(struct sockaddr_in));
3327 static int udp_chr_read_poll(void *opaque)
3329 CharDriverState *chr = opaque;
3330 NetCharDriver *s = chr->opaque;
3332 s->max_size = qemu_chr_can_read(chr);
3334 /* If there were any stray characters in the queue process them
3335 * first
3337 while (s->max_size > 0 && s->bufptr < s->bufcnt) {
3338 qemu_chr_read(chr, &s->buf[s->bufptr], 1);
3339 s->bufptr++;
3340 s->max_size = qemu_chr_can_read(chr);
3342 return s->max_size;
3345 static void udp_chr_read(void *opaque)
3347 CharDriverState *chr = opaque;
3348 NetCharDriver *s = chr->opaque;
3350 if (s->max_size == 0)
3351 return;
3352 s->bufcnt = recv(s->fd, s->buf, sizeof(s->buf), 0);
3353 s->bufptr = s->bufcnt;
3354 if (s->bufcnt <= 0)
3355 return;
3357 s->bufptr = 0;
3358 while (s->max_size > 0 && s->bufptr < s->bufcnt) {
3359 qemu_chr_read(chr, &s->buf[s->bufptr], 1);
3360 s->bufptr++;
3361 s->max_size = qemu_chr_can_read(chr);
3365 static void udp_chr_update_read_handler(CharDriverState *chr)
3367 NetCharDriver *s = chr->opaque;
3369 if (s->fd >= 0) {
3370 qemu_set_fd_handler2(s->fd, udp_chr_read_poll,
3371 udp_chr_read, NULL, chr);
3375 int parse_host_port(struct sockaddr_in *saddr, const char *str);
3376 #ifndef _WIN32
3377 static int parse_unix_path(struct sockaddr_un *uaddr, const char *str);
3378 #endif
3379 int parse_host_src_port(struct sockaddr_in *haddr,
3380 struct sockaddr_in *saddr,
3381 const char *str);
3383 static CharDriverState *qemu_chr_open_udp(const char *def)
3385 CharDriverState *chr = NULL;
3386 NetCharDriver *s = NULL;
3387 int fd = -1;
3388 struct sockaddr_in saddr;
3390 chr = qemu_mallocz(sizeof(CharDriverState));
3391 if (!chr)
3392 goto return_err;
3393 s = qemu_mallocz(sizeof(NetCharDriver));
3394 if (!s)
3395 goto return_err;
3397 fd = socket(PF_INET, SOCK_DGRAM, 0);
3398 if (fd < 0) {
3399 perror("socket(PF_INET, SOCK_DGRAM)");
3400 goto return_err;
3403 if (parse_host_src_port(&s->daddr, &saddr, def) < 0) {
3404 printf("Could not parse: %s\n", def);
3405 goto return_err;
3408 if (bind(fd, (struct sockaddr *)&saddr, sizeof(saddr)) < 0)
3410 perror("bind");
3411 goto return_err;
3414 s->fd = fd;
3415 s->bufcnt = 0;
3416 s->bufptr = 0;
3417 chr->opaque = s;
3418 chr->chr_write = udp_chr_write;
3419 chr->chr_update_read_handler = udp_chr_update_read_handler;
3420 return chr;
3422 return_err:
3423 if (chr)
3424 free(chr);
3425 if (s)
3426 free(s);
3427 if (fd >= 0)
3428 closesocket(fd);
3429 return NULL;
3432 /***********************************************************/
3433 /* TCP Net console */
3435 typedef struct {
3436 int fd, listen_fd;
3437 int connected;
3438 int max_size;
3439 int do_telnetopt;
3440 int do_nodelay;
3441 int is_unix;
3442 } TCPCharDriver;
3444 static void tcp_chr_accept(void *opaque);
3446 static int tcp_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
3448 TCPCharDriver *s = chr->opaque;
3449 if (s->connected) {
3450 return send_all(s->fd, buf, len);
3451 } else {
3452 /* XXX: indicate an error ? */
3453 return len;
3457 static int tcp_chr_read_poll(void *opaque)
3459 CharDriverState *chr = opaque;
3460 TCPCharDriver *s = chr->opaque;
3461 if (!s->connected)
3462 return 0;
3463 s->max_size = qemu_chr_can_read(chr);
3464 return s->max_size;
3467 #define IAC 255
3468 #define IAC_BREAK 243
3469 static void tcp_chr_process_IAC_bytes(CharDriverState *chr,
3470 TCPCharDriver *s,
3471 uint8_t *buf, int *size)
3473 /* Handle any telnet client's basic IAC options to satisfy char by
3474 * char mode with no echo. All IAC options will be removed from
3475 * the buf and the do_telnetopt variable will be used to track the
3476 * state of the width of the IAC information.
3478 * IAC commands come in sets of 3 bytes with the exception of the
3479 * "IAC BREAK" command and the double IAC.
3482 int i;
3483 int j = 0;
3485 for (i = 0; i < *size; i++) {
3486 if (s->do_telnetopt > 1) {
3487 if ((unsigned char)buf[i] == IAC && s->do_telnetopt == 2) {
3488 /* Double IAC means send an IAC */
3489 if (j != i)
3490 buf[j] = buf[i];
3491 j++;
3492 s->do_telnetopt = 1;
3493 } else {
3494 if ((unsigned char)buf[i] == IAC_BREAK && s->do_telnetopt == 2) {
3495 /* Handle IAC break commands by sending a serial break */
3496 qemu_chr_event(chr, CHR_EVENT_BREAK);
3497 s->do_telnetopt++;
3499 s->do_telnetopt++;
3501 if (s->do_telnetopt >= 4) {
3502 s->do_telnetopt = 1;
3504 } else {
3505 if ((unsigned char)buf[i] == IAC) {
3506 s->do_telnetopt = 2;
3507 } else {
3508 if (j != i)
3509 buf[j] = buf[i];
3510 j++;
3514 *size = j;
3517 static void tcp_chr_read(void *opaque)
3519 CharDriverState *chr = opaque;
3520 TCPCharDriver *s = chr->opaque;
3521 uint8_t buf[1024];
3522 int len, size;
3524 if (!s->connected || s->max_size <= 0)
3525 return;
3526 len = sizeof(buf);
3527 if (len > s->max_size)
3528 len = s->max_size;
3529 size = recv(s->fd, buf, len, 0);
3530 if (size == 0) {
3531 /* connection closed */
3532 s->connected = 0;
3533 if (s->listen_fd >= 0) {
3534 qemu_set_fd_handler(s->listen_fd, tcp_chr_accept, NULL, chr);
3536 qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
3537 closesocket(s->fd);
3538 s->fd = -1;
3539 } else if (size > 0) {
3540 if (s->do_telnetopt)
3541 tcp_chr_process_IAC_bytes(chr, s, buf, &size);
3542 if (size > 0)
3543 qemu_chr_read(chr, buf, size);
3547 static void tcp_chr_connect(void *opaque)
3549 CharDriverState *chr = opaque;
3550 TCPCharDriver *s = chr->opaque;
3552 s->connected = 1;
3553 qemu_set_fd_handler2(s->fd, tcp_chr_read_poll,
3554 tcp_chr_read, NULL, chr);
3555 qemu_chr_reset(chr);
3558 #define IACSET(x,a,b,c) x[0] = a; x[1] = b; x[2] = c;
3559 static void tcp_chr_telnet_init(int fd)
3561 char buf[3];
3562 /* Send the telnet negotion to put telnet in binary, no echo, single char mode */
3563 IACSET(buf, 0xff, 0xfb, 0x01); /* IAC WILL ECHO */
3564 send(fd, (char *)buf, 3, 0);
3565 IACSET(buf, 0xff, 0xfb, 0x03); /* IAC WILL Suppress go ahead */
3566 send(fd, (char *)buf, 3, 0);
3567 IACSET(buf, 0xff, 0xfb, 0x00); /* IAC WILL Binary */
3568 send(fd, (char *)buf, 3, 0);
3569 IACSET(buf, 0xff, 0xfd, 0x00); /* IAC DO Binary */
3570 send(fd, (char *)buf, 3, 0);
3573 static void socket_set_nodelay(int fd)
3575 int val = 1;
3576 setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char *)&val, sizeof(val));
3579 static void tcp_chr_accept(void *opaque)
3581 CharDriverState *chr = opaque;
3582 TCPCharDriver *s = chr->opaque;
3583 struct sockaddr_in saddr;
3584 #ifndef _WIN32
3585 struct sockaddr_un uaddr;
3586 #endif
3587 struct sockaddr *addr;
3588 socklen_t len;
3589 int fd;
3591 for(;;) {
3592 #ifndef _WIN32
3593 if (s->is_unix) {
3594 len = sizeof(uaddr);
3595 addr = (struct sockaddr *)&uaddr;
3596 } else
3597 #endif
3599 len = sizeof(saddr);
3600 addr = (struct sockaddr *)&saddr;
3602 fd = accept(s->listen_fd, addr, &len);
3603 if (fd < 0 && errno != EINTR) {
3604 return;
3605 } else if (fd >= 0) {
3606 if (s->do_telnetopt)
3607 tcp_chr_telnet_init(fd);
3608 break;
3611 socket_set_nonblock(fd);
3612 if (s->do_nodelay)
3613 socket_set_nodelay(fd);
3614 s->fd = fd;
3615 qemu_set_fd_handler(s->listen_fd, NULL, NULL, NULL);
3616 tcp_chr_connect(chr);
3619 static void tcp_chr_close(CharDriverState *chr)
3621 TCPCharDriver *s = chr->opaque;
3622 if (s->fd >= 0)
3623 closesocket(s->fd);
3624 if (s->listen_fd >= 0)
3625 closesocket(s->listen_fd);
3626 qemu_free(s);
3629 static CharDriverState *qemu_chr_open_tcp(const char *host_str,
3630 int is_telnet,
3631 int is_unix)
3633 CharDriverState *chr = NULL;
3634 TCPCharDriver *s = NULL;
3635 int fd = -1, ret, err, val;
3636 int is_listen = 0;
3637 int is_waitconnect = 1;
3638 int do_nodelay = 0;
3639 const char *ptr;
3640 struct sockaddr_in saddr;
3641 #ifndef _WIN32
3642 struct sockaddr_un uaddr;
3643 #endif
3644 struct sockaddr *addr;
3645 socklen_t addrlen;
3647 #ifndef _WIN32
3648 if (is_unix) {
3649 addr = (struct sockaddr *)&uaddr;
3650 addrlen = sizeof(uaddr);
3651 if (parse_unix_path(&uaddr, host_str) < 0)
3652 goto fail;
3653 } else
3654 #endif
3656 addr = (struct sockaddr *)&saddr;
3657 addrlen = sizeof(saddr);
3658 if (parse_host_port(&saddr, host_str) < 0)
3659 goto fail;
3662 ptr = host_str;
3663 while((ptr = strchr(ptr,','))) {
3664 ptr++;
3665 if (!strncmp(ptr,"server",6)) {
3666 is_listen = 1;
3667 } else if (!strncmp(ptr,"nowait",6)) {
3668 is_waitconnect = 0;
3669 } else if (!strncmp(ptr,"nodelay",6)) {
3670 do_nodelay = 1;
3671 } else {
3672 printf("Unknown option: %s\n", ptr);
3673 goto fail;
3676 if (!is_listen)
3677 is_waitconnect = 0;
3679 chr = qemu_mallocz(sizeof(CharDriverState));
3680 if (!chr)
3681 goto fail;
3682 s = qemu_mallocz(sizeof(TCPCharDriver));
3683 if (!s)
3684 goto fail;
3686 #ifndef _WIN32
3687 if (is_unix)
3688 fd = socket(PF_UNIX, SOCK_STREAM, 0);
3689 else
3690 #endif
3691 fd = socket(PF_INET, SOCK_STREAM, 0);
3693 if (fd < 0)
3694 goto fail;
3696 if (!is_waitconnect)
3697 socket_set_nonblock(fd);
3699 s->connected = 0;
3700 s->fd = -1;
3701 s->listen_fd = -1;
3702 s->is_unix = is_unix;
3703 s->do_nodelay = do_nodelay && !is_unix;
3705 chr->opaque = s;
3706 chr->chr_write = tcp_chr_write;
3707 chr->chr_close = tcp_chr_close;
3709 if (is_listen) {
3710 /* allow fast reuse */
3711 #ifndef _WIN32
3712 if (is_unix) {
3713 char path[109];
3714 pstrcpy(path, sizeof(path), uaddr.sun_path);
3715 unlink(path);
3716 } else
3717 #endif
3719 val = 1;
3720 setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (const char *)&val, sizeof(val));
3723 ret = bind(fd, addr, addrlen);
3724 if (ret < 0)
3725 goto fail;
3727 ret = listen(fd, 0);
3728 if (ret < 0)
3729 goto fail;
3731 s->listen_fd = fd;
3732 qemu_set_fd_handler(s->listen_fd, tcp_chr_accept, NULL, chr);
3733 if (is_telnet)
3734 s->do_telnetopt = 1;
3735 } else {
3736 for(;;) {
3737 ret = connect(fd, addr, addrlen);
3738 if (ret < 0) {
3739 err = socket_error();
3740 if (err == EINTR || err == EWOULDBLOCK) {
3741 } else if (err == EINPROGRESS) {
3742 break;
3743 #ifdef _WIN32
3744 } else if (err == WSAEALREADY) {
3745 break;
3746 #endif
3747 } else {
3748 goto fail;
3750 } else {
3751 s->connected = 1;
3752 break;
3755 s->fd = fd;
3756 socket_set_nodelay(fd);
3757 if (s->connected)
3758 tcp_chr_connect(chr);
3759 else
3760 qemu_set_fd_handler(s->fd, NULL, tcp_chr_connect, chr);
3763 if (is_listen && is_waitconnect) {
3764 printf("QEMU waiting for connection on: %s\n", host_str);
3765 tcp_chr_accept(chr);
3766 socket_set_nonblock(s->listen_fd);
3769 return chr;
3770 fail:
3771 if (fd >= 0)
3772 closesocket(fd);
3773 qemu_free(s);
3774 qemu_free(chr);
3775 return NULL;
3778 CharDriverState *qemu_chr_open(const char *filename)
3780 const char *p;
3782 if (!strcmp(filename, "vc")) {
3783 return text_console_init(&display_state, 0);
3784 } else if (strstart(filename, "vc:", &p)) {
3785 return text_console_init(&display_state, p);
3786 } else if (!strcmp(filename, "null")) {
3787 return qemu_chr_open_null();
3788 } else
3789 if (strstart(filename, "tcp:", &p)) {
3790 return qemu_chr_open_tcp(p, 0, 0);
3791 } else
3792 if (strstart(filename, "telnet:", &p)) {
3793 return qemu_chr_open_tcp(p, 1, 0);
3794 } else
3795 if (strstart(filename, "udp:", &p)) {
3796 return qemu_chr_open_udp(p);
3797 } else
3798 if (strstart(filename, "mon:", &p)) {
3799 CharDriverState *drv = qemu_chr_open(p);
3800 if (drv) {
3801 drv = qemu_chr_open_mux(drv);
3802 monitor_init(drv, !nographic);
3803 return drv;
3805 printf("Unable to open driver: %s\n", p);
3806 return 0;
3807 } else
3808 #ifndef _WIN32
3809 if (strstart(filename, "unix:", &p)) {
3810 return qemu_chr_open_tcp(p, 0, 1);
3811 } else if (strstart(filename, "file:", &p)) {
3812 return qemu_chr_open_file_out(p);
3813 } else if (strstart(filename, "pipe:", &p)) {
3814 return qemu_chr_open_pipe(p);
3815 } else if (!strcmp(filename, "pty")) {
3816 return qemu_chr_open_pty();
3817 } else if (!strcmp(filename, "stdio")) {
3818 return qemu_chr_open_stdio();
3819 } else
3820 #if defined(__linux__)
3821 if (strstart(filename, "/dev/parport", NULL)) {
3822 return qemu_chr_open_pp(filename);
3823 } else
3824 #endif
3825 #if defined(__linux__) || defined(__sun__) || defined(__FreeBSD__) \
3826 || defined(__NetBSD__) || defined(__OpenBSD__)
3827 if (strstart(filename, "/dev/", NULL)) {
3828 return qemu_chr_open_tty(filename);
3829 } else
3830 #endif
3831 #else /* !_WIN32 */
3832 if (strstart(filename, "COM", NULL)) {
3833 return qemu_chr_open_win(filename);
3834 } else
3835 if (strstart(filename, "pipe:", &p)) {
3836 return qemu_chr_open_win_pipe(p);
3837 } else
3838 if (strstart(filename, "con:", NULL)) {
3839 return qemu_chr_open_win_con(filename);
3840 } else
3841 if (strstart(filename, "file:", &p)) {
3842 return qemu_chr_open_win_file_out(p);
3843 } else
3844 #endif
3845 #ifdef CONFIG_BRLAPI
3846 if (!strcmp(filename, "braille")) {
3847 return chr_baum_init();
3848 } else
3849 #endif
3851 return NULL;
3855 void qemu_chr_close(CharDriverState *chr)
3857 if (chr->chr_close)
3858 chr->chr_close(chr);
3859 qemu_free(chr);
3862 /***********************************************************/
3863 /* network device redirectors */
3865 #if defined(DEBUG_NET) || defined(DEBUG_SLIRP)
3866 static void hex_dump(FILE *f, const uint8_t *buf, int size)
3868 int len, i, j, c;
3870 for(i=0;i<size;i+=16) {
3871 len = size - i;
3872 if (len > 16)
3873 len = 16;
3874 fprintf(f, "%08x ", i);
3875 for(j=0;j<16;j++) {
3876 if (j < len)
3877 fprintf(f, " %02x", buf[i+j]);
3878 else
3879 fprintf(f, " ");
3881 fprintf(f, " ");
3882 for(j=0;j<len;j++) {
3883 c = buf[i+j];
3884 if (c < ' ' || c > '~')
3885 c = '.';
3886 fprintf(f, "%c", c);
3888 fprintf(f, "\n");
3891 #endif
3893 static int parse_macaddr(uint8_t *macaddr, const char *p)
3895 int i;
3896 char *last_char;
3897 long int offset;
3899 errno = 0;
3900 offset = strtol(p, &last_char, 0);
3901 if (0 == errno && '\0' == *last_char &&
3902 offset >= 0 && offset <= 0xFFFFFF) {
3903 macaddr[3] = (offset & 0xFF0000) >> 16;
3904 macaddr[4] = (offset & 0xFF00) >> 8;
3905 macaddr[5] = offset & 0xFF;
3906 return 0;
3907 } else {
3908 for(i = 0; i < 6; i++) {
3909 macaddr[i] = strtol(p, (char **)&p, 16);
3910 if (i == 5) {
3911 if (*p != '\0')
3912 return -1;
3913 } else {
3914 if (*p != ':' && *p != '-')
3915 return -1;
3916 p++;
3919 return 0;
3922 return -1;
3925 static int get_str_sep(char *buf, int buf_size, const char **pp, int sep)
3927 const char *p, *p1;
3928 int len;
3929 p = *pp;
3930 p1 = strchr(p, sep);
3931 if (!p1)
3932 return -1;
3933 len = p1 - p;
3934 p1++;
3935 if (buf_size > 0) {
3936 if (len > buf_size - 1)
3937 len = buf_size - 1;
3938 memcpy(buf, p, len);
3939 buf[len] = '\0';
3941 *pp = p1;
3942 return 0;
3945 int parse_host_src_port(struct sockaddr_in *haddr,
3946 struct sockaddr_in *saddr,
3947 const char *input_str)
3949 char *str = strdup(input_str);
3950 char *host_str = str;
3951 char *src_str;
3952 const char *src_str2;
3953 char *ptr;
3956 * Chop off any extra arguments at the end of the string which
3957 * would start with a comma, then fill in the src port information
3958 * if it was provided else use the "any address" and "any port".
3960 if ((ptr = strchr(str,',')))
3961 *ptr = '\0';
3963 if ((src_str = strchr(input_str,'@'))) {
3964 *src_str = '\0';
3965 src_str++;
3968 if (parse_host_port(haddr, host_str) < 0)
3969 goto fail;
3971 src_str2 = src_str;
3972 if (!src_str || *src_str == '\0')
3973 src_str2 = ":0";
3975 if (parse_host_port(saddr, src_str2) < 0)
3976 goto fail;
3978 free(str);
3979 return(0);
3981 fail:
3982 free(str);
3983 return -1;
3986 int parse_host_port(struct sockaddr_in *saddr, const char *str)
3988 char buf[512];
3989 struct hostent *he;
3990 const char *p, *r;
3991 int port;
3993 p = str;
3994 if (get_str_sep(buf, sizeof(buf), &p, ':') < 0)
3995 return -1;
3996 saddr->sin_family = AF_INET;
3997 if (buf[0] == '\0') {
3998 saddr->sin_addr.s_addr = 0;
3999 } else {
4000 if (isdigit(buf[0])) {
4001 if (!inet_aton(buf, &saddr->sin_addr))
4002 return -1;
4003 } else {
4004 if ((he = gethostbyname(buf)) == NULL)
4005 return - 1;
4006 saddr->sin_addr = *(struct in_addr *)he->h_addr;
4009 port = strtol(p, (char **)&r, 0);
4010 if (r == p)
4011 return -1;
4012 saddr->sin_port = htons(port);
4013 return 0;
4016 #ifndef _WIN32
4017 static int parse_unix_path(struct sockaddr_un *uaddr, const char *str)
4019 const char *p;
4020 int len;
4022 len = MIN(108, strlen(str));
4023 p = strchr(str, ',');
4024 if (p)
4025 len = MIN(len, p - str);
4027 memset(uaddr, 0, sizeof(*uaddr));
4029 uaddr->sun_family = AF_UNIX;
4030 memcpy(uaddr->sun_path, str, len);
4032 return 0;
4034 #endif
4036 /* find or alloc a new VLAN */
4037 VLANState *qemu_find_vlan(int id)
4039 VLANState **pvlan, *vlan;
4040 for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) {
4041 if (vlan->id == id)
4042 return vlan;
4044 vlan = qemu_mallocz(sizeof(VLANState));
4045 if (!vlan)
4046 return NULL;
4047 vlan->id = id;
4048 vlan->next = NULL;
4049 pvlan = &first_vlan;
4050 while (*pvlan != NULL)
4051 pvlan = &(*pvlan)->next;
4052 *pvlan = vlan;
4053 return vlan;
4056 VLANClientState *qemu_new_vlan_client(VLANState *vlan,
4057 IOReadHandler *fd_read,
4058 IOCanRWHandler *fd_can_read,
4059 void *opaque)
4061 VLANClientState *vc, **pvc;
4062 vc = qemu_mallocz(sizeof(VLANClientState));
4063 if (!vc)
4064 return NULL;
4065 vc->fd_read = fd_read;
4066 vc->fd_can_read = fd_can_read;
4067 vc->opaque = opaque;
4068 vc->vlan = vlan;
4070 vc->next = NULL;
4071 pvc = &vlan->first_client;
4072 while (*pvc != NULL)
4073 pvc = &(*pvc)->next;
4074 *pvc = vc;
4075 return vc;
4078 void qemu_del_vlan_client(VLANClientState *vc)
4080 VLANClientState **pvc = &vc->vlan->first_client;
4082 while (*pvc != NULL)
4083 if (*pvc == vc) {
4084 *pvc = vc->next;
4085 free(vc);
4086 break;
4087 } else
4088 pvc = &(*pvc)->next;
4091 int qemu_can_send_packet(VLANClientState *vc1)
4093 VLANState *vlan = vc1->vlan;
4094 VLANClientState *vc;
4096 for(vc = vlan->first_client; vc != NULL; vc = vc->next) {
4097 if (vc != vc1) {
4098 if (vc->fd_can_read && vc->fd_can_read(vc->opaque))
4099 return 1;
4102 return 0;
4105 void qemu_send_packet(VLANClientState *vc1, const uint8_t *buf, int size)
4107 VLANState *vlan = vc1->vlan;
4108 VLANClientState *vc;
4110 #ifdef DEBUG_NET
4111 printf("vlan %d send:\n", vlan->id);
4112 hex_dump(stdout, buf, size);
4113 #endif
4114 for(vc = vlan->first_client; vc != NULL; vc = vc->next) {
4115 if (vc != vc1) {
4116 vc->fd_read(vc->opaque, buf, size);
4121 #if defined(CONFIG_SLIRP)
4123 /* slirp network adapter */
4125 static int slirp_inited;
4126 static VLANClientState *slirp_vc;
4128 int slirp_can_output(void)
4130 return !slirp_vc || qemu_can_send_packet(slirp_vc);
4133 void slirp_output(const uint8_t *pkt, int pkt_len)
4135 #ifdef DEBUG_SLIRP
4136 printf("slirp output:\n");
4137 hex_dump(stdout, pkt, pkt_len);
4138 #endif
4139 if (!slirp_vc)
4140 return;
4141 qemu_send_packet(slirp_vc, pkt, pkt_len);
4144 static void slirp_receive(void *opaque, const uint8_t *buf, int size)
4146 #ifdef DEBUG_SLIRP
4147 printf("slirp input:\n");
4148 hex_dump(stdout, buf, size);
4149 #endif
4150 slirp_input(buf, size);
4153 static int net_slirp_init(VLANState *vlan)
4155 if (!slirp_inited) {
4156 slirp_inited = 1;
4157 slirp_init();
4159 slirp_vc = qemu_new_vlan_client(vlan,
4160 slirp_receive, NULL, NULL);
4161 snprintf(slirp_vc->info_str, sizeof(slirp_vc->info_str), "user redirector");
4162 return 0;
4165 static void net_slirp_redir(const char *redir_str)
4167 int is_udp;
4168 char buf[256], *r;
4169 const char *p;
4170 struct in_addr guest_addr;
4171 int host_port, guest_port;
4173 if (!slirp_inited) {
4174 slirp_inited = 1;
4175 slirp_init();
4178 p = redir_str;
4179 if (get_str_sep(buf, sizeof(buf), &p, ':') < 0)
4180 goto fail;
4181 if (!strcmp(buf, "tcp")) {
4182 is_udp = 0;
4183 } else if (!strcmp(buf, "udp")) {
4184 is_udp = 1;
4185 } else {
4186 goto fail;
4189 if (get_str_sep(buf, sizeof(buf), &p, ':') < 0)
4190 goto fail;
4191 host_port = strtol(buf, &r, 0);
4192 if (r == buf)
4193 goto fail;
4195 if (get_str_sep(buf, sizeof(buf), &p, ':') < 0)
4196 goto fail;
4197 if (buf[0] == '\0') {
4198 pstrcpy(buf, sizeof(buf), "10.0.2.15");
4200 if (!inet_aton(buf, &guest_addr))
4201 goto fail;
4203 guest_port = strtol(p, &r, 0);
4204 if (r == p)
4205 goto fail;
4207 if (slirp_redir(is_udp, host_port, guest_addr, guest_port) < 0) {
4208 fprintf(stderr, "qemu: could not set up redirection\n");
4209 exit(1);
4211 return;
4212 fail:
4213 fprintf(stderr, "qemu: syntax: -redir [tcp|udp]:host-port:[guest-host]:guest-port\n");
4214 exit(1);
4217 #ifndef _WIN32
4219 static char smb_dir[1024];
4221 static void erase_dir(char *dir_name)
4223 DIR *d;
4224 struct dirent *de;
4225 char filename[1024];
4227 /* erase all the files in the directory */
4228 if ((d = opendir(dir_name)) != 0) {
4229 for(;;) {
4230 de = readdir(d);
4231 if (!de)
4232 break;
4233 if (strcmp(de->d_name, ".") != 0 &&
4234 strcmp(de->d_name, "..") != 0) {
4235 snprintf(filename, sizeof(filename), "%s/%s",
4236 smb_dir, de->d_name);
4237 if (unlink(filename) != 0) /* is it a directory? */
4238 erase_dir(filename);
4241 closedir(d);
4242 rmdir(dir_name);
4246 /* automatic user mode samba server configuration */
4247 static void smb_exit(void)
4249 erase_dir(smb_dir);
4252 /* automatic user mode samba server configuration */
4253 static void net_slirp_smb(const char *exported_dir)
4255 char smb_conf[1024];
4256 char smb_cmdline[1024];
4257 FILE *f;
4259 if (!slirp_inited) {
4260 slirp_inited = 1;
4261 slirp_init();
4264 /* XXX: better tmp dir construction */
4265 snprintf(smb_dir, sizeof(smb_dir), "/tmp/qemu-smb.%d", getpid());
4266 if (mkdir(smb_dir, 0700) < 0) {
4267 fprintf(stderr, "qemu: could not create samba server dir '%s'\n", smb_dir);
4268 exit(1);
4270 snprintf(smb_conf, sizeof(smb_conf), "%s/%s", smb_dir, "smb.conf");
4272 f = fopen(smb_conf, "w");
4273 if (!f) {
4274 fprintf(stderr, "qemu: could not create samba server configuration file '%s'\n", smb_conf);
4275 exit(1);
4277 fprintf(f,
4278 "[global]\n"
4279 "private dir=%s\n"
4280 "smb ports=0\n"
4281 "socket address=127.0.0.1\n"
4282 "pid directory=%s\n"
4283 "lock directory=%s\n"
4284 "log file=%s/log.smbd\n"
4285 "smb passwd file=%s/smbpasswd\n"
4286 "security = share\n"
4287 "[qemu]\n"
4288 "path=%s\n"
4289 "read only=no\n"
4290 "guest ok=yes\n",
4291 smb_dir,
4292 smb_dir,
4293 smb_dir,
4294 smb_dir,
4295 smb_dir,
4296 exported_dir
4298 fclose(f);
4299 atexit(smb_exit);
4301 snprintf(smb_cmdline, sizeof(smb_cmdline), "%s -s %s",
4302 SMBD_COMMAND, smb_conf);
4304 slirp_add_exec(0, smb_cmdline, 4, 139);
4307 #endif /* !defined(_WIN32) */
4308 void do_info_slirp(void)
4310 slirp_stats();
4313 #endif /* CONFIG_SLIRP */
4315 #if !defined(_WIN32)
4317 typedef struct TAPState {
4318 VLANClientState *vc;
4319 int fd;
4320 char down_script[1024];
4321 } TAPState;
4323 static void tap_receive(void *opaque, const uint8_t *buf, int size)
4325 TAPState *s = opaque;
4326 int ret;
4327 for(;;) {
4328 ret = write(s->fd, buf, size);
4329 if (ret < 0 && (errno == EINTR || errno == EAGAIN)) {
4330 } else {
4331 break;
4336 static void tap_send(void *opaque)
4338 TAPState *s = opaque;
4339 uint8_t buf[4096];
4340 int size;
4342 #ifdef __sun__
4343 struct strbuf sbuf;
4344 int f = 0;
4345 sbuf.maxlen = sizeof(buf);
4346 sbuf.buf = buf;
4347 size = getmsg(s->fd, NULL, &sbuf, &f) >=0 ? sbuf.len : -1;
4348 #else
4349 size = read(s->fd, buf, sizeof(buf));
4350 #endif
4351 if (size > 0) {
4352 qemu_send_packet(s->vc, buf, size);
4356 /* fd support */
4358 static TAPState *net_tap_fd_init(VLANState *vlan, int fd)
4360 TAPState *s;
4362 s = qemu_mallocz(sizeof(TAPState));
4363 if (!s)
4364 return NULL;
4365 s->fd = fd;
4366 s->vc = qemu_new_vlan_client(vlan, tap_receive, NULL, s);
4367 qemu_set_fd_handler(s->fd, tap_send, NULL, s);
4368 snprintf(s->vc->info_str, sizeof(s->vc->info_str), "tap: fd=%d", fd);
4369 return s;
4372 #if defined (_BSD) || defined (__FreeBSD_kernel__)
4373 static int tap_open(char *ifname, int ifname_size)
4375 int fd;
4376 char *dev;
4377 struct stat s;
4379 TFR(fd = open("/dev/tap", O_RDWR));
4380 if (fd < 0) {
4381 fprintf(stderr, "warning: could not open /dev/tap: no virtual network emulation\n");
4382 return -1;
4385 fstat(fd, &s);
4386 dev = devname(s.st_rdev, S_IFCHR);
4387 pstrcpy(ifname, ifname_size, dev);
4389 fcntl(fd, F_SETFL, O_NONBLOCK);
4390 return fd;
4392 #elif defined(__sun__)
4393 #define TUNNEWPPA (('T'<<16) | 0x0001)
4395 * Allocate TAP device, returns opened fd.
4396 * Stores dev name in the first arg(must be large enough).
4398 int tap_alloc(char *dev, size_t dev_size)
4400 int tap_fd, if_fd, ppa = -1;
4401 static int ip_fd = 0;
4402 char *ptr;
4404 static int arp_fd = 0;
4405 int ip_muxid, arp_muxid;
4406 struct strioctl strioc_if, strioc_ppa;
4407 int link_type = I_PLINK;;
4408 struct lifreq ifr;
4409 char actual_name[32] = "";
4411 memset(&ifr, 0x0, sizeof(ifr));
4413 if( *dev ){
4414 ptr = dev;
4415 while( *ptr && !isdigit((int)*ptr) ) ptr++;
4416 ppa = atoi(ptr);
4419 /* Check if IP device was opened */
4420 if( ip_fd )
4421 close(ip_fd);
4423 TFR(ip_fd = open("/dev/udp", O_RDWR, 0));
4424 if (ip_fd < 0) {
4425 syslog(LOG_ERR, "Can't open /dev/ip (actually /dev/udp)");
4426 return -1;
4429 TFR(tap_fd = open("/dev/tap", O_RDWR, 0));
4430 if (tap_fd < 0) {
4431 syslog(LOG_ERR, "Can't open /dev/tap");
4432 return -1;
4435 /* Assign a new PPA and get its unit number. */
4436 strioc_ppa.ic_cmd = TUNNEWPPA;
4437 strioc_ppa.ic_timout = 0;
4438 strioc_ppa.ic_len = sizeof(ppa);
4439 strioc_ppa.ic_dp = (char *)&ppa;
4440 if ((ppa = ioctl (tap_fd, I_STR, &strioc_ppa)) < 0)
4441 syslog (LOG_ERR, "Can't assign new interface");
4443 TFR(if_fd = open("/dev/tap", O_RDWR, 0));
4444 if (if_fd < 0) {
4445 syslog(LOG_ERR, "Can't open /dev/tap (2)");
4446 return -1;
4448 if(ioctl(if_fd, I_PUSH, "ip") < 0){
4449 syslog(LOG_ERR, "Can't push IP module");
4450 return -1;
4453 if (ioctl(if_fd, SIOCGLIFFLAGS, &ifr) < 0)
4454 syslog(LOG_ERR, "Can't get flags\n");
4456 snprintf (actual_name, 32, "tap%d", ppa);
4457 strncpy (ifr.lifr_name, actual_name, sizeof (ifr.lifr_name));
4459 ifr.lifr_ppa = ppa;
4460 /* Assign ppa according to the unit number returned by tun device */
4462 if (ioctl (if_fd, SIOCSLIFNAME, &ifr) < 0)
4463 syslog (LOG_ERR, "Can't set PPA %d", ppa);
4464 if (ioctl(if_fd, SIOCGLIFFLAGS, &ifr) <0)
4465 syslog (LOG_ERR, "Can't get flags\n");
4466 /* Push arp module to if_fd */
4467 if (ioctl (if_fd, I_PUSH, "arp") < 0)
4468 syslog (LOG_ERR, "Can't push ARP module (2)");
4470 /* Push arp module to ip_fd */
4471 if (ioctl (ip_fd, I_POP, NULL) < 0)
4472 syslog (LOG_ERR, "I_POP failed\n");
4473 if (ioctl (ip_fd, I_PUSH, "arp") < 0)
4474 syslog (LOG_ERR, "Can't push ARP module (3)\n");
4475 /* Open arp_fd */
4476 TFR(arp_fd = open ("/dev/tap", O_RDWR, 0));
4477 if (arp_fd < 0)
4478 syslog (LOG_ERR, "Can't open %s\n", "/dev/tap");
4480 /* Set ifname to arp */
4481 strioc_if.ic_cmd = SIOCSLIFNAME;
4482 strioc_if.ic_timout = 0;
4483 strioc_if.ic_len = sizeof(ifr);
4484 strioc_if.ic_dp = (char *)&ifr;
4485 if (ioctl(arp_fd, I_STR, &strioc_if) < 0){
4486 syslog (LOG_ERR, "Can't set ifname to arp\n");
4489 if((ip_muxid = ioctl(ip_fd, I_LINK, if_fd)) < 0){
4490 syslog(LOG_ERR, "Can't link TAP device to IP");
4491 return -1;
4494 if ((arp_muxid = ioctl (ip_fd, link_type, arp_fd)) < 0)
4495 syslog (LOG_ERR, "Can't link TAP device to ARP");
4497 close (if_fd);
4499 memset(&ifr, 0x0, sizeof(ifr));
4500 strncpy (ifr.lifr_name, actual_name, sizeof (ifr.lifr_name));
4501 ifr.lifr_ip_muxid = ip_muxid;
4502 ifr.lifr_arp_muxid = arp_muxid;
4504 if (ioctl (ip_fd, SIOCSLIFMUXID, &ifr) < 0)
4506 ioctl (ip_fd, I_PUNLINK , arp_muxid);
4507 ioctl (ip_fd, I_PUNLINK, ip_muxid);
4508 syslog (LOG_ERR, "Can't set multiplexor id");
4511 snprintf(dev, dev_size, "tap%d", ppa);
4512 return tap_fd;
4515 static int tap_open(char *ifname, int ifname_size)
4517 char dev[10]="";
4518 int fd;
4519 if( (fd = tap_alloc(dev, sizeof(dev))) < 0 ){
4520 fprintf(stderr, "Cannot allocate TAP device\n");
4521 return -1;
4523 pstrcpy(ifname, ifname_size, dev);
4524 fcntl(fd, F_SETFL, O_NONBLOCK);
4525 return fd;
4527 #else
4528 static int tap_open(char *ifname, int ifname_size)
4530 struct ifreq ifr;
4531 int fd, ret;
4533 TFR(fd = open("/dev/net/tun", O_RDWR));
4534 if (fd < 0) {
4535 fprintf(stderr, "warning: could not open /dev/net/tun: no virtual network emulation\n");
4536 return -1;
4538 memset(&ifr, 0, sizeof(ifr));
4539 ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
4540 if (ifname[0] != '\0')
4541 pstrcpy(ifr.ifr_name, IFNAMSIZ, ifname);
4542 else
4543 pstrcpy(ifr.ifr_name, IFNAMSIZ, "tap%d");
4544 ret = ioctl(fd, TUNSETIFF, (void *) &ifr);
4545 if (ret != 0) {
4546 fprintf(stderr, "warning: could not configure /dev/net/tun: no virtual network emulation\n");
4547 close(fd);
4548 return -1;
4550 pstrcpy(ifname, ifname_size, ifr.ifr_name);
4551 fcntl(fd, F_SETFL, O_NONBLOCK);
4552 return fd;
4554 #endif
4556 static int launch_script(const char *setup_script, const char *ifname, int fd)
4558 int pid, status;
4559 char *args[3];
4560 char **parg;
4562 /* try to launch network script */
4563 pid = fork();
4564 if (pid >= 0) {
4565 if (pid == 0) {
4566 int open_max = sysconf (_SC_OPEN_MAX), i;
4567 for (i = 0; i < open_max; i++)
4568 if (i != STDIN_FILENO &&
4569 i != STDOUT_FILENO &&
4570 i != STDERR_FILENO &&
4571 i != fd)
4572 close(i);
4574 parg = args;
4575 *parg++ = (char *)setup_script;
4576 *parg++ = (char *)ifname;
4577 *parg++ = NULL;
4578 execv(setup_script, args);
4579 _exit(1);
4581 while (waitpid(pid, &status, 0) != pid);
4582 if (!WIFEXITED(status) ||
4583 WEXITSTATUS(status) != 0) {
4584 fprintf(stderr, "%s: could not launch network script\n",
4585 setup_script);
4586 return -1;
4589 return 0;
4592 static int net_tap_init(VLANState *vlan, const char *ifname1,
4593 const char *setup_script, const char *down_script)
4595 TAPState *s;
4596 int fd;
4597 char ifname[128];
4599 if (ifname1 != NULL)
4600 pstrcpy(ifname, sizeof(ifname), ifname1);
4601 else
4602 ifname[0] = '\0';
4603 TFR(fd = tap_open(ifname, sizeof(ifname)));
4604 if (fd < 0)
4605 return -1;
4607 if (!setup_script || !strcmp(setup_script, "no"))
4608 setup_script = "";
4609 if (setup_script[0] != '\0') {
4610 if (launch_script(setup_script, ifname, fd))
4611 return -1;
4613 s = net_tap_fd_init(vlan, fd);
4614 if (!s)
4615 return -1;
4616 snprintf(s->vc->info_str, sizeof(s->vc->info_str),
4617 "tap: ifname=%s setup_script=%s", ifname, setup_script);
4618 if (down_script && strcmp(down_script, "no"))
4619 snprintf(s->down_script, sizeof(s->down_script), "%s", down_script);
4620 return 0;
4623 #endif /* !_WIN32 */
4625 #if defined(CONFIG_VDE)
4626 typedef struct VDEState {
4627 VLANClientState *vc;
4628 VDECONN *vde;
4629 } VDEState;
4631 static void vde_to_qemu(void *opaque)
4633 VDEState *s = opaque;
4634 uint8_t buf[4096];
4635 int size;
4637 size = vde_recv(s->vde, buf, sizeof(buf), 0);
4638 if (size > 0) {
4639 qemu_send_packet(s->vc, buf, size);
4643 static void vde_from_qemu(void *opaque, const uint8_t *buf, int size)
4645 VDEState *s = opaque;
4646 int ret;
4647 for(;;) {
4648 ret = vde_send(s->vde, buf, size, 0);
4649 if (ret < 0 && errno == EINTR) {
4650 } else {
4651 break;
4656 static int net_vde_init(VLANState *vlan, const char *sock, int port,
4657 const char *group, int mode)
4659 VDEState *s;
4660 char *init_group = strlen(group) ? (char *)group : NULL;
4661 char *init_sock = strlen(sock) ? (char *)sock : NULL;
4663 struct vde_open_args args = {
4664 .port = port,
4665 .group = init_group,
4666 .mode = mode,
4669 s = qemu_mallocz(sizeof(VDEState));
4670 if (!s)
4671 return -1;
4672 s->vde = vde_open(init_sock, "QEMU", &args);
4673 if (!s->vde){
4674 free(s);
4675 return -1;
4677 s->vc = qemu_new_vlan_client(vlan, vde_from_qemu, NULL, s);
4678 qemu_set_fd_handler(vde_datafd(s->vde), vde_to_qemu, NULL, s);
4679 snprintf(s->vc->info_str, sizeof(s->vc->info_str), "vde: sock=%s fd=%d",
4680 sock, vde_datafd(s->vde));
4681 return 0;
4683 #endif
4685 /* network connection */
4686 typedef struct NetSocketState {
4687 VLANClientState *vc;
4688 int fd;
4689 int state; /* 0 = getting length, 1 = getting data */
4690 int index;
4691 int packet_len;
4692 uint8_t buf[4096];
4693 struct sockaddr_in dgram_dst; /* contains inet host and port destination iff connectionless (SOCK_DGRAM) */
4694 } NetSocketState;
4696 typedef struct NetSocketListenState {
4697 VLANState *vlan;
4698 int fd;
4699 } NetSocketListenState;
4701 /* XXX: we consider we can send the whole packet without blocking */
4702 static void net_socket_receive(void *opaque, const uint8_t *buf, int size)
4704 NetSocketState *s = opaque;
4705 uint32_t len;
4706 len = htonl(size);
4708 send_all(s->fd, (const uint8_t *)&len, sizeof(len));
4709 send_all(s->fd, buf, size);
4712 static void net_socket_receive_dgram(void *opaque, const uint8_t *buf, int size)
4714 NetSocketState *s = opaque;
4715 sendto(s->fd, buf, size, 0,
4716 (struct sockaddr *)&s->dgram_dst, sizeof(s->dgram_dst));
4719 static void net_socket_send(void *opaque)
4721 NetSocketState *s = opaque;
4722 int l, size, err;
4723 uint8_t buf1[4096];
4724 const uint8_t *buf;
4726 size = recv(s->fd, buf1, sizeof(buf1), 0);
4727 if (size < 0) {
4728 err = socket_error();
4729 if (err != EWOULDBLOCK)
4730 goto eoc;
4731 } else if (size == 0) {
4732 /* end of connection */
4733 eoc:
4734 qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
4735 closesocket(s->fd);
4736 return;
4738 buf = buf1;
4739 while (size > 0) {
4740 /* reassemble a packet from the network */
4741 switch(s->state) {
4742 case 0:
4743 l = 4 - s->index;
4744 if (l > size)
4745 l = size;
4746 memcpy(s->buf + s->index, buf, l);
4747 buf += l;
4748 size -= l;
4749 s->index += l;
4750 if (s->index == 4) {
4751 /* got length */
4752 s->packet_len = ntohl(*(uint32_t *)s->buf);
4753 s->index = 0;
4754 s->state = 1;
4756 break;
4757 case 1:
4758 l = s->packet_len - s->index;
4759 if (l > size)
4760 l = size;
4761 memcpy(s->buf + s->index, buf, l);
4762 s->index += l;
4763 buf += l;
4764 size -= l;
4765 if (s->index >= s->packet_len) {
4766 qemu_send_packet(s->vc, s->buf, s->packet_len);
4767 s->index = 0;
4768 s->state = 0;
4770 break;
4775 static void net_socket_send_dgram(void *opaque)
4777 NetSocketState *s = opaque;
4778 int size;
4780 size = recv(s->fd, s->buf, sizeof(s->buf), 0);
4781 if (size < 0)
4782 return;
4783 if (size == 0) {
4784 /* end of connection */
4785 qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
4786 return;
4788 qemu_send_packet(s->vc, s->buf, size);
4791 static int net_socket_mcast_create(struct sockaddr_in *mcastaddr)
4793 struct ip_mreq imr;
4794 int fd;
4795 int val, ret;
4796 if (!IN_MULTICAST(ntohl(mcastaddr->sin_addr.s_addr))) {
4797 fprintf(stderr, "qemu: error: specified mcastaddr \"%s\" (0x%08x) does not contain a multicast address\n",
4798 inet_ntoa(mcastaddr->sin_addr),
4799 (int)ntohl(mcastaddr->sin_addr.s_addr));
4800 return -1;
4803 fd = socket(PF_INET, SOCK_DGRAM, 0);
4804 if (fd < 0) {
4805 perror("socket(PF_INET, SOCK_DGRAM)");
4806 return -1;
4809 val = 1;
4810 ret=setsockopt(fd, SOL_SOCKET, SO_REUSEADDR,
4811 (const char *)&val, sizeof(val));
4812 if (ret < 0) {
4813 perror("setsockopt(SOL_SOCKET, SO_REUSEADDR)");
4814 goto fail;
4817 ret = bind(fd, (struct sockaddr *)mcastaddr, sizeof(*mcastaddr));
4818 if (ret < 0) {
4819 perror("bind");
4820 goto fail;
4823 /* Add host to multicast group */
4824 imr.imr_multiaddr = mcastaddr->sin_addr;
4825 imr.imr_interface.s_addr = htonl(INADDR_ANY);
4827 ret = setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP,
4828 (const char *)&imr, sizeof(struct ip_mreq));
4829 if (ret < 0) {
4830 perror("setsockopt(IP_ADD_MEMBERSHIP)");
4831 goto fail;
4834 /* Force mcast msgs to loopback (eg. several QEMUs in same host */
4835 val = 1;
4836 ret=setsockopt(fd, IPPROTO_IP, IP_MULTICAST_LOOP,
4837 (const char *)&val, sizeof(val));
4838 if (ret < 0) {
4839 perror("setsockopt(SOL_IP, IP_MULTICAST_LOOP)");
4840 goto fail;
4843 socket_set_nonblock(fd);
4844 return fd;
4845 fail:
4846 if (fd >= 0)
4847 closesocket(fd);
4848 return -1;
4851 static NetSocketState *net_socket_fd_init_dgram(VLANState *vlan, int fd,
4852 int is_connected)
4854 struct sockaddr_in saddr;
4855 int newfd;
4856 socklen_t saddr_len;
4857 NetSocketState *s;
4859 /* fd passed: multicast: "learn" dgram_dst address from bound address and save it
4860 * Because this may be "shared" socket from a "master" process, datagrams would be recv()
4861 * by ONLY ONE process: we must "clone" this dgram socket --jjo
4864 if (is_connected) {
4865 if (getsockname(fd, (struct sockaddr *) &saddr, &saddr_len) == 0) {
4866 /* must be bound */
4867 if (saddr.sin_addr.s_addr==0) {
4868 fprintf(stderr, "qemu: error: init_dgram: fd=%d unbound, cannot setup multicast dst addr\n",
4869 fd);
4870 return NULL;
4872 /* clone dgram socket */
4873 newfd = net_socket_mcast_create(&saddr);
4874 if (newfd < 0) {
4875 /* error already reported by net_socket_mcast_create() */
4876 close(fd);
4877 return NULL;
4879 /* clone newfd to fd, close newfd */
4880 dup2(newfd, fd);
4881 close(newfd);
4883 } else {
4884 fprintf(stderr, "qemu: error: init_dgram: fd=%d failed getsockname(): %s\n",
4885 fd, strerror(errno));
4886 return NULL;
4890 s = qemu_mallocz(sizeof(NetSocketState));
4891 if (!s)
4892 return NULL;
4893 s->fd = fd;
4895 s->vc = qemu_new_vlan_client(vlan, net_socket_receive_dgram, NULL, s);
4896 qemu_set_fd_handler(s->fd, net_socket_send_dgram, NULL, s);
4898 /* mcast: save bound address as dst */
4899 if (is_connected) s->dgram_dst=saddr;
4901 snprintf(s->vc->info_str, sizeof(s->vc->info_str),
4902 "socket: fd=%d (%s mcast=%s:%d)",
4903 fd, is_connected? "cloned" : "",
4904 inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
4905 return s;
4908 static void net_socket_connect(void *opaque)
4910 NetSocketState *s = opaque;
4911 qemu_set_fd_handler(s->fd, net_socket_send, NULL, s);
4914 static NetSocketState *net_socket_fd_init_stream(VLANState *vlan, int fd,
4915 int is_connected)
4917 NetSocketState *s;
4918 s = qemu_mallocz(sizeof(NetSocketState));
4919 if (!s)
4920 return NULL;
4921 s->fd = fd;
4922 s->vc = qemu_new_vlan_client(vlan,
4923 net_socket_receive, NULL, s);
4924 snprintf(s->vc->info_str, sizeof(s->vc->info_str),
4925 "socket: fd=%d", fd);
4926 if (is_connected) {
4927 net_socket_connect(s);
4928 } else {
4929 qemu_set_fd_handler(s->fd, NULL, net_socket_connect, s);
4931 return s;
4934 static NetSocketState *net_socket_fd_init(VLANState *vlan, int fd,
4935 int is_connected)
4937 int so_type=-1, optlen=sizeof(so_type);
4939 if(getsockopt(fd, SOL_SOCKET, SO_TYPE, (char *)&so_type,
4940 (socklen_t *)&optlen)< 0) {
4941 fprintf(stderr, "qemu: error: getsockopt(SO_TYPE) for fd=%d failed\n", fd);
4942 return NULL;
4944 switch(so_type) {
4945 case SOCK_DGRAM:
4946 return net_socket_fd_init_dgram(vlan, fd, is_connected);
4947 case SOCK_STREAM:
4948 return net_socket_fd_init_stream(vlan, fd, is_connected);
4949 default:
4950 /* who knows ... this could be a eg. a pty, do warn and continue as stream */
4951 fprintf(stderr, "qemu: warning: socket type=%d for fd=%d is not SOCK_DGRAM or SOCK_STREAM\n", so_type, fd);
4952 return net_socket_fd_init_stream(vlan, fd, is_connected);
4954 return NULL;
4957 static void net_socket_accept(void *opaque)
4959 NetSocketListenState *s = opaque;
4960 NetSocketState *s1;
4961 struct sockaddr_in saddr;
4962 socklen_t len;
4963 int fd;
4965 for(;;) {
4966 len = sizeof(saddr);
4967 fd = accept(s->fd, (struct sockaddr *)&saddr, &len);
4968 if (fd < 0 && errno != EINTR) {
4969 return;
4970 } else if (fd >= 0) {
4971 break;
4974 s1 = net_socket_fd_init(s->vlan, fd, 1);
4975 if (!s1) {
4976 closesocket(fd);
4977 } else {
4978 snprintf(s1->vc->info_str, sizeof(s1->vc->info_str),
4979 "socket: connection from %s:%d",
4980 inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
4984 static int net_socket_listen_init(VLANState *vlan, const char *host_str)
4986 NetSocketListenState *s;
4987 int fd, val, ret;
4988 struct sockaddr_in saddr;
4990 if (parse_host_port(&saddr, host_str) < 0)
4991 return -1;
4993 s = qemu_mallocz(sizeof(NetSocketListenState));
4994 if (!s)
4995 return -1;
4997 fd = socket(PF_INET, SOCK_STREAM, 0);
4998 if (fd < 0) {
4999 perror("socket");
5000 return -1;
5002 socket_set_nonblock(fd);
5004 /* allow fast reuse */
5005 val = 1;
5006 setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (const char *)&val, sizeof(val));
5008 ret = bind(fd, (struct sockaddr *)&saddr, sizeof(saddr));
5009 if (ret < 0) {
5010 perror("bind");
5011 return -1;
5013 ret = listen(fd, 0);
5014 if (ret < 0) {
5015 perror("listen");
5016 return -1;
5018 s->vlan = vlan;
5019 s->fd = fd;
5020 qemu_set_fd_handler(fd, net_socket_accept, NULL, s);
5021 return 0;
5024 static int net_socket_connect_init(VLANState *vlan, const char *host_str)
5026 NetSocketState *s;
5027 int fd, connected, ret, err;
5028 struct sockaddr_in saddr;
5030 if (parse_host_port(&saddr, host_str) < 0)
5031 return -1;
5033 fd = socket(PF_INET, SOCK_STREAM, 0);
5034 if (fd < 0) {
5035 perror("socket");
5036 return -1;
5038 socket_set_nonblock(fd);
5040 connected = 0;
5041 for(;;) {
5042 ret = connect(fd, (struct sockaddr *)&saddr, sizeof(saddr));
5043 if (ret < 0) {
5044 err = socket_error();
5045 if (err == EINTR || err == EWOULDBLOCK) {
5046 } else if (err == EINPROGRESS) {
5047 break;
5048 #ifdef _WIN32
5049 } else if (err == WSAEALREADY) {
5050 break;
5051 #endif
5052 } else {
5053 perror("connect");
5054 closesocket(fd);
5055 return -1;
5057 } else {
5058 connected = 1;
5059 break;
5062 s = net_socket_fd_init(vlan, fd, connected);
5063 if (!s)
5064 return -1;
5065 snprintf(s->vc->info_str, sizeof(s->vc->info_str),
5066 "socket: connect to %s:%d",
5067 inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
5068 return 0;
5071 static int net_socket_mcast_init(VLANState *vlan, const char *host_str)
5073 NetSocketState *s;
5074 int fd;
5075 struct sockaddr_in saddr;
5077 if (parse_host_port(&saddr, host_str) < 0)
5078 return -1;
5081 fd = net_socket_mcast_create(&saddr);
5082 if (fd < 0)
5083 return -1;
5085 s = net_socket_fd_init(vlan, fd, 0);
5086 if (!s)
5087 return -1;
5089 s->dgram_dst = saddr;
5091 snprintf(s->vc->info_str, sizeof(s->vc->info_str),
5092 "socket: mcast=%s:%d",
5093 inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
5094 return 0;
5098 static const char *get_opt_name(char *buf, int buf_size, const char *p)
5100 char *q;
5102 q = buf;
5103 while (*p != '\0' && *p != '=') {
5104 if (q && (q - buf) < buf_size - 1)
5105 *q++ = *p;
5106 p++;
5108 if (q)
5109 *q = '\0';
5111 return p;
5114 static const char *get_opt_value(char *buf, int buf_size, const char *p)
5116 char *q;
5118 q = buf;
5119 while (*p != '\0') {
5120 if (*p == ',') {
5121 if (*(p + 1) != ',')
5122 break;
5123 p++;
5125 if (q && (q - buf) < buf_size - 1)
5126 *q++ = *p;
5127 p++;
5129 if (q)
5130 *q = '\0';
5132 return p;
5135 static int get_param_value(char *buf, int buf_size,
5136 const char *tag, const char *str)
5138 const char *p;
5139 char option[128];
5141 p = str;
5142 for(;;) {
5143 p = get_opt_name(option, sizeof(option), p);
5144 if (*p != '=')
5145 break;
5146 p++;
5147 if (!strcmp(tag, option)) {
5148 (void)get_opt_value(buf, buf_size, p);
5149 return strlen(buf);
5150 } else {
5151 p = get_opt_value(NULL, 0, p);
5153 if (*p != ',')
5154 break;
5155 p++;
5157 return 0;
5160 static int check_params(char *buf, int buf_size,
5161 const char * const *params, const char *str)
5163 const char *p;
5164 int i;
5166 p = str;
5167 for(;;) {
5168 p = get_opt_name(buf, buf_size, p);
5169 if (*p != '=')
5170 return -1;
5171 p++;
5172 for(i = 0; params[i] != NULL; i++)
5173 if (!strcmp(params[i], buf))
5174 break;
5175 if (params[i] == NULL)
5176 return -1;
5177 p = get_opt_value(NULL, 0, p);
5178 if (*p != ',')
5179 break;
5180 p++;
5182 return 0;
5185 static int net_client_init(const char *device, const char *p)
5187 char buf[1024];
5188 int vlan_id, ret;
5189 VLANState *vlan;
5191 vlan_id = 0;
5192 if (get_param_value(buf, sizeof(buf), "vlan", p)) {
5193 vlan_id = strtol(buf, NULL, 0);
5195 vlan = qemu_find_vlan(vlan_id);
5196 if (!vlan) {
5197 fprintf(stderr, "Could not create vlan %d\n", vlan_id);
5198 return -1;
5200 if (!strcmp(device, "nic")) {
5201 NICInfo *nd;
5202 uint8_t *macaddr;
5204 if (nb_nics >= MAX_NICS) {
5205 fprintf(stderr, "Too Many NICs\n");
5206 return -1;
5208 nd = &nd_table[nb_nics];
5209 macaddr = nd->macaddr;
5210 macaddr[0] = 0x52;
5211 macaddr[1] = 0x54;
5212 macaddr[2] = 0x00;
5213 macaddr[3] = 0x12;
5214 macaddr[4] = 0x34;
5215 macaddr[5] = 0x56 + nb_nics;
5217 if (get_param_value(buf, sizeof(buf), "macaddr", p)) {
5218 if (parse_macaddr(macaddr, buf) < 0) {
5219 fprintf(stderr, "invalid syntax for ethernet address\n");
5220 return -1;
5223 if (get_param_value(buf, sizeof(buf), "model", p)) {
5224 nd->model = strdup(buf);
5226 nd->vlan = vlan;
5227 nb_nics++;
5228 vlan->nb_guest_devs++;
5229 ret = 0;
5230 } else
5231 if (!strcmp(device, "none")) {
5232 /* does nothing. It is needed to signal that no network cards
5233 are wanted */
5234 ret = 0;
5235 } else
5236 #ifdef CONFIG_SLIRP
5237 if (!strcmp(device, "user")) {
5238 if (get_param_value(buf, sizeof(buf), "hostname", p)) {
5239 pstrcpy(slirp_hostname, sizeof(slirp_hostname), buf);
5241 vlan->nb_host_devs++;
5242 ret = net_slirp_init(vlan);
5243 } else
5244 #endif
5245 #ifdef _WIN32
5246 if (!strcmp(device, "tap")) {
5247 char ifname[64];
5248 if (get_param_value(ifname, sizeof(ifname), "ifname", p) <= 0) {
5249 fprintf(stderr, "tap: no interface name\n");
5250 return -1;
5252 vlan->nb_host_devs++;
5253 ret = tap_win32_init(vlan, ifname);
5254 } else
5255 #else
5256 if (!strcmp(device, "tap")) {
5257 char ifname[64];
5258 char setup_script[1024], down_script[1024];
5259 int fd;
5260 vlan->nb_host_devs++;
5261 if (get_param_value(buf, sizeof(buf), "fd", p) > 0) {
5262 fd = strtol(buf, NULL, 0);
5263 fcntl(fd, F_SETFL, O_NONBLOCK);
5264 ret = -1;
5265 if (net_tap_fd_init(vlan, fd))
5266 ret = 0;
5267 } else {
5268 if (get_param_value(ifname, sizeof(ifname), "ifname", p) <= 0) {
5269 ifname[0] = '\0';
5271 if (get_param_value(setup_script, sizeof(setup_script), "script", p) == 0) {
5272 pstrcpy(setup_script, sizeof(setup_script), DEFAULT_NETWORK_SCRIPT);
5274 if (get_param_value(down_script, sizeof(down_script), "downscript", p) == 0) {
5275 pstrcpy(down_script, sizeof(down_script), DEFAULT_NETWORK_DOWN_SCRIPT);
5277 ret = net_tap_init(vlan, ifname, setup_script, down_script);
5279 } else
5280 #endif
5281 if (!strcmp(device, "socket")) {
5282 if (get_param_value(buf, sizeof(buf), "fd", p) > 0) {
5283 int fd;
5284 fd = strtol(buf, NULL, 0);
5285 ret = -1;
5286 if (net_socket_fd_init(vlan, fd, 1))
5287 ret = 0;
5288 } else if (get_param_value(buf, sizeof(buf), "listen", p) > 0) {
5289 ret = net_socket_listen_init(vlan, buf);
5290 } else if (get_param_value(buf, sizeof(buf), "connect", p) > 0) {
5291 ret = net_socket_connect_init(vlan, buf);
5292 } else if (get_param_value(buf, sizeof(buf), "mcast", p) > 0) {
5293 ret = net_socket_mcast_init(vlan, buf);
5294 } else {
5295 fprintf(stderr, "Unknown socket options: %s\n", p);
5296 return -1;
5298 vlan->nb_host_devs++;
5299 } else
5300 #ifdef CONFIG_VDE
5301 if (!strcmp(device, "vde")) {
5302 char vde_sock[1024], vde_group[512];
5303 int vde_port, vde_mode;
5304 vlan->nb_host_devs++;
5305 if (get_param_value(vde_sock, sizeof(vde_sock), "sock", p) <= 0) {
5306 vde_sock[0] = '\0';
5308 if (get_param_value(buf, sizeof(buf), "port", p) > 0) {
5309 vde_port = strtol(buf, NULL, 10);
5310 } else {
5311 vde_port = 0;
5313 if (get_param_value(vde_group, sizeof(vde_group), "group", p) <= 0) {
5314 vde_group[0] = '\0';
5316 if (get_param_value(buf, sizeof(buf), "mode", p) > 0) {
5317 vde_mode = strtol(buf, NULL, 8);
5318 } else {
5319 vde_mode = 0700;
5321 ret = net_vde_init(vlan, vde_sock, vde_port, vde_group, vde_mode);
5322 } else
5323 #endif
5325 fprintf(stderr, "Unknown network device: %s\n", device);
5326 return -1;
5328 if (ret < 0) {
5329 fprintf(stderr, "Could not initialize device '%s'\n", device);
5332 return ret;
5335 static int net_client_parse(const char *str)
5337 const char *p;
5338 char *q;
5339 char device[64];
5341 p = str;
5342 q = device;
5343 while (*p != '\0' && *p != ',') {
5344 if ((q - device) < sizeof(device) - 1)
5345 *q++ = *p;
5346 p++;
5348 *q = '\0';
5349 if (*p == ',')
5350 p++;
5352 return net_client_init(device, p);
5355 void do_info_network(void)
5357 VLANState *vlan;
5358 VLANClientState *vc;
5360 for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) {
5361 term_printf("VLAN %d devices:\n", vlan->id);
5362 for(vc = vlan->first_client; vc != NULL; vc = vc->next)
5363 term_printf(" %s\n", vc->info_str);
5367 /***********************************************************/
5368 /* Bluetooth support */
5369 static int nb_hcis;
5370 static int cur_hci;
5371 static struct HCIInfo *hci_table[MAX_NICS];
5372 static struct bt_vlan_s {
5373 struct bt_scatternet_s net;
5374 int id;
5375 struct bt_vlan_s *next;
5376 } *first_bt_vlan;
5378 /* find or alloc a new bluetooth "VLAN" */
5379 static struct bt_scatternet_s *qemu_find_bt_vlan(int id)
5381 struct bt_vlan_s **pvlan, *vlan;
5382 for (vlan = first_bt_vlan; vlan != NULL; vlan = vlan->next) {
5383 if (vlan->id == id)
5384 return &vlan->net;
5386 vlan = qemu_mallocz(sizeof(struct bt_vlan_s));
5387 vlan->id = id;
5388 pvlan = &first_bt_vlan;
5389 while (*pvlan != NULL)
5390 pvlan = &(*pvlan)->next;
5391 *pvlan = vlan;
5392 return &vlan->net;
5395 static void null_hci_send(struct HCIInfo *hci, const uint8_t *data, int len)
5399 static int null_hci_addr_set(struct HCIInfo *hci, const uint8_t *bd_addr)
5401 return -ENOTSUP;
5404 static struct HCIInfo null_hci = {
5405 .cmd_send = null_hci_send,
5406 .sco_send = null_hci_send,
5407 .acl_send = null_hci_send,
5408 .bdaddr_set = null_hci_addr_set,
5411 struct HCIInfo *qemu_next_hci(void)
5413 if (cur_hci == nb_hcis)
5414 return &null_hci;
5416 return hci_table[cur_hci++];
5419 /***********************************************************/
5420 /* QEMU Block devices */
5422 #define HD_ALIAS "index=%d,media=disk"
5423 #ifdef TARGET_PPC
5424 #define CDROM_ALIAS "index=1,media=cdrom"
5425 #else
5426 #define CDROM_ALIAS "index=2,media=cdrom"
5427 #endif
5428 #define FD_ALIAS "index=%d,if=floppy"
5429 #define PFLASH_ALIAS "if=pflash"
5430 #define MTD_ALIAS "if=mtd"
5431 #define SD_ALIAS "index=0,if=sd"
5433 static int drive_add(const char *file, const char *fmt, ...)
5435 va_list ap;
5437 if (nb_drives_opt >= MAX_DRIVES) {
5438 fprintf(stderr, "qemu: too many drives\n");
5439 exit(1);
5442 drives_opt[nb_drives_opt].file = file;
5443 va_start(ap, fmt);
5444 vsnprintf(drives_opt[nb_drives_opt].opt,
5445 sizeof(drives_opt[0].opt), fmt, ap);
5446 va_end(ap);
5448 return nb_drives_opt++;
5451 int drive_get_index(BlockInterfaceType type, int bus, int unit)
5453 int index;
5455 /* seek interface, bus and unit */
5457 for (index = 0; index < nb_drives; index++)
5458 if (drives_table[index].type == type &&
5459 drives_table[index].bus == bus &&
5460 drives_table[index].unit == unit)
5461 return index;
5463 return -1;
5466 int drive_get_max_bus(BlockInterfaceType type)
5468 int max_bus;
5469 int index;
5471 max_bus = -1;
5472 for (index = 0; index < nb_drives; index++) {
5473 if(drives_table[index].type == type &&
5474 drives_table[index].bus > max_bus)
5475 max_bus = drives_table[index].bus;
5477 return max_bus;
5480 static void bdrv_format_print(void *opaque, const char *name)
5482 fprintf(stderr, " %s", name);
5485 static int drive_init(struct drive_opt *arg, int snapshot,
5486 QEMUMachine *machine)
5488 char buf[128];
5489 char file[1024];
5490 char devname[128];
5491 const char *mediastr = "";
5492 BlockInterfaceType type;
5493 enum { MEDIA_DISK, MEDIA_CDROM } media;
5494 int bus_id, unit_id;
5495 int cyls, heads, secs, translation;
5496 BlockDriverState *bdrv;
5497 BlockDriver *drv = NULL;
5498 int max_devs;
5499 int index;
5500 int cache;
5501 int bdrv_flags;
5502 char *str = arg->opt;
5503 static const char * const params[] = { "bus", "unit", "if", "index",
5504 "cyls", "heads", "secs", "trans",
5505 "media", "snapshot", "file",
5506 "cache", "format", NULL };
5508 if (check_params(buf, sizeof(buf), params, str) < 0) {
5509 fprintf(stderr, "qemu: unknown parameter '%s' in '%s'\n",
5510 buf, str);
5511 return -1;
5514 file[0] = 0;
5515 cyls = heads = secs = 0;
5516 bus_id = 0;
5517 unit_id = -1;
5518 translation = BIOS_ATA_TRANSLATION_AUTO;
5519 index = -1;
5520 cache = 1;
5522 if (machine->use_scsi) {
5523 type = IF_SCSI;
5524 max_devs = MAX_SCSI_DEVS;
5525 pstrcpy(devname, sizeof(devname), "scsi");
5526 } else {
5527 type = IF_IDE;
5528 max_devs = MAX_IDE_DEVS;
5529 pstrcpy(devname, sizeof(devname), "ide");
5531 media = MEDIA_DISK;
5533 /* extract parameters */
5535 if (get_param_value(buf, sizeof(buf), "bus", str)) {
5536 bus_id = strtol(buf, NULL, 0);
5537 if (bus_id < 0) {
5538 fprintf(stderr, "qemu: '%s' invalid bus id\n", str);
5539 return -1;
5543 if (get_param_value(buf, sizeof(buf), "unit", str)) {
5544 unit_id = strtol(buf, NULL, 0);
5545 if (unit_id < 0) {
5546 fprintf(stderr, "qemu: '%s' invalid unit id\n", str);
5547 return -1;
5551 if (get_param_value(buf, sizeof(buf), "if", str)) {
5552 pstrcpy(devname, sizeof(devname), buf);
5553 if (!strcmp(buf, "ide")) {
5554 type = IF_IDE;
5555 max_devs = MAX_IDE_DEVS;
5556 } else if (!strcmp(buf, "scsi")) {
5557 type = IF_SCSI;
5558 max_devs = MAX_SCSI_DEVS;
5559 } else if (!strcmp(buf, "floppy")) {
5560 type = IF_FLOPPY;
5561 max_devs = 0;
5562 } else if (!strcmp(buf, "pflash")) {
5563 type = IF_PFLASH;
5564 max_devs = 0;
5565 } else if (!strcmp(buf, "mtd")) {
5566 type = IF_MTD;
5567 max_devs = 0;
5568 } else if (!strcmp(buf, "sd")) {
5569 type = IF_SD;
5570 max_devs = 0;
5571 } else {
5572 fprintf(stderr, "qemu: '%s' unsupported bus type '%s'\n", str, buf);
5573 return -1;
5577 if (get_param_value(buf, sizeof(buf), "index", str)) {
5578 index = strtol(buf, NULL, 0);
5579 if (index < 0) {
5580 fprintf(stderr, "qemu: '%s' invalid index\n", str);
5581 return -1;
5585 if (get_param_value(buf, sizeof(buf), "cyls", str)) {
5586 cyls = strtol(buf, NULL, 0);
5589 if (get_param_value(buf, sizeof(buf), "heads", str)) {
5590 heads = strtol(buf, NULL, 0);
5593 if (get_param_value(buf, sizeof(buf), "secs", str)) {
5594 secs = strtol(buf, NULL, 0);
5597 if (cyls || heads || secs) {
5598 if (cyls < 1 || cyls > 16383) {
5599 fprintf(stderr, "qemu: '%s' invalid physical cyls number\n", str);
5600 return -1;
5602 if (heads < 1 || heads > 16) {
5603 fprintf(stderr, "qemu: '%s' invalid physical heads number\n", str);
5604 return -1;
5606 if (secs < 1 || secs > 63) {
5607 fprintf(stderr, "qemu: '%s' invalid physical secs number\n", str);
5608 return -1;
5612 if (get_param_value(buf, sizeof(buf), "trans", str)) {
5613 if (!cyls) {
5614 fprintf(stderr,
5615 "qemu: '%s' trans must be used with cyls,heads and secs\n",
5616 str);
5617 return -1;
5619 if (!strcmp(buf, "none"))
5620 translation = BIOS_ATA_TRANSLATION_NONE;
5621 else if (!strcmp(buf, "lba"))
5622 translation = BIOS_ATA_TRANSLATION_LBA;
5623 else if (!strcmp(buf, "auto"))
5624 translation = BIOS_ATA_TRANSLATION_AUTO;
5625 else {
5626 fprintf(stderr, "qemu: '%s' invalid translation type\n", str);
5627 return -1;
5631 if (get_param_value(buf, sizeof(buf), "media", str)) {
5632 if (!strcmp(buf, "disk")) {
5633 media = MEDIA_DISK;
5634 } else if (!strcmp(buf, "cdrom")) {
5635 if (cyls || secs || heads) {
5636 fprintf(stderr,
5637 "qemu: '%s' invalid physical CHS format\n", str);
5638 return -1;
5640 media = MEDIA_CDROM;
5641 } else {
5642 fprintf(stderr, "qemu: '%s' invalid media\n", str);
5643 return -1;
5647 if (get_param_value(buf, sizeof(buf), "snapshot", str)) {
5648 if (!strcmp(buf, "on"))
5649 snapshot = 1;
5650 else if (!strcmp(buf, "off"))
5651 snapshot = 0;
5652 else {
5653 fprintf(stderr, "qemu: '%s' invalid snapshot option\n", str);
5654 return -1;
5658 if (get_param_value(buf, sizeof(buf), "cache", str)) {
5659 if (!strcmp(buf, "off"))
5660 cache = 0;
5661 else if (!strcmp(buf, "on"))
5662 cache = 1;
5663 else {
5664 fprintf(stderr, "qemu: invalid cache option\n");
5665 return -1;
5669 if (get_param_value(buf, sizeof(buf), "format", str)) {
5670 if (strcmp(buf, "?") == 0) {
5671 fprintf(stderr, "qemu: Supported formats:");
5672 bdrv_iterate_format(bdrv_format_print, NULL);
5673 fprintf(stderr, "\n");
5674 return -1;
5676 drv = bdrv_find_format(buf);
5677 if (!drv) {
5678 fprintf(stderr, "qemu: '%s' invalid format\n", buf);
5679 return -1;
5683 if (arg->file == NULL)
5684 get_param_value(file, sizeof(file), "file", str);
5685 else
5686 pstrcpy(file, sizeof(file), arg->file);
5688 /* compute bus and unit according index */
5690 if (index != -1) {
5691 if (bus_id != 0 || unit_id != -1) {
5692 fprintf(stderr,
5693 "qemu: '%s' index cannot be used with bus and unit\n", str);
5694 return -1;
5696 if (max_devs == 0)
5698 unit_id = index;
5699 bus_id = 0;
5700 } else {
5701 unit_id = index % max_devs;
5702 bus_id = index / max_devs;
5706 /* if user doesn't specify a unit_id,
5707 * try to find the first free
5710 if (unit_id == -1) {
5711 unit_id = 0;
5712 while (drive_get_index(type, bus_id, unit_id) != -1) {
5713 unit_id++;
5714 if (max_devs && unit_id >= max_devs) {
5715 unit_id -= max_devs;
5716 bus_id++;
5721 /* check unit id */
5723 if (max_devs && unit_id >= max_devs) {
5724 fprintf(stderr, "qemu: '%s' unit %d too big (max is %d)\n",
5725 str, unit_id, max_devs - 1);
5726 return -1;
5730 * ignore multiple definitions
5733 if (drive_get_index(type, bus_id, unit_id) != -1)
5734 return 0;
5736 /* init */
5738 if (type == IF_IDE || type == IF_SCSI)
5739 mediastr = (media == MEDIA_CDROM) ? "-cd" : "-hd";
5740 if (max_devs)
5741 snprintf(buf, sizeof(buf), "%s%i%s%i",
5742 devname, bus_id, mediastr, unit_id);
5743 else
5744 snprintf(buf, sizeof(buf), "%s%s%i",
5745 devname, mediastr, unit_id);
5746 bdrv = bdrv_new(buf);
5747 drives_table[nb_drives].bdrv = bdrv;
5748 drives_table[nb_drives].type = type;
5749 drives_table[nb_drives].bus = bus_id;
5750 drives_table[nb_drives].unit = unit_id;
5751 nb_drives++;
5753 switch(type) {
5754 case IF_IDE:
5755 case IF_SCSI:
5756 switch(media) {
5757 case MEDIA_DISK:
5758 if (cyls != 0) {
5759 bdrv_set_geometry_hint(bdrv, cyls, heads, secs);
5760 bdrv_set_translation_hint(bdrv, translation);
5762 break;
5763 case MEDIA_CDROM:
5764 bdrv_set_type_hint(bdrv, BDRV_TYPE_CDROM);
5765 break;
5767 break;
5768 case IF_SD:
5769 /* FIXME: This isn't really a floppy, but it's a reasonable
5770 approximation. */
5771 case IF_FLOPPY:
5772 bdrv_set_type_hint(bdrv, BDRV_TYPE_FLOPPY);
5773 break;
5774 case IF_PFLASH:
5775 case IF_MTD:
5776 break;
5778 if (!file[0])
5779 return 0;
5780 bdrv_flags = 0;
5781 if (snapshot)
5782 bdrv_flags |= BDRV_O_SNAPSHOT;
5783 if (!cache)
5784 bdrv_flags |= BDRV_O_DIRECT;
5785 if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0 || qemu_key_check(bdrv, file)) {
5786 fprintf(stderr, "qemu: could not open disk image %s\n",
5787 file);
5788 return -1;
5790 return 0;
5793 /***********************************************************/
5794 /* USB devices */
5796 static USBPort *used_usb_ports;
5797 static USBPort *free_usb_ports;
5799 /* ??? Maybe change this to register a hub to keep track of the topology. */
5800 void qemu_register_usb_port(USBPort *port, void *opaque, int index,
5801 usb_attachfn attach)
5803 port->opaque = opaque;
5804 port->index = index;
5805 port->attach = attach;
5806 port->next = free_usb_ports;
5807 free_usb_ports = port;
5810 int usb_device_add_dev(USBDevice *dev)
5812 USBPort *port;
5814 /* Find a USB port to add the device to. */
5815 port = free_usb_ports;
5816 if (!port->next) {
5817 USBDevice *hub;
5819 /* Create a new hub and chain it on. */
5820 free_usb_ports = NULL;
5821 port->next = used_usb_ports;
5822 used_usb_ports = port;
5824 hub = usb_hub_init(VM_USB_HUB_SIZE);
5825 usb_attach(port, hub);
5826 port = free_usb_ports;
5829 free_usb_ports = port->next;
5830 port->next = used_usb_ports;
5831 used_usb_ports = port;
5832 usb_attach(port, dev);
5833 return 0;
5836 static int usb_device_add(const char *devname)
5838 const char *p;
5839 USBDevice *dev;
5841 if (!free_usb_ports)
5842 return -1;
5844 if (strstart(devname, "host:", &p)) {
5845 dev = usb_host_device_open(p);
5846 } else if (!strcmp(devname, "mouse")) {
5847 dev = usb_mouse_init();
5848 } else if (!strcmp(devname, "tablet")) {
5849 dev = usb_tablet_init();
5850 } else if (!strcmp(devname, "keyboard")) {
5851 dev = usb_keyboard_init();
5852 } else if (strstart(devname, "disk:", &p)) {
5853 dev = usb_msd_init(p);
5854 } else if (!strcmp(devname, "wacom-tablet")) {
5855 dev = usb_wacom_init();
5856 } else if (strstart(devname, "serial:", &p)) {
5857 dev = usb_serial_init(p);
5858 #ifdef CONFIG_BRLAPI
5859 } else if (!strcmp(devname, "braille")) {
5860 dev = usb_baum_init();
5861 #endif
5862 } else if (strstart(devname, "net:", &p)) {
5863 int nic = nb_nics;
5865 if (net_client_init("nic", p) < 0)
5866 return -1;
5867 nd_table[nic].model = "usb";
5868 dev = usb_net_init(&nd_table[nic]);
5869 } else {
5870 return -1;
5872 if (!dev)
5873 return -1;
5875 return usb_device_add_dev(dev);
5878 int usb_device_del_addr(int bus_num, int addr)
5880 USBPort *port;
5881 USBPort **lastp;
5882 USBDevice *dev;
5884 if (!used_usb_ports)
5885 return -1;
5887 if (bus_num != 0)
5888 return -1;
5890 lastp = &used_usb_ports;
5891 port = used_usb_ports;
5892 while (port && port->dev->addr != addr) {
5893 lastp = &port->next;
5894 port = port->next;
5897 if (!port)
5898 return -1;
5900 dev = port->dev;
5901 *lastp = port->next;
5902 usb_attach(port, NULL);
5903 dev->handle_destroy(dev);
5904 port->next = free_usb_ports;
5905 free_usb_ports = port;
5906 return 0;
5909 static int usb_device_del(const char *devname)
5911 int bus_num, addr;
5912 const char *p;
5914 if (strstart(devname, "host:", &p))
5915 return usb_host_device_close(p);
5917 if (!used_usb_ports)
5918 return -1;
5920 p = strchr(devname, '.');
5921 if (!p)
5922 return -1;
5923 bus_num = strtoul(devname, NULL, 0);
5924 addr = strtoul(p + 1, NULL, 0);
5926 return usb_device_del_addr(bus_num, addr);
5929 void do_usb_add(const char *devname)
5931 usb_device_add(devname);
5934 void do_usb_del(const char *devname)
5936 usb_device_del(devname);
5939 void usb_info(void)
5941 USBDevice *dev;
5942 USBPort *port;
5943 const char *speed_str;
5945 if (!usb_enabled) {
5946 term_printf("USB support not enabled\n");
5947 return;
5950 for (port = used_usb_ports; port; port = port->next) {
5951 dev = port->dev;
5952 if (!dev)
5953 continue;
5954 switch(dev->speed) {
5955 case USB_SPEED_LOW:
5956 speed_str = "1.5";
5957 break;
5958 case USB_SPEED_FULL:
5959 speed_str = "12";
5960 break;
5961 case USB_SPEED_HIGH:
5962 speed_str = "480";
5963 break;
5964 default:
5965 speed_str = "?";
5966 break;
5968 term_printf(" Device %d.%d, Speed %s Mb/s, Product %s\n",
5969 0, dev->addr, speed_str, dev->devname);
5973 /***********************************************************/
5974 /* PCMCIA/Cardbus */
5976 static struct pcmcia_socket_entry_s {
5977 struct pcmcia_socket_s *socket;
5978 struct pcmcia_socket_entry_s *next;
5979 } *pcmcia_sockets = 0;
5981 void pcmcia_socket_register(struct pcmcia_socket_s *socket)
5983 struct pcmcia_socket_entry_s *entry;
5985 entry = qemu_malloc(sizeof(struct pcmcia_socket_entry_s));
5986 entry->socket = socket;
5987 entry->next = pcmcia_sockets;
5988 pcmcia_sockets = entry;
5991 void pcmcia_socket_unregister(struct pcmcia_socket_s *socket)
5993 struct pcmcia_socket_entry_s *entry, **ptr;
5995 ptr = &pcmcia_sockets;
5996 for (entry = *ptr; entry; ptr = &entry->next, entry = *ptr)
5997 if (entry->socket == socket) {
5998 *ptr = entry->next;
5999 qemu_free(entry);
6003 void pcmcia_info(void)
6005 struct pcmcia_socket_entry_s *iter;
6006 if (!pcmcia_sockets)
6007 term_printf("No PCMCIA sockets\n");
6009 for (iter = pcmcia_sockets; iter; iter = iter->next)
6010 term_printf("%s: %s\n", iter->socket->slot_string,
6011 iter->socket->attached ? iter->socket->card_string :
6012 "Empty");
6015 /***********************************************************/
6016 /* dumb display */
6018 static void dumb_update(DisplayState *ds, int x, int y, int w, int h)
6022 static void dumb_resize(DisplayState *ds, int w, int h)
6026 static void dumb_refresh(DisplayState *ds)
6028 #if defined(CONFIG_SDL)
6029 vga_hw_update();
6030 #endif
6033 static void dumb_display_init(DisplayState *ds)
6035 ds->data = NULL;
6036 ds->linesize = 0;
6037 ds->depth = 0;
6038 ds->dpy_update = dumb_update;
6039 ds->dpy_resize = dumb_resize;
6040 ds->dpy_refresh = dumb_refresh;
6041 ds->gui_timer_interval = 500;
6042 ds->idle = 1;
6045 /***********************************************************/
6046 /* I/O handling */
6048 #define MAX_IO_HANDLERS 64
6050 typedef struct IOHandlerRecord {
6051 int fd;
6052 IOCanRWHandler *fd_read_poll;
6053 IOHandler *fd_read;
6054 IOHandler *fd_write;
6055 int deleted;
6056 void *opaque;
6057 /* temporary data */
6058 struct pollfd *ufd;
6059 struct IOHandlerRecord *next;
6060 } IOHandlerRecord;
6062 static IOHandlerRecord *first_io_handler;
6064 /* XXX: fd_read_poll should be suppressed, but an API change is
6065 necessary in the character devices to suppress fd_can_read(). */
6066 int qemu_set_fd_handler2(int fd,
6067 IOCanRWHandler *fd_read_poll,
6068 IOHandler *fd_read,
6069 IOHandler *fd_write,
6070 void *opaque)
6072 IOHandlerRecord **pioh, *ioh;
6074 if (!fd_read && !fd_write) {
6075 pioh = &first_io_handler;
6076 for(;;) {
6077 ioh = *pioh;
6078 if (ioh == NULL)
6079 break;
6080 if (ioh->fd == fd) {
6081 ioh->deleted = 1;
6082 break;
6084 pioh = &ioh->next;
6086 } else {
6087 for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
6088 if (ioh->fd == fd)
6089 goto found;
6091 ioh = qemu_mallocz(sizeof(IOHandlerRecord));
6092 if (!ioh)
6093 return -1;
6094 ioh->next = first_io_handler;
6095 first_io_handler = ioh;
6096 found:
6097 ioh->fd = fd;
6098 ioh->fd_read_poll = fd_read_poll;
6099 ioh->fd_read = fd_read;
6100 ioh->fd_write = fd_write;
6101 ioh->opaque = opaque;
6102 ioh->deleted = 0;
6104 return 0;
6107 int qemu_set_fd_handler(int fd,
6108 IOHandler *fd_read,
6109 IOHandler *fd_write,
6110 void *opaque)
6112 return qemu_set_fd_handler2(fd, NULL, fd_read, fd_write, opaque);
6115 /***********************************************************/
6116 /* Polling handling */
6118 typedef struct PollingEntry {
6119 PollingFunc *func;
6120 void *opaque;
6121 struct PollingEntry *next;
6122 } PollingEntry;
6124 static PollingEntry *first_polling_entry;
6126 int qemu_add_polling_cb(PollingFunc *func, void *opaque)
6128 PollingEntry **ppe, *pe;
6129 pe = qemu_mallocz(sizeof(PollingEntry));
6130 if (!pe)
6131 return -1;
6132 pe->func = func;
6133 pe->opaque = opaque;
6134 for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next);
6135 *ppe = pe;
6136 return 0;
6139 void qemu_del_polling_cb(PollingFunc *func, void *opaque)
6141 PollingEntry **ppe, *pe;
6142 for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next) {
6143 pe = *ppe;
6144 if (pe->func == func && pe->opaque == opaque) {
6145 *ppe = pe->next;
6146 qemu_free(pe);
6147 break;
6152 #ifdef _WIN32
6153 /***********************************************************/
6154 /* Wait objects support */
6155 typedef struct WaitObjects {
6156 int num;
6157 HANDLE events[MAXIMUM_WAIT_OBJECTS + 1];
6158 WaitObjectFunc *func[MAXIMUM_WAIT_OBJECTS + 1];
6159 void *opaque[MAXIMUM_WAIT_OBJECTS + 1];
6160 } WaitObjects;
6162 static WaitObjects wait_objects = {0};
6164 int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
6166 WaitObjects *w = &wait_objects;
6168 if (w->num >= MAXIMUM_WAIT_OBJECTS)
6169 return -1;
6170 w->events[w->num] = handle;
6171 w->func[w->num] = func;
6172 w->opaque[w->num] = opaque;
6173 w->num++;
6174 return 0;
6177 void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
6179 int i, found;
6180 WaitObjects *w = &wait_objects;
6182 found = 0;
6183 for (i = 0; i < w->num; i++) {
6184 if (w->events[i] == handle)
6185 found = 1;
6186 if (found) {
6187 w->events[i] = w->events[i + 1];
6188 w->func[i] = w->func[i + 1];
6189 w->opaque[i] = w->opaque[i + 1];
6192 if (found)
6193 w->num--;
6195 #endif
6197 /***********************************************************/
6198 /* savevm/loadvm support */
6200 #define IO_BUF_SIZE 32768
6202 struct QEMUFile {
6203 QEMUFilePutBufferFunc *put_buffer;
6204 QEMUFileGetBufferFunc *get_buffer;
6205 QEMUFileCloseFunc *close;
6206 QEMUFileRateLimit *rate_limit;
6207 void *opaque;
6209 int64_t buf_offset; /* start of buffer when writing, end of buffer
6210 when reading */
6211 int buf_index;
6212 int buf_size; /* 0 when writing */
6213 uint8_t buf[IO_BUF_SIZE];
6216 typedef struct QEMUFileFD
6218 int fd;
6219 QEMUFile *file;
6220 } QEMUFileFD;
6222 static void fd_put_notify(void *opaque)
6224 QEMUFileFD *s = opaque;
6226 /* Remove writable callback and do a put notify */
6227 qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
6228 qemu_file_put_notify(s->file);
6231 static void fd_put_buffer(void *opaque, const uint8_t *buf,
6232 int64_t pos, int size)
6234 QEMUFileFD *s = opaque;
6235 ssize_t len;
6237 do {
6238 len = write(s->fd, buf, size);
6239 } while (len == -1 && errno == EINTR);
6241 if (len == -1)
6242 len = -errno;
6244 /* When the fd becomes writable again, register a callback to do
6245 * a put notify */
6246 if (len == -EAGAIN)
6247 qemu_set_fd_handler2(s->fd, NULL, NULL, fd_put_notify, s);
6250 static int fd_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
6252 QEMUFileFD *s = opaque;
6253 ssize_t len;
6255 do {
6256 len = read(s->fd, buf, size);
6257 } while (len == -1 && errno == EINTR);
6259 if (len == -1)
6260 len = -errno;
6262 return len;
6265 static int fd_close(void *opaque)
6267 QEMUFileFD *s = opaque;
6268 qemu_free(s);
6269 return 0;
6272 QEMUFile *qemu_fopen_fd(int fd)
6274 QEMUFileFD *s = qemu_mallocz(sizeof(QEMUFileFD));
6276 if (s == NULL)
6277 return NULL;
6279 s->fd = fd;
6280 s->file = qemu_fopen_ops(s, fd_put_buffer, fd_get_buffer, fd_close, NULL);
6281 return s->file;
6284 typedef struct QEMUFileStdio
6286 FILE *outfile;
6287 } QEMUFileStdio;
6289 static void file_put_buffer(void *opaque, const uint8_t *buf,
6290 int64_t pos, int size)
6292 QEMUFileStdio *s = opaque;
6293 fseek(s->outfile, pos, SEEK_SET);
6294 fwrite(buf, 1, size, s->outfile);
6297 static int file_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
6299 QEMUFileStdio *s = opaque;
6300 fseek(s->outfile, pos, SEEK_SET);
6301 return fread(buf, 1, size, s->outfile);
6304 static int file_close(void *opaque)
6306 QEMUFileStdio *s = opaque;
6307 fclose(s->outfile);
6308 qemu_free(s);
6309 return 0;
6312 QEMUFile *qemu_fopen(const char *filename, const char *mode)
6314 QEMUFileStdio *s;
6316 s = qemu_mallocz(sizeof(QEMUFileStdio));
6317 if (!s)
6318 return NULL;
6320 s->outfile = fopen(filename, mode);
6321 if (!s->outfile)
6322 goto fail;
6324 if (!strcmp(mode, "wb"))
6325 return qemu_fopen_ops(s, file_put_buffer, NULL, file_close, NULL);
6326 else if (!strcmp(mode, "rb"))
6327 return qemu_fopen_ops(s, NULL, file_get_buffer, file_close, NULL);
6329 fail:
6330 if (s->outfile)
6331 fclose(s->outfile);
6332 qemu_free(s);
6333 return NULL;
6336 typedef struct QEMUFileBdrv
6338 BlockDriverState *bs;
6339 int64_t base_offset;
6340 } QEMUFileBdrv;
6342 static void bdrv_put_buffer(void *opaque, const uint8_t *buf,
6343 int64_t pos, int size)
6345 QEMUFileBdrv *s = opaque;
6346 bdrv_pwrite(s->bs, s->base_offset + pos, buf, size);
6349 static int bdrv_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
6351 QEMUFileBdrv *s = opaque;
6352 return bdrv_pread(s->bs, s->base_offset + pos, buf, size);
6355 static int bdrv_fclose(void *opaque)
6357 QEMUFileBdrv *s = opaque;
6358 qemu_free(s);
6359 return 0;
6362 static QEMUFile *qemu_fopen_bdrv(BlockDriverState *bs, int64_t offset, int is_writable)
6364 QEMUFileBdrv *s;
6366 s = qemu_mallocz(sizeof(QEMUFileBdrv));
6367 if (!s)
6368 return NULL;
6370 s->bs = bs;
6371 s->base_offset = offset;
6373 if (is_writable)
6374 return qemu_fopen_ops(s, bdrv_put_buffer, NULL, bdrv_fclose, NULL);
6376 return qemu_fopen_ops(s, NULL, bdrv_get_buffer, bdrv_fclose, NULL);
6379 QEMUFile *qemu_fopen_ops(void *opaque, QEMUFilePutBufferFunc *put_buffer,
6380 QEMUFileGetBufferFunc *get_buffer,
6381 QEMUFileCloseFunc *close,
6382 QEMUFileRateLimit *rate_limit)
6384 QEMUFile *f;
6386 f = qemu_mallocz(sizeof(QEMUFile));
6387 if (!f)
6388 return NULL;
6390 f->opaque = opaque;
6391 f->put_buffer = put_buffer;
6392 f->get_buffer = get_buffer;
6393 f->close = close;
6394 f->rate_limit = rate_limit;
6396 return f;
6399 void qemu_fflush(QEMUFile *f)
6401 if (!f->put_buffer)
6402 return;
6404 if (f->buf_index > 0) {
6405 f->put_buffer(f->opaque, f->buf, f->buf_offset, f->buf_index);
6406 f->buf_offset += f->buf_index;
6407 f->buf_index = 0;
6411 static void qemu_fill_buffer(QEMUFile *f)
6413 int len;
6415 if (!f->get_buffer)
6416 return;
6418 len = f->get_buffer(f->opaque, f->buf, f->buf_offset, IO_BUF_SIZE);
6419 if (len < 0)
6420 len = 0;
6422 f->buf_index = 0;
6423 f->buf_size = len;
6424 f->buf_offset += len;
6427 int qemu_fclose(QEMUFile *f)
6429 int ret = 0;
6430 qemu_fflush(f);
6431 if (f->close)
6432 ret = f->close(f->opaque);
6433 qemu_free(f);
6434 return ret;
6437 void qemu_file_put_notify(QEMUFile *f)
6439 f->put_buffer(f->opaque, NULL, 0, 0);
6442 void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size)
6444 int l;
6445 while (size > 0) {
6446 l = IO_BUF_SIZE - f->buf_index;
6447 if (l > size)
6448 l = size;
6449 memcpy(f->buf + f->buf_index, buf, l);
6450 f->buf_index += l;
6451 buf += l;
6452 size -= l;
6453 if (f->buf_index >= IO_BUF_SIZE)
6454 qemu_fflush(f);
6458 void qemu_put_byte(QEMUFile *f, int v)
6460 f->buf[f->buf_index++] = v;
6461 if (f->buf_index >= IO_BUF_SIZE)
6462 qemu_fflush(f);
6465 int qemu_get_buffer(QEMUFile *f, uint8_t *buf, int size1)
6467 int size, l;
6469 size = size1;
6470 while (size > 0) {
6471 l = f->buf_size - f->buf_index;
6472 if (l == 0) {
6473 qemu_fill_buffer(f);
6474 l = f->buf_size - f->buf_index;
6475 if (l == 0)
6476 break;
6478 if (l > size)
6479 l = size;
6480 memcpy(buf, f->buf + f->buf_index, l);
6481 f->buf_index += l;
6482 buf += l;
6483 size -= l;
6485 return size1 - size;
6488 int qemu_get_byte(QEMUFile *f)
6490 if (f->buf_index >= f->buf_size) {
6491 qemu_fill_buffer(f);
6492 if (f->buf_index >= f->buf_size)
6493 return 0;
6495 return f->buf[f->buf_index++];
6498 int64_t qemu_ftell(QEMUFile *f)
6500 return f->buf_offset - f->buf_size + f->buf_index;
6503 int64_t qemu_fseek(QEMUFile *f, int64_t pos, int whence)
6505 if (whence == SEEK_SET) {
6506 /* nothing to do */
6507 } else if (whence == SEEK_CUR) {
6508 pos += qemu_ftell(f);
6509 } else {
6510 /* SEEK_END not supported */
6511 return -1;
6513 if (f->put_buffer) {
6514 qemu_fflush(f);
6515 f->buf_offset = pos;
6516 } else {
6517 f->buf_offset = pos;
6518 f->buf_index = 0;
6519 f->buf_size = 0;
6521 return pos;
6524 int qemu_file_rate_limit(QEMUFile *f)
6526 if (f->rate_limit)
6527 return f->rate_limit(f->opaque);
6529 return 0;
6532 void qemu_put_be16(QEMUFile *f, unsigned int v)
6534 qemu_put_byte(f, v >> 8);
6535 qemu_put_byte(f, v);
6538 void qemu_put_be32(QEMUFile *f, unsigned int v)
6540 qemu_put_byte(f, v >> 24);
6541 qemu_put_byte(f, v >> 16);
6542 qemu_put_byte(f, v >> 8);
6543 qemu_put_byte(f, v);
6546 void qemu_put_be64(QEMUFile *f, uint64_t v)
6548 qemu_put_be32(f, v >> 32);
6549 qemu_put_be32(f, v);
6552 unsigned int qemu_get_be16(QEMUFile *f)
6554 unsigned int v;
6555 v = qemu_get_byte(f) << 8;
6556 v |= qemu_get_byte(f);
6557 return v;
6560 unsigned int qemu_get_be32(QEMUFile *f)
6562 unsigned int v;
6563 v = qemu_get_byte(f) << 24;
6564 v |= qemu_get_byte(f) << 16;
6565 v |= qemu_get_byte(f) << 8;
6566 v |= qemu_get_byte(f);
6567 return v;
6570 uint64_t qemu_get_be64(QEMUFile *f)
6572 uint64_t v;
6573 v = (uint64_t)qemu_get_be32(f) << 32;
6574 v |= qemu_get_be32(f);
6575 return v;
6578 typedef struct SaveStateEntry {
6579 char idstr[256];
6580 int instance_id;
6581 int version_id;
6582 SaveStateHandler *save_state;
6583 LoadStateHandler *load_state;
6584 void *opaque;
6585 struct SaveStateEntry *next;
6586 } SaveStateEntry;
6588 static SaveStateEntry *first_se;
6590 /* TODO: Individual devices generally have very little idea about the rest
6591 of the system, so instance_id should be removed/replaced.
6592 Meanwhile pass -1 as instance_id if you do not already have a clearly
6593 distinguishing id for all instances of your device class. */
6594 int register_savevm(const char *idstr,
6595 int instance_id,
6596 int version_id,
6597 SaveStateHandler *save_state,
6598 LoadStateHandler *load_state,
6599 void *opaque)
6601 SaveStateEntry *se, **pse;
6603 se = qemu_malloc(sizeof(SaveStateEntry));
6604 if (!se)
6605 return -1;
6606 pstrcpy(se->idstr, sizeof(se->idstr), idstr);
6607 se->instance_id = (instance_id == -1) ? 0 : instance_id;
6608 se->version_id = version_id;
6609 se->save_state = save_state;
6610 se->load_state = load_state;
6611 se->opaque = opaque;
6612 se->next = NULL;
6614 /* add at the end of list */
6615 pse = &first_se;
6616 while (*pse != NULL) {
6617 if (instance_id == -1
6618 && strcmp(se->idstr, (*pse)->idstr) == 0
6619 && se->instance_id <= (*pse)->instance_id)
6620 se->instance_id = (*pse)->instance_id + 1;
6621 pse = &(*pse)->next;
6623 *pse = se;
6624 return 0;
6627 #define QEMU_VM_FILE_MAGIC 0x5145564d
6628 #define QEMU_VM_FILE_VERSION 0x00000002
6630 static int qemu_savevm_state(QEMUFile *f)
6632 SaveStateEntry *se;
6633 int len, ret;
6634 int64_t cur_pos, len_pos, total_len_pos;
6636 qemu_put_be32(f, QEMU_VM_FILE_MAGIC);
6637 qemu_put_be32(f, QEMU_VM_FILE_VERSION);
6638 total_len_pos = qemu_ftell(f);
6639 qemu_put_be64(f, 0); /* total size */
6641 for(se = first_se; se != NULL; se = se->next) {
6642 if (se->save_state == NULL)
6643 /* this one has a loader only, for backwards compatibility */
6644 continue;
6646 /* ID string */
6647 len = strlen(se->idstr);
6648 qemu_put_byte(f, len);
6649 qemu_put_buffer(f, (uint8_t *)se->idstr, len);
6651 qemu_put_be32(f, se->instance_id);
6652 qemu_put_be32(f, se->version_id);
6654 /* record size: filled later */
6655 len_pos = qemu_ftell(f);
6656 qemu_put_be32(f, 0);
6657 se->save_state(f, se->opaque);
6659 /* fill record size */
6660 cur_pos = qemu_ftell(f);
6661 len = cur_pos - len_pos - 4;
6662 qemu_fseek(f, len_pos, SEEK_SET);
6663 qemu_put_be32(f, len);
6664 qemu_fseek(f, cur_pos, SEEK_SET);
6666 cur_pos = qemu_ftell(f);
6667 qemu_fseek(f, total_len_pos, SEEK_SET);
6668 qemu_put_be64(f, cur_pos - total_len_pos - 8);
6669 qemu_fseek(f, cur_pos, SEEK_SET);
6671 ret = 0;
6672 return ret;
6675 static SaveStateEntry *find_se(const char *idstr, int instance_id)
6677 SaveStateEntry *se;
6679 for(se = first_se; se != NULL; se = se->next) {
6680 if (!strcmp(se->idstr, idstr) &&
6681 instance_id == se->instance_id)
6682 return se;
6684 return NULL;
6687 static int qemu_loadvm_state(QEMUFile *f)
6689 SaveStateEntry *se;
6690 int len, ret, instance_id, record_len, version_id;
6691 int64_t total_len, end_pos, cur_pos;
6692 unsigned int v;
6693 char idstr[256];
6695 v = qemu_get_be32(f);
6696 if (v != QEMU_VM_FILE_MAGIC)
6697 goto fail;
6698 v = qemu_get_be32(f);
6699 if (v != QEMU_VM_FILE_VERSION) {
6700 fail:
6701 ret = -1;
6702 goto the_end;
6704 total_len = qemu_get_be64(f);
6705 end_pos = total_len + qemu_ftell(f);
6706 for(;;) {
6707 if (qemu_ftell(f) >= end_pos)
6708 break;
6709 len = qemu_get_byte(f);
6710 qemu_get_buffer(f, (uint8_t *)idstr, len);
6711 idstr[len] = '\0';
6712 instance_id = qemu_get_be32(f);
6713 version_id = qemu_get_be32(f);
6714 record_len = qemu_get_be32(f);
6715 #if 0
6716 printf("idstr=%s instance=0x%x version=%d len=%d\n",
6717 idstr, instance_id, version_id, record_len);
6718 #endif
6719 cur_pos = qemu_ftell(f);
6720 se = find_se(idstr, instance_id);
6721 if (!se) {
6722 fprintf(stderr, "qemu: warning: instance 0x%x of device '%s' not present in current VM\n",
6723 instance_id, idstr);
6724 } else {
6725 ret = se->load_state(f, se->opaque, version_id);
6726 if (ret < 0) {
6727 fprintf(stderr, "qemu: warning: error while loading state for instance 0x%x of device '%s'\n",
6728 instance_id, idstr);
6731 /* always seek to exact end of record */
6732 qemu_fseek(f, cur_pos + record_len, SEEK_SET);
6734 ret = 0;
6735 the_end:
6736 return ret;
6739 /* device can contain snapshots */
6740 static int bdrv_can_snapshot(BlockDriverState *bs)
6742 return (bs &&
6743 !bdrv_is_removable(bs) &&
6744 !bdrv_is_read_only(bs));
6747 /* device must be snapshots in order to have a reliable snapshot */
6748 static int bdrv_has_snapshot(BlockDriverState *bs)
6750 return (bs &&
6751 !bdrv_is_removable(bs) &&
6752 !bdrv_is_read_only(bs));
6755 static BlockDriverState *get_bs_snapshots(void)
6757 BlockDriverState *bs;
6758 int i;
6760 if (bs_snapshots)
6761 return bs_snapshots;
6762 for(i = 0; i <= nb_drives; i++) {
6763 bs = drives_table[i].bdrv;
6764 if (bdrv_can_snapshot(bs))
6765 goto ok;
6767 return NULL;
6769 bs_snapshots = bs;
6770 return bs;
6773 static int bdrv_snapshot_find(BlockDriverState *bs, QEMUSnapshotInfo *sn_info,
6774 const char *name)
6776 QEMUSnapshotInfo *sn_tab, *sn;
6777 int nb_sns, i, ret;
6779 ret = -ENOENT;
6780 nb_sns = bdrv_snapshot_list(bs, &sn_tab);
6781 if (nb_sns < 0)
6782 return ret;
6783 for(i = 0; i < nb_sns; i++) {
6784 sn = &sn_tab[i];
6785 if (!strcmp(sn->id_str, name) || !strcmp(sn->name, name)) {
6786 *sn_info = *sn;
6787 ret = 0;
6788 break;
6791 qemu_free(sn_tab);
6792 return ret;
6795 void do_savevm(const char *name)
6797 BlockDriverState *bs, *bs1;
6798 QEMUSnapshotInfo sn1, *sn = &sn1, old_sn1, *old_sn = &old_sn1;
6799 int must_delete, ret, i;
6800 BlockDriverInfo bdi1, *bdi = &bdi1;
6801 QEMUFile *f;
6802 int saved_vm_running;
6803 #ifdef _WIN32
6804 struct _timeb tb;
6805 #else
6806 struct timeval tv;
6807 #endif
6809 bs = get_bs_snapshots();
6810 if (!bs) {
6811 term_printf("No block device can accept snapshots\n");
6812 return;
6815 /* ??? Should this occur after vm_stop? */
6816 qemu_aio_flush();
6818 saved_vm_running = vm_running;
6819 vm_stop(0);
6821 must_delete = 0;
6822 if (name) {
6823 ret = bdrv_snapshot_find(bs, old_sn, name);
6824 if (ret >= 0) {
6825 must_delete = 1;
6828 memset(sn, 0, sizeof(*sn));
6829 if (must_delete) {
6830 pstrcpy(sn->name, sizeof(sn->name), old_sn->name);
6831 pstrcpy(sn->id_str, sizeof(sn->id_str), old_sn->id_str);
6832 } else {
6833 if (name)
6834 pstrcpy(sn->name, sizeof(sn->name), name);
6837 /* fill auxiliary fields */
6838 #ifdef _WIN32
6839 _ftime(&tb);
6840 sn->date_sec = tb.time;
6841 sn->date_nsec = tb.millitm * 1000000;
6842 #else
6843 gettimeofday(&tv, NULL);
6844 sn->date_sec = tv.tv_sec;
6845 sn->date_nsec = tv.tv_usec * 1000;
6846 #endif
6847 sn->vm_clock_nsec = qemu_get_clock(vm_clock);
6849 if (bdrv_get_info(bs, bdi) < 0 || bdi->vm_state_offset <= 0) {
6850 term_printf("Device %s does not support VM state snapshots\n",
6851 bdrv_get_device_name(bs));
6852 goto the_end;
6855 /* save the VM state */
6856 f = qemu_fopen_bdrv(bs, bdi->vm_state_offset, 1);
6857 if (!f) {
6858 term_printf("Could not open VM state file\n");
6859 goto the_end;
6861 ret = qemu_savevm_state(f);
6862 sn->vm_state_size = qemu_ftell(f);
6863 qemu_fclose(f);
6864 if (ret < 0) {
6865 term_printf("Error %d while writing VM\n", ret);
6866 goto the_end;
6869 /* create the snapshots */
6871 for(i = 0; i < nb_drives; i++) {
6872 bs1 = drives_table[i].bdrv;
6873 if (bdrv_has_snapshot(bs1)) {
6874 if (must_delete) {
6875 ret = bdrv_snapshot_delete(bs1, old_sn->id_str);
6876 if (ret < 0) {
6877 term_printf("Error while deleting snapshot on '%s'\n",
6878 bdrv_get_device_name(bs1));
6881 ret = bdrv_snapshot_create(bs1, sn);
6882 if (ret < 0) {
6883 term_printf("Error while creating snapshot on '%s'\n",
6884 bdrv_get_device_name(bs1));
6889 the_end:
6890 if (saved_vm_running)
6891 vm_start();
6894 void do_loadvm(const char *name)
6896 BlockDriverState *bs, *bs1;
6897 BlockDriverInfo bdi1, *bdi = &bdi1;
6898 QEMUFile *f;
6899 int i, ret;
6900 int saved_vm_running;
6902 bs = get_bs_snapshots();
6903 if (!bs) {
6904 term_printf("No block device supports snapshots\n");
6905 return;
6908 /* Flush all IO requests so they don't interfere with the new state. */
6909 qemu_aio_flush();
6911 saved_vm_running = vm_running;
6912 vm_stop(0);
6914 for(i = 0; i <= nb_drives; i++) {
6915 bs1 = drives_table[i].bdrv;
6916 if (bdrv_has_snapshot(bs1)) {
6917 ret = bdrv_snapshot_goto(bs1, name);
6918 if (ret < 0) {
6919 if (bs != bs1)
6920 term_printf("Warning: ");
6921 switch(ret) {
6922 case -ENOTSUP:
6923 term_printf("Snapshots not supported on device '%s'\n",
6924 bdrv_get_device_name(bs1));
6925 break;
6926 case -ENOENT:
6927 term_printf("Could not find snapshot '%s' on device '%s'\n",
6928 name, bdrv_get_device_name(bs1));
6929 break;
6930 default:
6931 term_printf("Error %d while activating snapshot on '%s'\n",
6932 ret, bdrv_get_device_name(bs1));
6933 break;
6935 /* fatal on snapshot block device */
6936 if (bs == bs1)
6937 goto the_end;
6942 if (bdrv_get_info(bs, bdi) < 0 || bdi->vm_state_offset <= 0) {
6943 term_printf("Device %s does not support VM state snapshots\n",
6944 bdrv_get_device_name(bs));
6945 return;
6948 /* restore the VM state */
6949 f = qemu_fopen_bdrv(bs, bdi->vm_state_offset, 0);
6950 if (!f) {
6951 term_printf("Could not open VM state file\n");
6952 goto the_end;
6954 ret = qemu_loadvm_state(f);
6955 qemu_fclose(f);
6956 if (ret < 0) {
6957 term_printf("Error %d while loading VM state\n", ret);
6959 the_end:
6960 if (saved_vm_running)
6961 vm_start();
6964 void do_delvm(const char *name)
6966 BlockDriverState *bs, *bs1;
6967 int i, ret;
6969 bs = get_bs_snapshots();
6970 if (!bs) {
6971 term_printf("No block device supports snapshots\n");
6972 return;
6975 for(i = 0; i <= nb_drives; i++) {
6976 bs1 = drives_table[i].bdrv;
6977 if (bdrv_has_snapshot(bs1)) {
6978 ret = bdrv_snapshot_delete(bs1, name);
6979 if (ret < 0) {
6980 if (ret == -ENOTSUP)
6981 term_printf("Snapshots not supported on device '%s'\n",
6982 bdrv_get_device_name(bs1));
6983 else
6984 term_printf("Error %d while deleting snapshot on '%s'\n",
6985 ret, bdrv_get_device_name(bs1));
6991 void do_info_snapshots(void)
6993 BlockDriverState *bs, *bs1;
6994 QEMUSnapshotInfo *sn_tab, *sn;
6995 int nb_sns, i;
6996 char buf[256];
6998 bs = get_bs_snapshots();
6999 if (!bs) {
7000 term_printf("No available block device supports snapshots\n");
7001 return;
7003 term_printf("Snapshot devices:");
7004 for(i = 0; i <= nb_drives; i++) {
7005 bs1 = drives_table[i].bdrv;
7006 if (bdrv_has_snapshot(bs1)) {
7007 if (bs == bs1)
7008 term_printf(" %s", bdrv_get_device_name(bs1));
7011 term_printf("\n");
7013 nb_sns = bdrv_snapshot_list(bs, &sn_tab);
7014 if (nb_sns < 0) {
7015 term_printf("bdrv_snapshot_list: error %d\n", nb_sns);
7016 return;
7018 term_printf("Snapshot list (from %s):\n", bdrv_get_device_name(bs));
7019 term_printf("%s\n", bdrv_snapshot_dump(buf, sizeof(buf), NULL));
7020 for(i = 0; i < nb_sns; i++) {
7021 sn = &sn_tab[i];
7022 term_printf("%s\n", bdrv_snapshot_dump(buf, sizeof(buf), sn));
7024 qemu_free(sn_tab);
7027 /***********************************************************/
7028 /* ram save/restore */
7030 static int ram_get_page(QEMUFile *f, uint8_t *buf, int len)
7032 int v;
7034 v = qemu_get_byte(f);
7035 switch(v) {
7036 case 0:
7037 if (qemu_get_buffer(f, buf, len) != len)
7038 return -EIO;
7039 break;
7040 case 1:
7041 v = qemu_get_byte(f);
7042 memset(buf, v, len);
7043 break;
7044 default:
7045 return -EINVAL;
7047 return 0;
7050 static int ram_load_v1(QEMUFile *f, void *opaque)
7052 int ret;
7053 ram_addr_t i;
7055 if (qemu_get_be32(f) != phys_ram_size)
7056 return -EINVAL;
7057 for(i = 0; i < phys_ram_size; i+= TARGET_PAGE_SIZE) {
7058 ret = ram_get_page(f, phys_ram_base + i, TARGET_PAGE_SIZE);
7059 if (ret)
7060 return ret;
7062 return 0;
7065 #define BDRV_HASH_BLOCK_SIZE 1024
7066 #define IOBUF_SIZE 4096
7067 #define RAM_CBLOCK_MAGIC 0xfabe
7069 typedef struct RamCompressState {
7070 z_stream zstream;
7071 QEMUFile *f;
7072 uint8_t buf[IOBUF_SIZE];
7073 } RamCompressState;
7075 static int ram_compress_open(RamCompressState *s, QEMUFile *f)
7077 int ret;
7078 memset(s, 0, sizeof(*s));
7079 s->f = f;
7080 ret = deflateInit2(&s->zstream, 1,
7081 Z_DEFLATED, 15,
7082 9, Z_DEFAULT_STRATEGY);
7083 if (ret != Z_OK)
7084 return -1;
7085 s->zstream.avail_out = IOBUF_SIZE;
7086 s->zstream.next_out = s->buf;
7087 return 0;
7090 static void ram_put_cblock(RamCompressState *s, const uint8_t *buf, int len)
7092 qemu_put_be16(s->f, RAM_CBLOCK_MAGIC);
7093 qemu_put_be16(s->f, len);
7094 qemu_put_buffer(s->f, buf, len);
7097 static int ram_compress_buf(RamCompressState *s, const uint8_t *buf, int len)
7099 int ret;
7101 s->zstream.avail_in = len;
7102 s->zstream.next_in = (uint8_t *)buf;
7103 while (s->zstream.avail_in > 0) {
7104 ret = deflate(&s->zstream, Z_NO_FLUSH);
7105 if (ret != Z_OK)
7106 return -1;
7107 if (s->zstream.avail_out == 0) {
7108 ram_put_cblock(s, s->buf, IOBUF_SIZE);
7109 s->zstream.avail_out = IOBUF_SIZE;
7110 s->zstream.next_out = s->buf;
7113 return 0;
7116 static void ram_compress_close(RamCompressState *s)
7118 int len, ret;
7120 /* compress last bytes */
7121 for(;;) {
7122 ret = deflate(&s->zstream, Z_FINISH);
7123 if (ret == Z_OK || ret == Z_STREAM_END) {
7124 len = IOBUF_SIZE - s->zstream.avail_out;
7125 if (len > 0) {
7126 ram_put_cblock(s, s->buf, len);
7128 s->zstream.avail_out = IOBUF_SIZE;
7129 s->zstream.next_out = s->buf;
7130 if (ret == Z_STREAM_END)
7131 break;
7132 } else {
7133 goto fail;
7136 fail:
7137 deflateEnd(&s->zstream);
7140 typedef struct RamDecompressState {
7141 z_stream zstream;
7142 QEMUFile *f;
7143 uint8_t buf[IOBUF_SIZE];
7144 } RamDecompressState;
7146 static int ram_decompress_open(RamDecompressState *s, QEMUFile *f)
7148 int ret;
7149 memset(s, 0, sizeof(*s));
7150 s->f = f;
7151 ret = inflateInit(&s->zstream);
7152 if (ret != Z_OK)
7153 return -1;
7154 return 0;
7157 static int ram_decompress_buf(RamDecompressState *s, uint8_t *buf, int len)
7159 int ret, clen;
7161 s->zstream.avail_out = len;
7162 s->zstream.next_out = buf;
7163 while (s->zstream.avail_out > 0) {
7164 if (s->zstream.avail_in == 0) {
7165 if (qemu_get_be16(s->f) != RAM_CBLOCK_MAGIC)
7166 return -1;
7167 clen = qemu_get_be16(s->f);
7168 if (clen > IOBUF_SIZE)
7169 return -1;
7170 qemu_get_buffer(s->f, s->buf, clen);
7171 s->zstream.avail_in = clen;
7172 s->zstream.next_in = s->buf;
7174 ret = inflate(&s->zstream, Z_PARTIAL_FLUSH);
7175 if (ret != Z_OK && ret != Z_STREAM_END) {
7176 return -1;
7179 return 0;
7182 static void ram_decompress_close(RamDecompressState *s)
7184 inflateEnd(&s->zstream);
7187 static void ram_save(QEMUFile *f, void *opaque)
7189 ram_addr_t i;
7190 RamCompressState s1, *s = &s1;
7191 uint8_t buf[10];
7193 qemu_put_be32(f, phys_ram_size);
7194 if (ram_compress_open(s, f) < 0)
7195 return;
7196 for(i = 0; i < phys_ram_size; i+= BDRV_HASH_BLOCK_SIZE) {
7197 #if 0
7198 if (tight_savevm_enabled) {
7199 int64_t sector_num;
7200 int j;
7202 /* find if the memory block is available on a virtual
7203 block device */
7204 sector_num = -1;
7205 for(j = 0; j < nb_drives; j++) {
7206 sector_num = bdrv_hash_find(drives_table[j].bdrv,
7207 phys_ram_base + i,
7208 BDRV_HASH_BLOCK_SIZE);
7209 if (sector_num >= 0)
7210 break;
7212 if (j == nb_drives)
7213 goto normal_compress;
7214 buf[0] = 1;
7215 buf[1] = j;
7216 cpu_to_be64wu((uint64_t *)(buf + 2), sector_num);
7217 ram_compress_buf(s, buf, 10);
7218 } else
7219 #endif
7221 // normal_compress:
7222 buf[0] = 0;
7223 ram_compress_buf(s, buf, 1);
7224 ram_compress_buf(s, phys_ram_base + i, BDRV_HASH_BLOCK_SIZE);
7227 ram_compress_close(s);
7230 static int ram_load(QEMUFile *f, void *opaque, int version_id)
7232 RamDecompressState s1, *s = &s1;
7233 uint8_t buf[10];
7234 ram_addr_t i;
7236 if (version_id == 1)
7237 return ram_load_v1(f, opaque);
7238 if (version_id != 2)
7239 return -EINVAL;
7240 if (qemu_get_be32(f) != phys_ram_size)
7241 return -EINVAL;
7242 if (ram_decompress_open(s, f) < 0)
7243 return -EINVAL;
7244 for(i = 0; i < phys_ram_size; i+= BDRV_HASH_BLOCK_SIZE) {
7245 if (ram_decompress_buf(s, buf, 1) < 0) {
7246 fprintf(stderr, "Error while reading ram block header\n");
7247 goto error;
7249 if (buf[0] == 0) {
7250 if (ram_decompress_buf(s, phys_ram_base + i, BDRV_HASH_BLOCK_SIZE) < 0) {
7251 fprintf(stderr, "Error while reading ram block address=0x%08" PRIx64, (uint64_t)i);
7252 goto error;
7254 } else
7255 #if 0
7256 if (buf[0] == 1) {
7257 int bs_index;
7258 int64_t sector_num;
7260 ram_decompress_buf(s, buf + 1, 9);
7261 bs_index = buf[1];
7262 sector_num = be64_to_cpupu((const uint64_t *)(buf + 2));
7263 if (bs_index >= nb_drives) {
7264 fprintf(stderr, "Invalid block device index %d\n", bs_index);
7265 goto error;
7267 if (bdrv_read(drives_table[bs_index].bdrv, sector_num,
7268 phys_ram_base + i,
7269 BDRV_HASH_BLOCK_SIZE / 512) < 0) {
7270 fprintf(stderr, "Error while reading sector %d:%" PRId64 "\n",
7271 bs_index, sector_num);
7272 goto error;
7274 } else
7275 #endif
7277 error:
7278 printf("Error block header\n");
7279 return -EINVAL;
7282 ram_decompress_close(s);
7283 return 0;
7286 /***********************************************************/
7287 /* bottom halves (can be seen as timers which expire ASAP) */
7289 struct QEMUBH {
7290 QEMUBHFunc *cb;
7291 void *opaque;
7292 int scheduled;
7293 QEMUBH *next;
7296 static QEMUBH *first_bh = NULL;
7298 QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque)
7300 QEMUBH *bh;
7301 bh = qemu_mallocz(sizeof(QEMUBH));
7302 if (!bh)
7303 return NULL;
7304 bh->cb = cb;
7305 bh->opaque = opaque;
7306 return bh;
7309 int qemu_bh_poll(void)
7311 QEMUBH *bh, **pbh;
7312 int ret;
7314 ret = 0;
7315 for(;;) {
7316 pbh = &first_bh;
7317 bh = *pbh;
7318 if (!bh)
7319 break;
7320 ret = 1;
7321 *pbh = bh->next;
7322 bh->scheduled = 0;
7323 bh->cb(bh->opaque);
7325 return ret;
7328 void qemu_bh_schedule(QEMUBH *bh)
7330 CPUState *env = cpu_single_env;
7331 if (bh->scheduled)
7332 return;
7333 bh->scheduled = 1;
7334 bh->next = first_bh;
7335 first_bh = bh;
7337 /* stop the currently executing CPU to execute the BH ASAP */
7338 if (env) {
7339 cpu_interrupt(env, CPU_INTERRUPT_EXIT);
7343 void qemu_bh_cancel(QEMUBH *bh)
7345 QEMUBH **pbh;
7346 if (bh->scheduled) {
7347 pbh = &first_bh;
7348 while (*pbh != bh)
7349 pbh = &(*pbh)->next;
7350 *pbh = bh->next;
7351 bh->scheduled = 0;
7355 void qemu_bh_delete(QEMUBH *bh)
7357 qemu_bh_cancel(bh);
7358 qemu_free(bh);
7361 /***********************************************************/
7362 /* machine registration */
7364 static QEMUMachine *first_machine = NULL;
7366 int qemu_register_machine(QEMUMachine *m)
7368 QEMUMachine **pm;
7369 pm = &first_machine;
7370 while (*pm != NULL)
7371 pm = &(*pm)->next;
7372 m->next = NULL;
7373 *pm = m;
7374 return 0;
7377 static QEMUMachine *find_machine(const char *name)
7379 QEMUMachine *m;
7381 for(m = first_machine; m != NULL; m = m->next) {
7382 if (!strcmp(m->name, name))
7383 return m;
7385 return NULL;
7388 /***********************************************************/
7389 /* main execution loop */
7391 static void gui_update(void *opaque)
7393 DisplayState *ds = opaque;
7394 ds->dpy_refresh(ds);
7395 qemu_mod_timer(ds->gui_timer,
7396 (ds->gui_timer_interval ?
7397 ds->gui_timer_interval :
7398 GUI_REFRESH_INTERVAL)
7399 + qemu_get_clock(rt_clock));
7402 struct vm_change_state_entry {
7403 VMChangeStateHandler *cb;
7404 void *opaque;
7405 LIST_ENTRY (vm_change_state_entry) entries;
7408 static LIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head;
7410 VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
7411 void *opaque)
7413 VMChangeStateEntry *e;
7415 e = qemu_mallocz(sizeof (*e));
7416 if (!e)
7417 return NULL;
7419 e->cb = cb;
7420 e->opaque = opaque;
7421 LIST_INSERT_HEAD(&vm_change_state_head, e, entries);
7422 return e;
7425 void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
7427 LIST_REMOVE (e, entries);
7428 qemu_free (e);
7431 static void vm_state_notify(int running)
7433 VMChangeStateEntry *e;
7435 for (e = vm_change_state_head.lh_first; e; e = e->entries.le_next) {
7436 e->cb(e->opaque, running);
7440 /* XXX: support several handlers */
7441 static VMStopHandler *vm_stop_cb;
7442 static void *vm_stop_opaque;
7444 int qemu_add_vm_stop_handler(VMStopHandler *cb, void *opaque)
7446 vm_stop_cb = cb;
7447 vm_stop_opaque = opaque;
7448 return 0;
7451 void qemu_del_vm_stop_handler(VMStopHandler *cb, void *opaque)
7453 vm_stop_cb = NULL;
7456 void vm_start(void)
7458 if (!vm_running) {
7459 cpu_enable_ticks();
7460 vm_running = 1;
7461 vm_state_notify(1);
7462 qemu_rearm_alarm_timer(alarm_timer);
7466 void vm_stop(int reason)
7468 if (vm_running) {
7469 cpu_disable_ticks();
7470 vm_running = 0;
7471 if (reason != 0) {
7472 if (vm_stop_cb) {
7473 vm_stop_cb(vm_stop_opaque, reason);
7476 vm_state_notify(0);
7480 /* reset/shutdown handler */
7482 typedef struct QEMUResetEntry {
7483 QEMUResetHandler *func;
7484 void *opaque;
7485 struct QEMUResetEntry *next;
7486 } QEMUResetEntry;
7488 static QEMUResetEntry *first_reset_entry;
7489 static int reset_requested;
7490 static int shutdown_requested;
7491 static int powerdown_requested;
7493 int qemu_shutdown_requested(void)
7495 int r = shutdown_requested;
7496 shutdown_requested = 0;
7497 return r;
7500 int qemu_reset_requested(void)
7502 int r = reset_requested;
7503 reset_requested = 0;
7504 return r;
7507 int qemu_powerdown_requested(void)
7509 int r = powerdown_requested;
7510 powerdown_requested = 0;
7511 return r;
7514 void qemu_register_reset(QEMUResetHandler *func, void *opaque)
7516 QEMUResetEntry **pre, *re;
7518 pre = &first_reset_entry;
7519 while (*pre != NULL)
7520 pre = &(*pre)->next;
7521 re = qemu_mallocz(sizeof(QEMUResetEntry));
7522 re->func = func;
7523 re->opaque = opaque;
7524 re->next = NULL;
7525 *pre = re;
7528 void qemu_system_reset(void)
7530 QEMUResetEntry *re;
7532 /* reset all devices */
7533 for(re = first_reset_entry; re != NULL; re = re->next) {
7534 re->func(re->opaque);
7538 void qemu_system_reset_request(void)
7540 if (no_reboot) {
7541 shutdown_requested = 1;
7542 } else {
7543 reset_requested = 1;
7545 if (cpu_single_env)
7546 cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
7549 void qemu_system_shutdown_request(void)
7551 shutdown_requested = 1;
7552 if (cpu_single_env)
7553 cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
7556 void qemu_system_powerdown_request(void)
7558 powerdown_requested = 1;
7559 if (cpu_single_env)
7560 cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
7563 void main_loop_wait(int timeout)
7565 IOHandlerRecord *ioh;
7566 fd_set rfds, wfds, xfds;
7567 int ret, nfds;
7568 #ifdef _WIN32
7569 int ret2, i;
7570 #endif
7571 struct timeval tv;
7572 PollingEntry *pe;
7575 /* XXX: need to suppress polling by better using win32 events */
7576 ret = 0;
7577 for(pe = first_polling_entry; pe != NULL; pe = pe->next) {
7578 ret |= pe->func(pe->opaque);
7580 #ifdef _WIN32
7581 if (ret == 0) {
7582 int err;
7583 WaitObjects *w = &wait_objects;
7585 ret = WaitForMultipleObjects(w->num, w->events, FALSE, timeout);
7586 if (WAIT_OBJECT_0 + 0 <= ret && ret <= WAIT_OBJECT_0 + w->num - 1) {
7587 if (w->func[ret - WAIT_OBJECT_0])
7588 w->func[ret - WAIT_OBJECT_0](w->opaque[ret - WAIT_OBJECT_0]);
7590 /* Check for additional signaled events */
7591 for(i = (ret - WAIT_OBJECT_0 + 1); i < w->num; i++) {
7593 /* Check if event is signaled */
7594 ret2 = WaitForSingleObject(w->events[i], 0);
7595 if(ret2 == WAIT_OBJECT_0) {
7596 if (w->func[i])
7597 w->func[i](w->opaque[i]);
7598 } else if (ret2 == WAIT_TIMEOUT) {
7599 } else {
7600 err = GetLastError();
7601 fprintf(stderr, "WaitForSingleObject error %d %d\n", i, err);
7604 } else if (ret == WAIT_TIMEOUT) {
7605 } else {
7606 err = GetLastError();
7607 fprintf(stderr, "WaitForMultipleObjects error %d %d\n", ret, err);
7610 #endif
7611 /* poll any events */
7612 /* XXX: separate device handlers from system ones */
7613 nfds = -1;
7614 FD_ZERO(&rfds);
7615 FD_ZERO(&wfds);
7616 FD_ZERO(&xfds);
7617 for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
7618 if (ioh->deleted)
7619 continue;
7620 if (ioh->fd_read &&
7621 (!ioh->fd_read_poll ||
7622 ioh->fd_read_poll(ioh->opaque) != 0)) {
7623 FD_SET(ioh->fd, &rfds);
7624 if (ioh->fd > nfds)
7625 nfds = ioh->fd;
7627 if (ioh->fd_write) {
7628 FD_SET(ioh->fd, &wfds);
7629 if (ioh->fd > nfds)
7630 nfds = ioh->fd;
7634 tv.tv_sec = 0;
7635 #ifdef _WIN32
7636 tv.tv_usec = 0;
7637 #else
7638 tv.tv_usec = timeout * 1000;
7639 #endif
7640 #if defined(CONFIG_SLIRP)
7641 if (slirp_inited) {
7642 slirp_select_fill(&nfds, &rfds, &wfds, &xfds);
7644 #endif
7645 ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv);
7646 if (ret > 0) {
7647 IOHandlerRecord **pioh;
7649 for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
7650 if (!ioh->deleted && ioh->fd_read && FD_ISSET(ioh->fd, &rfds)) {
7651 ioh->fd_read(ioh->opaque);
7653 if (!ioh->deleted && ioh->fd_write && FD_ISSET(ioh->fd, &wfds)) {
7654 ioh->fd_write(ioh->opaque);
7658 /* remove deleted IO handlers */
7659 pioh = &first_io_handler;
7660 while (*pioh) {
7661 ioh = *pioh;
7662 if (ioh->deleted) {
7663 *pioh = ioh->next;
7664 qemu_free(ioh);
7665 } else
7666 pioh = &ioh->next;
7669 #if defined(CONFIG_SLIRP)
7670 if (slirp_inited) {
7671 if (ret < 0) {
7672 FD_ZERO(&rfds);
7673 FD_ZERO(&wfds);
7674 FD_ZERO(&xfds);
7676 slirp_select_poll(&rfds, &wfds, &xfds);
7678 #endif
7680 if (vm_running) {
7681 if (likely(!(cur_cpu->singlestep_enabled & SSTEP_NOTIMER)))
7682 qemu_run_timers(&active_timers[QEMU_TIMER_VIRTUAL],
7683 qemu_get_clock(vm_clock));
7684 /* run dma transfers, if any */
7685 DMA_run();
7688 /* real time timers */
7689 qemu_run_timers(&active_timers[QEMU_TIMER_REALTIME],
7690 qemu_get_clock(rt_clock));
7692 if (alarm_timer->flags & ALARM_FLAG_EXPIRED) {
7693 alarm_timer->flags &= ~(ALARM_FLAG_EXPIRED);
7694 qemu_rearm_alarm_timer(alarm_timer);
7697 /* Check bottom-halves last in case any of the earlier events triggered
7698 them. */
7699 qemu_bh_poll();
7703 static int main_loop(void)
7705 int ret, timeout;
7706 #ifdef CONFIG_PROFILER
7707 int64_t ti;
7708 #endif
7709 CPUState *env;
7711 cur_cpu = first_cpu;
7712 next_cpu = cur_cpu->next_cpu ?: first_cpu;
7713 for(;;) {
7714 if (vm_running) {
7716 for(;;) {
7717 /* get next cpu */
7718 env = next_cpu;
7719 #ifdef CONFIG_PROFILER
7720 ti = profile_getclock();
7721 #endif
7722 if (use_icount) {
7723 int64_t count;
7724 int decr;
7725 qemu_icount -= (env->icount_decr.u16.low + env->icount_extra);
7726 env->icount_decr.u16.low = 0;
7727 env->icount_extra = 0;
7728 count = qemu_next_deadline();
7729 count = (count + (1 << icount_time_shift) - 1)
7730 >> icount_time_shift;
7731 qemu_icount += count;
7732 decr = (count > 0xffff) ? 0xffff : count;
7733 count -= decr;
7734 env->icount_decr.u16.low = decr;
7735 env->icount_extra = count;
7737 ret = cpu_exec(env);
7738 #ifdef CONFIG_PROFILER
7739 qemu_time += profile_getclock() - ti;
7740 #endif
7741 if (use_icount) {
7742 /* Fold pending instructions back into the
7743 instruction counter, and clear the interrupt flag. */
7744 qemu_icount -= (env->icount_decr.u16.low
7745 + env->icount_extra);
7746 env->icount_decr.u32 = 0;
7747 env->icount_extra = 0;
7749 next_cpu = env->next_cpu ?: first_cpu;
7750 if (event_pending && likely(ret != EXCP_DEBUG)) {
7751 ret = EXCP_INTERRUPT;
7752 event_pending = 0;
7753 break;
7755 if (ret == EXCP_HLT) {
7756 /* Give the next CPU a chance to run. */
7757 cur_cpu = env;
7758 continue;
7760 if (ret != EXCP_HALTED)
7761 break;
7762 /* all CPUs are halted ? */
7763 if (env == cur_cpu)
7764 break;
7766 cur_cpu = env;
7768 if (shutdown_requested) {
7769 ret = EXCP_INTERRUPT;
7770 if (no_shutdown) {
7771 vm_stop(0);
7772 no_shutdown = 0;
7774 else
7775 break;
7777 if (reset_requested) {
7778 reset_requested = 0;
7779 qemu_system_reset();
7780 ret = EXCP_INTERRUPT;
7782 if (powerdown_requested) {
7783 powerdown_requested = 0;
7784 qemu_system_powerdown();
7785 ret = EXCP_INTERRUPT;
7787 if (unlikely(ret == EXCP_DEBUG)) {
7788 vm_stop(EXCP_DEBUG);
7790 /* If all cpus are halted then wait until the next IRQ */
7791 /* XXX: use timeout computed from timers */
7792 if (ret == EXCP_HALTED) {
7793 if (use_icount) {
7794 int64_t add;
7795 int64_t delta;
7796 /* Advance virtual time to the next event. */
7797 if (use_icount == 1) {
7798 /* When not using an adaptive execution frequency
7799 we tend to get badly out of sync with real time,
7800 so just delay for a reasonable amount of time. */
7801 delta = 0;
7802 } else {
7803 delta = cpu_get_icount() - cpu_get_clock();
7805 if (delta > 0) {
7806 /* If virtual time is ahead of real time then just
7807 wait for IO. */
7808 timeout = (delta / 1000000) + 1;
7809 } else {
7810 /* Wait for either IO to occur or the next
7811 timer event. */
7812 add = qemu_next_deadline();
7813 /* We advance the timer before checking for IO.
7814 Limit the amount we advance so that early IO
7815 activity won't get the guest too far ahead. */
7816 if (add > 10000000)
7817 add = 10000000;
7818 delta += add;
7819 add = (add + (1 << icount_time_shift) - 1)
7820 >> icount_time_shift;
7821 qemu_icount += add;
7822 timeout = delta / 1000000;
7823 if (timeout < 0)
7824 timeout = 0;
7826 } else {
7827 timeout = 10;
7829 } else {
7830 timeout = 0;
7832 } else {
7833 if (shutdown_requested) {
7834 ret = EXCP_INTERRUPT;
7835 break;
7837 timeout = 10;
7839 #ifdef CONFIG_PROFILER
7840 ti = profile_getclock();
7841 #endif
7842 main_loop_wait(timeout);
7843 #ifdef CONFIG_PROFILER
7844 dev_time += profile_getclock() - ti;
7845 #endif
7847 cpu_disable_ticks();
7848 return ret;
7851 static void help(int exitcode)
7853 printf("QEMU PC emulator version " QEMU_VERSION ", Copyright (c) 2003-2008 Fabrice Bellard\n"
7854 "usage: %s [options] [disk_image]\n"
7855 "\n"
7856 "'disk_image' is a raw hard image image for IDE hard disk 0\n"
7857 "\n"
7858 "Standard options:\n"
7859 "-M machine select emulated machine (-M ? for list)\n"
7860 "-cpu cpu select CPU (-cpu ? for list)\n"
7861 "-fda/-fdb file use 'file' as floppy disk 0/1 image\n"
7862 "-hda/-hdb file use 'file' as IDE hard disk 0/1 image\n"
7863 "-hdc/-hdd file use 'file' as IDE hard disk 2/3 image\n"
7864 "-cdrom file use 'file' as IDE cdrom image (cdrom is ide1 master)\n"
7865 "-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]\n"
7866 " [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off]\n"
7867 " [,cache=on|off][,format=f]\n"
7868 " use 'file' as a drive image\n"
7869 "-mtdblock file use 'file' as on-board Flash memory image\n"
7870 "-sd file use 'file' as SecureDigital card image\n"
7871 "-pflash file use 'file' as a parallel flash image\n"
7872 "-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n)\n"
7873 "-snapshot write to temporary files instead of disk image files\n"
7874 #ifdef CONFIG_SDL
7875 "-no-frame open SDL window without a frame and window decorations\n"
7876 "-alt-grab use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt)\n"
7877 "-no-quit disable SDL window close capability\n"
7878 #endif
7879 #ifdef TARGET_I386
7880 "-no-fd-bootchk disable boot signature checking for floppy disks\n"
7881 #endif
7882 "-m megs set virtual RAM size to megs MB [default=%d]\n"
7883 "-smp n set the number of CPUs to 'n' [default=1]\n"
7884 "-nographic disable graphical output and redirect serial I/Os to console\n"
7885 "-portrait rotate graphical output 90 deg left (only PXA LCD)\n"
7886 #ifndef _WIN32
7887 "-k language use keyboard layout (for example \"fr\" for French)\n"
7888 #endif
7889 #ifdef HAS_AUDIO
7890 "-audio-help print list of audio drivers and their options\n"
7891 "-soundhw c1,... enable audio support\n"
7892 " and only specified sound cards (comma separated list)\n"
7893 " use -soundhw ? to get the list of supported cards\n"
7894 " use -soundhw all to enable all of them\n"
7895 #endif
7896 "-vga [std|cirrus|vmware]\n"
7897 " select video card type\n"
7898 "-localtime set the real time clock to local time [default=utc]\n"
7899 "-full-screen start in full screen\n"
7900 #ifdef TARGET_I386
7901 "-win2k-hack use it when installing Windows 2000 to avoid a disk full bug\n"
7902 #endif
7903 "-usb enable the USB driver (will be the default soon)\n"
7904 "-usbdevice name add the host or guest USB device 'name'\n"
7905 #if defined(TARGET_PPC) || defined(TARGET_SPARC)
7906 "-g WxH[xDEPTH] Set the initial graphical resolution and depth\n"
7907 #endif
7908 "-name string set the name of the guest\n"
7909 "-uuid %%08x-%%04x-%%04x-%%04x-%%012x specify machine UUID\n"
7910 "\n"
7911 "Network options:\n"
7912 "-net nic[,vlan=n][,macaddr=addr][,model=type]\n"
7913 " create a new Network Interface Card and connect it to VLAN 'n'\n"
7914 #ifdef CONFIG_SLIRP
7915 "-net user[,vlan=n][,hostname=host]\n"
7916 " connect the user mode network stack to VLAN 'n' and send\n"
7917 " hostname 'host' to DHCP clients\n"
7918 #endif
7919 #ifdef _WIN32
7920 "-net tap[,vlan=n],ifname=name\n"
7921 " connect the host TAP network interface to VLAN 'n'\n"
7922 #else
7923 "-net tap[,vlan=n][,fd=h][,ifname=name][,script=file][,downscript=dfile]\n"
7924 " connect the host TAP network interface to VLAN 'n' and use the\n"
7925 " network scripts 'file' (default=%s)\n"
7926 " and 'dfile' (default=%s);\n"
7927 " use '[down]script=no' to disable script execution;\n"
7928 " use 'fd=h' to connect to an already opened TAP interface\n"
7929 #endif
7930 "-net socket[,vlan=n][,fd=h][,listen=[host]:port][,connect=host:port]\n"
7931 " connect the vlan 'n' to another VLAN using a socket connection\n"
7932 "-net socket[,vlan=n][,fd=h][,mcast=maddr:port]\n"
7933 " connect the vlan 'n' to multicast maddr and port\n"
7934 #ifdef CONFIG_VDE
7935 "-net vde[,vlan=n][,sock=socketpath][,port=n][,group=groupname][,mode=octalmode]\n"
7936 " connect the vlan 'n' to port 'n' of a vde switch running\n"
7937 " on host and listening for incoming connections on 'socketpath'.\n"
7938 " Use group 'groupname' and mode 'octalmode' to change default\n"
7939 " ownership and permissions for communication port.\n"
7940 #endif
7941 "-net none use it alone to have zero network devices; if no -net option\n"
7942 " is provided, the default is '-net nic -net user'\n"
7943 "\n"
7944 #ifdef CONFIG_SLIRP
7945 "-tftp dir allow tftp access to files in dir [-net user]\n"
7946 "-bootp file advertise file in BOOTP replies\n"
7947 #ifndef _WIN32
7948 "-smb dir allow SMB access to files in 'dir' [-net user]\n"
7949 #endif
7950 "-redir [tcp|udp]:host-port:[guest-host]:guest-port\n"
7951 " redirect TCP or UDP connections from host to guest [-net user]\n"
7952 #endif
7953 "\n"
7954 "Linux boot specific:\n"
7955 "-kernel bzImage use 'bzImage' as kernel image\n"
7956 "-append cmdline use 'cmdline' as kernel command line\n"
7957 "-initrd file use 'file' as initial ram disk\n"
7958 "\n"
7959 "Debug/Expert options:\n"
7960 "-monitor dev redirect the monitor to char device 'dev'\n"
7961 "-serial dev redirect the serial port to char device 'dev'\n"
7962 "-parallel dev redirect the parallel port to char device 'dev'\n"
7963 "-pidfile file Write PID to 'file'\n"
7964 "-S freeze CPU at startup (use 'c' to start execution)\n"
7965 "-s wait gdb connection to port\n"
7966 "-p port set gdb connection port [default=%s]\n"
7967 "-d item1,... output log to %s (use -d ? for a list of log items)\n"
7968 "-hdachs c,h,s[,t] force hard disk 0 physical geometry and the optional BIOS\n"
7969 " translation (t=none or lba) (usually qemu can guess them)\n"
7970 "-L path set the directory for the BIOS, VGA BIOS and keymaps\n"
7971 #ifdef USE_KQEMU
7972 "-kernel-kqemu enable KQEMU full virtualization (default is user mode only)\n"
7973 "-no-kqemu disable KQEMU kernel module usage\n"
7974 #endif
7975 #ifdef TARGET_I386
7976 "-no-acpi disable ACPI\n"
7977 #endif
7978 #ifdef CONFIG_CURSES
7979 "-curses use a curses/ncurses interface instead of SDL\n"
7980 #endif
7981 "-no-reboot exit instead of rebooting\n"
7982 "-no-shutdown stop before shutdown\n"
7983 "-loadvm [tag|id] start right away with a saved state (loadvm in monitor)\n"
7984 "-vnc display start a VNC server on display\n"
7985 #ifndef _WIN32
7986 "-daemonize daemonize QEMU after initializing\n"
7987 #endif
7988 "-option-rom rom load a file, rom, into the option ROM space\n"
7989 #ifdef TARGET_SPARC
7990 "-prom-env variable=value set OpenBIOS nvram variables\n"
7991 #endif
7992 "-clock force the use of the given methods for timer alarm.\n"
7993 " To see what timers are available use -clock ?\n"
7994 "-startdate select initial date of the clock\n"
7995 "-icount [N|auto]\n"
7996 " Enable virtual instruction counter with 2^N clock ticks per instruction\n"
7997 "\n"
7998 "During emulation, the following keys are useful:\n"
7999 "ctrl-alt-f toggle full screen\n"
8000 "ctrl-alt-n switch to virtual console 'n'\n"
8001 "ctrl-alt toggle mouse and keyboard grab\n"
8002 "\n"
8003 "When using -nographic, press 'ctrl-a h' to get some help.\n"
8005 "qemu",
8006 DEFAULT_RAM_SIZE,
8007 #ifndef _WIN32
8008 DEFAULT_NETWORK_SCRIPT,
8009 DEFAULT_NETWORK_DOWN_SCRIPT,
8010 #endif
8011 DEFAULT_GDBSTUB_PORT,
8012 "/tmp/qemu.log");
8013 exit(exitcode);
8016 #define HAS_ARG 0x0001
8018 enum {
8019 QEMU_OPTION_h,
8021 QEMU_OPTION_M,
8022 QEMU_OPTION_cpu,
8023 QEMU_OPTION_fda,
8024 QEMU_OPTION_fdb,
8025 QEMU_OPTION_hda,
8026 QEMU_OPTION_hdb,
8027 QEMU_OPTION_hdc,
8028 QEMU_OPTION_hdd,
8029 QEMU_OPTION_drive,
8030 QEMU_OPTION_cdrom,
8031 QEMU_OPTION_mtdblock,
8032 QEMU_OPTION_sd,
8033 QEMU_OPTION_pflash,
8034 QEMU_OPTION_boot,
8035 QEMU_OPTION_snapshot,
8036 #ifdef TARGET_I386
8037 QEMU_OPTION_no_fd_bootchk,
8038 #endif
8039 QEMU_OPTION_m,
8040 QEMU_OPTION_nographic,
8041 QEMU_OPTION_portrait,
8042 #ifdef HAS_AUDIO
8043 QEMU_OPTION_audio_help,
8044 QEMU_OPTION_soundhw,
8045 #endif
8047 QEMU_OPTION_net,
8048 QEMU_OPTION_tftp,
8049 QEMU_OPTION_bootp,
8050 QEMU_OPTION_smb,
8051 QEMU_OPTION_redir,
8053 QEMU_OPTION_kernel,
8054 QEMU_OPTION_append,
8055 QEMU_OPTION_initrd,
8057 QEMU_OPTION_S,
8058 QEMU_OPTION_s,
8059 QEMU_OPTION_p,
8060 QEMU_OPTION_d,
8061 QEMU_OPTION_hdachs,
8062 QEMU_OPTION_L,
8063 QEMU_OPTION_bios,
8064 QEMU_OPTION_k,
8065 QEMU_OPTION_localtime,
8066 QEMU_OPTION_g,
8067 QEMU_OPTION_vga,
8068 QEMU_OPTION_echr,
8069 QEMU_OPTION_monitor,
8070 QEMU_OPTION_serial,
8071 QEMU_OPTION_parallel,
8072 QEMU_OPTION_loadvm,
8073 QEMU_OPTION_full_screen,
8074 QEMU_OPTION_no_frame,
8075 QEMU_OPTION_alt_grab,
8076 QEMU_OPTION_no_quit,
8077 QEMU_OPTION_pidfile,
8078 QEMU_OPTION_no_kqemu,
8079 QEMU_OPTION_kernel_kqemu,
8080 QEMU_OPTION_win2k_hack,
8081 QEMU_OPTION_usb,
8082 QEMU_OPTION_usbdevice,
8083 QEMU_OPTION_smp,
8084 QEMU_OPTION_vnc,
8085 QEMU_OPTION_no_acpi,
8086 QEMU_OPTION_curses,
8087 QEMU_OPTION_no_reboot,
8088 QEMU_OPTION_no_shutdown,
8089 QEMU_OPTION_show_cursor,
8090 QEMU_OPTION_daemonize,
8091 QEMU_OPTION_option_rom,
8092 QEMU_OPTION_semihosting,
8093 QEMU_OPTION_name,
8094 QEMU_OPTION_prom_env,
8095 QEMU_OPTION_old_param,
8096 QEMU_OPTION_clock,
8097 QEMU_OPTION_startdate,
8098 QEMU_OPTION_tb_size,
8099 QEMU_OPTION_icount,
8100 QEMU_OPTION_uuid,
8103 typedef struct QEMUOption {
8104 const char *name;
8105 int flags;
8106 int index;
8107 } QEMUOption;
8109 static const QEMUOption qemu_options[] = {
8110 { "h", 0, QEMU_OPTION_h },
8111 { "help", 0, QEMU_OPTION_h },
8113 { "M", HAS_ARG, QEMU_OPTION_M },
8114 { "cpu", HAS_ARG, QEMU_OPTION_cpu },
8115 { "fda", HAS_ARG, QEMU_OPTION_fda },
8116 { "fdb", HAS_ARG, QEMU_OPTION_fdb },
8117 { "hda", HAS_ARG, QEMU_OPTION_hda },
8118 { "hdb", HAS_ARG, QEMU_OPTION_hdb },
8119 { "hdc", HAS_ARG, QEMU_OPTION_hdc },
8120 { "hdd", HAS_ARG, QEMU_OPTION_hdd },
8121 { "drive", HAS_ARG, QEMU_OPTION_drive },
8122 { "cdrom", HAS_ARG, QEMU_OPTION_cdrom },
8123 { "mtdblock", HAS_ARG, QEMU_OPTION_mtdblock },
8124 { "sd", HAS_ARG, QEMU_OPTION_sd },
8125 { "pflash", HAS_ARG, QEMU_OPTION_pflash },
8126 { "boot", HAS_ARG, QEMU_OPTION_boot },
8127 { "snapshot", 0, QEMU_OPTION_snapshot },
8128 #ifdef TARGET_I386
8129 { "no-fd-bootchk", 0, QEMU_OPTION_no_fd_bootchk },
8130 #endif
8131 { "m", HAS_ARG, QEMU_OPTION_m },
8132 { "nographic", 0, QEMU_OPTION_nographic },
8133 { "portrait", 0, QEMU_OPTION_portrait },
8134 { "k", HAS_ARG, QEMU_OPTION_k },
8135 #ifdef HAS_AUDIO
8136 { "audio-help", 0, QEMU_OPTION_audio_help },
8137 { "soundhw", HAS_ARG, QEMU_OPTION_soundhw },
8138 #endif
8140 { "net", HAS_ARG, QEMU_OPTION_net},
8141 #ifdef CONFIG_SLIRP
8142 { "tftp", HAS_ARG, QEMU_OPTION_tftp },
8143 { "bootp", HAS_ARG, QEMU_OPTION_bootp },
8144 #ifndef _WIN32
8145 { "smb", HAS_ARG, QEMU_OPTION_smb },
8146 #endif
8147 { "redir", HAS_ARG, QEMU_OPTION_redir },
8148 #endif
8150 { "kernel", HAS_ARG, QEMU_OPTION_kernel },
8151 { "append", HAS_ARG, QEMU_OPTION_append },
8152 { "initrd", HAS_ARG, QEMU_OPTION_initrd },
8154 { "S", 0, QEMU_OPTION_S },
8155 { "s", 0, QEMU_OPTION_s },
8156 { "p", HAS_ARG, QEMU_OPTION_p },
8157 { "d", HAS_ARG, QEMU_OPTION_d },
8158 { "hdachs", HAS_ARG, QEMU_OPTION_hdachs },
8159 { "L", HAS_ARG, QEMU_OPTION_L },
8160 { "bios", HAS_ARG, QEMU_OPTION_bios },
8161 #ifdef USE_KQEMU
8162 { "no-kqemu", 0, QEMU_OPTION_no_kqemu },
8163 { "kernel-kqemu", 0, QEMU_OPTION_kernel_kqemu },
8164 #endif
8165 #if defined(TARGET_PPC) || defined(TARGET_SPARC)
8166 { "g", 1, QEMU_OPTION_g },
8167 #endif
8168 { "localtime", 0, QEMU_OPTION_localtime },
8169 { "vga", HAS_ARG, QEMU_OPTION_vga },
8170 { "echr", HAS_ARG, QEMU_OPTION_echr },
8171 { "monitor", HAS_ARG, QEMU_OPTION_monitor },
8172 { "serial", HAS_ARG, QEMU_OPTION_serial },
8173 { "parallel", HAS_ARG, QEMU_OPTION_parallel },
8174 { "loadvm", HAS_ARG, QEMU_OPTION_loadvm },
8175 { "full-screen", 0, QEMU_OPTION_full_screen },
8176 #ifdef CONFIG_SDL
8177 { "no-frame", 0, QEMU_OPTION_no_frame },
8178 { "alt-grab", 0, QEMU_OPTION_alt_grab },
8179 { "no-quit", 0, QEMU_OPTION_no_quit },
8180 #endif
8181 { "pidfile", HAS_ARG, QEMU_OPTION_pidfile },
8182 { "win2k-hack", 0, QEMU_OPTION_win2k_hack },
8183 { "usbdevice", HAS_ARG, QEMU_OPTION_usbdevice },
8184 { "smp", HAS_ARG, QEMU_OPTION_smp },
8185 { "vnc", HAS_ARG, QEMU_OPTION_vnc },
8186 #ifdef CONFIG_CURSES
8187 { "curses", 0, QEMU_OPTION_curses },
8188 #endif
8189 { "uuid", HAS_ARG, QEMU_OPTION_uuid },
8191 /* temporary options */
8192 { "usb", 0, QEMU_OPTION_usb },
8193 { "no-acpi", 0, QEMU_OPTION_no_acpi },
8194 { "no-reboot", 0, QEMU_OPTION_no_reboot },
8195 { "no-shutdown", 0, QEMU_OPTION_no_shutdown },
8196 { "show-cursor", 0, QEMU_OPTION_show_cursor },
8197 { "daemonize", 0, QEMU_OPTION_daemonize },
8198 { "option-rom", HAS_ARG, QEMU_OPTION_option_rom },
8199 #if defined(TARGET_ARM) || defined(TARGET_M68K)
8200 { "semihosting", 0, QEMU_OPTION_semihosting },
8201 #endif
8202 { "name", HAS_ARG, QEMU_OPTION_name },
8203 #if defined(TARGET_SPARC)
8204 { "prom-env", HAS_ARG, QEMU_OPTION_prom_env },
8205 #endif
8206 #if defined(TARGET_ARM)
8207 { "old-param", 0, QEMU_OPTION_old_param },
8208 #endif
8209 { "clock", HAS_ARG, QEMU_OPTION_clock },
8210 { "startdate", HAS_ARG, QEMU_OPTION_startdate },
8211 { "tb-size", HAS_ARG, QEMU_OPTION_tb_size },
8212 { "icount", HAS_ARG, QEMU_OPTION_icount },
8213 { NULL },
8216 /* password input */
8218 int qemu_key_check(BlockDriverState *bs, const char *name)
8220 char password[256];
8221 int i;
8223 if (!bdrv_is_encrypted(bs))
8224 return 0;
8226 term_printf("%s is encrypted.\n", name);
8227 for(i = 0; i < 3; i++) {
8228 monitor_readline("Password: ", 1, password, sizeof(password));
8229 if (bdrv_set_key(bs, password) == 0)
8230 return 0;
8231 term_printf("invalid password\n");
8233 return -EPERM;
8236 static BlockDriverState *get_bdrv(int index)
8238 if (index > nb_drives)
8239 return NULL;
8240 return drives_table[index].bdrv;
8243 static void read_passwords(void)
8245 BlockDriverState *bs;
8246 int i;
8248 for(i = 0; i < 6; i++) {
8249 bs = get_bdrv(i);
8250 if (bs)
8251 qemu_key_check(bs, bdrv_get_device_name(bs));
8255 #ifdef HAS_AUDIO
8256 struct soundhw soundhw[] = {
8257 #ifdef HAS_AUDIO_CHOICE
8258 #if defined(TARGET_I386) || defined(TARGET_MIPS)
8260 "pcspk",
8261 "PC speaker",
8264 { .init_isa = pcspk_audio_init }
8266 #endif
8268 "sb16",
8269 "Creative Sound Blaster 16",
8272 { .init_isa = SB16_init }
8275 #ifdef CONFIG_CS4231A
8277 "cs4231a",
8278 "CS4231A",
8281 { .init_isa = cs4231a_init }
8283 #endif
8285 #ifdef CONFIG_ADLIB
8287 "adlib",
8288 #ifdef HAS_YMF262
8289 "Yamaha YMF262 (OPL3)",
8290 #else
8291 "Yamaha YM3812 (OPL2)",
8292 #endif
8295 { .init_isa = Adlib_init }
8297 #endif
8299 #ifdef CONFIG_GUS
8301 "gus",
8302 "Gravis Ultrasound GF1",
8305 { .init_isa = GUS_init }
8307 #endif
8309 #ifdef CONFIG_AC97
8311 "ac97",
8312 "Intel 82801AA AC97 Audio",
8315 { .init_pci = ac97_init }
8317 #endif
8320 "es1370",
8321 "ENSONIQ AudioPCI ES1370",
8324 { .init_pci = es1370_init }
8326 #endif
8328 { NULL, NULL, 0, 0, { NULL } }
8331 static void select_soundhw (const char *optarg)
8333 struct soundhw *c;
8335 if (*optarg == '?') {
8336 show_valid_cards:
8338 printf ("Valid sound card names (comma separated):\n");
8339 for (c = soundhw; c->name; ++c) {
8340 printf ("%-11s %s\n", c->name, c->descr);
8342 printf ("\n-soundhw all will enable all of the above\n");
8343 exit (*optarg != '?');
8345 else {
8346 size_t l;
8347 const char *p;
8348 char *e;
8349 int bad_card = 0;
8351 if (!strcmp (optarg, "all")) {
8352 for (c = soundhw; c->name; ++c) {
8353 c->enabled = 1;
8355 return;
8358 p = optarg;
8359 while (*p) {
8360 e = strchr (p, ',');
8361 l = !e ? strlen (p) : (size_t) (e - p);
8363 for (c = soundhw; c->name; ++c) {
8364 if (!strncmp (c->name, p, l)) {
8365 c->enabled = 1;
8366 break;
8370 if (!c->name) {
8371 if (l > 80) {
8372 fprintf (stderr,
8373 "Unknown sound card name (too big to show)\n");
8375 else {
8376 fprintf (stderr, "Unknown sound card name `%.*s'\n",
8377 (int) l, p);
8379 bad_card = 1;
8381 p += l + (e != NULL);
8384 if (bad_card)
8385 goto show_valid_cards;
8388 #endif
8390 static void select_vgahw (const char *p)
8392 const char *opts;
8394 if (strstart(p, "std", &opts)) {
8395 cirrus_vga_enabled = 0;
8396 vmsvga_enabled = 0;
8397 } else if (strstart(p, "cirrus", &opts)) {
8398 cirrus_vga_enabled = 1;
8399 vmsvga_enabled = 0;
8400 } else if (strstart(p, "vmware", &opts)) {
8401 cirrus_vga_enabled = 0;
8402 vmsvga_enabled = 1;
8403 } else {
8404 invalid_vga:
8405 fprintf(stderr, "Unknown vga type: %s\n", p);
8406 exit(1);
8408 while (*opts) {
8409 const char *nextopt;
8411 if (strstart(opts, ",retrace=", &nextopt)) {
8412 opts = nextopt;
8413 if (strstart(opts, "dumb", &nextopt))
8414 vga_retrace_method = VGA_RETRACE_DUMB;
8415 else if (strstart(opts, "precise", &nextopt))
8416 vga_retrace_method = VGA_RETRACE_PRECISE;
8417 else goto invalid_vga;
8418 } else goto invalid_vga;
8419 opts = nextopt;
8423 #ifdef _WIN32
8424 static BOOL WINAPI qemu_ctrl_handler(DWORD type)
8426 exit(STATUS_CONTROL_C_EXIT);
8427 return TRUE;
8429 #endif
8431 static int qemu_uuid_parse(const char *str, uint8_t *uuid)
8433 int ret;
8435 if(strlen(str) != 36)
8436 return -1;
8438 ret = sscanf(str, UUID_FMT, &uuid[0], &uuid[1], &uuid[2], &uuid[3],
8439 &uuid[4], &uuid[5], &uuid[6], &uuid[7], &uuid[8], &uuid[9],
8440 &uuid[10], &uuid[11], &uuid[12], &uuid[13], &uuid[14], &uuid[15]);
8442 if(ret != 16)
8443 return -1;
8445 return 0;
8448 #define MAX_NET_CLIENTS 32
8450 #ifndef _WIN32
8452 static void termsig_handler(int signal)
8454 qemu_system_shutdown_request();
8457 static void termsig_setup(void)
8459 struct sigaction act;
8461 memset(&act, 0, sizeof(act));
8462 act.sa_handler = termsig_handler;
8463 sigaction(SIGINT, &act, NULL);
8464 sigaction(SIGHUP, &act, NULL);
8465 sigaction(SIGTERM, &act, NULL);
8468 #endif
8470 int main(int argc, char **argv)
8472 #ifdef CONFIG_GDBSTUB
8473 int use_gdbstub;
8474 const char *gdbstub_port;
8475 #endif
8476 uint32_t boot_devices_bitmap = 0;
8477 int i;
8478 int snapshot, linux_boot, net_boot;
8479 const char *initrd_filename;
8480 const char *kernel_filename, *kernel_cmdline;
8481 const char *boot_devices = "";
8482 DisplayState *ds = &display_state;
8483 int cyls, heads, secs, translation;
8484 const char *net_clients[MAX_NET_CLIENTS];
8485 int nb_net_clients;
8486 int hda_index;
8487 int optind;
8488 const char *r, *optarg;
8489 CharDriverState *monitor_hd;
8490 const char *monitor_device;
8491 const char *serial_devices[MAX_SERIAL_PORTS];
8492 int serial_device_index;
8493 const char *parallel_devices[MAX_PARALLEL_PORTS];
8494 int parallel_device_index;
8495 const char *loadvm = NULL;
8496 QEMUMachine *machine;
8497 const char *cpu_model;
8498 const char *usb_devices[MAX_USB_CMDLINE];
8499 int usb_devices_index;
8500 int fds[2];
8501 int tb_size;
8502 const char *pid_file = NULL;
8503 VLANState *vlan;
8504 int autostart;
8506 LIST_INIT (&vm_change_state_head);
8507 #ifndef _WIN32
8509 struct sigaction act;
8510 sigfillset(&act.sa_mask);
8511 act.sa_flags = 0;
8512 act.sa_handler = SIG_IGN;
8513 sigaction(SIGPIPE, &act, NULL);
8515 #else
8516 SetConsoleCtrlHandler(qemu_ctrl_handler, TRUE);
8517 /* Note: cpu_interrupt() is currently not SMP safe, so we force
8518 QEMU to run on a single CPU */
8520 HANDLE h;
8521 DWORD mask, smask;
8522 int i;
8523 h = GetCurrentProcess();
8524 if (GetProcessAffinityMask(h, &mask, &smask)) {
8525 for(i = 0; i < 32; i++) {
8526 if (mask & (1 << i))
8527 break;
8529 if (i != 32) {
8530 mask = 1 << i;
8531 SetProcessAffinityMask(h, mask);
8535 #endif
8537 register_machines();
8538 machine = first_machine;
8539 cpu_model = NULL;
8540 initrd_filename = NULL;
8541 ram_size = 0;
8542 vga_ram_size = VGA_RAM_SIZE;
8543 #ifdef CONFIG_GDBSTUB
8544 use_gdbstub = 0;
8545 gdbstub_port = DEFAULT_GDBSTUB_PORT;
8546 #endif
8547 snapshot = 0;
8548 nographic = 0;
8549 curses = 0;
8550 kernel_filename = NULL;
8551 kernel_cmdline = "";
8552 cyls = heads = secs = 0;
8553 translation = BIOS_ATA_TRANSLATION_AUTO;
8554 monitor_device = "vc";
8556 serial_devices[0] = "vc:80Cx24C";
8557 for(i = 1; i < MAX_SERIAL_PORTS; i++)
8558 serial_devices[i] = NULL;
8559 serial_device_index = 0;
8561 parallel_devices[0] = "vc:640x480";
8562 for(i = 1; i < MAX_PARALLEL_PORTS; i++)
8563 parallel_devices[i] = NULL;
8564 parallel_device_index = 0;
8566 usb_devices_index = 0;
8568 nb_net_clients = 0;
8569 nb_drives = 0;
8570 nb_drives_opt = 0;
8571 hda_index = -1;
8573 nb_nics = 0;
8575 tb_size = 0;
8576 autostart= 1;
8578 optind = 1;
8579 for(;;) {
8580 if (optind >= argc)
8581 break;
8582 r = argv[optind];
8583 if (r[0] != '-') {
8584 hda_index = drive_add(argv[optind++], HD_ALIAS, 0);
8585 } else {
8586 const QEMUOption *popt;
8588 optind++;
8589 /* Treat --foo the same as -foo. */
8590 if (r[1] == '-')
8591 r++;
8592 popt = qemu_options;
8593 for(;;) {
8594 if (!popt->name) {
8595 fprintf(stderr, "%s: invalid option -- '%s'\n",
8596 argv[0], r);
8597 exit(1);
8599 if (!strcmp(popt->name, r + 1))
8600 break;
8601 popt++;
8603 if (popt->flags & HAS_ARG) {
8604 if (optind >= argc) {
8605 fprintf(stderr, "%s: option '%s' requires an argument\n",
8606 argv[0], r);
8607 exit(1);
8609 optarg = argv[optind++];
8610 } else {
8611 optarg = NULL;
8614 switch(popt->index) {
8615 case QEMU_OPTION_M:
8616 machine = find_machine(optarg);
8617 if (!machine) {
8618 QEMUMachine *m;
8619 printf("Supported machines are:\n");
8620 for(m = first_machine; m != NULL; m = m->next) {
8621 printf("%-10s %s%s\n",
8622 m->name, m->desc,
8623 m == first_machine ? " (default)" : "");
8625 exit(*optarg != '?');
8627 break;
8628 case QEMU_OPTION_cpu:
8629 /* hw initialization will check this */
8630 if (*optarg == '?') {
8631 /* XXX: implement xxx_cpu_list for targets that still miss it */
8632 #if defined(cpu_list)
8633 cpu_list(stdout, &fprintf);
8634 #endif
8635 exit(0);
8636 } else {
8637 cpu_model = optarg;
8639 break;
8640 case QEMU_OPTION_initrd:
8641 initrd_filename = optarg;
8642 break;
8643 case QEMU_OPTION_hda:
8644 if (cyls == 0)
8645 hda_index = drive_add(optarg, HD_ALIAS, 0);
8646 else
8647 hda_index = drive_add(optarg, HD_ALIAS
8648 ",cyls=%d,heads=%d,secs=%d%s",
8649 0, cyls, heads, secs,
8650 translation == BIOS_ATA_TRANSLATION_LBA ?
8651 ",trans=lba" :
8652 translation == BIOS_ATA_TRANSLATION_NONE ?
8653 ",trans=none" : "");
8654 break;
8655 case QEMU_OPTION_hdb:
8656 case QEMU_OPTION_hdc:
8657 case QEMU_OPTION_hdd:
8658 drive_add(optarg, HD_ALIAS, popt->index - QEMU_OPTION_hda);
8659 break;
8660 case QEMU_OPTION_drive:
8661 drive_add(NULL, "%s", optarg);
8662 break;
8663 case QEMU_OPTION_mtdblock:
8664 drive_add(optarg, MTD_ALIAS);
8665 break;
8666 case QEMU_OPTION_sd:
8667 drive_add(optarg, SD_ALIAS);
8668 break;
8669 case QEMU_OPTION_pflash:
8670 drive_add(optarg, PFLASH_ALIAS);
8671 break;
8672 case QEMU_OPTION_snapshot:
8673 snapshot = 1;
8674 break;
8675 case QEMU_OPTION_hdachs:
8677 const char *p;
8678 p = optarg;
8679 cyls = strtol(p, (char **)&p, 0);
8680 if (cyls < 1 || cyls > 16383)
8681 goto chs_fail;
8682 if (*p != ',')
8683 goto chs_fail;
8684 p++;
8685 heads = strtol(p, (char **)&p, 0);
8686 if (heads < 1 || heads > 16)
8687 goto chs_fail;
8688 if (*p != ',')
8689 goto chs_fail;
8690 p++;
8691 secs = strtol(p, (char **)&p, 0);
8692 if (secs < 1 || secs > 63)
8693 goto chs_fail;
8694 if (*p == ',') {
8695 p++;
8696 if (!strcmp(p, "none"))
8697 translation = BIOS_ATA_TRANSLATION_NONE;
8698 else if (!strcmp(p, "lba"))
8699 translation = BIOS_ATA_TRANSLATION_LBA;
8700 else if (!strcmp(p, "auto"))
8701 translation = BIOS_ATA_TRANSLATION_AUTO;
8702 else
8703 goto chs_fail;
8704 } else if (*p != '\0') {
8705 chs_fail:
8706 fprintf(stderr, "qemu: invalid physical CHS format\n");
8707 exit(1);
8709 if (hda_index != -1)
8710 snprintf(drives_opt[hda_index].opt,
8711 sizeof(drives_opt[hda_index].opt),
8712 HD_ALIAS ",cyls=%d,heads=%d,secs=%d%s",
8713 0, cyls, heads, secs,
8714 translation == BIOS_ATA_TRANSLATION_LBA ?
8715 ",trans=lba" :
8716 translation == BIOS_ATA_TRANSLATION_NONE ?
8717 ",trans=none" : "");
8719 break;
8720 case QEMU_OPTION_nographic:
8721 nographic = 1;
8722 break;
8723 #ifdef CONFIG_CURSES
8724 case QEMU_OPTION_curses:
8725 curses = 1;
8726 break;
8727 #endif
8728 case QEMU_OPTION_portrait:
8729 graphic_rotate = 1;
8730 break;
8731 case QEMU_OPTION_kernel:
8732 kernel_filename = optarg;
8733 break;
8734 case QEMU_OPTION_append:
8735 kernel_cmdline = optarg;
8736 break;
8737 case QEMU_OPTION_cdrom:
8738 drive_add(optarg, CDROM_ALIAS);
8739 break;
8740 case QEMU_OPTION_boot:
8741 boot_devices = optarg;
8742 /* We just do some generic consistency checks */
8744 /* Could easily be extended to 64 devices if needed */
8745 const char *p;
8747 boot_devices_bitmap = 0;
8748 for (p = boot_devices; *p != '\0'; p++) {
8749 /* Allowed boot devices are:
8750 * a b : floppy disk drives
8751 * c ... f : IDE disk drives
8752 * g ... m : machine implementation dependant drives
8753 * n ... p : network devices
8754 * It's up to each machine implementation to check
8755 * if the given boot devices match the actual hardware
8756 * implementation and firmware features.
8758 if (*p < 'a' || *p > 'q') {
8759 fprintf(stderr, "Invalid boot device '%c'\n", *p);
8760 exit(1);
8762 if (boot_devices_bitmap & (1 << (*p - 'a'))) {
8763 fprintf(stderr,
8764 "Boot device '%c' was given twice\n",*p);
8765 exit(1);
8767 boot_devices_bitmap |= 1 << (*p - 'a');
8770 break;
8771 case QEMU_OPTION_fda:
8772 case QEMU_OPTION_fdb:
8773 drive_add(optarg, FD_ALIAS, popt->index - QEMU_OPTION_fda);
8774 break;
8775 #ifdef TARGET_I386
8776 case QEMU_OPTION_no_fd_bootchk:
8777 fd_bootchk = 0;
8778 break;
8779 #endif
8780 case QEMU_OPTION_net:
8781 if (nb_net_clients >= MAX_NET_CLIENTS) {
8782 fprintf(stderr, "qemu: too many network clients\n");
8783 exit(1);
8785 net_clients[nb_net_clients] = optarg;
8786 nb_net_clients++;
8787 break;
8788 #ifdef CONFIG_SLIRP
8789 case QEMU_OPTION_tftp:
8790 tftp_prefix = optarg;
8791 break;
8792 case QEMU_OPTION_bootp:
8793 bootp_filename = optarg;
8794 break;
8795 #ifndef _WIN32
8796 case QEMU_OPTION_smb:
8797 net_slirp_smb(optarg);
8798 break;
8799 #endif
8800 case QEMU_OPTION_redir:
8801 net_slirp_redir(optarg);
8802 break;
8803 #endif
8804 #ifdef HAS_AUDIO
8805 case QEMU_OPTION_audio_help:
8806 AUD_help ();
8807 exit (0);
8808 break;
8809 case QEMU_OPTION_soundhw:
8810 select_soundhw (optarg);
8811 break;
8812 #endif
8813 case QEMU_OPTION_h:
8814 help(0);
8815 break;
8816 case QEMU_OPTION_m: {
8817 uint64_t value;
8818 char *ptr;
8820 value = strtoul(optarg, &ptr, 10);
8821 switch (*ptr) {
8822 case 0: case 'M': case 'm':
8823 value <<= 20;
8824 break;
8825 case 'G': case 'g':
8826 value <<= 30;
8827 break;
8828 default:
8829 fprintf(stderr, "qemu: invalid ram size: %s\n", optarg);
8830 exit(1);
8833 /* On 32-bit hosts, QEMU is limited by virtual address space */
8834 if (value > (2047 << 20)
8835 #ifndef USE_KQEMU
8836 && HOST_LONG_BITS == 32
8837 #endif
8839 fprintf(stderr, "qemu: at most 2047 MB RAM can be simulated\n");
8840 exit(1);
8842 if (value != (uint64_t)(ram_addr_t)value) {
8843 fprintf(stderr, "qemu: ram size too large\n");
8844 exit(1);
8846 ram_size = value;
8847 break;
8849 case QEMU_OPTION_d:
8851 int mask;
8852 const CPULogItem *item;
8854 mask = cpu_str_to_log_mask(optarg);
8855 if (!mask) {
8856 printf("Log items (comma separated):\n");
8857 for(item = cpu_log_items; item->mask != 0; item++) {
8858 printf("%-10s %s\n", item->name, item->help);
8860 exit(1);
8862 cpu_set_log(mask);
8864 break;
8865 #ifdef CONFIG_GDBSTUB
8866 case QEMU_OPTION_s:
8867 use_gdbstub = 1;
8868 break;
8869 case QEMU_OPTION_p:
8870 gdbstub_port = optarg;
8871 break;
8872 #endif
8873 case QEMU_OPTION_L:
8874 bios_dir = optarg;
8875 break;
8876 case QEMU_OPTION_bios:
8877 bios_name = optarg;
8878 break;
8879 case QEMU_OPTION_S:
8880 autostart = 0;
8881 break;
8882 case QEMU_OPTION_k:
8883 keyboard_layout = optarg;
8884 break;
8885 case QEMU_OPTION_localtime:
8886 rtc_utc = 0;
8887 break;
8888 case QEMU_OPTION_vga:
8889 select_vgahw (optarg);
8890 break;
8891 case QEMU_OPTION_g:
8893 const char *p;
8894 int w, h, depth;
8895 p = optarg;
8896 w = strtol(p, (char **)&p, 10);
8897 if (w <= 0) {
8898 graphic_error:
8899 fprintf(stderr, "qemu: invalid resolution or depth\n");
8900 exit(1);
8902 if (*p != 'x')
8903 goto graphic_error;
8904 p++;
8905 h = strtol(p, (char **)&p, 10);
8906 if (h <= 0)
8907 goto graphic_error;
8908 if (*p == 'x') {
8909 p++;
8910 depth = strtol(p, (char **)&p, 10);
8911 if (depth != 8 && depth != 15 && depth != 16 &&
8912 depth != 24 && depth != 32)
8913 goto graphic_error;
8914 } else if (*p == '\0') {
8915 depth = graphic_depth;
8916 } else {
8917 goto graphic_error;
8920 graphic_width = w;
8921 graphic_height = h;
8922 graphic_depth = depth;
8924 break;
8925 case QEMU_OPTION_echr:
8927 char *r;
8928 term_escape_char = strtol(optarg, &r, 0);
8929 if (r == optarg)
8930 printf("Bad argument to echr\n");
8931 break;
8933 case QEMU_OPTION_monitor:
8934 monitor_device = optarg;
8935 break;
8936 case QEMU_OPTION_serial:
8937 if (serial_device_index >= MAX_SERIAL_PORTS) {
8938 fprintf(stderr, "qemu: too many serial ports\n");
8939 exit(1);
8941 serial_devices[serial_device_index] = optarg;
8942 serial_device_index++;
8943 break;
8944 case QEMU_OPTION_parallel:
8945 if (parallel_device_index >= MAX_PARALLEL_PORTS) {
8946 fprintf(stderr, "qemu: too many parallel ports\n");
8947 exit(1);
8949 parallel_devices[parallel_device_index] = optarg;
8950 parallel_device_index++;
8951 break;
8952 case QEMU_OPTION_loadvm:
8953 loadvm = optarg;
8954 break;
8955 case QEMU_OPTION_full_screen:
8956 full_screen = 1;
8957 break;
8958 #ifdef CONFIG_SDL
8959 case QEMU_OPTION_no_frame:
8960 no_frame = 1;
8961 break;
8962 case QEMU_OPTION_alt_grab:
8963 alt_grab = 1;
8964 break;
8965 case QEMU_OPTION_no_quit:
8966 no_quit = 1;
8967 break;
8968 #endif
8969 case QEMU_OPTION_pidfile:
8970 pid_file = optarg;
8971 break;
8972 #ifdef TARGET_I386
8973 case QEMU_OPTION_win2k_hack:
8974 win2k_install_hack = 1;
8975 break;
8976 #endif
8977 #ifdef USE_KQEMU
8978 case QEMU_OPTION_no_kqemu:
8979 kqemu_allowed = 0;
8980 break;
8981 case QEMU_OPTION_kernel_kqemu:
8982 kqemu_allowed = 2;
8983 break;
8984 #endif
8985 case QEMU_OPTION_usb:
8986 usb_enabled = 1;
8987 break;
8988 case QEMU_OPTION_usbdevice:
8989 usb_enabled = 1;
8990 if (usb_devices_index >= MAX_USB_CMDLINE) {
8991 fprintf(stderr, "Too many USB devices\n");
8992 exit(1);
8994 usb_devices[usb_devices_index] = optarg;
8995 usb_devices_index++;
8996 break;
8997 case QEMU_OPTION_smp:
8998 smp_cpus = atoi(optarg);
8999 if (smp_cpus < 1 || smp_cpus > MAX_CPUS) {
9000 fprintf(stderr, "Invalid number of CPUs\n");
9001 exit(1);
9003 break;
9004 case QEMU_OPTION_vnc:
9005 vnc_display = optarg;
9006 break;
9007 case QEMU_OPTION_no_acpi:
9008 acpi_enabled = 0;
9009 break;
9010 case QEMU_OPTION_no_reboot:
9011 no_reboot = 1;
9012 break;
9013 case QEMU_OPTION_no_shutdown:
9014 no_shutdown = 1;
9015 break;
9016 case QEMU_OPTION_show_cursor:
9017 cursor_hide = 0;
9018 break;
9019 case QEMU_OPTION_uuid:
9020 if(qemu_uuid_parse(optarg, qemu_uuid) < 0) {
9021 fprintf(stderr, "Fail to parse UUID string."
9022 " Wrong format.\n");
9023 exit(1);
9025 break;
9026 case QEMU_OPTION_daemonize:
9027 daemonize = 1;
9028 break;
9029 case QEMU_OPTION_option_rom:
9030 if (nb_option_roms >= MAX_OPTION_ROMS) {
9031 fprintf(stderr, "Too many option ROMs\n");
9032 exit(1);
9034 option_rom[nb_option_roms] = optarg;
9035 nb_option_roms++;
9036 break;
9037 case QEMU_OPTION_semihosting:
9038 semihosting_enabled = 1;
9039 break;
9040 case QEMU_OPTION_name:
9041 qemu_name = optarg;
9042 break;
9043 #ifdef TARGET_SPARC
9044 case QEMU_OPTION_prom_env:
9045 if (nb_prom_envs >= MAX_PROM_ENVS) {
9046 fprintf(stderr, "Too many prom variables\n");
9047 exit(1);
9049 prom_envs[nb_prom_envs] = optarg;
9050 nb_prom_envs++;
9051 break;
9052 #endif
9053 #ifdef TARGET_ARM
9054 case QEMU_OPTION_old_param:
9055 old_param = 1;
9056 break;
9057 #endif
9058 case QEMU_OPTION_clock:
9059 configure_alarms(optarg);
9060 break;
9061 case QEMU_OPTION_startdate:
9063 struct tm tm;
9064 time_t rtc_start_date;
9065 if (!strcmp(optarg, "now")) {
9066 rtc_date_offset = -1;
9067 } else {
9068 if (sscanf(optarg, "%d-%d-%dT%d:%d:%d",
9069 &tm.tm_year,
9070 &tm.tm_mon,
9071 &tm.tm_mday,
9072 &tm.tm_hour,
9073 &tm.tm_min,
9074 &tm.tm_sec) == 6) {
9075 /* OK */
9076 } else if (sscanf(optarg, "%d-%d-%d",
9077 &tm.tm_year,
9078 &tm.tm_mon,
9079 &tm.tm_mday) == 3) {
9080 tm.tm_hour = 0;
9081 tm.tm_min = 0;
9082 tm.tm_sec = 0;
9083 } else {
9084 goto date_fail;
9086 tm.tm_year -= 1900;
9087 tm.tm_mon--;
9088 rtc_start_date = mktimegm(&tm);
9089 if (rtc_start_date == -1) {
9090 date_fail:
9091 fprintf(stderr, "Invalid date format. Valid format are:\n"
9092 "'now' or '2006-06-17T16:01:21' or '2006-06-17'\n");
9093 exit(1);
9095 rtc_date_offset = time(NULL) - rtc_start_date;
9098 break;
9099 case QEMU_OPTION_tb_size:
9100 tb_size = strtol(optarg, NULL, 0);
9101 if (tb_size < 0)
9102 tb_size = 0;
9103 break;
9104 case QEMU_OPTION_icount:
9105 use_icount = 1;
9106 if (strcmp(optarg, "auto") == 0) {
9107 icount_time_shift = -1;
9108 } else {
9109 icount_time_shift = strtol(optarg, NULL, 0);
9111 break;
9116 if (nographic) {
9117 if (serial_device_index == 0)
9118 serial_devices[0] = "stdio";
9119 if (parallel_device_index == 0)
9120 parallel_devices[0] = "null";
9121 if (strncmp(monitor_device, "vc", 2) == 0)
9122 monitor_device = "stdio";
9125 #ifndef _WIN32
9126 if (daemonize) {
9127 pid_t pid;
9129 if (pipe(fds) == -1)
9130 exit(1);
9132 pid = fork();
9133 if (pid > 0) {
9134 uint8_t status;
9135 ssize_t len;
9137 close(fds[1]);
9139 again:
9140 len = read(fds[0], &status, 1);
9141 if (len == -1 && (errno == EINTR))
9142 goto again;
9144 if (len != 1)
9145 exit(1);
9146 else if (status == 1) {
9147 fprintf(stderr, "Could not acquire pidfile\n");
9148 exit(1);
9149 } else
9150 exit(0);
9151 } else if (pid < 0)
9152 exit(1);
9154 setsid();
9156 pid = fork();
9157 if (pid > 0)
9158 exit(0);
9159 else if (pid < 0)
9160 exit(1);
9162 umask(027);
9164 signal(SIGTSTP, SIG_IGN);
9165 signal(SIGTTOU, SIG_IGN);
9166 signal(SIGTTIN, SIG_IGN);
9168 #endif
9170 if (pid_file && qemu_create_pidfile(pid_file) != 0) {
9171 if (daemonize) {
9172 uint8_t status = 1;
9173 write(fds[1], &status, 1);
9174 } else
9175 fprintf(stderr, "Could not acquire pid file\n");
9176 exit(1);
9179 #ifdef USE_KQEMU
9180 if (smp_cpus > 1)
9181 kqemu_allowed = 0;
9182 #endif
9183 linux_boot = (kernel_filename != NULL);
9184 net_boot = (boot_devices_bitmap >> ('n' - 'a')) & 0xF;
9186 if (!linux_boot && net_boot == 0 &&
9187 !machine->nodisk_ok && nb_drives_opt == 0)
9188 help(1);
9190 if (!linux_boot && *kernel_cmdline != '\0') {
9191 fprintf(stderr, "-append only allowed with -kernel option\n");
9192 exit(1);
9195 if (!linux_boot && initrd_filename != NULL) {
9196 fprintf(stderr, "-initrd only allowed with -kernel option\n");
9197 exit(1);
9200 /* boot to floppy or the default cd if no hard disk defined yet */
9201 if (!boot_devices[0]) {
9202 boot_devices = "cad";
9204 setvbuf(stdout, NULL, _IOLBF, 0);
9206 init_timers();
9207 init_timer_alarm();
9208 if (use_icount && icount_time_shift < 0) {
9209 use_icount = 2;
9210 /* 125MIPS seems a reasonable initial guess at the guest speed.
9211 It will be corrected fairly quickly anyway. */
9212 icount_time_shift = 3;
9213 init_icount_adjust();
9216 #ifdef _WIN32
9217 socket_init();
9218 #endif
9220 /* init network clients */
9221 if (nb_net_clients == 0) {
9222 /* if no clients, we use a default config */
9223 net_clients[nb_net_clients++] = "nic";
9224 #ifdef CONFIG_SLIRP
9225 net_clients[nb_net_clients++] = "user";
9226 #endif
9229 for(i = 0;i < nb_net_clients; i++) {
9230 if (net_client_parse(net_clients[i]) < 0)
9231 exit(1);
9233 for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) {
9234 if (vlan->nb_guest_devs == 0 && vlan->nb_host_devs == 0)
9235 continue;
9236 if (vlan->nb_guest_devs == 0)
9237 fprintf(stderr, "Warning: vlan %d with no nics\n", vlan->id);
9238 if (vlan->nb_host_devs == 0)
9239 fprintf(stderr,
9240 "Warning: vlan %d is not connected to host network\n",
9241 vlan->id);
9244 #ifdef TARGET_I386
9245 /* XXX: this should be moved in the PC machine instantiation code */
9246 if (net_boot != 0) {
9247 int netroms = 0;
9248 for (i = 0; i < nb_nics && i < 4; i++) {
9249 const char *model = nd_table[i].model;
9250 char buf[1024];
9251 if (net_boot & (1 << i)) {
9252 if (model == NULL)
9253 model = "ne2k_pci";
9254 snprintf(buf, sizeof(buf), "%s/pxe-%s.bin", bios_dir, model);
9255 if (get_image_size(buf) > 0) {
9256 if (nb_option_roms >= MAX_OPTION_ROMS) {
9257 fprintf(stderr, "Too many option ROMs\n");
9258 exit(1);
9260 option_rom[nb_option_roms] = strdup(buf);
9261 nb_option_roms++;
9262 netroms++;
9266 if (netroms == 0) {
9267 fprintf(stderr, "No valid PXE rom found for network device\n");
9268 exit(1);
9271 #endif
9273 /* init the memory */
9274 phys_ram_size = machine->ram_require & ~RAMSIZE_FIXED;
9276 if (machine->ram_require & RAMSIZE_FIXED) {
9277 if (ram_size > 0) {
9278 if (ram_size < phys_ram_size) {
9279 fprintf(stderr, "Machine `%s' requires %llu bytes of memory\n",
9280 machine->name, (unsigned long long) phys_ram_size);
9281 exit(-1);
9284 phys_ram_size = ram_size;
9285 } else
9286 ram_size = phys_ram_size;
9287 } else {
9288 if (ram_size == 0)
9289 ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
9291 phys_ram_size += ram_size;
9294 phys_ram_base = qemu_vmalloc(phys_ram_size);
9295 if (!phys_ram_base) {
9296 fprintf(stderr, "Could not allocate physical memory\n");
9297 exit(1);
9300 /* init the dynamic translator */
9301 cpu_exec_init_all(tb_size * 1024 * 1024);
9303 bdrv_init();
9305 /* we always create the cdrom drive, even if no disk is there */
9307 if (nb_drives_opt < MAX_DRIVES)
9308 drive_add(NULL, CDROM_ALIAS);
9310 /* we always create at least one floppy */
9312 if (nb_drives_opt < MAX_DRIVES)
9313 drive_add(NULL, FD_ALIAS, 0);
9315 /* we always create one sd slot, even if no card is in it */
9317 if (nb_drives_opt < MAX_DRIVES)
9318 drive_add(NULL, SD_ALIAS);
9320 /* open the virtual block devices */
9322 for(i = 0; i < nb_drives_opt; i++)
9323 if (drive_init(&drives_opt[i], snapshot, machine) == -1)
9324 exit(1);
9326 register_savevm("timer", 0, 2, timer_save, timer_load, NULL);
9327 register_savevm("ram", 0, 2, ram_save, ram_load, NULL);
9329 /* terminal init */
9330 memset(&display_state, 0, sizeof(display_state));
9331 if (nographic) {
9332 if (curses) {
9333 fprintf(stderr, "fatal: -nographic can't be used with -curses\n");
9334 exit(1);
9336 /* nearly nothing to do */
9337 dumb_display_init(ds);
9338 } else if (vnc_display != NULL) {
9339 vnc_display_init(ds);
9340 if (vnc_display_open(ds, vnc_display) < 0)
9341 exit(1);
9342 } else
9343 #if defined(CONFIG_CURSES)
9344 if (curses) {
9345 curses_display_init(ds, full_screen);
9346 } else
9347 #endif
9349 #if defined(CONFIG_SDL)
9350 sdl_display_init(ds, full_screen, no_frame);
9351 #elif defined(CONFIG_COCOA)
9352 cocoa_display_init(ds, full_screen);
9353 #else
9354 dumb_display_init(ds);
9355 #endif
9358 #ifndef _WIN32
9359 /* must be after terminal init, SDL library changes signal handlers */
9360 termsig_setup();
9361 #endif
9363 /* Maintain compatibility with multiple stdio monitors */
9364 if (!strcmp(monitor_device,"stdio")) {
9365 for (i = 0; i < MAX_SERIAL_PORTS; i++) {
9366 const char *devname = serial_devices[i];
9367 if (devname && !strcmp(devname,"mon:stdio")) {
9368 monitor_device = NULL;
9369 break;
9370 } else if (devname && !strcmp(devname,"stdio")) {
9371 monitor_device = NULL;
9372 serial_devices[i] = "mon:stdio";
9373 break;
9377 if (monitor_device) {
9378 monitor_hd = qemu_chr_open(monitor_device);
9379 if (!monitor_hd) {
9380 fprintf(stderr, "qemu: could not open monitor device '%s'\n", monitor_device);
9381 exit(1);
9383 monitor_init(monitor_hd, !nographic);
9386 for(i = 0; i < MAX_SERIAL_PORTS; i++) {
9387 const char *devname = serial_devices[i];
9388 if (devname && strcmp(devname, "none")) {
9389 serial_hds[i] = qemu_chr_open(devname);
9390 if (!serial_hds[i]) {
9391 fprintf(stderr, "qemu: could not open serial device '%s'\n",
9392 devname);
9393 exit(1);
9395 if (strstart(devname, "vc", 0))
9396 qemu_chr_printf(serial_hds[i], "serial%d console\r\n", i);
9400 for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
9401 const char *devname = parallel_devices[i];
9402 if (devname && strcmp(devname, "none")) {
9403 parallel_hds[i] = qemu_chr_open(devname);
9404 if (!parallel_hds[i]) {
9405 fprintf(stderr, "qemu: could not open parallel device '%s'\n",
9406 devname);
9407 exit(1);
9409 if (strstart(devname, "vc", 0))
9410 qemu_chr_printf(parallel_hds[i], "parallel%d console\r\n", i);
9414 machine->init(ram_size, vga_ram_size, boot_devices, ds,
9415 kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
9417 /* init USB devices */
9418 if (usb_enabled) {
9419 for(i = 0; i < usb_devices_index; i++) {
9420 if (usb_device_add(usb_devices[i]) < 0) {
9421 fprintf(stderr, "Warning: could not add USB device %s\n",
9422 usb_devices[i]);
9427 if (display_state.dpy_refresh) {
9428 display_state.gui_timer = qemu_new_timer(rt_clock, gui_update, &display_state);
9429 qemu_mod_timer(display_state.gui_timer, qemu_get_clock(rt_clock));
9432 #ifdef CONFIG_GDBSTUB
9433 if (use_gdbstub) {
9434 /* XXX: use standard host:port notation and modify options
9435 accordingly. */
9436 if (gdbserver_start(gdbstub_port) < 0) {
9437 fprintf(stderr, "qemu: could not open gdbstub device on port '%s'\n",
9438 gdbstub_port);
9439 exit(1);
9442 #endif
9444 if (loadvm)
9445 do_loadvm(loadvm);
9448 /* XXX: simplify init */
9449 read_passwords();
9450 if (autostart) {
9451 vm_start();
9455 if (daemonize) {
9456 uint8_t status = 0;
9457 ssize_t len;
9458 int fd;
9460 again1:
9461 len = write(fds[1], &status, 1);
9462 if (len == -1 && (errno == EINTR))
9463 goto again1;
9465 if (len != 1)
9466 exit(1);
9468 chdir("/");
9469 TFR(fd = open("/dev/null", O_RDWR));
9470 if (fd == -1)
9471 exit(1);
9473 dup2(fd, 0);
9474 dup2(fd, 1);
9475 dup2(fd, 2);
9477 close(fd);
9480 main_loop();
9481 quit_timers();
9483 #if !defined(_WIN32)
9484 /* close network clients */
9485 for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) {
9486 VLANClientState *vc;
9488 for(vc = vlan->first_client; vc != NULL; vc = vc->next) {
9489 if (vc->fd_read == tap_receive) {
9490 char ifname[64];
9491 TAPState *s = vc->opaque;
9493 if (sscanf(vc->info_str, "tap: ifname=%63s ", ifname) == 1 &&
9494 s->down_script[0])
9495 launch_script(s->down_script, ifname, s->fd);
9497 #if defined(CONFIG_VDE)
9498 if (vc->fd_read == vde_from_qemu) {
9499 VDEState *s = vc->opaque;
9500 vde_close(s->vde);
9502 #endif
9505 #endif
9506 return 0;