Statistics
| Branch: | Revision:

root / vl.c @ 98b19252

History | View | Annotate | Download (152.1 kB)

1
/*
2
 * QEMU System Emulator
3
 *
4
 * Copyright (c) 2003-2008 Fabrice Bellard
5
 *
6
 * Permission is hereby granted, free of charge, to any person obtaining a copy
7
 * of this software and associated documentation files (the "Software"), to deal
8
 * in the Software without restriction, including without limitation the rights
9
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
 * copies of the Software, and to permit persons to whom the Software is
11
 * furnished to do so, subject to the following conditions:
12
 *
13
 * The above copyright notice and this permission notice shall be included in
14
 * all copies or substantial portions of the Software.
15
 *
16
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
 * THE SOFTWARE.
23
 */
24
#include <unistd.h>
25
#include <fcntl.h>
26
#include <signal.h>
27
#include <time.h>
28
#include <errno.h>
29
#include <sys/time.h>
30
#include <zlib.h>
31

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

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

    
65
/* For the benefit of older linux systems which don't supply it,
66
   we use a local copy of hpet.h. */
67
/* #include <linux/hpet.h> */
68
#include "hpet.h"
69

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

    
94
#if defined(__OpenBSD__)
95
#include <util.h>
96
#endif
97

    
98
#if defined(CONFIG_VDE)
99
#include <libvdeplug.h>
100
#endif
101

    
102
#ifdef _WIN32
103
#include <windows.h>
104
#include <mmsystem.h>
105
#endif
106

    
107
#ifdef CONFIG_SDL
108
#if defined(__APPLE__) || defined(main)
109
#include <SDL.h>
110
int qemu_main(int argc, char **argv, char **envp);
111
int main(int argc, char **argv)
112
{
113
    return qemu_main(argc, argv, NULL);
114
}
115
#undef main
116
#define main qemu_main
117
#endif
118
#endif /* CONFIG_SDL */
119

    
120
#ifdef CONFIG_COCOA
121
#undef main
122
#define main qemu_main
123
#endif /* CONFIG_COCOA */
124

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

    
161
#include "disas.h"
162

    
163
#include "exec-all.h"
164

    
165
#include "qemu_socket.h"
166

    
167
#include "slirp/libslirp.h"
168

    
169
#include "qemu-queue.h"
170

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

    
174
#define DEFAULT_RAM_SIZE 128
175

    
176
#define MAX_VIRTIO_CONSOLES 1
177

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

    
283
static struct {
284
    const char *driver;
285
    int *flag;
286
} default_list[] = {
287
    { .driver = "isa-serial",           .flag = &default_serial    },
288
    { .driver = "isa-parallel",         .flag = &default_parallel  },
289
    { .driver = "isa-fdc",              .flag = &default_floppy    },
290
    { .driver = "ide-drive",            .flag = &default_cdrom     },
291
    { .driver = "virtio-console-pci",   .flag = &default_virtcon   },
292
    { .driver = "virtio-console-s390",  .flag = &default_virtcon   },
293
    { .driver = "VGA",                  .flag = &default_vga       },
294
    { .driver = "cirrus-vga",           .flag = &default_vga       },
295
    { .driver = "vmware-svga",          .flag = &default_vga       },
296
};
297

    
298
static int default_driver_check(QemuOpts *opts, void *opaque)
299
{
300
    const char *driver = qemu_opt_get(opts, "driver");
301
    int i;
302

    
303
    if (!driver)
304
        return 0;
305
    for (i = 0; i < ARRAY_SIZE(default_list); i++) {
306
        if (strcmp(default_list[i].driver, driver) != 0)
307
            continue;
308
        *(default_list[i].flag) = 0;
309
    }
310
    return 0;
311
}
312

    
313
/***********************************************************/
314
/* x86 ISA bus support */
315

    
316
target_phys_addr_t isa_mem_base = 0;
317
PicState2 *isa_pic;
318

    
319
/***********************************************************/
320
void hw_error(const char *fmt, ...)
321
{
322
    va_list ap;
323
    CPUState *env;
324

    
325
    va_start(ap, fmt);
326
    fprintf(stderr, "qemu: hardware error: ");
327
    vfprintf(stderr, fmt, ap);
328
    fprintf(stderr, "\n");
329
    for(env = first_cpu; env != NULL; env = env->next_cpu) {
330
        fprintf(stderr, "CPU #%d:\n", env->cpu_index);
331
#ifdef TARGET_I386
332
        cpu_dump_state(env, stderr, fprintf, X86_DUMP_FPU);
333
#else
334
        cpu_dump_state(env, stderr, fprintf, 0);
335
#endif
336
    }
337
    va_end(ap);
338
    abort();
339
}
340

    
341
static void set_proc_name(const char *s)
342
{
343
#if defined(__linux__) && defined(PR_SET_NAME)
344
    char name[16];
345
    if (!s)
346
        return;
347
    name[sizeof(name) - 1] = 0;
348
    strncpy(name, s, sizeof(name));
349
    /* Could rewrite argv[0] too, but that's a bit more complicated.
350
       This simple way is enough for `top'. */
351
    prctl(PR_SET_NAME, name);
352
#endif            
353
}
354
 
355
/***************/
356
/* ballooning */
357

    
358
static QEMUBalloonEvent *qemu_balloon_event;
359
void *qemu_balloon_event_opaque;
360

    
361
void qemu_add_balloon_handler(QEMUBalloonEvent *func, void *opaque)
362
{
363
    qemu_balloon_event = func;
364
    qemu_balloon_event_opaque = opaque;
365
}
366

    
367
void qemu_balloon(ram_addr_t target)
368
{
369
    if (qemu_balloon_event)
370
        qemu_balloon_event(qemu_balloon_event_opaque, target);
371
}
372

    
373
ram_addr_t qemu_balloon_status(void)
374
{
375
    if (qemu_balloon_event)
376
        return qemu_balloon_event(qemu_balloon_event_opaque, 0);
377
    return 0;
378
}
379

    
380

    
381
/***********************************************************/
382
/* real time host monotonic timer */
383

    
384
/* compute with 96 bit intermediate result: (a*b)/c */
385
uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c)
386
{
387
    union {
388
        uint64_t ll;
389
        struct {
390
#ifdef HOST_WORDS_BIGENDIAN
391
            uint32_t high, low;
392
#else
393
            uint32_t low, high;
394
#endif
395
        } l;
396
    } u, res;
397
    uint64_t rl, rh;
398

    
399
    u.ll = a;
400
    rl = (uint64_t)u.l.low * (uint64_t)b;
401
    rh = (uint64_t)u.l.high * (uint64_t)b;
402
    rh += (rl >> 32);
403
    res.l.high = rh / c;
404
    res.l.low = (((rh % c) << 32) + (rl & 0xffffffff)) / c;
405
    return res.ll;
406
}
407

    
408
static int64_t get_clock_realtime(void)
409
{
410
    struct timeval tv;
411

    
412
    gettimeofday(&tv, NULL);
413
    return tv.tv_sec * 1000000000LL + (tv.tv_usec * 1000);
414
}
415

    
416
#ifdef WIN32
417

    
418
static int64_t clock_freq;
419

    
420
static void init_get_clock(void)
421
{
422
    LARGE_INTEGER freq;
423
    int ret;
424
    ret = QueryPerformanceFrequency(&freq);
425
    if (ret == 0) {
426
        fprintf(stderr, "Could not calibrate ticks\n");
427
        exit(1);
428
    }
429
    clock_freq = freq.QuadPart;
430
}
431

    
432
static int64_t get_clock(void)
433
{
434
    LARGE_INTEGER ti;
435
    QueryPerformanceCounter(&ti);
436
    return muldiv64(ti.QuadPart, get_ticks_per_sec(), clock_freq);
437
}
438

    
439
#else
440

    
441
static int use_rt_clock;
442

    
443
static void init_get_clock(void)
444
{
445
    use_rt_clock = 0;
446
#if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD_version >= 500000) \
447
    || defined(__DragonFly__) || defined(__FreeBSD_kernel__)
448
    {
449
        struct timespec ts;
450
        if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0) {
451
            use_rt_clock = 1;
452
        }
453
    }
454
#endif
455
}
456

    
457
static int64_t get_clock(void)
458
{
459
#if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD_version >= 500000) \
460
        || defined(__DragonFly__) || defined(__FreeBSD_kernel__)
461
    if (use_rt_clock) {
462
        struct timespec ts;
463
        clock_gettime(CLOCK_MONOTONIC, &ts);
464
        return ts.tv_sec * 1000000000LL + ts.tv_nsec;
465
    } else
466
#endif
467
    {
468
        /* XXX: using gettimeofday leads to problems if the date
469
           changes, so it should be avoided. */
470
        return get_clock_realtime();
471
    }
472
}
473
#endif
474

    
475
/* Return the virtual CPU time, based on the instruction counter.  */
476
static int64_t cpu_get_icount(void)
477
{
478
    int64_t icount;
479
    CPUState *env = cpu_single_env;;
480
    icount = qemu_icount;
481
    if (env) {
482
        if (!can_do_io(env))
483
            fprintf(stderr, "Bad clock read\n");
484
        icount -= (env->icount_decr.u16.low + env->icount_extra);
485
    }
486
    return qemu_icount_bias + (icount << icount_time_shift);
487
}
488

    
489
/***********************************************************/
490
/* guest cycle counter */
491

    
492
typedef struct TimersState {
493
    int64_t cpu_ticks_prev;
494
    int64_t cpu_ticks_offset;
495
    int64_t cpu_clock_offset;
496
    int32_t cpu_ticks_enabled;
497
    int64_t dummy;
498
} TimersState;
499

    
500
TimersState timers_state;
501

    
502
/* return the host CPU cycle counter and handle stop/restart */
503
int64_t cpu_get_ticks(void)
504
{
505
    if (use_icount) {
506
        return cpu_get_icount();
507
    }
508
    if (!timers_state.cpu_ticks_enabled) {
509
        return timers_state.cpu_ticks_offset;
510
    } else {
511
        int64_t ticks;
512
        ticks = cpu_get_real_ticks();
513
        if (timers_state.cpu_ticks_prev > ticks) {
514
            /* Note: non increasing ticks may happen if the host uses
515
               software suspend */
516
            timers_state.cpu_ticks_offset += timers_state.cpu_ticks_prev - ticks;
517
        }
518
        timers_state.cpu_ticks_prev = ticks;
519
        return ticks + timers_state.cpu_ticks_offset;
520
    }
521
}
522

    
523
/* return the host CPU monotonic timer and handle stop/restart */
524
static int64_t cpu_get_clock(void)
525
{
526
    int64_t ti;
527
    if (!timers_state.cpu_ticks_enabled) {
528
        return timers_state.cpu_clock_offset;
529
    } else {
530
        ti = get_clock();
531
        return ti + timers_state.cpu_clock_offset;
532
    }
533
}
534

    
535
/* enable cpu_get_ticks() */
536
void cpu_enable_ticks(void)
537
{
538
    if (!timers_state.cpu_ticks_enabled) {
539
        timers_state.cpu_ticks_offset -= cpu_get_real_ticks();
540
        timers_state.cpu_clock_offset -= get_clock();
541
        timers_state.cpu_ticks_enabled = 1;
542
    }
543
}
544

    
545
/* disable cpu_get_ticks() : the clock is stopped. You must not call
546
   cpu_get_ticks() after that.  */
547
void cpu_disable_ticks(void)
548
{
549
    if (timers_state.cpu_ticks_enabled) {
550
        timers_state.cpu_ticks_offset = cpu_get_ticks();
551
        timers_state.cpu_clock_offset = cpu_get_clock();
552
        timers_state.cpu_ticks_enabled = 0;
553
    }
554
}
555

    
556
/***********************************************************/
557
/* timers */
558

    
559
#define QEMU_CLOCK_REALTIME 0
560
#define QEMU_CLOCK_VIRTUAL  1
561
#define QEMU_CLOCK_HOST     2
562

    
563
struct QEMUClock {
564
    int type;
565
    /* XXX: add frequency */
566
};
567

    
568
struct QEMUTimer {
569
    QEMUClock *clock;
570
    int64_t expire_time;
571
    QEMUTimerCB *cb;
572
    void *opaque;
573
    struct QEMUTimer *next;
574
};
575

    
576
struct qemu_alarm_timer {
577
    char const *name;
578
    unsigned int flags;
579

    
580
    int (*start)(struct qemu_alarm_timer *t);
581
    void (*stop)(struct qemu_alarm_timer *t);
582
    void (*rearm)(struct qemu_alarm_timer *t);
583
    void *priv;
584
};
585

    
586
#define ALARM_FLAG_DYNTICKS  0x1
587
#define ALARM_FLAG_EXPIRED   0x2
588

    
589
static inline int alarm_has_dynticks(struct qemu_alarm_timer *t)
590
{
591
    return t && (t->flags & ALARM_FLAG_DYNTICKS);
592
}
593

    
594
static void qemu_rearm_alarm_timer(struct qemu_alarm_timer *t)
595
{
596
    if (!alarm_has_dynticks(t))
597
        return;
598

    
599
    t->rearm(t);
600
}
601

    
602
/* TODO: MIN_TIMER_REARM_US should be optimized */
603
#define MIN_TIMER_REARM_US 250
604

    
605
static struct qemu_alarm_timer *alarm_timer;
606

    
607
#ifdef _WIN32
608

    
609
struct qemu_alarm_win32 {
610
    MMRESULT timerId;
611
    unsigned int period;
612
} alarm_win32_data = {0, -1};
613

    
614
static int win32_start_timer(struct qemu_alarm_timer *t);
615
static void win32_stop_timer(struct qemu_alarm_timer *t);
616
static void win32_rearm_timer(struct qemu_alarm_timer *t);
617

    
618
#else
619

    
620
static int unix_start_timer(struct qemu_alarm_timer *t);
621
static void unix_stop_timer(struct qemu_alarm_timer *t);
622

    
623
#ifdef __linux__
624

    
625
static int dynticks_start_timer(struct qemu_alarm_timer *t);
626
static void dynticks_stop_timer(struct qemu_alarm_timer *t);
627
static void dynticks_rearm_timer(struct qemu_alarm_timer *t);
628

    
629
static int hpet_start_timer(struct qemu_alarm_timer *t);
630
static void hpet_stop_timer(struct qemu_alarm_timer *t);
631

    
632
static int rtc_start_timer(struct qemu_alarm_timer *t);
633
static void rtc_stop_timer(struct qemu_alarm_timer *t);
634

    
635
#endif /* __linux__ */
636

    
637
#endif /* _WIN32 */
638

    
639
/* Correlation between real and virtual time is always going to be
640
   fairly approximate, so ignore small variation.
641
   When the guest is idle real and virtual time will be aligned in
642
   the IO wait loop.  */
643
#define ICOUNT_WOBBLE (get_ticks_per_sec() / 10)
644

    
645
static void icount_adjust(void)
646
{
647
    int64_t cur_time;
648
    int64_t cur_icount;
649
    int64_t delta;
650
    static int64_t last_delta;
651
    /* If the VM is not running, then do nothing.  */
652
    if (!vm_running)
653
        return;
654

    
655
    cur_time = cpu_get_clock();
656
    cur_icount = qemu_get_clock(vm_clock);
657
    delta = cur_icount - cur_time;
658
    /* FIXME: This is a very crude algorithm, somewhat prone to oscillation.  */
659
    if (delta > 0
660
        && last_delta + ICOUNT_WOBBLE < delta * 2
661
        && icount_time_shift > 0) {
662
        /* The guest is getting too far ahead.  Slow time down.  */
663
        icount_time_shift--;
664
    }
665
    if (delta < 0
666
        && last_delta - ICOUNT_WOBBLE > delta * 2
667
        && icount_time_shift < MAX_ICOUNT_SHIFT) {
668
        /* The guest is getting too far behind.  Speed time up.  */
669
        icount_time_shift++;
670
    }
671
    last_delta = delta;
672
    qemu_icount_bias = cur_icount - (qemu_icount << icount_time_shift);
673
}
674

    
675
static void icount_adjust_rt(void * opaque)
676
{
677
    qemu_mod_timer(icount_rt_timer,
678
                   qemu_get_clock(rt_clock) + 1000);
679
    icount_adjust();
680
}
681

    
682
static void icount_adjust_vm(void * opaque)
683
{
684
    qemu_mod_timer(icount_vm_timer,
685
                   qemu_get_clock(vm_clock) + get_ticks_per_sec() / 10);
686
    icount_adjust();
687
}
688

    
689
static void init_icount_adjust(void)
690
{
691
    /* Have both realtime and virtual time triggers for speed adjustment.
692
       The realtime trigger catches emulated time passing too slowly,
693
       the virtual time trigger catches emulated time passing too fast.
694
       Realtime triggers occur even when idle, so use them less frequently
695
       than VM triggers.  */
696
    icount_rt_timer = qemu_new_timer(rt_clock, icount_adjust_rt, NULL);
697
    qemu_mod_timer(icount_rt_timer,
698
                   qemu_get_clock(rt_clock) + 1000);
699
    icount_vm_timer = qemu_new_timer(vm_clock, icount_adjust_vm, NULL);
700
    qemu_mod_timer(icount_vm_timer,
701
                   qemu_get_clock(vm_clock) + get_ticks_per_sec() / 10);
702
}
703

    
704
static struct qemu_alarm_timer alarm_timers[] = {
705
#ifndef _WIN32
706
#ifdef __linux__
707
    {"dynticks", ALARM_FLAG_DYNTICKS, dynticks_start_timer,
708
     dynticks_stop_timer, dynticks_rearm_timer, NULL},
709
    /* HPET - if available - is preferred */
710
    {"hpet", 0, hpet_start_timer, hpet_stop_timer, NULL, NULL},
711
    /* ...otherwise try RTC */
712
    {"rtc", 0, rtc_start_timer, rtc_stop_timer, NULL, NULL},
713
#endif
714
    {"unix", 0, unix_start_timer, unix_stop_timer, NULL, NULL},
715
#else
716
    {"dynticks", ALARM_FLAG_DYNTICKS, win32_start_timer,
717
     win32_stop_timer, win32_rearm_timer, &alarm_win32_data},
718
    {"win32", 0, win32_start_timer,
719
     win32_stop_timer, NULL, &alarm_win32_data},
720
#endif
721
    {NULL, }
722
};
723

    
724
static void show_available_alarms(void)
725
{
726
    int i;
727

    
728
    printf("Available alarm timers, in order of precedence:\n");
729
    for (i = 0; alarm_timers[i].name; i++)
730
        printf("%s\n", alarm_timers[i].name);
731
}
732

    
733
static void configure_alarms(char const *opt)
734
{
735
    int i;
736
    int cur = 0;
737
    int count = ARRAY_SIZE(alarm_timers) - 1;
738
    char *arg;
739
    char *name;
740
    struct qemu_alarm_timer tmp;
741

    
742
    if (!strcmp(opt, "?")) {
743
        show_available_alarms();
744
        exit(0);
745
    }
746

    
747
    arg = qemu_strdup(opt);
748

    
749
    /* Reorder the array */
750
    name = strtok(arg, ",");
751
    while (name) {
752
        for (i = 0; i < count && alarm_timers[i].name; i++) {
753
            if (!strcmp(alarm_timers[i].name, name))
754
                break;
755
        }
756

    
757
        if (i == count) {
758
            fprintf(stderr, "Unknown clock %s\n", name);
759
            goto next;
760
        }
761

    
762
        if (i < cur)
763
            /* Ignore */
764
            goto next;
765

    
766
        /* Swap */
767
        tmp = alarm_timers[i];
768
        alarm_timers[i] = alarm_timers[cur];
769
        alarm_timers[cur] = tmp;
770

    
771
        cur++;
772
next:
773
        name = strtok(NULL, ",");
774
    }
775

    
776
    qemu_free(arg);
777

    
778
    if (cur) {
779
        /* Disable remaining timers */
780
        for (i = cur; i < count; i++)
781
            alarm_timers[i].name = NULL;
782
    } else {
783
        show_available_alarms();
784
        exit(1);
785
    }
786
}
787

    
788
#define QEMU_NUM_CLOCKS 3
789

    
790
QEMUClock *rt_clock;
791
QEMUClock *vm_clock;
792
QEMUClock *host_clock;
793

    
794
static QEMUTimer *active_timers[QEMU_NUM_CLOCKS];
795

    
796
static QEMUClock *qemu_new_clock(int type)
797
{
798
    QEMUClock *clock;
799
    clock = qemu_mallocz(sizeof(QEMUClock));
800
    clock->type = type;
801
    return clock;
802
}
803

    
804
QEMUTimer *qemu_new_timer(QEMUClock *clock, QEMUTimerCB *cb, void *opaque)
805
{
806
    QEMUTimer *ts;
807

    
808
    ts = qemu_mallocz(sizeof(QEMUTimer));
809
    ts->clock = clock;
810
    ts->cb = cb;
811
    ts->opaque = opaque;
812
    return ts;
813
}
814

    
815
void qemu_free_timer(QEMUTimer *ts)
816
{
817
    qemu_free(ts);
818
}
819

    
820
/* stop a timer, but do not dealloc it */
821
void qemu_del_timer(QEMUTimer *ts)
822
{
823
    QEMUTimer **pt, *t;
824

    
825
    /* NOTE: this code must be signal safe because
826
       qemu_timer_expired() can be called from a signal. */
827
    pt = &active_timers[ts->clock->type];
828
    for(;;) {
829
        t = *pt;
830
        if (!t)
831
            break;
832
        if (t == ts) {
833
            *pt = t->next;
834
            break;
835
        }
836
        pt = &t->next;
837
    }
838
}
839

    
840
/* modify the current timer so that it will be fired when current_time
841
   >= expire_time. The corresponding callback will be called. */
