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