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