842
void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time)
843
{
844
    QEMUTimer **pt, *t;
845

    
846
    qemu_del_timer(ts);
847

    
848
    /* add the timer in the sorted list */
849
    /* NOTE: this code must be signal safe because
850
       qemu_timer_expired() can be called from a signal. */
851
    pt = &active_timers[ts->clock->type];
852
    for(;;) {
853
        t = *pt;
854
        if (!t)
855
            break;
856
        if (t->expire_time > expire_time)
857
            break;
858
        pt = &t->next;
859
    }
860
    ts->expire_time = expire_time;
861
    ts->next = *pt;
862
    *pt = ts;
863

    
864
    /* Rearm if necessary  */
865
    if (pt == &active_timers[ts->clock->type]) {
866
        if ((alarm_timer->flags & ALARM_FLAG_EXPIRED) == 0) {
867
            qemu_rearm_alarm_timer(alarm_timer);
868
        }
869
        /* Interrupt execution to force deadline recalculation.  */
870
        if (use_icount)
871
            qemu_notify_event();
872
    }
873
}
874

    
875
int qemu_timer_pending(QEMUTimer *ts)
876
{
877
    QEMUTimer *t;
878
    for(t = active_timers[ts->clock->type]; t != NULL; t = t->next) {
879
        if (t == ts)
880
            return 1;
881
    }
882
    return 0;
883
}
884

    
885
int qemu_timer_expired(QEMUTimer *timer_head, int64_t current_time)
886
{
887
    if (!timer_head)
888
        return 0;
889
    return (timer_head->expire_time <= current_time);
890
}
891

    
892
static void qemu_run_timers(QEMUTimer **ptimer_head, int64_t current_time)
893
{
894
    QEMUTimer *ts;
895

    
896
    for(;;) {
897
        ts = *ptimer_head;
898
        if (!ts || ts->expire_time > current_time)
899
            break;
900
        /* remove timer from the list before calling the callback */
901
        *ptimer_head = ts->next;
902
        ts->next = NULL;
903

    
904
        /* run the callback (the timer list can be modified) */
905
        ts->cb(ts->opaque);
906
    }
907
}
908

    
909
int64_t qemu_get_clock(QEMUClock *clock)
910
{
911
    switch(clock->type) {
912
    case QEMU_CLOCK_REALTIME:
913
        return get_clock() / 1000000;
914
    default:
915
    case QEMU_CLOCK_VIRTUAL:
916
        if (use_icount) {
917
            return cpu_get_icount();
918
        } else {
919
            return cpu_get_clock();
920
        }
921
    case QEMU_CLOCK_HOST:
922
        return get_clock_realtime();
923
    }
924
}
925

    
926
static void init_clocks(void)
927
{
928
    init_get_clock();
929
    rt_clock = qemu_new_clock(QEMU_CLOCK_REALTIME);
930
    vm_clock = qemu_new_clock(QEMU_CLOCK_VIRTUAL);
931
    host_clock = qemu_new_clock(QEMU_CLOCK_HOST);
932

    
933
    rtc_clock = host_clock;
934
}
935

    
936
/* save a timer */
937
void qemu_put_timer(QEMUFile *f, QEMUTimer *ts)
938
{
939
    uint64_t expire_time;
940

    
941
    if (qemu_timer_pending(ts)) {
942
        expire_time = ts->expire_time;
943
    } else {
944
        expire_time = -1;
945
    }
946
    qemu_put_be64(f, expire_time);
947
}
948

    
949
void qemu_get_timer(QEMUFile *f, QEMUTimer *ts)
950
{
951
    uint64_t expire_time;
952

    
953
    expire_time = qemu_get_be64(f);
954
    if (expire_time != -1) {
955
        qemu_mod_timer(ts, expire_time);
956
    } else {
957
        qemu_del_timer(ts);
958
    }
959
}
960

    
961
static const VMStateDescription vmstate_timers = {
962
    .name = "timer",
963
    .version_id = 2,
964
    .minimum_version_id = 1,
965
    .minimum_version_id_old = 1,
966
    .fields      = (VMStateField []) {
967
        VMSTATE_INT64(cpu_ticks_offset, TimersState),
968
        VMSTATE_INT64(dummy, TimersState),
969
        VMSTATE_INT64_V(cpu_clock_offset, TimersState, 2),
970
        VMSTATE_END_OF_LIST()
971
    }
972
};
973

    
974
static void qemu_event_increment(void);
975

    
976
#ifdef _WIN32
977
static void CALLBACK host_alarm_handler(UINT uTimerID, UINT uMsg,
978
                                        DWORD_PTR dwUser, DWORD_PTR dw1,
979
                                        DWORD_PTR dw2)
