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
25 #include "hw/boards.h"
27 #include "hw/pcmcia.h"
29 #include "hw/audiodev.h"
36 #include "qemu-timer.h"
37 #include "qemu-char.h"
39 #include "audio/audio.h"
50 #include <sys/times.h>
55 #include <sys/ioctl.h>
56 #include <sys/socket.h>
57 #include <netinet/in.h>
60 #include <sys/select.h>
61 #include <arpa/inet.h>
67 #elif defined (__GLIBC__) && defined (__FreeBSD_kernel__)
68 #include <freebsd/stdlib.h>
72 #include <linux/if_tun.h>
75 #include <linux/rtc.h>
77 /* For the benefit of older linux systems which don't supply it,
78 we use a local copy of hpet.h. */
79 /* #include <linux/hpet.h> */
82 #include <linux/ppdev.h>
83 #include <linux/parport.h>
86 #include <sys/ethernet.h>
87 #include <sys/sockio.h>
88 #include <netinet/arp.h>
89 #include <netinet/in.h>
90 #include <netinet/in_systm.h>
91 #include <netinet/ip.h>
92 #include <netinet/ip_icmp.h> // must come after ip.h
93 #include <netinet/udp.h>
94 #include <netinet/tcp.h>
101 #include <winsock2.h>
102 int inet_aton(const char *cp
, struct in_addr
*ia
);
105 #if defined(CONFIG_SLIRP)
106 #include "libslirp.h"
111 #include <sys/timeb.h>
112 #include <mmsystem.h>
113 #define getopt_long_only getopt_long
114 #define memalign(align, size) malloc(size)
117 #include "qemu_socket.h"
123 #endif /* CONFIG_SDL */
127 #define main qemu_main
128 #endif /* CONFIG_COCOA */
132 #include "exec-all.h"
134 #define DEFAULT_NETWORK_SCRIPT "/etc/qemu-ifup"
135 #define DEFAULT_NETWORK_DOWN_SCRIPT "/etc/qemu-ifdown"
137 #define SMBD_COMMAND "/usr/sfw/sbin/smbd"
139 #define SMBD_COMMAND "/usr/sbin/smbd"
142 //#define DEBUG_UNUSED_IOPORT
143 //#define DEBUG_IOPORT
146 #define DEFAULT_RAM_SIZE 144
148 #define DEFAULT_RAM_SIZE 128
151 #define GUI_REFRESH_INTERVAL 30
153 /* Max number of USB devices that can be specified on the commandline. */
154 #define MAX_USB_CMDLINE 8
156 /* XXX: use a two level table to limit memory usage */
157 #define MAX_IOPORTS 65536
159 const char *bios_dir
= CONFIG_QEMU_SHAREDIR
;
160 const char *bios_name
= NULL
;
161 void *ioport_opaque
[MAX_IOPORTS
];
162 IOPortReadFunc
*ioport_read_table
[3][MAX_IOPORTS
];
163 IOPortWriteFunc
*ioport_write_table
[3][MAX_IOPORTS
];
164 /* Note: drives_table[MAX_DRIVES] is a dummy block driver if none available
165 to store the VM snapshots */
166 DriveInfo drives_table
[MAX_DRIVES
+1];
168 /* point to the block driver where the snapshots are managed */
169 BlockDriverState
*bs_snapshots
;
171 static DisplayState display_state
;
174 const char* keyboard_layout
= NULL
;
175 int64_t ticks_per_sec
;
177 int pit_min_timer_count
= 0;
179 NICInfo nd_table
[MAX_NICS
];
181 static int rtc_utc
= 1;
182 static int rtc_date_offset
= -1; /* -1 means no change */
183 int cirrus_vga_enabled
= 1;
184 int vmsvga_enabled
= 0;
186 int graphic_width
= 1024;
187 int graphic_height
= 768;
188 int graphic_depth
= 8;
190 int graphic_width
= 800;
191 int graphic_height
= 600;
192 int graphic_depth
= 15;
197 CharDriverState
*serial_hds
[MAX_SERIAL_PORTS
];
198 CharDriverState
*parallel_hds
[MAX_PARALLEL_PORTS
];
200 int win2k_install_hack
= 0;
203 static VLANState
*first_vlan
;
205 const char *vnc_display
;
206 #if defined(TARGET_SPARC)
208 #elif defined(TARGET_I386)
213 int acpi_enabled
= 1;
218 int graphic_rotate
= 0;
220 const char *option_rom
[MAX_OPTION_ROMS
];
222 int semihosting_enabled
= 0;
227 const char *qemu_name
;
230 unsigned int nb_prom_envs
= 0;
231 const char *prom_envs
[MAX_PROM_ENVS
];
237 } drives_opt
[MAX_DRIVES
];
239 static CPUState
*cur_cpu
;
240 static CPUState
*next_cpu
;
241 static int event_pending
= 1;
242 /* Conversion factor from emulated instructions to virtual clock ticks. */
243 static int icount_time_shift
;
244 /* Arbitrarily pick 1MIPS as the minimum allowable speed. */
245 #define MAX_ICOUNT_SHIFT 10
246 /* Compensate for varying guest execution speed. */
247 static int64_t qemu_icount_bias
;
248 QEMUTimer
*icount_rt_timer
;
249 QEMUTimer
*icount_vm_timer
;
251 #define TFR(expr) do { if ((expr) != -1) break; } while (errno == EINTR)
253 /***********************************************************/
254 /* x86 ISA bus support */
256 target_phys_addr_t isa_mem_base
= 0;
259 static uint32_t default_ioport_readb(void *opaque
, uint32_t address
)
261 #ifdef DEBUG_UNUSED_IOPORT
262 fprintf(stderr
, "unused inb: port=0x%04x\n", address
);
267 static void default_ioport_writeb(void *opaque
, uint32_t address
, uint32_t data
)
269 #ifdef DEBUG_UNUSED_IOPORT
270 fprintf(stderr
, "unused outb: port=0x%04x data=0x%02x\n", address
, data
);
274 /* default is to make two byte accesses */
275 static uint32_t default_ioport_readw(void *opaque
, uint32_t address
)
278 data
= ioport_read_table
[0][address
](ioport_opaque
[address
], address
);
279 address
= (address
+ 1) & (MAX_IOPORTS
- 1);
280 data
|= ioport_read_table
[0][address
](ioport_opaque
[address
], address
) << 8;
284 static void default_ioport_writew(void *opaque
, uint32_t address
, uint32_t data
)
286 ioport_write_table
[0][address
](ioport_opaque
[address
], address
, data
& 0xff);
287 address
= (address
+ 1) & (MAX_IOPORTS
- 1);
288 ioport_write_table
[0][address
](ioport_opaque
[address
], address
, (data
>> 8) & 0xff);
291 static uint32_t default_ioport_readl(void *opaque
, uint32_t address
)
293 #ifdef DEBUG_UNUSED_IOPORT
294 fprintf(stderr
, "unused inl: port=0x%04x\n", address
);
299 static void default_ioport_writel(void *opaque
, uint32_t address
, uint32_t data
)
301 #ifdef DEBUG_UNUSED_IOPORT
302 fprintf(stderr
, "unused outl: port=0x%04x data=0x%02x\n", address
, data
);
306 static void init_ioports(void)
310 for(i
= 0; i
< MAX_IOPORTS
; i
++) {
311 ioport_read_table
[0][i
] = default_ioport_readb
;
312 ioport_write_table
[0][i
] = default_ioport_writeb
;
313 ioport_read_table
[1][i
] = default_ioport_readw
;
314 ioport_write_table
[1][i
] = default_ioport_writew
;
315 ioport_read_table
[2][i
] = default_ioport_readl
;
316 ioport_write_table
[2][i
] = default_ioport_writel
;
320 /* size is the word size in byte */
321 int register_ioport_read(int start
, int length
, int size
,
322 IOPortReadFunc
*func
, void *opaque
)
328 } else if (size
== 2) {
330 } else if (size
== 4) {
333 hw_error("register_ioport_read: invalid size");
336 for(i
= start
; i
< start
+ length
; i
+= size
) {
337 ioport_read_table
[bsize
][i
] = func
;
338 if (ioport_opaque
[i
] != NULL
&& ioport_opaque
[i
] != opaque
)
339 hw_error("register_ioport_read: invalid opaque");
340 ioport_opaque
[i
] = opaque
;
345 /* size is the word size in byte */
346 int register_ioport_write(int start
, int length
, int size
,
347 IOPortWriteFunc
*func
, void *opaque
)
353 } else if (size
== 2) {
355 } else if (size
== 4) {
358 hw_error("register_ioport_write: invalid size");
361 for(i
= start
; i
< start
+ length
; i
+= size
) {
362 ioport_write_table
[bsize
][i
] = func
;
363 if (ioport_opaque
[i
] != NULL
&& ioport_opaque
[i
] != opaque
)
364 hw_error("register_ioport_write: invalid opaque");
365 ioport_opaque
[i
] = opaque
;
370 void isa_unassign_ioport(int start
, int length
)
374 for(i
= start
; i
< start
+ length
; i
++) {
375 ioport_read_table
[0][i
] = default_ioport_readb
;
376 ioport_read_table
[1][i
] = default_ioport_readw
;
377 ioport_read_table
[2][i
] = default_ioport_readl
;
379 ioport_write_table
[0][i
] = default_ioport_writeb
;
380 ioport_write_table
[1][i
] = default_ioport_writew
;
381 ioport_write_table
[2][i
] = default_ioport_writel
;
385 /***********************************************************/
387 void cpu_outb(CPUState
*env
, int addr
, int val
)
390 if (loglevel
& CPU_LOG_IOPORT
)
391 fprintf(logfile
, "outb: %04x %02x\n", addr
, val
);
393 ioport_write_table
[0][addr
](ioport_opaque
[addr
], addr
, val
);
396 env
->last_io_time
= cpu_get_time_fast();
400 void cpu_outw(CPUState
*env
, int addr
, int val
)
403 if (loglevel
& CPU_LOG_IOPORT
)
404 fprintf(logfile
, "outw: %04x %04x\n", addr
, val
);
406 ioport_write_table
[1][addr
](ioport_opaque
[addr
], addr
, val
);
409 env
->last_io_time
= cpu_get_time_fast();
413 void cpu_outl(CPUState
*env
, int addr
, int val
)
416 if (loglevel
& CPU_LOG_IOPORT
)
417 fprintf(logfile
, "outl: %04x %08x\n", addr
, val
);
419 ioport_write_table
[2][addr
](ioport_opaque
[addr
], addr
, val
);
422 env
->last_io_time
= cpu_get_time_fast();
426 int cpu_inb(CPUState
*env
, int addr
)
429 val
= ioport_read_table
[0][addr
](ioport_opaque
[addr
], addr
);
431 if (loglevel
& CPU_LOG_IOPORT
)
432 fprintf(logfile
, "inb : %04x %02x\n", addr
, val
);
436 env
->last_io_time
= cpu_get_time_fast();
441 int cpu_inw(CPUState
*env
, int addr
)
444 val
= ioport_read_table
[1][addr
](ioport_opaque
[addr
], addr
);
446 if (loglevel
& CPU_LOG_IOPORT
)
447 fprintf(logfile
, "inw : %04x %04x\n", addr
, val
);
451 env
->last_io_time
= cpu_get_time_fast();
456 int cpu_inl(CPUState
*env
, int addr
)
459 val
= ioport_read_table
[2][addr
](ioport_opaque
[addr
], addr
);
461 if (loglevel
& CPU_LOG_IOPORT
)
462 fprintf(logfile
, "inl : %04x %08x\n", addr
, val
);
466 env
->last_io_time
= cpu_get_time_fast();
471 /***********************************************************/
472 void hw_error(const char *fmt
, ...)
478 fprintf(stderr
, "qemu: hardware error: ");
479 vfprintf(stderr
, fmt
, ap
);
480 fprintf(stderr
, "\n");
481 for(env
= first_cpu
; env
!= NULL
; env
= env
->next_cpu
) {
482 fprintf(stderr
, "CPU #%d:\n", env
->cpu_index
);
484 cpu_dump_state(env
, stderr
, fprintf
, X86_DUMP_FPU
);
486 cpu_dump_state(env
, stderr
, fprintf
, 0);
493 /***********************************************************/
496 static QEMUPutKBDEvent
*qemu_put_kbd_event
;
497 static void *qemu_put_kbd_event_opaque
;
498 static QEMUPutMouseEntry
*qemu_put_mouse_event_head
;
499 static QEMUPutMouseEntry
*qemu_put_mouse_event_current
;
501 void qemu_add_kbd_event_handler(QEMUPutKBDEvent
*func
, void *opaque
)
503 qemu_put_kbd_event_opaque
= opaque
;
504 qemu_put_kbd_event
= func
;
507 QEMUPutMouseEntry
*qemu_add_mouse_event_handler(QEMUPutMouseEvent
*func
,
508 void *opaque
, int absolute
,
511 QEMUPutMouseEntry
*s
, *cursor
;
513 s
= qemu_mallocz(sizeof(QEMUPutMouseEntry
));
517 s
->qemu_put_mouse_event
= func
;
518 s
->qemu_put_mouse_event_opaque
= opaque
;
519 s
->qemu_put_mouse_event_absolute
= absolute
;
520 s
->qemu_put_mouse_event_name
= qemu_strdup(name
);
523 if (!qemu_put_mouse_event_head
) {
524 qemu_put_mouse_event_head
= qemu_put_mouse_event_current
= s
;
528 cursor
= qemu_put_mouse_event_head
;
529 while (cursor
->next
!= NULL
)
530 cursor
= cursor
->next
;
533 qemu_put_mouse_event_current
= s
;
538 void qemu_remove_mouse_event_handler(QEMUPutMouseEntry
*entry
)
540 QEMUPutMouseEntry
*prev
= NULL
, *cursor
;
542 if (!qemu_put_mouse_event_head
|| entry
== NULL
)
545 cursor
= qemu_put_mouse_event_head
;
546 while (cursor
!= NULL
&& cursor
!= entry
) {
548 cursor
= cursor
->next
;
551 if (cursor
== NULL
) // does not exist or list empty
553 else if (prev
== NULL
) { // entry is head
554 qemu_put_mouse_event_head
= cursor
->next
;
555 if (qemu_put_mouse_event_current
== entry
)
556 qemu_put_mouse_event_current
= cursor
->next
;
557 qemu_free(entry
->qemu_put_mouse_event_name
);
562 prev
->next
= entry
->next
;
564 if (qemu_put_mouse_event_current
== entry
)
565 qemu_put_mouse_event_current
= prev
;
567 qemu_free(entry
->qemu_put_mouse_event_name
);
571 void kbd_put_keycode(int keycode
)
573 if (qemu_put_kbd_event
) {
574 qemu_put_kbd_event(qemu_put_kbd_event_opaque
, keycode
);
578 void kbd_mouse_event(int dx
, int dy
, int dz
, int buttons_state
)
580 QEMUPutMouseEvent
*mouse_event
;
581 void *mouse_event_opaque
;
584 if (!qemu_put_mouse_event_current
) {
589 qemu_put_mouse_event_current
->qemu_put_mouse_event
;
591 qemu_put_mouse_event_current
->qemu_put_mouse_event_opaque
;
594 if (graphic_rotate
) {
595 if (qemu_put_mouse_event_current
->qemu_put_mouse_event_absolute
)
598 width
= graphic_width
- 1;
599 mouse_event(mouse_event_opaque
,
600 width
- dy
, dx
, dz
, buttons_state
);
602 mouse_event(mouse_event_opaque
,
603 dx
, dy
, dz
, buttons_state
);
607 int kbd_mouse_is_absolute(void)
609 if (!qemu_put_mouse_event_current
)
612 return qemu_put_mouse_event_current
->qemu_put_mouse_event_absolute
;
615 void do_info_mice(void)
617 QEMUPutMouseEntry
*cursor
;
620 if (!qemu_put_mouse_event_head
) {
621 term_printf("No mouse devices connected\n");
625 term_printf("Mouse devices available:\n");
626 cursor
= qemu_put_mouse_event_head
;
627 while (cursor
!= NULL
) {
628 term_printf("%c Mouse #%d: %s\n",
629 (cursor
== qemu_put_mouse_event_current
? '*' : ' '),
630 index
, cursor
->qemu_put_mouse_event_name
);
632 cursor
= cursor
->next
;
636 void do_mouse_set(int index
)
638 QEMUPutMouseEntry
*cursor
;
641 if (!qemu_put_mouse_event_head
) {
642 term_printf("No mouse devices connected\n");
646 cursor
= qemu_put_mouse_event_head
;
647 while (cursor
!= NULL
&& index
!= i
) {
649 cursor
= cursor
->next
;
653 qemu_put_mouse_event_current
= cursor
;
655 term_printf("Mouse at given index not found\n");
658 /* compute with 96 bit intermediate result: (a*b)/c */
659 uint64_t muldiv64(uint64_t a
, uint32_t b
, uint32_t c
)
664 #ifdef WORDS_BIGENDIAN
674 rl
= (uint64_t)u
.l
.low
* (uint64_t)b
;
675 rh
= (uint64_t)u
.l
.high
* (uint64_t)b
;
678 res
.l
.low
= (((rh
% c
) << 32) + (rl
& 0xffffffff)) / c
;
682 /***********************************************************/
683 /* real time host monotonic timer */
685 #define QEMU_TIMER_BASE 1000000000LL
689 static int64_t clock_freq
;
691 static void init_get_clock(void)
695 ret
= QueryPerformanceFrequency(&freq
);
697 fprintf(stderr
, "Could not calibrate ticks\n");
700 clock_freq
= freq
.QuadPart
;
703 static int64_t get_clock(void)
706 QueryPerformanceCounter(&ti
);
707 return muldiv64(ti
.QuadPart
, QEMU_TIMER_BASE
, clock_freq
);
712 static int use_rt_clock
;
714 static void init_get_clock(void)
717 #if defined(__linux__)
720 if (clock_gettime(CLOCK_MONOTONIC
, &ts
) == 0) {
727 static int64_t get_clock(void)
729 #if defined(__linux__)
732 clock_gettime(CLOCK_MONOTONIC
, &ts
);
733 return ts
.tv_sec
* 1000000000LL + ts
.tv_nsec
;
737 /* XXX: using gettimeofday leads to problems if the date
738 changes, so it should be avoided. */
740 gettimeofday(&tv
, NULL
);
741 return tv
.tv_sec
* 1000000000LL + (tv
.tv_usec
* 1000);
746 /* Return the virtual CPU time, based on the instruction counter. */
747 static int64_t cpu_get_icount(void)
750 CPUState
*env
= cpu_single_env
;;
751 icount
= qemu_icount
;
754 fprintf(stderr
, "Bad clock read\n");
755 icount
-= (env
->icount_decr
.u16
.low
+ env
->icount_extra
);
757 return qemu_icount_bias
+ (icount
<< icount_time_shift
);
760 /***********************************************************/
761 /* guest cycle counter */
763 static int64_t cpu_ticks_prev
;
764 static int64_t cpu_ticks_offset
;
765 static int64_t cpu_clock_offset
;
766 static int cpu_ticks_enabled
;
768 /* return the host CPU cycle counter and handle stop/restart */
769 int64_t cpu_get_ticks(void)
772 return cpu_get_icount();
774 if (!cpu_ticks_enabled
) {
775 return cpu_ticks_offset
;
778 ticks
= cpu_get_real_ticks();
779 if (cpu_ticks_prev
> ticks
) {
780 /* Note: non increasing ticks may happen if the host uses
782 cpu_ticks_offset
+= cpu_ticks_prev
- ticks
;
784 cpu_ticks_prev
= ticks
;
785 return ticks
+ cpu_ticks_offset
;
789 /* return the host CPU monotonic timer and handle stop/restart */
790 static int64_t cpu_get_clock(void)
793 if (!cpu_ticks_enabled
) {
794 return cpu_clock_offset
;
797 return ti
+ cpu_clock_offset
;
801 /* enable cpu_get_ticks() */
802 void cpu_enable_ticks(void)
804 if (!cpu_ticks_enabled
) {
805 cpu_ticks_offset
-= cpu_get_real_ticks();
806 cpu_clock_offset
-= get_clock();
807 cpu_ticks_enabled
= 1;
811 /* disable cpu_get_ticks() : the clock is stopped. You must not call
812 cpu_get_ticks() after that. */
813 void cpu_disable_ticks(void)
815 if (cpu_ticks_enabled
) {
816 cpu_ticks_offset
= cpu_get_ticks();
817 cpu_clock_offset
= cpu_get_clock();
818 cpu_ticks_enabled
= 0;
822 /***********************************************************/
825 #define QEMU_TIMER_REALTIME 0
826 #define QEMU_TIMER_VIRTUAL 1
830 /* XXX: add frequency */
838 struct QEMUTimer
*next
;
841 struct qemu_alarm_timer
{
845 int (*start
)(struct qemu_alarm_timer
*t
);
846 void (*stop
)(struct qemu_alarm_timer
*t
);
847 void (*rearm
)(struct qemu_alarm_timer
*t
);
851 #define ALARM_FLAG_DYNTICKS 0x1
852 #define ALARM_FLAG_EXPIRED 0x2
854 static inline int alarm_has_dynticks(struct qemu_alarm_timer
*t
)
856 return t
->flags
& ALARM_FLAG_DYNTICKS
;
859 static void qemu_rearm_alarm_timer(struct qemu_alarm_timer
*t
)
861 if (!alarm_has_dynticks(t
))
867 /* TODO: MIN_TIMER_REARM_US should be optimized */
868 #define MIN_TIMER_REARM_US 250
870 static struct qemu_alarm_timer
*alarm_timer
;
874 struct qemu_alarm_win32
{
878 } alarm_win32_data
= {0, NULL
, -1};
880 static int win32_start_timer(struct qemu_alarm_timer
*t
);
881 static void win32_stop_timer(struct qemu_alarm_timer
*t
);
882 static void win32_rearm_timer(struct qemu_alarm_timer
*t
);
886 static int unix_start_timer(struct qemu_alarm_timer
*t
);
887 static void unix_stop_timer(struct qemu_alarm_timer
*t
);
891 static int dynticks_start_timer(struct qemu_alarm_timer
*t
);
892 static void dynticks_stop_timer(struct qemu_alarm_timer
*t
);
893 static void dynticks_rearm_timer(struct qemu_alarm_timer
*t
);
895 static int hpet_start_timer(struct qemu_alarm_timer
*t
);
896 static void hpet_stop_timer(struct qemu_alarm_timer
*t
);
898 static int rtc_start_timer(struct qemu_alarm_timer
*t
);
899 static void rtc_stop_timer(struct qemu_alarm_timer
*t
);
901 #endif /* __linux__ */
905 /* Correlation between real and virtual time is always going to be
906 fairly approximate, so ignore small variation.
907 When the guest is idle real and virtual time will be aligned in
909 #define ICOUNT_WOBBLE (QEMU_TIMER_BASE / 10)
911 static void icount_adjust(void)
916 static int64_t last_delta
;
917 /* If the VM is not running, then do nothing. */
921 cur_time
= cpu_get_clock();
922 cur_icount
= qemu_get_clock(vm_clock
);
923 delta
= cur_icount
- cur_time
;
924 /* FIXME: This is a very crude algorithm, somewhat prone to oscillation. */
926 && last_delta
+ ICOUNT_WOBBLE
< delta
* 2
927 && icount_time_shift
> 0) {
928 /* The guest is getting too far ahead. Slow time down. */
932 && last_delta
- ICOUNT_WOBBLE
> delta
* 2
933 && icount_time_shift
< MAX_ICOUNT_SHIFT
) {
934 /* The guest is getting too far behind. Speed time up. */
938 qemu_icount_bias
= cur_icount
- (qemu_icount
<< icount_time_shift
);
941 static void icount_adjust_rt(void * opaque
)
943 qemu_mod_timer(icount_rt_timer
,
944 qemu_get_clock(rt_clock
) + 1000);
948 static void icount_adjust_vm(void * opaque
)
950 qemu_mod_timer(icount_vm_timer
,
951 qemu_get_clock(vm_clock
) + QEMU_TIMER_BASE
/ 10);
955 static void init_icount_adjust(void)
957 /* Have both realtime and virtual time triggers for speed adjustment.
958 The realtime trigger catches emulated time passing too slowly,
959 the virtual time trigger catches emulated time passing too fast.
960 Realtime triggers occur even when idle, so use them less frequently
962 icount_rt_timer
= qemu_new_timer(rt_clock
, icount_adjust_rt
, NULL
);
963 qemu_mod_timer(icount_rt_timer
,
964 qemu_get_clock(rt_clock
) + 1000);
965 icount_vm_timer
= qemu_new_timer(vm_clock
, icount_adjust_vm
, NULL
);
966 qemu_mod_timer(icount_vm_timer
,
967 qemu_get_clock(vm_clock
) + QEMU_TIMER_BASE
/ 10);
970 static struct qemu_alarm_timer alarm_timers
[] = {
973 {"dynticks", ALARM_FLAG_DYNTICKS
, dynticks_start_timer
,
974 dynticks_stop_timer
, dynticks_rearm_timer
, NULL
},
975 /* HPET - if available - is preferred */
976 {"hpet", 0, hpet_start_timer
, hpet_stop_timer
, NULL
, NULL
},
977 /* ...otherwise try RTC */
978 {"rtc", 0, rtc_start_timer
, rtc_stop_timer
, NULL
, NULL
},
980 {"unix", 0, unix_start_timer
, unix_stop_timer
, NULL
, NULL
},
982 {"dynticks", ALARM_FLAG_DYNTICKS
, win32_start_timer
,
983 win32_stop_timer
, win32_rearm_timer
, &alarm_win32_data
},
984 {"win32", 0, win32_start_timer
,
985 win32_stop_timer
, NULL
, &alarm_win32_data
},
990 static void show_available_alarms(void)
994 printf("Available alarm timers, in order of precedence:\n");
995 for (i
= 0; alarm_timers
[i
].name
; i
++)
996 printf("%s\n", alarm_timers
[i
].name
);
999 static void configure_alarms(char const *opt
)
1003 int count
= (sizeof(alarm_timers
) / sizeof(*alarm_timers
)) - 1;
1006 struct qemu_alarm_timer tmp
;
1008 if (!strcmp(opt
, "?")) {
1009 show_available_alarms();
1015 /* Reorder the array */
1016 name
= strtok(arg
, ",");
1018 for (i
= 0; i
< count
&& alarm_timers
[i
].name
; i
++) {
1019 if (!strcmp(alarm_timers
[i
].name
, name
))
1024 fprintf(stderr
, "Unknown clock %s\n", name
);
1033 tmp
= alarm_timers
[i
];
1034 alarm_timers
[i
] = alarm_timers
[cur
];
1035 alarm_timers
[cur
] = tmp
;
1039 name
= strtok(NULL
, ",");
1045 /* Disable remaining timers */
1046 for (i
= cur
; i
< count
; i
++)
1047 alarm_timers
[i
].name
= NULL
;
1049 show_available_alarms();
1054 QEMUClock
*rt_clock
;
1055 QEMUClock
*vm_clock
;
1057 static QEMUTimer
*active_timers
[2];
1059 static QEMUClock
*qemu_new_clock(int type
)
1062 clock
= qemu_mallocz(sizeof(QEMUClock
));
1069 QEMUTimer
*qemu_new_timer(QEMUClock
*clock
, QEMUTimerCB
*cb
, void *opaque
)
1073 ts
= qemu_mallocz(sizeof(QEMUTimer
));
1076 ts
->opaque
= opaque
;
1080 void qemu_free_timer(QEMUTimer
*ts
)
1085 /* stop a timer, but do not dealloc it */
1086 void qemu_del_timer(QEMUTimer
*ts
)
1090 /* NOTE: this code must be signal safe because
1091 qemu_timer_expired() can be called from a signal. */
1092 pt
= &active_timers
[ts
->clock
->type
];
1105 /* modify the current timer so that it will be fired when current_time
1106 >= expire_time. The corresponding callback will be called. */
1107 void qemu_mod_timer(QEMUTimer
*ts
, int64_t expire_time
)
1113 /* add the timer in the sorted list */
1114 /* NOTE: this code must be signal safe because
1115 qemu_timer_expired() can be called from a signal. */
1116 pt
= &active_timers
[ts
->clock
->type
];
1121 if (t
->expire_time
> expire_time
)
1125 ts
->expire_time
= expire_time
;
1129 /* Rearm if necessary */
1130 if (pt
== &active_timers
[ts
->clock
->type
]) {
1131 if ((alarm_timer
->flags
& ALARM_FLAG_EXPIRED
) == 0) {
1132 qemu_rearm_alarm_timer(alarm_timer
);
1134 /* Interrupt execution to force deadline recalculation. */
1135 if (use_icount
&& cpu_single_env
) {
1136 cpu_interrupt(cpu_single_env
, CPU_INTERRUPT_EXIT
);
1141 int qemu_timer_pending(QEMUTimer
*ts
)
1144 for(t
= active_timers
[ts
->clock
->type
]; t
!= NULL
; t
= t
->next
) {
1151 static inline int qemu_timer_expired(QEMUTimer
*timer_head
, int64_t current_time
)
1155 return (timer_head
->expire_time
<= current_time
);
1158 static void qemu_run_timers(QEMUTimer
**ptimer_head
, int64_t current_time
)
1164 if (!ts
|| ts
->expire_time
> current_time
)
1166 /* remove timer from the list before calling the callback */
1167 *ptimer_head
= ts
->next
;
1170 /* run the callback (the timer list can be modified) */
1175 int64_t qemu_get_clock(QEMUClock
*clock
)
1177 switch(clock
->type
) {
1178 case QEMU_TIMER_REALTIME
:
1179 return get_clock() / 1000000;
1181 case QEMU_TIMER_VIRTUAL
:
1183 return cpu_get_icount();
1185 return cpu_get_clock();
1190 static void init_timers(void)
1193 ticks_per_sec
= QEMU_TIMER_BASE
;
1194 rt_clock
= qemu_new_clock(QEMU_TIMER_REALTIME
);
1195 vm_clock
= qemu_new_clock(QEMU_TIMER_VIRTUAL
);
1199 void qemu_put_timer(QEMUFile
*f
, QEMUTimer
*ts
)
1201 uint64_t expire_time
;
1203 if (qemu_timer_pending(ts
)) {
1204 expire_time
= ts
->expire_time
;
1208 qemu_put_be64(f
, expire_time
);
1211 void qemu_get_timer(QEMUFile
*f
, QEMUTimer
*ts
)
1213 uint64_t expire_time
;
1215 expire_time
= qemu_get_be64(f
);
1216 if (expire_time
!= -1) {
1217 qemu_mod_timer(ts
, expire_time
);
1223 static void timer_save(QEMUFile
*f
, void *opaque
)
1225 if (cpu_ticks_enabled
) {
1226 hw_error("cannot save state if virtual timers are running");
1228 qemu_put_be64(f
, cpu_ticks_offset
);
1229 qemu_put_be64(f
, ticks_per_sec
);
1230 qemu_put_be64(f
, cpu_clock_offset
);
1233 static int timer_load(QEMUFile
*f
, void *opaque
, int version_id
)
1235 if (version_id
!= 1 && version_id
!= 2)
1237 if (cpu_ticks_enabled
) {
1240 cpu_ticks_offset
=qemu_get_be64(f
);
1241 ticks_per_sec
=qemu_get_be64(f
);
1242 if (version_id
== 2) {
1243 cpu_clock_offset
=qemu_get_be64(f
);
1249 void CALLBACK
host_alarm_handler(UINT uTimerID
, UINT uMsg
,
1250 DWORD_PTR dwUser
, DWORD_PTR dw1
, DWORD_PTR dw2
)
1252 static void host_alarm_handler(int host_signum
)
1256 #define DISP_FREQ 1000
1258 static int64_t delta_min
= INT64_MAX
;
1259 static int64_t delta_max
, delta_cum
, last_clock
, delta
, ti
;
1261 ti
= qemu_get_clock(vm_clock
);
1262 if (last_clock
!= 0) {
1263 delta
= ti
- last_clock
;
1264 if (delta
< delta_min
)
1266 if (delta
> delta_max
)
1269 if (++count
== DISP_FREQ
) {
1270 printf("timer: min=%" PRId64
" us max=%" PRId64
" us avg=%" PRId64
" us avg_freq=%0.3f Hz\n",
1271 muldiv64(delta_min
, 1000000, ticks_per_sec
),
1272 muldiv64(delta_max
, 1000000, ticks_per_sec
),
1273 muldiv64(delta_cum
, 1000000 / DISP_FREQ
, ticks_per_sec
),
1274 (double)ticks_per_sec
/ ((double)delta_cum
/ DISP_FREQ
));
1276 delta_min
= INT64_MAX
;
1284 if (alarm_has_dynticks(alarm_timer
) ||
1286 qemu_timer_expired(active_timers
[QEMU_TIMER_VIRTUAL
],
1287 qemu_get_clock(vm_clock
))) ||
1288 qemu_timer_expired(active_timers
[QEMU_TIMER_REALTIME
],
1289 qemu_get_clock(rt_clock
))) {
1291 struct qemu_alarm_win32
*data
= ((struct qemu_alarm_timer
*)dwUser
)->priv
;
1292 SetEvent(data
->host_alarm
);
1294 CPUState
*env
= next_cpu
;
1296 alarm_timer
->flags
|= ALARM_FLAG_EXPIRED
;
1299 /* stop the currently executing cpu because a timer occured */
1300 cpu_interrupt(env
, CPU_INTERRUPT_EXIT
);
1302 if (env
->kqemu_enabled
) {
1303 kqemu_cpu_interrupt(env
);
1311 static int64_t qemu_next_deadline(void)
1315 if (active_timers
[QEMU_TIMER_VIRTUAL
]) {
1316 delta
= active_timers
[QEMU_TIMER_VIRTUAL
]->expire_time
-
1317 qemu_get_clock(vm_clock
);
1319 /* To avoid problems with overflow limit this to 2^32. */
1329 static uint64_t qemu_next_deadline_dyntick(void)
1337 delta
= (qemu_next_deadline() + 999) / 1000;
1339 if (active_timers
[QEMU_TIMER_REALTIME
]) {
1340 rtdelta
= (active_timers
[QEMU_TIMER_REALTIME
]->expire_time
-
1341 qemu_get_clock(rt_clock
))*1000;
1342 if (rtdelta
< delta
)
1346 if (delta
< MIN_TIMER_REARM_US
)
1347 delta
= MIN_TIMER_REARM_US
;
1354 #if defined(__linux__)
1356 #define RTC_FREQ 1024
1358 static void enable_sigio_timer(int fd
)
1360 struct sigaction act
;
1363 sigfillset(&act
.sa_mask
);
1365 act
.sa_handler
= host_alarm_handler
;
1367 sigaction(SIGIO
, &act
, NULL
);
1368 fcntl(fd
, F_SETFL
, O_ASYNC
);
1369 fcntl(fd
, F_SETOWN
, getpid());
1372 static int hpet_start_timer(struct qemu_alarm_timer
*t
)
1374 struct hpet_info info
;
1377 fd
= open("/dev/hpet", O_RDONLY
);
1382 r
= ioctl(fd
, HPET_IRQFREQ
, RTC_FREQ
);
1384 fprintf(stderr
, "Could not configure '/dev/hpet' to have a 1024Hz timer. This is not a fatal\n"
1385 "error, but for better emulation accuracy type:\n"
1386 "'echo 1024 > /proc/sys/dev/hpet/max-user-freq' as root.\n");
1390 /* Check capabilities */
1391 r
= ioctl(fd
, HPET_INFO
, &info
);
1395 /* Enable periodic mode */
1396 r
= ioctl(fd
, HPET_EPI
, 0);
1397 if (info
.hi_flags
&& (r
< 0))
1400 /* Enable interrupt */
1401 r
= ioctl(fd
, HPET_IE_ON
, 0);
1405 enable_sigio_timer(fd
);
1406 t
->priv
= (void *)(long)fd
;
1414 static void hpet_stop_timer(struct qemu_alarm_timer
*t
)
1416 int fd
= (long)t
->priv
;
1421 static int rtc_start_timer(struct qemu_alarm_timer
*t
)
1424 unsigned long current_rtc_freq
= 0;
1426 TFR(rtc_fd
= open("/dev/rtc", O_RDONLY
));
1429 ioctl(rtc_fd
, RTC_IRQP_READ
, ¤t_rtc_freq
);
1430 if (current_rtc_freq
!= RTC_FREQ
&&
1431 ioctl(rtc_fd
, RTC_IRQP_SET
, RTC_FREQ
) < 0) {
1432 fprintf(stderr
, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n"
1433 "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n"
1434 "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n");
1437 if (ioctl(rtc_fd
, RTC_PIE_ON
, 0) < 0) {
1443 enable_sigio_timer(rtc_fd
);
1445 t
->priv
= (void *)(long)rtc_fd
;
1450 static void rtc_stop_timer(struct qemu_alarm_timer
*t
)
1452 int rtc_fd
= (long)t
->priv
;
1457 static int dynticks_start_timer(struct qemu_alarm_timer
*t
)
1461 struct sigaction act
;
1463 sigfillset(&act
.sa_mask
);
1465 act
.sa_handler
= host_alarm_handler
;
1467 sigaction(SIGALRM
, &act
, NULL
);
1469 ev
.sigev_value
.sival_int
= 0;
1470 ev
.sigev_notify
= SIGEV_SIGNAL
;
1471 ev
.sigev_signo
= SIGALRM
;
1473 if (timer_create(CLOCK_REALTIME
, &ev
, &host_timer
)) {
1474 perror("timer_create");
1476 /* disable dynticks */
1477 fprintf(stderr
, "Dynamic Ticks disabled\n");
1482 t
->priv
= (void *)host_timer
;
1487 static void dynticks_stop_timer(struct qemu_alarm_timer
*t
)
1489 timer_t host_timer
= (timer_t
)t
->priv
;
1491 timer_delete(host_timer
);
1494 static void dynticks_rearm_timer(struct qemu_alarm_timer
*t
)
1496 timer_t host_timer
= (timer_t
)t
->priv
;
1497 struct itimerspec timeout
;
1498 int64_t nearest_delta_us
= INT64_MAX
;
1501 if (!active_timers
[QEMU_TIMER_REALTIME
] &&
1502 !active_timers
[QEMU_TIMER_VIRTUAL
])
1505 nearest_delta_us
= qemu_next_deadline_dyntick();
1507 /* check whether a timer is already running */
1508 if (timer_gettime(host_timer
, &timeout
)) {
1510 fprintf(stderr
, "Internal timer error: aborting\n");
1513 current_us
= timeout
.it_value
.tv_sec
* 1000000 + timeout
.it_value
.tv_nsec
/1000;
1514 if (current_us
&& current_us
<= nearest_delta_us
)
1517 timeout
.it_interval
.tv_sec
= 0;
1518 timeout
.it_interval
.tv_nsec
= 0; /* 0 for one-shot timer */
1519 timeout
.it_value
.tv_sec
= nearest_delta_us
/ 1000000;
1520 timeout
.it_value
.tv_nsec
= (nearest_delta_us
% 1000000) * 1000;
1521 if (timer_settime(host_timer
, 0 /* RELATIVE */, &timeout
, NULL
)) {
1523 fprintf(stderr
, "Internal timer error: aborting\n");
1528 #endif /* defined(__linux__) */
1530 static int unix_start_timer(struct qemu_alarm_timer
*t
)
1532 struct sigaction act
;
1533 struct itimerval itv
;
1537 sigfillset(&act
.sa_mask
);
1539 act
.sa_handler
= host_alarm_handler
;
1541 sigaction(SIGALRM
, &act
, NULL
);
1543 itv
.it_interval
.tv_sec
= 0;
1544 /* for i386 kernel 2.6 to get 1 ms */
1545 itv
.it_interval
.tv_usec
= 999;
1546 itv
.it_value
.tv_sec
= 0;
1547 itv
.it_value
.tv_usec
= 10 * 1000;
1549 err
= setitimer(ITIMER_REAL
, &itv
, NULL
);
1556 static void unix_stop_timer(struct qemu_alarm_timer
*t
)
1558 struct itimerval itv
;
1560 memset(&itv
, 0, sizeof(itv
));
1561 setitimer(ITIMER_REAL
, &itv
, NULL
);
1564 #endif /* !defined(_WIN32) */
1568 static int win32_start_timer(struct qemu_alarm_timer
*t
)
1571 struct qemu_alarm_win32
*data
= t
->priv
;
1574 data
->host_alarm
= CreateEvent(NULL
, FALSE
, FALSE
, NULL
);
1575 if (!data
->host_alarm
) {
1576 perror("Failed CreateEvent");
1580 memset(&tc
, 0, sizeof(tc
));
1581 timeGetDevCaps(&tc
, sizeof(tc
));
1583 if (data
->period
< tc
.wPeriodMin
)
1584 data
->period
= tc
.wPeriodMin
;
1586 timeBeginPeriod(data
->period
);
1588 flags
= TIME_CALLBACK_FUNCTION
;
1589 if (alarm_has_dynticks(t
))
1590 flags
|= TIME_ONESHOT
;
1592 flags
|= TIME_PERIODIC
;
1594 data
->timerId
= timeSetEvent(1, // interval (ms)
1595 data
->period
, // resolution
1596 host_alarm_handler
, // function
1597 (DWORD
)t
, // parameter
1600 if (!data
->timerId
) {
1601 perror("Failed to initialize win32 alarm timer");
1603 timeEndPeriod(data
->period
);
1604 CloseHandle(data
->host_alarm
);
1608 qemu_add_wait_object(data
->host_alarm
, NULL
, NULL
);
1613 static void win32_stop_timer(struct qemu_alarm_timer
*t
)
1615 struct qemu_alarm_win32
*data
= t
->priv
;
1617 timeKillEvent(data
->timerId
);
1618 timeEndPeriod(data
->period
);
1620 CloseHandle(data
->host_alarm
);
1623 static void win32_rearm_timer(struct qemu_alarm_timer
*t
)
1625 struct qemu_alarm_win32
*data
= t
->priv
;
1626 uint64_t nearest_delta_us
;
1628 if (!active_timers
[QEMU_TIMER_REALTIME
] &&
1629 !active_timers
[QEMU_TIMER_VIRTUAL
])
1632 nearest_delta_us
= qemu_next_deadline_dyntick();
1633 nearest_delta_us
/= 1000;
1635 timeKillEvent(data
->timerId
);
1637 data
->timerId
= timeSetEvent(1,
1641 TIME_ONESHOT
| TIME_PERIODIC
);
1643 if (!data
->timerId
) {
1644 perror("Failed to re-arm win32 alarm timer");
1646 timeEndPeriod(data
->period
);
1647 CloseHandle(data
->host_alarm
);
1654 static void init_timer_alarm(void)
1656 struct qemu_alarm_timer
*t
;
1659 for (i
= 0; alarm_timers
[i
].name
; i
++) {
1660 t
= &alarm_timers
[i
];
1668 fprintf(stderr
, "Unable to find any suitable alarm timer.\n");
1669 fprintf(stderr
, "Terminating\n");
1676 static void quit_timers(void)
1678 alarm_timer
->stop(alarm_timer
);
1682 /***********************************************************/
1683 /* host time/date access */
1684 void qemu_get_timedate(struct tm
*tm
, int offset
)
1691 if (rtc_date_offset
== -1) {
1695 ret
= localtime(&ti
);
1697 ti
-= rtc_date_offset
;
1701 memcpy(tm
, ret
, sizeof(struct tm
));
1704 int qemu_timedate_diff(struct tm
*tm
)
1708 if (rtc_date_offset
== -1)
1710 seconds
= mktimegm(tm
);
1712 seconds
= mktime(tm
);
1714 seconds
= mktimegm(tm
) + rtc_date_offset
;
1716 return seconds
- time(NULL
);
1719 /***********************************************************/
1720 /* character device */
1722 static void qemu_chr_event(CharDriverState
*s
, int event
)
1726 s
->chr_event(s
->handler_opaque
, event
);
1729 static void qemu_chr_reset_bh(void *opaque
)
1731 CharDriverState
*s
= opaque
;
1732 qemu_chr_event(s
, CHR_EVENT_RESET
);
1733 qemu_bh_delete(s
->bh
);
1737 void qemu_chr_reset(CharDriverState
*s
)
1739 if (s
->bh
== NULL
) {
1740 s
->bh
= qemu_bh_new(qemu_chr_reset_bh
, s
);
1741 qemu_bh_schedule(s
->bh
);
1745 int qemu_chr_write(CharDriverState
*s
, const uint8_t *buf
, int len
)
1747 return s
->chr_write(s
, buf
, len
);
1750 int qemu_chr_ioctl(CharDriverState
*s
, int cmd
, void *arg
)
1754 return s
->chr_ioctl(s
, cmd
, arg
);
1757 int qemu_chr_can_read(CharDriverState
*s
)
1759 if (!s
->chr_can_read
)
1761 return s
->chr_can_read(s
->handler_opaque
);
1764 void qemu_chr_read(CharDriverState
*s
, uint8_t *buf
, int len
)
1766 s
->chr_read(s
->handler_opaque
, buf
, len
);
1769 void qemu_chr_accept_input(CharDriverState
*s
)
1771 if (s
->chr_accept_input
)
1772 s
->chr_accept_input(s
);
1775 void qemu_chr_printf(CharDriverState
*s
, const char *fmt
, ...)
1780 vsnprintf(buf
, sizeof(buf
), fmt
, ap
);
1781 qemu_chr_write(s
, (uint8_t *)buf
, strlen(buf
));
1785 void qemu_chr_send_event(CharDriverState
*s
, int event
)
1787 if (s
->chr_send_event
)
1788 s
->chr_send_event(s
, event
);
1791 void qemu_chr_add_handlers(CharDriverState
*s
,
1792 IOCanRWHandler
*fd_can_read
,
1793 IOReadHandler
*fd_read
,
1794 IOEventHandler
*fd_event
,
1797 s
->chr_can_read
= fd_can_read
;
1798 s
->chr_read
= fd_read
;
1799 s
->chr_event
= fd_event
;
1800 s
->handler_opaque
= opaque
;
1801 if (s
->chr_update_read_handler
)
1802 s
->chr_update_read_handler(s
);
1805 static int null_chr_write(CharDriverState
*chr
, const uint8_t *buf
, int len
)
1810 static CharDriverState
*qemu_chr_open_null(void)
1812 CharDriverState
*chr
;
1814 chr
= qemu_mallocz(sizeof(CharDriverState
));
1817 chr
->chr_write
= null_chr_write
;
1821 /* MUX driver for serial I/O splitting */
1822 static int term_timestamps
;
1823 static int64_t term_timestamps_start
;
1825 #define MUX_BUFFER_SIZE 32 /* Must be a power of 2. */
1826 #define MUX_BUFFER_MASK (MUX_BUFFER_SIZE - 1)
1828 IOCanRWHandler
*chr_can_read
[MAX_MUX
];
1829 IOReadHandler
*chr_read
[MAX_MUX
];
1830 IOEventHandler
*chr_event
[MAX_MUX
];
1831 void *ext_opaque
[MAX_MUX
];
1832 CharDriverState
*drv
;
1833 unsigned char buffer
[MUX_BUFFER_SIZE
];
1837 int term_got_escape
;
1842 static int mux_chr_write(CharDriverState
*chr
, const uint8_t *buf
, int len
)
1844 MuxDriver
*d
= chr
->opaque
;
1846 if (!term_timestamps
) {
1847 ret
= d
->drv
->chr_write(d
->drv
, buf
, len
);
1852 for(i
= 0; i
< len
; i
++) {
1853 ret
+= d
->drv
->chr_write(d
->drv
, buf
+i
, 1);
1854 if (buf
[i
] == '\n') {
1860 if (term_timestamps_start
== -1)
1861 term_timestamps_start
= ti
;
1862 ti
-= term_timestamps_start
;
1863 secs
= ti
/ 1000000000;
1864 snprintf(buf1
, sizeof(buf1
),
1865 "[%02d:%02d:%02d.%03d] ",
1869 (int)((ti
/ 1000000) % 1000));
1870 d
->drv
->chr_write(d
->drv
, (uint8_t *)buf1
, strlen(buf1
));
1877 static char *mux_help
[] = {
1878 "% h print this help\n\r",
1879 "% x exit emulator\n\r",
1880 "% s save disk data back to file (if -snapshot)\n\r",
1881 "% t toggle console timestamps\n\r"
1882 "% b send break (magic sysrq)\n\r",
1883 "% c switch between console and monitor\n\r",
1888 static int term_escape_char
= 0x01; /* ctrl-a is used for escape */
1889 static void mux_print_help(CharDriverState
*chr
)
1892 char ebuf
[15] = "Escape-Char";
1893 char cbuf
[50] = "\n\r";
1895 if (term_escape_char
> 0 && term_escape_char
< 26) {
1896 sprintf(cbuf
,"\n\r");
1897 sprintf(ebuf
,"C-%c", term_escape_char
- 1 + 'a');
1899 sprintf(cbuf
,"\n\rEscape-Char set to Ascii: 0x%02x\n\r\n\r",
1902 chr
->chr_write(chr
, (uint8_t *)cbuf
, strlen(cbuf
));
1903 for (i
= 0; mux_help
[i
] != NULL
; i
++) {
1904 for (j
=0; mux_help
[i
][j
] != '\0'; j
++) {
1905 if (mux_help
[i
][j
] == '%')
1906 chr
->chr_write(chr
, (uint8_t *)ebuf
, strlen(ebuf
));
1908 chr
->chr_write(chr
, (uint8_t *)&mux_help
[i
][j
], 1);
1913 static int mux_proc_byte(CharDriverState
*chr
, MuxDriver
*d
, int ch
)
1915 if (d
->term_got_escape
) {
1916 d
->term_got_escape
= 0;
1917 if (ch
== term_escape_char
)
1922 mux_print_help(chr
);
1926 char *term
= "QEMU: Terminated\n\r";
1927 chr
->chr_write(chr
,(uint8_t *)term
,strlen(term
));
1934 for (i
= 0; i
< nb_drives
; i
++) {
1935 bdrv_commit(drives_table
[i
].bdrv
);
1940 qemu_chr_event(chr
, CHR_EVENT_BREAK
);
1943 /* Switch to the next registered device */
1945 if (chr
->focus
>= d
->mux_cnt
)
1949 term_timestamps
= !term_timestamps
;
1950 term_timestamps_start
= -1;
1953 } else if (ch
== term_escape_char
) {
1954 d
->term_got_escape
= 1;
1962 static void mux_chr_accept_input(CharDriverState
*chr
)
1965 MuxDriver
*d
= chr
->opaque
;
1967 while (d
->prod
!= d
->cons
&&
1968 d
->chr_can_read
[m
] &&
1969 d
->chr_can_read
[m
](d
->ext_opaque
[m
])) {
1970 d
->chr_read
[m
](d
->ext_opaque
[m
],
1971 &d
->buffer
[d
->cons
++ & MUX_BUFFER_MASK
], 1);
1975 static int mux_chr_can_read(void *opaque
)
1977 CharDriverState
*chr
= opaque
;
1978 MuxDriver
*d
= chr
->opaque
;
1980 if ((d
->prod
- d
->cons
) < MUX_BUFFER_SIZE
)
1982 if (d
->chr_can_read
[chr
->focus
])
1983 return d
->chr_can_read
[chr
->focus
](d
->ext_opaque
[chr
->focus
]);
1987 static void mux_chr_read(void *opaque
, const uint8_t *buf
, int size
)
1989 CharDriverState
*chr
= opaque
;
1990 MuxDriver
*d
= chr
->opaque
;
1994 mux_chr_accept_input (opaque
);
1996 for(i
= 0; i
< size
; i
++)
1997 if (mux_proc_byte(chr
, d
, buf
[i
])) {
1998 if (d
->prod
== d
->cons
&&
1999 d
->chr_can_read
[m
] &&
2000 d
->chr_can_read
[m
](d
->ext_opaque
[m
]))
2001 d
->chr_read
[m
](d
->ext_opaque
[m
], &buf
[i
], 1);
2003 d
->buffer
[d
->prod
++ & MUX_BUFFER_MASK
] = buf
[i
];
2007 static void mux_chr_event(void *opaque
, int event
)
2009 CharDriverState
*chr
= opaque
;
2010 MuxDriver
*d
= chr
->opaque
;
2013 /* Send the event to all registered listeners */
2014 for (i
= 0; i
< d
->mux_cnt
; i
++)
2015 if (d
->chr_event
[i
])
2016 d
->chr_event
[i
](d
->ext_opaque
[i
], event
);
2019 static void mux_chr_update_read_handler(CharDriverState
*chr
)
2021 MuxDriver
*d
= chr
->opaque
;
2023 if (d
->mux_cnt
>= MAX_MUX
) {
2024 fprintf(stderr
, "Cannot add I/O handlers, MUX array is full\n");
2027 d
->ext_opaque
[d
->mux_cnt
] = chr
->handler_opaque
;
2028 d
->chr_can_read
[d
->mux_cnt
] = chr
->chr_can_read
;
2029 d
->chr_read
[d
->mux_cnt
] = chr
->chr_read
;
2030 d
->chr_event
[d
->mux_cnt
] = chr
->chr_event
;
2031 /* Fix up the real driver with mux routines */
2032 if (d
->mux_cnt
== 0) {
2033 qemu_chr_add_handlers(d
->drv
, mux_chr_can_read
, mux_chr_read
,
2034 mux_chr_event
, chr
);
2036 chr
->focus
= d
->mux_cnt
;
2040 static CharDriverState
*qemu_chr_open_mux(CharDriverState
*drv
)
2042 CharDriverState
*chr
;
2045 chr
= qemu_mallocz(sizeof(CharDriverState
));
2048 d
= qemu_mallocz(sizeof(MuxDriver
));
2057 chr
->chr_write
= mux_chr_write
;
2058 chr
->chr_update_read_handler
= mux_chr_update_read_handler
;
2059 chr
->chr_accept_input
= mux_chr_accept_input
;
2066 static void socket_cleanup(void)
2071 static int socket_init(void)
2076 ret
= WSAStartup(MAKEWORD(2,2), &Data
);
2078 err
= WSAGetLastError();
2079 fprintf(stderr
, "WSAStartup: %d\n", err
);
2082 atexit(socket_cleanup
);
2086 static int send_all(int fd
, const uint8_t *buf
, int len1
)
2092 ret
= send(fd
, buf
, len
, 0);
2095 errno
= WSAGetLastError();
2096 if (errno
!= WSAEWOULDBLOCK
) {
2099 } else if (ret
== 0) {
2109 void socket_set_nonblock(int fd
)
2111 unsigned long opt
= 1;
2112 ioctlsocket(fd
, FIONBIO
, &opt
);
2117 static int unix_write(int fd
, const uint8_t *buf
, int len1
)
2123 ret
= write(fd
, buf
, len
);
2125 if (errno
!= EINTR
&& errno
!= EAGAIN
)
2127 } else if (ret
== 0) {
2137 static inline int send_all(int fd
, const uint8_t *buf
, int len1
)
2139 return unix_write(fd
, buf
, len1
);
2142 void socket_set_nonblock(int fd
)
2145 f
= fcntl(fd
, F_GETFL
);
2146 fcntl(fd
, F_SETFL
, f
| O_NONBLOCK
);
2148 #endif /* !_WIN32 */
2157 #define STDIO_MAX_CLIENTS 1
2158 static int stdio_nb_clients
= 0;
2160 static int fd_chr_write(CharDriverState
*chr
, const uint8_t *buf
, int len
)
2162 FDCharDriver
*s
= chr
->opaque
;
2163 return unix_write(s
->fd_out
, buf
, len
);
2166 static int fd_chr_read_poll(void *opaque
)
2168 CharDriverState
*chr
= opaque
;
2169 FDCharDriver
*s
= chr
->opaque
;
2171 s
->max_size
= qemu_chr_can_read(chr
);
2175 static void fd_chr_read(void *opaque
)
2177 CharDriverState
*chr
= opaque
;
2178 FDCharDriver
*s
= chr
->opaque
;
2183 if (len
> s
->max_size
)
2187 size
= read(s
->fd_in
, buf
, len
);
2189 /* FD has been closed. Remove it from the active list. */
2190 qemu_set_fd_handler2(s
->fd_in
, NULL
, NULL
, NULL
, NULL
);
2194 qemu_chr_read(chr
, buf
, size
);
2198 static void fd_chr_update_read_handler(CharDriverState
*chr
)
2200 FDCharDriver
*s
= chr
->opaque
;
2202 if (s
->fd_in
>= 0) {
2203 if (nographic
&& s
->fd_in
== 0) {
2205 qemu_set_fd_handler2(s
->fd_in
, fd_chr_read_poll
,
2206 fd_chr_read
, NULL
, chr
);
2211 static void fd_chr_close(struct CharDriverState
*chr
)
2213 FDCharDriver
*s
= chr
->opaque
;
2215 if (s
->fd_in
>= 0) {
2216 if (nographic
&& s
->fd_in
== 0) {
2218 qemu_set_fd_handler2(s
->fd_in
, NULL
, NULL
, NULL
, NULL
);
2225 /* open a character device to a unix fd */
2226 static CharDriverState
*qemu_chr_open_fd(int fd_in
, int fd_out
)
2228 CharDriverState
*chr
;
2231 chr
= qemu_mallocz(sizeof(CharDriverState
));
2234 s
= qemu_mallocz(sizeof(FDCharDriver
));
2242 chr
->chr_write
= fd_chr_write
;
2243 chr
->chr_update_read_handler
= fd_chr_update_read_handler
;
2244 chr
->chr_close
= fd_chr_close
;
2246 qemu_chr_reset(chr
);
2251 static CharDriverState
*qemu_chr_open_file_out(const char *file_out
)
2255 TFR(fd_out
= open(file_out
, O_WRONLY
| O_TRUNC
| O_CREAT
| O_BINARY
, 0666));
2258 return qemu_chr_open_fd(-1, fd_out
);
2261 static CharDriverState
*qemu_chr_open_pipe(const char *filename
)
2264 char filename_in
[256], filename_out
[256];
2266 snprintf(filename_in
, 256, "%s.in", filename
);
2267 snprintf(filename_out
, 256, "%s.out", filename
);
2268 TFR(fd_in
= open(filename_in
, O_RDWR
| O_BINARY
));
2269 TFR(fd_out
= open(filename_out
, O_RDWR
| O_BINARY
));
2270 if (fd_in
< 0 || fd_out
< 0) {
2275 TFR(fd_in
= fd_out
= open(filename
, O_RDWR
| O_BINARY
));
2279 return qemu_chr_open_fd(fd_in
, fd_out
);
2283 /* for STDIO, we handle the case where several clients use it
2286 #define TERM_FIFO_MAX_SIZE 1
2288 static uint8_t term_fifo
[TERM_FIFO_MAX_SIZE
];
2289 static int term_fifo_size
;
2291 static int stdio_read_poll(void *opaque
)
2293 CharDriverState
*chr
= opaque
;
2295 /* try to flush the queue if needed */
2296 if (term_fifo_size
!= 0 && qemu_chr_can_read(chr
) > 0) {
2297 qemu_chr_read(chr
, term_fifo
, 1);
2300 /* see if we can absorb more chars */
2301 if (term_fifo_size
== 0)
2307 static void stdio_read(void *opaque
)
2311 CharDriverState
*chr
= opaque
;
2313 size
= read(0, buf
, 1);
2315 /* stdin has been closed. Remove it from the active list. */
2316 qemu_set_fd_handler2(0, NULL
, NULL
, NULL
, NULL
);
2320 if (qemu_chr_can_read(chr
) > 0) {
2321 qemu_chr_read(chr
, buf
, 1);
2322 } else if (term_fifo_size
== 0) {
2323 term_fifo
[term_fifo_size
++] = buf
[0];
2328 /* init terminal so that we can grab keys */
2329 static struct termios oldtty
;
2330 static int old_fd0_flags
;
2331 static int term_atexit_done
;
2333 static void term_exit(void)
2335 tcsetattr (0, TCSANOW
, &oldtty
);
2336 fcntl(0, F_SETFL
, old_fd0_flags
);
2339 static void term_init(void)
2343 tcgetattr (0, &tty
);
2345 old_fd0_flags
= fcntl(0, F_GETFL
);
2347 tty
.c_iflag
&= ~(IGNBRK
|BRKINT
|PARMRK
|ISTRIP
2348 |INLCR
|IGNCR
|ICRNL
|IXON
);
2349 tty
.c_oflag
|= OPOST
;
2350 tty
.c_lflag
&= ~(ECHO
|ECHONL
|ICANON
|IEXTEN
);
2351 /* if graphical mode, we allow Ctrl-C handling */
2353 tty
.c_lflag
&= ~ISIG
;
2354 tty
.c_cflag
&= ~(CSIZE
|PARENB
);
2357 tty
.c_cc
[VTIME
] = 0;
2359 tcsetattr (0, TCSANOW
, &tty
);
2361 if (!term_atexit_done
++)
2364 fcntl(0, F_SETFL
, O_NONBLOCK
);
2367 static void qemu_chr_close_stdio(struct CharDriverState
*chr
)
2371 qemu_set_fd_handler2(0, NULL
, NULL
, NULL
, NULL
);
2375 static CharDriverState
*qemu_chr_open_stdio(void)
2377 CharDriverState
*chr
;
2379 if (stdio_nb_clients
>= STDIO_MAX_CLIENTS
)
2381 chr
= qemu_chr_open_fd(0, 1);
2382 chr
->chr_close
= qemu_chr_close_stdio
;
2383 qemu_set_fd_handler2(0, stdio_read_poll
, stdio_read
, NULL
, chr
);
2391 /* Once Solaris has openpty(), this is going to be removed. */
2392 int openpty(int *amaster
, int *aslave
, char *name
,
2393 struct termios
*termp
, struct winsize
*winp
)
2396 int mfd
= -1, sfd
= -1;
2398 *amaster
= *aslave
= -1;
2400 mfd
= open("/dev/ptmx", O_RDWR
| O_NOCTTY
);
2404 if (grantpt(mfd
) == -1 || unlockpt(mfd
) == -1)
2407 if ((slave
= ptsname(mfd
)) == NULL
)
2410 if ((sfd
= open(slave
, O_RDONLY
| O_NOCTTY
)) == -1)
2413 if (ioctl(sfd
, I_PUSH
, "ptem") == -1 ||
2414 (termp
!= NULL
&& tcgetattr(sfd
, termp
) < 0))
2422 ioctl(sfd
, TIOCSWINSZ
, winp
);
2433 void cfmakeraw (struct termios
*termios_p
)
2435 termios_p
->c_iflag
&=
2436 ~(IGNBRK
|BRKINT
|PARMRK
|ISTRIP
|INLCR
|IGNCR
|ICRNL
|IXON
);
2437 termios_p
->c_oflag
&= ~OPOST
;
2438 termios_p
->c_lflag
&= ~(ECHO
|ECHONL
|ICANON
|ISIG
|IEXTEN
);
2439 termios_p
->c_cflag
&= ~(CSIZE
|PARENB
);
2440 termios_p
->c_cflag
|= CS8
;
2442 termios_p
->c_cc
[VMIN
] = 0;
2443 termios_p
->c_cc
[VTIME
] = 0;
2447 #if defined(__linux__) || defined(__sun__)
2448 static CharDriverState
*qemu_chr_open_pty(void)
2451 int master_fd
, slave_fd
;
2453 if (openpty(&master_fd
, &slave_fd
, NULL
, NULL
, NULL
) < 0) {
2457 /* Set raw attributes on the pty. */
2459 tcsetattr(slave_fd
, TCSAFLUSH
, &tty
);
2461 fprintf(stderr
, "char device redirected to %s\n", ptsname(master_fd
));
2462 return qemu_chr_open_fd(master_fd
, master_fd
);
2465 static void tty_serial_init(int fd
, int speed
,
2466 int parity
, int data_bits
, int stop_bits
)
2472 printf("tty_serial_init: speed=%d parity=%c data=%d stop=%d\n",
2473 speed
, parity
, data_bits
, stop_bits
);
2475 tcgetattr (fd
, &tty
);
2478 if (speed
<= 50 * MARGIN
)
2480 else if (speed
<= 75 * MARGIN
)
2482 else if (speed
<= 300 * MARGIN
)
2484 else if (speed
<= 600 * MARGIN
)
2486 else if (speed
<= 1200 * MARGIN
)
2488 else if (speed
<= 2400 * MARGIN
)
2490 else if (speed
<= 4800 * MARGIN
)
2492 else if (speed
<= 9600 * MARGIN
)
2494 else if (speed
<= 19200 * MARGIN
)
2496 else if (speed
<= 38400 * MARGIN
)
2498 else if (speed
<= 57600 * MARGIN
)
2500 else if (speed
<= 115200 * MARGIN
)
2505 cfsetispeed(&tty
, spd
);
2506 cfsetospeed(&tty
, spd
);
2508 tty
.c_iflag
&= ~(IGNBRK
|BRKINT
|PARMRK
|ISTRIP
2509 |INLCR
|IGNCR
|ICRNL
|IXON
);
2510 tty
.c_oflag
|= OPOST
;
2511 tty
.c_lflag
&= ~(ECHO
|ECHONL
|ICANON
|IEXTEN
|ISIG
);
2512 tty
.c_cflag
&= ~(CSIZE
|PARENB
|PARODD
|CRTSCTS
|CSTOPB
);
2533 tty
.c_cflag
|= PARENB
;
2536 tty
.c_cflag
|= PARENB
| PARODD
;
2540 tty
.c_cflag
|= CSTOPB
;
2542 tcsetattr (fd
, TCSANOW
, &tty
);
2545 static int tty_serial_ioctl(CharDriverState
*chr
, int cmd
, void *arg
)
2547 FDCharDriver
*s
= chr
->opaque
;
2550 case CHR_IOCTL_SERIAL_SET_PARAMS
:
2552 QEMUSerialSetParams
*ssp
= arg
;
2553 tty_serial_init(s
->fd_in
, ssp
->speed
, ssp
->parity
,
2554 ssp
->data_bits
, ssp
->stop_bits
);
2557 case CHR_IOCTL_SERIAL_SET_BREAK
:
2559 int enable
= *(int *)arg
;
2561 tcsendbreak(s
->fd_in
, 1);
2570 static CharDriverState
*qemu_chr_open_tty(const char *filename
)
2572 CharDriverState
*chr
;
2575 TFR(fd
= open(filename
, O_RDWR
| O_NONBLOCK
));
2576 fcntl(fd
, F_SETFL
, O_NONBLOCK
);
2577 tty_serial_init(fd
, 115200, 'N', 8, 1);
2578 chr
= qemu_chr_open_fd(fd
, fd
);
2583 chr
->chr_ioctl
= tty_serial_ioctl
;
2584 qemu_chr_reset(chr
);
2587 #else /* ! __linux__ && ! __sun__ */
2588 static CharDriverState
*qemu_chr_open_pty(void)
2592 #endif /* __linux__ || __sun__ */
2594 #if defined(__linux__)
2598 } ParallelCharDriver
;
2600 static int pp_hw_mode(ParallelCharDriver
*s
, uint16_t mode
)
2602 if (s
->mode
!= mode
) {
2604 if (ioctl(s
->fd
, PPSETMODE
, &m
) < 0)
2611 static int pp_ioctl(CharDriverState
*chr
, int cmd
, void *arg
)
2613 ParallelCharDriver
*drv
= chr
->opaque
;
2618 case CHR_IOCTL_PP_READ_DATA
:
2619 if (ioctl(fd
, PPRDATA
, &b
) < 0)
2621 *(uint8_t *)arg
= b
;
2623 case CHR_IOCTL_PP_WRITE_DATA
:
2624 b
= *(uint8_t *)arg
;
2625 if (ioctl(fd
, PPWDATA
, &b
) < 0)
2628 case CHR_IOCTL_PP_READ_CONTROL
:
2629 if (ioctl(fd
, PPRCONTROL
, &b
) < 0)
2631 /* Linux gives only the lowest bits, and no way to know data
2632 direction! For better compatibility set the fixed upper
2634 *(uint8_t *)arg
= b
| 0xc0;
2636 case CHR_IOCTL_PP_WRITE_CONTROL
:
2637 b
= *(uint8_t *)arg
;
2638 if (ioctl(fd
, PPWCONTROL
, &b
) < 0)
2641 case CHR_IOCTL_PP_READ_STATUS
:
2642 if (ioctl(fd
, PPRSTATUS
, &b
) < 0)
2644 *(uint8_t *)arg
= b
;
2646 case CHR_IOCTL_PP_EPP_READ_ADDR
:
2647 if (pp_hw_mode(drv
, IEEE1284_MODE_EPP
|IEEE1284_ADDR
)) {
2648 struct ParallelIOArg
*parg
= arg
;
2649 int n
= read(fd
, parg
->buffer
, parg
->count
);
2650 if (n
!= parg
->count
) {
2655 case CHR_IOCTL_PP_EPP_READ
:
2656 if (pp_hw_mode(drv
, IEEE1284_MODE_EPP
)) {
2657 struct ParallelIOArg
*parg
= arg
;
2658 int n
= read(fd
, parg
->buffer
, parg
->count
);
2659 if (n
!= parg
->count
) {
2664 case CHR_IOCTL_PP_EPP_WRITE_ADDR
:
2665 if (pp_hw_mode(drv
, IEEE1284_MODE_EPP
|IEEE1284_ADDR
)) {
2666 struct ParallelIOArg
*parg
= arg
;
2667 int n
= write(fd
, parg
->buffer
, parg
->count
);
2668 if (n
!= parg
->count
) {
2673 case CHR_IOCTL_PP_EPP_WRITE
:
2674 if (pp_hw_mode(drv
, IEEE1284_MODE_EPP
)) {
2675 struct ParallelIOArg
*parg
= arg
;
2676 int n
= write(fd
, parg
->buffer
, parg
->count
);
2677 if (n
!= parg
->count
) {
2688 static void pp_close(CharDriverState
*chr
)
2690 ParallelCharDriver
*drv
= chr
->opaque
;
2693 pp_hw_mode(drv
, IEEE1284_MODE_COMPAT
);
2694 ioctl(fd
, PPRELEASE
);
2699 static CharDriverState
*qemu_chr_open_pp(const char *filename
)
2701 CharDriverState
*chr
;
2702 ParallelCharDriver
*drv
;
2705 TFR(fd
= open(filename
, O_RDWR
));
2709 if (ioctl(fd
, PPCLAIM
) < 0) {
2714 drv
= qemu_mallocz(sizeof(ParallelCharDriver
));
2720 drv
->mode
= IEEE1284_MODE_COMPAT
;
2722 chr
= qemu_mallocz(sizeof(CharDriverState
));
2728 chr
->chr_write
= null_chr_write
;
2729 chr
->chr_ioctl
= pp_ioctl
;
2730 chr
->chr_close
= pp_close
;
2733 qemu_chr_reset(chr
);
2737 #endif /* __linux__ */
2743 HANDLE hcom
, hrecv
, hsend
;
2744 OVERLAPPED orecv
, osend
;
2749 #define NSENDBUF 2048
2750 #define NRECVBUF 2048
2751 #define MAXCONNECT 1
2752 #define NTIMEOUT 5000
2754 static int win_chr_poll(void *opaque
);
2755 static int win_chr_pipe_poll(void *opaque
);
2757 static void win_chr_close(CharDriverState
*chr
)
2759 WinCharState
*s
= chr
->opaque
;
2762 CloseHandle(s
->hsend
);
2766 CloseHandle(s
->hrecv
);
2770 CloseHandle(s
->hcom
);
2774 qemu_del_polling_cb(win_chr_pipe_poll
, chr
);
2776 qemu_del_polling_cb(win_chr_poll
, chr
);
2779 static int win_chr_init(CharDriverState
*chr
, const char *filename
)
2781 WinCharState
*s
= chr
->opaque
;
2783 COMMTIMEOUTS cto
= { 0, 0, 0, 0, 0};
2788 s
->hsend
= CreateEvent(NULL
, TRUE
, FALSE
, NULL
);
2790 fprintf(stderr
, "Failed CreateEvent\n");
2793 s
->hrecv
= CreateEvent(NULL
, TRUE
, FALSE
, NULL
);
2795 fprintf(stderr
, "Failed CreateEvent\n");
2799 s
->hcom
= CreateFile(filename
, GENERIC_READ
|GENERIC_WRITE
, 0, NULL
,
2800 OPEN_EXISTING
, FILE_FLAG_OVERLAPPED
, 0);
2801 if (s
->hcom
== INVALID_HANDLE_VALUE
) {
2802 fprintf(stderr
, "Failed CreateFile (%lu)\n", GetLastError());
2807 if (!SetupComm(s
->hcom
, NRECVBUF
, NSENDBUF
)) {
2808 fprintf(stderr
, "Failed SetupComm\n");
2812 ZeroMemory(&comcfg
, sizeof(COMMCONFIG
));
2813 size
= sizeof(COMMCONFIG
);
2814 GetDefaultCommConfig(filename
, &comcfg
, &size
);
2815 comcfg
.dcb
.DCBlength
= sizeof(DCB
);
2816 CommConfigDialog(filename
, NULL
, &comcfg
);
2818 if (!SetCommState(s
->hcom
, &comcfg
.dcb
)) {
2819 fprintf(stderr
, "Failed SetCommState\n");
2823 if (!SetCommMask(s
->hcom
, EV_ERR
)) {
2824 fprintf(stderr
, "Failed SetCommMask\n");
2828 cto
.ReadIntervalTimeout
= MAXDWORD
;
2829 if (!SetCommTimeouts(s
->hcom
, &cto
)) {
2830 fprintf(stderr
, "Failed SetCommTimeouts\n");
2834 if (!ClearCommError(s
->hcom
, &err
, &comstat
)) {
2835 fprintf(stderr
, "Failed ClearCommError\n");
2838 qemu_add_polling_cb(win_chr_poll
, chr
);
2846 static int win_chr_write(CharDriverState
*chr
, const uint8_t *buf
, int len1
)
2848 WinCharState
*s
= chr
->opaque
;
2849 DWORD len
, ret
, size
, err
;
2852 ZeroMemory(&s
->osend
, sizeof(s
->osend
));
2853 s
->osend
.hEvent
= s
->hsend
;
2856 ret
= WriteFile(s
->hcom
, buf
, len
, &size
, &s
->osend
);
2858 ret
= WriteFile(s
->hcom
, buf
, len
, &size
, NULL
);
2860 err
= GetLastError();
2861 if (err
== ERROR_IO_PENDING
) {
2862 ret
= GetOverlappedResult(s
->hcom
, &s
->osend
, &size
, TRUE
);
2880 static int win_chr_read_poll(CharDriverState
*chr
)
2882 WinCharState
*s
= chr
->opaque
;
2884 s
->max_size
= qemu_chr_can_read(chr
);
2888 static void win_chr_readfile(CharDriverState
*chr
)
2890 WinCharState
*s
= chr
->opaque
;
2895 ZeroMemory(&s
->orecv
, sizeof(s
->orecv
));
2896 s
->orecv
.hEvent
= s
->hrecv
;
2897 ret
= ReadFile(s
->hcom
, buf
, s
->len
, &size
, &s
->orecv
);
2899 err
= GetLastError();
2900 if (err
== ERROR_IO_PENDING
) {
2901 ret
= GetOverlappedResult(s
->hcom
, &s
->orecv
, &size
, TRUE
);
2906 qemu_chr_read(chr
, buf
, size
);
2910 static void win_chr_read(CharDriverState
*chr
)
2912 WinCharState
*s
= chr
->opaque
;
2914 if (s
->len
> s
->max_size
)
2915 s
->len
= s
->max_size
;
2919 win_chr_readfile(chr
);
2922 static int win_chr_poll(void *opaque
)
2924 CharDriverState
*chr
= opaque
;
2925 WinCharState
*s
= chr
->opaque
;
2929 ClearCommError(s
->hcom
, &comerr
, &status
);
2930 if (status
.cbInQue
> 0) {
2931 s
->len
= status
.cbInQue
;
2932 win_chr_read_poll(chr
);
2939 static CharDriverState
*qemu_chr_open_win(const char *filename
)
2941 CharDriverState
*chr
;
2944 chr
= qemu_mallocz(sizeof(CharDriverState
));
2947 s
= qemu_mallocz(sizeof(WinCharState
));
2953 chr
->chr_write
= win_chr_write
;
2954 chr
->chr_close
= win_chr_close
;
2956 if (win_chr_init(chr
, filename
) < 0) {
2961 qemu_chr_reset(chr
);
2965 static int win_chr_pipe_poll(void *opaque
)
2967 CharDriverState
*chr
= opaque
;
2968 WinCharState
*s
= chr
->opaque
;
2971 PeekNamedPipe(s
->hcom
, NULL
, 0, NULL
, &size
, NULL
);
2974 win_chr_read_poll(chr
);
2981 static int win_chr_pipe_init(CharDriverState
*chr
, const char *filename
)
2983 WinCharState
*s
= chr
->opaque
;
2991 s
->hsend
= CreateEvent(NULL
, TRUE
, FALSE
, NULL
);
2993 fprintf(stderr
, "Failed CreateEvent\n");
2996 s
->hrecv
= CreateEvent(NULL
, TRUE
, FALSE
, NULL
);
2998 fprintf(stderr
, "Failed CreateEvent\n");
3002 snprintf(openname
, sizeof(openname
), "\\\\.\\pipe\\%s", filename
);
3003 s
->hcom
= CreateNamedPipe(openname
, PIPE_ACCESS_DUPLEX
| FILE_FLAG_OVERLAPPED
,
3004 PIPE_TYPE_BYTE
| PIPE_READMODE_BYTE
|
3006 MAXCONNECT
, NSENDBUF
, NRECVBUF
, NTIMEOUT
, NULL
);
3007 if (s
->hcom
== INVALID_HANDLE_VALUE
) {
3008 fprintf(stderr
, "Failed CreateNamedPipe (%lu)\n", GetLastError());
3013 ZeroMemory(&ov
, sizeof(ov
));
3014 ov
.hEvent
= CreateEvent(NULL
, TRUE
, FALSE
, NULL
);
3015 ret
= ConnectNamedPipe(s
->hcom
, &ov
);
3017 fprintf(stderr
, "Failed ConnectNamedPipe\n");
3021 ret
= GetOverlappedResult(s
->hcom
, &ov
, &size
, TRUE
);
3023 fprintf(stderr
, "Failed GetOverlappedResult\n");
3025 CloseHandle(ov
.hEvent
);
3032 CloseHandle(ov
.hEvent
);
3035 qemu_add_polling_cb(win_chr_pipe_poll
, chr
);
3044 static CharDriverState
*qemu_chr_open_win_pipe(const char *filename
)
3046 CharDriverState
*chr
;
3049 chr
= qemu_mallocz(sizeof(CharDriverState
));
3052 s
= qemu_mallocz(sizeof(WinCharState
));
3058 chr
->chr_write
= win_chr_write
;
3059 chr
->chr_close
= win_chr_close
;
3061 if (win_chr_pipe_init(chr
, filename
) < 0) {
3066 qemu_chr_reset(chr
);
3070 static CharDriverState
*qemu_chr_open_win_file(HANDLE fd_out
)
3072 CharDriverState
*chr
;
3075 chr
= qemu_mallocz(sizeof(CharDriverState
));
3078 s
= qemu_mallocz(sizeof(WinCharState
));
3085 chr
->chr_write
= win_chr_write
;
3086 qemu_chr_reset(chr
);
3090 static CharDriverState
*qemu_chr_open_win_con(const char *filename
)
3092 return qemu_chr_open_win_file(GetStdHandle(STD_OUTPUT_HANDLE
));
3095 static CharDriverState
*qemu_chr_open_win_file_out(const char *file_out
)
3099 fd_out
= CreateFile(file_out
, GENERIC_WRITE
, FILE_SHARE_READ
, NULL
,
3100 OPEN_ALWAYS
, FILE_ATTRIBUTE_NORMAL
, NULL
);
3101 if (fd_out
== INVALID_HANDLE_VALUE
)
3104 return qemu_chr_open_win_file(fd_out
);
3106 #endif /* !_WIN32 */
3108 /***********************************************************/
3109 /* UDP Net console */
3113 struct sockaddr_in daddr
;
3120 static int udp_chr_write(CharDriverState
*chr
, const uint8_t *buf
, int len
)
3122 NetCharDriver
*s
= chr
->opaque
;
3124 return sendto(s
->fd
, buf
, len
, 0,
3125 (struct sockaddr
*)&s
->daddr
, sizeof(struct sockaddr_in
));
3128 static int udp_chr_read_poll(void *opaque
)
3130 CharDriverState
*chr
= opaque
;
3131 NetCharDriver
*s
= chr
->opaque
;
3133 s
->max_size
= qemu_chr_can_read(chr
);
3135 /* If there were any stray characters in the queue process them
3138 while (s
->max_size
> 0 && s
->bufptr
< s
->bufcnt
) {
3139 qemu_chr_read(chr
, &s
->buf
[s
->bufptr
], 1);
3141 s
->max_size
= qemu_chr_can_read(chr
);
3146 static void udp_chr_read(void *opaque
)
3148 CharDriverState
*chr
= opaque
;
3149 NetCharDriver
*s
= chr
->opaque
;
3151 if (s
->max_size
== 0)
3153 s
->bufcnt
= recv(s
->fd
, s
->buf
, sizeof(s
->buf
), 0);
3154 s
->bufptr
= s
->bufcnt
;
3159 while (s
->max_size
> 0 && s
->bufptr
< s
->bufcnt
) {
3160 qemu_chr_read(chr
, &s
->buf
[s
->bufptr
], 1);
3162 s
->max_size
= qemu_chr_can_read(chr
);
3166 static void udp_chr_update_read_handler(CharDriverState
*chr
)
3168 NetCharDriver
*s
= chr
->opaque
;
3171 qemu_set_fd_handler2(s
->fd
, udp_chr_read_poll
,
3172 udp_chr_read
, NULL
, chr
);
3176 int parse_host_port(struct sockaddr_in
*saddr
, const char *str
);
3178 static int parse_unix_path(struct sockaddr_un
*uaddr
, const char *str
);
3180 int parse_host_src_port(struct sockaddr_in
*haddr
,
3181 struct sockaddr_in
*saddr
,
3184 static CharDriverState
*qemu_chr_open_udp(const char *def
)
3186 CharDriverState
*chr
= NULL
;
3187 NetCharDriver
*s
= NULL
;
3189 struct sockaddr_in saddr
;
3191 chr
= qemu_mallocz(sizeof(CharDriverState
));
3194 s
= qemu_mallocz(sizeof(NetCharDriver
));
3198 fd
= socket(PF_INET
, SOCK_DGRAM
, 0);
3200 perror("socket(PF_INET, SOCK_DGRAM)");
3204 if (parse_host_src_port(&s
->daddr
, &saddr
, def
) < 0) {
3205 printf("Could not parse: %s\n", def
);
3209 if (bind(fd
, (struct sockaddr
*)&saddr
, sizeof(saddr
)) < 0)
3219 chr
->chr_write
= udp_chr_write
;
3220 chr
->chr_update_read_handler
= udp_chr_update_read_handler
;
3233 /***********************************************************/
3234 /* TCP Net console */
3245 static void tcp_chr_accept(void *opaque
);
3247 static int tcp_chr_write(CharDriverState
*chr
, const uint8_t *buf
, int len
)
3249 TCPCharDriver
*s
= chr
->opaque
;
3251 return send_all(s
->fd
, buf
, len
);
3253 /* XXX: indicate an error ? */
3258 static int tcp_chr_read_poll(void *opaque
)
3260 CharDriverState
*chr
= opaque
;
3261 TCPCharDriver
*s
= chr
->opaque
;
3264 s
->max_size
= qemu_chr_can_read(chr
);
3269 #define IAC_BREAK 243
3270 static void tcp_chr_process_IAC_bytes(CharDriverState
*chr
,
3272 uint8_t *buf
, int *size
)
3274 /* Handle any telnet client's basic IAC options to satisfy char by
3275 * char mode with no echo. All IAC options will be removed from
3276 * the buf and the do_telnetopt variable will be used to track the
3277 * state of the width of the IAC information.
3279 * IAC commands come in sets of 3 bytes with the exception of the
3280 * "IAC BREAK" command and the double IAC.
3286 for (i
= 0; i
< *size
; i
++) {
3287 if (s
->do_telnetopt
> 1) {
3288 if ((unsigned char)buf
[i
] == IAC
&& s
->do_telnetopt
== 2) {
3289 /* Double IAC means send an IAC */
3293 s
->do_telnetopt
= 1;
3295 if ((unsigned char)buf
[i
] == IAC_BREAK
&& s
->do_telnetopt
== 2) {
3296 /* Handle IAC break commands by sending a serial break */
3297 qemu_chr_event(chr
, CHR_EVENT_BREAK
);
3302 if (s
->do_telnetopt
>= 4) {
3303 s
->do_telnetopt
= 1;
3306 if ((unsigned char)buf
[i
] == IAC
) {
3307 s
->do_telnetopt
= 2;
3318 static void tcp_chr_read(void *opaque
)
3320 CharDriverState
*chr
= opaque
;
3321 TCPCharDriver
*s
= chr
->opaque
;
3325 if (!s
->connected
|| s
->max_size
<= 0)
3328 if (len
> s
->max_size
)
3330 size
= recv(s
->fd
, buf
, len
, 0);
3332 /* connection closed */
3334 if (s
->listen_fd
>= 0) {
3335 qemu_set_fd_handler(s
->listen_fd
, tcp_chr_accept
, NULL
, chr
);
3337 qemu_set_fd_handler(s
->fd
, NULL
, NULL
, NULL
);
3340 } else if (size
> 0) {
3341 if (s
->do_telnetopt
)
3342 tcp_chr_process_IAC_bytes(chr
, s
, buf
, &size
);
3344 qemu_chr_read(chr
, buf
, size
);
3348 static void tcp_chr_connect(void *opaque
)
3350 CharDriverState
*chr
= opaque
;
3351 TCPCharDriver
*s
= chr
->opaque
;
3354 qemu_set_fd_handler2(s
->fd
, tcp_chr_read_poll
,
3355 tcp_chr_read
, NULL
, chr
);
3356 qemu_chr_reset(chr
);
3359 #define IACSET(x,a,b,c) x[0] = a; x[1] = b; x[2] = c;
3360 static void tcp_chr_telnet_init(int fd
)
3363 /* Send the telnet negotion to put telnet in binary, no echo, single char mode */
3364 IACSET(buf
, 0xff, 0xfb, 0x01); /* IAC WILL ECHO */
3365 send(fd
, (char *)buf
, 3, 0);
3366 IACSET(buf
, 0xff, 0xfb, 0x03); /* IAC WILL Suppress go ahead */
3367 send(fd
, (char *)buf
, 3, 0);
3368 IACSET(buf
, 0xff, 0xfb, 0x00); /* IAC WILL Binary */
3369 send(fd
, (char *)buf
, 3, 0);
3370 IACSET(buf
, 0xff, 0xfd, 0x00); /* IAC DO Binary */
3371 send(fd
, (char *)buf
, 3, 0);
3374 static void socket_set_nodelay(int fd
)
3377 setsockopt(fd
, IPPROTO_TCP
, TCP_NODELAY
, (char *)&val
, sizeof(val
));
3380 static void tcp_chr_accept(void *opaque
)
3382 CharDriverState
*chr
= opaque
;
3383 TCPCharDriver
*s
= chr
->opaque
;
3384 struct sockaddr_in saddr
;
3386 struct sockaddr_un uaddr
;
3388 struct sockaddr
*addr
;
3395 len
= sizeof(uaddr
);
3396 addr
= (struct sockaddr
*)&uaddr
;
3400 len
= sizeof(saddr
);
3401 addr
= (struct sockaddr
*)&saddr
;
3403 fd
= accept(s
->listen_fd
, addr
, &len
);
3404 if (fd
< 0 && errno
!= EINTR
) {
3406 } else if (fd
>= 0) {
3407 if (s
->do_telnetopt
)
3408 tcp_chr_telnet_init(fd
);
3412 socket_set_nonblock(fd
);
3414 socket_set_nodelay(fd
);
3416 qemu_set_fd_handler(s
->listen_fd
, NULL
, NULL
, NULL
);
3417 tcp_chr_connect(chr
);
3420 static void tcp_chr_close(CharDriverState
*chr
)
3422 TCPCharDriver
*s
= chr
->opaque
;
3425 if (s
->listen_fd
>= 0)
3426 closesocket(s
->listen_fd
);
3430 static CharDriverState
*qemu_chr_open_tcp(const char *host_str
,
3434 CharDriverState
*chr
= NULL
;
3435 TCPCharDriver
*s
= NULL
;
3436 int fd
= -1, ret
, err
, val
;
3438 int is_waitconnect
= 1;
3441 struct sockaddr_in saddr
;
3443 struct sockaddr_un uaddr
;
3445 struct sockaddr
*addr
;
3450 addr
= (struct sockaddr
*)&uaddr
;
3451 addrlen
= sizeof(uaddr
);
3452 if (parse_unix_path(&uaddr
, host_str
) < 0)
3457 addr
= (struct sockaddr
*)&saddr
;
3458 addrlen
= sizeof(saddr
);
3459 if (parse_host_port(&saddr
, host_str
) < 0)
3464 while((ptr
= strchr(ptr
,','))) {
3466 if (!strncmp(ptr
,"server",6)) {
3468 } else if (!strncmp(ptr
,"nowait",6)) {
3470 } else if (!strncmp(ptr
,"nodelay",6)) {
3473 printf("Unknown option: %s\n", ptr
);
3480 chr
= qemu_mallocz(sizeof(CharDriverState
));
3483 s
= qemu_mallocz(sizeof(TCPCharDriver
));
3489 fd
= socket(PF_UNIX
, SOCK_STREAM
, 0);
3492 fd
= socket(PF_INET
, SOCK_STREAM
, 0);
3497 if (!is_waitconnect
)
3498 socket_set_nonblock(fd
);
3503 s
->is_unix
= is_unix
;
3504 s
->do_nodelay
= do_nodelay
&& !is_unix
;
3507 chr
->chr_write
= tcp_chr_write
;
3508 chr
->chr_close
= tcp_chr_close
;
3511 /* allow fast reuse */
3515 pstrcpy(path
, sizeof(path
), uaddr
.sun_path
);
3521 setsockopt(fd
, SOL_SOCKET
, SO_REUSEADDR
, (const char *)&val
, sizeof(val
));
3524 ret
= bind(fd
, addr
, addrlen
);
3528 ret
= listen(fd
, 0);
3533 qemu_set_fd_handler(s
->listen_fd
, tcp_chr_accept
, NULL
, chr
);
3535 s
->do_telnetopt
= 1;
3538 ret
= connect(fd
, addr
, addrlen
);
3540 err
= socket_error();
3541 if (err
== EINTR
|| err
== EWOULDBLOCK
) {
3542 } else if (err
== EINPROGRESS
) {
3545 } else if (err
== WSAEALREADY
) {
3557 socket_set_nodelay(fd
);
3559 tcp_chr_connect(chr
);
3561 qemu_set_fd_handler(s
->fd
, NULL
, tcp_chr_connect
, chr
);
3564 if (is_listen
&& is_waitconnect
) {
3565 printf("QEMU waiting for connection on: %s\n", host_str
);
3566 tcp_chr_accept(chr
);
3567 socket_set_nonblock(s
->listen_fd
);
3579 CharDriverState
*qemu_chr_open(const char *filename
)
3583 if (!strcmp(filename
, "vc")) {
3584 return text_console_init(&display_state
, 0);
3585 } else if (strstart(filename
, "vc:", &p
)) {
3586 return text_console_init(&display_state
, p
);
3587 } else if (!strcmp(filename
, "null")) {
3588 return qemu_chr_open_null();
3590 if (strstart(filename
, "tcp:", &p
)) {
3591 return qemu_chr_open_tcp(p
, 0, 0);
3593 if (strstart(filename
, "telnet:", &p
)) {
3594 return qemu_chr_open_tcp(p
, 1, 0);
3596 if (strstart(filename
, "udp:", &p
)) {
3597 return qemu_chr_open_udp(p
);
3599 if (strstart(filename
, "mon:", &p
)) {
3600 CharDriverState
*drv
= qemu_chr_open(p
);
3602 drv
= qemu_chr_open_mux(drv
);
3603 monitor_init(drv
, !nographic
);
3606 printf("Unable to open driver: %s\n", p
);
3610 if (strstart(filename
, "unix:", &p
)) {
3611 return qemu_chr_open_tcp(p
, 0, 1);
3612 } else if (strstart(filename
, "file:", &p
)) {
3613 return qemu_chr_open_file_out(p
);
3614 } else if (strstart(filename
, "pipe:", &p
)) {
3615 return qemu_chr_open_pipe(p
);
3616 } else if (!strcmp(filename
, "pty")) {
3617 return qemu_chr_open_pty();
3618 } else if (!strcmp(filename
, "stdio")) {
3619 return qemu_chr_open_stdio();
3621 #if defined(__linux__)
3622 if (strstart(filename
, "/dev/parport", NULL
)) {
3623 return qemu_chr_open_pp(filename
);
3626 #if defined(__linux__) || defined(__sun__)
3627 if (strstart(filename
, "/dev/", NULL
)) {
3628 return qemu_chr_open_tty(filename
);
3632 if (strstart(filename
, "COM", NULL
)) {
3633 return qemu_chr_open_win(filename
);
3635 if (strstart(filename
, "pipe:", &p
)) {
3636 return qemu_chr_open_win_pipe(p
);
3638 if (strstart(filename
, "con:", NULL
)) {
3639 return qemu_chr_open_win_con(filename
);
3641 if (strstart(filename
, "file:", &p
)) {
3642 return qemu_chr_open_win_file_out(p
);
3645 #ifdef CONFIG_BRLAPI
3646 if (!strcmp(filename
, "braille")) {
3647 return chr_baum_init();
3655 void qemu_chr_close(CharDriverState
*chr
)
3658 chr
->chr_close(chr
);
3662 /***********************************************************/
3663 /* network device redirectors */
3665 __attribute__ (( unused
))
3666 static void hex_dump(FILE *f
, const uint8_t *buf
, int size
)
3670 for(i
=0;i
<size
;i
+=16) {
3674 fprintf(f
, "%08x ", i
);
3677 fprintf(f
, " %02x", buf
[i
+j
]);
3682 for(j
=0;j
<len
;j
++) {
3684 if (c
< ' ' || c
> '~')
3686 fprintf(f
, "%c", c
);
3692 static int parse_macaddr(uint8_t *macaddr
, const char *p
)
3699 offset
= strtol(p
, &last_char
, 0);
3700 if (0 == errno
&& '\0' == *last_char
&&
3701 offset
>= 0 && offset
<= 0xFFFFFF) {
3702 macaddr
[3] = (offset
& 0xFF0000) >> 16;
3703 macaddr
[4] = (offset
& 0xFF00) >> 8;
3704 macaddr
[5] = offset
& 0xFF;
3707 for(i
= 0; i
< 6; i
++) {
3708 macaddr
[i
] = strtol(p
, (char **)&p
, 16);
3713 if (*p
!= ':' && *p
!= '-')
3724 static int get_str_sep(char *buf
, int buf_size
, const char **pp
, int sep
)
3729 p1
= strchr(p
, sep
);
3735 if (len
> buf_size
- 1)
3737 memcpy(buf
, p
, len
);
3744 int parse_host_src_port(struct sockaddr_in
*haddr
,
3745 struct sockaddr_in
*saddr
,
3746 const char *input_str
)
3748 char *str
= strdup(input_str
);
3749 char *host_str
= str
;
3754 * Chop off any extra arguments at the end of the string which
3755 * would start with a comma, then fill in the src port information
3756 * if it was provided else use the "any address" and "any port".
3758 if ((ptr
= strchr(str
,',')))
3761 if ((src_str
= strchr(input_str
,'@'))) {
3766 if (parse_host_port(haddr
, host_str
) < 0)
3769 if (!src_str
|| *src_str
== '\0')
3772 if (parse_host_port(saddr
, src_str
) < 0)
3783 int parse_host_port(struct sockaddr_in
*saddr
, const char *str
)
3791 if (get_str_sep(buf
, sizeof(buf
), &p
, ':') < 0)
3793 saddr
->sin_family
= AF_INET
;
3794 if (buf
[0] == '\0') {
3795 saddr
->sin_addr
.s_addr
= 0;
3797 if (isdigit(buf
[0])) {
3798 if (!inet_aton(buf
, &saddr
->sin_addr
))
3801 if ((he
= gethostbyname(buf
)) == NULL
)
3803 saddr
->sin_addr
= *(struct in_addr
*)he
->h_addr
;
3806 port
= strtol(p
, (char **)&r
, 0);
3809 saddr
->sin_port
= htons(port
);
3814 static int parse_unix_path(struct sockaddr_un
*uaddr
, const char *str
)
3819 len
= MIN(108, strlen(str
));
3820 p
= strchr(str
, ',');
3822 len
= MIN(len
, p
- str
);
3824 memset(uaddr
, 0, sizeof(*uaddr
));
3826 uaddr
->sun_family
= AF_UNIX
;
3827 memcpy(uaddr
->sun_path
, str
, len
);
3833 /* find or alloc a new VLAN */
3834 VLANState
*qemu_find_vlan(int id
)
3836 VLANState
**pvlan
, *vlan
;
3837 for(vlan
= first_vlan
; vlan
!= NULL
; vlan
= vlan
->next
) {
3841 vlan
= qemu_mallocz(sizeof(VLANState
));
3846 pvlan
= &first_vlan
;
3847 while (*pvlan
!= NULL
)
3848 pvlan
= &(*pvlan
)->next
;
3853 VLANClientState
*qemu_new_vlan_client(VLANState
*vlan
,
3854 IOReadHandler
*fd_read
,
3855 IOCanRWHandler
*fd_can_read
,
3858 VLANClientState
*vc
, **pvc
;
3859 vc
= qemu_mallocz(sizeof(VLANClientState
));
3862 vc
->fd_read
= fd_read
;
3863 vc
->fd_can_read
= fd_can_read
;
3864 vc
->opaque
= opaque
;
3868 pvc
= &vlan
->first_client
;
3869 while (*pvc
!= NULL
)
3870 pvc
= &(*pvc
)->next
;
3875 void qemu_del_vlan_client(VLANClientState
*vc
)
3877 VLANClientState
**pvc
= &vc
->vlan
->first_client
;
3879 while (*pvc
!= NULL
)
3885 pvc
= &(*pvc
)->next
;
3888 int qemu_can_send_packet(VLANClientState
*vc1
)
3890 VLANState
*vlan
= vc1
->vlan
;
3891 VLANClientState
*vc
;
3893 for(vc
= vlan
->first_client
; vc
!= NULL
; vc
= vc
->next
) {
3895 if (vc
->fd_can_read
&& vc
->fd_can_read(vc
->opaque
))
3902 void qemu_send_packet(VLANClientState
*vc1
, const uint8_t *buf
, int size
)
3904 VLANState
*vlan
= vc1
->vlan
;
3905 VLANClientState
*vc
;
3908 printf("vlan %d send:\n", vlan
->id
);
3909 hex_dump(stdout
, buf
, size
);
3911 for(vc
= vlan
->first_client
; vc
!= NULL
; vc
= vc
->next
) {
3913 vc
->fd_read(vc
->opaque
, buf
, size
);
3918 #if defined(CONFIG_SLIRP)
3920 /* slirp network adapter */
3922 static int slirp_inited
;
3923 static VLANClientState
*slirp_vc
;
3925 int slirp_can_output(void)
3927 return !slirp_vc
|| qemu_can_send_packet(slirp_vc
);
3930 void slirp_output(const uint8_t *pkt
, int pkt_len
)
3933 printf("slirp output:\n");
3934 hex_dump(stdout
, pkt
, pkt_len
);
3938 qemu_send_packet(slirp_vc
, pkt
, pkt_len
);
3941 static void slirp_receive(void *opaque
, const uint8_t *buf
, int size
)
3944 printf("slirp input:\n");
3945 hex_dump(stdout
, buf
, size
);
3947 slirp_input(buf
, size
);
3950 static int net_slirp_init(VLANState
*vlan
)
3952 if (!slirp_inited
) {
3956 slirp_vc
= qemu_new_vlan_client(vlan
,
3957 slirp_receive
, NULL
, NULL
);
3958 snprintf(slirp_vc
->info_str
, sizeof(slirp_vc
->info_str
), "user redirector");
3962 static void net_slirp_redir(const char *redir_str
)
3967 struct in_addr guest_addr
;
3968 int host_port
, guest_port
;
3970 if (!slirp_inited
) {
3976 if (get_str_sep(buf
, sizeof(buf
), &p
, ':') < 0)
3978 if (!strcmp(buf
, "tcp")) {
3980 } else if (!strcmp(buf
, "udp")) {
3986 if (get_str_sep(buf
, sizeof(buf
), &p
, ':') < 0)
3988 host_port
= strtol(buf
, &r
, 0);
3992 if (get_str_sep(buf
, sizeof(buf
), &p
, ':') < 0)
3994 if (buf
[0] == '\0') {
3995 pstrcpy(buf
, sizeof(buf
), "10.0.2.15");
3997 if (!inet_aton(buf
, &guest_addr
))
4000 guest_port
= strtol(p
, &r
, 0);
4004 if (slirp_redir(is_udp
, host_port
, guest_addr
, guest_port
) < 0) {
4005 fprintf(stderr
, "qemu: could not set up redirection\n");
4010 fprintf(stderr
, "qemu: syntax: -redir [tcp|udp]:host-port:[guest-host]:guest-port\n");
4018 static void erase_dir(char *dir_name
)
4022 char filename
[1024];
4024 /* erase all the files in the directory */
4025 if ((d
= opendir(dir_name
)) != 0) {
4030 if (strcmp(de
->d_name
, ".") != 0 &&
4031 strcmp(de
->d_name
, "..") != 0) {
4032 snprintf(filename
, sizeof(filename
), "%s/%s",
4033 smb_dir
, de
->d_name
);
4034 if (unlink(filename
) != 0) /* is it a directory? */
4035 erase_dir(filename
);
4043 /* automatic user mode samba server configuration */
4044 static void smb_exit(void)
4049 /* automatic user mode samba server configuration */
4050 static void net_slirp_smb(const char *exported_dir
)
4052 char smb_conf
[1024];
4053 char smb_cmdline
[1024];
4056 if (!slirp_inited
) {
4061 /* XXX: better tmp dir construction */
4062 snprintf(smb_dir
, sizeof(smb_dir
), "/tmp/qemu-smb.%d", getpid());
4063 if (mkdir(smb_dir
, 0700) < 0) {
4064 fprintf(stderr
, "qemu: could not create samba server dir '%s'\n", smb_dir
);
4067 snprintf(smb_conf
, sizeof(smb_conf
), "%s/%s", smb_dir
, "smb.conf");
4069 f
= fopen(smb_conf
, "w");
4071 fprintf(stderr
, "qemu: could not create samba server configuration file '%s'\n", smb_conf
);
4078 "socket address=127.0.0.1\n"
4079 "pid directory=%s\n"
4080 "lock directory=%s\n"
4081 "log file=%s/log.smbd\n"
4082 "smb passwd file=%s/smbpasswd\n"
4083 "security = share\n"
4098 snprintf(smb_cmdline
, sizeof(smb_cmdline
), "%s -s %s",
4099 SMBD_COMMAND
, smb_conf
);
4101 slirp_add_exec(0, smb_cmdline
, 4, 139);
4104 #endif /* !defined(_WIN32) */
4105 void do_info_slirp(void)
4110 #endif /* CONFIG_SLIRP */
4112 #if !defined(_WIN32)
4114 typedef struct TAPState
{
4115 VLANClientState
*vc
;
4117 char down_script
[1024];
4120 static void tap_receive(void *opaque
, const uint8_t *buf
, int size
)
4122 TAPState
*s
= opaque
;
4125 ret
= write(s
->fd
, buf
, size
);
4126 if (ret
< 0 && (errno
== EINTR
|| errno
== EAGAIN
)) {
4133 static void tap_send(void *opaque
)
4135 TAPState
*s
= opaque
;
4142 sbuf
.maxlen
= sizeof(buf
);
4144 size
= getmsg(s
->fd
, NULL
, &sbuf
, &f
) >=0 ? sbuf
.len
: -1;
4146 size
= read(s
->fd
, buf
, sizeof(buf
));
4149 qemu_send_packet(s
->vc
, buf
, size
);
4155 static TAPState
*net_tap_fd_init(VLANState
*vlan
, int fd
)
4159 s
= qemu_mallocz(sizeof(TAPState
));
4163 s
->vc
= qemu_new_vlan_client(vlan
, tap_receive
, NULL
, s
);
4164 qemu_set_fd_handler(s
->fd
, tap_send
, NULL
, s
);
4165 snprintf(s
->vc
->info_str
, sizeof(s
->vc
->info_str
), "tap: fd=%d", fd
);
4169 #if defined (_BSD) || defined (__FreeBSD_kernel__)
4170 static int tap_open(char *ifname
, int ifname_size
)
4176 TFR(fd
= open("/dev/tap", O_RDWR
));
4178 fprintf(stderr
, "warning: could not open /dev/tap: no virtual network emulation\n");
4183 dev
= devname(s
.st_rdev
, S_IFCHR
);
4184 pstrcpy(ifname
, ifname_size
, dev
);
4186 fcntl(fd
, F_SETFL
, O_NONBLOCK
);
4189 #elif defined(__sun__)
4190 #define TUNNEWPPA (('T'<<16) | 0x0001)
4192 * Allocate TAP device, returns opened fd.
4193 * Stores dev name in the first arg(must be large enough).
4195 int tap_alloc(char *dev
)
4197 int tap_fd
, if_fd
, ppa
= -1;
4198 static int ip_fd
= 0;
4201 static int arp_fd
= 0;
4202 int ip_muxid
, arp_muxid
;
4203 struct strioctl strioc_if
, strioc_ppa
;
4204 int link_type
= I_PLINK
;;
4206 char actual_name
[32] = "";
4208 memset(&ifr
, 0x0, sizeof(ifr
));
4212 while( *ptr
&& !isdigit((int)*ptr
) ) ptr
++;
4216 /* Check if IP device was opened */
4220 TFR(ip_fd
= open("/dev/udp", O_RDWR
, 0));
4222 syslog(LOG_ERR
, "Can't open /dev/ip (actually /dev/udp)");
4226 TFR(tap_fd
= open("/dev/tap", O_RDWR
, 0));
4228 syslog(LOG_ERR
, "Can't open /dev/tap");
4232 /* Assign a new PPA and get its unit number. */
4233 strioc_ppa
.ic_cmd
= TUNNEWPPA
;
4234 strioc_ppa
.ic_timout
= 0;
4235 strioc_ppa
.ic_len
= sizeof(ppa
);
4236 strioc_ppa
.ic_dp
= (char *)&ppa
;
4237 if ((ppa
= ioctl (tap_fd
, I_STR
, &strioc_ppa
)) < 0)
4238 syslog (LOG_ERR
, "Can't assign new interface");
4240 TFR(if_fd
= open("/dev/tap", O_RDWR
, 0));
4242 syslog(LOG_ERR
, "Can't open /dev/tap (2)");
4245 if(ioctl(if_fd
, I_PUSH
, "ip") < 0){
4246 syslog(LOG_ERR
, "Can't push IP module");
4250 if (ioctl(if_fd
, SIOCGLIFFLAGS
, &ifr
) < 0)
4251 syslog(LOG_ERR
, "Can't get flags\n");
4253 snprintf (actual_name
, 32, "tap%d", ppa
);
4254 strncpy (ifr
.lifr_name
, actual_name
, sizeof (ifr
.lifr_name
));
4257 /* Assign ppa according to the unit number returned by tun device */
4259 if (ioctl (if_fd
, SIOCSLIFNAME
, &ifr
) < 0)
4260 syslog (LOG_ERR
, "Can't set PPA %d", ppa
);
4261 if (ioctl(if_fd
, SIOCGLIFFLAGS
, &ifr
) <0)
4262 syslog (LOG_ERR
, "Can't get flags\n");
4263 /* Push arp module to if_fd */
4264 if (ioctl (if_fd
, I_PUSH
, "arp") < 0)
4265 syslog (LOG_ERR
, "Can't push ARP module (2)");
4267 /* Push arp module to ip_fd */
4268 if (ioctl (ip_fd
, I_POP
, NULL
) < 0)
4269 syslog (LOG_ERR
, "I_POP failed\n");
4270 if (ioctl (ip_fd
, I_PUSH
, "arp") < 0)
4271 syslog (LOG_ERR
, "Can't push ARP module (3)\n");
4273 TFR(arp_fd
= open ("/dev/tap", O_RDWR
, 0));
4275 syslog (LOG_ERR
, "Can't open %s\n", "/dev/tap");
4277 /* Set ifname to arp */
4278 strioc_if
.ic_cmd
= SIOCSLIFNAME
;
4279 strioc_if
.ic_timout
= 0;
4280 strioc_if
.ic_len
= sizeof(ifr
);
4281 strioc_if
.ic_dp
= (char *)&ifr
;
4282 if (ioctl(arp_fd
, I_STR
, &strioc_if
) < 0){
4283 syslog (LOG_ERR
, "Can't set ifname to arp\n");
4286 if((ip_muxid
= ioctl(ip_fd
, I_LINK
, if_fd
)) < 0){
4287 syslog(LOG_ERR
, "Can't link TAP device to IP");
4291 if ((arp_muxid
= ioctl (ip_fd
, link_type
, arp_fd
)) < 0)
4292 syslog (LOG_ERR
, "Can't link TAP device to ARP");
4296 memset(&ifr
, 0x0, sizeof(ifr
));
4297 strncpy (ifr
.lifr_name
, actual_name
, sizeof (ifr
.lifr_name
));
4298 ifr
.lifr_ip_muxid
= ip_muxid
;
4299 ifr
.lifr_arp_muxid
= arp_muxid
;
4301 if (ioctl (ip_fd
, SIOCSLIFMUXID
, &ifr
) < 0)
4303 ioctl (ip_fd
, I_PUNLINK
, arp_muxid
);
4304 ioctl (ip_fd
, I_PUNLINK
, ip_muxid
);
4305 syslog (LOG_ERR
, "Can't set multiplexor id");
4308 sprintf(dev
, "tap%d", ppa
);
4312 static int tap_open(char *ifname
, int ifname_size
)
4316 if( (fd
= tap_alloc(dev
)) < 0 ){
4317 fprintf(stderr
, "Cannot allocate TAP device\n");
4320 pstrcpy(ifname
, ifname_size
, dev
);
4321 fcntl(fd
, F_SETFL
, O_NONBLOCK
);
4325 static int tap_open(char *ifname
, int ifname_size
)
4330 TFR(fd
= open("/dev/net/tun", O_RDWR
));
4332 fprintf(stderr
, "warning: could not open /dev/net/tun: no virtual network emulation\n");
4335 memset(&ifr
, 0, sizeof(ifr
));
4336 ifr
.ifr_flags
= IFF_TAP
| IFF_NO_PI
;
4337 if (ifname
[0] != '\0')
4338 pstrcpy(ifr
.ifr_name
, IFNAMSIZ
, ifname
);
4340 pstrcpy(ifr
.ifr_name
, IFNAMSIZ
, "tap%d");
4341 ret
= ioctl(fd
, TUNSETIFF
, (void *) &ifr
);
4343 fprintf(stderr
, "warning: could not configure /dev/net/tun: no virtual network emulation\n");
4347 pstrcpy(ifname
, ifname_size
, ifr
.ifr_name
);
4348 fcntl(fd
, F_SETFL
, O_NONBLOCK
);
4353 static int launch_script(const char *setup_script
, const char *ifname
, int fd
)
4359 /* try to launch network script */
4363 int open_max
= sysconf (_SC_OPEN_MAX
), i
;
4364 for (i
= 0; i
< open_max
; i
++)
4365 if (i
!= STDIN_FILENO
&&
4366 i
!= STDOUT_FILENO
&&
4367 i
!= STDERR_FILENO
&&
4372 *parg
++ = (char *)setup_script
;
4373 *parg
++ = (char *)ifname
;
4375 execv(setup_script
, args
);
4378 while (waitpid(pid
, &status
, 0) != pid
);
4379 if (!WIFEXITED(status
) ||
4380 WEXITSTATUS(status
) != 0) {
4381 fprintf(stderr
, "%s: could not launch network script\n",
4389 static int net_tap_init(VLANState
*vlan
, const char *ifname1
,
4390 const char *setup_script
, const char *down_script
)
4396 if (ifname1
!= NULL
)
4397 pstrcpy(ifname
, sizeof(ifname
), ifname1
);
4400 TFR(fd
= tap_open(ifname
, sizeof(ifname
)));
4404 if (!setup_script
|| !strcmp(setup_script
, "no"))
4406 if (setup_script
[0] != '\0') {
4407 if (launch_script(setup_script
, ifname
, fd
))
4410 s
= net_tap_fd_init(vlan
, fd
);
4413 snprintf(s
->vc
->info_str
, sizeof(s
->vc
->info_str
),
4414 "tap: ifname=%s setup_script=%s", ifname
, setup_script
);
4415 if (down_script
&& strcmp(down_script
, "no"))
4416 snprintf(s
->down_script
, sizeof(s
->down_script
), "%s", down_script
);
4420 #endif /* !_WIN32 */
4422 /* network connection */
4423 typedef struct NetSocketState
{
4424 VLANClientState
*vc
;
4426 int state
; /* 0 = getting length, 1 = getting data */
4430 struct sockaddr_in dgram_dst
; /* contains inet host and port destination iff connectionless (SOCK_DGRAM) */
4433 typedef struct NetSocketListenState
{
4436 } NetSocketListenState
;
4438 /* XXX: we consider we can send the whole packet without blocking */
4439 static void net_socket_receive(void *opaque
, const uint8_t *buf
, int size
)
4441 NetSocketState
*s
= opaque
;
4445 send_all(s
->fd
, (const uint8_t *)&len
, sizeof(len
));
4446 send_all(s
->fd
, buf
, size
);
4449 static void net_socket_receive_dgram(void *opaque
, const uint8_t *buf
, int size
)
4451 NetSocketState
*s
= opaque
;
4452 sendto(s
->fd
, buf
, size
, 0,
4453 (struct sockaddr
*)&s
->dgram_dst
, sizeof(s
->dgram_dst
));
4456 static void net_socket_send(void *opaque
)
4458 NetSocketState
*s
= opaque
;
4463 size
= recv(s
->fd
, buf1
, sizeof(buf1
), 0);
4465 err
= socket_error();
4466 if (err
!= EWOULDBLOCK
)
4468 } else if (size
== 0) {
4469 /* end of connection */
4471 qemu_set_fd_handler(s
->fd
, NULL
, NULL
, NULL
);
4477 /* reassemble a packet from the network */
4483 memcpy(s
->buf
+ s
->index
, buf
, l
);
4487 if (s
->index
== 4) {
4489 s
->packet_len
= ntohl(*(uint32_t *)s
->buf
);
4495 l
= s
->packet_len
- s
->index
;
4498 memcpy(s
->buf
+ s
->index
, buf
, l
);
4502 if (s
->index
>= s
->packet_len
) {
4503 qemu_send_packet(s
->vc
, s
->buf
, s
->packet_len
);
4512 static void net_socket_send_dgram(void *opaque
)
4514 NetSocketState
*s
= opaque
;
4517 size
= recv(s
->fd
, s
->buf
, sizeof(s
->buf
), 0);
4521 /* end of connection */
4522 qemu_set_fd_handler(s
->fd
, NULL
, NULL
, NULL
);
4525 qemu_send_packet(s
->vc
, s
->buf
, size
);
4528 static int net_socket_mcast_create(struct sockaddr_in
*mcastaddr
)
4533 if (!IN_MULTICAST(ntohl(mcastaddr
->sin_addr
.s_addr
))) {
4534 fprintf(stderr
, "qemu: error: specified mcastaddr \"%s\" (0x%08x) does not contain a multicast address\n",
4535 inet_ntoa(mcastaddr
->sin_addr
),
4536 (int)ntohl(mcastaddr
->sin_addr
.s_addr
));
4540 fd
= socket(PF_INET
, SOCK_DGRAM
, 0);
4542 perror("socket(PF_INET, SOCK_DGRAM)");
4547 ret
=setsockopt(fd
, SOL_SOCKET
, SO_REUSEADDR
,
4548 (const char *)&val
, sizeof(val
));
4550 perror("setsockopt(SOL_SOCKET, SO_REUSEADDR)");
4554 ret
= bind(fd
, (struct sockaddr
*)mcastaddr
, sizeof(*mcastaddr
));
4560 /* Add host to multicast group */
4561 imr
.imr_multiaddr
= mcastaddr
->sin_addr
;
4562 imr
.imr_interface
.s_addr
= htonl(INADDR_ANY
);
4564 ret
= setsockopt(fd
, IPPROTO_IP
, IP_ADD_MEMBERSHIP
,
4565 (const char *)&imr
, sizeof(struct ip_mreq
));
4567 perror("setsockopt(IP_ADD_MEMBERSHIP)");
4571 /* Force mcast msgs to loopback (eg. several QEMUs in same host */
4573 ret
=setsockopt(fd
, IPPROTO_IP
, IP_MULTICAST_LOOP
,
4574 (const char *)&val
, sizeof(val
));
4576 perror("setsockopt(SOL_IP, IP_MULTICAST_LOOP)");
4580 socket_set_nonblock(fd
);
4588 static NetSocketState
*net_socket_fd_init_dgram(VLANState
*vlan
, int fd
,
4591 struct sockaddr_in saddr
;
4593 socklen_t saddr_len
;
4596 /* fd passed: multicast: "learn" dgram_dst address from bound address and save it
4597 * Because this may be "shared" socket from a "master" process, datagrams would be recv()
4598 * by ONLY ONE process: we must "clone" this dgram socket --jjo
4602 if (getsockname(fd
, (struct sockaddr
*) &saddr
, &saddr_len
) == 0) {
4604 if (saddr
.sin_addr
.s_addr
==0) {
4605 fprintf(stderr
, "qemu: error: init_dgram: fd=%d unbound, cannot setup multicast dst addr\n",
4609 /* clone dgram socket */
4610 newfd
= net_socket_mcast_create(&saddr
);
4612 /* error already reported by net_socket_mcast_create() */
4616 /* clone newfd to fd, close newfd */
4621 fprintf(stderr
, "qemu: error: init_dgram: fd=%d failed getsockname(): %s\n",
4622 fd
, strerror(errno
));
4627 s
= qemu_mallocz(sizeof(NetSocketState
));
4632 s
->vc
= qemu_new_vlan_client(vlan
, net_socket_receive_dgram
, NULL
, s
);
4633 qemu_set_fd_handler(s
->fd
, net_socket_send_dgram
, NULL
, s
);
4635 /* mcast: save bound address as dst */
4636 if (is_connected
) s
->dgram_dst
=saddr
;
4638 snprintf(s
->vc
->info_str
, sizeof(s
->vc
->info_str
),
4639 "socket: fd=%d (%s mcast=%s:%d)",
4640 fd
, is_connected
? "cloned" : "",
4641 inet_ntoa(saddr
.sin_addr
), ntohs(saddr
.sin_port
));
4645 static void net_socket_connect(void *opaque
)
4647 NetSocketState
*s
= opaque
;
4648 qemu_set_fd_handler(s
->fd
, net_socket_send
, NULL
, s
);
4651 static NetSocketState
*net_socket_fd_init_stream(VLANState
*vlan
, int fd
,
4655 s
= qemu_mallocz(sizeof(NetSocketState
));
4659 s
->vc
= qemu_new_vlan_client(vlan
,
4660 net_socket_receive
, NULL
, s
);
4661 snprintf(s
->vc
->info_str
, sizeof(s
->vc
->info_str
),
4662 "socket: fd=%d", fd
);
4664 net_socket_connect(s
);
4666 qemu_set_fd_handler(s
->fd
, NULL
, net_socket_connect
, s
);
4671 static NetSocketState
*net_socket_fd_init(VLANState
*vlan
, int fd
,
4674 int so_type
=-1, optlen
=sizeof(so_type
);
4676 if(getsockopt(fd
, SOL_SOCKET
, SO_TYPE
, (char *)&so_type
,
4677 (socklen_t
*)&optlen
)< 0) {
4678 fprintf(stderr
, "qemu: error: getsockopt(SO_TYPE) for fd=%d failed\n", fd
);
4683 return net_socket_fd_init_dgram(vlan
, fd
, is_connected
);
4685 return net_socket_fd_init_stream(vlan
, fd
, is_connected
);
4687 /* who knows ... this could be a eg. a pty, do warn and continue as stream */
4688 fprintf(stderr
, "qemu: warning: socket type=%d for fd=%d is not SOCK_DGRAM or SOCK_STREAM\n", so_type
, fd
);
4689 return net_socket_fd_init_stream(vlan
, fd
, is_connected
);
4694 static void net_socket_accept(void *opaque
)
4696 NetSocketListenState
*s
= opaque
;
4698 struct sockaddr_in saddr
;
4703 len
= sizeof(saddr
);
4704 fd
= accept(s
->fd
, (struct sockaddr
*)&saddr
, &len
);
4705 if (fd
< 0 && errno
!= EINTR
) {
4707 } else if (fd
>= 0) {
4711 s1
= net_socket_fd_init(s
->vlan
, fd
, 1);
4715 snprintf(s1
->vc
->info_str
, sizeof(s1
->vc
->info_str
),
4716 "socket: connection from %s:%d",
4717 inet_ntoa(saddr
.sin_addr
), ntohs(saddr
.sin_port
));
4721 static int net_socket_listen_init(VLANState
*vlan
, const char *host_str
)
4723 NetSocketListenState
*s
;
4725 struct sockaddr_in saddr
;
4727 if (parse_host_port(&saddr
, host_str
) < 0)
4730 s
= qemu_mallocz(sizeof(NetSocketListenState
));
4734 fd
= socket(PF_INET
, SOCK_STREAM
, 0);
4739 socket_set_nonblock(fd
);
4741 /* allow fast reuse */
4743 setsockopt(fd
, SOL_SOCKET
, SO_REUSEADDR
, (const char *)&val
, sizeof(val
));
4745 ret
= bind(fd
, (struct sockaddr
*)&saddr
, sizeof(saddr
));
4750 ret
= listen(fd
, 0);
4757 qemu_set_fd_handler(fd
, net_socket_accept
, NULL
, s
);
4761 static int net_socket_connect_init(VLANState
*vlan
, const char *host_str
)
4764 int fd
, connected
, ret
, err
;
4765 struct sockaddr_in saddr
;
4767 if (parse_host_port(&saddr
, host_str
) < 0)
4770 fd
= socket(PF_INET
, SOCK_STREAM
, 0);
4775 socket_set_nonblock(fd
);
4779 ret
= connect(fd
, (struct sockaddr
*)&saddr
, sizeof(saddr
));
4781 err
= socket_error();
4782 if (err
== EINTR
|| err
== EWOULDBLOCK
) {
4783 } else if (err
== EINPROGRESS
) {
4786 } else if (err
== WSAEALREADY
) {
4799 s
= net_socket_fd_init(vlan
, fd
, connected
);
4802 snprintf(s
->vc
->info_str
, sizeof(s
->vc
->info_str
),
4803 "socket: connect to %s:%d",
4804 inet_ntoa(saddr
.sin_addr
), ntohs(saddr
.sin_port
));
4808 static int net_socket_mcast_init(VLANState
*vlan
, const char *host_str
)
4812 struct sockaddr_in saddr
;
4814 if (parse_host_port(&saddr
, host_str
) < 0)
4818 fd
= net_socket_mcast_create(&saddr
);
4822 s
= net_socket_fd_init(vlan
, fd
, 0);
4826 s
->dgram_dst
= saddr
;
4828 snprintf(s
->vc
->info_str
, sizeof(s
->vc
->info_str
),
4829 "socket: mcast=%s:%d",
4830 inet_ntoa(saddr
.sin_addr
), ntohs(saddr
.sin_port
));
4835 static const char *get_opt_name(char *buf
, int buf_size
, const char *p
)
4840 while (*p
!= '\0' && *p
!= '=') {
4841 if (q
&& (q
- buf
) < buf_size
- 1)
4851 static const char *get_opt_value(char *buf
, int buf_size
, const char *p
)
4856 while (*p
!= '\0') {
4858 if (*(p
+ 1) != ',')
4862 if (q
&& (q
- buf
) < buf_size
- 1)
4872 static int get_param_value(char *buf
, int buf_size
,
4873 const char *tag
, const char *str
)
4880 p
= get_opt_name(option
, sizeof(option
), p
);
4884 if (!strcmp(tag
, option
)) {
4885 (void)get_opt_value(buf
, buf_size
, p
);
4888 p
= get_opt_value(NULL
, 0, p
);
4897 static int check_params(char *buf
, int buf_size
,
4898 char **params
, const char *str
)
4905 p
= get_opt_name(buf
, buf_size
, p
);
4909 for(i
= 0; params
[i
] != NULL
; i
++)
4910 if (!strcmp(params
[i
], buf
))
4912 if (params
[i
] == NULL
)
4914 p
= get_opt_value(NULL
, 0, p
);
4923 static int net_client_init(const char *str
)
4934 while (*p
!= '\0' && *p
!= ',') {
4935 if ((q
- device
) < sizeof(device
) - 1)
4943 if (get_param_value(buf
, sizeof(buf
), "vlan", p
)) {
4944 vlan_id
= strtol(buf
, NULL
, 0);
4946 vlan
= qemu_find_vlan(vlan_id
);
4948 fprintf(stderr
, "Could not create vlan %d\n", vlan_id
);
4951 if (!strcmp(device
, "nic")) {
4955 if (nb_nics
>= MAX_NICS
) {
4956 fprintf(stderr
, "Too Many NICs\n");
4959 nd
= &nd_table
[nb_nics
];
4960 macaddr
= nd
->macaddr
;
4966 macaddr
[5] = 0x56 + nb_nics
;
4968 if (get_param_value(buf
, sizeof(buf
), "macaddr", p
)) {
4969 if (parse_macaddr(macaddr
, buf
) < 0) {
4970 fprintf(stderr
, "invalid syntax for ethernet address\n");
4974 if (get_param_value(buf
, sizeof(buf
), "model", p
)) {
4975 nd
->model
= strdup(buf
);
4979 vlan
->nb_guest_devs
++;
4982 if (!strcmp(device
, "none")) {
4983 /* does nothing. It is needed to signal that no network cards
4988 if (!strcmp(device
, "user")) {
4989 if (get_param_value(buf
, sizeof(buf
), "hostname", p
)) {
4990 pstrcpy(slirp_hostname
, sizeof(slirp_hostname
), buf
);
4992 vlan
->nb_host_devs
++;
4993 ret
= net_slirp_init(vlan
);
4997 if (!strcmp(device
, "tap")) {
4999 if (get_param_value(ifname
, sizeof(ifname
), "ifname", p
) <= 0) {
5000 fprintf(stderr
, "tap: no interface name\n");
5003 vlan
->nb_host_devs
++;
5004 ret
= tap_win32_init(vlan
, ifname
);
5007 if (!strcmp(device
, "tap")) {
5009 char setup_script
[1024], down_script
[1024];
5011 vlan
->nb_host_devs
++;
5012 if (get_param_value(buf
, sizeof(buf
), "fd", p
) > 0) {
5013 fd
= strtol(buf
, NULL
, 0);
5014 fcntl(fd
, F_SETFL
, O_NONBLOCK
);
5016 if (net_tap_fd_init(vlan
, fd
))
5019 if (get_param_value(ifname
, sizeof(ifname
), "ifname", p
) <= 0) {
5022 if (get_param_value(setup_script
, sizeof(setup_script
), "script", p
) == 0) {
5023 pstrcpy(setup_script
, sizeof(setup_script
), DEFAULT_NETWORK_SCRIPT
);
5025 if (get_param_value(down_script
, sizeof(down_script
), "downscript", p
) == 0) {
5026 pstrcpy(down_script
, sizeof(down_script
), DEFAULT_NETWORK_DOWN_SCRIPT
);
5028 ret
= net_tap_init(vlan
, ifname
, setup_script
, down_script
);
5032 if (!strcmp(device
, "socket")) {
5033 if (get_param_value(buf
, sizeof(buf
), "fd", p
) > 0) {
5035 fd
= strtol(buf
, NULL
, 0);
5037 if (net_socket_fd_init(vlan
, fd
, 1))
5039 } else if (get_param_value(buf
, sizeof(buf
), "listen", p
) > 0) {
5040 ret
= net_socket_listen_init(vlan
, buf
);
5041 } else if (get_param_value(buf
, sizeof(buf
), "connect", p
) > 0) {
5042 ret
= net_socket_connect_init(vlan
, buf
);
5043 } else if (get_param_value(buf
, sizeof(buf
), "mcast", p
) > 0) {
5044 ret
= net_socket_mcast_init(vlan
, buf
);
5046 fprintf(stderr
, "Unknown socket options: %s\n", p
);
5049 vlan
->nb_host_devs
++;
5052 fprintf(stderr
, "Unknown network device: %s\n", device
);
5056 fprintf(stderr
, "Could not initialize device '%s'\n", device
);
5062 void do_info_network(void)
5065 VLANClientState
*vc
;
5067 for(vlan
= first_vlan
; vlan
!= NULL
; vlan
= vlan
->next
) {
5068 term_printf("VLAN %d devices:\n", vlan
->id
);
5069 for(vc
= vlan
->first_client
; vc
!= NULL
; vc
= vc
->next
)
5070 term_printf(" %s\n", vc
->info_str
);
5074 #define HD_ALIAS "index=%d,media=disk"
5076 #define CDROM_ALIAS "index=1,media=cdrom"
5078 #define CDROM_ALIAS "index=2,media=cdrom"
5080 #define FD_ALIAS "index=%d,if=floppy"
5081 #define PFLASH_ALIAS "if=pflash"
5082 #define MTD_ALIAS "if=mtd"
5083 #define SD_ALIAS "index=0,if=sd"
5085 static int drive_add(const char *file
, const char *fmt
, ...)
5089 if (nb_drives_opt
>= MAX_DRIVES
) {
5090 fprintf(stderr
, "qemu: too many drives\n");
5094 drives_opt
[nb_drives_opt
].file
= file
;
5096 vsnprintf(drives_opt
[nb_drives_opt
].opt
,
5097 sizeof(drives_opt
[0].opt
), fmt
, ap
);
5100 return nb_drives_opt
++;
5103 int drive_get_index(BlockInterfaceType type
, int bus
, int unit
)
5107 /* seek interface, bus and unit */
5109 for (index
= 0; index
< nb_drives
; index
++)
5110 if (drives_table
[index
].type
== type
&&
5111 drives_table
[index
].bus
== bus
&&
5112 drives_table
[index
].unit
== unit
)
5118 int drive_get_max_bus(BlockInterfaceType type
)
5124 for (index
= 0; index
< nb_drives
; index
++) {
5125 if(drives_table
[index
].type
== type
&&
5126 drives_table
[index
].bus
> max_bus
)
5127 max_bus
= drives_table
[index
].bus
;
5132 static void bdrv_format_print(void *opaque
, const char *name
)
5134 fprintf(stderr
, " %s", name
);
5137 static int drive_init(struct drive_opt
*arg
, int snapshot
,
5138 QEMUMachine
*machine
)
5143 const char *mediastr
= "";
5144 BlockInterfaceType type
;
5145 enum { MEDIA_DISK
, MEDIA_CDROM
} media
;
5146 int bus_id
, unit_id
;
5147 int cyls
, heads
, secs
, translation
;
5148 BlockDriverState
*bdrv
;
5149 BlockDriver
*drv
= NULL
;
5154 char *str
= arg
->opt
;
5155 char *params
[] = { "bus", "unit", "if", "index", "cyls", "heads",
5156 "secs", "trans", "media", "snapshot", "file",
5157 "cache", "format", NULL
};
5159 if (check_params(buf
, sizeof(buf
), params
, str
) < 0) {
5160 fprintf(stderr
, "qemu: unknown parameter '%s' in '%s'\n",
5166 cyls
= heads
= secs
= 0;
5169 translation
= BIOS_ATA_TRANSLATION_AUTO
;
5173 if (!strcmp(machine
->name
, "realview") ||
5174 !strcmp(machine
->name
, "SS-5") ||
5175 !strcmp(machine
->name
, "SS-10") ||
5176 !strcmp(machine
->name
, "SS-600MP") ||
5177 !strcmp(machine
->name
, "versatilepb") ||
5178 !strcmp(machine
->name
, "versatileab")) {
5180 max_devs
= MAX_SCSI_DEVS
;
5181 strcpy(devname
, "scsi");
5184 max_devs
= MAX_IDE_DEVS
;
5185 strcpy(devname
, "ide");
5189 /* extract parameters */
5191 if (get_param_value(buf
, sizeof(buf
), "bus", str
)) {
5192 bus_id
= strtol(buf
, NULL
, 0);
5194 fprintf(stderr
, "qemu: '%s' invalid bus id\n", str
);
5199 if (get_param_value(buf
, sizeof(buf
), "unit", str
)) {
5200 unit_id
= strtol(buf
, NULL
, 0);
5202 fprintf(stderr
, "qemu: '%s' invalid unit id\n", str
);
5207 if (get_param_value(buf
, sizeof(buf
), "if", str
)) {
5208 pstrcpy(devname
, sizeof(devname
), buf
);
5209 if (!strcmp(buf
, "ide")) {
5211 max_devs
= MAX_IDE_DEVS
;
5212 } else if (!strcmp(buf
, "scsi")) {
5214 max_devs
= MAX_SCSI_DEVS
;
5215 } else if (!strcmp(buf
, "floppy")) {
5218 } else if (!strcmp(buf
, "pflash")) {
5221 } else if (!strcmp(buf
, "mtd")) {
5224 } else if (!strcmp(buf
, "sd")) {
5228 fprintf(stderr
, "qemu: '%s' unsupported bus type '%s'\n", str
, buf
);
5233 if (get_param_value(buf
, sizeof(buf
), "index", str
)) {
5234 index
= strtol(buf
, NULL
, 0);
5236 fprintf(stderr
, "qemu: '%s' invalid index\n", str
);
5241 if (get_param_value(buf
, sizeof(buf
), "cyls", str
)) {
5242 cyls
= strtol(buf
, NULL
, 0);
5245 if (get_param_value(buf
, sizeof(buf
), "heads", str
)) {
5246 heads
= strtol(buf
, NULL
, 0);
5249 if (get_param_value(buf
, sizeof(buf
), "secs", str
)) {
5250 secs
= strtol(buf
, NULL
, 0);
5253 if (cyls
|| heads
|| secs
) {
5254 if (cyls
< 1 || cyls
> 16383) {
5255 fprintf(stderr
, "qemu: '%s' invalid physical cyls number\n", str
);
5258 if (heads
< 1 || heads
> 16) {
5259 fprintf(stderr
, "qemu: '%s' invalid physical heads number\n", str
);
5262 if (secs
< 1 || secs
> 63) {
5263 fprintf(stderr
, "qemu: '%s' invalid physical secs number\n", str
);
5268 if (get_param_value(buf
, sizeof(buf
), "trans", str
)) {
5271 "qemu: '%s' trans must be used with cyls,heads and secs\n",
5275 if (!strcmp(buf
, "none"))
5276 translation
= BIOS_ATA_TRANSLATION_NONE
;
5277 else if (!strcmp(buf
, "lba"))
5278 translation
= BIOS_ATA_TRANSLATION_LBA
;
5279 else if (!strcmp(buf
, "auto"))
5280 translation
= BIOS_ATA_TRANSLATION_AUTO
;
5282 fprintf(stderr
, "qemu: '%s' invalid translation type\n", str
);
5287 if (get_param_value(buf
, sizeof(buf
), "media", str
)) {
5288 if (!strcmp(buf
, "disk")) {
5290 } else if (!strcmp(buf
, "cdrom")) {
5291 if (cyls
|| secs
|| heads
) {
5293 "qemu: '%s' invalid physical CHS format\n", str
);
5296 media
= MEDIA_CDROM
;
5298 fprintf(stderr
, "qemu: '%s' invalid media\n", str
);
5303 if (get_param_value(buf
, sizeof(buf
), "snapshot", str
)) {
5304 if (!strcmp(buf
, "on"))
5306 else if (!strcmp(buf
, "off"))
5309 fprintf(stderr
, "qemu: '%s' invalid snapshot option\n", str
);
5314 if (get_param_value(buf
, sizeof(buf
), "cache", str
)) {
5315 if (!strcmp(buf
, "off"))
5317 else if (!strcmp(buf
, "on"))
5320 fprintf(stderr
, "qemu: invalid cache option\n");
5325 if (get_param_value(buf
, sizeof(buf
), "format", str
)) {
5326 if (strcmp(buf
, "?") == 0) {
5327 fprintf(stderr
, "qemu: Supported formats:");
5328 bdrv_iterate_format(bdrv_format_print
, NULL
);
5329 fprintf(stderr
, "\n");
5332 drv
= bdrv_find_format(buf
);
5334 fprintf(stderr
, "qemu: '%s' invalid format\n", buf
);
5339 if (arg
->file
== NULL
)
5340 get_param_value(file
, sizeof(file
), "file", str
);
5342 pstrcpy(file
, sizeof(file
), arg
->file
);
5344 /* compute bus and unit according index */
5347 if (bus_id
!= 0 || unit_id
!= -1) {
5349 "qemu: '%s' index cannot be used with bus and unit\n", str
);
5357 unit_id
= index
% max_devs
;
5358 bus_id
= index
/ max_devs
;
5362 /* if user doesn't specify a unit_id,
5363 * try to find the first free
5366 if (unit_id
== -1) {
5368 while (drive_get_index(type
, bus_id
, unit_id
) != -1) {
5370 if (max_devs
&& unit_id
>= max_devs
) {
5371 unit_id
-= max_devs
;
5379 if (max_devs
&& unit_id
>= max_devs
) {
5380 fprintf(stderr
, "qemu: '%s' unit %d too big (max is %d)\n",
5381 str
, unit_id
, max_devs
- 1);
5386 * ignore multiple definitions
5389 if (drive_get_index(type
, bus_id
, unit_id
) != -1)
5394 if (type
== IF_IDE
|| type
== IF_SCSI
)
5395 mediastr
= (media
== MEDIA_CDROM
) ? "-cd" : "-hd";
5397 snprintf(buf
, sizeof(buf
), "%s%i%s%i",
5398 devname
, bus_id
, mediastr
, unit_id
);
5400 snprintf(buf
, sizeof(buf
), "%s%s%i",
5401 devname
, mediastr
, unit_id
);
5402 bdrv
= bdrv_new(buf
);
5403 drives_table
[nb_drives
].bdrv
= bdrv
;
5404 drives_table
[nb_drives
].type
= type
;
5405 drives_table
[nb_drives
].bus
= bus_id
;
5406 drives_table
[nb_drives
].unit
= unit_id
;
5415 bdrv_set_geometry_hint(bdrv
, cyls
, heads
, secs
);
5416 bdrv_set_translation_hint(bdrv
, translation
);
5420 bdrv_set_type_hint(bdrv
, BDRV_TYPE_CDROM
);
5425 /* FIXME: This isn't really a floppy, but it's a reasonable
5428 bdrv_set_type_hint(bdrv
, BDRV_TYPE_FLOPPY
);
5438 bdrv_flags
|= BDRV_O_SNAPSHOT
;
5440 bdrv_flags
|= BDRV_O_DIRECT
;
5441 if (bdrv_open2(bdrv
, file
, bdrv_flags
, drv
) < 0 || qemu_key_check(bdrv
, file
)) {
5442 fprintf(stderr
, "qemu: could not open disk image %s\n",
5449 /***********************************************************/
5452 static USBPort
*used_usb_ports
;
5453 static USBPort
*free_usb_ports
;
5455 /* ??? Maybe change this to register a hub to keep track of the topology. */
5456 void qemu_register_usb_port(USBPort
*port
, void *opaque
, int index
,
5457 usb_attachfn attach
)
5459 port
->opaque
= opaque
;
5460 port
->index
= index
;
5461 port
->attach
= attach
;
5462 port
->next
= free_usb_ports
;
5463 free_usb_ports
= port
;
5466 static int usb_device_add(const char *devname
)
5472 if (!free_usb_ports
)
5475 if (strstart(devname
, "host:", &p
)) {
5476 dev
= usb_host_device_open(p
);
5477 } else if (!strcmp(devname
, "mouse")) {
5478 dev
= usb_mouse_init();
5479 } else if (!strcmp(devname
, "tablet")) {
5480 dev
= usb_tablet_init();
5481 } else if (!strcmp(devname
, "keyboard")) {
5482 dev
= usb_keyboard_init();
5483 } else if (strstart(devname
, "disk:", &p
)) {
5484 dev
= usb_msd_init(p
);
5485 } else if (!strcmp(devname
, "wacom-tablet")) {
5486 dev
= usb_wacom_init();
5487 } else if (strstart(devname
, "serial:", &p
)) {
5488 dev
= usb_serial_init(p
);
5489 #ifdef CONFIG_BRLAPI
5490 } else if (!strcmp(devname
, "braille")) {
5491 dev
= usb_baum_init();
5493 } else if (strstart(devname
, "net:", &p
)) {
5494 int nicidx
= strtoul(p
, NULL
, 0);
5496 if (nicidx
>= nb_nics
|| strcmp(nd_table
[nicidx
].model
, "usb"))
5498 dev
= usb_net_init(&nd_table
[nicidx
]);
5505 /* Find a USB port to add the device to. */
5506 port
= free_usb_ports
;
5510 /* Create a new hub and chain it on. */
5511 free_usb_ports
= NULL
;
5512 port
->next
= used_usb_ports
;
5513 used_usb_ports
= port
;
5515 hub
= usb_hub_init(VM_USB_HUB_SIZE
);
5516 usb_attach(port
, hub
);
5517 port
= free_usb_ports
;
5520 free_usb_ports
= port
->next
;
5521 port
->next
= used_usb_ports
;
5522 used_usb_ports
= port
;
5523 usb_attach(port
, dev
);
5527 static int usb_device_del(const char *devname
)
5535 if (!used_usb_ports
)
5538 p
= strchr(devname
, '.');
5541 bus_num
= strtoul(devname
, NULL
, 0);
5542 addr
= strtoul(p
+ 1, NULL
, 0);
5546 lastp
= &used_usb_ports
;
5547 port
= used_usb_ports
;
5548 while (port
&& port
->dev
->addr
!= addr
) {
5549 lastp
= &port
->next
;
5557 *lastp
= port
->next
;
5558 usb_attach(port
, NULL
);
5559 dev
->handle_destroy(dev
);
5560 port
->next
= free_usb_ports
;
5561 free_usb_ports
= port
;
5565 void do_usb_add(const char *devname
)
5568 ret
= usb_device_add(devname
);
5570 term_printf("Could not add USB device '%s'\n", devname
);
5573 void do_usb_del(const char *devname
)
5576 ret
= usb_device_del(devname
);
5578 term_printf("Could not remove USB device '%s'\n", devname
);
5585 const char *speed_str
;
5588 term_printf("USB support not enabled\n");
5592 for (port
= used_usb_ports
; port
; port
= port
->next
) {
5596 switch(dev
->speed
) {
5600 case USB_SPEED_FULL
:
5603 case USB_SPEED_HIGH
:
5610 term_printf(" Device %d.%d, Speed %s Mb/s, Product %s\n",
5611 0, dev
->addr
, speed_str
, dev
->devname
);
5615 /***********************************************************/
5616 /* PCMCIA/Cardbus */
5618 static struct pcmcia_socket_entry_s
{
5619 struct pcmcia_socket_s
*socket
;
5620 struct pcmcia_socket_entry_s
*next
;
5621 } *pcmcia_sockets
= 0;
5623 void pcmcia_socket_register(struct pcmcia_socket_s
*socket
)
5625 struct pcmcia_socket_entry_s
*entry
;
5627 entry
= qemu_malloc(sizeof(struct pcmcia_socket_entry_s
));
5628 entry
->socket
= socket
;
5629 entry
->next
= pcmcia_sockets
;
5630 pcmcia_sockets
= entry
;
5633 void pcmcia_socket_unregister(struct pcmcia_socket_s
*socket
)
5635 struct pcmcia_socket_entry_s
*entry
, **ptr
;
5637 ptr
= &pcmcia_sockets
;
5638 for (entry
= *ptr
; entry
; ptr
= &entry
->next
, entry
= *ptr
)
5639 if (entry
->socket
== socket
) {
5645 void pcmcia_info(void)
5647 struct pcmcia_socket_entry_s
*iter
;
5648 if (!pcmcia_sockets
)
5649 term_printf("No PCMCIA sockets\n");
5651 for (iter
= pcmcia_sockets
; iter
; iter
= iter
->next
)
5652 term_printf("%s: %s\n", iter
->socket
->slot_string
,
5653 iter
->socket
->attached
? iter
->socket
->card_string
:
5657 /***********************************************************/
5660 static void dumb_update(DisplayState
*ds
, int x
, int y
, int w
, int h
)
5664 static void dumb_resize(DisplayState
*ds
, int w
, int h
)
5668 static void dumb_refresh(DisplayState
*ds
)
5670 #if defined(CONFIG_SDL)
5675 static void dumb_display_init(DisplayState
*ds
)
5680 ds
->dpy_update
= dumb_update
;
5681 ds
->dpy_resize
= dumb_resize
;
5682 ds
->dpy_refresh
= dumb_refresh
;
5685 /***********************************************************/
5688 #define MAX_IO_HANDLERS 64
5690 typedef struct IOHandlerRecord
{
5692 IOCanRWHandler
*fd_read_poll
;
5694 IOHandler
*fd_write
;
5697 /* temporary data */
5699 struct IOHandlerRecord
*next
;
5702 static IOHandlerRecord
*first_io_handler
;
5704 /* XXX: fd_read_poll should be suppressed, but an API change is
5705 necessary in the character devices to suppress fd_can_read(). */
5706 int qemu_set_fd_handler2(int fd
,
5707 IOCanRWHandler
*fd_read_poll
,
5709 IOHandler
*fd_write
,
5712 IOHandlerRecord
**pioh
, *ioh
;
5714 if (!fd_read
&& !fd_write
) {
5715 pioh
= &first_io_handler
;
5720 if (ioh
->fd
== fd
) {
5727 for(ioh
= first_io_handler
; ioh
!= NULL
; ioh
= ioh
->next
) {
5731 ioh
= qemu_mallocz(sizeof(IOHandlerRecord
));
5734 ioh
->next
= first_io_handler
;
5735 first_io_handler
= ioh
;
5738 ioh
->fd_read_poll
= fd_read_poll
;
5739 ioh
->fd_read
= fd_read
;
5740 ioh
->fd_write
= fd_write
;
5741 ioh
->opaque
= opaque
;
5747 int qemu_set_fd_handler(int fd
,
5749 IOHandler
*fd_write
,
5752 return qemu_set_fd_handler2(fd
, NULL
, fd_read
, fd_write
, opaque
);
5755 /***********************************************************/
5756 /* Polling handling */
5758 typedef struct PollingEntry
{
5761 struct PollingEntry
*next
;
5764 static PollingEntry
*first_polling_entry
;
5766 int qemu_add_polling_cb(PollingFunc
*func
, void *opaque
)
5768 PollingEntry
**ppe
, *pe
;
5769 pe
= qemu_mallocz(sizeof(PollingEntry
));
5773 pe
->opaque
= opaque
;
5774 for(ppe
= &first_polling_entry
; *ppe
!= NULL
; ppe
= &(*ppe
)->next
);
5779 void qemu_del_polling_cb(PollingFunc
*func
, void *opaque
)
5781 PollingEntry
**ppe
, *pe
;
5782 for(ppe
= &first_polling_entry
; *ppe
!= NULL
; ppe
= &(*ppe
)->next
) {
5784 if (pe
->func
== func
&& pe
->opaque
== opaque
) {
5793 /***********************************************************/
5794 /* Wait objects support */
5795 typedef struct WaitObjects
{
5797 HANDLE events
[MAXIMUM_WAIT_OBJECTS
+ 1];
5798 WaitObjectFunc
*func
[MAXIMUM_WAIT_OBJECTS
+ 1];
5799 void *opaque
[MAXIMUM_WAIT_OBJECTS
+ 1];
5802 static WaitObjects wait_objects
= {0};
5804 int qemu_add_wait_object(HANDLE handle
, WaitObjectFunc
*func
, void *opaque
)
5806 WaitObjects
*w
= &wait_objects
;
5808 if (w
->num
>= MAXIMUM_WAIT_OBJECTS
)
5810 w
->events
[w
->num
] = handle
;
5811 w
->func
[w
->num
] = func
;
5812 w
->opaque
[w
->num
] = opaque
;
5817 void qemu_del_wait_object(HANDLE handle
, WaitObjectFunc
*func
, void *opaque
)
5820 WaitObjects
*w
= &wait_objects
;
5823 for (i
= 0; i
< w
->num
; i
++) {
5824 if (w
->events
[i
] == handle
)
5827 w
->events
[i
] = w
->events
[i
+ 1];
5828 w
->func
[i
] = w
->func
[i
+ 1];
5829 w
->opaque
[i
] = w
->opaque
[i
+ 1];
5837 /***********************************************************/
5838 /* savevm/loadvm support */
5840 #define IO_BUF_SIZE 32768
5844 BlockDriverState
*bs
;
5847 int64_t base_offset
;
5848 int64_t buf_offset
; /* start of buffer when writing, end of buffer
5851 int buf_size
; /* 0 when writing */
5852 uint8_t buf
[IO_BUF_SIZE
];
5855 QEMUFile
*qemu_fopen(const char *filename
, const char *mode
)
5859 f
= qemu_mallocz(sizeof(QEMUFile
));
5862 if (!strcmp(mode
, "wb")) {
5864 } else if (!strcmp(mode
, "rb")) {
5869 f
->outfile
= fopen(filename
, mode
);
5881 static QEMUFile
*qemu_fopen_bdrv(BlockDriverState
*bs
, int64_t offset
, int is_writable
)
5885 f
= qemu_mallocz(sizeof(QEMUFile
));
5890 f
->is_writable
= is_writable
;
5891 f
->base_offset
= offset
;
5895 void qemu_fflush(QEMUFile
*f
)
5897 if (!f
->is_writable
)
5899 if (f
->buf_index
> 0) {
5901 fseek(f
->outfile
, f
->buf_offset
, SEEK_SET
);
5902 fwrite(f
->buf
, 1, f
->buf_index
, f
->outfile
);
5904 bdrv_pwrite(f
->bs
, f
->base_offset
+ f
->buf_offset
,
5905 f
->buf
, f
->buf_index
);
5907 f
->buf_offset
+= f
->buf_index
;
5912 static void qemu_fill_buffer(QEMUFile
*f
)
5919 fseek(f
->outfile
, f
->buf_offset
, SEEK_SET
);
5920 len
= fread(f
->buf
, 1, IO_BUF_SIZE
, f
->outfile
);
5924 len
= bdrv_pread(f
->bs
, f
->base_offset
+ f
->buf_offset
,
5925 f
->buf
, IO_BUF_SIZE
);
5931 f
->buf_offset
+= len
;
5934 void qemu_fclose(QEMUFile
*f
)
5944 void qemu_put_buffer(QEMUFile
*f
, const uint8_t *buf
, int size
)
5948 l
= IO_BUF_SIZE
- f
->buf_index
;
5951 memcpy(f
->buf
+ f
->buf_index
, buf
, l
);
5955 if (f
->buf_index
>= IO_BUF_SIZE
)
5960 void qemu_put_byte(QEMUFile
*f
, int v
)
5962 f
->buf
[f
->buf_index
++] = v
;
5963 if (f
->buf_index
>= IO_BUF_SIZE
)
5967 int qemu_get_buffer(QEMUFile
*f
, uint8_t *buf
, int size1
)
5973 l
= f
->buf_size
- f
->buf_index
;
5975 qemu_fill_buffer(f
);
5976 l
= f
->buf_size
- f
->buf_index
;
5982 memcpy(buf
, f
->buf
+ f
->buf_index
, l
);
5987 return size1
- size
;
5990 int qemu_get_byte(QEMUFile
*f
)
5992 if (f
->buf_index
>= f
->buf_size
) {
5993 qemu_fill_buffer(f
);
5994 if (f
->buf_index
>= f
->buf_size
)
5997 return f
->buf
[f
->buf_index
++];
6000 int64_t qemu_ftell(QEMUFile
*f
)
6002 return f
->buf_offset
- f
->buf_size
+ f
->buf_index
;
6005 int64_t qemu_fseek(QEMUFile
*f
, int64_t pos
, int whence
)
6007 if (whence
== SEEK_SET
) {
6009 } else if (whence
== SEEK_CUR
) {
6010 pos
+= qemu_ftell(f
);
6012 /* SEEK_END not supported */
6015 if (f
->is_writable
) {
6017 f
->buf_offset
= pos
;
6019 f
->buf_offset
= pos
;
6026 void qemu_put_be16(QEMUFile
*f
, unsigned int v
)
6028 qemu_put_byte(f
, v
>> 8);
6029 qemu_put_byte(f
, v
);
6032 void qemu_put_be32(QEMUFile
*f
, unsigned int v
)
6034 qemu_put_byte(f
, v
>> 24);
6035 qemu_put_byte(f
, v
>> 16);
6036 qemu_put_byte(f
, v
>> 8);
6037 qemu_put_byte(f
, v
);
6040 void qemu_put_be64(QEMUFile
*f
, uint64_t v
)
6042 qemu_put_be32(f
, v
>> 32);
6043 qemu_put_be32(f
, v
);
6046 unsigned int qemu_get_be16(QEMUFile
*f
)
6049 v
= qemu_get_byte(f
) << 8;
6050 v
|= qemu_get_byte(f
);
6054 unsigned int qemu_get_be32(QEMUFile
*f
)
6057 v
= qemu_get_byte(f
) << 24;
6058 v
|= qemu_get_byte(f
) << 16;
6059 v
|= qemu_get_byte(f
) << 8;
6060 v
|= qemu_get_byte(f
);
6064 uint64_t qemu_get_be64(QEMUFile
*f
)
6067 v
= (uint64_t)qemu_get_be32(f
) << 32;
6068 v
|= qemu_get_be32(f
);
6072 typedef struct SaveStateEntry
{
6076 SaveStateHandler
*save_state
;
6077 LoadStateHandler
*load_state
;
6079 struct SaveStateEntry
*next
;
6082 static SaveStateEntry
*first_se
;
6084 /* TODO: Individual devices generally have very little idea about the rest
6085 of the system, so instance_id should be removed/replaced. */
6086 int register_savevm(const char *idstr
,
6089 SaveStateHandler
*save_state
,
6090 LoadStateHandler
*load_state
,
6093 SaveStateEntry
*se
, **pse
;
6095 se
= qemu_malloc(sizeof(SaveStateEntry
));
6098 pstrcpy(se
->idstr
, sizeof(se
->idstr
), idstr
);
6099 se
->instance_id
= (instance_id
== -1) ? 0 : instance_id
;
6100 se
->version_id
= version_id
;
6101 se
->save_state
= save_state
;
6102 se
->load_state
= load_state
;
6103 se
->opaque
= opaque
;
6106 /* add at the end of list */
6108 while (*pse
!= NULL
) {
6109 if (instance_id
== -1
6110 && strcmp(se
->idstr
, (*pse
)->idstr
) == 0
6111 && se
->instance_id
<= (*pse
)->instance_id
)
6112 se
->instance_id
= (*pse
)->instance_id
+ 1;
6113 pse
= &(*pse
)->next
;
6119 #define QEMU_VM_FILE_MAGIC 0x5145564d
6120 #define QEMU_VM_FILE_VERSION 0x00000002
6122 static int qemu_savevm_state(QEMUFile
*f
)
6126 int64_t cur_pos
, len_pos
, total_len_pos
;
6128 qemu_put_be32(f
, QEMU_VM_FILE_MAGIC
);
6129 qemu_put_be32(f
, QEMU_VM_FILE_VERSION
);
6130 total_len_pos
= qemu_ftell(f
);
6131 qemu_put_be64(f
, 0); /* total size */
6133 for(se
= first_se
; se
!= NULL
; se
= se
->next
) {
6134 if (se
->save_state
== NULL
)
6135 /* this one has a loader only, for backwards compatibility */
6139 len
= strlen(se
->idstr
);
6140 qemu_put_byte(f
, len
);
6141 qemu_put_buffer(f
, (uint8_t *)se
->idstr
, len
);
6143 qemu_put_be32(f
, se
->instance_id
);
6144 qemu_put_be32(f
, se
->version_id
);
6146 /* record size: filled later */
6147 len_pos
= qemu_ftell(f
);
6148 qemu_put_be32(f
, 0);
6149 se
->save_state(f
, se
->opaque
);
6151 /* fill record size */
6152 cur_pos
= qemu_ftell(f
);
6153 len
= cur_pos
- len_pos
- 4;
6154 qemu_fseek(f
, len_pos
, SEEK_SET
);
6155 qemu_put_be32(f
, len
);
6156 qemu_fseek(f
, cur_pos
, SEEK_SET
);
6158 cur_pos
= qemu_ftell(f
);
6159 qemu_fseek(f
, total_len_pos
, SEEK_SET
);
6160 qemu_put_be64(f
, cur_pos
- total_len_pos
- 8);
6161 qemu_fseek(f
, cur_pos
, SEEK_SET
);
6167 static SaveStateEntry
*find_se(const char *idstr
, int instance_id
)
6171 for(se
= first_se
; se
!= NULL
; se
= se
->next
) {
6172 if (!strcmp(se
->idstr
, idstr
) &&
6173 instance_id
== se
->instance_id
)
6179 static int qemu_loadvm_state(QEMUFile
*f
)
6182 int len
, ret
, instance_id
, record_len
, version_id
;
6183 int64_t total_len
, end_pos
, cur_pos
;
6187 v
= qemu_get_be32(f
);
6188 if (v
!= QEMU_VM_FILE_MAGIC
)
6190 v
= qemu_get_be32(f
);
6191 if (v
!= QEMU_VM_FILE_VERSION
) {
6196 total_len
= qemu_get_be64(f
);
6197 end_pos
= total_len
+ qemu_ftell(f
);
6199 if (qemu_ftell(f
) >= end_pos
)
6201 len
= qemu_get_byte(f
);
6202 qemu_get_buffer(f
, (uint8_t *)idstr
, len
);
6204 instance_id
= qemu_get_be32(f
);
6205 version_id
= qemu_get_be32(f
);
6206 record_len
= qemu_get_be32(f
);
6208 printf("idstr=%s instance=0x%x version=%d len=%d\n",
6209 idstr
, instance_id
, version_id
, record_len
);
6211 cur_pos
= qemu_ftell(f
);
6212 se
= find_se(idstr
, instance_id
);
6214 fprintf(stderr
, "qemu: warning: instance 0x%x of device '%s' not present in current VM\n",
6215 instance_id
, idstr
);
6217 ret
= se
->load_state(f
, se
->opaque
, version_id
);
6219 fprintf(stderr
, "qemu: warning: error while loading state for instance 0x%x of device '%s'\n",
6220 instance_id
, idstr
);
6223 /* always seek to exact end of record */
6224 qemu_fseek(f
, cur_pos
+ record_len
, SEEK_SET
);
6231 /* device can contain snapshots */
6232 static int bdrv_can_snapshot(BlockDriverState
*bs
)
6235 !bdrv_is_removable(bs
) &&
6236 !bdrv_is_read_only(bs
));
6239 /* device must be snapshots in order to have a reliable snapshot */
6240 static int bdrv_has_snapshot(BlockDriverState
*bs
)
6243 !bdrv_is_removable(bs
) &&
6244 !bdrv_is_read_only(bs
));
6247 static BlockDriverState
*get_bs_snapshots(void)
6249 BlockDriverState
*bs
;
6253 return bs_snapshots
;
6254 for(i
= 0; i
<= nb_drives
; i
++) {
6255 bs
= drives_table
[i
].bdrv
;
6256 if (bdrv_can_snapshot(bs
))
6265 static int bdrv_snapshot_find(BlockDriverState
*bs
, QEMUSnapshotInfo
*sn_info
,
6268 QEMUSnapshotInfo
*sn_tab
, *sn
;
6272 nb_sns
= bdrv_snapshot_list(bs
, &sn_tab
);
6275 for(i
= 0; i
< nb_sns
; i
++) {
6277 if (!strcmp(sn
->id_str
, name
) || !strcmp(sn
->name
, name
)) {
6287 void do_savevm(const char *name
)
6289 BlockDriverState
*bs
, *bs1
;
6290 QEMUSnapshotInfo sn1
, *sn
= &sn1
, old_sn1
, *old_sn
= &old_sn1
;
6291 int must_delete
, ret
, i
;
6292 BlockDriverInfo bdi1
, *bdi
= &bdi1
;
6294 int saved_vm_running
;
6301 bs
= get_bs_snapshots();
6303 term_printf("No block device can accept snapshots\n");
6307 /* ??? Should this occur after vm_stop? */
6310 saved_vm_running
= vm_running
;
6315 ret
= bdrv_snapshot_find(bs
, old_sn
, name
);
6320 memset(sn
, 0, sizeof(*sn
));
6322 pstrcpy(sn
->name
, sizeof(sn
->name
), old_sn
->name
);
6323 pstrcpy(sn
->id_str
, sizeof(sn
->id_str
), old_sn
->id_str
);
6326 pstrcpy(sn
->name
, sizeof(sn
->name
), name
);
6329 /* fill auxiliary fields */
6332 sn
->date_sec
= tb
.time
;
6333 sn
->date_nsec
= tb
.millitm
* 1000000;
6335 gettimeofday(&tv
, NULL
);
6336 sn
->date_sec
= tv
.tv_sec
;
6337 sn
->date_nsec
= tv
.tv_usec
* 1000;
6339 sn
->vm_clock_nsec
= qemu_get_clock(vm_clock
);
6341 if (bdrv_get_info(bs
, bdi
) < 0 || bdi
->vm_state_offset
<= 0) {
6342 term_printf("Device %s does not support VM state snapshots\n",
6343 bdrv_get_device_name(bs
));
6347 /* save the VM state */
6348 f
= qemu_fopen_bdrv(bs
, bdi
->vm_state_offset
, 1);
6350 term_printf("Could not open VM state file\n");
6353 ret
= qemu_savevm_state(f
);
6354 sn
->vm_state_size
= qemu_ftell(f
);
6357 term_printf("Error %d while writing VM\n", ret
);
6361 /* create the snapshots */
6363 for(i
= 0; i
< nb_drives
; i
++) {
6364 bs1
= drives_table
[i
].bdrv
;
6365 if (bdrv_has_snapshot(bs1
)) {
6367 ret
= bdrv_snapshot_delete(bs1
, old_sn
->id_str
);
6369 term_printf("Error while deleting snapshot on '%s'\n",
6370 bdrv_get_device_name(bs1
));
6373 ret
= bdrv_snapshot_create(bs1
, sn
);
6375 term_printf("Error while creating snapshot on '%s'\n",
6376 bdrv_get_device_name(bs1
));
6382 if (saved_vm_running
)
6386 void do_loadvm(const char *name
)
6388 BlockDriverState
*bs
, *bs1
;
6389 BlockDriverInfo bdi1
, *bdi
= &bdi1
;
6392 int saved_vm_running
;
6394 bs
= get_bs_snapshots();
6396 term_printf("No block device supports snapshots\n");
6400 /* Flush all IO requests so they don't interfere with the new state. */
6403 saved_vm_running
= vm_running
;
6406 for(i
= 0; i
<= nb_drives
; i
++) {
6407 bs1
= drives_table
[i
].bdrv
;
6408 if (bdrv_has_snapshot(bs1
)) {
6409 ret
= bdrv_snapshot_goto(bs1
, name
);
6412 term_printf("Warning: ");
6415 term_printf("Snapshots not supported on device '%s'\n",
6416 bdrv_get_device_name(bs1
));
6419 term_printf("Could not find snapshot '%s' on device '%s'\n",
6420 name
, bdrv_get_device_name(bs1
));
6423 term_printf("Error %d while activating snapshot on '%s'\n",
6424 ret
, bdrv_get_device_name(bs1
));
6427 /* fatal on snapshot block device */
6434 if (bdrv_get_info(bs
, bdi
) < 0 || bdi
->vm_state_offset
<= 0) {
6435 term_printf("Device %s does not support VM state snapshots\n",
6436 bdrv_get_device_name(bs
));
6440 /* restore the VM state */
6441 f
= qemu_fopen_bdrv(bs
, bdi
->vm_state_offset
, 0);
6443 term_printf("Could not open VM state file\n");
6446 ret
= qemu_loadvm_state(f
);
6449 term_printf("Error %d while loading VM state\n", ret
);
6452 if (saved_vm_running
)
6456 void do_delvm(const char *name
)
6458 BlockDriverState
*bs
, *bs1
;
6461 bs
= get_bs_snapshots();
6463 term_printf("No block device supports snapshots\n");
6467 for(i
= 0; i
<= nb_drives
; i
++) {
6468 bs1
= drives_table
[i
].bdrv
;
6469 if (bdrv_has_snapshot(bs1
)) {
6470 ret
= bdrv_snapshot_delete(bs1
, name
);
6472 if (ret
== -ENOTSUP
)
6473 term_printf("Snapshots not supported on device '%s'\n",
6474 bdrv_get_device_name(bs1
));
6476 term_printf("Error %d while deleting snapshot on '%s'\n",
6477 ret
, bdrv_get_device_name(bs1
));
6483 void do_info_snapshots(void)
6485 BlockDriverState
*bs
, *bs1
;
6486 QEMUSnapshotInfo
*sn_tab
, *sn
;
6490 bs
= get_bs_snapshots();
6492 term_printf("No available block device supports snapshots\n");
6495 term_printf("Snapshot devices:");
6496 for(i
= 0; i
<= nb_drives
; i
++) {
6497 bs1
= drives_table
[i
].bdrv
;
6498 if (bdrv_has_snapshot(bs1
)) {
6500 term_printf(" %s", bdrv_get_device_name(bs1
));
6505 nb_sns
= bdrv_snapshot_list(bs
, &sn_tab
);
6507 term_printf("bdrv_snapshot_list: error %d\n", nb_sns
);
6510 term_printf("Snapshot list (from %s):\n", bdrv_get_device_name(bs
));
6511 term_printf("%s\n", bdrv_snapshot_dump(buf
, sizeof(buf
), NULL
));
6512 for(i
= 0; i
< nb_sns
; i
++) {
6514 term_printf("%s\n", bdrv_snapshot_dump(buf
, sizeof(buf
), sn
));
6519 /***********************************************************/
6520 /* ram save/restore */
6522 static int ram_get_page(QEMUFile
*f
, uint8_t *buf
, int len
)
6526 v
= qemu_get_byte(f
);
6529 if (qemu_get_buffer(f
, buf
, len
) != len
)
6533 v
= qemu_get_byte(f
);
6534 memset(buf
, v
, len
);
6542 static int ram_load_v1(QEMUFile
*f
, void *opaque
)
6547 if (qemu_get_be32(f
) != phys_ram_size
)
6549 for(i
= 0; i
< phys_ram_size
; i
+= TARGET_PAGE_SIZE
) {
6550 ret
= ram_get_page(f
, phys_ram_base
+ i
, TARGET_PAGE_SIZE
);
6557 #define BDRV_HASH_BLOCK_SIZE 1024
6558 #define IOBUF_SIZE 4096
6559 #define RAM_CBLOCK_MAGIC 0xfabe
6561 typedef struct RamCompressState
{
6564 uint8_t buf
[IOBUF_SIZE
];
6567 static int ram_compress_open(RamCompressState
*s
, QEMUFile
*f
)
6570 memset(s
, 0, sizeof(*s
));
6572 ret
= deflateInit2(&s
->zstream
, 1,
6574 9, Z_DEFAULT_STRATEGY
);
6577 s
->zstream
.avail_out
= IOBUF_SIZE
;
6578 s
->zstream
.next_out
= s
->buf
;
6582 static void ram_put_cblock(RamCompressState
*s
, const uint8_t *buf
, int len
)
6584 qemu_put_be16(s
->f
, RAM_CBLOCK_MAGIC
);
6585 qemu_put_be16(s
->f
, len
);
6586 qemu_put_buffer(s
->f
, buf
, len
);
6589 static int ram_compress_buf(RamCompressState
*s
, const uint8_t *buf
, int len
)
6593 s
->zstream
.avail_in
= len
;
6594 s
->zstream
.next_in
= (uint8_t *)buf
;
6595 while (s
->zstream
.avail_in
> 0) {
6596 ret
= deflate(&s
->zstream
, Z_NO_FLUSH
);
6599 if (s
->zstream
.avail_out
== 0) {
6600 ram_put_cblock(s
, s
->buf
, IOBUF_SIZE
);
6601 s
->zstream
.avail_out
= IOBUF_SIZE
;
6602 s
->zstream
.next_out
= s
->buf
;
6608 static void ram_compress_close(RamCompressState
*s
)
6612 /* compress last bytes */
6614 ret
= deflate(&s
->zstream
, Z_FINISH
);
6615 if (ret
== Z_OK
|| ret
== Z_STREAM_END
) {
6616 len
= IOBUF_SIZE
- s
->zstream
.avail_out
;
6618 ram_put_cblock(s
, s
->buf
, len
);
6620 s
->zstream
.avail_out
= IOBUF_SIZE
;
6621 s
->zstream
.next_out
= s
->buf
;
6622 if (ret
== Z_STREAM_END
)
6629 deflateEnd(&s
->zstream
);
6632 typedef struct RamDecompressState
{
6635 uint8_t buf
[IOBUF_SIZE
];
6636 } RamDecompressState
;
6638 static int ram_decompress_open(RamDecompressState
*s
, QEMUFile
*f
)
6641 memset(s
, 0, sizeof(*s
));
6643 ret
= inflateInit(&s
->zstream
);
6649 static int ram_decompress_buf(RamDecompressState
*s
, uint8_t *buf
, int len
)
6653 s
->zstream
.avail_out
= len
;
6654 s
->zstream
.next_out
= buf
;
6655 while (s
->zstream
.avail_out
> 0) {
6656 if (s
->zstream
.avail_in
== 0) {
6657 if (qemu_get_be16(s
->f
) != RAM_CBLOCK_MAGIC
)
6659 clen
= qemu_get_be16(s
->f
);
6660 if (clen
> IOBUF_SIZE
)
6662 qemu_get_buffer(s
->f
, s
->buf
, clen
);
6663 s
->zstream
.avail_in
= clen
;
6664 s
->zstream
.next_in
= s
->buf
;
6666 ret
= inflate(&s
->zstream
, Z_PARTIAL_FLUSH
);
6667 if (ret
!= Z_OK
&& ret
!= Z_STREAM_END
) {
6674 static void ram_decompress_close(RamDecompressState
*s
)
6676 inflateEnd(&s
->zstream
);
6679 static void ram_save(QEMUFile
*f
, void *opaque
)
6682 RamCompressState s1
, *s
= &s1
;
6685 qemu_put_be32(f
, phys_ram_size
);
6686 if (ram_compress_open(s
, f
) < 0)
6688 for(i
= 0; i
< phys_ram_size
; i
+= BDRV_HASH_BLOCK_SIZE
) {
6690 if (tight_savevm_enabled
) {
6694 /* find if the memory block is available on a virtual
6697 for(j
= 0; j
< nb_drives
; j
++) {
6698 sector_num
= bdrv_hash_find(drives_table
[j
].bdrv
,
6700 BDRV_HASH_BLOCK_SIZE
);
6701 if (sector_num
>= 0)
6705 goto normal_compress
;
6708 cpu_to_be64wu((uint64_t *)(buf
+ 2), sector_num
);
6709 ram_compress_buf(s
, buf
, 10);
6715 ram_compress_buf(s
, buf
, 1);
6716 ram_compress_buf(s
, phys_ram_base
+ i
, BDRV_HASH_BLOCK_SIZE
);
6719 ram_compress_close(s
);
6722 static int ram_load(QEMUFile
*f
, void *opaque
, int version_id
)
6724 RamDecompressState s1
, *s
= &s1
;
6728 if (version_id
== 1)
6729 return ram_load_v1(f
, opaque
);
6730 if (version_id
!= 2)
6732 if (qemu_get_be32(f
) != phys_ram_size
)
6734 if (ram_decompress_open(s
, f
) < 0)
6736 for(i
= 0; i
< phys_ram_size
; i
+= BDRV_HASH_BLOCK_SIZE
) {
6737 if (ram_decompress_buf(s
, buf
, 1) < 0) {
6738 fprintf(stderr
, "Error while reading ram block header\n");
6742 if (ram_decompress_buf(s
, phys_ram_base
+ i
, BDRV_HASH_BLOCK_SIZE
) < 0) {
6743 fprintf(stderr
, "Error while reading ram block address=0x%08" PRIx64
, (uint64_t)i
);
6752 ram_decompress_buf(s
, buf
+ 1, 9);
6754 sector_num
= be64_to_cpupu((const uint64_t *)(buf
+ 2));
6755 if (bs_index
>= nb_drives
) {
6756 fprintf(stderr
, "Invalid block device index %d\n", bs_index
);
6759 if (bdrv_read(drives_table
[bs_index
].bdrv
, sector_num
,
6761 BDRV_HASH_BLOCK_SIZE
/ 512) < 0) {
6762 fprintf(stderr
, "Error while reading sector %d:%" PRId64
"\n",
6763 bs_index
, sector_num
);
6770 printf("Error block header\n");
6774 ram_decompress_close(s
);
6778 /***********************************************************/
6779 /* bottom halves (can be seen as timers which expire ASAP) */
6788 static QEMUBH
*first_bh
= NULL
;
6790 QEMUBH
*qemu_bh_new(QEMUBHFunc
*cb
, void *opaque
)
6793 bh
= qemu_mallocz(sizeof(QEMUBH
));
6797 bh
->opaque
= opaque
;
6801 int qemu_bh_poll(void)
6820 void qemu_bh_schedule(QEMUBH
*bh
)
6822 CPUState
*env
= cpu_single_env
;
6826 bh
->next
= first_bh
;
6829 /* stop the currently executing CPU to execute the BH ASAP */
6831 cpu_interrupt(env
, CPU_INTERRUPT_EXIT
);
6835 void qemu_bh_cancel(QEMUBH
*bh
)
6838 if (bh
->scheduled
) {
6841 pbh
= &(*pbh
)->next
;
6847 void qemu_bh_delete(QEMUBH
*bh
)
6853 /***********************************************************/
6854 /* machine registration */
6856 QEMUMachine
*first_machine
= NULL
;
6858 int qemu_register_machine(QEMUMachine
*m
)
6861 pm
= &first_machine
;
6869 static QEMUMachine
*find_machine(const char *name
)
6873 for(m
= first_machine
; m
!= NULL
; m
= m
->next
) {
6874 if (!strcmp(m
->name
, name
))
6880 /***********************************************************/
6881 /* main execution loop */
6883 static void gui_update(void *opaque
)
6885 DisplayState
*ds
= opaque
;
6886 ds
->dpy_refresh(ds
);
6887 qemu_mod_timer(ds
->gui_timer
,
6888 (ds
->gui_timer_interval
?
6889 ds
->gui_timer_interval
:
6890 GUI_REFRESH_INTERVAL
)
6891 + qemu_get_clock(rt_clock
));
6894 struct vm_change_state_entry
{
6895 VMChangeStateHandler
*cb
;
6897 LIST_ENTRY (vm_change_state_entry
) entries
;
6900 static LIST_HEAD(vm_change_state_head
, vm_change_state_entry
) vm_change_state_head
;
6902 VMChangeStateEntry
*qemu_add_vm_change_state_handler(VMChangeStateHandler
*cb
,
6905 VMChangeStateEntry
*e
;
6907 e
= qemu_mallocz(sizeof (*e
));
6913 LIST_INSERT_HEAD(&vm_change_state_head
, e
, entries
);
6917 void qemu_del_vm_change_state_handler(VMChangeStateEntry
*e
)
6919 LIST_REMOVE (e
, entries
);
6923 static void vm_state_notify(int running
)
6925 VMChangeStateEntry
*e
;
6927 for (e
= vm_change_state_head
.lh_first
; e
; e
= e
->entries
.le_next
) {
6928 e
->cb(e
->opaque
, running
);
6932 /* XXX: support several handlers */
6933 static VMStopHandler
*vm_stop_cb
;
6934 static void *vm_stop_opaque
;
6936 int qemu_add_vm_stop_handler(VMStopHandler
*cb
, void *opaque
)
6939 vm_stop_opaque
= opaque
;
6943 void qemu_del_vm_stop_handler(VMStopHandler
*cb
, void *opaque
)
6954 qemu_rearm_alarm_timer(alarm_timer
);
6958 void vm_stop(int reason
)
6961 cpu_disable_ticks();
6965 vm_stop_cb(vm_stop_opaque
, reason
);
6972 /* reset/shutdown handler */
6974 typedef struct QEMUResetEntry
{
6975 QEMUResetHandler
*func
;
6977 struct QEMUResetEntry
*next
;
6980 static QEMUResetEntry
*first_reset_entry
;
6981 static int reset_requested
;
6982 static int shutdown_requested
;
6983 static int powerdown_requested
;
6985 int qemu_shutdown_requested(void)
6987 int r
= shutdown_requested
;
6988 shutdown_requested
= 0;
6992 int qemu_reset_requested(void)
6994 int r
= reset_requested
;
6995 reset_requested
= 0;
6999 int qemu_powerdown_requested(void)
7001 int r
= powerdown_requested
;
7002 powerdown_requested
= 0;
7006 void qemu_register_reset(QEMUResetHandler
*func
, void *opaque
)
7008 QEMUResetEntry
**pre
, *re
;
7010 pre
= &first_reset_entry
;
7011 while (*pre
!= NULL
)
7012 pre
= &(*pre
)->next
;
7013 re
= qemu_mallocz(sizeof(QEMUResetEntry
));
7015 re
->opaque
= opaque
;
7020 void qemu_system_reset(void)
7024 /* reset all devices */
7025 for(re
= first_reset_entry
; re
!= NULL
; re
= re
->next
) {
7026 re
->func(re
->opaque
);
7030 void qemu_system_reset_request(void)
7033 shutdown_requested
= 1;
7035 reset_requested
= 1;
7038 cpu_interrupt(cpu_single_env
, CPU_INTERRUPT_EXIT
);
7041 void qemu_system_shutdown_request(void)
7043 shutdown_requested
= 1;
7045 cpu_interrupt(cpu_single_env
, CPU_INTERRUPT_EXIT
);
7048 void qemu_system_powerdown_request(void)
7050 powerdown_requested
= 1;
7052 cpu_interrupt(cpu_single_env
, CPU_INTERRUPT_EXIT
);
7055 void main_loop_wait(int timeout
)
7057 IOHandlerRecord
*ioh
;
7058 fd_set rfds
, wfds
, xfds
;
7067 /* XXX: need to suppress polling by better using win32 events */
7069 for(pe
= first_polling_entry
; pe
!= NULL
; pe
= pe
->next
) {
7070 ret
|= pe
->func(pe
->opaque
);
7075 WaitObjects
*w
= &wait_objects
;
7077 ret
= WaitForMultipleObjects(w
->num
, w
->events
, FALSE
, timeout
);
7078 if (WAIT_OBJECT_0
+ 0 <= ret
&& ret
<= WAIT_OBJECT_0
+ w
->num
- 1) {
7079 if (w
->func
[ret
- WAIT_OBJECT_0
])
7080 w
->func
[ret
- WAIT_OBJECT_0
](w
->opaque
[ret
- WAIT_OBJECT_0
]);
7082 /* Check for additional signaled events */
7083 for(i
= (ret
- WAIT_OBJECT_0
+ 1); i
< w
->num
; i
++) {
7085 /* Check if event is signaled */
7086 ret2
= WaitForSingleObject(w
->events
[i
], 0);
7087 if(ret2
== WAIT_OBJECT_0
) {
7089 w
->func
[i
](w
->opaque
[i
]);
7090 } else if (ret2
== WAIT_TIMEOUT
) {
7092 err
= GetLastError();
7093 fprintf(stderr
, "WaitForSingleObject error %d %d\n", i
, err
);
7096 } else if (ret
== WAIT_TIMEOUT
) {
7098 err
= GetLastError();
7099 fprintf(stderr
, "WaitForMultipleObjects error %d %d\n", ret
, err
);
7103 /* poll any events */
7104 /* XXX: separate device handlers from system ones */
7109 for(ioh
= first_io_handler
; ioh
!= NULL
; ioh
= ioh
->next
) {
7113 (!ioh
->fd_read_poll
||
7114 ioh
->fd_read_poll(ioh
->opaque
) != 0)) {
7115 FD_SET(ioh
->fd
, &rfds
);
7119 if (ioh
->fd_write
) {
7120 FD_SET(ioh
->fd
, &wfds
);
7130 tv
.tv_usec
= timeout
* 1000;
7132 #if defined(CONFIG_SLIRP)
7134 slirp_select_fill(&nfds
, &rfds
, &wfds
, &xfds
);
7137 ret
= select(nfds
+ 1, &rfds
, &wfds
, &xfds
, &tv
);
7139 IOHandlerRecord
**pioh
;
7141 for(ioh
= first_io_handler
; ioh
!= NULL
; ioh
= ioh
->next
) {
7142 if (!ioh
->deleted
&& ioh
->fd_read
&& FD_ISSET(ioh
->fd
, &rfds
)) {
7143 ioh
->fd_read(ioh
->opaque
);
7145 if (!ioh
->deleted
&& ioh
->fd_write
&& FD_ISSET(ioh
->fd
, &wfds
)) {
7146 ioh
->fd_write(ioh
->opaque
);
7150 /* remove deleted IO handlers */
7151 pioh
= &first_io_handler
;
7161 #if defined(CONFIG_SLIRP)
7168 slirp_select_poll(&rfds
, &wfds
, &xfds
);
7174 if (likely(!(cur_cpu
->singlestep_enabled
& SSTEP_NOTIMER
)))
7175 qemu_run_timers(&active_timers
[QEMU_TIMER_VIRTUAL
],
7176 qemu_get_clock(vm_clock
));
7177 /* run dma transfers, if any */
7181 /* real time timers */
7182 qemu_run_timers(&active_timers
[QEMU_TIMER_REALTIME
],
7183 qemu_get_clock(rt_clock
));
7185 if (alarm_timer
->flags
& ALARM_FLAG_EXPIRED
) {
7186 alarm_timer
->flags
&= ~(ALARM_FLAG_EXPIRED
);
7187 qemu_rearm_alarm_timer(alarm_timer
);
7190 /* Check bottom-halves last in case any of the earlier events triggered
7196 static int main_loop(void)
7199 #ifdef CONFIG_PROFILER
7204 cur_cpu
= first_cpu
;
7205 next_cpu
= cur_cpu
->next_cpu
?: first_cpu
;
7212 #ifdef CONFIG_PROFILER
7213 ti
= profile_getclock();
7218 qemu_icount
-= (env
->icount_decr
.u16
.low
+ env
->icount_extra
);
7219 env
->icount_decr
.u16
.low
= 0;
7220 env
->icount_extra
= 0;
7221 count
= qemu_next_deadline();
7222 count
= (count
+ (1 << icount_time_shift
) - 1)
7223 >> icount_time_shift
;
7224 qemu_icount
+= count
;
7225 decr
= (count
> 0xffff) ? 0xffff : count
;
7227 env
->icount_decr
.u16
.low
= decr
;
7228 env
->icount_extra
= count
;
7230 ret
= cpu_exec(env
);
7231 #ifdef CONFIG_PROFILER
7232 qemu_time
+= profile_getclock() - ti
;
7235 /* Fold pending instructions back into the
7236 instruction counter, and clear the interrupt flag. */
7237 qemu_icount
-= (env
->icount_decr
.u16
.low
7238 + env
->icount_extra
);
7239 env
->icount_decr
.u32
= 0;
7240 env
->icount_extra
= 0;
7242 next_cpu
= env
->next_cpu
?: first_cpu
;
7243 if (event_pending
&& likely(ret
!= EXCP_DEBUG
)) {
7244 ret
= EXCP_INTERRUPT
;
7248 if (ret
== EXCP_HLT
) {
7249 /* Give the next CPU a chance to run. */
7253 if (ret
!= EXCP_HALTED
)
7255 /* all CPUs are halted ? */
7261 if (shutdown_requested
) {
7262 ret
= EXCP_INTERRUPT
;
7270 if (reset_requested
) {
7271 reset_requested
= 0;
7272 qemu_system_reset();
7273 ret
= EXCP_INTERRUPT
;
7275 if (powerdown_requested
) {
7276 powerdown_requested
= 0;
7277 qemu_system_powerdown();
7278 ret
= EXCP_INTERRUPT
;
7280 if (unlikely(ret
== EXCP_DEBUG
)) {
7281 vm_stop(EXCP_DEBUG
);
7283 /* If all cpus are halted then wait until the next IRQ */
7284 /* XXX: use timeout computed from timers */
7285 if (ret
== EXCP_HALTED
) {
7289 /* Advance virtual time to the next event. */
7290 if (use_icount
== 1) {
7291 /* When not using an adaptive execution frequency
7292 we tend to get badly out of sync with real time,
7293 so just delay for a reasonable amount of time. */
7296 delta
= cpu_get_icount() - cpu_get_clock();
7299 /* If virtual time is ahead of real time then just
7301 timeout
= (delta
/ 1000000) + 1;
7303 /* Wait for either IO to occur or the next
7305 add
= qemu_next_deadline();
7306 /* We advance the timer before checking for IO.
7307 Limit the amount we advance so that early IO
7308 activity won't get the guest too far ahead. */
7312 add
= (add
+ (1 << icount_time_shift
) - 1)
7313 >> icount_time_shift
;
7315 timeout
= delta
/ 1000000;
7328 #ifdef CONFIG_PROFILER
7329 ti
= profile_getclock();
7331 main_loop_wait(timeout
);
7332 #ifdef CONFIG_PROFILER
7333 dev_time
+= profile_getclock() - ti
;
7336 cpu_disable_ticks();
7340 static void help(int exitcode
)
7342 printf("QEMU PC emulator version " QEMU_VERSION
", Copyright (c) 2003-2008 Fabrice Bellard\n"
7343 "usage: %s [options] [disk_image]\n"
7345 "'disk_image' is a raw hard image image for IDE hard disk 0\n"
7347 "Standard options:\n"
7348 "-M machine select emulated machine (-M ? for list)\n"
7349 "-cpu cpu select CPU (-cpu ? for list)\n"
7350 "-fda/-fdb file use 'file' as floppy disk 0/1 image\n"
7351 "-hda/-hdb file use 'file' as IDE hard disk 0/1 image\n"
7352 "-hdc/-hdd file use 'file' as IDE hard disk 2/3 image\n"
7353 "-cdrom file use 'file' as IDE cdrom image (cdrom is ide1 master)\n"
7354 "-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]\n"
7355 " [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off]\n"
7356 " [,cache=on|off][,format=f]\n"
7357 " use 'file' as a drive image\n"
7358 "-mtdblock file use 'file' as on-board Flash memory image\n"
7359 "-sd file use 'file' as SecureDigital card image\n"
7360 "-pflash file use 'file' as a parallel flash image\n"
7361 "-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n)\n"
7362 "-snapshot write to temporary files instead of disk image files\n"
7364 "-no-frame open SDL window without a frame and window decorations\n"
7365 "-alt-grab use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt)\n"
7366 "-no-quit disable SDL window close capability\n"
7369 "-no-fd-bootchk disable boot signature checking for floppy disks\n"
7371 "-m megs set virtual RAM size to megs MB [default=%d]\n"
7372 "-smp n set the number of CPUs to 'n' [default=1]\n"
7373 "-nographic disable graphical output and redirect serial I/Os to console\n"
7374 "-portrait rotate graphical output 90 deg left (only PXA LCD)\n"
7376 "-k language use keyboard layout (for example \"fr\" for French)\n"
7379 "-audio-help print list of audio drivers and their options\n"
7380 "-soundhw c1,... enable audio support\n"
7381 " and only specified sound cards (comma separated list)\n"
7382 " use -soundhw ? to get the list of supported cards\n"
7383 " use -soundhw all to enable all of them\n"
7385 "-localtime set the real time clock to local time [default=utc]\n"
7386 "-full-screen start in full screen\n"
7388 "-win2k-hack use it when installing Windows 2000 to avoid a disk full bug\n"
7390 "-usb enable the USB driver (will be the default soon)\n"
7391 "-usbdevice name add the host or guest USB device 'name'\n"
7392 #if defined(TARGET_PPC) || defined(TARGET_SPARC)
7393 "-g WxH[xDEPTH] Set the initial graphical resolution and depth\n"
7395 "-name string set the name of the guest\n"
7397 "Network options:\n"
7398 "-net nic[,vlan=n][,macaddr=addr][,model=type]\n"
7399 " create a new Network Interface Card and connect it to VLAN 'n'\n"
7401 "-net user[,vlan=n][,hostname=host]\n"
7402 " connect the user mode network stack to VLAN 'n' and send\n"
7403 " hostname 'host' to DHCP clients\n"
7406 "-net tap[,vlan=n],ifname=name\n"
7407 " connect the host TAP network interface to VLAN 'n'\n"
7409 "-net tap[,vlan=n][,fd=h][,ifname=name][,script=file][,downscript=dfile]\n"
7410 " connect the host TAP network interface to VLAN 'n' and use the\n"
7411 " network scripts 'file' (default=%s)\n"
7412 " and 'dfile' (default=%s);\n"
7413 " use '[down]script=no' to disable script execution;\n"
7414 " use 'fd=h' to connect to an already opened TAP interface\n"
7416 "-net socket[,vlan=n][,fd=h][,listen=[host]:port][,connect=host:port]\n"
7417 " connect the vlan 'n' to another VLAN using a socket connection\n"
7418 "-net socket[,vlan=n][,fd=h][,mcast=maddr:port]\n"
7419 " connect the vlan 'n' to multicast maddr and port\n"
7420 "-net none use it alone to have zero network devices; if no -net option\n"
7421 " is provided, the default is '-net nic -net user'\n"
7424 "-tftp dir allow tftp access to files in dir [-net user]\n"
7425 "-bootp file advertise file in BOOTP replies\n"
7427 "-smb dir allow SMB access to files in 'dir' [-net user]\n"
7429 "-redir [tcp|udp]:host-port:[guest-host]:guest-port\n"
7430 " redirect TCP or UDP connections from host to guest [-net user]\n"
7433 "Linux boot specific:\n"
7434 "-kernel bzImage use 'bzImage' as kernel image\n"
7435 "-append cmdline use 'cmdline' as kernel command line\n"
7436 "-initrd file use 'file' as initial ram disk\n"
7438 "Debug/Expert options:\n"
7439 "-monitor dev redirect the monitor to char device 'dev'\n"
7440 "-serial dev redirect the serial port to char device 'dev'\n"
7441 "-parallel dev redirect the parallel port to char device 'dev'\n"
7442 "-pidfile file Write PID to 'file'\n"
7443 "-S freeze CPU at startup (use 'c' to start execution)\n"
7444 "-s wait gdb connection to port\n"
7445 "-p port set gdb connection port [default=%s]\n"
7446 "-d item1,... output log to %s (use -d ? for a list of log items)\n"
7447 "-hdachs c,h,s[,t] force hard disk 0 physical geometry and the optional BIOS\n"
7448 " translation (t=none or lba) (usually qemu can guess them)\n"
7449 "-L path set the directory for the BIOS, VGA BIOS and keymaps\n"
7451 "-kernel-kqemu enable KQEMU full virtualization (default is user mode only)\n"
7452 "-no-kqemu disable KQEMU kernel module usage\n"
7455 "-std-vga simulate a standard VGA card with VESA Bochs Extensions\n"
7456 " (default is CL-GD5446 PCI VGA)\n"
7457 "-no-acpi disable ACPI\n"
7459 #ifdef CONFIG_CURSES
7460 "-curses use a curses/ncurses interface instead of SDL\n"
7462 "-no-reboot exit instead of rebooting\n"
7463 "-no-shutdown stop before shutdown\n"
7464 "-loadvm [tag|id] start right away with a saved state (loadvm in monitor)\n"
7465 "-vnc display start a VNC server on display\n"
7467 "-daemonize daemonize QEMU after initializing\n"
7469 "-option-rom rom load a file, rom, into the option ROM space\n"
7471 "-prom-env variable=value set OpenBIOS nvram variables\n"
7473 "-clock force the use of the given methods for timer alarm.\n"
7474 " To see what timers are available use -clock ?\n"
7475 "-startdate select initial date of the clock\n"
7476 "-icount [N|auto]\n"
7477 " Enable virtual instruction counter with 2^N clock ticks per instruction\n"
7479 "During emulation, the following keys are useful:\n"
7480 "ctrl-alt-f toggle full screen\n"
7481 "ctrl-alt-n switch to virtual console 'n'\n"
7482 "ctrl-alt toggle mouse and keyboard grab\n"
7484 "When using -nographic, press 'ctrl-a h' to get some help.\n"
7489 DEFAULT_NETWORK_SCRIPT
,
7490 DEFAULT_NETWORK_DOWN_SCRIPT
,
7492 DEFAULT_GDBSTUB_PORT
,
7497 #define HAS_ARG 0x0001
7512 QEMU_OPTION_mtdblock
,
7516 QEMU_OPTION_snapshot
,
7518 QEMU_OPTION_no_fd_bootchk
,
7521 QEMU_OPTION_nographic
,
7522 QEMU_OPTION_portrait
,
7524 QEMU_OPTION_audio_help
,
7525 QEMU_OPTION_soundhw
,
7546 QEMU_OPTION_localtime
,
7547 QEMU_OPTION_cirrusvga
,
7550 QEMU_OPTION_std_vga
,
7552 QEMU_OPTION_monitor
,
7554 QEMU_OPTION_parallel
,
7556 QEMU_OPTION_full_screen
,
7557 QEMU_OPTION_no_frame
,
7558 QEMU_OPTION_alt_grab
,
7559 QEMU_OPTION_no_quit
,
7560 QEMU_OPTION_pidfile
,
7561 QEMU_OPTION_no_kqemu
,
7562 QEMU_OPTION_kernel_kqemu
,
7563 QEMU_OPTION_win2k_hack
,
7565 QEMU_OPTION_usbdevice
,
7568 QEMU_OPTION_no_acpi
,
7570 QEMU_OPTION_no_reboot
,
7571 QEMU_OPTION_no_shutdown
,
7572 QEMU_OPTION_show_cursor
,
7573 QEMU_OPTION_daemonize
,
7574 QEMU_OPTION_option_rom
,
7575 QEMU_OPTION_semihosting
,
7577 QEMU_OPTION_prom_env
,
7578 QEMU_OPTION_old_param
,
7580 QEMU_OPTION_startdate
,
7581 QEMU_OPTION_tb_size
,
7585 typedef struct QEMUOption
{
7591 const QEMUOption qemu_options
[] = {
7592 { "h", 0, QEMU_OPTION_h
},
7593 { "help", 0, QEMU_OPTION_h
},
7595 { "M", HAS_ARG
, QEMU_OPTION_M
},
7596 { "cpu", HAS_ARG
, QEMU_OPTION_cpu
},
7597 { "fda", HAS_ARG
, QEMU_OPTION_fda
},
7598 { "fdb", HAS_ARG
, QEMU_OPTION_fdb
},
7599 { "hda", HAS_ARG
, QEMU_OPTION_hda
},
7600 { "hdb", HAS_ARG
, QEMU_OPTION_hdb
},
7601 { "hdc", HAS_ARG
, QEMU_OPTION_hdc
},
7602 { "hdd", HAS_ARG
, QEMU_OPTION_hdd
},
7603 { "drive", HAS_ARG
, QEMU_OPTION_drive
},
7604 { "cdrom", HAS_ARG
, QEMU_OPTION_cdrom
},
7605 { "mtdblock", HAS_ARG
, QEMU_OPTION_mtdblock
},
7606 { "sd", HAS_ARG
, QEMU_OPTION_sd
},
7607 { "pflash", HAS_ARG
, QEMU_OPTION_pflash
},
7608 { "boot", HAS_ARG
, QEMU_OPTION_boot
},
7609 { "snapshot", 0, QEMU_OPTION_snapshot
},
7611 { "no-fd-bootchk", 0, QEMU_OPTION_no_fd_bootchk
},
7613 { "m", HAS_ARG
, QEMU_OPTION_m
},
7614 { "nographic", 0, QEMU_OPTION_nographic
},
7615 { "portrait", 0, QEMU_OPTION_portrait
},
7616 { "k", HAS_ARG
, QEMU_OPTION_k
},
7618 { "audio-help", 0, QEMU_OPTION_audio_help
},
7619 { "soundhw", HAS_ARG
, QEMU_OPTION_soundhw
},
7622 { "net", HAS_ARG
, QEMU_OPTION_net
},
7624 { "tftp", HAS_ARG
, QEMU_OPTION_tftp
},
7625 { "bootp", HAS_ARG
, QEMU_OPTION_bootp
},
7627 { "smb", HAS_ARG
, QEMU_OPTION_smb
},
7629 { "redir", HAS_ARG
, QEMU_OPTION_redir
},
7632 { "kernel", HAS_ARG
, QEMU_OPTION_kernel
},
7633 { "append", HAS_ARG
, QEMU_OPTION_append
},
7634 { "initrd", HAS_ARG
, QEMU_OPTION_initrd
},
7636 { "S", 0, QEMU_OPTION_S
},
7637 { "s", 0, QEMU_OPTION_s
},
7638 { "p", HAS_ARG
, QEMU_OPTION_p
},
7639 { "d", HAS_ARG
, QEMU_OPTION_d
},
7640 { "hdachs", HAS_ARG
, QEMU_OPTION_hdachs
},
7641 { "L", HAS_ARG
, QEMU_OPTION_L
},
7642 { "bios", HAS_ARG
, QEMU_OPTION_bios
},
7644 { "no-kqemu", 0, QEMU_OPTION_no_kqemu
},
7645 { "kernel-kqemu", 0, QEMU_OPTION_kernel_kqemu
},
7647 #if defined(TARGET_PPC) || defined(TARGET_SPARC)
7648 { "g", 1, QEMU_OPTION_g
},
7650 { "localtime", 0, QEMU_OPTION_localtime
},
7651 { "std-vga", 0, QEMU_OPTION_std_vga
},
7652 { "echr", HAS_ARG
, QEMU_OPTION_echr
},
7653 { "monitor", HAS_ARG
, QEMU_OPTION_monitor
},
7654 { "serial", HAS_ARG
, QEMU_OPTION_serial
},
7655 { "parallel", HAS_ARG
, QEMU_OPTION_parallel
},
7656 { "loadvm", HAS_ARG
, QEMU_OPTION_loadvm
},
7657 { "full-screen", 0, QEMU_OPTION_full_screen
},
7659 { "no-frame", 0, QEMU_OPTION_no_frame
},
7660 { "alt-grab", 0, QEMU_OPTION_alt_grab
},
7661 { "no-quit", 0, QEMU_OPTION_no_quit
},
7663 { "pidfile", HAS_ARG
, QEMU_OPTION_pidfile
},
7664 { "win2k-hack", 0, QEMU_OPTION_win2k_hack
},
7665 { "usbdevice", HAS_ARG
, QEMU_OPTION_usbdevice
},
7666 { "smp", HAS_ARG
, QEMU_OPTION_smp
},
7667 { "vnc", HAS_ARG
, QEMU_OPTION_vnc
},
7668 #ifdef CONFIG_CURSES
7669 { "curses", 0, QEMU_OPTION_curses
},
7672 /* temporary options */
7673 { "usb", 0, QEMU_OPTION_usb
},
7674 { "cirrusvga", 0, QEMU_OPTION_cirrusvga
},
7675 { "vmwarevga", 0, QEMU_OPTION_vmsvga
},
7676 { "no-acpi", 0, QEMU_OPTION_no_acpi
},
7677 { "no-reboot", 0, QEMU_OPTION_no_reboot
},
7678 { "no-shutdown", 0, QEMU_OPTION_no_shutdown
},
7679 { "show-cursor", 0, QEMU_OPTION_show_cursor
},
7680 { "daemonize", 0, QEMU_OPTION_daemonize
},
7681 { "option-rom", HAS_ARG
, QEMU_OPTION_option_rom
},
7682 #if defined(TARGET_ARM) || defined(TARGET_M68K)
7683 { "semihosting", 0, QEMU_OPTION_semihosting
},
7685 { "name", HAS_ARG
, QEMU_OPTION_name
},
7686 #if defined(TARGET_SPARC)
7687 { "prom-env", HAS_ARG
, QEMU_OPTION_prom_env
},
7689 #if defined(TARGET_ARM)
7690 { "old-param", 0, QEMU_OPTION_old_param
},
7692 { "clock", HAS_ARG
, QEMU_OPTION_clock
},
7693 { "startdate", HAS_ARG
, QEMU_OPTION_startdate
},
7694 { "tb-size", HAS_ARG
, QEMU_OPTION_tb_size
},
7695 { "icount", HAS_ARG
, QEMU_OPTION_icount
},
7699 /* password input */
7701 int qemu_key_check(BlockDriverState
*bs
, const char *name
)
7706 if (!bdrv_is_encrypted(bs
))
7709 term_printf("%s is encrypted.\n", name
);
7710 for(i
= 0; i
< 3; i
++) {
7711 monitor_readline("Password: ", 1, password
, sizeof(password
));
7712 if (bdrv_set_key(bs
, password
) == 0)
7714 term_printf("invalid password\n");
7719 static BlockDriverState
*get_bdrv(int index
)
7721 if (index
> nb_drives
)
7723 return drives_table
[index
].bdrv
;
7726 static void read_passwords(void)
7728 BlockDriverState
*bs
;
7731 for(i
= 0; i
< 6; i
++) {
7734 qemu_key_check(bs
, bdrv_get_device_name(bs
));
7739 struct soundhw soundhw
[] = {
7740 #ifdef HAS_AUDIO_CHOICE
7741 #if defined(TARGET_I386) || defined(TARGET_MIPS)
7747 { .init_isa
= pcspk_audio_init
}
7752 "Creative Sound Blaster 16",
7755 { .init_isa
= SB16_init
}
7758 #ifdef CONFIG_CS4231A
7764 { .init_isa
= cs4231a_init
}
7772 "Yamaha YMF262 (OPL3)",
7774 "Yamaha YM3812 (OPL2)",
7778 { .init_isa
= Adlib_init
}
7785 "Gravis Ultrasound GF1",
7788 { .init_isa
= GUS_init
}
7795 "Intel 82801AA AC97 Audio",
7798 { .init_pci
= ac97_init
}
7804 "ENSONIQ AudioPCI ES1370",
7807 { .init_pci
= es1370_init
}
7811 { NULL
, NULL
, 0, 0, { NULL
} }
7814 static void select_soundhw (const char *optarg
)
7818 if (*optarg
== '?') {
7821 printf ("Valid sound card names (comma separated):\n");
7822 for (c
= soundhw
; c
->name
; ++c
) {
7823 printf ("%-11s %s\n", c
->name
, c
->descr
);
7825 printf ("\n-soundhw all will enable all of the above\n");
7826 exit (*optarg
!= '?');
7834 if (!strcmp (optarg
, "all")) {
7835 for (c
= soundhw
; c
->name
; ++c
) {
7843 e
= strchr (p
, ',');
7844 l
= !e
? strlen (p
) : (size_t) (e
- p
);
7846 for (c
= soundhw
; c
->name
; ++c
) {
7847 if (!strncmp (c
->name
, p
, l
)) {
7856 "Unknown sound card name (too big to show)\n");
7859 fprintf (stderr
, "Unknown sound card name `%.*s'\n",
7864 p
+= l
+ (e
!= NULL
);
7868 goto show_valid_cards
;
7874 static BOOL WINAPI
qemu_ctrl_handler(DWORD type
)
7876 exit(STATUS_CONTROL_C_EXIT
);
7881 #define MAX_NET_CLIENTS 32
7883 int main(int argc
, char **argv
)
7885 #ifdef CONFIG_GDBSTUB
7887 const char *gdbstub_port
;
7889 uint32_t boot_devices_bitmap
= 0;
7891 int snapshot
, linux_boot
, net_boot
;
7892 const char *initrd_filename
;
7893 const char *kernel_filename
, *kernel_cmdline
;
7894 const char *boot_devices
= "";
7895 DisplayState
*ds
= &display_state
;
7896 int cyls
, heads
, secs
, translation
;
7897 const char *net_clients
[MAX_NET_CLIENTS
];
7901 const char *r
, *optarg
;
7902 CharDriverState
*monitor_hd
;
7903 const char *monitor_device
;
7904 const char *serial_devices
[MAX_SERIAL_PORTS
];
7905 int serial_device_index
;
7906 const char *parallel_devices
[MAX_PARALLEL_PORTS
];
7907 int parallel_device_index
;
7908 const char *loadvm
= NULL
;
7909 QEMUMachine
*machine
;
7910 const char *cpu_model
;
7911 const char *usb_devices
[MAX_USB_CMDLINE
];
7912 int usb_devices_index
;
7915 const char *pid_file
= NULL
;
7918 LIST_INIT (&vm_change_state_head
);
7921 struct sigaction act
;
7922 sigfillset(&act
.sa_mask
);
7924 act
.sa_handler
= SIG_IGN
;
7925 sigaction(SIGPIPE
, &act
, NULL
);
7928 SetConsoleCtrlHandler(qemu_ctrl_handler
, TRUE
);
7929 /* Note: cpu_interrupt() is currently not SMP safe, so we force
7930 QEMU to run on a single CPU */
7935 h
= GetCurrentProcess();
7936 if (GetProcessAffinityMask(h
, &mask
, &smask
)) {
7937 for(i
= 0; i
< 32; i
++) {
7938 if (mask
& (1 << i
))
7943 SetProcessAffinityMask(h
, mask
);
7949 register_machines();
7950 machine
= first_machine
;
7952 initrd_filename
= NULL
;
7954 vga_ram_size
= VGA_RAM_SIZE
;
7955 #ifdef CONFIG_GDBSTUB
7957 gdbstub_port
= DEFAULT_GDBSTUB_PORT
;
7962 kernel_filename
= NULL
;
7963 kernel_cmdline
= "";
7964 cyls
= heads
= secs
= 0;
7965 translation
= BIOS_ATA_TRANSLATION_AUTO
;
7966 monitor_device
= "vc";
7968 serial_devices
[0] = "vc:80Cx24C";
7969 for(i
= 1; i
< MAX_SERIAL_PORTS
; i
++)
7970 serial_devices
[i
] = NULL
;
7971 serial_device_index
= 0;
7973 parallel_devices
[0] = "vc:640x480";
7974 for(i
= 1; i
< MAX_PARALLEL_PORTS
; i
++)
7975 parallel_devices
[i
] = NULL
;
7976 parallel_device_index
= 0;
7978 usb_devices_index
= 0;
7995 hda_index
= drive_add(argv
[optind
++], HD_ALIAS
, 0);
7997 const QEMUOption
*popt
;
8000 /* Treat --foo the same as -foo. */
8003 popt
= qemu_options
;
8006 fprintf(stderr
, "%s: invalid option -- '%s'\n",
8010 if (!strcmp(popt
->name
, r
+ 1))
8014 if (popt
->flags
& HAS_ARG
) {
8015 if (optind
>= argc
) {
8016 fprintf(stderr
, "%s: option '%s' requires an argument\n",
8020 optarg
= argv
[optind
++];
8025 switch(popt
->index
) {
8027 machine
= find_machine(optarg
);
8030 printf("Supported machines are:\n");
8031 for(m
= first_machine
; m
!= NULL
; m
= m
->next
) {
8032 printf("%-10s %s%s\n",
8034 m
== first_machine
? " (default)" : "");
8036 exit(*optarg
!= '?');
8039 case QEMU_OPTION_cpu
:
8040 /* hw initialization will check this */
8041 if (*optarg
== '?') {
8042 /* XXX: implement xxx_cpu_list for targets that still miss it */
8043 #if defined(cpu_list)
8044 cpu_list(stdout
, &fprintf
);
8051 case QEMU_OPTION_initrd
:
8052 initrd_filename
= optarg
;
8054 case QEMU_OPTION_hda
:
8056 hda_index
= drive_add(optarg
, HD_ALIAS
, 0);
8058 hda_index
= drive_add(optarg
, HD_ALIAS
8059 ",cyls=%d,heads=%d,secs=%d%s",
8060 0, cyls
, heads
, secs
,
8061 translation
== BIOS_ATA_TRANSLATION_LBA
?
8063 translation
== BIOS_ATA_TRANSLATION_NONE
?
8064 ",trans=none" : "");
8066 case QEMU_OPTION_hdb
:
8067 case QEMU_OPTION_hdc
:
8068 case QEMU_OPTION_hdd
:
8069 drive_add(optarg
, HD_ALIAS
, popt
->index
- QEMU_OPTION_hda
);
8071 case QEMU_OPTION_drive
:
8072 drive_add(NULL
, "%s", optarg
);
8074 case QEMU_OPTION_mtdblock
:
8075 drive_add(optarg
, MTD_ALIAS
);
8077 case QEMU_OPTION_sd
:
8078 drive_add(optarg
, SD_ALIAS
);
8080 case QEMU_OPTION_pflash
:
8081 drive_add(optarg
, PFLASH_ALIAS
);
8083 case QEMU_OPTION_snapshot
:
8086 case QEMU_OPTION_hdachs
:
8090 cyls
= strtol(p
, (char **)&p
, 0);
8091 if (cyls
< 1 || cyls
> 16383)
8096 heads
= strtol(p
, (char **)&p
, 0);
8097 if (heads
< 1 || heads
> 16)
8102 secs
= strtol(p
, (char **)&p
, 0);
8103 if (secs
< 1 || secs
> 63)
8107 if (!strcmp(p
, "none"))
8108 translation
= BIOS_ATA_TRANSLATION_NONE
;
8109 else if (!strcmp(p
, "lba"))
8110 translation
= BIOS_ATA_TRANSLATION_LBA
;
8111 else if (!strcmp(p
, "auto"))
8112 translation
= BIOS_ATA_TRANSLATION_AUTO
;
8115 } else if (*p
!= '\0') {
8117 fprintf(stderr
, "qemu: invalid physical CHS format\n");
8120 if (hda_index
!= -1)
8121 snprintf(drives_opt
[hda_index
].opt
,
8122 sizeof(drives_opt
[hda_index
].opt
),
8123 HD_ALIAS
",cyls=%d,heads=%d,secs=%d%s",
8124 0, cyls
, heads
, secs
,
8125 translation
== BIOS_ATA_TRANSLATION_LBA
?
8127 translation
== BIOS_ATA_TRANSLATION_NONE
?
8128 ",trans=none" : "");
8131 case QEMU_OPTION_nographic
:
8132 serial_devices
[0] = "stdio";
8133 parallel_devices
[0] = "null";
8134 monitor_device
= "stdio";
8137 #ifdef CONFIG_CURSES
8138 case QEMU_OPTION_curses
:
8142 case QEMU_OPTION_portrait
:
8145 case QEMU_OPTION_kernel
:
8146 kernel_filename
= optarg
;
8148 case QEMU_OPTION_append
:
8149 kernel_cmdline
= optarg
;
8151 case QEMU_OPTION_cdrom
:
8152 drive_add(optarg
, CDROM_ALIAS
);
8154 case QEMU_OPTION_boot
:
8155 boot_devices
= optarg
;
8156 /* We just do some generic consistency checks */
8158 /* Could easily be extended to 64 devices if needed */
8161 boot_devices_bitmap
= 0;
8162 for (p
= boot_devices
; *p
!= '\0'; p
++) {
8163 /* Allowed boot devices are:
8164 * a b : floppy disk drives
8165 * c ... f : IDE disk drives
8166 * g ... m : machine implementation dependant drives
8167 * n ... p : network devices
8168 * It's up to each machine implementation to check
8169 * if the given boot devices match the actual hardware
8170 * implementation and firmware features.
8172 if (*p
< 'a' || *p
> 'q') {
8173 fprintf(stderr
, "Invalid boot device '%c'\n", *p
);
8176 if (boot_devices_bitmap
& (1 << (*p
- 'a'))) {
8178 "Boot device '%c' was given twice\n",*p
);
8181 boot_devices_bitmap
|= 1 << (*p
- 'a');
8185 case QEMU_OPTION_fda
:
8186 case QEMU_OPTION_fdb
:
8187 drive_add(optarg
, FD_ALIAS
, popt
->index
- QEMU_OPTION_fda
);
8190 case QEMU_OPTION_no_fd_bootchk
:
8194 case QEMU_OPTION_net
:
8195 if (nb_net_clients
>= MAX_NET_CLIENTS
) {
8196 fprintf(stderr
, "qemu: too many network clients\n");
8199 net_clients
[nb_net_clients
] = optarg
;
8203 case QEMU_OPTION_tftp
:
8204 tftp_prefix
= optarg
;
8206 case QEMU_OPTION_bootp
:
8207 bootp_filename
= optarg
;
8210 case QEMU_OPTION_smb
:
8211 net_slirp_smb(optarg
);
8214 case QEMU_OPTION_redir
:
8215 net_slirp_redir(optarg
);
8219 case QEMU_OPTION_audio_help
:
8223 case QEMU_OPTION_soundhw
:
8224 select_soundhw (optarg
);
8230 case QEMU_OPTION_m
: {
8234 value
= strtoul(optarg
, &ptr
, 10);
8236 case 0: case 'M': case 'm':
8243 fprintf(stderr
, "qemu: invalid ram size: %s\n", optarg
);
8247 /* On 32-bit hosts, QEMU is limited by virtual address space */
8248 if (value
> (2047 << 20)
8250 && HOST_LONG_BITS
== 32
8253 fprintf(stderr
, "qemu: at most 2047 MB RAM can be simulated\n");
8256 if (value
!= (uint64_t)(ram_addr_t
)value
) {
8257 fprintf(stderr
, "qemu: ram size too large\n");
8268 mask
= cpu_str_to_log_mask(optarg
);
8270 printf("Log items (comma separated):\n");
8271 for(item
= cpu_log_items
; item
->mask
!= 0; item
++) {
8272 printf("%-10s %s\n", item
->name
, item
->help
);
8279 #ifdef CONFIG_GDBSTUB
8284 gdbstub_port
= optarg
;
8290 case QEMU_OPTION_bios
:
8297 keyboard_layout
= optarg
;
8299 case QEMU_OPTION_localtime
:
8302 case QEMU_OPTION_cirrusvga
:
8303 cirrus_vga_enabled
= 1;
8306 case QEMU_OPTION_vmsvga
:
8307 cirrus_vga_enabled
= 0;
8310 case QEMU_OPTION_std_vga
:
8311 cirrus_vga_enabled
= 0;
8319 w
= strtol(p
, (char **)&p
, 10);
8322 fprintf(stderr
, "qemu: invalid resolution or depth\n");
8328 h
= strtol(p
, (char **)&p
, 10);
8333 depth
= strtol(p
, (char **)&p
, 10);
8334 if (depth
!= 8 && depth
!= 15 && depth
!= 16 &&
8335 depth
!= 24 && depth
!= 32)
8337 } else if (*p
== '\0') {
8338 depth
= graphic_depth
;
8345 graphic_depth
= depth
;
8348 case QEMU_OPTION_echr
:
8351 term_escape_char
= strtol(optarg
, &r
, 0);
8353 printf("Bad argument to echr\n");
8356 case QEMU_OPTION_monitor
:
8357 monitor_device
= optarg
;
8359 case QEMU_OPTION_serial
:
8360 if (serial_device_index
>= MAX_SERIAL_PORTS
) {
8361 fprintf(stderr
, "qemu: too many serial ports\n");
8364 serial_devices
[serial_device_index
] = optarg
;
8365 serial_device_index
++;
8367 case QEMU_OPTION_parallel
:
8368 if (parallel_device_index
>= MAX_PARALLEL_PORTS
) {
8369 fprintf(stderr
, "qemu: too many parallel ports\n");
8372 parallel_devices
[parallel_device_index
] = optarg
;
8373 parallel_device_index
++;
8375 case QEMU_OPTION_loadvm
:
8378 case QEMU_OPTION_full_screen
:
8382 case QEMU_OPTION_no_frame
:
8385 case QEMU_OPTION_alt_grab
:
8388 case QEMU_OPTION_no_quit
:
8392 case QEMU_OPTION_pidfile
:
8396 case QEMU_OPTION_win2k_hack
:
8397 win2k_install_hack
= 1;
8401 case QEMU_OPTION_no_kqemu
:
8404 case QEMU_OPTION_kernel_kqemu
:
8408 case QEMU_OPTION_usb
:
8411 case QEMU_OPTION_usbdevice
:
8413 if (usb_devices_index
>= MAX_USB_CMDLINE
) {
8414 fprintf(stderr
, "Too many USB devices\n");
8417 usb_devices
[usb_devices_index
] = optarg
;
8418 usb_devices_index
++;
8420 case QEMU_OPTION_smp
:
8421 smp_cpus
= atoi(optarg
);
8422 if (smp_cpus
< 1 || smp_cpus
> MAX_CPUS
) {
8423 fprintf(stderr
, "Invalid number of CPUs\n");
8427 case QEMU_OPTION_vnc
:
8428 vnc_display
= optarg
;
8430 case QEMU_OPTION_no_acpi
:
8433 case QEMU_OPTION_no_reboot
:
8436 case QEMU_OPTION_no_shutdown
:
8439 case QEMU_OPTION_show_cursor
:
8442 case QEMU_OPTION_daemonize
:
8445 case QEMU_OPTION_option_rom
:
8446 if (nb_option_roms
>= MAX_OPTION_ROMS
) {
8447 fprintf(stderr
, "Too many option ROMs\n");
8450 option_rom
[nb_option_roms
] = optarg
;
8453 case QEMU_OPTION_semihosting
:
8454 semihosting_enabled
= 1;
8456 case QEMU_OPTION_name
:
8460 case QEMU_OPTION_prom_env
:
8461 if (nb_prom_envs
>= MAX_PROM_ENVS
) {
8462 fprintf(stderr
, "Too many prom variables\n");
8465 prom_envs
[nb_prom_envs
] = optarg
;
8470 case QEMU_OPTION_old_param
:
8474 case QEMU_OPTION_clock
:
8475 configure_alarms(optarg
);
8477 case QEMU_OPTION_startdate
:
8480 time_t rtc_start_date
;
8481 if (!strcmp(optarg
, "now")) {
8482 rtc_date_offset
= -1;
8484 if (sscanf(optarg
, "%d-%d-%dT%d:%d:%d",
8492 } else if (sscanf(optarg
, "%d-%d-%d",
8495 &tm
.tm_mday
) == 3) {
8504 rtc_start_date
= mktimegm(&tm
);
8505 if (rtc_start_date
== -1) {
8507 fprintf(stderr
, "Invalid date format. Valid format are:\n"
8508 "'now' or '2006-06-17T16:01:21' or '2006-06-17'\n");
8511 rtc_date_offset
= time(NULL
) - rtc_start_date
;
8515 case QEMU_OPTION_tb_size
:
8516 tb_size
= strtol(optarg
, NULL
, 0);
8520 case QEMU_OPTION_icount
:
8522 if (strcmp(optarg
, "auto") == 0) {
8523 icount_time_shift
= -1;
8525 icount_time_shift
= strtol(optarg
, NULL
, 0);
8533 if (daemonize
&& !nographic
&& vnc_display
== NULL
) {
8534 fprintf(stderr
, "Can only daemonize if using -nographic or -vnc\n");
8541 if (pipe(fds
) == -1)
8552 len
= read(fds
[0], &status
, 1);
8553 if (len
== -1 && (errno
== EINTR
))
8558 else if (status
== 1) {
8559 fprintf(stderr
, "Could not acquire pidfile\n");
8577 signal(SIGTSTP
, SIG_IGN
);
8578 signal(SIGTTOU
, SIG_IGN
);
8579 signal(SIGTTIN
, SIG_IGN
);
8583 if (pid_file
&& qemu_create_pidfile(pid_file
) != 0) {
8586 write(fds
[1], &status
, 1);
8588 fprintf(stderr
, "Could not acquire pid file\n");
8596 linux_boot
= (kernel_filename
!= NULL
);
8597 net_boot
= (boot_devices_bitmap
>> ('n' - 'a')) & 0xF;
8599 /* XXX: this should not be: some embedded targets just have flash */
8600 if (!linux_boot
&& net_boot
== 0 &&
8604 if (!linux_boot
&& *kernel_cmdline
!= '\0') {
8605 fprintf(stderr
, "-append only allowed with -kernel option\n");
8609 if (!linux_boot
&& initrd_filename
!= NULL
) {
8610 fprintf(stderr
, "-initrd only allowed with -kernel option\n");
8614 /* boot to floppy or the default cd if no hard disk defined yet */
8615 if (!boot_devices
[0]) {
8616 boot_devices
= "cad";
8618 setvbuf(stdout
, NULL
, _IOLBF
, 0);
8623 if (use_icount
&& icount_time_shift
< 0) {
8625 /* 125MIPS seems a reasonable initial guess at the guest speed.
8626 It will be corrected fairly quickly anyway. */
8627 icount_time_shift
= 3;
8628 init_icount_adjust();
8635 /* init network clients */
8636 if (nb_net_clients
== 0) {
8637 /* if no clients, we use a default config */
8638 net_clients
[0] = "nic";
8639 net_clients
[1] = "user";
8643 for(i
= 0;i
< nb_net_clients
; i
++) {
8644 if (net_client_init(net_clients
[i
]) < 0)
8647 for(vlan
= first_vlan
; vlan
!= NULL
; vlan
= vlan
->next
) {
8648 if (vlan
->nb_guest_devs
== 0 && vlan
->nb_host_devs
== 0)
8650 if (vlan
->nb_guest_devs
== 0) {
8651 fprintf(stderr
, "Invalid vlan (%d) with no nics\n", vlan
->id
);
8654 if (vlan
->nb_host_devs
== 0)
8656 "Warning: vlan %d is not connected to host network\n",
8661 /* XXX: this should be moved in the PC machine instantiation code */
8662 if (net_boot
!= 0) {
8664 for (i
= 0; i
< nb_nics
&& i
< 4; i
++) {
8665 const char *model
= nd_table
[i
].model
;
8667 if (net_boot
& (1 << i
)) {
8670 snprintf(buf
, sizeof(buf
), "%s/pxe-%s.bin", bios_dir
, model
);
8671 if (get_image_size(buf
) > 0) {
8672 if (nb_option_roms
>= MAX_OPTION_ROMS
) {
8673 fprintf(stderr
, "Too many option ROMs\n");
8676 option_rom
[nb_option_roms
] = strdup(buf
);
8683 fprintf(stderr
, "No valid PXE rom found for network device\n");
8689 /* init the memory */
8690 phys_ram_size
= machine
->ram_require
& ~RAMSIZE_FIXED
;
8692 if (machine
->ram_require
& RAMSIZE_FIXED
) {
8694 if (ram_size
< phys_ram_size
) {
8695 fprintf(stderr
, "Machine `%s' requires %llu bytes of memory\n",
8696 machine
->name
, (unsigned long long) phys_ram_size
);
8700 phys_ram_size
= ram_size
;
8702 ram_size
= phys_ram_size
;
8705 ram_size
= DEFAULT_RAM_SIZE
* 1024 * 1024;
8707 phys_ram_size
+= ram_size
;
8710 phys_ram_base
= qemu_vmalloc(phys_ram_size
);
8711 if (!phys_ram_base
) {
8712 fprintf(stderr
, "Could not allocate physical memory\n");
8716 /* init the dynamic translator */
8717 cpu_exec_init_all(tb_size
* 1024 * 1024);
8721 /* we always create the cdrom drive, even if no disk is there */
8723 if (nb_drives_opt
< MAX_DRIVES
)
8724 drive_add(NULL
, CDROM_ALIAS
);
8726 /* we always create at least one floppy */
8728 if (nb_drives_opt
< MAX_DRIVES
)
8729 drive_add(NULL
, FD_ALIAS
, 0);
8731 /* we always create one sd slot, even if no card is in it */
8733 if (nb_drives_opt
< MAX_DRIVES
)
8734 drive_add(NULL
, SD_ALIAS
);
8736 /* open the virtual block devices */
8738 for(i
= 0; i
< nb_drives_opt
; i
++)
8739 if (drive_init(&drives_opt
[i
], snapshot
, machine
) == -1)
8742 register_savevm("timer", 0, 2, timer_save
, timer_load
, NULL
);
8743 register_savevm("ram", 0, 2, ram_save
, ram_load
, NULL
);
8748 memset(&display_state
, 0, sizeof(display_state
));
8751 fprintf(stderr
, "fatal: -nographic can't be used with -curses\n");
8754 /* nearly nothing to do */
8755 dumb_display_init(ds
);
8756 } else if (vnc_display
!= NULL
) {
8757 vnc_display_init(ds
);
8758 if (vnc_display_open(ds
, vnc_display
) < 0)
8761 #if defined(CONFIG_CURSES)
8763 curses_display_init(ds
, full_screen
);
8767 #if defined(CONFIG_SDL)
8768 sdl_display_init(ds
, full_screen
, no_frame
);
8769 #elif defined(CONFIG_COCOA)
8770 cocoa_display_init(ds
, full_screen
);
8772 dumb_display_init(ds
);
8776 /* Maintain compatibility with multiple stdio monitors */
8777 if (!strcmp(monitor_device
,"stdio")) {
8778 for (i
= 0; i
< MAX_SERIAL_PORTS
; i
++) {
8779 const char *devname
= serial_devices
[i
];
8780 if (devname
&& !strcmp(devname
,"mon:stdio")) {
8781 monitor_device
= NULL
;
8783 } else if (devname
&& !strcmp(devname
,"stdio")) {
8784 monitor_device
= NULL
;
8785 serial_devices
[i
] = "mon:stdio";
8790 if (monitor_device
) {
8791 monitor_hd
= qemu_chr_open(monitor_device
);
8793 fprintf(stderr
, "qemu: could not open monitor device '%s'\n", monitor_device
);
8796 monitor_init(monitor_hd
, !nographic
);
8799 for(i
= 0; i
< MAX_SERIAL_PORTS
; i
++) {
8800 const char *devname
= serial_devices
[i
];
8801 if (devname
&& strcmp(devname
, "none")) {
8802 serial_hds
[i
] = qemu_chr_open(devname
);
8803 if (!serial_hds
[i
]) {
8804 fprintf(stderr
, "qemu: could not open serial device '%s'\n",
8808 if (strstart(devname
, "vc", 0))
8809 qemu_chr_printf(serial_hds
[i
], "serial%d console\r\n", i
);
8813 for(i
= 0; i
< MAX_PARALLEL_PORTS
; i
++) {
8814 const char *devname
= parallel_devices
[i
];
8815 if (devname
&& strcmp(devname
, "none")) {
8816 parallel_hds
[i
] = qemu_chr_open(devname
);
8817 if (!parallel_hds
[i
]) {
8818 fprintf(stderr
, "qemu: could not open parallel device '%s'\n",
8822 if (strstart(devname
, "vc", 0))
8823 qemu_chr_printf(parallel_hds
[i
], "parallel%d console\r\n", i
);
8827 machine
->init(ram_size
, vga_ram_size
, boot_devices
, ds
,
8828 kernel_filename
, kernel_cmdline
, initrd_filename
, cpu_model
);
8830 /* init USB devices */
8832 for(i
= 0; i
< usb_devices_index
; i
++) {
8833 if (usb_device_add(usb_devices
[i
]) < 0) {
8834 fprintf(stderr
, "Warning: could not add USB device %s\n",
8840 if (display_state
.dpy_refresh
) {
8841 display_state
.gui_timer
= qemu_new_timer(rt_clock
, gui_update
, &display_state
);
8842 qemu_mod_timer(display_state
.gui_timer
, qemu_get_clock(rt_clock
));
8845 #ifdef CONFIG_GDBSTUB
8847 /* XXX: use standard host:port notation and modify options
8849 if (gdbserver_start(gdbstub_port
) < 0) {
8850 fprintf(stderr
, "qemu: could not open gdbstub device on port '%s'\n",
8861 /* XXX: simplify init */
8874 len
= write(fds
[1], &status
, 1);
8875 if (len
== -1 && (errno
== EINTR
))
8881 TFR(fd
= open("/dev/null", O_RDWR
));
8895 #if !defined(_WIN32)
8896 /* close network clients */
8897 for(vlan
= first_vlan
; vlan
!= NULL
; vlan
= vlan
->next
) {
8898 VLANClientState
*vc
;
8900 for(vc
= vlan
->first_client
; vc
!= NULL
; vc
= vc
->next
) {
8901 if (vc
->fd_read
== tap_receive
) {
8903 TAPState
*s
= vc
->opaque
;
8905 if (sscanf(vc
->info_str
, "tap: ifname=%63s ", ifname
) == 1 &&
8907 launch_script(s
->down_script
, ifname
, s
->fd
);