Statistics
| Branch: | Revision:

root / vl.c @ 6b99dadc

History | View | Annotate | Download (154.6 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
/* Needed early to override system queue definitions on BSD */
35
#include "sys-queue.h"
36

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

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

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

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

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

    
109
#ifdef _WIN32
110
#include <windows.h>
111
#include <mmsystem.h>
112
#endif
113

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

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

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

    
163
#include "disas.h"
164

    
165
#include "exec-all.h"
166

    
167
#include "qemu_socket.h"
168

    
169
#include "slirp/libslirp.h"
170

    
171
//#define DEBUG_NET
172
//#define DEBUG_SLIRP
173

    
174
#define DEFAULT_RAM_SIZE 128
175

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

    
252
int nb_numa_nodes;
253
uint64_t node_mem[MAX_NODES];
254
uint64_t node_cpumask[MAX_NODES];
255

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

    
269
uint8_t qemu_uuid[16];
270

    
271
static QEMUBootSetHandler *boot_set_handler;
272
static void *boot_set_opaque;
273

    
274
/***********************************************************/
275
/* x86 ISA bus support */
276

    
277
target_phys_addr_t isa_mem_base = 0;
278
PicState2 *isa_pic;
279

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

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

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

    
319
static QEMUBalloonEvent *qemu_balloon_event;
320
void *qemu_balloon_event_opaque;
321

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

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

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

    
341
/***********************************************************/
342
/* keyboard/mouse */
343

    
344
static QEMUPutKBDEvent *qemu_put_kbd_event;
345
static void *qemu_put_kbd_event_opaque;
346
static QEMUPutMouseEntry *qemu_put_mouse_event_head;
347
static QEMUPutMouseEntry *qemu_put_mouse_event_current;
348

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

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

    
361
    s = qemu_mallocz(sizeof(QEMUPutMouseEntry));
362

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

    
369
    if (!qemu_put_mouse_event_head) {
370
        qemu_put_mouse_event_head = qemu_put_mouse_event_current = s;
371
        return s;
372
    }
373

    
374
    cursor = qemu_put_mouse_event_head;
375
    while (cursor->next != NULL)
376
        cursor = cursor->next;
377

    
378
    cursor->next = s;
379
    qemu_put_mouse_event_current = s;
380

    
381
    return s;
382
}
383

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

    
388
    if (!qemu_put_mouse_event_head || entry == NULL)
389
        return;
390

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

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

    
408
    prev->next = entry->next;
409

    
410
    if (qemu_put_mouse_event_current == entry)
411
        qemu_put_mouse_event_current = prev;
412

    
413
    qemu_free(entry->qemu_put_mouse_event_name);
414
    qemu_free(entry);
415
}
416

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

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

    
430
    if (!qemu_put_mouse_event_current) {
431
        return;
432
    }
433

    
434
    mouse_event =
435
        qemu_put_mouse_event_current->qemu_put_mouse_event;
436
    mouse_event_opaque =
437
        qemu_put_mouse_event_current->qemu_put_mouse_event_opaque;
438

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

    
453
int kbd_mouse_is_absolute(void)
454
{
455
    if (!qemu_put_mouse_event_current)
456
        return 0;
457

    
458
    return qemu_put_mouse_event_current->qemu_put_mouse_event_absolute;
459
}
460

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

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

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

    
482
void do_mouse_set(Monitor *mon, int index)
483
{
484
    QEMUPutMouseEntry *cursor;
485
    int i = 0;
486

    
487
    if (!qemu_put_mouse_event_head) {
488
        monitor_printf(mon, "No mouse devices connected\n");
489
        return;
490
    }
491

    
492
    cursor = qemu_put_mouse_event_head;
493
    while (cursor != NULL && index != i) {
494
        i++;
495
        cursor = cursor->next;
496
    }
497

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

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

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

    
528
/***********************************************************/
529
/* real time host monotonic timer */
530

    
531
#define QEMU_TIMER_BASE 1000000000LL
532

    
533
#ifdef WIN32
534

    
535
static int64_t clock_freq;
536

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

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

    
556
#else
557

    
558
static int use_rt_clock;
559

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

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

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

    
608
/***********************************************************/
609
/* guest cycle counter */
610

    
611
static int64_t cpu_ticks_prev;
612
static int64_t cpu_ticks_offset;
613
static int64_t cpu_clock_offset;
614
static int cpu_ticks_enabled;
615

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

    
637
/* return the host CPU monotonic timer and handle stop/restart */
638
static int64_t cpu_get_clock(void)
639
{
640
    int64_t ti;
641
    if (!cpu_ticks_enabled) {
642
        return cpu_clock_offset;
643
    } else {
644
        ti = get_clock();
645
        return ti + cpu_clock_offset;
646
    }
647
}
648

    
649
/* enable cpu_get_ticks() */
650
void cpu_enable_ticks(void)
651
{
652
    if (!cpu_ticks_enabled) {
653
        cpu_ticks_offset -= cpu_get_real_ticks();
654
        cpu_clock_offset -= get_clock();
655
        cpu_ticks_enabled = 1;
656
    }
657
}
658

    
659
/* disable cpu_get_ticks() : the clock is stopped. You must not call
660
   cpu_get_ticks() after that.  */
661
void cpu_disable_ticks(void)
662
{
663
    if (cpu_ticks_enabled) {
664
        cpu_ticks_offset = cpu_get_ticks();
665
        cpu_clock_offset = cpu_get_clock();
666
        cpu_ticks_enabled = 0;
667
    }
668
}
669

    
670
/***********************************************************/
671
/* timers */
672

    
673
#define QEMU_TIMER_REALTIME 0
674
#define QEMU_TIMER_VIRTUAL  1
675

    
676
struct QEMUClock {
677
    int type;
678
    /* XXX: add frequency */
679
};
680

    
681
struct QEMUTimer {
682
    QEMUClock *clock;
683
    int64_t expire_time;
684
    QEMUTimerCB *cb;
685
    void *opaque;
686
    struct QEMUTimer *next;
687
};
688

    
689
struct qemu_alarm_timer {
690
    char const *name;
691
    unsigned int flags;
692

    
693
    int (*start)(struct qemu_alarm_timer *t);
694
    void (*stop)(struct qemu_alarm_timer *t);
695
    void (*rearm)(struct qemu_alarm_timer *t);
696
    void *priv;
697
};
698

    
699
#define ALARM_FLAG_DYNTICKS  0x1
700
#define ALARM_FLAG_EXPIRED   0x2
701

    
702
static inline int alarm_has_dynticks(struct qemu_alarm_timer *t)
703
{
704
    return t && (t->flags & ALARM_FLAG_DYNTICKS);
705
}
706

    
707
static void qemu_rearm_alarm_timer(struct qemu_alarm_timer *t)
708
{
709
    if (!alarm_has_dynticks(t))
710
        return;
711

    
712
    t->rearm(t);
713
}
714

    
715
/* TODO: MIN_TIMER_REARM_US should be optimized */
716
#define MIN_TIMER_REARM_US 250
717

    
718
static struct qemu_alarm_timer *alarm_timer;
719

    
720
#ifdef _WIN32
721

    
722
struct qemu_alarm_win32 {
723
    MMRESULT timerId;
724
    unsigned int period;
725
} alarm_win32_data = {0, -1};
726

    
727
static int win32_start_timer(struct qemu_alarm_timer *t);
728
static void win32_stop_timer(struct qemu_alarm_timer *t);
729
static void win32_rearm_timer(struct qemu_alarm_timer *t);
730

    
731
#else
732

    
733
static int unix_start_timer(struct qemu_alarm_timer *t);
734
static void unix_stop_timer(struct qemu_alarm_timer *t);
735

    
736
#ifdef __linux__
737

    
738
static int dynticks_start_timer(struct qemu_alarm_timer *t);
739
static void dynticks_stop_timer(struct qemu_alarm_timer *t);
740
static void dynticks_rearm_timer(struct qemu_alarm_timer *t);
741

    
742
static int hpet_start_timer(struct qemu_alarm_timer *t);
743
static void hpet_stop_timer(struct qemu_alarm_timer *t);
744

    
745
static int rtc_start_timer(struct qemu_alarm_timer *t);
746
static void rtc_stop_timer(struct qemu_alarm_timer *t);
747

    
748
#endif /* __linux__ */
749

    
750
#endif /* _WIN32 */
751

    
752
/* Correlation between real and virtual time is always going to be
753
   fairly approximate, so ignore small variation.
754
   When the guest is idle real and virtual time will be aligned in
755
   the IO wait loop.  */
756
#define ICOUNT_WOBBLE (QEMU_TIMER_BASE / 10)
757

    
758
static void icount_adjust(void)
759
{
760
    int64_t cur_time;
761
    int64_t cur_icount;
762
    int64_t delta;
763
    static int64_t last_delta;
764
    /* If the VM is not running, then do nothing.  */
765
    if (!vm_running)
766
        return;
767

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

    
788
static void icount_adjust_rt(void * opaque)
789
{
790
    qemu_mod_timer(icount_rt_timer,
791
                   qemu_get_clock(rt_clock) + 1000);
792
    icount_adjust();
793
}
794

    
795
static void icount_adjust_vm(void * opaque)
796
{
797
    qemu_mod_timer(icount_vm_timer,
798
                   qemu_get_clock(vm_clock) + QEMU_TIMER_BASE / 10);
799
    icount_adjust();
800
}
801

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

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

    
837
static void show_available_alarms(void)
838
{
839
    int i;
840

    
841
    printf("Available alarm timers, in order of precedence:\n");
842
    for (i = 0; alarm_timers[i].name; i++)
843
        printf("%s\n", alarm_timers[i].name);
844
}
845

    
846
static void configure_alarms(char const *opt)
847
{
848
    int i;
849
    int cur = 0;
850
    int count = ARRAY_SIZE(alarm_timers) - 1;
851
    char *arg;
852
    char *name;
853
    struct qemu_alarm_timer tmp;
854

    
855
    if (!strcmp(opt, "?")) {
856
        show_available_alarms();
857
        exit(0);
858
    }
859

    
860
    arg = strdup(opt);
861

    
862
    /* Reorder the array */
863
    name = strtok(arg, ",");
864
    while (name) {
865
        for (i = 0; i < count && alarm_timers[i].name; i++) {
866
            if (!strcmp(alarm_timers[i].name, name))
867
                break;
868
        }
869

    
870
        if (i == count) {
871
            fprintf(stderr, "Unknown clock %s\n", name);
872
            goto next;
873
        }
874

    
875
        if (i < cur)
876
            /* Ignore */
877
            goto next;
878

    
879
        /* Swap */
880
        tmp = alarm_timers[i];
881
        alarm_timers[i] = alarm_timers[cur];
882
        alarm_timers[cur] = tmp;
883

    
884
        cur++;
885
next:
886
        name = strtok(NULL, ",");
887
    }
888

    
889
    free(arg);
890

    
891
    if (cur) {
892
        /* Disable remaining timers */
893
        for (i = cur; i < count; i++)
894
            alarm_timers[i].name = NULL;
895
    } else {
896
        show_available_alarms();
897
        exit(1);
898
    }
899
}
900

    
901
QEMUClock *rt_clock;
902
QEMUClock *vm_clock;
903

    
904
static QEMUTimer *active_timers[2];
905

    
906
static QEMUClock *qemu_new_clock(int type)
907
{
908
    QEMUClock *clock;
909
    clock = qemu_mallocz(sizeof(QEMUClock));
910
    clock->type = type;
911
    return clock;
912
}
913

    
914
QEMUTimer *qemu_new_timer(QEMUClock *clock, QEMUTimerCB *cb, void *opaque)
915
{
916
    QEMUTimer *ts;
917

    
918
    ts = qemu_mallocz(sizeof(QEMUTimer));
919
    ts->clock = clock;
920
    ts->cb = cb;
921
    ts->opaque = opaque;
922
    return ts;
923
}
924

    
925
void qemu_free_timer(QEMUTimer *ts)
926
{
927
    qemu_free(ts);
928
}
929

    
930
/* stop a timer, but do not dealloc it */
931
void qemu_del_timer(QEMUTimer *ts)
932
{
933
    QEMUTimer **pt, *t;
934

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

    
950
/* modify the current timer so that it will be fired when current_time
951
   >= expire_time. The corresponding callback will be called. */
952
void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time)
953
{
954
    QEMUTimer **pt, *t;
955

    
956
    qemu_del_timer(ts);
957

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

    
974
    /* Rearm if necessary  */
975
    if (pt == &active_timers[ts->clock->type]) {
976
        if ((alarm_timer->flags & ALARM_FLAG_EXPIRED) == 0) {
977
            qemu_rearm_alarm_timer(alarm_timer);
978
        }
979
        /* Interrupt execution to force deadline recalculation.  */
980
        if (use_icount)
981
            qemu_notify_event();
982
    }
983
}
984

    
985
int qemu_timer_pending(QEMUTimer *ts)
986
{
987
    QEMUTimer *t;
988
    for(t = active_timers[ts->clock->type]; t != NULL; t = t->next) {
989
        if (t == ts)
990
            return 1;
991
    }
992
    return 0;
993
}
994

    
995
int qemu_timer_expired(QEMUTimer *timer_head, int64_t current_time)
996
{
997
    if (!timer_head)
998
        return 0;
999
    return (timer_head->expire_time <= current_time);
1000
}
1001

    
1002
static void qemu_run_timers(QEMUTimer **ptimer_head, int64_t current_time)
1003
{
1004
    QEMUTimer *ts;
1005

    
1006
    for(;;) {
1007
        ts = *ptimer_head;
1008
        if (!ts || ts->expire_time > current_time)
1009
            break;
1010
        /* remove timer from the list before calling the callback */
1011
        *ptimer_head = ts->next;
1012
        ts->next = NULL;
1013

    
1014
        /* run the callback (the timer list can be modified) */
1015
        ts->cb(ts->opaque);
1016
    }
1017
}
1018

    
1019
int64_t qemu_get_clock(QEMUClock *clock)
1020
{
1021
    switch(clock->type) {
1022
    case QEMU_TIMER_REALTIME:
1023
        return get_clock() / 1000000;
1024
    default:
1025
    case QEMU_TIMER_VIRTUAL:
1026
        if (use_icount) {
1027
            return cpu_get_icount();
1028
        } else {
1029
            return cpu_get_clock();
1030
        }
1031
    }
1032
}
1033

    
1034
static void init_timers(void)
1035
{
1036
    init_get_clock();
1037
    ticks_per_sec = QEMU_TIMER_BASE;
1038
    rt_clock = qemu_new_clock(QEMU_TIMER_REALTIME);
1039
    vm_clock = qemu_new_clock(QEMU_TIMER_VIRTUAL);
1040
}
1041

    
1042
/* save a timer */
1043
void qemu_put_timer(QEMUFile *f, QEMUTimer *ts)
1044
{
1045
    uint64_t expire_time;
1046

    
1047
    if (qemu_timer_pending(ts)) {
1048
        expire_time = ts->expire_time;
1049
    } else {
1050
        expire_time = -1;
1051
    }
1052
    qemu_put_be64(f, expire_time);
1053
}
1054

    
1055
void qemu_get_timer(QEMUFile *f, QEMUTimer *ts)
1056
{
1057
    uint64_t expire_time;
1058

    
1059
    expire_time = qemu_get_be64(f);
1060
    if (expire_time != -1) {
1061
        qemu_mod_timer(ts, expire_time);
1062
    } else {
1063
        qemu_del_timer(ts);
1064
    }
1065
}
1066

    
1067
static void timer_save(QEMUFile *f, void *opaque)
1068
{
1069
    if (cpu_ticks_enabled) {
1070
        hw_error("cannot save state if virtual timers are running");
1071
    }
1072
    qemu_put_be64(f, cpu_ticks_offset);
1073
    qemu_put_be64(f, ticks_per_sec);
1074
    qemu_put_be64(f, cpu_clock_offset);
1075
}
1076

    
1077
static int timer_load(QEMUFile *f, void *opaque, int version_id)
1078
{
1079
    if (version_id != 1 && version_id != 2)
1080
        return -EINVAL;
1081
    if (cpu_ticks_enabled) {
1082
        return -EINVAL;
1083
    }
1084
    cpu_ticks_offset=qemu_get_be64(f);
1085
    ticks_per_sec=qemu_get_be64(f);
1086
    if (version_id == 2) {
1087
        cpu_clock_offset=qemu_get_be64(f);
1088
    }
1089
    return 0;
1090
}
1091

    
1092
static void qemu_event_increment(void);
1093

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

    
1140
#ifndef CONFIG_IOTHREAD
1141
        if (next_cpu) {
1142
            /* stop the currently executing cpu because a timer occured */
1143
            cpu_exit(next_cpu);
1144
#ifdef CONFIG_KQEMU
1145
            if (next_cpu->kqemu_enabled) {
1146
                kqemu_cpu_interrupt(next_cpu);
1147
            }
1148
#endif
1149
        }
1150
#endif
1151
        timer_alarm_pending = 1;
1152
        qemu_notify_event();
1153
    }
1154
}
1155

    
1156
static int64_t qemu_next_deadline(void)
1157
{
1158
    int64_t delta;
1159

    
1160
    if (active_timers[QEMU_TIMER_VIRTUAL]) {
1161
        delta = active_timers[QEMU_TIMER_VIRTUAL]->expire_time -
1162
                     qemu_get_clock(vm_clock);
1163
    } else {
1164
        /* To avoid problems with overflow limit this to 2^32.  */
1165
        delta = INT32_MAX;
1166
    }
1167

    
1168
    if (delta < 0)
1169
        delta = 0;
1170

    
1171
    return delta;
1172
}
1173

    
1174
#if defined(__linux__) || defined(_WIN32)
1175
static uint64_t qemu_next_deadline_dyntick(void)
1176
{
1177
    int64_t delta;
1178
    int64_t rtdelta;
1179

    
1180
    if (use_icount)
1181
        delta = INT32_MAX;
1182
    else
1183
        delta = (qemu_next_deadline() + 999) / 1000;
1184

    
1185
    if (active_timers[QEMU_TIMER_REALTIME]) {
1186
        rtdelta = (active_timers[QEMU_TIMER_REALTIME]->expire_time -
1187
                 qemu_get_clock(rt_clock))*1000;
1188
        if (rtdelta < delta)
1189
            delta = rtdelta;
1190
    }
1191

    
1192
    if (delta < MIN_TIMER_REARM_US)
1193
        delta = MIN_TIMER_REARM_US;
1194

    
1195
    return delta;
1196
}
1197
#endif
1198

    
1199
#ifndef _WIN32
1200

    
1201
/* Sets a specific flag */
1202
static int fcntl_setfl(int fd, int flag)
1203
{
1204
    int flags;
1205

    
1206
    flags = fcntl(fd, F_GETFL);
1207
    if (flags == -1)
1208
        return -errno;
1209

    
1210
    if (fcntl(fd, F_SETFL, flags | flag) == -1)
1211
        return -errno;
1212

    
1213
    return 0;
1214
}
1215

    
1216
#if defined(__linux__)
1217

    
1218
#define RTC_FREQ 1024
1219

    
1220
static void enable_sigio_timer(int fd)
1221
{
1222
    struct sigaction act;
1223

    
1224
    /* timer signal */
1225
    sigfillset(&act.sa_mask);
1226
    act.sa_flags = 0;
1227
    act.sa_handler = host_alarm_handler;
1228

    
1229
    sigaction(SIGIO, &act, NULL);
1230
    fcntl_setfl(fd, O_ASYNC);
1231
    fcntl(fd, F_SETOWN, getpid());
1232
}
1233

    
1234
static int hpet_start_timer(struct qemu_alarm_timer *t)
1235
{
1236
    struct hpet_info info;
1237
    int r, fd;
1238

    
1239
    fd = open("/dev/hpet", O_RDONLY);
1240
    if (fd < 0)
1241
        return -1;
1242

    
1243
    /* Set frequency */
1244
    r = ioctl(fd, HPET_IRQFREQ, RTC_FREQ);
1245
    if (r < 0) {
1246
        fprintf(stderr, "Could not configure '/dev/hpet' to have a 1024Hz timer. This is not a fatal\n"
1247
                "error, but for better emulation accuracy type:\n"
1248
                "'echo 1024 > /proc/sys/dev/hpet/max-user-freq' as root.\n");
1249
        goto fail;
1250
    }
1251

    
1252
    /* Check capabilities */
1253
    r = ioctl(fd, HPET_INFO, &info);
1254
    if (r < 0)
1255
        goto fail;
1256

    
1257
    /* Enable periodic mode */
1258
    r = ioctl(fd, HPET_EPI, 0);
1259
    if (info.hi_flags && (r < 0))
1260
        goto fail;
1261

    
1262
    /* Enable interrupt */
1263
    r = ioctl(fd, HPET_IE_ON, 0);
1264
    if (r < 0)
1265
        goto fail;
1266

    
1267
    enable_sigio_timer(fd);
1268
    t->priv = (void *)(long)fd;
1269

    
1270
    return 0;
1271
fail:
1272
    close(fd);
1273
    return -1;
1274
}
1275

    
1276
static void hpet_stop_timer(struct qemu_alarm_timer *t)
1277
{
1278
    int fd = (long)t->priv;
1279

    
1280
    close(fd);
1281
}
1282

    
1283
static int rtc_start_timer(struct qemu_alarm_timer *t)
1284
{
1285
    int rtc_fd;
1286
    unsigned long current_rtc_freq = 0;
1287

    
1288
    TFR(rtc_fd = open("/dev/rtc", O_RDONLY));
1289
    if (rtc_fd < 0)
1290
        return -1;
1291
    ioctl(rtc_fd, RTC_IRQP_READ, &current_rtc_freq);
1292
    if (current_rtc_freq != RTC_FREQ &&
1293
        ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
1294
        fprintf(stderr, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n"
1295
                "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n"
1296
                "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n");
1297
        goto fail;
1298
    }
1299
    if (ioctl(rtc_fd, RTC_PIE_ON, 0) < 0) {
1300
    fail:
1301
        close(rtc_fd);
1302
        return -1;
1303
    }
1304

    
1305
    enable_sigio_timer(rtc_fd);
1306

    
1307
    t->priv = (void *)(long)rtc_fd;
1308

    
1309
    return 0;
1310
}
1311

    
1312
static void rtc_stop_timer(struct qemu_alarm_timer *t)
1313
{
1314
    int rtc_fd = (long)t->priv;
1315

    
1316
    close(rtc_fd);
1317
}
1318

    
1319
static int dynticks_start_timer(struct qemu_alarm_timer *t)
1320
{
1321
    struct sigevent ev;
1322
    timer_t host_timer;
1323
    struct sigaction act;
1324

    
1325
    sigfillset(&act.sa_mask);
1326
    act.sa_flags = 0;
1327
    act.sa_handler = host_alarm_handler;
1328

    
1329
    sigaction(SIGALRM, &act, NULL);
1330

    
1331
    /* 
1332
     * Initialize ev struct to 0 to avoid valgrind complaining
1333
     * about uninitialized data in timer_create call
1334
     */
1335
    memset(&ev, 0, sizeof(ev));
1336
    ev.sigev_value.sival_int = 0;
1337
    ev.sigev_notify = SIGEV_SIGNAL;
1338
    ev.sigev_signo = SIGALRM;
1339

    
1340
    if (timer_create(CLOCK_REALTIME, &ev, &host_timer)) {
1341
        perror("timer_create");
1342

    
1343
        /* disable dynticks */
1344
        fprintf(stderr, "Dynamic Ticks disabled\n");
1345

    
1346
        return -1;
1347
    }
1348

    
1349
    t->priv = (void *)(long)host_timer;
1350

    
1351
    return 0;
1352
}
1353

    
1354
static void dynticks_stop_timer(struct qemu_alarm_timer *t)
1355
{
1356
    timer_t host_timer = (timer_t)(long)t->priv;
1357

    
1358
    timer_delete(host_timer);
1359
}
1360

    
1361
static void dynticks_rearm_timer(struct qemu_alarm_timer *t)
1362
{
1363
    timer_t host_timer = (timer_t)(long)t->priv;
1364
    struct itimerspec timeout;
1365
    int64_t nearest_delta_us = INT64_MAX;
1366
    int64_t current_us;
1367

    
1368
    if (!active_timers[QEMU_TIMER_REALTIME] &&
1369
                !active_timers[QEMU_TIMER_VIRTUAL])
1370
        return;
1371

    
1372
    nearest_delta_us = qemu_next_deadline_dyntick();
1373

    
1374
    /* check whether a timer is already running */
1375
    if (timer_gettime(host_timer, &timeout)) {
1376
        perror("gettime");
1377
        fprintf(stderr, "Internal timer error: aborting\n");
1378
        exit(1);
1379
    }
1380
    current_us = timeout.it_value.tv_sec * 1000000 + timeout.it_value.tv_nsec/1000;
1381
    if (current_us && current_us <= nearest_delta_us)
1382
        return;
1383

    
1384
    timeout.it_interval.tv_sec = 0;
1385
    timeout.it_interval.tv_nsec = 0; /* 0 for one-shot timer */
1386
    timeout.it_value.tv_sec =  nearest_delta_us / 1000000;
1387
    timeout.it_value.tv_nsec = (nearest_delta_us % 1000000) * 1000;
1388
    if (timer_settime(host_timer, 0 /* RELATIVE */, &timeout, NULL)) {
1389
        perror("settime");
1390
        fprintf(stderr, "Internal timer error: aborting\n");
1391
        exit(1);
1392
    }
1393
}
1394

    
1395
#endif /* defined(__linux__) */
1396

    
1397
static int unix_start_timer(struct qemu_alarm_timer *t)
1398
{
1399
    struct sigaction act;
1400
    struct itimerval itv;
1401
    int err;
1402

    
1403
    /* timer signal */
1404
    sigfillset(&act.sa_mask);
1405
    act.sa_flags = 0;
1406
    act.sa_handler = host_alarm_handler;
1407

    
1408
    sigaction(SIGALRM, &act, NULL);
1409

    
1410
    itv.it_interval.tv_sec = 0;
1411
    /* for i386 kernel 2.6 to get 1 ms */
1412
    itv.it_interval.tv_usec = 999;
1413
    itv.it_value.tv_sec = 0;
1414
    itv.it_value.tv_usec = 10 * 1000;
1415

    
1416
    err = setitimer(ITIMER_REAL, &itv, NULL);
1417
    if (err)
1418
        return -1;
1419

    
1420
    return 0;
1421
}
1422

    
1423
static void unix_stop_timer(struct qemu_alarm_timer *t)
1424
{
1425
    struct itimerval itv;
1426

    
1427
    memset(&itv, 0, sizeof(itv));
1428
    setitimer(ITIMER_REAL, &itv, NULL);
1429
}
1430

    
1431
#endif /* !defined(_WIN32) */
1432

    
1433

    
1434
#ifdef _WIN32
1435

    
1436
static int win32_start_timer(struct qemu_alarm_timer *t)
1437
{
1438
    TIMECAPS tc;
1439
    struct qemu_alarm_win32 *data = t->priv;
1440
    UINT flags;
1441

    
1442
    memset(&tc, 0, sizeof(tc));
1443
    timeGetDevCaps(&tc, sizeof(tc));
1444

    
1445
    if (data->period < tc.wPeriodMin)
1446
        data->period = tc.wPeriodMin;
1447

    
1448
    timeBeginPeriod(data->period);
1449

    
1450
    flags = TIME_CALLBACK_FUNCTION;
1451
    if (alarm_has_dynticks(t))
1452
        flags |= TIME_ONESHOT;
1453
    else
1454
        flags |= TIME_PERIODIC;
1455

    
1456
    data->timerId = timeSetEvent(1,         // interval (ms)
1457
                        data->period,       // resolution
1458
                        host_alarm_handler, // function
1459
                        (DWORD)t,           // parameter
1460
                        flags);
1461

    
1462
    if (!data->timerId) {
1463
        perror("Failed to initialize win32 alarm timer");
1464
        timeEndPeriod(data->period);
1465
        return -1;
1466
    }
1467

    
1468
    return 0;
1469
}
1470

    
1471
static void win32_stop_timer(struct qemu_alarm_timer *t)
1472
{
1473
    struct qemu_alarm_win32 *data = t->priv;
1474

    
1475
    timeKillEvent(data->timerId);
1476
    timeEndPeriod(data->period);
1477
}
1478

    
1479
static void win32_rearm_timer(struct qemu_alarm_timer *t)
1480
{
1481
    struct qemu_alarm_win32 *data = t->priv;
1482
    uint64_t nearest_delta_us;
1483

    
1484
    if (!active_timers[QEMU_TIMER_REALTIME] &&
1485
                !active_timers[QEMU_TIMER_VIRTUAL])
1486
        return;
1487

    
1488
    nearest_delta_us = qemu_next_deadline_dyntick();
1489
    nearest_delta_us /= 1000;
1490

    
1491
    timeKillEvent(data->timerId);
1492

    
1493
    data->timerId = timeSetEvent(1,
1494
                        data->period,
1495
                        host_alarm_handler,
1496
                        (DWORD)t,
1497
                        TIME_ONESHOT | TIME_PERIODIC);
1498

    
1499
    if (!data->timerId) {
1500
        perror("Failed to re-arm win32 alarm timer");
1501

    
1502
        timeEndPeriod(data->period);
1503
        exit(1);
1504
    }
1505
}
1506

    
1507
#endif /* _WIN32 */
1508

    
1509
static int init_timer_alarm(void)
1510
{
1511
    struct qemu_alarm_timer *t = NULL;
1512
    int i, err = -1;
1513

    
1514
    for (i = 0; alarm_timers[i].name; i++) {
1515
        t = &alarm_timers[i];
1516

    
1517
        err = t->start(t);
1518
        if (!err)
1519
            break;
1520
    }
1521

    
1522
    if (err) {
1523
        err = -ENOENT;
1524
        goto fail;
1525
    }
1526

    
1527
    alarm_timer = t;
1528

    
1529
    return 0;
1530

    
1531
fail:
1532
    return err;
1533
}
1534

    
1535
static void quit_timers(void)
1536
{
1537
    alarm_timer->stop(alarm_timer);
1538
    alarm_timer = NULL;
1539
}
1540

    
1541
/***********************************************************/
1542
/* host time/date access */
1543
void qemu_get_timedate(struct tm *tm, int offset)
1544
{
1545
    time_t ti;
1546
    struct tm *ret;
1547

    
1548
    time(&ti);
1549
    ti += offset;
1550
    if (rtc_date_offset == -1) {
1551
        if (rtc_utc)
1552
            ret = gmtime(&ti);
1553
        else
1554
            ret = localtime(&ti);
1555
    } else {
1556
        ti -= rtc_date_offset;
1557
        ret = gmtime(&ti);
1558
    }
1559

    
1560
    memcpy(tm, ret, sizeof(struct tm));
1561
}
1562

    
1563
int qemu_timedate_diff(struct tm *tm)
1564
{
1565
    time_t seconds;
1566

    
1567
    if (rtc_date_offset == -1)
1568
        if (rtc_utc)
1569
            seconds = mktimegm(tm);
1570
        else
1571
            seconds = mktime(tm);
1572
    else
1573
        seconds = mktimegm(tm) + rtc_date_offset;
1574

    
1575
    return seconds - time(NULL);
1576
}
1577

    
1578
#ifdef _WIN32
1579
static void socket_cleanup(void)
1580
{
1581
    WSACleanup();
1582
}
1583

    
1584
static int socket_init(void)
1585
{
1586
    WSADATA Data;
1587
    int ret, err;
1588

    
1589
    ret = WSAStartup(MAKEWORD(2,2), &Data);
1590
    if (ret != 0) {
1591
        err = WSAGetLastError();
1592
        fprintf(stderr, "WSAStartup: %d\n", err);
1593
        return -1;
1594
    }
1595
    atexit(socket_cleanup);
1596
    return 0;
1597
}
1598
#endif
1599

    
1600
/***********************************************************/
1601
/* Bluetooth support */
1602
static int nb_hcis;
1603
static int cur_hci;
1604
static struct HCIInfo *hci_table[MAX_NICS];
1605

    
1606
static struct bt_vlan_s {
1607
    struct bt_scatternet_s net;
1608
    int id;
1609
    struct bt_vlan_s *next;
1610
} *first_bt_vlan;
1611

    
1612
/* find or alloc a new bluetooth "VLAN" */
1613
static struct bt_scatternet_s *qemu_find_bt_vlan(int id)
1614
{
1615
    struct bt_vlan_s **pvlan, *vlan;
1616
    for (vlan = first_bt_vlan; vlan != NULL; vlan = vlan->next) {
1617
        if (vlan->id == id)
1618
            return &vlan->net;
1619
    }
1620
    vlan = qemu_mallocz(sizeof(struct bt_vlan_s));
1621
    vlan->id = id;
1622
    pvlan = &first_bt_vlan;
1623
    while (*pvlan != NULL)
1624
        pvlan = &(*pvlan)->next;
1625
    *pvlan = vlan;
1626
    return &vlan->net;
1627
}
1628

    
1629
static void null_hci_send(struct HCIInfo *hci, const uint8_t *data, int len)
1630
{
1631
}
1632

    
1633
static int null_hci_addr_set(struct HCIInfo *hci, const uint8_t *bd_addr)
1634
{
1635
    return -ENOTSUP;
1636
}
1637

    
1638
static struct HCIInfo null_hci = {
1639
    .cmd_send = null_hci_send,
1640
    .sco_send = null_hci_send,
1641
    .acl_send = null_hci_send,
1642
    .bdaddr_set = null_hci_addr_set,
1643
};
1644

    
1645
struct HCIInfo *qemu_next_hci(void)
1646
{
1647
    if (cur_hci == nb_hcis)
1648
        return &null_hci;
1649

    
1650
    return hci_table[cur_hci++];
1651
}
1652

    
1653
static struct HCIInfo *hci_init(const char *str)
1654
{
1655
    char *endp;
1656
    struct bt_scatternet_s *vlan = 0;
1657

    
1658
    if (!strcmp(str, "null"))
1659
        /* null */
1660
        return &null_hci;
1661
    else if (!strncmp(str, "host", 4) && (str[4] == '\0' || str[4] == ':'))
1662
        /* host[:hciN] */
1663
        return bt_host_hci(str[4] ? str + 5 : "hci0");
1664
    else if (!strncmp(str, "hci", 3)) {
1665
        /* hci[,vlan=n] */
1666
        if (str[3]) {
1667
            if (!strncmp(str + 3, ",vlan=", 6)) {
1668
                vlan = qemu_find_bt_vlan(strtol(str + 9, &endp, 0));
1669
                if (*endp)
1670
                    vlan = 0;
1671
            }
1672
        } else
1673
            vlan = qemu_find_bt_vlan(0);
1674
        if (vlan)
1675
           return bt_new_hci(vlan);
1676
    }
1677

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

    
1680
    return 0;
1681
}
1682

    
1683
static int bt_hci_parse(const char *str)
1684
{
1685
    struct HCIInfo *hci;
1686
    bdaddr_t bdaddr;
1687

    
1688
    if (nb_hcis >= MAX_NICS) {
1689
        fprintf(stderr, "qemu: Too many bluetooth HCIs (max %i).\n", MAX_NICS);
1690
        return -1;
1691
    }
1692

    
1693
    hci = hci_init(str);
1694
    if (!hci)
1695
        return -1;
1696

    
1697
    bdaddr.b[0] = 0x52;
1698
    bdaddr.b[1] = 0x54;
1699
    bdaddr.b[2] = 0x00;
1700
    bdaddr.b[3] = 0x12;
1701
    bdaddr.b[4] = 0x34;
1702
    bdaddr.b[5] = 0x56 + nb_hcis;
1703
    hci->bdaddr_set(hci, bdaddr.b);
1704

    
1705
    hci_table[nb_hcis++] = hci;
1706

    
1707
    return 0;
1708
}
1709

    
1710
static void bt_vhci_add(int vlan_id)
1711
{
1712
    struct bt_scatternet_s *vlan = qemu_find_bt_vlan(vlan_id);
1713

    
1714
    if (!vlan->slave)
1715
        fprintf(stderr, "qemu: warning: adding a VHCI to "
1716
                        "an empty scatternet %i\n", vlan_id);
1717

    
1718
    bt_vhci_init(bt_new_hci(vlan));
1719
}
1720

    
1721
static struct bt_device_s *bt_device_add(const char *opt)
1722
{
1723
    struct bt_scatternet_s *vlan;
1724
    int vlan_id = 0;
1725
    char *endp = strstr(opt, ",vlan=");
1726
    int len = (endp ? endp - opt : strlen(opt)) + 1;
1727
    char devname[10];
1728

    
1729
    pstrcpy(devname, MIN(sizeof(devname), len), opt);
1730

    
1731
    if (endp) {
1732
        vlan_id = strtol(endp + 6, &endp, 0);
1733
        if (*endp) {
1734
            fprintf(stderr, "qemu: unrecognised bluetooth vlan Id\n");
1735
            return 0;
1736
        }
1737
    }
1738

    
1739
    vlan = qemu_find_bt_vlan(vlan_id);
1740

    
1741
    if (!vlan->slave)
1742
        fprintf(stderr, "qemu: warning: adding a slave device to "
1743
                        "an empty scatternet %i\n", vlan_id);
1744

    
1745
    if (!strcmp(devname, "keyboard"))
1746
        return bt_keyboard_init(vlan);
1747

    
1748
    fprintf(stderr, "qemu: unsupported bluetooth device `%s'\n", devname);
1749
    return 0;
1750
}
1751

    
1752
static int bt_parse(const char *opt)
1753
{
1754
    const char *endp, *p;
1755
    int vlan;
1756

    
1757
    if (strstart(opt, "hci", &endp)) {
1758
        if (!*endp || *endp == ',') {
1759
            if (*endp)
1760
                if (!strstart(endp, ",vlan=", 0))
1761
                    opt = endp + 1;
1762

    
1763
            return bt_hci_parse(opt);
1764
       }
1765
    } else if (strstart(opt, "vhci", &endp)) {
1766
        if (!*endp || *endp == ',') {
1767
            if (*endp) {
1768
                if (strstart(endp, ",vlan=", &p)) {
1769
                    vlan = strtol(p, (char **) &endp, 0);
1770
                    if (*endp) {
1771
                        fprintf(stderr, "qemu: bad scatternet '%s'\n", p);
1772
                        return 1;
1773
                    }
1774
                } else {
1775
                    fprintf(stderr, "qemu: bad parameter '%s'\n", endp + 1);
1776
                    return 1;
1777
                }
1778
            } else
1779
                vlan = 0;
1780

    
1781
            bt_vhci_add(vlan);
1782
            return 0;
1783
        }
1784
    } else if (strstart(opt, "device:", &endp))
1785
        return !bt_device_add(endp);
1786

    
1787
    fprintf(stderr, "qemu: bad bluetooth parameter '%s'\n", opt);
1788
    return 1;
1789
}
1790

    
1791
/***********************************************************/
1792
/* QEMU Block devices */
1793

    
1794
#define HD_ALIAS "index=%d,media=disk"
1795
#define CDROM_ALIAS "index=2,media=cdrom"
1796
#define FD_ALIAS "index=%d,if=floppy"
1797
#define PFLASH_ALIAS "if=pflash"
1798
#define MTD_ALIAS "if=mtd"
1799
#define SD_ALIAS "index=0,if=sd"
1800

    
1801
QemuOpts *drive_add(const char *file, const char *fmt, ...)
1802
{
1803
    va_list ap;
1804
    char optstr[1024];
1805
    QemuOpts *opts;
1806

    
1807
    va_start(ap, fmt);
1808
    vsnprintf(optstr, sizeof(optstr), fmt, ap);
1809
    va_end(ap);
1810

    
1811
    opts = qemu_opts_parse(&qemu_drive_opts, optstr, NULL);
1812
    if (!opts) {
1813
        fprintf(stderr, "%s: huh? duplicate? (%s)\n",
1814
                __FUNCTION__, optstr);
1815
        return NULL;
1816
    }
1817
    if (file)
1818
        qemu_opt_set(opts, "file", file);
1819
    return opts;
1820
}
1821

    
1822
DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit)
1823
{
1824
    DriveInfo *dinfo;
1825

    
1826
    /* seek interface, bus and unit */
1827

    
1828
    TAILQ_FOREACH(dinfo, &drives, next) {
1829
        if (dinfo->type == type &&
1830
            dinfo->bus == bus &&
1831
            dinfo->unit == unit)
1832
            return dinfo;
1833
    }
1834

    
1835
    return NULL;
1836
}
1837

    
1838
DriveInfo *drive_get_by_id(const char *id)
1839
{
1840
    DriveInfo *dinfo;
1841

    
1842
    TAILQ_FOREACH(dinfo, &drives, next) {
1843
        if (strcmp(id, dinfo->id))
1844
            continue;
1845
        return dinfo;
1846
    }
1847
    return NULL;
1848
}
1849

    
1850
int drive_get_max_bus(BlockInterfaceType type)
1851
{
1852
    int max_bus;
1853
    DriveInfo *dinfo;
1854

    
1855
    max_bus = -1;
1856
    TAILQ_FOREACH(dinfo, &drives, next) {
1857
        if(dinfo->type == type &&
1858
           dinfo->bus > max_bus)
1859
            max_bus = dinfo->bus;
1860
    }
1861
    return max_bus;
1862
}
1863

    
1864
const char *drive_get_serial(BlockDriverState *bdrv)
1865
{
1866
    DriveInfo *dinfo;
1867

    
1868
    TAILQ_FOREACH(dinfo, &drives, next) {
1869
        if (dinfo->bdrv == bdrv)
1870
            return dinfo->serial;
1871
    }
1872

    
1873
    return "\0";
1874
}
1875

    
1876
BlockInterfaceErrorAction drive_get_onerror(BlockDriverState *bdrv)
1877
{
1878
    DriveInfo *dinfo;
1879

    
1880
    TAILQ_FOREACH(dinfo, &drives, next) {
1881
        if (dinfo->bdrv == bdrv)
1882
            return dinfo->onerror;
1883
    }
1884

    
1885
    return BLOCK_ERR_STOP_ENOSPC;
1886
}
1887

    
1888
static void bdrv_format_print(void *opaque, const char *name)
1889
{
1890
    fprintf(stderr, " %s", name);
1891
}
1892

    
1893
void drive_uninit(BlockDriverState *bdrv)
1894
{
1895
    DriveInfo *dinfo;
1896

    
1897
    TAILQ_FOREACH(dinfo, &drives, next) {
1898
        if (dinfo->bdrv != bdrv)
1899
            continue;
1900
        qemu_opts_del(dinfo->opts);
1901
        TAILQ_REMOVE(&drives, dinfo, next);
1902
        qemu_free(dinfo);
1903
        break;
1904
    }
1905
}
1906

    
1907
DriveInfo *drive_init(QemuOpts *opts, void *opaque,
1908
                      int *fatal_error)