980
#else
981
static void host_alarm_handler(int host_signum)
982
#endif
983
{
984
#if 0
985
#define DISP_FREQ 1000
986
    {
987
        static int64_t delta_min = INT64_MAX;
988
        static int64_t delta_max, delta_cum, last_clock, delta, ti;
989
        static int count;
990
        ti = qemu_get_clock(vm_clock);
991
        if (last_clock != 0) {
992
            delta = ti - last_clock;
993
            if (delta < delta_min)
994
                delta_min = delta;
995
            if (delta > delta_max)
996
                delta_max = delta;
997
            delta_cum += delta;
998
            if (++count == DISP_FREQ) {
999
                printf("timer: min=%" PRId64 " us max=%" PRId64 " us avg=%" PRId64 " us avg_freq=%0.3f Hz\n",
1000
                       muldiv64(delta_min, 1000000, get_ticks_per_sec()),
1001
                       muldiv64(delta_max, 1000000, get_ticks_per_sec()),
1002
                       muldiv64(delta_cum, 1000000 / DISP_FREQ, get_ticks_per_sec()),
1003
                       (double)get_ticks_per_sec() / ((double)delta_cum / DISP_FREQ));
1004
                count = 0;
1005
                delta_min = INT64_MAX;
1006
                delta_max = 0;
1007
                delta_cum = 0;
1008
            }
1009
        }
1010
        last_clock = ti;
1011
    }
1012
#endif
1013
    if (alarm_has_dynticks(alarm_timer) ||
1014
        (!use_icount &&
1015
            qemu_timer_expired(active_timers[QEMU_CLOCK_VIRTUAL],
1016
                               qemu_get_clock(vm_clock))) ||
1017
        qemu_timer_expired(active_timers[QEMU_CLOCK_REALTIME],
1018
                           qemu_get_clock(rt_clock)) ||
1019
        qemu_timer_expired(active_timers[QEMU_CLOCK_HOST],
1020
                           qemu_get_clock(host_clock))) {
1021
        qemu_event_increment();
1022
        if (alarm_timer) alarm_timer->flags |= ALARM_FLAG_EXPIRED;
1023

    
1024
#ifndef CONFIG_IOTHREAD
1025
        if (next_cpu) {
1026
            /* stop the currently executing cpu because a timer occured */
1027
            cpu_exit(next_cpu);
1028
        }
1029
#endif
1030
        timer_alarm_pending = 1;
1031
        qemu_notify_event();
1032
    }
1033
}
1034

    
1035
static int64_t qemu_next_deadline(void)
1036
{
1037
    /* To avoid problems with overflow limit this to 2^32.  */
1038
    int64_t delta = INT32_MAX;
1039

    
1040
    if (active_timers[QEMU_CLOCK_VIRTUAL]) {
1041
        delta = active_timers[QEMU_CLOCK_VIRTUAL]->expire_time -
1042
                     qemu_get_clock(vm_clock);
1043
    }
1044
    if (active_timers[QEMU_CLOCK_HOST]) {
1045
        int64_t hdelta = active_timers[QEMU_CLOCK_HOST]->expire_time -
1046
                 qemu_get_clock(host_clock);
1047
        if (hdelta < delta)
1048
            delta = hdelta;
1049
    }
1050

    
1051
    if (delta < 0)
1052
        delta = 0;
1053

    
1054
    return delta;
1055
}
1056

    
1057
#if defined(__linux__)
1058
static uint64_t qemu_next_deadline_dyntick(void)
1059
{
1060
    int64_t delta;
1061
    int64_t rtdelta;
1062

    
1063
    if (use_icount)
1064
        delta = INT32_MAX;
1065
    else
1066
        delta = (qemu_next_deadline() + 999) / 1000;
1067

    
1068
    if (active_timers[QEMU_CLOCK_REALTIME]) {
1069
        rtdelta = (active_timers[QEMU_CLOCK_REALTIME]->expire_time -
1070
                 qemu_get_clock(rt_clock))*1000;
1071
        if (rtdelta < delta)
1072
            delta = rtdelta;
1073
    }
1074

    
1075
    if (delta < MIN_TIMER_REARM_US)
1076
        delta = MIN_TIMER_REARM_US;
1077

    
1078
    return delta;
1079
}
1080
#endif
1081

    
1082
#ifndef _WIN32
1083

    
1084
/* Sets a specific flag */
1085
static int fcntl_setfl(int fd, int flag)
1086
{
1087
    int flags;
1088

    
1089
    flags = fcntl(fd, F_GETFL);
1090
    if (flags == -1)
1091
        return -errno;
1092

    
1093
    if (fcntl(fd, F_SETFL, flags | flag) == -1)
1094
        return -errno;
1095

    
1096
    return 0;
1097
}
1098

    
1099
#if defined(__linux__)
1100

    
1101
#define RTC_FREQ 1024
1102

    
1103
static void enable_sigio_timer(int fd)
1104
{
1105
    struct sigaction act;
1106

    
1107
    /* timer signal */
1108
    sigfillset(&act.sa_mask);
1109
    act.sa_flags = 0;
1110
    act.sa_handler = host_alarm_handler;
1111

    
1112
    sigaction(SIGIO, &act, NULL);
1113
    fcntl_setfl(fd, O_ASYNC);
1114
    fcntl(fd, F_SETOWN, getpid());
1115
}
1116

    
1117
static int hpet_start_timer(struct qemu_alarm_timer *t)
1118
{
1119
    struct hpet_info info;
1120
    int r, fd;
1121

    
1122
    fd = qemu_open("/dev/hpet", O_RDONLY);
1123
    if (fd < 0)
1124
        return -1;
1125

    
1126
    /* Set frequency */
1127
    r = ioctl(fd, HPET_IRQFREQ, RTC_FREQ);
1128
    if (r < 0) {
1129
        fprintf(stderr, "Could not configure '/dev/hpet' to have a 1024Hz timer. This is not a fatal\n"
1130
                "error, but for better emulation accuracy type:\n"
1131
                "'echo 1024 > /proc/sys/dev/hpet/max-user-freq' as root.\n");
1132
        goto fail;
1133
    }
1134

    
1135
    /* Check capabilities */
1136
    r = ioctl(fd, HPET_INFO, &info);
1137
    if (r < 0)
1138
        goto fail;
1139

    
1140
    /* Enable periodic mode */
1141
    r = ioctl(fd, HPET_EPI, 0);
1142
    if (info.hi_flags && (r < 0))
1143
        goto fail;
1144

    
1145
    /* Enable interrupt */
1146
    r = ioctl(fd, HPET_IE_ON, 0);
1147
    if (r < 0)
1148
        goto fail;
1149

    
1150
    enable_sigio_timer(fd);
1151
    t->priv = (void *)(long)fd;
1152

    
1153
    return 0;
1154
fail:
1155
    close(fd);
1156
    return -1;
1157
}
1158

    
1159
static void hpet_stop_timer(struct qemu_alarm_timer *t)
1160
{
1161
    int fd = (long)t->priv;
1162

    
1163
    close(fd);
1164
}
1165

    
1166
static int rtc_start_timer(struct qemu_alarm_timer *t)
1167
{
1168
    int rtc_fd;
1169
    unsigned long current_rtc_freq = 0;
1170

    
1171
    TFR(rtc_fd = qemu_open("/dev/rtc", O_RDONLY));
1172
    if (rtc_fd < 0)
1173
        return -1;
1174
    ioctl(rtc_fd, RTC_IRQP_READ, &current_rtc_freq);
1175
    if (current_rtc_freq != RTC_FREQ &&
1176
        ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
1177
        fprintf(stderr, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n"
1178
                "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n"
1179
                "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n");
1180
        goto fail;
1181
    }
1182
    if (ioctl(rtc_fd, RTC_PIE_ON, 0) < 0) {
1183
    fail:
1184
        close(rtc_fd);
1185
        return -1;
1186
    }
1187

    
1188
    enable_sigio_timer(rtc_fd);
1189

    
1190
    t->priv = (void *)(long)rtc_fd;
1191

    
1192
    return 0;
1193
}
1194

    
1195
static void rtc_stop_timer(struct qemu_alarm_timer *t)
1196
{
1197
    int rtc_fd = (long)t->priv;
1198

    
1199
    close(rtc_fd);
1200
}
1201

    
1202
static int dynticks_start_timer(struct qemu_alarm_timer *t)
1203
{
1204
    struct sigevent ev;
1205
    timer_t host_timer;
1206
    struct sigaction act;
1207

    
1208
    sigfillset(&act.sa_mask);
1209
    act.sa_flags = 0;
1210
    act.sa_handler = host_alarm_handler;
1211

    
1212
    sigaction(SIGALRM, &act, NULL);
1213

    
1214
    /* 
1215
     * Initialize ev struct to 0 to avoid valgrind complaining
1216
     * about uninitialized data in timer_create call
1217
     */
1218
    memset(&ev, 0, sizeof(ev));
1219
    ev.sigev_value.sival_int = 0;
1220
    ev.sigev_notify = SIGEV_SIGNAL;
1221
    ev.sigev_signo = SIGALRM;
1222

    
1223
    if (timer_create(CLOCK_REALTIME, &ev, &host_timer)) {
1224
        perror("timer_create");
1225

    
1226
        /* disable dynticks */
1227
        fprintf(stderr, "Dynamic Ticks disabled\n");
1228

    
1229
        return -1;
1230
    }
1231

    
1232
    t->priv = (void *)(long)host_timer;
1233

    
1234
    return 0;
1235
}
1236

    
1237
static void dynticks_stop_timer(struct qemu_alarm_timer *t)
1238
{
1239
    timer_t host_timer = (timer_t)(long)t->priv;
1240

    
1241
    timer_delete(host_timer);
1242
}
1243

    
1244
static void dynticks_rearm_timer(struct qemu_alarm_timer *t)
1245
{
1246
    timer_t host_timer = (timer_t)(long)t->priv;
1247
    struct itimerspec timeout;
1248
    int64_t nearest_delta_us = INT64_MAX;
1249
    int64_t current_us;
1250

    
1251
    if (!active_timers[QEMU_CLOCK_REALTIME] &&
1252
        !active_timers[QEMU_CLOCK_VIRTUAL] &&
1253
        !active_timers[QEMU_CLOCK_HOST])
1254
        return;
1255

    
1256
    nearest_delta_us = qemu_next_deadline_dyntick();
1257

    
1258
    /* check whether a timer is already running */
1259
    if (timer_gettime(host_timer, &timeout)) {
1260
        perror("gettime");
1261
        fprintf(stderr, "Internal timer error: aborting\n");
1262
        exit(1);
1263
    }
1264
    current_us = timeout.it_value.tv_sec * 1000000 + timeout.it_value.tv_nsec/1000;
1265
    if (current_us && current_us <= nearest_delta_us)
1266
        return;
1267

    
1268
    timeout.it_interval.tv_sec = 0;
1269
    timeout.it_interval.tv_nsec = 0; /* 0 for one-shot timer */
1270
    timeout.it_value.tv_sec =  nearest_delta_us / 1000000;
1271
    timeout.it_value.tv_nsec = (nearest_delta_us % 1000000) * 1000;
1272
    if (timer_settime(host_timer, 0 /* RELATIVE */, &timeout, NULL)) {
1273
        perror("settime");
1274
        fprintf(stderr, "Internal timer error: aborting\n");
1275
        exit(1);
1276
    }
1277
}
1278

    
1279
#endif /* defined(__linux__) */
1280

    
1281
static int unix_start_timer(struct qemu_alarm_timer *t)
1282
{
1283
    struct sigaction act;
1284
    struct itimerval itv;
1285
    int err;
1286

    
1287
    /* timer signal */
1288
    sigfillset(&act.sa_mask);
1289
    act.sa_flags = 0;
1290
    act.sa_handler = host_alarm_handler;
1291

    
1292
    sigaction(SIGALRM, &act, NULL);
1293

    
1294
    itv.it_interval.tv_sec = 0;
1295
    /* for i386 kernel 2.6 to get 1 ms */
1296
    itv.it_interval.tv_usec = 999;
1297
    itv.it_value.tv_sec = 0;
1298
    itv.it_value.tv_usec = 10 * 1000;
1299

    
1300
    err = setitimer(ITIMER_REAL, &itv, NULL);
1301
    if (err)
1302
        return -1;
1303

    
1304
    return 0;
1305
}
1306

    
1307
static void unix_stop_timer(struct qemu_alarm_timer *t)
1308
{
1309
    struct itimerval itv;
1310

    
1311
    memset(&itv, 0, sizeof(itv));
1312
    setitimer(ITIMER_REAL, &itv, NULL);
1313
}
1314

    
1315
#endif /* !defined(_WIN32) */
1316

    
1317

    
1318
#ifdef _WIN32
1319

    
1320
static int win32_start_timer(struct qemu_alarm_timer *t)
1321
{
1322
    TIMECAPS tc;
1323
    struct qemu_alarm_win32 *data = t->priv;
1324
    UINT flags;
1325

    
1326
    memset(&tc, 0, sizeof(tc));
1327
    timeGetDevCaps(&tc, sizeof(tc));
1328

    
1329
    if (data->period < tc.wPeriodMin)
1330
        data->period = tc.wPeriodMin;
1331

    
1332
    timeBeginPeriod(data->period);
1333

    
1334
    flags = TIME_CALLBACK_FUNCTION;
1335
    if (alarm_has_dynticks(t))
1336
        flags |= TIME_ONESHOT;
1337
    else
1338
        flags |= TIME_PERIODIC;
1339

    
1340
    data->timerId = timeSetEvent(1,         // interval (ms)
1341
                        data->period,       // resolution
1342
                        host_alarm_handler, // function
1343
                        (DWORD)t,           // parameter
1344
                        flags);
1345

    
1346
    if (!data->timerId) {
1347
        fprintf(stderr, "Failed to initialize win32 alarm timer: %ld\n",
1348
                GetLastError());
1349
        timeEndPeriod(data->period);
1350
        return -1;
1351
    }
1352

    
1353
    return 0;
1354
}
1355

    
1356
static void win32_stop_timer(struct qemu_alarm_timer *t)
1357
{
1358
    struct qemu_alarm_win32 *data = t->priv;
1359

    
1360
    timeKillEvent(data->timerId);
1361
    timeEndPeriod(data->period);
1362
}
1363

    
1364
static void win32_rearm_timer(struct qemu_alarm_timer *t)
1365
{
1366
    struct qemu_alarm_win32 *data = t->priv;
1367

    
1368
    if (!active_timers[QEMU_CLOCK_REALTIME] &&
1369
        !active_timers[QEMU_CLOCK_VIRTUAL] &&
1370
        !active_timers[QEMU_CLOCK_HOST])
1371
        return;
1372

    
1373
    timeKillEvent(data->timerId);
1374

    
1375
    data->timerId = timeSetEvent(1,
1376
                        data->period,
1377
                        host_alarm_handler,
1378
                        (DWORD)t,
1379
                        TIME_ONESHOT | TIME_PERIODIC);
1380

    
1381
    if (!data->timerId) {
1382
        fprintf(stderr, "Failed to re-arm win32 alarm timer %ld\n",
1383
                GetLastError());
1384

    
1385
        timeEndPeriod(data->period);
1386
        exit(1);
1387
    }
1388
}
1389

    
1390
#endif /* _WIN32 */
1391

    
1392
static int init_timer_alarm(void)
1393
{
1394
    struct qemu_alarm_timer *t = NULL;
1395
    int i, err = -1;
1396

    
1397
    for (i = 0; alarm_timers[i].name; i++) {
1398
        t = &alarm_timers[i];
1399

    
1400
        err = t->start(t);
1401
        if (!err)
1402
            break;
1403
    }
1404

    
1405
    if (err) {
1406
        err = -ENOENT;
1407
        goto fail;
1408
    }
1409

    
1410
    alarm_timer = t;
1411

    
1412
    return 0;
1413

    
1414
fail:
1415
    return err;
1416
}
1417

    
1418
static void quit_timers(void)
1419
{
1420
    alarm_timer->stop(alarm_timer);
1421
    alarm_timer = NULL;
1422
}
1423

    
1424
/***********************************************************/
1425
/* host time/date access */
1426
void qemu_get_timedate(struct tm *tm, int offset)
1427
{
1428
    time_t ti;
1429
    struct tm *ret;
1430

    
1431
    time(&ti);
1432
    ti += offset;
1433
    if (rtc_date_offset == -1) {
1434
        if (rtc_utc)
1435
            ret = gmtime(&ti);
1436
        else
1437
            ret = localtime(&ti);
1438
    } else {
1439
        ti -= rtc_date_offset;
1440
        ret = gmtime(&ti);
1441
    }
1442

    
1443
    memcpy(tm, ret, sizeof(struct tm));
1444
}
1445

    
1446
int qemu_timedate_diff(struct tm *tm)
1447
{
1448
    time_t seconds;
1449

    
1450
    if (rtc_date_offset == -1)
1451
        if (rtc_utc)
1452
            seconds = mktimegm(tm);
1453
        else
1454
            seconds = mktime(tm);
1455
    else
1456
        seconds = mktimegm(tm) + rtc_date_offset;
1457

    
1458
    return seconds - time(NULL);
1459
}
1460

    
1461
static void configure_rtc_date_offset(const char *startdate, int legacy)
1462
{
1463
    time_t rtc_start_date;
1464
    struct tm tm;
1465

    
1466
    if (!strcmp(startdate, "now") && legacy) {
1467
        rtc_date_offset = -1;
1468
    } else {
1469
        if (sscanf(startdate, "%d-%d-%dT%d:%d:%d",
1470
                   &tm.tm_year,
1471
                   &tm.tm_mon,
1472
                   &tm.tm_mday,
1473
                   &tm.tm_hour,
1474
                   &tm.tm_min,
1475
                   &tm.tm_sec) == 6) {
1476
            /* OK */
1477
        } else if (sscanf(startdate, "%d-%d-%d",
1478
                          &tm.tm_year,
1479
                          &tm.tm_mon,
1480
                          &tm.tm_mday) == 3) {
1481
            tm.tm_hour = 0;
1482
            tm.tm_min = 0;
1483
            tm.tm_sec = 0;
1484
        } else {
1485
            goto date_fail;
1486
        }
1487
        tm.tm_year -= 1900;
1488
        tm.tm_mon--;
1489
        rtc_start_date = mktimegm(&tm);
1490
        if (rtc_start_date == -1) {
1491
        date_fail:
1492
            fprintf(stderr, "Invalid date format. Valid formats are:\n"
1493
                            "'2006-06-17T16:01:21' or '2006-06-17'\n");
1494
            exit(1);
1495
        }
1496
        rtc_date_offset = time(NULL) - rtc_start_date;
1497
    }
1498
}
1499

    
1500
static void configure_rtc(QemuOpts *opts)
1501
{
1502
    const char *value;
1503

    
1504
    value = qemu_opt_get(opts, "base");
1505
    if (value) {
1506
        if (!strcmp(value, "utc")) {
1507
            rtc_utc = 1;
1508
        } else if (!strcmp(value, "localtime")) {
1509
            rtc_utc = 0;
1510
        } else {
1511
            configure_rtc_date_offset(value, 0);
1512
        }
1513
    }
1514
    value = qemu_opt_get(opts, "clock");
1515
    if (value) {
1516
        if (!strcmp(value, "host")) {
1517
            rtc_clock = host_clock;
1518
        } else if (!strcmp(value, "vm")) {
1519
            rtc_clock = vm_clock;
1520
        } else {
1521
            fprintf(stderr, "qemu: invalid option value '%s'\n", value);
1522
            exit(1);
1523
        }
1524
    }
1525
#ifdef CONFIG_TARGET_I386
1526
    value = qemu_opt_get(opts, "driftfix");
1527
    if (value) {
1528
        if (!strcmp(buf, "slew")) {
1529
            rtc_td_hack = 1;
1530
        } else if (!strcmp(buf, "none")) {
1531
            rtc_td_hack = 0;
1532
        } else {
1533
            fprintf(stderr, "qemu: invalid option value '%s'\n", value);
1534
            exit(1);
1535
        }
1536
    }
1537
#endif
1538
}
1539

    
1540
#ifdef _WIN32
1541
static void socket_cleanup(void)
1542
{
1543
    WSACleanup();
1544
}
1545

    
1546
static int socket_init(void)
1547
{
1548
    WSADATA Data;
1549
    int ret, err;
1550

    
1551
    ret = WSAStartup(MAKEWORD(2,2), &Data);
1552
    if (ret != 0) {
1553
        err = WSAGetLastError();
1554
        fprintf(stderr, "WSAStartup: %d\n", err);
1555
        return -1;
1556
    }
1557
    atexit(socket_cleanup);
1558
    return 0;
1559
}
1560
#endif
1561

    
1562
/***********************************************************/
1563
/* Bluetooth support */
1564
static int nb_hcis;
1565
static int cur_hci;
1566
static struct HCIInfo *hci_table[MAX_NICS];
1567

    
1568
static struct bt_vlan_s {
1569
    struct bt_scatternet_s net;
1570
    int id;
1571
    struct bt_vlan_s *next;
1572
} *first_bt_vlan;
1573

    
1574
/* find or alloc a new bluetooth "VLAN" */
1575
static struct bt_scatternet_s *qemu_find_bt_vlan(int id)
1576
{
1577
    struct bt_vlan_s **pvlan, *vlan;
1578
    for (vlan = first_bt_vlan; vlan != NULL; vlan = vlan->next) {
1579
        if (vlan->id == id)
1580
            return &vlan->net;
1581
    }
1582
    vlan = qemu_mallocz(sizeof(struct bt_vlan_s));
1583
    vlan->id = id;
1584
    pvlan = &first_bt_vlan;
1585
    while (*pvlan != NULL)
1586
        pvlan = &(*pvlan)->next;
1587
    *pvlan = vlan;
1588
    return &vlan->net;
1589
}
1590

    
1591
static void null_hci_send(struct HCIInfo *hci, const uint8_t *data, int len)
1592
{
1593
}
1594

    
1595
static int null_hci_addr_set(struct HCIInfo *hci, const uint8_t *bd_addr)
1596
{
1597
    return -ENOTSUP;
1598
}
1599

    
1600
static struct HCIInfo null_hci = {
1601
    .cmd_send = null_hci_send,
1602
    .sco_send = null_hci_send,
1603
    .acl_send = null_hci_send,
1604
    .bdaddr_set = null_hci_addr_set,
1605
};
1606

    
1607
struct HCIInfo *qemu_next_hci(void)
1608
{
1609
    if (cur_hci == nb_hcis)
1610
        return &null_hci;
1611

    
1612
    return hci_table[cur_hci++];
1613
}
1614

    
1615
static struct HCIInfo *hci_init(const char *str)
1616
{
1617
    char *endp;
1618
    struct bt_scatternet_s *vlan = 0;
1619

    
1620
    if (!strcmp(str, "null"))
1621
        /* null */
1622
        return &null_hci;
1623
    else if (!strncmp(str, "host", 4) && (str[4] == '\0' || str[4] == ':'))
1624
        /* host[:hciN] */
1625
        return bt_host_hci(str[4] ? str + 5 : "hci0");
1626
    else if (!strncmp(str, "hci", 3)) {
1627
        /* hci[,vlan=n] */
1628
        if (str[3]) {
1629
            if (!strncmp(str + 3, ",vlan=", 6)) {
1630
                vlan = qemu_find_bt_vlan(strtol(str + 9, &endp, 0));
1631
                if (*endp)
1632
                    vlan = 0;
1633
            }
1634
        } else
1635
            vlan = qemu_find_bt_vlan(0);
1636
        if (vlan)
1637
           return bt_new_hci(vlan);
1638
    }
1639

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

    
1642
    return 0;
1643
}
1644

    
1645
static int bt_hci_parse(const char *str)
1646
{
1647
    struct HCIInfo *hci;
1648
    bdaddr_t bdaddr;
1649

    
1650
    if (nb_hcis >= MAX_NICS) {
1651
        fprintf(stderr, "qemu: Too many bluetooth HCIs (max %i).\n", MAX_NICS);
1652
        return -1;
1653
    }
1654

    
1655
    hci = hci_init(str);
1656
    if (!hci)
1657
        return -1;
1658

    
1659
    bdaddr.b[0] = 0x52;
1660
    bdaddr.b[1] = 0x54;
1661
    bdaddr.b[2] = 0x00;
1662
    bdaddr.b[3] = 0x12;
1663
    bdaddr.b[4] = 0x34;
1664
    bdaddr.b[5] = 0x56 + nb_hcis;
1665
    hci->bdaddr_set(hci, bdaddr.b);
1666

    
1667
    hci_table[nb_hcis++] = hci;
1668

    
1669
    return 0;
1670
}
1671

    
1672
static void bt_vhci_add(int vlan_id)
1673
{
1674
    struct bt_scatternet_s *vlan = qemu_find_bt_vlan(vlan_id);
1675

    
1676
    if (!vlan->slave)
1677
        fprintf(stderr, "qemu: warning: adding a VHCI to "
1678
                        "an empty scatternet %i\n", vlan_id);
1679

    
1680
    bt_vhci_init(bt_new_hci(vlan));
1681
}
1682

    
1683
static struct bt_device_s *bt_device_add(const char *opt)
1684
{
1685
    struct bt_scatternet_s *vlan;
1686
    int vlan_id = 0;
1687
    char *endp = strstr(opt, ",vlan=");
1688
    int len = (endp ? endp - opt : strlen(opt)) + 1;
1689
    char devname[10];
1690

    
1691
    pstrcpy(devname, MIN(sizeof(devname), len), opt);
1692

    
1693
    if (endp) {
1694
        vlan_id = strtol(endp + 6, &endp, 0);
1695
        if (*endp) {
1696
            fprintf(stderr, "qemu: unrecognised bluetooth vlan Id\n");
1697
            return 0;
1698
        }
1699
    }
1700

    
1701
    vlan = qemu_find_bt_vlan(vlan_id);
1702

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

    
1707
    if (!strcmp(devname, "keyboard"))
1708
        return bt_keyboard_init(vlan);
1709

    
1710
    fprintf(stderr, "qemu: unsupported bluetooth device `%s'\n", devname);
1711
    return 0;
1712
}
1713

    
1714
static int bt_parse(const char *opt)
1715
{
1716
    const char *endp, *p;
1717
    int vlan;
1718

    
1719
    if (strstart(opt, "hci", &endp)) {
1720
        if (!*endp || *endp == ',') {
1721
            if (*endp)
1722
                if (!strstart(endp, ",vlan=", 0))
1723
                    opt = endp + 1;
1724

    
1725
            return bt_hci_parse(opt);
1726
       }
1727
    } else if (strstart(opt, "vhci", &endp)) {
1728
        if (!*endp || *endp == ',') {
1729
            if (*endp) {
1730
                if (strstart(endp, ",vlan=", &p)) {
1731
                    vlan = strtol(p, (char **) &endp, 0);
1732
                    if (*endp) {
1733
                        fprintf(stderr, "qemu: bad scatternet '%s'\n", p);
1734
                        return 1;
1735
                    }
1736
                } else {
1737
                    fprintf(stderr, "qemu: bad parameter '%s'\n", endp + 1);
1738
                    return 1;
1739
                }
1740
            } else
1741
                vlan = 0;
1742

    
1743
            bt_vhci_add(vlan);
1744
            return 0;
1745
        }
1746
    } else if (strstart(opt, "device:", &endp))
1747
        return !bt_device_add(endp);
1748

    
1749
    fprintf(stderr, "qemu: bad bluetooth parameter '%s'\n", opt);
1750
    return 1;
1751
}
1752

    
1753
/***********************************************************/
1754
/* QEMU Block devices */
1755

    
1756
#define HD_ALIAS "index=%d,media=disk"
1757
#define CDROM_ALIAS "index=2,media=cdrom"
1758
#define FD_ALIAS "index=%d,if=floppy"
1759
#define PFLASH_ALIAS "if=pflash"
1760
#define MTD_ALIAS "if=mtd"
1761
#define SD_ALIAS "index=0,if=sd"
1762

    
1763
QemuOpts *drive_add(const char *file, const char *fmt, ...)
1764
{
1765
    va_list ap;
1766
    char optstr[1024];
1767
    QemuOpts *opts;
1768

    
1769
    va_start(ap, fmt);
1770
    vsnprintf(optstr, sizeof(optstr), fmt, ap);
1771
    va_end(ap);
1772

    
1773
    opts = qemu_opts_parse(&qemu_drive_opts, optstr, NULL);
1774
    if (!opts) {
1775
        fprintf(stderr, "%s: huh? duplicate? (%s)\n",
1776
                __FUNCTION__, optstr);
1777
        return NULL;
1778
    }
1779
    if (file)
1780
        qemu_opt_set(opts, "file", file);
1781
    return opts;
1782
}
1783

    
1784
DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit)
1785
{
1786
    DriveInfo *dinfo;
1787

    
1788
    /* seek interface, bus and unit */
1789

    
1790
    QTAILQ_FOREACH(dinfo, &drives, next) {
1791
        if (dinfo->type == type &&
1792
            dinfo->bus == bus &&
1793
            dinfo->unit == unit)
1794
            return dinfo;
1795
    }
1796

    
1797
    return NULL;
1798
}
1799

    
1800
DriveInfo *drive_get_by_id(const char *id)
1801
{
1802
    DriveInfo *dinfo;
1803

    
1804
    QTAILQ_FOREACH(dinfo, &drives, next) {
1805
        if (strcmp(id, dinfo->id))
1806
            continue;
1807
        return dinfo;
1808
    }
1809
    return NULL;
1810
}
1811

    
1812
int drive_get_max_bus(BlockInterfaceType type)
1813
{
1814
    int max_bus;
1815
    DriveInfo *dinfo;
1816

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

    
1826
const char *drive_get_serial(BlockDriverState *bdrv)
1827
{
1828
    DriveInfo *dinfo;
1829

    
1830
    QTAILQ_FOREACH(dinfo, &drives, next) {
1831
        if (dinfo->bdrv == bdrv)
1832
            return dinfo->serial;
1833
    }
1834

    
1835
    return "\0";
1836
}
1837

    
1838
BlockInterfaceErrorAction drive_get_on_error(
1839
    BlockDriverState *bdrv, int is_read)
1840
{
1841
    DriveInfo *dinfo;
1842

    
1843
    QTAILQ_FOREACH(dinfo, &drives, next) {
1844
        if (dinfo->bdrv == bdrv)
1845
            return is_read ? dinfo->on_read_error : dinfo->on_write_error;
1846
    }
1847

    
1848
    return is_read ? BLOCK_ERR_REPORT : BLOCK_ERR_STOP_ENOSPC;
1849
}
1850

    
1851
static void bdrv_format_print(void *opaque, const char *name)
1852
{
1853
    fprintf(stderr, " %s", name);
1854
}
1855

    
1856
void drive_uninit(DriveInfo *dinfo)
1857
{
1858
    qemu_opts_del(dinfo->opts);
1859
    bdrv_delete(dinfo->bdrv);
1860
    QTAILQ_REMOVE(&drives, dinfo, next);
1861
    qemu_free(dinfo);
1862
}
1863

    
1864
static int parse_block_error_action(const char *buf, int is_read)
1865
{
1866
    if (!strcmp(buf, "ignore")) {
1867
        return BLOCK_ERR_IGNORE;
1868
    } else if (!is_read && !strcmp(buf, "enospc")) {
1869
        return BLOCK_ERR_STOP_ENOSPC;
1870
    } else if (!strcmp(buf, "stop")) {
1871
        return BLOCK_ERR_STOP_ANY;
1872
    } else if (!strcmp(buf, "report")) {
1873
        return BLOCK_ERR_REPORT;
1874
    } else {
1875
        fprintf(stderr, "qemu: '%s' invalid %s error action\n",
1876
            buf, is_read ? "read" : "write");
1877
        return -1;
1878
    }
1879
}
1880

    
1881
DriveInfo *drive_init(QemuOpts *opts, void *opaque,
1882
                      int *fatal_error)
1883
{
1884
    const char *buf;
1885
    const char *file = NULL;
1886
    char devname[128];
1887
    const char *serial;
1888
    const char *mediastr = "";
1889
    BlockInterfaceType type;
1890
    enum { MEDIA_DISK, MEDIA_CDROM } media;
1891
    int bus_id, unit_id;
1892
    int cyls, heads, secs, translation;
1893
    BlockDriver *drv = NULL;
1894
    QEMUMachine *machine = opaque;
1895
    int max_devs;
1896
    int index;
1897
    int cache;
1898
    int aio = 0;
1899
    int ro = 0;
1900
    int bdrv_flags;
1901
    int on_read_error, on_write_error;
1902
    const char *devaddr;
1903
    DriveInfo *dinfo;
1904
    int snapshot = 0;
1905

    
1906
    *fatal_error = 1;
1907

    
1908
    translation = BIOS_ATA_TRANSLATION_AUTO;
1909
    cache = 1;
1910

    
1911
    if (machine && machine->use_scsi) {
1912
        type = IF_SCSI;
1913
        max_devs = MAX_SCSI_DEVS;
1914
        pstrcpy(devname, sizeof(devname), "scsi");
1915
    } else {
1916
        type = IF_IDE;
1917
        max_devs = MAX_IDE_DEVS;
1918
        pstrcpy(devname, sizeof(devname), "ide");
1919
    }
1920
    media = MEDIA_DISK;
1921

    
1922
    /* extract parameters */
1923
    bus_id  = qemu_opt_get_number(opts, "bus", 0);
1924
    unit_id = qemu_opt_get_number(opts, "unit", -1);
1925
    index   = qemu_opt_get_number(opts, "index", -1);
1926

    
1927
    cyls  = qemu_opt_get_number(opts, "cyls", 0);
1928
    heads = qemu_opt_get_number(opts, "heads", 0);
1929
    secs  = qemu_opt_get_number(opts, "secs", 0);
1930

    
1931
    snapshot = qemu_opt_get_bool(opts, "snapshot", 0);
1932
    ro = qemu_opt_get_bool(opts, "readonly", 0);
1933

    
1934
    file = qemu_opt_get(opts, "file");
1935
    serial = qemu_opt_get(opts, "serial");
1936

    
1937
    if ((buf = qemu_opt_get(opts, "if")) != NULL) {
1938
        pstrcpy(devname, sizeof(devname), buf);
1939
        if (!strcmp(buf, "ide")) {
1940
            type = IF_IDE;
1941
            max_devs = MAX_IDE_DEVS;
1942
        } else if (!strcmp(buf, "scsi")) {
1943
            type = IF_SCSI;
1944
            max_devs = MAX_SCSI_DEVS;
1945
        } else if (!strcmp(buf, "floppy")) {
1946
            type = IF_FLOPPY;
1947
            max_devs = 0;
1948
        } else if (!strcmp(buf, "pflash")) {
1949
            type = IF_PFLASH;
1950
            max_devs = 0;
1951
        } else if (!strcmp(buf, "mtd")) {
1952
            type = IF_MTD;
1953
            max_devs = 0;
1954
        } else if (!strcmp(buf, "sd")) {
1955
            type = IF_SD;
1956
            max_devs = 0;
1957
        } else if (!strcmp(buf, "virtio")) {
1958
            type = IF_VIRTIO;
1959
            max_devs = 0;
1960
        } else if (!strcmp(buf, "xen")) {
1961
            type = IF_XEN;
1962
            max_devs = 0;
1963
        } else if (!strcmp(buf, "none")) {
1964
            type = IF_NONE;
1965
            max_devs = 0;
1966
        } else {
1967
            fprintf(stderr, "qemu: unsupported bus type '%s'\n", buf);
1968
            return NULL;
1969
        }
1970
    }
1971

    
1972
    if (cyls || heads || secs) {
1973
        if (cyls < 1 || (type == IF_IDE && cyls > 16383)) {
1974
            fprintf(stderr, "qemu: '%s' invalid physical cyls number\n", buf);
1975
            return NULL;
1976
        }
1977
        if (heads < 1 || (type == IF_IDE && heads > 16)) {
1978
            fprintf(stderr, "qemu: '%s' invalid physical heads number\n", buf);
1979
            return NULL;
1980
        }
1981
        if (secs < 1 || (type == IF_IDE && secs > 63)) {
1982
            fprintf(stderr, "qemu: '%s' invalid physical secs number\n", buf);
1983
            return NULL;
1984
        }
1985
    }
1986

    
1987
    if ((buf = qemu_opt_get(opts, "trans")) != NULL) {
1988
        if (!cyls) {
1989
            fprintf(stderr,
1990
                    "qemu: '%s' trans must be used with cyls,heads and secs\n",
1991
                    buf);
1992
            return NULL;
1993
        }
1994
        if (!strcmp(buf, "none"))
1995
            translation = BIOS_ATA_TRANSLATION_NONE;
1996
        else if (!strcmp(buf, "lba"))
1997
            translation = BIOS_ATA_TRANSLATION_LBA;
1998
        else if (!strcmp(buf, "auto"))
1999
            translation = BIOS_ATA_TRANSLATION_AUTO;
2000
        else {
2001
            fprintf(stderr, "qemu: '%s' invalid translation type\n", buf);
2002
            return NULL;
2003
        }
2004
    }
2005

    
2006
    if ((buf = qemu_opt_get(opts, "media")) != NULL) {
2007
        if (!strcmp(buf, "disk")) {
2008
            media = MEDIA_DISK;
2009
        } else if (!strcmp(buf, "cdrom")) {
2010
            if (cyls || secs || heads) {
2011
                fprintf(stderr,
2012
                        "qemu: '%s' invalid physical CHS format\n", buf);
2013
                return NULL;
2014
            }
2015
            media = MEDIA_CDROM;
2016
        } else {
2017
            fprintf(stderr, "qemu: '%s' invalid media\n", buf);
2018
            return NULL;
2019
        }
2020
    }
2021

    
2022
    if ((buf = qemu_opt_get(opts, "cache")) != NULL) {
2023
        if (!strcmp(buf, "off") || !strcmp(buf, "none"))
2024
            cache = 0;
2025
        else if (!strcmp(buf, "writethrough"))
2026
            cache = 1;
2027
        else if (!strcmp(buf, "writeback"))
2028
            cache = 2;
2029
        else {
2030
           fprintf(stderr, "qemu: invalid cache option\n");
2031
           return NULL;
2032
        }
2033
    }
2034

    
2035
#ifdef CONFIG_LINUX_AIO
2036
    if ((buf = qemu_opt_get(opts, "aio")) != NULL) {
2037
        if (!strcmp(buf, "threads"))
2038
            aio = 0;
2039
        else if (!strcmp(buf, "native"))
2040
            aio = 1;
2041
        else {
2042
           fprintf(stderr, "qemu: invalid aio option\n");
2043
           return NULL;
2044
        }
2045
    }
2046
#endif
2047

    
2048
    if ((buf = qemu_opt_get(opts, "format")) != NULL) {
2049
       if (strcmp(buf, "?") == 0) {
2050
            fprintf(stderr, "qemu: Supported formats:");
2051
            bdrv_iterate_format(bdrv_format_print, NULL);
2052
            fprintf(stderr, "\n");
2053
            return NULL;
2054
        }
2055
        drv = bdrv_find_whitelisted_format(buf);
2056
        if (!drv) {
2057
            fprintf(stderr, "qemu: '%s' invalid format\n", buf);
2058
            return NULL;
2059
        }
2060
    }
2061

    
2062
    on_write_error = BLOCK_ERR_STOP_ENOSPC;
2063
    if ((buf = qemu_opt_get(opts, "werror")) != NULL) {
2064
        if (type != IF_IDE && type != IF_SCSI && type != IF_VIRTIO) {
2065
            fprintf(stderr, "werror is no supported by this format\n");
2066
            return NULL;
2067
        }
2068

    
2069
        on_write_error = parse_block_error_action(buf, 0);
2070
        if (on_write_error < 0) {
2071
            return NULL;
2072
        }
2073
    }
2074

    
2075
    on_read_error = BLOCK_ERR_REPORT;
2076
    if ((buf = qemu_opt_get(opts, "rerror")) != NULL) {
2077
        if (type != IF_IDE && type != IF_VIRTIO) {
2078
            fprintf(stderr, "rerror is no supported by this format\n");
2079
            return NULL;
2080
        }
2081

    
2082
        on_read_error = parse_block_error_action(buf, 1);
2083
        if (on_read_error < 0) {
2084
            return NULL;
2085
        }
2086
    }
2087

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

    
2095
    /* compute bus and unit according index */
2096

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

    
2113
    /* if user doesn't specify a unit_id,
2114
     * try to find the first free
2115
     */
2116

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

    
2128
    /* check unit id */
2129

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

    
2136
    /*
2137
     * ignore multiple definitions
2138
     */
2139

    
2140
    if (drive_get(type, bus_id, unit_id) != NULL) {
2141
        *fatal_error = 0;
2142
        return NULL;
2143
    }
2144

    
2145
    /* init */
2146

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

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

    
2225
    if (aio == 1) {
2226
        bdrv_flags |= BDRV_O_NATIVE_AIO;
2227
    } else {
2228
        bdrv_flags &= ~BDRV_O_NATIVE_AIO;
2229
    }
2230

    
2231
    if (ro == 1) {
2232
        if (type != IF_SCSI && type != IF_VIRTIO && type != IF_FLOPPY) {
2233
            fprintf(stderr, "qemu: readonly flag not supported for drive with this interface\n");
2234
            return NULL;
2235
        }
2236
    }
2237
    /* 
2238
     * cdrom is read-only. Set it now, after above interface checking
2239
     * since readonly attribute not explicitly required, so no error.
2240
     */
2241
    if (media == MEDIA_CDROM) {
2242
        ro = 1;
2243
    }
2244
    bdrv_flags |= ro ? 0 : BDRV_O_RDWR;
2245

    
2246
    if (bdrv_open2(dinfo->bdrv, file, bdrv_flags, drv) < 0) {
2247
        fprintf(stderr, "qemu: could not open disk image %s: %s\n",
2248
                        file, strerror(errno));
2249
        return NULL;
2250
    }
2251

    
2252
    if (bdrv_key_required(dinfo->bdrv))
2253
        autostart = 0;
2254
    *fatal_error = 0;
2255
    return dinfo;
2256
}
2257

    
2258
static int drive_init_func(QemuOpts *opts, void *opaque)
2259
{
2260
    QEMUMachine *machine = opaque;
2261
    int fatal_error = 0;
2262

    
2263
    if (drive_init(opts, machine, &fatal_error) == NULL) {
2264
        if (fatal_error)
2265
            return 1;
2266
    }
2267
    return 0;
2268
}
2269

    
2270
static int drive_enable_snapshot(QemuOpts *opts, void *opaque)
2271
{
2272
    if (NULL == qemu_opt_get(opts, "snapshot")) {
2273
        qemu_opt_set(opts, "snapshot", "on");
2274
    }
2275
    return 0;
2276
}
2277

    
2278
void qemu_register_boot_set(QEMUBootSetHandler *func, void *opaque)
2279
{
2280
    boot_set_handler = func;
2281
    boot_set_opaque = opaque;
2282
}
2283

    
2284
int qemu_boot_set(const char *boot_devices)
2285
{
2286
    if (!boot_set_handler) {
2287
        return -EINVAL;
2288
    }
2289
    return boot_set_handler(boot_set_opaque, boot_devices);
2290
}
2291

    
2292
static int parse_bootdevices(char *devices)
2293
{
2294
    /* We just do some generic consistency checks */
2295
    const char *p;
2296
    int bitmap = 0;
2297

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

    
2321
static void restore_boot_devices(void *opaque)
2322
{
2323
    char *standard_boot_devices = opaque;
2324

    
2325
    qemu_boot_set(standard_boot_devices);
2326

    
2327
    qemu_unregister_reset(restore_boot_devices, standard_boot_devices);
2328
    qemu_free(standard_boot_devices);
2329
}
2330

    
2331
static void numa_add(const char *optarg)
2332
{
2333
    char option[128];
2334
    char *endptr;
2335
    unsigned long long value, endvalue;
2336
    int nodenr;
2337

    
2338
    optarg = get_opt_name(option, 128, optarg, ',') + 1;
2339
    if (!strcmp(option, "node")) {
2340
        if (get_param_value(option, 128, "nodeid", optarg) == 0) {
2341
            nodenr = nb_numa_nodes;
2342
        } else {
2343
            nodenr = strtoull(option, NULL, 10);
2344
        }
2345

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

    
2387
static void smp_parse(const char *optarg)
2388
{
2389
    int smp, sockets = 0, threads = 0, cores = 0;
2390
    char *endptr;
2391
    char option[128];
2392

    
2393
    smp = strtoul(optarg, &endptr, 10);
2394
    if (endptr != optarg) {
2395
        if (*endptr == ',') {
2396
            endptr++;
2397
        }
2398
    }
2399
    if (get_param_value(option, 128, "sockets", endptr) != 0)
2400
        sockets = strtoull(option, NULL, 10);
2401
    if (get_param_value(option, 128, "cores", endptr) != 0)
2402
        cores = strtoull(option, NULL, 10);
2403
    if (get_param_value(option, 128, "threads", endptr) != 0)
2404
        threads = strtoull(option, NULL, 10);
2405
    if (get_param_value(option, 128, "maxcpus", endptr) != 0)
2406
        max_cpus = strtoull(option, NULL, 10);
2407

    
2408
    /* compute missing values, prefer sockets over cores over threads */
2409
    if (smp == 0 || sockets == 0) {
2410
        sockets = sockets > 0 ? sockets : 1;
2411
        cores = cores > 0 ? cores : 1;
2412
        threads = threads > 0 ? threads : 1;
2413
        if (smp == 0) {
2414
            smp = cores * threads * sockets;
2415
        }
2416
    } else {
2417
        if (cores == 0) {
2418
            threads = threads > 0 ? threads : 1;
2419
            cores = smp / (sockets * threads);
2420
        } else {
2421
            if (sockets) {
2422
                threads = smp / (cores * sockets);
2423
            }
2424
        }
2425
    }
2426
    smp_cpus = smp;
2427
    smp_cores = cores > 0 ? cores : 1;
2428
    smp_threads = threads > 0 ? threads : 1;
2429
    if (max_cpus == 0)
2430
        max_cpus = smp_cpus;
2431
}
2432

    
2433
/***********************************************************/
2434
/* USB devices */
2435

    
2436
static int usb_device_add(const char *devname, int is_hotplug)
2437
{
2438
    const char *p;
2439
    USBDevice *dev = NULL;
2440

    
2441
    if (!usb_enabled)
2442
        return -1;
2443

    
2444
    /* drivers with .usbdevice_name entry in USBDeviceInfo */
2445
    dev = usbdevice_create(devname);
2446
    if (dev)
2447
        goto done;
2448

    
2449
    /* the other ones */
2450
    if (strstart(devname, "host:", &p)) {
2451
        dev = usb_host_device_open(p);
2452
    } else if (!strcmp(devname, "bt") || strstart(devname, "bt:", &p)) {
2453
        dev = usb_bt_init(devname[2] ? hci_init(p) :
2454
                        bt_new_hci(qemu_find_bt_vlan(0)));
2455
    } else {
2456
        return -1;
2457
    }
2458
    if (!dev)
2459
        return -1;
2460

    
2461
done:
2462
    return 0;
2463
}
2464

    
2465
static int usb_device_del(const char *devname)
2466
{
2467
    int bus_num, addr;
2468
    const char *p;
2469

    
2470
    if (strstart(devname, "host:", &p))
2471
        return usb_host_device_close(p);
2472

    
2473
    if (!usb_enabled)
2474
        return -1;
2475

    
2476
    p = strchr(devname, '.');
2477
    if (!p)
2478
        return -1;
2479
    bus_num = strtoul(devname, NULL, 0);
2480
    addr = strtoul(p + 1, NULL, 0);
2481

    
2482
    return usb_device_delete_addr(bus_num, addr);
2483
}
2484

    
2485
static int usb_parse(const char *cmdline)
2486
{
2487
    int r;
2488
    r = usb_device_add(cmdline, 0);
2489
    if (r < 0) {
2490
        fprintf(stderr, "qemu: could not add USB device '%s'\n", cmdline);
2491
    }
2492
    return r;
2493
}
2494

    
2495
void do_usb_add(Monitor *mon, const QDict *qdict)
2496
{
2497
    const char *devname = qdict_get_str(qdict, "devname");
2498
    if (usb_device_add(devname, 1) < 0) {
2499
        qemu_error("could not add USB device '%s'\n", devname);
2500
    }
2501
}
2502

    
2503
void do_usb_del(Monitor *mon, const QDict *qdict)
2504
{
2505
    const char *devname = qdict_get_str(qdict, "devname");
2506
    if (usb_device_del(devname) < 0) {
2507
        qemu_error("could not delete USB device '%s'\n", devname);
2508
    }
2509
}
2510

    
2511
/***********************************************************/
2512
/* PCMCIA/Cardbus */
2513

    
2514
static struct pcmcia_socket_entry_s {
2515
    PCMCIASocket *socket;
2516
    struct pcmcia_socket_entry_s *next;
2517
} *pcmcia_sockets = 0;
2518

    
2519
void pcmcia_socket_register(PCMCIASocket *socket)
2520
{
2521
    struct pcmcia_socket_entry_s *entry;
2522

    
2523
    entry = qemu_malloc(sizeof(struct pcmcia_socket_entry_s));
2524
    entry->socket = socket;
2525
    entry->next = pcmcia_sockets;
2526
    pcmcia_sockets = entry;
2527
}
2528

    
2529
void pcmcia_socket_unregister(PCMCIASocket *socket)
2530
{
2531
    struct pcmcia_socket_entry_s *entry, **ptr;
2532

    
2533
    ptr = &pcmcia_sockets;
2534
    for (entry = *ptr; entry; ptr = &entry->next, entry = *ptr)
2535
        if (entry->socket == socket) {
2536
            *ptr = entry->next;
2537
            qemu_free(entry);
2538
        }
2539
}
2540

    
2541
void pcmcia_info(Monitor *mon)
2542
{
2543
    struct pcmcia_socket_entry_s *iter;
2544

    
2545
    if (!pcmcia_sockets)
2546
        monitor_printf(mon, "No PCMCIA sockets\n");
2547

    
2548
    for (iter = pcmcia_sockets; iter; iter = iter->next)
2549
        monitor_printf(mon, "%s: %s\n", iter->socket->slot_string,
2550
                       iter->socket->attached ? iter->socket->card_string :
2551
                       "Empty");
2552
}
2553

    
2554
/***********************************************************/
2555
/* register display */
2556

    
2557
struct DisplayAllocator default_allocator = {
2558
    defaultallocator_create_displaysurface,
2559
    defaultallocator_resize_displaysurface,
2560
    defaultallocator_free_displaysurface
2561
};
2562

    
2563
void register_displaystate(DisplayState *ds)
2564
{
2565
    DisplayState **s;
2566
    s = &display_state;
2567
    while (*s != NULL)
2568
        s = &(*s)->next;
2569
    ds->next = NULL;
2570
    *s = ds;
2571
}
2572

    
2573
DisplayState *get_displaystate(void)
2574
{
2575
    return display_state;
2576
}
2577

    
2578
DisplayAllocator *register_displayallocator(DisplayState *ds, DisplayAllocator *da)
2579
{
2580
    if(ds->allocator ==  &default_allocator) ds->allocator = da;
2581
    return ds->allocator;
2582
}
2583

    
2584
/* dumb display */
2585

    
2586
static void dumb_display_init(void)
2587
{
2588
    DisplayState *ds = qemu_mallocz(sizeof(DisplayState));
2589
    ds->allocator = &default_allocator;
2590
    ds->surface = qemu_create_displaysurface(ds, 640, 480);
2591
    register_displaystate(ds);
2592
}
2593

    
2594
/***********************************************************/
2595
/* I/O handling */
2596

    
2597
typedef struct IOHandlerRecord {
2598
    int fd;
2599
    IOCanRWHandler *fd_read_poll;
2600
    IOHandler *fd_read;
2601
    IOHandler *fd_write;
2602
    int deleted;
2603
    void *opaque;
2604
    /* temporary data */
2605
    struct pollfd *ufd;
2606
    struct IOHandlerRecord *next;
2607
} IOHandlerRecord;
2608

    
2609
static IOHandlerRecord *first_io_handler;
2610

    
2611
/* XXX: fd_read_poll should be suppressed, but an API change is
2612
   necessary in the character devices to suppress fd_can_read(). */
2613
int qemu_set_fd_handler2(int fd,
2614
                         IOCanRWHandler *fd_read_poll,
2615
                         IOHandler *fd_read,
2616
                         IOHandler *fd_write,
2617
                         void *opaque)
2618
{
2619
    IOHandlerRecord **pioh, *ioh;
2620

    
2621
    if (!fd_read && !fd_write) {
2622
        pioh = &first_io_handler;
2623
        for(;;) {
2624
            ioh = *pioh;
2625
            if (ioh == NULL)
2626
                break;
2627
            if (ioh->fd == fd) {
2628
                ioh->deleted = 1;
2629
                break;
2630
            }
2631
            pioh = &ioh->next;
2632
        }
2633
    } else {
2634
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
2635
            if (ioh->fd == fd)
2636
                goto found;
2637
        }
2638
        ioh = qemu_mallocz(sizeof(IOHandlerRecord));
2639
        ioh->next = first_io_handler;
2640
        first_io_handler = ioh;
2641
    found:
2642
        ioh->fd = fd;
2643
        ioh->fd_read_poll = fd_read_poll;
2644
        ioh->fd_read = fd_read;
2645
        ioh->fd_write = fd_write;
2646
        ioh->opaque = opaque;
2647
        ioh->deleted = 0;
2648
    }
2649
    return 0;
2650
}
2651

    
2652
int qemu_set_fd_handler(int fd,
2653
                        IOHandler *fd_read,
2654
                        IOHandler *fd_write,
2655
                        void *opaque)
2656
{
2657
    return qemu_set_fd_handler2(fd, NULL, fd_read, fd_write, opaque);
2658
}
2659

    
2660
#ifdef _WIN32
2661
/***********************************************************/
2662
/* Polling handling */
2663

    
2664
typedef struct PollingEntry {
2665
    PollingFunc *func;
2666
    void *opaque;
2667
    struct PollingEntry *next;
2668
} PollingEntry;
2669

    
2670
static PollingEntry *first_polling_entry;
2671

    
2672
int qemu_add_polling_cb(PollingFunc *func, void *opaque)
2673
{
2674
    PollingEntry **ppe, *pe;
2675
    pe = qemu_mallocz(sizeof(PollingEntry));
2676
    pe->func = func;
2677
    pe->opaque = opaque;
2678
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next);
2679
    *ppe = pe;
2680
    return 0;
2681
}
2682

    
2683
void qemu_del_polling_cb(PollingFunc *func, void *opaque)
2684
{
2685
    PollingEntry **ppe, *pe;
2686
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next) {
2687
        pe = *ppe;
2688
        if (pe->func == func && pe->opaque == opaque) {
2689
            *ppe = pe->next;
2690
            qemu_free(pe);
2691
            break;
2692
        }
2693
    }
2694
}
2695

    
2696
/***********************************************************/
2697
/* Wait objects support */
2698
typedef struct WaitObjects {
2699
    int num;
2700
    HANDLE events[MAXIMUM_WAIT_OBJECTS + 1];
2701
    WaitObjectFunc *func[MAXIMUM_WAIT_OBJECTS + 1];
2702
    void *opaque[MAXIMUM_WAIT_OBJECTS + 1];
2703
} WaitObjects;
2704

    
2705
static WaitObjects wait_objects = {0};
2706

    
2707
int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
2708
{
2709
    WaitObjects *w = &wait_objects;
2710

    
2711
    if (w->num >= MAXIMUM_WAIT_OBJECTS)
2712
        return -1;
2713
    w->events[w->num] = handle;
2714
    w->func[w->num] = func;
2715
    w->opaque[w->num] = opaque;
2716
    w->num++;
2717
    return 0;
2718
}
2719

    
2720
void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
2721
{
2722
    int i, found;
2723
    WaitObjects *w = &wait_objects;
2724

    
2725
    found = 0;
2726
    for (i = 0; i < w->num; i++) {
2727
        if (w->events[i] == handle)
2728
            found = 1;
2729
        if (found) {
2730
            w->events[i] = w->events[i + 1];
2731
            w->func[i] = w->func[i + 1];
2732
            w->opaque[i] = w->opaque[i + 1];
2733
        }
2734
    }
2735
    if (found)
2736
        w->num--;
2737
}
2738
#endif
2739

    
2740
/***********************************************************/
2741
/* ram save/restore */
2742

    
2743
#define RAM_SAVE_FLAG_FULL        0x01 /* Obsolete, not used anymore */
2744
#define RAM_SAVE_FLAG_COMPRESS        0x02
2745
#define RAM_SAVE_FLAG_MEM_SIZE        0x04
2746
#define RAM_SAVE_FLAG_PAGE        0x08
2747
#define RAM_SAVE_FLAG_EOS        0x10
2748

    
2749
static int is_dup_page(uint8_t *page, uint8_t ch)
2750
{
2751
    uint32_t val = ch << 24 | ch << 16 | ch << 8 | ch;
2752
    uint32_t *array = (uint32_t *)page;
2753
    int i;
2754

    
2755
    for (i = 0; i < (TARGET_PAGE_SIZE / 4); i++) {
2756
        if (array[i] != val)
2757
            return 0;
2758
    }
2759

    
2760
    return 1;
2761
}
2762

    
2763
static int ram_save_block(QEMUFile *f)
2764
{
2765
    static ram_addr_t current_addr = 0;
2766
    ram_addr_t saved_addr = current_addr;
2767
    ram_addr_t addr = 0;
2768
    int found = 0;
2769

    
2770
    while (addr < last_ram_offset) {
2771
        if (cpu_physical_memory_get_dirty(current_addr, MIGRATION_DIRTY_FLAG)) {
2772
            uint8_t *p;
2773

    
2774
            cpu_physical_memory_reset_dirty(current_addr,
2775
                                            current_addr + TARGET_PAGE_SIZE,
2776
                                            MIGRATION_DIRTY_FLAG);
2777

    
2778
            p = qemu_get_ram_ptr(current_addr);
2779

    
2780
            if (is_dup_page(p, *p)) {
2781
                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_COMPRESS);
2782
                qemu_put_byte(f, *p);
2783
            } else {
2784
                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_PAGE);
2785
                qemu_put_buffer(f, p, TARGET_PAGE_SIZE);
2786
            }
2787

    
2788
            found = 1;
2789
            break;
2790
        }
2791
        addr += TARGET_PAGE_SIZE;
2792
        current_addr = (saved_addr + addr) % last_ram_offset;
2793
    }
