]> git.proxmox.com Git - qemu.git/blame - vl.c
qemu: dynamic nic info index allocation (Marcelo Tosatti)
[qemu.git] / vl.c
CommitLineData
0824d6fc 1/*
80cabfad 2 * QEMU System Emulator
5fafdf24 3 *
68d0f70e 4 * Copyright (c) 2003-2008 Fabrice Bellard
5fafdf24 5 *
1df912cf
FB
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 * THE SOFTWARE.
0824d6fc 23 */
87ecb68b
PB
24#include "hw/hw.h"
25#include "hw/boards.h"
26#include "hw/usb.h"
27#include "hw/pcmcia.h"
28#include "hw/pc.h"
87ecb68b
PB
29#include "hw/audiodev.h"
30#include "hw/isa.h"
2e4d9fb1 31#include "hw/baum.h"
1ae26a18 32#include "hw/bt.h"
87ecb68b
PB
33#include "net.h"
34#include "console.h"
35#include "sysemu.h"
36#include "gdbstub.h"
37#include "qemu-timer.h"
38#include "qemu-char.h"
902b3d5c 39#include "cache-utils.h"
87ecb68b
PB
40#include "block.h"
41#include "audio/audio.h"
5bb7910a 42#include "migration.h"
7ba1e619 43#include "kvm.h"
df751fa8 44#include "balloon.h"
67b915a5 45
0824d6fc 46#include <unistd.h>
0824d6fc
FB
47#include <fcntl.h>
48#include <signal.h>
49#include <time.h>
0824d6fc 50#include <errno.h>
67b915a5 51#include <sys/time.h>
c88676f8 52#include <zlib.h>
67b915a5
FB
53
54#ifndef _WIN32
55#include <sys/times.h>
f1510b2c 56#include <sys/wait.h>
67b915a5 57#include <termios.h>
67b915a5 58#include <sys/mman.h>
f1510b2c 59#include <sys/ioctl.h>
24646c7e 60#include <sys/resource.h>
f1510b2c 61#include <sys/socket.h>
c94c8d64 62#include <netinet/in.h>
24646c7e
BS
63#include <net/if.h>
64#if defined(__NetBSD__)
65#include <net/if_tap.h>
66#endif
67#ifdef __linux__
68#include <linux/if_tun.h>
69#endif
70#include <arpa/inet.h>
9d728e8c 71#include <dirent.h>
7c9d8e07 72#include <netdb.h>
cb4b976b 73#include <sys/select.h>
7d3505c5
FB
74#ifdef _BSD
75#include <sys/stat.h>
24646c7e 76#ifdef __FreeBSD__
7d3505c5 77#include <libutil.h>
24646c7e
BS
78#else
79#include <util.h>
128ab2ff 80#endif
5c40d2bd
TS
81#elif defined (__GLIBC__) && defined (__FreeBSD_kernel__)
82#include <freebsd/stdlib.h>
7d3505c5 83#else
223f0d72 84#ifdef __linux__
7d3505c5
FB
85#include <pty.h>
86#include <malloc.h>
fd872598 87#include <linux/rtc.h>
bd494f4c
TS
88
89/* For the benefit of older linux systems which don't supply it,
90 we use a local copy of hpet.h. */
91/* #include <linux/hpet.h> */
92#include "hpet.h"
93
e57a8c0e 94#include <linux/ppdev.h>
5867c88a 95#include <linux/parport.h>
223f0d72
BS
96#endif
97#ifdef __sun__
d5d10bc3
TS
98#include <sys/stat.h>
99#include <sys/ethernet.h>
100#include <sys/sockio.h>
d5d10bc3
TS
101#include <netinet/arp.h>
102#include <netinet/in.h>
103#include <netinet/in_systm.h>
104#include <netinet/ip.h>
105#include <netinet/ip_icmp.h> // must come after ip.h
106#include <netinet/udp.h>
107#include <netinet/tcp.h>
108#include <net/if.h>
109#include <syslog.h>
110#include <stropts.h>
67b915a5 111#endif
7d3505c5 112#endif
ec530c81 113#endif
67b915a5 114
03ff3ca3
AL
115#include "qemu_socket.h"
116
c20709aa
FB
117#if defined(CONFIG_SLIRP)
118#include "libslirp.h"
119#endif
120
9892fbfb
BS
121#if defined(__OpenBSD__)
122#include <util.h>
123#endif
124
8a16d273
TS
125#if defined(CONFIG_VDE)
126#include <libvdeplug.h>
127#endif
128
67b915a5 129#ifdef _WIN32
7d3505c5 130#include <malloc.h>
67b915a5 131#include <sys/timeb.h>
4fddf62a 132#include <mmsystem.h>
67b915a5
FB
133#define getopt_long_only getopt_long
134#define memalign(align, size) malloc(size)
135#endif
136
73332e5c 137#ifdef CONFIG_SDL
96bcd4f8 138#ifdef __APPLE__
83fb7adf 139#include <SDL/SDL.h>
96bcd4f8 140#endif
73332e5c 141#endif /* CONFIG_SDL */
0824d6fc 142
5b0753e0
FB
143#ifdef CONFIG_COCOA
144#undef main
145#define main qemu_main
146#endif /* CONFIG_COCOA */
147
0824d6fc 148#include "disas.h"
fc01f7e7 149
8a7ddc38 150#include "exec-all.h"
0824d6fc 151
0824d6fc 152//#define DEBUG_UNUSED_IOPORT
fd872598 153//#define DEBUG_IOPORT
9dc63a1e
BS
154//#define DEBUG_NET
155//#define DEBUG_SLIRP
330d0414 156
d12d51d5
AL
157
158#ifdef DEBUG_IOPORT
93fcfe39 159# define LOG_IOPORT(...) qemu_log_mask(CPU_LOG_IOPORT, ## __VA_ARGS__)
d12d51d5
AL
160#else
161# define LOG_IOPORT(...) do { } while (0)
162#endif
163
1bfe856e 164#define DEFAULT_RAM_SIZE 128
313aa567 165
0d92ed30
PB
166/* Max number of USB devices that can be specified on the commandline. */
167#define MAX_USB_CMDLINE 8
168
dc72ac14
AZ
169/* Max number of bluetooth switches on the commandline. */
170#define MAX_BT_CMDLINE 10
171
7dea1da4
FB
172/* XXX: use a two level table to limit memory usage */
173#define MAX_IOPORTS 65536
0824d6fc 174
80cabfad 175const char *bios_dir = CONFIG_QEMU_SHAREDIR;
1192dad8 176const char *bios_name = NULL;
dbed7e40
BS
177static void *ioport_opaque[MAX_IOPORTS];
178static IOPortReadFunc *ioport_read_table[3][MAX_IOPORTS];
179static IOPortWriteFunc *ioport_write_table[3][MAX_IOPORTS];
e4bcb14c 180/* Note: drives_table[MAX_DRIVES] is a dummy block driver if none available
faea38e7 181 to store the VM snapshots */
e4bcb14c
TS
182DriveInfo drives_table[MAX_DRIVES+1];
183int nb_drives;
dbed7e40 184static int vga_ram_size;
cb5a7aa8 185enum vga_retrace_method vga_retrace_method = VGA_RETRACE_DUMB;
3023f332 186static DisplayState *display_state;
a20dd508 187int nographic;
dbed7e40 188static int curses;
7d957bd8 189static int sdl;
3d11d0eb 190const char* keyboard_layout = NULL;
313aa567 191int64_t ticks_per_sec;
00f82b8a 192ram_addr_t ram_size;
c4b1fcc0 193int nb_nics;
7c9d8e07 194NICInfo nd_table[MAX_NICS];
8a7ddc38 195int vm_running;
f6503059
AZ
196static int rtc_utc = 1;
197static int rtc_date_offset = -1; /* -1 means no change */
1bfe856e 198int cirrus_vga_enabled = 1;
c2b3b41a 199int std_vga_enabled = 0;
d34cab9f 200int vmsvga_enabled = 0;
d827220b
FB
201#ifdef TARGET_SPARC
202int graphic_width = 1024;
203int graphic_height = 768;
eee0b836 204int graphic_depth = 8;
d827220b 205#else
1bfe856e
FB
206int graphic_width = 800;
207int graphic_height = 600;
e9b137c2 208int graphic_depth = 15;
eee0b836 209#endif
dbed7e40 210static int full_screen = 0;
634a21f6 211#ifdef CONFIG_SDL
dbed7e40 212static int no_frame = 0;
634a21f6 213#endif
667accab 214int no_quit = 0;
8d11df9e 215CharDriverState *serial_hds[MAX_SERIAL_PORTS];
6508fe59 216CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
9ede2fde 217CharDriverState *virtcon_hds[MAX_VIRTIO_CONSOLES];
a09db21f
FB
218#ifdef TARGET_I386
219int win2k_install_hack = 0;
73822ec8 220int rtc_td_hack = 0;
a09db21f 221#endif
bb36d470 222int usb_enabled = 0;
6a00d601 223int smp_cpus = 1;
73fc9742 224const char *vnc_display;
6515b203 225int acpi_enabled = 1;
16b29ae1 226int no_hpet = 0;
52ca8d6a 227int fd_bootchk = 1;
d1beab82 228int no_reboot = 0;
b2f76161 229int no_shutdown = 0;
9467cd46 230int cursor_hide = 1;
a171fe39 231int graphic_rotate = 0;
71e3ceb8 232int daemonize = 0;
9ae02555
TS
233const char *option_rom[MAX_OPTION_ROMS];
234int nb_option_roms;
8e71621f 235int semihosting_enabled = 0;
2b8f2d41
AZ
236#ifdef TARGET_ARM
237int old_param = 0;
238#endif
c35734b2 239const char *qemu_name;
3780e197 240int alt_grab = 0;
95efd11c 241#if defined(TARGET_SPARC) || defined(TARGET_PPC)
66508601
BS
242unsigned int nb_prom_envs = 0;
243const char *prom_envs[MAX_PROM_ENVS];
244#endif
dbed7e40
BS
245static int nb_drives_opt;
246static struct drive_opt {
609497ab
AZ
247 const char *file;
248 char opt[1024];
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
f60d39bc 2185int drive_get_index(BlockInterfaceType type, int bus, int unit)
e4bcb14c
TS
2186{
2187 int index;
2188
2189 /* seek interface, bus and unit */
2190
7d5aca9e 2191 for (index = 0; index < MAX_DRIVES; index++)
f60d39bc 2192 if (drives_table[index].type == type &&
e4bcb14c 2193 drives_table[index].bus == bus &&
7d5aca9e
AL
2194 drives_table[index].unit == unit &&
2195 drives_table[index].used)
e4bcb14c
TS
2196 return index;
2197
2198 return -1;
2199}
2200
f60d39bc 2201int drive_get_max_bus(BlockInterfaceType type)
e4bcb14c
TS
2202{
2203 int max_bus;
2204 int index;
2205
2206 max_bus = -1;
2207 for (index = 0; index < nb_drives; index++) {
f60d39bc 2208 if(drives_table[index].type == type &&
e4bcb14c
TS
2209 drives_table[index].bus > max_bus)
2210 max_bus = drives_table[index].bus;
2211 }
2212 return max_bus;
2213}
2214
fa879c64
AL
2215const char *drive_get_serial(BlockDriverState *bdrv)
2216{
2217 int index;
2218
2219 for (index = 0; index < nb_drives; index++)
2220 if (drives_table[index].bdrv == bdrv)
2221 return drives_table[index].serial;
2222
2223 return "\0";
2224}
2225
428c5705
AL
2226BlockInterfaceErrorAction drive_get_onerror(BlockDriverState *bdrv)
2227{
2228 int index;
2229
2230 for (index = 0; index < nb_drives; index++)
2231 if (drives_table[index].bdrv == bdrv)
2232 return drives_table[index].onerror;
2233
2234 return BLOCK_ERR_REPORT;
2235}
2236
a1620fac
AJ
2237static void bdrv_format_print(void *opaque, const char *name)
2238{
2239 fprintf(stderr, " %s", name);
2240}
2241
609497ab
AZ
2242static int drive_init(struct drive_opt *arg, int snapshot,
2243 QEMUMachine *machine)
e4bcb14c
TS
2244{
2245 char buf[128];
2246 char file[1024];
c8522bdf 2247 char devname[128];
fa879c64 2248 char serial[21];
c8522bdf 2249 const char *mediastr = "";
f60d39bc 2250 BlockInterfaceType type;
e4bcb14c
TS
2251 enum { MEDIA_DISK, MEDIA_CDROM } media;
2252 int bus_id, unit_id;
2253 int cyls, heads, secs, translation;
2254 BlockDriverState *bdrv;
1e72d3b7 2255 BlockDriver *drv = NULL;
e4bcb14c
TS
2256 int max_devs;
2257 int index;
33f00271 2258 int cache;
428c5705 2259 int bdrv_flags, onerror;
7d5aca9e 2260 int drives_table_idx;
609497ab 2261 char *str = arg->opt;
7ccfb2eb
BS
2262 static const char * const params[] = { "bus", "unit", "if", "index",
2263 "cyls", "heads", "secs", "trans",
2264 "media", "snapshot", "file",
428c5705
AL
2265 "cache", "format", "serial", "werror",
2266 NULL };
e4bcb14c
TS
2267
2268 if (check_params(buf, sizeof(buf), params, str) < 0) {
ff993638 2269 fprintf(stderr, "qemu: unknown parameter '%s' in '%s'\n",
e4bcb14c
TS
2270 buf, str);
2271 return -1;
2272 }
2273
2274 file[0] = 0;
2275 cyls = heads = secs = 0;
2276 bus_id = 0;
2277 unit_id = -1;
2278 translation = BIOS_ATA_TRANSLATION_AUTO;
2279 index = -1;
4dc822d7 2280 cache = 3;
e4bcb14c 2281
c9b1ae2c 2282 if (machine->use_scsi) {
f60d39bc 2283 type = IF_SCSI;
e4bcb14c 2284 max_devs = MAX_SCSI_DEVS;
363a37d5 2285 pstrcpy(devname, sizeof(devname), "scsi");
e4bcb14c 2286 } else {
f60d39bc 2287 type = IF_IDE;
e4bcb14c 2288 max_devs = MAX_IDE_DEVS;
363a37d5 2289 pstrcpy(devname, sizeof(devname), "ide");
e4bcb14c
TS
2290 }
2291 media = MEDIA_DISK;
2292
2293 /* extract parameters */
2294
2295 if (get_param_value(buf, sizeof(buf), "bus", str)) {
2296 bus_id = strtol(buf, NULL, 0);
2297 if (bus_id < 0) {
2298 fprintf(stderr, "qemu: '%s' invalid bus id\n", str);
2299 return -1;
2300 }
2301 }
2302
2303 if (get_param_value(buf, sizeof(buf), "unit", str)) {
2304 unit_id = strtol(buf, NULL, 0);
2305 if (unit_id < 0) {
2306 fprintf(stderr, "qemu: '%s' invalid unit id\n", str);
2307 return -1;
2308 }
2309 }
2310
2311 if (get_param_value(buf, sizeof(buf), "if", str)) {
ae45d369 2312 pstrcpy(devname, sizeof(devname), buf);
e4bcb14c 2313 if (!strcmp(buf, "ide")) {
f60d39bc 2314 type = IF_IDE;
e4bcb14c
TS
2315 max_devs = MAX_IDE_DEVS;
2316 } else if (!strcmp(buf, "scsi")) {
f60d39bc 2317 type = IF_SCSI;
e4bcb14c
TS
2318 max_devs = MAX_SCSI_DEVS;
2319 } else if (!strcmp(buf, "floppy")) {
f60d39bc 2320 type = IF_FLOPPY;
e4bcb14c
TS
2321 max_devs = 0;
2322 } else if (!strcmp(buf, "pflash")) {
f60d39bc 2323 type = IF_PFLASH;
e4bcb14c
TS
2324 max_devs = 0;
2325 } else if (!strcmp(buf, "mtd")) {
f60d39bc 2326 type = IF_MTD;
e4bcb14c
TS
2327 max_devs = 0;
2328 } else if (!strcmp(buf, "sd")) {
f60d39bc 2329 type = IF_SD;
e4bcb14c 2330 max_devs = 0;
6e02c38d
AL
2331 } else if (!strcmp(buf, "virtio")) {
2332 type = IF_VIRTIO;
2333 max_devs = 0;
2334 } else {
e4bcb14c
TS
2335 fprintf(stderr, "qemu: '%s' unsupported bus type '%s'\n", str, buf);
2336 return -1;
2337 }
2338 }
2339
2340 if (get_param_value(buf, sizeof(buf), "index", str)) {
2341 index = strtol(buf, NULL, 0);
2342 if (index < 0) {
2343 fprintf(stderr, "qemu: '%s' invalid index\n", str);
2344 return -1;
2345 }
2346 }
2347
2348 if (get_param_value(buf, sizeof(buf), "cyls", str)) {
2349 cyls = strtol(buf, NULL, 0);
2350 }
2351
2352 if (get_param_value(buf, sizeof(buf), "heads", str)) {
2353 heads = strtol(buf, NULL, 0);
2354 }
2355
2356 if (get_param_value(buf, sizeof(buf), "secs", str)) {
2357 secs = strtol(buf, NULL, 0);
2358 }
2359
2360 if (cyls || heads || secs) {
2361 if (cyls < 1 || cyls > 16383) {
2362 fprintf(stderr, "qemu: '%s' invalid physical cyls number\n", str);
2363 return -1;
2364 }
2365 if (heads < 1 || heads > 16) {
2366 fprintf(stderr, "qemu: '%s' invalid physical heads number\n", str);
2367 return -1;
2368 }
2369 if (secs < 1 || secs > 63) {
2370 fprintf(stderr, "qemu: '%s' invalid physical secs number\n", str);
2371 return -1;
2372 }
2373 }
2374
2375 if (get_param_value(buf, sizeof(buf), "trans", str)) {
2376 if (!cyls) {
2377 fprintf(stderr,
2378 "qemu: '%s' trans must be used with cyls,heads and secs\n",
2379 str);
2380 return -1;
2381 }
2382 if (!strcmp(buf, "none"))
2383 translation = BIOS_ATA_TRANSLATION_NONE;
2384 else if (!strcmp(buf, "lba"))
2385 translation = BIOS_ATA_TRANSLATION_LBA;
2386 else if (!strcmp(buf, "auto"))
2387 translation = BIOS_ATA_TRANSLATION_AUTO;
2388 else {
2389 fprintf(stderr, "qemu: '%s' invalid translation type\n", str);
2390 return -1;
2391 }
2392 }
2393
2394 if (get_param_value(buf, sizeof(buf), "media", str)) {
2395 if (!strcmp(buf, "disk")) {
2396 media = MEDIA_DISK;
2397 } else if (!strcmp(buf, "cdrom")) {
2398 if (cyls || secs || heads) {
2399 fprintf(stderr,
2400 "qemu: '%s' invalid physical CHS format\n", str);
2401 return -1;
2402 }
2403 media = MEDIA_CDROM;
2404 } else {
2405 fprintf(stderr, "qemu: '%s' invalid media\n", str);
2406 return -1;
2407 }
2408 }
2409
2410 if (get_param_value(buf, sizeof(buf), "snapshot", str)) {
2411 if (!strcmp(buf, "on"))
2412 snapshot = 1;
2413 else if (!strcmp(buf, "off"))
2414 snapshot = 0;
2415 else {
2416 fprintf(stderr, "qemu: '%s' invalid snapshot option\n", str);
2417 return -1;
2418 }
2419 }
2420
33f00271 2421 if (get_param_value(buf, sizeof(buf), "cache", str)) {
9f7965c7 2422 if (!strcmp(buf, "off") || !strcmp(buf, "none"))
33f00271 2423 cache = 0;
9f7965c7 2424 else if (!strcmp(buf, "writethrough"))
33f00271 2425 cache = 1;
9f7965c7
AL
2426 else if (!strcmp(buf, "writeback"))
2427 cache = 2;
33f00271
AZ
2428 else {
2429 fprintf(stderr, "qemu: invalid cache option\n");
2430 return -1;
2431 }
2432 }
2433
1e72d3b7 2434 if (get_param_value(buf, sizeof(buf), "format", str)) {
a1620fac
AJ
2435 if (strcmp(buf, "?") == 0) {
2436 fprintf(stderr, "qemu: Supported formats:");
2437 bdrv_iterate_format(bdrv_format_print, NULL);
2438 fprintf(stderr, "\n");
2439 return -1;
2440 }
1e72d3b7
AJ
2441 drv = bdrv_find_format(buf);
2442 if (!drv) {
2443 fprintf(stderr, "qemu: '%s' invalid format\n", buf);
2444 return -1;
2445 }
2446 }
2447
609497ab
AZ
2448 if (arg->file == NULL)
2449 get_param_value(file, sizeof(file), "file", str);
2450 else
2451 pstrcpy(file, sizeof(file), arg->file);
e4bcb14c 2452
fa879c64
AL
2453 if (!get_param_value(serial, sizeof(serial), "serial", str))
2454 memset(serial, 0, sizeof(serial));
2455
428c5705
AL
2456 onerror = BLOCK_ERR_REPORT;
2457 if (get_param_value(buf, sizeof(serial), "werror", str)) {
869a5c6d 2458 if (type != IF_IDE && type != IF_SCSI && type != IF_VIRTIO) {
ea8a5d7f 2459 fprintf(stderr, "werror is no supported by this format\n");
428c5705
AL
2460 return -1;
2461 }
2462 if (!strcmp(buf, "ignore"))
2463 onerror = BLOCK_ERR_IGNORE;
2464 else if (!strcmp(buf, "enospc"))
2465 onerror = BLOCK_ERR_STOP_ENOSPC;
2466 else if (!strcmp(buf, "stop"))
2467 onerror = BLOCK_ERR_STOP_ANY;
2468 else if (!strcmp(buf, "report"))
2469 onerror = BLOCK_ERR_REPORT;
2470 else {
2471 fprintf(stderr, "qemu: '%s' invalid write error action\n", buf);
2472 return -1;
2473 }
2474 }
2475
e4bcb14c
TS
2476 /* compute bus and unit according index */
2477
2478 if (index != -1) {
2479 if (bus_id != 0 || unit_id != -1) {
2480 fprintf(stderr,
2481 "qemu: '%s' index cannot be used with bus and unit\n", str);
2482 return -1;
2483 }
2484 if (max_devs == 0)
2485 {
2486 unit_id = index;
2487 bus_id = 0;
2488 } else {
2489 unit_id = index % max_devs;
2490 bus_id = index / max_devs;
2491 }
2492 }
2493
2494 /* if user doesn't specify a unit_id,
2495 * try to find the first free
2496 */
2497
2498 if (unit_id == -1) {
2499 unit_id = 0;
f60d39bc 2500 while (drive_get_index(type, bus_id, unit_id) != -1) {
e4bcb14c
TS
2501 unit_id++;
2502 if (max_devs && unit_id >= max_devs) {
2503 unit_id -= max_devs;
2504 bus_id++;
2505 }
2506 }
2507 }
2508
2509 /* check unit id */
2510
2511 if (max_devs && unit_id >= max_devs) {
2512 fprintf(stderr, "qemu: '%s' unit %d too big (max is %d)\n",
2513 str, unit_id, max_devs - 1);
2514 return -1;
2515 }
2516
2517 /*
2518 * ignore multiple definitions
2519 */
2520
f60d39bc 2521 if (drive_get_index(type, bus_id, unit_id) != -1)
e4bcb14c
TS
2522 return 0;
2523
2524 /* init */
2525
f60d39bc 2526 if (type == IF_IDE || type == IF_SCSI)
c8522bdf 2527 mediastr = (media == MEDIA_CDROM) ? "-cd" : "-hd";
e6198a70
AZ
2528 if (max_devs)
2529 snprintf(buf, sizeof(buf), "%s%i%s%i",
2530 devname, bus_id, mediastr, unit_id);
2531 else
2532 snprintf(buf, sizeof(buf), "%s%s%i",
2533 devname, mediastr, unit_id);
e4bcb14c 2534 bdrv = bdrv_new(buf);
7d5aca9e
AL
2535 drives_table_idx = drive_get_free_idx();
2536 drives_table[drives_table_idx].bdrv = bdrv;
2537 drives_table[drives_table_idx].type = type;
2538 drives_table[drives_table_idx].bus = bus_id;
2539 drives_table[drives_table_idx].unit = unit_id;
2540 drives_table[drives_table_idx].onerror = onerror;
fa879c64 2541 strncpy(drives_table[nb_drives].serial, serial, sizeof(serial));
e4bcb14c
TS
2542 nb_drives++;
2543
f60d39bc 2544 switch(type) {
e4bcb14c
TS
2545 case IF_IDE:
2546 case IF_SCSI:
2547 switch(media) {
2548 case MEDIA_DISK:
2549 if (cyls != 0) {
2550 bdrv_set_geometry_hint(bdrv, cyls, heads, secs);
2551 bdrv_set_translation_hint(bdrv, translation);
2552 }
2553 break;
2554 case MEDIA_CDROM:
2555 bdrv_set_type_hint(bdrv, BDRV_TYPE_CDROM);
2556 break;
2557 }
2558 break;
2559 case IF_SD:
2560 /* FIXME: This isn't really a floppy, but it's a reasonable
2561 approximation. */
2562 case IF_FLOPPY:
2563 bdrv_set_type_hint(bdrv, BDRV_TYPE_FLOPPY);
2564 break;
2565 case IF_PFLASH:
2566 case IF_MTD:
6e02c38d 2567 case IF_VIRTIO:
e4bcb14c
TS
2568 break;
2569 }
2570 if (!file[0])
2571 return 0;
33f00271 2572 bdrv_flags = 0;
9f7965c7 2573 if (snapshot) {
33f00271 2574 bdrv_flags |= BDRV_O_SNAPSHOT;
9f7965c7
AL
2575 cache = 2; /* always use write-back with snapshot */
2576 }
2577 if (cache == 0) /* no caching */
2578 bdrv_flags |= BDRV_O_NOCACHE;
2579 else if (cache == 2) /* write-back */
2580 bdrv_flags |= BDRV_O_CACHE_WB;
4dc822d7
AL
2581 else if (cache == 3) /* not specified */
2582 bdrv_flags |= BDRV_O_CACHE_DEF;
83ab7950 2583 if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0 || qemu_key_check(bdrv, file)) {
e4bcb14c
TS
2584 fprintf(stderr, "qemu: could not open disk image %s\n",
2585 file);
2586 return -1;
2587 }
2588 return 0;
2589}
2590
a594cfbf
FB
2591/***********************************************************/
2592/* USB devices */
2593
0d92ed30
PB
2594static USBPort *used_usb_ports;
2595static USBPort *free_usb_ports;
2596
2597/* ??? Maybe change this to register a hub to keep track of the topology. */
2598void qemu_register_usb_port(USBPort *port, void *opaque, int index,
2599 usb_attachfn attach)
2600{
2601 port->opaque = opaque;
2602 port->index = index;
2603 port->attach = attach;
2604 port->next = free_usb_ports;
2605 free_usb_ports = port;
2606}
2607
4b096fc9
AL
2608int usb_device_add_dev(USBDevice *dev)
2609{
2610 USBPort *port;
2611
2612 /* Find a USB port to add the device to. */
2613 port = free_usb_ports;
2614 if (!port->next) {
2615 USBDevice *hub;
2616
2617 /* Create a new hub and chain it on. */
2618 free_usb_ports = NULL;
2619 port->next = used_usb_ports;
2620 used_usb_ports = port;
2621
2622 hub = usb_hub_init(VM_USB_HUB_SIZE);
2623 usb_attach(port, hub);
2624 port = free_usb_ports;
2625 }
2626
2627 free_usb_ports = port->next;
2628 port->next = used_usb_ports;
2629 used_usb_ports = port;
2630 usb_attach(port, dev);
2631 return 0;
2632}
2633
a594cfbf
FB
2634static int usb_device_add(const char *devname)
2635{
2636 const char *p;
2637 USBDevice *dev;
a594cfbf 2638
0d92ed30 2639 if (!free_usb_ports)
a594cfbf
FB
2640 return -1;
2641
2642 if (strstart(devname, "host:", &p)) {
2643 dev = usb_host_device_open(p);
a594cfbf
FB
2644 } else if (!strcmp(devname, "mouse")) {
2645 dev = usb_mouse_init();
09b26c5e 2646 } else if (!strcmp(devname, "tablet")) {
47b2d338
AZ
2647 dev = usb_tablet_init();
2648 } else if (!strcmp(devname, "keyboard")) {
2649 dev = usb_keyboard_init();
2e5d83bb
PB
2650 } else if (strstart(devname, "disk:", &p)) {
2651 dev = usb_msd_init(p);
f6d2a316
AZ
2652 } else if (!strcmp(devname, "wacom-tablet")) {
2653 dev = usb_wacom_init();
a7954218
AZ
2654 } else if (strstart(devname, "serial:", &p)) {
2655 dev = usb_serial_init(p);
2e4d9fb1
AJ
2656#ifdef CONFIG_BRLAPI
2657 } else if (!strcmp(devname, "braille")) {
2658 dev = usb_baum_init();
2659#endif
6c9f886c 2660 } else if (strstart(devname, "net:", &p)) {
9ad97e65 2661 int nic = nb_nics;
6c9f886c 2662
9ad97e65 2663 if (net_client_init("nic", p) < 0)
6c9f886c 2664 return -1;
9ad97e65
AZ
2665 nd_table[nic].model = "usb";
2666 dev = usb_net_init(&nd_table[nic]);
dc72ac14
AZ
2667 } else if (!strcmp(devname, "bt") || strstart(devname, "bt:", &p)) {
2668 dev = usb_bt_init(devname[2] ? hci_init(p) :
2669 bt_new_hci(qemu_find_bt_vlan(0)));
a594cfbf
FB
2670 } else {
2671 return -1;
2672 }
0d92ed30
PB
2673 if (!dev)
2674 return -1;
2675
4b096fc9 2676 return usb_device_add_dev(dev);
a594cfbf
FB
2677}
2678
1f3870ab 2679int usb_device_del_addr(int bus_num, int addr)
a594cfbf 2680{
0d92ed30
PB
2681 USBPort *port;
2682 USBPort **lastp;
059809e4 2683 USBDevice *dev;
a594cfbf 2684
0d92ed30 2685 if (!used_usb_ports)
a594cfbf
FB
2686 return -1;
2687
a594cfbf
FB
2688 if (bus_num != 0)
2689 return -1;
0d92ed30
PB
2690
2691 lastp = &used_usb_ports;
2692 port = used_usb_ports;
2693 while (port && port->dev->addr != addr) {
2694 lastp = &port->next;
2695 port = port->next;
a594cfbf 2696 }
0d92ed30
PB
2697
2698 if (!port)
a594cfbf 2699 return -1;
0d92ed30 2700
059809e4 2701 dev = port->dev;
0d92ed30
PB
2702 *lastp = port->next;
2703 usb_attach(port, NULL);
059809e4 2704 dev->handle_destroy(dev);
0d92ed30
PB
2705 port->next = free_usb_ports;
2706 free_usb_ports = port;
a594cfbf
FB
2707 return 0;
2708}
2709
1f3870ab
AL
2710static int usb_device_del(const char *devname)
2711{
2712 int bus_num, addr;
2713 const char *p;
2714
5d0c5750
AL
2715 if (strstart(devname, "host:", &p))
2716 return usb_host_device_close(p);
2717
1f3870ab
AL
2718 if (!used_usb_ports)
2719 return -1;
2720
2721 p = strchr(devname, '.');
2722 if (!p)
2723 return -1;
2724 bus_num = strtoul(devname, NULL, 0);
2725 addr = strtoul(p + 1, NULL, 0);
2726
2727 return usb_device_del_addr(bus_num, addr);
2728}
2729
a594cfbf
FB
2730void do_usb_add(const char *devname)
2731{
4b096fc9 2732 usb_device_add(devname);
a594cfbf
FB
2733}
2734
2735void do_usb_del(const char *devname)
2736{
4b096fc9 2737 usb_device_del(devname);
a594cfbf
FB
2738}
2739
2740void usb_info(void)
2741{
2742 USBDevice *dev;
0d92ed30 2743 USBPort *port;
a594cfbf
FB
2744 const char *speed_str;
2745
0d92ed30 2746 if (!usb_enabled) {
a594cfbf
FB
2747 term_printf("USB support not enabled\n");
2748 return;
2749 }
2750
0d92ed30
PB
2751 for (port = used_usb_ports; port; port = port->next) {
2752 dev = port->dev;
2753 if (!dev)
2754 continue;
2755 switch(dev->speed) {
5fafdf24
TS
2756 case USB_SPEED_LOW:
2757 speed_str = "1.5";
0d92ed30 2758 break;
5fafdf24
TS
2759 case USB_SPEED_FULL:
2760 speed_str = "12";
0d92ed30 2761 break;
5fafdf24
TS
2762 case USB_SPEED_HIGH:
2763 speed_str = "480";
0d92ed30
PB
2764 break;
2765 default:
5fafdf24 2766 speed_str = "?";
0d92ed30 2767 break;
a594cfbf 2768 }
5fafdf24 2769 term_printf(" Device %d.%d, Speed %s Mb/s, Product %s\n",
1f6e24e7 2770 0, dev->addr, speed_str, dev->devname);
a594cfbf
FB
2771 }
2772}
2773
201a51fc
AZ
2774/***********************************************************/
2775/* PCMCIA/Cardbus */
2776
2777static struct pcmcia_socket_entry_s {
2778 struct pcmcia_socket_s *socket;
2779 struct pcmcia_socket_entry_s *next;
2780} *pcmcia_sockets = 0;
2781
2782void pcmcia_socket_register(struct pcmcia_socket_s *socket)
2783{
2784 struct pcmcia_socket_entry_s *entry;
2785
2786 entry = qemu_malloc(sizeof(struct pcmcia_socket_entry_s));
2787 entry->socket = socket;
2788 entry->next = pcmcia_sockets;
2789 pcmcia_sockets = entry;
2790}
2791
2792void pcmcia_socket_unregister(struct pcmcia_socket_s *socket)
2793{
2794 struct pcmcia_socket_entry_s *entry, **ptr;
2795
2796 ptr = &pcmcia_sockets;
2797 for (entry = *ptr; entry; ptr = &entry->next, entry = *ptr)
2798 if (entry->socket == socket) {
2799 *ptr = entry->next;
2800 qemu_free(entry);
2801 }
2802}
2803
2804void pcmcia_info(void)
2805{
2806 struct pcmcia_socket_entry_s *iter;
2807 if (!pcmcia_sockets)
2808 term_printf("No PCMCIA sockets\n");
2809
2810 for (iter = pcmcia_sockets; iter; iter = iter->next)
2811 term_printf("%s: %s\n", iter->socket->slot_string,
2812 iter->socket->attached ? iter->socket->card_string :
2813 "Empty");
2814}
2815
2ff89790 2816/***********************************************************/
3023f332
AL
2817/* register display */
2818
2819void register_displaystate(DisplayState *ds)
2820{
2821 DisplayState **s;
2822 s = &display_state;
2823 while (*s != NULL)
2824 s = &(*s)->next;
2825 ds->next = NULL;
2826 *s = ds;
2827}
2828
2829DisplayState *get_displaystate(void)
2830{
2831 return display_state;
2832}
2833
2ff89790
TS
2834/* dumb display */
2835
8f391ab4 2836static void dumb_display_init(void)
2ff89790 2837{
8f391ab4 2838 DisplayState *ds = qemu_mallocz(sizeof(DisplayState));
7da03b1d 2839 ds->surface = qemu_create_displaysurface(640, 480, 32, 640 * 4);
8f391ab4 2840 register_displaystate(ds);
2ff89790
TS
2841}
2842
8a7ddc38
FB
2843/***********************************************************/
2844/* I/O handling */
0824d6fc 2845
c4b1fcc0
FB
2846#define MAX_IO_HANDLERS 64
2847
2848typedef struct IOHandlerRecord {
2849 int fd;
7c9d8e07
FB
2850 IOCanRWHandler *fd_read_poll;
2851 IOHandler *fd_read;
2852 IOHandler *fd_write;
cafffd40 2853 int deleted;
c4b1fcc0
FB
2854 void *opaque;
2855 /* temporary data */
2856 struct pollfd *ufd;
8a7ddc38 2857 struct IOHandlerRecord *next;
c4b1fcc0
FB
2858} IOHandlerRecord;
2859
8a7ddc38 2860static IOHandlerRecord *first_io_handler;
c4b1fcc0 2861
7c9d8e07
FB
2862/* XXX: fd_read_poll should be suppressed, but an API change is
2863 necessary in the character devices to suppress fd_can_read(). */
5fafdf24
TS
2864int qemu_set_fd_handler2(int fd,
2865 IOCanRWHandler *fd_read_poll,
2866 IOHandler *fd_read,
2867 IOHandler *fd_write,
7c9d8e07 2868 void *opaque)
c4b1fcc0 2869{
7c9d8e07 2870 IOHandlerRecord **pioh, *ioh;
c4b1fcc0 2871
7c9d8e07
FB
2872 if (!fd_read && !fd_write) {
2873 pioh = &first_io_handler;
2874 for(;;) {
2875 ioh = *pioh;
2876 if (ioh == NULL)
2877 break;
2878 if (ioh->fd == fd) {
cafffd40 2879 ioh->deleted = 1;
7c9d8e07
FB
2880 break;
2881 }
2882 pioh = &ioh->next;
2883 }
2884 } else {
2885 for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
2886 if (ioh->fd == fd)
2887 goto found;
2888 }
2889 ioh = qemu_mallocz(sizeof(IOHandlerRecord));
7c9d8e07
FB
2890 ioh->next = first_io_handler;
2891 first_io_handler = ioh;
2892 found:
2893 ioh->fd = fd;
2894 ioh->fd_read_poll = fd_read_poll;
2895 ioh->fd_read = fd_read;
2896 ioh->fd_write = fd_write;
2897 ioh->opaque = opaque;
cafffd40 2898 ioh->deleted = 0;
7c9d8e07 2899 }
c4b1fcc0
FB
2900 return 0;
2901}
2902
5fafdf24
TS
2903int qemu_set_fd_handler(int fd,
2904 IOHandler *fd_read,
2905 IOHandler *fd_write,
7c9d8e07 2906 void *opaque)
8a7ddc38 2907{
7c9d8e07 2908 return qemu_set_fd_handler2(fd, NULL, fd_read, fd_write, opaque);
8a7ddc38
FB
2909}
2910
56f3a5d0 2911#ifdef _WIN32
f331110f
FB
2912/***********************************************************/
2913/* Polling handling */
2914
2915typedef struct PollingEntry {
2916 PollingFunc *func;
2917 void *opaque;
2918 struct PollingEntry *next;
2919} PollingEntry;
2920
2921static PollingEntry *first_polling_entry;
2922
2923int qemu_add_polling_cb(PollingFunc *func, void *opaque)
2924{
2925 PollingEntry **ppe, *pe;
2926 pe = qemu_mallocz(sizeof(PollingEntry));
f331110f
FB
2927 pe->func = func;
2928 pe->opaque = opaque;
2929 for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next);
2930 *ppe = pe;
2931 return 0;
2932}
2933
2934void qemu_del_polling_cb(PollingFunc *func, void *opaque)
2935{
2936 PollingEntry **ppe, *pe;
2937 for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next) {
2938 pe = *ppe;
2939 if (pe->func == func && pe->opaque == opaque) {
2940 *ppe = pe->next;
2941 qemu_free(pe);
2942 break;
2943 }
2944 }
2945}
2946
a18e524a
FB
2947/***********************************************************/
2948/* Wait objects support */
2949typedef struct WaitObjects {
2950 int num;
2951 HANDLE events[MAXIMUM_WAIT_OBJECTS + 1];
2952 WaitObjectFunc *func[MAXIMUM_WAIT_OBJECTS + 1];
2953 void *opaque[MAXIMUM_WAIT_OBJECTS + 1];
2954} WaitObjects;
2955
2956static WaitObjects wait_objects = {0};
3b46e624 2957
a18e524a
FB
2958int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
2959{
2960 WaitObjects *w = &wait_objects;
2961
2962 if (w->num >= MAXIMUM_WAIT_OBJECTS)
2963 return -1;
2964 w->events[w->num] = handle;
2965 w->func[w->num] = func;
2966 w->opaque[w->num] = opaque;
2967 w->num++;
2968 return 0;
2969}
2970
2971void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
2972{
2973 int i, found;
2974 WaitObjects *w = &wait_objects;
2975
2976 found = 0;
2977 for (i = 0; i < w->num; i++) {
2978 if (w->events[i] == handle)
2979 found = 1;
2980 if (found) {
2981 w->events[i] = w->events[i + 1];
2982 w->func[i] = w->func[i + 1];
2983 w->opaque[i] = w->opaque[i + 1];
3b46e624 2984 }
a18e524a
FB
2985 }
2986 if (found)
2987 w->num--;
2988}
2989#endif
2990
8a7ddc38
FB
2991/***********************************************************/
2992/* ram save/restore */
2993
8a7ddc38
FB
2994static int ram_get_page(QEMUFile *f, uint8_t *buf, int len)
2995{
2996 int v;
2997
2998 v = qemu_get_byte(f);
2999 switch(v) {
3000 case 0:
3001 if (qemu_get_buffer(f, buf, len) != len)
3002 return -EIO;
3003 break;
3004 case 1:
3005 v = qemu_get_byte(f);
3006 memset(buf, v, len);
3007 break;
3008 default:
3009 return -EINVAL;
3010 }
871d2f07
AL
3011
3012 if (qemu_file_has_error(f))
3013 return -EIO;
3014
8a7ddc38
FB
3015 return 0;
3016}
3017
c88676f8
FB
3018static int ram_load_v1(QEMUFile *f, void *opaque)
3019{
00f82b8a
AJ
3020 int ret;
3021 ram_addr_t i;
c88676f8
FB
3022
3023 if (qemu_get_be32(f) != phys_ram_size)
3024 return -EINVAL;
3025 for(i = 0; i < phys_ram_size; i+= TARGET_PAGE_SIZE) {
3026 ret = ram_get_page(f, phys_ram_base + i, TARGET_PAGE_SIZE);
3027 if (ret)
3028 return ret;
3029 }
3030 return 0;
3031}
3032
3033#define BDRV_HASH_BLOCK_SIZE 1024
3034#define IOBUF_SIZE 4096
3035#define RAM_CBLOCK_MAGIC 0xfabe
3036
c88676f8
FB
3037typedef struct RamDecompressState {
3038 z_stream zstream;
3039 QEMUFile *f;
3040 uint8_t buf[IOBUF_SIZE];
3041} RamDecompressState;
3042
3043static int ram_decompress_open(RamDecompressState *s, QEMUFile *f)
3044{
3045 int ret;
3046 memset(s, 0, sizeof(*s));
3047 s->f = f;
3048 ret = inflateInit(&s->zstream);
3049 if (ret != Z_OK)
3050 return -1;
3051 return 0;
3052}
3053
3054static int ram_decompress_buf(RamDecompressState *s, uint8_t *buf, int len)
3055{
3056 int ret, clen;
3057
3058 s->zstream.avail_out = len;
3059 s->zstream.next_out = buf;
3060 while (s->zstream.avail_out > 0) {
3061 if (s->zstream.avail_in == 0) {
3062 if (qemu_get_be16(s->f) != RAM_CBLOCK_MAGIC)
3063 return -1;
3064 clen = qemu_get_be16(s->f);
3065 if (clen > IOBUF_SIZE)
3066 return -1;
3067 qemu_get_buffer(s->f, s->buf, clen);
3068 s->zstream.avail_in = clen;
3069 s->zstream.next_in = s->buf;
3070 }
3071 ret = inflate(&s->zstream, Z_PARTIAL_FLUSH);
3072 if (ret != Z_OK && ret != Z_STREAM_END) {
3073 return -1;
3074 }
3075 }
3076 return 0;
3077}
3078
3079static void ram_decompress_close(RamDecompressState *s)
3080{
3081 inflateEnd(&s->zstream);
3082}
3083
475e4277
AL
3084#define RAM_SAVE_FLAG_FULL 0x01
3085#define RAM_SAVE_FLAG_COMPRESS 0x02
3086#define RAM_SAVE_FLAG_MEM_SIZE 0x04
3087#define RAM_SAVE_FLAG_PAGE 0x08
3088#define RAM_SAVE_FLAG_EOS 0x10
3089
3090static int is_dup_page(uint8_t *page, uint8_t ch)
8a7ddc38 3091{
475e4277
AL
3092 uint32_t val = ch << 24 | ch << 16 | ch << 8 | ch;
3093 uint32_t *array = (uint32_t *)page;
3094 int i;
3b46e624 3095
475e4277
AL
3096 for (i = 0; i < (TARGET_PAGE_SIZE / 4); i++) {
3097 if (array[i] != val)
3098 return 0;
3099 }
3100
3101 return 1;
3102}
3103
3104static int ram_save_block(QEMUFile *f)
3105{
3106 static ram_addr_t current_addr = 0;
3107 ram_addr_t saved_addr = current_addr;
3108 ram_addr_t addr = 0;
3109 int found = 0;
3110
3111 while (addr < phys_ram_size) {
3112 if (cpu_physical_memory_get_dirty(current_addr, MIGRATION_DIRTY_FLAG)) {
3113 uint8_t ch;
3114
3115 cpu_physical_memory_reset_dirty(current_addr,
3116 current_addr + TARGET_PAGE_SIZE,
3117 MIGRATION_DIRTY_FLAG);
3118
3119 ch = *(phys_ram_base + current_addr);
3120
3121 if (is_dup_page(phys_ram_base + current_addr, ch)) {
3122 qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_COMPRESS);
3123 qemu_put_byte(f, ch);
3124 } else {
3125 qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_PAGE);
3126 qemu_put_buffer(f, phys_ram_base + current_addr, TARGET_PAGE_SIZE);
c88676f8 3127 }
475e4277
AL
3128
3129 found = 1;
3130 break;
c88676f8 3131 }
475e4277
AL
3132 addr += TARGET_PAGE_SIZE;
3133 current_addr = (saved_addr + addr) % phys_ram_size;
8a7ddc38 3134 }
475e4277
AL
3135
3136 return found;
8a7ddc38
FB
3137}
3138
475e4277
AL
3139static ram_addr_t ram_save_threshold = 10;
3140
3141static ram_addr_t ram_save_remaining(void)
3142{
3143 ram_addr_t addr;
3144 ram_addr_t count = 0;
3145
3146 for (addr = 0; addr < phys_ram_size; addr += TARGET_PAGE_SIZE) {
3147 if (cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
3148 count++;
3149 }
3150
3151 return count;
3152}
3153
3154static int ram_save_live(QEMUFile *f, int stage, void *opaque)
3155{
3156 ram_addr_t addr;
3157
3158 if (stage == 1) {
3159 /* Make sure all dirty bits are set */
3160 for (addr = 0; addr < phys_ram_size; addr += TARGET_PAGE_SIZE) {
3161 if (!cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
3162 cpu_physical_memory_set_dirty(addr);
3163 }
3164
3165 /* Enable dirty memory tracking */
3166 cpu_physical_memory_set_dirty_tracking(1);
3167
3168 qemu_put_be64(f, phys_ram_size | RAM_SAVE_FLAG_MEM_SIZE);
3169 }
3170
3171 while (!qemu_file_rate_limit(f)) {
3172 int ret;
3173
3174 ret = ram_save_block(f);
3175 if (ret == 0) /* no more blocks */
3176 break;
3177 }
3178
3179 /* try transferring iterative blocks of memory */
3180
3181 if (stage == 3) {
3182 cpu_physical_memory_set_dirty_tracking(0);
3183
3184 /* flush all remaining blocks regardless of rate limiting */
3185 while (ram_save_block(f) != 0);
3186 }
3187
3188 qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
3189
3190 return (stage == 2) && (ram_save_remaining() < ram_save_threshold);
3191}
3192
3193static int ram_load_dead(QEMUFile *f, void *opaque)
8a7ddc38 3194{
c88676f8
FB
3195 RamDecompressState s1, *s = &s1;
3196 uint8_t buf[10];
00f82b8a 3197 ram_addr_t i;
8a7ddc38 3198
c88676f8
FB
3199 if (ram_decompress_open(s, f) < 0)
3200 return -EINVAL;
3201 for(i = 0; i < phys_ram_size; i+= BDRV_HASH_BLOCK_SIZE) {
3202 if (ram_decompress_buf(s, buf, 1) < 0) {
3203 fprintf(stderr, "Error while reading ram block header\n");
3204 goto error;
3205 }
3206 if (buf[0] == 0) {
3207 if (ram_decompress_buf(s, phys_ram_base + i, BDRV_HASH_BLOCK_SIZE) < 0) {
00f82b8a 3208 fprintf(stderr, "Error while reading ram block address=0x%08" PRIx64, (uint64_t)i);
c88676f8
FB
3209 goto error;
3210 }
475e4277 3211 } else {
c88676f8
FB
3212 error:
3213 printf("Error block header\n");
3214 return -EINVAL;
3215 }
8a7ddc38 3216 }
c88676f8 3217 ram_decompress_close(s);
475e4277
AL
3218
3219 return 0;
3220}
3221
3222static int ram_load(QEMUFile *f, void *opaque, int version_id)
3223{
3224 ram_addr_t addr;
3225 int flags;
3226
3227 if (version_id == 1)
3228 return ram_load_v1(f, opaque);
3229
3230 if (version_id == 2) {
3231 if (qemu_get_be32(f) != phys_ram_size)
3232 return -EINVAL;
3233 return ram_load_dead(f, opaque);
3234 }
3235
3236 if (version_id != 3)
3237 return -EINVAL;
3238
3239 do {
3240 addr = qemu_get_be64(f);
3241
3242 flags = addr & ~TARGET_PAGE_MASK;
3243 addr &= TARGET_PAGE_MASK;
3244
3245 if (flags & RAM_SAVE_FLAG_MEM_SIZE) {
3246 if (addr != phys_ram_size)
3247 return -EINVAL;
3248 }
3249
3250 if (flags & RAM_SAVE_FLAG_FULL) {
3251 if (ram_load_dead(f, opaque) < 0)
3252 return -EINVAL;
3253 }
3254
3255 if (flags & RAM_SAVE_FLAG_COMPRESS) {
3256 uint8_t ch = qemu_get_byte(f);
3257 memset(phys_ram_base + addr, ch, TARGET_PAGE_SIZE);
3258 } else if (flags & RAM_SAVE_FLAG_PAGE)
3259 qemu_get_buffer(f, phys_ram_base + addr, TARGET_PAGE_SIZE);
3260 } while (!(flags & RAM_SAVE_FLAG_EOS));
3261
8a7ddc38
FB
3262 return 0;
3263}
3264
9e472e10
AL
3265void qemu_service_io(void)
3266{
3267 CPUState *env = cpu_single_env;
3268 if (env) {
3269 cpu_interrupt(env, CPU_INTERRUPT_EXIT);
3270#ifdef USE_KQEMU
3271 if (env->kqemu_enabled) {
3272 kqemu_cpu_interrupt(env);
3273 }
3274#endif
3275 }
3276}
3277
83f64091
FB
3278/***********************************************************/
3279/* bottom halves (can be seen as timers which expire ASAP) */
3280
3281struct QEMUBH {
3282 QEMUBHFunc *cb;
3283 void *opaque;
3284 int scheduled;
1b435b10
AL
3285 int idle;
3286 int deleted;
83f64091
FB
3287 QEMUBH *next;
3288};
3289
3290static QEMUBH *first_bh = NULL;
3291
3292QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque)
3293{
3294 QEMUBH *bh;
3295 bh = qemu_mallocz(sizeof(QEMUBH));
83f64091
FB
3296 bh->cb = cb;
3297 bh->opaque = opaque;
1b435b10
AL
3298 bh->next = first_bh;
3299 first_bh = bh;
83f64091
FB
3300 return bh;
3301}
3302
6eb5733a 3303int qemu_bh_poll(void)
83f64091 3304{
1b435b10 3305 QEMUBH *bh, **bhp;
6eb5733a 3306 int ret;
83f64091 3307
6eb5733a 3308 ret = 0;
1b435b10
AL
3309 for (bh = first_bh; bh; bh = bh->next) {
3310 if (!bh->deleted && bh->scheduled) {
3311 bh->scheduled = 0;
3312 if (!bh->idle)
3313 ret = 1;
3314 bh->idle = 0;
3315 bh->cb(bh->opaque);
3316 }
83f64091 3317 }
1b435b10
AL
3318
3319 /* remove deleted bhs */
3320 bhp = &first_bh;
3321 while (*bhp) {
3322 bh = *bhp;
3323 if (bh->deleted) {
3324 *bhp = bh->next;
3325 qemu_free(bh);
3326 } else
3327 bhp = &bh->next;
3328 }
3329
6eb5733a 3330 return ret;
83f64091
FB
3331}
3332
1b435b10
AL
3333void qemu_bh_schedule_idle(QEMUBH *bh)
3334{
3335 if (bh->scheduled)
3336 return;
3337 bh->scheduled = 1;
3338 bh->idle = 1;
3339}
3340
83f64091
FB
3341void qemu_bh_schedule(QEMUBH *bh)
3342{
3343 CPUState *env = cpu_single_env;
3344 if (bh->scheduled)
3345 return;
3346 bh->scheduled = 1;
1b435b10 3347 bh->idle = 0;
83f64091
FB
3348 /* stop the currently executing CPU to execute the BH ASAP */
3349 if (env) {
3350 cpu_interrupt(env, CPU_INTERRUPT_EXIT);
3351 }
3352}
3353
3354void qemu_bh_cancel(QEMUBH *bh)
3355{
1b435b10 3356 bh->scheduled = 0;
83f64091
FB
3357}
3358
3359void qemu_bh_delete(QEMUBH *bh)
3360{
1b435b10
AL
3361 bh->scheduled = 0;
3362 bh->deleted = 1;
83f64091
FB
3363}
3364
56f3a5d0
AL
3365static void qemu_bh_update_timeout(int *timeout)
3366{
3367 QEMUBH *bh;
3368
3369 for (bh = first_bh; bh; bh = bh->next) {
3370 if (!bh->deleted && bh->scheduled) {
3371 if (bh->idle) {
3372 /* idle bottom halves will be polled at least
3373 * every 10ms */
3374 *timeout = MIN(10, *timeout);
3375 } else {
3376 /* non-idle bottom halves will be executed
3377 * immediately */
3378 *timeout = 0;
3379 break;
3380 }
3381 }
3382 }
3383}
3384
cc1daa40
FB
3385/***********************************************************/
3386/* machine registration */
3387
bdaf78e0 3388static QEMUMachine *first_machine = NULL;
cc1daa40
FB
3389
3390int qemu_register_machine(QEMUMachine *m)
3391{
3392 QEMUMachine **pm;
3393 pm = &first_machine;
3394 while (*pm != NULL)
3395 pm = &(*pm)->next;
3396 m->next = NULL;
3397 *pm = m;
3398 return 0;
3399}
3400
9596ebb7 3401static QEMUMachine *find_machine(const char *name)
cc1daa40
FB
3402{
3403 QEMUMachine *m;
3404
3405 for(m = first_machine; m != NULL; m = m->next) {
3406 if (!strcmp(m->name, name))
3407 return m;
3408 }
3409 return NULL;
3410}
3411
8a7ddc38
FB
3412/***********************************************************/
3413/* main execution loop */
3414
9596ebb7 3415static void gui_update(void *opaque)
8a7ddc38 3416{
7d957bd8 3417 uint64_t interval = GUI_REFRESH_INTERVAL;
740733bb 3418 DisplayState *ds = opaque;
7d957bd8
AL
3419 DisplayChangeListener *dcl = ds->listeners;
3420
3421 dpy_refresh(ds);
3422
3423 while (dcl != NULL) {
3424 if (dcl->gui_timer_interval &&
3425 dcl->gui_timer_interval < interval)
3426 interval = dcl->gui_timer_interval;
3427 dcl = dcl->next;
3428 }
3429 qemu_mod_timer(ds->gui_timer, interval + qemu_get_clock(rt_clock));
8a7ddc38
FB
3430}
3431
9043b62d
BS
3432static void nographic_update(void *opaque)
3433{
3434 uint64_t interval = GUI_REFRESH_INTERVAL;
3435
3436 qemu_mod_timer(nographic_timer, interval + qemu_get_clock(rt_clock));
3437}
3438
0bd48850
FB
3439struct vm_change_state_entry {
3440 VMChangeStateHandler *cb;
3441 void *opaque;
3442 LIST_ENTRY (vm_change_state_entry) entries;
3443};
3444
3445static LIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head;
3446
3447VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
3448 void *opaque)
3449{
3450 VMChangeStateEntry *e;
3451
3452 e = qemu_mallocz(sizeof (*e));
0bd48850
FB
3453
3454 e->cb = cb;
3455 e->opaque = opaque;
3456 LIST_INSERT_HEAD(&vm_change_state_head, e, entries);
3457 return e;
3458}
3459
3460void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
3461{
3462 LIST_REMOVE (e, entries);
3463 qemu_free (e);
3464}
3465
9781e040 3466static void vm_state_notify(int running, int reason)
0bd48850
FB
3467{
3468 VMChangeStateEntry *e;
3469
3470 for (e = vm_change_state_head.lh_first; e; e = e->entries.le_next) {
9781e040 3471 e->cb(e->opaque, running, reason);
0bd48850
FB
3472 }
3473}
3474
8a7ddc38
FB
3475void vm_start(void)
3476{
3477 if (!vm_running) {
3478 cpu_enable_ticks();
3479 vm_running = 1;
9781e040 3480 vm_state_notify(1, 0);
efe75411 3481 qemu_rearm_alarm_timer(alarm_timer);
8a7ddc38
FB
3482 }
3483}
3484
5fafdf24 3485void vm_stop(int reason)
8a7ddc38
FB
3486{
3487 if (vm_running) {
3488 cpu_disable_ticks();
3489 vm_running = 0;
9781e040 3490 vm_state_notify(0, reason);
8a7ddc38
FB
3491 }
3492}
3493
bb0c6722
FB
3494/* reset/shutdown handler */
3495
3496typedef struct QEMUResetEntry {
3497 QEMUResetHandler *func;
3498 void *opaque;
3499 struct QEMUResetEntry *next;
3500} QEMUResetEntry;
3501
3502static QEMUResetEntry *first_reset_entry;
3503static int reset_requested;
3504static int shutdown_requested;
3475187d 3505static int powerdown_requested;
bb0c6722 3506
cf7a2fe2
AJ
3507int qemu_shutdown_requested(void)
3508{
3509 int r = shutdown_requested;
3510 shutdown_requested = 0;
3511 return r;
3512}
3513
3514int qemu_reset_requested(void)
3515{
3516 int r = reset_requested;
3517 reset_requested = 0;
3518 return r;
3519}
3520
3521int qemu_powerdown_requested(void)
3522{
3523 int r = powerdown_requested;
3524 powerdown_requested = 0;
3525 return r;
3526}
3527
bb0c6722
FB
3528void qemu_register_reset(QEMUResetHandler *func, void *opaque)
3529{
3530 QEMUResetEntry **pre, *re;
3531
3532 pre = &first_reset_entry;
3533 while (*pre != NULL)
3534 pre = &(*pre)->next;
3535 re = qemu_mallocz(sizeof(QEMUResetEntry));
3536 re->func = func;
3537 re->opaque = opaque;
3538 re->next = NULL;
3539 *pre = re;
3540}
3541
cf7a2fe2 3542void qemu_system_reset(void)
bb0c6722
FB
3543{
3544 QEMUResetEntry *re;
3545
3546 /* reset all devices */
3547 for(re = first_reset_entry; re != NULL; re = re->next) {
3548 re->func(re->opaque);
3549 }
3550}
3551
3552void qemu_system_reset_request(void)
3553{
d1beab82
FB
3554 if (no_reboot) {
3555 shutdown_requested = 1;
3556 } else {
3557 reset_requested = 1;
3558 }
6a00d601
FB
3559 if (cpu_single_env)
3560 cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
bb0c6722
FB
3561}
3562
3563void qemu_system_shutdown_request(void)
3564{
3565 shutdown_requested = 1;
6a00d601
FB
3566 if (cpu_single_env)
3567 cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
bb0c6722
FB
3568}
3569
3475187d
FB
3570void qemu_system_powerdown_request(void)
3571{
3572 powerdown_requested = 1;
6a00d601
FB
3573 if (cpu_single_env)
3574 cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
bb0c6722
FB
3575}
3576
877cf882 3577#ifdef _WIN32
69d6451c 3578static void host_main_loop_wait(int *timeout)
56f3a5d0
AL
3579{
3580 int ret, ret2, i;
f331110f
FB
3581 PollingEntry *pe;
3582
c4b1fcc0 3583
f331110f
FB
3584 /* XXX: need to suppress polling by better using win32 events */
3585 ret = 0;
3586 for(pe = first_polling_entry; pe != NULL; pe = pe->next) {
3587 ret |= pe->func(pe->opaque);
3588 }
e6b1e558 3589 if (ret == 0) {
a18e524a
FB
3590 int err;
3591 WaitObjects *w = &wait_objects;
3b46e624 3592
56f3a5d0 3593 ret = WaitForMultipleObjects(w->num, w->events, FALSE, *timeout);
a18e524a
FB
3594 if (WAIT_OBJECT_0 + 0 <= ret && ret <= WAIT_OBJECT_0 + w->num - 1) {
3595 if (w->func[ret - WAIT_OBJECT_0])
3596 w->func[ret - WAIT_OBJECT_0](w->opaque[ret - WAIT_OBJECT_0]);
3b46e624 3597
5fafdf24 3598 /* Check for additional signaled events */
e6b1e558 3599 for(i = (ret - WAIT_OBJECT_0 + 1); i < w->num; i++) {
3b46e624 3600
e6b1e558
TS
3601 /* Check if event is signaled */
3602 ret2 = WaitForSingleObject(w->events[i], 0);
3603 if(ret2 == WAIT_OBJECT_0) {
3604 if (w->func[i])
3605 w->func[i](w->opaque[i]);
3606 } else if (ret2 == WAIT_TIMEOUT) {
3607 } else {
3608 err = GetLastError();
3609 fprintf(stderr, "WaitForSingleObject error %d %d\n", i, err);
3b46e624
TS
3610 }
3611 }
a18e524a
FB
3612 } else if (ret == WAIT_TIMEOUT) {
3613 } else {
3614 err = GetLastError();
e6b1e558 3615 fprintf(stderr, "WaitForMultipleObjects error %d %d\n", ret, err);
a18e524a 3616 }
f331110f 3617 }
56f3a5d0
AL
3618
3619 *timeout = 0;
3620}
3621#else
69d6451c 3622static void host_main_loop_wait(int *timeout)
56f3a5d0
AL
3623{
3624}
fd1dff4b 3625#endif
56f3a5d0
AL
3626
3627void main_loop_wait(int timeout)
3628{
3629 IOHandlerRecord *ioh;
3630 fd_set rfds, wfds, xfds;
3631 int ret, nfds;
3632 struct timeval tv;
3633
3634 qemu_bh_update_timeout(&timeout);
3635
3636 host_main_loop_wait(&timeout);
3637
fd1dff4b
FB
3638 /* poll any events */
3639 /* XXX: separate device handlers from system ones */
6abfbd79 3640 nfds = -1;
fd1dff4b
FB
3641 FD_ZERO(&rfds);
3642 FD_ZERO(&wfds);
e035649e 3643 FD_ZERO(&xfds);
fd1dff4b 3644 for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
cafffd40
TS
3645 if (ioh->deleted)
3646 continue;
fd1dff4b
FB
3647 if (ioh->fd_read &&
3648 (!ioh->fd_read_poll ||
3649 ioh->fd_read_poll(ioh->opaque) != 0)) {
3650 FD_SET(ioh->fd, &rfds);
3651 if (ioh->fd > nfds)
3652 nfds = ioh->fd;
3653 }
3654 if (ioh->fd_write) {
3655 FD_SET(ioh->fd, &wfds);
3656 if (ioh->fd > nfds)
3657 nfds = ioh->fd;
3658 }
3659 }
3b46e624 3660
56f3a5d0
AL
3661 tv.tv_sec = timeout / 1000;
3662 tv.tv_usec = (timeout % 1000) * 1000;
3663
e035649e 3664#if defined(CONFIG_SLIRP)
63a01ef8 3665 if (slirp_is_inited()) {
e035649e
FB
3666 slirp_select_fill(&nfds, &rfds, &wfds, &xfds);
3667 }
3668#endif
3669 ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv);
fd1dff4b 3670 if (ret > 0) {
cafffd40
TS
3671 IOHandlerRecord **pioh;
3672
3673 for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
6ab43fdc 3674 if (!ioh->deleted && ioh->fd_read && FD_ISSET(ioh->fd, &rfds)) {
fd1dff4b 3675 ioh->fd_read(ioh->opaque);
7c9d8e07 3676 }
6ab43fdc 3677 if (!ioh->deleted && ioh->fd_write && FD_ISSET(ioh->fd, &wfds)) {
fd1dff4b 3678 ioh->fd_write(ioh->opaque);
c4b1fcc0 3679 }
b4608c04 3680 }
cafffd40
TS
3681
3682 /* remove deleted IO handlers */
3683 pioh = &first_io_handler;
3684 while (*pioh) {
3685 ioh = *pioh;
3686 if (ioh->deleted) {
3687 *pioh = ioh->next;
3688 qemu_free(ioh);
5fafdf24 3689 } else
cafffd40
TS
3690 pioh = &ioh->next;
3691 }
fd1dff4b 3692 }
c20709aa 3693#if defined(CONFIG_SLIRP)
63a01ef8 3694 if (slirp_is_inited()) {
e035649e
FB
3695 if (ret < 0) {
3696 FD_ZERO(&rfds);
3697 FD_ZERO(&wfds);
3698 FD_ZERO(&xfds);
c20709aa 3699 }
e035649e 3700 slirp_select_poll(&rfds, &wfds, &xfds);
fd1dff4b 3701 }
e035649e 3702#endif
b4608c04 3703
357c692c
AL
3704 /* vm time timers */
3705 if (vm_running && likely(!(cur_cpu->singlestep_enabled & SSTEP_NOTIMER)))
3706 qemu_run_timers(&active_timers[QEMU_TIMER_VIRTUAL],
3707 qemu_get_clock(vm_clock));
3708
3709 /* real time timers */
3710 qemu_run_timers(&active_timers[QEMU_TIMER_REALTIME],
3711 qemu_get_clock(rt_clock));
3712
423f0742
PB
3713 /* Check bottom-halves last in case any of the earlier events triggered
3714 them. */
3715 qemu_bh_poll();
3b46e624 3716
5905b2e5
FB
3717}
3718
9596ebb7 3719static int main_loop(void)
5905b2e5
FB
3720{
3721 int ret, timeout;
89bfc105
FB
3722#ifdef CONFIG_PROFILER
3723 int64_t ti;
3724#endif
6a00d601 3725 CPUState *env;
5905b2e5 3726
6a00d601 3727 cur_cpu = first_cpu;
ee5605e5 3728 next_cpu = cur_cpu->next_cpu ?: first_cpu;
5905b2e5
FB
3729 for(;;) {
3730 if (vm_running) {
15a76449 3731
15a76449
FB
3732 for(;;) {
3733 /* get next cpu */
ee5605e5 3734 env = next_cpu;
89bfc105
FB
3735#ifdef CONFIG_PROFILER
3736 ti = profile_getclock();
3737#endif
2e70f6ef
PB
3738 if (use_icount) {
3739 int64_t count;
3740 int decr;
3741 qemu_icount -= (env->icount_decr.u16.low + env->icount_extra);
3742 env->icount_decr.u16.low = 0;
3743 env->icount_extra = 0;
3744 count = qemu_next_deadline();
3745 count = (count + (1 << icount_time_shift) - 1)
3746 >> icount_time_shift;
3747 qemu_icount += count;
3748 decr = (count > 0xffff) ? 0xffff : count;
3749 count -= decr;
3750 env->icount_decr.u16.low = decr;
3751 env->icount_extra = count;
3752 }
6a00d601 3753 ret = cpu_exec(env);
89bfc105
FB
3754#ifdef CONFIG_PROFILER
3755 qemu_time += profile_getclock() - ti;
3756#endif
2e70f6ef
PB
3757 if (use_icount) {
3758 /* Fold pending instructions back into the
3759 instruction counter, and clear the interrupt flag. */
3760 qemu_icount -= (env->icount_decr.u16.low
3761 + env->icount_extra);
3762 env->icount_decr.u32 = 0;
3763 env->icount_extra = 0;
3764 }
ee5605e5 3765 next_cpu = env->next_cpu ?: first_cpu;
95b01009 3766 if (event_pending && likely(ret != EXCP_DEBUG)) {
ee5605e5
AZ
3767 ret = EXCP_INTERRUPT;
3768 event_pending = 0;
3769 break;
3770 }
bd967e05
PB
3771 if (ret == EXCP_HLT) {
3772 /* Give the next CPU a chance to run. */
3773 cur_cpu = env;
3774 continue;
3775 }
15a76449
FB
3776 if (ret != EXCP_HALTED)
3777 break;
3778 /* all CPUs are halted ? */
bd967e05 3779 if (env == cur_cpu)
15a76449 3780 break;
15a76449
FB
3781 }
3782 cur_cpu = env;
3783
5905b2e5 3784 if (shutdown_requested) {
3475187d 3785 ret = EXCP_INTERRUPT;
b2f76161
AJ
3786 if (no_shutdown) {
3787 vm_stop(0);
3788 no_shutdown = 0;
3789 }
3790 else
3791 break;
5905b2e5
FB
3792 }
3793 if (reset_requested) {
3794 reset_requested = 0;
3795 qemu_system_reset();
3475187d
FB
3796 ret = EXCP_INTERRUPT;
3797 }
3798 if (powerdown_requested) {
3799 powerdown_requested = 0;
3800 qemu_system_powerdown();
3801 ret = EXCP_INTERRUPT;
5905b2e5 3802 }
95b01009 3803 if (unlikely(ret == EXCP_DEBUG)) {
880a7578 3804 gdb_set_stop_cpu(cur_cpu);
5905b2e5
FB
3805 vm_stop(EXCP_DEBUG);
3806 }
bd967e05 3807 /* If all cpus are halted then wait until the next IRQ */
5905b2e5 3808 /* XXX: use timeout computed from timers */
2e70f6ef
PB
3809 if (ret == EXCP_HALTED) {
3810 if (use_icount) {
3811 int64_t add;
3812 int64_t delta;
3813 /* Advance virtual time to the next event. */
3814 if (use_icount == 1) {
3815 /* When not using an adaptive execution frequency
3816 we tend to get badly out of sync with real time,
bf20dc07 3817 so just delay for a reasonable amount of time. */
2e70f6ef
PB
3818 delta = 0;
3819 } else {
3820 delta = cpu_get_icount() - cpu_get_clock();
3821 }
3822 if (delta > 0) {
3823 /* If virtual time is ahead of real time then just
3824 wait for IO. */
3825 timeout = (delta / 1000000) + 1;
3826 } else {
3827 /* Wait for either IO to occur or the next
3828 timer event. */
3829 add = qemu_next_deadline();
3830 /* We advance the timer before checking for IO.
3831 Limit the amount we advance so that early IO
3832 activity won't get the guest too far ahead. */
3833 if (add > 10000000)
3834 add = 10000000;
3835 delta += add;
3836 add = (add + (1 << icount_time_shift) - 1)
3837 >> icount_time_shift;
3838 qemu_icount += add;
3839 timeout = delta / 1000000;
3840 if (timeout < 0)
3841 timeout = 0;
3842 }
3843 } else {
0a1af395 3844 timeout = 5000;
2e70f6ef
PB
3845 }
3846 } else {
5905b2e5 3847 timeout = 0;
2e70f6ef 3848 }
5905b2e5 3849 } else {
98448f58
BS
3850 if (shutdown_requested) {
3851 ret = EXCP_INTERRUPT;
5b08fc10 3852 break;
98448f58 3853 }
0a1af395 3854 timeout = 5000;
5905b2e5 3855 }
89bfc105
FB
3856#ifdef CONFIG_PROFILER
3857 ti = profile_getclock();
3858#endif
5905b2e5 3859 main_loop_wait(timeout);
89bfc105
FB
3860#ifdef CONFIG_PROFILER
3861 dev_time += profile_getclock() - ti;
3862#endif
b4608c04 3863 }
34865134
FB
3864 cpu_disable_ticks();
3865 return ret;
b4608c04
FB
3866}
3867
15f82208 3868static void help(int exitcode)
0824d6fc 3869{
d2c639d6
BS
3870 /* Please keep in synch with QEMU_OPTION_ enums, qemu_options[]
3871 and qemu-doc.texi */
68d0f70e 3872 printf("QEMU PC emulator version " QEMU_VERSION ", Copyright (c) 2003-2008 Fabrice Bellard\n"
0db63474 3873 "usage: %s [options] [disk_image]\n"
0824d6fc 3874 "\n"
a20dd508 3875 "'disk_image' is a raw hard image image for IDE hard disk 0\n"
fc01f7e7 3876 "\n"
a20dd508 3877 "Standard options:\n"
d2c639d6 3878 "-h or -help display this help and exit\n"
cc1daa40 3879 "-M machine select emulated machine (-M ? for list)\n"
5adb4839 3880 "-cpu cpu select CPU (-cpu ? for list)\n"
d2c639d6 3881 "-smp n set the number of CPUs to 'n' [default=1]\n"
c45886db 3882 "-fda/-fdb file use 'file' as floppy disk 0/1 image\n"
36b486bb
FB
3883 "-hda/-hdb file use 'file' as IDE hard disk 0/1 image\n"
3884 "-hdc/-hdd file use 'file' as IDE hard disk 2/3 image\n"
c4b1fcc0 3885 "-cdrom file use 'file' as IDE cdrom image (cdrom is ide1 master)\n"
a1620fac
AJ
3886 "-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]\n"
3887 " [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off]\n"
fa879c64 3888 " [,cache=writethrough|writeback|none][,format=f][,serial=s]\n"
e4bcb14c 3889 " use 'file' as a drive image\n"
3e3d5815 3890 "-mtdblock file use 'file' as on-board Flash memory image\n"
a1bb27b1 3891 "-sd file use 'file' as SecureDigital card image\n"
86f55663 3892 "-pflash file use 'file' as a parallel flash image\n"
eec85c2a 3893 "-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n)\n"
667accab 3894 "-snapshot write to temporary files instead of disk image files\n"
a00bad7e 3895 "-m megs set virtual RAM size to megs MB [default=%d]\n"
4ca0074c 3896#ifndef _WIN32
667accab 3897 "-k language use keyboard layout (for example \"fr\" for French)\n"
4ca0074c 3898#endif
1d14ffa9 3899#ifdef HAS_AUDIO
1d14ffa9 3900 "-audio-help print list of audio drivers and their options\n"
c0fe3827
FB
3901 "-soundhw c1,... enable audio support\n"
3902 " and only specified sound cards (comma separated list)\n"
3903 " use -soundhw ? to get the list of supported cards\n"
6a36d84e 3904 " use -soundhw all to enable all of them\n"
1d14ffa9 3905#endif
d2c639d6
BS
3906 "-usb enable the USB driver (will be the default soon)\n"
3907 "-usbdevice name add the host or guest USB device 'name'\n"
3908 "-name string set the name of the guest\n"
3909 "-uuid %%08x-%%04x-%%04x-%%04x-%%012x\n"
3910 " specify machine UUID\n"
3911 "\n"
3912 "Display options:\n"
3913 "-nographic disable graphical output and redirect serial I/Os to console\n"
3914#ifdef CONFIG_CURSES
3915 "-curses use a curses/ncurses interface instead of SDL\n"
3916#endif
3917#ifdef CONFIG_SDL
3918 "-no-frame open SDL window without a frame and window decorations\n"
3919 "-alt-grab use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt)\n"
3920 "-no-quit disable SDL window close capability\n"
3921 "-sdl enable SDL\n"
3922#endif
3923 "-portrait rotate graphical output 90 deg left (only PXA LCD)\n"
c2b3b41a 3924 "-vga [std|cirrus|vmware|none]\n"
3893c124 3925 " select video card type\n"
d63d307f 3926 "-full-screen start in full screen\n"
6f7e9aec
FB
3927#if defined(TARGET_PPC) || defined(TARGET_SPARC)
3928 "-g WxH[xDEPTH] Set the initial graphical resolution and depth\n"
bb0c6722 3929#endif
d2c639d6 3930 "-vnc display start a VNC server on display\n"
c4b1fcc0
FB
3931 "\n"
3932 "Network options:\n"
7a9f6e4a 3933 "-net nic[,vlan=n][,macaddr=addr][,model=type][,name=str]\n"
7c9d8e07 3934 " create a new Network Interface Card and connect it to VLAN 'n'\n"
c20709aa 3935#ifdef CONFIG_SLIRP
7a9f6e4a 3936 "-net user[,vlan=n][,name=str][,hostname=host]\n"
115defd1
PB
3937 " connect the user mode network stack to VLAN 'n' and send\n"
3938 " hostname 'host' to DHCP clients\n"
7c9d8e07 3939#endif
7fb843f8 3940#ifdef _WIN32
7a9f6e4a 3941 "-net tap[,vlan=n][,name=str],ifname=name\n"
7fb843f8
FB
3942 " connect the host TAP network interface to VLAN 'n'\n"
3943#else
7a9f6e4a 3944 "-net tap[,vlan=n][,name=str][,fd=h][,ifname=name][,script=file][,downscript=dfile]\n"
b46a8906
TS
3945 " connect the host TAP network interface to VLAN 'n' and use the\n"
3946 " network scripts 'file' (default=%s)\n"
3947 " and 'dfile' (default=%s);\n"
3948 " use '[down]script=no' to disable script execution;\n"
7c9d8e07 3949 " use 'fd=h' to connect to an already opened TAP interface\n"
7fb843f8 3950#endif
7a9f6e4a 3951 "-net socket[,vlan=n][,name=str][,fd=h][,listen=[host]:port][,connect=host:port]\n"
7c9d8e07 3952 " connect the vlan 'n' to another VLAN using a socket connection\n"
7a9f6e4a 3953 "-net socket[,vlan=n][,name=str][,fd=h][,mcast=maddr:port]\n"
3d830459 3954 " connect the vlan 'n' to multicast maddr and port\n"
8a16d273 3955#ifdef CONFIG_VDE
7a9f6e4a 3956 "-net vde[,vlan=n][,name=str][,sock=socketpath][,port=n][,group=groupname][,mode=octalmode]\n"
8a16d273
TS
3957 " connect the vlan 'n' to port 'n' of a vde switch running\n"
3958 " on host and listening for incoming connections on 'socketpath'.\n"
3959 " Use group 'groupname' and mode 'octalmode' to change default\n"
3960 " ownership and permissions for communication port.\n"
3961#endif
7c9d8e07
FB
3962 "-net none use it alone to have zero network devices; if no -net option\n"
3963 " is provided, the default is '-net nic -net user'\n"
7c9d8e07 3964#ifdef CONFIG_SLIRP
0db1137d 3965 "-tftp dir allow tftp access to files in dir [-net user]\n"
47d5d01a 3966 "-bootp file advertise file in BOOTP replies\n"
7c9d8e07
FB
3967#ifndef _WIN32
3968 "-smb dir allow SMB access to files in 'dir' [-net user]\n"
c94c8d64 3969#endif
9bf05444 3970 "-redir [tcp|udp]:host-port:[guest-host]:guest-port\n"
7c9d8e07 3971 " redirect TCP or UDP connections from host to guest [-net user]\n"
c20709aa 3972#endif
a20dd508 3973 "\n"
d2c639d6
BS
3974 "-bt hci,null dumb bluetooth HCI - doesn't respond to commands\n"
3975 "-bt hci,host[:id]\n"
3976 " use host's HCI with the given name\n"
3977 "-bt hci[,vlan=n]\n"
3978 " emulate a standard HCI in virtual scatternet 'n'\n"
3979 "-bt vhci[,vlan=n]\n"
3980 " add host computer to virtual scatternet 'n' using VHCI\n"
3981 "-bt device:dev[,vlan=n]\n"
3982 " emulate a bluetooth device 'dev' in scatternet 'n'\n"
3983 "\n"
3984#ifdef TARGET_I386
3985 "\n"
3986 "i386 target only:\n"
3987 "-win2k-hack use it when installing Windows 2000 to avoid a disk full bug\n"
3988 "-rtc-td-hack use it to fix time drift in Windows ACPI HAL\n"
3989 "-no-fd-bootchk disable boot signature checking for floppy disks\n"
3990 "-no-acpi disable ACPI\n"
3991 "-no-hpet disable HPET\n"
3992#endif
c4b1fcc0 3993 "Linux boot specific:\n"
a20dd508
FB
3994 "-kernel bzImage use 'bzImage' as kernel image\n"
3995 "-append cmdline use 'cmdline' as kernel command line\n"
3996 "-initrd file use 'file' as initial ram disk\n"
fc01f7e7 3997 "\n"
330d0414 3998 "Debug/Expert options:\n"
82c643ff 3999 "-serial dev redirect the serial port to char device 'dev'\n"
6508fe59 4000 "-parallel dev redirect the parallel port to char device 'dev'\n"
d2c639d6
BS
4001 "-monitor dev redirect the monitor to char device 'dev'\n"
4002 "-pidfile file write PID to 'file'\n"
cd6f1169 4003 "-S freeze CPU at startup (use 'c' to start execution)\n"
cfc3475a
PB
4004 "-s wait gdb connection to port\n"
4005 "-p port set gdb connection port [default=%s]\n"
f193c797 4006 "-d item1,... output log to %s (use -d ? for a list of log items)\n"
d2c639d6
BS
4007 "-hdachs c,h,s[,t]\n"
4008 " force hard disk 0 physical geometry and the optional BIOS\n"
46d4767d 4009 " translation (t=none or lba) (usually qemu can guess them)\n"
87b47350 4010 "-L path set the directory for the BIOS, VGA BIOS and keymaps\n"
d2c639d6 4011 "-bios file set the filename for the BIOS\n"
d993e026 4012#ifdef USE_KQEMU
6515b203 4013 "-kernel-kqemu enable KQEMU full virtualization (default is user mode only)\n"
d993e026
FB
4014 "-no-kqemu disable KQEMU kernel module usage\n"
4015#endif
7ba1e619
AL
4016#ifdef CONFIG_KVM
4017 "-enable-kvm enable KVM full virtualization support\n"
bb0c6722 4018#endif
d1beab82 4019 "-no-reboot exit instead of rebooting\n"
b2f76161 4020 "-no-shutdown stop before shutdown\n"
d2c639d6
BS
4021 "-loadvm [tag|id]\n"
4022 " start right away with a saved state (loadvm in monitor)\n"
71e3ceb8
TS
4023#ifndef _WIN32
4024 "-daemonize daemonize QEMU after initializing\n"
4025#endif
9ae02555 4026 "-option-rom rom load a file, rom, into the option ROM space\n"
d2c639d6
BS
4027#if defined(TARGET_SPARC) || defined(TARGET_PPC)
4028 "-prom-env variable=value\n"
4029 " set OpenBIOS nvram variables\n"
66508601 4030#endif
f3dcfada 4031 "-clock force the use of the given methods for timer alarm.\n"
3adda04c 4032 " To see what timers are available use -clock ?\n"
d2c639d6 4033 "-localtime set the real time clock to local time [default=utc]\n"
bce61846 4034 "-startdate select initial date of the clock\n"
2e70f6ef 4035 "-icount [N|auto]\n"
d2c639d6
BS
4036 " enable virtual instruction counter with 2^N clock ticks per instruction\n"
4037 "-echr chr set terminal escape character instead of ctrl-a\n"
4038 "-virtioconsole c\n"
4039 " set virtio console\n"
4040 "-show-cursor show cursor\n"
4041#if defined(TARGET_ARM) || defined(TARGET_M68K)
4042 "-semihosting semihosting mode\n"
4043#endif
4044#if defined(TARGET_ARM)
4045 "-old-param old param mode\n"
4046#endif
4047 "-tb-size n set TB size\n"
4048 "-incoming p prepare for incoming migration, listen on port p\n"
0824d6fc 4049 "\n"
82c643ff 4050 "During emulation, the following keys are useful:\n"
032a8c9e
FB
4051 "ctrl-alt-f toggle full screen\n"
4052 "ctrl-alt-n switch to virtual console 'n'\n"
4053 "ctrl-alt toggle mouse and keyboard grab\n"
82c643ff
FB
4054 "\n"
4055 "When using -nographic, press 'ctrl-a h' to get some help.\n"
4056 ,
0db63474 4057 "qemu",
a00bad7e 4058 DEFAULT_RAM_SIZE,
7c9d8e07 4059#ifndef _WIN32
a00bad7e 4060 DEFAULT_NETWORK_SCRIPT,
b46a8906 4061 DEFAULT_NETWORK_DOWN_SCRIPT,
7c9d8e07 4062#endif
6e44ba7f 4063 DEFAULT_GDBSTUB_PORT,
bce61846 4064 "/tmp/qemu.log");
15f82208 4065 exit(exitcode);
0824d6fc
FB
4066}
4067
cd6f1169
FB
4068#define HAS_ARG 0x0001
4069
4070enum {
d2c639d6
BS
4071 /* Please keep in synch with help, qemu_options[] and
4072 qemu-doc.texi */
4073 /* Standard options: */
cd6f1169 4074 QEMU_OPTION_h,
cc1daa40 4075 QEMU_OPTION_M,
94fc95cd 4076 QEMU_OPTION_cpu,
d2c639d6 4077 QEMU_OPTION_smp,
cd6f1169
FB
4078 QEMU_OPTION_fda,
4079 QEMU_OPTION_fdb,
4080 QEMU_OPTION_hda,
4081 QEMU_OPTION_hdb,
4082 QEMU_OPTION_hdc,
4083 QEMU_OPTION_hdd,
4084 QEMU_OPTION_cdrom,
d2c639d6 4085 QEMU_OPTION_drive,
3e3d5815 4086 QEMU_OPTION_mtdblock,
a1bb27b1 4087 QEMU_OPTION_sd,
86f55663 4088 QEMU_OPTION_pflash,
cd6f1169
FB
4089 QEMU_OPTION_boot,
4090 QEMU_OPTION_snapshot,
4091 QEMU_OPTION_m,
d2c639d6 4092 QEMU_OPTION_k,
1d14ffa9
FB
4093 QEMU_OPTION_audio_help,
4094 QEMU_OPTION_soundhw,
d2c639d6
BS
4095 QEMU_OPTION_usb,
4096 QEMU_OPTION_usbdevice,
4097 QEMU_OPTION_name,
4098 QEMU_OPTION_uuid,
cd6f1169 4099
d2c639d6
BS
4100 /* Display options: */
4101 QEMU_OPTION_nographic,
4102 QEMU_OPTION_curses,
4103 QEMU_OPTION_no_frame,
4104 QEMU_OPTION_alt_grab,
4105 QEMU_OPTION_no_quit,
4106 QEMU_OPTION_sdl,
4107 QEMU_OPTION_portrait,
4108 QEMU_OPTION_vga,
4109 QEMU_OPTION_full_screen,
4110 QEMU_OPTION_g,
4111 QEMU_OPTION_vnc,
4112
4113 /* Network options: */
7c9d8e07 4114 QEMU_OPTION_net,
c7f74643 4115 QEMU_OPTION_tftp,
47d5d01a 4116 QEMU_OPTION_bootp,
9d728e8c 4117 QEMU_OPTION_smb,
9bf05444 4118 QEMU_OPTION_redir,
dc72ac14 4119 QEMU_OPTION_bt,
cd6f1169 4120
d2c639d6
BS
4121 /* i386 target only: */
4122 QEMU_OPTION_win2k_hack,
4123 QEMU_OPTION_rtc_td_hack,
4124 QEMU_OPTION_no_fd_bootchk,
4125 QEMU_OPTION_no_acpi,
4126 QEMU_OPTION_no_hpet,
4127
4128 /* Linux boot specific: */
cd6f1169
FB
4129 QEMU_OPTION_kernel,
4130 QEMU_OPTION_append,
4131 QEMU_OPTION_initrd,
4132
d2c639d6
BS
4133 /* Debug/Expert options: */
4134 QEMU_OPTION_serial,
4135 QEMU_OPTION_parallel,
4136 QEMU_OPTION_monitor,
4137 QEMU_OPTION_pidfile,
cd6f1169
FB
4138 QEMU_OPTION_S,
4139 QEMU_OPTION_s,
4140 QEMU_OPTION_p,
4141 QEMU_OPTION_d,
4142 QEMU_OPTION_hdachs,
4143 QEMU_OPTION_L,
1192dad8 4144 QEMU_OPTION_bios,
89bfc105 4145 QEMU_OPTION_kernel_kqemu,
d2c639d6 4146 QEMU_OPTION_no_kqemu,
7ba1e619 4147 QEMU_OPTION_enable_kvm,
d1beab82 4148 QEMU_OPTION_no_reboot,
b2f76161 4149 QEMU_OPTION_no_shutdown,
d2c639d6 4150 QEMU_OPTION_loadvm,
71e3ceb8 4151 QEMU_OPTION_daemonize,
9ae02555 4152 QEMU_OPTION_option_rom,
66508601 4153 QEMU_OPTION_prom_env,
f3dcfada 4154 QEMU_OPTION_clock,
d2c639d6 4155 QEMU_OPTION_localtime,
7e0af5d0 4156 QEMU_OPTION_startdate,
2e70f6ef 4157 QEMU_OPTION_icount,
d2c639d6
BS
4158 QEMU_OPTION_echr,
4159 QEMU_OPTION_virtiocon,
4160 QEMU_OPTION_show_cursor,
4161 QEMU_OPTION_semihosting,
4162 QEMU_OPTION_old_param,
4163 QEMU_OPTION_tb_size,
5bb7910a 4164 QEMU_OPTION_incoming,
cd6f1169
FB
4165};
4166
4167typedef struct QEMUOption {
4168 const char *name;
4169 int flags;
4170 int index;
4171} QEMUOption;
4172
dbed7e40 4173static const QEMUOption qemu_options[] = {
d2c639d6
BS
4174 /* Please keep in synch with help, QEMU_OPTION_ enums, and
4175 qemu-doc.texi */
4176 /* Standard options: */
cd6f1169 4177 { "h", 0, QEMU_OPTION_h },
64423fb2 4178 { "help", 0, QEMU_OPTION_h },
cc1daa40 4179 { "M", HAS_ARG, QEMU_OPTION_M },
94fc95cd 4180 { "cpu", HAS_ARG, QEMU_OPTION_cpu },
d2c639d6 4181 { "smp", HAS_ARG, QEMU_OPTION_smp },
cd6f1169
FB
4182 { "fda", HAS_ARG, QEMU_OPTION_fda },
4183 { "fdb", HAS_ARG, QEMU_OPTION_fdb },
4184 { "hda", HAS_ARG, QEMU_OPTION_hda },
4185 { "hdb", HAS_ARG, QEMU_OPTION_hdb },
4186 { "hdc", HAS_ARG, QEMU_OPTION_hdc },
4187 { "hdd", HAS_ARG, QEMU_OPTION_hdd },
4188 { "cdrom", HAS_ARG, QEMU_OPTION_cdrom },
d2c639d6 4189 { "drive", HAS_ARG, QEMU_OPTION_drive },
3e3d5815 4190 { "mtdblock", HAS_ARG, QEMU_OPTION_mtdblock },
a1bb27b1 4191 { "sd", HAS_ARG, QEMU_OPTION_sd },
86f55663 4192 { "pflash", HAS_ARG, QEMU_OPTION_pflash },
cd6f1169
FB
4193 { "boot", HAS_ARG, QEMU_OPTION_boot },
4194 { "snapshot", 0, QEMU_OPTION_snapshot },
4195 { "m", HAS_ARG, QEMU_OPTION_m },
d2c639d6 4196#ifndef _WIN32
3d11d0eb 4197 { "k", HAS_ARG, QEMU_OPTION_k },
d2c639d6 4198#endif
1d14ffa9 4199#ifdef HAS_AUDIO
1d14ffa9
FB
4200 { "audio-help", 0, QEMU_OPTION_audio_help },
4201 { "soundhw", HAS_ARG, QEMU_OPTION_soundhw },
4202#endif
d2c639d6
BS
4203 { "usb", 0, QEMU_OPTION_usb },
4204 { "usbdevice", HAS_ARG, QEMU_OPTION_usbdevice },
4205 { "name", HAS_ARG, QEMU_OPTION_name },
4206 { "uuid", HAS_ARG, QEMU_OPTION_uuid },
4207
4208 /* Display options: */
4209 { "nographic", 0, QEMU_OPTION_nographic },
4210#ifdef CONFIG_CURSES
4211 { "curses", 0, QEMU_OPTION_curses },
4212#endif
4213#ifdef CONFIG_SDL
4214 { "no-frame", 0, QEMU_OPTION_no_frame },
4215 { "alt-grab", 0, QEMU_OPTION_alt_grab },
4216 { "no-quit", 0, QEMU_OPTION_no_quit },
4217 { "sdl", 0, QEMU_OPTION_sdl },
4218#endif
4219 { "portrait", 0, QEMU_OPTION_portrait },
4220 { "vga", HAS_ARG, QEMU_OPTION_vga },
4221 { "full-screen", 0, QEMU_OPTION_full_screen },
4222#if defined(TARGET_PPC) || defined(TARGET_SPARC)
4223 { "g", 1, QEMU_OPTION_g },
4224#endif
4225 { "vnc", HAS_ARG, QEMU_OPTION_vnc },
cd6f1169 4226
d2c639d6 4227 /* Network options: */
7c9d8e07 4228 { "net", HAS_ARG, QEMU_OPTION_net},
158156d1 4229#ifdef CONFIG_SLIRP
c7f74643 4230 { "tftp", HAS_ARG, QEMU_OPTION_tftp },
47d5d01a 4231 { "bootp", HAS_ARG, QEMU_OPTION_bootp },
c94c8d64 4232#ifndef _WIN32
9d728e8c 4233 { "smb", HAS_ARG, QEMU_OPTION_smb },
c94c8d64 4234#endif
9bf05444 4235 { "redir", HAS_ARG, QEMU_OPTION_redir },
158156d1 4236#endif
dc72ac14 4237 { "bt", HAS_ARG, QEMU_OPTION_bt },
d2c639d6
BS
4238#ifdef TARGET_I386
4239 /* i386 target only: */
4240 { "win2k-hack", 0, QEMU_OPTION_win2k_hack },
4241 { "rtc-td-hack", 0, QEMU_OPTION_rtc_td_hack },
4242 { "no-fd-bootchk", 0, QEMU_OPTION_no_fd_bootchk },
4243 { "no-acpi", 0, QEMU_OPTION_no_acpi },
4244 { "no-hpet", 0, QEMU_OPTION_no_hpet },
4245#endif
cd6f1169 4246
d2c639d6 4247 /* Linux boot specific: */
cd6f1169
FB
4248 { "kernel", HAS_ARG, QEMU_OPTION_kernel },
4249 { "append", HAS_ARG, QEMU_OPTION_append },
4250 { "initrd", HAS_ARG, QEMU_OPTION_initrd },
4251
d2c639d6
BS
4252 /* Debug/Expert options: */
4253 { "serial", HAS_ARG, QEMU_OPTION_serial },
4254 { "parallel", HAS_ARG, QEMU_OPTION_parallel },
4255 { "monitor", HAS_ARG, QEMU_OPTION_monitor },
4256 { "pidfile", HAS_ARG, QEMU_OPTION_pidfile },
cd6f1169
FB
4257 { "S", 0, QEMU_OPTION_S },
4258 { "s", 0, QEMU_OPTION_s },
4259 { "p", HAS_ARG, QEMU_OPTION_p },
4260 { "d", HAS_ARG, QEMU_OPTION_d },
4261 { "hdachs", HAS_ARG, QEMU_OPTION_hdachs },
4262 { "L", HAS_ARG, QEMU_OPTION_L },
1192dad8 4263 { "bios", HAS_ARG, QEMU_OPTION_bios },
d993e026 4264#ifdef USE_KQEMU
89bfc105 4265 { "kernel-kqemu", 0, QEMU_OPTION_kernel_kqemu },
d2c639d6 4266 { "no-kqemu", 0, QEMU_OPTION_no_kqemu },
d993e026 4267#endif
7ba1e619
AL
4268#ifdef CONFIG_KVM
4269 { "enable-kvm", 0, QEMU_OPTION_enable_kvm },
4270#endif
d2c639d6
BS
4271 { "no-reboot", 0, QEMU_OPTION_no_reboot },
4272 { "no-shutdown", 0, QEMU_OPTION_no_shutdown },
4273 { "loadvm", HAS_ARG, QEMU_OPTION_loadvm },
4274 { "daemonize", 0, QEMU_OPTION_daemonize },
4275 { "option-rom", HAS_ARG, QEMU_OPTION_option_rom },
4276#if defined(TARGET_SPARC) || defined(TARGET_PPC)
4277 { "prom-env", HAS_ARG, QEMU_OPTION_prom_env },
77d4bc34 4278#endif
d2c639d6 4279 { "clock", HAS_ARG, QEMU_OPTION_clock },
ee22c2f7 4280 { "localtime", 0, QEMU_OPTION_localtime },
d2c639d6
BS
4281 { "startdate", HAS_ARG, QEMU_OPTION_startdate },
4282 { "icount", HAS_ARG, QEMU_OPTION_icount },
8b6e0729 4283 { "echr", HAS_ARG, QEMU_OPTION_echr },
51ecf136 4284 { "virtioconsole", HAS_ARG, QEMU_OPTION_virtiocon },
9467cd46 4285 { "show-cursor", 0, QEMU_OPTION_show_cursor },
a87295e8 4286#if defined(TARGET_ARM) || defined(TARGET_M68K)
8e71621f 4287 { "semihosting", 0, QEMU_OPTION_semihosting },
2b8f2d41
AZ
4288#endif
4289#if defined(TARGET_ARM)
4290 { "old-param", 0, QEMU_OPTION_old_param },
66508601 4291#endif
26a5f13b 4292 { "tb-size", HAS_ARG, QEMU_OPTION_tb_size },
5bb7910a 4293 { "incoming", HAS_ARG, QEMU_OPTION_incoming },
cd6f1169 4294 { NULL },
fc01f7e7
FB
4295};
4296
5905b2e5
FB
4297/* password input */
4298
2bac6019
AZ
4299int qemu_key_check(BlockDriverState *bs, const char *name)
4300{
4301 char password[256];
4302 int i;
4303
4304 if (!bdrv_is_encrypted(bs))
4305 return 0;
4306
4307 term_printf("%s is encrypted.\n", name);
4308 for(i = 0; i < 3; i++) {
4309 monitor_readline("Password: ", 1, password, sizeof(password));
4310 if (bdrv_set_key(bs, password) == 0)
4311 return 0;
4312 term_printf("invalid password\n");
4313 }
4314 return -EPERM;
4315}
4316
83ab7950
AL
4317static BlockDriverState *get_bdrv(int index)
4318{
4319 if (index > nb_drives)
4320 return NULL;
4321 return drives_table[index].bdrv;
4322}
4323
5905b2e5
FB
4324static void read_passwords(void)
4325{
4326 BlockDriverState *bs;
2bac6019 4327 int i;
5905b2e5 4328
83ab7950
AL
4329 for(i = 0; i < 6; i++) {
4330 bs = get_bdrv(i);
4331 if (bs)
4332 qemu_key_check(bs, bdrv_get_device_name(bs));
5905b2e5
FB
4333 }
4334}
4335
1d14ffa9 4336#ifdef HAS_AUDIO
6a36d84e 4337struct soundhw soundhw[] = {
b00052e4 4338#ifdef HAS_AUDIO_CHOICE
4ce7ff6e 4339#if defined(TARGET_I386) || defined(TARGET_MIPS)
fd06c375
FB
4340 {
4341 "pcspk",
4342 "PC speaker",
4343 0,
4344 1,
4345 { .init_isa = pcspk_audio_init }
4346 },
4347#endif
4c9b53e3 4348
4349#ifdef CONFIG_SB16
6a36d84e
FB
4350 {
4351 "sb16",
4352 "Creative Sound Blaster 16",
4353 0,
4354 1,
4355 { .init_isa = SB16_init }
4356 },
4c9b53e3 4357#endif
6a36d84e 4358
cc53d26d 4359#ifdef CONFIG_CS4231A
4360 {
4361 "cs4231a",
4362 "CS4231A",
4363 0,
4364 1,
4365 { .init_isa = cs4231a_init }
4366 },
4367#endif
4368
1d14ffa9 4369#ifdef CONFIG_ADLIB
6a36d84e
FB
4370 {
4371 "adlib",
1d14ffa9 4372#ifdef HAS_YMF262
6a36d84e 4373 "Yamaha YMF262 (OPL3)",
1d14ffa9 4374#else
6a36d84e 4375 "Yamaha YM3812 (OPL2)",
1d14ffa9 4376#endif
6a36d84e
FB
4377 0,
4378 1,
4379 { .init_isa = Adlib_init }
4380 },
1d14ffa9 4381#endif
6a36d84e 4382
1d14ffa9 4383#ifdef CONFIG_GUS
6a36d84e
FB
4384 {
4385 "gus",
4386 "Gravis Ultrasound GF1",
4387 0,
4388 1,
4389 { .init_isa = GUS_init }
4390 },
1d14ffa9 4391#endif
6a36d84e 4392
4c9b53e3 4393#ifdef CONFIG_AC97
e5c9a13e
AZ
4394 {
4395 "ac97",
4396 "Intel 82801AA AC97 Audio",
4397 0,
4398 0,
4399 { .init_pci = ac97_init }
4400 },
4c9b53e3 4401#endif
e5c9a13e 4402
4c9b53e3 4403#ifdef CONFIG_ES1370
6a36d84e
FB
4404 {
4405 "es1370",
4406 "ENSONIQ AudioPCI ES1370",
4407 0,
4408 0,
4409 { .init_pci = es1370_init }
4410 },
b00052e4 4411#endif
6a36d84e 4412
4c9b53e3 4413#endif /* HAS_AUDIO_CHOICE */
4414
6a36d84e
FB
4415 { NULL, NULL, 0, 0, { NULL } }
4416};
4417
4418static void select_soundhw (const char *optarg)
4419{
4420 struct soundhw *c;
4421
4422 if (*optarg == '?') {
4423 show_valid_cards:
4424
4425 printf ("Valid sound card names (comma separated):\n");
4426 for (c = soundhw; c->name; ++c) {
4427 printf ("%-11s %s\n", c->name, c->descr);
4428 }
4429 printf ("\n-soundhw all will enable all of the above\n");
1d14ffa9
FB
4430 exit (*optarg != '?');
4431 }
4432 else {
6a36d84e 4433 size_t l;
1d14ffa9
FB
4434 const char *p;
4435 char *e;
4436 int bad_card = 0;
4437
6a36d84e
FB
4438 if (!strcmp (optarg, "all")) {
4439 for (c = soundhw; c->name; ++c) {
4440 c->enabled = 1;
4441 }
4442 return;
4443 }
1d14ffa9 4444
6a36d84e 4445 p = optarg;
1d14ffa9
FB
4446 while (*p) {
4447 e = strchr (p, ',');
4448 l = !e ? strlen (p) : (size_t) (e - p);
6a36d84e
FB
4449
4450 for (c = soundhw; c->name; ++c) {
4451 if (!strncmp (c->name, p, l)) {
4452 c->enabled = 1;
1d14ffa9
FB
4453 break;
4454 }
4455 }
6a36d84e
FB
4456
4457 if (!c->name) {
1d14ffa9
FB
4458 if (l > 80) {
4459 fprintf (stderr,
4460 "Unknown sound card name (too big to show)\n");
4461 }
4462 else {
4463 fprintf (stderr, "Unknown sound card name `%.*s'\n",
4464 (int) l, p);
4465 }
4466 bad_card = 1;
4467 }
4468 p += l + (e != NULL);
4469 }
4470
4471 if (bad_card)
4472 goto show_valid_cards;
4473 }
4474}
4475#endif
4476
3893c124 4477static void select_vgahw (const char *p)
4478{
4479 const char *opts;
4480
4481 if (strstart(p, "std", &opts)) {
c2b3b41a 4482 std_vga_enabled = 1;
3893c124 4483 cirrus_vga_enabled = 0;
4484 vmsvga_enabled = 0;
4485 } else if (strstart(p, "cirrus", &opts)) {
4486 cirrus_vga_enabled = 1;
c2b3b41a 4487 std_vga_enabled = 0;
3893c124 4488 vmsvga_enabled = 0;
4489 } else if (strstart(p, "vmware", &opts)) {
4490 cirrus_vga_enabled = 0;
c2b3b41a 4491 std_vga_enabled = 0;
3893c124 4492 vmsvga_enabled = 1;
c2b3b41a
AL
4493 } else if (strstart(p, "none", &opts)) {
4494 cirrus_vga_enabled = 0;
4495 std_vga_enabled = 0;
4496 vmsvga_enabled = 0;
3893c124 4497 } else {
4498 invalid_vga:
4499 fprintf(stderr, "Unknown vga type: %s\n", p);
4500 exit(1);
4501 }
cb5a7aa8 4502 while (*opts) {
4503 const char *nextopt;
4504
4505 if (strstart(opts, ",retrace=", &nextopt)) {
4506 opts = nextopt;
4507 if (strstart(opts, "dumb", &nextopt))
4508 vga_retrace_method = VGA_RETRACE_DUMB;
4509 else if (strstart(opts, "precise", &nextopt))
4510 vga_retrace_method = VGA_RETRACE_PRECISE;
4511 else goto invalid_vga;
4512 } else goto invalid_vga;
4513 opts = nextopt;
4514 }
3893c124 4515}
4516
3587d7e6
FB
4517#ifdef _WIN32
4518static BOOL WINAPI qemu_ctrl_handler(DWORD type)
4519{
4520 exit(STATUS_CONTROL_C_EXIT);
4521 return TRUE;
4522}
4523#endif
4524
8fcb1b90
BS
4525static int qemu_uuid_parse(const char *str, uint8_t *uuid)
4526{
4527 int ret;
4528
4529 if(strlen(str) != 36)
4530 return -1;
4531
4532 ret = sscanf(str, UUID_FMT, &uuid[0], &uuid[1], &uuid[2], &uuid[3],
4533 &uuid[4], &uuid[5], &uuid[6], &uuid[7], &uuid[8], &uuid[9],
4534 &uuid[10], &uuid[11], &uuid[12], &uuid[13], &uuid[14], &uuid[15]);
4535
4536 if(ret != 16)
4537 return -1;
4538
4539 return 0;
4540}
4541
7c9d8e07 4542#define MAX_NET_CLIENTS 32
c20709aa 4543
5b08fc10
AL
4544#ifndef _WIN32
4545
4546static void termsig_handler(int signal)
4547{
4548 qemu_system_shutdown_request();
4549}
4550
6f9e3801 4551static void termsig_setup(void)
5b08fc10
AL
4552{
4553 struct sigaction act;
4554
4555 memset(&act, 0, sizeof(act));
4556 act.sa_handler = termsig_handler;
4557 sigaction(SIGINT, &act, NULL);
4558 sigaction(SIGHUP, &act, NULL);
4559 sigaction(SIGTERM, &act, NULL);
4560}
4561
4562#endif
4563
902b3d5c 4564int main(int argc, char **argv, char **envp)
0824d6fc 4565{
67b915a5 4566#ifdef CONFIG_GDBSTUB
cfc3475a
PB
4567 int use_gdbstub;
4568 const char *gdbstub_port;
67b915a5 4569#endif
28c5af54 4570 uint32_t boot_devices_bitmap = 0;
e4bcb14c 4571 int i;
28c5af54 4572 int snapshot, linux_boot, net_boot;
7f7f9873 4573 const char *initrd_filename;
a20dd508 4574 const char *kernel_filename, *kernel_cmdline;
28c5af54 4575 const char *boot_devices = "";
3023f332 4576 DisplayState *ds;
7d957bd8 4577 DisplayChangeListener *dcl;
46d4767d 4578 int cyls, heads, secs, translation;
fd5f393a 4579 const char *net_clients[MAX_NET_CLIENTS];
7c9d8e07 4580 int nb_net_clients;
dc72ac14
AZ
4581 const char *bt_opts[MAX_BT_CMDLINE];
4582 int nb_bt_opts;
e4bcb14c 4583 int hda_index;
cd6f1169
FB
4584 int optind;
4585 const char *r, *optarg;
4c621805 4586 CharDriverState *monitor_hd = NULL;
fd5f393a
PB
4587 const char *monitor_device;
4588 const char *serial_devices[MAX_SERIAL_PORTS];
8d11df9e 4589 int serial_device_index;
fd5f393a 4590 const char *parallel_devices[MAX_PARALLEL_PORTS];
6508fe59 4591 int parallel_device_index;
9ede2fde
AL
4592 const char *virtio_consoles[MAX_VIRTIO_CONSOLES];
4593 int virtio_console_index;
d63d307f 4594 const char *loadvm = NULL;
cc1daa40 4595 QEMUMachine *machine;
94fc95cd 4596 const char *cpu_model;
fd5f393a 4597 const char *usb_devices[MAX_USB_CMDLINE];
a594cfbf 4598 int usb_devices_index;
71e3ceb8 4599 int fds[2];
26a5f13b 4600 int tb_size;
93815bc2 4601 const char *pid_file = NULL;
41bd639b 4602 int autostart;
5bb7910a 4603 const char *incoming = NULL;
0bd48850 4604
902b3d5c 4605 qemu_cache_utils_init(envp);
4606
0bd48850 4607 LIST_INIT (&vm_change_state_head);
be995c27
FB
4608#ifndef _WIN32
4609 {
4610 struct sigaction act;
4611 sigfillset(&act.sa_mask);
4612 act.sa_flags = 0;
4613 act.sa_handler = SIG_IGN;
4614 sigaction(SIGPIPE, &act, NULL);
4615 }
3587d7e6
FB
4616#else
4617 SetConsoleCtrlHandler(qemu_ctrl_handler, TRUE);
a8e5ac33
FB
4618 /* Note: cpu_interrupt() is currently not SMP safe, so we force
4619 QEMU to run on a single CPU */
4620 {
4621 HANDLE h;
4622 DWORD mask, smask;
4623 int i;
4624 h = GetCurrentProcess();
4625 if (GetProcessAffinityMask(h, &mask, &smask)) {
4626 for(i = 0; i < 32; i++) {
4627 if (mask & (1 << i))
4628 break;
4629 }
4630 if (i != 32) {
4631 mask = 1 << i;
4632 SetProcessAffinityMask(h, mask);
4633 }
4634 }
4635 }
67b915a5 4636#endif
be995c27 4637
cc1daa40
FB
4638 register_machines();
4639 machine = first_machine;
94fc95cd 4640 cpu_model = NULL;
fc01f7e7 4641 initrd_filename = NULL;
4fc5d071 4642 ram_size = 0;
313aa567 4643 vga_ram_size = VGA_RAM_SIZE;
67b915a5 4644#ifdef CONFIG_GDBSTUB
b4608c04 4645 use_gdbstub = 0;
c636bb66 4646 gdbstub_port = DEFAULT_GDBSTUB_PORT;
67b915a5 4647#endif
33e3963e 4648 snapshot = 0;
a20dd508 4649 nographic = 0;
4d3b6f6e 4650 curses = 0;
a20dd508
FB
4651 kernel_filename = NULL;
4652 kernel_cmdline = "";
c4b1fcc0 4653 cyls = heads = secs = 0;
46d4767d 4654 translation = BIOS_ATA_TRANSLATION_AUTO;
c60e08d9 4655 monitor_device = "vc";
c4b1fcc0 4656
c75a823c 4657 serial_devices[0] = "vc:80Cx24C";
8d11df9e 4658 for(i = 1; i < MAX_SERIAL_PORTS; i++)
fd5f393a 4659 serial_devices[i] = NULL;
8d11df9e 4660 serial_device_index = 0;
3b46e624 4661
c75a823c 4662 parallel_devices[0] = "vc:640x480";
6508fe59 4663 for(i = 1; i < MAX_PARALLEL_PORTS; i++)
fd5f393a 4664 parallel_devices[i] = NULL;
6508fe59 4665 parallel_device_index = 0;
3b46e624 4666
9ede2fde
AL
4667 virtio_consoles[0] = "vc:80Cx24C";
4668 for(i = 1; i < MAX_VIRTIO_CONSOLES; i++)
4669 virtio_consoles[i] = NULL;
4670 virtio_console_index = 0;
4671
a594cfbf 4672 usb_devices_index = 0;
3b46e624 4673
7c9d8e07 4674 nb_net_clients = 0;
dc72ac14 4675 nb_bt_opts = 0;
e4bcb14c
TS
4676 nb_drives = 0;
4677 nb_drives_opt = 0;
4678 hda_index = -1;
7c9d8e07
FB
4679
4680 nb_nics = 0;
3b46e624 4681
26a5f13b 4682 tb_size = 0;
41bd639b
BS
4683 autostart= 1;
4684
cd6f1169 4685 optind = 1;
0824d6fc 4686 for(;;) {
cd6f1169 4687 if (optind >= argc)
0824d6fc 4688 break;
cd6f1169
FB
4689 r = argv[optind];
4690 if (r[0] != '-') {
609497ab 4691 hda_index = drive_add(argv[optind++], HD_ALIAS, 0);
cd6f1169
FB
4692 } else {
4693 const QEMUOption *popt;
4694
4695 optind++;
dff5efc8
PB
4696 /* Treat --foo the same as -foo. */
4697 if (r[1] == '-')
4698 r++;
cd6f1169
FB
4699 popt = qemu_options;
4700 for(;;) {
4701 if (!popt->name) {
5fafdf24 4702 fprintf(stderr, "%s: invalid option -- '%s'\n",
cd6f1169
FB
4703 argv[0], r);
4704 exit(1);
4705 }
4706 if (!strcmp(popt->name, r + 1))
4707 break;
4708 popt++;
4709 }
4710 if (popt->flags & HAS_ARG) {
4711 if (optind >= argc) {
4712 fprintf(stderr, "%s: option '%s' requires an argument\n",
4713 argv[0], r);
4714 exit(1);
4715 }
4716 optarg = argv[optind++];
4717 } else {
4718 optarg = NULL;
4719 }
4720
4721 switch(popt->index) {
cc1daa40
FB
4722 case QEMU_OPTION_M:
4723 machine = find_machine(optarg);
4724 if (!machine) {
4725 QEMUMachine *m;
4726 printf("Supported machines are:\n");
4727 for(m = first_machine; m != NULL; m = m->next) {
4728 printf("%-10s %s%s\n",
5fafdf24 4729 m->name, m->desc,
cc1daa40
FB
4730 m == first_machine ? " (default)" : "");
4731 }
15f82208 4732 exit(*optarg != '?');
cc1daa40
FB
4733 }
4734 break;
94fc95cd
JM
4735 case QEMU_OPTION_cpu:
4736 /* hw initialization will check this */
15f82208 4737 if (*optarg == '?') {
c732abe2
JM
4738/* XXX: implement xxx_cpu_list for targets that still miss it */
4739#if defined(cpu_list)
4740 cpu_list(stdout, &fprintf);
94fc95cd 4741#endif
15f82208 4742 exit(0);
94fc95cd
JM
4743 } else {
4744 cpu_model = optarg;
4745 }
4746 break;
cd6f1169 4747 case QEMU_OPTION_initrd:
fc01f7e7
FB
4748 initrd_filename = optarg;
4749 break;
cd6f1169 4750 case QEMU_OPTION_hda:
e4bcb14c 4751 if (cyls == 0)
609497ab 4752 hda_index = drive_add(optarg, HD_ALIAS, 0);
e4bcb14c 4753 else
609497ab 4754 hda_index = drive_add(optarg, HD_ALIAS
e4bcb14c 4755 ",cyls=%d,heads=%d,secs=%d%s",
609497ab 4756 0, cyls, heads, secs,
e4bcb14c
TS
4757 translation == BIOS_ATA_TRANSLATION_LBA ?
4758 ",trans=lba" :
4759 translation == BIOS_ATA_TRANSLATION_NONE ?
4760 ",trans=none" : "");
4761 break;
cd6f1169 4762 case QEMU_OPTION_hdb:
cc1daa40
FB
4763 case QEMU_OPTION_hdc:
4764 case QEMU_OPTION_hdd:
609497ab 4765 drive_add(optarg, HD_ALIAS, popt->index - QEMU_OPTION_hda);
fc01f7e7 4766 break;
e4bcb14c 4767 case QEMU_OPTION_drive:
609497ab 4768 drive_add(NULL, "%s", optarg);
e4bcb14c 4769 break;
3e3d5815 4770 case QEMU_OPTION_mtdblock:
609497ab 4771 drive_add(optarg, MTD_ALIAS);
3e3d5815 4772 break;
a1bb27b1 4773 case QEMU_OPTION_sd:
609497ab 4774 drive_add(optarg, SD_ALIAS);
a1bb27b1 4775 break;
86f55663 4776 case QEMU_OPTION_pflash:
609497ab 4777 drive_add(optarg, PFLASH_ALIAS);
86f55663 4778 break;
cd6f1169 4779 case QEMU_OPTION_snapshot:
33e3963e
FB
4780 snapshot = 1;
4781 break;
cd6f1169 4782 case QEMU_OPTION_hdachs:
330d0414 4783 {
330d0414
FB
4784 const char *p;
4785 p = optarg;
4786 cyls = strtol(p, (char **)&p, 0);
46d4767d
FB
4787 if (cyls < 1 || cyls > 16383)
4788 goto chs_fail;
330d0414
FB
4789 if (*p != ',')
4790 goto chs_fail;
4791 p++;
4792 heads = strtol(p, (char **)&p, 0);
46d4767d
FB
4793 if (heads < 1 || heads > 16)
4794 goto chs_fail;
330d0414
FB
4795 if (*p != ',')
4796 goto chs_fail;
4797 p++;
4798 secs = strtol(p, (char **)&p, 0);
46d4767d
FB
4799 if (secs < 1 || secs > 63)
4800 goto chs_fail;
4801 if (*p == ',') {
4802 p++;
4803 if (!strcmp(p, "none"))
4804 translation = BIOS_ATA_TRANSLATION_NONE;
4805 else if (!strcmp(p, "lba"))
4806 translation = BIOS_ATA_TRANSLATION_LBA;
4807 else if (!strcmp(p, "auto"))
4808 translation = BIOS_ATA_TRANSLATION_AUTO;
4809 else
4810 goto chs_fail;
4811 } else if (*p != '\0') {
c4b1fcc0 4812 chs_fail:
46d4767d
FB
4813 fprintf(stderr, "qemu: invalid physical CHS format\n");
4814 exit(1);
c4b1fcc0 4815 }
e4bcb14c 4816 if (hda_index != -1)
609497ab
AZ
4817 snprintf(drives_opt[hda_index].opt,
4818 sizeof(drives_opt[hda_index].opt),
4819 HD_ALIAS ",cyls=%d,heads=%d,secs=%d%s",
4820 0, cyls, heads, secs,
e4bcb14c
TS
4821 translation == BIOS_ATA_TRANSLATION_LBA ?
4822 ",trans=lba" :
4823 translation == BIOS_ATA_TRANSLATION_NONE ?
4824 ",trans=none" : "");
330d0414
FB
4825 }
4826 break;
cd6f1169 4827 case QEMU_OPTION_nographic:
a20dd508
FB
4828 nographic = 1;
4829 break;
4d3b6f6e
AZ
4830#ifdef CONFIG_CURSES
4831 case QEMU_OPTION_curses:
4832 curses = 1;
4833 break;
4834#endif
a171fe39
AZ
4835 case QEMU_OPTION_portrait:
4836 graphic_rotate = 1;
4837 break;
cd6f1169 4838 case QEMU_OPTION_kernel:
a20dd508
FB
4839 kernel_filename = optarg;
4840 break;
cd6f1169 4841 case QEMU_OPTION_append:
a20dd508 4842 kernel_cmdline = optarg;
313aa567 4843 break;
cd6f1169 4844 case QEMU_OPTION_cdrom:
609497ab 4845 drive_add(optarg, CDROM_ALIAS);
36b486bb 4846 break;
cd6f1169 4847 case QEMU_OPTION_boot:
28c5af54
JM
4848 boot_devices = optarg;
4849 /* We just do some generic consistency checks */
4850 {
4851 /* Could easily be extended to 64 devices if needed */
60fe76f3 4852 const char *p;
28c5af54
JM
4853
4854 boot_devices_bitmap = 0;
4855 for (p = boot_devices; *p != '\0'; p++) {
4856 /* Allowed boot devices are:
4857 * a b : floppy disk drives
4858 * c ... f : IDE disk drives
4859 * g ... m : machine implementation dependant drives
4860 * n ... p : network devices
4861 * It's up to each machine implementation to check
4862 * if the given boot devices match the actual hardware
4863 * implementation and firmware features.
4864 */
4865 if (*p < 'a' || *p > 'q') {
4866 fprintf(stderr, "Invalid boot device '%c'\n", *p);
4867 exit(1);
4868 }
4869 if (boot_devices_bitmap & (1 << (*p - 'a'))) {
4870 fprintf(stderr,
4871 "Boot device '%c' was given twice\n",*p);
4872 exit(1);
4873 }
4874 boot_devices_bitmap |= 1 << (*p - 'a');
4875 }
36b486bb
FB
4876 }
4877 break;
cd6f1169 4878 case QEMU_OPTION_fda:
cd6f1169 4879 case QEMU_OPTION_fdb:
609497ab 4880 drive_add(optarg, FD_ALIAS, popt->index - QEMU_OPTION_fda);
c45886db 4881 break;
52ca8d6a
FB
4882#ifdef TARGET_I386
4883 case QEMU_OPTION_no_fd_bootchk:
4884 fd_bootchk = 0;
4885 break;
4886#endif
7c9d8e07
FB
4887 case QEMU_OPTION_net:
4888 if (nb_net_clients >= MAX_NET_CLIENTS) {
4889 fprintf(stderr, "qemu: too many network clients\n");
c4b1fcc0
FB
4890 exit(1);
4891 }
fd5f393a 4892 net_clients[nb_net_clients] = optarg;
7c9d8e07 4893 nb_net_clients++;
702c651c 4894 break;
c7f74643
FB
4895#ifdef CONFIG_SLIRP
4896 case QEMU_OPTION_tftp:
c7f74643 4897 tftp_prefix = optarg;
9bf05444 4898 break;
47d5d01a
TS
4899 case QEMU_OPTION_bootp:
4900 bootp_filename = optarg;
4901 break;
c94c8d64 4902#ifndef _WIN32
9d728e8c
FB
4903 case QEMU_OPTION_smb:
4904 net_slirp_smb(optarg);
4905 break;
c94c8d64 4906#endif
9bf05444 4907 case QEMU_OPTION_redir:
3b46e624 4908 net_slirp_redir(optarg);
9bf05444 4909 break;
c7f74643 4910#endif
dc72ac14
AZ
4911 case QEMU_OPTION_bt:
4912 if (nb_bt_opts >= MAX_BT_CMDLINE) {
4913 fprintf(stderr, "qemu: too many bluetooth options\n");
4914 exit(1);
4915 }
4916 bt_opts[nb_bt_opts++] = optarg;
4917 break;
1d14ffa9 4918#ifdef HAS_AUDIO
1d14ffa9
FB
4919 case QEMU_OPTION_audio_help:
4920 AUD_help ();
4921 exit (0);
4922 break;
4923 case QEMU_OPTION_soundhw:
4924 select_soundhw (optarg);
4925 break;
4926#endif
cd6f1169 4927 case QEMU_OPTION_h:
15f82208 4928 help(0);
cd6f1169 4929 break;
00f82b8a
AJ
4930 case QEMU_OPTION_m: {
4931 uint64_t value;
4932 char *ptr;
4933
4934 value = strtoul(optarg, &ptr, 10);
4935 switch (*ptr) {
4936 case 0: case 'M': case 'm':
4937 value <<= 20;
4938 break;
4939 case 'G': case 'g':
4940 value <<= 30;
4941 break;
4942 default:
4943 fprintf(stderr, "qemu: invalid ram size: %s\n", optarg);
cd6f1169
FB
4944 exit(1);
4945 }
00f82b8a
AJ
4946
4947 /* On 32-bit hosts, QEMU is limited by virtual address space */
4948 if (value > (2047 << 20)
4949#ifndef USE_KQEMU
4950 && HOST_LONG_BITS == 32
4951#endif
4952 ) {
4953 fprintf(stderr, "qemu: at most 2047 MB RAM can be simulated\n");
4954 exit(1);
4955 }
4956 if (value != (uint64_t)(ram_addr_t)value) {
4957 fprintf(stderr, "qemu: ram size too large\n");
4958 exit(1);
4959 }
4960 ram_size = value;
cd6f1169 4961 break;
00f82b8a 4962 }
cd6f1169
FB
4963 case QEMU_OPTION_d:
4964 {
4965 int mask;
c7cd6a37 4966 const CPULogItem *item;
3b46e624 4967
cd6f1169
FB
4968 mask = cpu_str_to_log_mask(optarg);
4969 if (!mask) {
4970 printf("Log items (comma separated):\n");
f193c797
FB
4971 for(item = cpu_log_items; item->mask != 0; item++) {
4972 printf("%-10s %s\n", item->name, item->help);
4973 }
4974 exit(1);
cd6f1169
FB
4975 }
4976 cpu_set_log(mask);
f193c797 4977 }
cd6f1169 4978 break;
67b915a5 4979#ifdef CONFIG_GDBSTUB
cd6f1169
FB
4980 case QEMU_OPTION_s:
4981 use_gdbstub = 1;
4982 break;
4983 case QEMU_OPTION_p:
cfc3475a 4984 gdbstub_port = optarg;
cd6f1169 4985 break;
67b915a5 4986#endif
cd6f1169
FB
4987 case QEMU_OPTION_L:
4988 bios_dir = optarg;
4989 break;
1192dad8
JM
4990 case QEMU_OPTION_bios:
4991 bios_name = optarg;
4992 break;
cd6f1169 4993 case QEMU_OPTION_S:
3c07f8e8 4994 autostart = 0;
cd6f1169 4995 break;
3d11d0eb
FB
4996 case QEMU_OPTION_k:
4997 keyboard_layout = optarg;
4998 break;
ee22c2f7
FB
4999 case QEMU_OPTION_localtime:
5000 rtc_utc = 0;
5001 break;
3893c124 5002 case QEMU_OPTION_vga:
5003 select_vgahw (optarg);
1bfe856e 5004 break;
e9b137c2
FB
5005 case QEMU_OPTION_g:
5006 {
5007 const char *p;
5008 int w, h, depth;
5009 p = optarg;
5010 w = strtol(p, (char **)&p, 10);
5011 if (w <= 0) {
5012 graphic_error:
5013 fprintf(stderr, "qemu: invalid resolution or depth\n");
5014 exit(1);
5015 }
5016 if (*p != 'x')
5017 goto graphic_error;
5018 p++;
5019 h = strtol(p, (char **)&p, 10);
5020 if (h <= 0)
5021 goto graphic_error;
5022 if (*p == 'x') {
5023 p++;
5024 depth = strtol(p, (char **)&p, 10);
5fafdf24 5025 if (depth != 8 && depth != 15 && depth != 16 &&
e9b137c2
FB
5026 depth != 24 && depth != 32)
5027 goto graphic_error;
5028 } else if (*p == '\0') {
5029 depth = graphic_depth;
5030 } else {
5031 goto graphic_error;
5032 }
3b46e624 5033
e9b137c2
FB
5034 graphic_width = w;
5035 graphic_height = h;
5036 graphic_depth = depth;
5037 }
5038 break;
20d8a3ed
TS
5039 case QEMU_OPTION_echr:
5040 {
5041 char *r;
5042 term_escape_char = strtol(optarg, &r, 0);
5043 if (r == optarg)
5044 printf("Bad argument to echr\n");
5045 break;
5046 }
82c643ff 5047 case QEMU_OPTION_monitor:
fd5f393a 5048 monitor_device = optarg;
82c643ff
FB
5049 break;
5050 case QEMU_OPTION_serial:
8d11df9e
FB
5051 if (serial_device_index >= MAX_SERIAL_PORTS) {
5052 fprintf(stderr, "qemu: too many serial ports\n");
5053 exit(1);
5054 }
fd5f393a 5055 serial_devices[serial_device_index] = optarg;
8d11df9e 5056 serial_device_index++;
82c643ff 5057 break;
51ecf136
AL
5058 case QEMU_OPTION_virtiocon:
5059 if (virtio_console_index >= MAX_VIRTIO_CONSOLES) {
5060 fprintf(stderr, "qemu: too many virtio consoles\n");
5061 exit(1);
5062 }
5063 virtio_consoles[virtio_console_index] = optarg;
5064 virtio_console_index++;
5065 break;
6508fe59
FB
5066 case QEMU_OPTION_parallel:
5067 if (parallel_device_index >= MAX_PARALLEL_PORTS) {
5068 fprintf(stderr, "qemu: too many parallel ports\n");
5069 exit(1);
5070 }
fd5f393a 5071 parallel_devices[parallel_device_index] = optarg;
6508fe59
FB
5072 parallel_device_index++;
5073 break;
d63d307f
FB
5074 case QEMU_OPTION_loadvm:
5075 loadvm = optarg;
5076 break;
5077 case QEMU_OPTION_full_screen:
5078 full_screen = 1;
5079 break;
667accab 5080#ifdef CONFIG_SDL
43523e93
TS
5081 case QEMU_OPTION_no_frame:
5082 no_frame = 1;
5083 break;
3780e197
TS
5084 case QEMU_OPTION_alt_grab:
5085 alt_grab = 1;
5086 break;
667accab
TS
5087 case QEMU_OPTION_no_quit:
5088 no_quit = 1;
5089 break;
7d957bd8
AL
5090 case QEMU_OPTION_sdl:
5091 sdl = 1;
5092 break;
667accab 5093#endif
f7cce898 5094 case QEMU_OPTION_pidfile:
93815bc2 5095 pid_file = optarg;
f7cce898 5096 break;
a09db21f
FB
5097#ifdef TARGET_I386
5098 case QEMU_OPTION_win2k_hack:
5099 win2k_install_hack = 1;
5100 break;
73822ec8
AL
5101 case QEMU_OPTION_rtc_td_hack:
5102 rtc_td_hack = 1;
5103 break;
a09db21f 5104#endif
d993e026
FB
5105#ifdef USE_KQEMU
5106 case QEMU_OPTION_no_kqemu:
5107 kqemu_allowed = 0;
5108 break;
89bfc105
FB
5109 case QEMU_OPTION_kernel_kqemu:
5110 kqemu_allowed = 2;
5111 break;
7ba1e619
AL
5112#endif
5113#ifdef CONFIG_KVM
5114 case QEMU_OPTION_enable_kvm:
5115 kvm_allowed = 1;
5116#ifdef USE_KQEMU
5117 kqemu_allowed = 0;
5118#endif
5119 break;
d993e026 5120#endif
bb36d470
FB
5121 case QEMU_OPTION_usb:
5122 usb_enabled = 1;
5123 break;
a594cfbf
FB
5124 case QEMU_OPTION_usbdevice:
5125 usb_enabled = 1;
0d92ed30 5126 if (usb_devices_index >= MAX_USB_CMDLINE) {
a594cfbf
FB
5127 fprintf(stderr, "Too many USB devices\n");
5128 exit(1);
5129 }
fd5f393a 5130 usb_devices[usb_devices_index] = optarg;
a594cfbf
FB
5131 usb_devices_index++;
5132 break;
6a00d601
FB
5133 case QEMU_OPTION_smp:
5134 smp_cpus = atoi(optarg);
b2097003 5135 if (smp_cpus < 1) {
6a00d601
FB
5136 fprintf(stderr, "Invalid number of CPUs\n");
5137 exit(1);
5138 }
5139 break;
24236869 5140 case QEMU_OPTION_vnc:
73fc9742 5141 vnc_display = optarg;
24236869 5142 break;
6515b203
FB
5143 case QEMU_OPTION_no_acpi:
5144 acpi_enabled = 0;
5145 break;
16b29ae1
AL
5146 case QEMU_OPTION_no_hpet:
5147 no_hpet = 1;
5148 break;
d1beab82
FB
5149 case QEMU_OPTION_no_reboot:
5150 no_reboot = 1;
5151 break;
b2f76161
AJ
5152 case QEMU_OPTION_no_shutdown:
5153 no_shutdown = 1;
5154 break;
9467cd46
AZ
5155 case QEMU_OPTION_show_cursor:
5156 cursor_hide = 0;
5157 break;
8fcb1b90
BS
5158 case QEMU_OPTION_uuid:
5159 if(qemu_uuid_parse(optarg, qemu_uuid) < 0) {
5160 fprintf(stderr, "Fail to parse UUID string."
5161 " Wrong format.\n");
5162 exit(1);
5163 }
5164 break;
71e3ceb8
TS
5165 case QEMU_OPTION_daemonize:
5166 daemonize = 1;
5167 break;
9ae02555
TS
5168 case QEMU_OPTION_option_rom:
5169 if (nb_option_roms >= MAX_OPTION_ROMS) {
5170 fprintf(stderr, "Too many option ROMs\n");
5171 exit(1);
5172 }
5173 option_rom[nb_option_roms] = optarg;
5174 nb_option_roms++;
5175 break;
8e71621f
PB
5176 case QEMU_OPTION_semihosting:
5177 semihosting_enabled = 1;
5178 break;
c35734b2
TS
5179 case QEMU_OPTION_name:
5180 qemu_name = optarg;
5181 break;
95efd11c 5182#if defined(TARGET_SPARC) || defined(TARGET_PPC)
66508601
BS
5183 case QEMU_OPTION_prom_env:
5184 if (nb_prom_envs >= MAX_PROM_ENVS) {
5185 fprintf(stderr, "Too many prom variables\n");
5186 exit(1);
5187 }
5188 prom_envs[nb_prom_envs] = optarg;
5189 nb_prom_envs++;
5190 break;
2b8f2d41
AZ
5191#endif
5192#ifdef TARGET_ARM
5193 case QEMU_OPTION_old_param:
5194 old_param = 1;
05ebd537 5195 break;
66508601 5196#endif
f3dcfada
TS
5197 case QEMU_OPTION_clock:
5198 configure_alarms(optarg);
5199 break;
7e0af5d0
FB
5200 case QEMU_OPTION_startdate:
5201 {
5202 struct tm tm;
f6503059 5203 time_t rtc_start_date;
7e0af5d0 5204 if (!strcmp(optarg, "now")) {
f6503059 5205 rtc_date_offset = -1;
7e0af5d0
FB
5206 } else {
5207 if (sscanf(optarg, "%d-%d-%dT%d:%d:%d",
5208 &tm.tm_year,
5209 &tm.tm_mon,
5210 &tm.tm_mday,
5211 &tm.tm_hour,
5212 &tm.tm_min,
5213 &tm.tm_sec) == 6) {
5214 /* OK */
5215 } else if (sscanf(optarg, "%d-%d-%d",
5216 &tm.tm_year,
5217 &tm.tm_mon,
5218 &tm.tm_mday) == 3) {
5219 tm.tm_hour = 0;
5220 tm.tm_min = 0;
5221 tm.tm_sec = 0;
5222 } else {
5223 goto date_fail;
5224 }
5225 tm.tm_year -= 1900;
5226 tm.tm_mon--;
3c6b2088 5227 rtc_start_date = mktimegm(&tm);
7e0af5d0
FB
5228 if (rtc_start_date == -1) {
5229 date_fail:
5230 fprintf(stderr, "Invalid date format. Valid format are:\n"
5231 "'now' or '2006-06-17T16:01:21' or '2006-06-17'\n");
5232 exit(1);
5233 }
f6503059 5234 rtc_date_offset = time(NULL) - rtc_start_date;
7e0af5d0
FB
5235 }
5236 }
5237 break;
26a5f13b
FB
5238 case QEMU_OPTION_tb_size:
5239 tb_size = strtol(optarg, NULL, 0);
5240 if (tb_size < 0)
5241 tb_size = 0;
5242 break;
2e70f6ef
PB
5243 case QEMU_OPTION_icount:
5244 use_icount = 1;
5245 if (strcmp(optarg, "auto") == 0) {
5246 icount_time_shift = -1;
5247 } else {
5248 icount_time_shift = strtol(optarg, NULL, 0);
5249 }
5250 break;
5bb7910a
AL
5251 case QEMU_OPTION_incoming:
5252 incoming = optarg;
5253 break;
cd6f1169 5254 }
0824d6fc
FB
5255 }
5256 }
330d0414 5257
7ba1e619
AL
5258#if defined(CONFIG_KVM) && defined(USE_KQEMU)
5259 if (kvm_allowed && kqemu_allowed) {
5260 fprintf(stderr,
5261 "You can not enable both KVM and kqemu at the same time\n");
5262 exit(1);
5263 }
5264#endif
5265
3d878caa 5266 machine->max_cpus = machine->max_cpus ?: 1; /* Default to UP */
b2097003
AL
5267 if (smp_cpus > machine->max_cpus) {
5268 fprintf(stderr, "Number of SMP cpus requested (%d), exceeds max cpus "
5269 "supported by machine `%s' (%d)\n", smp_cpus, machine->name,
5270 machine->max_cpus);
5271 exit(1);
5272 }
5273
bc0129d9
AL
5274 if (nographic) {
5275 if (serial_device_index == 0)
5276 serial_devices[0] = "stdio";
5277 if (parallel_device_index == 0)
5278 parallel_devices[0] = "null";
5279 if (strncmp(monitor_device, "vc", 2) == 0)
5280 monitor_device = "stdio";
9ede2fde
AL
5281 if (virtio_console_index == 0)
5282 virtio_consoles[0] = "null";
bc0129d9
AL
5283 }
5284
71e3ceb8 5285#ifndef _WIN32
71e3ceb8
TS
5286 if (daemonize) {
5287 pid_t pid;
5288
5289 if (pipe(fds) == -1)
5290 exit(1);
5291
5292 pid = fork();
5293 if (pid > 0) {
5294 uint8_t status;
5295 ssize_t len;
5296
5297 close(fds[1]);
5298
5299 again:
93815bc2
TS
5300 len = read(fds[0], &status, 1);
5301 if (len == -1 && (errno == EINTR))
5302 goto again;
5303
5304 if (len != 1)
5305 exit(1);
5306 else if (status == 1) {
5307 fprintf(stderr, "Could not acquire pidfile\n");
5308 exit(1);
5309 } else
5310 exit(0);
71e3ceb8 5311 } else if (pid < 0)
93815bc2 5312 exit(1);
71e3ceb8
TS
5313
5314 setsid();
5315
5316 pid = fork();
5317 if (pid > 0)
5318 exit(0);
5319 else if (pid < 0)
5320 exit(1);
5321
5322 umask(027);
71e3ceb8
TS
5323
5324 signal(SIGTSTP, SIG_IGN);
5325 signal(SIGTTOU, SIG_IGN);
5326 signal(SIGTTIN, SIG_IGN);
5327 }
5328#endif
5329
aa26bb2d 5330 if (pid_file && qemu_create_pidfile(pid_file) != 0) {
93815bc2
TS
5331 if (daemonize) {
5332 uint8_t status = 1;
5333 write(fds[1], &status, 1);
5334 } else
5335 fprintf(stderr, "Could not acquire pid file\n");
5336 exit(1);
5337 }
5338
ff3fbb30
FB
5339#ifdef USE_KQEMU
5340 if (smp_cpus > 1)
5341 kqemu_allowed = 0;
5342#endif
a20dd508 5343 linux_boot = (kernel_filename != NULL);
7317b8ca 5344 net_boot = (boot_devices_bitmap >> ('n' - 'a')) & 0xF;
6c41b272 5345
28c5af54 5346 if (!linux_boot && net_boot == 0 &&
f88e4b91 5347 !machine->nodisk_ok && nb_drives_opt == 0)
15f82208 5348 help(1);
0824d6fc 5349
f8d39c01
TS
5350 if (!linux_boot && *kernel_cmdline != '\0') {
5351 fprintf(stderr, "-append only allowed with -kernel option\n");
5352 exit(1);
5353 }
5354
5355 if (!linux_boot && initrd_filename != NULL) {
5356 fprintf(stderr, "-initrd only allowed with -kernel option\n");
5357 exit(1);
5358 }
5359
96d30e48 5360 /* boot to floppy or the default cd if no hard disk defined yet */
28c5af54 5361 if (!boot_devices[0]) {
e4bcb14c 5362 boot_devices = "cad";
96d30e48 5363 }
b118d61e 5364 setvbuf(stdout, NULL, _IOLBF, 0);
3b46e624 5365
634fce96 5366 init_timers();
7183b4b4
AL
5367 if (init_timer_alarm() < 0) {
5368 fprintf(stderr, "could not initialize alarm timer\n");
5369 exit(1);
5370 }
2e70f6ef
PB
5371 if (use_icount && icount_time_shift < 0) {
5372 use_icount = 2;
5373 /* 125MIPS seems a reasonable initial guess at the guest speed.
5374 It will be corrected fairly quickly anyway. */
5375 icount_time_shift = 3;
5376 init_icount_adjust();
5377 }
634fce96 5378
fd1dff4b
FB
5379#ifdef _WIN32
5380 socket_init();
5381#endif
5382
7c9d8e07
FB
5383 /* init network clients */
5384 if (nb_net_clients == 0) {
5385 /* if no clients, we use a default config */
f441b28b
AL
5386 net_clients[nb_net_clients++] = "nic";
5387#ifdef CONFIG_SLIRP
5388 net_clients[nb_net_clients++] = "user";
5389#endif
c20709aa
FB
5390 }
5391
7c9d8e07 5392 for(i = 0;i < nb_net_clients; i++) {
9ad97e65 5393 if (net_client_parse(net_clients[i]) < 0)
7c9d8e07 5394 exit(1);
702c651c 5395 }
63a01ef8 5396 net_client_check();
f1510b2c 5397
eec85c2a 5398#ifdef TARGET_I386
ed494d87 5399 /* XXX: this should be moved in the PC machine instantiation code */
28c5af54
JM
5400 if (net_boot != 0) {
5401 int netroms = 0;
5402 for (i = 0; i < nb_nics && i < 4; i++) {
eec85c2a
TS
5403 const char *model = nd_table[i].model;
5404 char buf[1024];
28c5af54
JM
5405 if (net_boot & (1 << i)) {
5406 if (model == NULL)
5407 model = "ne2k_pci";
5408 snprintf(buf, sizeof(buf), "%s/pxe-%s.bin", bios_dir, model);
5409 if (get_image_size(buf) > 0) {
5410 if (nb_option_roms >= MAX_OPTION_ROMS) {
5411 fprintf(stderr, "Too many option ROMs\n");
5412 exit(1);
5413 }
5414 option_rom[nb_option_roms] = strdup(buf);
5415 nb_option_roms++;
5416 netroms++;
5417 }
5418 }
eec85c2a 5419 }
28c5af54 5420 if (netroms == 0) {
eec85c2a
TS
5421 fprintf(stderr, "No valid PXE rom found for network device\n");
5422 exit(1);
5423 }
eec85c2a
TS
5424 }
5425#endif
5426
dc72ac14
AZ
5427 /* init the bluetooth world */
5428 for (i = 0; i < nb_bt_opts; i++)
5429 if (bt_parse(bt_opts[i]))
5430 exit(1);
5431
0824d6fc 5432 /* init the memory */
7fb4fdcf
AZ
5433 phys_ram_size = machine->ram_require & ~RAMSIZE_FIXED;
5434
5435 if (machine->ram_require & RAMSIZE_FIXED) {
5436 if (ram_size > 0) {
5437 if (ram_size < phys_ram_size) {
cd940061
AJ
5438 fprintf(stderr, "Machine `%s' requires %llu bytes of memory\n",
5439 machine->name, (unsigned long long) phys_ram_size);
7fb4fdcf
AZ
5440 exit(-1);
5441 }
5442
5443 phys_ram_size = ram_size;
5444 } else
5445 ram_size = phys_ram_size;
5446 } else {
4fc5d071 5447 if (ram_size == 0)
7fb4fdcf
AZ
5448 ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
5449
5450 phys_ram_size += ram_size;
5451 }
9ae02555 5452
d993e026 5453 phys_ram_base = qemu_vmalloc(phys_ram_size);
7f7f9873
FB
5454 if (!phys_ram_base) {
5455 fprintf(stderr, "Could not allocate physical memory\n");
0824d6fc
FB
5456 exit(1);
5457 }
5458
26a5f13b
FB
5459 /* init the dynamic translator */
5460 cpu_exec_init_all(tb_size * 1024 * 1024);
5461
5905b2e5 5462 bdrv_init();
c4b1fcc0 5463
e4bcb14c 5464 /* we always create the cdrom drive, even if no disk is there */
c4b1fcc0 5465
e4bcb14c 5466 if (nb_drives_opt < MAX_DRIVES)
609497ab 5467 drive_add(NULL, CDROM_ALIAS);
c4b1fcc0 5468
9d413d1d 5469 /* we always create at least one floppy */
33e3963e 5470
e4bcb14c 5471 if (nb_drives_opt < MAX_DRIVES)
609497ab 5472 drive_add(NULL, FD_ALIAS, 0);
86f55663 5473
9d413d1d
AZ
5474 /* we always create one sd slot, even if no card is in it */
5475
5476 if (nb_drives_opt < MAX_DRIVES)
609497ab 5477 drive_add(NULL, SD_ALIAS);
9d413d1d 5478
e4bcb14c
TS
5479 /* open the virtual block devices */
5480
5481 for(i = 0; i < nb_drives_opt; i++)
609497ab 5482 if (drive_init(&drives_opt[i], snapshot, machine) == -1)
e4bcb14c 5483 exit(1);
3e3d5815 5484
c88676f8 5485 register_savevm("timer", 0, 2, timer_save, timer_load, NULL);
475e4277 5486 register_savevm_live("ram", 0, 3, ram_save_live, NULL, ram_load, NULL);
8a7ddc38 5487
3023f332
AL
5488#ifndef _WIN32
5489 /* must be after terminal init, SDL library changes signal handlers */
5490 termsig_setup();
5491#endif
5492
5493 /* Maintain compatibility with multiple stdio monitors */
5494 if (!strcmp(monitor_device,"stdio")) {
5495 for (i = 0; i < MAX_SERIAL_PORTS; i++) {
5496 const char *devname = serial_devices[i];
5497 if (devname && !strcmp(devname,"mon:stdio")) {
5498 monitor_device = NULL;
5499 break;
5500 } else if (devname && !strcmp(devname,"stdio")) {
5501 monitor_device = NULL;
5502 serial_devices[i] = "mon:stdio";
5503 break;
5504 }
5505 }
5506 }
5507
5508 if (kvm_enabled()) {
5509 int ret;
5510
5511 ret = kvm_init(smp_cpus);
5512 if (ret < 0) {
5513 fprintf(stderr, "failed to initialize KVM\n");
5514 exit(1);
5515 }
5516 }
5517
4c621805 5518 if (monitor_device) {
ceecf1d1 5519 monitor_hd = qemu_chr_open("monitor", monitor_device, NULL);
4c621805
AL
5520 if (!monitor_hd) {
5521 fprintf(stderr, "qemu: could not open monitor device '%s'\n", monitor_device);
5522 exit(1);
5523 }
5524 }
5525
2796dae0
AL
5526 for(i = 0; i < MAX_SERIAL_PORTS; i++) {
5527 const char *devname = serial_devices[i];
5528 if (devname && strcmp(devname, "none")) {
5529 char label[32];
5530 snprintf(label, sizeof(label), "serial%d", i);
ceecf1d1 5531 serial_hds[i] = qemu_chr_open(label, devname, NULL);
2796dae0
AL
5532 if (!serial_hds[i]) {
5533 fprintf(stderr, "qemu: could not open serial device '%s'\n",
5534 devname);
5535 exit(1);
5536 }
5537 }
5538 }
5539
5540 for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
5541 const char *devname = parallel_devices[i];
5542 if (devname && strcmp(devname, "none")) {
5543 char label[32];
5544 snprintf(label, sizeof(label), "parallel%d", i);
ceecf1d1 5545 parallel_hds[i] = qemu_chr_open(label, devname, NULL);
2796dae0
AL
5546 if (!parallel_hds[i]) {
5547 fprintf(stderr, "qemu: could not open parallel device '%s'\n",
5548 devname);
5549 exit(1);
5550 }
5551 }
5552 }
5553
5554 for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
5555 const char *devname = virtio_consoles[i];
5556 if (devname && strcmp(devname, "none")) {
5557 char label[32];
5558 snprintf(label, sizeof(label), "virtcon%d", i);
ceecf1d1 5559 virtcon_hds[i] = qemu_chr_open(label, devname, NULL);
2796dae0
AL
5560 if (!virtcon_hds[i]) {
5561 fprintf(stderr, "qemu: could not open virtio console '%s'\n",
5562 devname);
5563 exit(1);
5564 }
5565 }
5566 }
5567
3023f332
AL
5568 machine->init(ram_size, vga_ram_size, boot_devices,
5569 kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
5570
5571 /* Set KVM's vcpu state to qemu's initial CPUState. */
5572 if (kvm_enabled()) {
5573 int ret;
5574
5575 ret = kvm_sync_vcpus();
5576 if (ret < 0) {
5577 fprintf(stderr, "failed to initialize vcpus\n");
5578 exit(1);
5579 }
5580 }
5581
5582 /* init USB devices */
5583 if (usb_enabled) {
5584 for(i = 0; i < usb_devices_index; i++) {
5585 if (usb_device_add(usb_devices[i]) < 0) {
5586 fprintf(stderr, "Warning: could not add USB device %s\n",
5587 usb_devices[i]);
5588 }
5589 }
5590 }
5591
8f391ab4
AL
5592 if (!display_state)
5593 dumb_display_init();
3023f332
AL
5594 /* just use the first displaystate for the moment */
5595 ds = display_state;
313aa567 5596 /* terminal init */
a20dd508 5597 if (nographic) {
4d3b6f6e
AZ
5598 if (curses) {
5599 fprintf(stderr, "fatal: -nographic can't be used with -curses\n");
5600 exit(1);
5601 }
7d957bd8 5602 } else {
4d3b6f6e 5603#if defined(CONFIG_CURSES)
7d957bd8
AL
5604 if (curses) {
5605 /* At the moment curses cannot be used with other displays */
5606 curses_display_init(ds, full_screen);
5607 } else
4d3b6f6e 5608#endif
7d957bd8
AL
5609 {
5610 if (vnc_display != NULL) {
5611 vnc_display_init(ds);
5612 if (vnc_display_open(ds, vnc_display) < 0)
5613 exit(1);
5614 }
5b0753e0 5615#if defined(CONFIG_SDL)
d268de04 5616 if (sdl || !vnc_display)
7d957bd8 5617 sdl_display_init(ds, full_screen, no_frame);
5b0753e0 5618#elif defined(CONFIG_COCOA)
d268de04 5619 if (sdl || !vnc_display)
7d957bd8 5620 cocoa_display_init(ds, full_screen);
313aa567 5621#endif
7d957bd8 5622 }
313aa567 5623 }
7d957bd8 5624 dpy_resize(ds);
5b08fc10 5625
3023f332
AL
5626 dcl = ds->listeners;
5627 while (dcl != NULL) {
5628 if (dcl->dpy_refresh != NULL) {
5629 ds->gui_timer = qemu_new_timer(rt_clock, gui_update, ds);
5630 qemu_mod_timer(ds->gui_timer, qemu_get_clock(rt_clock));
20d8a3ed 5631 }
3023f332 5632 dcl = dcl->next;
20d8a3ed 5633 }
3023f332 5634
9043b62d
BS
5635 if (nographic || (vnc_display && !sdl)) {
5636 nographic_timer = qemu_new_timer(rt_clock, nographic_update, NULL);
5637 qemu_mod_timer(nographic_timer, qemu_get_clock(rt_clock));
5638 }
5639
2796dae0
AL
5640 text_consoles_set_display(display_state);
5641
4c621805 5642 if (monitor_device && monitor_hd)
20d8a3ed 5643 monitor_init(monitor_hd, !nographic);
82c643ff 5644
8d11df9e 5645 for(i = 0; i < MAX_SERIAL_PORTS; i++) {
c03b0f0f 5646 const char *devname = serial_devices[i];
fd5f393a 5647 if (devname && strcmp(devname, "none")) {
5ccfae10
AL
5648 char label[32];
5649 snprintf(label, sizeof(label), "serial%d", i);
af3a9031 5650 if (strstart(devname, "vc", 0))
7ba1260a 5651 qemu_chr_printf(serial_hds[i], "serial%d console\r\n", i);
8d11df9e 5652 }
82c643ff 5653 }
82c643ff 5654
6508fe59 5655 for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
c03b0f0f 5656 const char *devname = parallel_devices[i];
fd5f393a 5657 if (devname && strcmp(devname, "none")) {
5ccfae10
AL
5658 char label[32];
5659 snprintf(label, sizeof(label), "parallel%d", i);
af3a9031 5660 if (strstart(devname, "vc", 0))
7ba1260a 5661 qemu_chr_printf(parallel_hds[i], "parallel%d console\r\n", i);
6508fe59
FB
5662 }
5663 }
5664
9ede2fde
AL
5665 for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
5666 const char *devname = virtio_consoles[i];
2796dae0 5667 if (virtcon_hds[i] && devname) {
9ede2fde
AL
5668 char label[32];
5669 snprintf(label, sizeof(label), "virtcon%d", i);
9ede2fde
AL
5670 if (strstart(devname, "vc", 0))
5671 qemu_chr_printf(virtcon_hds[i], "virtio console%d\r\n", i);
5672 }
5673 }
5674
67b915a5 5675#ifdef CONFIG_GDBSTUB
b4608c04 5676 if (use_gdbstub) {
c636bb66
FB
5677 /* XXX: use standard host:port notation and modify options
5678 accordingly. */
cfc3475a
PB
5679 if (gdbserver_start(gdbstub_port) < 0) {
5680 fprintf(stderr, "qemu: could not open gdbstub device on port '%s'\n",
c636bb66 5681 gdbstub_port);
8a7ddc38 5682 exit(1);
8a7ddc38 5683 }
45669e00 5684 }
67b915a5 5685#endif
45669e00 5686
d63d307f 5687 if (loadvm)
faea38e7 5688 do_loadvm(loadvm);
d63d307f 5689
5bb7910a
AL
5690 if (incoming) {
5691 autostart = 0; /* fixme how to deal with -daemonize */
5692 qemu_start_incoming_migration(incoming);
5693 }
5694
67b915a5 5695 {
5905b2e5 5696 /* XXX: simplify init */
83ab7950 5697 read_passwords();
3c07f8e8 5698 if (autostart) {
5905b2e5
FB
5699 vm_start();
5700 }
0824d6fc 5701 }
ffd843bc 5702
71e3ceb8
TS
5703 if (daemonize) {
5704 uint8_t status = 0;
5705 ssize_t len;
5706 int fd;
5707
5708 again1:
5709 len = write(fds[1], &status, 1);
5710 if (len == -1 && (errno == EINTR))
5711 goto again1;
5712
5713 if (len != 1)
5714 exit(1);
5715
bd54b863 5716 chdir("/");
aeb30be6 5717 TFR(fd = open("/dev/null", O_RDWR));
71e3ceb8
TS
5718 if (fd == -1)
5719 exit(1);
5720
5721 dup2(fd, 0);
5722 dup2(fd, 1);
5723 dup2(fd, 2);
5724
5725 close(fd);
5726 }
5727
8a7ddc38 5728 main_loop();
40c3bac3 5729 quit_timers();
63a01ef8 5730 net_cleanup();
b46a8906 5731
0824d6fc
FB
5732 return 0;
5733}