1909
{
1910
    const char *buf;
1911
    const char *file = NULL;
1912
    char devname[128];
1913
    const char *serial;
1914
    const char *mediastr = "";
1915
    BlockInterfaceType type;
1916
    enum { MEDIA_DISK, MEDIA_CDROM } media;
1917
    int bus_id, unit_id;
1918
    int cyls, heads, secs, translation;
1919
    BlockDriver *drv = NULL;
1920
    QEMUMachine *machine = opaque;
1921
    int max_devs;
1922
    int index;
1923
    int cache;
1924
    int bdrv_flags, onerror;
1925
    const char *devaddr;
1926
    DriveInfo *dinfo;
1927
    int snapshot = 0;
1928

    
1929
    *fatal_error = 1;
1930

    
1931
    translation = BIOS_ATA_TRANSLATION_AUTO;
1932
    cache = 1;
1933

    
1934
    if (machine->use_scsi) {
1935
        type = IF_SCSI;
1936
        max_devs = MAX_SCSI_DEVS;
1937
        pstrcpy(devname, sizeof(devname), "scsi");
1938
    } else {
1939
        type = IF_IDE;
1940
        max_devs = MAX_IDE_DEVS;
1941
        pstrcpy(devname, sizeof(devname), "ide");
1942
    }
1943
    media = MEDIA_DISK;
1944

    
1945
    /* extract parameters */
1946
    bus_id  = qemu_opt_get_number(opts, "bus", 0);
1947
    unit_id = qemu_opt_get_number(opts, "unit", -1);
1948
    index   = qemu_opt_get_number(opts, "index", -1);
1949

    
1950
    cyls  = qemu_opt_get_number(opts, "cyls", 0);
1951
    heads = qemu_opt_get_number(opts, "heads", 0);
1952
    secs  = qemu_opt_get_number(opts, "secs", 0);
1953

    
1954
    snapshot = qemu_opt_get_bool(opts, "snapshot", 0);
1955

    
1956
    file = qemu_opt_get(opts, "file");
1957
    serial = qemu_opt_get(opts, "serial");
1958

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

    
1994
    if (cyls || heads || secs) {
1995
        if (cyls < 1 || cyls > 16383) {
1996
            fprintf(stderr, "qemu: '%s' invalid physical cyls number\n", buf);
1997
            return NULL;
1998
        }
1999
        if (heads < 1 || heads > 16) {
2000
            fprintf(stderr, "qemu: '%s' invalid physical heads number\n", buf);
2001
            return NULL;
2002
        }
2003
        if (secs < 1 || secs > 63) {
2004
            fprintf(stderr, "qemu: '%s' invalid physical secs number\n", buf);
2005
            return NULL;
2006
        }
2007
    }
2008

    
2009
    if ((buf = qemu_opt_get(opts, "trans")) != NULL) {
2010
        if (!cyls) {
2011
            fprintf(stderr,
2012
                    "qemu: '%s' trans must be used with cyls,heads and secs\n",
2013
                    buf);
2014
            return NULL;
2015
        }
2016
        if (!strcmp(buf, "none"))
2017
            translation = BIOS_ATA_TRANSLATION_NONE;
2018
        else if (!strcmp(buf, "lba"))
2019
            translation = BIOS_ATA_TRANSLATION_LBA;
2020
        else if (!strcmp(buf, "auto"))
2021
            translation = BIOS_ATA_TRANSLATION_AUTO;
2022
        else {
2023
            fprintf(stderr, "qemu: '%s' invalid translation type\n", buf);
2024
            return NULL;
2025
        }
2026
    }
2027

    
2028
    if ((buf = qemu_opt_get(opts, "media")) != NULL) {
2029
        if (!strcmp(buf, "disk")) {
2030
            media = MEDIA_DISK;
2031
        } else if (!strcmp(buf, "cdrom")) {
2032
            if (cyls || secs || heads) {
2033
                fprintf(stderr,
2034
                        "qemu: '%s' invalid physical CHS format\n", buf);
2035
                return NULL;
2036
            }
2037
            media = MEDIA_CDROM;
2038
        } else {
2039
            fprintf(stderr, "qemu: '%s' invalid media\n", buf);
2040
            return NULL;
2041
        }
2042
    }
2043

    
2044
    if ((buf = qemu_opt_get(opts, "cache")) != NULL) {
2045
        if (!strcmp(buf, "off") || !strcmp(buf, "none"))
2046
            cache = 0;
2047
        else if (!strcmp(buf, "writethrough"))
2048
            cache = 1;
2049
        else if (!strcmp(buf, "writeback"))
2050
            cache = 2;
2051
        else {
2052
           fprintf(stderr, "qemu: invalid cache option\n");
2053
           return NULL;
2054
        }
2055
    }
2056

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

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

    
2091
    if ((devaddr = qemu_opt_get(opts, "addr")) != NULL) {
2092
        if (type != IF_VIRTIO) {
2093
            fprintf(stderr, "addr is not supported\n");
2094
            return NULL;
2095
        }
2096
    }
2097

    
2098
    /* compute bus and unit according index */
2099

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

    
2116
    /* if user doesn't specify a unit_id,
2117
     * try to find the first free
2118
     */
2119

    
2120
    if (unit_id == -1) {
2121
       unit_id = 0;
2122
       while (drive_get(type, bus_id, unit_id) != NULL) {
2123
           unit_id++;
2124
           if (max_devs && unit_id >= max_devs) {
2125
               unit_id -= max_devs;
2126
               bus_id++;
2127
           }
2128
       }
2129
    }
2130

    
2131
    /* check unit id */
2132

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

    
2139
    /*
2140
     * ignore multiple definitions
2141
     */
2142

    
2143
    if (drive_get(type, bus_id, unit_id) != NULL) {
2144
        *fatal_error = 0;
2145
        return NULL;
2146
    }
2147

    
2148
    /* init */
2149

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

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

    
2237
static int drive_init_func(QemuOpts *opts, void *opaque)
2238
{
2239
    QEMUMachine *machine = opaque;
2240
    int fatal_error = 0;
2241

    
2242
    if (drive_init(opts, machine, &fatal_error) == NULL) {
2243
        if (fatal_error)
2244
            return 1;
2245
    }
2246
    return 0;
2247
}
2248

    
2249
static int drive_enable_snapshot(QemuOpts *opts, void *opaque)
2250
{
2251
    if (NULL == qemu_opt_get(opts, "snapshot")) {
2252
        qemu_opt_set(opts, "snapshot", "on");
2253
    }
2254
    return 0;
2255
}
2256

    
2257
void qemu_register_boot_set(QEMUBootSetHandler *func, void *opaque)
2258
{
2259
    boot_set_handler = func;
2260
    boot_set_opaque = opaque;
2261
}
2262

    
2263
int qemu_boot_set(const char *boot_devices)
2264
{
2265
    if (!boot_set_handler) {
2266
        return -EINVAL;
2267
    }
2268
    return boot_set_handler(boot_set_opaque, boot_devices);
2269
}
2270

    
2271
static int parse_bootdevices(char *devices)
2272
{
2273
    /* We just do some generic consistency checks */
2274
    const char *p;
2275
    int bitmap = 0;
2276

    
2277
    for (p = devices; *p != '\0'; p++) {
2278
        /* Allowed boot devices are:
2279
         * a-b: floppy disk drives
2280
         * c-f: IDE disk drives
2281
         * g-m: machine implementation dependant drives
2282
         * n-p: network devices
2283
         * It's up to each machine implementation to check if the given boot
2284
         * devices match the actual hardware implementation and firmware
2285
         * features.
2286
         */
2287
        if (*p < 'a' || *p > 'p') {
2288
            fprintf(stderr, "Invalid boot device '%c'\n", *p);
2289
            exit(1);
2290
        }
2291
        if (bitmap & (1 << (*p - 'a'))) {
2292
            fprintf(stderr, "Boot device '%c' was given twice\n", *p);
2293
            exit(1);
2294
        }
2295
        bitmap |= 1 << (*p - 'a');
2296
    }
2297
    return bitmap;
2298
}
2299

    
2300
static void restore_boot_devices(void *opaque)
2301
{
2302
    char *standard_boot_devices = opaque;
2303

    
2304
    qemu_boot_set(standard_boot_devices);
2305

    
2306
    qemu_unregister_reset(restore_boot_devices, standard_boot_devices);
2307
    qemu_free(standard_boot_devices);
2308
}
2309

    
2310
static void numa_add(const char *optarg)
2311
{
2312
    char option[128];
2313
    char *endptr;
2314
    unsigned long long value, endvalue;
2315
    int nodenr;
2316

    
2317
    optarg = get_opt_name(option, 128, optarg, ',') + 1;
2318
    if (!strcmp(option, "node")) {
2319
        if (get_param_value(option, 128, "nodeid", optarg) == 0) {
2320
            nodenr = nb_numa_nodes;
2321
        } else {
2322
            nodenr = strtoull(option, NULL, 10);
2323
        }
2324

    
2325
        if (get_param_value(option, 128, "mem", optarg) == 0) {
2326
            node_mem[nodenr] = 0;
2327
        } else {
2328
            value = strtoull(option, &endptr, 0);
2329
            switch (*endptr) {
2330
            case 0: case 'M': case 'm':
2331
                value <<= 20;
2332
                break;
2333
            case 'G': case 'g':
2334
                value <<= 30;
2335
                break;
2336
            }
2337
            node_mem[nodenr] = value;
2338
        }
2339
        if (get_param_value(option, 128, "cpus", optarg) == 0) {
2340
            node_cpumask[nodenr] = 0;
2341
        } else {
2342
            value = strtoull(option, &endptr, 10);
2343
            if (value >= 64) {
2344
                value = 63;
2345
                fprintf(stderr, "only 64 CPUs in NUMA mode supported.\n");
2346
            } else {
2347
                if (*endptr == '-') {
2348
                    endvalue = strtoull(endptr+1, &endptr, 10);
2349
                    if (endvalue >= 63) {
2350
                        endvalue = 62;
2351
                        fprintf(stderr,
2352
                            "only 63 CPUs in NUMA mode supported.\n");
2353
                    }
2354
                    value = (1 << (endvalue + 1)) - (1 << value);
2355
                } else {
2356
                    value = 1 << value;
2357
                }
2358
            }
2359
            node_cpumask[nodenr] = value;
2360
        }
2361
        nb_numa_nodes++;
2362
    }
2363
    return;
2364
}
2365

    
2366
/***********************************************************/
2367
/* USB devices */
2368

    
2369
static USBPort *used_usb_ports;
2370
static USBPort *free_usb_ports;
2371

    
2372
/* ??? Maybe change this to register a hub to keep track of the topology.  */
2373
void qemu_register_usb_port(USBPort *port, void *opaque, int index,
2374
                            usb_attachfn attach)
2375
{
2376
    port->opaque = opaque;
2377
    port->index = index;
2378
    port->attach = attach;
2379
    port->next = free_usb_ports;
2380
    free_usb_ports = port;
2381
}
2382

    
2383
int usb_device_add_dev(USBDevice *dev)
2384
{
2385
    USBPort *port;
2386

    
2387
    /* Find a USB port to add the device to.  */
2388
    port = free_usb_ports;
2389
    if (!port->next) {
2390
        USBDevice *hub;
2391

    
2392
        /* Create a new hub and chain it on.  */
2393
        free_usb_ports = NULL;
2394
        port->next = used_usb_ports;
2395
        used_usb_ports = port;
2396

    
2397
        hub = usb_hub_init(VM_USB_HUB_SIZE);
2398
        usb_attach(port, hub);
2399
        port = free_usb_ports;
2400
    }
2401

    
2402
    free_usb_ports = port->next;
2403
    port->next = used_usb_ports;
2404
    used_usb_ports = port;
2405
    usb_attach(port, dev);
2406
    return 0;
2407
}
2408

    
2409
static void usb_msd_password_cb(void *opaque, int err)
2410
{
2411
    USBDevice *dev = opaque;
2412

    
2413
    if (!err)
2414
        usb_device_add_dev(dev);
2415
    else
2416
        dev->handle_destroy(dev);
2417
}
2418

    
2419
static int usb_device_add(const char *devname, int is_hotplug)
2420
{
2421
    const char *p;
2422
    USBDevice *dev;
2423

    
2424
    if (!free_usb_ports)
2425
        return -1;
2426

    
2427
    if (strstart(devname, "host:", &p)) {
2428
        dev = usb_host_device_open(p);
2429
    } else if (!strcmp(devname, "mouse")) {
2430
        dev = usb_mouse_init();
2431
    } else if (!strcmp(devname, "tablet")) {
2432
        dev = usb_tablet_init();
2433
    } else if (!strcmp(devname, "keyboard")) {
2434
        dev = usb_keyboard_init();
2435
    } else if (strstart(devname, "disk:", &p)) {
2436
        BlockDriverState *bs;
2437

    
2438
        dev = usb_msd_init(p);
2439
        if (!dev)
2440
            return -1;
2441
        bs = usb_msd_get_bdrv(dev);
2442
        if (bdrv_key_required(bs)) {
2443
            autostart = 0;
2444
            if (is_hotplug) {
2445
                monitor_read_bdrv_key_start(cur_mon, bs, usb_msd_password_cb,
2446
                                            dev);
2447
                return 0;
2448
            }
2449
        }
2450
    } else if (!strcmp(devname, "wacom-tablet")) {
2451
        dev = usb_wacom_init();
2452
    } else if (strstart(devname, "serial:", &p)) {
2453
        dev = usb_serial_init(p);
2454
#ifdef CONFIG_BRLAPI
2455
    } else if (!strcmp(devname, "braille")) {
2456
        dev = usb_baum_init();
2457
#endif
2458
    } else if (strstart(devname, "net:", &p)) {
2459
        int nic = nb_nics;
2460

    
2461
        if (net_client_init(NULL, "nic", p) < 0)
2462
            return -1;
2463
        nd_table[nic].model = "usb";
2464
        dev = usb_net_init(&nd_table[nic]);
2465
    } else if (!strcmp(devname, "bt") || strstart(devname, "bt:", &p)) {
2466
        dev = usb_bt_init(devname[2] ? hci_init(p) :
2467
                        bt_new_hci(qemu_find_bt_vlan(0)));
2468
    } else {
2469
        return -1;
2470
    }
2471
    if (!dev)
2472
        return -1;
2473

    
2474
    return usb_device_add_dev(dev);
2475
}
2476

    
2477
int usb_device_del_addr(int bus_num, int addr)
2478
{
2479
    USBPort *port;
2480
    USBPort **lastp;
2481
    USBDevice *dev;
2482

    
2483
    if (!used_usb_ports)
2484
        return -1;
2485

    
2486
    if (bus_num != 0)
2487
        return -1;
2488

    
2489
    lastp = &used_usb_ports;
2490
    port = used_usb_ports;
2491
    while (port && port->dev->addr != addr) {
2492
        lastp = &port->next;
2493
        port = port->next;
2494
    }
2495

    
2496
    if (!port)
2497
        return -1;
2498

    
2499
    dev = port->dev;
2500
    *lastp = port->next;
2501
    usb_attach(port, NULL);
2502
    dev->handle_destroy(dev);
2503
    port->next = free_usb_ports;
2504
    free_usb_ports = port;
2505
    return 0;
2506
}
2507

    
2508
static int usb_device_del(const char *devname)
2509
{
2510
    int bus_num, addr;
2511
    const char *p;
2512

    
2513
    if (strstart(devname, "host:", &p))
2514
        return usb_host_device_close(p);
2515

    
2516
    if (!used_usb_ports)
2517
        return -1;
2518

    
2519
    p = strchr(devname, '.');
2520
    if (!p)
2521
        return -1;
2522
    bus_num = strtoul(devname, NULL, 0);
2523
    addr = strtoul(p + 1, NULL, 0);
2524

    
2525
    return usb_device_del_addr(bus_num, addr);
2526
}
2527

    
2528
static int usb_parse(const char *cmdline)
2529
{
2530
    return usb_device_add(cmdline, 0);
2531
}
2532

    
2533
void do_usb_add(Monitor *mon, const char *devname)
2534
{
2535
    usb_device_add(devname, 1);
2536
}
2537

    
2538
void do_usb_del(Monitor *mon, const char *devname)
2539
{
2540
    usb_device_del(devname);
2541
}
2542

    
2543
void usb_info(Monitor *mon)
2544
{
2545
    USBDevice *dev;
2546
    USBPort *port;
2547
    const char *speed_str;
2548

    
2549
    if (!usb_enabled) {
2550
        monitor_printf(mon, "USB support not enabled\n");
2551
        return;
2552
    }
2553

    
2554
    for (port = used_usb_ports; port; port = port->next) {
2555
        dev = port->dev;
2556
        if (!dev)
2557
            continue;
2558
        switch(dev->speed) {
2559
        case USB_SPEED_LOW:
2560
            speed_str = "1.5";
2561
            break;
2562
        case USB_SPEED_FULL:
2563
            speed_str = "12";
2564
            break;
2565
        case USB_SPEED_HIGH:
2566
            speed_str = "480";
2567
            break;
2568
        default:
2569
            speed_str = "?";
2570
            break;
2571
        }
2572
        monitor_printf(mon, "  Device %d.%d, Speed %s Mb/s, Product %s\n",
2573
                       0, dev->addr, speed_str, dev->devname);
2574
    }
2575
}
2576

    
2577
/***********************************************************/
2578
/* PCMCIA/Cardbus */
2579

    
2580
static struct pcmcia_socket_entry_s {
2581
    PCMCIASocket *socket;
2582
    struct pcmcia_socket_entry_s *next;
2583
} *pcmcia_sockets = 0;
2584

    
2585
void pcmcia_socket_register(PCMCIASocket *socket)
2586
{
2587
    struct pcmcia_socket_entry_s *entry;
2588

    
2589
    entry = qemu_malloc(sizeof(struct pcmcia_socket_entry_s));
2590
    entry->socket = socket;
2591
    entry->next = pcmcia_sockets;
2592
    pcmcia_sockets = entry;
2593
}
2594

    
2595
void pcmcia_socket_unregister(PCMCIASocket *socket)
2596
{
2597
    struct pcmcia_socket_entry_s *entry, **ptr;
2598

    
2599
    ptr = &pcmcia_sockets;
2600
    for (entry = *ptr; entry; ptr = &entry->next, entry = *ptr)
2601
        if (entry->socket == socket) {
2602
            *ptr = entry->next;
2603
            qemu_free(entry);
2604
        }
2605
}
2606

    
2607
void pcmcia_info(Monitor *mon)
2608
{
2609
    struct pcmcia_socket_entry_s *iter;
2610

    
2611
    if (!pcmcia_sockets)
2612
        monitor_printf(mon, "No PCMCIA sockets\n");
2613

    
2614
    for (iter = pcmcia_sockets; iter; iter = iter->next)
2615
        monitor_printf(mon, "%s: %s\n", iter->socket->slot_string,
2616
                       iter->socket->attached ? iter->socket->card_string :
2617
                       "Empty");
2618
}
2619

    
2620
/***********************************************************/
2621
/* register display */
2622

    
2623
struct DisplayAllocator default_allocator = {
2624
    defaultallocator_create_displaysurface,
2625
    defaultallocator_resize_displaysurface,
2626
    defaultallocator_free_displaysurface
2627
};
2628

    
2629
void register_displaystate(DisplayState *ds)
2630
{
2631
    DisplayState **s;
2632
    s = &display_state;
2633
    while (*s != NULL)
2634
        s = &(*s)->next;
2635
    ds->next = NULL;
2636
    *s = ds;
2637
}
2638

    
2639
DisplayState *get_displaystate(void)
2640
{
2641
    return display_state;
2642
}
2643

    
2644
DisplayAllocator *register_displayallocator(DisplayState *ds, DisplayAllocator *da)
2645
{
2646
    if(ds->allocator ==  &default_allocator) ds->allocator = da;
2647
    return ds->allocator;
2648
}
2649

    
2650
/* dumb display */
2651

    
2652
static void dumb_display_init(void)
2653
{
2654
    DisplayState *ds = qemu_mallocz(sizeof(DisplayState));
2655
    ds->allocator = &default_allocator;
2656
    ds->surface = qemu_create_displaysurface(ds, 640, 480);
2657
    register_displaystate(ds);
2658
}
2659

    
2660
/***********************************************************/
2661
/* I/O handling */
2662

    
2663
typedef struct IOHandlerRecord {
2664
    int fd;
2665
    IOCanRWHandler *fd_read_poll;
2666
    IOHandler *fd_read;
2667
    IOHandler *fd_write;
2668
    int deleted;
2669
    void *opaque;
2670
    /* temporary data */
2671
    struct pollfd *ufd;
2672
    struct IOHandlerRecord *next;
2673
} IOHandlerRecord;
2674

    
2675
static IOHandlerRecord *first_io_handler;
2676

    
2677
/* XXX: fd_read_poll should be suppressed, but an API change is
2678
   necessary in the character devices to suppress fd_can_read(). */
2679
int qemu_set_fd_handler2(int fd,
2680
                         IOCanRWHandler *fd_read_poll,
2681
                         IOHandler *fd_read,
2682
                         IOHandler *fd_write,
2683
                         void *opaque)
2684
{
2685
    IOHandlerRecord **pioh, *ioh;
2686

    
2687
    if (!fd_read && !fd_write) {
2688
        pioh = &first_io_handler;
2689
        for(;;) {
2690
            ioh = *pioh;
2691
            if (ioh == NULL)
2692
                break;
2693
            if (ioh->fd == fd) {
2694
                ioh->deleted = 1;
2695
                break;
2696
            }
2697
            pioh = &ioh->next;
2698
        }
2699
    } else {
2700
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
2701
            if (ioh->fd == fd)
2702
                goto found;
2703
        }
2704
        ioh = qemu_mallocz(sizeof(IOHandlerRecord));
2705
        ioh->next = first_io_handler;
2706
        first_io_handler = ioh;
2707
    found:
2708
        ioh->fd = fd;
2709
        ioh->fd_read_poll = fd_read_poll;
2710
        ioh->fd_read = fd_read;
2711
        ioh->fd_write = fd_write;
2712
        ioh->opaque = opaque;
2713
        ioh->deleted = 0;
2714
    }
2715
    return 0;
2716
}
2717

    
2718
int qemu_set_fd_handler(int fd,
2719
                        IOHandler *fd_read,
2720
                        IOHandler *fd_write,
2721
                        void *opaque)
