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