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