2722
{
2723
    return qemu_set_fd_handler2(fd, NULL, fd_read, fd_write, opaque);
2724
}
2725

    
2726
#ifdef _WIN32
2727
/***********************************************************/
2728
/* Polling handling */
2729

    
2730
typedef struct PollingEntry {
2731
    PollingFunc *func;
2732
    void *opaque;
2733
    struct PollingEntry *next;
2734
} PollingEntry;
2735

    
2736
static PollingEntry *first_polling_entry;
2737

    
2738
int qemu_add_polling_cb(PollingFunc *func, void *opaque)
2739
{
2740
    PollingEntry **ppe, *pe;
2741
    pe = qemu_mallocz(sizeof(PollingEntry));
2742
    pe->func = func;
2743
    pe->opaque = opaque;
2744
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next);
2745
    *ppe = pe;
2746
    return 0;
2747
}
2748

    
2749
void qemu_del_polling_cb(PollingFunc *func, void *opaque)
2750
{
2751
    PollingEntry **ppe, *pe;
2752
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next) {
2753
        pe = *ppe;
2754
        if (pe->func == func && pe->opaque == opaque) {
2755
            *ppe = pe->next;
2756
            qemu_free(pe);
2757
            break;
2758
        }
2759
    }
2760
}
2761

    
2762
/***********************************************************/
2763
/* Wait objects support */
2764
typedef struct WaitObjects {
2765
    int num;
2766
    HANDLE events[MAXIMUM_WAIT_OBJECTS + 1];
2767
    WaitObjectFunc *func[MAXIMUM_WAIT_OBJECTS + 1];
2768
    void *opaque[MAXIMUM_WAIT_OBJECTS + 1];
2769
} WaitObjects;
2770

    
2771
static WaitObjects wait_objects = {0};
2772

    
2773
int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
2774
{
2775
    WaitObjects *w = &wait_objects;
2776

    
2777
    if (w->num >= MAXIMUM_WAIT_OBJECTS)
2778
        return -1;
2779
    w->events[w->num] = handle;
2780
    w->func[w->num] = func;
2781
    w->opaque[w->num] = opaque;
2782
    w->num++;
2783
    return 0;
2784
}
2785

    
2786
void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
2787
{
2788
    int i, found;
2789
    WaitObjects *w = &wait_objects;
2790

    
2791
    found = 0;
2792
    for (i = 0; i < w->num; i++) {
2793
        if (w->events[i] == handle)
2794
            found = 1;
2795
        if (found) {
2796
            w->events[i] = w->events[i + 1];
2797
            w->func[i] = w->func[i + 1];
2798
            w->opaque[i] = w->opaque[i + 1];
2799
        }
2800
    }
2801
    if (found)
2802
        w->num--;
2803
}
2804
#endif
2805

    
2806
/***********************************************************/
2807
/* ram save/restore */
2808

    
2809
static int ram_get_page(QEMUFile *f, uint8_t *buf, int len)
2810
{
2811
    int v;
2812

    
2813
    v = qemu_get_byte(f);
2814
    switch(v) {
2815
    case 0:
2816
        if (qemu_get_buffer(f, buf, len) != len)
2817
            return -EIO;
2818
        break;
2819
    case 1:
2820
        v = qemu_get_byte(f);
2821
        memset(buf, v, len);
2822
        break;
2823
    default:
2824
        return -EINVAL;
2825
    }
2826

    
2827
    if (qemu_file_has_error(f))
2828
        return -EIO;
2829

    
2830
    return 0;
2831
}
2832

    
2833
static int ram_load_v1(QEMUFile *f, void *opaque)
2834
{
2835
    int ret;
2836
    ram_addr_t i;
2837

    
2838
    if (qemu_get_be32(f) != last_ram_offset)
2839
        return -EINVAL;
2840
    for(i = 0; i < last_ram_offset; i+= TARGET_PAGE_SIZE) {
2841
        ret = ram_get_page(f, qemu_get_ram_ptr(i), TARGET_PAGE_SIZE);
2842
        if (ret)
2843
            return ret;
2844
    }
2845
    return 0;
2846
}
2847

    
2848
#define BDRV_HASH_BLOCK_SIZE 1024
2849
#define IOBUF_SIZE 4096
2850
#define RAM_CBLOCK_MAGIC 0xfabe
2851

    
2852
typedef struct RamDecompressState {
2853
    z_stream zstream;
2854
    QEMUFile *f;
2855
    uint8_t buf[IOBUF_SIZE];
2856
} RamDecompressState;
2857

    
2858
static int ram_decompress_open(RamDecompressState *s, QEMUFile *f)
2859
{
2860
    int ret;
2861
    memset(s, 0, sizeof(*s));
2862
    s->f = f;
2863
    ret = inflateInit(&s->zstream);
2864
    if (ret != Z_OK)
2865
        return -1;
2866
    return 0;
2867
}
2868

    
2869
static int ram_decompress_buf(RamDecompressState *s, uint8_t *buf, int len)
2870
{
2871
    int ret, clen;
2872

    
2873
    s->zstream.avail_out = len;
2874
    s->zstream.next_out = buf;
2875
    while (s->zstream.avail_out > 0) {
2876
        if (s->zstream.avail_in == 0) {
2877
            if (qemu_get_be16(s->f) != RAM_CBLOCK_MAGIC)
2878
                return -1;
2879
            clen = qemu_get_be16(s->f);
2880
            if (clen > IOBUF_SIZE)
2881
                return -1;
2882
            qemu_get_buffer(s->f, s->buf, clen);
2883
            s->zstream.avail_in = clen;
2884
            s->zstream.next_in = s->buf;
2885
        }
2886
        ret = inflate(&s->zstream, Z_PARTIAL_FLUSH);
2887
        if (ret != Z_OK && ret != Z_STREAM_END) {
2888
            return -1;
2889
        }
2890
    }
2891
    return 0;
2892
}
2893

    
2894
static void ram_decompress_close(RamDecompressState *s)
2895
{
2896
    inflateEnd(&s->zstream);
2897
}
2898

    
2899
#define RAM_SAVE_FLAG_FULL        0x01
2900
#define RAM_SAVE_FLAG_COMPRESS        0x02
2901
#define RAM_SAVE_FLAG_MEM_SIZE        0x04
2902
#define RAM_SAVE_FLAG_PAGE        0x08
2903
#define RAM_SAVE_FLAG_EOS        0x10
2904

    
2905
static int is_dup_page(uint8_t *page, uint8_t ch)
2906
{
2907
    uint32_t val = ch << 24 | ch << 16 | ch << 8 | ch;
2908
    uint32_t *array = (uint32_t *)page;
2909
    int i;
2910

    
2911
    for (i = 0; i < (TARGET_PAGE_SIZE / 4); i++) {
2912
        if (array[i] != val)
2913
            return 0;
2914
    }
2915

    
2916
    return 1;
2917
}
2918

    
2919
static int ram_save_block(QEMUFile *f)
2920
{
2921
    static ram_addr_t current_addr = 0;
2922
    ram_addr_t saved_addr = current_addr;
2923
    ram_addr_t addr = 0;
2924
    int found = 0;
2925

    
2926
    while (addr < last_ram_offset) {
2927
        if (cpu_physical_memory_get_dirty(current_addr, MIGRATION_DIRTY_FLAG)) {
2928
            uint8_t *p;
2929

    
2930
            cpu_physical_memory_reset_dirty(current_addr,
2931
                                            current_addr + TARGET_PAGE_SIZE,
2932
                                            MIGRATION_DIRTY_FLAG);
2933

    
2934
            p = qemu_get_ram_ptr(current_addr);
2935

    
2936
            if (is_dup_page(p, *p)) {
2937
                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_COMPRESS);
2938
                qemu_put_byte(f, *p);
2939
            } else {
2940
                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_PAGE);
2941
                qemu_put_buffer(f, p, TARGET_PAGE_SIZE);
2942
            }
2943

    
2944
            found = 1;
2945
            break;
2946
        }
