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>
64 #if !defined(__APPLE__) && !defined(__OpenBSD__)
70 #elif defined (__GLIBC__) && defined (__FreeBSD_kernel__)
71 #include <freebsd/stdlib.h>
75 #include <linux/if_tun.h>
78 #include <linux/rtc.h>
80 /* For the benefit of older linux systems which don't supply it,
81 we use a local copy of hpet.h. */
82 /* #include <linux/hpet.h> */
85 #include <linux/ppdev.h>
86 #include <linux/parport.h>
89 #include <sys/ethernet.h>
90 #include <sys/sockio.h>
91 #include <netinet/arp.h>
92 #include <netinet/in.h>
93 #include <netinet/in_systm.h>
94 #include <netinet/ip.h>
95 #include <netinet/ip_icmp.h> // must come after ip.h
96 #include <netinet/udp.h>
97 #include <netinet/tcp.h>
104 #include <winsock2.h>
105 int inet_aton(const char *cp
, struct in_addr
*ia
);
108 #if defined(CONFIG_SLIRP)
109 #include "libslirp.h"
112 #if defined(CONFIG_VDE)
113 #include <libvdeplug.h>
118 #include <sys/timeb.h>
119 #include <mmsystem.h>
120 #define getopt_long_only getopt_long
121 #define memalign(align, size) malloc(size)
124 #include "qemu_socket.h"
130 #endif /* CONFIG_SDL */
134 #define main qemu_main
135 #endif /* CONFIG_COCOA */
139 #include "exec-all.h"
141 #define DEFAULT_NETWORK_SCRIPT "/etc/qemu-ifup"
142 #define DEFAULT_NETWORK_DOWN_SCRIPT "/etc/qemu-ifdown"
144 #define SMBD_COMMAND "/usr/sfw/sbin/smbd"
146 #define SMBD_COMMAND "/usr/sbin/smbd"
149 //#define DEBUG_UNUSED_IOPORT
150 //#define DEBUG_IOPORT
153 #define DEFAULT_RAM_SIZE 144
155 #define DEFAULT_RAM_SIZE 128
158 #define GUI_REFRESH_INTERVAL 30
160 /* Max number of USB devices that can be specified on the commandline. */
161 #define MAX_USB_CMDLINE 8
163 /* XXX: use a two level table to limit memory usage */
164 #define MAX_IOPORTS 65536
166 const char *bios_dir
= CONFIG_QEMU_SHAREDIR
;
167 const char *bios_name
= NULL
;
168 void *ioport_opaque
[MAX_IOPORTS
];
169 IOPortReadFunc
*ioport_read_table
[3][MAX_IOPORTS
];
170 IOPortWriteFunc
*ioport_write_table
[3][MAX_IOPORTS
];
171 /* Note: drives_table[MAX_DRIVES] is a dummy block driver if none available
172 to store the VM snapshots */
173 DriveInfo drives_table
[MAX_DRIVES
+1];
175 /* point to the block driver where the snapshots are managed */
176 BlockDriverState
*bs_snapshots
;
178 static DisplayState display_state
;
181 const char* keyboard_layout
= NULL
;
182 int64_t ticks_per_sec
;
184 int pit_min_timer_count
= 0;
186 NICInfo nd_table
[MAX_NICS
];
188 static int rtc_utc
= 1;
189 static int rtc_date_offset
= -1; /* -1 means no change */
190 int cirrus_vga_enabled
= 1;
191 int vmsvga_enabled
= 0;
193 int graphic_width
= 1024;
194 int graphic_height
= 768;
195 int graphic_depth
= 8;
197 int graphic_width
= 800;
198 int graphic_height
= 600;
199 int graphic_depth
= 15;
204 CharDriverState
*serial_hds
[MAX_SERIAL_PORTS
];
205 CharDriverState
*parallel_hds
[MAX_PARALLEL_PORTS
];
207 int win2k_install_hack
= 0;
210 static VLANState
*first_vlan
;
212 const char *vnc_display
;
213 #if defined(TARGET_SPARC)
215 #elif defined(TARGET_I386)
220 int acpi_enabled
= 1;
225 int graphic_rotate
= 0;
227 const char *option_rom
[MAX_OPTION_ROMS
];
229 int semihosting_enabled
= 0;
234 const char *qemu_name
;
237 unsigned int nb_prom_envs
= 0;
238 const char *prom_envs
[MAX_PROM_ENVS
];
244 } drives_opt
[MAX_DRIVES
];
246 static CPUState
*cur_cpu
;
247 static CPUState
*next_cpu
;
248 static int event_pending
= 1;
249 /* Conversion factor from emulated instructions to virtual clock ticks. */
250 static int icount_time_shift
;
251 /* Arbitrarily pick 1MIPS as the minimum allowable speed. */
252 #define MAX_ICOUNT_SHIFT 10
253 /* Compensate for varying guest execution speed. */
254 static int64_t qemu_icount_bias
;
255 QEMUTimer
*icount_rt_timer
;
256 QEMUTimer
*icount_vm_timer
;
258 #define TFR(expr) do { if ((expr) != -1) break; } while (errno == EINTR)
260 /***********************************************************/
261 /* x86 ISA bus support */
263 target_phys_addr_t isa_mem_base
= 0;
266 static IOPortReadFunc default_ioport_readb
, default_ioport_readw
, default_ioport_readl
;
267 static IOPortWriteFunc default_ioport_writeb
, default_ioport_writew
, default_ioport_writel
;
269 static uint32_t ioport_read(int index
, uint32_t address
)
271 static IOPortReadFunc
*default_func
[3] = {
272 default_ioport_readb
,
273 default_ioport_readw
,
276 IOPortReadFunc
*func
= ioport_read_table
[index
][address
];
278 func
= default_func
[index
];
279 return func(ioport_opaque
[address
], address
);
282 static void ioport_write(int index
, uint32_t address
, uint32_t data
)
284 static IOPortWriteFunc
*default_func
[3] = {
285 default_ioport_writeb
,
286 default_ioport_writew
,
287 default_ioport_writel
289 IOPortWriteFunc
*func
= ioport_write_table
[index
][address
];
291 func
= default_func
[index
];
292 func(ioport_opaque
[address
], address
, data
);
295 static uint32_t default_ioport_readb(void *opaque
, uint32_t address
)
297 #ifdef DEBUG_UNUSED_IOPORT
298 fprintf(stderr
, "unused inb: port=0x%04x\n", address
);
303 static void default_ioport_writeb(void *opaque
, uint32_t address
, uint32_t data
)
305 #ifdef DEBUG_UNUSED_IOPORT
306 fprintf(stderr
, "unused outb: port=0x%04x data=0x%02x\n", address
, data
);
310 /* default is to make two byte accesses */
311 static uint32_t default_ioport_readw(void *opaque
, uint32_t address
)
314 data
= ioport_read(0, address
);
315 address
= (address
+ 1) & (MAX_IOPORTS
- 1);
316 data
|= ioport_read(0, address
) << 8;
320 static void default_ioport_writew(void *opaque
, uint32_t address
, uint32_t data
)
322 ioport_write(0, address
, data
& 0xff);
323 address
= (address
+ 1) & (MAX_IOPORTS
- 1);
324 ioport_write(0, address
, (data
>> 8) & 0xff);
327 static uint32_t default_ioport_readl(void *opaque
, uint32_t address
)
329 #ifdef DEBUG_UNUSED_IOPORT
330 fprintf(stderr
, "unused inl: port=0x%04x\n", address
);
335 static void default_ioport_writel(void *opaque
, uint32_t address
, uint32_t data
)
337 #ifdef DEBUG_UNUSED_IOPORT
338 fprintf(stderr
, "unused outl: port=0x%04x data=0x%02x\n", address
, data
);
342 /* size is the word size in byte */
343 int register_ioport_read(int start
, int length
, int size
,
344 IOPortReadFunc
*func
, void *opaque
)
350 } else if (size
== 2) {
352 } else if (size
== 4) {
355 hw_error("register_ioport_read: invalid size");
358 for(i
= start
; i
< start
+ length
; i
+= size
) {
359 ioport_read_table
[bsize
][i
] = func
;
360 if (ioport_opaque
[i
] != NULL
&& ioport_opaque
[i
] != opaque
)
361 hw_error("register_ioport_read: invalid opaque");
362 ioport_opaque
[i
] = opaque
;
367 /* size is the word size in byte */
368 int register_ioport_write(int start
, int length
, int size
,
369 IOPortWriteFunc
*func
, void *opaque
)
375 } else if (size
== 2) {
377 } else if (size
== 4) {
380 hw_error("register_ioport_write: invalid size");
383 for(i
= start
; i
< start
+ length
; i
+= size
) {
384 ioport_write_table
[bsize
][i
] = func
;
385 if (ioport_opaque
[i
] != NULL
&& ioport_opaque
[i
] != opaque
)
386 hw_error("register_ioport_write: invalid opaque");
387 ioport_opaque
[i
] = opaque
;
392 void isa_unassign_ioport(int start
, int length
)
396 for(i
= start
; i
< start
+ length
; i
++) {
397 ioport_read_table
[0][i
] = default_ioport_readb
;
398 ioport_read_table
[1][i
] = default_ioport_readw
;
399 ioport_read_table
[2][i
] = default_ioport_readl
;
401 ioport_write_table
[0][i
] = default_ioport_writeb
;
402 ioport_write_table
[1][i
] = default_ioport_writew
;
403 ioport_write_table
[2][i
] = default_ioport_writel
;
407 /***********************************************************/
409 void cpu_outb(CPUState
*env
, int addr
, int val
)
412 if (loglevel
& CPU_LOG_IOPORT
)
413 fprintf(logfile
, "outb: %04x %02x\n", addr
, val
);
415 ioport_write(0, addr
, val
);
418 env
->last_io_time
= cpu_get_time_fast();
422 void cpu_outw(CPUState
*env
, int addr
, int val
)
425 if (loglevel
& CPU_LOG_IOPORT
)
426 fprintf(logfile
, "outw: %04x %04x\n", addr
, val
);
428 ioport_write(1, addr
, val
);
431 env
->last_io_time
= cpu_get_time_fast();
435 void cpu_outl(CPUState
*env
, int addr
, int val
)
438 if (loglevel
& CPU_LOG_IOPORT
)
439 fprintf(logfile
, "outl: %04x %08x\n", addr
, val
);
441 ioport_write(2, addr
, val
);
444 env
->last_io_time
= cpu_get_time_fast();
448 int cpu_inb(CPUState
*env
, int addr
)
451 val
= ioport_read(0, addr
);
453 if (loglevel
& CPU_LOG_IOPORT
)
454 fprintf(logfile
, "inb : %04x %02x\n", addr
, val
);
458 env
->last_io_time
= cpu_get_time_fast();
463 int cpu_inw(CPUState
*env
, int addr
)
466 val
= ioport_read(1, addr
);
468 if (loglevel
& CPU_LOG_IOPORT
)
469 fprintf(logfile
, "inw : %04x %04x\n", addr
, val
);
473 env
->last_io_time
= cpu_get_time_fast();
478 int cpu_inl(CPUState
*env
, int addr
)
481 val
= ioport_read(2, addr
);
483 if (loglevel
& CPU_LOG_IOPORT
)
484 fprintf(logfile
, "inl : %04x %08x\n", addr
, val
);
488 env
->last_io_time
= cpu_get_time_fast();
493 /***********************************************************/
494 void hw_error(const char *fmt
, ...)
500 fprintf(stderr
, "qemu: hardware error: ");
501 vfprintf(stderr
, fmt
, ap
);
502 fprintf(stderr
, "\n");
503 for(env
= first_cpu
; env
!= NULL
; env
= env
->next_cpu
) {
504 fprintf(stderr
, "CPU #%d:\n", env
->cpu_index
);
506 cpu_dump_state(env
, stderr
, fprintf
, X86_DUMP_FPU
);
508 cpu_dump_state(env
, stderr
, fprintf
, 0);
515 /***********************************************************/
518 static QEMUPutKBDEvent
*qemu_put_kbd_event
;
519 static void *qemu_put_kbd_event_opaque
;
520 static QEMUPutMouseEntry
*qemu_put_mouse_event_head
;
521 static QEMUPutMouseEntry
*qemu_put_mouse_event_current
;
523 void qemu_add_kbd_event_handler(QEMUPutKBDEvent
*func
, void *opaque
)
525 qemu_put_kbd_event_opaque
= opaque
;
526 qemu_put_kbd_event
= func
;
529 QEMUPutMouseEntry
*qemu_add_mouse_event_handler(QEMUPutMouseEvent
*func
,
530 void *opaque
, int absolute
,
533 QEMUPutMouseEntry
*s
, *cursor
;
535 s
= qemu_mallocz(sizeof(QEMUPutMouseEntry
));
539 s
->qemu_put_mouse_event
= func
;
540 s
->qemu_put_mouse_event_opaque
= opaque
;
541 s
->qemu_put_mouse_event_absolute
= absolute
;
542 s
->qemu_put_mouse_event_name
= qemu_strdup(name
);
545 if (!qemu_put_mouse_event_head
) {
546 qemu_put_mouse_event_head
= qemu_put_mouse_event_current
= s
;
550 cursor
= qemu_put_mouse_event_head
;
551 while (cursor
->next
!= NULL
)
552 cursor
= cursor
->next
;
555 qemu_put_mouse_event_current
= s
;
560 void qemu_remove_mouse_event_handler(QEMUPutMouseEntry
*entry
)
562 QEMUPutMouseEntry
*prev
= NULL
, *cursor
;
564 if (!qemu_put_mouse_event_head
|| entry
== NULL
)
567 cursor
= qemu_put_mouse_event_head
;
568 while (cursor
!= NULL
&& cursor
!= entry
) {
570 cursor
= cursor
->next
;
573 if (cursor
== NULL
) // does not exist or list empty
575 else if (prev
== NULL
) { // entry is head
576 qemu_put_mouse_event_head
= cursor
->next
;
577 if (qemu_put_mouse_event_current
== entry
)
578 qemu_put_mouse_event_current
= cursor
->next
;
579 qemu_free(entry
->qemu_put_mouse_event_name
);
584 prev
->next
= entry
->next
;
586 if (qemu_put_mouse_event_current
== entry
)
587 qemu_put_mouse_event_current
= prev
;
589 qemu_free(entry
->qemu_put_mouse_event_name
);
593 void kbd_put_keycode(int keycode
)
595 if (qemu_put_kbd_event
) {
596 qemu_put_kbd_event(qemu_put_kbd_event_opaque
, keycode
);
600 void kbd_mouse_event(int dx
, int dy
, int dz
, int buttons_state
)
602 QEMUPutMouseEvent
*mouse_event
;
603 void *mouse_event_opaque
;
606 if (!qemu_put_mouse_event_current
) {
611 qemu_put_mouse_event_current
->qemu_put_mouse_event
;
613 qemu_put_mouse_event_current
->qemu_put_mouse_event_opaque
;
616 if (graphic_rotate
) {
617 if (qemu_put_mouse_event_current
->qemu_put_mouse_event_absolute
)
620 width
= graphic_width
- 1;
621 mouse_event(mouse_event_opaque
,
622 width
- dy
, dx
, dz
, buttons_state
);
624 mouse_event(mouse_event_opaque
,
625 dx
, dy
, dz
, buttons_state
);
629 int kbd_mouse_is_absolute(void)
631 if (!qemu_put_mouse_event_current
)
634 return qemu_put_mouse_event_current
->qemu_put_mouse_event_absolute
;
637 void do_info_mice(void)
639 QEMUPutMouseEntry
*cursor
;
642 if (!qemu_put_mouse_event_head
) {
643 term_printf("No mouse devices connected\n");
647 term_printf("Mouse devices available:\n");
648 cursor
= qemu_put_mouse_event_head
;
649 while (cursor
!= NULL
) {
650 term_printf("%c Mouse #%d: %s\n",
651 (cursor
== qemu_put_mouse_event_current
? '*' : ' '),
652 index
, cursor
->qemu_put_mouse_event_name
);
654 cursor
= cursor
->next
;
658 void do_mouse_set(int index
)
660 QEMUPutMouseEntry
*cursor
;
663 if (!qemu_put_mouse_event_head
) {
664 term_printf("No mouse devices connected\n");
668 cursor
= qemu_put_mouse_event_head
;
669 while (cursor
!= NULL
&& index
!= i
) {
671 cursor
= cursor
->next
;
675 qemu_put_mouse_event_current
= cursor
;
677 term_printf("Mouse at given index not found\n");
680 /* compute with 96 bit intermediate result: (a*b)/c */
681 uint64_t muldiv64(uint64_t a
, uint32_t b
, uint32_t c
)
686 #ifdef WORDS_BIGENDIAN
696 rl
= (uint64_t)u
.l
.low
* (uint64_t)b
;
697 rh
= (uint64_t)u
.l
.high
* (uint64_t)b
;
700 res
.l
.low
= (((rh
% c
) << 32) + (rl
& 0xffffffff)) / c
;
704 /***********************************************************/
705 /* real time host monotonic timer */
707 #define QEMU_TIMER_BASE 1000000000LL
711 static int64_t clock_freq
;
713 static void init_get_clock(void)
717 ret
= QueryPerformanceFrequency(&freq
);
719 fprintf(stderr
, "Could not calibrate ticks\n");
722 clock_freq
= freq
.QuadPart
;
725 static int64_t get_clock(void)
728 QueryPerformanceCounter(&ti
);
729 return muldiv64(ti
.QuadPart
, QEMU_TIMER_BASE
, clock_freq
);
734 static int use_rt_clock
;
736 static void init_get_clock(void)
739 #if defined(__linux__)
742 if (clock_gettime(CLOCK_MONOTONIC
, &ts
) == 0) {
749 static int64_t get_clock(void)
751 #if defined(__linux__)
754 clock_gettime(CLOCK_MONOTONIC
, &ts
);
755 return ts
.tv_sec
* 1000000000LL + ts
.tv_nsec
;
759 /* XXX: using gettimeofday leads to problems if the date
760 changes, so it should be avoided. */
762 gettimeofday(&tv
, NULL
);
763 return tv
.tv_sec
* 1000000000LL + (tv
.tv_usec
* 1000);
768 /* Return the virtual CPU time, based on the instruction counter. */
769 static int64_t cpu_get_icount(void)
772 CPUState
*env
= cpu_single_env
;;
773 icount
= qemu_icount
;
776 fprintf(stderr
, "Bad clock read\n");
777 icount
-= (env
->icount_decr
.u16
.low
+ env
->icount_extra
);
779 return qemu_icount_bias
+ (icount
<< icount_time_shift
);
782 /***********************************************************/
783 /* guest cycle counter */
785 static int64_t cpu_ticks_prev
;
786 static int64_t cpu_ticks_offset
;
787 static int64_t cpu_clock_offset
;
788 static int cpu_ticks_enabled
;
790 /* return the host CPU cycle counter and handle stop/restart */
791 int64_t cpu_get_ticks(void)
794 return cpu_get_icount();
796 if (!cpu_ticks_enabled
) {
797 return cpu_ticks_offset
;
800 ticks
= cpu_get_real_ticks();
801 if (cpu_ticks_prev
> ticks
) {
802 /* Note: non increasing ticks may happen if the host uses
804 cpu_ticks_offset
+= cpu_ticks_prev
- ticks
;
806 cpu_ticks_prev
= ticks
;
807 return ticks
+ cpu_ticks_offset
;
811 /* return the host CPU monotonic timer and handle stop/restart */
812 static int64_t cpu_get_clock(void)
815 if (!cpu_ticks_enabled
) {
816 return cpu_clock_offset
;
819 return ti
+ cpu_clock_offset
;
823 /* enable cpu_get_ticks() */
824 void cpu_enable_ticks(void)
826 if (!cpu_ticks_enabled
) {
827 cpu_ticks_offset
-= cpu_get_real_ticks();
828 cpu_clock_offset
-= get_clock();
829 cpu_ticks_enabled
= 1;
833 /* disable cpu_get_ticks() : the clock is stopped. You must not call
834 cpu_get_ticks() after that. */
835 void cpu_disable_ticks(void)
837 if (cpu_ticks_enabled
) {
838 cpu_ticks_offset
= cpu_get_ticks();
839 cpu_clock_offset
= cpu_get_clock();
840 cpu_ticks_enabled
= 0;
844 /***********************************************************/
847 #define QEMU_TIMER_REALTIME 0
848 #define QEMU_TIMER_VIRTUAL 1
852 /* XXX: add frequency */
860 struct QEMUTimer
*next
;
863 struct qemu_alarm_timer
{
867 int (*start
)(struct qemu_alarm_timer
*t
);
868 void (*stop
)(struct qemu_alarm_timer
*t
);
869 void (*rearm
)(struct qemu_alarm_timer
*t
);
873 #define ALARM_FLAG_DYNTICKS 0x1
874 #define ALARM_FLAG_EXPIRED 0x2
876 static inline int alarm_has_dynticks(struct qemu_alarm_timer
*t
)
878 return t
->flags
& ALARM_FLAG_DYNTICKS
;
881 static void qemu_rearm_alarm_timer(struct qemu_alarm_timer
*t
)
883 if (!alarm_has_dynticks(t
))
889 /* TODO: MIN_TIMER_REARM_US should be optimized */
890 #define MIN_TIMER_REARM_US 250
892 static struct qemu_alarm_timer
*alarm_timer
;
896 struct qemu_alarm_win32
{
900 } alarm_win32_data
= {0, NULL
, -1};
902 static int win32_start_timer(struct qemu_alarm_timer
*t
);
903 static void win32_stop_timer(struct qemu_alarm_timer
*t
);
904 static void win32_rearm_timer(struct qemu_alarm_timer
*t
);
908 static int unix_start_timer(struct qemu_alarm_timer
*t
);
909 static void unix_stop_timer(struct qemu_alarm_timer
*t
);
913 static int dynticks_start_timer(struct qemu_alarm_timer
*t
);
914 static void dynticks_stop_timer(struct qemu_alarm_timer
*t
);
915 static void dynticks_rearm_timer(struct qemu_alarm_timer
*t
);
917 static int hpet_start_timer(struct qemu_alarm_timer
*t
);
918 static void hpet_stop_timer(struct qemu_alarm_timer
*t
);
920 static int rtc_start_timer(struct qemu_alarm_timer
*t
);
921 static void rtc_stop_timer(struct qemu_alarm_timer
*t
);
923 #endif /* __linux__ */
927 /* Correlation between real and virtual time is always going to be
928 fairly approximate, so ignore small variation.
929 When the guest is idle real and virtual time will be aligned in
931 #define ICOUNT_WOBBLE (QEMU_TIMER_BASE / 10)
933 static void icount_adjust(void)
938 static int64_t last_delta
;
939 /* If the VM is not running, then do nothing. */
943 cur_time
= cpu_get_clock();
944 cur_icount
= qemu_get_clock(vm_clock
);
945 delta
= cur_icount
- cur_time
;
946 /* FIXME: This is a very crude algorithm, somewhat prone to oscillation. */
948 && last_delta
+ ICOUNT_WOBBLE
< delta
* 2
949 && icount_time_shift
> 0) {
950 /* The guest is getting too far ahead. Slow time down. */
954 && last_delta
- ICOUNT_WOBBLE
> delta
* 2
955 && icount_time_shift
< MAX_ICOUNT_SHIFT
) {
956 /* The guest is getting too far behind. Speed time up. */
960 qemu_icount_bias
= cur_icount
- (qemu_icount
<< icount_time_shift
);
963 static void icount_adjust_rt(void * opaque
)
965 qemu_mod_timer(icount_rt_timer
,
966 qemu_get_clock(rt_clock
) + 1000);
970 static void icount_adjust_vm(void * opaque
)
972 qemu_mod_timer(icount_vm_timer
,
973 qemu_get_clock(vm_clock
) + QEMU_TIMER_BASE
/ 10);
977 static void init_icount_adjust(void)
979 /* Have both realtime and virtual time triggers for speed adjustment.
980 The realtime trigger catches emulated time passing too slowly,
981 the virtual time trigger catches emulated time passing too fast.
982 Realtime triggers occur even when idle, so use them less frequently
984 icount_rt_timer
= qemu_new_timer(rt_clock
, icount_adjust_rt
, NULL
);
985 qemu_mod_timer(icount_rt_timer
,
986 qemu_get_clock(rt_clock
) + 1000);
987 icount_vm_timer
= qemu_new_timer(vm_clock
, icount_adjust_vm
, NULL
);
988 qemu_mod_timer(icount_vm_timer
,
989 qemu_get_clock(vm_clock
) + QEMU_TIMER_BASE
/ 10);
992 static struct qemu_alarm_timer alarm_timers
[] = {
995 {"dynticks", ALARM_FLAG_DYNTICKS
, dynticks_start_timer
,
996 dynticks_stop_timer
, dynticks_rearm_timer
, NULL
},
997 /* HPET - if available - is preferred */
998 {"hpet", 0, hpet_start_timer
, hpet_stop_timer
, NULL
, NULL
},
999 /* ...otherwise try RTC */
1000 {"rtc", 0, rtc_start_timer
, rtc_stop_timer
, NULL
, NULL
},
1002 {"unix", 0, unix_start_timer
, unix_stop_timer
, NULL
, NULL
},
1004 {"dynticks", ALARM_FLAG_DYNTICKS
, win32_start_timer
,
1005 win32_stop_timer
, win32_rearm_timer
, &alarm_win32_data
},
1006 {"win32", 0, win32_start_timer
,
1007 win32_stop_timer
, NULL
, &alarm_win32_data
},
1012 static void show_available_alarms(void)
1016 printf("Available alarm timers, in order of precedence:\n");
1017 for (i
= 0; alarm_timers
[i
].name
; i
++)
1018 printf("%s\n", alarm_timers
[i
].name
);
1021 static void configure_alarms(char const *opt
)
1025 int count
= (sizeof(alarm_timers
) / sizeof(*alarm_timers
)) - 1;
1028 struct qemu_alarm_timer tmp
;
1030 if (!strcmp(opt
, "?")) {
1031 show_available_alarms();
1037 /* Reorder the array */
1038 name
= strtok(arg
, ",");
1040 for (i
= 0; i
< count
&& alarm_timers
[i
].name
; i
++) {
1041 if (!strcmp(alarm_timers
[i
].name
, name
))
1046 fprintf(stderr
, "Unknown clock %s\n", name
);
1055 tmp
= alarm_timers
[i
];
1056 alarm_timers
[i
] = alarm_timers
[cur
];
1057 alarm_timers
[cur
] = tmp
;
1061 name
= strtok(NULL
, ",");
1067 /* Disable remaining timers */
1068 for (i
= cur
; i
< count
; i
++)
1069 alarm_timers
[i
].name
= NULL
;
1071 show_available_alarms();
1076 QEMUClock
*rt_clock
;
1077 QEMUClock
*vm_clock
;
1079 static QEMUTimer
*active_timers
[2];
1081 static QEMUClock
*qemu_new_clock(int type
)
1084 clock
= qemu_mallocz(sizeof(QEMUClock
));
1091 QEMUTimer
*qemu_new_timer(QEMUClock
*clock
, QEMUTimerCB
*cb
, void *opaque
)
1095 ts
= qemu_mallocz(sizeof(QEMUTimer
));
1098 ts
->opaque
= opaque
;
1102 void qemu_free_timer(QEMUTimer
*ts
)
1107 /* stop a timer, but do not dealloc it */
1108 void qemu_del_timer(QEMUTimer
*ts
)
1112 /* NOTE: this code must be signal safe because
1113 qemu_timer_expired() can be called from a signal. */
1114 pt
= &active_timers
[ts
->clock
->type
];
1127 /* modify the current timer so that it will be fired when current_time
1128 >= expire_time. The corresponding callback will be called. */
1129 void qemu_mod_timer(QEMUTimer
*ts
, int64_t expire_time
)
1135 /* add the timer in the sorted list */
1136 /* NOTE: this code must be signal safe because
1137 qemu_timer_expired() can be called from a signal. */
1138 pt
= &active_timers
[ts
->clock
->type
];
1143 if (t
->expire_time
> expire_time
)
1147 ts
->expire_time
= expire_time
;
1151 /* Rearm if necessary */
1152 if (pt
== &active_timers
[ts
->clock
->type
]) {
1153 if ((alarm_timer
->flags
& ALARM_FLAG_EXPIRED
) == 0) {
1154 qemu_rearm_alarm_timer(alarm_timer
);
1156 /* Interrupt execution to force deadline recalculation. */
1157 if (use_icount
&& cpu_single_env
) {
1158 cpu_interrupt(cpu_single_env
, CPU_INTERRUPT_EXIT
);
1163 int qemu_timer_pending(QEMUTimer
*ts
)
1166 for(t
= active_timers
[ts
->clock
->type
]; t
!= NULL
; t
= t
->next
) {
1173 static inline int qemu_timer_expired(QEMUTimer
*timer_head
, int64_t current_time
)
1177 return (timer_head
->expire_time
<= current_time
);
1180 static void qemu_run_timers(QEMUTimer
**ptimer_head
, int64_t current_time
)
1186 if (!ts
|| ts
->expire_time
> current_time
)
1188 /* remove timer from the list before calling the callback */
1189 *ptimer_head
= ts
->next
;
1192 /* run the callback (the timer list can be modified) */
1197 int64_t qemu_get_clock(QEMUClock
*clock
)
1199 switch(clock
->type
) {
1200 case QEMU_TIMER_REALTIME
:
1201 return get_clock() / 1000000;
1203 case QEMU_TIMER_VIRTUAL
:
1205 return cpu_get_icount();
1207 return cpu_get_clock();
1212 static void init_timers(void)
1215 ticks_per_sec
= QEMU_TIMER_BASE
;
1216 rt_clock
= qemu_new_clock(QEMU_TIMER_REALTIME
);
1217 vm_clock
= qemu_new_clock(QEMU_TIMER_VIRTUAL
);
1221 void qemu_put_timer(QEMUFile
*f
, QEMUTimer
*ts
)
1223 uint64_t expire_time
;
1225 if (qemu_timer_pending(ts
)) {
1226 expire_time
= ts
->expire_time
;
1230 qemu_put_be64(f
, expire_time
);
1233 void qemu_get_timer(QEMUFile
*f
, QEMUTimer
*ts
)
1235 uint64_t expire_time
;
1237 expire_time
= qemu_get_be64(f
);
1238 if (expire_time
!= -1) {
1239 qemu_mod_timer(ts
, expire_time
);
1245 static void timer_save(QEMUFile
*f
, void *opaque
)
1247 if (cpu_ticks_enabled
) {
1248 hw_error("cannot save state if virtual timers are running");
1250 qemu_put_be64(f
, cpu_ticks_offset
);
1251 qemu_put_be64(f
, ticks_per_sec
);
1252 qemu_put_be64(f
, cpu_clock_offset
);
1255 static int timer_load(QEMUFile
*f
, void *opaque
, int version_id
)
1257 if (version_id
!= 1 && version_id
!= 2)
1259 if (cpu_ticks_enabled
) {
1262 cpu_ticks_offset
=qemu_get_be64(f
);
1263 ticks_per_sec
=qemu_get_be64(f
);
1264 if (version_id
== 2) {
1265 cpu_clock_offset
=qemu_get_be64(f
);
1271 void CALLBACK
host_alarm_handler(UINT uTimerID
, UINT uMsg
,
1272 DWORD_PTR dwUser
, DWORD_PTR dw1
, DWORD_PTR dw2
)
1274 static void host_alarm_handler(int host_signum
)
1278 #define DISP_FREQ 1000
1280 static int64_t delta_min
= INT64_MAX
;
1281 static int64_t delta_max
, delta_cum
, last_clock
, delta
, ti
;
1283 ti
= qemu_get_clock(vm_clock
);
1284 if (last_clock
!= 0) {
1285 delta
= ti
- last_clock
;
1286 if (delta
< delta_min
)
1288 if (delta
> delta_max
)
1291 if (++count
== DISP_FREQ
) {
1292 printf("timer: min=%" PRId64
" us max=%" PRId64
" us avg=%" PRId64
" us avg_freq=%0.3f Hz\n",
1293 muldiv64(delta_min
, 1000000, ticks_per_sec
),
1294 muldiv64(delta_max
, 1000000, ticks_per_sec
),
1295 muldiv64(delta_cum
, 1000000 / DISP_FREQ
, ticks_per_sec
),
1296 (double)ticks_per_sec
/ ((double)delta_cum
/ DISP_FREQ
));
1298 delta_min
= INT64_MAX
;
1306 if (alarm_has_dynticks(alarm_timer
) ||
1308 qemu_timer_expired(active_timers
[QEMU_TIMER_VIRTUAL
],
1309 qemu_get_clock(vm_clock
))) ||
1310 qemu_timer_expired(active_timers
[QEMU_TIMER_REALTIME
],
1311 qemu_get_clock(rt_clock
))) {
1313 struct qemu_alarm_win32
*data
= ((struct qemu_alarm_timer
*)dwUser
)->priv
;
1314 SetEvent(data
->host_alarm
);
1316 CPUState
*env
= next_cpu
;
1318 alarm_timer
->flags
|= ALARM_FLAG_EXPIRED
;
1321 /* stop the currently executing cpu because a timer occured */
1322 cpu_interrupt(env
, CPU_INTERRUPT_EXIT
);
1324 if (env
->kqemu_enabled
) {
1325 kqemu_cpu_interrupt(env
);
1333 static int64_t qemu_next_deadline(void)
1337 if (active_timers
[QEMU_TIMER_VIRTUAL
]) {
1338 delta
= active_timers
[QEMU_TIMER_VIRTUAL
]->expire_time
-
1339 qemu_get_clock(vm_clock
);
1341 /* To avoid problems with overflow limit this to 2^32. */
1351 static uint64_t qemu_next_deadline_dyntick(void)
1359 delta
= (qemu_next_deadline() + 999) / 1000;
1361 if (active_timers
[QEMU_TIMER_REALTIME
]) {
1362 rtdelta
= (active_timers
[QEMU_TIMER_REALTIME
]->expire_time
-
1363 qemu_get_clock(rt_clock
))*1000;
1364 if (rtdelta
< delta
)
1368 if (delta
< MIN_TIMER_REARM_US
)
1369 delta
= MIN_TIMER_REARM_US
;
1376 #if defined(__linux__)
1378 #define RTC_FREQ 1024
1380 static void enable_sigio_timer(int fd
)
1382 struct sigaction act
;
1385 sigfillset(&act
.sa_mask
);
1387 act
.sa_handler
= host_alarm_handler
;
1389 sigaction(SIGIO
, &act
, NULL
);
1390 fcntl(fd
, F_SETFL
, O_ASYNC
);
1391 fcntl(fd
, F_SETOWN
, getpid());
1394 static int hpet_start_timer(struct qemu_alarm_timer
*t
)
1396 struct hpet_info info
;
1399 fd
= open("/dev/hpet", O_RDONLY
);
1404 r
= ioctl(fd
, HPET_IRQFREQ
, RTC_FREQ
);
1406 fprintf(stderr
, "Could not configure '/dev/hpet' to have a 1024Hz timer. This is not a fatal\n"
1407 "error, but for better emulation accuracy type:\n"
1408 "'echo 1024 > /proc/sys/dev/hpet/max-user-freq' as root.\n");
1412 /* Check capabilities */
1413 r
= ioctl(fd
, HPET_INFO
, &info
);
1417 /* Enable periodic mode */
1418 r
= ioctl(fd
, HPET_EPI
, 0);
1419 if (info
.hi_flags
&& (r
< 0))
1422 /* Enable interrupt */
1423 r
= ioctl(fd
, HPET_IE_ON
, 0);
1427 enable_sigio_timer(fd
);
1428 t
->priv
= (void *)(long)fd
;
1436 static void hpet_stop_timer(struct qemu_alarm_timer
*t
)
1438 int fd
= (long)t
->priv
;
1443 static int rtc_start_timer(struct qemu_alarm_timer
*t
)
1446 unsigned long current_rtc_freq
= 0;
1448 TFR(rtc_fd
= open("/dev/rtc", O_RDONLY
));
1451 ioctl(rtc_fd
, RTC_IRQP_READ
, ¤t_rtc_freq
);
1452 if (current_rtc_freq
!= RTC_FREQ
&&
1453 ioctl(rtc_fd
, RTC_IRQP_SET
, RTC_FREQ
) < 0) {
1454 fprintf(stderr
, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n"
1455 "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n"
1456 "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n");
1459 if (ioctl(rtc_fd
, RTC_PIE_ON
, 0) < 0) {
1465 enable_sigio_timer(rtc_fd
);
1467 t
->priv
= (void *)(long)rtc_fd
;
1472 static void rtc_stop_timer(struct qemu_alarm_timer
*t
)
1474 int rtc_fd
= (long)t
->priv
;
1479 static int dynticks_start_timer(struct qemu_alarm_timer
*t
)
1483 struct sigaction act
;
1485 sigfillset(&act
.sa_mask
);
1487 act
.sa_handler
= host_alarm_handler
;
1489 sigaction(SIGALRM
, &act
, NULL
);
1491 ev
.sigev_value
.sival_int
= 0;
1492 ev
.sigev_notify
= SIGEV_SIGNAL
;
1493 ev
.sigev_signo
= SIGALRM
;
1495 if (timer_create(CLOCK_REALTIME
, &ev
, &host_timer
)) {
1496 perror("timer_create");
1498 /* disable dynticks */
1499 fprintf(stderr
, "Dynamic Ticks disabled\n");
1504 t
->priv
= (void *)host_timer
;
1509 static void dynticks_stop_timer(struct qemu_alarm_timer
*t
)
1511 timer_t host_timer
= (timer_t
)t
->priv
;
1513 timer_delete(host_timer
);
1516 static void dynticks_rearm_timer(struct qemu_alarm_timer
*t
)
1518 timer_t host_timer
= (timer_t
)t
->priv
;
1519 struct itimerspec timeout
;
1520 int64_t nearest_delta_us
= INT64_MAX
;
1523 if (!active_timers
[QEMU_TIMER_REALTIME
] &&
1524 !active_timers
[QEMU_TIMER_VIRTUAL
])
1527 nearest_delta_us
= qemu_next_deadline_dyntick();
1529 /* check whether a timer is already running */
1530 if (timer_gettime(host_timer
, &timeout
)) {
1532 fprintf(stderr
, "Internal timer error: aborting\n");
1535 current_us
= timeout
.it_value
.tv_sec
* 1000000 + timeout
.it_value
.tv_nsec
/1000;
1536 if (current_us
&& current_us
<= nearest_delta_us
)
1539 timeout
.it_interval
.tv_sec
= 0;
1540 timeout
.it_interval
.tv_nsec
= 0; /* 0 for one-shot timer */
1541 timeout
.it_value
.tv_sec
= nearest_delta_us
/ 1000000;
1542 timeout
.it_value
.tv_nsec
= (nearest_delta_us
% 1000000) * 1000;
1543 if (timer_settime(host_timer
, 0 /* RELATIVE */, &timeout
, NULL
)) {
1545 fprintf(stderr
, "Internal timer error: aborting\n");
1550 #endif /* defined(__linux__) */
1552 static int unix_start_timer(struct qemu_alarm_timer
*t
)
1554 struct sigaction act
;
1555 struct itimerval itv
;
1559 sigfillset(&act
.sa_mask
);
1561 act
.sa_handler
= host_alarm_handler
;
1563 sigaction(SIGALRM
, &act
, NULL
);
1565 itv
.it_interval
.tv_sec
= 0;
1566 /* for i386 kernel 2.6 to get 1 ms */
1567 itv
.it_interval
.tv_usec
= 999;
1568 itv
.it_value
.tv_sec
= 0;
1569 itv
.it_value
.tv_usec
= 10 * 1000;
1571 err
= setitimer(ITIMER_REAL
, &itv
, NULL
);
1578 static void unix_stop_timer(struct qemu_alarm_timer
*t
)
1580 struct itimerval itv
;
1582 memset(&itv
, 0, sizeof(itv
));
1583 setitimer(ITIMER_REAL
, &itv
, NULL
);
1586 #endif /* !defined(_WIN32) */
1590 static int win32_start_timer(struct qemu_alarm_timer
*t
)
1593 struct qemu_alarm_win32
*data
= t
->priv
;
1596 data
->host_alarm
= CreateEvent(NULL
, FALSE
, FALSE
, NULL
);
1597 if (!data
->host_alarm
) {
1598 perror("Failed CreateEvent");
1602 memset(&tc
, 0, sizeof(tc
));
1603 timeGetDevCaps(&tc
, sizeof(tc
));
1605 if (data
->period
< tc
.wPeriodMin
)
1606 data
->period
= tc
.wPeriodMin
;
1608 timeBeginPeriod(data
->period
);
1610 flags
= TIME_CALLBACK_FUNCTION
;
1611 if (alarm_has_dynticks(t
))
1612 flags
|= TIME_ONESHOT
;
1614 flags
|= TIME_PERIODIC
;
1616 data
->timerId
= timeSetEvent(1, // interval (ms)
1617 data
->period
, // resolution
1618 host_alarm_handler
, // function
1619 (DWORD
)t
, // parameter
1622 if (!data
->timerId
) {
1623 perror("Failed to initialize win32 alarm timer");
1625 timeEndPeriod(data
->period
);
1626 CloseHandle(data
->host_alarm
);
1630 qemu_add_wait_object(data
->host_alarm
, NULL
, NULL
);
1635 static void win32_stop_timer(struct qemu_alarm_timer
*t
)
1637 struct qemu_alarm_win32
*data
= t
->priv
;
1639 timeKillEvent(data
->timerId
);
1640 timeEndPeriod(data
->period
);
1642 CloseHandle(data
->host_alarm
);
1645 static void win32_rearm_timer(struct qemu_alarm_timer
*t
)
1647 struct qemu_alarm_win32
*data
= t
->priv
;
1648 uint64_t nearest_delta_us
;
1650 if (!active_timers
[QEMU_TIMER_REALTIME
] &&
1651 !active_timers
[QEMU_TIMER_VIRTUAL
])
1654 nearest_delta_us
= qemu_next_deadline_dyntick();
1655 nearest_delta_us
/= 1000;
1657 timeKillEvent(data
->timerId
);
1659 data
->timerId
= timeSetEvent(1,
1663 TIME_ONESHOT
| TIME_PERIODIC
);
1665 if (!data
->timerId
) {
1666 perror("Failed to re-arm win32 alarm timer");
1668 timeEndPeriod(data
->period
);
1669 CloseHandle(data
->host_alarm
);
1676 static void init_timer_alarm(void)
1678 struct qemu_alarm_timer
*t
;
1681 for (i
= 0; alarm_timers
[i
].name
; i
++) {
1682 t
= &alarm_timers
[i
];
1690 fprintf(stderr
, "Unable to find any suitable alarm timer.\n");
1691 fprintf(stderr
, "Terminating\n");
1698 static void quit_timers(void)
1700 alarm_timer
->stop(alarm_timer
);
1704 /***********************************************************/
1705 /* host time/date access */
1706 void qemu_get_timedate(struct tm
*tm
, int offset
)
1713 if (rtc_date_offset
== -1) {
1717 ret
= localtime(&ti
);
1719 ti
-= rtc_date_offset
;
1723 memcpy(tm
, ret
, sizeof(struct tm
));
1726 int qemu_timedate_diff(struct tm
*tm
)
1730 if (rtc_date_offset
== -1)
1732 seconds
= mktimegm(tm
);
1734 seconds
= mktime(tm
);
1736 seconds
= mktimegm(tm
) + rtc_date_offset
;
1738 return seconds
- time(NULL
);
1741 /***********************************************************/
1742 /* character device */
1744 static void qemu_chr_event(CharDriverState
*s
, int event
)
1748 s
->chr_event(s
->handler_opaque
, event
);
1751 static void qemu_chr_reset_bh(void *opaque
)
1753 CharDriverState
*s
= opaque
;
1754 qemu_chr_event(s
, CHR_EVENT_RESET
);
1755 qemu_bh_delete(s
->bh
);
1759 void qemu_chr_reset(CharDriverState
*s
)
1761 if (s
->bh
== NULL
) {
1762 s
->bh
= qemu_bh_new(qemu_chr_reset_bh
, s
);
1763 qemu_bh_schedule(s
->bh
);
1767 int qemu_chr_write(CharDriverState
*s
, const uint8_t *buf
, int len
)
1769 return s
->chr_write(s
, buf
, len
);
1772 int qemu_chr_ioctl(CharDriverState
*s
, int cmd
, void *arg
)
1776 return s
->chr_ioctl(s
, cmd
, arg
);
1779 int qemu_chr_can_read(CharDriverState
*s
)
1781 if (!s
->chr_can_read
)
1783 return s
->chr_can_read(s
->handler_opaque
);
1786 void qemu_chr_read(CharDriverState
*s
, uint8_t *buf
, int len
)
1788 s
->chr_read(s
->handler_opaque
, buf
, len
);
1791 void qemu_chr_accept_input(CharDriverState
*s
)
1793 if (s
->chr_accept_input
)
1794 s
->chr_accept_input(s
);
1797 void qemu_chr_printf(CharDriverState
*s
, const char *fmt
, ...)
1802 vsnprintf(buf
, sizeof(buf
), fmt
, ap
);
1803 qemu_chr_write(s
, (uint8_t *)buf
, strlen(buf
));
1807 void qemu_chr_send_event(CharDriverState
*s
, int event
)
1809 if (s
->chr_send_event
)
1810 s
->chr_send_event(s
, event
);
1813 void qemu_chr_add_handlers(CharDriverState
*s
,
1814 IOCanRWHandler
*fd_can_read
,
1815 IOReadHandler
*fd_read
,
1816 IOEventHandler
*fd_event
,
1819 s
->chr_can_read
= fd_can_read
;
1820 s
->chr_read
= fd_read
;
1821 s
->chr_event
= fd_event
;
1822 s
->handler_opaque
= opaque
;
1823 if (s
->chr_update_read_handler
)
1824 s
->chr_update_read_handler(s
);
1827 static int null_chr_write(CharDriverState
*chr
, const uint8_t *buf
, int len
)
1832 static CharDriverState
*qemu_chr_open_null(void)
1834 CharDriverState
*chr
;
1836 chr
= qemu_mallocz(sizeof(CharDriverState
));
1839 chr
->chr_write
= null_chr_write
;
1843 /* MUX driver for serial I/O splitting */
1844 static int term_timestamps
;
1845 static int64_t term_timestamps_start
;
1847 #define MUX_BUFFER_SIZE 32 /* Must be a power of 2. */
1848 #define MUX_BUFFER_MASK (MUX_BUFFER_SIZE - 1)
1850 IOCanRWHandler
*chr_can_read
[MAX_MUX
];
1851 IOReadHandler
*chr_read
[MAX_MUX
];
1852 IOEventHandler
*chr_event
[MAX_MUX
];
1853 void *ext_opaque
[MAX_MUX
];
1854 CharDriverState
*drv
;
1855 unsigned char buffer
[MUX_BUFFER_SIZE
];
1859 int term_got_escape
;
1864 static int mux_chr_write(CharDriverState
*chr
, const uint8_t *buf
, int len
)
1866 MuxDriver
*d
= chr
->opaque
;
1868 if (!term_timestamps
) {
1869 ret
= d
->drv
->chr_write(d
->drv
, buf
, len
);
1874 for(i
= 0; i
< len
; i
++) {
1875 ret
+= d
->drv
->chr_write(d
->drv
, buf
+i
, 1);
1876 if (buf
[i
] == '\n') {
1882 if (term_timestamps_start
== -1)
1883 term_timestamps_start
= ti
;
1884 ti
-= term_timestamps_start
;
1885 secs
= ti
/ 1000000000;
1886 snprintf(buf1
, sizeof(buf1
),
1887 "[%02d:%02d:%02d.%03d] ",
1891 (int)((ti
/ 1000000) % 1000));
1892 d
->drv
->chr_write(d
->drv
, (uint8_t *)buf1
, strlen(buf1
));
1899 static char *mux_help
[] = {
1900 "% h print this help\n\r",
1901 "% x exit emulator\n\r",
1902 "% s save disk data back to file (if -snapshot)\n\r",
1903 "% t toggle console timestamps\n\r"
1904 "% b send break (magic sysrq)\n\r",
1905 "% c switch between console and monitor\n\r",
1910 static int term_escape_char
= 0x01; /* ctrl-a is used for escape */
1911 static void mux_print_help(CharDriverState
*chr
)
1914 char ebuf
[15] = "Escape-Char";
1915 char cbuf
[50] = "\n\r";
1917 if (term_escape_char
> 0 && term_escape_char
< 26) {
1918 sprintf(cbuf
,"\n\r");
1919 sprintf(ebuf
,"C-%c", term_escape_char
- 1 + 'a');
1921 sprintf(cbuf
,"\n\rEscape-Char set to Ascii: 0x%02x\n\r\n\r",
1924 chr
->chr_write(chr
, (uint8_t *)cbuf
, strlen(cbuf
));
1925 for (i
= 0; mux_help
[i
] != NULL
; i
++) {
1926 for (j
=0; mux_help
[i
][j
] != '\0'; j
++) {
1927 if (mux_help
[i
][j
] == '%')
1928 chr
->chr_write(chr
, (uint8_t *)ebuf
, strlen(ebuf
));
1930 chr
->chr_write(chr
, (uint8_t *)&mux_help
[i
][j
], 1);
1935 static int mux_proc_byte(CharDriverState
*chr
, MuxDriver
*d
, int ch
)
1937 if (d
->term_got_escape
) {
1938 d
->term_got_escape
= 0;
1939 if (ch
== term_escape_char
)
1944 mux_print_help(chr
);
1948 char *term
= "QEMU: Terminated\n\r";
1949 chr
->chr_write(chr
,(uint8_t *)term
,strlen(term
));
1956 for (i
= 0; i
< nb_drives
; i
++) {
1957 bdrv_commit(drives_table
[i
].bdrv
);
1962 qemu_chr_event(chr
, CHR_EVENT_BREAK
);
1965 /* Switch to the next registered device */
1967 if (chr
->focus
>= d
->mux_cnt
)
1971 term_timestamps
= !term_timestamps
;
1972 term_timestamps_start
= -1;
1975 } else if (ch
== term_escape_char
) {
1976 d
->term_got_escape
= 1;
1984 static void mux_chr_accept_input(CharDriverState
*chr
)
1987 MuxDriver
*d
= chr
->opaque
;
1989 while (d
->prod
!= d
->cons
&&
1990 d
->chr_can_read
[m
] &&
1991 d
->chr_can_read
[m
](d
->ext_opaque
[m
])) {
1992 d
->chr_read
[m
](d
->ext_opaque
[m
],
1993 &d
->buffer
[d
->cons
++ & MUX_BUFFER_MASK
], 1);
1997 static int mux_chr_can_read(void *opaque
)
1999 CharDriverState
*chr
= opaque
;
2000 MuxDriver
*d
= chr
->opaque
;
2002 if ((d
->prod
- d
->cons
) < MUX_BUFFER_SIZE
)
2004 if (d
->chr_can_read
[chr
->focus
])
2005 return d
->chr_can_read
[chr
->focus
](d
->ext_opaque
[chr
->focus
]);
2009 static void mux_chr_read(void *opaque
, const uint8_t *buf
, int size
)
2011 CharDriverState
*chr
= opaque
;
2012 MuxDriver
*d
= chr
->opaque
;
2016 mux_chr_accept_input (opaque
);
2018 for(i
= 0; i
< size
; i
++)
2019 if (mux_proc_byte(chr
, d
, buf
[i
])) {
2020 if (d
->prod
== d
->cons
&&
2021 d
->chr_can_read
[m
] &&
2022 d
->chr_can_read
[m
](d
->ext_opaque
[m
]))
2023 d
->chr_read
[m
](d
->ext_opaque
[m
], &buf
[i
], 1);
2025 d
->buffer
[d
->prod
++ & MUX_BUFFER_MASK
] = buf
[i
];
2029 static void mux_chr_event(void *opaque
, int event
)
2031 CharDriverState
*chr
= opaque
;
2032 MuxDriver
*d
= chr
->opaque
;
2035 /* Send the event to all registered listeners */
2036 for (i
= 0; i
< d
->mux_cnt
; i
++)
2037 if (d
->chr_event
[i
])
2038 d
->chr_event
[i
](d
->ext_opaque
[i
], event
);
2041 static void mux_chr_update_read_handler(CharDriverState
*chr
)
2043 MuxDriver
*d
= chr
->opaque
;
2045 if (d
->mux_cnt
>= MAX_MUX
) {
2046 fprintf(stderr
, "Cannot add I/O handlers, MUX array is full\n");
2049 d
->ext_opaque
[d
->mux_cnt
] = chr
->handler_opaque
;
2050 d
->chr_can_read
[d
->mux_cnt
] = chr
->chr_can_read
;
2051 d
->chr_read
[d
->mux_cnt
] = chr
->chr_read
;
2052 d
->chr_event
[d
->mux_cnt
] = chr
->chr_event
;
2053 /* Fix up the real driver with mux routines */
2054 if (d
->mux_cnt
== 0) {
2055 qemu_chr_add_handlers(d
->drv
, mux_chr_can_read
, mux_chr_read
,
2056 mux_chr_event
, chr
);
2058 chr
->focus
= d
->mux_cnt
;
2062 static CharDriverState
*qemu_chr_open_mux(CharDriverState
*drv
)
2064 CharDriverState
*chr
;
2067 chr
= qemu_mallocz(sizeof(CharDriverState
));
2070 d
= qemu_mallocz(sizeof(MuxDriver
));
2079 chr
->chr_write
= mux_chr_write
;
2080 chr
->chr_update_read_handler
= mux_chr_update_read_handler
;
2081 chr
->chr_accept_input
= mux_chr_accept_input
;
2088 static void socket_cleanup(void)
2093 static int socket_init(void)
2098 ret
= WSAStartup(MAKEWORD(2,2), &Data
);
2100 err
= WSAGetLastError();
2101 fprintf(stderr
, "WSAStartup: %d\n", err
);
2104 atexit(socket_cleanup
);
2108 static int send_all(int fd
, const uint8_t *buf
, int len1
)
2114 ret
= send(fd
, buf
, len
, 0);
2117 errno
= WSAGetLastError();
2118 if (errno
!= WSAEWOULDBLOCK
) {
2121 } else if (ret
== 0) {
2131 void socket_set_nonblock(int fd
)
2133 unsigned long opt
= 1;
2134 ioctlsocket(fd
, FIONBIO
, &opt
);
2139 static int unix_write(int fd
, const uint8_t *buf
, int len1
)
2145 ret
= write(fd
, buf
, len
);
2147 if (errno
!= EINTR
&& errno
!= EAGAIN
)
2149 } else if (ret
== 0) {
2159 static inline int send_all(int fd
, const uint8_t *buf
, int len1
)
2161 return unix_write(fd
, buf
, len1
);
2164 void socket_set_nonblock(int fd
)
2167 f
= fcntl(fd
, F_GETFL
);
2168 fcntl(fd
, F_SETFL
, f
| O_NONBLOCK
);
2170 #endif /* !_WIN32 */
2179 #define STDIO_MAX_CLIENTS 1
2180 static int stdio_nb_clients
= 0;
2182 static int fd_chr_write(CharDriverState
*chr
, const uint8_t *buf
, int len
)
2184 FDCharDriver
*s
= chr
->opaque
;
2185 return unix_write(s
->fd_out
, buf
, len
);
2188 static int fd_chr_read_poll(void *opaque
)
2190 CharDriverState
*chr
= opaque
;
2191 FDCharDriver
*s
= chr
->opaque
;
2193 s
->max_size
= qemu_chr_can_read(chr
);
2197 static void fd_chr_read(void *opaque
)
2199 CharDriverState
*chr
= opaque
;
2200 FDCharDriver
*s
= chr
->opaque
;
2205 if (len
> s
->max_size
)
2209 size
= read(s
->fd_in
, buf
, len
);
2211 /* FD has been closed. Remove it from the active list. */
2212 qemu_set_fd_handler2(s
->fd_in
, NULL
, NULL
, NULL
, NULL
);
2216 qemu_chr_read(chr
, buf
, size
);
2220 static void fd_chr_update_read_handler(CharDriverState
*chr
)
2222 FDCharDriver
*s
= chr
->opaque
;
2224 if (s
->fd_in
>= 0) {
2225 if (nographic
&& s
->fd_in
== 0) {
2227 qemu_set_fd_handler2(s
->fd_in
, fd_chr_read_poll
,
2228 fd_chr_read
, NULL
, chr
);
2233 static void fd_chr_close(struct CharDriverState
*chr
)
2235 FDCharDriver
*s
= chr
->opaque
;
2237 if (s
->fd_in
>= 0) {
2238 if (nographic
&& s
->fd_in
== 0) {
2240 qemu_set_fd_handler2(s
->fd_in
, NULL
, NULL
, NULL
, NULL
);
2247 /* open a character device to a unix fd */
2248 static CharDriverState
*qemu_chr_open_fd(int fd_in
, int fd_out
)
2250 CharDriverState
*chr
;
2253 chr
= qemu_mallocz(sizeof(CharDriverState
));
2256 s
= qemu_mallocz(sizeof(FDCharDriver
));
2264 chr
->chr_write
= fd_chr_write
;
2265 chr
->chr_update_read_handler
= fd_chr_update_read_handler
;
2266 chr
->chr_close
= fd_chr_close
;
2268 qemu_chr_reset(chr
);
2273 static CharDriverState
*qemu_chr_open_file_out(const char *file_out
)
2277 TFR(fd_out
= open(file_out
, O_WRONLY
| O_TRUNC
| O_CREAT
| O_BINARY
, 0666));
2280 return qemu_chr_open_fd(-1, fd_out
);
2283 static CharDriverState
*qemu_chr_open_pipe(const char *filename
)
2286 char filename_in
[256], filename_out
[256];
2288 snprintf(filename_in
, 256, "%s.in", filename
);
2289 snprintf(filename_out
, 256, "%s.out", filename
);
2290 TFR(fd_in
= open(filename_in
, O_RDWR
| O_BINARY
));
2291 TFR(fd_out
= open(filename_out
, O_RDWR
| O_BINARY
));
2292 if (fd_in
< 0 || fd_out
< 0) {
2297 TFR(fd_in
= fd_out
= open(filename
, O_RDWR
| O_BINARY
));
2301 return qemu_chr_open_fd(fd_in
, fd_out
);
2305 /* for STDIO, we handle the case where several clients use it
2308 #define TERM_FIFO_MAX_SIZE 1
2310 static uint8_t term_fifo
[TERM_FIFO_MAX_SIZE
];
2311 static int term_fifo_size
;
2313 static int stdio_read_poll(void *opaque
)
2315 CharDriverState
*chr
= opaque
;
2317 /* try to flush the queue if needed */
2318 if (term_fifo_size
!= 0 && qemu_chr_can_read(chr
) > 0) {
2319 qemu_chr_read(chr
, term_fifo
, 1);
2322 /* see if we can absorb more chars */
2323 if (term_fifo_size
== 0)
2329 static void stdio_read(void *opaque
)
2333 CharDriverState
*chr
= opaque
;
2335 size
= read(0, buf
, 1);
2337 /* stdin has been closed. Remove it from the active list. */
2338 qemu_set_fd_handler2(0, NULL
, NULL
, NULL
, NULL
);
2342 if (qemu_chr_can_read(chr
) > 0) {
2343 qemu_chr_read(chr
, buf
, 1);
2344 } else if (term_fifo_size
== 0) {
2345 term_fifo
[term_fifo_size
++] = buf
[0];
2350 /* init terminal so that we can grab keys */
2351 static struct termios oldtty
;
2352 static int old_fd0_flags
;
2353 static int term_atexit_done
;
2355 static void term_exit(void)
2357 tcsetattr (0, TCSANOW
, &oldtty
);
2358 fcntl(0, F_SETFL
, old_fd0_flags
);
2361 static void term_init(void)
2365 tcgetattr (0, &tty
);
2367 old_fd0_flags
= fcntl(0, F_GETFL
);
2369 tty
.c_iflag
&= ~(IGNBRK
|BRKINT
|PARMRK
|ISTRIP
2370 |INLCR
|IGNCR
|ICRNL
|IXON
);
2371 tty
.c_oflag
|= OPOST
;
2372 tty
.c_lflag
&= ~(ECHO
|ECHONL
|ICANON
|IEXTEN
);
2373 /* if graphical mode, we allow Ctrl-C handling */
2375 tty
.c_lflag
&= ~ISIG
;
2376 tty
.c_cflag
&= ~(CSIZE
|PARENB
);
2379 tty
.c_cc
[VTIME
] = 0;
2381 tcsetattr (0, TCSANOW
, &tty
);
2383 if (!term_atexit_done
++)
2386 fcntl(0, F_SETFL
, O_NONBLOCK
);
2389 static void qemu_chr_close_stdio(struct CharDriverState
*chr
)
2393 qemu_set_fd_handler2(0, NULL
, NULL
, NULL
, NULL
);
2397 static CharDriverState
*qemu_chr_open_stdio(void)
2399 CharDriverState
*chr
;
2401 if (stdio_nb_clients
>= STDIO_MAX_CLIENTS
)
2403 chr
= qemu_chr_open_fd(0, 1);
2404 chr
->chr_close
= qemu_chr_close_stdio
;
2405 qemu_set_fd_handler2(0, stdio_read_poll
, stdio_read
, NULL
, chr
);
2413 /* Once Solaris has openpty(), this is going to be removed. */
2414 int openpty(int *amaster
, int *aslave
, char *name
,
2415 struct termios
*termp
, struct winsize
*winp
)
2418 int mfd
= -1, sfd
= -1;
2420 *amaster
= *aslave
= -1;
2422 mfd
= open("/dev/ptmx", O_RDWR
| O_NOCTTY
);
2426 if (grantpt(mfd
) == -1 || unlockpt(mfd
) == -1)
2429 if ((slave
= ptsname(mfd
)) == NULL
)
2432 if ((sfd
= open(slave
, O_RDONLY
| O_NOCTTY
)) == -1)
2435 if (ioctl(sfd
, I_PUSH
, "ptem") == -1 ||
2436 (termp
!= NULL
&& tcgetattr(sfd
, termp
) < 0))
2444 ioctl(sfd
, TIOCSWINSZ
, winp
);
2455 void cfmakeraw (struct termios
*termios_p
)
2457 termios_p
->c_iflag
&=
2458 ~(IGNBRK
|BRKINT
|PARMRK
|ISTRIP
|INLCR
|IGNCR
|ICRNL
|IXON
);
2459 termios_p
->c_oflag
&= ~OPOST
;
2460 termios_p
->c_lflag
&= ~(ECHO
|ECHONL
|ICANON
|ISIG
|IEXTEN
);
2461 termios_p
->c_cflag
&= ~(CSIZE
|PARENB
);
2462 termios_p
->c_cflag
|= CS8
;
2464 termios_p
->c_cc
[VMIN
] = 0;
2465 termios_p
->c_cc
[VTIME
] = 0;
2469 #if defined(__linux__) || defined(__sun__)
2479 static void pty_chr_update_read_handler(CharDriverState
*chr
);
2480 static void pty_chr_state(CharDriverState
*chr
, int connected
);
2482 static int pty_chr_write(CharDriverState
*chr
, const uint8_t *buf
, int len
)
2484 PtyCharDriver
*s
= chr
->opaque
;
2486 if (!s
->connected
) {
2487 /* guest sends data, check for (re-)connect */
2488 pty_chr_update_read_handler(chr
);
2491 return unix_write(s
->fd
, buf
, len
);
2494 static int pty_chr_read_poll(void *opaque
)
2496 CharDriverState
*chr
= opaque
;
2497 PtyCharDriver
*s
= chr
->opaque
;
2499 s
->read_bytes
= qemu_chr_can_read(chr
);
2500 return s
->read_bytes
;
2503 static void pty_chr_read(void *opaque
)
2505 CharDriverState
*chr
= opaque
;
2506 PtyCharDriver
*s
= chr
->opaque
;
2511 if (len
> s
->read_bytes
)
2512 len
= s
->read_bytes
;
2515 size
= read(s
->fd
, buf
, len
);
2516 if ((size
== -1 && errno
== EIO
) ||
2518 pty_chr_state(chr
, 0);
2522 pty_chr_state(chr
, 1);
2523 qemu_chr_read(chr
, buf
, size
);
2527 static void pty_chr_update_read_handler(CharDriverState
*chr
)
2529 PtyCharDriver
*s
= chr
->opaque
;
2531 qemu_set_fd_handler2(s
->fd
, pty_chr_read_poll
,
2532 pty_chr_read
, NULL
, chr
);
2535 * Short timeout here: just need wait long enougth that qemu makes
2536 * it through the poll loop once. When reconnected we want a
2537 * short timeout so we notice it almost instantly. Otherwise
2538 * read() gives us -EIO instantly, making pty_chr_state() reset the
2539 * timeout to the normal (much longer) poll interval before the
2542 qemu_mod_timer(s
->timer
, qemu_get_clock(rt_clock
) + 10);
2545 static void pty_chr_state(CharDriverState
*chr
, int connected
)
2547 PtyCharDriver
*s
= chr
->opaque
;
2550 qemu_set_fd_handler2(s
->fd
, NULL
, NULL
, NULL
, NULL
);
2553 /* (re-)connect poll interval for idle guests: once per second.
2554 * We check more frequently in case the guests sends data to
2555 * the virtual device linked to our pty. */
2556 qemu_mod_timer(s
->timer
, qemu_get_clock(rt_clock
) + 1000);
2559 qemu_chr_reset(chr
);
2564 static void pty_chr_timer(void *opaque
)
2566 struct CharDriverState
*chr
= opaque
;
2567 PtyCharDriver
*s
= chr
->opaque
;
2572 /* If we arrive here without polling being cleared due
2573 * read returning -EIO, then we are (re-)connected */
2574 pty_chr_state(chr
, 1);
2579 pty_chr_update_read_handler(chr
);
2582 static void pty_chr_close(struct CharDriverState
*chr
)
2584 PtyCharDriver
*s
= chr
->opaque
;
2586 qemu_set_fd_handler2(s
->fd
, NULL
, NULL
, NULL
, NULL
);
2591 static CharDriverState
*qemu_chr_open_pty(void)
2593 CharDriverState
*chr
;
2598 chr
= qemu_mallocz(sizeof(CharDriverState
));
2601 s
= qemu_mallocz(sizeof(PtyCharDriver
));
2607 if (openpty(&s
->fd
, &slave_fd
, NULL
, NULL
, NULL
) < 0) {
2611 /* Set raw attributes on the pty. */
2613 tcsetattr(slave_fd
, TCSAFLUSH
, &tty
);
2616 fprintf(stderr
, "char device redirected to %s\n", ptsname(s
->fd
));
2619 chr
->chr_write
= pty_chr_write
;
2620 chr
->chr_update_read_handler
= pty_chr_update_read_handler
;
2621 chr
->chr_close
= pty_chr_close
;
2623 s
->timer
= qemu_new_timer(rt_clock
, pty_chr_timer
, chr
);
2628 static void tty_serial_init(int fd
, int speed
,
2629 int parity
, int data_bits
, int stop_bits
)
2635 printf("tty_serial_init: speed=%d parity=%c data=%d stop=%d\n",
2636 speed
, parity
, data_bits
, stop_bits
);
2638 tcgetattr (fd
, &tty
);
2641 if (speed
<= 50 * MARGIN
)
2643 else if (speed
<= 75 * MARGIN
)
2645 else if (speed
<= 300 * MARGIN
)
2647 else if (speed
<= 600 * MARGIN
)
2649 else if (speed
<= 1200 * MARGIN
)
2651 else if (speed
<= 2400 * MARGIN
)
2653 else if (speed
<= 4800 * MARGIN
)
2655 else if (speed
<= 9600 * MARGIN
)
2657 else if (speed
<= 19200 * MARGIN
)
2659 else if (speed
<= 38400 * MARGIN
)
2661 else if (speed
<= 57600 * MARGIN
)
2663 else if (speed
<= 115200 * MARGIN
)
2668 cfsetispeed(&tty
, spd
);
2669 cfsetospeed(&tty
, spd
);
2671 tty
.c_iflag
&= ~(IGNBRK
|BRKINT
|PARMRK
|ISTRIP
2672 |INLCR
|IGNCR
|ICRNL
|IXON
);
2673 tty
.c_oflag
|= OPOST
;
2674 tty
.c_lflag
&= ~(ECHO
|ECHONL
|ICANON
|IEXTEN
|ISIG
);
2675 tty
.c_cflag
&= ~(CSIZE
|PARENB
|PARODD
|CRTSCTS
|CSTOPB
);
2696 tty
.c_cflag
|= PARENB
;
2699 tty
.c_cflag
|= PARENB
| PARODD
;
2703 tty
.c_cflag
|= CSTOPB
;
2705 tcsetattr (fd
, TCSANOW
, &tty
);
2708 static int tty_serial_ioctl(CharDriverState
*chr
, int cmd
, void *arg
)
2710 FDCharDriver
*s
= chr
->opaque
;
2713 case CHR_IOCTL_SERIAL_SET_PARAMS
:
2715 QEMUSerialSetParams
*ssp
= arg
;
2716 tty_serial_init(s
->fd_in
, ssp
->speed
, ssp
->parity
,
2717 ssp
->data_bits
, ssp
->stop_bits
);
2720 case CHR_IOCTL_SERIAL_SET_BREAK
:
2722 int enable
= *(int *)arg
;
2724 tcsendbreak(s
->fd_in
, 1);
2727 case CHR_IOCTL_SERIAL_GET_TIOCM
:
2730 int *targ
= (int *)arg
;
2731 ioctl(s
->fd_in
, TIOCMGET
, &sarg
);
2733 if (sarg
| TIOCM_CTS
)
2734 *targ
|= CHR_TIOCM_CTS
;
2735 if (sarg
| TIOCM_CAR
)
2736 *targ
|= CHR_TIOCM_CAR
;
2737 if (sarg
| TIOCM_DSR
)
2738 *targ
|= CHR_TIOCM_DSR
;
2739 if (sarg
| TIOCM_RI
)
2740 *targ
|= CHR_TIOCM_RI
;
2741 if (sarg
| TIOCM_DTR
)
2742 *targ
|= CHR_TIOCM_DTR
;
2743 if (sarg
| TIOCM_RTS
)
2744 *targ
|= CHR_TIOCM_RTS
;
2747 case CHR_IOCTL_SERIAL_SET_TIOCM
:
2749 int sarg
= *(int *)arg
;
2751 if (sarg
| CHR_TIOCM_DTR
)
2753 if (sarg
| CHR_TIOCM_RTS
)
2755 ioctl(s
->fd_in
, TIOCMSET
, &targ
);
2764 static CharDriverState
*qemu_chr_open_tty(const char *filename
)
2766 CharDriverState
*chr
;
2769 TFR(fd
= open(filename
, O_RDWR
| O_NONBLOCK
));
2770 tty_serial_init(fd
, 115200, 'N', 8, 1);
2771 chr
= qemu_chr_open_fd(fd
, fd
);
2776 chr
->chr_ioctl
= tty_serial_ioctl
;
2777 qemu_chr_reset(chr
);
2780 #else /* ! __linux__ && ! __sun__ */
2781 static CharDriverState
*qemu_chr_open_pty(void)
2785 #endif /* __linux__ || __sun__ */
2787 #if defined(__linux__)
2791 } ParallelCharDriver
;
2793 static int pp_hw_mode(ParallelCharDriver
*s
, uint16_t mode
)
2795 if (s
->mode
!= mode
) {
2797 if (ioctl(s
->fd
, PPSETMODE
, &m
) < 0)
2804 static int pp_ioctl(CharDriverState
*chr
, int cmd
, void *arg
)
2806 ParallelCharDriver
*drv
= chr
->opaque
;
2811 case CHR_IOCTL_PP_READ_DATA
:
2812 if (ioctl(fd
, PPRDATA
, &b
) < 0)
2814 *(uint8_t *)arg
= b
;
2816 case CHR_IOCTL_PP_WRITE_DATA
:
2817 b
= *(uint8_t *)arg
;
2818 if (ioctl(fd
, PPWDATA
, &b
) < 0)
2821 case CHR_IOCTL_PP_READ_CONTROL
:
2822 if (ioctl(fd
, PPRCONTROL
, &b
) < 0)
2824 /* Linux gives only the lowest bits, and no way to know data
2825 direction! For better compatibility set the fixed upper
2827 *(uint8_t *)arg
= b
| 0xc0;
2829 case CHR_IOCTL_PP_WRITE_CONTROL
:
2830 b
= *(uint8_t *)arg
;
2831 if (ioctl(fd
, PPWCONTROL
, &b
) < 0)
2834 case CHR_IOCTL_PP_READ_STATUS
:
2835 if (ioctl(fd
, PPRSTATUS
, &b
) < 0)
2837 *(uint8_t *)arg
= b
;
2839 case CHR_IOCTL_PP_EPP_READ_ADDR
:
2840 if (pp_hw_mode(drv
, IEEE1284_MODE_EPP
|IEEE1284_ADDR
)) {
2841 struct ParallelIOArg
*parg
= arg
;
2842 int n
= read(fd
, parg
->buffer
, parg
->count
);
2843 if (n
!= parg
->count
) {
2848 case CHR_IOCTL_PP_EPP_READ
:
2849 if (pp_hw_mode(drv
, IEEE1284_MODE_EPP
)) {
2850 struct ParallelIOArg
*parg
= arg
;
2851 int n
= read(fd
, parg
->buffer
, parg
->count
);
2852 if (n
!= parg
->count
) {
2857 case CHR_IOCTL_PP_EPP_WRITE_ADDR
:
2858 if (pp_hw_mode(drv
, IEEE1284_MODE_EPP
|IEEE1284_ADDR
)) {
2859 struct ParallelIOArg
*parg
= arg
;
2860 int n
= write(fd
, parg
->buffer
, parg
->count
);
2861 if (n
!= parg
->count
) {
2866 case CHR_IOCTL_PP_EPP_WRITE
:
2867 if (pp_hw_mode(drv
, IEEE1284_MODE_EPP
)) {
2868 struct ParallelIOArg
*parg
= arg
;
2869 int n
= write(fd
, parg
->buffer
, parg
->count
);
2870 if (n
!= parg
->count
) {
2881 static void pp_close(CharDriverState
*chr
)
2883 ParallelCharDriver
*drv
= chr
->opaque
;
2886 pp_hw_mode(drv
, IEEE1284_MODE_COMPAT
);
2887 ioctl(fd
, PPRELEASE
);
2892 static CharDriverState
*qemu_chr_open_pp(const char *filename
)
2894 CharDriverState
*chr
;
2895 ParallelCharDriver
*drv
;
2898 TFR(fd
= open(filename
, O_RDWR
));
2902 if (ioctl(fd
, PPCLAIM
) < 0) {
2907 drv
= qemu_mallocz(sizeof(ParallelCharDriver
));
2913 drv
->mode
= IEEE1284_MODE_COMPAT
;
2915 chr
= qemu_mallocz(sizeof(CharDriverState
));
2921 chr
->chr_write
= null_chr_write
;
2922 chr
->chr_ioctl
= pp_ioctl
;
2923 chr
->chr_close
= pp_close
;
2926 qemu_chr_reset(chr
);
2930 #endif /* __linux__ */
2936 HANDLE hcom
, hrecv
, hsend
;
2937 OVERLAPPED orecv
, osend
;
2942 #define NSENDBUF 2048
2943 #define NRECVBUF 2048
2944 #define MAXCONNECT 1
2945 #define NTIMEOUT 5000
2947 static int win_chr_poll(void *opaque
);
2948 static int win_chr_pipe_poll(void *opaque
);
2950 static void win_chr_close(CharDriverState
*chr
)
2952 WinCharState
*s
= chr
->opaque
;
2955 CloseHandle(s
->hsend
);
2959 CloseHandle(s
->hrecv
);
2963 CloseHandle(s
->hcom
);
2967 qemu_del_polling_cb(win_chr_pipe_poll
, chr
);
2969 qemu_del_polling_cb(win_chr_poll
, chr
);
2972 static int win_chr_init(CharDriverState
*chr
, const char *filename
)
2974 WinCharState
*s
= chr
->opaque
;
2976 COMMTIMEOUTS cto
= { 0, 0, 0, 0, 0};
2981 s
->hsend
= CreateEvent(NULL
, TRUE
, FALSE
, NULL
);
2983 fprintf(stderr
, "Failed CreateEvent\n");
2986 s
->hrecv
= CreateEvent(NULL
, TRUE
, FALSE
, NULL
);
2988 fprintf(stderr
, "Failed CreateEvent\n");
2992 s
->hcom
= CreateFile(filename
, GENERIC_READ
|GENERIC_WRITE
, 0, NULL
,
2993 OPEN_EXISTING
, FILE_FLAG_OVERLAPPED
, 0);
2994 if (s
->hcom
== INVALID_HANDLE_VALUE
) {
2995 fprintf(stderr
, "Failed CreateFile (%lu)\n", GetLastError());
3000 if (!SetupComm(s
->hcom
, NRECVBUF
, NSENDBUF
)) {
3001 fprintf(stderr
, "Failed SetupComm\n");
3005 ZeroMemory(&comcfg
, sizeof(COMMCONFIG
));
3006 size
= sizeof(COMMCONFIG
);
3007 GetDefaultCommConfig(filename
, &comcfg
, &size
);
3008 comcfg
.dcb
.DCBlength
= sizeof(DCB
);
3009 CommConfigDialog(filename
, NULL
, &comcfg
);
3011 if (!SetCommState(s
->hcom
, &comcfg
.dcb
)) {
3012 fprintf(stderr
, "Failed SetCommState\n");
3016 if (!SetCommMask(s
->hcom
, EV_ERR
)) {
3017 fprintf(stderr
, "Failed SetCommMask\n");
3021 cto
.ReadIntervalTimeout
= MAXDWORD
;
3022 if (!SetCommTimeouts(s
->hcom
, &cto
)) {
3023 fprintf(stderr
, "Failed SetCommTimeouts\n");
3027 if (!ClearCommError(s
->hcom
, &err
, &comstat
)) {
3028 fprintf(stderr
, "Failed ClearCommError\n");
3031 qemu_add_polling_cb(win_chr_poll
, chr
);
3039 static int win_chr_write(CharDriverState
*chr
, const uint8_t *buf
, int len1
)
3041 WinCharState
*s
= chr
->opaque
;
3042 DWORD len
, ret
, size
, err
;
3045 ZeroMemory(&s
->osend
, sizeof(s
->osend
));
3046 s
->osend
.hEvent
= s
->hsend
;
3049 ret
= WriteFile(s
->hcom
, buf
, len
, &size
, &s
->osend
);
3051 ret
= WriteFile(s
->hcom
, buf
, len
, &size
, NULL
);
3053 err
= GetLastError();
3054 if (err
== ERROR_IO_PENDING
) {
3055 ret
= GetOverlappedResult(s
->hcom
, &s
->osend
, &size
, TRUE
);
3073 static int win_chr_read_poll(CharDriverState
*chr
)
3075 WinCharState
*s
= chr
->opaque
;
3077 s
->max_size
= qemu_chr_can_read(chr
);
3081 static void win_chr_readfile(CharDriverState
*chr
)
3083 WinCharState
*s
= chr
->opaque
;
3088 ZeroMemory(&s
->orecv
, sizeof(s
->orecv
));
3089 s
->orecv
.hEvent
= s
->hrecv
;
3090 ret
= ReadFile(s
->hcom
, buf
, s
->len
, &size
, &s
->orecv
);
3092 err
= GetLastError();
3093 if (err
== ERROR_IO_PENDING
) {
3094 ret
= GetOverlappedResult(s
->hcom
, &s
->orecv
, &size
, TRUE
);
3099 qemu_chr_read(chr
, buf
, size
);
3103 static void win_chr_read(CharDriverState
*chr
)
3105 WinCharState
*s
= chr
->opaque
;
3107 if (s
->len
> s
->max_size
)
3108 s
->len
= s
->max_size
;
3112 win_chr_readfile(chr
);
3115 static int win_chr_poll(void *opaque
)
3117 CharDriverState
*chr
= opaque
;
3118 WinCharState
*s
= chr
->opaque
;
3122 ClearCommError(s
->hcom
, &comerr
, &status
);
3123 if (status
.cbInQue
> 0) {
3124 s
->len
= status
.cbInQue
;
3125 win_chr_read_poll(chr
);
3132 static CharDriverState
*qemu_chr_open_win(const char *filename
)
3134 CharDriverState
*chr
;
3137 chr
= qemu_mallocz(sizeof(CharDriverState
));
3140 s
= qemu_mallocz(sizeof(WinCharState
));
3146 chr
->chr_write
= win_chr_write
;
3147 chr
->chr_close
= win_chr_close
;
3149 if (win_chr_init(chr
, filename
) < 0) {
3154 qemu_chr_reset(chr
);
3158 static int win_chr_pipe_poll(void *opaque
)
3160 CharDriverState
*chr
= opaque
;
3161 WinCharState
*s
= chr
->opaque
;
3164 PeekNamedPipe(s
->hcom
, NULL
, 0, NULL
, &size
, NULL
);
3167 win_chr_read_poll(chr
);
3174 static int win_chr_pipe_init(CharDriverState
*chr
, const char *filename
)
3176 WinCharState
*s
= chr
->opaque
;
3184 s
->hsend
= CreateEvent(NULL
, TRUE
, FALSE
, NULL
);
3186 fprintf(stderr
, "Failed CreateEvent\n");
3189 s
->hrecv
= CreateEvent(NULL
, TRUE
, FALSE
, NULL
);
3191 fprintf(stderr
, "Failed CreateEvent\n");
3195 snprintf(openname
, sizeof(openname
), "\\\\.\\pipe\\%s", filename
);
3196 s
->hcom
= CreateNamedPipe(openname
, PIPE_ACCESS_DUPLEX
| FILE_FLAG_OVERLAPPED
,
3197 PIPE_TYPE_BYTE
| PIPE_READMODE_BYTE
|
3199 MAXCONNECT
, NSENDBUF
, NRECVBUF
, NTIMEOUT
, NULL
);
3200 if (s
->hcom
== INVALID_HANDLE_VALUE
) {
3201 fprintf(stderr
, "Failed CreateNamedPipe (%lu)\n", GetLastError());
3206 ZeroMemory(&ov
, sizeof(ov
));
3207 ov
.hEvent
= CreateEvent(NULL
, TRUE
, FALSE
, NULL
);
3208 ret
= ConnectNamedPipe(s
->hcom
, &ov
);
3210 fprintf(stderr
, "Failed ConnectNamedPipe\n");
3214 ret
= GetOverlappedResult(s
->hcom
, &ov
, &size
, TRUE
);
3216 fprintf(stderr
, "Failed GetOverlappedResult\n");
3218 CloseHandle(ov
.hEvent
);
3225 CloseHandle(ov
.hEvent
);
3228 qemu_add_polling_cb(win_chr_pipe_poll
, chr
);
3237 static CharDriverState
*qemu_chr_open_win_pipe(const char *filename
)
3239 CharDriverState
*chr
;
3242 chr
= qemu_mallocz(sizeof(CharDriverState
));
3245 s
= qemu_mallocz(sizeof(WinCharState
));
3251 chr
->chr_write
= win_chr_write
;
3252 chr
->chr_close
= win_chr_close
;
3254 if (win_chr_pipe_init(chr
, filename
) < 0) {
3259 qemu_chr_reset(chr
);
3263 static CharDriverState
*qemu_chr_open_win_file(HANDLE fd_out
)
3265 CharDriverState
*chr
;
3268 chr
= qemu_mallocz(sizeof(CharDriverState
));
3271 s
= qemu_mallocz(sizeof(WinCharState
));
3278 chr
->chr_write
= win_chr_write
;
3279 qemu_chr_reset(chr
);
3283 static CharDriverState
*qemu_chr_open_win_con(const char *filename
)
3285 return qemu_chr_open_win_file(GetStdHandle(STD_OUTPUT_HANDLE
));
3288 static CharDriverState
*qemu_chr_open_win_file_out(const char *file_out
)
3292 fd_out
= CreateFile(file_out
, GENERIC_WRITE
, FILE_SHARE_READ
, NULL
,
3293 OPEN_ALWAYS
, FILE_ATTRIBUTE_NORMAL
, NULL
);
3294 if (fd_out
== INVALID_HANDLE_VALUE
)
3297 return qemu_chr_open_win_file(fd_out
);
3299 #endif /* !_WIN32 */
3301 /***********************************************************/
3302 /* UDP Net console */
3306 struct sockaddr_in daddr
;
3313 static int udp_chr_write(CharDriverState
*chr
, const uint8_t *buf
, int len
)
3315 NetCharDriver
*s
= chr
->opaque
;
3317 return sendto(s
->fd
, buf
, len
, 0,
3318 (struct sockaddr
*)&s
->daddr
, sizeof(struct sockaddr_in
));
3321 static int udp_chr_read_poll(void *opaque
)
3323 CharDriverState
*chr
= opaque
;
3324 NetCharDriver
*s
= chr
->opaque
;
3326 s
->max_size
= qemu_chr_can_read(chr
);
3328 /* If there were any stray characters in the queue process them
3331 while (s
->max_size
> 0 && s
->bufptr
< s
->bufcnt
) {
3332 qemu_chr_read(chr
, &s
->buf
[s
->bufptr
], 1);
3334 s
->max_size
= qemu_chr_can_read(chr
);
3339 static void udp_chr_read(void *opaque
)
3341 CharDriverState
*chr
= opaque
;
3342 NetCharDriver
*s
= chr
->opaque
;
3344 if (s
->max_size
== 0)
3346 s
->bufcnt
= recv(s
->fd
, s
->buf
, sizeof(s
->buf
), 0);
3347 s
->bufptr
= s
->bufcnt
;
3352 while (s
->max_size
> 0 && s
->bufptr
< s
->bufcnt
) {
3353 qemu_chr_read(chr
, &s
->buf
[s
->bufptr
], 1);
3355 s
->max_size
= qemu_chr_can_read(chr
);
3359 static void udp_chr_update_read_handler(CharDriverState
*chr
)
3361 NetCharDriver
*s
= chr
->opaque
;
3364 qemu_set_fd_handler2(s
->fd
, udp_chr_read_poll
,
3365 udp_chr_read
, NULL
, chr
);
3369 int parse_host_port(struct sockaddr_in
*saddr
, const char *str
);
3371 static int parse_unix_path(struct sockaddr_un
*uaddr
, const char *str
);
3373 int parse_host_src_port(struct sockaddr_in
*haddr
,
3374 struct sockaddr_in
*saddr
,
3377 static CharDriverState
*qemu_chr_open_udp(const char *def
)
3379 CharDriverState
*chr
= NULL
;
3380 NetCharDriver
*s
= NULL
;
3382 struct sockaddr_in saddr
;
3384 chr
= qemu_mallocz(sizeof(CharDriverState
));
3387 s
= qemu_mallocz(sizeof(NetCharDriver
));
3391 fd
= socket(PF_INET
, SOCK_DGRAM
, 0);
3393 perror("socket(PF_INET, SOCK_DGRAM)");
3397 if (parse_host_src_port(&s
->daddr
, &saddr
, def
) < 0) {
3398 printf("Could not parse: %s\n", def
);
3402 if (bind(fd
, (struct sockaddr
*)&saddr
, sizeof(saddr
)) < 0)
3412 chr
->chr_write
= udp_chr_write
;
3413 chr
->chr_update_read_handler
= udp_chr_update_read_handler
;
3426 /***********************************************************/
3427 /* TCP Net console */
3438 static void tcp_chr_accept(void *opaque
);
3440 static int tcp_chr_write(CharDriverState
*chr
, const uint8_t *buf
, int len
)
3442 TCPCharDriver
*s
= chr
->opaque
;
3444 return send_all(s
->fd
, buf
, len
);
3446 /* XXX: indicate an error ? */
3451 static int tcp_chr_read_poll(void *opaque
)
3453 CharDriverState
*chr
= opaque
;
3454 TCPCharDriver
*s
= chr
->opaque
;
3457 s
->max_size
= qemu_chr_can_read(chr
);
3462 #define IAC_BREAK 243
3463 static void tcp_chr_process_IAC_bytes(CharDriverState
*chr
,
3465 uint8_t *buf
, int *size
)
3467 /* Handle any telnet client's basic IAC options to satisfy char by
3468 * char mode with no echo. All IAC options will be removed from
3469 * the buf and the do_telnetopt variable will be used to track the
3470 * state of the width of the IAC information.
3472 * IAC commands come in sets of 3 bytes with the exception of the
3473 * "IAC BREAK" command and the double IAC.
3479 for (i
= 0; i
< *size
; i
++) {
3480 if (s
->do_telnetopt
> 1) {
3481 if ((unsigned char)buf
[i
] == IAC
&& s
->do_telnetopt
== 2) {
3482 /* Double IAC means send an IAC */
3486 s
->do_telnetopt
= 1;
3488 if ((unsigned char)buf
[i
] == IAC_BREAK
&& s
->do_telnetopt
== 2) {
3489 /* Handle IAC break commands by sending a serial break */
3490 qemu_chr_event(chr
, CHR_EVENT_BREAK
);
3495 if (s
->do_telnetopt
>= 4) {
3496 s
->do_telnetopt
= 1;
3499 if ((unsigned char)buf
[i
] == IAC
) {
3500 s
->do_telnetopt
= 2;
3511 static void tcp_chr_read(void *opaque
)
3513 CharDriverState
*chr
= opaque
;
3514 TCPCharDriver
*s
= chr
->opaque
;
3518 if (!s
->connected
|| s
->max_size
<= 0)
3521 if (len
> s
->max_size
)
3523 size
= recv(s
->fd
, buf
, len
, 0);
3525 /* connection closed */
3527 if (s
->listen_fd
>= 0) {
3528 qemu_set_fd_handler(s
->listen_fd
, tcp_chr_accept
, NULL
, chr
);
3530 qemu_set_fd_handler(s
->fd
, NULL
, NULL
, NULL
);
3533 } else if (size
> 0) {
3534 if (s
->do_telnetopt
)
3535 tcp_chr_process_IAC_bytes(chr
, s
, buf
, &size
);
3537 qemu_chr_read(chr
, buf
, size
);
3541 static void tcp_chr_connect(void *opaque
)
3543 CharDriverState
*chr
= opaque
;
3544 TCPCharDriver
*s
= chr
->opaque
;
3547 qemu_set_fd_handler2(s
->fd
, tcp_chr_read_poll
,
3548 tcp_chr_read
, NULL
, chr
);
3549 qemu_chr_reset(chr
);
3552 #define IACSET(x,a,b,c) x[0] = a; x[1] = b; x[2] = c;
3553 static void tcp_chr_telnet_init(int fd
)
3556 /* Send the telnet negotion to put telnet in binary, no echo, single char mode */
3557 IACSET(buf
, 0xff, 0xfb, 0x01); /* IAC WILL ECHO */
3558 send(fd
, (char *)buf
, 3, 0);
3559 IACSET(buf
, 0xff, 0xfb, 0x03); /* IAC WILL Suppress go ahead */
3560 send(fd
, (char *)buf
, 3, 0);
3561 IACSET(buf
, 0xff, 0xfb, 0x00); /* IAC WILL Binary */
3562 send(fd
, (char *)buf
, 3, 0);
3563 IACSET(buf
, 0xff, 0xfd, 0x00); /* IAC DO Binary */
3564 send(fd
, (char *)buf
, 3, 0);
3567 static void socket_set_nodelay(int fd
)
3570 setsockopt(fd
, IPPROTO_TCP
, TCP_NODELAY
, (char *)&val
, sizeof(val
));
3573 static void tcp_chr_accept(void *opaque
)
3575 CharDriverState
*chr
= opaque
;
3576 TCPCharDriver
*s
= chr
->opaque
;
3577 struct sockaddr_in saddr
;
3579 struct sockaddr_un uaddr
;
3581 struct sockaddr
*addr
;
3588 len
= sizeof(uaddr
);
3589 addr
= (struct sockaddr
*)&uaddr
;
3593 len
= sizeof(saddr
);
3594 addr
= (struct sockaddr
*)&saddr
;
3596 fd
= accept(s
->listen_fd
, addr
, &len
);
3597 if (fd
< 0 && errno
!= EINTR
) {
3599 } else if (fd
>= 0) {
3600 if (s
->do_telnetopt
)
3601 tcp_chr_telnet_init(fd
);
3605 socket_set_nonblock(fd
);
3607 socket_set_nodelay(fd
);
3609 qemu_set_fd_handler(s
->listen_fd
, NULL
, NULL
, NULL
);
3610 tcp_chr_connect(chr
);
3613 static void tcp_chr_close(CharDriverState
*chr
)
3615 TCPCharDriver
*s
= chr
->opaque
;
3618 if (s
->listen_fd
>= 0)
3619 closesocket(s
->listen_fd
);
3623 static CharDriverState
*qemu_chr_open_tcp(const char *host_str
,
3627 CharDriverState
*chr
= NULL
;
3628 TCPCharDriver
*s
= NULL
;
3629 int fd
= -1, ret
, err
, val
;
3631 int is_waitconnect
= 1;
3634 struct sockaddr_in saddr
;
3636 struct sockaddr_un uaddr
;
3638 struct sockaddr
*addr
;
3643 addr
= (struct sockaddr
*)&uaddr
;
3644 addrlen
= sizeof(uaddr
);
3645 if (parse_unix_path(&uaddr
, host_str
) < 0)
3650 addr
= (struct sockaddr
*)&saddr
;
3651 addrlen
= sizeof(saddr
);
3652 if (parse_host_port(&saddr
, host_str
) < 0)
3657 while((ptr
= strchr(ptr
,','))) {
3659 if (!strncmp(ptr
,"server",6)) {
3661 } else if (!strncmp(ptr
,"nowait",6)) {
3663 } else if (!strncmp(ptr
,"nodelay",6)) {
3666 printf("Unknown option: %s\n", ptr
);
3673 chr
= qemu_mallocz(sizeof(CharDriverState
));
3676 s
= qemu_mallocz(sizeof(TCPCharDriver
));
3682 fd
= socket(PF_UNIX
, SOCK_STREAM
, 0);
3685 fd
= socket(PF_INET
, SOCK_STREAM
, 0);
3690 if (!is_waitconnect
)
3691 socket_set_nonblock(fd
);
3696 s
->is_unix
= is_unix
;
3697 s
->do_nodelay
= do_nodelay
&& !is_unix
;
3700 chr
->chr_write
= tcp_chr_write
;
3701 chr
->chr_close
= tcp_chr_close
;
3704 /* allow fast reuse */
3708 pstrcpy(path
, sizeof(path
), uaddr
.sun_path
);
3714 setsockopt(fd
, SOL_SOCKET
, SO_REUSEADDR
, (const char *)&val
, sizeof(val
));
3717 ret
= bind(fd
, addr
, addrlen
);
3721 ret
= listen(fd
, 0);
3726 qemu_set_fd_handler(s
->listen_fd
, tcp_chr_accept
, NULL
, chr
);
3728 s
->do_telnetopt
= 1;
3731 ret
= connect(fd
, addr
, addrlen
);
3733 err
= socket_error();
3734 if (err
== EINTR
|| err
== EWOULDBLOCK
) {
3735 } else if (err
== EINPROGRESS
) {
3738 } else if (err
== WSAEALREADY
) {
3750 socket_set_nodelay(fd
);
3752 tcp_chr_connect(chr
);
3754 qemu_set_fd_handler(s
->fd
, NULL
, tcp_chr_connect
, chr
);
3757 if (is_listen
&& is_waitconnect
) {
3758 printf("QEMU waiting for connection on: %s\n", host_str
);
3759 tcp_chr_accept(chr
);
3760 socket_set_nonblock(s
->listen_fd
);
3772 CharDriverState
*qemu_chr_open(const char *filename
)
3776 if (!strcmp(filename
, "vc")) {
3777 return text_console_init(&display_state
, 0);
3778 } else if (strstart(filename
, "vc:", &p
)) {
3779 return text_console_init(&display_state
, p
);
3780 } else if (!strcmp(filename
, "null")) {
3781 return qemu_chr_open_null();
3783 if (strstart(filename
, "tcp:", &p
)) {
3784 return qemu_chr_open_tcp(p
, 0, 0);
3786 if (strstart(filename
, "telnet:", &p
)) {
3787 return qemu_chr_open_tcp(p
, 1, 0);
3789 if (strstart(filename
, "udp:", &p
)) {
3790 return qemu_chr_open_udp(p
);
3792 if (strstart(filename
, "mon:", &p
)) {
3793 CharDriverState
*drv
= qemu_chr_open(p
);
3795 drv
= qemu_chr_open_mux(drv
);
3796 monitor_init(drv
, !nographic
);
3799 printf("Unable to open driver: %s\n", p
);
3803 if (strstart(filename
, "unix:", &p
)) {
3804 return qemu_chr_open_tcp(p
, 0, 1);
3805 } else if (strstart(filename
, "file:", &p
)) {
3806 return qemu_chr_open_file_out(p
);
3807 } else if (strstart(filename
, "pipe:", &p
)) {
3808 return qemu_chr_open_pipe(p
);
3809 } else if (!strcmp(filename
, "pty")) {
3810 return qemu_chr_open_pty();
3811 } else if (!strcmp(filename
, "stdio")) {
3812 return qemu_chr_open_stdio();
3814 #if defined(__linux__)
3815 if (strstart(filename
, "/dev/parport", NULL
)) {
3816 return qemu_chr_open_pp(filename
);
3819 #if defined(__linux__) || defined(__sun__)
3820 if (strstart(filename
, "/dev/", NULL
)) {
3821 return qemu_chr_open_tty(filename
);
3825 if (strstart(filename
, "COM", NULL
)) {
3826 return qemu_chr_open_win(filename
);
3828 if (strstart(filename
, "pipe:", &p
)) {
3829 return qemu_chr_open_win_pipe(p
);
3831 if (strstart(filename
, "con:", NULL
)) {
3832 return qemu_chr_open_win_con(filename
);
3834 if (strstart(filename
, "file:", &p
)) {
3835 return qemu_chr_open_win_file_out(p
);
3838 #ifdef CONFIG_BRLAPI
3839 if (!strcmp(filename
, "braille")) {
3840 return chr_baum_init();
3848 void qemu_chr_close(CharDriverState
*chr
)
3851 chr
->chr_close(chr
);
3855 /***********************************************************/
3856 /* network device redirectors */
3858 __attribute__ (( unused
))
3859 static void hex_dump(FILE *f
, const uint8_t *buf
, int size
)
3863 for(i
=0;i
<size
;i
+=16) {
3867 fprintf(f
, "%08x ", i
);
3870 fprintf(f
, " %02x", buf
[i
+j
]);
3875 for(j
=0;j
<len
;j
++) {
3877 if (c
< ' ' || c
> '~')
3879 fprintf(f
, "%c", c
);
3885 static int parse_macaddr(uint8_t *macaddr
, const char *p
)
3892 offset
= strtol(p
, &last_char
, 0);
3893 if (0 == errno
&& '\0' == *last_char
&&
3894 offset
>= 0 && offset
<= 0xFFFFFF) {
3895 macaddr
[3] = (offset
& 0xFF0000) >> 16;
3896 macaddr
[4] = (offset
& 0xFF00) >> 8;
3897 macaddr
[5] = offset
& 0xFF;
3900 for(i
= 0; i
< 6; i
++) {
3901 macaddr
[i
] = strtol(p
, (char **)&p
, 16);
3906 if (*p
!= ':' && *p
!= '-')
3917 static int get_str_sep(char *buf
, int buf_size
, const char **pp
, int sep
)
3922 p1
= strchr(p
, sep
);
3928 if (len
> buf_size
- 1)
3930 memcpy(buf
, p
, len
);
3937 int parse_host_src_port(struct sockaddr_in
*haddr
,
3938 struct sockaddr_in
*saddr
,
3939 const char *input_str
)
3941 char *str
= strdup(input_str
);
3942 char *host_str
= str
;
3947 * Chop off any extra arguments at the end of the string which
3948 * would start with a comma, then fill in the src port information
3949 * if it was provided else use the "any address" and "any port".
3951 if ((ptr
= strchr(str
,',')))
3954 if ((src_str
= strchr(input_str
,'@'))) {
3959 if (parse_host_port(haddr
, host_str
) < 0)
3962 if (!src_str
|| *src_str
== '\0')
3965 if (parse_host_port(saddr
, src_str
) < 0)
3976 int parse_host_port(struct sockaddr_in
*saddr
, const char *str
)
3984 if (get_str_sep(buf
, sizeof(buf
), &p
, ':') < 0)
3986 saddr
->sin_family
= AF_INET
;
3987 if (buf
[0] == '\0') {
3988 saddr
->sin_addr
.s_addr
= 0;
3990 if (isdigit(buf
[0])) {
3991 if (!inet_aton(buf
, &saddr
->sin_addr
))
3994 if ((he
= gethostbyname(buf
)) == NULL
)
3996 saddr
->sin_addr
= *(struct in_addr
*)he
->h_addr
;
3999 port
= strtol(p
, (char **)&r
, 0);
4002 saddr
->sin_port
= htons(port
);
4007 static int parse_unix_path(struct sockaddr_un
*uaddr
, const char *str
)
4012 len
= MIN(108, strlen(str
));
4013 p
= strchr(str
, ',');
4015 len
= MIN(len
, p
- str
);
4017 memset(uaddr
, 0, sizeof(*uaddr
));
4019 uaddr
->sun_family
= AF_UNIX
;
4020 memcpy(uaddr
->sun_path
, str
, len
);
4026 /* find or alloc a new VLAN */
4027 VLANState
*qemu_find_vlan(int id
)
4029 VLANState
**pvlan
, *vlan
;
4030 for(vlan
= first_vlan
; vlan
!= NULL
; vlan
= vlan
->next
) {
4034 vlan
= qemu_mallocz(sizeof(VLANState
));
4039 pvlan
= &first_vlan
;
4040 while (*pvlan
!= NULL
)
4041 pvlan
= &(*pvlan
)->next
;
4046 VLANClientState
*qemu_new_vlan_client(VLANState
*vlan
,
4047 IOReadHandler
*fd_read
,
4048 IOCanRWHandler
*fd_can_read
,
4051 VLANClientState
*vc
, **pvc
;
4052 vc
= qemu_mallocz(sizeof(VLANClientState
));
4055 vc
->fd_read
= fd_read
;
4056 vc
->fd_can_read
= fd_can_read
;
4057 vc
->opaque
= opaque
;
4061 pvc
= &vlan
->first_client
;
4062 while (*pvc
!= NULL
)
4063 pvc
= &(*pvc
)->next
;
4068 void qemu_del_vlan_client(VLANClientState
*vc
)
4070 VLANClientState
**pvc
= &vc
->vlan
->first_client
;
4072 while (*pvc
!= NULL
)
4078 pvc
= &(*pvc
)->next
;
4081 int qemu_can_send_packet(VLANClientState
*vc1
)
4083 VLANState
*vlan
= vc1
->vlan
;
4084 VLANClientState
*vc
;
4086 for(vc
= vlan
->first_client
; vc
!= NULL
; vc
= vc
->next
) {
4088 if (vc
->fd_can_read
&& vc
->fd_can_read(vc
->opaque
))
4095 void qemu_send_packet(VLANClientState
*vc1
, const uint8_t *buf
, int size
)
4097 VLANState
*vlan
= vc1
->vlan
;
4098 VLANClientState
*vc
;
4101 printf("vlan %d send:\n", vlan
->id
);
4102 hex_dump(stdout
, buf
, size
);
4104 for(vc
= vlan
->first_client
; vc
!= NULL
; vc
= vc
->next
) {
4106 vc
->fd_read(vc
->opaque
, buf
, size
);
4111 #if defined(CONFIG_SLIRP)
4113 /* slirp network adapter */
4115 static int slirp_inited
;
4116 static VLANClientState
*slirp_vc
;
4118 int slirp_can_output(void)
4120 return !slirp_vc
|| qemu_can_send_packet(slirp_vc
);
4123 void slirp_output(const uint8_t *pkt
, int pkt_len
)
4126 printf("slirp output:\n");
4127 hex_dump(stdout
, pkt
, pkt_len
);
4131 qemu_send_packet(slirp_vc
, pkt
, pkt_len
);
4134 static void slirp_receive(void *opaque
, const uint8_t *buf
, int size
)
4137 printf("slirp input:\n");
4138 hex_dump(stdout
, buf
, size
);
4140 slirp_input(buf
, size
);
4143 static int net_slirp_init(VLANState
*vlan
)
4145 if (!slirp_inited
) {
4149 slirp_vc
= qemu_new_vlan_client(vlan
,
4150 slirp_receive
, NULL
, NULL
);
4151 snprintf(slirp_vc
->info_str
, sizeof(slirp_vc
->info_str
), "user redirector");
4155 static void net_slirp_redir(const char *redir_str
)
4160 struct in_addr guest_addr
;
4161 int host_port
, guest_port
;
4163 if (!slirp_inited
) {
4169 if (get_str_sep(buf
, sizeof(buf
), &p
, ':') < 0)
4171 if (!strcmp(buf
, "tcp")) {
4173 } else if (!strcmp(buf
, "udp")) {
4179 if (get_str_sep(buf
, sizeof(buf
), &p
, ':') < 0)
4181 host_port
= strtol(buf
, &r
, 0);
4185 if (get_str_sep(buf
, sizeof(buf
), &p
, ':') < 0)
4187 if (buf
[0] == '\0') {
4188 pstrcpy(buf
, sizeof(buf
), "10.0.2.15");
4190 if (!inet_aton(buf
, &guest_addr
))
4193 guest_port
= strtol(p
, &r
, 0);
4197 if (slirp_redir(is_udp
, host_port
, guest_addr
, guest_port
) < 0) {
4198 fprintf(stderr
, "qemu: could not set up redirection\n");
4203 fprintf(stderr
, "qemu: syntax: -redir [tcp|udp]:host-port:[guest-host]:guest-port\n");
4211 static void erase_dir(char *dir_name
)
4215 char filename
[1024];
4217 /* erase all the files in the directory */
4218 if ((d
= opendir(dir_name
)) != 0) {
4223 if (strcmp(de
->d_name
, ".") != 0 &&
4224 strcmp(de
->d_name
, "..") != 0) {
4225 snprintf(filename
, sizeof(filename
), "%s/%s",
4226 smb_dir
, de
->d_name
);
4227 if (unlink(filename
) != 0) /* is it a directory? */
4228 erase_dir(filename
);
4236 /* automatic user mode samba server configuration */
4237 static void smb_exit(void)
4242 /* automatic user mode samba server configuration */
4243 static void net_slirp_smb(const char *exported_dir
)
4245 char smb_conf
[1024];
4246 char smb_cmdline
[1024];
4249 if (!slirp_inited
) {
4254 /* XXX: better tmp dir construction */
4255 snprintf(smb_dir
, sizeof(smb_dir
), "/tmp/qemu-smb.%d", getpid());
4256 if (mkdir(smb_dir
, 0700) < 0) {
4257 fprintf(stderr
, "qemu: could not create samba server dir '%s'\n", smb_dir
);
4260 snprintf(smb_conf
, sizeof(smb_conf
), "%s/%s", smb_dir
, "smb.conf");
4262 f
= fopen(smb_conf
, "w");
4264 fprintf(stderr
, "qemu: could not create samba server configuration file '%s'\n", smb_conf
);
4271 "socket address=127.0.0.1\n"
4272 "pid directory=%s\n"
4273 "lock directory=%s\n"
4274 "log file=%s/log.smbd\n"
4275 "smb passwd file=%s/smbpasswd\n"
4276 "security = share\n"
4291 snprintf(smb_cmdline
, sizeof(smb_cmdline
), "%s -s %s",
4292 SMBD_COMMAND
, smb_conf
);
4294 slirp_add_exec(0, smb_cmdline
, 4, 139);
4297 #endif /* !defined(_WIN32) */
4298 void do_info_slirp(void)
4303 #endif /* CONFIG_SLIRP */
4305 #if !defined(_WIN32)
4307 typedef struct TAPState
{
4308 VLANClientState
*vc
;
4310 char down_script
[1024];
4313 static void tap_receive(void *opaque
, const uint8_t *buf
, int size
)
4315 TAPState
*s
= opaque
;
4318 ret
= write(s
->fd
, buf
, size
);
4319 if (ret
< 0 && (errno
== EINTR
|| errno
== EAGAIN
)) {
4326 static void tap_send(void *opaque
)
4328 TAPState
*s
= opaque
;
4335 sbuf
.maxlen
= sizeof(buf
);
4337 size
= getmsg(s
->fd
, NULL
, &sbuf
, &f
) >=0 ? sbuf
.len
: -1;
4339 size
= read(s
->fd
, buf
, sizeof(buf
));
4342 qemu_send_packet(s
->vc
, buf
, size
);
4348 static TAPState
*net_tap_fd_init(VLANState
*vlan
, int fd
)
4352 s
= qemu_mallocz(sizeof(TAPState
));
4356 s
->vc
= qemu_new_vlan_client(vlan
, tap_receive
, NULL
, s
);
4357 qemu_set_fd_handler(s
->fd
, tap_send
, NULL
, s
);
4358 snprintf(s
->vc
->info_str
, sizeof(s
->vc
->info_str
), "tap: fd=%d", fd
);
4362 #if defined (_BSD) || defined (__FreeBSD_kernel__)
4363 static int tap_open(char *ifname
, int ifname_size
)
4369 TFR(fd
= open("/dev/tap", O_RDWR
));
4371 fprintf(stderr
, "warning: could not open /dev/tap: no virtual network emulation\n");
4376 dev
= devname(s
.st_rdev
, S_IFCHR
);
4377 pstrcpy(ifname
, ifname_size
, dev
);
4379 fcntl(fd
, F_SETFL
, O_NONBLOCK
);
4382 #elif defined(__sun__)
4383 #define TUNNEWPPA (('T'<<16) | 0x0001)
4385 * Allocate TAP device, returns opened fd.
4386 * Stores dev name in the first arg(must be large enough).
4388 int tap_alloc(char *dev
)
4390 int tap_fd
, if_fd
, ppa
= -1;
4391 static int ip_fd
= 0;
4394 static int arp_fd
= 0;
4395 int ip_muxid
, arp_muxid
;
4396 struct strioctl strioc_if
, strioc_ppa
;
4397 int link_type
= I_PLINK
;;
4399 char actual_name
[32] = "";
4401 memset(&ifr
, 0x0, sizeof(ifr
));
4405 while( *ptr
&& !isdigit((int)*ptr
) ) ptr
++;
4409 /* Check if IP device was opened */
4413 TFR(ip_fd
= open("/dev/udp", O_RDWR
, 0));
4415 syslog(LOG_ERR
, "Can't open /dev/ip (actually /dev/udp)");
4419 TFR(tap_fd
= open("/dev/tap", O_RDWR
, 0));
4421 syslog(LOG_ERR
, "Can't open /dev/tap");
4425 /* Assign a new PPA and get its unit number. */
4426 strioc_ppa
.ic_cmd
= TUNNEWPPA
;
4427 strioc_ppa
.ic_timout
= 0;
4428 strioc_ppa
.ic_len
= sizeof(ppa
);
4429 strioc_ppa
.ic_dp
= (char *)&ppa
;
4430 if ((ppa
= ioctl (tap_fd
, I_STR
, &strioc_ppa
)) < 0)
4431 syslog (LOG_ERR
, "Can't assign new interface");
4433 TFR(if_fd
= open("/dev/tap", O_RDWR
, 0));
4435 syslog(LOG_ERR
, "Can't open /dev/tap (2)");
4438 if(ioctl(if_fd
, I_PUSH
, "ip") < 0){
4439 syslog(LOG_ERR
, "Can't push IP module");
4443 if (ioctl(if_fd
, SIOCGLIFFLAGS
, &ifr
) < 0)
4444 syslog(LOG_ERR
, "Can't get flags\n");
4446 snprintf (actual_name
, 32, "tap%d", ppa
);
4447 strncpy (ifr
.lifr_name
, actual_name
, sizeof (ifr
.lifr_name
));
4450 /* Assign ppa according to the unit number returned by tun device */
4452 if (ioctl (if_fd
, SIOCSLIFNAME
, &ifr
) < 0)
4453 syslog (LOG_ERR
, "Can't set PPA %d", ppa
);
4454 if (ioctl(if_fd
, SIOCGLIFFLAGS
, &ifr
) <0)
4455 syslog (LOG_ERR
, "Can't get flags\n");
4456 /* Push arp module to if_fd */
4457 if (ioctl (if_fd
, I_PUSH
, "arp") < 0)
4458 syslog (LOG_ERR
, "Can't push ARP module (2)");
4460 /* Push arp module to ip_fd */
4461 if (ioctl (ip_fd
, I_POP
, NULL
) < 0)
4462 syslog (LOG_ERR
, "I_POP failed\n");
4463 if (ioctl (ip_fd
, I_PUSH
, "arp") < 0)
4464 syslog (LOG_ERR
, "Can't push ARP module (3)\n");
4466 TFR(arp_fd
= open ("/dev/tap", O_RDWR
, 0));
4468 syslog (LOG_ERR
, "Can't open %s\n", "/dev/tap");
4470 /* Set ifname to arp */
4471 strioc_if
.ic_cmd
= SIOCSLIFNAME
;
4472 strioc_if
.ic_timout
= 0;
4473 strioc_if
.ic_len
= sizeof(ifr
);
4474 strioc_if
.ic_dp
= (char *)&ifr
;
4475 if (ioctl(arp_fd
, I_STR
, &strioc_if
) < 0){
4476 syslog (LOG_ERR
, "Can't set ifname to arp\n");
4479 if((ip_muxid
= ioctl(ip_fd
, I_LINK
, if_fd
)) < 0){
4480 syslog(LOG_ERR
, "Can't link TAP device to IP");
4484 if ((arp_muxid
= ioctl (ip_fd
, link_type
, arp_fd
)) < 0)
4485 syslog (LOG_ERR
, "Can't link TAP device to ARP");
4489 memset(&ifr
, 0x0, sizeof(ifr
));
4490 strncpy (ifr
.lifr_name
, actual_name
, sizeof (ifr
.lifr_name
));
4491 ifr
.lifr_ip_muxid
= ip_muxid
;
4492 ifr
.lifr_arp_muxid
= arp_muxid
;
4494 if (ioctl (ip_fd
, SIOCSLIFMUXID
, &ifr
) < 0)
4496 ioctl (ip_fd
, I_PUNLINK
, arp_muxid
);
4497 ioctl (ip_fd
, I_PUNLINK
, ip_muxid
);
4498 syslog (LOG_ERR
, "Can't set multiplexor id");
4501 sprintf(dev
, "tap%d", ppa
);
4505 static int tap_open(char *ifname
, int ifname_size
)
4509 if( (fd
= tap_alloc(dev
)) < 0 ){
4510 fprintf(stderr
, "Cannot allocate TAP device\n");
4513 pstrcpy(ifname
, ifname_size
, dev
);
4514 fcntl(fd
, F_SETFL
, O_NONBLOCK
);
4518 static int tap_open(char *ifname
, int ifname_size
)
4523 TFR(fd
= open("/dev/net/tun", O_RDWR
));
4525 fprintf(stderr
, "warning: could not open /dev/net/tun: no virtual network emulation\n");
4528 memset(&ifr
, 0, sizeof(ifr
));
4529 ifr
.ifr_flags
= IFF_TAP
| IFF_NO_PI
;
4530 if (ifname
[0] != '\0')
4531 pstrcpy(ifr
.ifr_name
, IFNAMSIZ
, ifname
);
4533 pstrcpy(ifr
.ifr_name
, IFNAMSIZ
, "tap%d");
4534 ret
= ioctl(fd
, TUNSETIFF
, (void *) &ifr
);
4536 fprintf(stderr
, "warning: could not configure /dev/net/tun: no virtual network emulation\n");
4540 pstrcpy(ifname
, ifname_size
, ifr
.ifr_name
);
4541 fcntl(fd
, F_SETFL
, O_NONBLOCK
);
4546 static int launch_script(const char *setup_script
, const char *ifname
, int fd
)
4552 /* try to launch network script */
4556 int open_max
= sysconf (_SC_OPEN_MAX
), i
;
4557 for (i
= 0; i
< open_max
; i
++)
4558 if (i
!= STDIN_FILENO
&&
4559 i
!= STDOUT_FILENO
&&
4560 i
!= STDERR_FILENO
&&
4565 *parg
++ = (char *)setup_script
;
4566 *parg
++ = (char *)ifname
;
4568 execv(setup_script
, args
);
4571 while (waitpid(pid
, &status
, 0) != pid
);
4572 if (!WIFEXITED(status
) ||
4573 WEXITSTATUS(status
) != 0) {
4574 fprintf(stderr
, "%s: could not launch network script\n",
4582 static int net_tap_init(VLANState
*vlan
, const char *ifname1
,
4583 const char *setup_script
, const char *down_script
)
4589 if (ifname1
!= NULL
)
4590 pstrcpy(ifname
, sizeof(ifname
), ifname1
);
4593 TFR(fd
= tap_open(ifname
, sizeof(ifname
)));
4597 if (!setup_script
|| !strcmp(setup_script
, "no"))
4599 if (setup_script
[0] != '\0') {
4600 if (launch_script(setup_script
, ifname
, fd
))
4603 s
= net_tap_fd_init(vlan
, fd
);
4606 snprintf(s
->vc
->info_str
, sizeof(s
->vc
->info_str
),
4607 "tap: ifname=%s setup_script=%s", ifname
, setup_script
);
4608 if (down_script
&& strcmp(down_script
, "no"))
4609 snprintf(s
->down_script
, sizeof(s
->down_script
), "%s", down_script
);
4613 #endif /* !_WIN32 */
4615 #if defined(CONFIG_VDE)
4616 typedef struct VDEState
{
4617 VLANClientState
*vc
;
4621 static void vde_to_qemu(void *opaque
)
4623 VDEState
*s
= opaque
;
4627 size
= vde_recv(s
->vde
, buf
, sizeof(buf
), 0);
4629 qemu_send_packet(s
->vc
, buf
, size
);
4633 static void vde_from_qemu(void *opaque
, const uint8_t *buf
, int size
)
4635 VDEState
*s
= opaque
;
4638 ret
= vde_send(s
->vde
, buf
, size
, 0);
4639 if (ret
< 0 && errno
== EINTR
) {
4646 static int net_vde_init(VLANState
*vlan
, const char *sock
, int port
,
4647 const char *group
, int mode
)
4650 char *init_group
= strlen(group
) ? (char *)group
: NULL
;
4651 char *init_sock
= strlen(sock
) ? (char *)sock
: NULL
;
4653 struct vde_open_args args
= {
4655 .group
= init_group
,
4659 s
= qemu_mallocz(sizeof(VDEState
));
4662 s
->vde
= vde_open(init_sock
, "QEMU", &args
);
4667 s
->vc
= qemu_new_vlan_client(vlan
, vde_from_qemu
, NULL
, s
);
4668 qemu_set_fd_handler(vde_datafd(s
->vde
), vde_to_qemu
, NULL
, s
);
4669 snprintf(s
->vc
->info_str
, sizeof(s
->vc
->info_str
), "vde: sock=%s fd=%d",
4670 sock
, vde_datafd(s
->vde
));
4675 /* network connection */
4676 typedef struct NetSocketState
{
4677 VLANClientState
*vc
;
4679 int state
; /* 0 = getting length, 1 = getting data */
4683 struct sockaddr_in dgram_dst
; /* contains inet host and port destination iff connectionless (SOCK_DGRAM) */
4686 typedef struct NetSocketListenState
{
4689 } NetSocketListenState
;
4691 /* XXX: we consider we can send the whole packet without blocking */
4692 static void net_socket_receive(void *opaque
, const uint8_t *buf
, int size
)
4694 NetSocketState
*s
= opaque
;
4698 send_all(s
->fd
, (const uint8_t *)&len
, sizeof(len
));
4699 send_all(s
->fd
, buf
, size
);
4702 static void net_socket_receive_dgram(void *opaque
, const uint8_t *buf
, int size
)
4704 NetSocketState
*s
= opaque
;
4705 sendto(s
->fd
, buf
, size
, 0,
4706 (struct sockaddr
*)&s
->dgram_dst
, sizeof(s
->dgram_dst
));
4709 static void net_socket_send(void *opaque
)
4711 NetSocketState
*s
= opaque
;
4716 size
= recv(s
->fd
, buf1
, sizeof(buf1
), 0);
4718 err
= socket_error();
4719 if (err
!= EWOULDBLOCK
)
4721 } else if (size
== 0) {
4722 /* end of connection */
4724 qemu_set_fd_handler(s
->fd
, NULL
, NULL
, NULL
);
4730 /* reassemble a packet from the network */
4736 memcpy(s
->buf
+ s
->index
, buf
, l
);
4740 if (s
->index
== 4) {
4742 s
->packet_len
= ntohl(*(uint32_t *)s
->buf
);
4748 l
= s
->packet_len
- s
->index
;
4751 memcpy(s
->buf
+ s
->index
, buf
, l
);
4755 if (s
->index
>= s
->packet_len
) {
4756 qemu_send_packet(s
->vc
, s
->buf
, s
->packet_len
);
4765 static void net_socket_send_dgram(void *opaque
)
4767 NetSocketState
*s
= opaque
;
4770 size
= recv(s
->fd
, s
->buf
, sizeof(s
->buf
), 0);
4774 /* end of connection */
4775 qemu_set_fd_handler(s
->fd
, NULL
, NULL
, NULL
);
4778 qemu_send_packet(s
->vc
, s
->buf
, size
);
4781 static int net_socket_mcast_create(struct sockaddr_in
*mcastaddr
)
4786 if (!IN_MULTICAST(ntohl(mcastaddr
->sin_addr
.s_addr
))) {
4787 fprintf(stderr
, "qemu: error: specified mcastaddr \"%s\" (0x%08x) does not contain a multicast address\n",
4788 inet_ntoa(mcastaddr
->sin_addr
),
4789 (int)ntohl(mcastaddr
->sin_addr
.s_addr
));
4793 fd
= socket(PF_INET
, SOCK_DGRAM
, 0);
4795 perror("socket(PF_INET, SOCK_DGRAM)");
4800 ret
=setsockopt(fd
, SOL_SOCKET
, SO_REUSEADDR
,
4801 (const char *)&val
, sizeof(val
));
4803 perror("setsockopt(SOL_SOCKET, SO_REUSEADDR)");
4807 ret
= bind(fd
, (struct sockaddr
*)mcastaddr
, sizeof(*mcastaddr
));
4813 /* Add host to multicast group */
4814 imr
.imr_multiaddr
= mcastaddr
->sin_addr
;
4815 imr
.imr_interface
.s_addr
= htonl(INADDR_ANY
);
4817 ret
= setsockopt(fd
, IPPROTO_IP
, IP_ADD_MEMBERSHIP
,
4818 (const char *)&imr
, sizeof(struct ip_mreq
));
4820 perror("setsockopt(IP_ADD_MEMBERSHIP)");
4824 /* Force mcast msgs to loopback (eg. several QEMUs in same host */
4826 ret
=setsockopt(fd
, IPPROTO_IP
, IP_MULTICAST_LOOP
,
4827 (const char *)&val
, sizeof(val
));
4829 perror("setsockopt(SOL_IP, IP_MULTICAST_LOOP)");
4833 socket_set_nonblock(fd
);
4841 static NetSocketState
*net_socket_fd_init_dgram(VLANState
*vlan
, int fd
,
4844 struct sockaddr_in saddr
;
4846 socklen_t saddr_len
;
4849 /* fd passed: multicast: "learn" dgram_dst address from bound address and save it
4850 * Because this may be "shared" socket from a "master" process, datagrams would be recv()
4851 * by ONLY ONE process: we must "clone" this dgram socket --jjo
4855 if (getsockname(fd
, (struct sockaddr
*) &saddr
, &saddr_len
) == 0) {
4857 if (saddr
.sin_addr
.s_addr
==0) {
4858 fprintf(stderr
, "qemu: error: init_dgram: fd=%d unbound, cannot setup multicast dst addr\n",
4862 /* clone dgram socket */
4863 newfd
= net_socket_mcast_create(&saddr
);
4865 /* error already reported by net_socket_mcast_create() */
4869 /* clone newfd to fd, close newfd */
4874 fprintf(stderr
, "qemu: error: init_dgram: fd=%d failed getsockname(): %s\n",
4875 fd
, strerror(errno
));
4880 s
= qemu_mallocz(sizeof(NetSocketState
));
4885 s
->vc
= qemu_new_vlan_client(vlan
, net_socket_receive_dgram
, NULL
, s
);
4886 qemu_set_fd_handler(s
->fd
, net_socket_send_dgram
, NULL
, s
);
4888 /* mcast: save bound address as dst */
4889 if (is_connected
) s
->dgram_dst
=saddr
;
4891 snprintf(s
->vc
->info_str
, sizeof(s
->vc
->info_str
),
4892 "socket: fd=%d (%s mcast=%s:%d)",
4893 fd
, is_connected
? "cloned" : "",
4894 inet_ntoa(saddr
.sin_addr
), ntohs(saddr
.sin_port
));
4898 static void net_socket_connect(void *opaque
)
4900 NetSocketState
*s
= opaque
;
4901 qemu_set_fd_handler(s
->fd
, net_socket_send
, NULL
, s
);
4904 static NetSocketState
*net_socket_fd_init_stream(VLANState
*vlan
, int fd
,
4908 s
= qemu_mallocz(sizeof(NetSocketState
));
4912 s
->vc
= qemu_new_vlan_client(vlan
,
4913 net_socket_receive
, NULL
, s
);
4914 snprintf(s
->vc
->info_str
, sizeof(s
->vc
->info_str
),
4915 "socket: fd=%d", fd
);
4917 net_socket_connect(s
);
4919 qemu_set_fd_handler(s
->fd
, NULL
, net_socket_connect
, s
);
4924 static NetSocketState
*net_socket_fd_init(VLANState
*vlan
, int fd
,
4927 int so_type
=-1, optlen
=sizeof(so_type
);
4929 if(getsockopt(fd
, SOL_SOCKET
, SO_TYPE
, (char *)&so_type
,
4930 (socklen_t
*)&optlen
)< 0) {
4931 fprintf(stderr
, "qemu: error: getsockopt(SO_TYPE) for fd=%d failed\n", fd
);
4936 return net_socket_fd_init_dgram(vlan
, fd
, is_connected
);
4938 return net_socket_fd_init_stream(vlan
, fd
, is_connected
);
4940 /* who knows ... this could be a eg. a pty, do warn and continue as stream */
4941 fprintf(stderr
, "qemu: warning: socket type=%d for fd=%d is not SOCK_DGRAM or SOCK_STREAM\n", so_type
, fd
);
4942 return net_socket_fd_init_stream(vlan
, fd
, is_connected
);
4947 static void net_socket_accept(void *opaque
)
4949 NetSocketListenState
*s
= opaque
;
4951 struct sockaddr_in saddr
;
4956 len
= sizeof(saddr
);
4957 fd
= accept(s
->fd
, (struct sockaddr
*)&saddr
, &len
);
4958 if (fd
< 0 && errno
!= EINTR
) {
4960 } else if (fd
>= 0) {
4964 s1
= net_socket_fd_init(s
->vlan
, fd
, 1);
4968 snprintf(s1
->vc
->info_str
, sizeof(s1
->vc
->info_str
),
4969 "socket: connection from %s:%d",
4970 inet_ntoa(saddr
.sin_addr
), ntohs(saddr
.sin_port
));
4974 static int net_socket_listen_init(VLANState
*vlan
, const char *host_str
)
4976 NetSocketListenState
*s
;
4978 struct sockaddr_in saddr
;
4980 if (parse_host_port(&saddr
, host_str
) < 0)
4983 s
= qemu_mallocz(sizeof(NetSocketListenState
));
4987 fd
= socket(PF_INET
, SOCK_STREAM
, 0);
4992 socket_set_nonblock(fd
);
4994 /* allow fast reuse */
4996 setsockopt(fd
, SOL_SOCKET
, SO_REUSEADDR
, (const char *)&val
, sizeof(val
));
4998 ret
= bind(fd
, (struct sockaddr
*)&saddr
, sizeof(saddr
));
5003 ret
= listen(fd
, 0);
5010 qemu_set_fd_handler(fd
, net_socket_accept
, NULL
, s
);
5014 static int net_socket_connect_init(VLANState
*vlan
, const char *host_str
)
5017 int fd
, connected
, ret
, err
;
5018 struct sockaddr_in saddr
;
5020 if (parse_host_port(&saddr
, host_str
) < 0)
5023 fd
= socket(PF_INET
, SOCK_STREAM
, 0);
5028 socket_set_nonblock(fd
);
5032 ret
= connect(fd
, (struct sockaddr
*)&saddr
, sizeof(saddr
));
5034 err
= socket_error();
5035 if (err
== EINTR
|| err
== EWOULDBLOCK
) {
5036 } else if (err
== EINPROGRESS
) {
5039 } else if (err
== WSAEALREADY
) {
5052 s
= net_socket_fd_init(vlan
, fd
, connected
);
5055 snprintf(s
->vc
->info_str
, sizeof(s
->vc
->info_str
),
5056 "socket: connect to %s:%d",
5057 inet_ntoa(saddr
.sin_addr
), ntohs(saddr
.sin_port
));
5061 static int net_socket_mcast_init(VLANState
*vlan
, const char *host_str
)
5065 struct sockaddr_in saddr
;
5067 if (parse_host_port(&saddr
, host_str
) < 0)
5071 fd
= net_socket_mcast_create(&saddr
);
5075 s
= net_socket_fd_init(vlan
, fd
, 0);
5079 s
->dgram_dst
= saddr
;
5081 snprintf(s
->vc
->info_str
, sizeof(s
->vc
->info_str
),
5082 "socket: mcast=%s:%d",
5083 inet_ntoa(saddr
.sin_addr
), ntohs(saddr
.sin_port
));
5088 static const char *get_opt_name(char *buf
, int buf_size
, const char *p
)
5093 while (*p
!= '\0' && *p
!= '=') {
5094 if (q
&& (q
- buf
) < buf_size
- 1)
5104 static const char *get_opt_value(char *buf
, int buf_size
, const char *p
)
5109 while (*p
!= '\0') {
5111 if (*(p
+ 1) != ',')
5115 if (q
&& (q
- buf
) < buf_size
- 1)
5125 static int get_param_value(char *buf
, int buf_size
,
5126 const char *tag
, const char *str
)
5133 p
= get_opt_name(option
, sizeof(option
), p
);
5137 if (!strcmp(tag
, option
)) {
5138 (void)get_opt_value(buf
, buf_size
, p
);
5141 p
= get_opt_value(NULL
, 0, p
);
5150 static int check_params(char *buf
, int buf_size
,
5151 char **params
, const char *str
)
5158 p
= get_opt_name(buf
, buf_size
, p
);
5162 for(i
= 0; params
[i
] != NULL
; i
++)
5163 if (!strcmp(params
[i
], buf
))
5165 if (params
[i
] == NULL
)
5167 p
= get_opt_value(NULL
, 0, p
);
5175 static int net_client_init(const char *device
, const char *p
)
5182 if (get_param_value(buf
, sizeof(buf
), "vlan", p
)) {
5183 vlan_id
= strtol(buf
, NULL
, 0);
5185 vlan
= qemu_find_vlan(vlan_id
);
5187 fprintf(stderr
, "Could not create vlan %d\n", vlan_id
);
5190 if (!strcmp(device
, "nic")) {
5194 if (nb_nics
>= MAX_NICS
) {
5195 fprintf(stderr
, "Too Many NICs\n");
5198 nd
= &nd_table
[nb_nics
];
5199 macaddr
= nd
->macaddr
;
5205 macaddr
[5] = 0x56 + nb_nics
;
5207 if (get_param_value(buf
, sizeof(buf
), "macaddr", p
)) {
5208 if (parse_macaddr(macaddr
, buf
) < 0) {
5209 fprintf(stderr
, "invalid syntax for ethernet address\n");
5213 if (get_param_value(buf
, sizeof(buf
), "model", p
)) {
5214 nd
->model
= strdup(buf
);
5218 vlan
->nb_guest_devs
++;
5221 if (!strcmp(device
, "none")) {
5222 /* does nothing. It is needed to signal that no network cards
5227 if (!strcmp(device
, "user")) {
5228 if (get_param_value(buf
, sizeof(buf
), "hostname", p
)) {
5229 pstrcpy(slirp_hostname
, sizeof(slirp_hostname
), buf
);
5231 vlan
->nb_host_devs
++;
5232 ret
= net_slirp_init(vlan
);
5236 if (!strcmp(device
, "tap")) {
5238 if (get_param_value(ifname
, sizeof(ifname
), "ifname", p
) <= 0) {
5239 fprintf(stderr
, "tap: no interface name\n");
5242 vlan
->nb_host_devs
++;
5243 ret
= tap_win32_init(vlan
, ifname
);
5246 if (!strcmp(device
, "tap")) {
5248 char setup_script
[1024], down_script
[1024];
5250 vlan
->nb_host_devs
++;
5251 if (get_param_value(buf
, sizeof(buf
), "fd", p
) > 0) {
5252 fd
= strtol(buf
, NULL
, 0);
5253 fcntl(fd
, F_SETFL
, O_NONBLOCK
);
5255 if (net_tap_fd_init(vlan
, fd
))
5258 if (get_param_value(ifname
, sizeof(ifname
), "ifname", p
) <= 0) {
5261 if (get_param_value(setup_script
, sizeof(setup_script
), "script", p
) == 0) {
5262 pstrcpy(setup_script
, sizeof(setup_script
), DEFAULT_NETWORK_SCRIPT
);
5264 if (get_param_value(down_script
, sizeof(down_script
), "downscript", p
) == 0) {
5265 pstrcpy(down_script
, sizeof(down_script
), DEFAULT_NETWORK_DOWN_SCRIPT
);
5267 ret
= net_tap_init(vlan
, ifname
, setup_script
, down_script
);
5271 if (!strcmp(device
, "socket")) {
5272 if (get_param_value(buf
, sizeof(buf
), "fd", p
) > 0) {
5274 fd
= strtol(buf
, NULL
, 0);
5276 if (net_socket_fd_init(vlan
, fd
, 1))
5278 } else if (get_param_value(buf
, sizeof(buf
), "listen", p
) > 0) {
5279 ret
= net_socket_listen_init(vlan
, buf
);
5280 } else if (get_param_value(buf
, sizeof(buf
), "connect", p
) > 0) {
5281 ret
= net_socket_connect_init(vlan
, buf
);
5282 } else if (get_param_value(buf
, sizeof(buf
), "mcast", p
) > 0) {
5283 ret
= net_socket_mcast_init(vlan
, buf
);
5285 fprintf(stderr
, "Unknown socket options: %s\n", p
);
5288 vlan
->nb_host_devs
++;
5291 if (!strcmp(device
, "vde")) {
5292 char vde_sock
[1024], vde_group
[512];
5293 int vde_port
, vde_mode
;
5294 vlan
->nb_host_devs
++;
5295 if (get_param_value(vde_sock
, sizeof(vde_sock
), "sock", p
) <= 0) {
5298 if (get_param_value(buf
, sizeof(buf
), "port", p
) > 0) {
5299 vde_port
= strtol(buf
, NULL
, 10);
5303 if (get_param_value(vde_group
, sizeof(vde_group
), "group", p
) <= 0) {
5304 vde_group
[0] = '\0';
5306 if (get_param_value(buf
, sizeof(buf
), "mode", p
) > 0) {
5307 vde_mode
= strtol(buf
, NULL
, 8);
5311 ret
= net_vde_init(vlan
, vde_sock
, vde_port
, vde_group
, vde_mode
);
5315 fprintf(stderr
, "Unknown network device: %s\n", device
);
5319 fprintf(stderr
, "Could not initialize device '%s'\n", device
);
5325 static int net_client_parse(const char *str
)
5333 while (*p
!= '\0' && *p
!= ',') {
5334 if ((q
- device
) < sizeof(device
) - 1)
5342 return net_client_init(device
, p
);
5345 void do_info_network(void)
5348 VLANClientState
*vc
;
5350 for(vlan
= first_vlan
; vlan
!= NULL
; vlan
= vlan
->next
) {
5351 term_printf("VLAN %d devices:\n", vlan
->id
);
5352 for(vc
= vlan
->first_client
; vc
!= NULL
; vc
= vc
->next
)
5353 term_printf(" %s\n", vc
->info_str
);
5357 #define HD_ALIAS "index=%d,media=disk"
5359 #define CDROM_ALIAS "index=1,media=cdrom"
5361 #define CDROM_ALIAS "index=2,media=cdrom"
5363 #define FD_ALIAS "index=%d,if=floppy"
5364 #define PFLASH_ALIAS "if=pflash"
5365 #define MTD_ALIAS "if=mtd"
5366 #define SD_ALIAS "index=0,if=sd"
5368 static int drive_add(const char *file
, const char *fmt
, ...)
5372 if (nb_drives_opt
>= MAX_DRIVES
) {
5373 fprintf(stderr
, "qemu: too many drives\n");
5377 drives_opt
[nb_drives_opt
].file
= file
;
5379 vsnprintf(drives_opt
[nb_drives_opt
].opt
,
5380 sizeof(drives_opt
[0].opt
), fmt
, ap
);
5383 return nb_drives_opt
++;
5386 int drive_get_index(BlockInterfaceType type
, int bus
, int unit
)
5390 /* seek interface, bus and unit */
5392 for (index
= 0; index
< nb_drives
; index
++)
5393 if (drives_table
[index
].type
== type
&&
5394 drives_table
[index
].bus
== bus
&&
5395 drives_table
[index
].unit
== unit
)
5401 int drive_get_max_bus(BlockInterfaceType type
)
5407 for (index
= 0; index
< nb_drives
; index
++) {
5408 if(drives_table
[index
].type
== type
&&
5409 drives_table
[index
].bus
> max_bus
)
5410 max_bus
= drives_table
[index
].bus
;
5415 static void bdrv_format_print(void *opaque
, const char *name
)
5417 fprintf(stderr
, " %s", name
);
5420 static int drive_init(struct drive_opt
*arg
, int snapshot
,
5421 QEMUMachine
*machine
)
5426 const char *mediastr
= "";
5427 BlockInterfaceType type
;
5428 enum { MEDIA_DISK
, MEDIA_CDROM
} media
;
5429 int bus_id
, unit_id
;
5430 int cyls
, heads
, secs
, translation
;
5431 BlockDriverState
*bdrv
;
5432 BlockDriver
*drv
= NULL
;
5437 char *str
= arg
->opt
;
5438 char *params
[] = { "bus", "unit", "if", "index", "cyls", "heads",
5439 "secs", "trans", "media", "snapshot", "file",
5440 "cache", "format", NULL
};
5442 if (check_params(buf
, sizeof(buf
), params
, str
) < 0) {
5443 fprintf(stderr
, "qemu: unknown parameter '%s' in '%s'\n",
5449 cyls
= heads
= secs
= 0;
5452 translation
= BIOS_ATA_TRANSLATION_AUTO
;
5456 if (!strcmp(machine
->name
, "realview") ||
5457 !strcmp(machine
->name
, "SS-5") ||
5458 !strcmp(machine
->name
, "SS-10") ||
5459 !strcmp(machine
->name
, "SS-600MP") ||
5460 !strcmp(machine
->name
, "versatilepb") ||
5461 !strcmp(machine
->name
, "versatileab")) {
5463 max_devs
= MAX_SCSI_DEVS
;
5464 strcpy(devname
, "scsi");
5467 max_devs
= MAX_IDE_DEVS
;
5468 strcpy(devname
, "ide");
5472 /* extract parameters */
5474 if (get_param_value(buf
, sizeof(buf
), "bus", str
)) {
5475 bus_id
= strtol(buf
, NULL
, 0);
5477 fprintf(stderr
, "qemu: '%s' invalid bus id\n", str
);
5482 if (get_param_value(buf
, sizeof(buf
), "unit", str
)) {
5483 unit_id
= strtol(buf
, NULL
, 0);
5485 fprintf(stderr
, "qemu: '%s' invalid unit id\n", str
);
5490 if (get_param_value(buf
, sizeof(buf
), "if", str
)) {
5491 pstrcpy(devname
, sizeof(devname
), buf
);
5492 if (!strcmp(buf
, "ide")) {
5494 max_devs
= MAX_IDE_DEVS
;
5495 } else if (!strcmp(buf
, "scsi")) {
5497 max_devs
= MAX_SCSI_DEVS
;
5498 } else if (!strcmp(buf
, "floppy")) {
5501 } else if (!strcmp(buf
, "pflash")) {
5504 } else if (!strcmp(buf
, "mtd")) {
5507 } else if (!strcmp(buf
, "sd")) {
5511 fprintf(stderr
, "qemu: '%s' unsupported bus type '%s'\n", str
, buf
);
5516 if (get_param_value(buf
, sizeof(buf
), "index", str
)) {
5517 index
= strtol(buf
, NULL
, 0);
5519 fprintf(stderr
, "qemu: '%s' invalid index\n", str
);
5524 if (get_param_value(buf
, sizeof(buf
), "cyls", str
)) {
5525 cyls
= strtol(buf
, NULL
, 0);
5528 if (get_param_value(buf
, sizeof(buf
), "heads", str
)) {
5529 heads
= strtol(buf
, NULL
, 0);
5532 if (get_param_value(buf
, sizeof(buf
), "secs", str
)) {
5533 secs
= strtol(buf
, NULL
, 0);
5536 if (cyls
|| heads
|| secs
) {
5537 if (cyls
< 1 || cyls
> 16383) {
5538 fprintf(stderr
, "qemu: '%s' invalid physical cyls number\n", str
);
5541 if (heads
< 1 || heads
> 16) {
5542 fprintf(stderr
, "qemu: '%s' invalid physical heads number\n", str
);
5545 if (secs
< 1 || secs
> 63) {
5546 fprintf(stderr
, "qemu: '%s' invalid physical secs number\n", str
);
5551 if (get_param_value(buf
, sizeof(buf
), "trans", str
)) {
5554 "qemu: '%s' trans must be used with cyls,heads and secs\n",
5558 if (!strcmp(buf
, "none"))
5559 translation
= BIOS_ATA_TRANSLATION_NONE
;
5560 else if (!strcmp(buf
, "lba"))
5561 translation
= BIOS_ATA_TRANSLATION_LBA
;
5562 else if (!strcmp(buf
, "auto"))
5563 translation
= BIOS_ATA_TRANSLATION_AUTO
;
5565 fprintf(stderr
, "qemu: '%s' invalid translation type\n", str
);
5570 if (get_param_value(buf
, sizeof(buf
), "media", str
)) {
5571 if (!strcmp(buf
, "disk")) {
5573 } else if (!strcmp(buf
, "cdrom")) {
5574 if (cyls
|| secs
|| heads
) {
5576 "qemu: '%s' invalid physical CHS format\n", str
);
5579 media
= MEDIA_CDROM
;
5581 fprintf(stderr
, "qemu: '%s' invalid media\n", str
);
5586 if (get_param_value(buf
, sizeof(buf
), "snapshot", str
)) {
5587 if (!strcmp(buf
, "on"))
5589 else if (!strcmp(buf
, "off"))
5592 fprintf(stderr
, "qemu: '%s' invalid snapshot option\n", str
);
5597 if (get_param_value(buf
, sizeof(buf
), "cache", str
)) {
5598 if (!strcmp(buf
, "off"))
5600 else if (!strcmp(buf
, "on"))
5603 fprintf(stderr
, "qemu: invalid cache option\n");
5608 if (get_param_value(buf
, sizeof(buf
), "format", str
)) {
5609 if (strcmp(buf
, "?") == 0) {
5610 fprintf(stderr
, "qemu: Supported formats:");
5611 bdrv_iterate_format(bdrv_format_print
, NULL
);
5612 fprintf(stderr
, "\n");
5615 drv
= bdrv_find_format(buf
);
5617 fprintf(stderr
, "qemu: '%s' invalid format\n", buf
);
5622 if (arg
->file
== NULL
)
5623 get_param_value(file
, sizeof(file
), "file", str
);
5625 pstrcpy(file
, sizeof(file
), arg
->file
);
5627 /* compute bus and unit according index */
5630 if (bus_id
!= 0 || unit_id
!= -1) {
5632 "qemu: '%s' index cannot be used with bus and unit\n", str
);
5640 unit_id
= index
% max_devs
;
5641 bus_id
= index
/ max_devs
;
5645 /* if user doesn't specify a unit_id,
5646 * try to find the first free
5649 if (unit_id
== -1) {
5651 while (drive_get_index(type
, bus_id
, unit_id
) != -1) {
5653 if (max_devs
&& unit_id
>= max_devs
) {
5654 unit_id
-= max_devs
;
5662 if (max_devs
&& unit_id
>= max_devs
) {
5663 fprintf(stderr
, "qemu: '%s' unit %d too big (max is %d)\n",
5664 str
, unit_id
, max_devs
- 1);
5669 * ignore multiple definitions
5672 if (drive_get_index(type
, bus_id
, unit_id
) != -1)
5677 if (type
== IF_IDE
|| type
== IF_SCSI
)
5678 mediastr
= (media
== MEDIA_CDROM
) ? "-cd" : "-hd";
5680 snprintf(buf
, sizeof(buf
), "%s%i%s%i",
5681 devname
, bus_id
, mediastr
, unit_id
);
5683 snprintf(buf
, sizeof(buf
), "%s%s%i",
5684 devname
, mediastr
, unit_id
);
5685 bdrv
= bdrv_new(buf
);
5686 drives_table
[nb_drives
].bdrv
= bdrv
;
5687 drives_table
[nb_drives
].type
= type
;
5688 drives_table
[nb_drives
].bus
= bus_id
;
5689 drives_table
[nb_drives
].unit
= unit_id
;
5698 bdrv_set_geometry_hint(bdrv
, cyls
, heads
, secs
);
5699 bdrv_set_translation_hint(bdrv
, translation
);
5703 bdrv_set_type_hint(bdrv
, BDRV_TYPE_CDROM
);
5708 /* FIXME: This isn't really a floppy, but it's a reasonable
5711 bdrv_set_type_hint(bdrv
, BDRV_TYPE_FLOPPY
);
5721 bdrv_flags
|= BDRV_O_SNAPSHOT
;
5723 bdrv_flags
|= BDRV_O_DIRECT
;
5724 if (bdrv_open2(bdrv
, file
, bdrv_flags
, drv
) < 0 || qemu_key_check(bdrv
, file
)) {
5725 fprintf(stderr
, "qemu: could not open disk image %s\n",
5732 /***********************************************************/
5735 static USBPort
*used_usb_ports
;
5736 static USBPort
*free_usb_ports
;
5738 /* ??? Maybe change this to register a hub to keep track of the topology. */
5739 void qemu_register_usb_port(USBPort
*port
, void *opaque
, int index
,
5740 usb_attachfn attach
)
5742 port
->opaque
= opaque
;
5743 port
->index
= index
;
5744 port
->attach
= attach
;
5745 port
->next
= free_usb_ports
;
5746 free_usb_ports
= port
;
5749 static int usb_device_add(const char *devname
)
5755 if (!free_usb_ports
)
5758 if (strstart(devname
, "host:", &p
)) {
5759 dev
= usb_host_device_open(p
);
5760 } else if (!strcmp(devname
, "mouse")) {
5761 dev
= usb_mouse_init();
5762 } else if (!strcmp(devname
, "tablet")) {
5763 dev
= usb_tablet_init();
5764 } else if (!strcmp(devname
, "keyboard")) {
5765 dev
= usb_keyboard_init();
5766 } else if (strstart(devname
, "disk:", &p
)) {
5767 dev
= usb_msd_init(p
);
5768 } else if (!strcmp(devname
, "wacom-tablet")) {
5769 dev
= usb_wacom_init();
5770 } else if (strstart(devname
, "serial:", &p
)) {
5771 dev
= usb_serial_init(p
);
5772 #ifdef CONFIG_BRLAPI
5773 } else if (!strcmp(devname
, "braille")) {
5774 dev
= usb_baum_init();
5776 } else if (strstart(devname
, "net:", &p
)) {
5779 if (net_client_init("nic", p
) < 0)
5781 nd_table
[nic
].model
= "usb";
5782 dev
= usb_net_init(&nd_table
[nic
]);
5789 /* Find a USB port to add the device to. */
5790 port
= free_usb_ports
;
5794 /* Create a new hub and chain it on. */
5795 free_usb_ports
= NULL
;
5796 port
->next
= used_usb_ports
;
5797 used_usb_ports
= port
;
5799 hub
= usb_hub_init(VM_USB_HUB_SIZE
);
5800 usb_attach(port
, hub
);
5801 port
= free_usb_ports
;
5804 free_usb_ports
= port
->next
;
5805 port
->next
= used_usb_ports
;
5806 used_usb_ports
= port
;
5807 usb_attach(port
, dev
);
5811 static int usb_device_del(const char *devname
)
5819 if (!used_usb_ports
)
5822 p
= strchr(devname
, '.');
5825 bus_num
= strtoul(devname
, NULL
, 0);
5826 addr
= strtoul(p
+ 1, NULL
, 0);
5830 lastp
= &used_usb_ports
;
5831 port
= used_usb_ports
;
5832 while (port
&& port
->dev
->addr
!= addr
) {
5833 lastp
= &port
->next
;
5841 *lastp
= port
->next
;
5842 usb_attach(port
, NULL
);
5843 dev
->handle_destroy(dev
);
5844 port
->next
= free_usb_ports
;
5845 free_usb_ports
= port
;
5849 void do_usb_add(const char *devname
)
5852 ret
= usb_device_add(devname
);
5854 term_printf("Could not add USB device '%s'\n", devname
);
5857 void do_usb_del(const char *devname
)
5860 ret
= usb_device_del(devname
);
5862 term_printf("Could not remove USB device '%s'\n", devname
);
5869 const char *speed_str
;
5872 term_printf("USB support not enabled\n");
5876 for (port
= used_usb_ports
; port
; port
= port
->next
) {
5880 switch(dev
->speed
) {
5884 case USB_SPEED_FULL
:
5887 case USB_SPEED_HIGH
:
5894 term_printf(" Device %d.%d, Speed %s Mb/s, Product %s\n",
5895 0, dev
->addr
, speed_str
, dev
->devname
);
5899 /***********************************************************/
5900 /* PCMCIA/Cardbus */
5902 static struct pcmcia_socket_entry_s
{
5903 struct pcmcia_socket_s
*socket
;
5904 struct pcmcia_socket_entry_s
*next
;
5905 } *pcmcia_sockets
= 0;
5907 void pcmcia_socket_register(struct pcmcia_socket_s
*socket
)
5909 struct pcmcia_socket_entry_s
*entry
;
5911 entry
= qemu_malloc(sizeof(struct pcmcia_socket_entry_s
));
5912 entry
->socket
= socket
;
5913 entry
->next
= pcmcia_sockets
;
5914 pcmcia_sockets
= entry
;
5917 void pcmcia_socket_unregister(struct pcmcia_socket_s
*socket
)
5919 struct pcmcia_socket_entry_s
*entry
, **ptr
;
5921 ptr
= &pcmcia_sockets
;
5922 for (entry
= *ptr
; entry
; ptr
= &entry
->next
, entry
= *ptr
)
5923 if (entry
->socket
== socket
) {
5929 void pcmcia_info(void)
5931 struct pcmcia_socket_entry_s
*iter
;
5932 if (!pcmcia_sockets
)
5933 term_printf("No PCMCIA sockets\n");
5935 for (iter
= pcmcia_sockets
; iter
; iter
= iter
->next
)
5936 term_printf("%s: %s\n", iter
->socket
->slot_string
,
5937 iter
->socket
->attached
? iter
->socket
->card_string
:
5941 /***********************************************************/
5944 static void dumb_update(DisplayState
*ds
, int x
, int y
, int w
, int h
)
5948 static void dumb_resize(DisplayState
*ds
, int w
, int h
)
5952 static void dumb_refresh(DisplayState
*ds
)
5954 #if defined(CONFIG_SDL)
5959 static void dumb_display_init(DisplayState
*ds
)
5964 ds
->dpy_update
= dumb_update
;
5965 ds
->dpy_resize
= dumb_resize
;
5966 ds
->dpy_refresh
= dumb_refresh
;
5969 /***********************************************************/
5972 #define MAX_IO_HANDLERS 64
5974 typedef struct IOHandlerRecord
{
5976 IOCanRWHandler
*fd_read_poll
;
5978 IOHandler
*fd_write
;
5981 /* temporary data */
5983 struct IOHandlerRecord
*next
;
5986 static IOHandlerRecord
*first_io_handler
;
5988 /* XXX: fd_read_poll should be suppressed, but an API change is
5989 necessary in the character devices to suppress fd_can_read(). */
5990 int qemu_set_fd_handler2(int fd
,
5991 IOCanRWHandler
*fd_read_poll
,
5993 IOHandler
*fd_write
,
5996 IOHandlerRecord
**pioh
, *ioh
;
5998 if (!fd_read
&& !fd_write
) {
5999 pioh
= &first_io_handler
;
6004 if (ioh
->fd
== fd
) {
6011 for(ioh
= first_io_handler
; ioh
!= NULL
; ioh
= ioh
->next
) {
6015 ioh
= qemu_mallocz(sizeof(IOHandlerRecord
));
6018 ioh
->next
= first_io_handler
;
6019 first_io_handler
= ioh
;
6022 ioh
->fd_read_poll
= fd_read_poll
;
6023 ioh
->fd_read
= fd_read
;
6024 ioh
->fd_write
= fd_write
;
6025 ioh
->opaque
= opaque
;
6031 int qemu_set_fd_handler(int fd
,
6033 IOHandler
*fd_write
,
6036 return qemu_set_fd_handler2(fd
, NULL
, fd_read
, fd_write
, opaque
);
6039 /***********************************************************/
6040 /* Polling handling */
6042 typedef struct PollingEntry
{
6045 struct PollingEntry
*next
;
6048 static PollingEntry
*first_polling_entry
;
6050 int qemu_add_polling_cb(PollingFunc
*func
, void *opaque
)
6052 PollingEntry
**ppe
, *pe
;
6053 pe
= qemu_mallocz(sizeof(PollingEntry
));
6057 pe
->opaque
= opaque
;
6058 for(ppe
= &first_polling_entry
; *ppe
!= NULL
; ppe
= &(*ppe
)->next
);
6063 void qemu_del_polling_cb(PollingFunc
*func
, void *opaque
)
6065 PollingEntry
**ppe
, *pe
;
6066 for(ppe
= &first_polling_entry
; *ppe
!= NULL
; ppe
= &(*ppe
)->next
) {
6068 if (pe
->func
== func
&& pe
->opaque
== opaque
) {
6077 /***********************************************************/
6078 /* Wait objects support */
6079 typedef struct WaitObjects
{
6081 HANDLE events
[MAXIMUM_WAIT_OBJECTS
+ 1];
6082 WaitObjectFunc
*func
[MAXIMUM_WAIT_OBJECTS
+ 1];
6083 void *opaque
[MAXIMUM_WAIT_OBJECTS
+ 1];
6086 static WaitObjects wait_objects
= {0};
6088 int qemu_add_wait_object(HANDLE handle
, WaitObjectFunc
*func
, void *opaque
)
6090 WaitObjects
*w
= &wait_objects
;
6092 if (w
->num
>= MAXIMUM_WAIT_OBJECTS
)
6094 w
->events
[w
->num
] = handle
;
6095 w
->func
[w
->num
] = func
;
6096 w
->opaque
[w
->num
] = opaque
;
6101 void qemu_del_wait_object(HANDLE handle
, WaitObjectFunc
*func
, void *opaque
)
6104 WaitObjects
*w
= &wait_objects
;
6107 for (i
= 0; i
< w
->num
; i
++) {
6108 if (w
->events
[i
] == handle
)
6111 w
->events
[i
] = w
->events
[i
+ 1];
6112 w
->func
[i
] = w
->func
[i
+ 1];
6113 w
->opaque
[i
] = w
->opaque
[i
+ 1];
6121 /***********************************************************/
6122 /* savevm/loadvm support */
6124 #define IO_BUF_SIZE 32768
6128 BlockDriverState
*bs
;
6131 int64_t base_offset
;
6132 int64_t buf_offset
; /* start of buffer when writing, end of buffer
6135 int buf_size
; /* 0 when writing */
6136 uint8_t buf
[IO_BUF_SIZE
];
6139 QEMUFile
*qemu_fopen(const char *filename
, const char *mode
)
6143 f
= qemu_mallocz(sizeof(QEMUFile
));
6146 if (!strcmp(mode
, "wb")) {
6148 } else if (!strcmp(mode
, "rb")) {
6153 f
->outfile
= fopen(filename
, mode
);
6165 static QEMUFile
*qemu_fopen_bdrv(BlockDriverState
*bs
, int64_t offset
, int is_writable
)
6169 f
= qemu_mallocz(sizeof(QEMUFile
));
6174 f
->is_writable
= is_writable
;
6175 f
->base_offset
= offset
;
6179 void qemu_fflush(QEMUFile
*f
)
6181 if (!f
->is_writable
)
6183 if (f
->buf_index
> 0) {
6185 fseek(f
->outfile
, f
->buf_offset
, SEEK_SET
);
6186 fwrite(f
->buf
, 1, f
->buf_index
, f
->outfile
);
6188 bdrv_pwrite(f
->bs
, f
->base_offset
+ f
->buf_offset
,
6189 f
->buf
, f
->buf_index
);
6191 f
->buf_offset
+= f
->buf_index
;
6196 static void qemu_fill_buffer(QEMUFile
*f
)
6203 fseek(f
->outfile
, f
->buf_offset
, SEEK_SET
);
6204 len
= fread(f
->buf
, 1, IO_BUF_SIZE
, f
->outfile
);
6208 len
= bdrv_pread(f
->bs
, f
->base_offset
+ f
->buf_offset
,
6209 f
->buf
, IO_BUF_SIZE
);
6215 f
->buf_offset
+= len
;
6218 void qemu_fclose(QEMUFile
*f
)
6228 void qemu_put_buffer(QEMUFile
*f
, const uint8_t *buf
, int size
)
6232 l
= IO_BUF_SIZE
- f
->buf_index
;
6235 memcpy(f
->buf
+ f
->buf_index
, buf
, l
);
6239 if (f
->buf_index
>= IO_BUF_SIZE
)
6244 void qemu_put_byte(QEMUFile
*f
, int v
)
6246 f
->buf
[f
->buf_index
++] = v
;
6247 if (f
->buf_index
>= IO_BUF_SIZE
)
6251 int qemu_get_buffer(QEMUFile
*f
, uint8_t *buf
, int size1
)
6257 l
= f
->buf_size
- f
->buf_index
;
6259 qemu_fill_buffer(f
);
6260 l
= f
->buf_size
- f
->buf_index
;
6266 memcpy(buf
, f
->buf
+ f
->buf_index
, l
);
6271 return size1
- size
;
6274 int qemu_get_byte(QEMUFile
*f
)
6276 if (f
->buf_index
>= f
->buf_size
) {
6277 qemu_fill_buffer(f
);
6278 if (f
->buf_index
>= f
->buf_size
)
6281 return f
->buf
[f
->buf_index
++];
6284 int64_t qemu_ftell(QEMUFile
*f
)
6286 return f
->buf_offset
- f
->buf_size
+ f
->buf_index
;
6289 int64_t qemu_fseek(QEMUFile
*f
, int64_t pos
, int whence
)
6291 if (whence
== SEEK_SET
) {
6293 } else if (whence
== SEEK_CUR
) {
6294 pos
+= qemu_ftell(f
);
6296 /* SEEK_END not supported */
6299 if (f
->is_writable
) {
6301 f
->buf_offset
= pos
;
6303 f
->buf_offset
= pos
;
6310 void qemu_put_be16(QEMUFile
*f
, unsigned int v
)
6312 qemu_put_byte(f
, v
>> 8);
6313 qemu_put_byte(f
, v
);
6316 void qemu_put_be32(QEMUFile
*f
, unsigned int v
)
6318 qemu_put_byte(f
, v
>> 24);
6319 qemu_put_byte(f
, v
>> 16);
6320 qemu_put_byte(f
, v
>> 8);
6321 qemu_put_byte(f
, v
);
6324 void qemu_put_be64(QEMUFile
*f
, uint64_t v
)
6326 qemu_put_be32(f
, v
>> 32);
6327 qemu_put_be32(f
, v
);
6330 unsigned int qemu_get_be16(QEMUFile
*f
)
6333 v
= qemu_get_byte(f
) << 8;
6334 v
|= qemu_get_byte(f
);
6338 unsigned int qemu_get_be32(QEMUFile
*f
)
6341 v
= qemu_get_byte(f
) << 24;
6342 v
|= qemu_get_byte(f
) << 16;
6343 v
|= qemu_get_byte(f
) << 8;
6344 v
|= qemu_get_byte(f
);
6348 uint64_t qemu_get_be64(QEMUFile
*f
)
6351 v
= (uint64_t)qemu_get_be32(f
) << 32;
6352 v
|= qemu_get_be32(f
);
6356 typedef struct SaveStateEntry
{
6360 SaveStateHandler
*save_state
;
6361 LoadStateHandler
*load_state
;
6363 struct SaveStateEntry
*next
;
6366 static SaveStateEntry
*first_se
;
6368 /* TODO: Individual devices generally have very little idea about the rest
6369 of the system, so instance_id should be removed/replaced.
6370 Meanwhile pass -1 as instance_id if you do not already have a clearly
6371 distinguishing id for all instances of your device class. */
6372 int register_savevm(const char *idstr
,
6375 SaveStateHandler
*save_state
,
6376 LoadStateHandler
*load_state
,
6379 SaveStateEntry
*se
, **pse
;
6381 se
= qemu_malloc(sizeof(SaveStateEntry
));
6384 pstrcpy(se
->idstr
, sizeof(se
->idstr
), idstr
);
6385 se
->instance_id
= (instance_id
== -1) ? 0 : instance_id
;
6386 se
->version_id
= version_id
;
6387 se
->save_state
= save_state
;
6388 se
->load_state
= load_state
;
6389 se
->opaque
= opaque
;
6392 /* add at the end of list */
6394 while (*pse
!= NULL
) {
6395 if (instance_id
== -1
6396 && strcmp(se
->idstr
, (*pse
)->idstr
) == 0
6397 && se
->instance_id
<= (*pse
)->instance_id
)
6398 se
->instance_id
= (*pse
)->instance_id
+ 1;
6399 pse
= &(*pse
)->next
;
6405 #define QEMU_VM_FILE_MAGIC 0x5145564d
6406 #define QEMU_VM_FILE_VERSION 0x00000002
6408 static int qemu_savevm_state(QEMUFile
*f
)
6412 int64_t cur_pos
, len_pos
, total_len_pos
;
6414 qemu_put_be32(f
, QEMU_VM_FILE_MAGIC
);
6415 qemu_put_be32(f
, QEMU_VM_FILE_VERSION
);
6416 total_len_pos
= qemu_ftell(f
);
6417 qemu_put_be64(f
, 0); /* total size */
6419 for(se
= first_se
; se
!= NULL
; se
= se
->next
) {
6420 if (se
->save_state
== NULL
)
6421 /* this one has a loader only, for backwards compatibility */
6425 len
= strlen(se
->idstr
);
6426 qemu_put_byte(f
, len
);
6427 qemu_put_buffer(f
, (uint8_t *)se
->idstr
, len
);
6429 qemu_put_be32(f
, se
->instance_id
);
6430 qemu_put_be32(f
, se
->version_id
);
6432 /* record size: filled later */
6433 len_pos
= qemu_ftell(f
);
6434 qemu_put_be32(f
, 0);
6435 se
->save_state(f
, se
->opaque
);
6437 /* fill record size */
6438 cur_pos
= qemu_ftell(f
);
6439 len
= cur_pos
- len_pos
- 4;
6440 qemu_fseek(f
, len_pos
, SEEK_SET
);
6441 qemu_put_be32(f
, len
);
6442 qemu_fseek(f
, cur_pos
, SEEK_SET
);
6444 cur_pos
= qemu_ftell(f
);
6445 qemu_fseek(f
, total_len_pos
, SEEK_SET
);
6446 qemu_put_be64(f
, cur_pos
- total_len_pos
- 8);
6447 qemu_fseek(f
, cur_pos
, SEEK_SET
);
6453 static SaveStateEntry
*find_se(const char *idstr
, int instance_id
)
6457 for(se
= first_se
; se
!= NULL
; se
= se
->next
) {
6458 if (!strcmp(se
->idstr
, idstr
) &&
6459 instance_id
== se
->instance_id
)
6465 static int qemu_loadvm_state(QEMUFile
*f
)
6468 int len
, ret
, instance_id
, record_len
, version_id
;
6469 int64_t total_len
, end_pos
, cur_pos
;
6473 v
= qemu_get_be32(f
);
6474 if (v
!= QEMU_VM_FILE_MAGIC
)
6476 v
= qemu_get_be32(f
);
6477 if (v
!= QEMU_VM_FILE_VERSION
) {
6482 total_len
= qemu_get_be64(f
);
6483 end_pos
= total_len
+ qemu_ftell(f
);
6485 if (qemu_ftell(f
) >= end_pos
)
6487 len
= qemu_get_byte(f
);
6488 qemu_get_buffer(f
, (uint8_t *)idstr
, len
);
6490 instance_id
= qemu_get_be32(f
);
6491 version_id
= qemu_get_be32(f
);
6492 record_len
= qemu_get_be32(f
);
6494 printf("idstr=%s instance=0x%x version=%d len=%d\n",
6495 idstr
, instance_id
, version_id
, record_len
);
6497 cur_pos
= qemu_ftell(f
);
6498 se
= find_se(idstr
, instance_id
);
6500 fprintf(stderr
, "qemu: warning: instance 0x%x of device '%s' not present in current VM\n",
6501 instance_id
, idstr
);
6503 ret
= se
->load_state(f
, se
->opaque
, version_id
);
6505 fprintf(stderr
, "qemu: warning: error while loading state for instance 0x%x of device '%s'\n",
6506 instance_id
, idstr
);
6509 /* always seek to exact end of record */
6510 qemu_fseek(f
, cur_pos
+ record_len
, SEEK_SET
);
6517 /* device can contain snapshots */
6518 static int bdrv_can_snapshot(BlockDriverState
*bs
)
6521 !bdrv_is_removable(bs
) &&
6522 !bdrv_is_read_only(bs
));
6525 /* device must be snapshots in order to have a reliable snapshot */
6526 static int bdrv_has_snapshot(BlockDriverState
*bs
)
6529 !bdrv_is_removable(bs
) &&
6530 !bdrv_is_read_only(bs
));
6533 static BlockDriverState
*get_bs_snapshots(void)
6535 BlockDriverState
*bs
;
6539 return bs_snapshots
;
6540 for(i
= 0; i
<= nb_drives
; i
++) {
6541 bs
= drives_table
[i
].bdrv
;
6542 if (bdrv_can_snapshot(bs
))
6551 static int bdrv_snapshot_find(BlockDriverState
*bs
, QEMUSnapshotInfo
*sn_info
,
6554 QEMUSnapshotInfo
*sn_tab
, *sn
;
6558 nb_sns
= bdrv_snapshot_list(bs
, &sn_tab
);
6561 for(i
= 0; i
< nb_sns
; i
++) {
6563 if (!strcmp(sn
->id_str
, name
) || !strcmp(sn
->name
, name
)) {
6573 void do_savevm(const char *name
)
6575 BlockDriverState
*bs
, *bs1
;
6576 QEMUSnapshotInfo sn1
, *sn
= &sn1
, old_sn1
, *old_sn
= &old_sn1
;
6577 int must_delete
, ret
, i
;
6578 BlockDriverInfo bdi1
, *bdi
= &bdi1
;
6580 int saved_vm_running
;
6587 bs
= get_bs_snapshots();
6589 term_printf("No block device can accept snapshots\n");
6593 /* ??? Should this occur after vm_stop? */
6596 saved_vm_running
= vm_running
;
6601 ret
= bdrv_snapshot_find(bs
, old_sn
, name
);
6606 memset(sn
, 0, sizeof(*sn
));
6608 pstrcpy(sn
->name
, sizeof(sn
->name
), old_sn
->name
);
6609 pstrcpy(sn
->id_str
, sizeof(sn
->id_str
), old_sn
->id_str
);
6612 pstrcpy(sn
->name
, sizeof(sn
->name
), name
);
6615 /* fill auxiliary fields */
6618 sn
->date_sec
= tb
.time
;
6619 sn
->date_nsec
= tb
.millitm
* 1000000;
6621 gettimeofday(&tv
, NULL
);
6622 sn
->date_sec
= tv
.tv_sec
;
6623 sn
->date_nsec
= tv
.tv_usec
* 1000;
6625 sn
->vm_clock_nsec
= qemu_get_clock(vm_clock
);
6627 if (bdrv_get_info(bs
, bdi
) < 0 || bdi
->vm_state_offset
<= 0) {
6628 term_printf("Device %s does not support VM state snapshots\n",
6629 bdrv_get_device_name(bs
));
6633 /* save the VM state */
6634 f
= qemu_fopen_bdrv(bs
, bdi
->vm_state_offset
, 1);
6636 term_printf("Could not open VM state file\n");
6639 ret
= qemu_savevm_state(f
);
6640 sn
->vm_state_size
= qemu_ftell(f
);
6643 term_printf("Error %d while writing VM\n", ret
);
6647 /* create the snapshots */
6649 for(i
= 0; i
< nb_drives
; i
++) {
6650 bs1
= drives_table
[i
].bdrv
;
6651 if (bdrv_has_snapshot(bs1
)) {
6653 ret
= bdrv_snapshot_delete(bs1
, old_sn
->id_str
);
6655 term_printf("Error while deleting snapshot on '%s'\n",
6656 bdrv_get_device_name(bs1
));
6659 ret
= bdrv_snapshot_create(bs1
, sn
);
6661 term_printf("Error while creating snapshot on '%s'\n",
6662 bdrv_get_device_name(bs1
));
6668 if (saved_vm_running
)
6672 void do_loadvm(const char *name
)
6674 BlockDriverState
*bs
, *bs1
;
6675 BlockDriverInfo bdi1
, *bdi
= &bdi1
;
6678 int saved_vm_running
;
6680 bs
= get_bs_snapshots();
6682 term_printf("No block device supports snapshots\n");
6686 /* Flush all IO requests so they don't interfere with the new state. */
6689 saved_vm_running
= vm_running
;
6692 for(i
= 0; i
<= nb_drives
; i
++) {
6693 bs1
= drives_table
[i
].bdrv
;
6694 if (bdrv_has_snapshot(bs1
)) {
6695 ret
= bdrv_snapshot_goto(bs1
, name
);
6698 term_printf("Warning: ");
6701 term_printf("Snapshots not supported on device '%s'\n",
6702 bdrv_get_device_name(bs1
));
6705 term_printf("Could not find snapshot '%s' on device '%s'\n",
6706 name
, bdrv_get_device_name(bs1
));
6709 term_printf("Error %d while activating snapshot on '%s'\n",
6710 ret
, bdrv_get_device_name(bs1
));
6713 /* fatal on snapshot block device */
6720 if (bdrv_get_info(bs
, bdi
) < 0 || bdi
->vm_state_offset
<= 0) {
6721 term_printf("Device %s does not support VM state snapshots\n",
6722 bdrv_get_device_name(bs
));
6726 /* restore the VM state */
6727 f
= qemu_fopen_bdrv(bs
, bdi
->vm_state_offset
, 0);
6729 term_printf("Could not open VM state file\n");
6732 ret
= qemu_loadvm_state(f
);
6735 term_printf("Error %d while loading VM state\n", ret
);
6738 if (saved_vm_running
)
6742 void do_delvm(const char *name
)
6744 BlockDriverState
*bs
, *bs1
;
6747 bs
= get_bs_snapshots();
6749 term_printf("No block device supports snapshots\n");
6753 for(i
= 0; i
<= nb_drives
; i
++) {
6754 bs1
= drives_table
[i
].bdrv
;
6755 if (bdrv_has_snapshot(bs1
)) {
6756 ret
= bdrv_snapshot_delete(bs1
, name
);
6758 if (ret
== -ENOTSUP
)
6759 term_printf("Snapshots not supported on device '%s'\n",
6760 bdrv_get_device_name(bs1
));
6762 term_printf("Error %d while deleting snapshot on '%s'\n",
6763 ret
, bdrv_get_device_name(bs1
));
6769 void do_info_snapshots(void)
6771 BlockDriverState
*bs
, *bs1
;
6772 QEMUSnapshotInfo
*sn_tab
, *sn
;
6776 bs
= get_bs_snapshots();
6778 term_printf("No available block device supports snapshots\n");
6781 term_printf("Snapshot devices:");
6782 for(i
= 0; i
<= nb_drives
; i
++) {
6783 bs1
= drives_table
[i
].bdrv
;
6784 if (bdrv_has_snapshot(bs1
)) {
6786 term_printf(" %s", bdrv_get_device_name(bs1
));
6791 nb_sns
= bdrv_snapshot_list(bs
, &sn_tab
);
6793 term_printf("bdrv_snapshot_list: error %d\n", nb_sns
);
6796 term_printf("Snapshot list (from %s):\n", bdrv_get_device_name(bs
));
6797 term_printf("%s\n", bdrv_snapshot_dump(buf
, sizeof(buf
), NULL
));
6798 for(i
= 0; i
< nb_sns
; i
++) {
6800 term_printf("%s\n", bdrv_snapshot_dump(buf
, sizeof(buf
), sn
));
6805 /***********************************************************/
6806 /* ram save/restore */
6808 static int ram_get_page(QEMUFile
*f
, uint8_t *buf
, int len
)
6812 v
= qemu_get_byte(f
);
6815 if (qemu_get_buffer(f
, buf
, len
) != len
)
6819 v
= qemu_get_byte(f
);
6820 memset(buf
, v
, len
);
6828 static int ram_load_v1(QEMUFile
*f
, void *opaque
)
6833 if (qemu_get_be32(f
) != phys_ram_size
)
6835 for(i
= 0; i
< phys_ram_size
; i
+= TARGET_PAGE_SIZE
) {
6836 ret
= ram_get_page(f
, phys_ram_base
+ i
, TARGET_PAGE_SIZE
);
6843 #define BDRV_HASH_BLOCK_SIZE 1024
6844 #define IOBUF_SIZE 4096
6845 #define RAM_CBLOCK_MAGIC 0xfabe
6847 typedef struct RamCompressState
{
6850 uint8_t buf
[IOBUF_SIZE
];
6853 static int ram_compress_open(RamCompressState
*s
, QEMUFile
*f
)
6856 memset(s
, 0, sizeof(*s
));
6858 ret
= deflateInit2(&s
->zstream
, 1,
6860 9, Z_DEFAULT_STRATEGY
);
6863 s
->zstream
.avail_out
= IOBUF_SIZE
;
6864 s
->zstream
.next_out
= s
->buf
;
6868 static void ram_put_cblock(RamCompressState
*s
, const uint8_t *buf
, int len
)
6870 qemu_put_be16(s
->f
, RAM_CBLOCK_MAGIC
);
6871 qemu_put_be16(s
->f
, len
);
6872 qemu_put_buffer(s
->f
, buf
, len
);
6875 static int ram_compress_buf(RamCompressState
*s
, const uint8_t *buf
, int len
)
6879 s
->zstream
.avail_in
= len
;
6880 s
->zstream
.next_in
= (uint8_t *)buf
;
6881 while (s
->zstream
.avail_in
> 0) {
6882 ret
= deflate(&s
->zstream
, Z_NO_FLUSH
);
6885 if (s
->zstream
.avail_out
== 0) {
6886 ram_put_cblock(s
, s
->buf
, IOBUF_SIZE
);
6887 s
->zstream
.avail_out
= IOBUF_SIZE
;
6888 s
->zstream
.next_out
= s
->buf
;
6894 static void ram_compress_close(RamCompressState
*s
)
6898 /* compress last bytes */
6900 ret
= deflate(&s
->zstream
, Z_FINISH
);
6901 if (ret
== Z_OK
|| ret
== Z_STREAM_END
) {
6902 len
= IOBUF_SIZE
- s
->zstream
.avail_out
;
6904 ram_put_cblock(s
, s
->buf
, len
);
6906 s
->zstream
.avail_out
= IOBUF_SIZE
;
6907 s
->zstream
.next_out
= s
->buf
;
6908 if (ret
== Z_STREAM_END
)
6915 deflateEnd(&s
->zstream
);
6918 typedef struct RamDecompressState
{
6921 uint8_t buf
[IOBUF_SIZE
];
6922 } RamDecompressState
;
6924 static int ram_decompress_open(RamDecompressState
*s
, QEMUFile
*f
)
6927 memset(s
, 0, sizeof(*s
));
6929 ret
= inflateInit(&s
->zstream
);
6935 static int ram_decompress_buf(RamDecompressState
*s
, uint8_t *buf
, int len
)
6939 s
->zstream
.avail_out
= len
;
6940 s
->zstream
.next_out
= buf
;
6941 while (s
->zstream
.avail_out
> 0) {
6942 if (s
->zstream
.avail_in
== 0) {
6943 if (qemu_get_be16(s
->f
) != RAM_CBLOCK_MAGIC
)
6945 clen
= qemu_get_be16(s
->f
);
6946 if (clen
> IOBUF_SIZE
)
6948 qemu_get_buffer(s
->f
, s
->buf
, clen
);
6949 s
->zstream
.avail_in
= clen
;
6950 s
->zstream
.next_in
= s
->buf
;
6952 ret
= inflate(&s
->zstream
, Z_PARTIAL_FLUSH
);
6953 if (ret
!= Z_OK
&& ret
!= Z_STREAM_END
) {
6960 static void ram_decompress_close(RamDecompressState
*s
)
6962 inflateEnd(&s
->zstream
);
6965 static void ram_save(QEMUFile
*f
, void *opaque
)
6968 RamCompressState s1
, *s
= &s1
;
6971 qemu_put_be32(f
, phys_ram_size
);
6972 if (ram_compress_open(s
, f
) < 0)
6974 for(i
= 0; i
< phys_ram_size
; i
+= BDRV_HASH_BLOCK_SIZE
) {
6976 if (tight_savevm_enabled
) {
6980 /* find if the memory block is available on a virtual
6983 for(j
= 0; j
< nb_drives
; j
++) {
6984 sector_num
= bdrv_hash_find(drives_table
[j
].bdrv
,
6986 BDRV_HASH_BLOCK_SIZE
);
6987 if (sector_num
>= 0)
6991 goto normal_compress
;
6994 cpu_to_be64wu((uint64_t *)(buf
+ 2), sector_num
);
6995 ram_compress_buf(s
, buf
, 10);
7001 ram_compress_buf(s
, buf
, 1);
7002 ram_compress_buf(s
, phys_ram_base
+ i
, BDRV_HASH_BLOCK_SIZE
);
7005 ram_compress_close(s
);
7008 static int ram_load(QEMUFile
*f
, void *opaque
, int version_id
)
7010 RamDecompressState s1
, *s
= &s1
;
7014 if (version_id
== 1)
7015 return ram_load_v1(f
, opaque
);
7016 if (version_id
!= 2)
7018 if (qemu_get_be32(f
) != phys_ram_size
)
7020 if (ram_decompress_open(s
, f
) < 0)
7022 for(i
= 0; i
< phys_ram_size
; i
+= BDRV_HASH_BLOCK_SIZE
) {
7023 if (ram_decompress_buf(s
, buf
, 1) < 0) {
7024 fprintf(stderr
, "Error while reading ram block header\n");
7028 if (ram_decompress_buf(s
, phys_ram_base
+ i
, BDRV_HASH_BLOCK_SIZE
) < 0) {
7029 fprintf(stderr
, "Error while reading ram block address=0x%08" PRIx64
, (uint64_t)i
);
7038 ram_decompress_buf(s
, buf
+ 1, 9);
7040 sector_num
= be64_to_cpupu((const uint64_t *)(buf
+ 2));
7041 if (bs_index
>= nb_drives
) {
7042 fprintf(stderr
, "Invalid block device index %d\n", bs_index
);
7045 if (bdrv_read(drives_table
[bs_index
].bdrv
, sector_num
,
7047 BDRV_HASH_BLOCK_SIZE
/ 512) < 0) {
7048 fprintf(stderr
, "Error while reading sector %d:%" PRId64
"\n",
7049 bs_index
, sector_num
);
7056 printf("Error block header\n");
7060 ram_decompress_close(s
);
7064 /***********************************************************/
7065 /* bottom halves (can be seen as timers which expire ASAP) */
7074 static QEMUBH
*first_bh
= NULL
;
7076 QEMUBH
*qemu_bh_new(QEMUBHFunc
*cb
, void *opaque
)
7079 bh
= qemu_mallocz(sizeof(QEMUBH
));
7083 bh
->opaque
= opaque
;
7087 int qemu_bh_poll(void)
7106 void qemu_bh_schedule(QEMUBH
*bh
)
7108 CPUState
*env
= cpu_single_env
;
7112 bh
->next
= first_bh
;
7115 /* stop the currently executing CPU to execute the BH ASAP */
7117 cpu_interrupt(env
, CPU_INTERRUPT_EXIT
);
7121 void qemu_bh_cancel(QEMUBH
*bh
)
7124 if (bh
->scheduled
) {
7127 pbh
= &(*pbh
)->next
;
7133 void qemu_bh_delete(QEMUBH
*bh
)
7139 /***********************************************************/
7140 /* machine registration */
7142 QEMUMachine
*first_machine
= NULL
;
7144 int qemu_register_machine(QEMUMachine
*m
)
7147 pm
= &first_machine
;
7155 static QEMUMachine
*find_machine(const char *name
)
7159 for(m
= first_machine
; m
!= NULL
; m
= m
->next
) {
7160 if (!strcmp(m
->name
, name
))
7166 /***********************************************************/
7167 /* main execution loop */
7169 static void gui_update(void *opaque
)
7171 DisplayState
*ds
= opaque
;
7172 ds
->dpy_refresh(ds
);
7173 qemu_mod_timer(ds
->gui_timer
,
7174 (ds
->gui_timer_interval
?
7175 ds
->gui_timer_interval
:
7176 GUI_REFRESH_INTERVAL
)
7177 + qemu_get_clock(rt_clock
));
7180 struct vm_change_state_entry
{
7181 VMChangeStateHandler
*cb
;
7183 LIST_ENTRY (vm_change_state_entry
) entries
;
7186 static LIST_HEAD(vm_change_state_head
, vm_change_state_entry
) vm_change_state_head
;
7188 VMChangeStateEntry
*qemu_add_vm_change_state_handler(VMChangeStateHandler
*cb
,
7191 VMChangeStateEntry
*e
;
7193 e
= qemu_mallocz(sizeof (*e
));
7199 LIST_INSERT_HEAD(&vm_change_state_head
, e
, entries
);
7203 void qemu_del_vm_change_state_handler(VMChangeStateEntry
*e
)
7205 LIST_REMOVE (e
, entries
);
7209 static void vm_state_notify(int running
)
7211 VMChangeStateEntry
*e
;
7213 for (e
= vm_change_state_head
.lh_first
; e
; e
= e
->entries
.le_next
) {
7214 e
->cb(e
->opaque
, running
);
7218 /* XXX: support several handlers */
7219 static VMStopHandler
*vm_stop_cb
;
7220 static void *vm_stop_opaque
;
7222 int qemu_add_vm_stop_handler(VMStopHandler
*cb
, void *opaque
)
7225 vm_stop_opaque
= opaque
;
7229 void qemu_del_vm_stop_handler(VMStopHandler
*cb
, void *opaque
)
7240 qemu_rearm_alarm_timer(alarm_timer
);
7244 void vm_stop(int reason
)
7247 cpu_disable_ticks();
7251 vm_stop_cb(vm_stop_opaque
, reason
);
7258 /* reset/shutdown handler */
7260 typedef struct QEMUResetEntry
{
7261 QEMUResetHandler
*func
;
7263 struct QEMUResetEntry
*next
;
7266 static QEMUResetEntry
*first_reset_entry
;
7267 static int reset_requested
;
7268 static int shutdown_requested
;
7269 static int powerdown_requested
;
7271 int qemu_shutdown_requested(void)
7273 int r
= shutdown_requested
;
7274 shutdown_requested
= 0;
7278 int qemu_reset_requested(void)
7280 int r
= reset_requested
;
7281 reset_requested
= 0;
7285 int qemu_powerdown_requested(void)
7287 int r
= powerdown_requested
;
7288 powerdown_requested
= 0;
7292 void qemu_register_reset(QEMUResetHandler
*func
, void *opaque
)
7294 QEMUResetEntry
**pre
, *re
;
7296 pre
= &first_reset_entry
;
7297 while (*pre
!= NULL
)
7298 pre
= &(*pre
)->next
;
7299 re
= qemu_mallocz(sizeof(QEMUResetEntry
));
7301 re
->opaque
= opaque
;
7306 void qemu_system_reset(void)
7310 /* reset all devices */
7311 for(re
= first_reset_entry
; re
!= NULL
; re
= re
->next
) {
7312 re
->func(re
->opaque
);
7316 void qemu_system_reset_request(void)
7319 shutdown_requested
= 1;
7321 reset_requested
= 1;
7324 cpu_interrupt(cpu_single_env
, CPU_INTERRUPT_EXIT
);
7327 void qemu_system_shutdown_request(void)
7329 shutdown_requested
= 1;
7331 cpu_interrupt(cpu_single_env
, CPU_INTERRUPT_EXIT
);
7334 void qemu_system_powerdown_request(void)
7336 powerdown_requested
= 1;
7338 cpu_interrupt(cpu_single_env
, CPU_INTERRUPT_EXIT
);
7341 void main_loop_wait(int timeout
)
7343 IOHandlerRecord
*ioh
;
7344 fd_set rfds
, wfds
, xfds
;
7353 /* XXX: need to suppress polling by better using win32 events */
7355 for(pe
= first_polling_entry
; pe
!= NULL
; pe
= pe
->next
) {
7356 ret
|= pe
->func(pe
->opaque
);
7361 WaitObjects
*w
= &wait_objects
;
7363 ret
= WaitForMultipleObjects(w
->num
, w
->events
, FALSE
, timeout
);
7364 if (WAIT_OBJECT_0
+ 0 <= ret
&& ret
<= WAIT_OBJECT_0
+ w
->num
- 1) {
7365 if (w
->func
[ret
- WAIT_OBJECT_0
])
7366 w
->func
[ret
- WAIT_OBJECT_0
](w
->opaque
[ret
- WAIT_OBJECT_0
]);
7368 /* Check for additional signaled events */
7369 for(i
= (ret
- WAIT_OBJECT_0
+ 1); i
< w
->num
; i
++) {
7371 /* Check if event is signaled */
7372 ret2
= WaitForSingleObject(w
->events
[i
], 0);
7373 if(ret2
== WAIT_OBJECT_0
) {
7375 w
->func
[i
](w
->opaque
[i
]);
7376 } else if (ret2
== WAIT_TIMEOUT
) {
7378 err
= GetLastError();
7379 fprintf(stderr
, "WaitForSingleObject error %d %d\n", i
, err
);
7382 } else if (ret
== WAIT_TIMEOUT
) {
7384 err
= GetLastError();
7385 fprintf(stderr
, "WaitForMultipleObjects error %d %d\n", ret
, err
);
7389 /* poll any events */
7390 /* XXX: separate device handlers from system ones */
7395 for(ioh
= first_io_handler
; ioh
!= NULL
; ioh
= ioh
->next
) {
7399 (!ioh
->fd_read_poll
||
7400 ioh
->fd_read_poll(ioh
->opaque
) != 0)) {
7401 FD_SET(ioh
->fd
, &rfds
);
7405 if (ioh
->fd_write
) {
7406 FD_SET(ioh
->fd
, &wfds
);
7416 tv
.tv_usec
= timeout
* 1000;
7418 #if defined(CONFIG_SLIRP)
7420 slirp_select_fill(&nfds
, &rfds
, &wfds
, &xfds
);
7423 ret
= select(nfds
+ 1, &rfds
, &wfds
, &xfds
, &tv
);
7425 IOHandlerRecord
**pioh
;
7427 for(ioh
= first_io_handler
; ioh
!= NULL
; ioh
= ioh
->next
) {
7428 if (!ioh
->deleted
&& ioh
->fd_read
&& FD_ISSET(ioh
->fd
, &rfds
)) {
7429 ioh
->fd_read(ioh
->opaque
);
7431 if (!ioh
->deleted
&& ioh
->fd_write
&& FD_ISSET(ioh
->fd
, &wfds
)) {
7432 ioh
->fd_write(ioh
->opaque
);
7436 /* remove deleted IO handlers */
7437 pioh
= &first_io_handler
;
7447 #if defined(CONFIG_SLIRP)
7454 slirp_select_poll(&rfds
, &wfds
, &xfds
);
7460 if (likely(!(cur_cpu
->singlestep_enabled
& SSTEP_NOTIMER
)))
7461 qemu_run_timers(&active_timers
[QEMU_TIMER_VIRTUAL
],
7462 qemu_get_clock(vm_clock
));
7463 /* run dma transfers, if any */
7467 /* real time timers */
7468 qemu_run_timers(&active_timers
[QEMU_TIMER_REALTIME
],
7469 qemu_get_clock(rt_clock
));
7471 if (alarm_timer
->flags
& ALARM_FLAG_EXPIRED
) {
7472 alarm_timer
->flags
&= ~(ALARM_FLAG_EXPIRED
);
7473 qemu_rearm_alarm_timer(alarm_timer
);
7476 /* Check bottom-halves last in case any of the earlier events triggered
7482 static int main_loop(void)
7485 #ifdef CONFIG_PROFILER
7490 cur_cpu
= first_cpu
;
7491 next_cpu
= cur_cpu
->next_cpu
?: first_cpu
;
7498 #ifdef CONFIG_PROFILER
7499 ti
= profile_getclock();
7504 qemu_icount
-= (env
->icount_decr
.u16
.low
+ env
->icount_extra
);
7505 env
->icount_decr
.u16
.low
= 0;
7506 env
->icount_extra
= 0;
7507 count
= qemu_next_deadline();
7508 count
= (count
+ (1 << icount_time_shift
) - 1)
7509 >> icount_time_shift
;
7510 qemu_icount
+= count
;
7511 decr
= (count
> 0xffff) ? 0xffff : count
;
7513 env
->icount_decr
.u16
.low
= decr
;
7514 env
->icount_extra
= count
;
7516 ret
= cpu_exec(env
);
7517 #ifdef CONFIG_PROFILER
7518 qemu_time
+= profile_getclock() - ti
;
7521 /* Fold pending instructions back into the
7522 instruction counter, and clear the interrupt flag. */
7523 qemu_icount
-= (env
->icount_decr
.u16
.low
7524 + env
->icount_extra
);
7525 env
->icount_decr
.u32
= 0;
7526 env
->icount_extra
= 0;
7528 next_cpu
= env
->next_cpu
?: first_cpu
;
7529 if (event_pending
&& likely(ret
!= EXCP_DEBUG
)) {
7530 ret
= EXCP_INTERRUPT
;
7534 if (ret
== EXCP_HLT
) {
7535 /* Give the next CPU a chance to run. */
7539 if (ret
!= EXCP_HALTED
)
7541 /* all CPUs are halted ? */
7547 if (shutdown_requested
) {
7548 ret
= EXCP_INTERRUPT
;
7556 if (reset_requested
) {
7557 reset_requested
= 0;
7558 qemu_system_reset();
7559 ret
= EXCP_INTERRUPT
;
7561 if (powerdown_requested
) {
7562 powerdown_requested
= 0;
7563 qemu_system_powerdown();
7564 ret
= EXCP_INTERRUPT
;
7566 if (unlikely(ret
== EXCP_DEBUG
)) {
7567 vm_stop(EXCP_DEBUG
);
7569 /* If all cpus are halted then wait until the next IRQ */
7570 /* XXX: use timeout computed from timers */
7571 if (ret
== EXCP_HALTED
) {
7575 /* Advance virtual time to the next event. */
7576 if (use_icount
== 1) {
7577 /* When not using an adaptive execution frequency
7578 we tend to get badly out of sync with real time,
7579 so just delay for a reasonable amount of time. */
7582 delta
= cpu_get_icount() - cpu_get_clock();
7585 /* If virtual time is ahead of real time then just
7587 timeout
= (delta
/ 1000000) + 1;
7589 /* Wait for either IO to occur or the next
7591 add
= qemu_next_deadline();
7592 /* We advance the timer before checking for IO.
7593 Limit the amount we advance so that early IO
7594 activity won't get the guest too far ahead. */
7598 add
= (add
+ (1 << icount_time_shift
) - 1)
7599 >> icount_time_shift
;
7601 timeout
= delta
/ 1000000;
7614 #ifdef CONFIG_PROFILER
7615 ti
= profile_getclock();
7617 main_loop_wait(timeout
);
7618 #ifdef CONFIG_PROFILER
7619 dev_time
+= profile_getclock() - ti
;
7622 cpu_disable_ticks();
7626 static void help(int exitcode
)
7628 printf("QEMU PC emulator version " QEMU_VERSION
", Copyright (c) 2003-2008 Fabrice Bellard\n"
7629 "usage: %s [options] [disk_image]\n"
7631 "'disk_image' is a raw hard image image for IDE hard disk 0\n"
7633 "Standard options:\n"
7634 "-M machine select emulated machine (-M ? for list)\n"
7635 "-cpu cpu select CPU (-cpu ? for list)\n"
7636 "-fda/-fdb file use 'file' as floppy disk 0/1 image\n"
7637 "-hda/-hdb file use 'file' as IDE hard disk 0/1 image\n"
7638 "-hdc/-hdd file use 'file' as IDE hard disk 2/3 image\n"
7639 "-cdrom file use 'file' as IDE cdrom image (cdrom is ide1 master)\n"
7640 "-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]\n"
7641 " [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off]\n"
7642 " [,cache=on|off][,format=f]\n"
7643 " use 'file' as a drive image\n"
7644 "-mtdblock file use 'file' as on-board Flash memory image\n"
7645 "-sd file use 'file' as SecureDigital card image\n"
7646 "-pflash file use 'file' as a parallel flash image\n"
7647 "-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n)\n"
7648 "-snapshot write to temporary files instead of disk image files\n"
7650 "-no-frame open SDL window without a frame and window decorations\n"
7651 "-alt-grab use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt)\n"
7652 "-no-quit disable SDL window close capability\n"
7655 "-no-fd-bootchk disable boot signature checking for floppy disks\n"
7657 "-m megs set virtual RAM size to megs MB [default=%d]\n"
7658 "-smp n set the number of CPUs to 'n' [default=1]\n"
7659 "-nographic disable graphical output and redirect serial I/Os to console\n"
7660 "-portrait rotate graphical output 90 deg left (only PXA LCD)\n"
7662 "-k language use keyboard layout (for example \"fr\" for French)\n"
7665 "-audio-help print list of audio drivers and their options\n"
7666 "-soundhw c1,... enable audio support\n"
7667 " and only specified sound cards (comma separated list)\n"
7668 " use -soundhw ? to get the list of supported cards\n"
7669 " use -soundhw all to enable all of them\n"
7671 "-localtime set the real time clock to local time [default=utc]\n"
7672 "-full-screen start in full screen\n"
7674 "-win2k-hack use it when installing Windows 2000 to avoid a disk full bug\n"
7676 "-usb enable the USB driver (will be the default soon)\n"
7677 "-usbdevice name add the host or guest USB device 'name'\n"
7678 #if defined(TARGET_PPC) || defined(TARGET_SPARC)
7679 "-g WxH[xDEPTH] Set the initial graphical resolution and depth\n"
7681 "-name string set the name of the guest\n"
7683 "Network options:\n"
7684 "-net nic[,vlan=n][,macaddr=addr][,model=type]\n"
7685 " create a new Network Interface Card and connect it to VLAN 'n'\n"
7687 "-net user[,vlan=n][,hostname=host]\n"
7688 " connect the user mode network stack to VLAN 'n' and send\n"
7689 " hostname 'host' to DHCP clients\n"
7692 "-net tap[,vlan=n],ifname=name\n"
7693 " connect the host TAP network interface to VLAN 'n'\n"
7695 "-net tap[,vlan=n][,fd=h][,ifname=name][,script=file][,downscript=dfile]\n"
7696 " connect the host TAP network interface to VLAN 'n' and use the\n"
7697 " network scripts 'file' (default=%s)\n"
7698 " and 'dfile' (default=%s);\n"
7699 " use '[down]script=no' to disable script execution;\n"
7700 " use 'fd=h' to connect to an already opened TAP interface\n"
7702 "-net socket[,vlan=n][,fd=h][,listen=[host]:port][,connect=host:port]\n"
7703 " connect the vlan 'n' to another VLAN using a socket connection\n"
7704 "-net socket[,vlan=n][,fd=h][,mcast=maddr:port]\n"
7705 " connect the vlan 'n' to multicast maddr and port\n"
7707 "-net vde[,vlan=n][,sock=socketpath][,port=n][,group=groupname][,mode=octalmode]\n"
7708 " connect the vlan 'n' to port 'n' of a vde switch running\n"
7709 " on host and listening for incoming connections on 'socketpath'.\n"
7710 " Use group 'groupname' and mode 'octalmode' to change default\n"
7711 " ownership and permissions for communication port.\n"
7713 "-net none use it alone to have zero network devices; if no -net option\n"
7714 " is provided, the default is '-net nic -net user'\n"
7717 "-tftp dir allow tftp access to files in dir [-net user]\n"
7718 "-bootp file advertise file in BOOTP replies\n"
7720 "-smb dir allow SMB access to files in 'dir' [-net user]\n"
7722 "-redir [tcp|udp]:host-port:[guest-host]:guest-port\n"
7723 " redirect TCP or UDP connections from host to guest [-net user]\n"
7726 "Linux boot specific:\n"
7727 "-kernel bzImage use 'bzImage' as kernel image\n"
7728 "-append cmdline use 'cmdline' as kernel command line\n"
7729 "-initrd file use 'file' as initial ram disk\n"
7731 "Debug/Expert options:\n"
7732 "-monitor dev redirect the monitor to char device 'dev'\n"
7733 "-serial dev redirect the serial port to char device 'dev'\n"
7734 "-parallel dev redirect the parallel port to char device 'dev'\n"
7735 "-pidfile file Write PID to 'file'\n"
7736 "-S freeze CPU at startup (use 'c' to start execution)\n"
7737 "-s wait gdb connection to port\n"
7738 "-p port set gdb connection port [default=%s]\n"
7739 "-d item1,... output log to %s (use -d ? for a list of log items)\n"
7740 "-hdachs c,h,s[,t] force hard disk 0 physical geometry and the optional BIOS\n"
7741 " translation (t=none or lba) (usually qemu can guess them)\n"
7742 "-L path set the directory for the BIOS, VGA BIOS and keymaps\n"
7744 "-kernel-kqemu enable KQEMU full virtualization (default is user mode only)\n"
7745 "-no-kqemu disable KQEMU kernel module usage\n"
7748 "-std-vga simulate a standard VGA card with VESA Bochs Extensions\n"
7749 " (default is CL-GD5446 PCI VGA)\n"
7750 "-no-acpi disable ACPI\n"
7752 #ifdef CONFIG_CURSES
7753 "-curses use a curses/ncurses interface instead of SDL\n"
7755 "-no-reboot exit instead of rebooting\n"
7756 "-no-shutdown stop before shutdown\n"
7757 "-loadvm [tag|id] start right away with a saved state (loadvm in monitor)\n"
7758 "-vnc display start a VNC server on display\n"
7760 "-daemonize daemonize QEMU after initializing\n"
7762 "-option-rom rom load a file, rom, into the option ROM space\n"
7764 "-prom-env variable=value set OpenBIOS nvram variables\n"
7766 "-clock force the use of the given methods for timer alarm.\n"
7767 " To see what timers are available use -clock ?\n"
7768 "-startdate select initial date of the clock\n"
7769 "-icount [N|auto]\n"
7770 " Enable virtual instruction counter with 2^N clock ticks per instruction\n"
7772 "During emulation, the following keys are useful:\n"
7773 "ctrl-alt-f toggle full screen\n"
7774 "ctrl-alt-n switch to virtual console 'n'\n"
7775 "ctrl-alt toggle mouse and keyboard grab\n"
7777 "When using -nographic, press 'ctrl-a h' to get some help.\n"
7782 DEFAULT_NETWORK_SCRIPT
,
7783 DEFAULT_NETWORK_DOWN_SCRIPT
,
7785 DEFAULT_GDBSTUB_PORT
,
7790 #define HAS_ARG 0x0001
7805 QEMU_OPTION_mtdblock
,
7809 QEMU_OPTION_snapshot
,
7811 QEMU_OPTION_no_fd_bootchk
,
7814 QEMU_OPTION_nographic
,
7815 QEMU_OPTION_portrait
,
7817 QEMU_OPTION_audio_help
,
7818 QEMU_OPTION_soundhw
,
7839 QEMU_OPTION_localtime
,
7840 QEMU_OPTION_cirrusvga
,
7843 QEMU_OPTION_std_vga
,
7845 QEMU_OPTION_monitor
,
7847 QEMU_OPTION_parallel
,
7849 QEMU_OPTION_full_screen
,
7850 QEMU_OPTION_no_frame
,
7851 QEMU_OPTION_alt_grab
,
7852 QEMU_OPTION_no_quit
,
7853 QEMU_OPTION_pidfile
,
7854 QEMU_OPTION_no_kqemu
,
7855 QEMU_OPTION_kernel_kqemu
,
7856 QEMU_OPTION_win2k_hack
,
7858 QEMU_OPTION_usbdevice
,
7861 QEMU_OPTION_no_acpi
,
7863 QEMU_OPTION_no_reboot
,
7864 QEMU_OPTION_no_shutdown
,
7865 QEMU_OPTION_show_cursor
,
7866 QEMU_OPTION_daemonize
,
7867 QEMU_OPTION_option_rom
,
7868 QEMU_OPTION_semihosting
,
7870 QEMU_OPTION_prom_env
,
7871 QEMU_OPTION_old_param
,
7873 QEMU_OPTION_startdate
,
7874 QEMU_OPTION_tb_size
,
7878 typedef struct QEMUOption
{
7884 const QEMUOption qemu_options
[] = {
7885 { "h", 0, QEMU_OPTION_h
},
7886 { "help", 0, QEMU_OPTION_h
},
7888 { "M", HAS_ARG
, QEMU_OPTION_M
},
7889 { "cpu", HAS_ARG
, QEMU_OPTION_cpu
},
7890 { "fda", HAS_ARG
, QEMU_OPTION_fda
},
7891 { "fdb", HAS_ARG
, QEMU_OPTION_fdb
},
7892 { "hda", HAS_ARG
, QEMU_OPTION_hda
},
7893 { "hdb", HAS_ARG
, QEMU_OPTION_hdb
},
7894 { "hdc", HAS_ARG
, QEMU_OPTION_hdc
},
7895 { "hdd", HAS_ARG
, QEMU_OPTION_hdd
},
7896 { "drive", HAS_ARG
, QEMU_OPTION_drive
},
7897 { "cdrom", HAS_ARG
, QEMU_OPTION_cdrom
},
7898 { "mtdblock", HAS_ARG
, QEMU_OPTION_mtdblock
},
7899 { "sd", HAS_ARG
, QEMU_OPTION_sd
},
7900 { "pflash", HAS_ARG
, QEMU_OPTION_pflash
},
7901 { "boot", HAS_ARG
, QEMU_OPTION_boot
},
7902 { "snapshot", 0, QEMU_OPTION_snapshot
},
7904 { "no-fd-bootchk", 0, QEMU_OPTION_no_fd_bootchk
},
7906 { "m", HAS_ARG
, QEMU_OPTION_m
},
7907 { "nographic", 0, QEMU_OPTION_nographic
},
7908 { "portrait", 0, QEMU_OPTION_portrait
},
7909 { "k", HAS_ARG
, QEMU_OPTION_k
},
7911 { "audio-help", 0, QEMU_OPTION_audio_help
},
7912 { "soundhw", HAS_ARG
, QEMU_OPTION_soundhw
},
7915 { "net", HAS_ARG
, QEMU_OPTION_net
},
7917 { "tftp", HAS_ARG
, QEMU_OPTION_tftp
},
7918 { "bootp", HAS_ARG
, QEMU_OPTION_bootp
},
7920 { "smb", HAS_ARG
, QEMU_OPTION_smb
},
7922 { "redir", HAS_ARG
, QEMU_OPTION_redir
},
7925 { "kernel", HAS_ARG
, QEMU_OPTION_kernel
},
7926 { "append", HAS_ARG
, QEMU_OPTION_append
},
7927 { "initrd", HAS_ARG
, QEMU_OPTION_initrd
},
7929 { "S", 0, QEMU_OPTION_S
},
7930 { "s", 0, QEMU_OPTION_s
},
7931 { "p", HAS_ARG
, QEMU_OPTION_p
},
7932 { "d", HAS_ARG
, QEMU_OPTION_d
},
7933 { "hdachs", HAS_ARG
, QEMU_OPTION_hdachs
},
7934 { "L", HAS_ARG
, QEMU_OPTION_L
},
7935 { "bios", HAS_ARG
, QEMU_OPTION_bios
},
7937 { "no-kqemu", 0, QEMU_OPTION_no_kqemu
},
7938 { "kernel-kqemu", 0, QEMU_OPTION_kernel_kqemu
},
7940 #if defined(TARGET_PPC) || defined(TARGET_SPARC)
7941 { "g", 1, QEMU_OPTION_g
},
7943 { "localtime", 0, QEMU_OPTION_localtime
},
7944 { "std-vga", 0, QEMU_OPTION_std_vga
},
7945 { "echr", HAS_ARG
, QEMU_OPTION_echr
},
7946 { "monitor", HAS_ARG
, QEMU_OPTION_monitor
},
7947 { "serial", HAS_ARG
, QEMU_OPTION_serial
},
7948 { "parallel", HAS_ARG
, QEMU_OPTION_parallel
},
7949 { "loadvm", HAS_ARG
, QEMU_OPTION_loadvm
},
7950 { "full-screen", 0, QEMU_OPTION_full_screen
},
7952 { "no-frame", 0, QEMU_OPTION_no_frame
},
7953 { "alt-grab", 0, QEMU_OPTION_alt_grab
},
7954 { "no-quit", 0, QEMU_OPTION_no_quit
},
7956 { "pidfile", HAS_ARG
, QEMU_OPTION_pidfile
},
7957 { "win2k-hack", 0, QEMU_OPTION_win2k_hack
},
7958 { "usbdevice", HAS_ARG
, QEMU_OPTION_usbdevice
},
7959 { "smp", HAS_ARG
, QEMU_OPTION_smp
},
7960 { "vnc", HAS_ARG
, QEMU_OPTION_vnc
},
7961 #ifdef CONFIG_CURSES
7962 { "curses", 0, QEMU_OPTION_curses
},
7965 /* temporary options */
7966 { "usb", 0, QEMU_OPTION_usb
},
7967 { "cirrusvga", 0, QEMU_OPTION_cirrusvga
},
7968 { "vmwarevga", 0, QEMU_OPTION_vmsvga
},
7969 { "no-acpi", 0, QEMU_OPTION_no_acpi
},
7970 { "no-reboot", 0, QEMU_OPTION_no_reboot
},
7971 { "no-shutdown", 0, QEMU_OPTION_no_shutdown
},
7972 { "show-cursor", 0, QEMU_OPTION_show_cursor
},
7973 { "daemonize", 0, QEMU_OPTION_daemonize
},
7974 { "option-rom", HAS_ARG
, QEMU_OPTION_option_rom
},
7975 #if defined(TARGET_ARM) || defined(TARGET_M68K)
7976 { "semihosting", 0, QEMU_OPTION_semihosting
},
7978 { "name", HAS_ARG
, QEMU_OPTION_name
},
7979 #if defined(TARGET_SPARC)
7980 { "prom-env", HAS_ARG
, QEMU_OPTION_prom_env
},
7982 #if defined(TARGET_ARM)
7983 { "old-param", 0, QEMU_OPTION_old_param
},
7985 { "clock", HAS_ARG
, QEMU_OPTION_clock
},
7986 { "startdate", HAS_ARG
, QEMU_OPTION_startdate
},
7987 { "tb-size", HAS_ARG
, QEMU_OPTION_tb_size
},
7988 { "icount", HAS_ARG
, QEMU_OPTION_icount
},
7992 /* password input */
7994 int qemu_key_check(BlockDriverState
*bs
, const char *name
)
7999 if (!bdrv_is_encrypted(bs
))
8002 term_printf("%s is encrypted.\n", name
);
8003 for(i
= 0; i
< 3; i
++) {
8004 monitor_readline("Password: ", 1, password
, sizeof(password
));
8005 if (bdrv_set_key(bs
, password
) == 0)
8007 term_printf("invalid password\n");
8012 static BlockDriverState
*get_bdrv(int index
)
8014 if (index
> nb_drives
)
8016 return drives_table
[index
].bdrv
;
8019 static void read_passwords(void)
8021 BlockDriverState
*bs
;
8024 for(i
= 0; i
< 6; i
++) {
8027 qemu_key_check(bs
, bdrv_get_device_name(bs
));
8032 struct soundhw soundhw
[] = {
8033 #ifdef HAS_AUDIO_CHOICE
8034 #if defined(TARGET_I386) || defined(TARGET_MIPS)
8040 { .init_isa
= pcspk_audio_init
}
8045 "Creative Sound Blaster 16",
8048 { .init_isa
= SB16_init
}
8051 #ifdef CONFIG_CS4231A
8057 { .init_isa
= cs4231a_init
}
8065 "Yamaha YMF262 (OPL3)",
8067 "Yamaha YM3812 (OPL2)",
8071 { .init_isa
= Adlib_init
}
8078 "Gravis Ultrasound GF1",
8081 { .init_isa
= GUS_init
}
8088 "Intel 82801AA AC97 Audio",
8091 { .init_pci
= ac97_init
}
8097 "ENSONIQ AudioPCI ES1370",
8100 { .init_pci
= es1370_init
}
8104 { NULL
, NULL
, 0, 0, { NULL
} }
8107 static void select_soundhw (const char *optarg
)
8111 if (*optarg
== '?') {
8114 printf ("Valid sound card names (comma separated):\n");
8115 for (c
= soundhw
; c
->name
; ++c
) {
8116 printf ("%-11s %s\n", c
->name
, c
->descr
);
8118 printf ("\n-soundhw all will enable all of the above\n");
8119 exit (*optarg
!= '?');
8127 if (!strcmp (optarg
, "all")) {
8128 for (c
= soundhw
; c
->name
; ++c
) {
8136 e
= strchr (p
, ',');
8137 l
= !e
? strlen (p
) : (size_t) (e
- p
);
8139 for (c
= soundhw
; c
->name
; ++c
) {
8140 if (!strncmp (c
->name
, p
, l
)) {
8149 "Unknown sound card name (too big to show)\n");
8152 fprintf (stderr
, "Unknown sound card name `%.*s'\n",
8157 p
+= l
+ (e
!= NULL
);
8161 goto show_valid_cards
;
8167 static BOOL WINAPI
qemu_ctrl_handler(DWORD type
)
8169 exit(STATUS_CONTROL_C_EXIT
);
8174 #define MAX_NET_CLIENTS 32
8176 int main(int argc
, char **argv
)
8178 #ifdef CONFIG_GDBSTUB
8180 const char *gdbstub_port
;
8182 uint32_t boot_devices_bitmap
= 0;
8184 int snapshot
, linux_boot
, net_boot
;
8185 const char *initrd_filename
;
8186 const char *kernel_filename
, *kernel_cmdline
;
8187 const char *boot_devices
= "";
8188 DisplayState
*ds
= &display_state
;
8189 int cyls
, heads
, secs
, translation
;
8190 const char *net_clients
[MAX_NET_CLIENTS
];
8194 const char *r
, *optarg
;
8195 CharDriverState
*monitor_hd
;
8196 const char *monitor_device
;
8197 const char *serial_devices
[MAX_SERIAL_PORTS
];
8198 int serial_device_index
;
8199 const char *parallel_devices
[MAX_PARALLEL_PORTS
];
8200 int parallel_device_index
;
8201 const char *loadvm
= NULL
;
8202 QEMUMachine
*machine
;
8203 const char *cpu_model
;
8204 const char *usb_devices
[MAX_USB_CMDLINE
];
8205 int usb_devices_index
;
8208 const char *pid_file
= NULL
;
8211 LIST_INIT (&vm_change_state_head
);
8214 struct sigaction act
;
8215 sigfillset(&act
.sa_mask
);
8217 act
.sa_handler
= SIG_IGN
;
8218 sigaction(SIGPIPE
, &act
, NULL
);
8221 SetConsoleCtrlHandler(qemu_ctrl_handler
, TRUE
);
8222 /* Note: cpu_interrupt() is currently not SMP safe, so we force
8223 QEMU to run on a single CPU */
8228 h
= GetCurrentProcess();
8229 if (GetProcessAffinityMask(h
, &mask
, &smask
)) {
8230 for(i
= 0; i
< 32; i
++) {
8231 if (mask
& (1 << i
))
8236 SetProcessAffinityMask(h
, mask
);
8242 register_machines();
8243 machine
= first_machine
;
8245 initrd_filename
= NULL
;
8247 vga_ram_size
= VGA_RAM_SIZE
;
8248 #ifdef CONFIG_GDBSTUB
8250 gdbstub_port
= DEFAULT_GDBSTUB_PORT
;
8255 kernel_filename
= NULL
;
8256 kernel_cmdline
= "";
8257 cyls
= heads
= secs
= 0;
8258 translation
= BIOS_ATA_TRANSLATION_AUTO
;
8259 monitor_device
= "vc";
8261 serial_devices
[0] = "vc:80Cx24C";
8262 for(i
= 1; i
< MAX_SERIAL_PORTS
; i
++)
8263 serial_devices
[i
] = NULL
;
8264 serial_device_index
= 0;
8266 parallel_devices
[0] = "vc:640x480";
8267 for(i
= 1; i
< MAX_PARALLEL_PORTS
; i
++)
8268 parallel_devices
[i
] = NULL
;
8269 parallel_device_index
= 0;
8271 usb_devices_index
= 0;
8288 hda_index
= drive_add(argv
[optind
++], HD_ALIAS
, 0);
8290 const QEMUOption
*popt
;
8293 /* Treat --foo the same as -foo. */
8296 popt
= qemu_options
;
8299 fprintf(stderr
, "%s: invalid option -- '%s'\n",
8303 if (!strcmp(popt
->name
, r
+ 1))
8307 if (popt
->flags
& HAS_ARG
) {
8308 if (optind
>= argc
) {
8309 fprintf(stderr
, "%s: option '%s' requires an argument\n",
8313 optarg
= argv
[optind
++];
8318 switch(popt
->index
) {
8320 machine
= find_machine(optarg
);
8323 printf("Supported machines are:\n");
8324 for(m
= first_machine
; m
!= NULL
; m
= m
->next
) {
8325 printf("%-10s %s%s\n",
8327 m
== first_machine
? " (default)" : "");
8329 exit(*optarg
!= '?');
8332 case QEMU_OPTION_cpu
:
8333 /* hw initialization will check this */
8334 if (*optarg
== '?') {
8335 /* XXX: implement xxx_cpu_list for targets that still miss it */
8336 #if defined(cpu_list)
8337 cpu_list(stdout
, &fprintf
);
8344 case QEMU_OPTION_initrd
:
8345 initrd_filename
= optarg
;
8347 case QEMU_OPTION_hda
:
8349 hda_index
= drive_add(optarg
, HD_ALIAS
, 0);
8351 hda_index
= drive_add(optarg
, HD_ALIAS
8352 ",cyls=%d,heads=%d,secs=%d%s",
8353 0, cyls
, heads
, secs
,
8354 translation
== BIOS_ATA_TRANSLATION_LBA
?
8356 translation
== BIOS_ATA_TRANSLATION_NONE
?
8357 ",trans=none" : "");
8359 case QEMU_OPTION_hdb
:
8360 case QEMU_OPTION_hdc
:
8361 case QEMU_OPTION_hdd
:
8362 drive_add(optarg
, HD_ALIAS
, popt
->index
- QEMU_OPTION_hda
);
8364 case QEMU_OPTION_drive
:
8365 drive_add(NULL
, "%s", optarg
);
8367 case QEMU_OPTION_mtdblock
:
8368 drive_add(optarg
, MTD_ALIAS
);
8370 case QEMU_OPTION_sd
:
8371 drive_add(optarg
, SD_ALIAS
);
8373 case QEMU_OPTION_pflash
:
8374 drive_add(optarg
, PFLASH_ALIAS
);
8376 case QEMU_OPTION_snapshot
:
8379 case QEMU_OPTION_hdachs
:
8383 cyls
= strtol(p
, (char **)&p
, 0);
8384 if (cyls
< 1 || cyls
> 16383)
8389 heads
= strtol(p
, (char **)&p
, 0);
8390 if (heads
< 1 || heads
> 16)
8395 secs
= strtol(p
, (char **)&p
, 0);
8396 if (secs
< 1 || secs
> 63)
8400 if (!strcmp(p
, "none"))
8401 translation
= BIOS_ATA_TRANSLATION_NONE
;
8402 else if (!strcmp(p
, "lba"))
8403 translation
= BIOS_ATA_TRANSLATION_LBA
;
8404 else if (!strcmp(p
, "auto"))
8405 translation
= BIOS_ATA_TRANSLATION_AUTO
;
8408 } else if (*p
!= '\0') {
8410 fprintf(stderr
, "qemu: invalid physical CHS format\n");
8413 if (hda_index
!= -1)
8414 snprintf(drives_opt
[hda_index
].opt
,
8415 sizeof(drives_opt
[hda_index
].opt
),
8416 HD_ALIAS
",cyls=%d,heads=%d,secs=%d%s",
8417 0, cyls
, heads
, secs
,
8418 translation
== BIOS_ATA_TRANSLATION_LBA
?
8420 translation
== BIOS_ATA_TRANSLATION_NONE
?
8421 ",trans=none" : "");
8424 case QEMU_OPTION_nographic
:
8427 #ifdef CONFIG_CURSES
8428 case QEMU_OPTION_curses
:
8432 case QEMU_OPTION_portrait
:
8435 case QEMU_OPTION_kernel
:
8436 kernel_filename
= optarg
;
8438 case QEMU_OPTION_append
:
8439 kernel_cmdline
= optarg
;
8441 case QEMU_OPTION_cdrom
:
8442 drive_add(optarg
, CDROM_ALIAS
);
8444 case QEMU_OPTION_boot
:
8445 boot_devices
= optarg
;
8446 /* We just do some generic consistency checks */
8448 /* Could easily be extended to 64 devices if needed */
8451 boot_devices_bitmap
= 0;
8452 for (p
= boot_devices
; *p
!= '\0'; p
++) {
8453 /* Allowed boot devices are:
8454 * a b : floppy disk drives
8455 * c ... f : IDE disk drives
8456 * g ... m : machine implementation dependant drives
8457 * n ... p : network devices
8458 * It's up to each machine implementation to check
8459 * if the given boot devices match the actual hardware
8460 * implementation and firmware features.
8462 if (*p
< 'a' || *p
> 'q') {
8463 fprintf(stderr
, "Invalid boot device '%c'\n", *p
);
8466 if (boot_devices_bitmap
& (1 << (*p
- 'a'))) {
8468 "Boot device '%c' was given twice\n",*p
);
8471 boot_devices_bitmap
|= 1 << (*p
- 'a');
8475 case QEMU_OPTION_fda
:
8476 case QEMU_OPTION_fdb
:
8477 drive_add(optarg
, FD_ALIAS
, popt
->index
- QEMU_OPTION_fda
);
8480 case QEMU_OPTION_no_fd_bootchk
:
8484 case QEMU_OPTION_net
:
8485 if (nb_net_clients
>= MAX_NET_CLIENTS
) {
8486 fprintf(stderr
, "qemu: too many network clients\n");
8489 net_clients
[nb_net_clients
] = optarg
;
8493 case QEMU_OPTION_tftp
:
8494 tftp_prefix
= optarg
;
8496 case QEMU_OPTION_bootp
:
8497 bootp_filename
= optarg
;
8500 case QEMU_OPTION_smb
:
8501 net_slirp_smb(optarg
);
8504 case QEMU_OPTION_redir
:
8505 net_slirp_redir(optarg
);
8509 case QEMU_OPTION_audio_help
:
8513 case QEMU_OPTION_soundhw
:
8514 select_soundhw (optarg
);
8520 case QEMU_OPTION_m
: {
8524 value
= strtoul(optarg
, &ptr
, 10);
8526 case 0: case 'M': case 'm':
8533 fprintf(stderr
, "qemu: invalid ram size: %s\n", optarg
);
8537 /* On 32-bit hosts, QEMU is limited by virtual address space */
8538 if (value
> (2047 << 20)
8540 && HOST_LONG_BITS
== 32
8543 fprintf(stderr
, "qemu: at most 2047 MB RAM can be simulated\n");
8546 if (value
!= (uint64_t)(ram_addr_t
)value
) {
8547 fprintf(stderr
, "qemu: ram size too large\n");
8558 mask
= cpu_str_to_log_mask(optarg
);
8560 printf("Log items (comma separated):\n");
8561 for(item
= cpu_log_items
; item
->mask
!= 0; item
++) {
8562 printf("%-10s %s\n", item
->name
, item
->help
);
8569 #ifdef CONFIG_GDBSTUB
8574 gdbstub_port
= optarg
;
8580 case QEMU_OPTION_bios
:
8587 keyboard_layout
= optarg
;
8589 case QEMU_OPTION_localtime
:
8592 case QEMU_OPTION_cirrusvga
:
8593 cirrus_vga_enabled
= 1;
8596 case QEMU_OPTION_vmsvga
:
8597 cirrus_vga_enabled
= 0;
8600 case QEMU_OPTION_std_vga
:
8601 cirrus_vga_enabled
= 0;
8609 w
= strtol(p
, (char **)&p
, 10);
8612 fprintf(stderr
, "qemu: invalid resolution or depth\n");
8618 h
= strtol(p
, (char **)&p
, 10);
8623 depth
= strtol(p
, (char **)&p
, 10);
8624 if (depth
!= 8 && depth
!= 15 && depth
!= 16 &&
8625 depth
!= 24 && depth
!= 32)
8627 } else if (*p
== '\0') {
8628 depth
= graphic_depth
;
8635 graphic_depth
= depth
;
8638 case QEMU_OPTION_echr
:
8641 term_escape_char
= strtol(optarg
, &r
, 0);
8643 printf("Bad argument to echr\n");
8646 case QEMU_OPTION_monitor
:
8647 monitor_device
= optarg
;
8649 case QEMU_OPTION_serial
:
8650 if (serial_device_index
>= MAX_SERIAL_PORTS
) {
8651 fprintf(stderr
, "qemu: too many serial ports\n");
8654 serial_devices
[serial_device_index
] = optarg
;
8655 serial_device_index
++;
8657 case QEMU_OPTION_parallel
:
8658 if (parallel_device_index
>= MAX_PARALLEL_PORTS
) {
8659 fprintf(stderr
, "qemu: too many parallel ports\n");
8662 parallel_devices
[parallel_device_index
] = optarg
;
8663 parallel_device_index
++;
8665 case QEMU_OPTION_loadvm
:
8668 case QEMU_OPTION_full_screen
:
8672 case QEMU_OPTION_no_frame
:
8675 case QEMU_OPTION_alt_grab
:
8678 case QEMU_OPTION_no_quit
:
8682 case QEMU_OPTION_pidfile
:
8686 case QEMU_OPTION_win2k_hack
:
8687 win2k_install_hack
= 1;
8691 case QEMU_OPTION_no_kqemu
:
8694 case QEMU_OPTION_kernel_kqemu
:
8698 case QEMU_OPTION_usb
:
8701 case QEMU_OPTION_usbdevice
:
8703 if (usb_devices_index
>= MAX_USB_CMDLINE
) {
8704 fprintf(stderr
, "Too many USB devices\n");
8707 usb_devices
[usb_devices_index
] = optarg
;
8708 usb_devices_index
++;
8710 case QEMU_OPTION_smp
:
8711 smp_cpus
= atoi(optarg
);
8712 if (smp_cpus
< 1 || smp_cpus
> MAX_CPUS
) {
8713 fprintf(stderr
, "Invalid number of CPUs\n");
8717 case QEMU_OPTION_vnc
:
8718 vnc_display
= optarg
;
8720 case QEMU_OPTION_no_acpi
:
8723 case QEMU_OPTION_no_reboot
:
8726 case QEMU_OPTION_no_shutdown
:
8729 case QEMU_OPTION_show_cursor
:
8732 case QEMU_OPTION_daemonize
:
8735 case QEMU_OPTION_option_rom
:
8736 if (nb_option_roms
>= MAX_OPTION_ROMS
) {
8737 fprintf(stderr
, "Too many option ROMs\n");
8740 option_rom
[nb_option_roms
] = optarg
;
8743 case QEMU_OPTION_semihosting
:
8744 semihosting_enabled
= 1;
8746 case QEMU_OPTION_name
:
8750 case QEMU_OPTION_prom_env
:
8751 if (nb_prom_envs
>= MAX_PROM_ENVS
) {
8752 fprintf(stderr
, "Too many prom variables\n");
8755 prom_envs
[nb_prom_envs
] = optarg
;
8760 case QEMU_OPTION_old_param
:
8764 case QEMU_OPTION_clock
:
8765 configure_alarms(optarg
);
8767 case QEMU_OPTION_startdate
:
8770 time_t rtc_start_date
;
8771 if (!strcmp(optarg
, "now")) {
8772 rtc_date_offset
= -1;
8774 if (sscanf(optarg
, "%d-%d-%dT%d:%d:%d",
8782 } else if (sscanf(optarg
, "%d-%d-%d",
8785 &tm
.tm_mday
) == 3) {
8794 rtc_start_date
= mktimegm(&tm
);
8795 if (rtc_start_date
== -1) {
8797 fprintf(stderr
, "Invalid date format. Valid format are:\n"
8798 "'now' or '2006-06-17T16:01:21' or '2006-06-17'\n");
8801 rtc_date_offset
= time(NULL
) - rtc_start_date
;
8805 case QEMU_OPTION_tb_size
:
8806 tb_size
= strtol(optarg
, NULL
, 0);
8810 case QEMU_OPTION_icount
:
8812 if (strcmp(optarg
, "auto") == 0) {
8813 icount_time_shift
= -1;
8815 icount_time_shift
= strtol(optarg
, NULL
, 0);
8823 if (serial_device_index
== 0)
8824 serial_devices
[0] = "stdio";
8825 if (parallel_device_index
== 0)
8826 parallel_devices
[0] = "null";
8827 if (strncmp(monitor_device
, "vc", 2) == 0)
8828 monitor_device
= "stdio";
8835 if (pipe(fds
) == -1)
8846 len
= read(fds
[0], &status
, 1);
8847 if (len
== -1 && (errno
== EINTR
))
8852 else if (status
== 1) {
8853 fprintf(stderr
, "Could not acquire pidfile\n");
8870 signal(SIGTSTP
, SIG_IGN
);
8871 signal(SIGTTOU
, SIG_IGN
);
8872 signal(SIGTTIN
, SIG_IGN
);
8876 if (pid_file
&& qemu_create_pidfile(pid_file
) != 0) {
8879 write(fds
[1], &status
, 1);
8881 fprintf(stderr
, "Could not acquire pid file\n");
8889 linux_boot
= (kernel_filename
!= NULL
);
8890 net_boot
= (boot_devices_bitmap
>> ('n' - 'a')) & 0xF;
8892 if (!linux_boot
&& net_boot
== 0 &&
8893 !machine
->nodisk_ok
&& nb_drives_opt
== 0)
8896 if (!linux_boot
&& *kernel_cmdline
!= '\0') {
8897 fprintf(stderr
, "-append only allowed with -kernel option\n");
8901 if (!linux_boot
&& initrd_filename
!= NULL
) {
8902 fprintf(stderr
, "-initrd only allowed with -kernel option\n");
8906 /* boot to floppy or the default cd if no hard disk defined yet */
8907 if (!boot_devices
[0]) {
8908 boot_devices
= "cad";
8910 setvbuf(stdout
, NULL
, _IOLBF
, 0);
8915 if (use_icount
&& icount_time_shift
< 0) {
8917 /* 125MIPS seems a reasonable initial guess at the guest speed.
8918 It will be corrected fairly quickly anyway. */
8919 icount_time_shift
= 3;
8920 init_icount_adjust();
8927 /* init network clients */
8928 if (nb_net_clients
== 0) {
8929 /* if no clients, we use a default config */
8930 net_clients
[0] = "nic";
8931 net_clients
[1] = "user";
8935 for(i
= 0;i
< nb_net_clients
; i
++) {
8936 if (net_client_parse(net_clients
[i
]) < 0)
8939 for(vlan
= first_vlan
; vlan
!= NULL
; vlan
= vlan
->next
) {
8940 if (vlan
->nb_guest_devs
== 0 && vlan
->nb_host_devs
== 0)
8942 if (vlan
->nb_guest_devs
== 0)
8943 fprintf(stderr
, "Warning: vlan %d with no nics\n", vlan
->id
);
8944 if (vlan
->nb_host_devs
== 0)
8946 "Warning: vlan %d is not connected to host network\n",
8951 /* XXX: this should be moved in the PC machine instantiation code */
8952 if (net_boot
!= 0) {
8954 for (i
= 0; i
< nb_nics
&& i
< 4; i
++) {
8955 const char *model
= nd_table
[i
].model
;
8957 if (net_boot
& (1 << i
)) {
8960 snprintf(buf
, sizeof(buf
), "%s/pxe-%s.bin", bios_dir
, model
);
8961 if (get_image_size(buf
) > 0) {
8962 if (nb_option_roms
>= MAX_OPTION_ROMS
) {
8963 fprintf(stderr
, "Too many option ROMs\n");
8966 option_rom
[nb_option_roms
] = strdup(buf
);
8973 fprintf(stderr
, "No valid PXE rom found for network device\n");
8979 /* init the memory */
8980 phys_ram_size
= machine
->ram_require
& ~RAMSIZE_FIXED
;
8982 if (machine
->ram_require
& RAMSIZE_FIXED
) {
8984 if (ram_size
< phys_ram_size
) {
8985 fprintf(stderr
, "Machine `%s' requires %llu bytes of memory\n",
8986 machine
->name
, (unsigned long long) phys_ram_size
);
8990 phys_ram_size
= ram_size
;
8992 ram_size
= phys_ram_size
;
8995 ram_size
= DEFAULT_RAM_SIZE
* 1024 * 1024;
8997 phys_ram_size
+= ram_size
;
9000 phys_ram_base
= qemu_vmalloc(phys_ram_size
);
9001 if (!phys_ram_base
) {
9002 fprintf(stderr
, "Could not allocate physical memory\n");
9006 /* init the dynamic translator */
9007 cpu_exec_init_all(tb_size
* 1024 * 1024);
9011 /* we always create the cdrom drive, even if no disk is there */
9013 if (nb_drives_opt
< MAX_DRIVES
)
9014 drive_add(NULL
, CDROM_ALIAS
);
9016 /* we always create at least one floppy */
9018 if (nb_drives_opt
< MAX_DRIVES
)
9019 drive_add(NULL
, FD_ALIAS
, 0);
9021 /* we always create one sd slot, even if no card is in it */
9023 if (nb_drives_opt
< MAX_DRIVES
)
9024 drive_add(NULL
, SD_ALIAS
);
9026 /* open the virtual block devices */
9028 for(i
= 0; i
< nb_drives_opt
; i
++)
9029 if (drive_init(&drives_opt
[i
], snapshot
, machine
) == -1)
9032 register_savevm("timer", 0, 2, timer_save
, timer_load
, NULL
);
9033 register_savevm("ram", 0, 2, ram_save
, ram_load
, NULL
);
9036 memset(&display_state
, 0, sizeof(display_state
));
9039 fprintf(stderr
, "fatal: -nographic can't be used with -curses\n");
9042 /* nearly nothing to do */
9043 dumb_display_init(ds
);
9044 } else if (vnc_display
!= NULL
) {
9045 vnc_display_init(ds
);
9046 if (vnc_display_open(ds
, vnc_display
) < 0)
9049 #if defined(CONFIG_CURSES)
9051 curses_display_init(ds
, full_screen
);
9055 #if defined(CONFIG_SDL)
9056 sdl_display_init(ds
, full_screen
, no_frame
);
9057 #elif defined(CONFIG_COCOA)
9058 cocoa_display_init(ds
, full_screen
);
9060 dumb_display_init(ds
);
9064 /* Maintain compatibility with multiple stdio monitors */
9065 if (!strcmp(monitor_device
,"stdio")) {
9066 for (i
= 0; i
< MAX_SERIAL_PORTS
; i
++) {
9067 const char *devname
= serial_devices
[i
];
9068 if (devname
&& !strcmp(devname
,"mon:stdio")) {
9069 monitor_device
= NULL
;
9071 } else if (devname
&& !strcmp(devname
,"stdio")) {
9072 monitor_device
= NULL
;
9073 serial_devices
[i
] = "mon:stdio";
9078 if (monitor_device
) {
9079 monitor_hd
= qemu_chr_open(monitor_device
);
9081 fprintf(stderr
, "qemu: could not open monitor device '%s'\n", monitor_device
);
9084 monitor_init(monitor_hd
, !nographic
);
9087 for(i
= 0; i
< MAX_SERIAL_PORTS
; i
++) {
9088 const char *devname
= serial_devices
[i
];
9089 if (devname
&& strcmp(devname
, "none")) {
9090 serial_hds
[i
] = qemu_chr_open(devname
);
9091 if (!serial_hds
[i
]) {
9092 fprintf(stderr
, "qemu: could not open serial device '%s'\n",
9096 if (strstart(devname
, "vc", 0))
9097 qemu_chr_printf(serial_hds
[i
], "serial%d console\r\n", i
);
9101 for(i
= 0; i
< MAX_PARALLEL_PORTS
; i
++) {
9102 const char *devname
= parallel_devices
[i
];
9103 if (devname
&& strcmp(devname
, "none")) {
9104 parallel_hds
[i
] = qemu_chr_open(devname
);
9105 if (!parallel_hds
[i
]) {
9106 fprintf(stderr
, "qemu: could not open parallel device '%s'\n",
9110 if (strstart(devname
, "vc", 0))
9111 qemu_chr_printf(parallel_hds
[i
], "parallel%d console\r\n", i
);
9115 machine
->init(ram_size
, vga_ram_size
, boot_devices
, ds
,
9116 kernel_filename
, kernel_cmdline
, initrd_filename
, cpu_model
);
9118 /* init USB devices */
9120 for(i
= 0; i
< usb_devices_index
; i
++) {
9121 if (usb_device_add(usb_devices
[i
]) < 0) {
9122 fprintf(stderr
, "Warning: could not add USB device %s\n",
9128 if (display_state
.dpy_refresh
) {
9129 display_state
.gui_timer
= qemu_new_timer(rt_clock
, gui_update
, &display_state
);
9130 qemu_mod_timer(display_state
.gui_timer
, qemu_get_clock(rt_clock
));
9133 #ifdef CONFIG_GDBSTUB
9135 /* XXX: use standard host:port notation and modify options
9137 if (gdbserver_start(gdbstub_port
) < 0) {
9138 fprintf(stderr
, "qemu: could not open gdbstub device on port '%s'\n",
9149 /* XXX: simplify init */
9162 len
= write(fds
[1], &status
, 1);
9163 if (len
== -1 && (errno
== EINTR
))
9170 TFR(fd
= open("/dev/null", O_RDWR
));
9184 #if !defined(_WIN32)
9185 /* close network clients */
9186 for(vlan
= first_vlan
; vlan
!= NULL
; vlan
= vlan
->next
) {
9187 VLANClientState
*vc
;
9189 for(vc
= vlan
->first_client
; vc
!= NULL
; vc
= vc
->next
) {
9190 if (vc
->fd_read
== tap_receive
) {
9192 TAPState
*s
= vc
->opaque
;
9194 if (sscanf(vc
->info_str
, "tap: ifname=%63s ", ifname
) == 1 &&
9196 launch_script(s
->down_script
, ifname
, s
->fd
);
9198 #if defined(CONFIG_VDE)
9199 if (vc
->fd_read
== vde_from_qemu
) {
9200 VDEState
*s
= vc
->opaque
;