2794

    
2795
    return found;
2796
}
2797

    
2798
static uint64_t bytes_transferred;
2799

    
2800
static ram_addr_t ram_save_remaining(void)
2801
{
2802
    ram_addr_t addr;
2803
    ram_addr_t count = 0;
2804

    
2805
    for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
2806
        if (cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
2807
            count++;
2808
    }
2809

    
2810
    return count;
2811
}
2812

    
2813
uint64_t ram_bytes_remaining(void)
2814
{
2815
    return ram_save_remaining() * TARGET_PAGE_SIZE;
2816
}
2817

    
2818
uint64_t ram_bytes_transferred(void)
2819
{
2820
    return bytes_transferred;
2821
}
2822

    
2823
uint64_t ram_bytes_total(void)
2824
{
2825
    return last_ram_offset;
2826
}
2827

    
2828
static int ram_save_live(Monitor *mon, QEMUFile *f, int stage, void *opaque)
2829
{
2830
    ram_addr_t addr;
2831
    uint64_t bytes_transferred_last;
2832
    double bwidth = 0;
2833
    uint64_t expected_time = 0;
2834

    
2835
    if (stage < 0) {
2836
        cpu_physical_memory_set_dirty_tracking(0);
2837
        return 0;
2838
    }
2839

    
2840
    if (cpu_physical_sync_dirty_bitmap(0, TARGET_PHYS_ADDR_MAX) != 0) {
2841
        qemu_file_set_error(f);
2842
        return 0;
2843
    }
2844

    
2845
    if (stage == 1) {
2846
        bytes_transferred = 0;
2847

    
2848
        /* Make sure all dirty bits are set */
2849
        for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
2850
            if (!cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
2851
                cpu_physical_memory_set_dirty(addr);
2852
        }
2853

    
2854
        /* Enable dirty memory tracking */
2855
        cpu_physical_memory_set_dirty_tracking(1);
2856

    
2857
        qemu_put_be64(f, last_ram_offset | RAM_SAVE_FLAG_MEM_SIZE);
2858
    }
2859

    
2860
    bytes_transferred_last = bytes_transferred;
2861
    bwidth = get_clock();
2862

    
2863
    while (!qemu_file_rate_limit(f)) {
2864
        int ret;
2865

    
2866
        ret = ram_save_block(f);
2867
        bytes_transferred += ret * TARGET_PAGE_SIZE;
2868
        if (ret == 0) /* no more blocks */
2869
            break;
2870
    }
2871

    
2872
    bwidth = get_clock() - bwidth;
2873
    bwidth = (bytes_transferred - bytes_transferred_last) / bwidth;
2874

    
2875
    /* if we haven't transferred anything this round, force expected_time to a
2876
     * a very high value, but without crashing */
2877
    if (bwidth == 0)
2878
        bwidth = 0.000001;
2879

    
2880
    /* try transferring iterative blocks of memory */
2881
    if (stage == 3) {
2882
        /* flush all remaining blocks regardless of rate limiting */
2883
        while (ram_save_block(f) != 0) {
2884
            bytes_transferred += TARGET_PAGE_SIZE;
2885
        }
2886
        cpu_physical_memory_set_dirty_tracking(0);
2887
    }
2888

    
2889
    qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
2890

    
2891
    expected_time = ram_save_remaining() * TARGET_PAGE_SIZE / bwidth;
2892

    
2893
    return (stage == 2) && (expected_time <= migrate_max_downtime());
2894
}
2895

    
2896
static int ram_load(QEMUFile *f, void *opaque, int version_id)
2897
{
2898
    ram_addr_t addr;
2899
    int flags;
2900

    
2901
    if (version_id != 3)
2902
        return -EINVAL;
2903

    
2904
    do {
2905
        addr = qemu_get_be64(f);
2906

    
2907
        flags = addr & ~TARGET_PAGE_MASK;
2908
        addr &= TARGET_PAGE_MASK;
2909

    
2910
        if (flags & RAM_SAVE_FLAG_MEM_SIZE) {
2911
            if (addr != last_ram_offset)
2912
                return -EINVAL;
2913
        }
2914

    
2915
        if (flags & RAM_SAVE_FLAG_COMPRESS) {
2916
            uint8_t ch = qemu_get_byte(f);
2917
            memset(qemu_get_ram_ptr(addr), ch, TARGET_PAGE_SIZE);
2918
#ifndef _WIN32
2919
            if (ch == 0 &&
2920
                (!kvm_enabled() || kvm_has_sync_mmu())) {
2921
                madvise(qemu_get_ram_ptr(addr), TARGET_PAGE_SIZE, MADV_DONTNEED);
2922
            }
2923
#endif
2924
        } else if (flags & RAM_SAVE_FLAG_PAGE) {
2925
            qemu_get_buffer(f, qemu_get_ram_ptr(addr), TARGET_PAGE_SIZE);
2926
        }
2927
        if (qemu_file_has_error(f)) {
2928
            return -EIO;
2929
        }
2930
    } while (!(flags & RAM_SAVE_FLAG_EOS));
2931

    
2932
    return 0;
2933
}
2934

    
2935
void qemu_service_io(void)
2936
{
2937
    qemu_notify_event();
2938
}
2939

    
2940
/***********************************************************/
2941
/* machine registration */
2942

    
2943
static QEMUMachine *first_machine = NULL;
2944
QEMUMachine *current_machine = NULL;
2945

    
2946
int qemu_register_machine(QEMUMachine *m)
2947
{
2948
    QEMUMachine **pm;
2949
    pm = &first_machine;
2950
    while (*pm != NULL)
2951
        pm = &(*pm)->next;
2952
    m->next = NULL;
2953
    *pm = m;
2954
    return 0;
2955
}
2956

    
2957
static QEMUMachine *find_machine(const char *name)
2958
{
2959
    QEMUMachine *m;
2960

    
2961
    for(m = first_machine; m != NULL; m = m->next) {
2962
        if (!strcmp(m->name, name))
2963
            return m;
2964
        if (m->alias && !strcmp(m->alias, name))
2965
            return m;
2966
    }
2967
    return NULL;
2968
}
2969

    
2970
static QEMUMachine *find_default_machine(void)
2971
{
2972
    QEMUMachine *m;
2973

    
2974
    for(m = first_machine; m != NULL; m = m->next) {
2975
        if (m->is_default) {
2976
            return m;
2977
        }
2978
    }
2979
    return NULL;
2980
}
2981

    
2982
/***********************************************************/
2983
/* main execution loop */
2984

    
2985
static void gui_update(void *opaque)
2986
{
2987
    uint64_t interval = GUI_REFRESH_INTERVAL;
2988
    DisplayState *ds = opaque;
2989
    DisplayChangeListener *dcl = ds->listeners;
2990

    
2991
    dpy_refresh(ds);
2992

    
2993
    while (dcl != NULL) {
2994
        if (dcl->gui_timer_interval &&
2995
            dcl->gui_timer_interval < interval)
2996
            interval = dcl->gui_timer_interval;
2997
        dcl = dcl->next;
2998
    }
2999
    qemu_mod_timer(ds->gui_timer, interval + qemu_get_clock(rt_clock));
3000
}
3001

    
3002
static void nographic_update(void *opaque)
3003
{
3004
    uint64_t interval = GUI_REFRESH_INTERVAL;
3005

    
3006
    qemu_mod_timer(nographic_timer, interval + qemu_get_clock(rt_clock));
3007
}
3008

    
3009
struct vm_change_state_entry {
3010
    VMChangeStateHandler *cb;
3011
    void *opaque;
3012
    QLIST_ENTRY (vm_change_state_entry) entries;
3013
};
3014

    
3015
static QLIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head;
3016

    
3017
VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
3018
                                                     void *opaque)
3019
{
3020
    VMChangeStateEntry *e;
3021

    
3022
    e = qemu_mallocz(sizeof (*e));
3023

    
3024
    e->cb = cb;
3025
    e->opaque = opaque;
3026
    QLIST_INSERT_HEAD(&vm_change_state_head, e, entries);
3027
    return e;
3028
}
3029

    
3030
void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
3031
{
3032
    QLIST_REMOVE (e, entries);
3033
    qemu_free (e);
3034
}
3035

    
3036
static void vm_state_notify(int running, int reason)
3037
{
3038
    VMChangeStateEntry *e;
3039

    
3040
    for (e = vm_change_state_head.lh_first; e; e = e->entries.le_next) {
3041
        e->cb(e->opaque, running, reason);
3042
    }
3043
}
3044

    
3045
static void resume_all_vcpus(void);
3046
static void pause_all_vcpus(void);
3047

    
3048
void vm_start(void)
3049
{
3050
    if (!vm_running) {
3051
        cpu_enable_ticks();
3052
        vm_running = 1;
3053
        vm_state_notify(1, 0);
3054
        qemu_rearm_alarm_timer(alarm_timer);
3055
        resume_all_vcpus();
3056
    }
3057
}
3058

    
3059
/* reset/shutdown handler */
3060

    
3061
typedef struct QEMUResetEntry {
3062
    QTAILQ_ENTRY(QEMUResetEntry) entry;
3063
    QEMUResetHandler *func;
3064
    void *opaque;
3065
} QEMUResetEntry;
3066

    
3067
static QTAILQ_HEAD(reset_handlers, QEMUResetEntry) reset_handlers =
3068
    QTAILQ_HEAD_INITIALIZER(reset_handlers);
