Statistics
| Branch: | Revision:

root / vl.c @ a08d4367

History | View | Annotate | Download (157.3 kB)

1
/*
2
 * QEMU System Emulator
3
 *
4
 * Copyright (c) 2003-2008 Fabrice Bellard
5
 *
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.
23
 */
24
#include <unistd.h>
25
#include <fcntl.h>
26
#include <signal.h>
27
#include <time.h>
28
#include <errno.h>
29
#include <sys/time.h>
30
#include <zlib.h>
31

    
32
/* Needed early for HOST_BSD etc. */
33
#include "config-host.h"
34

    
35
#ifndef _WIN32
36
#include <libgen.h>
37
#include <pwd.h>
38
#include <sys/times.h>
39
#include <sys/wait.h>
40
#include <termios.h>
41
#include <sys/mman.h>
42
#include <sys/ioctl.h>
43
#include <sys/resource.h>
44
#include <sys/socket.h>
45
#include <netinet/in.h>
46
#include <net/if.h>
47
#if defined(__NetBSD__)
48
#include <net/if_tap.h>
49
#endif
50
#ifdef __linux__
51
#include <linux/if_tun.h>
52
#endif
53
#include <arpa/inet.h>
54
#include <dirent.h>
55
#include <netdb.h>
56
#include <sys/select.h>
57
#ifdef HOST_BSD
58
#include <sys/stat.h>
59
#if defined(__FreeBSD__) || defined(__DragonFly__)
60
#include <libutil.h>
61
#else
62
#include <util.h>
63
#endif
64
#elif defined (__GLIBC__) && defined (__FreeBSD_kernel__)
65
#include <freebsd/stdlib.h>
66
#else
67
#ifdef __linux__
68
#include <pty.h>
69
#include <malloc.h>
70
#include <linux/rtc.h>
71

    
72
/* For the benefit of older linux systems which don't supply it,
73
   we use a local copy of hpet.h. */
74
/* #include <linux/hpet.h> */
75
#include "hpet.h"
76

    
77
#include <linux/ppdev.h>
78
#include <linux/parport.h>
79
#endif
80
#ifdef __sun__
81
#include <sys/stat.h>
82
#include <sys/ethernet.h>
83
#include <sys/sockio.h>
84
#include <netinet/arp.h>
85
#include <netinet/in.h>
86
#include <netinet/in_systm.h>
87
#include <netinet/ip.h>
88
#include <netinet/ip_icmp.h> // must come after ip.h
89
#include <netinet/udp.h>
90
#include <netinet/tcp.h>
91
#include <net/if.h>
92
#include <syslog.h>
93
#include <stropts.h>
94
#endif
95
#endif
96
#endif
97

    
98
#if defined(__OpenBSD__)
99
#include <util.h>
100
#endif
101

    
102
#if defined(CONFIG_VDE)
103
#include <libvdeplug.h>
104
#endif
105

    
106
#ifdef _WIN32
107
#include <windows.h>
108
#include <malloc.h>
109
#include <sys/timeb.h>
110
#include <mmsystem.h>
111
#define getopt_long_only getopt_long
112
#define memalign(align, size) malloc(size)
113
#endif
114

    
115
#ifdef CONFIG_SDL
116
#if defined(__APPLE__) || defined(main)
117
#include <SDL.h>
118
int qemu_main(int argc, char **argv, char **envp);
119
int main(int argc, char **argv)
120
{
121
    return qemu_main(argc, argv, NULL);
122
}
123
#undef main
124
#define main qemu_main
125
#endif
126
#endif /* CONFIG_SDL */
127

    
128
#ifdef CONFIG_COCOA
129
#undef main
130
#define main qemu_main
131
#endif /* CONFIG_COCOA */
132

    
133
#include "hw/hw.h"
134
#include "hw/boards.h"
135
#include "hw/usb.h"
136
#include "hw/pcmcia.h"
137
#include "hw/pc.h"
138
#include "hw/audiodev.h"
139
#include "hw/isa.h"
140
#include "hw/baum.h"
141
#include "hw/bt.h"
142
#include "hw/watchdog.h"
143
#include "hw/smbios.h"
144
#include "hw/xen.h"
145
#include "bt-host.h"
146
#include "net.h"
147
#include "monitor.h"
148
#include "console.h"
149
#include "sysemu.h"
150
#include "gdbstub.h"
151
#include "qemu-timer.h"
152
#include "qemu-char.h"
153
#include "cache-utils.h"
154
#include "block.h"
155
#include "dma.h"
156
#include "audio/audio.h"
157
#include "migration.h"
158
#include "kvm.h"
159
#include "balloon.h"
160
#include "qemu-option.h"
161

    
162
#include "disas.h"
163

    
164
#include "exec-all.h"
165

    
166
#include "qemu_socket.h"
167

    
168
#include "slirp/libslirp.h"
169

    
170
//#define DEBUG_UNUSED_IOPORT
171
//#define DEBUG_IOPORT
172
//#define DEBUG_NET
173
//#define DEBUG_SLIRP
174

    
175

    
176
#ifdef DEBUG_IOPORT
177
#  define LOG_IOPORT(...) qemu_log_mask(CPU_LOG_IOPORT, ## __VA_ARGS__)
178
#else
179
#  define LOG_IOPORT(...) do { } while (0)
180
#endif
181

    
182
#define DEFAULT_RAM_SIZE 128
183

    
184
/* Max number of USB devices that can be specified on the commandline.  */
185
#define MAX_USB_CMDLINE 8
186

    
187
/* Max number of bluetooth switches on the commandline.  */
188
#define MAX_BT_CMDLINE 10
189

    
190
/* XXX: use a two level table to limit memory usage */
191
#define MAX_IOPORTS 65536
192

    
193
static const char *data_dir;
194
const char *bios_name = NULL;
195
static void *ioport_opaque[MAX_IOPORTS];
196
static IOPortReadFunc *ioport_read_table[3][MAX_IOPORTS];
197
static IOPortWriteFunc *ioport_write_table[3][MAX_IOPORTS];
198
/* Note: drives_table[MAX_DRIVES] is a dummy block driver if none available
199
   to store the VM snapshots */
200
DriveInfo drives_table[MAX_DRIVES+1];
201
int nb_drives;
202
enum vga_retrace_method vga_retrace_method = VGA_RETRACE_DUMB;
203
static DisplayState *display_state;
204
DisplayType display_type = DT_DEFAULT;
205
const char* keyboard_layout = NULL;
206
int64_t ticks_per_sec;
207
ram_addr_t ram_size;
208
int nb_nics;
209
NICInfo nd_table[MAX_NICS];
210
int vm_running;
211
static int autostart;
212
static int rtc_utc = 1;
213
static int rtc_date_offset = -1; /* -1 means no change */
214
int cirrus_vga_enabled = 1;
215
int std_vga_enabled = 0;
216
int vmsvga_enabled = 0;
217
int xenfb_enabled = 0;
218
#ifdef TARGET_SPARC
219
int graphic_width = 1024;
220
int graphic_height = 768;
221
int graphic_depth = 8;
222
#else
223
int graphic_width = 800;
224
int graphic_height = 600;
225
int graphic_depth = 15;
226
#endif
227
static int full_screen = 0;
228
#ifdef CONFIG_SDL
229
static int no_frame = 0;
230
#endif
231
int no_quit = 0;
232
CharDriverState *serial_hds[MAX_SERIAL_PORTS];
233
CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
234
CharDriverState *virtcon_hds[MAX_VIRTIO_CONSOLES];
235
#ifdef TARGET_I386
236
int win2k_install_hack = 0;
237
int rtc_td_hack = 0;
238
#endif
239
int usb_enabled = 0;
240
int singlestep = 0;
241
int smp_cpus = 1;
242
const char *vnc_display;
243
int acpi_enabled = 1;
244
int no_hpet = 0;
245
int no_virtio_balloon = 0;
246
int fd_bootchk = 1;
247
int no_reboot = 0;
248
int no_shutdown = 0;
249
int cursor_hide = 1;
250
int graphic_rotate = 0;
251
#ifndef _WIN32
252
int daemonize = 0;
253
#endif
254
WatchdogTimerModel *watchdog = NULL;
255
int watchdog_action = WDT_RESET;
256
const char *option_rom[MAX_OPTION_ROMS];
257
int nb_option_roms;
258
int semihosting_enabled = 0;
259
#ifdef TARGET_ARM
260
int old_param = 0;
261
#endif
262
const char *qemu_name;
263
int alt_grab = 0;
264
#if defined(TARGET_SPARC) || defined(TARGET_PPC)
265
unsigned int nb_prom_envs = 0;
266
const char *prom_envs[MAX_PROM_ENVS];
267
#endif
268
int nb_drives_opt;
269
struct drive_opt drives_opt[MAX_DRIVES];
270

    
271
int nb_numa_nodes;
272
uint64_t node_mem[MAX_NODES];
273
uint64_t node_cpumask[MAX_NODES];
274

    
275
static CPUState *cur_cpu;
276
static CPUState *next_cpu;
277
static int timer_alarm_pending = 1;
278
/* Conversion factor from emulated instructions to virtual clock ticks.  */
279
static int icount_time_shift;
280
/* Arbitrarily pick 1MIPS as the minimum allowable speed.  */
281
#define MAX_ICOUNT_SHIFT 10
282
/* Compensate for varying guest execution speed.  */
283
static int64_t qemu_icount_bias;
284
static QEMUTimer *icount_rt_timer;
285
static QEMUTimer *icount_vm_timer;
286
static QEMUTimer *nographic_timer;
287

    
288
uint8_t qemu_uuid[16];
289

    
290
/***********************************************************/
291
/* x86 ISA bus support */
292

    
293
target_phys_addr_t isa_mem_base = 0;
294
PicState2 *isa_pic;
295

    
296
static IOPortReadFunc default_ioport_readb, default_ioport_readw, default_ioport_readl;
297
static IOPortWriteFunc default_ioport_writeb, default_ioport_writew, default_ioport_writel;
298

    
299
static uint32_t ioport_read(int index, uint32_t address)
300
{
301
    static IOPortReadFunc *default_func[3] = {
302
        default_ioport_readb,
303
        default_ioport_readw,
304
        default_ioport_readl
305
    };
306
    IOPortReadFunc *func = ioport_read_table[index][address];
307
    if (!func)
308
        func = default_func[index];
309
    return func(ioport_opaque[address], address);
310
}
311

    
312
static void ioport_write(int index, uint32_t address, uint32_t data)
313
{
314
    static IOPortWriteFunc *default_func[3] = {
315
        default_ioport_writeb,
316
        default_ioport_writew,
317
        default_ioport_writel
318
    };
319
    IOPortWriteFunc *func = ioport_write_table[index][address];
320
    if (!func)
321
        func = default_func[index];
322
    func(ioport_opaque[address], address, data);
323
}
324

    
325
static uint32_t default_ioport_readb(void *opaque, uint32_t address)
326
{
327
#ifdef DEBUG_UNUSED_IOPORT
328
    fprintf(stderr, "unused inb: port=0x%04x\n", address);
329
#endif
330
    return 0xff;
331
}
332

    
333
static void default_ioport_writeb(void *opaque, uint32_t address, uint32_t data)
334
{
335
#ifdef DEBUG_UNUSED_IOPORT
336
    fprintf(stderr, "unused outb: port=0x%04x data=0x%02x\n", address, data);
337
#endif
338
}
339

    
340
/* default is to make two byte accesses */
341
static uint32_t default_ioport_readw(void *opaque, uint32_t address)
342
{
343
    uint32_t data;
344
    data = ioport_read(0, address);
345
    address = (address + 1) & (MAX_IOPORTS - 1);
346
    data |= ioport_read(0, address) << 8;
347
    return data;
348
}
349

    
350
static void default_ioport_writew(void *opaque, uint32_t address, uint32_t data)
351
{
352
    ioport_write(0, address, data & 0xff);
353
    address = (address + 1) & (MAX_IOPORTS - 1);
354
    ioport_write(0, address, (data >> 8) & 0xff);
355
}
356

    
357
static uint32_t default_ioport_readl(void *opaque, uint32_t address)
358
{
359
#ifdef DEBUG_UNUSED_IOPORT
360
    fprintf(stderr, "unused inl: port=0x%04x\n", address);
361
#endif
362
    return 0xffffffff;
363
}
364

    
365
static void default_ioport_writel(void *opaque, uint32_t address, uint32_t data)
366
{
367
#ifdef DEBUG_UNUSED_IOPORT
368
    fprintf(stderr, "unused outl: port=0x%04x data=0x%02x\n", address, data);
369
#endif
370
}
371

    
372
/* size is the word size in byte */
373
int register_ioport_read(int start, int length, int size,
374
                         IOPortReadFunc *func, void *opaque)
375
{
376
    int i, bsize;
377

    
378
    if (size == 1) {
379
        bsize = 0;
380
    } else if (size == 2) {
381
        bsize = 1;
382
    } else if (size == 4) {
383
        bsize = 2;
384
    } else {
385
        hw_error("register_ioport_read: invalid size");
386
        return -1;
387
    }
388
    for(i = start; i < start + length; i += size) {
389
        ioport_read_table[bsize][i] = func;
390
        if (ioport_opaque[i] != NULL && ioport_opaque[i] != opaque)
391
            hw_error("register_ioport_read: invalid opaque");
392
        ioport_opaque[i] = opaque;
393
    }
394
    return 0;
395
}
396

    
397
/* size is the word size in byte */
398
int register_ioport_write(int start, int length, int size,
399
                          IOPortWriteFunc *func, void *opaque)
400
{
401
    int i, bsize;
402

    
403
    if (size == 1) {
404
        bsize = 0;
405
    } else if (size == 2) {
406
        bsize = 1;
407
    } else if (size == 4) {
408
        bsize = 2;
409
    } else {
410
        hw_error("register_ioport_write: invalid size");
411
        return -1;
412
    }
413
    for(i = start; i < start + length; i += size) {
414
        ioport_write_table[bsize][i] = func;
415
        if (ioport_opaque[i] != NULL && ioport_opaque[i] != opaque)
416
            hw_error("register_ioport_write: invalid opaque");
417
        ioport_opaque[i] = opaque;
418
    }
419
    return 0;
420
}
421

    
422
void isa_unassign_ioport(int start, int length)
423
{
424
    int i;
425

    
426
    for(i = start; i < start + length; i++) {
427
        ioport_read_table[0][i] = default_ioport_readb;
428
        ioport_read_table[1][i] = default_ioport_readw;
429
        ioport_read_table[2][i] = default_ioport_readl;
430

    
431
        ioport_write_table[0][i] = default_ioport_writeb;
432
        ioport_write_table[1][i] = default_ioport_writew;
433
        ioport_write_table[2][i] = default_ioport_writel;
434

    
435
        ioport_opaque[i] = NULL;
436
    }
437
}
438

    
439
/***********************************************************/
440

    
441
void cpu_outb(CPUState *env, int addr, int val)
442
{
443
    LOG_IOPORT("outb: %04x %02x\n", addr, val);
444
    ioport_write(0, addr, val);
445
#ifdef CONFIG_KQEMU
446
    if (env)
447
        env->last_io_time = cpu_get_time_fast();
448
#endif
449
}
450

    
451
void cpu_outw(CPUState *env, int addr, int val)
452
{
453
    LOG_IOPORT("outw: %04x %04x\n", addr, val);
454
    ioport_write(1, addr, val);
455
#ifdef CONFIG_KQEMU
456
    if (env)
457
        env->last_io_time = cpu_get_time_fast();
458
#endif
459
}
460

    
461
void cpu_outl(CPUState *env, int addr, int val)
462
{
463
    LOG_IOPORT("outl: %04x %08x\n", addr, val);
464
    ioport_write(2, addr, val);
465
#ifdef CONFIG_KQEMU
466
    if (env)
467
        env->last_io_time = cpu_get_time_fast();
468
#endif
469
}
470

    
471
int cpu_inb(CPUState *env, int addr)
472
{
473
    int val;
474
    val = ioport_read(0, addr);
475
    LOG_IOPORT("inb : %04x %02x\n", addr, val);
476
#ifdef CONFIG_KQEMU
477
    if (env)
478
        env->last_io_time = cpu_get_time_fast();
479
#endif
480
    return val;
481
}
482

    
483
int cpu_inw(CPUState *env, int addr)
484
{
485
    int val;
486
    val = ioport_read(1, addr);
487
    LOG_IOPORT("inw : %04x %04x\n", addr, val);
488
#ifdef CONFIG_KQEMU
489
    if (env)
490
        env->last_io_time = cpu_get_time_fast();
491
#endif
492
    return val;
493
}
494

    
495
int cpu_inl(CPUState *env, int addr)
496
{
497
    int val;
498
    val = ioport_read(2, addr);
499
    LOG_IOPORT("inl : %04x %08x\n", addr, val);
500
#ifdef CONFIG_KQEMU
501
    if (env)
502
        env->last_io_time = cpu_get_time_fast();
503
#endif
504
    return val;
505
}
506

    
507
/***********************************************************/
508
void hw_error(const char *fmt, ...)
509
{
510
    va_list ap;
511
    CPUState *env;
512

    
513
    va_start(ap, fmt);
514
    fprintf(stderr, "qemu: hardware error: ");
515
    vfprintf(stderr, fmt, ap);
516
    fprintf(stderr, "\n");
517
    for(env = first_cpu; env != NULL; env = env->next_cpu) {
518
        fprintf(stderr, "CPU #%d:\n", env->cpu_index);
519
#ifdef TARGET_I386
520
        cpu_dump_state(env, stderr, fprintf, X86_DUMP_FPU);
521
#else
522
        cpu_dump_state(env, stderr, fprintf, 0);
523
#endif
524
    }
525
    va_end(ap);
526
    abort();
527
}
528
 
529
/***************/
530
/* ballooning */
531

    
532
static QEMUBalloonEvent *qemu_balloon_event;
533
void *qemu_balloon_event_opaque;
534

    
535
void qemu_add_balloon_handler(QEMUBalloonEvent *func, void *opaque)
536
{
537
    qemu_balloon_event = func;
538
    qemu_balloon_event_opaque = opaque;
539
}
540

    
541
void qemu_balloon(ram_addr_t target)
542
{
543
    if (qemu_balloon_event)
544
        qemu_balloon_event(qemu_balloon_event_opaque, target);
545
}
546

    
547
ram_addr_t qemu_balloon_status(void)
548
{
549
    if (qemu_balloon_event)
550
        return qemu_balloon_event(qemu_balloon_event_opaque, 0);
551
    return 0;
552
}
553

    
554
/***********************************************************/
555
/* keyboard/mouse */
556

    
557
static QEMUPutKBDEvent *qemu_put_kbd_event;
558
static void *qemu_put_kbd_event_opaque;
559
static QEMUPutMouseEntry *qemu_put_mouse_event_head;
560
static QEMUPutMouseEntry *qemu_put_mouse_event_current;
561

    
562
void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque)
563
{
564
    qemu_put_kbd_event_opaque = opaque;
565
    qemu_put_kbd_event = func;
566
}
567

    
568
QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
569
                                                void *opaque, int absolute,
570
                                                const char *name)
571
{
572
    QEMUPutMouseEntry *s, *cursor;
573

    
574
    s = qemu_mallocz(sizeof(QEMUPutMouseEntry));
575

    
576
    s->qemu_put_mouse_event = func;
577
    s->qemu_put_mouse_event_opaque = opaque;
578
    s->qemu_put_mouse_event_absolute = absolute;
579
    s->qemu_put_mouse_event_name = qemu_strdup(name);
580
    s->next = NULL;
581

    
582
    if (!qemu_put_mouse_event_head) {
583
        qemu_put_mouse_event_head = qemu_put_mouse_event_current = s;
584
        return s;
585
    }
586

    
587
    cursor = qemu_put_mouse_event_head;
588
    while (cursor->next != NULL)
589
        cursor = cursor->next;
590

    
591
    cursor->next = s;
592
    qemu_put_mouse_event_current = s;
593

    
594
    return s;
595
}
596

    
597
void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry)
598
{
599
    QEMUPutMouseEntry *prev = NULL, *cursor;
600

    
601
    if (!qemu_put_mouse_event_head || entry == NULL)
602
        return;
603

    
604
    cursor = qemu_put_mouse_event_head;
605
    while (cursor != NULL && cursor != entry) {
606
        prev = cursor;
607
        cursor = cursor->next;
608
    }
609

    
610
    if (cursor == NULL) // does not exist or list empty
611
        return;
612
    else if (prev == NULL) { // entry is head
613
        qemu_put_mouse_event_head = cursor->next;
614
        if (qemu_put_mouse_event_current == entry)
615
            qemu_put_mouse_event_current = cursor->next;
616
        qemu_free(entry->qemu_put_mouse_event_name);
617
        qemu_free(entry);
618
        return;
619
    }
620

    
621
    prev->next = entry->next;
622

    
623
    if (qemu_put_mouse_event_current == entry)
624
        qemu_put_mouse_event_current = prev;
625

    
626
    qemu_free(entry->qemu_put_mouse_event_name);
627
    qemu_free(entry);
628
}
629

    
630
void kbd_put_keycode(int keycode)
631
{
632
    if (qemu_put_kbd_event) {
633
        qemu_put_kbd_event(qemu_put_kbd_event_opaque, keycode);
634
    }
635
}
636

    
637
void kbd_mouse_event(int dx, int dy, int dz, int buttons_state)
638
{
639
    QEMUPutMouseEvent *mouse_event;
640
    void *mouse_event_opaque;
641
    int width;
642

    
643
    if (!qemu_put_mouse_event_current) {
644
        return;
645
    }
646

    
647
    mouse_event =
648
        qemu_put_mouse_event_current->qemu_put_mouse_event;
649
    mouse_event_opaque =
650
        qemu_put_mouse_event_current->qemu_put_mouse_event_opaque;
651

    
652
    if (mouse_event) {
653
        if (graphic_rotate) {
654
            if (qemu_put_mouse_event_current->qemu_put_mouse_event_absolute)
655
                width = 0x7fff;
656
            else
657
                width = graphic_width - 1;
658
            mouse_event(mouse_event_opaque,
659
                                 width - dy, dx, dz, buttons_state);
660
        } else
661
            mouse_event(mouse_event_opaque,
662
                                 dx, dy, dz, buttons_state);
663
    }
664
}
665

    
666
int kbd_mouse_is_absolute(void)
667
{
668
    if (!qemu_put_mouse_event_current)
669
        return 0;
670

    
671
    return qemu_put_mouse_event_current->qemu_put_mouse_event_absolute;
672
}
673

    
674
void do_info_mice(Monitor *mon)
675
{
676
    QEMUPutMouseEntry *cursor;
677
    int index = 0;
678

    
679
    if (!qemu_put_mouse_event_head) {
680
        monitor_printf(mon, "No mouse devices connected\n");
681
        return;
682
    }
683

    
684
    monitor_printf(mon, "Mouse devices available:\n");
685
    cursor = qemu_put_mouse_event_head;
686
    while (cursor != NULL) {
687
        monitor_printf(mon, "%c Mouse #%d: %s\n",
688
                       (cursor == qemu_put_mouse_event_current ? '*' : ' '),
689
                       index, cursor->qemu_put_mouse_event_name);
690
        index++;
691
        cursor = cursor->next;
692
    }
693
}
694

    
695
void do_mouse_set(Monitor *mon, int index)
696
{
697
    QEMUPutMouseEntry *cursor;
698
    int i = 0;
699

    
700
    if (!qemu_put_mouse_event_head) {
701
        monitor_printf(mon, "No mouse devices connected\n");
702
        return;
703
    }
704

    
705
    cursor = qemu_put_mouse_event_head;
706
    while (cursor != NULL && index != i) {
707
        i++;
708
        cursor = cursor->next;
709
    }
710

    
711
    if (cursor != NULL)
712
        qemu_put_mouse_event_current = cursor;
713
    else
714
        monitor_printf(mon, "Mouse at given index not found\n");
715
}
716

    
717
/* compute with 96 bit intermediate result: (a*b)/c */
718
uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c)
719
{
720
    union {
721
        uint64_t ll;
722
        struct {
723
#ifdef WORDS_BIGENDIAN
724
            uint32_t high, low;
725
#else
726
            uint32_t low, high;
727
#endif
728
        } l;
729
    } u, res;
730
    uint64_t rl, rh;
731

    
732
    u.ll = a;
733
    rl = (uint64_t)u.l.low * (uint64_t)b;
734
    rh = (uint64_t)u.l.high * (uint64_t)b;
735
    rh += (rl >> 32);
736
    res.l.high = rh / c;
737
    res.l.low = (((rh % c) << 32) + (rl & 0xffffffff)) / c;
738
    return res.ll;
739
}
740

    
741
/***********************************************************/
742
/* real time host monotonic timer */
743

    
744
#define QEMU_TIMER_BASE 1000000000LL
745

    
746
#ifdef WIN32
747

    
748
static int64_t clock_freq;
749

    
750
static void init_get_clock(void)
751
{
752
    LARGE_INTEGER freq;
753
    int ret;
754
    ret = QueryPerformanceFrequency(&freq);
755
    if (ret == 0) {
756
        fprintf(stderr, "Could not calibrate ticks\n");
757
        exit(1);
758
    }
759
    clock_freq = freq.QuadPart;
760
}
761

    
762
static int64_t get_clock(void)
763
{
764
    LARGE_INTEGER ti;
765
    QueryPerformanceCounter(&ti);
766
    return muldiv64(ti.QuadPart, QEMU_TIMER_BASE, clock_freq);
767
}
768

    
769
#else
770

    
771
static int use_rt_clock;
772

    
773
static void init_get_clock(void)
774
{
775
    use_rt_clock = 0;
776
#if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD_version >= 500000) \
777
    || defined(__DragonFly__)
778
    {
779
        struct timespec ts;
780
        if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0) {
781
            use_rt_clock = 1;
782
        }
783
    }