2947
        addr += TARGET_PAGE_SIZE;
2948
        current_addr = (saved_addr + addr) % last_ram_offset;
2949
    }
2950

    
2951
    return found;
2952
}
2953

    
2954
static uint64_t bytes_transferred = 0;
2955

    
2956
static ram_addr_t ram_save_remaining(void)
2957
{
2958
    ram_addr_t addr;
2959
    ram_addr_t count = 0;
2960

    
2961
    for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
2962
        if (cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
2963
            count++;
2964
    }
2965

    
2966
    return count;
2967
}
2968

    
2969
uint64_t ram_bytes_remaining(void)
2970
{
2971
    return ram_save_remaining() * TARGET_PAGE_SIZE;
2972
}
2973

    
2974
uint64_t ram_bytes_transferred(void)
2975
{
2976
    return bytes_transferred;
2977
}
2978

    
2979
uint64_t ram_bytes_total(void)
2980
{
2981
    return last_ram_offset;
2982
}
2983

    
2984
static int ram_save_live(QEMUFile *f, int stage, void *opaque)
2985
{
2986
    ram_addr_t addr;
2987
    uint64_t bytes_transferred_last;
2988
    double bwidth = 0;
2989
    uint64_t expected_time = 0;
2990

    
2991
    if (cpu_physical_sync_dirty_bitmap(0, TARGET_PHYS_ADDR_MAX) != 0) {
2992
        qemu_file_set_error(f);
2993
        return 0;
2994
    }
2995

    
2996
    if (stage == 1) {
2997
        /* Make sure all dirty bits are set */
2998
        for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
2999
            if (!cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
3000
                cpu_physical_memory_set_dirty(addr);
3001
        }
3002

    
3003
        /* Enable dirty memory tracking */
3004
        cpu_physical_memory_set_dirty_tracking(1);
3005

    
3006
        qemu_put_be64(f, last_ram_offset | RAM_SAVE_FLAG_MEM_SIZE);
3007
    }
3008

    
3009
    bytes_transferred_last = bytes_transferred;
3010
    bwidth = get_clock();
3011

    
3012
    while (!qemu_file_rate_limit(f)) {
3013
        int ret;
3014

    
3015
        ret = ram_save_block(f);
3016
        bytes_transferred += ret * TARGET_PAGE_SIZE;
3017
        if (ret == 0) /* no more blocks */
3018
            break;
3019
    }
3020

    
3021
    bwidth = get_clock() - bwidth;
3022
    bwidth = (bytes_transferred - bytes_transferred_last) / bwidth;
3023

    
3024
    /* if we haven't transferred anything this round, force expected_time to a
3025
     * a very high value, but without crashing */
3026
    if (bwidth == 0)
3027
        bwidth = 0.000001;
3028

    
3029
    /* try transferring iterative blocks of memory */
3030

    
3031
    if (stage == 3) {
3032

    
3033
        /* flush all remaining blocks regardless of rate limiting */
3034
        while (ram_save_block(f) != 0) {
3035
            bytes_transferred += TARGET_PAGE_SIZE;
3036
        }
3037
        cpu_physical_memory_set_dirty_tracking(0);
3038
    }
3039

    
3040
    qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
3041

    
3042
    expected_time = ram_save_remaining() * TARGET_PAGE_SIZE / bwidth;
3043

    
3044
    return (stage == 2) && (expected_time <= migrate_max_downtime());
3045
}
3046

    
3047
static int ram_load_dead(QEMUFile *f, void *opaque)
3048
{
3049
    RamDecompressState s1, *s = &s1;
3050
    uint8_t buf[10];
3051
    ram_addr_t i;
3052

    
3053
    if (ram_decompress_open(s, f) < 0)
3054
        return -EINVAL;
3055
    for(i = 0; i < last_ram_offset; i+= BDRV_HASH_BLOCK_SIZE) {
3056
        if (ram_decompress_buf(s, buf, 1) < 0) {
3057
            fprintf(stderr, "Error while reading ram block header\n");
3058
            goto error;
3059
        }
3060
        if (buf[0] == 0) {
3061
            if (ram_decompress_buf(s, qemu_get_ram_ptr(i),
3062
                                   BDRV_HASH_BLOCK_SIZE) < 0) {
3063
                fprintf(stderr, "Error while reading ram block address=0x%08" PRIx64, (uint64_t)i);
3064
                goto error;
3065
            }
3066
        } else {
3067
        error:
3068
            printf("Error block header\n");
3069
            return -EINVAL;
3070
        }
3071
    }
3072
    ram_decompress_close(s);
3073

    
3074
    return 0;
3075
}
3076

    
3077
static int ram_load(QEMUFile *f, void *opaque, int version_id)
3078
{
3079
    ram_addr_t addr;
3080
    int flags;
3081

    
3082
    if (version_id == 1)
3083
        return ram_load_v1(f, opaque);
3084

    
3085
    if (version_id == 2) {
3086
        if (qemu_get_be32(f) != last_ram_offset)
3087
            return -EINVAL;
3088
        return ram_load_dead(f, opaque);
3089
    }
3090

    
3091
    if (version_id != 3)
3092
        return -EINVAL;
3093

    
3094
    do {
3095
        addr = qemu_get_be64(f);
3096

    
3097
        flags = addr & ~TARGET_PAGE_MASK;
3098
        addr &= TARGET_PAGE_MASK;
3099

    
3100
        if (flags & RAM_SAVE_FLAG_MEM_SIZE) {
3101
            if (addr != last_ram_offset)
3102
                return -EINVAL;
3103
        }
3104

    
3105
        if (flags & RAM_SAVE_FLAG_FULL) {
3106
            if (ram_load_dead(f, opaque) < 0)
3107
                return -EINVAL;
3108
        }
3109
        
3110
        if (flags & RAM_SAVE_FLAG_COMPRESS) {
3111
            uint8_t ch = qemu_get_byte(f);
3112
            memset(qemu_get_ram_ptr(addr), ch, TARGET_PAGE_SIZE);
3113
#ifndef _WIN32
3114
            if (ch == 0 &&
3115
                (!kvm_enabled() || kvm_has_sync_mmu())) {
3116
                madvise(qemu_get_ram_ptr(addr), TARGET_PAGE_SIZE, MADV_DONTNEED);
3117
            }
3118
#endif
3119
        } else if (flags & RAM_SAVE_FLAG_PAGE)
3120
            qemu_get_buffer(f, qemu_get_ram_ptr(addr), TARGET_PAGE_SIZE);
3121
    } while (!(flags & RAM_SAVE_FLAG_EOS));
3122

    
3123
    return 0;
3124
}
3125

    
3126
void qemu_service_io(void)
3127
{
3128
    qemu_notify_event();
3129
}
3130

    
3131
/***********************************************************/
3132
/* bottom halves (can be seen as timers which expire ASAP) */
3133

    
3134
struct QEMUBH {
3135
    QEMUBHFunc *cb;
3136
    void *opaque;
3137
    int scheduled;
3138
    int idle;
3139
    int deleted;
3140
    QEMUBH *next;
3141
};
3142

    
3143
static QEMUBH *first_bh = NULL;
3144

    
3145
QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque)
3146
{
3147
    QEMUBH *bh;
3148
    bh = qemu_mallocz(sizeof(QEMUBH));
3149
    bh->cb = cb;
3150
    bh->opaque = opaque;
3151
    bh->next = first_bh;
3152
    first_bh = bh;
3153
    return bh;
3154
}
3155

    
3156
int qemu_bh_poll(void)
3157
{
3158
    QEMUBH *bh, **bhp;
3159
    int ret;
3160

    
3161
    ret = 0;
3162
    for (bh = first_bh; bh; bh = bh->next) {
3163
        if (!bh->deleted && bh->scheduled) {
3164
            bh->scheduled = 0;
3165
            if (!bh->idle)
3166
                ret = 1;
3167
            bh->idle = 0;
3168
            bh->cb(bh->opaque);
3169
        }
3170
    }
3171

    
3172
    /* remove deleted bhs */
3173
    bhp = &first_bh;
3174
    while (*bhp) {
3175
        bh = *bhp;
3176
        if (bh->deleted) {
3177
            *bhp = bh->next;
3178
            qemu_free(bh);
3179
        } else
3180
            bhp = &bh->next;
3181
    }
3182

    
3183
    return ret;
3184
}
3185

    
3186
void qemu_bh_schedule_idle(QEMUBH *bh)
3187
{
3188
    if (bh->scheduled)
3189
        return;
3190
    bh->scheduled = 1;
3191
    bh->idle = 1;
3192
}
3193

    
3194
void qemu_bh_schedule(QEMUBH *bh)
3195
{
3196
    if (bh->scheduled)
3197
        return;
3198
    bh->scheduled = 1;
3199
    bh->idle = 0;
3200
    /* stop the currently executing CPU to execute the BH ASAP */
3201
    qemu_notify_event();
3202
}
3203

    
3204
void qemu_bh_cancel(QEMUBH *bh)
3205
{
3206
    bh->scheduled = 0;
3207
}
3208

    
3209
void qemu_bh_delete(QEMUBH *bh)
3210
{
3211
    bh->scheduled = 0;
3212
    bh->deleted = 1;
3213
}
3214

    
3215
static void qemu_bh_update_timeout(int *timeout)
3216
{
3217
    QEMUBH *bh;
3218

    
3219
    for (bh = first_bh; bh; bh = bh->next) {
3220
        if (!bh->deleted && bh->scheduled) {
3221
            if (bh->idle) {
3222
                /* idle bottom halves will be polled at least
3223
                 * every 10ms */
3224
                *timeout = MIN(10, *timeout);
3225
            } else {
3226
                /* non-idle bottom halves will be executed
3227
                 * immediately */
3228
                *timeout = 0;
3229
                break;
3230
            }
3231
        }
3232
    }
3233
}
3234

    
3235
/***********************************************************/
3236
/* machine registration */
3237

    
3238
static QEMUMachine *first_machine = NULL;
3239
QEMUMachine *current_machine = NULL;
3240

    
3241
int qemu_register_machine(QEMUMachine *m)
3242
{
3243
    QEMUMachine **pm;
3244
    pm = &first_machine;
3245
    while (*pm != NULL)
3246
        pm = &(*pm)->next;
3247
    m->next = NULL;
3248
    *pm = m;
3249
    return 0;
3250
}
3251

    
3252
static QEMUMachine *find_machine(const char *name)
3253
{
3254
    QEMUMachine *m;
3255

    
3256
    for(m = first_machine; m != NULL; m = m->next) {
3257
        if (!strcmp(m->name, name))
3258
            return m;
3259
        if (m->alias && !strcmp(m->alias, name))
3260
            return m;
3261
    }
3262
    return NULL;
3263
}
3264

    
3265
static QEMUMachine *find_default_machine(void)
3266
{
3267
    QEMUMachine *m;
3268

    
3269
    for(m = first_machine; m != NULL; m = m->next) {
3270
        if (m->is_default) {
3271
            return m;
3272
        }
3273
    }
3274
    return NULL;
3275
}
3276

    
3277
/***********************************************************/
3278
/* main execution loop */
3279

    
3280
static void gui_update(void *opaque)
3281
{
3282
    uint64_t interval = GUI_REFRESH_INTERVAL;
3283
    DisplayState *ds = opaque;
3284
    DisplayChangeListener *dcl = ds->listeners;
3285

    
3286
    dpy_refresh(ds);
3287

    
3288
    while (dcl != NULL) {
3289
        if (dcl->gui_timer_interval &&
3290
            dcl->gui_timer_interval < interval)
3291
            interval = dcl->gui_timer_interval;
3292
        dcl = dcl->next;
3293
    }
3294
    qemu_mod_timer(ds->gui_timer, interval + qemu_get_clock(rt_clock));
3295
}
3296

    
3297
static void nographic_update(void *opaque)
3298
{
3299
    uint64_t interval = GUI_REFRESH_INTERVAL;
3300

    
3301
    qemu_mod_timer(nographic_timer, interval + qemu_get_clock(rt_clock));
3302
}
3303

    
3304
struct vm_change_state_entry {
3305
    VMChangeStateHandler *cb;
3306
    void *opaque;
3307
    LIST_ENTRY (vm_change_state_entry) entries;
3308
};
3309

    
3310
static LIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head;
3311

    
3312
VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
3313
                                                     void *opaque)
3314
{
3315
    VMChangeStateEntry *e;
3316

    
3317
    e = qemu_mallocz(sizeof (*e));
3318

    
3319
    e->cb = cb;
3320
    e->opaque = opaque;
3321
    LIST_INSERT_HEAD(&vm_change_state_head, e, entries);
3322
    return e;
3323
}
3324

    
3325
void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
3326
{
3327
    LIST_REMOVE (e, entries);
3328
    qemu_free (e);
3329
}
3330

    
3331
static void vm_state_notify(int running, int reason)
3332
{
3333
    VMChangeStateEntry *e;
3334

    
3335
    for (e = vm_change_state_head.lh_first; e; e = e->entries.le_next) {
3336
        e->cb(e->opaque, running, reason);
3337
    }
3338
}
3339

    
3340
static void resume_all_vcpus(void);
3341
static void pause_all_vcpus(void);
3342

    
3343
void vm_start(void)
3344
{
3345
    if (!vm_running) {
3346
        cpu_enable_ticks();
3347
        vm_running = 1;
3348
        vm_state_notify(1, 0);
3349
        qemu_rearm_alarm_timer(alarm_timer);
3350
        resume_all_vcpus();
3351
    }
3352
}
3353

    
3354
/* reset/shutdown handler */
3355

    
3356
typedef struct QEMUResetEntry {
3357
    TAILQ_ENTRY(QEMUResetEntry) entry;
3358
    QEMUResetHandler *func;
3359
    void *opaque;
3360
} QEMUResetEntry;
3361

    
3362
static TAILQ_HEAD(reset_handlers, QEMUResetEntry) reset_handlers =
3363
    TAILQ_HEAD_INITIALIZER(reset_handlers);
