Statistics
| Branch: | Revision:

root / vl.c @ 94419874

History | View | Annotate | Download (155.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-serial-pci",    .flag = &default_virtcon   },
292
    { .driver = "virtio-serial-s390",   .flag = &default_virtcon   },
293
    { .driver = "virtio-serial",        .flag = &default_virtcon   },
294
    { .driver = "VGA",                  .flag = &default_vga       },
295
    { .driver = "cirrus-vga",           .flag = &default_vga       },
296
    { .driver = "vmware-svga",          .flag = &default_vga       },
297
};
298

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

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

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

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

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

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

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

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

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

    
368
int qemu_balloon(ram_addr_t target, MonitorCompletion cb, void *opaque)
369
{
370
    if (qemu_balloon_event) {
371
        qemu_balloon_event(qemu_balloon_event_opaque, target, cb, opaque);
372
        return 1;
373
    } else {
374
        return 0;
375
    }
376
}
377

    
378
int qemu_balloon_status(MonitorCompletion cb, void *opaque)
379
{
380
    if (qemu_balloon_event) {
381
        qemu_balloon_event(qemu_balloon_event_opaque, 0, cb, opaque);
382
        return 1;
383
    } else {
384
        return 0;
385
    }
386
}
387

    
388

    
389
/***********************************************************/
390
/* real time host monotonic timer */
391

    
392
/* compute with 96 bit intermediate result: (a*b)/c */
393
uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c)
394
{
395
    union {
396
        uint64_t ll;
397
        struct {
398
#ifdef HOST_WORDS_BIGENDIAN
399
            uint32_t high, low;
400
#else
401
            uint32_t low, high;
402
#endif
403
        } l;
404
    } u, res;
405
    uint64_t rl, rh;
406

    
407
    u.ll = a;
408
    rl = (uint64_t)u.l.low * (uint64_t)b;
409
    rh = (uint64_t)u.l.high * (uint64_t)b;
410
    rh += (rl >> 32);
411
    res.l.high = rh / c;
412
    res.l.low = (((rh % c) << 32) + (rl & 0xffffffff)) / c;
413
    return res.ll;
414
}
415

    
416
static int64_t get_clock_realtime(void)
417
{
418
    struct timeval tv;
419

    
420
    gettimeofday(&tv, NULL);
421
    return tv.tv_sec * 1000000000LL + (tv.tv_usec * 1000);
422
}
423

    
424
#ifdef WIN32
425

    
426
static int64_t clock_freq;
427

    
428
static void init_get_clock(void)
429
{
430
    LARGE_INTEGER freq;
431
    int ret;
432
    ret = QueryPerformanceFrequency(&freq);
433
    if (ret == 0) {
434
        fprintf(stderr, "Could not calibrate ticks\n");
435
        exit(1);
436
    }
437
    clock_freq = freq.QuadPart;
438
}
439

    
440
static int64_t get_clock(void)
441
{
442
    LARGE_INTEGER ti;
443
    QueryPerformanceCounter(&ti);
444
    return muldiv64(ti.QuadPart, get_ticks_per_sec(), clock_freq);
445
}
446

    
447
#else
448

    
449
static int use_rt_clock;
450

    
451
static void init_get_clock(void)
452
{
453
    use_rt_clock = 0;
454
#if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD_version >= 500000) \
455
    || defined(__DragonFly__) || defined(__FreeBSD_kernel__)
456
    {
457
        struct timespec ts;
458
        if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0) {
459
            use_rt_clock = 1;
460
        }
461
    }
462
#endif
463
}
464

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

    
483
/* Return the virtual CPU time, based on the instruction counter.  */
484
static int64_t cpu_get_icount(void)
485
{
486
    int64_t icount;
487
    CPUState *env = cpu_single_env;;
488
    icount = qemu_icount;
489
    if (env) {
490
        if (!can_do_io(env))
491
            fprintf(stderr, "Bad clock read\n");
492
        icount -= (env->icount_decr.u16.low + env->icount_extra);
493
    }
494
    return qemu_icount_bias + (icount << icount_time_shift);
495
}
496

    
497
/***********************************************************/
498
/* guest cycle counter */
499

    
500
typedef struct TimersState {
501
    int64_t cpu_ticks_prev;
502
    int64_t cpu_ticks_offset;
503
    int64_t cpu_clock_offset;
504
    int32_t cpu_ticks_enabled;
505
    int64_t dummy;
506
} TimersState;
507

    
508
TimersState timers_state;
509

    
510
/* return the host CPU cycle counter and handle stop/restart */
511
int64_t cpu_get_ticks(void)
512
{
513
    if (use_icount) {
514
        return cpu_get_icount();
515
    }
516
    if (!timers_state.cpu_ticks_enabled) {
517
        return timers_state.cpu_ticks_offset;
518
    } else {
519
        int64_t ticks;
520
        ticks = cpu_get_real_ticks();
521
        if (timers_state.cpu_ticks_prev > ticks) {
522
            /* Note: non increasing ticks may happen if the host uses
523
               software suspend */
524
            timers_state.cpu_ticks_offset += timers_state.cpu_ticks_prev - ticks;
525
        }
526
        timers_state.cpu_ticks_prev = ticks;
527
        return ticks + timers_state.cpu_ticks_offset;
528
    }
529
}
530

    
531
/* return the host CPU monotonic timer and handle stop/restart */
532
static int64_t cpu_get_clock(void)
533
{
534
    int64_t ti;
535
    if (!timers_state.cpu_ticks_enabled) {
536
        return timers_state.cpu_clock_offset;
537
    } else {
538
        ti = get_clock();
539
        return ti + timers_state.cpu_clock_offset;
540
    }
541
}
542

    
543
/* enable cpu_get_ticks() */
544
void cpu_enable_ticks(void)
545
{
546
    if (!timers_state.cpu_ticks_enabled) {
547
        timers_state.cpu_ticks_offset -= cpu_get_real_ticks();
548
        timers_state.cpu_clock_offset -= get_clock();
549
        timers_state.cpu_ticks_enabled = 1;
550
    }
551
}
552

    
553
/* disable cpu_get_ticks() : the clock is stopped. You must not call
554
   cpu_get_ticks() after that.  */
555
void cpu_disable_ticks(void)
556
{
557
    if (timers_state.cpu_ticks_enabled) {
558
        timers_state.cpu_ticks_offset = cpu_get_ticks();
559
        timers_state.cpu_clock_offset = cpu_get_clock();
560
        timers_state.cpu_ticks_enabled = 0;
561
    }
562
}
563

    
564
/***********************************************************/
565
/* timers */
566

    
567
#define QEMU_CLOCK_REALTIME 0
568
#define QEMU_CLOCK_VIRTUAL  1
569
#define QEMU_CLOCK_HOST     2
570

    
571
struct QEMUClock {
572
    int type;
573
    /* XXX: add frequency */
574
};
575

    
576
struct QEMUTimer {
577
    QEMUClock *clock;
578
    int64_t expire_time;
579
    QEMUTimerCB *cb;
580
    void *opaque;
581
    struct QEMUTimer *next;
582
};
583

    
584
struct qemu_alarm_timer {
585
    char const *name;
586
    unsigned int flags;
587

    
588
    int (*start)(struct qemu_alarm_timer *t);
589
    void (*stop)(struct qemu_alarm_timer *t);
590
    void (*rearm)(struct qemu_alarm_timer *t);
591
    void *priv;
592
};
593

    
594
#define ALARM_FLAG_DYNTICKS  0x1
595
#define ALARM_FLAG_EXPIRED   0x2
596

    
597
static inline int alarm_has_dynticks(struct qemu_alarm_timer *t)
598
{
599
    return t && (t->flags & ALARM_FLAG_DYNTICKS);
600
}
601

    
602
static void qemu_rearm_alarm_timer(struct qemu_alarm_timer *t)
603
{
604
    if (!alarm_has_dynticks(t))
605
        return;
606

    
607
    t->rearm(t);
608
}
609

    
610
/* TODO: MIN_TIMER_REARM_US should be optimized */
611
#define MIN_TIMER_REARM_US 250
612

    
613
static struct qemu_alarm_timer *alarm_timer;
614

    
615
#ifdef _WIN32
616

    
617
struct qemu_alarm_win32 {
618
    MMRESULT timerId;
619
    unsigned int period;
620
} alarm_win32_data = {0, -1};
621

    
622
static int win32_start_timer(struct qemu_alarm_timer *t);
623
static void win32_stop_timer(struct qemu_alarm_timer *t);
624
static void win32_rearm_timer(struct qemu_alarm_timer *t);
625

    
626
#else
627

    
628
static int unix_start_timer(struct qemu_alarm_timer *t);
629
static void unix_stop_timer(struct qemu_alarm_timer *t);
630

    
631
#ifdef __linux__
632

    
633
static int dynticks_start_timer(struct qemu_alarm_timer *t);
634
static void dynticks_stop_timer(struct qemu_alarm_timer *t);
635
static void dynticks_rearm_timer(struct qemu_alarm_timer *t);
636

    
637
static int hpet_start_timer(struct qemu_alarm_timer *t);
638
static void hpet_stop_timer(struct qemu_alarm_timer *t);
639

    
640
static int rtc_start_timer(struct qemu_alarm_timer *t);
641
static void rtc_stop_timer(struct qemu_alarm_timer *t);
642

    
643
#endif /* __linux__ */
644

    
645
#endif /* _WIN32 */
646

    
647
/* Correlation between real and virtual time is always going to be
648
   fairly approximate, so ignore small variation.
649
   When the guest is idle real and virtual time will be aligned in
650
   the IO wait loop.  */
651
#define ICOUNT_WOBBLE (get_ticks_per_sec() / 10)
652

    
653
static void icount_adjust(void)
654
{
655
    int64_t cur_time;
656
    int64_t cur_icount;
657
    int64_t delta;
658
    static int64_t last_delta;
659
    /* If the VM is not running, then do nothing.  */
660
    if (!vm_running)
661
        return;
662

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

    
683
static void icount_adjust_rt(void * opaque)
684
{
685
    qemu_mod_timer(icount_rt_timer,
686
                   qemu_get_clock(rt_clock) + 1000);
687
    icount_adjust();
688
}
689

    
690
static void icount_adjust_vm(void * opaque)
691
{
692
    qemu_mod_timer(icount_vm_timer,
693
                   qemu_get_clock(vm_clock) + get_ticks_per_sec() / 10);
694
    icount_adjust();
695
}
696

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

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

    
732
static void show_available_alarms(void)
733
{
734
    int i;
735

    
736
    printf("Available alarm timers, in order of precedence:\n");
737
    for (i = 0; alarm_timers[i].name; i++)
738
        printf("%s\n", alarm_timers[i].name);
739
}
740

    
741
static void configure_alarms(char const *opt)
742
{
743
    int i;
744
    int cur = 0;
745
    int count = ARRAY_SIZE(alarm_timers) - 1;
746
    char *arg;
747
    char *name;
748
    struct qemu_alarm_timer tmp;
749

    
750
    if (!strcmp(opt, "?")) {
751
        show_available_alarms();
752
        exit(0);
753
    }
754

    
755
    arg = qemu_strdup(opt);
756

    
757
    /* Reorder the array */
758
    name = strtok(arg, ",");
759
    while (name) {
760
        for (i = 0; i < count && alarm_timers[i].name; i++) {
761
            if (!strcmp(alarm_timers[i].name, name))
762
                break;
763
        }
764

    
765
        if (i == count) {
766
            fprintf(stderr, "Unknown clock %s\n", name);
767
            goto next;
768
        }
769

    
770
        if (i < cur)
771
            /* Ignore */
772
            goto next;
773

    
774
        /* Swap */
775
        tmp = alarm_timers[i];
776
        alarm_timers[i] = alarm_timers[cur];
777
        alarm_timers[cur] = tmp;
778

    
779
        cur++;
780
next:
781
        name = strtok(NULL, ",");
782
    }
783

    
784
    qemu_free(arg);
785

    
786
    if (cur) {
787
        /* Disable remaining timers */
788
        for (i = cur; i < count; i++)
789
            alarm_timers[i].name = NULL;
790
    } else {
791
        show_available_alarms();
792
        exit(1);
793
    }
794
}
795

    
796
#define QEMU_NUM_CLOCKS 3
797

    
798
QEMUClock *rt_clock;
799
QEMUClock *vm_clock;
800
QEMUClock *host_clock;
801

    
802
static QEMUTimer *active_timers[QEMU_NUM_CLOCKS];
803

    
804
static QEMUClock *qemu_new_clock(int type)
805
{
806
    QEMUClock *clock;
807
    clock = qemu_mallocz(sizeof(QEMUClock));
808
    clock->type = type;
809
    return clock;
810
}
811

    
812
QEMUTimer *qemu_new_timer(QEMUClock *clock, QEMUTimerCB *cb, void *opaque)
813
{
814
    QEMUTimer *ts;
815

    
816
    ts = qemu_mallocz(sizeof(QEMUTimer));
817
    ts->clock = clock;
818
    ts->cb = cb;
819
    ts->opaque = opaque;
820
    return ts;
821
}
822

    
823
void qemu_free_timer(QEMUTimer *ts)
824
{
825
    qemu_free(ts);
826
}
827

    
828
/* stop a timer, but do not dealloc it */
829
void qemu_del_timer(QEMUTimer *ts)
830
{
831
    QEMUTimer **pt, *t;
832

    
833
    /* NOTE: this code must be signal safe because
834
       qemu_timer_expired() can be called from a signal. */
835
    pt = &active_timers[ts->clock->type];
836
    for(;;) {
837
        t = *pt;
838
        if (!t)
839
            break;
840
        if (t == ts) {
841
            *pt = t->next;
842
            break;
843
        }
844
        pt = &t->next;
845
    }
846
}
847

    
848
/* modify the current timer so that it will be fired when current_time
849
   >= expire_time. The corresponding callback will be called. */
850
void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time)
851
{
852
    QEMUTimer **pt, *t;
853

    
854
    qemu_del_timer(ts);
855

    
856
    /* add the timer in the sorted list */
857
    /* NOTE: this code must be signal safe because
858
       qemu_timer_expired() can be called from a signal. */
859
    pt = &active_timers[ts->clock->type];
860
    for(;;) {
861
        t = *pt;
862
        if (!t)
863
            break;
864
        if (t->expire_time > expire_time)
865
            break;
866
        pt = &t->next;
867
    }
868
    ts->expire_time = expire_time;
869
    ts->next = *pt;
870
    *pt = ts;
871

    
872
    /* Rearm if necessary  */
873
    if (pt == &active_timers[ts->clock->type]) {
874
        if ((alarm_timer->flags & ALARM_FLAG_EXPIRED) == 0) {
875
            qemu_rearm_alarm_timer(alarm_timer);
876
        }
877
        /* Interrupt execution to force deadline recalculation.  */
878
        if (use_icount)
879
            qemu_notify_event();
880
    }
881
}
882

    
883
int qemu_timer_pending(QEMUTimer *ts)
884
{
885
    QEMUTimer *t;
886
    for(t = active_timers[ts->clock->type]; t != NULL; t = t->next) {
887
        if (t == ts)
888
            return 1;
889
    }
890
    return 0;
891
}
892

    
893
int qemu_timer_expired(QEMUTimer *timer_head, int64_t current_time)
894
{
895
    if (!timer_head)
896
        return 0;
897
    return (timer_head->expire_time <= current_time);
898
}
899

    
900
static void qemu_run_timers(QEMUTimer **ptimer_head, int64_t current_time)
901
{
902
    QEMUTimer *ts;
903

    
904
    for(;;) {
905
        ts = *ptimer_head;
906
        if (!ts || ts->expire_time > current_time)
907
            break;
908
        /* remove timer from the list before calling the callback */
909
        *ptimer_head = ts->next;
910
        ts->next = NULL;
911

    
912
        /* run the callback (the timer list can be modified) */
913
        ts->cb(ts->opaque);
914
    }
915
}
916

    
917
int64_t qemu_get_clock(QEMUClock *clock)
918
{
919
    switch(clock->type) {
920
    case QEMU_CLOCK_REALTIME:
921
        return get_clock() / 1000000;
922
    default:
923
    case QEMU_CLOCK_VIRTUAL:
924
        if (use_icount) {
925
            return cpu_get_icount();
926
        } else {
927
            return cpu_get_clock();
928
        }
929
    case QEMU_CLOCK_HOST:
930
        return get_clock_realtime();
931
    }
932
}
933

    
934
int64_t qemu_get_clock_ns(QEMUClock *clock)
935
{
936
    switch(clock->type) {
937
    case QEMU_CLOCK_REALTIME:
938
        return get_clock();
939
    default:
940
    case QEMU_CLOCK_VIRTUAL:
941
        if (use_icount) {
942
            return cpu_get_icount();
943
        } else {
944
            return cpu_get_clock();
945
        }
946
    case QEMU_CLOCK_HOST:
947
        return get_clock_realtime();
948
    }
949
}
950

    
951
static void init_clocks(void)
952
{
953
    init_get_clock();
954
    rt_clock = qemu_new_clock(QEMU_CLOCK_REALTIME);
955
    vm_clock = qemu_new_clock(QEMU_CLOCK_VIRTUAL);
956
    host_clock = qemu_new_clock(QEMU_CLOCK_HOST);
957

    
958
    rtc_clock = host_clock;
959
}
960

    
961
/* save a timer */
962
void qemu_put_timer(QEMUFile *f, QEMUTimer *ts)
963
{
964
    uint64_t expire_time;
965

    
966
    if (qemu_timer_pending(ts)) {
967
        expire_time = ts->expire_time;
968
    } else {
969
        expire_time = -1;
970
    }
971
    qemu_put_be64(f, expire_time);
972
}
973

    
974
void qemu_get_timer(QEMUFile *f, QEMUTimer *ts)
975
{
976
    uint64_t expire_time;
977

    
978
    expire_time = qemu_get_be64(f);
979
    if (expire_time != -1) {
980
        qemu_mod_timer(ts, expire_time);
981
    } else {
982
        qemu_del_timer(ts);
983
    }
984
}
985

    
986
static const VMStateDescription vmstate_timers = {
987
    .name = "timer",
988
    .version_id = 2,
989
    .minimum_version_id = 1,
990
    .minimum_version_id_old = 1,
991
    .fields      = (VMStateField []) {
992
        VMSTATE_INT64(cpu_ticks_offset, TimersState),
993
        VMSTATE_INT64(dummy, TimersState),
994
        VMSTATE_INT64_V(cpu_clock_offset, TimersState, 2),
995
        VMSTATE_END_OF_LIST()
996
    }
997
};
998

    
999
static void qemu_event_increment(void);
1000

    
1001
#ifdef _WIN32
1002
static void CALLBACK host_alarm_handler(UINT uTimerID, UINT uMsg,
1003
                                        DWORD_PTR dwUser, DWORD_PTR dw1,
1004
                                        DWORD_PTR dw2)