784
#endif
785
}
786

    
787
static int64_t get_clock(void)
788
{
789
#if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD_version >= 500000) \
790
        || defined(__DragonFly__)
791
    if (use_rt_clock) {
792
        struct timespec ts;
793
        clock_gettime(CLOCK_MONOTONIC, &ts);
794
        return ts.tv_sec * 1000000000LL + ts.tv_nsec;
795
    } else
796
#endif
797
    {
798
        /* XXX: using gettimeofday leads to problems if the date
799
           changes, so it should be avoided. */
800
        struct timeval tv;
801
        gettimeofday(&tv, NULL);
802
        return tv.tv_sec * 1000000000LL + (tv.tv_usec * 1000);
803
    }
804
}
805
#endif
806

    
807
/* Return the virtual CPU time, based on the instruction counter.  */
808
static int64_t cpu_get_icount(void)
809
{
810
    int64_t icount;
811
    CPUState *env = cpu_single_env;;
812
    icount = qemu_icount;
813
    if (env) {
814
        if (!can_do_io(env))
815
            fprintf(stderr, "Bad clock read\n");
816
        icount -= (env->icount_decr.u16.low + env->icount_extra);
817
    }
818
    return qemu_icount_bias + (icount << icount_time_shift);
819
}
820

    
821
/***********************************************************/
822
/* guest cycle counter */
823

    
824
static int64_t cpu_ticks_prev;
825
static int64_t cpu_ticks_offset;
826
static int64_t cpu_clock_offset;
827
static int cpu_ticks_enabled;
828

    
829
/* return the host CPU cycle counter and handle stop/restart */
830
int64_t cpu_get_ticks(void)
831
{
832
    if (use_icount) {
833
        return cpu_get_icount();
834
    }
835
    if (!cpu_ticks_enabled) {
836
        return cpu_ticks_offset;
837
    } else {
838
        int64_t ticks;
839
        ticks = cpu_get_real_ticks();
840
        if (cpu_ticks_prev > ticks) {
841
            /* Note: non increasing ticks may happen if the host uses
842
               software suspend */
843
            cpu_ticks_offset += cpu_ticks_prev - ticks;
844
        }
845
        cpu_ticks_prev = ticks;
846
        return ticks + cpu_ticks_offset;
847
    }
848
}
849

    
850
/* return the host CPU monotonic timer and handle stop/restart */
851
static int64_t cpu_get_clock(void)
852
{
853
    int64_t ti;
854
    if (!cpu_ticks_enabled) {
855
        return cpu_clock_offset;
856
    } else {
857
        ti = get_clock();
858
        return ti + cpu_clock_offset;
859
    }
860
}
861

    
862
/* enable cpu_get_ticks() */
863
void cpu_enable_ticks(void)
864
{
865
    if (!cpu_ticks_enabled) {
866
        cpu_ticks_offset -= cpu_get_real_ticks();
867
        cpu_clock_offset -= get_clock();
868
        cpu_ticks_enabled = 1;
869
    }
870
}
871

    
872
/* disable cpu_get_ticks() : the clock is stopped. You must not call
873
   cpu_get_ticks() after that.  */
874
void cpu_disable_ticks(void)
875
{
876
    if (cpu_ticks_enabled) {
877
        cpu_ticks_offset = cpu_get_ticks();
878
        cpu_clock_offset = cpu_get_clock();
879
        cpu_ticks_enabled = 0;
880
    }
881
}
882

    
883
/***********************************************************/
884
/* timers */
885

    
886
#define QEMU_TIMER_REALTIME 0
887
#define QEMU_TIMER_VIRTUAL  1
888

    
889
struct QEMUClock {
890
    int type;
891
    /* XXX: add frequency */
892
};
893

    
894
struct QEMUTimer {
895
    QEMUClock *clock;
896
    int64_t expire_time;
897
    QEMUTimerCB *cb;
898
    void *opaque;
899
    struct QEMUTimer *next;
900
};
901

    
902
struct qemu_alarm_timer {
903
    char const *name;
904
    unsigned int flags;
905

    
906
    int (*start)(struct qemu_alarm_timer *t);
907
    void (*stop)(struct qemu_alarm_timer *t);
908
    void (*rearm)(struct qemu_alarm_timer *t);
909
    void *priv;
910
};
911

    
912
#define ALARM_FLAG_DYNTICKS  0x1
913
#define ALARM_FLAG_EXPIRED   0x2
914

    
915
static inline int alarm_has_dynticks(struct qemu_alarm_timer *t)
916
{
917
    return t && (t->flags & ALARM_FLAG_DYNTICKS);
918
}
919

    
920
static void qemu_rearm_alarm_timer(struct qemu_alarm_timer *t)
921
{
922
    if (!alarm_has_dynticks(t))
923
        return;
924

    
925
    t->rearm(t);
926
}
927

    
928
/* TODO: MIN_TIMER_REARM_US should be optimized */
929
#define MIN_TIMER_REARM_US 250
930

    
931
static struct qemu_alarm_timer *alarm_timer;
932

    
933
#ifdef _WIN32
934

    
935
struct qemu_alarm_win32 {
936
    MMRESULT timerId;
937
    unsigned int period;
938
} alarm_win32_data = {0, -1};
939

    
940
static int win32_start_timer(struct qemu_alarm_timer *t);
941
static void win32_stop_timer(struct qemu_alarm_timer *t);
942
static void win32_rearm_timer(struct qemu_alarm_timer *t);
943

    
944
#else
945

    
946
static int unix_start_timer(struct qemu_alarm_timer *t);
947
static void unix_stop_timer(struct qemu_alarm_timer *t);
948

    
949
#ifdef __linux__
950

    
951
static int dynticks_start_timer(struct qemu_alarm_timer *t);
952
static void dynticks_stop_timer(struct qemu_alarm_timer *t);
953
static void dynticks_rearm_timer(struct qemu_alarm_timer *t);
954

    
955
static int hpet_start_timer(struct qemu_alarm_timer *t);
956
static void hpet_stop_timer(struct qemu_alarm_timer *t);
957

    
958
static int rtc_start_timer(struct qemu_alarm_timer *t);
959
static void rtc_stop_timer(struct qemu_alarm_timer *t);
960

    
961
#endif /* __linux__ */
962

    
963
#endif /* _WIN32 */
964

    
965
/* Correlation between real and virtual time is always going to be
966
   fairly approximate, so ignore small variation.
967
   When the guest is idle real and virtual time will be aligned in
968
   the IO wait loop.  */
969
#define ICOUNT_WOBBLE (QEMU_TIMER_BASE / 10)
970

    
971
static void icount_adjust(void)
972
{
973
    int64_t cur_time;
974
    int64_t cur_icount;
975
    int64_t delta;
976
    static int64_t last_delta;
977
    /* If the VM is not running, then do nothing.  */
978
    if (!vm_running)
979
        return;
980

    
981
    cur_time = cpu_get_clock();
982
    cur_icount = qemu_get_clock(vm_clock);
983
    delta = cur_icount - cur_time;
984
    /* FIXME: This is a very crude algorithm, somewhat prone to oscillation.  */
985
    if (delta > 0
986
        && last_delta + ICOUNT_WOBBLE < delta * 2
987
        && icount_time_shift > 0) {
988
        /* The guest is getting too far ahead.  Slow time down.  */
989
        icount_time_shift--;
990
    }
991
    if (delta < 0
992
        && last_delta - ICOUNT_WOBBLE > delta * 2
993
        && icount_time_shift < MAX_ICOUNT_SHIFT) {
994
        /* The guest is getting too far behind.  Speed time up.  */
995
        icount_time_shift++;
996
    }
997
    last_delta = delta;
998
    qemu_icount_bias = cur_icount - (qemu_icount << icount_time_shift);
999
}
1000

    
1001
static void icount_adjust_rt(void * opaque)
1002
{
1003
    qemu_mod_timer(icount_rt_timer,
1004
                   qemu_get_clock(rt_clock) + 1000);
1005
    icount_adjust();
1006
}
1007

    
1008
static void icount_adjust_vm(void * opaque)
1009
{
1010
    qemu_mod_timer(icount_vm_timer,
1011
                   qemu_get_clock(vm_clock) + QEMU_TIMER_BASE / 10);
1012
    icount_adjust();
1013
}
1014

    
1015
static void init_icount_adjust(void)
1016
{
1017
    /* Have both realtime and virtual time triggers for speed adjustment.
1018
       The realtime trigger catches emulated time passing too slowly,
1019
       the virtual time trigger catches emulated time passing too fast.
1020
       Realtime triggers occur even when idle, so use them less frequently
1021
       than VM triggers.  */
1022
    icount_rt_timer = qemu_new_timer(rt_clock, icount_adjust_rt, NULL);
1023
    qemu_mod_timer(icount_rt_timer,
1024
                   qemu_get_clock(rt_clock) + 1000);
1025
    icount_vm_timer = qemu_new_timer(vm_clock, icount_adjust_vm, NULL);
1026
    qemu_mod_timer(icount_vm_timer,
1027
                   qemu_get_clock(vm_clock) + QEMU_TIMER_BASE / 10);
1028
}
1029

    
1030
static struct qemu_alarm_timer alarm_timers[] = {
1031
#ifndef _WIN32
1032
#ifdef __linux__
1033
    {"dynticks", ALARM_FLAG_DYNTICKS, dynticks_start_timer,
1034
     dynticks_stop_timer, dynticks_rearm_timer, NULL},
1035
    /* HPET - if available - is preferred */
1036
    {"hpet", 0, hpet_start_timer, hpet_stop_timer, NULL, NULL},
1037
    /* ...otherwise try RTC */
1038
    {"rtc", 0, rtc_start_timer, rtc_stop_timer, NULL, NULL},
1039
#endif
1040
    {"unix", 0, unix_start_timer, unix_stop_timer, NULL, NULL},
1041
#else
1042
    {"dynticks", ALARM_FLAG_DYNTICKS, win32_start_timer,
1043
     win32_stop_timer, win32_rearm_timer, &alarm_win32_data},
1044
    {"win32", 0, win32_start_timer,
1045
     win32_stop_timer, NULL, &alarm_win32_data},
1046
#endif
1047
    {NULL, }
1048
};
1049

    
1050
static void show_available_alarms(void)
1051
{
1052
    int i;
1053

    
1054
    printf("Available alarm timers, in order of precedence:\n");
1055
    for (i = 0; alarm_timers[i].name; i++)
1056
        printf("%s\n", alarm_timers[i].name);
1057
}
1058

    
1059
static void configure_alarms(char const *opt)
1060
{
1061
    int i;
1062
    int cur = 0;
1063
    int count = ARRAY_SIZE(alarm_timers) - 1;
1064
    char *arg;
1065
    char *name;
1066
    struct qemu_alarm_timer tmp;
1067

    
1068
    if (!strcmp(opt, "?")) {
1069
        show_available_alarms();
1070
        exit(0);
1071
    }
1072

    
1073
    arg = strdup(opt);
1074

    
1075
    /* Reorder the array */
1076
    name = strtok(arg, ",");
1077
    while (name) {
1078
        for (i = 0; i < count && alarm_timers[i].name; i++) {
1079
            if (!strcmp(alarm_timers[i].name, name))
1080
                break;
1081
        }
1082

    
1083
        if (i == count) {
1084
            fprintf(stderr, "Unknown clock %s\n", name);
1085
            goto next;
1086
        }
1087

    
1088
        if (i < cur)
1089
            /* Ignore */
1090
            goto next;
1091

    
1092
        /* Swap */
1093
        tmp = alarm_timers[i];
1094
        alarm_timers[i] = alarm_timers[cur];
1095
        alarm_timers[cur] = tmp;
1096

    
1097
        cur++;
1098
next:
1099
        name = strtok(NULL, ",");
1100
    }
1101

    
1102
    free(arg);
1103

    
1104
    if (cur) {
1105
        /* Disable remaining timers */
1106
        for (i = cur; i < count; i++)
1107
            alarm_timers[i].name = NULL;
1108
    } else {
1109
        show_available_alarms();
1110
        exit(1);
1111
    }
1112
}
1113

    
1114
QEMUClock *rt_clock;
1115
QEMUClock *vm_clock;
1116

    
1117
static QEMUTimer *active_timers[2];
1118

    
1119
static QEMUClock *qemu_new_clock(int type)
1120
{
1121
    QEMUClock *clock;
1122
    clock = qemu_mallocz(sizeof(QEMUClock));
1123
    clock->type = type;
1124
    return clock;
1125
}
1126

    
1127
QEMUTimer *qemu_new_timer(QEMUClock *clock, QEMUTimerCB *cb, void *opaque)
1128
{
1129
    QEMUTimer *ts;
1130

    
1131
    ts = qemu_mallocz(sizeof(QEMUTimer));
1132
    ts->clock = clock;
1133
    ts->cb = cb;
1134
    ts->opaque = opaque;
1135
    return ts;
1136
}
1137

    
1138
void qemu_free_timer(QEMUTimer *ts)
1139
{
1140
    qemu_free(ts);
1141
}
1142

    
1143
/* stop a timer, but do not dealloc it */
1144
void qemu_del_timer(QEMUTimer *ts)
1145
{
1146
    QEMUTimer **pt, *t;
1147

    
1148
    /* NOTE: this code must be signal safe because
1149
       qemu_timer_expired() can be called from a signal. */
1150
    pt = &active_timers[ts->clock->type];
1151
    for(;;) {
1152
        t = *pt;
1153
        if (!t)
1154
            break;
1155
        if (t == ts) {
1156
            *pt = t->next;
1157
            break;
1158
        }
1159
        pt = &t->next;
1160
    }
1161
}
1162

    
1163
/* modify the current timer so that it will be fired when current_time
1164
   >= expire_time. The corresponding callback will be called. */
1165
void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time)
1166
{
1167
    QEMUTimer **pt, *t;
1168

    
1169
    qemu_del_timer(ts);
1170

    
1171
    /* add the timer in the sorted list */
1172
    /* NOTE: this code must be signal safe because
1173
       qemu_timer_expired() can be called from a signal. */
1174
    pt = &active_timers[ts->clock->type];
1175
    for(;;) {
1176
        t = *pt;
1177
        if (!t)
1178
            break;
1179
        if (t->expire_time > expire_time)
1180
            break;
1181
        pt = &t->next;
1182
    }
1183
    ts->expire_time = expire_time;
1184
    ts->next = *pt;
1185
    *pt = ts;
1186

    
1187
    /* Rearm if necessary  */
1188
    if (pt == &active_timers[ts->clock->type]) {
1189
        if ((alarm_timer->flags & ALARM_FLAG_EXPIRED) == 0) {
1190
            qemu_rearm_alarm_timer(alarm_timer);
1191
        }
1192
        /* Interrupt execution to force deadline recalculation.  */
1193
        if (use_icount)
1194
            qemu_notify_event();
1195
    }
1196
}
1197

    
1198
int qemu_timer_pending(QEMUTimer *ts)
1199
{
1200
    QEMUTimer *t;
1201
    for(t = active_timers[ts->clock->type]; t != NULL; t = t->next) {
1202
        if (t == ts)
1203
            return 1;
1204
    }
1205
    return 0;
1206
}
1207

    
1208
static inline int qemu_timer_expired(QEMUTimer *timer_head, int64_t current_time)
1209
{
1210
    if (!timer_head)
1211
        return 0;
1212
    return (timer_head->expire_time <= current_time);
1213
}
1214

    
1215
static void qemu_run_timers(QEMUTimer **ptimer_head, int64_t current_time)
1216
{
1217
    QEMUTimer *ts;
1218

    
1219
    for(;;) {
1220
        ts = *ptimer_head;
1221
        if (!ts || ts->expire_time > current_time)
1222
            break;
1223
        /* remove timer from the list before calling the callback */
1224
        *ptimer_head = ts->next;
1225
        ts->next = NULL;
1226

    
1227
        /* run the callback (the timer list can be modified) */
1228
        ts->cb(ts->opaque);
1229
    }
1230
}
1231

    
1232
int64_t qemu_get_clock(QEMUClock *clock)
1233
{
1234
    switch(clock->type) {
1235
    case QEMU_TIMER_REALTIME:
1236
        return get_clock() / 1000000;
1237
    default:
1238
    case QEMU_TIMER_VIRTUAL:
1239
        if (use_icount) {
1240
            return cpu_get_icount();
1241
        } else {
1242
            return cpu_get_clock();
1243
        }
1244
    }
1245
}
1246

    
1247
static void init_timers(void)
1248
{
1249
    init_get_clock();
1250
    ticks_per_sec = QEMU_TIMER_BASE;
1251
    rt_clock = qemu_new_clock(QEMU_TIMER_REALTIME);
1252
    vm_clock = qemu_new_clock(QEMU_TIMER_VIRTUAL);
1253
}
1254

    
1255
/* save a timer */
1256
void qemu_put_timer(QEMUFile *f, QEMUTimer *ts)
1257
{
1258
    uint64_t expire_time;
1259

    
1260
    if (qemu_timer_pending(ts)) {
1261
        expire_time = ts->expire_time;
1262
    } else {
1263
        expire_time = -1;
1264
    }
1265
    qemu_put_be64(f, expire_time);
1266
}
1267

    
1268
void qemu_get_timer(QEMUFile *f, QEMUTimer *ts)
1269
{
1270
    uint64_t expire_time;
1271

    
1272
    expire_time = qemu_get_be64(f);
1273
    if (expire_time != -1) {
1274
        qemu_mod_timer(ts, expire_time);
1275
    } else {
1276
        qemu_del_timer(ts);
1277
    }
1278
}
1279

    
1280
static void timer_save(QEMUFile *f, void *opaque)
1281
{
1282
    if (cpu_ticks_enabled) {
1283
        hw_error("cannot save state if virtual timers are running");
1284
    }
1285
    qemu_put_be64(f, cpu_ticks_offset);
1286
    qemu_put_be64(f, ticks_per_sec);
1287
    qemu_put_be64(f, cpu_clock_offset);
1288
}
1289

    
1290
static int timer_load(QEMUFile *f, void *opaque, int version_id)
1291
{
1292
    if (version_id != 1 && version_id != 2)
1293
        return -EINVAL;
1294
    if (cpu_ticks_enabled) {
1295
        return -EINVAL;
1296
    }
1297
    cpu_ticks_offset=qemu_get_be64(f);
1298
    ticks_per_sec=qemu_get_be64(f);
1299
    if (version_id == 2) {
1300
        cpu_clock_offset=qemu_get_be64(f);
1301
    }
1302
    return 0;
1303
}
1304

    
1305
static void qemu_event_increment(void);
1306

    
1307
#ifdef _WIN32
1308
static void CALLBACK host_alarm_handler(UINT uTimerID, UINT uMsg,
1309
                                        DWORD_PTR dwUser, DWORD_PTR dw1,
1310
                                        DWORD_PTR dw2)
1311
#else
1312
static void host_alarm_handler(int host_signum)
1313
#endif
1314
{
1315
#if 0
1316
#define DISP_FREQ 1000
1317
    {
1318
        static int64_t delta_min = INT64_MAX;
1319
        static int64_t delta_max, delta_cum, last_clock, delta, ti;
1320
        static int count;
1321
        ti = qemu_get_clock(vm_clock);
1322
        if (last_clock != 0) {
1323
            delta = ti - last_clock;
1324
            if (delta < delta_min)
1325
                delta_min = delta;
1326
            if (delta > delta_max)
1327
                delta_max = delta;
1328
            delta_cum += delta;
1329
            if (++count == DISP_FREQ) {
1330
                printf("timer: min=%" PRId64 " us max=%" PRId64 " us avg=%" PRId64 " us avg_freq=%0.3f Hz\n",
1331
                       muldiv64(delta_min, 1000000, ticks_per_sec),
1332
                       muldiv64(delta_max, 1000000, ticks_per_sec),
1333
                       muldiv64(delta_cum, 1000000 / DISP_FREQ, ticks_per_sec),
1334
                       (double)ticks_per_sec / ((double)delta_cum / DISP_FREQ));
1335
                count = 0;
1336
                delta_min = INT64_MAX;
1337
                delta_max = 0;
1338
                delta_cum = 0;
1339
            }
1340
        }
1341
        last_clock = ti;
1342
    }
1343
#endif
1344
    if (alarm_has_dynticks(alarm_timer) ||
1345
        (!use_icount &&
1346
            qemu_timer_expired(active_timers[QEMU_TIMER_VIRTUAL],
1347
                               qemu_get_clock(vm_clock))) ||
1348
        qemu_timer_expired(active_timers[QEMU_TIMER_REALTIME],
1349
                           qemu_get_clock(rt_clock))) {
1350
        qemu_event_increment();
1351
        if (alarm_timer) alarm_timer->flags |= ALARM_FLAG_EXPIRED;
1352

    
1353
#ifndef CONFIG_IOTHREAD
1354
        if (next_cpu) {
1355
            /* stop the currently executing cpu because a timer occured */
1356
            cpu_exit(next_cpu);
1357
#ifdef CONFIG_KQEMU
1358
            if (next_cpu->kqemu_enabled) {
1359
                kqemu_cpu_interrupt(next_cpu);
1360
            }
1361
#endif
1362
        }
1363
#endif
1364
        timer_alarm_pending = 1;
1365
        qemu_notify_event();
1366
    }
1367
}
1368

    
1369
static int64_t qemu_next_deadline(void)
1370
{
1371
    int64_t delta;
1372

    
1373
    if (active_timers[QEMU_TIMER_VIRTUAL]) {
1374
        delta = active_timers[QEMU_TIMER_VIRTUAL]->expire_time -
1375
                     qemu_get_clock(vm_clock);
1376
    } else {
1377
        /* To avoid problems with overflow limit this to 2^32.  */
1378
        delta = INT32_MAX;
1379
    }
1380

    
1381
    if (delta < 0)
1382
        delta = 0;
1383

    
1384
    return delta;
1385
}
1386

    
1387
#if defined(__linux__) || defined(_WIN32)
1388
static uint64_t qemu_next_deadline_dyntick(void)
1389
{
1390
    int64_t delta;
1391
    int64_t rtdelta;
1392

    
1393
    if (use_icount)
1394
        delta = INT32_MAX;
1395
    else
1396
        delta = (qemu_next_deadline() + 999) / 1000;
1397

    
1398
    if (active_timers[QEMU_TIMER_REALTIME]) {
1399
        rtdelta = (active_timers[QEMU_TIMER_REALTIME]->expire_time -
1400
                 qemu_get_clock(rt_clock))*1000;
1401
        if (rtdelta < delta)
1402
            delta = rtdelta;
1403
    }
1404

    
1405
    if (delta < MIN_TIMER_REARM_US)
1406
        delta = MIN_TIMER_REARM_US;
1407

    
1408
    return delta;
1409
}
1410
#endif
1411

    
1412
#ifndef _WIN32
1413

    
1414
/* Sets a specific flag */
1415
static int fcntl_setfl(int fd, int flag)
1416
{
1417
    int flags;
1418

    
1419
    flags = fcntl(fd, F_GETFL);
1420
    if (flags == -1)
1421
        return -errno;
1422

    
1423
    if (fcntl(fd, F_SETFL, flags | flag) == -1)
1424
        return -errno;
1425

    
1426
    return 0;
1427
}
1428

    
1429
#if defined(__linux__)
1430

    
1431
#define RTC_FREQ 1024
1432

    
1433
static void enable_sigio_timer(int fd)
1434
{
1435
    struct sigaction act;
1436

    
1437
    /* timer signal */
1438
    sigfillset(&act.sa_mask);
1439
    act.sa_flags = 0;
1440
    act.sa_handler = host_alarm_handler;
1441

    
1442
    sigaction(SIGIO, &act, NULL);
1443
    fcntl_setfl(fd, O_ASYNC);
1444
    fcntl(fd, F_SETOWN, getpid());
1445
}
1446

    
1447
static int hpet_start_timer(struct qemu_alarm_timer *t)
1448
{
1449
    struct hpet_info info;
1450
    int r, fd;
1451

    
1452
    fd = open("/dev/hpet", O_RDONLY);
1453
    if (fd < 0)
1454
        return -1;
1455

    
1456
    /* Set frequency */
1457
    r = ioctl(fd, HPET_IRQFREQ, RTC_FREQ);
1458
    if (r < 0) {
1459
        fprintf(stderr, "Could not configure '/dev/hpet' to have a 1024Hz timer. This is not a fatal\n"
1460
                "error, but for better emulation accuracy type:\n"
1461
                "'echo 1024 > /proc/sys/dev/hpet/max-user-freq' as root.\n");
1462
        goto fail;
1463
    }
1464

    
1465
    /* Check capabilities */
1466
    r = ioctl(fd, HPET_INFO, &info);
1467
    if (r < 0)
1468
        goto fail;
1469

    
1470
    /* Enable periodic mode */
1471
    r = ioctl(fd, HPET_EPI, 0);
1472
    if (info.hi_flags && (r < 0))
1473
        goto fail;
1474

    
1475
    /* Enable interrupt */
1476
    r = ioctl(fd, HPET_IE_ON, 0);
1477
    if (r < 0)
1478
        goto fail;
1479

    
1480
    enable_sigio_timer(fd);
1481
    t->priv = (void *)(long)fd;
1482

    
1483
    return 0;
1484
fail:
1485
    close(fd);
1486
    return -1;
1487
}
1488

    
1489
static void hpet_stop_timer(struct qemu_alarm_timer *t)
1490
{
1491
    int fd = (long)t->priv;
1492

    
1493
    close(fd);
1494
}
1495

    
1496
static int rtc_start_timer(struct qemu_alarm_timer *t)
1497
{
1498
    int rtc_fd;
1499
    unsigned long current_rtc_freq = 0;
1500

    
1501
    TFR(rtc_fd = open("/dev/rtc", O_RDONLY));
1502
    if (rtc_fd < 0)
1503
        return -1;
1504
    ioctl(rtc_fd, RTC_IRQP_READ, &current_rtc_freq);
1505
    if (current_rtc_freq != RTC_FREQ &&
1506
        ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
1507
        fprintf(stderr, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n"
1508
                "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n"
1509
                "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n");
1510
        goto fail;
1511
    }
1512
    if (ioctl(rtc_fd, RTC_PIE_ON, 0) < 0) {
1513
    fail:
1514
        close(rtc_fd);
1515
        return -1;
1516
    }
1517

    
1518
    enable_sigio_timer(rtc_fd);
1519

    
1520
    t->priv = (void *)(long)rtc_fd;
1521

    
1522
    return 0;
1523
}
1524

    
1525
static void rtc_stop_timer(struct qemu_alarm_timer *t)
1526
{
1527
    int rtc_fd = (long)t->priv;
1528

    
1529
    close(rtc_fd);
1530
}
1531

    
1532
static int dynticks_start_timer(struct qemu_alarm_timer *t)
1533
{
1534
    struct sigevent ev;
1535
    timer_t host_timer;
1536
    struct sigaction act;
1537

    
1538
    sigfillset(&act.sa_mask);
1539
    act.sa_flags = 0;
1540
    act.sa_handler = host_alarm_handler;
1541

    
1542
    sigaction(SIGALRM, &act, NULL);
1543

    
1544
    /* 
1545
     * Initialize ev struct to 0 to avoid valgrind complaining
1546
     * about uninitialized data in timer_create call
1547
     */
1548
    memset(&ev, 0, sizeof(ev));
1549
    ev.sigev_value.sival_int = 0;
1550
    ev.sigev_notify = SIGEV_SIGNAL;
1551
    ev.sigev_signo = SIGALRM;
1552

    
1553
    if (timer_create(CLOCK_REALTIME, &ev, &host_timer)) {
1554
        perror("timer_create");
1555

    
1556
        /* disable dynticks */
1557
        fprintf(stderr, "Dynamic Ticks disabled\n");
1558

    
1559
        return -1;
1560
    }
1561

    
1562
    t->priv = (void *)(long)host_timer;
1563

    
1564
    return 0;
1565
}
1566

    
1567
static void dynticks_stop_timer(struct qemu_alarm_timer *t)
1568
{
1569
    timer_t host_timer = (timer_t)(long)t->priv;
1570

    
1571
    timer_delete(host_timer);
1572
}
1573

    
1574
static void dynticks_rearm_timer(struct qemu_alarm_timer *t)
1575
{
1576
    timer_t host_timer = (timer_t)(long)t->priv;
1577
    struct itimerspec timeout;
1578
    int64_t nearest_delta_us = INT64_MAX;
1579
    int64_t current_us;
1580

    
1581
    if (!active_timers[QEMU_TIMER_REALTIME] &&
1582
                !active_timers[QEMU_TIMER_VIRTUAL])
1583
        return;
1584

    
1585
    nearest_delta_us = qemu_next_deadline_dyntick();
1586

    
1587
    /* check whether a timer is already running */
1588
    if (timer_gettime(host_timer, &timeout)) {
1589
        perror("gettime");
1590
        fprintf(stderr, "Internal timer error: aborting\n");
1591
        exit(1);
1592
    }
1593
    current_us = timeout.it_value.tv_sec * 1000000 + timeout.it_value.tv_nsec/1000;
1594
    if (current_us && current_us <= nearest_delta_us)
1595
        return;
1596

    
1597
    timeout.it_interval.tv_sec = 0;
1598
    timeout.it_interval.tv_nsec = 0; /* 0 for one-shot timer */
1599
    timeout.it_value.tv_sec =  nearest_delta_us / 1000000;
1600
    timeout.it_value.tv_nsec = (nearest_delta_us % 1000000) * 1000;
1601
    if (timer_settime(host_timer, 0 /* RELATIVE */, &timeout, NULL)) {
1602
        perror("settime");
1603
        fprintf(stderr, "Internal timer error: aborting\n");
1604
        exit(1);
1605
    }
1606
}
1607

    
1608
#endif /* defined(__linux__) */
1609

    
1610
static int unix_start_timer(struct qemu_alarm_timer *t)
1611
{
1612
    struct sigaction act;
1613
    struct itimerval itv;
1614
    int err;
1615

    
1616
    /* timer signal */
1617
    sigfillset(&act.sa_mask);
1618
    act.sa_flags = 0;
1619
    act.sa_handler = host_alarm_handler;
1620

    
1621
    sigaction(SIGALRM, &act, NULL);
1622

    
1623
    itv.it_interval.tv_sec = 0;
1624
    /* for i386 kernel 2.6 to get 1 ms */
1625
    itv.it_interval.tv_usec = 999;
1626
    itv.it_value.tv_sec = 0;
1627
    itv.it_value.tv_usec = 10 * 1000;
1628

    
1629
    err = setitimer(ITIMER_REAL, &itv, NULL);
1630
    if (err)
1631
        return -1;
1632

    
1633
    return 0;
1634
}
1635

    
1636
static void unix_stop_timer(struct qemu_alarm_timer *t)
1637
{
1638
    struct itimerval itv;
1639

    
1640
    memset(&itv, 0, sizeof(itv));
1641
    setitimer(ITIMER_REAL, &itv, NULL);
1642
}
1643

    
1644
#endif /* !defined(_WIN32) */
1645

    
1646

    
1647
#ifdef _WIN32
1648

    
1649
static int win32_start_timer(struct qemu_alarm_timer *t)
1650
{
1651
    TIMECAPS tc;
1652
    struct qemu_alarm_win32 *data = t->priv;
1653
    UINT flags;
1654

    
1655
    memset(&tc, 0, sizeof(tc));
1656
    timeGetDevCaps(&tc, sizeof(tc));
1657

    
1658
    if (data->period < tc.wPeriodMin)
1659
        data->period = tc.wPeriodMin;
1660

    
1661
    timeBeginPeriod(data->period);
1662

    
1663
    flags = TIME_CALLBACK_FUNCTION;
1664
    if (alarm_has_dynticks(t))
1665
        flags |= TIME_ONESHOT;
1666
    else
1667
        flags |= TIME_PERIODIC;
1668

    
1669
    data->timerId = timeSetEvent(1,         // interval (ms)
1670
                        data->period,       // resolution
1671
                        host_alarm_handler, // function
1672
                        (DWORD)t,           // parameter
1673
                        flags);
1674

    
1675
    if (!data->timerId) {
1676
        perror("Failed to initialize win32 alarm timer");
1677
        timeEndPeriod(data->period);
1678
        return -1;
1679
    }
1680

    
1681
    return 0;
1682
}
1683

    
1684
static void win32_stop_timer(struct qemu_alarm_timer *t)
1685
{
1686
    struct qemu_alarm_win32 *data = t->priv;
1687

    
1688
    timeKillEvent(data->timerId);
1689
    timeEndPeriod(data->period);
1690
}
1691

    
1692
static void win32_rearm_timer(struct qemu_alarm_timer *t)
1693
{
1694
    struct qemu_alarm_win32 *data = t->priv;
1695
    uint64_t nearest_delta_us;
1696

    
1697
    if (!active_timers[QEMU_TIMER_REALTIME] &&
1698
                !active_timers[QEMU_TIMER_VIRTUAL])
1699
        return;
1700

    
1701
    nearest_delta_us = qemu_next_deadline_dyntick();
1702
    nearest_delta_us /= 1000;
1703

    
1704
    timeKillEvent(data->timerId);
1705

    
1706
    data->timerId = timeSetEvent(1,
1707
                        data->period,
1708
                        host_alarm_handler,
1709
                        (DWORD)t,
1710
                        TIME_ONESHOT | TIME_PERIODIC);
1711

    
1712
    if (!data->timerId) {
1713
        perror("Failed to re-arm win32 alarm timer");
1714

    
1715
        timeEndPeriod(data->period);
1716
        exit(1);
1717
    }
1718
}
1719

    
1720
#endif /* _WIN32 */
1721

    
1722
static int init_timer_alarm(void)
1723
{
1724
    struct qemu_alarm_timer *t = NULL;
1725
    int i, err = -1;
1726

    
1727
    for (i = 0; alarm_timers[i].name; i++) {
1728
        t = &alarm_timers[i];
1729

    
1730
        err = t->start(t);
1731
        if (!err)
1732
            break;
1733
    }
1734

    
1735
    if (err) {
1736
        err = -ENOENT;
1737
        goto fail;
1738
    }
1739

    
1740
    alarm_timer = t;
1741

    
1742
    return 0;
1743

    
1744
fail:
1745
    return err;
1746
}
1747

    
1748
static void quit_timers(void)
1749
{
1750
    alarm_timer->stop(alarm_timer);
1751
    alarm_timer = NULL;
1752
}
1753

    
1754
/***********************************************************/
1755
/* host time/date access */
1756
void qemu_get_timedate(struct tm *tm, int offset)
1757
{
1758
    time_t ti;
1759
    struct tm *ret;
1760

    
1761
    time(&ti);
1762
    ti += offset;
1763
    if (rtc_date_offset == -1) {
1764
        if (rtc_utc)
1765
            ret = gmtime(&ti);
1766
        else
1767
            ret = localtime(&ti);
1768
    } else {
1769
        ti -= rtc_date_offset;
1770
        ret = gmtime(&ti);
1771
    }
1772

    
1773
    memcpy(tm, ret, sizeof(struct tm));
1774
}
1775

    
1776
int qemu_timedate_diff(struct tm *tm)
1777
{
1778
    time_t seconds;
1779

    
1780
    if (rtc_date_offset == -1)
1781
        if (rtc_utc)
1782
            seconds = mktimegm(tm);
1783
        else
1784
            seconds = mktime(tm);
1785
    else
1786
        seconds = mktimegm(tm) + rtc_date_offset;
1787

    
1788
    return seconds - time(NULL);
1789
}
1790

    
1791
#ifdef _WIN32
1792
static void socket_cleanup(void)
1793
{
1794
    WSACleanup();
1795
}
1796

    
1797
static int socket_init(void)
1798
{
1799
    WSADATA Data;
1800
    int ret, err;
1801

    
1802
    ret = WSAStartup(MAKEWORD(2,2), &Data);
1803
    if (ret != 0) {
1804
        err = WSAGetLastError();
1805
        fprintf(stderr, "WSAStartup: %d\n", err);
1806
        return -1;
1807
    }
1808
    atexit(socket_cleanup);
1809
    return 0;
1810
}
1811
#endif
1812

    
1813
int get_next_param_value(char *buf, int buf_size,
1814
                         const char *tag, const char **pstr)