3364
static int reset_requested;
3365
static int shutdown_requested;
3366
static int powerdown_requested;
3367
static int debug_requested;
3368
static int vmstop_requested;
3369

    
3370
int qemu_shutdown_requested(void)
3371
{
3372
    int r = shutdown_requested;
3373
    shutdown_requested = 0;
3374
    return r;
3375
}
3376

    
3377
int qemu_reset_requested(void)
3378
{
3379
    int r = reset_requested;
3380
    reset_requested = 0;
3381
    return r;
3382
}
3383

    
3384
int qemu_powerdown_requested(void)
3385
{
3386
    int r = powerdown_requested;
3387
    powerdown_requested = 0;
3388
    return r;
3389
}
3390

    
3391
static int qemu_debug_requested(void)
3392
{
3393
    int r = debug_requested;
3394
    debug_requested = 0;
3395
    return r;
3396
}
3397

    
3398
static int qemu_vmstop_requested(void)
3399
{
3400
    int r = vmstop_requested;
3401
    vmstop_requested = 0;
3402
    return r;
3403
}
3404

    
3405
static void do_vm_stop(int reason)
3406
{
3407
    if (vm_running) {
3408
        cpu_disable_ticks();
3409
        vm_running = 0;
3410
        pause_all_vcpus();
3411
        vm_state_notify(0, reason);
3412
    }
3413
}
3414

    
3415
void qemu_register_reset(QEMUResetHandler *func, void *opaque)
3416
{
3417
    QEMUResetEntry *re = qemu_mallocz(sizeof(QEMUResetEntry));
3418

    
3419
    re->func = func;
3420
    re->opaque = opaque;
3421
    TAILQ_INSERT_TAIL(&reset_handlers, re, entry);
3422
}
3423

    
3424
void qemu_unregister_reset(QEMUResetHandler *func, void *opaque)
3425
{
3426
    QEMUResetEntry *re;
3427

    
3428
    TAILQ_FOREACH(re, &reset_handlers, entry) {
3429
        if (re->func == func && re->opaque == opaque) {
3430
            TAILQ_REMOVE(&reset_handlers, re, entry);
3431
            qemu_free(re);
3432
            return;
3433
        }
3434
    }
3435
}
3436

    
3437
void qemu_system_reset(void)
3438
{
3439
    QEMUResetEntry *re, *nre;
3440

    
3441
    /* reset all devices */
3442
    TAILQ_FOREACH_SAFE(re, &reset_handlers, entry, nre) {
3443
        re->func(re->opaque);
3444
    }
3445
}
3446

    
3447
void qemu_system_reset_request(void)
3448
{
3449
    if (no_reboot) {
3450
        shutdown_requested = 1;
3451
    } else {
3452
        reset_requested = 1;
3453
    }
3454
    qemu_notify_event();
3455
}
3456

    
3457
void qemu_system_shutdown_request(void)
3458
{
3459
    shutdown_requested = 1;
3460
    qemu_notify_event();
3461
}
3462

    
3463
void qemu_system_powerdown_request(void)
3464
{
3465
    powerdown_requested = 1;
3466
    qemu_notify_event();
3467
}
3468

    
3469
#ifdef CONFIG_IOTHREAD
3470
static void qemu_system_vmstop_request(int reason)
3471
{
3472
    vmstop_requested = reason;
3473
    qemu_notify_event();
3474
}
3475
#endif
3476

    
3477
#ifndef _WIN32
3478
static int io_thread_fd = -1;
3479

    
3480
static void qemu_event_increment(void)
3481
{
3482
    static const char byte = 0;
3483

    
3484
    if (io_thread_fd == -1)
3485
        return;
3486

    
3487
    write(io_thread_fd, &byte, sizeof(byte));
3488
}
3489

    
3490
static void qemu_event_read(void *opaque)
3491
{
3492
    int fd = (unsigned long)opaque;
3493
    ssize_t len;
3494

    
3495
    /* Drain the notify pipe */
3496
    do {
3497
        char buffer[512];
3498
        len = read(fd, buffer, sizeof(buffer));
3499
    } while ((len == -1 && errno == EINTR) || len > 0);
3500
}
3501

    
3502
static int qemu_event_init(void)
3503
{
3504
    int err;
3505
    int fds[2];
3506

    
3507
    err = pipe(fds);
3508
    if (err == -1)
3509
        return -errno;
3510

    
3511
    err = fcntl_setfl(fds[0], O_NONBLOCK);
3512
    if (err < 0)
3513
        goto fail;
3514

    
3515
    err = fcntl_setfl(fds[1], O_NONBLOCK);
3516
    if (err < 0)
3517
        goto fail;
3518

    
3519
    qemu_set_fd_handler2(fds[0], NULL, qemu_event_read, NULL,
3520
                         (void *)(unsigned long)fds[0]);
3521

    
3522
    io_thread_fd = fds[1];
3523
    return 0;
3524

    
3525
fail:
3526
    close(fds[0]);
3527
    close(fds[1]);
3528
    return err;
3529
}
3530
#else
3531
HANDLE qemu_event_handle;
3532

    
3533
static void dummy_event_handler(void *opaque)
3534
{
3535
}
3536

    
3537
static int qemu_event_init(void)
3538
{
3539
    qemu_event_handle = CreateEvent(NULL, FALSE, FALSE, NULL);
3540
    if (!qemu_event_handle) {
3541
        perror("Failed CreateEvent");
3542
        return -1;
3543
    }
3544
    qemu_add_wait_object(qemu_event_handle, dummy_event_handler, NULL);
3545
    return 0;
3546
}
3547

    
3548
static void qemu_event_increment(void)
3549
{
3550
    SetEvent(qemu_event_handle);
3551
}
3552
#endif
3553

    
3554
static int cpu_can_run(CPUState *env)
3555
{
3556
    if (env->stop)
3557
        return 0;
3558
    if (env->stopped)
3559
        return 0;
3560
    return 1;
3561
}
3562

    
3563
#ifndef CONFIG_IOTHREAD
3564
static int qemu_init_main_loop(void)
3565
{
3566
    return qemu_event_init();
3567
}
3568

    
3569
void qemu_init_vcpu(void *_env)
3570
{
3571
    CPUState *env = _env;
3572

    
3573
    if (kvm_enabled())
3574
        kvm_init_vcpu(env);
3575
    return;
3576
}
3577

    
3578
int qemu_cpu_self(void *env)
3579
{
3580
    return 1;
3581
}
3582

    
3583
static void resume_all_vcpus(void)
3584
{
3585
}
3586

    
3587
static void pause_all_vcpus(void)
3588
{
3589
}
3590

    
3591
void qemu_cpu_kick(void *env)
3592
{
3593
    return;
3594
}
3595

    
3596
void qemu_notify_event(void)
3597
{
3598
    CPUState *env = cpu_single_env;
3599

    
3600
    if (env) {
3601
        cpu_exit(env);
3602
#ifdef USE_KQEMU
3603
        if (env->kqemu_enabled)
3604
            kqemu_cpu_interrupt(env);
3605
#endif
3606
     }
3607
}
3608

    
3609
#define qemu_mutex_lock_iothread() do { } while (0)
3610
#define qemu_mutex_unlock_iothread() do { } while (0)
3611

    
3612
void vm_stop(int reason)
3613
{
3614
    do_vm_stop(reason);
3615
}
3616

    
3617
#else /* CONFIG_IOTHREAD */
3618

    
3619
#include "qemu-thread.h"
3620

    
3621
QemuMutex qemu_global_mutex;
3622
static QemuMutex qemu_fair_mutex;
3623

    
3624
static QemuThread io_thread;
3625

    
3626
static QemuThread *tcg_cpu_thread;
3627
static QemuCond *tcg_halt_cond;
3628

    
3629
static int qemu_system_ready;
3630
/* cpu creation */
3631
static QemuCond qemu_cpu_cond;
3632
/* system init */
3633
static QemuCond qemu_system_cond;
3634
static QemuCond qemu_pause_cond;
3635

    
3636
static void block_io_signals(void);
3637
static void unblock_io_signals(void);
3638
static int tcg_has_work(void);
3639

    
3640
static int qemu_init_main_loop(void)
3641
{
3642
    int ret;
3643

    
3644
    ret = qemu_event_init();
3645
    if (ret)
3646
        return ret;
3647

    
3648
    qemu_cond_init(&qemu_pause_cond);
3649
    qemu_mutex_init(&qemu_fair_mutex);
3650
    qemu_mutex_init(&qemu_global_mutex);
3651
    qemu_mutex_lock(&qemu_global_mutex);
3652

    
3653
    unblock_io_signals();
3654
    qemu_thread_self(&io_thread);
3655

    
3656
    return 0;
3657
}
3658

    
3659
static void qemu_wait_io_event(CPUState *env)
3660
{
3661
    while (!tcg_has_work())
3662
        qemu_cond_timedwait(env->halt_cond, &qemu_global_mutex, 1000);
3663

    
3664
    qemu_mutex_unlock(&qemu_global_mutex);
3665

    
3666
    /*
3667
     * Users of qemu_global_mutex can be starved, having no chance
3668
     * to acquire it since this path will get to it first.
3669
     * So use another lock to provide fairness.
3670
     */
3671
    qemu_mutex_lock(&qemu_fair_mutex);
3672
    qemu_mutex_unlock(&qemu_fair_mutex);
3673

    
3674
    qemu_mutex_lock(&qemu_global_mutex);
3675
    if (env->stop) {
3676
        env->stop = 0;
3677
        env->stopped = 1;
3678
        qemu_cond_signal(&qemu_pause_cond);
3679
    }
3680
}
3681

    
3682
static int qemu_cpu_exec(CPUState *env);
3683

    
3684
static void *kvm_cpu_thread_fn(void *arg)
3685
{
3686
    CPUState *env = arg;
3687

    
3688
    block_io_signals();
3689
    qemu_thread_self(env->thread);
3690

    
3691
    /* signal CPU creation */
3692
    qemu_mutex_lock(&qemu_global_mutex);
3693
    env->created = 1;
3694
    qemu_cond_signal(&qemu_cpu_cond);
3695

    
3696
    /* and wait for machine initialization */
3697
    while (!qemu_system_ready)
3698
        qemu_cond_timedwait(&qemu_system_cond, &qemu_global_mutex, 100);
3699

    
3700
    while (1) {
3701
        if (cpu_can_run(env))
3702
            qemu_cpu_exec(env);
3703
        qemu_wait_io_event(env);
3704
    }
3705

    
3706
    return NULL;
3707
}
3708

    
3709
static void tcg_cpu_exec(void);
3710

    
3711
static void *tcg_cpu_thread_fn(void *arg)
3712
{
3713
    CPUState *env = arg;
3714

    
3715
    block_io_signals();
3716
    qemu_thread_self(env->thread);
3717

    
3718
    /* signal CPU creation */
3719
    qemu_mutex_lock(&qemu_global_mutex);
3720
    for (env = first_cpu; env != NULL; env = env->next_cpu)
3721
        env->created = 1;
3722
    qemu_cond_signal(&qemu_cpu_cond);
3723

    
3724
    /* and wait for machine initialization */
3725
    while (!qemu_system_ready)
3726
        qemu_cond_timedwait(&qemu_system_cond, &qemu_global_mutex, 100);
3727

    
3728
    while (1) {
3729
        tcg_cpu_exec();
3730
        qemu_wait_io_event(cur_cpu);
3731
    }
3732

    
3733
    return NULL;
3734
}
3735

    
3736
void qemu_cpu_kick(void *_env)
3737
{
3738
    CPUState *env = _env;
3739
    qemu_cond_broadcast(env->halt_cond);
3740
    if (kvm_enabled())
3741
        qemu_thread_signal(env->thread, SIGUSR1);
3742
}
3743

    
3744
int qemu_cpu_self(void *env)
3745
{
3746
    return (cpu_single_env != NULL);
3747
}
3748

    
3749
static void cpu_signal(int sig)
3750
{
3751
    if (cpu_single_env)
3752
        cpu_exit(cpu_single_env);
3753
}
3754

    
3755
static void block_io_signals(void)
3756
{
3757
    sigset_t set;
3758
    struct sigaction sigact;
3759

    
3760
    sigemptyset(&set);
3761
    sigaddset(&set, SIGUSR2);
3762
    sigaddset(&set, SIGIO);
3763
    sigaddset(&set, SIGALRM);
3764
    pthread_sigmask(SIG_BLOCK, &set, NULL);
3765

    
3766
    sigemptyset(&set);
3767
    sigaddset(&set, SIGUSR1);
3768
    pthread_sigmask(SIG_UNBLOCK, &set, NULL);
3769

    
3770
    memset(&sigact, 0, sizeof(sigact));
3771
    sigact.sa_handler = cpu_signal;
3772
    sigaction(SIGUSR1, &sigact, NULL);
3773
}
3774

    
3775
static void unblock_io_signals(void)
3776
{
3777
    sigset_t set;
3778

    
3779
    sigemptyset(&set);
3780
    sigaddset(&set, SIGUSR2);
3781
    sigaddset(&set, SIGIO);
3782
    sigaddset(&set, SIGALRM);
3783
    pthread_sigmask(SIG_UNBLOCK, &set, NULL);
3784

    
3785
    sigemptyset(&set);
3786
    sigaddset(&set, SIGUSR1);
3787
    pthread_sigmask(SIG_BLOCK, &set, NULL);
3788
}
3789

    
3790
static void qemu_signal_lock(unsigned int msecs)
3791
{
3792
    qemu_mutex_lock(&qemu_fair_mutex);
3793

    
3794
    while (qemu_mutex_trylock(&qemu_global_mutex)) {
3795
        qemu_thread_signal(tcg_cpu_thread, SIGUSR1);
3796
        if (!qemu_mutex_timedlock(&qemu_global_mutex, msecs))
3797
            break;
3798
    }
3799
    qemu_mutex_unlock(&qemu_fair_mutex);
3800
}
3801

    
3802
static void qemu_mutex_lock_iothread(void)
3803
{
3804
    if (kvm_enabled()) {
3805
        qemu_mutex_lock(&qemu_fair_mutex);
3806
        qemu_mutex_lock(&qemu_global_mutex);
3807
        qemu_mutex_unlock(&qemu_fair_mutex);
3808
    } else
3809
        qemu_signal_lock(100);
3810
}
3811

    
3812
static void qemu_mutex_unlock_iothread(void)
3813
{
3814
    qemu_mutex_unlock(&qemu_global_mutex);
3815
}
3816

    
3817
static int all_vcpus_paused(void)
3818
{
3819
    CPUState *penv = first_cpu;
3820

    
3821
    while (penv) {
3822
        if (!penv->stopped)
3823
            return 0;
3824
        penv = (CPUState *)penv->next_cpu;
3825
    }
3826

    
3827
    return 1;
3828
}
3829

    
3830
static void pause_all_vcpus(void)
3831
{
3832
    CPUState *penv = first_cpu;
3833

    
3834
    while (penv) {
3835
        penv->stop = 1;
3836
        qemu_thread_signal(penv->thread, SIGUSR1);
3837
        qemu_cpu_kick(penv);
3838
        penv = (CPUState *)penv->next_cpu;
3839
    }
3840

    
3841
    while (!all_vcpus_paused()) {
3842
        qemu_cond_timedwait(&qemu_pause_cond, &qemu_global_mutex, 100);
3843
        penv = first_cpu;
3844
        while (penv) {
3845
            qemu_thread_signal(penv->thread, SIGUSR1);
3846
            penv = (CPUState *)penv->next_cpu;
3847
        }
3848
    }
3849
}
3850

    
3851
static void resume_all_vcpus(void)
3852
{
3853
    CPUState *penv = first_cpu;
3854

    
3855
    while (penv) {
3856
        penv->stop = 0;
3857
        penv->stopped = 0;
3858
        qemu_thread_signal(penv->thread, SIGUSR1);
3859
        qemu_cpu_kick(penv);
3860
        penv = (CPUState *)penv->next_cpu;
3861
    }
3862
}
3863

    
3864
static void tcg_init_vcpu(void *_env)
3865
{
3866
    CPUState *env = _env;
3867
    /* share a single thread for all cpus with TCG */
3868
    if (!tcg_cpu_thread) {
3869
        env->thread = qemu_mallocz(sizeof(QemuThread));
3870
        env->halt_cond = qemu_mallocz(sizeof(QemuCond));
3871
        qemu_cond_init(env->halt_cond);
3872
        qemu_thread_create(env->thread, tcg_cpu_thread_fn, env);
3873
        while (env->created == 0)
3874
            qemu_cond_timedwait(&qemu_cpu_cond, &qemu_global_mutex, 100);
3875
        tcg_cpu_thread = env->thread;
3876
        tcg_halt_cond = env->halt_cond;
3877
    } else {
3878
        env->thread = tcg_cpu_thread;
3879
        env->halt_cond = tcg_halt_cond;
3880
    }
3881
}
3882

    
3883
static void kvm_start_vcpu(CPUState *env)
3884
{
3885
    kvm_init_vcpu(env);
3886
    env->thread = qemu_mallocz(sizeof(QemuThread));
3887
    env->halt_cond = qemu_mallocz(sizeof(QemuCond));
3888
    qemu_cond_init(env->halt_cond);
3889
    qemu_thread_create(env->thread, kvm_cpu_thread_fn, env);
3890
    while (env->created == 0)
3891
        qemu_cond_timedwait(&qemu_cpu_cond, &qemu_global_mutex, 100);
3892
}
3893

    
3894
void qemu_init_vcpu(void *_env)
3895
{
3896
    CPUState *env = _env;
3897

    
3898
    if (kvm_enabled())
3899
        kvm_start_vcpu(env);
3900
    else
3901
        tcg_init_vcpu(env);
3902
}
3903

    
3904
void qemu_notify_event(void)
3905
{
3906
    qemu_event_increment();
3907
}
3908

    
3909
void vm_stop(int reason)
3910
{
3911
    QemuThread me;
3912
    qemu_thread_self(&me);
3913

    
3914
    if (!qemu_thread_equal(&me, &io_thread)) {
3915
        qemu_system_vmstop_request(reason);
3916
        /*
3917
         * FIXME: should not return to device code in case
3918
         * vm_stop() has been requested.
3919
         */
3920
        if (cpu_single_env) {
3921
            cpu_exit(cpu_single_env);
3922
            cpu_single_env->stop = 1;
3923
        }
3924
        return;
3925
    }
3926
    do_vm_stop(reason);
3927
}
3928

    
3929
#endif
3930

    
3931

    
3932
#ifdef _WIN32
3933
static void host_main_loop_wait(int *timeout)
3934
{
3935
    int ret, ret2, i;
3936
    PollingEntry *pe;
3937

    
3938

    
3939
    /* XXX: need to suppress polling by better using win32 events */
3940
    ret = 0;
3941
    for(pe = first_polling_entry; pe != NULL; pe = pe->next) {
3942
        ret |= pe->func(pe->opaque);
3943
    }
3944
    if (ret == 0) {
3945
        int err;
3946
        WaitObjects *w = &wait_objects;
3947

    
3948
        ret = WaitForMultipleObjects(w->num, w->events, FALSE, *timeout);
3949
        if (WAIT_OBJECT_0 + 0 <= ret && ret <= WAIT_OBJECT_0 + w->num - 1) {
3950
            if (w->func[ret - WAIT_OBJECT_0])
3951
                w->func[ret - WAIT_OBJECT_0](w->opaque[ret - WAIT_OBJECT_0]);
3952

    
3953
            /* Check for additional signaled events */
3954
            for(i = (ret - WAIT_OBJECT_0 + 1); i < w->num; i++) {
3955

    
3956
                /* Check if event is signaled */
3957
                ret2 = WaitForSingleObject(w->events[i], 0);
3958
                if(ret2 == WAIT_OBJECT_0) {
3959
                    if (w->func[i])
3960
                        w->func[i](w->opaque[i]);
3961
                } else if (ret2 == WAIT_TIMEOUT) {
3962
                } else {
3963
                    err = GetLastError();
3964
                    fprintf(stderr, "WaitForSingleObject error %d %d\n", i, err);
3965
                }
3966
            }
3967
        } else if (ret == WAIT_TIMEOUT) {
3968
        } else {
3969
            err = GetLastError();
3970
            fprintf(stderr, "WaitForMultipleObjects error %d %d\n", ret, err);
3971
        }
3972
    }
3973

    
3974
    *timeout = 0;
3975
}
3976
#else
3977
static void host_main_loop_wait(int *timeout)
3978
{
3979
}
3980
#endif
3981

    
3982
void main_loop_wait(int timeout)
3983
{
3984
    IOHandlerRecord *ioh;
3985
    fd_set rfds, wfds, xfds;
3986
    int ret, nfds;
3987
    struct timeval tv;
3988

    
3989
    qemu_bh_update_timeout(&timeout);
3990

    
3991
    host_main_loop_wait(&timeout);
3992

    
3993
    /* poll any events */
3994
    /* XXX: separate device handlers from system ones */
3995
    nfds = -1;
3996
    FD_ZERO(&rfds);
3997
    FD_ZERO(&wfds);
3998
    FD_ZERO(&xfds);
3999
    for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
4000
        if (ioh->deleted)
4001
            continue;
4002
        if (ioh->fd_read &&
4003
            (!ioh->fd_read_poll ||
4004
             ioh->fd_read_poll(ioh->opaque) != 0)) {
4005
            FD_SET(ioh->fd, &rfds);
4006
            if (ioh->fd > nfds)
4007
                nfds = ioh->fd;
4008
        }
4009
        if (ioh->fd_write) {
4010
            FD_SET(ioh->fd, &wfds);
4011
            if (ioh->fd > nfds)
4012
                nfds = ioh->fd;
4013
        }
4014
    }
4015

    
4016
    tv.tv_sec = timeout / 1000;
4017
    tv.tv_usec = (timeout % 1000) * 1000;
4018

    
4019
    slirp_select_fill(&nfds, &rfds, &wfds, &xfds);
4020

    
4021
    qemu_mutex_unlock_iothread();
4022
    ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv);
4023
    qemu_mutex_lock_iothread();
4024
    if (ret > 0) {
4025
        IOHandlerRecord **pioh;
4026

    
4027
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
4028
            if (!ioh->deleted && ioh->fd_read && FD_ISSET(ioh->fd, &rfds)) {
4029
                ioh->fd_read(ioh->opaque);
4030
            }
4031
            if (!ioh->deleted && ioh->fd_write && FD_ISSET(ioh->fd, &wfds)) {
4032
                ioh->fd_write(ioh->opaque);
4033
            }
4034
        }
4035

    
4036
        /* remove deleted IO handlers */
4037
        pioh = &first_io_handler;
4038
        while (*pioh) {
4039
            ioh = *pioh;
4040
            if (ioh->deleted) {
4041
                *pioh = ioh->next;
4042
                qemu_free(ioh);
4043
            } else
4044
                pioh = &ioh->next;
4045
        }
4046
    }
4047

    
4048
    slirp_select_poll(&rfds, &wfds, &xfds, (ret < 0));
4049

    
4050
    /* rearm timer, if not periodic */
4051
    if (alarm_timer->flags & ALARM_FLAG_EXPIRED) {
4052
        alarm_timer->flags &= ~ALARM_FLAG_EXPIRED;
4053
        qemu_rearm_alarm_timer(alarm_timer);
4054
    }
4055

    
4056
    /* vm time timers */
4057
    if (vm_running) {
4058
        if (!cur_cpu || likely(!(cur_cpu->singlestep_enabled & SSTEP_NOTIMER)))
4059
            qemu_run_timers(&active_timers[QEMU_TIMER_VIRTUAL],
4060
                qemu_get_clock(vm_clock));
4061
    }
4062

    
4063
    /* real time timers */
4064
    qemu_run_timers(&active_timers[QEMU_TIMER_REALTIME],
4065
                    qemu_get_clock(rt_clock));
4066

    
4067
    /* Check bottom-halves last in case any of the earlier events triggered
4068
       them.  */
4069
    qemu_bh_poll();
