Statistics
| Branch: | Revision:

root / vl.c @ b53d44e5

History | View | Annotate | Download (152.2 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 CONFIG_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 CONFIG_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
#include <sys/prctl.h>
72

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

    
78
#include <linux/ppdev.h>
79
#include <linux/parport.h>
80
#endif
81
#ifdef __sun__
82
#include <sys/stat.h>
83
#include <sys/ethernet.h>
84
#include <sys/sockio.h>
85
#include <netinet/arp.h>
86
#include <netinet/in.h>
87
#include <netinet/in_systm.h>
88
#include <netinet/ip.h>
89
#include <netinet/ip_icmp.h> // must come after ip.h
90
#include <netinet/udp.h>
91
#include <netinet/tcp.h>
92
#include <net/if.h>
93
#include <syslog.h>
94
#include <stropts.h>
95
/* See MySQL bug #7156 (http://bugs.mysql.com/bug.php?id=7156) for
96
   discussion about Solaris header problems */
97
extern int madvise(caddr_t, size_t, int);
98
#endif
99
#endif
100
#endif
101

    
102
#if defined(__OpenBSD__)
103
#include <util.h>
104
#endif
105

    
106
#if defined(CONFIG_VDE)
107
#include <libvdeplug.h>
108
#endif
109

    
110
#ifdef _WIN32
111
#include <windows.h>
112
#include <mmsystem.h>
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 "hw/qdev.h"
146
#include "bt-host.h"
147
#include "net.h"
148
#include "monitor.h"
149
#include "console.h"
150
#include "sysemu.h"
151
#include "gdbstub.h"
152
#include "qemu-timer.h"
153
#include "qemu-char.h"
154
#include "cache-utils.h"
155
#include "block.h"
156
#include "dma.h"
157
#include "audio/audio.h"
158
#include "migration.h"
159
#include "kvm.h"
160
#include "balloon.h"
161
#include "qemu-option.h"
162
#include "qemu-config.h"
163

    
164
#include "disas.h"
165

    
166
#include "exec-all.h"
167

    
168
#include "qemu_socket.h"
169

    
170
#include "slirp/libslirp.h"
171

    
172
#include "qemu-queue.h"
173

    
174
//#define DEBUG_NET
175
//#define DEBUG_SLIRP
176

    
177
#define DEFAULT_RAM_SIZE 128
178

    
179
/* Maximum number of monitor devices */
180
#define MAX_MONITOR_DEVICES 10
181

    
182
static const char *data_dir;
183
const char *bios_name = NULL;
184
/* Note: drives_table[MAX_DRIVES] is a dummy block driver if none available
185
   to store the VM snapshots */
186
struct drivelist drives = QTAILQ_HEAD_INITIALIZER(drives);
187
struct driveoptlist driveopts = QTAILQ_HEAD_INITIALIZER(driveopts);
188
enum vga_retrace_method vga_retrace_method = VGA_RETRACE_DUMB;
189
static DisplayState *display_state;
190
DisplayType display_type = DT_DEFAULT;
191
const char* keyboard_layout = NULL;
192
ram_addr_t ram_size;
193
int nb_nics;
194
NICInfo nd_table[MAX_NICS];
195
int vm_running;
196
int autostart;
197
static int rtc_utc = 1;
198
static int rtc_date_offset = -1; /* -1 means no change */
199
int vga_interface_type = VGA_CIRRUS;
200
#ifdef TARGET_SPARC
201
int graphic_width = 1024;
202
int graphic_height = 768;
203
int graphic_depth = 8;
204
#else
205
int graphic_width = 800;
206
int graphic_height = 600;
207
int graphic_depth = 15;
208
#endif
209
static int full_screen = 0;
210
#ifdef CONFIG_SDL
211
static int no_frame = 0;
212
#endif
213
int no_quit = 0;
214
CharDriverState *serial_hds[MAX_SERIAL_PORTS];
215
CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
216
CharDriverState *virtcon_hds[MAX_VIRTIO_CONSOLES];
217
#ifdef TARGET_I386
218
int win2k_install_hack = 0;
219
int rtc_td_hack = 0;
220
#endif
221
int usb_enabled = 0;
222
int singlestep = 0;
223
int smp_cpus = 1;
224
int max_cpus = 0;
225
int smp_cores = 1;
226
int smp_threads = 1;
227
const char *vnc_display;
228
int acpi_enabled = 1;
229
int no_hpet = 0;
230
int fd_bootchk = 1;
231
int no_reboot = 0;
232
int no_shutdown = 0;
233
int cursor_hide = 1;
234
int graphic_rotate = 0;
235
uint8_t irq0override = 1;
236
#ifndef _WIN32
237
int daemonize = 0;
238
#endif
239
const char *watchdog;
240
const char *option_rom[MAX_OPTION_ROMS];
241
int nb_option_roms;
242
int semihosting_enabled = 0;
243
#ifdef TARGET_ARM
244
int old_param = 0;
245
#endif
246
const char *qemu_name;
247
int alt_grab = 0;
248
#if defined(TARGET_SPARC) || defined(TARGET_PPC)
249
unsigned int nb_prom_envs = 0;
250
const char *prom_envs[MAX_PROM_ENVS];
251
#endif
252
int boot_menu;
253

    
254
int nb_numa_nodes;
255
uint64_t node_mem[MAX_NODES];
256
uint64_t node_cpumask[MAX_NODES];
257

    
258
static CPUState *cur_cpu;
259
static CPUState *next_cpu;
260
static int timer_alarm_pending = 1;
261
/* Conversion factor from emulated instructions to virtual clock ticks.  */
262
static int icount_time_shift;
263
/* Arbitrarily pick 1MIPS as the minimum allowable speed.  */
264
#define MAX_ICOUNT_SHIFT 10
265
/* Compensate for varying guest execution speed.  */
266
static int64_t qemu_icount_bias;
267
static QEMUTimer *icount_rt_timer;
268
static QEMUTimer *icount_vm_timer;
269
static QEMUTimer *nographic_timer;
270

    
271
uint8_t qemu_uuid[16];
272

    
273
static QEMUBootSetHandler *boot_set_handler;
274
static void *boot_set_opaque;
275

    
276
/***********************************************************/
277
/* x86 ISA bus support */
278

    
279
target_phys_addr_t isa_mem_base = 0;
280
PicState2 *isa_pic;
281

    
282
/***********************************************************/
283
void hw_error(const char *fmt, ...)
284
{
285
    va_list ap;
286
    CPUState *env;
287

    
288
    va_start(ap, fmt);
289
    fprintf(stderr, "qemu: hardware error: ");
290
    vfprintf(stderr, fmt, ap);
291
    fprintf(stderr, "\n");
292
    for(env = first_cpu; env != NULL; env = env->next_cpu) {
293
        fprintf(stderr, "CPU #%d:\n", env->cpu_index);
294
#ifdef TARGET_I386
295
        cpu_dump_state(env, stderr, fprintf, X86_DUMP_FPU);
296
#else
297
        cpu_dump_state(env, stderr, fprintf, 0);
298
#endif
299
    }
300
    va_end(ap);
301
    abort();
302
}
303

    
304
static void set_proc_name(const char *s)
305
{
306
#if defined(__linux__) && defined(PR_SET_NAME)
307
    char name[16];
308
    if (!s)
309
        return;
310
    name[sizeof(name) - 1] = 0;
311
    strncpy(name, s, sizeof(name));
312
    /* Could rewrite argv[0] too, but that's a bit more complicated.
313
       This simple way is enough for `top'. */
314
    prctl(PR_SET_NAME, name);
315
#endif            
316
}
317
 
318
/***************/
319
/* ballooning */
320

    
321
static QEMUBalloonEvent *qemu_balloon_event;
322
void *qemu_balloon_event_opaque;
323

    
324
void qemu_add_balloon_handler(QEMUBalloonEvent *func, void *opaque)
325
{
326
    qemu_balloon_event = func;
327
    qemu_balloon_event_opaque = opaque;
328
}
329

    
330
void qemu_balloon(ram_addr_t target)
331
{
332
    if (qemu_balloon_event)
333
        qemu_balloon_event(qemu_balloon_event_opaque, target);
334
}
335

    
336
ram_addr_t qemu_balloon_status(void)
337
{
338
    if (qemu_balloon_event)
339
        return qemu_balloon_event(qemu_balloon_event_opaque, 0);
340
    return 0;
341
}
342

    
343
/***********************************************************/
344
/* keyboard/mouse */
345

    
346
static QEMUPutKBDEvent *qemu_put_kbd_event;
347
static void *qemu_put_kbd_event_opaque;
348
static QEMUPutMouseEntry *qemu_put_mouse_event_head;
349
static QEMUPutMouseEntry *qemu_put_mouse_event_current;
350

    
351
void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque)
352
{
353
    qemu_put_kbd_event_opaque = opaque;
354
    qemu_put_kbd_event = func;
355
}
356

    
357
QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
358
                                                void *opaque, int absolute,
359
                                                const char *name)
360
{
361
    QEMUPutMouseEntry *s, *cursor;
362

    
363
    s = qemu_mallocz(sizeof(QEMUPutMouseEntry));
364

    
365
    s->qemu_put_mouse_event = func;
366
    s->qemu_put_mouse_event_opaque = opaque;
367
    s->qemu_put_mouse_event_absolute = absolute;
368
    s->qemu_put_mouse_event_name = qemu_strdup(name);
369
    s->next = NULL;
370

    
371
    if (!qemu_put_mouse_event_head) {
372
        qemu_put_mouse_event_head = qemu_put_mouse_event_current = s;
373
        return s;
374
    }
375

    
376
    cursor = qemu_put_mouse_event_head;
377
    while (cursor->next != NULL)
378
        cursor = cursor->next;
379

    
380
    cursor->next = s;
381
    qemu_put_mouse_event_current = s;
382

    
383
    return s;
384
}
385

    
386
void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry)
387
{
388
    QEMUPutMouseEntry *prev = NULL, *cursor;
389

    
390
    if (!qemu_put_mouse_event_head || entry == NULL)
391
        return;
392

    
393
    cursor = qemu_put_mouse_event_head;
394
    while (cursor != NULL && cursor != entry) {
395
        prev = cursor;
396
        cursor = cursor->next;
397
    }
398

    
399
    if (cursor == NULL) // does not exist or list empty
400
        return;
401
    else if (prev == NULL) { // entry is head
402
        qemu_put_mouse_event_head = cursor->next;
403
        if (qemu_put_mouse_event_current == entry)
404
            qemu_put_mouse_event_current = cursor->next;
405
        qemu_free(entry->qemu_put_mouse_event_name);
406
        qemu_free(entry);
407
        return;
408
    }
409

    
410
    prev->next = entry->next;
411

    
412
    if (qemu_put_mouse_event_current == entry)
413
        qemu_put_mouse_event_current = prev;
414

    
415
    qemu_free(entry->qemu_put_mouse_event_name);
416
    qemu_free(entry);
417
}
418

    
419
void kbd_put_keycode(int keycode)
420
{
421
    if (qemu_put_kbd_event) {
422
        qemu_put_kbd_event(qemu_put_kbd_event_opaque, keycode);
423
    }
424
}
425

    
426
void kbd_mouse_event(int dx, int dy, int dz, int buttons_state)
427
{
428
    QEMUPutMouseEvent *mouse_event;
429
    void *mouse_event_opaque;
430
    int width;
431

    
432
    if (!qemu_put_mouse_event_current) {
433
        return;
434
    }
435

    
436
    mouse_event =
437
        qemu_put_mouse_event_current->qemu_put_mouse_event;
438
    mouse_event_opaque =
439
        qemu_put_mouse_event_current->qemu_put_mouse_event_opaque;
440

    
441
    if (mouse_event) {
442
        if (graphic_rotate) {
443
            if (qemu_put_mouse_event_current->qemu_put_mouse_event_absolute)
444
                width = 0x7fff;
445
            else
446
                width = graphic_width - 1;
447
            mouse_event(mouse_event_opaque,
448
                                 width - dy, dx, dz, buttons_state);
449
        } else
450
            mouse_event(mouse_event_opaque,
451
                                 dx, dy, dz, buttons_state);
452
    }
453
}
454

    
455
int kbd_mouse_is_absolute(void)
456
{
457
    if (!qemu_put_mouse_event_current)
458
        return 0;
459

    
460
    return qemu_put_mouse_event_current->qemu_put_mouse_event_absolute;
461
}
462

    
463
void do_info_mice(Monitor *mon)
464
{
465
    QEMUPutMouseEntry *cursor;
466
    int index = 0;
467

    
468
    if (!qemu_put_mouse_event_head) {
469
        monitor_printf(mon, "No mouse devices connected\n");
470
        return;
471
    }
472

    
473
    monitor_printf(mon, "Mouse devices available:\n");
474
    cursor = qemu_put_mouse_event_head;
475
    while (cursor != NULL) {
476
        monitor_printf(mon, "%c Mouse #%d: %s\n",
477
                       (cursor == qemu_put_mouse_event_current ? '*' : ' '),
478
                       index, cursor->qemu_put_mouse_event_name);
479
        index++;
480
        cursor = cursor->next;
481
    }
482
}
483

    
484
void do_mouse_set(Monitor *mon, const QDict *qdict)
485
{
486
    QEMUPutMouseEntry *cursor;
487
    int i = 0;
488
    int index = qdict_get_int(qdict, "index");
489

    
490
    if (!qemu_put_mouse_event_head) {
491
        monitor_printf(mon, "No mouse devices connected\n");
492
        return;
493
    }
494

    
495
    cursor = qemu_put_mouse_event_head;
496
    while (cursor != NULL && index != i) {
497
        i++;
498
        cursor = cursor->next;
499
    }
500

    
501
    if (cursor != NULL)
502
        qemu_put_mouse_event_current = cursor;
503
    else
504
        monitor_printf(mon, "Mouse at given index not found\n");
505
}
506

    
507
/* compute with 96 bit intermediate result: (a*b)/c */
508
uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c)
509
{
510
    union {
511
        uint64_t ll;
512
        struct {
513
#ifdef HOST_WORDS_BIGENDIAN
514
            uint32_t high, low;
515
#else
516
            uint32_t low, high;
517
#endif
518
        } l;
519
    } u, res;
520
    uint64_t rl, rh;
521

    
522
    u.ll = a;
523
    rl = (uint64_t)u.l.low * (uint64_t)b;
524
    rh = (uint64_t)u.l.high * (uint64_t)b;
525
    rh += (rl >> 32);
526
    res.l.high = rh / c;
527
    res.l.low = (((rh % c) << 32) + (rl & 0xffffffff)) / c;
528
    return res.ll;
529
}
530

    
531
/***********************************************************/
532
/* real time host monotonic timer */
533

    
534
#ifdef WIN32
535

    
536
static int64_t clock_freq;
537

    
538
static void init_get_clock(void)
539
{
540
    LARGE_INTEGER freq;
541
    int ret;
542
    ret = QueryPerformanceFrequency(&freq);
543
    if (ret == 0) {
544
        fprintf(stderr, "Could not calibrate ticks\n");
545
        exit(1);
546
    }
547
    clock_freq = freq.QuadPart;
548
}
549

    
550
static int64_t get_clock(void)
551
{
552
    LARGE_INTEGER ti;
553
    QueryPerformanceCounter(&ti);
554
    return muldiv64(ti.QuadPart, get_ticks_per_sec(), clock_freq);
555
}
556

    
557
#else
558

    
559
static int use_rt_clock;
560

    
561
static void init_get_clock(void)
562
{
563
    use_rt_clock = 0;
564
#if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD_version >= 500000) \
565
    || defined(__DragonFly__)
566
    {
567
        struct timespec ts;
568
        if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0) {
569
            use_rt_clock = 1;
570
        }
571
    }
572
#endif
573
}
574

    
575
static int64_t get_clock(void)
576
{
577
#if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD_version >= 500000) \
578
        || defined(__DragonFly__)
579
    if (use_rt_clock) {
580
        struct timespec ts;
581
        clock_gettime(CLOCK_MONOTONIC, &ts);
582
        return ts.tv_sec * 1000000000LL + ts.tv_nsec;
583
    } else
584
#endif
585
    {
586
        /* XXX: using gettimeofday leads to problems if the date
587
           changes, so it should be avoided. */
588
        struct timeval tv;
589
        gettimeofday(&tv, NULL);
590
        return tv.tv_sec * 1000000000LL + (tv.tv_usec * 1000);
591
    }
592
}
593
#endif
594

    
595
/* Return the virtual CPU time, based on the instruction counter.  */
596
static int64_t cpu_get_icount(void)
597
{
598
    int64_t icount;
599
    CPUState *env = cpu_single_env;;
600
    icount = qemu_icount;
601
    if (env) {
602
        if (!can_do_io(env))
603
            fprintf(stderr, "Bad clock read\n");
604
        icount -= (env->icount_decr.u16.low + env->icount_extra);
605
    }
606
    return qemu_icount_bias + (icount << icount_time_shift);
607
}
608

    
609
/***********************************************************/
610
/* guest cycle counter */
611

    
612
typedef struct TimersState {
613
    int64_t cpu_ticks_prev;
614
    int64_t cpu_ticks_offset;
615
    int64_t cpu_clock_offset;
616
    int32_t cpu_ticks_enabled;
617
    int64_t dummy;
618
} TimersState;
619

    
620
TimersState timers_state;
621

    
622
/* return the host CPU cycle counter and handle stop/restart */
623
int64_t cpu_get_ticks(void)
624
{
625
    if (use_icount) {
626
        return cpu_get_icount();
627
    }
628
    if (!timers_state.cpu_ticks_enabled) {
629
        return timers_state.cpu_ticks_offset;
630
    } else {
631
        int64_t ticks;
632
        ticks = cpu_get_real_ticks();
633
        if (timers_state.cpu_ticks_prev > ticks) {
634
            /* Note: non increasing ticks may happen if the host uses
635
               software suspend */
636
            timers_state.cpu_ticks_offset += timers_state.cpu_ticks_prev - ticks;
637
        }
638
        timers_state.cpu_ticks_prev = ticks;
639
        return ticks + timers_state.cpu_ticks_offset;
640
    }
641
}
642

    
643
/* return the host CPU monotonic timer and handle stop/restart */
644
static int64_t cpu_get_clock(void)
645
{
646
    int64_t ti;
647
    if (!timers_state.cpu_ticks_enabled) {
648
        return timers_state.cpu_clock_offset;
649
    } else {
650
        ti = get_clock();
651
        return ti + timers_state.cpu_clock_offset;
652
    }
653
}
654

    
655
/* enable cpu_get_ticks() */
656
void cpu_enable_ticks(void)
657
{
658
    if (!timers_state.cpu_ticks_enabled) {
659
        timers_state.cpu_ticks_offset -= cpu_get_real_ticks();
660
        timers_state.cpu_clock_offset -= get_clock();
661
        timers_state.cpu_ticks_enabled = 1;
662
    }
663
}
664

    
665
/* disable cpu_get_ticks() : the clock is stopped. You must not call
666
   cpu_get_ticks() after that.  */
667
void cpu_disable_ticks(void)
668
{
669
    if (timers_state.cpu_ticks_enabled) {
670
        timers_state.cpu_ticks_offset = cpu_get_ticks();
671
        timers_state.cpu_clock_offset = cpu_get_clock();
672
        timers_state.cpu_ticks_enabled = 0;
673
    }
674
}
675

    
676
/***********************************************************/
677
/* timers */
678

    
679
#define QEMU_TIMER_REALTIME 0
680
#define QEMU_TIMER_VIRTUAL  1
681

    
682
struct QEMUClock {
683
    int type;
684
    /* XXX: add frequency */
685
};
686

    
687
struct QEMUTimer {
688
    QEMUClock *clock;
689
    int64_t expire_time;
690
    QEMUTimerCB *cb;
691
    void *opaque;
692
    struct QEMUTimer *next;
693
};
694

    
695
struct qemu_alarm_timer {
696
    char const *name;
697
    unsigned int flags;
698

    
699
    int (*start)(struct qemu_alarm_timer *t);
700
    void (*stop)(struct qemu_alarm_timer *t);
701
    void (*rearm)(struct qemu_alarm_timer *t);
702
    void *priv;
703
};
704

    
705
#define ALARM_FLAG_DYNTICKS  0x1
706
#define ALARM_FLAG_EXPIRED   0x2
707

    
708
static inline int alarm_has_dynticks(struct qemu_alarm_timer *t)
709
{
710
    return t && (t->flags & ALARM_FLAG_DYNTICKS);
711
}
712

    
713
static void qemu_rearm_alarm_timer(struct qemu_alarm_timer *t)
714
{
715
    if (!alarm_has_dynticks(t))
716
        return;
717

    
718
    t->rearm(t);
719
}
720

    
721
/* TODO: MIN_TIMER_REARM_US should be optimized */
722
#define MIN_TIMER_REARM_US 250
723

    
724
static struct qemu_alarm_timer *alarm_timer;
725

    
726
#ifdef _WIN32
727

    
728
struct qemu_alarm_win32 {
729
    MMRESULT timerId;
730
    unsigned int period;
731
} alarm_win32_data = {0, -1};
732

    
733
static int win32_start_timer(struct qemu_alarm_timer *t);
734
static void win32_stop_timer(struct qemu_alarm_timer *t);
735
static void win32_rearm_timer(struct qemu_alarm_timer *t);
736

    
737
#else
738

    
739
static int unix_start_timer(struct qemu_alarm_timer *t);
740
static void unix_stop_timer(struct qemu_alarm_timer *t);
741

    
742
#ifdef __linux__
743

    
744
static int dynticks_start_timer(struct qemu_alarm_timer *t);
745
static void dynticks_stop_timer(struct qemu_alarm_timer *t);
746
static void dynticks_rearm_timer(struct qemu_alarm_timer *t);
747

    
748
static int hpet_start_timer(struct qemu_alarm_timer *t);
749
static void hpet_stop_timer(struct qemu_alarm_timer *t);
750

    
751
static int rtc_start_timer(struct qemu_alarm_timer *t);
752
static void rtc_stop_timer(struct qemu_alarm_timer *t);
753

    
754
#endif /* __linux__ */
755

    
756
#endif /* _WIN32 */
757

    
758
/* Correlation between real and virtual time is always going to be
759
   fairly approximate, so ignore small variation.
760
   When the guest is idle real and virtual time will be aligned in
761
   the IO wait loop.  */
762
#define ICOUNT_WOBBLE (get_ticks_per_sec() / 10)
763

    
764
static void icount_adjust(void)
765
{
766
    int64_t cur_time;
767
    int64_t cur_icount;
768
    int64_t delta;
769
    static int64_t last_delta;
770
    /* If the VM is not running, then do nothing.  */
771
    if (!vm_running)
772
        return;
773

    
774
    cur_time = cpu_get_clock();
775
    cur_icount = qemu_get_clock(vm_clock);
776
    delta = cur_icount - cur_time;
777
    /* FIXME: This is a very crude algorithm, somewhat prone to oscillation.  */
778
    if (delta > 0
779
        && last_delta + ICOUNT_WOBBLE < delta * 2
780
        && icount_time_shift > 0) {
781
        /* The guest is getting too far ahead.  Slow time down.  */
782
        icount_time_shift--;
783
    }
784
    if (delta < 0
785
        && last_delta - ICOUNT_WOBBLE > delta * 2
786
        && icount_time_shift < MAX_ICOUNT_SHIFT) {
787
        /* The guest is getting too far behind.  Speed time up.  */
788
        icount_time_shift++;
789
    }
790
    last_delta = delta;
791
    qemu_icount_bias = cur_icount - (qemu_icount << icount_time_shift);
792
}
793

    
794
static void icount_adjust_rt(void * opaque)
795
{
796
    qemu_mod_timer(icount_rt_timer,
797
                   qemu_get_clock(rt_clock) + 1000);
798
    icount_adjust();
799
}
800

    
801
static void icount_adjust_vm(void * opaque)
802
{
803
    qemu_mod_timer(icount_vm_timer,
804
                   qemu_get_clock(vm_clock) + get_ticks_per_sec() / 10);
805
    icount_adjust();
806
}
807

    
808
static void init_icount_adjust(void)
809
{
810
    /* Have both realtime and virtual time triggers for speed adjustment.
811
       The realtime trigger catches emulated time passing too slowly,
812
       the virtual time trigger catches emulated time passing too fast.
813
       Realtime triggers occur even when idle, so use them less frequently
814
       than VM triggers.  */
815
    icount_rt_timer = qemu_new_timer(rt_clock, icount_adjust_rt, NULL);
816
    qemu_mod_timer(icount_rt_timer,
817
                   qemu_get_clock(rt_clock) + 1000);
818
    icount_vm_timer = qemu_new_timer(vm_clock, icount_adjust_vm, NULL);
819
    qemu_mod_timer(icount_vm_timer,
820
                   qemu_get_clock(vm_clock) + get_ticks_per_sec() / 10);
821
}
822

    
823
static struct qemu_alarm_timer alarm_timers[] = {
824
#ifndef _WIN32
825
#ifdef __linux__
826
    {"dynticks", ALARM_FLAG_DYNTICKS, dynticks_start_timer,
827
     dynticks_stop_timer, dynticks_rearm_timer, NULL},
828
    /* HPET - if available - is preferred */
829
    {"hpet", 0, hpet_start_timer, hpet_stop_timer, NULL, NULL},
830
    /* ...otherwise try RTC */
831
    {"rtc", 0, rtc_start_timer, rtc_stop_timer, NULL, NULL},
832
#endif
833
    {"unix", 0, unix_start_timer, unix_stop_timer, NULL, NULL},
834
#else
835
    {"dynticks", ALARM_FLAG_DYNTICKS, win32_start_timer,
836
     win32_stop_timer, win32_rearm_timer, &alarm_win32_data},
837
    {"win32", 0, win32_start_timer,
838
     win32_stop_timer, NULL, &alarm_win32_data},
839
#endif
840
    {NULL, }
841
};
842

    
843
static void show_available_alarms(void)
844
{
845
    int i;
846

    
847
    printf("Available alarm timers, in order of precedence:\n");
848
    for (i = 0; alarm_timers[i].name; i++)
849
        printf("%s\n", alarm_timers[i].name);
850
}
851

    
852
static void configure_alarms(char const *opt)
853
{
854
    int i;
855
    int cur = 0;
856
    int count = ARRAY_SIZE(alarm_timers) - 1;
857
    char *arg;
858
    char *name;
859
    struct qemu_alarm_timer tmp;
860

    
861
    if (!strcmp(opt, "?")) {
862
        show_available_alarms();
863
        exit(0);
864
    }
865

    
866
    arg = qemu_strdup(opt);
867

    
868
    /* Reorder the array */
869
    name = strtok(arg, ",");
870
    while (name) {
871
        for (i = 0; i < count && alarm_timers[i].name; i++) {
872
            if (!strcmp(alarm_timers[i].name, name))
873
                break;
874
        }
875

    
876
        if (i == count) {
877
            fprintf(stderr, "Unknown clock %s\n", name);
878
            goto next;
879
        }
880

    
881
        if (i < cur)
882
            /* Ignore */
883
            goto next;
884

    
885
        /* Swap */
886
        tmp = alarm_timers[i];
887
        alarm_timers[i] = alarm_timers[cur];
888
        alarm_timers[cur] = tmp;
889

    
890
        cur++;
891
next:
892
        name = strtok(NULL, ",");
893
    }
894

    
895
    qemu_free(arg);
896

    
897
    if (cur) {
898
        /* Disable remaining timers */
899
        for (i = cur; i < count; i++)
900
            alarm_timers[i].name = NULL;
901
    } else {
902
        show_available_alarms();
903
        exit(1);
904
    }
905
}
906

    
907
QEMUClock *rt_clock;
908
QEMUClock *vm_clock;
909

    
910
static QEMUTimer *active_timers[2];
911

    
912
static QEMUClock *qemu_new_clock(int type)
913
{
914
    QEMUClock *clock;
915
    clock = qemu_mallocz(sizeof(QEMUClock));
916
    clock->type = type;
917
    return clock;
918
}
919

    
920
QEMUTimer *qemu_new_timer(QEMUClock *clock, QEMUTimerCB *cb, void *opaque)
921
{
922
    QEMUTimer *ts;
923

    
924
    ts = qemu_mallocz(sizeof(QEMUTimer));
925
    ts->clock = clock;
926
    ts->cb = cb;
927
    ts->opaque = opaque;
928
    return ts;
929
}
930

    
931
void qemu_free_timer(QEMUTimer *ts)
932
{
933
    qemu_free(ts);
934
}
935

    
936
/* stop a timer, but do not dealloc it */
937
void qemu_del_timer(QEMUTimer *ts)
938
{
939
    QEMUTimer **pt, *t;
940

    
941
    /* NOTE: this code must be signal safe because
942
       qemu_timer_expired() can be called from a signal. */
943
    pt = &active_timers[ts->clock->type];
944
    for(;;) {
945
        t = *pt;
946
        if (!t)
947
            break;
948
        if (t == ts) {
949
            *pt = t->next;
950
            break;
951
        }
952
        pt = &t->next;
953
    }
954
}
955

    
956
/* modify the current timer so that it will be fired when current_time
957
   >= expire_time. The corresponding callback will be called. */