1815
{
1816
    const char *p;
1817
    char option[128];
1818

    
1819
    p = *pstr;
1820
    for(;;) {
1821
        p = get_opt_name(option, sizeof(option), p, '=');
1822
        if (*p != '=')
1823
            break;
1824
        p++;
1825
        if (!strcmp(tag, option)) {
1826
            *pstr = get_opt_value(buf, buf_size, p);
1827
            if (**pstr == ',') {
1828
                (*pstr)++;
1829
            }
1830
            return strlen(buf);
1831
        } else {
1832
            p = get_opt_value(NULL, 0, p);
1833
        }
1834
        if (*p != ',')
1835
            break;
1836
        p++;
1837
    }
1838
    return 0;
1839
}
1840

    
1841
int get_param_value(char *buf, int buf_size,
1842
                    const char *tag, const char *str)
1843
{
1844
    return get_next_param_value(buf, buf_size, tag, &str);
1845
}
1846

    
1847
int check_params(char *buf, int buf_size,
1848
                 const char * const *params, const char *str)
1849
{
1850
    const char *p;
1851
    int i;
1852

    
1853
    p = str;
1854
    while (*p != '\0') {
1855
        p = get_opt_name(buf, buf_size, p, '=');
1856
        if (*p != '=') {
1857
            return -1;
1858
        }
1859
        p++;
1860
        for (i = 0; params[i] != NULL; i++) {
1861
            if (!strcmp(params[i], buf)) {
1862
                break;
1863
            }
1864
        }
1865
        if (params[i] == NULL) {
1866
            return -1;
1867
        }
1868
        p = get_opt_value(NULL, 0, p);
1869
        if (*p != ',') {
1870
            break;
1871
        }
1872
        p++;
1873
    }
1874
    return 0;
1875
}
1876

    
1877
/***********************************************************/
1878
/* Bluetooth support */
1879
static int nb_hcis;
1880
static int cur_hci;
1881
static struct HCIInfo *hci_table[MAX_NICS];
1882

    
1883
static struct bt_vlan_s {
1884
    struct bt_scatternet_s net;
1885
    int id;
1886
    struct bt_vlan_s *next;
1887
} *first_bt_vlan;
1888

    
1889
/* find or alloc a new bluetooth "VLAN" */
1890
static struct bt_scatternet_s *qemu_find_bt_vlan(int id)
1891
{
1892
    struct bt_vlan_s **pvlan, *vlan;
1893
    for (vlan = first_bt_vlan; vlan != NULL; vlan = vlan->next) {
1894
        if (vlan->id == id)
1895
            return &vlan->net;
1896
    }
1897
    vlan = qemu_mallocz(sizeof(struct bt_vlan_s));
1898
    vlan->id = id;
1899
    pvlan = &first_bt_vlan;
1900
    while (*pvlan != NULL)
1901
        pvlan = &(*pvlan)->next;
1902
    *pvlan = vlan;
1903
    return &vlan->net;
1904
}
1905

    
1906
static void null_hci_send(struct HCIInfo *hci, const uint8_t *data, int len)
1907
{
1908
}
1909

    
1910
static int null_hci_addr_set(struct HCIInfo *hci, const uint8_t *bd_addr)
1911
{
1912
    return -ENOTSUP;
1913
}
1914

    
1915
static struct HCIInfo null_hci = {
1916
    .cmd_send = null_hci_send,
1917
    .sco_send = null_hci_send,
1918
    .acl_send = null_hci_send,
1919
    .bdaddr_set = null_hci_addr_set,
1920
};
1921

    
1922
struct HCIInfo *qemu_next_hci(void)
1923
{
1924
    if (cur_hci == nb_hcis)
1925
        return &null_hci;
1926

    
1927
    return hci_table[cur_hci++];
1928
}
1929

    
1930
static struct HCIInfo *hci_init(const char *str)
1931
{
1932
    char *endp;
1933
    struct bt_scatternet_s *vlan = 0;
1934

    
1935
    if (!strcmp(str, "null"))
1936
        /* null */
1937
        return &null_hci;
1938
    else if (!strncmp(str, "host", 4) && (str[4] == '\0' || str[4] == ':'))
1939
        /* host[:hciN] */
1940
        return bt_host_hci(str[4] ? str + 5 : "hci0");
1941
    else if (!strncmp(str, "hci", 3)) {
1942
        /* hci[,vlan=n] */
1943
        if (str[3]) {
1944
            if (!strncmp(str + 3, ",vlan=", 6)) {
1945
                vlan = qemu_find_bt_vlan(strtol(str + 9, &endp, 0));
1946
                if (*endp)
1947
                    vlan = 0;
1948
            }
1949
        } else
1950
            vlan = qemu_find_bt_vlan(0);
1951
        if (vlan)
1952
           return bt_new_hci(vlan);
1953
    }
1954

    
1955
    fprintf(stderr, "qemu: Unknown bluetooth HCI `%s'.\n", str);
1956

    
1957
    return 0;
1958
}
1959

    
1960
static int bt_hci_parse(const char *str)
1961
{
1962
    struct HCIInfo *hci;
1963
    bdaddr_t bdaddr;
1964

    
1965
    if (nb_hcis >= MAX_NICS) {
1966
        fprintf(stderr, "qemu: Too many bluetooth HCIs (max %i).\n", MAX_NICS);
1967
        return -1;
1968
    }
1969

    
1970
    hci = hci_init(str);
1971
    if (!hci)
1972
        return -1;
1973

    
1974
    bdaddr.b[0] = 0x52;
1975
    bdaddr.b[1] = 0x54;
1976
    bdaddr.b[2] = 0x00;
1977
    bdaddr.b[3] = 0x12;
1978
    bdaddr.b[4] = 0x34;
1979
    bdaddr.b[5] = 0x56 + nb_hcis;
1980
    hci->bdaddr_set(hci, bdaddr.b);
1981

    
1982
    hci_table[nb_hcis++] = hci;
1983

    
1984
    return 0;
1985
}
1986

    
1987
static void bt_vhci_add(int vlan_id)
1988
{
1989
    struct bt_scatternet_s *vlan = qemu_find_bt_vlan(vlan_id);
1990

    
1991
    if (!vlan->slave)
1992
        fprintf(stderr, "qemu: warning: adding a VHCI to "
1993
                        "an empty scatternet %i\n", vlan_id);
1994

    
1995
    bt_vhci_init(bt_new_hci(vlan));
1996
}
1997

    
1998
static struct bt_device_s *bt_device_add(const char *opt)
1999
{
2000
    struct bt_scatternet_s *vlan;
2001
    int vlan_id = 0;
2002
    char *endp = strstr(opt, ",vlan=");
2003
    int len = (endp ? endp - opt : strlen(opt)) + 1;
2004
    char devname[10];
2005

    
2006
    pstrcpy(devname, MIN(sizeof(devname), len), opt);
2007

    
2008
    if (endp) {
2009
        vlan_id = strtol(endp + 6, &endp, 0);
2010
        if (*endp) {
2011
            fprintf(stderr, "qemu: unrecognised bluetooth vlan Id\n");
2012
            return 0;
2013
        }
2014
    }
2015

    
2016
    vlan = qemu_find_bt_vlan(vlan_id);
2017

    
2018
    if (!vlan->slave)
2019
        fprintf(stderr, "qemu: warning: adding a slave device to "
2020
                        "an empty scatternet %i\n", vlan_id);
2021

    
2022
    if (!strcmp(devname, "keyboard"))
2023
        return bt_keyboard_init(vlan);
2024

    
2025
    fprintf(stderr, "qemu: unsupported bluetooth device `%s'\n", devname);
2026
    return 0;
2027
}
2028

    
2029
static int bt_parse(const char *opt)
2030
{
2031
    const char *endp, *p;
2032
    int vlan;
2033

    
2034
    if (strstart(opt, "hci", &endp)) {
2035
        if (!*endp || *endp == ',') {
2036
            if (*endp)
2037
                if (!strstart(endp, ",vlan=", 0))
2038
                    opt = endp + 1;
2039

    
2040
            return bt_hci_parse(opt);
2041
       }
2042
    } else if (strstart(opt, "vhci", &endp)) {
2043
        if (!*endp || *endp == ',') {
2044
            if (*endp) {
2045
                if (strstart(endp, ",vlan=", &p)) {
2046
                    vlan = strtol(p, (char **) &endp, 0);
2047
                    if (*endp) {
2048
                        fprintf(stderr, "qemu: bad scatternet '%s'\n", p);
2049
                        return 1;
2050
                    }
2051
                } else {
2052
                    fprintf(stderr, "qemu: bad parameter '%s'\n", endp + 1);
2053
                    return 1;
2054
                }
2055
            } else
2056
                vlan = 0;
2057

    
2058
            bt_vhci_add(vlan);
2059
            return 0;
2060
        }
2061
    } else if (strstart(opt, "device:", &endp))
2062
        return !bt_device_add(endp);
2063

    
2064
    fprintf(stderr, "qemu: bad bluetooth parameter '%s'\n", opt);
2065
    return 1;
2066
}
2067

    
2068
/***********************************************************/
2069
/* QEMU Block devices */
2070

    
2071
#define HD_ALIAS "index=%d,media=disk"
2072
#define CDROM_ALIAS "index=2,media=cdrom"
2073
#define FD_ALIAS "index=%d,if=floppy"
2074
#define PFLASH_ALIAS "if=pflash"
2075
#define MTD_ALIAS "if=mtd"
2076
#define SD_ALIAS "index=0,if=sd"
2077

    
2078
static int drive_opt_get_free_idx(void)
2079
{
2080
    int index;
2081

    
2082
    for (index = 0; index < MAX_DRIVES; index++)
2083
        if (!drives_opt[index].used) {
2084
            drives_opt[index].used = 1;
2085
            return index;
2086
        }
2087

    
2088
    return -1;
2089
}
2090

    
2091
static int drive_get_free_idx(void)
2092
{
2093
    int index;
2094

    
2095
    for (index = 0; index < MAX_DRIVES; index++)
2096
        if (!drives_table[index].used) {
2097
            drives_table[index].used = 1;
2098
            return index;
2099
        }
2100

    
2101
    return -1;
2102
}
2103

    
2104
int drive_add(const char *file, const char *fmt, ...)
2105
{
2106
    va_list ap;
2107
    int index = drive_opt_get_free_idx();
2108

    
2109
    if (nb_drives_opt >= MAX_DRIVES || index == -1) {
2110
        fprintf(stderr, "qemu: too many drives\n");
2111
        return -1;
2112
    }
2113

    
2114
    drives_opt[index].file = file;
2115
    va_start(ap, fmt);
2116
    vsnprintf(drives_opt[index].opt,
2117
              sizeof(drives_opt[0].opt), fmt, ap);
2118
    va_end(ap);
2119

    
2120
    nb_drives_opt++;
2121
    return index;
2122
}
2123

    
2124
void drive_remove(int index)
2125
{
2126
    drives_opt[index].used = 0;
2127
    nb_drives_opt--;
2128
}
2129

    
2130
int drive_get_index(BlockInterfaceType type, int bus, int unit)
2131
{
2132
    int index;
2133

    
2134
    /* seek interface, bus and unit */
2135

    
2136
    for (index = 0; index < MAX_DRIVES; index++)
2137
        if (drives_table[index].type == type &&
2138
            drives_table[index].bus == bus &&
2139
            drives_table[index].unit == unit &&
2140
            drives_table[index].used)
2141
        return index;
2142

    
2143
    return -1;
2144
}
2145

    
2146
int drive_get_max_bus(BlockInterfaceType type)
2147
{
2148
    int max_bus;
2149
    int index;
2150

    
2151
    max_bus = -1;
2152
    for (index = 0; index < nb_drives; index++) {
2153
        if(drives_table[index].type == type &&
2154
           drives_table[index].bus > max_bus)
2155
            max_bus = drives_table[index].bus;
2156
    }
2157
    return max_bus;
2158
}
2159

    
2160
const char *drive_get_serial(BlockDriverState *bdrv)
2161
{
2162
    int index;
2163

    
2164
    for (index = 0; index < nb_drives; index++)
2165
        if (drives_table[index].bdrv == bdrv)
2166
            return drives_table[index].serial;
2167

    
2168
    return "\0";
2169
}
2170

    
2171
BlockInterfaceErrorAction drive_get_onerror(BlockDriverState *bdrv)
2172
{
2173
    int index;
2174

    
2175
    for (index = 0; index < nb_drives; index++)
2176
        if (drives_table[index].bdrv == bdrv)
2177
            return drives_table[index].onerror;
2178

    
2179
    return BLOCK_ERR_STOP_ENOSPC;
2180
}
2181

    
2182
static void bdrv_format_print(void *opaque, const char *name)
2183
{
2184
    fprintf(stderr, " %s", name);
2185
}
2186

    
2187
void drive_uninit(BlockDriverState *bdrv)
2188
{
2189
    int i;
2190

    
2191
    for (i = 0; i < MAX_DRIVES; i++)
2192
        if (drives_table[i].bdrv == bdrv) {
2193
            drives_table[i].bdrv = NULL;
2194
            drives_table[i].used = 0;
2195
            drive_remove(drives_table[i].drive_opt_idx);
2196
            nb_drives--;
2197
            break;
2198
        }
2199
}
2200

    
2201
int drive_init(struct drive_opt *arg, int snapshot, void *opaque)
2202
{
2203
    char buf[128];
2204
    char file[1024];
2205
    char devname[128];
2206
    char serial[21];
2207
    const char *mediastr = "";
2208
    BlockInterfaceType type;
2209
    enum { MEDIA_DISK, MEDIA_CDROM } media;
2210
    int bus_id, unit_id;
2211
    int cyls, heads, secs, translation;
2212
    BlockDriverState *bdrv;
2213
    BlockDriver *drv = NULL;
2214
    QEMUMachine *machine = opaque;
2215
    int max_devs;
2216
    int index;
2217
    int cache;
2218
    int bdrv_flags, onerror;
2219
    const char *devaddr;
2220
    int drives_table_idx;
2221
    char *str = arg->opt;
2222
    static const char * const params[] = { "bus", "unit", "if", "index",
2223
                                           "cyls", "heads", "secs", "trans",
2224
                                           "media", "snapshot", "file",
2225
                                           "cache", "format", "serial",
2226
                                           "werror", "addr",
2227
                                           NULL };
2228

    
2229
    if (check_params(buf, sizeof(buf), params, str) < 0) {
2230
         fprintf(stderr, "qemu: unknown parameter '%s' in '%s'\n",
2231
                         buf, str);
2232
         return -1;
2233
    }
2234

    
2235
    file[0] = 0;
2236
    cyls = heads = secs = 0;
2237
    bus_id = 0;
2238
    unit_id = -1;
2239
    translation = BIOS_ATA_TRANSLATION_AUTO;
2240
    index = -1;
2241
    cache = 3;
2242

    
2243
    if (machine->use_scsi) {
2244
        type = IF_SCSI;
2245
        max_devs = MAX_SCSI_DEVS;
2246
        pstrcpy(devname, sizeof(devname), "scsi");
2247
    } else {
2248
        type = IF_IDE;
2249
        max_devs = MAX_IDE_DEVS;
2250
        pstrcpy(devname, sizeof(devname), "ide");
2251
    }
2252
    media = MEDIA_DISK;
2253

    
2254
    /* extract parameters */
2255

    
2256
    if (get_param_value(buf, sizeof(buf), "bus", str)) {
2257
        bus_id = strtol(buf, NULL, 0);
2258
        if (bus_id < 0) {
2259
            fprintf(stderr, "qemu: '%s' invalid bus id\n", str);
2260
            return -1;
2261
        }
2262
    }
2263

    
2264
    if (get_param_value(buf, sizeof(buf), "unit", str)) {
2265
        unit_id = strtol(buf, NULL, 0);
2266
        if (unit_id < 0) {
2267
            fprintf(stderr, "qemu: '%s' invalid unit id\n", str);
2268
            return -1;
2269
        }
2270
    }
2271

    
2272
    if (get_param_value(buf, sizeof(buf), "if", str)) {
2273
        pstrcpy(devname, sizeof(devname), buf);
2274
        if (!strcmp(buf, "ide")) {
2275
            type = IF_IDE;
2276
            max_devs = MAX_IDE_DEVS;
2277
        } else if (!strcmp(buf, "scsi")) {
2278
            type = IF_SCSI;
2279
            max_devs = MAX_SCSI_DEVS;
2280
        } else if (!strcmp(buf, "floppy")) {
2281
            type = IF_FLOPPY;
2282
            max_devs = 0;
2283
        } else if (!strcmp(buf, "pflash")) {
2284
            type = IF_PFLASH;
2285
            max_devs = 0;
2286
        } else if (!strcmp(buf, "mtd")) {
2287
            type = IF_MTD;
2288
            max_devs = 0;
2289
        } else if (!strcmp(buf, "sd")) {
2290
            type = IF_SD;
2291
            max_devs = 0;
2292
        } else if (!strcmp(buf, "virtio")) {
2293
            type = IF_VIRTIO;
2294
            max_devs = 0;
2295
        } else if (!strcmp(buf, "xen")) {
2296
            type = IF_XEN;
2297
            max_devs = 0;
2298
        } else {
2299
            fprintf(stderr, "qemu: '%s' unsupported bus type '%s'\n", str, buf);
2300
            return -1;
2301
        }
2302
    }
2303

    
2304
    if (get_param_value(buf, sizeof(buf), "index", str)) {
2305
        index = strtol(buf, NULL, 0);
2306
        if (index < 0) {
2307
            fprintf(stderr, "qemu: '%s' invalid index\n", str);
2308
            return -1;
2309
        }
2310
    }
2311

    
2312
    if (get_param_value(buf, sizeof(buf), "cyls", str)) {
2313
        cyls = strtol(buf, NULL, 0);
2314
    }
2315

    
2316
    if (get_param_value(buf, sizeof(buf), "heads", str)) {
2317
        heads = strtol(buf, NULL, 0);
2318
    }
2319

    
2320
    if (get_param_value(buf, sizeof(buf), "secs", str)) {
2321
        secs = strtol(buf, NULL, 0);
2322
    }
2323

    
2324
    if (cyls || heads || secs) {
2325
        if (cyls < 1 || cyls > 16383) {
2326
            fprintf(stderr, "qemu: '%s' invalid physical cyls number\n", str);
2327
            return -1;
2328
        }
2329
        if (heads < 1 || heads > 16) {
2330
            fprintf(stderr, "qemu: '%s' invalid physical heads number\n", str);
2331
            return -1;
2332
        }
2333
        if (secs < 1 || secs > 63) {
2334
            fprintf(stderr, "qemu: '%s' invalid physical secs number\n", str);
2335
            return -1;
2336
        }
2337
    }
2338

    
2339
    if (get_param_value(buf, sizeof(buf), "trans", str)) {
2340
        if (!cyls) {
2341
            fprintf(stderr,
2342
                    "qemu: '%s' trans must be used with cyls,heads and secs\n",
2343
                    str);
2344
            return -1;
2345
        }
2346
        if (!strcmp(buf, "none"))
2347
            translation = BIOS_ATA_TRANSLATION_NONE;
2348
        else if (!strcmp(buf, "lba"))
2349
            translation = BIOS_ATA_TRANSLATION_LBA;
2350
        else if (!strcmp(buf, "auto"))
2351
            translation = BIOS_ATA_TRANSLATION_AUTO;
2352
        else {
2353
            fprintf(stderr, "qemu: '%s' invalid translation type\n", str);
2354
            return -1;
2355
        }
2356
    }
2357

    
2358
    if (get_param_value(buf, sizeof(buf), "media", str)) {
2359
        if (!strcmp(buf, "disk")) {
2360
            media = MEDIA_DISK;
2361
        } else if (!strcmp(buf, "cdrom")) {
2362
            if (cyls || secs || heads) {
2363
                fprintf(stderr,
2364
                        "qemu: '%s' invalid physical CHS format\n", str);
2365
                return -1;
2366
            }
2367
            media = MEDIA_CDROM;
2368
        } else {
2369
            fprintf(stderr, "qemu: '%s' invalid media\n", str);
2370
            return -1;
2371
        }
2372
    }
2373

    
2374
    if (get_param_value(buf, sizeof(buf), "snapshot", str)) {
2375
        if (!strcmp(buf, "on"))
2376
            snapshot = 1;
2377
        else if (!strcmp(buf, "off"))
2378
            snapshot = 0;
2379
        else {
2380
            fprintf(stderr, "qemu: '%s' invalid snapshot option\n", str);
2381
            return -1;
2382
        }
2383
    }
2384

    
2385
    if (get_param_value(buf, sizeof(buf), "cache", str)) {
2386
        if (!strcmp(buf, "off") || !strcmp(buf, "none"))
2387
            cache = 0;
2388
        else if (!strcmp(buf, "writethrough"))
2389
            cache = 1;
2390
        else if (!strcmp(buf, "writeback"))
2391
            cache = 2;
2392
        else {
2393
           fprintf(stderr, "qemu: invalid cache option\n");
2394
           return -1;
2395
        }
2396
    }
2397

    
2398
    if (get_param_value(buf, sizeof(buf), "format", str)) {
2399
       if (strcmp(buf, "?") == 0) {
2400
            fprintf(stderr, "qemu: Supported formats:");
2401
            bdrv_iterate_format(bdrv_format_print, NULL);
2402
            fprintf(stderr, "\n");
2403
            return -1;
2404
        }
2405
        drv = bdrv_find_format(buf);
2406
        if (!drv) {
2407
            fprintf(stderr, "qemu: '%s' invalid format\n", buf);
2408
            return -1;
2409
        }
2410
    }
2411

    
2412
    if (arg->file == NULL)
2413
        get_param_value(file, sizeof(file), "file", str);
2414
    else
2415
        pstrcpy(file, sizeof(file), arg->file);
2416

    
2417
    if (!get_param_value(serial, sizeof(serial), "serial", str))
2418
            memset(serial, 0,  sizeof(serial));
2419

    
2420
    onerror = BLOCK_ERR_STOP_ENOSPC;
2421
    if (get_param_value(buf, sizeof(serial), "werror", str)) {
2422
        if (type != IF_IDE && type != IF_SCSI && type != IF_VIRTIO) {
2423
            fprintf(stderr, "werror is no supported by this format\n");
2424
            return -1;
2425
        }
2426
        if (!strcmp(buf, "ignore"))
2427
            onerror = BLOCK_ERR_IGNORE;
2428
        else if (!strcmp(buf, "enospc"))
2429
            onerror = BLOCK_ERR_STOP_ENOSPC;
2430
        else if (!strcmp(buf, "stop"))
2431
            onerror = BLOCK_ERR_STOP_ANY;
2432
        else if (!strcmp(buf, "report"))
2433
            onerror = BLOCK_ERR_REPORT;
2434
        else {
2435
            fprintf(stderr, "qemu: '%s' invalid write error action\n", buf);
2436
            return -1;
2437
        }
2438
    }
2439

    
2440
    devaddr = NULL;
2441
    if (get_param_value(buf, sizeof(buf), "addr", str)) {
2442
        if (type != IF_VIRTIO) {
2443
            fprintf(stderr, "addr is not supported by in '%s'\n", str);
2444
            return -1;
2445
        }
2446
        devaddr = strdup(buf);
2447
    }
2448

    
2449
    /* compute bus and unit according index */
2450

    
2451
    if (index != -1) {
2452
        if (bus_id != 0 || unit_id != -1) {
2453
            fprintf(stderr,
2454
                    "qemu: '%s' index cannot be used with bus and unit\n", str);
2455
            return -1;
2456
        }
2457
        if (max_devs == 0)
2458
        {
2459
            unit_id = index;
2460
            bus_id = 0;
2461
        } else {
2462
            unit_id = index % max_devs;
2463
            bus_id = index / max_devs;
2464
        }
2465
    }
2466

    
2467
    /* if user doesn't specify a unit_id,
2468
     * try to find the first free
2469
     */
2470

    
2471
    if (unit_id == -1) {
2472
       unit_id = 0;
2473
       while (drive_get_index(type, bus_id, unit_id) != -1) {
2474
           unit_id++;
2475
           if (max_devs && unit_id >= max_devs) {
2476
               unit_id -= max_devs;
2477
               bus_id++;
2478
           }
2479
       }
2480
    }
2481

    
2482
    /* check unit id */
2483

    
2484
    if (max_devs && unit_id >= max_devs) {
2485
        fprintf(stderr, "qemu: '%s' unit %d too big (max is %d)\n",
2486
                        str, unit_id, max_devs - 1);
2487
        return -1;
2488
    }
2489

    
2490
    /*
2491
     * ignore multiple definitions
2492
     */
2493

    
2494
    if (drive_get_index(type, bus_id, unit_id) != -1)
2495
        return -2;
2496

    
2497
    /* init */
2498

    
2499
    if (type == IF_IDE || type == IF_SCSI)
2500
        mediastr = (media == MEDIA_CDROM) ? "-cd" : "-hd";
2501
    if (max_devs)
2502
        snprintf(buf, sizeof(buf), "%s%i%s%i",
2503
                 devname, bus_id, mediastr, unit_id);
2504
    else
2505
        snprintf(buf, sizeof(buf), "%s%s%i",
2506
                 devname, mediastr, unit_id);
2507
    bdrv = bdrv_new(buf);
2508
    drives_table_idx = drive_get_free_idx();
2509
    drives_table[drives_table_idx].bdrv = bdrv;
2510
    drives_table[drives_table_idx].devaddr = devaddr;
2511
    drives_table[drives_table_idx].type = type;
2512
    drives_table[drives_table_idx].bus = bus_id;
2513
    drives_table[drives_table_idx].unit = unit_id;
2514
    drives_table[drives_table_idx].onerror = onerror;
2515
    drives_table[drives_table_idx].drive_opt_idx = arg - drives_opt;
2516
    strncpy(drives_table[drives_table_idx].serial, serial, sizeof(serial));
2517
    nb_drives++;
2518

    
2519
    switch(type) {
2520
    case IF_IDE:
2521
    case IF_SCSI:
2522
    case IF_XEN:
2523
        switch(media) {
2524
        case MEDIA_DISK:
2525
            if (cyls != 0) {
2526
                bdrv_set_geometry_hint(bdrv, cyls, heads, secs);
2527
                bdrv_set_translation_hint(bdrv, translation);
2528
            }
2529
            break;
2530
        case MEDIA_CDROM:
2531
            bdrv_set_type_hint(bdrv, BDRV_TYPE_CDROM);
2532
            break;
2533
        }
2534
        break;
2535
    case IF_SD:
2536
        /* FIXME: This isn't really a floppy, but it's a reasonable
2537
           approximation.  */
2538
    case IF_FLOPPY:
2539
        bdrv_set_type_hint(bdrv, BDRV_TYPE_FLOPPY);
2540
        break;
2541
    case IF_PFLASH:
2542
    case IF_MTD:
2543
    case IF_VIRTIO:
2544
        break;
2545
    case IF_COUNT:
2546
        abort();
2547
    }
2548
    if (!file[0])
2549
        return -2;
2550
    bdrv_flags = 0;
2551
    if (snapshot) {
2552
        bdrv_flags |= BDRV_O_SNAPSHOT;
2553
        cache = 2; /* always use write-back with snapshot */
2554
    }
2555
    if (cache == 0) /* no caching */
2556
        bdrv_flags |= BDRV_O_NOCACHE;
2557
    else if (cache == 2) /* write-back */
2558
        bdrv_flags |= BDRV_O_CACHE_WB;
2559
    else if (cache == 3) /* not specified */
2560
        bdrv_flags |= BDRV_O_CACHE_DEF;
2561
    if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0) {
2562
        fprintf(stderr, "qemu: could not open disk image %s\n",
2563
                        file);
2564
        return -1;
2565
    }