3069
static int reset_requested;
3070
static int shutdown_requested;
3071
static int powerdown_requested;
3072
static int debug_requested;
3073
static int vmstop_requested;
3074

    
3075
int qemu_shutdown_requested(void)
3076
{
3077
    int r = shutdown_requested;
3078
    shutdown_requested = 0;
3079
    return r;
3080
}
3081

    
3082
int qemu_reset_requested(void)
3083
{
3084
    int r = reset_requested;
3085
    reset_requested = 0;
3086
    return r;
3087
}
3088

    
3089
int qemu_powerdown_requested(void)
3090
{
3091
    int r = powerdown_requested;
3092
    powerdown_requested = 0;
3093
    return r;
3094
}
3095

    
3096
static int qemu_debug_requested(void)
3097
{
3098
    int r = debug_requested;
3099
    debug_requested = 0;
3100
    return r;
3101
}
3102

    
3103
static int qemu_vmstop_requested(void)
3104
{
3105
    int r = vmstop_requested;
3106
    vmstop_requested = 0;
3107
    return r;
3108
}
3109

    
3110
static void do_vm_stop(int reason)
3111
{
3112
    if (vm_running) {
3113
        cpu_disable_ticks();
3114
        vm_running = 0;
3115
        pause_all_vcpus();
3116
        vm_state_notify(0, reason);
3117
    }
3118
}
3119

    
3120
void qemu_register_reset(QEMUResetHandler *func, void *opaque)
3121
{
3122
    QEMUResetEntry *re = qemu_mallocz(sizeof(QEMUResetEntry));
3123

    
3124
    re->func = func;
3125
    re->opaque = opaque;
3126
    QTAILQ_INSERT_TAIL(&reset_handlers, re, entry);
3127
}
3128

    
3129
void qemu_unregister_reset(QEMUResetHandler *func, void *opaque)
3130
{
3131
    QEMUResetEntry *re;
3132

    
3133
    QTAILQ_FOREACH(re, &reset_handlers, entry) {
3134
        if (re->func == func && re->opaque == opaque) {
3135
            QTAILQ_REMOVE(&reset_handlers, re, entry);
3136
            qemu_free(re);
3137
            return;
3138
        }
3139
    }
3140
}
3141

    
3142
void qemu_system_reset(void)
3143
{
3144
    QEMUResetEntry *re, *nre;
3145

    
3146
    /* reset all devices */
3147
    QTAILQ_FOREACH_SAFE(re, &reset_handlers, entry, nre) {
3148
        re->func(re->opaque);
3149
    }
3150
}
3151

    
3152
void qemu_system_reset_request(void)
3153
{
3154
    if (no_reboot) {
3155
        shutdown_requested = 1;
3156
    } else {
3157
        reset_requested = 1;
3158
    }
3159
    qemu_notify_event();
3160
}
3161

    
3162
void qemu_system_shutdown_request(void)
3163
{
3164
    shutdown_requested = 1;
3165
    qemu_notify_event();
3166
}
3167

    
3168
void qemu_system_powerdown_request(void)
3169
{
3170
    powerdown_requested = 1;
3171
    qemu_notify_event();
3172
}
3173

    
3174
#ifdef CONFIG_IOTHREAD
3175
static void qemu_system_vmstop_request(int reason)
3176
{
3177
    vmstop_requested = reason;
3178
    qemu_notify_event();
3179
}
3180
#endif
3181

    
3182
#ifndef _WIN32
3183
static int io_thread_fd = -1;
3184

    
3185
static void qemu_event_increment(void)
3186
{
3187
    static const char byte = 0;
3188

    
3189
    if (io_thread_fd == -1)
3190
        return;
3191

    
3192
    write(io_thread_fd, &byte, sizeof(byte));
3193
}
3194

    
3195
static void qemu_event_read(void *opaque)
3196
{
3197
    int fd = (unsigned long)opaque;
3198
    ssize_t len;
3199

    
3200
    /* Drain the notify pipe */
3201
    do {
3202
        char buffer[512];
3203
        len = read(fd, buffer, sizeof(buffer));
3204
    } while ((len == -1 && errno == EINTR) || len > 0);
3205
}
3206

    
3207
static int qemu_event_init(void)
3208
{
3209
    int err;
3210
    int fds[2];
3211

    
3212
    err = qemu_pipe(fds);
3213
    if (err == -1)
3214
        return -errno;
3215

    
3216
    err = fcntl_setfl(fds[0], O_NONBLOCK);
3217
    if (err < 0)
3218
        goto fail;
3219

    
3220
    err = fcntl_setfl(fds[1], O_NONBLOCK);
3221
    if (err < 0)
3222
        goto fail;
3223

    
3224
    qemu_set_fd_handler2(fds[0], NULL, qemu_event_read, NULL,
3225
                         (void *)(unsigned long)fds[0]);
3226

    
3227
    io_thread_fd = fds[1];
3228
    return 0;
3229

    
3230
fail:
3231
    close(fds[0]);
3232
    close(fds[1]);
3233
    return err;
3234
}
3235
#else
3236
HANDLE qemu_event_handle;
3237

    
3238
static void dummy_event_handler(void *opaque)
3239
{
3240
}
3241

    
3242
static int qemu_event_init(void)
3243
{
3244
    qemu_event_handle = CreateEvent(NULL, FALSE, FALSE, NULL);
3245
    if (!qemu_event_handle) {
3246
        fprintf(stderr, "Failed CreateEvent: %ld\n", GetLastError());
3247
        return -1;
3248
    }
3249
    qemu_add_wait_object(qemu_event_handle, dummy_event_handler, NULL);
3250
    return 0;
3251
}
3252

    
3253
static void qemu_event_increment(void)
3254
{
3255
    if (!SetEvent(qemu_event_handle)) {
3256
        fprintf(stderr, "qemu_event_increment: SetEvent failed: %ld\n",
3257
                GetLastError());
3258
        exit (1);
3259
    }
3260
}
3261
#endif
3262

    
3263
static int cpu_can_run(CPUState *env)
3264
{
3265
    if (env->stop)
3266
        return 0;
3267
    if (env->stopped)
3268
        return 0;
3269
    return 1;
3270
}
3271

    
3272
#ifndef CONFIG_IOTHREAD
3273
static int qemu_init_main_loop(void)
3274
{
3275
    return qemu_event_init();
3276
}
3277

    
3278
void qemu_init_vcpu(void *_env)
3279
{
3280
    CPUState *env = _env;
3281

    
3282
    env->nr_cores = smp_cores;
3283
    env->nr_threads = smp_threads;
3284
    if (kvm_enabled())
3285
        kvm_init_vcpu(env);
3286
    return;
3287
}
3288

    
3289
int qemu_cpu_self(void *env)
3290
{
3291
    return 1;
3292
}
3293

    
3294
static void resume_all_vcpus(void)
3295
{
3296
}
3297

    
3298
static void pause_all_vcpus(void)
3299
{
3300
}
3301

    
3302
void qemu_cpu_kick(void *env)
3303
{
3304
    return;
3305
}
3306

    
3307
void qemu_notify_event(void)
3308
{
3309
    CPUState *env = cpu_single_env;
3310

    
3311
    if (env) {
3312
        cpu_exit(env);
3313
    }
3314
}
3315

    
3316
void qemu_mutex_lock_iothread(void) {}
3317
void qemu_mutex_unlock_iothread(void) {}
3318

    
3319
void vm_stop(int reason)
3320
{
3321
    do_vm_stop(reason);
3322
}
3323

    
3324
#else /* CONFIG_IOTHREAD */
3325

    
3326
#include "qemu-thread.h"
3327

    
3328
QemuMutex qemu_global_mutex;
3329
static QemuMutex qemu_fair_mutex;
3330

    
3331
static QemuThread io_thread;
3332

    
3333
static QemuThread *tcg_cpu_thread;
3334
static QemuCond *tcg_halt_cond;
3335

    
3336
static int qemu_system_ready;
3337
/* cpu creation */
3338
static QemuCond qemu_cpu_cond;
3339
/* system init */
3340
static QemuCond qemu_system_cond;
3341
static QemuCond qemu_pause_cond;
3342

    
3343
static void block_io_signals(void);
3344
static void unblock_io_signals(void);
3345
static int tcg_has_work(void);
3346

    
3347
static int qemu_init_main_loop(void)
3348
{
3349
    int ret;
3350

    
3351
    ret = qemu_event_init();
3352
    if (ret)
3353
        return ret;
3354

    
3355
    qemu_cond_init(&qemu_pause_cond);
3356
    qemu_mutex_init(&qemu_fair_mutex);
3357
    qemu_mutex_init(&qemu_global_mutex);
3358
    qemu_mutex_lock(&qemu_global_mutex);
3359

    
3360
    unblock_io_signals();
3361
    qemu_thread_self(&io_thread);
3362

    
3363
    return 0;
3364
}
3365

    
3366
static void qemu_wait_io_event(CPUState *env)
3367
{
3368
    while (!tcg_has_work())
3369
        qemu_cond_timedwait(env->halt_cond, &qemu_global_mutex, 1000);
3370

    
3371
    qemu_mutex_unlock(&qemu_global_mutex);
3372

    
3373
    /*
3374
     * Users of qemu_global_mutex can be starved, having no chance
3375
     * to acquire it since this path will get to it first.
3376
     * So use another lock to provide fairness.
3377
     */
3378
    qemu_mutex_lock(&qemu_fair_mutex);
3379
    qemu_mutex_unlock(&qemu_fair_mutex);
3380

    
3381
    qemu_mutex_lock(&qemu_global_mutex);
3382
    if (env->stop) {
3383
        env->stop = 0;
3384
        env->stopped = 1;
3385
        qemu_cond_signal(&qemu_pause_cond);
3386
    }
3387
}
3388

    
3389
static int qemu_cpu_exec(CPUState *env);
3390

    
3391
static void *kvm_cpu_thread_fn(void *arg)
3392
{
3393
    CPUState *env = arg;
3394

    
3395
    block_io_signals();
3396
    qemu_thread_self(env->thread);
3397
    if (kvm_enabled())
3398
        kvm_init_vcpu(env);
3399

    
3400
    /* signal CPU creation */
3401
    qemu_mutex_lock(&qemu_global_mutex);
3402
    env->created = 1;
3403
    qemu_cond_signal(&qemu_cpu_cond);
3404

    
3405
    /* and wait for machine initialization */
3406
    while (!qemu_system_ready)
3407
        qemu_cond_timedwait(&qemu_system_cond, &qemu_global_mutex, 100);
3408

    
3409
    while (1) {
3410
        if (cpu_can_run(env))
3411
            qemu_cpu_exec(env);
3412
        qemu_wait_io_event(env);
3413
    }
3414

    
3415
    return NULL;
3416
}
3417

    
3418
static void tcg_cpu_exec(void);
3419

    
3420
static void *tcg_cpu_thread_fn(void *arg)
3421
{
3422
    CPUState *env = arg;
3423

    
3424
    block_io_signals();
3425
    qemu_thread_self(env->thread);
3426

    
3427
    /* signal CPU creation */
3428
    qemu_mutex_lock(&qemu_global_mutex);
3429
    for (env = first_cpu; env != NULL; env = env->next_cpu)
3430
        env->created = 1;
3431
    qemu_cond_signal(&qemu_cpu_cond);
3432

    
3433
    /* and wait for machine initialization */
3434
    while (!qemu_system_ready)
3435
        qemu_cond_timedwait(&qemu_system_cond, &qemu_global_mutex, 100);
3436

    
3437
    while (1) {
3438
        tcg_cpu_exec();
3439
        qemu_wait_io_event(cur_cpu);
3440
    }
3441

    
3442
    return NULL;
3443
}
3444

    
3445
void qemu_cpu_kick(void *_env)
3446
{
3447
    CPUState *env = _env;
3448
    qemu_cond_broadcast(env->halt_cond);
3449
    if (kvm_enabled())
3450
        qemu_thread_signal(env->thread, SIGUSR1);
3451
}
3452

    
3453
int qemu_cpu_self(void *_env)
3454
{
3455
    CPUState *env = _env;
3456
    QemuThread this;
3457
 
3458
    qemu_thread_self(&this);
3459
 
3460
    return qemu_thread_equal(&this, env->thread);
3461
}
3462

    
3463
static void cpu_signal(int sig)
3464
{
3465
    if (cpu_single_env)
3466
        cpu_exit(cpu_single_env);
3467
}
3468

    
3469
static void block_io_signals(void)
3470
{
3471
    sigset_t set;
3472
    struct sigaction sigact;
3473

    
3474
    sigemptyset(&set);
3475
    sigaddset(&set, SIGUSR2);
3476
    sigaddset(&set, SIGIO);
3477
    sigaddset(&set, SIGALRM);
3478
    pthread_sigmask(SIG_BLOCK, &set, NULL);
3479

    
3480
    sigemptyset(&set);
3481
    sigaddset(&set, SIGUSR1);
3482
    pthread_sigmask(SIG_UNBLOCK, &set, NULL);
3483

    
3484
    memset(&sigact, 0, sizeof(sigact));
3485
    sigact.sa_handler = cpu_signal;
3486
    sigaction(SIGUSR1, &sigact, NULL);
3487
}
3488

    
3489
static void unblock_io_signals(void)
3490
{
3491
    sigset_t set;
3492

    
3493
    sigemptyset(&set);
3494
    sigaddset(&set, SIGUSR2);
3495
    sigaddset(&set, SIGIO);
3496
    sigaddset(&set, SIGALRM);
3497
    pthread_sigmask(SIG_UNBLOCK, &set, NULL);
3498

    
3499
    sigemptyset(&set);
3500
    sigaddset(&set, SIGUSR1);
3501
    pthread_sigmask(SIG_BLOCK, &set, NULL);
3502
}
3503

    
3504
static void qemu_signal_lock(unsigned int msecs)
3505
{
3506
    qemu_mutex_lock(&qemu_fair_mutex);
3507

    
3508
    while (qemu_mutex_trylock(&qemu_global_mutex)) {
3509
        qemu_thread_signal(tcg_cpu_thread, SIGUSR1);
3510
        if (!qemu_mutex_timedlock(&qemu_global_mutex, msecs))
3511
            break;
3512
    }
3513
    qemu_mutex_unlock(&qemu_fair_mutex);
3514
}
3515

    
3516
void qemu_mutex_lock_iothread(void)
3517
{
3518
    if (kvm_enabled()) {
3519
        qemu_mutex_lock(&qemu_fair_mutex);
3520
        qemu_mutex_lock(&qemu_global_mutex);
3521
        qemu_mutex_unlock(&qemu_fair_mutex);
3522
    } else
3523
        qemu_signal_lock(100);
3524
}
3525

    
3526
void qemu_mutex_unlock_iothread(void)
3527
{
3528
    qemu_mutex_unlock(&qemu_global_mutex);
3529
}
3530

    
3531
static int all_vcpus_paused(void)
3532
{
3533
    CPUState *penv = first_cpu;
3534

    
3535
    while (penv) {
3536
        if (!penv->stopped)
3537
            return 0;
3538
        penv = (CPUState *)penv->next_cpu;
3539
    }
3540

    
3541
    return 1;
3542
}
3543

    
3544
static void pause_all_vcpus(void)
3545
{
3546
    CPUState *penv = first_cpu;
3547

    
3548
    while (penv) {
3549
        penv->stop = 1;
3550
        qemu_thread_signal(penv->thread, SIGUSR1);
3551
        qemu_cpu_kick(penv);
3552
        penv = (CPUState *)penv->next_cpu;
3553
    }
3554

    
3555
    while (!all_vcpus_paused()) {
3556
        qemu_cond_timedwait(&qemu_pause_cond, &qemu_global_mutex, 100);
3557
        penv = first_cpu;
3558
        while (penv) {
3559
            qemu_thread_signal(penv->thread, SIGUSR1);
3560
            penv = (CPUState *)penv->next_cpu;
3561
        }
3562
    }
3563
}
3564

    
3565
static void resume_all_vcpus(void)
3566
{
3567
    CPUState *penv = first_cpu;
3568

    
3569
    while (penv) {
3570
        penv->stop = 0;
3571
        penv->stopped = 0;
3572
        qemu_thread_signal(penv->thread, SIGUSR1);
3573
        qemu_cpu_kick(penv);
3574
        penv = (CPUState *)penv->next_cpu;
3575
    }
3576
}
3577

    
3578
static void tcg_init_vcpu(void *_env)
3579
{
3580
    CPUState *env = _env;
3581
    /* share a single thread for all cpus with TCG */
3582
    if (!tcg_cpu_thread) {
3583
        env->thread = qemu_mallocz(sizeof(QemuThread));
3584
        env->halt_cond = qemu_mallocz(sizeof(QemuCond));
3585
        qemu_cond_init(env->halt_cond);
3586
        qemu_thread_create(env->thread, tcg_cpu_thread_fn, env);
3587
        while (env->created == 0)
3588
            qemu_cond_timedwait(&qemu_cpu_cond, &qemu_global_mutex, 100);
3589
        tcg_cpu_thread = env->thread;
3590
        tcg_halt_cond = env->halt_cond;
3591
    } else {
3592
        env->thread = tcg_cpu_thread;
3593
        env->halt_cond = tcg_halt_cond;
3594
    }
3595
}
3596

    
3597
static void kvm_start_vcpu(CPUState *env)
3598
{
3599
    env->thread = qemu_mallocz(sizeof(QemuThread));
3600
    env->halt_cond = qemu_mallocz(sizeof(QemuCond));
3601
    qemu_cond_init(env->halt_cond);
3602
    qemu_thread_create(env->thread, kvm_cpu_thread_fn, env);
3603
    while (env->created == 0)
3604
        qemu_cond_timedwait(&qemu_cpu_cond, &qemu_global_mutex, 100);
3605
}
3606

    
3607
void qemu_init_vcpu(void *_env)
3608
{
3609
    CPUState *env = _env;
3610

    
3611
    env->nr_cores = smp_cores;
3612
    env->nr_threads = smp_threads;
3613
    if (kvm_enabled())
3614
        kvm_start_vcpu(env);
3615
    else
3616
        tcg_init_vcpu(env);
3617
}
3618

    
3619
void qemu_notify_event(void)
3620
{
3621
    qemu_event_increment();
3622
}
3623

    
3624
void vm_stop(int reason)
3625
{
3626
    QemuThread me;
3627
    qemu_thread_self(&me);
3628

    
3629
    if (!qemu_thread_equal(&me, &io_thread)) {
3630
        qemu_system_vmstop_request(reason);
3631
        /*
3632
         * FIXME: should not return to device code in case
3633
         * vm_stop() has been requested.
3634
         */
3635
        if (cpu_single_env) {
3636
            cpu_exit(cpu_single_env);
3637
            cpu_single_env->stop = 1;
3638
        }
3639
        return;
3640
    }
3641
    do_vm_stop(reason);
3642
}
3643

    
3644
#endif
3645

    
3646

    
3647
#ifdef _WIN32
3648
static void host_main_loop_wait(int *timeout)
3649
{
3650
    int ret, ret2, i;
3651
    PollingEntry *pe;
3652

    
3653

    
3654
    /* XXX: need to suppress polling by better using win32 events */
3655
    ret = 0;
3656
    for(pe = first_polling_entry; pe != NULL; pe = pe->next) {
3657
        ret |= pe->func(pe->opaque);
3658
    }
3659
    if (ret == 0) {
3660
        int err;
3661
        WaitObjects *w = &wait_objects;
3662

    
3663
        ret = WaitForMultipleObjects(w->num, w->events, FALSE, *timeout);
3664
        if (WAIT_OBJECT_0 + 0 <= ret && ret <= WAIT_OBJECT_0 + w->num - 1) {
3665
            if (w->func[ret - WAIT_OBJECT_0])
3666
                w->func[ret - WAIT_OBJECT_0](w->opaque[ret - WAIT_OBJECT_0]);
3667

    
3668
            /* Check for additional signaled events */
3669
            for(i = (ret - WAIT_OBJECT_0 + 1); i < w->num; i++) {
3670

    
3671
                /* Check if event is signaled */
3672
                ret2 = WaitForSingleObject(w->events[i], 0);
3673
                if(ret2 == WAIT_OBJECT_0) {
3674
                    if (w->func[i])
3675
                        w->func[i](w->opaque[i]);
3676
                } else if (ret2 == WAIT_TIMEOUT) {
3677
                } else {
3678
                    err = GetLastError();
3679
                    fprintf(stderr, "WaitForSingleObject error %d %d\n", i, err);
3680
                }
3681
            }
3682
        } else if (ret == WAIT_TIMEOUT) {
3683
        } else {
3684
            err = GetLastError();
3685
            fprintf(stderr, "WaitForMultipleObjects error %d %d\n", ret, err);
3686
        }
3687
    }
3688

    
3689
    *timeout = 0;
3690
}
3691
#else
3692
static void host_main_loop_wait(int *timeout)
3693
{
3694
}
3695
#endif
3696

    
3697
void main_loop_wait(int timeout)
3698
{
3699
    IOHandlerRecord *ioh;
3700
    fd_set rfds, wfds, xfds;
3701
    int ret, nfds;
3702
    struct timeval tv;
3703

    
3704
    qemu_bh_update_timeout(&timeout);
3705

    
3706
    host_main_loop_wait(&timeout);
3707

    
3708
    /* poll any events */
3709
    /* XXX: separate device handlers from system ones */
3710
    nfds = -1;
3711
    FD_ZERO(&rfds);
3712
    FD_ZERO(&wfds);
3713
    FD_ZERO(&xfds);
3714
    for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
3715
        if (ioh->deleted)
3716
            continue;
3717
        if (ioh->fd_read &&
3718
            (!ioh->fd_read_poll ||
3719
             ioh->fd_read_poll(ioh->opaque) != 0)) {
3720
            FD_SET(ioh->fd, &rfds);
3721
            if (ioh->fd > nfds)
3722
                nfds = ioh->fd;
3723
        }
3724
        if (ioh->fd_write) {
3725
            FD_SET(ioh->fd, &wfds);
3726
            if (ioh->fd > nfds)
3727
                nfds = ioh->fd;
3728
        }
3729
    }
3730

    
3731
    tv.tv_sec = timeout / 1000;
3732
    tv.tv_usec = (timeout % 1000) * 1000;
3733

    
3734
    slirp_select_fill(&nfds, &rfds, &wfds, &xfds);
3735

    
3736
    qemu_mutex_unlock_iothread();
3737
    ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv);
3738
    qemu_mutex_lock_iothread();
3739
    if (ret > 0) {
3740
        IOHandlerRecord **pioh;
3741

    
3742
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
3743
            if (!ioh->deleted && ioh->fd_read && FD_ISSET(ioh->fd, &rfds)) {
3744
                ioh->fd_read(ioh->opaque);
3745
            }
3746
            if (!ioh->deleted && ioh->fd_write && FD_ISSET(ioh->fd, &wfds)) {
3747
                ioh->fd_write(ioh->opaque);
3748
            }
3749
        }
3750

    
3751
        /* remove deleted IO handlers */
3752
        pioh = &first_io_handler;
3753
        while (*pioh) {
3754
            ioh = *pioh;
3755
            if (ioh->deleted) {
3756
                *pioh = ioh->next;
3757
                qemu_free(ioh);
3758
            } else
3759
                pioh = &ioh->next;
3760
        }
3761
    }
3762

    
3763
    slirp_select_poll(&rfds, &wfds, &xfds, (ret < 0));
3764

    
3765
    /* rearm timer, if not periodic */
3766
    if (alarm_timer->flags & ALARM_FLAG_EXPIRED) {
3767
        alarm_timer->flags &= ~ALARM_FLAG_EXPIRED;
3768
        qemu_rearm_alarm_timer(alarm_timer);
3769
    }
3770

    
3771
    /* vm time timers */
3772
    if (vm_running) {
3773
        if (!cur_cpu || likely(!(cur_cpu->singlestep_enabled & SSTEP_NOTIMER)))
3774
            qemu_run_timers(&active_timers[QEMU_CLOCK_VIRTUAL],
3775
                            qemu_get_clock(vm_clock));
3776
    }
