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
32 /* Needed early for CONFIG_BSD etc. */
33 #include "config-host.h"
38 #include <sys/times.h>
42 #include <sys/ioctl.h>
43 #include <sys/resource.h>
44 #include <sys/socket.h>
45 #include <netinet/in.h>
47 #include <arpa/inet.h>
50 #include <sys/select.h>
53 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
62 #include <linux/rtc.h>
63 #include <sys/prctl.h>
65 /* For the benefit of older linux systems which don't supply it,
66 we use a local copy of hpet.h. */
67 /* #include <linux/hpet.h> */
70 #include <linux/ppdev.h>
71 #include <linux/parport.h>
75 #include <sys/ethernet.h>
76 #include <sys/sockio.h>
77 #include <netinet/arp.h>
78 #include <netinet/in.h>
79 #include <netinet/in_systm.h>
80 #include <netinet/ip.h>
81 #include <netinet/ip_icmp.h> // must come after ip.h
82 #include <netinet/udp.h>
83 #include <netinet/tcp.h>
87 /* See MySQL bug #7156 (http://bugs.mysql.com/bug.php?id=7156) for
88 discussion about Solaris header problems */
89 extern int madvise(caddr_t
, size_t, int);
94 #if defined(__OpenBSD__)
98 #if defined(CONFIG_VDE)
99 #include <libvdeplug.h>
104 #include <mmsystem.h>
108 #if defined(__APPLE__) || defined(main)
110 int qemu_main(int argc
, char **argv
, char **envp
);
111 int main(int argc
, char **argv
)
113 return qemu_main(argc
, argv
, NULL
);
116 #define main qemu_main
118 #endif /* CONFIG_SDL */
122 #define main qemu_main
123 #endif /* CONFIG_COCOA */
126 #include "hw/boards.h"
128 #include "hw/pcmcia.h"
130 #include "hw/audiodev.h"
134 #include "hw/watchdog.h"
135 #include "hw/smbios.h"
138 #include "hw/loader.h"
141 #include "net/slirp.h"
146 #include "qemu-timer.h"
147 #include "qemu-char.h"
148 #include "cache-utils.h"
150 #include "block_int.h"
151 #include "block-migration.h"
153 #include "audio/audio.h"
154 #include "migration.h"
157 #include "qemu-option.h"
158 #include "qemu-config.h"
159 #include "qemu-objects.h"
163 #include "exec-all.h"
165 #include "qemu_socket.h"
167 #include "slirp/libslirp.h"
169 #include "qemu-queue.h"
172 //#define DEBUG_SLIRP
174 #define DEFAULT_RAM_SIZE 128
176 static const char *data_dir
;
177 const char *bios_name
= NULL
;
178 /* Note: drives_table[MAX_DRIVES] is a dummy block driver if none available
179 to store the VM snapshots */
180 struct drivelist drives
= QTAILQ_HEAD_INITIALIZER(drives
);
181 struct driveoptlist driveopts
= QTAILQ_HEAD_INITIALIZER(driveopts
);
182 enum vga_retrace_method vga_retrace_method
= VGA_RETRACE_DUMB
;
183 static DisplayState
*display_state
;
184 DisplayType display_type
= DT_DEFAULT
;
185 const char* keyboard_layout
= NULL
;
188 NICInfo nd_table
[MAX_NICS
];
191 static int rtc_utc
= 1;
192 static int rtc_date_offset
= -1; /* -1 means no change */
193 QEMUClock
*rtc_clock
;
194 int vga_interface_type
= VGA_NONE
;
196 int graphic_width
= 1024;
197 int graphic_height
= 768;
198 int graphic_depth
= 8;
200 int graphic_width
= 800;
201 int graphic_height
= 600;
202 int graphic_depth
= 15;
204 static int full_screen
= 0;
206 static int no_frame
= 0;
209 CharDriverState
*serial_hds
[MAX_SERIAL_PORTS
];
210 CharDriverState
*parallel_hds
[MAX_PARALLEL_PORTS
];
211 CharDriverState
*virtcon_hds
[MAX_VIRTIO_CONSOLES
];
213 int win2k_install_hack
= 0;
222 const char *vnc_display
;
223 int acpi_enabled
= 1;
229 int graphic_rotate
= 0;
230 uint8_t irq0override
= 1;
234 const char *watchdog
;
235 const char *option_rom
[MAX_OPTION_ROMS
];
237 int semihosting_enabled
= 0;
241 const char *qemu_name
;
244 #if defined(TARGET_SPARC) || defined(TARGET_PPC)
245 unsigned int nb_prom_envs
= 0;
246 const char *prom_envs
[MAX_PROM_ENVS
];
251 uint64_t node_mem
[MAX_NODES
];
252 uint64_t node_cpumask
[MAX_NODES
];
254 static CPUState
*cur_cpu
;
255 static CPUState
*next_cpu
;
256 static int timer_alarm_pending
= 1;
257 /* Conversion factor from emulated instructions to virtual clock ticks. */
258 static int icount_time_shift
;
259 /* Arbitrarily pick 1MIPS as the minimum allowable speed. */
260 #define MAX_ICOUNT_SHIFT 10
261 /* Compensate for varying guest execution speed. */
262 static int64_t qemu_icount_bias
;
263 static QEMUTimer
*icount_rt_timer
;
264 static QEMUTimer
*icount_vm_timer
;
265 static QEMUTimer
*nographic_timer
;
267 uint8_t qemu_uuid
[16];
269 static QEMUBootSetHandler
*boot_set_handler
;
270 static void *boot_set_opaque
;
272 static int default_serial
= 1;
273 static int default_parallel
= 1;
274 static int default_virtcon
= 1;
275 static int default_monitor
= 1;
276 static int default_vga
= 1;
277 static int default_floppy
= 1;
278 static int default_cdrom
= 1;
279 static int default_sdcard
= 1;
285 { .driver
= "isa-serial", .flag
= &default_serial
},
286 { .driver
= "isa-parallel", .flag
= &default_parallel
},
287 { .driver
= "isa-fdc", .flag
= &default_floppy
},
288 { .driver
= "ide-drive", .flag
= &default_cdrom
},
289 { .driver
= "virtio-console-pci", .flag
= &default_virtcon
},
290 { .driver
= "virtio-console-s390", .flag
= &default_virtcon
},
291 { .driver
= "VGA", .flag
= &default_vga
},
292 { .driver
= "cirrus-vga", .flag
= &default_vga
},
293 { .driver
= "vmware-svga", .flag
= &default_vga
},
296 static int default_driver_check(QemuOpts
*opts
, void *opaque
)
298 const char *driver
= qemu_opt_get(opts
, "driver");
303 for (i
= 0; i
< ARRAY_SIZE(default_list
); i
++) {
304 if (strcmp(default_list
[i
].driver
, driver
) != 0)
306 *(default_list
[i
].flag
) = 0;
311 /***********************************************************/
312 /* x86 ISA bus support */
314 target_phys_addr_t isa_mem_base
= 0;
317 /***********************************************************/
318 void hw_error(const char *fmt
, ...)
324 fprintf(stderr
, "qemu: hardware error: ");
325 vfprintf(stderr
, fmt
, ap
);
326 fprintf(stderr
, "\n");
327 for(env
= first_cpu
; env
!= NULL
; env
= env
->next_cpu
) {
328 fprintf(stderr
, "CPU #%d:\n", env
->cpu_index
);
330 cpu_dump_state(env
, stderr
, fprintf
, X86_DUMP_FPU
);
332 cpu_dump_state(env
, stderr
, fprintf
, 0);
339 static void set_proc_name(const char *s
)
341 #if defined(__linux__) && defined(PR_SET_NAME)
345 name
[sizeof(name
) - 1] = 0;
346 strncpy(name
, s
, sizeof(name
));
347 /* Could rewrite argv[0] too, but that's a bit more complicated.
348 This simple way is enough for `top'. */
349 prctl(PR_SET_NAME
, name
);
356 static QEMUBalloonEvent
*qemu_balloon_event
;
357 void *qemu_balloon_event_opaque
;
359 void qemu_add_balloon_handler(QEMUBalloonEvent
*func
, void *opaque
)
361 qemu_balloon_event
= func
;
362 qemu_balloon_event_opaque
= opaque
;
365 void qemu_balloon(ram_addr_t target
)
367 if (qemu_balloon_event
)
368 qemu_balloon_event(qemu_balloon_event_opaque
, target
);
371 ram_addr_t
qemu_balloon_status(void)
373 if (qemu_balloon_event
)
374 return qemu_balloon_event(qemu_balloon_event_opaque
, 0);
379 /***********************************************************/
380 /* real time host monotonic timer */
382 /* compute with 96 bit intermediate result: (a*b)/c */
383 uint64_t muldiv64(uint64_t a
, uint32_t b
, uint32_t c
)
388 #ifdef HOST_WORDS_BIGENDIAN
398 rl
= (uint64_t)u
.l
.low
* (uint64_t)b
;
399 rh
= (uint64_t)u
.l
.high
* (uint64_t)b
;
402 res
.l
.low
= (((rh
% c
) << 32) + (rl
& 0xffffffff)) / c
;
406 static int64_t get_clock_realtime(void)
410 gettimeofday(&tv
, NULL
);
411 return tv
.tv_sec
* 1000000000LL + (tv
.tv_usec
* 1000);
416 static int64_t clock_freq
;
418 static void init_get_clock(void)
422 ret
= QueryPerformanceFrequency(&freq
);
424 fprintf(stderr
, "Could not calibrate ticks\n");
427 clock_freq
= freq
.QuadPart
;
430 static int64_t get_clock(void)
433 QueryPerformanceCounter(&ti
);
434 return muldiv64(ti
.QuadPart
, get_ticks_per_sec(), clock_freq
);
439 static int use_rt_clock
;
441 static void init_get_clock(void)
444 #if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD_version >= 500000) \
445 || defined(__DragonFly__) || defined(__FreeBSD_kernel__)
448 if (clock_gettime(CLOCK_MONOTONIC
, &ts
) == 0) {
455 static int64_t get_clock(void)
457 #if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD_version >= 500000) \
458 || defined(__DragonFly__) || defined(__FreeBSD_kernel__)
461 clock_gettime(CLOCK_MONOTONIC
, &ts
);
462 return ts
.tv_sec
* 1000000000LL + ts
.tv_nsec
;
466 /* XXX: using gettimeofday leads to problems if the date
467 changes, so it should be avoided. */
468 return get_clock_realtime();
473 /* Return the virtual CPU time, based on the instruction counter. */
474 static int64_t cpu_get_icount(void)
477 CPUState
*env
= cpu_single_env
;;
478 icount
= qemu_icount
;
481 fprintf(stderr
, "Bad clock read\n");
482 icount
-= (env
->icount_decr
.u16
.low
+ env
->icount_extra
);
484 return qemu_icount_bias
+ (icount
<< icount_time_shift
);
487 /***********************************************************/
488 /* guest cycle counter */
490 typedef struct TimersState
{
491 int64_t cpu_ticks_prev
;
492 int64_t cpu_ticks_offset
;
493 int64_t cpu_clock_offset
;
494 int32_t cpu_ticks_enabled
;
498 TimersState timers_state
;
500 /* return the host CPU cycle counter and handle stop/restart */
501 int64_t cpu_get_ticks(void)
504 return cpu_get_icount();
506 if (!timers_state
.cpu_ticks_enabled
) {
507 return timers_state
.cpu_ticks_offset
;
510 ticks
= cpu_get_real_ticks();
511 if (timers_state
.cpu_ticks_prev
> ticks
) {
512 /* Note: non increasing ticks may happen if the host uses
514 timers_state
.cpu_ticks_offset
+= timers_state
.cpu_ticks_prev
- ticks
;
516 timers_state
.cpu_ticks_prev
= ticks
;
517 return ticks
+ timers_state
.cpu_ticks_offset
;
521 /* return the host CPU monotonic timer and handle stop/restart */
522 static int64_t cpu_get_clock(void)
525 if (!timers_state
.cpu_ticks_enabled
) {
526 return timers_state
.cpu_clock_offset
;
529 return ti
+ timers_state
.cpu_clock_offset
;
533 /* enable cpu_get_ticks() */
534 void cpu_enable_ticks(void)
536 if (!timers_state
.cpu_ticks_enabled
) {
537 timers_state
.cpu_ticks_offset
-= cpu_get_real_ticks();
538 timers_state
.cpu_clock_offset
-= get_clock();
539 timers_state
.cpu_ticks_enabled
= 1;
543 /* disable cpu_get_ticks() : the clock is stopped. You must not call
544 cpu_get_ticks() after that. */
545 void cpu_disable_ticks(void)
547 if (timers_state
.cpu_ticks_enabled
) {
548 timers_state
.cpu_ticks_offset
= cpu_get_ticks();
549 timers_state
.cpu_clock_offset
= cpu_get_clock();
550 timers_state
.cpu_ticks_enabled
= 0;
554 /***********************************************************/
557 #define QEMU_CLOCK_REALTIME 0
558 #define QEMU_CLOCK_VIRTUAL 1
559 #define QEMU_CLOCK_HOST 2
563 /* XXX: add frequency */
571 struct QEMUTimer
*next
;
574 struct qemu_alarm_timer
{
578 int (*start
)(struct qemu_alarm_timer
*t
);
579 void (*stop
)(struct qemu_alarm_timer
*t
);
580 void (*rearm
)(struct qemu_alarm_timer
*t
);
584 #define ALARM_FLAG_DYNTICKS 0x1
585 #define ALARM_FLAG_EXPIRED 0x2
587 static inline int alarm_has_dynticks(struct qemu_alarm_timer
*t
)
589 return t
&& (t
->flags
& ALARM_FLAG_DYNTICKS
);
592 static void qemu_rearm_alarm_timer(struct qemu_alarm_timer
*t
)
594 if (!alarm_has_dynticks(t
))
600 /* TODO: MIN_TIMER_REARM_US should be optimized */
601 #define MIN_TIMER_REARM_US 250
603 static struct qemu_alarm_timer
*alarm_timer
;
607 struct qemu_alarm_win32
{
610 } alarm_win32_data
= {0, -1};
612 static int win32_start_timer(struct qemu_alarm_timer
*t
);
613 static void win32_stop_timer(struct qemu_alarm_timer
*t
);
614 static void win32_rearm_timer(struct qemu_alarm_timer
*t
);
618 static int unix_start_timer(struct qemu_alarm_timer
*t
);
619 static void unix_stop_timer(struct qemu_alarm_timer
*t
);
623 static int dynticks_start_timer(struct qemu_alarm_timer
*t
);
624 static void dynticks_stop_timer(struct qemu_alarm_timer
*t
);
625 static void dynticks_rearm_timer(struct qemu_alarm_timer
*t
);
627 static int hpet_start_timer(struct qemu_alarm_timer
*t
);
628 static void hpet_stop_timer(struct qemu_alarm_timer
*t
);
630 static int rtc_start_timer(struct qemu_alarm_timer
*t
);
631 static void rtc_stop_timer(struct qemu_alarm_timer
*t
);
633 #endif /* __linux__ */
637 /* Correlation between real and virtual time is always going to be
638 fairly approximate, so ignore small variation.
639 When the guest is idle real and virtual time will be aligned in
641 #define ICOUNT_WOBBLE (get_ticks_per_sec() / 10)
643 static void icount_adjust(void)
648 static int64_t last_delta
;
649 /* If the VM is not running, then do nothing. */
653 cur_time
= cpu_get_clock();
654 cur_icount
= qemu_get_clock(vm_clock
);
655 delta
= cur_icount
- cur_time
;
656 /* FIXME: This is a very crude algorithm, somewhat prone to oscillation. */
658 && last_delta
+ ICOUNT_WOBBLE
< delta
* 2
659 && icount_time_shift
> 0) {
660 /* The guest is getting too far ahead. Slow time down. */
664 && last_delta
- ICOUNT_WOBBLE
> delta
* 2
665 && icount_time_shift
< MAX_ICOUNT_SHIFT
) {
666 /* The guest is getting too far behind. Speed time up. */
670 qemu_icount_bias
= cur_icount
- (qemu_icount
<< icount_time_shift
);
673 static void icount_adjust_rt(void * opaque
)
675 qemu_mod_timer(icount_rt_timer
,
676 qemu_get_clock(rt_clock
) + 1000);
680 static void icount_adjust_vm(void * opaque
)
682 qemu_mod_timer(icount_vm_timer
,
683 qemu_get_clock(vm_clock
) + get_ticks_per_sec() / 10);
687 static void init_icount_adjust(void)
689 /* Have both realtime and virtual time triggers for speed adjustment.
690 The realtime trigger catches emulated time passing too slowly,
691 the virtual time trigger catches emulated time passing too fast.
692 Realtime triggers occur even when idle, so use them less frequently
694 icount_rt_timer
= qemu_new_timer(rt_clock
, icount_adjust_rt
, NULL
);
695 qemu_mod_timer(icount_rt_timer
,
696 qemu_get_clock(rt_clock
) + 1000);
697 icount_vm_timer
= qemu_new_timer(vm_clock
, icount_adjust_vm
, NULL
);
698 qemu_mod_timer(icount_vm_timer
,
699 qemu_get_clock(vm_clock
) + get_ticks_per_sec() / 10);
702 static struct qemu_alarm_timer alarm_timers
[] = {
705 {"dynticks", ALARM_FLAG_DYNTICKS
, dynticks_start_timer
,
706 dynticks_stop_timer
, dynticks_rearm_timer
, NULL
},
707 /* HPET - if available - is preferred */
708 {"hpet", 0, hpet_start_timer
, hpet_stop_timer
, NULL
, NULL
},
709 /* ...otherwise try RTC */
710 {"rtc", 0, rtc_start_timer
, rtc_stop_timer
, NULL
, NULL
},
712 {"unix", 0, unix_start_timer
, unix_stop_timer
, NULL
, NULL
},
714 {"dynticks", ALARM_FLAG_DYNTICKS
, win32_start_timer
,
715 win32_stop_timer
, win32_rearm_timer
, &alarm_win32_data
},
716 {"win32", 0, win32_start_timer
,
717 win32_stop_timer
, NULL
, &alarm_win32_data
},
722 static void show_available_alarms(void)
726 printf("Available alarm timers, in order of precedence:\n");
727 for (i
= 0; alarm_timers
[i
].name
; i
++)
728 printf("%s\n", alarm_timers
[i
].name
);
731 static void configure_alarms(char const *opt
)
735 int count
= ARRAY_SIZE(alarm_timers
) - 1;
738 struct qemu_alarm_timer tmp
;
740 if (!strcmp(opt
, "?")) {
741 show_available_alarms();
745 arg
= qemu_strdup(opt
);
747 /* Reorder the array */
748 name
= strtok(arg
, ",");
750 for (i
= 0; i
< count
&& alarm_timers
[i
].name
; i
++) {
751 if (!strcmp(alarm_timers
[i
].name
, name
))
756 fprintf(stderr
, "Unknown clock %s\n", name
);
765 tmp
= alarm_timers
[i
];
766 alarm_timers
[i
] = alarm_timers
[cur
];
767 alarm_timers
[cur
] = tmp
;
771 name
= strtok(NULL
, ",");
777 /* Disable remaining timers */
778 for (i
= cur
; i
< count
; i
++)
779 alarm_timers
[i
].name
= NULL
;
781 show_available_alarms();
786 #define QEMU_NUM_CLOCKS 3
790 QEMUClock
*host_clock
;
792 static QEMUTimer
*active_timers
[QEMU_NUM_CLOCKS
];
794 static QEMUClock
*qemu_new_clock(int type
)
797 clock
= qemu_mallocz(sizeof(QEMUClock
));
802 QEMUTimer
*qemu_new_timer(QEMUClock
*clock
, QEMUTimerCB
*cb
, void *opaque
)
806 ts
= qemu_mallocz(sizeof(QEMUTimer
));
813 void qemu_free_timer(QEMUTimer
*ts
)
818 /* stop a timer, but do not dealloc it */
819 void qemu_del_timer(QEMUTimer
*ts
)
823 /* NOTE: this code must be signal safe because
824 qemu_timer_expired() can be called from a signal. */
825 pt
= &active_timers
[ts
->clock
->type
];
838 /* modify the current timer so that it will be fired when current_time
839 >= expire_time. The corresponding callback will be called. */
840 void qemu_mod_timer(QEMUTimer
*ts
, int64_t expire_time
)
846 /* add the timer in the sorted list */
847 /* NOTE: this code must be signal safe because
848 qemu_timer_expired() can be called from a signal. */
849 pt
= &active_timers
[ts
->clock
->type
];
854 if (t
->expire_time
> expire_time
)
858 ts
->expire_time
= expire_time
;
862 /* Rearm if necessary */
863 if (pt
== &active_timers
[ts
->clock
->type
]) {
864 if ((alarm_timer
->flags
& ALARM_FLAG_EXPIRED
) == 0) {
865 qemu_rearm_alarm_timer(alarm_timer
);
867 /* Interrupt execution to force deadline recalculation. */
873 int qemu_timer_pending(QEMUTimer
*ts
)
876 for(t
= active_timers
[ts
->clock
->type
]; t
!= NULL
; t
= t
->next
) {
883 int qemu_timer_expired(QEMUTimer
*timer_head
, int64_t current_time
)
887 return (timer_head
->expire_time
<= current_time
);
890 static void qemu_run_timers(QEMUTimer
**ptimer_head
, int64_t current_time
)
896 if (!ts
|| ts
->expire_time
> current_time
)
898 /* remove timer from the list before calling the callback */
899 *ptimer_head
= ts
->next
;
902 /* run the callback (the timer list can be modified) */
907 int64_t qemu_get_clock(QEMUClock
*clock
)
909 switch(clock
->type
) {
910 case QEMU_CLOCK_REALTIME
:
911 return get_clock() / 1000000;
913 case QEMU_CLOCK_VIRTUAL
:
915 return cpu_get_icount();
917 return cpu_get_clock();
919 case QEMU_CLOCK_HOST
:
920 return get_clock_realtime();
924 static void init_clocks(void)
927 rt_clock
= qemu_new_clock(QEMU_CLOCK_REALTIME
);
928 vm_clock
= qemu_new_clock(QEMU_CLOCK_VIRTUAL
);
929 host_clock
= qemu_new_clock(QEMU_CLOCK_HOST
);
931 rtc_clock
= host_clock
;
935 void qemu_put_timer(QEMUFile
*f
, QEMUTimer
*ts
)
937 uint64_t expire_time
;
939 if (qemu_timer_pending(ts
)) {
940 expire_time
= ts
->expire_time
;
944 qemu_put_be64(f
, expire_time
);
947 void qemu_get_timer(QEMUFile
*f
, QEMUTimer
*ts
)
949 uint64_t expire_time
;
951 expire_time
= qemu_get_be64(f
);
952 if (expire_time
!= -1) {
953 qemu_mod_timer(ts
, expire_time
);
959 static const VMStateDescription vmstate_timers
= {
962 .minimum_version_id
= 1,
963 .minimum_version_id_old
= 1,
964 .fields
= (VMStateField
[]) {
965 VMSTATE_INT64(cpu_ticks_offset
, TimersState
),
966 VMSTATE_INT64(dummy
, TimersState
),
967 VMSTATE_INT64_V(cpu_clock_offset
, TimersState
, 2),
968 VMSTATE_END_OF_LIST()
972 static void qemu_event_increment(void);
975 static void CALLBACK
host_alarm_handler(UINT uTimerID
, UINT uMsg
,
976 DWORD_PTR dwUser
, DWORD_PTR dw1
,
979 static void host_alarm_handler(int host_signum
)
983 #define DISP_FREQ 1000
985 static int64_t delta_min
= INT64_MAX
;
986 static int64_t delta_max
, delta_cum
, last_clock
, delta
, ti
;
988 ti
= qemu_get_clock(vm_clock
);
989 if (last_clock
!= 0) {
990 delta
= ti
- last_clock
;
991 if (delta
< delta_min
)
993 if (delta
> delta_max
)
996 if (++count
== DISP_FREQ
) {
997 printf("timer: min=%" PRId64
" us max=%" PRId64
" us avg=%" PRId64
" us avg_freq=%0.3f Hz\n",
998 muldiv64(delta_min
, 1000000, get_ticks_per_sec()),
999 muldiv64(delta_max
, 1000000, get_ticks_per_sec()),
1000 muldiv64(delta_cum
, 1000000 / DISP_FREQ
, get_ticks_per_sec()),
1001 (double)get_ticks_per_sec() / ((double)delta_cum
/ DISP_FREQ
));
1003 delta_min
= INT64_MAX
;
1011 if (alarm_has_dynticks(alarm_timer
) ||
1013 qemu_timer_expired(active_timers
[QEMU_CLOCK_VIRTUAL
],
1014 qemu_get_clock(vm_clock
))) ||
1015 qemu_timer_expired(active_timers
[QEMU_CLOCK_REALTIME
],
1016 qemu_get_clock(rt_clock
)) ||
1017 qemu_timer_expired(active_timers
[QEMU_CLOCK_HOST
],
1018 qemu_get_clock(host_clock
))) {
1019 qemu_event_increment();
1020 if (alarm_timer
) alarm_timer
->flags
|= ALARM_FLAG_EXPIRED
;
1022 #ifndef CONFIG_IOTHREAD
1024 /* stop the currently executing cpu because a timer occured */
1028 timer_alarm_pending
= 1;
1029 qemu_notify_event();
1033 static int64_t qemu_next_deadline(void)
1035 /* To avoid problems with overflow limit this to 2^32. */
1036 int64_t delta
= INT32_MAX
;
1038 if (active_timers
[QEMU_CLOCK_VIRTUAL
]) {
1039 delta
= active_timers
[QEMU_CLOCK_VIRTUAL
]->expire_time
-
1040 qemu_get_clock(vm_clock
);
1042 if (active_timers
[QEMU_CLOCK_HOST
]) {
1043 int64_t hdelta
= active_timers
[QEMU_CLOCK_HOST
]->expire_time
-
1044 qemu_get_clock(host_clock
);
1055 #if defined(__linux__)
1056 static uint64_t qemu_next_deadline_dyntick(void)
1064 delta
= (qemu_next_deadline() + 999) / 1000;
1066 if (active_timers
[QEMU_CLOCK_REALTIME
]) {
1067 rtdelta
= (active_timers
[QEMU_CLOCK_REALTIME
]->expire_time
-
1068 qemu_get_clock(rt_clock
))*1000;
1069 if (rtdelta
< delta
)
1073 if (delta
< MIN_TIMER_REARM_US
)
1074 delta
= MIN_TIMER_REARM_US
;
1082 /* Sets a specific flag */
1083 static int fcntl_setfl(int fd
, int flag
)
1087 flags
= fcntl(fd
, F_GETFL
);
1091 if (fcntl(fd
, F_SETFL
, flags
| flag
) == -1)
1097 #if defined(__linux__)
1099 #define RTC_FREQ 1024
1101 static void enable_sigio_timer(int fd
)
1103 struct sigaction act
;
1106 sigfillset(&act
.sa_mask
);
1108 act
.sa_handler
= host_alarm_handler
;
1110 sigaction(SIGIO
, &act
, NULL
);
1111 fcntl_setfl(fd
, O_ASYNC
);
1112 fcntl(fd
, F_SETOWN
, getpid());
1115 static int hpet_start_timer(struct qemu_alarm_timer
*t
)
1117 struct hpet_info info
;
1120 fd
= qemu_open("/dev/hpet", O_RDONLY
);
1125 r
= ioctl(fd
, HPET_IRQFREQ
, RTC_FREQ
);
1127 fprintf(stderr
, "Could not configure '/dev/hpet' to have a 1024Hz timer. This is not a fatal\n"
1128 "error, but for better emulation accuracy type:\n"
1129 "'echo 1024 > /proc/sys/dev/hpet/max-user-freq' as root.\n");
1133 /* Check capabilities */
1134 r
= ioctl(fd
, HPET_INFO
, &info
);
1138 /* Enable periodic mode */
1139 r
= ioctl(fd
, HPET_EPI
, 0);
1140 if (info
.hi_flags
&& (r
< 0))
1143 /* Enable interrupt */
1144 r
= ioctl(fd
, HPET_IE_ON
, 0);
1148 enable_sigio_timer(fd
);
1149 t
->priv
= (void *)(long)fd
;
1157 static void hpet_stop_timer(struct qemu_alarm_timer
*t
)
1159 int fd
= (long)t
->priv
;
1164 static int rtc_start_timer(struct qemu_alarm_timer
*t
)
1167 unsigned long current_rtc_freq
= 0;
1169 TFR(rtc_fd
= qemu_open("/dev/rtc", O_RDONLY
));
1172 ioctl(rtc_fd
, RTC_IRQP_READ
, ¤t_rtc_freq
);
1173 if (current_rtc_freq
!= RTC_FREQ
&&
1174 ioctl(rtc_fd
, RTC_IRQP_SET
, RTC_FREQ
) < 0) {
1175 fprintf(stderr
, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n"
1176 "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n"
1177 "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n");
1180 if (ioctl(rtc_fd
, RTC_PIE_ON
, 0) < 0) {
1186 enable_sigio_timer(rtc_fd
);
1188 t
->priv
= (void *)(long)rtc_fd
;
1193 static void rtc_stop_timer(struct qemu_alarm_timer
*t
)
1195 int rtc_fd
= (long)t
->priv
;
1200 static int dynticks_start_timer(struct qemu_alarm_timer
*t
)
1204 struct sigaction act
;
1206 sigfillset(&act
.sa_mask
);
1208 act
.sa_handler
= host_alarm_handler
;
1210 sigaction(SIGALRM
, &act
, NULL
);
1213 * Initialize ev struct to 0 to avoid valgrind complaining
1214 * about uninitialized data in timer_create call
1216 memset(&ev
, 0, sizeof(ev
));
1217 ev
.sigev_value
.sival_int
= 0;
1218 ev
.sigev_notify
= SIGEV_SIGNAL
;
1219 ev
.sigev_signo
= SIGALRM
;
1221 if (timer_create(CLOCK_REALTIME
, &ev
, &host_timer
)) {
1222 perror("timer_create");
1224 /* disable dynticks */
1225 fprintf(stderr
, "Dynamic Ticks disabled\n");
1230 t
->priv
= (void *)(long)host_timer
;
1235 static void dynticks_stop_timer(struct qemu_alarm_timer
*t
)
1237 timer_t host_timer
= (timer_t
)(long)t
->priv
;
1239 timer_delete(host_timer
);
1242 static void dynticks_rearm_timer(struct qemu_alarm_timer
*t
)
1244 timer_t host_timer
= (timer_t
)(long)t
->priv
;
1245 struct itimerspec timeout
;
1246 int64_t nearest_delta_us
= INT64_MAX
;
1249 if (!active_timers
[QEMU_CLOCK_REALTIME
] &&
1250 !active_timers
[QEMU_CLOCK_VIRTUAL
] &&
1251 !active_timers
[QEMU_CLOCK_HOST
])
1254 nearest_delta_us
= qemu_next_deadline_dyntick();
1256 /* check whether a timer is already running */
1257 if (timer_gettime(host_timer
, &timeout
)) {
1259 fprintf(stderr
, "Internal timer error: aborting\n");
1262 current_us
= timeout
.it_value
.tv_sec
* 1000000 + timeout
.it_value
.tv_nsec
/1000;
1263 if (current_us
&& current_us
<= nearest_delta_us
)
1266 timeout
.it_interval
.tv_sec
= 0;
1267 timeout
.it_interval
.tv_nsec
= 0; /* 0 for one-shot timer */
1268 timeout
.it_value
.tv_sec
= nearest_delta_us
/ 1000000;
1269 timeout
.it_value
.tv_nsec
= (nearest_delta_us
% 1000000) * 1000;
1270 if (timer_settime(host_timer
, 0 /* RELATIVE */, &timeout
, NULL
)) {
1272 fprintf(stderr
, "Internal timer error: aborting\n");
1277 #endif /* defined(__linux__) */
1279 static int unix_start_timer(struct qemu_alarm_timer
*t
)
1281 struct sigaction act
;
1282 struct itimerval itv
;
1286 sigfillset(&act
.sa_mask
);
1288 act
.sa_handler
= host_alarm_handler
;
1290 sigaction(SIGALRM
, &act
, NULL
);
1292 itv
.it_interval
.tv_sec
= 0;
1293 /* for i386 kernel 2.6 to get 1 ms */
1294 itv
.it_interval
.tv_usec
= 999;
1295 itv
.it_value
.tv_sec
= 0;
1296 itv
.it_value
.tv_usec
= 10 * 1000;
1298 err
= setitimer(ITIMER_REAL
, &itv
, NULL
);
1305 static void unix_stop_timer(struct qemu_alarm_timer
*t
)
1307 struct itimerval itv
;
1309 memset(&itv
, 0, sizeof(itv
));
1310 setitimer(ITIMER_REAL
, &itv
, NULL
);
1313 #endif /* !defined(_WIN32) */
1318 static int win32_start_timer(struct qemu_alarm_timer
*t
)
1321 struct qemu_alarm_win32
*data
= t
->priv
;
1324 memset(&tc
, 0, sizeof(tc
));
1325 timeGetDevCaps(&tc
, sizeof(tc
));
1327 if (data
->period
< tc
.wPeriodMin
)
1328 data
->period
= tc
.wPeriodMin
;
1330 timeBeginPeriod(data
->period
);
1332 flags
= TIME_CALLBACK_FUNCTION
;
1333 if (alarm_has_dynticks(t
))
1334 flags
|= TIME_ONESHOT
;
1336 flags
|= TIME_PERIODIC
;
1338 data
->timerId
= timeSetEvent(1, // interval (ms)
1339 data
->period
, // resolution
1340 host_alarm_handler
, // function
1341 (DWORD
)t
, // parameter
1344 if (!data
->timerId
) {
1345 fprintf(stderr
, "Failed to initialize win32 alarm timer: %ld\n",
1347 timeEndPeriod(data
->period
);
1354 static void win32_stop_timer(struct qemu_alarm_timer
*t
)
1356 struct qemu_alarm_win32
*data
= t
->priv
;
1358 timeKillEvent(data
->timerId
);
1359 timeEndPeriod(data
->period
);
1362 static void win32_rearm_timer(struct qemu_alarm_timer
*t
)
1364 struct qemu_alarm_win32
*data
= t
->priv
;
1366 if (!active_timers
[QEMU_CLOCK_REALTIME
] &&
1367 !active_timers
[QEMU_CLOCK_VIRTUAL
] &&
1368 !active_timers
[QEMU_CLOCK_HOST
])
1371 timeKillEvent(data
->timerId
);
1373 data
->timerId
= timeSetEvent(1,
1377 TIME_ONESHOT
| TIME_PERIODIC
);
1379 if (!data
->timerId
) {
1380 fprintf(stderr
, "Failed to re-arm win32 alarm timer %ld\n",
1383 timeEndPeriod(data
->period
);
1390 static int init_timer_alarm(void)
1392 struct qemu_alarm_timer
*t
= NULL
;
1395 for (i
= 0; alarm_timers
[i
].name
; i
++) {
1396 t
= &alarm_timers
[i
];
1416 static void quit_timers(void)
1418 alarm_timer
->stop(alarm_timer
);
1422 /***********************************************************/
1423 /* host time/date access */
1424 void qemu_get_timedate(struct tm
*tm
, int offset
)
1431 if (rtc_date_offset
== -1) {
1435 ret
= localtime(&ti
);
1437 ti
-= rtc_date_offset
;
1441 memcpy(tm
, ret
, sizeof(struct tm
));
1444 int qemu_timedate_diff(struct tm
*tm
)
1448 if (rtc_date_offset
== -1)
1450 seconds
= mktimegm(tm
);
1452 seconds
= mktime(tm
);
1454 seconds
= mktimegm(tm
) + rtc_date_offset
;
1456 return seconds
- time(NULL
);
1459 static void configure_rtc_date_offset(const char *startdate
, int legacy
)
1461 time_t rtc_start_date
;
1464 if (!strcmp(startdate
, "now") && legacy
) {
1465 rtc_date_offset
= -1;
1467 if (sscanf(startdate
, "%d-%d-%dT%d:%d:%d",
1475 } else if (sscanf(startdate
, "%d-%d-%d",
1478 &tm
.tm_mday
) == 3) {
1487 rtc_start_date
= mktimegm(&tm
);
1488 if (rtc_start_date
== -1) {
1490 fprintf(stderr
, "Invalid date format. Valid formats are:\n"
1491 "'2006-06-17T16:01:21' or '2006-06-17'\n");
1494 rtc_date_offset
= time(NULL
) - rtc_start_date
;
1498 static void configure_rtc(QemuOpts
*opts
)
1502 value
= qemu_opt_get(opts
, "base");
1504 if (!strcmp(value
, "utc")) {
1506 } else if (!strcmp(value
, "localtime")) {
1509 configure_rtc_date_offset(value
, 0);
1512 value
= qemu_opt_get(opts
, "clock");
1514 if (!strcmp(value
, "host")) {
1515 rtc_clock
= host_clock
;
1516 } else if (!strcmp(value
, "vm")) {
1517 rtc_clock
= vm_clock
;
1519 fprintf(stderr
, "qemu: invalid option value '%s'\n", value
);
1523 #ifdef CONFIG_TARGET_I386
1524 value
= qemu_opt_get(opts
, "driftfix");
1526 if (!strcmp(buf
, "slew")) {
1528 } else if (!strcmp(buf
, "none")) {
1531 fprintf(stderr
, "qemu: invalid option value '%s'\n", value
);
1539 static void socket_cleanup(void)
1544 static int socket_init(void)
1549 ret
= WSAStartup(MAKEWORD(2,2), &Data
);
1551 err
= WSAGetLastError();
1552 fprintf(stderr
, "WSAStartup: %d\n", err
);
1555 atexit(socket_cleanup
);
1560 /***********************************************************/
1561 /* Bluetooth support */
1564 static struct HCIInfo
*hci_table
[MAX_NICS
];
1566 static struct bt_vlan_s
{
1567 struct bt_scatternet_s net
;
1569 struct bt_vlan_s
*next
;
1572 /* find or alloc a new bluetooth "VLAN" */
1573 static struct bt_scatternet_s
*qemu_find_bt_vlan(int id
)
1575 struct bt_vlan_s
**pvlan
, *vlan
;
1576 for (vlan
= first_bt_vlan
; vlan
!= NULL
; vlan
= vlan
->next
) {
1580 vlan
= qemu_mallocz(sizeof(struct bt_vlan_s
));
1582 pvlan
= &first_bt_vlan
;
1583 while (*pvlan
!= NULL
)
1584 pvlan
= &(*pvlan
)->next
;
1589 static void null_hci_send(struct HCIInfo
*hci
, const uint8_t *data
, int len
)
1593 static int null_hci_addr_set(struct HCIInfo
*hci
, const uint8_t *bd_addr
)
1598 static struct HCIInfo null_hci
= {
1599 .cmd_send
= null_hci_send
,
1600 .sco_send
= null_hci_send
,
1601 .acl_send
= null_hci_send
,
1602 .bdaddr_set
= null_hci_addr_set
,
1605 struct HCIInfo
*qemu_next_hci(void)
1607 if (cur_hci
== nb_hcis
)
1610 return hci_table
[cur_hci
++];
1613 static struct HCIInfo
*hci_init(const char *str
)
1616 struct bt_scatternet_s
*vlan
= 0;
1618 if (!strcmp(str
, "null"))
1621 else if (!strncmp(str
, "host", 4) && (str
[4] == '\0' || str
[4] == ':'))
1623 return bt_host_hci(str
[4] ? str
+ 5 : "hci0");
1624 else if (!strncmp(str
, "hci", 3)) {
1627 if (!strncmp(str
+ 3, ",vlan=", 6)) {
1628 vlan
= qemu_find_bt_vlan(strtol(str
+ 9, &endp
, 0));
1633 vlan
= qemu_find_bt_vlan(0);
1635 return bt_new_hci(vlan
);
1638 fprintf(stderr
, "qemu: Unknown bluetooth HCI `%s'.\n", str
);
1643 static int bt_hci_parse(const char *str
)
1645 struct HCIInfo
*hci
;
1648 if (nb_hcis
>= MAX_NICS
) {
1649 fprintf(stderr
, "qemu: Too many bluetooth HCIs (max %i).\n", MAX_NICS
);
1653 hci
= hci_init(str
);
1662 bdaddr
.b
[5] = 0x56 + nb_hcis
;
1663 hci
->bdaddr_set(hci
, bdaddr
.b
);
1665 hci_table
[nb_hcis
++] = hci
;
1670 static void bt_vhci_add(int vlan_id
)
1672 struct bt_scatternet_s
*vlan
= qemu_find_bt_vlan(vlan_id
);
1675 fprintf(stderr
, "qemu: warning: adding a VHCI to "
1676 "an empty scatternet %i\n", vlan_id
);
1678 bt_vhci_init(bt_new_hci(vlan
));
1681 static struct bt_device_s
*bt_device_add(const char *opt
)
1683 struct bt_scatternet_s
*vlan
;
1685 char *endp
= strstr(opt
, ",vlan=");
1686 int len
= (endp
? endp
- opt
: strlen(opt
)) + 1;
1689 pstrcpy(devname
, MIN(sizeof(devname
), len
), opt
);
1692 vlan_id
= strtol(endp
+ 6, &endp
, 0);
1694 fprintf(stderr
, "qemu: unrecognised bluetooth vlan Id\n");
1699 vlan
= qemu_find_bt_vlan(vlan_id
);
1702 fprintf(stderr
, "qemu: warning: adding a slave device to "
1703 "an empty scatternet %i\n", vlan_id
);
1705 if (!strcmp(devname
, "keyboard"))
1706 return bt_keyboard_init(vlan
);
1708 fprintf(stderr
, "qemu: unsupported bluetooth device `%s'\n", devname
);
1712 static int bt_parse(const char *opt
)
1714 const char *endp
, *p
;
1717 if (strstart(opt
, "hci", &endp
)) {
1718 if (!*endp
|| *endp
== ',') {
1720 if (!strstart(endp
, ",vlan=", 0))
1723 return bt_hci_parse(opt
);
1725 } else if (strstart(opt
, "vhci", &endp
)) {
1726 if (!*endp
|| *endp
== ',') {
1728 if (strstart(endp
, ",vlan=", &p
)) {
1729 vlan
= strtol(p
, (char **) &endp
, 0);
1731 fprintf(stderr
, "qemu: bad scatternet '%s'\n", p
);
1735 fprintf(stderr
, "qemu: bad parameter '%s'\n", endp
+ 1);
1744 } else if (strstart(opt
, "device:", &endp
))
1745 return !bt_device_add(endp
);
1747 fprintf(stderr
, "qemu: bad bluetooth parameter '%s'\n", opt
);
1751 /***********************************************************/
1752 /* QEMU Block devices */
1754 #define HD_ALIAS "index=%d,media=disk"
1755 #define CDROM_ALIAS "index=2,media=cdrom"
1756 #define FD_ALIAS "index=%d,if=floppy"
1757 #define PFLASH_ALIAS "if=pflash"
1758 #define MTD_ALIAS "if=mtd"
1759 #define SD_ALIAS "index=0,if=sd"
1761 QemuOpts
*drive_add(const char *file
, const char *fmt
, ...)
1768 vsnprintf(optstr
, sizeof(optstr
), fmt
, ap
);
1771 opts
= qemu_opts_parse(&qemu_drive_opts
, optstr
, NULL
);
1773 fprintf(stderr
, "%s: huh? duplicate? (%s)\n",
1774 __FUNCTION__
, optstr
);
1778 qemu_opt_set(opts
, "file", file
);
1782 DriveInfo
*drive_get(BlockInterfaceType type
, int bus
, int unit
)
1786 /* seek interface, bus and unit */
1788 QTAILQ_FOREACH(dinfo
, &drives
, next
) {
1789 if (dinfo
->type
== type
&&
1790 dinfo
->bus
== bus
&&
1791 dinfo
->unit
== unit
)
1798 DriveInfo
*drive_get_by_id(const char *id
)
1802 QTAILQ_FOREACH(dinfo
, &drives
, next
) {
1803 if (strcmp(id
, dinfo
->id
))
1810 int drive_get_max_bus(BlockInterfaceType type
)
1816 QTAILQ_FOREACH(dinfo
, &drives
, next
) {
1817 if(dinfo
->type
== type
&&
1818 dinfo
->bus
> max_bus
)
1819 max_bus
= dinfo
->bus
;
1824 const char *drive_get_serial(BlockDriverState
*bdrv
)
1828 QTAILQ_FOREACH(dinfo
, &drives
, next
) {
1829 if (dinfo
->bdrv
== bdrv
)
1830 return dinfo
->serial
;
1836 BlockInterfaceErrorAction
drive_get_on_error(
1837 BlockDriverState
*bdrv
, int is_read
)
1841 QTAILQ_FOREACH(dinfo
, &drives
, next
) {
1842 if (dinfo
->bdrv
== bdrv
)
1843 return is_read
? dinfo
->on_read_error
: dinfo
->on_write_error
;
1846 return is_read
? BLOCK_ERR_REPORT
: BLOCK_ERR_STOP_ENOSPC
;
1849 static void bdrv_format_print(void *opaque
, const char *name
)
1851 fprintf(stderr
, " %s", name
);
1854 void drive_uninit(DriveInfo
*dinfo
)
1856 qemu_opts_del(dinfo
->opts
);
1857 bdrv_delete(dinfo
->bdrv
);
1858 QTAILQ_REMOVE(&drives
, dinfo
, next
);
1862 static int parse_block_error_action(const char *buf
, int is_read
)
1864 if (!strcmp(buf
, "ignore")) {
1865 return BLOCK_ERR_IGNORE
;
1866 } else if (!is_read
&& !strcmp(buf
, "enospc")) {
1867 return BLOCK_ERR_STOP_ENOSPC
;
1868 } else if (!strcmp(buf
, "stop")) {
1869 return BLOCK_ERR_STOP_ANY
;
1870 } else if (!strcmp(buf
, "report")) {
1871 return BLOCK_ERR_REPORT
;
1873 fprintf(stderr
, "qemu: '%s' invalid %s error action\n",
1874 buf
, is_read
? "read" : "write");
1879 DriveInfo
*drive_init(QemuOpts
*opts
, void *opaque
,
1883 const char *file
= NULL
;
1886 const char *mediastr
= "";
1887 BlockInterfaceType type
;
1888 enum { MEDIA_DISK
, MEDIA_CDROM
} media
;
1889 int bus_id
, unit_id
;
1890 int cyls
, heads
, secs
, translation
;
1891 BlockDriver
*drv
= NULL
;
1892 QEMUMachine
*machine
= opaque
;
1899 int on_read_error
, on_write_error
;
1900 const char *devaddr
;
1906 translation
= BIOS_ATA_TRANSLATION_AUTO
;
1909 if (machine
&& machine
->use_scsi
) {
1911 max_devs
= MAX_SCSI_DEVS
;
1912 pstrcpy(devname
, sizeof(devname
), "scsi");
1915 max_devs
= MAX_IDE_DEVS
;
1916 pstrcpy(devname
, sizeof(devname
), "ide");
1920 /* extract parameters */
1921 bus_id
= qemu_opt_get_number(opts
, "bus", 0);
1922 unit_id
= qemu_opt_get_number(opts
, "unit", -1);
1923 index
= qemu_opt_get_number(opts
, "index", -1);
1925 cyls
= qemu_opt_get_number(opts
, "cyls", 0);
1926 heads
= qemu_opt_get_number(opts
, "heads", 0);
1927 secs
= qemu_opt_get_number(opts
, "secs", 0);
1929 snapshot
= qemu_opt_get_bool(opts
, "snapshot", 0);
1930 ro
= qemu_opt_get_bool(opts
, "readonly", 0);
1932 file
= qemu_opt_get(opts
, "file");
1933 serial
= qemu_opt_get(opts
, "serial");
1935 if ((buf
= qemu_opt_get(opts
, "if")) != NULL
) {
1936 pstrcpy(devname
, sizeof(devname
), buf
);
1937 if (!strcmp(buf
, "ide")) {
1939 max_devs
= MAX_IDE_DEVS
;
1940 } else if (!strcmp(buf
, "scsi")) {
1942 max_devs
= MAX_SCSI_DEVS
;
1943 } else if (!strcmp(buf
, "floppy")) {
1946 } else if (!strcmp(buf
, "pflash")) {
1949 } else if (!strcmp(buf
, "mtd")) {
1952 } else if (!strcmp(buf
, "sd")) {
1955 } else if (!strcmp(buf
, "virtio")) {
1958 } else if (!strcmp(buf
, "xen")) {
1961 } else if (!strcmp(buf
, "none")) {
1965 fprintf(stderr
, "qemu: unsupported bus type '%s'\n", buf
);
1970 if (cyls
|| heads
|| secs
) {
1971 if (cyls
< 1 || (type
== IF_IDE
&& cyls
> 16383)) {
1972 fprintf(stderr
, "qemu: '%s' invalid physical cyls number\n", buf
);
1975 if (heads
< 1 || (type
== IF_IDE
&& heads
> 16)) {
1976 fprintf(stderr
, "qemu: '%s' invalid physical heads number\n", buf
);
1979 if (secs
< 1 || (type
== IF_IDE
&& secs
> 63)) {
1980 fprintf(stderr
, "qemu: '%s' invalid physical secs number\n", buf
);
1985 if ((buf
= qemu_opt_get(opts
, "trans")) != NULL
) {
1988 "qemu: '%s' trans must be used with cyls,heads and secs\n",
1992 if (!strcmp(buf
, "none"))
1993 translation
= BIOS_ATA_TRANSLATION_NONE
;
1994 else if (!strcmp(buf
, "lba"))
1995 translation
= BIOS_ATA_TRANSLATION_LBA
;
1996 else if (!strcmp(buf
, "auto"))
1997 translation
= BIOS_ATA_TRANSLATION_AUTO
;
1999 fprintf(stderr
, "qemu: '%s' invalid translation type\n", buf
);
2004 if ((buf
= qemu_opt_get(opts
, "media")) != NULL
) {
2005 if (!strcmp(buf
, "disk")) {
2007 } else if (!strcmp(buf
, "cdrom")) {
2008 if (cyls
|| secs
|| heads
) {
2010 "qemu: '%s' invalid physical CHS format\n", buf
);
2013 media
= MEDIA_CDROM
;
2015 fprintf(stderr
, "qemu: '%s' invalid media\n", buf
);
2020 if ((buf
= qemu_opt_get(opts
, "cache")) != NULL
) {
2021 if (!strcmp(buf
, "off") || !strcmp(buf
, "none"))
2023 else if (!strcmp(buf
, "writethrough"))
2025 else if (!strcmp(buf
, "writeback"))
2028 fprintf(stderr
, "qemu: invalid cache option\n");
2033 #ifdef CONFIG_LINUX_AIO
2034 if ((buf
= qemu_opt_get(opts
, "aio")) != NULL
) {
2035 if (!strcmp(buf
, "threads"))
2037 else if (!strcmp(buf
, "native"))
2040 fprintf(stderr
, "qemu: invalid aio option\n");
2046 if ((buf
= qemu_opt_get(opts
, "format")) != NULL
) {
2047 if (strcmp(buf
, "?") == 0) {
2048 fprintf(stderr
, "qemu: Supported formats:");
2049 bdrv_iterate_format(bdrv_format_print
, NULL
);
2050 fprintf(stderr
, "\n");
2053 drv
= bdrv_find_whitelisted_format(buf
);
2055 fprintf(stderr
, "qemu: '%s' invalid format\n", buf
);
2060 on_write_error
= BLOCK_ERR_STOP_ENOSPC
;
2061 if ((buf
= qemu_opt_get(opts
, "werror")) != NULL
) {
2062 if (type
!= IF_IDE
&& type
!= IF_SCSI
&& type
!= IF_VIRTIO
) {
2063 fprintf(stderr
, "werror is no supported by this format\n");
2067 on_write_error
= parse_block_error_action(buf
, 0);
2068 if (on_write_error
< 0) {
2073 on_read_error
= BLOCK_ERR_REPORT
;
2074 if ((buf
= qemu_opt_get(opts
, "rerror")) != NULL
) {
2075 if (type
!= IF_IDE
&& type
!= IF_VIRTIO
) {
2076 fprintf(stderr
, "rerror is no supported by this format\n");
2080 on_read_error
= parse_block_error_action(buf
, 1);
2081 if (on_read_error
< 0) {
2086 if ((devaddr
= qemu_opt_get(opts
, "addr")) != NULL
) {
2087 if (type
!= IF_VIRTIO
) {
2088 fprintf(stderr
, "addr is not supported\n");
2093 /* compute bus and unit according index */
2096 if (bus_id
!= 0 || unit_id
!= -1) {
2098 "qemu: index cannot be used with bus and unit\n");
2106 unit_id
= index
% max_devs
;
2107 bus_id
= index
/ max_devs
;
2111 /* if user doesn't specify a unit_id,
2112 * try to find the first free
2115 if (unit_id
== -1) {
2117 while (drive_get(type
, bus_id
, unit_id
) != NULL
) {
2119 if (max_devs
&& unit_id
>= max_devs
) {
2120 unit_id
-= max_devs
;
2128 if (max_devs
&& unit_id
>= max_devs
) {
2129 fprintf(stderr
, "qemu: unit %d too big (max is %d)\n",
2130 unit_id
, max_devs
- 1);
2135 * ignore multiple definitions
2138 if (drive_get(type
, bus_id
, unit_id
) != NULL
) {
2145 dinfo
= qemu_mallocz(sizeof(*dinfo
));
2146 if ((buf
= qemu_opts_id(opts
)) != NULL
) {
2147 dinfo
->id
= qemu_strdup(buf
);
2149 /* no id supplied -> create one */
2150 dinfo
->id
= qemu_mallocz(32);
2151 if (type
== IF_IDE
|| type
== IF_SCSI
)
2152 mediastr
= (media
== MEDIA_CDROM
) ? "-cd" : "-hd";
2154 snprintf(dinfo
->id
, 32, "%s%i%s%i",
2155 devname
, bus_id
, mediastr
, unit_id
);
2157 snprintf(dinfo
->id
, 32, "%s%s%i",
2158 devname
, mediastr
, unit_id
);
2160 dinfo
->bdrv
= bdrv_new(dinfo
->id
);
2161 dinfo
->devaddr
= devaddr
;
2163 dinfo
->bus
= bus_id
;
2164 dinfo
->unit
= unit_id
;
2165 dinfo
->on_read_error
= on_read_error
;
2166 dinfo
->on_write_error
= on_write_error
;
2169 strncpy(dinfo
->serial
, serial
, sizeof(serial
));
2170 QTAILQ_INSERT_TAIL(&drives
, dinfo
, next
);
2180 bdrv_set_geometry_hint(dinfo
->bdrv
, cyls
, heads
, secs
);
2181 bdrv_set_translation_hint(dinfo
->bdrv
, translation
);
2185 bdrv_set_type_hint(dinfo
->bdrv
, BDRV_TYPE_CDROM
);
2190 /* FIXME: This isn't really a floppy, but it's a reasonable
2193 bdrv_set_type_hint(dinfo
->bdrv
, BDRV_TYPE_FLOPPY
);
2199 /* add virtio block device */
2200 opts
= qemu_opts_create(&qemu_device_opts
, NULL
, 0);
2201 qemu_opt_set(opts
, "driver", "virtio-blk-pci");
2202 qemu_opt_set(opts
, "drive", dinfo
->id
);
2204 qemu_opt_set(opts
, "addr", devaddr
);
2215 bdrv_flags
|= BDRV_O_SNAPSHOT
;
2216 cache
= 2; /* always use write-back with snapshot */
2218 if (cache
== 0) /* no caching */
2219 bdrv_flags
|= BDRV_O_NOCACHE
;
2220 else if (cache
== 2) /* write-back */
2221 bdrv_flags
|= BDRV_O_CACHE_WB
;
2224 bdrv_flags
|= BDRV_O_NATIVE_AIO
;
2226 bdrv_flags
&= ~BDRV_O_NATIVE_AIO
;
2230 if (type
== IF_IDE
) {
2231 fprintf(stderr
, "qemu: readonly flag not supported for drive with ide interface\n");
2234 (void)bdrv_set_read_only(dinfo
->bdrv
, 1);
2237 if (bdrv_open2(dinfo
->bdrv
, file
, bdrv_flags
, drv
) < 0) {
2238 fprintf(stderr
, "qemu: could not open disk image %s: %s\n",
2239 file
, strerror(errno
));
2243 if (bdrv_key_required(dinfo
->bdrv
))
2249 static int drive_init_func(QemuOpts
*opts
, void *opaque
)
2251 QEMUMachine
*machine
= opaque
;
2252 int fatal_error
= 0;
2254 if (drive_init(opts
, machine
, &fatal_error
) == NULL
) {
2261 static int drive_enable_snapshot(QemuOpts
*opts
, void *opaque
)
2263 if (NULL
== qemu_opt_get(opts
, "snapshot")) {
2264 qemu_opt_set(opts
, "snapshot", "on");
2269 void qemu_register_boot_set(QEMUBootSetHandler
*func
, void *opaque
)
2271 boot_set_handler
= func
;
2272 boot_set_opaque
= opaque
;
2275 int qemu_boot_set(const char *boot_devices
)
2277 if (!boot_set_handler
) {
2280 return boot_set_handler(boot_set_opaque
, boot_devices
);
2283 static int parse_bootdevices(char *devices
)
2285 /* We just do some generic consistency checks */
2289 for (p
= devices
; *p
!= '\0'; p
++) {
2290 /* Allowed boot devices are:
2291 * a-b: floppy disk drives
2292 * c-f: IDE disk drives
2293 * g-m: machine implementation dependant drives
2294 * n-p: network devices
2295 * It's up to each machine implementation to check if the given boot
2296 * devices match the actual hardware implementation and firmware
2299 if (*p
< 'a' || *p
> 'p') {
2300 fprintf(stderr
, "Invalid boot device '%c'\n", *p
);
2303 if (bitmap
& (1 << (*p
- 'a'))) {
2304 fprintf(stderr
, "Boot device '%c' was given twice\n", *p
);
2307 bitmap
|= 1 << (*p
- 'a');
2312 static void restore_boot_devices(void *opaque
)
2314 char *standard_boot_devices
= opaque
;
2316 qemu_boot_set(standard_boot_devices
);
2318 qemu_unregister_reset(restore_boot_devices
, standard_boot_devices
);
2319 qemu_free(standard_boot_devices
);
2322 static void numa_add(const char *optarg
)
2326 unsigned long long value
, endvalue
;
2329 optarg
= get_opt_name(option
, 128, optarg
, ',') + 1;
2330 if (!strcmp(option
, "node")) {
2331 if (get_param_value(option
, 128, "nodeid", optarg
) == 0) {
2332 nodenr
= nb_numa_nodes
;
2334 nodenr
= strtoull(option
, NULL
, 10);
2337 if (get_param_value(option
, 128, "mem", optarg
) == 0) {
2338 node_mem
[nodenr
] = 0;
2340 value
= strtoull(option
, &endptr
, 0);
2342 case 0: case 'M': case 'm':
2349 node_mem
[nodenr
] = value
;
2351 if (get_param_value(option
, 128, "cpus", optarg
) == 0) {
2352 node_cpumask
[nodenr
] = 0;
2354 value
= strtoull(option
, &endptr
, 10);
2357 fprintf(stderr
, "only 64 CPUs in NUMA mode supported.\n");
2359 if (*endptr
== '-') {
2360 endvalue
= strtoull(endptr
+1, &endptr
, 10);
2361 if (endvalue
>= 63) {
2364 "only 63 CPUs in NUMA mode supported.\n");
2366 value
= (1 << (endvalue
+ 1)) - (1 << value
);
2371 node_cpumask
[nodenr
] = value
;
2378 static void smp_parse(const char *optarg
)
2380 int smp
, sockets
= 0, threads
= 0, cores
= 0;
2384 smp
= strtoul(optarg
, &endptr
, 10);
2385 if (endptr
!= optarg
) {
2386 if (*endptr
== ',') {
2390 if (get_param_value(option
, 128, "sockets", endptr
) != 0)
2391 sockets
= strtoull(option
, NULL
, 10);
2392 if (get_param_value(option
, 128, "cores", endptr
) != 0)
2393 cores
= strtoull(option
, NULL
, 10);
2394 if (get_param_value(option
, 128, "threads", endptr
) != 0)
2395 threads
= strtoull(option
, NULL
, 10);
2396 if (get_param_value(option
, 128, "maxcpus", endptr
) != 0)
2397 max_cpus
= strtoull(option
, NULL
, 10);
2399 /* compute missing values, prefer sockets over cores over threads */
2400 if (smp
== 0 || sockets
== 0) {
2401 sockets
= sockets
> 0 ? sockets
: 1;
2402 cores
= cores
> 0 ? cores
: 1;
2403 threads
= threads
> 0 ? threads
: 1;
2405 smp
= cores
* threads
* sockets
;
2409 threads
= threads
> 0 ? threads
: 1;
2410 cores
= smp
/ (sockets
* threads
);
2413 threads
= smp
/ (cores
* sockets
);
2418 smp_cores
= cores
> 0 ? cores
: 1;
2419 smp_threads
= threads
> 0 ? threads
: 1;
2421 max_cpus
= smp_cpus
;
2424 /***********************************************************/
2427 static int usb_device_add(const char *devname
, int is_hotplug
)
2430 USBDevice
*dev
= NULL
;
2435 /* drivers with .usbdevice_name entry in USBDeviceInfo */
2436 dev
= usbdevice_create(devname
);
2440 /* the other ones */
2441 if (strstart(devname
, "host:", &p
)) {
2442 dev
= usb_host_device_open(p
);
2443 } else if (!strcmp(devname
, "bt") || strstart(devname
, "bt:", &p
)) {
2444 dev
= usb_bt_init(devname
[2] ? hci_init(p
) :
2445 bt_new_hci(qemu_find_bt_vlan(0)));
2456 static int usb_device_del(const char *devname
)
2461 if (strstart(devname
, "host:", &p
))
2462 return usb_host_device_close(p
);
2467 p
= strchr(devname
, '.');
2470 bus_num
= strtoul(devname
, NULL
, 0);
2471 addr
= strtoul(p
+ 1, NULL
, 0);
2473 return usb_device_delete_addr(bus_num
, addr
);
2476 static int usb_parse(const char *cmdline
)
2479 r
= usb_device_add(cmdline
, 0);
2481 fprintf(stderr
, "qemu: could not add USB device '%s'\n", cmdline
);
2486 void do_usb_add(Monitor
*mon
, const QDict
*qdict
)
2488 const char *devname
= qdict_get_str(qdict
, "devname");
2489 if (usb_device_add(devname
, 1) < 0) {
2490 qemu_error("could not add USB device '%s'\n", devname
);
2494 void do_usb_del(Monitor
*mon
, const QDict
*qdict
)
2496 const char *devname
= qdict_get_str(qdict
, "devname");
2497 if (usb_device_del(devname
) < 0) {
2498 qemu_error("could not delete USB device '%s'\n", devname
);
2502 /***********************************************************/
2503 /* PCMCIA/Cardbus */
2505 static struct pcmcia_socket_entry_s
{
2506 PCMCIASocket
*socket
;
2507 struct pcmcia_socket_entry_s
*next
;
2508 } *pcmcia_sockets
= 0;
2510 void pcmcia_socket_register(PCMCIASocket
*socket
)
2512 struct pcmcia_socket_entry_s
*entry
;
2514 entry
= qemu_malloc(sizeof(struct pcmcia_socket_entry_s
));
2515 entry
->socket
= socket
;
2516 entry
->next
= pcmcia_sockets
;
2517 pcmcia_sockets
= entry
;
2520 void pcmcia_socket_unregister(PCMCIASocket
*socket
)
2522 struct pcmcia_socket_entry_s
*entry
, **ptr
;
2524 ptr
= &pcmcia_sockets
;
2525 for (entry
= *ptr
; entry
; ptr
= &entry
->next
, entry
= *ptr
)
2526 if (entry
->socket
== socket
) {
2532 void pcmcia_info(Monitor
*mon
)
2534 struct pcmcia_socket_entry_s
*iter
;
2536 if (!pcmcia_sockets
)
2537 monitor_printf(mon
, "No PCMCIA sockets\n");
2539 for (iter
= pcmcia_sockets
; iter
; iter
= iter
->next
)
2540 monitor_printf(mon
, "%s: %s\n", iter
->socket
->slot_string
,
2541 iter
->socket
->attached
? iter
->socket
->card_string
:
2545 /***********************************************************/
2546 /* register display */
2548 struct DisplayAllocator default_allocator
= {
2549 defaultallocator_create_displaysurface
,
2550 defaultallocator_resize_displaysurface
,
2551 defaultallocator_free_displaysurface
2554 void register_displaystate(DisplayState
*ds
)
2564 DisplayState
*get_displaystate(void)
2566 return display_state
;
2569 DisplayAllocator
*register_displayallocator(DisplayState
*ds
, DisplayAllocator
*da
)
2571 if(ds
->allocator
== &default_allocator
) ds
->allocator
= da
;
2572 return ds
->allocator
;
2577 static void dumb_display_init(void)
2579 DisplayState
*ds
= qemu_mallocz(sizeof(DisplayState
));
2580 ds
->allocator
= &default_allocator
;
2581 ds
->surface
= qemu_create_displaysurface(ds
, 640, 480);
2582 register_displaystate(ds
);
2585 /***********************************************************/
2588 typedef struct IOHandlerRecord
{
2590 IOCanRWHandler
*fd_read_poll
;
2592 IOHandler
*fd_write
;
2595 /* temporary data */
2597 struct IOHandlerRecord
*next
;
2600 static IOHandlerRecord
*first_io_handler
;
2602 /* XXX: fd_read_poll should be suppressed, but an API change is
2603 necessary in the character devices to suppress fd_can_read(). */
2604 int qemu_set_fd_handler2(int fd
,
2605 IOCanRWHandler
*fd_read_poll
,
2607 IOHandler
*fd_write
,
2610 IOHandlerRecord
**pioh
, *ioh
;
2612 if (!fd_read
&& !fd_write
) {
2613 pioh
= &first_io_handler
;
2618 if (ioh
->fd
== fd
) {
2625 for(ioh
= first_io_handler
; ioh
!= NULL
; ioh
= ioh
->next
) {
2629 ioh
= qemu_mallocz(sizeof(IOHandlerRecord
));
2630 ioh
->next
= first_io_handler
;
2631 first_io_handler
= ioh
;
2634 ioh
->fd_read_poll
= fd_read_poll
;
2635 ioh
->fd_read
= fd_read
;
2636 ioh
->fd_write
= fd_write
;
2637 ioh
->opaque
= opaque
;
2643 int qemu_set_fd_handler(int fd
,
2645 IOHandler
*fd_write
,
2648 return qemu_set_fd_handler2(fd
, NULL
, fd_read
, fd_write
, opaque
);
2652 /***********************************************************/
2653 /* Polling handling */
2655 typedef struct PollingEntry
{
2658 struct PollingEntry
*next
;
2661 static PollingEntry
*first_polling_entry
;
2663 int qemu_add_polling_cb(PollingFunc
*func
, void *opaque
)
2665 PollingEntry
**ppe
, *pe
;
2666 pe
= qemu_mallocz(sizeof(PollingEntry
));
2668 pe
->opaque
= opaque
;
2669 for(ppe
= &first_polling_entry
; *ppe
!= NULL
; ppe
= &(*ppe
)->next
);
2674 void qemu_del_polling_cb(PollingFunc
*func
, void *opaque
)
2676 PollingEntry
**ppe
, *pe
;
2677 for(ppe
= &first_polling_entry
; *ppe
!= NULL
; ppe
= &(*ppe
)->next
) {
2679 if (pe
->func
== func
&& pe
->opaque
== opaque
) {
2687 /***********************************************************/
2688 /* Wait objects support */
2689 typedef struct WaitObjects
{
2691 HANDLE events
[MAXIMUM_WAIT_OBJECTS
+ 1];
2692 WaitObjectFunc
*func
[MAXIMUM_WAIT_OBJECTS
+ 1];
2693 void *opaque
[MAXIMUM_WAIT_OBJECTS
+ 1];
2696 static WaitObjects wait_objects
= {0};
2698 int qemu_add_wait_object(HANDLE handle
, WaitObjectFunc
*func
, void *opaque
)
2700 WaitObjects
*w
= &wait_objects
;
2702 if (w
->num
>= MAXIMUM_WAIT_OBJECTS
)
2704 w
->events
[w
->num
] = handle
;
2705 w
->func
[w
->num
] = func
;
2706 w
->opaque
[w
->num
] = opaque
;
2711 void qemu_del_wait_object(HANDLE handle
, WaitObjectFunc
*func
, void *opaque
)
2714 WaitObjects
*w
= &wait_objects
;
2717 for (i
= 0; i
< w
->num
; i
++) {
2718 if (w
->events
[i
] == handle
)
2721 w
->events
[i
] = w
->events
[i
+ 1];
2722 w
->func
[i
] = w
->func
[i
+ 1];
2723 w
->opaque
[i
] = w
->opaque
[i
+ 1];
2731 /***********************************************************/
2732 /* ram save/restore */
2734 #define RAM_SAVE_FLAG_FULL 0x01 /* Obsolete, not used anymore */
2735 #define RAM_SAVE_FLAG_COMPRESS 0x02
2736 #define RAM_SAVE_FLAG_MEM_SIZE 0x04
2737 #define RAM_SAVE_FLAG_PAGE 0x08
2738 #define RAM_SAVE_FLAG_EOS 0x10
2740 static int is_dup_page(uint8_t *page
, uint8_t ch
)
2742 uint32_t val
= ch
<< 24 | ch
<< 16 | ch
<< 8 | ch
;
2743 uint32_t *array
= (uint32_t *)page
;
2746 for (i
= 0; i
< (TARGET_PAGE_SIZE
/ 4); i
++) {
2747 if (array
[i
] != val
)
2754 static int ram_save_block(QEMUFile
*f
)
2756 static ram_addr_t current_addr
= 0;
2757 ram_addr_t saved_addr
= current_addr
;
2758 ram_addr_t addr
= 0;
2761 while (addr
< last_ram_offset
) {
2762 if (cpu_physical_memory_get_dirty(current_addr
, MIGRATION_DIRTY_FLAG
)) {
2765 cpu_physical_memory_reset_dirty(current_addr
,
2766 current_addr
+ TARGET_PAGE_SIZE
,
2767 MIGRATION_DIRTY_FLAG
);
2769 p
= qemu_get_ram_ptr(current_addr
);
2771 if (is_dup_page(p
, *p
)) {
2772 qemu_put_be64(f
, current_addr
| RAM_SAVE_FLAG_COMPRESS
);
2773 qemu_put_byte(f
, *p
);
2775 qemu_put_be64(f
, current_addr
| RAM_SAVE_FLAG_PAGE
);
2776 qemu_put_buffer(f
, p
, TARGET_PAGE_SIZE
);
2782 addr
+= TARGET_PAGE_SIZE
;
2783 current_addr
= (saved_addr
+ addr
) % last_ram_offset
;
2789 static uint64_t bytes_transferred
;
2791 static ram_addr_t
ram_save_remaining(void)
2794 ram_addr_t count
= 0;
2796 for (addr
= 0; addr
< last_ram_offset
; addr
+= TARGET_PAGE_SIZE
) {
2797 if (cpu_physical_memory_get_dirty(addr
, MIGRATION_DIRTY_FLAG
))
2804 uint64_t ram_bytes_remaining(void)
2806 return ram_save_remaining() * TARGET_PAGE_SIZE
;
2809 uint64_t ram_bytes_transferred(void)
2811 return bytes_transferred
;
2814 uint64_t ram_bytes_total(void)
2816 return last_ram_offset
;
2819 static int ram_save_live(Monitor
*mon
, QEMUFile
*f
, int stage
, void *opaque
)
2822 uint64_t bytes_transferred_last
;
2824 uint64_t expected_time
= 0;
2827 cpu_physical_memory_set_dirty_tracking(0);
2831 if (cpu_physical_sync_dirty_bitmap(0, TARGET_PHYS_ADDR_MAX
) != 0) {
2832 qemu_file_set_error(f
);
2837 bytes_transferred
= 0;
2839 /* Make sure all dirty bits are set */
2840 for (addr
= 0; addr
< last_ram_offset
; addr
+= TARGET_PAGE_SIZE
) {
2841 if (!cpu_physical_memory_get_dirty(addr
, MIGRATION_DIRTY_FLAG
))
2842 cpu_physical_memory_set_dirty(addr
);
2845 /* Enable dirty memory tracking */
2846 cpu_physical_memory_set_dirty_tracking(1);
2848 qemu_put_be64(f
, last_ram_offset
| RAM_SAVE_FLAG_MEM_SIZE
);
2851 bytes_transferred_last
= bytes_transferred
;
2852 bwidth
= get_clock();
2854 while (!qemu_file_rate_limit(f
)) {
2857 ret
= ram_save_block(f
);
2858 bytes_transferred
+= ret
* TARGET_PAGE_SIZE
;
2859 if (ret
== 0) /* no more blocks */
2863 bwidth
= get_clock() - bwidth
;
2864 bwidth
= (bytes_transferred
- bytes_transferred_last
) / bwidth
;
2866 /* if we haven't transferred anything this round, force expected_time to a
2867 * a very high value, but without crashing */
2871 /* try transferring iterative blocks of memory */
2873 /* flush all remaining blocks regardless of rate limiting */
2874 while (ram_save_block(f
) != 0) {
2875 bytes_transferred
+= TARGET_PAGE_SIZE
;
2877 cpu_physical_memory_set_dirty_tracking(0);
2880 qemu_put_be64(f
, RAM_SAVE_FLAG_EOS
);
2882 expected_time
= ram_save_remaining() * TARGET_PAGE_SIZE
/ bwidth
;
2884 return (stage
== 2) && (expected_time
<= migrate_max_downtime());
2887 static int ram_load(QEMUFile
*f
, void *opaque
, int version_id
)
2892 if (version_id
!= 3)
2896 addr
= qemu_get_be64(f
);
2898 flags
= addr
& ~TARGET_PAGE_MASK
;
2899 addr
&= TARGET_PAGE_MASK
;
2901 if (flags
& RAM_SAVE_FLAG_MEM_SIZE
) {
2902 if (addr
!= last_ram_offset
)
2906 if (flags
& RAM_SAVE_FLAG_COMPRESS
) {
2907 uint8_t ch
= qemu_get_byte(f
);
2908 memset(qemu_get_ram_ptr(addr
), ch
, TARGET_PAGE_SIZE
);
2911 (!kvm_enabled() || kvm_has_sync_mmu())) {
2912 madvise(qemu_get_ram_ptr(addr
), TARGET_PAGE_SIZE
, MADV_DONTNEED
);
2915 } else if (flags
& RAM_SAVE_FLAG_PAGE
) {
2916 qemu_get_buffer(f
, qemu_get_ram_ptr(addr
), TARGET_PAGE_SIZE
);
2918 if (qemu_file_has_error(f
)) {
2921 } while (!(flags
& RAM_SAVE_FLAG_EOS
));
2926 void qemu_service_io(void)
2928 qemu_notify_event();
2931 /***********************************************************/
2932 /* machine registration */
2934 static QEMUMachine
*first_machine
= NULL
;
2935 QEMUMachine
*current_machine
= NULL
;
2937 int qemu_register_machine(QEMUMachine
*m
)
2940 pm
= &first_machine
;
2948 static QEMUMachine
*find_machine(const char *name
)
2952 for(m
= first_machine
; m
!= NULL
; m
= m
->next
) {
2953 if (!strcmp(m
->name
, name
))
2955 if (m
->alias
&& !strcmp(m
->alias
, name
))
2961 static QEMUMachine
*find_default_machine(void)
2965 for(m
= first_machine
; m
!= NULL
; m
= m
->next
) {
2966 if (m
->is_default
) {
2973 /***********************************************************/
2974 /* main execution loop */
2976 static void gui_update(void *opaque
)
2978 uint64_t interval
= GUI_REFRESH_INTERVAL
;
2979 DisplayState
*ds
= opaque
;
2980 DisplayChangeListener
*dcl
= ds
->listeners
;
2984 while (dcl
!= NULL
) {
2985 if (dcl
->gui_timer_interval
&&
2986 dcl
->gui_timer_interval
< interval
)
2987 interval
= dcl
->gui_timer_interval
;
2990 qemu_mod_timer(ds
->gui_timer
, interval
+ qemu_get_clock(rt_clock
));
2993 static void nographic_update(void *opaque
)
2995 uint64_t interval
= GUI_REFRESH_INTERVAL
;
2997 qemu_mod_timer(nographic_timer
, interval
+ qemu_get_clock(rt_clock
));
3000 struct vm_change_state_entry
{
3001 VMChangeStateHandler
*cb
;
3003 QLIST_ENTRY (vm_change_state_entry
) entries
;
3006 static QLIST_HEAD(vm_change_state_head
, vm_change_state_entry
) vm_change_state_head
;
3008 VMChangeStateEntry
*qemu_add_vm_change_state_handler(VMChangeStateHandler
*cb
,
3011 VMChangeStateEntry
*e
;
3013 e
= qemu_mallocz(sizeof (*e
));
3017 QLIST_INSERT_HEAD(&vm_change_state_head
, e
, entries
);
3021 void qemu_del_vm_change_state_handler(VMChangeStateEntry
*e
)
3023 QLIST_REMOVE (e
, entries
);
3027 static void vm_state_notify(int running
, int reason
)
3029 VMChangeStateEntry
*e
;
3031 for (e
= vm_change_state_head
.lh_first
; e
; e
= e
->entries
.le_next
) {
3032 e
->cb(e
->opaque
, running
, reason
);
3036 static void resume_all_vcpus(void);
3037 static void pause_all_vcpus(void);
3044 vm_state_notify(1, 0);
3045 qemu_rearm_alarm_timer(alarm_timer
);
3050 /* reset/shutdown handler */
3052 typedef struct QEMUResetEntry
{
3053 QTAILQ_ENTRY(QEMUResetEntry
) entry
;
3054 QEMUResetHandler
*func
;
3058 static QTAILQ_HEAD(reset_handlers
, QEMUResetEntry
) reset_handlers
=
3059 QTAILQ_HEAD_INITIALIZER(reset_handlers
);
3060 static int reset_requested
;
3061 static int shutdown_requested
;
3062 static int powerdown_requested
;
3063 static int debug_requested
;
3064 static int vmstop_requested
;
3066 int qemu_shutdown_requested(void)
3068 int r
= shutdown_requested
;
3069 shutdown_requested
= 0;
3073 int qemu_reset_requested(void)
3075 int r
= reset_requested
;
3076 reset_requested
= 0;
3080 int qemu_powerdown_requested(void)
3082 int r
= powerdown_requested
;
3083 powerdown_requested
= 0;
3087 static int qemu_debug_requested(void)
3089 int r
= debug_requested
;
3090 debug_requested
= 0;
3094 static int qemu_vmstop_requested(void)
3096 int r
= vmstop_requested
;
3097 vmstop_requested
= 0;
3101 static void do_vm_stop(int reason
)
3104 cpu_disable_ticks();
3107 vm_state_notify(0, reason
);
3111 void qemu_register_reset(QEMUResetHandler
*func
, void *opaque
)
3113 QEMUResetEntry
*re
= qemu_mallocz(sizeof(QEMUResetEntry
));
3116 re
->opaque
= opaque
;
3117 QTAILQ_INSERT_TAIL(&reset_handlers
, re
, entry
);
3120 void qemu_unregister_reset(QEMUResetHandler
*func
, void *opaque
)
3124 QTAILQ_FOREACH(re
, &reset_handlers
, entry
) {
3125 if (re
->func
== func
&& re
->opaque
== opaque
) {
3126 QTAILQ_REMOVE(&reset_handlers
, re
, entry
);
3133 void qemu_system_reset(void)
3135 QEMUResetEntry
*re
, *nre
;
3137 /* reset all devices */
3138 QTAILQ_FOREACH_SAFE(re
, &reset_handlers
, entry
, nre
) {
3139 re
->func(re
->opaque
);
3143 void qemu_system_reset_request(void)
3146 shutdown_requested
= 1;
3148 reset_requested
= 1;
3150 qemu_notify_event();
3153 void qemu_system_shutdown_request(void)
3155 shutdown_requested
= 1;
3156 qemu_notify_event();
3159 void qemu_system_powerdown_request(void)
3161 powerdown_requested
= 1;
3162 qemu_notify_event();
3165 #ifdef CONFIG_IOTHREAD
3166 static void qemu_system_vmstop_request(int reason
)
3168 vmstop_requested
= reason
;
3169 qemu_notify_event();
3174 static int io_thread_fd
= -1;
3176 static void qemu_event_increment(void)
3178 static const char byte
= 0;
3180 if (io_thread_fd
== -1)
3183 write(io_thread_fd
, &byte
, sizeof(byte
));
3186 static void qemu_event_read(void *opaque
)
3188 int fd
= (unsigned long)opaque
;
3191 /* Drain the notify pipe */
3194 len
= read(fd
, buffer
, sizeof(buffer
));
3195 } while ((len
== -1 && errno
== EINTR
) || len
> 0);
3198 static int qemu_event_init(void)
3203 err
= qemu_pipe(fds
);
3207 err
= fcntl_setfl(fds
[0], O_NONBLOCK
);
3211 err
= fcntl_setfl(fds
[1], O_NONBLOCK
);
3215 qemu_set_fd_handler2(fds
[0], NULL
, qemu_event_read
, NULL
,
3216 (void *)(unsigned long)fds
[0]);
3218 io_thread_fd
= fds
[1];
3227 HANDLE qemu_event_handle
;
3229 static void dummy_event_handler(void *opaque
)
3233 static int qemu_event_init(void)
3235 qemu_event_handle
= CreateEvent(NULL
, FALSE
, FALSE
, NULL
);
3236 if (!qemu_event_handle
) {
3237 fprintf(stderr
, "Failed CreateEvent: %ld\n", GetLastError());
3240 qemu_add_wait_object(qemu_event_handle
, dummy_event_handler
, NULL
);
3244 static void qemu_event_increment(void)
3246 if (!SetEvent(qemu_event_handle
)) {
3247 fprintf(stderr
, "qemu_event_increment: SetEvent failed: %ld\n",
3254 static int cpu_can_run(CPUState
*env
)
3263 #ifndef CONFIG_IOTHREAD
3264 static int qemu_init_main_loop(void)
3266 return qemu_event_init();
3269 void qemu_init_vcpu(void *_env
)
3271 CPUState
*env
= _env
;
3273 env
->nr_cores
= smp_cores
;
3274 env
->nr_threads
= smp_threads
;
3280 int qemu_cpu_self(void *env
)
3285 static void resume_all_vcpus(void)
3289 static void pause_all_vcpus(void)
3293 void qemu_cpu_kick(void *env
)
3298 void qemu_notify_event(void)
3300 CPUState
*env
= cpu_single_env
;
3307 void qemu_mutex_lock_iothread(void) {}
3308 void qemu_mutex_unlock_iothread(void) {}
3310 void vm_stop(int reason
)
3315 #else /* CONFIG_IOTHREAD */
3317 #include "qemu-thread.h"
3319 QemuMutex qemu_global_mutex
;
3320 static QemuMutex qemu_fair_mutex
;
3322 static QemuThread io_thread
;
3324 static QemuThread
*tcg_cpu_thread
;
3325 static QemuCond
*tcg_halt_cond
;
3327 static int qemu_system_ready
;
3329 static QemuCond qemu_cpu_cond
;
3331 static QemuCond qemu_system_cond
;
3332 static QemuCond qemu_pause_cond
;
3334 static void block_io_signals(void);
3335 static void unblock_io_signals(void);
3336 static int tcg_has_work(void);
3338 static int qemu_init_main_loop(void)
3342 ret
= qemu_event_init();
3346 qemu_cond_init(&qemu_pause_cond
);
3347 qemu_mutex_init(&qemu_fair_mutex
);
3348 qemu_mutex_init(&qemu_global_mutex
);
3349 qemu_mutex_lock(&qemu_global_mutex
);
3351 unblock_io_signals();
3352 qemu_thread_self(&io_thread
);
3357 static void qemu_wait_io_event(CPUState
*env
)
3359 while (!tcg_has_work())
3360 qemu_cond_timedwait(env
->halt_cond
, &qemu_global_mutex
, 1000);
3362 qemu_mutex_unlock(&qemu_global_mutex
);
3365 * Users of qemu_global_mutex can be starved, having no chance
3366 * to acquire it since this path will get to it first.
3367 * So use another lock to provide fairness.
3369 qemu_mutex_lock(&qemu_fair_mutex
);
3370 qemu_mutex_unlock(&qemu_fair_mutex
);
3372 qemu_mutex_lock(&qemu_global_mutex
);
3376 qemu_cond_signal(&qemu_pause_cond
);
3380 static int qemu_cpu_exec(CPUState
*env
);
3382 static void *kvm_cpu_thread_fn(void *arg
)
3384 CPUState
*env
= arg
;
3387 qemu_thread_self(env
->thread
);
3391 /* signal CPU creation */
3392 qemu_mutex_lock(&qemu_global_mutex
);
3394 qemu_cond_signal(&qemu_cpu_cond
);
3396 /* and wait for machine initialization */
3397 while (!qemu_system_ready
)
3398 qemu_cond_timedwait(&qemu_system_cond
, &qemu_global_mutex
, 100);
3401 if (cpu_can_run(env
))
3403 qemu_wait_io_event(env
);
3409 static void tcg_cpu_exec(void);
3411 static void *tcg_cpu_thread_fn(void *arg
)
3413 CPUState
*env
= arg
;
3416 qemu_thread_self(env
->thread
);
3418 /* signal CPU creation */
3419 qemu_mutex_lock(&qemu_global_mutex
);
3420 for (env
= first_cpu
; env
!= NULL
; env
= env
->next_cpu
)
3422 qemu_cond_signal(&qemu_cpu_cond
);
3424 /* and wait for machine initialization */
3425 while (!qemu_system_ready
)
3426 qemu_cond_timedwait(&qemu_system_cond
, &qemu_global_mutex
, 100);
3430 qemu_wait_io_event(cur_cpu
);
3436 void qemu_cpu_kick(void *_env
)
3438 CPUState
*env
= _env
;
3439 qemu_cond_broadcast(env
->halt_cond
);
3441 qemu_thread_signal(env
->thread
, SIGUSR1
);
3444 int qemu_cpu_self(void *_env
)
3446 CPUState
*env
= _env
;
3449 qemu_thread_self(&this);
3451 return qemu_thread_equal(&this, env
->thread
);
3454 static void cpu_signal(int sig
)
3457 cpu_exit(cpu_single_env
);
3460 static void block_io_signals(void)
3463 struct sigaction sigact
;
3466 sigaddset(&set
, SIGUSR2
);
3467 sigaddset(&set
, SIGIO
);
3468 sigaddset(&set
, SIGALRM
);
3469 pthread_sigmask(SIG_BLOCK
, &set
, NULL
);
3472 sigaddset(&set
, SIGUSR1
);
3473 pthread_sigmask(SIG_UNBLOCK
, &set
, NULL
);
3475 memset(&sigact
, 0, sizeof(sigact
));
3476 sigact
.sa_handler
= cpu_signal
;
3477 sigaction(SIGUSR1
, &sigact
, NULL
);
3480 static void unblock_io_signals(void)
3485 sigaddset(&set
, SIGUSR2
);
3486 sigaddset(&set
, SIGIO
);
3487 sigaddset(&set
, SIGALRM
);
3488 pthread_sigmask(SIG_UNBLOCK
, &set
, NULL
);
3491 sigaddset(&set
, SIGUSR1
);
3492 pthread_sigmask(SIG_BLOCK
, &set
, NULL
);
3495 static void qemu_signal_lock(unsigned int msecs
)
3497 qemu_mutex_lock(&qemu_fair_mutex
);
3499 while (qemu_mutex_trylock(&qemu_global_mutex
)) {
3500 qemu_thread_signal(tcg_cpu_thread
, SIGUSR1
);
3501 if (!qemu_mutex_timedlock(&qemu_global_mutex
, msecs
))
3504 qemu_mutex_unlock(&qemu_fair_mutex
);
3507 void qemu_mutex_lock_iothread(void)
3509 if (kvm_enabled()) {
3510 qemu_mutex_lock(&qemu_fair_mutex
);
3511 qemu_mutex_lock(&qemu_global_mutex
);
3512 qemu_mutex_unlock(&qemu_fair_mutex
);
3514 qemu_signal_lock(100);
3517 void qemu_mutex_unlock_iothread(void)
3519 qemu_mutex_unlock(&qemu_global_mutex
);
3522 static int all_vcpus_paused(void)
3524 CPUState
*penv
= first_cpu
;
3529 penv
= (CPUState
*)penv
->next_cpu
;
3535 static void pause_all_vcpus(void)
3537 CPUState
*penv
= first_cpu
;
3541 qemu_thread_signal(penv
->thread
, SIGUSR1
);
3542 qemu_cpu_kick(penv
);
3543 penv
= (CPUState
*)penv
->next_cpu
;
3546 while (!all_vcpus_paused()) {
3547 qemu_cond_timedwait(&qemu_pause_cond
, &qemu_global_mutex
, 100);
3550 qemu_thread_signal(penv
->thread
, SIGUSR1
);
3551 penv
= (CPUState
*)penv
->next_cpu
;
3556 static void resume_all_vcpus(void)
3558 CPUState
*penv
= first_cpu
;
3563 qemu_thread_signal(penv
->thread
, SIGUSR1
);
3564 qemu_cpu_kick(penv
);
3565 penv
= (CPUState
*)penv
->next_cpu
;
3569 static void tcg_init_vcpu(void *_env
)
3571 CPUState
*env
= _env
;
3572 /* share a single thread for all cpus with TCG */
3573 if (!tcg_cpu_thread
) {
3574 env
->thread
= qemu_mallocz(sizeof(QemuThread
));
3575 env
->halt_cond
= qemu_mallocz(sizeof(QemuCond
));
3576 qemu_cond_init(env
->halt_cond
);
3577 qemu_thread_create(env
->thread
, tcg_cpu_thread_fn
, env
);
3578 while (env
->created
== 0)
3579 qemu_cond_timedwait(&qemu_cpu_cond
, &qemu_global_mutex
, 100);
3580 tcg_cpu_thread
= env
->thread
;
3581 tcg_halt_cond
= env
->halt_cond
;
3583 env
->thread
= tcg_cpu_thread
;
3584 env
->halt_cond
= tcg_halt_cond
;
3588 static void kvm_start_vcpu(CPUState
*env
)
3590 env
->thread
= qemu_mallocz(sizeof(QemuThread
));
3591 env
->halt_cond
= qemu_mallocz(sizeof(QemuCond
));
3592 qemu_cond_init(env
->halt_cond
);
3593 qemu_thread_create(env
->thread
, kvm_cpu_thread_fn
, env
);
3594 while (env
->created
== 0)
3595 qemu_cond_timedwait(&qemu_cpu_cond
, &qemu_global_mutex
, 100);
3598 void qemu_init_vcpu(void *_env
)
3600 CPUState
*env
= _env
;
3602 env
->nr_cores
= smp_cores
;
3603 env
->nr_threads
= smp_threads
;
3605 kvm_start_vcpu(env
);
3610 void qemu_notify_event(void)
3612 qemu_event_increment();
3615 void vm_stop(int reason
)
3618 qemu_thread_self(&me
);
3620 if (!qemu_thread_equal(&me
, &io_thread
)) {
3621 qemu_system_vmstop_request(reason
);
3623 * FIXME: should not return to device code in case
3624 * vm_stop() has been requested.
3626 if (cpu_single_env
) {
3627 cpu_exit(cpu_single_env
);
3628 cpu_single_env
->stop
= 1;
3639 static void host_main_loop_wait(int *timeout
)
3645 /* XXX: need to suppress polling by better using win32 events */
3647 for(pe
= first_polling_entry
; pe
!= NULL
; pe
= pe
->next
) {
3648 ret
|= pe
->func(pe
->opaque
);
3652 WaitObjects
*w
= &wait_objects
;
3654 ret
= WaitForMultipleObjects(w
->num
, w
->events
, FALSE
, *timeout
);
3655 if (WAIT_OBJECT_0
+ 0 <= ret
&& ret
<= WAIT_OBJECT_0
+ w
->num
- 1) {
3656 if (w
->func
[ret
- WAIT_OBJECT_0
])
3657 w
->func
[ret
- WAIT_OBJECT_0
](w
->opaque
[ret
- WAIT_OBJECT_0
]);
3659 /* Check for additional signaled events */
3660 for(i
= (ret
- WAIT_OBJECT_0
+ 1); i
< w
->num
; i
++) {
3662 /* Check if event is signaled */
3663 ret2
= WaitForSingleObject(w
->events
[i
], 0);
3664 if(ret2
== WAIT_OBJECT_0
) {
3666 w
->func
[i
](w
->opaque
[i
]);
3667 } else if (ret2
== WAIT_TIMEOUT
) {
3669 err
= GetLastError();
3670 fprintf(stderr
, "WaitForSingleObject error %d %d\n", i
, err
);
3673 } else if (ret
== WAIT_TIMEOUT
) {
3675 err
= GetLastError();
3676 fprintf(stderr
, "WaitForMultipleObjects error %d %d\n", ret
, err
);
3683 static void host_main_loop_wait(int *timeout
)
3688 void main_loop_wait(int timeout
)
3690 IOHandlerRecord
*ioh
;
3691 fd_set rfds
, wfds
, xfds
;
3695 qemu_bh_update_timeout(&timeout
);
3697 host_main_loop_wait(&timeout
);
3699 /* poll any events */
3700 /* XXX: separate device handlers from system ones */
3705 for(ioh
= first_io_handler
; ioh
!= NULL
; ioh
= ioh
->next
) {
3709 (!ioh
->fd_read_poll
||
3710 ioh
->fd_read_poll(ioh
->opaque
) != 0)) {
3711 FD_SET(ioh
->fd
, &rfds
);
3715 if (ioh
->fd_write
) {
3716 FD_SET(ioh
->fd
, &wfds
);
3722 tv
.tv_sec
= timeout
/ 1000;
3723 tv
.tv_usec
= (timeout
% 1000) * 1000;
3725 slirp_select_fill(&nfds
, &rfds
, &wfds
, &xfds
);
3727 qemu_mutex_unlock_iothread();
3728 ret
= select(nfds
+ 1, &rfds
, &wfds
, &xfds
, &tv
);
3729 qemu_mutex_lock_iothread();
3731 IOHandlerRecord
**pioh
;
3733 for(ioh
= first_io_handler
; ioh
!= NULL
; ioh
= ioh
->next
) {
3734 if (!ioh
->deleted
&& ioh
->fd_read
&& FD_ISSET(ioh
->fd
, &rfds
)) {
3735 ioh
->fd_read(ioh
->opaque
);
3737 if (!ioh
->deleted
&& ioh
->fd_write
&& FD_ISSET(ioh
->fd
, &wfds
)) {
3738 ioh
->fd_write(ioh
->opaque
);
3742 /* remove deleted IO handlers */
3743 pioh
= &first_io_handler
;
3754 slirp_select_poll(&rfds
, &wfds
, &xfds
, (ret
< 0));
3756 /* rearm timer, if not periodic */
3757 if (alarm_timer
->flags
& ALARM_FLAG_EXPIRED
) {
3758 alarm_timer
->flags
&= ~ALARM_FLAG_EXPIRED
;
3759 qemu_rearm_alarm_timer(alarm_timer
);
3762 /* vm time timers */
3764 if (!cur_cpu
|| likely(!(cur_cpu
->singlestep_enabled
& SSTEP_NOTIMER
)))
3765 qemu_run_timers(&active_timers
[QEMU_CLOCK_VIRTUAL
],
3766 qemu_get_clock(vm_clock
));
3769 /* real time timers */
3770 qemu_run_timers(&active_timers
[QEMU_CLOCK_REALTIME
],
3771 qemu_get_clock(rt_clock
));
3773 qemu_run_timers(&active_timers
[QEMU_CLOCK_HOST
],
3774 qemu_get_clock(host_clock
));
3776 /* Check bottom-halves last in case any of the earlier events triggered
3782 static int qemu_cpu_exec(CPUState
*env
)
3785 #ifdef CONFIG_PROFILER
3789 #ifdef CONFIG_PROFILER
3790 ti
= profile_getclock();
3795 qemu_icount
-= (env
->icount_decr
.u16
.low
+ env
->icount_extra
);
3796 env
->icount_decr
.u16
.low
= 0;
3797 env
->icount_extra
= 0;
3798 count
= qemu_next_deadline();
3799 count
= (count
+ (1 << icount_time_shift
) - 1)
3800 >> icount_time_shift
;
3801 qemu_icount
+= count
;
3802 decr
= (count
> 0xffff) ? 0xffff : count
;
3804 env
->icount_decr
.u16
.low
= decr
;
3805 env
->icount_extra
= count
;
3807 ret
= cpu_exec(env
);
3808 #ifdef CONFIG_PROFILER
3809 qemu_time
+= profile_getclock() - ti
;
3812 /* Fold pending instructions back into the
3813 instruction counter, and clear the interrupt flag. */
3814 qemu_icount
-= (env
->icount_decr
.u16
.low
3815 + env
->icount_extra
);
3816 env
->icount_decr
.u32
= 0;
3817 env
->icount_extra
= 0;
3822 static void tcg_cpu_exec(void)
3826 if (next_cpu
== NULL
)
3827 next_cpu
= first_cpu
;
3828 for (; next_cpu
!= NULL
; next_cpu
= next_cpu
->next_cpu
) {
3829 CPUState
*env
= cur_cpu
= next_cpu
;
3833 if (timer_alarm_pending
) {
3834 timer_alarm_pending
= 0;
3837 if (cpu_can_run(env
))
3838 ret
= qemu_cpu_exec(env
);
3839 if (ret
== EXCP_DEBUG
) {
3840 gdb_set_stop_cpu(env
);
3841 debug_requested
= 1;
3847 static int cpu_has_work(CPUState
*env
)
3855 if (qemu_cpu_has_work(env
))
3860 static int tcg_has_work(void)
3864 for (env
= first_cpu
; env
!= NULL
; env
= env
->next_cpu
)
3865 if (cpu_has_work(env
))
3870 static int qemu_calculate_timeout(void)
3872 #ifndef CONFIG_IOTHREAD
3877 else if (tcg_has_work())
3879 else if (!use_icount
)
3882 /* XXX: use timeout computed from timers */
3885 /* Advance virtual time to the next event. */
3886 if (use_icount
== 1) {
3887 /* When not using an adaptive execution frequency
3888 we tend to get badly out of sync with real time,
3889 so just delay for a reasonable amount of time. */
3892 delta
= cpu_get_icount() - cpu_get_clock();
3895 /* If virtual time is ahead of real time then just
3897 timeout
= (delta
/ 1000000) + 1;
3899 /* Wait for either IO to occur or the next
3901 add
= qemu_next_deadline();
3902 /* We advance the timer before checking for IO.
3903 Limit the amount we advance so that early IO
3904 activity won't get the guest too far ahead. */
3908 add
= (add
+ (1 << icount_time_shift
) - 1)
3909 >> icount_time_shift
;
3911 timeout
= delta
/ 1000000;
3918 #else /* CONFIG_IOTHREAD */
3923 static int vm_can_run(void)
3925 if (powerdown_requested
)
3927 if (reset_requested
)
3929 if (shutdown_requested
)
3931 if (debug_requested
)
3936 qemu_irq qemu_system_powerdown
;
3938 static void main_loop(void)
3942 #ifdef CONFIG_IOTHREAD
3943 qemu_system_ready
= 1;
3944 qemu_cond_broadcast(&qemu_system_cond
);
3949 #ifdef CONFIG_PROFILER
3952 #ifndef CONFIG_IOTHREAD
3955 #ifdef CONFIG_PROFILER
3956 ti
= profile_getclock();
3958 main_loop_wait(qemu_calculate_timeout());
3959 #ifdef CONFIG_PROFILER
3960 dev_time
+= profile_getclock() - ti
;
3962 } while (vm_can_run());
3964 if (qemu_debug_requested()) {
3965 monitor_protocol_event(QEVENT_DEBUG
, NULL
);
3966 vm_stop(EXCP_DEBUG
);
3968 if (qemu_shutdown_requested()) {
3969 monitor_protocol_event(QEVENT_SHUTDOWN
, NULL
);
3976 if (qemu_reset_requested()) {
3977 monitor_protocol_event(QEVENT_RESET
, NULL
);
3979 qemu_system_reset();
3982 if (qemu_powerdown_requested()) {
3983 monitor_protocol_event(QEVENT_POWERDOWN
, NULL
);
3984 qemu_irq_raise(qemu_system_powerdown
);
3986 if ((r
= qemu_vmstop_requested())) {
3987 monitor_protocol_event(QEVENT_STOP
, NULL
);
3994 static void version(void)
3996 printf("QEMU PC emulator version " QEMU_VERSION QEMU_PKGVERSION
", Copyright (c) 2003-2008 Fabrice Bellard\n");
3999 static void help(int exitcode
)
4002 printf("usage: %s [options] [disk_image]\n"
4004 "'disk_image' is a raw hard image image for IDE hard disk 0\n"
4006 #define DEF(option, opt_arg, opt_enum, opt_help) \
4008 #define DEFHEADING(text) stringify(text) "\n"
4009 #include "qemu-options.h"
4014 "During emulation, the following keys are useful:\n"
4015 "ctrl-alt-f toggle full screen\n"
4016 "ctrl-alt-n switch to virtual console 'n'\n"
4017 "ctrl-alt toggle mouse and keyboard grab\n"
4019 "When using -nographic, press 'ctrl-a h' to get some help.\n"
4024 DEFAULT_NETWORK_SCRIPT
,
4025 DEFAULT_NETWORK_DOWN_SCRIPT
,
4027 DEFAULT_GDBSTUB_PORT
,
4032 #define HAS_ARG 0x0001
4035 #define DEF(option, opt_arg, opt_enum, opt_help) \
4037 #define DEFHEADING(text)
4038 #include "qemu-options.h"
4044 typedef struct QEMUOption
{
4050 static const QEMUOption qemu_options
[] = {
4051 { "h", 0, QEMU_OPTION_h
},
4052 #define DEF(option, opt_arg, opt_enum, opt_help) \
4053 { option, opt_arg, opt_enum },
4054 #define DEFHEADING(text)
4055 #include "qemu-options.h"
4063 struct soundhw soundhw
[] = {
4064 #ifdef HAS_AUDIO_CHOICE
4065 #if defined(TARGET_I386) || defined(TARGET_MIPS)
4071 { .init_isa
= pcspk_audio_init
}
4078 "Creative Sound Blaster 16",
4081 { .init_isa
= SB16_init
}
4085 #ifdef CONFIG_CS4231A
4091 { .init_isa
= cs4231a_init
}
4099 "Yamaha YMF262 (OPL3)",
4101 "Yamaha YM3812 (OPL2)",
4105 { .init_isa
= Adlib_init
}
4112 "Gravis Ultrasound GF1",
4115 { .init_isa
= GUS_init
}
4122 "Intel 82801AA AC97 Audio",
4125 { .init_pci
= ac97_init
}
4129 #ifdef CONFIG_ES1370
4132 "ENSONIQ AudioPCI ES1370",
4135 { .init_pci
= es1370_init
}
4139 #endif /* HAS_AUDIO_CHOICE */
4141 { NULL
, NULL
, 0, 0, { NULL
} }
4144 static void select_soundhw (const char *optarg
)
4148 if (*optarg
== '?') {
4151 printf ("Valid sound card names (comma separated):\n");
4152 for (c
= soundhw
; c
->name
; ++c
) {
4153 printf ("%-11s %s\n", c
->name
, c
->descr
);
4155 printf ("\n-soundhw all will enable all of the above\n");
4156 exit (*optarg
!= '?');
4164 if (!strcmp (optarg
, "all")) {
4165 for (c
= soundhw
; c
->name
; ++c
) {
4173 e
= strchr (p
, ',');
4174 l
= !e
? strlen (p
) : (size_t) (e
- p
);
4176 for (c
= soundhw
; c
->name
; ++c
) {
4177 if (!strncmp (c
->name
, p
, l
) && !c
->name
[l
]) {
4186 "Unknown sound card name (too big to show)\n");
4189 fprintf (stderr
, "Unknown sound card name `%.*s'\n",
4194 p
+= l
+ (e
!= NULL
);
4198 goto show_valid_cards
;
4203 static void select_vgahw (const char *p
)
4208 vga_interface_type
= VGA_NONE
;
4209 if (strstart(p
, "std", &opts
)) {
4210 vga_interface_type
= VGA_STD
;
4211 } else if (strstart(p
, "cirrus", &opts
)) {
4212 vga_interface_type
= VGA_CIRRUS
;
4213 } else if (strstart(p
, "vmware", &opts
)) {
4214 vga_interface_type
= VGA_VMWARE
;
4215 } else if (strstart(p
, "xenfb", &opts
)) {
4216 vga_interface_type
= VGA_XENFB
;
4217 } else if (!strstart(p
, "none", &opts
)) {
4219 fprintf(stderr
, "Unknown vga type: %s\n", p
);
4223 const char *nextopt
;
4225 if (strstart(opts
, ",retrace=", &nextopt
)) {
4227 if (strstart(opts
, "dumb", &nextopt
))
4228 vga_retrace_method
= VGA_RETRACE_DUMB
;
4229 else if (strstart(opts
, "precise", &nextopt
))
4230 vga_retrace_method
= VGA_RETRACE_PRECISE
;
4231 else goto invalid_vga
;
4232 } else goto invalid_vga
;
4238 static int balloon_parse(const char *arg
)
4242 if (strcmp(arg
, "none") == 0) {
4246 if (!strncmp(arg
, "virtio", 6)) {
4247 if (arg
[6] == ',') {
4248 /* have params -> parse them */
4249 opts
= qemu_opts_parse(&qemu_device_opts
, arg
+7, NULL
);
4253 /* create empty opts */
4254 opts
= qemu_opts_create(&qemu_device_opts
, NULL
, 0);
4256 qemu_opt_set(opts
, "driver", "virtio-balloon-pci");
4265 static BOOL WINAPI
qemu_ctrl_handler(DWORD type
)
4267 exit(STATUS_CONTROL_C_EXIT
);
4272 int qemu_uuid_parse(const char *str
, uint8_t *uuid
)
4276 if(strlen(str
) != 36)
4279 ret
= sscanf(str
, UUID_FMT
, &uuid
[0], &uuid
[1], &uuid
[2], &uuid
[3],
4280 &uuid
[4], &uuid
[5], &uuid
[6], &uuid
[7], &uuid
[8], &uuid
[9],
4281 &uuid
[10], &uuid
[11], &uuid
[12], &uuid
[13], &uuid
[14], &uuid
[15]);
4287 smbios_add_field(1, offsetof(struct smbios_type_1
, uuid
), 16, uuid
);
4295 static void termsig_handler(int signal
)
4297 qemu_system_shutdown_request();
4300 static void sigchld_handler(int signal
)
4302 waitpid(-1, NULL
, WNOHANG
);
4305 static void sighandler_setup(void)
4307 struct sigaction act
;
4309 memset(&act
, 0, sizeof(act
));
4310 act
.sa_handler
= termsig_handler
;
4311 sigaction(SIGINT
, &act
, NULL
);
4312 sigaction(SIGHUP
, &act
, NULL
);
4313 sigaction(SIGTERM
, &act
, NULL
);
4315 act
.sa_handler
= sigchld_handler
;
4316 act
.sa_flags
= SA_NOCLDSTOP
;
4317 sigaction(SIGCHLD
, &act
, NULL
);
4323 /* Look for support files in the same directory as the executable. */
4324 static char *find_datadir(const char *argv0
)
4330 len
= GetModuleFileName(NULL
, buf
, sizeof(buf
) - 1);
4337 while (p
!= buf
&& *p
!= '\\')
4340 if (access(buf
, R_OK
) == 0) {
4341 return qemu_strdup(buf
);
4347 /* Find a likely location for support files using the location of the binary.
4348 For installed binaries this will be "$bindir/../share/qemu". When
4349 running from the build tree this will be "$bindir/../pc-bios". */
4350 #define SHARE_SUFFIX "/share/qemu"
4351 #define BUILD_SUFFIX "/pc-bios"
4352 static char *find_datadir(const char *argv0
)
4360 #if defined(__linux__)
4363 len
= readlink("/proc/self/exe", buf
, sizeof(buf
) - 1);
4369 #elif defined(__FreeBSD__)
4372 len
= readlink("/proc/curproc/file", buf
, sizeof(buf
) - 1);
4379 /* If we don't have any way of figuring out the actual executable
4380 location then try argv[0]. */
4382 p
= realpath(argv0
, buf
);
4390 max_len
= strlen(dir
) +
4391 MAX(strlen(SHARE_SUFFIX
), strlen(BUILD_SUFFIX
)) + 1;
4392 res
= qemu_mallocz(max_len
);
4393 snprintf(res
, max_len
, "%s%s", dir
, SHARE_SUFFIX
);
4394 if (access(res
, R_OK
)) {
4395 snprintf(res
, max_len
, "%s%s", dir
, BUILD_SUFFIX
);
4396 if (access(res
, R_OK
)) {
4408 char *qemu_find_file(int type
, const char *name
)
4414 /* If name contains path separators then try it as a straight path. */
4415 if ((strchr(name
, '/') || strchr(name
, '\\'))
4416 && access(name
, R_OK
) == 0) {
4417 return qemu_strdup(name
);
4420 case QEMU_FILE_TYPE_BIOS
:
4423 case QEMU_FILE_TYPE_KEYMAP
:
4424 subdir
= "keymaps/";
4429 len
= strlen(data_dir
) + strlen(name
) + strlen(subdir
) + 2;
4430 buf
= qemu_mallocz(len
);
4431 snprintf(buf
, len
, "%s/%s%s", data_dir
, subdir
, name
);
4432 if (access(buf
, R_OK
)) {
4439 static int device_init_func(QemuOpts
*opts
, void *opaque
)
4443 dev
= qdev_device_add(opts
);
4449 static int chardev_init_func(QemuOpts
*opts
, void *opaque
)
4451 CharDriverState
*chr
;
4453 chr
= qemu_chr_open_opts(opts
, NULL
);
4459 static int mon_init_func(QemuOpts
*opts
, void *opaque
)
4461 CharDriverState
*chr
;
4462 const char *chardev
;
4466 mode
= qemu_opt_get(opts
, "mode");
4470 if (strcmp(mode
, "readline") == 0) {
4471 flags
= MONITOR_USE_READLINE
;
4472 } else if (strcmp(mode
, "control") == 0) {
4473 flags
= MONITOR_USE_CONTROL
;
4475 fprintf(stderr
, "unknown monitor mode \"%s\"\n", mode
);
4479 if (qemu_opt_get_bool(opts
, "default", 0))
4480 flags
|= MONITOR_IS_DEFAULT
;
4482 chardev
= qemu_opt_get(opts
, "chardev");
4483 chr
= qemu_chr_find(chardev
);
4485 fprintf(stderr
, "chardev \"%s\" not found\n", chardev
);
4489 monitor_init(chr
, flags
);
4493 static void monitor_parse(const char *optarg
, const char *mode
)
4495 static int monitor_device_index
= 0;
4501 if (strstart(optarg
, "chardev:", &p
)) {
4502 snprintf(label
, sizeof(label
), "%s", p
);
4504 if (monitor_device_index
) {
4505 snprintf(label
, sizeof(label
), "monitor%d",
4506 monitor_device_index
);
4508 snprintf(label
, sizeof(label
), "monitor");
4511 opts
= qemu_chr_parse_compat(label
, optarg
);
4513 fprintf(stderr
, "parse error: %s\n", optarg
);
4518 opts
= qemu_opts_create(&qemu_mon_opts
, label
, 1);
4520 fprintf(stderr
, "duplicate chardev: %s\n", label
);
4523 qemu_opt_set(opts
, "mode", mode
);
4524 qemu_opt_set(opts
, "chardev", label
);
4526 qemu_opt_set(opts
, "default", "on");
4527 monitor_device_index
++;
4530 struct device_config
{
4532 DEV_USB
, /* -usbdevice */
4534 DEV_SERIAL
, /* -serial */
4535 DEV_PARALLEL
, /* -parallel */
4536 DEV_VIRTCON
, /* -virtioconsole */
4537 DEV_DEBUGCON
, /* -debugcon */
4539 const char *cmdline
;
4540 QTAILQ_ENTRY(device_config
) next
;
4542 QTAILQ_HEAD(, device_config
) device_configs
= QTAILQ_HEAD_INITIALIZER(device_configs
);
4544 static void add_device_config(int type
, const char *cmdline
)
4546 struct device_config
*conf
;
4548 conf
= qemu_mallocz(sizeof(*conf
));
4550 conf
->cmdline
= cmdline
;
4551 QTAILQ_INSERT_TAIL(&device_configs
, conf
, next
);
4554 static int foreach_device_config(int type
, int (*func
)(const char *cmdline
))
4556 struct device_config
*conf
;
4559 QTAILQ_FOREACH(conf
, &device_configs
, next
) {
4560 if (conf
->type
!= type
)
4562 rc
= func(conf
->cmdline
);
4569 static int serial_parse(const char *devname
)
4571 static int index
= 0;
4574 if (strcmp(devname
, "none") == 0)
4576 if (index
== MAX_SERIAL_PORTS
) {
4577 fprintf(stderr
, "qemu: too many serial ports\n");
4580 snprintf(label
, sizeof(label
), "serial%d", index
);
4581 serial_hds
[index
] = qemu_chr_open(label
, devname
, NULL
);
4582 if (!serial_hds
[index
]) {
4583 fprintf(stderr
, "qemu: could not open serial device '%s': %s\n",
4584 devname
, strerror(errno
));
4591 static int parallel_parse(const char *devname
)
4593 static int index
= 0;
4596 if (strcmp(devname
, "none") == 0)
4598 if (index
== MAX_PARALLEL_PORTS
) {
4599 fprintf(stderr
, "qemu: too many parallel ports\n");
4602 snprintf(label
, sizeof(label
), "parallel%d", index
);
4603 parallel_hds
[index
] = qemu_chr_open(label
, devname
, NULL
);
4604 if (!parallel_hds
[index
]) {
4605 fprintf(stderr
, "qemu: could not open parallel device '%s': %s\n",
4606 devname
, strerror(errno
));
4613 static int virtcon_parse(const char *devname
)
4615 static int index
= 0;
4618 if (strcmp(devname
, "none") == 0)
4620 if (index
== MAX_VIRTIO_CONSOLES
) {
4621 fprintf(stderr
, "qemu: too many virtio consoles\n");
4624 snprintf(label
, sizeof(label
), "virtcon%d", index
);
4625 virtcon_hds
[index
] = qemu_chr_open(label
, devname
, NULL
);
4626 if (!virtcon_hds
[index
]) {
4627 fprintf(stderr
, "qemu: could not open virtio console '%s': %s\n",
4628 devname
, strerror(errno
));
4635 static int debugcon_parse(const char *devname
)
4639 if (!qemu_chr_open("debugcon", devname
, NULL
)) {
4642 opts
= qemu_opts_create(&qemu_device_opts
, "debugcon", 1);
4644 fprintf(stderr
, "qemu: already have a debugcon device\n");
4647 qemu_opt_set(opts
, "driver", "isa-debugcon");
4648 qemu_opt_set(opts
, "chardev", "debugcon");
4652 int main(int argc
, char **argv
, char **envp
)
4654 const char *gdbstub_dev
= NULL
;
4655 uint32_t boot_devices_bitmap
= 0;
4657 int snapshot
, linux_boot
, net_boot
;
4658 const char *initrd_filename
;
4659 const char *kernel_filename
, *kernel_cmdline
;
4660 char boot_devices
[33] = "cad"; /* default to HD->floppy->CD-ROM */
4662 DisplayChangeListener
*dcl
;
4663 int cyls
, heads
, secs
, translation
;
4664 QemuOpts
*hda_opts
= NULL
, *opts
;
4666 const char *r
, *optarg
;
4667 const char *loadvm
= NULL
;
4668 QEMUMachine
*machine
;
4669 const char *cpu_model
;
4674 const char *pid_file
= NULL
;
4675 const char *incoming
= NULL
;
4678 struct passwd
*pwd
= NULL
;
4679 const char *chroot_dir
= NULL
;
4680 const char *run_as
= NULL
;
4683 int show_vnc_port
= 0;
4687 qemu_errors_to_file(stderr
);
4688 qemu_cache_utils_init(envp
);
4690 QLIST_INIT (&vm_change_state_head
);
4693 struct sigaction act
;
4694 sigfillset(&act
.sa_mask
);
4696 act
.sa_handler
= SIG_IGN
;
4697 sigaction(SIGPIPE
, &act
, NULL
);
4700 SetConsoleCtrlHandler(qemu_ctrl_handler
, TRUE
);
4701 /* Note: cpu_interrupt() is currently not SMP safe, so we force
4702 QEMU to run on a single CPU */
4707 h
= GetCurrentProcess();
4708 if (GetProcessAffinityMask(h
, &mask
, &smask
)) {
4709 for(i
= 0; i
< 32; i
++) {
4710 if (mask
& (1 << i
))
4715 SetProcessAffinityMask(h
, mask
);
4721 module_call_init(MODULE_INIT_MACHINE
);
4722 machine
= find_default_machine();
4724 initrd_filename
= NULL
;
4727 kernel_filename
= NULL
;
4728 kernel_cmdline
= "";
4729 cyls
= heads
= secs
= 0;
4730 translation
= BIOS_ATA_TRANSLATION_AUTO
;
4732 for (i
= 0; i
< MAX_NODES
; i
++) {
4734 node_cpumask
[i
] = 0;
4749 hda_opts
= drive_add(argv
[optind
++], HD_ALIAS
, 0);
4751 const QEMUOption
*popt
;
4754 /* Treat --foo the same as -foo. */
4757 popt
= qemu_options
;
4760 fprintf(stderr
, "%s: invalid option -- '%s'\n",
4764 if (!strcmp(popt
->name
, r
+ 1))
4768 if (popt
->flags
& HAS_ARG
) {
4769 if (optind
>= argc
) {
4770 fprintf(stderr
, "%s: option '%s' requires an argument\n",
4774 optarg
= argv
[optind
++];
4779 switch(popt
->index
) {
4781 machine
= find_machine(optarg
);
4784 printf("Supported machines are:\n");
4785 for(m
= first_machine
; m
!= NULL
; m
= m
->next
) {
4787 printf("%-10s %s (alias of %s)\n",
4788 m
->alias
, m
->desc
, m
->name
);
4789 printf("%-10s %s%s\n",
4791 m
->is_default
? " (default)" : "");
4793 exit(*optarg
!= '?');
4796 case QEMU_OPTION_cpu
:
4797 /* hw initialization will check this */
4798 if (*optarg
== '?') {
4799 /* XXX: implement xxx_cpu_list for targets that still miss it */
4800 #if defined(cpu_list)
4801 cpu_list(stdout
, &fprintf
);
4808 case QEMU_OPTION_initrd
:
4809 initrd_filename
= optarg
;
4811 case QEMU_OPTION_hda
:
4813 hda_opts
= drive_add(optarg
, HD_ALIAS
, 0);
4815 hda_opts
= drive_add(optarg
, HD_ALIAS
4816 ",cyls=%d,heads=%d,secs=%d%s",
4817 0, cyls
, heads
, secs
,
4818 translation
== BIOS_ATA_TRANSLATION_LBA
?
4820 translation
== BIOS_ATA_TRANSLATION_NONE
?
4821 ",trans=none" : "");
4823 case QEMU_OPTION_hdb
:
4824 case QEMU_OPTION_hdc
:
4825 case QEMU_OPTION_hdd
:
4826 drive_add(optarg
, HD_ALIAS
, popt
->index
- QEMU_OPTION_hda
);
4828 case QEMU_OPTION_drive
:
4829 drive_add(NULL
, "%s", optarg
);
4831 case QEMU_OPTION_set
:
4832 if (qemu_set_option(optarg
) != 0)
4835 case QEMU_OPTION_global
:
4836 if (qemu_global_option(optarg
) != 0)
4839 case QEMU_OPTION_mtdblock
:
4840 drive_add(optarg
, MTD_ALIAS
);
4842 case QEMU_OPTION_sd
:
4843 drive_add(optarg
, SD_ALIAS
);
4845 case QEMU_OPTION_pflash
:
4846 drive_add(optarg
, PFLASH_ALIAS
);
4848 case QEMU_OPTION_snapshot
:
4851 case QEMU_OPTION_hdachs
:
4855 cyls
= strtol(p
, (char **)&p
, 0);
4856 if (cyls
< 1 || cyls
> 16383)
4861 heads
= strtol(p
, (char **)&p
, 0);
4862 if (heads
< 1 || heads
> 16)
4867 secs
= strtol(p
, (char **)&p
, 0);
4868 if (secs
< 1 || secs
> 63)
4872 if (!strcmp(p
, "none"))
4873 translation
= BIOS_ATA_TRANSLATION_NONE
;
4874 else if (!strcmp(p
, "lba"))
4875 translation
= BIOS_ATA_TRANSLATION_LBA
;
4876 else if (!strcmp(p
, "auto"))
4877 translation
= BIOS_ATA_TRANSLATION_AUTO
;
4880 } else if (*p
!= '\0') {
4882 fprintf(stderr
, "qemu: invalid physical CHS format\n");
4885 if (hda_opts
!= NULL
) {
4887 snprintf(num
, sizeof(num
), "%d", cyls
);
4888 qemu_opt_set(hda_opts
, "cyls", num
);
4889 snprintf(num
, sizeof(num
), "%d", heads
);
4890 qemu_opt_set(hda_opts
, "heads", num
);
4891 snprintf(num
, sizeof(num
), "%d", secs
);
4892 qemu_opt_set(hda_opts
, "secs", num
);
4893 if (translation
== BIOS_ATA_TRANSLATION_LBA
)
4894 qemu_opt_set(hda_opts
, "trans", "lba");
4895 if (translation
== BIOS_ATA_TRANSLATION_NONE
)
4896 qemu_opt_set(hda_opts
, "trans", "none");
4900 case QEMU_OPTION_numa
:
4901 if (nb_numa_nodes
>= MAX_NODES
) {
4902 fprintf(stderr
, "qemu: too many NUMA nodes\n");
4907 case QEMU_OPTION_nographic
:
4908 display_type
= DT_NOGRAPHIC
;
4910 #ifdef CONFIG_CURSES
4911 case QEMU_OPTION_curses
:
4912 display_type
= DT_CURSES
;
4915 case QEMU_OPTION_portrait
:
4918 case QEMU_OPTION_kernel
:
4919 kernel_filename
= optarg
;
4921 case QEMU_OPTION_append
:
4922 kernel_cmdline
= optarg
;
4924 case QEMU_OPTION_cdrom
:
4925 drive_add(optarg
, CDROM_ALIAS
);
4927 case QEMU_OPTION_boot
:
4929 static const char * const params
[] = {
4930 "order", "once", "menu", NULL
4932 char buf
[sizeof(boot_devices
)];
4933 char *standard_boot_devices
;
4936 if (!strchr(optarg
, '=')) {
4938 pstrcpy(buf
, sizeof(buf
), optarg
);
4939 } else if (check_params(buf
, sizeof(buf
), params
, optarg
) < 0) {
4941 "qemu: unknown boot parameter '%s' in '%s'\n",
4947 get_param_value(buf
, sizeof(buf
), "order", optarg
)) {
4948 boot_devices_bitmap
= parse_bootdevices(buf
);
4949 pstrcpy(boot_devices
, sizeof(boot_devices
), buf
);
4952 if (get_param_value(buf
, sizeof(buf
),
4954 boot_devices_bitmap
|= parse_bootdevices(buf
);
4955 standard_boot_devices
= qemu_strdup(boot_devices
);
4956 pstrcpy(boot_devices
, sizeof(boot_devices
), buf
);
4957 qemu_register_reset(restore_boot_devices
,
4958 standard_boot_devices
);
4960 if (get_param_value(buf
, sizeof(buf
),
4962 if (!strcmp(buf
, "on")) {
4964 } else if (!strcmp(buf
, "off")) {
4968 "qemu: invalid option value '%s'\n",
4976 case QEMU_OPTION_fda
:
4977 case QEMU_OPTION_fdb
:
4978 drive_add(optarg
, FD_ALIAS
, popt
->index
- QEMU_OPTION_fda
);
4981 case QEMU_OPTION_no_fd_bootchk
:
4985 case QEMU_OPTION_netdev
:
4986 if (net_client_parse(&qemu_netdev_opts
, optarg
) == -1) {
4990 case QEMU_OPTION_net
:
4991 if (net_client_parse(&qemu_net_opts
, optarg
) == -1) {
4996 case QEMU_OPTION_tftp
:
4997 legacy_tftp_prefix
= optarg
;
4999 case QEMU_OPTION_bootp
:
5000 legacy_bootp_filename
= optarg
;
5003 case QEMU_OPTION_smb
:
5004 if (net_slirp_smb(optarg
) < 0)
5008 case QEMU_OPTION_redir
:
5009 if (net_slirp_redir(optarg
) < 0)
5013 case QEMU_OPTION_bt
:
5014 add_device_config(DEV_BT
, optarg
);
5017 case QEMU_OPTION_audio_help
:
5021 case QEMU_OPTION_soundhw
:
5022 select_soundhw (optarg
);
5028 case QEMU_OPTION_version
:
5032 case QEMU_OPTION_m
: {
5036 value
= strtoul(optarg
, &ptr
, 10);
5038 case 0: case 'M': case 'm':
5045 fprintf(stderr
, "qemu: invalid ram size: %s\n", optarg
);
5049 /* On 32-bit hosts, QEMU is limited by virtual address space */
5050 if (value
> (2047 << 20) && HOST_LONG_BITS
== 32) {
5051 fprintf(stderr
, "qemu: at most 2047 MB RAM can be simulated\n");
5054 if (value
!= (uint64_t)(ram_addr_t
)value
) {
5055 fprintf(stderr
, "qemu: ram size too large\n");
5064 const CPULogItem
*item
;
5066 mask
= cpu_str_to_log_mask(optarg
);
5068 printf("Log items (comma separated):\n");
5069 for(item
= cpu_log_items
; item
->mask
!= 0; item
++) {
5070 printf("%-10s %s\n", item
->name
, item
->help
);
5078 gdbstub_dev
= "tcp::" DEFAULT_GDBSTUB_PORT
;
5080 case QEMU_OPTION_gdb
:
5081 gdbstub_dev
= optarg
;
5086 case QEMU_OPTION_bios
:
5089 case QEMU_OPTION_singlestep
:
5096 keyboard_layout
= optarg
;
5098 case QEMU_OPTION_localtime
:
5101 case QEMU_OPTION_vga
:
5102 select_vgahw (optarg
);
5104 #if defined(TARGET_PPC) || defined(TARGET_SPARC)
5110 w
= strtol(p
, (char **)&p
, 10);
5113 fprintf(stderr
, "qemu: invalid resolution or depth\n");
5119 h
= strtol(p
, (char **)&p
, 10);
5124 depth
= strtol(p
, (char **)&p
, 10);
5125 if (depth
!= 8 && depth
!= 15 && depth
!= 16 &&
5126 depth
!= 24 && depth
!= 32)
5128 } else if (*p
== '\0') {
5129 depth
= graphic_depth
;
5136 graphic_depth
= depth
;
5140 case QEMU_OPTION_echr
:
5143 term_escape_char
= strtol(optarg
, &r
, 0);
5145 printf("Bad argument to echr\n");
5148 case QEMU_OPTION_monitor
:
5149 monitor_parse(optarg
, "readline");
5150 default_monitor
= 0;
5152 case QEMU_OPTION_qmp
:
5153 monitor_parse(optarg
, "control");
5154 default_monitor
= 0;
5156 case QEMU_OPTION_mon
:
5157 opts
= qemu_opts_parse(&qemu_mon_opts
, optarg
, "chardev");
5159 fprintf(stderr
, "parse error: %s\n", optarg
);
5162 default_monitor
= 0;
5164 case QEMU_OPTION_chardev
:
5165 opts
= qemu_opts_parse(&qemu_chardev_opts
, optarg
, "backend");
5167 fprintf(stderr
, "parse error: %s\n", optarg
);
5171 case QEMU_OPTION_serial
:
5172 add_device_config(DEV_SERIAL
, optarg
);
5175 case QEMU_OPTION_watchdog
:
5178 "qemu: only one watchdog option may be given\n");
5183 case QEMU_OPTION_watchdog_action
:
5184 if (select_watchdog_action(optarg
) == -1) {
5185 fprintf(stderr
, "Unknown -watchdog-action parameter\n");
5189 case QEMU_OPTION_virtiocon
:
5190 add_device_config(DEV_VIRTCON
, optarg
);
5191 default_virtcon
= 0;
5193 case QEMU_OPTION_parallel
:
5194 add_device_config(DEV_PARALLEL
, optarg
);
5195 default_parallel
= 0;
5197 case QEMU_OPTION_debugcon
:
5198 add_device_config(DEV_DEBUGCON
, optarg
);
5200 case QEMU_OPTION_loadvm
:
5203 case QEMU_OPTION_full_screen
:
5207 case QEMU_OPTION_no_frame
:
5210 case QEMU_OPTION_alt_grab
:
5213 case QEMU_OPTION_ctrl_grab
:
5216 case QEMU_OPTION_no_quit
:
5219 case QEMU_OPTION_sdl
:
5220 display_type
= DT_SDL
;
5223 case QEMU_OPTION_pidfile
:
5227 case QEMU_OPTION_win2k_hack
:
5228 win2k_install_hack
= 1;
5230 case QEMU_OPTION_rtc_td_hack
:
5233 case QEMU_OPTION_acpitable
:
5234 if(acpi_table_add(optarg
) < 0) {
5235 fprintf(stderr
, "Wrong acpi table provided\n");
5239 case QEMU_OPTION_smbios
:
5240 if(smbios_entry_add(optarg
) < 0) {
5241 fprintf(stderr
, "Wrong smbios provided\n");
5247 case QEMU_OPTION_enable_kvm
:
5251 case QEMU_OPTION_usb
:
5254 case QEMU_OPTION_usbdevice
:
5256 add_device_config(DEV_USB
, optarg
);
5258 case QEMU_OPTION_device
:
5259 if (!qemu_opts_parse(&qemu_device_opts
, optarg
, "driver")) {
5263 case QEMU_OPTION_smp
:
5266 fprintf(stderr
, "Invalid number of CPUs\n");
5269 if (max_cpus
< smp_cpus
) {
5270 fprintf(stderr
, "maxcpus must be equal to or greater than "
5274 if (max_cpus
> 255) {
5275 fprintf(stderr
, "Unsupported number of maxcpus\n");
5279 case QEMU_OPTION_vnc
:
5280 display_type
= DT_VNC
;
5281 vnc_display
= optarg
;
5284 case QEMU_OPTION_no_acpi
:
5287 case QEMU_OPTION_no_hpet
:
5290 case QEMU_OPTION_balloon
:
5291 if (balloon_parse(optarg
) < 0) {
5292 fprintf(stderr
, "Unknown -balloon argument %s\n", optarg
);
5297 case QEMU_OPTION_no_reboot
:
5300 case QEMU_OPTION_no_shutdown
:
5303 case QEMU_OPTION_show_cursor
:
5306 case QEMU_OPTION_uuid
:
5307 if(qemu_uuid_parse(optarg
, qemu_uuid
) < 0) {
5308 fprintf(stderr
, "Fail to parse UUID string."
5309 " Wrong format.\n");
5314 case QEMU_OPTION_daemonize
:
5318 case QEMU_OPTION_option_rom
:
5319 if (nb_option_roms
>= MAX_OPTION_ROMS
) {
5320 fprintf(stderr
, "Too many option ROMs\n");
5323 option_rom
[nb_option_roms
] = optarg
;
5326 #if defined(TARGET_ARM) || defined(TARGET_M68K)
5327 case QEMU_OPTION_semihosting
:
5328 semihosting_enabled
= 1;
5331 case QEMU_OPTION_name
:
5332 qemu_name
= qemu_strdup(optarg
);
5334 char *p
= strchr(qemu_name
, ',');
5337 if (strncmp(p
, "process=", 8)) {
5338 fprintf(stderr
, "Unknown subargument %s to -name", p
);
5346 #if defined(TARGET_SPARC) || defined(TARGET_PPC)
5347 case QEMU_OPTION_prom_env
:
5348 if (nb_prom_envs
>= MAX_PROM_ENVS
) {
5349 fprintf(stderr
, "Too many prom variables\n");
5352 prom_envs
[nb_prom_envs
] = optarg
;
5357 case QEMU_OPTION_old_param
:
5361 case QEMU_OPTION_clock
:
5362 configure_alarms(optarg
);
5364 case QEMU_OPTION_startdate
:
5365 configure_rtc_date_offset(optarg
, 1);
5367 case QEMU_OPTION_rtc
:
5368 opts
= qemu_opts_parse(&qemu_rtc_opts
, optarg
, NULL
);
5370 fprintf(stderr
, "parse error: %s\n", optarg
);
5373 configure_rtc(opts
);
5375 case QEMU_OPTION_tb_size
:
5376 tb_size
= strtol(optarg
, NULL
, 0);
5380 case QEMU_OPTION_icount
:
5382 if (strcmp(optarg
, "auto") == 0) {
5383 icount_time_shift
= -1;
5385 icount_time_shift
= strtol(optarg
, NULL
, 0);
5388 case QEMU_OPTION_incoming
:
5391 case QEMU_OPTION_nodefaults
:
5393 default_parallel
= 0;
5394 default_virtcon
= 0;
5395 default_monitor
= 0;
5403 case QEMU_OPTION_chroot
:
5404 chroot_dir
= optarg
;
5406 case QEMU_OPTION_runas
:
5411 case QEMU_OPTION_xen_domid
:
5412 xen_domid
= atoi(optarg
);
5414 case QEMU_OPTION_xen_create
:
5415 xen_mode
= XEN_CREATE
;
5417 case QEMU_OPTION_xen_attach
:
5418 xen_mode
= XEN_ATTACH
;
5421 case QEMU_OPTION_readconfig
:
5424 fp
= fopen(optarg
, "r");
5426 fprintf(stderr
, "open %s: %s\n", optarg
, strerror(errno
));
5429 if (qemu_config_parse(fp
) != 0) {
5435 case QEMU_OPTION_writeconfig
:
5438 if (strcmp(optarg
, "-") == 0) {
5441 fp
= fopen(optarg
, "w");
5443 fprintf(stderr
, "open %s: %s\n", optarg
, strerror(errno
));
5447 qemu_config_write(fp
);
5455 /* If no data_dir is specified then try to find it relative to the
5458 data_dir
= find_datadir(argv
[0]);
5460 /* If all else fails use the install patch specified when building. */
5462 data_dir
= CONFIG_QEMU_SHAREDIR
;
5466 * Default to max_cpus = smp_cpus, in case the user doesn't
5467 * specify a max_cpus value.
5470 max_cpus
= smp_cpus
;
5472 machine
->max_cpus
= machine
->max_cpus
?: 1; /* Default to UP */
5473 if (smp_cpus
> machine
->max_cpus
) {
5474 fprintf(stderr
, "Number of SMP cpus requested (%d), exceeds max cpus "
5475 "supported by machine `%s' (%d)\n", smp_cpus
, machine
->name
,
5480 qemu_opts_foreach(&qemu_device_opts
, default_driver_check
, NULL
, 0);
5481 qemu_opts_foreach(&qemu_global_opts
, default_driver_check
, NULL
, 0);
5483 if (machine
->no_serial
) {
5486 if (machine
->no_parallel
) {
5487 default_parallel
= 0;
5489 if (!machine
->use_virtcon
) {
5490 default_virtcon
= 0;
5492 if (machine
->no_vga
) {
5495 if (machine
->no_floppy
) {
5498 if (machine
->no_cdrom
) {
5501 if (machine
->no_sdcard
) {
5505 if (display_type
== DT_NOGRAPHIC
) {
5506 if (default_parallel
)
5507 add_device_config(DEV_PARALLEL
, "null");
5508 if (default_serial
&& default_monitor
) {
5509 add_device_config(DEV_SERIAL
, "mon:stdio");
5510 } else if (default_virtcon
&& default_monitor
) {
5511 add_device_config(DEV_VIRTCON
, "mon:stdio");
5514 add_device_config(DEV_SERIAL
, "stdio");
5515 if (default_virtcon
)
5516 add_device_config(DEV_VIRTCON
, "stdio");
5517 if (default_monitor
)
5518 monitor_parse("stdio", "readline");
5522 add_device_config(DEV_SERIAL
, "vc:80Cx24C");
5523 if (default_parallel
)
5524 add_device_config(DEV_PARALLEL
, "vc:80Cx24C");
5525 if (default_monitor
)
5526 monitor_parse("vc:80Cx24C", "readline");
5527 if (default_virtcon
)
5528 add_device_config(DEV_VIRTCON
, "vc:80Cx24C");
5531 vga_interface_type
= VGA_CIRRUS
;
5533 if (qemu_opts_foreach(&qemu_chardev_opts
, chardev_init_func
, NULL
, 1) != 0)
5540 if (pipe(fds
) == -1)
5551 len
= read(fds
[0], &status
, 1);
5552 if (len
== -1 && (errno
== EINTR
))
5557 else if (status
== 1) {
5558 fprintf(stderr
, "Could not acquire pidfile: %s\n", strerror(errno
));
5566 qemu_set_cloexec(fds
[1]);
5578 signal(SIGTSTP
, SIG_IGN
);
5579 signal(SIGTTOU
, SIG_IGN
);
5580 signal(SIGTTIN
, SIG_IGN
);
5584 if (pid_file
&& qemu_create_pidfile(pid_file
) != 0) {
5588 write(fds
[1], &status
, 1);
5591 fprintf(stderr
, "Could not acquire pid file: %s\n", strerror(errno
));
5595 if (kvm_enabled()) {
5598 ret
= kvm_init(smp_cpus
);
5600 fprintf(stderr
, "failed to initialize KVM\n");
5605 if (qemu_init_main_loop()) {
5606 fprintf(stderr
, "qemu_init_main_loop failed\n");
5609 linux_boot
= (kernel_filename
!= NULL
);
5611 if (!linux_boot
&& *kernel_cmdline
!= '\0') {
5612 fprintf(stderr
, "-append only allowed with -kernel option\n");
5616 if (!linux_boot
&& initrd_filename
!= NULL
) {
5617 fprintf(stderr
, "-initrd only allowed with -kernel option\n");
5622 /* Win32 doesn't support line-buffering and requires size >= 2 */
5623 setvbuf(stdout
, NULL
, _IOLBF
, 0);
5626 if (init_timer_alarm() < 0) {
5627 fprintf(stderr
, "could not initialize alarm timer\n");
5630 if (use_icount
&& icount_time_shift
< 0) {
5632 /* 125MIPS seems a reasonable initial guess at the guest speed.
5633 It will be corrected fairly quickly anyway. */
5634 icount_time_shift
= 3;
5635 init_icount_adjust();
5642 if (net_init_clients() < 0) {
5646 net_boot
= (boot_devices_bitmap
>> ('n' - 'a')) & 0xF;
5647 net_set_boot_mask(net_boot
);
5649 /* init the bluetooth world */
5650 if (foreach_device_config(DEV_BT
, bt_parse
))
5653 /* init the memory */
5655 ram_size
= DEFAULT_RAM_SIZE
* 1024 * 1024;
5657 /* init the dynamic translator */
5658 cpu_exec_init_all(tb_size
* 1024 * 1024);
5660 bdrv_init_with_whitelist();
5664 if (default_cdrom
) {
5665 /* we always create the cdrom drive, even if no disk is there */
5666 drive_add(NULL
, CDROM_ALIAS
);
5669 if (default_floppy
) {
5670 /* we always create at least one floppy */
5671 drive_add(NULL
, FD_ALIAS
, 0);
5674 if (default_sdcard
) {
5675 /* we always create one sd slot, even if no card is in it */
5676 drive_add(NULL
, SD_ALIAS
);
5679 /* open the virtual block devices */
5681 qemu_opts_foreach(&qemu_drive_opts
, drive_enable_snapshot
, NULL
, 0);
5682 if (qemu_opts_foreach(&qemu_drive_opts
, drive_init_func
, machine
, 1) != 0)
5685 vmstate_register(0, &vmstate_timers
,&timers_state
);
5686 register_savevm_live("ram", 0, 3, NULL
, ram_save_live
, NULL
,
5689 if (nb_numa_nodes
> 0) {
5692 if (nb_numa_nodes
> smp_cpus
) {
5693 nb_numa_nodes
= smp_cpus
;
5696 /* If no memory size if given for any node, assume the default case
5697 * and distribute the available memory equally across all nodes
5699 for (i
= 0; i
< nb_numa_nodes
; i
++) {
5700 if (node_mem
[i
] != 0)
5703 if (i
== nb_numa_nodes
) {
5704 uint64_t usedmem
= 0;
5706 /* On Linux, the each node's border has to be 8MB aligned,
5707 * the final node gets the rest.
5709 for (i
= 0; i
< nb_numa_nodes
- 1; i
++) {
5710 node_mem
[i
] = (ram_size
/ nb_numa_nodes
) & ~((1 << 23UL) - 1);
5711 usedmem
+= node_mem
[i
];
5713 node_mem
[i
] = ram_size
- usedmem
;
5716 for (i
= 0; i
< nb_numa_nodes
; i
++) {
5717 if (node_cpumask
[i
] != 0)
5720 /* assigning the VCPUs round-robin is easier to implement, guest OSes
5721 * must cope with this anyway, because there are BIOSes out there in
5722 * real machines which also use this scheme.
5724 if (i
== nb_numa_nodes
) {
5725 for (i
= 0; i
< smp_cpus
; i
++) {
5726 node_cpumask
[i
% nb_numa_nodes
] |= 1 << i
;
5731 if (foreach_device_config(DEV_SERIAL
, serial_parse
) < 0)
5733 if (foreach_device_config(DEV_PARALLEL
, parallel_parse
) < 0)
5735 if (foreach_device_config(DEV_VIRTCON
, virtcon_parse
) < 0)
5737 if (foreach_device_config(DEV_DEBUGCON
, debugcon_parse
) < 0)
5740 module_call_init(MODULE_INIT_DEVICE
);
5743 i
= select_watchdog(watchdog
);
5745 exit (i
== 1 ? 1 : 0);
5748 if (machine
->compat_props
) {
5749 qdev_prop_register_global_list(machine
->compat_props
);
5753 machine
->init(ram_size
, boot_devices
,
5754 kernel_filename
, kernel_cmdline
, initrd_filename
, cpu_model
);
5758 /* must be after terminal init, SDL library changes signal handlers */
5762 for (env
= first_cpu
; env
!= NULL
; env
= env
->next_cpu
) {
5763 for (i
= 0; i
< nb_numa_nodes
; i
++) {
5764 if (node_cpumask
[i
] & (1 << env
->cpu_index
)) {
5770 current_machine
= machine
;
5772 /* init USB devices */
5774 if (foreach_device_config(DEV_USB
, usb_parse
) < 0)
5778 /* init generic devices */
5779 if (qemu_opts_foreach(&qemu_device_opts
, device_init_func
, NULL
, 1) != 0)
5783 dumb_display_init();
5784 /* just use the first displaystate for the moment */
5787 if (display_type
== DT_DEFAULT
) {
5788 #if defined(CONFIG_SDL) || defined(CONFIG_COCOA)
5789 display_type
= DT_SDL
;
5791 display_type
= DT_VNC
;
5792 vnc_display
= "localhost:0,to=99";
5798 switch (display_type
) {
5801 #if defined(CONFIG_CURSES)
5803 curses_display_init(ds
, full_screen
);
5806 #if defined(CONFIG_SDL)
5808 sdl_display_init(ds
, full_screen
, no_frame
);
5810 #elif defined(CONFIG_COCOA)
5812 cocoa_display_init(ds
, full_screen
);
5816 vnc_display_init(ds
);
5817 if (vnc_display_open(ds
, vnc_display
) < 0)
5820 if (show_vnc_port
) {
5821 printf("VNC server running on `%s'\n", vnc_display_local_addr(ds
));
5829 dcl
= ds
->listeners
;
5830 while (dcl
!= NULL
) {
5831 if (dcl
->dpy_refresh
!= NULL
) {
5832 ds
->gui_timer
= qemu_new_timer(rt_clock
, gui_update
, ds
);
5833 qemu_mod_timer(ds
->gui_timer
, qemu_get_clock(rt_clock
));
5838 if (display_type
== DT_NOGRAPHIC
|| display_type
== DT_VNC
) {
5839 nographic_timer
= qemu_new_timer(rt_clock
, nographic_update
, NULL
);
5840 qemu_mod_timer(nographic_timer
, qemu_get_clock(rt_clock
));
5843 text_consoles_set_display(display_state
);
5845 if (qemu_opts_foreach(&qemu_mon_opts
, mon_init_func
, NULL
, 1) != 0)
5848 if (gdbstub_dev
&& gdbserver_start(gdbstub_dev
) < 0) {
5849 fprintf(stderr
, "qemu: could not open gdbserver on device '%s'\n",
5854 qdev_machine_creation_done();
5856 if (rom_load_all() != 0) {
5857 fprintf(stderr
, "rom loading failed\n");
5861 qemu_system_reset();
5863 if (load_vmstate(cur_mon
, loadvm
) < 0) {
5869 qemu_start_incoming_migration(incoming
);
5870 } else if (autostart
) {
5880 len
= write(fds
[1], &status
, 1);
5881 if (len
== -1 && (errno
== EINTR
))
5888 TFR(fd
= qemu_open("/dev/null", O_RDWR
));
5894 pwd
= getpwnam(run_as
);
5896 fprintf(stderr
, "User \"%s\" doesn't exist\n", run_as
);
5902 if (chroot(chroot_dir
) < 0) {
5903 fprintf(stderr
, "chroot failed\n");
5910 if (setgid(pwd
->pw_gid
) < 0) {
5911 fprintf(stderr
, "Failed to setgid(%d)\n", pwd
->pw_gid
);
5914 if (setuid(pwd
->pw_uid
) < 0) {
5915 fprintf(stderr
, "Failed to setuid(%d)\n", pwd
->pw_uid
);
5918 if (setuid(0) != -1) {
5919 fprintf(stderr
, "Dropping privileges failed\n");