2566
    if (bdrv_key_required(bdrv))
2567
        autostart = 0;
2568
    return drives_table_idx;
2569
}
2570

    
2571
static void numa_add(const char *optarg)
2572
{
2573
    char option[128];
2574
    char *endptr;
2575
    unsigned long long value, endvalue;
2576
    int nodenr;
2577

    
2578
    optarg = get_opt_name(option, 128, optarg, ',') + 1;
2579
    if (!strcmp(option, "node")) {
2580
        if (get_param_value(option, 128, "nodeid", optarg) == 0) {
2581
            nodenr = nb_numa_nodes;
2582
        } else {
2583
            nodenr = strtoull(option, NULL, 10);
2584
        }
2585

    
2586
        if (get_param_value(option, 128, "mem", optarg) == 0) {
2587
            node_mem[nodenr] = 0;
2588
        } else {
2589
            value = strtoull(option, &endptr, 0);
2590
            switch (*endptr) {
2591
            case 0: case 'M': case 'm':
2592
                value <<= 20;
2593
                break;
2594
            case 'G': case 'g':
2595
                value <<= 30;
2596
                break;
2597
            }
2598
            node_mem[nodenr] = value;
2599
        }
2600
        if (get_param_value(option, 128, "cpus", optarg) == 0) {
2601
            node_cpumask[nodenr] = 0;
2602
        } else {
2603
            value = strtoull(option, &endptr, 10);
2604
            if (value >= 64) {
2605
                value = 63;
2606
                fprintf(stderr, "only 64 CPUs in NUMA mode supported.\n");
2607
            } else {
2608
                if (*endptr == '-') {
2609
                    endvalue = strtoull(endptr+1, &endptr, 10);
2610
                    if (endvalue >= 63) {
2611
                        endvalue = 62;
2612
                        fprintf(stderr,
2613
                            "only 63 CPUs in NUMA mode supported.\n");
2614
                    }
2615
                    value = (1 << (endvalue + 1)) - (1 << value);
2616
                } else {
2617
                    value = 1 << value;
2618
                }
2619
            }
2620
            node_cpumask[nodenr] = value;
2621
        }
2622
        nb_numa_nodes++;
2623
    }
2624
    return;
2625
}
2626

    
2627
/***********************************************************/
2628
/* USB devices */
2629

    
2630
static USBPort *used_usb_ports;
2631
static USBPort *free_usb_ports;
2632

    
2633
/* ??? Maybe change this to register a hub to keep track of the topology.  */
2634
void qemu_register_usb_port(USBPort *port, void *opaque, int index,
2635
                            usb_attachfn attach)
2636
{
2637
    port->opaque = opaque;
2638
    port->index = index;
2639
    port->attach = attach;
2640
    port->next = free_usb_ports;
2641
    free_usb_ports = port;
2642
}
2643

    
2644
int usb_device_add_dev(USBDevice *dev)
2645
{
2646
    USBPort *port;
2647

    
2648
    /* Find a USB port to add the device to.  */
2649
    port = free_usb_ports;
2650
    if (!port->next) {
2651
        USBDevice *hub;
2652

    
2653
        /* Create a new hub and chain it on.  */
2654
        free_usb_ports = NULL;
2655
        port->next = used_usb_ports;
2656
        used_usb_ports = port;
2657

    
2658
        hub = usb_hub_init(VM_USB_HUB_SIZE);
2659
        usb_attach(port, hub);
2660
        port = free_usb_ports;
2661
    }
2662

    
2663
    free_usb_ports = port->next;
2664
    port->next = used_usb_ports;
2665
    used_usb_ports = port;
2666
    usb_attach(port, dev);
2667
    return 0;
2668
}
2669

    
2670
static void usb_msd_password_cb(void *opaque, int err)
2671
{
2672
    USBDevice *dev = opaque;
2673

    
2674
    if (!err)
2675
        usb_device_add_dev(dev);
2676
    else
2677
        dev->handle_destroy(dev);
2678
}
2679

    
2680
static int usb_device_add(const char *devname, int is_hotplug)
2681
{
2682
    const char *p;
2683
    USBDevice *dev;
2684

    
2685
    if (!free_usb_ports)
2686
        return -1;
2687

    
2688
    if (strstart(devname, "host:", &p)) {
2689
        dev = usb_host_device_open(p);
2690
    } else if (!strcmp(devname, "mouse")) {
2691
        dev = usb_mouse_init();
2692
    } else if (!strcmp(devname, "tablet")) {
2693
        dev = usb_tablet_init();
2694
    } else if (!strcmp(devname, "keyboard")) {
2695
        dev = usb_keyboard_init();
2696
    } else if (strstart(devname, "disk:", &p)) {
2697
        BlockDriverState *bs;
2698

    
2699
        dev = usb_msd_init(p);
2700
        if (!dev)
2701
            return -1;
2702
        bs = usb_msd_get_bdrv(dev);
2703
        if (bdrv_key_required(bs)) {
2704
            autostart = 0;
2705
            if (is_hotplug) {
2706
                monitor_read_bdrv_key_start(cur_mon, bs, usb_msd_password_cb,
2707
                                            dev);
2708
                return 0;
2709
            }
2710
        }
2711
    } else if (!strcmp(devname, "wacom-tablet")) {
2712
        dev = usb_wacom_init();
2713
    } else if (strstart(devname, "serial:", &p)) {
2714
        dev = usb_serial_init(p);
2715
#ifdef CONFIG_BRLAPI
2716
    } else if (!strcmp(devname, "braille")) {
2717
        dev = usb_baum_init();
2718
#endif
2719
    } else if (strstart(devname, "net:", &p)) {
2720
        int nic = nb_nics;
2721

    
2722
        if (net_client_init(NULL, "nic", p) < 0)
2723
            return -1;
2724
        nd_table[nic].model = "usb";
2725
        dev = usb_net_init(&nd_table[nic]);
2726
    } else if (!strcmp(devname, "bt") || strstart(devname, "bt:", &p)) {
2727
        dev = usb_bt_init(devname[2] ? hci_init(p) :
2728
                        bt_new_hci(qemu_find_bt_vlan(0)));
2729
    } else {
2730
        return -1;
2731
    }
2732
    if (!dev)
2733
        return -1;
2734

    
2735
    return usb_device_add_dev(dev);
2736
}
2737

    
2738
int usb_device_del_addr(int bus_num, int addr)
2739
{
2740
    USBPort *port;
2741
    USBPort **lastp;
2742
    USBDevice *dev;
2743

    
2744
    if (!used_usb_ports)
2745
        return -1;
2746

    
2747
    if (bus_num != 0)
2748
        return -1;
2749

    
2750
    lastp = &used_usb_ports;
2751
    port = used_usb_ports;
2752
    while (port && port->dev->addr != addr) {
2753
        lastp = &port->next;
2754
        port = port->next;
2755
    }
2756

    
2757
    if (!port)
2758
        return -1;
2759

    
2760
    dev = port->dev;
2761
    *lastp = port->next;
2762
    usb_attach(port, NULL);
2763
    dev->handle_destroy(dev);
2764
    port->next = free_usb_ports;
2765
    free_usb_ports = port;
2766
    return 0;
2767
}
2768

    
2769
static int usb_device_del(const char *devname)
2770
{
2771
    int bus_num, addr;
2772
    const char *p;
2773

    
2774
    if (strstart(devname, "host:", &p))
2775
        return usb_host_device_close(p);
2776

    
2777
    if (!used_usb_ports)
2778
        return -1;
2779

    
2780
    p = strchr(devname, '.');
2781
    if (!p)
2782
        return -1;
2783
    bus_num = strtoul(devname, NULL, 0);
2784
    addr = strtoul(p + 1, NULL, 0);
2785

    
2786
    return usb_device_del_addr(bus_num, addr);
2787
}
2788

    
2789
void do_usb_add(Monitor *mon, const char *devname)
2790
{
2791
    usb_device_add(devname, 1);
2792
}
2793

    
2794
void do_usb_del(Monitor *mon, const char *devname)
2795
{
2796
    usb_device_del(devname);
2797
}
2798

    
2799
void usb_info(Monitor *mon)
2800
{
2801
    USBDevice *dev;
2802
    USBPort *port;
2803
    const char *speed_str;
2804

    
2805
    if (!usb_enabled) {
2806
        monitor_printf(mon, "USB support not enabled\n");
2807
        return;
2808
    }
2809

    
2810
    for (port = used_usb_ports; port; port = port->next) {
2811
        dev = port->dev;
2812
        if (!dev)
2813
            continue;
2814
        switch(dev->speed) {
2815
        case USB_SPEED_LOW:
2816
            speed_str = "1.5";
2817
            break;
2818
        case USB_SPEED_FULL:
2819
            speed_str = "12";
2820
            break;
2821
        case USB_SPEED_HIGH:
2822
            speed_str = "480";
2823
            break;
2824
        default:
2825
            speed_str = "?";
2826
            break;
2827
        }
2828
        monitor_printf(mon, "  Device %d.%d, Speed %s Mb/s, Product %s\n",
2829
                       0, dev->addr, speed_str, dev->devname);
2830
    }
2831
}
2832

    
2833
/***********************************************************/
2834
/* PCMCIA/Cardbus */
2835

    
2836
static struct pcmcia_socket_entry_s {
2837
    PCMCIASocket *socket;
2838
    struct pcmcia_socket_entry_s *next;
2839
} *pcmcia_sockets = 0;
2840

    
2841
void pcmcia_socket_register(PCMCIASocket *socket)
2842
{
2843
    struct pcmcia_socket_entry_s *entry;
2844

    
2845
    entry = qemu_malloc(sizeof(struct pcmcia_socket_entry_s));
2846
    entry->socket = socket;
2847
    entry->next = pcmcia_sockets;
2848
    pcmcia_sockets = entry;
2849
}
2850

    
2851
void pcmcia_socket_unregister(PCMCIASocket *socket)
2852
{
2853
    struct pcmcia_socket_entry_s *entry, **ptr;
2854

    
2855
    ptr = &pcmcia_sockets;
2856
    for (entry = *ptr; entry; ptr = &entry->next, entry = *ptr)
2857
        if (entry->socket == socket) {
2858
            *ptr = entry->next;
2859
            qemu_free(entry);
2860
        }
2861
}
2862

    
2863
void pcmcia_info(Monitor *mon)
2864
{
2865
    struct pcmcia_socket_entry_s *iter;
2866

    
2867
    if (!pcmcia_sockets)
2868
        monitor_printf(mon, "No PCMCIA sockets\n");
2869

    
2870
    for (iter = pcmcia_sockets; iter; iter = iter->next)
2871
        monitor_printf(mon, "%s: %s\n", iter->socket->slot_string,
2872
                       iter->socket->attached ? iter->socket->card_string :
2873
                       "Empty");
2874
}
2875

    
2876
/***********************************************************/
2877
/* register display */
2878

    
2879
struct DisplayAllocator default_allocator = {
2880
    defaultallocator_create_displaysurface,
2881
    defaultallocator_resize_displaysurface,
2882
    defaultallocator_free_displaysurface
2883
};
2884

    
2885
void register_displaystate(DisplayState *ds)
2886
{
2887
    DisplayState **s;
2888
    s = &display_state;
2889
    while (*s != NULL)
2890
        s = &(*s)->next;
2891
    ds->next = NULL;
2892
    *s = ds;
2893
}
2894

    
2895
DisplayState *get_displaystate(void)
2896
{
2897
    return display_state;
2898
}
2899

    
2900
DisplayAllocator *register_displayallocator(DisplayState *ds, DisplayAllocator *da)
2901
{
2902
    if(ds->allocator ==  &default_allocator) ds->allocator = da;
2903
    return ds->allocator;
2904
}
2905

    
2906
/* dumb display */
2907

    
2908
static void dumb_display_init(void)
2909
{
2910
    DisplayState *ds = qemu_mallocz(sizeof(DisplayState));
2911
    ds->allocator = &default_allocator;
2912
    ds->surface = qemu_create_displaysurface(ds, 640, 480);
2913
    register_displaystate(ds);
2914
}
2915

    
2916
/***********************************************************/
2917
/* I/O handling */
2918

    
2919
typedef struct IOHandlerRecord {
2920
    int fd;
2921
    IOCanRWHandler *fd_read_poll;
2922
    IOHandler *fd_read;
2923
    IOHandler *fd_write;
2924
    int deleted;
2925
    void *opaque;
2926
    /* temporary data */
2927
    struct pollfd *ufd;
2928
    struct IOHandlerRecord *next;
2929
} IOHandlerRecord;
2930

    
2931
static IOHandlerRecord *first_io_handler;
2932

    
2933
/* XXX: fd_read_poll should be suppressed, but an API change is
2934
   necessary in the character devices to suppress fd_can_read(). */
2935
int qemu_set_fd_handler2(int fd,
2936
                         IOCanRWHandler *fd_read_poll,
2937
                         IOHandler *fd_read,
2938
                         IOHandler *fd_write,
2939
                         void *opaque)
2940
{
2941
    IOHandlerRecord **pioh, *ioh;
2942

    
2943
    if (!fd_read && !fd_write) {
2944
        pioh = &first_io_handler;
2945
        for(;;) {
2946
            ioh = *pioh;
2947
            if (ioh == NULL)
2948
                break;
2949
            if (ioh->fd == fd) {
2950
                ioh->deleted = 1;
2951
                break;
2952
            }
2953
            pioh = &ioh->next;
2954
        }
2955
    } else {
2956
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
2957
            if (ioh->fd == fd)
2958
                goto found;
2959
        }
2960
        ioh = qemu_mallocz(sizeof(IOHandlerRecord));
2961
        ioh->next = first_io_handler;
2962
        first_io_handler = ioh;
2963
    found:
2964
        ioh->fd = fd;
2965
        ioh->fd_read_poll = fd_read_poll;
2966
        ioh->fd_read = fd_read;
2967
        ioh->fd_write = fd_write;
2968
        ioh->opaque = opaque;
2969
        ioh->deleted = 0;
2970
    }
2971
    return 0;
2972
}
2973

    
2974
int qemu_set_fd_handler(int fd,
2975
                        IOHandler *fd_read,
2976
                        IOHandler *fd_write,
2977
                        void *opaque)
2978
{
2979
    return qemu_set_fd_handler2(fd, NULL, fd_read, fd_write, opaque);
2980
}
2981

    
2982
#ifdef _WIN32
2983
/***********************************************************/
2984
/* Polling handling */
2985

    
2986
typedef struct PollingEntry {
2987
    PollingFunc *func;
2988
    void *opaque;
2989
    struct PollingEntry *next;
2990
} PollingEntry;
2991

    
2992
static PollingEntry *first_polling_entry;
2993

    
2994
int qemu_add_polling_cb(PollingFunc *func, void *opaque)
2995
{
2996
    PollingEntry **ppe, *pe;
2997
    pe = qemu_mallocz(sizeof(PollingEntry));
2998
    pe->func = func;
2999
    pe->opaque = opaque;
3000
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next);
3001
    *ppe = pe;
3002
    return 0;
3003
}
3004

    
3005
void qemu_del_polling_cb(PollingFunc *func, void *opaque)
3006
{
3007
    PollingEntry **ppe, *pe;
3008
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next) {
3009
        pe = *ppe;
3010
        if (pe->func == func && pe->opaque == opaque) {
3011
            *ppe = pe->next;
3012
            qemu_free(pe);
3013
            break;
3014
        }
3015
    }
3016
}
3017

    
3018
/***********************************************************/
3019
/* Wait objects support */
3020
typedef struct WaitObjects {
3021
    int num;
3022
    HANDLE events[MAXIMUM_WAIT_OBJECTS + 1];
3023
    WaitObjectFunc *func[MAXIMUM_WAIT_OBJECTS + 1];
3024
    void *opaque[MAXIMUM_WAIT_OBJECTS + 1];
3025
} WaitObjects;
3026

    
3027
static WaitObjects wait_objects = {0};
3028

    
3029
int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
3030
{
3031
    WaitObjects *w = &wait_objects;
3032

    
3033
    if (w->num >= MAXIMUM_WAIT_OBJECTS)
3034
        return -1;
3035
    w->events[w->num] = handle;
3036
    w->func[w->num] = func;
3037
    w->opaque[w->num] = opaque;
3038
    w->num++;
3039
    return 0;
3040
}
3041

    
3042
void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
3043
{
3044
    int i, found;
3045
    WaitObjects *w = &wait_objects;
3046

    
3047
    found = 0;
3048
    for (i = 0; i < w->num; i++) {
3049
        if (w->events[i] == handle)
3050
            found = 1;
3051
        if (found) {
3052
            w->events[i] = w->events[i + 1];
3053
            w->func[i] = w->func[i + 1];
3054
            w->opaque[i] = w->opaque[i + 1];
3055
        }
3056
    }
3057
    if (found)
3058
        w->num--;
3059
}
3060
#endif
3061

    
3062
/***********************************************************/
3063
/* ram save/restore */
3064

    
3065
static int ram_get_page(QEMUFile *f, uint8_t *buf, int len)
3066
{
3067
    int v;
3068

    
3069
    v = qemu_get_byte(f);
3070
    switch(v) {
3071
    case 0:
3072
        if (qemu_get_buffer(f, buf, len) != len)
3073
            return -EIO;
3074
        break;
3075
    case 1:
3076
        v = qemu_get_byte(f);
3077
        memset(buf, v, len);
3078
        break;
3079
    default:
3080
        return -EINVAL;
3081
    }
3082

    
3083
    if (qemu_file_has_error(f))
3084
        return -EIO;
3085

    
3086
    return 0;
3087
}
3088

    
3089
static int ram_load_v1(QEMUFile *f, void *opaque)
3090
{
3091
    int ret;
3092
    ram_addr_t i;
3093

    
3094
    if (qemu_get_be32(f) != last_ram_offset)
3095
        return -EINVAL;
3096
    for(i = 0; i < last_ram_offset; i+= TARGET_PAGE_SIZE) {
3097
        ret = ram_get_page(f, qemu_get_ram_ptr(i), TARGET_PAGE_SIZE);
3098
        if (ret)
3099
            return ret;
3100
    }
3101
    return 0;
3102
}
3103

    
3104
#define BDRV_HASH_BLOCK_SIZE 1024
3105
#define IOBUF_SIZE 4096
3106
#define RAM_CBLOCK_MAGIC 0xfabe
3107

    
3108
typedef struct RamDecompressState {
3109
    z_stream zstream;
3110
    QEMUFile *f;
3111
    uint8_t buf[IOBUF_SIZE];
3112
} RamDecompressState;
3113

    
3114
static int ram_decompress_open(RamDecompressState *s, QEMUFile *f)
3115
{
3116
    int ret;
3117
    memset(s, 0, sizeof(*s));
3118
    s->f = f;
3119
    ret = inflateInit(&s->zstream);
3120
    if (ret != Z_OK)
3121
        return -1;
3122
    return 0;
3123
}
3124

    
3125
static int ram_decompress_buf(RamDecompressState *s, uint8_t *buf, int len)
3126
{
3127
    int ret, clen;
3128

    
3129
    s->zstream.avail_out = len;
3130
    s->zstream.next_out = buf;
3131
    while (s->zstream.avail_out > 0) {
3132
        if (s->zstream.avail_in == 0) {
3133
            if (qemu_get_be16(s->f) != RAM_CBLOCK_MAGIC)
3134
                return -1;
3135
            clen = qemu_get_be16(s->f);
3136
            if (clen > IOBUF_SIZE)
3137
                return -1;
3138
            qemu_get_buffer(s->f, s->buf, clen);
3139
            s->zstream.avail_in = clen;
3140
            s->zstream.next_in = s->buf;
3141
        }
3142
        ret = inflate(&s->zstream, Z_PARTIAL_FLUSH);
3143
        if (ret != Z_OK && ret != Z_STREAM_END) {
3144
            return -1;
3145
        }
3146
    }
3147
    return 0;
3148
}
3149

    
3150
static void ram_decompress_close(RamDecompressState *s)
3151
{
3152
    inflateEnd(&s->zstream);
3153
}
3154

    
3155
#define RAM_SAVE_FLAG_FULL        0x01
3156
#define RAM_SAVE_FLAG_COMPRESS        0x02
3157
#define RAM_SAVE_FLAG_MEM_SIZE        0x04
3158
#define RAM_SAVE_FLAG_PAGE        0x08
3159
#define RAM_SAVE_FLAG_EOS        0x10
3160

    
3161
static int is_dup_page(uint8_t *page, uint8_t ch)
3162
{
3163
    uint32_t val = ch << 24 | ch << 16 | ch << 8 | ch;
3164
    uint32_t *array = (uint32_t *)page;
3165
    int i;
3166

    
3167
    for (i = 0; i < (TARGET_PAGE_SIZE / 4); i++) {
3168
        if (array[i] != val)
3169
            return 0;
3170
    }
3171

    
3172
    return 1;
3173
}
3174

    
3175
static int ram_save_block(QEMUFile *f)
3176
{
3177
    static ram_addr_t current_addr = 0;
3178
    ram_addr_t saved_addr = current_addr;
3179
    ram_addr_t addr = 0;
3180
    int found = 0;
3181

    
3182
    while (addr < last_ram_offset) {
3183
        if (cpu_physical_memory_get_dirty(current_addr, MIGRATION_DIRTY_FLAG)) {
3184
            uint8_t *p;
3185

    
3186
            cpu_physical_memory_reset_dirty(current_addr,
3187
                                            current_addr + TARGET_PAGE_SIZE,
3188
                                            MIGRATION_DIRTY_FLAG);
3189

    
3190
            p = qemu_get_ram_ptr(current_addr);
3191

    
3192
            if (is_dup_page(p, *p)) {
3193
                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_COMPRESS);
3194
                qemu_put_byte(f, *p);
3195
            } else {
3196
                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_PAGE);
3197
                qemu_put_buffer(f, p, TARGET_PAGE_SIZE);
3198
            }
3199

    
3200
            found = 1;
3201
            break;
3202
        }