1005
#else
1006
static void host_alarm_handler(int host_signum)
1007
#endif
1008
{
1009
#if 0
1010
#define DISP_FREQ 1000
1011
    {
1012
        static int64_t delta_min = INT64_MAX;
1013
        static int64_t delta_max, delta_cum, last_clock, delta, ti;
1014
        static int count;
1015
        ti = qemu_get_clock(vm_clock);
1016
        if (last_clock != 0) {
1017
            delta = ti - last_clock;
1018
            if (delta < delta_min)
1019
                delta_min = delta;
1020
            if (delta > delta_max)
1021
                delta_max = delta;
1022
            delta_cum += delta;
1023
            if (++count == DISP_FREQ) {
1024
                printf("timer: min=%" PRId64 " us max=%" PRId64 " us avg=%" PRId64 " us avg_freq=%0.3f Hz\n",
1025
                       muldiv64(delta_min, 1000000, get_ticks_per_sec()),
1026
                       muldiv64(delta_max, 1000000, get_ticks_per_sec()),
1027
                       muldiv64(delta_cum, 1000000 / DISP_FREQ, get_ticks_per_sec()),
1028
                       (double)get_ticks_per_sec() / ((double)delta_cum / DISP_FREQ));
1029
                count = 0;
1030
                delta_min = INT64_MAX;
1031
                delta_max = 0;
1032
                delta_cum = 0;
1033
            }
1034
        }
1035
        last_clock = ti;
1036
    }
1037
#endif
1038
    if (alarm_has_dynticks(alarm_timer) ||
1039
        (!use_icount &&
1040
            qemu_timer_expired(active_timers[QEMU_CLOCK_VIRTUAL],
1041
                               qemu_get_clock(vm_clock))) ||
1042
        qemu_timer_expired(active_timers[QEMU_CLOCK_REALTIME],
1043
                           qemu_get_clock(rt_clock)) ||
1044
        qemu_timer_expired(active_timers[QEMU_CLOCK_HOST],
1045
                           qemu_get_clock(host_clock))) {
1046
        qemu_event_increment();
1047
        if (alarm_timer) alarm_timer->flags |= ALARM_FLAG_EXPIRED;
1048

    
1049
#ifndef CONFIG_IOTHREAD
1050
        if (next_cpu) {
1051
            /* stop the currently executing cpu because a timer occured */
1052
            cpu_exit(next_cpu);
1053
        }
1054
#endif
1055
        timer_alarm_pending = 1;
1056
        qemu_notify_event();
1057
    }
1058
}
1059

    
1060
static int64_t qemu_next_deadline(void)
1061
{
1062
    /* To avoid problems with overflow limit this to 2^32.  */
1063
    int64_t delta = INT32_MAX;
1064

    
1065
    if (active_timers[QEMU_CLOCK_VIRTUAL]) {
1066
        delta = active_timers[QEMU_CLOCK_VIRTUAL]->expire_time -
1067
                     qemu_get_clock(vm_clock);
1068
    }
1069
    if (active_timers[QEMU_CLOCK_HOST]) {
1070
        int64_t hdelta = active_timers[QEMU_CLOCK_HOST]->expire_time -
1071
                 qemu_get_clock(host_clock);
1072
        if (hdelta < delta)
1073
            delta = hdelta;
1074
    }
1075

    
1076
    if (delta < 0)
1077
        delta = 0;
1078

    
1079
    return delta;
1080
}
1081

    
1082
#if defined(__linux__)
1083
static uint64_t qemu_next_deadline_dyntick(void)
1084
{
1085
    int64_t delta;
1086
    int64_t rtdelta;
1087

    
1088
    if (use_icount)
1089
        delta = INT32_MAX;
1090
    else
1091
        delta = (qemu_next_deadline() + 999) / 1000;
1092

    
1093
    if (active_timers[QEMU_CLOCK_REALTIME]) {
1094
        rtdelta = (active_timers[QEMU_CLOCK_REALTIME]->expire_time -
1095
                 qemu_get_clock(rt_clock))*1000;
1096
        if (rtdelta < delta)
1097
            delta = rtdelta;
1098
    }
1099

    
1100
    if (delta < MIN_TIMER_REARM_US)
1101
        delta = MIN_TIMER_REARM_US;
1102

    
1103
    return delta;
1104
}
1105
#endif
1106

    
1107
#ifndef _WIN32
1108

    
1109
/* Sets a specific flag */
1110
static int fcntl_setfl(int fd, int flag)
1111
{
1112
    int flags;
1113

    
1114
    flags = fcntl(fd, F_GETFL);
1115
    if (flags == -1)
1116
        return -errno;
1117

    
1118
    if (fcntl(fd, F_SETFL, flags | flag) == -1)
1119
        return -errno;
1120

    
1121
    return 0;
1122
}
1123

    
1124
#if defined(__linux__)
1125

    
1126
#define RTC_FREQ 1024
1127

    
1128
static void enable_sigio_timer(int fd)
1129
{
1130
    struct sigaction act;
1131

    
1132
    /* timer signal */
1133
    sigfillset(&act.sa_mask);
1134
    act.sa_flags = 0;
1135
    act.sa_handler = host_alarm_handler;
1136

    
1137
    sigaction(SIGIO, &act, NULL);
1138
    fcntl_setfl(fd, O_ASYNC);
1139
    fcntl(fd, F_SETOWN, getpid());
1140
}
1141

    
1142
static int hpet_start_timer(struct qemu_alarm_timer *t)
1143
{
1144
    struct hpet_info info;
1145
    int r, fd;
1146

    
1147
    fd = qemu_open("/dev/hpet", O_RDONLY);
1148
    if (fd < 0)
1149
        return -1;
1150

    
1151
    /* Set frequency */
1152
    r = ioctl(fd, HPET_IRQFREQ, RTC_FREQ);
1153
    if (r < 0) {
1154
        fprintf(stderr, "Could not configure '/dev/hpet' to have a 1024Hz timer. This is not a fatal\n"
1155
                "error, but for better emulation accuracy type:\n"
1156
                "'echo 1024 > /proc/sys/dev/hpet/max-user-freq' as root.\n");
1157
        goto fail;
1158
    }
1159

    
1160
    /* Check capabilities */
1161
    r = ioctl(fd, HPET_INFO, &info);
1162
    if (r < 0)
1163
        goto fail;
1164

    
1165
    /* Enable periodic mode */
1166
    r = ioctl(fd, HPET_EPI, 0);
1167
    if (info.hi_flags && (r < 0))
1168
        goto fail;
1169

    
1170
    /* Enable interrupt */
1171
    r = ioctl(fd, HPET_IE_ON, 0);
1172
    if (r < 0)
1173
        goto fail;
1174

    
1175
    enable_sigio_timer(fd);
1176
    t->priv = (void *)(long)fd;
1177

    
1178
    return 0;
1179
fail:
1180
    close(fd);
1181
    return -1;
1182
}
1183

    
1184
static void hpet_stop_timer(struct qemu_alarm_timer *t)
1185
{
1186
    int fd = (long)t->priv;
1187

    
1188
    close(fd);
1189
}
1190

    
1191
static int rtc_start_timer(struct qemu_alarm_timer *t)
1192
{
1193
    int rtc_fd;
1194
    unsigned long current_rtc_freq = 0;
1195

    
1196
    TFR(rtc_fd = qemu_open("/dev/rtc", O_RDONLY));
1197
    if (rtc_fd < 0)
1198
        return -1;
1199
    ioctl(rtc_fd, RTC_IRQP_READ, &current_rtc_freq);
1200
    if (current_rtc_freq != RTC_FREQ &&
1201
        ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
1202
        fprintf(stderr, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n"
1203
                "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n"
1204
                "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n");
1205
        goto fail;
1206
    }
1207
    if (ioctl(rtc_fd, RTC_PIE_ON, 0) < 0) {
1208
    fail:
1209
        close(rtc_fd);
1210
        return -1;
1211
    }
1212

    
1213
    enable_sigio_timer(rtc_fd);
1214

    
1215
    t->priv = (void *)(long)rtc_fd;
1216

    
1217
    return 0;
1218
}
1219

    
1220
static void rtc_stop_timer(struct qemu_alarm_timer *t)
1221
{
1222
    int rtc_fd = (long)t->priv;
1223

    
1224
    close(rtc_fd);
1225
}
1226

    
1227
static int dynticks_start_timer(struct qemu_alarm_timer *t)
1228
{
1229
    struct sigevent ev;
1230
    timer_t host_timer;
1231
    struct sigaction act;
1232

    
1233
    sigfillset(&act.sa_mask);
1234
    act.sa_flags = 0;
1235
    act.sa_handler = host_alarm_handler;
1236

    
1237
    sigaction(SIGALRM, &act, NULL);
1238

    
1239
    /* 
1240
     * Initialize ev struct to 0 to avoid valgrind complaining
1241
     * about uninitialized data in timer_create call
1242
     */
1243
    memset(&ev, 0, sizeof(ev));
1244
    ev.sigev_value.sival_int = 0;
1245
    ev.sigev_notify = SIGEV_SIGNAL;
1246
    ev.sigev_signo = SIGALRM;
1247

    
1248
    if (timer_create(CLOCK_REALTIME, &ev, &host_timer)) {
1249
        perror("timer_create");
1250

    
1251
        /* disable dynticks */
1252
        fprintf(stderr, "Dynamic Ticks disabled\n");
1253

    
1254
        return -1;
1255
    }
1256

    
1257
    t->priv = (void *)(long)host_timer;
1258

    
1259
    return 0;
1260
}
1261

    
1262
static void dynticks_stop_timer(struct qemu_alarm_timer *t)
1263
{
1264
    timer_t host_timer = (timer_t)(long)t->priv;
1265

    
1266
    timer_delete(host_timer);
1267
}
1268

    
1269
static void dynticks_rearm_timer(struct qemu_alarm_timer *t)
1270
{
1271
    timer_t host_timer = (timer_t)(long)t->priv;
1272
    struct itimerspec timeout;
1273
    int64_t nearest_delta_us = INT64_MAX;
1274
    int64_t current_us;
1275

    
1276
    if (!active_timers[QEMU_CLOCK_REALTIME] &&
1277
        !active_timers[QEMU_CLOCK_VIRTUAL] &&
1278
        !active_timers[QEMU_CLOCK_HOST])
1279
        return;
1280

    
1281
    nearest_delta_us = qemu_next_deadline_dyntick();
1282

    
1283
    /* check whether a timer is already running */
1284
    if (timer_gettime(host_timer, &timeout)) {
1285
        perror("gettime");
1286
        fprintf(stderr, "Internal timer error: aborting\n");
1287
        exit(1);
1288
    }
1289
    current_us = timeout.it_value.tv_sec * 1000000 + timeout.it_value.tv_nsec/1000;
1290
    if (current_us && current_us <= nearest_delta_us)
1291
        return;
1292

    
1293
    timeout.it_interval.tv_sec = 0;
1294
    timeout.it_interval.tv_nsec = 0; /* 0 for one-shot timer */
1295
    timeout.it_value.tv_sec =  nearest_delta_us / 1000000;
1296
    timeout.it_value.tv_nsec = (nearest_delta_us % 1000000) * 1000;
1297
    if (timer_settime(host_timer, 0 /* RELATIVE */, &timeout, NULL)) {
1298
        perror("settime");
1299
        fprintf(stderr, "Internal timer error: aborting\n");
1300
        exit(1);
1301
    }
1302
}
1303

    
1304
#endif /* defined(__linux__) */
1305

    
1306
static int unix_start_timer(struct qemu_alarm_timer *t)
1307
{
1308
    struct sigaction act;
1309
    struct itimerval itv;
1310
    int err;
1311

    
1312
    /* timer signal */
1313
    sigfillset(&act.sa_mask);
1314
    act.sa_flags = 0;
1315
    act.sa_handler = host_alarm_handler;
1316

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

    
1319
    itv.it_interval.tv_sec = 0;
1320
    /* for i386 kernel 2.6 to get 1 ms */
1321
    itv.it_interval.tv_usec = 999;
1322
    itv.it_value.tv_sec = 0;
1323
    itv.it_value.tv_usec = 10 * 1000;
1324

    
1325
    err = setitimer(ITIMER_REAL, &itv, NULL);
1326
    if (err)
1327
        return -1;
1328

    
1329
    return 0;
1330
}
1331

    
1332
static void unix_stop_timer(struct qemu_alarm_timer *t)
1333
{
1334
    struct itimerval itv;
1335

    
1336
    memset(&itv, 0, sizeof(itv));
1337
    setitimer(ITIMER_REAL, &itv, NULL);
1338
}
1339

    
1340
#endif /* !defined(_WIN32) */
1341

    
1342

    
1343
#ifdef _WIN32
1344

    
1345
static int win32_start_timer(struct qemu_alarm_timer *t)
1346
{
1347
    TIMECAPS tc;
1348
    struct qemu_alarm_win32 *data = t->priv;
1349
    UINT flags;
1350

    
1351
    memset(&tc, 0, sizeof(tc));
1352
    timeGetDevCaps(&tc, sizeof(tc));
1353

    
1354
    if (data->period < tc.wPeriodMin)
1355
        data->period = tc.wPeriodMin;
1356

    
1357
    timeBeginPeriod(data->period);
1358

    
1359
    flags = TIME_CALLBACK_FUNCTION;
1360
    if (alarm_has_dynticks(t))
1361
        flags |= TIME_ONESHOT;
1362
    else
1363
        flags |= TIME_PERIODIC;
1364

    
1365
    data->timerId = timeSetEvent(1,         // interval (ms)
1366
                        data->period,       // resolution
1367
                        host_alarm_handler, // function
1368
                        (DWORD)t,           // parameter
1369
                        flags);
1370

    
1371
    if (!data->timerId) {
1372
        fprintf(stderr, "Failed to initialize win32 alarm timer: %ld\n",
1373
                GetLastError());
1374
        timeEndPeriod(data->period);
1375
        return -1;
1376
    }
1377

    
1378
    return 0;
1379
}
1380

    
1381
static void win32_stop_timer(struct qemu_alarm_timer *t)
1382
{
1383
    struct qemu_alarm_win32 *data = t->priv;
1384

    
1385
    timeKillEvent(data->timerId);
1386
    timeEndPeriod(data->period);
1387
}
1388

    
1389
static void win32_rearm_timer(struct qemu_alarm_timer *t)
1390
{
1391
    struct qemu_alarm_win32 *data = t->priv;
1392

    
1393
    if (!active_timers[QEMU_CLOCK_REALTIME] &&
1394
        !active_timers[QEMU_CLOCK_VIRTUAL] &&
1395
        !active_timers[QEMU_CLOCK_HOST])
1396
        return;
1397

    
1398
    timeKillEvent(data->timerId);
1399

    
1400
    data->timerId = timeSetEvent(1,
1401
                        data->period,
1402
                        host_alarm_handler,
1403
                        (DWORD)t,
1404
                        TIME_ONESHOT | TIME_PERIODIC);
1405

    
1406
    if (!data->timerId) {
1407
        fprintf(stderr, "Failed to re-arm win32 alarm timer %ld\n",
1408
                GetLastError());
1409

    
1410
        timeEndPeriod(data->period);
1411
        exit(1);
1412
    }
1413
}
1414

    
1415
#endif /* _WIN32 */
1416

    
1417
static int init_timer_alarm(void)
1418
{
1419
    struct qemu_alarm_timer *t = NULL;
1420
    int i, err = -1;
1421

    
1422
    for (i = 0; alarm_timers[i].name; i++) {
1423
        t = &alarm_timers[i];
1424

    
1425
        err = t->start(t);
1426
        if (!err)
1427
            break;
1428
    }
1429

    
1430
    if (err) {
1431
        err = -ENOENT;
1432
        goto fail;
1433
    }
1434

    
1435
    alarm_timer = t;
1436

    
1437
    return 0;
1438

    
1439
fail:
1440
    return err;
1441
}
1442

    
1443
static void quit_timers(void)
1444
{
1445
    alarm_timer->stop(alarm_timer);
1446
    alarm_timer = NULL;
1447
}
1448

    
1449
/***********************************************************/
1450
/* host time/date access */
1451
void qemu_get_timedate(struct tm *tm, int offset)
1452
{
1453
    time_t ti;
1454
    struct tm *ret;
1455

    
1456
    time(&ti);
1457
    ti += offset;
1458
    if (rtc_date_offset == -1) {
1459
        if (rtc_utc)
1460
            ret = gmtime(&ti);
1461
        else
1462
            ret = localtime(&ti);
1463
    } else {
1464
        ti -= rtc_date_offset;
1465
        ret = gmtime(&ti);
1466
    }
1467

    
1468
    memcpy(tm, ret, sizeof(struct tm));
1469
}
1470

    
1471
int qemu_timedate_diff(struct tm *tm)
1472
{
1473
    time_t seconds;
1474

    
1475
    if (rtc_date_offset == -1)
1476
        if (rtc_utc)
1477
            seconds = mktimegm(tm);
1478
        else
1479
            seconds = mktime(tm);
1480
    else
1481
        seconds = mktimegm(tm) + rtc_date_offset;
1482

    
1483
    return seconds - time(NULL);
1484
}
1485

    
1486
static void configure_rtc_date_offset(const char *startdate, int legacy)
1487
{
1488
    time_t rtc_start_date;
1489
    struct tm tm;
1490

    
1491
    if (!strcmp(startdate, "now") && legacy) {
1492
        rtc_date_offset = -1;
1493
    } else {
1494
        if (sscanf(startdate, "%d-%d-%dT%d:%d:%d",
1495
                   &tm.tm_year,
1496
                   &tm.tm_mon,
1497
                   &tm.tm_mday,
1498
                   &tm.tm_hour,
1499
                   &tm.tm_min,
1500
                   &tm.tm_sec) == 6) {
1501
            /* OK */
1502
        } else if (sscanf(startdate, "%d-%d-%d",
1503
                          &tm.tm_year,
1504
                          &tm.tm_mon,
1505
                          &tm.tm_mday) == 3) {
1506
            tm.tm_hour = 0;
1507
            tm.tm_min = 0;
1508
            tm.tm_sec = 0;
1509
        } else {
1510
            goto date_fail;
1511
        }
1512
        tm.tm_year -= 1900;
1513
        tm.tm_mon--;
1514
        rtc_start_date = mktimegm(&tm);
1515
        if (rtc_start_date == -1) {
1516
        date_fail:
1517
            fprintf(stderr, "Invalid date format. Valid formats are:\n"
1518
                            "'2006-06-17T16:01:21' or '2006-06-17'\n");
1519
            exit(1);
1520
        }
1521
        rtc_date_offset = time(NULL) - rtc_start_date;
1522
    }
1523
}
1524

    
1525
static void configure_rtc(QemuOpts *opts)
1526
{
1527
    const char *value;
1528

    
1529
    value = qemu_opt_get(opts, "base");
1530
    if (value) {
1531
        if (!strcmp(value, "utc")) {
1532
            rtc_utc = 1;
1533
        } else if (!strcmp(value, "localtime")) {
1534
            rtc_utc = 0;
1535
        } else {
1536
            configure_rtc_date_offset(value, 0);
1537
        }
1538
    }
1539
    value = qemu_opt_get(opts, "clock");
1540
    if (value) {
1541
        if (!strcmp(value, "host")) {
1542
            rtc_clock = host_clock;
1543
        } else if (!strcmp(value, "vm")) {
1544
            rtc_clock = vm_clock;
1545
        } else {
1546
            fprintf(stderr, "qemu: invalid option value '%s'\n", value);
1547
            exit(1);
1548
        }
1549
    }
1550
#ifdef CONFIG_TARGET_I386
1551
    value = qemu_opt_get(opts, "driftfix");
1552
    if (value) {
1553
        if (!strcmp(buf, "slew")) {
1554
            rtc_td_hack = 1;
1555
        } else if (!strcmp(buf, "none")) {
1556
            rtc_td_hack = 0;
1557
        } else {
1558
            fprintf(stderr, "qemu: invalid option value '%s'\n", value);
1559
            exit(1);
1560
        }
1561
    }
1562
#endif
1563
}
1564

    
1565
#ifdef _WIN32
1566
static void socket_cleanup(void)
1567
{
1568
    WSACleanup();
1569
}
1570

    
1571
static int socket_init(void)
1572
{
1573
    WSADATA Data;
1574
    int ret, err;
1575

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

    
1587
/***********************************************************/
1588
/* Bluetooth support */
1589
static int nb_hcis;
1590
static int cur_hci;
1591
static struct HCIInfo *hci_table[MAX_NICS];
1592

    
1593
static struct bt_vlan_s {
1594
    struct bt_scatternet_s net;
1595
    int id;
1596
    struct bt_vlan_s *next;
1597
} *first_bt_vlan;
1598

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

    
1616
static void null_hci_send(struct HCIInfo *hci, const uint8_t *data, int len)
1617
{
1618
}
1619

    
1620
static int null_hci_addr_set(struct HCIInfo *hci, const uint8_t *bd_addr)
1621
{
1622
    return -ENOTSUP;
1623
}
1624

    
1625
static struct HCIInfo null_hci = {
1626
    .cmd_send = null_hci_send,
1627
    .sco_send = null_hci_send,
1628
    .acl_send = null_hci_send,
1629
    .bdaddr_set = null_hci_addr_set,
1630
};
1631

    
1632
struct HCIInfo *qemu_next_hci(void)
1633
{
1634
    if (cur_hci == nb_hcis)
1635
        return &null_hci;
1636

    
1637
    return hci_table[cur_hci++];
1638
}
1639

    
1640
static struct HCIInfo *hci_init(const char *str)
1641
{
1642
    char *endp;
1643
    struct bt_scatternet_s *vlan = 0;
1644

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

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

    
1667
    return 0;
1668
}
1669

    
1670
static int bt_hci_parse(const char *str)
1671
{
1672
    struct HCIInfo *hci;
1673
    bdaddr_t bdaddr;
1674

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

    
1680
    hci = hci_init(str);
1681
    if (!hci)
1682
        return -1;
1683

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

    
1692
    hci_table[nb_hcis++] = hci;
1693

    
1694
    return 0;
1695
}
1696

    
1697
static void bt_vhci_add(int vlan_id)
1698
{
1699
    struct bt_scatternet_s *vlan = qemu_find_bt_vlan(vlan_id);
1700

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

    
1705
    bt_vhci_init(bt_new_hci(vlan));
1706
}
1707

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

    
1716
    pstrcpy(devname, MIN(sizeof(devname), len), opt);
1717

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

    
1726
    vlan = qemu_find_bt_vlan(vlan_id);
1727

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

    
1732
    if (!strcmp(devname, "keyboard"))
1733
        return bt_keyboard_init(vlan);
1734

    
1735
    fprintf(stderr, "qemu: unsupported bluetooth device `%s'\n", devname);
1736
    return 0;
1737
}
1738

    
1739
static int bt_parse(const char *opt)
1740
{
1741
    const char *endp, *p;
1742
    int vlan;
1743

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

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

    
1768
            bt_vhci_add(vlan);
1769
            return 0;
1770
        }
1771
    } else if (strstart(opt, "device:", &endp))
1772
        return !bt_device_add(endp);
1773

    
1774
    fprintf(stderr, "qemu: bad bluetooth parameter '%s'\n", opt);
1775
    return 1;