958
void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time)
959
{
960
    QEMUTimer **pt, *t;
961

    
962
    qemu_del_timer(ts);
963

    
964
    /* add the timer in the sorted list */
965
    /* NOTE: this code must be signal safe because
966
       qemu_timer_expired() can be called from a signal. */
967
    pt = &active_timers[ts->clock->type];
968
    for(;;) {
969
        t = *pt;
970
        if (!t)
971
            break;
972
        if (t->expire_time > expire_time)
973
            break;
974
        pt = &t->next;
975
    }
976
    ts->expire_time = expire_time;
977
    ts->next = *pt;
978
    *pt = ts;
979

    
980
    /* Rearm if necessary  */
981
    if (pt == &active_timers[ts->clock->type]) {
982
        if ((alarm_timer->flags & ALARM_FLAG_EXPIRED) == 0) {
983
            qemu_rearm_alarm_timer(alarm_timer);
984
        }
985
        /* Interrupt execution to force deadline recalculation.  */
986
        if (use_icount)
987
            qemu_notify_event();
988
    }
989
}
990

    
991
int qemu_timer_pending(QEMUTimer *ts)
992
{
993
    QEMUTimer *t;
994
    for(t = active_timers[ts->clock->type]; t != NULL; t = t->next) {
995
        if (t == ts)
996
            return 1;
997
    }
998
    return 0;
999
}
1000

    
1001
int qemu_timer_expired(QEMUTimer *timer_head, int64_t current_time)
1002
{
1003
    if (!timer_head)
1004
        return 0;
1005
    return (timer_head->expire_time <= current_time);
1006
}
1007

    
1008
static void qemu_run_timers(QEMUTimer **ptimer_head, int64_t current_time)
1009
{
1010
    QEMUTimer *ts;
1011

    
1012
    for(;;) {
1013
        ts = *ptimer_head;
1014
        if (!ts || ts->expire_time > current_time)
1015
            break;
1016
        /* remove timer from the list before calling the callback */
1017
        *ptimer_head = ts->next;
1018
        ts->next = NULL;
1019

    
1020
        /* run the callback (the timer list can be modified) */
1021
        ts->cb(ts->opaque);
1022
    }
1023
}
1024

    
1025
int64_t qemu_get_clock(QEMUClock *clock)
1026
{
1027
    switch(clock->type) {
1028
    case QEMU_TIMER_REALTIME:
1029
        return get_clock() / 1000000;
1030
    default:
1031
    case QEMU_TIMER_VIRTUAL:
1032
        if (use_icount) {
1033
            return cpu_get_icount();
1034
        } else {
1035
            return cpu_get_clock();
1036
        }
1037
    }
1038
}
1039

    
1040
static void init_timers(void)
1041
{
1042
    init_get_clock();
1043
    rt_clock = qemu_new_clock(QEMU_TIMER_REALTIME);
1044
    vm_clock = qemu_new_clock(QEMU_TIMER_VIRTUAL);
1045
}
1046

    
1047
/* save a timer */
1048
void qemu_put_timer(QEMUFile *f, QEMUTimer *ts)
1049
{
1050
    uint64_t expire_time;
1051

    
1052
    if (qemu_timer_pending(ts)) {
1053
        expire_time = ts->expire_time;
1054
    } else {
1055
        expire_time = -1;
1056
    }
1057
    qemu_put_be64(f, expire_time);
1058
}
1059

    
1060
void qemu_get_timer(QEMUFile *f, QEMUTimer *ts)
1061
{
1062
    uint64_t expire_time;
1063

    
1064
    expire_time = qemu_get_be64(f);
1065
    if (expire_time != -1) {
1066
        qemu_mod_timer(ts, expire_time);
1067
    } else {
1068
        qemu_del_timer(ts);
1069
    }
1070
}
1071

    
1072
static const VMStateDescription vmstate_timers = {
1073
    .name = "timer",
1074
    .version_id = 2,
1075
    .minimum_version_id = 1,
1076
    .minimum_version_id_old = 1,
1077
    .fields      = (VMStateField []) {
1078
        VMSTATE_INT64(cpu_ticks_offset, TimersState),
1079
        VMSTATE_INT64(dummy, TimersState),
1080
        VMSTATE_INT64_V(cpu_clock_offset, TimersState, 2),
1081
        VMSTATE_END_OF_LIST()
1082
    }
1083
};
1084

    
1085
static void qemu_event_increment(void);
1086

    
1087
#ifdef _WIN32
1088
static void CALLBACK host_alarm_handler(UINT uTimerID, UINT uMsg,
1089
                                        DWORD_PTR dwUser, DWORD_PTR dw1,
1090
                                        DWORD_PTR dw2)
1091
#else
1092
static void host_alarm_handler(int host_signum)
1093
#endif
1094
{
1095
#if 0
1096
#define DISP_FREQ 1000
1097
    {
1098
        static int64_t delta_min = INT64_MAX;
1099
        static int64_t delta_max, delta_cum, last_clock, delta, ti;
1100
        static int count;
1101
        ti = qemu_get_clock(vm_clock);
1102
        if (last_clock != 0) {
1103
            delta = ti - last_clock;
1104
            if (delta < delta_min)
1105
                delta_min = delta;
1106
            if (delta > delta_max)
1107
                delta_max = delta;
1108
            delta_cum += delta;
1109
            if (++count == DISP_FREQ) {
1110
                printf("timer: min=%" PRId64 " us max=%" PRId64 " us avg=%" PRId64 " us avg_freq=%0.3f Hz\n",
1111
                       muldiv64(delta_min, 1000000, get_ticks_per_sec()),
1112
                       muldiv64(delta_max, 1000000, get_ticks_per_sec()),
1113
                       muldiv64(delta_cum, 1000000 / DISP_FREQ, get_ticks_per_sec()),
1114
                       (double)get_ticks_per_sec() / ((double)delta_cum / DISP_FREQ));
1115
                count = 0;
1116
                delta_min = INT64_MAX;
1117
                delta_max = 0;
1118
                delta_cum = 0;
1119
            }
1120
        }
1121
        last_clock = ti;
1122
    }
1123
#endif
1124
    if (alarm_has_dynticks(alarm_timer) ||
1125
        (!use_icount &&
1126
            qemu_timer_expired(active_timers[QEMU_TIMER_VIRTUAL],
1127
                               qemu_get_clock(vm_clock))) ||
1128
        qemu_timer_expired(active_timers[QEMU_TIMER_REALTIME],
1129
                           qemu_get_clock(rt_clock))) {
1130
        qemu_event_increment();
1131
        if (alarm_timer) alarm_timer->flags |= ALARM_FLAG_EXPIRED;
1132

    
1133
#ifndef CONFIG_IOTHREAD
1134
        if (next_cpu) {
1135
            /* stop the currently executing cpu because a timer occured */
1136
            cpu_exit(next_cpu);
1137
        }
1138
#endif
1139
        timer_alarm_pending = 1;
1140
        qemu_notify_event();
1141
    }
1142
}
1143

    
1144
static int64_t qemu_next_deadline(void)
1145
{
1146
    int64_t delta;
1147

    
1148
    if (active_timers[QEMU_TIMER_VIRTUAL]) {
1149
        delta = active_timers[QEMU_TIMER_VIRTUAL]->expire_time -
1150
                     qemu_get_clock(vm_clock);
1151
    } else {
1152
        /* To avoid problems with overflow limit this to 2^32.  */
1153
        delta = INT32_MAX;
1154
    }
1155

    
1156
    if (delta < 0)
1157
        delta = 0;
1158

    
1159
    return delta;
1160
}
1161

    
1162
#if defined(__linux__) || defined(_WIN32)
1163
static uint64_t qemu_next_deadline_dyntick(void)
1164
{
1165
    int64_t delta;
1166
    int64_t rtdelta;
1167

    
1168
    if (use_icount)
1169
        delta = INT32_MAX;
1170
    else
1171
        delta = (qemu_next_deadline() + 999) / 1000;
1172

    
1173
    if (active_timers[QEMU_TIMER_REALTIME]) {
1174
        rtdelta = (active_timers[QEMU_TIMER_REALTIME]->expire_time -
1175
                 qemu_get_clock(rt_clock))*1000;
1176
        if (rtdelta < delta)
1177
            delta = rtdelta;
1178
    }
1179

    
1180
    if (delta < MIN_TIMER_REARM_US)
1181
        delta = MIN_TIMER_REARM_US;
1182

    
1183
    return delta;
1184
}
1185
#endif
1186

    
1187
#ifndef _WIN32
1188

    
1189
/* Sets a specific flag */
1190
static int fcntl_setfl(int fd, int flag)
1191
{
1192
    int flags;
1193

    
1194
    flags = fcntl(fd, F_GETFL);
1195
    if (flags == -1)
1196
        return -errno;
1197

    
1198
    if (fcntl(fd, F_SETFL, flags | flag) == -1)
1199
        return -errno;
1200

    
1201
    return 0;
1202
}
1203

    
1204
#if defined(__linux__)
1205

    
1206
#define RTC_FREQ 1024
1207

    
1208
static void enable_sigio_timer(int fd)
1209
{
1210
    struct sigaction act;
1211

    
1212
    /* timer signal */
1213
    sigfillset(&act.sa_mask);
1214
    act.sa_flags = 0;
1215
    act.sa_handler = host_alarm_handler;
1216

    
1217
    sigaction(SIGIO, &act, NULL);
1218
    fcntl_setfl(fd, O_ASYNC);
1219
    fcntl(fd, F_SETOWN, getpid());
1220
}
1221

    
1222
static int hpet_start_timer(struct qemu_alarm_timer *t)
1223
{
1224
    struct hpet_info info;
1225
    int r, fd;
1226

    
1227
    fd = open("/dev/hpet", O_RDONLY);
1228
    if (fd < 0)
1229
        return -1;
1230

    
1231
    /* Set frequency */
1232
    r = ioctl(fd, HPET_IRQFREQ, RTC_FREQ);
1233
    if (r < 0) {
1234
        fprintf(stderr, "Could not configure '/dev/hpet' to have a 1024Hz timer. This is not a fatal\n"
1235
                "error, but for better emulation accuracy type:\n"
1236
                "'echo 1024 > /proc/sys/dev/hpet/max-user-freq' as root.\n");
1237
        goto fail;
1238
    }
1239

    
1240
    /* Check capabilities */
1241
    r = ioctl(fd, HPET_INFO, &info);
1242
    if (r < 0)
1243
        goto fail;
1244

    
1245
    /* Enable periodic mode */
1246
    r = ioctl(fd, HPET_EPI, 0);
1247
    if (info.hi_flags && (r < 0))
1248
        goto fail;
1249

    
1250
    /* Enable interrupt */
1251
    r = ioctl(fd, HPET_IE_ON, 0);
1252
    if (r < 0)
1253
        goto fail;
1254

    
1255
    enable_sigio_timer(fd);
1256
    t->priv = (void *)(long)fd;
1257

    
1258
    return 0;
1259
fail:
1260
    close(fd);
1261
    return -1;
1262
}
1263

    
1264
static void hpet_stop_timer(struct qemu_alarm_timer *t)
1265
{
1266
    int fd = (long)t->priv;
1267

    
1268
    close(fd);
1269
}
1270

    
1271
static int rtc_start_timer(struct qemu_alarm_timer *t)
1272
{
1273
    int rtc_fd;
1274
    unsigned long current_rtc_freq = 0;
1275

    
1276
    TFR(rtc_fd = open("/dev/rtc", O_RDONLY));
1277
    if (rtc_fd < 0)
1278
        return -1;
1279
    ioctl(rtc_fd, RTC_IRQP_READ, &current_rtc_freq);
1280
    if (current_rtc_freq != RTC_FREQ &&
1281
        ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
1282
        fprintf(stderr, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n"
1283
                "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n"
1284
                "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n");
1285
        goto fail;
1286
    }
1287
    if (ioctl(rtc_fd, RTC_PIE_ON, 0) < 0) {
1288
    fail:
1289
        close(rtc_fd);
1290
        return -1;
1291
    }
1292

    
1293
    enable_sigio_timer(rtc_fd);
1294

    
1295
    t->priv = (void *)(long)rtc_fd;
1296

    
1297
    return 0;
1298
}
1299

    
1300
static void rtc_stop_timer(struct qemu_alarm_timer *t)
1301
{
1302
    int rtc_fd = (long)t->priv;
1303

    
1304
    close(rtc_fd);
1305
}
1306

    
1307
static int dynticks_start_timer(struct qemu_alarm_timer *t)
1308
{
1309
    struct sigevent ev;
1310
    timer_t host_timer;
1311
    struct sigaction act;
1312

    
1313
    sigfillset(&act.sa_mask);
1314
    act.sa_flags = 0;
1315
    act.sa_handler = host_alarm_handler;
1316

    
1317
    sigaction(SIGALRM, &act, NULL);
1318

    
1319
    /* 
1320
     * Initialize ev struct to 0 to avoid valgrind complaining
1321
     * about uninitialized data in timer_create call
1322
     */
1323
    memset(&ev, 0, sizeof(ev));
1324
    ev.sigev_value.sival_int = 0;
1325
    ev.sigev_notify = SIGEV_SIGNAL;
1326
    ev.sigev_signo = SIGALRM;
1327

    
1328
    if (timer_create(CLOCK_REALTIME, &ev, &host_timer)) {
1329
        perror("timer_create");
1330

    
1331
        /* disable dynticks */
1332
        fprintf(stderr, "Dynamic Ticks disabled\n");
1333

    
1334
        return -1;
1335
    }
1336

    
1337
    t->priv = (void *)(long)host_timer;
1338

    
1339
    return 0;
1340
}
1341

    
1342
static void dynticks_stop_timer(struct qemu_alarm_timer *t)
1343
{
1344
    timer_t host_timer = (timer_t)(long)t->priv;
1345

    
1346
    timer_delete(host_timer);
1347
}
1348

    
1349
static void dynticks_rearm_timer(struct qemu_alarm_timer *t)
1350
{
1351
    timer_t host_timer = (timer_t)(long)t->priv;
1352
    struct itimerspec timeout;
1353
    int64_t nearest_delta_us = INT64_MAX;
1354
    int64_t current_us;
1355

    
1356
    if (!active_timers[QEMU_TIMER_REALTIME] &&
1357
                !active_timers[QEMU_TIMER_VIRTUAL])
1358
        return;
1359

    
1360
    nearest_delta_us = qemu_next_deadline_dyntick();
1361

    
1362
    /* check whether a timer is already running */
1363
    if (timer_gettime(host_timer, &timeout)) {
1364
        perror("gettime");
1365
        fprintf(stderr, "Internal timer error: aborting\n");
1366
        exit(1);
1367
    }
1368
    current_us = timeout.it_value.tv_sec * 1000000 + timeout.it_value.tv_nsec/1000;
1369
    if (current_us && current_us <= nearest_delta_us)
1370
        return;
1371

    
1372
    timeout.it_interval.tv_sec = 0;
1373
    timeout.it_interval.tv_nsec = 0; /* 0 for one-shot timer */
1374
    timeout.it_value.tv_sec =  nearest_delta_us / 1000000;
1375
    timeout.it_value.tv_nsec = (nearest_delta_us % 1000000) * 1000;
1376
    if (timer_settime(host_timer, 0 /* RELATIVE */, &timeout, NULL)) {
1377
        perror("settime");
1378
        fprintf(stderr, "Internal timer error: aborting\n");
1379
        exit(1);
1380
    }
1381
}
1382

    
1383
#endif /* defined(__linux__) */
1384

    
1385
static int unix_start_timer(struct qemu_alarm_timer *t)
1386
{
1387
    struct sigaction act;
1388
    struct itimerval itv;
1389
    int err;
1390

    
1391
    /* timer signal */
1392
    sigfillset(&act.sa_mask);
1393
    act.sa_flags = 0;
1394
    act.sa_handler = host_alarm_handler;
1395

    
1396
    sigaction(SIGALRM, &act, NULL);
1397

    
1398
    itv.it_interval.tv_sec = 0;
1399
    /* for i386 kernel 2.6 to get 1 ms */
1400
    itv.it_interval.tv_usec = 999;
1401
    itv.it_value.tv_sec = 0;
1402
    itv.it_value.tv_usec = 10 * 1000;
1403

    
1404
    err = setitimer(ITIMER_REAL, &itv, NULL);
1405
    if (err)
1406
        return -1;
1407

    
1408
    return 0;
1409
}
1410

    
1411
static void unix_stop_timer(struct qemu_alarm_timer *t)
1412
{
1413
    struct itimerval itv;
1414

    
1415
    memset(&itv, 0, sizeof(itv));
1416
    setitimer(ITIMER_REAL, &itv, NULL);
1417
}
1418

    
1419
#endif /* !defined(_WIN32) */
1420

    
1421

    
1422
#ifdef _WIN32
1423

    
1424
static int win32_start_timer(struct qemu_alarm_timer *t)
1425
{
1426
    TIMECAPS tc;
1427
    struct qemu_alarm_win32 *data = t->priv;
1428
    UINT flags;
1429

    
1430
    memset(&tc, 0, sizeof(tc));
1431
    timeGetDevCaps(&tc, sizeof(tc));
1432

    
1433
    if (data->period < tc.wPeriodMin)
1434
        data->period = tc.wPeriodMin;
1435

    
1436
    timeBeginPeriod(data->period);
1437

    
1438
    flags = TIME_CALLBACK_FUNCTION;
1439
    if (alarm_has_dynticks(t))
1440
        flags |= TIME_ONESHOT;
1441
    else
1442
        flags |= TIME_PERIODIC;
1443

    
1444
    data->timerId = timeSetEvent(1,         // interval (ms)
1445
                        data->period,       // resolution
1446
                        host_alarm_handler, // function
1447
                        (DWORD)t,           // parameter
1448
                        flags);
1449

    
1450
    if (!data->timerId) {
1451
        fprintf(stderr, "Failed to initialize win32 alarm timer: %ld\n",
1452
                GetLastError());
1453
        timeEndPeriod(data->period);
1454
        return -1;
1455
    }
1456

    
1457
    return 0;
1458
}
1459

    
1460
static void win32_stop_timer(struct qemu_alarm_timer *t)
1461
{
1462
    struct qemu_alarm_win32 *data = t->priv;
1463

    
1464
    timeKillEvent(data->timerId);
1465
    timeEndPeriod(data->period);
1466
}
1467

    
1468
static void win32_rearm_timer(struct qemu_alarm_timer *t)
1469
{
1470
    struct qemu_alarm_win32 *data = t->priv;
1471
    uint64_t nearest_delta_us;
1472

    
1473
    if (!active_timers[QEMU_TIMER_REALTIME] &&
1474
                !active_timers[QEMU_TIMER_VIRTUAL])
1475
        return;
1476

    
1477
    nearest_delta_us = qemu_next_deadline_dyntick();
1478
    nearest_delta_us /= 1000;
1479

    
1480
    timeKillEvent(data->timerId);
1481

    
1482
    data->timerId = timeSetEvent(1,
1483
                        data->period,
1484
                        host_alarm_handler,
1485
                        (DWORD)t,
1486
                        TIME_ONESHOT | TIME_PERIODIC);
1487

    
1488
    if (!data->timerId) {
1489
        fprintf(stderr, "Failed to re-arm win32 alarm timer %ld\n",
1490
                GetLastError());
1491

    
1492
        timeEndPeriod(data->period);
1493
        exit(1);
1494
    }
1495
}
1496

    
1497
#endif /* _WIN32 */
1498

    
1499
static int init_timer_alarm(void)
1500
{
1501
    struct qemu_alarm_timer *t = NULL;
1502
    int i, err = -1;
1503

    
1504
    for (i = 0; alarm_timers[i].name; i++) {
1505
        t = &alarm_timers[i];
1506

    
1507
        err = t->start(t);
1508
        if (!err)
1509
            break;
1510
    }
1511

    
1512
    if (err) {
1513
        err = -ENOENT;
1514
        goto fail;
1515
    }
1516

    
1517
    alarm_timer = t;
1518

    
1519
    return 0;
1520

    
1521
fail:
1522
    return err;
1523
}
1524

    
1525
static void quit_timers(void)
1526
{
1527
    alarm_timer->stop(alarm_timer);
1528
    alarm_timer = NULL;
1529
}
1530

    
1531
/***********************************************************/
1532
/* host time/date access */
1533
void qemu_get_timedate(struct tm *tm, int offset)
1534
{
1535
    time_t ti;
1536
    struct tm *ret;
1537

    
1538
    time(&ti);
1539
    ti += offset;
1540
    if (rtc_date_offset == -1) {
1541
        if (rtc_utc)
1542
            ret = gmtime(&ti);
1543
        else
1544
            ret = localtime(&ti);
1545
    } else {
1546
        ti -= rtc_date_offset;
1547
        ret = gmtime(&ti);
1548
    }
1549

    
1550
    memcpy(tm, ret, sizeof(struct tm));
1551
}
1552

    
1553
int qemu_timedate_diff(struct tm *tm)
1554
{
1555
    time_t seconds;
1556

    
1557
    if (rtc_date_offset == -1)
1558
        if (rtc_utc)
1559
            seconds = mktimegm(tm);
1560
        else
1561
            seconds = mktime(tm);
1562
    else
1563
        seconds = mktimegm(tm) + rtc_date_offset;
1564

    
1565
    return seconds - time(NULL);
1566
}
1567

    
1568
#ifdef _WIN32
1569
static void socket_cleanup(void)
1570
{
1571
    WSACleanup();
1572
}
1573

    
1574
static int socket_init(void)
1575
{
1576
    WSADATA Data;
1577
    int ret, err;
1578

    
1579
    ret = WSAStartup(MAKEWORD(2,2), &Data);
1580
    if (ret != 0) {
1581
        err = WSAGetLastError();
1582
        fprintf(stderr, "WSAStartup: %d\n", err);
1583
        return -1;
1584
    }
1585
    atexit(socket_cleanup);
1586
    return 0;
1587
}
1588
#endif
1589

    
1590
/***********************************************************/
1591
/* Bluetooth support */
1592
static int nb_hcis;
1593
static int cur_hci;
1594
static struct HCIInfo *hci_table[MAX_NICS];
1595

    
1596
static struct bt_vlan_s {
1597
    struct bt_scatternet_s net;
1598
    int id;
1599
    struct bt_vlan_s *next;
1600
} *first_bt_vlan;
1601

    
1602
/* find or alloc a new bluetooth "VLAN" */
1603
static struct bt_scatternet_s *qemu_find_bt_vlan(int id)
1604
{
1605
    struct bt_vlan_s **pvlan, *vlan;
1606
    for (vlan = first_bt_vlan; vlan != NULL; vlan = vlan->next) {
1607
        if (vlan->id == id)
1608
            return &vlan->net;
1609
    }
1610
    vlan = qemu_mallocz(sizeof(struct bt_vlan_s));
1611
    vlan->id = id;
1612
    pvlan = &first_bt_vlan;
1613
    while (*pvlan != NULL)
1614
        pvlan = &(*pvlan)->next;
1615
    *pvlan = vlan;
1616
    return &vlan->net;
1617
}
1618

    
1619
static void null_hci_send(struct HCIInfo *hci, const uint8_t *data, int len)
1620
{
1621
}
1622

    
1623
static int null_hci_addr_set(struct HCIInfo *hci, const uint8_t *bd_addr)
1624
{
1625
    return -ENOTSUP;
1626
}
1627

    
1628
static struct HCIInfo null_hci = {
1629
    .cmd_send = null_hci_send,
1630
    .sco_send = null_hci_send,
1631
    .acl_send = null_hci_send,
1632
    .bdaddr_set = null_hci_addr_set,
1633
};
1634

    
1635
struct HCIInfo *qemu_next_hci(void)
1636
{
1637
    if (cur_hci == nb_hcis)
1638
        return &null_hci;
1639

    
1640
    return hci_table[cur_hci++];
1641
}
1642

    
1643
static struct HCIInfo *hci_init(const char *str)
1644
{
1645
    char *endp;
1646
    struct bt_scatternet_s *vlan = 0;
1647

    
1648
    if (!strcmp(str, "null"))
1649
        /* null */
1650
        return &null_hci;
1651
    else if (!strncmp(str, "host", 4) && (str[4] == '\0' || str[4] == ':'))
1652
        /* host[:hciN] */
1653
        return bt_host_hci(str[4] ? str + 5 : "hci0");
1654
    else if (!strncmp(str, "hci", 3)) {
1655
        /* hci[,vlan=n] */
1656
        if (str[3]) {
1657
            if (!strncmp(str + 3, ",vlan=", 6)) {
1658
                vlan = qemu_find_bt_vlan(strtol(str + 9, &endp, 0));
1659
                if (*endp)
1660
                    vlan = 0;
1661
            }
1662
        } else
1663
            vlan = qemu_find_bt_vlan(0);
1664
        if (vlan)
1665
           return bt_new_hci(vlan);
1666
    }
1667

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

    
1670
    return 0;
1671
}
1672

    
1673
static int bt_hci_parse(const char *str)
1674
{
1675
    struct HCIInfo *hci;
1676
    bdaddr_t bdaddr;
1677

    
1678
    if (nb_hcis >= MAX_NICS) {
1679
        fprintf(stderr, "qemu: Too many bluetooth HCIs (max %i).\n", MAX_NICS);
1680
        return -1;
1681
    }
1682

    
1683
    hci = hci_init(str);
1684
    if (!hci)
1685
        return -1;
1686

    
1687
    bdaddr.b[0] = 0x52;
1688
    bdaddr.b[1] = 0x54;
1689
    bdaddr.b[2] = 0x00;
1690
    bdaddr.b[3] = 0x12;
1691
    bdaddr.b[4] = 0x34;
1692
    bdaddr.b[5] = 0x56 + nb_hcis;
1693
    hci->bdaddr_set(hci, bdaddr.b);
1694

    
1695
    hci_table[nb_hcis++] = hci;
1696

    
1697
    return 0;
1698
}
1699

    
1700
static void bt_vhci_add(int vlan_id)
1701
{
1702
    struct bt_scatternet_s *vlan = qemu_find_bt_vlan(vlan_id);
1703

    
1704
    if (!vlan->slave)
1705
        fprintf(stderr, "qemu: warning: adding a VHCI to "
1706
                        "an empty scatternet %i\n", vlan_id);
1707

    
1708
    bt_vhci_init(bt_new_hci(vlan));
1709
}
1710

    
1711
static struct bt_device_s *bt_device_add(const char *opt)
1712
{
1713
    struct bt_scatternet_s *vlan;
1714
    int vlan_id = 0;
1715
    char *endp = strstr(opt, ",vlan=");
1716
    int len = (endp ? endp - opt : strlen(opt)) + 1;
1717
    char devname[10];
1718

    
1719
    pstrcpy(devname, MIN(sizeof(devname), len), opt);
1720

    
1721
    if (endp) {
1722
        vlan_id = strtol(endp + 6, &endp, 0);
1723
        if (*endp) {
1724
            fprintf(stderr, "qemu: unrecognised bluetooth vlan Id\n");
1725
            return 0;
1726
        }
1727
    }
1728

    
1729
    vlan = qemu_find_bt_vlan(vlan_id);
1730

    
1731
    if (!vlan->slave)
1732
        fprintf(stderr, "qemu: warning: adding a slave device to "
1733
                        "an empty scatternet %i\n", vlan_id);
1734

    
1735
    if (!strcmp(devname, "keyboard"))
1736
        return bt_keyboard_init(vlan);
1737

    
1738
    fprintf(stderr, "qemu: unsupported bluetooth device `%s'\n", devname);
1739
    return 0;
1740
}
1741

    
1742
static int bt_parse(const char *opt)
1743
{
1744
    const char *endp, *p;
1745
    int vlan;
1746

    
1747
    if (strstart(opt, "hci", &endp)) {
1748
        if (!*endp || *endp == ',') {
1749
            if (*endp)
1750
                if (!strstart(endp, ",vlan=", 0))
1751
                    opt = endp + 1;
1752

    
1753
            return bt_hci_parse(opt);
1754
       }
1755
    } else if (strstart(opt, "vhci", &endp)) {
1756
        if (!*endp || *endp == ',') {
1757
            if (*endp) {
1758
                if (strstart(endp, ",vlan=", &p)) {
1759
                    vlan = strtol(p, (char **) &endp, 0);
1760
                    if (*endp) {
1761
                        fprintf(stderr, "qemu: bad scatternet '%s'\n", p);
1762
                        return 1;
1763
                    }
1764
                } else {
1765
                    fprintf(stderr, "qemu: bad parameter '%s'\n", endp + 1);
1766
                    return 1;
1767
                }
1768
            } else
1769
                vlan = 0;
1770

    
1771
            bt_vhci_add(vlan);
1772
            return 0;
1773
        }
1774
    } else if (strstart(opt, "device:", &endp))
1775
        return !bt_device_add(endp);
1776

    
1777
    fprintf(stderr, "qemu: bad bluetooth parameter '%s'\n", opt);
1778
    return 1;
1779
}
1780

    
1781
/***********************************************************/
1782
/* QEMU Block devices */
1783

    
1784
#define HD_ALIAS "index=%d,media=disk"
1785
#define CDROM_ALIAS "index=2,media=cdrom"
1786
#define FD_ALIAS "index=%d,if=floppy"
1787
#define PFLASH_ALIAS "if=pflash"
1788
#define MTD_ALIAS "if=mtd"
1789
#define SD_ALIAS "index=0,if=sd"
1790

    
1791
QemuOpts *drive_add(const char *file, const char *fmt, ...)
1792
{
1793
    va_list ap;
1794
    char optstr[1024];
1795
    QemuOpts *opts;
1796

    
1797
    va_start(ap, fmt);
1798
    vsnprintf(optstr, sizeof(optstr), fmt, ap);
1799
    va_end(ap);
1800

    
1801
    opts = qemu_opts_parse(&qemu_drive_opts, optstr, NULL);
1802
    if (!opts) {
1803
        fprintf(stderr, "%s: huh? duplicate? (%s)\n",
1804
                __FUNCTION__, optstr);
1805
        return NULL;
1806
    }
1807
    if (file)
1808
        qemu_opt_set(opts, "file", file);
1809
    return opts;
1810
}
1811

    
1812
DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit)
1813
{
1814
    DriveInfo *dinfo;
1815

    
1816
    /* seek interface, bus and unit */
1817

    
1818
    QTAILQ_FOREACH(dinfo, &drives, next) {
1819
        if (dinfo->type == type &&
1820
            dinfo->bus == bus &&
1821
            dinfo->unit == unit)
1822
            return dinfo;
1823
    }
1824

    
1825
    return NULL;
1826
}
1827

    
1828
DriveInfo *drive_get_by_id(const char *id)
1829
{
1830
    DriveInfo *dinfo;
1831

    
1832
    QTAILQ_FOREACH(dinfo, &drives, next) {
1833
        if (strcmp(id, dinfo->id))
1834
            continue;
1835
        return dinfo;
1836
    }
1837
    return NULL;
1838
}
1839

    
1840
int drive_get_max_bus(BlockInterfaceType type)
1841
{
1842
    int max_bus;
1843
    DriveInfo *dinfo;
1844

    
1845
    max_bus = -1;
1846
    QTAILQ_FOREACH(dinfo, &drives, next) {
1847
        if(dinfo->type == type &&
1848
           dinfo->bus > max_bus)
1849
            max_bus = dinfo->bus;
1850
    }
1851
    return max_bus;
1852
}
1853

    
1854
const char *drive_get_serial(BlockDriverState *bdrv)
1855
{
1856
    DriveInfo *dinfo;
1857

    
1858
    QTAILQ_FOREACH(dinfo, &drives, next) {
1859
        if (dinfo->bdrv == bdrv)
1860
            return dinfo->serial;
1861
    }
1862

    
1863
    return "\0";
1864
}
1865

    
1866
BlockInterfaceErrorAction drive_get_onerror(BlockDriverState *bdrv)
1867
{
1868
    DriveInfo *dinfo;
1869

    
1870
    QTAILQ_FOREACH(dinfo, &drives, next) {
1871
        if (dinfo->bdrv == bdrv)
1872
            return dinfo->onerror;
1873
    }
1874

    
1875
    return BLOCK_ERR_STOP_ENOSPC;
1876
}
1877

    
1878
static void bdrv_format_print(void *opaque, const char *name)
1879
{
1880
    fprintf(stderr, " %s", name);
1881
}
1882

    
1883
void drive_uninit(BlockDriverState *bdrv)
1884
{
1885
    DriveInfo *dinfo;
1886

    
1887
    QTAILQ_FOREACH(dinfo, &drives, next) {
1888
        if (dinfo->bdrv != bdrv)
1889
            continue;
1890
        qemu_opts_del(dinfo->opts);
1891
        QTAILQ_REMOVE(&drives, dinfo, next);
1892
        qemu_free(dinfo);
1893
        break;
1894
    }
1895
}
1896

    
1897
DriveInfo *drive_init(QemuOpts *opts, void *opaque,
1898
                      int *fatal_error)