3777

    
3778
    /* real time timers */
3779
    qemu_run_timers(&active_timers[QEMU_CLOCK_REALTIME],
3780
                    qemu_get_clock(rt_clock));
3781

    
3782
    qemu_run_timers(&active_timers[QEMU_CLOCK_HOST],
3783
                    qemu_get_clock(host_clock));
3784

    
3785
    /* Check bottom-halves last in case any of the earlier events triggered
3786
       them.  */
3787
    qemu_bh_poll();
3788

    
3789
}
3790

    
3791
static int qemu_cpu_exec(CPUState *env)
3792
{
3793
    int ret;
3794
#ifdef CONFIG_PROFILER
3795
    int64_t ti;
3796
#endif
3797

    
3798
#ifdef CONFIG_PROFILER
3799
    ti = profile_getclock();
3800
#endif
3801
    if (use_icount) {
3802
        int64_t count;
3803
        int decr;
3804
        qemu_icount -= (env->icount_decr.u16.low + env->icount_extra);
3805
        env->icount_decr.u16.low = 0;
3806
        env->icount_extra = 0;
3807
        count = qemu_next_deadline();
3808
        count = (count + (1 << icount_time_shift) - 1)
3809
                >> icount_time_shift;
3810
        qemu_icount += count;
3811
        decr = (count > 0xffff) ? 0xffff : count;
3812
        count -= decr;
3813
        env->icount_decr.u16.low = decr;
3814
        env->icount_extra = count;
3815
    }
3816
    ret = cpu_exec(env);
3817
#ifdef CONFIG_PROFILER
3818
    qemu_time += profile_getclock() - ti;
3819
#endif
3820
    if (use_icount) {
3821
        /* Fold pending instructions back into the
3822
           instruction counter, and clear the interrupt flag.  */
3823
        qemu_icount -= (env->icount_decr.u16.low
3824
                        + env->icount_extra);
3825
        env->icount_decr.u32 = 0;
3826
        env->icount_extra = 0;
3827
    }
3828
    return ret;
3829
}
3830

    
3831
static void tcg_cpu_exec(void)
3832
{
3833
    int ret = 0;
3834

    
3835
    if (next_cpu == NULL)
3836
        next_cpu = first_cpu;
3837
    for (; next_cpu != NULL; next_cpu = next_cpu->next_cpu) {
3838
        CPUState *env = cur_cpu = next_cpu;
3839

    
3840
        if (!vm_running)
3841
            break;
3842
        if (timer_alarm_pending) {
3843
            timer_alarm_pending = 0;
3844
            break;
3845
        }
3846
        if (cpu_can_run(env))
3847
            ret = qemu_cpu_exec(env);
3848
        if (ret == EXCP_DEBUG) {
3849
            gdb_set_stop_cpu(env);
3850
            debug_requested = 1;
3851
            break;
3852
        }
3853
    }
3854
}
3855

    
3856
static int cpu_has_work(CPUState *env)
3857
{
3858
    if (env->stop)
3859
        return 1;
3860
    if (env->stopped)
3861
        return 0;
3862
    if (!env->halted)
3863
        return 1;
3864
    if (qemu_cpu_has_work(env))
3865
        return 1;
3866
    return 0;
3867
}
3868

    
3869
static int tcg_has_work(void)
3870
{
3871
    CPUState *env;
3872

    
3873
    for (env = first_cpu; env != NULL; env = env->next_cpu)
3874
        if (cpu_has_work(env))
3875
            return 1;
3876
    return 0;
3877
}
3878

    
3879
static int qemu_calculate_timeout(void)
3880
{
3881
#ifndef CONFIG_IOTHREAD
3882
    int timeout;
3883

    
3884
    if (!vm_running)
3885
        timeout = 5000;
3886
    else if (tcg_has_work())
3887
        timeout = 0;
3888
    else if (!use_icount)
3889
        timeout = 5000;
3890
    else {
3891
     /* XXX: use timeout computed from timers */
3892
        int64_t add;
3893
        int64_t delta;
3894
        /* Advance virtual time to the next event.  */
3895
        if (use_icount == 1) {
3896
            /* When not using an adaptive execution frequency
3897
               we tend to get badly out of sync with real time,
3898
               so just delay for a reasonable amount of time.  */
3899
            delta = 0;
3900
        } else {
3901
            delta = cpu_get_icount() - cpu_get_clock();
3902
        }
3903
        if (delta > 0) {
3904
            /* If virtual time is ahead of real time then just
3905
               wait for IO.  */
3906
            timeout = (delta / 1000000) + 1;
3907
        } else {
3908
            /* Wait for either IO to occur or the next
3909
               timer event.  */
3910
            add = qemu_next_deadline();
3911
            /* We advance the timer before checking for IO.
3912
               Limit the amount we advance so that early IO
3913
               activity won't get the guest too far ahead.  */
3914
            if (add > 10000000)
3915
                add = 10000000;
3916
            delta += add;
3917
            add = (add + (1 << icount_time_shift) - 1)
3918
                  >> icount_time_shift;
3919
            qemu_icount += add;
3920
            timeout = delta / 1000000;
3921
            if (timeout < 0)
3922
                timeout = 0;
3923
        }
3924
    }
3925

    
3926
    return timeout;
3927
#else /* CONFIG_IOTHREAD */
3928
    return 1000;
3929
#endif
3930
}
3931

    
3932
static int vm_can_run(void)
3933
{
3934
    if (powerdown_requested)
3935
        return 0;
3936
    if (reset_requested)
3937
        return 0;
3938
    if (shutdown_requested)
3939
        return 0;
3940
    if (debug_requested)
3941
        return 0;
3942
    return 1;
3943
}
3944

    
3945
qemu_irq qemu_system_powerdown;
3946

    
3947
static void main_loop(void)
3948
{
3949
    int r;
3950

    
3951
#ifdef CONFIG_IOTHREAD
3952
    qemu_system_ready = 1;
3953
    qemu_cond_broadcast(&qemu_system_cond);
3954
#endif
3955

    
3956
    for (;;) {
3957
        do {
3958
#ifdef CONFIG_PROFILER
3959
            int64_t ti;
3960
#endif
3961
#ifndef CONFIG_IOTHREAD
3962
            tcg_cpu_exec();
3963
#endif
3964
#ifdef CONFIG_PROFILER
3965
            ti = profile_getclock();
3966
#endif
3967
            main_loop_wait(qemu_calculate_timeout());
3968
#ifdef CONFIG_PROFILER
3969
            dev_time += profile_getclock() - ti;
3970
#endif
3971
        } while (vm_can_run());
3972

    
3973
        if (qemu_debug_requested()) {
3974
            monitor_protocol_event(QEVENT_DEBUG, NULL);
3975
            vm_stop(EXCP_DEBUG);
3976
        }
3977
        if (qemu_shutdown_requested()) {
3978
            monitor_protocol_event(QEVENT_SHUTDOWN, NULL);
3979
            if (no_shutdown) {
3980
                vm_stop(0);
3981
                no_shutdown = 0;
3982
            } else
3983
                break;
3984
        }
3985
        if (qemu_reset_requested()) {
3986
            monitor_protocol_event(QEVENT_RESET, NULL);
3987
            pause_all_vcpus();
3988
            qemu_system_reset();
3989
            resume_all_vcpus();
3990
        }
3991
        if (qemu_powerdown_requested()) {
3992
            monitor_protocol_event(QEVENT_POWERDOWN, NULL);
3993
            qemu_irq_raise(qemu_system_powerdown);
3994
        }
3995
        if ((r = qemu_vmstop_requested())) {
3996
            monitor_protocol_event(QEVENT_STOP, NULL);
3997
            vm_stop(r);
3998
        }
3999
    }
4000
    pause_all_vcpus();
4001
}
4002

    
4003
static void version(void)
4004
{
4005
    printf("QEMU PC emulator version " QEMU_VERSION QEMU_PKGVERSION ", Copyright (c) 2003-2008 Fabrice Bellard\n");
4006
}
4007

    
4008
static void help(int exitcode)
4009
{
4010
    version();
4011
    printf("usage: %s [options] [disk_image]\n"
4012
           "\n"
4013
           "'disk_image' is a raw hard image image for IDE hard disk 0\n"
4014
           "\n"
4015
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4016
           opt_help
4017
#define DEFHEADING(text) stringify(text) "\n"
4018
#include "qemu-options.h"
4019
#undef DEF
4020
#undef DEFHEADING
4021
#undef GEN_DOCS
4022
           "\n"
4023
           "During emulation, the following keys are useful:\n"
4024
           "ctrl-alt-f      toggle full screen\n"
4025
           "ctrl-alt-n      switch to virtual console 'n'\n"
4026
           "ctrl-alt        toggle mouse and keyboard grab\n"
4027
           "\n"
4028
           "When using -nographic, press 'ctrl-a h' to get some help.\n"
4029
           ,
4030
           "qemu",
4031
           DEFAULT_RAM_SIZE,
4032
#ifndef _WIN32
4033
           DEFAULT_NETWORK_SCRIPT,
4034
           DEFAULT_NETWORK_DOWN_SCRIPT,
4035
#endif
4036
           DEFAULT_GDBSTUB_PORT,
4037
           "/tmp/qemu.log");
4038
    exit(exitcode);
4039
}
4040

    
4041
#define HAS_ARG 0x0001
4042

    
4043
enum {
4044
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4045
    opt_enum,
4046
#define DEFHEADING(text)
4047
#include "qemu-options.h"
4048
#undef DEF
4049
#undef DEFHEADING
4050
#undef GEN_DOCS
4051
};
4052

    
4053
typedef struct QEMUOption {
4054
    const char *name;
4055
    int flags;
4056
    int index;
4057
} QEMUOption;
4058

    
4059
static const QEMUOption qemu_options[] = {
4060
    { "h", 0, QEMU_OPTION_h },
4061
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4062
    { option, opt_arg, opt_enum },
4063
#define DEFHEADING(text)
4064
#include "qemu-options.h"
4065
#undef DEF
4066
#undef DEFHEADING
4067
#undef GEN_DOCS
4068
    { NULL },
4069
};
4070

    
4071
#ifdef HAS_AUDIO
4072
struct soundhw soundhw[] = {
4073
#ifdef HAS_AUDIO_CHOICE
4074
#if defined(TARGET_I386) || defined(TARGET_MIPS)
4075
    {
4076
        "pcspk",
4077
        "PC speaker",
4078
        0,
4079
        1,
4080
        { .init_isa = pcspk_audio_init }
4081
    },
4082
#endif
4083

    
4084
#ifdef CONFIG_SB16
4085
    {
4086
        "sb16",
4087
        "Creative Sound Blaster 16",
4088
        0,
4089
        1,
4090
        { .init_isa = SB16_init }
4091
    },
4092
#endif
4093

    
4094
#ifdef CONFIG_CS4231A
4095
    {
4096
        "cs4231a",
4097
        "CS4231A",
4098
        0,
4099
        1,
4100
        { .init_isa = cs4231a_init }
4101
    },
4102
#endif
4103

    
4104
#ifdef CONFIG_ADLIB
4105
    {
4106
        "adlib",
4107
#ifdef HAS_YMF262
4108
        "Yamaha YMF262 (OPL3)",
4109
#else
4110
        "Yamaha YM3812 (OPL2)",
4111
#endif
4112
        0,
4113
        1,
4114
        { .init_isa = Adlib_init }
4115
    },
4116
#endif
4117

    
4118
#ifdef CONFIG_GUS
4119
    {
4120
        "gus",
4121
        "Gravis Ultrasound GF1",
4122
        0,
4123
        1,
4124
        { .init_isa = GUS_init }
4125
    },
4126
#endif
4127

    
4128
#ifdef CONFIG_AC97
4129
    {
4130
        "ac97",
4131
        "Intel 82801AA AC97 Audio",
4132
        0,
4133
        0,
4134
        { .init_pci = ac97_init }
4135
    },
4136
#endif
4137

    
4138
#ifdef CONFIG_ES1370
4139
    {
4140
        "es1370",
4141
        "ENSONIQ AudioPCI ES1370",
4142
        0,
4143
        0,
4144
        { .init_pci = es1370_init }
4145
    },
4146
#endif
4147

    
4148
#endif /* HAS_AUDIO_CHOICE */
4149

    
4150
    { NULL, NULL, 0, 0, { NULL } }
4151
};
4152

    
4153
static void select_soundhw (const char *optarg)
4154
{
4155
    struct soundhw *c;
4156

    
4157
    if (*optarg == '?') {
4158
    show_valid_cards:
4159

    
4160
        printf ("Valid sound card names (comma separated):\n");
4161
        for (c = soundhw; c->name; ++c) {
4162
            printf ("%-11s %s\n", c->name, c->descr);
4163
        }
4164
        printf ("\n-soundhw all will enable all of the above\n");
4165
        exit (*optarg != '?');
4166
    }
4167
    else {
4168
        size_t l;
4169
        const char *p;
4170
        char *e;
4171
        int bad_card = 0;
4172

    
4173
        if (!strcmp (optarg, "all")) {
4174
            for (c = soundhw; c->name; ++c) {
4175
                c->enabled = 1;
4176
            }
4177
            return;
4178
        }
4179

    
4180
        p = optarg;
4181
        while (*p) {
4182
            e = strchr (p, ',');
4183
            l = !e ? strlen (p) : (size_t) (e - p);
4184

    
4185
            for (c = soundhw; c->name; ++c) {
4186
                if (!strncmp (c->name, p, l) && !c->name[l]) {
4187
                    c->enabled = 1;
4188
                    break;
4189
                }
4190
            }
4191

    
4192
            if (!c->name) {
4193
                if (l > 80) {
4194
                    fprintf (stderr,
4195
                             "Unknown sound card name (too big to show)\n");
4196
                }
4197
                else {
4198
                    fprintf (stderr, "Unknown sound card name `%.*s'\n",
4199
                             (int) l, p);
4200
                }
4201
                bad_card = 1;
4202
            }
4203
            p += l + (e != NULL);
4204
        }
4205

    
4206
        if (bad_card)
4207
            goto show_valid_cards;
4208
    }
4209
}
4210
#endif
4211

    
4212
static void select_vgahw (const char *p)
4213
{
4214
    const char *opts;
4215

    
4216
    default_vga = 0;
4217
    vga_interface_type = VGA_NONE;
4218
    if (strstart(p, "std", &opts)) {
4219
        vga_interface_type = VGA_STD;
4220
    } else if (strstart(p, "cirrus", &opts)) {
4221
        vga_interface_type = VGA_CIRRUS;
4222
    } else if (strstart(p, "vmware", &opts)) {
4223
        vga_interface_type = VGA_VMWARE;
4224
    } else if (strstart(p, "xenfb", &opts)) {
4225
        vga_interface_type = VGA_XENFB;
4226
    } else if (!strstart(p, "none", &opts)) {
4227
    invalid_vga:
4228
        fprintf(stderr, "Unknown vga type: %s\n", p);
4229
        exit(1);
4230
    }
4231
    while (*opts) {
4232
        const char *nextopt;
4233

    
4234
        if (strstart(opts, ",retrace=", &nextopt)) {
4235
            opts = nextopt;
4236
            if (strstart(opts, "dumb", &nextopt))
4237
                vga_retrace_method = VGA_RETRACE_DUMB;
4238
            else if (strstart(opts, "precise", &nextopt))
4239
                vga_retrace_method = VGA_RETRACE_PRECISE;
4240
            else goto invalid_vga;
4241
        } else goto invalid_vga;
4242
        opts = nextopt;
4243
    }
4244
}
4245

    
4246
#ifdef TARGET_I386
4247
static int balloon_parse(const char *arg)
4248
{
4249
    QemuOpts *opts;
4250

    
4251
    if (strcmp(arg, "none") == 0) {
4252
        return 0;
4253
    }
4254

    
4255
    if (!strncmp(arg, "virtio", 6)) {
4256
        if (arg[6] == ',') {
4257
            /* have params -> parse them */
4258
            opts = qemu_opts_parse(&qemu_device_opts, arg+7, NULL);
4259
            if (!opts)
4260
                return  -1;
4261
        } else {
4262
            /* create empty opts */
4263
            opts = qemu_opts_create(&qemu_device_opts, NULL, 0);
4264
        }
4265
        qemu_opt_set(opts, "driver", "virtio-balloon-pci");
4266
        return 0;
4267
    }
4268

    
4269
    return -1;
4270
}
4271
#endif
4272

    
4273
#ifdef _WIN32
4274
static BOOL WINAPI qemu_ctrl_handler(DWORD type)
4275
{
4276
    exit(STATUS_CONTROL_C_EXIT);
4277
    return TRUE;
4278
}
4279
#endif
4280

    
4281
int qemu_uuid_parse(const char *str, uint8_t *uuid)
4282
{
4283
    int ret;
4284

    
4285
    if(strlen(str) != 36)
4286
        return -1;
4287

    
4288
    ret = sscanf(str, UUID_FMT, &uuid[0], &uuid[1], &uuid[2], &uuid[3],
4289
            &uuid[4], &uuid[5], &uuid[6], &uuid[7], &uuid[8], &uuid[9],
4290
            &uuid[10], &uuid[11], &uuid[12], &uuid[13], &uuid[14], &uuid[15]);
4291

    
4292
    if(ret != 16)
4293
        return -1;
4294

    
4295
#ifdef TARGET_I386
4296
    smbios_add_field(1, offsetof(struct smbios_type_1, uuid), 16, uuid);
4297
#endif
4298

    
4299
    return 0;
4300
}
4301

    
4302
#ifndef _WIN32
4303

    
4304
static void termsig_handler(int signal)
4305
{
4306
    qemu_system_shutdown_request();
4307
}
4308

    
4309
static void sigchld_handler(int signal)
4310
{
4311
    waitpid(-1, NULL, WNOHANG);
4312
}
4313

    
4314
static void sighandler_setup(void)
4315
{
4316
    struct sigaction act;
4317

    
4318
    memset(&act, 0, sizeof(act));
4319
    act.sa_handler = termsig_handler;
4320
    sigaction(SIGINT,  &act, NULL);
4321
    sigaction(SIGHUP,  &act, NULL);
4322
    sigaction(SIGTERM, &act, NULL);
4323

    
4324
    act.sa_handler = sigchld_handler;
4325
    act.sa_flags = SA_NOCLDSTOP;
4326
    sigaction(SIGCHLD, &act, NULL);
4327
}
4328

    
4329
#endif
4330

    
4331
#ifdef _WIN32
4332
/* Look for support files in the same directory as the executable.  */
4333
static char *find_datadir(const char *argv0)
4334
{
4335
    char *p;
4336
    char buf[MAX_PATH];
4337
    DWORD len;
4338

    
4339
    len = GetModuleFileName(NULL, buf, sizeof(buf) - 1);
4340
    if (len == 0) {
4341
        return NULL;
4342
    }
4343

    
4344
    buf[len] = 0;
4345
    p = buf + len - 1;
4346
    while (p != buf && *p != '\\')
4347
        p--;
4348
    *p = 0;
4349
    if (access(buf, R_OK) == 0) {
4350
        return qemu_strdup(buf);
4351
    }
4352
    return NULL;
4353
}
4354
#else /* !_WIN32 */
4355

    
4356
/* Find a likely location for support files using the location of the binary.
4357
   For installed binaries this will be "$bindir/../share/qemu".  When
4358
   running from the build tree this will be "$bindir/../pc-bios".  */