1776
}
1777

    
1778
/***********************************************************/
1779
/* QEMU Block devices */
1780

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

    
1788
QemuOpts *drive_add(const char *file, const char *fmt, ...)
1789
{
1790
    va_list ap;
1791
    char optstr[1024];
1792
    QemuOpts *opts;
1793

    
1794
    va_start(ap, fmt);
1795
    vsnprintf(optstr, sizeof(optstr), fmt, ap);
1796
    va_end(ap);
1797

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

    
1809
DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit)
1810
{
1811
    DriveInfo *dinfo;
1812

    
1813
    /* seek interface, bus and unit */
1814

    
1815
    QTAILQ_FOREACH(dinfo, &drives, next) {
1816
        if (dinfo->type == type &&
1817
            dinfo->bus == bus &&
1818
            dinfo->unit == unit)
1819
            return dinfo;
1820
    }
1821

    
1822
    return NULL;
1823
}
1824

    
1825
DriveInfo *drive_get_by_id(const char *id)
1826
{
1827
    DriveInfo *dinfo;
1828

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

    
1837
int drive_get_max_bus(BlockInterfaceType type)
1838
{
1839
    int max_bus;
1840
    DriveInfo *dinfo;
1841

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

    
1851
const char *drive_get_serial(BlockDriverState *bdrv)
1852
{
1853
    DriveInfo *dinfo;
1854

    
1855
    QTAILQ_FOREACH(dinfo, &drives, next) {
1856
        if (dinfo->bdrv == bdrv)
1857
            return dinfo->serial;
1858
    }
1859

    
1860
    return "\0";
1861
}
1862

    
1863
BlockInterfaceErrorAction drive_get_on_error(
1864
    BlockDriverState *bdrv, int is_read)
1865
{
1866
    DriveInfo *dinfo;
1867

    
1868
    QTAILQ_FOREACH(dinfo, &drives, next) {
1869
        if (dinfo->bdrv == bdrv)
1870
            return is_read ? dinfo->on_read_error : dinfo->on_write_error;
1871
    }
1872

    
1873
    return is_read ? BLOCK_ERR_REPORT : BLOCK_ERR_STOP_ENOSPC;
1874
}
1875

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

    
1881
void drive_uninit(DriveInfo *dinfo)
1882
{
1883
    qemu_opts_del(dinfo->opts);
1884
    bdrv_delete(dinfo->bdrv);
1885
    QTAILQ_REMOVE(&drives, dinfo, next);
1886
    qemu_free(dinfo);
1887
}
1888

    
1889
static int parse_block_error_action(const char *buf, int is_read)
1890
{
1891
    if (!strcmp(buf, "ignore")) {
1892
        return BLOCK_ERR_IGNORE;
1893
    } else if (!is_read && !strcmp(buf, "enospc")) {
1894
        return BLOCK_ERR_STOP_ENOSPC;
1895
    } else if (!strcmp(buf, "stop")) {
1896
        return BLOCK_ERR_STOP_ANY;
1897
    } else if (!strcmp(buf, "report")) {
1898
        return BLOCK_ERR_REPORT;
1899
    } else {
1900
        fprintf(stderr, "qemu: '%s' invalid %s error action\n",
1901
            buf, is_read ? "read" : "write");
1902
        return -1;
1903
    }
1904
}
1905

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

    
1931
    *fatal_error = 1;
1932

    
1933
    translation = BIOS_ATA_TRANSLATION_AUTO;
1934
    cache = 1;
1935

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

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

    
1952
    cyls  = qemu_opt_get_number(opts, "cyls", 0);
1953
    heads = qemu_opt_get_number(opts, "heads", 0);
1954
    secs  = qemu_opt_get_number(opts, "secs", 0);
1955

    
1956
    snapshot = qemu_opt_get_bool(opts, "snapshot", 0);
1957
    ro = qemu_opt_get_bool(opts, "readonly", 0);
1958

    
1959
    file = qemu_opt_get(opts, "file");
1960
    serial = qemu_opt_get(opts, "serial");
1961

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

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

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

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

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

    
2060
#ifdef CONFIG_LINUX_AIO
2061
    if ((buf = qemu_opt_get(opts, "aio")) != NULL) {
2062
        if (!strcmp(buf, "threads"))
2063
            aio = 0;
2064
        else if (!strcmp(buf, "native"))
2065
            aio = 1;
2066
        else {
2067
           fprintf(stderr, "qemu: invalid aio option\n");
2068
           return NULL;
2069
        }
2070
    }
2071
#endif
2072

    
2073
    if ((buf = qemu_opt_get(opts, "format")) != NULL) {
2074
       if (strcmp(buf, "?") == 0) {
2075
            fprintf(stderr, "qemu: Supported formats:");
2076
            bdrv_iterate_format(bdrv_format_print, NULL);
2077
            fprintf(stderr, "\n");
2078
            return NULL;
2079
        }
2080
        drv = bdrv_find_whitelisted_format(buf);
2081
        if (!drv) {
2082
            fprintf(stderr, "qemu: '%s' invalid format\n", buf);
2083
            return NULL;
2084
        }
2085
    }
2086

    
2087
    on_write_error = BLOCK_ERR_STOP_ENOSPC;
2088
    if ((buf = qemu_opt_get(opts, "werror")) != NULL) {
2089
        if (type != IF_IDE && type != IF_SCSI && type != IF_VIRTIO) {
2090
            fprintf(stderr, "werror is no supported by this format\n");
2091
            return NULL;
2092
        }
2093

    
2094
        on_write_error = parse_block_error_action(buf, 0);
2095
        if (on_write_error < 0) {
2096
            return NULL;
2097
        }
2098
    }
2099

    
2100
    on_read_error = BLOCK_ERR_REPORT;
2101
    if ((buf = qemu_opt_get(opts, "rerror")) != NULL) {
2102
        if (type != IF_IDE && type != IF_VIRTIO) {
2103
            fprintf(stderr, "rerror is no supported by this format\n");
2104
            return NULL;
2105
        }
2106

    
2107
        on_read_error = parse_block_error_action(buf, 1);
2108
        if (on_read_error < 0) {
2109
            return NULL;
2110
        }
2111
    }
2112

    
2113
    if ((devaddr = qemu_opt_get(opts, "addr")) != NULL) {
2114
        if (type != IF_VIRTIO) {
2115
            fprintf(stderr, "addr is not supported\n");
2116
            return NULL;
2117
        }
2118
    }
2119

    
2120
    /* compute bus and unit according index */
2121

    
2122
    if (index != -1) {
2123
        if (bus_id != 0 || unit_id != -1) {
2124
            fprintf(stderr,
2125
                    "qemu: index cannot be used with bus and unit\n");
2126
            return NULL;
2127
        }
2128
        if (max_devs == 0)
2129
        {
2130
            unit_id = index;
2131
            bus_id = 0;
2132
        } else {
2133
            unit_id = index % max_devs;
2134
            bus_id = index / max_devs;
2135
        }
2136
    }
2137

    
2138
    /* if user doesn't specify a unit_id,
2139
     * try to find the first free
2140
     */
2141

    
2142
    if (unit_id == -1) {
2143
       unit_id = 0;
2144
       while (drive_get(type, bus_id, unit_id) != NULL) {
2145
           unit_id++;
2146
           if (max_devs && unit_id >= max_devs) {
2147
               unit_id -= max_devs;
2148
               bus_id++;
2149
           }
2150
       }
2151
    }
2152

    
2153
    /* check unit id */
2154

    
2155
    if (max_devs && unit_id >= max_devs) {
2156
        fprintf(stderr, "qemu: unit %d too big (max is %d)\n",
2157
                unit_id, max_devs - 1);
2158
        return NULL;
2159
    }
2160

    
2161
    /*
2162
     * ignore multiple definitions
2163
     */
2164

    
2165
    if (drive_get(type, bus_id, unit_id) != NULL) {
2166
        *fatal_error = 0;
2167
        return NULL;
2168
    }
2169

    
2170
    /* init */
2171

    
2172
    dinfo = qemu_mallocz(sizeof(*dinfo));
2173
    if ((buf = qemu_opts_id(opts)) != NULL) {
2174
        dinfo->id = qemu_strdup(buf);
2175
    } else {
2176
        /* no id supplied -> create one */
2177
        dinfo->id = qemu_mallocz(32);
2178
        if (type == IF_IDE || type == IF_SCSI)
2179
            mediastr = (media == MEDIA_CDROM) ? "-cd" : "-hd";
2180
        if (max_devs)
2181
            snprintf(dinfo->id, 32, "%s%i%s%i",
2182
                     devname, bus_id, mediastr, unit_id);
2183
        else
2184
            snprintf(dinfo->id, 32, "%s%s%i",
2185
                     devname, mediastr, unit_id);
2186
    }
2187
    dinfo->bdrv = bdrv_new(dinfo->id);
2188
    dinfo->devaddr = devaddr;
2189
    dinfo->type = type;
2190
    dinfo->bus = bus_id;
2191
    dinfo->unit = unit_id;
2192
    dinfo->on_read_error = on_read_error;
2193
    dinfo->on_write_error = on_write_error;
2194
    dinfo->opts = opts;
2195
    if (serial)
2196
        strncpy(dinfo->serial, serial, sizeof(serial));
2197
    QTAILQ_INSERT_TAIL(&drives, dinfo, next);
2198

    
2199
    switch(type) {
2200
    case IF_IDE:
2201
    case IF_SCSI:
2202
    case IF_XEN:
2203
    case IF_NONE:
2204
        switch(media) {
2205
        case MEDIA_DISK:
2206
            if (cyls != 0) {
2207
                bdrv_set_geometry_hint(dinfo->bdrv, cyls, heads, secs);
2208
                bdrv_set_translation_hint(dinfo->bdrv, translation);
2209
            }
2210
            break;
2211
        case MEDIA_CDROM:
2212
            bdrv_set_type_hint(dinfo->bdrv, BDRV_TYPE_CDROM);
2213
            break;
2214
        }
2215
        break;
2216
    case IF_SD:
2217
        /* FIXME: This isn't really a floppy, but it's a reasonable
2218
           approximation.  */
2219
    case IF_FLOPPY:
2220
        bdrv_set_type_hint(dinfo->bdrv, BDRV_TYPE_FLOPPY);
2221
        break;
2222
    case IF_PFLASH:
2223
    case IF_MTD:
2224
        break;
2225
    case IF_VIRTIO:
2226
        /* add virtio block device */
2227
        opts = qemu_opts_create(&qemu_device_opts, NULL, 0);
2228
        qemu_opt_set(opts, "driver", "virtio-blk-pci");
2229
        qemu_opt_set(opts, "drive", dinfo->id);
2230
        if (devaddr)
2231
            qemu_opt_set(opts, "addr", devaddr);
2232
        break;
2233
    case IF_COUNT:
2234
        abort();
2235
    }
2236
    if (!file) {
2237
        *fatal_error = 0;
2238
        return NULL;
2239
    }
2240
    bdrv_flags = 0;
2241
    if (snapshot) {
2242
        bdrv_flags |= BDRV_O_SNAPSHOT;
2243
        cache = 2; /* always use write-back with snapshot */
2244
    }
2245
    if (cache == 0) /* no caching */
2246
        bdrv_flags |= BDRV_O_NOCACHE;
2247
    else if (cache == 2) /* write-back */
2248
        bdrv_flags |= BDRV_O_CACHE_WB;
2249

    
2250
    if (aio == 1) {
2251
        bdrv_flags |= BDRV_O_NATIVE_AIO;
2252
    } else {
2253
        bdrv_flags &= ~BDRV_O_NATIVE_AIO;
2254
    }
2255

    
2256
    if (ro == 1) {
2257
        if (type != IF_SCSI && type != IF_VIRTIO && type != IF_FLOPPY) {
2258
            fprintf(stderr, "qemu: readonly flag not supported for drive with this interface\n");
2259
            return NULL;
2260
        }
2261
    }
2262
    /* 
2263
     * cdrom is read-only. Set it now, after above interface checking
2264
     * since readonly attribute not explicitly required, so no error.
2265
     */
2266
    if (media == MEDIA_CDROM) {
2267
        ro = 1;
2268
    }
2269
    bdrv_flags |= ro ? 0 : BDRV_O_RDWR;
2270

    
2271
    if (bdrv_open2(dinfo->bdrv, file, bdrv_flags, drv) < 0) {
2272
        fprintf(stderr, "qemu: could not open disk image %s: %s\n",
2273
                        file, strerror(errno));
2274
        return NULL;
2275
    }
2276

    
2277
    if (bdrv_key_required(dinfo->bdrv))
2278
        autostart = 0;
2279
    *fatal_error = 0;
2280
    return dinfo;
2281
}
2282

    
2283
static int drive_init_func(QemuOpts *opts, void *opaque)
2284
{
2285
    QEMUMachine *machine = opaque;
2286
    int fatal_error = 0;
2287

    
2288
    if (drive_init(opts, machine, &fatal_error) == NULL) {
2289
        if (fatal_error)
2290
            return 1;
2291
    }
2292
    return 0;
2293
}
2294

    
2295
static int drive_enable_snapshot(QemuOpts *opts, void *opaque)
2296
{
2297
    if (NULL == qemu_opt_get(opts, "snapshot")) {
2298
        qemu_opt_set(opts, "snapshot", "on");
2299
    }
2300
    return 0;
2301
}
2302

    
2303
void qemu_register_boot_set(QEMUBootSetHandler *func, void *opaque)
2304
{
2305
    boot_set_handler = func;
2306
    boot_set_opaque = opaque;
2307
}
2308

    
2309
int qemu_boot_set(const char *boot_devices)
2310
{
2311
    if (!boot_set_handler) {
2312
        return -EINVAL;
2313
    }
2314
    return boot_set_handler(boot_set_opaque, boot_devices);
2315
}
2316

    
2317
static int parse_bootdevices(char *devices)
2318
{
2319
    /* We just do some generic consistency checks */
2320
    const char *p;
2321
    int bitmap = 0;
2322

    
2323
    for (p = devices; *p != '\0'; p++) {
2324
        /* Allowed boot devices are:
2325
         * a-b: floppy disk drives
2326
         * c-f: IDE disk drives
2327
         * g-m: machine implementation dependant drives
2328
         * n-p: network devices
2329
         * It's up to each machine implementation to check if the given boot
2330
         * devices match the actual hardware implementation and firmware
2331
         * features.
2332
         */
2333
        if (*p < 'a' || *p > 'p') {
2334
            fprintf(stderr, "Invalid boot device '%c'\n", *p);
2335
            exit(1);
2336
        }
2337
        if (bitmap & (1 << (*p - 'a'))) {
2338
            fprintf(stderr, "Boot device '%c' was given twice\n", *p);
2339
            exit(1);
2340
        }
2341
        bitmap |= 1 << (*p - 'a');
2342
    }
2343
    return bitmap;
2344
}
2345

    
2346
static void restore_boot_devices(void *opaque)
2347
{
2348
    char *standard_boot_devices = opaque;
2349

    
2350
    qemu_boot_set(standard_boot_devices);
2351

    
2352
    qemu_unregister_reset(restore_boot_devices, standard_boot_devices);
2353
    qemu_free(standard_boot_devices);
2354
}
2355

    
2356
static void numa_add(const char *optarg)
2357
{
2358
    char option[128];
2359
    char *endptr;
2360
    unsigned long long value, endvalue;
2361
    int nodenr;
2362

    
2363
    optarg = get_opt_name(option, 128, optarg, ',') + 1;
2364
    if (!strcmp(option, "node")) {
2365
        if (get_param_value(option, 128, "nodeid", optarg) == 0) {
2366
            nodenr = nb_numa_nodes;
2367
        } else {
2368
            nodenr = strtoull(option, NULL, 10);
2369
        }
2370

    
2371
        if (get_param_value(option, 128, "mem", optarg) == 0) {
2372
            node_mem[nodenr] = 0;
2373
        } else {
2374
            value = strtoull(option, &endptr, 0);
2375
            switch (*endptr) {
2376
            case 0: case 'M': case 'm':
2377
                value <<= 20;
2378
                break;
2379
            case 'G': case 'g':
2380
                value <<= 30;
2381
                break;
2382
            }
2383
            node_mem[nodenr] = value;
2384
        }
2385
        if (get_param_value(option, 128, "cpus", optarg) == 0) {
2386
            node_cpumask[nodenr] = 0;
2387
        } else {
2388
            value = strtoull(option, &endptr, 10);
2389
            if (value >= 64) {
2390
                value = 63;
2391
                fprintf(stderr, "only 64 CPUs in NUMA mode supported.\n");
2392
            } else {
2393
                if (*endptr == '-') {
2394
                    endvalue = strtoull(endptr+1, &endptr, 10);
2395
                    if (endvalue >= 63) {
2396
                        endvalue = 62;
2397
                        fprintf(stderr,
2398
                            "only 63 CPUs in NUMA mode supported.\n");
2399
                    }
2400
                    value = (2ULL << endvalue) - (1ULL << value);
2401
                } else {
2402
                    value = 1ULL << value;
2403
                }
2404
            }
2405
            node_cpumask[nodenr] = value;
2406
        }
2407
        nb_numa_nodes++;
2408
    }
2409
    return;
2410
}
2411

    
2412
static void smp_parse(const char *optarg)
2413
{
2414
    int smp, sockets = 0, threads = 0, cores = 0;
2415
    char *endptr;
2416
    char option[128];
2417

    
2418
    smp = strtoul(optarg, &endptr, 10);
2419
    if (endptr != optarg) {
2420
        if (*endptr == ',') {
2421
            endptr++;
2422
        }
2423
    }
2424
    if (get_param_value(option, 128, "sockets", endptr) != 0)
2425
        sockets = strtoull(option, NULL, 10);
2426
    if (get_param_value(option, 128, "cores", endptr) != 0)
2427
        cores = strtoull(option, NULL, 10);
2428
    if (get_param_value(option, 128, "threads", endptr) != 0)
2429
        threads = strtoull(option, NULL, 10);
2430
    if (get_param_value(option, 128, "maxcpus", endptr) != 0)
2431
        max_cpus = strtoull(option, NULL, 10);
2432

    
2433
    /* compute missing values, prefer sockets over cores over threads */
2434
    if (smp == 0 || sockets == 0) {
2435
        sockets = sockets > 0 ? sockets : 1;
2436
        cores = cores > 0 ? cores : 1;
2437
        threads = threads > 0 ? threads : 1;
2438
        if (smp == 0) {
2439
            smp = cores * threads * sockets;
2440
        }
2441
    } else {
2442
        if (cores == 0) {
2443
            threads = threads > 0 ? threads : 1;
2444
            cores = smp / (sockets * threads);
2445
        } else {
2446
            if (sockets) {
2447
                threads = smp / (cores * sockets);
2448
            }
2449
        }
2450
    }
2451
    smp_cpus = smp;
2452
    smp_cores = cores > 0 ? cores : 1;
2453
    smp_threads = threads > 0 ? threads : 1;
2454
    if (max_cpus == 0)
2455
        max_cpus = smp_cpus;
2456
}
2457

    
2458
/***********************************************************/
2459
/* USB devices */
2460

    
2461
static int usb_device_add(const char *devname, int is_hotplug)
2462
{
2463
    const char *p;
2464
    USBDevice *dev = NULL;
2465

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

    
2469
    /* drivers with .usbdevice_name entry in USBDeviceInfo */
2470
    dev = usbdevice_create(devname);
2471
    if (dev)
2472
        goto done;
2473

    
2474
    /* the other ones */
2475
    if (strstart(devname, "host:", &p)) {
2476
        dev = usb_host_device_open(p);
2477
    } else if (!strcmp(devname, "bt") || strstart(devname, "bt:", &p)) {
2478
        dev = usb_bt_init(devname[2] ? hci_init(p) :
2479
                        bt_new_hci(qemu_find_bt_vlan(0)));
2480
    } else {
2481
        return -1;
2482
    }
2483
    if (!dev)
2484
        return -1;
2485

    
2486
done:
2487
    return 0;
2488
}
2489

    
2490
static int usb_device_del(const char *devname)
2491
{
2492
    int bus_num, addr;
2493
    const char *p;
2494

    
2495
    if (strstart(devname, "host:", &p))
2496
        return usb_host_device_close(p);
2497

    
2498
    if (!usb_enabled)
2499
        return -1;
2500

    
2501
    p = strchr(devname, '.');
2502
    if (!p)
2503
        return -1;
2504
    bus_num = strtoul(devname, NULL, 0);
2505
    addr = strtoul(p + 1, NULL, 0);
2506

    
2507
    return usb_device_delete_addr(bus_num, addr);
2508
}
2509

    
2510
static int usb_parse(const char *cmdline)
2511
{
2512
    int r;
2513
    r = usb_device_add(cmdline, 0);
2514
    if (r < 0) {
2515
        fprintf(stderr, "qemu: could not add USB device '%s'\n", cmdline);
2516
    }
2517
    return r;
2518
}
2519

    
2520
void do_usb_add(Monitor *mon, const QDict *qdict)
2521
{
2522
    const char *devname = qdict_get_str(qdict, "devname");
2523
    if (usb_device_add(devname, 1) < 0) {
2524
        qemu_error("could not add USB device '%s'\n", devname);
2525
    }
2526
}
2527

    
2528
void do_usb_del(Monitor *mon, const QDict *qdict)
2529
{
2530
    const char *devname = qdict_get_str(qdict, "devname");
2531
    if (usb_device_del(devname) < 0) {
2532
        qemu_error("could not delete USB device '%s'\n", devname);
2533
    }
2534
}
2535

    
2536
/***********************************************************/
2537
/* PCMCIA/Cardbus */
2538

    
2539
static struct pcmcia_socket_entry_s {
2540
    PCMCIASocket *socket;
2541
    struct pcmcia_socket_entry_s *next;
2542
} *pcmcia_sockets = 0;
2543

    
2544
void pcmcia_socket_register(PCMCIASocket *socket)
2545
{
2546
    struct pcmcia_socket_entry_s *entry;
2547

    
2548
    entry = qemu_malloc(sizeof(struct pcmcia_socket_entry_s));
2549
    entry->socket = socket;
2550
    entry->next = pcmcia_sockets;
2551
    pcmcia_sockets = entry;
2552
}
2553

    
2554
void pcmcia_socket_unregister(PCMCIASocket *socket)
2555
{
2556
    struct pcmcia_socket_entry_s *entry, **ptr;
2557

    
2558
    ptr = &pcmcia_sockets;
2559
    for (entry = *ptr; entry; ptr = &entry->next, entry = *ptr)
2560
        if (entry->socket == socket) {
2561
            *ptr = entry->next;
2562
            qemu_free(entry);
2563
        }
2564
}
2565

    
2566
void pcmcia_info(Monitor *mon)
2567
{
2568
    struct pcmcia_socket_entry_s *iter;
2569

    
2570
    if (!pcmcia_sockets)
2571
        monitor_printf(mon, "No PCMCIA sockets\n");
2572

    
2573
    for (iter = pcmcia_sockets; iter; iter = iter->next)
2574
        monitor_printf(mon, "%s: %s\n", iter->socket->slot_string,
2575
                       iter->socket->attached ? iter->socket->card_string :
2576
                       "Empty");
2577
}
2578

    
2579
/***********************************************************/
2580
/* register display */
2581

    
2582
struct DisplayAllocator default_allocator = {
2583
    defaultallocator_create_displaysurface,
2584
    defaultallocator_resize_displaysurface,
2585
    defaultallocator_free_displaysurface
2586
};
2587

    
2588
/* dumb display */
2589

    
2590
static void dumb_display_init(void)
2591
{
2592
    DisplayState *ds = qemu_mallocz(sizeof(DisplayState));
2593
    ds->allocator = &default_allocator;
2594
    ds->surface = qemu_create_displaysurface(ds, 640, 480);
2595
    register_displaystate(ds);
2596
}
2597

    
2598
void register_displaystate(DisplayState *ds)
2599
{
2600
    DisplayState **s;
2601
    s = &display_state;
2602
    while (*s != NULL)
2603
        s = &(*s)->next;
2604
    ds->next = NULL;
2605
    *s = ds;
2606
}
2607

    
2608
DisplayState *get_displaystate(void)
2609
{
2610
    if (!display_state) {
2611
        dumb_display_init();
2612
    }
2613
    return display_state;
2614
}
2615

    
2616
DisplayAllocator *register_displayallocator(DisplayState *ds, DisplayAllocator *da)
2617
{
2618
    if(ds->allocator ==  &default_allocator) {
2619
        DisplaySurface *surf;
2620
        surf = da->create_displaysurface(ds_get_width(ds), ds_get_height(ds));
2621
        defaultallocator_free_displaysurface(ds->surface);
2622
        ds->surface = surf;
2623
        ds->allocator = da;
2624
    }
2625
    return ds->allocator;
2626
}
2627

    
2628
/***********************************************************/
2629
/* I/O handling */
2630

    
2631
typedef struct IOHandlerRecord {
2632
    int fd;
2633
    IOCanRWHandler *fd_read_poll;
2634
    IOHandler *fd_read;
2635
    IOHandler *fd_write;
2636
    int deleted;
2637
    void *opaque;
2638
    /* temporary data */
2639
    struct pollfd *ufd;
2640
    struct IOHandlerRecord *next;
2641
} IOHandlerRecord;
2642

    
2643
static IOHandlerRecord *first_io_handler;
2644

    
2645
/* XXX: fd_read_poll should be suppressed, but an API change is
2646
   necessary in the character devices to suppress fd_can_read(). */
2647
int qemu_set_fd_handler2(int fd,
2648
                         IOCanRWHandler *fd_read_poll,
2649
                         IOHandler *fd_read,
2650
                         IOHandler *fd_write,
2651
                         void *opaque)
2652
{
2653
    IOHandlerRecord **pioh, *ioh;
2654

    
2655
    if (!fd_read && !fd_write) {
2656
        pioh = &first_io_handler;
2657
        for(;;) {
2658
            ioh = *pioh;
2659
            if (ioh == NULL)
2660
                break;
2661
            if (ioh->fd == fd) {
2662
                ioh->deleted = 1;
2663
                break;
2664
            }
2665
            pioh = &ioh->next;
2666
        }
2667
    } else {
2668
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
2669
            if (ioh->fd == fd)
2670
                goto found;
2671
        }
2672
        ioh = qemu_mallocz(sizeof(IOHandlerRecord));
2673
        ioh->next = first_io_handler;
2674
        first_io_handler = ioh;
2675
    found:
2676
        ioh->fd = fd;
2677
        ioh->fd_read_poll = fd_read_poll;
2678
        ioh->fd_read = fd_read;
2679
        ioh->fd_write = fd_write;
2680
        ioh->opaque = opaque;
2681
        ioh->deleted = 0;
2682
    }
2683
    return 0;
2684
}
2685

    
2686
int qemu_set_fd_handler(int fd,
2687
                        IOHandler *fd_read,
2688
                        IOHandler *fd_write,
2689
                        void *opaque)