1899
{
1900
    const char *buf;
1901
    const char *file = NULL;
1902
    char devname[128];
1903
    const char *serial;
1904
    const char *mediastr = "";
1905
    BlockInterfaceType type;
1906
    enum { MEDIA_DISK, MEDIA_CDROM } media;
1907
    int bus_id, unit_id;
1908
    int cyls, heads, secs, translation;
1909
    BlockDriver *drv = NULL;
1910
    QEMUMachine *machine = opaque;
1911
    int max_devs;
1912
    int index;
1913
    int cache;
1914
    int aio = 0;
1915
    int bdrv_flags, onerror;
1916
    const char *devaddr;
1917
    DriveInfo *dinfo;
1918
    int snapshot = 0;
1919

    
1920
    *fatal_error = 1;
1921

    
1922
    translation = BIOS_ATA_TRANSLATION_AUTO;
1923
    cache = 1;
1924

    
1925
    if (machine && machine->use_scsi) {
1926
        type = IF_SCSI;
1927
        max_devs = MAX_SCSI_DEVS;
1928
        pstrcpy(devname, sizeof(devname), "scsi");
1929
    } else {
1930
        type = IF_IDE;
1931
        max_devs = MAX_IDE_DEVS;
1932
        pstrcpy(devname, sizeof(devname), "ide");
1933
    }
1934
    media = MEDIA_DISK;
1935

    
1936
    /* extract parameters */
1937
    bus_id  = qemu_opt_get_number(opts, "bus", 0);
1938
    unit_id = qemu_opt_get_number(opts, "unit", -1);
1939
    index   = qemu_opt_get_number(opts, "index", -1);
1940

    
1941
    cyls  = qemu_opt_get_number(opts, "cyls", 0);
1942
    heads = qemu_opt_get_number(opts, "heads", 0);
1943
    secs  = qemu_opt_get_number(opts, "secs", 0);
1944

    
1945
    snapshot = qemu_opt_get_bool(opts, "snapshot", 0);
1946

    
1947
    file = qemu_opt_get(opts, "file");
1948
    serial = qemu_opt_get(opts, "serial");
1949

    
1950
    if ((buf = qemu_opt_get(opts, "if")) != NULL) {
1951
        pstrcpy(devname, sizeof(devname), buf);
1952
        if (!strcmp(buf, "ide")) {
1953
            type = IF_IDE;
1954
            max_devs = MAX_IDE_DEVS;
1955
        } else if (!strcmp(buf, "scsi")) {
1956
            type = IF_SCSI;
1957
            max_devs = MAX_SCSI_DEVS;
1958
        } else if (!strcmp(buf, "floppy")) {
1959
            type = IF_FLOPPY;
1960
            max_devs = 0;
1961
        } else if (!strcmp(buf, "pflash")) {
1962
            type = IF_PFLASH;
1963
            max_devs = 0;
1964
        } else if (!strcmp(buf, "mtd")) {
1965
            type = IF_MTD;
1966
            max_devs = 0;
1967
        } else if (!strcmp(buf, "sd")) {
1968
            type = IF_SD;
1969
            max_devs = 0;
1970
        } else if (!strcmp(buf, "virtio")) {
1971
            type = IF_VIRTIO;
1972
            max_devs = 0;
1973
        } else if (!strcmp(buf, "xen")) {
1974
            type = IF_XEN;
1975
            max_devs = 0;
1976
        } else if (!strcmp(buf, "none")) {
1977
            type = IF_NONE;
1978
            max_devs = 0;
1979
        } else {
1980
            fprintf(stderr, "qemu: unsupported bus type '%s'\n", buf);
1981
            return NULL;
1982
        }
1983
    }
1984

    
1985
    if (cyls || heads || secs) {
1986
        if (cyls < 1 || cyls > 16383) {
1987
            fprintf(stderr, "qemu: '%s' invalid physical cyls number\n", buf);
1988
            return NULL;
1989
        }
1990
        if (heads < 1 || heads > 16) {
1991
            fprintf(stderr, "qemu: '%s' invalid physical heads number\n", buf);
1992
            return NULL;
1993
        }
1994
        if (secs < 1 || secs > 63) {
1995
            fprintf(stderr, "qemu: '%s' invalid physical secs number\n", buf);
1996
            return NULL;
1997
        }
1998
    }
1999

    
2000
    if ((buf = qemu_opt_get(opts, "trans")) != NULL) {
2001
        if (!cyls) {
2002
            fprintf(stderr,
2003
                    "qemu: '%s' trans must be used with cyls,heads and secs\n",
2004
                    buf);
2005
            return NULL;
2006
        }
2007
        if (!strcmp(buf, "none"))
2008
            translation = BIOS_ATA_TRANSLATION_NONE;
2009
        else if (!strcmp(buf, "lba"))
2010
            translation = BIOS_ATA_TRANSLATION_LBA;
2011
        else if (!strcmp(buf, "auto"))
2012
            translation = BIOS_ATA_TRANSLATION_AUTO;
2013
        else {
2014
            fprintf(stderr, "qemu: '%s' invalid translation type\n", buf);
2015
            return NULL;
2016
        }
2017
    }
2018

    
2019
    if ((buf = qemu_opt_get(opts, "media")) != NULL) {
2020
        if (!strcmp(buf, "disk")) {
2021
            media = MEDIA_DISK;
2022
        } else if (!strcmp(buf, "cdrom")) {
2023
            if (cyls || secs || heads) {
2024
                fprintf(stderr,
2025
                        "qemu: '%s' invalid physical CHS format\n", buf);
2026
                return NULL;
2027
            }
2028
            media = MEDIA_CDROM;
2029
        } else {
2030
            fprintf(stderr, "qemu: '%s' invalid media\n", buf);
2031
            return NULL;
2032
        }
2033
    }
2034

    
2035
    if ((buf = qemu_opt_get(opts, "cache")) != NULL) {
2036
        if (!strcmp(buf, "off") || !strcmp(buf, "none"))
2037
            cache = 0;
2038
        else if (!strcmp(buf, "writethrough"))
2039
            cache = 1;
2040
        else if (!strcmp(buf, "writeback"))
2041
            cache = 2;
2042
        else {
2043
           fprintf(stderr, "qemu: invalid cache option\n");
2044
           return NULL;
2045
        }
2046
    }
2047

    
2048
#ifdef CONFIG_LINUX_AIO
2049
    if ((buf = qemu_opt_get(opts, "aio")) != NULL) {
2050
        if (!strcmp(buf, "threads"))
2051
            aio = 0;
2052
        else if (!strcmp(buf, "native"))
2053
            aio = 1;
2054
        else {
2055
           fprintf(stderr, "qemu: invalid aio option\n");
2056
           return NULL;
2057
        }
2058
    }
2059
#endif
2060

    
2061
    if ((buf = qemu_opt_get(opts, "format")) != NULL) {
2062
       if (strcmp(buf, "?") == 0) {
2063
            fprintf(stderr, "qemu: Supported formats:");
2064
            bdrv_iterate_format(bdrv_format_print, NULL);
2065
            fprintf(stderr, "\n");
2066
            return NULL;
2067
        }
2068
        drv = bdrv_find_format(buf);
2069
        if (!drv) {
2070
            fprintf(stderr, "qemu: '%s' invalid format\n", buf);
2071
            return NULL;
2072
        }
2073
    }
2074

    
2075
    onerror = BLOCK_ERR_STOP_ENOSPC;
2076
    if ((buf = qemu_opt_get(opts, "werror")) != NULL) {
2077
        if (type != IF_IDE && type != IF_SCSI && type != IF_VIRTIO) {
2078
            fprintf(stderr, "werror is no supported by this format\n");
2079
            return NULL;
2080
        }
2081
        if (!strcmp(buf, "ignore"))
2082
            onerror = BLOCK_ERR_IGNORE;
2083
        else if (!strcmp(buf, "enospc"))
2084
            onerror = BLOCK_ERR_STOP_ENOSPC;
2085
        else if (!strcmp(buf, "stop"))
2086
            onerror = BLOCK_ERR_STOP_ANY;
2087
        else if (!strcmp(buf, "report"))
2088
            onerror = BLOCK_ERR_REPORT;
2089
        else {
2090
            fprintf(stderr, "qemu: '%s' invalid write error action\n", buf);
2091
            return NULL;
2092
        }
2093
    }
2094

    
2095
    if ((devaddr = qemu_opt_get(opts, "addr")) != NULL) {
2096
        if (type != IF_VIRTIO) {
2097
            fprintf(stderr, "addr is not supported\n");
2098
            return NULL;
2099
        }
2100
    }
2101

    
2102
    /* compute bus and unit according index */
2103

    
2104
    if (index != -1) {
2105
        if (bus_id != 0 || unit_id != -1) {
2106
            fprintf(stderr,
2107
                    "qemu: index cannot be used with bus and unit\n");
2108
            return NULL;
2109
        }
2110
        if (max_devs == 0)
2111
        {
2112
            unit_id = index;
2113
            bus_id = 0;
2114
        } else {
2115
            unit_id = index % max_devs;
2116
            bus_id = index / max_devs;
2117
        }
2118
    }
2119

    
2120
    /* if user doesn't specify a unit_id,
2121
     * try to find the first free
2122
     */
2123

    
2124
    if (unit_id == -1) {
2125
       unit_id = 0;
2126
       while (drive_get(type, bus_id, unit_id) != NULL) {
2127
           unit_id++;
2128
           if (max_devs && unit_id >= max_devs) {
2129
               unit_id -= max_devs;
2130
               bus_id++;
2131
           }
2132
       }
2133
    }
2134

    
2135
    /* check unit id */
2136

    
2137
    if (max_devs && unit_id >= max_devs) {
2138
        fprintf(stderr, "qemu: unit %d too big (max is %d)\n",
2139
                unit_id, max_devs - 1);
2140
        return NULL;
2141
    }
2142

    
2143
    /*
2144
     * ignore multiple definitions
2145
     */
2146

    
2147
    if (drive_get(type, bus_id, unit_id) != NULL) {
2148
        *fatal_error = 0;
2149
        return NULL;
2150
    }
2151

    
2152
    /* init */
2153

    
2154
    dinfo = qemu_mallocz(sizeof(*dinfo));
2155
    if ((buf = qemu_opts_id(opts)) != NULL) {
2156
        dinfo->id = qemu_strdup(buf);
2157
    } else {
2158
        /* no id supplied -> create one */
2159
        dinfo->id = qemu_mallocz(32);
2160
        if (type == IF_IDE || type == IF_SCSI)
2161
            mediastr = (media == MEDIA_CDROM) ? "-cd" : "-hd";
2162
        if (max_devs)
2163
            snprintf(dinfo->id, 32, "%s%i%s%i",
2164
                     devname, bus_id, mediastr, unit_id);
2165
        else
2166
            snprintf(dinfo->id, 32, "%s%s%i",
2167
                     devname, mediastr, unit_id);
2168
    }
2169
    dinfo->bdrv = bdrv_new(dinfo->id);
2170
    dinfo->devaddr = devaddr;
2171
    dinfo->type = type;
2172
    dinfo->bus = bus_id;
2173
    dinfo->unit = unit_id;
2174
    dinfo->onerror = onerror;
2175
    dinfo->opts = opts;
2176
    if (serial)
2177
        strncpy(dinfo->serial, serial, sizeof(serial));
2178
    QTAILQ_INSERT_TAIL(&drives, dinfo, next);
2179

    
2180
    switch(type) {
2181
    case IF_IDE:
2182
    case IF_SCSI:
2183
    case IF_XEN:
2184
    case IF_NONE:
2185
        switch(media) {
2186
        case MEDIA_DISK:
2187
            if (cyls != 0) {
2188
                bdrv_set_geometry_hint(dinfo->bdrv, cyls, heads, secs);
2189
                bdrv_set_translation_hint(dinfo->bdrv, translation);
2190
            }
2191
            break;
2192
        case MEDIA_CDROM:
2193
            bdrv_set_type_hint(dinfo->bdrv, BDRV_TYPE_CDROM);
2194
            break;
2195
        }
2196
        break;
2197
    case IF_SD:
2198
        /* FIXME: This isn't really a floppy, but it's a reasonable
2199
           approximation.  */
2200
    case IF_FLOPPY:
2201
        bdrv_set_type_hint(dinfo->bdrv, BDRV_TYPE_FLOPPY);
2202
        break;
2203
    case IF_PFLASH:
2204
    case IF_MTD:
2205
        break;
2206
    case IF_VIRTIO:
2207
        /* add virtio block device */
2208
        opts = qemu_opts_create(&qemu_device_opts, NULL, 0);
2209
        qemu_opt_set(opts, "driver", "virtio-blk-pci");
2210
        qemu_opt_set(opts, "drive", dinfo->id);
2211
        if (devaddr)
2212
            qemu_opt_set(opts, "addr", devaddr);
2213
        break;
2214
    case IF_COUNT:
2215
        abort();
2216
    }
2217
    if (!file) {
2218
        *fatal_error = 0;
2219
        return NULL;
2220
    }
2221
    bdrv_flags = 0;
2222
    if (snapshot) {
2223
        bdrv_flags |= BDRV_O_SNAPSHOT;
2224
        cache = 2; /* always use write-back with snapshot */
2225
    }
2226
    if (cache == 0) /* no caching */
2227
        bdrv_flags |= BDRV_O_NOCACHE;
2228
    else if (cache == 2) /* write-back */
2229
        bdrv_flags |= BDRV_O_CACHE_WB;
2230

    
2231
    if (aio == 1) {
2232
        bdrv_flags |= BDRV_O_NATIVE_AIO;
2233
    } else {
2234
        bdrv_flags &= ~BDRV_O_NATIVE_AIO;
2235
    }
2236

    
2237
    if (bdrv_open2(dinfo->bdrv, file, bdrv_flags, drv) < 0) {
2238
        fprintf(stderr, "qemu: could not open disk image %s\n",
2239
                        file);
2240
        return NULL;
2241
    }
2242

    
2243
    if (bdrv_key_required(dinfo->bdrv))
2244
        autostart = 0;
2245
    *fatal_error = 0;
2246
    return dinfo;
2247
}
2248

    
2249
static int drive_init_func(QemuOpts *opts, void *opaque)
2250
{
2251
    QEMUMachine *machine = opaque;
2252
    int fatal_error = 0;
2253

    
2254
    if (drive_init(opts, machine, &fatal_error) == NULL) {
2255
        if (fatal_error)
2256
            return 1;
2257
    }
2258
    return 0;
2259
}
2260

    
2261
static int drive_enable_snapshot(QemuOpts *opts, void *opaque)
2262
{
2263
    if (NULL == qemu_opt_get(opts, "snapshot")) {
2264
        qemu_opt_set(opts, "snapshot", "on");
2265
    }
2266
    return 0;
2267
}
2268

    
2269
void qemu_register_boot_set(QEMUBootSetHandler *func, void *opaque)
2270
{
2271
    boot_set_handler = func;
2272
    boot_set_opaque = opaque;
2273
}
2274

    
2275
int qemu_boot_set(const char *boot_devices)
2276
{
2277
    if (!boot_set_handler) {
2278
        return -EINVAL;
2279
    }
2280
    return boot_set_handler(boot_set_opaque, boot_devices);
2281
}
2282

    
2283
static int parse_bootdevices(char *devices)
2284
{
2285
    /* We just do some generic consistency checks */
2286
    const char *p;
2287
    int bitmap = 0;
2288

    
2289
    for (p = devices; *p != '\0'; p++) {
2290
        /* Allowed boot devices are:
2291
         * a-b: floppy disk drives
2292
         * c-f: IDE disk drives
2293
         * g-m: machine implementation dependant drives
2294
         * n-p: network devices
2295
         * It's up to each machine implementation to check if the given boot
2296
         * devices match the actual hardware implementation and firmware
2297
         * features.
2298
         */
2299
        if (*p < 'a' || *p > 'p') {
2300
            fprintf(stderr, "Invalid boot device '%c'\n", *p);
2301
            exit(1);
2302
        }
2303
        if (bitmap & (1 << (*p - 'a'))) {
2304
            fprintf(stderr, "Boot device '%c' was given twice\n", *p);
2305
            exit(1);
2306
        }
2307
        bitmap |= 1 << (*p - 'a');
2308
    }
2309
    return bitmap;
2310
}
2311

    
2312
static void restore_boot_devices(void *opaque)
2313
{
2314
    char *standard_boot_devices = opaque;
2315

    
2316
    qemu_boot_set(standard_boot_devices);
2317

    
2318
    qemu_unregister_reset(restore_boot_devices, standard_boot_devices);
2319
    qemu_free(standard_boot_devices);
2320
}
2321

    
2322
static void numa_add(const char *optarg)
2323
{
2324
    char option[128];
2325
    char *endptr;
2326
    unsigned long long value, endvalue;
2327
    int nodenr;
2328

    
2329
    optarg = get_opt_name(option, 128, optarg, ',') + 1;
2330
    if (!strcmp(option, "node")) {
2331
        if (get_param_value(option, 128, "nodeid", optarg) == 0) {
2332
            nodenr = nb_numa_nodes;
2333
        } else {
2334
            nodenr = strtoull(option, NULL, 10);
2335
        }
2336

    
2337
        if (get_param_value(option, 128, "mem", optarg) == 0) {
2338
            node_mem[nodenr] = 0;
2339
        } else {
2340
            value = strtoull(option, &endptr, 0);
2341
            switch (*endptr) {
2342
            case 0: case 'M': case 'm':
2343
                value <<= 20;
2344
                break;
2345
            case 'G': case 'g':
2346
                value <<= 30;
2347
                break;
2348
            }
2349
            node_mem[nodenr] = value;
2350
        }
2351
        if (get_param_value(option, 128, "cpus", optarg) == 0) {
2352
            node_cpumask[nodenr] = 0;
2353
        } else {
2354
            value = strtoull(option, &endptr, 10);
2355
            if (value >= 64) {
2356
                value = 63;
2357
                fprintf(stderr, "only 64 CPUs in NUMA mode supported.\n");
2358
            } else {
2359
                if (*endptr == '-') {
2360
                    endvalue = strtoull(endptr+1, &endptr, 10);
2361
                    if (endvalue >= 63) {
2362
                        endvalue = 62;
2363
                        fprintf(stderr,
2364
                            "only 63 CPUs in NUMA mode supported.\n");
2365
                    }
2366
                    value = (1 << (endvalue + 1)) - (1 << value);
2367
                } else {
2368
                    value = 1 << value;
2369
                }
2370
            }
2371
            node_cpumask[nodenr] = value;
2372
        }
2373
        nb_numa_nodes++;
2374
    }
2375
    return;
2376
}
2377

    
2378
static void smp_parse(const char *optarg)
2379
{
2380
    int smp, sockets = 0, threads = 0, cores = 0;
2381
    char *endptr;
2382
    char option[128];
2383

    
2384
    smp = strtoul(optarg, &endptr, 10);
2385
    if (endptr != optarg) {
2386
        if (*endptr == ',') {
2387
            endptr++;
2388
        }
2389
    }
2390
    if (get_param_value(option, 128, "sockets", endptr) != 0)
2391
        sockets = strtoull(option, NULL, 10);
2392
    if (get_param_value(option, 128, "cores", endptr) != 0)
2393
        cores = strtoull(option, NULL, 10);
2394
    if (get_param_value(option, 128, "threads", endptr) != 0)
2395
        threads = strtoull(option, NULL, 10);
2396
    if (get_param_value(option, 128, "maxcpus", endptr) != 0)
2397
        max_cpus = strtoull(option, NULL, 10);
2398

    
2399
    /* compute missing values, prefer sockets over cores over threads */
2400
    if (smp == 0 || sockets == 0) {
2401
        sockets = sockets > 0 ? sockets : 1;
2402
        cores = cores > 0 ? cores : 1;
2403
        threads = threads > 0 ? threads : 1;
2404
        if (smp == 0) {
2405
            smp = cores * threads * sockets;
2406
        } else {
2407
            sockets = smp / (cores * threads);
2408
        }
2409
    } else {
2410
        if (cores == 0) {
2411
            threads = threads > 0 ? threads : 1;
2412
            cores = smp / (sockets * threads);
2413
        } else {
2414
            if (sockets == 0) {
2415
                sockets = smp / (cores * threads);
2416
            } else {
2417
                threads = smp / (cores * sockets);
2418
            }
2419
        }
2420
    }
2421
    smp_cpus = smp;
2422
    smp_cores = cores > 0 ? cores : 1;
2423
    smp_threads = threads > 0 ? threads : 1;
2424
    if (max_cpus == 0)
2425
        max_cpus = smp_cpus;
2426
}
2427

    
2428
/***********************************************************/
2429
/* USB devices */
2430

    
2431
static void usb_msd_password_cb(void *opaque, int err)
2432
{
2433
    USBDevice *dev = opaque;
2434

    
2435
    if (!err)
2436
        usb_device_attach(dev);
2437
    else
2438
        dev->info->handle_destroy(dev);
2439
}
2440

    
2441
static struct {
2442
    const char *name;
2443
    const char *qdev;
2444
} usbdevs[] = {
2445
    {
2446
        .name = "mouse",
2447
        .qdev = "QEMU USB Mouse",
2448
    },{
2449
        .name = "tablet",
2450
        .qdev = "QEMU USB Tablet",
2451
    },{
2452
        .name = "keyboard",
2453
        .qdev = "QEMU USB Keyboard",
2454
    },{
2455
        .name = "wacom-tablet",
2456
        .qdev = "QEMU PenPartner Tablet",
2457
    }
2458
};
2459

    
2460
static int usb_device_add(const char *devname, int is_hotplug)
2461
{
2462
    const char *p;
2463
    USBBus *bus = usb_bus_find(-1 /* any */);
2464
    USBDevice *dev = NULL;
2465
    int i;
2466

    
2467
    if (!usb_enabled)
2468
        return -1;
2469

    
2470
    /* simple devices which don't need extra care */
2471
    for (i = 0; i < ARRAY_SIZE(usbdevs); i++) {
2472
        if (strcmp(devname, usbdevs[i].name) != 0)
2473
            continue;
2474
        dev = usb_create_simple(bus, usbdevs[i].qdev);
2475
        goto done;
2476
    }
2477

    
2478
    /* the other ones */
2479
    if (strstart(devname, "host:", &p)) {
2480
        dev = usb_host_device_open(p);
2481
    } else if (strstart(devname, "disk:", &p)) {
2482
        BlockDriverState *bs;
2483

    
2484
        dev = usb_msd_init(p);
2485
        if (!dev)
2486
            return -1;
2487
        bs = usb_msd_get_bdrv(dev);
2488
        if (bdrv_key_required(bs)) {
2489
            autostart = 0;
2490
            if (is_hotplug) {
2491
                monitor_read_bdrv_key_start(cur_mon, bs, usb_msd_password_cb,
2492
                                            dev);
2493
                return 0;
2494
            }
2495
        }
2496
    } else if (strstart(devname, "serial:", &p)) {
2497
        dev = usb_serial_init(p);
2498
#ifdef CONFIG_BRLAPI
2499
    } else if (!strcmp(devname, "braille")) {
2500
        dev = usb_baum_init();
2501
#endif
2502
    } else if (strstart(devname, "net:", &p)) {
2503
        int nic = nb_nics;
2504

    
2505
        if (net_client_init(NULL, "nic", p) < 0)
2506
            return -1;
2507
        nd_table[nic].model = "usb";
2508
        dev = usb_net_init(&nd_table[nic]);
2509
    } else if (!strcmp(devname, "bt") || strstart(devname, "bt:", &p)) {
2510
        dev = usb_bt_init(devname[2] ? hci_init(p) :
2511
                        bt_new_hci(qemu_find_bt_vlan(0)));
2512
    } else {
2513
        return -1;
2514
    }
2515
    if (!dev)
2516
        return -1;
2517

    
2518
done:
2519
    return 0;
2520
}
2521

    
2522
static int usb_device_del(const char *devname)
2523
{
2524
    int bus_num, addr;
2525
    const char *p;
2526

    
2527
    if (strstart(devname, "host:", &p))
2528
        return usb_host_device_close(p);
2529

    
2530
    if (!usb_enabled)
2531
        return -1;
2532

    
2533
    p = strchr(devname, '.');
2534
    if (!p)
2535
        return -1;
2536
    bus_num = strtoul(devname, NULL, 0);
2537
    addr = strtoul(p + 1, NULL, 0);
2538

    
2539
    return usb_device_delete_addr(bus_num, addr);
2540
}
2541

    
2542
static int usb_parse(const char *cmdline)
2543
{
2544
    return usb_device_add(cmdline, 0);
2545
}
2546

    
2547
void do_usb_add(Monitor *mon, const QDict *qdict)
2548
{
2549
    usb_device_add(qdict_get_str(qdict, "devname"), 1);
2550
}
2551

    
2552
void do_usb_del(Monitor *mon, const QDict *qdict)
2553
{
2554
    usb_device_del(qdict_get_str(qdict, "devname"));
2555
}
2556

    
2557
/***********************************************************/
2558
/* PCMCIA/Cardbus */
2559

    
2560
static struct pcmcia_socket_entry_s {
2561
    PCMCIASocket *socket;
2562
    struct pcmcia_socket_entry_s *next;
2563
} *pcmcia_sockets = 0;
2564

    
2565
void pcmcia_socket_register(PCMCIASocket *socket)
2566
{
2567
    struct pcmcia_socket_entry_s *entry;
2568

    
2569
    entry = qemu_malloc(sizeof(struct pcmcia_socket_entry_s));
2570
    entry->socket = socket;
2571
    entry->next = pcmcia_sockets;
2572
    pcmcia_sockets = entry;
2573
}
2574

    
2575
void pcmcia_socket_unregister(PCMCIASocket *socket)
2576
{
2577
    struct pcmcia_socket_entry_s *entry, **ptr;
2578

    
2579
    ptr = &pcmcia_sockets;
2580
    for (entry = *ptr; entry; ptr = &entry->next, entry = *ptr)
2581
        if (entry->socket == socket) {
2582
            *ptr = entry->next;
2583
            qemu_free(entry);
2584
        }
2585
}
2586

    
2587
void pcmcia_info(Monitor *mon)
2588
{
2589
    struct pcmcia_socket_entry_s *iter;
2590

    
2591
    if (!pcmcia_sockets)
2592
        monitor_printf(mon, "No PCMCIA sockets\n");
2593

    
2594
    for (iter = pcmcia_sockets; iter; iter = iter->next)
2595
        monitor_printf(mon, "%s: %s\n", iter->socket->slot_string,
2596
                       iter->socket->attached ? iter->socket->card_string :
2597
                       "Empty");
2598
}
2599

    
2600
/***********************************************************/
2601
/* register display */
2602

    
2603
struct DisplayAllocator default_allocator = {
2604
    defaultallocator_create_displaysurface,
2605
    defaultallocator_resize_displaysurface,
2606
    defaultallocator_free_displaysurface
2607
};
2608

    
2609
void register_displaystate(DisplayState *ds)
2610
{
2611
    DisplayState **s;
2612
    s = &display_state;
2613
    while (*s != NULL)
2614
        s = &(*s)->next;
2615
    ds->next = NULL;
2616
    *s = ds;
2617
}
2618

    
2619
DisplayState *get_displaystate(void)
2620
{
2621
    return display_state;
2622
}
2623

    
2624
DisplayAllocator *register_displayallocator(DisplayState *ds, DisplayAllocator *da)
2625
{
2626
    if(ds->allocator ==  &default_allocator) ds->allocator = da;
2627
    return ds->allocator;
2628
}
2629

    
2630
/* dumb display */
2631

    
2632
static void dumb_display_init(void)
2633
{
2634
    DisplayState *ds = qemu_mallocz(sizeof(DisplayState));
2635
    ds->allocator = &default_allocator;
2636
    ds->surface = qemu_create_displaysurface(ds, 640, 480);
2637
    register_displaystate(ds);
2638
}
2639

    
2640
/***********************************************************/
2641
/* I/O handling */
2642

    
2643
typedef struct IOHandlerRecord {
2644
    int fd;
2645
    IOCanRWHandler *fd_read_poll;
2646
    IOHandler *fd_read;
2647
    IOHandler *fd_write;
2648
    int deleted;
2649
    void *opaque;
2650
    /* temporary data */
2651
    struct pollfd *ufd;
2652
    struct IOHandlerRecord *next;
2653
} IOHandlerRecord;
2654

    
2655
static IOHandlerRecord *first_io_handler;
2656

    
2657
/* XXX: fd_read_poll should be suppressed, but an API change is
2658
   necessary in the character devices to suppress fd_can_read(). */