3203
        addr += TARGET_PAGE_SIZE;
3204
        current_addr = (saved_addr + addr) % last_ram_offset;
3205
    }
3206

    
3207
    return found;
3208
}
3209

    
3210
static uint64_t bytes_transferred = 0;
3211

    
3212
static ram_addr_t ram_save_remaining(void)
3213
{
3214
    ram_addr_t addr;
3215
    ram_addr_t count = 0;
3216

    
3217
    for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
3218
        if (cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
3219
            count++;
3220
    }
3221

    
3222
    return count;
3223
}
3224

    
3225
uint64_t ram_bytes_remaining(void)
3226
{
3227
    return ram_save_remaining() * TARGET_PAGE_SIZE;
3228
}
3229

    
3230
uint64_t ram_bytes_transferred(void)
3231
{
3232
    return bytes_transferred;
3233
}
3234

    
3235
uint64_t ram_bytes_total(void)
3236
{
3237
    return last_ram_offset;
3238
}
3239

    
3240
static int ram_save_live(QEMUFile *f, int stage, void *opaque)
3241
{
3242
    ram_addr_t addr;
3243
    uint64_t bytes_transferred_last;
3244
    double bwidth = 0;
3245
    uint64_t expected_time = 0;
3246

    
3247
    if (cpu_physical_sync_dirty_bitmap(0, TARGET_PHYS_ADDR_MAX) != 0) {
3248
        qemu_file_set_error(f);
3249
        return 0;
3250
    }
3251

    
3252
    if (stage == 1) {
3253
        /* Make sure all dirty bits are set */
3254
        for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
3255
            if (!cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
3256
                cpu_physical_memory_set_dirty(addr);
3257
        }
3258

    
3259
        /* Enable dirty memory tracking */
3260
        cpu_physical_memory_set_dirty_tracking(1);
3261

    
3262
        qemu_put_be64(f, last_ram_offset | RAM_SAVE_FLAG_MEM_SIZE);
3263
    }
3264

    
3265
    bytes_transferred_last = bytes_transferred;
3266
    bwidth = get_clock();
3267

    
3268
    while (!qemu_file_rate_limit(f)) {
3269
        int ret;
3270

    
3271
        ret = ram_save_block(f);
3272
        bytes_transferred += ret * TARGET_PAGE_SIZE;
3273
        if (ret == 0) /* no more blocks */
3274
            break;
3275
    }
3276

    
3277
    bwidth = get_clock() - bwidth;
3278
    bwidth = (bytes_transferred - bytes_transferred_last) / bwidth;
3279

    
3280
    /* if we haven't transferred anything this round, force expected_time to a
3281
     * a very high value, but without crashing */
3282
    if (bwidth == 0)
3283
        bwidth = 0.000001;
3284

    
3285
    /* try transferring iterative blocks of memory */
3286

    
3287
    if (stage == 3) {
3288

    
3289
        /* flush all remaining blocks regardless of rate limiting */
3290
        while (ram_save_block(f) != 0) {
3291
            bytes_transferred += TARGET_PAGE_SIZE;
3292
        }
3293
        cpu_physical_memory_set_dirty_tracking(0);
3294
    }
3295

    
3296
    qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
3297

    
3298
    expected_time = ram_save_remaining() * TARGET_PAGE_SIZE / bwidth;
3299

    
3300
    return (stage == 2) && (expected_time <= migrate_max_downtime());
3301
}
3302

    
3303
static int ram_load_dead(QEMUFile *f, void *opaque)
3304
{
3305
    RamDecompressState s1, *s = &s1;
3306
    uint8_t buf[10];
3307
    ram_addr_t i;
3308

    
3309
    if (ram_decompress_open(s, f) < 0)
3310
        return -EINVAL;
3311
    for(i = 0; i < last_ram_offset; i+= BDRV_HASH_BLOCK_SIZE) {
3312
        if (ram_decompress_buf(s, buf, 1) < 0) {
3313
            fprintf(stderr, "Error while reading ram block header\n");
3314
            goto error;
3315
        }
3316
        if (buf[0] == 0) {
3317
            if (ram_decompress_buf(s, qemu_get_ram_ptr(i),
3318
                                   BDRV_HASH_BLOCK_SIZE) < 0) {
3319
                fprintf(stderr, "Error while reading ram block address=0x%08" PRIx64, (uint64_t)i);
3320
                goto error;
3321
            }
3322
        } else {
3323
        error:
3324
            printf("Error block header\n");
3325
            return -EINVAL;
3326
        }
3327
    }
3328
    ram_decompress_close(s);
3329

    
3330
    return 0;
3331
}
3332

    
3333
static int ram_load(QEMUFile *f, void *opaque, int version_id)
3334
{
3335
    ram_addr_t addr;
3336
    int flags;
3337

    
3338
    if (version_id == 1)
3339
        return ram_load_v1(f, opaque);
3340

    
3341
    if (version_id == 2) {
3342
        if (qemu_get_be32(f) != last_ram_offset)
3343
            return -EINVAL;
3344
        return ram_load_dead(f, opaque);
3345
    }
3346

    
3347
    if (version_id != 3)
3348
        return -EINVAL;
3349

    
3350
    do {
3351
        addr = qemu_get_be64(f);
3352

    
3353
        flags = addr & ~TARGET_PAGE_MASK;
3354
        addr &= TARGET_PAGE_MASK;
3355

    
3356
        if (flags & RAM_SAVE_FLAG_MEM_SIZE) {
3357
            if (addr != last_ram_offset)
3358
                return -EINVAL;
3359
        }
3360

    
3361
        if (flags & RAM_SAVE_FLAG_FULL) {
3362
            if (ram_load_dead(f, opaque) < 0)
3363
                return -EINVAL;
3364
        }
3365
        
3366
        if (flags & RAM_SAVE_FLAG_COMPRESS) {
3367
            uint8_t ch = qemu_get_byte(f);
3368
            memset(qemu_get_ram_ptr(addr), ch, TARGET_PAGE_SIZE);
3369
#ifndef _WIN32
3370
            if (ch == 0 &&
3371
                (!kvm_enabled() || kvm_has_sync_mmu())) {
3372
                madvise(qemu_get_ram_ptr(addr), TARGET_PAGE_SIZE, MADV_DONTNEED);
3373
            }
3374
#endif
3375
        } else if (flags & RAM_SAVE_FLAG_PAGE)
3376
            qemu_get_buffer(f, qemu_get_ram_ptr(addr), TARGET_PAGE_SIZE);
3377
    } while (!(flags & RAM_SAVE_FLAG_EOS));
3378

    
3379
    return 0;
3380
}
3381

    
3382
void qemu_service_io(void)
3383
{
3384
    qemu_notify_event();
3385
}
3386

    
3387
/***********************************************************/
3388
/* bottom halves (can be seen as timers which expire ASAP) */
3389

    
3390
struct QEMUBH {
3391
    QEMUBHFunc *cb;
3392
    void *opaque;
3393
    int scheduled;
3394
    int idle;
3395
    int deleted;
3396
    QEMUBH *next;
3397
};
3398

    
3399
static QEMUBH *first_bh = NULL;
3400

    
3401
QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque)
3402
{
3403
    QEMUBH *bh;
3404
    bh = qemu_mallocz(sizeof(QEMUBH));
3405
    bh->cb = cb;
3406
    bh->opaque = opaque;
3407
    bh->next = first_bh;
3408
    first_bh = bh;
3409
    return bh;
3410
}
3411

    
3412
int qemu_bh_poll(void)
3413
{
3414
    QEMUBH *bh, **bhp;
3415
    int ret;
3416

    
3417
    ret = 0;
3418
    for (bh = first_bh; bh; bh = bh->next) {
3419
        if (!bh->deleted && bh->scheduled) {
3420
            bh->scheduled = 0;
3421
            if (!bh->idle)
3422
                ret = 1;
3423
            bh->idle = 0;
3424
            bh->cb(bh->opaque);
3425
        }
3426
    }
3427

    
3428
    /* remove deleted bhs */
3429
    bhp = &first_bh;
3430
    while (*bhp) {
3431
        bh = *bhp;
3432
        if (bh->deleted) {
3433
            *bhp = bh->next;
3434
            qemu_free(bh);
3435
        } else
3436
            bhp = &bh->next;
3437
    }
3438

    
3439
    return ret;
3440
}
3441

    
3442
void qemu_bh_schedule_idle(QEMUBH *bh)
3443
{
3444
    if (bh->scheduled)
3445
        return;
3446
    bh->scheduled = 1;
3447
    bh->idle = 1;
3448
}
3449

    
3450
void qemu_bh_schedule(QEMUBH *bh)
3451
{
3452
    if (bh->scheduled)
3453
        return;
3454
    bh->scheduled = 1;
3455
    bh->idle = 0;
3456
    /* stop the currently executing CPU to execute the BH ASAP */
3457
    qemu_notify_event();
3458
}
3459

    
3460
void qemu_bh_cancel(QEMUBH *bh)
3461
{
3462
    bh->scheduled = 0;
3463
}
3464

    
3465
void qemu_bh_delete(QEMUBH *bh)
3466
{
3467
    bh->scheduled = 0;
3468
    bh->deleted = 1;
3469
}
3470

    
3471
static void qemu_bh_update_timeout(int *timeout)
3472
{
3473
    QEMUBH *bh;
3474

    
3475
    for (bh = first_bh; bh; bh = bh->next) {
3476
        if (!bh->deleted && bh->scheduled) {
3477
            if (bh->idle) {
3478
                /* idle bottom halves will be polled at least
3479
                 * every 10ms */
3480
                *timeout = MIN(10, *timeout);
3481
            } else {
3482
                /* non-idle bottom halves will be executed
3483
                 * immediately */
3484
                *timeout = 0;
3485
                break;
3486
            }
3487
        }
3488
    }
3489
}
3490

    
3491
/***********************************************************/
3492
/* machine registration */
3493

    
3494
static QEMUMachine *first_machine = NULL;
3495
QEMUMachine *current_machine = NULL;
3496

    
3497
int qemu_register_machine(QEMUMachine *m)
3498
{
3499
    QEMUMachine **pm;
3500
    pm = &first_machine;
3501
    while (*pm != NULL)
3502
        pm = &(*pm)->next;
3503
    m->next = NULL;
3504
    *pm = m;
3505
    return 0;
3506
}
3507

    
3508
static QEMUMachine *find_machine(const char *name)
3509
{
3510
    QEMUMachine *m;
3511

    
3512
    for(m = first_machine; m != NULL; m = m->next) {
3513
        if (!strcmp(m->name, name))
3514
            return m;
3515
    }
3516
    return NULL;
3517
}
3518

    
3519
static QEMUMachine *find_default_machine(void)
3520
{
3521
    QEMUMachine *m;
3522

    
3523
    for(m = first_machine; m != NULL; m = m->next) {
3524
        if (m->is_default) {
3525
            return m;
3526
        }
3527
    }
3528
    return NULL;
3529
}
3530

    
3531
/***********************************************************/
3532
/* main execution loop */
3533

    
3534
static void gui_update(void *opaque)
3535
{
3536
    uint64_t interval = GUI_REFRESH_INTERVAL;
3537
    DisplayState *ds = opaque;
3538
    DisplayChangeListener *dcl = ds->listeners;
3539

    
3540
    dpy_refresh(ds);
3541

    
3542
    while (dcl != NULL) {
3543
        if (dcl->gui_timer_interval &&
3544
            dcl->gui_timer_interval < interval)
3545
            interval = dcl->gui_timer_interval;
3546
        dcl = dcl->next;
3547
    }
3548
    qemu_mod_timer(ds->gui_timer, interval + qemu_get_clock(rt_clock));
3549
}
3550

    
3551
static void nographic_update(void *opaque)
3552
{
3553
    uint64_t interval = GUI_REFRESH_INTERVAL;
3554

    
3555
    qemu_mod_timer(nographic_timer, interval + qemu_get_clock(rt_clock));
3556
}
3557

    
3558
struct vm_change_state_entry {
3559
    VMChangeStateHandler *cb;
3560
    void *opaque;
3561
    LIST_ENTRY (vm_change_state_entry) entries;
3562
};
3563

    
3564
static LIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head;
3565

    
3566
VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
3567
                                                     void *opaque)
3568
{
3569
    VMChangeStateEntry *e;
3570

    
3571
    e = qemu_mallocz(sizeof (*e));
3572

    
3573
    e->cb = cb;
3574
    e->opaque = opaque;
3575
    LIST_INSERT_HEAD(&vm_change_state_head, e, entries);
3576
    return e;
3577
}
3578

    
3579
void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
3580
{
3581
    LIST_REMOVE (e, entries);
3582
    qemu_free (e);
3583
}
3584

    
3585
static void vm_state_notify(int running, int reason)
3586
{
3587
    VMChangeStateEntry *e;
3588

    
3589
    for (e = vm_change_state_head.lh_first; e; e = e->entries.le_next) {
3590
        e->cb(e->opaque, running, reason);
3591
    }
3592
}
3593

    
3594
static void resume_all_vcpus(void);
3595
static void pause_all_vcpus(void);
3596

    
3597
void vm_start(void)
3598
{
3599
    if (!vm_running) {
3600
        cpu_enable_ticks();
3601
        vm_running = 1;
3602
        vm_state_notify(1, 0);
3603
        qemu_rearm_alarm_timer(alarm_timer);
3604
        resume_all_vcpus();
3605
    }
3606
}
3607

    
3608
/* reset/shutdown handler */
3609

    
3610
typedef struct QEMUResetEntry {
3611
    QEMUResetHandler *func;
3612
    void *opaque;
3613
    struct QEMUResetEntry *next;
3614
} QEMUResetEntry;
3615

    
3616
static QEMUResetEntry *first_reset_entry;
3617
static int reset_requested;
3618
static int shutdown_requested;
3619
static int powerdown_requested;
3620
static int debug_requested;
3621
static int vmstop_requested;
3622

    
3623
int qemu_shutdown_requested(void)
3624
{
3625
    int r = shutdown_requested;
3626
    shutdown_requested = 0;
3627
    return r;
3628
}
3629

    
3630
int qemu_reset_requested(void)
3631
{
3632
    int r = reset_requested;
3633
    reset_requested = 0;
3634
    return r;
3635
}
3636

    
3637
int qemu_powerdown_requested(void)
3638
{
3639
    int r = powerdown_requested;
3640
    powerdown_requested = 0;
3641
    return r;
3642
}
3643

    
3644
static int qemu_debug_requested(void)
3645
{
3646
    int r = debug_requested;
3647
    debug_requested = 0;
3648
    return r;
3649
}
3650

    
3651
static int qemu_vmstop_requested(void)
3652
{
3653
    int r = vmstop_requested;
3654
    vmstop_requested = 0;
3655
    return r;
3656
}
3657

    
3658
static void do_vm_stop(int reason)
3659
{
3660
    if (vm_running) {
3661
        cpu_disable_ticks();
3662
        vm_running = 0;
3663
        pause_all_vcpus();
3664
        vm_state_notify(0, reason);
3665
    }
3666
}
3667

    
3668
void qemu_register_reset(QEMUResetHandler *func, void *opaque)
3669
{
3670
    QEMUResetEntry **pre, *re;
3671

    
3672
    pre = &first_reset_entry;
3673
    while (*pre != NULL)
3674
        pre = &(*pre)->next;
3675
    re = qemu_mallocz(sizeof(QEMUResetEntry));
3676
    re->func = func;
3677
    re->opaque = opaque;
3678
    re->next = NULL;
3679
    *pre = re;
3680
}
3681

    
3682
void qemu_system_reset(void)
3683
{
3684
    QEMUResetEntry *re;
3685

    
3686
    /* reset all devices */
3687
    for(re = first_reset_entry; re != NULL; re = re->next) {
3688
        re->func(re->opaque);
3689
    }
3690
}
3691

    
3692
void qemu_system_reset_request(void)
3693
{
3694
    if (no_reboot) {
3695
        shutdown_requested = 1;
3696
    } else {
3697
        reset_requested = 1;
3698
    }
3699
    qemu_notify_event();
3700
}
3701

    
3702
void qemu_system_shutdown_request(void)
3703
{
3704
    shutdown_requested = 1;
3705
    qemu_notify_event();
3706
}
3707

    
3708
void qemu_system_powerdown_request(void)
3709
{
3710
    powerdown_requested = 1;
3711
    qemu_notify_event();
3712
}
3713

    
3714
#ifdef CONFIG_IOTHREAD
3715
static void qemu_system_vmstop_request(int reason)
3716
{
3717
    vmstop_requested = reason;
3718
    qemu_notify_event();
3719
}
3720
#endif
3721

    
3722
#ifndef _WIN32
3723
static int io_thread_fd = -1;
3724

    
3725
static void qemu_event_increment(void)
3726
{
3727
    static const char byte = 0;
3728

    
3729
    if (io_thread_fd == -1)
3730
        return;
3731

    
3732
    write(io_thread_fd, &byte, sizeof(byte));
3733
}
3734

    
3735
static void qemu_event_read(void *opaque)
3736
{
3737
    int fd = (unsigned long)opaque;
3738
    ssize_t len;
3739

    
3740
    /* Drain the notify pipe */
3741
    do {
3742
        char buffer[512];
3743
        len = read(fd, buffer, sizeof(buffer));
3744
    } while ((len == -1 && errno == EINTR) || len > 0);
3745
}
3746

    
3747
static int qemu_event_init(void)
3748
{
3749
    int err;
3750
    int fds[2];
3751

    
3752
    err = pipe(fds);
3753
    if (err == -1)
3754
        return -errno;
3755

    
3756
    err = fcntl_setfl(fds[0], O_NONBLOCK);
3757
    if (err < 0)
3758
        goto fail;
3759

    
3760
    err = fcntl_setfl(fds[1], O_NONBLOCK);
3761
    if (err < 0)
3762
        goto fail;
3763

    
3764
    qemu_set_fd_handler2(fds[0], NULL, qemu_event_read, NULL,
3765
                         (void *)(unsigned long)fds[0]);
3766

    
3767
    io_thread_fd = fds[1];
3768
    return 0;
3769

    
3770
fail:
3771
    close(fds[0]);
3772
    close(fds[1]);
3773
    return err;
3774
}
3775
#else
3776
HANDLE qemu_event_handle;
3777

    
3778
static void dummy_event_handler(void *opaque)
3779
{
3780
}
3781

    
3782
static int qemu_event_init(void)
3783
{
3784
    qemu_event_handle = CreateEvent(NULL, FALSE, FALSE, NULL);
3785
    if (!qemu_event_handle) {
3786
        perror("Failed CreateEvent");
3787
        return -1;
3788
    }
3789
    qemu_add_wait_object(qemu_event_handle, dummy_event_handler, NULL);
3790
    return 0;
3791
}
3792

    
3793
static void qemu_event_increment(void)
3794
{
3795
    SetEvent(qemu_event_handle);
3796
}
3797
#endif
3798

    
3799
static int cpu_can_run(CPUState *env)
3800
{
3801
    if (env->stop)
3802
        return 0;
3803
    if (env->stopped)
3804
        return 0;
3805
    return 1;
3806
}
3807

    
3808
#ifndef CONFIG_IOTHREAD
3809
static int qemu_init_main_loop(void)
3810
{
3811
    return qemu_event_init();
3812
}
3813

    
3814
void qemu_init_vcpu(void *_env)
3815
{
3816
    CPUState *env = _env;
3817

    
3818
    if (kvm_enabled())
3819
        kvm_init_vcpu(env);
3820
    return;
3821
}
3822

    
3823
int qemu_cpu_self(void *env)
3824
{
3825
    return 1;
3826
}
3827

    
3828
static void resume_all_vcpus(void)
3829
{
3830
}
3831

    
3832
static void pause_all_vcpus(void)
3833
{
3834
}
3835

    
3836
void qemu_cpu_kick(void *env)
3837
{
3838
    return;
3839
}
3840

    
3841
void qemu_notify_event(void)
3842
{
3843
    CPUState *env = cpu_single_env;
3844

    
3845
    if (env) {
3846
        cpu_exit(env);
3847
#ifdef USE_KQEMU
3848
        if (env->kqemu_enabled)
3849
            kqemu_cpu_interrupt(env);
3850
#endif
3851
     }
3852
}
3853

    
3854
#define qemu_mutex_lock_iothread() do { } while (0)
3855
#define qemu_mutex_unlock_iothread() do { } while (0)
3856

    
3857
void vm_stop(int reason)
3858
{
3859
    do_vm_stop(reason);
3860
}
3861

    
3862
#else /* CONFIG_IOTHREAD */
3863

    
3864
#include "qemu-thread.h"
3865

    
3866
QemuMutex qemu_global_mutex;
3867
static QemuMutex qemu_fair_mutex;
3868

    
3869
static QemuThread io_thread;
3870

    
3871
static QemuThread *tcg_cpu_thread;
3872
static QemuCond *tcg_halt_cond;
3873

    
3874
static int qemu_system_ready;
3875
/* cpu creation */
3876
static QemuCond qemu_cpu_cond;
3877
/* system init */
3878
static QemuCond qemu_system_cond;
3879
static QemuCond qemu_pause_cond;
3880

    
3881
static void block_io_signals(void);
3882
static void unblock_io_signals(void);
3883
static int tcg_has_work(void);
3884

    
3885
static int qemu_init_main_loop(void)
3886
{
3887
    int ret;
3888

    
3889
    ret = qemu_event_init();
3890
    if (ret)
3891
        return ret;
3892

    
3893
    qemu_cond_init(&qemu_pause_cond);
3894
    qemu_mutex_init(&qemu_fair_mutex);
3895
    qemu_mutex_init(&qemu_global_mutex);
3896
    qemu_mutex_lock(&qemu_global_mutex);
3897

    
3898
    unblock_io_signals();
3899
    qemu_thread_self(&io_thread);
3900

    
3901
    return 0;
3902
}
3903

    
3904
static void qemu_wait_io_event(CPUState *env)
3905
{
3906
    while (!tcg_has_work())
3907
        qemu_cond_timedwait(env->halt_cond, &qemu_global_mutex, 1000);
3908

    
3909
    qemu_mutex_unlock(&qemu_global_mutex);
3910

    
3911
    /*
3912
     * Users of qemu_global_mutex can be starved, having no chance
3913
     * to acquire it since this path will get to it first.
3914
     * So use another lock to provide fairness.
3915
     */
3916
    qemu_mutex_lock(&qemu_fair_mutex);
3917
    qemu_mutex_unlock(&qemu_fair_mutex);
3918

    
3919
    qemu_mutex_lock(&qemu_global_mutex);
3920
    if (env->stop) {
3921
        env->stop = 0;
3922
        env->stopped = 1;
3923
        qemu_cond_signal(&qemu_pause_cond);
3924
    }
3925
}
3926

    
3927
static int qemu_cpu_exec(CPUState *env);
3928

    
3929
static void *kvm_cpu_thread_fn(void *arg)
3930
{
3931
    CPUState *env = arg;
3932

    
3933
    block_io_signals();
3934
    qemu_thread_self(env->thread);
3935

    
3936
    /* signal CPU creation */
3937
    qemu_mutex_lock(&qemu_global_mutex);
3938
    env->created = 1;
3939
    qemu_cond_signal(&qemu_cpu_cond);
3940

    
3941
    /* and wait for machine initialization */
3942
    while (!qemu_system_ready)
3943
        qemu_cond_timedwait(&qemu_system_cond, &qemu_global_mutex, 100);
3944

    
3945
    while (1) {
3946
        if (cpu_can_run(env))
3947
            qemu_cpu_exec(env);
3948
        qemu_wait_io_event(env);
3949
    }
3950

    
3951
    return NULL;
3952
}
3953

    
3954
static void tcg_cpu_exec(void);
3955

    
3956
static void *tcg_cpu_thread_fn(void *arg)
3957
{
3958
    CPUState *env = arg;
3959

    
3960
    block_io_signals();
3961
    qemu_thread_self(env->thread);
3962

    
3963
    /* signal CPU creation */
3964
    qemu_mutex_lock(&qemu_global_mutex);
3965
    for (env = first_cpu; env != NULL; env = env->next_cpu)
3966
        env->created = 1;
3967
    qemu_cond_signal(&qemu_cpu_cond);
3968

    
3969
    /* and wait for machine initialization */
3970
    while (!qemu_system_ready)
3971
        qemu_cond_timedwait(&qemu_system_cond, &qemu_global_mutex, 100);
3972

    
3973
    while (1) {
3974
        tcg_cpu_exec();
3975
        qemu_wait_io_event(cur_cpu);
3976
    }
3977

    
3978
    return NULL;
3979
}
3980

    
3981
void qemu_cpu_kick(void *_env)
3982
{
3983
    CPUState *env = _env;
3984
    qemu_cond_broadcast(env->halt_cond);
3985
    if (kvm_enabled())
3986
        qemu_thread_signal(env->thread, SIGUSR1);
3987
}
3988

    
3989
int qemu_cpu_self(void *env)
3990
{
3991
    return (cpu_single_env != NULL);
3992
}
3993

    
3994
static void cpu_signal(int sig)
3995
{
3996
    if (cpu_single_env)
3997
        cpu_exit(cpu_single_env);
3998
}
3999

    
4000
static void block_io_signals(void)
4001
{
4002
    sigset_t set;
4003
    struct sigaction sigact;
4004

    
4005
    sigemptyset(&set);
4006
    sigaddset(&set, SIGUSR2);
4007
    sigaddset(&set, SIGIO);
4008
    sigaddset(&set, SIGALRM);
4009
    pthread_sigmask(SIG_BLOCK, &set, NULL);
4010

    
4011
    sigemptyset(&set);
4012
    sigaddset(&set, SIGUSR1);
4013
    pthread_sigmask(SIG_UNBLOCK, &set, NULL);
4014

    
4015
    memset(&sigact, 0, sizeof(sigact));
4016
    sigact.sa_handler = cpu_signal;
4017
    sigaction(SIGUSR1, &sigact, NULL);
4018
}
4019

    
4020
static void unblock_io_signals(void)
4021
{
4022
    sigset_t set;
4023

    
4024
    sigemptyset(&set);
4025
    sigaddset(&set, SIGUSR2);
4026
    sigaddset(&set, SIGIO);
4027
    sigaddset(&set, SIGALRM);
4028
    pthread_sigmask(SIG_UNBLOCK, &set, NULL);
4029

    
4030
    sigemptyset(&set);
4031
    sigaddset(&set, SIGUSR1);
4032
    pthread_sigmask(SIG_BLOCK, &set, NULL);
4033
}
4034

    
4035
static void qemu_signal_lock(unsigned int msecs)
4036
{
4037
    qemu_mutex_lock(&qemu_fair_mutex);
4038

    
4039
    while (qemu_mutex_trylock(&qemu_global_mutex)) {
4040
        qemu_thread_signal(tcg_cpu_thread, SIGUSR1);
4041
        if (!qemu_mutex_timedlock(&qemu_global_mutex, msecs))
4042
            break;
4043
    }
4044
    qemu_mutex_unlock(&qemu_fair_mutex);
4045
}
4046

    
4047
static void qemu_mutex_lock_iothread(void)
4048
{
4049
    if (kvm_enabled()) {
4050
        qemu_mutex_lock(&qemu_fair_mutex);
4051
        qemu_mutex_lock(&qemu_global_mutex);
4052
        qemu_mutex_unlock(&qemu_fair_mutex);
4053
    } else
4054
        qemu_signal_lock(100);
4055
}
4056

    
4057
static void qemu_mutex_unlock_iothread(void)
4058
{
4059
    qemu_mutex_unlock(&qemu_global_mutex);
4060
}
4061

    
4062
static int all_vcpus_paused(void)
4063
{
4064
    CPUState *penv = first_cpu;
4065

    
4066
    while (penv) {
4067
        if (!penv->stopped)
4068
            return 0;
4069
        penv = (CPUState *)penv->next_cpu;
4070
    }
4071

    
4072
    return 1;
4073
}
4074

    
4075
static void pause_all_vcpus(void)
4076
{
4077
    CPUState *penv = first_cpu;
4078

    
4079
    while (penv) {
4080
        penv->stop = 1;
4081
        qemu_thread_signal(penv->thread, SIGUSR1);
4082
        qemu_cpu_kick(penv);
4083
        penv = (CPUState *)penv->next_cpu;
4084
    }
4085

    
4086
    while (!all_vcpus_paused()) {
4087
        qemu_cond_timedwait(&qemu_pause_cond, &qemu_global_mutex, 100);
4088
        penv = first_cpu;
4089
        while (penv) {
4090
            qemu_thread_signal(penv->thread, SIGUSR1);
4091
            penv = (CPUState *)penv->next_cpu;
4092
        }
4093
    }
4094
}
4095

    
4096
static void resume_all_vcpus(void)
4097
{
4098
    CPUState *penv = first_cpu;
4099

    
4100
    while (penv) {
4101
        penv->stop = 0;
4102
        penv->stopped = 0;
4103
        qemu_thread_signal(penv->thread, SIGUSR1);
4104
        qemu_cpu_kick(penv);
4105
        penv = (CPUState *)penv->next_cpu;
4106
    }
4107
}
4108

    
4109
static void tcg_init_vcpu(void *_env)
4110
{
4111
    CPUState *env = _env;
4112
    /* share a single thread for all cpus with TCG */
4113
    if (!tcg_cpu_thread) {
4114
        env->thread = qemu_mallocz(sizeof(QemuThread));
4115
        env->halt_cond = qemu_mallocz(sizeof(QemuCond));
4116
        qemu_cond_init(env->halt_cond);
4117
        qemu_thread_create(env->thread, tcg_cpu_thread_fn, env);
4118
        while (env->created == 0)
4119
            qemu_cond_timedwait(&qemu_cpu_cond, &qemu_global_mutex, 100);
4120
        tcg_cpu_thread = env->thread;
4121
        tcg_halt_cond = env->halt_cond;
4122
    } else {
4123
        env->thread = tcg_cpu_thread;
4124
        env->halt_cond = tcg_halt_cond;
4125
    }
4126
}
4127

    
4128
static void kvm_start_vcpu(CPUState *env)
4129
{
4130
    kvm_init_vcpu(env);
4131
    env->thread = qemu_mallocz(sizeof(QemuThread));
4132
    env->halt_cond = qemu_mallocz(sizeof(QemuCond));
4133
    qemu_cond_init(env->halt_cond);
4134
    qemu_thread_create(env->thread, kvm_cpu_thread_fn, env);
4135
    while (env->created == 0)
4136
        qemu_cond_timedwait(&qemu_cpu_cond, &qemu_global_mutex, 100);
4137
}
4138

    
4139
void qemu_init_vcpu(void *_env)
4140
{
4141
    CPUState *env = _env;
4142

    
4143
    if (kvm_enabled())
4144
        kvm_start_vcpu(env);
4145
    else
4146
        tcg_init_vcpu(env);
4147
}
4148

    
4149
void qemu_notify_event(void)
4150
{
4151
    qemu_event_increment();
4152
}
4153

    
4154
void vm_stop(int reason)
4155
{
4156
    QemuThread me;
4157
    qemu_thread_self(&me);
4158

    
4159
    if (!qemu_thread_equal(&me, &io_thread)) {
4160
        qemu_system_vmstop_request(reason);
4161
        /*
4162
         * FIXME: should not return to device code in case
4163
         * vm_stop() has been requested.
4164
         */
4165
        if (cpu_single_env) {
4166
            cpu_exit(cpu_single_env);
4167
            cpu_single_env->stop = 1;
4168
        }
4169
        return;
4170
    }
4171
    do_vm_stop(reason);
4172
}
4173

    
4174
#endif
4175

    
4176

    
4177
#ifdef _WIN32
4178
static void host_main_loop_wait(int *timeout)
4179
{
4180
    int ret, ret2, i;
4181
    PollingEntry *pe;
4182

    
4183

    
4184
    /* XXX: need to suppress polling by better using win32 events */
4185
    ret = 0;
4186
    for(pe = first_polling_entry; pe != NULL; pe = pe->next) {
4187
        ret |= pe->func(pe->opaque);
4188
    }
4189
    if (ret == 0) {
4190
        int err;
4191
        WaitObjects *w = &wait_objects;
4192

    
4193
        ret = WaitForMultipleObjects(w->num, w->events, FALSE, *timeout);
4194
        if (WAIT_OBJECT_0 + 0 <= ret && ret <= WAIT_OBJECT_0 + w->num - 1) {
4195
            if (w->func[ret - WAIT_OBJECT_0])
4196
                w->func[ret - WAIT_OBJECT_0](w->opaque[ret - WAIT_OBJECT_0]);
4197

    
4198
            /* Check for additional signaled events */
4199
            for(i = (ret - WAIT_OBJECT_0 + 1); i < w->num; i++) {
4200

    
4201
                /* Check if event is signaled */
4202
                ret2 = WaitForSingleObject(w->events[i], 0);
4203
                if(ret2 == WAIT_OBJECT_0) {
4204
                    if (w->func[i])
4205
                        w->func[i](w->opaque[i]);
4206
                } else if (ret2 == WAIT_TIMEOUT) {
4207
                } else {
4208
                    err = GetLastError();
4209
                    fprintf(stderr, "WaitForSingleObject error %d %d\n", i, err);
4210
                }
4211
            }
4212
        } else if (ret == WAIT_TIMEOUT) {
4213
        } else {
4214
            err = GetLastError();
4215
            fprintf(stderr, "WaitForMultipleObjects error %d %d\n", ret, err);
4216
        }
4217
    }
4218

    
4219
    *timeout = 0;
4220
}
4221
#else
4222
static void host_main_loop_wait(int *timeout)
4223
{
4224
}
4225
#endif
4226

    
4227
void main_loop_wait(int timeout)
4228
{
4229
    IOHandlerRecord *ioh;
4230
    fd_set rfds, wfds, xfds;
4231
    int ret, nfds;
4232
    struct timeval tv;
4233

    
4234
    qemu_bh_update_timeout(&timeout);
4235

    
4236
    host_main_loop_wait(&timeout);
4237

    
4238
    /* poll any events */
4239
    /* XXX: separate device handlers from system ones */
4240
    nfds = -1;
4241
    FD_ZERO(&rfds);
4242
    FD_ZERO(&wfds);
4243
    FD_ZERO(&xfds);
4244
    for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
4245
        if (ioh->deleted)
4246
            continue;
4247
        if (ioh->fd_read &&
4248
            (!ioh->fd_read_poll ||
4249
             ioh->fd_read_poll(ioh->opaque) != 0)) {
4250
            FD_SET(ioh->fd, &rfds);
4251
            if (ioh->fd > nfds)
4252
                nfds = ioh->fd;
4253
        }
4254
        if (ioh->fd_write) {
4255
            FD_SET(ioh->fd, &wfds);
4256
            if (ioh->fd > nfds)
4257
                nfds = ioh->fd;
4258
        }
4259
    }