2690
{
2691
    return qemu_set_fd_handler2(fd, NULL, fd_read, fd_write, opaque);
2692
}
2693

    
2694
#ifdef _WIN32
2695
/***********************************************************/
2696
/* Polling handling */
2697

    
2698
typedef struct PollingEntry {
2699
    PollingFunc *func;
2700
    void *opaque;
2701
    struct PollingEntry *next;
2702
} PollingEntry;
2703

    
2704
static PollingEntry *first_polling_entry;
2705

    
2706
int qemu_add_polling_cb(PollingFunc *func, void *opaque)
2707
{
2708
    PollingEntry **ppe, *pe;
2709
    pe = qemu_mallocz(sizeof(PollingEntry));
2710
    pe->func = func;
2711
    pe->opaque = opaque;
2712
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next);
2713
    *ppe = pe;
2714
    return 0;
2715
}
2716

    
2717
void qemu_del_polling_cb(PollingFunc *func, void *opaque)
2718
{
2719
    PollingEntry **ppe, *pe;
2720
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next) {
2721
        pe = *ppe;
2722
        if (pe->func == func && pe->opaque == opaque) {
2723
            *ppe = pe->next;
2724
            qemu_free(pe);
2725
            break;
2726
        }
2727
    }
2728
}
2729

    
2730
/***********************************************************/
2731
/* Wait objects support */
2732
typedef struct WaitObjects {
2733
    int num;
2734
    HANDLE events[MAXIMUM_WAIT_OBJECTS + 1];
2735
    WaitObjectFunc *func[MAXIMUM_WAIT_OBJECTS + 1];
2736
    void *opaque[MAXIMUM_WAIT_OBJECTS + 1];
2737
} WaitObjects;
2738

    
2739
static WaitObjects wait_objects = {0};
2740

    
2741
int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
2742
{
2743
    WaitObjects *w = &wait_objects;
2744

    
2745
    if (w->num >= MAXIMUM_WAIT_OBJECTS)
2746
        return -1;
2747
    w->events[w->num] = handle;
2748
    w->func[w->num] = func;
2749
    w->opaque[w->num] = opaque;
2750
    w->num++;
2751
    return 0;
2752
}
2753

    
2754
void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
2755
{
2756
    int i, found;
2757
    WaitObjects *w = &wait_objects;
2758

    
2759
    found = 0;
2760
    for (i = 0; i < w->num; i++) {
2761
        if (w->events[i] == handle)
2762
            found = 1;
2763
        if (found) {
2764
            w->events[i] = w->events[i + 1];
2765
            w->func[i] = w->func[i + 1];
2766
            w->opaque[i] = w->opaque[i + 1];
2767
        }
2768
    }
2769
    if (found)
2770
        w->num--;
2771
}
2772
#endif
2773

    
2774
/***********************************************************/
2775
/* ram save/restore */
2776

    
2777
#define RAM_SAVE_FLAG_FULL        0x01 /* Obsolete, not used anymore */
2778
#define RAM_SAVE_FLAG_COMPRESS        0x02
2779
#define RAM_SAVE_FLAG_MEM_SIZE        0x04
2780
#define RAM_SAVE_FLAG_PAGE        0x08
2781
#define RAM_SAVE_FLAG_EOS        0x10
2782

    
2783
static int is_dup_page(uint8_t *page, uint8_t ch)
2784
{
2785
    uint32_t val = ch << 24 | ch << 16 | ch << 8 | ch;
2786
    uint32_t *array = (uint32_t *)page;
2787
    int i;
2788

    
2789
    for (i = 0; i < (TARGET_PAGE_SIZE / 4); i++) {
2790
        if (array[i] != val)
2791
            return 0;
2792
    }
2793

    
2794
    return 1;
2795
}
2796

    
2797
static int ram_save_block(QEMUFile *f)
2798
{
2799
    static ram_addr_t current_addr = 0;
2800
    ram_addr_t saved_addr = current_addr;
2801
    ram_addr_t addr = 0;
2802
    int found = 0;
2803

    
2804
    while (addr < last_ram_offset) {
2805
        if (cpu_physical_memory_get_dirty(current_addr, MIGRATION_DIRTY_FLAG)) {
2806
            uint8_t *p;
2807

    
2808
            cpu_physical_memory_reset_dirty(current_addr,
2809
                                            current_addr + TARGET_PAGE_SIZE,
2810
                                            MIGRATION_DIRTY_FLAG);
2811

    
2812
            p = qemu_get_ram_ptr(current_addr);
2813

    
2814
            if (is_dup_page(p, *p)) {
2815
                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_COMPRESS);
2816
                qemu_put_byte(f, *p);
2817
            } else {
2818
                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_PAGE);
2819
                qemu_put_buffer(f, p, TARGET_PAGE_SIZE);
2820
            }
2821

    
2822
            found = 1;
2823
            break;
2824
        }
2825
        addr += TARGET_PAGE_SIZE;
2826
        current_addr = (saved_addr + addr) % last_ram_offset;
2827
    }
2828

    
2829
    return found;
2830
}
2831

    
2832
static uint64_t bytes_transferred;
2833

    
2834
static ram_addr_t ram_save_remaining(void)
2835
{
2836
    ram_addr_t addr;
2837
    ram_addr_t count = 0;
2838

    
2839
    for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
2840
        if (cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
2841
            count++;
2842
    }
2843

    
2844
    return count;
2845
}
2846

    
2847
uint64_t ram_bytes_remaining(void)
2848
{
2849
    return ram_save_remaining() * TARGET_PAGE_SIZE;
2850
}
2851

    
2852
uint64_t ram_bytes_transferred(void)
2853
{
2854
    return bytes_transferred;
2855
}
2856

    
2857
uint64_t ram_bytes_total(void)
2858
{
2859
    return last_ram_offset;
2860
}
2861

    
2862
static int ram_save_live(Monitor *mon, QEMUFile *f, int stage, void *opaque)
2863
{
2864
    ram_addr_t addr;
2865
    uint64_t bytes_transferred_last;
2866
    double bwidth = 0;
2867
    uint64_t expected_time = 0;
2868

    
2869
    if (stage < 0) {
2870
        cpu_physical_memory_set_dirty_tracking(0);
2871
        return 0;
2872
    }
2873

    
2874
    if (cpu_physical_sync_dirty_bitmap(0, TARGET_PHYS_ADDR_MAX) != 0) {
2875
        qemu_file_set_error(f);
2876
        return 0;
2877
    }
2878

    
2879
    if (stage == 1) {
2880
        bytes_transferred = 0;
2881

    
2882
        /* Make sure all dirty bits are set */
2883
        for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
2884
            if (!cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
2885
                cpu_physical_memory_set_dirty(addr);
2886
        }
2887

    
2888
        /* Enable dirty memory tracking */
2889
        cpu_physical_memory_set_dirty_tracking(1);
2890

    
2891
        qemu_put_be64(f, last_ram_offset | RAM_SAVE_FLAG_MEM_SIZE);
2892
    }
2893

    
2894
    bytes_transferred_last = bytes_transferred;
2895
    bwidth = qemu_get_clock_ns(rt_clock);
2896

    
2897
    while (!qemu_file_rate_limit(f)) {
2898
        int ret;
2899

    
2900
        ret = ram_save_block(f);
2901
        bytes_transferred += ret * TARGET_PAGE_SIZE;
2902
        if (ret == 0) /* no more blocks */
2903
            break;
2904
    }
2905

    
2906
    bwidth = qemu_get_clock_ns(rt_clock) - bwidth;
2907
    bwidth = (bytes_transferred - bytes_transferred_last) / bwidth;
2908

    
2909
    /* if we haven't transferred anything this round, force expected_time to a
2910
     * a very high value, but without crashing */
2911
    if (bwidth == 0)
2912
        bwidth = 0.000001;
2913

    
2914
    /* try transferring iterative blocks of memory */
2915
    if (stage == 3) {
2916
        /* flush all remaining blocks regardless of rate limiting */
2917
        while (ram_save_block(f) != 0) {
2918
            bytes_transferred += TARGET_PAGE_SIZE;
2919
        }
2920
        cpu_physical_memory_set_dirty_tracking(0);
2921
    }
2922

    
2923
    qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
2924

    
2925
    expected_time = ram_save_remaining() * TARGET_PAGE_SIZE / bwidth;
2926

    
2927
    return (stage == 2) && (expected_time <= migrate_max_downtime());
2928
}
2929

    
2930
static int ram_load(QEMUFile *f, void *opaque, int version_id)
2931
{
2932
    ram_addr_t addr;
2933
    int flags;
2934

    
2935
    if (version_id != 3)
2936
        return -EINVAL;
2937

    
2938
    do {
2939
        addr = qemu_get_be64(f);
2940

    
2941
        flags = addr & ~TARGET_PAGE_MASK;
2942
        addr &= TARGET_PAGE_MASK;
2943

    
2944
        if (flags & RAM_SAVE_FLAG_MEM_SIZE) {
2945
            if (addr != last_ram_offset)
2946
                return -EINVAL;
2947
        }
2948

    
2949
        if (flags & RAM_SAVE_FLAG_COMPRESS) {
2950
            uint8_t ch = qemu_get_byte(f);
2951
            memset(qemu_get_ram_ptr(addr), ch, TARGET_PAGE_SIZE);
2952
#ifndef _WIN32
2953
            if (ch == 0 &&
2954
                (!kvm_enabled() || kvm_has_sync_mmu())) {
2955
                madvise(qemu_get_ram_ptr(addr), TARGET_PAGE_SIZE, MADV_DONTNEED);
2956
            }
2957
#endif
2958
        } else if (flags & RAM_SAVE_FLAG_PAGE) {
2959
            qemu_get_buffer(f, qemu_get_ram_ptr(addr), TARGET_PAGE_SIZE);
2960
        }
2961
        if (qemu_file_has_error(f)) {
2962
            return -EIO;
2963
        }
2964
    } while (!(flags & RAM_SAVE_FLAG_EOS));
2965

    
2966
    return 0;
2967
}
2968

    
2969
void qemu_service_io(void)
2970
{
2971
    qemu_notify_event();
2972
}
2973

    
2974
/***********************************************************/
2975
/* machine registration */
2976

    
2977
static QEMUMachine *first_machine = NULL;
2978
QEMUMachine *current_machine = NULL;
2979

    
2980
int qemu_register_machine(QEMUMachine *m)
2981
{
2982
    QEMUMachine **pm;
2983
    pm = &first_machine;
2984
    while (*pm != NULL)
2985
        pm = &(*pm)->next;
2986
    m->next = NULL;
2987
    *pm = m;
2988
    return 0;
2989
}
2990

    
2991
static QEMUMachine *find_machine(const char *name)
2992
{
2993
    QEMUMachine *m;
2994

    
2995
    for(m = first_machine; m != NULL; m = m->next) {
2996
        if (!strcmp(m->name, name))
2997
            return m;
2998
        if (m->alias && !strcmp(m->alias, name))
2999
            return m;
3000
    }
3001
    return NULL;
3002
}
3003

    
3004
static QEMUMachine *find_default_machine(void)
3005
{
3006
    QEMUMachine *m;
3007

    
3008
    for(m = first_machine; m != NULL; m = m->next) {
3009
        if (m->is_default) {
3010
            return m;
3011
        }
3012
    }
3013
    return NULL;
3014
}
3015

    
3016
/***********************************************************/
3017
/* main execution loop */
3018

    
3019
static void gui_update(void *opaque)
3020
{
3021
    uint64_t interval = GUI_REFRESH_INTERVAL;
3022
    DisplayState *ds = opaque;
3023
    DisplayChangeListener *dcl = ds->listeners;
3024

    
3025
    qemu_flush_coalesced_mmio_buffer();
3026
    dpy_refresh(ds);
3027

    
3028
    while (dcl != NULL) {
3029
        if (dcl->gui_timer_interval &&
3030
            dcl->gui_timer_interval < interval)
3031
            interval = dcl->gui_timer_interval;
3032
        dcl = dcl->next;
3033
    }
3034
    qemu_mod_timer(ds->gui_timer, interval + qemu_get_clock(rt_clock));
3035
}
3036

    
3037
static void nographic_update(void *opaque)
3038
{
3039
    uint64_t interval = GUI_REFRESH_INTERVAL;
3040

    
3041
    qemu_flush_coalesced_mmio_buffer();
3042
    qemu_mod_timer(nographic_timer, interval + qemu_get_clock(rt_clock));
3043
}
3044

    
3045
struct vm_change_state_entry {
3046
    VMChangeStateHandler *cb;
3047
    void *opaque;
3048
    QLIST_ENTRY (vm_change_state_entry) entries;
3049
};
3050

    
3051
static QLIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head;
3052

    
3053
VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
3054
                                                     void *opaque)
3055
{
3056
    VMChangeStateEntry *e;
3057

    
3058
    e = qemu_mallocz(sizeof (*e));
3059

    
3060
    e->cb = cb;
3061
    e->opaque = opaque;
3062
    QLIST_INSERT_HEAD(&vm_change_state_head, e, entries);
3063
    return e;
3064
}
3065

    
3066
void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
3067
{
3068
    QLIST_REMOVE (e, entries);
3069
    qemu_free (e);
3070
}
3071

    
3072
static void vm_state_notify(int running, int reason)
3073
{
3074
    VMChangeStateEntry *e;
3075

    
3076
    for (e = vm_change_state_head.lh_first; e; e = e->entries.le_next) {
3077
        e->cb(e->opaque, running, reason);
3078
    }
3079
}
3080

    
3081
static void resume_all_vcpus(void);
3082
static void pause_all_vcpus(void);
3083

    
3084
void vm_start(void)
3085
{
3086
    if (!vm_running) {
3087
        cpu_enable_ticks();
3088
        vm_running = 1;
3089
        vm_state_notify(1, 0);
3090
        qemu_rearm_alarm_timer(alarm_timer);
3091
        resume_all_vcpus();
3092
    }
3093
}
3094

    
3095
/* reset/shutdown handler */
3096

    
3097
typedef struct QEMUResetEntry {
3098
    QTAILQ_ENTRY(QEMUResetEntry) entry;
3099
    QEMUResetHandler *func;
3100
    void *opaque;
3101
} QEMUResetEntry;
3102

    
3103
static QTAILQ_HEAD(reset_handlers, QEMUResetEntry) reset_handlers =
3104
    QTAILQ_HEAD_INITIALIZER(reset_handlers);