2659
int qemu_set_fd_handler2(int fd,
2660
                         IOCanRWHandler *fd_read_poll,
2661
                         IOHandler *fd_read,
2662
                         IOHandler *fd_write,
2663
                         void *opaque)
2664
{
2665
    IOHandlerRecord **pioh, *ioh;
2666

    
2667
    if (!fd_read && !fd_write) {
2668
        pioh = &first_io_handler;
2669
        for(;;) {
2670
            ioh = *pioh;
2671
            if (ioh == NULL)
2672
                break;
2673
            if (ioh->fd == fd) {
2674
                ioh->deleted = 1;
2675
                break;
2676
            }
2677
            pioh = &ioh->next;
2678
        }
2679
    } else {
2680
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
2681
            if (ioh->fd == fd)
2682
                goto found;
2683
        }
2684
        ioh = qemu_mallocz(sizeof(IOHandlerRecord));
2685
        ioh->next = first_io_handler;
2686
        first_io_handler = ioh;
2687
    found:
2688
        ioh->fd = fd;
2689
        ioh->fd_read_poll = fd_read_poll;
2690
        ioh->fd_read = fd_read;
2691
        ioh->fd_write = fd_write;
2692
        ioh->opaque = opaque;
2693
        ioh->deleted = 0;
2694
    }
2695
    return 0;
2696
}
2697

    
2698
int qemu_set_fd_handler(int fd,
2699
                        IOHandler *fd_read,
2700
                        IOHandler *fd_write,
2701
                        void *opaque)
2702
{
2703
    return qemu_set_fd_handler2(fd, NULL, fd_read, fd_write, opaque);
2704
}
2705

    
2706
#ifdef _WIN32
2707
/***********************************************************/
2708
/* Polling handling */
2709

    
2710
typedef struct PollingEntry {
2711
    PollingFunc *func;
2712
    void *opaque;
2713
    struct PollingEntry *next;
2714
} PollingEntry;
2715

    
2716
static PollingEntry *first_polling_entry;
2717

    
2718
int qemu_add_polling_cb(PollingFunc *func, void *opaque)
2719
{
2720
    PollingEntry **ppe, *pe;
2721
    pe = qemu_mallocz(sizeof(PollingEntry));
2722
    pe->func = func;
2723
    pe->opaque = opaque;
2724
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next);
2725
    *ppe = pe;
2726
    return 0;
2727
}
2728

    
2729
void qemu_del_polling_cb(PollingFunc *func, void *opaque)
2730
{
2731
    PollingEntry **ppe, *pe;
2732
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next) {
2733
        pe = *ppe;
2734
        if (pe->func == func && pe->opaque == opaque) {
2735
            *ppe = pe->next;
2736
            qemu_free(pe);
2737
            break;
2738
        }
2739
    }
2740
}
2741

    
2742
/***********************************************************/
2743
/* Wait objects support */
2744
typedef struct WaitObjects {
2745
    int num;
2746
    HANDLE events[MAXIMUM_WAIT_OBJECTS + 1];
2747
    WaitObjectFunc *func[MAXIMUM_WAIT_OBJECTS + 1];
2748
    void *opaque[MAXIMUM_WAIT_OBJECTS + 1];
2749
} WaitObjects;
2750

    
2751
static WaitObjects wait_objects = {0};
2752

    
2753
int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
2754
{
2755
    WaitObjects *w = &wait_objects;
2756

    
2757
    if (w->num >= MAXIMUM_WAIT_OBJECTS)
2758
        return -1;
2759
    w->events[w->num] = handle;
2760
    w->func[w->num] = func;
2761
    w->opaque[w->num] = opaque;
2762
    w->num++;
2763
    return 0;
2764
}
2765

    
2766
void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
2767
{
2768
    int i, found;
2769
    WaitObjects *w = &wait_objects;
2770

    
2771
    found = 0;
2772
    for (i = 0; i < w->num; i++) {
2773
        if (w->events[i] == handle)
2774
            found = 1;
2775
        if (found) {
2776
            w->events[i] = w->events[i + 1];
2777
            w->func[i] = w->func[i + 1];
2778
            w->opaque[i] = w->opaque[i + 1];
2779
        }
2780
    }
2781
    if (found)
2782
        w->num--;
2783
}
2784
#endif
2785

    
2786
/***********************************************************/
2787
/* ram save/restore */
2788

    
2789
#define RAM_SAVE_FLAG_FULL        0x01 /* Obsolete, not used anymore */
2790
#define RAM_SAVE_FLAG_COMPRESS        0x02
2791
#define RAM_SAVE_FLAG_MEM_SIZE        0x04
2792
#define RAM_SAVE_FLAG_PAGE        0x08
2793
#define RAM_SAVE_FLAG_EOS        0x10
2794

    
2795
static int is_dup_page(uint8_t *page, uint8_t ch)
2796
{
2797
    uint32_t val = ch << 24 | ch << 16 | ch << 8 | ch;
2798
    uint32_t *array = (uint32_t *)page;
2799
    int i;
2800

    
2801
    for (i = 0; i < (TARGET_PAGE_SIZE / 4); i++) {
2802
        if (array[i] != val)
2803
            return 0;
2804
    }
2805

    
2806
    return 1;
2807
}
2808

    
2809
static int ram_save_block(QEMUFile *f)
2810
{
2811
    static ram_addr_t current_addr = 0;
2812
    ram_addr_t saved_addr = current_addr;
2813
    ram_addr_t addr = 0;
2814
    int found = 0;
2815

    
2816
    while (addr < last_ram_offset) {
2817
        if (cpu_physical_memory_get_dirty(current_addr, MIGRATION_DIRTY_FLAG)) {
2818
            uint8_t *p;
2819

    
2820
            cpu_physical_memory_reset_dirty(current_addr,
2821
                                            current_addr + TARGET_PAGE_SIZE,
2822
                                            MIGRATION_DIRTY_FLAG);
2823

    
2824
            p = qemu_get_ram_ptr(current_addr);
2825

    
2826
            if (is_dup_page(p, *p)) {
2827
                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_COMPRESS);
2828
                qemu_put_byte(f, *p);
2829
            } else {
2830
                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_PAGE);
2831
                qemu_put_buffer(f, p, TARGET_PAGE_SIZE);
2832
            }
2833

    
2834
            found = 1;
2835
            break;
2836
        }
2837
        addr += TARGET_PAGE_SIZE;
2838
        current_addr = (saved_addr + addr) % last_ram_offset;
2839
    }
2840

    
2841
    return found;
2842
}
2843

    
2844
static uint64_t bytes_transferred = 0;
2845

    
2846
static ram_addr_t ram_save_remaining(void)
2847
{
2848
    ram_addr_t addr;
2849
    ram_addr_t count = 0;
2850

    
2851
    for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
2852
        if (cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
2853
            count++;
2854
    }
2855

    
2856
    return count;
2857
}
2858

    
2859
uint64_t ram_bytes_remaining(void)
2860
{
2861
    return ram_save_remaining() * TARGET_PAGE_SIZE;
2862
}
2863

    
2864
uint64_t ram_bytes_transferred(void)
2865
{
2866
    return bytes_transferred;
2867
}
2868

    
2869
uint64_t ram_bytes_total(void)
2870
{
2871
    return last_ram_offset;
2872
}
2873

    
2874
static int ram_save_live(QEMUFile *f, int stage, void *opaque)
2875
{
2876
    ram_addr_t addr;
2877
    uint64_t bytes_transferred_last;
2878
    double bwidth = 0;
2879
    uint64_t expected_time = 0;
2880

    
2881
    if (cpu_physical_sync_dirty_bitmap(0, TARGET_PHYS_ADDR_MAX) != 0) {
2882
        qemu_file_set_error(f);
2883
        return 0;
2884
    }
2885

    
2886
    if (stage == 1) {
2887
        /* Make sure all dirty bits are set */
2888
        for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
2889
            if (!cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
2890
                cpu_physical_memory_set_dirty(addr);
2891
        }
2892

    
2893
        /* Enable dirty memory tracking */
2894
        cpu_physical_memory_set_dirty_tracking(1);
2895

    
2896
        qemu_put_be64(f, last_ram_offset | RAM_SAVE_FLAG_MEM_SIZE);
2897
    }
2898

    
2899
    bytes_transferred_last = bytes_transferred;
2900
    bwidth = get_clock();
2901

    
2902
    while (!qemu_file_rate_limit(f)) {
2903
        int ret;
2904

    
2905
        ret = ram_save_block(f);
2906
        bytes_transferred += ret * TARGET_PAGE_SIZE;
2907
        if (ret == 0) /* no more blocks */
2908
            break;
2909
    }
2910

    
2911
    bwidth = get_clock() - bwidth;
2912
    bwidth = (bytes_transferred - bytes_transferred_last) / bwidth;
2913

    
2914
    /* if we haven't transferred anything this round, force expected_time to a
2915
     * a very high value, but without crashing */
2916
    if (bwidth == 0)
2917
        bwidth = 0.000001;
2918

    
2919
    /* try transferring iterative blocks of memory */
2920

    
2921
    if (stage == 3) {
2922

    
2923
        /* flush all remaining blocks regardless of rate limiting */
2924
        while (ram_save_block(f) != 0) {
2925
            bytes_transferred += TARGET_PAGE_SIZE;
2926
        }
2927
        cpu_physical_memory_set_dirty_tracking(0);
2928
    }
2929

    
2930
    qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
2931

    
2932
    expected_time = ram_save_remaining() * TARGET_PAGE_SIZE / bwidth;
2933

    
2934
    return (stage == 2) && (expected_time <= migrate_max_downtime());
2935
}
2936

    
2937
static int ram_load(QEMUFile *f, void *opaque, int version_id)
2938
{
2939
    ram_addr_t addr;
2940
    int flags;
2941

    
2942
    if (version_id != 3)
2943
        return -EINVAL;
2944

    
2945
    do {
2946
        addr = qemu_get_be64(f);
2947

    
2948
        flags = addr & ~TARGET_PAGE_MASK;
2949
        addr &= TARGET_PAGE_MASK;
2950

    
2951
        if (flags & RAM_SAVE_FLAG_MEM_SIZE) {
2952
            if (addr != last_ram_offset)
2953
                return -EINVAL;
2954
        }
2955

    
2956
        if (flags & RAM_SAVE_FLAG_COMPRESS) {
2957
            uint8_t ch = qemu_get_byte(f);
2958
            memset(qemu_get_ram_ptr(addr), ch, TARGET_PAGE_SIZE);
2959
#ifndef _WIN32
2960
            if (ch == 0 &&
2961
                (!kvm_enabled() || kvm_has_sync_mmu())) {
2962
                madvise(qemu_get_ram_ptr(addr), TARGET_PAGE_SIZE, MADV_DONTNEED);
2963
            }
2964
#endif
2965
        } else if (flags & RAM_SAVE_FLAG_PAGE)
2966
            qemu_get_buffer(f, qemu_get_ram_ptr(addr), TARGET_PAGE_SIZE);
2967
    } while (!(flags & RAM_SAVE_FLAG_EOS));
2968

    
2969
    return 0;
2970
}
2971

    
2972
void qemu_service_io(void)
2973
{
2974
    qemu_notify_event();
2975
}
2976

    
2977
/***********************************************************/
2978
/* bottom halves (can be seen as timers which expire ASAP) */
2979

    
2980
struct QEMUBH {
2981
    QEMUBHFunc *cb;
2982
    void *opaque;
2983
    int scheduled;
2984
    int idle;
2985
    int deleted;
2986
    QEMUBH *next;
2987
};
2988

    
2989
static QEMUBH *first_bh = NULL;
2990

    
2991
QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque)
2992
{
2993
    QEMUBH *bh;
2994
    bh = qemu_mallocz(sizeof(QEMUBH));
2995
    bh->cb = cb;
2996
    bh->opaque = opaque;
2997
    bh->next = first_bh;
2998
    first_bh = bh;
2999
    return bh;
3000
}
3001

    
3002
int qemu_bh_poll(void)
3003
{
3004
    QEMUBH *bh, **bhp;
3005
    int ret;
3006

    
3007
    ret = 0;
3008
    for (bh = first_bh; bh; bh = bh->next) {
3009
        if (!bh->deleted && bh->scheduled) {
3010
            bh->scheduled = 0;
3011
            if (!bh->idle)
3012
                ret = 1;
3013
            bh->idle = 0;
3014
            bh->cb(bh->opaque);
3015
        }
3016
    }
3017

    
3018
    /* remove deleted bhs */
3019
    bhp = &first_bh;
3020
    while (*bhp) {
3021
        bh = *bhp;
3022
        if (bh->deleted) {
3023
            *bhp = bh->next;
3024
            qemu_free(bh);
3025
        } else
3026
            bhp = &bh->next;
3027
    }
3028

    
3029
    return ret;
3030
}
3031

    
3032
void qemu_bh_schedule_idle(QEMUBH *bh)
3033
{
3034
    if (bh->scheduled)
3035
        return;
3036
    bh->scheduled = 1;
3037
    bh->idle = 1;
3038
}
3039

    
3040
void qemu_bh_schedule(QEMUBH *bh)
3041
{
3042
    if (bh->scheduled)
3043
        return;
3044
    bh->scheduled = 1;
3045
    bh->idle = 0;
3046
    /* stop the currently executing CPU to execute the BH ASAP */
3047
    qemu_notify_event();
3048
}
3049

    
3050
void qemu_bh_cancel(QEMUBH *bh)
3051
{
3052
    bh->scheduled = 0;
3053
}
3054

    
3055
void qemu_bh_delete(QEMUBH *bh)
3056
{
3057
    bh->scheduled = 0;
3058
    bh->deleted = 1;
3059
}
3060

    
3061
static void qemu_bh_update_timeout(int *timeout)
3062
{
3063
    QEMUBH *bh;
3064

    
3065
    for (bh = first_bh; bh; bh = bh->next) {
3066
        if (!bh->deleted && bh->scheduled) {
3067
            if (bh->idle) {
3068
                /* idle bottom halves will be polled at least
3069
                 * every 10ms */
3070
                *timeout = MIN(10, *timeout);
3071
            } else {
3072
                /* non-idle bottom halves will be executed
3073
                 * immediately */
3074
                *timeout = 0;
3075
                break;
3076
            }
3077
        }
3078
    }
3079
}
3080

    
3081
/***********************************************************/
3082
/* machine registration */
3083

    
3084
static QEMUMachine *first_machine = NULL;
3085
QEMUMachine *current_machine = NULL;
3086

    
3087
int qemu_register_machine(QEMUMachine *m)
3088
{
3089
    QEMUMachine **pm;
3090
    pm = &first_machine;
3091
    while (*pm != NULL)
3092
        pm = &(*pm)->next;
3093
    m->next = NULL;
3094
    *pm = m;
3095
    return 0;
3096
}
3097

    
3098
static QEMUMachine *find_machine(const char *name)
3099
{
3100
    QEMUMachine *m;
3101

    
3102
    for(m = first_machine; m != NULL; m = m->next) {
3103
        if (!strcmp(m->name, name))
3104
            return m;
3105
        if (m->alias && !strcmp(m->alias, name))
3106
            return m;
3107
    }
3108
    return NULL;
3109
}
3110

    
3111
static QEMUMachine *find_default_machine(void)
3112
{
3113
    QEMUMachine *m;
3114

    
3115
    for(m = first_machine; m != NULL; m = m->next) {
3116
        if (m->is_default) {
3117
            return m;
3118
        }
3119
    }
3120
    return NULL;
3121
}
3122

    
3123
/***********************************************************/
3124
/* main execution loop */
3125

    
3126
static void gui_update(void *opaque)
3127
{
3128
    uint64_t interval = GUI_REFRESH_INTERVAL;
3129
    DisplayState *ds = opaque;
3130
    DisplayChangeListener *dcl = ds->listeners;
3131

    
3132
    dpy_refresh(ds);
3133

    
3134
    while (dcl != NULL) {
3135
        if (dcl->gui_timer_interval &&
3136
            dcl->gui_timer_interval < interval)
3137
            interval = dcl->gui_timer_interval;
3138
        dcl = dcl->next;
3139
    }
3140
    qemu_mod_timer(ds->gui_timer, interval + qemu_get_clock(rt_clock));
3141
}
3142

    
3143
static void nographic_update(void *opaque)
3144
{
3145
    uint64_t interval = GUI_REFRESH_INTERVAL;
3146

    
3147
    qemu_mod_timer(nographic_timer, interval + qemu_get_clock(rt_clock));
3148
}
3149

    
3150
struct vm_change_state_entry {
3151
    VMChangeStateHandler *cb;
3152
    void *opaque;
3153
    QLIST_ENTRY (vm_change_state_entry) entries;
3154
};
3155

    
3156
static QLIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head;
3157

    
3158
VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
3159
                                                     void *opaque)