4070

    
4071
}
4072

    
4073
static int qemu_cpu_exec(CPUState *env)
4074
{
4075
    int ret;
4076
#ifdef CONFIG_PROFILER
4077
    int64_t ti;
4078
#endif
4079

    
4080
#ifdef CONFIG_PROFILER
4081
    ti = profile_getclock();
4082
#endif
4083
    if (use_icount) {
4084
        int64_t count;
4085
        int decr;
4086
        qemu_icount -= (env->icount_decr.u16.low + env->icount_extra);
4087
        env->icount_decr.u16.low = 0;
4088
        env->icount_extra = 0;
4089
        count = qemu_next_deadline();
4090
        count = (count + (1 << icount_time_shift) - 1)
4091
                >> icount_time_shift;
4092
        qemu_icount += count;
4093
        decr = (count > 0xffff) ? 0xffff : count;
4094
        count -= decr;
4095
        env->icount_decr.u16.low = decr;
4096
        env->icount_extra = count;
4097
    }
4098
    ret = cpu_exec(env);
4099
#ifdef CONFIG_PROFILER
4100
    qemu_time += profile_getclock() - ti;
4101
#endif
4102
    if (use_icount) {
4103
        /* Fold pending instructions back into the
4104
           instruction counter, and clear the interrupt flag.  */
4105
        qemu_icount -= (env->icount_decr.u16.low
4106
                        + env->icount_extra);
4107
        env->icount_decr.u32 = 0;
4108
        env->icount_extra = 0;
4109
    }
4110
    return ret;
4111
}
4112

    
4113
static void tcg_cpu_exec(void)
4114
{
4115
    int ret = 0;
4116

    
4117
    if (next_cpu == NULL)
4118
        next_cpu = first_cpu;
4119
    for (; next_cpu != NULL; next_cpu = next_cpu->next_cpu) {
4120
        CPUState *env = cur_cpu = next_cpu;
4121

    
4122
        if (!vm_running)
4123
            break;
4124
        if (timer_alarm_pending) {
4125
            timer_alarm_pending = 0;
4126
            break;
4127
        }
4128
        if (cpu_can_run(env))
4129
            ret = qemu_cpu_exec(env);
4130
        if (ret == EXCP_DEBUG) {
4131
            gdb_set_stop_cpu(env);
4132
            debug_requested = 1;
4133
            break;
4134
        }
4135
    }
4136
}
4137

    
4138
static int cpu_has_work(CPUState *env)
4139
{
4140
    if (env->stop)
4141
        return 1;
4142
    if (env->stopped)
4143
        return 0;
4144
    if (!env->halted)
4145
        return 1;
4146
    if (qemu_cpu_has_work(env))
4147
        return 1;
4148
    return 0;
4149
}
4150

    
4151
static int tcg_has_work(void)
4152
{
4153
    CPUState *env;
4154

    
4155
    for (env = first_cpu; env != NULL; env = env->next_cpu)
4156
        if (cpu_has_work(env))
4157
            return 1;
4158
    return 0;
4159
}
4160

    
4161
static int qemu_calculate_timeout(void)
4162
{
4163
#ifndef CONFIG_IOTHREAD
4164
    int timeout;
4165

    
4166
    if (!vm_running)
4167
        timeout = 5000;
4168
    else if (tcg_has_work())
4169
        timeout = 0;
4170
    else if (!use_icount)
4171
        timeout = 5000;
4172
    else {
4173
     /* XXX: use timeout computed from timers */
4174
        int64_t add;
4175
        int64_t delta;
4176
        /* Advance virtual time to the next event.  */
4177
        if (use_icount == 1) {
4178
            /* When not using an adaptive execution frequency
4179
               we tend to get badly out of sync with real time,
4180
               so just delay for a reasonable amount of time.  */
4181
            delta = 0;
4182
        } else {
4183
            delta = cpu_get_icount() - cpu_get_clock();
4184
        }
4185
        if (delta > 0) {
4186
            /* If virtual time is ahead of real time then just
4187
               wait for IO.  */
4188
            timeout = (delta / 1000000) + 1;
4189
        } else {
4190
            /* Wait for either IO to occur or the next
4191
               timer event.  */
4192
            add = qemu_next_deadline();
4193
            /* We advance the timer before checking for IO.
4194
               Limit the amount we advance so that early IO
4195
               activity won't get the guest too far ahead.  */
4196
            if (add > 10000000)
4197
                add = 10000000;
4198
            delta += add;
4199
            add = (add + (1 << icount_time_shift) - 1)
4200
                  >> icount_time_shift;
4201
            qemu_icount += add;
4202
            timeout = delta / 1000000;
4203
            if (timeout < 0)
4204
                timeout = 0;
4205
        }
4206
    }
4207

    
4208
    return timeout;
4209
#else /* CONFIG_IOTHREAD */
4210
    return 1000;
4211
#endif
4212
}
4213

    
4214
static int vm_can_run(void)
4215
{
4216
    if (powerdown_requested)
4217
        return 0;
4218
    if (reset_requested)
4219
        return 0;
4220
    if (shutdown_requested)
4221
        return 0;
4222
    if (debug_requested)
4223
        return 0;
4224
    return 1;
4225
}
4226

    
4227
qemu_irq qemu_system_powerdown;
4228

    
4229
static void main_loop(void)
4230
{
4231
    int r;
4232

    
4233
#ifdef CONFIG_IOTHREAD
4234
    qemu_system_ready = 1;
4235
    qemu_cond_broadcast(&qemu_system_cond);
4236
#endif
4237

    
4238
    for (;;) {
4239
        do {
4240
#ifdef CONFIG_PROFILER
4241
            int64_t ti;
4242
#endif
4243
#ifndef CONFIG_IOTHREAD
4244
            tcg_cpu_exec();
4245
#endif
4246
#ifdef CONFIG_PROFILER
4247
            ti = profile_getclock();
4248
#endif
4249
            main_loop_wait(qemu_calculate_timeout());
4250
#ifdef CONFIG_PROFILER
4251
            dev_time += profile_getclock() - ti;
4252
#endif
4253
        } while (vm_can_run());
4254

    
4255
        if (qemu_debug_requested())
4256
            vm_stop(EXCP_DEBUG);
4257
        if (qemu_shutdown_requested()) {
4258
            if (no_shutdown) {
4259
                vm_stop(0);
4260
                no_shutdown = 0;
4261
            } else
4262
                break;
4263
        }
4264
        if (qemu_reset_requested()) {
4265
            pause_all_vcpus();
4266
            qemu_system_reset();
4267
            resume_all_vcpus();
4268
        }
4269
        if (qemu_powerdown_requested()) {
4270
            qemu_irq_raise(qemu_system_powerdown);
4271
        }
4272
        if ((r = qemu_vmstop_requested()))
4273
            vm_stop(r);
4274
    }
4275
    pause_all_vcpus();
4276
}
4277

    
4278
static void version(void)
4279
{
4280
    printf("QEMU PC emulator version " QEMU_VERSION QEMU_PKGVERSION ", Copyright (c) 2003-2008 Fabrice Bellard\n");
4281
}
4282

    
4283
static void help(int exitcode)
4284
{
4285
    version();
4286
    printf("usage: %s [options] [disk_image]\n"
4287
           "\n"
4288
           "'disk_image' is a raw hard image image for IDE hard disk 0\n"
4289
           "\n"
4290
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4291
           opt_help
4292
#define DEFHEADING(text) stringify(text) "\n"
4293
#include "qemu-options.h"
4294
#undef DEF
4295
#undef DEFHEADING
4296
#undef GEN_DOCS
4297
           "\n"
4298
           "During emulation, the following keys are useful:\n"
4299
           "ctrl-alt-f      toggle full screen\n"
4300
           "ctrl-alt-n      switch to virtual console 'n'\n"
4301
           "ctrl-alt        toggle mouse and keyboard grab\n"
4302
           "\n"
4303
           "When using -nographic, press 'ctrl-a h' to get some help.\n"
4304
           ,
4305
           "qemu",
4306
           DEFAULT_RAM_SIZE,
4307
#ifndef _WIN32
4308
           DEFAULT_NETWORK_SCRIPT,
4309
           DEFAULT_NETWORK_DOWN_SCRIPT,
4310
#endif
4311
           DEFAULT_GDBSTUB_PORT,
4312
           "/tmp/qemu.log");
4313
    exit(exitcode);
4314
}
4315

    
4316
#define HAS_ARG 0x0001
4317

    
4318
enum {
4319
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4320
    opt_enum,
4321
#define DEFHEADING(text)
4322
#include "qemu-options.h"
4323
#undef DEF
4324
#undef DEFHEADING
4325
#undef GEN_DOCS
4326
};
4327

    
4328
typedef struct QEMUOption {
4329
    const char *name;
4330
    int flags;
4331
    int index;
4332
} QEMUOption;
4333

    
4334
static const QEMUOption qemu_options[] = {
4335
    { "h", 0, QEMU_OPTION_h },
4336
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4337
    { option, opt_arg, opt_enum },
4338
#define DEFHEADING(text)
4339
#include "qemu-options.h"
4340
#undef DEF
4341
#undef DEFHEADING
4342
#undef GEN_DOCS
4343
    { NULL },
4344
};
4345

    
4346
#ifdef HAS_AUDIO
4347
struct soundhw soundhw[] = {
4348
#ifdef HAS_AUDIO_CHOICE
4349
#if defined(TARGET_I386) || defined(TARGET_MIPS)
4350
    {
4351
        "pcspk",
4352
        "PC speaker",
4353
        0,
4354
        1,
4355
        { .init_isa = pcspk_audio_init }
4356
    },
4357
#endif
4358

    
4359
#ifdef CONFIG_SB16
4360
    {
4361
        "sb16",
4362
        "Creative Sound Blaster 16",
4363
        0,
4364
        1,
4365
        { .init_isa = SB16_init }
4366
    },
4367
#endif
4368

    
4369
#ifdef CONFIG_CS4231A
4370
    {
4371
        "cs4231a",
4372
        "CS4231A",
4373
        0,
4374
        1,
4375
        { .init_isa = cs4231a_init }
4376
    },
4377
#endif
4378

    
4379
#ifdef CONFIG_ADLIB
4380
    {
4381
        "adlib",
4382
#ifdef HAS_YMF262
4383
        "Yamaha YMF262 (OPL3)",
4384
#else
4385
        "Yamaha YM3812 (OPL2)",
4386
#endif
4387
        0,
4388
        1,
4389
        { .init_isa = Adlib_init }
4390
    },
4391
#endif
4392

    
4393
#ifdef CONFIG_GUS
4394
    {
4395
        "gus",
4396
        "Gravis Ultrasound GF1",
4397
        0,
4398
        1,
4399
        { .init_isa = GUS_init }
4400
    },
4401
#endif
4402

    
4403
#ifdef CONFIG_AC97
4404
    {
4405
        "ac97",
4406
        "Intel 82801AA AC97 Audio",
4407
        0,
4408
        0,
4409
        { .init_pci = ac97_init }
4410
    },
4411
#endif
4412

    
4413
#ifdef CONFIG_ES1370
4414
    {
4415
        "es1370",
4416
        "ENSONIQ AudioPCI ES1370",
4417
        0,
4418
        0,
4419
        { .init_pci = es1370_init }
4420
    },
4421
#endif
4422

    
4423
#endif /* HAS_AUDIO_CHOICE */
4424

    
4425
    { NULL, NULL, 0, 0, { NULL } }
4426
};
4427

    
4428
static void select_soundhw (const char *optarg)
4429
{
4430
    struct soundhw *c;
4431

    
4432
    if (*optarg == '?') {
4433
    show_valid_cards:
4434

    
4435
        printf ("Valid sound card names (comma separated):\n");
4436
        for (c = soundhw; c->name; ++c) {
4437
            printf ("%-11s %s\n", c->name, c->descr);
4438
        }
4439
        printf ("\n-soundhw all will enable all of the above\n");
4440
        exit (*optarg != '?');
4441
    }
4442
    else {
4443
        size_t l;
4444
        const char *p;
4445
        char *e;
4446
        int bad_card = 0;
4447

    
4448
        if (!strcmp (optarg, "all")) {
4449
            for (c = soundhw; c->name; ++c) {
4450
                c->enabled = 1;
4451
            }
4452
            return;
4453
        }
4454

    
4455
        p = optarg;
4456
        while (*p) {
4457
            e = strchr (p, ',');
4458
            l = !e ? strlen (p) : (size_t) (e - p);
4459

    
4460
            for (c = soundhw; c->name; ++c) {
4461
                if (!strncmp (c->name, p, l)) {
4462
                    c->enabled = 1;
4463
                    break;
4464
                }
4465
            }
4466

    
4467
            if (!c->name) {
4468
                if (l > 80) {
4469
                    fprintf (stderr,
4470
                             "Unknown sound card name (too big to show)\n");
4471
                }
4472
                else {
4473
                    fprintf (stderr, "Unknown sound card name `%.*s'\n",
4474
                             (int) l, p);
4475
                }
4476
                bad_card = 1;
4477
            }
4478
            p += l + (e != NULL);
4479
        }
4480

    
4481
        if (bad_card)
4482
            goto show_valid_cards;
4483
    }
4484
}
4485
#endif
4486

    
4487
static void select_vgahw (const char *p)
4488
{
4489
    const char *opts;
4490

    
4491
    cirrus_vga_enabled = 0;
4492
    std_vga_enabled = 0;
4493
    vmsvga_enabled = 0;
4494
    xenfb_enabled = 0;
4495
    if (strstart(p, "std", &opts)) {
4496
        std_vga_enabled = 1;
4497
    } else if (strstart(p, "cirrus", &opts)) {
4498
        cirrus_vga_enabled = 1;
4499
    } else if (strstart(p, "vmware", &opts)) {
4500
        vmsvga_enabled = 1;
4501
    } else if (strstart(p, "xenfb", &opts)) {
4502
        xenfb_enabled = 1;
4503
    } else if (!strstart(p, "none", &opts)) {
4504
    invalid_vga:
4505
        fprintf(stderr, "Unknown vga type: %s\n", p);
4506
        exit(1);
4507
    }
4508
    while (*opts) {
4509
        const char *nextopt;
4510

    
4511
        if (strstart(opts, ",retrace=", &nextopt)) {
4512
            opts = nextopt;
4513
            if (strstart(opts, "dumb", &nextopt))
4514
                vga_retrace_method = VGA_RETRACE_DUMB;
4515
            else if (strstart(opts, "precise", &nextopt))
4516
                vga_retrace_method = VGA_RETRACE_PRECISE;
4517
            else goto invalid_vga;
4518
        } else goto invalid_vga;
4519
        opts = nextopt;
4520
    }
4521
}
4522

    
4523
#ifdef TARGET_I386
4524
static int balloon_parse(const char *arg)
4525
{
4526
    char buf[128];
4527
    const char *p;
4528

    
4529
    if (!strcmp(arg, "none")) {
4530
        virtio_balloon = 0;
4531
    } else if (!strncmp(arg, "virtio", 6)) {
4532
        virtio_balloon = 1;
4533
        if (arg[6] == ',')  {
4534
            p = arg + 7;
4535
            if (get_param_value(buf, sizeof(buf), "addr", p)) {
4536
                virtio_balloon_devaddr = strdup(buf);
4537
            }
4538
        }
4539
    } else {
4540
        return -1;
4541
    }
4542
    return 0;
4543
}
4544
#endif
4545

    
4546
#ifdef _WIN32
4547
static BOOL WINAPI qemu_ctrl_handler(DWORD type)
4548
{
4549
    exit(STATUS_CONTROL_C_EXIT);
4550
    return TRUE;
4551
}
4552
#endif
4553

    
4554
int qemu_uuid_parse(const char *str, uint8_t *uuid)
4555
{
4556
    int ret;
4557

    
4558
    if(strlen(str) != 36)
4559
        return -1;
4560

    
4561
    ret = sscanf(str, UUID_FMT, &uuid[0], &uuid[1], &uuid[2], &uuid[3],
4562
            &uuid[4], &uuid[5], &uuid[6], &uuid[7], &uuid[8], &uuid[9],
4563
            &uuid[10], &uuid[11], &uuid[12], &uuid[13], &uuid[14], &uuid[15]);
4564

    
4565
    if(ret != 16)
4566
        return -1;
4567

    
4568
#ifdef TARGET_I386
4569
    smbios_add_field(1, offsetof(struct smbios_type_1, uuid), 16, uuid);
4570
#endif
4571

    
4572
    return 0;
4573
}
4574

    
4575
#define MAX_NET_CLIENTS 32
4576

    
4577
#ifndef _WIN32
4578

    
4579
static void termsig_handler(int signal)
4580
{
4581
    qemu_system_shutdown_request();
4582
}
4583

    
4584
static void sigchld_handler(int signal)
4585
{
4586
    waitpid(-1, NULL, WNOHANG);
4587
}
4588

    
4589
static void sighandler_setup(void)
4590
{
4591
    struct sigaction act;
4592

    
4593
    memset(&act, 0, sizeof(act));
4594
    act.sa_handler = termsig_handler;
4595
    sigaction(SIGINT,  &act, NULL);
4596
    sigaction(SIGHUP,  &act, NULL);
4597
    sigaction(SIGTERM, &act, NULL);
4598

    
4599
    act.sa_handler = sigchld_handler;
4600
    act.sa_flags = SA_NOCLDSTOP;
4601
    sigaction(SIGCHLD, &act, NULL);
4602
}
4603

    
4604
#endif
4605

    
4606
#ifdef _WIN32
4607
/* Look for support files in the same directory as the executable.  */
4608
static char *find_datadir(const char *argv0)
4609
{
4610
    char *p;
4611
    char buf[MAX_PATH];
4612
    DWORD len;
4613

    
4614
    len = GetModuleFileName(NULL, buf, sizeof(buf) - 1);
4615
    if (len == 0) {
4616
        return NULL;
4617
    }
4618

    
4619
    buf[len] = 0;
4620
    p = buf + len - 1;
4621
    while (p != buf && *p != '\\')
4622
        p--;
4623
    *p = 0;
4624
    if (access(buf, R_OK) == 0) {
4625
        return qemu_strdup(buf);
4626
    }
4627
    return NULL;
4628
}
4629
#else /* !_WIN32 */
4630

    
4631
/* Find a likely location for support files using the location of the binary.
4632
   For installed binaries this will be "$bindir/../share/qemu".  When
4633
   running from the build tree this will be "$bindir/../pc-bios".  */