3105
static int reset_requested;
3106
static int shutdown_requested;
3107
static int powerdown_requested;
3108
static int debug_requested;
3109
static int vmstop_requested;
3110

    
3111
int qemu_shutdown_requested(void)
3112
{
3113
    int r = shutdown_requested;
3114
    shutdown_requested = 0;
3115
    return r;
3116
}
3117

    
3118
int qemu_reset_requested(void)
3119
{
3120
    int r = reset_requested;
3121
    reset_requested = 0;
3122
    return r;
3123
}
3124

    
3125
int qemu_powerdown_requested(void)
3126
{
3127
    int r = powerdown_requested;
3128
    powerdown_requested = 0;
3129
    return r;
3130
}
3131

    
3132
static int qemu_debug_requested(void)
3133
{
3134
    int r = debug_requested;
3135
    debug_requested = 0;
3136
    return r;
3137
}
3138

    
3139
static int qemu_vmstop_requested(void)
3140
{
3141
    int r = vmstop_requested;
3142
    vmstop_requested = 0;
3143
    return r;
3144
}
3145

    
3146
static void do_vm_stop(int reason)
3147
{
3148
    if (vm_running) {
3149
        cpu_disable_ticks();
3150
        vm_running = 0;
3151
        pause_all_vcpus();
3152
        vm_state_notify(0, reason);
3153
    }
3154
}
3155

    
3156
void qemu_register_reset(QEMUResetHandler *func, void *opaque)
3157
{
3158
    QEMUResetEntry *re = qemu_mallocz(sizeof(QEMUResetEntry));
3159

    
3160
    re->func = func;
3161
    re->opaque = opaque;
3162
    QTAILQ_INSERT_TAIL(&reset_handlers, re, entry);
3163
}
3164

    
3165
void qemu_unregister_reset(QEMUResetHandler *func, void *opaque)
3166
{
3167
    QEMUResetEntry *re;
3168

    
3169
    QTAILQ_FOREACH(re, &reset_handlers, entry) {
3170
        if (re->func == func && re->opaque == opaque) {
3171
            QTAILQ_REMOVE(&reset_handlers, re, entry);
3172
            qemu_free(re);
3173
            return;
3174
        }
3175
    }
3176
}
3177

    
3178
void qemu_system_reset(void)
3179
{
3180
    QEMUResetEntry *re, *nre;
3181

    
3182
    /* reset all devices */
3183
    QTAILQ_FOREACH_SAFE(re, &reset_handlers, entry, nre) {
3184
        re->func(re->opaque);
3185
    }
3186
}
3187

    
3188
void qemu_system_reset_request(void)
3189
{
3190
    if (no_reboot) {
3191
        shutdown_requested = 1;
3192
    } else {
3193
        reset_requested = 1;
3194
    }
3195
    qemu_notify_event();
3196
}
3197

    
3198
void qemu_system_shutdown_request(void)
3199
{
3200
    shutdown_requested = 1;
3201
    qemu_notify_event();
3202
}
3203

    
3204
void qemu_system_powerdown_request(void)
3205
{
3206
    powerdown_requested = 1;
3207
    qemu_notify_event();
3208
}
3209

    
3210
#ifdef CONFIG_IOTHREAD
3211
static void qemu_system_vmstop_request(int reason)
3212
{
3213
    vmstop_requested = reason;
3214
    qemu_notify_event();
3215
}
3216
#endif
3217

    
3218
#ifndef _WIN32
3219
static int io_thread_fd = -1;
3220

    
3221
static void qemu_event_increment(void)
3222
{
3223
    static const char byte = 0;
3224
    ssize_t ret;
3225

    
3226
    if (io_thread_fd == -1)
3227
        return;
3228

    
3229
    do {
3230
        ret = write(io_thread_fd, &byte, sizeof(byte));
3231
    } while (ret < 0 && errno == EINTR);
3232

    
3233
    /* EAGAIN is fine, a read must be pending.  */
3234
    if (ret < 0 && errno != EAGAIN) {
3235
        fprintf(stderr, "qemu_event_increment: write() filed: %s\n",
3236
                strerror(errno));
3237
        exit (1);
3238
    }
3239
}
3240

    
3241
static void qemu_event_read(void *opaque)
3242
{
3243
    int fd = (unsigned long)opaque;
3244
    ssize_t len;
3245
    char buffer[512];
3246

    
3247
    /* Drain the notify pipe */
3248
    do {
3249
        len = read(fd, buffer, sizeof(buffer));
3250
    } while ((len == -1 && errno == EINTR) || len == sizeof(buffer));
3251
}
3252

    
3253
static int qemu_event_init(void)
3254
{
3255
    int err;
3256
    int fds[2];
3257

    
3258
    err = qemu_pipe(fds);
3259
    if (err == -1)
3260
        return -errno;
3261

    
3262
    err = fcntl_setfl(fds[0], O_NONBLOCK);
3263
    if (err < 0)
3264
        goto fail;
3265

    
3266
    err = fcntl_setfl(fds[1], O_NONBLOCK);
3267
    if (err < 0)
3268
        goto fail;
3269

    
3270
    qemu_set_fd_handler2(fds[0], NULL, qemu_event_read, NULL,
3271
                         (void *)(unsigned long)fds[0]);
3272

    
3273
    io_thread_fd = fds[1];
3274
    return 0;
3275

    
3276
fail:
3277
    close(fds[0]);
3278
    close(fds[1]);
3279
    return err;
3280
}
3281
#else
3282
HANDLE qemu_event_handle;
3283

    
3284
static void dummy_event_handler(void *opaque)
3285
{
3286
}
3287

    
3288
static int qemu_event_init(void)
3289
{
3290
    qemu_event_handle = CreateEvent(NULL, FALSE, FALSE, NULL);
3291
    if (!qemu_event_handle) {
3292
        fprintf(stderr, "Failed CreateEvent: %ld\n", GetLastError());
3293
        return -1;
3294
    }
3295
    qemu_add_wait_object(qemu_event_handle, dummy_event_handler, NULL);
3296
    return 0;
3297
}
3298

    
3299
static void qemu_event_increment(void)
3300
{
3301
    if (!SetEvent(qemu_event_handle)) {
3302
        fprintf(stderr, "qemu_event_increment: SetEvent failed: %ld\n",
3303
                GetLastError());
3304
        exit (1);
3305
    }
3306
}
3307
#endif
3308

    
3309
static int cpu_can_run(CPUState *env)
3310
{
3311
    if (env->stop)
3312
        return 0;
3313
    if (env->stopped)
3314
        return 0;
3315
    if (!vm_running)
3316
        return 0;
3317
    return 1;
3318
}
3319

    
3320
#ifndef CONFIG_IOTHREAD
3321
static int qemu_init_main_loop(void)
3322
{
3323
    return qemu_event_init();
3324
}
3325

    
3326
void qemu_init_vcpu(void *_env)
3327
{
3328
    CPUState *env = _env;
3329

    
3330
    env->nr_cores = smp_cores;
3331
    env->nr_threads = smp_threads;
3332
    if (kvm_enabled())
3333
        kvm_init_vcpu(env);
3334
    return;
3335
}
3336

    
3337
int qemu_cpu_self(void *env)
3338
{
3339
    return 1;
3340
}
3341

    
3342
static void resume_all_vcpus(void)
3343
{
3344
}
3345

    
3346
static void pause_all_vcpus(void)
3347
{
3348
}
3349

    
3350
void qemu_cpu_kick(void *env)
3351
{
3352
    return;
3353
}
3354

    
3355
void qemu_notify_event(void)
3356
{
3357
    CPUState *env = cpu_single_env;
3358

    
3359
    if (env) {
3360
        cpu_exit(env);
3361
    }
3362
}
3363

    
3364
void qemu_mutex_lock_iothread(void) {}
3365
void qemu_mutex_unlock_iothread(void) {}
3366

    
3367
void vm_stop(int reason)
3368
{
3369
    do_vm_stop(reason);
3370
}
3371

    
3372
#else /* CONFIG_IOTHREAD */
3373

    
3374
#include "qemu-thread.h"
3375

    
3376
QemuMutex qemu_global_mutex;
3377
static QemuMutex qemu_fair_mutex;
3378

    
3379
static QemuThread io_thread;
3380

    
3381
static QemuThread *tcg_cpu_thread;
3382
static QemuCond *tcg_halt_cond;
3383

    
3384
static int qemu_system_ready;
3385
/* cpu creation */
3386
static QemuCond qemu_cpu_cond;
3387
/* system init */
3388
static QemuCond qemu_system_cond;
3389
static QemuCond qemu_pause_cond;
3390

    
3391
static void block_io_signals(void);
3392
static void unblock_io_signals(void);
3393
static int tcg_has_work(void);
3394

    
3395
static int qemu_init_main_loop(void)
3396
{
3397
    int ret;
3398

    
3399
    ret = qemu_event_init();
3400
    if (ret)
3401
        return ret;
3402

    
3403
    qemu_cond_init(&qemu_pause_cond);
3404
    qemu_mutex_init(&qemu_fair_mutex);
3405
    qemu_mutex_init(&qemu_global_mutex);
3406
    qemu_mutex_lock(&qemu_global_mutex);
3407

    
3408
    unblock_io_signals();
3409
    qemu_thread_self(&io_thread);
3410

    
3411
    return 0;
3412
}
3413

    
3414
static void qemu_wait_io_event(CPUState *env)
3415
{
3416
    while (!tcg_has_work())
3417
        qemu_cond_timedwait(env->halt_cond, &qemu_global_mutex, 1000);
3418

    
3419
    qemu_mutex_unlock(&qemu_global_mutex);
3420

    
3421
    /*
3422
     * Users of qemu_global_mutex can be starved, having no chance
3423
     * to acquire it since this path will get to it first.
3424
     * So use another lock to provide fairness.
3425
     */
3426
    qemu_mutex_lock(&qemu_fair_mutex);
3427
    qemu_mutex_unlock(&qemu_fair_mutex);
3428

    
3429
    qemu_mutex_lock(&qemu_global_mutex);
3430
    if (env->stop) {
3431
        env->stop = 0;
3432
        env->stopped = 1;
3433
        qemu_cond_signal(&qemu_pause_cond);
3434
    }
3435
}
3436

    
3437
static int qemu_cpu_exec(CPUState *env);
3438

    
3439
static void *kvm_cpu_thread_fn(void *arg)
3440
{
3441
    CPUState *env = arg;
3442

    
3443
    block_io_signals();
3444
    qemu_thread_self(env->thread);
3445
    if (kvm_enabled())
3446
        kvm_init_vcpu(env);
3447

    
3448
    /* signal CPU creation */
3449
    qemu_mutex_lock(&qemu_global_mutex);
3450
    env->created = 1;
3451
    qemu_cond_signal(&qemu_cpu_cond);
3452

    
3453
    /* and wait for machine initialization */
3454
    while (!qemu_system_ready)
3455
        qemu_cond_timedwait(&qemu_system_cond, &qemu_global_mutex, 100);
3456

    
3457
    while (1) {
3458
        if (cpu_can_run(env))
3459
            qemu_cpu_exec(env);
3460
        qemu_wait_io_event(env);
3461
    }
3462

    
3463
    return NULL;
3464
}
3465

    
3466
static void tcg_cpu_exec(void);
3467

    
3468
static void *tcg_cpu_thread_fn(void *arg)
3469
{
3470
    CPUState *env = arg;
3471

    
3472
    block_io_signals();
3473
    qemu_thread_self(env->thread);
3474

    
3475
    /* signal CPU creation */
3476
    qemu_mutex_lock(&qemu_global_mutex);
3477
    for (env = first_cpu; env != NULL; env = env->next_cpu)
3478
        env->created = 1;
3479
    qemu_cond_signal(&qemu_cpu_cond);
3480

    
3481
    /* and wait for machine initialization */
3482
    while (!qemu_system_ready)
3483
        qemu_cond_timedwait(&qemu_system_cond, &qemu_global_mutex, 100);
3484

    
3485
    while (1) {
3486
        tcg_cpu_exec();
3487
        qemu_wait_io_event(cur_cpu);
3488
    }
3489

    
3490
    return NULL;
3491
}
3492

    
3493
void qemu_cpu_kick(void *_env)
3494
{
3495
    CPUState *env = _env;
3496
    qemu_cond_broadcast(env->halt_cond);
3497
    if (kvm_enabled())
3498
        qemu_thread_signal(env->thread, SIGUSR1);
3499
}
3500

    
3501
int qemu_cpu_self(void *_env)
3502
{
3503
    CPUState *env = _env;
3504
    QemuThread this;
3505
 
3506
    qemu_thread_self(&this);
3507
 
3508
    return qemu_thread_equal(&this, env->thread);
3509
}
3510

    
3511
static void cpu_signal(int sig)
3512
{
3513
    if (cpu_single_env)
3514
        cpu_exit(cpu_single_env);
3515
}
3516

    
3517
static void block_io_signals(void)
3518
{
3519
    sigset_t set;
3520
    struct sigaction sigact;
3521

    
3522
    sigemptyset(&set);
3523
    sigaddset(&set, SIGUSR2);
3524
    sigaddset(&set, SIGIO);
3525
    sigaddset(&set, SIGALRM);
3526
    pthread_sigmask(SIG_BLOCK, &set, NULL);
3527

    
3528
    sigemptyset(&set);
3529
    sigaddset(&set, SIGUSR1);
3530
    pthread_sigmask(SIG_UNBLOCK, &set, NULL);
3531

    
3532
    memset(&sigact, 0, sizeof(sigact));
3533
    sigact.sa_handler = cpu_signal;
3534
    sigaction(SIGUSR1, &sigact, NULL);
3535
}
3536

    
3537
static void unblock_io_signals(void)
3538
{
3539
    sigset_t set;
3540

    
3541
    sigemptyset(&set);
3542
    sigaddset(&set, SIGUSR2);
3543
    sigaddset(&set, SIGIO);
3544
    sigaddset(&set, SIGALRM);
3545
    pthread_sigmask(SIG_UNBLOCK, &set, NULL);
3546

    
3547
    sigemptyset(&set);
3548
    sigaddset(&set, SIGUSR1);
3549
    pthread_sigmask(SIG_BLOCK, &set, NULL);
3550
}
3551

    
3552
static void qemu_signal_lock(unsigned int msecs)
3553
{
3554
    qemu_mutex_lock(&qemu_fair_mutex);
3555

    
3556
    while (qemu_mutex_trylock(&qemu_global_mutex)) {
3557
        qemu_thread_signal(tcg_cpu_thread, SIGUSR1);
3558
        if (!qemu_mutex_timedlock(&qemu_global_mutex, msecs))
3559
            break;
3560
    }
3561
    qemu_mutex_unlock(&qemu_fair_mutex);
3562
}
3563

    
3564
void qemu_mutex_lock_iothread(void)
3565
{
3566
    if (kvm_enabled()) {
3567
        qemu_mutex_lock(&qemu_fair_mutex);
3568
        qemu_mutex_lock(&qemu_global_mutex);
3569
        qemu_mutex_unlock(&qemu_fair_mutex);
3570
    } else
3571
        qemu_signal_lock(100);
3572
}
3573

    
3574
void qemu_mutex_unlock_iothread(void)
3575
{
3576
    qemu_mutex_unlock(&qemu_global_mutex);
3577
}
3578

    
3579
static int all_vcpus_paused(void)
3580
{
3581
    CPUState *penv = first_cpu;
3582

    
3583
    while (penv) {
3584
        if (!penv->stopped)
3585
            return 0;
3586
        penv = (CPUState *)penv->next_cpu;
3587
    }
3588

    
3589
    return 1;
3590
}
3591

    
3592
static void pause_all_vcpus(void)
3593
{
3594
    CPUState *penv = first_cpu;
3595

    
3596
    while (penv) {
3597
        penv->stop = 1;
3598
        qemu_thread_signal(penv->thread, SIGUSR1);
3599
        qemu_cpu_kick(penv);
3600
        penv = (CPUState *)penv->next_cpu;
3601
    }
3602

    
3603
    while (!all_vcpus_paused()) {
3604
        qemu_cond_timedwait(&qemu_pause_cond, &qemu_global_mutex, 100);
3605
        penv = first_cpu;
3606
        while (penv) {
3607
            qemu_thread_signal(penv->thread, SIGUSR1);
3608
            penv = (CPUState *)penv->next_cpu;
3609
        }
3610
    }
3611
}
3612

    
3613
static void resume_all_vcpus(void)
3614
{
3615
    CPUState *penv = first_cpu;
3616

    
3617
    while (penv) {
3618
        penv->stop = 0;
3619
        penv->stopped = 0;
3620
        qemu_thread_signal(penv->thread, SIGUSR1);
3621
        qemu_cpu_kick(penv);
3622
        penv = (CPUState *)penv->next_cpu;
3623
    }
3624
}
3625

    
3626
static void tcg_init_vcpu(void *_env)
3627
{
3628
    CPUState *env = _env;
3629
    /* share a single thread for all cpus with TCG */
3630
    if (!tcg_cpu_thread) {
3631
        env->thread = qemu_mallocz(sizeof(QemuThread));
3632
        env->halt_cond = qemu_mallocz(sizeof(QemuCond));
3633
        qemu_cond_init(env->halt_cond);
3634
        qemu_thread_create(env->thread, tcg_cpu_thread_fn, env);
3635
        while (env->created == 0)
3636
            qemu_cond_timedwait(&qemu_cpu_cond, &qemu_global_mutex, 100);
3637
        tcg_cpu_thread = env->thread;
3638
        tcg_halt_cond = env->halt_cond;
3639
    } else {
3640
        env->thread = tcg_cpu_thread;
3641
        env->halt_cond = tcg_halt_cond;
3642
    }
3643
}
3644

    
3645
static void kvm_start_vcpu(CPUState *env)
3646
{
3647
    env->thread = qemu_mallocz(sizeof(QemuThread));
3648
    env->halt_cond = qemu_mallocz(sizeof(QemuCond));
3649
    qemu_cond_init(env->halt_cond);
3650
    qemu_thread_create(env->thread, kvm_cpu_thread_fn, env);
3651
    while (env->created == 0)
3652
        qemu_cond_timedwait(&qemu_cpu_cond, &qemu_global_mutex, 100);
3653
}
3654

    
3655
void qemu_init_vcpu(void *_env)
3656
{
3657
    CPUState *env = _env;
3658

    
3659
    env->nr_cores = smp_cores;
3660
    env->nr_threads = smp_threads;
3661
    if (kvm_enabled())
3662
        kvm_start_vcpu(env);
3663
    else
3664
        tcg_init_vcpu(env);
3665
}
3666

    
3667
void qemu_notify_event(void)
3668
{
3669
    qemu_event_increment();
3670
}
3671

    
3672
void vm_stop(int reason)
3673
{
3674
    QemuThread me;
3675
    qemu_thread_self(&me);
3676

    
3677
    if (!qemu_thread_equal(&me, &io_thread)) {
3678
        qemu_system_vmstop_request(reason);
3679
        /*
3680
         * FIXME: should not return to device code in case
3681
         * vm_stop() has been requested.
3682
         */
3683
        if (cpu_single_env) {
3684
            cpu_exit(cpu_single_env);
3685
            cpu_single_env->stop = 1;
3686
        }
3687
        return;
3688
    }
3689
    do_vm_stop(reason);
3690
}
3691

    
3692
#endif
3693

    
3694

    
3695
#ifdef _WIN32
3696
static void host_main_loop_wait(int *timeout)
3697
{
3698
    int ret, ret2, i;
3699
    PollingEntry *pe;
3700

    
3701

    
3702
    /* XXX: need to suppress polling by better using win32 events */
3703
    ret = 0;
3704
    for(pe = first_polling_entry; pe != NULL; pe = pe->next) {
3705
        ret |= pe->func(pe->opaque);
3706
    }
3707
    if (ret == 0) {
3708
        int err;
3709
        WaitObjects *w = &wait_objects;
3710

    
3711
        ret = WaitForMultipleObjects(w->num, w->events, FALSE, *timeout);
3712
        if (WAIT_OBJECT_0 + 0 <= ret && ret <= WAIT_OBJECT_0 + w->num - 1) {
3713
            if (w->func[ret - WAIT_OBJECT_0])
3714
                w->func[ret - WAIT_OBJECT_0](w->opaque[ret - WAIT_OBJECT_0]);
3715

    
3716
            /* Check for additional signaled events */
3717
            for(i = (ret - WAIT_OBJECT_0 + 1); i < w->num; i++) {
3718

    
3719
                /* Check if event is signaled */
3720
                ret2 = WaitForSingleObject(w->events[i], 0);
3721
                if(ret2 == WAIT_OBJECT_0) {
3722
                    if (w->func[i])
3723
                        w->func[i](w->opaque[i]);
3724
                } else if (ret2 == WAIT_TIMEOUT) {
3725
                } else {
3726
                    err = GetLastError();
3727
                    fprintf(stderr, "WaitForSingleObject error %d %d\n", i, err);
3728
                }
3729
            }
3730
        } else if (ret == WAIT_TIMEOUT) {
3731
        } else {
3732
            err = GetLastError();
3733
            fprintf(stderr, "WaitForMultipleObjects error %d %d\n", ret, err);
3734
        }
3735
    }
3736

    
3737
    *timeout = 0;
3738
}
3739
#else
3740
static void host_main_loop_wait(int *timeout)
3741
{
3742
}
3743
#endif
3744

    
3745
void main_loop_wait(int timeout)
3746
{
3747
    IOHandlerRecord *ioh;
3748
    fd_set rfds, wfds, xfds;
3749
    int ret, nfds;
3750
    struct timeval tv;
3751

    
3752
    qemu_bh_update_timeout(&timeout);
3753

    
3754
    host_main_loop_wait(&timeout);
3755

    
3756
    /* poll any events */
3757
    /* XXX: separate device handlers from system ones */
3758
    nfds = -1;
3759
    FD_ZERO(&rfds);
3760
    FD_ZERO(&wfds);
3761
    FD_ZERO(&xfds);
3762
    for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
3763
        if (ioh->deleted)
3764
            continue;
3765
        if (ioh->fd_read &&
3766
            (!ioh->fd_read_poll ||
3767
             ioh->fd_read_poll(ioh->opaque) != 0)) {
3768
            FD_SET(ioh->fd, &rfds);
3769
            if (ioh->fd > nfds)
3770
                nfds = ioh->fd;
3771
        }
3772
        if (ioh->fd_write) {
3773
            FD_SET(ioh->fd, &wfds);
3774
            if (ioh->fd > nfds)
3775
                nfds = ioh->fd;
3776
        }
3777
    }
3778

    
3779
    tv.tv_sec = timeout / 1000;
3780
    tv.tv_usec = (timeout % 1000) * 1000;
3781

    
3782
    slirp_select_fill(&nfds, &rfds, &wfds, &xfds);
3783

    
3784
    qemu_mutex_unlock_iothread();
3785
    ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv);
3786
    qemu_mutex_lock_iothread();
3787
    if (ret > 0) {
3788
        IOHandlerRecord **pioh;
3789

    
3790
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
3791
            if (!ioh->deleted && ioh->fd_read && FD_ISSET(ioh->fd, &rfds)) {
3792
                ioh->fd_read(ioh->opaque);
3793
            }
3794
            if (!ioh->deleted && ioh->fd_write && FD_ISSET(ioh->fd, &wfds)) {
3795
                ioh->fd_write(ioh->opaque);
3796
            }
3797
        }
3798

    
3799
        /* remove deleted IO handlers */
3800
        pioh = &first_io_handler;
3801
        while (*pioh) {
3802
            ioh = *pioh;
3803
            if (ioh->deleted) {
3804
                *pioh = ioh->next;
3805
                qemu_free(ioh);
3806
            } else
3807
                pioh = &ioh->next;
3808
        }
3809
    }
3810

    
3811
    slirp_select_poll(&rfds, &wfds, &xfds, (ret < 0));
3812

    
3813
    /* rearm timer, if not periodic */
3814
    if (alarm_timer->flags & ALARM_FLAG_EXPIRED) {
3815
        alarm_timer->flags &= ~ALARM_FLAG_EXPIRED;
3816
        qemu_rearm_alarm_timer(alarm_timer);
3817
    }
3818

    
3819
    /* vm time timers */
3820
    if (vm_running) {
3821
        if (!cur_cpu || likely(!(cur_cpu->singlestep_enabled & SSTEP_NOTIMER)))
3822
            qemu_run_timers(&active_timers[QEMU_CLOCK_VIRTUAL],
3823
                            qemu_get_clock(vm_clock));
3824
    }
3825

    
3826
    /* real time timers */
3827
    qemu_run_timers(&active_timers[QEMU_CLOCK_REALTIME],
3828
                    qemu_get_clock(rt_clock));
3829

    
3830
    qemu_run_timers(&active_timers[QEMU_CLOCK_HOST],
3831
                    qemu_get_clock(host_clock));
3832

    
3833
    /* Check bottom-halves last in case any of the earlier events triggered
3834
       them.  */
3835
    qemu_bh_poll();