3160
{
3161
    VMChangeStateEntry *e;
3162

    
3163
    e = qemu_mallocz(sizeof (*e));
3164

    
3165
    e->cb = cb;
3166
    e->opaque = opaque;
3167
    QLIST_INSERT_HEAD(&vm_change_state_head, e, entries);
3168
    return e;
3169
}
3170

    
3171
void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
3172
{
3173
    QLIST_REMOVE (e, entries);
3174
    qemu_free (e);
3175
}
3176

    
3177
static void vm_state_notify(int running, int reason)
3178
{
3179
    VMChangeStateEntry *e;
3180

    
3181
    for (e = vm_change_state_head.lh_first; e; e = e->entries.le_next) {
3182
        e->cb(e->opaque, running, reason);
3183
    }
3184
}
3185

    
3186
static void resume_all_vcpus(void);
3187
static void pause_all_vcpus(void);
3188

    
3189
void vm_start(void)
3190
{
3191
    if (!vm_running) {
3192
        cpu_enable_ticks();
3193
        vm_running = 1;
3194
        vm_state_notify(1, 0);
3195
        qemu_rearm_alarm_timer(alarm_timer);
3196
        resume_all_vcpus();
3197
    }
3198
}
3199

    
3200
/* reset/shutdown handler */
3201

    
3202
typedef struct QEMUResetEntry {
3203
    QTAILQ_ENTRY(QEMUResetEntry) entry;
3204
    QEMUResetHandler *func;
3205
    void *opaque;
3206
} QEMUResetEntry;
3207

    
3208
static QTAILQ_HEAD(reset_handlers, QEMUResetEntry) reset_handlers =
3209
    QTAILQ_HEAD_INITIALIZER(reset_handlers);
3210
static int reset_requested;
3211
static int shutdown_requested;
3212
static int powerdown_requested;
3213
static int debug_requested;
3214
static int vmstop_requested;
3215

    
3216
int qemu_shutdown_requested(void)
3217
{
3218
    int r = shutdown_requested;
3219
    shutdown_requested = 0;
3220
    return r;
3221
}
3222

    
3223
int qemu_reset_requested(void)
3224
{
3225
    int r = reset_requested;
3226
    reset_requested = 0;
3227
    return r;
3228
}
3229

    
3230
int qemu_powerdown_requested(void)
3231
{
3232
    int r = powerdown_requested;
3233
    powerdown_requested = 0;
3234
    return r;
3235
}
3236

    
3237
static int qemu_debug_requested(void)
3238
{
3239
    int r = debug_requested;
3240
    debug_requested = 0;
3241
    return r;
3242
}
3243

    
3244
static int qemu_vmstop_requested(void)
3245
{
3246
    int r = vmstop_requested;
3247
    vmstop_requested = 0;
3248
    return r;
3249
}
3250

    
3251
static void do_vm_stop(int reason)
3252
{
3253
    if (vm_running) {
3254
        cpu_disable_ticks();
3255
        vm_running = 0;
3256
        pause_all_vcpus();
3257
        vm_state_notify(0, reason);
3258
    }
3259
}
3260

    
3261
void qemu_register_reset(QEMUResetHandler *func, void *opaque)
3262
{
3263
    QEMUResetEntry *re = qemu_mallocz(sizeof(QEMUResetEntry));
3264

    
3265
    re->func = func;
3266
    re->opaque = opaque;
3267
    QTAILQ_INSERT_TAIL(&reset_handlers, re, entry);
3268
}
3269

    
3270
void qemu_unregister_reset(QEMUResetHandler *func, void *opaque)
3271
{
3272
    QEMUResetEntry *re;
3273

    
3274
    QTAILQ_FOREACH(re, &reset_handlers, entry) {
3275
        if (re->func == func && re->opaque == opaque) {
3276
            QTAILQ_REMOVE(&reset_handlers, re, entry);
3277
            qemu_free(re);
3278
            return;
3279
        }
3280
    }
3281
}
3282

    
3283
void qemu_system_reset(void)
3284
{
3285
    QEMUResetEntry *re, *nre;
3286

    
3287
    /* reset all devices */
3288
    QTAILQ_FOREACH_SAFE(re, &reset_handlers, entry, nre) {
3289
        re->func(re->opaque);
3290
    }
3291
}
3292

    
3293
void qemu_system_reset_request(void)
3294
{
3295
    if (no_reboot) {
3296
        shutdown_requested = 1;
3297
    } else {
3298
        reset_requested = 1;
3299
    }
3300
    qemu_notify_event();
3301
}
3302

    
3303
void qemu_system_shutdown_request(void)
3304
{
3305
    shutdown_requested = 1;
3306
    qemu_notify_event();
3307
}
3308

    
3309
void qemu_system_powerdown_request(void)
3310
{
3311
    powerdown_requested = 1;
3312
    qemu_notify_event();
3313
}
3314

    
3315
#ifdef CONFIG_IOTHREAD
3316
static void qemu_system_vmstop_request(int reason)
3317
{
3318
    vmstop_requested = reason;
3319
    qemu_notify_event();
3320
}
3321
#endif
3322

    
3323
#ifndef _WIN32
3324
static int io_thread_fd = -1;
3325

    
3326
static void qemu_event_increment(void)
3327
{
3328
    static const char byte = 0;
3329

    
3330
    if (io_thread_fd == -1)
3331
        return;
3332

    
3333
    write(io_thread_fd, &byte, sizeof(byte));
3334
}
3335

    
3336
static void qemu_event_read(void *opaque)
3337
{
3338
    int fd = (unsigned long)opaque;
3339
    ssize_t len;
3340

    
3341
    /* Drain the notify pipe */
3342
    do {
3343
        char buffer[512];
3344
        len = read(fd, buffer, sizeof(buffer));
3345
    } while ((len == -1 && errno == EINTR) || len > 0);
3346
}
3347

    
3348
static int qemu_event_init(void)
3349
{
3350
    int err;
3351
    int fds[2];
3352

    
3353
    err = pipe(fds);
3354
    if (err == -1)
3355
        return -errno;
3356

    
3357
    err = fcntl_setfl(fds[0], O_NONBLOCK);
3358
    if (err < 0)
3359
        goto fail;
3360

    
3361
    err = fcntl_setfl(fds[1], O_NONBLOCK);
3362
    if (err < 0)
3363
        goto fail;
3364

    
3365
    qemu_set_fd_handler2(fds[0], NULL, qemu_event_read, NULL,
3366
                         (void *)(unsigned long)fds[0]);
3367

    
3368
    io_thread_fd = fds[1];
3369
    return 0;
3370

    
3371
fail:
3372
    close(fds[0]);
3373
    close(fds[1]);
3374
    return err;
3375
}
3376
#else
3377
HANDLE qemu_event_handle;
3378

    
3379
static void dummy_event_handler(void *opaque)
3380
{
3381
}
3382

    
3383
static int qemu_event_init(void)
3384
{
3385
    qemu_event_handle = CreateEvent(NULL, FALSE, FALSE, NULL);
3386
    if (!qemu_event_handle) {
3387
        fprintf(stderr, "Failed CreateEvent: %ld\n", GetLastError());
3388
        return -1;
3389
    }
3390
    qemu_add_wait_object(qemu_event_handle, dummy_event_handler, NULL);
3391
    return 0;
3392
}
3393

    
3394
static void qemu_event_increment(void)
3395
{
3396
    if (!SetEvent(qemu_event_handle)) {
3397
        fprintf(stderr, "qemu_event_increment: SetEvent failed: %ld\n",
3398
                GetLastError());
3399
        exit (1);
3400
    }
3401
}
3402
#endif
3403

    
3404
static int cpu_can_run(CPUState *env)
3405
{
3406
    if (env->stop)
3407
        return 0;
3408
    if (env->stopped)
3409
        return 0;
3410
    return 1;
3411
}
3412

    
3413
#ifndef CONFIG_IOTHREAD
3414
static int qemu_init_main_loop(void)
3415
{
3416
    return qemu_event_init();
3417
}
3418

    
3419
void qemu_init_vcpu(void *_env)
3420
{
3421
    CPUState *env = _env;
3422

    
3423
    if (kvm_enabled())
3424
        kvm_init_vcpu(env);
3425
    env->nr_cores = smp_cores;
3426
    env->nr_threads = smp_threads;
3427
    return;
3428
}
3429

    
3430
int qemu_cpu_self(void *env)
3431
{
3432
    return 1;
3433
}
3434

    
3435
static void resume_all_vcpus(void)
3436
{
3437
}
3438

    
3439
static void pause_all_vcpus(void)
3440
{
3441
}
3442

    
3443
void qemu_cpu_kick(void *env)
3444
{
3445
    return;
3446
}
3447

    
3448
void qemu_notify_event(void)
3449
{
3450
    CPUState *env = cpu_single_env;
3451

    
3452
    if (env) {
3453
        cpu_exit(env);
3454
    }
3455
}
3456

    
3457
#define qemu_mutex_lock_iothread() do { } while (0)
3458
#define qemu_mutex_unlock_iothread() do { } while (0)
3459

    
3460
void vm_stop(int reason)
3461
{
3462
    do_vm_stop(reason);
3463
}
3464

    
3465
#else /* CONFIG_IOTHREAD */
3466

    
3467
#include "qemu-thread.h"
3468

    
3469
QemuMutex qemu_global_mutex;
3470
static QemuMutex qemu_fair_mutex;
3471

    
3472
static QemuThread io_thread;
3473

    
3474
static QemuThread *tcg_cpu_thread;
3475
static QemuCond *tcg_halt_cond;
3476

    
3477
static int qemu_system_ready;
3478
/* cpu creation */
3479
static QemuCond qemu_cpu_cond;
3480
/* system init */
3481
static QemuCond qemu_system_cond;
3482
static QemuCond qemu_pause_cond;
3483

    
3484
static void block_io_signals(void);
3485
static void unblock_io_signals(void);
3486
static int tcg_has_work(void);
3487

    
3488
static int qemu_init_main_loop(void)
3489
{
3490
    int ret;
3491

    
3492
    ret = qemu_event_init();
3493
    if (ret)
3494
        return ret;
3495

    
3496
    qemu_cond_init(&qemu_pause_cond);
3497
    qemu_mutex_init(&qemu_fair_mutex);
3498
    qemu_mutex_init(&qemu_global_mutex);
3499
    qemu_mutex_lock(&qemu_global_mutex);
3500

    
3501
    unblock_io_signals();
3502
    qemu_thread_self(&io_thread);
3503

    
3504
    return 0;
3505
}
3506

    
3507
static void qemu_wait_io_event(CPUState *env)
3508
{
3509
    while (!tcg_has_work())
3510
        qemu_cond_timedwait(env->halt_cond, &qemu_global_mutex, 1000);
3511

    
3512
    qemu_mutex_unlock(&qemu_global_mutex);
3513

    
3514
    /*
3515
     * Users of qemu_global_mutex can be starved, having no chance
3516
     * to acquire it since this path will get to it first.
3517
     * So use another lock to provide fairness.
3518
     */
3519
    qemu_mutex_lock(&qemu_fair_mutex);
3520
    qemu_mutex_unlock(&qemu_fair_mutex);
3521

    
3522
    qemu_mutex_lock(&qemu_global_mutex);
3523
    if (env->stop) {
3524
        env->stop = 0;
3525
        env->stopped = 1;
3526
        qemu_cond_signal(&qemu_pause_cond);
3527
    }
3528
}
3529

    
3530
static int qemu_cpu_exec(CPUState *env);
3531

    
3532
static void *kvm_cpu_thread_fn(void *arg)
3533
{
3534
    CPUState *env = arg;
3535

    
3536
    block_io_signals();
3537
    qemu_thread_self(env->thread);
3538
    if (kvm_enabled())
3539
        kvm_init_vcpu(env);
3540

    
3541
    /* signal CPU creation */
3542
    qemu_mutex_lock(&qemu_global_mutex);
3543
    env->created = 1;
3544
    qemu_cond_signal(&qemu_cpu_cond);
3545

    
3546
    /* and wait for machine initialization */
3547
    while (!qemu_system_ready)
3548
        qemu_cond_timedwait(&qemu_system_cond, &qemu_global_mutex, 100);
3549

    
3550
    while (1) {
3551
        if (cpu_can_run(env))
3552
            qemu_cpu_exec(env);
3553
        qemu_wait_io_event(env);
3554
    }
3555

    
3556
    return NULL;
3557
}
3558

    
3559
static void tcg_cpu_exec(void);
3560

    
3561
static void *tcg_cpu_thread_fn(void *arg)
3562
{
3563
    CPUState *env = arg;
3564

    
3565
    block_io_signals();
3566
    qemu_thread_self(env->thread);
3567

    
3568
    /* signal CPU creation */
3569
    qemu_mutex_lock(&qemu_global_mutex);
3570
    for (env = first_cpu; env != NULL; env = env->next_cpu)
3571
        env->created = 1;
3572
    qemu_cond_signal(&qemu_cpu_cond);
3573

    
3574
    /* and wait for machine initialization */
3575
    while (!qemu_system_ready)
3576
        qemu_cond_timedwait(&qemu_system_cond, &qemu_global_mutex, 100);
3577

    
3578
    while (1) {
3579
        tcg_cpu_exec();
3580
        qemu_wait_io_event(cur_cpu);
3581
    }
3582

    
3583
    return NULL;
3584
}
3585

    
3586
void qemu_cpu_kick(void *_env)
3587
{
3588
    CPUState *env = _env;
3589
    qemu_cond_broadcast(env->halt_cond);
3590
    if (kvm_enabled())
3591
        qemu_thread_signal(env->thread, SIGUSR1);
3592
}
3593

    
3594
int qemu_cpu_self(void *env)
3595
{
3596
    return (cpu_single_env != NULL);
3597
}
3598

    
3599
static void cpu_signal(int sig)
3600
{
3601
    if (cpu_single_env)
3602
        cpu_exit(cpu_single_env);
3603
}
3604

    
3605
static void block_io_signals(void)
3606
{
3607
    sigset_t set;
3608
    struct sigaction sigact;
3609

    
3610
    sigemptyset(&set);
3611
    sigaddset(&set, SIGUSR2);
3612
    sigaddset(&set, SIGIO);
3613
    sigaddset(&set, SIGALRM);
3614
    pthread_sigmask(SIG_BLOCK, &set, NULL);
3615

    
3616
    sigemptyset(&set);
3617
    sigaddset(&set, SIGUSR1);
3618
    pthread_sigmask(SIG_UNBLOCK, &set, NULL);
3619

    
3620
    memset(&sigact, 0, sizeof(sigact));
3621
    sigact.sa_handler = cpu_signal;
3622
    sigaction(SIGUSR1, &sigact, NULL);
3623
}
3624

    
3625
static void unblock_io_signals(void)
3626
{
3627
    sigset_t set;
3628

    
3629
    sigemptyset(&set);
3630
    sigaddset(&set, SIGUSR2);
3631
    sigaddset(&set, SIGIO);
3632
    sigaddset(&set, SIGALRM);
3633
    pthread_sigmask(SIG_UNBLOCK, &set, NULL);
3634

    
3635
    sigemptyset(&set);
3636
    sigaddset(&set, SIGUSR1);
3637
    pthread_sigmask(SIG_BLOCK, &set, NULL);
3638
}
3639

    
3640
static void qemu_signal_lock(unsigned int msecs)
3641
{
3642
    qemu_mutex_lock(&qemu_fair_mutex);
3643

    
3644
    while (qemu_mutex_trylock(&qemu_global_mutex)) {
3645
        qemu_thread_signal(tcg_cpu_thread, SIGUSR1);
3646
        if (!qemu_mutex_timedlock(&qemu_global_mutex, msecs))
3647
            break;
3648
    }
3649
    qemu_mutex_unlock(&qemu_fair_mutex);
3650
}
3651

    
3652
static void qemu_mutex_lock_iothread(void)
3653
{
3654
    if (kvm_enabled()) {
3655
        qemu_mutex_lock(&qemu_fair_mutex);
3656
        qemu_mutex_lock(&qemu_global_mutex);
3657
        qemu_mutex_unlock(&qemu_fair_mutex);
3658
    } else
3659
        qemu_signal_lock(100);
3660
}
3661

    
3662
static void qemu_mutex_unlock_iothread(void)
3663
{
3664
    qemu_mutex_unlock(&qemu_global_mutex);
3665
}
3666

    
3667
static int all_vcpus_paused(void)
3668
{
3669
    CPUState *penv = first_cpu;
3670

    
3671
    while (penv) {
3672
        if (!penv->stopped)
3673
            return 0;
3674
        penv = (CPUState *)penv->next_cpu;
3675
    }
3676

    
3677
    return 1;
3678
}
3679

    
3680
static void pause_all_vcpus(void)
3681
{
3682
    CPUState *penv = first_cpu;
3683

    
3684
    while (penv) {
3685
        penv->stop = 1;
3686
        qemu_thread_signal(penv->thread, SIGUSR1);
3687
        qemu_cpu_kick(penv);
3688
        penv = (CPUState *)penv->next_cpu;
3689
    }
3690

    
3691
    while (!all_vcpus_paused()) {
3692
        qemu_cond_timedwait(&qemu_pause_cond, &qemu_global_mutex, 100);
3693
        penv = first_cpu;
3694
        while (penv) {
3695
            qemu_thread_signal(penv->thread, SIGUSR1);
3696
            penv = (CPUState *)penv->next_cpu;
3697
        }
3698
    }
3699
}
3700

    
3701
static void resume_all_vcpus(void)
3702
{
3703
    CPUState *penv = first_cpu;
3704

    
3705
    while (penv) {
3706
        penv->stop = 0;
3707
        penv->stopped = 0;
3708
        qemu_thread_signal(penv->thread, SIGUSR1);
3709
        qemu_cpu_kick(penv);
3710
        penv = (CPUState *)penv->next_cpu;
3711
    }
3712
}
3713

    
3714
static void tcg_init_vcpu(void *_env)
3715
{
3716
    CPUState *env = _env;
3717
    /* share a single thread for all cpus with TCG */
3718
    if (!tcg_cpu_thread) {
3719
        env->thread = qemu_mallocz(sizeof(QemuThread));
3720
        env->halt_cond = qemu_mallocz(sizeof(QemuCond));
3721
        qemu_cond_init(env->halt_cond);
3722
        qemu_thread_create(env->thread, tcg_cpu_thread_fn, env);
3723
        while (env->created == 0)
3724
            qemu_cond_timedwait(&qemu_cpu_cond, &qemu_global_mutex, 100);
3725
        tcg_cpu_thread = env->thread;
3726
        tcg_halt_cond = env->halt_cond;
3727
    } else {
3728
        env->thread = tcg_cpu_thread;
3729
        env->halt_cond = tcg_halt_cond;
3730
    }
3731
}
3732

    
3733
static void kvm_start_vcpu(CPUState *env)
3734
{
3735
    env->thread = qemu_mallocz(sizeof(QemuThread));
3736
    env->halt_cond = qemu_mallocz(sizeof(QemuCond));
3737
    qemu_cond_init(env->halt_cond);
3738
    qemu_thread_create(env->thread, kvm_cpu_thread_fn, env);
3739
    while (env->created == 0)
3740
        qemu_cond_timedwait(&qemu_cpu_cond, &qemu_global_mutex, 100);
3741
}
3742

    
3743
void qemu_init_vcpu(void *_env)
3744
{
3745
    CPUState *env = _env;
3746

    
3747
    if (kvm_enabled())
3748
        kvm_start_vcpu(env);
3749
    else
3750
        tcg_init_vcpu(env);
3751
    env->nr_cores = smp_cores;
3752
    env->nr_threads = smp_threads;
3753
}
3754

    
3755
void qemu_notify_event(void)
3756
{
3757
    qemu_event_increment();
3758
}
3759

    
3760
void vm_stop(int reason)
3761
{
3762
    QemuThread me;
3763
    qemu_thread_self(&me);
3764

    
3765
    if (!qemu_thread_equal(&me, &io_thread)) {
3766
        qemu_system_vmstop_request(reason);
3767
        /*
3768
         * FIXME: should not return to device code in case
3769
         * vm_stop() has been requested.
3770
         */
3771
        if (cpu_single_env) {
3772
            cpu_exit(cpu_single_env);
3773
            cpu_single_env->stop = 1;
3774
        }
3775
        return;
3776
    }
3777
    do_vm_stop(reason);
3778
}
3779

    
3780
#endif
3781

    
3782

    
3783
#ifdef _WIN32
3784
static void host_main_loop_wait(int *timeout)
3785
{
3786
    int ret, ret2, i;
3787
    PollingEntry *pe;
3788

    
3789

    
3790
    /* XXX: need to suppress polling by better using win32 events */
3791
    ret = 0;
3792
    for(pe = first_polling_entry; pe != NULL; pe = pe->next) {
3793
        ret |= pe->func(pe->opaque);
3794
    }
3795
    if (ret == 0) {
3796
        int err;
3797
        WaitObjects *w = &wait_objects;
3798

    
3799
        ret = WaitForMultipleObjects(w->num, w->events, FALSE, *timeout);
3800
        if (WAIT_OBJECT_0 + 0 <= ret && ret <= WAIT_OBJECT_0 + w->num - 1) {
3801
            if (w->func[ret - WAIT_OBJECT_0])
3802
                w->func[ret - WAIT_OBJECT_0](w->opaque[ret - WAIT_OBJECT_0]);
3803

    
3804
            /* Check for additional signaled events */
3805
            for(i = (ret - WAIT_OBJECT_0 + 1); i < w->num; i++) {
3806

    
3807
                /* Check if event is signaled */
3808
                ret2 = WaitForSingleObject(w->events[i], 0);
3809
                if(ret2 == WAIT_OBJECT_0) {
3810
                    if (w->func[i])
3811
                        w->func[i](w->opaque[i]);
3812
                } else if (ret2 == WAIT_TIMEOUT) {
3813
                } else {
3814
                    err = GetLastError();
3815
                    fprintf(stderr, "WaitForSingleObject error %d %d\n", i, err);
3816
                }
3817
            }
3818
        } else if (ret == WAIT_TIMEOUT) {
3819
        } else {
3820
            err = GetLastError();
3821
            fprintf(stderr, "WaitForMultipleObjects error %d %d\n", ret, err);
3822
        }
3823
    }
3824

    
3825
    *timeout = 0;
3826
}
3827
#else
3828
static void host_main_loop_wait(int *timeout)
3829
{
3830
}
3831
#endif
3832

    
3833
void main_loop_wait(int timeout)
3834
{
3835
    IOHandlerRecord *ioh;
3836
    fd_set rfds, wfds, xfds;
3837
    int ret, nfds;
3838
    struct timeval tv;
3839

    
3840
    qemu_bh_update_timeout(&timeout);
3841

    
3842
    host_main_loop_wait(&timeout);
3843

    
3844
    /* poll any events */
3845
    /* XXX: separate device handlers from system ones */
3846
    nfds = -1;
3847
    FD_ZERO(&rfds);
3848
    FD_ZERO(&wfds);
3849
    FD_ZERO(&xfds);
3850
    for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
3851
        if (ioh->deleted)
3852
            continue;
3853
        if (ioh->fd_read &&
3854
            (!ioh->fd_read_poll ||
3855
             ioh->fd_read_poll(ioh->opaque) != 0)) {
3856
            FD_SET(ioh->fd, &rfds);
3857
            if (ioh->fd > nfds)
3858
                nfds = ioh->fd;
3859
        }
3860
        if (ioh->fd_write) {
3861
            FD_SET(ioh->fd, &wfds);
3862
            if (ioh->fd > nfds)
3863
                nfds = ioh->fd;
3864
        }
3865
    }