4634
#define SHARE_SUFFIX "/share/qemu"
4635
#define BUILD_SUFFIX "/pc-bios"
4636
static char *find_datadir(const char *argv0)
4637
{
4638
    char *dir;
4639
    char *p = NULL;
4640
    char *res;
4641
#ifdef PATH_MAX
4642
    char buf[PATH_MAX];
4643
#endif
4644
    size_t max_len;
4645

    
4646
#if defined(__linux__)
4647
    {
4648
        int len;
4649
        len = readlink("/proc/self/exe", buf, sizeof(buf) - 1);
4650
        if (len > 0) {
4651
            buf[len] = 0;
4652
            p = buf;
4653
        }
4654
    }
4655
#elif defined(__FreeBSD__)
4656
    {
4657
        int len;
4658
        len = readlink("/proc/curproc/file", buf, sizeof(buf) - 1);
4659
        if (len > 0) {
4660
            buf[len] = 0;
4661
            p = buf;
4662
        }
4663
    }
4664
#endif
4665
    /* If we don't have any way of figuring out the actual executable
4666
       location then try argv[0].  */
4667
    if (!p) {
4668
#ifdef PATH_MAX
4669
        p = buf;
4670
#endif
4671
        p = realpath(argv0, p);
4672
        if (!p) {
4673
            return NULL;
4674
        }
4675
    }
4676
    dir = dirname(p);
4677
    dir = dirname(dir);
4678

    
4679
    max_len = strlen(dir) +
4680
        MAX(strlen(SHARE_SUFFIX), strlen(BUILD_SUFFIX)) + 1;
4681
    res = qemu_mallocz(max_len);
4682
    snprintf(res, max_len, "%s%s", dir, SHARE_SUFFIX);
4683
    if (access(res, R_OK)) {
4684
        snprintf(res, max_len, "%s%s", dir, BUILD_SUFFIX);
4685
        if (access(res, R_OK)) {
4686
            qemu_free(res);
4687
            res = NULL;
4688
        }
4689
    }
4690
#ifndef PATH_MAX
4691
    free(p);
4692
#endif
4693
    return res;
4694
}
4695
#undef SHARE_SUFFIX
4696
#undef BUILD_SUFFIX
4697
#endif
4698

    
4699
char *qemu_find_file(int type, const char *name)
4700
{
4701
    int len;
4702
    const char *subdir;
4703
    char *buf;
4704

    
4705
    /* If name contains path separators then try it as a straight path.  */
4706
    if ((strchr(name, '/') || strchr(name, '\\'))
4707
        && access(name, R_OK) == 0) {
4708
        return strdup(name);
4709
    }
4710
    switch (type) {
4711
    case QEMU_FILE_TYPE_BIOS:
4712
        subdir = "";
4713
        break;
4714
    case QEMU_FILE_TYPE_KEYMAP:
4715
        subdir = "keymaps/";
4716
        break;
4717
    default:
4718
        abort();
4719
    }
4720
    len = strlen(data_dir) + strlen(name) + strlen(subdir) + 2;
4721
    buf = qemu_mallocz(len);
4722
    snprintf(buf, len, "%s/%s%s", data_dir, subdir, name);
4723
    if (access(buf, R_OK)) {
4724
        qemu_free(buf);
4725
        return NULL;
4726
    }
4727
    return buf;
4728
}
4729

    
4730
static int device_init_func(QemuOpts *opts, void *opaque)
4731
{
4732
    DeviceState *dev;
4733

    
4734
    dev = qdev_device_add(opts);
4735
    if (!dev)
4736
        return -1;
4737
    return 0;
4738
}
4739

    
4740
struct device_config {
4741
    enum {
4742
        DEV_USB,       /* -usbdevice   */
4743
        DEV_BT,        /* -bt          */
4744
    } type;
4745
    const char *cmdline;
4746
    TAILQ_ENTRY(device_config) next;
4747
};
4748
TAILQ_HEAD(, device_config) device_configs = TAILQ_HEAD_INITIALIZER(device_configs);
4749

    
4750
static void add_device_config(int type, const char *cmdline)
4751
{
4752
    struct device_config *conf;
4753

    
4754
    conf = qemu_mallocz(sizeof(*conf));
4755
    conf->type = type;
4756
    conf->cmdline = cmdline;
4757
    TAILQ_INSERT_TAIL(&device_configs, conf, next);
4758
}
4759

    
4760
static int foreach_device_config(int type, int (*func)(const char *cmdline))
4761
{
4762
    struct device_config *conf;
4763
    int rc;
4764

    
4765
    TAILQ_FOREACH(conf, &device_configs, next) {
4766
        if (conf->type != type)
4767
            continue;
4768
        rc = func(conf->cmdline);
4769
        if (0 != rc)
4770
            return rc;
4771
    }
4772
    return 0;
4773
}
4774

    
4775
int main(int argc, char **argv, char **envp)
4776
{
4777
    const char *gdbstub_dev = NULL;
4778
    uint32_t boot_devices_bitmap = 0;
4779
    int i;
4780
    int snapshot, linux_boot, net_boot;
4781
    const char *initrd_filename;
4782
    const char *kernel_filename, *kernel_cmdline;
4783
    char boot_devices[33] = "cad"; /* default to HD->floppy->CD-ROM */
4784
    DisplayState *ds;
4785
    DisplayChangeListener *dcl;
4786
    int cyls, heads, secs, translation;
4787
    const char *net_clients[MAX_NET_CLIENTS];
4788
    int nb_net_clients;
4789
    QemuOpts *hda_opts = NULL, *opts;
4790
    int optind;
4791
    const char *r, *optarg;
4792
    CharDriverState *monitor_hd = NULL;
4793
    const char *monitor_device;
4794
    const char *serial_devices[MAX_SERIAL_PORTS];
4795
    int serial_device_index;
4796
    const char *parallel_devices[MAX_PARALLEL_PORTS];
4797
    int parallel_device_index;
4798
    const char *virtio_consoles[MAX_VIRTIO_CONSOLES];
4799
    int virtio_console_index;
4800
    const char *loadvm = NULL;
4801
    QEMUMachine *machine;
4802
    const char *cpu_model;
4803
#ifndef _WIN32
4804
    int fds[2];
4805
#endif
4806
    int tb_size;
4807
    const char *pid_file = NULL;
4808
    const char *incoming = NULL;
4809
#ifndef _WIN32
4810
    int fd = 0;
4811
    struct passwd *pwd = NULL;
4812
    const char *chroot_dir = NULL;
4813
    const char *run_as = NULL;
4814
#endif
4815
    CPUState *env;
4816
    int show_vnc_port = 0;
4817

    
4818
    qemu_cache_utils_init(envp);
4819

    
4820
    LIST_INIT (&vm_change_state_head);
4821
#ifndef _WIN32
4822
    {
4823
        struct sigaction act;
4824
        sigfillset(&act.sa_mask);
4825
        act.sa_flags = 0;
4826
        act.sa_handler = SIG_IGN;
4827
        sigaction(SIGPIPE, &act, NULL);
4828
    }
4829
#else
4830
    SetConsoleCtrlHandler(qemu_ctrl_handler, TRUE);
4831
    /* Note: cpu_interrupt() is currently not SMP safe, so we force
4832
       QEMU to run on a single CPU */
4833
    {
4834
        HANDLE h;
4835
        DWORD mask, smask;
4836
        int i;
4837
        h = GetCurrentProcess();
4838
        if (GetProcessAffinityMask(h, &mask, &smask)) {
4839
            for(i = 0; i < 32; i++) {
4840
                if (mask & (1 << i))
4841
                    break;
4842
            }
4843
            if (i != 32) {
4844
                mask = 1 << i;
4845
                SetProcessAffinityMask(h, mask);
4846
            }
4847
        }
4848
    }
4849
#endif
4850

    
4851
    module_call_init(MODULE_INIT_MACHINE);
4852
    machine = find_default_machine();
4853
    cpu_model = NULL;
4854
    initrd_filename = NULL;
4855
    ram_size = 0;
4856
    snapshot = 0;
4857
    kernel_filename = NULL;
4858
    kernel_cmdline = "";
4859
    cyls = heads = secs = 0;
4860
    translation = BIOS_ATA_TRANSLATION_AUTO;
4861
    monitor_device = "vc:80Cx24C";
4862

    
4863
    serial_devices[0] = "vc:80Cx24C";
4864
    for(i = 1; i < MAX_SERIAL_PORTS; i++)
4865
        serial_devices[i] = NULL;
4866
    serial_device_index = 0;
4867

    
4868
    parallel_devices[0] = "vc:80Cx24C";
4869
    for(i = 1; i < MAX_PARALLEL_PORTS; i++)
4870
        parallel_devices[i] = NULL;
4871
    parallel_device_index = 0;
4872

    
4873
    for(i = 0; i < MAX_VIRTIO_CONSOLES; i++)
4874
        virtio_consoles[i] = NULL;
4875
    virtio_console_index = 0;
4876

    
4877
    for (i = 0; i < MAX_NODES; i++) {
4878
        node_mem[i] = 0;
4879
        node_cpumask[i] = 0;
4880
    }
4881

    
4882
    nb_net_clients = 0;
4883
    nb_numa_nodes = 0;
4884
    nb_nics = 0;
4885

    
4886
    tb_size = 0;
4887
    autostart= 1;
4888

    
4889
    register_watchdogs();
4890

    
4891
    optind = 1;
4892
    for(;;) {
4893
        if (optind >= argc)
4894
            break;
4895
        r = argv[optind];
4896
        if (r[0] != '-') {
4897
            hda_opts = drive_add(argv[optind++], HD_ALIAS, 0);
4898
        } else {
4899
            const QEMUOption *popt;
4900

    
4901
            optind++;
4902
            /* Treat --foo the same as -foo.  */
4903
            if (r[1] == '-')
4904
                r++;
4905
            popt = qemu_options;
4906
            for(;;) {
4907
                if (!popt->name) {
4908
                    fprintf(stderr, "%s: invalid option -- '%s'\n",
4909
                            argv[0], r);
4910
                    exit(1);
4911
                }
4912
                if (!strcmp(popt->name, r + 1))
4913
                    break;
4914
                popt++;
4915
            }
4916
            if (popt->flags & HAS_ARG) {
4917
                if (optind >= argc) {
4918
                    fprintf(stderr, "%s: option '%s' requires an argument\n",
4919
                            argv[0], r);
4920
                    exit(1);
4921
                }
4922
                optarg = argv[optind++];
4923
            } else {
4924
                optarg = NULL;
4925
            }
4926

    
4927
            switch(popt->index) {
4928
            case QEMU_OPTION_M:
4929
                machine = find_machine(optarg);
4930
                if (!machine) {
4931
                    QEMUMachine *m;
4932
                    printf("Supported machines are:\n");
4933
                    for(m = first_machine; m != NULL; m = m->next) {
4934
                        if (m->alias)
4935
                            printf("%-10s %s (alias of %s)\n",
4936
                                   m->alias, m->desc, m->name);
4937
                        printf("%-10s %s%s\n",
4938
                               m->name, m->desc,
4939
                               m->is_default ? " (default)" : "");
4940
                    }
4941
                    exit(*optarg != '?');
4942
                }
4943
                break;
4944
            case QEMU_OPTION_cpu:
4945
                /* hw initialization will check this */
4946
                if (*optarg == '?') {
4947
/* XXX: implement xxx_cpu_list for targets that still miss it */
4948
#if defined(cpu_list)
4949
                    cpu_list(stdout, &fprintf);
4950
#endif
4951
                    exit(0);
4952
                } else {
4953
                    cpu_model = optarg;
4954
                }
4955
                break;
4956
            case QEMU_OPTION_initrd:
4957
                initrd_filename = optarg;
4958
                break;
4959
            case QEMU_OPTION_hda:
4960
                if (cyls == 0)
4961
                    hda_opts = drive_add(optarg, HD_ALIAS, 0);
4962
                else
4963
                    hda_opts = drive_add(optarg, HD_ALIAS
4964
                             ",cyls=%d,heads=%d,secs=%d%s",
4965
                             0, cyls, heads, secs,
4966
                             translation == BIOS_ATA_TRANSLATION_LBA ?
4967
                                 ",trans=lba" :
4968
                             translation == BIOS_ATA_TRANSLATION_NONE ?
4969
                                 ",trans=none" : "");
4970
                 break;
4971
            case QEMU_OPTION_hdb:
4972
            case QEMU_OPTION_hdc:
4973
            case QEMU_OPTION_hdd:
4974
                drive_add(optarg, HD_ALIAS, popt->index - QEMU_OPTION_hda);
4975
                break;
4976
            case QEMU_OPTION_drive:
4977
                drive_add(NULL, "%s", optarg);
4978
                break;
4979
            case QEMU_OPTION_set:
4980
                if (qemu_set_option(optarg) != 0)
4981
                    exit(1);
4982
                break;
4983
            case QEMU_OPTION_mtdblock:
4984
                drive_add(optarg, MTD_ALIAS);
4985
                break;
4986
            case QEMU_OPTION_sd:
4987
                drive_add(optarg, SD_ALIAS);
4988
                break;
4989
            case QEMU_OPTION_pflash:
4990
                drive_add(optarg, PFLASH_ALIAS);
4991
                break;
4992
            case QEMU_OPTION_snapshot:
4993
                snapshot = 1;
4994
                break;
4995
            case QEMU_OPTION_hdachs:
4996
                {
4997
                    const char *p;
4998
                    p = optarg;
4999
                    cyls = strtol(p, (char **)&p, 0);
5000
                    if (cyls < 1 || cyls > 16383)
5001
                        goto chs_fail;
5002
                    if (*p != ',')
5003
                        goto chs_fail;
5004
                    p++;
5005
                    heads = strtol(p, (char **)&p, 0);
5006
                    if (heads < 1 || heads > 16)
5007
                        goto chs_fail;
5008
                    if (*p != ',')
5009
                        goto chs_fail;
5010
                    p++;
5011
                    secs = strtol(p, (char **)&p, 0);
5012
                    if (secs < 1 || secs > 63)
5013
                        goto chs_fail;
5014
                    if (*p == ',') {
5015
                        p++;
5016
                        if (!strcmp(p, "none"))
5017
                            translation = BIOS_ATA_TRANSLATION_NONE;
5018
                        else if (!strcmp(p, "lba"))
5019
                            translation = BIOS_ATA_TRANSLATION_LBA;
5020
                        else if (!strcmp(p, "auto"))
5021
                            translation = BIOS_ATA_TRANSLATION_AUTO;
5022
                        else
5023
                            goto chs_fail;
5024
                    } else if (*p != '\0') {
5025
                    chs_fail:
5026
                        fprintf(stderr, "qemu: invalid physical CHS format\n");
5027
                        exit(1);
5028
                    }
5029
                    if (hda_opts != NULL) {
5030
                        char num[16];
5031
                        snprintf(num, sizeof(num), "%d", cyls);
5032
                        qemu_opt_set(hda_opts, "cyls", num);
5033
                        snprintf(num, sizeof(num), "%d", heads);
5034
                        qemu_opt_set(hda_opts, "heads", num);
5035
                        snprintf(num, sizeof(num), "%d", secs);
5036
                        qemu_opt_set(hda_opts, "secs", num);
5037
                        if (translation == BIOS_ATA_TRANSLATION_LBA)
5038
                            qemu_opt_set(hda_opts, "trans", "lba");
5039
                        if (translation == BIOS_ATA_TRANSLATION_NONE)
5040
                            qemu_opt_set(hda_opts, "trans", "none");
5041
                    }
5042
                }
5043
                break;
5044
            case QEMU_OPTION_numa:
5045
                if (nb_numa_nodes >= MAX_NODES) {
5046
                    fprintf(stderr, "qemu: too many NUMA nodes\n");
5047
                    exit(1);
5048
                }
5049
                numa_add(optarg);
5050
                break;
5051
            case QEMU_OPTION_nographic:
5052
                display_type = DT_NOGRAPHIC;
5053
                break;
5054
#ifdef CONFIG_CURSES
5055
            case QEMU_OPTION_curses:
5056
                display_type = DT_CURSES;
5057
                break;
5058
#endif
5059
            case QEMU_OPTION_portrait:
5060
                graphic_rotate = 1;
5061
                break;
5062
            case QEMU_OPTION_kernel:
5063
                kernel_filename = optarg;
5064
                break;
5065
            case QEMU_OPTION_append:
5066
                kernel_cmdline = optarg;
5067
                break;
5068
            case QEMU_OPTION_cdrom:
5069
                drive_add(optarg, CDROM_ALIAS);
5070
                break;
5071
            case QEMU_OPTION_boot:
5072
                {
5073
                    static const char * const params[] = {
5074
                        "order", "once", "menu", NULL
5075
                    };
5076
                    char buf[sizeof(boot_devices)];
5077
                    char *standard_boot_devices;
5078
                    int legacy = 0;
5079

    
5080
                    if (!strchr(optarg, '=')) {
5081
                        legacy = 1;
5082
                        pstrcpy(buf, sizeof(buf), optarg);
5083
                    } else if (check_params(buf, sizeof(buf), params, optarg) < 0) {
5084
                        fprintf(stderr,
5085
                                "qemu: unknown boot parameter '%s' in '%s'\n",
5086
                                buf, optarg);
5087
                        exit(1);
5088
                    }
5089

    
5090
                    if (legacy ||
5091
                        get_param_value(buf, sizeof(buf), "order", optarg)) {
5092
                        boot_devices_bitmap = parse_bootdevices(buf);
5093
                        pstrcpy(boot_devices, sizeof(boot_devices), buf);
5094
                    }
5095
                    if (!legacy) {
5096
                        if (get_param_value(buf, sizeof(buf),
5097
                                            "once", optarg)) {
5098
                            boot_devices_bitmap |= parse_bootdevices(buf);
5099
                            standard_boot_devices = qemu_strdup(boot_devices);
5100
                            pstrcpy(boot_devices, sizeof(boot_devices), buf);
5101
                            qemu_register_reset(restore_boot_devices,
5102
                                                standard_boot_devices);
5103
                        }
5104
                        if (get_param_value(buf, sizeof(buf),
5105
                                            "menu", optarg)) {
5106
                            if (!strcmp(buf, "on")) {
5107
                                boot_menu = 1;
5108
                            } else if (!strcmp(buf, "off")) {
5109
                                boot_menu = 0;
5110
                            } else {
5111
                                fprintf(stderr,
5112
                                        "qemu: invalid option value '%s'\n",
5113
                                        buf);
5114
                                exit(1);
5115
                            }
5116
                        }
5117
                    }
5118
                }
5119
                break;
5120
            case QEMU_OPTION_fda:
5121
            case QEMU_OPTION_fdb:
5122
                drive_add(optarg, FD_ALIAS, popt->index - QEMU_OPTION_fda);
5123
                break;
5124
#ifdef TARGET_I386
5125
            case QEMU_OPTION_no_fd_bootchk:
5126
                fd_bootchk = 0;
5127
                break;
5128
#endif
5129
            case QEMU_OPTION_net:
5130
                if (nb_net_clients >= MAX_NET_CLIENTS) {
5131
                    fprintf(stderr, "qemu: too many network clients\n");
5132
                    exit(1);
5133
                }
5134
                net_clients[nb_net_clients] = optarg;
5135
                nb_net_clients++;
5136
                break;
5137
#ifdef CONFIG_SLIRP
5138
            case QEMU_OPTION_tftp:
5139
                legacy_tftp_prefix = optarg;
5140
                break;
5141
            case QEMU_OPTION_bootp:
5142
                legacy_bootp_filename = optarg;
5143
                break;
5144
#ifndef _WIN32
5145
            case QEMU_OPTION_smb:
5146
                net_slirp_smb(optarg);
5147
                break;
5148
#endif
5149
            case QEMU_OPTION_redir:
5150
                net_slirp_redir(optarg);
5151
                break;
5152
#endif
5153
            case QEMU_OPTION_bt:
5154
                add_device_config(DEV_BT, optarg);
5155
                break;
5156
#ifdef HAS_AUDIO
5157
            case QEMU_OPTION_audio_help:
5158
                AUD_help ();
5159
                exit (0);
5160
                break;
5161
            case QEMU_OPTION_soundhw:
5162
                select_soundhw (optarg);
5163
                break;
5164
#endif
5165
            case QEMU_OPTION_h:
5166
                help(0);
5167
                break;
5168
            case QEMU_OPTION_version:
5169
                version();
5170
                exit(0);
5171
                break;
5172
            case QEMU_OPTION_m: {
5173
                uint64_t value;
5174
                char *ptr;
5175

    
5176
                value = strtoul(optarg, &ptr, 10);
5177
                switch (*ptr) {
5178
                case 0: case 'M': case 'm':
5179
                    value <<= 20;
5180
                    break;
5181
                case 'G': case 'g':
5182
                    value <<= 30;
5183
                    break;
5184
                default:
5185
                    fprintf(stderr, "qemu: invalid ram size: %s\n", optarg);
5186
                    exit(1);
5187
                }
5188

    
5189
                /* On 32-bit hosts, QEMU is limited by virtual address space */
5190
                if (value > (2047 << 20)
5191
#ifndef CONFIG_KQEMU
5192
                    && HOST_LONG_BITS == 32
5193
#endif
5194
                    ) {
5195
                    fprintf(stderr, "qemu: at most 2047 MB RAM can be simulated\n");
5196
                    exit(1);
5197
                }
5198
                if (value != (uint64_t)(ram_addr_t)value) {
5199
                    fprintf(stderr, "qemu: ram size too large\n");
5200
                    exit(1);
5201
                }
5202
                ram_size = value;
5203
                break;
5204
            }
5205
            case QEMU_OPTION_d:
5206
                {
5207
                    int mask;
5208
                    const CPULogItem *item;
5209

    
5210
                    mask = cpu_str_to_log_mask(optarg);
5211
                    if (!mask) {
5212
                        printf("Log items (comma separated):\n");
5213
                    for(item = cpu_log_items; item->mask != 0; item++) {
5214
                        printf("%-10s %s\n", item->name, item->help);
5215
                    }
5216
                    exit(1);
5217
                    }
5218
                    cpu_set_log(mask);
5219
                }
5220
                break;
5221
            case QEMU_OPTION_s:
5222
                gdbstub_dev = "tcp::" DEFAULT_GDBSTUB_PORT;
5223
                break;
5224
            case QEMU_OPTION_gdb:
5225
                gdbstub_dev = optarg;
5226
                break;
5227
            case QEMU_OPTION_L:
5228
                data_dir = optarg;
5229
                break;
5230
            case QEMU_OPTION_bios:
5231
                bios_name = optarg;
5232
                break;
5233
            case QEMU_OPTION_singlestep:
5234
                singlestep = 1;
5235
                break;
5236
            case QEMU_OPTION_S:
5237
                autostart = 0;
5238
                break;
5239
#ifndef _WIN32
5240
            case QEMU_OPTION_k:
5241
                keyboard_layout = optarg;
5242
                break;
5243
#endif
5244
            case QEMU_OPTION_localtime:
5245
                rtc_utc = 0;
5246
                break;
5247
            case QEMU_OPTION_vga:
5248
                select_vgahw (optarg);
5249
                break;
5250
#if defined(TARGET_PPC) || defined(TARGET_SPARC)
5251
            case QEMU_OPTION_g:
5252
                {
5253
                    const char *p;
5254
                    int w, h, depth;
5255
                    p = optarg;
5256
                    w = strtol(p, (char **)&p, 10);
5257
                    if (w <= 0) {
5258
                    graphic_error:
5259
                        fprintf(stderr, "qemu: invalid resolution or depth\n");
5260
                        exit(1);
5261
                    }
5262
                    if (*p != 'x')
5263
                        goto graphic_error;
5264
                    p++;
5265
                    h = strtol(p, (char **)&p, 10);
5266
                    if (h <= 0)
5267
                        goto graphic_error;
5268
                    if (*p == 'x') {
5269
                        p++;
5270
                        depth = strtol(p, (char **)&p, 10);
5271
                        if (depth != 8 && depth != 15 && depth != 16 &&
5272
                            depth != 24 && depth != 32)
5273
                            goto graphic_error;
5274
                    } else if (*p == '\0') {
5275
                        depth = graphic_depth;
5276
                    } else {
5277
                        goto graphic_error;
5278
                    }
5279

    
5280
                    graphic_width = w;
5281
                    graphic_height = h;
5282
                    graphic_depth = depth;
5283
                }
5284
                break;
5285
#endif
5286
            case QEMU_OPTION_echr:
5287
                {
5288
                    char *r;
5289
                    term_escape_char = strtol(optarg, &r, 0);
5290
                    if (r == optarg)
5291
                        printf("Bad argument to echr\n");
5292
                    break;
5293
                }
5294
            case QEMU_OPTION_monitor:
5295
                monitor_device = optarg;
5296
                break;
5297
            case QEMU_OPTION_serial:
5298
                if (serial_device_index >= MAX_SERIAL_PORTS) {
5299
                    fprintf(stderr, "qemu: too many serial ports\n");
5300
                    exit(1);
5301
                }
5302
                serial_devices[serial_device_index] = optarg;
5303
                serial_device_index++;
5304
                break;
5305
            case QEMU_OPTION_watchdog:
5306
                i = select_watchdog(optarg);
5307
                if (i > 0)
5308
                    exit (i == 1 ? 1 : 0);
5309
                break;
5310
            case QEMU_OPTION_watchdog_action:
5311
                if (select_watchdog_action(optarg) == -1) {
5312
                    fprintf(stderr, "Unknown -watchdog-action parameter\n");
5313
                    exit(1);
5314
                }
5315
                break;
5316
            case QEMU_OPTION_virtiocon:
5317
                if (virtio_console_index >= MAX_VIRTIO_CONSOLES) {
5318
                    fprintf(stderr, "qemu: too many virtio consoles\n");
5319
                    exit(1);
5320
                }
5321
                virtio_consoles[virtio_console_index] = optarg;
5322
                virtio_console_index++;
5323
                break;
5324
            case QEMU_OPTION_parallel:
5325
                if (parallel_device_index >= MAX_PARALLEL_PORTS) {
5326
                    fprintf(stderr, "qemu: too many parallel ports\n");
5327
                    exit(1);
5328
                }
5329
                parallel_devices[parallel_device_index] = optarg;
5330
                parallel_device_index++;
5331
                break;
5332
            case QEMU_OPTION_loadvm:
5333
                loadvm = optarg;
5334
                break;
5335
            case QEMU_OPTION_full_screen:
5336
                full_screen = 1;
5337
                break;
5338
#ifdef CONFIG_SDL
5339
            case QEMU_OPTION_no_frame:
5340
                no_frame = 1;
5341
                break;
5342
            case QEMU_OPTION_alt_grab:
5343
                alt_grab = 1;
5344
                break;
5345
            case QEMU_OPTION_no_quit:
5346
                no_quit = 1;
5347
                break;
5348
            case QEMU_OPTION_sdl:
5349
                display_type = DT_SDL;
5350
                break;
5351
#endif
5352
            case QEMU_OPTION_pidfile:
5353
                pid_file = optarg;
5354
                break;
5355
#ifdef TARGET_I386
5356
            case QEMU_OPTION_win2k_hack:
5357
                win2k_install_hack = 1;
5358
                break;
5359
            case QEMU_OPTION_rtc_td_hack:
5360
                rtc_td_hack = 1;
5361
                break;
5362
            case QEMU_OPTION_acpitable:
5363
                if(acpi_table_add(optarg) < 0) {
5364
                    fprintf(stderr, "Wrong acpi table provided\n");
5365
                    exit(1);
5366
                }
5367
                break;
5368
            case QEMU_OPTION_smbios:
5369
                if(smbios_entry_add(optarg) < 0) {
5370
                    fprintf(stderr, "Wrong smbios provided\n");
5371
                    exit(1);
5372
                }
5373
                break;
5374
#endif
5375
#ifdef CONFIG_KQEMU
5376
            case QEMU_OPTION_enable_kqemu:
5377
                kqemu_allowed = 1;
5378
                break;
5379
            case QEMU_OPTION_kernel_kqemu:
5380
                kqemu_allowed = 2;
5381
                break;
5382
#endif
5383
#ifdef CONFIG_KVM
5384
            case QEMU_OPTION_enable_kvm:
5385
                kvm_allowed = 1;
5386
#ifdef CONFIG_KQEMU
5387
                kqemu_allowed = 0;
5388
#endif
5389
                break;
5390
#endif
5391
            case QEMU_OPTION_usb:
5392
                usb_enabled = 1;
5393
                break;
5394
            case QEMU_OPTION_usbdevice:
5395
                usb_enabled = 1;
5396
                add_device_config(DEV_USB, optarg);
5397
                break;
5398
            case QEMU_OPTION_device:
5399
                opts = qemu_opts_parse(&qemu_device_opts, optarg, "driver");
5400
                if (!opts) {
5401
                    fprintf(stderr, "parse error: %s\n", optarg);
5402
                    exit(1);
5403
                }
5404
                break;
5405
            case QEMU_OPTION_smp:
5406
            {
5407
                char *p;
5408
                char option[128];
5409
                smp_cpus = strtol(optarg, &p, 10);
5410
                if (smp_cpus < 1) {
5411
                    fprintf(stderr, "Invalid number of CPUs\n");
5412
                    exit(1);
5413
                }
5414
                if (*p++ != ',')
5415
                    break;
5416
                if (get_param_value(option, 128, "maxcpus", p))
5417
                    max_cpus = strtol(option, NULL, 0);
5418
                if (max_cpus < smp_cpus) {
5419
                    fprintf(stderr, "maxcpus must be equal to or greater than "
5420
                            "smp\n");
5421
                    exit(1);
5422
                }
5423
                if (max_cpus > 255) {
5424
                    fprintf(stderr, "Unsupported number of maxcpus\n");
5425
                    exit(1);
5426
                }
5427
                break;
5428
            }
5429
            case QEMU_OPTION_vnc:
5430
                display_type = DT_VNC;
5431
                vnc_display = optarg;
5432
                break;
5433
#ifdef TARGET_I386
5434
            case QEMU_OPTION_no_acpi:
5435
                acpi_enabled = 0;
5436
                break;
5437
            case QEMU_OPTION_no_hpet:
5438
                no_hpet = 1;
5439
                break;
5440
            case QEMU_OPTION_balloon:
5441
                if (balloon_parse(optarg) < 0) {
5442
                    fprintf(stderr, "Unknown -balloon argument %s\n", optarg);
5443
                    exit(1);
5444
                }
5445
                break;
5446
#endif
5447
            case QEMU_OPTION_no_reboot:
5448
                no_reboot = 1;
5449
                break;
5450
            case QEMU_OPTION_no_shutdown:
5451
                no_shutdown = 1;
5452
                break;
5453
            case QEMU_OPTION_show_cursor:
5454
                cursor_hide = 0;
5455
                break;
5456
            case QEMU_OPTION_uuid:
5457
                if(qemu_uuid_parse(optarg, qemu_uuid) < 0) {
5458
                    fprintf(stderr, "Fail to parse UUID string."
5459
                            " Wrong format.\n");
5460
                    exit(1);
5461
                }
5462
                break;
5463
#ifndef _WIN32
5464
            case QEMU_OPTION_daemonize:
5465
                daemonize = 1;
5466
                break;
5467
#endif
5468
            case QEMU_OPTION_option_rom:
5469
                if (nb_option_roms >= MAX_OPTION_ROMS) {
5470
                    fprintf(stderr, "Too many option ROMs\n");
5471
                    exit(1);
5472
                }
5473
                option_rom[nb_option_roms] = optarg;
5474
                nb_option_roms++;
5475
                break;
5476
#if defined(TARGET_ARM) || defined(TARGET_M68K)
5477
            case QEMU_OPTION_semihosting:
5478
                semihosting_enabled = 1;
5479
                break;
5480
#endif
5481
            case QEMU_OPTION_name:
5482
                qemu_name = qemu_strdup(optarg);
5483
                 {
5484
                     char *p = strchr(qemu_name, ',');
5485
                     if (p != NULL) {
5486
                        *p++ = 0;
5487
                        if (strncmp(p, "process=", 8)) {
5488
                            fprintf(stderr, "Unknown subargument %s to -name", p);
5489
                            exit(1);
5490
                        }
5491
                        p += 8;
5492
                        set_proc_name(p);
5493
                     }        
5494
                 }        
5495
                break;
5496
#if defined(TARGET_SPARC) || defined(TARGET_PPC)
5497
            case QEMU_OPTION_prom_env:
5498
                if (nb_prom_envs >= MAX_PROM_ENVS) {
5499
                    fprintf(stderr, "Too many prom variables\n");
5500
                    exit(1);
5501
                }
5502
                prom_envs[nb_prom_envs] = optarg;
5503
                nb_prom_envs++;
5504
                break;
5505
#endif
5506
#ifdef TARGET_ARM
5507
            case QEMU_OPTION_old_param:
5508
                old_param = 1;
5509
                break;
5510
#endif
5511
            case QEMU_OPTION_clock:
5512
                configure_alarms(optarg);
5513
                break;
5514
            case QEMU_OPTION_startdate:
5515
                {
5516
                    struct tm tm;
5517
                    time_t rtc_start_date;
5518
                    if (!strcmp(optarg, "now")) {
5519
                        rtc_date_offset = -1;
5520
                    } else {
5521
                        if (sscanf(optarg, "%d-%d-%dT%d:%d:%d",
5522
                               &tm.tm_year,
5523
                               &tm.tm_mon,
5524
                               &tm.tm_mday,
5525
                               &tm.tm_hour,
5526
                               &tm.tm_min,
5527
                               &tm.tm_sec) == 6) {
5528
                            /* OK */
5529
                        } else if (sscanf(optarg, "%d-%d-%d",
5530
                                          &tm.tm_year,
5531
                                          &tm.tm_mon,
5532
                                          &tm.tm_mday) == 3) {
5533
                            tm.tm_hour = 0;
5534
                            tm.tm_min = 0;
5535
                            tm.tm_sec = 0;
5536
                        } else {
5537
                            goto date_fail;
5538
                        }
5539
                        tm.tm_year -= 1900;
5540
                        tm.tm_mon--;
5541
                        rtc_start_date = mktimegm(&tm);
5542
                        if (rtc_start_date == -1) {
5543
                        date_fail:
5544
                            fprintf(stderr, "Invalid date format. Valid format are:\n"
5545
                                    "'now' or '2006-06-17T16:01:21' or '2006-06-17'\n");
5546
                            exit(1);
5547
                        }
5548
                        rtc_date_offset = time(NULL) - rtc_start_date;
5549
                    }
5550
                }
5551
                break;
5552
            case QEMU_OPTION_tb_size:
5553
                tb_size = strtol(optarg, NULL, 0);
5554
                if (tb_size < 0)
5555
                    tb_size = 0;
5556
                break;
5557
            case QEMU_OPTION_icount:
5558
                use_icount = 1;
5559
                if (strcmp(optarg, "auto") == 0) {
5560
                    icount_time_shift = -1;
5561
                } else {
5562
                    icount_time_shift = strtol(optarg, NULL, 0);
5563
                }
5564
                break;
5565
            case QEMU_OPTION_incoming:
5566
                incoming = optarg;
5567
                break;
5568
#ifndef _WIN32
5569
            case QEMU_OPTION_chroot:
5570
                chroot_dir = optarg;
5571
                break;
5572
            case QEMU_OPTION_runas:
5573
                run_as = optarg;
5574
                break;
5575
#endif
5576
#ifdef CONFIG_XEN
5577
            case QEMU_OPTION_xen_domid:
5578
                xen_domid = atoi(optarg);
5579
                break;
5580
            case QEMU_OPTION_xen_create:
5581
                xen_mode = XEN_CREATE;
5582
                break;
5583
            case QEMU_OPTION_xen_attach:
5584
                xen_mode = XEN_ATTACH;
5585
                break;
5586
#endif
5587
            }
5588
        }
5589
    }
5590

    
5591
    /* If no data_dir is specified then try to find it relative to the
5592
       executable path.  */
5593
    if (!data_dir) {
5594
        data_dir = find_datadir(argv[0]);
5595
    }
5596
    /* If all else fails use the install patch specified when building.  */
5597
    if (!data_dir) {
5598
        data_dir = CONFIG_QEMU_SHAREDIR;
5599
    }
5600

    
5601
#if defined(CONFIG_KVM) && defined(CONFIG_KQEMU)
5602
    if (kvm_allowed && kqemu_allowed) {
5603
        fprintf(stderr,
5604
                "You can not enable both KVM and kqemu at the same time\n");
5605
        exit(1);
5606
    }
5607
#endif
5608

    
5609
    /*
5610
     * Default to max_cpus = smp_cpus, in case the user doesn't
5611
     * specify a max_cpus value.
5612
     */
5613
    if (!max_cpus)
5614
        max_cpus = smp_cpus;
5615

    
5616
    machine->max_cpus = machine->max_cpus ?: 1; /* Default to UP */
5617
    if (smp_cpus > machine->max_cpus) {
5618
        fprintf(stderr, "Number of SMP cpus requested (%d), exceeds max cpus "
5619
                "supported by machine `%s' (%d)\n", smp_cpus,  machine->name,
5620
                machine->max_cpus);
5621
        exit(1);
5622
    }
5623

    
5624
    if (display_type == DT_NOGRAPHIC) {
5625
       if (serial_device_index == 0)
5626
           serial_devices[0] = "stdio";
5627
       if (parallel_device_index == 0)
5628
           parallel_devices[0] = "null";
5629
       if (strncmp(monitor_device, "vc", 2) == 0)
5630
           monitor_device = "stdio";
5631
    }
5632

    
5633
#ifndef _WIN32
5634
    if (daemonize) {
5635
        pid_t pid;
5636

    
5637
        if (pipe(fds) == -1)
5638
            exit(1);
5639

    
5640
        pid = fork();
5641
        if (pid > 0) {
5642
            uint8_t status;
5643
            ssize_t len;
5644

    
5645
            close(fds[1]);
5646

    
5647
        again:
5648
            len = read(fds[0], &status, 1);
5649
            if (len == -1 && (errno == EINTR))
5650
                goto again;
5651

    
5652
            if (len != 1)
5653
                exit(1);
5654
            else if (status == 1) {
5655
                fprintf(stderr, "Could not acquire pidfile\n");
5656
                exit(1);
5657
            } else
5658
                exit(0);
5659
        } else if (pid < 0)
5660
            exit(1);
5661

    
5662
        setsid();
5663

    
5664
        pid = fork();
5665
        if (pid > 0)
5666
            exit(0);
5667
        else if (pid < 0)
5668
            exit(1);
5669

    
5670
        umask(027);
5671

    
5672
        signal(SIGTSTP, SIG_IGN);
5673
        signal(SIGTTOU, SIG_IGN);
5674
        signal(SIGTTIN, SIG_IGN);
5675
    }
5676

    
5677
    if (pid_file && qemu_create_pidfile(pid_file) != 0) {
5678
        if (daemonize) {
5679
            uint8_t status = 1;
5680
            write(fds[1], &status, 1);
5681
        } else
5682
            fprintf(stderr, "Could not acquire pid file\n");
5683
        exit(1);
5684
    }
5685
#endif
5686

    
5687
#ifdef CONFIG_KQEMU
5688
    if (smp_cpus > 1)
5689
        kqemu_allowed = 0;
5690
#endif
5691
    if (qemu_init_main_loop()) {
5692
        fprintf(stderr, "qemu_init_main_loop failed\n");
5693
        exit(1);
5694
    }
5695
    linux_boot = (kernel_filename != NULL);
5696

    
5697
    if (!linux_boot && *kernel_cmdline != '\0') {
5698
        fprintf(stderr, "-append only allowed with -kernel option\n");
5699
        exit(1);
5700
    }
5701

    
5702
    if (!linux_boot && initrd_filename != NULL) {
5703
        fprintf(stderr, "-initrd only allowed with -kernel option\n");
5704
        exit(1);
5705
    }
5706

    
5707
#ifndef _WIN32
5708
    /* Win32 doesn't support line-buffering and requires size >= 2 */
5709
    setvbuf(stdout, NULL, _IOLBF, 0);
5710
#endif
5711

    
5712
    init_timers();
5713
    if (init_timer_alarm() < 0) {
5714
        fprintf(stderr, "could not initialize alarm timer\n");
5715
        exit(1);
5716
    }
5717
    if (use_icount && icount_time_shift < 0) {
5718
        use_icount = 2;
5719
        /* 125MIPS seems a reasonable initial guess at the guest speed.
5720
           It will be corrected fairly quickly anyway.  */
5721
        icount_time_shift = 3;
5722
        init_icount_adjust();
5723
    }
5724

    
5725
#ifdef _WIN32
5726
    socket_init();
5727
#endif
5728

    
5729
    /* init network clients */
5730
    if (nb_net_clients == 0) {
5731
        /* if no clients, we use a default config */
5732
        net_clients[nb_net_clients++] = "nic";
5733
#ifdef CONFIG_SLIRP
5734
        net_clients[nb_net_clients++] = "user";
5735
#endif
5736
    }
5737

    
5738
    for(i = 0;i < nb_net_clients; i++) {
5739
        if (net_client_parse(net_clients[i]) < 0)
5740
            exit(1);
5741
    }
5742

    
5743
    net_boot = (boot_devices_bitmap >> ('n' - 'a')) & 0xF;
5744
    net_set_boot_mask(net_boot);
5745

    
5746
    net_client_check();
5747

    
5748
    /* init the bluetooth world */
5749
    if (foreach_device_config(DEV_BT, bt_parse))
5750
        exit(1);
5751

    
5752
    /* init the memory */
5753
    if (ram_size == 0)
5754
        ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
5755

    
5756
#ifdef CONFIG_KQEMU
5757
    /* FIXME: This is a nasty hack because kqemu can't cope with dynamic
5758
       guest ram allocation.  It needs to go away.  */
5759
    if (kqemu_allowed) {
5760
        kqemu_phys_ram_size = ram_size + 8 * 1024 * 1024 + 4 * 1024 * 1024;
5761
        kqemu_phys_ram_base = qemu_vmalloc(kqemu_phys_ram_size);
5762
        if (!kqemu_phys_ram_base) {
5763
            fprintf(stderr, "Could not allocate physical memory\n");
5764
            exit(1);
5765
        }
5766
    }
5767
#endif
5768

    
5769
    /* init the dynamic translator */
5770
    cpu_exec_init_all(tb_size * 1024 * 1024);
5771

    
5772
    bdrv_init();
5773

    
5774
    /* we always create the cdrom drive, even if no disk is there */
5775
    drive_add(NULL, CDROM_ALIAS);
5776

    
5777
    /* we always create at least one floppy */
5778
    drive_add(NULL, FD_ALIAS, 0);
5779

    
5780
    /* we always create one sd slot, even if no card is in it */
5781
    drive_add(NULL, SD_ALIAS);
5782

    
5783
    /* open the virtual block devices */
5784
    if (snapshot)
5785
        qemu_opts_foreach(&qemu_drive_opts, drive_enable_snapshot, NULL, 0);
5786
    if (qemu_opts_foreach(&qemu_drive_opts, drive_init_func, machine, 1) != 0)
5787
        exit(1);
5788

    
5789
    register_savevm("timer", 0, 2, timer_save, timer_load, NULL);
5790
    register_savevm_live("ram", 0, 3, ram_save_live, NULL, ram_load, NULL);
5791

    
5792
#ifndef _WIN32
5793
    /* must be after terminal init, SDL library changes signal handlers */
5794
    sighandler_setup();
5795
#endif
5796

    
5797
    /* Maintain compatibility with multiple stdio monitors */
5798
    if (!strcmp(monitor_device,"stdio")) {
5799
        for (i = 0; i < MAX_SERIAL_PORTS; i++) {
5800
            const char *devname = serial_devices[i];
5801
            if (devname && !strcmp(devname,"mon:stdio")) {
5802
                monitor_device = NULL;
5803
                break;
5804
            } else if (devname && !strcmp(devname,"stdio")) {
5805
                monitor_device = NULL;
5806
                serial_devices[i] = "mon:stdio";
5807
                break;
5808
            }
5809
        }
5810
    }
5811

    
5812
    if (nb_numa_nodes > 0) {
5813
        int i;
5814

    
5815
        if (nb_numa_nodes > smp_cpus) {
5816
            nb_numa_nodes = smp_cpus;
5817
        }
5818

    
5819
        /* If no memory size if given for any node, assume the default case
5820
         * and distribute the available memory equally across all nodes
5821
         */
5822
        for (i = 0; i < nb_numa_nodes; i++) {
5823
            if (node_mem[i] != 0)
5824
                break;
5825
        }
5826
        if (i == nb_numa_nodes) {
5827
            uint64_t usedmem = 0;
5828

    
5829
            /* On Linux, the each node's border has to be 8MB aligned,
5830
             * the final node gets the rest.
5831
             */
5832
            for (i = 0; i < nb_numa_nodes - 1; i++) {
5833
                node_mem[i] = (ram_size / nb_numa_nodes) & ~((1 << 23UL) - 1);
5834
                usedmem += node_mem[i];
5835
            }
5836
            node_mem[i] = ram_size - usedmem;
5837
        }
5838

    
5839
        for (i = 0; i < nb_numa_nodes; i++) {
5840
            if (node_cpumask[i] != 0)
5841
                break;
5842
        }
5843
        /* assigning the VCPUs round-robin is easier to implement, guest OSes
5844
         * must cope with this anyway, because there are BIOSes out there in
5845
         * real machines which also use this scheme.
5846
         */
5847
        if (i == nb_numa_nodes) {
5848
            for (i = 0; i < smp_cpus; i++) {
5849
                node_cpumask[i % nb_numa_nodes] |= 1 << i;
5850
            }
5851
        }
5852
    }
5853

    
5854
    if (kvm_enabled()) {
5855
        int ret;
5856

    
5857
        ret = kvm_init(smp_cpus);
5858
        if (ret < 0) {
5859
            fprintf(stderr, "failed to initialize KVM\n");
5860
            exit(1);
5861
        }
5862
    }
5863

    
5864
    if (monitor_device) {
5865
        monitor_hd = qemu_chr_open("monitor", monitor_device, NULL);
5866
        if (!monitor_hd) {
5867
            fprintf(stderr, "qemu: could not open monitor device '%s'\n", monitor_device);
5868
            exit(1);
5869
        }
5870
    }
5871

    
5872
    for(i = 0; i < MAX_SERIAL_PORTS; i++) {
5873
        const char *devname = serial_devices[i];
5874
        if (devname && strcmp(devname, "none")) {
5875
            char label[32];
5876
            snprintf(label, sizeof(label), "serial%d", i);
5877
            serial_hds[i] = qemu_chr_open(label, devname, NULL);
5878
            if (!serial_hds[i]) {
5879
                fprintf(stderr, "qemu: could not open serial device '%s'\n",
5880
                        devname);
5881
                exit(1);
5882
            }
5883
        }
5884
    }
5885

    
5886
    for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
5887
        const char *devname = parallel_devices[i];
5888
        if (devname && strcmp(devname, "none")) {
5889
            char label[32];
5890
            snprintf(label, sizeof(label), "parallel%d", i);
5891
            parallel_hds[i] = qemu_chr_open(label, devname, NULL);
5892
            if (!parallel_hds[i]) {
5893
                fprintf(stderr, "qemu: could not open parallel device '%s'\n",
5894
                        devname);
5895
                exit(1);
5896
            }
5897
        }
5898
    }