3836

    
3837
}
3838

    
3839
static int qemu_cpu_exec(CPUState *env)
3840
{
3841
    int ret;
3842
#ifdef CONFIG_PROFILER
3843
    int64_t ti;
3844
#endif
3845

    
3846
#ifdef CONFIG_PROFILER
3847
    ti = profile_getclock();
3848
#endif
3849
    if (use_icount) {
3850
        int64_t count;
3851
        int decr;
3852
        qemu_icount -= (env->icount_decr.u16.low + env->icount_extra);
3853
        env->icount_decr.u16.low = 0;
3854
        env->icount_extra = 0;
3855
        count = qemu_next_deadline();
3856
        count = (count + (1 << icount_time_shift) - 1)
3857
                >> icount_time_shift;
3858
        qemu_icount += count;
3859
        decr = (count > 0xffff) ? 0xffff : count;
3860
        count -= decr;
3861
        env->icount_decr.u16.low = decr;
3862
        env->icount_extra = count;
3863
    }
3864
    ret = cpu_exec(env);
3865
#ifdef CONFIG_PROFILER
3866
    qemu_time += profile_getclock() - ti;
3867
#endif
3868
    if (use_icount) {
3869
        /* Fold pending instructions back into the
3870
           instruction counter, and clear the interrupt flag.  */
3871
        qemu_icount -= (env->icount_decr.u16.low
3872
                        + env->icount_extra);
3873
        env->icount_decr.u32 = 0;
3874
        env->icount_extra = 0;
3875
    }
3876
    return ret;
3877
}
3878

    
3879
static void tcg_cpu_exec(void)
3880
{
3881
    int ret = 0;
3882

    
3883
    if (next_cpu == NULL)
3884
        next_cpu = first_cpu;
3885
    for (; next_cpu != NULL; next_cpu = next_cpu->next_cpu) {
3886
        CPUState *env = cur_cpu = next_cpu;
3887

    
3888
        if (timer_alarm_pending) {
3889
            timer_alarm_pending = 0;
3890
            break;
3891
        }
3892
        if (cpu_can_run(env))
3893
            ret = qemu_cpu_exec(env);
3894
        else if (env->stop)
3895
            break;
3896

    
3897
        if (ret == EXCP_DEBUG) {
3898
            gdb_set_stop_cpu(env);
3899
            debug_requested = 1;
3900
            break;
3901
        }
3902
    }
3903
}
3904

    
3905
static int cpu_has_work(CPUState *env)
3906
{
3907
    if (env->stop)
3908
        return 1;
3909
    if (env->stopped)
3910
        return 0;
3911
    if (!env->halted)
3912
        return 1;
3913
    if (qemu_cpu_has_work(env))
3914
        return 1;
3915
    return 0;
3916
}
3917

    
3918
static int tcg_has_work(void)
3919
{
3920
    CPUState *env;
3921

    
3922
    for (env = first_cpu; env != NULL; env = env->next_cpu)
3923
        if (cpu_has_work(env))
3924
            return 1;
3925
    return 0;
3926
}
3927

    
3928
static int qemu_calculate_timeout(void)
3929
{
3930
#ifndef CONFIG_IOTHREAD
3931
    int timeout;
3932

    
3933
    if (!vm_running)
3934
        timeout = 5000;
3935
    else if (tcg_has_work())
3936
        timeout = 0;
3937
    else if (!use_icount)
3938
        timeout = 5000;
3939
    else {
3940
     /* XXX: use timeout computed from timers */
3941
        int64_t add;
3942
        int64_t delta;
3943
        /* Advance virtual time to the next event.  */
3944
        if (use_icount == 1) {
3945
            /* When not using an adaptive execution frequency
3946
               we tend to get badly out of sync with real time,
3947
               so just delay for a reasonable amount of time.  */
3948
            delta = 0;
3949
        } else {
3950
            delta = cpu_get_icount() - cpu_get_clock();
3951
        }
3952
        if (delta > 0) {
3953
            /* If virtual time is ahead of real time then just
3954
               wait for IO.  */
3955
            timeout = (delta / 1000000) + 1;
3956
        } else {
3957
            /* Wait for either IO to occur or the next
3958
               timer event.  */
3959
            add = qemu_next_deadline();
3960
            /* We advance the timer before checking for IO.
3961
               Limit the amount we advance so that early IO
3962
               activity won't get the guest too far ahead.  */
3963
            if (add > 10000000)
3964
                add = 10000000;
3965
            delta += add;
3966
            add = (add + (1 << icount_time_shift) - 1)
3967
                  >> icount_time_shift;
3968
            qemu_icount += add;
3969
            timeout = delta / 1000000;
3970
            if (timeout < 0)
3971
                timeout = 0;
3972
        }
3973
    }
3974

    
3975
    return timeout;
3976
#else /* CONFIG_IOTHREAD */
3977
    return 1000;
3978
#endif
3979
}
3980

    
3981
static int vm_can_run(void)
3982
{
3983
    if (powerdown_requested)
3984
        return 0;
3985
    if (reset_requested)
3986
        return 0;
3987
    if (shutdown_requested)
3988
        return 0;
3989
    if (debug_requested)
3990
        return 0;
3991
    return 1;
3992
}
3993

    
3994
qemu_irq qemu_system_powerdown;
3995

    
3996
static void main_loop(void)
3997
{
3998
    int r;
3999

    
4000
#ifdef CONFIG_IOTHREAD
4001
    qemu_system_ready = 1;
4002
    qemu_cond_broadcast(&qemu_system_cond);
4003
#endif
4004

    
4005
    for (;;) {
4006
        do {
4007
#ifdef CONFIG_PROFILER
4008
            int64_t ti;
4009
#endif
4010
#ifndef CONFIG_IOTHREAD
4011
            tcg_cpu_exec();
4012
#endif
4013
#ifdef CONFIG_PROFILER
4014
            ti = profile_getclock();
4015
#endif
4016
            main_loop_wait(qemu_calculate_timeout());
4017
#ifdef CONFIG_PROFILER
4018
            dev_time += profile_getclock() - ti;
4019
#endif
4020
        } while (vm_can_run());
4021

    
4022
        if (qemu_debug_requested()) {
4023
            monitor_protocol_event(QEVENT_DEBUG, NULL);
4024
            vm_stop(EXCP_DEBUG);
4025
        }
4026
        if (qemu_shutdown_requested()) {
4027
            monitor_protocol_event(QEVENT_SHUTDOWN, NULL);
4028
            if (no_shutdown) {
4029
                vm_stop(0);
4030
                no_shutdown = 0;
4031
            } else
4032
                break;
4033
        }
4034
        if (qemu_reset_requested()) {
4035
            monitor_protocol_event(QEVENT_RESET, NULL);
4036
            pause_all_vcpus();
4037
            qemu_system_reset();
4038
            resume_all_vcpus();
4039
        }
4040
        if (qemu_powerdown_requested()) {
4041
            monitor_protocol_event(QEVENT_POWERDOWN, NULL);
4042
            qemu_irq_raise(qemu_system_powerdown);
4043
        }
4044
        if ((r = qemu_vmstop_requested())) {
4045
            monitor_protocol_event(QEVENT_STOP, NULL);
4046
            vm_stop(r);
4047
        }
4048
    }
4049
    pause_all_vcpus();
4050
}
4051

    
4052
static void version(void)
4053
{
4054
    printf("QEMU PC emulator version " QEMU_VERSION QEMU_PKGVERSION ", Copyright (c) 2003-2008 Fabrice Bellard\n");
4055
}
4056

    
4057
static void help(int exitcode)
4058
{
4059
    const char *options_help =
4060
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4061
           opt_help
4062
#define DEFHEADING(text) stringify(text) "\n"
4063
#include "qemu-options.h"
4064
#undef DEF
4065
#undef DEFHEADING
4066
#undef GEN_DOCS
4067
        ;
4068
    version();
4069
    printf("usage: %s [options] [disk_image]\n"
4070
           "\n"
4071
           "'disk_image' is a raw hard image image for IDE hard disk 0\n"
4072
           "\n"
4073
           "%s\n"
4074
           "During emulation, the following keys are useful:\n"
4075
           "ctrl-alt-f      toggle full screen\n"
4076
           "ctrl-alt-n      switch to virtual console 'n'\n"
4077
           "ctrl-alt        toggle mouse and keyboard grab\n"
4078
           "\n"
4079
           "When using -nographic, press 'ctrl-a h' to get some help.\n",
4080
           "qemu",
4081
           options_help);
4082
    exit(exitcode);
4083
}
4084

    
4085
#define HAS_ARG 0x0001
4086

    
4087
enum {
4088
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4089
    opt_enum,
4090
#define DEFHEADING(text)
4091
#include "qemu-options.h"
4092
#undef DEF
4093
#undef DEFHEADING
4094
#undef GEN_DOCS
4095
};
4096

    
4097
typedef struct QEMUOption {
4098
    const char *name;
4099
    int flags;
4100
    int index;
4101
} QEMUOption;
4102

    
4103
static const QEMUOption qemu_options[] = {
4104
    { "h", 0, QEMU_OPTION_h },
4105
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4106
    { option, opt_arg, opt_enum },
4107
#define DEFHEADING(text)
4108
#include "qemu-options.h"
4109
#undef DEF
4110
#undef DEFHEADING
4111
#undef GEN_DOCS
4112
    { NULL },
4113
};
4114

    
4115
#ifdef HAS_AUDIO
4116
struct soundhw soundhw[] = {
4117
#ifdef HAS_AUDIO_CHOICE
4118
#if defined(TARGET_I386) || defined(TARGET_MIPS)
4119
    {
4120
        "pcspk",
4121
        "PC speaker",
4122
        0,
4123
        1,
4124
        { .init_isa = pcspk_audio_init }
4125
    },
4126
#endif
4127

    
4128
#ifdef CONFIG_SB16
4129
    {
4130
        "sb16",
4131
        "Creative Sound Blaster 16",
4132
        0,
4133
        1,
4134
        { .init_isa = SB16_init }
4135
    },
4136
#endif
4137

    
4138
#ifdef CONFIG_CS4231A
4139
    {
4140
        "cs4231a",
4141
        "CS4231A",
4142
        0,
4143
        1,
4144
        { .init_isa = cs4231a_init }
4145
    },
4146
#endif
4147

    
4148
#ifdef CONFIG_ADLIB
4149
    {
4150
        "adlib",
4151
#ifdef HAS_YMF262
4152
        "Yamaha YMF262 (OPL3)",
4153
#else
4154
        "Yamaha YM3812 (OPL2)",
4155
#endif
4156
        0,
4157
        1,
4158
        { .init_isa = Adlib_init }
4159
    },
4160
#endif
4161

    
4162
#ifdef CONFIG_GUS
4163
    {
4164
        "gus",
4165
        "Gravis Ultrasound GF1",
4166
        0,
4167
        1,
4168
        { .init_isa = GUS_init }
4169
    },
4170
#endif
4171

    
4172
#ifdef CONFIG_AC97
4173
    {
4174
        "ac97",
4175
        "Intel 82801AA AC97 Audio",
4176
        0,
4177
        0,
4178
        { .init_pci = ac97_init }
4179
    },
4180
#endif
4181

    
4182
#ifdef CONFIG_ES1370
4183
    {
4184
        "es1370",
4185
        "ENSONIQ AudioPCI ES1370",
4186
        0,
4187
        0,
4188
        { .init_pci = es1370_init }
4189
    },
4190
#endif
4191

    
4192
#endif /* HAS_AUDIO_CHOICE */
4193

    
4194
    { NULL, NULL, 0, 0, { NULL } }
4195
};
4196

    
4197
static void select_soundhw (const char *optarg)
4198
{
4199
    struct soundhw *c;
4200

    
4201
    if (*optarg == '?') {
4202
    show_valid_cards:
4203

    
4204
        printf ("Valid sound card names (comma separated):\n");
4205
        for (c = soundhw; c->name; ++c) {
4206
            printf ("%-11s %s\n", c->name, c->descr);
4207
        }
4208
        printf ("\n-soundhw all will enable all of the above\n");
4209
        exit (*optarg != '?');
4210
    }
4211
    else {
4212
        size_t l;
4213
        const char *p;
4214
        char *e;
4215
        int bad_card = 0;
4216

    
4217
        if (!strcmp (optarg, "all")) {
4218
            for (c = soundhw; c->name; ++c) {
4219
                c->enabled = 1;
4220
            }
4221
            return;
4222
        }
4223

    
4224
        p = optarg;
4225
        while (*p) {
4226
            e = strchr (p, ',');
4227
            l = !e ? strlen (p) : (size_t) (e - p);
4228

    
4229
            for (c = soundhw; c->name; ++c) {
4230
                if (!strncmp (c->name, p, l) && !c->name[l]) {
4231
                    c->enabled = 1;
4232
                    break;
4233
                }
4234
            }
4235

    
4236
            if (!c->name) {
4237
                if (l > 80) {
4238
                    fprintf (stderr,
4239
                             "Unknown sound card name (too big to show)\n");
4240
                }
4241
                else {
4242
                    fprintf (stderr, "Unknown sound card name `%.*s'\n",
4243
                             (int) l, p);
4244
                }
4245
                bad_card = 1;
4246
            }
4247
            p += l + (e != NULL);
4248
        }
4249

    
4250
        if (bad_card)
4251
            goto show_valid_cards;
4252
    }
4253
}
4254
#endif
4255

    
4256
static void select_vgahw (const char *p)
4257
{
4258
    const char *opts;
4259

    
4260
    default_vga = 0;
4261
    vga_interface_type = VGA_NONE;
4262
    if (strstart(p, "std", &opts)) {
4263
        vga_interface_type = VGA_STD;
4264
    } else if (strstart(p, "cirrus", &opts)) {
4265
        vga_interface_type = VGA_CIRRUS;
4266
    } else if (strstart(p, "vmware", &opts)) {
4267
        vga_interface_type = VGA_VMWARE;
4268
    } else if (strstart(p, "xenfb", &opts)) {
4269
        vga_interface_type = VGA_XENFB;
4270
    } else if (!strstart(p, "none", &opts)) {
4271
    invalid_vga:
4272
        fprintf(stderr, "Unknown vga type: %s\n", p);
4273
        exit(1);
4274
    }
4275
    while (*opts) {
4276
        const char *nextopt;
4277

    
4278
        if (strstart(opts, ",retrace=", &nextopt)) {
4279
            opts = nextopt;
4280
            if (strstart(opts, "dumb", &nextopt))
4281
                vga_retrace_method = VGA_RETRACE_DUMB;
4282
            else if (strstart(opts, "precise", &nextopt))
4283
                vga_retrace_method = VGA_RETRACE_PRECISE;
4284
            else goto invalid_vga;
4285
        } else goto invalid_vga;
4286
        opts = nextopt;
4287
    }
4288
}
4289

    
4290
#ifdef TARGET_I386
4291
static int balloon_parse(const char *arg)
4292
{
4293
    QemuOpts *opts;
4294

    
4295
    if (strcmp(arg, "none") == 0) {
4296
        return 0;
4297
    }
4298

    
4299
    if (!strncmp(arg, "virtio", 6)) {
4300
        if (arg[6] == ',') {
4301
            /* have params -> parse them */
4302
            opts = qemu_opts_parse(&qemu_device_opts, arg+7, NULL);
4303
            if (!opts)
4304
                return  -1;
4305
        } else {
4306
            /* create empty opts */
4307
            opts = qemu_opts_create(&qemu_device_opts, NULL, 0);
4308
        }
4309
        qemu_opt_set(opts, "driver", "virtio-balloon-pci");
4310
        return 0;
4311
    }
4312

    
4313
    return -1;
4314
}
4315
#endif
4316

    
4317
#ifdef _WIN32
4318
static BOOL WINAPI qemu_ctrl_handler(DWORD type)
4319
{
4320
    exit(STATUS_CONTROL_C_EXIT);
4321
    return TRUE;
4322
}
4323
#endif
4324

    
4325
int qemu_uuid_parse(const char *str, uint8_t *uuid)
4326
{
4327
    int ret;
4328

    
4329
    if(strlen(str) != 36)
4330
        return -1;
4331

    
4332
    ret = sscanf(str, UUID_FMT, &uuid[0], &uuid[1], &uuid[2], &uuid[3],
4333
            &uuid[4], &uuid[5], &uuid[6], &uuid[7], &uuid[8], &uuid[9],
4334
            &uuid[10], &uuid[11], &uuid[12], &uuid[13], &uuid[14], &uuid[15]);
4335

    
4336
    if(ret != 16)
4337
        return -1;
4338

    
4339
#ifdef TARGET_I386
4340
    smbios_add_field(1, offsetof(struct smbios_type_1, uuid), 16, uuid);
4341
#endif
4342

    
4343
    return 0;
4344
}
4345

    
4346
#ifndef _WIN32
4347

    
4348
static void termsig_handler(int signal)
4349
{
4350
    qemu_system_shutdown_request();
4351
}
4352

    
4353
static void sigchld_handler(int signal)
4354
{
4355
    waitpid(-1, NULL, WNOHANG);
4356
}
4357

    
4358
static void sighandler_setup(void)
4359
{
4360
    struct sigaction act;
4361

    
4362
    memset(&act, 0, sizeof(act));
4363
    act.sa_handler = termsig_handler;
4364
    sigaction(SIGINT,  &act, NULL);
4365
    sigaction(SIGHUP,  &act, NULL);
4366
    sigaction(SIGTERM, &act, NULL);
4367

    
4368
    act.sa_handler = sigchld_handler;
4369
    act.sa_flags = SA_NOCLDSTOP;
4370
    sigaction(SIGCHLD, &act, NULL);
4371
}
4372

    
4373
#endif
4374

    
4375
#ifdef _WIN32
4376
/* Look for support files in the same directory as the executable.  */
4377
static char *find_datadir(const char *argv0)
4378
{
4379
    char *p;
4380
    char buf[MAX_PATH];
4381
    DWORD len;
4382

    
4383
    len = GetModuleFileName(NULL, buf, sizeof(buf) - 1);
4384
    if (len == 0) {
4385
        return NULL;
4386
    }
4387

    
4388
    buf[len] = 0;
4389
    p = buf + len - 1;
4390
    while (p != buf && *p != '\\')
4391
        p--;
4392
    *p = 0;
4393
    if (access(buf, R_OK) == 0) {
4394
        return qemu_strdup(buf);
4395
    }
4396
    return NULL;
4397
}
4398
#else /* !_WIN32 */
4399

    
4400
/* Find a likely location for support files using the location of the binary.
4401
   For installed binaries this will be "$bindir/../share/qemu".  When
4402
   running from the build tree this will be "$bindir/../pc-bios".  */
4403
#define SHARE_SUFFIX "/share/qemu"
4404
#define BUILD_SUFFIX "/pc-bios"
4405
static char *find_datadir(const char *argv0)
4406
{
4407
    char *dir;
4408
    char *p = NULL;
4409
    char *res;
4410
    char buf[PATH_MAX];
4411
    size_t max_len;
4412

    
4413
#if defined(__linux__)
4414
    {
4415
        int len;
4416
        len = readlink("/proc/self/exe", buf, sizeof(buf) - 1);
4417
        if (len > 0) {
4418
            buf[len] = 0;
4419
            p = buf;
4420
        }
4421
    }
4422
#elif defined(__FreeBSD__)
4423
    {
4424
        int len;
4425
        len = readlink("/proc/curproc/file", buf, sizeof(buf) - 1);
4426
        if (len > 0) {
4427
            buf[len] = 0;
4428
            p = buf;
4429
        }
4430
    }
4431
#endif
4432
    /* If we don't have any way of figuring out the actual executable
4433
       location then try argv[0].  */
4434
    if (!p) {
4435
        p = realpath(argv0, buf);
4436
        if (!p) {
4437
            return NULL;
4438
        }
4439
    }
4440
    dir = dirname(p);
4441
    dir = dirname(dir);
4442

    
4443
    max_len = strlen(dir) +
4444
        MAX(strlen(SHARE_SUFFIX), strlen(BUILD_SUFFIX)) + 1;
4445
    res = qemu_mallocz(max_len);
4446
    snprintf(res, max_len, "%s%s", dir, SHARE_SUFFIX);
4447
    if (access(res, R_OK)) {
4448
        snprintf(res, max_len, "%s%s", dir, BUILD_SUFFIX);
4449
        if (access(res, R_OK)) {
4450
            qemu_free(res);
4451
            res = NULL;
4452
        }
4453
    }
4454

    
4455
    return res;
4456
}
4457
#undef SHARE_SUFFIX
4458
#undef BUILD_SUFFIX
4459
#endif
4460

    
4461
char *qemu_find_file(int type, const char *name)
4462
{
4463
    int len;
4464
    const char *subdir;
4465
    char *buf;
4466

    
4467
    /* If name contains path separators then try it as a straight path.  */
4468
    if ((strchr(name, '/') || strchr(name, '\\'))
4469
        && access(name, R_OK) == 0) {
4470
        return qemu_strdup(name);
4471
    }
4472
    switch (type) {
4473
    case QEMU_FILE_TYPE_BIOS:
4474
        subdir = "";
4475
        break;
4476
    case QEMU_FILE_TYPE_KEYMAP:
4477
        subdir = "keymaps/";
4478
        break;
4479
    default:
4480
        abort();
4481
    }
4482
    len = strlen(data_dir) + strlen(name) + strlen(subdir) + 2;
4483
    buf = qemu_mallocz(len);
4484
    snprintf(buf, len, "%s/%s%s", data_dir, subdir, name);
4485
    if (access(buf, R_OK)) {
4486
        qemu_free(buf);
4487
        return NULL;
4488
    }
4489
    return buf;
4490
}
4491

    
4492
static int device_help_func(QemuOpts *opts, void *opaque)
4493
{
4494
    return qdev_device_help(opts);
4495
}
4496

    
4497
static int device_init_func(QemuOpts *opts, void *opaque)
4498
{
4499
    DeviceState *dev;
4500

    
4501
    dev = qdev_device_add(opts);
4502
    if (!dev)
4503
        return -1;
4504
    return 0;
4505
}
4506

    
4507
static int chardev_init_func(QemuOpts *opts, void *opaque)
4508
{
4509
    CharDriverState *chr;
4510

    
4511
    chr = qemu_chr_open_opts(opts, NULL);
4512
    if (!chr)
4513
        return -1;
4514
    return 0;
4515
}
4516

    
4517
static int mon_init_func(QemuOpts *opts, void *opaque)
4518
{
4519
    CharDriverState *chr;
4520
    const char *chardev;
4521
    const char *mode;
4522
    int flags;
4523

    
4524
    mode = qemu_opt_get(opts, "mode");
4525
    if (mode == NULL) {
4526
        mode = "readline";
4527
    }
4528
    if (strcmp(mode, "readline") == 0) {
4529
        flags = MONITOR_USE_READLINE;
4530
    } else if (strcmp(mode, "control") == 0) {
4531
        flags = MONITOR_USE_CONTROL;
4532
    } else {
4533
        fprintf(stderr, "unknown monitor mode \"%s\"\n", mode);
4534
        exit(1);
4535
    }
4536

    
4537
    if (qemu_opt_get_bool(opts, "default", 0))
4538
        flags |= MONITOR_IS_DEFAULT;
4539

    
4540
    chardev = qemu_opt_get(opts, "chardev");
4541
    chr = qemu_chr_find(chardev);
4542
    if (chr == NULL) {
4543
        fprintf(stderr, "chardev \"%s\" not found\n", chardev);
4544
        exit(1);
4545
    }
4546

    
4547
    monitor_init(chr, flags);
4548
    return 0;
4549
}
4550

    
4551
static void monitor_parse(const char *optarg, const char *mode)
4552
{
4553
    static int monitor_device_index = 0;
4554
    QemuOpts *opts;
4555
    const char *p;
4556
    char label[32];
4557
    int def = 0;
4558

    
4559
    if (strstart(optarg, "chardev:", &p)) {
4560
        snprintf(label, sizeof(label), "%s", p);
4561
    } else {
4562
        if (monitor_device_index) {
4563
            snprintf(label, sizeof(label), "monitor%d",
4564
                     monitor_device_index);
4565
        } else {
4566
            snprintf(label, sizeof(label), "monitor");
4567
            def = 1;
4568
        }
4569
        opts = qemu_chr_parse_compat(label, optarg);
4570
        if (!opts) {
4571
            fprintf(stderr, "parse error: %s\n", optarg);
4572
            exit(1);
4573
        }
4574
    }
4575

    
4576
    opts = qemu_opts_create(&qemu_mon_opts, label, 1);
4577
    if (!opts) {
4578
        fprintf(stderr, "duplicate chardev: %s\n", label);
4579
        exit(1);
4580
    }
4581
    qemu_opt_set(opts, "mode", mode);
4582
    qemu_opt_set(opts, "chardev", label);
4583
    if (def)
4584
        qemu_opt_set(opts, "default", "on");
4585
    monitor_device_index++;
4586
}
4587

    
4588
struct device_config {
4589
    enum {
4590
        DEV_USB,       /* -usbdevice     */
4591
        DEV_BT,        /* -bt            */
4592
        DEV_SERIAL,    /* -serial        */
4593
        DEV_PARALLEL,  /* -parallel      */
4594
        DEV_VIRTCON,   /* -virtioconsole */
4595
        DEV_DEBUGCON,  /* -debugcon */
4596
    } type;
4597
    const char *cmdline;
4598
    QTAILQ_ENTRY(device_config) next;
4599
};
4600
QTAILQ_HEAD(, device_config) device_configs = QTAILQ_HEAD_INITIALIZER(device_configs);
4601

    
4602
static void add_device_config(int type, const char *cmdline)
4603
{
4604
    struct device_config *conf;
4605

    
4606
    conf = qemu_mallocz(sizeof(*conf));
4607
    conf->type = type;
4608
    conf->cmdline = cmdline;
4609
    QTAILQ_INSERT_TAIL(&device_configs, conf, next);
4610
}
4611

    
4612
static int foreach_device_config(int type, int (*func)(const char *cmdline))
4613
{
4614
    struct device_config *conf;
4615
    int rc;
4616

    
4617
    QTAILQ_FOREACH(conf, &device_configs, next) {
4618
        if (conf->type != type)
4619
            continue;
4620
        rc = func(conf->cmdline);
4621
        if (0 != rc)
4622
            return rc;
4623
    }
4624
    return 0;
4625
}
4626

    
4627
static int serial_parse(const char *devname)
4628
{
4629
    static int index = 0;
4630
    char label[32];
4631

    
4632
    if (strcmp(devname, "none") == 0)
4633
        return 0;
4634
    if (index == MAX_SERIAL_PORTS) {
4635
        fprintf(stderr, "qemu: too many serial ports\n");
4636
        exit(1);
4637
    }
4638
    snprintf(label, sizeof(label), "serial%d", index);
4639
    serial_hds[index] = qemu_chr_open(label, devname, NULL);
4640
    if (!serial_hds[index]) {
4641
        fprintf(stderr, "qemu: could not open serial device '%s': %s\n",
4642
                devname, strerror(errno));
4643
        return -1;
4644
    }
4645
    index++;
4646
    return 0;
4647
}
4648

    
4649
static int parallel_parse(const char *devname)
4650
{
4651
    static int index = 0;
4652
    char label[32];
4653

    
4654
    if (strcmp(devname, "none") == 0)
4655
        return 0;
4656
    if (index == MAX_PARALLEL_PORTS) {
4657
        fprintf(stderr, "qemu: too many parallel ports\n");
4658
        exit(1);
4659
    }
4660
    snprintf(label, sizeof(label), "parallel%d", index);
4661
    parallel_hds[index] = qemu_chr_open(label, devname, NULL);
4662
    if (!parallel_hds[index]) {
4663
        fprintf(stderr, "qemu: could not open parallel device '%s': %s\n",
4664
                devname, strerror(errno));
4665
        return -1;
4666
    }
4667
    index++;
4668
    return 0;
4669
}
4670

    
4671
static int virtcon_parse(const char *devname)
4672
{
4673
    static int index = 0;
4674
    char label[32];
4675
    QemuOpts *bus_opts, *dev_opts;
4676

    
4677
    if (strcmp(devname, "none") == 0)
4678
        return 0;
4679
    if (index == MAX_VIRTIO_CONSOLES) {
4680
        fprintf(stderr, "qemu: too many virtio consoles\n");
4681
        exit(1);
4682
    }
4683

    
4684
    bus_opts = qemu_opts_create(&qemu_device_opts, NULL, 0);
4685
    qemu_opt_set(bus_opts, "driver", "virtio-serial");
4686

    
4687
    dev_opts = qemu_opts_create(&qemu_device_opts, NULL, 0);
4688
    qemu_opt_set(dev_opts, "driver", "virtconsole");
4689

    
4690
    snprintf(label, sizeof(label), "virtcon%d", index);
4691
    virtcon_hds[index] = qemu_chr_open(label, devname, NULL);
4692
    if (!virtcon_hds[index]) {
4693
        fprintf(stderr, "qemu: could not open virtio console '%s': %s\n",
4694
                devname, strerror(errno));
4695
        return -1;
4696
    }
4697
    qemu_opt_set(dev_opts, "chardev", label);
4698

    
4699
    index++;
4700
    return 0;
4701
}
4702

    
4703
static int debugcon_parse(const char *devname)
4704
{   
4705
    QemuOpts *opts;
4706

    
4707
    if (!qemu_chr_open("debugcon", devname, NULL)) {
4708
        exit(1);
4709
    }
4710
    opts = qemu_opts_create(&qemu_device_opts, "debugcon", 1);
4711
    if (!opts) {
4712
        fprintf(stderr, "qemu: already have a debugcon device\n");
4713
        exit(1);
4714
    }
4715
    qemu_opt_set(opts, "driver", "isa-debugcon");
4716
    qemu_opt_set(opts, "chardev", "debugcon");
4717
    return 0;
4718
}
4719

    
4720
static const QEMUOption *lookup_opt(int argc, char **argv,
4721
                                    const char **poptarg, int *poptind)