3866

    
3867
    tv.tv_sec = timeout / 1000;
3868
    tv.tv_usec = (timeout % 1000) * 1000;
3869

    
3870
    slirp_select_fill(&nfds, &rfds, &wfds, &xfds);
3871

    
3872
    qemu_mutex_unlock_iothread();
3873
    ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv);
3874
    qemu_mutex_lock_iothread();
3875
    if (ret > 0) {
3876
        IOHandlerRecord **pioh;
3877

    
3878
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
3879
            if (!ioh->deleted && ioh->fd_read && FD_ISSET(ioh->fd, &rfds)) {
3880
                ioh->fd_read(ioh->opaque);
3881
            }
3882
            if (!ioh->deleted && ioh->fd_write && FD_ISSET(ioh->fd, &wfds)) {
3883
                ioh->fd_write(ioh->opaque);
3884
            }
3885
        }
3886

    
3887
        /* remove deleted IO handlers */
3888
        pioh = &first_io_handler;
3889
        while (*pioh) {
3890
            ioh = *pioh;
3891
            if (ioh->deleted) {
3892
                *pioh = ioh->next;
3893
                qemu_free(ioh);
3894
            } else
3895
                pioh = &ioh->next;
3896
        }
3897
    }
3898

    
3899
    slirp_select_poll(&rfds, &wfds, &xfds, (ret < 0));
3900

    
3901
    /* rearm timer, if not periodic */
3902
    if (alarm_timer->flags & ALARM_FLAG_EXPIRED) {
3903
        alarm_timer->flags &= ~ALARM_FLAG_EXPIRED;
3904
        qemu_rearm_alarm_timer(alarm_timer);
3905
    }
3906

    
3907
    /* vm time timers */
3908
    if (vm_running) {
3909
        if (!cur_cpu || likely(!(cur_cpu->singlestep_enabled & SSTEP_NOTIMER)))
3910
            qemu_run_timers(&active_timers[QEMU_TIMER_VIRTUAL],
3911
                qemu_get_clock(vm_clock));
3912
    }
3913

    
3914
    /* real time timers */
3915
    qemu_run_timers(&active_timers[QEMU_TIMER_REALTIME],
3916
                    qemu_get_clock(rt_clock));
3917

    
3918
    /* Check bottom-halves last in case any of the earlier events triggered
3919
       them.  */
3920
    qemu_bh_poll();
3921

    
3922
}
3923

    
3924
static int qemu_cpu_exec(CPUState *env)
3925
{
3926
    int ret;
3927
#ifdef CONFIG_PROFILER
3928
    int64_t ti;
3929
#endif
3930

    
3931
#ifdef CONFIG_PROFILER
3932
    ti = profile_getclock();
3933
#endif
3934
    if (use_icount) {
3935
        int64_t count;
3936
        int decr;
3937
        qemu_icount -= (env->icount_decr.u16.low + env->icount_extra);
3938
        env->icount_decr.u16.low = 0;
3939
        env->icount_extra = 0;
3940
        count = qemu_next_deadline();
3941
        count = (count + (1 << icount_time_shift) - 1)
3942
                >> icount_time_shift;
3943
        qemu_icount += count;
3944
        decr = (count > 0xffff) ? 0xffff : count;
3945
        count -= decr;
3946
        env->icount_decr.u16.low = decr;
3947
        env->icount_extra = count;
3948
    }
3949
    ret = cpu_exec(env);
3950
#ifdef CONFIG_PROFILER
3951
    qemu_time += profile_getclock() - ti;
3952
#endif
3953
    if (use_icount) {
3954
        /* Fold pending instructions back into the
3955
           instruction counter, and clear the interrupt flag.  */
3956
        qemu_icount -= (env->icount_decr.u16.low
3957
                        + env->icount_extra);
3958
        env->icount_decr.u32 = 0;
3959
        env->icount_extra = 0;
3960
    }
3961
    return ret;
3962
}
3963

    
3964
static void tcg_cpu_exec(void)
3965
{
3966
    int ret = 0;
3967

    
3968
    if (next_cpu == NULL)
3969
        next_cpu = first_cpu;
3970
    for (; next_cpu != NULL; next_cpu = next_cpu->next_cpu) {
3971
        CPUState *env = cur_cpu = next_cpu;
3972

    
3973
        if (!vm_running)
3974
            break;
3975
        if (timer_alarm_pending) {
3976
            timer_alarm_pending = 0;
3977
            break;
3978
        }
3979
        if (cpu_can_run(env))
3980
            ret = qemu_cpu_exec(env);
3981
        if (ret == EXCP_DEBUG) {
3982
            gdb_set_stop_cpu(env);
3983
            debug_requested = 1;
3984
            break;
3985
        }
3986
    }
3987
}
3988

    
3989
static int cpu_has_work(CPUState *env)
3990
{
3991
    if (env->stop)
3992
        return 1;
3993
    if (env->stopped)
3994
        return 0;
3995
    if (!env->halted)
3996
        return 1;
3997
    if (qemu_cpu_has_work(env))
3998
        return 1;
3999
    return 0;
4000
}
4001

    
4002
static int tcg_has_work(void)
4003
{
4004
    CPUState *env;
4005

    
4006
    for (env = first_cpu; env != NULL; env = env->next_cpu)
4007
        if (cpu_has_work(env))
4008
            return 1;
4009
    return 0;
4010
}
4011

    
4012
static int qemu_calculate_timeout(void)
4013
{
4014
#ifndef CONFIG_IOTHREAD
4015
    int timeout;
4016

    
4017
    if (!vm_running)
4018
        timeout = 5000;
4019
    else if (tcg_has_work())
4020
        timeout = 0;
4021
    else if (!use_icount)
4022
        timeout = 5000;
4023
    else {
4024
     /* XXX: use timeout computed from timers */
4025
        int64_t add;
4026
        int64_t delta;
4027
        /* Advance virtual time to the next event.  */
4028
        if (use_icount == 1) {
4029
            /* When not using an adaptive execution frequency
4030
               we tend to get badly out of sync with real time,
4031
               so just delay for a reasonable amount of time.  */
4032
            delta = 0;
4033
        } else {
4034
            delta = cpu_get_icount() - cpu_get_clock();
4035
        }
4036
        if (delta > 0) {
4037
            /* If virtual time is ahead of real time then just
4038
               wait for IO.  */
4039
            timeout = (delta / 1000000) + 1;
4040
        } else {
4041
            /* Wait for either IO to occur or the next
4042
               timer event.  */
4043
            add = qemu_next_deadline();
4044
            /* We advance the timer before checking for IO.
4045
               Limit the amount we advance so that early IO
4046
               activity won't get the guest too far ahead.  */
4047
            if (add > 10000000)
4048
                add = 10000000;
4049
            delta += add;
4050
            add = (add + (1 << icount_time_shift) - 1)
4051
                  >> icount_time_shift;
4052
            qemu_icount += add;
4053
            timeout = delta / 1000000;
4054
            if (timeout < 0)
4055
                timeout = 0;
4056
        }
4057
    }
4058

    
4059
    return timeout;
4060
#else /* CONFIG_IOTHREAD */
4061
    return 1000;
4062
#endif
4063
}
4064

    
4065
static int vm_can_run(void)
4066
{
4067
    if (powerdown_requested)
4068
        return 0;
4069
    if (reset_requested)
4070
        return 0;
4071
    if (shutdown_requested)
4072
        return 0;
4073
    if (debug_requested)
4074
        return 0;
4075
    return 1;
4076
}
4077

    
4078
qemu_irq qemu_system_powerdown;
4079

    
4080
static void main_loop(void)
4081
{
4082
    int r;
4083

    
4084
#ifdef CONFIG_IOTHREAD
4085
    qemu_system_ready = 1;
4086
    qemu_cond_broadcast(&qemu_system_cond);
4087
#endif
4088

    
4089
    for (;;) {
4090
        do {
4091
#ifdef CONFIG_PROFILER
4092
            int64_t ti;
4093
#endif
4094
#ifndef CONFIG_IOTHREAD
4095
            tcg_cpu_exec();
4096
#endif
4097
#ifdef CONFIG_PROFILER
4098
            ti = profile_getclock();
4099
#endif
4100
            main_loop_wait(qemu_calculate_timeout());
4101
#ifdef CONFIG_PROFILER
4102
            dev_time += profile_getclock() - ti;
4103
#endif
4104
        } while (vm_can_run());
4105

    
4106
        if (qemu_debug_requested())
4107
            vm_stop(EXCP_DEBUG);
4108
        if (qemu_shutdown_requested()) {
4109
            if (no_shutdown) {
4110
                vm_stop(0);
4111
                no_shutdown = 0;
4112
            } else
4113
                break;
4114
        }
4115
        if (qemu_reset_requested()) {
4116
            pause_all_vcpus();
4117
            qemu_system_reset();
4118
            resume_all_vcpus();
4119
        }
4120
        if (qemu_powerdown_requested()) {
4121
            qemu_irq_raise(qemu_system_powerdown);
4122
        }
4123
        if ((r = qemu_vmstop_requested()))
4124
            vm_stop(r);
4125
    }
4126
    pause_all_vcpus();
4127
}
4128

    
4129
static void version(void)
4130
{
4131
    printf("QEMU PC emulator version " QEMU_VERSION QEMU_PKGVERSION ", Copyright (c) 2003-2008 Fabrice Bellard\n");
4132
}
4133

    
4134
static void help(int exitcode)
4135
{
4136
    version();
4137
    printf("usage: %s [options] [disk_image]\n"
4138
           "\n"
4139
           "'disk_image' is a raw hard image image for IDE hard disk 0\n"
4140
           "\n"
4141
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4142
           opt_help
4143
#define DEFHEADING(text) stringify(text) "\n"
4144
#include "qemu-options.h"
4145
#undef DEF
4146
#undef DEFHEADING
4147
#undef GEN_DOCS
4148
           "\n"
4149
           "During emulation, the following keys are useful:\n"
4150
           "ctrl-alt-f      toggle full screen\n"
4151
           "ctrl-alt-n      switch to virtual console 'n'\n"
4152
           "ctrl-alt        toggle mouse and keyboard grab\n"
4153
           "\n"
4154
           "When using -nographic, press 'ctrl-a h' to get some help.\n"
4155
           ,
4156
           "qemu",
4157
           DEFAULT_RAM_SIZE,
4158
#ifndef _WIN32
4159
           DEFAULT_NETWORK_SCRIPT,
4160
           DEFAULT_NETWORK_DOWN_SCRIPT,
4161
#endif
4162
           DEFAULT_GDBSTUB_PORT,
4163
           "/tmp/qemu.log");
4164
    exit(exitcode);
4165
}
4166

    
4167
#define HAS_ARG 0x0001
4168

    
4169
enum {
4170
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4171
    opt_enum,
4172
#define DEFHEADING(text)
4173
#include "qemu-options.h"
4174
#undef DEF
4175
#undef DEFHEADING
4176
#undef GEN_DOCS
4177
};
4178

    
4179
typedef struct QEMUOption {
4180
    const char *name;
4181
    int flags;
4182
    int index;
4183
} QEMUOption;
4184

    
4185
static const QEMUOption qemu_options[] = {
4186
    { "h", 0, QEMU_OPTION_h },
4187
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4188
    { option, opt_arg, opt_enum },
4189
#define DEFHEADING(text)
4190
#include "qemu-options.h"
4191
#undef DEF
4192
#undef DEFHEADING
4193
#undef GEN_DOCS
4194
    { NULL },
4195
};
4196

    
4197
#ifdef HAS_AUDIO
4198
struct soundhw soundhw[] = {
4199
#ifdef HAS_AUDIO_CHOICE
4200
#if defined(TARGET_I386) || defined(TARGET_MIPS)
4201
    {
4202
        "pcspk",
4203
        "PC speaker",
4204
        0,
4205
        1,
4206
        { .init_isa = pcspk_audio_init }
4207
    },
4208
#endif
4209

    
4210
#ifdef CONFIG_SB16
4211
    {
4212
        "sb16",
4213
        "Creative Sound Blaster 16",
4214
        0,
4215
        1,
4216
        { .init_isa = SB16_init }
4217
    },
4218
#endif
4219

    
4220
#ifdef CONFIG_CS4231A
4221
    {
4222
        "cs4231a",
4223
        "CS4231A",
4224
        0,
4225
        1,
4226
        { .init_isa = cs4231a_init }
4227
    },
4228
#endif
4229

    
4230
#ifdef CONFIG_ADLIB
4231
    {
4232
        "adlib",
4233
#ifdef HAS_YMF262
4234
        "Yamaha YMF262 (OPL3)",
4235
#else
4236
        "Yamaha YM3812 (OPL2)",
4237
#endif
4238
        0,
4239
        1,
4240
        { .init_isa = Adlib_init }
4241
    },
4242
#endif
4243

    
4244
#ifdef CONFIG_GUS
4245
    {
4246
        "gus",
4247
        "Gravis Ultrasound GF1",
4248
        0,
4249
        1,
4250
        { .init_isa = GUS_init }
4251
    },
4252
#endif
4253

    
4254
#ifdef CONFIG_AC97
4255
    {
4256
        "ac97",
4257
        "Intel 82801AA AC97 Audio",
4258
        0,
4259
        0,
4260
        { .init_pci = ac97_init }
4261
    },
4262
#endif
4263

    
4264
#ifdef CONFIG_ES1370
4265
    {
4266
        "es1370",
4267
        "ENSONIQ AudioPCI ES1370",
4268
        0,
4269
        0,
4270
        { .init_pci = es1370_init }
4271
    },
4272
#endif
4273

    
4274
#endif /* HAS_AUDIO_CHOICE */
4275

    
4276
    { NULL, NULL, 0, 0, { NULL } }
4277
};
4278

    
4279
static void select_soundhw (const char *optarg)
4280
{
4281
    struct soundhw *c;
4282

    
4283
    if (*optarg == '?') {
4284
    show_valid_cards:
4285

    
4286
        printf ("Valid sound card names (comma separated):\n");
4287
        for (c = soundhw; c->name; ++c) {
4288
            printf ("%-11s %s\n", c->name, c->descr);
4289
        }
4290
        printf ("\n-soundhw all will enable all of the above\n");
4291
        exit (*optarg != '?');
4292
    }
4293
    else {
4294
        size_t l;
4295
        const char *p;
4296
        char *e;
4297
        int bad_card = 0;
4298

    
4299
        if (!strcmp (optarg, "all")) {
4300
            for (c = soundhw; c->name; ++c) {
4301
                c->enabled = 1;
4302
            }
4303
            return;
4304
        }
4305

    
4306
        p = optarg;
4307
        while (*p) {
4308
            e = strchr (p, ',');
4309
            l = !e ? strlen (p) : (size_t) (e - p);
4310

    
4311
            for (c = soundhw; c->name; ++c) {
4312
                if (!strncmp (c->name, p, l) && !c->name[l]) {
4313
                    c->enabled = 1;
4314
                    break;
4315
                }
4316
            }
4317

    
4318
            if (!c->name) {
4319
                if (l > 80) {
4320
                    fprintf (stderr,
4321
                             "Unknown sound card name (too big to show)\n");
4322
                }
4323
                else {
4324
                    fprintf (stderr, "Unknown sound card name `%.*s'\n",
4325
                             (int) l, p);
4326
                }
4327
                bad_card = 1;
4328
            }
4329
            p += l + (e != NULL);
4330
        }
4331

    
4332
        if (bad_card)
4333
            goto show_valid_cards;
4334
    }
4335
}
4336
#endif
4337

    
4338
static void select_vgahw (const char *p)
4339
{
4340
    const char *opts;
4341

    
4342
    vga_interface_type = VGA_NONE;
4343
    if (strstart(p, "std", &opts)) {
4344
        vga_interface_type = VGA_STD;
4345
    } else if (strstart(p, "cirrus", &opts)) {
4346
        vga_interface_type = VGA_CIRRUS;
4347
    } else if (strstart(p, "vmware", &opts)) {
4348
        vga_interface_type = VGA_VMWARE;
4349
    } else if (strstart(p, "xenfb", &opts)) {
4350
        vga_interface_type = VGA_XENFB;
4351
    } else if (!strstart(p, "none", &opts)) {
4352
    invalid_vga:
4353
        fprintf(stderr, "Unknown vga type: %s\n", p);
4354
        exit(1);
4355
    }
4356
    while (*opts) {
4357
        const char *nextopt;
4358

    
4359
        if (strstart(opts, ",retrace=", &nextopt)) {
4360
            opts = nextopt;
4361
            if (strstart(opts, "dumb", &nextopt))
4362
                vga_retrace_method = VGA_RETRACE_DUMB;
4363
            else if (strstart(opts, "precise", &nextopt))
4364
                vga_retrace_method = VGA_RETRACE_PRECISE;
4365
            else goto invalid_vga;
4366
        } else goto invalid_vga;
4367
        opts = nextopt;
4368
    }
4369
}
4370

    
4371
#ifdef TARGET_I386
4372
static int balloon_parse(const char *arg)
4373
{
4374
    QemuOpts *opts;
4375

    
4376
    if (strcmp(arg, "none") == 0) {
4377
        return 0;
4378
    }
4379

    
4380
    if (!strncmp(arg, "virtio", 6)) {
4381
        if (arg[6] == ',') {
4382
            /* have params -> parse them */
4383
            opts = qemu_opts_parse(&qemu_device_opts, arg+7, NULL);
4384
            if (!opts)
4385
                return  -1;
4386
        } else {
4387
            /* create empty opts */
4388
            opts = qemu_opts_create(&qemu_device_opts, NULL, 0);
4389
        }
4390
        qemu_opt_set(opts, "driver", "virtio-balloon-pci");
4391
        return 0;
4392
    }
4393

    
4394
    return -1;
4395
}
4396
#endif
4397

    
4398
#ifdef _WIN32
4399
static BOOL WINAPI qemu_ctrl_handler(DWORD type)
4400
{
4401
    exit(STATUS_CONTROL_C_EXIT);
4402
    return TRUE;
4403
}
4404
#endif
4405

    
4406
int qemu_uuid_parse(const char *str, uint8_t *uuid)
4407
{
4408
    int ret;
4409

    
4410
    if(strlen(str) != 36)
4411
        return -1;
4412

    
4413
    ret = sscanf(str, UUID_FMT, &uuid[0], &uuid[1], &uuid[2], &uuid[3],
4414
            &uuid[4], &uuid[5], &uuid[6], &uuid[7], &uuid[8], &uuid[9],
4415
            &uuid[10], &uuid[11], &uuid[12], &uuid[13], &uuid[14], &uuid[15]);
4416

    
4417
    if(ret != 16)
4418
        return -1;
4419

    
4420
#ifdef TARGET_I386
4421
    smbios_add_field(1, offsetof(struct smbios_type_1, uuid), 16, uuid);
4422
#endif
4423

    
4424
    return 0;
4425
}
4426

    
4427
#define MAX_NET_CLIENTS 32
4428

    
4429
#ifndef _WIN32
4430

    
4431
static void termsig_handler(int signal)
4432
{
4433
    qemu_system_shutdown_request();
4434
}
4435

    
4436
static void sigchld_handler(int signal)
4437
{
4438
    waitpid(-1, NULL, WNOHANG);
4439
}
4440

    
4441
static void sighandler_setup(void)
4442
{
4443
    struct sigaction act;
4444

    
4445
    memset(&act, 0, sizeof(act));
4446
    act.sa_handler = termsig_handler;
4447
    sigaction(SIGINT,  &act, NULL);
4448
    sigaction(SIGHUP,  &act, NULL);
4449
    sigaction(SIGTERM, &act, NULL);
4450

    
4451
    act.sa_handler = sigchld_handler;
4452
    act.sa_flags = SA_NOCLDSTOP;
4453
    sigaction(SIGCHLD, &act, NULL);
4454
}
4455

    
4456
#endif
4457

    
4458
#ifdef _WIN32
4459
/* Look for support files in the same directory as the executable.  */
4460
static char *find_datadir(const char *argv0)
4461
{
4462
    char *p;
4463
    char buf[MAX_PATH];
4464
    DWORD len;
4465

    
4466
    len = GetModuleFileName(NULL, buf, sizeof(buf) - 1);
4467
    if (len == 0) {
4468
        return NULL;
4469
    }
4470

    
4471
    buf[len] = 0;
4472
    p = buf + len - 1;
4473
    while (p != buf && *p != '\\')
4474
        p--;
4475
    *p = 0;
4476
    if (access(buf, R_OK) == 0) {
4477
        return qemu_strdup(buf);
4478
    }
4479
    return NULL;
4480
}
4481
#else /* !_WIN32 */
4482

    
4483
/* Find a likely location for support files using the location of the binary.
4484
   For installed binaries this will be "$bindir/../share/qemu".  When
4485
   running from the build tree this will be "$bindir/../pc-bios".  */