4260

    
4261
    tv.tv_sec = timeout / 1000;
4262
    tv.tv_usec = (timeout % 1000) * 1000;
4263

    
4264
    slirp_select_fill(&nfds, &rfds, &wfds, &xfds);
4265

    
4266
    qemu_mutex_unlock_iothread();
4267
    ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv);
4268
    qemu_mutex_lock_iothread();
4269
    if (ret > 0) {
4270
        IOHandlerRecord **pioh;
4271

    
4272
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
4273
            if (!ioh->deleted && ioh->fd_read && FD_ISSET(ioh->fd, &rfds)) {
4274
                ioh->fd_read(ioh->opaque);
4275
            }
4276
            if (!ioh->deleted && ioh->fd_write && FD_ISSET(ioh->fd, &wfds)) {
4277
                ioh->fd_write(ioh->opaque);
4278
            }
4279
        }
4280

    
4281
        /* remove deleted IO handlers */
4282
        pioh = &first_io_handler;
4283
        while (*pioh) {
4284
            ioh = *pioh;
4285
            if (ioh->deleted) {
4286
                *pioh = ioh->next;
4287
                qemu_free(ioh);
4288
            } else
4289
                pioh = &ioh->next;
4290
        }
4291
    }
4292

    
4293
    slirp_select_poll(&rfds, &wfds, &xfds, (ret < 0));
4294

    
4295
    /* rearm timer, if not periodic */
4296
    if (alarm_timer->flags & ALARM_FLAG_EXPIRED) {
4297
        alarm_timer->flags &= ~ALARM_FLAG_EXPIRED;
4298
        qemu_rearm_alarm_timer(alarm_timer);
4299
    }
4300

    
4301
    /* vm time timers */
4302
    if (vm_running) {
4303
        if (!cur_cpu || likely(!(cur_cpu->singlestep_enabled & SSTEP_NOTIMER)))
4304
            qemu_run_timers(&active_timers[QEMU_TIMER_VIRTUAL],
4305
                qemu_get_clock(vm_clock));
4306
    }
4307

    
4308
    /* real time timers */
4309
    qemu_run_timers(&active_timers[QEMU_TIMER_REALTIME],
4310
                    qemu_get_clock(rt_clock));
4311

    
4312
    /* Check bottom-halves last in case any of the earlier events triggered
4313
       them.  */
4314
    qemu_bh_poll();
4315

    
4316
}
4317

    
4318
static int qemu_cpu_exec(CPUState *env)
4319
{
4320
    int ret;
4321
#ifdef CONFIG_PROFILER
4322
    int64_t ti;
4323
#endif
4324

    
4325
#ifdef CONFIG_PROFILER
4326
    ti = profile_getclock();
4327
#endif
4328
    if (use_icount) {
4329
        int64_t count;
4330
        int decr;
4331
        qemu_icount -= (env->icount_decr.u16.low + env->icount_extra);
4332
        env->icount_decr.u16.low = 0;
4333
        env->icount_extra = 0;
4334
        count = qemu_next_deadline();
4335
        count = (count + (1 << icount_time_shift) - 1)
4336
                >> icount_time_shift;
4337
        qemu_icount += count;
4338
        decr = (count > 0xffff) ? 0xffff : count;
4339
        count -= decr;
4340
        env->icount_decr.u16.low = decr;
4341
        env->icount_extra = count;
4342
    }
4343
    ret = cpu_exec(env);
4344
#ifdef CONFIG_PROFILER
4345
    qemu_time += profile_getclock() - ti;
4346
#endif
4347
    if (use_icount) {
4348
        /* Fold pending instructions back into the
4349
           instruction counter, and clear the interrupt flag.  */
4350
        qemu_icount -= (env->icount_decr.u16.low
4351
                        + env->icount_extra);
4352
        env->icount_decr.u32 = 0;
4353
        env->icount_extra = 0;
4354
    }
4355
    return ret;
4356
}
4357

    
4358
static void tcg_cpu_exec(void)
4359
{
4360
    int ret = 0;
4361

    
4362
    if (next_cpu == NULL)
4363
        next_cpu = first_cpu;
4364
    for (; next_cpu != NULL; next_cpu = next_cpu->next_cpu) {
4365
        CPUState *env = cur_cpu = next_cpu;
4366

    
4367
        if (!vm_running)
4368
            break;
4369
        if (timer_alarm_pending) {
4370
            timer_alarm_pending = 0;
4371
            break;
4372
        }
4373
        if (cpu_can_run(env))
4374
            ret = qemu_cpu_exec(env);
4375
        if (ret == EXCP_DEBUG) {
4376
            gdb_set_stop_cpu(env);
4377
            debug_requested = 1;
4378
            break;
4379
        }
4380
    }
4381
}
4382

    
4383
static int cpu_has_work(CPUState *env)
4384
{
4385
    if (env->stop)
4386
        return 1;
4387
    if (env->stopped)
4388
        return 0;
4389
    if (!env->halted)
4390
        return 1;
4391
    if (qemu_cpu_has_work(env))
4392
        return 1;
4393
    return 0;
4394
}
4395

    
4396
static int tcg_has_work(void)
4397
{
4398
    CPUState *env;
4399

    
4400
    for (env = first_cpu; env != NULL; env = env->next_cpu)
4401
        if (cpu_has_work(env))
4402
            return 1;
4403
    return 0;
4404
}
4405

    
4406
static int qemu_calculate_timeout(void)
4407
{
4408
#ifndef CONFIG_IOTHREAD
4409
    int timeout;
4410

    
4411
    if (!vm_running)
4412
        timeout = 5000;
4413
    else if (tcg_has_work())
4414
        timeout = 0;
4415
    else if (!use_icount)
4416
        timeout = 5000;
4417
    else {
4418
     /* XXX: use timeout computed from timers */
4419
        int64_t add;
4420
        int64_t delta;
4421
        /* Advance virtual time to the next event.  */
4422
        if (use_icount == 1) {
4423
            /* When not using an adaptive execution frequency
4424
               we tend to get badly out of sync with real time,
4425
               so just delay for a reasonable amount of time.  */
4426
            delta = 0;
4427
        } else {
4428
            delta = cpu_get_icount() - cpu_get_clock();
4429
        }
4430
        if (delta > 0) {
4431
            /* If virtual time is ahead of real time then just
4432
               wait for IO.  */
4433
            timeout = (delta / 1000000) + 1;
4434
        } else {
4435
            /* Wait for either IO to occur or the next
4436
               timer event.  */
4437
            add = qemu_next_deadline();
4438
            /* We advance the timer before checking for IO.
4439
               Limit the amount we advance so that early IO
4440
               activity won't get the guest too far ahead.  */
4441
            if (add > 10000000)
4442
                add = 10000000;
4443
            delta += add;
4444
            add = (add + (1 << icount_time_shift) - 1)
4445
                  >> icount_time_shift;
4446
            qemu_icount += add;
4447
            timeout = delta / 1000000;
4448
            if (timeout < 0)
4449
                timeout = 0;
4450
        }
4451
    }
4452

    
4453
    return timeout;
4454
#else /* CONFIG_IOTHREAD */
4455
    return 1000;
4456
#endif
4457
}
4458

    
4459
static int vm_can_run(void)
4460
{
4461
    if (powerdown_requested)
4462
        return 0;
4463
    if (reset_requested)
4464
        return 0;
4465
    if (shutdown_requested)
4466
        return 0;
4467
    if (debug_requested)
4468
        return 0;
4469
    return 1;
4470
}
4471

    
4472
static void main_loop(void)
4473
{
4474
    int r;
4475

    
4476
#ifdef CONFIG_IOTHREAD
4477
    qemu_system_ready = 1;
4478
    qemu_cond_broadcast(&qemu_system_cond);
4479
#endif
4480

    
4481
    for (;;) {
4482
        do {
4483
#ifdef CONFIG_PROFILER
4484
            int64_t ti;
4485
#endif
4486
#ifndef CONFIG_IOTHREAD
4487
            tcg_cpu_exec();
4488
#endif
4489
#ifdef CONFIG_PROFILER
4490
            ti = profile_getclock();
4491
#endif
4492
            main_loop_wait(qemu_calculate_timeout());
4493
#ifdef CONFIG_PROFILER
4494
            dev_time += profile_getclock() - ti;
4495
#endif
4496
        } while (vm_can_run());
4497

    
4498
        if (qemu_debug_requested())
4499
            vm_stop(EXCP_DEBUG);
4500
        if (qemu_shutdown_requested()) {
4501
            if (no_shutdown) {
4502
                vm_stop(0);
4503
                no_shutdown = 0;
4504
            } else
4505
                break;
4506
        }
4507
        if (qemu_reset_requested()) {
4508
            pause_all_vcpus();
4509
            qemu_system_reset();
4510
            resume_all_vcpus();
4511
        }
4512
        if (qemu_powerdown_requested())
4513
            qemu_system_powerdown();
4514
        if ((r = qemu_vmstop_requested()))
4515
            vm_stop(r);
4516
    }
4517
    pause_all_vcpus();
4518
}
4519

    
4520
static void version(void)
4521
{
4522
    printf("QEMU PC emulator version " QEMU_VERSION QEMU_PKGVERSION ", Copyright (c) 2003-2008 Fabrice Bellard\n");
4523
}
4524

    
4525
static void help(int exitcode)
4526
{
4527
    version();
4528
    printf("usage: %s [options] [disk_image]\n"
4529
           "\n"
4530
           "'disk_image' is a raw hard image image for IDE hard disk 0\n"
4531
           "\n"
4532
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4533
           opt_help
4534
#define DEFHEADING(text) stringify(text) "\n"
4535
#include "qemu-options.h"
4536
#undef DEF
4537
#undef DEFHEADING
4538
#undef GEN_DOCS
4539
           "\n"
4540
           "During emulation, the following keys are useful:\n"
4541
           "ctrl-alt-f      toggle full screen\n"
4542
           "ctrl-alt-n      switch to virtual console 'n'\n"
4543
           "ctrl-alt        toggle mouse and keyboard grab\n"
4544
           "\n"
4545
           "When using -nographic, press 'ctrl-a h' to get some help.\n"
4546
           ,
4547
           "qemu",
4548
           DEFAULT_RAM_SIZE,
4549
#ifndef _WIN32
4550
           DEFAULT_NETWORK_SCRIPT,
4551
           DEFAULT_NETWORK_DOWN_SCRIPT,
4552
#endif
4553
           DEFAULT_GDBSTUB_PORT,
4554
           "/tmp/qemu.log");
4555
    exit(exitcode);
4556
}
4557

    
4558
#define HAS_ARG 0x0001
4559

    
4560
enum {
4561
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4562
    opt_enum,
4563
#define DEFHEADING(text)
4564
#include "qemu-options.h"
4565
#undef DEF
4566
#undef DEFHEADING
4567
#undef GEN_DOCS
4568
};
4569

    
4570
typedef struct QEMUOption {
4571
    const char *name;
4572
    int flags;
4573
    int index;
4574
} QEMUOption;
4575

    
4576
static const QEMUOption qemu_options[] = {
4577
    { "h", 0, QEMU_OPTION_h },
4578
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4579
    { option, opt_arg, opt_enum },
4580
#define DEFHEADING(text)
4581
#include "qemu-options.h"
4582
#undef DEF
4583
#undef DEFHEADING
4584
#undef GEN_DOCS
4585
    { NULL },
4586
};
4587

    
4588
#ifdef HAS_AUDIO
4589
struct soundhw soundhw[] = {
4590
#ifdef HAS_AUDIO_CHOICE
4591
#if defined(TARGET_I386) || defined(TARGET_MIPS)
4592
    {
4593
        "pcspk",
4594
        "PC speaker",
4595
        0,
4596
        1,
4597
        { .init_isa = pcspk_audio_init }
4598
    },
4599
#endif
4600

    
4601
#ifdef CONFIG_SB16
4602
    {
4603
        "sb16",
4604
        "Creative Sound Blaster 16",
4605
        0,
4606
        1,
4607
        { .init_isa = SB16_init }
4608
    },
4609
#endif
4610

    
4611
#ifdef CONFIG_CS4231A
4612
    {
4613
        "cs4231a",
4614
        "CS4231A",
4615
        0,
4616
        1,
4617
        { .init_isa = cs4231a_init }
4618
    },
4619
#endif
4620

    
4621
#ifdef CONFIG_ADLIB
4622
    {
4623
        "adlib",
4624
#ifdef HAS_YMF262
4625
        "Yamaha YMF262 (OPL3)",
4626
#else
4627
        "Yamaha YM3812 (OPL2)",
4628
#endif
4629
        0,
4630
        1,
4631
        { .init_isa = Adlib_init }
4632
    },
4633
#endif
4634

    
4635
#ifdef CONFIG_GUS
4636
    {
4637
        "gus",
4638
        "Gravis Ultrasound GF1",
4639
        0,
4640
        1,
4641
        { .init_isa = GUS_init }
4642
    },
4643
#endif
4644

    
4645
#ifdef CONFIG_AC97
4646
    {
4647
        "ac97",
4648
        "Intel 82801AA AC97 Audio",
4649
        0,
4650
        0,
4651
        { .init_pci = ac97_init }
4652
    },
4653
#endif
4654

    
4655
#ifdef CONFIG_ES1370
4656
    {
4657
        "es1370",
4658
        "ENSONIQ AudioPCI ES1370",
4659
        0,
4660
        0,
4661
        { .init_pci = es1370_init }
4662
    },
4663
#endif
4664

    
4665
#endif /* HAS_AUDIO_CHOICE */
4666

    
4667
    { NULL, NULL, 0, 0, { NULL } }
4668
};
4669

    
4670
static void select_soundhw (const char *optarg)
4671
{
4672
    struct soundhw *c;
4673

    
4674
    if (*optarg == '?') {
4675
    show_valid_cards:
4676

    
4677
        printf ("Valid sound card names (comma separated):\n");
4678
        for (c = soundhw; c->name; ++c) {
4679
            printf ("%-11s %s\n", c->name, c->descr);
4680
        }
4681
        printf ("\n-soundhw all will enable all of the above\n");
4682
        exit (*optarg != '?');
4683
    }
4684
    else {
4685
        size_t l;
4686
        const char *p;
4687
        char *e;
4688
        int bad_card = 0;
4689

    
4690
        if (!strcmp (optarg, "all")) {
4691
            for (c = soundhw; c->name; ++c) {
4692
                c->enabled = 1;
4693
            }
4694
            return;
4695
        }
4696

    
4697
        p = optarg;
4698
        while (*p) {
4699
            e = strchr (p, ',');
4700
            l = !e ? strlen (p) : (size_t) (e - p);
4701

    
4702
            for (c = soundhw; c->name; ++c) {
4703
                if (!strncmp (c->name, p, l)) {
4704
                    c->enabled = 1;
4705
                    break;
4706
                }
4707
            }
4708

    
4709
            if (!c->name) {
4710
                if (l > 80) {
4711
                    fprintf (stderr,
4712
                             "Unknown sound card name (too big to show)\n");
4713
                }
4714
                else {
4715
                    fprintf (stderr, "Unknown sound card name `%.*s'\n",
4716
                             (int) l, p);
4717
                }
4718
                bad_card = 1;
4719
            }
4720
            p += l + (e != NULL);
4721
        }
4722

    
4723
        if (bad_card)
4724
            goto show_valid_cards;
4725
    }
4726
}
4727
#endif
4728

    
4729
static void select_vgahw (const char *p)
4730
{
4731
    const char *opts;
4732

    
4733
    cirrus_vga_enabled = 0;
4734
    std_vga_enabled = 0;
4735
    vmsvga_enabled = 0;
4736
    xenfb_enabled = 0;
4737
    if (strstart(p, "std", &opts)) {
4738
        std_vga_enabled = 1;
4739
    } else if (strstart(p, "cirrus", &opts)) {
4740
        cirrus_vga_enabled = 1;
4741
    } else if (strstart(p, "vmware", &opts)) {
4742
        vmsvga_enabled = 1;
4743
    } else if (strstart(p, "xenfb", &opts)) {
4744
        xenfb_enabled = 1;
4745
    } else if (!strstart(p, "none", &opts)) {
4746
    invalid_vga:
4747
        fprintf(stderr, "Unknown vga type: %s\n", p);
4748
        exit(1);
4749
    }
4750
    while (*opts) {
4751
        const char *nextopt;
4752

    
4753
        if (strstart(opts, ",retrace=", &nextopt)) {
4754
            opts = nextopt;
4755
            if (strstart(opts, "dumb", &nextopt))
4756
                vga_retrace_method = VGA_RETRACE_DUMB;
4757
            else if (strstart(opts, "precise", &nextopt))
4758
                vga_retrace_method = VGA_RETRACE_PRECISE;
4759
            else goto invalid_vga;
4760
        } else goto invalid_vga;
4761
        opts = nextopt;
4762
    }
4763
}
4764

    
4765
#ifdef _WIN32
4766
static BOOL WINAPI qemu_ctrl_handler(DWORD type)
4767
{
4768
    exit(STATUS_CONTROL_C_EXIT);
4769
    return TRUE;
4770
}
4771
#endif
4772

    
4773
int qemu_uuid_parse(const char *str, uint8_t *uuid)
4774
{
4775
    int ret;
4776

    
4777
    if(strlen(str) != 36)
4778
        return -1;
4779

    
4780
    ret = sscanf(str, UUID_FMT, &uuid[0], &uuid[1], &uuid[2], &uuid[3],
4781
            &uuid[4], &uuid[5], &uuid[6], &uuid[7], &uuid[8], &uuid[9],
4782
            &uuid[10], &uuid[11], &uuid[12], &uuid[13], &uuid[14], &uuid[15]);
4783

    
4784
    if(ret != 16)
4785
        return -1;
4786

    
4787
#ifdef TARGET_I386
4788
    smbios_add_field(1, offsetof(struct smbios_type_1, uuid), 16, uuid);
4789
#endif
4790

    
4791
    return 0;
4792
}
4793

    
4794
#define MAX_NET_CLIENTS 32
4795

    
4796
#ifndef _WIN32
4797

    
4798
static void termsig_handler(int signal)
4799
{
4800
    qemu_system_shutdown_request();
4801
}
4802

    
4803
static void sigchld_handler(int signal)
4804
{
4805
    waitpid(-1, NULL, WNOHANG);
4806
}
4807

    
4808
static void sighandler_setup(void)
4809
{
4810
    struct sigaction act;
4811

    
4812
    memset(&act, 0, sizeof(act));
4813
    act.sa_handler = termsig_handler;
4814
    sigaction(SIGINT,  &act, NULL);
4815
    sigaction(SIGHUP,  &act, NULL);
4816
    sigaction(SIGTERM, &act, NULL);
4817

    
4818
    act.sa_handler = sigchld_handler;
4819
    act.sa_flags = SA_NOCLDSTOP;
4820
    sigaction(SIGCHLD, &act, NULL);
4821
}
4822

    
4823
#endif
4824

    
4825
#ifdef _WIN32
4826
/* Look for support files in the same directory as the executable.  */
4827
static char *find_datadir(const char *argv0)
4828
{
4829
    char *p;
4830
    char buf[MAX_PATH];
4831
    DWORD len;
4832

    
4833
    len = GetModuleFileName(NULL, buf, sizeof(buf) - 1);
4834
    if (len == 0) {
4835
        return NULL;
4836
    }
4837

    
4838
    buf[len] = 0;
4839
    p = buf + len - 1;
4840
    while (p != buf && *p != '\\')
4841
        p--;
4842
    *p = 0;
4843
    if (access(buf, R_OK) == 0) {
4844
        return qemu_strdup(buf);
4845
    }
4846
    return NULL;
4847
}
4848
#else /* !_WIN32 */
4849

    
4850
/* Find a likely location for support files using the location of the binary.
4851
   For installed binaries this will be "$bindir/../share/qemu".  When
4852
   running from the build tree this will be "$bindir/../pc-bios".  */