4722
{
4723
    const QEMUOption *popt;
4724
    int optind = *poptind;
4725
    char *r = argv[optind];
4726
    const char *optarg;
4727

    
4728
    optind++;
4729
    /* Treat --foo the same as -foo.  */
4730
    if (r[1] == '-')
4731
        r++;
4732
    popt = qemu_options;
4733
    for(;;) {
4734
        if (!popt->name) {
4735
            fprintf(stderr, "%s: invalid option -- '%s'\n",
4736
                    argv[0], r);
4737
            exit(1);
4738
        }
4739
        if (!strcmp(popt->name, r + 1))
4740
            break;
4741
        popt++;
4742
    }
4743
    if (popt->flags & HAS_ARG) {
4744
        if (optind >= argc) {
4745
            fprintf(stderr, "%s: option '%s' requires an argument\n",
4746
                    argv[0], r);
4747
            exit(1);
4748
        }
4749
        optarg = argv[optind++];
4750
    } else {
4751
        optarg = NULL;
4752
    }
4753

    
4754
    *poptarg = optarg;
4755
    *poptind = optind;
4756

    
4757
    return popt;
4758
}
4759

    
4760
int main(int argc, char **argv, char **envp)
4761
{
4762
    const char *gdbstub_dev = NULL;
4763
    uint32_t boot_devices_bitmap = 0;
4764
    int i;
4765
    int snapshot, linux_boot, net_boot;
4766
    const char *initrd_filename;
4767
    const char *kernel_filename, *kernel_cmdline;
4768
    char boot_devices[33] = "cad"; /* default to HD->floppy->CD-ROM */
4769
    DisplayState *ds;
4770
    DisplayChangeListener *dcl;
4771
    int cyls, heads, secs, translation;
4772
    QemuOpts *hda_opts = NULL, *opts;
4773
    int optind;
4774
    const char *optarg;
4775
    const char *loadvm = NULL;
4776
    QEMUMachine *machine;
4777
    const char *cpu_model;
4778
#ifndef _WIN32
4779
    int fds[2];
4780
#endif
4781
    int tb_size;
4782
    const char *pid_file = NULL;
4783
    const char *incoming = NULL;
4784
#ifndef _WIN32
4785
    int fd = 0;
4786
    struct passwd *pwd = NULL;
4787
    const char *chroot_dir = NULL;
4788
    const char *run_as = NULL;
4789
#endif
4790
    CPUState *env;
4791
    int show_vnc_port = 0;
4792
    int defconfig = 1;
4793

    
4794
    init_clocks();
4795

    
4796
    qemu_errors_to_file(stderr);
4797
    qemu_cache_utils_init(envp);
4798

    
4799
    QLIST_INIT (&vm_change_state_head);
4800
#ifndef _WIN32
4801
    {
4802
        struct sigaction act;
4803
        sigfillset(&act.sa_mask);
4804
        act.sa_flags = 0;
4805
        act.sa_handler = SIG_IGN;
4806
        sigaction(SIGPIPE, &act, NULL);
4807
    }
4808
#else
4809
    SetConsoleCtrlHandler(qemu_ctrl_handler, TRUE);
4810
    /* Note: cpu_interrupt() is currently not SMP safe, so we force
4811
       QEMU to run on a single CPU */
4812
    {
4813
        HANDLE h;
4814
        DWORD mask, smask;
4815
        int i;
4816
        h = GetCurrentProcess();
4817
        if (GetProcessAffinityMask(h, &mask, &smask)) {
4818
            for(i = 0; i < 32; i++) {
4819
                if (mask & (1 << i))
4820
                    break;
4821
            }
4822
            if (i != 32) {
4823
                mask = 1 << i;
4824
                SetProcessAffinityMask(h, mask);
4825
            }
4826
        }
4827
    }
4828
#endif
4829

    
4830
    module_call_init(MODULE_INIT_MACHINE);
4831
    machine = find_default_machine();
4832
    cpu_model = NULL;
4833
    initrd_filename = NULL;
4834
    ram_size = 0;
4835
    snapshot = 0;
4836
    kernel_filename = NULL;
4837
    kernel_cmdline = "";
4838
    cyls = heads = secs = 0;
4839
    translation = BIOS_ATA_TRANSLATION_AUTO;
4840

    
4841
    for (i = 0; i < MAX_NODES; i++) {
4842
        node_mem[i] = 0;
4843
        node_cpumask[i] = 0;
4844
    }
4845

    
4846
    nb_numa_nodes = 0;
4847
    nb_nics = 0;
4848

    
4849
    tb_size = 0;
4850
    autostart= 1;
4851

    
4852
    /* first pass of option parsing */
4853
    optind = 1;
4854
    while (optind < argc) {
4855
        if (argv[optind][0] != '-') {
4856
            /* disk image */
4857
            optind++;
4858
            continue;
4859
        } else {
4860
            const QEMUOption *popt;
4861

    
4862
            popt = lookup_opt(argc, argv, &optarg, &optind);
4863
            switch (popt->index) {
4864
            case QEMU_OPTION_nodefconfig:
4865
                defconfig=0;
4866
                break;
4867
            }
4868
        }
4869
    }
4870

    
4871
    if (defconfig) {
4872
        FILE *fp;
4873
        fp = fopen(CONFIG_QEMU_CONFDIR "/qemu.conf", "r");
4874
        if (fp) {
4875
            if (qemu_config_parse(fp) != 0) {
4876
                exit(1);
4877
            }
4878
            fclose(fp);
4879
        }
4880

    
4881
        fp = fopen(CONFIG_QEMU_CONFDIR "/target-" TARGET_ARCH ".conf", "r");
4882
        if (fp) {
4883
            if (qemu_config_parse(fp) != 0) {
4884
                exit(1);
4885
            }
4886
            fclose(fp);
4887
        }
4888
    }
4889

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

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

    
5058
                    if (!strchr(optarg, '=')) {
5059
                        legacy = 1;
5060
                        pstrcpy(buf, sizeof(buf), optarg);
5061
                    } else if (check_params(buf, sizeof(buf), params, optarg) < 0) {
5062
                        fprintf(stderr,
5063
                                "qemu: unknown boot parameter '%s' in '%s'\n",
5064
                                buf, optarg);
5065
                        exit(1);
5066
                    }
5067

    
5068
                    if (legacy ||
5069
                        get_param_value(buf, sizeof(buf), "order", optarg)) {
5070
                        boot_devices_bitmap = parse_bootdevices(buf);
5071
                        pstrcpy(boot_devices, sizeof(boot_devices), buf);
5072
                    }
5073
                    if (!legacy) {
5074
                        if (get_param_value(buf, sizeof(buf),
5075
                                            "once", optarg)) {
5076
                            boot_devices_bitmap |= parse_bootdevices(buf);
5077
                            standard_boot_devices = qemu_strdup(boot_devices);
5078
                            pstrcpy(boot_devices, sizeof(boot_devices), buf);
5079
                            qemu_register_reset(restore_boot_devices,
5080
                                                standard_boot_devices);
5081
                        }
5082
                        if (get_param_value(buf, sizeof(buf),
5083
                                            "menu", optarg)) {
5084
                            if (!strcmp(buf, "on")) {
5085
                                boot_menu = 1;
5086
                            } else if (!strcmp(buf, "off")) {
5087
                                boot_menu = 0;
5088
                            } else {
5089
                                fprintf(stderr,
5090
                                        "qemu: invalid option value '%s'\n",
5091
                                        buf);
5092
                                exit(1);
5093
                            }
5094
                        }
5095
                    }
5096
                }
5097
                break;
5098
            case QEMU_OPTION_fda:
5099
            case QEMU_OPTION_fdb:
5100
                drive_add(optarg, FD_ALIAS, popt->index - QEMU_OPTION_fda);
5101
                break;
5102
#ifdef TARGET_I386
5103
            case QEMU_OPTION_no_fd_bootchk:
5104
                fd_bootchk = 0;
5105
                break;
5106
#endif
5107
            case QEMU_OPTION_netdev:
5108
                if (net_client_parse(&qemu_netdev_opts, optarg) == -1) {
5109
                    exit(1);
5110
                }
5111
                break;
5112
            case QEMU_OPTION_net:
5113
                if (net_client_parse(&qemu_net_opts, optarg) == -1) {
5114
                    exit(1);
5115
                }
5116
                break;
5117
#ifdef CONFIG_SLIRP
5118
            case QEMU_OPTION_tftp:
5119
                legacy_tftp_prefix = optarg;
5120
                break;
5121
            case QEMU_OPTION_bootp:
5122
                legacy_bootp_filename = optarg;
5123
                break;
5124
#ifndef _WIN32
5125
            case QEMU_OPTION_smb:
5126
                if (net_slirp_smb(optarg) < 0)
5127
                    exit(1);
5128
                break;
5129
#endif
5130
            case QEMU_OPTION_redir:
5131
                if (net_slirp_redir(optarg) < 0)
5132
                    exit(1);
5133
                break;
5134
#endif
5135
            case QEMU_OPTION_bt:
5136
                add_device_config(DEV_BT, optarg);
5137
                break;
5138
#ifdef HAS_AUDIO
5139
            case QEMU_OPTION_audio_help:
5140
                AUD_help ();
5141
                exit (0);
5142
                break;
5143
            case QEMU_OPTION_soundhw:
5144
                select_soundhw (optarg);
5145
                break;
5146
#endif
5147
            case QEMU_OPTION_h:
5148
                help(0);
5149
                break;
5150
            case QEMU_OPTION_version:
5151
                version();
5152
                exit(0);
5153
                break;
5154
            case QEMU_OPTION_m: {
5155
                uint64_t value;
5156
                char *ptr;
5157

    
5158
                value = strtoul(optarg, &ptr, 10);
5159
                switch (*ptr) {
5160
                case 0: case 'M': case 'm':
5161
                    value <<= 20;
5162
                    break;
5163
                case 'G': case 'g':
5164
                    value <<= 30;
5165
                    break;
5166
                default:
5167
                    fprintf(stderr, "qemu: invalid ram size: %s\n", optarg);
5168
                    exit(1);
5169
                }
5170

    
5171
                /* On 32-bit hosts, QEMU is limited by virtual address space */
5172
                if (value > (2047 << 20) && HOST_LONG_BITS == 32) {
5173
                    fprintf(stderr, "qemu: at most 2047 MB RAM can be simulated\n");
5174
                    exit(1);
5175
                }
5176
                if (value != (uint64_t)(ram_addr_t)value) {
5177
                    fprintf(stderr, "qemu: ram size too large\n");
5178
                    exit(1);
5179
                }
5180
                ram_size = value;
5181
                break;
5182
            }
5183
            case QEMU_OPTION_d:
5184
                {
5185
                    int mask;
5186
                    const CPULogItem *item;
5187

    
5188
                    mask = cpu_str_to_log_mask(optarg);
5189
                    if (!mask) {
5190
                        printf("Log items (comma separated):\n");
5191
                    for(item = cpu_log_items; item->mask != 0; item++) {
5192
                        printf("%-10s %s\n", item->name, item->help);
5193
                    }
5194
                    exit(1);
5195
                    }
5196
                    cpu_set_log(mask);
5197
                }
5198
                break;
5199
            case QEMU_OPTION_s:
5200
                gdbstub_dev = "tcp::" DEFAULT_GDBSTUB_PORT;
5201
                break;
5202
            case QEMU_OPTION_gdb:
5203
                gdbstub_dev = optarg;
5204
                break;
5205
            case QEMU_OPTION_L:
5206
                data_dir = optarg;
5207
                break;
5208
            case QEMU_OPTION_bios:
5209
                bios_name = optarg;
5210
                break;
5211
            case QEMU_OPTION_singlestep:
5212
                singlestep = 1;
5213
                break;
5214
            case QEMU_OPTION_S:
5215
                autostart = 0;
5216
                break;
5217
            case QEMU_OPTION_k:
5218
                keyboard_layout = optarg;
5219
                break;
5220
            case QEMU_OPTION_localtime:
5221
                rtc_utc = 0;
5222
                break;
5223
            case QEMU_OPTION_vga:
5224
                select_vgahw (optarg);
5225
                break;
5226
#if defined(TARGET_PPC) || defined(TARGET_SPARC)
5227
            case QEMU_OPTION_g:
5228
                {
5229
                    const char *p;
5230
                    int w, h, depth;
5231
                    p = optarg;
5232
                    w = strtol(p, (char **)&p, 10);
5233
                    if (w <= 0) {
5234
                    graphic_error:
5235
                        fprintf(stderr, "qemu: invalid resolution or depth\n");
5236
                        exit(1);
5237
                    }
5238
                    if (*p != 'x')
5239
                        goto graphic_error;
5240
                    p++;
5241
                    h = strtol(p, (char **)&p, 10);
5242
                    if (h <= 0)
5243
                        goto graphic_error;
5244
                    if (*p == 'x') {
5245
                        p++;
5246
                        depth = strtol(p, (char **)&p, 10);
5247
                        if (depth != 8 && depth != 15 && depth != 16 &&
5248
                            depth != 24 && depth != 32)
5249
                            goto graphic_error;
5250
                    } else if (*p == '\0') {
5251
                        depth = graphic_depth;
5252
                    } else {
5253
                        goto graphic_error;
5254
                    }
5255

    
5256
                    graphic_width = w;
5257
                    graphic_height = h;
5258
                    graphic_depth = depth;
5259
                }
5260
                break;
5261
#endif
5262
            case QEMU_OPTION_echr:
5263
                {
5264
                    char *r;
5265
                    term_escape_char = strtol(optarg, &r, 0);
5266
                    if (r == optarg)
5267
                        printf("Bad argument to echr\n");
5268
                    break;
5269
                }
5270
            case QEMU_OPTION_monitor:
5271
                monitor_parse(optarg, "readline");
5272
                default_monitor = 0;
5273
                break;
5274
            case QEMU_OPTION_qmp:
5275
                monitor_parse(optarg, "control");
5276
                default_monitor = 0;
5277
                break;
5278
            case QEMU_OPTION_mon:
5279
                opts = qemu_opts_parse(&qemu_mon_opts, optarg, "chardev");
5280
                if (!opts) {
5281
                    fprintf(stderr, "parse error: %s\n", optarg);
5282
                    exit(1);
5283
                }
5284
                default_monitor = 0;
5285
                break;
5286
            case QEMU_OPTION_chardev:
5287
                opts = qemu_opts_parse(&qemu_chardev_opts, optarg, "backend");
5288
                if (!opts) {
5289
                    fprintf(stderr, "parse error: %s\n", optarg);
5290
                    exit(1);
5291
                }
5292
                break;
5293
            case QEMU_OPTION_serial:
5294
                add_device_config(DEV_SERIAL, optarg);
5295
                default_serial = 0;
5296
                break;
5297
            case QEMU_OPTION_watchdog:
5298
                if (watchdog) {
5299
                    fprintf(stderr,
5300
                            "qemu: only one watchdog option may be given\n");
5301
                    return 1;
5302
                }
5303
                watchdog = optarg;
5304
                break;
5305
            case QEMU_OPTION_watchdog_action:
5306
                if (select_watchdog_action(optarg) == -1) {
5307
                    fprintf(stderr, "Unknown -watchdog-action parameter\n");
5308
                    exit(1);
5309
                }
5310
                break;
5311
            case QEMU_OPTION_virtiocon:
5312
                add_device_config(DEV_VIRTCON, optarg);
5313
                default_virtcon = 0;
5314
                break;
5315
            case QEMU_OPTION_parallel:
5316
                add_device_config(DEV_PARALLEL, optarg);
5317
                default_parallel = 0;
5318
                break;
5319
            case QEMU_OPTION_debugcon:
5320
                add_device_config(DEV_DEBUGCON, optarg);
5321
                break;
5322
            case QEMU_OPTION_loadvm:
5323
                loadvm = optarg;
5324
                break;
5325
            case QEMU_OPTION_full_screen:
5326
                full_screen = 1;
5327
                break;
5328
#ifdef CONFIG_SDL
5329
            case QEMU_OPTION_no_frame:
5330
                no_frame = 1;
5331
                break;
5332
            case QEMU_OPTION_alt_grab:
5333
                alt_grab = 1;
5334
                break;
5335
            case QEMU_OPTION_ctrl_grab:
5336
                ctrl_grab = 1;
5337
                break;
5338
            case QEMU_OPTION_no_quit:
5339
                no_quit = 1;
5340
                break;
5341
            case QEMU_OPTION_sdl:
5342
                display_type = DT_SDL;
5343
                break;
5344
#endif
5345
            case QEMU_OPTION_pidfile:
5346
                pid_file = optarg;
5347
                break;
5348
#ifdef TARGET_I386
5349
            case QEMU_OPTION_win2k_hack:
5350
                win2k_install_hack = 1;
5351
                break;
5352
            case QEMU_OPTION_rtc_td_hack:
5353
                rtc_td_hack = 1;
5354
                break;
5355
            case QEMU_OPTION_acpitable:
5356
                if(acpi_table_add(optarg) < 0) {
5357
                    fprintf(stderr, "Wrong acpi table provided\n");
5358
                    exit(1);
5359
                }
5360
                break;
5361
            case QEMU_OPTION_smbios:
5362
                if(smbios_entry_add(optarg) < 0) {
5363
                    fprintf(stderr, "Wrong smbios provided\n");
5364
                    exit(1);
5365
                }
5366
                break;
5367
#endif
5368
#ifdef CONFIG_KVM
5369
            case QEMU_OPTION_enable_kvm:
5370
                kvm_allowed = 1;
5371
                break;
5372
#endif
5373
            case QEMU_OPTION_usb:
5374
                usb_enabled = 1;
5375
                break;
5376
            case QEMU_OPTION_usbdevice:
5377
                usb_enabled = 1;
5378
                add_device_config(DEV_USB, optarg);
5379
                break;
5380
            case QEMU_OPTION_device:
5381
                if (!qemu_opts_parse(&qemu_device_opts, optarg, "driver")) {
5382
                    exit(1);
5383
                }
5384
                break;
5385
            case QEMU_OPTION_smp:
5386
                smp_parse(optarg);
5387
                if (smp_cpus < 1) {
5388
                    fprintf(stderr, "Invalid number of CPUs\n");
5389
                    exit(1);
5390
                }
5391
                if (max_cpus < smp_cpus) {
5392
                    fprintf(stderr, "maxcpus must be equal to or greater than "
5393
                            "smp\n");
5394
                    exit(1);
5395
                }
5396
                if (max_cpus > 255) {
5397
                    fprintf(stderr, "Unsupported number of maxcpus\n");
5398
                    exit(1);
5399
                }
5400
                break;
5401
            case QEMU_OPTION_vnc:
5402
                display_type = DT_VNC;
5403
                vnc_display = optarg;
5404
                break;