4359
#define SHARE_SUFFIX "/share/qemu"
4360
#define BUILD_SUFFIX "/pc-bios"
4361
static char *find_datadir(const char *argv0)
4362
{
4363
    char *dir;
4364
    char *p = NULL;
4365
    char *res;
4366
    char buf[PATH_MAX];
4367
    size_t max_len;
4368

    
4369
#if defined(__linux__)
4370
    {
4371
        int len;
4372
        len = readlink("/proc/self/exe", buf, sizeof(buf) - 1);
4373
        if (len > 0) {
4374
            buf[len] = 0;
4375
            p = buf;
4376
        }
4377
    }
4378
#elif defined(__FreeBSD__)
4379
    {
4380
        int len;
4381
        len = readlink("/proc/curproc/file", buf, sizeof(buf) - 1);
4382
        if (len > 0) {
4383
            buf[len] = 0;
4384
            p = buf;
4385
        }
4386
    }
4387
#endif
4388
    /* If we don't have any way of figuring out the actual executable
4389
       location then try argv[0].  */
4390
    if (!p) {
4391
        p = realpath(argv0, buf);
4392
        if (!p) {
4393
            return NULL;
4394
        }
4395
    }
4396
    dir = dirname(p);
4397
    dir = dirname(dir);
4398

    
4399
    max_len = strlen(dir) +
4400
        MAX(strlen(SHARE_SUFFIX), strlen(BUILD_SUFFIX)) + 1;
4401
    res = qemu_mallocz(max_len);
4402
    snprintf(res, max_len, "%s%s", dir, SHARE_SUFFIX);
4403
    if (access(res, R_OK)) {
4404
        snprintf(res, max_len, "%s%s", dir, BUILD_SUFFIX);
4405
        if (access(res, R_OK)) {
4406
            qemu_free(res);
4407
            res = NULL;
4408
        }
4409
    }
4410

    
4411
    return res;
4412
}
4413
#undef SHARE_SUFFIX
4414
#undef BUILD_SUFFIX
4415
#endif
4416

    
4417
char *qemu_find_file(int type, const char *name)
4418
{
4419
    int len;
4420
    const char *subdir;
4421
    char *buf;
4422

    
4423
    /* If name contains path separators then try it as a straight path.  */
4424
    if ((strchr(name, '/') || strchr(name, '\\'))
4425
        && access(name, R_OK) == 0) {
4426
        return qemu_strdup(name);
4427
    }
4428
    switch (type) {
4429
    case QEMU_FILE_TYPE_BIOS:
4430
        subdir = "";
4431
        break;
4432
    case QEMU_FILE_TYPE_KEYMAP:
4433
        subdir = "keymaps/";
4434
        break;
4435
    default:
4436
        abort();
4437
    }
4438
    len = strlen(data_dir) + strlen(name) + strlen(subdir) + 2;
4439
    buf = qemu_mallocz(len);
4440
    snprintf(buf, len, "%s/%s%s", data_dir, subdir, name);
4441
    if (access(buf, R_OK)) {
4442
        qemu_free(buf);
4443
        return NULL;
4444
    }
4445
    return buf;
4446
}
4447

    
4448
static int device_init_func(QemuOpts *opts, void *opaque)
4449
{
4450
    DeviceState *dev;
4451

    
4452
    dev = qdev_device_add(opts);
4453
    if (!dev)
4454
        return -1;
4455
    return 0;
4456
}
4457

    
4458
static int chardev_init_func(QemuOpts *opts, void *opaque)
4459
{
4460
    CharDriverState *chr;
4461

    
4462
    chr = qemu_chr_open_opts(opts, NULL);
4463
    if (!chr)
4464
        return -1;
4465
    return 0;
4466
}
4467

    
4468
static int mon_init_func(QemuOpts *opts, void *opaque)
4469
{
4470
    CharDriverState *chr;
4471
    const char *chardev;
4472
    const char *mode;
4473
    int flags;
4474

    
4475
    mode = qemu_opt_get(opts, "mode");
4476
    if (mode == NULL) {
4477
        mode = "readline";
4478
    }
4479
    if (strcmp(mode, "readline") == 0) {
4480
        flags = MONITOR_USE_READLINE;
4481
    } else if (strcmp(mode, "control") == 0) {
4482
        flags = MONITOR_USE_CONTROL;
4483
    } else {
4484
        fprintf(stderr, "unknown monitor mode \"%s\"\n", mode);
4485
        exit(1);
4486
    }
4487

    
4488
    if (qemu_opt_get_bool(opts, "default", 0))
4489
        flags |= MONITOR_IS_DEFAULT;
4490

    
4491
    chardev = qemu_opt_get(opts, "chardev");
4492
    chr = qemu_chr_find(chardev);
4493
    if (chr == NULL) {
4494
        fprintf(stderr, "chardev \"%s\" not found\n", chardev);
4495
        exit(1);
4496
    }
4497

    
4498
    monitor_init(chr, flags);
4499
    return 0;
4500
}
4501

    
4502
static void monitor_parse(const char *optarg, const char *mode)
4503
{
4504
    static int monitor_device_index = 0;
4505
    QemuOpts *opts;
4506
    const char *p;
4507
    char label[32];
4508
    int def = 0;
4509

    
4510
    if (strstart(optarg, "chardev:", &p)) {
4511
        snprintf(label, sizeof(label), "%s", p);
4512
    } else {
4513
        if (monitor_device_index) {
4514
            snprintf(label, sizeof(label), "monitor%d",
4515
                     monitor_device_index);
4516
        } else {
4517
            snprintf(label, sizeof(label), "monitor");
4518
            def = 1;
4519
        }
4520
        opts = qemu_chr_parse_compat(label, optarg);
4521
        if (!opts) {
4522
            fprintf(stderr, "parse error: %s\n", optarg);
4523
            exit(1);
4524
        }
4525
    }
4526

    
4527
    opts = qemu_opts_create(&qemu_mon_opts, label, 1);
4528
    if (!opts) {
4529
        fprintf(stderr, "duplicate chardev: %s\n", label);
4530
        exit(1);
4531
    }
4532
    qemu_opt_set(opts, "mode", mode);
4533
    qemu_opt_set(opts, "chardev", label);
4534
    if (def)
4535
        qemu_opt_set(opts, "default", "on");
4536
    monitor_device_index++;
4537
}
4538

    
4539
struct device_config {
4540
    enum {
4541
        DEV_USB,       /* -usbdevice     */
4542
        DEV_BT,        /* -bt            */
4543
        DEV_SERIAL,    /* -serial        */
4544
        DEV_PARALLEL,  /* -parallel      */
4545
        DEV_VIRTCON,   /* -virtioconsole */
4546
        DEV_DEBUGCON,  /* -debugcon */
4547
    } type;
4548
    const char *cmdline;
4549
    QTAILQ_ENTRY(device_config) next;
4550
};
4551
QTAILQ_HEAD(, device_config) device_configs = QTAILQ_HEAD_INITIALIZER(device_configs);
4552

    
4553
static void add_device_config(int type, const char *cmdline)
4554
{
4555
    struct device_config *conf;
4556

    
4557
    conf = qemu_mallocz(sizeof(*conf));
4558
    conf->type = type;
4559
    conf->cmdline = cmdline;
4560
    QTAILQ_INSERT_TAIL(&device_configs, conf, next);
4561
}
4562

    
4563
static int foreach_device_config(int type, int (*func)(const char *cmdline))
4564
{
4565
    struct device_config *conf;
4566
    int rc;
4567

    
4568
    QTAILQ_FOREACH(conf, &device_configs, next) {
4569
        if (conf->type != type)
4570
            continue;
4571
        rc = func(conf->cmdline);
4572
        if (0 != rc)
4573
            return rc;
4574
    }
4575
    return 0;
4576
}
4577

    
4578
static int serial_parse(const char *devname)
4579
{
4580
    static int index = 0;
4581
    char label[32];
4582

    
4583
    if (strcmp(devname, "none") == 0)
4584
        return 0;
4585
    if (index == MAX_SERIAL_PORTS) {
4586
        fprintf(stderr, "qemu: too many serial ports\n");
4587
        exit(1);
4588
    }
4589
    snprintf(label, sizeof(label), "serial%d", index);
4590
    serial_hds[index] = qemu_chr_open(label, devname, NULL);
4591
    if (!serial_hds[index]) {
4592
        fprintf(stderr, "qemu: could not open serial device '%s': %s\n",
4593
                devname, strerror(errno));
4594
        return -1;
4595
    }
4596
    index++;
4597
    return 0;
4598
}
4599

    
4600
static int parallel_parse(const char *devname)
4601
{
4602
    static int index = 0;
4603
    char label[32];
4604

    
4605
    if (strcmp(devname, "none") == 0)
4606
        return 0;
4607
    if (index == MAX_PARALLEL_PORTS) {
4608
        fprintf(stderr, "qemu: too many parallel ports\n");
4609
        exit(1);
4610
    }
4611
    snprintf(label, sizeof(label), "parallel%d", index);
4612
    parallel_hds[index] = qemu_chr_open(label, devname, NULL);
4613
    if (!parallel_hds[index]) {
4614
        fprintf(stderr, "qemu: could not open parallel device '%s': %s\n",
4615
                devname, strerror(errno));
4616
        return -1;
4617
    }
4618
    index++;
4619
    return 0;
4620
}
4621

    
4622
static int virtcon_parse(const char *devname)
4623
{
4624
    static int index = 0;
4625
    char label[32];
4626

    
4627
    if (strcmp(devname, "none") == 0)
4628
        return 0;
4629
    if (index == MAX_VIRTIO_CONSOLES) {
4630
        fprintf(stderr, "qemu: too many virtio consoles\n");
4631
        exit(1);
4632
    }
4633
    snprintf(label, sizeof(label), "virtcon%d", index);
4634
    virtcon_hds[index] = qemu_chr_open(label, devname, NULL);
4635
    if (!virtcon_hds[index]) {
4636
        fprintf(stderr, "qemu: could not open virtio console '%s': %s\n",
4637
                devname, strerror(errno));
4638
        return -1;
4639
    }
4640
    index++;
4641
    return 0;
4642
}
4643

    
4644
static int debugcon_parse(const char *devname)
4645
{   
4646
    QemuOpts *opts;
4647

    
4648
    if (!qemu_chr_open("debugcon", devname, NULL)) {
4649
        exit(1);
4650
    }
4651
    opts = qemu_opts_create(&qemu_device_opts, "debugcon", 1);
4652
    if (!opts) {
4653
        fprintf(stderr, "qemu: already have a debugcon device\n");
4654
        exit(1);
4655
    }
4656
    qemu_opt_set(opts, "driver", "isa-debugcon");
4657
    qemu_opt_set(opts, "chardev", "debugcon");
4658
    return 0;
4659
}
4660

    
4661
int main(int argc, char **argv, char **envp)
4662
{
4663
    const char *gdbstub_dev = NULL;
4664
    uint32_t boot_devices_bitmap = 0;
4665
    int i;
4666
    int snapshot, linux_boot, net_boot;
4667
    const char *initrd_filename;
4668
    const char *kernel_filename, *kernel_cmdline;
4669
    char boot_devices[33] = "cad"; /* default to HD->floppy->CD-ROM */
4670
    DisplayState *ds;
4671
    DisplayChangeListener *dcl;
4672
    int cyls, heads, secs, translation;
4673
    QemuOpts *hda_opts = NULL, *opts;
4674
    int optind;
4675
    const char *r, *optarg;
4676
    const char *loadvm = NULL;
4677
    QEMUMachine *machine;
4678
    const char *cpu_model;
4679
#ifndef _WIN32
4680
    int fds[2];
4681
#endif
4682
    int tb_size;
4683
    const char *pid_file = NULL;
4684
    const char *incoming = NULL;
4685
#ifndef _WIN32
4686
    int fd = 0;
4687
    struct passwd *pwd = NULL;
4688
    const char *chroot_dir = NULL;
4689
    const char *run_as = NULL;
4690
#endif
4691
    CPUState *env;
4692
    int show_vnc_port = 0;
4693

    
4694
    init_clocks();
4695

    
4696
    qemu_errors_to_file(stderr);
4697
    qemu_cache_utils_init(envp);
4698

    
4699
    QLIST_INIT (&vm_change_state_head);
4700
#ifndef _WIN32
4701
    {
4702
        struct sigaction act;
4703
        sigfillset(&act.sa_mask);
4704
        act.sa_flags = 0;
4705
        act.sa_handler = SIG_IGN;
4706
        sigaction(SIGPIPE, &act, NULL);
4707
    }
4708
#else
4709
    SetConsoleCtrlHandler(qemu_ctrl_handler, TRUE);
4710
    /* Note: cpu_interrupt() is currently not SMP safe, so we force
4711
       QEMU to run on a single CPU */
4712
    {
4713
        HANDLE h;
4714
        DWORD mask, smask;
4715
        int i;
4716
        h = GetCurrentProcess();
4717
        if (GetProcessAffinityMask(h, &mask, &smask)) {
4718
            for(i = 0; i < 32; i++) {
4719
                if (mask & (1 << i))
4720
                    break;
4721
            }
4722
            if (i != 32) {
4723
                mask = 1 << i;
4724
                SetProcessAffinityMask(h, mask);
4725
            }
4726
        }
4727
    }
4728
#endif
4729

    
4730
    module_call_init(MODULE_INIT_MACHINE);
4731
    machine = find_default_machine();
4732
    cpu_model = NULL;
4733
    initrd_filename = NULL;
4734
    ram_size = 0;
4735
    snapshot = 0;
4736
    kernel_filename = NULL;
4737
    kernel_cmdline = "";
4738
    cyls = heads = secs = 0;
4739
    translation = BIOS_ATA_TRANSLATION_AUTO;
4740

    
4741
    for (i = 0; i < MAX_NODES; i++) {
4742
        node_mem[i] = 0;
4743
        node_cpumask[i] = 0;
4744
    }
4745

    
4746
    nb_numa_nodes = 0;
4747
    nb_nics = 0;
4748

    
4749
    tb_size = 0;
4750
    autostart= 1;
4751

    
4752
    optind = 1;
4753
    for(;;) {
4754
        if (optind >= argc)
4755
            break;
4756
        r = argv[optind];
4757
        if (r[0] != '-') {
4758
            hda_opts = drive_add(argv[optind++], HD_ALIAS, 0);
4759
        } else {
4760
            const QEMUOption *popt;
4761

    
4762
            optind++;
4763
            /* Treat --foo the same as -foo.  */
4764
            if (r[1] == '-')
4765
                r++;
4766
            popt = qemu_options;
4767
            for(;;) {
4768
                if (!popt->name) {
4769
                    fprintf(stderr, "%s: invalid option -- '%s'\n",
4770
                            argv[0], r);
4771
                    exit(1);
4772
                }
4773
                if (!strcmp(popt->name, r + 1))
4774
                    break;
4775
                popt++;
4776
            }
4777
            if (popt->flags & HAS_ARG) {
4778
                if (optind >= argc) {
4779
                    fprintf(stderr, "%s: option '%s' requires an argument\n",
4780
                            argv[0], r);
4781
                    exit(1);
4782
                }
4783
                optarg = argv[optind++];
4784
            } else {
4785
                optarg = NULL;
4786
            }
4787

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

    
4945
                    if (!strchr(optarg, '=')) {
4946
                        legacy = 1;
4947
                        pstrcpy(buf, sizeof(buf), optarg);
4948
                    } else if (check_params(buf, sizeof(buf), params, optarg) < 0) {
4949
                        fprintf(stderr,
4950
                                "qemu: unknown boot parameter '%s' in '%s'\n",
4951
                                buf, optarg);
4952
                        exit(1);
4953
                    }
4954

    
4955
                    if (legacy ||
4956
                        get_param_value(buf, sizeof(buf), "order", optarg)) {
4957
                        boot_devices_bitmap = parse_bootdevices(buf);
4958
                        pstrcpy(boot_devices, sizeof(boot_devices), buf);
4959
                    }
4960
                    if (!legacy) {
4961
                        if (get_param_value(buf, sizeof(buf),
4962
                                            "once", optarg)) {
4963
                            boot_devices_bitmap |= parse_bootdevices(buf);
4964
                            standard_boot_devices = qemu_strdup(boot_devices);
4965
                            pstrcpy(boot_devices, sizeof(boot_devices), buf);
4966
                            qemu_register_reset(restore_boot_devices,
4967
                                                standard_boot_devices);
4968
                        }
4969
                        if (get_param_value(buf, sizeof(buf),
4970
                                            "menu", optarg)) {
4971
                            if (!strcmp(buf, "on")) {
4972
                                boot_menu = 1;
4973
                            } else if (!strcmp(buf, "off")) {
4974
                                boot_menu = 0;
4975
                            } else {
4976
                                fprintf(stderr,
4977
                                        "qemu: invalid option value '%s'\n",
4978
                                        buf);
4979
                                exit(1);
4980
                            }
4981
                        }
4982
                    }
4983
                }
4984
                break;
4985
            case QEMU_OPTION_fda:
4986
            case QEMU_OPTION_fdb:
4987
                drive_add(optarg, FD_ALIAS, popt->index - QEMU_OPTION_fda);
4988
                break;
4989
#ifdef TARGET_I386
4990
            case QEMU_OPTION_no_fd_bootchk:
4991
                fd_bootchk = 0;
4992
                break;
4993
#endif
4994
            case QEMU_OPTION_netdev:
4995
                if (net_client_parse(&qemu_netdev_opts, optarg) == -1) {
4996
                    exit(1);
4997
                }
4998
                break;
4999
            case QEMU_OPTION_net:
5000
                if (net_client_parse(&qemu_net_opts, optarg) == -1) {
5001
                    exit(1);
5002
                }
5003
                break;
5004
#ifdef CONFIG_SLIRP
5005
            case QEMU_OPTION_tftp:
5006
                legacy_tftp_prefix = optarg;
5007
                break;
5008
            case QEMU_OPTION_bootp:
5009
                legacy_bootp_filename = optarg;
5010
                break;
5011
#ifndef _WIN32
5012
            case QEMU_OPTION_smb:
5013
                if (net_slirp_smb(optarg) < 0)
5014
                    exit(1);
5015
                break;
5016
#endif
5017
            case QEMU_OPTION_redir:
5018
                if (net_slirp_redir(optarg) < 0)
5019
                    exit(1);
5020
                break;
5021
#endif
5022
            case QEMU_OPTION_bt:
5023
                add_device_config(DEV_BT, optarg);
5024
                break;
5025
#ifdef HAS_AUDIO
5026
            case QEMU_OPTION_audio_help:
5027
                AUD_help ();
5028
                exit (0);
5029
                break;
5030
            case QEMU_OPTION_soundhw:
5031
                select_soundhw (optarg);
5032
                break;
5033
#endif
5034
            case QEMU_OPTION_h:
5035
                help(0);
5036
                break;
5037
            case QEMU_OPTION_version:
5038
                version();
5039
                exit(0);
5040
                break;
5041
            case QEMU_OPTION_m: {
5042
                uint64_t value;
5043
                char *ptr;
5044

    
5045
                value = strtoul(optarg, &ptr, 10);
5046
                switch (*ptr) {
5047
                case 0: case 'M': case 'm':
5048
                    value <<= 20;
5049
                    break;
5050
                case 'G': case 'g':
5051
                    value <<= 30;
5052
                    break;
5053
                default:
5054
                    fprintf(stderr, "qemu: invalid ram size: %s\n", optarg);
5055
                    exit(1);
5056
                }
5057

    
5058
                /* On 32-bit hosts, QEMU is limited by virtual address space */
5059
                if (value > (2047 << 20) && HOST_LONG_BITS == 32) {
5060
                    fprintf(stderr, "qemu: at most 2047 MB RAM can be simulated\n");
5061
                    exit(1);
5062
                }
5063
                if (value != (uint64_t)(ram_addr_t)value) {
5064
                    fprintf(stderr, "qemu: ram size too large\n");
5065
                    exit(1);
5066
                }
5067
                ram_size = value;
5068
                break;
5069
            }
5070
            case QEMU_OPTION_d:
5071
                {
5072
                    int mask;
5073
                    const CPULogItem *item;
5074

    
5075
                    mask = cpu_str_to_log_mask(optarg);
5076
                    if (!mask) {
5077
                        printf("Log items (comma separated):\n");
5078
                    for(item = cpu_log_items; item->mask != 0; item++) {
5079
                        printf("%-10s %s\n", item->name, item->help);
5080
                    }
5081
                    exit(1);
5082
                    }
5083
                    cpu_set_log(mask);
5084
                }
5085
                break;
5086
            case QEMU_OPTION_s:
5087
                gdbstub_dev = "tcp::" DEFAULT_GDBSTUB_PORT;
5088
                break;
5089
            case QEMU_OPTION_gdb:
5090
                gdbstub_dev = optarg;
5091
                break;
5092
            case QEMU_OPTION_L:
5093
                data_dir = optarg;
5094
                break;
5095
            case QEMU_OPTION_bios:
5096
                bios_name = optarg;
5097
                break;
5098
            case QEMU_OPTION_singlestep:
5099
                singlestep = 1;
5100
                break;
5101
            case QEMU_OPTION_S:
5102
                autostart = 0;
5103
                break;
5104
            case QEMU_OPTION_k:
5105
                keyboard_layout = optarg;
5106
                break;
5107
            case QEMU_OPTION_localtime:
5108
                rtc_utc = 0;
5109
                break;
5110
            case QEMU_OPTION_vga:
5111
                select_vgahw (optarg);
5112
                break;
5113
#if defined(TARGET_PPC) || defined(TARGET_SPARC)
5114
            case QEMU_OPTION_g:
5115
                {
5116
                    const char *p;
5117
                    int w, h, depth;
5118
                    p = optarg;
5119
                    w = strtol(p, (char **)&p, 10);
5120
                    if (w <= 0) {
5121
                    graphic_error:
5122
                        fprintf(stderr, "qemu: invalid resolution or depth\n");
5123
                        exit(1);
5124
                    }
5125
                    if (*p != 'x')
5126
                        goto graphic_error;
5127
                    p++;
5128
                    h = strtol(p, (char **)&p, 10);
5129
                    if (h <= 0)
5130
                        goto graphic_error;
5131
                    if (*p == 'x') {
5132
                        p++;
5133
                        depth = strtol(p, (char **)&p, 10);
5134
                        if (depth != 8 && depth != 15 && depth != 16 &&
5135
                            depth != 24 && depth != 32)
5136
                            goto graphic_error;
5137
                    } else if (*p == '\0') {
5138
                        depth = graphic_depth;
5139
                    } else {
5140
                        goto graphic_error;
5141
                    }
5142

    
5143
                    graphic_width = w;
5144
                    graphic_height = h;
5145
                    graphic_depth = depth;
5146
                }
5147
                break;
5148
#endif
5149
            case QEMU_OPTION_echr:
5150
                {
5151
                    char *r;
5152
                    term_escape_char = strtol(optarg, &r, 0);
5153
                    if (r == optarg)
5154
                        printf("Bad argument to echr\n");
5155
                    break;
5156
                }
5157
            case QEMU_OPTION_monitor:
5158
                monitor_parse(optarg, "readline");
5159
                default_monitor = 0;
5160
                break;
5161
            case QEMU_OPTION_qmp:
5162
                monitor_parse(optarg, "control");
5163
                default_monitor = 0;
5164
                break;
5165
            case QEMU_OPTION_mon:
5166
                opts = qemu_opts_parse(&qemu_mon_opts, optarg, "chardev");
5167
                if (!opts) {
5168
                    fprintf(stderr, "parse error: %s\n", optarg);
5169
                    exit(1);
5170
                }
5171
                default_monitor = 0;
5172
                break;
5173
            case QEMU_OPTION_chardev:
5174
                opts = qemu_opts_parse(&qemu_chardev_opts, optarg, "backend");
5175
                if (!opts) {
5176
                    fprintf(stderr, "parse error: %s\n", optarg);
5177
                    exit(1);
5178
                }
5179
                break;
5180
            case QEMU_OPTION_serial:
5181
                add_device_config(DEV_SERIAL, optarg);
5182
                default_serial = 0;
5183
                break;
5184
            case QEMU_OPTION_watchdog:
5185
                if (watchdog) {
5186
                    fprintf(stderr,
5187
                            "qemu: only one watchdog option may be given\n");
5188
                    return 1;
5189
                }
5190
                watchdog = optarg;
5191
                break;
5192
            case QEMU_OPTION_watchdog_action:
5193
                if (select_watchdog_action(optarg) == -1) {
5194
                    fprintf(stderr, "Unknown -watchdog-action parameter\n");
5195
                    exit(1);
5196
                }
5197
                break;
5198
            case QEMU_OPTION_virtiocon:
5199
                add_device_config(DEV_VIRTCON, optarg);
5200
                default_virtcon = 0;
5201
                break;
5202
            case QEMU_OPTION_parallel:
5203
                add_device_config(DEV_PARALLEL, optarg);
5204
                default_parallel = 0;
5205
                break;
5206
            case QEMU_OPTION_debugcon:
5207
                add_device_config(DEV_DEBUGCON, optarg);
5208
                break;
5209
            case QEMU_OPTION_loadvm:
5210
                loadvm = optarg;
5211
                break;
5212
            case QEMU_OPTION_full_screen:
5213
                full_screen = 1;
5214
                break;
5215
#ifdef CONFIG_SDL
5216
            case QEMU_OPTION_no_frame:
5217
                no_frame = 1;
5218
                break;
5219
            case QEMU_OPTION_alt_grab:
5220
                alt_grab = 1;
5221
                break;
5222
            case QEMU_OPTION_ctrl_grab:
5223
                ctrl_grab = 1;
5224
                break;
5225
            case QEMU_OPTION_no_quit:
5226
                no_quit = 1;
5227
                break;
5228
            case QEMU_OPTION_sdl:
5229
                display_type = DT_SDL;
5230
                break;
5231
#endif
5232
            case QEMU_OPTION_pidfile:
5233
                pid_file = optarg;
5234
                break;
5235
#ifdef TARGET_I386
5236
            case QEMU_OPTION_win2k_hack:
5237
                win2k_install_hack = 1;
5238
                break;
5239
            case QEMU_OPTION_rtc_td_hack:
5240
                rtc_td_hack = 1;
5241
                break;
5242
            case QEMU_OPTION_acpitable:
5243
                if(acpi_table_add(optarg) < 0) {
5244
                    fprintf(stderr, "Wrong acpi table provided\n");
5245
                    exit(1);
5246
                }
5247
                break;
5248
            case QEMU_OPTION_smbios:
5249
                if(smbios_entry_add(optarg) < 0) {
5250
                    fprintf(stderr, "Wrong smbios provided\n");
5251
                    exit(1);
5252
                }
5253
                break;
5254
#endif
5255
#ifdef CONFIG_KVM
5256
            case QEMU_OPTION_enable_kvm:
5257
                kvm_allowed = 1;
5258
                break;
5259
#endif
5260
            case QEMU_OPTION_usb:
5261
                usb_enabled = 1;
5262
                break;
5263
            case QEMU_OPTION_usbdevice:
5264
                usb_enabled = 1;
5265
                add_device_config(DEV_USB, optarg);
5266
                break;
5267
            case QEMU_OPTION_device:
5268
                if (!qemu_opts_parse(&qemu_device_opts, optarg, "driver")) {
5269
                    exit(1);
5270
                }
5271
                break;
5272
            case QEMU_OPTION_smp:
5273
                smp_parse(optarg);
5274
                if (smp_cpus < 1) {
5275
                    fprintf(stderr, "Invalid number of CPUs\n");
5276
                    exit(1);
5277
                }
5278
                if (max_cpus < smp_cpus) {
5279
                    fprintf(stderr, "maxcpus must be equal to or greater than "
5280
                            "smp\n");
5281
                    exit(1);
5282
                }
5283
                if (max_cpus > 255) {
5284
                    fprintf(stderr, "Unsupported number of maxcpus\n");
5285
                    exit(1);
5286
                }
5287
                break;
5288
            case QEMU_OPTION_vnc:
5289
                display_type = DT_VNC;
5290
                vnc_display = optarg;
5291
                break;
5292
#ifdef TARGET_I386
5293
            case QEMU_OPTION_no_acpi:
5294
                acpi_enabled = 0;
5295
                break;
5296
            case QEMU_OPTION_no_hpet:
5297
                no_hpet = 1;
5298
                break;
5299
            case QEMU_OPTION_balloon:
5300
                if (balloon_parse(optarg) < 0) {
5301
                    fprintf(stderr, "Unknown -balloon argument %s\n", optarg);
5302
                    exit(1);
5303
                }
5304
                break;
5305
#endif
5306
            case QEMU_OPTION_no_reboot:
5307
                no_reboot = 1;
5308
                break;
5309
            case QEMU_OPTION_no_shutdown:
5310
                no_shutdown = 1;
5311
                break;
5312
            case QEMU_OPTION_show_cursor:
5313
                cursor_hide = 0;
5314
                break;
5315
            case QEMU_OPTION_uuid:
5316
                if(qemu_uuid_parse(optarg, qemu_uuid) < 0) {
5317
                    fprintf(stderr, "Fail to parse UUID string."
5318
                            " Wrong format.\n");
5319
                    exit(1);
5320
                }
5321
                break;
5322
#ifndef _WIN32
5323
            case QEMU_OPTION_daemonize:
5324
                daemonize = 1;
5325
                break;
5326
#endif
5327
            case QEMU_OPTION_option_rom:
5328
                if (nb_option_roms >= MAX_OPTION_ROMS) {
5329
                    fprintf(stderr, "Too many option ROMs\n");
5330
                    exit(1);
5331
                }
5332
                option_rom[nb_option_roms] = optarg;
5333
                nb_option_roms++;
5334
                break;
5335
#if defined(TARGET_ARM) || defined(TARGET_M68K)
5336
            case QEMU_OPTION_semihosting:
5337
                semihosting_enabled = 1;
5338
                break;
5339
#endif
5340
            case QEMU_OPTION_name:
5341
                qemu_name = qemu_strdup(optarg);
5342
                 {
5343
                     char *p = strchr(qemu_name, ',');
5344
                     if (p != NULL) {
5345
                        *p++ = 0;
5346
                        if (strncmp(p, "process=", 8)) {
5347
                            fprintf(stderr, "Unknown subargument %s to -name", p);
5348
                            exit(1);
5349
                        }
5350
                        p += 8;
5351
                        set_proc_name(p);
5352
                     }        
5353
                 }        
5354
                break;
5355
#if defined(TARGET_SPARC) || defined(TARGET_PPC)
5356
            case QEMU_OPTION_prom_env:
5357
                if (nb_prom_envs >= MAX_PROM_ENVS) {
5358
                    fprintf(stderr, "Too many prom variables\n");
5359
                    exit(1);
5360
                }
5361
                prom_envs[nb_prom_envs] = optarg;
5362
                nb_prom_envs++;
5363
                break;
5364
#endif
5365
#ifdef TARGET_ARM
5366
            case QEMU_OPTION_old_param:
5367
                old_param = 1;
5368
                break;
5369
#endif
5370
            case QEMU_OPTION_clock:
5371
                configure_alarms(optarg);
5372
                break;
5373
            case QEMU_OPTION_startdate:
5374
                configure_rtc_date_offset(optarg, 1);
5375
                break;
5376
            case QEMU_OPTION_rtc:
5377
                opts = qemu_opts_parse(&qemu_rtc_opts, optarg, NULL);
5378
                if (!opts) {
5379
                    fprintf(stderr, "parse error: %s\n", optarg);
5380
                    exit(1);
5381
                }
5382
                configure_rtc(opts);
5383
                break;
5384
            case QEMU_OPTION_tb_size:
5385
                tb_size = strtol(optarg, NULL, 0);
5386
                if (tb_size < 0)
5387
                    tb_size = 0;
5388
                break;
5389
            case QEMU_OPTION_icount:
5390
                use_icount = 1;
5391
                if (strcmp(optarg, "auto") == 0) {
5392
                    icount_time_shift = -1;
5393
                } else {
5394
                    icount_time_shift = strtol(optarg, NULL, 0);
5395
                }
5396
                break;
5397
            case QEMU_OPTION_incoming:
5398
                incoming = optarg;
5399
                break;
5400
            case QEMU_OPTION_nodefaults:
5401
                default_serial = 0;
5402
                default_parallel = 0;
5403
                default_virtcon = 0;
5404
                default_monitor = 0;
5405
                default_vga = 0;
5406
                default_net = 0;
5407
                default_floppy = 0;
5408
                default_cdrom = 0;
5409
                default_sdcard = 0;
5410
                break;
5411
#ifndef _WIN32
5412
            case QEMU_OPTION_chroot:
5413
                chroot_dir = optarg;
5414
                break;
5415
            case QEMU_OPTION_runas:
5416
                run_as = optarg;
5417
                break;
5418
#endif
5419
#ifdef CONFIG_XEN
5420
            case QEMU_OPTION_xen_domid:
5421
                xen_domid = atoi(optarg);
5422
                break;
5423
            case QEMU_OPTION_xen_create:
5424
                xen_mode = XEN_CREATE;
5425
                break;
5426
            case QEMU_OPTION_xen_attach:
5427
                xen_mode = XEN_ATTACH;
5428
                break;
5429
#endif
5430
            case QEMU_OPTION_readconfig:
5431
                {
5432
                    FILE *fp;
5433
                    fp = fopen(optarg, "r");
5434
                    if (fp == NULL) {
5435
                        fprintf(stderr, "open %s: %s\n", optarg, strerror(errno));
5436
                        exit(1);
5437
                    }
5438
                    if (qemu_config_parse(fp) != 0) {
5439
                        exit(1);
5440
                    }
5441
                    fclose(fp);
5442
                    break;
5443
                }
5444
            case QEMU_OPTION_writeconfig:
5445
                {
5446
                    FILE *fp;
5447
                    if (strcmp(optarg, "-") == 0) {
5448
                        fp = stdout;
5449
                    } else {
5450
                        fp = fopen(optarg, "w");
5451
                        if (fp == NULL) {
5452
                            fprintf(stderr, "open %s: %s\n", optarg, strerror(errno));
5453
                            exit(1);
5454
                        }
5455
                    }
5456
                    qemu_config_write(fp);
5457
                    fclose(fp);
5458
                    break;
5459
                }
5460
            }
5461
        }