4853
#define SHARE_SUFFIX "/share/qemu"
4854
#define BUILD_SUFFIX "/pc-bios"
4855
static char *find_datadir(const char *argv0)
4856
{
4857
    char *dir;
4858
    char *p = NULL;
4859
    char *res;
4860
#ifdef PATH_MAX
4861
    char buf[PATH_MAX];
4862
#endif
4863
    size_t max_len;
4864

    
4865
#if defined(__linux__)
4866
    {
4867
        int len;
4868
        len = readlink("/proc/self/exe", buf, sizeof(buf) - 1);
4869
        if (len > 0) {
4870
            buf[len] = 0;
4871
            p = buf;
4872
        }
4873
    }
4874
#elif defined(__FreeBSD__)
4875
    {
4876
        int len;
4877
        len = readlink("/proc/curproc/file", buf, sizeof(buf) - 1);
4878
        if (len > 0) {
4879
            buf[len] = 0;
4880
            p = buf;
4881
        }
4882
    }
4883
#endif
4884
    /* If we don't have any way of figuring out the actual executable
4885
       location then try argv[0].  */
4886
    if (!p) {
4887
#ifdef PATH_MAX
4888
        p = buf;
4889
#endif
4890
        p = realpath(argv0, p);
4891
        if (!p) {
4892
            return NULL;
4893
        }
4894
    }
4895
    dir = dirname(p);
4896
    dir = dirname(dir);
4897

    
4898
    max_len = strlen(dir) +
4899
        MAX(strlen(SHARE_SUFFIX), strlen(BUILD_SUFFIX)) + 1;
4900
    res = qemu_mallocz(max_len);
4901
    snprintf(res, max_len, "%s%s", dir, SHARE_SUFFIX);
4902
    if (access(res, R_OK)) {
4903
        snprintf(res, max_len, "%s%s", dir, BUILD_SUFFIX);
4904
        if (access(res, R_OK)) {
4905
            qemu_free(res);
4906
            res = NULL;
4907
        }
4908
    }
4909
#ifndef PATH_MAX
4910
    free(p);
4911
#endif
4912
    return res;
4913
}
4914
#undef SHARE_SUFFIX
4915
#undef BUILD_SUFFIX
4916
#endif
4917

    
4918
char *qemu_find_file(int type, const char *name)
4919
{
4920
    int len;
4921
    const char *subdir;
4922
    char *buf;
4923

    
4924
    /* If name contains path separators then try it as a straight path.  */
4925
    if ((strchr(name, '/') || strchr(name, '\\'))
4926
        && access(name, R_OK) == 0) {
4927
        return strdup(name);
4928
    }
4929
    switch (type) {
4930
    case QEMU_FILE_TYPE_BIOS:
4931
        subdir = "";
4932
        break;
4933
    case QEMU_FILE_TYPE_KEYMAP:
4934
        subdir = "keymaps/";
4935
        break;
4936
    default:
4937
        abort();
4938
    }
4939
    len = strlen(data_dir) + strlen(name) + strlen(subdir) + 2;
4940
    buf = qemu_mallocz(len);
4941
    snprintf(buf, len, "%s/%s%s", data_dir, subdir, name);
4942
    if (access(buf, R_OK)) {
4943
        qemu_free(buf);
4944
        return NULL;
4945
    }
4946
    return buf;
4947
}
4948

    
4949
int main(int argc, char **argv, char **envp)
4950
{
4951
    const char *gdbstub_dev = NULL;
4952
    uint32_t boot_devices_bitmap = 0;
4953
    int i;
4954
    int snapshot, linux_boot, net_boot;
4955
    const char *initrd_filename;
4956
    const char *kernel_filename, *kernel_cmdline;
4957
    const char *boot_devices = "";
4958
    DisplayState *ds;
4959
    DisplayChangeListener *dcl;
4960
    int cyls, heads, secs, translation;
4961
    const char *net_clients[MAX_NET_CLIENTS];
4962
    int nb_net_clients;
4963
    const char *bt_opts[MAX_BT_CMDLINE];
4964
    int nb_bt_opts;
4965
    int hda_index;
4966
    int optind;
4967
    const char *r, *optarg;
4968
    CharDriverState *monitor_hd = NULL;
4969
    const char *monitor_device;
4970
    const char *serial_devices[MAX_SERIAL_PORTS];
4971
    int serial_device_index;
4972
    const char *parallel_devices[MAX_PARALLEL_PORTS];
4973
    int parallel_device_index;
4974
    const char *virtio_consoles[MAX_VIRTIO_CONSOLES];
4975
    int virtio_console_index;
4976
    const char *loadvm = NULL;
4977
    QEMUMachine *machine;
4978
    const char *cpu_model;
4979
    const char *usb_devices[MAX_USB_CMDLINE];
4980
    int usb_devices_index;
4981
#ifndef _WIN32
4982
    int fds[2];
4983
#endif
4984
    int tb_size;
4985
    const char *pid_file = NULL;
4986
    const char *incoming = NULL;
4987
#ifndef _WIN32
4988
    int fd = 0;
4989
    struct passwd *pwd = NULL;
4990
    const char *chroot_dir = NULL;
4991
    const char *run_as = NULL;
4992
#endif
4993
    CPUState *env;
4994
    int show_vnc_port = 0;
4995

    
4996
    qemu_cache_utils_init(envp);
4997

    
4998
    LIST_INIT (&vm_change_state_head);
4999
#ifndef _WIN32
5000
    {
5001
        struct sigaction act;
5002
        sigfillset(&act.sa_mask);
5003
        act.sa_flags = 0;
5004
        act.sa_handler = SIG_IGN;
5005
        sigaction(SIGPIPE, &act, NULL);
5006
    }
5007
#else
5008
    SetConsoleCtrlHandler(qemu_ctrl_handler, TRUE);
5009
    /* Note: cpu_interrupt() is currently not SMP safe, so we force
5010
       QEMU to run on a single CPU */
5011
    {
5012
        HANDLE h;
5013
        DWORD mask, smask;
5014
        int i;
5015
        h = GetCurrentProcess();
5016
        if (GetProcessAffinityMask(h, &mask, &smask)) {
5017
            for(i = 0; i < 32; i++) {
5018
                if (mask & (1 << i))
5019
                    break;
5020
            }
5021
            if (i != 32) {
5022
                mask = 1 << i;
5023
                SetProcessAffinityMask(h, mask);
5024
            }
5025
        }
5026
    }
5027
#endif
5028

    
5029
    module_call_init(MODULE_INIT_MACHINE);
5030
    machine = find_default_machine();
5031
    cpu_model = NULL;
5032
    initrd_filename = NULL;
5033
    ram_size = 0;
5034
    snapshot = 0;
5035
    kernel_filename = NULL;
5036
    kernel_cmdline = "";
5037
    cyls = heads = secs = 0;
5038
    translation = BIOS_ATA_TRANSLATION_AUTO;
5039
    monitor_device = "vc:80Cx24C";
5040

    
5041
    serial_devices[0] = "vc:80Cx24C";
5042
    for(i = 1; i < MAX_SERIAL_PORTS; i++)
5043
        serial_devices[i] = NULL;
5044
    serial_device_index = 0;
5045

    
5046
    parallel_devices[0] = "vc:80Cx24C";
5047
    for(i = 1; i < MAX_PARALLEL_PORTS; i++)
5048
        parallel_devices[i] = NULL;
5049
    parallel_device_index = 0;
5050

    
5051
    for(i = 0; i < MAX_VIRTIO_CONSOLES; i++)
5052
        virtio_consoles[i] = NULL;
5053
    virtio_console_index = 0;
5054

    
5055
    for (i = 0; i < MAX_NODES; i++) {
5056
        node_mem[i] = 0;
5057
        node_cpumask[i] = 0;
5058
    }
5059

    
5060
    usb_devices_index = 0;
5061

    
5062
    nb_net_clients = 0;
5063
    nb_bt_opts = 0;
5064
    nb_drives = 0;
5065
    nb_drives_opt = 0;
5066
    nb_numa_nodes = 0;
5067
    hda_index = -1;
5068

    
5069
    nb_nics = 0;
5070

    
5071
    tb_size = 0;
5072
    autostart= 1;
5073

    
5074
    register_watchdogs();
5075

    
5076
    optind = 1;
5077
    for(;;) {
5078
        if (optind >= argc)
5079
            break;
5080
        r = argv[optind];
5081
        if (r[0] != '-') {
5082
            hda_index = drive_add(argv[optind++], HD_ALIAS, 0);
5083
        } else {
5084
            const QEMUOption *popt;
5085

    
5086
            optind++;
5087
            /* Treat --foo the same as -foo.  */
5088
            if (r[1] == '-')
5089
                r++;
5090
            popt = qemu_options;
5091
            for(;;) {
5092
                if (!popt->name) {
5093
                    fprintf(stderr, "%s: invalid option -- '%s'\n",
5094
                            argv[0], r);
5095
                    exit(1);
5096
                }
5097
                if (!strcmp(popt->name, r + 1))
5098
                    break;
5099
                popt++;
5100
            }
5101
            if (popt->flags & HAS_ARG) {
5102
                if (optind >= argc) {
5103
                    fprintf(stderr, "%s: option '%s' requires an argument\n",
5104
                            argv[0], r);
5105
                    exit(1);
5106
                }
5107
                optarg = argv[optind++];
5108
            } else {
5109
                optarg = NULL;
5110
            }
5111

    
5112
            switch(popt->index) {
5113
            case QEMU_OPTION_M:
5114
                machine = find_machine(optarg);
5115
                if (!machine) {
5116
                    QEMUMachine *m;
5117
                    printf("Supported machines are:\n");
5118
                    for(m = first_machine; m != NULL; m = m->next) {
5119
                        printf("%-10s %s%s\n",
5120
                               m->name, m->desc,
5121
                               m->is_default ? " (default)" : "");
5122
                    }
5123
                    exit(*optarg != '?');
5124
                }
5125
                break;
5126
            case QEMU_OPTION_cpu:
5127
                /* hw initialization will check this */
5128
                if (*optarg == '?') {
5129
/* XXX: implement xxx_cpu_list for targets that still miss it */
5130
#if defined(cpu_list)
5131
                    cpu_list(stdout, &fprintf);
5132
#endif
5133
                    exit(0);
5134
                } else {
5135
                    cpu_model = optarg;
5136
                }
5137
                break;
5138
            case QEMU_OPTION_initrd:
5139
                initrd_filename = optarg;
5140
                break;
5141
            case QEMU_OPTION_hda:
5142
                if (cyls == 0)
5143
                    hda_index = drive_add(optarg, HD_ALIAS, 0);
5144
                else
5145
                    hda_index = drive_add(optarg, HD_ALIAS
5146
                             ",cyls=%d,heads=%d,secs=%d%s",
5147
                             0, cyls, heads, secs,
5148
                             translation == BIOS_ATA_TRANSLATION_LBA ?
5149
                                 ",trans=lba" :
5150
                             translation == BIOS_ATA_TRANSLATION_NONE ?
5151
                                 ",trans=none" : "");
5152
                 break;
5153
            case QEMU_OPTION_hdb:
5154
            case QEMU_OPTION_hdc:
5155
            case QEMU_OPTION_hdd:
5156
                drive_add(optarg, HD_ALIAS, popt->index - QEMU_OPTION_hda);
5157
                break;
5158
            case QEMU_OPTION_drive:
5159
                drive_add(NULL, "%s", optarg);
5160
                break;
5161
            case QEMU_OPTION_mtdblock:
5162
                drive_add(optarg, MTD_ALIAS);
5163
                break;
5164
            case QEMU_OPTION_sd:
5165
                drive_add(optarg, SD_ALIAS);
5166
                break;
5167
            case QEMU_OPTION_pflash:
5168
                drive_add(optarg, PFLASH_ALIAS);
5169
                break;
5170
            case QEMU_OPTION_snapshot:
5171
                snapshot = 1;
5172
                break;
5173
            case QEMU_OPTION_hdachs:
5174
                {
5175
                    const char *p;
5176
                    p = optarg;
5177
                    cyls = strtol(p, (char **)&p, 0);
5178
                    if (cyls < 1 || cyls > 16383)
5179
                        goto chs_fail;
5180
                    if (*p != ',')
5181
                        goto chs_fail;
5182
                    p++;
5183
                    heads = strtol(p, (char **)&p, 0);
5184
                    if (heads < 1 || heads > 16)
5185
                        goto chs_fail;
5186
                    if (*p != ',')
5187
                        goto chs_fail;
5188
                    p++;
5189
                    secs = strtol(p, (char **)&p, 0);
5190
                    if (secs < 1 || secs > 63)
5191
                        goto chs_fail;
5192
                    if (*p == ',') {
5193
                        p++;
5194
                        if (!strcmp(p, "none"))
5195
                            translation = BIOS_ATA_TRANSLATION_NONE;
5196
                        else if (!strcmp(p, "lba"))
5197
                            translation = BIOS_ATA_TRANSLATION_LBA;
5198
                        else if (!strcmp(p, "auto"))
5199
                            translation = BIOS_ATA_TRANSLATION_AUTO;
5200
                        else
5201
                            goto chs_fail;
5202
                    } else if (*p != '\0') {
5203
                    chs_fail:
5204
                        fprintf(stderr, "qemu: invalid physical CHS format\n");
5205
                        exit(1);
5206
                    }
5207
                    if (hda_index != -1)
5208
                        snprintf(drives_opt[hda_index].opt,
5209
                                 sizeof(drives_opt[hda_index].opt),
5210
                                 HD_ALIAS ",cyls=%d,heads=%d,secs=%d%s",
5211
                                 0, cyls, heads, secs,
5212
                                 translation == BIOS_ATA_TRANSLATION_LBA ?
5213
                                         ",trans=lba" :
5214
                                 translation == BIOS_ATA_TRANSLATION_NONE ?
5215
                                     ",trans=none" : "");
5216
                }
5217
                break;
5218
            case QEMU_OPTION_numa:
5219
                if (nb_numa_nodes >= MAX_NODES) {
5220
                    fprintf(stderr, "qemu: too many NUMA nodes\n");
5221
                    exit(1);
5222
                }
5223
                numa_add(optarg);
5224
                break;
5225
            case QEMU_OPTION_nographic:
5226
                display_type = DT_NOGRAPHIC;
5227
                break;
5228
#ifdef CONFIG_CURSES
5229
            case QEMU_OPTION_curses:
5230
                display_type = DT_CURSES;
5231
                break;
5232
#endif
5233
            case QEMU_OPTION_portrait:
5234
                graphic_rotate = 1;
5235
                break;
5236
            case QEMU_OPTION_kernel:
5237
                kernel_filename = optarg;
5238
                break;
5239
            case QEMU_OPTION_append:
5240
                kernel_cmdline = optarg;
5241
                break;
5242
            case QEMU_OPTION_cdrom:
5243
                drive_add(optarg, CDROM_ALIAS);
5244
                break;
5245
            case QEMU_OPTION_boot:
5246
                boot_devices = optarg;
5247
                /* We just do some generic consistency checks */
5248
                {
5249
                    /* Could easily be extended to 64 devices if needed */
5250
                    const char *p;
5251
                    
5252
                    boot_devices_bitmap = 0;
5253
                    for (p = boot_devices; *p != '\0'; p++) {
5254
                        /* Allowed boot devices are:
5255
                         * a b     : floppy disk drives
5256
                         * c ... f : IDE disk drives
5257
                         * g ... m : machine implementation dependant drives
5258
                         * n ... p : network devices
5259
                         * It's up to each machine implementation to check
5260
                         * if the given boot devices match the actual hardware
5261
                         * implementation and firmware features.
5262
                         */
5263
                        if (*p < 'a' || *p > 'q') {
5264
                            fprintf(stderr, "Invalid boot device '%c'\n", *p);
5265
                            exit(1);
5266
                        }
5267
                        if (boot_devices_bitmap & (1 << (*p - 'a'))) {
5268
                            fprintf(stderr,
5269
                                    "Boot device '%c' was given twice\n",*p);
5270
                            exit(1);
5271
                        }
5272
                        boot_devices_bitmap |= 1 << (*p - 'a');
5273
                    }
5274
                }
5275
                break;
5276
            case QEMU_OPTION_fda:
5277
            case QEMU_OPTION_fdb:
5278
                drive_add(optarg, FD_ALIAS, popt->index - QEMU_OPTION_fda);
5279
                break;
5280
#ifdef TARGET_I386
5281
            case QEMU_OPTION_no_fd_bootchk:
5282
                fd_bootchk = 0;
5283
                break;
5284
#endif
5285
            case QEMU_OPTION_net:
5286
                if (nb_net_clients >= MAX_NET_CLIENTS) {
5287
                    fprintf(stderr, "qemu: too many network clients\n");
5288
                    exit(1);
5289
                }
5290
                net_clients[nb_net_clients] = optarg;
5291
                nb_net_clients++;
5292
                break;
5293
#ifdef CONFIG_SLIRP
5294
            case QEMU_OPTION_tftp:
5295
                legacy_tftp_prefix = optarg;
5296
                break;
5297
            case QEMU_OPTION_bootp:
5298
                legacy_bootp_filename = optarg;
5299
                break;
5300
#ifndef _WIN32
5301
            case QEMU_OPTION_smb:
5302
                net_slirp_smb(optarg);
5303
                break;
5304
#endif
5305
            case QEMU_OPTION_redir:
5306
                net_slirp_redir(optarg);
5307
                break;
5308
#endif
5309
            case QEMU_OPTION_bt:
5310
                if (nb_bt_opts >= MAX_BT_CMDLINE) {
5311
                    fprintf(stderr, "qemu: too many bluetooth options\n");
5312
                    exit(1);
5313
                }
5314
                bt_opts[nb_bt_opts++] = optarg;
5315
                break;
5316
#ifdef HAS_AUDIO
5317
            case QEMU_OPTION_audio_help:
5318
                AUD_help ();
5319
                exit (0);
5320
                break;
5321
            case QEMU_OPTION_soundhw:
5322
                select_soundhw (optarg);
5323
                break;
5324
#endif
5325
            case QEMU_OPTION_h:
5326
                help(0);
5327
                break;
5328
            case QEMU_OPTION_version:
5329
                version();
5330
                exit(0);
5331
                break;
5332
            case QEMU_OPTION_m: {
5333
                uint64_t value;
5334
                char *ptr;
5335

    
5336
                value = strtoul(optarg, &ptr, 10);
5337
                switch (*ptr) {
5338
                case 0: case 'M': case 'm':
5339
                    value <<= 20;
5340
                    break;
5341
                case 'G': case 'g':
5342
                    value <<= 30;
5343
                    break;
5344
                default:
5345
                    fprintf(stderr, "qemu: invalid ram size: %s\n", optarg);
5346
                    exit(1);
5347
                }
5348

    
5349
                /* On 32-bit hosts, QEMU is limited by virtual address space */
5350
                if (value > (2047 << 20)
5351
#ifndef CONFIG_KQEMU
5352
                    && HOST_LONG_BITS == 32
5353
#endif
5354
                    ) {
5355
                    fprintf(stderr, "qemu: at most 2047 MB RAM can be simulated\n");
5356
                    exit(1);
5357
                }
5358
                if (value != (uint64_t)(ram_addr_t)value) {
5359
                    fprintf(stderr, "qemu: ram size too large\n");
5360
                    exit(1);
5361
                }
5362
                ram_size = value;
5363
                break;
5364
            }
5365
            case QEMU_OPTION_d:
5366
                {
5367
                    int mask;
5368
                    const CPULogItem *item;
5369

    
5370
                    mask = cpu_str_to_log_mask(optarg);
5371
                    if (!mask) {
5372
                        printf("Log items (comma separated):\n");
5373
                    for(item = cpu_log_items; item->mask != 0; item++) {
5374
                        printf("%-10s %s\n", item->name, item->help);
5375
                    }
5376
                    exit(1);
5377
                    }
5378
                    cpu_set_log(mask);
5379
                }
5380
                break;
5381
            case QEMU_OPTION_s:
5382
                gdbstub_dev = "tcp::" DEFAULT_GDBSTUB_PORT;
5383
                break;
5384
            case QEMU_OPTION_gdb:
5385
                gdbstub_dev = optarg;
5386
                break;
5387
            case QEMU_OPTION_L:
5388
                data_dir = optarg;
5389
                break;
5390
            case QEMU_OPTION_bios:
5391
                bios_name = optarg;
5392
                break;
5393
            case QEMU_OPTION_singlestep:
5394
                singlestep = 1;
5395
                break;
5396
            case QEMU_OPTION_S:
5397
                autostart = 0;
5398
                break;
5399
#ifndef _WIN32
5400
            case QEMU_OPTION_k:
5401
                keyboard_layout = optarg;
5402
                break;
5403
#endif
5404
            case QEMU_OPTION_localtime:
5405
                rtc_utc = 0;
5406
                break;
5407
            case QEMU_OPTION_vga:
5408
                select_vgahw (optarg);
5409
                break;
5410
#if defined(TARGET_PPC) || defined(TARGET_SPARC)
5411
            case QEMU_OPTION_g:
5412
                {
5413
                    const char *p;
5414
                    int w, h, depth;
5415
                    p = optarg;
5416
                    w = strtol(p, (char **)&p, 10);
5417
                    if (w <= 0) {
5418
                    graphic_error:
5419
                        fprintf(stderr, "qemu: invalid resolution or depth\n");
5420
                        exit(1);
5421
                    }
5422
                    if (*p != 'x')
5423
                        goto graphic_error;
5424
                    p++;
5425
                    h = strtol(p, (char **)&p, 10);
5426
                    if (h <= 0)
5427
                        goto graphic_error;
5428
                    if (*p == 'x') {
5429
                        p++;
5430
                        depth = strtol(p, (char **)&p, 10);
5431
                        if (depth != 8 && depth != 15 && depth != 16 &&
5432
                            depth != 24 && depth != 32)
5433
                            goto graphic_error;
5434
                    } else if (*p == '\0') {
5435
                        depth = graphic_depth;
5436
                    } else {
5437
                        goto graphic_error;
5438
                    }
5439

    
5440
                    graphic_width = w;
5441
                    graphic_height = h;
5442
                    graphic_depth = depth;
5443
                }
5444
                break;
5445
#endif
5446
            case QEMU_OPTION_echr:
5447
                {
5448
                    char *r;
5449
                    term_escape_char = strtol(optarg, &r, 0);
5450
                    if (r == optarg)
5451
                        printf("Bad argument to echr\n");
5452
                    break;
5453
                }
5454
            case QEMU_OPTION_monitor:
5455
                monitor_device = optarg;
5456
                break;
5457
            case QEMU_OPTION_serial:
5458
                if (serial_device_index >= MAX_SERIAL_PORTS) {
5459
                    fprintf(stderr, "qemu: too many serial ports\n");
5460
                    exit(1);
5461
                }
5462
                serial_devices[serial_device_index] = optarg;
5463
                serial_device_index++;
5464
                break;
5465
            case QEMU_OPTION_watchdog:
5466
                i = select_watchdog(optarg);
5467
                if (i > 0)
5468
                    exit (i == 1 ? 1 : 0);
5469
                break;
5470
            case QEMU_OPTION_watchdog_action:
5471
                if (select_watchdog_action(optarg) == -1) {
5472
                    fprintf(stderr, "Unknown -watchdog-action parameter\n");
5473
                    exit(1);
5474
                }
5475
                break;
5476
            case QEMU_OPTION_virtiocon:
5477
                if (virtio_console_index >= MAX_VIRTIO_CONSOLES) {
5478
                    fprintf(stderr, "qemu: too many virtio consoles\n");
5479
                    exit(1);
5480
                }
5481
                virtio_consoles[virtio_console_index] = optarg;
5482
                virtio_console_index++;
5483
                break;
5484
            case QEMU_OPTION_parallel:
5485
                if (parallel_device_index >= MAX_PARALLEL_PORTS) {
5486
                    fprintf(stderr, "qemu: too many parallel ports\n");
5487
                    exit(1);
5488
                }
5489
                parallel_devices[parallel_device_index] = optarg;
5490
                parallel_device_index++;
5491
                break;
5492
            case QEMU_OPTION_loadvm:
5493
                loadvm = optarg;
5494
                break;
5495
            case QEMU_OPTION_full_screen:
5496
                full_screen = 1;
5497
                break;
5498
#ifdef CONFIG_SDL
5499
            case QEMU_OPTION_no_frame:
5500
                no_frame = 1;
5501
                break;
5502
            case QEMU_OPTION_alt_grab:
5503
                alt_grab = 1;
5504
                break;
5505
            case QEMU_OPTION_no_quit:
5506
                no_quit = 1;
5507
                break;
5508
            case QEMU_OPTION_sdl:
5509
                display_type = DT_SDL;
5510
                break;
5511
#endif
5512
            case QEMU_OPTION_pidfile:
5513
                pid_file = optarg;
5514
                break;
5515
#ifdef TARGET_I386
5516
            case QEMU_OPTION_win2k_hack:
5517
                win2k_install_hack = 1;
5518
                break;
5519
            case QEMU_OPTION_rtc_td_hack:
5520
                rtc_td_hack = 1;
5521
                break;
5522
            case QEMU_OPTION_acpitable:
5523
                if(acpi_table_add(optarg) < 0) {
5524
                    fprintf(stderr, "Wrong acpi table provided\n");
5525
                    exit(1);
5526
                }
5527
                break;
5528
            case QEMU_OPTION_smbios:
5529
                if(smbios_entry_add(optarg) < 0) {
5530
                    fprintf(stderr, "Wrong smbios provided\n");
5531
                    exit(1);
5532
                }
5533
                break;
5534
#endif
5535
#ifdef CONFIG_KQEMU
5536
            case QEMU_OPTION_no_kqemu:
5537
                kqemu_allowed = 0;
5538
                break;
5539
            case QEMU_OPTION_kernel_kqemu:
5540
                kqemu_allowed = 2;
5541
                break;
5542
#endif
5543
#ifdef CONFIG_KVM
5544
            case QEMU_OPTION_enable_kvm:
5545
                kvm_allowed = 1;
5546
#ifdef CONFIG_KQEMU
5547
                kqemu_allowed = 0;
5548
#endif
5549
                break;
5550
#endif
5551
            case QEMU_OPTION_usb:
5552
                usb_enabled = 1;
5553
                break;
5554
            case QEMU_OPTION_usbdevice:
5555
                usb_enabled = 1;
5556
                if (usb_devices_index >= MAX_USB_CMDLINE) {
5557
                    fprintf(stderr, "Too many USB devices\n");
5558
                    exit(1);
5559
                }
5560
                usb_devices[usb_devices_index] = optarg;
5561
                usb_devices_index++;
5562
                break;
5563
            case QEMU_OPTION_smp:
5564
                smp_cpus = atoi(optarg);
5565
                if (smp_cpus < 1) {
5566
                    fprintf(stderr, "Invalid number of CPUs\n");
5567
                    exit(1);
5568
                }
5569
                break;
5570
            case QEMU_OPTION_vnc:
5571
                display_type = DT_VNC;
5572
                vnc_display = optarg;
5573
                break;
5574
#ifdef TARGET_I386
5575
            case QEMU_OPTION_no_acpi:
5576
                acpi_enabled = 0;
5577
                break;
5578
            case QEMU_OPTION_no_hpet:
5579
                no_hpet = 1;
5580
                break;
5581
            case QEMU_OPTION_no_virtio_balloon:
5582
                no_virtio_balloon = 1;
5583
                break;
5584
#endif
5585
            case QEMU_OPTION_no_reboot:
5586
                no_reboot = 1;
5587
                break;
5588
            case QEMU_OPTION_no_shutdown:
5589
                no_shutdown = 1;
5590
                break;
5591
            case QEMU_OPTION_show_cursor:
5592
                cursor_hide = 0;
5593
                break;
5594
            case QEMU_OPTION_uuid:
5595
                if(qemu_uuid_parse(optarg, qemu_uuid) < 0) {
5596
                    fprintf(stderr, "Fail to parse UUID string."
5597
                            " Wrong format.\n");
5598
                    exit(1);
5599
                }
5600
                break;
5601
#ifndef _WIN32
5602
            case QEMU_OPTION_daemonize:
5603
                daemonize = 1;
5604
                break;
5605
#endif
5606
            case QEMU_OPTION_option_rom:
5607
                if (nb_option_roms >= MAX_OPTION_ROMS) {
5608
                    fprintf(stderr, "Too many option ROMs\n");
5609
                    exit(1);
5610
                }
5611
                option_rom[nb_option_roms] = optarg;
5612
                nb_option_roms++;
5613
                break;
5614
#if defined(TARGET_ARM) || defined(TARGET_M68K)
5615
            case QEMU_OPTION_semihosting:
5616
                semihosting_enabled = 1;
5617
                break;
5618
#endif
5619
            case QEMU_OPTION_name:
5620
                qemu_name = optarg;
5621
                break;
5622
#if defined(TARGET_SPARC) || defined(TARGET_PPC)
5623
            case QEMU_OPTION_prom_env:
5624
                if (nb_prom_envs >= MAX_PROM_ENVS) {
5625
                    fprintf(stderr, "Too many prom variables\n");
5626
                    exit(1);
5627
                }
5628
                prom_envs[nb_prom_envs] = optarg;
5629
                nb_prom_envs++;
5630
                break;
5631
#endif
5632
#ifdef TARGET_ARM
5633
            case QEMU_OPTION_old_param:
5634
                old_param = 1;
5635
                break;
5636
#endif
5637
            case QEMU_OPTION_clock:
5638
                configure_alarms(optarg);
5639
                break;
5640
            case QEMU_OPTION_startdate:
5641
                {
5642
                    struct tm tm;
5643
                    time_t rtc_start_date;
5644
                    if (!strcmp(optarg, "now")) {
5645
                        rtc_date_offset = -1;
5646
                    } else {
5647
                        if (sscanf(optarg, "%d-%d-%dT%d:%d:%d",
5648
                               &tm.tm_year,
5649
                               &tm.tm_mon,
5650
                               &tm.tm_mday,
5651
                               &tm.tm_hour,
5652
                               &tm.tm_min,
5653
                               &tm.tm_sec) == 6) {
5654
                            /* OK */
5655
                        } else if (sscanf(optarg, "%d-%d-%d",
5656
                                          &tm.tm_year,
5657
                                          &tm.tm_mon,
5658
                                          &tm.tm_mday) == 3) {
5659
                            tm.tm_hour = 0;
5660
                            tm.tm_min = 0;
5661
                            tm.tm_sec = 0;
5662
                        } else {
5663
                            goto date_fail;
5664
                        }
5665
                        tm.tm_year -= 1900;
5666
                        tm.tm_mon--;
5667
                        rtc_start_date = mktimegm(&tm);
5668
                        if (rtc_start_date == -1) {
5669
                        date_fail:
5670
                            fprintf(stderr, "Invalid date format. Valid format are:\n"
5671
                                    "'now' or '2006-06-17T16:01:21' or '2006-06-17'\n");
5672
                            exit(1);
5673
                        }
5674
                        rtc_date_offset = time(NULL) - rtc_start_date;
5675
                    }
5676
                }
5677
                break;
5678
            case QEMU_OPTION_tb_size:
5679
                tb_size = strtol(optarg, NULL, 0);
5680
                if (tb_size < 0)
5681
                    tb_size = 0;
5682
                break;
5683
            case QEMU_OPTION_icount:
5684
                use_icount = 1;
5685
                if (strcmp(optarg, "auto") == 0) {
5686
                    icount_time_shift = -1;
5687
                } else {
5688
                    icount_time_shift = strtol(optarg, NULL, 0);
5689
                }
5690
                break;
5691
            case QEMU_OPTION_incoming:
5692
                incoming = optarg;
5693
                break;
5694
#ifndef _WIN32
5695
            case QEMU_OPTION_chroot:
5696
                chroot_dir = optarg;
5697
                break;
5698
            case QEMU_OPTION_runas:
5699
                run_as = optarg;
5700
                break;
5701
#endif
5702
#ifdef CONFIG_XEN
5703
            case QEMU_OPTION_xen_domid:
5704
                xen_domid = atoi(optarg);
5705
                break;
5706
            case QEMU_OPTION_xen_create:
5707
                xen_mode = XEN_CREATE;
5708
                break;
5709
            case QEMU_OPTION_xen_attach:
5710
                xen_mode = XEN_ATTACH;
5711
                break;
5712
#endif
5713
            }
5714
        }
5715
    }
5716

    
5717
    /* If no data_dir is specified then try to find it relative to the
5718
       executable path.  */
5719
    if (!data_dir) {
5720
        data_dir = find_datadir(argv[0]);
5721
    }
5722
    /* If all else fails use the install patch specified when building.  */
5723
    if (!data_dir) {
5724
        data_dir = CONFIG_QEMU_SHAREDIR;
5725
    }
5726

    
5727
#if defined(CONFIG_KVM) && defined(CONFIG_KQEMU)
5728
    if (kvm_allowed && kqemu_allowed) {
5729
        fprintf(stderr,
5730
                "You can not enable both KVM and kqemu at the same time\n");
5731
        exit(1);
5732
    }
5733
#endif
5734

    
5735
    machine->max_cpus = machine->max_cpus ?: 1; /* Default to UP */
5736
    if (smp_cpus > machine->max_cpus) {
5737
        fprintf(stderr, "Number of SMP cpus requested (%d), exceeds max cpus "
5738
                "supported by machine `%s' (%d)\n", smp_cpus,  machine->name,
5739
                machine->max_cpus);
5740
        exit(1);
5741
    }
5742

    
5743
    if (display_type == DT_NOGRAPHIC) {
5744
       if (serial_device_index == 0)
5745
           serial_devices[0] = "stdio";
5746
       if (parallel_device_index == 0)
5747
           parallel_devices[0] = "null";
5748
       if (strncmp(monitor_device, "vc", 2) == 0)
5749
           monitor_device = "stdio";
5750
    }
5751

    
5752
#ifndef _WIN32
5753
    if (daemonize) {
5754
        pid_t pid;
5755

    
5756
        if (pipe(fds) == -1)
5757
            exit(1);
5758

    
5759
        pid = fork();
5760
        if (pid > 0) {
5761
            uint8_t status;
5762
            ssize_t len;
5763

    
5764
            close(fds[1]);
5765

    
5766
        again:
5767
            len = read(fds[0], &status, 1);
5768
            if (len == -1 && (errno == EINTR))
5769
                goto again;
5770

    
5771
            if (len != 1)
5772
                exit(1);
5773
            else if (status == 1) {
5774
                fprintf(stderr, "Could not acquire pidfile\n");
5775
                exit(1);
5776
            } else
5777
                exit(0);
5778
        } else if (pid < 0)
5779
            exit(1);
5780

    
5781
        setsid();
5782

    
5783
        pid = fork();
5784
        if (pid > 0)
5785
            exit(0);
5786
        else if (pid < 0)
5787
            exit(1);
5788

    
5789
        umask(027);
5790

    
5791
        signal(SIGTSTP, SIG_IGN);
5792
        signal(SIGTTOU, SIG_IGN);
5793
        signal(SIGTTIN, SIG_IGN);
5794
    }
5795

    
5796
    if (pid_file && qemu_create_pidfile(pid_file) != 0) {
5797
        if (daemonize) {
5798
            uint8_t status = 1;
5799
            write(fds[1], &status, 1);
5800
        } else
5801
            fprintf(stderr, "Could not acquire pid file\n");
5802
        exit(1);
5803
    }
5804
#endif
5805

    
5806
#ifdef CONFIG_KQEMU
5807
    if (smp_cpus > 1)
5808
        kqemu_allowed = 0;
5809
#endif
5810
    if (qemu_init_main_loop()) {
5811
        fprintf(stderr, "qemu_init_main_loop failed\n");
5812
        exit(1);
5813
    }
5814
    linux_boot = (kernel_filename != NULL);
5815

    
5816
    if (!linux_boot && *kernel_cmdline != '\0') {
5817
        fprintf(stderr, "-append only allowed with -kernel option\n");
5818
        exit(1);
5819
    }
5820

    
5821
    if (!linux_boot && initrd_filename != NULL) {
5822
        fprintf(stderr, "-initrd only allowed with -kernel option\n");
5823
        exit(1);
5824
    }
5825

    
5826
    /* boot to floppy or the default cd if no hard disk defined yet */
5827
    if (!boot_devices[0]) {
5828
        boot_devices = "cad";
5829
    }
5830
    setvbuf(stdout, NULL, _IOLBF, 0);
5831

    
5832
    init_timers();
5833
    if (init_timer_alarm() < 0) {
5834
        fprintf(stderr, "could not initialize alarm timer\n");
5835
        exit(1);
5836
    }
5837
    if (use_icount && icount_time_shift < 0) {
5838
        use_icount = 2;
5839
        /* 125MIPS seems a reasonable initial guess at the guest speed.
5840
           It will be corrected fairly quickly anyway.  */
5841
        icount_time_shift = 3;
5842
        init_icount_adjust();
5843
    }
5844

    
5845
#ifdef _WIN32
5846
    socket_init();
5847
#endif
5848

    
5849
    /* init network clients */
5850
    if (nb_net_clients == 0) {
5851
        /* if no clients, we use a default config */
5852
        net_clients[nb_net_clients++] = "nic";
5853
#ifdef CONFIG_SLIRP
5854
        net_clients[nb_net_clients++] = "user";
5855
#endif
5856
    }
5857

    
5858
    for(i = 0;i < nb_net_clients; i++) {
5859
        if (net_client_parse(net_clients[i]) < 0)
5860
            exit(1);
5861
    }
5862

    
5863
    net_boot = (boot_devices_bitmap >> ('n' - 'a')) & 0xF;
5864
    net_set_boot_mask(net_boot);
5865

    
5866
    net_client_check();
5867

    
5868
    /* init the bluetooth world */
5869
    for (i = 0; i < nb_bt_opts; i++)
5870
        if (bt_parse(bt_opts[i]))
5871
            exit(1);
5872

    
5873
    /* init the memory */
5874
    if (ram_size == 0)
5875
        ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
5876

    
5877
#ifdef CONFIG_KQEMU
5878
    /* FIXME: This is a nasty hack because kqemu can't cope with dynamic
5879
       guest ram allocation.  It needs to go away.  */
5880
    if (kqemu_allowed) {
5881
        kqemu_phys_ram_size = ram_size + 8 * 1024 * 1024 + 4 * 1024 * 1024;
5882
        kqemu_phys_ram_base = qemu_vmalloc(kqemu_phys_ram_size);
5883
        if (!kqemu_phys_ram_base) {
5884
            fprintf(stderr, "Could not allocate physical memory\n");
5885
            exit(1);
5886
        }
5887
    }
5888
#endif
5889

    
5890
    /* init the dynamic translator */
5891
    cpu_exec_init_all(tb_size * 1024 * 1024);
5892

    
5893
    bdrv_init();
5894

    
5895
    /* we always create the cdrom drive, even if no disk is there */
5896

    
5897
    if (nb_drives_opt < MAX_DRIVES)
5898
        drive_add(NULL, CDROM_ALIAS);
5899

    
5900
    /* we always create at least one floppy */
5901

    
5902
    if (nb_drives_opt < MAX_DRIVES)
5903
        drive_add(NULL, FD_ALIAS, 0);
5904

    
5905
    /* we always create one sd slot, even if no card is in it */
5906

    
5907
    if (nb_drives_opt < MAX_DRIVES)
5908
        drive_add(NULL, SD_ALIAS);
5909

    
5910
    /* open the virtual block devices */
5911

    
5912
    for(i = 0; i < nb_drives_opt; i++)
5913
        if (drive_init(&drives_opt[i], snapshot, machine) == -1)
5914
            exit(1);
5915

    
5916
    register_savevm("timer", 0, 2, timer_save, timer_load, NULL);
5917
    register_savevm_live("ram", 0, 3, ram_save_live, NULL, ram_load, NULL);
5918

    
5919
#ifndef _WIN32
5920
    /* must be after terminal init, SDL library changes signal handlers */
5921
    sighandler_setup();
5922
#endif
5923

    
5924
    /* Maintain compatibility with multiple stdio monitors */
5925
    if (!strcmp(monitor_device,"stdio")) {
5926
        for (i = 0; i < MAX_SERIAL_PORTS; i++) {
5927
            const char *devname = serial_devices[i];
5928
            if (devname && !strcmp(devname,"mon:stdio")) {
5929
                monitor_device = NULL;
5930
                break;
5931
            } else if (devname && !strcmp(devname,"stdio")) {
5932
                monitor_device = NULL;
5933
                serial_devices[i] = "mon:stdio";
5934
                break;
5935
            }
5936
        }
5937
    }
5938

    
5939
    if (nb_numa_nodes > 0) {
5940
        int i;
5941

    
5942
        if (nb_numa_nodes > smp_cpus) {
5943
            nb_numa_nodes = smp_cpus;
5944
        }
5945

    
5946
        /* If no memory size if given for any node, assume the default case
5947
         * and distribute the available memory equally across all nodes
5948
         */
5949
        for (i = 0; i < nb_numa_nodes; i++) {
5950
            if (node_mem[i] != 0)
5951
                break;
5952
        }
5953
        if (i == nb_numa_nodes) {
5954
            uint64_t usedmem = 0;
5955

    
5956
            /* On Linux, the each node's border has to be 8MB aligned,
5957
             * the final node gets the rest.
5958
             */
5959
            for (i = 0; i < nb_numa_nodes - 1; i++) {
5960
                node_mem[i] = (ram_size / nb_numa_nodes) & ~((1 << 23UL) - 1);
5961
                usedmem += node_mem[i];
5962
            }
5963
            node_mem[i] = ram_size - usedmem;
5964
        }
5965

    
5966
        for (i = 0; i < nb_numa_nodes; i++) {
5967
            if (node_cpumask[i] != 0)
5968
                break;
5969
        }
5970
        /* assigning the VCPUs round-robin is easier to implement, guest OSes
5971
         * must cope with this anyway, because there are BIOSes out there in
5972
         * real machines which also use this scheme.
5973
         */
5974
        if (i == nb_numa_nodes) {
5975
            for (i = 0; i < smp_cpus; i++) {
5976
                node_cpumask[i % nb_numa_nodes] |= 1 << i;
5977
            }
5978
        }
5979
    }
5980

    
5981
    if (kvm_enabled()) {
5982
        int ret;
5983

    
5984
        ret = kvm_init(smp_cpus);
5985
        if (ret < 0) {
5986
            fprintf(stderr, "failed to initialize KVM\n");
5987
            exit(1);
5988
        }
5989
    }
5990

    
5991
    if (monitor_device) {
5992
        monitor_hd = qemu_chr_open("monitor", monitor_device, NULL);
5993
        if (!monitor_hd) {
5994
            fprintf(stderr, "qemu: could not open monitor device '%s'\n", monitor_device);
5995
            exit(1);
5996
        }
5997
    }
5998

    
5999
    for(i = 0; i < MAX_SERIAL_PORTS; i++) {
6000
        const char *devname = serial_devices[i];
6001
        if (devname && strcmp(devname, "none")) {
6002
            char label[32];
6003
            snprintf(label, sizeof(label), "serial%d", i);
6004
            serial_hds[i] = qemu_chr_open(label, devname, NULL);
6005
            if (!serial_hds[i]) {
6006
                fprintf(stderr, "qemu: could not open serial device '%s'\n",
6007
                        devname);
6008
                exit(1);
6009
            }
6010
        }
6011
    }
6012

    
6013
    for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
6014
        const char *devname = parallel_devices[i];
6015
        if (devname && strcmp(devname, "none")) {
6016
            char label[32];
6017
            snprintf(label, sizeof(label), "parallel%d", i);
6018
            parallel_hds[i] = qemu_chr_open(label, devname, NULL);
6019
            if (!parallel_hds[i]) {
6020
                fprintf(stderr, "qemu: could not open parallel device '%s'\n",
6021
                        devname);
6022
                exit(1);
6023
            }
6024
        }
6025
    }