5405
#ifdef TARGET_I386
5406
            case QEMU_OPTION_no_acpi:
5407
                acpi_enabled = 0;
5408
                break;
5409
            case QEMU_OPTION_no_hpet:
5410
                no_hpet = 1;
5411
                break;
5412
            case QEMU_OPTION_balloon:
5413
                if (balloon_parse(optarg) < 0) {
5414
                    fprintf(stderr, "Unknown -balloon argument %s\n", optarg);
5415
                    exit(1);
5416
                }
5417
                break;
5418
#endif
5419
            case QEMU_OPTION_no_reboot:
5420
                no_reboot = 1;
5421
                break;
5422
            case QEMU_OPTION_no_shutdown:
5423
                no_shutdown = 1;
5424
                break;
5425
            case QEMU_OPTION_show_cursor:
5426
                cursor_hide = 0;
5427
                break;
5428
            case QEMU_OPTION_uuid:
5429
                if(qemu_uuid_parse(optarg, qemu_uuid) < 0) {
5430
                    fprintf(stderr, "Fail to parse UUID string."
5431
                            " Wrong format.\n");
5432
                    exit(1);
5433
                }
5434
                break;
5435
#ifndef _WIN32
5436
            case QEMU_OPTION_daemonize:
5437
                daemonize = 1;
5438
                break;
5439
#endif
5440
            case QEMU_OPTION_option_rom:
5441
                if (nb_option_roms >= MAX_OPTION_ROMS) {
5442
                    fprintf(stderr, "Too many option ROMs\n");
5443
                    exit(1);
5444
                }
5445
                option_rom[nb_option_roms] = optarg;
5446
                nb_option_roms++;
5447
                break;
5448
#if defined(TARGET_ARM) || defined(TARGET_M68K)
5449
            case QEMU_OPTION_semihosting:
5450
                semihosting_enabled = 1;
5451
                break;
5452
#endif
5453
            case QEMU_OPTION_name:
5454
                qemu_name = qemu_strdup(optarg);
5455
                 {
5456
                     char *p = strchr(qemu_name, ',');
5457
                     if (p != NULL) {
5458
                        *p++ = 0;
5459
                        if (strncmp(p, "process=", 8)) {
5460
                            fprintf(stderr, "Unknown subargument %s to -name", p);
5461
                            exit(1);
5462
                        }
5463
                        p += 8;
5464
                        set_proc_name(p);
5465
                     }        
5466
                 }        
5467
                break;
5468
#if defined(TARGET_SPARC) || defined(TARGET_PPC)
5469
            case QEMU_OPTION_prom_env:
5470
                if (nb_prom_envs >= MAX_PROM_ENVS) {
5471
                    fprintf(stderr, "Too many prom variables\n");
5472
                    exit(1);
5473
                }
5474
                prom_envs[nb_prom_envs] = optarg;
5475
                nb_prom_envs++;
5476
                break;
5477
#endif
5478
#ifdef TARGET_ARM
5479
            case QEMU_OPTION_old_param:
5480
                old_param = 1;
5481
                break;
5482
#endif
5483
            case QEMU_OPTION_clock:
5484
                configure_alarms(optarg);
5485
                break;
5486
            case QEMU_OPTION_startdate:
5487
                configure_rtc_date_offset(optarg, 1);
5488
                break;
5489
            case QEMU_OPTION_rtc:
5490
                opts = qemu_opts_parse(&qemu_rtc_opts, optarg, NULL);
5491
                if (!opts) {
5492
                    fprintf(stderr, "parse error: %s\n", optarg);
5493
                    exit(1);
5494
                }
5495
                configure_rtc(opts);
5496
                break;
5497
            case QEMU_OPTION_tb_size:
5498
                tb_size = strtol(optarg, NULL, 0);
5499
                if (tb_size < 0)
5500
                    tb_size = 0;
5501
                break;
5502
            case QEMU_OPTION_icount:
5503
                use_icount = 1;
5504
                if (strcmp(optarg, "auto") == 0) {
5505
                    icount_time_shift = -1;
5506
                } else {
5507
                    icount_time_shift = strtol(optarg, NULL, 0);
5508
                }
5509
                break;
5510
            case QEMU_OPTION_incoming:
5511
                incoming = optarg;
5512
                break;
5513
            case QEMU_OPTION_nodefaults:
5514
                default_serial = 0;
5515
                default_parallel = 0;
5516
                default_virtcon = 0;
5517
                default_monitor = 0;
5518
                default_vga = 0;
5519
                default_net = 0;
5520
                default_floppy = 0;
5521
                default_cdrom = 0;
5522
                default_sdcard = 0;
5523
                break;
5524
#ifndef _WIN32
5525
            case QEMU_OPTION_chroot:
5526
                chroot_dir = optarg;
5527
                break;
5528
            case QEMU_OPTION_runas:
5529
                run_as = optarg;
5530
                break;
5531
#endif
5532
#ifdef CONFIG_XEN
5533
            case QEMU_OPTION_xen_domid:
5534
                xen_domid = atoi(optarg);
5535
                break;
5536
            case QEMU_OPTION_xen_create:
5537
                xen_mode = XEN_CREATE;
5538
                break;
5539
            case QEMU_OPTION_xen_attach:
5540
                xen_mode = XEN_ATTACH;
5541
                break;
5542
#endif
5543
            case QEMU_OPTION_readconfig:
5544
                {
5545
                    FILE *fp;
5546
                    fp = fopen(optarg, "r");
5547
                    if (fp == NULL) {
5548
                        fprintf(stderr, "open %s: %s\n", optarg, strerror(errno));
5549
                        exit(1);
5550
                    }
5551
                    if (qemu_config_parse(fp) != 0) {
5552
                        exit(1);
5553
                    }
5554
                    fclose(fp);
5555
                    break;
5556
                }
5557
            case QEMU_OPTION_writeconfig:
5558
                {
5559
                    FILE *fp;
5560
                    if (strcmp(optarg, "-") == 0) {
5561
                        fp = stdout;
5562
                    } else {
5563
                        fp = fopen(optarg, "w");
5564
                        if (fp == NULL) {
5565
                            fprintf(stderr, "open %s: %s\n", optarg, strerror(errno));
5566
                            exit(1);
5567
                        }
5568
                    }
5569
                    qemu_config_write(fp);
5570
                    fclose(fp);
5571
                    break;
5572
                }
5573
            }
5574
        }
5575
    }
5576

    
5577
    /* If no data_dir is specified then try to find it relative to the
5578
       executable path.  */
5579
    if (!data_dir) {
5580
        data_dir = find_datadir(argv[0]);
5581
    }
5582
    /* If all else fails use the install patch specified when building.  */
5583
    if (!data_dir) {
5584
        data_dir = CONFIG_QEMU_SHAREDIR;
5585
    }
5586

    
5587
    /*
5588
     * Default to max_cpus = smp_cpus, in case the user doesn't
5589
     * specify a max_cpus value.
5590
     */
5591
    if (!max_cpus)
5592
        max_cpus = smp_cpus;
5593

    
5594
    machine->max_cpus = machine->max_cpus ?: 1; /* Default to UP */
5595
    if (smp_cpus > machine->max_cpus) {
5596
        fprintf(stderr, "Number of SMP cpus requested (%d), exceeds max cpus "
5597
                "supported by machine `%s' (%d)\n", smp_cpus,  machine->name,
5598
                machine->max_cpus);
5599
        exit(1);
5600
    }
5601

    
5602
    qemu_opts_foreach(&qemu_device_opts, default_driver_check, NULL, 0);
5603
    qemu_opts_foreach(&qemu_global_opts, default_driver_check, NULL, 0);
5604

    
5605
    if (machine->no_serial) {
5606
        default_serial = 0;
5607
    }
5608
    if (machine->no_parallel) {
5609
        default_parallel = 0;
5610
    }
5611
    if (!machine->use_virtcon) {
5612
        default_virtcon = 0;
5613
    }
5614
    if (machine->no_vga) {
5615
        default_vga = 0;
5616
    }
5617
    if (machine->no_floppy) {
5618
        default_floppy = 0;
5619
    }
5620
    if (machine->no_cdrom) {
5621
        default_cdrom = 0;
5622
    }
5623
    if (machine->no_sdcard) {
5624
        default_sdcard = 0;
5625
    }
5626

    
5627
    if (display_type == DT_NOGRAPHIC) {
5628
        if (default_parallel)
5629
            add_device_config(DEV_PARALLEL, "null");
5630
        if (default_serial && default_monitor) {
5631
            add_device_config(DEV_SERIAL, "mon:stdio");
5632
        } else if (default_virtcon && default_monitor) {
5633
            add_device_config(DEV_VIRTCON, "mon:stdio");
5634
        } else {
5635
            if (default_serial)
5636
                add_device_config(DEV_SERIAL, "stdio");
5637
            if (default_virtcon)
5638
                add_device_config(DEV_VIRTCON, "stdio");
5639
            if (default_monitor)
5640
                monitor_parse("stdio", "readline");
5641
        }
5642
    } else {
5643
        if (default_serial)
5644
            add_device_config(DEV_SERIAL, "vc:80Cx24C");
5645
        if (default_parallel)
5646
            add_device_config(DEV_PARALLEL, "vc:80Cx24C");
5647
        if (default_monitor)
5648
            monitor_parse("vc:80Cx24C", "readline");
5649
        if (default_virtcon)
5650
            add_device_config(DEV_VIRTCON, "vc:80Cx24C");
5651
    }
5652
    if (default_vga)
5653
        vga_interface_type = VGA_CIRRUS;
5654

    
5655
    if (qemu_opts_foreach(&qemu_chardev_opts, chardev_init_func, NULL, 1) != 0)
5656
        exit(1);
5657

    
5658
#ifndef _WIN32
5659
    if (daemonize) {
5660
        pid_t pid;
5661

    
5662
        if (pipe(fds) == -1)
5663
            exit(1);
5664

    
5665
        pid = fork();
5666
        if (pid > 0) {
5667
            uint8_t status;
5668
            ssize_t len;
5669

    
5670
            close(fds[1]);
5671

    
5672
        again:
5673
            len = read(fds[0], &status, 1);
5674
            if (len == -1 && (errno == EINTR))
5675
                goto again;
5676

    
5677
            if (len != 1)
5678
                exit(1);
5679
            else if (status == 1) {
5680
                fprintf(stderr, "Could not acquire pidfile: %s\n", strerror(errno));
5681
                exit(1);
5682
            } else
5683
                exit(0);
5684
        } else if (pid < 0)
5685
            exit(1);
5686

    
5687
        close(fds[0]);
5688
        qemu_set_cloexec(fds[1]);
5689

    
5690
        setsid();
5691

    
5692
        pid = fork();
5693
        if (pid > 0)
5694
            exit(0);
5695
        else if (pid < 0)
5696
            exit(1);
5697

    
5698
        umask(027);
5699

    
5700
        signal(SIGTSTP, SIG_IGN);
5701
        signal(SIGTTOU, SIG_IGN);
5702
        signal(SIGTTIN, SIG_IGN);
5703
    }
5704
#endif
5705

    
5706
    if (pid_file && qemu_create_pidfile(pid_file) != 0) {
5707
#ifndef _WIN32
5708
        if (daemonize) {
5709
            uint8_t status = 1;
5710
            if (write(fds[1], &status, 1) != 1) {
5711
                perror("daemonize. Writing to pipe\n");
5712
            }
5713
        } else
5714
#endif
5715
            fprintf(stderr, "Could not acquire pid file: %s\n", strerror(errno));
5716
        exit(1);
5717
    }
5718

    
5719
    if (kvm_enabled()) {
5720
        int ret;
5721

    
5722
        ret = kvm_init(smp_cpus);
5723
        if (ret < 0) {
5724
            fprintf(stderr, "failed to initialize KVM\n");
5725
            exit(1);
5726
        }
5727
    }
5728

    
5729
    if (qemu_init_main_loop()) {
5730
        fprintf(stderr, "qemu_init_main_loop failed\n");
5731
        exit(1);
5732
    }
5733
    linux_boot = (kernel_filename != NULL);
5734

    
5735
    if (!linux_boot && *kernel_cmdline != '\0') {
5736
        fprintf(stderr, "-append only allowed with -kernel option\n");
5737
        exit(1);
5738
    }
5739

    
5740
    if (!linux_boot && initrd_filename != NULL) {
5741
        fprintf(stderr, "-initrd only allowed with -kernel option\n");
5742
        exit(1);
5743
    }
5744

    
5745
#ifndef _WIN32
5746
    /* Win32 doesn't support line-buffering and requires size >= 2 */
5747
    setvbuf(stdout, NULL, _IOLBF, 0);
5748
#endif
5749

    
5750
    if (init_timer_alarm() < 0) {
5751
        fprintf(stderr, "could not initialize alarm timer\n");
5752
        exit(1);
5753
    }
5754
    if (use_icount && icount_time_shift < 0) {
5755
        use_icount = 2;
5756
        /* 125MIPS seems a reasonable initial guess at the guest speed.
5757
           It will be corrected fairly quickly anyway.  */
5758
        icount_time_shift = 3;
5759
        init_icount_adjust();
5760
    }
5761

    
5762
#ifdef _WIN32
5763
    socket_init();
5764
#endif
5765

    
5766
    if (net_init_clients() < 0) {
5767
        exit(1);
5768
    }
5769

    
5770
    net_boot = (boot_devices_bitmap >> ('n' - 'a')) & 0xF;
5771
    net_set_boot_mask(net_boot);
5772

    
5773
    /* init the bluetooth world */
5774
    if (foreach_device_config(DEV_BT, bt_parse))
5775
        exit(1);
5776

    
5777
    /* init the memory */
5778
    if (ram_size == 0)
5779
        ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
5780

    
5781
    /* init the dynamic translator */
5782
    cpu_exec_init_all(tb_size * 1024 * 1024);
5783

    
5784
    bdrv_init_with_whitelist();
5785

    
5786
    blk_mig_init();
5787

    
5788
    if (default_cdrom) {
5789
        /* we always create the cdrom drive, even if no disk is there */
5790
        drive_add(NULL, CDROM_ALIAS);
5791
    }
5792

    
5793
    if (default_floppy) {
5794
        /* we always create at least one floppy */
5795
        drive_add(NULL, FD_ALIAS, 0);
5796
    }
5797

    
5798
    if (default_sdcard) {
5799
        /* we always create one sd slot, even if no card is in it */
5800
        drive_add(NULL, SD_ALIAS);
5801
    }
5802

    
5803
    /* open the virtual block devices */
5804
    if (snapshot)
5805
        qemu_opts_foreach(&qemu_drive_opts, drive_enable_snapshot, NULL, 0);
5806
    if (qemu_opts_foreach(&qemu_drive_opts, drive_init_func, machine, 1) != 0)
5807
        exit(1);
5808

    
5809
    vmstate_register(0, &vmstate_timers ,&timers_state);
5810
    register_savevm_live("ram", 0, 3, NULL, ram_save_live, NULL, 
5811
                         ram_load, NULL);
5812

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

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

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

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

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

    
5855
    if (foreach_device_config(DEV_SERIAL, serial_parse) < 0)
5856
        exit(1);
5857
    if (foreach_device_config(DEV_PARALLEL, parallel_parse) < 0)
5858
        exit(1);
5859
    if (foreach_device_config(DEV_VIRTCON, virtcon_parse) < 0)
5860
        exit(1);
5861
    if (foreach_device_config(DEV_DEBUGCON, debugcon_parse) < 0)
5862
        exit(1);
5863

    
5864
    module_call_init(MODULE_INIT_DEVICE);
5865

    
5866
    if (qemu_opts_foreach(&qemu_device_opts, device_help_func, NULL, 0) != 0)
5867
        exit(0);
5868

    
5869
    if (watchdog) {
5870
        i = select_watchdog(watchdog);
5871
        if (i > 0)
5872
            exit (i == 1 ? 1 : 0);
5873
    }
5874

    
5875
    if (machine->compat_props) {
5876
        qdev_prop_register_global_list(machine->compat_props);
5877
    }
5878
    qemu_add_globals();
5879

    
5880
    machine->init(ram_size, boot_devices,
5881
                  kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
5882

    
5883

    
5884
#ifndef _WIN32
5885
    /* must be after terminal init, SDL library changes signal handlers */
5886
    sighandler_setup();
5887
#endif
5888

    
5889
    for (env = first_cpu; env != NULL; env = env->next_cpu) {
5890
        for (i = 0; i < nb_numa_nodes; i++) {
5891
            if (node_cpumask[i] & (1 << env->cpu_index)) {
5892
                env->numa_node = i;
5893
            }
5894
        }
5895
    }
5896

    
5897
    current_machine = machine;
5898

    
5899
    /* init USB devices */
5900
    if (usb_enabled) {
5901
        if (foreach_device_config(DEV_USB, usb_parse) < 0)
5902
            exit(1);
5903
    }
5904

    
5905
    /* init generic devices */
5906
    if (qemu_opts_foreach(&qemu_device_opts, device_init_func, NULL, 1) != 0)
5907
        exit(1);
5908

    
5909
    net_check_clients();
5910

    
5911
    /* just use the first displaystate for the moment */
5912
    ds = get_displaystate();
5913

    
5914
    if (display_type == DT_DEFAULT) {
5915
#if defined(CONFIG_SDL) || defined(CONFIG_COCOA)
5916
        display_type = DT_SDL;
5917
#else
5918
        display_type = DT_VNC;
5919
        vnc_display = "localhost:0,to=99";
5920
        show_vnc_port = 1;
5921
#endif
5922
    }
5923
        
5924

    
5925
    switch (display_type) {
5926
    case DT_NOGRAPHIC:
5927
        break;
5928
#if defined(CONFIG_CURSES)
5929
    case DT_CURSES:
5930
        curses_display_init(ds, full_screen);
5931
        break;
5932
#endif
5933
#if defined(CONFIG_SDL)
5934
    case DT_SDL:
5935
        sdl_display_init(ds, full_screen, no_frame);
5936
        break;
5937
#elif defined(CONFIG_COCOA)
5938
    case DT_SDL:
5939
        cocoa_display_init(ds, full_screen);
5940
        break;
5941
#endif
5942
    case DT_VNC:
5943
        vnc_display_init(ds);
5944
        if (vnc_display_open(ds, vnc_display) < 0)
5945
            exit(1);
5946

    
5947
        if (show_vnc_port) {
5948
            printf("VNC server running on `%s'\n", vnc_display_local_addr(ds));
5949
        }
5950
        break;
5951
    default:
5952
        break;
5953
    }
5954
    dpy_resize(ds);
5955

    
5956
    dcl = ds->listeners;
5957
    while (dcl != NULL) {
5958
        if (dcl->dpy_refresh != NULL) {
5959
            ds->gui_timer = qemu_new_timer(rt_clock, gui_update, ds);
5960
            qemu_mod_timer(ds->gui_timer, qemu_get_clock(rt_clock));
5961
        }
5962
        dcl = dcl->next;
5963
    }
5964

    
5965
    if (display_type == DT_NOGRAPHIC || display_type == DT_VNC) {
5966
        nographic_timer = qemu_new_timer(rt_clock, nographic_update, NULL);
5967
        qemu_mod_timer(nographic_timer, qemu_get_clock(rt_clock));
5968
    }
5969

    
5970
    text_consoles_set_display(ds);
5971

    
5972
    if (qemu_opts_foreach(&qemu_mon_opts, mon_init_func, NULL, 1) != 0)
5973
        exit(1);
5974

    
5975
    if (gdbstub_dev && gdbserver_start(gdbstub_dev) < 0) {
5976
        fprintf(stderr, "qemu: could not open gdbserver on device '%s'\n",
5977
                gdbstub_dev);
5978
        exit(1);
5979
    }
5980

    
5981
    qdev_machine_creation_done();
5982

    
5983
    if (rom_load_all() != 0) {
5984
        fprintf(stderr, "rom loading failed\n");
5985
        exit(1);
5986
    }
5987

    
5988
    qemu_system_reset();
5989
    if (loadvm) {
5990
        if (load_vmstate(cur_mon, loadvm) < 0) {
5991
            autostart = 0;
5992
        }
5993
    }
5994

    
5995
    if (incoming) {
5996
        qemu_start_incoming_migration(incoming);
5997
    } else if (autostart) {
5998
        vm_start();
5999
    }
6000

    
6001
#ifndef _WIN32
6002
    if (daemonize) {
6003
        uint8_t status = 0;
6004
        ssize_t len;
6005

    
6006
    again1:
6007
        len = write(fds[1], &status, 1);
6008
        if (len == -1 && (errno == EINTR))
6009
            goto again1;
6010

    
6011
        if (len != 1)
6012
            exit(1);
6013

    
6014
        if (chdir("/")) {
6015
            perror("not able to chdir to /");
6016
            exit(1);
6017
        }
6018
        TFR(fd = qemu_open("/dev/null", O_RDWR));
6019
        if (fd == -1)
6020
            exit(1);
6021
    }
6022

    
6023
    if (run_as) {
6024
        pwd = getpwnam(run_as);
6025
        if (!pwd) {
6026
            fprintf(stderr, "User \"%s\" doesn't exist\n", run_as);
6027
            exit(1);
6028
        }
6029
    }
6030

    
6031
    if (chroot_dir) {
6032
        if (chroot(chroot_dir) < 0) {
6033
            fprintf(stderr, "chroot failed\n");
6034
            exit(1);
6035
        }
6036
        if (chdir("/")) {
6037
            perror("not able to chdir to /");
6038
            exit(1);
6039
        }
6040
    }
6041

    
6042
    if (run_as) {
6043
        if (setgid(pwd->pw_gid) < 0) {
6044
            fprintf(stderr, "Failed to setgid(%d)\n", pwd->pw_gid);
6045
            exit(1);
6046
        }
6047
        if (setuid(pwd->pw_uid) < 0) {
6048
            fprintf(stderr, "Failed to setuid(%d)\n", pwd->pw_uid);
6049
            exit(1);
6050
        }
6051
        if (setuid(0) != -1) {
6052
            fprintf(stderr, "Dropping privileges failed\n");
6053
            exit(1);
6054
        }
6055
    }
6056

    
6057
    if (daemonize) {
6058
        dup2(fd, 0);
6059
        dup2(fd, 1);
6060
        dup2(fd, 2);
6061

    
6062
        close(fd);
6063
    }
6064
#endif
6065

    
6066
    main_loop();
6067
    quit_timers();
6068
    net_cleanup();
6069

    
6070
    return 0;
6071
}