5899

    
5900
    for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
5901
        const char *devname = virtio_consoles[i];
5902
        if (devname && strcmp(devname, "none")) {
5903
            char label[32];
5904
            snprintf(label, sizeof(label), "virtcon%d", i);
5905
            virtcon_hds[i] = qemu_chr_open(label, devname, NULL);
5906
            if (!virtcon_hds[i]) {
5907
                fprintf(stderr, "qemu: could not open virtio console '%s'\n",
5908
                        devname);
5909
                exit(1);
5910
            }
5911
        }
5912
    }
5913

    
5914
    module_call_init(MODULE_INIT_DEVICE);
5915

    
5916
    if (machine->compat_props) {
5917
        qdev_prop_register_compat(machine->compat_props);
5918
    }
5919
    machine->init(ram_size, boot_devices,
5920
                  kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
5921

    
5922

    
5923
    for (env = first_cpu; env != NULL; env = env->next_cpu) {
5924
        for (i = 0; i < nb_numa_nodes; i++) {
5925
            if (node_cpumask[i] & (1 << env->cpu_index)) {
5926
                env->numa_node = i;
5927
            }
5928
        }
5929
    }
5930

    
5931
    current_machine = machine;
5932

    
5933
    /* init USB devices */
5934
    if (usb_enabled) {
5935
        foreach_device_config(DEV_USB, usb_parse);
5936
    }
5937

    
5938
    /* init generic devices */
5939
    if (qemu_opts_foreach(&qemu_device_opts, device_init_func, NULL, 1) != 0)
5940
        exit(1);
5941

    
5942
    if (!display_state)
5943
        dumb_display_init();
5944
    /* just use the first displaystate for the moment */
5945
    ds = display_state;
5946

    
5947
    if (display_type == DT_DEFAULT) {
5948
#if defined(CONFIG_SDL) || defined(CONFIG_COCOA)
5949
        display_type = DT_SDL;
5950
#else
5951
        display_type = DT_VNC;
5952
        vnc_display = "localhost:0,to=99";
5953
        show_vnc_port = 1;
5954
#endif
5955
    }
5956
        
5957

    
5958
    switch (display_type) {
5959
    case DT_NOGRAPHIC:
5960
        break;
5961
#if defined(CONFIG_CURSES)
5962
    case DT_CURSES:
5963
        curses_display_init(ds, full_screen);
5964
        break;
5965
#endif
5966
#if defined(CONFIG_SDL)
5967
    case DT_SDL:
5968
        sdl_display_init(ds, full_screen, no_frame);
5969
        break;
5970
#elif defined(CONFIG_COCOA)
5971
    case DT_SDL:
5972
        cocoa_display_init(ds, full_screen);
5973
        break;
5974
#endif
5975
    case DT_VNC:
5976
        vnc_display_init(ds);
5977
        if (vnc_display_open(ds, vnc_display) < 0)
5978
            exit(1);
5979

    
5980
        if (show_vnc_port) {
5981
            printf("VNC server running on `%s'\n", vnc_display_local_addr(ds));
5982
        }
5983
        break;
5984
    default:
5985
        break;
5986
    }
5987
    dpy_resize(ds);
5988

    
5989
    dcl = ds->listeners;
5990
    while (dcl != NULL) {
5991
        if (dcl->dpy_refresh != NULL) {
5992
            ds->gui_timer = qemu_new_timer(rt_clock, gui_update, ds);
5993
            qemu_mod_timer(ds->gui_timer, qemu_get_clock(rt_clock));
5994
        }
5995
        dcl = dcl->next;
5996
    }
5997

    
5998
    if (display_type == DT_NOGRAPHIC || display_type == DT_VNC) {
5999
        nographic_timer = qemu_new_timer(rt_clock, nographic_update, NULL);
6000
        qemu_mod_timer(nographic_timer, qemu_get_clock(rt_clock));
6001
    }
6002

    
6003
    text_consoles_set_display(display_state);
6004
    qemu_chr_initial_reset();
6005

    
6006
    if (monitor_device && monitor_hd)
6007
        monitor_init(monitor_hd, MONITOR_USE_READLINE | MONITOR_IS_DEFAULT);
6008

    
6009
    for(i = 0; i < MAX_SERIAL_PORTS; i++) {
6010
        const char *devname = serial_devices[i];
6011
        if (devname && strcmp(devname, "none")) {
6012
            if (strstart(devname, "vc", 0))
6013
                qemu_chr_printf(serial_hds[i], "serial%d console\r\n", i);
6014
        }
6015
    }
6016

    
6017
    for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
6018
        const char *devname = parallel_devices[i];
6019
        if (devname && strcmp(devname, "none")) {
6020
            if (strstart(devname, "vc", 0))
6021
                qemu_chr_printf(parallel_hds[i], "parallel%d console\r\n", i);
6022
        }
6023
    }
6024

    
6025
    for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
6026
        const char *devname = virtio_consoles[i];
6027
        if (virtcon_hds[i] && devname) {
6028
            if (strstart(devname, "vc", 0))
6029
                qemu_chr_printf(virtcon_hds[i], "virtio console%d\r\n", i);
6030
        }
6031
    }
6032

    
6033
    if (gdbstub_dev && gdbserver_start(gdbstub_dev) < 0) {
6034
        fprintf(stderr, "qemu: could not open gdbserver on device '%s'\n",
6035
                gdbstub_dev);
6036
        exit(1);
6037
    }
6038

    
6039
    if (loadvm)
6040
        do_loadvm(cur_mon, loadvm);
6041

    
6042
    if (incoming) {
6043
        qemu_start_incoming_migration(incoming);
6044
    } else if (autostart) {
6045
        vm_start();
6046
    }
6047

    
6048
#ifndef _WIN32
6049
    if (daemonize) {
6050
        uint8_t status = 0;
6051
        ssize_t len;
6052

    
6053
    again1:
6054
        len = write(fds[1], &status, 1);
6055
        if (len == -1 && (errno == EINTR))
6056
            goto again1;
6057

    
6058
        if (len != 1)
6059
            exit(1);
6060

    
6061
        chdir("/");
6062
        TFR(fd = open("/dev/null", O_RDWR));
6063
        if (fd == -1)
6064
            exit(1);
6065
    }
6066

    
6067
    if (run_as) {
6068
        pwd = getpwnam(run_as);
6069
        if (!pwd) {
6070
            fprintf(stderr, "User \"%s\" doesn't exist\n", run_as);
6071
            exit(1);
6072
        }
6073
    }
6074

    
6075
    if (chroot_dir) {
6076
        if (chroot(chroot_dir) < 0) {
6077
            fprintf(stderr, "chroot failed\n");
6078
            exit(1);
6079
        }
6080
        chdir("/");
6081
    }
6082

    
6083
    if (run_as) {
6084
        if (setgid(pwd->pw_gid) < 0) {
6085
            fprintf(stderr, "Failed to setgid(%d)\n", pwd->pw_gid);
6086
            exit(1);
6087
        }
6088
        if (setuid(pwd->pw_uid) < 0) {
6089
            fprintf(stderr, "Failed to setuid(%d)\n", pwd->pw_uid);
6090
            exit(1);
6091
        }
6092
        if (setuid(0) != -1) {
6093
            fprintf(stderr, "Dropping privileges failed\n");
6094
            exit(1);
6095
        }
6096
    }
6097

    
6098
    if (daemonize) {
6099
        dup2(fd, 0);
6100
        dup2(fd, 1);
6101
        dup2(fd, 2);
6102

    
6103
        close(fd);
6104
    }
6105
#endif
6106

    
6107
    main_loop();
6108
    quit_timers();
6109
    net_cleanup();
6110

    
6111
    return 0;
6112
}