6026

    
6027
    for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
6028
        const char *devname = virtio_consoles[i];
6029
        if (devname && strcmp(devname, "none")) {
6030
            char label[32];
6031
            snprintf(label, sizeof(label), "virtcon%d", i);
6032
            virtcon_hds[i] = qemu_chr_open(label, devname, NULL);
6033
            if (!virtcon_hds[i]) {
6034
                fprintf(stderr, "qemu: could not open virtio console '%s'\n",
6035
                        devname);
6036
                exit(1);
6037
            }
6038
        }
6039
    }
6040

    
6041
    module_call_init(MODULE_INIT_DEVICE);
6042

    
6043
    machine->init(ram_size, boot_devices,
6044
                  kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
6045

    
6046

    
6047
    for (env = first_cpu; env != NULL; env = env->next_cpu) {
6048
        for (i = 0; i < nb_numa_nodes; i++) {
6049
            if (node_cpumask[i] & (1 << env->cpu_index)) {
6050
                env->numa_node = i;
6051
            }
6052
        }
6053
    }
6054

    
6055
    current_machine = machine;
6056

    
6057
    /* init USB devices */
6058
    if (usb_enabled) {
6059
        for(i = 0; i < usb_devices_index; i++) {
6060
            if (usb_device_add(usb_devices[i], 0) < 0) {
6061
                fprintf(stderr, "Warning: could not add USB device %s\n",
6062
                        usb_devices[i]);
6063
            }
6064
        }
6065
    }
6066

    
6067
    if (!display_state)
6068
        dumb_display_init();
6069
    /* just use the first displaystate for the moment */
6070
    ds = display_state;
6071

    
6072
    if (display_type == DT_DEFAULT) {
6073
#if defined(CONFIG_SDL) || defined(CONFIG_COCOA)
6074
        display_type = DT_SDL;
6075
#else
6076
        display_type = DT_VNC;
6077
        vnc_display = "localhost:0,to=99";
6078
        show_vnc_port = 1;
6079
#endif
6080
    }
6081
        
6082

    
6083
    switch (display_type) {
6084
    case DT_NOGRAPHIC:
6085
        break;
6086
#if defined(CONFIG_CURSES)
6087
    case DT_CURSES:
6088
        curses_display_init(ds, full_screen);
6089
        break;
6090
#endif
6091
#if defined(CONFIG_SDL)
6092
    case DT_SDL:
6093
        sdl_display_init(ds, full_screen, no_frame);
6094
        break;
6095
#elif defined(CONFIG_COCOA)
6096
    case DT_SDL:
6097
        cocoa_display_init(ds, full_screen);
6098
        break;
6099
#endif
6100
    case DT_VNC:
6101
        vnc_display_init(ds);
6102
        if (vnc_display_open(ds, vnc_display) < 0)
6103
            exit(1);
6104

    
6105
        if (show_vnc_port) {
6106
            printf("VNC server running on `%s'\n", vnc_display_local_addr(ds));
6107
        }
6108
        break;
6109
    default:
6110
        break;
6111
    }
6112
    dpy_resize(ds);
6113

    
6114
    dcl = ds->listeners;
6115
    while (dcl != NULL) {
6116
        if (dcl->dpy_refresh != NULL) {
6117
            ds->gui_timer = qemu_new_timer(rt_clock, gui_update, ds);
6118
            qemu_mod_timer(ds->gui_timer, qemu_get_clock(rt_clock));
6119
        }
6120
        dcl = dcl->next;
6121
    }
6122

    
6123
    if (display_type == DT_NOGRAPHIC || display_type == DT_VNC) {
6124
        nographic_timer = qemu_new_timer(rt_clock, nographic_update, NULL);
6125
        qemu_mod_timer(nographic_timer, qemu_get_clock(rt_clock));
6126
    }
6127

    
6128
    text_consoles_set_display(display_state);
6129
    qemu_chr_initial_reset();
6130

    
6131
    if (monitor_device && monitor_hd)
6132
        monitor_init(monitor_hd, MONITOR_USE_READLINE | MONITOR_IS_DEFAULT);
6133

    
6134
    for(i = 0; i < MAX_SERIAL_PORTS; i++) {
6135
        const char *devname = serial_devices[i];
6136
        if (devname && strcmp(devname, "none")) {
6137
            if (strstart(devname, "vc", 0))
6138
                qemu_chr_printf(serial_hds[i], "serial%d console\r\n", i);
6139
        }
6140
    }
6141

    
6142
    for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
6143
        const char *devname = parallel_devices[i];
6144
        if (devname && strcmp(devname, "none")) {
6145
            if (strstart(devname, "vc", 0))
6146
                qemu_chr_printf(parallel_hds[i], "parallel%d console\r\n", i);
6147
        }
6148
    }
6149

    
6150
    for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
6151
        const char *devname = virtio_consoles[i];
6152
        if (virtcon_hds[i] && devname) {
6153
            if (strstart(devname, "vc", 0))
6154
                qemu_chr_printf(virtcon_hds[i], "virtio console%d\r\n", i);
6155
        }
6156
    }
6157

    
6158
    if (gdbstub_dev && gdbserver_start(gdbstub_dev) < 0) {
6159
        fprintf(stderr, "qemu: could not open gdbserver on device '%s'\n",
6160
                gdbstub_dev);
6161
        exit(1);
6162
    }
6163

    
6164
    if (loadvm)
6165
        do_loadvm(cur_mon, loadvm);
6166

    
6167
    if (incoming) {
6168
        autostart = 0; /* fixme how to deal with -daemonize */
6169
        qemu_start_incoming_migration(incoming);
6170
    }
6171

    
6172
    if (autostart)
6173
        vm_start();
6174

    
6175
#ifndef _WIN32
6176
    if (daemonize) {
6177
        uint8_t status = 0;
6178
        ssize_t len;
6179

    
6180
    again1:
6181
        len = write(fds[1], &status, 1);
6182
        if (len == -1 && (errno == EINTR))
6183
            goto again1;
6184

    
6185
        if (len != 1)
6186
            exit(1);
6187

    
6188
        chdir("/");
6189
        TFR(fd = open("/dev/null", O_RDWR));
6190
        if (fd == -1)
6191
            exit(1);
6192
    }
6193

    
6194
    if (run_as) {
6195
        pwd = getpwnam(run_as);
6196
        if (!pwd) {
6197
            fprintf(stderr, "User \"%s\" doesn't exist\n", run_as);
6198
            exit(1);
6199
        }
6200
    }
6201

    
6202
    if (chroot_dir) {
6203
        if (chroot(chroot_dir) < 0) {
6204
            fprintf(stderr, "chroot failed\n");
6205
            exit(1);
6206
        }
6207
        chdir("/");
6208
    }
6209

    
6210
    if (run_as) {
6211
        if (setgid(pwd->pw_gid) < 0) {
6212
            fprintf(stderr, "Failed to setgid(%d)\n", pwd->pw_gid);
6213
            exit(1);
6214
        }
6215
        if (setuid(pwd->pw_uid) < 0) {
6216
            fprintf(stderr, "Failed to setuid(%d)\n", pwd->pw_uid);
6217
            exit(1);
6218
        }
6219
        if (setuid(0) != -1) {
6220
            fprintf(stderr, "Dropping privileges failed\n");
6221
            exit(1);
6222
        }
6223
    }
6224

    
6225
    if (daemonize) {
6226
        dup2(fd, 0);
6227
        dup2(fd, 1);
6228
        dup2(fd, 2);
6229

    
6230
        close(fd);
6231
    }
6232
#endif
6233

    
6234
    main_loop();
6235
    quit_timers();
6236
    net_cleanup();
6237

    
6238
    return 0;
6239
}