4486
#define SHARE_SUFFIX "/share/qemu"
4487
#define BUILD_SUFFIX "/pc-bios"
4488
static char *find_datadir(const char *argv0)
4489
{
4490
    char *dir;
4491
    char *p = NULL;
4492
    char *res;
4493
    char buf[PATH_MAX];
4494
    size_t max_len;
4495

    
4496
#if defined(__linux__)
4497
    {
4498
        int len;
4499
        len = readlink("/proc/self/exe", buf, sizeof(buf) - 1);
4500
        if (len > 0) {
4501
            buf[len] = 0;
4502
            p = buf;
4503
        }
4504
    }
4505
#elif defined(__FreeBSD__)
4506
    {
4507
        int len;
4508
        len = readlink("/proc/curproc/file", buf, sizeof(buf) - 1);
4509
        if (len > 0) {
4510
            buf[len] = 0;
4511
            p = buf;
4512
        }
4513
    }
4514
#endif
4515
    /* If we don't have any way of figuring out the actual executable
4516
       location then try argv[0].  */
4517
    if (!p) {
4518
        p = realpath(argv0, buf);
4519
        if (!p) {
4520
            return NULL;
4521
        }
4522
    }
4523
    dir = dirname(p);
4524
    dir = dirname(dir);
4525

    
4526
    max_len = strlen(dir) +
4527
        MAX(strlen(SHARE_SUFFIX), strlen(BUILD_SUFFIX)) + 1;
4528
    res = qemu_mallocz(max_len);
4529
    snprintf(res, max_len, "%s%s", dir, SHARE_SUFFIX);
4530
    if (access(res, R_OK)) {
4531
        snprintf(res, max_len, "%s%s", dir, BUILD_SUFFIX);
4532
        if (access(res, R_OK)) {
4533
            qemu_free(res);
4534
            res = NULL;
4535
        }
4536
    }
4537

    
4538
    return res;
4539
}
4540
#undef SHARE_SUFFIX
4541
#undef BUILD_SUFFIX
4542
#endif
4543

    
4544
char *qemu_find_file(int type, const char *name)
4545
{
4546
    int len;
4547
    const char *subdir;
4548
    char *buf;
4549

    
4550
    /* If name contains path separators then try it as a straight path.  */
4551
    if ((strchr(name, '/') || strchr(name, '\\'))
4552
        && access(name, R_OK) == 0) {
4553
        return qemu_strdup(name);
4554
    }
4555
    switch (type) {
4556
    case QEMU_FILE_TYPE_BIOS:
4557
        subdir = "";
4558
        break;
4559
    case QEMU_FILE_TYPE_KEYMAP:
4560
        subdir = "keymaps/";
4561
        break;
4562
    default:
4563
        abort();
4564
    }
4565
    len = strlen(data_dir) + strlen(name) + strlen(subdir) + 2;
4566
    buf = qemu_mallocz(len);
4567
    snprintf(buf, len, "%s/%s%s", data_dir, subdir, name);
4568
    if (access(buf, R_OK)) {
4569
        qemu_free(buf);
4570
        return NULL;
4571
    }
4572
    return buf;
4573
}
4574

    
4575
static int device_init_func(QemuOpts *opts, void *opaque)
4576
{
4577
    DeviceState *dev;
4578

    
4579
    dev = qdev_device_add(opts);
4580
    if (!dev)
4581
        return -1;
4582
    return 0;
4583
}
4584

    
4585
struct device_config {
4586
    enum {
4587
        DEV_USB,       /* -usbdevice   */
4588
        DEV_BT,        /* -bt          */
4589
    } type;
4590
    const char *cmdline;
4591
    QTAILQ_ENTRY(device_config) next;
4592
};
4593
QTAILQ_HEAD(, device_config) device_configs = QTAILQ_HEAD_INITIALIZER(device_configs);
4594

    
4595
static void add_device_config(int type, const char *cmdline)
4596
{
4597
    struct device_config *conf;
4598

    
4599
    conf = qemu_mallocz(sizeof(*conf));
4600
    conf->type = type;
4601
    conf->cmdline = cmdline;
4602
    QTAILQ_INSERT_TAIL(&device_configs, conf, next);
4603
}
4604

    
4605
static int foreach_device_config(int type, int (*func)(const char *cmdline))
4606
{
4607
    struct device_config *conf;
4608
    int rc;
4609

    
4610
    QTAILQ_FOREACH(conf, &device_configs, next) {
4611
        if (conf->type != type)
4612
            continue;
4613
        rc = func(conf->cmdline);
4614
        if (0 != rc)
4615
            return rc;
4616
    }
4617
    return 0;
4618
}
4619

    
4620
int main(int argc, char **argv, char **envp)
4621
{
4622
    const char *gdbstub_dev = NULL;
4623
    uint32_t boot_devices_bitmap = 0;
4624
    int i;
4625
    int snapshot, linux_boot, net_boot;
4626
    const char *initrd_filename;
4627
    const char *kernel_filename, *kernel_cmdline;
4628
    char boot_devices[33] = "cad"; /* default to HD->floppy->CD-ROM */
4629
    DisplayState *ds;
4630
    DisplayChangeListener *dcl;
4631
    int cyls, heads, secs, translation;
4632
    const char *net_clients[MAX_NET_CLIENTS];
4633
    int nb_net_clients;
4634
    QemuOpts *hda_opts = NULL, *opts;
4635
    int optind;
4636
    const char *r, *optarg;
4637
    CharDriverState *monitor_hds[MAX_MONITOR_DEVICES];
4638
    const char *monitor_devices[MAX_MONITOR_DEVICES];
4639
    int monitor_device_index;
4640
    const char *serial_devices[MAX_SERIAL_PORTS];
4641
    int serial_device_index;
4642
    const char *parallel_devices[MAX_PARALLEL_PORTS];
4643
    int parallel_device_index;
4644
    const char *virtio_consoles[MAX_VIRTIO_CONSOLES];
4645
    int virtio_console_index;
4646
    const char *loadvm = NULL;
4647
    QEMUMachine *machine;
4648
    const char *cpu_model;
4649
#ifndef _WIN32
4650
    int fds[2];
4651
#endif
4652
    int tb_size;
4653
    const char *pid_file = NULL;
4654
    const char *incoming = NULL;
4655
#ifndef _WIN32
4656
    int fd = 0;
4657
    struct passwd *pwd = NULL;
4658
    const char *chroot_dir = NULL;
4659
    const char *run_as = NULL;
4660
#endif
4661
    CPUState *env;
4662
    int show_vnc_port = 0;
4663

    
4664
    qemu_errors_to_file(stderr);
4665
    qemu_cache_utils_init(envp);
4666

    
4667
    QLIST_INIT (&vm_change_state_head);
4668
#ifndef _WIN32
4669
    {
4670
        struct sigaction act;
4671
        sigfillset(&act.sa_mask);
4672
        act.sa_flags = 0;
4673
        act.sa_handler = SIG_IGN;
4674
        sigaction(SIGPIPE, &act, NULL);
4675
    }
4676
#else
4677
    SetConsoleCtrlHandler(qemu_ctrl_handler, TRUE);
4678
    /* Note: cpu_interrupt() is currently not SMP safe, so we force
4679
       QEMU to run on a single CPU */
4680
    {
4681
        HANDLE h;
4682
        DWORD mask, smask;
4683
        int i;
4684
        h = GetCurrentProcess();
4685
        if (GetProcessAffinityMask(h, &mask, &smask)) {
4686
            for(i = 0; i < 32; i++) {
4687
                if (mask & (1 << i))
4688
                    break;
4689
            }
4690
            if (i != 32) {
4691
                mask = 1 << i;
4692
                SetProcessAffinityMask(h, mask);
4693
            }
4694
        }
4695
    }
4696
#endif
4697

    
4698
    module_call_init(MODULE_INIT_MACHINE);
4699
    machine = find_default_machine();
4700
    cpu_model = NULL;
4701
    initrd_filename = NULL;
4702
    ram_size = 0;
4703
    snapshot = 0;
4704
    kernel_filename = NULL;
4705
    kernel_cmdline = "";
4706
    cyls = heads = secs = 0;
4707
    translation = BIOS_ATA_TRANSLATION_AUTO;
4708

    
4709
    serial_devices[0] = "vc:80Cx24C";
4710
    for(i = 1; i < MAX_SERIAL_PORTS; i++)
4711
        serial_devices[i] = NULL;
4712
    serial_device_index = 0;
4713

    
4714
    parallel_devices[0] = "vc:80Cx24C";
4715
    for(i = 1; i < MAX_PARALLEL_PORTS; i++)
4716
        parallel_devices[i] = NULL;
4717
    parallel_device_index = 0;
4718

    
4719
    for(i = 0; i < MAX_VIRTIO_CONSOLES; i++)
4720
        virtio_consoles[i] = NULL;
4721
    virtio_console_index = 0;
4722

    
4723
    monitor_devices[0] = "vc:80Cx24C";
4724
    for (i = 1; i < MAX_MONITOR_DEVICES; i++) {
4725
        monitor_devices[i] = NULL;
4726
    }
4727
    monitor_device_index = 0;
4728

    
4729
    for (i = 0; i < MAX_NODES; i++) {
4730
        node_mem[i] = 0;
4731
        node_cpumask[i] = 0;
4732
    }
4733

    
4734
    nb_net_clients = 0;
4735
    nb_numa_nodes = 0;
4736
    nb_nics = 0;
4737

    
4738
    tb_size = 0;
4739
    autostart= 1;
4740

    
4741
    optind = 1;
4742
    for(;;) {
4743
        if (optind >= argc)
4744
            break;
4745
        r = argv[optind];
4746
        if (r[0] != '-') {
4747
            hda_opts = drive_add(argv[optind++], HD_ALIAS, 0);
4748
        } else {
4749
            const QEMUOption *popt;
4750

    
4751
            optind++;
4752
            /* Treat --foo the same as -foo.  */
4753
            if (r[1] == '-')
4754
                r++;
4755
            popt = qemu_options;
4756
            for(;;) {
4757
                if (!popt->name) {
4758
                    fprintf(stderr, "%s: invalid option -- '%s'\n",
4759
                            argv[0], r);
4760
                    exit(1);
4761
                }
4762
                if (!strcmp(popt->name, r + 1))
4763
                    break;
4764
                popt++;
4765
            }
4766
            if (popt->flags & HAS_ARG) {
4767
                if (optind >= argc) {
4768
                    fprintf(stderr, "%s: option '%s' requires an argument\n",
4769
                            argv[0], r);
4770
                    exit(1);
4771
                }
4772
                optarg = argv[optind++];
4773
            } else {
4774
                optarg = NULL;
4775
            }
4776

    
4777
            switch(popt->index) {
4778
            case QEMU_OPTION_M:
4779
                machine = find_machine(optarg);
4780
                if (!machine) {
4781
                    QEMUMachine *m;
4782
                    printf("Supported machines are:\n");
4783
                    for(m = first_machine; m != NULL; m = m->next) {
4784
                        if (m->alias)
4785
                            printf("%-10s %s (alias of %s)\n",
4786
                                   m->alias, m->desc, m->name);
4787
                        printf("%-10s %s%s\n",
4788
                               m->name, m->desc,
4789
                               m->is_default ? " (default)" : "");
4790
                    }
4791
                    exit(*optarg != '?');
4792
                }
4793
                break;
4794
            case QEMU_OPTION_cpu:
4795
                /* hw initialization will check this */
4796
                if (*optarg == '?') {
4797
/* XXX: implement xxx_cpu_list for targets that still miss it */
4798
#if defined(cpu_list)
4799
                    cpu_list(stdout, &fprintf);
4800
#endif
4801
                    exit(0);
4802
                } else {
4803
                    cpu_model = optarg;
4804
                }
4805
                break;
4806
            case QEMU_OPTION_initrd:
4807
                initrd_filename = optarg;
4808
                break;
4809
            case QEMU_OPTION_hda:
4810
                if (cyls == 0)
4811
                    hda_opts = drive_add(optarg, HD_ALIAS, 0);
4812
                else
4813
                    hda_opts = drive_add(optarg, HD_ALIAS
4814
                             ",cyls=%d,heads=%d,secs=%d%s",
4815
                             0, cyls, heads, secs,
4816
                             translation == BIOS_ATA_TRANSLATION_LBA ?
4817
                                 ",trans=lba" :
4818
                             translation == BIOS_ATA_TRANSLATION_NONE ?
4819
                                 ",trans=none" : "");
4820
                 break;
4821
            case QEMU_OPTION_hdb:
4822
            case QEMU_OPTION_hdc:
4823
            case QEMU_OPTION_hdd:
4824
                drive_add(optarg, HD_ALIAS, popt->index - QEMU_OPTION_hda);
4825
                break;
4826
            case QEMU_OPTION_drive:
4827
                drive_add(NULL, "%s", optarg);
4828
                break;
4829
            case QEMU_OPTION_set:
4830
                if (qemu_set_option(optarg) != 0)
4831
                    exit(1);
4832
                break;
4833
            case QEMU_OPTION_mtdblock:
4834
                drive_add(optarg, MTD_ALIAS);
4835
                break;
4836
            case QEMU_OPTION_sd:
4837
                drive_add(optarg, SD_ALIAS);
4838
                break;
4839
            case QEMU_OPTION_pflash:
4840
                drive_add(optarg, PFLASH_ALIAS);
4841
                break;
4842
            case QEMU_OPTION_snapshot:
4843
                snapshot = 1;
4844
                break;
4845
            case QEMU_OPTION_hdachs:
4846
                {
4847
                    const char *p;
4848
                    p = optarg;
4849
                    cyls = strtol(p, (char **)&p, 0);
4850
                    if (cyls < 1 || cyls > 16383)
4851
                        goto chs_fail;
4852
                    if (*p != ',')
4853
                        goto chs_fail;
4854
                    p++;
4855
                    heads = strtol(p, (char **)&p, 0);
4856
                    if (heads < 1 || heads > 16)
4857
                        goto chs_fail;
4858
                    if (*p != ',')
4859
                        goto chs_fail;
4860
                    p++;
4861
                    secs = strtol(p, (char **)&p, 0);
4862
                    if (secs < 1 || secs > 63)
4863
                        goto chs_fail;
4864
                    if (*p == ',') {
4865
                        p++;
4866
                        if (!strcmp(p, "none"))
4867
                            translation = BIOS_ATA_TRANSLATION_NONE;
4868
                        else if (!strcmp(p, "lba"))
4869
                            translation = BIOS_ATA_TRANSLATION_LBA;
4870
                        else if (!strcmp(p, "auto"))
4871
                            translation = BIOS_ATA_TRANSLATION_AUTO;
4872
                        else
4873
                            goto chs_fail;
4874
                    } else if (*p != '\0') {
4875
                    chs_fail:
4876
                        fprintf(stderr, "qemu: invalid physical CHS format\n");
4877
                        exit(1);
4878
                    }
4879
                    if (hda_opts != NULL) {
4880
                        char num[16];
4881
                        snprintf(num, sizeof(num), "%d", cyls);
4882
                        qemu_opt_set(hda_opts, "cyls", num);
4883
                        snprintf(num, sizeof(num), "%d", heads);
4884
                        qemu_opt_set(hda_opts, "heads", num);
4885
                        snprintf(num, sizeof(num), "%d", secs);
4886
                        qemu_opt_set(hda_opts, "secs", num);
4887
                        if (translation == BIOS_ATA_TRANSLATION_LBA)
4888
                            qemu_opt_set(hda_opts, "trans", "lba");
4889
                        if (translation == BIOS_ATA_TRANSLATION_NONE)
4890
                            qemu_opt_set(hda_opts, "trans", "none");
4891
                    }
4892
                }
4893
                break;
4894
            case QEMU_OPTION_numa:
4895
                if (nb_numa_nodes >= MAX_NODES) {
4896
                    fprintf(stderr, "qemu: too many NUMA nodes\n");
4897
                    exit(1);
4898
                }
4899
                numa_add(optarg);
4900
                break;
4901
            case QEMU_OPTION_nographic:
4902
                display_type = DT_NOGRAPHIC;
4903
                break;
4904
#ifdef CONFIG_CURSES
4905
            case QEMU_OPTION_curses:
4906
                display_type = DT_CURSES;
4907
                break;
4908
#endif
4909
            case QEMU_OPTION_portrait:
4910
                graphic_rotate = 1;
4911
                break;
4912
            case QEMU_OPTION_kernel:
4913
                kernel_filename = optarg;
4914
                break;
4915
            case QEMU_OPTION_append:
4916
                kernel_cmdline = optarg;
4917
                break;
4918
            case QEMU_OPTION_cdrom:
4919
                drive_add(optarg, CDROM_ALIAS);
4920
                break;
4921
            case QEMU_OPTION_boot:
4922
                {
4923
                    static const char * const params[] = {
4924
                        "order", "once", "menu", NULL
4925
                    };
4926
                    char buf[sizeof(boot_devices)];
4927
                    char *standard_boot_devices;
4928
                    int legacy = 0;
4929

    
4930
                    if (!strchr(optarg, '=')) {
4931
                        legacy = 1;
4932
                        pstrcpy(buf, sizeof(buf), optarg);
4933
                    } else if (check_params(buf, sizeof(buf), params, optarg) < 0) {
4934
                        fprintf(stderr,
4935
                                "qemu: unknown boot parameter '%s' in '%s'\n",
4936
                                buf, optarg);
4937
                        exit(1);
4938
                    }
4939

    
4940
                    if (legacy ||
4941
                        get_param_value(buf, sizeof(buf), "order", optarg)) {
4942
                        boot_devices_bitmap = parse_bootdevices(buf);
4943
                        pstrcpy(boot_devices, sizeof(boot_devices), buf);
4944
                    }
4945
                    if (!legacy) {
4946
                        if (get_param_value(buf, sizeof(buf),
4947
                                            "once", optarg)) {
4948
                            boot_devices_bitmap |= parse_bootdevices(buf);
4949
                            standard_boot_devices = qemu_strdup(boot_devices);
4950
                            pstrcpy(boot_devices, sizeof(boot_devices), buf);
4951
                            qemu_register_reset(restore_boot_devices,
4952
                                                standard_boot_devices);
4953
                        }
4954
                        if (get_param_value(buf, sizeof(buf),
4955
                                            "menu", optarg)) {
4956
                            if (!strcmp(buf, "on")) {
4957
                                boot_menu = 1;
4958
                            } else if (!strcmp(buf, "off")) {
4959
                                boot_menu = 0;
4960
                            } else {
4961
                                fprintf(stderr,
4962
                                        "qemu: invalid option value '%s'\n",
4963
                                        buf);
4964
                                exit(1);
4965
                            }
4966
                        }
4967
                    }
4968
                }
4969
                break;
4970
            case QEMU_OPTION_fda:
4971
            case QEMU_OPTION_fdb:
4972
                drive_add(optarg, FD_ALIAS, popt->index - QEMU_OPTION_fda);
4973
                break;
4974
#ifdef TARGET_I386
4975
            case QEMU_OPTION_no_fd_bootchk:
4976
                fd_bootchk = 0;
4977
                break;
4978
#endif
4979
            case QEMU_OPTION_net:
4980
                if (nb_net_clients >= MAX_NET_CLIENTS) {
4981
                    fprintf(stderr, "qemu: too many network clients\n");
4982
                    exit(1);
4983
                }
4984
                net_clients[nb_net_clients] = optarg;
4985
                nb_net_clients++;
4986
                break;
4987
#ifdef CONFIG_SLIRP
4988
            case QEMU_OPTION_tftp:
4989
                legacy_tftp_prefix = optarg;
4990
                break;
4991
            case QEMU_OPTION_bootp:
4992
                legacy_bootp_filename = optarg;
4993
                break;
4994
#ifndef _WIN32
4995
            case QEMU_OPTION_smb:
4996
                net_slirp_smb(optarg);
4997
                break;
4998
#endif
4999
            case QEMU_OPTION_redir:
5000
                net_slirp_redir(optarg);
5001
                break;
5002
#endif
5003
            case QEMU_OPTION_bt:
5004
                add_device_config(DEV_BT, optarg);
5005
                break;
5006
#ifdef HAS_AUDIO
5007
            case QEMU_OPTION_audio_help:
5008
                AUD_help ();
5009
                exit (0);
5010
                break;
5011
            case QEMU_OPTION_soundhw:
5012
                select_soundhw (optarg);
5013
                break;
5014
#endif
5015
            case QEMU_OPTION_h:
5016
                help(0);
5017
                break;
5018
            case QEMU_OPTION_version:
5019
                version();
5020
                exit(0);
5021
                break;
5022
            case QEMU_OPTION_m: {
5023
                uint64_t value;
5024
                char *ptr;
5025

    
5026
                value = strtoul(optarg, &ptr, 10);
5027
                switch (*ptr) {
5028
                case 0: case 'M': case 'm':
5029
                    value <<= 20;
5030
                    break;
5031
                case 'G': case 'g':
5032
                    value <<= 30;
5033
                    break;
5034
                default:
5035
                    fprintf(stderr, "qemu: invalid ram size: %s\n", optarg);
5036
                    exit(1);
5037
                }
5038

    
5039
                /* On 32-bit hosts, QEMU is limited by virtual address space */
5040
                if (value > (2047 << 20) && HOST_LONG_BITS == 32) {
5041
                    fprintf(stderr, "qemu: at most 2047 MB RAM can be simulated\n");
5042
                    exit(1);
5043
                }
5044
                if (value != (uint64_t)(ram_addr_t)value) {
5045
                    fprintf(stderr, "qemu: ram size too large\n");
5046
                    exit(1);
5047
                }
5048
                ram_size = value;
5049
                break;
5050
            }
5051
            case QEMU_OPTION_d:
5052
                {
5053
                    int mask;
5054
                    const CPULogItem *item;
5055

    
5056
                    mask = cpu_str_to_log_mask(optarg);
5057
                    if (!mask) {
5058
                        printf("Log items (comma separated):\n");
5059
                    for(item = cpu_log_items; item->mask != 0; item++) {
5060
                        printf("%-10s %s\n", item->name, item->help);
5061
                    }
5062
                    exit(1);
5063
                    }
5064
                    cpu_set_log(mask);
5065
                }
5066
                break;
5067
            case QEMU_OPTION_s:
5068
                gdbstub_dev = "tcp::" DEFAULT_GDBSTUB_PORT;
5069
                break;
5070
            case QEMU_OPTION_gdb:
5071
                gdbstub_dev = optarg;
5072
                break;
5073
            case QEMU_OPTION_L:
5074
                data_dir = optarg;
5075
                break;
5076
            case QEMU_OPTION_bios:
5077
                bios_name = optarg;
5078
                break;
5079
            case QEMU_OPTION_singlestep:
5080
                singlestep = 1;
5081
                break;
5082
            case QEMU_OPTION_S:
5083
                autostart = 0;
5084
                break;
5085
#ifndef _WIN32
5086
            case QEMU_OPTION_k:
5087
                keyboard_layout = optarg;
5088
                break;
5089
#endif
5090
            case QEMU_OPTION_localtime:
5091
                rtc_utc = 0;
5092
                break;
5093
            case QEMU_OPTION_vga:
5094
                select_vgahw (optarg);
5095
                break;
5096
#if defined(TARGET_PPC) || defined(TARGET_SPARC)
5097
            case QEMU_OPTION_g:
5098
                {
5099
                    const char *p;
5100
                    int w, h, depth;
5101
                    p = optarg;
5102
                    w = strtol(p, (char **)&p, 10);
5103
                    if (w <= 0) {
5104
                    graphic_error:
5105
                        fprintf(stderr, "qemu: invalid resolution or depth\n");
5106
                        exit(1);
5107
                    }
5108
                    if (*p != 'x')
5109
                        goto graphic_error;
5110
                    p++;
5111
                    h = strtol(p, (char **)&p, 10);
5112
                    if (h <= 0)
5113
                        goto graphic_error;
5114
                    if (*p == 'x') {
5115
                        p++;
5116
                        depth = strtol(p, (char **)&p, 10);
5117
                        if (depth != 8 && depth != 15 && depth != 16 &&
5118
                            depth != 24 && depth != 32)
5119
                            goto graphic_error;
5120
                    } else if (*p == '\0') {
5121
                        depth = graphic_depth;
5122
                    } else {
5123
                        goto graphic_error;
5124
                    }
5125

    
5126
                    graphic_width = w;
5127
                    graphic_height = h;
5128
                    graphic_depth = depth;
5129
                }
5130
                break;
5131
#endif
5132
            case QEMU_OPTION_echr:
5133
                {
5134
                    char *r;
5135
                    term_escape_char = strtol(optarg, &r, 0);
5136
                    if (r == optarg)
5137
                        printf("Bad argument to echr\n");
5138
                    break;
5139
                }
5140
            case QEMU_OPTION_monitor:
5141
                if (monitor_device_index >= MAX_MONITOR_DEVICES) {
5142
                    fprintf(stderr, "qemu: too many monitor devices\n");
5143
                    exit(1);
5144
                }
5145
                monitor_devices[monitor_device_index] = optarg;
5146
                monitor_device_index++;
5147
                break;
5148
            case QEMU_OPTION_chardev:
5149
                opts = qemu_opts_parse(&qemu_chardev_opts, optarg, "backend");
5150
                if (!opts) {
5151
                    fprintf(stderr, "parse error: %s\n", optarg);
5152
                    exit(1);
5153
                }
5154
                if (qemu_chr_open_opts(opts, NULL) == NULL) {
5155
                    exit(1);
5156
                }
5157
                break;
5158
            case QEMU_OPTION_serial:
5159
                if (serial_device_index >= MAX_SERIAL_PORTS) {
5160
                    fprintf(stderr, "qemu: too many serial ports\n");
5161
                    exit(1);
5162
                }
5163
                serial_devices[serial_device_index] = optarg;
5164
                serial_device_index++;
5165
                break;
5166
            case QEMU_OPTION_watchdog:
5167
                if (watchdog) {
5168
                    fprintf(stderr,
5169
                            "qemu: only one watchdog option may be given\n");
5170
                    return 1;
5171
                }
5172
                watchdog = optarg;
5173
                break;
5174
            case QEMU_OPTION_watchdog_action:
5175
                if (select_watchdog_action(optarg) == -1) {
5176
                    fprintf(stderr, "Unknown -watchdog-action parameter\n");
5177
                    exit(1);
5178
                }
5179
                break;
5180
            case QEMU_OPTION_virtiocon:
5181
                if (virtio_console_index >= MAX_VIRTIO_CONSOLES) {
5182
                    fprintf(stderr, "qemu: too many virtio consoles\n");
5183
                    exit(1);
5184
                }
5185
                virtio_consoles[virtio_console_index] = optarg;
5186
                virtio_console_index++;
5187
                break;
5188
            case QEMU_OPTION_parallel:
5189
                if (parallel_device_index >= MAX_PARALLEL_PORTS) {
5190
                    fprintf(stderr, "qemu: too many parallel ports\n");
5191
                    exit(1);
5192
                }
5193
                parallel_devices[parallel_device_index] = optarg;
5194
                parallel_device_index++;
5195
                break;
5196
            case QEMU_OPTION_loadvm:
5197
                loadvm = optarg;
5198
                break;
5199
            case QEMU_OPTION_full_screen:
5200
                full_screen = 1;
5201
                break;
5202
#ifdef CONFIG_SDL
5203
            case QEMU_OPTION_no_frame:
5204
                no_frame = 1;
5205
                break;
5206
            case QEMU_OPTION_alt_grab:
5207
                alt_grab = 1;
5208
                break;
5209
            case QEMU_OPTION_no_quit:
5210
                no_quit = 1;
5211
                break;
5212
            case QEMU_OPTION_sdl:
5213
                display_type = DT_SDL;
5214
                break;
5215
#endif
5216
            case QEMU_OPTION_pidfile:
5217
                pid_file = optarg;
5218
                break;
5219
#ifdef TARGET_I386
5220
            case QEMU_OPTION_win2k_hack:
5221
                win2k_install_hack = 1;
5222
                break;
5223
            case QEMU_OPTION_rtc_td_hack:
5224
                rtc_td_hack = 1;
5225
                break;
5226
            case QEMU_OPTION_acpitable:
5227
                if(acpi_table_add(optarg) < 0) {
5228
                    fprintf(stderr, "Wrong acpi table provided\n");
5229
                    exit(1);
5230
                }
5231
                break;
5232
            case QEMU_OPTION_smbios:
5233
                if(smbios_entry_add(optarg) < 0) {
5234
                    fprintf(stderr, "Wrong smbios provided\n");
5235
                    exit(1);
5236
                }
5237
                break;
5238
#endif
5239
#ifdef CONFIG_KVM
5240
            case QEMU_OPTION_enable_kvm:
5241
                kvm_allowed = 1;
5242
                break;
5243
#endif
5244
            case QEMU_OPTION_usb:
5245
                usb_enabled = 1;
5246
                break;
5247
            case QEMU_OPTION_usbdevice:
5248
                usb_enabled = 1;
5249
                add_device_config(DEV_USB, optarg);
5250
                break;
5251
            case QEMU_OPTION_device:
5252
                opts = qemu_opts_parse(&qemu_device_opts, optarg, "driver");
5253
                if (!opts) {
5254
                    fprintf(stderr, "parse error: %s\n", optarg);
5255
                    exit(1);
5256
                }
5257
                break;
5258
            case QEMU_OPTION_smp:
5259
                smp_parse(optarg);
5260
                if (smp_cpus < 1) {
5261
                    fprintf(stderr, "Invalid number of CPUs\n");
5262
                    exit(1);
5263
                }
5264
                if (max_cpus < smp_cpus) {
5265
                    fprintf(stderr, "maxcpus must be equal to or greater than "
5266
                            "smp\n");
5267
                    exit(1);
5268
                }
5269
                if (max_cpus > 255) {
5270
                    fprintf(stderr, "Unsupported number of maxcpus\n");
5271
                    exit(1);
5272
                }
5273
                break;
5274
            case QEMU_OPTION_vnc:
5275
                display_type = DT_VNC;
5276
                vnc_display = optarg;
5277
                break;
5278
#ifdef TARGET_I386
5279
            case QEMU_OPTION_no_acpi:
5280
                acpi_enabled = 0;
5281
                break;
5282
            case QEMU_OPTION_no_hpet:
5283
                no_hpet = 1;
5284
                break;
5285
            case QEMU_OPTION_balloon:
5286
                if (balloon_parse(optarg) < 0) {
5287
                    fprintf(stderr, "Unknown -balloon argument %s\n", optarg);
5288
                    exit(1);
5289
                }
5290
                break;
5291
#endif
5292
            case QEMU_OPTION_no_reboot:
5293
                no_reboot = 1;
5294
                break;
5295
            case QEMU_OPTION_no_shutdown:
5296
                no_shutdown = 1;
5297
                break;
5298
            case QEMU_OPTION_show_cursor:
5299
                cursor_hide = 0;
5300
                break;
5301
            case QEMU_OPTION_uuid:
5302
                if(qemu_uuid_parse(optarg, qemu_uuid) < 0) {
5303
                    fprintf(stderr, "Fail to parse UUID string."
5304
                            " Wrong format.\n");
5305
                    exit(1);
5306
                }
5307
                break;
5308
#ifndef _WIN32
5309
            case QEMU_OPTION_daemonize:
5310
                daemonize = 1;
5311
                break;
5312
#endif
5313
            case QEMU_OPTION_option_rom:
5314
                if (nb_option_roms >= MAX_OPTION_ROMS) {
5315
                    fprintf(stderr, "Too many option ROMs\n");
5316
                    exit(1);
5317
                }
5318
                option_rom[nb_option_roms] = optarg;
5319
                nb_option_roms++;
5320
                break;
5321
#if defined(TARGET_ARM) || defined(TARGET_M68K)
5322
            case QEMU_OPTION_semihosting:
5323
                semihosting_enabled = 1;
5324
                break;
5325
#endif
5326
            case QEMU_OPTION_name:
5327
                qemu_name = qemu_strdup(optarg);
5328
                 {
5329
                     char *p = strchr(qemu_name, ',');
5330
                     if (p != NULL) {
5331
                        *p++ = 0;
5332
                        if (strncmp(p, "process=", 8)) {
5333
                            fprintf(stderr, "Unknown subargument %s to -name", p);
5334
                            exit(1);
5335
                        }
5336
                        p += 8;
5337
                        set_proc_name(p);
5338
                     }        
5339
                 }        
5340
                break;
5341
#if defined(TARGET_SPARC) || defined(TARGET_PPC)
5342
            case QEMU_OPTION_prom_env:
5343
                if (nb_prom_envs >= MAX_PROM_ENVS) {
5344
                    fprintf(stderr, "Too many prom variables\n");
5345
                    exit(1);
5346
                }
5347
                prom_envs[nb_prom_envs] = optarg;
5348
                nb_prom_envs++;
5349
                break;
5350
#endif
5351
#ifdef TARGET_ARM
5352
            case QEMU_OPTION_old_param:
5353
                old_param = 1;
5354
                break;
5355
#endif
5356
            case QEMU_OPTION_clock:
5357
                configure_alarms(optarg);
5358
                break;
5359
            case QEMU_OPTION_startdate:
5360
                {
5361
                    struct tm tm;
5362
                    time_t rtc_start_date;
5363
                    if (!strcmp(optarg, "now")) {
5364
                        rtc_date_offset = -1;
5365
                    } else {
5366
                        if (sscanf(optarg, "%d-%d-%dT%d:%d:%d",
5367
                               &tm.tm_year,
5368
                               &tm.tm_mon,
5369
                               &tm.tm_mday,
5370
                               &tm.tm_hour,
5371
                               &tm.tm_min,
5372
                               &tm.tm_sec) == 6) {
5373
                            /* OK */
5374
                        } else if (sscanf(optarg, "%d-%d-%d",
5375
                                          &tm.tm_year,
5376
                                          &tm.tm_mon,
5377
                                          &tm.tm_mday) == 3) {
5378
                            tm.tm_hour = 0;
5379
                            tm.tm_min = 0;
5380
                            tm.tm_sec = 0;
5381
                        } else {
5382
                            goto date_fail;
5383
                        }
5384
                        tm.tm_year -= 1900;
5385
                        tm.tm_mon--;
5386
                        rtc_start_date = mktimegm(&tm);
5387
                        if (rtc_start_date == -1) {
5388
                        date_fail:
5389
                            fprintf(stderr, "Invalid date format. Valid format are:\n"
5390
                                    "'now' or '2006-06-17T16:01:21' or '2006-06-17'\n");
5391
                            exit(1);
5392
                        }
5393
                        rtc_date_offset = time(NULL) - rtc_start_date;
5394
                    }
5395
                }
5396
                break;
5397
            case QEMU_OPTION_tb_size:
5398
                tb_size = strtol(optarg, NULL, 0);
5399
                if (tb_size < 0)
5400
                    tb_size = 0;
5401
                break;
5402
            case QEMU_OPTION_icount:
5403
                use_icount = 1;
5404
                if (strcmp(optarg, "auto") == 0) {
5405
                    icount_time_shift = -1;
5406
                } else {
5407
                    icount_time_shift = strtol(optarg, NULL, 0);
5408
                }
5409
                break;
5410
            case QEMU_OPTION_incoming:
5411
                incoming = optarg;
5412
                break;
5413
#ifndef _WIN32
5414
            case QEMU_OPTION_chroot:
5415
                chroot_dir = optarg;
5416
                break;
5417
            case QEMU_OPTION_runas:
5418
                run_as = optarg;
5419
                break;
5420
#endif
5421
#ifdef CONFIG_XEN
5422
            case QEMU_OPTION_xen_domid:
5423
                xen_domid = atoi(optarg);
5424
                break;
5425
            case QEMU_OPTION_xen_create:
5426
                xen_mode = XEN_CREATE;
5427
                break;
5428
            case QEMU_OPTION_xen_attach:
5429
                xen_mode = XEN_ATTACH;
5430
                break;
5431
#endif
5432
            }
5433
        }
5434
    }
5435

    
5436
    /* If no data_dir is specified then try to find it relative to the
5437
       executable path.  */
5438
    if (!data_dir) {
5439
        data_dir = find_datadir(argv[0]);
5440
    }
5441
    /* If all else fails use the install patch specified when building.  */
5442
    if (!data_dir) {
5443
        data_dir = CONFIG_QEMU_SHAREDIR;
5444
    }
5445

    
5446
    /*
5447
     * Default to max_cpus = smp_cpus, in case the user doesn't
5448
     * specify a max_cpus value.
5449
     */
5450
    if (!max_cpus)
5451
        max_cpus = smp_cpus;
5452

    
5453
    machine->max_cpus = machine->max_cpus ?: 1; /* Default to UP */
5454
    if (smp_cpus > machine->max_cpus) {
5455
        fprintf(stderr, "Number of SMP cpus requested (%d), exceeds max cpus "
5456
                "supported by machine `%s' (%d)\n", smp_cpus,  machine->name,
5457
                machine->max_cpus);
5458
        exit(1);
5459
    }
5460

    
5461
    if (display_type == DT_NOGRAPHIC) {
5462
       if (serial_device_index == 0)
5463
           serial_devices[0] = "stdio";
5464
       if (parallel_device_index == 0)
5465
           parallel_devices[0] = "null";
5466
       if (strncmp(monitor_devices[0], "vc", 2) == 0) {
5467
           monitor_devices[0] = "stdio";
5468
       }
5469
    }
5470

    
5471
#ifndef _WIN32
5472
    if (daemonize) {
5473
        pid_t pid;
5474

    
5475
        if (pipe(fds) == -1)
5476
            exit(1);
5477

    
5478
        pid = fork();
5479
        if (pid > 0) {
5480
            uint8_t status;
5481
            ssize_t len;
5482

    
5483
            close(fds[1]);
5484

    
5485
        again:
5486
            len = read(fds[0], &status, 1);
5487
            if (len == -1 && (errno == EINTR))
5488
                goto again;
5489

    
5490
            if (len != 1)
5491
                exit(1);
5492
            else if (status == 1) {
5493
                fprintf(stderr, "Could not acquire pidfile\n");
5494
                exit(1);
5495
            } else
5496
                exit(0);
5497
        } else if (pid < 0)
5498
            exit(1);
5499

    
5500
        setsid();
5501

    
5502
        pid = fork();
5503
        if (pid > 0)
5504
            exit(0);
5505
        else if (pid < 0)
5506
            exit(1);
5507

    
5508
        umask(027);
5509

    
5510
        signal(SIGTSTP, SIG_IGN);
5511
        signal(SIGTTOU, SIG_IGN);
5512
        signal(SIGTTIN, SIG_IGN);
5513
    }
5514

    
5515
    if (pid_file && qemu_create_pidfile(pid_file) != 0) {
5516
        if (daemonize) {
5517
            uint8_t status = 1;
5518
            write(fds[1], &status, 1);
5519
        } else
5520
            fprintf(stderr, "Could not acquire pid file\n");
5521
        exit(1);
5522
    }
5523
#endif
5524

    
5525
    if (kvm_enabled()) {
5526
        int ret;
5527

    
5528
        ret = kvm_init(smp_cpus);
5529
        if (ret < 0) {
5530
            fprintf(stderr, "failed to initialize KVM\n");
5531
            exit(1);
5532
        }
5533
    }
5534

    
5535
    if (qemu_init_main_loop()) {
5536
        fprintf(stderr, "qemu_init_main_loop failed\n");
5537
        exit(1);
5538
    }
5539
    linux_boot = (kernel_filename != NULL);
5540

    
5541
    if (!linux_boot && *kernel_cmdline != '\0') {
5542
        fprintf(stderr, "-append only allowed with -kernel option\n");
5543
        exit(1);
5544
    }
5545

    
5546
    if (!linux_boot && initrd_filename != NULL) {
5547
        fprintf(stderr, "-initrd only allowed with -kernel option\n");
5548
        exit(1);
5549
    }
5550

    
5551
#ifndef _WIN32
5552
    /* Win32 doesn't support line-buffering and requires size >= 2 */
5553
    setvbuf(stdout, NULL, _IOLBF, 0);
5554
#endif
5555

    
5556
    init_timers();
5557
    if (init_timer_alarm() < 0) {
5558
        fprintf(stderr, "could not initialize alarm timer\n");
5559
        exit(1);
5560
    }
5561
    if (use_icount && icount_time_shift < 0) {
5562
        use_icount = 2;
5563
        /* 125MIPS seems a reasonable initial guess at the guest speed.
5564
           It will be corrected fairly quickly anyway.  */
5565
        icount_time_shift = 3;
5566
        init_icount_adjust();
5567
    }
5568

    
5569
#ifdef _WIN32
5570
    socket_init();
5571
#endif
5572

    
5573
    /* init network clients */
5574
    if (nb_net_clients == 0) {
5575
        /* if no clients, we use a default config */
5576
        net_clients[nb_net_clients++] = "nic";
5577
#ifdef CONFIG_SLIRP
5578
        net_clients[nb_net_clients++] = "user";
5579
#endif
5580
    }
5581

    
5582
    for(i = 0;i < nb_net_clients; i++) {
5583
        if (net_client_parse(net_clients[i]) < 0)
5584
            exit(1);
5585
    }
5586

    
5587
    net_boot = (boot_devices_bitmap >> ('n' - 'a')) & 0xF;
5588
    net_set_boot_mask(net_boot);
5589

    
5590
    net_client_check();
5591

    
5592
    /* init the bluetooth world */
5593
    if (foreach_device_config(DEV_BT, bt_parse))
5594
        exit(1);
5595

    
5596
    /* init the memory */
5597
    if (ram_size == 0)
5598
        ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
5599

    
5600
    /* init the dynamic translator */
5601
    cpu_exec_init_all(tb_size * 1024 * 1024);
5602

    
5603
    bdrv_init();
5604

    
5605
    /* we always create the cdrom drive, even if no disk is there */
5606
    drive_add(NULL, CDROM_ALIAS);
5607

    
5608
    /* we always create at least one floppy */
5609
    drive_add(NULL, FD_ALIAS, 0);
5610

    
5611
    /* we always create one sd slot, even if no card is in it */
5612
    drive_add(NULL, SD_ALIAS);
5613

    
5614
    /* open the virtual block devices */
5615
    if (snapshot)
5616
        qemu_opts_foreach(&qemu_drive_opts, drive_enable_snapshot, NULL, 0);
5617
    if (qemu_opts_foreach(&qemu_drive_opts, drive_init_func, machine, 1) != 0)
5618
        exit(1);
5619

    
5620
    vmstate_register(0, &vmstate_timers ,&timers_state);
5621
    register_savevm_live("ram", 0, 3, ram_save_live, NULL, ram_load, NULL);
5622

    
5623
    /* Maintain compatibility with multiple stdio monitors */
5624
    if (!strcmp(monitor_devices[0],"stdio")) {
5625
        for (i = 0; i < MAX_SERIAL_PORTS; i++) {
5626
            const char *devname = serial_devices[i];
5627
            if (devname && !strcmp(devname,"mon:stdio")) {
5628
                monitor_devices[0] = NULL;
5629
                break;
5630
            } else if (devname && !strcmp(devname,"stdio")) {
5631
                monitor_devices[0] = NULL;
5632
                serial_devices[i] = "mon:stdio";
5633
                break;
5634
            }
5635
        }
5636
    }
5637

    
5638
    if (nb_numa_nodes > 0) {
5639
        int i;
5640

    
5641
        if (nb_numa_nodes > smp_cpus) {
5642
            nb_numa_nodes = smp_cpus;
5643
        }
5644

    
5645
        /* If no memory size if given for any node, assume the default case
5646
         * and distribute the available memory equally across all nodes
5647
         */
5648
        for (i = 0; i < nb_numa_nodes; i++) {
5649
            if (node_mem[i] != 0)
5650
                break;
5651
        }
5652
        if (i == nb_numa_nodes) {
5653
            uint64_t usedmem = 0;
5654

    
5655
            /* On Linux, the each node's border has to be 8MB aligned,
5656
             * the final node gets the rest.
5657
             */
5658
            for (i = 0; i < nb_numa_nodes - 1; i++) {
5659
                node_mem[i] = (ram_size / nb_numa_nodes) & ~((1 << 23UL) - 1);
5660
                usedmem += node_mem[i];
5661
            }
5662
            node_mem[i] = ram_size - usedmem;
5663
        }
5664

    
5665
        for (i = 0; i < nb_numa_nodes; i++) {
5666
            if (node_cpumask[i] != 0)
5667
                break;
5668
        }
5669
        /* assigning the VCPUs round-robin is easier to implement, guest OSes
5670
         * must cope with this anyway, because there are BIOSes out there in
5671
         * real machines which also use this scheme.
5672
         */
5673
        if (i == nb_numa_nodes) {
5674
            for (i = 0; i < smp_cpus; i++) {
5675
                node_cpumask[i % nb_numa_nodes] |= 1 << i;
5676
            }
5677
        }
5678
    }
5679

    
5680
    for (i = 0; i < MAX_MONITOR_DEVICES; i++) {
5681
        const char *devname = monitor_devices[i];
5682
        if (devname && strcmp(devname, "none")) {
5683
            char label[32];
5684
            if (i == 0) {
5685
                snprintf(label, sizeof(label), "monitor");
5686
            } else {
5687
                snprintf(label, sizeof(label), "monitor%d", i);
5688
            }
5689
            monitor_hds[i] = qemu_chr_open(label, devname, NULL);
5690
            if (!monitor_hds[i]) {
5691
                fprintf(stderr, "qemu: could not open monitor device '%s'\n",
5692
                        devname);
5693
                exit(1);
5694
            }
5695
        }
5696
    }
5697

    
5698
    for(i = 0; i < MAX_SERIAL_PORTS; i++) {
5699
        const char *devname = serial_devices[i];
5700
        if (devname && strcmp(devname, "none")) {
5701
            char label[32];
5702
            snprintf(label, sizeof(label), "serial%d", i);
5703
            serial_hds[i] = qemu_chr_open(label, devname, NULL);
5704
            if (!serial_hds[i]) {
5705
                fprintf(stderr, "qemu: could not open serial device '%s'\n",
5706
                        devname);
5707
                exit(1);
5708
            }
5709
        }
5710
    }
5711

    
5712
    for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
5713
        const char *devname = parallel_devices[i];
5714
        if (devname && strcmp(devname, "none")) {
5715
            char label[32];
5716
            snprintf(label, sizeof(label), "parallel%d", i);
5717
            parallel_hds[i] = qemu_chr_open(label, devname, NULL);
5718
            if (!parallel_hds[i]) {
5719
                fprintf(stderr, "qemu: could not open parallel device '%s'\n",
5720
                        devname);
5721
                exit(1);
5722
            }
5723
        }
5724
    }
