]> git.proxmox.com Git - mirror_qemu.git/blame - vl.c
remove bgr (Stefano Stabellini)
[mirror_qemu.git] / vl.c
CommitLineData
0824d6fc 1/*
80cabfad 2 * QEMU System Emulator
5fafdf24 3 *
68d0f70e 4 * Copyright (c) 2003-2008 Fabrice Bellard
5fafdf24 5 *
1df912cf
FB
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:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
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
22 * THE SOFTWARE.
0824d6fc 23 */
87ecb68b
PB
24#include "hw/hw.h"
25#include "hw/boards.h"
26#include "hw/usb.h"
27#include "hw/pcmcia.h"
28#include "hw/pc.h"
87ecb68b
PB
29#include "hw/audiodev.h"
30#include "hw/isa.h"
2e4d9fb1 31#include "hw/baum.h"
1ae26a18 32#include "hw/bt.h"
87ecb68b
PB
33#include "net.h"
34#include "console.h"
35#include "sysemu.h"
36#include "gdbstub.h"
37#include "qemu-timer.h"
38#include "qemu-char.h"
902b3d5c 39#include "cache-utils.h"
87ecb68b
PB
40#include "block.h"
41#include "audio/audio.h"
5bb7910a 42#include "migration.h"
7ba1e619 43#include "kvm.h"
df751fa8 44#include "balloon.h"
67b915a5 45
0824d6fc 46#include <unistd.h>
0824d6fc
FB
47#include <fcntl.h>
48#include <signal.h>
49#include <time.h>
0824d6fc 50#include <errno.h>
67b915a5 51#include <sys/time.h>
c88676f8 52#include <zlib.h>
67b915a5
FB
53
54#ifndef _WIN32
55#include <sys/times.h>
f1510b2c 56#include <sys/wait.h>
67b915a5 57#include <termios.h>
67b915a5 58#include <sys/mman.h>
f1510b2c 59#include <sys/ioctl.h>
24646c7e 60#include <sys/resource.h>
f1510b2c 61#include <sys/socket.h>
c94c8d64 62#include <netinet/in.h>
24646c7e
BS
63#include <net/if.h>
64#if defined(__NetBSD__)
65#include <net/if_tap.h>
66#endif
67#ifdef __linux__
68#include <linux/if_tun.h>
69#endif
70#include <arpa/inet.h>
9d728e8c 71#include <dirent.h>
7c9d8e07 72#include <netdb.h>
cb4b976b 73#include <sys/select.h>
7d3505c5
FB
74#ifdef _BSD
75#include <sys/stat.h>
24646c7e 76#ifdef __FreeBSD__
7d3505c5 77#include <libutil.h>
24646c7e
BS
78#else
79#include <util.h>
128ab2ff 80#endif
5c40d2bd
TS
81#elif defined (__GLIBC__) && defined (__FreeBSD_kernel__)
82#include <freebsd/stdlib.h>
7d3505c5 83#else
223f0d72 84#ifdef __linux__
7d3505c5
FB
85#include <pty.h>
86#include <malloc.h>
fd872598 87#include <linux/rtc.h>
bd494f4c
TS
88
89/* For the benefit of older linux systems which don't supply it,
90 we use a local copy of hpet.h. */
91/* #include <linux/hpet.h> */
92#include "hpet.h"
93
e57a8c0e 94#include <linux/ppdev.h>
5867c88a 95#include <linux/parport.h>
223f0d72
BS
96#endif
97#ifdef __sun__
d5d10bc3
TS
98#include <sys/stat.h>
99#include <sys/ethernet.h>
100#include <sys/sockio.h>
d5d10bc3
TS
101#include <netinet/arp.h>
102#include <netinet/in.h>
103#include <netinet/in_systm.h>
104#include <netinet/ip.h>
105#include <netinet/ip_icmp.h> // must come after ip.h
106#include <netinet/udp.h>
107#include <netinet/tcp.h>
108#include <net/if.h>
109#include <syslog.h>
110#include <stropts.h>
67b915a5 111#endif
7d3505c5 112#endif
ec530c81 113#endif
67b915a5 114
03ff3ca3
AL
115#include "qemu_socket.h"
116
c20709aa
FB
117#if defined(CONFIG_SLIRP)
118#include "libslirp.h"
119#endif
120
9892fbfb
BS
121#if defined(__OpenBSD__)
122#include <util.h>
123#endif
124
8a16d273
TS
125#if defined(CONFIG_VDE)
126#include <libvdeplug.h>
127#endif
128
67b915a5 129#ifdef _WIN32
7d3505c5 130#include <malloc.h>
67b915a5 131#include <sys/timeb.h>
4fddf62a 132#include <mmsystem.h>
67b915a5
FB
133#define getopt_long_only getopt_long
134#define memalign(align, size) malloc(size)
135#endif
136
73332e5c 137#ifdef CONFIG_SDL
96bcd4f8 138#ifdef __APPLE__
83fb7adf 139#include <SDL/SDL.h>
96bcd4f8 140#endif
73332e5c 141#endif /* CONFIG_SDL */
0824d6fc 142
5b0753e0
FB
143#ifdef CONFIG_COCOA
144#undef main
145#define main qemu_main
146#endif /* CONFIG_COCOA */
147
0824d6fc 148#include "disas.h"
fc01f7e7 149
8a7ddc38 150#include "exec-all.h"
0824d6fc 151
0824d6fc 152//#define DEBUG_UNUSED_IOPORT
fd872598 153//#define DEBUG_IOPORT
9dc63a1e
BS
154//#define DEBUG_NET
155//#define DEBUG_SLIRP
330d0414 156
d12d51d5
AL
157
158#ifdef DEBUG_IOPORT
159# define LOG_IOPORT(...) do { \
160 if (loglevel & CPU_LOG_IOPORT) \
161 fprintf(logfile, ## __VA_ARGS__); \
162 } while (0)
163#else
164# define LOG_IOPORT(...) do { } while (0)
165#endif
166
77d4bc34
FB
167#ifdef TARGET_PPC
168#define DEFAULT_RAM_SIZE 144
169#else
1bfe856e 170#define DEFAULT_RAM_SIZE 128
77d4bc34 171#endif
313aa567 172
0d92ed30
PB
173/* Max number of USB devices that can be specified on the commandline. */
174#define MAX_USB_CMDLINE 8
175
dc72ac14
AZ
176/* Max number of bluetooth switches on the commandline. */
177#define MAX_BT_CMDLINE 10
178
7dea1da4
FB
179/* XXX: use a two level table to limit memory usage */
180#define MAX_IOPORTS 65536
0824d6fc 181
80cabfad 182const char *bios_dir = CONFIG_QEMU_SHAREDIR;
1192dad8 183const char *bios_name = NULL;
dbed7e40
BS
184static void *ioport_opaque[MAX_IOPORTS];
185static IOPortReadFunc *ioport_read_table[3][MAX_IOPORTS];
186static IOPortWriteFunc *ioport_write_table[3][MAX_IOPORTS];
e4bcb14c 187/* Note: drives_table[MAX_DRIVES] is a dummy block driver if none available
faea38e7 188 to store the VM snapshots */
e4bcb14c
TS
189DriveInfo drives_table[MAX_DRIVES+1];
190int nb_drives;
dbed7e40 191static int vga_ram_size;
cb5a7aa8 192enum vga_retrace_method vga_retrace_method = VGA_RETRACE_DUMB;
0e82f34d 193DisplayState display_state;
a20dd508 194int nographic;
dbed7e40 195static int curses;
3d11d0eb 196const char* keyboard_layout = NULL;
313aa567 197int64_t ticks_per_sec;
00f82b8a 198ram_addr_t ram_size;
c4b1fcc0 199int nb_nics;
7c9d8e07 200NICInfo nd_table[MAX_NICS];
8a7ddc38 201int vm_running;
f6503059
AZ
202static int rtc_utc = 1;
203static int rtc_date_offset = -1; /* -1 means no change */
1bfe856e 204int cirrus_vga_enabled = 1;
c2b3b41a 205int std_vga_enabled = 0;
d34cab9f 206int vmsvga_enabled = 0;
d827220b
FB
207#ifdef TARGET_SPARC
208int graphic_width = 1024;
209int graphic_height = 768;
eee0b836 210int graphic_depth = 8;
d827220b 211#else
1bfe856e
FB
212int graphic_width = 800;
213int graphic_height = 600;
e9b137c2 214int graphic_depth = 15;
eee0b836 215#endif
dbed7e40 216static int full_screen = 0;
634a21f6 217#ifdef CONFIG_SDL
dbed7e40 218static int no_frame = 0;
634a21f6 219#endif
667accab 220int no_quit = 0;
8d11df9e 221CharDriverState *serial_hds[MAX_SERIAL_PORTS];
6508fe59 222CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
9ede2fde 223CharDriverState *virtcon_hds[MAX_VIRTIO_CONSOLES];
a09db21f
FB
224#ifdef TARGET_I386
225int win2k_install_hack = 0;
73822ec8 226int rtc_td_hack = 0;
a09db21f 227#endif
bb36d470 228int usb_enabled = 0;
6a00d601 229int smp_cpus = 1;
73fc9742 230const char *vnc_display;
6515b203 231int acpi_enabled = 1;
16b29ae1 232int no_hpet = 0;
52ca8d6a 233int fd_bootchk = 1;
d1beab82 234int no_reboot = 0;
b2f76161 235int no_shutdown = 0;
9467cd46 236int cursor_hide = 1;
a171fe39 237int graphic_rotate = 0;
71e3ceb8 238int daemonize = 0;
9ae02555
TS
239const char *option_rom[MAX_OPTION_ROMS];
240int nb_option_roms;
8e71621f 241int semihosting_enabled = 0;
2b8f2d41
AZ
242#ifdef TARGET_ARM
243int old_param = 0;
244#endif
c35734b2 245const char *qemu_name;
3780e197 246int alt_grab = 0;
95efd11c 247#if defined(TARGET_SPARC) || defined(TARGET_PPC)
66508601
BS
248unsigned int nb_prom_envs = 0;
249const char *prom_envs[MAX_PROM_ENVS];
250#endif
dbed7e40
BS
251static int nb_drives_opt;
252static struct drive_opt {
609497ab
AZ
253 const char *file;
254 char opt[1024];
255} drives_opt[MAX_DRIVES];
0824d6fc 256
ee5605e5
AZ
257static CPUState *cur_cpu;
258static CPUState *next_cpu;
76ea08f9 259static int event_pending = 1;
bf20dc07 260/* Conversion factor from emulated instructions to virtual clock ticks. */
2e70f6ef 261static int icount_time_shift;
bf20dc07 262/* Arbitrarily pick 1MIPS as the minimum allowable speed. */
2e70f6ef
PB
263#define MAX_ICOUNT_SHIFT 10
264/* Compensate for varying guest execution speed. */
265static int64_t qemu_icount_bias;
dbed7e40
BS
266static QEMUTimer *icount_rt_timer;
267static QEMUTimer *icount_vm_timer;
ee5605e5 268
8fcb1b90
BS
269uint8_t qemu_uuid[16];
270
0824d6fc 271/***********************************************************/
26aa7d72
FB
272/* x86 ISA bus support */
273
274target_phys_addr_t isa_mem_base = 0;
3de388f6 275PicState2 *isa_pic;
0824d6fc 276
477e3edf
AL
277static IOPortReadFunc default_ioport_readb, default_ioport_readw, default_ioport_readl;
278static IOPortWriteFunc default_ioport_writeb, default_ioport_writew, default_ioport_writel;
279
280static uint32_t ioport_read(int index, uint32_t address)
281{
282 static IOPortReadFunc *default_func[3] = {
283 default_ioport_readb,
284 default_ioport_readw,
285 default_ioport_readl
286 };
287 IOPortReadFunc *func = ioport_read_table[index][address];
288 if (!func)
289 func = default_func[index];
290 return func(ioport_opaque[address], address);
291}
292
293static void ioport_write(int index, uint32_t address, uint32_t data)
294{
295 static IOPortWriteFunc *default_func[3] = {
296 default_ioport_writeb,
297 default_ioport_writew,
298 default_ioport_writel
299 };
300 IOPortWriteFunc *func = ioport_write_table[index][address];
301 if (!func)
302 func = default_func[index];
303 func(ioport_opaque[address], address, data);
304}
305
9596ebb7 306static uint32_t default_ioport_readb(void *opaque, uint32_t address)
0824d6fc
FB
307{
308#ifdef DEBUG_UNUSED_IOPORT
1196be37 309 fprintf(stderr, "unused inb: port=0x%04x\n", address);
0824d6fc 310#endif
fc01f7e7 311 return 0xff;
0824d6fc
FB
312}
313
9596ebb7 314static void default_ioport_writeb(void *opaque, uint32_t address, uint32_t data)
0824d6fc
FB
315{
316#ifdef DEBUG_UNUSED_IOPORT
1196be37 317 fprintf(stderr, "unused outb: port=0x%04x data=0x%02x\n", address, data);
0824d6fc
FB
318#endif
319}
320
321/* default is to make two byte accesses */
9596ebb7 322static uint32_t default_ioport_readw(void *opaque, uint32_t address)
0824d6fc
FB
323{
324 uint32_t data;
477e3edf 325 data = ioport_read(0, address);
db45c29a 326 address = (address + 1) & (MAX_IOPORTS - 1);
477e3edf 327 data |= ioport_read(0, address) << 8;
0824d6fc
FB
328 return data;
329}
330
9596ebb7 331static void default_ioport_writew(void *opaque, uint32_t address, uint32_t data)
0824d6fc 332{
477e3edf 333 ioport_write(0, address, data & 0xff);
db45c29a 334 address = (address + 1) & (MAX_IOPORTS - 1);
477e3edf 335 ioport_write(0, address, (data >> 8) & 0xff);
0824d6fc
FB
336}
337
9596ebb7 338static uint32_t default_ioport_readl(void *opaque, uint32_t address)
0824d6fc 339{
fc01f7e7 340#ifdef DEBUG_UNUSED_IOPORT
1196be37 341 fprintf(stderr, "unused inl: port=0x%04x\n", address);
fc01f7e7
FB
342#endif
343 return 0xffffffff;
0824d6fc
FB
344}
345
9596ebb7 346static void default_ioport_writel(void *opaque, uint32_t address, uint32_t data)
0824d6fc 347{
fc01f7e7 348#ifdef DEBUG_UNUSED_IOPORT
1196be37 349 fprintf(stderr, "unused outl: port=0x%04x data=0x%02x\n", address, data);
fc01f7e7 350#endif
0824d6fc
FB
351}
352
fc01f7e7 353/* size is the word size in byte */
5fafdf24 354int register_ioport_read(int start, int length, int size,
c4b1fcc0 355 IOPortReadFunc *func, void *opaque)
f1510b2c 356{
fc01f7e7 357 int i, bsize;
f1510b2c 358
c4b1fcc0 359 if (size == 1) {
fc01f7e7 360 bsize = 0;
c4b1fcc0 361 } else if (size == 2) {
fc01f7e7 362 bsize = 1;
c4b1fcc0 363 } else if (size == 4) {
fc01f7e7 364 bsize = 2;
c4b1fcc0 365 } else {
88fdf56f 366 hw_error("register_ioport_read: invalid size");
fc01f7e7 367 return -1;
c4b1fcc0
FB
368 }
369 for(i = start; i < start + length; i += size) {
fc01f7e7 370 ioport_read_table[bsize][i] = func;
c4b1fcc0 371 if (ioport_opaque[i] != NULL && ioport_opaque[i] != opaque)
88fdf56f 372 hw_error("register_ioport_read: invalid opaque");
c4b1fcc0
FB
373 ioport_opaque[i] = opaque;
374 }
f1510b2c
FB
375 return 0;
376}
377
fc01f7e7 378/* size is the word size in byte */
5fafdf24 379int register_ioport_write(int start, int length, int size,
c4b1fcc0 380 IOPortWriteFunc *func, void *opaque)
f1510b2c 381{
fc01f7e7 382 int i, bsize;
f1510b2c 383
c4b1fcc0 384 if (size == 1) {
fc01f7e7 385 bsize = 0;
c4b1fcc0 386 } else if (size == 2) {
fc01f7e7 387 bsize = 1;
c4b1fcc0 388 } else if (size == 4) {
fc01f7e7 389 bsize = 2;
c4b1fcc0 390 } else {
88fdf56f 391 hw_error("register_ioport_write: invalid size");
fc01f7e7 392 return -1;
c4b1fcc0
FB
393 }
394 for(i = start; i < start + length; i += size) {
fc01f7e7 395 ioport_write_table[bsize][i] = func;
88fdf56f
AZ
396 if (ioport_opaque[i] != NULL && ioport_opaque[i] != opaque)
397 hw_error("register_ioport_write: invalid opaque");
c4b1fcc0
FB
398 ioport_opaque[i] = opaque;
399 }
f1510b2c
FB
400 return 0;
401}
402
69b91039
FB
403void isa_unassign_ioport(int start, int length)
404{
405 int i;
406
407 for(i = start; i < start + length; i++) {
408 ioport_read_table[0][i] = default_ioport_readb;
409 ioport_read_table[1][i] = default_ioport_readw;
410 ioport_read_table[2][i] = default_ioport_readl;
411
412 ioport_write_table[0][i] = default_ioport_writeb;
413 ioport_write_table[1][i] = default_ioport_writew;
414 ioport_write_table[2][i] = default_ioport_writel;
415 }
416}
417
20f32282
FB
418/***********************************************************/
419
c45886db 420void cpu_outb(CPUState *env, int addr, int val)
0824d6fc 421{
d12d51d5 422 LOG_IOPORT("outb: %04x %02x\n", addr, val);
477e3edf 423 ioport_write(0, addr, val);
89bfc105
FB
424#ifdef USE_KQEMU
425 if (env)
426 env->last_io_time = cpu_get_time_fast();
427#endif
0824d6fc
FB
428}
429
c45886db 430void cpu_outw(CPUState *env, int addr, int val)
0824d6fc 431{
d12d51d5 432 LOG_IOPORT("outw: %04x %04x\n", addr, val);
477e3edf 433 ioport_write(1, addr, val);
89bfc105
FB
434#ifdef USE_KQEMU
435 if (env)
436 env->last_io_time = cpu_get_time_fast();
437#endif
0824d6fc
FB
438}
439
c45886db 440void cpu_outl(CPUState *env, int addr, int val)
0824d6fc 441{
d12d51d5 442 LOG_IOPORT("outl: %04x %08x\n", addr, val);
477e3edf 443 ioport_write(2, addr, val);
89bfc105
FB
444#ifdef USE_KQEMU
445 if (env)
446 env->last_io_time = cpu_get_time_fast();
447#endif
0824d6fc
FB
448}
449
c45886db 450int cpu_inb(CPUState *env, int addr)
0824d6fc 451{
fd872598 452 int val;
477e3edf 453 val = ioport_read(0, addr);
d12d51d5 454 LOG_IOPORT("inb : %04x %02x\n", addr, val);
89bfc105
FB
455#ifdef USE_KQEMU
456 if (env)
457 env->last_io_time = cpu_get_time_fast();
fd872598
FB
458#endif
459 return val;
0824d6fc
FB
460}
461
c45886db 462int cpu_inw(CPUState *env, int addr)
0824d6fc 463{
fd872598 464 int val;
477e3edf 465 val = ioport_read(1, addr);
d12d51d5 466 LOG_IOPORT("inw : %04x %04x\n", addr, val);
89bfc105
FB
467#ifdef USE_KQEMU
468 if (env)
469 env->last_io_time = cpu_get_time_fast();
fd872598
FB
470#endif
471 return val;
0824d6fc
FB
472}
473
c45886db 474int cpu_inl(CPUState *env, int addr)
0824d6fc 475{
fd872598 476 int val;
477e3edf 477 val = ioport_read(2, addr);
d12d51d5 478 LOG_IOPORT("inl : %04x %08x\n", addr, val);
89bfc105
FB
479#ifdef USE_KQEMU
480 if (env)
481 env->last_io_time = cpu_get_time_fast();
fd872598
FB
482#endif
483 return val;
0824d6fc
FB
484}
485
486/***********************************************************/
0824d6fc
FB
487void hw_error(const char *fmt, ...)
488{
489 va_list ap;
6a00d601 490 CPUState *env;
0824d6fc
FB
491
492 va_start(ap, fmt);
493 fprintf(stderr, "qemu: hardware error: ");
494 vfprintf(stderr, fmt, ap);
495 fprintf(stderr, "\n");
6a00d601
FB
496 for(env = first_cpu; env != NULL; env = env->next_cpu) {
497 fprintf(stderr, "CPU #%d:\n", env->cpu_index);
0824d6fc 498#ifdef TARGET_I386
6a00d601 499 cpu_dump_state(env, stderr, fprintf, X86_DUMP_FPU);
c45886db 500#else
6a00d601 501 cpu_dump_state(env, stderr, fprintf, 0);
0824d6fc 502#endif
6a00d601 503 }
0824d6fc
FB
504 va_end(ap);
505 abort();
506}
df751fa8
AL
507
508/***************/
509/* ballooning */
510
511static QEMUBalloonEvent *qemu_balloon_event;
512void *qemu_balloon_event_opaque;
513
514void qemu_add_balloon_handler(QEMUBalloonEvent *func, void *opaque)
515{
516 qemu_balloon_event = func;
517 qemu_balloon_event_opaque = opaque;
518}
519
520void qemu_balloon(ram_addr_t target)
521{
522 if (qemu_balloon_event)
523 qemu_balloon_event(qemu_balloon_event_opaque, target);
524}
525
526ram_addr_t qemu_balloon_status(void)
527{
528 if (qemu_balloon_event)
529 return qemu_balloon_event(qemu_balloon_event_opaque, 0);
530 return 0;
531}
0824d6fc 532
63066f4f
FB
533/***********************************************************/
534/* keyboard/mouse */
535
536static QEMUPutKBDEvent *qemu_put_kbd_event;
537static void *qemu_put_kbd_event_opaque;
455204eb
TS
538static QEMUPutMouseEntry *qemu_put_mouse_event_head;
539static QEMUPutMouseEntry *qemu_put_mouse_event_current;
63066f4f
FB
540
541void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque)
542{
543 qemu_put_kbd_event_opaque = opaque;
544 qemu_put_kbd_event = func;
545}
546
455204eb
TS
547QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
548 void *opaque, int absolute,
549 const char *name)
63066f4f 550{
455204eb
TS
551 QEMUPutMouseEntry *s, *cursor;
552
553 s = qemu_mallocz(sizeof(QEMUPutMouseEntry));
554 if (!s)
555 return NULL;
556
557 s->qemu_put_mouse_event = func;
558 s->qemu_put_mouse_event_opaque = opaque;
559 s->qemu_put_mouse_event_absolute = absolute;
560 s->qemu_put_mouse_event_name = qemu_strdup(name);
561 s->next = NULL;
562
563 if (!qemu_put_mouse_event_head) {
564 qemu_put_mouse_event_head = qemu_put_mouse_event_current = s;
565 return s;
566 }
567
568 cursor = qemu_put_mouse_event_head;
569 while (cursor->next != NULL)
570 cursor = cursor->next;
571
572 cursor->next = s;
573 qemu_put_mouse_event_current = s;
574
575 return s;
576}
577
578void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry)
579{
580 QEMUPutMouseEntry *prev = NULL, *cursor;
581
582 if (!qemu_put_mouse_event_head || entry == NULL)
583 return;
584
585 cursor = qemu_put_mouse_event_head;
586 while (cursor != NULL && cursor != entry) {
587 prev = cursor;
588 cursor = cursor->next;
589 }
590
591 if (cursor == NULL) // does not exist or list empty
592 return;
593 else if (prev == NULL) { // entry is head
594 qemu_put_mouse_event_head = cursor->next;
595 if (qemu_put_mouse_event_current == entry)
596 qemu_put_mouse_event_current = cursor->next;
597 qemu_free(entry->qemu_put_mouse_event_name);
598 qemu_free(entry);
599 return;
600 }
601
602 prev->next = entry->next;
603
604 if (qemu_put_mouse_event_current == entry)
605 qemu_put_mouse_event_current = prev;
606
607 qemu_free(entry->qemu_put_mouse_event_name);
608 qemu_free(entry);
63066f4f
FB
609}
610
611void kbd_put_keycode(int keycode)
612{
613 if (qemu_put_kbd_event) {
614 qemu_put_kbd_event(qemu_put_kbd_event_opaque, keycode);
615 }
616}
617
618void kbd_mouse_event(int dx, int dy, int dz, int buttons_state)
619{
455204eb
TS
620 QEMUPutMouseEvent *mouse_event;
621 void *mouse_event_opaque;
a171fe39 622 int width;
455204eb
TS
623
624 if (!qemu_put_mouse_event_current) {
625 return;
626 }
627
628 mouse_event =
629 qemu_put_mouse_event_current->qemu_put_mouse_event;
630 mouse_event_opaque =
631 qemu_put_mouse_event_current->qemu_put_mouse_event_opaque;
632
633 if (mouse_event) {
a171fe39
AZ
634 if (graphic_rotate) {
635 if (qemu_put_mouse_event_current->qemu_put_mouse_event_absolute)
636 width = 0x7fff;
637 else
b94ed577 638 width = graphic_width - 1;
a171fe39
AZ
639 mouse_event(mouse_event_opaque,
640 width - dy, dx, dz, buttons_state);
641 } else
642 mouse_event(mouse_event_opaque,
643 dx, dy, dz, buttons_state);
63066f4f
FB
644 }
645}
646
09b26c5e
FB
647int kbd_mouse_is_absolute(void)
648{
455204eb
TS
649 if (!qemu_put_mouse_event_current)
650 return 0;
651
652 return qemu_put_mouse_event_current->qemu_put_mouse_event_absolute;
653}
654
655void do_info_mice(void)
656{
657 QEMUPutMouseEntry *cursor;
658 int index = 0;
659
660 if (!qemu_put_mouse_event_head) {
661 term_printf("No mouse devices connected\n");
662 return;
663 }
664
665 term_printf("Mouse devices available:\n");
666 cursor = qemu_put_mouse_event_head;
667 while (cursor != NULL) {
668 term_printf("%c Mouse #%d: %s\n",
669 (cursor == qemu_put_mouse_event_current ? '*' : ' '),
670 index, cursor->qemu_put_mouse_event_name);
671 index++;
672 cursor = cursor->next;
673 }
674}
675
676void do_mouse_set(int index)
677{
678 QEMUPutMouseEntry *cursor;
679 int i = 0;
680
681 if (!qemu_put_mouse_event_head) {
682 term_printf("No mouse devices connected\n");
683 return;
684 }
685
686 cursor = qemu_put_mouse_event_head;
687 while (cursor != NULL && index != i) {
688 i++;
689 cursor = cursor->next;
690 }
691
692 if (cursor != NULL)
693 qemu_put_mouse_event_current = cursor;
694 else
695 term_printf("Mouse at given index not found\n");
09b26c5e
FB
696}
697
1dce7c3c
FB
698/* compute with 96 bit intermediate result: (a*b)/c */
699uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c)
0824d6fc 700{
1dce7c3c
FB
701 union {
702 uint64_t ll;
703 struct {
704#ifdef WORDS_BIGENDIAN
705 uint32_t high, low;
706#else
707 uint32_t low, high;
3b46e624 708#endif
1dce7c3c
FB
709 } l;
710 } u, res;
711 uint64_t rl, rh;
0824d6fc 712
1dce7c3c
FB
713 u.ll = a;
714 rl = (uint64_t)u.l.low * (uint64_t)b;
715 rh = (uint64_t)u.l.high * (uint64_t)b;
716 rh += (rl >> 32);
717 res.l.high = rh / c;
718 res.l.low = (((rh % c) << 32) + (rl & 0xffffffff)) / c;
719 return res.ll;
34865134
FB
720}
721
1dce7c3c
FB
722/***********************************************************/
723/* real time host monotonic timer */
34865134 724
1dce7c3c 725#define QEMU_TIMER_BASE 1000000000LL
34865134 726
1dce7c3c 727#ifdef WIN32
0824d6fc 728
1dce7c3c 729static int64_t clock_freq;
1115dde7 730
1dce7c3c 731static void init_get_clock(void)
1115dde7 732{
a8e5ac33
FB
733 LARGE_INTEGER freq;
734 int ret;
1dce7c3c
FB
735 ret = QueryPerformanceFrequency(&freq);
736 if (ret == 0) {
737 fprintf(stderr, "Could not calibrate ticks\n");
738 exit(1);
739 }
740 clock_freq = freq.QuadPart;
1115dde7
FB
741}
742
1dce7c3c 743static int64_t get_clock(void)
b8076a74 744{
1dce7c3c
FB
745 LARGE_INTEGER ti;
746 QueryPerformanceCounter(&ti);
747 return muldiv64(ti.QuadPart, QEMU_TIMER_BASE, clock_freq);
b8076a74
FB
748}
749
1dce7c3c 750#else
90cb9493 751
1dce7c3c
FB
752static int use_rt_clock;
753
754static void init_get_clock(void)
90cb9493 755{
1dce7c3c 756 use_rt_clock = 0;
60759371 757#if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD_version >= 500000)
1dce7c3c
FB
758 {
759 struct timespec ts;
760 if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0) {
761 use_rt_clock = 1;
762 }
763 }
764#endif
90cb9493
FB
765}
766
1dce7c3c 767static int64_t get_clock(void)
fdbb4691 768{
60759371 769#if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD_version >= 500000)
1dce7c3c
FB
770 if (use_rt_clock) {
771 struct timespec ts;
772 clock_gettime(CLOCK_MONOTONIC, &ts);
773 return ts.tv_sec * 1000000000LL + ts.tv_nsec;
5fafdf24 774 } else
fdbb4691 775#endif
1dce7c3c
FB
776 {
777 /* XXX: using gettimeofday leads to problems if the date
778 changes, so it should be avoided. */
779 struct timeval tv;
780 gettimeofday(&tv, NULL);
781 return tv.tv_sec * 1000000000LL + (tv.tv_usec * 1000);
782 }
fdbb4691 783}
34865134
FB
784#endif
785
2e70f6ef
PB
786/* Return the virtual CPU time, based on the instruction counter. */
787static int64_t cpu_get_icount(void)
788{
789 int64_t icount;
790 CPUState *env = cpu_single_env;;
791 icount = qemu_icount;
792 if (env) {
793 if (!can_do_io(env))
794 fprintf(stderr, "Bad clock read\n");
795 icount -= (env->icount_decr.u16.low + env->icount_extra);
796 }
797 return qemu_icount_bias + (icount << icount_time_shift);
798}
799
1dce7c3c
FB
800/***********************************************************/
801/* guest cycle counter */
802
eade0f19 803static int64_t cpu_ticks_prev;
34865134 804static int64_t cpu_ticks_offset;
1dce7c3c 805static int64_t cpu_clock_offset;
8a7ddc38 806static int cpu_ticks_enabled;
34865134 807
1dce7c3c
FB
808/* return the host CPU cycle counter and handle stop/restart */
809int64_t cpu_get_ticks(void)
34865134 810{
2e70f6ef
PB
811 if (use_icount) {
812 return cpu_get_icount();
813 }
8a7ddc38
FB
814 if (!cpu_ticks_enabled) {
815 return cpu_ticks_offset;
816 } else {
eade0f19
FB
817 int64_t ticks;
818 ticks = cpu_get_real_ticks();
819 if (cpu_ticks_prev > ticks) {
820 /* Note: non increasing ticks may happen if the host uses
821 software suspend */
822 cpu_ticks_offset += cpu_ticks_prev - ticks;
823 }
824 cpu_ticks_prev = ticks;
825 return ticks + cpu_ticks_offset;
8a7ddc38 826 }
34865134
FB
827}
828
1dce7c3c
FB
829/* return the host CPU monotonic timer and handle stop/restart */
830static int64_t cpu_get_clock(void)
831{
832 int64_t ti;
833 if (!cpu_ticks_enabled) {
834 return cpu_clock_offset;
835 } else {
836 ti = get_clock();
837 return ti + cpu_clock_offset;
838 }
839}
840
34865134
FB
841/* enable cpu_get_ticks() */
842void cpu_enable_ticks(void)
843{
8a7ddc38
FB
844 if (!cpu_ticks_enabled) {
845 cpu_ticks_offset -= cpu_get_real_ticks();
1dce7c3c 846 cpu_clock_offset -= get_clock();
8a7ddc38
FB
847 cpu_ticks_enabled = 1;
848 }
34865134
FB
849}
850
851/* disable cpu_get_ticks() : the clock is stopped. You must not call
852 cpu_get_ticks() after that. */
853void cpu_disable_ticks(void)
854{
8a7ddc38
FB
855 if (cpu_ticks_enabled) {
856 cpu_ticks_offset = cpu_get_ticks();
1dce7c3c 857 cpu_clock_offset = cpu_get_clock();
8a7ddc38
FB
858 cpu_ticks_enabled = 0;
859 }
34865134
FB
860}
861
1dce7c3c
FB
862/***********************************************************/
863/* timers */
5fafdf24 864
8a7ddc38
FB
865#define QEMU_TIMER_REALTIME 0
866#define QEMU_TIMER_VIRTUAL 1
867
868struct QEMUClock {
869 int type;
870 /* XXX: add frequency */
871};
872
873struct QEMUTimer {
874 QEMUClock *clock;
875 int64_t expire_time;
876 QEMUTimerCB *cb;
877 void *opaque;
878 struct QEMUTimer *next;
879};
880
c8994013
TS
881struct qemu_alarm_timer {
882 char const *name;
efe75411 883 unsigned int flags;
c8994013
TS
884
885 int (*start)(struct qemu_alarm_timer *t);
886 void (*stop)(struct qemu_alarm_timer *t);
efe75411 887 void (*rearm)(struct qemu_alarm_timer *t);
c8994013
TS
888 void *priv;
889};
890
efe75411 891#define ALARM_FLAG_DYNTICKS 0x1
d5d08334 892#define ALARM_FLAG_EXPIRED 0x2
efe75411
TS
893
894static inline int alarm_has_dynticks(struct qemu_alarm_timer *t)
895{
896 return t->flags & ALARM_FLAG_DYNTICKS;
897}
898
899static void qemu_rearm_alarm_timer(struct qemu_alarm_timer *t)
900{
901 if (!alarm_has_dynticks(t))
902 return;
903
904 t->rearm(t);
905}
906
907/* TODO: MIN_TIMER_REARM_US should be optimized */
908#define MIN_TIMER_REARM_US 250
909
c8994013 910static struct qemu_alarm_timer *alarm_timer;
f49e58dc 911#ifndef _WIN32
c96f1a48 912static int alarm_timer_rfd, alarm_timer_wfd;
f49e58dc 913#endif
8a7ddc38 914
40c3bac3 915#ifdef _WIN32
c8994013
TS
916
917struct qemu_alarm_win32 {
918 MMRESULT timerId;
919 HANDLE host_alarm;
920 unsigned int period;
921} alarm_win32_data = {0, NULL, -1};
922
923static int win32_start_timer(struct qemu_alarm_timer *t);
924static void win32_stop_timer(struct qemu_alarm_timer *t);
efe75411 925static void win32_rearm_timer(struct qemu_alarm_timer *t);
c8994013 926
40c3bac3 927#else
c8994013
TS
928
929static int unix_start_timer(struct qemu_alarm_timer *t);
930static void unix_stop_timer(struct qemu_alarm_timer *t);
931
231c6586
TS
932#ifdef __linux__
933
efe75411
TS
934static int dynticks_start_timer(struct qemu_alarm_timer *t);
935static void dynticks_stop_timer(struct qemu_alarm_timer *t);
936static void dynticks_rearm_timer(struct qemu_alarm_timer *t);
937
c40ec5a9
TS
938static int hpet_start_timer(struct qemu_alarm_timer *t);
939static void hpet_stop_timer(struct qemu_alarm_timer *t);
940
c8994013
TS
941static int rtc_start_timer(struct qemu_alarm_timer *t);
942static void rtc_stop_timer(struct qemu_alarm_timer *t);
943
efe75411 944#endif /* __linux__ */
8a7ddc38 945
c8994013
TS
946#endif /* _WIN32 */
947
2e70f6ef 948/* Correlation between real and virtual time is always going to be
bf20dc07 949 fairly approximate, so ignore small variation.
2e70f6ef
PB
950 When the guest is idle real and virtual time will be aligned in
951 the IO wait loop. */
952#define ICOUNT_WOBBLE (QEMU_TIMER_BASE / 10)
953
954static void icount_adjust(void)
955{
956 int64_t cur_time;
957 int64_t cur_icount;
958 int64_t delta;
959 static int64_t last_delta;
960 /* If the VM is not running, then do nothing. */
961 if (!vm_running)
962 return;
963
964 cur_time = cpu_get_clock();
965 cur_icount = qemu_get_clock(vm_clock);
966 delta = cur_icount - cur_time;
967 /* FIXME: This is a very crude algorithm, somewhat prone to oscillation. */
968 if (delta > 0
969 && last_delta + ICOUNT_WOBBLE < delta * 2
970 && icount_time_shift > 0) {
971 /* The guest is getting too far ahead. Slow time down. */
972 icount_time_shift--;
973 }
974 if (delta < 0
975 && last_delta - ICOUNT_WOBBLE > delta * 2
976 && icount_time_shift < MAX_ICOUNT_SHIFT) {
977 /* The guest is getting too far behind. Speed time up. */
978 icount_time_shift++;
979 }
980 last_delta = delta;
981 qemu_icount_bias = cur_icount - (qemu_icount << icount_time_shift);
982}
983
984static void icount_adjust_rt(void * opaque)
985{
986 qemu_mod_timer(icount_rt_timer,
987 qemu_get_clock(rt_clock) + 1000);
988 icount_adjust();
989}
990
991static void icount_adjust_vm(void * opaque)
992{
993 qemu_mod_timer(icount_vm_timer,
994 qemu_get_clock(vm_clock) + QEMU_TIMER_BASE / 10);
995 icount_adjust();
996}
997
998static void init_icount_adjust(void)
999{
1000 /* Have both realtime and virtual time triggers for speed adjustment.
1001 The realtime trigger catches emulated time passing too slowly,
1002 the virtual time trigger catches emulated time passing too fast.
1003 Realtime triggers occur even when idle, so use them less frequently
1004 than VM triggers. */
1005 icount_rt_timer = qemu_new_timer(rt_clock, icount_adjust_rt, NULL);
1006 qemu_mod_timer(icount_rt_timer,
1007 qemu_get_clock(rt_clock) + 1000);
1008 icount_vm_timer = qemu_new_timer(vm_clock, icount_adjust_vm, NULL);
1009 qemu_mod_timer(icount_vm_timer,
1010 qemu_get_clock(vm_clock) + QEMU_TIMER_BASE / 10);
1011}
1012
c8994013 1013static struct qemu_alarm_timer alarm_timers[] = {
efe75411 1014#ifndef _WIN32
231c6586 1015#ifdef __linux__
efe75411
TS
1016 {"dynticks", ALARM_FLAG_DYNTICKS, dynticks_start_timer,
1017 dynticks_stop_timer, dynticks_rearm_timer, NULL},
c40ec5a9 1018 /* HPET - if available - is preferred */
efe75411 1019 {"hpet", 0, hpet_start_timer, hpet_stop_timer, NULL, NULL},
c40ec5a9 1020 /* ...otherwise try RTC */
efe75411 1021 {"rtc", 0, rtc_start_timer, rtc_stop_timer, NULL, NULL},
c8994013 1022#endif
efe75411 1023 {"unix", 0, unix_start_timer, unix_stop_timer, NULL, NULL},
c8994013 1024#else
efe75411
TS
1025 {"dynticks", ALARM_FLAG_DYNTICKS, win32_start_timer,
1026 win32_stop_timer, win32_rearm_timer, &alarm_win32_data},
1027 {"win32", 0, win32_start_timer,
1028 win32_stop_timer, NULL, &alarm_win32_data},
c8994013
TS
1029#endif
1030 {NULL, }
1031};
1032
3f47aa8c 1033static void show_available_alarms(void)
f3dcfada
TS
1034{
1035 int i;
1036
1037 printf("Available alarm timers, in order of precedence:\n");
1038 for (i = 0; alarm_timers[i].name; i++)
1039 printf("%s\n", alarm_timers[i].name);
1040}
1041
1042static void configure_alarms(char const *opt)
1043{
1044 int i;
1045 int cur = 0;
b1503cda 1046 int count = ARRAY_SIZE(alarm_timers) - 1;
f3dcfada
TS
1047 char *arg;
1048 char *name;
2e70f6ef 1049 struct qemu_alarm_timer tmp;
f3dcfada 1050
3adda04c 1051 if (!strcmp(opt, "?")) {
f3dcfada
TS
1052 show_available_alarms();
1053 exit(0);
1054 }
1055
1056 arg = strdup(opt);
1057
1058 /* Reorder the array */
1059 name = strtok(arg, ",");
1060 while (name) {
e2b577e5 1061 for (i = 0; i < count && alarm_timers[i].name; i++) {
f3dcfada
TS
1062 if (!strcmp(alarm_timers[i].name, name))
1063 break;
1064 }
1065
1066 if (i == count) {
1067 fprintf(stderr, "Unknown clock %s\n", name);
1068 goto next;
1069 }
1070
1071 if (i < cur)
1072 /* Ignore */
1073 goto next;
1074
1075 /* Swap */
1076 tmp = alarm_timers[i];
1077 alarm_timers[i] = alarm_timers[cur];
1078 alarm_timers[cur] = tmp;
1079
1080 cur++;
1081next:
1082 name = strtok(NULL, ",");
1083 }
1084
1085 free(arg);
1086
1087 if (cur) {
2e70f6ef 1088 /* Disable remaining timers */
f3dcfada
TS
1089 for (i = cur; i < count; i++)
1090 alarm_timers[i].name = NULL;
3adda04c
AJ
1091 } else {
1092 show_available_alarms();
1093 exit(1);
f3dcfada 1094 }
f3dcfada
TS
1095}
1096
c8994013
TS
1097QEMUClock *rt_clock;
1098QEMUClock *vm_clock;
1099
1100static QEMUTimer *active_timers[2];
1101
9596ebb7 1102static QEMUClock *qemu_new_clock(int type)
8a7ddc38
FB
1103{
1104 QEMUClock *clock;
1105 clock = qemu_mallocz(sizeof(QEMUClock));
1106 if (!clock)
1107 return NULL;
1108 clock->type = type;
1109 return clock;
1110}
1111
1112QEMUTimer *qemu_new_timer(QEMUClock *clock, QEMUTimerCB *cb, void *opaque)
1113{
1114 QEMUTimer *ts;
1115
1116 ts = qemu_mallocz(sizeof(QEMUTimer));
1117 ts->clock = clock;
1118 ts->cb = cb;
1119 ts->opaque = opaque;
1120 return ts;
1121}
1122
1123void qemu_free_timer(QEMUTimer *ts)
1124{
1125 qemu_free(ts);
1126}
1127
1128/* stop a timer, but do not dealloc it */
1129void qemu_del_timer(QEMUTimer *ts)
1130{
1131 QEMUTimer **pt, *t;
1132
1133 /* NOTE: this code must be signal safe because
1134 qemu_timer_expired() can be called from a signal. */
1135 pt = &active_timers[ts->clock->type];
1136 for(;;) {
1137 t = *pt;
1138 if (!t)
1139 break;
1140 if (t == ts) {
1141 *pt = t->next;
1142 break;
1143 }
1144 pt = &t->next;
1145 }
1146}
1147
1148/* modify the current timer so that it will be fired when current_time
1149 >= expire_time. The corresponding callback will be called. */
1150void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time)
1151{
1152 QEMUTimer **pt, *t;
1153
1154 qemu_del_timer(ts);
1155
1156 /* add the timer in the sorted list */
1157 /* NOTE: this code must be signal safe because
1158 qemu_timer_expired() can be called from a signal. */
1159 pt = &active_timers[ts->clock->type];
1160 for(;;) {
1161 t = *pt;
1162 if (!t)
1163 break;
5fafdf24 1164 if (t->expire_time > expire_time)
8a7ddc38
FB
1165 break;
1166 pt = &t->next;
1167 }
1168 ts->expire_time = expire_time;
1169 ts->next = *pt;
1170 *pt = ts;
d5d08334
AZ
1171
1172 /* Rearm if necessary */
2e70f6ef
PB
1173 if (pt == &active_timers[ts->clock->type]) {
1174 if ((alarm_timer->flags & ALARM_FLAG_EXPIRED) == 0) {
1175 qemu_rearm_alarm_timer(alarm_timer);
1176 }
1177 /* Interrupt execution to force deadline recalculation. */
1178 if (use_icount && cpu_single_env) {
1179 cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
1180 }
1181 }
8a7ddc38
FB
1182}
1183
1184int qemu_timer_pending(QEMUTimer *ts)
1185{
1186 QEMUTimer *t;
1187 for(t = active_timers[ts->clock->type]; t != NULL; t = t->next) {
1188 if (t == ts)
1189 return 1;
1190 }
1191 return 0;
1192}
1193
1194static inline int qemu_timer_expired(QEMUTimer *timer_head, int64_t current_time)
1195{
1196 if (!timer_head)
1197 return 0;
1198 return (timer_head->expire_time <= current_time);
1199}
1200
1201static void qemu_run_timers(QEMUTimer **ptimer_head, int64_t current_time)
1202{
1203 QEMUTimer *ts;
3b46e624 1204
8a7ddc38
FB
1205 for(;;) {
1206 ts = *ptimer_head;
e95c8d51 1207 if (!ts || ts->expire_time > current_time)
8a7ddc38
FB
1208 break;
1209 /* remove timer from the list before calling the callback */
1210 *ptimer_head = ts->next;
1211 ts->next = NULL;
3b46e624 1212
8a7ddc38
FB
1213 /* run the callback (the timer list can be modified) */
1214 ts->cb(ts->opaque);
1215 }
1216}
1217
1218int64_t qemu_get_clock(QEMUClock *clock)
1219{
1220 switch(clock->type) {
1221 case QEMU_TIMER_REALTIME:
1dce7c3c 1222 return get_clock() / 1000000;
8a7ddc38
FB
1223 default:
1224 case QEMU_TIMER_VIRTUAL:
2e70f6ef
PB
1225 if (use_icount) {
1226 return cpu_get_icount();
1227 } else {
1228 return cpu_get_clock();
1229 }
8a7ddc38
FB
1230 }
1231}
1232
1dce7c3c
FB
1233static void init_timers(void)
1234{
1235 init_get_clock();
1236 ticks_per_sec = QEMU_TIMER_BASE;
1237 rt_clock = qemu_new_clock(QEMU_TIMER_REALTIME);
1238 vm_clock = qemu_new_clock(QEMU_TIMER_VIRTUAL);
1239}
1240
8a7ddc38
FB
1241/* save a timer */
1242void qemu_put_timer(QEMUFile *f, QEMUTimer *ts)
1243{
1244 uint64_t expire_time;
1245
1246 if (qemu_timer_pending(ts)) {
1247 expire_time = ts->expire_time;
1248 } else {
1249 expire_time = -1;
1250 }
1251 qemu_put_be64(f, expire_time);
1252}
1253
1254void qemu_get_timer(QEMUFile *f, QEMUTimer *ts)
1255{
1256 uint64_t expire_time;
1257
1258 expire_time = qemu_get_be64(f);
1259 if (expire_time != -1) {
1260 qemu_mod_timer(ts, expire_time);
1261 } else {
1262 qemu_del_timer(ts);
1263 }
1264}
1265
1266static void timer_save(QEMUFile *f, void *opaque)
1267{
1268 if (cpu_ticks_enabled) {
1269 hw_error("cannot save state if virtual timers are running");
1270 }
bee8d684
TS
1271 qemu_put_be64(f, cpu_ticks_offset);
1272 qemu_put_be64(f, ticks_per_sec);
1273 qemu_put_be64(f, cpu_clock_offset);
8a7ddc38
FB
1274}
1275
1276static int timer_load(QEMUFile *f, void *opaque, int version_id)
1277{
c88676f8 1278 if (version_id != 1 && version_id != 2)
8a7ddc38
FB
1279 return -EINVAL;
1280 if (cpu_ticks_enabled) {
1281 return -EINVAL;
1282 }
bee8d684
TS
1283 cpu_ticks_offset=qemu_get_be64(f);
1284 ticks_per_sec=qemu_get_be64(f);
c88676f8 1285 if (version_id == 2) {
bee8d684 1286 cpu_clock_offset=qemu_get_be64(f);
c88676f8 1287 }
8a7ddc38
FB
1288 return 0;
1289}
1290
67b915a5 1291#ifdef _WIN32
5fafdf24 1292void CALLBACK host_alarm_handler(UINT uTimerID, UINT uMsg,
67b915a5
FB
1293 DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2)
1294#else
8a7ddc38 1295static void host_alarm_handler(int host_signum)
67b915a5 1296#endif
8a7ddc38 1297{
02ba45c5
FB
1298#if 0
1299#define DISP_FREQ 1000
1300 {
1301 static int64_t delta_min = INT64_MAX;
1302 static int64_t delta_max, delta_cum, last_clock, delta, ti;
1303 static int count;
1304 ti = qemu_get_clock(vm_clock);
1305 if (last_clock != 0) {
1306 delta = ti - last_clock;
1307 if (delta < delta_min)
1308 delta_min = delta;
1309 if (delta > delta_max)
1310 delta_max = delta;
1311 delta_cum += delta;
1312 if (++count == DISP_FREQ) {
26a76461 1313 printf("timer: min=%" PRId64 " us max=%" PRId64 " us avg=%" PRId64 " us avg_freq=%0.3f Hz\n",
02ba45c5
FB
1314 muldiv64(delta_min, 1000000, ticks_per_sec),
1315 muldiv64(delta_max, 1000000, ticks_per_sec),
1316 muldiv64(delta_cum, 1000000 / DISP_FREQ, ticks_per_sec),
1317 (double)ticks_per_sec / ((double)delta_cum / DISP_FREQ));
1318 count = 0;
1319 delta_min = INT64_MAX;
1320 delta_max = 0;
1321 delta_cum = 0;
1322 }
1323 }
1324 last_clock = ti;
1325 }
1326#endif
efe75411 1327 if (alarm_has_dynticks(alarm_timer) ||
2e70f6ef
PB
1328 (!use_icount &&
1329 qemu_timer_expired(active_timers[QEMU_TIMER_VIRTUAL],
1330 qemu_get_clock(vm_clock))) ||
8a7ddc38
FB
1331 qemu_timer_expired(active_timers[QEMU_TIMER_REALTIME],
1332 qemu_get_clock(rt_clock))) {
c96f1a48 1333 CPUState *env = next_cpu;
c96f1a48 1334
06d9f2f7 1335#ifdef _WIN32
c8994013
TS
1336 struct qemu_alarm_win32 *data = ((struct qemu_alarm_timer*)dwUser)->priv;
1337 SetEvent(data->host_alarm);
f49e58dc
AL
1338#else
1339 static const char byte = 0;
c96f1a48 1340 write(alarm_timer_wfd, &byte, sizeof(byte));
f49e58dc 1341#endif
d5d08334
AZ
1342 alarm_timer->flags |= ALARM_FLAG_EXPIRED;
1343
4f8eb8da
AZ
1344 if (env) {
1345 /* stop the currently executing cpu because a timer occured */
1346 cpu_interrupt(env, CPU_INTERRUPT_EXIT);
a332e112 1347#ifdef USE_KQEMU
4f8eb8da
AZ
1348 if (env->kqemu_enabled) {
1349 kqemu_cpu_interrupt(env);
1350 }
ee5605e5 1351#endif
4f8eb8da 1352 }
ee5605e5 1353 event_pending = 1;
8a7ddc38
FB
1354 }
1355}
1356
2e70f6ef 1357static int64_t qemu_next_deadline(void)
efe75411 1358{
2e70f6ef 1359 int64_t delta;
efe75411
TS
1360
1361 if (active_timers[QEMU_TIMER_VIRTUAL]) {
2e70f6ef
PB
1362 delta = active_timers[QEMU_TIMER_VIRTUAL]->expire_time -
1363 qemu_get_clock(vm_clock);
1364 } else {
1365 /* To avoid problems with overflow limit this to 2^32. */
1366 delta = INT32_MAX;
efe75411
TS
1367 }
1368
2e70f6ef
PB
1369 if (delta < 0)
1370 delta = 0;
efe75411 1371
2e70f6ef
PB
1372 return delta;
1373}
1374
8632fb9a 1375#if defined(__linux__) || defined(_WIN32)
2e70f6ef
PB
1376static uint64_t qemu_next_deadline_dyntick(void)
1377{
1378 int64_t delta;
1379 int64_t rtdelta;
1380
1381 if (use_icount)
1382 delta = INT32_MAX;
1383 else
1384 delta = (qemu_next_deadline() + 999) / 1000;
1385
1386 if (active_timers[QEMU_TIMER_REALTIME]) {
1387 rtdelta = (active_timers[QEMU_TIMER_REALTIME]->expire_time -
1388 qemu_get_clock(rt_clock))*1000;
1389 if (rtdelta < delta)
1390 delta = rtdelta;
1391 }
1392
1393 if (delta < MIN_TIMER_REARM_US)
1394 delta = MIN_TIMER_REARM_US;
1395
1396 return delta;
efe75411 1397}
8632fb9a 1398#endif
efe75411 1399
fd872598
FB
1400#ifndef _WIN32
1401
7183b4b4
AL
1402/* Sets a specific flag */
1403static int fcntl_setfl(int fd, int flag)
1404{
1405 int flags;
1406
1407 flags = fcntl(fd, F_GETFL);
1408 if (flags == -1)
1409 return -errno;
1410
1411 if (fcntl(fd, F_SETFL, flags | flag) == -1)
1412 return -errno;
1413
1414 return 0;
1415}
1416
829309c7
FB
1417#if defined(__linux__)
1418
fd872598
FB
1419#define RTC_FREQ 1024
1420
de9a95f0 1421static void enable_sigio_timer(int fd)
c8994013
TS
1422{
1423 struct sigaction act;
1424
1425 /* timer signal */
1426 sigfillset(&act.sa_mask);
1427 act.sa_flags = 0;
c8994013
TS
1428 act.sa_handler = host_alarm_handler;
1429
1430 sigaction(SIGIO, &act, NULL);
7183b4b4 1431 fcntl_setfl(fd, O_ASYNC);
c8994013
TS
1432 fcntl(fd, F_SETOWN, getpid());
1433}
829309c7 1434
c40ec5a9
TS
1435static int hpet_start_timer(struct qemu_alarm_timer *t)
1436{
1437 struct hpet_info info;
1438 int r, fd;
1439
1440 fd = open("/dev/hpet", O_RDONLY);
1441 if (fd < 0)
1442 return -1;
1443
1444 /* Set frequency */
1445 r = ioctl(fd, HPET_IRQFREQ, RTC_FREQ);
1446 if (r < 0) {
1447 fprintf(stderr, "Could not configure '/dev/hpet' to have a 1024Hz timer. This is not a fatal\n"
1448 "error, but for better emulation accuracy type:\n"
1449 "'echo 1024 > /proc/sys/dev/hpet/max-user-freq' as root.\n");
1450 goto fail;
1451 }
1452
1453 /* Check capabilities */
1454 r = ioctl(fd, HPET_INFO, &info);
1455 if (r < 0)
1456 goto fail;
1457
1458 /* Enable periodic mode */
1459 r = ioctl(fd, HPET_EPI, 0);
1460 if (info.hi_flags && (r < 0))
1461 goto fail;
1462
1463 /* Enable interrupt */
1464 r = ioctl(fd, HPET_IE_ON, 0);
1465 if (r < 0)
1466 goto fail;
1467
1468 enable_sigio_timer(fd);
fcdc2129 1469 t->priv = (void *)(long)fd;
c40ec5a9
TS
1470
1471 return 0;
1472fail:
1473 close(fd);
1474 return -1;
1475}
1476
1477static void hpet_stop_timer(struct qemu_alarm_timer *t)
1478{
fcdc2129 1479 int fd = (long)t->priv;
c40ec5a9
TS
1480
1481 close(fd);
1482}
1483
c8994013 1484static int rtc_start_timer(struct qemu_alarm_timer *t)
fd872598 1485{
c8994013 1486 int rtc_fd;
b5a23ad4 1487 unsigned long current_rtc_freq = 0;
c8994013 1488
aeb30be6 1489 TFR(rtc_fd = open("/dev/rtc", O_RDONLY));
fd872598
FB
1490 if (rtc_fd < 0)
1491 return -1;
b5a23ad4
AZ
1492 ioctl(rtc_fd, RTC_IRQP_READ, &current_rtc_freq);
1493 if (current_rtc_freq != RTC_FREQ &&
1494 ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
fd872598
FB
1495 fprintf(stderr, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n"
1496 "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n"
1497 "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n");
1498 goto fail;
1499 }
1500 if (ioctl(rtc_fd, RTC_PIE_ON, 0) < 0) {
1501 fail:
1502 close(rtc_fd);
1503 return -1;
1504 }
c8994013
TS
1505
1506 enable_sigio_timer(rtc_fd);
1507
fcdc2129 1508 t->priv = (void *)(long)rtc_fd;
c8994013 1509
fd872598
FB
1510 return 0;
1511}
1512
c8994013 1513static void rtc_stop_timer(struct qemu_alarm_timer *t)
829309c7 1514{
fcdc2129 1515 int rtc_fd = (long)t->priv;
c8994013
TS
1516
1517 close(rtc_fd);
829309c7
FB
1518}
1519
efe75411
TS
1520static int dynticks_start_timer(struct qemu_alarm_timer *t)
1521{
1522 struct sigevent ev;
1523 timer_t host_timer;
1524 struct sigaction act;
1525
1526 sigfillset(&act.sa_mask);
1527 act.sa_flags = 0;
efe75411
TS
1528 act.sa_handler = host_alarm_handler;
1529
1530 sigaction(SIGALRM, &act, NULL);
1531
1532 ev.sigev_value.sival_int = 0;
1533 ev.sigev_notify = SIGEV_SIGNAL;
1534 ev.sigev_signo = SIGALRM;
1535
1536 if (timer_create(CLOCK_REALTIME, &ev, &host_timer)) {
1537 perror("timer_create");
1538
1539 /* disable dynticks */
1540 fprintf(stderr, "Dynamic Ticks disabled\n");
1541
1542 return -1;
1543 }
1544
0399bfe0 1545 t->priv = (void *)(long)host_timer;
efe75411
TS
1546
1547 return 0;
1548}
1549
1550static void dynticks_stop_timer(struct qemu_alarm_timer *t)
1551{
0399bfe0 1552 timer_t host_timer = (timer_t)(long)t->priv;
efe75411
TS
1553
1554 timer_delete(host_timer);
1555}
1556
1557static void dynticks_rearm_timer(struct qemu_alarm_timer *t)
1558{
0399bfe0 1559 timer_t host_timer = (timer_t)(long)t->priv;
efe75411
TS
1560 struct itimerspec timeout;
1561 int64_t nearest_delta_us = INT64_MAX;
1562 int64_t current_us;
1563
1564 if (!active_timers[QEMU_TIMER_REALTIME] &&
1565 !active_timers[QEMU_TIMER_VIRTUAL])
d5d08334 1566 return;
efe75411 1567
2e70f6ef 1568 nearest_delta_us = qemu_next_deadline_dyntick();
efe75411
TS
1569
1570 /* check whether a timer is already running */
1571 if (timer_gettime(host_timer, &timeout)) {
1572 perror("gettime");
1573 fprintf(stderr, "Internal timer error: aborting\n");
1574 exit(1);
1575 }
1576 current_us = timeout.it_value.tv_sec * 1000000 + timeout.it_value.tv_nsec/1000;
1577 if (current_us && current_us <= nearest_delta_us)
1578 return;
1579
1580 timeout.it_interval.tv_sec = 0;
1581 timeout.it_interval.tv_nsec = 0; /* 0 for one-shot timer */
1582 timeout.it_value.tv_sec = nearest_delta_us / 1000000;
1583 timeout.it_value.tv_nsec = (nearest_delta_us % 1000000) * 1000;
1584 if (timer_settime(host_timer, 0 /* RELATIVE */, &timeout, NULL)) {
1585 perror("settime");
1586 fprintf(stderr, "Internal timer error: aborting\n");
1587 exit(1);
1588 }
1589}
1590
70744b3a 1591#endif /* defined(__linux__) */
231c6586 1592
c8994013
TS
1593static int unix_start_timer(struct qemu_alarm_timer *t)
1594{
1595 struct sigaction act;
1596 struct itimerval itv;
1597 int err;
1598
1599 /* timer signal */
1600 sigfillset(&act.sa_mask);
1601 act.sa_flags = 0;
c8994013
TS
1602 act.sa_handler = host_alarm_handler;
1603
1604 sigaction(SIGALRM, &act, NULL);
1605
1606 itv.it_interval.tv_sec = 0;
1607 /* for i386 kernel 2.6 to get 1 ms */
1608 itv.it_interval.tv_usec = 999;
1609 itv.it_value.tv_sec = 0;
1610 itv.it_value.tv_usec = 10 * 1000;
1611
1612 err = setitimer(ITIMER_REAL, &itv, NULL);
1613 if (err)
1614 return -1;
1615
1616 return 0;
1617}
1618
1619static void unix_stop_timer(struct qemu_alarm_timer *t)
1620{
1621 struct itimerval itv;
1622
1623 memset(&itv, 0, sizeof(itv));
1624 setitimer(ITIMER_REAL, &itv, NULL);
1625}
1626
829309c7 1627#endif /* !defined(_WIN32) */
fd872598 1628
f49e58dc
AL
1629static void try_to_rearm_timer(void *opaque)
1630{
1631 struct qemu_alarm_timer *t = opaque;
1632#ifndef _WIN32
1633 ssize_t len;
1634
1635 /* Drain the notify pipe */
1636 do {
1637 char buffer[512];
1638 len = read(alarm_timer_rfd, buffer, sizeof(buffer));
1639 } while ((len == -1 && errno == EINTR) || len > 0);
1640#endif
1641
f49e58dc
AL
1642 if (t->flags & ALARM_FLAG_EXPIRED) {
1643 alarm_timer->flags &= ~ALARM_FLAG_EXPIRED;
1644 qemu_rearm_alarm_timer(alarm_timer);
1645 }
1646}
1647
c8994013
TS
1648#ifdef _WIN32
1649
1650static int win32_start_timer(struct qemu_alarm_timer *t)
1651{
1652 TIMECAPS tc;
1653 struct qemu_alarm_win32 *data = t->priv;
efe75411 1654 UINT flags;
c8994013
TS
1655
1656 data->host_alarm = CreateEvent(NULL, FALSE, FALSE, NULL);
1657 if (!data->host_alarm) {
1658 perror("Failed CreateEvent");
c396a7f0 1659 return -1;
c8994013
TS
1660 }
1661
1662 memset(&tc, 0, sizeof(tc));
1663 timeGetDevCaps(&tc, sizeof(tc));
1664
1665 if (data->period < tc.wPeriodMin)
1666 data->period = tc.wPeriodMin;
1667
1668 timeBeginPeriod(data->period);
1669
efe75411
TS
1670 flags = TIME_CALLBACK_FUNCTION;
1671 if (alarm_has_dynticks(t))
1672 flags |= TIME_ONESHOT;
1673 else
1674 flags |= TIME_PERIODIC;
1675
c8994013
TS
1676 data->timerId = timeSetEvent(1, // interval (ms)
1677 data->period, // resolution
1678 host_alarm_handler, // function
1679 (DWORD)t, // parameter
efe75411 1680 flags);
c8994013
TS
1681
1682 if (!data->timerId) {
1683 perror("Failed to initialize win32 alarm timer");
1684
1685 timeEndPeriod(data->period);
1686 CloseHandle(data->host_alarm);
1687 return -1;
1688 }
1689
f49e58dc 1690 qemu_add_wait_object(data->host_alarm, try_to_rearm_timer, t);
c8994013
TS
1691
1692 return 0;
1693}
1694
1695static void win32_stop_timer(struct qemu_alarm_timer *t)
1696{
1697 struct qemu_alarm_win32 *data = t->priv;
1698
1699 timeKillEvent(data->timerId);
1700 timeEndPeriod(data->period);
1701
1702 CloseHandle(data->host_alarm);
1703}
1704
efe75411
TS
1705static void win32_rearm_timer(struct qemu_alarm_timer *t)
1706{
1707 struct qemu_alarm_win32 *data = t->priv;
1708 uint64_t nearest_delta_us;
1709
1710 if (!active_timers[QEMU_TIMER_REALTIME] &&
1711 !active_timers[QEMU_TIMER_VIRTUAL])
d5d08334 1712 return;
efe75411 1713
2e70f6ef 1714 nearest_delta_us = qemu_next_deadline_dyntick();
efe75411
TS
1715 nearest_delta_us /= 1000;
1716
1717 timeKillEvent(data->timerId);
1718
1719 data->timerId = timeSetEvent(1,
1720 data->period,
1721 host_alarm_handler,
1722 (DWORD)t,
1723 TIME_ONESHOT | TIME_PERIODIC);
1724
1725 if (!data->timerId) {
1726 perror("Failed to re-arm win32 alarm timer");
1727
1728 timeEndPeriod(data->period);
1729 CloseHandle(data->host_alarm);
1730 exit(1);
1731 }
1732}
1733
c8994013
TS
1734#endif /* _WIN32 */
1735
7183b4b4 1736static int init_timer_alarm(void)
8a7ddc38 1737{
223f0d72 1738 struct qemu_alarm_timer *t = NULL;
c8994013 1739 int i, err = -1;
f49e58dc
AL
1740
1741#ifndef _WIN32
c96f1a48
AL
1742 int fds[2];
1743
7183b4b4
AL
1744 err = pipe(fds);
1745 if (err == -1)
1746 return -errno;
1747
1748 err = fcntl_setfl(fds[0], O_NONBLOCK);
1749 if (err < 0)
1750 goto fail;
1751
1752 err = fcntl_setfl(fds[1], O_NONBLOCK);
1753 if (err < 0)
1754 goto fail;
1755
c96f1a48
AL
1756 alarm_timer_rfd = fds[0];
1757 alarm_timer_wfd = fds[1];
f49e58dc 1758#endif
c8994013
TS
1759
1760 for (i = 0; alarm_timers[i].name; i++) {
1761 t = &alarm_timers[i];
1762
c8994013
TS
1763 err = t->start(t);
1764 if (!err)
1765 break;
67b915a5 1766 }
fd872598 1767
c8994013 1768 if (err) {
7183b4b4
AL
1769 err = -ENOENT;
1770 goto fail;
67b915a5 1771 }
c8994013 1772
f49e58dc 1773#ifndef _WIN32
6abfbd79
AL
1774 qemu_set_fd_handler2(alarm_timer_rfd, NULL,
1775 try_to_rearm_timer, NULL, t);
f49e58dc 1776#endif
6abfbd79 1777
c8994013 1778 alarm_timer = t;
7183b4b4 1779
6abfbd79 1780 return 0;
7183b4b4
AL
1781
1782fail:
f49e58dc 1783#ifndef _WIN32
7183b4b4
AL
1784 close(fds[0]);
1785 close(fds[1]);
f49e58dc 1786#endif
7183b4b4 1787 return err;
8a7ddc38
FB
1788}
1789
9596ebb7 1790static void quit_timers(void)
40c3bac3 1791{
c8994013
TS
1792 alarm_timer->stop(alarm_timer);
1793 alarm_timer = NULL;
40c3bac3
FB
1794}
1795
f6503059
AZ
1796/***********************************************************/
1797/* host time/date access */
1798void qemu_get_timedate(struct tm *tm, int offset)
1799{
1800 time_t ti;
1801 struct tm *ret;
1802
1803 time(&ti);
1804 ti += offset;
1805 if (rtc_date_offset == -1) {
1806 if (rtc_utc)
1807 ret = gmtime(&ti);
1808 else
1809 ret = localtime(&ti);
1810 } else {
1811 ti -= rtc_date_offset;
1812 ret = gmtime(&ti);
1813 }
1814
1815 memcpy(tm, ret, sizeof(struct tm));
1816}
1817
1818int qemu_timedate_diff(struct tm *tm)
1819{
1820 time_t seconds;
1821
1822 if (rtc_date_offset == -1)
1823 if (rtc_utc)
1824 seconds = mktimegm(tm);
1825 else
1826 seconds = mktime(tm);
1827 else
1828 seconds = mktimegm(tm) + rtc_date_offset;
1829
1830 return seconds - time(NULL);
1831}
1832
fd1dff4b 1833#ifdef _WIN32
fd1dff4b
FB
1834static void socket_cleanup(void)
1835{
1836 WSACleanup();
1837}
82c643ff 1838
fd1dff4b
FB
1839static int socket_init(void)
1840{
1841 WSADATA Data;
1842 int ret, err;
1843
1844 ret = WSAStartup(MAKEWORD(2,2), &Data);
1845 if (ret != 0) {
1846 err = WSAGetLastError();
1847 fprintf(stderr, "WSAStartup: %d\n", err);
1848 return -1;
1849 }
1850 atexit(socket_cleanup);
1851 return 0;
1852}
64b7b733
AJ
1853#endif
1854
63a01ef8 1855const char *get_opt_name(char *buf, int buf_size, const char *p)
609497ab
AZ
1856{
1857 char *q;
1858
1859 q = buf;
1860 while (*p != '\0' && *p != '=') {
1861 if (q && (q - buf) < buf_size - 1)
1862 *q++ = *p;
1863 p++;
1864 }
1865 if (q)
1866 *q = '\0';
1867
1868 return p;
1869}
1870
63a01ef8 1871const char *get_opt_value(char *buf, int buf_size, const char *p)
e4bcb14c
TS
1872{
1873 char *q;
e4bcb14c 1874
e4bcb14c
TS
1875 q = buf;
1876 while (*p != '\0') {
609497ab
AZ
1877 if (*p == ',') {
1878 if (*(p + 1) != ',')
e4bcb14c 1879 break;
e4bcb14c 1880 p++;
609497ab 1881 }
e4bcb14c
TS
1882 if (q && (q - buf) < buf_size - 1)
1883 *q++ = *p;
1884 p++;
1885 }
1886 if (q)
1887 *q = '\0';
1888
1889 return p;
1890}
1891
63a01ef8
AL
1892int get_param_value(char *buf, int buf_size,
1893 const char *tag, const char *str)
7c9d8e07
FB
1894{
1895 const char *p;
7c9d8e07
FB
1896 char option[128];
1897
1898 p = str;
1899 for(;;) {
609497ab 1900 p = get_opt_name(option, sizeof(option), p);
7c9d8e07
FB
1901 if (*p != '=')
1902 break;
1903 p++;
1904 if (!strcmp(tag, option)) {
609497ab 1905 (void)get_opt_value(buf, buf_size, p);
e4bcb14c 1906 return strlen(buf);
7c9d8e07 1907 } else {
609497ab 1908 p = get_opt_value(NULL, 0, p);
7c9d8e07
FB
1909 }
1910 if (*p != ',')
1911 break;
1912 p++;
1913 }
1914 return 0;
1915}
1916
63a01ef8
AL
1917int check_params(char *buf, int buf_size,
1918 const char * const *params, const char *str)
e4bcb14c
TS
1919{
1920 const char *p;
1921 int i;
1922
1923 p = str;
1924 for(;;) {
609497ab 1925 p = get_opt_name(buf, buf_size, p);
e4bcb14c
TS
1926 if (*p != '=')
1927 return -1;
1928 p++;
1929 for(i = 0; params[i] != NULL; i++)
1930 if (!strcmp(params[i], buf))
1931 break;
1932 if (params[i] == NULL)
1933 return -1;
609497ab 1934 p = get_opt_value(NULL, 0, p);
e4bcb14c
TS
1935 if (*p != ',')
1936 break;
1937 p++;
1938 }
1939 return 0;
1940}
1941
1ae26a18
AZ
1942/***********************************************************/
1943/* Bluetooth support */
1944static int nb_hcis;
1945static int cur_hci;
1946static struct HCIInfo *hci_table[MAX_NICS];
dc72ac14 1947
1ae26a18
AZ
1948static struct bt_vlan_s {
1949 struct bt_scatternet_s net;
1950 int id;
1951 struct bt_vlan_s *next;
1952} *first_bt_vlan;
1953
1954/* find or alloc a new bluetooth "VLAN" */
674bb261 1955static struct bt_scatternet_s *qemu_find_bt_vlan(int id)
1ae26a18
AZ
1956{
1957 struct bt_vlan_s **pvlan, *vlan;
1958 for (vlan = first_bt_vlan; vlan != NULL; vlan = vlan->next) {
1959 if (vlan->id == id)
1960 return &vlan->net;
1961 }
1962 vlan = qemu_mallocz(sizeof(struct bt_vlan_s));
1963 vlan->id = id;
1964 pvlan = &first_bt_vlan;
1965 while (*pvlan != NULL)
1966 pvlan = &(*pvlan)->next;
1967 *pvlan = vlan;
1968 return &vlan->net;
1969}
1970
1971static void null_hci_send(struct HCIInfo *hci, const uint8_t *data, int len)
1972{
1973}
1974
1975static int null_hci_addr_set(struct HCIInfo *hci, const uint8_t *bd_addr)
1976{
1977 return -ENOTSUP;
1978}
1979
1980static struct HCIInfo null_hci = {
1981 .cmd_send = null_hci_send,
1982 .sco_send = null_hci_send,
1983 .acl_send = null_hci_send,
1984 .bdaddr_set = null_hci_addr_set,
1985};
1986
1987struct HCIInfo *qemu_next_hci(void)
1988{
1989 if (cur_hci == nb_hcis)
1990 return &null_hci;
1991
1992 return hci_table[cur_hci++];
1993}
1994
dc72ac14
AZ
1995static struct HCIInfo *hci_init(const char *str)
1996{
1997 char *endp;
1998 struct bt_scatternet_s *vlan = 0;
1999
2000 if (!strcmp(str, "null"))
2001 /* null */
2002 return &null_hci;
2003 else if (!strncmp(str, "host", 4) && (str[4] == '\0' || str[4] == ':'))
2004 /* host[:hciN] */
2005 return bt_host_hci(str[4] ? str + 5 : "hci0");
2006 else if (!strncmp(str, "hci", 3)) {
2007 /* hci[,vlan=n] */
2008 if (str[3]) {
2009 if (!strncmp(str + 3, ",vlan=", 6)) {
2010 vlan = qemu_find_bt_vlan(strtol(str + 9, &endp, 0));
2011 if (*endp)
2012 vlan = 0;
2013 }
2014 } else
2015 vlan = qemu_find_bt_vlan(0);
2016 if (vlan)
2017 return bt_new_hci(vlan);
2018 }
2019
2020 fprintf(stderr, "qemu: Unknown bluetooth HCI `%s'.\n", str);
2021
2022 return 0;
2023}
2024
2025static int bt_hci_parse(const char *str)
2026{
2027 struct HCIInfo *hci;
2028 bdaddr_t bdaddr;
2029
2030 if (nb_hcis >= MAX_NICS) {
2031 fprintf(stderr, "qemu: Too many bluetooth HCIs (max %i).\n", MAX_NICS);
2032 return -1;
2033 }
2034
2035 hci = hci_init(str);
2036 if (!hci)
2037 return -1;
2038
2039 bdaddr.b[0] = 0x52;
2040 bdaddr.b[1] = 0x54;
2041 bdaddr.b[2] = 0x00;
2042 bdaddr.b[3] = 0x12;
2043 bdaddr.b[4] = 0x34;
2044 bdaddr.b[5] = 0x56 + nb_hcis;
2045 hci->bdaddr_set(hci, bdaddr.b);
2046
2047 hci_table[nb_hcis++] = hci;
2048
2049 return 0;
2050}
2051
2052static void bt_vhci_add(int vlan_id)
2053{
2054 struct bt_scatternet_s *vlan = qemu_find_bt_vlan(vlan_id);
2055
2056 if (!vlan->slave)
2057 fprintf(stderr, "qemu: warning: adding a VHCI to "
2058 "an empty scatternet %i\n", vlan_id);
2059
2060 bt_vhci_init(bt_new_hci(vlan));
2061}
2062
2063static struct bt_device_s *bt_device_add(const char *opt)
2064{
2065 struct bt_scatternet_s *vlan;
2066 int vlan_id = 0;
2067 char *endp = strstr(opt, ",vlan=");
2068 int len = (endp ? endp - opt : strlen(opt)) + 1;
2069 char devname[10];
2070
2071 pstrcpy(devname, MIN(sizeof(devname), len), opt);
2072
2073 if (endp) {
2074 vlan_id = strtol(endp + 6, &endp, 0);
2075 if (*endp) {
2076 fprintf(stderr, "qemu: unrecognised bluetooth vlan Id\n");
2077 return 0;
2078 }
2079 }
2080
2081 vlan = qemu_find_bt_vlan(vlan_id);
2082
2083 if (!vlan->slave)
2084 fprintf(stderr, "qemu: warning: adding a slave device to "
2085 "an empty scatternet %i\n", vlan_id);
2086
2087 if (!strcmp(devname, "keyboard"))
2088 return bt_keyboard_init(vlan);
2089
2090 fprintf(stderr, "qemu: unsupported bluetooth device `%s'\n", devname);
2091 return 0;
2092}
2093
2094static int bt_parse(const char *opt)
2095{
2096 const char *endp, *p;
2097 int vlan;
2098
2099 if (strstart(opt, "hci", &endp)) {
2100 if (!*endp || *endp == ',') {
2101 if (*endp)
2102 if (!strstart(endp, ",vlan=", 0))
2103 opt = endp + 1;
2104
2105 return bt_hci_parse(opt);
2106 }
2107 } else if (strstart(opt, "vhci", &endp)) {
2108 if (!*endp || *endp == ',') {
2109 if (*endp) {
2110 if (strstart(endp, ",vlan=", &p)) {
2111 vlan = strtol(p, (char **) &endp, 0);
2112 if (*endp) {
2113 fprintf(stderr, "qemu: bad scatternet '%s'\n", p);
2114 return 1;
2115 }
2116 } else {
2117 fprintf(stderr, "qemu: bad parameter '%s'\n", endp + 1);
2118 return 1;
2119 }
2120 } else
2121 vlan = 0;
2122
2123 bt_vhci_add(vlan);
2124 return 0;
2125 }
2126 } else if (strstart(opt, "device:", &endp))
2127 return !bt_device_add(endp);
2128
2129 fprintf(stderr, "qemu: bad bluetooth parameter '%s'\n", opt);
2130 return 1;
2131}
2132
1ae26a18
AZ
2133/***********************************************************/
2134/* QEMU Block devices */
2135
609497ab 2136#define HD_ALIAS "index=%d,media=disk"
e4bcb14c
TS
2137#ifdef TARGET_PPC
2138#define CDROM_ALIAS "index=1,media=cdrom"
2139#else
2140#define CDROM_ALIAS "index=2,media=cdrom"
2141#endif
2142#define FD_ALIAS "index=%d,if=floppy"
609497ab
AZ
2143#define PFLASH_ALIAS "if=pflash"
2144#define MTD_ALIAS "if=mtd"
9d413d1d 2145#define SD_ALIAS "index=0,if=sd"
e4bcb14c 2146
609497ab 2147static int drive_add(const char *file, const char *fmt, ...)
e4bcb14c
TS
2148{
2149 va_list ap;
2150
2151 if (nb_drives_opt >= MAX_DRIVES) {
2152 fprintf(stderr, "qemu: too many drives\n");
2153 exit(1);
2154 }
2155
609497ab 2156 drives_opt[nb_drives_opt].file = file;
e4bcb14c 2157 va_start(ap, fmt);
609497ab
AZ
2158 vsnprintf(drives_opt[nb_drives_opt].opt,
2159 sizeof(drives_opt[0].opt), fmt, ap);
e4bcb14c
TS
2160 va_end(ap);
2161
2162 return nb_drives_opt++;
2163}
2164
f60d39bc 2165int drive_get_index(BlockInterfaceType type, int bus, int unit)
e4bcb14c
TS
2166{
2167 int index;
2168
2169 /* seek interface, bus and unit */
2170
2171 for (index = 0; index < nb_drives; index++)
f60d39bc 2172 if (drives_table[index].type == type &&
e4bcb14c
TS
2173 drives_table[index].bus == bus &&
2174 drives_table[index].unit == unit)
2175 return index;
2176
2177 return -1;
2178}
2179
f60d39bc 2180int drive_get_max_bus(BlockInterfaceType type)
e4bcb14c
TS
2181{
2182 int max_bus;
2183 int index;
2184
2185 max_bus = -1;
2186 for (index = 0; index < nb_drives; index++) {
f60d39bc 2187 if(drives_table[index].type == type &&
e4bcb14c
TS
2188 drives_table[index].bus > max_bus)
2189 max_bus = drives_table[index].bus;
2190 }
2191 return max_bus;
2192}
2193
fa879c64
AL
2194const char *drive_get_serial(BlockDriverState *bdrv)
2195{
2196 int index;
2197
2198 for (index = 0; index < nb_drives; index++)
2199 if (drives_table[index].bdrv == bdrv)
2200 return drives_table[index].serial;
2201
2202 return "\0";
2203}
2204
a1620fac
AJ
2205static void bdrv_format_print(void *opaque, const char *name)
2206{
2207 fprintf(stderr, " %s", name);
2208}
2209
609497ab
AZ
2210static int drive_init(struct drive_opt *arg, int snapshot,
2211 QEMUMachine *machine)
e4bcb14c
TS
2212{
2213 char buf[128];
2214 char file[1024];
c8522bdf 2215 char devname[128];
fa879c64 2216 char serial[21];
c8522bdf 2217 const char *mediastr = "";
f60d39bc 2218 BlockInterfaceType type;
e4bcb14c
TS
2219 enum { MEDIA_DISK, MEDIA_CDROM } media;
2220 int bus_id, unit_id;
2221 int cyls, heads, secs, translation;
2222 BlockDriverState *bdrv;
1e72d3b7 2223 BlockDriver *drv = NULL;
e4bcb14c
TS
2224 int max_devs;
2225 int index;
33f00271
AZ
2226 int cache;
2227 int bdrv_flags;
609497ab 2228 char *str = arg->opt;
7ccfb2eb
BS
2229 static const char * const params[] = { "bus", "unit", "if", "index",
2230 "cyls", "heads", "secs", "trans",
2231 "media", "snapshot", "file",
fa879c64 2232 "cache", "format", "serial", NULL };
e4bcb14c
TS
2233
2234 if (check_params(buf, sizeof(buf), params, str) < 0) {
ff993638 2235 fprintf(stderr, "qemu: unknown parameter '%s' in '%s'\n",
e4bcb14c
TS
2236 buf, str);
2237 return -1;
2238 }
2239
2240 file[0] = 0;
2241 cyls = heads = secs = 0;
2242 bus_id = 0;
2243 unit_id = -1;
2244 translation = BIOS_ATA_TRANSLATION_AUTO;
2245 index = -1;
4dc822d7 2246 cache = 3;
e4bcb14c 2247
c9b1ae2c 2248 if (machine->use_scsi) {
f60d39bc 2249 type = IF_SCSI;
e4bcb14c 2250 max_devs = MAX_SCSI_DEVS;
363a37d5 2251 pstrcpy(devname, sizeof(devname), "scsi");
e4bcb14c 2252 } else {
f60d39bc 2253 type = IF_IDE;
e4bcb14c 2254 max_devs = MAX_IDE_DEVS;
363a37d5 2255 pstrcpy(devname, sizeof(devname), "ide");
e4bcb14c
TS
2256 }
2257 media = MEDIA_DISK;
2258
2259 /* extract parameters */
2260
2261 if (get_param_value(buf, sizeof(buf), "bus", str)) {
2262 bus_id = strtol(buf, NULL, 0);
2263 if (bus_id < 0) {
2264 fprintf(stderr, "qemu: '%s' invalid bus id\n", str);
2265 return -1;
2266 }
2267 }
2268
2269 if (get_param_value(buf, sizeof(buf), "unit", str)) {
2270 unit_id = strtol(buf, NULL, 0);
2271 if (unit_id < 0) {
2272 fprintf(stderr, "qemu: '%s' invalid unit id\n", str);
2273 return -1;
2274 }
2275 }
2276
2277 if (get_param_value(buf, sizeof(buf), "if", str)) {
ae45d369 2278 pstrcpy(devname, sizeof(devname), buf);
e4bcb14c 2279 if (!strcmp(buf, "ide")) {
f60d39bc 2280 type = IF_IDE;
e4bcb14c
TS
2281 max_devs = MAX_IDE_DEVS;
2282 } else if (!strcmp(buf, "scsi")) {
f60d39bc 2283 type = IF_SCSI;
e4bcb14c
TS
2284 max_devs = MAX_SCSI_DEVS;
2285 } else if (!strcmp(buf, "floppy")) {
f60d39bc 2286 type = IF_FLOPPY;
e4bcb14c
TS
2287 max_devs = 0;
2288 } else if (!strcmp(buf, "pflash")) {
f60d39bc 2289 type = IF_PFLASH;
e4bcb14c
TS
2290 max_devs = 0;
2291 } else if (!strcmp(buf, "mtd")) {
f60d39bc 2292 type = IF_MTD;
e4bcb14c
TS
2293 max_devs = 0;
2294 } else if (!strcmp(buf, "sd")) {
f60d39bc 2295 type = IF_SD;
e4bcb14c 2296 max_devs = 0;
6e02c38d
AL
2297 } else if (!strcmp(buf, "virtio")) {
2298 type = IF_VIRTIO;
2299 max_devs = 0;
2300 } else {
e4bcb14c
TS
2301 fprintf(stderr, "qemu: '%s' unsupported bus type '%s'\n", str, buf);
2302 return -1;
2303 }
2304 }
2305
2306 if (get_param_value(buf, sizeof(buf), "index", str)) {
2307 index = strtol(buf, NULL, 0);
2308 if (index < 0) {
2309 fprintf(stderr, "qemu: '%s' invalid index\n", str);
2310 return -1;
2311 }
2312 }
2313
2314 if (get_param_value(buf, sizeof(buf), "cyls", str)) {
2315 cyls = strtol(buf, NULL, 0);
2316 }
2317
2318 if (get_param_value(buf, sizeof(buf), "heads", str)) {
2319 heads = strtol(buf, NULL, 0);
2320 }
2321
2322 if (get_param_value(buf, sizeof(buf), "secs", str)) {
2323 secs = strtol(buf, NULL, 0);
2324 }
2325
2326 if (cyls || heads || secs) {
2327 if (cyls < 1 || cyls > 16383) {
2328 fprintf(stderr, "qemu: '%s' invalid physical cyls number\n", str);
2329 return -1;
2330 }
2331 if (heads < 1 || heads > 16) {
2332 fprintf(stderr, "qemu: '%s' invalid physical heads number\n", str);
2333 return -1;
2334 }
2335 if (secs < 1 || secs > 63) {
2336 fprintf(stderr, "qemu: '%s' invalid physical secs number\n", str);
2337 return -1;
2338 }
2339 }
2340
2341 if (get_param_value(buf, sizeof(buf), "trans", str)) {
2342 if (!cyls) {
2343 fprintf(stderr,
2344 "qemu: '%s' trans must be used with cyls,heads and secs\n",
2345 str);
2346 return -1;
2347 }
2348 if (!strcmp(buf, "none"))
2349 translation = BIOS_ATA_TRANSLATION_NONE;
2350 else if (!strcmp(buf, "lba"))
2351 translation = BIOS_ATA_TRANSLATION_LBA;
2352 else if (!strcmp(buf, "auto"))
2353 translation = BIOS_ATA_TRANSLATION_AUTO;
2354 else {
2355 fprintf(stderr, "qemu: '%s' invalid translation type\n", str);
2356 return -1;
2357 }
2358 }
2359
2360 if (get_param_value(buf, sizeof(buf), "media", str)) {
2361 if (!strcmp(buf, "disk")) {
2362 media = MEDIA_DISK;
2363 } else if (!strcmp(buf, "cdrom")) {
2364 if (cyls || secs || heads) {
2365 fprintf(stderr,
2366 "qemu: '%s' invalid physical CHS format\n", str);
2367 return -1;
2368 }
2369 media = MEDIA_CDROM;
2370 } else {
2371 fprintf(stderr, "qemu: '%s' invalid media\n", str);
2372 return -1;
2373 }
2374 }
2375
2376 if (get_param_value(buf, sizeof(buf), "snapshot", str)) {
2377 if (!strcmp(buf, "on"))
2378 snapshot = 1;
2379 else if (!strcmp(buf, "off"))
2380 snapshot = 0;
2381 else {
2382 fprintf(stderr, "qemu: '%s' invalid snapshot option\n", str);
2383 return -1;
2384 }
2385 }
2386
33f00271 2387 if (get_param_value(buf, sizeof(buf), "cache", str)) {
9f7965c7 2388 if (!strcmp(buf, "off") || !strcmp(buf, "none"))
33f00271 2389 cache = 0;
9f7965c7 2390 else if (!strcmp(buf, "writethrough"))
33f00271 2391 cache = 1;
9f7965c7
AL
2392 else if (!strcmp(buf, "writeback"))
2393 cache = 2;
33f00271
AZ
2394 else {
2395 fprintf(stderr, "qemu: invalid cache option\n");
2396 return -1;
2397 }
2398 }
2399
1e72d3b7 2400 if (get_param_value(buf, sizeof(buf), "format", str)) {
a1620fac
AJ
2401 if (strcmp(buf, "?") == 0) {
2402 fprintf(stderr, "qemu: Supported formats:");
2403 bdrv_iterate_format(bdrv_format_print, NULL);
2404 fprintf(stderr, "\n");
2405 return -1;
2406 }
1e72d3b7
AJ
2407 drv = bdrv_find_format(buf);
2408 if (!drv) {
2409 fprintf(stderr, "qemu: '%s' invalid format\n", buf);
2410 return -1;
2411 }
2412 }
2413
609497ab
AZ
2414 if (arg->file == NULL)
2415 get_param_value(file, sizeof(file), "file", str);
2416 else
2417 pstrcpy(file, sizeof(file), arg->file);
e4bcb14c 2418
fa879c64
AL
2419 if (!get_param_value(serial, sizeof(serial), "serial", str))
2420 memset(serial, 0, sizeof(serial));
2421
e4bcb14c
TS
2422 /* compute bus and unit according index */
2423
2424 if (index != -1) {
2425 if (bus_id != 0 || unit_id != -1) {
2426 fprintf(stderr,
2427 "qemu: '%s' index cannot be used with bus and unit\n", str);
2428 return -1;
2429 }
2430 if (max_devs == 0)
2431 {
2432 unit_id = index;
2433 bus_id = 0;
2434 } else {
2435 unit_id = index % max_devs;
2436 bus_id = index / max_devs;
2437 }
2438 }
2439
2440 /* if user doesn't specify a unit_id,
2441 * try to find the first free
2442 */
2443
2444 if (unit_id == -1) {
2445 unit_id = 0;
f60d39bc 2446 while (drive_get_index(type, bus_id, unit_id) != -1) {
e4bcb14c
TS
2447 unit_id++;
2448 if (max_devs && unit_id >= max_devs) {
2449 unit_id -= max_devs;
2450 bus_id++;
2451 }
2452 }
2453 }
2454
2455 /* check unit id */
2456
2457 if (max_devs && unit_id >= max_devs) {
2458 fprintf(stderr, "qemu: '%s' unit %d too big (max is %d)\n",
2459 str, unit_id, max_devs - 1);
2460 return -1;
2461 }
2462
2463 /*
2464 * ignore multiple definitions
2465 */
2466
f60d39bc 2467 if (drive_get_index(type, bus_id, unit_id) != -1)
e4bcb14c
TS
2468 return 0;
2469
2470 /* init */
2471
f60d39bc 2472 if (type == IF_IDE || type == IF_SCSI)
c8522bdf 2473 mediastr = (media == MEDIA_CDROM) ? "-cd" : "-hd";
e6198a70
AZ
2474 if (max_devs)
2475 snprintf(buf, sizeof(buf), "%s%i%s%i",
2476 devname, bus_id, mediastr, unit_id);
2477 else
2478 snprintf(buf, sizeof(buf), "%s%s%i",
2479 devname, mediastr, unit_id);
e4bcb14c
TS
2480 bdrv = bdrv_new(buf);
2481 drives_table[nb_drives].bdrv = bdrv;
f60d39bc 2482 drives_table[nb_drives].type = type;
e4bcb14c
TS
2483 drives_table[nb_drives].bus = bus_id;
2484 drives_table[nb_drives].unit = unit_id;
fa879c64 2485 strncpy(drives_table[nb_drives].serial, serial, sizeof(serial));
e4bcb14c
TS
2486 nb_drives++;
2487
f60d39bc 2488 switch(type) {
e4bcb14c
TS
2489 case IF_IDE:
2490 case IF_SCSI:
2491 switch(media) {
2492 case MEDIA_DISK:
2493 if (cyls != 0) {
2494 bdrv_set_geometry_hint(bdrv, cyls, heads, secs);
2495 bdrv_set_translation_hint(bdrv, translation);
2496 }
2497 break;
2498 case MEDIA_CDROM:
2499 bdrv_set_type_hint(bdrv, BDRV_TYPE_CDROM);
2500 break;
2501 }
2502 break;
2503 case IF_SD:
2504 /* FIXME: This isn't really a floppy, but it's a reasonable
2505 approximation. */
2506 case IF_FLOPPY:
2507 bdrv_set_type_hint(bdrv, BDRV_TYPE_FLOPPY);
2508 break;
2509 case IF_PFLASH:
2510 case IF_MTD:
6e02c38d 2511 case IF_VIRTIO:
e4bcb14c
TS
2512 break;
2513 }
2514 if (!file[0])
2515 return 0;
33f00271 2516 bdrv_flags = 0;
9f7965c7 2517 if (snapshot) {
33f00271 2518 bdrv_flags |= BDRV_O_SNAPSHOT;
9f7965c7
AL
2519 cache = 2; /* always use write-back with snapshot */
2520 }
2521 if (cache == 0) /* no caching */
2522 bdrv_flags |= BDRV_O_NOCACHE;
2523 else if (cache == 2) /* write-back */
2524 bdrv_flags |= BDRV_O_CACHE_WB;
4dc822d7
AL
2525 else if (cache == 3) /* not specified */
2526 bdrv_flags |= BDRV_O_CACHE_DEF;
83ab7950 2527 if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0 || qemu_key_check(bdrv, file)) {
e4bcb14c
TS
2528 fprintf(stderr, "qemu: could not open disk image %s\n",
2529 file);
2530 return -1;
2531 }
2532 return 0;
2533}
2534
a594cfbf
FB
2535/***********************************************************/
2536/* USB devices */
2537
0d92ed30
PB
2538static USBPort *used_usb_ports;
2539static USBPort *free_usb_ports;
2540
2541/* ??? Maybe change this to register a hub to keep track of the topology. */
2542void qemu_register_usb_port(USBPort *port, void *opaque, int index,
2543 usb_attachfn attach)
2544{
2545 port->opaque = opaque;
2546 port->index = index;
2547 port->attach = attach;
2548 port->next = free_usb_ports;
2549 free_usb_ports = port;
2550}
2551
4b096fc9
AL
2552int usb_device_add_dev(USBDevice *dev)
2553{
2554 USBPort *port;
2555
2556 /* Find a USB port to add the device to. */
2557 port = free_usb_ports;
2558 if (!port->next) {
2559 USBDevice *hub;
2560
2561 /* Create a new hub and chain it on. */
2562 free_usb_ports = NULL;
2563 port->next = used_usb_ports;
2564 used_usb_ports = port;
2565
2566 hub = usb_hub_init(VM_USB_HUB_SIZE);
2567 usb_attach(port, hub);
2568 port = free_usb_ports;
2569 }
2570
2571 free_usb_ports = port->next;
2572 port->next = used_usb_ports;
2573 used_usb_ports = port;
2574 usb_attach(port, dev);
2575 return 0;
2576}
2577
a594cfbf
FB
2578static int usb_device_add(const char *devname)
2579{
2580 const char *p;
2581 USBDevice *dev;
a594cfbf 2582
0d92ed30 2583 if (!free_usb_ports)
a594cfbf
FB
2584 return -1;
2585
2586 if (strstart(devname, "host:", &p)) {
2587 dev = usb_host_device_open(p);
a594cfbf
FB
2588 } else if (!strcmp(devname, "mouse")) {
2589 dev = usb_mouse_init();
09b26c5e 2590 } else if (!strcmp(devname, "tablet")) {
47b2d338
AZ
2591 dev = usb_tablet_init();
2592 } else if (!strcmp(devname, "keyboard")) {
2593 dev = usb_keyboard_init();
2e5d83bb
PB
2594 } else if (strstart(devname, "disk:", &p)) {
2595 dev = usb_msd_init(p);
f6d2a316
AZ
2596 } else if (!strcmp(devname, "wacom-tablet")) {
2597 dev = usb_wacom_init();
a7954218
AZ
2598 } else if (strstart(devname, "serial:", &p)) {
2599 dev = usb_serial_init(p);
2e4d9fb1
AJ
2600#ifdef CONFIG_BRLAPI
2601 } else if (!strcmp(devname, "braille")) {
2602 dev = usb_baum_init();
2603#endif
6c9f886c 2604 } else if (strstart(devname, "net:", &p)) {
9ad97e65 2605 int nic = nb_nics;
6c9f886c 2606
9ad97e65 2607 if (net_client_init("nic", p) < 0)
6c9f886c 2608 return -1;
9ad97e65
AZ
2609 nd_table[nic].model = "usb";
2610 dev = usb_net_init(&nd_table[nic]);
dc72ac14
AZ
2611 } else if (!strcmp(devname, "bt") || strstart(devname, "bt:", &p)) {
2612 dev = usb_bt_init(devname[2] ? hci_init(p) :
2613 bt_new_hci(qemu_find_bt_vlan(0)));
a594cfbf
FB
2614 } else {
2615 return -1;
2616 }
0d92ed30
PB
2617 if (!dev)
2618 return -1;
2619
4b096fc9 2620 return usb_device_add_dev(dev);
a594cfbf
FB
2621}
2622
1f3870ab 2623int usb_device_del_addr(int bus_num, int addr)
a594cfbf 2624{
0d92ed30
PB
2625 USBPort *port;
2626 USBPort **lastp;
059809e4 2627 USBDevice *dev;
a594cfbf 2628
0d92ed30 2629 if (!used_usb_ports)
a594cfbf
FB
2630 return -1;
2631
a594cfbf
FB
2632 if (bus_num != 0)
2633 return -1;
0d92ed30
PB
2634
2635 lastp = &used_usb_ports;
2636 port = used_usb_ports;
2637 while (port && port->dev->addr != addr) {
2638 lastp = &port->next;
2639 port = port->next;
a594cfbf 2640 }
0d92ed30
PB
2641
2642 if (!port)
a594cfbf 2643 return -1;
0d92ed30 2644
059809e4 2645 dev = port->dev;
0d92ed30
PB
2646 *lastp = port->next;
2647 usb_attach(port, NULL);
059809e4 2648 dev->handle_destroy(dev);
0d92ed30
PB
2649 port->next = free_usb_ports;
2650 free_usb_ports = port;
a594cfbf
FB
2651 return 0;
2652}
2653
1f3870ab
AL
2654static int usb_device_del(const char *devname)
2655{
2656 int bus_num, addr;
2657 const char *p;
2658
5d0c5750
AL
2659 if (strstart(devname, "host:", &p))
2660 return usb_host_device_close(p);
2661
1f3870ab
AL
2662 if (!used_usb_ports)
2663 return -1;
2664
2665 p = strchr(devname, '.');
2666 if (!p)
2667 return -1;
2668 bus_num = strtoul(devname, NULL, 0);
2669 addr = strtoul(p + 1, NULL, 0);
2670
2671 return usb_device_del_addr(bus_num, addr);
2672}
2673
a594cfbf
FB
2674void do_usb_add(const char *devname)
2675{
4b096fc9 2676 usb_device_add(devname);
a594cfbf
FB
2677}
2678
2679void do_usb_del(const char *devname)
2680{
4b096fc9 2681 usb_device_del(devname);
a594cfbf
FB
2682}
2683
2684void usb_info(void)
2685{
2686 USBDevice *dev;
0d92ed30 2687 USBPort *port;
a594cfbf
FB
2688 const char *speed_str;
2689
0d92ed30 2690 if (!usb_enabled) {
a594cfbf
FB
2691 term_printf("USB support not enabled\n");
2692 return;
2693 }
2694
0d92ed30
PB
2695 for (port = used_usb_ports; port; port = port->next) {
2696 dev = port->dev;
2697 if (!dev)
2698 continue;
2699 switch(dev->speed) {
5fafdf24
TS
2700 case USB_SPEED_LOW:
2701 speed_str = "1.5";
0d92ed30 2702 break;
5fafdf24
TS
2703 case USB_SPEED_FULL:
2704 speed_str = "12";
0d92ed30 2705 break;
5fafdf24
TS
2706 case USB_SPEED_HIGH:
2707 speed_str = "480";
0d92ed30
PB
2708 break;
2709 default:
5fafdf24 2710 speed_str = "?";
0d92ed30 2711 break;
a594cfbf 2712 }
5fafdf24 2713 term_printf(" Device %d.%d, Speed %s Mb/s, Product %s\n",
1f6e24e7 2714 0, dev->addr, speed_str, dev->devname);
a594cfbf
FB
2715 }
2716}
2717
201a51fc
AZ
2718/***********************************************************/
2719/* PCMCIA/Cardbus */
2720
2721static struct pcmcia_socket_entry_s {
2722 struct pcmcia_socket_s *socket;
2723 struct pcmcia_socket_entry_s *next;
2724} *pcmcia_sockets = 0;
2725
2726void pcmcia_socket_register(struct pcmcia_socket_s *socket)
2727{
2728 struct pcmcia_socket_entry_s *entry;
2729
2730 entry = qemu_malloc(sizeof(struct pcmcia_socket_entry_s));
2731 entry->socket = socket;
2732 entry->next = pcmcia_sockets;
2733 pcmcia_sockets = entry;
2734}
2735
2736void pcmcia_socket_unregister(struct pcmcia_socket_s *socket)
2737{
2738 struct pcmcia_socket_entry_s *entry, **ptr;
2739
2740 ptr = &pcmcia_sockets;
2741 for (entry = *ptr; entry; ptr = &entry->next, entry = *ptr)
2742 if (entry->socket == socket) {
2743 *ptr = entry->next;
2744 qemu_free(entry);
2745 }
2746}
2747
2748void pcmcia_info(void)
2749{
2750 struct pcmcia_socket_entry_s *iter;
2751 if (!pcmcia_sockets)
2752 term_printf("No PCMCIA sockets\n");
2753
2754 for (iter = pcmcia_sockets; iter; iter = iter->next)
2755 term_printf("%s: %s\n", iter->socket->slot_string,
2756 iter->socket->attached ? iter->socket->card_string :
2757 "Empty");
2758}
2759
2ff89790
TS
2760/***********************************************************/
2761/* dumb display */
2762
2763static void dumb_update(DisplayState *ds, int x, int y, int w, int h)
2764{
2765}
2766
2767static void dumb_resize(DisplayState *ds, int w, int h)
2768{
2769}
2770
2ff89790
TS
2771static void dumb_display_init(DisplayState *ds)
2772{
2773 ds->data = NULL;
2774 ds->linesize = 0;
2775 ds->depth = 0;
2776 ds->dpy_update = dumb_update;
2777 ds->dpy_resize = dumb_resize;
2ad1a437
AL
2778 ds->dpy_refresh = NULL;
2779 ds->gui_timer_interval = 0;
bcfad70f 2780 ds->idle = 1;
2ff89790
TS
2781}
2782
8a7ddc38
FB
2783/***********************************************************/
2784/* I/O handling */
0824d6fc 2785
c4b1fcc0
FB
2786#define MAX_IO_HANDLERS 64
2787
2788typedef struct IOHandlerRecord {
2789 int fd;
7c9d8e07
FB
2790 IOCanRWHandler *fd_read_poll;
2791 IOHandler *fd_read;
2792 IOHandler *fd_write;
cafffd40 2793 int deleted;
c4b1fcc0
FB
2794 void *opaque;
2795 /* temporary data */
2796 struct pollfd *ufd;
8a7ddc38 2797 struct IOHandlerRecord *next;
c4b1fcc0
FB
2798} IOHandlerRecord;
2799
8a7ddc38 2800static IOHandlerRecord *first_io_handler;
c4b1fcc0 2801
7c9d8e07
FB
2802/* XXX: fd_read_poll should be suppressed, but an API change is
2803 necessary in the character devices to suppress fd_can_read(). */
5fafdf24
TS
2804int qemu_set_fd_handler2(int fd,
2805 IOCanRWHandler *fd_read_poll,
2806 IOHandler *fd_read,
2807 IOHandler *fd_write,
7c9d8e07 2808 void *opaque)
c4b1fcc0 2809{
7c9d8e07 2810 IOHandlerRecord **pioh, *ioh;
c4b1fcc0 2811
7c9d8e07
FB
2812 if (!fd_read && !fd_write) {
2813 pioh = &first_io_handler;
2814 for(;;) {
2815 ioh = *pioh;
2816 if (ioh == NULL)
2817 break;
2818 if (ioh->fd == fd) {
cafffd40 2819 ioh->deleted = 1;
7c9d8e07
FB
2820 break;
2821 }
2822 pioh = &ioh->next;
2823 }
2824 } else {
2825 for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
2826 if (ioh->fd == fd)
2827 goto found;
2828 }
2829 ioh = qemu_mallocz(sizeof(IOHandlerRecord));
2830 if (!ioh)
2831 return -1;
2832 ioh->next = first_io_handler;
2833 first_io_handler = ioh;
2834 found:
2835 ioh->fd = fd;
2836 ioh->fd_read_poll = fd_read_poll;
2837 ioh->fd_read = fd_read;
2838 ioh->fd_write = fd_write;
2839 ioh->opaque = opaque;
cafffd40 2840 ioh->deleted = 0;
7c9d8e07 2841 }
c4b1fcc0
FB
2842 return 0;
2843}
2844
5fafdf24
TS
2845int qemu_set_fd_handler(int fd,
2846 IOHandler *fd_read,
2847 IOHandler *fd_write,
7c9d8e07 2848 void *opaque)
8a7ddc38 2849{
7c9d8e07 2850 return qemu_set_fd_handler2(fd, NULL, fd_read, fd_write, opaque);
8a7ddc38
FB
2851}
2852
56f3a5d0 2853#ifdef _WIN32
f331110f
FB
2854/***********************************************************/
2855/* Polling handling */
2856
2857typedef struct PollingEntry {
2858 PollingFunc *func;
2859 void *opaque;
2860 struct PollingEntry *next;
2861} PollingEntry;
2862
2863static PollingEntry *first_polling_entry;
2864
2865int qemu_add_polling_cb(PollingFunc *func, void *opaque)
2866{
2867 PollingEntry **ppe, *pe;
2868 pe = qemu_mallocz(sizeof(PollingEntry));
2869 if (!pe)
2870 return -1;
2871 pe->func = func;
2872 pe->opaque = opaque;
2873 for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next);
2874 *ppe = pe;
2875 return 0;
2876}
2877
2878void qemu_del_polling_cb(PollingFunc *func, void *opaque)
2879{
2880 PollingEntry **ppe, *pe;
2881 for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next) {
2882 pe = *ppe;
2883 if (pe->func == func && pe->opaque == opaque) {
2884 *ppe = pe->next;
2885 qemu_free(pe);
2886 break;
2887 }
2888 }
2889}
2890
a18e524a
FB
2891/***********************************************************/
2892/* Wait objects support */
2893typedef struct WaitObjects {
2894 int num;
2895 HANDLE events[MAXIMUM_WAIT_OBJECTS + 1];
2896 WaitObjectFunc *func[MAXIMUM_WAIT_OBJECTS + 1];
2897 void *opaque[MAXIMUM_WAIT_OBJECTS + 1];
2898} WaitObjects;
2899
2900static WaitObjects wait_objects = {0};
3b46e624 2901
a18e524a
FB
2902int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
2903{
2904 WaitObjects *w = &wait_objects;
2905
2906 if (w->num >= MAXIMUM_WAIT_OBJECTS)
2907 return -1;
2908 w->events[w->num] = handle;
2909 w->func[w->num] = func;
2910 w->opaque[w->num] = opaque;
2911 w->num++;
2912 return 0;
2913}
2914
2915void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
2916{
2917 int i, found;
2918 WaitObjects *w = &wait_objects;
2919
2920 found = 0;
2921 for (i = 0; i < w->num; i++) {
2922 if (w->events[i] == handle)
2923 found = 1;
2924 if (found) {
2925 w->events[i] = w->events[i + 1];
2926 w->func[i] = w->func[i + 1];
2927 w->opaque[i] = w->opaque[i + 1];
3b46e624 2928 }
a18e524a
FB
2929 }
2930 if (found)
2931 w->num--;
2932}
2933#endif
2934
8a7ddc38
FB
2935/***********************************************************/
2936/* ram save/restore */
2937
8a7ddc38
FB
2938static int ram_get_page(QEMUFile *f, uint8_t *buf, int len)
2939{
2940 int v;
2941
2942 v = qemu_get_byte(f);
2943 switch(v) {
2944 case 0:
2945 if (qemu_get_buffer(f, buf, len) != len)
2946 return -EIO;
2947 break;
2948 case 1:
2949 v = qemu_get_byte(f);
2950 memset(buf, v, len);
2951 break;
2952 default:
2953 return -EINVAL;
2954 }
871d2f07
AL
2955
2956 if (qemu_file_has_error(f))
2957 return -EIO;
2958
8a7ddc38
FB
2959 return 0;
2960}
2961
c88676f8
FB
2962static int ram_load_v1(QEMUFile *f, void *opaque)
2963{
00f82b8a
AJ
2964 int ret;
2965 ram_addr_t i;
c88676f8
FB
2966
2967 if (qemu_get_be32(f) != phys_ram_size)
2968 return -EINVAL;
2969 for(i = 0; i < phys_ram_size; i+= TARGET_PAGE_SIZE) {
2970 ret = ram_get_page(f, phys_ram_base + i, TARGET_PAGE_SIZE);
2971 if (ret)
2972 return ret;
2973 }
2974 return 0;
2975}
2976
2977#define BDRV_HASH_BLOCK_SIZE 1024
2978#define IOBUF_SIZE 4096
2979#define RAM_CBLOCK_MAGIC 0xfabe
2980
c88676f8
FB
2981typedef struct RamDecompressState {
2982 z_stream zstream;
2983 QEMUFile *f;
2984 uint8_t buf[IOBUF_SIZE];
2985} RamDecompressState;
2986
2987static int ram_decompress_open(RamDecompressState *s, QEMUFile *f)
2988{
2989 int ret;
2990 memset(s, 0, sizeof(*s));
2991 s->f = f;
2992 ret = inflateInit(&s->zstream);
2993 if (ret != Z_OK)
2994 return -1;
2995 return 0;
2996}
2997
2998static int ram_decompress_buf(RamDecompressState *s, uint8_t *buf, int len)
2999{
3000 int ret, clen;
3001
3002 s->zstream.avail_out = len;
3003 s->zstream.next_out = buf;
3004 while (s->zstream.avail_out > 0) {
3005 if (s->zstream.avail_in == 0) {
3006 if (qemu_get_be16(s->f) != RAM_CBLOCK_MAGIC)
3007 return -1;
3008 clen = qemu_get_be16(s->f);
3009 if (clen > IOBUF_SIZE)
3010 return -1;
3011 qemu_get_buffer(s->f, s->buf, clen);
3012 s->zstream.avail_in = clen;
3013 s->zstream.next_in = s->buf;
3014 }
3015 ret = inflate(&s->zstream, Z_PARTIAL_FLUSH);
3016 if (ret != Z_OK && ret != Z_STREAM_END) {
3017 return -1;
3018 }
3019 }
3020 return 0;
3021}
3022
3023static void ram_decompress_close(RamDecompressState *s)
3024{
3025 inflateEnd(&s->zstream);
3026}
3027
475e4277
AL
3028#define RAM_SAVE_FLAG_FULL 0x01
3029#define RAM_SAVE_FLAG_COMPRESS 0x02
3030#define RAM_SAVE_FLAG_MEM_SIZE 0x04
3031#define RAM_SAVE_FLAG_PAGE 0x08
3032#define RAM_SAVE_FLAG_EOS 0x10
3033
3034static int is_dup_page(uint8_t *page, uint8_t ch)
8a7ddc38 3035{
475e4277
AL
3036 uint32_t val = ch << 24 | ch << 16 | ch << 8 | ch;
3037 uint32_t *array = (uint32_t *)page;
3038 int i;
3b46e624 3039
475e4277
AL
3040 for (i = 0; i < (TARGET_PAGE_SIZE / 4); i++) {
3041 if (array[i] != val)
3042 return 0;
3043 }
3044
3045 return 1;
3046}
3047
3048static int ram_save_block(QEMUFile *f)
3049{
3050 static ram_addr_t current_addr = 0;
3051 ram_addr_t saved_addr = current_addr;
3052 ram_addr_t addr = 0;
3053 int found = 0;
3054
3055 while (addr < phys_ram_size) {
3056 if (cpu_physical_memory_get_dirty(current_addr, MIGRATION_DIRTY_FLAG)) {
3057 uint8_t ch;
3058
3059 cpu_physical_memory_reset_dirty(current_addr,
3060 current_addr + TARGET_PAGE_SIZE,
3061 MIGRATION_DIRTY_FLAG);
3062
3063 ch = *(phys_ram_base + current_addr);
3064
3065 if (is_dup_page(phys_ram_base + current_addr, ch)) {
3066 qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_COMPRESS);
3067 qemu_put_byte(f, ch);
3068 } else {
3069 qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_PAGE);
3070 qemu_put_buffer(f, phys_ram_base + current_addr, TARGET_PAGE_SIZE);
c88676f8 3071 }
475e4277
AL
3072
3073 found = 1;
3074 break;
c88676f8 3075 }
475e4277
AL
3076 addr += TARGET_PAGE_SIZE;
3077 current_addr = (saved_addr + addr) % phys_ram_size;
8a7ddc38 3078 }
475e4277
AL
3079
3080 return found;
8a7ddc38
FB
3081}
3082
475e4277
AL
3083static ram_addr_t ram_save_threshold = 10;
3084
3085static ram_addr_t ram_save_remaining(void)
3086{
3087 ram_addr_t addr;
3088 ram_addr_t count = 0;
3089
3090 for (addr = 0; addr < phys_ram_size; addr += TARGET_PAGE_SIZE) {
3091 if (cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
3092 count++;
3093 }
3094
3095 return count;
3096}
3097
3098static int ram_save_live(QEMUFile *f, int stage, void *opaque)
3099{
3100 ram_addr_t addr;
3101
3102 if (stage == 1) {
3103 /* Make sure all dirty bits are set */
3104 for (addr = 0; addr < phys_ram_size; addr += TARGET_PAGE_SIZE) {
3105 if (!cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
3106 cpu_physical_memory_set_dirty(addr);
3107 }
3108
3109 /* Enable dirty memory tracking */
3110 cpu_physical_memory_set_dirty_tracking(1);
3111
3112 qemu_put_be64(f, phys_ram_size | RAM_SAVE_FLAG_MEM_SIZE);
3113 }
3114
3115 while (!qemu_file_rate_limit(f)) {
3116 int ret;
3117
3118 ret = ram_save_block(f);
3119 if (ret == 0) /* no more blocks */
3120 break;
3121 }
3122
3123 /* try transferring iterative blocks of memory */
3124
3125 if (stage == 3) {
3126 cpu_physical_memory_set_dirty_tracking(0);
3127
3128 /* flush all remaining blocks regardless of rate limiting */
3129 while (ram_save_block(f) != 0);
3130 }
3131
3132 qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
3133
3134 return (stage == 2) && (ram_save_remaining() < ram_save_threshold);
3135}
3136
3137static int ram_load_dead(QEMUFile *f, void *opaque)
8a7ddc38 3138{
c88676f8
FB
3139 RamDecompressState s1, *s = &s1;
3140 uint8_t buf[10];
00f82b8a 3141 ram_addr_t i;
8a7ddc38 3142
c88676f8
FB
3143 if (ram_decompress_open(s, f) < 0)
3144 return -EINVAL;
3145 for(i = 0; i < phys_ram_size; i+= BDRV_HASH_BLOCK_SIZE) {
3146 if (ram_decompress_buf(s, buf, 1) < 0) {
3147 fprintf(stderr, "Error while reading ram block header\n");
3148 goto error;
3149 }
3150 if (buf[0] == 0) {
3151 if (ram_decompress_buf(s, phys_ram_base + i, BDRV_HASH_BLOCK_SIZE) < 0) {
00f82b8a 3152 fprintf(stderr, "Error while reading ram block address=0x%08" PRIx64, (uint64_t)i);
c88676f8
FB
3153 goto error;
3154 }
475e4277 3155 } else {
c88676f8
FB
3156 error:
3157 printf("Error block header\n");
3158 return -EINVAL;
3159 }
8a7ddc38 3160 }
c88676f8 3161 ram_decompress_close(s);
475e4277
AL
3162
3163 return 0;
3164}
3165
3166static int ram_load(QEMUFile *f, void *opaque, int version_id)
3167{
3168 ram_addr_t addr;
3169 int flags;
3170
3171 if (version_id == 1)
3172 return ram_load_v1(f, opaque);
3173
3174 if (version_id == 2) {
3175 if (qemu_get_be32(f) != phys_ram_size)
3176 return -EINVAL;
3177 return ram_load_dead(f, opaque);
3178 }
3179
3180 if (version_id != 3)
3181 return -EINVAL;
3182
3183 do {
3184 addr = qemu_get_be64(f);
3185
3186 flags = addr & ~TARGET_PAGE_MASK;
3187 addr &= TARGET_PAGE_MASK;
3188
3189 if (flags & RAM_SAVE_FLAG_MEM_SIZE) {
3190 if (addr != phys_ram_size)
3191 return -EINVAL;
3192 }
3193
3194 if (flags & RAM_SAVE_FLAG_FULL) {
3195 if (ram_load_dead(f, opaque) < 0)
3196 return -EINVAL;
3197 }
3198
3199 if (flags & RAM_SAVE_FLAG_COMPRESS) {
3200 uint8_t ch = qemu_get_byte(f);
3201 memset(phys_ram_base + addr, ch, TARGET_PAGE_SIZE);
3202 } else if (flags & RAM_SAVE_FLAG_PAGE)
3203 qemu_get_buffer(f, phys_ram_base + addr, TARGET_PAGE_SIZE);
3204 } while (!(flags & RAM_SAVE_FLAG_EOS));
3205
8a7ddc38
FB
3206 return 0;
3207}
3208
9e472e10
AL
3209void qemu_service_io(void)
3210{
3211 CPUState *env = cpu_single_env;
3212 if (env) {
3213 cpu_interrupt(env, CPU_INTERRUPT_EXIT);
3214#ifdef USE_KQEMU
3215 if (env->kqemu_enabled) {
3216 kqemu_cpu_interrupt(env);
3217 }
3218#endif
3219 }
3220}
3221
83f64091
FB
3222/***********************************************************/
3223/* bottom halves (can be seen as timers which expire ASAP) */
3224
3225struct QEMUBH {
3226 QEMUBHFunc *cb;
3227 void *opaque;
3228 int scheduled;
1b435b10
AL
3229 int idle;
3230 int deleted;
83f64091
FB
3231 QEMUBH *next;
3232};
3233
3234static QEMUBH *first_bh = NULL;
3235
3236QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque)
3237{
3238 QEMUBH *bh;
3239 bh = qemu_mallocz(sizeof(QEMUBH));
3240 if (!bh)
3241 return NULL;
3242 bh->cb = cb;
3243 bh->opaque = opaque;
1b435b10
AL
3244 bh->next = first_bh;
3245 first_bh = bh;
83f64091
FB
3246 return bh;
3247}
3248
6eb5733a 3249int qemu_bh_poll(void)
83f64091 3250{
1b435b10 3251 QEMUBH *bh, **bhp;
6eb5733a 3252 int ret;
83f64091 3253
6eb5733a 3254 ret = 0;
1b435b10
AL
3255 for (bh = first_bh; bh; bh = bh->next) {
3256 if (!bh->deleted && bh->scheduled) {
3257 bh->scheduled = 0;
3258 if (!bh->idle)
3259 ret = 1;
3260 bh->idle = 0;
3261 bh->cb(bh->opaque);
3262 }
83f64091 3263 }
1b435b10
AL
3264
3265 /* remove deleted bhs */
3266 bhp = &first_bh;
3267 while (*bhp) {
3268 bh = *bhp;
3269 if (bh->deleted) {
3270 *bhp = bh->next;
3271 qemu_free(bh);
3272 } else
3273 bhp = &bh->next;
3274 }
3275
6eb5733a 3276 return ret;
83f64091
FB
3277}
3278
1b435b10
AL
3279void qemu_bh_schedule_idle(QEMUBH *bh)
3280{
3281 if (bh->scheduled)
3282 return;
3283 bh->scheduled = 1;
3284 bh->idle = 1;
3285}
3286
83f64091
FB
3287void qemu_bh_schedule(QEMUBH *bh)
3288{
3289 CPUState *env = cpu_single_env;
3290 if (bh->scheduled)
3291 return;
3292 bh->scheduled = 1;
1b435b10 3293 bh->idle = 0;
83f64091
FB
3294 /* stop the currently executing CPU to execute the BH ASAP */
3295 if (env) {
3296 cpu_interrupt(env, CPU_INTERRUPT_EXIT);
3297 }
3298}
3299
3300void qemu_bh_cancel(QEMUBH *bh)
3301{
1b435b10 3302 bh->scheduled = 0;
83f64091
FB
3303}
3304
3305void qemu_bh_delete(QEMUBH *bh)
3306{
1b435b10
AL
3307 bh->scheduled = 0;
3308 bh->deleted = 1;
83f64091
FB
3309}
3310
56f3a5d0
AL
3311static void qemu_bh_update_timeout(int *timeout)
3312{
3313 QEMUBH *bh;
3314
3315 for (bh = first_bh; bh; bh = bh->next) {
3316 if (!bh->deleted && bh->scheduled) {
3317 if (bh->idle) {
3318 /* idle bottom halves will be polled at least
3319 * every 10ms */
3320 *timeout = MIN(10, *timeout);
3321 } else {
3322 /* non-idle bottom halves will be executed
3323 * immediately */
3324 *timeout = 0;
3325 break;
3326 }
3327 }
3328 }
3329}
3330
cc1daa40
FB
3331/***********************************************************/
3332/* machine registration */
3333
bdaf78e0 3334static QEMUMachine *first_machine = NULL;
cc1daa40
FB
3335
3336int qemu_register_machine(QEMUMachine *m)
3337{
3338 QEMUMachine **pm;
3339 pm = &first_machine;
3340 while (*pm != NULL)
3341 pm = &(*pm)->next;
3342 m->next = NULL;
3343 *pm = m;
3344 return 0;
3345}
3346
9596ebb7 3347static QEMUMachine *find_machine(const char *name)
cc1daa40
FB
3348{
3349 QEMUMachine *m;
3350
3351 for(m = first_machine; m != NULL; m = m->next) {
3352 if (!strcmp(m->name, name))
3353 return m;
3354 }
3355 return NULL;
3356}
3357
8a7ddc38
FB
3358/***********************************************************/
3359/* main execution loop */
3360
9596ebb7 3361static void gui_update(void *opaque)
8a7ddc38 3362{
740733bb
TS
3363 DisplayState *ds = opaque;
3364 ds->dpy_refresh(ds);
f442e08b
AJ
3365 qemu_mod_timer(ds->gui_timer,
3366 (ds->gui_timer_interval ?
3367 ds->gui_timer_interval :
3368 GUI_REFRESH_INTERVAL)
3369 + qemu_get_clock(rt_clock));
8a7ddc38
FB
3370}
3371
0bd48850
FB
3372struct vm_change_state_entry {
3373 VMChangeStateHandler *cb;
3374 void *opaque;
3375 LIST_ENTRY (vm_change_state_entry) entries;
3376};
3377
3378static LIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head;
3379
3380VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
3381 void *opaque)
3382{
3383 VMChangeStateEntry *e;
3384
3385 e = qemu_mallocz(sizeof (*e));
3386 if (!e)
3387 return NULL;
3388
3389 e->cb = cb;
3390 e->opaque = opaque;
3391 LIST_INSERT_HEAD(&vm_change_state_head, e, entries);
3392 return e;
3393}
3394
3395void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
3396{
3397 LIST_REMOVE (e, entries);
3398 qemu_free (e);
3399}
3400
3401static void vm_state_notify(int running)
3402{
3403 VMChangeStateEntry *e;
3404
3405 for (e = vm_change_state_head.lh_first; e; e = e->entries.le_next) {
3406 e->cb(e->opaque, running);
3407 }
3408}
3409
8a7ddc38 3410/* XXX: support several handlers */
0bd48850
FB
3411static VMStopHandler *vm_stop_cb;
3412static void *vm_stop_opaque;
8a7ddc38
FB
3413
3414int qemu_add_vm_stop_handler(VMStopHandler *cb, void *opaque)
3415{
3416 vm_stop_cb = cb;
3417 vm_stop_opaque = opaque;
3418 return 0;
3419}
3420
3421void qemu_del_vm_stop_handler(VMStopHandler *cb, void *opaque)
3422{
3423 vm_stop_cb = NULL;
3424}
3425
3426void vm_start(void)
3427{
3428 if (!vm_running) {
3429 cpu_enable_ticks();
3430 vm_running = 1;
0bd48850 3431 vm_state_notify(1);
efe75411 3432 qemu_rearm_alarm_timer(alarm_timer);
8a7ddc38
FB
3433 }
3434}
3435
5fafdf24 3436void vm_stop(int reason)
8a7ddc38
FB
3437{
3438 if (vm_running) {
3439 cpu_disable_ticks();
3440 vm_running = 0;
3441 if (reason != 0) {
3442 if (vm_stop_cb) {
3443 vm_stop_cb(vm_stop_opaque, reason);
3444 }
34865134 3445 }
0bd48850 3446 vm_state_notify(0);
8a7ddc38
FB
3447 }
3448}
3449
bb0c6722
FB
3450/* reset/shutdown handler */
3451
3452typedef struct QEMUResetEntry {
3453 QEMUResetHandler *func;
3454 void *opaque;
3455 struct QEMUResetEntry *next;
3456} QEMUResetEntry;
3457
3458static QEMUResetEntry *first_reset_entry;
3459static int reset_requested;
3460static int shutdown_requested;
3475187d 3461static int powerdown_requested;
bb0c6722 3462
cf7a2fe2
AJ
3463int qemu_shutdown_requested(void)
3464{
3465 int r = shutdown_requested;
3466 shutdown_requested = 0;
3467 return r;
3468}
3469
3470int qemu_reset_requested(void)
3471{
3472 int r = reset_requested;
3473 reset_requested = 0;
3474 return r;
3475}
3476
3477int qemu_powerdown_requested(void)
3478{
3479 int r = powerdown_requested;
3480 powerdown_requested = 0;
3481 return r;
3482}
3483
bb0c6722
FB
3484void qemu_register_reset(QEMUResetHandler *func, void *opaque)
3485{
3486 QEMUResetEntry **pre, *re;
3487
3488 pre = &first_reset_entry;
3489 while (*pre != NULL)
3490 pre = &(*pre)->next;
3491 re = qemu_mallocz(sizeof(QEMUResetEntry));
3492 re->func = func;
3493 re->opaque = opaque;
3494 re->next = NULL;
3495 *pre = re;
3496}
3497
cf7a2fe2 3498void qemu_system_reset(void)
bb0c6722
FB
3499{
3500 QEMUResetEntry *re;
3501
3502 /* reset all devices */
3503 for(re = first_reset_entry; re != NULL; re = re->next) {
3504 re->func(re->opaque);
3505 }
3506}
3507
3508void qemu_system_reset_request(void)
3509{
d1beab82
FB
3510 if (no_reboot) {
3511 shutdown_requested = 1;
3512 } else {
3513 reset_requested = 1;
3514 }
6a00d601
FB
3515 if (cpu_single_env)
3516 cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
bb0c6722
FB
3517}
3518
3519void qemu_system_shutdown_request(void)
3520{
3521 shutdown_requested = 1;
6a00d601
FB
3522 if (cpu_single_env)
3523 cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
bb0c6722
FB
3524}
3525
3475187d
FB
3526void qemu_system_powerdown_request(void)
3527{
3528 powerdown_requested = 1;
6a00d601
FB
3529 if (cpu_single_env)
3530 cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
bb0c6722
FB
3531}
3532
877cf882 3533#ifdef _WIN32
69d6451c 3534static void host_main_loop_wait(int *timeout)
56f3a5d0
AL
3535{
3536 int ret, ret2, i;
f331110f
FB
3537 PollingEntry *pe;
3538
c4b1fcc0 3539
f331110f
FB
3540 /* XXX: need to suppress polling by better using win32 events */
3541 ret = 0;
3542 for(pe = first_polling_entry; pe != NULL; pe = pe->next) {
3543 ret |= pe->func(pe->opaque);
3544 }
e6b1e558 3545 if (ret == 0) {
a18e524a
FB
3546 int err;
3547 WaitObjects *w = &wait_objects;
3b46e624 3548
56f3a5d0 3549 ret = WaitForMultipleObjects(w->num, w->events, FALSE, *timeout);
a18e524a
FB
3550 if (WAIT_OBJECT_0 + 0 <= ret && ret <= WAIT_OBJECT_0 + w->num - 1) {
3551 if (w->func[ret - WAIT_OBJECT_0])
3552 w->func[ret - WAIT_OBJECT_0](w->opaque[ret - WAIT_OBJECT_0]);
3b46e624 3553
5fafdf24 3554 /* Check for additional signaled events */
e6b1e558 3555 for(i = (ret - WAIT_OBJECT_0 + 1); i < w->num; i++) {
3b46e624 3556
e6b1e558
TS
3557 /* Check if event is signaled */
3558 ret2 = WaitForSingleObject(w->events[i], 0);
3559 if(ret2 == WAIT_OBJECT_0) {
3560 if (w->func[i])
3561 w->func[i](w->opaque[i]);
3562 } else if (ret2 == WAIT_TIMEOUT) {
3563 } else {
3564 err = GetLastError();
3565 fprintf(stderr, "WaitForSingleObject error %d %d\n", i, err);
3b46e624
TS
3566 }
3567 }
a18e524a
FB
3568 } else if (ret == WAIT_TIMEOUT) {
3569 } else {
3570 err = GetLastError();
e6b1e558 3571 fprintf(stderr, "WaitForMultipleObjects error %d %d\n", ret, err);
a18e524a 3572 }
f331110f 3573 }
56f3a5d0
AL
3574
3575 *timeout = 0;
3576}
3577#else
69d6451c 3578static void host_main_loop_wait(int *timeout)
56f3a5d0
AL
3579{
3580}
fd1dff4b 3581#endif
56f3a5d0
AL
3582
3583void main_loop_wait(int timeout)
3584{
3585 IOHandlerRecord *ioh;
3586 fd_set rfds, wfds, xfds;
3587 int ret, nfds;
3588 struct timeval tv;
3589
3590 qemu_bh_update_timeout(&timeout);
3591
3592 host_main_loop_wait(&timeout);
3593
fd1dff4b
FB
3594 /* poll any events */
3595 /* XXX: separate device handlers from system ones */
6abfbd79 3596 nfds = -1;
fd1dff4b
FB
3597 FD_ZERO(&rfds);
3598 FD_ZERO(&wfds);
e035649e 3599 FD_ZERO(&xfds);
fd1dff4b 3600 for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
cafffd40
TS
3601 if (ioh->deleted)
3602 continue;
fd1dff4b
FB
3603 if (ioh->fd_read &&
3604 (!ioh->fd_read_poll ||
3605 ioh->fd_read_poll(ioh->opaque) != 0)) {
3606 FD_SET(ioh->fd, &rfds);
3607 if (ioh->fd > nfds)
3608 nfds = ioh->fd;
3609 }
3610 if (ioh->fd_write) {
3611 FD_SET(ioh->fd, &wfds);
3612 if (ioh->fd > nfds)
3613 nfds = ioh->fd;
3614 }
3615 }
3b46e624 3616
56f3a5d0
AL
3617 tv.tv_sec = timeout / 1000;
3618 tv.tv_usec = (timeout % 1000) * 1000;
3619
e035649e 3620#if defined(CONFIG_SLIRP)
63a01ef8 3621 if (slirp_is_inited()) {
e035649e
FB
3622 slirp_select_fill(&nfds, &rfds, &wfds, &xfds);
3623 }
3624#endif
3625 ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv);
fd1dff4b 3626 if (ret > 0) {
cafffd40
TS
3627 IOHandlerRecord **pioh;
3628
3629 for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
6ab43fdc 3630 if (!ioh->deleted && ioh->fd_read && FD_ISSET(ioh->fd, &rfds)) {
fd1dff4b 3631 ioh->fd_read(ioh->opaque);
7c9d8e07 3632 }
6ab43fdc 3633 if (!ioh->deleted && ioh->fd_write && FD_ISSET(ioh->fd, &wfds)) {
fd1dff4b 3634 ioh->fd_write(ioh->opaque);
c4b1fcc0 3635 }
b4608c04 3636 }
cafffd40
TS
3637
3638 /* remove deleted IO handlers */
3639 pioh = &first_io_handler;
3640 while (*pioh) {
3641 ioh = *pioh;
3642 if (ioh->deleted) {
3643 *pioh = ioh->next;
3644 qemu_free(ioh);
5fafdf24 3645 } else
cafffd40
TS
3646 pioh = &ioh->next;
3647 }
fd1dff4b 3648 }
c20709aa 3649#if defined(CONFIG_SLIRP)
63a01ef8 3650 if (slirp_is_inited()) {
e035649e
FB
3651 if (ret < 0) {
3652 FD_ZERO(&rfds);
3653 FD_ZERO(&wfds);
3654 FD_ZERO(&xfds);
c20709aa 3655 }
e035649e 3656 slirp_select_poll(&rfds, &wfds, &xfds);
fd1dff4b 3657 }
e035649e 3658#endif
b4608c04 3659
357c692c
AL
3660 /* vm time timers */
3661 if (vm_running && likely(!(cur_cpu->singlestep_enabled & SSTEP_NOTIMER)))
3662 qemu_run_timers(&active_timers[QEMU_TIMER_VIRTUAL],
3663 qemu_get_clock(vm_clock));
3664
3665 /* real time timers */
3666 qemu_run_timers(&active_timers[QEMU_TIMER_REALTIME],
3667 qemu_get_clock(rt_clock));
3668
423f0742
PB
3669 /* Check bottom-halves last in case any of the earlier events triggered
3670 them. */
3671 qemu_bh_poll();
3b46e624 3672
5905b2e5
FB
3673}
3674
9596ebb7 3675static int main_loop(void)
5905b2e5
FB
3676{
3677 int ret, timeout;
89bfc105
FB
3678#ifdef CONFIG_PROFILER
3679 int64_t ti;
3680#endif
6a00d601 3681 CPUState *env;
5905b2e5 3682
6a00d601 3683 cur_cpu = first_cpu;
ee5605e5 3684 next_cpu = cur_cpu->next_cpu ?: first_cpu;
5905b2e5
FB
3685 for(;;) {
3686 if (vm_running) {
15a76449 3687
15a76449
FB
3688 for(;;) {
3689 /* get next cpu */
ee5605e5 3690 env = next_cpu;
89bfc105
FB
3691#ifdef CONFIG_PROFILER
3692 ti = profile_getclock();
3693#endif
2e70f6ef
PB
3694 if (use_icount) {
3695 int64_t count;
3696 int decr;
3697 qemu_icount -= (env->icount_decr.u16.low + env->icount_extra);
3698 env->icount_decr.u16.low = 0;
3699 env->icount_extra = 0;
3700 count = qemu_next_deadline();
3701 count = (count + (1 << icount_time_shift) - 1)
3702 >> icount_time_shift;
3703 qemu_icount += count;
3704 decr = (count > 0xffff) ? 0xffff : count;
3705 count -= decr;
3706 env->icount_decr.u16.low = decr;
3707 env->icount_extra = count;
3708 }
6a00d601 3709 ret = cpu_exec(env);
89bfc105
FB
3710#ifdef CONFIG_PROFILER
3711 qemu_time += profile_getclock() - ti;
3712#endif
2e70f6ef
PB
3713 if (use_icount) {
3714 /* Fold pending instructions back into the
3715 instruction counter, and clear the interrupt flag. */
3716 qemu_icount -= (env->icount_decr.u16.low
3717 + env->icount_extra);
3718 env->icount_decr.u32 = 0;
3719 env->icount_extra = 0;
3720 }
ee5605e5 3721 next_cpu = env->next_cpu ?: first_cpu;
95b01009 3722 if (event_pending && likely(ret != EXCP_DEBUG)) {
ee5605e5
AZ
3723 ret = EXCP_INTERRUPT;
3724 event_pending = 0;
3725 break;
3726 }
bd967e05
PB
3727 if (ret == EXCP_HLT) {
3728 /* Give the next CPU a chance to run. */
3729 cur_cpu = env;
3730 continue;
3731 }
15a76449
FB
3732 if (ret != EXCP_HALTED)
3733 break;
3734 /* all CPUs are halted ? */
bd967e05 3735 if (env == cur_cpu)
15a76449 3736 break;
15a76449
FB
3737 }
3738 cur_cpu = env;
3739
5905b2e5 3740 if (shutdown_requested) {
3475187d 3741 ret = EXCP_INTERRUPT;
b2f76161
AJ
3742 if (no_shutdown) {
3743 vm_stop(0);
3744 no_shutdown = 0;
3745 }
3746 else
3747 break;
5905b2e5
FB
3748 }
3749 if (reset_requested) {
3750 reset_requested = 0;
3751 qemu_system_reset();
3475187d
FB
3752 ret = EXCP_INTERRUPT;
3753 }
3754 if (powerdown_requested) {
3755 powerdown_requested = 0;
3756 qemu_system_powerdown();
3757 ret = EXCP_INTERRUPT;
5905b2e5 3758 }
95b01009 3759 if (unlikely(ret == EXCP_DEBUG)) {
880a7578 3760 gdb_set_stop_cpu(cur_cpu);
5905b2e5
FB
3761 vm_stop(EXCP_DEBUG);
3762 }
bd967e05 3763 /* If all cpus are halted then wait until the next IRQ */
5905b2e5 3764 /* XXX: use timeout computed from timers */
2e70f6ef
PB
3765 if (ret == EXCP_HALTED) {
3766 if (use_icount) {
3767 int64_t add;
3768 int64_t delta;
3769 /* Advance virtual time to the next event. */
3770 if (use_icount == 1) {
3771 /* When not using an adaptive execution frequency
3772 we tend to get badly out of sync with real time,
bf20dc07 3773 so just delay for a reasonable amount of time. */
2e70f6ef
PB
3774 delta = 0;
3775 } else {
3776 delta = cpu_get_icount() - cpu_get_clock();
3777 }
3778 if (delta > 0) {
3779 /* If virtual time is ahead of real time then just
3780 wait for IO. */
3781 timeout = (delta / 1000000) + 1;
3782 } else {
3783 /* Wait for either IO to occur or the next
3784 timer event. */
3785 add = qemu_next_deadline();
3786 /* We advance the timer before checking for IO.
3787 Limit the amount we advance so that early IO
3788 activity won't get the guest too far ahead. */
3789 if (add > 10000000)
3790 add = 10000000;
3791 delta += add;
3792 add = (add + (1 << icount_time_shift) - 1)
3793 >> icount_time_shift;
3794 qemu_icount += add;
3795 timeout = delta / 1000000;
3796 if (timeout < 0)
3797 timeout = 0;
3798 }
3799 } else {
0a1af395 3800 timeout = 5000;
2e70f6ef
PB
3801 }
3802 } else {
5905b2e5 3803 timeout = 0;
2e70f6ef 3804 }
5905b2e5 3805 } else {
98448f58
BS
3806 if (shutdown_requested) {
3807 ret = EXCP_INTERRUPT;
5b08fc10 3808 break;
98448f58 3809 }
0a1af395 3810 timeout = 5000;
5905b2e5 3811 }
89bfc105
FB
3812#ifdef CONFIG_PROFILER
3813 ti = profile_getclock();
3814#endif
5905b2e5 3815 main_loop_wait(timeout);
89bfc105
FB
3816#ifdef CONFIG_PROFILER
3817 dev_time += profile_getclock() - ti;
3818#endif
b4608c04 3819 }
34865134
FB
3820 cpu_disable_ticks();
3821 return ret;
b4608c04
FB
3822}
3823
15f82208 3824static void help(int exitcode)
0824d6fc 3825{
68d0f70e 3826 printf("QEMU PC emulator version " QEMU_VERSION ", Copyright (c) 2003-2008 Fabrice Bellard\n"
0db63474 3827 "usage: %s [options] [disk_image]\n"
0824d6fc 3828 "\n"
a20dd508 3829 "'disk_image' is a raw hard image image for IDE hard disk 0\n"
fc01f7e7 3830 "\n"
a20dd508 3831 "Standard options:\n"
cc1daa40 3832 "-M machine select emulated machine (-M ? for list)\n"
5adb4839 3833 "-cpu cpu select CPU (-cpu ? for list)\n"
c45886db 3834 "-fda/-fdb file use 'file' as floppy disk 0/1 image\n"
36b486bb
FB
3835 "-hda/-hdb file use 'file' as IDE hard disk 0/1 image\n"
3836 "-hdc/-hdd file use 'file' as IDE hard disk 2/3 image\n"
c4b1fcc0 3837 "-cdrom file use 'file' as IDE cdrom image (cdrom is ide1 master)\n"
a1620fac
AJ
3838 "-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]\n"
3839 " [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off]\n"
fa879c64 3840 " [,cache=writethrough|writeback|none][,format=f][,serial=s]\n"
e4bcb14c 3841 " use 'file' as a drive image\n"
3e3d5815 3842 "-mtdblock file use 'file' as on-board Flash memory image\n"
a1bb27b1 3843 "-sd file use 'file' as SecureDigital card image\n"
86f55663 3844 "-pflash file use 'file' as a parallel flash image\n"
eec85c2a 3845 "-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n)\n"
667accab
TS
3846 "-snapshot write to temporary files instead of disk image files\n"
3847#ifdef CONFIG_SDL
43523e93 3848 "-no-frame open SDL window without a frame and window decorations\n"
3780e197 3849 "-alt-grab use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt)\n"
667accab
TS
3850 "-no-quit disable SDL window close capability\n"
3851#endif
52ca8d6a
FB
3852#ifdef TARGET_I386
3853 "-no-fd-bootchk disable boot signature checking for floppy disks\n"
3854#endif
a00bad7e 3855 "-m megs set virtual RAM size to megs MB [default=%d]\n"
91fc2119 3856 "-smp n set the number of CPUs to 'n' [default=1]\n"
c4b1fcc0 3857 "-nographic disable graphical output and redirect serial I/Os to console\n"
a171fe39 3858 "-portrait rotate graphical output 90 deg left (only PXA LCD)\n"
4ca0074c 3859#ifndef _WIN32
667accab 3860 "-k language use keyboard layout (for example \"fr\" for French)\n"
4ca0074c 3861#endif
1d14ffa9 3862#ifdef HAS_AUDIO
1d14ffa9 3863 "-audio-help print list of audio drivers and their options\n"
c0fe3827
FB
3864 "-soundhw c1,... enable audio support\n"
3865 " and only specified sound cards (comma separated list)\n"
3866 " use -soundhw ? to get the list of supported cards\n"
6a36d84e 3867 " use -soundhw all to enable all of them\n"
1d14ffa9 3868#endif
c2b3b41a 3869 "-vga [std|cirrus|vmware|none]\n"
3893c124 3870 " select video card type\n"
89980284 3871 "-localtime set the real time clock to local time [default=utc]\n"
d63d307f 3872 "-full-screen start in full screen\n"
a09db21f
FB
3873#ifdef TARGET_I386
3874 "-win2k-hack use it when installing Windows 2000 to avoid a disk full bug\n"
73822ec8 3875 "-rtc-td-hack use it to fix time drift in Windows ACPI HAL\n"
a09db21f 3876#endif
b389dbfb
FB
3877 "-usb enable the USB driver (will be the default soon)\n"
3878 "-usbdevice name add the host or guest USB device 'name'\n"
6f7e9aec
FB
3879#if defined(TARGET_PPC) || defined(TARGET_SPARC)
3880 "-g WxH[xDEPTH] Set the initial graphical resolution and depth\n"
bb0c6722 3881#endif
c35734b2 3882 "-name string set the name of the guest\n"
8fcb1b90 3883 "-uuid %%08x-%%04x-%%04x-%%04x-%%012x specify machine UUID\n"
c4b1fcc0
FB
3884 "\n"
3885 "Network options:\n"
7a9f6e4a 3886 "-net nic[,vlan=n][,macaddr=addr][,model=type][,name=str]\n"
7c9d8e07 3887 " create a new Network Interface Card and connect it to VLAN 'n'\n"
c20709aa 3888#ifdef CONFIG_SLIRP
7a9f6e4a 3889 "-net user[,vlan=n][,name=str][,hostname=host]\n"
115defd1
PB
3890 " connect the user mode network stack to VLAN 'n' and send\n"
3891 " hostname 'host' to DHCP clients\n"
7c9d8e07 3892#endif
7fb843f8 3893#ifdef _WIN32
7a9f6e4a 3894 "-net tap[,vlan=n][,name=str],ifname=name\n"
7fb843f8
FB
3895 " connect the host TAP network interface to VLAN 'n'\n"
3896#else
7a9f6e4a 3897 "-net tap[,vlan=n][,name=str][,fd=h][,ifname=name][,script=file][,downscript=dfile]\n"
b46a8906
TS
3898 " connect the host TAP network interface to VLAN 'n' and use the\n"
3899 " network scripts 'file' (default=%s)\n"
3900 " and 'dfile' (default=%s);\n"
3901 " use '[down]script=no' to disable script execution;\n"
7c9d8e07 3902 " use 'fd=h' to connect to an already opened TAP interface\n"
7fb843f8 3903#endif
7a9f6e4a 3904 "-net socket[,vlan=n][,name=str][,fd=h][,listen=[host]:port][,connect=host:port]\n"
7c9d8e07 3905 " connect the vlan 'n' to another VLAN using a socket connection\n"
7a9f6e4a 3906 "-net socket[,vlan=n][,name=str][,fd=h][,mcast=maddr:port]\n"
3d830459 3907 " connect the vlan 'n' to multicast maddr and port\n"
8a16d273 3908#ifdef CONFIG_VDE
7a9f6e4a 3909 "-net vde[,vlan=n][,name=str][,sock=socketpath][,port=n][,group=groupname][,mode=octalmode]\n"
8a16d273
TS
3910 " connect the vlan 'n' to port 'n' of a vde switch running\n"
3911 " on host and listening for incoming connections on 'socketpath'.\n"
3912 " Use group 'groupname' and mode 'octalmode' to change default\n"
3913 " ownership and permissions for communication port.\n"
3914#endif
7c9d8e07
FB
3915 "-net none use it alone to have zero network devices; if no -net option\n"
3916 " is provided, the default is '-net nic -net user'\n"
3917 "\n"
dc72ac14
AZ
3918 "-bt hci,null Dumb bluetooth HCI - doesn't respond to commands\n"
3919 "-bt hci,host[:id]\n"
3920 " Use host's HCI with the given name\n"
3921 "-bt hci[,vlan=n]\n"
3922 " Emulate a standard HCI in virtual scatternet 'n'\n"
3923 "-bt vhci[,vlan=n]\n"
3924 " Add host computer to virtual scatternet 'n' using VHCI\n"
3925 "-bt device:dev[,vlan=n]\n"
3926 " Emulate a bluetooth device 'dev' in scatternet 'n'\n"
3927 "\n"
7c9d8e07 3928#ifdef CONFIG_SLIRP
0db1137d 3929 "-tftp dir allow tftp access to files in dir [-net user]\n"
47d5d01a 3930 "-bootp file advertise file in BOOTP replies\n"
7c9d8e07
FB
3931#ifndef _WIN32
3932 "-smb dir allow SMB access to files in 'dir' [-net user]\n"
c94c8d64 3933#endif
9bf05444 3934 "-redir [tcp|udp]:host-port:[guest-host]:guest-port\n"
7c9d8e07 3935 " redirect TCP or UDP connections from host to guest [-net user]\n"
c20709aa 3936#endif
a20dd508 3937 "\n"
c4b1fcc0 3938 "Linux boot specific:\n"
a20dd508
FB
3939 "-kernel bzImage use 'bzImage' as kernel image\n"
3940 "-append cmdline use 'cmdline' as kernel command line\n"
3941 "-initrd file use 'file' as initial ram disk\n"
fc01f7e7 3942 "\n"
330d0414 3943 "Debug/Expert options:\n"
82c643ff
FB
3944 "-monitor dev redirect the monitor to char device 'dev'\n"
3945 "-serial dev redirect the serial port to char device 'dev'\n"
6508fe59 3946 "-parallel dev redirect the parallel port to char device 'dev'\n"
f7cce898 3947 "-pidfile file Write PID to 'file'\n"
cd6f1169 3948 "-S freeze CPU at startup (use 'c' to start execution)\n"
cfc3475a
PB
3949 "-s wait gdb connection to port\n"
3950 "-p port set gdb connection port [default=%s]\n"
f193c797 3951 "-d item1,... output log to %s (use -d ? for a list of log items)\n"
46d4767d
FB
3952 "-hdachs c,h,s[,t] force hard disk 0 physical geometry and the optional BIOS\n"
3953 " translation (t=none or lba) (usually qemu can guess them)\n"
87b47350 3954 "-L path set the directory for the BIOS, VGA BIOS and keymaps\n"
d993e026 3955#ifdef USE_KQEMU
6515b203 3956 "-kernel-kqemu enable KQEMU full virtualization (default is user mode only)\n"
d993e026
FB
3957 "-no-kqemu disable KQEMU kernel module usage\n"
3958#endif
7ba1e619
AL
3959#ifdef CONFIG_KVM
3960 "-enable-kvm enable KVM full virtualization support\n"
3961#endif
bb0c6722 3962#ifdef TARGET_I386
6515b203 3963 "-no-acpi disable ACPI\n"
16b29ae1 3964 "-no-hpet disable HPET\n"
4d3b6f6e
AZ
3965#endif
3966#ifdef CONFIG_CURSES
3967 "-curses use a curses/ncurses interface instead of SDL\n"
bb0c6722 3968#endif
d1beab82 3969 "-no-reboot exit instead of rebooting\n"
b2f76161 3970 "-no-shutdown stop before shutdown\n"
a8080006 3971 "-loadvm [tag|id] start right away with a saved state (loadvm in monitor)\n"
24236869 3972 "-vnc display start a VNC server on display\n"
71e3ceb8
TS
3973#ifndef _WIN32
3974 "-daemonize daemonize QEMU after initializing\n"
3975#endif
9ae02555 3976 "-option-rom rom load a file, rom, into the option ROM space\n"
66508601
BS
3977#ifdef TARGET_SPARC
3978 "-prom-env variable=value set OpenBIOS nvram variables\n"
3979#endif
f3dcfada 3980 "-clock force the use of the given methods for timer alarm.\n"
3adda04c 3981 " To see what timers are available use -clock ?\n"
bce61846 3982 "-startdate select initial date of the clock\n"
2e70f6ef 3983 "-icount [N|auto]\n"
dd5d6fe9 3984 " Enable virtual instruction counter with 2^N clock ticks per instruction\n"
0824d6fc 3985 "\n"
82c643ff 3986 "During emulation, the following keys are useful:\n"
032a8c9e
FB
3987 "ctrl-alt-f toggle full screen\n"
3988 "ctrl-alt-n switch to virtual console 'n'\n"
3989 "ctrl-alt toggle mouse and keyboard grab\n"
82c643ff
FB
3990 "\n"
3991 "When using -nographic, press 'ctrl-a h' to get some help.\n"
3992 ,
0db63474 3993 "qemu",
a00bad7e 3994 DEFAULT_RAM_SIZE,
7c9d8e07 3995#ifndef _WIN32
a00bad7e 3996 DEFAULT_NETWORK_SCRIPT,
b46a8906 3997 DEFAULT_NETWORK_DOWN_SCRIPT,
7c9d8e07 3998#endif
6e44ba7f 3999 DEFAULT_GDBSTUB_PORT,
bce61846 4000 "/tmp/qemu.log");
15f82208 4001 exit(exitcode);
0824d6fc
FB
4002}
4003
cd6f1169
FB
4004#define HAS_ARG 0x0001
4005
4006enum {
4007 QEMU_OPTION_h,
4008
cc1daa40 4009 QEMU_OPTION_M,
94fc95cd 4010 QEMU_OPTION_cpu,
cd6f1169
FB
4011 QEMU_OPTION_fda,
4012 QEMU_OPTION_fdb,
4013 QEMU_OPTION_hda,
4014 QEMU_OPTION_hdb,
4015 QEMU_OPTION_hdc,
4016 QEMU_OPTION_hdd,
e4bcb14c 4017 QEMU_OPTION_drive,
cd6f1169 4018 QEMU_OPTION_cdrom,
3e3d5815 4019 QEMU_OPTION_mtdblock,
a1bb27b1 4020 QEMU_OPTION_sd,
86f55663 4021 QEMU_OPTION_pflash,
cd6f1169
FB
4022 QEMU_OPTION_boot,
4023 QEMU_OPTION_snapshot,
52ca8d6a
FB
4024#ifdef TARGET_I386
4025 QEMU_OPTION_no_fd_bootchk,
4026#endif
cd6f1169
FB
4027 QEMU_OPTION_m,
4028 QEMU_OPTION_nographic,
a171fe39 4029 QEMU_OPTION_portrait,
1d14ffa9 4030#ifdef HAS_AUDIO
1d14ffa9
FB
4031 QEMU_OPTION_audio_help,
4032 QEMU_OPTION_soundhw,
4033#endif
cd6f1169 4034
7c9d8e07 4035 QEMU_OPTION_net,
c7f74643 4036 QEMU_OPTION_tftp,
47d5d01a 4037 QEMU_OPTION_bootp,
9d728e8c 4038 QEMU_OPTION_smb,
9bf05444 4039 QEMU_OPTION_redir,
dc72ac14 4040 QEMU_OPTION_bt,
cd6f1169
FB
4041
4042 QEMU_OPTION_kernel,
4043 QEMU_OPTION_append,
4044 QEMU_OPTION_initrd,
4045
4046 QEMU_OPTION_S,
4047 QEMU_OPTION_s,
4048 QEMU_OPTION_p,
4049 QEMU_OPTION_d,
4050 QEMU_OPTION_hdachs,
4051 QEMU_OPTION_L,
1192dad8 4052 QEMU_OPTION_bios,
3d11d0eb 4053 QEMU_OPTION_k,
ee22c2f7 4054 QEMU_OPTION_localtime,
e9b137c2 4055 QEMU_OPTION_g,
3893c124 4056 QEMU_OPTION_vga,
20d8a3ed 4057 QEMU_OPTION_echr,
82c643ff
FB
4058 QEMU_OPTION_monitor,
4059 QEMU_OPTION_serial,
51ecf136 4060 QEMU_OPTION_virtiocon,
6508fe59 4061 QEMU_OPTION_parallel,
d63d307f
FB
4062 QEMU_OPTION_loadvm,
4063 QEMU_OPTION_full_screen,
43523e93 4064 QEMU_OPTION_no_frame,
3780e197 4065 QEMU_OPTION_alt_grab,
667accab 4066 QEMU_OPTION_no_quit,
f7cce898 4067 QEMU_OPTION_pidfile,
d993e026 4068 QEMU_OPTION_no_kqemu,
89bfc105 4069 QEMU_OPTION_kernel_kqemu,
7ba1e619 4070 QEMU_OPTION_enable_kvm,
a09db21f 4071 QEMU_OPTION_win2k_hack,
73822ec8 4072 QEMU_OPTION_rtc_td_hack,
bb36d470 4073 QEMU_OPTION_usb,
a594cfbf 4074 QEMU_OPTION_usbdevice,
6a00d601 4075 QEMU_OPTION_smp,
24236869 4076 QEMU_OPTION_vnc,
6515b203 4077 QEMU_OPTION_no_acpi,
16b29ae1 4078 QEMU_OPTION_no_hpet,
4d3b6f6e 4079 QEMU_OPTION_curses,
d1beab82 4080 QEMU_OPTION_no_reboot,
b2f76161 4081 QEMU_OPTION_no_shutdown,
9467cd46 4082 QEMU_OPTION_show_cursor,
71e3ceb8 4083 QEMU_OPTION_daemonize,
9ae02555 4084 QEMU_OPTION_option_rom,
c35734b2
TS
4085 QEMU_OPTION_semihosting,
4086 QEMU_OPTION_name,
66508601 4087 QEMU_OPTION_prom_env,
2b8f2d41 4088 QEMU_OPTION_old_param,
f3dcfada 4089 QEMU_OPTION_clock,
7e0af5d0 4090 QEMU_OPTION_startdate,
26a5f13b 4091 QEMU_OPTION_tb_size,
2e70f6ef 4092 QEMU_OPTION_icount,
8fcb1b90 4093 QEMU_OPTION_uuid,
5bb7910a 4094 QEMU_OPTION_incoming,
cd6f1169
FB
4095};
4096
4097typedef struct QEMUOption {
4098 const char *name;
4099 int flags;
4100 int index;
4101} QEMUOption;
4102
dbed7e40 4103static const QEMUOption qemu_options[] = {
cd6f1169 4104 { "h", 0, QEMU_OPTION_h },
64423fb2 4105 { "help", 0, QEMU_OPTION_h },
cd6f1169 4106
cc1daa40 4107 { "M", HAS_ARG, QEMU_OPTION_M },
94fc95cd 4108 { "cpu", HAS_ARG, QEMU_OPTION_cpu },
cd6f1169
FB
4109 { "fda", HAS_ARG, QEMU_OPTION_fda },
4110 { "fdb", HAS_ARG, QEMU_OPTION_fdb },
4111 { "hda", HAS_ARG, QEMU_OPTION_hda },
4112 { "hdb", HAS_ARG, QEMU_OPTION_hdb },
4113 { "hdc", HAS_ARG, QEMU_OPTION_hdc },
4114 { "hdd", HAS_ARG, QEMU_OPTION_hdd },
e4bcb14c 4115 { "drive", HAS_ARG, QEMU_OPTION_drive },
cd6f1169 4116 { "cdrom", HAS_ARG, QEMU_OPTION_cdrom },
3e3d5815 4117 { "mtdblock", HAS_ARG, QEMU_OPTION_mtdblock },
a1bb27b1 4118 { "sd", HAS_ARG, QEMU_OPTION_sd },
86f55663 4119 { "pflash", HAS_ARG, QEMU_OPTION_pflash },
cd6f1169
FB
4120 { "boot", HAS_ARG, QEMU_OPTION_boot },
4121 { "snapshot", 0, QEMU_OPTION_snapshot },
52ca8d6a
FB
4122#ifdef TARGET_I386
4123 { "no-fd-bootchk", 0, QEMU_OPTION_no_fd_bootchk },
4124#endif
cd6f1169
FB
4125 { "m", HAS_ARG, QEMU_OPTION_m },
4126 { "nographic", 0, QEMU_OPTION_nographic },
a171fe39 4127 { "portrait", 0, QEMU_OPTION_portrait },
3d11d0eb 4128 { "k", HAS_ARG, QEMU_OPTION_k },
1d14ffa9 4129#ifdef HAS_AUDIO
1d14ffa9
FB
4130 { "audio-help", 0, QEMU_OPTION_audio_help },
4131 { "soundhw", HAS_ARG, QEMU_OPTION_soundhw },
4132#endif
cd6f1169 4133
7c9d8e07 4134 { "net", HAS_ARG, QEMU_OPTION_net},
158156d1 4135#ifdef CONFIG_SLIRP
c7f74643 4136 { "tftp", HAS_ARG, QEMU_OPTION_tftp },
47d5d01a 4137 { "bootp", HAS_ARG, QEMU_OPTION_bootp },
c94c8d64 4138#ifndef _WIN32
9d728e8c 4139 { "smb", HAS_ARG, QEMU_OPTION_smb },
c94c8d64 4140#endif
9bf05444 4141 { "redir", HAS_ARG, QEMU_OPTION_redir },
158156d1 4142#endif
dc72ac14 4143 { "bt", HAS_ARG, QEMU_OPTION_bt },
cd6f1169
FB
4144
4145 { "kernel", HAS_ARG, QEMU_OPTION_kernel },
4146 { "append", HAS_ARG, QEMU_OPTION_append },
4147 { "initrd", HAS_ARG, QEMU_OPTION_initrd },
4148
4149 { "S", 0, QEMU_OPTION_S },
4150 { "s", 0, QEMU_OPTION_s },
4151 { "p", HAS_ARG, QEMU_OPTION_p },
4152 { "d", HAS_ARG, QEMU_OPTION_d },
4153 { "hdachs", HAS_ARG, QEMU_OPTION_hdachs },
4154 { "L", HAS_ARG, QEMU_OPTION_L },
1192dad8 4155 { "bios", HAS_ARG, QEMU_OPTION_bios },
d993e026
FB
4156#ifdef USE_KQEMU
4157 { "no-kqemu", 0, QEMU_OPTION_no_kqemu },
89bfc105 4158 { "kernel-kqemu", 0, QEMU_OPTION_kernel_kqemu },
d993e026 4159#endif
7ba1e619
AL
4160#ifdef CONFIG_KVM
4161 { "enable-kvm", 0, QEMU_OPTION_enable_kvm },
4162#endif
6f7e9aec 4163#if defined(TARGET_PPC) || defined(TARGET_SPARC)
e9b137c2 4164 { "g", 1, QEMU_OPTION_g },
77d4bc34 4165#endif
ee22c2f7 4166 { "localtime", 0, QEMU_OPTION_localtime },
3893c124 4167 { "vga", HAS_ARG, QEMU_OPTION_vga },
8b6e0729
AZ
4168 { "echr", HAS_ARG, QEMU_OPTION_echr },
4169 { "monitor", HAS_ARG, QEMU_OPTION_monitor },
4170 { "serial", HAS_ARG, QEMU_OPTION_serial },
51ecf136 4171 { "virtioconsole", HAS_ARG, QEMU_OPTION_virtiocon },
8b6e0729 4172 { "parallel", HAS_ARG, QEMU_OPTION_parallel },
d63d307f
FB
4173 { "loadvm", HAS_ARG, QEMU_OPTION_loadvm },
4174 { "full-screen", 0, QEMU_OPTION_full_screen },
667accab 4175#ifdef CONFIG_SDL
43523e93 4176 { "no-frame", 0, QEMU_OPTION_no_frame },
3780e197 4177 { "alt-grab", 0, QEMU_OPTION_alt_grab },
667accab
TS
4178 { "no-quit", 0, QEMU_OPTION_no_quit },
4179#endif
f7cce898 4180 { "pidfile", HAS_ARG, QEMU_OPTION_pidfile },
a09db21f 4181 { "win2k-hack", 0, QEMU_OPTION_win2k_hack },
73822ec8 4182 { "rtc-td-hack", 0, QEMU_OPTION_rtc_td_hack },
a594cfbf 4183 { "usbdevice", HAS_ARG, QEMU_OPTION_usbdevice },
6a00d601 4184 { "smp", HAS_ARG, QEMU_OPTION_smp },
24236869 4185 { "vnc", HAS_ARG, QEMU_OPTION_vnc },
4d3b6f6e
AZ
4186#ifdef CONFIG_CURSES
4187 { "curses", 0, QEMU_OPTION_curses },
4188#endif
8fcb1b90 4189 { "uuid", HAS_ARG, QEMU_OPTION_uuid },
96d30e48 4190
1f04275e 4191 /* temporary options */
a594cfbf 4192 { "usb", 0, QEMU_OPTION_usb },
6515b203 4193 { "no-acpi", 0, QEMU_OPTION_no_acpi },
16b29ae1 4194 { "no-hpet", 0, QEMU_OPTION_no_hpet },
d1beab82 4195 { "no-reboot", 0, QEMU_OPTION_no_reboot },
b2f76161 4196 { "no-shutdown", 0, QEMU_OPTION_no_shutdown },
9467cd46 4197 { "show-cursor", 0, QEMU_OPTION_show_cursor },
71e3ceb8 4198 { "daemonize", 0, QEMU_OPTION_daemonize },
9ae02555 4199 { "option-rom", HAS_ARG, QEMU_OPTION_option_rom },
a87295e8 4200#if defined(TARGET_ARM) || defined(TARGET_M68K)
8e71621f
PB
4201 { "semihosting", 0, QEMU_OPTION_semihosting },
4202#endif
c35734b2 4203 { "name", HAS_ARG, QEMU_OPTION_name },
95efd11c 4204#if defined(TARGET_SPARC) || defined(TARGET_PPC)
66508601 4205 { "prom-env", HAS_ARG, QEMU_OPTION_prom_env },
2b8f2d41
AZ
4206#endif
4207#if defined(TARGET_ARM)
4208 { "old-param", 0, QEMU_OPTION_old_param },
66508601 4209#endif
f3dcfada 4210 { "clock", HAS_ARG, QEMU_OPTION_clock },
7e0af5d0 4211 { "startdate", HAS_ARG, QEMU_OPTION_startdate },
26a5f13b 4212 { "tb-size", HAS_ARG, QEMU_OPTION_tb_size },
2e70f6ef 4213 { "icount", HAS_ARG, QEMU_OPTION_icount },
5bb7910a 4214 { "incoming", HAS_ARG, QEMU_OPTION_incoming },
cd6f1169 4215 { NULL },
fc01f7e7
FB
4216};
4217
5905b2e5
FB
4218/* password input */
4219
2bac6019
AZ
4220int qemu_key_check(BlockDriverState *bs, const char *name)
4221{
4222 char password[256];
4223 int i;
4224
4225 if (!bdrv_is_encrypted(bs))
4226 return 0;
4227
4228 term_printf("%s is encrypted.\n", name);
4229 for(i = 0; i < 3; i++) {
4230 monitor_readline("Password: ", 1, password, sizeof(password));
4231 if (bdrv_set_key(bs, password) == 0)
4232 return 0;
4233 term_printf("invalid password\n");
4234 }
4235 return -EPERM;
4236}
4237
83ab7950
AL
4238static BlockDriverState *get_bdrv(int index)
4239{
4240 if (index > nb_drives)
4241 return NULL;
4242 return drives_table[index].bdrv;
4243}
4244
5905b2e5
FB
4245static void read_passwords(void)
4246{
4247 BlockDriverState *bs;
2bac6019 4248 int i;
5905b2e5 4249
83ab7950
AL
4250 for(i = 0; i < 6; i++) {
4251 bs = get_bdrv(i);
4252 if (bs)
4253 qemu_key_check(bs, bdrv_get_device_name(bs));
5905b2e5
FB
4254 }
4255}
4256
1d14ffa9 4257#ifdef HAS_AUDIO
6a36d84e 4258struct soundhw soundhw[] = {
b00052e4 4259#ifdef HAS_AUDIO_CHOICE
4ce7ff6e 4260#if defined(TARGET_I386) || defined(TARGET_MIPS)
fd06c375
FB
4261 {
4262 "pcspk",
4263 "PC speaker",
4264 0,
4265 1,
4266 { .init_isa = pcspk_audio_init }
4267 },
4268#endif
4c9b53e3 4269
4270#ifdef CONFIG_SB16
6a36d84e
FB
4271 {
4272 "sb16",
4273 "Creative Sound Blaster 16",
4274 0,
4275 1,
4276 { .init_isa = SB16_init }
4277 },
4c9b53e3 4278#endif
6a36d84e 4279
cc53d26d 4280#ifdef CONFIG_CS4231A
4281 {
4282 "cs4231a",
4283 "CS4231A",
4284 0,
4285 1,
4286 { .init_isa = cs4231a_init }
4287 },
4288#endif
4289
1d14ffa9 4290#ifdef CONFIG_ADLIB
6a36d84e
FB
4291 {
4292 "adlib",
1d14ffa9 4293#ifdef HAS_YMF262
6a36d84e 4294 "Yamaha YMF262 (OPL3)",
1d14ffa9 4295#else
6a36d84e 4296 "Yamaha YM3812 (OPL2)",
1d14ffa9 4297#endif
6a36d84e
FB
4298 0,
4299 1,
4300 { .init_isa = Adlib_init }
4301 },
1d14ffa9 4302#endif
6a36d84e 4303
1d14ffa9 4304#ifdef CONFIG_GUS
6a36d84e
FB
4305 {
4306 "gus",
4307 "Gravis Ultrasound GF1",
4308 0,
4309 1,
4310 { .init_isa = GUS_init }
4311 },
1d14ffa9 4312#endif
6a36d84e 4313
4c9b53e3 4314#ifdef CONFIG_AC97
e5c9a13e
AZ
4315 {
4316 "ac97",
4317 "Intel 82801AA AC97 Audio",
4318 0,
4319 0,
4320 { .init_pci = ac97_init }
4321 },
4c9b53e3 4322#endif
e5c9a13e 4323
4c9b53e3 4324#ifdef CONFIG_ES1370
6a36d84e
FB
4325 {
4326 "es1370",
4327 "ENSONIQ AudioPCI ES1370",
4328 0,
4329 0,
4330 { .init_pci = es1370_init }
4331 },
b00052e4 4332#endif
6a36d84e 4333
4c9b53e3 4334#endif /* HAS_AUDIO_CHOICE */
4335
6a36d84e
FB
4336 { NULL, NULL, 0, 0, { NULL } }
4337};
4338
4339static void select_soundhw (const char *optarg)
4340{
4341 struct soundhw *c;
4342
4343 if (*optarg == '?') {
4344 show_valid_cards:
4345
4346 printf ("Valid sound card names (comma separated):\n");
4347 for (c = soundhw; c->name; ++c) {
4348 printf ("%-11s %s\n", c->name, c->descr);
4349 }
4350 printf ("\n-soundhw all will enable all of the above\n");
1d14ffa9
FB
4351 exit (*optarg != '?');
4352 }
4353 else {
6a36d84e 4354 size_t l;
1d14ffa9
FB
4355 const char *p;
4356 char *e;
4357 int bad_card = 0;
4358
6a36d84e
FB
4359 if (!strcmp (optarg, "all")) {
4360 for (c = soundhw; c->name; ++c) {
4361 c->enabled = 1;
4362 }
4363 return;
4364 }
1d14ffa9 4365
6a36d84e 4366 p = optarg;
1d14ffa9
FB
4367 while (*p) {
4368 e = strchr (p, ',');
4369 l = !e ? strlen (p) : (size_t) (e - p);
6a36d84e
FB
4370
4371 for (c = soundhw; c->name; ++c) {
4372 if (!strncmp (c->name, p, l)) {
4373 c->enabled = 1;
1d14ffa9
FB
4374 break;
4375 }
4376 }
6a36d84e
FB
4377
4378 if (!c->name) {
1d14ffa9
FB
4379 if (l > 80) {
4380 fprintf (stderr,
4381 "Unknown sound card name (too big to show)\n");
4382 }
4383 else {
4384 fprintf (stderr, "Unknown sound card name `%.*s'\n",
4385 (int) l, p);
4386 }
4387 bad_card = 1;
4388 }
4389 p += l + (e != NULL);
4390 }
4391
4392 if (bad_card)
4393 goto show_valid_cards;
4394 }
4395}
4396#endif
4397
3893c124 4398static void select_vgahw (const char *p)
4399{
4400 const char *opts;
4401
4402 if (strstart(p, "std", &opts)) {
c2b3b41a 4403 std_vga_enabled = 1;
3893c124 4404 cirrus_vga_enabled = 0;
4405 vmsvga_enabled = 0;
4406 } else if (strstart(p, "cirrus", &opts)) {
4407 cirrus_vga_enabled = 1;
c2b3b41a 4408 std_vga_enabled = 0;
3893c124 4409 vmsvga_enabled = 0;
4410 } else if (strstart(p, "vmware", &opts)) {
4411 cirrus_vga_enabled = 0;
c2b3b41a 4412 std_vga_enabled = 0;
3893c124 4413 vmsvga_enabled = 1;
c2b3b41a
AL
4414 } else if (strstart(p, "none", &opts)) {
4415 cirrus_vga_enabled = 0;
4416 std_vga_enabled = 0;
4417 vmsvga_enabled = 0;
3893c124 4418 } else {
4419 invalid_vga:
4420 fprintf(stderr, "Unknown vga type: %s\n", p);
4421 exit(1);
4422 }
cb5a7aa8 4423 while (*opts) {
4424 const char *nextopt;
4425
4426 if (strstart(opts, ",retrace=", &nextopt)) {
4427 opts = nextopt;
4428 if (strstart(opts, "dumb", &nextopt))
4429 vga_retrace_method = VGA_RETRACE_DUMB;
4430 else if (strstart(opts, "precise", &nextopt))
4431 vga_retrace_method = VGA_RETRACE_PRECISE;
4432 else goto invalid_vga;
4433 } else goto invalid_vga;
4434 opts = nextopt;
4435 }
3893c124 4436}
4437
3587d7e6
FB
4438#ifdef _WIN32
4439static BOOL WINAPI qemu_ctrl_handler(DWORD type)
4440{
4441 exit(STATUS_CONTROL_C_EXIT);
4442 return TRUE;
4443}
4444#endif
4445
8fcb1b90
BS
4446static int qemu_uuid_parse(const char *str, uint8_t *uuid)
4447{
4448 int ret;
4449
4450 if(strlen(str) != 36)
4451 return -1;
4452
4453 ret = sscanf(str, UUID_FMT, &uuid[0], &uuid[1], &uuid[2], &uuid[3],
4454 &uuid[4], &uuid[5], &uuid[6], &uuid[7], &uuid[8], &uuid[9],
4455 &uuid[10], &uuid[11], &uuid[12], &uuid[13], &uuid[14], &uuid[15]);
4456
4457 if(ret != 16)
4458 return -1;
4459
4460 return 0;
4461}
4462
7c9d8e07 4463#define MAX_NET_CLIENTS 32
c20709aa 4464
5b08fc10
AL
4465#ifndef _WIN32
4466
4467static void termsig_handler(int signal)
4468{
4469 qemu_system_shutdown_request();
4470}
4471
6f9e3801 4472static void termsig_setup(void)
5b08fc10
AL
4473{
4474 struct sigaction act;
4475
4476 memset(&act, 0, sizeof(act));
4477 act.sa_handler = termsig_handler;
4478 sigaction(SIGINT, &act, NULL);
4479 sigaction(SIGHUP, &act, NULL);
4480 sigaction(SIGTERM, &act, NULL);
4481}
4482
4483#endif
4484
902b3d5c 4485int main(int argc, char **argv, char **envp)
0824d6fc 4486{
67b915a5 4487#ifdef CONFIG_GDBSTUB
cfc3475a
PB
4488 int use_gdbstub;
4489 const char *gdbstub_port;
67b915a5 4490#endif
28c5af54 4491 uint32_t boot_devices_bitmap = 0;
e4bcb14c 4492 int i;
28c5af54 4493 int snapshot, linux_boot, net_boot;
7f7f9873 4494 const char *initrd_filename;
a20dd508 4495 const char *kernel_filename, *kernel_cmdline;
28c5af54 4496 const char *boot_devices = "";
313aa567 4497 DisplayState *ds = &display_state;
46d4767d 4498 int cyls, heads, secs, translation;
fd5f393a 4499 const char *net_clients[MAX_NET_CLIENTS];
7c9d8e07 4500 int nb_net_clients;
dc72ac14
AZ
4501 const char *bt_opts[MAX_BT_CMDLINE];
4502 int nb_bt_opts;
e4bcb14c 4503 int hda_index;
cd6f1169
FB
4504 int optind;
4505 const char *r, *optarg;
82c643ff 4506 CharDriverState *monitor_hd;
fd5f393a
PB
4507 const char *monitor_device;
4508 const char *serial_devices[MAX_SERIAL_PORTS];
8d11df9e 4509 int serial_device_index;
fd5f393a 4510 const char *parallel_devices[MAX_PARALLEL_PORTS];
6508fe59 4511 int parallel_device_index;
9ede2fde
AL
4512 const char *virtio_consoles[MAX_VIRTIO_CONSOLES];
4513 int virtio_console_index;
d63d307f 4514 const char *loadvm = NULL;
cc1daa40 4515 QEMUMachine *machine;
94fc95cd 4516 const char *cpu_model;
fd5f393a 4517 const char *usb_devices[MAX_USB_CMDLINE];
a594cfbf 4518 int usb_devices_index;
71e3ceb8 4519 int fds[2];
26a5f13b 4520 int tb_size;
93815bc2 4521 const char *pid_file = NULL;
41bd639b 4522 int autostart;
5bb7910a 4523 const char *incoming = NULL;
0bd48850 4524
902b3d5c 4525 qemu_cache_utils_init(envp);
4526
0bd48850 4527 LIST_INIT (&vm_change_state_head);
be995c27
FB
4528#ifndef _WIN32
4529 {
4530 struct sigaction act;
4531 sigfillset(&act.sa_mask);
4532 act.sa_flags = 0;
4533 act.sa_handler = SIG_IGN;
4534 sigaction(SIGPIPE, &act, NULL);
4535 }
3587d7e6
FB
4536#else
4537 SetConsoleCtrlHandler(qemu_ctrl_handler, TRUE);
a8e5ac33
FB
4538 /* Note: cpu_interrupt() is currently not SMP safe, so we force
4539 QEMU to run on a single CPU */
4540 {
4541 HANDLE h;
4542 DWORD mask, smask;
4543 int i;
4544 h = GetCurrentProcess();
4545 if (GetProcessAffinityMask(h, &mask, &smask)) {
4546 for(i = 0; i < 32; i++) {
4547 if (mask & (1 << i))
4548 break;
4549 }
4550 if (i != 32) {
4551 mask = 1 << i;
4552 SetProcessAffinityMask(h, mask);
4553 }
4554 }
4555 }
67b915a5 4556#endif
be995c27 4557
cc1daa40
FB
4558 register_machines();
4559 machine = first_machine;
94fc95cd 4560 cpu_model = NULL;
fc01f7e7 4561 initrd_filename = NULL;
4fc5d071 4562 ram_size = 0;
313aa567 4563 vga_ram_size = VGA_RAM_SIZE;
67b915a5 4564#ifdef CONFIG_GDBSTUB
b4608c04 4565 use_gdbstub = 0;
c636bb66 4566 gdbstub_port = DEFAULT_GDBSTUB_PORT;
67b915a5 4567#endif
33e3963e 4568 snapshot = 0;
a20dd508 4569 nographic = 0;
4d3b6f6e 4570 curses = 0;
a20dd508
FB
4571 kernel_filename = NULL;
4572 kernel_cmdline = "";
c4b1fcc0 4573 cyls = heads = secs = 0;
46d4767d 4574 translation = BIOS_ATA_TRANSLATION_AUTO;
c60e08d9 4575 monitor_device = "vc";
c4b1fcc0 4576
c75a823c 4577 serial_devices[0] = "vc:80Cx24C";
8d11df9e 4578 for(i = 1; i < MAX_SERIAL_PORTS; i++)
fd5f393a 4579 serial_devices[i] = NULL;
8d11df9e 4580 serial_device_index = 0;
3b46e624 4581
c75a823c 4582 parallel_devices[0] = "vc:640x480";
6508fe59 4583 for(i = 1; i < MAX_PARALLEL_PORTS; i++)
fd5f393a 4584 parallel_devices[i] = NULL;
6508fe59 4585 parallel_device_index = 0;
3b46e624 4586
9ede2fde
AL
4587 virtio_consoles[0] = "vc:80Cx24C";
4588 for(i = 1; i < MAX_VIRTIO_CONSOLES; i++)
4589 virtio_consoles[i] = NULL;
4590 virtio_console_index = 0;
4591
a594cfbf 4592 usb_devices_index = 0;
3b46e624 4593
7c9d8e07 4594 nb_net_clients = 0;
dc72ac14 4595 nb_bt_opts = 0;
e4bcb14c
TS
4596 nb_drives = 0;
4597 nb_drives_opt = 0;
4598 hda_index = -1;
7c9d8e07
FB
4599
4600 nb_nics = 0;
3b46e624 4601
26a5f13b 4602 tb_size = 0;
41bd639b
BS
4603 autostart= 1;
4604
cd6f1169 4605 optind = 1;
0824d6fc 4606 for(;;) {
cd6f1169 4607 if (optind >= argc)
0824d6fc 4608 break;
cd6f1169
FB
4609 r = argv[optind];
4610 if (r[0] != '-') {
609497ab 4611 hda_index = drive_add(argv[optind++], HD_ALIAS, 0);
cd6f1169
FB
4612 } else {
4613 const QEMUOption *popt;
4614
4615 optind++;
dff5efc8
PB
4616 /* Treat --foo the same as -foo. */
4617 if (r[1] == '-')
4618 r++;
cd6f1169
FB
4619 popt = qemu_options;
4620 for(;;) {
4621 if (!popt->name) {
5fafdf24 4622 fprintf(stderr, "%s: invalid option -- '%s'\n",
cd6f1169
FB
4623 argv[0], r);
4624 exit(1);
4625 }
4626 if (!strcmp(popt->name, r + 1))
4627 break;
4628 popt++;
4629 }
4630 if (popt->flags & HAS_ARG) {
4631 if (optind >= argc) {
4632 fprintf(stderr, "%s: option '%s' requires an argument\n",
4633 argv[0], r);
4634 exit(1);
4635 }
4636 optarg = argv[optind++];
4637 } else {
4638 optarg = NULL;
4639 }
4640
4641 switch(popt->index) {
cc1daa40
FB
4642 case QEMU_OPTION_M:
4643 machine = find_machine(optarg);
4644 if (!machine) {
4645 QEMUMachine *m;
4646 printf("Supported machines are:\n");
4647 for(m = first_machine; m != NULL; m = m->next) {
4648 printf("%-10s %s%s\n",
5fafdf24 4649 m->name, m->desc,
cc1daa40
FB
4650 m == first_machine ? " (default)" : "");
4651 }
15f82208 4652 exit(*optarg != '?');
cc1daa40
FB
4653 }
4654 break;
94fc95cd
JM
4655 case QEMU_OPTION_cpu:
4656 /* hw initialization will check this */
15f82208 4657 if (*optarg == '?') {
c732abe2
JM
4658/* XXX: implement xxx_cpu_list for targets that still miss it */
4659#if defined(cpu_list)
4660 cpu_list(stdout, &fprintf);
94fc95cd 4661#endif
15f82208 4662 exit(0);
94fc95cd
JM
4663 } else {
4664 cpu_model = optarg;
4665 }
4666 break;
cd6f1169 4667 case QEMU_OPTION_initrd:
fc01f7e7
FB
4668 initrd_filename = optarg;
4669 break;
cd6f1169 4670 case QEMU_OPTION_hda:
e4bcb14c 4671 if (cyls == 0)
609497ab 4672 hda_index = drive_add(optarg, HD_ALIAS, 0);
e4bcb14c 4673 else
609497ab 4674 hda_index = drive_add(optarg, HD_ALIAS
e4bcb14c 4675 ",cyls=%d,heads=%d,secs=%d%s",
609497ab 4676 0, cyls, heads, secs,
e4bcb14c
TS
4677 translation == BIOS_ATA_TRANSLATION_LBA ?
4678 ",trans=lba" :
4679 translation == BIOS_ATA_TRANSLATION_NONE ?
4680 ",trans=none" : "");
4681 break;
cd6f1169 4682 case QEMU_OPTION_hdb:
cc1daa40
FB
4683 case QEMU_OPTION_hdc:
4684 case QEMU_OPTION_hdd:
609497ab 4685 drive_add(optarg, HD_ALIAS, popt->index - QEMU_OPTION_hda);
fc01f7e7 4686 break;
e4bcb14c 4687 case QEMU_OPTION_drive:
609497ab 4688 drive_add(NULL, "%s", optarg);
e4bcb14c 4689 break;
3e3d5815 4690 case QEMU_OPTION_mtdblock:
609497ab 4691 drive_add(optarg, MTD_ALIAS);
3e3d5815 4692 break;
a1bb27b1 4693 case QEMU_OPTION_sd:
609497ab 4694 drive_add(optarg, SD_ALIAS);
a1bb27b1 4695 break;
86f55663 4696 case QEMU_OPTION_pflash:
609497ab 4697 drive_add(optarg, PFLASH_ALIAS);
86f55663 4698 break;
cd6f1169 4699 case QEMU_OPTION_snapshot:
33e3963e
FB
4700 snapshot = 1;
4701 break;
cd6f1169 4702 case QEMU_OPTION_hdachs:
330d0414 4703 {
330d0414
FB
4704 const char *p;
4705 p = optarg;
4706 cyls = strtol(p, (char **)&p, 0);
46d4767d
FB
4707 if (cyls < 1 || cyls > 16383)
4708 goto chs_fail;
330d0414
FB
4709 if (*p != ',')
4710 goto chs_fail;
4711 p++;
4712 heads = strtol(p, (char **)&p, 0);
46d4767d
FB
4713 if (heads < 1 || heads > 16)
4714 goto chs_fail;
330d0414
FB
4715 if (*p != ',')
4716 goto chs_fail;
4717 p++;
4718 secs = strtol(p, (char **)&p, 0);
46d4767d
FB
4719 if (secs < 1 || secs > 63)
4720 goto chs_fail;
4721 if (*p == ',') {
4722 p++;
4723 if (!strcmp(p, "none"))
4724 translation = BIOS_ATA_TRANSLATION_NONE;
4725 else if (!strcmp(p, "lba"))
4726 translation = BIOS_ATA_TRANSLATION_LBA;
4727 else if (!strcmp(p, "auto"))
4728 translation = BIOS_ATA_TRANSLATION_AUTO;
4729 else
4730 goto chs_fail;
4731 } else if (*p != '\0') {
c4b1fcc0 4732 chs_fail:
46d4767d
FB
4733 fprintf(stderr, "qemu: invalid physical CHS format\n");
4734 exit(1);
c4b1fcc0 4735 }
e4bcb14c 4736 if (hda_index != -1)
609497ab
AZ
4737 snprintf(drives_opt[hda_index].opt,
4738 sizeof(drives_opt[hda_index].opt),
4739 HD_ALIAS ",cyls=%d,heads=%d,secs=%d%s",
4740 0, cyls, heads, secs,
e4bcb14c
TS
4741 translation == BIOS_ATA_TRANSLATION_LBA ?
4742 ",trans=lba" :
4743 translation == BIOS_ATA_TRANSLATION_NONE ?
4744 ",trans=none" : "");
330d0414
FB
4745 }
4746 break;
cd6f1169 4747 case QEMU_OPTION_nographic:
a20dd508
FB
4748 nographic = 1;
4749 break;
4d3b6f6e
AZ
4750#ifdef CONFIG_CURSES
4751 case QEMU_OPTION_curses:
4752 curses = 1;
4753 break;
4754#endif
a171fe39
AZ
4755 case QEMU_OPTION_portrait:
4756 graphic_rotate = 1;
4757 break;
cd6f1169 4758 case QEMU_OPTION_kernel:
a20dd508
FB
4759 kernel_filename = optarg;
4760 break;
cd6f1169 4761 case QEMU_OPTION_append:
a20dd508 4762 kernel_cmdline = optarg;
313aa567 4763 break;
cd6f1169 4764 case QEMU_OPTION_cdrom:
609497ab 4765 drive_add(optarg, CDROM_ALIAS);
36b486bb 4766 break;
cd6f1169 4767 case QEMU_OPTION_boot:
28c5af54
JM
4768 boot_devices = optarg;
4769 /* We just do some generic consistency checks */
4770 {
4771 /* Could easily be extended to 64 devices if needed */
60fe76f3 4772 const char *p;
28c5af54
JM
4773
4774 boot_devices_bitmap = 0;
4775 for (p = boot_devices; *p != '\0'; p++) {
4776 /* Allowed boot devices are:
4777 * a b : floppy disk drives
4778 * c ... f : IDE disk drives
4779 * g ... m : machine implementation dependant drives
4780 * n ... p : network devices
4781 * It's up to each machine implementation to check
4782 * if the given boot devices match the actual hardware
4783 * implementation and firmware features.
4784 */
4785 if (*p < 'a' || *p > 'q') {
4786 fprintf(stderr, "Invalid boot device '%c'\n", *p);
4787 exit(1);
4788 }
4789 if (boot_devices_bitmap & (1 << (*p - 'a'))) {
4790 fprintf(stderr,
4791 "Boot device '%c' was given twice\n",*p);
4792 exit(1);
4793 }
4794 boot_devices_bitmap |= 1 << (*p - 'a');
4795 }
36b486bb
FB
4796 }
4797 break;
cd6f1169 4798 case QEMU_OPTION_fda:
cd6f1169 4799 case QEMU_OPTION_fdb:
609497ab 4800 drive_add(optarg, FD_ALIAS, popt->index - QEMU_OPTION_fda);
c45886db 4801 break;
52ca8d6a
FB
4802#ifdef TARGET_I386
4803 case QEMU_OPTION_no_fd_bootchk:
4804 fd_bootchk = 0;
4805 break;
4806#endif
7c9d8e07
FB
4807 case QEMU_OPTION_net:
4808 if (nb_net_clients >= MAX_NET_CLIENTS) {
4809 fprintf(stderr, "qemu: too many network clients\n");
c4b1fcc0
FB
4810 exit(1);
4811 }
fd5f393a 4812 net_clients[nb_net_clients] = optarg;
7c9d8e07 4813 nb_net_clients++;
702c651c 4814 break;
c7f74643
FB
4815#ifdef CONFIG_SLIRP
4816 case QEMU_OPTION_tftp:
c7f74643 4817 tftp_prefix = optarg;
9bf05444 4818 break;
47d5d01a
TS
4819 case QEMU_OPTION_bootp:
4820 bootp_filename = optarg;
4821 break;
c94c8d64 4822#ifndef _WIN32
9d728e8c
FB
4823 case QEMU_OPTION_smb:
4824 net_slirp_smb(optarg);
4825 break;
c94c8d64 4826#endif
9bf05444 4827 case QEMU_OPTION_redir:
3b46e624 4828 net_slirp_redir(optarg);
9bf05444 4829 break;
c7f74643 4830#endif
dc72ac14
AZ
4831 case QEMU_OPTION_bt:
4832 if (nb_bt_opts >= MAX_BT_CMDLINE) {
4833 fprintf(stderr, "qemu: too many bluetooth options\n");
4834 exit(1);
4835 }
4836 bt_opts[nb_bt_opts++] = optarg;
4837 break;
1d14ffa9 4838#ifdef HAS_AUDIO
1d14ffa9
FB
4839 case QEMU_OPTION_audio_help:
4840 AUD_help ();
4841 exit (0);
4842 break;
4843 case QEMU_OPTION_soundhw:
4844 select_soundhw (optarg);
4845 break;
4846#endif
cd6f1169 4847 case QEMU_OPTION_h:
15f82208 4848 help(0);
cd6f1169 4849 break;
00f82b8a
AJ
4850 case QEMU_OPTION_m: {
4851 uint64_t value;
4852 char *ptr;
4853
4854 value = strtoul(optarg, &ptr, 10);
4855 switch (*ptr) {
4856 case 0: case 'M': case 'm':
4857 value <<= 20;
4858 break;
4859 case 'G': case 'g':
4860 value <<= 30;
4861 break;
4862 default:
4863 fprintf(stderr, "qemu: invalid ram size: %s\n", optarg);
cd6f1169
FB
4864 exit(1);
4865 }
00f82b8a
AJ
4866
4867 /* On 32-bit hosts, QEMU is limited by virtual address space */
4868 if (value > (2047 << 20)
4869#ifndef USE_KQEMU
4870 && HOST_LONG_BITS == 32
4871#endif
4872 ) {
4873 fprintf(stderr, "qemu: at most 2047 MB RAM can be simulated\n");
4874 exit(1);
4875 }
4876 if (value != (uint64_t)(ram_addr_t)value) {
4877 fprintf(stderr, "qemu: ram size too large\n");
4878 exit(1);
4879 }
4880 ram_size = value;
cd6f1169 4881 break;
00f82b8a 4882 }
cd6f1169
FB
4883 case QEMU_OPTION_d:
4884 {
4885 int mask;
c7cd6a37 4886 const CPULogItem *item;
3b46e624 4887
cd6f1169
FB
4888 mask = cpu_str_to_log_mask(optarg);
4889 if (!mask) {
4890 printf("Log items (comma separated):\n");
f193c797
FB
4891 for(item = cpu_log_items; item->mask != 0; item++) {
4892 printf("%-10s %s\n", item->name, item->help);
4893 }
4894 exit(1);
cd6f1169
FB
4895 }
4896 cpu_set_log(mask);
f193c797 4897 }
cd6f1169 4898 break;
67b915a5 4899#ifdef CONFIG_GDBSTUB
cd6f1169
FB
4900 case QEMU_OPTION_s:
4901 use_gdbstub = 1;
4902 break;
4903 case QEMU_OPTION_p:
cfc3475a 4904 gdbstub_port = optarg;
cd6f1169 4905 break;
67b915a5 4906#endif
cd6f1169
FB
4907 case QEMU_OPTION_L:
4908 bios_dir = optarg;
4909 break;
1192dad8
JM
4910 case QEMU_OPTION_bios:
4911 bios_name = optarg;
4912 break;
cd6f1169 4913 case QEMU_OPTION_S:
3c07f8e8 4914 autostart = 0;
cd6f1169 4915 break;
3d11d0eb
FB
4916 case QEMU_OPTION_k:
4917 keyboard_layout = optarg;
4918 break;
ee22c2f7
FB
4919 case QEMU_OPTION_localtime:
4920 rtc_utc = 0;
4921 break;
3893c124 4922 case QEMU_OPTION_vga:
4923 select_vgahw (optarg);
1bfe856e 4924 break;
e9b137c2
FB
4925 case QEMU_OPTION_g:
4926 {
4927 const char *p;
4928 int w, h, depth;
4929 p = optarg;
4930 w = strtol(p, (char **)&p, 10);
4931 if (w <= 0) {
4932 graphic_error:
4933 fprintf(stderr, "qemu: invalid resolution or depth\n");
4934 exit(1);
4935 }
4936 if (*p != 'x')
4937 goto graphic_error;
4938 p++;
4939 h = strtol(p, (char **)&p, 10);
4940 if (h <= 0)
4941 goto graphic_error;
4942 if (*p == 'x') {
4943 p++;
4944 depth = strtol(p, (char **)&p, 10);
5fafdf24 4945 if (depth != 8 && depth != 15 && depth != 16 &&
e9b137c2
FB
4946 depth != 24 && depth != 32)
4947 goto graphic_error;
4948 } else if (*p == '\0') {
4949 depth = graphic_depth;
4950 } else {
4951 goto graphic_error;
4952 }
3b46e624 4953
e9b137c2
FB
4954 graphic_width = w;
4955 graphic_height = h;
4956 graphic_depth = depth;
4957 }
4958 break;
20d8a3ed
TS
4959 case QEMU_OPTION_echr:
4960 {
4961 char *r;
4962 term_escape_char = strtol(optarg, &r, 0);
4963 if (r == optarg)
4964 printf("Bad argument to echr\n");
4965 break;
4966 }
82c643ff 4967 case QEMU_OPTION_monitor:
fd5f393a 4968 monitor_device = optarg;
82c643ff
FB
4969 break;
4970 case QEMU_OPTION_serial:
8d11df9e
FB
4971 if (serial_device_index >= MAX_SERIAL_PORTS) {
4972 fprintf(stderr, "qemu: too many serial ports\n");
4973 exit(1);
4974 }
fd5f393a 4975 serial_devices[serial_device_index] = optarg;
8d11df9e 4976 serial_device_index++;
82c643ff 4977 break;
51ecf136
AL
4978 case QEMU_OPTION_virtiocon:
4979 if (virtio_console_index >= MAX_VIRTIO_CONSOLES) {
4980 fprintf(stderr, "qemu: too many virtio consoles\n");
4981 exit(1);
4982 }
4983 virtio_consoles[virtio_console_index] = optarg;
4984 virtio_console_index++;
4985 break;
6508fe59
FB
4986 case QEMU_OPTION_parallel:
4987 if (parallel_device_index >= MAX_PARALLEL_PORTS) {
4988 fprintf(stderr, "qemu: too many parallel ports\n");
4989 exit(1);
4990 }
fd5f393a 4991 parallel_devices[parallel_device_index] = optarg;
6508fe59
FB
4992 parallel_device_index++;
4993 break;
d63d307f
FB
4994 case QEMU_OPTION_loadvm:
4995 loadvm = optarg;
4996 break;
4997 case QEMU_OPTION_full_screen:
4998 full_screen = 1;
4999 break;
667accab 5000#ifdef CONFIG_SDL
43523e93
TS
5001 case QEMU_OPTION_no_frame:
5002 no_frame = 1;
5003 break;
3780e197
TS
5004 case QEMU_OPTION_alt_grab:
5005 alt_grab = 1;
5006 break;
667accab
TS
5007 case QEMU_OPTION_no_quit:
5008 no_quit = 1;
5009 break;
5010#endif
f7cce898 5011 case QEMU_OPTION_pidfile:
93815bc2 5012 pid_file = optarg;
f7cce898 5013 break;
a09db21f
FB
5014#ifdef TARGET_I386
5015 case QEMU_OPTION_win2k_hack:
5016 win2k_install_hack = 1;
5017 break;
73822ec8
AL
5018 case QEMU_OPTION_rtc_td_hack:
5019 rtc_td_hack = 1;
5020 break;
a09db21f 5021#endif
d993e026
FB
5022#ifdef USE_KQEMU
5023 case QEMU_OPTION_no_kqemu:
5024 kqemu_allowed = 0;
5025 break;
89bfc105
FB
5026 case QEMU_OPTION_kernel_kqemu:
5027 kqemu_allowed = 2;
5028 break;
7ba1e619
AL
5029#endif
5030#ifdef CONFIG_KVM
5031 case QEMU_OPTION_enable_kvm:
5032 kvm_allowed = 1;
5033#ifdef USE_KQEMU
5034 kqemu_allowed = 0;
5035#endif
5036 break;
d993e026 5037#endif
bb36d470
FB
5038 case QEMU_OPTION_usb:
5039 usb_enabled = 1;
5040 break;
a594cfbf
FB
5041 case QEMU_OPTION_usbdevice:
5042 usb_enabled = 1;
0d92ed30 5043 if (usb_devices_index >= MAX_USB_CMDLINE) {
a594cfbf
FB
5044 fprintf(stderr, "Too many USB devices\n");
5045 exit(1);
5046 }
fd5f393a 5047 usb_devices[usb_devices_index] = optarg;
a594cfbf
FB
5048 usb_devices_index++;
5049 break;
6a00d601
FB
5050 case QEMU_OPTION_smp:
5051 smp_cpus = atoi(optarg);
b2097003 5052 if (smp_cpus < 1) {
6a00d601
FB
5053 fprintf(stderr, "Invalid number of CPUs\n");
5054 exit(1);
5055 }
5056 break;
24236869 5057 case QEMU_OPTION_vnc:
73fc9742 5058 vnc_display = optarg;
24236869 5059 break;
6515b203
FB
5060 case QEMU_OPTION_no_acpi:
5061 acpi_enabled = 0;
5062 break;
16b29ae1
AL
5063 case QEMU_OPTION_no_hpet:
5064 no_hpet = 1;
5065 break;
d1beab82
FB
5066 case QEMU_OPTION_no_reboot:
5067 no_reboot = 1;
5068 break;
b2f76161
AJ
5069 case QEMU_OPTION_no_shutdown:
5070 no_shutdown = 1;
5071 break;
9467cd46
AZ
5072 case QEMU_OPTION_show_cursor:
5073 cursor_hide = 0;
5074 break;
8fcb1b90
BS
5075 case QEMU_OPTION_uuid:
5076 if(qemu_uuid_parse(optarg, qemu_uuid) < 0) {
5077 fprintf(stderr, "Fail to parse UUID string."
5078 " Wrong format.\n");
5079 exit(1);
5080 }
5081 break;
71e3ceb8
TS
5082 case QEMU_OPTION_daemonize:
5083 daemonize = 1;
5084 break;
9ae02555
TS
5085 case QEMU_OPTION_option_rom:
5086 if (nb_option_roms >= MAX_OPTION_ROMS) {
5087 fprintf(stderr, "Too many option ROMs\n");
5088 exit(1);
5089 }
5090 option_rom[nb_option_roms] = optarg;
5091 nb_option_roms++;
5092 break;
8e71621f
PB
5093 case QEMU_OPTION_semihosting:
5094 semihosting_enabled = 1;
5095 break;
c35734b2
TS
5096 case QEMU_OPTION_name:
5097 qemu_name = optarg;
5098 break;
95efd11c 5099#if defined(TARGET_SPARC) || defined(TARGET_PPC)
66508601
BS
5100 case QEMU_OPTION_prom_env:
5101 if (nb_prom_envs >= MAX_PROM_ENVS) {
5102 fprintf(stderr, "Too many prom variables\n");
5103 exit(1);
5104 }
5105 prom_envs[nb_prom_envs] = optarg;
5106 nb_prom_envs++;
5107 break;
2b8f2d41
AZ
5108#endif
5109#ifdef TARGET_ARM
5110 case QEMU_OPTION_old_param:
5111 old_param = 1;
05ebd537 5112 break;
66508601 5113#endif
f3dcfada
TS
5114 case QEMU_OPTION_clock:
5115 configure_alarms(optarg);
5116 break;
7e0af5d0
FB
5117 case QEMU_OPTION_startdate:
5118 {
5119 struct tm tm;
f6503059 5120 time_t rtc_start_date;
7e0af5d0 5121 if (!strcmp(optarg, "now")) {
f6503059 5122 rtc_date_offset = -1;
7e0af5d0
FB
5123 } else {
5124 if (sscanf(optarg, "%d-%d-%dT%d:%d:%d",
5125 &tm.tm_year,
5126 &tm.tm_mon,
5127 &tm.tm_mday,
5128 &tm.tm_hour,
5129 &tm.tm_min,
5130 &tm.tm_sec) == 6) {
5131 /* OK */
5132 } else if (sscanf(optarg, "%d-%d-%d",
5133 &tm.tm_year,
5134 &tm.tm_mon,
5135 &tm.tm_mday) == 3) {
5136 tm.tm_hour = 0;
5137 tm.tm_min = 0;
5138 tm.tm_sec = 0;
5139 } else {
5140 goto date_fail;
5141 }
5142 tm.tm_year -= 1900;
5143 tm.tm_mon--;
3c6b2088 5144 rtc_start_date = mktimegm(&tm);
7e0af5d0
FB
5145 if (rtc_start_date == -1) {
5146 date_fail:
5147 fprintf(stderr, "Invalid date format. Valid format are:\n"
5148 "'now' or '2006-06-17T16:01:21' or '2006-06-17'\n");
5149 exit(1);
5150 }
f6503059 5151 rtc_date_offset = time(NULL) - rtc_start_date;
7e0af5d0
FB
5152 }
5153 }
5154 break;
26a5f13b
FB
5155 case QEMU_OPTION_tb_size:
5156 tb_size = strtol(optarg, NULL, 0);
5157 if (tb_size < 0)
5158 tb_size = 0;
5159 break;
2e70f6ef
PB
5160 case QEMU_OPTION_icount:
5161 use_icount = 1;
5162 if (strcmp(optarg, "auto") == 0) {
5163 icount_time_shift = -1;
5164 } else {
5165 icount_time_shift = strtol(optarg, NULL, 0);
5166 }
5167 break;
5bb7910a
AL
5168 case QEMU_OPTION_incoming:
5169 incoming = optarg;
5170 break;
cd6f1169 5171 }
0824d6fc
FB
5172 }
5173 }
330d0414 5174
7ba1e619
AL
5175#if defined(CONFIG_KVM) && defined(USE_KQEMU)
5176 if (kvm_allowed && kqemu_allowed) {
5177 fprintf(stderr,
5178 "You can not enable both KVM and kqemu at the same time\n");
5179 exit(1);
5180 }
5181#endif
5182
3d878caa 5183 machine->max_cpus = machine->max_cpus ?: 1; /* Default to UP */
b2097003
AL
5184 if (smp_cpus > machine->max_cpus) {
5185 fprintf(stderr, "Number of SMP cpus requested (%d), exceeds max cpus "
5186 "supported by machine `%s' (%d)\n", smp_cpus, machine->name,
5187 machine->max_cpus);
5188 exit(1);
5189 }
5190
bc0129d9
AL
5191 if (nographic) {
5192 if (serial_device_index == 0)
5193 serial_devices[0] = "stdio";
5194 if (parallel_device_index == 0)
5195 parallel_devices[0] = "null";
5196 if (strncmp(monitor_device, "vc", 2) == 0)
5197 monitor_device = "stdio";
9ede2fde
AL
5198 if (virtio_console_index == 0)
5199 virtio_consoles[0] = "null";
bc0129d9
AL
5200 }
5201
71e3ceb8 5202#ifndef _WIN32
71e3ceb8
TS
5203 if (daemonize) {
5204 pid_t pid;
5205
5206 if (pipe(fds) == -1)
5207 exit(1);
5208
5209 pid = fork();
5210 if (pid > 0) {
5211 uint8_t status;
5212 ssize_t len;
5213
5214 close(fds[1]);
5215
5216 again:
93815bc2
TS
5217 len = read(fds[0], &status, 1);
5218 if (len == -1 && (errno == EINTR))
5219 goto again;
5220
5221 if (len != 1)
5222 exit(1);
5223 else if (status == 1) {
5224 fprintf(stderr, "Could not acquire pidfile\n");
5225 exit(1);
5226 } else
5227 exit(0);
71e3ceb8 5228 } else if (pid < 0)
93815bc2 5229 exit(1);
71e3ceb8
TS
5230
5231 setsid();
5232
5233 pid = fork();
5234 if (pid > 0)
5235 exit(0);
5236 else if (pid < 0)
5237 exit(1);
5238
5239 umask(027);
71e3ceb8
TS
5240
5241 signal(SIGTSTP, SIG_IGN);
5242 signal(SIGTTOU, SIG_IGN);
5243 signal(SIGTTIN, SIG_IGN);
5244 }
5245#endif
5246
aa26bb2d 5247 if (pid_file && qemu_create_pidfile(pid_file) != 0) {
93815bc2
TS
5248 if (daemonize) {
5249 uint8_t status = 1;
5250 write(fds[1], &status, 1);
5251 } else
5252 fprintf(stderr, "Could not acquire pid file\n");
5253 exit(1);
5254 }
5255
ff3fbb30
FB
5256#ifdef USE_KQEMU
5257 if (smp_cpus > 1)
5258 kqemu_allowed = 0;
5259#endif
a20dd508 5260 linux_boot = (kernel_filename != NULL);
7317b8ca 5261 net_boot = (boot_devices_bitmap >> ('n' - 'a')) & 0xF;
6c41b272 5262
28c5af54 5263 if (!linux_boot && net_boot == 0 &&
f88e4b91 5264 !machine->nodisk_ok && nb_drives_opt == 0)
15f82208 5265 help(1);
0824d6fc 5266
f8d39c01
TS
5267 if (!linux_boot && *kernel_cmdline != '\0') {
5268 fprintf(stderr, "-append only allowed with -kernel option\n");
5269 exit(1);
5270 }
5271
5272 if (!linux_boot && initrd_filename != NULL) {
5273 fprintf(stderr, "-initrd only allowed with -kernel option\n");
5274 exit(1);
5275 }
5276
96d30e48 5277 /* boot to floppy or the default cd if no hard disk defined yet */
28c5af54 5278 if (!boot_devices[0]) {
e4bcb14c 5279 boot_devices = "cad";
96d30e48 5280 }
b118d61e 5281 setvbuf(stdout, NULL, _IOLBF, 0);
3b46e624 5282
634fce96 5283 init_timers();
7183b4b4
AL
5284 if (init_timer_alarm() < 0) {
5285 fprintf(stderr, "could not initialize alarm timer\n");
5286 exit(1);
5287 }
2e70f6ef
PB
5288 if (use_icount && icount_time_shift < 0) {
5289 use_icount = 2;
5290 /* 125MIPS seems a reasonable initial guess at the guest speed.
5291 It will be corrected fairly quickly anyway. */
5292 icount_time_shift = 3;
5293 init_icount_adjust();
5294 }
634fce96 5295
fd1dff4b
FB
5296#ifdef _WIN32
5297 socket_init();
5298#endif
5299
7c9d8e07
FB
5300 /* init network clients */
5301 if (nb_net_clients == 0) {
5302 /* if no clients, we use a default config */
f441b28b
AL
5303 net_clients[nb_net_clients++] = "nic";
5304#ifdef CONFIG_SLIRP
5305 net_clients[nb_net_clients++] = "user";
5306#endif
c20709aa
FB
5307 }
5308
7c9d8e07 5309 for(i = 0;i < nb_net_clients; i++) {
9ad97e65 5310 if (net_client_parse(net_clients[i]) < 0)
7c9d8e07 5311 exit(1);
702c651c 5312 }
63a01ef8 5313 net_client_check();
f1510b2c 5314
eec85c2a 5315#ifdef TARGET_I386
ed494d87 5316 /* XXX: this should be moved in the PC machine instantiation code */
28c5af54
JM
5317 if (net_boot != 0) {
5318 int netroms = 0;
5319 for (i = 0; i < nb_nics && i < 4; i++) {
eec85c2a
TS
5320 const char *model = nd_table[i].model;
5321 char buf[1024];
28c5af54
JM
5322 if (net_boot & (1 << i)) {
5323 if (model == NULL)
5324 model = "ne2k_pci";
5325 snprintf(buf, sizeof(buf), "%s/pxe-%s.bin", bios_dir, model);
5326 if (get_image_size(buf) > 0) {
5327 if (nb_option_roms >= MAX_OPTION_ROMS) {
5328 fprintf(stderr, "Too many option ROMs\n");
5329 exit(1);
5330 }
5331 option_rom[nb_option_roms] = strdup(buf);
5332 nb_option_roms++;
5333 netroms++;
5334 }
5335 }
eec85c2a 5336 }
28c5af54 5337 if (netroms == 0) {
eec85c2a
TS
5338 fprintf(stderr, "No valid PXE rom found for network device\n");
5339 exit(1);
5340 }
eec85c2a
TS
5341 }
5342#endif
5343
dc72ac14
AZ
5344 /* init the bluetooth world */
5345 for (i = 0; i < nb_bt_opts; i++)
5346 if (bt_parse(bt_opts[i]))
5347 exit(1);
5348
0824d6fc 5349 /* init the memory */
7fb4fdcf
AZ
5350 phys_ram_size = machine->ram_require & ~RAMSIZE_FIXED;
5351
5352 if (machine->ram_require & RAMSIZE_FIXED) {
5353 if (ram_size > 0) {
5354 if (ram_size < phys_ram_size) {
cd940061
AJ
5355 fprintf(stderr, "Machine `%s' requires %llu bytes of memory\n",
5356 machine->name, (unsigned long long) phys_ram_size);
7fb4fdcf
AZ
5357 exit(-1);
5358 }
5359
5360 phys_ram_size = ram_size;
5361 } else
5362 ram_size = phys_ram_size;
5363 } else {
4fc5d071 5364 if (ram_size == 0)
7fb4fdcf
AZ
5365 ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
5366
5367 phys_ram_size += ram_size;
5368 }
9ae02555 5369
d993e026 5370 phys_ram_base = qemu_vmalloc(phys_ram_size);
7f7f9873
FB
5371 if (!phys_ram_base) {
5372 fprintf(stderr, "Could not allocate physical memory\n");
0824d6fc
FB
5373 exit(1);
5374 }
5375
26a5f13b
FB
5376 /* init the dynamic translator */
5377 cpu_exec_init_all(tb_size * 1024 * 1024);
5378
5905b2e5 5379 bdrv_init();
c4b1fcc0 5380
e4bcb14c 5381 /* we always create the cdrom drive, even if no disk is there */
c4b1fcc0 5382
e4bcb14c 5383 if (nb_drives_opt < MAX_DRIVES)
609497ab 5384 drive_add(NULL, CDROM_ALIAS);
c4b1fcc0 5385
9d413d1d 5386 /* we always create at least one floppy */
33e3963e 5387
e4bcb14c 5388 if (nb_drives_opt < MAX_DRIVES)
609497ab 5389 drive_add(NULL, FD_ALIAS, 0);
86f55663 5390
9d413d1d
AZ
5391 /* we always create one sd slot, even if no card is in it */
5392
5393 if (nb_drives_opt < MAX_DRIVES)
609497ab 5394 drive_add(NULL, SD_ALIAS);
9d413d1d 5395
e4bcb14c
TS
5396 /* open the virtual block devices */
5397
5398 for(i = 0; i < nb_drives_opt; i++)
609497ab 5399 if (drive_init(&drives_opt[i], snapshot, machine) == -1)
e4bcb14c 5400 exit(1);
3e3d5815 5401
c88676f8 5402 register_savevm("timer", 0, 2, timer_save, timer_load, NULL);
475e4277 5403 register_savevm_live("ram", 0, 3, ram_save_live, NULL, ram_load, NULL);
8a7ddc38 5404
313aa567 5405 /* terminal init */
740733bb 5406 memset(&display_state, 0, sizeof(display_state));
a20dd508 5407 if (nographic) {
4d3b6f6e
AZ
5408 if (curses) {
5409 fprintf(stderr, "fatal: -nographic can't be used with -curses\n");
5410 exit(1);
5411 }
2ff89790
TS
5412 /* nearly nothing to do */
5413 dumb_display_init(ds);
73fc9742 5414 } else if (vnc_display != NULL) {
71cab5ca
TS
5415 vnc_display_init(ds);
5416 if (vnc_display_open(ds, vnc_display) < 0)
5417 exit(1);
4d3b6f6e
AZ
5418 } else
5419#if defined(CONFIG_CURSES)
5420 if (curses) {
5421 curses_display_init(ds, full_screen);
5422 } else
5423#endif
5424 {
5b0753e0 5425#if defined(CONFIG_SDL)
43523e93 5426 sdl_display_init(ds, full_screen, no_frame);
5b0753e0
FB
5427#elif defined(CONFIG_COCOA)
5428 cocoa_display_init(ds, full_screen);
67276f53
PB
5429#else
5430 dumb_display_init(ds);
313aa567
FB
5431#endif
5432 }
0824d6fc 5433
5b08fc10
AL
5434#ifndef _WIN32
5435 /* must be after terminal init, SDL library changes signal handlers */
5436 termsig_setup();
5437#endif
5438
20d8a3ed
TS
5439 /* Maintain compatibility with multiple stdio monitors */
5440 if (!strcmp(monitor_device,"stdio")) {
5441 for (i = 0; i < MAX_SERIAL_PORTS; i++) {
fd5f393a
PB
5442 const char *devname = serial_devices[i];
5443 if (devname && !strcmp(devname,"mon:stdio")) {
5444 monitor_device = NULL;
20d8a3ed 5445 break;
fd5f393a
PB
5446 } else if (devname && !strcmp(devname,"stdio")) {
5447 monitor_device = NULL;
5448 serial_devices[i] = "mon:stdio";
20d8a3ed
TS
5449 break;
5450 }
5451 }
5452 }
fd5f393a 5453 if (monitor_device) {
5ccfae10 5454 monitor_hd = qemu_chr_open("monitor", monitor_device);
20d8a3ed
TS
5455 if (!monitor_hd) {
5456 fprintf(stderr, "qemu: could not open monitor device '%s'\n", monitor_device);
5457 exit(1);
5458 }
5459 monitor_init(monitor_hd, !nographic);
82c643ff 5460 }
82c643ff 5461
8d11df9e 5462 for(i = 0; i < MAX_SERIAL_PORTS; i++) {
c03b0f0f 5463 const char *devname = serial_devices[i];
fd5f393a 5464 if (devname && strcmp(devname, "none")) {
5ccfae10
AL
5465 char label[32];
5466 snprintf(label, sizeof(label), "serial%d", i);
5467 serial_hds[i] = qemu_chr_open(label, devname);
8d11df9e 5468 if (!serial_hds[i]) {
5fafdf24 5469 fprintf(stderr, "qemu: could not open serial device '%s'\n",
c03b0f0f 5470 devname);
8d11df9e
FB
5471 exit(1);
5472 }
af3a9031 5473 if (strstart(devname, "vc", 0))
7ba1260a 5474 qemu_chr_printf(serial_hds[i], "serial%d console\r\n", i);
8d11df9e 5475 }
82c643ff 5476 }
82c643ff 5477
6508fe59 5478 for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
c03b0f0f 5479 const char *devname = parallel_devices[i];
fd5f393a 5480 if (devname && strcmp(devname, "none")) {
5ccfae10
AL
5481 char label[32];
5482 snprintf(label, sizeof(label), "parallel%d", i);
5483 parallel_hds[i] = qemu_chr_open(label, devname);
6508fe59 5484 if (!parallel_hds[i]) {
5fafdf24 5485 fprintf(stderr, "qemu: could not open parallel device '%s'\n",
c03b0f0f 5486 devname);
6508fe59
FB
5487 exit(1);
5488 }
af3a9031 5489 if (strstart(devname, "vc", 0))
7ba1260a 5490 qemu_chr_printf(parallel_hds[i], "parallel%d console\r\n", i);
6508fe59
FB
5491 }
5492 }
5493
9ede2fde
AL
5494 for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
5495 const char *devname = virtio_consoles[i];
5496 if (devname && strcmp(devname, "none")) {
5497 char label[32];
5498 snprintf(label, sizeof(label), "virtcon%d", i);
5499 virtcon_hds[i] = qemu_chr_open(label, devname);
5500 if (!virtcon_hds[i]) {
5501 fprintf(stderr, "qemu: could not open virtio console '%s'\n",
5502 devname);
5503 exit(1);
5504 }
5505 if (strstart(devname, "vc", 0))
5506 qemu_chr_printf(virtcon_hds[i], "virtio console%d\r\n", i);
5507 }
5508 }
5509
7ba1e619
AL
5510 if (kvm_enabled()) {
5511 int ret;
5512
5513 ret = kvm_init(smp_cpus);
5514 if (ret < 0) {
5515 fprintf(stderr, "failed to initialize KVM\n");
5516 exit(1);
5517 }
5518 }
5519
b881c2c6 5520 machine->init(ram_size, vga_ram_size, boot_devices, ds,
94fc95cd 5521 kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
73332e5c 5522
f5d6f51b
AL
5523 /* Set KVM's vcpu state to qemu's initial CPUState. */
5524 if (kvm_enabled()) {
5525 int ret;
5526
5527 ret = kvm_sync_vcpus();
5528 if (ret < 0) {
5529 fprintf(stderr, "failed to initialize vcpus\n");
5530 exit(1);
5531 }
5532 }
5533
0d92ed30
PB
5534 /* init USB devices */
5535 if (usb_enabled) {
5536 for(i = 0; i < usb_devices_index; i++) {
5537 if (usb_device_add(usb_devices[i]) < 0) {
5538 fprintf(stderr, "Warning: could not add USB device %s\n",
5539 usb_devices[i]);
5540 }
5541 }
5542 }
5543
740733bb
TS
5544 if (display_state.dpy_refresh) {
5545 display_state.gui_timer = qemu_new_timer(rt_clock, gui_update, &display_state);
5546 qemu_mod_timer(display_state.gui_timer, qemu_get_clock(rt_clock));
5547 }
7f7f9873 5548
67b915a5 5549#ifdef CONFIG_GDBSTUB
b4608c04 5550 if (use_gdbstub) {
c636bb66
FB
5551 /* XXX: use standard host:port notation and modify options
5552 accordingly. */
cfc3475a
PB
5553 if (gdbserver_start(gdbstub_port) < 0) {
5554 fprintf(stderr, "qemu: could not open gdbstub device on port '%s'\n",
c636bb66 5555 gdbstub_port);
8a7ddc38 5556 exit(1);
8a7ddc38 5557 }
45669e00 5558 }
67b915a5 5559#endif
45669e00 5560
d63d307f 5561 if (loadvm)
faea38e7 5562 do_loadvm(loadvm);
d63d307f 5563
5bb7910a
AL
5564 if (incoming) {
5565 autostart = 0; /* fixme how to deal with -daemonize */
5566 qemu_start_incoming_migration(incoming);
5567 }
5568
67b915a5 5569 {
5905b2e5 5570 /* XXX: simplify init */
83ab7950 5571 read_passwords();
3c07f8e8 5572 if (autostart) {
5905b2e5
FB
5573 vm_start();
5574 }
0824d6fc 5575 }
ffd843bc 5576
71e3ceb8
TS
5577 if (daemonize) {
5578 uint8_t status = 0;
5579 ssize_t len;
5580 int fd;
5581
5582 again1:
5583 len = write(fds[1], &status, 1);
5584 if (len == -1 && (errno == EINTR))
5585 goto again1;
5586
5587 if (len != 1)
5588 exit(1);
5589
bd54b863 5590 chdir("/");
aeb30be6 5591 TFR(fd = open("/dev/null", O_RDWR));
71e3ceb8
TS
5592 if (fd == -1)
5593 exit(1);
5594
5595 dup2(fd, 0);
5596 dup2(fd, 1);
5597 dup2(fd, 2);
5598
5599 close(fd);
5600 }
5601
8a7ddc38 5602 main_loop();
40c3bac3 5603 quit_timers();
63a01ef8 5604 net_cleanup();
b46a8906 5605
0824d6fc
FB
5606 return 0;
5607}