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