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"
40 #include "migration.h"
52 #include <sys/times.h>
57 #include <sys/ioctl.h>
58 #include <sys/socket.h>
59 #include <netinet/in.h>
62 #include <sys/select.h>
63 #include <arpa/inet.h>
69 #elif defined (__GLIBC__) && defined (__FreeBSD_kernel__)
70 #include <freebsd/stdlib.h>
74 #include <linux/if_tun.h>
77 #include <linux/rtc.h>
79 /* For the benefit of older linux systems which don't supply it,
80 we use a local copy of hpet.h. */
81 /* #include <linux/hpet.h> */
84 #include <linux/ppdev.h>
85 #include <linux/parport.h>
88 #include <sys/ethernet.h>
89 #include <sys/sockio.h>
90 #include <netinet/arp.h>
91 #include <netinet/in.h>
92 #include <netinet/in_systm.h>
93 #include <netinet/ip.h>
94 #include <netinet/ip_icmp.h> // must come after ip.h
95 #include <netinet/udp.h>
96 #include <netinet/tcp.h>
103 #include <winsock2.h>
104 int inet_aton(const char *cp
, struct in_addr
*ia
);
107 #if defined(CONFIG_SLIRP)
108 #include "libslirp.h"
113 #include <sys/timeb.h>
114 #include <mmsystem.h>
115 #define getopt_long_only getopt_long
116 #define memalign(align, size) malloc(size)
119 #include "qemu_socket.h"
125 #endif /* CONFIG_SDL */
129 #define main qemu_main
130 #endif /* CONFIG_COCOA */
134 #include "exec-all.h"
136 #include "qemu-kvm.h"
138 #define DEFAULT_NETWORK_SCRIPT "/etc/qemu-ifup"
139 #define DEFAULT_NETWORK_DOWN_SCRIPT "/etc/qemu-ifdown"
141 #define SMBD_COMMAND "/usr/sfw/sbin/smbd"
143 #define SMBD_COMMAND "/usr/sbin/smbd"
146 //#define DEBUG_UNUSED_IOPORT
147 //#define DEBUG_IOPORT
150 #define DEFAULT_RAM_SIZE 144
152 #define DEFAULT_RAM_SIZE 128
155 #define GUI_REFRESH_INTERVAL 30
157 /* Max number of USB devices that can be specified on the commandline. */
158 #define MAX_USB_CMDLINE 8
160 /* XXX: use a two level table to limit memory usage */
161 #define MAX_IOPORTS 65536
163 const char *bios_dir
= CONFIG_QEMU_SHAREDIR
;
164 const char *bios_name
= NULL
;
165 void *ioport_opaque
[MAX_IOPORTS
];
166 IOPortReadFunc
*ioport_read_table
[3][MAX_IOPORTS
];
167 IOPortWriteFunc
*ioport_write_table
[3][MAX_IOPORTS
];
168 /* Note: drives_table[MAX_DRIVES] is a dummy block driver if none available
169 to store the VM snapshots */
170 DriveInfo drives_table
[MAX_DRIVES
+1];
172 int extboot_drive
= -1;
173 /* point to the block driver where the snapshots are managed */
174 BlockDriverState
*bs_snapshots
;
176 static DisplayState display_state
;
179 const char* keyboard_layout
= NULL
;
180 int64_t ticks_per_sec
;
182 int pit_min_timer_count
= 0;
184 NICInfo nd_table
[MAX_NICS
];
186 static int rtc_utc
= 1;
187 static int rtc_date_offset
= -1; /* -1 means no change */
188 int cirrus_vga_enabled
= 1;
189 int vmsvga_enabled
= 0;
191 int graphic_width
= 1024;
192 int graphic_height
= 768;
193 int graphic_depth
= 8;
195 int graphic_width
= 800;
196 int graphic_height
= 600;
197 int graphic_depth
= 15;
202 int balloon_used
= 0;
203 CharDriverState
*vmchannel_hds
[MAX_VMCHANNEL_DEVICES
];
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)
217 #elif defined(TARGET_IA64)
222 int acpi_enabled
= 1;
227 int graphic_rotate
= 0;
229 const char *incoming
;
230 const char *option_rom
[MAX_OPTION_ROMS
];
232 int semihosting_enabled
= 0;
234 int time_drift_fix
= 0;
235 unsigned int kvm_shadow_memory
= 0;
236 const char *mem_path
= NULL
;
238 const char *cpu_vendor_string
;
242 const char *qemu_name
;
245 unsigned int nb_prom_envs
= 0;
246 const char *prom_envs
[MAX_PROM_ENVS
];
249 struct drive_opt drives_opt
[MAX_DRIVES
];
251 static CPUState
*cur_cpu
;
252 static CPUState
*next_cpu
;
253 static int event_pending
= 1;
254 /* Conversion factor from emulated instructions to virtual clock ticks. */
255 static int icount_time_shift
;
256 /* Arbitrarily pick 1MIPS as the minimum allowable speed. */
257 #define MAX_ICOUNT_SHIFT 10
258 /* Compensate for varying guest execution speed. */
259 static int64_t qemu_icount_bias
;
260 QEMUTimer
*icount_rt_timer
;
261 QEMUTimer
*icount_vm_timer
;
263 #define TFR(expr) do { if ((expr) != -1) break; } while (errno == EINTR)
265 /* KVM runs the main loop in a separate thread. If we update one of the lists
266 * that are polled before or after select(), we need to make sure to break out
267 * of the select() to ensure the new item is serviced.
269 static void main_loop_break(void)
272 qemu_kvm_notify_work();
275 void decorate_application_name(char *appname
, int max_len
)
279 int remain
= max_len
- strlen(appname
) - 1;
282 strncat(appname
, "/KVM", remain
);
286 /***********************************************************/
287 /* x86 ISA bus support */
289 target_phys_addr_t isa_mem_base
= 0;
292 static uint32_t default_ioport_readb(void *opaque
, uint32_t address
)
294 #ifdef DEBUG_UNUSED_IOPORT
295 fprintf(stderr
, "unused inb: port=0x%04x\n", address
);
300 static void default_ioport_writeb(void *opaque
, uint32_t address
, uint32_t data
)
302 #ifdef DEBUG_UNUSED_IOPORT
303 fprintf(stderr
, "unused outb: port=0x%04x data=0x%02x\n", address
, data
);
307 /* default is to make two byte accesses */
308 static uint32_t default_ioport_readw(void *opaque
, uint32_t address
)
311 data
= ioport_read_table
[0][address
](ioport_opaque
[address
], address
);
312 address
= (address
+ 1) & (MAX_IOPORTS
- 1);
313 data
|= ioport_read_table
[0][address
](ioport_opaque
[address
], address
) << 8;
317 static void default_ioport_writew(void *opaque
, uint32_t address
, uint32_t data
)
319 ioport_write_table
[0][address
](ioport_opaque
[address
], address
, data
& 0xff);
320 address
= (address
+ 1) & (MAX_IOPORTS
- 1);
321 ioport_write_table
[0][address
](ioport_opaque
[address
], address
, (data
>> 8) & 0xff);
324 static uint32_t default_ioport_readl(void *opaque
, uint32_t address
)
326 #ifdef DEBUG_UNUSED_IOPORT
327 fprintf(stderr
, "unused inl: port=0x%04x\n", address
);
332 static void default_ioport_writel(void *opaque
, uint32_t address
, uint32_t data
)
334 #ifdef DEBUG_UNUSED_IOPORT
335 fprintf(stderr
, "unused outl: port=0x%04x data=0x%02x\n", address
, data
);
339 static void init_ioports(void)
343 for(i
= 0; i
< MAX_IOPORTS
; i
++) {
344 ioport_read_table
[0][i
] = default_ioport_readb
;
345 ioport_write_table
[0][i
] = default_ioport_writeb
;
346 ioport_read_table
[1][i
] = default_ioport_readw
;
347 ioport_write_table
[1][i
] = default_ioport_writew
;
348 ioport_read_table
[2][i
] = default_ioport_readl
;
349 ioport_write_table
[2][i
] = default_ioport_writel
;
353 /* size is the word size in byte */
354 int register_ioport_read(int start
, int length
, int size
,
355 IOPortReadFunc
*func
, void *opaque
)
361 } else if (size
== 2) {
363 } else if (size
== 4) {
366 hw_error("register_ioport_read: invalid size");
369 for(i
= start
; i
< start
+ length
; i
+= size
) {
370 ioport_read_table
[bsize
][i
] = func
;
371 if (ioport_opaque
[i
] != NULL
&& ioport_opaque
[i
] != opaque
)
372 hw_error("register_ioport_read: invalid opaque");
373 ioport_opaque
[i
] = opaque
;
378 /* size is the word size in byte */
379 int register_ioport_write(int start
, int length
, int size
,
380 IOPortWriteFunc
*func
, void *opaque
)
386 } else if (size
== 2) {
388 } else if (size
== 4) {
391 hw_error("register_ioport_write: invalid size");
394 for(i
= start
; i
< start
+ length
; i
+= size
) {
395 ioport_write_table
[bsize
][i
] = func
;
396 if (ioport_opaque
[i
] != NULL
&& ioport_opaque
[i
] != opaque
)
397 hw_error("register_ioport_write: invalid opaque");
398 ioport_opaque
[i
] = opaque
;
403 void isa_unassign_ioport(int start
, int length
)
407 for(i
= start
; i
< start
+ length
; i
++) {
408 ioport_read_table
[0][i
] = default_ioport_readb
;
409 ioport_read_table
[1][i
] = default_ioport_readw
;
410 ioport_read_table
[2][i
] = default_ioport_readl
;
412 ioport_write_table
[0][i
] = default_ioport_writeb
;
413 ioport_write_table
[1][i
] = default_ioport_writew
;
414 ioport_write_table
[2][i
] = default_ioport_writel
;
416 ioport_opaque
[i
] = NULL
;
420 /***********************************************************/
422 void cpu_outb(CPUState
*env
, int addr
, int val
)
425 if (loglevel
& CPU_LOG_IOPORT
)
426 fprintf(logfile
, "outb: %04x %02x\n", addr
, val
);
428 ioport_write_table
[0][addr
](ioport_opaque
[addr
], addr
, val
);
431 env
->last_io_time
= cpu_get_time_fast();
435 void cpu_outw(CPUState
*env
, int addr
, int val
)
438 if (loglevel
& CPU_LOG_IOPORT
)
439 fprintf(logfile
, "outw: %04x %04x\n", addr
, val
);
441 ioport_write_table
[1][addr
](ioport_opaque
[addr
], addr
, val
);
444 env
->last_io_time
= cpu_get_time_fast();
448 void cpu_outl(CPUState
*env
, int addr
, int val
)
451 if (loglevel
& CPU_LOG_IOPORT
)
452 fprintf(logfile
, "outl: %04x %08x\n", addr
, val
);
454 ioport_write_table
[2][addr
](ioport_opaque
[addr
], addr
, val
);
457 env
->last_io_time
= cpu_get_time_fast();
461 int cpu_inb(CPUState
*env
, int addr
)
464 val
= ioport_read_table
[0][addr
](ioport_opaque
[addr
], addr
);
466 if (loglevel
& CPU_LOG_IOPORT
)
467 fprintf(logfile
, "inb : %04x %02x\n", addr
, val
);
471 env
->last_io_time
= cpu_get_time_fast();
476 int cpu_inw(CPUState
*env
, int addr
)
479 val
= ioport_read_table
[1][addr
](ioport_opaque
[addr
], addr
);
481 if (loglevel
& CPU_LOG_IOPORT
)
482 fprintf(logfile
, "inw : %04x %04x\n", addr
, val
);
486 env
->last_io_time
= cpu_get_time_fast();
491 int cpu_inl(CPUState
*env
, int addr
)
494 val
= ioport_read_table
[2][addr
](ioport_opaque
[addr
], addr
);
496 if (loglevel
& CPU_LOG_IOPORT
)
497 fprintf(logfile
, "inl : %04x %08x\n", addr
, val
);
501 env
->last_io_time
= cpu_get_time_fast();
506 /***********************************************************/
507 void hw_error(const char *fmt
, ...)
513 fprintf(stderr
, "qemu: hardware error: ");
514 vfprintf(stderr
, fmt
, ap
);
515 fprintf(stderr
, "\n");
516 for(env
= first_cpu
; env
!= NULL
; env
= env
->next_cpu
) {
517 fprintf(stderr
, "CPU #%d:\n", env
->cpu_index
);
519 cpu_dump_state(env
, stderr
, fprintf
, X86_DUMP_FPU
);
521 cpu_dump_state(env
, stderr
, fprintf
, 0);
528 /***********************************************************/
531 static QEMUPutKBDEvent
*qemu_put_kbd_event
;
532 static void *qemu_put_kbd_event_opaque
;
533 static QEMUPutMouseEntry
*qemu_put_mouse_event_head
;
534 static QEMUPutMouseEntry
*qemu_put_mouse_event_current
;
536 void qemu_add_kbd_event_handler(QEMUPutKBDEvent
*func
, void *opaque
)
538 qemu_put_kbd_event_opaque
= opaque
;
539 qemu_put_kbd_event
= func
;
542 QEMUPutMouseEntry
*qemu_add_mouse_event_handler(QEMUPutMouseEvent
*func
,
543 void *opaque
, int absolute
,
546 QEMUPutMouseEntry
*s
, *cursor
;
548 s
= qemu_mallocz(sizeof(QEMUPutMouseEntry
));
552 s
->qemu_put_mouse_event
= func
;
553 s
->qemu_put_mouse_event_opaque
= opaque
;
554 s
->qemu_put_mouse_event_absolute
= absolute
;
555 s
->qemu_put_mouse_event_name
= qemu_strdup(name
);
558 if (!qemu_put_mouse_event_head
) {
559 qemu_put_mouse_event_head
= qemu_put_mouse_event_current
= s
;
563 cursor
= qemu_put_mouse_event_head
;
564 while (cursor
->next
!= NULL
)
565 cursor
= cursor
->next
;
568 qemu_put_mouse_event_current
= s
;
573 void qemu_remove_mouse_event_handler(QEMUPutMouseEntry
*entry
)
575 QEMUPutMouseEntry
*prev
= NULL
, *cursor
;
577 if (!qemu_put_mouse_event_head
|| entry
== NULL
)
580 cursor
= qemu_put_mouse_event_head
;
581 while (cursor
!= NULL
&& cursor
!= entry
) {
583 cursor
= cursor
->next
;
586 if (cursor
== NULL
) // does not exist or list empty
588 else if (prev
== NULL
) { // entry is head
589 qemu_put_mouse_event_head
= cursor
->next
;
590 if (qemu_put_mouse_event_current
== entry
)
591 qemu_put_mouse_event_current
= cursor
->next
;
592 qemu_free(entry
->qemu_put_mouse_event_name
);
597 prev
->next
= entry
->next
;
599 if (qemu_put_mouse_event_current
== entry
)
600 qemu_put_mouse_event_current
= prev
;
602 qemu_free(entry
->qemu_put_mouse_event_name
);
606 void kbd_put_keycode(int keycode
)
608 if (qemu_put_kbd_event
) {
609 qemu_put_kbd_event(qemu_put_kbd_event_opaque
, keycode
);
613 void kbd_mouse_event(int dx
, int dy
, int dz
, int buttons_state
)
615 QEMUPutMouseEvent
*mouse_event
;
616 void *mouse_event_opaque
;
619 if (!qemu_put_mouse_event_current
) {
624 qemu_put_mouse_event_current
->qemu_put_mouse_event
;
626 qemu_put_mouse_event_current
->qemu_put_mouse_event_opaque
;
629 if (graphic_rotate
) {
630 if (qemu_put_mouse_event_current
->qemu_put_mouse_event_absolute
)
633 width
= graphic_width
- 1;
634 mouse_event(mouse_event_opaque
,
635 width
- dy
, dx
, dz
, buttons_state
);
637 mouse_event(mouse_event_opaque
,
638 dx
, dy
, dz
, buttons_state
);
642 int kbd_mouse_is_absolute(void)
644 if (!qemu_put_mouse_event_current
)
647 return qemu_put_mouse_event_current
->qemu_put_mouse_event_absolute
;
650 void do_info_mice(void)
652 QEMUPutMouseEntry
*cursor
;
655 if (!qemu_put_mouse_event_head
) {
656 term_printf("No mouse devices connected\n");
660 term_printf("Mouse devices available:\n");
661 cursor
= qemu_put_mouse_event_head
;
662 while (cursor
!= NULL
) {
663 term_printf("%c Mouse #%d: %s\n",
664 (cursor
== qemu_put_mouse_event_current
? '*' : ' '),
665 index
, cursor
->qemu_put_mouse_event_name
);
667 cursor
= cursor
->next
;
671 void do_mouse_set(int index
)
673 QEMUPutMouseEntry
*cursor
;
676 if (!qemu_put_mouse_event_head
) {
677 term_printf("No mouse devices connected\n");
681 cursor
= qemu_put_mouse_event_head
;
682 while (cursor
!= NULL
&& index
!= i
) {
684 cursor
= cursor
->next
;
688 qemu_put_mouse_event_current
= cursor
;
690 term_printf("Mouse at given index not found\n");
693 /* compute with 96 bit intermediate result: (a*b)/c */
694 uint64_t muldiv64(uint64_t a
, uint32_t b
, uint32_t c
)
699 #ifdef WORDS_BIGENDIAN
709 rl
= (uint64_t)u
.l
.low
* (uint64_t)b
;
710 rh
= (uint64_t)u
.l
.high
* (uint64_t)b
;
713 res
.l
.low
= (((rh
% c
) << 32) + (rl
& 0xffffffff)) / c
;
717 /***********************************************************/
718 /* real time host monotonic timer */
720 #define QEMU_TIMER_BASE 1000000000LL
724 static int64_t clock_freq
;
726 static void init_get_clock(void)
730 ret
= QueryPerformanceFrequency(&freq
);
732 fprintf(stderr
, "Could not calibrate ticks\n");
735 clock_freq
= freq
.QuadPart
;
738 static int64_t get_clock(void)
741 QueryPerformanceCounter(&ti
);
742 return muldiv64(ti
.QuadPart
, QEMU_TIMER_BASE
, clock_freq
);
747 static int use_rt_clock
;
749 static void init_get_clock(void)
752 #if defined(__linux__)
755 if (clock_gettime(CLOCK_MONOTONIC
, &ts
) == 0) {
762 static int64_t get_clock(void)
764 #if defined(__linux__)
767 clock_gettime(CLOCK_MONOTONIC
, &ts
);
768 return ts
.tv_sec
* 1000000000LL + ts
.tv_nsec
;
772 /* XXX: using gettimeofday leads to problems if the date
773 changes, so it should be avoided. */
775 gettimeofday(&tv
, NULL
);
776 return tv
.tv_sec
* 1000000000LL + (tv
.tv_usec
* 1000);
781 /* Return the virtual CPU time, based on the instruction counter. */
782 static int64_t cpu_get_icount(void)
785 CPUState
*env
= cpu_single_env
;;
786 icount
= qemu_icount
;
789 fprintf(stderr
, "Bad clock read\n");
790 icount
-= (env
->icount_decr
.u16
.low
+ env
->icount_extra
);
792 return qemu_icount_bias
+ (icount
<< icount_time_shift
);
795 /***********************************************************/
796 /* guest cycle counter */
798 static int64_t cpu_ticks_prev
;
799 static int64_t cpu_ticks_offset
;
800 static int64_t cpu_clock_offset
;
801 static int cpu_ticks_enabled
;
803 /* return the host CPU cycle counter and handle stop/restart */
804 int64_t cpu_get_ticks(void)
807 return cpu_get_icount();
809 if (!cpu_ticks_enabled
) {
810 return cpu_ticks_offset
;
813 ticks
= cpu_get_real_ticks();
814 if (cpu_ticks_prev
> ticks
) {
815 /* Note: non increasing ticks may happen if the host uses
817 cpu_ticks_offset
+= cpu_ticks_prev
- ticks
;
819 cpu_ticks_prev
= ticks
;
820 return ticks
+ cpu_ticks_offset
;
824 /* return the host CPU monotonic timer and handle stop/restart */
825 static int64_t cpu_get_clock(void)
828 if (!cpu_ticks_enabled
) {
829 return cpu_clock_offset
;
832 return ti
+ cpu_clock_offset
;
836 /* enable cpu_get_ticks() */
837 void cpu_enable_ticks(void)
839 if (!cpu_ticks_enabled
) {
840 cpu_ticks_offset
-= cpu_get_real_ticks();
841 cpu_clock_offset
-= get_clock();
842 cpu_ticks_enabled
= 1;
846 /* disable cpu_get_ticks() : the clock is stopped. You must not call
847 cpu_get_ticks() after that. */
848 void cpu_disable_ticks(void)
850 if (cpu_ticks_enabled
) {
851 cpu_ticks_offset
= cpu_get_ticks();
852 cpu_clock_offset
= cpu_get_clock();
853 cpu_ticks_enabled
= 0;
857 /***********************************************************/
860 #define QEMU_TIMER_REALTIME 0
861 #define QEMU_TIMER_VIRTUAL 1
865 /* XXX: add frequency */
873 struct QEMUTimer
*next
;
876 struct qemu_alarm_timer
{
880 int (*start
)(struct qemu_alarm_timer
*t
);
881 void (*stop
)(struct qemu_alarm_timer
*t
);
882 void (*rearm
)(struct qemu_alarm_timer
*t
);
886 #define ALARM_FLAG_DYNTICKS 0x1
887 #define ALARM_FLAG_EXPIRED 0x2
889 static inline int alarm_has_dynticks(struct qemu_alarm_timer
*t
)
891 return t
->flags
& ALARM_FLAG_DYNTICKS
;
894 static void qemu_rearm_alarm_timer(struct qemu_alarm_timer
*t
)
896 if (!alarm_has_dynticks(t
))
902 /* TODO: MIN_TIMER_REARM_US should be optimized */
903 #define MIN_TIMER_REARM_US 250
905 static struct qemu_alarm_timer
*alarm_timer
;
909 struct qemu_alarm_win32
{
913 } alarm_win32_data
= {0, NULL
, -1};
915 static int win32_start_timer(struct qemu_alarm_timer
*t
);
916 static void win32_stop_timer(struct qemu_alarm_timer
*t
);
917 static void win32_rearm_timer(struct qemu_alarm_timer
*t
);
921 static int unix_start_timer(struct qemu_alarm_timer
*t
);
922 static void unix_stop_timer(struct qemu_alarm_timer
*t
);
926 static int dynticks_start_timer(struct qemu_alarm_timer
*t
);
927 static void dynticks_stop_timer(struct qemu_alarm_timer
*t
);
928 static void dynticks_rearm_timer(struct qemu_alarm_timer
*t
);
930 static int hpet_start_timer(struct qemu_alarm_timer
*t
);
931 static void hpet_stop_timer(struct qemu_alarm_timer
*t
);
933 static int rtc_start_timer(struct qemu_alarm_timer
*t
);
934 static void rtc_stop_timer(struct qemu_alarm_timer
*t
);
936 #endif /* __linux__ */
940 /* Correlation between real and virtual time is always going to be
941 fairly approximate, so ignore small variation.
942 When the guest is idle real and virtual time will be aligned in
944 #define ICOUNT_WOBBLE (QEMU_TIMER_BASE / 10)
946 static void icount_adjust(void)
951 static int64_t last_delta
;
952 /* If the VM is not running, then do nothing. */
956 cur_time
= cpu_get_clock();
957 cur_icount
= qemu_get_clock(vm_clock
);
958 delta
= cur_icount
- cur_time
;
959 /* FIXME: This is a very crude algorithm, somewhat prone to oscillation. */
961 && last_delta
+ ICOUNT_WOBBLE
< delta
* 2
962 && icount_time_shift
> 0) {
963 /* The guest is getting too far ahead. Slow time down. */
967 && last_delta
- ICOUNT_WOBBLE
> delta
* 2
968 && icount_time_shift
< MAX_ICOUNT_SHIFT
) {
969 /* The guest is getting too far behind. Speed time up. */
973 qemu_icount_bias
= cur_icount
- (qemu_icount
<< icount_time_shift
);
976 static void icount_adjust_rt(void * opaque
)
978 qemu_mod_timer(icount_rt_timer
,
979 qemu_get_clock(rt_clock
) + 1000);
983 static void icount_adjust_vm(void * opaque
)
985 qemu_mod_timer(icount_vm_timer
,
986 qemu_get_clock(vm_clock
) + QEMU_TIMER_BASE
/ 10);
990 static void init_icount_adjust(void)
992 /* Have both realtime and virtual time triggers for speed adjustment.
993 The realtime trigger catches emulated time passing too slowly,
994 the virtual time trigger catches emulated time passing too fast.
995 Realtime triggers occur even when idle, so use them less frequently
997 icount_rt_timer
= qemu_new_timer(rt_clock
, icount_adjust_rt
, NULL
);
998 qemu_mod_timer(icount_rt_timer
,
999 qemu_get_clock(rt_clock
) + 1000);
1000 icount_vm_timer
= qemu_new_timer(vm_clock
, icount_adjust_vm
, NULL
);
1001 qemu_mod_timer(icount_vm_timer
,
1002 qemu_get_clock(vm_clock
) + QEMU_TIMER_BASE
/ 10);
1005 static struct qemu_alarm_timer alarm_timers
[] = {
1008 {"dynticks", ALARM_FLAG_DYNTICKS
, dynticks_start_timer
,
1009 dynticks_stop_timer
, dynticks_rearm_timer
, NULL
},
1010 /* HPET - if available - is preferred */
1011 {"hpet", 0, hpet_start_timer
, hpet_stop_timer
, NULL
, NULL
},
1012 /* ...otherwise try RTC */
1013 {"rtc", 0, rtc_start_timer
, rtc_stop_timer
, NULL
, NULL
},
1015 {"unix", 0, unix_start_timer
, unix_stop_timer
, NULL
, NULL
},
1017 {"dynticks", ALARM_FLAG_DYNTICKS
, win32_start_timer
,
1018 win32_stop_timer
, win32_rearm_timer
, &alarm_win32_data
},
1019 {"win32", 0, win32_start_timer
,
1020 win32_stop_timer
, NULL
, &alarm_win32_data
},
1025 static void show_available_alarms(void)
1029 printf("Available alarm timers, in order of precedence:\n");
1030 for (i
= 0; alarm_timers
[i
].name
; i
++)
1031 printf("%s\n", alarm_timers
[i
].name
);
1034 static void configure_alarms(char const *opt
)
1038 int count
= (sizeof(alarm_timers
) / sizeof(*alarm_timers
)) - 1;
1041 struct qemu_alarm_timer tmp
;
1043 if (!strcmp(opt
, "?")) {
1044 show_available_alarms();
1050 /* Reorder the array */
1051 name
= strtok(arg
, ",");
1053 for (i
= 0; i
< count
&& alarm_timers
[i
].name
; i
++) {
1054 if (!strcmp(alarm_timers
[i
].name
, name
))
1059 fprintf(stderr
, "Unknown clock %s\n", name
);
1068 tmp
= alarm_timers
[i
];
1069 alarm_timers
[i
] = alarm_timers
[cur
];
1070 alarm_timers
[cur
] = tmp
;
1074 name
= strtok(NULL
, ",");
1080 /* Disable remaining timers */
1081 for (i
= cur
; i
< count
; i
++)
1082 alarm_timers
[i
].name
= NULL
;
1084 show_available_alarms();
1089 QEMUClock
*rt_clock
;
1090 QEMUClock
*vm_clock
;
1092 static QEMUTimer
*active_timers
[2];
1094 static QEMUClock
*qemu_new_clock(int type
)
1097 clock
= qemu_mallocz(sizeof(QEMUClock
));
1104 QEMUTimer
*qemu_new_timer(QEMUClock
*clock
, QEMUTimerCB
*cb
, void *opaque
)
1108 ts
= qemu_mallocz(sizeof(QEMUTimer
));
1111 ts
->opaque
= opaque
;
1115 void qemu_free_timer(QEMUTimer
*ts
)
1120 /* stop a timer, but do not dealloc it */
1121 void qemu_del_timer(QEMUTimer
*ts
)
1125 /* NOTE: this code must be signal safe because
1126 qemu_timer_expired() can be called from a signal. */
1127 pt
= &active_timers
[ts
->clock
->type
];
1140 /* modify the current timer so that it will be fired when current_time
1141 >= expire_time. The corresponding callback will be called. */
1142 void qemu_mod_timer(QEMUTimer
*ts
, int64_t expire_time
)
1148 /* add the timer in the sorted list */
1149 /* NOTE: this code must be signal safe because
1150 qemu_timer_expired() can be called from a signal. */
1151 pt
= &active_timers
[ts
->clock
->type
];
1156 if (t
->expire_time
> expire_time
)
1160 ts
->expire_time
= expire_time
;
1164 /* Rearm if necessary */
1165 if (pt
== &active_timers
[ts
->clock
->type
]) {
1166 if ((alarm_timer
->flags
& ALARM_FLAG_EXPIRED
) == 0) {
1167 qemu_rearm_alarm_timer(alarm_timer
);
1169 /* Interrupt execution to force deadline recalculation. */
1170 if (use_icount
&& cpu_single_env
) {
1171 cpu_interrupt(cpu_single_env
, CPU_INTERRUPT_EXIT
);
1176 int qemu_timer_pending(QEMUTimer
*ts
)
1179 for(t
= active_timers
[ts
->clock
->type
]; t
!= NULL
; t
= t
->next
) {
1186 static inline int qemu_timer_expired(QEMUTimer
*timer_head
, int64_t current_time
)
1190 return (timer_head
->expire_time
<= current_time
);
1193 static void qemu_run_timers(QEMUTimer
**ptimer_head
, int64_t current_time
)
1199 if (!ts
|| ts
->expire_time
> current_time
)
1201 /* remove timer from the list before calling the callback */
1202 *ptimer_head
= ts
->next
;
1205 /* run the callback (the timer list can be modified) */
1210 int64_t qemu_get_clock(QEMUClock
*clock
)
1212 switch(clock
->type
) {
1213 case QEMU_TIMER_REALTIME
:
1214 return get_clock() / 1000000;
1216 case QEMU_TIMER_VIRTUAL
:
1218 return cpu_get_icount();
1220 return cpu_get_clock();
1225 static void init_timers(void)
1228 ticks_per_sec
= QEMU_TIMER_BASE
;
1229 rt_clock
= qemu_new_clock(QEMU_TIMER_REALTIME
);
1230 vm_clock
= qemu_new_clock(QEMU_TIMER_VIRTUAL
);
1234 void qemu_put_timer(QEMUFile
*f
, QEMUTimer
*ts
)
1236 uint64_t expire_time
;
1238 if (qemu_timer_pending(ts
)) {
1239 expire_time
= ts
->expire_time
;
1243 qemu_put_be64(f
, expire_time
);
1246 void qemu_get_timer(QEMUFile
*f
, QEMUTimer
*ts
)
1248 uint64_t expire_time
;
1250 expire_time
= qemu_get_be64(f
);
1251 if (expire_time
!= -1) {
1252 qemu_mod_timer(ts
, expire_time
);
1258 static void timer_save(QEMUFile
*f
, void *opaque
)
1260 if (cpu_ticks_enabled
) {
1261 hw_error("cannot save state if virtual timers are running");
1263 qemu_put_be64(f
, cpu_ticks_offset
);
1264 qemu_put_be64(f
, ticks_per_sec
);
1265 qemu_put_be64(f
, cpu_clock_offset
);
1268 static int timer_load(QEMUFile
*f
, void *opaque
, int version_id
)
1270 if (version_id
!= 1 && version_id
!= 2)
1272 if (cpu_ticks_enabled
) {
1275 cpu_ticks_offset
=qemu_get_be64(f
);
1276 ticks_per_sec
=qemu_get_be64(f
);
1277 if (version_id
== 2) {
1278 cpu_clock_offset
=qemu_get_be64(f
);
1284 void CALLBACK
host_alarm_handler(UINT uTimerID
, UINT uMsg
,
1285 DWORD_PTR dwUser
, DWORD_PTR dw1
, DWORD_PTR dw2
)
1287 static void host_alarm_handler(int host_signum
)
1291 #define DISP_FREQ 1000
1293 static int64_t delta_min
= INT64_MAX
;
1294 static int64_t delta_max
, delta_cum
, last_clock
, delta
, ti
;
1296 ti
= qemu_get_clock(vm_clock
);
1297 if (last_clock
!= 0) {
1298 delta
= ti
- last_clock
;
1299 if (delta
< delta_min
)
1301 if (delta
> delta_max
)
1304 if (++count
== DISP_FREQ
) {
1305 printf("timer: min=%" PRId64
" us max=%" PRId64
" us avg=%" PRId64
" us avg_freq=%0.3f Hz\n",
1306 muldiv64(delta_min
, 1000000, ticks_per_sec
),
1307 muldiv64(delta_max
, 1000000, ticks_per_sec
),
1308 muldiv64(delta_cum
, 1000000 / DISP_FREQ
, ticks_per_sec
),
1309 (double)ticks_per_sec
/ ((double)delta_cum
/ DISP_FREQ
));
1311 delta_min
= INT64_MAX
;
1320 alarm_has_dynticks(alarm_timer
) ||
1322 qemu_timer_expired(active_timers
[QEMU_TIMER_VIRTUAL
],
1323 qemu_get_clock(vm_clock
))) ||
1324 qemu_timer_expired(active_timers
[QEMU_TIMER_REALTIME
],
1325 qemu_get_clock(rt_clock
))) {
1327 struct qemu_alarm_win32
*data
= ((struct qemu_alarm_timer
*)dwUser
)->priv
;
1328 SetEvent(data
->host_alarm
);
1330 CPUState
*env
= next_cpu
;
1332 alarm_timer
->flags
|= ALARM_FLAG_EXPIRED
;
1335 /* stop the currently executing cpu because a timer occured */
1336 cpu_interrupt(env
, CPU_INTERRUPT_EXIT
);
1338 if (env
->kqemu_enabled
) {
1339 kqemu_cpu_interrupt(env
);
1347 static int64_t qemu_next_deadline(void)
1351 if (active_timers
[QEMU_TIMER_VIRTUAL
]) {
1352 delta
= active_timers
[QEMU_TIMER_VIRTUAL
]->expire_time
-
1353 qemu_get_clock(vm_clock
);
1355 /* To avoid problems with overflow limit this to 2^32. */
1365 static uint64_t qemu_next_deadline_dyntick(void)
1373 delta
= (qemu_next_deadline() + 999) / 1000;
1375 if (active_timers
[QEMU_TIMER_REALTIME
]) {
1376 rtdelta
= (active_timers
[QEMU_TIMER_REALTIME
]->expire_time
-
1377 qemu_get_clock(rt_clock
))*1000;
1378 if (rtdelta
< delta
)
1382 if (delta
< MIN_TIMER_REARM_US
)
1383 delta
= MIN_TIMER_REARM_US
;
1390 #if defined(__linux__)
1392 #define RTC_FREQ 1024
1394 static void enable_sigio_timer(int fd
)
1396 struct sigaction act
;
1399 sigfillset(&act
.sa_mask
);
1401 act
.sa_handler
= host_alarm_handler
;
1403 sigaction(SIGIO
, &act
, NULL
);
1404 fcntl(fd
, F_SETFL
, O_ASYNC
);
1405 fcntl(fd
, F_SETOWN
, getpid());
1408 static int hpet_start_timer(struct qemu_alarm_timer
*t
)
1410 struct hpet_info info
;
1413 fd
= open("/dev/hpet", O_RDONLY
);
1418 r
= ioctl(fd
, HPET_IRQFREQ
, RTC_FREQ
);
1420 fprintf(stderr
, "Could not configure '/dev/hpet' to have a 1024Hz timer. This is not a fatal\n"
1421 "error, but for better emulation accuracy type:\n"
1422 "'echo 1024 > /proc/sys/dev/hpet/max-user-freq' as root.\n");
1426 /* Check capabilities */
1427 r
= ioctl(fd
, HPET_INFO
, &info
);
1431 /* Enable periodic mode */
1432 r
= ioctl(fd
, HPET_EPI
, 0);
1433 if (info
.hi_flags
&& (r
< 0))
1436 /* Enable interrupt */
1437 r
= ioctl(fd
, HPET_IE_ON
, 0);
1441 enable_sigio_timer(fd
);
1442 t
->priv
= (void *)(long)fd
;
1450 static void hpet_stop_timer(struct qemu_alarm_timer
*t
)
1452 int fd
= (long)t
->priv
;
1457 static int rtc_start_timer(struct qemu_alarm_timer
*t
)
1460 unsigned long current_rtc_freq
= 0;
1462 TFR(rtc_fd
= open("/dev/rtc", O_RDONLY
));
1465 ioctl(rtc_fd
, RTC_IRQP_READ
, ¤t_rtc_freq
);
1466 if (current_rtc_freq
!= RTC_FREQ
&&
1467 ioctl(rtc_fd
, RTC_IRQP_SET
, RTC_FREQ
) < 0) {
1468 fprintf(stderr
, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n"
1469 "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n"
1470 "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n");
1473 if (ioctl(rtc_fd
, RTC_PIE_ON
, 0) < 0) {
1479 enable_sigio_timer(rtc_fd
);
1481 t
->priv
= (void *)(long)rtc_fd
;
1486 static void rtc_stop_timer(struct qemu_alarm_timer
*t
)
1488 int rtc_fd
= (long)t
->priv
;
1493 static int dynticks_start_timer(struct qemu_alarm_timer
*t
)
1497 struct sigaction act
;
1499 sigfillset(&act
.sa_mask
);
1501 act
.sa_handler
= host_alarm_handler
;
1503 sigaction(SIGALRM
, &act
, NULL
);
1505 ev
.sigev_value
.sival_int
= 0;
1506 ev
.sigev_notify
= SIGEV_SIGNAL
;
1507 ev
.sigev_signo
= SIGALRM
;
1509 if (timer_create(CLOCK_REALTIME
, &ev
, &host_timer
)) {
1510 perror("timer_create");
1512 /* disable dynticks */
1513 fprintf(stderr
, "Dynamic Ticks disabled\n");
1518 t
->priv
= (void *)host_timer
;
1523 static void dynticks_stop_timer(struct qemu_alarm_timer
*t
)
1525 timer_t host_timer
= (timer_t
)t
->priv
;
1527 timer_delete(host_timer
);
1530 static void dynticks_rearm_timer(struct qemu_alarm_timer
*t
)
1532 timer_t host_timer
= (timer_t
)t
->priv
;
1533 struct itimerspec timeout
;
1534 int64_t nearest_delta_us
= INT64_MAX
;
1537 if (!active_timers
[QEMU_TIMER_REALTIME
] &&
1538 !active_timers
[QEMU_TIMER_VIRTUAL
])
1541 nearest_delta_us
= qemu_next_deadline_dyntick();
1543 /* check whether a timer is already running */
1544 if (timer_gettime(host_timer
, &timeout
)) {
1546 fprintf(stderr
, "Internal timer error: aborting\n");
1549 current_us
= timeout
.it_value
.tv_sec
* 1000000 + timeout
.it_value
.tv_nsec
/1000;
1550 if (current_us
&& current_us
<= nearest_delta_us
)
1553 timeout
.it_interval
.tv_sec
= 0;
1554 timeout
.it_interval
.tv_nsec
= 0; /* 0 for one-shot timer */
1555 timeout
.it_value
.tv_sec
= nearest_delta_us
/ 1000000;
1556 timeout
.it_value
.tv_nsec
= (nearest_delta_us
% 1000000) * 1000;
1557 if (timer_settime(host_timer
, 0 /* RELATIVE */, &timeout
, NULL
)) {
1559 fprintf(stderr
, "Internal timer error: aborting\n");
1564 #endif /* defined(__linux__) */
1566 static int unix_start_timer(struct qemu_alarm_timer
*t
)
1568 struct sigaction act
;
1569 struct itimerval itv
;
1573 sigfillset(&act
.sa_mask
);
1575 act
.sa_handler
= host_alarm_handler
;
1577 sigaction(SIGALRM
, &act
, NULL
);
1579 itv
.it_interval
.tv_sec
= 0;
1580 /* for i386 kernel 2.6 to get 1 ms */
1581 itv
.it_interval
.tv_usec
= 999;
1582 itv
.it_value
.tv_sec
= 0;
1583 itv
.it_value
.tv_usec
= 10 * 1000;
1585 err
= setitimer(ITIMER_REAL
, &itv
, NULL
);
1592 static void unix_stop_timer(struct qemu_alarm_timer
*t
)
1594 struct itimerval itv
;
1596 memset(&itv
, 0, sizeof(itv
));
1597 setitimer(ITIMER_REAL
, &itv
, NULL
);
1600 #endif /* !defined(_WIN32) */
1604 static int win32_start_timer(struct qemu_alarm_timer
*t
)
1607 struct qemu_alarm_win32
*data
= t
->priv
;
1610 data
->host_alarm
= CreateEvent(NULL
, FALSE
, FALSE
, NULL
);
1611 if (!data
->host_alarm
) {
1612 perror("Failed CreateEvent");
1616 memset(&tc
, 0, sizeof(tc
));
1617 timeGetDevCaps(&tc
, sizeof(tc
));
1619 if (data
->period
< tc
.wPeriodMin
)
1620 data
->period
= tc
.wPeriodMin
;
1622 timeBeginPeriod(data
->period
);
1624 flags
= TIME_CALLBACK_FUNCTION
;
1625 if (alarm_has_dynticks(t
))
1626 flags
|= TIME_ONESHOT
;
1628 flags
|= TIME_PERIODIC
;
1630 data
->timerId
= timeSetEvent(1, // interval (ms)
1631 data
->period
, // resolution
1632 host_alarm_handler
, // function
1633 (DWORD
)t
, // parameter
1636 if (!data
->timerId
) {
1637 perror("Failed to initialize win32 alarm timer");
1639 timeEndPeriod(data
->period
);
1640 CloseHandle(data
->host_alarm
);
1644 qemu_add_wait_object(data
->host_alarm
, NULL
, NULL
);
1649 static void win32_stop_timer(struct qemu_alarm_timer
*t
)
1651 struct qemu_alarm_win32
*data
= t
->priv
;
1653 timeKillEvent(data
->timerId
);
1654 timeEndPeriod(data
->period
);
1656 CloseHandle(data
->host_alarm
);
1659 static void win32_rearm_timer(struct qemu_alarm_timer
*t
)
1661 struct qemu_alarm_win32
*data
= t
->priv
;
1662 uint64_t nearest_delta_us
;
1664 if (!active_timers
[QEMU_TIMER_REALTIME
] &&
1665 !active_timers
[QEMU_TIMER_VIRTUAL
])
1668 nearest_delta_us
= qemu_next_deadline_dyntick();
1669 nearest_delta_us
/= 1000;
1671 timeKillEvent(data
->timerId
);
1673 data
->timerId
= timeSetEvent(1,
1677 TIME_ONESHOT
| TIME_PERIODIC
);
1679 if (!data
->timerId
) {
1680 perror("Failed to re-arm win32 alarm timer");
1682 timeEndPeriod(data
->period
);
1683 CloseHandle(data
->host_alarm
);
1690 static void init_timer_alarm(void)
1692 struct qemu_alarm_timer
*t
;
1695 for (i
= 0; alarm_timers
[i
].name
; i
++) {
1696 t
= &alarm_timers
[i
];
1704 fprintf(stderr
, "Unable to find any suitable alarm timer.\n");
1705 fprintf(stderr
, "Terminating\n");
1712 static void quit_timers(void)
1714 alarm_timer
->stop(alarm_timer
);
1718 /***********************************************************/
1719 /* host time/date access */
1720 void qemu_get_timedate(struct tm
*tm
, int offset
)
1727 if (rtc_date_offset
== -1) {
1731 ret
= localtime(&ti
);
1733 ti
-= rtc_date_offset
;
1737 memcpy(tm
, ret
, sizeof(struct tm
));
1740 int qemu_timedate_diff(struct tm
*tm
)
1744 if (rtc_date_offset
== -1)
1746 seconds
= mktimegm(tm
);
1748 seconds
= mktime(tm
);
1750 seconds
= mktimegm(tm
) + rtc_date_offset
;
1752 return seconds
- time(NULL
);
1755 /***********************************************************/
1756 /* character device */
1758 static void qemu_chr_event(CharDriverState
*s
, int event
)
1762 s
->chr_event(s
->handler_opaque
, event
);
1765 static void qemu_chr_reset_bh(void *opaque
)
1767 CharDriverState
*s
= opaque
;
1768 qemu_chr_event(s
, CHR_EVENT_RESET
);
1769 qemu_bh_delete(s
->bh
);
1773 void qemu_chr_reset(CharDriverState
*s
)
1775 if (s
->bh
== NULL
) {
1776 s
->bh
= qemu_bh_new(qemu_chr_reset_bh
, s
);
1777 qemu_bh_schedule(s
->bh
);
1781 int qemu_chr_write(CharDriverState
*s
, const uint8_t *buf
, int len
)
1783 return s
->chr_write(s
, buf
, len
);
1786 int qemu_chr_ioctl(CharDriverState
*s
, int cmd
, void *arg
)
1790 return s
->chr_ioctl(s
, cmd
, arg
);
1793 int qemu_chr_can_read(CharDriverState
*s
)
1795 if (!s
->chr_can_read
)
1797 return s
->chr_can_read(s
->handler_opaque
);
1800 void qemu_chr_read(CharDriverState
*s
, uint8_t *buf
, int len
)
1802 s
->chr_read(s
->handler_opaque
, buf
, len
);
1805 void qemu_chr_accept_input(CharDriverState
*s
)
1807 if (s
->chr_accept_input
)
1808 s
->chr_accept_input(s
);
1811 void qemu_chr_printf(CharDriverState
*s
, const char *fmt
, ...)
1816 vsnprintf(buf
, sizeof(buf
), fmt
, ap
);
1817 qemu_chr_write(s
, (uint8_t *)buf
, strlen(buf
));
1821 void qemu_chr_send_event(CharDriverState
*s
, int event
)
1823 if (s
->chr_send_event
)
1824 s
->chr_send_event(s
, event
);
1827 void qemu_chr_add_handlers(CharDriverState
*s
,
1828 IOCanRWHandler
*fd_can_read
,
1829 IOReadHandler
*fd_read
,
1830 IOEventHandler
*fd_event
,
1833 s
->chr_can_read
= fd_can_read
;
1834 s
->chr_read
= fd_read
;
1835 s
->chr_event
= fd_event
;
1836 s
->handler_opaque
= opaque
;
1837 if (s
->chr_update_read_handler
)
1838 s
->chr_update_read_handler(s
);
1841 static int null_chr_write(CharDriverState
*chr
, const uint8_t *buf
, int len
)
1846 static CharDriverState
*qemu_chr_open_null(void)
1848 CharDriverState
*chr
;
1850 chr
= qemu_mallocz(sizeof(CharDriverState
));
1853 chr
->chr_write
= null_chr_write
;
1857 /* MUX driver for serial I/O splitting */
1858 static int term_timestamps
;
1859 static int64_t term_timestamps_start
;
1861 #define MUX_BUFFER_SIZE 32 /* Must be a power of 2. */
1862 #define MUX_BUFFER_MASK (MUX_BUFFER_SIZE - 1)
1864 IOCanRWHandler
*chr_can_read
[MAX_MUX
];
1865 IOReadHandler
*chr_read
[MAX_MUX
];
1866 IOEventHandler
*chr_event
[MAX_MUX
];
1867 void *ext_opaque
[MAX_MUX
];
1868 CharDriverState
*drv
;
1869 unsigned char buffer
[MUX_BUFFER_SIZE
];
1873 int term_got_escape
;
1878 static int mux_chr_write(CharDriverState
*chr
, const uint8_t *buf
, int len
)
1880 MuxDriver
*d
= chr
->opaque
;
1882 if (!term_timestamps
) {
1883 ret
= d
->drv
->chr_write(d
->drv
, buf
, len
);
1888 for(i
= 0; i
< len
; i
++) {
1889 ret
+= d
->drv
->chr_write(d
->drv
, buf
+i
, 1);
1890 if (buf
[i
] == '\n') {
1896 if (term_timestamps_start
== -1)
1897 term_timestamps_start
= ti
;
1898 ti
-= term_timestamps_start
;
1899 secs
= ti
/ 1000000000;
1900 snprintf(buf1
, sizeof(buf1
),
1901 "[%02d:%02d:%02d.%03d] ",
1905 (int)((ti
/ 1000000) % 1000));
1906 d
->drv
->chr_write(d
->drv
, (uint8_t *)buf1
, strlen(buf1
));
1913 static char *mux_help
[] = {
1914 "% h print this help\n\r",
1915 "% x exit emulator\n\r",
1916 "% s save disk data back to file (if -snapshot)\n\r",
1917 "% t toggle console timestamps\n\r"
1918 "% b send break (magic sysrq)\n\r",
1919 "% c switch between console and monitor\n\r",
1924 static int term_escape_char
= 0x01; /* ctrl-a is used for escape */
1925 static void mux_print_help(CharDriverState
*chr
)
1928 char ebuf
[15] = "Escape-Char";
1929 char cbuf
[50] = "\n\r";
1931 if (term_escape_char
> 0 && term_escape_char
< 26) {
1932 sprintf(cbuf
,"\n\r");
1933 sprintf(ebuf
,"C-%c", term_escape_char
- 1 + 'a');
1935 sprintf(cbuf
,"\n\rEscape-Char set to Ascii: 0x%02x\n\r\n\r",
1938 chr
->chr_write(chr
, (uint8_t *)cbuf
, strlen(cbuf
));
1939 for (i
= 0; mux_help
[i
] != NULL
; i
++) {
1940 for (j
=0; mux_help
[i
][j
] != '\0'; j
++) {
1941 if (mux_help
[i
][j
] == '%')
1942 chr
->chr_write(chr
, (uint8_t *)ebuf
, strlen(ebuf
));
1944 chr
->chr_write(chr
, (uint8_t *)&mux_help
[i
][j
], 1);
1949 static int mux_proc_byte(CharDriverState
*chr
, MuxDriver
*d
, int ch
)
1951 if (d
->term_got_escape
) {
1952 d
->term_got_escape
= 0;
1953 if (ch
== term_escape_char
)
1958 mux_print_help(chr
);
1962 char *term
= "QEMU: Terminated\n\r";
1963 chr
->chr_write(chr
,(uint8_t *)term
,strlen(term
));
1970 for (i
= 0; i
< nb_drives
; i
++) {
1971 bdrv_commit(drives_table
[i
].bdrv
);
1976 qemu_chr_event(chr
, CHR_EVENT_BREAK
);
1979 /* Switch to the next registered device */
1981 if (chr
->focus
>= d
->mux_cnt
)
1985 term_timestamps
= !term_timestamps
;
1986 term_timestamps_start
= -1;
1989 } else if (ch
== term_escape_char
) {
1990 d
->term_got_escape
= 1;
1998 static void mux_chr_accept_input(CharDriverState
*chr
)
2001 MuxDriver
*d
= chr
->opaque
;
2003 while (d
->prod
!= d
->cons
&&
2004 d
->chr_can_read
[m
] &&
2005 d
->chr_can_read
[m
](d
->ext_opaque
[m
])) {
2006 d
->chr_read
[m
](d
->ext_opaque
[m
],
2007 &d
->buffer
[d
->cons
++ & MUX_BUFFER_MASK
], 1);
2011 static int mux_chr_can_read(void *opaque
)
2013 CharDriverState
*chr
= opaque
;
2014 MuxDriver
*d
= chr
->opaque
;
2016 if ((d
->prod
- d
->cons
) < MUX_BUFFER_SIZE
)
2018 if (d
->chr_can_read
[chr
->focus
])
2019 return d
->chr_can_read
[chr
->focus
](d
->ext_opaque
[chr
->focus
]);
2023 static void mux_chr_read(void *opaque
, const uint8_t *buf
, int size
)
2025 CharDriverState
*chr
= opaque
;
2026 MuxDriver
*d
= chr
->opaque
;
2030 mux_chr_accept_input (opaque
);
2032 for(i
= 0; i
< size
; i
++)
2033 if (mux_proc_byte(chr
, d
, buf
[i
])) {
2034 if (d
->prod
== d
->cons
&&
2035 d
->chr_can_read
[m
] &&
2036 d
->chr_can_read
[m
](d
->ext_opaque
[m
]))
2037 d
->chr_read
[m
](d
->ext_opaque
[m
], &buf
[i
], 1);
2039 d
->buffer
[d
->prod
++ & MUX_BUFFER_MASK
] = buf
[i
];
2043 static void mux_chr_event(void *opaque
, int event
)
2045 CharDriverState
*chr
= opaque
;
2046 MuxDriver
*d
= chr
->opaque
;
2049 /* Send the event to all registered listeners */
2050 for (i
= 0; i
< d
->mux_cnt
; i
++)
2051 if (d
->chr_event
[i
])
2052 d
->chr_event
[i
](d
->ext_opaque
[i
], event
);
2055 static void mux_chr_update_read_handler(CharDriverState
*chr
)
2057 MuxDriver
*d
= chr
->opaque
;
2059 if (d
->mux_cnt
>= MAX_MUX
) {
2060 fprintf(stderr
, "Cannot add I/O handlers, MUX array is full\n");
2063 d
->ext_opaque
[d
->mux_cnt
] = chr
->handler_opaque
;
2064 d
->chr_can_read
[d
->mux_cnt
] = chr
->chr_can_read
;
2065 d
->chr_read
[d
->mux_cnt
] = chr
->chr_read
;
2066 d
->chr_event
[d
->mux_cnt
] = chr
->chr_event
;
2067 /* Fix up the real driver with mux routines */
2068 if (d
->mux_cnt
== 0) {
2069 qemu_chr_add_handlers(d
->drv
, mux_chr_can_read
, mux_chr_read
,
2070 mux_chr_event
, chr
);
2072 chr
->focus
= d
->mux_cnt
;
2076 static CharDriverState
*qemu_chr_open_mux(CharDriverState
*drv
)
2078 CharDriverState
*chr
;
2081 chr
= qemu_mallocz(sizeof(CharDriverState
));
2084 d
= qemu_mallocz(sizeof(MuxDriver
));
2093 chr
->chr_write
= mux_chr_write
;
2094 chr
->chr_update_read_handler
= mux_chr_update_read_handler
;
2095 chr
->chr_accept_input
= mux_chr_accept_input
;
2102 static void socket_cleanup(void)
2107 static int socket_init(void)
2112 ret
= WSAStartup(MAKEWORD(2,2), &Data
);
2114 err
= WSAGetLastError();
2115 fprintf(stderr
, "WSAStartup: %d\n", err
);
2118 atexit(socket_cleanup
);
2122 static int send_all(int fd
, const uint8_t *buf
, int len1
)
2128 ret
= send(fd
, buf
, len
, 0);
2131 errno
= WSAGetLastError();
2132 if (errno
!= WSAEWOULDBLOCK
) {
2135 } else if (ret
== 0) {
2145 void socket_set_nonblock(int fd
)
2147 unsigned long opt
= 1;
2148 ioctlsocket(fd
, FIONBIO
, &opt
);
2153 static int unix_write(int fd
, const uint8_t *buf
, int len1
)
2159 ret
= write(fd
, buf
, len
);
2161 if (errno
!= EINTR
&& errno
!= EAGAIN
)
2163 } else if (ret
== 0) {
2173 static inline int send_all(int fd
, const uint8_t *buf
, int len1
)
2175 return unix_write(fd
, buf
, len1
);
2178 void socket_set_nonblock(int fd
)
2180 fcntl(fd
, F_SETFL
, O_NONBLOCK
);
2182 #endif /* !_WIN32 */
2191 #define STDIO_MAX_CLIENTS 1
2192 static int stdio_nb_clients
= 0;
2194 static int fd_chr_write(CharDriverState
*chr
, const uint8_t *buf
, int len
)
2196 FDCharDriver
*s
= chr
->opaque
;
2197 return unix_write(s
->fd_out
, buf
, len
);
2200 static int fd_chr_read_poll(void *opaque
)
2202 CharDriverState
*chr
= opaque
;
2203 FDCharDriver
*s
= chr
->opaque
;
2205 s
->max_size
= qemu_chr_can_read(chr
);
2209 static void fd_chr_read(void *opaque
)
2211 CharDriverState
*chr
= opaque
;
2212 FDCharDriver
*s
= chr
->opaque
;
2217 if (len
> s
->max_size
)
2221 size
= read(s
->fd_in
, buf
, len
);
2223 /* FD has been closed. Remove it from the active list. */
2224 qemu_set_fd_handler2(s
->fd_in
, NULL
, NULL
, NULL
, NULL
);
2228 qemu_chr_read(chr
, buf
, size
);
2232 static void fd_chr_update_read_handler(CharDriverState
*chr
)
2234 FDCharDriver
*s
= chr
->opaque
;
2236 if (s
->fd_in
>= 0) {
2237 if (nographic
&& s
->fd_in
== 0) {
2239 qemu_set_fd_handler2(s
->fd_in
, fd_chr_read_poll
,
2240 fd_chr_read
, NULL
, chr
);
2245 static void fd_chr_close(struct CharDriverState
*chr
)
2247 FDCharDriver
*s
= chr
->opaque
;
2249 if (s
->fd_in
>= 0) {
2250 if (nographic
&& s
->fd_in
== 0) {
2252 qemu_set_fd_handler2(s
->fd_in
, NULL
, NULL
, NULL
, NULL
);
2259 /* open a character device to a unix fd */
2260 static CharDriverState
*qemu_chr_open_fd(int fd_in
, int fd_out
)
2262 CharDriverState
*chr
;
2265 chr
= qemu_mallocz(sizeof(CharDriverState
));
2268 s
= qemu_mallocz(sizeof(FDCharDriver
));
2276 chr
->chr_write
= fd_chr_write
;
2277 chr
->chr_update_read_handler
= fd_chr_update_read_handler
;
2278 chr
->chr_close
= fd_chr_close
;
2280 qemu_chr_reset(chr
);
2285 static CharDriverState
*qemu_chr_open_file_out(const char *file_out
)
2289 TFR(fd_out
= open(file_out
, O_WRONLY
| O_TRUNC
| O_CREAT
| O_BINARY
, 0666));
2292 return qemu_chr_open_fd(-1, fd_out
);
2295 static CharDriverState
*qemu_chr_open_pipe(const char *filename
)
2298 char filename_in
[256], filename_out
[256];
2300 snprintf(filename_in
, 256, "%s.in", filename
);
2301 snprintf(filename_out
, 256, "%s.out", filename
);
2302 TFR(fd_in
= open(filename_in
, O_RDWR
| O_BINARY
));
2303 TFR(fd_out
= open(filename_out
, O_RDWR
| O_BINARY
));
2304 if (fd_in
< 0 || fd_out
< 0) {
2309 TFR(fd_in
= fd_out
= open(filename
, O_RDWR
| O_BINARY
));
2313 return qemu_chr_open_fd(fd_in
, fd_out
);
2317 /* for STDIO, we handle the case where several clients use it
2320 #define TERM_FIFO_MAX_SIZE 1
2322 static uint8_t term_fifo
[TERM_FIFO_MAX_SIZE
];
2323 static int term_fifo_size
;
2325 static int stdio_read_poll(void *opaque
)
2327 CharDriverState
*chr
= opaque
;
2329 /* try to flush the queue if needed */
2330 if (term_fifo_size
!= 0 && qemu_chr_can_read(chr
) > 0) {
2331 qemu_chr_read(chr
, term_fifo
, 1);
2334 /* see if we can absorb more chars */
2335 if (term_fifo_size
== 0)
2341 static void stdio_read(void *opaque
)
2345 CharDriverState
*chr
= opaque
;
2347 size
= read(0, buf
, 1);
2349 /* stdin has been closed. Remove it from the active list. */
2350 qemu_set_fd_handler2(0, NULL
, NULL
, NULL
, NULL
);
2354 if (qemu_chr_can_read(chr
) > 0) {
2355 qemu_chr_read(chr
, buf
, 1);
2356 } else if (term_fifo_size
== 0) {
2357 term_fifo
[term_fifo_size
++] = buf
[0];
2362 /* init terminal so that we can grab keys */
2363 static struct termios oldtty
;
2364 static int old_fd0_flags
;
2365 static int term_atexit_done
;
2367 static void term_exit(void)
2369 tcsetattr (0, TCSANOW
, &oldtty
);
2370 fcntl(0, F_SETFL
, old_fd0_flags
);
2373 static void term_init(void)
2377 tcgetattr (0, &tty
);
2379 old_fd0_flags
= fcntl(0, F_GETFL
);
2381 tty
.c_iflag
&= ~(IGNBRK
|BRKINT
|PARMRK
|ISTRIP
2382 |INLCR
|IGNCR
|ICRNL
|IXON
);
2383 tty
.c_oflag
|= OPOST
;
2384 tty
.c_lflag
&= ~(ECHO
|ECHONL
|ICANON
|IEXTEN
);
2385 /* if graphical mode, we allow Ctrl-C handling */
2387 tty
.c_lflag
&= ~ISIG
;
2388 tty
.c_cflag
&= ~(CSIZE
|PARENB
);
2391 tty
.c_cc
[VTIME
] = 0;
2393 tcsetattr (0, TCSANOW
, &tty
);
2395 if (!term_atexit_done
++)
2398 fcntl(0, F_SETFL
, O_NONBLOCK
);
2401 static void qemu_chr_close_stdio(struct CharDriverState
*chr
)
2405 qemu_set_fd_handler2(0, NULL
, NULL
, NULL
, NULL
);
2409 static CharDriverState
*qemu_chr_open_stdio(void)
2411 CharDriverState
*chr
;
2413 if (stdio_nb_clients
>= STDIO_MAX_CLIENTS
)
2415 chr
= qemu_chr_open_fd(0, 1);
2416 chr
->chr_close
= qemu_chr_close_stdio
;
2417 qemu_set_fd_handler2(0, stdio_read_poll
, stdio_read
, NULL
, chr
);
2425 /* Once Solaris has openpty(), this is going to be removed. */
2426 int openpty(int *amaster
, int *aslave
, char *name
,
2427 struct termios
*termp
, struct winsize
*winp
)
2430 int mfd
= -1, sfd
= -1;
2432 *amaster
= *aslave
= -1;
2434 mfd
= open("/dev/ptmx", O_RDWR
| O_NOCTTY
);
2438 if (grantpt(mfd
) == -1 || unlockpt(mfd
) == -1)
2441 if ((slave
= ptsname(mfd
)) == NULL
)
2444 if ((sfd
= open(slave
, O_RDONLY
| O_NOCTTY
)) == -1)
2447 if (ioctl(sfd
, I_PUSH
, "ptem") == -1 ||
2448 (termp
!= NULL
&& tcgetattr(sfd
, termp
) < 0))
2456 ioctl(sfd
, TIOCSWINSZ
, winp
);
2467 void cfmakeraw (struct termios
*termios_p
)
2469 termios_p
->c_iflag
&=
2470 ~(IGNBRK
|BRKINT
|PARMRK
|ISTRIP
|INLCR
|IGNCR
|ICRNL
|IXON
);
2471 termios_p
->c_oflag
&= ~OPOST
;
2472 termios_p
->c_lflag
&= ~(ECHO
|ECHONL
|ICANON
|ISIG
|IEXTEN
);
2473 termios_p
->c_cflag
&= ~(CSIZE
|PARENB
);
2474 termios_p
->c_cflag
|= CS8
;
2476 termios_p
->c_cc
[VMIN
] = 0;
2477 termios_p
->c_cc
[VTIME
] = 0;
2481 #if defined(__linux__) || defined(__sun__)
2482 static CharDriverState
*qemu_chr_open_pty(void)
2485 int master_fd
, slave_fd
;
2487 if (openpty(&master_fd
, &slave_fd
, NULL
, NULL
, NULL
) < 0) {
2491 /* Set raw attributes on the pty. */
2493 tcsetattr(slave_fd
, TCSAFLUSH
, &tty
);
2495 fprintf(stderr
, "char device redirected to %s\n", ptsname(master_fd
));
2496 return qemu_chr_open_fd(master_fd
, master_fd
);
2499 static void tty_serial_init(int fd
, int speed
,
2500 int parity
, int data_bits
, int stop_bits
)
2506 printf("tty_serial_init: speed=%d parity=%c data=%d stop=%d\n",
2507 speed
, parity
, data_bits
, stop_bits
);
2509 tcgetattr (fd
, &tty
);
2512 if (speed
<= 50 * MARGIN
)
2514 else if (speed
<= 75 * MARGIN
)
2516 else if (speed
<= 300 * MARGIN
)
2518 else if (speed
<= 600 * MARGIN
)
2520 else if (speed
<= 1200 * MARGIN
)
2522 else if (speed
<= 2400 * MARGIN
)
2524 else if (speed
<= 4800 * MARGIN
)
2526 else if (speed
<= 9600 * MARGIN
)
2528 else if (speed
<= 19200 * MARGIN
)
2530 else if (speed
<= 38400 * MARGIN
)
2532 else if (speed
<= 57600 * MARGIN
)
2534 else if (speed
<= 115200 * MARGIN
)
2539 cfsetispeed(&tty
, spd
);
2540 cfsetospeed(&tty
, spd
);
2542 tty
.c_iflag
&= ~(IGNBRK
|BRKINT
|PARMRK
|ISTRIP
2543 |INLCR
|IGNCR
|ICRNL
|IXON
);
2544 tty
.c_oflag
|= OPOST
;
2545 tty
.c_lflag
&= ~(ECHO
|ECHONL
|ICANON
|IEXTEN
|ISIG
);
2546 tty
.c_cflag
&= ~(CSIZE
|PARENB
|PARODD
|CRTSCTS
|CSTOPB
);
2567 tty
.c_cflag
|= PARENB
;
2570 tty
.c_cflag
|= PARENB
| PARODD
;
2574 tty
.c_cflag
|= CSTOPB
;
2576 tcsetattr (fd
, TCSANOW
, &tty
);
2579 static int tty_serial_ioctl(CharDriverState
*chr
, int cmd
, void *arg
)
2581 FDCharDriver
*s
= chr
->opaque
;
2584 case CHR_IOCTL_SERIAL_SET_PARAMS
:
2586 QEMUSerialSetParams
*ssp
= arg
;
2587 tty_serial_init(s
->fd_in
, ssp
->speed
, ssp
->parity
,
2588 ssp
->data_bits
, ssp
->stop_bits
);
2591 case CHR_IOCTL_SERIAL_SET_BREAK
:
2593 int enable
= *(int *)arg
;
2595 tcsendbreak(s
->fd_in
, 1);
2604 static CharDriverState
*qemu_chr_open_tty(const char *filename
)
2606 CharDriverState
*chr
;
2609 TFR(fd
= open(filename
, O_RDWR
| O_NONBLOCK
));
2610 fcntl(fd
, F_SETFL
, O_NONBLOCK
);
2611 tty_serial_init(fd
, 115200, 'N', 8, 1);
2612 chr
= qemu_chr_open_fd(fd
, fd
);
2617 chr
->chr_ioctl
= tty_serial_ioctl
;
2618 qemu_chr_reset(chr
);
2621 #else /* ! __linux__ && ! __sun__ */
2622 static CharDriverState
*qemu_chr_open_pty(void)
2626 #endif /* __linux__ || __sun__ */
2628 #if defined(__linux__)
2632 } ParallelCharDriver
;
2634 static int pp_hw_mode(ParallelCharDriver
*s
, uint16_t mode
)
2636 if (s
->mode
!= mode
) {
2638 if (ioctl(s
->fd
, PPSETMODE
, &m
) < 0)
2645 static int pp_ioctl(CharDriverState
*chr
, int cmd
, void *arg
)
2647 ParallelCharDriver
*drv
= chr
->opaque
;
2652 case CHR_IOCTL_PP_READ_DATA
:
2653 if (ioctl(fd
, PPRDATA
, &b
) < 0)
2655 *(uint8_t *)arg
= b
;
2657 case CHR_IOCTL_PP_WRITE_DATA
:
2658 b
= *(uint8_t *)arg
;
2659 if (ioctl(fd
, PPWDATA
, &b
) < 0)
2662 case CHR_IOCTL_PP_READ_CONTROL
:
2663 if (ioctl(fd
, PPRCONTROL
, &b
) < 0)
2665 /* Linux gives only the lowest bits, and no way to know data
2666 direction! For better compatibility set the fixed upper
2668 *(uint8_t *)arg
= b
| 0xc0;
2670 case CHR_IOCTL_PP_WRITE_CONTROL
:
2671 b
= *(uint8_t *)arg
;
2672 if (ioctl(fd
, PPWCONTROL
, &b
) < 0)
2675 case CHR_IOCTL_PP_READ_STATUS
:
2676 if (ioctl(fd
, PPRSTATUS
, &b
) < 0)
2678 *(uint8_t *)arg
= b
;
2680 case CHR_IOCTL_PP_EPP_READ_ADDR
:
2681 if (pp_hw_mode(drv
, IEEE1284_MODE_EPP
|IEEE1284_ADDR
)) {
2682 struct ParallelIOArg
*parg
= arg
;
2683 int n
= read(fd
, parg
->buffer
, parg
->count
);
2684 if (n
!= parg
->count
) {
2689 case CHR_IOCTL_PP_EPP_READ
:
2690 if (pp_hw_mode(drv
, IEEE1284_MODE_EPP
)) {
2691 struct ParallelIOArg
*parg
= arg
;
2692 int n
= read(fd
, parg
->buffer
, parg
->count
);
2693 if (n
!= parg
->count
) {
2698 case CHR_IOCTL_PP_EPP_WRITE_ADDR
:
2699 if (pp_hw_mode(drv
, IEEE1284_MODE_EPP
|IEEE1284_ADDR
)) {
2700 struct ParallelIOArg
*parg
= arg
;
2701 int n
= write(fd
, parg
->buffer
, parg
->count
);
2702 if (n
!= parg
->count
) {
2707 case CHR_IOCTL_PP_EPP_WRITE
:
2708 if (pp_hw_mode(drv
, IEEE1284_MODE_EPP
)) {
2709 struct ParallelIOArg
*parg
= arg
;
2710 int n
= write(fd
, parg
->buffer
, parg
->count
);
2711 if (n
!= parg
->count
) {
2722 static void pp_close(CharDriverState
*chr
)
2724 ParallelCharDriver
*drv
= chr
->opaque
;
2727 pp_hw_mode(drv
, IEEE1284_MODE_COMPAT
);
2728 ioctl(fd
, PPRELEASE
);
2733 static CharDriverState
*qemu_chr_open_pp(const char *filename
)
2735 CharDriverState
*chr
;
2736 ParallelCharDriver
*drv
;
2739 TFR(fd
= open(filename
, O_RDWR
));
2743 if (ioctl(fd
, PPCLAIM
) < 0) {
2748 drv
= qemu_mallocz(sizeof(ParallelCharDriver
));
2754 drv
->mode
= IEEE1284_MODE_COMPAT
;
2756 chr
= qemu_mallocz(sizeof(CharDriverState
));
2762 chr
->chr_write
= null_chr_write
;
2763 chr
->chr_ioctl
= pp_ioctl
;
2764 chr
->chr_close
= pp_close
;
2767 qemu_chr_reset(chr
);
2771 #endif /* __linux__ */
2777 HANDLE hcom
, hrecv
, hsend
;
2778 OVERLAPPED orecv
, osend
;
2783 #define NSENDBUF 2048
2784 #define NRECVBUF 2048
2785 #define MAXCONNECT 1
2786 #define NTIMEOUT 5000
2788 static int win_chr_poll(void *opaque
);
2789 static int win_chr_pipe_poll(void *opaque
);
2791 static void win_chr_close(CharDriverState
*chr
)
2793 WinCharState
*s
= chr
->opaque
;
2796 CloseHandle(s
->hsend
);
2800 CloseHandle(s
->hrecv
);
2804 CloseHandle(s
->hcom
);
2808 qemu_del_polling_cb(win_chr_pipe_poll
, chr
);
2810 qemu_del_polling_cb(win_chr_poll
, chr
);
2813 static int win_chr_init(CharDriverState
*chr
, const char *filename
)
2815 WinCharState
*s
= chr
->opaque
;
2817 COMMTIMEOUTS cto
= { 0, 0, 0, 0, 0};
2822 s
->hsend
= CreateEvent(NULL
, TRUE
, FALSE
, NULL
);
2824 fprintf(stderr
, "Failed CreateEvent\n");
2827 s
->hrecv
= CreateEvent(NULL
, TRUE
, FALSE
, NULL
);
2829 fprintf(stderr
, "Failed CreateEvent\n");
2833 s
->hcom
= CreateFile(filename
, GENERIC_READ
|GENERIC_WRITE
, 0, NULL
,
2834 OPEN_EXISTING
, FILE_FLAG_OVERLAPPED
, 0);
2835 if (s
->hcom
== INVALID_HANDLE_VALUE
) {
2836 fprintf(stderr
, "Failed CreateFile (%lu)\n", GetLastError());
2841 if (!SetupComm(s
->hcom
, NRECVBUF
, NSENDBUF
)) {
2842 fprintf(stderr
, "Failed SetupComm\n");
2846 ZeroMemory(&comcfg
, sizeof(COMMCONFIG
));
2847 size
= sizeof(COMMCONFIG
);
2848 GetDefaultCommConfig(filename
, &comcfg
, &size
);
2849 comcfg
.dcb
.DCBlength
= sizeof(DCB
);
2850 CommConfigDialog(filename
, NULL
, &comcfg
);
2852 if (!SetCommState(s
->hcom
, &comcfg
.dcb
)) {
2853 fprintf(stderr
, "Failed SetCommState\n");
2857 if (!SetCommMask(s
->hcom
, EV_ERR
)) {
2858 fprintf(stderr
, "Failed SetCommMask\n");
2862 cto
.ReadIntervalTimeout
= MAXDWORD
;
2863 if (!SetCommTimeouts(s
->hcom
, &cto
)) {
2864 fprintf(stderr
, "Failed SetCommTimeouts\n");
2868 if (!ClearCommError(s
->hcom
, &err
, &comstat
)) {
2869 fprintf(stderr
, "Failed ClearCommError\n");
2872 qemu_add_polling_cb(win_chr_poll
, chr
);
2880 static int win_chr_write(CharDriverState
*chr
, const uint8_t *buf
, int len1
)
2882 WinCharState
*s
= chr
->opaque
;
2883 DWORD len
, ret
, size
, err
;
2886 ZeroMemory(&s
->osend
, sizeof(s
->osend
));
2887 s
->osend
.hEvent
= s
->hsend
;
2890 ret
= WriteFile(s
->hcom
, buf
, len
, &size
, &s
->osend
);
2892 ret
= WriteFile(s
->hcom
, buf
, len
, &size
, NULL
);
2894 err
= GetLastError();
2895 if (err
== ERROR_IO_PENDING
) {
2896 ret
= GetOverlappedResult(s
->hcom
, &s
->osend
, &size
, TRUE
);
2914 static int win_chr_read_poll(CharDriverState
*chr
)
2916 WinCharState
*s
= chr
->opaque
;
2918 s
->max_size
= qemu_chr_can_read(chr
);
2922 static void win_chr_readfile(CharDriverState
*chr
)
2924 WinCharState
*s
= chr
->opaque
;
2929 ZeroMemory(&s
->orecv
, sizeof(s
->orecv
));
2930 s
->orecv
.hEvent
= s
->hrecv
;
2931 ret
= ReadFile(s
->hcom
, buf
, s
->len
, &size
, &s
->orecv
);
2933 err
= GetLastError();
2934 if (err
== ERROR_IO_PENDING
) {
2935 ret
= GetOverlappedResult(s
->hcom
, &s
->orecv
, &size
, TRUE
);
2940 qemu_chr_read(chr
, buf
, size
);
2944 static void win_chr_read(CharDriverState
*chr
)
2946 WinCharState
*s
= chr
->opaque
;
2948 if (s
->len
> s
->max_size
)
2949 s
->len
= s
->max_size
;
2953 win_chr_readfile(chr
);
2956 static int win_chr_poll(void *opaque
)
2958 CharDriverState
*chr
= opaque
;
2959 WinCharState
*s
= chr
->opaque
;
2963 ClearCommError(s
->hcom
, &comerr
, &status
);
2964 if (status
.cbInQue
> 0) {
2965 s
->len
= status
.cbInQue
;
2966 win_chr_read_poll(chr
);
2973 static CharDriverState
*qemu_chr_open_win(const char *filename
)
2975 CharDriverState
*chr
;
2978 chr
= qemu_mallocz(sizeof(CharDriverState
));
2981 s
= qemu_mallocz(sizeof(WinCharState
));
2987 chr
->chr_write
= win_chr_write
;
2988 chr
->chr_close
= win_chr_close
;
2990 if (win_chr_init(chr
, filename
) < 0) {
2995 qemu_chr_reset(chr
);
2999 static int win_chr_pipe_poll(void *opaque
)
3001 CharDriverState
*chr
= opaque
;
3002 WinCharState
*s
= chr
->opaque
;
3005 PeekNamedPipe(s
->hcom
, NULL
, 0, NULL
, &size
, NULL
);
3008 win_chr_read_poll(chr
);
3015 static int win_chr_pipe_init(CharDriverState
*chr
, const char *filename
)
3017 WinCharState
*s
= chr
->opaque
;
3025 s
->hsend
= CreateEvent(NULL
, TRUE
, FALSE
, NULL
);
3027 fprintf(stderr
, "Failed CreateEvent\n");
3030 s
->hrecv
= CreateEvent(NULL
, TRUE
, FALSE
, NULL
);
3032 fprintf(stderr
, "Failed CreateEvent\n");
3036 snprintf(openname
, sizeof(openname
), "\\\\.\\pipe\\%s", filename
);
3037 s
->hcom
= CreateNamedPipe(openname
, PIPE_ACCESS_DUPLEX
| FILE_FLAG_OVERLAPPED
,
3038 PIPE_TYPE_BYTE
| PIPE_READMODE_BYTE
|
3040 MAXCONNECT
, NSENDBUF
, NRECVBUF
, NTIMEOUT
, NULL
);
3041 if (s
->hcom
== INVALID_HANDLE_VALUE
) {
3042 fprintf(stderr
, "Failed CreateNamedPipe (%lu)\n", GetLastError());
3047 ZeroMemory(&ov
, sizeof(ov
));
3048 ov
.hEvent
= CreateEvent(NULL
, TRUE
, FALSE
, NULL
);
3049 ret
= ConnectNamedPipe(s
->hcom
, &ov
);
3051 fprintf(stderr
, "Failed ConnectNamedPipe\n");
3055 ret
= GetOverlappedResult(s
->hcom
, &ov
, &size
, TRUE
);
3057 fprintf(stderr
, "Failed GetOverlappedResult\n");
3059 CloseHandle(ov
.hEvent
);
3066 CloseHandle(ov
.hEvent
);
3069 qemu_add_polling_cb(win_chr_pipe_poll
, chr
);
3078 static CharDriverState
*qemu_chr_open_win_pipe(const char *filename
)
3080 CharDriverState
*chr
;
3083 chr
= qemu_mallocz(sizeof(CharDriverState
));
3086 s
= qemu_mallocz(sizeof(WinCharState
));
3092 chr
->chr_write
= win_chr_write
;
3093 chr
->chr_close
= win_chr_close
;
3095 if (win_chr_pipe_init(chr
, filename
) < 0) {
3100 qemu_chr_reset(chr
);
3104 static CharDriverState
*qemu_chr_open_win_file(HANDLE fd_out
)
3106 CharDriverState
*chr
;
3109 chr
= qemu_mallocz(sizeof(CharDriverState
));
3112 s
= qemu_mallocz(sizeof(WinCharState
));
3119 chr
->chr_write
= win_chr_write
;
3120 qemu_chr_reset(chr
);
3124 static CharDriverState
*qemu_chr_open_win_con(const char *filename
)
3126 return qemu_chr_open_win_file(GetStdHandle(STD_OUTPUT_HANDLE
));
3129 static CharDriverState
*qemu_chr_open_win_file_out(const char *file_out
)
3133 fd_out
= CreateFile(file_out
, GENERIC_WRITE
, FILE_SHARE_READ
, NULL
,
3134 OPEN_ALWAYS
, FILE_ATTRIBUTE_NORMAL
, NULL
);
3135 if (fd_out
== INVALID_HANDLE_VALUE
)
3138 return qemu_chr_open_win_file(fd_out
);
3140 #endif /* !_WIN32 */
3142 /***********************************************************/
3143 /* UDP Net console */
3147 struct sockaddr_in daddr
;
3154 static int udp_chr_write(CharDriverState
*chr
, const uint8_t *buf
, int len
)
3156 NetCharDriver
*s
= chr
->opaque
;
3158 return sendto(s
->fd
, buf
, len
, 0,
3159 (struct sockaddr
*)&s
->daddr
, sizeof(struct sockaddr_in
));
3162 static int udp_chr_read_poll(void *opaque
)
3164 CharDriverState
*chr
= opaque
;
3165 NetCharDriver
*s
= chr
->opaque
;
3167 s
->max_size
= qemu_chr_can_read(chr
);
3169 /* If there were any stray characters in the queue process them
3172 while (s
->max_size
> 0 && s
->bufptr
< s
->bufcnt
) {
3173 qemu_chr_read(chr
, &s
->buf
[s
->bufptr
], 1);
3175 s
->max_size
= qemu_chr_can_read(chr
);
3180 static void udp_chr_read(void *opaque
)
3182 CharDriverState
*chr
= opaque
;
3183 NetCharDriver
*s
= chr
->opaque
;
3185 if (s
->max_size
== 0)
3187 s
->bufcnt
= recv(s
->fd
, s
->buf
, sizeof(s
->buf
), 0);
3188 s
->bufptr
= s
->bufcnt
;
3193 while (s
->max_size
> 0 && s
->bufptr
< s
->bufcnt
) {
3194 qemu_chr_read(chr
, &s
->buf
[s
->bufptr
], 1);
3196 s
->max_size
= qemu_chr_can_read(chr
);
3200 static void udp_chr_update_read_handler(CharDriverState
*chr
)
3202 NetCharDriver
*s
= chr
->opaque
;
3205 qemu_set_fd_handler2(s
->fd
, udp_chr_read_poll
,
3206 udp_chr_read
, NULL
, chr
);
3211 static int parse_unix_path(struct sockaddr_un
*uaddr
, const char *str
);
3213 int parse_host_src_port(struct sockaddr_in
*haddr
,
3214 struct sockaddr_in
*saddr
,
3217 static CharDriverState
*qemu_chr_open_udp(const char *def
)
3219 CharDriverState
*chr
= NULL
;
3220 NetCharDriver
*s
= NULL
;
3222 struct sockaddr_in saddr
;
3224 chr
= qemu_mallocz(sizeof(CharDriverState
));
3227 s
= qemu_mallocz(sizeof(NetCharDriver
));
3231 fd
= socket(PF_INET
, SOCK_DGRAM
, 0);
3233 perror("socket(PF_INET, SOCK_DGRAM)");
3237 if (parse_host_src_port(&s
->daddr
, &saddr
, def
) < 0) {
3238 printf("Could not parse: %s\n", def
);
3242 if (bind(fd
, (struct sockaddr
*)&saddr
, sizeof(saddr
)) < 0)
3252 chr
->chr_write
= udp_chr_write
;
3253 chr
->chr_update_read_handler
= udp_chr_update_read_handler
;
3266 /***********************************************************/
3267 /* TCP Net console */
3278 static void tcp_chr_accept(void *opaque
);
3280 static int tcp_chr_write(CharDriverState
*chr
, const uint8_t *buf
, int len
)
3282 TCPCharDriver
*s
= chr
->opaque
;
3284 return send_all(s
->fd
, buf
, len
);
3286 /* XXX: indicate an error ? */
3291 static int tcp_chr_read_poll(void *opaque
)
3293 CharDriverState
*chr
= opaque
;
3294 TCPCharDriver
*s
= chr
->opaque
;
3297 s
->max_size
= qemu_chr_can_read(chr
);
3302 #define IAC_BREAK 243
3303 static void tcp_chr_process_IAC_bytes(CharDriverState
*chr
,
3305 uint8_t *buf
, int *size
)
3307 /* Handle any telnet client's basic IAC options to satisfy char by
3308 * char mode with no echo. All IAC options will be removed from
3309 * the buf and the do_telnetopt variable will be used to track the
3310 * state of the width of the IAC information.
3312 * IAC commands come in sets of 3 bytes with the exception of the
3313 * "IAC BREAK" command and the double IAC.
3319 for (i
= 0; i
< *size
; i
++) {
3320 if (s
->do_telnetopt
> 1) {
3321 if ((unsigned char)buf
[i
] == IAC
&& s
->do_telnetopt
== 2) {
3322 /* Double IAC means send an IAC */
3326 s
->do_telnetopt
= 1;
3328 if ((unsigned char)buf
[i
] == IAC_BREAK
&& s
->do_telnetopt
== 2) {
3329 /* Handle IAC break commands by sending a serial break */
3330 qemu_chr_event(chr
, CHR_EVENT_BREAK
);
3335 if (s
->do_telnetopt
>= 4) {
3336 s
->do_telnetopt
= 1;
3339 if ((unsigned char)buf
[i
] == IAC
) {
3340 s
->do_telnetopt
= 2;
3351 static void tcp_chr_read(void *opaque
)
3353 CharDriverState
*chr
= opaque
;
3354 TCPCharDriver
*s
= chr
->opaque
;
3358 if (!s
->connected
|| s
->max_size
<= 0)
3361 if (len
> s
->max_size
)
3363 size
= recv(s
->fd
, buf
, len
, 0);
3365 /* connection closed */
3367 if (s
->listen_fd
>= 0) {
3368 qemu_set_fd_handler(s
->listen_fd
, tcp_chr_accept
, NULL
, chr
);
3370 qemu_set_fd_handler(s
->fd
, NULL
, NULL
, NULL
);
3373 } else if (size
> 0) {
3374 if (s
->do_telnetopt
)
3375 tcp_chr_process_IAC_bytes(chr
, s
, buf
, &size
);
3377 qemu_chr_read(chr
, buf
, size
);
3381 static void tcp_chr_connect(void *opaque
)
3383 CharDriverState
*chr
= opaque
;
3384 TCPCharDriver
*s
= chr
->opaque
;
3387 qemu_set_fd_handler2(s
->fd
, tcp_chr_read_poll
,
3388 tcp_chr_read
, NULL
, chr
);
3389 qemu_chr_reset(chr
);
3392 #define IACSET(x,a,b,c) x[0] = a; x[1] = b; x[2] = c;
3393 static void tcp_chr_telnet_init(int fd
)
3396 /* Send the telnet negotion to put telnet in binary, no echo, single char mode */
3397 IACSET(buf
, 0xff, 0xfb, 0x01); /* IAC WILL ECHO */
3398 send(fd
, (char *)buf
, 3, 0);
3399 IACSET(buf
, 0xff, 0xfb, 0x03); /* IAC WILL Suppress go ahead */
3400 send(fd
, (char *)buf
, 3, 0);
3401 IACSET(buf
, 0xff, 0xfb, 0x00); /* IAC WILL Binary */
3402 send(fd
, (char *)buf
, 3, 0);
3403 IACSET(buf
, 0xff, 0xfd, 0x00); /* IAC DO Binary */
3404 send(fd
, (char *)buf
, 3, 0);
3407 static void socket_set_nodelay(int fd
)
3410 setsockopt(fd
, IPPROTO_TCP
, TCP_NODELAY
, (char *)&val
, sizeof(val
));
3413 static void tcp_chr_accept(void *opaque
)
3415 CharDriverState
*chr
= opaque
;
3416 TCPCharDriver
*s
= chr
->opaque
;
3417 struct sockaddr_in saddr
;
3419 struct sockaddr_un uaddr
;
3421 struct sockaddr
*addr
;
3428 len
= sizeof(uaddr
);
3429 addr
= (struct sockaddr
*)&uaddr
;
3433 len
= sizeof(saddr
);
3434 addr
= (struct sockaddr
*)&saddr
;
3436 fd
= accept(s
->listen_fd
, addr
, &len
);
3437 if (fd
< 0 && errno
!= EINTR
) {
3439 } else if (fd
>= 0) {
3440 if (s
->do_telnetopt
)
3441 tcp_chr_telnet_init(fd
);
3445 socket_set_nonblock(fd
);
3447 socket_set_nodelay(fd
);
3449 qemu_set_fd_handler(s
->listen_fd
, NULL
, NULL
, NULL
);
3450 tcp_chr_connect(chr
);
3453 static void tcp_chr_close(CharDriverState
*chr
)
3455 TCPCharDriver
*s
= chr
->opaque
;
3458 if (s
->listen_fd
>= 0)
3459 closesocket(s
->listen_fd
);
3463 static CharDriverState
*qemu_chr_open_tcp(const char *host_str
,
3467 CharDriverState
*chr
= NULL
;
3468 TCPCharDriver
*s
= NULL
;
3469 int fd
= -1, ret
, err
, val
;
3471 int is_waitconnect
= 1;
3474 struct sockaddr_in saddr
;
3476 struct sockaddr_un uaddr
;
3478 struct sockaddr
*addr
;
3483 addr
= (struct sockaddr
*)&uaddr
;
3484 addrlen
= sizeof(uaddr
);
3485 if (parse_unix_path(&uaddr
, host_str
) < 0)
3490 addr
= (struct sockaddr
*)&saddr
;
3491 addrlen
= sizeof(saddr
);
3492 if (parse_host_port(&saddr
, host_str
) < 0)
3497 while((ptr
= strchr(ptr
,','))) {
3499 if (!strncmp(ptr
,"server",6)) {
3501 } else if (!strncmp(ptr
,"nowait",6)) {
3503 } else if (!strncmp(ptr
,"nodelay",6)) {
3506 printf("Unknown option: %s\n", ptr
);
3513 chr
= qemu_mallocz(sizeof(CharDriverState
));
3516 s
= qemu_mallocz(sizeof(TCPCharDriver
));
3522 fd
= socket(PF_UNIX
, SOCK_STREAM
, 0);
3525 fd
= socket(PF_INET
, SOCK_STREAM
, 0);
3530 if (!is_waitconnect
)
3531 socket_set_nonblock(fd
);
3536 s
->is_unix
= is_unix
;
3537 s
->do_nodelay
= do_nodelay
&& !is_unix
;
3540 chr
->chr_write
= tcp_chr_write
;
3541 chr
->chr_close
= tcp_chr_close
;
3544 /* allow fast reuse */
3548 pstrcpy(path
, sizeof(path
), uaddr
.sun_path
);
3554 setsockopt(fd
, SOL_SOCKET
, SO_REUSEADDR
, (const char *)&val
, sizeof(val
));
3557 ret
= bind(fd
, addr
, addrlen
);
3561 ret
= listen(fd
, 0);
3566 qemu_set_fd_handler(s
->listen_fd
, tcp_chr_accept
, NULL
, chr
);
3568 s
->do_telnetopt
= 1;
3571 ret
= connect(fd
, addr
, addrlen
);
3573 err
= socket_error();
3574 if (err
== EINTR
|| err
== EWOULDBLOCK
) {
3575 } else if (err
== EINPROGRESS
) {
3578 } else if (err
== WSAEALREADY
) {
3590 socket_set_nodelay(fd
);
3592 tcp_chr_connect(chr
);
3594 qemu_set_fd_handler(s
->fd
, NULL
, tcp_chr_connect
, chr
);
3597 if (is_listen
&& is_waitconnect
) {
3598 printf("QEMU waiting for connection on: %s\n", host_str
);
3599 tcp_chr_accept(chr
);
3600 socket_set_nonblock(s
->listen_fd
);
3612 CharDriverState
*qemu_chr_open(const char *filename
)
3616 if (!strcmp(filename
, "vc")) {
3617 return text_console_init(&display_state
, 0);
3618 } else if (strstart(filename
, "vc:", &p
)) {
3619 return text_console_init(&display_state
, p
);
3620 } else if (!strcmp(filename
, "null")) {
3621 return qemu_chr_open_null();
3623 if (strstart(filename
, "tcp:", &p
)) {
3624 return qemu_chr_open_tcp(p
, 0, 0);
3626 if (strstart(filename
, "telnet:", &p
)) {
3627 return qemu_chr_open_tcp(p
, 1, 0);
3629 if (strstart(filename
, "udp:", &p
)) {
3630 return qemu_chr_open_udp(p
);
3632 if (strstart(filename
, "mon:", &p
)) {
3633 CharDriverState
*drv
= qemu_chr_open(p
);
3635 drv
= qemu_chr_open_mux(drv
);
3636 monitor_init(drv
, !nographic
);
3639 printf("Unable to open driver: %s\n", p
);
3643 if (strstart(filename
, "unix:", &p
)) {
3644 return qemu_chr_open_tcp(p
, 0, 1);
3645 } else if (strstart(filename
, "file:", &p
)) {
3646 return qemu_chr_open_file_out(p
);
3647 } else if (strstart(filename
, "pipe:", &p
)) {
3648 return qemu_chr_open_pipe(p
);
3649 } else if (!strcmp(filename
, "pty")) {
3650 return qemu_chr_open_pty();
3651 } else if (!strcmp(filename
, "stdio")) {
3652 return qemu_chr_open_stdio();
3654 #if defined(__linux__)
3655 if (strstart(filename
, "/dev/parport", NULL
)) {
3656 return qemu_chr_open_pp(filename
);
3659 #if defined(__linux__) || defined(__sun__)
3660 if (strstart(filename
, "/dev/", NULL
)) {
3661 return qemu_chr_open_tty(filename
);
3665 if (strstart(filename
, "COM", NULL
)) {
3666 return qemu_chr_open_win(filename
);
3668 if (strstart(filename
, "pipe:", &p
)) {
3669 return qemu_chr_open_win_pipe(p
);
3671 if (strstart(filename
, "con:", NULL
)) {
3672 return qemu_chr_open_win_con(filename
);
3674 if (strstart(filename
, "file:", &p
)) {
3675 return qemu_chr_open_win_file_out(p
);
3678 #ifdef CONFIG_BRLAPI
3679 if (!strcmp(filename
, "braille")) {
3680 return chr_baum_init();
3688 void qemu_chr_close(CharDriverState
*chr
)
3691 chr
->chr_close(chr
);
3695 /***********************************************************/
3696 /* network device redirectors */
3698 __attribute__ (( unused
))
3699 static void hex_dump(FILE *f
, const uint8_t *buf
, int size
)
3703 for(i
=0;i
<size
;i
+=16) {
3707 fprintf(f
, "%08x ", i
);
3710 fprintf(f
, " %02x", buf
[i
+j
]);
3715 for(j
=0;j
<len
;j
++) {
3717 if (c
< ' ' || c
> '~')
3719 fprintf(f
, "%c", c
);
3725 static int parse_macaddr(uint8_t *macaddr
, const char *p
)
3732 offset
= strtol(p
, &last_char
, 0);
3733 if (0 == errno
&& '\0' == *last_char
&&
3734 offset
>= 0 && offset
<= 0xFFFFFF) {
3735 macaddr
[3] = (offset
& 0xFF0000) >> 16;
3736 macaddr
[4] = (offset
& 0xFF00) >> 8;
3737 macaddr
[5] = offset
& 0xFF;
3740 for(i
= 0; i
< 6; i
++) {
3741 macaddr
[i
] = strtol(p
, (char **)&p
, 16);
3746 if (*p
!= ':' && *p
!= '-')
3757 static int get_str_sep(char *buf
, int buf_size
, const char **pp
, int sep
)
3762 p1
= strchr(p
, sep
);
3768 if (len
> buf_size
- 1)
3770 memcpy(buf
, p
, len
);
3777 int parse_host_src_port(struct sockaddr_in
*haddr
,
3778 struct sockaddr_in
*saddr
,
3779 const char *input_str
)
3781 char *str
= strdup(input_str
);
3782 char *host_str
= str
;
3787 * Chop off any extra arguments at the end of the string which
3788 * would start with a comma, then fill in the src port information
3789 * if it was provided else use the "any address" and "any port".
3791 if ((ptr
= strchr(str
,',')))
3794 if ((src_str
= strchr(input_str
,'@'))) {
3799 if (parse_host_port(haddr
, host_str
) < 0)
3802 if (!src_str
|| *src_str
== '\0')
3805 if (parse_host_port(saddr
, src_str
) < 0)
3816 int parse_host_port(struct sockaddr_in
*saddr
, const char *str
)
3824 if (get_str_sep(buf
, sizeof(buf
), &p
, ':') < 0)
3826 saddr
->sin_family
= AF_INET
;
3827 if (buf
[0] == '\0') {
3828 saddr
->sin_addr
.s_addr
= 0;
3830 if (isdigit(buf
[0])) {
3831 if (!inet_aton(buf
, &saddr
->sin_addr
))
3834 if ((he
= gethostbyname(buf
)) == NULL
)
3836 saddr
->sin_addr
= *(struct in_addr
*)he
->h_addr
;
3839 port
= strtol(p
, (char **)&r
, 0);
3842 saddr
->sin_port
= htons(port
);
3847 static int parse_unix_path(struct sockaddr_un
*uaddr
, const char *str
)
3852 len
= MIN(108, strlen(str
));
3853 p
= strchr(str
, ',');
3855 len
= MIN(len
, p
- str
);
3857 memset(uaddr
, 0, sizeof(*uaddr
));
3859 uaddr
->sun_family
= AF_UNIX
;
3860 memcpy(uaddr
->sun_path
, str
, len
);
3866 /* find or alloc a new VLAN */
3867 VLANState
*qemu_find_vlan(int id
)
3869 VLANState
**pvlan
, *vlan
;
3870 for(vlan
= first_vlan
; vlan
!= NULL
; vlan
= vlan
->next
) {
3874 vlan
= qemu_mallocz(sizeof(VLANState
));
3879 pvlan
= &first_vlan
;
3880 while (*pvlan
!= NULL
)
3881 pvlan
= &(*pvlan
)->next
;
3886 VLANClientState
*qemu_new_vlan_client(VLANState
*vlan
,
3887 IOReadHandler
*fd_read
,
3888 IOCanRWHandler
*fd_can_read
,
3891 VLANClientState
*vc
, **pvc
;
3892 vc
= qemu_mallocz(sizeof(VLANClientState
));
3895 vc
->fd_read
= fd_read
;
3896 vc
->fd_can_read
= fd_can_read
;
3897 vc
->opaque
= opaque
;
3901 pvc
= &vlan
->first_client
;
3902 while (*pvc
!= NULL
)
3903 pvc
= &(*pvc
)->next
;
3908 int qemu_can_send_packet(VLANClientState
*vc1
)
3910 VLANState
*vlan
= vc1
->vlan
;
3911 VLANClientState
*vc
;
3913 for(vc
= vlan
->first_client
; vc
!= NULL
; vc
= vc
->next
) {
3915 if (vc
->fd_can_read
&& vc
->fd_can_read(vc
->opaque
))
3922 int qemu_send_packet(VLANClientState
*vc1
, const uint8_t *buf
, int size
)
3924 VLANState
*vlan
= vc1
->vlan
;
3925 VLANClientState
*vc
;
3929 printf("vlan %d send:\n", vlan
->id
);
3930 hex_dump(stdout
, buf
, size
);
3932 for(vc
= vlan
->first_client
; vc
!= NULL
; vc
= vc
->next
) {
3934 if (!vc
->fd_can_read
|| vc
->fd_can_read(vc
->opaque
)) {
3935 vc
->fd_read(vc
->opaque
, buf
, size
);
3944 static ssize_t
vc_sendv_compat(VLANClientState
*vc
, const struct iovec
*iov
,
3951 for (i
= 0; i
< iovcnt
; i
++) {
3954 len
= MIN(sizeof(buffer
) - offset
, iov
[i
].iov_len
);
3955 memcpy(buffer
+ offset
, iov
[i
].iov_base
, len
);
3959 vc
->fd_read(vc
->opaque
, buffer
, offset
);
3964 ssize_t
qemu_sendv_packet(VLANClientState
*vc1
, const struct iovec
*iov
,
3967 VLANState
*vlan
= vc1
->vlan
;
3968 VLANClientState
*vc
;
3969 ssize_t max_len
= 0;
3971 for (vc
= vlan
->first_client
; vc
!= NULL
; vc
= vc
->next
) {
3978 len
= vc
->fd_readv(vc
->opaque
, iov
, iovcnt
);
3979 else if (vc
->fd_read
)
3980 len
= vc_sendv_compat(vc
, iov
, iovcnt
);
3982 max_len
= MAX(max_len
, len
);
3988 #if defined(CONFIG_SLIRP)
3990 /* slirp network adapter */
3992 static int slirp_inited
;
3993 static VLANClientState
*slirp_vc
;
3995 int slirp_can_output(void)
3997 return !slirp_vc
|| qemu_can_send_packet(slirp_vc
);
4000 void slirp_output(const uint8_t *pkt
, int pkt_len
)
4003 printf("slirp output:\n");
4004 hex_dump(stdout
, pkt
, pkt_len
);
4008 qemu_send_packet(slirp_vc
, pkt
, pkt_len
);
4011 static void slirp_receive(void *opaque
, const uint8_t *buf
, int size
)
4014 printf("slirp input:\n");
4015 hex_dump(stdout
, buf
, size
);
4017 slirp_input(buf
, size
);
4020 static int net_slirp_init(VLANState
*vlan
)
4022 if (!slirp_inited
) {
4026 slirp_vc
= qemu_new_vlan_client(vlan
,
4027 slirp_receive
, NULL
, NULL
);
4028 snprintf(slirp_vc
->info_str
, sizeof(slirp_vc
->info_str
), "user redirector");
4032 static void net_slirp_redir(const char *redir_str
)
4037 struct in_addr guest_addr
;
4038 int host_port
, guest_port
;
4040 if (!slirp_inited
) {
4046 if (get_str_sep(buf
, sizeof(buf
), &p
, ':') < 0)
4048 if (!strcmp(buf
, "tcp")) {
4050 } else if (!strcmp(buf
, "udp")) {
4056 if (get_str_sep(buf
, sizeof(buf
), &p
, ':') < 0)
4058 host_port
= strtol(buf
, &r
, 0);
4062 if (get_str_sep(buf
, sizeof(buf
), &p
, ':') < 0)
4064 if (buf
[0] == '\0') {
4065 pstrcpy(buf
, sizeof(buf
), "10.0.2.15");
4067 if (!inet_aton(buf
, &guest_addr
))
4070 guest_port
= strtol(p
, &r
, 0);
4074 if (slirp_redir(is_udp
, host_port
, guest_addr
, guest_port
) < 0) {
4075 fprintf(stderr
, "qemu: could not set up redirection\n");
4080 fprintf(stderr
, "qemu: syntax: -redir [tcp|udp]:host-port:[guest-host]:guest-port\n");
4088 static void erase_dir(char *dir_name
)
4092 char filename
[1024];
4094 /* erase all the files in the directory */
4095 if ((d
= opendir(dir_name
)) != 0) {
4100 if (strcmp(de
->d_name
, ".") != 0 &&
4101 strcmp(de
->d_name
, "..") != 0) {
4102 snprintf(filename
, sizeof(filename
), "%s/%s",
4103 smb_dir
, de
->d_name
);
4104 if (unlink(filename
) != 0) /* is it a directory? */
4105 erase_dir(filename
);
4113 /* automatic user mode samba server configuration */
4114 static void smb_exit(void)
4119 /* automatic user mode samba server configuration */
4120 static void net_slirp_smb(const char *exported_dir
)
4122 char smb_conf
[1024];
4123 char smb_cmdline
[1024];
4126 if (!slirp_inited
) {
4131 /* XXX: better tmp dir construction */
4132 snprintf(smb_dir
, sizeof(smb_dir
), "/tmp/qemu-smb.%d", getpid());
4133 if (mkdir(smb_dir
, 0700) < 0) {
4134 fprintf(stderr
, "qemu: could not create samba server dir '%s'\n", smb_dir
);
4137 snprintf(smb_conf
, sizeof(smb_conf
), "%s/%s", smb_dir
, "smb.conf");
4139 f
= fopen(smb_conf
, "w");
4141 fprintf(stderr
, "qemu: could not create samba server configuration file '%s'\n", smb_conf
);
4148 "socket address=127.0.0.1\n"
4149 "pid directory=%s\n"
4150 "lock directory=%s\n"
4151 "log file=%s/log.smbd\n"
4152 "smb passwd file=%s/smbpasswd\n"
4153 "security = share\n"
4168 snprintf(smb_cmdline
, sizeof(smb_cmdline
), "%s -s %s",
4169 SMBD_COMMAND
, smb_conf
);
4171 slirp_add_exec(0, smb_cmdline
, 4, 139);
4174 #endif /* !defined(_WIN32) */
4175 void do_info_slirp(void)
4180 #endif /* CONFIG_SLIRP */
4182 #if !defined(_WIN32)
4184 typedef struct TAPState
{
4185 VLANClientState
*vc
;
4187 char down_script
[1024];
4192 static void tap_receive(void *opaque
, const uint8_t *buf
, int size
)
4194 TAPState
*s
= opaque
;
4197 ret
= write(s
->fd
, buf
, size
);
4198 if (ret
< 0 && (errno
== EINTR
|| errno
== EAGAIN
)) {
4205 static ssize_t
tap_readv(void *opaque
, const struct iovec
*iov
,
4208 TAPState
*s
= opaque
;
4212 len
= writev(s
->fd
, iov
, iovcnt
);
4213 } while (len
== -1 && (errno
== EINTR
|| errno
== EAGAIN
));
4218 static int tap_can_send(void *opaque
)
4220 TAPState
*s
= opaque
;
4221 VLANClientState
*vc
;
4222 int can_receive
= 0;
4224 /* Check to see if any of our clients can receive a packet */
4225 for (vc
= s
->vc
->vlan
->first_client
; vc
; vc
= vc
->next
) {
4226 /* Skip ourselves */
4230 if (!vc
->fd_can_read
) {
4231 /* no fd_can_read handler, they always can receive */
4234 can_receive
= vc
->fd_can_read(vc
->opaque
);
4236 /* Once someone can receive, we try to send a packet */
4244 static void tap_send(void *opaque
)
4246 TAPState
*s
= opaque
;
4248 /* First try to send any buffered packet */
4252 /* If noone can receive the packet, buffer it */
4253 err
= qemu_send_packet(s
->vc
, s
->buf
, s
->size
);
4258 /* Read packets until we hit EAGAIN */
4263 sbuf
.maxlen
= sizeof(s
->buf
);
4265 s
->size
= getmsg(s
->fd
, NULL
, &sbuf
, &f
) >=0 ? sbuf
.len
: -1;
4267 s
->size
= read(s
->fd
, s
->buf
, sizeof(s
->buf
));
4270 if (s
->size
== -1 && errno
== EINTR
)
4276 /* If noone can receive the packet, buffer it */
4277 err
= qemu_send_packet(s
->vc
, s
->buf
, s
->size
);
4281 } while (s
->size
> 0);
4286 static TAPState
*net_tap_fd_init(VLANState
*vlan
, int fd
)
4290 s
= qemu_mallocz(sizeof(TAPState
));
4294 s
->vc
= qemu_new_vlan_client(vlan
, tap_receive
, NULL
, s
);
4295 s
->vc
->fd_readv
= tap_readv
;
4296 qemu_set_fd_handler2(s
->fd
, tap_can_send
, tap_send
, NULL
, s
);
4297 snprintf(s
->vc
->info_str
, sizeof(s
->vc
->info_str
), "tap: fd=%d", fd
);
4301 #if defined (_BSD) || defined (__FreeBSD_kernel__)
4302 static int tap_open(char *ifname
, int ifname_size
)
4308 TFR(fd
= open("/dev/tap", O_RDWR
));
4310 fprintf(stderr
, "warning: could not open /dev/tap: no virtual network emulation\n");
4315 dev
= devname(s
.st_rdev
, S_IFCHR
);
4316 pstrcpy(ifname
, ifname_size
, dev
);
4318 fcntl(fd
, F_SETFL
, O_NONBLOCK
);
4321 #elif defined(__sun__)
4322 #define TUNNEWPPA (('T'<<16) | 0x0001)
4324 * Allocate TAP device, returns opened fd.
4325 * Stores dev name in the first arg(must be large enough).
4327 int tap_alloc(char *dev
)
4329 int tap_fd
, if_fd
, ppa
= -1;
4330 static int ip_fd
= 0;
4333 static int arp_fd
= 0;
4334 int ip_muxid
, arp_muxid
;
4335 struct strioctl strioc_if
, strioc_ppa
;
4336 int link_type
= I_PLINK
;;
4338 char actual_name
[32] = "";
4340 memset(&ifr
, 0x0, sizeof(ifr
));
4344 while( *ptr
&& !isdigit((int)*ptr
) ) ptr
++;
4348 /* Check if IP device was opened */
4352 TFR(ip_fd
= open("/dev/udp", O_RDWR
, 0));
4354 syslog(LOG_ERR
, "Can't open /dev/ip (actually /dev/udp)");
4358 TFR(tap_fd
= open("/dev/tap", O_RDWR
, 0));
4360 syslog(LOG_ERR
, "Can't open /dev/tap");
4364 /* Assign a new PPA and get its unit number. */
4365 strioc_ppa
.ic_cmd
= TUNNEWPPA
;
4366 strioc_ppa
.ic_timout
= 0;
4367 strioc_ppa
.ic_len
= sizeof(ppa
);
4368 strioc_ppa
.ic_dp
= (char *)&ppa
;
4369 if ((ppa
= ioctl (tap_fd
, I_STR
, &strioc_ppa
)) < 0)
4370 syslog (LOG_ERR
, "Can't assign new interface");
4372 TFR(if_fd
= open("/dev/tap", O_RDWR
, 0));
4374 syslog(LOG_ERR
, "Can't open /dev/tap (2)");
4377 if(ioctl(if_fd
, I_PUSH
, "ip") < 0){
4378 syslog(LOG_ERR
, "Can't push IP module");
4382 if (ioctl(if_fd
, SIOCGLIFFLAGS
, &ifr
) < 0)
4383 syslog(LOG_ERR
, "Can't get flags\n");
4385 snprintf (actual_name
, 32, "tap%d", ppa
);
4386 strncpy (ifr
.lifr_name
, actual_name
, sizeof (ifr
.lifr_name
));
4389 /* Assign ppa according to the unit number returned by tun device */
4391 if (ioctl (if_fd
, SIOCSLIFNAME
, &ifr
) < 0)
4392 syslog (LOG_ERR
, "Can't set PPA %d", ppa
);
4393 if (ioctl(if_fd
, SIOCGLIFFLAGS
, &ifr
) <0)
4394 syslog (LOG_ERR
, "Can't get flags\n");
4395 /* Push arp module to if_fd */
4396 if (ioctl (if_fd
, I_PUSH
, "arp") < 0)
4397 syslog (LOG_ERR
, "Can't push ARP module (2)");
4399 /* Push arp module to ip_fd */
4400 if (ioctl (ip_fd
, I_POP
, NULL
) < 0)
4401 syslog (LOG_ERR
, "I_POP failed\n");
4402 if (ioctl (ip_fd
, I_PUSH
, "arp") < 0)
4403 syslog (LOG_ERR
, "Can't push ARP module (3)\n");
4405 TFR(arp_fd
= open ("/dev/tap", O_RDWR
, 0));
4407 syslog (LOG_ERR
, "Can't open %s\n", "/dev/tap");
4409 /* Set ifname to arp */
4410 strioc_if
.ic_cmd
= SIOCSLIFNAME
;
4411 strioc_if
.ic_timout
= 0;
4412 strioc_if
.ic_len
= sizeof(ifr
);
4413 strioc_if
.ic_dp
= (char *)&ifr
;
4414 if (ioctl(arp_fd
, I_STR
, &strioc_if
) < 0){
4415 syslog (LOG_ERR
, "Can't set ifname to arp\n");
4418 if((ip_muxid
= ioctl(ip_fd
, I_LINK
, if_fd
)) < 0){
4419 syslog(LOG_ERR
, "Can't link TAP device to IP");
4423 if ((arp_muxid
= ioctl (ip_fd
, link_type
, arp_fd
)) < 0)
4424 syslog (LOG_ERR
, "Can't link TAP device to ARP");
4428 memset(&ifr
, 0x0, sizeof(ifr
));
4429 strncpy (ifr
.lifr_name
, actual_name
, sizeof (ifr
.lifr_name
));
4430 ifr
.lifr_ip_muxid
= ip_muxid
;
4431 ifr
.lifr_arp_muxid
= arp_muxid
;
4433 if (ioctl (ip_fd
, SIOCSLIFMUXID
, &ifr
) < 0)
4435 ioctl (ip_fd
, I_PUNLINK
, arp_muxid
);
4436 ioctl (ip_fd
, I_PUNLINK
, ip_muxid
);
4437 syslog (LOG_ERR
, "Can't set multiplexor id");
4440 sprintf(dev
, "tap%d", ppa
);
4444 static int tap_open(char *ifname
, int ifname_size
)
4448 if( (fd
= tap_alloc(dev
)) < 0 ){
4449 fprintf(stderr
, "Cannot allocate TAP device\n");
4452 pstrcpy(ifname
, ifname_size
, dev
);
4453 fcntl(fd
, F_SETFL
, O_NONBLOCK
);
4457 static int tap_open(char *ifname
, int ifname_size
)
4462 TFR(fd
= open("/dev/net/tun", O_RDWR
));
4464 fprintf(stderr
, "warning: could not open /dev/net/tun: no virtual network emulation\n");
4467 memset(&ifr
, 0, sizeof(ifr
));
4468 ifr
.ifr_flags
= IFF_TAP
| IFF_NO_PI
;
4469 if (ifname
[0] != '\0')
4470 pstrcpy(ifr
.ifr_name
, IFNAMSIZ
, ifname
);
4472 pstrcpy(ifr
.ifr_name
, IFNAMSIZ
, "tap%d");
4473 ret
= ioctl(fd
, TUNSETIFF
, (void *) &ifr
);
4475 fprintf(stderr
, "warning: could not configure /dev/net/tun: no virtual network emulation\n");
4479 pstrcpy(ifname
, ifname_size
, ifr
.ifr_name
);
4480 fcntl(fd
, F_SETFL
, O_NONBLOCK
);
4485 static int launch_script(const char *setup_script
, const char *ifname
, int fd
)
4491 /* try to launch network script */
4495 int open_max
= sysconf (_SC_OPEN_MAX
), i
;
4496 for (i
= 0; i
< open_max
; i
++)
4497 if (i
!= STDIN_FILENO
&&
4498 i
!= STDOUT_FILENO
&&
4499 i
!= STDERR_FILENO
&&
4504 *parg
++ = (char *)setup_script
;
4505 *parg
++ = (char *)ifname
;
4507 execv(setup_script
, args
);
4510 while (waitpid(pid
, &status
, 0) != pid
);
4511 if (!WIFEXITED(status
) ||
4512 WEXITSTATUS(status
) != 0) {
4513 fprintf(stderr
, "%s: could not launch network script\n",
4521 static int net_tap_init(VLANState
*vlan
, const char *ifname1
,
4522 const char *setup_script
, const char *down_script
)
4528 if (ifname1
!= NULL
)
4529 pstrcpy(ifname
, sizeof(ifname
), ifname1
);
4532 TFR(fd
= tap_open(ifname
, sizeof(ifname
)));
4536 if (!setup_script
|| !strcmp(setup_script
, "no"))
4538 if (setup_script
[0] != '\0') {
4539 if (launch_script(setup_script
, ifname
, fd
))
4542 s
= net_tap_fd_init(vlan
, fd
);
4545 snprintf(s
->vc
->info_str
, sizeof(s
->vc
->info_str
),
4546 "tap: ifname=%s setup_script=%s", ifname
, setup_script
);
4547 if (down_script
&& strcmp(down_script
, "no"))
4548 snprintf(s
->down_script
, sizeof(s
->down_script
), "%s", down_script
);
4552 #endif /* !_WIN32 */
4554 /* network connection */
4555 typedef struct NetSocketState
{
4556 VLANClientState
*vc
;
4558 int state
; /* 0 = getting length, 1 = getting data */
4562 struct sockaddr_in dgram_dst
; /* contains inet host and port destination iff connectionless (SOCK_DGRAM) */
4565 typedef struct NetSocketListenState
{
4568 } NetSocketListenState
;
4570 /* XXX: we consider we can send the whole packet without blocking */
4571 static void net_socket_receive(void *opaque
, const uint8_t *buf
, int size
)
4573 NetSocketState
*s
= opaque
;
4577 send_all(s
->fd
, (const uint8_t *)&len
, sizeof(len
));
4578 send_all(s
->fd
, buf
, size
);
4581 static void net_socket_receive_dgram(void *opaque
, const uint8_t *buf
, int size
)
4583 NetSocketState
*s
= opaque
;
4584 sendto(s
->fd
, buf
, size
, 0,
4585 (struct sockaddr
*)&s
->dgram_dst
, sizeof(s
->dgram_dst
));
4588 static void net_socket_send(void *opaque
)
4590 NetSocketState
*s
= opaque
;
4595 size
= recv(s
->fd
, buf1
, sizeof(buf1
), 0);
4597 err
= socket_error();
4598 if (err
!= EWOULDBLOCK
)
4600 } else if (size
== 0) {
4601 /* end of connection */
4603 qemu_set_fd_handler(s
->fd
, NULL
, NULL
, NULL
);
4609 /* reassemble a packet from the network */
4615 memcpy(s
->buf
+ s
->index
, buf
, l
);
4619 if (s
->index
== 4) {
4621 s
->packet_len
= ntohl(*(uint32_t *)s
->buf
);
4627 l
= s
->packet_len
- s
->index
;
4630 memcpy(s
->buf
+ s
->index
, buf
, l
);
4634 if (s
->index
>= s
->packet_len
) {
4635 qemu_send_packet(s
->vc
, s
->buf
, s
->packet_len
);
4644 static void net_socket_send_dgram(void *opaque
)
4646 NetSocketState
*s
= opaque
;
4649 size
= recv(s
->fd
, s
->buf
, sizeof(s
->buf
), 0);
4653 /* end of connection */
4654 qemu_set_fd_handler(s
->fd
, NULL
, NULL
, NULL
);
4657 qemu_send_packet(s
->vc
, s
->buf
, size
);
4660 static int net_socket_mcast_create(struct sockaddr_in
*mcastaddr
)
4665 if (!IN_MULTICAST(ntohl(mcastaddr
->sin_addr
.s_addr
))) {
4666 fprintf(stderr
, "qemu: error: specified mcastaddr \"%s\" (0x%08x) does not contain a multicast address\n",
4667 inet_ntoa(mcastaddr
->sin_addr
),
4668 (int)ntohl(mcastaddr
->sin_addr
.s_addr
));
4672 fd
= socket(PF_INET
, SOCK_DGRAM
, 0);
4674 perror("socket(PF_INET, SOCK_DGRAM)");
4679 ret
=setsockopt(fd
, SOL_SOCKET
, SO_REUSEADDR
,
4680 (const char *)&val
, sizeof(val
));
4682 perror("setsockopt(SOL_SOCKET, SO_REUSEADDR)");
4686 ret
= bind(fd
, (struct sockaddr
*)mcastaddr
, sizeof(*mcastaddr
));
4692 /* Add host to multicast group */
4693 imr
.imr_multiaddr
= mcastaddr
->sin_addr
;
4694 imr
.imr_interface
.s_addr
= htonl(INADDR_ANY
);
4696 ret
= setsockopt(fd
, IPPROTO_IP
, IP_ADD_MEMBERSHIP
,
4697 (const char *)&imr
, sizeof(struct ip_mreq
));
4699 perror("setsockopt(IP_ADD_MEMBERSHIP)");
4703 /* Force mcast msgs to loopback (eg. several QEMUs in same host */
4705 ret
=setsockopt(fd
, IPPROTO_IP
, IP_MULTICAST_LOOP
,
4706 (const char *)&val
, sizeof(val
));
4708 perror("setsockopt(SOL_IP, IP_MULTICAST_LOOP)");
4712 socket_set_nonblock(fd
);
4720 static NetSocketState
*net_socket_fd_init_dgram(VLANState
*vlan
, int fd
,
4723 struct sockaddr_in saddr
;
4725 socklen_t saddr_len
;
4728 /* fd passed: multicast: "learn" dgram_dst address from bound address and save it
4729 * Because this may be "shared" socket from a "master" process, datagrams would be recv()
4730 * by ONLY ONE process: we must "clone" this dgram socket --jjo
4734 if (getsockname(fd
, (struct sockaddr
*) &saddr
, &saddr_len
) == 0) {
4736 if (saddr
.sin_addr
.s_addr
==0) {
4737 fprintf(stderr
, "qemu: error: init_dgram: fd=%d unbound, cannot setup multicast dst addr\n",
4741 /* clone dgram socket */
4742 newfd
= net_socket_mcast_create(&saddr
);
4744 /* error already reported by net_socket_mcast_create() */
4748 /* clone newfd to fd, close newfd */
4753 fprintf(stderr
, "qemu: error: init_dgram: fd=%d failed getsockname(): %s\n",
4754 fd
, strerror(errno
));
4759 s
= qemu_mallocz(sizeof(NetSocketState
));
4764 s
->vc
= qemu_new_vlan_client(vlan
, net_socket_receive_dgram
, NULL
, s
);
4765 qemu_set_fd_handler(s
->fd
, net_socket_send_dgram
, NULL
, s
);
4767 /* mcast: save bound address as dst */
4768 if (is_connected
) s
->dgram_dst
=saddr
;
4770 snprintf(s
->vc
->info_str
, sizeof(s
->vc
->info_str
),
4771 "socket: fd=%d (%s mcast=%s:%d)",
4772 fd
, is_connected
? "cloned" : "",
4773 inet_ntoa(saddr
.sin_addr
), ntohs(saddr
.sin_port
));
4777 static void net_socket_connect(void *opaque
)
4779 NetSocketState
*s
= opaque
;
4780 qemu_set_fd_handler(s
->fd
, net_socket_send
, NULL
, s
);
4783 static NetSocketState
*net_socket_fd_init_stream(VLANState
*vlan
, int fd
,
4787 s
= qemu_mallocz(sizeof(NetSocketState
));
4791 s
->vc
= qemu_new_vlan_client(vlan
,
4792 net_socket_receive
, NULL
, s
);
4793 snprintf(s
->vc
->info_str
, sizeof(s
->vc
->info_str
),
4794 "socket: fd=%d", fd
);
4796 net_socket_connect(s
);
4798 qemu_set_fd_handler(s
->fd
, NULL
, net_socket_connect
, s
);
4803 static NetSocketState
*net_socket_fd_init(VLANState
*vlan
, int fd
,
4806 int so_type
=-1, optlen
=sizeof(so_type
);
4808 if(getsockopt(fd
, SOL_SOCKET
, SO_TYPE
, (char *)&so_type
,
4809 (socklen_t
*)&optlen
)< 0) {
4810 fprintf(stderr
, "qemu: error: getsockopt(SO_TYPE) for fd=%d failed\n", fd
);
4815 return net_socket_fd_init_dgram(vlan
, fd
, is_connected
);
4817 return net_socket_fd_init_stream(vlan
, fd
, is_connected
);
4819 /* who knows ... this could be a eg. a pty, do warn and continue as stream */
4820 fprintf(stderr
, "qemu: warning: socket type=%d for fd=%d is not SOCK_DGRAM or SOCK_STREAM\n", so_type
, fd
);
4821 return net_socket_fd_init_stream(vlan
, fd
, is_connected
);
4826 static void net_socket_accept(void *opaque
)
4828 NetSocketListenState
*s
= opaque
;
4830 struct sockaddr_in saddr
;
4835 len
= sizeof(saddr
);
4836 fd
= accept(s
->fd
, (struct sockaddr
*)&saddr
, &len
);
4837 if (fd
< 0 && errno
!= EINTR
) {
4839 } else if (fd
>= 0) {
4843 s1
= net_socket_fd_init(s
->vlan
, fd
, 1);
4847 snprintf(s1
->vc
->info_str
, sizeof(s1
->vc
->info_str
),
4848 "socket: connection from %s:%d",
4849 inet_ntoa(saddr
.sin_addr
), ntohs(saddr
.sin_port
));
4853 static int net_socket_listen_init(VLANState
*vlan
, const char *host_str
)
4855 NetSocketListenState
*s
;
4857 struct sockaddr_in saddr
;
4859 if (parse_host_port(&saddr
, host_str
) < 0)
4862 s
= qemu_mallocz(sizeof(NetSocketListenState
));
4866 fd
= socket(PF_INET
, SOCK_STREAM
, 0);
4871 socket_set_nonblock(fd
);
4873 /* allow fast reuse */
4875 setsockopt(fd
, SOL_SOCKET
, SO_REUSEADDR
, (const char *)&val
, sizeof(val
));
4877 ret
= bind(fd
, (struct sockaddr
*)&saddr
, sizeof(saddr
));
4882 ret
= listen(fd
, 0);
4889 qemu_set_fd_handler(fd
, net_socket_accept
, NULL
, s
);
4893 static int net_socket_connect_init(VLANState
*vlan
, const char *host_str
)
4896 int fd
, connected
, ret
, err
;
4897 struct sockaddr_in saddr
;
4899 if (parse_host_port(&saddr
, host_str
) < 0)
4902 fd
= socket(PF_INET
, SOCK_STREAM
, 0);
4907 socket_set_nonblock(fd
);
4911 ret
= connect(fd
, (struct sockaddr
*)&saddr
, sizeof(saddr
));
4913 err
= socket_error();
4914 if (err
== EINTR
|| err
== EWOULDBLOCK
) {
4915 } else if (err
== EINPROGRESS
) {
4918 } else if (err
== WSAEALREADY
) {
4931 s
= net_socket_fd_init(vlan
, fd
, connected
);
4934 snprintf(s
->vc
->info_str
, sizeof(s
->vc
->info_str
),
4935 "socket: connect to %s:%d",
4936 inet_ntoa(saddr
.sin_addr
), ntohs(saddr
.sin_port
));
4940 static int net_socket_mcast_init(VLANState
*vlan
, const char *host_str
)
4944 struct sockaddr_in saddr
;
4946 if (parse_host_port(&saddr
, host_str
) < 0)
4950 fd
= net_socket_mcast_create(&saddr
);
4954 s
= net_socket_fd_init(vlan
, fd
, 0);
4958 s
->dgram_dst
= saddr
;
4960 snprintf(s
->vc
->info_str
, sizeof(s
->vc
->info_str
),
4961 "socket: mcast=%s:%d",
4962 inet_ntoa(saddr
.sin_addr
), ntohs(saddr
.sin_port
));
4967 static const char *get_opt_name(char *buf
, int buf_size
, const char *p
)
4972 while (*p
!= '\0' && *p
!= '=') {
4973 if (q
&& (q
- buf
) < buf_size
- 1)
4983 static const char *get_opt_value(char *buf
, int buf_size
, const char *p
)
4988 while (*p
!= '\0') {
4990 if (*(p
+ 1) != ',')
4994 if (q
&& (q
- buf
) < buf_size
- 1)
5004 int get_param_value(char *buf
, int buf_size
,
5005 const char *tag
, const char *str
)
5012 p
= get_opt_name(option
, sizeof(option
), p
);
5016 if (!strcmp(tag
, option
)) {
5017 (void)get_opt_value(buf
, buf_size
, p
);
5020 p
= get_opt_value(NULL
, 0, p
);
5029 int check_params(char *buf
, int buf_size
,
5030 char **params
, const char *str
)
5037 p
= get_opt_name(buf
, buf_size
, p
);
5041 for(i
= 0; params
[i
] != NULL
; i
++)
5042 if (!strcmp(params
[i
], buf
))
5044 if (params
[i
] == NULL
)
5046 p
= get_opt_value(NULL
, 0, p
);
5054 static int nic_get_free_idx(void)
5058 for (index
= 0; index
< MAX_NICS
; index
++)
5059 if (!nd_table
[index
].used
)
5064 int net_client_init(const char *str
)
5075 while (*p
!= '\0' && *p
!= ',') {
5076 if ((q
- device
) < sizeof(device
) - 1)
5084 if (get_param_value(buf
, sizeof(buf
), "vlan", p
)) {
5085 vlan_id
= strtol(buf
, NULL
, 0);
5087 vlan
= qemu_find_vlan(vlan_id
);
5089 fprintf(stderr
, "Could not create vlan %d\n", vlan_id
);
5092 if (!strcmp(device
, "nic")) {
5095 int idx
= nic_get_free_idx();
5097 if (idx
== -1 || nb_nics
>= MAX_NICS
) {
5098 fprintf(stderr
, "Too Many NICs\n");
5101 nd
= &nd_table
[idx
];
5102 macaddr
= nd
->macaddr
;
5108 macaddr
[5] = 0x56 + idx
;
5110 if (get_param_value(buf
, sizeof(buf
), "macaddr", p
)) {
5111 if (parse_macaddr(macaddr
, buf
) < 0) {
5112 fprintf(stderr
, "invalid syntax for ethernet address\n");
5116 if (get_param_value(buf
, sizeof(buf
), "model", p
)) {
5117 nd
->model
= strdup(buf
);
5122 vlan
->nb_guest_devs
++;
5125 if (!strcmp(device
, "none")) {
5126 /* does nothing. It is needed to signal that no network cards
5131 if (!strcmp(device
, "user")) {
5132 if (get_param_value(buf
, sizeof(buf
), "hostname", p
)) {
5133 pstrcpy(slirp_hostname
, sizeof(slirp_hostname
), buf
);
5135 vlan
->nb_host_devs
++;
5136 ret
= net_slirp_init(vlan
);
5140 if (!strcmp(device
, "tap")) {
5142 if (get_param_value(ifname
, sizeof(ifname
), "ifname", p
) <= 0) {
5143 fprintf(stderr
, "tap: no interface name\n");
5146 vlan
->nb_host_devs
++;
5147 ret
= tap_win32_init(vlan
, ifname
);
5150 if (!strcmp(device
, "tap")) {
5152 char setup_script
[1024], down_script
[1024];
5154 vlan
->nb_host_devs
++;
5155 if (get_param_value(buf
, sizeof(buf
), "fd", p
) > 0) {
5156 fd
= strtol(buf
, NULL
, 0);
5157 fcntl(fd
, F_SETFL
, O_NONBLOCK
);
5159 if (net_tap_fd_init(vlan
, fd
))
5162 if (get_param_value(ifname
, sizeof(ifname
), "ifname", p
) <= 0) {
5165 if (get_param_value(setup_script
, sizeof(setup_script
), "script", p
) == 0) {
5166 pstrcpy(setup_script
, sizeof(setup_script
), DEFAULT_NETWORK_SCRIPT
);
5168 if (get_param_value(down_script
, sizeof(down_script
), "downscript", p
) == 0) {
5169 pstrcpy(down_script
, sizeof(down_script
), DEFAULT_NETWORK_DOWN_SCRIPT
);
5171 ret
= net_tap_init(vlan
, ifname
, setup_script
, down_script
);
5175 if (!strcmp(device
, "socket")) {
5176 if (get_param_value(buf
, sizeof(buf
), "fd", p
) > 0) {
5178 fd
= strtol(buf
, NULL
, 0);
5180 if (net_socket_fd_init(vlan
, fd
, 1))
5182 } else if (get_param_value(buf
, sizeof(buf
), "listen", p
) > 0) {
5183 ret
= net_socket_listen_init(vlan
, buf
);
5184 } else if (get_param_value(buf
, sizeof(buf
), "connect", p
) > 0) {
5185 ret
= net_socket_connect_init(vlan
, buf
);
5186 } else if (get_param_value(buf
, sizeof(buf
), "mcast", p
) > 0) {
5187 ret
= net_socket_mcast_init(vlan
, buf
);
5189 fprintf(stderr
, "Unknown socket options: %s\n", p
);
5192 vlan
->nb_host_devs
++;
5195 fprintf(stderr
, "Unknown network device: %s\n", device
);
5199 fprintf(stderr
, "Could not initialize device '%s'\n", device
);
5205 void net_client_uninit(NICInfo
*nd
)
5207 nd
->vlan
->nb_guest_devs
--; /* XXX: free vlan on last reference */
5210 free((void *)nd
->model
);
5213 void do_info_network(void)
5216 VLANClientState
*vc
;
5218 for(vlan
= first_vlan
; vlan
!= NULL
; vlan
= vlan
->next
) {
5219 term_printf("VLAN %d devices:\n", vlan
->id
);
5220 for(vc
= vlan
->first_client
; vc
!= NULL
; vc
= vc
->next
)
5221 term_printf(" %s\n", vc
->info_str
);
5225 #define HD_ALIAS "index=%d,media=disk"
5227 #define CDROM_ALIAS "index=1,media=cdrom"
5229 #define CDROM_ALIAS "index=2,media=cdrom"
5231 #define FD_ALIAS "index=%d,if=floppy"
5232 #define PFLASH_ALIAS "if=pflash"
5233 #define MTD_ALIAS "if=mtd"
5234 #define SD_ALIAS "index=0,if=sd"
5236 static int drive_opt_get_free_idx(void)
5240 for (index
= 0; index
< MAX_DRIVES
; index
++)
5241 if (!drives_opt
[index
].used
) {
5242 drives_opt
[index
].used
= 1;
5249 static int drive_get_free_idx(void)
5253 for (index
= 0; index
< MAX_DRIVES
; index
++)
5254 if (!drives_table
[index
].used
) {
5255 drives_table
[index
].used
= 1;
5262 int drive_add(const char *file
, const char *fmt
, ...)
5265 int index
= drive_opt_get_free_idx();
5267 if (nb_drives_opt
>= MAX_DRIVES
|| index
== -1) {
5268 fprintf(stderr
, "qemu: too many drives\n");
5272 drives_opt
[index
].file
= file
;
5274 vsnprintf(drives_opt
[index
].opt
,
5275 sizeof(drives_opt
[0].opt
), fmt
, ap
);
5282 void drive_remove(int index
)
5284 drives_opt
[index
].used
= 0;
5288 int drive_get_index(BlockInterfaceType type
, int bus
, int unit
)
5292 /* seek interface, bus and unit */
5294 for (index
= 0; index
< MAX_DRIVES
; index
++)
5295 if (drives_table
[index
].type
== type
&&
5296 drives_table
[index
].bus
== bus
&&
5297 drives_table
[index
].unit
== unit
&&
5298 drives_table
[index
].used
)
5304 int drive_get_max_bus(BlockInterfaceType type
)
5310 for (index
= 0; index
< nb_drives
; index
++) {
5311 if(drives_table
[index
].type
== type
&&
5312 drives_table
[index
].bus
> max_bus
)
5313 max_bus
= drives_table
[index
].bus
;
5318 static void bdrv_format_print(void *opaque
, const char *name
)
5320 fprintf(stderr
, " %s", name
);
5323 void drive_uninit(BlockDriverState
*bdrv
)
5327 for (i
= 0; i
< MAX_DRIVES
; i
++)
5328 if (drives_table
[i
].bdrv
== bdrv
) {
5329 drives_table
[i
].bdrv
= NULL
;
5330 drives_table
[i
].used
= 0;
5331 drive_remove(drives_table
[i
].drive_opt_idx
);
5337 int drive_init(struct drive_opt
*arg
, int snapshot
,
5338 QEMUMachine
*machine
)
5343 const char *mediastr
= "";
5344 BlockInterfaceType type
;
5345 enum { MEDIA_DISK
, MEDIA_CDROM
} media
;
5346 int bus_id
, unit_id
;
5347 int cyls
, heads
, secs
, translation
;
5348 BlockDriverState
*bdrv
;
5349 BlockDriver
*drv
= NULL
;
5354 int drives_table_idx
;
5355 char *str
= arg
->opt
;
5356 char *params
[] = { "bus", "unit", "if", "index", "cyls", "heads",
5357 "secs", "trans", "media", "snapshot", "file",
5358 "cache", "format", "boot", NULL
};
5360 if (check_params(buf
, sizeof(buf
), params
, str
) < 0) {
5361 fprintf(stderr
, "qemu: unknown parameter '%s' in '%s'\n",
5367 cyls
= heads
= secs
= 0;
5370 translation
= BIOS_ATA_TRANSLATION_AUTO
;
5374 if (!strcmp(machine
->name
, "realview") ||
5375 !strcmp(machine
->name
, "SS-5") ||
5376 !strcmp(machine
->name
, "SS-10") ||
5377 !strcmp(machine
->name
, "SS-600MP") ||
5378 !strcmp(machine
->name
, "versatilepb") ||
5379 !strcmp(machine
->name
, "versatileab")) {
5381 max_devs
= MAX_SCSI_DEVS
;
5382 strcpy(devname
, "scsi");
5385 max_devs
= MAX_IDE_DEVS
;
5386 strcpy(devname
, "ide");
5390 /* extract parameters */
5392 if (get_param_value(buf
, sizeof(buf
), "bus", str
)) {
5393 bus_id
= strtol(buf
, NULL
, 0);
5395 fprintf(stderr
, "qemu: '%s' invalid bus id\n", str
);
5400 if (get_param_value(buf
, sizeof(buf
), "unit", str
)) {
5401 unit_id
= strtol(buf
, NULL
, 0);
5403 fprintf(stderr
, "qemu: '%s' invalid unit id\n", str
);
5408 if (get_param_value(buf
, sizeof(buf
), "if", str
)) {
5409 pstrcpy(devname
, sizeof(devname
), buf
);
5410 if (!strcmp(buf
, "ide")) {
5412 max_devs
= MAX_IDE_DEVS
;
5413 } else if (!strcmp(buf
, "scsi")) {
5415 max_devs
= MAX_SCSI_DEVS
;
5416 } else if (!strcmp(buf
, "floppy")) {
5419 } else if (!strcmp(buf
, "pflash")) {
5422 } else if (!strcmp(buf
, "mtd")) {
5425 } else if (!strcmp(buf
, "sd")) {
5428 } else if (!strcmp(buf
, "virtio")) {
5432 fprintf(stderr
, "qemu: '%s' unsupported bus type '%s'\n", str
, buf
);
5437 if (get_param_value(buf
, sizeof(buf
), "index", str
)) {
5438 index
= strtol(buf
, NULL
, 0);
5440 fprintf(stderr
, "qemu: '%s' invalid index\n", str
);
5445 if (get_param_value(buf
, sizeof(buf
), "cyls", str
)) {
5446 cyls
= strtol(buf
, NULL
, 0);
5449 if (get_param_value(buf
, sizeof(buf
), "heads", str
)) {
5450 heads
= strtol(buf
, NULL
, 0);
5453 if (get_param_value(buf
, sizeof(buf
), "secs", str
)) {
5454 secs
= strtol(buf
, NULL
, 0);
5457 if (cyls
|| heads
|| secs
) {
5458 if (cyls
< 1 || cyls
> 16383) {
5459 fprintf(stderr
, "qemu: '%s' invalid physical cyls number\n", str
);
5462 if (heads
< 1 || heads
> 16) {
5463 fprintf(stderr
, "qemu: '%s' invalid physical heads number\n", str
);
5466 if (secs
< 1 || secs
> 63) {
5467 fprintf(stderr
, "qemu: '%s' invalid physical secs number\n", str
);
5472 if (get_param_value(buf
, sizeof(buf
), "trans", str
)) {
5475 "qemu: '%s' trans must be used with cyls,heads and secs\n",
5479 if (!strcmp(buf
, "none"))
5480 translation
= BIOS_ATA_TRANSLATION_NONE
;
5481 else if (!strcmp(buf
, "lba"))
5482 translation
= BIOS_ATA_TRANSLATION_LBA
;
5483 else if (!strcmp(buf
, "auto"))
5484 translation
= BIOS_ATA_TRANSLATION_AUTO
;
5486 fprintf(stderr
, "qemu: '%s' invalid translation type\n", str
);
5491 if (get_param_value(buf
, sizeof(buf
), "media", str
)) {
5492 if (!strcmp(buf
, "disk")) {
5494 } else if (!strcmp(buf
, "cdrom")) {
5495 if (cyls
|| secs
|| heads
) {
5497 "qemu: '%s' invalid physical CHS format\n", str
);
5500 media
= MEDIA_CDROM
;
5502 fprintf(stderr
, "qemu: '%s' invalid media\n", str
);
5507 if (get_param_value(buf
, sizeof(buf
), "snapshot", str
)) {
5508 if (!strcmp(buf
, "on"))
5510 else if (!strcmp(buf
, "off"))
5513 fprintf(stderr
, "qemu: '%s' invalid snapshot option\n", str
);
5518 if (get_param_value(buf
, sizeof(buf
), "cache", str
)) {
5519 if (!strcmp(buf
, "off"))
5521 else if (!strcmp(buf
, "on"))
5524 fprintf(stderr
, "qemu: invalid cache option\n");
5529 if (get_param_value(buf
, sizeof(buf
), "format", str
)) {
5530 if (strcmp(buf
, "?") == 0) {
5531 fprintf(stderr
, "qemu: Supported formats:");
5532 bdrv_iterate_format(bdrv_format_print
, NULL
);
5533 fprintf(stderr
, "\n");
5536 drv
= bdrv_find_format(buf
);
5538 fprintf(stderr
, "qemu: '%s' invalid format\n", buf
);
5543 if (get_param_value(buf
, sizeof(buf
), "boot", str
)) {
5544 if (!strcmp(buf
, "on")) {
5545 if (extboot_drive
!= -1) {
5546 fprintf(stderr
, "qemu: two bootable drives specified\n");
5549 extboot_drive
= nb_drives
;
5550 } else if (strcmp(buf
, "off")) {
5551 fprintf(stderr
, "qemu: '%s' invalid boot option\n", str
);
5556 if (arg
->file
== NULL
)
5557 get_param_value(file
, sizeof(file
), "file", str
);
5559 pstrcpy(file
, sizeof(file
), arg
->file
);
5561 /* compute bus and unit according index */
5564 if (bus_id
!= 0 || unit_id
!= -1) {
5566 "qemu: '%s' index cannot be used with bus and unit\n", str
);
5574 unit_id
= index
% max_devs
;
5575 bus_id
= index
/ max_devs
;
5579 /* if user doesn't specify a unit_id,
5580 * try to find the first free
5583 if (unit_id
== -1) {
5585 while (drive_get_index(type
, bus_id
, unit_id
) != -1) {
5587 if (max_devs
&& unit_id
>= max_devs
) {
5588 unit_id
-= max_devs
;
5596 if (max_devs
&& unit_id
>= max_devs
) {
5597 fprintf(stderr
, "qemu: '%s' unit %d too big (max is %d)\n",
5598 str
, unit_id
, max_devs
- 1);
5603 * ignore multiple definitions
5606 if (drive_get_index(type
, bus_id
, unit_id
) != -1)
5611 if (type
== IF_IDE
|| type
== IF_SCSI
)
5612 mediastr
= (media
== MEDIA_CDROM
) ? "-cd" : "-hd";
5614 snprintf(buf
, sizeof(buf
), "%s%i%s%i",
5615 devname
, bus_id
, mediastr
, unit_id
);
5617 snprintf(buf
, sizeof(buf
), "%s%s%i",
5618 devname
, mediastr
, unit_id
);
5619 bdrv
= bdrv_new(buf
);
5620 drives_table_idx
= drive_get_free_idx();
5621 drives_table
[drives_table_idx
].bdrv
= bdrv
;
5622 drives_table
[drives_table_idx
].type
= type
;
5623 drives_table
[drives_table_idx
].bus
= bus_id
;
5624 drives_table
[drives_table_idx
].unit
= unit_id
;
5625 drives_table
[drives_table_idx
].drive_opt_idx
= arg
- drives_opt
;
5634 bdrv_set_geometry_hint(bdrv
, cyls
, heads
, secs
);
5635 bdrv_set_translation_hint(bdrv
, translation
);
5639 bdrv_set_type_hint(bdrv
, BDRV_TYPE_CDROM
);
5644 /* FIXME: This isn't really a floppy, but it's a reasonable
5647 bdrv_set_type_hint(bdrv
, BDRV_TYPE_FLOPPY
);
5658 bdrv_flags
|= BDRV_O_SNAPSHOT
;
5660 bdrv_flags
|= BDRV_O_DIRECT
;
5661 if (bdrv_open2(bdrv
, file
, bdrv_flags
, drv
) < 0 || qemu_key_check(bdrv
, file
)) {
5662 fprintf(stderr
, "qemu: could not open disk image %s\n",
5666 return drives_table_idx
;
5669 /***********************************************************/
5672 static USBPort
*used_usb_ports
;
5673 static USBPort
*free_usb_ports
;
5675 /* ??? Maybe change this to register a hub to keep track of the topology. */
5676 void qemu_register_usb_port(USBPort
*port
, void *opaque
, int index
,
5677 usb_attachfn attach
)
5679 port
->opaque
= opaque
;
5680 port
->index
= index
;
5681 port
->attach
= attach
;
5682 port
->next
= free_usb_ports
;
5683 free_usb_ports
= port
;
5686 static int usb_device_add(const char *devname
)
5692 if (!free_usb_ports
)
5695 if (strstart(devname
, "host:", &p
)) {
5696 dev
= usb_host_device_open(p
);
5697 } else if (!strcmp(devname
, "mouse")) {
5698 dev
= usb_mouse_init();
5699 } else if (!strcmp(devname
, "tablet")) {
5700 dev
= usb_tablet_init();
5701 } else if (!strcmp(devname
, "keyboard")) {
5702 dev
= usb_keyboard_init();
5703 } else if (strstart(devname
, "disk:", &p
)) {
5704 dev
= usb_msd_init(p
);
5705 } else if (!strcmp(devname
, "wacom-tablet")) {
5706 dev
= usb_wacom_init();
5707 } else if (strstart(devname
, "serial:", &p
)) {
5708 dev
= usb_serial_init(p
);
5709 #ifdef CONFIG_BRLAPI
5710 } else if (!strcmp(devname
, "braille")) {
5711 dev
= usb_baum_init();
5719 /* Find a USB port to add the device to. */
5720 port
= free_usb_ports
;
5724 /* Create a new hub and chain it on. */
5725 free_usb_ports
= NULL
;
5726 port
->next
= used_usb_ports
;
5727 used_usb_ports
= port
;
5729 hub
= usb_hub_init(VM_USB_HUB_SIZE
);
5730 usb_attach(port
, hub
);
5731 port
= free_usb_ports
;
5734 free_usb_ports
= port
->next
;
5735 port
->next
= used_usb_ports
;
5736 used_usb_ports
= port
;
5737 usb_attach(port
, dev
);
5741 static int usb_device_del(const char *devname
)
5749 if (!used_usb_ports
)
5752 p
= strchr(devname
, '.');
5755 bus_num
= strtoul(devname
, NULL
, 0);
5756 addr
= strtoul(p
+ 1, NULL
, 0);
5760 lastp
= &used_usb_ports
;
5761 port
= used_usb_ports
;
5762 while (port
&& port
->dev
->addr
!= addr
) {
5763 lastp
= &port
->next
;
5771 *lastp
= port
->next
;
5772 usb_attach(port
, NULL
);
5773 dev
->handle_destroy(dev
);
5774 port
->next
= free_usb_ports
;
5775 free_usb_ports
= port
;
5779 void do_usb_add(const char *devname
)
5782 ret
= usb_device_add(devname
);
5784 term_printf("Could not add USB device '%s'\n", devname
);
5787 void do_usb_del(const char *devname
)
5790 ret
= usb_device_del(devname
);
5792 term_printf("Could not remove USB device '%s'\n", devname
);
5799 const char *speed_str
;
5802 term_printf("USB support not enabled\n");
5806 for (port
= used_usb_ports
; port
; port
= port
->next
) {
5810 switch(dev
->speed
) {
5814 case USB_SPEED_FULL
:
5817 case USB_SPEED_HIGH
:
5824 term_printf(" Device %d.%d, Speed %s Mb/s, Product %s\n",
5825 0, dev
->addr
, speed_str
, dev
->devname
);
5829 /***********************************************************/
5830 /* PCMCIA/Cardbus */
5832 static struct pcmcia_socket_entry_s
{
5833 struct pcmcia_socket_s
*socket
;
5834 struct pcmcia_socket_entry_s
*next
;
5835 } *pcmcia_sockets
= 0;
5837 void pcmcia_socket_register(struct pcmcia_socket_s
*socket
)
5839 struct pcmcia_socket_entry_s
*entry
;
5841 entry
= qemu_malloc(sizeof(struct pcmcia_socket_entry_s
));
5842 entry
->socket
= socket
;
5843 entry
->next
= pcmcia_sockets
;
5844 pcmcia_sockets
= entry
;
5847 void pcmcia_socket_unregister(struct pcmcia_socket_s
*socket
)
5849 struct pcmcia_socket_entry_s
*entry
, **ptr
;
5851 ptr
= &pcmcia_sockets
;
5852 for (entry
= *ptr
; entry
; ptr
= &entry
->next
, entry
= *ptr
)
5853 if (entry
->socket
== socket
) {
5859 void pcmcia_info(void)
5861 struct pcmcia_socket_entry_s
*iter
;
5862 if (!pcmcia_sockets
)
5863 term_printf("No PCMCIA sockets\n");
5865 for (iter
= pcmcia_sockets
; iter
; iter
= iter
->next
)
5866 term_printf("%s: %s\n", iter
->socket
->slot_string
,
5867 iter
->socket
->attached
? iter
->socket
->card_string
:
5871 /***********************************************************/
5874 static void dumb_update(DisplayState
*ds
, int x
, int y
, int w
, int h
)
5878 static void dumb_resize(DisplayState
*ds
, int w
, int h
)
5882 static void dumb_refresh(DisplayState
*ds
)
5884 #if defined(CONFIG_SDL)
5889 static void dumb_display_init(DisplayState
*ds
)
5894 ds
->dpy_update
= dumb_update
;
5895 ds
->dpy_resize
= dumb_resize
;
5896 ds
->dpy_refresh
= dumb_refresh
;
5899 /***********************************************************/
5902 #define MAX_IO_HANDLERS 64
5904 typedef struct IOHandlerRecord
{
5906 IOCanRWHandler
*fd_read_poll
;
5908 IOHandler
*fd_write
;
5911 /* temporary data */
5913 struct IOHandlerRecord
*next
;
5916 static IOHandlerRecord
*first_io_handler
;
5918 /* XXX: fd_read_poll should be suppressed, but an API change is
5919 necessary in the character devices to suppress fd_can_read(). */
5920 int qemu_set_fd_handler2(int fd
,
5921 IOCanRWHandler
*fd_read_poll
,
5923 IOHandler
*fd_write
,
5926 IOHandlerRecord
**pioh
, *ioh
;
5928 if (!fd_read
&& !fd_write
) {
5929 pioh
= &first_io_handler
;
5934 if (ioh
->fd
== fd
) {
5941 for(ioh
= first_io_handler
; ioh
!= NULL
; ioh
= ioh
->next
) {
5945 ioh
= qemu_mallocz(sizeof(IOHandlerRecord
));
5948 ioh
->next
= first_io_handler
;
5949 first_io_handler
= ioh
;
5952 ioh
->fd_read_poll
= fd_read_poll
;
5953 ioh
->fd_read
= fd_read
;
5954 ioh
->fd_write
= fd_write
;
5955 ioh
->opaque
= opaque
;
5962 int qemu_set_fd_handler(int fd
,
5964 IOHandler
*fd_write
,
5967 return qemu_set_fd_handler2(fd
, NULL
, fd_read
, fd_write
, opaque
);
5970 /***********************************************************/
5971 /* Polling handling */
5973 typedef struct PollingEntry
{
5976 struct PollingEntry
*next
;
5979 static PollingEntry
*first_polling_entry
;
5981 int qemu_add_polling_cb(PollingFunc
*func
, void *opaque
)
5983 PollingEntry
**ppe
, *pe
;
5984 pe
= qemu_mallocz(sizeof(PollingEntry
));
5988 pe
->opaque
= opaque
;
5989 for(ppe
= &first_polling_entry
; *ppe
!= NULL
; ppe
= &(*ppe
)->next
);
5994 void qemu_del_polling_cb(PollingFunc
*func
, void *opaque
)
5996 PollingEntry
**ppe
, *pe
;
5997 for(ppe
= &first_polling_entry
; *ppe
!= NULL
; ppe
= &(*ppe
)->next
) {
5999 if (pe
->func
== func
&& pe
->opaque
== opaque
) {
6008 /***********************************************************/
6009 /* Wait objects support */
6010 typedef struct WaitObjects
{
6012 HANDLE events
[MAXIMUM_WAIT_OBJECTS
+ 1];
6013 WaitObjectFunc
*func
[MAXIMUM_WAIT_OBJECTS
+ 1];
6014 void *opaque
[MAXIMUM_WAIT_OBJECTS
+ 1];
6017 static WaitObjects wait_objects
= {0};
6019 int qemu_add_wait_object(HANDLE handle
, WaitObjectFunc
*func
, void *opaque
)
6021 WaitObjects
*w
= &wait_objects
;
6023 if (w
->num
>= MAXIMUM_WAIT_OBJECTS
)
6025 w
->events
[w
->num
] = handle
;
6026 w
->func
[w
->num
] = func
;
6027 w
->opaque
[w
->num
] = opaque
;
6032 void qemu_del_wait_object(HANDLE handle
, WaitObjectFunc
*func
, void *opaque
)
6035 WaitObjects
*w
= &wait_objects
;
6038 for (i
= 0; i
< w
->num
; i
++) {
6039 if (w
->events
[i
] == handle
)
6042 w
->events
[i
] = w
->events
[i
+ 1];
6043 w
->func
[i
] = w
->func
[i
+ 1];
6044 w
->opaque
[i
] = w
->opaque
[i
+ 1];
6052 #define SELF_ANNOUNCE_ROUNDS 5
6053 #define ETH_P_EXPERIMENTAL 0x01F1 /* just a number */
6054 //#define ETH_P_EXPERIMENTAL 0x0012 /* make it the size of the packet */
6055 #define EXPERIMENTAL_MAGIC 0xf1f23f4f
6057 static int announce_self_create(uint8_t *buf
,
6060 uint32_t magic
= EXPERIMENTAL_MAGIC
;
6061 uint16_t proto
= htons(ETH_P_EXPERIMENTAL
);
6063 /* FIXME: should we send a different packet (arp/rarp/ping)? */
6065 memset(buf
, 0xff, 6); /* h_dst */
6066 memcpy(buf
+ 6, mac_addr
, 6); /* h_src */
6067 memcpy(buf
+ 12, &proto
, 2); /* h_proto */
6068 memcpy(buf
+ 14, &magic
, 4); /* magic */
6070 return 18; /* len */
6073 static void qemu_announce_self(void)
6077 VLANClientState
*vc
;
6080 for (i
= 0; i
< nb_nics
; i
++) {
6081 len
= announce_self_create(buf
, nd_table
[i
].macaddr
);
6082 vlan
= nd_table
[i
].vlan
;
6083 for(vc
= vlan
->first_client
; vc
!= NULL
; vc
= vc
->next
) {
6084 if (vc
->fd_read
== tap_receive
) /* send only if tap */
6085 for (j
=0; j
< SELF_ANNOUNCE_ROUNDS
; j
++)
6086 vc
->fd_read(vc
->opaque
, buf
, len
);
6091 /***********************************************************/
6092 /* savevm/loadvm support */
6094 #define IO_BUF_SIZE 32768
6097 QEMUFilePutBufferFunc
*put_buffer
;
6098 QEMUFileGetBufferFunc
*get_buffer
;
6099 QEMUFileCloseFunc
*close
;
6102 int64_t buf_offset
; /* start of buffer when writing, end of buffer
6105 int buf_size
; /* 0 when writing */
6106 uint8_t buf
[IO_BUF_SIZE
];
6109 typedef struct QEMUFileFD
6114 static int fd_get_buffer(void *opaque
, uint8_t *buf
, int64_t pos
, int size
)
6116 QEMUFileFD
*s
= opaque
;
6121 len
= read(s
->fd
, buf
+ offset
, size
- offset
);
6123 if (errno
== EINTR
|| errno
== EAGAIN
)
6130 QEMUFile
*qemu_fopen_fd(int fd
)
6132 QEMUFileFD
*s
= qemu_mallocz(sizeof(QEMUFileFD
));
6134 return qemu_fopen(s
, NULL
, fd_get_buffer
, qemu_free
);
6137 typedef struct QEMUFileUnix
6142 static void file_put_buffer(void *opaque
, const uint8_t *buf
, int64_t pos
, int size
)
6144 QEMUFileUnix
*s
= opaque
;
6145 fseek(s
->outfile
, pos
, SEEK_SET
);
6146 fwrite(buf
, 1, size
, s
->outfile
);
6149 static int file_get_buffer(void *opaque
, uint8_t *buf
, int64_t pos
, int size
)
6151 QEMUFileUnix
*s
= opaque
;
6152 fseek(s
->outfile
, pos
, SEEK_SET
);
6153 return fread(buf
, 1, size
, s
->outfile
);
6156 static void file_close(void *opaque
)
6158 QEMUFileUnix
*s
= opaque
;
6163 QEMUFile
*qemu_fopen_file(const char *filename
, const char *mode
)
6167 s
= qemu_mallocz(sizeof(QEMUFileUnix
));
6171 s
->outfile
= fopen(filename
, mode
);
6175 if (!strcmp(mode
, "wb"))
6176 return qemu_fopen(s
, file_put_buffer
, NULL
, file_close
);
6177 else if (!strcmp(mode
, "rb"))
6178 return qemu_fopen(s
, NULL
, file_get_buffer
, file_close
);
6187 typedef struct QEMUFileBdrv
6189 BlockDriverState
*bs
;
6190 int64_t base_offset
;
6193 static void bdrv_put_buffer(void *opaque
, const uint8_t *buf
, int64_t pos
, int size
)
6195 QEMUFileBdrv
*s
= opaque
;
6196 bdrv_pwrite(s
->bs
, s
->base_offset
+ pos
, buf
, size
);
6199 static int bdrv_get_buffer(void *opaque
, uint8_t *buf
, int64_t pos
, int size
)
6201 QEMUFileBdrv
*s
= opaque
;
6202 return bdrv_pread(s
->bs
, s
->base_offset
+ pos
, buf
, size
);
6205 QEMUFile
*qemu_fopen_bdrv(BlockDriverState
*bs
, int64_t offset
, int is_writable
)
6209 s
= qemu_mallocz(sizeof(QEMUFileBdrv
));
6214 s
->base_offset
= offset
;
6217 return qemu_fopen(s
, bdrv_put_buffer
, NULL
, qemu_free
);
6219 return qemu_fopen(s
, NULL
, bdrv_get_buffer
, qemu_free
);
6222 QEMUFile
*qemu_fopen(void *opaque
, QEMUFilePutBufferFunc
*put_buffer
,
6223 QEMUFileGetBufferFunc
*get_buffer
, QEMUFileCloseFunc
*close
)
6227 f
= qemu_mallocz(sizeof(QEMUFile
));
6232 f
->put_buffer
= put_buffer
;
6233 f
->get_buffer
= get_buffer
;
6239 void qemu_fflush(QEMUFile
*f
)
6244 if (f
->buf_index
> 0) {
6245 f
->put_buffer(f
->opaque
, f
->buf
, f
->buf_offset
, f
->buf_index
);
6246 f
->buf_offset
+= f
->buf_index
;
6251 static void qemu_fill_buffer(QEMUFile
*f
)
6258 len
= f
->get_buffer(f
->opaque
, f
->buf
, f
->buf_offset
, IO_BUF_SIZE
);
6264 f
->buf_offset
+= len
;
6267 void qemu_fclose(QEMUFile
*f
)
6271 f
->close(f
->opaque
);
6275 void qemu_put_buffer(QEMUFile
*f
, const uint8_t *buf
, int size
)
6279 l
= IO_BUF_SIZE
- f
->buf_index
;
6282 memcpy(f
->buf
+ f
->buf_index
, buf
, l
);
6286 if (f
->buf_index
>= IO_BUF_SIZE
)
6291 void qemu_put_byte(QEMUFile
*f
, int v
)
6293 f
->buf
[f
->buf_index
++] = v
;
6294 if (f
->buf_index
>= IO_BUF_SIZE
)
6298 int qemu_get_buffer(QEMUFile
*f
, uint8_t *buf
, int size1
)
6304 l
= f
->buf_size
- f
->buf_index
;
6306 qemu_fill_buffer(f
);
6307 l
= f
->buf_size
- f
->buf_index
;
6313 memcpy(buf
, f
->buf
+ f
->buf_index
, l
);
6318 return size1
- size
;
6321 int qemu_get_byte(QEMUFile
*f
)
6323 if (f
->buf_index
>= f
->buf_size
) {
6324 qemu_fill_buffer(f
);
6325 if (f
->buf_index
>= f
->buf_size
)
6328 return f
->buf
[f
->buf_index
++];
6331 int64_t qemu_ftell(QEMUFile
*f
)
6333 return f
->buf_offset
- f
->buf_size
+ f
->buf_index
;
6336 int64_t qemu_fseek(QEMUFile
*f
, int64_t pos
, int whence
)
6338 if (whence
== SEEK_SET
) {
6340 } else if (whence
== SEEK_CUR
) {
6341 pos
+= qemu_ftell(f
);
6343 /* SEEK_END not supported */
6346 if (f
->put_buffer
) {
6348 f
->buf_offset
= pos
;
6350 f
->buf_offset
= pos
;
6357 void qemu_put_be16(QEMUFile
*f
, unsigned int v
)
6359 qemu_put_byte(f
, v
>> 8);
6360 qemu_put_byte(f
, v
);
6363 void qemu_put_be32(QEMUFile
*f
, unsigned int v
)
6365 qemu_put_byte(f
, v
>> 24);
6366 qemu_put_byte(f
, v
>> 16);
6367 qemu_put_byte(f
, v
>> 8);
6368 qemu_put_byte(f
, v
);
6371 void qemu_put_be64(QEMUFile
*f
, uint64_t v
)
6373 qemu_put_be32(f
, v
>> 32);
6374 qemu_put_be32(f
, v
);
6377 unsigned int qemu_get_be16(QEMUFile
*f
)
6380 v
= qemu_get_byte(f
) << 8;
6381 v
|= qemu_get_byte(f
);
6385 unsigned int qemu_get_be32(QEMUFile
*f
)
6388 v
= qemu_get_byte(f
) << 24;
6389 v
|= qemu_get_byte(f
) << 16;
6390 v
|= qemu_get_byte(f
) << 8;
6391 v
|= qemu_get_byte(f
);
6395 uint64_t qemu_get_be64(QEMUFile
*f
)
6398 v
= (uint64_t)qemu_get_be32(f
) << 32;
6399 v
|= qemu_get_be32(f
);
6403 typedef struct SaveStateEntry
{
6407 SaveStateHandler
*save_state
;
6408 LoadStateHandler
*load_state
;
6410 struct SaveStateEntry
*next
;
6413 static SaveStateEntry
*first_se
;
6415 /* TODO: Individual devices generally have very little idea about the rest
6416 of the system, so instance_id should be removed/replaced. */
6417 int register_savevm(const char *idstr
,
6420 SaveStateHandler
*save_state
,
6421 LoadStateHandler
*load_state
,
6424 SaveStateEntry
*se
, **pse
;
6426 se
= qemu_malloc(sizeof(SaveStateEntry
));
6429 pstrcpy(se
->idstr
, sizeof(se
->idstr
), idstr
);
6430 se
->instance_id
= (instance_id
== -1) ? 0 : instance_id
;
6431 se
->version_id
= version_id
;
6432 se
->save_state
= save_state
;
6433 se
->load_state
= load_state
;
6434 se
->opaque
= opaque
;
6437 /* add at the end of list */
6439 while (*pse
!= NULL
) {
6440 if (instance_id
== -1
6441 && strcmp(se
->idstr
, (*pse
)->idstr
) == 0
6442 && se
->instance_id
<= (*pse
)->instance_id
)
6443 se
->instance_id
= (*pse
)->instance_id
+ 1;
6444 pse
= &(*pse
)->next
;
6450 #define QEMU_VM_FILE_MAGIC 0x5145564d
6451 #define QEMU_VM_FILE_VERSION 0x00000002
6453 static int qemu_savevm_state(QEMUFile
*f
)
6457 int64_t cur_pos
, len_pos
, total_len_pos
;
6459 qemu_put_be32(f
, QEMU_VM_FILE_MAGIC
);
6460 qemu_put_be32(f
, QEMU_VM_FILE_VERSION
);
6461 total_len_pos
= qemu_ftell(f
);
6462 qemu_put_be64(f
, 0); /* total size */
6464 for(se
= first_se
; se
!= NULL
; se
= se
->next
) {
6465 if (se
->save_state
== NULL
)
6466 /* this one has a loader only, for backwards compatibility */
6470 len
= strlen(se
->idstr
);
6471 qemu_put_byte(f
, len
);
6472 qemu_put_buffer(f
, (uint8_t *)se
->idstr
, len
);
6474 qemu_put_be32(f
, se
->instance_id
);
6475 qemu_put_be32(f
, se
->version_id
);
6477 /* record size: filled later */
6478 len_pos
= qemu_ftell(f
);
6479 qemu_put_be32(f
, 0);
6480 se
->save_state(f
, se
->opaque
);
6482 /* fill record size */
6483 cur_pos
= qemu_ftell(f
);
6484 len
= cur_pos
- len_pos
- 4;
6485 qemu_fseek(f
, len_pos
, SEEK_SET
);
6486 qemu_put_be32(f
, len
);
6487 qemu_fseek(f
, cur_pos
, SEEK_SET
);
6489 cur_pos
= qemu_ftell(f
);
6490 qemu_fseek(f
, total_len_pos
, SEEK_SET
);
6491 qemu_put_be64(f
, cur_pos
- total_len_pos
- 8);
6492 qemu_fseek(f
, cur_pos
, SEEK_SET
);
6498 static SaveStateEntry
*find_se(const char *idstr
, int instance_id
)
6502 for(se
= first_se
; se
!= NULL
; se
= se
->next
) {
6503 if (!strcmp(se
->idstr
, idstr
) &&
6504 instance_id
== se
->instance_id
)
6510 static int qemu_loadvm_state(QEMUFile
*f
)
6513 int len
, ret
, instance_id
, record_len
, version_id
;
6514 int64_t total_len
, end_pos
, cur_pos
;
6518 v
= qemu_get_be32(f
);
6519 if (v
!= QEMU_VM_FILE_MAGIC
)
6521 v
= qemu_get_be32(f
);
6522 if (v
!= QEMU_VM_FILE_VERSION
) {
6527 total_len
= qemu_get_be64(f
);
6528 end_pos
= total_len
+ qemu_ftell(f
);
6530 if (qemu_ftell(f
) >= end_pos
)
6532 len
= qemu_get_byte(f
);
6533 qemu_get_buffer(f
, (uint8_t *)idstr
, len
);
6535 instance_id
= qemu_get_be32(f
);
6536 version_id
= qemu_get_be32(f
);
6537 record_len
= qemu_get_be32(f
);
6539 printf("idstr=%s instance=0x%x version=%d len=%d\n",
6540 idstr
, instance_id
, version_id
, record_len
);
6542 cur_pos
= qemu_ftell(f
);
6543 se
= find_se(idstr
, instance_id
);
6545 fprintf(stderr
, "qemu: warning: instance 0x%x of device '%s' not present in current VM\n",
6546 instance_id
, idstr
);
6548 ret
= se
->load_state(f
, se
->opaque
, version_id
);
6550 fprintf(stderr
, "qemu: warning: error while loading state for instance 0x%x of device '%s'\n",
6551 instance_id
, idstr
);
6555 /* always seek to exact end of record */
6556 qemu_fseek(f
, cur_pos
+ record_len
, SEEK_SET
);
6563 int qemu_live_savevm_state(QEMUFile
*f
)
6568 qemu_put_be32(f
, QEMU_VM_FILE_MAGIC
);
6569 qemu_put_be32(f
, QEMU_VM_FILE_VERSION
);
6571 for(se
= first_se
; se
!= NULL
; se
= se
->next
) {
6572 len
= strlen(se
->idstr
);
6574 qemu_put_byte(f
, len
);
6575 qemu_put_buffer(f
, se
->idstr
, len
);
6576 qemu_put_be32(f
, se
->instance_id
);
6577 qemu_put_be32(f
, se
->version_id
);
6579 se
->save_state(f
, se
->opaque
);
6582 qemu_put_byte(f
, 0);
6588 int qemu_live_loadvm_state(QEMUFile
*f
)
6591 int len
, ret
, instance_id
, version_id
;
6595 v
= qemu_get_be32(f
);
6596 if (v
!= QEMU_VM_FILE_MAGIC
)
6598 v
= qemu_get_be32(f
);
6599 if (v
!= QEMU_VM_FILE_VERSION
) {
6606 len
= qemu_get_byte(f
);
6609 qemu_get_buffer(f
, idstr
, len
);
6611 instance_id
= qemu_get_be32(f
);
6612 version_id
= qemu_get_be32(f
);
6613 se
= find_se(idstr
, instance_id
);
6615 fprintf(stderr
, "qemu: warning: instance 0x%x of device '%s' not present in current VM\n",
6616 instance_id
, idstr
);
6618 if (version_id
> se
->version_id
) { /* src version > dst version */
6619 fprintf(stderr
, "migration:version mismatch:%s:%d(s)>%d(d)\n",
6620 idstr
, version_id
, se
->version_id
);
6624 ret
= se
->load_state(f
, se
->opaque
, version_id
);
6626 fprintf(stderr
, "qemu: warning: error while loading state for instance 0x%x of device '%s'\n",
6627 instance_id
, idstr
);
6634 qemu_announce_self();
6640 /* device can contain snapshots */
6641 static int bdrv_can_snapshot(BlockDriverState
*bs
)
6644 !bdrv_is_removable(bs
) &&
6645 !bdrv_is_read_only(bs
));
6648 /* device must be snapshots in order to have a reliable snapshot */
6649 static int bdrv_has_snapshot(BlockDriverState
*bs
)
6652 !bdrv_is_removable(bs
) &&
6653 !bdrv_is_read_only(bs
));
6656 static BlockDriverState
*get_bs_snapshots(void)
6658 BlockDriverState
*bs
;
6662 return bs_snapshots
;
6663 for(i
= 0; i
<= nb_drives
; i
++) {
6664 bs
= drives_table
[i
].bdrv
;
6665 if (bdrv_can_snapshot(bs
))
6674 static int bdrv_snapshot_find(BlockDriverState
*bs
, QEMUSnapshotInfo
*sn_info
,
6677 QEMUSnapshotInfo
*sn_tab
, *sn
;
6681 nb_sns
= bdrv_snapshot_list(bs
, &sn_tab
);
6684 for(i
= 0; i
< nb_sns
; i
++) {
6686 if (!strcmp(sn
->id_str
, name
) || !strcmp(sn
->name
, name
)) {
6696 void do_savevm(const char *name
)
6698 BlockDriverState
*bs
, *bs1
;
6699 QEMUSnapshotInfo sn1
, *sn
= &sn1
, old_sn1
, *old_sn
= &old_sn1
;
6700 int must_delete
, ret
, i
;
6701 BlockDriverInfo bdi1
, *bdi
= &bdi1
;
6703 int saved_vm_running
;
6710 bs
= get_bs_snapshots();
6712 term_printf("No block device can accept snapshots\n");
6716 /* ??? Should this occur after vm_stop? */
6719 saved_vm_running
= vm_running
;
6724 ret
= bdrv_snapshot_find(bs
, old_sn
, name
);
6729 memset(sn
, 0, sizeof(*sn
));
6731 pstrcpy(sn
->name
, sizeof(sn
->name
), old_sn
->name
);
6732 pstrcpy(sn
->id_str
, sizeof(sn
->id_str
), old_sn
->id_str
);
6735 pstrcpy(sn
->name
, sizeof(sn
->name
), name
);
6738 /* fill auxiliary fields */
6741 sn
->date_sec
= tb
.time
;
6742 sn
->date_nsec
= tb
.millitm
* 1000000;
6744 gettimeofday(&tv
, NULL
);
6745 sn
->date_sec
= tv
.tv_sec
;
6746 sn
->date_nsec
= tv
.tv_usec
* 1000;
6748 sn
->vm_clock_nsec
= qemu_get_clock(vm_clock
);
6750 if (bdrv_get_info(bs
, bdi
) < 0 || bdi
->vm_state_offset
<= 0) {
6751 term_printf("Device %s does not support VM state snapshots\n",
6752 bdrv_get_device_name(bs
));
6756 /* save the VM state */
6757 f
= qemu_fopen_bdrv(bs
, bdi
->vm_state_offset
, 1);
6759 term_printf("Could not open VM state file\n");
6762 ret
= qemu_savevm_state(f
);
6763 sn
->vm_state_size
= qemu_ftell(f
);
6766 term_printf("Error %d while writing VM\n", ret
);
6770 /* create the snapshots */
6772 for(i
= 0; i
< nb_drives
; i
++) {
6773 bs1
= drives_table
[i
].bdrv
;
6774 if (bdrv_has_snapshot(bs1
)) {
6776 ret
= bdrv_snapshot_delete(bs1
, old_sn
->id_str
);
6778 term_printf("Error while deleting snapshot on '%s'\n",
6779 bdrv_get_device_name(bs1
));
6782 ret
= bdrv_snapshot_create(bs1
, sn
);
6784 term_printf("Error while creating snapshot on '%s'\n",
6785 bdrv_get_device_name(bs1
));
6791 if (saved_vm_running
)
6795 void do_loadvm(const char *name
)
6797 BlockDriverState
*bs
, *bs1
;
6798 BlockDriverInfo bdi1
, *bdi
= &bdi1
;
6801 int saved_vm_running
;
6803 bs
= get_bs_snapshots();
6805 term_printf("No block device supports snapshots\n");
6809 /* Flush all IO requests so they don't interfere with the new state. */
6812 saved_vm_running
= vm_running
;
6815 for(i
= 0; i
<= nb_drives
; i
++) {
6816 bs1
= drives_table
[i
].bdrv
;
6817 if (bdrv_has_snapshot(bs1
)) {
6818 ret
= bdrv_snapshot_goto(bs1
, name
);
6821 term_printf("Warning: ");
6824 term_printf("Snapshots not supported on device '%s'\n",
6825 bdrv_get_device_name(bs1
));
6828 term_printf("Could not find snapshot '%s' on device '%s'\n",
6829 name
, bdrv_get_device_name(bs1
));
6832 term_printf("Error %d while activating snapshot on '%s'\n",
6833 ret
, bdrv_get_device_name(bs1
));
6836 /* fatal on snapshot block device */
6843 if (bdrv_get_info(bs
, bdi
) < 0 || bdi
->vm_state_offset
<= 0) {
6844 term_printf("Device %s does not support VM state snapshots\n",
6845 bdrv_get_device_name(bs
));
6849 /* restore the VM state */
6850 f
= qemu_fopen_bdrv(bs
, bdi
->vm_state_offset
, 0);
6852 term_printf("Could not open VM state file\n");
6855 ret
= qemu_loadvm_state(f
);
6858 term_printf("Error %d while loading VM state\n", ret
);
6861 if (saved_vm_running
)
6865 void do_delvm(const char *name
)
6867 BlockDriverState
*bs
, *bs1
;
6870 bs
= get_bs_snapshots();
6872 term_printf("No block device supports snapshots\n");
6876 for(i
= 0; i
<= nb_drives
; i
++) {
6877 bs1
= drives_table
[i
].bdrv
;
6878 if (bdrv_has_snapshot(bs1
)) {
6879 ret
= bdrv_snapshot_delete(bs1
, name
);
6881 if (ret
== -ENOTSUP
)
6882 term_printf("Snapshots not supported on device '%s'\n",
6883 bdrv_get_device_name(bs1
));
6885 term_printf("Error %d while deleting snapshot on '%s'\n",
6886 ret
, bdrv_get_device_name(bs1
));
6892 void do_info_snapshots(void)
6894 BlockDriverState
*bs
, *bs1
;
6895 QEMUSnapshotInfo
*sn_tab
, *sn
;
6899 bs
= get_bs_snapshots();
6901 term_printf("No available block device supports snapshots\n");
6904 term_printf("Snapshot devices:");
6905 for(i
= 0; i
<= nb_drives
; i
++) {
6906 bs1
= drives_table
[i
].bdrv
;
6907 if (bdrv_has_snapshot(bs1
)) {
6909 term_printf(" %s", bdrv_get_device_name(bs1
));
6914 nb_sns
= bdrv_snapshot_list(bs
, &sn_tab
);
6916 term_printf("bdrv_snapshot_list: error %d\n", nb_sns
);
6919 term_printf("Snapshot list (from %s):\n", bdrv_get_device_name(bs
));
6920 term_printf("%s\n", bdrv_snapshot_dump(buf
, sizeof(buf
), NULL
));
6921 for(i
= 0; i
< nb_sns
; i
++) {
6923 term_printf("%s\n", bdrv_snapshot_dump(buf
, sizeof(buf
), sn
));
6928 /***********************************************************/
6929 /* ram save/restore */
6931 static int ram_get_page(QEMUFile
*f
, uint8_t *buf
, int len
)
6935 v
= qemu_get_byte(f
);
6938 if (qemu_get_buffer(f
, buf
, len
) != len
)
6942 v
= qemu_get_byte(f
);
6943 memset(buf
, v
, len
);
6951 static int ram_load_v1(QEMUFile
*f
, void *opaque
)
6956 if (qemu_get_be32(f
) != phys_ram_size
)
6958 for(i
= 0; i
< phys_ram_size
; i
+= TARGET_PAGE_SIZE
) {
6959 if (kvm_enabled() && (i
>=0xa0000) && (i
<0xc0000)) /* do not access video-addresses */
6961 ret
= ram_get_page(f
, phys_ram_base
+ i
, TARGET_PAGE_SIZE
);
6968 #define BDRV_HASH_BLOCK_SIZE 1024
6969 #define IOBUF_SIZE 4096
6970 #define RAM_CBLOCK_MAGIC 0xfabe
6972 typedef struct RamCompressState
{
6975 uint8_t buf
[IOBUF_SIZE
];
6978 static int ram_compress_open(RamCompressState
*s
, QEMUFile
*f
)
6981 memset(s
, 0, sizeof(*s
));
6983 ret
= deflateInit2(&s
->zstream
, 1,
6985 9, Z_DEFAULT_STRATEGY
);
6988 s
->zstream
.avail_out
= IOBUF_SIZE
;
6989 s
->zstream
.next_out
= s
->buf
;
6993 static void ram_put_cblock(RamCompressState
*s
, const uint8_t *buf
, int len
)
6995 qemu_put_be16(s
->f
, RAM_CBLOCK_MAGIC
);
6996 qemu_put_be16(s
->f
, len
);
6997 qemu_put_buffer(s
->f
, buf
, len
);
7000 static int ram_compress_buf(RamCompressState
*s
, const uint8_t *buf
, int len
)
7004 s
->zstream
.avail_in
= len
;
7005 s
->zstream
.next_in
= (uint8_t *)buf
;
7006 while (s
->zstream
.avail_in
> 0) {
7007 ret
= deflate(&s
->zstream
, Z_NO_FLUSH
);
7010 if (s
->zstream
.avail_out
== 0) {
7011 ram_put_cblock(s
, s
->buf
, IOBUF_SIZE
);
7012 s
->zstream
.avail_out
= IOBUF_SIZE
;
7013 s
->zstream
.next_out
= s
->buf
;
7019 static void ram_compress_close(RamCompressState
*s
)
7023 /* compress last bytes */
7025 ret
= deflate(&s
->zstream
, Z_FINISH
);
7026 if (ret
== Z_OK
|| ret
== Z_STREAM_END
) {
7027 len
= IOBUF_SIZE
- s
->zstream
.avail_out
;
7029 ram_put_cblock(s
, s
->buf
, len
);
7031 s
->zstream
.avail_out
= IOBUF_SIZE
;
7032 s
->zstream
.next_out
= s
->buf
;
7033 if (ret
== Z_STREAM_END
)
7040 deflateEnd(&s
->zstream
);
7043 typedef struct RamDecompressState
{
7046 uint8_t buf
[IOBUF_SIZE
];
7047 } RamDecompressState
;
7049 static int ram_decompress_open(RamDecompressState
*s
, QEMUFile
*f
)
7052 memset(s
, 0, sizeof(*s
));
7054 ret
= inflateInit(&s
->zstream
);
7060 static int ram_decompress_buf(RamDecompressState
*s
, uint8_t *buf
, int len
)
7064 s
->zstream
.avail_out
= len
;
7065 s
->zstream
.next_out
= buf
;
7066 while (s
->zstream
.avail_out
> 0) {
7067 if (s
->zstream
.avail_in
== 0) {
7068 if (qemu_get_be16(s
->f
) != RAM_CBLOCK_MAGIC
)
7070 clen
= qemu_get_be16(s
->f
);
7071 if (clen
> IOBUF_SIZE
)
7073 qemu_get_buffer(s
->f
, s
->buf
, clen
);
7074 s
->zstream
.avail_in
= clen
;
7075 s
->zstream
.next_in
= s
->buf
;
7077 ret
= inflate(&s
->zstream
, Z_PARTIAL_FLUSH
);
7078 if (ret
!= Z_OK
&& ret
!= Z_STREAM_END
) {
7085 static void ram_decompress_close(RamDecompressState
*s
)
7087 inflateEnd(&s
->zstream
);
7090 static void ram_save_live(QEMUFile
*f
, void *opaque
)
7094 for (addr
= 0; addr
< phys_ram_size
; addr
+= TARGET_PAGE_SIZE
) {
7095 if (kvm_enabled() && (addr
>=0xa0000) && (addr
<0xc0000)) /* do not access video-addresses */
7097 if (cpu_physical_memory_get_dirty(addr
, MIGRATION_DIRTY_FLAG
)) {
7098 qemu_put_be32(f
, addr
);
7099 qemu_put_buffer(f
, phys_ram_base
+ addr
, TARGET_PAGE_SIZE
);
7102 qemu_put_be32(f
, 1);
7105 static void ram_save_static(QEMUFile
*f
, void *opaque
)
7108 RamCompressState s1
, *s
= &s1
;
7111 qemu_put_be32(f
, phys_ram_size
);
7112 if (ram_compress_open(s
, f
) < 0)
7114 for(i
= 0; i
< phys_ram_size
; i
+= BDRV_HASH_BLOCK_SIZE
) {
7115 if (kvm_enabled() && (i
>=0xa0000) && (i
<0xc0000)) /* do not access video-addresses */
7118 if (tight_savevm_enabled
) {
7122 /* find if the memory block is available on a virtual
7125 for(j
= 0; j
< nb_drives
; j
++) {
7126 sector_num
= bdrv_hash_find(drives_table
[j
].bdrv
,
7128 BDRV_HASH_BLOCK_SIZE
);
7129 if (sector_num
>= 0)
7133 goto normal_compress
;
7136 cpu_to_be64wu((uint64_t *)(buf
+ 2), sector_num
);
7137 ram_compress_buf(s
, buf
, 10);
7143 ram_compress_buf(s
, buf
, 1);
7144 ram_compress_buf(s
, phys_ram_base
+ i
, BDRV_HASH_BLOCK_SIZE
);
7147 ram_compress_close(s
);
7150 static void ram_save(QEMUFile
*f
, void *opaque
)
7152 int in_migration
= cpu_physical_memory_get_dirty_tracking();
7154 qemu_put_byte(f
, in_migration
);
7157 ram_save_live(f
, opaque
);
7159 ram_save_static(f
, opaque
);
7162 static int ram_load_live(QEMUFile
*f
, void *opaque
)
7167 addr
= qemu_get_be32(f
);
7171 qemu_get_buffer(f
, phys_ram_base
+ addr
, TARGET_PAGE_SIZE
);
7177 static int ram_load_static(QEMUFile
*f
, void *opaque
)
7179 RamDecompressState s1
, *s
= &s1
;
7183 if (qemu_get_be32(f
) != phys_ram_size
)
7185 if (ram_decompress_open(s
, f
) < 0)
7187 for(i
= 0; i
< phys_ram_size
; i
+= BDRV_HASH_BLOCK_SIZE
) {
7188 if (kvm_enabled() && (i
>=0xa0000) && (i
<0xc0000)) /* do not access video-addresses */
7190 if (ram_decompress_buf(s
, buf
, 1) < 0) {
7191 fprintf(stderr
, "Error while reading ram block header\n");
7195 if (ram_decompress_buf(s
, phys_ram_base
+ i
, BDRV_HASH_BLOCK_SIZE
) < 0) {
7196 fprintf(stderr
, "Error while reading ram block address=0x%08" PRIx64
, (uint64_t)i
);
7205 ram_decompress_buf(s
, buf
+ 1, 9);
7207 sector_num
= be64_to_cpupu((const uint64_t *)(buf
+ 2));
7208 if (bs_index
>= nb_drives
) {
7209 fprintf(stderr
, "Invalid block device index %d\n", bs_index
);
7212 if (bdrv_read(drives_table
[bs_index
].bdrv
, sector_num
,
7214 BDRV_HASH_BLOCK_SIZE
/ 512) < 0) {
7215 fprintf(stderr
, "Error while reading sector %d:%" PRId64
"\n",
7216 bs_index
, sector_num
);
7223 printf("Error block header\n");
7227 ram_decompress_close(s
);
7231 static int ram_load(QEMUFile
*f
, void *opaque
, int version_id
)
7235 switch (version_id
) {
7237 ret
= ram_load_v1(f
, opaque
);
7240 if (qemu_get_byte(f
)) {
7241 ret
= ram_load_live(f
, opaque
);
7245 ret
= ram_load_static(f
, opaque
);
7255 /***********************************************************/
7256 /* bottom halves (can be seen as timers which expire ASAP) */
7265 static QEMUBH
*first_bh
= NULL
;
7267 QEMUBH
*qemu_bh_new(QEMUBHFunc
*cb
, void *opaque
)
7270 bh
= qemu_mallocz(sizeof(QEMUBH
));
7274 bh
->opaque
= opaque
;
7278 int qemu_bh_poll(void)
7297 void qemu_bh_schedule(QEMUBH
*bh
)
7299 CPUState
*env
= cpu_single_env
;
7303 bh
->next
= first_bh
;
7306 /* stop the currently executing CPU to execute the BH ASAP */
7308 cpu_interrupt(env
, CPU_INTERRUPT_EXIT
);
7313 void qemu_bh_cancel(QEMUBH
*bh
)
7316 if (bh
->scheduled
) {
7319 pbh
= &(*pbh
)->next
;
7325 void qemu_bh_delete(QEMUBH
*bh
)
7331 /***********************************************************/
7332 /* machine registration */
7334 QEMUMachine
*first_machine
= NULL
;
7335 QEMUMachine
*current_machine
= NULL
;
7337 int qemu_register_machine(QEMUMachine
*m
)
7340 pm
= &first_machine
;
7348 static QEMUMachine
*find_machine(const char *name
)
7352 for(m
= first_machine
; m
!= NULL
; m
= m
->next
) {
7353 if (!strcmp(m
->name
, name
))
7359 /***********************************************************/
7360 /* main execution loop */
7362 static void gui_update(void *opaque
)
7364 DisplayState
*ds
= opaque
;
7365 ds
->dpy_refresh(ds
);
7366 qemu_mod_timer(ds
->gui_timer
,
7367 (ds
->gui_timer_interval
?
7368 ds
->gui_timer_interval
:
7369 GUI_REFRESH_INTERVAL
)
7370 + qemu_get_clock(rt_clock
));
7373 struct vm_change_state_entry
{
7374 VMChangeStateHandler
*cb
;
7376 LIST_ENTRY (vm_change_state_entry
) entries
;
7379 static LIST_HEAD(vm_change_state_head
, vm_change_state_entry
) vm_change_state_head
;
7381 VMChangeStateEntry
*qemu_add_vm_change_state_handler(VMChangeStateHandler
*cb
,
7384 VMChangeStateEntry
*e
;
7386 e
= qemu_mallocz(sizeof (*e
));
7392 LIST_INSERT_HEAD(&vm_change_state_head
, e
, entries
);
7396 void qemu_del_vm_change_state_handler(VMChangeStateEntry
*e
)
7398 LIST_REMOVE (e
, entries
);
7402 static void vm_state_notify(int running
)
7404 VMChangeStateEntry
*e
;
7406 for (e
= vm_change_state_head
.lh_first
; e
; e
= e
->entries
.le_next
) {
7407 e
->cb(e
->opaque
, running
);
7411 /* XXX: support several handlers */
7412 static VMStopHandler
*vm_stop_cb
;
7413 static void *vm_stop_opaque
;
7415 int qemu_add_vm_stop_handler(VMStopHandler
*cb
, void *opaque
)
7418 vm_stop_opaque
= opaque
;
7422 void qemu_del_vm_stop_handler(VMStopHandler
*cb
, void *opaque
)
7433 qemu_rearm_alarm_timer(alarm_timer
);
7437 void vm_stop(int reason
)
7440 cpu_disable_ticks();
7444 vm_stop_cb(vm_stop_opaque
, reason
);
7451 /* reset/shutdown handler */
7453 typedef struct QEMUResetEntry
{
7454 QEMUResetHandler
*func
;
7456 struct QEMUResetEntry
*next
;
7459 static QEMUResetEntry
*first_reset_entry
;
7460 static int reset_requested
;
7461 static int shutdown_requested
;
7462 static int powerdown_requested
;
7464 int qemu_shutdown_requested(void)
7466 int r
= shutdown_requested
;
7467 shutdown_requested
= 0;
7471 int qemu_reset_requested(void)
7473 int r
= reset_requested
;
7474 reset_requested
= 0;
7478 int qemu_powerdown_requested(void)
7480 int r
= powerdown_requested
;
7481 powerdown_requested
= 0;
7485 void qemu_register_reset(QEMUResetHandler
*func
, void *opaque
)
7487 QEMUResetEntry
**pre
, *re
;
7489 pre
= &first_reset_entry
;
7490 while (*pre
!= NULL
)
7491 pre
= &(*pre
)->next
;
7492 re
= qemu_mallocz(sizeof(QEMUResetEntry
));
7494 re
->opaque
= opaque
;
7499 void qemu_system_reset(void)
7503 /* reset all devices */
7504 for(re
= first_reset_entry
; re
!= NULL
; re
= re
->next
) {
7505 re
->func(re
->opaque
);
7509 void qemu_system_reset_request(void)
7512 shutdown_requested
= 1;
7514 reset_requested
= 1;
7517 cpu_interrupt(cpu_single_env
, CPU_INTERRUPT_EXIT
);
7521 void qemu_system_shutdown_request(void)
7523 shutdown_requested
= 1;
7525 cpu_interrupt(cpu_single_env
, CPU_INTERRUPT_EXIT
);
7528 void qemu_system_powerdown_request(void)
7530 powerdown_requested
= 1;
7532 cpu_interrupt(cpu_single_env
, CPU_INTERRUPT_EXIT
);
7535 static int qemu_select(int max_fd
, fd_set
*rfds
, fd_set
*wfds
, fd_set
*xfds
,
7540 /* KVM holds a mutex while QEMU code is running, we need hooks to
7541 release the mutex whenever QEMU code sleeps. */
7545 ret
= select(max_fd
, rfds
, wfds
, xfds
, tv
);
7552 void main_loop_wait(int timeout
)
7554 IOHandlerRecord
*ioh
;
7555 fd_set rfds
, wfds
, xfds
;
7564 /* XXX: need to suppress polling by better using win32 events */
7566 for(pe
= first_polling_entry
; pe
!= NULL
; pe
= pe
->next
) {
7567 ret
|= pe
->func(pe
->opaque
);
7572 WaitObjects
*w
= &wait_objects
;
7574 ret
= WaitForMultipleObjects(w
->num
, w
->events
, FALSE
, timeout
);
7575 if (WAIT_OBJECT_0
+ 0 <= ret
&& ret
<= WAIT_OBJECT_0
+ w
->num
- 1) {
7576 if (w
->func
[ret
- WAIT_OBJECT_0
])
7577 w
->func
[ret
- WAIT_OBJECT_0
](w
->opaque
[ret
- WAIT_OBJECT_0
]);
7579 /* Check for additional signaled events */
7580 for(i
= (ret
- WAIT_OBJECT_0
+ 1); i
< w
->num
; i
++) {
7582 /* Check if event is signaled */
7583 ret2
= WaitForSingleObject(w
->events
[i
], 0);
7584 if(ret2
== WAIT_OBJECT_0
) {
7586 w
->func
[i
](w
->opaque
[i
]);
7587 } else if (ret2
== WAIT_TIMEOUT
) {
7589 err
= GetLastError();
7590 fprintf(stderr
, "WaitForSingleObject error %d %d\n", i
, err
);
7593 } else if (ret
== WAIT_TIMEOUT
) {
7595 err
= GetLastError();
7596 fprintf(stderr
, "WaitForMultipleObjects error %d %d\n", ret
, err
);
7600 /* poll any events */
7601 /* XXX: separate device handlers from system ones */
7606 for(ioh
= first_io_handler
; ioh
!= NULL
; ioh
= ioh
->next
) {
7610 (!ioh
->fd_read_poll
||
7611 ioh
->fd_read_poll(ioh
->opaque
) != 0)) {
7612 FD_SET(ioh
->fd
, &rfds
);
7616 if (ioh
->fd_write
) {
7617 FD_SET(ioh
->fd
, &wfds
);
7627 tv
.tv_sec
= timeout
/ 1000;
7628 tv
.tv_usec
= (timeout
% 1000) * 1000;
7630 #if defined(CONFIG_SLIRP)
7632 slirp_select_fill(&nfds
, &rfds
, &wfds
, &xfds
);
7635 ret
= qemu_select(nfds
+ 1, &rfds
, &wfds
, &xfds
, &tv
);
7637 IOHandlerRecord
**pioh
;
7639 for(ioh
= first_io_handler
; ioh
!= NULL
; ioh
= ioh
->next
) {
7640 if (!ioh
->deleted
&& ioh
->fd_read
&& FD_ISSET(ioh
->fd
, &rfds
)) {
7641 ioh
->fd_read(ioh
->opaque
);
7642 if (!(ioh
->fd_read_poll
&& ioh
->fd_read_poll(ioh
->opaque
)))
7643 FD_CLR(ioh
->fd
, &rfds
);
7645 if (!ioh
->deleted
&& ioh
->fd_write
&& FD_ISSET(ioh
->fd
, &wfds
)) {
7646 ioh
->fd_write(ioh
->opaque
);
7650 /* remove deleted IO handlers */
7651 pioh
= &first_io_handler
;
7661 #if defined(CONFIG_SLIRP)
7668 slirp_select_poll(&rfds
, &wfds
, &xfds
);
7673 if (likely(!cur_cpu
|| !(cur_cpu
->singlestep_enabled
& SSTEP_NOTIMER
)))
7674 qemu_run_timers(&active_timers
[QEMU_TIMER_VIRTUAL
],
7675 qemu_get_clock(vm_clock
));
7676 /* run dma transfers, if any */
7680 /* real time timers */
7681 qemu_run_timers(&active_timers
[QEMU_TIMER_REALTIME
],
7682 qemu_get_clock(rt_clock
));
7684 if (alarm_timer
->flags
& ALARM_FLAG_EXPIRED
) {
7685 alarm_timer
->flags
&= ~(ALARM_FLAG_EXPIRED
);
7686 qemu_rearm_alarm_timer(alarm_timer
);
7689 /* Check bottom-halves last in case any of the earlier events triggered
7695 static int main_loop(void)
7698 #ifdef CONFIG_PROFILER
7704 if (kvm_enabled()) {
7706 cpu_disable_ticks();
7710 cur_cpu
= first_cpu
;
7711 next_cpu
= cur_cpu
->next_cpu
?: first_cpu
;
7718 #ifdef CONFIG_PROFILER
7719 ti
= profile_getclock();
7724 qemu_icount
-= (env
->icount_decr
.u16
.low
+ env
->icount_extra
);
7725 env
->icount_decr
.u16
.low
= 0;
7726 env
->icount_extra
= 0;
7727 count
= qemu_next_deadline();
7728 count
= (count
+ (1 << icount_time_shift
) - 1)
7729 >> icount_time_shift
;
7730 qemu_icount
+= count
;
7731 decr
= (count
> 0xffff) ? 0xffff : count
;
7733 env
->icount_decr
.u16
.low
= decr
;
7734 env
->icount_extra
= count
;
7736 ret
= cpu_exec(env
);
7737 #ifdef CONFIG_PROFILER
7738 qemu_time
+= profile_getclock() - ti
;
7741 /* Fold pending instructions back into the
7742 instruction counter, and clear the interrupt flag. */
7743 qemu_icount
-= (env
->icount_decr
.u16
.low
7744 + env
->icount_extra
);
7745 env
->icount_decr
.u32
= 0;
7746 env
->icount_extra
= 0;
7748 next_cpu
= env
->next_cpu
?: first_cpu
;
7749 if (event_pending
&& likely(ret
!= EXCP_DEBUG
)) {
7750 ret
= EXCP_INTERRUPT
;
7754 if (ret
== EXCP_HLT
) {
7755 /* Give the next CPU a chance to run. */
7759 if (ret
!= EXCP_HALTED
)
7761 /* all CPUs are halted ? */
7767 if (shutdown_requested
) {
7768 ret
= EXCP_INTERRUPT
;
7776 if (reset_requested
) {
7777 reset_requested
= 0;
7778 qemu_system_reset();
7780 kvm_load_registers(env
);
7781 ret
= EXCP_INTERRUPT
;
7783 if (powerdown_requested
) {
7784 powerdown_requested
= 0;
7785 qemu_system_powerdown();
7786 ret
= EXCP_INTERRUPT
;
7788 if (unlikely(ret
== EXCP_DEBUG
)) {
7789 vm_stop(EXCP_DEBUG
);
7791 /* If all cpus are halted then wait until the next IRQ */
7792 /* XXX: use timeout computed from timers */
7793 if (ret
== EXCP_HALTED
) {
7797 /* Advance virtual time to the next event. */
7798 if (use_icount
== 1) {
7799 /* When not using an adaptive execution frequency
7800 we tend to get badly out of sync with real time,
7801 so just delay for a reasonable amount of time. */
7804 delta
= cpu_get_icount() - cpu_get_clock();
7807 /* If virtual time is ahead of real time then just
7809 timeout
= (delta
/ 1000000) + 1;
7811 /* Wait for either IO to occur or the next
7813 add
= qemu_next_deadline();
7814 /* We advance the timer before checking for IO.
7815 Limit the amount we advance so that early IO
7816 activity won't get the guest too far ahead. */
7820 add
= (add
+ (1 << icount_time_shift
) - 1)
7821 >> icount_time_shift
;
7823 timeout
= delta
/ 1000000;
7836 #ifdef CONFIG_PROFILER
7837 ti
= profile_getclock();
7839 main_loop_wait(timeout
);
7840 #ifdef CONFIG_PROFILER
7841 dev_time
+= profile_getclock() - ti
;
7844 cpu_disable_ticks();
7848 static void help(int exitcode
)
7850 printf("QEMU PC emulator version " QEMU_VERSION
" (" KVM_VERSION
")"
7851 ", Copyright (c) 2003-2008 Fabrice Bellard\n"
7852 "usage: %s [options] [disk_image]\n"
7854 "'disk_image' is a raw hard image image for IDE hard disk 0\n"
7856 "Standard options:\n"
7857 "-M machine select emulated machine (-M ? for list)\n"
7858 "-cpu cpu select CPU (-cpu ? for list)\n"
7859 "-fda/-fdb file use 'file' as floppy disk 0/1 image\n"
7860 "-hda/-hdb file use 'file' as IDE hard disk 0/1 image\n"
7861 "-hdc/-hdd file use 'file' as IDE hard disk 2/3 image\n"
7862 "-cdrom file use 'file' as IDE cdrom image (cdrom is ide1 master)\n"
7863 "-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]\n"
7864 " [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off]\n"
7865 " [,cache=on|off][,format=f][,boot=on|off]\n"
7866 " use 'file' as a drive image\n"
7867 "-mtdblock file use 'file' as on-board Flash memory image\n"
7868 "-sd file use 'file' as SecureDigital card image\n"
7869 "-pflash file use 'file' as a parallel flash image\n"
7870 "-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n)\n"
7871 "-snapshot write to temporary files instead of disk image files\n"
7873 "-no-frame open SDL window without a frame and window decorations\n"
7874 "-alt-grab use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt)\n"
7875 "-no-quit disable SDL window close capability\n"
7878 "-no-fd-bootchk disable boot signature checking for floppy disks\n"
7880 "-m megs set virtual RAM size to megs MB [default=%d]\n"
7881 "-smp n set the number of CPUs to 'n' [default=1]\n"
7882 "-nographic disable graphical output and redirect serial I/Os to console\n"
7883 "-portrait rotate graphical output 90 deg left (only PXA LCD)\n"
7885 "-k language use keyboard layout (for example \"fr\" for French)\n"
7888 "-audio-help print list of audio drivers and their options\n"
7889 "-soundhw c1,... enable audio support\n"
7890 " and only specified sound cards (comma separated list)\n"
7891 " use -soundhw ? to get the list of supported cards\n"
7892 " use -soundhw all to enable all of them\n"
7894 "-localtime set the real time clock to local time [default=utc]\n"
7895 "-full-screen start in full screen\n"
7897 "-win2k-hack use it when installing Windows 2000 to avoid a disk full bug\n"
7899 "-usb enable the USB driver (will be the default soon)\n"
7900 "-usbdevice name add the host or guest USB device 'name'\n"
7901 #if defined(TARGET_PPC) || defined(TARGET_SPARC)
7902 "-g WxH[xDEPTH] Set the initial graphical resolution and depth\n"
7904 "-name string set the name of the guest\n"
7906 "Network options:\n"
7907 "-net nic[,vlan=n][,macaddr=addr][,model=type]\n"
7908 " create a new Network Interface Card and connect it to VLAN 'n'\n"
7910 "-net user[,vlan=n][,hostname=host]\n"
7911 " connect the user mode network stack to VLAN 'n' and send\n"
7912 " hostname 'host' to DHCP clients\n"
7915 "-net tap[,vlan=n],ifname=name\n"
7916 " connect the host TAP network interface to VLAN 'n'\n"
7918 "-net tap[,vlan=n][,fd=h][,ifname=name][,script=file][,downscript=dfile]\n"
7919 " connect the host TAP network interface to VLAN 'n' and use the\n"
7920 " network scripts 'file' (default=%s)\n"
7921 " and 'dfile' (default=%s);\n"
7922 " use '[down]script=no' to disable script execution;\n"
7923 " use 'fd=h' to connect to an already opened TAP interface\n"
7925 "-net socket[,vlan=n][,fd=h][,listen=[host]:port][,connect=host:port]\n"
7926 " connect the vlan 'n' to another VLAN using a socket connection\n"
7927 "-net socket[,vlan=n][,fd=h][,mcast=maddr:port]\n"
7928 " connect the vlan 'n' to multicast maddr and port\n"
7929 "-net none use it alone to have zero network devices; if no -net option\n"
7930 " is provided, the default is '-net nic -net user'\n"
7933 "-tftp dir allow tftp access to files in dir [-net user]\n"
7934 "-bootp file advertise file in BOOTP replies\n"
7936 "-smb dir allow SMB access to files in 'dir' [-net user]\n"
7938 "-redir [tcp|udp]:host-port:[guest-host]:guest-port\n"
7939 " redirect TCP or UDP connections from host to guest [-net user]\n"
7942 "Linux boot specific:\n"
7943 "-kernel bzImage use 'bzImage' as kernel image\n"
7944 "-append cmdline use 'cmdline' as kernel command line\n"
7945 "-initrd file use 'file' as initial ram disk\n"
7947 "Debug/Expert options:\n"
7948 "-monitor dev redirect the monitor to char device 'dev'\n"
7949 "-vmchannel di:DI,dev redirect the hypercall device with device id DI, to char device 'dev'\n"
7950 "-balloon dev redirect the balloon hypercall device to char device 'dev'\n"
7951 "-serial dev redirect the serial port to char device 'dev'\n"
7952 "-parallel dev redirect the parallel port to char device 'dev'\n"
7953 "-pidfile file Write PID to 'file'\n"
7954 "-S freeze CPU at startup (use 'c' to start execution)\n"
7955 "-s wait gdb connection to port\n"
7956 "-p port set gdb connection port [default=%s]\n"
7957 "-d item1,... output log to %s (use -d ? for a list of log items)\n"
7958 "-hdachs c,h,s[,t] force hard disk 0 physical geometry and the optional BIOS\n"
7959 " translation (t=none or lba) (usually qemu can guess them)\n"
7960 "-L path set the directory for the BIOS, VGA BIOS and keymaps\n"
7962 "-kernel-kqemu enable KQEMU full virtualization (default is user mode only)\n"
7963 "-no-kqemu disable KQEMU kernel module usage\n"
7966 #ifndef NO_CPU_EMULATION
7967 "-no-kvm disable KVM hardware virtualization\n"
7969 "-no-kvm-irqchip disable KVM kernel mode PIC/IOAPIC/LAPIC\n"
7970 "-no-kvm-pit disable KVM kernel mode PIT\n"
7973 "-std-vga simulate a standard VGA card with VESA Bochs Extensions\n"
7974 " (default is CL-GD5446 PCI VGA)\n"
7975 "-no-acpi disable ACPI\n"
7977 #ifdef CONFIG_CURSES
7978 "-curses use a curses/ncurses interface instead of SDL\n"
7980 "-no-reboot exit instead of rebooting\n"
7981 "-no-shutdown stop before shutdown\n"
7982 "-loadvm [tag|id] start right away with a saved state (loadvm in monitor)\n"
7983 "-vnc display start a VNC server on display\n"
7985 "-daemonize daemonize QEMU after initializing\n"
7987 "-tdf inject timer interrupts that got lost\n"
7988 "-kvm-shadow-memory megs set the amount of shadow pages to be allocated\n"
7989 "-mem-path set the path to hugetlbfs/tmpfs mounted directory, also enables allocation of guest memory with huge pages\n"
7990 "-option-rom rom load a file, rom, into the option ROM space\n"
7992 "-prom-env variable=value set OpenBIOS nvram variables\n"
7994 "-clock force the use of the given methods for timer alarm.\n"
7995 " To see what timers are available use -clock ?\n"
7996 "-startdate select initial date of the clock\n"
7997 "-icount [N|auto]\n"
7998 " Enable virtual instruction counter with 2^N clock ticks per instruction\n"
8000 "During emulation, the following keys are useful:\n"
8001 "ctrl-alt-f toggle full screen\n"
8002 "ctrl-alt-n switch to virtual console 'n'\n"
8003 "ctrl-alt toggle mouse and keyboard grab\n"
8005 "When using -nographic, press 'ctrl-a h' to get some help.\n"
8010 DEFAULT_NETWORK_SCRIPT
,
8011 DEFAULT_NETWORK_DOWN_SCRIPT
,
8013 DEFAULT_GDBSTUB_PORT
,
8018 #define HAS_ARG 0x0001
8033 QEMU_OPTION_mtdblock
,
8037 QEMU_OPTION_snapshot
,
8039 QEMU_OPTION_no_fd_bootchk
,
8042 QEMU_OPTION_nographic
,
8043 QEMU_OPTION_portrait
,
8045 QEMU_OPTION_audio_help
,
8046 QEMU_OPTION_soundhw
,
8067 QEMU_OPTION_localtime
,
8068 QEMU_OPTION_cirrusvga
,
8071 QEMU_OPTION_std_vga
,
8073 QEMU_OPTION_monitor
,
8074 QEMU_OPTION_balloon
,
8075 QEMU_OPTION_vmchannel
,
8077 QEMU_OPTION_parallel
,
8079 QEMU_OPTION_full_screen
,
8080 QEMU_OPTION_no_frame
,
8081 QEMU_OPTION_alt_grab
,
8082 QEMU_OPTION_no_quit
,
8083 QEMU_OPTION_pidfile
,
8084 QEMU_OPTION_no_kqemu
,
8085 QEMU_OPTION_kernel_kqemu
,
8086 QEMU_OPTION_win2k_hack
,
8088 QEMU_OPTION_usbdevice
,
8091 QEMU_OPTION_no_acpi
,
8094 QEMU_OPTION_no_kvm_irqchip
,
8095 QEMU_OPTION_no_kvm_pit
,
8096 QEMU_OPTION_no_reboot
,
8097 QEMU_OPTION_no_shutdown
,
8098 QEMU_OPTION_show_cursor
,
8099 QEMU_OPTION_daemonize
,
8100 QEMU_OPTION_option_rom
,
8101 QEMU_OPTION_semihosting
,
8102 QEMU_OPTION_cpu_vendor
,
8104 QEMU_OPTION_prom_env
,
8105 QEMU_OPTION_old_param
,
8107 QEMU_OPTION_startdate
,
8108 QEMU_OPTION_tb_size
,
8110 QEMU_OPTION_translation
,
8111 QEMU_OPTION_incoming
,
8113 QEMU_OPTION_kvm_shadow_memory
,
8114 QEMU_OPTION_mempath
,
8117 typedef struct QEMUOption
{
8123 const QEMUOption qemu_options
[] = {
8124 { "h", 0, QEMU_OPTION_h
},
8125 { "help", 0, QEMU_OPTION_h
},
8127 { "M", HAS_ARG
, QEMU_OPTION_M
},
8128 { "cpu", HAS_ARG
, QEMU_OPTION_cpu
},
8129 { "fda", HAS_ARG
, QEMU_OPTION_fda
},
8130 { "fdb", HAS_ARG
, QEMU_OPTION_fdb
},
8131 { "hda", HAS_ARG
, QEMU_OPTION_hda
},
8132 { "hdb", HAS_ARG
, QEMU_OPTION_hdb
},
8133 { "hdc", HAS_ARG
, QEMU_OPTION_hdc
},
8134 { "hdd", HAS_ARG
, QEMU_OPTION_hdd
},
8135 { "drive", HAS_ARG
, QEMU_OPTION_drive
},
8136 { "cdrom", HAS_ARG
, QEMU_OPTION_cdrom
},
8137 { "mtdblock", HAS_ARG
, QEMU_OPTION_mtdblock
},
8138 { "sd", HAS_ARG
, QEMU_OPTION_sd
},
8139 { "pflash", HAS_ARG
, QEMU_OPTION_pflash
},
8140 { "boot", HAS_ARG
, QEMU_OPTION_boot
},
8141 { "snapshot", 0, QEMU_OPTION_snapshot
},
8143 { "no-fd-bootchk", 0, QEMU_OPTION_no_fd_bootchk
},
8145 { "m", HAS_ARG
, QEMU_OPTION_m
},
8146 { "nographic", 0, QEMU_OPTION_nographic
},
8147 { "portrait", 0, QEMU_OPTION_portrait
},
8148 { "k", HAS_ARG
, QEMU_OPTION_k
},
8150 { "audio-help", 0, QEMU_OPTION_audio_help
},
8151 { "soundhw", HAS_ARG
, QEMU_OPTION_soundhw
},
8154 { "net", HAS_ARG
, QEMU_OPTION_net
},
8156 { "tftp", HAS_ARG
, QEMU_OPTION_tftp
},
8157 { "bootp", HAS_ARG
, QEMU_OPTION_bootp
},
8159 { "smb", HAS_ARG
, QEMU_OPTION_smb
},
8161 { "redir", HAS_ARG
, QEMU_OPTION_redir
},
8164 { "kernel", HAS_ARG
, QEMU_OPTION_kernel
},
8165 { "append", HAS_ARG
, QEMU_OPTION_append
},
8166 { "initrd", HAS_ARG
, QEMU_OPTION_initrd
},
8168 { "S", 0, QEMU_OPTION_S
},
8169 { "s", 0, QEMU_OPTION_s
},
8170 { "p", HAS_ARG
, QEMU_OPTION_p
},
8171 { "d", HAS_ARG
, QEMU_OPTION_d
},
8172 { "hdachs", HAS_ARG
, QEMU_OPTION_hdachs
},
8173 { "L", HAS_ARG
, QEMU_OPTION_L
},
8174 { "bios", HAS_ARG
, QEMU_OPTION_bios
},
8176 { "no-kqemu", 0, QEMU_OPTION_no_kqemu
},
8177 { "kernel-kqemu", 0, QEMU_OPTION_kernel_kqemu
},
8180 #ifndef NO_CPU_EMULATION
8181 { "no-kvm", 0, QEMU_OPTION_no_kvm
},
8183 { "no-kvm-irqchip", 0, QEMU_OPTION_no_kvm_irqchip
},
8184 { "no-kvm-pit", 0, QEMU_OPTION_no_kvm_pit
},
8186 #if defined(TARGET_PPC) || defined(TARGET_SPARC)
8187 { "g", 1, QEMU_OPTION_g
},
8189 { "localtime", 0, QEMU_OPTION_localtime
},
8190 { "std-vga", 0, QEMU_OPTION_std_vga
},
8191 { "monitor", 1, QEMU_OPTION_monitor
},
8192 { "balloon", 1, QEMU_OPTION_balloon
},
8193 { "vmchannel", 1, QEMU_OPTION_vmchannel
},
8194 { "echr", HAS_ARG
, QEMU_OPTION_echr
},
8195 { "monitor", HAS_ARG
, QEMU_OPTION_monitor
},
8196 { "serial", HAS_ARG
, QEMU_OPTION_serial
},
8197 { "parallel", HAS_ARG
, QEMU_OPTION_parallel
},
8198 { "loadvm", HAS_ARG
, QEMU_OPTION_loadvm
},
8199 { "incoming", 1, QEMU_OPTION_incoming
},
8200 { "full-screen", 0, QEMU_OPTION_full_screen
},
8202 { "no-frame", 0, QEMU_OPTION_no_frame
},
8203 { "alt-grab", 0, QEMU_OPTION_alt_grab
},
8204 { "no-quit", 0, QEMU_OPTION_no_quit
},
8206 { "pidfile", HAS_ARG
, QEMU_OPTION_pidfile
},
8207 { "win2k-hack", 0, QEMU_OPTION_win2k_hack
},
8208 { "usbdevice", HAS_ARG
, QEMU_OPTION_usbdevice
},
8209 { "smp", HAS_ARG
, QEMU_OPTION_smp
},
8210 { "vnc", HAS_ARG
, QEMU_OPTION_vnc
},
8211 #ifdef CONFIG_CURSES
8212 { "curses", 0, QEMU_OPTION_curses
},
8215 /* temporary options */
8216 { "usb", 0, QEMU_OPTION_usb
},
8217 { "cirrusvga", 0, QEMU_OPTION_cirrusvga
},
8218 { "vmwarevga", 0, QEMU_OPTION_vmsvga
},
8219 { "no-acpi", 0, QEMU_OPTION_no_acpi
},
8220 { "no-reboot", 0, QEMU_OPTION_no_reboot
},
8221 { "no-shutdown", 0, QEMU_OPTION_no_shutdown
},
8222 { "show-cursor", 0, QEMU_OPTION_show_cursor
},
8223 { "daemonize", 0, QEMU_OPTION_daemonize
},
8224 { "option-rom", HAS_ARG
, QEMU_OPTION_option_rom
},
8225 #if defined(TARGET_ARM) || defined(TARGET_M68K)
8226 { "semihosting", 0, QEMU_OPTION_semihosting
},
8228 { "tdf", 0, QEMU_OPTION_tdf
}, /* enable time drift fix */
8229 { "kvm-shadow-memory", HAS_ARG
, QEMU_OPTION_kvm_shadow_memory
},
8230 { "name", HAS_ARG
, QEMU_OPTION_name
},
8231 #if defined(TARGET_SPARC)
8232 { "prom-env", HAS_ARG
, QEMU_OPTION_prom_env
},
8234 { "cpu-vendor", HAS_ARG
, QEMU_OPTION_cpu_vendor
},
8235 #if defined(TARGET_ARM)
8236 { "old-param", 0, QEMU_OPTION_old_param
},
8238 { "clock", HAS_ARG
, QEMU_OPTION_clock
},
8239 { "startdate", HAS_ARG
, QEMU_OPTION_startdate
},
8240 { "tb-size", HAS_ARG
, QEMU_OPTION_tb_size
},
8241 { "icount", HAS_ARG
, QEMU_OPTION_icount
},
8242 { "mem-path", HAS_ARG
, QEMU_OPTION_mempath
},
8246 /* password input */
8248 int qemu_key_check(BlockDriverState
*bs
, const char *name
)
8253 if (!bdrv_is_encrypted(bs
))
8256 term_printf("%s is encrypted.\n", name
);
8257 for(i
= 0; i
< 3; i
++) {
8258 monitor_readline("Password: ", 1, password
, sizeof(password
));
8259 if (bdrv_set_key(bs
, password
) == 0)
8261 term_printf("invalid password\n");
8266 static BlockDriverState
*get_bdrv(int index
)
8268 if (index
> nb_drives
)
8270 return drives_table
[index
].bdrv
;
8273 static void read_passwords(void)
8275 BlockDriverState
*bs
;
8278 for(i
= 0; i
< 6; i
++) {
8281 qemu_key_check(bs
, bdrv_get_device_name(bs
));
8286 struct soundhw soundhw
[] = {
8287 #ifdef HAS_AUDIO_CHOICE
8288 #if defined(TARGET_I386) || defined(TARGET_MIPS)
8294 { .init_isa
= pcspk_audio_init
}
8299 "Creative Sound Blaster 16",
8302 { .init_isa
= SB16_init
}
8305 #ifdef CONFIG_CS4231A
8311 { .init_isa
= cs4231a_init
}
8319 "Yamaha YMF262 (OPL3)",
8321 "Yamaha YM3812 (OPL2)",
8325 { .init_isa
= Adlib_init
}
8332 "Gravis Ultrasound GF1",
8335 { .init_isa
= GUS_init
}
8342 "Intel 82801AA AC97 Audio",
8345 { .init_pci
= ac97_init
}
8351 "ENSONIQ AudioPCI ES1370",
8354 { .init_pci
= es1370_init
}
8358 { NULL
, NULL
, 0, 0, { NULL
} }
8361 static void select_soundhw (const char *optarg
)
8365 if (*optarg
== '?') {
8368 printf ("Valid sound card names (comma separated):\n");
8369 for (c
= soundhw
; c
->name
; ++c
) {
8370 printf ("%-11s %s\n", c
->name
, c
->descr
);
8372 printf ("\n-soundhw all will enable all of the above\n");
8373 exit (*optarg
!= '?');
8381 if (!strcmp (optarg
, "all")) {
8382 for (c
= soundhw
; c
->name
; ++c
) {
8390 e
= strchr (p
, ',');
8391 l
= !e
? strlen (p
) : (size_t) (e
- p
);
8393 for (c
= soundhw
; c
->name
; ++c
) {
8394 if (!strncmp (c
->name
, p
, l
)) {
8403 "Unknown sound card name (too big to show)\n");
8406 fprintf (stderr
, "Unknown sound card name `%.*s'\n",
8411 p
+= l
+ (e
!= NULL
);
8415 goto show_valid_cards
;
8421 static BOOL WINAPI
qemu_ctrl_handler(DWORD type
)
8423 exit(STATUS_CONTROL_C_EXIT
);
8428 #define MAX_NET_CLIENTS 32
8430 static int saved_argc
;
8431 static char **saved_argv
;
8433 void qemu_get_launch_info(int *argc
, char ***argv
, int *opt_daemonize
, const char **opt_incoming
)
8437 *opt_daemonize
= daemonize
;
8438 *opt_incoming
= incoming
;
8442 static int gethugepagesize(void)
8446 char *needle
= "Hugepagesize:";
8448 unsigned long hugepagesize
;
8450 fd
= open("/proc/meminfo", O_RDONLY
);
8456 ret
= read(fd
, buf
, sizeof(buf
));
8462 size
= strstr(buf
, needle
);
8465 size
+= strlen(needle
);
8466 hugepagesize
= strtol(size
, NULL
, 0);
8467 return hugepagesize
;
8470 void *alloc_mem_area(unsigned long memory
, const char *path
)
8476 if (asprintf(&filename
, "%s/kvm.XXXXXX", path
) == -1)
8479 hpagesize
= gethugepagesize() * 1024;
8483 fd
= mkstemp(filename
);
8492 memory
= (memory
+hpagesize
-1) & ~(hpagesize
-1);
8495 * ftruncate is not supported by hugetlbfs in older
8496 * hosts, so don't bother checking for errors.
8497 * If anything goes wrong with it under other filesystems,
8500 ftruncate(fd
, memory
);
8502 area
= mmap(0, memory
, PROT_READ
|PROT_WRITE
, MAP_PRIVATE
, fd
, 0);
8503 if (area
== MAP_FAILED
) {
8512 void *qemu_alloc_physram(unsigned long memory
)
8517 area
= alloc_mem_area(memory
, mem_path
);
8519 area
= qemu_vmalloc(memory
);
8524 int main(int argc
, char **argv
)
8526 #ifdef CONFIG_GDBSTUB
8528 const char *gdbstub_port
;
8530 uint32_t boot_devices_bitmap
= 0;
8532 int snapshot
, linux_boot
, net_boot
;
8533 const char *initrd_filename
;
8534 const char *kernel_filename
, *kernel_cmdline
;
8535 const char *boot_devices
= "";
8536 DisplayState
*ds
= &display_state
;
8537 int cyls
, heads
, secs
, translation
;
8538 const char *net_clients
[MAX_NET_CLIENTS
];
8542 const char *r
, *optarg
;
8543 CharDriverState
*monitor_hd
;
8544 const char *monitor_device
;
8545 const char *serial_devices
[MAX_SERIAL_PORTS
];
8546 int serial_device_index
;
8547 char vmchannel_devices
[MAX_VMCHANNEL_DEVICES
][128];
8548 int vmchannel_device_index
;
8549 const char *parallel_devices
[MAX_PARALLEL_PORTS
];
8550 int parallel_device_index
;
8551 const char *loadvm
= NULL
;
8552 QEMUMachine
*machine
;
8553 const char *cpu_model
;
8554 const char *usb_devices
[MAX_USB_CMDLINE
];
8555 int usb_devices_index
;
8558 const char *pid_file
= NULL
;
8564 LIST_INIT (&vm_change_state_head
);
8567 struct sigaction act
;
8568 sigfillset(&act
.sa_mask
);
8570 act
.sa_handler
= SIG_IGN
;
8571 sigaction(SIGPIPE
, &act
, NULL
);
8574 SetConsoleCtrlHandler(qemu_ctrl_handler
, TRUE
);
8575 /* Note: cpu_interrupt() is currently not SMP safe, so we force
8576 QEMU to run on a single CPU */
8581 h
= GetCurrentProcess();
8582 if (GetProcessAffinityMask(h
, &mask
, &smask
)) {
8583 for(i
= 0; i
< 32; i
++) {
8584 if (mask
& (1 << i
))
8589 SetProcessAffinityMask(h
, mask
);
8595 register_machines();
8596 machine
= first_machine
;
8598 initrd_filename
= NULL
;
8600 vga_ram_size
= VGA_RAM_SIZE
;
8601 #ifdef CONFIG_GDBSTUB
8603 gdbstub_port
= DEFAULT_GDBSTUB_PORT
;
8608 kernel_filename
= NULL
;
8609 kernel_cmdline
= "";
8610 cyls
= heads
= secs
= 0;
8611 translation
= BIOS_ATA_TRANSLATION_AUTO
;
8612 monitor_device
= "vc";
8614 for(i
= 0; i
< MAX_VMCHANNEL_DEVICES
; i
++)
8615 vmchannel_devices
[i
][0] = '\0';
8616 vmchannel_device_index
= 0;
8618 serial_devices
[0] = "vc:80Cx24C";
8619 for(i
= 1; i
< MAX_SERIAL_PORTS
; i
++)
8620 serial_devices
[i
] = NULL
;
8621 serial_device_index
= 0;
8623 parallel_devices
[0] = "vc:640x480";
8624 for(i
= 1; i
< MAX_PARALLEL_PORTS
; i
++)
8625 parallel_devices
[i
] = NULL
;
8626 parallel_device_index
= 0;
8628 usb_devices_index
= 0;
8645 hda_index
= drive_add(argv
[optind
++], HD_ALIAS
, 0);
8647 const QEMUOption
*popt
;
8650 /* Treat --foo the same as -foo. */
8653 popt
= qemu_options
;
8656 fprintf(stderr
, "%s: invalid option -- '%s'\n",
8660 if (!strcmp(popt
->name
, r
+ 1))
8664 if (popt
->flags
& HAS_ARG
) {
8665 if (optind
>= argc
) {
8666 fprintf(stderr
, "%s: option '%s' requires an argument\n",
8670 optarg
= argv
[optind
++];
8675 switch(popt
->index
) {
8677 machine
= find_machine(optarg
);
8680 printf("Supported machines are:\n");
8681 for(m
= first_machine
; m
!= NULL
; m
= m
->next
) {
8682 printf("%-10s %s%s\n",
8684 m
== first_machine
? " (default)" : "");
8686 exit(*optarg
!= '?');
8689 case QEMU_OPTION_cpu
:
8690 /* hw initialization will check this */
8691 if (*optarg
== '?') {
8692 /* XXX: implement xxx_cpu_list for targets that still miss it */
8693 #if defined(cpu_list)
8694 cpu_list(stdout
, &fprintf
);
8701 case QEMU_OPTION_initrd
:
8702 initrd_filename
= optarg
;
8704 case QEMU_OPTION_hda
:
8706 hda_index
= drive_add(optarg
, HD_ALIAS
, 0);
8708 hda_index
= drive_add(optarg
, HD_ALIAS
8709 ",cyls=%d,heads=%d,secs=%d%s",
8710 0, cyls
, heads
, secs
,
8711 translation
== BIOS_ATA_TRANSLATION_LBA
?
8713 translation
== BIOS_ATA_TRANSLATION_NONE
?
8714 ",trans=none" : "");
8716 case QEMU_OPTION_hdb
:
8717 case QEMU_OPTION_hdc
:
8718 case QEMU_OPTION_hdd
:
8719 drive_add(optarg
, HD_ALIAS
, popt
->index
- QEMU_OPTION_hda
);
8721 case QEMU_OPTION_drive
:
8722 drive_add(NULL
, "%s", optarg
);
8724 case QEMU_OPTION_mtdblock
:
8725 drive_add(optarg
, MTD_ALIAS
);
8727 case QEMU_OPTION_sd
:
8728 drive_add(optarg
, SD_ALIAS
);
8730 case QEMU_OPTION_pflash
:
8731 drive_add(optarg
, PFLASH_ALIAS
);
8733 case QEMU_OPTION_snapshot
:
8736 case QEMU_OPTION_hdachs
:
8740 cyls
= strtol(p
, (char **)&p
, 0);
8741 if (cyls
< 1 || cyls
> 16383)
8746 heads
= strtol(p
, (char **)&p
, 0);
8747 if (heads
< 1 || heads
> 16)
8752 secs
= strtol(p
, (char **)&p
, 0);
8753 if (secs
< 1 || secs
> 63)
8757 if (!strcmp(p
, "none"))
8758 translation
= BIOS_ATA_TRANSLATION_NONE
;
8759 else if (!strcmp(p
, "lba"))
8760 translation
= BIOS_ATA_TRANSLATION_LBA
;
8761 else if (!strcmp(p
, "auto"))
8762 translation
= BIOS_ATA_TRANSLATION_AUTO
;
8765 } else if (*p
!= '\0') {
8767 fprintf(stderr
, "qemu: invalid physical CHS format\n");
8770 if (hda_index
!= -1)
8771 snprintf(drives_opt
[hda_index
].opt
,
8772 sizeof(drives_opt
[hda_index
].opt
),
8773 HD_ALIAS
",cyls=%d,heads=%d,secs=%d%s",
8774 0, cyls
, heads
, secs
,
8775 translation
== BIOS_ATA_TRANSLATION_LBA
?
8777 translation
== BIOS_ATA_TRANSLATION_NONE
?
8778 ",trans=none" : "");
8781 case QEMU_OPTION_nographic
:
8782 serial_devices
[0] = "stdio";
8783 parallel_devices
[0] = "null";
8784 monitor_device
= "stdio";
8787 #ifdef CONFIG_CURSES
8788 case QEMU_OPTION_curses
:
8792 case QEMU_OPTION_portrait
:
8795 case QEMU_OPTION_kernel
:
8796 kernel_filename
= optarg
;
8798 case QEMU_OPTION_append
:
8799 kernel_cmdline
= optarg
;
8801 case QEMU_OPTION_cdrom
:
8802 drive_add(optarg
, CDROM_ALIAS
);
8804 case QEMU_OPTION_boot
:
8805 boot_devices
= optarg
;
8806 /* We just do some generic consistency checks */
8808 /* Could easily be extended to 64 devices if needed */
8811 boot_devices_bitmap
= 0;
8812 for (p
= boot_devices
; *p
!= '\0'; p
++) {
8813 /* Allowed boot devices are:
8814 * a b : floppy disk drives
8815 * c ... f : IDE disk drives
8816 * g ... m : machine implementation dependant drives
8817 * n ... p : network devices
8818 * It's up to each machine implementation to check
8819 * if the given boot devices match the actual hardware
8820 * implementation and firmware features.
8822 if (*p
< 'a' || *p
> 'q') {
8823 fprintf(stderr
, "Invalid boot device '%c'\n", *p
);
8826 if (boot_devices_bitmap
& (1 << (*p
- 'a'))) {
8828 "Boot device '%c' was given twice\n",*p
);
8831 boot_devices_bitmap
|= 1 << (*p
- 'a');
8835 case QEMU_OPTION_fda
:
8836 case QEMU_OPTION_fdb
:
8837 drive_add(optarg
, FD_ALIAS
, popt
->index
- QEMU_OPTION_fda
);
8840 case QEMU_OPTION_no_fd_bootchk
:
8844 case QEMU_OPTION_net
:
8845 if (nb_net_clients
>= MAX_NET_CLIENTS
) {
8846 fprintf(stderr
, "qemu: too many network clients\n");
8849 net_clients
[nb_net_clients
] = optarg
;
8853 case QEMU_OPTION_tftp
:
8854 tftp_prefix
= optarg
;
8856 case QEMU_OPTION_bootp
:
8857 bootp_filename
= optarg
;
8860 case QEMU_OPTION_smb
:
8861 net_slirp_smb(optarg
);
8864 case QEMU_OPTION_redir
:
8865 net_slirp_redir(optarg
);
8869 case QEMU_OPTION_audio_help
:
8873 case QEMU_OPTION_soundhw
:
8874 select_soundhw (optarg
);
8880 case QEMU_OPTION_m
: {
8884 value
= strtoul(optarg
, &ptr
, 10);
8886 case 0: case 'M': case 'm':
8893 fprintf(stderr
, "qemu: invalid ram size: %s\n", optarg
);
8897 /* On 32-bit hosts, QEMU is limited by virtual address space */
8898 if (value
> (2047 << 20)
8900 && HOST_LONG_BITS
== 32
8903 fprintf(stderr
, "qemu: at most 2047 MB RAM can be simulated\n");
8906 if (value
!= (uint64_t)(ram_addr_t
)value
) {
8907 fprintf(stderr
, "qemu: ram size too large\n");
8918 mask
= cpu_str_to_log_mask(optarg
);
8920 printf("Log items (comma separated):\n");
8921 for(item
= cpu_log_items
; item
->mask
!= 0; item
++) {
8922 printf("%-10s %s\n", item
->name
, item
->help
);
8929 #ifdef CONFIG_GDBSTUB
8934 gdbstub_port
= optarg
;
8940 case QEMU_OPTION_bios
:
8947 keyboard_layout
= optarg
;
8949 case QEMU_OPTION_localtime
:
8952 case QEMU_OPTION_cirrusvga
:
8953 cirrus_vga_enabled
= 1;
8956 case QEMU_OPTION_vmsvga
:
8957 cirrus_vga_enabled
= 0;
8960 case QEMU_OPTION_std_vga
:
8961 cirrus_vga_enabled
= 0;
8969 w
= strtol(p
, (char **)&p
, 10);
8972 fprintf(stderr
, "qemu: invalid resolution or depth\n");
8978 h
= strtol(p
, (char **)&p
, 10);
8983 depth
= strtol(p
, (char **)&p
, 10);
8984 if (depth
!= 8 && depth
!= 15 && depth
!= 16 &&
8985 depth
!= 24 && depth
!= 32)
8987 } else if (*p
== '\0') {
8988 depth
= graphic_depth
;
8995 graphic_depth
= depth
;
8998 case QEMU_OPTION_echr
:
9001 term_escape_char
= strtol(optarg
, &r
, 0);
9003 printf("Bad argument to echr\n");
9006 case QEMU_OPTION_monitor
:
9007 monitor_device
= optarg
;
9009 case QEMU_OPTION_balloon
:
9010 if (vmchannel_device_index
>= MAX_VMCHANNEL_DEVICES
) {
9011 fprintf(stderr
, "qemu: too many balloon/vmchannel devices\n");
9015 fprintf(stderr
, "qemu: only one balloon device can be used\n");
9018 sprintf(vmchannel_devices
[vmchannel_device_index
],"di:cdcd,%s", optarg
);
9019 vmchannel_device_index
++;
9022 case QEMU_OPTION_vmchannel
:
9023 if (vmchannel_device_index
>= MAX_VMCHANNEL_DEVICES
) {
9024 fprintf(stderr
, "qemu: too many balloon/vmchannel devices\n");
9027 pstrcpy(vmchannel_devices
[vmchannel_device_index
],
9028 sizeof(vmchannel_devices
[0]), optarg
);
9029 vmchannel_device_index
++;
9031 case QEMU_OPTION_serial
:
9032 if (serial_device_index
>= MAX_SERIAL_PORTS
) {
9033 fprintf(stderr
, "qemu: too many serial ports\n");
9036 serial_devices
[serial_device_index
] = optarg
;
9037 serial_device_index
++;
9039 case QEMU_OPTION_parallel
:
9040 if (parallel_device_index
>= MAX_PARALLEL_PORTS
) {
9041 fprintf(stderr
, "qemu: too many parallel ports\n");
9044 parallel_devices
[parallel_device_index
] = optarg
;
9045 parallel_device_index
++;
9047 case QEMU_OPTION_loadvm
:
9050 case QEMU_OPTION_incoming
:
9053 case QEMU_OPTION_full_screen
:
9057 case QEMU_OPTION_no_frame
:
9060 case QEMU_OPTION_alt_grab
:
9063 case QEMU_OPTION_no_quit
:
9067 case QEMU_OPTION_pidfile
:
9071 case QEMU_OPTION_win2k_hack
:
9072 win2k_install_hack
= 1;
9076 case QEMU_OPTION_no_kqemu
:
9079 case QEMU_OPTION_kernel_kqemu
:
9084 case QEMU_OPTION_no_kvm
:
9087 case QEMU_OPTION_no_kvm_irqchip
: {
9088 extern int kvm_irqchip
, kvm_pit
;
9093 case QEMU_OPTION_no_kvm_pit
: {
9099 case QEMU_OPTION_usb
:
9102 case QEMU_OPTION_usbdevice
:
9104 if (usb_devices_index
>= MAX_USB_CMDLINE
) {
9105 fprintf(stderr
, "Too many USB devices\n");
9108 usb_devices
[usb_devices_index
] = optarg
;
9109 usb_devices_index
++;
9111 case QEMU_OPTION_smp
:
9112 smp_cpus
= atoi(optarg
);
9113 if (smp_cpus
< 1 || smp_cpus
> MAX_CPUS
) {
9114 fprintf(stderr
, "Invalid number of CPUs\n");
9118 case QEMU_OPTION_vnc
:
9119 vnc_display
= optarg
;
9121 case QEMU_OPTION_no_acpi
:
9124 case QEMU_OPTION_no_reboot
:
9127 case QEMU_OPTION_no_shutdown
:
9130 case QEMU_OPTION_show_cursor
:
9133 case QEMU_OPTION_daemonize
:
9136 case QEMU_OPTION_option_rom
:
9137 if (nb_option_roms
>= MAX_OPTION_ROMS
) {
9138 fprintf(stderr
, "Too many option ROMs\n");
9141 option_rom
[nb_option_roms
] = optarg
;
9144 case QEMU_OPTION_semihosting
:
9145 semihosting_enabled
= 1;
9147 case QEMU_OPTION_tdf
:
9150 case QEMU_OPTION_kvm_shadow_memory
:
9151 kvm_shadow_memory
= (int64_t)atoi(optarg
) * 1024 * 1024 / 4096;
9153 case QEMU_OPTION_mempath
:
9156 case QEMU_OPTION_name
:
9160 case QEMU_OPTION_prom_env
:
9161 if (nb_prom_envs
>= MAX_PROM_ENVS
) {
9162 fprintf(stderr
, "Too many prom variables\n");
9165 prom_envs
[nb_prom_envs
] = optarg
;
9169 case QEMU_OPTION_cpu_vendor
:
9170 cpu_vendor_string
= optarg
;
9173 case QEMU_OPTION_old_param
:
9177 case QEMU_OPTION_clock
:
9178 configure_alarms(optarg
);
9180 case QEMU_OPTION_startdate
:
9183 time_t rtc_start_date
;
9184 if (!strcmp(optarg
, "now")) {
9185 rtc_date_offset
= -1;
9187 if (sscanf(optarg
, "%d-%d-%dT%d:%d:%d",
9195 } else if (sscanf(optarg
, "%d-%d-%d",
9198 &tm
.tm_mday
) == 3) {
9207 rtc_start_date
= mktimegm(&tm
);
9208 if (rtc_start_date
== -1) {
9210 fprintf(stderr
, "Invalid date format. Valid format are:\n"
9211 "'now' or '2006-06-17T16:01:21' or '2006-06-17'\n");
9214 rtc_date_offset
= time(NULL
) - rtc_start_date
;
9218 case QEMU_OPTION_tb_size
:
9219 tb_size
= strtol(optarg
, NULL
, 0);
9223 case QEMU_OPTION_icount
:
9225 if (strcmp(optarg
, "auto") == 0) {
9226 icount_time_shift
= -1;
9228 icount_time_shift
= strtol(optarg
, NULL
, 0);
9239 if (pipe(fds
) == -1)
9250 len
= read(fds
[0], &status
, 1);
9251 if (len
== -1 && (errno
== EINTR
))
9256 else if (status
== 1) {
9257 fprintf(stderr
, "Could not acquire pidfile\n");
9274 signal(SIGTSTP
, SIG_IGN
);
9275 signal(SIGTTOU
, SIG_IGN
);
9276 signal(SIGTTIN
, SIG_IGN
);
9281 if (kvm_enabled()) {
9282 if (kvm_qemu_init() < 0) {
9283 extern int kvm_allowed
;
9284 fprintf(stderr
, "Could not initialize KVM, will disable KVM support\n");
9285 #ifdef NO_CPU_EMULATION
9286 fprintf(stderr
, "Compiled with --disable-cpu-emulation, exiting.\n");
9294 if (pid_file
&& qemu_create_pidfile(pid_file
) != 0) {
9297 write(fds
[1], &status
, 1);
9299 fprintf(stderr
, "Could not acquire pid file\n");
9307 linux_boot
= (kernel_filename
!= NULL
);
9308 net_boot
= (boot_devices_bitmap
>> ('n' - 'a')) & 0xF;
9310 /* XXX: this should not be: some embedded targets just have flash */
9311 if (!linux_boot
&& net_boot
== 0 &&
9315 if (!linux_boot
&& *kernel_cmdline
!= '\0') {
9316 fprintf(stderr
, "-append only allowed with -kernel option\n");
9320 if (!linux_boot
&& initrd_filename
!= NULL
) {
9321 fprintf(stderr
, "-initrd only allowed with -kernel option\n");
9325 /* boot to floppy or the default cd if no hard disk defined yet */
9326 if (!boot_devices
[0]) {
9327 boot_devices
= "cad";
9329 setvbuf(stdout
, NULL
, _IOLBF
, 0);
9334 if (use_icount
&& icount_time_shift
< 0) {
9336 /* 125MIPS seems a reasonable initial guess at the guest speed.
9337 It will be corrected fairly quickly anyway. */
9338 icount_time_shift
= 3;
9339 init_icount_adjust();
9346 /* init network clients */
9347 if (nb_net_clients
== 0) {
9348 /* if no clients, we use a default config */
9349 net_clients
[0] = "nic";
9350 net_clients
[1] = "user";
9354 for(i
= 0;i
< nb_net_clients
; i
++) {
9355 if (net_client_init(net_clients
[i
]) < 0)
9358 for(vlan
= first_vlan
; vlan
!= NULL
; vlan
= vlan
->next
) {
9359 if (vlan
->nb_guest_devs
== 0 && vlan
->nb_host_devs
== 0)
9361 if (vlan
->nb_guest_devs
== 0) {
9362 fprintf(stderr
, "Invalid vlan (%d) with no nics\n", vlan
->id
);
9365 if (vlan
->nb_host_devs
== 0)
9367 "Warning: vlan %d is not connected to host network\n",
9372 /* XXX: this should be moved in the PC machine instantiation code */
9373 if (net_boot
!= 0) {
9375 for (i
= 0; i
< nb_nics
&& i
< 4; i
++) {
9376 const char *model
= nd_table
[i
].model
;
9378 if (net_boot
& (1 << i
)) {
9381 snprintf(buf
, sizeof(buf
), "%s/pxe-%s.bin", bios_dir
, model
);
9382 if (get_image_size(buf
) > 0) {
9383 if (nb_option_roms
>= MAX_OPTION_ROMS
) {
9384 fprintf(stderr
, "Too many option ROMs\n");
9387 option_rom
[nb_option_roms
] = strdup(buf
);
9394 fprintf(stderr
, "No valid PXE rom found for network device\n");
9400 /* init the memory */
9401 phys_ram_size
= machine
->ram_require
& ~RAMSIZE_FIXED
;
9403 if (machine
->ram_require
& RAMSIZE_FIXED
) {
9405 if (ram_size
< phys_ram_size
) {
9406 fprintf(stderr
, "Machine `%s' requires %llu bytes of memory\n",
9407 machine
->name
, (unsigned long long) phys_ram_size
);
9411 phys_ram_size
= ram_size
;
9413 ram_size
= phys_ram_size
;
9416 ram_size
= DEFAULT_RAM_SIZE
* 1024 * 1024;
9418 phys_ram_size
+= ram_size
;
9421 /* Initialize kvm */
9422 #if defined(TARGET_I386) || defined(TARGET_X86_64)
9423 #define KVM_EXTRA_PAGES 3
9425 #define KVM_EXTRA_PAGES 0
9427 if (kvm_enabled()) {
9428 phys_ram_size
+= KVM_EXTRA_PAGES
* TARGET_PAGE_SIZE
;
9429 if (kvm_qemu_create_context() < 0) {
9430 fprintf(stderr
, "Could not create KVM context\n");
9433 #ifdef KVM_CAP_USER_MEMORY
9437 ret
= kvm_qemu_check_extension(KVM_CAP_USER_MEMORY
);
9439 phys_ram_base
= qemu_alloc_physram(phys_ram_size
);
9440 if (!phys_ram_base
) {
9441 fprintf(stderr
, "Could not allocate physical memory\n");
9448 phys_ram_base
= qemu_vmalloc(phys_ram_size
);
9449 if (!phys_ram_base
) {
9450 fprintf(stderr
, "Could not allocate physical memory\n");
9455 /* init the dynamic translator */
9456 cpu_exec_init_all(tb_size
* 1024 * 1024);
9460 /* we always create the cdrom drive, even if no disk is there */
9462 if (nb_drives_opt
< MAX_DRIVES
)
9463 drive_add(NULL
, CDROM_ALIAS
);
9465 /* we always create at least one floppy */
9467 if (nb_drives_opt
< MAX_DRIVES
)
9468 drive_add(NULL
, FD_ALIAS
, 0);
9470 /* we always create one sd slot, even if no card is in it */
9472 if (nb_drives_opt
< MAX_DRIVES
)
9473 drive_add(NULL
, SD_ALIAS
);
9475 /* open the virtual block devices
9476 * note that migration with device
9477 * hot add/remove is broken.
9479 for(i
= 0; i
< nb_drives_opt
; i
++)
9480 if (drive_init(&drives_opt
[i
], snapshot
, machine
) == -1)
9483 register_savevm("timer", 0, 2, timer_save
, timer_load
, NULL
);
9484 register_savevm("ram", 0, 3, ram_save
, ram_load
, NULL
);
9489 memset(&display_state
, 0, sizeof(display_state
));
9492 fprintf(stderr
, "fatal: -nographic can't be used with -curses\n");
9495 /* nearly nothing to do */
9496 dumb_display_init(ds
);
9497 } else if (vnc_display
!= NULL
) {
9498 vnc_display_init(ds
);
9499 if (vnc_display_open(ds
, vnc_display
) < 0)
9502 #if defined(CONFIG_CURSES)
9504 curses_display_init(ds
, full_screen
);
9508 #if defined(CONFIG_SDL)
9509 sdl_display_init(ds
, full_screen
, no_frame
);
9510 #elif defined(CONFIG_COCOA)
9511 cocoa_display_init(ds
, full_screen
);
9513 dumb_display_init(ds
);
9517 /* Maintain compatibility with multiple stdio monitors */
9518 if (!strcmp(monitor_device
,"stdio")) {
9519 for (i
= 0; i
< MAX_SERIAL_PORTS
; i
++) {
9520 const char *devname
= serial_devices
[i
];
9521 if (devname
&& !strcmp(devname
,"mon:stdio")) {
9522 monitor_device
= NULL
;
9524 } else if (devname
&& !strcmp(devname
,"stdio")) {
9525 monitor_device
= NULL
;
9526 serial_devices
[i
] = "mon:stdio";
9531 if (monitor_device
) {
9532 monitor_hd
= qemu_chr_open(monitor_device
);
9534 fprintf(stderr
, "qemu: could not open monitor device '%s'\n", monitor_device
);
9537 monitor_init(monitor_hd
, !nographic
);
9540 for(i
= 0; i
< MAX_VMCHANNEL_DEVICES
; i
++) {
9541 const char *devname
= vmchannel_devices
[i
];
9542 if (devname
[0] != '\0' && strcmp(devname
, "none")) {
9546 if (strstart(devname
, "di:", &devname
)) {
9547 devid
= strtol(devname
, &termn
, 16);
9548 devname
= termn
+ 1;
9551 fprintf(stderr
, "qemu: could not find vmchannel device id '%s'\n",
9555 vmchannel_hds
[i
] = qemu_chr_open(devname
);
9556 if (!vmchannel_hds
[i
]) {
9557 fprintf(stderr
, "qemu: could not open vmchannel device '%s'\n",
9561 vmchannel_init(vmchannel_hds
[i
], devid
, i
);
9565 for(i
= 0; i
< MAX_SERIAL_PORTS
; i
++) {
9566 const char *devname
= serial_devices
[i
];
9567 if (devname
&& strcmp(devname
, "none")) {
9568 serial_hds
[i
] = qemu_chr_open(devname
);
9569 if (!serial_hds
[i
]) {
9570 fprintf(stderr
, "qemu: could not open serial device '%s'\n",
9574 if (strstart(devname
, "vc", 0))
9575 qemu_chr_printf(serial_hds
[i
], "serial%d console\r\n", i
);
9579 for(i
= 0; i
< MAX_PARALLEL_PORTS
; i
++) {
9580 const char *devname
= parallel_devices
[i
];
9581 if (devname
&& strcmp(devname
, "none")) {
9582 parallel_hds
[i
] = qemu_chr_open(devname
);
9583 if (!parallel_hds
[i
]) {
9584 fprintf(stderr
, "qemu: could not open parallel device '%s'\n",
9588 if (strstart(devname
, "vc", 0))
9589 qemu_chr_printf(parallel_hds
[i
], "parallel%d console\r\n", i
);
9596 machine
->init(ram_size
, vga_ram_size
, boot_devices
, ds
,
9597 kernel_filename
, kernel_cmdline
, initrd_filename
, cpu_model
);
9599 current_machine
= machine
;
9601 /* init USB devices */
9603 for(i
= 0; i
< usb_devices_index
; i
++) {
9604 if (usb_device_add(usb_devices
[i
]) < 0) {
9605 fprintf(stderr
, "Warning: could not add USB device %s\n",
9611 if (display_state
.dpy_refresh
) {
9612 display_state
.gui_timer
= qemu_new_timer(rt_clock
, gui_update
, &display_state
);
9613 qemu_mod_timer(display_state
.gui_timer
, qemu_get_clock(rt_clock
));
9616 #ifdef CONFIG_GDBSTUB
9618 /* XXX: use standard host:port notation and modify options
9620 if (gdbserver_start(gdbstub_port
) < 0) {
9621 fprintf(stderr
, "qemu: could not open gdbstub device on port '%s'\n",
9633 rc
= migrate_incoming(incoming
);
9635 fprintf(stderr
, "Migration failed rc=%d\n", rc
);
9641 /* XXX: simplify init */
9654 len
= write(fds
[1], &status
, 1);
9655 if (len
== -1 && (errno
== EINTR
))
9662 TFR(fd
= open("/dev/null", O_RDWR
));
9676 #if !defined(_WIN32)
9677 /* close network clients */
9678 for(vlan
= first_vlan
; vlan
!= NULL
; vlan
= vlan
->next
) {
9679 VLANClientState
*vc
;
9681 for(vc
= vlan
->first_client
; vc
!= NULL
; vc
= vc
->next
) {
9682 if (vc
->fd_read
== tap_receive
) {
9684 TAPState
*s
= vc
->opaque
;
9686 if (sscanf(vc
->info_str
, "tap: ifname=%63s ", ifname
) == 1 &&
9688 launch_script(s
->down_script
, ifname
, s
->fd
);