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"
37 #include "qemu-timer.h"
38 #include "qemu-char.h"
40 #include "audio/audio.h"
41 #include "migration.h"
54 #include <sys/times.h>
58 #include <sys/ioctl.h>
59 #include <sys/socket.h>
60 #include <netinet/in.h>
63 #include <sys/select.h>
64 #include <arpa/inet.h>
67 #if !defined(__APPLE__) && !defined(__OpenBSD__)
73 #elif defined (__GLIBC__) && defined (__FreeBSD_kernel__)
74 #include <freebsd/stdlib.h>
78 #include <linux/if_tun.h>
81 #include <linux/rtc.h>
83 /* For the benefit of older linux systems which don't supply it,
84 we use a local copy of hpet.h. */
85 /* #include <linux/hpet.h> */
88 #include <linux/ppdev.h>
89 #include <linux/parport.h>
93 #include <sys/ethernet.h>
94 #include <sys/sockio.h>
95 #include <netinet/arp.h>
96 #include <netinet/in.h>
97 #include <netinet/in_systm.h>
98 #include <netinet/ip.h>
99 #include <netinet/ip_icmp.h> // must come after ip.h
100 #include <netinet/udp.h>
101 #include <netinet/tcp.h>
109 #include "qemu_socket.h"
111 #if defined(CONFIG_SLIRP)
112 #include "libslirp.h"
115 #if defined(__OpenBSD__)
119 #if defined(CONFIG_VDE)
120 #include <libvdeplug.h>
125 #include <sys/timeb.h>
126 #include <mmsystem.h>
127 #define getopt_long_only getopt_long
128 #define memalign(align, size) malloc(size)
135 #endif /* CONFIG_SDL */
139 #define main qemu_main
140 #endif /* CONFIG_COCOA */
144 #include "exec-all.h"
146 #include "qemu-kvm.h"
148 #define DEFAULT_NETWORK_SCRIPT "/etc/qemu-ifup"
149 #define DEFAULT_NETWORK_DOWN_SCRIPT "/etc/qemu-ifdown"
151 #define SMBD_COMMAND "/usr/sfw/sbin/smbd"
153 #define SMBD_COMMAND "/usr/sbin/smbd"
156 //#define DEBUG_UNUSED_IOPORT
157 //#define DEBUG_IOPORT
159 //#define DEBUG_SLIRP
162 #define DEFAULT_RAM_SIZE 144
164 #define DEFAULT_RAM_SIZE 128
167 /* Max number of USB devices that can be specified on the commandline. */
168 #define MAX_USB_CMDLINE 8
170 /* XXX: use a two level table to limit memory usage */
171 #define MAX_IOPORTS 65536
173 const char *bios_dir
= CONFIG_QEMU_SHAREDIR
;
174 const char *bios_name
= NULL
;
175 static void *ioport_opaque
[MAX_IOPORTS
];
176 static IOPortReadFunc
*ioport_read_table
[3][MAX_IOPORTS
];
177 static IOPortWriteFunc
*ioport_write_table
[3][MAX_IOPORTS
];
178 /* Note: drives_table[MAX_DRIVES] is a dummy block driver if none available
179 to store the VM snapshots */
180 DriveInfo drives_table
[MAX_DRIVES
+1];
182 int extboot_drive
= -1;
183 /* point to the block driver where the snapshots are managed */
184 static BlockDriverState
*bs_snapshots
;
185 static int vga_ram_size
;
186 enum vga_retrace_method vga_retrace_method
= VGA_RETRACE_DUMB
;
187 static DisplayState display_state
;
190 const char* keyboard_layout
= NULL
;
191 int64_t ticks_per_sec
;
194 NICInfo nd_table
[MAX_NICS
];
196 static int rtc_utc
= 1;
197 static int rtc_date_offset
= -1; /* -1 means no change */
198 int cirrus_vga_enabled
= 1;
199 int vmsvga_enabled
= 0;
201 int graphic_width
= 1024;
202 int graphic_height
= 768;
203 int graphic_depth
= 8;
205 int graphic_width
= 800;
206 int graphic_height
= 600;
207 int graphic_depth
= 15;
209 static int full_screen
= 0;
210 static int no_frame
= 0;
212 CharDriverState
*serial_hds
[MAX_SERIAL_PORTS
];
213 CharDriverState
*parallel_hds
[MAX_PARALLEL_PORTS
];
215 int win2k_install_hack
= 0;
218 static VLANState
*first_vlan
;
220 const char *vnc_display
;
221 int acpi_enabled
= 1;
226 int graphic_rotate
= 0;
228 const char *incoming
;
229 const char *option_rom
[MAX_OPTION_ROMS
];
231 int semihosting_enabled
= 0;
232 int time_drift_fix
= 0;
233 unsigned int kvm_shadow_memory
= 0;
234 const char *mem_path
= NULL
;
236 const char *cpu_vendor_string
;
240 const char *qemu_name
;
243 unsigned int nb_prom_envs
= 0;
244 const char *prom_envs
[MAX_PROM_ENVS
];
247 struct drive_opt drives_opt
[MAX_DRIVES
];
249 static CPUState
*cur_cpu
;
250 static CPUState
*next_cpu
;
251 static int event_pending
= 1;
252 /* Conversion factor from emulated instructions to virtual clock ticks. */
253 static int icount_time_shift
;
254 /* Arbitrarily pick 1MIPS as the minimum allowable speed. */
255 #define MAX_ICOUNT_SHIFT 10
256 /* Compensate for varying guest execution speed. */
257 static int64_t qemu_icount_bias
;
258 static QEMUTimer
*icount_rt_timer
;
259 static QEMUTimer
*icount_vm_timer
;
261 uint8_t qemu_uuid
[16];
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 /***********************************************************/
276 /* x86 ISA bus support */
278 target_phys_addr_t isa_mem_base
= 0;
281 static IOPortReadFunc default_ioport_readb
, default_ioport_readw
, default_ioport_readl
;
282 static IOPortWriteFunc default_ioport_writeb
, default_ioport_writew
, default_ioport_writel
;
284 static uint32_t ioport_read(int index
, uint32_t address
)
286 static IOPortReadFunc
*default_func
[3] = {
287 default_ioport_readb
,
288 default_ioport_readw
,
291 IOPortReadFunc
*func
= ioport_read_table
[index
][address
];
293 func
= default_func
[index
];
294 return func(ioport_opaque
[address
], address
);
297 static void ioport_write(int index
, uint32_t address
, uint32_t data
)
299 static IOPortWriteFunc
*default_func
[3] = {
300 default_ioport_writeb
,
301 default_ioport_writew
,
302 default_ioport_writel
304 IOPortWriteFunc
*func
= ioport_write_table
[index
][address
];
306 func
= default_func
[index
];
307 func(ioport_opaque
[address
], address
, data
);
310 static uint32_t default_ioport_readb(void *opaque
, uint32_t address
)
312 #ifdef DEBUG_UNUSED_IOPORT
313 fprintf(stderr
, "unused inb: port=0x%04x\n", address
);
318 static void default_ioport_writeb(void *opaque
, uint32_t address
, uint32_t data
)
320 #ifdef DEBUG_UNUSED_IOPORT
321 fprintf(stderr
, "unused outb: port=0x%04x data=0x%02x\n", address
, data
);
325 /* default is to make two byte accesses */
326 static uint32_t default_ioport_readw(void *opaque
, uint32_t address
)
329 data
= ioport_read(0, address
);
330 address
= (address
+ 1) & (MAX_IOPORTS
- 1);
331 data
|= ioport_read(0, address
) << 8;
335 static void default_ioport_writew(void *opaque
, uint32_t address
, uint32_t data
)
337 ioport_write(0, address
, data
& 0xff);
338 address
= (address
+ 1) & (MAX_IOPORTS
- 1);
339 ioport_write(0, address
, (data
>> 8) & 0xff);
342 static uint32_t default_ioport_readl(void *opaque
, uint32_t address
)
344 #ifdef DEBUG_UNUSED_IOPORT
345 fprintf(stderr
, "unused inl: port=0x%04x\n", address
);
350 static void default_ioport_writel(void *opaque
, uint32_t address
, uint32_t data
)
352 #ifdef DEBUG_UNUSED_IOPORT
353 fprintf(stderr
, "unused outl: port=0x%04x data=0x%02x\n", address
, data
);
357 /* size is the word size in byte */
358 int register_ioport_read(int start
, int length
, int size
,
359 IOPortReadFunc
*func
, void *opaque
)
365 } else if (size
== 2) {
367 } else if (size
== 4) {
370 hw_error("register_ioport_read: invalid size");
373 for(i
= start
; i
< start
+ length
; i
+= size
) {
374 ioport_read_table
[bsize
][i
] = func
;
375 if (ioport_opaque
[i
] != NULL
&& ioport_opaque
[i
] != opaque
)
376 hw_error("register_ioport_read: invalid opaque");
377 ioport_opaque
[i
] = opaque
;
382 /* size is the word size in byte */
383 int register_ioport_write(int start
, int length
, int size
,
384 IOPortWriteFunc
*func
, void *opaque
)
390 } else if (size
== 2) {
392 } else if (size
== 4) {
395 hw_error("register_ioport_write: invalid size");
398 for(i
= start
; i
< start
+ length
; i
+= size
) {
399 ioport_write_table
[bsize
][i
] = func
;
400 if (ioport_opaque
[i
] != NULL
&& ioport_opaque
[i
] != opaque
)
401 hw_error("register_ioport_write: invalid opaque");
402 ioport_opaque
[i
] = opaque
;
407 void isa_unassign_ioport(int start
, int length
)
411 for(i
= start
; i
< start
+ length
; i
++) {
412 ioport_read_table
[0][i
] = default_ioport_readb
;
413 ioport_read_table
[1][i
] = default_ioport_readw
;
414 ioport_read_table
[2][i
] = default_ioport_readl
;
416 ioport_write_table
[0][i
] = default_ioport_writeb
;
417 ioport_write_table
[1][i
] = default_ioport_writew
;
418 ioport_write_table
[2][i
] = default_ioport_writel
;
420 ioport_opaque
[i
] = NULL
;
424 /***********************************************************/
426 void cpu_outb(CPUState
*env
, int addr
, int val
)
429 if (loglevel
& CPU_LOG_IOPORT
)
430 fprintf(logfile
, "outb: %04x %02x\n", addr
, val
);
432 ioport_write(0, addr
, val
);
435 env
->last_io_time
= cpu_get_time_fast();
439 void cpu_outw(CPUState
*env
, int addr
, int val
)
442 if (loglevel
& CPU_LOG_IOPORT
)
443 fprintf(logfile
, "outw: %04x %04x\n", addr
, val
);
445 ioport_write(1, addr
, val
);
448 env
->last_io_time
= cpu_get_time_fast();
452 void cpu_outl(CPUState
*env
, int addr
, int val
)
455 if (loglevel
& CPU_LOG_IOPORT
)
456 fprintf(logfile
, "outl: %04x %08x\n", addr
, val
);
458 ioport_write(2, addr
, val
);
461 env
->last_io_time
= cpu_get_time_fast();
465 int cpu_inb(CPUState
*env
, int addr
)
468 val
= ioport_read(0, addr
);
470 if (loglevel
& CPU_LOG_IOPORT
)
471 fprintf(logfile
, "inb : %04x %02x\n", addr
, val
);
475 env
->last_io_time
= cpu_get_time_fast();
480 int cpu_inw(CPUState
*env
, int addr
)
483 val
= ioport_read(1, addr
);
485 if (loglevel
& CPU_LOG_IOPORT
)
486 fprintf(logfile
, "inw : %04x %04x\n", addr
, val
);
490 env
->last_io_time
= cpu_get_time_fast();
495 int cpu_inl(CPUState
*env
, int addr
)
498 val
= ioport_read(2, addr
);
500 if (loglevel
& CPU_LOG_IOPORT
)
501 fprintf(logfile
, "inl : %04x %08x\n", addr
, val
);
505 env
->last_io_time
= cpu_get_time_fast();
510 /***********************************************************/
511 void hw_error(const char *fmt
, ...)
517 fprintf(stderr
, "qemu: hardware error: ");
518 vfprintf(stderr
, fmt
, ap
);
519 fprintf(stderr
, "\n");
520 for(env
= first_cpu
; env
!= NULL
; env
= env
->next_cpu
) {
521 fprintf(stderr
, "CPU #%d:\n", env
->cpu_index
);
523 cpu_dump_state(env
, stderr
, fprintf
, X86_DUMP_FPU
);
525 cpu_dump_state(env
, stderr
, fprintf
, 0);
535 static QEMUBalloonEvent
*qemu_balloon_event
;
536 void *qemu_balloon_event_opaque
;
538 void qemu_add_balloon_handler(QEMUBalloonEvent
*func
, void *opaque
)
540 qemu_balloon_event
= func
;
541 qemu_balloon_event_opaque
= opaque
;
544 void qemu_balloon(ram_addr_t target
)
546 if (qemu_balloon_event
)
547 qemu_balloon_event(qemu_balloon_event_opaque
, target
);
550 ram_addr_t
qemu_balloon_status(void)
552 if (qemu_balloon_event
)
553 return qemu_balloon_event(qemu_balloon_event_opaque
, 0);
557 /***********************************************************/
560 static QEMUPutKBDEvent
*qemu_put_kbd_event
;
561 static void *qemu_put_kbd_event_opaque
;
562 static QEMUPutMouseEntry
*qemu_put_mouse_event_head
;
563 static QEMUPutMouseEntry
*qemu_put_mouse_event_current
;
565 void qemu_add_kbd_event_handler(QEMUPutKBDEvent
*func
, void *opaque
)
567 qemu_put_kbd_event_opaque
= opaque
;
568 qemu_put_kbd_event
= func
;
571 QEMUPutMouseEntry
*qemu_add_mouse_event_handler(QEMUPutMouseEvent
*func
,
572 void *opaque
, int absolute
,
575 QEMUPutMouseEntry
*s
, *cursor
;
577 s
= qemu_mallocz(sizeof(QEMUPutMouseEntry
));
581 s
->qemu_put_mouse_event
= func
;
582 s
->qemu_put_mouse_event_opaque
= opaque
;
583 s
->qemu_put_mouse_event_absolute
= absolute
;
584 s
->qemu_put_mouse_event_name
= qemu_strdup(name
);
587 if (!qemu_put_mouse_event_head
) {
588 qemu_put_mouse_event_head
= qemu_put_mouse_event_current
= s
;
592 cursor
= qemu_put_mouse_event_head
;
593 while (cursor
->next
!= NULL
)
594 cursor
= cursor
->next
;
597 qemu_put_mouse_event_current
= s
;
602 void qemu_remove_mouse_event_handler(QEMUPutMouseEntry
*entry
)
604 QEMUPutMouseEntry
*prev
= NULL
, *cursor
;
606 if (!qemu_put_mouse_event_head
|| entry
== NULL
)
609 cursor
= qemu_put_mouse_event_head
;
610 while (cursor
!= NULL
&& cursor
!= entry
) {
612 cursor
= cursor
->next
;
615 if (cursor
== NULL
) // does not exist or list empty
617 else if (prev
== NULL
) { // entry is head
618 qemu_put_mouse_event_head
= cursor
->next
;
619 if (qemu_put_mouse_event_current
== entry
)
620 qemu_put_mouse_event_current
= cursor
->next
;
621 qemu_free(entry
->qemu_put_mouse_event_name
);
626 prev
->next
= entry
->next
;
628 if (qemu_put_mouse_event_current
== entry
)
629 qemu_put_mouse_event_current
= prev
;
631 qemu_free(entry
->qemu_put_mouse_event_name
);
635 void kbd_put_keycode(int keycode
)
637 if (qemu_put_kbd_event
) {
638 qemu_put_kbd_event(qemu_put_kbd_event_opaque
, keycode
);
642 void kbd_mouse_event(int dx
, int dy
, int dz
, int buttons_state
)
644 QEMUPutMouseEvent
*mouse_event
;
645 void *mouse_event_opaque
;
648 if (!qemu_put_mouse_event_current
) {
653 qemu_put_mouse_event_current
->qemu_put_mouse_event
;
655 qemu_put_mouse_event_current
->qemu_put_mouse_event_opaque
;
658 if (graphic_rotate
) {
659 if (qemu_put_mouse_event_current
->qemu_put_mouse_event_absolute
)
662 width
= graphic_width
- 1;
663 mouse_event(mouse_event_opaque
,
664 width
- dy
, dx
, dz
, buttons_state
);
666 mouse_event(mouse_event_opaque
,
667 dx
, dy
, dz
, buttons_state
);
671 int kbd_mouse_is_absolute(void)
673 if (!qemu_put_mouse_event_current
)
676 return qemu_put_mouse_event_current
->qemu_put_mouse_event_absolute
;
679 void do_info_mice(void)
681 QEMUPutMouseEntry
*cursor
;
684 if (!qemu_put_mouse_event_head
) {
685 term_printf("No mouse devices connected\n");
689 term_printf("Mouse devices available:\n");
690 cursor
= qemu_put_mouse_event_head
;
691 while (cursor
!= NULL
) {
692 term_printf("%c Mouse #%d: %s\n",
693 (cursor
== qemu_put_mouse_event_current
? '*' : ' '),
694 index
, cursor
->qemu_put_mouse_event_name
);
696 cursor
= cursor
->next
;
700 void do_mouse_set(int index
)
702 QEMUPutMouseEntry
*cursor
;
705 if (!qemu_put_mouse_event_head
) {
706 term_printf("No mouse devices connected\n");
710 cursor
= qemu_put_mouse_event_head
;
711 while (cursor
!= NULL
&& index
!= i
) {
713 cursor
= cursor
->next
;
717 qemu_put_mouse_event_current
= cursor
;
719 term_printf("Mouse at given index not found\n");
722 /* compute with 96 bit intermediate result: (a*b)/c */
723 uint64_t muldiv64(uint64_t a
, uint32_t b
, uint32_t c
)
728 #ifdef WORDS_BIGENDIAN
738 rl
= (uint64_t)u
.l
.low
* (uint64_t)b
;
739 rh
= (uint64_t)u
.l
.high
* (uint64_t)b
;
742 res
.l
.low
= (((rh
% c
) << 32) + (rl
& 0xffffffff)) / c
;
746 /***********************************************************/
747 /* real time host monotonic timer */
749 #define QEMU_TIMER_BASE 1000000000LL
753 static int64_t clock_freq
;
755 static void init_get_clock(void)
759 ret
= QueryPerformanceFrequency(&freq
);
761 fprintf(stderr
, "Could not calibrate ticks\n");
764 clock_freq
= freq
.QuadPart
;
767 static int64_t get_clock(void)
770 QueryPerformanceCounter(&ti
);
771 return muldiv64(ti
.QuadPart
, QEMU_TIMER_BASE
, clock_freq
);
776 static int use_rt_clock
;
778 static void init_get_clock(void)
781 #if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD_version >= 500000)
784 if (clock_gettime(CLOCK_MONOTONIC
, &ts
) == 0) {
791 static int64_t get_clock(void)
793 #if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD_version >= 500000)
796 clock_gettime(CLOCK_MONOTONIC
, &ts
);
797 return ts
.tv_sec
* 1000000000LL + ts
.tv_nsec
;
801 /* XXX: using gettimeofday leads to problems if the date
802 changes, so it should be avoided. */
804 gettimeofday(&tv
, NULL
);
805 return tv
.tv_sec
* 1000000000LL + (tv
.tv_usec
* 1000);
810 /* Return the virtual CPU time, based on the instruction counter. */
811 static int64_t cpu_get_icount(void)
814 CPUState
*env
= cpu_single_env
;;
815 icount
= qemu_icount
;
818 fprintf(stderr
, "Bad clock read\n");
819 icount
-= (env
->icount_decr
.u16
.low
+ env
->icount_extra
);
821 return qemu_icount_bias
+ (icount
<< icount_time_shift
);
824 /***********************************************************/
825 /* guest cycle counter */
827 static int64_t cpu_ticks_prev
;
828 static int64_t cpu_ticks_offset
;
829 static int64_t cpu_clock_offset
;
830 static int cpu_ticks_enabled
;
832 /* return the host CPU cycle counter and handle stop/restart */
833 int64_t cpu_get_ticks(void)
836 return cpu_get_icount();
838 if (!cpu_ticks_enabled
) {
839 return cpu_ticks_offset
;
842 ticks
= cpu_get_real_ticks();
843 if (cpu_ticks_prev
> ticks
) {
844 /* Note: non increasing ticks may happen if the host uses
846 cpu_ticks_offset
+= cpu_ticks_prev
- ticks
;
848 cpu_ticks_prev
= ticks
;
849 return ticks
+ cpu_ticks_offset
;
853 /* return the host CPU monotonic timer and handle stop/restart */
854 static int64_t cpu_get_clock(void)
857 if (!cpu_ticks_enabled
) {
858 return cpu_clock_offset
;
861 return ti
+ cpu_clock_offset
;
865 /* enable cpu_get_ticks() */
866 void cpu_enable_ticks(void)
868 if (!cpu_ticks_enabled
) {
869 cpu_ticks_offset
-= cpu_get_real_ticks();
870 cpu_clock_offset
-= get_clock();
871 cpu_ticks_enabled
= 1;
875 /* disable cpu_get_ticks() : the clock is stopped. You must not call
876 cpu_get_ticks() after that. */
877 void cpu_disable_ticks(void)
879 if (cpu_ticks_enabled
) {
880 cpu_ticks_offset
= cpu_get_ticks();
881 cpu_clock_offset
= cpu_get_clock();
882 cpu_ticks_enabled
= 0;
886 /***********************************************************/
889 #define QEMU_TIMER_REALTIME 0
890 #define QEMU_TIMER_VIRTUAL 1
894 /* XXX: add frequency */
902 struct QEMUTimer
*next
;
905 struct qemu_alarm_timer
{
909 int (*start
)(struct qemu_alarm_timer
*t
);
910 void (*stop
)(struct qemu_alarm_timer
*t
);
911 void (*rearm
)(struct qemu_alarm_timer
*t
);
915 #define ALARM_FLAG_DYNTICKS 0x1
916 #define ALARM_FLAG_EXPIRED 0x2
918 static inline int alarm_has_dynticks(struct qemu_alarm_timer
*t
)
920 return t
->flags
& ALARM_FLAG_DYNTICKS
;
923 static void qemu_rearm_alarm_timer(struct qemu_alarm_timer
*t
)
925 if (!alarm_has_dynticks(t
))
931 /* TODO: MIN_TIMER_REARM_US should be optimized */
932 #define MIN_TIMER_REARM_US 250
934 static struct qemu_alarm_timer
*alarm_timer
;
938 struct qemu_alarm_win32
{
942 } alarm_win32_data
= {0, NULL
, -1};
944 static int win32_start_timer(struct qemu_alarm_timer
*t
);
945 static void win32_stop_timer(struct qemu_alarm_timer
*t
);
946 static void win32_rearm_timer(struct qemu_alarm_timer
*t
);
950 static int unix_start_timer(struct qemu_alarm_timer
*t
);
951 static void unix_stop_timer(struct qemu_alarm_timer
*t
);
955 static int dynticks_start_timer(struct qemu_alarm_timer
*t
);
956 static void dynticks_stop_timer(struct qemu_alarm_timer
*t
);
957 static void dynticks_rearm_timer(struct qemu_alarm_timer
*t
);
959 static int hpet_start_timer(struct qemu_alarm_timer
*t
);
960 static void hpet_stop_timer(struct qemu_alarm_timer
*t
);
962 static int rtc_start_timer(struct qemu_alarm_timer
*t
);
963 static void rtc_stop_timer(struct qemu_alarm_timer
*t
);
965 #endif /* __linux__ */
969 /* Correlation between real and virtual time is always going to be
970 fairly approximate, so ignore small variation.
971 When the guest is idle real and virtual time will be aligned in
973 #define ICOUNT_WOBBLE (QEMU_TIMER_BASE / 10)
975 static void icount_adjust(void)
980 static int64_t last_delta
;
981 /* If the VM is not running, then do nothing. */
985 cur_time
= cpu_get_clock();
986 cur_icount
= qemu_get_clock(vm_clock
);
987 delta
= cur_icount
- cur_time
;
988 /* FIXME: This is a very crude algorithm, somewhat prone to oscillation. */
990 && last_delta
+ ICOUNT_WOBBLE
< delta
* 2
991 && icount_time_shift
> 0) {
992 /* The guest is getting too far ahead. Slow time down. */
996 && last_delta
- ICOUNT_WOBBLE
> delta
* 2
997 && icount_time_shift
< MAX_ICOUNT_SHIFT
) {
998 /* The guest is getting too far behind. Speed time up. */
1002 qemu_icount_bias
= cur_icount
- (qemu_icount
<< icount_time_shift
);
1005 static void icount_adjust_rt(void * opaque
)
1007 qemu_mod_timer(icount_rt_timer
,
1008 qemu_get_clock(rt_clock
) + 1000);
1012 static void icount_adjust_vm(void * opaque
)
1014 qemu_mod_timer(icount_vm_timer
,
1015 qemu_get_clock(vm_clock
) + QEMU_TIMER_BASE
/ 10);
1019 static void init_icount_adjust(void)
1021 /* Have both realtime and virtual time triggers for speed adjustment.
1022 The realtime trigger catches emulated time passing too slowly,
1023 the virtual time trigger catches emulated time passing too fast.
1024 Realtime triggers occur even when idle, so use them less frequently
1025 than VM triggers. */
1026 icount_rt_timer
= qemu_new_timer(rt_clock
, icount_adjust_rt
, NULL
);
1027 qemu_mod_timer(icount_rt_timer
,
1028 qemu_get_clock(rt_clock
) + 1000);
1029 icount_vm_timer
= qemu_new_timer(vm_clock
, icount_adjust_vm
, NULL
);
1030 qemu_mod_timer(icount_vm_timer
,
1031 qemu_get_clock(vm_clock
) + QEMU_TIMER_BASE
/ 10);
1034 static struct qemu_alarm_timer alarm_timers
[] = {
1037 {"dynticks", ALARM_FLAG_DYNTICKS
, dynticks_start_timer
,
1038 dynticks_stop_timer
, dynticks_rearm_timer
, NULL
},
1039 /* HPET - if available - is preferred */
1040 {"hpet", 0, hpet_start_timer
, hpet_stop_timer
, NULL
, NULL
},
1041 /* ...otherwise try RTC */
1042 {"rtc", 0, rtc_start_timer
, rtc_stop_timer
, NULL
, NULL
},
1044 {"unix", 0, unix_start_timer
, unix_stop_timer
, NULL
, NULL
},
1046 {"dynticks", ALARM_FLAG_DYNTICKS
, win32_start_timer
,
1047 win32_stop_timer
, win32_rearm_timer
, &alarm_win32_data
},
1048 {"win32", 0, win32_start_timer
,
1049 win32_stop_timer
, NULL
, &alarm_win32_data
},
1054 static void show_available_alarms(void)
1058 printf("Available alarm timers, in order of precedence:\n");
1059 for (i
= 0; alarm_timers
[i
].name
; i
++)
1060 printf("%s\n", alarm_timers
[i
].name
);
1063 static void configure_alarms(char const *opt
)
1067 int count
= (sizeof(alarm_timers
) / sizeof(*alarm_timers
)) - 1;
1070 struct qemu_alarm_timer tmp
;
1072 if (!strcmp(opt
, "?")) {
1073 show_available_alarms();
1079 /* Reorder the array */
1080 name
= strtok(arg
, ",");
1082 for (i
= 0; i
< count
&& alarm_timers
[i
].name
; i
++) {
1083 if (!strcmp(alarm_timers
[i
].name
, name
))
1088 fprintf(stderr
, "Unknown clock %s\n", name
);
1097 tmp
= alarm_timers
[i
];
1098 alarm_timers
[i
] = alarm_timers
[cur
];
1099 alarm_timers
[cur
] = tmp
;
1103 name
= strtok(NULL
, ",");
1109 /* Disable remaining timers */
1110 for (i
= cur
; i
< count
; i
++)
1111 alarm_timers
[i
].name
= NULL
;
1113 show_available_alarms();
1118 QEMUClock
*rt_clock
;
1119 QEMUClock
*vm_clock
;
1121 static QEMUTimer
*active_timers
[2];
1123 static QEMUClock
*qemu_new_clock(int type
)
1126 clock
= qemu_mallocz(sizeof(QEMUClock
));
1133 QEMUTimer
*qemu_new_timer(QEMUClock
*clock
, QEMUTimerCB
*cb
, void *opaque
)
1137 ts
= qemu_mallocz(sizeof(QEMUTimer
));
1140 ts
->opaque
= opaque
;
1144 void qemu_free_timer(QEMUTimer
*ts
)
1149 /* stop a timer, but do not dealloc it */
1150 void qemu_del_timer(QEMUTimer
*ts
)
1154 /* NOTE: this code must be signal safe because
1155 qemu_timer_expired() can be called from a signal. */
1156 pt
= &active_timers
[ts
->clock
->type
];
1169 /* modify the current timer so that it will be fired when current_time
1170 >= expire_time. The corresponding callback will be called. */
1171 void qemu_mod_timer(QEMUTimer
*ts
, int64_t expire_time
)
1177 /* add the timer in the sorted list */
1178 /* NOTE: this code must be signal safe because
1179 qemu_timer_expired() can be called from a signal. */
1180 pt
= &active_timers
[ts
->clock
->type
];
1185 if (t
->expire_time
> expire_time
)
1189 ts
->expire_time
= expire_time
;
1193 /* Rearm if necessary */
1194 if (pt
== &active_timers
[ts
->clock
->type
]) {
1195 if ((alarm_timer
->flags
& ALARM_FLAG_EXPIRED
) == 0) {
1196 qemu_rearm_alarm_timer(alarm_timer
);
1198 /* Interrupt execution to force deadline recalculation. */
1199 if (use_icount
&& cpu_single_env
) {
1200 cpu_interrupt(cpu_single_env
, CPU_INTERRUPT_EXIT
);
1205 int qemu_timer_pending(QEMUTimer
*ts
)
1208 for(t
= active_timers
[ts
->clock
->type
]; t
!= NULL
; t
= t
->next
) {
1215 static inline int qemu_timer_expired(QEMUTimer
*timer_head
, int64_t current_time
)
1219 return (timer_head
->expire_time
<= current_time
);
1222 static void qemu_run_timers(QEMUTimer
**ptimer_head
, int64_t current_time
)
1228 if (!ts
|| ts
->expire_time
> current_time
)
1230 /* remove timer from the list before calling the callback */
1231 *ptimer_head
= ts
->next
;
1234 /* run the callback (the timer list can be modified) */
1239 int64_t qemu_get_clock(QEMUClock
*clock
)
1241 switch(clock
->type
) {
1242 case QEMU_TIMER_REALTIME
:
1243 return get_clock() / 1000000;
1245 case QEMU_TIMER_VIRTUAL
:
1247 return cpu_get_icount();
1249 return cpu_get_clock();
1254 static void init_timers(void)
1257 ticks_per_sec
= QEMU_TIMER_BASE
;
1258 rt_clock
= qemu_new_clock(QEMU_TIMER_REALTIME
);
1259 vm_clock
= qemu_new_clock(QEMU_TIMER_VIRTUAL
);
1263 void qemu_put_timer(QEMUFile
*f
, QEMUTimer
*ts
)
1265 uint64_t expire_time
;
1267 if (qemu_timer_pending(ts
)) {
1268 expire_time
= ts
->expire_time
;
1272 qemu_put_be64(f
, expire_time
);
1275 void qemu_get_timer(QEMUFile
*f
, QEMUTimer
*ts
)
1277 uint64_t expire_time
;
1279 expire_time
= qemu_get_be64(f
);
1280 if (expire_time
!= -1) {
1281 qemu_mod_timer(ts
, expire_time
);
1287 static void timer_save(QEMUFile
*f
, void *opaque
)
1289 if (cpu_ticks_enabled
) {
1290 hw_error("cannot save state if virtual timers are running");
1292 qemu_put_be64(f
, cpu_ticks_offset
);
1293 qemu_put_be64(f
, ticks_per_sec
);
1294 qemu_put_be64(f
, cpu_clock_offset
);
1297 static int timer_load(QEMUFile
*f
, void *opaque
, int version_id
)
1299 if (version_id
!= 1 && version_id
!= 2)
1301 if (cpu_ticks_enabled
) {
1304 cpu_ticks_offset
=qemu_get_be64(f
);
1305 ticks_per_sec
=qemu_get_be64(f
);
1306 if (version_id
== 2) {
1307 cpu_clock_offset
=qemu_get_be64(f
);
1313 void CALLBACK
host_alarm_handler(UINT uTimerID
, UINT uMsg
,
1314 DWORD_PTR dwUser
, DWORD_PTR dw1
, DWORD_PTR dw2
)
1316 static void host_alarm_handler(int host_signum
)
1320 #define DISP_FREQ 1000
1322 static int64_t delta_min
= INT64_MAX
;
1323 static int64_t delta_max
, delta_cum
, last_clock
, delta
, ti
;
1325 ti
= qemu_get_clock(vm_clock
);
1326 if (last_clock
!= 0) {
1327 delta
= ti
- last_clock
;
1328 if (delta
< delta_min
)
1330 if (delta
> delta_max
)
1333 if (++count
== DISP_FREQ
) {
1334 printf("timer: min=%" PRId64
" us max=%" PRId64
" us avg=%" PRId64
" us avg_freq=%0.3f Hz\n",
1335 muldiv64(delta_min
, 1000000, ticks_per_sec
),
1336 muldiv64(delta_max
, 1000000, ticks_per_sec
),
1337 muldiv64(delta_cum
, 1000000 / DISP_FREQ
, ticks_per_sec
),
1338 (double)ticks_per_sec
/ ((double)delta_cum
/ DISP_FREQ
));
1340 delta_min
= INT64_MAX
;
1349 alarm_has_dynticks(alarm_timer
) ||
1351 qemu_timer_expired(active_timers
[QEMU_TIMER_VIRTUAL
],
1352 qemu_get_clock(vm_clock
))) ||
1353 qemu_timer_expired(active_timers
[QEMU_TIMER_REALTIME
],
1354 qemu_get_clock(rt_clock
))) {
1356 struct qemu_alarm_win32
*data
= ((struct qemu_alarm_timer
*)dwUser
)->priv
;
1357 SetEvent(data
->host_alarm
);
1359 CPUState
*env
= next_cpu
;
1361 alarm_timer
->flags
|= ALARM_FLAG_EXPIRED
;
1364 /* stop the currently executing cpu because a timer occured */
1365 cpu_interrupt(env
, CPU_INTERRUPT_EXIT
);
1367 if (env
->kqemu_enabled
) {
1368 kqemu_cpu_interrupt(env
);
1376 static int64_t qemu_next_deadline(void)
1380 if (active_timers
[QEMU_TIMER_VIRTUAL
]) {
1381 delta
= active_timers
[QEMU_TIMER_VIRTUAL
]->expire_time
-
1382 qemu_get_clock(vm_clock
);
1384 /* To avoid problems with overflow limit this to 2^32. */
1394 #if defined(__linux__) || defined(_WIN32)
1395 static uint64_t qemu_next_deadline_dyntick(void)
1403 delta
= (qemu_next_deadline() + 999) / 1000;
1405 if (active_timers
[QEMU_TIMER_REALTIME
]) {
1406 rtdelta
= (active_timers
[QEMU_TIMER_REALTIME
]->expire_time
-
1407 qemu_get_clock(rt_clock
))*1000;
1408 if (rtdelta
< delta
)
1412 if (delta
< MIN_TIMER_REARM_US
)
1413 delta
= MIN_TIMER_REARM_US
;
1421 #if defined(__linux__)
1423 #define RTC_FREQ 1024
1425 static void enable_sigio_timer(int fd
)
1427 struct sigaction act
;
1430 sigfillset(&act
.sa_mask
);
1432 act
.sa_handler
= host_alarm_handler
;
1434 sigaction(SIGIO
, &act
, NULL
);
1435 fcntl(fd
, F_SETFL
, O_ASYNC
);
1436 fcntl(fd
, F_SETOWN
, getpid());
1439 static int hpet_start_timer(struct qemu_alarm_timer
*t
)
1441 struct hpet_info info
;
1444 fd
= open("/dev/hpet", O_RDONLY
);
1449 r
= ioctl(fd
, HPET_IRQFREQ
, RTC_FREQ
);
1451 fprintf(stderr
, "Could not configure '/dev/hpet' to have a 1024Hz timer. This is not a fatal\n"
1452 "error, but for better emulation accuracy type:\n"
1453 "'echo 1024 > /proc/sys/dev/hpet/max-user-freq' as root.\n");
1457 /* Check capabilities */
1458 r
= ioctl(fd
, HPET_INFO
, &info
);
1462 /* Enable periodic mode */
1463 r
= ioctl(fd
, HPET_EPI
, 0);
1464 if (info
.hi_flags
&& (r
< 0))
1467 /* Enable interrupt */
1468 r
= ioctl(fd
, HPET_IE_ON
, 0);
1472 enable_sigio_timer(fd
);
1473 t
->priv
= (void *)(long)fd
;
1481 static void hpet_stop_timer(struct qemu_alarm_timer
*t
)
1483 int fd
= (long)t
->priv
;
1488 static int rtc_start_timer(struct qemu_alarm_timer
*t
)
1491 unsigned long current_rtc_freq
= 0;
1493 TFR(rtc_fd
= open("/dev/rtc", O_RDONLY
));
1496 ioctl(rtc_fd
, RTC_IRQP_READ
, ¤t_rtc_freq
);
1497 if (current_rtc_freq
!= RTC_FREQ
&&
1498 ioctl(rtc_fd
, RTC_IRQP_SET
, RTC_FREQ
) < 0) {
1499 fprintf(stderr
, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n"
1500 "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n"
1501 "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n");
1504 if (ioctl(rtc_fd
, RTC_PIE_ON
, 0) < 0) {
1510 enable_sigio_timer(rtc_fd
);
1512 t
->priv
= (void *)(long)rtc_fd
;
1517 static void rtc_stop_timer(struct qemu_alarm_timer
*t
)
1519 int rtc_fd
= (long)t
->priv
;
1524 static int dynticks_start_timer(struct qemu_alarm_timer
*t
)
1528 struct sigaction act
;
1530 sigfillset(&act
.sa_mask
);
1532 act
.sa_handler
= host_alarm_handler
;
1534 sigaction(SIGALRM
, &act
, NULL
);
1536 ev
.sigev_value
.sival_int
= 0;
1537 ev
.sigev_notify
= SIGEV_SIGNAL
;
1538 ev
.sigev_signo
= SIGALRM
;
1540 if (timer_create(CLOCK_REALTIME
, &ev
, &host_timer
)) {
1541 perror("timer_create");
1543 /* disable dynticks */
1544 fprintf(stderr
, "Dynamic Ticks disabled\n");
1549 t
->priv
= (void *)host_timer
;
1554 static void dynticks_stop_timer(struct qemu_alarm_timer
*t
)
1556 timer_t host_timer
= (timer_t
)t
->priv
;
1558 timer_delete(host_timer
);
1561 static void dynticks_rearm_timer(struct qemu_alarm_timer
*t
)
1563 timer_t host_timer
= (timer_t
)t
->priv
;
1564 struct itimerspec timeout
;
1565 int64_t nearest_delta_us
= INT64_MAX
;
1568 if (!active_timers
[QEMU_TIMER_REALTIME
] &&
1569 !active_timers
[QEMU_TIMER_VIRTUAL
])
1572 nearest_delta_us
= qemu_next_deadline_dyntick();
1574 /* check whether a timer is already running */
1575 if (timer_gettime(host_timer
, &timeout
)) {
1577 fprintf(stderr
, "Internal timer error: aborting\n");
1580 current_us
= timeout
.it_value
.tv_sec
* 1000000 + timeout
.it_value
.tv_nsec
/1000;
1581 if (current_us
&& current_us
<= nearest_delta_us
)
1584 timeout
.it_interval
.tv_sec
= 0;
1585 timeout
.it_interval
.tv_nsec
= 0; /* 0 for one-shot timer */
1586 timeout
.it_value
.tv_sec
= nearest_delta_us
/ 1000000;
1587 timeout
.it_value
.tv_nsec
= (nearest_delta_us
% 1000000) * 1000;
1588 if (timer_settime(host_timer
, 0 /* RELATIVE */, &timeout
, NULL
)) {
1590 fprintf(stderr
, "Internal timer error: aborting\n");
1595 #endif /* defined(__linux__) */
1597 static int unix_start_timer(struct qemu_alarm_timer
*t
)
1599 struct sigaction act
;
1600 struct itimerval itv
;
1604 sigfillset(&act
.sa_mask
);
1606 act
.sa_handler
= host_alarm_handler
;
1608 sigaction(SIGALRM
, &act
, NULL
);
1610 itv
.it_interval
.tv_sec
= 0;
1611 /* for i386 kernel 2.6 to get 1 ms */
1612 itv
.it_interval
.tv_usec
= 999;
1613 itv
.it_value
.tv_sec
= 0;
1614 itv
.it_value
.tv_usec
= 10 * 1000;
1616 err
= setitimer(ITIMER_REAL
, &itv
, NULL
);
1623 static void unix_stop_timer(struct qemu_alarm_timer
*t
)
1625 struct itimerval itv
;
1627 memset(&itv
, 0, sizeof(itv
));
1628 setitimer(ITIMER_REAL
, &itv
, NULL
);
1631 #endif /* !defined(_WIN32) */
1635 static int win32_start_timer(struct qemu_alarm_timer
*t
)
1638 struct qemu_alarm_win32
*data
= t
->priv
;
1641 data
->host_alarm
= CreateEvent(NULL
, FALSE
, FALSE
, NULL
);
1642 if (!data
->host_alarm
) {
1643 perror("Failed CreateEvent");
1647 memset(&tc
, 0, sizeof(tc
));
1648 timeGetDevCaps(&tc
, sizeof(tc
));
1650 if (data
->period
< tc
.wPeriodMin
)
1651 data
->period
= tc
.wPeriodMin
;
1653 timeBeginPeriod(data
->period
);
1655 flags
= TIME_CALLBACK_FUNCTION
;
1656 if (alarm_has_dynticks(t
))
1657 flags
|= TIME_ONESHOT
;
1659 flags
|= TIME_PERIODIC
;
1661 data
->timerId
= timeSetEvent(1, // interval (ms)
1662 data
->period
, // resolution
1663 host_alarm_handler
, // function
1664 (DWORD
)t
, // parameter
1667 if (!data
->timerId
) {
1668 perror("Failed to initialize win32 alarm timer");
1670 timeEndPeriod(data
->period
);
1671 CloseHandle(data
->host_alarm
);
1675 qemu_add_wait_object(data
->host_alarm
, NULL
, NULL
);
1680 static void win32_stop_timer(struct qemu_alarm_timer
*t
)
1682 struct qemu_alarm_win32
*data
= t
->priv
;
1684 timeKillEvent(data
->timerId
);
1685 timeEndPeriod(data
->period
);
1687 CloseHandle(data
->host_alarm
);
1690 static void win32_rearm_timer(struct qemu_alarm_timer
*t
)
1692 struct qemu_alarm_win32
*data
= t
->priv
;
1693 uint64_t nearest_delta_us
;
1695 if (!active_timers
[QEMU_TIMER_REALTIME
] &&
1696 !active_timers
[QEMU_TIMER_VIRTUAL
])
1699 nearest_delta_us
= qemu_next_deadline_dyntick();
1700 nearest_delta_us
/= 1000;
1702 timeKillEvent(data
->timerId
);
1704 data
->timerId
= timeSetEvent(1,
1708 TIME_ONESHOT
| TIME_PERIODIC
);
1710 if (!data
->timerId
) {
1711 perror("Failed to re-arm win32 alarm timer");
1713 timeEndPeriod(data
->period
);
1714 CloseHandle(data
->host_alarm
);
1721 static void init_timer_alarm(void)
1723 struct qemu_alarm_timer
*t
= NULL
;
1726 for (i
= 0; alarm_timers
[i
].name
; i
++) {
1727 t
= &alarm_timers
[i
];
1735 fprintf(stderr
, "Unable to find any suitable alarm timer.\n");
1736 fprintf(stderr
, "Terminating\n");
1743 static void quit_timers(void)
1745 alarm_timer
->stop(alarm_timer
);
1749 /***********************************************************/
1750 /* host time/date access */
1751 void qemu_get_timedate(struct tm
*tm
, int offset
)
1758 if (rtc_date_offset
== -1) {
1762 ret
= localtime(&ti
);
1764 ti
-= rtc_date_offset
;
1768 memcpy(tm
, ret
, sizeof(struct tm
));
1771 int qemu_timedate_diff(struct tm
*tm
)
1775 if (rtc_date_offset
== -1)
1777 seconds
= mktimegm(tm
);
1779 seconds
= mktime(tm
);
1781 seconds
= mktimegm(tm
) + rtc_date_offset
;
1783 return seconds
- time(NULL
);
1786 /***********************************************************/
1787 /* character device */
1789 static void qemu_chr_event(CharDriverState
*s
, int event
)
1793 s
->chr_event(s
->handler_opaque
, event
);
1796 static void qemu_chr_reset_bh(void *opaque
)
1798 CharDriverState
*s
= opaque
;
1799 qemu_chr_event(s
, CHR_EVENT_RESET
);
1800 qemu_bh_delete(s
->bh
);
1804 void qemu_chr_reset(CharDriverState
*s
)
1806 if (s
->bh
== NULL
) {
1807 s
->bh
= qemu_bh_new(qemu_chr_reset_bh
, s
);
1808 qemu_bh_schedule(s
->bh
);
1812 int qemu_chr_write(CharDriverState
*s
, const uint8_t *buf
, int len
)
1814 return s
->chr_write(s
, buf
, len
);
1817 int qemu_chr_ioctl(CharDriverState
*s
, int cmd
, void *arg
)
1821 return s
->chr_ioctl(s
, cmd
, arg
);
1824 int qemu_chr_can_read(CharDriverState
*s
)
1826 if (!s
->chr_can_read
)
1828 return s
->chr_can_read(s
->handler_opaque
);
1831 void qemu_chr_read(CharDriverState
*s
, uint8_t *buf
, int len
)
1833 s
->chr_read(s
->handler_opaque
, buf
, len
);
1836 void qemu_chr_accept_input(CharDriverState
*s
)
1838 if (s
->chr_accept_input
)
1839 s
->chr_accept_input(s
);
1842 void qemu_chr_printf(CharDriverState
*s
, const char *fmt
, ...)
1847 vsnprintf(buf
, sizeof(buf
), fmt
, ap
);
1848 qemu_chr_write(s
, (uint8_t *)buf
, strlen(buf
));
1852 void qemu_chr_send_event(CharDriverState
*s
, int event
)
1854 if (s
->chr_send_event
)
1855 s
->chr_send_event(s
, event
);
1858 void qemu_chr_add_handlers(CharDriverState
*s
,
1859 IOCanRWHandler
*fd_can_read
,
1860 IOReadHandler
*fd_read
,
1861 IOEventHandler
*fd_event
,
1864 s
->chr_can_read
= fd_can_read
;
1865 s
->chr_read
= fd_read
;
1866 s
->chr_event
= fd_event
;
1867 s
->handler_opaque
= opaque
;
1868 if (s
->chr_update_read_handler
)
1869 s
->chr_update_read_handler(s
);
1872 static int null_chr_write(CharDriverState
*chr
, const uint8_t *buf
, int len
)
1877 static CharDriverState
*qemu_chr_open_null(void)
1879 CharDriverState
*chr
;
1881 chr
= qemu_mallocz(sizeof(CharDriverState
));
1884 chr
->chr_write
= null_chr_write
;
1888 /* MUX driver for serial I/O splitting */
1889 static int term_timestamps
;
1890 static int64_t term_timestamps_start
;
1892 #define MUX_BUFFER_SIZE 32 /* Must be a power of 2. */
1893 #define MUX_BUFFER_MASK (MUX_BUFFER_SIZE - 1)
1895 IOCanRWHandler
*chr_can_read
[MAX_MUX
];
1896 IOReadHandler
*chr_read
[MAX_MUX
];
1897 IOEventHandler
*chr_event
[MAX_MUX
];
1898 void *ext_opaque
[MAX_MUX
];
1899 CharDriverState
*drv
;
1900 unsigned char buffer
[MUX_BUFFER_SIZE
];
1904 int term_got_escape
;
1909 static int mux_chr_write(CharDriverState
*chr
, const uint8_t *buf
, int len
)
1911 MuxDriver
*d
= chr
->opaque
;
1913 if (!term_timestamps
) {
1914 ret
= d
->drv
->chr_write(d
->drv
, buf
, len
);
1919 for(i
= 0; i
< len
; i
++) {
1920 ret
+= d
->drv
->chr_write(d
->drv
, buf
+i
, 1);
1921 if (buf
[i
] == '\n') {
1927 if (term_timestamps_start
== -1)
1928 term_timestamps_start
= ti
;
1929 ti
-= term_timestamps_start
;
1930 secs
= ti
/ 1000000000;
1931 snprintf(buf1
, sizeof(buf1
),
1932 "[%02d:%02d:%02d.%03d] ",
1936 (int)((ti
/ 1000000) % 1000));
1937 d
->drv
->chr_write(d
->drv
, (uint8_t *)buf1
, strlen(buf1
));
1944 static const char * const mux_help
[] = {
1945 "% h print this help\n\r",
1946 "% x exit emulator\n\r",
1947 "% s save disk data back to file (if -snapshot)\n\r",
1948 "% t toggle console timestamps\n\r"
1949 "% b send break (magic sysrq)\n\r",
1950 "% c switch between console and monitor\n\r",
1955 static int term_escape_char
= 0x01; /* ctrl-a is used for escape */
1956 static void mux_print_help(CharDriverState
*chr
)
1959 char ebuf
[15] = "Escape-Char";
1960 char cbuf
[50] = "\n\r";
1962 if (term_escape_char
> 0 && term_escape_char
< 26) {
1963 snprintf(cbuf
, sizeof(cbuf
), "\n\r");
1964 snprintf(ebuf
, sizeof(ebuf
), "C-%c", term_escape_char
- 1 + 'a');
1966 snprintf(cbuf
, sizeof(cbuf
),
1967 "\n\rEscape-Char set to Ascii: 0x%02x\n\r\n\r",
1970 chr
->chr_write(chr
, (uint8_t *)cbuf
, strlen(cbuf
));
1971 for (i
= 0; mux_help
[i
] != NULL
; i
++) {
1972 for (j
=0; mux_help
[i
][j
] != '\0'; j
++) {
1973 if (mux_help
[i
][j
] == '%')
1974 chr
->chr_write(chr
, (uint8_t *)ebuf
, strlen(ebuf
));
1976 chr
->chr_write(chr
, (uint8_t *)&mux_help
[i
][j
], 1);
1981 static int mux_proc_byte(CharDriverState
*chr
, MuxDriver
*d
, int ch
)
1983 if (d
->term_got_escape
) {
1984 d
->term_got_escape
= 0;
1985 if (ch
== term_escape_char
)
1990 mux_print_help(chr
);
1994 const char *term
= "QEMU: Terminated\n\r";
1995 chr
->chr_write(chr
,(uint8_t *)term
,strlen(term
));
2002 for (i
= 0; i
< nb_drives
; i
++) {
2003 bdrv_commit(drives_table
[i
].bdrv
);
2008 qemu_chr_event(chr
, CHR_EVENT_BREAK
);
2011 /* Switch to the next registered device */
2013 if (chr
->focus
>= d
->mux_cnt
)
2017 term_timestamps
= !term_timestamps
;
2018 term_timestamps_start
= -1;
2021 } else if (ch
== term_escape_char
) {
2022 d
->term_got_escape
= 1;
2030 static void mux_chr_accept_input(CharDriverState
*chr
)
2033 MuxDriver
*d
= chr
->opaque
;
2035 while (d
->prod
!= d
->cons
&&
2036 d
->chr_can_read
[m
] &&
2037 d
->chr_can_read
[m
](d
->ext_opaque
[m
])) {
2038 d
->chr_read
[m
](d
->ext_opaque
[m
],
2039 &d
->buffer
[d
->cons
++ & MUX_BUFFER_MASK
], 1);
2043 static int mux_chr_can_read(void *opaque
)
2045 CharDriverState
*chr
= opaque
;
2046 MuxDriver
*d
= chr
->opaque
;
2048 if ((d
->prod
- d
->cons
) < MUX_BUFFER_SIZE
)
2050 if (d
->chr_can_read
[chr
->focus
])
2051 return d
->chr_can_read
[chr
->focus
](d
->ext_opaque
[chr
->focus
]);
2055 static void mux_chr_read(void *opaque
, const uint8_t *buf
, int size
)
2057 CharDriverState
*chr
= opaque
;
2058 MuxDriver
*d
= chr
->opaque
;
2062 mux_chr_accept_input (opaque
);
2064 for(i
= 0; i
< size
; i
++)
2065 if (mux_proc_byte(chr
, d
, buf
[i
])) {
2066 if (d
->prod
== d
->cons
&&
2067 d
->chr_can_read
[m
] &&
2068 d
->chr_can_read
[m
](d
->ext_opaque
[m
]))
2069 d
->chr_read
[m
](d
->ext_opaque
[m
], &buf
[i
], 1);
2071 d
->buffer
[d
->prod
++ & MUX_BUFFER_MASK
] = buf
[i
];
2075 static void mux_chr_event(void *opaque
, int event
)
2077 CharDriverState
*chr
= opaque
;
2078 MuxDriver
*d
= chr
->opaque
;
2081 /* Send the event to all registered listeners */
2082 for (i
= 0; i
< d
->mux_cnt
; i
++)
2083 if (d
->chr_event
[i
])
2084 d
->chr_event
[i
](d
->ext_opaque
[i
], event
);
2087 static void mux_chr_update_read_handler(CharDriverState
*chr
)
2089 MuxDriver
*d
= chr
->opaque
;
2091 if (d
->mux_cnt
>= MAX_MUX
) {
2092 fprintf(stderr
, "Cannot add I/O handlers, MUX array is full\n");
2095 d
->ext_opaque
[d
->mux_cnt
] = chr
->handler_opaque
;
2096 d
->chr_can_read
[d
->mux_cnt
] = chr
->chr_can_read
;
2097 d
->chr_read
[d
->mux_cnt
] = chr
->chr_read
;
2098 d
->chr_event
[d
->mux_cnt
] = chr
->chr_event
;
2099 /* Fix up the real driver with mux routines */
2100 if (d
->mux_cnt
== 0) {
2101 qemu_chr_add_handlers(d
->drv
, mux_chr_can_read
, mux_chr_read
,
2102 mux_chr_event
, chr
);
2104 chr
->focus
= d
->mux_cnt
;
2108 static CharDriverState
*qemu_chr_open_mux(CharDriverState
*drv
)
2110 CharDriverState
*chr
;
2113 chr
= qemu_mallocz(sizeof(CharDriverState
));
2116 d
= qemu_mallocz(sizeof(MuxDriver
));
2125 chr
->chr_write
= mux_chr_write
;
2126 chr
->chr_update_read_handler
= mux_chr_update_read_handler
;
2127 chr
->chr_accept_input
= mux_chr_accept_input
;
2134 static void socket_cleanup(void)
2139 static int socket_init(void)
2144 ret
= WSAStartup(MAKEWORD(2,2), &Data
);
2146 err
= WSAGetLastError();
2147 fprintf(stderr
, "WSAStartup: %d\n", err
);
2150 atexit(socket_cleanup
);
2154 static int send_all(int fd
, const uint8_t *buf
, int len1
)
2160 ret
= send(fd
, buf
, len
, 0);
2163 errno
= WSAGetLastError();
2164 if (errno
!= WSAEWOULDBLOCK
) {
2167 } else if (ret
== 0) {
2179 static int unix_write(int fd
, const uint8_t *buf
, int len1
)
2185 ret
= write(fd
, buf
, len
);
2187 if (errno
!= EINTR
&& errno
!= EAGAIN
)
2189 } else if (ret
== 0) {
2199 static inline int send_all(int fd
, const uint8_t *buf
, int len1
)
2201 return unix_write(fd
, buf
, len1
);
2203 #endif /* !_WIN32 */
2212 #define STDIO_MAX_CLIENTS 1
2213 static int stdio_nb_clients
= 0;
2215 static int fd_chr_write(CharDriverState
*chr
, const uint8_t *buf
, int len
)
2217 FDCharDriver
*s
= chr
->opaque
;
2218 return unix_write(s
->fd_out
, buf
, len
);
2221 static int fd_chr_read_poll(void *opaque
)
2223 CharDriverState
*chr
= opaque
;
2224 FDCharDriver
*s
= chr
->opaque
;
2226 s
->max_size
= qemu_chr_can_read(chr
);
2230 static void fd_chr_read(void *opaque
)
2232 CharDriverState
*chr
= opaque
;
2233 FDCharDriver
*s
= chr
->opaque
;
2238 if (len
> s
->max_size
)
2242 size
= read(s
->fd_in
, buf
, len
);
2244 /* FD has been closed. Remove it from the active list. */
2245 qemu_set_fd_handler2(s
->fd_in
, NULL
, NULL
, NULL
, NULL
);
2249 qemu_chr_read(chr
, buf
, size
);
2253 static void fd_chr_update_read_handler(CharDriverState
*chr
)
2255 FDCharDriver
*s
= chr
->opaque
;
2257 if (s
->fd_in
>= 0) {
2258 if (nographic
&& s
->fd_in
== 0) {
2260 qemu_set_fd_handler2(s
->fd_in
, fd_chr_read_poll
,
2261 fd_chr_read
, NULL
, chr
);
2266 static void fd_chr_close(struct CharDriverState
*chr
)
2268 FDCharDriver
*s
= chr
->opaque
;
2270 if (s
->fd_in
>= 0) {
2271 if (nographic
&& s
->fd_in
== 0) {
2273 qemu_set_fd_handler2(s
->fd_in
, NULL
, NULL
, NULL
, NULL
);
2280 /* open a character device to a unix fd */
2281 static CharDriverState
*qemu_chr_open_fd(int fd_in
, int fd_out
)
2283 CharDriverState
*chr
;
2286 chr
= qemu_mallocz(sizeof(CharDriverState
));
2289 s
= qemu_mallocz(sizeof(FDCharDriver
));
2297 chr
->chr_write
= fd_chr_write
;
2298 chr
->chr_update_read_handler
= fd_chr_update_read_handler
;
2299 chr
->chr_close
= fd_chr_close
;
2301 qemu_chr_reset(chr
);
2306 static CharDriverState
*qemu_chr_open_file_out(const char *file_out
)
2310 TFR(fd_out
= open(file_out
, O_WRONLY
| O_TRUNC
| O_CREAT
| O_BINARY
, 0666));
2313 return qemu_chr_open_fd(-1, fd_out
);
2316 static CharDriverState
*qemu_chr_open_pipe(const char *filename
)
2319 char filename_in
[256], filename_out
[256];
2321 snprintf(filename_in
, 256, "%s.in", filename
);
2322 snprintf(filename_out
, 256, "%s.out", filename
);
2323 TFR(fd_in
= open(filename_in
, O_RDWR
| O_BINARY
));
2324 TFR(fd_out
= open(filename_out
, O_RDWR
| O_BINARY
));
2325 if (fd_in
< 0 || fd_out
< 0) {
2330 TFR(fd_in
= fd_out
= open(filename
, O_RDWR
| O_BINARY
));
2334 return qemu_chr_open_fd(fd_in
, fd_out
);
2338 /* for STDIO, we handle the case where several clients use it
2341 #define TERM_FIFO_MAX_SIZE 1
2343 static uint8_t term_fifo
[TERM_FIFO_MAX_SIZE
];
2344 static int term_fifo_size
;
2346 static int stdio_read_poll(void *opaque
)
2348 CharDriverState
*chr
= opaque
;
2350 /* try to flush the queue if needed */
2351 if (term_fifo_size
!= 0 && qemu_chr_can_read(chr
) > 0) {
2352 qemu_chr_read(chr
, term_fifo
, 1);
2355 /* see if we can absorb more chars */
2356 if (term_fifo_size
== 0)
2362 static void stdio_read(void *opaque
)
2366 CharDriverState
*chr
= opaque
;
2368 size
= read(0, buf
, 1);
2370 /* stdin has been closed. Remove it from the active list. */
2371 qemu_set_fd_handler2(0, NULL
, NULL
, NULL
, NULL
);
2375 if (qemu_chr_can_read(chr
) > 0) {
2376 qemu_chr_read(chr
, buf
, 1);
2377 } else if (term_fifo_size
== 0) {
2378 term_fifo
[term_fifo_size
++] = buf
[0];
2383 /* init terminal so that we can grab keys */
2384 static struct termios oldtty
;
2385 static int old_fd0_flags
;
2386 static int term_atexit_done
;
2388 static void term_exit(void)
2390 tcsetattr (0, TCSANOW
, &oldtty
);
2391 fcntl(0, F_SETFL
, old_fd0_flags
);
2394 static void term_init(void)
2398 tcgetattr (0, &tty
);
2400 old_fd0_flags
= fcntl(0, F_GETFL
);
2402 tty
.c_iflag
&= ~(IGNBRK
|BRKINT
|PARMRK
|ISTRIP
2403 |INLCR
|IGNCR
|ICRNL
|IXON
);
2404 tty
.c_oflag
|= OPOST
;
2405 tty
.c_lflag
&= ~(ECHO
|ECHONL
|ICANON
|IEXTEN
);
2406 /* if graphical mode, we allow Ctrl-C handling */
2408 tty
.c_lflag
&= ~ISIG
;
2409 tty
.c_cflag
&= ~(CSIZE
|PARENB
);
2412 tty
.c_cc
[VTIME
] = 0;
2414 tcsetattr (0, TCSANOW
, &tty
);
2416 if (!term_atexit_done
++)
2419 fcntl(0, F_SETFL
, O_NONBLOCK
);
2422 static void qemu_chr_close_stdio(struct CharDriverState
*chr
)
2426 qemu_set_fd_handler2(0, NULL
, NULL
, NULL
, NULL
);
2430 static CharDriverState
*qemu_chr_open_stdio(void)
2432 CharDriverState
*chr
;
2434 if (stdio_nb_clients
>= STDIO_MAX_CLIENTS
)
2436 chr
= qemu_chr_open_fd(0, 1);
2437 chr
->chr_close
= qemu_chr_close_stdio
;
2438 qemu_set_fd_handler2(0, stdio_read_poll
, stdio_read
, NULL
, chr
);
2446 /* Once Solaris has openpty(), this is going to be removed. */
2447 int openpty(int *amaster
, int *aslave
, char *name
,
2448 struct termios
*termp
, struct winsize
*winp
)
2451 int mfd
= -1, sfd
= -1;
2453 *amaster
= *aslave
= -1;
2455 mfd
= open("/dev/ptmx", O_RDWR
| O_NOCTTY
);
2459 if (grantpt(mfd
) == -1 || unlockpt(mfd
) == -1)
2462 if ((slave
= ptsname(mfd
)) == NULL
)
2465 if ((sfd
= open(slave
, O_RDONLY
| O_NOCTTY
)) == -1)
2468 if (ioctl(sfd
, I_PUSH
, "ptem") == -1 ||
2469 (termp
!= NULL
&& tcgetattr(sfd
, termp
) < 0))
2477 ioctl(sfd
, TIOCSWINSZ
, winp
);
2488 void cfmakeraw (struct termios
*termios_p
)
2490 termios_p
->c_iflag
&=
2491 ~(IGNBRK
|BRKINT
|PARMRK
|ISTRIP
|INLCR
|IGNCR
|ICRNL
|IXON
);
2492 termios_p
->c_oflag
&= ~OPOST
;
2493 termios_p
->c_lflag
&= ~(ECHO
|ECHONL
|ICANON
|ISIG
|IEXTEN
);
2494 termios_p
->c_cflag
&= ~(CSIZE
|PARENB
);
2495 termios_p
->c_cflag
|= CS8
;
2497 termios_p
->c_cc
[VMIN
] = 0;
2498 termios_p
->c_cc
[VTIME
] = 0;
2502 #if defined(__linux__) || defined(__sun__) || defined(__FreeBSD__) \
2503 || defined(__NetBSD__) || defined(__OpenBSD__)
2513 static void pty_chr_update_read_handler(CharDriverState
*chr
);
2514 static void pty_chr_state(CharDriverState
*chr
, int connected
);
2516 static int pty_chr_write(CharDriverState
*chr
, const uint8_t *buf
, int len
)
2518 PtyCharDriver
*s
= chr
->opaque
;
2520 if (!s
->connected
) {
2521 /* guest sends data, check for (re-)connect */
2522 pty_chr_update_read_handler(chr
);
2525 return unix_write(s
->fd
, buf
, len
);
2528 static int pty_chr_read_poll(void *opaque
)
2530 CharDriverState
*chr
= opaque
;
2531 PtyCharDriver
*s
= chr
->opaque
;
2533 s
->read_bytes
= qemu_chr_can_read(chr
);
2534 return s
->read_bytes
;
2537 static void pty_chr_read(void *opaque
)
2539 CharDriverState
*chr
= opaque
;
2540 PtyCharDriver
*s
= chr
->opaque
;
2545 if (len
> s
->read_bytes
)
2546 len
= s
->read_bytes
;
2549 size
= read(s
->fd
, buf
, len
);
2550 if ((size
== -1 && errno
== EIO
) ||
2552 pty_chr_state(chr
, 0);
2556 pty_chr_state(chr
, 1);
2557 qemu_chr_read(chr
, buf
, size
);
2561 static void pty_chr_update_read_handler(CharDriverState
*chr
)
2563 PtyCharDriver
*s
= chr
->opaque
;
2565 qemu_set_fd_handler2(s
->fd
, pty_chr_read_poll
,
2566 pty_chr_read
, NULL
, chr
);
2569 * Short timeout here: just need wait long enougth that qemu makes
2570 * it through the poll loop once. When reconnected we want a
2571 * short timeout so we notice it almost instantly. Otherwise
2572 * read() gives us -EIO instantly, making pty_chr_state() reset the
2573 * timeout to the normal (much longer) poll interval before the
2576 qemu_mod_timer(s
->timer
, qemu_get_clock(rt_clock
) + 10);
2579 static void pty_chr_state(CharDriverState
*chr
, int connected
)
2581 PtyCharDriver
*s
= chr
->opaque
;
2584 qemu_set_fd_handler2(s
->fd
, NULL
, NULL
, NULL
, NULL
);
2587 /* (re-)connect poll interval for idle guests: once per second.
2588 * We check more frequently in case the guests sends data to
2589 * the virtual device linked to our pty. */
2590 qemu_mod_timer(s
->timer
, qemu_get_clock(rt_clock
) + 1000);
2593 qemu_chr_reset(chr
);
2598 static void pty_chr_timer(void *opaque
)
2600 struct CharDriverState
*chr
= opaque
;
2601 PtyCharDriver
*s
= chr
->opaque
;
2606 /* If we arrive here without polling being cleared due
2607 * read returning -EIO, then we are (re-)connected */
2608 pty_chr_state(chr
, 1);
2613 pty_chr_update_read_handler(chr
);
2616 static void pty_chr_close(struct CharDriverState
*chr
)
2618 PtyCharDriver
*s
= chr
->opaque
;
2620 qemu_set_fd_handler2(s
->fd
, NULL
, NULL
, NULL
, NULL
);
2625 static CharDriverState
*qemu_chr_open_pty(void)
2627 CharDriverState
*chr
;
2631 #if defined(__OpenBSD__)
2632 char pty_name
[PATH_MAX
];
2633 #define q_ptsname(x) pty_name
2635 char *pty_name
= NULL
;
2636 #define q_ptsname(x) ptsname(x)
2639 chr
= qemu_mallocz(sizeof(CharDriverState
));
2642 s
= qemu_mallocz(sizeof(PtyCharDriver
));
2648 if (openpty(&s
->fd
, &slave_fd
, pty_name
, NULL
, NULL
) < 0) {
2652 /* Set raw attributes on the pty. */
2654 tcsetattr(slave_fd
, TCSAFLUSH
, &tty
);
2657 fprintf(stderr
, "char device redirected to %s\n", q_ptsname(s
->fd
));
2660 chr
->chr_write
= pty_chr_write
;
2661 chr
->chr_update_read_handler
= pty_chr_update_read_handler
;
2662 chr
->chr_close
= pty_chr_close
;
2664 s
->timer
= qemu_new_timer(rt_clock
, pty_chr_timer
, chr
);
2669 static void tty_serial_init(int fd
, int speed
,
2670 int parity
, int data_bits
, int stop_bits
)
2676 printf("tty_serial_init: speed=%d parity=%c data=%d stop=%d\n",
2677 speed
, parity
, data_bits
, stop_bits
);
2679 tcgetattr (fd
, &tty
);
2682 if (speed
<= 50 * MARGIN
)
2684 else if (speed
<= 75 * MARGIN
)
2686 else if (speed
<= 300 * MARGIN
)
2688 else if (speed
<= 600 * MARGIN
)
2690 else if (speed
<= 1200 * MARGIN
)
2692 else if (speed
<= 2400 * MARGIN
)
2694 else if (speed
<= 4800 * MARGIN
)
2696 else if (speed
<= 9600 * MARGIN
)
2698 else if (speed
<= 19200 * MARGIN
)
2700 else if (speed
<= 38400 * MARGIN
)
2702 else if (speed
<= 57600 * MARGIN
)
2704 else if (speed
<= 115200 * MARGIN
)
2709 cfsetispeed(&tty
, spd
);
2710 cfsetospeed(&tty
, spd
);
2712 tty
.c_iflag
&= ~(IGNBRK
|BRKINT
|PARMRK
|ISTRIP
2713 |INLCR
|IGNCR
|ICRNL
|IXON
);
2714 tty
.c_oflag
|= OPOST
;
2715 tty
.c_lflag
&= ~(ECHO
|ECHONL
|ICANON
|IEXTEN
|ISIG
);
2716 tty
.c_cflag
&= ~(CSIZE
|PARENB
|PARODD
|CRTSCTS
|CSTOPB
);
2737 tty
.c_cflag
|= PARENB
;
2740 tty
.c_cflag
|= PARENB
| PARODD
;
2744 tty
.c_cflag
|= CSTOPB
;
2746 tcsetattr (fd
, TCSANOW
, &tty
);
2749 static int tty_serial_ioctl(CharDriverState
*chr
, int cmd
, void *arg
)
2751 FDCharDriver
*s
= chr
->opaque
;
2754 case CHR_IOCTL_SERIAL_SET_PARAMS
:
2756 QEMUSerialSetParams
*ssp
= arg
;
2757 tty_serial_init(s
->fd_in
, ssp
->speed
, ssp
->parity
,
2758 ssp
->data_bits
, ssp
->stop_bits
);
2761 case CHR_IOCTL_SERIAL_SET_BREAK
:
2763 int enable
= *(int *)arg
;
2765 tcsendbreak(s
->fd_in
, 1);
2768 case CHR_IOCTL_SERIAL_GET_TIOCM
:
2771 int *targ
= (int *)arg
;
2772 ioctl(s
->fd_in
, TIOCMGET
, &sarg
);
2774 if (sarg
| TIOCM_CTS
)
2775 *targ
|= CHR_TIOCM_CTS
;
2776 if (sarg
| TIOCM_CAR
)
2777 *targ
|= CHR_TIOCM_CAR
;
2778 if (sarg
| TIOCM_DSR
)
2779 *targ
|= CHR_TIOCM_DSR
;
2780 if (sarg
| TIOCM_RI
)
2781 *targ
|= CHR_TIOCM_RI
;
2782 if (sarg
| TIOCM_DTR
)
2783 *targ
|= CHR_TIOCM_DTR
;
2784 if (sarg
| TIOCM_RTS
)
2785 *targ
|= CHR_TIOCM_RTS
;
2788 case CHR_IOCTL_SERIAL_SET_TIOCM
:
2790 int sarg
= *(int *)arg
;
2792 if (sarg
| CHR_TIOCM_DTR
)
2794 if (sarg
| CHR_TIOCM_RTS
)
2796 ioctl(s
->fd_in
, TIOCMSET
, &targ
);
2805 static CharDriverState
*qemu_chr_open_tty(const char *filename
)
2807 CharDriverState
*chr
;
2810 TFR(fd
= open(filename
, O_RDWR
| O_NONBLOCK
));
2811 tty_serial_init(fd
, 115200, 'N', 8, 1);
2812 chr
= qemu_chr_open_fd(fd
, fd
);
2817 chr
->chr_ioctl
= tty_serial_ioctl
;
2818 qemu_chr_reset(chr
);
2821 #else /* ! __linux__ && ! __sun__ */
2822 static CharDriverState
*qemu_chr_open_pty(void)
2826 #endif /* __linux__ || __sun__ */
2828 #if defined(__linux__)
2832 } ParallelCharDriver
;
2834 static int pp_hw_mode(ParallelCharDriver
*s
, uint16_t mode
)
2836 if (s
->mode
!= mode
) {
2838 if (ioctl(s
->fd
, PPSETMODE
, &m
) < 0)
2845 static int pp_ioctl(CharDriverState
*chr
, int cmd
, void *arg
)
2847 ParallelCharDriver
*drv
= chr
->opaque
;
2852 case CHR_IOCTL_PP_READ_DATA
:
2853 if (ioctl(fd
, PPRDATA
, &b
) < 0)
2855 *(uint8_t *)arg
= b
;
2857 case CHR_IOCTL_PP_WRITE_DATA
:
2858 b
= *(uint8_t *)arg
;
2859 if (ioctl(fd
, PPWDATA
, &b
) < 0)
2862 case CHR_IOCTL_PP_READ_CONTROL
:
2863 if (ioctl(fd
, PPRCONTROL
, &b
) < 0)
2865 /* Linux gives only the lowest bits, and no way to know data
2866 direction! For better compatibility set the fixed upper
2868 *(uint8_t *)arg
= b
| 0xc0;
2870 case CHR_IOCTL_PP_WRITE_CONTROL
:
2871 b
= *(uint8_t *)arg
;
2872 if (ioctl(fd
, PPWCONTROL
, &b
) < 0)
2875 case CHR_IOCTL_PP_READ_STATUS
:
2876 if (ioctl(fd
, PPRSTATUS
, &b
) < 0)
2878 *(uint8_t *)arg
= b
;
2880 case CHR_IOCTL_PP_DATA_DIR
:
2881 if (ioctl(fd
, PPDATADIR
, (int *)arg
) < 0)
2884 case CHR_IOCTL_PP_EPP_READ_ADDR
:
2885 if (pp_hw_mode(drv
, IEEE1284_MODE_EPP
|IEEE1284_ADDR
)) {
2886 struct ParallelIOArg
*parg
= arg
;
2887 int n
= read(fd
, parg
->buffer
, parg
->count
);
2888 if (n
!= parg
->count
) {
2893 case CHR_IOCTL_PP_EPP_READ
:
2894 if (pp_hw_mode(drv
, IEEE1284_MODE_EPP
)) {
2895 struct ParallelIOArg
*parg
= arg
;
2896 int n
= read(fd
, parg
->buffer
, parg
->count
);
2897 if (n
!= parg
->count
) {
2902 case CHR_IOCTL_PP_EPP_WRITE_ADDR
:
2903 if (pp_hw_mode(drv
, IEEE1284_MODE_EPP
|IEEE1284_ADDR
)) {
2904 struct ParallelIOArg
*parg
= arg
;
2905 int n
= write(fd
, parg
->buffer
, parg
->count
);
2906 if (n
!= parg
->count
) {
2911 case CHR_IOCTL_PP_EPP_WRITE
:
2912 if (pp_hw_mode(drv
, IEEE1284_MODE_EPP
)) {
2913 struct ParallelIOArg
*parg
= arg
;
2914 int n
= write(fd
, parg
->buffer
, parg
->count
);
2915 if (n
!= parg
->count
) {
2926 static void pp_close(CharDriverState
*chr
)
2928 ParallelCharDriver
*drv
= chr
->opaque
;
2931 pp_hw_mode(drv
, IEEE1284_MODE_COMPAT
);
2932 ioctl(fd
, PPRELEASE
);
2937 static CharDriverState
*qemu_chr_open_pp(const char *filename
)
2939 CharDriverState
*chr
;
2940 ParallelCharDriver
*drv
;
2943 TFR(fd
= open(filename
, O_RDWR
));
2947 if (ioctl(fd
, PPCLAIM
) < 0) {
2952 drv
= qemu_mallocz(sizeof(ParallelCharDriver
));
2958 drv
->mode
= IEEE1284_MODE_COMPAT
;
2960 chr
= qemu_mallocz(sizeof(CharDriverState
));
2966 chr
->chr_write
= null_chr_write
;
2967 chr
->chr_ioctl
= pp_ioctl
;
2968 chr
->chr_close
= pp_close
;
2971 qemu_chr_reset(chr
);
2975 #endif /* __linux__ */
2981 HANDLE hcom
, hrecv
, hsend
;
2982 OVERLAPPED orecv
, osend
;
2987 #define NSENDBUF 2048
2988 #define NRECVBUF 2048
2989 #define MAXCONNECT 1
2990 #define NTIMEOUT 5000
2992 static int win_chr_poll(void *opaque
);
2993 static int win_chr_pipe_poll(void *opaque
);
2995 static void win_chr_close(CharDriverState
*chr
)
2997 WinCharState
*s
= chr
->opaque
;
3000 CloseHandle(s
->hsend
);
3004 CloseHandle(s
->hrecv
);
3008 CloseHandle(s
->hcom
);
3012 qemu_del_polling_cb(win_chr_pipe_poll
, chr
);
3014 qemu_del_polling_cb(win_chr_poll
, chr
);
3017 static int win_chr_init(CharDriverState
*chr
, const char *filename
)
3019 WinCharState
*s
= chr
->opaque
;
3021 COMMTIMEOUTS cto
= { 0, 0, 0, 0, 0};
3026 s
->hsend
= CreateEvent(NULL
, TRUE
, FALSE
, NULL
);
3028 fprintf(stderr
, "Failed CreateEvent\n");
3031 s
->hrecv
= CreateEvent(NULL
, TRUE
, FALSE
, NULL
);
3033 fprintf(stderr
, "Failed CreateEvent\n");
3037 s
->hcom
= CreateFile(filename
, GENERIC_READ
|GENERIC_WRITE
, 0, NULL
,
3038 OPEN_EXISTING
, FILE_FLAG_OVERLAPPED
, 0);
3039 if (s
->hcom
== INVALID_HANDLE_VALUE
) {
3040 fprintf(stderr
, "Failed CreateFile (%lu)\n", GetLastError());
3045 if (!SetupComm(s
->hcom
, NRECVBUF
, NSENDBUF
)) {
3046 fprintf(stderr
, "Failed SetupComm\n");
3050 ZeroMemory(&comcfg
, sizeof(COMMCONFIG
));
3051 size
= sizeof(COMMCONFIG
);
3052 GetDefaultCommConfig(filename
, &comcfg
, &size
);
3053 comcfg
.dcb
.DCBlength
= sizeof(DCB
);
3054 CommConfigDialog(filename
, NULL
, &comcfg
);
3056 if (!SetCommState(s
->hcom
, &comcfg
.dcb
)) {
3057 fprintf(stderr
, "Failed SetCommState\n");
3061 if (!SetCommMask(s
->hcom
, EV_ERR
)) {
3062 fprintf(stderr
, "Failed SetCommMask\n");
3066 cto
.ReadIntervalTimeout
= MAXDWORD
;
3067 if (!SetCommTimeouts(s
->hcom
, &cto
)) {
3068 fprintf(stderr
, "Failed SetCommTimeouts\n");
3072 if (!ClearCommError(s
->hcom
, &err
, &comstat
)) {
3073 fprintf(stderr
, "Failed ClearCommError\n");
3076 qemu_add_polling_cb(win_chr_poll
, chr
);
3084 static int win_chr_write(CharDriverState
*chr
, const uint8_t *buf
, int len1
)
3086 WinCharState
*s
= chr
->opaque
;
3087 DWORD len
, ret
, size
, err
;
3090 ZeroMemory(&s
->osend
, sizeof(s
->osend
));
3091 s
->osend
.hEvent
= s
->hsend
;
3094 ret
= WriteFile(s
->hcom
, buf
, len
, &size
, &s
->osend
);
3096 ret
= WriteFile(s
->hcom
, buf
, len
, &size
, NULL
);
3098 err
= GetLastError();
3099 if (err
== ERROR_IO_PENDING
) {
3100 ret
= GetOverlappedResult(s
->hcom
, &s
->osend
, &size
, TRUE
);
3118 static int win_chr_read_poll(CharDriverState
*chr
)
3120 WinCharState
*s
= chr
->opaque
;
3122 s
->max_size
= qemu_chr_can_read(chr
);
3126 static void win_chr_readfile(CharDriverState
*chr
)
3128 WinCharState
*s
= chr
->opaque
;
3133 ZeroMemory(&s
->orecv
, sizeof(s
->orecv
));
3134 s
->orecv
.hEvent
= s
->hrecv
;
3135 ret
= ReadFile(s
->hcom
, buf
, s
->len
, &size
, &s
->orecv
);
3137 err
= GetLastError();
3138 if (err
== ERROR_IO_PENDING
) {
3139 ret
= GetOverlappedResult(s
->hcom
, &s
->orecv
, &size
, TRUE
);
3144 qemu_chr_read(chr
, buf
, size
);
3148 static void win_chr_read(CharDriverState
*chr
)
3150 WinCharState
*s
= chr
->opaque
;
3152 if (s
->len
> s
->max_size
)
3153 s
->len
= s
->max_size
;
3157 win_chr_readfile(chr
);
3160 static int win_chr_poll(void *opaque
)
3162 CharDriverState
*chr
= opaque
;
3163 WinCharState
*s
= chr
->opaque
;
3167 ClearCommError(s
->hcom
, &comerr
, &status
);
3168 if (status
.cbInQue
> 0) {
3169 s
->len
= status
.cbInQue
;
3170 win_chr_read_poll(chr
);
3177 static CharDriverState
*qemu_chr_open_win(const char *filename
)
3179 CharDriverState
*chr
;
3182 chr
= qemu_mallocz(sizeof(CharDriverState
));
3185 s
= qemu_mallocz(sizeof(WinCharState
));
3191 chr
->chr_write
= win_chr_write
;
3192 chr
->chr_close
= win_chr_close
;
3194 if (win_chr_init(chr
, filename
) < 0) {
3199 qemu_chr_reset(chr
);
3203 static int win_chr_pipe_poll(void *opaque
)
3205 CharDriverState
*chr
= opaque
;
3206 WinCharState
*s
= chr
->opaque
;
3209 PeekNamedPipe(s
->hcom
, NULL
, 0, NULL
, &size
, NULL
);
3212 win_chr_read_poll(chr
);
3219 static int win_chr_pipe_init(CharDriverState
*chr
, const char *filename
)
3221 WinCharState
*s
= chr
->opaque
;
3229 s
->hsend
= CreateEvent(NULL
, TRUE
, FALSE
, NULL
);
3231 fprintf(stderr
, "Failed CreateEvent\n");
3234 s
->hrecv
= CreateEvent(NULL
, TRUE
, FALSE
, NULL
);
3236 fprintf(stderr
, "Failed CreateEvent\n");
3240 snprintf(openname
, sizeof(openname
), "\\\\.\\pipe\\%s", filename
);
3241 s
->hcom
= CreateNamedPipe(openname
, PIPE_ACCESS_DUPLEX
| FILE_FLAG_OVERLAPPED
,
3242 PIPE_TYPE_BYTE
| PIPE_READMODE_BYTE
|
3244 MAXCONNECT
, NSENDBUF
, NRECVBUF
, NTIMEOUT
, NULL
);
3245 if (s
->hcom
== INVALID_HANDLE_VALUE
) {
3246 fprintf(stderr
, "Failed CreateNamedPipe (%lu)\n", GetLastError());
3251 ZeroMemory(&ov
, sizeof(ov
));
3252 ov
.hEvent
= CreateEvent(NULL
, TRUE
, FALSE
, NULL
);
3253 ret
= ConnectNamedPipe(s
->hcom
, &ov
);
3255 fprintf(stderr
, "Failed ConnectNamedPipe\n");
3259 ret
= GetOverlappedResult(s
->hcom
, &ov
, &size
, TRUE
);
3261 fprintf(stderr
, "Failed GetOverlappedResult\n");
3263 CloseHandle(ov
.hEvent
);
3270 CloseHandle(ov
.hEvent
);
3273 qemu_add_polling_cb(win_chr_pipe_poll
, chr
);
3282 static CharDriverState
*qemu_chr_open_win_pipe(const char *filename
)
3284 CharDriverState
*chr
;
3287 chr
= qemu_mallocz(sizeof(CharDriverState
));
3290 s
= qemu_mallocz(sizeof(WinCharState
));
3296 chr
->chr_write
= win_chr_write
;
3297 chr
->chr_close
= win_chr_close
;
3299 if (win_chr_pipe_init(chr
, filename
) < 0) {
3304 qemu_chr_reset(chr
);
3308 static CharDriverState
*qemu_chr_open_win_file(HANDLE fd_out
)
3310 CharDriverState
*chr
;
3313 chr
= qemu_mallocz(sizeof(CharDriverState
));
3316 s
= qemu_mallocz(sizeof(WinCharState
));
3323 chr
->chr_write
= win_chr_write
;
3324 qemu_chr_reset(chr
);
3328 static CharDriverState
*qemu_chr_open_win_con(const char *filename
)
3330 return qemu_chr_open_win_file(GetStdHandle(STD_OUTPUT_HANDLE
));
3333 static CharDriverState
*qemu_chr_open_win_file_out(const char *file_out
)
3337 fd_out
= CreateFile(file_out
, GENERIC_WRITE
, FILE_SHARE_READ
, NULL
,
3338 OPEN_ALWAYS
, FILE_ATTRIBUTE_NORMAL
, NULL
);
3339 if (fd_out
== INVALID_HANDLE_VALUE
)
3342 return qemu_chr_open_win_file(fd_out
);
3344 #endif /* !_WIN32 */
3346 /***********************************************************/
3347 /* UDP Net console */
3351 struct sockaddr_in daddr
;
3358 static int udp_chr_write(CharDriverState
*chr
, const uint8_t *buf
, int len
)
3360 NetCharDriver
*s
= chr
->opaque
;
3362 return sendto(s
->fd
, buf
, len
, 0,
3363 (struct sockaddr
*)&s
->daddr
, sizeof(struct sockaddr_in
));
3366 static int udp_chr_read_poll(void *opaque
)
3368 CharDriverState
*chr
= opaque
;
3369 NetCharDriver
*s
= chr
->opaque
;
3371 s
->max_size
= qemu_chr_can_read(chr
);
3373 /* If there were any stray characters in the queue process them
3376 while (s
->max_size
> 0 && s
->bufptr
< s
->bufcnt
) {
3377 qemu_chr_read(chr
, &s
->buf
[s
->bufptr
], 1);
3379 s
->max_size
= qemu_chr_can_read(chr
);
3384 static void udp_chr_read(void *opaque
)
3386 CharDriverState
*chr
= opaque
;
3387 NetCharDriver
*s
= chr
->opaque
;
3389 if (s
->max_size
== 0)
3391 s
->bufcnt
= recv(s
->fd
, s
->buf
, sizeof(s
->buf
), 0);
3392 s
->bufptr
= s
->bufcnt
;
3397 while (s
->max_size
> 0 && s
->bufptr
< s
->bufcnt
) {
3398 qemu_chr_read(chr
, &s
->buf
[s
->bufptr
], 1);
3400 s
->max_size
= qemu_chr_can_read(chr
);
3404 static void udp_chr_update_read_handler(CharDriverState
*chr
)
3406 NetCharDriver
*s
= chr
->opaque
;
3409 qemu_set_fd_handler2(s
->fd
, udp_chr_read_poll
,
3410 udp_chr_read
, NULL
, chr
);
3415 static int parse_unix_path(struct sockaddr_un
*uaddr
, const char *str
);
3417 int parse_host_src_port(struct sockaddr_in
*haddr
,
3418 struct sockaddr_in
*saddr
,
3421 static CharDriverState
*qemu_chr_open_udp(const char *def
)
3423 CharDriverState
*chr
= NULL
;
3424 NetCharDriver
*s
= NULL
;
3426 struct sockaddr_in saddr
;
3428 chr
= qemu_mallocz(sizeof(CharDriverState
));
3431 s
= qemu_mallocz(sizeof(NetCharDriver
));
3435 fd
= socket(PF_INET
, SOCK_DGRAM
, 0);
3437 perror("socket(PF_INET, SOCK_DGRAM)");
3441 if (parse_host_src_port(&s
->daddr
, &saddr
, def
) < 0) {
3442 printf("Could not parse: %s\n", def
);
3446 if (bind(fd
, (struct sockaddr
*)&saddr
, sizeof(saddr
)) < 0)
3456 chr
->chr_write
= udp_chr_write
;
3457 chr
->chr_update_read_handler
= udp_chr_update_read_handler
;
3470 /***********************************************************/
3471 /* TCP Net console */
3482 static void tcp_chr_accept(void *opaque
);
3484 static int tcp_chr_write(CharDriverState
*chr
, const uint8_t *buf
, int len
)
3486 TCPCharDriver
*s
= chr
->opaque
;
3488 return send_all(s
->fd
, buf
, len
);
3490 /* XXX: indicate an error ? */
3495 static int tcp_chr_read_poll(void *opaque
)
3497 CharDriverState
*chr
= opaque
;
3498 TCPCharDriver
*s
= chr
->opaque
;
3501 s
->max_size
= qemu_chr_can_read(chr
);
3506 #define IAC_BREAK 243
3507 static void tcp_chr_process_IAC_bytes(CharDriverState
*chr
,
3509 uint8_t *buf
, int *size
)
3511 /* Handle any telnet client's basic IAC options to satisfy char by
3512 * char mode with no echo. All IAC options will be removed from
3513 * the buf and the do_telnetopt variable will be used to track the
3514 * state of the width of the IAC information.
3516 * IAC commands come in sets of 3 bytes with the exception of the
3517 * "IAC BREAK" command and the double IAC.
3523 for (i
= 0; i
< *size
; i
++) {
3524 if (s
->do_telnetopt
> 1) {
3525 if ((unsigned char)buf
[i
] == IAC
&& s
->do_telnetopt
== 2) {
3526 /* Double IAC means send an IAC */
3530 s
->do_telnetopt
= 1;
3532 if ((unsigned char)buf
[i
] == IAC_BREAK
&& s
->do_telnetopt
== 2) {
3533 /* Handle IAC break commands by sending a serial break */
3534 qemu_chr_event(chr
, CHR_EVENT_BREAK
);
3539 if (s
->do_telnetopt
>= 4) {
3540 s
->do_telnetopt
= 1;
3543 if ((unsigned char)buf
[i
] == IAC
) {
3544 s
->do_telnetopt
= 2;
3555 static void tcp_chr_read(void *opaque
)
3557 CharDriverState
*chr
= opaque
;
3558 TCPCharDriver
*s
= chr
->opaque
;
3562 if (!s
->connected
|| s
->max_size
<= 0)
3565 if (len
> s
->max_size
)
3567 size
= recv(s
->fd
, buf
, len
, 0);
3569 /* connection closed */
3571 if (s
->listen_fd
>= 0) {
3572 qemu_set_fd_handler(s
->listen_fd
, tcp_chr_accept
, NULL
, chr
);
3574 qemu_set_fd_handler(s
->fd
, NULL
, NULL
, NULL
);
3577 } else if (size
> 0) {
3578 if (s
->do_telnetopt
)
3579 tcp_chr_process_IAC_bytes(chr
, s
, buf
, &size
);
3581 qemu_chr_read(chr
, buf
, size
);
3585 static void tcp_chr_connect(void *opaque
)
3587 CharDriverState
*chr
= opaque
;
3588 TCPCharDriver
*s
= chr
->opaque
;
3591 qemu_set_fd_handler2(s
->fd
, tcp_chr_read_poll
,
3592 tcp_chr_read
, NULL
, chr
);
3593 qemu_chr_reset(chr
);
3596 #define IACSET(x,a,b,c) x[0] = a; x[1] = b; x[2] = c;
3597 static void tcp_chr_telnet_init(int fd
)
3600 /* Send the telnet negotion to put telnet in binary, no echo, single char mode */
3601 IACSET(buf
, 0xff, 0xfb, 0x01); /* IAC WILL ECHO */
3602 send(fd
, (char *)buf
, 3, 0);
3603 IACSET(buf
, 0xff, 0xfb, 0x03); /* IAC WILL Suppress go ahead */
3604 send(fd
, (char *)buf
, 3, 0);
3605 IACSET(buf
, 0xff, 0xfb, 0x00); /* IAC WILL Binary */
3606 send(fd
, (char *)buf
, 3, 0);
3607 IACSET(buf
, 0xff, 0xfd, 0x00); /* IAC DO Binary */
3608 send(fd
, (char *)buf
, 3, 0);
3611 static void socket_set_nodelay(int fd
)
3614 setsockopt(fd
, IPPROTO_TCP
, TCP_NODELAY
, (char *)&val
, sizeof(val
));
3617 static void tcp_chr_accept(void *opaque
)
3619 CharDriverState
*chr
= opaque
;
3620 TCPCharDriver
*s
= chr
->opaque
;
3621 struct sockaddr_in saddr
;
3623 struct sockaddr_un uaddr
;
3625 struct sockaddr
*addr
;
3632 len
= sizeof(uaddr
);
3633 addr
= (struct sockaddr
*)&uaddr
;
3637 len
= sizeof(saddr
);
3638 addr
= (struct sockaddr
*)&saddr
;
3640 fd
= accept(s
->listen_fd
, addr
, &len
);
3641 if (fd
< 0 && errno
!= EINTR
) {
3643 } else if (fd
>= 0) {
3644 if (s
->do_telnetopt
)
3645 tcp_chr_telnet_init(fd
);
3649 socket_set_nonblock(fd
);
3651 socket_set_nodelay(fd
);
3653 qemu_set_fd_handler(s
->listen_fd
, NULL
, NULL
, NULL
);
3654 tcp_chr_connect(chr
);
3657 static void tcp_chr_close(CharDriverState
*chr
)
3659 TCPCharDriver
*s
= chr
->opaque
;
3662 if (s
->listen_fd
>= 0)
3663 closesocket(s
->listen_fd
);
3667 static CharDriverState
*qemu_chr_open_tcp(const char *host_str
,
3671 CharDriverState
*chr
= NULL
;
3672 TCPCharDriver
*s
= NULL
;
3673 int fd
= -1, ret
, err
, val
;
3675 int is_waitconnect
= 1;
3678 struct sockaddr_in saddr
;
3680 struct sockaddr_un uaddr
;
3682 struct sockaddr
*addr
;
3687 addr
= (struct sockaddr
*)&uaddr
;
3688 addrlen
= sizeof(uaddr
);
3689 if (parse_unix_path(&uaddr
, host_str
) < 0)
3694 addr
= (struct sockaddr
*)&saddr
;
3695 addrlen
= sizeof(saddr
);
3696 if (parse_host_port(&saddr
, host_str
) < 0)
3701 while((ptr
= strchr(ptr
,','))) {
3703 if (!strncmp(ptr
,"server",6)) {
3705 } else if (!strncmp(ptr
,"nowait",6)) {
3707 } else if (!strncmp(ptr
,"nodelay",6)) {
3710 printf("Unknown option: %s\n", ptr
);
3717 chr
= qemu_mallocz(sizeof(CharDriverState
));
3720 s
= qemu_mallocz(sizeof(TCPCharDriver
));
3726 fd
= socket(PF_UNIX
, SOCK_STREAM
, 0);
3729 fd
= socket(PF_INET
, SOCK_STREAM
, 0);
3734 if (!is_waitconnect
)
3735 socket_set_nonblock(fd
);
3740 s
->is_unix
= is_unix
;
3741 s
->do_nodelay
= do_nodelay
&& !is_unix
;
3744 chr
->chr_write
= tcp_chr_write
;
3745 chr
->chr_close
= tcp_chr_close
;
3748 /* allow fast reuse */
3752 pstrcpy(path
, sizeof(path
), uaddr
.sun_path
);
3758 setsockopt(fd
, SOL_SOCKET
, SO_REUSEADDR
, (const char *)&val
, sizeof(val
));
3761 ret
= bind(fd
, addr
, addrlen
);
3765 ret
= listen(fd
, 0);
3770 qemu_set_fd_handler(s
->listen_fd
, tcp_chr_accept
, NULL
, chr
);
3772 s
->do_telnetopt
= 1;
3775 ret
= connect(fd
, addr
, addrlen
);
3777 err
= socket_error();
3778 if (err
== EINTR
|| err
== EWOULDBLOCK
) {
3779 } else if (err
== EINPROGRESS
) {
3782 } else if (err
== WSAEALREADY
) {
3794 socket_set_nodelay(fd
);
3796 tcp_chr_connect(chr
);
3798 qemu_set_fd_handler(s
->fd
, NULL
, tcp_chr_connect
, chr
);
3801 if (is_listen
&& is_waitconnect
) {
3802 printf("QEMU waiting for connection on: %s\n", host_str
);
3803 tcp_chr_accept(chr
);
3804 socket_set_nonblock(s
->listen_fd
);
3816 CharDriverState
*qemu_chr_open(const char *filename
)
3820 if (!strcmp(filename
, "vc")) {
3821 return text_console_init(&display_state
, 0);
3822 } else if (strstart(filename
, "vc:", &p
)) {
3823 return text_console_init(&display_state
, p
);
3824 } else if (!strcmp(filename
, "null")) {
3825 return qemu_chr_open_null();
3827 if (strstart(filename
, "tcp:", &p
)) {
3828 return qemu_chr_open_tcp(p
, 0, 0);
3830 if (strstart(filename
, "telnet:", &p
)) {
3831 return qemu_chr_open_tcp(p
, 1, 0);
3833 if (strstart(filename
, "udp:", &p
)) {
3834 return qemu_chr_open_udp(p
);
3836 if (strstart(filename
, "mon:", &p
)) {
3837 CharDriverState
*drv
= qemu_chr_open(p
);
3839 drv
= qemu_chr_open_mux(drv
);
3840 monitor_init(drv
, !nographic
);
3843 printf("Unable to open driver: %s\n", p
);
3847 if (strstart(filename
, "unix:", &p
)) {
3848 return qemu_chr_open_tcp(p
, 0, 1);
3849 } else if (strstart(filename
, "file:", &p
)) {
3850 return qemu_chr_open_file_out(p
);
3851 } else if (strstart(filename
, "pipe:", &p
)) {
3852 return qemu_chr_open_pipe(p
);
3853 } else if (!strcmp(filename
, "pty")) {
3854 return qemu_chr_open_pty();
3855 } else if (!strcmp(filename
, "stdio")) {
3856 return qemu_chr_open_stdio();
3858 #if defined(__linux__)
3859 if (strstart(filename
, "/dev/parport", NULL
)) {
3860 return qemu_chr_open_pp(filename
);
3863 #if defined(__linux__) || defined(__sun__) || defined(__FreeBSD__) \
3864 || defined(__NetBSD__) || defined(__OpenBSD__)
3865 if (strstart(filename
, "/dev/", NULL
)) {
3866 return qemu_chr_open_tty(filename
);
3870 if (strstart(filename
, "COM", NULL
)) {
3871 return qemu_chr_open_win(filename
);
3873 if (strstart(filename
, "pipe:", &p
)) {
3874 return qemu_chr_open_win_pipe(p
);
3876 if (strstart(filename
, "con:", NULL
)) {
3877 return qemu_chr_open_win_con(filename
);
3879 if (strstart(filename
, "file:", &p
)) {
3880 return qemu_chr_open_win_file_out(p
);
3883 #ifdef CONFIG_BRLAPI
3884 if (!strcmp(filename
, "braille")) {
3885 return chr_baum_init();
3893 void qemu_chr_close(CharDriverState
*chr
)
3896 chr
->chr_close(chr
);
3900 /***********************************************************/
3901 /* network device redirectors */
3903 #if defined(DEBUG_NET) || defined(DEBUG_SLIRP)
3904 static void hex_dump(FILE *f
, const uint8_t *buf
, int size
)
3908 for(i
=0;i
<size
;i
+=16) {
3912 fprintf(f
, "%08x ", i
);
3915 fprintf(f
, " %02x", buf
[i
+j
]);
3920 for(j
=0;j
<len
;j
++) {
3922 if (c
< ' ' || c
> '~')
3924 fprintf(f
, "%c", c
);
3931 static int parse_macaddr(uint8_t *macaddr
, const char *p
)
3938 offset
= strtol(p
, &last_char
, 0);
3939 if (0 == errno
&& '\0' == *last_char
&&
3940 offset
>= 0 && offset
<= 0xFFFFFF) {
3941 macaddr
[3] = (offset
& 0xFF0000) >> 16;
3942 macaddr
[4] = (offset
& 0xFF00) >> 8;
3943 macaddr
[5] = offset
& 0xFF;
3946 for(i
= 0; i
< 6; i
++) {
3947 macaddr
[i
] = strtol(p
, (char **)&p
, 16);
3952 if (*p
!= ':' && *p
!= '-')
3963 static int get_str_sep(char *buf
, int buf_size
, const char **pp
, int sep
)
3968 p1
= strchr(p
, sep
);
3974 if (len
> buf_size
- 1)
3976 memcpy(buf
, p
, len
);
3983 int parse_host_src_port(struct sockaddr_in
*haddr
,
3984 struct sockaddr_in
*saddr
,
3985 const char *input_str
)
3987 char *str
= strdup(input_str
);
3988 char *host_str
= str
;
3990 const char *src_str2
;
3994 * Chop off any extra arguments at the end of the string which
3995 * would start with a comma, then fill in the src port information
3996 * if it was provided else use the "any address" and "any port".
3998 if ((ptr
= strchr(str
,',')))
4001 if ((src_str
= strchr(input_str
,'@'))) {
4006 if (parse_host_port(haddr
, host_str
) < 0)
4010 if (!src_str
|| *src_str
== '\0')
4013 if (parse_host_port(saddr
, src_str2
) < 0)
4024 int parse_host_port(struct sockaddr_in
*saddr
, const char *str
)
4032 if (get_str_sep(buf
, sizeof(buf
), &p
, ':') < 0)
4034 saddr
->sin_family
= AF_INET
;
4035 if (buf
[0] == '\0') {
4036 saddr
->sin_addr
.s_addr
= 0;
4038 if (isdigit(buf
[0])) {
4039 if (!inet_aton(buf
, &saddr
->sin_addr
))
4042 if ((he
= gethostbyname(buf
)) == NULL
)
4044 saddr
->sin_addr
= *(struct in_addr
*)he
->h_addr
;
4047 port
= strtol(p
, (char **)&r
, 0);
4050 saddr
->sin_port
= htons(port
);
4055 static int parse_unix_path(struct sockaddr_un
*uaddr
, const char *str
)
4060 len
= MIN(108, strlen(str
));
4061 p
= strchr(str
, ',');
4063 len
= MIN(len
, p
- str
);
4065 memset(uaddr
, 0, sizeof(*uaddr
));
4067 uaddr
->sun_family
= AF_UNIX
;
4068 memcpy(uaddr
->sun_path
, str
, len
);
4074 /* find or alloc a new VLAN */
4075 VLANState
*qemu_find_vlan(int id
)
4077 VLANState
**pvlan
, *vlan
;
4078 for(vlan
= first_vlan
; vlan
!= NULL
; vlan
= vlan
->next
) {
4082 vlan
= qemu_mallocz(sizeof(VLANState
));
4087 pvlan
= &first_vlan
;
4088 while (*pvlan
!= NULL
)
4089 pvlan
= &(*pvlan
)->next
;
4094 VLANClientState
*qemu_new_vlan_client(VLANState
*vlan
,
4095 IOReadHandler
*fd_read
,
4096 IOCanRWHandler
*fd_can_read
,
4099 VLANClientState
*vc
, **pvc
;
4100 vc
= qemu_mallocz(sizeof(VLANClientState
));
4103 vc
->fd_read
= fd_read
;
4104 vc
->fd_can_read
= fd_can_read
;
4105 vc
->opaque
= opaque
;
4109 pvc
= &vlan
->first_client
;
4110 while (*pvc
!= NULL
)
4111 pvc
= &(*pvc
)->next
;
4116 void qemu_del_vlan_client(VLANClientState
*vc
)
4118 VLANClientState
**pvc
= &vc
->vlan
->first_client
;
4120 while (*pvc
!= NULL
)
4126 pvc
= &(*pvc
)->next
;
4129 int qemu_can_send_packet(VLANClientState
*vc1
)
4131 VLANState
*vlan
= vc1
->vlan
;
4132 VLANClientState
*vc
;
4134 for(vc
= vlan
->first_client
; vc
!= NULL
; vc
= vc
->next
) {
4136 if (vc
->fd_can_read
&& vc
->fd_can_read(vc
->opaque
))
4143 int qemu_send_packet(VLANClientState
*vc1
, const uint8_t *buf
, int size
)
4145 VLANState
*vlan
= vc1
->vlan
;
4146 VLANClientState
*vc
;
4150 printf("vlan %d send:\n", vlan
->id
);
4151 hex_dump(stdout
, buf
, size
);
4153 for(vc
= vlan
->first_client
; vc
!= NULL
; vc
= vc
->next
) {
4155 if (!vc
->fd_can_read
|| vc
->fd_can_read(vc
->opaque
)) {
4156 vc
->fd_read(vc
->opaque
, buf
, size
);
4165 static ssize_t
vc_sendv_compat(VLANClientState
*vc
, const struct iovec
*iov
,
4172 for (i
= 0; i
< iovcnt
; i
++) {
4175 len
= MIN(sizeof(buffer
) - offset
, iov
[i
].iov_len
);
4176 memcpy(buffer
+ offset
, iov
[i
].iov_base
, len
);
4180 vc
->fd_read(vc
->opaque
, buffer
, offset
);
4185 ssize_t
qemu_sendv_packet(VLANClientState
*vc1
, const struct iovec
*iov
,
4188 VLANState
*vlan
= vc1
->vlan
;
4189 VLANClientState
*vc
;
4190 ssize_t max_len
= 0;
4192 for (vc
= vlan
->first_client
; vc
!= NULL
; vc
= vc
->next
) {
4199 len
= vc
->fd_readv(vc
->opaque
, iov
, iovcnt
);
4200 else if (vc
->fd_read
)
4201 len
= vc_sendv_compat(vc
, iov
, iovcnt
);
4203 max_len
= MAX(max_len
, len
);
4209 #if defined(CONFIG_SLIRP)
4211 /* slirp network adapter */
4213 static int slirp_inited
;
4214 static VLANClientState
*slirp_vc
;
4216 int slirp_can_output(void)
4218 return !slirp_vc
|| qemu_can_send_packet(slirp_vc
);
4221 void slirp_output(const uint8_t *pkt
, int pkt_len
)
4224 printf("slirp output:\n");
4225 hex_dump(stdout
, pkt
, pkt_len
);
4229 qemu_send_packet(slirp_vc
, pkt
, pkt_len
);
4232 static void slirp_receive(void *opaque
, const uint8_t *buf
, int size
)
4235 printf("slirp input:\n");
4236 hex_dump(stdout
, buf
, size
);
4238 slirp_input(buf
, size
);
4241 static int net_slirp_init(VLANState
*vlan
)
4243 if (!slirp_inited
) {
4247 slirp_vc
= qemu_new_vlan_client(vlan
,
4248 slirp_receive
, NULL
, NULL
);
4249 snprintf(slirp_vc
->info_str
, sizeof(slirp_vc
->info_str
), "user redirector");
4253 static void net_slirp_redir(const char *redir_str
)
4258 struct in_addr guest_addr
;
4259 int host_port
, guest_port
;
4261 if (!slirp_inited
) {
4267 if (get_str_sep(buf
, sizeof(buf
), &p
, ':') < 0)
4269 if (!strcmp(buf
, "tcp")) {
4271 } else if (!strcmp(buf
, "udp")) {
4277 if (get_str_sep(buf
, sizeof(buf
), &p
, ':') < 0)
4279 host_port
= strtol(buf
, &r
, 0);
4283 if (get_str_sep(buf
, sizeof(buf
), &p
, ':') < 0)
4285 if (buf
[0] == '\0') {
4286 pstrcpy(buf
, sizeof(buf
), "10.0.2.15");
4288 if (!inet_aton(buf
, &guest_addr
))
4291 guest_port
= strtol(p
, &r
, 0);
4295 if (slirp_redir(is_udp
, host_port
, guest_addr
, guest_port
) < 0) {
4296 fprintf(stderr
, "qemu: could not set up redirection\n");
4301 fprintf(stderr
, "qemu: syntax: -redir [tcp|udp]:host-port:[guest-host]:guest-port\n");
4307 static char smb_dir
[1024];
4309 static void erase_dir(char *dir_name
)
4313 char filename
[1024];
4315 /* erase all the files in the directory */
4316 if ((d
= opendir(dir_name
)) != 0) {
4321 if (strcmp(de
->d_name
, ".") != 0 &&
4322 strcmp(de
->d_name
, "..") != 0) {
4323 snprintf(filename
, sizeof(filename
), "%s/%s",
4324 smb_dir
, de
->d_name
);
4325 if (unlink(filename
) != 0) /* is it a directory? */
4326 erase_dir(filename
);
4334 /* automatic user mode samba server configuration */
4335 static void smb_exit(void)
4340 /* automatic user mode samba server configuration */
4341 static void net_slirp_smb(const char *exported_dir
)
4343 char smb_conf
[1024];
4344 char smb_cmdline
[1024];
4347 if (!slirp_inited
) {
4352 /* XXX: better tmp dir construction */
4353 snprintf(smb_dir
, sizeof(smb_dir
), "/tmp/qemu-smb.%d", getpid());
4354 if (mkdir(smb_dir
, 0700) < 0) {
4355 fprintf(stderr
, "qemu: could not create samba server dir '%s'\n", smb_dir
);
4358 snprintf(smb_conf
, sizeof(smb_conf
), "%s/%s", smb_dir
, "smb.conf");
4360 f
= fopen(smb_conf
, "w");
4362 fprintf(stderr
, "qemu: could not create samba server configuration file '%s'\n", smb_conf
);
4369 "socket address=127.0.0.1\n"
4370 "pid directory=%s\n"
4371 "lock directory=%s\n"
4372 "log file=%s/log.smbd\n"
4373 "smb passwd file=%s/smbpasswd\n"
4374 "security = share\n"
4389 snprintf(smb_cmdline
, sizeof(smb_cmdline
), "%s -s %s",
4390 SMBD_COMMAND
, smb_conf
);
4392 slirp_add_exec(0, smb_cmdline
, 4, 139);
4395 #endif /* !defined(_WIN32) */
4396 void do_info_slirp(void)
4401 #endif /* CONFIG_SLIRP */
4405 int tap_has_vnet_hdr(void *opaque
)
4410 void tap_using_vnet_hdr(void *opaque
, int using_vnet_hdr
)
4414 #else /* !defined(_WIN32) */
4416 #ifndef IFF_VNET_HDR
4417 #define TAP_BUFSIZE 4096
4419 #include <linux/virtio_net.h>
4421 #define ETH_DATA_LEN 1500
4422 #define MAX_PACKET_LEN (ETH_HLEN + ETH_DATA_LEN)
4423 #define MAX_SKB_FRAGS ((65536/TARGET_PAGE_SIZE) + 2)
4424 #define TAP_BUFSIZE (sizeof(struct virtio_net_hdr) + MAX_PACKET_LEN + (MAX_SKB_FRAGS*TARGET_PAGE_SIZE))
4427 typedef struct TAPState
{
4428 VLANClientState
*vc
;
4430 char down_script
[1024];
4431 char buf
[TAP_BUFSIZE
];
4433 unsigned int has_vnet_hdr
: 1;
4434 unsigned int using_vnet_hdr
: 1;
4437 static ssize_t
tap_writev(void *opaque
, const struct iovec
*iov
,
4440 TAPState
*s
= opaque
;
4444 len
= writev(s
->fd
, iov
, iovcnt
);
4445 } while (len
== -1 && (errno
== EINTR
|| errno
== EAGAIN
));
4450 static ssize_t
tap_receive_iov(void *opaque
, const struct iovec
*iov
,
4454 TAPState
*s
= opaque
;
4456 if (s
->has_vnet_hdr
&& !s
->using_vnet_hdr
) {
4457 struct iovec
*iov_copy
;
4458 struct virtio_net_hdr hdr
= { 0, };
4460 iov_copy
= alloca(sizeof(struct iovec
) * (iovcnt
+ 1));
4462 iov_copy
[0].iov_base
= &hdr
;
4463 iov_copy
[0].iov_len
= sizeof(hdr
);
4465 memcpy(&iov_copy
[1], iov
, sizeof(struct iovec
) * iovcnt
);
4467 return tap_writev(opaque
, iov_copy
, iovcnt
+ 1);
4471 return tap_writev(opaque
, iov
, iovcnt
);
4474 static void tap_receive(void *opaque
, const uint8_t *buf
, int size
)
4476 struct iovec iov
[2];
4480 TAPState
*s
= opaque
;
4481 struct virtio_net_hdr hdr
= { 0, };
4483 if (s
->has_vnet_hdr
&& !s
->using_vnet_hdr
) {
4484 iov
[i
].iov_base
= &hdr
;
4485 iov
[i
].iov_len
= sizeof(hdr
);
4490 iov
[i
].iov_base
= (char *) buf
;
4491 iov
[i
].iov_len
= size
;
4494 tap_writev(opaque
, iov
, i
);
4497 static int tap_can_send(void *opaque
)
4499 TAPState
*s
= opaque
;
4500 VLANClientState
*vc
;
4501 int can_receive
= 0;
4503 /* Check to see if any of our clients can receive a packet */
4504 for (vc
= s
->vc
->vlan
->first_client
; vc
; vc
= vc
->next
) {
4505 /* Skip ourselves */
4509 if (!vc
->fd_can_read
) {
4510 /* no fd_can_read handler, they always can receive */
4513 can_receive
= vc
->fd_can_read(vc
->opaque
);
4515 /* Once someone can receive, we try to send a packet */
4523 static int tap_send_packet(TAPState
*s
)
4525 uint8_t *buf
= s
->buf
;
4529 if (s
->has_vnet_hdr
&& !s
->using_vnet_hdr
) {
4530 buf
+= sizeof(struct virtio_net_hdr
);
4531 size
-= sizeof(struct virtio_net_hdr
);
4535 return qemu_send_packet(s
->vc
, buf
, size
);
4538 static void tap_send(void *opaque
)
4540 TAPState
*s
= opaque
;
4542 /* First try to send any buffered packet */
4546 /* If noone can receive the packet, buffer it */
4547 err
= tap_send_packet(s
);
4552 /* Read packets until we hit EAGAIN */
4557 sbuf
.maxlen
= sizeof(s
->buf
);
4559 s
->size
= getmsg(s
->fd
, NULL
, &sbuf
, &f
) >=0 ? sbuf
.len
: -1;
4562 s
->size
= read(s
->fd
, s
->buf
, sizeof(s
->buf
));
4566 if (s
->size
== -1 && errno
== EINTR
)
4572 /* If noone can receive the packet, buffer it */
4573 err
= tap_send_packet(s
);
4577 } while (s
->size
> 0);
4580 int tap_has_vnet_hdr(void *opaque
)
4582 VLANClientState
*vc
= opaque
;
4583 TAPState
*s
= vc
->opaque
;
4585 return s
? s
->has_vnet_hdr
: 0;
4588 void tap_using_vnet_hdr(void *opaque
, int using_vnet_hdr
)
4590 VLANClientState
*vc
= opaque
;
4591 TAPState
*s
= vc
->opaque
;
4593 if (!s
|| !s
->has_vnet_hdr
)
4596 s
->using_vnet_hdr
= using_vnet_hdr
!= 0;
4599 static int tap_probe_vnet_hdr(int fd
)
4601 #if defined(TUNGETIFF) && defined(IFF_VNET_HDR)
4604 if (ioctl(fd
, TUNGETIFF
, &ifr
) != 0) {
4605 fprintf(stderr
, "TUNGETIFF ioctl() failed: %s\n", strerror(errno
));
4609 return ifr
.ifr_flags
& IFF_VNET_HDR
;
4615 #ifdef TUNSETOFFLOAD
4616 static void tap_set_offload(VLANClientState
*vc
, int csum
, int tso4
, int tso6
,
4619 TAPState
*s
= vc
->opaque
;
4620 unsigned int offload
= 0;
4623 offload
|= TUN_F_CSUM
;
4625 offload
|= TUN_F_TSO4
;
4627 offload
|= TUN_F_TSO6
;
4628 if ((tso4
|| tso6
) && ecn
)
4629 offload
|= TUN_F_TSO_ECN
;
4632 if (ioctl(s
->fd
, TUNSETOFFLOAD
, offload
) != 0)
4633 fprintf(stderr
, "TUNSETOFFLOAD ioctl() failed: %s\n",
4636 #endif /* TUNSETOFFLOAD */
4640 static TAPState
*net_tap_fd_init(VLANState
*vlan
, int fd
, int vnet_hdr
)
4644 s
= qemu_mallocz(sizeof(TAPState
));
4648 s
->has_vnet_hdr
= vnet_hdr
!= 0;
4649 s
->vc
= qemu_new_vlan_client(vlan
, tap_receive
, NULL
, s
);
4650 s
->vc
->fd_readv
= tap_receive_iov
;
4651 #ifdef TUNSETOFFLOAD
4652 s
->vc
->set_offload
= tap_set_offload
;
4654 qemu_set_fd_handler2(s
->fd
, tap_can_send
, tap_send
, NULL
, s
);
4655 snprintf(s
->vc
->info_str
, sizeof(s
->vc
->info_str
), "tap: fd=%d", fd
);
4659 #if defined (_BSD) || defined (__FreeBSD_kernel__)
4660 static int tap_open(char *ifname
, int ifname_size
, int *vnet_hdr
)
4666 TFR(fd
= open("/dev/tap", O_RDWR
));
4668 fprintf(stderr
, "warning: could not open /dev/tap: no virtual network emulation\n");
4673 dev
= devname(s
.st_rdev
, S_IFCHR
);
4674 pstrcpy(ifname
, ifname_size
, dev
);
4676 fcntl(fd
, F_SETFL
, O_NONBLOCK
);
4679 #elif defined(__sun__)
4680 #define TUNNEWPPA (('T'<<16) | 0x0001)
4682 * Allocate TAP device, returns opened fd.
4683 * Stores dev name in the first arg(must be large enough).
4685 int tap_alloc(char *dev
, size_t dev_size
)
4687 int tap_fd
, if_fd
, ppa
= -1;
4688 static int ip_fd
= 0;
4691 static int arp_fd
= 0;
4692 int ip_muxid
, arp_muxid
;
4693 struct strioctl strioc_if
, strioc_ppa
;
4694 int link_type
= I_PLINK
;;
4696 char actual_name
[32] = "";
4698 memset(&ifr
, 0x0, sizeof(ifr
));
4702 while( *ptr
&& !isdigit((int)*ptr
) ) ptr
++;
4706 /* Check if IP device was opened */
4710 TFR(ip_fd
= open("/dev/udp", O_RDWR
, 0));
4712 syslog(LOG_ERR
, "Can't open /dev/ip (actually /dev/udp)");
4716 TFR(tap_fd
= open("/dev/tap", O_RDWR
, 0));
4718 syslog(LOG_ERR
, "Can't open /dev/tap");
4722 /* Assign a new PPA and get its unit number. */
4723 strioc_ppa
.ic_cmd
= TUNNEWPPA
;
4724 strioc_ppa
.ic_timout
= 0;
4725 strioc_ppa
.ic_len
= sizeof(ppa
);
4726 strioc_ppa
.ic_dp
= (char *)&ppa
;
4727 if ((ppa
= ioctl (tap_fd
, I_STR
, &strioc_ppa
)) < 0)
4728 syslog (LOG_ERR
, "Can't assign new interface");
4730 TFR(if_fd
= open("/dev/tap", O_RDWR
, 0));
4732 syslog(LOG_ERR
, "Can't open /dev/tap (2)");
4735 if(ioctl(if_fd
, I_PUSH
, "ip") < 0){
4736 syslog(LOG_ERR
, "Can't push IP module");
4740 if (ioctl(if_fd
, SIOCGLIFFLAGS
, &ifr
) < 0)
4741 syslog(LOG_ERR
, "Can't get flags\n");
4743 snprintf (actual_name
, 32, "tap%d", ppa
);
4744 strncpy (ifr
.lifr_name
, actual_name
, sizeof (ifr
.lifr_name
));
4747 /* Assign ppa according to the unit number returned by tun device */
4749 if (ioctl (if_fd
, SIOCSLIFNAME
, &ifr
) < 0)
4750 syslog (LOG_ERR
, "Can't set PPA %d", ppa
);
4751 if (ioctl(if_fd
, SIOCGLIFFLAGS
, &ifr
) <0)
4752 syslog (LOG_ERR
, "Can't get flags\n");
4753 /* Push arp module to if_fd */
4754 if (ioctl (if_fd
, I_PUSH
, "arp") < 0)
4755 syslog (LOG_ERR
, "Can't push ARP module (2)");
4757 /* Push arp module to ip_fd */
4758 if (ioctl (ip_fd
, I_POP
, NULL
) < 0)
4759 syslog (LOG_ERR
, "I_POP failed\n");
4760 if (ioctl (ip_fd
, I_PUSH
, "arp") < 0)
4761 syslog (LOG_ERR
, "Can't push ARP module (3)\n");
4763 TFR(arp_fd
= open ("/dev/tap", O_RDWR
, 0));
4765 syslog (LOG_ERR
, "Can't open %s\n", "/dev/tap");
4767 /* Set ifname to arp */
4768 strioc_if
.ic_cmd
= SIOCSLIFNAME
;
4769 strioc_if
.ic_timout
= 0;
4770 strioc_if
.ic_len
= sizeof(ifr
);
4771 strioc_if
.ic_dp
= (char *)&ifr
;
4772 if (ioctl(arp_fd
, I_STR
, &strioc_if
) < 0){
4773 syslog (LOG_ERR
, "Can't set ifname to arp\n");
4776 if((ip_muxid
= ioctl(ip_fd
, I_LINK
, if_fd
)) < 0){
4777 syslog(LOG_ERR
, "Can't link TAP device to IP");
4781 if ((arp_muxid
= ioctl (ip_fd
, link_type
, arp_fd
)) < 0)
4782 syslog (LOG_ERR
, "Can't link TAP device to ARP");
4786 memset(&ifr
, 0x0, sizeof(ifr
));
4787 strncpy (ifr
.lifr_name
, actual_name
, sizeof (ifr
.lifr_name
));
4788 ifr
.lifr_ip_muxid
= ip_muxid
;
4789 ifr
.lifr_arp_muxid
= arp_muxid
;
4791 if (ioctl (ip_fd
, SIOCSLIFMUXID
, &ifr
) < 0)
4793 ioctl (ip_fd
, I_PUNLINK
, arp_muxid
);
4794 ioctl (ip_fd
, I_PUNLINK
, ip_muxid
);
4795 syslog (LOG_ERR
, "Can't set multiplexor id");
4798 snprintf(dev
, dev_size
, "tap%d", ppa
);
4802 static int tap_open(char *ifname
, int ifname_size
, int *vnet_hdr
)
4806 if( (fd
= tap_alloc(dev
, sizeof(dev
))) < 0 ){
4807 fprintf(stderr
, "Cannot allocate TAP device\n");
4810 pstrcpy(ifname
, ifname_size
, dev
);
4811 fcntl(fd
, F_SETFL
, O_NONBLOCK
);
4815 static int tap_open(char *ifname
, int ifname_size
, int *vnet_hdr
)
4820 TFR(fd
= open("/dev/net/tun", O_RDWR
));
4822 fprintf(stderr
, "warning: could not open /dev/net/tun: no virtual network emulation\n");
4825 memset(&ifr
, 0, sizeof(ifr
));
4826 ifr
.ifr_flags
= IFF_TAP
| IFF_NO_PI
;
4828 #if defined(TUNGETFEATURES) && defined(IFF_VNET_HDR)
4830 unsigned int features
;
4832 if (ioctl(fd
, TUNGETFEATURES
, &features
) == 0 &&
4833 features
& IFF_VNET_HDR
) {
4835 ifr
.ifr_flags
|= IFF_VNET_HDR
;
4840 if (ifname
[0] != '\0')
4841 pstrcpy(ifr
.ifr_name
, IFNAMSIZ
, ifname
);
4843 pstrcpy(ifr
.ifr_name
, IFNAMSIZ
, "tap%d");
4844 ret
= ioctl(fd
, TUNSETIFF
, (void *) &ifr
);
4846 fprintf(stderr
, "warning: could not configure /dev/net/tun: no virtual network emulation\n");
4850 pstrcpy(ifname
, ifname_size
, ifr
.ifr_name
);
4851 fcntl(fd
, F_SETFL
, O_NONBLOCK
);
4856 static int launch_script(const char *setup_script
, const char *ifname
, int fd
)
4862 /* try to launch network script */
4866 int open_max
= sysconf (_SC_OPEN_MAX
), i
;
4867 for (i
= 0; i
< open_max
; i
++)
4868 if (i
!= STDIN_FILENO
&&
4869 i
!= STDOUT_FILENO
&&
4870 i
!= STDERR_FILENO
&&
4875 *parg
++ = (char *)setup_script
;
4876 *parg
++ = (char *)ifname
;
4878 execv(setup_script
, args
);
4881 while (waitpid(pid
, &status
, 0) != pid
);
4882 if (!WIFEXITED(status
) ||
4883 WEXITSTATUS(status
) != 0) {
4884 fprintf(stderr
, "%s: could not launch network script\n",
4892 static int net_tap_init(VLANState
*vlan
, const char *ifname1
,
4893 const char *setup_script
, const char *down_script
)
4900 if (ifname1
!= NULL
)
4901 pstrcpy(ifname
, sizeof(ifname
), ifname1
);
4905 TFR(fd
= tap_open(ifname
, sizeof(ifname
), &vnet_hdr
));
4909 if (!setup_script
|| !strcmp(setup_script
, "no"))
4911 if (setup_script
[0] != '\0') {
4912 if (launch_script(setup_script
, ifname
, fd
))
4915 s
= net_tap_fd_init(vlan
, fd
, vnet_hdr
);
4919 snprintf(s
->vc
->info_str
, sizeof(s
->vc
->info_str
),
4920 "tap: ifname=%s setup_script=%s", ifname
, setup_script
);
4921 if (down_script
&& strcmp(down_script
, "no"))
4922 snprintf(s
->down_script
, sizeof(s
->down_script
), "%s", down_script
);
4926 #endif /* !_WIN32 */
4928 #if defined(CONFIG_VDE)
4929 typedef struct VDEState
{
4930 VLANClientState
*vc
;
4934 static void vde_to_qemu(void *opaque
)
4936 VDEState
*s
= opaque
;
4940 size
= vde_recv(s
->vde
, buf
, sizeof(buf
), 0);
4942 qemu_send_packet(s
->vc
, buf
, size
);
4946 static void vde_from_qemu(void *opaque
, const uint8_t *buf
, int size
)
4948 VDEState
*s
= opaque
;
4951 ret
= vde_send(s
->vde
, buf
, size
, 0);
4952 if (ret
< 0 && errno
== EINTR
) {
4959 static int net_vde_init(VLANState
*vlan
, const char *sock
, int port
,
4960 const char *group
, int mode
)
4963 char *init_group
= strlen(group
) ? (char *)group
: NULL
;
4964 char *init_sock
= strlen(sock
) ? (char *)sock
: NULL
;
4966 struct vde_open_args args
= {
4968 .group
= init_group
,
4972 s
= qemu_mallocz(sizeof(VDEState
));
4975 s
->vde
= vde_open(init_sock
, "QEMU", &args
);
4980 s
->vc
= qemu_new_vlan_client(vlan
, vde_from_qemu
, NULL
, s
);
4981 qemu_set_fd_handler(vde_datafd(s
->vde
), vde_to_qemu
, NULL
, s
);
4982 snprintf(s
->vc
->info_str
, sizeof(s
->vc
->info_str
), "vde: sock=%s fd=%d",
4983 sock
, vde_datafd(s
->vde
));
4988 /* network connection */
4989 typedef struct NetSocketState
{
4990 VLANClientState
*vc
;
4992 int state
; /* 0 = getting length, 1 = getting data */
4996 struct sockaddr_in dgram_dst
; /* contains inet host and port destination iff connectionless (SOCK_DGRAM) */
4999 typedef struct NetSocketListenState
{
5002 } NetSocketListenState
;
5004 /* XXX: we consider we can send the whole packet without blocking */
5005 static void net_socket_receive(void *opaque
, const uint8_t *buf
, int size
)
5007 NetSocketState
*s
= opaque
;
5011 send_all(s
->fd
, (const uint8_t *)&len
, sizeof(len
));
5012 send_all(s
->fd
, buf
, size
);
5015 static void net_socket_receive_dgram(void *opaque
, const uint8_t *buf
, int size
)
5017 NetSocketState
*s
= opaque
;
5018 sendto(s
->fd
, buf
, size
, 0,
5019 (struct sockaddr
*)&s
->dgram_dst
, sizeof(s
->dgram_dst
));
5022 static void net_socket_send(void *opaque
)
5024 NetSocketState
*s
= opaque
;
5029 size
= recv(s
->fd
, buf1
, sizeof(buf1
), 0);
5031 err
= socket_error();
5032 if (err
!= EWOULDBLOCK
)
5034 } else if (size
== 0) {
5035 /* end of connection */
5037 qemu_set_fd_handler(s
->fd
, NULL
, NULL
, NULL
);
5043 /* reassemble a packet from the network */
5049 memcpy(s
->buf
+ s
->index
, buf
, l
);
5053 if (s
->index
== 4) {
5055 s
->packet_len
= ntohl(*(uint32_t *)s
->buf
);
5061 l
= s
->packet_len
- s
->index
;
5064 memcpy(s
->buf
+ s
->index
, buf
, l
);
5068 if (s
->index
>= s
->packet_len
) {
5069 qemu_send_packet(s
->vc
, s
->buf
, s
->packet_len
);
5078 static void net_socket_send_dgram(void *opaque
)
5080 NetSocketState
*s
= opaque
;
5083 size
= recv(s
->fd
, s
->buf
, sizeof(s
->buf
), 0);
5087 /* end of connection */
5088 qemu_set_fd_handler(s
->fd
, NULL
, NULL
, NULL
);
5091 qemu_send_packet(s
->vc
, s
->buf
, size
);
5094 static int net_socket_mcast_create(struct sockaddr_in
*mcastaddr
)
5099 if (!IN_MULTICAST(ntohl(mcastaddr
->sin_addr
.s_addr
))) {
5100 fprintf(stderr
, "qemu: error: specified mcastaddr \"%s\" (0x%08x) does not contain a multicast address\n",
5101 inet_ntoa(mcastaddr
->sin_addr
),
5102 (int)ntohl(mcastaddr
->sin_addr
.s_addr
));
5106 fd
= socket(PF_INET
, SOCK_DGRAM
, 0);
5108 perror("socket(PF_INET, SOCK_DGRAM)");
5113 ret
=setsockopt(fd
, SOL_SOCKET
, SO_REUSEADDR
,
5114 (const char *)&val
, sizeof(val
));
5116 perror("setsockopt(SOL_SOCKET, SO_REUSEADDR)");
5120 ret
= bind(fd
, (struct sockaddr
*)mcastaddr
, sizeof(*mcastaddr
));
5126 /* Add host to multicast group */
5127 imr
.imr_multiaddr
= mcastaddr
->sin_addr
;
5128 imr
.imr_interface
.s_addr
= htonl(INADDR_ANY
);
5130 ret
= setsockopt(fd
, IPPROTO_IP
, IP_ADD_MEMBERSHIP
,
5131 (const char *)&imr
, sizeof(struct ip_mreq
));
5133 perror("setsockopt(IP_ADD_MEMBERSHIP)");
5137 /* Force mcast msgs to loopback (eg. several QEMUs in same host */
5139 ret
=setsockopt(fd
, IPPROTO_IP
, IP_MULTICAST_LOOP
,
5140 (const char *)&val
, sizeof(val
));
5142 perror("setsockopt(SOL_IP, IP_MULTICAST_LOOP)");
5146 socket_set_nonblock(fd
);
5154 static NetSocketState
*net_socket_fd_init_dgram(VLANState
*vlan
, int fd
,
5157 struct sockaddr_in saddr
;
5159 socklen_t saddr_len
;
5162 /* fd passed: multicast: "learn" dgram_dst address from bound address and save it
5163 * Because this may be "shared" socket from a "master" process, datagrams would be recv()
5164 * by ONLY ONE process: we must "clone" this dgram socket --jjo
5168 if (getsockname(fd
, (struct sockaddr
*) &saddr
, &saddr_len
) == 0) {
5170 if (saddr
.sin_addr
.s_addr
==0) {
5171 fprintf(stderr
, "qemu: error: init_dgram: fd=%d unbound, cannot setup multicast dst addr\n",
5175 /* clone dgram socket */
5176 newfd
= net_socket_mcast_create(&saddr
);
5178 /* error already reported by net_socket_mcast_create() */
5182 /* clone newfd to fd, close newfd */
5187 fprintf(stderr
, "qemu: error: init_dgram: fd=%d failed getsockname(): %s\n",
5188 fd
, strerror(errno
));
5193 s
= qemu_mallocz(sizeof(NetSocketState
));
5198 s
->vc
= qemu_new_vlan_client(vlan
, net_socket_receive_dgram
, NULL
, s
);
5199 qemu_set_fd_handler(s
->fd
, net_socket_send_dgram
, NULL
, s
);
5201 /* mcast: save bound address as dst */
5202 if (is_connected
) s
->dgram_dst
=saddr
;
5204 snprintf(s
->vc
->info_str
, sizeof(s
->vc
->info_str
),
5205 "socket: fd=%d (%s mcast=%s:%d)",
5206 fd
, is_connected
? "cloned" : "",
5207 inet_ntoa(saddr
.sin_addr
), ntohs(saddr
.sin_port
));
5211 static void net_socket_connect(void *opaque
)
5213 NetSocketState
*s
= opaque
;
5214 qemu_set_fd_handler(s
->fd
, net_socket_send
, NULL
, s
);
5217 static NetSocketState
*net_socket_fd_init_stream(VLANState
*vlan
, int fd
,
5221 s
= qemu_mallocz(sizeof(NetSocketState
));
5225 s
->vc
= qemu_new_vlan_client(vlan
,
5226 net_socket_receive
, NULL
, s
);
5227 snprintf(s
->vc
->info_str
, sizeof(s
->vc
->info_str
),
5228 "socket: fd=%d", fd
);
5230 net_socket_connect(s
);
5232 qemu_set_fd_handler(s
->fd
, NULL
, net_socket_connect
, s
);
5237 static NetSocketState
*net_socket_fd_init(VLANState
*vlan
, int fd
,
5240 int so_type
=-1, optlen
=sizeof(so_type
);
5242 if(getsockopt(fd
, SOL_SOCKET
, SO_TYPE
, (char *)&so_type
,
5243 (socklen_t
*)&optlen
)< 0) {
5244 fprintf(stderr
, "qemu: error: getsockopt(SO_TYPE) for fd=%d failed\n", fd
);
5249 return net_socket_fd_init_dgram(vlan
, fd
, is_connected
);
5251 return net_socket_fd_init_stream(vlan
, fd
, is_connected
);
5253 /* who knows ... this could be a eg. a pty, do warn and continue as stream */
5254 fprintf(stderr
, "qemu: warning: socket type=%d for fd=%d is not SOCK_DGRAM or SOCK_STREAM\n", so_type
, fd
);
5255 return net_socket_fd_init_stream(vlan
, fd
, is_connected
);
5260 static void net_socket_accept(void *opaque
)
5262 NetSocketListenState
*s
= opaque
;
5264 struct sockaddr_in saddr
;
5269 len
= sizeof(saddr
);
5270 fd
= accept(s
->fd
, (struct sockaddr
*)&saddr
, &len
);
5271 if (fd
< 0 && errno
!= EINTR
) {
5273 } else if (fd
>= 0) {
5277 s1
= net_socket_fd_init(s
->vlan
, fd
, 1);
5281 snprintf(s1
->vc
->info_str
, sizeof(s1
->vc
->info_str
),
5282 "socket: connection from %s:%d",
5283 inet_ntoa(saddr
.sin_addr
), ntohs(saddr
.sin_port
));
5287 static int net_socket_listen_init(VLANState
*vlan
, const char *host_str
)
5289 NetSocketListenState
*s
;
5291 struct sockaddr_in saddr
;
5293 if (parse_host_port(&saddr
, host_str
) < 0)
5296 s
= qemu_mallocz(sizeof(NetSocketListenState
));
5300 fd
= socket(PF_INET
, SOCK_STREAM
, 0);
5305 socket_set_nonblock(fd
);
5307 /* allow fast reuse */
5309 setsockopt(fd
, SOL_SOCKET
, SO_REUSEADDR
, (const char *)&val
, sizeof(val
));
5311 ret
= bind(fd
, (struct sockaddr
*)&saddr
, sizeof(saddr
));
5316 ret
= listen(fd
, 0);
5323 qemu_set_fd_handler(fd
, net_socket_accept
, NULL
, s
);
5327 static int net_socket_connect_init(VLANState
*vlan
, const char *host_str
)
5330 int fd
, connected
, ret
, err
;
5331 struct sockaddr_in saddr
;
5333 if (parse_host_port(&saddr
, host_str
) < 0)
5336 fd
= socket(PF_INET
, SOCK_STREAM
, 0);
5341 socket_set_nonblock(fd
);
5345 ret
= connect(fd
, (struct sockaddr
*)&saddr
, sizeof(saddr
));
5347 err
= socket_error();
5348 if (err
== EINTR
|| err
== EWOULDBLOCK
) {
5349 } else if (err
== EINPROGRESS
) {
5352 } else if (err
== WSAEALREADY
) {
5365 s
= net_socket_fd_init(vlan
, fd
, connected
);
5368 snprintf(s
->vc
->info_str
, sizeof(s
->vc
->info_str
),
5369 "socket: connect to %s:%d",
5370 inet_ntoa(saddr
.sin_addr
), ntohs(saddr
.sin_port
));
5374 static int net_socket_mcast_init(VLANState
*vlan
, const char *host_str
)
5378 struct sockaddr_in saddr
;
5380 if (parse_host_port(&saddr
, host_str
) < 0)
5384 fd
= net_socket_mcast_create(&saddr
);
5388 s
= net_socket_fd_init(vlan
, fd
, 0);
5392 s
->dgram_dst
= saddr
;
5394 snprintf(s
->vc
->info_str
, sizeof(s
->vc
->info_str
),
5395 "socket: mcast=%s:%d",
5396 inet_ntoa(saddr
.sin_addr
), ntohs(saddr
.sin_port
));
5401 static const char *get_opt_name(char *buf
, int buf_size
, const char *p
)
5406 while (*p
!= '\0' && *p
!= '=') {
5407 if (q
&& (q
- buf
) < buf_size
- 1)
5417 static const char *get_opt_value(char *buf
, int buf_size
, const char *p
)
5422 while (*p
!= '\0') {
5424 if (*(p
+ 1) != ',')
5428 if (q
&& (q
- buf
) < buf_size
- 1)
5438 int get_param_value(char *buf
, int buf_size
,
5439 const char *tag
, const char *str
)
5446 p
= get_opt_name(option
, sizeof(option
), p
);
5450 if (!strcmp(tag
, option
)) {
5451 (void)get_opt_value(buf
, buf_size
, p
);
5454 p
= get_opt_value(NULL
, 0, p
);
5463 int check_params(char *buf
, int buf_size
,
5464 const char * const *params
, const char *str
)
5471 p
= get_opt_name(buf
, buf_size
, p
);
5475 for(i
= 0; params
[i
] != NULL
; i
++)
5476 if (!strcmp(params
[i
], buf
))
5478 if (params
[i
] == NULL
)
5480 p
= get_opt_value(NULL
, 0, p
);
5488 static int nic_get_free_idx(void)
5492 for (index
= 0; index
< MAX_NICS
; index
++)
5493 if (!nd_table
[index
].used
)
5498 int net_client_init(const char *device
, const char *p
)
5505 if (get_param_value(buf
, sizeof(buf
), "vlan", p
)) {
5506 vlan_id
= strtol(buf
, NULL
, 0);
5508 vlan
= qemu_find_vlan(vlan_id
);
5510 fprintf(stderr
, "Could not create vlan %d\n", vlan_id
);
5513 if (!strcmp(device
, "nic")) {
5516 int idx
= nic_get_free_idx();
5518 if (idx
== -1 || nb_nics
>= MAX_NICS
) {
5519 fprintf(stderr
, "Too Many NICs\n");
5522 nd
= &nd_table
[idx
];
5523 macaddr
= nd
->macaddr
;
5529 macaddr
[5] = 0x56 + idx
;
5531 if (get_param_value(buf
, sizeof(buf
), "macaddr", p
)) {
5532 if (parse_macaddr(macaddr
, buf
) < 0) {
5533 fprintf(stderr
, "invalid syntax for ethernet address\n");
5537 if (get_param_value(buf
, sizeof(buf
), "model", p
)) {
5538 nd
->model
= strdup(buf
);
5543 vlan
->nb_guest_devs
++;
5546 if (!strcmp(device
, "none")) {
5547 /* does nothing. It is needed to signal that no network cards
5552 if (!strcmp(device
, "user")) {
5553 if (get_param_value(buf
, sizeof(buf
), "hostname", p
)) {
5554 pstrcpy(slirp_hostname
, sizeof(slirp_hostname
), buf
);
5556 vlan
->nb_host_devs
++;
5557 ret
= net_slirp_init(vlan
);
5561 if (!strcmp(device
, "tap")) {
5563 if (get_param_value(ifname
, sizeof(ifname
), "ifname", p
) <= 0) {
5564 fprintf(stderr
, "tap: no interface name\n");
5567 vlan
->nb_host_devs
++;
5568 ret
= tap_win32_init(vlan
, ifname
);
5571 if (!strcmp(device
, "tap")) {
5573 char setup_script
[1024], down_script
[1024];
5575 vlan
->nb_host_devs
++;
5576 if (get_param_value(buf
, sizeof(buf
), "fd", p
) > 0) {
5577 fd
= strtol(buf
, NULL
, 0);
5578 fcntl(fd
, F_SETFL
, O_NONBLOCK
);
5580 if (net_tap_fd_init(vlan
, fd
, tap_probe_vnet_hdr(fd
)))
5583 if (get_param_value(ifname
, sizeof(ifname
), "ifname", p
) <= 0) {
5586 if (get_param_value(setup_script
, sizeof(setup_script
), "script", p
) == 0) {
5587 pstrcpy(setup_script
, sizeof(setup_script
), DEFAULT_NETWORK_SCRIPT
);
5589 if (get_param_value(down_script
, sizeof(down_script
), "downscript", p
) == 0) {
5590 pstrcpy(down_script
, sizeof(down_script
), DEFAULT_NETWORK_DOWN_SCRIPT
);
5592 ret
= net_tap_init(vlan
, ifname
, setup_script
, down_script
);
5596 if (!strcmp(device
, "socket")) {
5597 if (get_param_value(buf
, sizeof(buf
), "fd", p
) > 0) {
5599 fd
= strtol(buf
, NULL
, 0);
5601 if (net_socket_fd_init(vlan
, fd
, 1))
5603 } else if (get_param_value(buf
, sizeof(buf
), "listen", p
) > 0) {
5604 ret
= net_socket_listen_init(vlan
, buf
);
5605 } else if (get_param_value(buf
, sizeof(buf
), "connect", p
) > 0) {
5606 ret
= net_socket_connect_init(vlan
, buf
);
5607 } else if (get_param_value(buf
, sizeof(buf
), "mcast", p
) > 0) {
5608 ret
= net_socket_mcast_init(vlan
, buf
);
5610 fprintf(stderr
, "Unknown socket options: %s\n", p
);
5613 vlan
->nb_host_devs
++;
5616 if (!strcmp(device
, "vde")) {
5617 char vde_sock
[1024], vde_group
[512];
5618 int vde_port
, vde_mode
;
5619 vlan
->nb_host_devs
++;
5620 if (get_param_value(vde_sock
, sizeof(vde_sock
), "sock", p
) <= 0) {
5623 if (get_param_value(buf
, sizeof(buf
), "port", p
) > 0) {
5624 vde_port
= strtol(buf
, NULL
, 10);
5628 if (get_param_value(vde_group
, sizeof(vde_group
), "group", p
) <= 0) {
5629 vde_group
[0] = '\0';
5631 if (get_param_value(buf
, sizeof(buf
), "mode", p
) > 0) {
5632 vde_mode
= strtol(buf
, NULL
, 8);
5636 ret
= net_vde_init(vlan
, vde_sock
, vde_port
, vde_group
, vde_mode
);
5640 fprintf(stderr
, "Unknown network device: %s\n", device
);
5644 fprintf(stderr
, "Could not initialize device '%s'\n", device
);
5650 void net_client_uninit(NICInfo
*nd
)
5652 nd
->vlan
->nb_guest_devs
--; /* XXX: free vlan on last reference */
5655 free((void *)nd
->model
);
5658 static int net_client_parse(const char *str
)
5666 while (*p
!= '\0' && *p
!= ',') {
5667 if ((q
- device
) < sizeof(device
) - 1)
5675 return net_client_init(device
, p
);
5678 void do_info_network(void)
5681 VLANClientState
*vc
;
5683 for(vlan
= first_vlan
; vlan
!= NULL
; vlan
= vlan
->next
) {
5684 term_printf("VLAN %d devices:\n", vlan
->id
);
5685 for(vc
= vlan
->first_client
; vc
!= NULL
; vc
= vc
->next
)
5686 term_printf(" %s\n", vc
->info_str
);
5690 /***********************************************************/
5691 /* Bluetooth support */
5694 static struct HCIInfo
*hci_table
[MAX_NICS
];
5695 static struct bt_vlan_s
{
5696 struct bt_scatternet_s net
;
5698 struct bt_vlan_s
*next
;
5701 /* find or alloc a new bluetooth "VLAN" */
5702 static struct bt_scatternet_s
*qemu_find_bt_vlan(int id
)
5704 struct bt_vlan_s
**pvlan
, *vlan
;
5705 for (vlan
= first_bt_vlan
; vlan
!= NULL
; vlan
= vlan
->next
) {
5709 vlan
= qemu_mallocz(sizeof(struct bt_vlan_s
));
5711 pvlan
= &first_bt_vlan
;
5712 while (*pvlan
!= NULL
)
5713 pvlan
= &(*pvlan
)->next
;
5718 static void null_hci_send(struct HCIInfo
*hci
, const uint8_t *data
, int len
)
5722 static int null_hci_addr_set(struct HCIInfo
*hci
, const uint8_t *bd_addr
)
5727 static struct HCIInfo null_hci
= {
5728 .cmd_send
= null_hci_send
,
5729 .sco_send
= null_hci_send
,
5730 .acl_send
= null_hci_send
,
5731 .bdaddr_set
= null_hci_addr_set
,
5734 struct HCIInfo
*qemu_next_hci(void)
5736 if (cur_hci
== nb_hcis
)
5739 return hci_table
[cur_hci
++];
5742 /***********************************************************/
5743 /* QEMU Block devices */
5745 #define HD_ALIAS "index=%d,media=disk"
5747 #define CDROM_ALIAS "index=1,media=cdrom"
5749 #define CDROM_ALIAS "index=2,media=cdrom"
5751 #define FD_ALIAS "index=%d,if=floppy"
5752 #define PFLASH_ALIAS "if=pflash"
5753 #define MTD_ALIAS "if=mtd"
5754 #define SD_ALIAS "index=0,if=sd"
5756 static int drive_opt_get_free_idx(void)
5760 for (index
= 0; index
< MAX_DRIVES
; index
++)
5761 if (!drives_opt
[index
].used
) {
5762 drives_opt
[index
].used
= 1;
5769 static int drive_get_free_idx(void)
5773 for (index
= 0; index
< MAX_DRIVES
; index
++)
5774 if (!drives_table
[index
].used
) {
5775 drives_table
[index
].used
= 1;
5782 int drive_add(const char *file
, const char *fmt
, ...)
5785 int index
= drive_opt_get_free_idx();
5787 if (nb_drives_opt
>= MAX_DRIVES
|| index
== -1) {
5788 fprintf(stderr
, "qemu: too many drives\n");
5792 drives_opt
[index
].file
= file
;
5794 vsnprintf(drives_opt
[index
].opt
,
5795 sizeof(drives_opt
[0].opt
), fmt
, ap
);
5802 void drive_remove(int index
)
5804 drives_opt
[index
].used
= 0;
5808 int drive_get_index(BlockInterfaceType type
, int bus
, int unit
)
5812 /* seek interface, bus and unit */
5814 for (index
= 0; index
< MAX_DRIVES
; index
++)
5815 if (drives_table
[index
].type
== type
&&
5816 drives_table
[index
].bus
== bus
&&
5817 drives_table
[index
].unit
== unit
&&
5818 drives_table
[index
].used
)
5824 int drive_get_max_bus(BlockInterfaceType type
)
5830 for (index
= 0; index
< nb_drives
; index
++) {
5831 if(drives_table
[index
].type
== type
&&
5832 drives_table
[index
].bus
> max_bus
)
5833 max_bus
= drives_table
[index
].bus
;
5838 static void bdrv_format_print(void *opaque
, const char *name
)
5840 fprintf(stderr
, " %s", name
);
5843 void drive_uninit(BlockDriverState
*bdrv
)
5847 for (i
= 0; i
< MAX_DRIVES
; i
++)
5848 if (drives_table
[i
].bdrv
== bdrv
) {
5849 drives_table
[i
].bdrv
= NULL
;
5850 drives_table
[i
].used
= 0;
5851 drive_remove(drives_table
[i
].drive_opt_idx
);
5857 int drive_init(struct drive_opt
*arg
, int snapshot
,
5858 QEMUMachine
*machine
)
5863 const char *mediastr
= "";
5864 BlockInterfaceType type
;
5865 enum { MEDIA_DISK
, MEDIA_CDROM
} media
;
5866 int bus_id
, unit_id
;
5867 int cyls
, heads
, secs
, translation
;
5868 BlockDriverState
*bdrv
;
5869 BlockDriver
*drv
= NULL
;
5874 int drives_table_idx
;
5875 char *str
= arg
->opt
;
5876 static const char * const params
[] = { "bus", "unit", "if", "index",
5877 "cyls", "heads", "secs", "trans",
5878 "media", "snapshot", "file",
5879 "cache", "format", "boot", NULL
};
5881 if (check_params(buf
, sizeof(buf
), params
, str
) < 0) {
5882 fprintf(stderr
, "qemu: unknown parameter '%s' in '%s'\n",
5888 cyls
= heads
= secs
= 0;
5891 translation
= BIOS_ATA_TRANSLATION_AUTO
;
5895 if (machine
->use_scsi
) {
5897 max_devs
= MAX_SCSI_DEVS
;
5898 pstrcpy(devname
, sizeof(devname
), "scsi");
5901 max_devs
= MAX_IDE_DEVS
;
5902 pstrcpy(devname
, sizeof(devname
), "ide");
5906 /* extract parameters */
5908 if (get_param_value(buf
, sizeof(buf
), "bus", str
)) {
5909 bus_id
= strtol(buf
, NULL
, 0);
5911 fprintf(stderr
, "qemu: '%s' invalid bus id\n", str
);
5916 if (get_param_value(buf
, sizeof(buf
), "unit", str
)) {
5917 unit_id
= strtol(buf
, NULL
, 0);
5919 fprintf(stderr
, "qemu: '%s' invalid unit id\n", str
);
5924 if (get_param_value(buf
, sizeof(buf
), "if", str
)) {
5925 pstrcpy(devname
, sizeof(devname
), buf
);
5926 if (!strcmp(buf
, "ide")) {
5928 max_devs
= MAX_IDE_DEVS
;
5929 } else if (!strcmp(buf
, "scsi")) {
5931 max_devs
= MAX_SCSI_DEVS
;
5932 } else if (!strcmp(buf
, "floppy")) {
5935 } else if (!strcmp(buf
, "pflash")) {
5938 } else if (!strcmp(buf
, "mtd")) {
5941 } else if (!strcmp(buf
, "sd")) {
5944 } else if (!strcmp(buf
, "virtio")) {
5948 fprintf(stderr
, "qemu: '%s' unsupported bus type '%s'\n", str
, buf
);
5953 if (get_param_value(buf
, sizeof(buf
), "index", str
)) {
5954 index
= strtol(buf
, NULL
, 0);
5956 fprintf(stderr
, "qemu: '%s' invalid index\n", str
);
5961 if (get_param_value(buf
, sizeof(buf
), "cyls", str
)) {
5962 cyls
= strtol(buf
, NULL
, 0);
5965 if (get_param_value(buf
, sizeof(buf
), "heads", str
)) {
5966 heads
= strtol(buf
, NULL
, 0);
5969 if (get_param_value(buf
, sizeof(buf
), "secs", str
)) {
5970 secs
= strtol(buf
, NULL
, 0);
5973 if (cyls
|| heads
|| secs
) {
5974 if (cyls
< 1 || cyls
> 16383) {
5975 fprintf(stderr
, "qemu: '%s' invalid physical cyls number\n", str
);
5978 if (heads
< 1 || heads
> 16) {
5979 fprintf(stderr
, "qemu: '%s' invalid physical heads number\n", str
);
5982 if (secs
< 1 || secs
> 63) {
5983 fprintf(stderr
, "qemu: '%s' invalid physical secs number\n", str
);
5988 if (get_param_value(buf
, sizeof(buf
), "trans", str
)) {
5991 "qemu: '%s' trans must be used with cyls,heads and secs\n",
5995 if (!strcmp(buf
, "none"))
5996 translation
= BIOS_ATA_TRANSLATION_NONE
;
5997 else if (!strcmp(buf
, "lba"))
5998 translation
= BIOS_ATA_TRANSLATION_LBA
;
5999 else if (!strcmp(buf
, "auto"))
6000 translation
= BIOS_ATA_TRANSLATION_AUTO
;
6002 fprintf(stderr
, "qemu: '%s' invalid translation type\n", str
);
6007 if (get_param_value(buf
, sizeof(buf
), "media", str
)) {
6008 if (!strcmp(buf
, "disk")) {
6010 } else if (!strcmp(buf
, "cdrom")) {
6011 if (cyls
|| secs
|| heads
) {
6013 "qemu: '%s' invalid physical CHS format\n", str
);
6016 media
= MEDIA_CDROM
;
6018 fprintf(stderr
, "qemu: '%s' invalid media\n", str
);
6023 if (get_param_value(buf
, sizeof(buf
), "snapshot", str
)) {
6024 if (!strcmp(buf
, "on"))
6026 else if (!strcmp(buf
, "off"))
6029 fprintf(stderr
, "qemu: '%s' invalid snapshot option\n", str
);
6034 if (get_param_value(buf
, sizeof(buf
), "cache", str
)) {
6035 if (!strcmp(buf
, "off") || !strcmp(buf
, "none"))
6037 else if (!strcmp(buf
, "writethrough"))
6039 else if (!strcmp(buf
, "writeback"))
6042 fprintf(stderr
, "qemu: invalid cache option\n");
6047 if (get_param_value(buf
, sizeof(buf
), "format", str
)) {
6048 if (strcmp(buf
, "?") == 0) {
6049 fprintf(stderr
, "qemu: Supported formats:");
6050 bdrv_iterate_format(bdrv_format_print
, NULL
);
6051 fprintf(stderr
, "\n");
6054 drv
= bdrv_find_format(buf
);
6056 fprintf(stderr
, "qemu: '%s' invalid format\n", buf
);
6061 if (get_param_value(buf
, sizeof(buf
), "boot", str
)) {
6062 if (!strcmp(buf
, "on")) {
6063 if (extboot_drive
!= -1) {
6064 fprintf(stderr
, "qemu: two bootable drives specified\n");
6067 extboot_drive
= nb_drives
;
6068 } else if (strcmp(buf
, "off")) {
6069 fprintf(stderr
, "qemu: '%s' invalid boot option\n", str
);
6074 if (arg
->file
== NULL
)
6075 get_param_value(file
, sizeof(file
), "file", str
);
6077 pstrcpy(file
, sizeof(file
), arg
->file
);
6079 /* compute bus and unit according index */
6082 if (bus_id
!= 0 || unit_id
!= -1) {
6084 "qemu: '%s' index cannot be used with bus and unit\n", str
);
6092 unit_id
= index
% max_devs
;
6093 bus_id
= index
/ max_devs
;
6097 /* if user doesn't specify a unit_id,
6098 * try to find the first free
6101 if (unit_id
== -1) {
6103 while (drive_get_index(type
, bus_id
, unit_id
) != -1) {
6105 if (max_devs
&& unit_id
>= max_devs
) {
6106 unit_id
-= max_devs
;
6114 if (max_devs
&& unit_id
>= max_devs
) {
6115 fprintf(stderr
, "qemu: '%s' unit %d too big (max is %d)\n",
6116 str
, unit_id
, max_devs
- 1);
6121 * ignore multiple definitions
6124 if (drive_get_index(type
, bus_id
, unit_id
) != -1)
6129 if (type
== IF_IDE
|| type
== IF_SCSI
)
6130 mediastr
= (media
== MEDIA_CDROM
) ? "-cd" : "-hd";
6132 snprintf(buf
, sizeof(buf
), "%s%i%s%i",
6133 devname
, bus_id
, mediastr
, unit_id
);
6135 snprintf(buf
, sizeof(buf
), "%s%s%i",
6136 devname
, mediastr
, unit_id
);
6137 bdrv
= bdrv_new(buf
);
6138 drives_table_idx
= drive_get_free_idx();
6139 drives_table
[drives_table_idx
].bdrv
= bdrv
;
6140 drives_table
[drives_table_idx
].type
= type
;
6141 drives_table
[drives_table_idx
].bus
= bus_id
;
6142 drives_table
[drives_table_idx
].unit
= unit_id
;
6143 drives_table
[drives_table_idx
].drive_opt_idx
= arg
- drives_opt
;
6152 bdrv_set_geometry_hint(bdrv
, cyls
, heads
, secs
);
6153 bdrv_set_translation_hint(bdrv
, translation
);
6157 bdrv_set_type_hint(bdrv
, BDRV_TYPE_CDROM
);
6162 /* FIXME: This isn't really a floppy, but it's a reasonable
6165 bdrv_set_type_hint(bdrv
, BDRV_TYPE_FLOPPY
);
6176 bdrv_flags
|= BDRV_O_SNAPSHOT
;
6177 cache
= 2; /* always use write-back with snapshot */
6179 if (cache
== 0) /* no caching */
6180 bdrv_flags
|= BDRV_O_NOCACHE
;
6181 else if (cache
== 2) /* write-back */
6182 bdrv_flags
|= BDRV_O_CACHE_WB
;
6183 if (bdrv_open2(bdrv
, file
, bdrv_flags
, drv
) < 0 || qemu_key_check(bdrv
, file
)) {
6184 fprintf(stderr
, "qemu: could not open disk image %s\n",
6188 return drives_table_idx
;
6191 /***********************************************************/
6194 static USBPort
*used_usb_ports
;
6195 static USBPort
*free_usb_ports
;
6197 /* ??? Maybe change this to register a hub to keep track of the topology. */
6198 void qemu_register_usb_port(USBPort
*port
, void *opaque
, int index
,
6199 usb_attachfn attach
)
6201 port
->opaque
= opaque
;
6202 port
->index
= index
;
6203 port
->attach
= attach
;
6204 port
->next
= free_usb_ports
;
6205 free_usb_ports
= port
;
6208 int usb_device_add_dev(USBDevice
*dev
)
6212 /* Find a USB port to add the device to. */
6213 port
= free_usb_ports
;
6217 /* Create a new hub and chain it on. */
6218 free_usb_ports
= NULL
;
6219 port
->next
= used_usb_ports
;
6220 used_usb_ports
= port
;
6222 hub
= usb_hub_init(VM_USB_HUB_SIZE
);
6223 usb_attach(port
, hub
);
6224 port
= free_usb_ports
;
6227 free_usb_ports
= port
->next
;
6228 port
->next
= used_usb_ports
;
6229 used_usb_ports
= port
;
6230 usb_attach(port
, dev
);
6234 static int usb_device_add(const char *devname
)
6239 if (!free_usb_ports
)
6242 if (strstart(devname
, "host:", &p
)) {
6243 dev
= usb_host_device_open(p
);
6244 } else if (!strcmp(devname
, "mouse")) {
6245 dev
= usb_mouse_init();
6246 } else if (!strcmp(devname
, "tablet")) {
6247 dev
= usb_tablet_init();
6248 } else if (!strcmp(devname
, "keyboard")) {
6249 dev
= usb_keyboard_init();
6250 } else if (strstart(devname
, "disk:", &p
)) {
6251 dev
= usb_msd_init(p
);
6252 } else if (!strcmp(devname
, "wacom-tablet")) {
6253 dev
= usb_wacom_init();
6254 } else if (strstart(devname
, "serial:", &p
)) {
6255 dev
= usb_serial_init(p
);
6256 #ifdef CONFIG_BRLAPI
6257 } else if (!strcmp(devname
, "braille")) {
6258 dev
= usb_baum_init();
6260 } else if (strstart(devname
, "net:", &p
)) {
6263 if (net_client_init("nic", p
) < 0)
6265 nd_table
[nic
].model
= "usb";
6266 dev
= usb_net_init(&nd_table
[nic
]);
6273 return usb_device_add_dev(dev
);
6276 int usb_device_del_addr(int bus_num
, int addr
)
6282 if (!used_usb_ports
)
6288 lastp
= &used_usb_ports
;
6289 port
= used_usb_ports
;
6290 while (port
&& port
->dev
->addr
!= addr
) {
6291 lastp
= &port
->next
;
6299 *lastp
= port
->next
;
6300 usb_attach(port
, NULL
);
6301 dev
->handle_destroy(dev
);
6302 port
->next
= free_usb_ports
;
6303 free_usb_ports
= port
;
6307 static int usb_device_del(const char *devname
)
6312 if (strstart(devname
, "host:", &p
))
6313 return usb_host_device_close(p
);
6315 if (!used_usb_ports
)
6318 p
= strchr(devname
, '.');
6321 bus_num
= strtoul(devname
, NULL
, 0);
6322 addr
= strtoul(p
+ 1, NULL
, 0);
6324 return usb_device_del_addr(bus_num
, addr
);
6327 void do_usb_add(const char *devname
)
6329 usb_device_add(devname
);
6332 void do_usb_del(const char *devname
)
6334 usb_device_del(devname
);
6341 const char *speed_str
;
6344 term_printf("USB support not enabled\n");
6348 for (port
= used_usb_ports
; port
; port
= port
->next
) {
6352 switch(dev
->speed
) {
6356 case USB_SPEED_FULL
:
6359 case USB_SPEED_HIGH
:
6366 term_printf(" Device %d.%d, Speed %s Mb/s, Product %s\n",
6367 0, dev
->addr
, speed_str
, dev
->devname
);
6371 /***********************************************************/
6372 /* PCMCIA/Cardbus */
6374 static struct pcmcia_socket_entry_s
{
6375 struct pcmcia_socket_s
*socket
;
6376 struct pcmcia_socket_entry_s
*next
;
6377 } *pcmcia_sockets
= 0;
6379 void pcmcia_socket_register(struct pcmcia_socket_s
*socket
)
6381 struct pcmcia_socket_entry_s
*entry
;
6383 entry
= qemu_malloc(sizeof(struct pcmcia_socket_entry_s
));
6384 entry
->socket
= socket
;
6385 entry
->next
= pcmcia_sockets
;
6386 pcmcia_sockets
= entry
;
6389 void pcmcia_socket_unregister(struct pcmcia_socket_s
*socket
)
6391 struct pcmcia_socket_entry_s
*entry
, **ptr
;
6393 ptr
= &pcmcia_sockets
;
6394 for (entry
= *ptr
; entry
; ptr
= &entry
->next
, entry
= *ptr
)
6395 if (entry
->socket
== socket
) {
6401 void pcmcia_info(void)
6403 struct pcmcia_socket_entry_s
*iter
;
6404 if (!pcmcia_sockets
)
6405 term_printf("No PCMCIA sockets\n");
6407 for (iter
= pcmcia_sockets
; iter
; iter
= iter
->next
)
6408 term_printf("%s: %s\n", iter
->socket
->slot_string
,
6409 iter
->socket
->attached
? iter
->socket
->card_string
:
6413 /***********************************************************/
6416 static void dumb_update(DisplayState
*ds
, int x
, int y
, int w
, int h
)
6420 static void dumb_resize(DisplayState
*ds
, int w
, int h
)
6424 static void dumb_refresh(DisplayState
*ds
)
6426 #if defined(CONFIG_SDL)
6431 static void dumb_display_init(DisplayState
*ds
)
6436 ds
->dpy_update
= dumb_update
;
6437 ds
->dpy_resize
= dumb_resize
;
6438 ds
->dpy_refresh
= dumb_refresh
;
6439 ds
->gui_timer_interval
= 500;
6443 /***********************************************************/
6446 #define MAX_IO_HANDLERS 64
6448 typedef struct IOHandlerRecord
{
6450 IOCanRWHandler
*fd_read_poll
;
6452 IOHandler
*fd_write
;
6455 /* temporary data */
6457 struct IOHandlerRecord
*next
;
6460 static IOHandlerRecord
*first_io_handler
;
6462 /* XXX: fd_read_poll should be suppressed, but an API change is
6463 necessary in the character devices to suppress fd_can_read(). */
6464 int qemu_set_fd_handler2(int fd
,
6465 IOCanRWHandler
*fd_read_poll
,
6467 IOHandler
*fd_write
,
6470 IOHandlerRecord
**pioh
, *ioh
;
6472 if (!fd_read
&& !fd_write
) {
6473 pioh
= &first_io_handler
;
6478 if (ioh
->fd
== fd
) {
6485 for(ioh
= first_io_handler
; ioh
!= NULL
; ioh
= ioh
->next
) {
6489 ioh
= qemu_mallocz(sizeof(IOHandlerRecord
));
6492 ioh
->next
= first_io_handler
;
6493 first_io_handler
= ioh
;
6496 ioh
->fd_read_poll
= fd_read_poll
;
6497 ioh
->fd_read
= fd_read
;
6498 ioh
->fd_write
= fd_write
;
6499 ioh
->opaque
= opaque
;
6506 int qemu_set_fd_handler(int fd
,
6508 IOHandler
*fd_write
,
6511 return qemu_set_fd_handler2(fd
, NULL
, fd_read
, fd_write
, opaque
);
6514 /***********************************************************/
6515 /* Polling handling */
6517 typedef struct PollingEntry
{
6520 struct PollingEntry
*next
;
6523 static PollingEntry
*first_polling_entry
;
6525 int qemu_add_polling_cb(PollingFunc
*func
, void *opaque
)
6527 PollingEntry
**ppe
, *pe
;
6528 pe
= qemu_mallocz(sizeof(PollingEntry
));
6532 pe
->opaque
= opaque
;
6533 for(ppe
= &first_polling_entry
; *ppe
!= NULL
; ppe
= &(*ppe
)->next
);
6538 void qemu_del_polling_cb(PollingFunc
*func
, void *opaque
)
6540 PollingEntry
**ppe
, *pe
;
6541 for(ppe
= &first_polling_entry
; *ppe
!= NULL
; ppe
= &(*ppe
)->next
) {
6543 if (pe
->func
== func
&& pe
->opaque
== opaque
) {
6552 /***********************************************************/
6553 /* Wait objects support */
6554 typedef struct WaitObjects
{
6556 HANDLE events
[MAXIMUM_WAIT_OBJECTS
+ 1];
6557 WaitObjectFunc
*func
[MAXIMUM_WAIT_OBJECTS
+ 1];
6558 void *opaque
[MAXIMUM_WAIT_OBJECTS
+ 1];
6561 static WaitObjects wait_objects
= {0};
6563 int qemu_add_wait_object(HANDLE handle
, WaitObjectFunc
*func
, void *opaque
)
6565 WaitObjects
*w
= &wait_objects
;
6567 if (w
->num
>= MAXIMUM_WAIT_OBJECTS
)
6569 w
->events
[w
->num
] = handle
;
6570 w
->func
[w
->num
] = func
;
6571 w
->opaque
[w
->num
] = opaque
;
6576 void qemu_del_wait_object(HANDLE handle
, WaitObjectFunc
*func
, void *opaque
)
6579 WaitObjects
*w
= &wait_objects
;
6582 for (i
= 0; i
< w
->num
; i
++) {
6583 if (w
->events
[i
] == handle
)
6586 w
->events
[i
] = w
->events
[i
+ 1];
6587 w
->func
[i
] = w
->func
[i
+ 1];
6588 w
->opaque
[i
] = w
->opaque
[i
+ 1];
6596 #define SELF_ANNOUNCE_ROUNDS 5
6597 #define ETH_P_EXPERIMENTAL 0x01F1 /* just a number */
6598 //#define ETH_P_EXPERIMENTAL 0x0012 /* make it the size of the packet */
6599 #define EXPERIMENTAL_MAGIC 0xf1f23f4f
6601 static int announce_self_create(uint8_t *buf
,
6604 uint32_t magic
= EXPERIMENTAL_MAGIC
;
6605 uint16_t proto
= htons(ETH_P_EXPERIMENTAL
);
6607 /* FIXME: should we send a different packet (arp/rarp/ping)? */
6609 memset(buf
, 0xff, 6); /* h_dst */
6610 memcpy(buf
+ 6, mac_addr
, 6); /* h_src */
6611 memcpy(buf
+ 12, &proto
, 2); /* h_proto */
6612 memcpy(buf
+ 14, &magic
, 4); /* magic */
6614 return 18; /* len */
6617 void qemu_announce_self(void)
6621 VLANClientState
*vc
;
6624 for (i
= 0; i
< nb_nics
; i
++) {
6625 len
= announce_self_create(buf
, nd_table
[i
].macaddr
);
6626 vlan
= nd_table
[i
].vlan
;
6627 for(vc
= vlan
->first_client
; vc
!= NULL
; vc
= vc
->next
) {
6628 if (vc
->fd_read
== tap_receive
) /* send only if tap */
6629 for (j
=0; j
< SELF_ANNOUNCE_ROUNDS
; j
++)
6630 vc
->fd_read(vc
->opaque
, buf
, len
);
6635 /***********************************************************/
6636 /* savevm/loadvm support */
6638 #define IO_BUF_SIZE 32768
6641 QEMUFilePutBufferFunc
*put_buffer
;
6642 QEMUFileGetBufferFunc
*get_buffer
;
6643 QEMUFileCloseFunc
*close
;
6644 QEMUFileRateLimit
*rate_limit
;
6648 int64_t buf_offset
; /* start of buffer when writing, end of buffer
6651 int buf_size
; /* 0 when writing */
6652 uint8_t buf
[IO_BUF_SIZE
];
6657 typedef struct QEMUFileFD
6663 static int fd_get_buffer(void *opaque
, uint8_t *buf
, int64_t pos
, int size
)
6665 QEMUFileFD
*s
= opaque
;
6669 len
= read(s
->fd
, buf
, size
);
6670 } while (len
== -1 && errno
== EINTR
);
6678 static int fd_close(void *opaque
)
6680 QEMUFileFD
*s
= opaque
;
6685 QEMUFile
*qemu_fopen_fd(int fd
)
6687 QEMUFileFD
*s
= qemu_mallocz(sizeof(QEMUFileFD
));
6693 s
->file
= qemu_fopen_ops(s
, NULL
, fd_get_buffer
, fd_close
, NULL
);
6697 typedef struct QEMUFileStdio
6702 static int file_put_buffer(void *opaque
, const uint8_t *buf
,
6703 int64_t pos
, int size
)
6705 QEMUFileStdio
*s
= opaque
;
6706 fseek(s
->outfile
, pos
, SEEK_SET
);
6707 fwrite(buf
, 1, size
, s
->outfile
);
6711 static int file_get_buffer(void *opaque
, uint8_t *buf
, int64_t pos
, int size
)
6713 QEMUFileStdio
*s
= opaque
;
6714 fseek(s
->outfile
, pos
, SEEK_SET
);
6715 return fread(buf
, 1, size
, s
->outfile
);
6718 static int file_close(void *opaque
)
6720 QEMUFileStdio
*s
= opaque
;
6726 QEMUFile
*qemu_fopen(const char *filename
, const char *mode
)
6730 s
= qemu_mallocz(sizeof(QEMUFileStdio
));
6734 s
->outfile
= fopen(filename
, mode
);
6738 if (!strcmp(mode
, "wb"))
6739 return qemu_fopen_ops(s
, file_put_buffer
, NULL
, file_close
, NULL
);
6740 else if (!strcmp(mode
, "rb"))
6741 return qemu_fopen_ops(s
, NULL
, file_get_buffer
, file_close
, NULL
);
6750 typedef struct QEMUFileBdrv
6752 BlockDriverState
*bs
;
6753 int64_t base_offset
;
6756 static int bdrv_put_buffer(void *opaque
, const uint8_t *buf
,
6757 int64_t pos
, int size
)
6759 QEMUFileBdrv
*s
= opaque
;
6760 bdrv_pwrite(s
->bs
, s
->base_offset
+ pos
, buf
, size
);
6764 static int bdrv_get_buffer(void *opaque
, uint8_t *buf
, int64_t pos
, int size
)
6766 QEMUFileBdrv
*s
= opaque
;
6767 return bdrv_pread(s
->bs
, s
->base_offset
+ pos
, buf
, size
);
6770 static int bdrv_fclose(void *opaque
)
6772 QEMUFileBdrv
*s
= opaque
;
6777 static QEMUFile
*qemu_fopen_bdrv(BlockDriverState
*bs
, int64_t offset
, int is_writable
)
6781 s
= qemu_mallocz(sizeof(QEMUFileBdrv
));
6786 s
->base_offset
= offset
;
6789 return qemu_fopen_ops(s
, bdrv_put_buffer
, NULL
, bdrv_fclose
, NULL
);
6791 return qemu_fopen_ops(s
, NULL
, bdrv_get_buffer
, bdrv_fclose
, NULL
);
6794 QEMUFile
*qemu_fopen_ops(void *opaque
, QEMUFilePutBufferFunc
*put_buffer
,
6795 QEMUFileGetBufferFunc
*get_buffer
,
6796 QEMUFileCloseFunc
*close
,
6797 QEMUFileRateLimit
*rate_limit
)
6801 f
= qemu_mallocz(sizeof(QEMUFile
));
6806 f
->put_buffer
= put_buffer
;
6807 f
->get_buffer
= get_buffer
;
6809 f
->rate_limit
= rate_limit
;
6815 int qemu_file_has_error(QEMUFile
*f
)
6817 return f
->has_error
;
6820 void qemu_fflush(QEMUFile
*f
)
6825 if (f
->is_write
&& f
->buf_index
> 0) {
6828 len
= f
->put_buffer(f
->opaque
, f
->buf
, f
->buf_offset
, f
->buf_index
);
6830 f
->buf_offset
+= f
->buf_index
;
6837 static void qemu_fill_buffer(QEMUFile
*f
)
6847 len
= f
->get_buffer(f
->opaque
, f
->buf
, f
->buf_offset
, IO_BUF_SIZE
);
6851 f
->buf_offset
+= len
;
6852 } else if (len
!= -EAGAIN
)
6856 int qemu_fclose(QEMUFile
*f
)
6861 ret
= f
->close(f
->opaque
);
6866 void qemu_file_put_notify(QEMUFile
*f
)
6868 f
->put_buffer(f
->opaque
, NULL
, 0, 0);
6871 void qemu_put_buffer(QEMUFile
*f
, const uint8_t *buf
, int size
)
6875 if (!f
->has_error
&& f
->is_write
== 0 && f
->buf_index
> 0) {
6877 "Attempted to write to buffer while read buffer is not empty\n");
6881 while (!f
->has_error
&& size
> 0) {
6882 l
= IO_BUF_SIZE
- f
->buf_index
;
6885 memcpy(f
->buf
+ f
->buf_index
, buf
, l
);
6890 if (f
->buf_index
>= IO_BUF_SIZE
)
6895 void qemu_put_byte(QEMUFile
*f
, int v
)
6897 if (!f
->has_error
&& f
->is_write
== 0 && f
->buf_index
> 0) {
6899 "Attempted to write to buffer while read buffer is not empty\n");
6903 f
->buf
[f
->buf_index
++] = v
;
6905 if (f
->buf_index
>= IO_BUF_SIZE
)
6909 int qemu_get_buffer(QEMUFile
*f
, uint8_t *buf
, int size1
)
6918 l
= f
->buf_size
- f
->buf_index
;
6920 qemu_fill_buffer(f
);
6921 l
= f
->buf_size
- f
->buf_index
;
6927 memcpy(buf
, f
->buf
+ f
->buf_index
, l
);
6932 return size1
- size
;
6935 int qemu_get_byte(QEMUFile
*f
)
6940 if (f
->buf_index
>= f
->buf_size
) {
6941 qemu_fill_buffer(f
);
6942 if (f
->buf_index
>= f
->buf_size
)
6945 return f
->buf
[f
->buf_index
++];
6948 int64_t qemu_ftell(QEMUFile
*f
)
6950 return f
->buf_offset
- f
->buf_size
+ f
->buf_index
;
6953 int64_t qemu_fseek(QEMUFile
*f
, int64_t pos
, int whence
)
6955 if (whence
== SEEK_SET
) {
6957 } else if (whence
== SEEK_CUR
) {
6958 pos
+= qemu_ftell(f
);
6960 /* SEEK_END not supported */
6963 if (f
->put_buffer
) {
6965 f
->buf_offset
= pos
;
6967 f
->buf_offset
= pos
;
6974 int qemu_file_rate_limit(QEMUFile
*f
)
6977 return f
->rate_limit(f
->opaque
);
6982 void qemu_put_be16(QEMUFile
*f
, unsigned int v
)
6984 qemu_put_byte(f
, v
>> 8);
6985 qemu_put_byte(f
, v
);
6988 void qemu_put_be32(QEMUFile
*f
, unsigned int v
)
6990 qemu_put_byte(f
, v
>> 24);
6991 qemu_put_byte(f
, v
>> 16);
6992 qemu_put_byte(f
, v
>> 8);
6993 qemu_put_byte(f
, v
);
6996 void qemu_put_be64(QEMUFile
*f
, uint64_t v
)
6998 qemu_put_be32(f
, v
>> 32);
6999 qemu_put_be32(f
, v
);
7002 unsigned int qemu_get_be16(QEMUFile
*f
)
7005 v
= qemu_get_byte(f
) << 8;
7006 v
|= qemu_get_byte(f
);
7010 unsigned int qemu_get_be32(QEMUFile
*f
)
7013 v
= qemu_get_byte(f
) << 24;
7014 v
|= qemu_get_byte(f
) << 16;
7015 v
|= qemu_get_byte(f
) << 8;
7016 v
|= qemu_get_byte(f
);
7020 uint64_t qemu_get_be64(QEMUFile
*f
)
7023 v
= (uint64_t)qemu_get_be32(f
) << 32;
7024 v
|= qemu_get_be32(f
);
7028 typedef struct SaveStateEntry
{
7033 SaveLiveStateHandler
*save_live_state
;
7034 SaveStateHandler
*save_state
;
7035 LoadStateHandler
*load_state
;
7037 struct SaveStateEntry
*next
;
7040 static SaveStateEntry
*first_se
;
7042 /* TODO: Individual devices generally have very little idea about the rest
7043 of the system, so instance_id should be removed/replaced.
7044 Meanwhile pass -1 as instance_id if you do not already have a clearly
7045 distinguishing id for all instances of your device class. */
7046 int register_savevm_live(const char *idstr
,
7049 SaveLiveStateHandler
*save_live_state
,
7050 SaveStateHandler
*save_state
,
7051 LoadStateHandler
*load_state
,
7054 SaveStateEntry
*se
, **pse
;
7055 static int global_section_id
;
7057 se
= qemu_malloc(sizeof(SaveStateEntry
));
7060 pstrcpy(se
->idstr
, sizeof(se
->idstr
), idstr
);
7061 se
->instance_id
= (instance_id
== -1) ? 0 : instance_id
;
7062 se
->version_id
= version_id
;
7063 se
->section_id
= global_section_id
++;
7064 se
->save_live_state
= save_live_state
;
7065 se
->save_state
= save_state
;
7066 se
->load_state
= load_state
;
7067 se
->opaque
= opaque
;
7070 /* add at the end of list */
7072 while (*pse
!= NULL
) {
7073 if (instance_id
== -1
7074 && strcmp(se
->idstr
, (*pse
)->idstr
) == 0
7075 && se
->instance_id
<= (*pse
)->instance_id
)
7076 se
->instance_id
= (*pse
)->instance_id
+ 1;
7077 pse
= &(*pse
)->next
;
7083 int register_savevm(const char *idstr
,
7086 SaveStateHandler
*save_state
,
7087 LoadStateHandler
*load_state
,
7090 return register_savevm_live(idstr
, instance_id
, version_id
,
7091 NULL
, save_state
, load_state
, opaque
);
7094 #define QEMU_VM_FILE_MAGIC 0x5145564d
7095 #define QEMU_VM_FILE_VERSION_COMPAT 0x00000002
7096 #define QEMU_VM_FILE_VERSION 0x00000003
7098 #define QEMU_VM_EOF 0x00
7099 #define QEMU_VM_SECTION_START 0x01
7100 #define QEMU_VM_SECTION_PART 0x02
7101 #define QEMU_VM_SECTION_END 0x03
7102 #define QEMU_VM_SECTION_FULL 0x04
7104 int qemu_savevm_state_begin(QEMUFile
*f
)
7108 qemu_put_be32(f
, QEMU_VM_FILE_MAGIC
);
7109 qemu_put_be32(f
, QEMU_VM_FILE_VERSION
);
7111 for (se
= first_se
; se
!= NULL
; se
= se
->next
) {
7114 if (se
->save_live_state
== NULL
)
7118 qemu_put_byte(f
, QEMU_VM_SECTION_START
);
7119 qemu_put_be32(f
, se
->section_id
);
7122 len
= strlen(se
->idstr
);
7123 qemu_put_byte(f
, len
);
7124 qemu_put_buffer(f
, (uint8_t *)se
->idstr
, len
);
7126 qemu_put_be32(f
, se
->instance_id
);
7127 qemu_put_be32(f
, se
->version_id
);
7129 se
->save_live_state(f
, QEMU_VM_SECTION_START
, se
->opaque
);
7132 if (qemu_file_has_error(f
))
7138 int qemu_savevm_state_iterate(QEMUFile
*f
)
7143 for (se
= first_se
; se
!= NULL
; se
= se
->next
) {
7144 if (se
->save_live_state
== NULL
)
7148 qemu_put_byte(f
, QEMU_VM_SECTION_PART
);
7149 qemu_put_be32(f
, se
->section_id
);
7151 ret
&= !!se
->save_live_state(f
, QEMU_VM_SECTION_PART
, se
->opaque
);
7157 if (qemu_file_has_error(f
))
7163 int qemu_savevm_state_complete(QEMUFile
*f
)
7167 for (se
= first_se
; se
!= NULL
; se
= se
->next
) {
7168 if (se
->save_live_state
== NULL
)
7172 qemu_put_byte(f
, QEMU_VM_SECTION_END
);
7173 qemu_put_be32(f
, se
->section_id
);
7175 se
->save_live_state(f
, QEMU_VM_SECTION_END
, se
->opaque
);
7178 for(se
= first_se
; se
!= NULL
; se
= se
->next
) {
7181 if (se
->save_state
== NULL
)
7185 qemu_put_byte(f
, QEMU_VM_SECTION_FULL
);
7186 qemu_put_be32(f
, se
->section_id
);
7189 len
= strlen(se
->idstr
);
7190 qemu_put_byte(f
, len
);
7191 qemu_put_buffer(f
, (uint8_t *)se
->idstr
, len
);
7193 qemu_put_be32(f
, se
->instance_id
);
7194 qemu_put_be32(f
, se
->version_id
);
7196 se
->save_state(f
, se
->opaque
);
7199 qemu_put_byte(f
, QEMU_VM_EOF
);
7201 if (qemu_file_has_error(f
))
7207 int qemu_savevm_state(QEMUFile
*f
)
7209 int saved_vm_running
;
7212 saved_vm_running
= vm_running
;
7217 ret
= qemu_savevm_state_begin(f
);
7222 ret
= qemu_savevm_state_iterate(f
);
7227 ret
= qemu_savevm_state_complete(f
);
7230 if (qemu_file_has_error(f
))
7233 if (!ret
&& saved_vm_running
)
7239 static SaveStateEntry
*find_se(const char *idstr
, int instance_id
)
7243 for(se
= first_se
; se
!= NULL
; se
= se
->next
) {
7244 if (!strcmp(se
->idstr
, idstr
) &&
7245 instance_id
== se
->instance_id
)
7251 typedef struct LoadStateEntry
{
7255 struct LoadStateEntry
*next
;
7258 static int qemu_loadvm_state_v2(QEMUFile
*f
)
7261 int len
, ret
, instance_id
, record_len
, version_id
;
7262 int64_t total_len
, end_pos
, cur_pos
;
7265 total_len
= qemu_get_be64(f
);
7266 end_pos
= total_len
+ qemu_ftell(f
);
7268 if (qemu_ftell(f
) >= end_pos
)
7270 len
= qemu_get_byte(f
);
7271 qemu_get_buffer(f
, (uint8_t *)idstr
, len
);
7273 instance_id
= qemu_get_be32(f
);
7274 version_id
= qemu_get_be32(f
);
7275 record_len
= qemu_get_be32(f
);
7276 cur_pos
= qemu_ftell(f
);
7277 se
= find_se(idstr
, instance_id
);
7279 fprintf(stderr
, "qemu: warning: instance 0x%x of device '%s' not present in current VM\n",
7280 instance_id
, idstr
);
7282 ret
= se
->load_state(f
, se
->opaque
, version_id
);
7284 fprintf(stderr
, "qemu: warning: error while loading state for instance 0x%x of device '%s'\n",
7285 instance_id
, idstr
);
7289 /* always seek to exact end of record */
7290 qemu_fseek(f
, cur_pos
+ record_len
, SEEK_SET
);
7297 int qemu_loadvm_state(QEMUFile
*f
)
7299 LoadStateEntry
*first_le
= NULL
;
7300 uint8_t section_type
;
7304 v
= qemu_get_be32(f
);
7305 if (v
!= QEMU_VM_FILE_MAGIC
)
7308 v
= qemu_get_be32(f
);
7309 if (v
== QEMU_VM_FILE_VERSION_COMPAT
)
7310 return qemu_loadvm_state_v2(f
);
7311 if (v
!= QEMU_VM_FILE_VERSION
)
7314 while ((section_type
= qemu_get_byte(f
)) != QEMU_VM_EOF
) {
7315 uint32_t instance_id
, version_id
, section_id
;
7321 switch (section_type
) {
7322 case QEMU_VM_SECTION_START
:
7323 case QEMU_VM_SECTION_FULL
:
7324 /* Read section start */
7325 section_id
= qemu_get_be32(f
);
7326 len
= qemu_get_byte(f
);
7327 qemu_get_buffer(f
, (uint8_t *)idstr
, len
);
7329 instance_id
= qemu_get_be32(f
);
7330 version_id
= qemu_get_be32(f
);
7332 /* Find savevm section */
7333 se
= find_se(idstr
, instance_id
);
7335 fprintf(stderr
, "Unknown savevm section or instance '%s' %d\n", idstr
, instance_id
);
7340 /* Validate version */
7341 if (version_id
> se
->version_id
) {
7342 fprintf(stderr
, "savevm: unsupported version %d for '%s' v%d\n",
7343 version_id
, idstr
, se
->version_id
);
7349 le
= qemu_mallocz(sizeof(*le
));
7356 le
->section_id
= section_id
;
7357 le
->version_id
= version_id
;
7358 le
->next
= first_le
;
7361 le
->se
->load_state(f
, le
->se
->opaque
, le
->version_id
);
7363 case QEMU_VM_SECTION_PART
:
7364 case QEMU_VM_SECTION_END
:
7365 section_id
= qemu_get_be32(f
);
7367 for (le
= first_le
; le
&& le
->section_id
!= section_id
; le
= le
->next
);
7369 fprintf(stderr
, "Unknown savevm section %d\n", section_id
);
7374 le
->se
->load_state(f
, le
->se
->opaque
, le
->version_id
);
7377 fprintf(stderr
, "Unknown savevm section type %d\n", section_type
);
7387 LoadStateEntry
*le
= first_le
;
7388 first_le
= first_le
->next
;
7392 if (qemu_file_has_error(f
))
7398 /* device can contain snapshots */
7399 static int bdrv_can_snapshot(BlockDriverState
*bs
)
7402 !bdrv_is_removable(bs
) &&
7403 !bdrv_is_read_only(bs
));
7406 /* device must be snapshots in order to have a reliable snapshot */
7407 static int bdrv_has_snapshot(BlockDriverState
*bs
)
7410 !bdrv_is_removable(bs
) &&
7411 !bdrv_is_read_only(bs
));
7414 static BlockDriverState
*get_bs_snapshots(void)
7416 BlockDriverState
*bs
;
7420 return bs_snapshots
;
7421 for(i
= 0; i
<= nb_drives
; i
++) {
7422 bs
= drives_table
[i
].bdrv
;
7423 if (bdrv_can_snapshot(bs
))
7432 static int bdrv_snapshot_find(BlockDriverState
*bs
, QEMUSnapshotInfo
*sn_info
,
7435 QEMUSnapshotInfo
*sn_tab
, *sn
;
7439 nb_sns
= bdrv_snapshot_list(bs
, &sn_tab
);
7442 for(i
= 0; i
< nb_sns
; i
++) {
7444 if (!strcmp(sn
->id_str
, name
) || !strcmp(sn
->name
, name
)) {
7454 void do_savevm(const char *name
)
7456 BlockDriverState
*bs
, *bs1
;
7457 QEMUSnapshotInfo sn1
, *sn
= &sn1
, old_sn1
, *old_sn
= &old_sn1
;
7458 int must_delete
, ret
, i
;
7459 BlockDriverInfo bdi1
, *bdi
= &bdi1
;
7461 int saved_vm_running
;
7468 bs
= get_bs_snapshots();
7470 term_printf("No block device can accept snapshots\n");
7474 /* ??? Should this occur after vm_stop? */
7477 saved_vm_running
= vm_running
;
7482 ret
= bdrv_snapshot_find(bs
, old_sn
, name
);
7487 memset(sn
, 0, sizeof(*sn
));
7489 pstrcpy(sn
->name
, sizeof(sn
->name
), old_sn
->name
);
7490 pstrcpy(sn
->id_str
, sizeof(sn
->id_str
), old_sn
->id_str
);
7493 pstrcpy(sn
->name
, sizeof(sn
->name
), name
);
7496 /* fill auxiliary fields */
7499 sn
->date_sec
= tb
.time
;
7500 sn
->date_nsec
= tb
.millitm
* 1000000;
7502 gettimeofday(&tv
, NULL
);
7503 sn
->date_sec
= tv
.tv_sec
;
7504 sn
->date_nsec
= tv
.tv_usec
* 1000;
7506 sn
->vm_clock_nsec
= qemu_get_clock(vm_clock
);
7508 if (bdrv_get_info(bs
, bdi
) < 0 || bdi
->vm_state_offset
<= 0) {
7509 term_printf("Device %s does not support VM state snapshots\n",
7510 bdrv_get_device_name(bs
));
7514 /* save the VM state */
7515 f
= qemu_fopen_bdrv(bs
, bdi
->vm_state_offset
, 1);
7517 term_printf("Could not open VM state file\n");
7520 ret
= qemu_savevm_state(f
);
7521 sn
->vm_state_size
= qemu_ftell(f
);
7524 term_printf("Error %d while writing VM\n", ret
);
7528 /* create the snapshots */
7530 for(i
= 0; i
< nb_drives
; i
++) {
7531 bs1
= drives_table
[i
].bdrv
;
7532 if (bdrv_has_snapshot(bs1
)) {
7534 ret
= bdrv_snapshot_delete(bs1
, old_sn
->id_str
);
7536 term_printf("Error while deleting snapshot on '%s'\n",
7537 bdrv_get_device_name(bs1
));
7540 ret
= bdrv_snapshot_create(bs1
, sn
);
7542 term_printf("Error while creating snapshot on '%s'\n",
7543 bdrv_get_device_name(bs1
));
7549 if (saved_vm_running
)
7553 void do_loadvm(const char *name
)
7555 BlockDriverState
*bs
, *bs1
;
7556 BlockDriverInfo bdi1
, *bdi
= &bdi1
;
7559 int saved_vm_running
;
7561 bs
= get_bs_snapshots();
7563 term_printf("No block device supports snapshots\n");
7567 /* Flush all IO requests so they don't interfere with the new state. */
7570 saved_vm_running
= vm_running
;
7573 for(i
= 0; i
<= nb_drives
; i
++) {
7574 bs1
= drives_table
[i
].bdrv
;
7575 if (bdrv_has_snapshot(bs1
)) {
7576 ret
= bdrv_snapshot_goto(bs1
, name
);
7579 term_printf("Warning: ");
7582 term_printf("Snapshots not supported on device '%s'\n",
7583 bdrv_get_device_name(bs1
));
7586 term_printf("Could not find snapshot '%s' on device '%s'\n",
7587 name
, bdrv_get_device_name(bs1
));
7590 term_printf("Error %d while activating snapshot on '%s'\n",
7591 ret
, bdrv_get_device_name(bs1
));
7594 /* fatal on snapshot block device */
7601 if (bdrv_get_info(bs
, bdi
) < 0 || bdi
->vm_state_offset
<= 0) {
7602 term_printf("Device %s does not support VM state snapshots\n",
7603 bdrv_get_device_name(bs
));
7607 /* restore the VM state */
7608 f
= qemu_fopen_bdrv(bs
, bdi
->vm_state_offset
, 0);
7610 term_printf("Could not open VM state file\n");
7613 ret
= qemu_loadvm_state(f
);
7616 term_printf("Error %d while loading VM state\n", ret
);
7619 if (saved_vm_running
)
7623 void do_delvm(const char *name
)
7625 BlockDriverState
*bs
, *bs1
;
7628 bs
= get_bs_snapshots();
7630 term_printf("No block device supports snapshots\n");
7634 for(i
= 0; i
<= nb_drives
; i
++) {
7635 bs1
= drives_table
[i
].bdrv
;
7636 if (bdrv_has_snapshot(bs1
)) {
7637 ret
= bdrv_snapshot_delete(bs1
, name
);
7639 if (ret
== -ENOTSUP
)
7640 term_printf("Snapshots not supported on device '%s'\n",
7641 bdrv_get_device_name(bs1
));
7643 term_printf("Error %d while deleting snapshot on '%s'\n",
7644 ret
, bdrv_get_device_name(bs1
));
7650 void do_info_snapshots(void)
7652 BlockDriverState
*bs
, *bs1
;
7653 QEMUSnapshotInfo
*sn_tab
, *sn
;
7657 bs
= get_bs_snapshots();
7659 term_printf("No available block device supports snapshots\n");
7662 term_printf("Snapshot devices:");
7663 for(i
= 0; i
<= nb_drives
; i
++) {
7664 bs1
= drives_table
[i
].bdrv
;
7665 if (bdrv_has_snapshot(bs1
)) {
7667 term_printf(" %s", bdrv_get_device_name(bs1
));
7672 nb_sns
= bdrv_snapshot_list(bs
, &sn_tab
);
7674 term_printf("bdrv_snapshot_list: error %d\n", nb_sns
);
7677 term_printf("Snapshot list (from %s):\n", bdrv_get_device_name(bs
));
7678 term_printf("%s\n", bdrv_snapshot_dump(buf
, sizeof(buf
), NULL
));
7679 for(i
= 0; i
< nb_sns
; i
++) {
7681 term_printf("%s\n", bdrv_snapshot_dump(buf
, sizeof(buf
), sn
));
7686 /***********************************************************/
7687 /* ram save/restore */
7689 static int ram_get_page(QEMUFile
*f
, uint8_t *buf
, int len
)
7693 v
= qemu_get_byte(f
);
7696 if (qemu_get_buffer(f
, buf
, len
) != len
)
7700 v
= qemu_get_byte(f
);
7701 memset(buf
, v
, len
);
7707 if (qemu_file_has_error(f
))
7713 static int ram_load_v1(QEMUFile
*f
, void *opaque
)
7718 if (qemu_get_be32(f
) != phys_ram_size
)
7720 for(i
= 0; i
< phys_ram_size
; i
+= TARGET_PAGE_SIZE
) {
7721 if (kvm_enabled() && (i
>=0xa0000) && (i
<0xc0000)) /* do not access video-addresses */
7723 ret
= ram_get_page(f
, phys_ram_base
+ i
, TARGET_PAGE_SIZE
);
7730 #define BDRV_HASH_BLOCK_SIZE 1024
7731 #define IOBUF_SIZE 4096
7732 #define RAM_CBLOCK_MAGIC 0xfabe
7734 typedef struct RamDecompressState
{
7737 uint8_t buf
[IOBUF_SIZE
];
7738 } RamDecompressState
;
7740 static int ram_decompress_open(RamDecompressState
*s
, QEMUFile
*f
)
7743 memset(s
, 0, sizeof(*s
));
7745 ret
= inflateInit(&s
->zstream
);
7751 static int ram_decompress_buf(RamDecompressState
*s
, uint8_t *buf
, int len
)
7755 s
->zstream
.avail_out
= len
;
7756 s
->zstream
.next_out
= buf
;
7757 while (s
->zstream
.avail_out
> 0) {
7758 if (s
->zstream
.avail_in
== 0) {
7759 if (qemu_get_be16(s
->f
) != RAM_CBLOCK_MAGIC
)
7761 clen
= qemu_get_be16(s
->f
);
7762 if (clen
> IOBUF_SIZE
)
7764 qemu_get_buffer(s
->f
, s
->buf
, clen
);
7765 s
->zstream
.avail_in
= clen
;
7766 s
->zstream
.next_in
= s
->buf
;
7768 ret
= inflate(&s
->zstream
, Z_PARTIAL_FLUSH
);
7769 if (ret
!= Z_OK
&& ret
!= Z_STREAM_END
) {
7776 static void ram_decompress_close(RamDecompressState
*s
)
7778 inflateEnd(&s
->zstream
);
7781 #define RAM_SAVE_FLAG_FULL 0x01
7782 #define RAM_SAVE_FLAG_COMPRESS 0x02
7783 #define RAM_SAVE_FLAG_MEM_SIZE 0x04
7784 #define RAM_SAVE_FLAG_PAGE 0x08
7785 #define RAM_SAVE_FLAG_EOS 0x10
7787 static int is_dup_page(uint8_t *page
, uint8_t ch
)
7789 uint32_t val
= ch
<< 24 | ch
<< 16 | ch
<< 8 | ch
;
7790 uint32_t *array
= (uint32_t *)page
;
7793 for (i
= 0; i
< (TARGET_PAGE_SIZE
/ 4); i
++) {
7794 if (array
[i
] != val
)
7801 static int ram_save_block(QEMUFile
*f
)
7803 static ram_addr_t current_addr
= 0;
7804 ram_addr_t saved_addr
= current_addr
;
7805 ram_addr_t addr
= 0;
7808 while (addr
< phys_ram_size
) {
7809 if (kvm_enabled() && current_addr
== 0)
7810 kvm_update_dirty_pages_log(); /* FIXME: propagate errors */
7811 if (cpu_physical_memory_get_dirty(current_addr
, MIGRATION_DIRTY_FLAG
)) {
7814 cpu_physical_memory_reset_dirty(current_addr
,
7815 current_addr
+ TARGET_PAGE_SIZE
,
7816 MIGRATION_DIRTY_FLAG
);
7818 ch
= *(phys_ram_base
+ current_addr
);
7820 if (is_dup_page(phys_ram_base
+ current_addr
, ch
)) {
7821 qemu_put_be64(f
, current_addr
| RAM_SAVE_FLAG_COMPRESS
);
7822 qemu_put_byte(f
, ch
);
7824 qemu_put_be64(f
, current_addr
| RAM_SAVE_FLAG_PAGE
);
7825 qemu_put_buffer(f
, phys_ram_base
+ current_addr
, TARGET_PAGE_SIZE
);
7831 addr
+= TARGET_PAGE_SIZE
;
7832 current_addr
= (saved_addr
+ addr
) % phys_ram_size
;
7838 static ram_addr_t ram_save_threshold
= 10;
7840 static ram_addr_t
ram_save_remaining(void)
7843 ram_addr_t count
= 0;
7845 for (addr
= 0; addr
< phys_ram_size
; addr
+= TARGET_PAGE_SIZE
) {
7846 if (cpu_physical_memory_get_dirty(addr
, MIGRATION_DIRTY_FLAG
))
7853 static int ram_save_live(QEMUFile
*f
, int stage
, void *opaque
)
7858 /* Make sure all dirty bits are set */
7859 for (addr
= 0; addr
< phys_ram_size
; addr
+= TARGET_PAGE_SIZE
) {
7860 if (!cpu_physical_memory_get_dirty(addr
, MIGRATION_DIRTY_FLAG
))
7861 cpu_physical_memory_set_dirty(addr
);
7864 /* Enable dirty memory tracking */
7865 cpu_physical_memory_set_dirty_tracking(1);
7867 qemu_put_be64(f
, phys_ram_size
| RAM_SAVE_FLAG_MEM_SIZE
);
7870 while (!qemu_file_rate_limit(f
)) {
7873 ret
= ram_save_block(f
);
7874 if (ret
== 0) /* no more blocks */
7878 /* try transferring iterative blocks of memory */
7881 cpu_physical_memory_set_dirty_tracking(0);
7883 /* flush all remaining blocks regardless of rate limiting */
7884 while (ram_save_block(f
) != 0);
7887 qemu_put_be64(f
, RAM_SAVE_FLAG_EOS
);
7889 return (stage
== 2) && (ram_save_remaining() < ram_save_threshold
);
7892 static int ram_load_dead(QEMUFile
*f
, void *opaque
)
7894 RamDecompressState s1
, *s
= &s1
;
7898 if (ram_decompress_open(s
, f
) < 0)
7900 for(i
= 0; i
< phys_ram_size
; i
+= BDRV_HASH_BLOCK_SIZE
) {
7901 if (kvm_enabled() && (i
>=0xa0000) && (i
<0xc0000)) /* do not access video-addresses */
7903 if (ram_decompress_buf(s
, buf
, 1) < 0) {
7904 fprintf(stderr
, "Error while reading ram block header\n");
7908 if (ram_decompress_buf(s
, phys_ram_base
+ i
, BDRV_HASH_BLOCK_SIZE
) < 0) {
7909 fprintf(stderr
, "Error while reading ram block address=0x%08" PRIx64
, (uint64_t)i
);
7914 printf("Error block header\n");
7918 ram_decompress_close(s
);
7923 static int ram_load(QEMUFile
*f
, void *opaque
, int version_id
)
7928 if (version_id
== 1)
7929 return ram_load_v1(f
, opaque
);
7931 if (version_id
== 2) {
7932 if (qemu_get_be32(f
) != phys_ram_size
)
7934 return ram_load_dead(f
, opaque
);
7937 if (version_id
!= 3)
7941 addr
= qemu_get_be64(f
);
7943 flags
= addr
& ~TARGET_PAGE_MASK
;
7944 addr
&= TARGET_PAGE_MASK
;
7946 if (flags
& RAM_SAVE_FLAG_MEM_SIZE
) {
7947 if (addr
!= phys_ram_size
)
7951 if (flags
& RAM_SAVE_FLAG_FULL
) {
7952 if (ram_load_dead(f
, opaque
) < 0)
7956 if (flags
& RAM_SAVE_FLAG_COMPRESS
) {
7957 uint8_t ch
= qemu_get_byte(f
);
7958 memset(phys_ram_base
+ addr
, ch
, TARGET_PAGE_SIZE
);
7959 } else if (flags
& RAM_SAVE_FLAG_PAGE
)
7960 qemu_get_buffer(f
, phys_ram_base
+ addr
, TARGET_PAGE_SIZE
);
7961 } while (!(flags
& RAM_SAVE_FLAG_EOS
));
7966 /***********************************************************/
7967 /* bottom halves (can be seen as timers which expire ASAP) */
7976 static QEMUBH
*first_bh
= NULL
;
7978 QEMUBH
*qemu_bh_new(QEMUBHFunc
*cb
, void *opaque
)
7981 bh
= qemu_mallocz(sizeof(QEMUBH
));
7985 bh
->opaque
= opaque
;
7989 int qemu_bh_poll(void)
8008 void qemu_bh_schedule(QEMUBH
*bh
)
8010 CPUState
*env
= cpu_single_env
;
8014 bh
->next
= first_bh
;
8017 /* stop the currently executing CPU to execute the BH ASAP */
8019 cpu_interrupt(env
, CPU_INTERRUPT_EXIT
);
8024 void qemu_bh_cancel(QEMUBH
*bh
)
8027 if (bh
->scheduled
) {
8030 pbh
= &(*pbh
)->next
;
8036 void qemu_bh_delete(QEMUBH
*bh
)
8042 /***********************************************************/
8043 /* machine registration */
8045 static QEMUMachine
*first_machine
= NULL
;
8046 QEMUMachine
*current_machine
= NULL
;
8048 int qemu_register_machine(QEMUMachine
*m
)
8051 pm
= &first_machine
;
8059 static QEMUMachine
*find_machine(const char *name
)
8063 for(m
= first_machine
; m
!= NULL
; m
= m
->next
) {
8064 if (!strcmp(m
->name
, name
))
8070 /***********************************************************/
8071 /* main execution loop */
8073 static void gui_update(void *opaque
)
8075 DisplayState
*ds
= opaque
;
8076 ds
->dpy_refresh(ds
);
8077 qemu_mod_timer(ds
->gui_timer
,
8078 (ds
->gui_timer_interval
?
8079 ds
->gui_timer_interval
:
8080 GUI_REFRESH_INTERVAL
)
8081 + qemu_get_clock(rt_clock
));
8084 struct vm_change_state_entry
{
8085 VMChangeStateHandler
*cb
;
8087 LIST_ENTRY (vm_change_state_entry
) entries
;
8090 static LIST_HEAD(vm_change_state_head
, vm_change_state_entry
) vm_change_state_head
;
8092 VMChangeStateEntry
*qemu_add_vm_change_state_handler(VMChangeStateHandler
*cb
,
8095 VMChangeStateEntry
*e
;
8097 e
= qemu_mallocz(sizeof (*e
));
8103 LIST_INSERT_HEAD(&vm_change_state_head
, e
, entries
);
8107 void qemu_del_vm_change_state_handler(VMChangeStateEntry
*e
)
8109 LIST_REMOVE (e
, entries
);
8113 static void vm_state_notify(int running
)
8115 VMChangeStateEntry
*e
;
8117 for (e
= vm_change_state_head
.lh_first
; e
; e
= e
->entries
.le_next
) {
8118 e
->cb(e
->opaque
, running
);
8122 /* XXX: support several handlers */
8123 static VMStopHandler
*vm_stop_cb
;
8124 static void *vm_stop_opaque
;
8126 int qemu_add_vm_stop_handler(VMStopHandler
*cb
, void *opaque
)
8129 vm_stop_opaque
= opaque
;
8133 void qemu_del_vm_stop_handler(VMStopHandler
*cb
, void *opaque
)
8144 qemu_rearm_alarm_timer(alarm_timer
);
8148 void vm_stop(int reason
)
8151 cpu_disable_ticks();
8155 vm_stop_cb(vm_stop_opaque
, reason
);
8162 /* reset/shutdown handler */
8164 typedef struct QEMUResetEntry
{
8165 QEMUResetHandler
*func
;
8167 struct QEMUResetEntry
*next
;
8170 static QEMUResetEntry
*first_reset_entry
;
8171 static int reset_requested
;
8172 static int shutdown_requested
;
8173 static int powerdown_requested
;
8175 int qemu_shutdown_requested(void)
8177 int r
= shutdown_requested
;
8178 shutdown_requested
= 0;
8182 int qemu_reset_requested(void)
8184 int r
= reset_requested
;
8185 reset_requested
= 0;
8189 int qemu_powerdown_requested(void)
8191 int r
= powerdown_requested
;
8192 powerdown_requested
= 0;
8196 void qemu_register_reset(QEMUResetHandler
*func
, void *opaque
)
8198 QEMUResetEntry
**pre
, *re
;
8200 pre
= &first_reset_entry
;
8201 while (*pre
!= NULL
)
8202 pre
= &(*pre
)->next
;
8203 re
= qemu_mallocz(sizeof(QEMUResetEntry
));
8205 re
->opaque
= opaque
;
8210 void qemu_system_reset(void)
8214 /* reset all devices */
8215 for(re
= first_reset_entry
; re
!= NULL
; re
= re
->next
) {
8216 re
->func(re
->opaque
);
8220 void qemu_system_reset_request(void)
8223 shutdown_requested
= 1;
8225 reset_requested
= 1;
8228 cpu_interrupt(cpu_single_env
, CPU_INTERRUPT_EXIT
);
8232 void qemu_system_shutdown_request(void)
8234 shutdown_requested
= 1;
8236 cpu_interrupt(cpu_single_env
, CPU_INTERRUPT_EXIT
);
8239 void qemu_system_powerdown_request(void)
8241 powerdown_requested
= 1;
8243 cpu_interrupt(cpu_single_env
, CPU_INTERRUPT_EXIT
);
8246 static int qemu_select(int max_fd
, fd_set
*rfds
, fd_set
*wfds
, fd_set
*xfds
,
8251 /* KVM holds a mutex while QEMU code is running, we need hooks to
8252 release the mutex whenever QEMU code sleeps. */
8256 ret
= select(max_fd
, rfds
, wfds
, xfds
, tv
);
8263 void main_loop_wait(int timeout
)
8265 IOHandlerRecord
*ioh
;
8266 fd_set rfds
, wfds
, xfds
;
8275 /* XXX: need to suppress polling by better using win32 events */
8277 for(pe
= first_polling_entry
; pe
!= NULL
; pe
= pe
->next
) {
8278 ret
|= pe
->func(pe
->opaque
);
8283 WaitObjects
*w
= &wait_objects
;
8285 ret
= WaitForMultipleObjects(w
->num
, w
->events
, FALSE
, timeout
);
8286 if (WAIT_OBJECT_0
+ 0 <= ret
&& ret
<= WAIT_OBJECT_0
+ w
->num
- 1) {
8287 if (w
->func
[ret
- WAIT_OBJECT_0
])
8288 w
->func
[ret
- WAIT_OBJECT_0
](w
->opaque
[ret
- WAIT_OBJECT_0
]);
8290 /* Check for additional signaled events */
8291 for(i
= (ret
- WAIT_OBJECT_0
+ 1); i
< w
->num
; i
++) {
8293 /* Check if event is signaled */
8294 ret2
= WaitForSingleObject(w
->events
[i
], 0);
8295 if(ret2
== WAIT_OBJECT_0
) {
8297 w
->func
[i
](w
->opaque
[i
]);
8298 } else if (ret2
== WAIT_TIMEOUT
) {
8300 err
= GetLastError();
8301 fprintf(stderr
, "WaitForSingleObject error %d %d\n", i
, err
);
8304 } else if (ret
== WAIT_TIMEOUT
) {
8306 err
= GetLastError();
8307 fprintf(stderr
, "WaitForMultipleObjects error %d %d\n", ret
, err
);
8311 /* poll any events */
8312 /* XXX: separate device handlers from system ones */
8317 for(ioh
= first_io_handler
; ioh
!= NULL
; ioh
= ioh
->next
) {
8321 (!ioh
->fd_read_poll
||
8322 ioh
->fd_read_poll(ioh
->opaque
) != 0)) {
8323 FD_SET(ioh
->fd
, &rfds
);
8327 if (ioh
->fd_write
) {
8328 FD_SET(ioh
->fd
, &wfds
);
8338 tv
.tv_sec
= timeout
/ 1000;
8339 tv
.tv_usec
= (timeout
% 1000) * 1000;
8341 #if defined(CONFIG_SLIRP)
8343 slirp_select_fill(&nfds
, &rfds
, &wfds
, &xfds
);
8346 ret
= qemu_select(nfds
+ 1, &rfds
, &wfds
, &xfds
, &tv
);
8348 IOHandlerRecord
**pioh
;
8350 for(ioh
= first_io_handler
; ioh
!= NULL
; ioh
= ioh
->next
) {
8351 if (!ioh
->deleted
&& ioh
->fd_read
&& FD_ISSET(ioh
->fd
, &rfds
)) {
8352 ioh
->fd_read(ioh
->opaque
);
8353 if (!(ioh
->fd_read_poll
&& ioh
->fd_read_poll(ioh
->opaque
)))
8354 FD_CLR(ioh
->fd
, &rfds
);
8356 if (!ioh
->deleted
&& ioh
->fd_write
&& FD_ISSET(ioh
->fd
, &wfds
)) {
8357 ioh
->fd_write(ioh
->opaque
);
8361 /* remove deleted IO handlers */
8362 pioh
= &first_io_handler
;
8372 #if defined(CONFIG_SLIRP)
8379 slirp_select_poll(&rfds
, &wfds
, &xfds
);
8384 if (likely(!cur_cpu
|| !(cur_cpu
->singlestep_enabled
& SSTEP_NOTIMER
)))
8385 qemu_run_timers(&active_timers
[QEMU_TIMER_VIRTUAL
],
8386 qemu_get_clock(vm_clock
));
8387 /* run dma transfers, if any */
8391 /* real time timers */
8392 qemu_run_timers(&active_timers
[QEMU_TIMER_REALTIME
],
8393 qemu_get_clock(rt_clock
));
8395 if (alarm_timer
->flags
& ALARM_FLAG_EXPIRED
) {
8396 alarm_timer
->flags
&= ~(ALARM_FLAG_EXPIRED
);
8397 qemu_rearm_alarm_timer(alarm_timer
);
8400 /* Check bottom-halves last in case any of the earlier events triggered
8406 static int main_loop(void)
8409 #ifdef CONFIG_PROFILER
8415 if (kvm_enabled()) {
8417 cpu_disable_ticks();
8421 cur_cpu
= first_cpu
;
8422 next_cpu
= cur_cpu
->next_cpu
?: first_cpu
;
8429 #ifdef CONFIG_PROFILER
8430 ti
= profile_getclock();
8435 qemu_icount
-= (env
->icount_decr
.u16
.low
+ env
->icount_extra
);
8436 env
->icount_decr
.u16
.low
= 0;
8437 env
->icount_extra
= 0;
8438 count
= qemu_next_deadline();
8439 count
= (count
+ (1 << icount_time_shift
) - 1)
8440 >> icount_time_shift
;
8441 qemu_icount
+= count
;
8442 decr
= (count
> 0xffff) ? 0xffff : count
;
8444 env
->icount_decr
.u16
.low
= decr
;
8445 env
->icount_extra
= count
;
8447 ret
= cpu_exec(env
);
8448 #ifdef CONFIG_PROFILER
8449 qemu_time
+= profile_getclock() - ti
;
8452 /* Fold pending instructions back into the
8453 instruction counter, and clear the interrupt flag. */
8454 qemu_icount
-= (env
->icount_decr
.u16
.low
8455 + env
->icount_extra
);
8456 env
->icount_decr
.u32
= 0;
8457 env
->icount_extra
= 0;
8459 next_cpu
= env
->next_cpu
?: first_cpu
;
8460 if (event_pending
&& likely(ret
!= EXCP_DEBUG
)) {
8461 ret
= EXCP_INTERRUPT
;
8465 if (ret
== EXCP_HLT
) {
8466 /* Give the next CPU a chance to run. */
8470 if (ret
!= EXCP_HALTED
)
8472 /* all CPUs are halted ? */
8478 if (shutdown_requested
) {
8479 ret
= EXCP_INTERRUPT
;
8487 if (reset_requested
) {
8488 reset_requested
= 0;
8489 qemu_system_reset();
8491 kvm_load_registers(env
);
8492 ret
= EXCP_INTERRUPT
;
8494 if (powerdown_requested
) {
8495 powerdown_requested
= 0;
8496 qemu_system_powerdown();
8497 ret
= EXCP_INTERRUPT
;
8499 if (unlikely(ret
== EXCP_DEBUG
)) {
8500 vm_stop(EXCP_DEBUG
);
8502 /* If all cpus are halted then wait until the next IRQ */
8503 /* XXX: use timeout computed from timers */
8504 if (ret
== EXCP_HALTED
) {
8508 /* Advance virtual time to the next event. */
8509 if (use_icount
== 1) {
8510 /* When not using an adaptive execution frequency
8511 we tend to get badly out of sync with real time,
8512 so just delay for a reasonable amount of time. */
8515 delta
= cpu_get_icount() - cpu_get_clock();
8518 /* If virtual time is ahead of real time then just
8520 timeout
= (delta
/ 1000000) + 1;
8522 /* Wait for either IO to occur or the next
8524 add
= qemu_next_deadline();
8525 /* We advance the timer before checking for IO.
8526 Limit the amount we advance so that early IO
8527 activity won't get the guest too far ahead. */
8531 add
= (add
+ (1 << icount_time_shift
) - 1)
8532 >> icount_time_shift
;
8534 timeout
= delta
/ 1000000;
8545 if (shutdown_requested
) {
8546 ret
= EXCP_INTERRUPT
;
8551 #ifdef CONFIG_PROFILER
8552 ti
= profile_getclock();
8554 main_loop_wait(timeout
);
8555 #ifdef CONFIG_PROFILER
8556 dev_time
+= profile_getclock() - ti
;
8559 cpu_disable_ticks();
8563 static void help(int exitcode
)
8565 printf("QEMU PC emulator version " QEMU_VERSION
" (" KVM_VERSION
")"
8566 ", Copyright (c) 2003-2008 Fabrice Bellard\n"
8567 "usage: %s [options] [disk_image]\n"
8569 "'disk_image' is a raw hard image image for IDE hard disk 0\n"
8571 "Standard options:\n"
8572 "-M machine select emulated machine (-M ? for list)\n"
8573 "-cpu cpu select CPU (-cpu ? for list)\n"
8574 "-fda/-fdb file use 'file' as floppy disk 0/1 image\n"
8575 "-hda/-hdb file use 'file' as IDE hard disk 0/1 image\n"
8576 "-hdc/-hdd file use 'file' as IDE hard disk 2/3 image\n"
8577 "-cdrom file use 'file' as IDE cdrom image (cdrom is ide1 master)\n"
8578 "-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]\n"
8579 " [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off]\n"
8580 " [,cache=writethrough|writeback|none][,format=f]\n"
8582 " use 'file' as a drive image\n"
8583 "-mtdblock file use 'file' as on-board Flash memory image\n"
8584 "-sd file use 'file' as SecureDigital card image\n"
8585 "-pflash file use 'file' as a parallel flash image\n"
8586 "-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n)\n"
8587 "-snapshot write to temporary files instead of disk image files\n"
8589 "-no-frame open SDL window without a frame and window decorations\n"
8590 "-alt-grab use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt)\n"
8591 "-no-quit disable SDL window close capability\n"
8594 "-no-fd-bootchk disable boot signature checking for floppy disks\n"
8596 "-m megs set virtual RAM size to megs MB [default=%d]\n"
8597 "-smp n set the number of CPUs to 'n' [default=1]\n"
8598 "-nographic disable graphical output and redirect serial I/Os to console\n"
8599 "-portrait rotate graphical output 90 deg left (only PXA LCD)\n"
8601 "-k language use keyboard layout (for example \"fr\" for French)\n"
8604 "-audio-help print list of audio drivers and their options\n"
8605 "-soundhw c1,... enable audio support\n"
8606 " and only specified sound cards (comma separated list)\n"
8607 " use -soundhw ? to get the list of supported cards\n"
8608 " use -soundhw all to enable all of them\n"
8610 "-vga [std|cirrus|vmware]\n"
8611 " select video card type\n"
8612 "-localtime set the real time clock to local time [default=utc]\n"
8613 "-full-screen start in full screen\n"
8615 "-win2k-hack use it when installing Windows 2000 to avoid a disk full bug\n"
8617 "-usb enable the USB driver (will be the default soon)\n"
8618 "-usbdevice name add the host or guest USB device 'name'\n"
8619 #if defined(TARGET_PPC) || defined(TARGET_SPARC)
8620 "-g WxH[xDEPTH] Set the initial graphical resolution and depth\n"
8622 "-name string set the name of the guest\n"
8623 "-uuid %%08x-%%04x-%%04x-%%04x-%%012x specify machine UUID\n"
8625 "Network options:\n"
8626 "-net nic[,vlan=n][,macaddr=addr][,model=type]\n"
8627 " create a new Network Interface Card and connect it to VLAN 'n'\n"
8629 "-net user[,vlan=n][,hostname=host]\n"
8630 " connect the user mode network stack to VLAN 'n' and send\n"
8631 " hostname 'host' to DHCP clients\n"
8634 "-net tap[,vlan=n],ifname=name\n"
8635 " connect the host TAP network interface to VLAN 'n'\n"
8637 "-net tap[,vlan=n][,fd=h][,ifname=name][,script=file][,downscript=dfile]\n"
8638 " connect the host TAP network interface to VLAN 'n' and use the\n"
8639 " network scripts 'file' (default=%s)\n"
8640 " and 'dfile' (default=%s);\n"
8641 " use '[down]script=no' to disable script execution;\n"
8642 " use 'fd=h' to connect to an already opened TAP interface\n"
8644 "-net socket[,vlan=n][,fd=h][,listen=[host]:port][,connect=host:port]\n"
8645 " connect the vlan 'n' to another VLAN using a socket connection\n"
8646 "-net socket[,vlan=n][,fd=h][,mcast=maddr:port]\n"
8647 " connect the vlan 'n' to multicast maddr and port\n"
8649 "-net vde[,vlan=n][,sock=socketpath][,port=n][,group=groupname][,mode=octalmode]\n"
8650 " connect the vlan 'n' to port 'n' of a vde switch running\n"
8651 " on host and listening for incoming connections on 'socketpath'.\n"
8652 " Use group 'groupname' and mode 'octalmode' to change default\n"
8653 " ownership and permissions for communication port.\n"
8655 "-net none use it alone to have zero network devices; if no -net option\n"
8656 " is provided, the default is '-net nic -net user'\n"
8659 "-tftp dir allow tftp access to files in dir [-net user]\n"
8660 "-bootp file advertise file in BOOTP replies\n"
8662 "-smb dir allow SMB access to files in 'dir' [-net user]\n"
8664 "-redir [tcp|udp]:host-port:[guest-host]:guest-port\n"
8665 " redirect TCP or UDP connections from host to guest [-net user]\n"
8668 "Linux boot specific:\n"
8669 "-kernel bzImage use 'bzImage' as kernel image\n"
8670 "-append cmdline use 'cmdline' as kernel command line\n"
8671 "-initrd file use 'file' as initial ram disk\n"
8673 "Debug/Expert options:\n"
8674 "-monitor dev redirect the monitor to char device 'dev'\n"
8675 "-serial dev redirect the serial port to char device 'dev'\n"
8676 "-parallel dev redirect the parallel port to char device 'dev'\n"
8677 "-pidfile file Write PID to 'file'\n"
8678 "-S freeze CPU at startup (use 'c' to start execution)\n"
8679 "-s wait gdb connection to port\n"
8680 "-p port set gdb connection port [default=%s]\n"
8681 "-d item1,... output log to %s (use -d ? for a list of log items)\n"
8682 "-hdachs c,h,s[,t] force hard disk 0 physical geometry and the optional BIOS\n"
8683 " translation (t=none or lba) (usually qemu can guess them)\n"
8684 "-L path set the directory for the BIOS, VGA BIOS and keymaps\n"
8686 "-kernel-kqemu enable KQEMU full virtualization (default is user mode only)\n"
8687 "-no-kqemu disable KQEMU kernel module usage\n"
8690 #ifndef NO_CPU_EMULATION
8691 "-no-kvm disable KVM hardware virtualization\n"
8693 "-no-kvm-irqchip disable KVM kernel mode PIC/IOAPIC/LAPIC\n"
8694 "-no-kvm-pit disable KVM kernel mode PIT\n"
8697 "-no-acpi disable ACPI\n"
8699 #ifdef CONFIG_CURSES
8700 "-curses use a curses/ncurses interface instead of SDL\n"
8702 "-no-reboot exit instead of rebooting\n"
8703 "-no-shutdown stop before shutdown\n"
8704 "-loadvm [tag|id] start right away with a saved state (loadvm in monitor)\n"
8705 "-vnc display start a VNC server on display\n"
8707 "-daemonize daemonize QEMU after initializing\n"
8709 "-tdf inject timer interrupts that got lost\n"
8710 "-kvm-shadow-memory megs set the amount of shadow pages to be allocated\n"
8711 "-mem-path set the path to hugetlbfs/tmpfs mounted directory, also enables allocation of guest memory with huge pages\n"
8712 "-option-rom rom load a file, rom, into the option ROM space\n"
8714 "-prom-env variable=value set OpenBIOS nvram variables\n"
8716 "-clock force the use of the given methods for timer alarm.\n"
8717 " To see what timers are available use -clock ?\n"
8718 "-startdate select initial date of the clock\n"
8719 "-icount [N|auto]\n"
8720 " Enable virtual instruction counter with 2^N clock ticks per instruction\n"
8722 "During emulation, the following keys are useful:\n"
8723 "ctrl-alt-f toggle full screen\n"
8724 "ctrl-alt-n switch to virtual console 'n'\n"
8725 "ctrl-alt toggle mouse and keyboard grab\n"
8727 "When using -nographic, press 'ctrl-a h' to get some help.\n"
8732 DEFAULT_NETWORK_SCRIPT
,
8733 DEFAULT_NETWORK_DOWN_SCRIPT
,
8735 DEFAULT_GDBSTUB_PORT
,
8740 #define HAS_ARG 0x0001
8755 QEMU_OPTION_mtdblock
,
8759 QEMU_OPTION_snapshot
,
8761 QEMU_OPTION_no_fd_bootchk
,
8764 QEMU_OPTION_nographic
,
8765 QEMU_OPTION_portrait
,
8767 QEMU_OPTION_audio_help
,
8768 QEMU_OPTION_soundhw
,
8789 QEMU_OPTION_localtime
,
8793 QEMU_OPTION_monitor
,
8795 QEMU_OPTION_parallel
,
8797 QEMU_OPTION_full_screen
,
8798 QEMU_OPTION_no_frame
,
8799 QEMU_OPTION_alt_grab
,
8800 QEMU_OPTION_no_quit
,
8801 QEMU_OPTION_pidfile
,
8802 QEMU_OPTION_no_kqemu
,
8803 QEMU_OPTION_kernel_kqemu
,
8804 QEMU_OPTION_win2k_hack
,
8806 QEMU_OPTION_usbdevice
,
8809 QEMU_OPTION_no_acpi
,
8812 QEMU_OPTION_no_kvm_irqchip
,
8813 QEMU_OPTION_no_kvm_pit
,
8814 QEMU_OPTION_no_reboot
,
8815 QEMU_OPTION_no_shutdown
,
8816 QEMU_OPTION_show_cursor
,
8817 QEMU_OPTION_daemonize
,
8818 QEMU_OPTION_option_rom
,
8819 QEMU_OPTION_semihosting
,
8820 QEMU_OPTION_cpu_vendor
,
8822 QEMU_OPTION_prom_env
,
8823 QEMU_OPTION_old_param
,
8825 QEMU_OPTION_startdate
,
8826 QEMU_OPTION_tb_size
,
8829 QEMU_OPTION_incoming
,
8831 QEMU_OPTION_kvm_shadow_memory
,
8832 QEMU_OPTION_mempath
,
8835 typedef struct QEMUOption
{
8841 static const QEMUOption qemu_options
[] = {
8842 { "h", 0, QEMU_OPTION_h
},
8843 { "help", 0, QEMU_OPTION_h
},
8845 { "M", HAS_ARG
, QEMU_OPTION_M
},
8846 { "cpu", HAS_ARG
, QEMU_OPTION_cpu
},
8847 { "fda", HAS_ARG
, QEMU_OPTION_fda
},
8848 { "fdb", HAS_ARG
, QEMU_OPTION_fdb
},
8849 { "hda", HAS_ARG
, QEMU_OPTION_hda
},
8850 { "hdb", HAS_ARG
, QEMU_OPTION_hdb
},
8851 { "hdc", HAS_ARG
, QEMU_OPTION_hdc
},
8852 { "hdd", HAS_ARG
, QEMU_OPTION_hdd
},
8853 { "drive", HAS_ARG
, QEMU_OPTION_drive
},
8854 { "cdrom", HAS_ARG
, QEMU_OPTION_cdrom
},
8855 { "mtdblock", HAS_ARG
, QEMU_OPTION_mtdblock
},
8856 { "sd", HAS_ARG
, QEMU_OPTION_sd
},
8857 { "pflash", HAS_ARG
, QEMU_OPTION_pflash
},
8858 { "boot", HAS_ARG
, QEMU_OPTION_boot
},
8859 { "snapshot", 0, QEMU_OPTION_snapshot
},
8861 { "no-fd-bootchk", 0, QEMU_OPTION_no_fd_bootchk
},
8863 { "m", HAS_ARG
, QEMU_OPTION_m
},
8864 { "nographic", 0, QEMU_OPTION_nographic
},
8865 { "portrait", 0, QEMU_OPTION_portrait
},
8866 { "k", HAS_ARG
, QEMU_OPTION_k
},
8868 { "audio-help", 0, QEMU_OPTION_audio_help
},
8869 { "soundhw", HAS_ARG
, QEMU_OPTION_soundhw
},
8872 { "net", HAS_ARG
, QEMU_OPTION_net
},
8874 { "tftp", HAS_ARG
, QEMU_OPTION_tftp
},
8875 { "bootp", HAS_ARG
, QEMU_OPTION_bootp
},
8877 { "smb", HAS_ARG
, QEMU_OPTION_smb
},
8879 { "redir", HAS_ARG
, QEMU_OPTION_redir
},
8882 { "kernel", HAS_ARG
, QEMU_OPTION_kernel
},
8883 { "append", HAS_ARG
, QEMU_OPTION_append
},
8884 { "initrd", HAS_ARG
, QEMU_OPTION_initrd
},
8886 { "S", 0, QEMU_OPTION_S
},
8887 { "s", 0, QEMU_OPTION_s
},
8888 { "p", HAS_ARG
, QEMU_OPTION_p
},
8889 { "d", HAS_ARG
, QEMU_OPTION_d
},
8890 { "hdachs", HAS_ARG
, QEMU_OPTION_hdachs
},
8891 { "L", HAS_ARG
, QEMU_OPTION_L
},
8892 { "bios", HAS_ARG
, QEMU_OPTION_bios
},
8894 { "no-kqemu", 0, QEMU_OPTION_no_kqemu
},
8895 { "kernel-kqemu", 0, QEMU_OPTION_kernel_kqemu
},
8898 #ifndef NO_CPU_EMULATION
8899 { "no-kvm", 0, QEMU_OPTION_no_kvm
},
8901 { "no-kvm-irqchip", 0, QEMU_OPTION_no_kvm_irqchip
},
8902 { "no-kvm-pit", 0, QEMU_OPTION_no_kvm_pit
},
8904 #if defined(TARGET_PPC) || defined(TARGET_SPARC)
8905 { "g", 1, QEMU_OPTION_g
},
8907 { "localtime", 0, QEMU_OPTION_localtime
},
8908 { "vga", HAS_ARG
, QEMU_OPTION_vga
},
8909 { "echr", HAS_ARG
, QEMU_OPTION_echr
},
8910 { "monitor", HAS_ARG
, QEMU_OPTION_monitor
},
8911 { "serial", HAS_ARG
, QEMU_OPTION_serial
},
8912 { "parallel", HAS_ARG
, QEMU_OPTION_parallel
},
8913 { "loadvm", HAS_ARG
, QEMU_OPTION_loadvm
},
8914 { "incoming", 1, QEMU_OPTION_incoming
},
8915 { "full-screen", 0, QEMU_OPTION_full_screen
},
8917 { "no-frame", 0, QEMU_OPTION_no_frame
},
8918 { "alt-grab", 0, QEMU_OPTION_alt_grab
},
8919 { "no-quit", 0, QEMU_OPTION_no_quit
},
8921 { "pidfile", HAS_ARG
, QEMU_OPTION_pidfile
},
8922 { "win2k-hack", 0, QEMU_OPTION_win2k_hack
},
8923 { "usbdevice", HAS_ARG
, QEMU_OPTION_usbdevice
},
8924 { "smp", HAS_ARG
, QEMU_OPTION_smp
},
8925 { "vnc", HAS_ARG
, QEMU_OPTION_vnc
},
8926 #ifdef CONFIG_CURSES
8927 { "curses", 0, QEMU_OPTION_curses
},
8929 { "uuid", HAS_ARG
, QEMU_OPTION_uuid
},
8931 /* temporary options */
8932 { "usb", 0, QEMU_OPTION_usb
},
8933 { "no-acpi", 0, QEMU_OPTION_no_acpi
},
8934 { "no-reboot", 0, QEMU_OPTION_no_reboot
},
8935 { "no-shutdown", 0, QEMU_OPTION_no_shutdown
},
8936 { "show-cursor", 0, QEMU_OPTION_show_cursor
},
8937 { "daemonize", 0, QEMU_OPTION_daemonize
},
8938 { "option-rom", HAS_ARG
, QEMU_OPTION_option_rom
},
8939 #if defined(TARGET_ARM) || defined(TARGET_M68K)
8940 { "semihosting", 0, QEMU_OPTION_semihosting
},
8942 { "tdf", 0, QEMU_OPTION_tdf
}, /* enable time drift fix */
8943 { "kvm-shadow-memory", HAS_ARG
, QEMU_OPTION_kvm_shadow_memory
},
8944 { "name", HAS_ARG
, QEMU_OPTION_name
},
8945 #if defined(TARGET_SPARC)
8946 { "prom-env", HAS_ARG
, QEMU_OPTION_prom_env
},
8948 { "cpu-vendor", HAS_ARG
, QEMU_OPTION_cpu_vendor
},
8949 #if defined(TARGET_ARM)
8950 { "old-param", 0, QEMU_OPTION_old_param
},
8952 { "clock", HAS_ARG
, QEMU_OPTION_clock
},
8953 { "startdate", HAS_ARG
, QEMU_OPTION_startdate
},
8954 { "tb-size", HAS_ARG
, QEMU_OPTION_tb_size
},
8955 { "icount", HAS_ARG
, QEMU_OPTION_icount
},
8956 { "incoming", HAS_ARG
, QEMU_OPTION_incoming
},
8957 { "mem-path", HAS_ARG
, QEMU_OPTION_mempath
},
8961 /* password input */
8963 int qemu_key_check(BlockDriverState
*bs
, const char *name
)
8968 if (!bdrv_is_encrypted(bs
))
8971 term_printf("%s is encrypted.\n", name
);
8972 for(i
= 0; i
< 3; i
++) {
8973 monitor_readline("Password: ", 1, password
, sizeof(password
));
8974 if (bdrv_set_key(bs
, password
) == 0)
8976 term_printf("invalid password\n");
8981 static BlockDriverState
*get_bdrv(int index
)
8983 if (index
> nb_drives
)
8985 return drives_table
[index
].bdrv
;
8988 static void read_passwords(void)
8990 BlockDriverState
*bs
;
8993 for(i
= 0; i
< 6; i
++) {
8996 qemu_key_check(bs
, bdrv_get_device_name(bs
));
9001 struct soundhw soundhw
[] = {
9002 #ifdef HAS_AUDIO_CHOICE
9003 #if defined(TARGET_I386) || defined(TARGET_MIPS)
9009 { .init_isa
= pcspk_audio_init
}
9014 "Creative Sound Blaster 16",
9017 { .init_isa
= SB16_init
}
9020 #ifdef CONFIG_CS4231A
9026 { .init_isa
= cs4231a_init
}
9034 "Yamaha YMF262 (OPL3)",
9036 "Yamaha YM3812 (OPL2)",
9040 { .init_isa
= Adlib_init
}
9047 "Gravis Ultrasound GF1",
9050 { .init_isa
= GUS_init
}
9057 "Intel 82801AA AC97 Audio",
9060 { .init_pci
= ac97_init
}
9066 "ENSONIQ AudioPCI ES1370",
9069 { .init_pci
= es1370_init
}
9073 { NULL
, NULL
, 0, 0, { NULL
} }
9076 static void select_soundhw (const char *optarg
)
9080 if (*optarg
== '?') {
9083 printf ("Valid sound card names (comma separated):\n");
9084 for (c
= soundhw
; c
->name
; ++c
) {
9085 printf ("%-11s %s\n", c
->name
, c
->descr
);
9087 printf ("\n-soundhw all will enable all of the above\n");
9088 exit (*optarg
!= '?');
9096 if (!strcmp (optarg
, "all")) {
9097 for (c
= soundhw
; c
->name
; ++c
) {
9105 e
= strchr (p
, ',');
9106 l
= !e
? strlen (p
) : (size_t) (e
- p
);
9108 for (c
= soundhw
; c
->name
; ++c
) {
9109 if (!strncmp (c
->name
, p
, l
)) {
9118 "Unknown sound card name (too big to show)\n");
9121 fprintf (stderr
, "Unknown sound card name `%.*s'\n",
9126 p
+= l
+ (e
!= NULL
);
9130 goto show_valid_cards
;
9135 static void select_vgahw (const char *p
)
9139 if (strstart(p
, "std", &opts
)) {
9140 cirrus_vga_enabled
= 0;
9142 } else if (strstart(p
, "cirrus", &opts
)) {
9143 cirrus_vga_enabled
= 1;
9145 } else if (strstart(p
, "vmware", &opts
)) {
9146 cirrus_vga_enabled
= 0;
9150 fprintf(stderr
, "Unknown vga type: %s\n", p
);
9154 const char *nextopt
;
9156 if (strstart(opts
, ",retrace=", &nextopt
)) {
9158 if (strstart(opts
, "dumb", &nextopt
))
9159 vga_retrace_method
= VGA_RETRACE_DUMB
;
9160 else if (strstart(opts
, "precise", &nextopt
))
9161 vga_retrace_method
= VGA_RETRACE_PRECISE
;
9162 else goto invalid_vga
;
9163 } else goto invalid_vga
;
9169 static BOOL WINAPI
qemu_ctrl_handler(DWORD type
)
9171 exit(STATUS_CONTROL_C_EXIT
);
9176 static int qemu_uuid_parse(const char *str
, uint8_t *uuid
)
9180 if(strlen(str
) != 36)
9183 ret
= sscanf(str
, UUID_FMT
, &uuid
[0], &uuid
[1], &uuid
[2], &uuid
[3],
9184 &uuid
[4], &uuid
[5], &uuid
[6], &uuid
[7], &uuid
[8], &uuid
[9],
9185 &uuid
[10], &uuid
[11], &uuid
[12], &uuid
[13], &uuid
[14], &uuid
[15]);
9193 #define MAX_NET_CLIENTS 32
9195 static int saved_argc
;
9196 static char **saved_argv
;
9198 void qemu_get_launch_info(int *argc
, char ***argv
, int *opt_daemonize
, const char **opt_incoming
)
9202 *opt_daemonize
= daemonize
;
9203 *opt_incoming
= incoming
;
9207 static int gethugepagesize(void)
9211 char *needle
= "Hugepagesize:";
9213 unsigned long hugepagesize
;
9215 fd
= open("/proc/meminfo", O_RDONLY
);
9221 ret
= read(fd
, buf
, sizeof(buf
));
9227 size
= strstr(buf
, needle
);
9230 size
+= strlen(needle
);
9231 hugepagesize
= strtol(size
, NULL
, 0);
9232 return hugepagesize
;
9235 void *alloc_mem_area(size_t memory
, unsigned long *len
, const char *path
)
9241 if (asprintf(&filename
, "%s/kvm.XXXXXX", path
) == -1)
9244 hpagesize
= gethugepagesize() * 1024;
9248 fd
= mkstemp(filename
);
9257 memory
= (memory
+hpagesize
-1) & ~(hpagesize
-1);
9260 * ftruncate is not supported by hugetlbfs in older
9261 * hosts, so don't bother checking for errors.
9262 * If anything goes wrong with it under other filesystems,
9265 ftruncate(fd
, memory
);
9267 area
= mmap(0, memory
, PROT_READ
|PROT_WRITE
, MAP_PRIVATE
, fd
, 0);
9268 if (area
== MAP_FAILED
) {
9278 void *qemu_alloc_physram(unsigned long memory
)
9281 unsigned long map_len
= memory
;
9285 area
= alloc_mem_area(memory
, &map_len
, mem_path
);
9288 area
= qemu_vmalloc(memory
);
9290 if (kvm_setup_guest_memory(area
, map_len
))
9298 static void termsig_handler(int signal
)
9300 qemu_system_shutdown_request();
9303 static void termsig_setup(void)
9305 struct sigaction act
;
9307 memset(&act
, 0, sizeof(act
));
9308 act
.sa_handler
= termsig_handler
;
9309 sigaction(SIGINT
, &act
, NULL
);
9310 sigaction(SIGHUP
, &act
, NULL
);
9311 sigaction(SIGTERM
, &act
, NULL
);
9316 int main(int argc
, char **argv
)
9318 #ifdef CONFIG_GDBSTUB
9320 const char *gdbstub_port
;
9322 uint32_t boot_devices_bitmap
= 0;
9324 int snapshot
, linux_boot
, net_boot
;
9325 const char *initrd_filename
;
9326 const char *kernel_filename
, *kernel_cmdline
;
9327 const char *boot_devices
= "";
9328 DisplayState
*ds
= &display_state
;
9329 int cyls
, heads
, secs
, translation
;
9330 const char *net_clients
[MAX_NET_CLIENTS
];
9334 const char *r
, *optarg
;
9335 CharDriverState
*monitor_hd
;
9336 const char *monitor_device
;
9337 const char *serial_devices
[MAX_SERIAL_PORTS
];
9338 int serial_device_index
;
9339 const char *parallel_devices
[MAX_PARALLEL_PORTS
];
9340 int parallel_device_index
;
9341 const char *loadvm
= NULL
;
9342 QEMUMachine
*machine
;
9343 const char *cpu_model
;
9344 const char *usb_devices
[MAX_USB_CMDLINE
];
9345 int usb_devices_index
;
9348 const char *pid_file
= NULL
;
9351 const char *incoming
= NULL
;
9353 LIST_INIT (&vm_change_state_head
);
9356 struct sigaction act
;
9357 sigfillset(&act
.sa_mask
);
9359 act
.sa_handler
= SIG_IGN
;
9360 sigaction(SIGPIPE
, &act
, NULL
);
9363 SetConsoleCtrlHandler(qemu_ctrl_handler
, TRUE
);
9364 /* Note: cpu_interrupt() is currently not SMP safe, so we force
9365 QEMU to run on a single CPU */
9370 h
= GetCurrentProcess();
9371 if (GetProcessAffinityMask(h
, &mask
, &smask
)) {
9372 for(i
= 0; i
< 32; i
++) {
9373 if (mask
& (1 << i
))
9378 SetProcessAffinityMask(h
, mask
);
9384 register_machines();
9385 machine
= first_machine
;
9387 initrd_filename
= NULL
;
9389 vga_ram_size
= VGA_RAM_SIZE
;
9390 #ifdef CONFIG_GDBSTUB
9392 gdbstub_port
= DEFAULT_GDBSTUB_PORT
;
9397 kernel_filename
= NULL
;
9398 kernel_cmdline
= "";
9399 cyls
= heads
= secs
= 0;
9400 translation
= BIOS_ATA_TRANSLATION_AUTO
;
9401 monitor_device
= "vc";
9403 serial_devices
[0] = "vc:80Cx24C";
9404 for(i
= 1; i
< MAX_SERIAL_PORTS
; i
++)
9405 serial_devices
[i
] = NULL
;
9406 serial_device_index
= 0;
9408 parallel_devices
[0] = "vc:640x480";
9409 for(i
= 1; i
< MAX_PARALLEL_PORTS
; i
++)
9410 parallel_devices
[i
] = NULL
;
9411 parallel_device_index
= 0;
9413 usb_devices_index
= 0;
9431 hda_index
= drive_add(argv
[optind
++], HD_ALIAS
, 0);
9433 const QEMUOption
*popt
;
9436 /* Treat --foo the same as -foo. */
9439 popt
= qemu_options
;
9442 fprintf(stderr
, "%s: invalid option -- '%s'\n",
9446 if (!strcmp(popt
->name
, r
+ 1))
9450 if (popt
->flags
& HAS_ARG
) {
9451 if (optind
>= argc
) {
9452 fprintf(stderr
, "%s: option '%s' requires an argument\n",
9456 optarg
= argv
[optind
++];
9461 switch(popt
->index
) {
9463 machine
= find_machine(optarg
);
9466 printf("Supported machines are:\n");
9467 for(m
= first_machine
; m
!= NULL
; m
= m
->next
) {
9468 printf("%-10s %s%s\n",
9470 m
== first_machine
? " (default)" : "");
9472 exit(*optarg
!= '?');
9475 case QEMU_OPTION_cpu
:
9476 /* hw initialization will check this */
9477 if (*optarg
== '?') {
9478 /* XXX: implement xxx_cpu_list for targets that still miss it */
9479 #if defined(cpu_list)
9480 cpu_list(stdout
, &fprintf
);
9487 case QEMU_OPTION_initrd
:
9488 initrd_filename
= optarg
;
9490 case QEMU_OPTION_hda
:
9492 hda_index
= drive_add(optarg
, HD_ALIAS
, 0);
9494 hda_index
= drive_add(optarg
, HD_ALIAS
9495 ",cyls=%d,heads=%d,secs=%d%s",
9496 0, cyls
, heads
, secs
,
9497 translation
== BIOS_ATA_TRANSLATION_LBA
?
9499 translation
== BIOS_ATA_TRANSLATION_NONE
?
9500 ",trans=none" : "");
9502 case QEMU_OPTION_hdb
:
9503 case QEMU_OPTION_hdc
:
9504 case QEMU_OPTION_hdd
:
9505 drive_add(optarg
, HD_ALIAS
, popt
->index
- QEMU_OPTION_hda
);
9507 case QEMU_OPTION_drive
:
9508 drive_add(NULL
, "%s", optarg
);
9510 case QEMU_OPTION_mtdblock
:
9511 drive_add(optarg
, MTD_ALIAS
);
9513 case QEMU_OPTION_sd
:
9514 drive_add(optarg
, SD_ALIAS
);
9516 case QEMU_OPTION_pflash
:
9517 drive_add(optarg
, PFLASH_ALIAS
);
9519 case QEMU_OPTION_snapshot
:
9522 case QEMU_OPTION_hdachs
:
9526 cyls
= strtol(p
, (char **)&p
, 0);
9527 if (cyls
< 1 || cyls
> 16383)
9532 heads
= strtol(p
, (char **)&p
, 0);
9533 if (heads
< 1 || heads
> 16)
9538 secs
= strtol(p
, (char **)&p
, 0);
9539 if (secs
< 1 || secs
> 63)
9543 if (!strcmp(p
, "none"))
9544 translation
= BIOS_ATA_TRANSLATION_NONE
;
9545 else if (!strcmp(p
, "lba"))
9546 translation
= BIOS_ATA_TRANSLATION_LBA
;
9547 else if (!strcmp(p
, "auto"))
9548 translation
= BIOS_ATA_TRANSLATION_AUTO
;
9551 } else if (*p
!= '\0') {
9553 fprintf(stderr
, "qemu: invalid physical CHS format\n");
9556 if (hda_index
!= -1)
9557 snprintf(drives_opt
[hda_index
].opt
,
9558 sizeof(drives_opt
[hda_index
].opt
),
9559 HD_ALIAS
",cyls=%d,heads=%d,secs=%d%s",
9560 0, cyls
, heads
, secs
,
9561 translation
== BIOS_ATA_TRANSLATION_LBA
?
9563 translation
== BIOS_ATA_TRANSLATION_NONE
?
9564 ",trans=none" : "");
9567 case QEMU_OPTION_nographic
:
9570 #ifdef CONFIG_CURSES
9571 case QEMU_OPTION_curses
:
9575 case QEMU_OPTION_portrait
:
9578 case QEMU_OPTION_kernel
:
9579 kernel_filename
= optarg
;
9581 case QEMU_OPTION_append
:
9582 kernel_cmdline
= optarg
;
9584 case QEMU_OPTION_cdrom
:
9585 drive_add(optarg
, CDROM_ALIAS
);
9587 case QEMU_OPTION_boot
:
9588 boot_devices
= optarg
;
9589 /* We just do some generic consistency checks */
9591 /* Could easily be extended to 64 devices if needed */
9594 boot_devices_bitmap
= 0;
9595 for (p
= boot_devices
; *p
!= '\0'; p
++) {
9596 /* Allowed boot devices are:
9597 * a b : floppy disk drives
9598 * c ... f : IDE disk drives
9599 * g ... m : machine implementation dependant drives
9600 * n ... p : network devices
9601 * It's up to each machine implementation to check
9602 * if the given boot devices match the actual hardware
9603 * implementation and firmware features.
9605 if (*p
< 'a' || *p
> 'q') {
9606 fprintf(stderr
, "Invalid boot device '%c'\n", *p
);
9609 if (boot_devices_bitmap
& (1 << (*p
- 'a'))) {
9611 "Boot device '%c' was given twice\n",*p
);
9614 boot_devices_bitmap
|= 1 << (*p
- 'a');
9618 case QEMU_OPTION_fda
:
9619 case QEMU_OPTION_fdb
:
9620 drive_add(optarg
, FD_ALIAS
, popt
->index
- QEMU_OPTION_fda
);
9623 case QEMU_OPTION_no_fd_bootchk
:
9627 case QEMU_OPTION_net
:
9628 if (nb_net_clients
>= MAX_NET_CLIENTS
) {
9629 fprintf(stderr
, "qemu: too many network clients\n");
9632 net_clients
[nb_net_clients
] = optarg
;
9636 case QEMU_OPTION_tftp
:
9637 tftp_prefix
= optarg
;
9639 case QEMU_OPTION_bootp
:
9640 bootp_filename
= optarg
;
9643 case QEMU_OPTION_smb
:
9644 net_slirp_smb(optarg
);
9647 case QEMU_OPTION_redir
:
9648 net_slirp_redir(optarg
);
9652 case QEMU_OPTION_audio_help
:
9656 case QEMU_OPTION_soundhw
:
9657 select_soundhw (optarg
);
9663 case QEMU_OPTION_m
: {
9667 value
= strtoul(optarg
, &ptr
, 10);
9669 case 0: case 'M': case 'm':
9676 fprintf(stderr
, "qemu: invalid ram size: %s\n", optarg
);
9680 /* On 32-bit hosts, QEMU is limited by virtual address space */
9681 if (value
> (2047 << 20)
9683 && HOST_LONG_BITS
== 32
9686 fprintf(stderr
, "qemu: at most 2047 MB RAM can be simulated\n");
9689 if (value
!= (uint64_t)(ram_addr_t
)value
) {
9690 fprintf(stderr
, "qemu: ram size too large\n");
9699 const CPULogItem
*item
;
9701 mask
= cpu_str_to_log_mask(optarg
);
9703 printf("Log items (comma separated):\n");
9704 for(item
= cpu_log_items
; item
->mask
!= 0; item
++) {
9705 printf("%-10s %s\n", item
->name
, item
->help
);
9712 #ifdef CONFIG_GDBSTUB
9717 gdbstub_port
= optarg
;
9723 case QEMU_OPTION_bios
:
9730 keyboard_layout
= optarg
;
9732 case QEMU_OPTION_localtime
:
9735 case QEMU_OPTION_vga
:
9736 select_vgahw (optarg
);
9743 w
= strtol(p
, (char **)&p
, 10);
9746 fprintf(stderr
, "qemu: invalid resolution or depth\n");
9752 h
= strtol(p
, (char **)&p
, 10);
9757 depth
= strtol(p
, (char **)&p
, 10);
9758 if (depth
!= 8 && depth
!= 15 && depth
!= 16 &&
9759 depth
!= 24 && depth
!= 32)
9761 } else if (*p
== '\0') {
9762 depth
= graphic_depth
;
9769 graphic_depth
= depth
;
9772 case QEMU_OPTION_echr
:
9775 term_escape_char
= strtol(optarg
, &r
, 0);
9777 printf("Bad argument to echr\n");
9780 case QEMU_OPTION_monitor
:
9781 monitor_device
= optarg
;
9783 case QEMU_OPTION_serial
:
9784 if (serial_device_index
>= MAX_SERIAL_PORTS
) {
9785 fprintf(stderr
, "qemu: too many serial ports\n");
9788 serial_devices
[serial_device_index
] = optarg
;
9789 serial_device_index
++;
9791 case QEMU_OPTION_parallel
:
9792 if (parallel_device_index
>= MAX_PARALLEL_PORTS
) {
9793 fprintf(stderr
, "qemu: too many parallel ports\n");
9796 parallel_devices
[parallel_device_index
] = optarg
;
9797 parallel_device_index
++;
9799 case QEMU_OPTION_loadvm
:
9802 case QEMU_OPTION_full_screen
:
9806 case QEMU_OPTION_no_frame
:
9809 case QEMU_OPTION_alt_grab
:
9812 case QEMU_OPTION_no_quit
:
9816 case QEMU_OPTION_pidfile
:
9820 case QEMU_OPTION_win2k_hack
:
9821 win2k_install_hack
= 1;
9825 case QEMU_OPTION_no_kqemu
:
9828 case QEMU_OPTION_kernel_kqemu
:
9833 case QEMU_OPTION_no_kvm
:
9836 case QEMU_OPTION_no_kvm_irqchip
: {
9837 extern int kvm_irqchip
, kvm_pit
;
9842 case QEMU_OPTION_no_kvm_pit
: {
9848 case QEMU_OPTION_usb
:
9851 case QEMU_OPTION_usbdevice
:
9853 if (usb_devices_index
>= MAX_USB_CMDLINE
) {
9854 fprintf(stderr
, "Too many USB devices\n");
9857 usb_devices
[usb_devices_index
] = optarg
;
9858 usb_devices_index
++;
9860 case QEMU_OPTION_smp
:
9861 smp_cpus
= atoi(optarg
);
9863 fprintf(stderr
, "Invalid number of CPUs\n");
9867 case QEMU_OPTION_vnc
:
9868 vnc_display
= optarg
;
9870 case QEMU_OPTION_no_acpi
:
9873 case QEMU_OPTION_no_reboot
:
9876 case QEMU_OPTION_no_shutdown
:
9879 case QEMU_OPTION_show_cursor
:
9882 case QEMU_OPTION_uuid
:
9883 if(qemu_uuid_parse(optarg
, qemu_uuid
) < 0) {
9884 fprintf(stderr
, "Fail to parse UUID string."
9885 " Wrong format.\n");
9889 case QEMU_OPTION_daemonize
:
9892 case QEMU_OPTION_option_rom
:
9893 if (nb_option_roms
>= MAX_OPTION_ROMS
) {
9894 fprintf(stderr
, "Too many option ROMs\n");
9897 option_rom
[nb_option_roms
] = optarg
;
9900 case QEMU_OPTION_semihosting
:
9901 semihosting_enabled
= 1;
9903 case QEMU_OPTION_tdf
:
9906 case QEMU_OPTION_kvm_shadow_memory
:
9907 kvm_shadow_memory
= (int64_t)atoi(optarg
) * 1024 * 1024 / 4096;
9909 case QEMU_OPTION_mempath
:
9912 case QEMU_OPTION_name
:
9916 case QEMU_OPTION_prom_env
:
9917 if (nb_prom_envs
>= MAX_PROM_ENVS
) {
9918 fprintf(stderr
, "Too many prom variables\n");
9921 prom_envs
[nb_prom_envs
] = optarg
;
9925 case QEMU_OPTION_cpu_vendor
:
9926 cpu_vendor_string
= optarg
;
9929 case QEMU_OPTION_old_param
:
9933 case QEMU_OPTION_clock
:
9934 configure_alarms(optarg
);
9936 case QEMU_OPTION_startdate
:
9939 time_t rtc_start_date
;
9940 if (!strcmp(optarg
, "now")) {
9941 rtc_date_offset
= -1;
9943 if (sscanf(optarg
, "%d-%d-%dT%d:%d:%d",
9951 } else if (sscanf(optarg
, "%d-%d-%d",
9954 &tm
.tm_mday
) == 3) {
9963 rtc_start_date
= mktimegm(&tm
);
9964 if (rtc_start_date
== -1) {
9966 fprintf(stderr
, "Invalid date format. Valid format are:\n"
9967 "'now' or '2006-06-17T16:01:21' or '2006-06-17'\n");
9970 rtc_date_offset
= time(NULL
) - rtc_start_date
;
9974 case QEMU_OPTION_tb_size
:
9975 tb_size
= strtol(optarg
, NULL
, 0);
9979 case QEMU_OPTION_icount
:
9981 if (strcmp(optarg
, "auto") == 0) {
9982 icount_time_shift
= -1;
9984 icount_time_shift
= strtol(optarg
, NULL
, 0);
9987 case QEMU_OPTION_incoming
:
9994 if (smp_cpus
> machine
->max_cpus
) {
9995 fprintf(stderr
, "Number of SMP cpus requested (%d), exceeds max cpus "
9996 "supported by machine `%s' (%d)\n", smp_cpus
, machine
->name
,
10002 if (serial_device_index
== 0)
10003 serial_devices
[0] = "stdio";
10004 if (parallel_device_index
== 0)
10005 parallel_devices
[0] = "null";
10006 if (strncmp(monitor_device
, "vc", 2) == 0)
10007 monitor_device
= "stdio";
10014 if (pipe(fds
) == -1)
10025 len
= read(fds
[0], &status
, 1);
10026 if (len
== -1 && (errno
== EINTR
))
10031 else if (status
== 1) {
10032 fprintf(stderr
, "Could not acquire pidfile\n");
10036 } else if (pid
< 0)
10049 signal(SIGTSTP
, SIG_IGN
);
10050 signal(SIGTTOU
, SIG_IGN
);
10051 signal(SIGTTIN
, SIG_IGN
);
10056 if (kvm_enabled()) {
10057 if (kvm_qemu_init() < 0) {
10058 extern int kvm_allowed
;
10059 fprintf(stderr
, "Could not initialize KVM, will disable KVM support\n");
10060 #ifdef NO_CPU_EMULATION
10061 fprintf(stderr
, "Compiled with --disable-cpu-emulation, exiting.\n");
10069 if (pid_file
&& qemu_create_pidfile(pid_file
) != 0) {
10071 uint8_t status
= 1;
10072 write(fds
[1], &status
, 1);
10074 fprintf(stderr
, "Could not acquire pid file\n");
10082 linux_boot
= (kernel_filename
!= NULL
);
10083 net_boot
= (boot_devices_bitmap
>> ('n' - 'a')) & 0xF;
10085 if (!linux_boot
&& net_boot
== 0 &&
10086 !machine
->nodisk_ok
&& nb_drives_opt
== 0)
10089 if (!linux_boot
&& *kernel_cmdline
!= '\0') {
10090 fprintf(stderr
, "-append only allowed with -kernel option\n");
10094 if (!linux_boot
&& initrd_filename
!= NULL
) {
10095 fprintf(stderr
, "-initrd only allowed with -kernel option\n");
10099 /* boot to floppy or the default cd if no hard disk defined yet */
10100 if (!boot_devices
[0]) {
10101 boot_devices
= "cad";
10103 setvbuf(stdout
, NULL
, _IOLBF
, 0);
10106 init_timer_alarm();
10107 if (use_icount
&& icount_time_shift
< 0) {
10109 /* 125MIPS seems a reasonable initial guess at the guest speed.
10110 It will be corrected fairly quickly anyway. */
10111 icount_time_shift
= 3;
10112 init_icount_adjust();
10119 /* init network clients */
10120 if (nb_net_clients
== 0) {
10121 /* if no clients, we use a default config */
10122 net_clients
[nb_net_clients
++] = "nic";
10123 #ifdef CONFIG_SLIRP
10124 net_clients
[nb_net_clients
++] = "user";
10128 for(i
= 0;i
< nb_net_clients
; i
++) {
10129 if (net_client_parse(net_clients
[i
]) < 0)
10132 for(vlan
= first_vlan
; vlan
!= NULL
; vlan
= vlan
->next
) {
10133 if (vlan
->nb_guest_devs
== 0 && vlan
->nb_host_devs
== 0)
10135 if (vlan
->nb_guest_devs
== 0)
10136 fprintf(stderr
, "Warning: vlan %d with no nics\n", vlan
->id
);
10137 if (vlan
->nb_host_devs
== 0)
10139 "Warning: vlan %d is not connected to host network\n",
10144 /* XXX: this should be moved in the PC machine instantiation code */
10145 if (net_boot
!= 0) {
10147 for (i
= 0; i
< nb_nics
&& i
< 4; i
++) {
10148 const char *model
= nd_table
[i
].model
;
10150 if (net_boot
& (1 << i
)) {
10153 snprintf(buf
, sizeof(buf
), "%s/pxe-%s.bin", bios_dir
, model
);
10154 if (get_image_size(buf
) > 0) {
10155 if (nb_option_roms
>= MAX_OPTION_ROMS
) {
10156 fprintf(stderr
, "Too many option ROMs\n");
10159 option_rom
[nb_option_roms
] = strdup(buf
);
10165 if (netroms
== 0) {
10166 fprintf(stderr
, "No valid PXE rom found for network device\n");
10172 /* init the memory */
10173 phys_ram_size
= machine
->ram_require
& ~RAMSIZE_FIXED
;
10175 if (machine
->ram_require
& RAMSIZE_FIXED
) {
10176 if (ram_size
> 0) {
10177 if (ram_size
< phys_ram_size
) {
10178 fprintf(stderr
, "Machine `%s' requires %llu bytes of memory\n",
10179 machine
->name
, (unsigned long long) phys_ram_size
);
10183 phys_ram_size
= ram_size
;
10185 ram_size
= phys_ram_size
;
10188 ram_size
= DEFAULT_RAM_SIZE
* 1024 * 1024;
10190 phys_ram_size
+= ram_size
;
10193 /* Initialize kvm */
10194 #if defined(TARGET_I386) || defined(TARGET_X86_64)
10195 #define KVM_EXTRA_PAGES 3
10197 #define KVM_EXTRA_PAGES 0
10199 if (kvm_enabled()) {
10200 phys_ram_size
+= KVM_EXTRA_PAGES
* TARGET_PAGE_SIZE
;
10201 if (kvm_qemu_create_context() < 0) {
10202 fprintf(stderr
, "Could not create KVM context\n");
10207 phys_ram_base
= qemu_alloc_physram(phys_ram_size
);
10208 if (!phys_ram_base
) {
10209 fprintf(stderr
, "Could not allocate physical memory\n");
10213 /* init the dynamic translator */
10214 cpu_exec_init_all(tb_size
* 1024 * 1024);
10218 /* we always create the cdrom drive, even if no disk is there */
10220 if (nb_drives_opt
< MAX_DRIVES
)
10221 drive_add(NULL
, CDROM_ALIAS
);
10223 /* we always create at least one floppy */
10225 if (nb_drives_opt
< MAX_DRIVES
)
10226 drive_add(NULL
, FD_ALIAS
, 0);
10228 /* we always create one sd slot, even if no card is in it */
10230 if (nb_drives_opt
< MAX_DRIVES
)
10231 drive_add(NULL
, SD_ALIAS
);
10233 /* open the virtual block devices
10234 * note that migration with device
10235 * hot add/remove is broken.
10237 for(i
= 0; i
< nb_drives_opt
; i
++)
10238 if (drive_init(&drives_opt
[i
], snapshot
, machine
) == -1)
10241 register_savevm("timer", 0, 2, timer_save
, timer_load
, NULL
);
10242 register_savevm_live("ram", 0, 3, ram_save_live
, NULL
, ram_load
, NULL
);
10244 /* terminal init */
10245 memset(&display_state
, 0, sizeof(display_state
));
10248 fprintf(stderr
, "fatal: -nographic can't be used with -curses\n");
10251 /* nearly nothing to do */
10252 dumb_display_init(ds
);
10253 } else if (vnc_display
!= NULL
) {
10254 vnc_display_init(ds
);
10255 if (vnc_display_open(ds
, vnc_display
) < 0)
10258 #if defined(CONFIG_CURSES)
10260 curses_display_init(ds
, full_screen
);
10264 #if defined(CONFIG_SDL)
10265 sdl_display_init(ds
, full_screen
, no_frame
);
10266 #elif defined(CONFIG_COCOA)
10267 cocoa_display_init(ds
, full_screen
);
10269 dumb_display_init(ds
);
10274 /* must be after terminal init, SDL library changes signal handlers */
10278 /* Maintain compatibility with multiple stdio monitors */
10279 if (!strcmp(monitor_device
,"stdio")) {
10280 for (i
= 0; i
< MAX_SERIAL_PORTS
; i
++) {
10281 const char *devname
= serial_devices
[i
];
10282 if (devname
&& !strcmp(devname
,"mon:stdio")) {
10283 monitor_device
= NULL
;
10285 } else if (devname
&& !strcmp(devname
,"stdio")) {
10286 monitor_device
= NULL
;
10287 serial_devices
[i
] = "mon:stdio";
10292 if (monitor_device
) {
10293 monitor_hd
= qemu_chr_open(monitor_device
);
10295 fprintf(stderr
, "qemu: could not open monitor device '%s'\n", monitor_device
);
10298 monitor_init(monitor_hd
, !nographic
);
10301 for(i
= 0; i
< MAX_SERIAL_PORTS
; i
++) {
10302 const char *devname
= serial_devices
[i
];
10303 if (devname
&& strcmp(devname
, "none")) {
10304 serial_hds
[i
] = qemu_chr_open(devname
);
10305 if (!serial_hds
[i
]) {
10306 fprintf(stderr
, "qemu: could not open serial device '%s'\n",
10310 if (strstart(devname
, "vc", 0))
10311 qemu_chr_printf(serial_hds
[i
], "serial%d console\r\n", i
);
10315 for(i
= 0; i
< MAX_PARALLEL_PORTS
; i
++) {
10316 const char *devname
= parallel_devices
[i
];
10317 if (devname
&& strcmp(devname
, "none")) {
10318 parallel_hds
[i
] = qemu_chr_open(devname
);
10319 if (!parallel_hds
[i
]) {
10320 fprintf(stderr
, "qemu: could not open parallel device '%s'\n",
10324 if (strstart(devname
, "vc", 0))
10325 qemu_chr_printf(parallel_hds
[i
], "parallel%d console\r\n", i
);
10332 machine
->init(ram_size
, vga_ram_size
, boot_devices
, ds
,
10333 kernel_filename
, kernel_cmdline
, initrd_filename
, cpu_model
);
10335 current_machine
= machine
;
10337 /* init USB devices */
10339 for(i
= 0; i
< usb_devices_index
; i
++) {
10340 if (usb_device_add(usb_devices
[i
]) < 0) {
10341 fprintf(stderr
, "Warning: could not add USB device %s\n",
10347 if (display_state
.dpy_refresh
) {
10348 display_state
.gui_timer
= qemu_new_timer(rt_clock
, gui_update
, &display_state
);
10349 qemu_mod_timer(display_state
.gui_timer
, qemu_get_clock(rt_clock
));
10352 #ifdef CONFIG_GDBSTUB
10354 /* XXX: use standard host:port notation and modify options
10356 if (gdbserver_start(gdbstub_port
) < 0) {
10357 fprintf(stderr
, "qemu: could not open gdbstub device on port '%s'\n",
10368 autostart
= 0; /* fixme how to deal with -daemonize */
10369 qemu_start_incoming_migration(incoming
);
10373 /* XXX: simplify init */
10381 uint8_t status
= 0;
10386 len
= write(fds
[1], &status
, 1);
10387 if (len
== -1 && (errno
== EINTR
))
10394 TFR(fd
= open("/dev/null", O_RDWR
));
10408 #if !defined(_WIN32)
10409 /* close network clients */
10410 for(vlan
= first_vlan
; vlan
!= NULL
; vlan
= vlan
->next
) {
10411 VLANClientState
*vc
;
10413 for(vc
= vlan
->first_client
; vc
!= NULL
; vc
= vc
->next
) {
10414 if (vc
->fd_read
== tap_receive
) {
10416 TAPState
*s
= vc
->opaque
;
10418 if (sscanf(vc
->info_str
, "tap: ifname=%63s ", ifname
) == 1 &&
10420 launch_script(s
->down_script
, ifname
, s
->fd
);
10422 #if defined(CONFIG_VDE)
10423 if (vc
->fd_read
== vde_from_qemu
) {
10424 VDEState
*s
= vc
->opaque
;