5462
    }
5463

    
5464
    /* If no data_dir is specified then try to find it relative to the
5465
       executable path.  */
5466
    if (!data_dir) {
5467
        data_dir = find_datadir(argv[0]);
5468
    }
5469
    /* If all else fails use the install patch specified when building.  */
5470
    if (!data_dir) {
5471
        data_dir = CONFIG_QEMU_SHAREDIR;
5472
    }
5473

    
5474
    /*
5475
     * Default to max_cpus = smp_cpus, in case the user doesn't
5476
     * specify a max_cpus value.
5477
     */
5478
    if (!max_cpus)
5479
        max_cpus = smp_cpus;
5480

    
5481
    machine->max_cpus = machine->max_cpus ?: 1; /* Default to UP */
5482
    if (smp_cpus > machine->max_cpus) {
5483
        fprintf(stderr, "Number of SMP cpus requested (%d), exceeds max cpus "
5484
                "supported by machine `%s' (%d)\n", smp_cpus,  machine->name,
5485
                machine->max_cpus);
5486
        exit(1);
5487
    }
5488

    
5489
    qemu_opts_foreach(&qemu_device_opts, default_driver_check, NULL, 0);
5490
    qemu_opts_foreach(&qemu_global_opts, default_driver_check, NULL, 0);
5491

    
5492
    if (machine->no_serial) {
5493
        default_serial = 0;
5494
    }
5495
    if (machine->no_parallel) {
5496
        default_parallel = 0;
5497
    }
5498
    if (!machine->use_virtcon) {
5499
        default_virtcon = 0;
5500
    }
5501
    if (machine->no_vga) {
5502
        default_vga = 0;
5503
    }
5504
    if (machine->no_floppy) {
5505
        default_floppy = 0;
5506
    }
5507
    if (machine->no_cdrom) {
5508
        default_cdrom = 0;
5509
    }
5510
    if (machine->no_sdcard) {
5511
        default_sdcard = 0;
5512
    }
5513

    
5514
    if (display_type == DT_NOGRAPHIC) {
5515
        if (default_parallel)
5516
            add_device_config(DEV_PARALLEL, "null");
5517
        if (default_serial && default_monitor) {
5518
            add_device_config(DEV_SERIAL, "mon:stdio");
5519
        } else if (default_virtcon && default_monitor) {
5520
            add_device_config(DEV_VIRTCON, "mon:stdio");
5521
        } else {
5522
            if (default_serial)
5523
                add_device_config(DEV_SERIAL, "stdio");
5524
            if (default_virtcon)
5525
                add_device_config(DEV_VIRTCON, "stdio");
5526
            if (default_monitor)
5527
                monitor_parse("stdio", "readline");
5528
        }
5529
    } else {
5530
        if (default_serial)
5531
            add_device_config(DEV_SERIAL, "vc:80Cx24C");
5532
        if (default_parallel)
5533
            add_device_config(DEV_PARALLEL, "vc:80Cx24C");
5534
        if (default_monitor)
5535
            monitor_parse("vc:80Cx24C", "readline");
5536
        if (default_virtcon)
5537
            add_device_config(DEV_VIRTCON, "vc:80Cx24C");
5538
    }
5539
    if (default_vga)
5540
        vga_interface_type = VGA_CIRRUS;
5541

    
5542
    if (qemu_opts_foreach(&qemu_chardev_opts, chardev_init_func, NULL, 1) != 0)
5543
        exit(1);
5544

    
5545
#ifndef _WIN32
5546
    if (daemonize) {
5547
        pid_t pid;
5548

    
5549
        if (pipe(fds) == -1)
5550
            exit(1);
5551

    
5552
        pid = fork();
5553
        if (pid > 0) {
5554
            uint8_t status;
5555
            ssize_t len;
5556

    
5557
            close(fds[1]);
5558

    
5559
        again:
5560
            len = read(fds[0], &status, 1);
5561
            if (len == -1 && (errno == EINTR))
5562
                goto again;
5563

    
5564
            if (len != 1)
5565
                exit(1);
5566
            else if (status == 1) {
5567
                fprintf(stderr, "Could not acquire pidfile: %s\n", strerror(errno));
5568
                exit(1);
5569
            } else
5570
                exit(0);
5571
        } else if (pid < 0)
5572
            exit(1);
5573

    
5574
        close(fds[0]);
5575
        qemu_set_cloexec(fds[1]);
5576

    
5577
        setsid();
5578

    
5579
        pid = fork();
5580
        if (pid > 0)
5581
            exit(0);
5582
        else if (pid < 0)
5583
            exit(1);
5584

    
5585
        umask(027);
5586

    
5587
        signal(SIGTSTP, SIG_IGN);
5588
        signal(SIGTTOU, SIG_IGN);
5589
        signal(SIGTTIN, SIG_IGN);
5590
    }
5591
#endif
5592

    
5593
    if (pid_file && qemu_create_pidfile(pid_file) != 0) {
5594
#ifndef _WIN32
5595
        if (daemonize) {
5596
            uint8_t status = 1;
5597
            write(fds[1], &status, 1);
5598
        } else
5599
#endif
5600
            fprintf(stderr, "Could not acquire pid file: %s\n", strerror(errno));
5601
        exit(1);
5602
    }
5603

    
5604
    if (kvm_enabled()) {
5605
        int ret;
5606

    
5607
        ret = kvm_init(smp_cpus);
5608
        if (ret < 0) {
5609
            fprintf(stderr, "failed to initialize KVM\n");
5610
            exit(1);
5611
        }
5612
    }
5613

    
5614
    if (qemu_init_main_loop()) {
5615
        fprintf(stderr, "qemu_init_main_loop failed\n");
5616
        exit(1);
5617
    }
5618
    linux_boot = (kernel_filename != NULL);
5619

    
5620
    if (!linux_boot && *kernel_cmdline != '\0') {
5621
        fprintf(stderr, "-append only allowed with -kernel option\n");
5622
        exit(1);
5623
    }
5624

    
5625
    if (!linux_boot && initrd_filename != NULL) {
5626
        fprintf(stderr, "-initrd only allowed with -kernel option\n");
5627
        exit(1);
5628
    }
5629

    
5630
#ifndef _WIN32
5631
    /* Win32 doesn't support line-buffering and requires size >= 2 */
5632
    setvbuf(stdout, NULL, _IOLBF, 0);
5633
#endif
5634

    
5635
    if (init_timer_alarm() < 0) {
5636
        fprintf(stderr, "could not initialize alarm timer\n");
5637
        exit(1);
5638
    }
5639
    if (use_icount && icount_time_shift < 0) {
5640
        use_icount = 2;
5641
        /* 125MIPS seems a reasonable initial guess at the guest speed.
5642
           It will be corrected fairly quickly anyway.  */
5643
        icount_time_shift = 3;
5644
        init_icount_adjust();
5645
    }
5646

    
5647
#ifdef _WIN32
5648
    socket_init();
5649
#endif
5650

    
5651
    if (net_init_clients() < 0) {
5652
        exit(1);
5653
    }
5654

    
5655
    net_boot = (boot_devices_bitmap >> ('n' - 'a')) & 0xF;
5656
    net_set_boot_mask(net_boot);
5657

    
5658
    /* init the bluetooth world */
5659
    if (foreach_device_config(DEV_BT, bt_parse))
5660
        exit(1);
5661

    
5662
    /* init the memory */
5663
    if (ram_size == 0)
5664
        ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
5665

    
5666
    /* init the dynamic translator */
5667
    cpu_exec_init_all(tb_size * 1024 * 1024);
5668

    
5669
    bdrv_init_with_whitelist();
5670

    
5671
    blk_mig_init();
5672

    
5673
    if (default_cdrom) {
5674
        /* we always create the cdrom drive, even if no disk is there */
5675
        drive_add(NULL, CDROM_ALIAS);
5676
    }
5677

    
5678
    if (default_floppy) {
5679
        /* we always create at least one floppy */
5680
        drive_add(NULL, FD_ALIAS, 0);
5681
    }
5682

    
5683
    if (default_sdcard) {
5684
        /* we always create one sd slot, even if no card is in it */
5685
        drive_add(NULL, SD_ALIAS);
5686
    }
5687

    
5688
    /* open the virtual block devices */
5689
    if (snapshot)
5690
        qemu_opts_foreach(&qemu_drive_opts, drive_enable_snapshot, NULL, 0);
5691
    if (qemu_opts_foreach(&qemu_drive_opts, drive_init_func, machine, 1) != 0)
5692
        exit(1);
5693

    
5694
    vmstate_register(0, &vmstate_timers ,&timers_state);
5695
    register_savevm_live("ram", 0, 3, NULL, ram_save_live, NULL, 
5696
                         ram_load, NULL);
5697

    
5698
    if (nb_numa_nodes > 0) {
5699
        int i;
5700

    
5701
        if (nb_numa_nodes > smp_cpus) {
5702
            nb_numa_nodes = smp_cpus;
5703
        }
5704

    
5705
        /* If no memory size if given for any node, assume the default case
5706
         * and distribute the available memory equally across all nodes
5707
         */
5708
        for (i = 0; i < nb_numa_nodes; i++) {
5709
            if (node_mem[i] != 0)
5710
                break;
5711
        }
5712
        if (i == nb_numa_nodes) {
5713
            uint64_t usedmem = 0;
5714

    
5715
            /* On Linux, the each node's border has to be 8MB aligned,
5716
             * the final node gets the rest.
5717
             */
5718
            for (i = 0; i < nb_numa_nodes - 1; i++) {
5719
                node_mem[i] = (ram_size / nb_numa_nodes) & ~((1 << 23UL) - 1);
5720
                usedmem += node_mem[i];
5721
            }
5722
            node_mem[i] = ram_size - usedmem;
5723
        }
5724

    
5725
        for (i = 0; i < nb_numa_nodes; i++) {
5726
            if (node_cpumask[i] != 0)
5727
                break;
5728
        }
5729
        /* assigning the VCPUs round-robin is easier to implement, guest OSes
5730
         * must cope with this anyway, because there are BIOSes out there in
5731
         * real machines which also use this scheme.
5732
         */
5733
        if (i == nb_numa_nodes) {
5734
            for (i = 0; i < smp_cpus; i++) {
5735
                node_cpumask[i % nb_numa_nodes] |= 1 << i;
5736
            }
5737
        }
5738
    }
5739

    
5740
    if (foreach_device_config(DEV_SERIAL, serial_parse) < 0)
5741
        exit(1);
5742
    if (foreach_device_config(DEV_PARALLEL, parallel_parse) < 0)
5743
        exit(1);
5744
    if (foreach_device_config(DEV_VIRTCON, virtcon_parse) < 0)
5745
        exit(1);
5746
    if (foreach_device_config(DEV_DEBUGCON, debugcon_parse) < 0)
5747
        exit(1);
5748

    
5749
    module_call_init(MODULE_INIT_DEVICE);
5750

    
5751
    if (watchdog) {
5752
        i = select_watchdog(watchdog);
5753
        if (i > 0)
5754
            exit (i == 1 ? 1 : 0);
5755
    }
5756

    
5757
    if (machine->compat_props) {
5758
        qdev_prop_register_global_list(machine->compat_props);
5759
    }
5760
    qemu_add_globals();
5761

    
5762
    machine->init(ram_size, boot_devices,
5763
                  kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
5764

    
5765

    
5766
#ifndef _WIN32
5767
    /* must be after terminal init, SDL library changes signal handlers */
5768
    sighandler_setup();
5769
#endif
5770

    
5771
    for (env = first_cpu; env != NULL; env = env->next_cpu) {
5772
        for (i = 0; i < nb_numa_nodes; i++) {
5773
            if (node_cpumask[i] & (1 << env->cpu_index)) {
5774
                env->numa_node = i;
5775
            }
5776
        }
5777
    }
5778

    
5779
    current_machine = machine;
5780

    
5781
    /* init USB devices */
5782
    if (usb_enabled) {
5783
        if (foreach_device_config(DEV_USB, usb_parse) < 0)
5784
            exit(1);
5785
    }
5786

    
5787
    /* init generic devices */
5788
    if (qemu_opts_foreach(&qemu_device_opts, device_init_func, NULL, 1) != 0)
5789
        exit(1);
5790

    
5791
    if (!display_state)
5792
        dumb_display_init();
5793
    /* just use the first displaystate for the moment */
5794
    ds = display_state;
5795

    
5796
    if (display_type == DT_DEFAULT) {
5797
#if defined(CONFIG_SDL) || defined(CONFIG_COCOA)
5798
        display_type = DT_SDL;
5799
#else
5800
        display_type = DT_VNC;
5801
        vnc_display = "localhost:0,to=99";
5802
        show_vnc_port = 1;
5803
#endif
5804
    }
5805
        
5806

    
5807
    switch (display_type) {
5808
    case DT_NOGRAPHIC:
5809
        break;
5810
#if defined(CONFIG_CURSES)
5811
    case DT_CURSES:
5812
        curses_display_init(ds, full_screen);
5813
        break;
5814
#endif
5815
#if defined(CONFIG_SDL)
5816
    case DT_SDL:
5817
        sdl_display_init(ds, full_screen, no_frame);
5818
        break;
5819
#elif defined(CONFIG_COCOA)
5820
    case DT_SDL:
5821
        cocoa_display_init(ds, full_screen);
5822
        break;
5823
#endif
5824
    case DT_VNC:
5825
        vnc_display_init(ds);
5826
        if (vnc_display_open(ds, vnc_display) < 0)
5827
            exit(1);
5828

    
5829
        if (show_vnc_port) {
5830
            printf("VNC server running on `%s'\n", vnc_display_local_addr(ds));
5831
        }
5832
        break;
5833
    default:
5834
        break;
5835
    }
5836
    dpy_resize(ds);
5837

    
5838
    dcl = ds->listeners;
5839
    while (dcl != NULL) {
5840
        if (dcl->dpy_refresh != NULL) {
5841
            ds->gui_timer = qemu_new_timer(rt_clock, gui_update, ds);
5842
            qemu_mod_timer(ds->gui_timer, qemu_get_clock(rt_clock));
5843
        }
5844
        dcl = dcl->next;
5845
    }
5846

    
5847
    if (display_type == DT_NOGRAPHIC || display_type == DT_VNC) {
5848
        nographic_timer = qemu_new_timer(rt_clock, nographic_update, NULL);
5849
        qemu_mod_timer(nographic_timer, qemu_get_clock(rt_clock));
5850
    }
5851

    
5852
    text_consoles_set_display(display_state);
5853

    
5854
    if (qemu_opts_foreach(&qemu_mon_opts, mon_init_func, NULL, 1) != 0)
5855
        exit(1);
5856

    
5857
    if (gdbstub_dev && gdbserver_start(gdbstub_dev) < 0) {
5858
        fprintf(stderr, "qemu: could not open gdbserver on device '%s'\n",
5859
                gdbstub_dev);
5860
        exit(1);
5861
    }
5862

    
5863
    qdev_machine_creation_done();
5864

    
5865
    if (rom_load_all() != 0) {
5866
        fprintf(stderr, "rom loading failed\n");
5867
        exit(1);
5868
    }
5869

    
5870
    qemu_system_reset();
5871
    if (loadvm) {
5872
        if (load_vmstate(cur_mon, loadvm) < 0) {
5873
            autostart = 0;
5874
        }
5875
    }
5876

    
5877
    if (incoming) {
5878
        qemu_start_incoming_migration(incoming);
5879
    } else if (autostart) {
5880
        vm_start();
5881
    }
5882

    
5883
#ifndef _WIN32
5884
    if (daemonize) {
5885
        uint8_t status = 0;
5886
        ssize_t len;
5887

    
5888
    again1:
5889
        len = write(fds[1], &status, 1);
5890
        if (len == -1 && (errno == EINTR))
5891
            goto again1;
5892

    
5893
        if (len != 1)
5894
            exit(1);
5895

    
5896
        chdir("/");
5897
        TFR(fd = qemu_open("/dev/null", O_RDWR));
5898
        if (fd == -1)
5899
            exit(1);
5900
    }
5901

    
5902
    if (run_as) {
5903
        pwd = getpwnam(run_as);
5904
        if (!pwd) {
5905
            fprintf(stderr, "User \"%s\" doesn't exist\n", run_as);
5906
            exit(1);
5907
        }
5908
    }
5909

    
5910
    if (chroot_dir) {
5911
        if (chroot(chroot_dir) < 0) {
5912
            fprintf(stderr, "chroot failed\n");
5913
            exit(1);
5914
        }
5915
        chdir("/");
5916
    }
5917

    
5918
    if (run_as) {
5919
        if (setgid(pwd->pw_gid) < 0) {
5920
            fprintf(stderr, "Failed to setgid(%d)\n", pwd->pw_gid);
5921
            exit(1);
5922
        }
5923
        if (setuid(pwd->pw_uid) < 0) {
5924
            fprintf(stderr, "Failed to setuid(%d)\n", pwd->pw_uid);
5925
            exit(1);
5926
        }
5927
        if (setuid(0) != -1) {
5928
            fprintf(stderr, "Dropping privileges failed\n");
5929
            exit(1);
5930
        }
5931
    }
5932

    
5933
    if (daemonize) {
5934
        dup2(fd, 0);
5935
        dup2(fd, 1);
5936
        dup2(fd, 2);
5937

    
5938
        close(fd);
5939
    }
5940
#endif
5941

    
5942
    main_loop();
5943
    quit_timers();
5944
    net_cleanup();
5945

    
5946
    return 0;
5947
}