5725

    
5726
    for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
5727
        const char *devname = virtio_consoles[i];
5728
        if (devname && strcmp(devname, "none")) {
5729
            char label[32];
5730
            snprintf(label, sizeof(label), "virtcon%d", i);
5731
            virtcon_hds[i] = qemu_chr_open(label, devname, NULL);
5732
            if (!virtcon_hds[i]) {
5733
                fprintf(stderr, "qemu: could not open virtio console '%s'\n",
5734
                        devname);
5735
                exit(1);
5736
            }
5737
        }
5738
    }
5739

    
5740
    module_call_init(MODULE_INIT_DEVICE);
5741

    
5742
    if (watchdog) {
5743
        i = select_watchdog(watchdog);
5744
        if (i > 0)
5745
            exit (i == 1 ? 1 : 0);
5746
    }
5747

    
5748
    if (machine->compat_props) {
5749
        qdev_prop_register_compat(machine->compat_props);
5750
    }
5751
    machine->init(ram_size, boot_devices,
5752
                  kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
5753

    
5754

    
5755
#ifndef _WIN32
5756
    /* must be after terminal init, SDL library changes signal handlers */
5757
    sighandler_setup();
5758
#endif
5759

    
5760
    for (env = first_cpu; env != NULL; env = env->next_cpu) {
5761
        for (i = 0; i < nb_numa_nodes; i++) {
5762
            if (node_cpumask[i] & (1 << env->cpu_index)) {
5763
                env->numa_node = i;
5764
            }
5765
        }
5766
    }
5767

    
5768
    current_machine = machine;
5769

    
5770
    /* init USB devices */
5771
    if (usb_enabled) {
5772
        foreach_device_config(DEV_USB, usb_parse);
5773
    }
5774

    
5775
    /* init generic devices */
5776
    if (qemu_opts_foreach(&qemu_device_opts, device_init_func, NULL, 1) != 0)
5777
        exit(1);
5778

    
5779
    if (!display_state)
5780
        dumb_display_init();
5781
    /* just use the first displaystate for the moment */
5782
    ds = display_state;
5783

    
5784
    if (display_type == DT_DEFAULT) {
5785
#if defined(CONFIG_SDL) || defined(CONFIG_COCOA)
5786
        display_type = DT_SDL;
5787
#else
5788
        display_type = DT_VNC;
5789
        vnc_display = "localhost:0,to=99";
5790
        show_vnc_port = 1;
5791
#endif
5792
    }
5793
        
5794

    
5795
    switch (display_type) {
5796
    case DT_NOGRAPHIC:
5797
        break;
5798
#if defined(CONFIG_CURSES)
5799
    case DT_CURSES:
5800
        curses_display_init(ds, full_screen);
5801
        break;
5802
#endif
5803
#if defined(CONFIG_SDL)
5804
    case DT_SDL:
5805
        sdl_display_init(ds, full_screen, no_frame);
5806
        break;
5807
#elif defined(CONFIG_COCOA)
5808
    case DT_SDL:
5809
        cocoa_display_init(ds, full_screen);
5810
        break;
5811
#endif
5812
    case DT_VNC:
5813
        vnc_display_init(ds);
5814
        if (vnc_display_open(ds, vnc_display) < 0)
5815
            exit(1);
5816

    
5817
        if (show_vnc_port) {
5818
            printf("VNC server running on `%s'\n", vnc_display_local_addr(ds));
5819
        }
5820
        break;
5821
    default:
5822
        break;
5823
    }
5824
    dpy_resize(ds);
5825

    
5826
    dcl = ds->listeners;
5827
    while (dcl != NULL) {
5828
        if (dcl->dpy_refresh != NULL) {
5829
            ds->gui_timer = qemu_new_timer(rt_clock, gui_update, ds);
5830
            qemu_mod_timer(ds->gui_timer, qemu_get_clock(rt_clock));
5831
        }
5832
        dcl = dcl->next;
5833
    }
5834

    
5835
    if (display_type == DT_NOGRAPHIC || display_type == DT_VNC) {
5836
        nographic_timer = qemu_new_timer(rt_clock, nographic_update, NULL);
5837
        qemu_mod_timer(nographic_timer, qemu_get_clock(rt_clock));
5838
    }
5839

    
5840
    text_consoles_set_display(display_state);
5841
    qemu_chr_initial_reset();
5842

    
5843
    for (i = 0; i < MAX_MONITOR_DEVICES; i++) {
5844
        if (monitor_devices[i] && monitor_hds[i]) {
5845
            monitor_init(monitor_hds[i],
5846
                         MONITOR_USE_READLINE |
5847
                         ((i == 0) ? MONITOR_IS_DEFAULT : 0));
5848
        }
5849
    }
5850

    
5851
    for(i = 0; i < MAX_SERIAL_PORTS; i++) {
5852
        const char *devname = serial_devices[i];
5853
        if (devname && strcmp(devname, "none")) {
5854
            if (strstart(devname, "vc", 0))
5855
                qemu_chr_printf(serial_hds[i], "serial%d console\r\n", i);
5856
        }
5857
    }
5858

    
5859
    for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
5860
        const char *devname = parallel_devices[i];
5861
        if (devname && strcmp(devname, "none")) {
5862
            if (strstart(devname, "vc", 0))
5863
                qemu_chr_printf(parallel_hds[i], "parallel%d console\r\n", i);
5864
        }
5865
    }
5866

    
5867
    for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
5868
        const char *devname = virtio_consoles[i];
5869
        if (virtcon_hds[i] && devname) {
5870
            if (strstart(devname, "vc", 0))
5871
                qemu_chr_printf(virtcon_hds[i], "virtio console%d\r\n", i);
5872
        }
5873
    }
5874

    
5875
    if (gdbstub_dev && gdbserver_start(gdbstub_dev) < 0) {
5876
        fprintf(stderr, "qemu: could not open gdbserver on device '%s'\n",
5877
                gdbstub_dev);
5878
        exit(1);
5879
    }
5880

    
5881
    if (loadvm) {
5882
        if (load_vmstate(cur_mon, loadvm) < 0) {
5883
            autostart = 0;
5884
        }
5885
    }
5886

    
5887
    if (incoming) {
5888
        qemu_start_incoming_migration(incoming);
5889
    } else if (autostart) {
5890
        vm_start();
5891
    }
5892

    
5893
#ifndef _WIN32
5894
    if (daemonize) {
5895
        uint8_t status = 0;
5896
        ssize_t len;
5897

    
5898
    again1:
5899
        len = write(fds[1], &status, 1);
5900
        if (len == -1 && (errno == EINTR))
5901
            goto again1;
5902

    
5903
        if (len != 1)
5904
            exit(1);
5905

    
5906
        chdir("/");
5907
        TFR(fd = open("/dev/null", O_RDWR));
5908
        if (fd == -1)
5909
            exit(1);
5910
    }
5911

    
5912
    if (run_as) {
5913
        pwd = getpwnam(run_as);
5914
        if (!pwd) {
5915
            fprintf(stderr, "User \"%s\" doesn't exist\n", run_as);
5916
            exit(1);
5917
        }
5918
    }
5919

    
5920
    if (chroot_dir) {
5921
        if (chroot(chroot_dir) < 0) {
5922
            fprintf(stderr, "chroot failed\n");
5923
            exit(1);
5924
        }
5925
        chdir("/");
5926
    }
5927

    
5928
    if (run_as) {
5929
        if (setgid(pwd->pw_gid) < 0) {
5930
            fprintf(stderr, "Failed to setgid(%d)\n", pwd->pw_gid);
5931
            exit(1);
5932
        }
5933
        if (setuid(pwd->pw_uid) < 0) {
5934
            fprintf(stderr, "Failed to setuid(%d)\n", pwd->pw_uid);
5935
            exit(1);
5936
        }
5937
        if (setuid(0) != -1) {
5938
            fprintf(stderr, "Dropping privileges failed\n");
5939
            exit(1);
5940
        }
5941
    }
5942

    
5943
    if (daemonize) {
5944
        dup2(fd, 0);
5945
        dup2(fd, 1);
5946
        dup2(fd, 2);
5947

    
5948
        close(fd);
5949
    }
5950
#endif
5951

    
5952
    main_loop();
5953
    quit_timers();
5954
    net_cleanup();
5955

    
5956
    return 0;
5957
}