Statistics
| Branch: | Revision:

root / vl.c @ 3f020d70

History | View | Annotate | Download (154.4 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
static void init_clocks(void)
935
{
936
    init_get_clock();
937
    rt_clock = qemu_new_clock(QEMU_CLOCK_REALTIME);
938
    vm_clock = qemu_new_clock(QEMU_CLOCK_VIRTUAL);
939
    host_clock = qemu_new_clock(QEMU_CLOCK_HOST);
940

    
941
    rtc_clock = host_clock;
942
}
943

    
944
/* save a timer */
945
void qemu_put_timer(QEMUFile *f, QEMUTimer *ts)
946
{
947
    uint64_t expire_time;
948

    
949
    if (qemu_timer_pending(ts)) {
950
        expire_time = ts->expire_time;
951
    } else {
952
        expire_time = -1;
953
    }
954
    qemu_put_be64(f, expire_time);
955
}
956

    
957
void qemu_get_timer(QEMUFile *f, QEMUTimer *ts)
958
{
959
    uint64_t expire_time;
960

    
961
    expire_time = qemu_get_be64(f);
962
    if (expire_time != -1) {
963
        qemu_mod_timer(ts, expire_time);
964
    } else {
965
        qemu_del_timer(ts);
966
    }
967
}
968

    
969
static const VMStateDescription vmstate_timers = {
970
    .name = "timer",
971
    .version_id = 2,
972
    .minimum_version_id = 1,
973
    .minimum_version_id_old = 1,
974
    .fields      = (VMStateField []) {
975
        VMSTATE_INT64(cpu_ticks_offset, TimersState),
976
        VMSTATE_INT64(dummy, TimersState),
977
        VMSTATE_INT64_V(cpu_clock_offset, TimersState, 2),
978
        VMSTATE_END_OF_LIST()
979
    }
980
};
981

    
982
static void qemu_event_increment(void);
983

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

    
1032
#ifndef CONFIG_IOTHREAD
1033
        if (next_cpu) {
1034
            /* stop the currently executing cpu because a timer occured */
1035
            cpu_exit(next_cpu);
1036
        }
1037
#endif
1038
        timer_alarm_pending = 1;
1039
        qemu_notify_event();
1040
    }
1041
}
1042

    
1043
static int64_t qemu_next_deadline(void)
1044
{
1045
    /* To avoid problems with overflow limit this to 2^32.  */
1046
    int64_t delta = INT32_MAX;
1047

    
1048
    if (active_timers[QEMU_CLOCK_VIRTUAL]) {
1049
        delta = active_timers[QEMU_CLOCK_VIRTUAL]->expire_time -
1050
                     qemu_get_clock(vm_clock);
1051
    }
1052
    if (active_timers[QEMU_CLOCK_HOST]) {
1053
        int64_t hdelta = active_timers[QEMU_CLOCK_HOST]->expire_time -
1054
                 qemu_get_clock(host_clock);
1055
        if (hdelta < delta)
1056
            delta = hdelta;
1057
    }
1058

    
1059
    if (delta < 0)
1060
        delta = 0;
1061

    
1062
    return delta;
1063
}
1064

    
1065
#if defined(__linux__)
1066
static uint64_t qemu_next_deadline_dyntick(void)
1067
{
1068
    int64_t delta;
1069
    int64_t rtdelta;
1070

    
1071
    if (use_icount)
1072
        delta = INT32_MAX;
1073
    else
1074
        delta = (qemu_next_deadline() + 999) / 1000;
1075

    
1076
    if (active_timers[QEMU_CLOCK_REALTIME]) {
1077
        rtdelta = (active_timers[QEMU_CLOCK_REALTIME]->expire_time -
1078
                 qemu_get_clock(rt_clock))*1000;
1079
        if (rtdelta < delta)
1080
            delta = rtdelta;
1081
    }
1082

    
1083
    if (delta < MIN_TIMER_REARM_US)
1084
        delta = MIN_TIMER_REARM_US;
1085

    
1086
    return delta;
1087
}
1088
#endif
1089

    
1090
#ifndef _WIN32
1091

    
1092
/* Sets a specific flag */
1093
static int fcntl_setfl(int fd, int flag)
1094
{
1095
    int flags;
1096

    
1097
    flags = fcntl(fd, F_GETFL);
1098
    if (flags == -1)
1099
        return -errno;
1100

    
1101
    if (fcntl(fd, F_SETFL, flags | flag) == -1)
1102
        return -errno;
1103

    
1104
    return 0;
1105
}
1106

    
1107
#if defined(__linux__)
1108

    
1109
#define RTC_FREQ 1024
1110

    
1111
static void enable_sigio_timer(int fd)
1112
{
1113
    struct sigaction act;
1114

    
1115
    /* timer signal */
1116
    sigfillset(&act.sa_mask);
1117
    act.sa_flags = 0;
1118
    act.sa_handler = host_alarm_handler;
1119

    
1120
    sigaction(SIGIO, &act, NULL);
1121
    fcntl_setfl(fd, O_ASYNC);
1122
    fcntl(fd, F_SETOWN, getpid());
1123
}
1124

    
1125
static int hpet_start_timer(struct qemu_alarm_timer *t)
1126
{
1127
    struct hpet_info info;
1128
    int r, fd;
1129

    
1130
    fd = qemu_open("/dev/hpet", O_RDONLY);
1131
    if (fd < 0)
1132
        return -1;
1133

    
1134
    /* Set frequency */
1135
    r = ioctl(fd, HPET_IRQFREQ, RTC_FREQ);
1136
    if (r < 0) {
1137
        fprintf(stderr, "Could not configure '/dev/hpet' to have a 1024Hz timer. This is not a fatal\n"
1138
                "error, but for better emulation accuracy type:\n"
1139
                "'echo 1024 > /proc/sys/dev/hpet/max-user-freq' as root.\n");
1140
        goto fail;
1141
    }
1142

    
1143
    /* Check capabilities */
1144
    r = ioctl(fd, HPET_INFO, &info);
1145
    if (r < 0)
1146
        goto fail;
1147

    
1148
    /* Enable periodic mode */
1149
    r = ioctl(fd, HPET_EPI, 0);
1150
    if (info.hi_flags && (r < 0))
1151
        goto fail;
1152

    
1153
    /* Enable interrupt */
1154
    r = ioctl(fd, HPET_IE_ON, 0);
1155
    if (r < 0)
1156
        goto fail;
1157

    
1158
    enable_sigio_timer(fd);
1159
    t->priv = (void *)(long)fd;
1160

    
1161
    return 0;
1162
fail:
1163
    close(fd);
1164
    return -1;
1165
}
1166

    
1167
static void hpet_stop_timer(struct qemu_alarm_timer *t)
1168
{
1169
    int fd = (long)t->priv;
1170

    
1171
    close(fd);
1172
}
1173

    
1174
static int rtc_start_timer(struct qemu_alarm_timer *t)
1175
{
1176
    int rtc_fd;
1177
    unsigned long current_rtc_freq = 0;
1178

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

    
1196
    enable_sigio_timer(rtc_fd);
1197

    
1198
    t->priv = (void *)(long)rtc_fd;
1199

    
1200
    return 0;
1201
}
1202

    
1203
static void rtc_stop_timer(struct qemu_alarm_timer *t)
1204
{
1205
    int rtc_fd = (long)t->priv;
1206

    
1207
    close(rtc_fd);
1208
}
1209

    
1210
static int dynticks_start_timer(struct qemu_alarm_timer *t)
1211
{
1212
    struct sigevent ev;
1213
    timer_t host_timer;
1214
    struct sigaction act;
1215

    
1216
    sigfillset(&act.sa_mask);
1217
    act.sa_flags = 0;
1218
    act.sa_handler = host_alarm_handler;
1219

    
1220
    sigaction(SIGALRM, &act, NULL);
1221

    
1222
    /* 
1223
     * Initialize ev struct to 0 to avoid valgrind complaining
1224
     * about uninitialized data in timer_create call
1225
     */
1226
    memset(&ev, 0, sizeof(ev));
1227
    ev.sigev_value.sival_int = 0;
1228
    ev.sigev_notify = SIGEV_SIGNAL;
1229
    ev.sigev_signo = SIGALRM;
1230

    
1231
    if (timer_create(CLOCK_REALTIME, &ev, &host_timer)) {
1232
        perror("timer_create");
1233

    
1234
        /* disable dynticks */
1235
        fprintf(stderr, "Dynamic Ticks disabled\n");
1236

    
1237
        return -1;
1238
    }
1239

    
1240
    t->priv = (void *)(long)host_timer;
1241

    
1242
    return 0;
1243
}
1244

    
1245
static void dynticks_stop_timer(struct qemu_alarm_timer *t)
1246
{
1247
    timer_t host_timer = (timer_t)(long)t->priv;
1248

    
1249
    timer_delete(host_timer);
1250
}
1251

    
1252
static void dynticks_rearm_timer(struct qemu_alarm_timer *t)
1253
{
1254
    timer_t host_timer = (timer_t)(long)t->priv;
1255
    struct itimerspec timeout;
1256
    int64_t nearest_delta_us = INT64_MAX;
1257
    int64_t current_us;
1258

    
1259
    if (!active_timers[QEMU_CLOCK_REALTIME] &&
1260
        !active_timers[QEMU_CLOCK_VIRTUAL] &&
1261
        !active_timers[QEMU_CLOCK_HOST])
1262
        return;
1263

    
1264
    nearest_delta_us = qemu_next_deadline_dyntick();
1265

    
1266
    /* check whether a timer is already running */
1267
    if (timer_gettime(host_timer, &timeout)) {
1268
        perror("gettime");
1269
        fprintf(stderr, "Internal timer error: aborting\n");
1270
        exit(1);
1271
    }
1272
    current_us = timeout.it_value.tv_sec * 1000000 + timeout.it_value.tv_nsec/1000;
1273
    if (current_us && current_us <= nearest_delta_us)
1274
        return;
1275

    
1276
    timeout.it_interval.tv_sec = 0;
1277
    timeout.it_interval.tv_nsec = 0; /* 0 for one-shot timer */
1278
    timeout.it_value.tv_sec =  nearest_delta_us / 1000000;
1279
    timeout.it_value.tv_nsec = (nearest_delta_us % 1000000) * 1000;
1280
    if (timer_settime(host_timer, 0 /* RELATIVE */, &timeout, NULL)) {
1281
        perror("settime");
1282
        fprintf(stderr, "Internal timer error: aborting\n");
1283
        exit(1);
1284
    }
1285
}
1286

    
1287
#endif /* defined(__linux__) */
1288

    
1289
static int unix_start_timer(struct qemu_alarm_timer *t)
1290
{
1291
    struct sigaction act;
1292
    struct itimerval itv;
1293
    int err;
1294

    
1295
    /* timer signal */
1296
    sigfillset(&act.sa_mask);
1297
    act.sa_flags = 0;
1298
    act.sa_handler = host_alarm_handler;
1299

    
1300
    sigaction(SIGALRM, &act, NULL);
1301

    
1302
    itv.it_interval.tv_sec = 0;
1303
    /* for i386 kernel 2.6 to get 1 ms */
1304
    itv.it_interval.tv_usec = 999;
1305
    itv.it_value.tv_sec = 0;
1306
    itv.it_value.tv_usec = 10 * 1000;
1307

    
1308
    err = setitimer(ITIMER_REAL, &itv, NULL);
1309
    if (err)
1310
        return -1;
1311

    
1312
    return 0;
1313
}
1314

    
1315
static void unix_stop_timer(struct qemu_alarm_timer *t)
1316
{
1317
    struct itimerval itv;
1318

    
1319
    memset(&itv, 0, sizeof(itv));
1320
    setitimer(ITIMER_REAL, &itv, NULL);
1321
}
1322

    
1323
#endif /* !defined(_WIN32) */
1324

    
1325

    
1326
#ifdef _WIN32
1327

    
1328
static int win32_start_timer(struct qemu_alarm_timer *t)
1329
{
1330
    TIMECAPS tc;
1331
    struct qemu_alarm_win32 *data = t->priv;
1332
    UINT flags;
1333

    
1334
    memset(&tc, 0, sizeof(tc));
1335
    timeGetDevCaps(&tc, sizeof(tc));
1336

    
1337
    if (data->period < tc.wPeriodMin)
1338
        data->period = tc.wPeriodMin;
1339

    
1340
    timeBeginPeriod(data->period);
1341

    
1342
    flags = TIME_CALLBACK_FUNCTION;
1343
    if (alarm_has_dynticks(t))
1344
        flags |= TIME_ONESHOT;
1345
    else
1346
        flags |= TIME_PERIODIC;
1347

    
1348
    data->timerId = timeSetEvent(1,         // interval (ms)
1349
                        data->period,       // resolution
1350
                        host_alarm_handler, // function
1351
                        (DWORD)t,           // parameter
1352
                        flags);
1353

    
1354
    if (!data->timerId) {
1355
        fprintf(stderr, "Failed to initialize win32 alarm timer: %ld\n",
1356
                GetLastError());
1357
        timeEndPeriod(data->period);
1358
        return -1;
1359
    }
1360

    
1361
    return 0;
1362
}
1363

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

    
1368
    timeKillEvent(data->timerId);
1369
    timeEndPeriod(data->period);
1370
}
1371

    
1372
static void win32_rearm_timer(struct qemu_alarm_timer *t)
1373
{
1374
    struct qemu_alarm_win32 *data = t->priv;
1375

    
1376
    if (!active_timers[QEMU_CLOCK_REALTIME] &&
1377
        !active_timers[QEMU_CLOCK_VIRTUAL] &&
1378
        !active_timers[QEMU_CLOCK_HOST])
1379
        return;
1380

    
1381
    timeKillEvent(data->timerId);
1382

    
1383
    data->timerId = timeSetEvent(1,
1384
                        data->period,
1385
                        host_alarm_handler,
1386
                        (DWORD)t,
1387
                        TIME_ONESHOT | TIME_PERIODIC);
1388

    
1389
    if (!data->timerId) {
1390
        fprintf(stderr, "Failed to re-arm win32 alarm timer %ld\n",
1391
                GetLastError());
1392

    
1393
        timeEndPeriod(data->period);
1394
        exit(1);
1395
    }
1396
}
1397

    
1398
#endif /* _WIN32 */
1399

    
1400
static int init_timer_alarm(void)
1401
{
1402
    struct qemu_alarm_timer *t = NULL;
1403
    int i, err = -1;
1404

    
1405
    for (i = 0; alarm_timers[i].name; i++) {
1406
        t = &alarm_timers[i];
1407

    
1408
        err = t->start(t);
1409
        if (!err)
1410
            break;
1411
    }
1412

    
1413
    if (err) {
1414
        err = -ENOENT;
1415
        goto fail;
1416
    }
1417

    
1418
    alarm_timer = t;
1419

    
1420
    return 0;
1421

    
1422
fail:
1423
    return err;
1424
}
1425

    
1426
static void quit_timers(void)
1427
{
1428
    alarm_timer->stop(alarm_timer);
1429
    alarm_timer = NULL;
1430
}
1431

    
1432
/***********************************************************/
1433
/* host time/date access */
1434
void qemu_get_timedate(struct tm *tm, int offset)
1435
{
1436
    time_t ti;
1437
    struct tm *ret;
1438

    
1439
    time(&ti);
1440
    ti += offset;
1441
    if (rtc_date_offset == -1) {
1442
        if (rtc_utc)
1443
            ret = gmtime(&ti);
1444
        else
1445
            ret = localtime(&ti);
1446
    } else {
1447
        ti -= rtc_date_offset;
1448
        ret = gmtime(&ti);
1449
    }
1450

    
1451
    memcpy(tm, ret, sizeof(struct tm));
1452
}
1453

    
1454
int qemu_timedate_diff(struct tm *tm)
1455
{
1456
    time_t seconds;
1457

    
1458
    if (rtc_date_offset == -1)
1459
        if (rtc_utc)
1460
            seconds = mktimegm(tm);
1461
        else
1462
            seconds = mktime(tm);
1463
    else
1464
        seconds = mktimegm(tm) + rtc_date_offset;
1465

    
1466
    return seconds - time(NULL);
1467
}
1468

    
1469
static void configure_rtc_date_offset(const char *startdate, int legacy)
1470
{
1471
    time_t rtc_start_date;
1472
    struct tm tm;
1473

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

    
1508
static void configure_rtc(QemuOpts *opts)
1509
{
1510
    const char *value;
1511

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

    
1548
#ifdef _WIN32
1549
static void socket_cleanup(void)
1550
{
1551
    WSACleanup();
1552
}
1553

    
1554
static int socket_init(void)
1555
{
1556
    WSADATA Data;
1557
    int ret, err;
1558

    
1559
    ret = WSAStartup(MAKEWORD(2,2), &Data);
1560
    if (ret != 0) {
1561
        err = WSAGetLastError();
1562
        fprintf(stderr, "WSAStartup: %d\n", err);
1563
        return -1;
1564
    }
1565
    atexit(socket_cleanup);
1566
    return 0;
1567
}
1568
#endif
1569

    
1570
/***********************************************************/
1571
/* Bluetooth support */
1572
static int nb_hcis;
1573
static int cur_hci;
1574
static struct HCIInfo *hci_table[MAX_NICS];
1575

    
1576
static struct bt_vlan_s {
1577
    struct bt_scatternet_s net;
1578
    int id;
1579
    struct bt_vlan_s *next;
1580
} *first_bt_vlan;
1581

    
1582
/* find or alloc a new bluetooth "VLAN" */
1583
static struct bt_scatternet_s *qemu_find_bt_vlan(int id)
1584
{
1585
    struct bt_vlan_s **pvlan, *vlan;
1586
    for (vlan = first_bt_vlan; vlan != NULL; vlan = vlan->next) {
1587
        if (vlan->id == id)
1588
            return &vlan->net;
1589
    }
1590
    vlan = qemu_mallocz(sizeof(struct bt_vlan_s));
1591
    vlan->id = id;
1592
    pvlan = &first_bt_vlan;
1593
    while (*pvlan != NULL)
1594
        pvlan = &(*pvlan)->next;
1595
    *pvlan = vlan;
1596
    return &vlan->net;
1597
}
1598

    
1599
static void null_hci_send(struct HCIInfo *hci, const uint8_t *data, int len)
1600
{
1601
}
1602

    
1603
static int null_hci_addr_set(struct HCIInfo *hci, const uint8_t *bd_addr)
1604
{
1605
    return -ENOTSUP;
1606
}
1607

    
1608
static struct HCIInfo null_hci = {
1609
    .cmd_send = null_hci_send,
1610
    .sco_send = null_hci_send,
1611
    .acl_send = null_hci_send,
1612
    .bdaddr_set = null_hci_addr_set,
1613
};
1614

    
1615
struct HCIInfo *qemu_next_hci(void)
1616
{
1617
    if (cur_hci == nb_hcis)
1618
        return &null_hci;
1619

    
1620
    return hci_table[cur_hci++];
1621
}
1622

    
1623
static struct HCIInfo *hci_init(const char *str)
1624
{
1625
    char *endp;
1626
    struct bt_scatternet_s *vlan = 0;
1627

    
1628
    if (!strcmp(str, "null"))
1629
        /* null */
1630
        return &null_hci;
1631
    else if (!strncmp(str, "host", 4) && (str[4] == '\0' || str[4] == ':'))
1632
        /* host[:hciN] */
1633
        return bt_host_hci(str[4] ? str + 5 : "hci0");
1634
    else if (!strncmp(str, "hci", 3)) {
1635
        /* hci[,vlan=n] */
1636
        if (str[3]) {
1637
            if (!strncmp(str + 3, ",vlan=", 6)) {
1638
                vlan = qemu_find_bt_vlan(strtol(str + 9, &endp, 0));
1639
                if (*endp)
1640
                    vlan = 0;
1641
            }
1642
        } else
1643
            vlan = qemu_find_bt_vlan(0);
1644
        if (vlan)
1645
           return bt_new_hci(vlan);
1646
    }
1647

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

    
1650
    return 0;
1651
}
1652

    
1653
static int bt_hci_parse(const char *str)
1654
{
1655
    struct HCIInfo *hci;
1656
    bdaddr_t bdaddr;
1657

    
1658
    if (nb_hcis >= MAX_NICS) {
1659
        fprintf(stderr, "qemu: Too many bluetooth HCIs (max %i).\n", MAX_NICS);
1660
        return -1;
1661
    }
1662

    
1663
    hci = hci_init(str);
1664
    if (!hci)
1665
        return -1;
1666

    
1667
    bdaddr.b[0] = 0x52;
1668
    bdaddr.b[1] = 0x54;
1669
    bdaddr.b[2] = 0x00;
1670
    bdaddr.b[3] = 0x12;
1671
    bdaddr.b[4] = 0x34;
1672
    bdaddr.b[5] = 0x56 + nb_hcis;
1673
    hci->bdaddr_set(hci, bdaddr.b);
1674

    
1675
    hci_table[nb_hcis++] = hci;
1676

    
1677
    return 0;
1678
}
1679

    
1680
static void bt_vhci_add(int vlan_id)
1681
{
1682
    struct bt_scatternet_s *vlan = qemu_find_bt_vlan(vlan_id);
1683

    
1684
    if (!vlan->slave)
1685
        fprintf(stderr, "qemu: warning: adding a VHCI to "
1686
                        "an empty scatternet %i\n", vlan_id);
1687

    
1688
    bt_vhci_init(bt_new_hci(vlan));
1689
}
1690

    
1691
static struct bt_device_s *bt_device_add(const char *opt)
1692
{
1693
    struct bt_scatternet_s *vlan;
1694
    int vlan_id = 0;
1695
    char *endp = strstr(opt, ",vlan=");
1696
    int len = (endp ? endp - opt : strlen(opt)) + 1;
1697
    char devname[10];
1698

    
1699
    pstrcpy(devname, MIN(sizeof(devname), len), opt);
1700

    
1701
    if (endp) {
1702
        vlan_id = strtol(endp + 6, &endp, 0);
1703
        if (*endp) {
1704
            fprintf(stderr, "qemu: unrecognised bluetooth vlan Id\n");
1705
            return 0;
1706
        }
1707
    }
1708

    
1709
    vlan = qemu_find_bt_vlan(vlan_id);
1710

    
1711
    if (!vlan->slave)
1712
        fprintf(stderr, "qemu: warning: adding a slave device to "
1713
                        "an empty scatternet %i\n", vlan_id);
1714

    
1715
    if (!strcmp(devname, "keyboard"))
1716
        return bt_keyboard_init(vlan);
1717

    
1718
    fprintf(stderr, "qemu: unsupported bluetooth device `%s'\n", devname);
1719
    return 0;
1720
}
1721

    
1722
static int bt_parse(const char *opt)
1723
{
1724
    const char *endp, *p;
1725
    int vlan;
1726

    
1727
    if (strstart(opt, "hci", &endp)) {
1728
        if (!*endp || *endp == ',') {
1729
            if (*endp)
1730
                if (!strstart(endp, ",vlan=", 0))
1731
                    opt = endp + 1;
1732

    
1733
            return bt_hci_parse(opt);
1734
       }
1735
    } else if (strstart(opt, "vhci", &endp)) {
1736
        if (!*endp || *endp == ',') {
1737
            if (*endp) {
1738
                if (strstart(endp, ",vlan=", &p)) {
1739
                    vlan = strtol(p, (char **) &endp, 0);
1740
                    if (*endp) {
1741
                        fprintf(stderr, "qemu: bad scatternet '%s'\n", p);
1742
                        return 1;
1743
                    }
1744
                } else {
1745
                    fprintf(stderr, "qemu: bad parameter '%s'\n", endp + 1);
1746
                    return 1;
1747
                }
1748
            } else
1749
                vlan = 0;
1750

    
1751
            bt_vhci_add(vlan);
1752
            return 0;
1753
        }
1754
    } else if (strstart(opt, "device:", &endp))
1755
        return !bt_device_add(endp);
1756

    
1757
    fprintf(stderr, "qemu: bad bluetooth parameter '%s'\n", opt);
1758
    return 1;
1759
}
1760

    
1761
/***********************************************************/
1762
/* QEMU Block devices */
1763

    
1764
#define HD_ALIAS "index=%d,media=disk"
1765
#define CDROM_ALIAS "index=2,media=cdrom"
1766
#define FD_ALIAS "index=%d,if=floppy"
1767
#define PFLASH_ALIAS "if=pflash"
1768
#define MTD_ALIAS "if=mtd"
1769
#define SD_ALIAS "index=0,if=sd"
1770

    
1771
QemuOpts *drive_add(const char *file, const char *fmt, ...)
1772
{
1773
    va_list ap;
1774
    char optstr[1024];
1775
    QemuOpts *opts;
1776

    
1777
    va_start(ap, fmt);
1778
    vsnprintf(optstr, sizeof(optstr), fmt, ap);
1779
    va_end(ap);
1780

    
1781
    opts = qemu_opts_parse(&qemu_drive_opts, optstr, NULL);
1782
    if (!opts) {
1783
        fprintf(stderr, "%s: huh? duplicate? (%s)\n",
1784
                __FUNCTION__, optstr);
1785
        return NULL;
1786
    }
1787
    if (file)
1788
        qemu_opt_set(opts, "file", file);
1789
    return opts;
1790
}
1791

    
1792
DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit)
1793
{
1794
    DriveInfo *dinfo;
1795

    
1796
    /* seek interface, bus and unit */
1797

    
1798
    QTAILQ_FOREACH(dinfo, &drives, next) {
1799
        if (dinfo->type == type &&
1800
            dinfo->bus == bus &&
1801
            dinfo->unit == unit)
1802
            return dinfo;
1803
    }
1804

    
1805
    return NULL;
1806
}
1807

    
1808
DriveInfo *drive_get_by_id(const char *id)
1809
{
1810
    DriveInfo *dinfo;
1811

    
1812
    QTAILQ_FOREACH(dinfo, &drives, next) {
1813
        if (strcmp(id, dinfo->id))
1814
            continue;
1815
        return dinfo;
1816
    }
1817
    return NULL;
1818
}
1819

    
1820
int drive_get_max_bus(BlockInterfaceType type)
1821
{
1822
    int max_bus;
1823
    DriveInfo *dinfo;
1824

    
1825
    max_bus = -1;
1826
    QTAILQ_FOREACH(dinfo, &drives, next) {
1827
        if(dinfo->type == type &&
1828
           dinfo->bus > max_bus)
1829
            max_bus = dinfo->bus;
1830
    }
1831
    return max_bus;
1832
}
1833

    
1834
const char *drive_get_serial(BlockDriverState *bdrv)
1835
{
1836
    DriveInfo *dinfo;
1837

    
1838
    QTAILQ_FOREACH(dinfo, &drives, next) {
1839
        if (dinfo->bdrv == bdrv)
1840
            return dinfo->serial;
1841
    }
1842

    
1843
    return "\0";
1844
}
1845

    
1846
BlockInterfaceErrorAction drive_get_on_error(
1847
    BlockDriverState *bdrv, int is_read)
1848
{
1849
    DriveInfo *dinfo;
1850

    
1851
    QTAILQ_FOREACH(dinfo, &drives, next) {
1852
        if (dinfo->bdrv == bdrv)
1853
            return is_read ? dinfo->on_read_error : dinfo->on_write_error;
1854
    }
1855

    
1856
    return is_read ? BLOCK_ERR_REPORT : BLOCK_ERR_STOP_ENOSPC;
1857
}
1858

    
1859
static void bdrv_format_print(void *opaque, const char *name)
1860
{
1861
    fprintf(stderr, " %s", name);
1862
}
1863

    
1864
void drive_uninit(DriveInfo *dinfo)
1865
{
1866
    qemu_opts_del(dinfo->opts);
1867
    bdrv_delete(dinfo->bdrv);
1868
    QTAILQ_REMOVE(&drives, dinfo, next);
1869
    qemu_free(dinfo);
1870
}
1871

    
1872
static int parse_block_error_action(const char *buf, int is_read)
1873
{
1874
    if (!strcmp(buf, "ignore")) {
1875
        return BLOCK_ERR_IGNORE;
1876
    } else if (!is_read && !strcmp(buf, "enospc")) {
1877
        return BLOCK_ERR_STOP_ENOSPC;
1878
    } else if (!strcmp(buf, "stop")) {
1879
        return BLOCK_ERR_STOP_ANY;
1880
    } else if (!strcmp(buf, "report")) {
1881
        return BLOCK_ERR_REPORT;
1882
    } else {
1883
        fprintf(stderr, "qemu: '%s' invalid %s error action\n",
1884
            buf, is_read ? "read" : "write");
1885
        return -1;
1886
    }
1887
}
1888

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

    
1914
    *fatal_error = 1;
1915

    
1916
    translation = BIOS_ATA_TRANSLATION_AUTO;
1917
    cache = 1;
1918

    
1919
    if (machine && machine->use_scsi) {
1920
        type = IF_SCSI;
1921
        max_devs = MAX_SCSI_DEVS;
1922
        pstrcpy(devname, sizeof(devname), "scsi");
1923
    } else {
1924
        type = IF_IDE;
1925
        max_devs = MAX_IDE_DEVS;
1926
        pstrcpy(devname, sizeof(devname), "ide");
1927
    }
1928
    media = MEDIA_DISK;
1929

    
1930
    /* extract parameters */
1931
    bus_id  = qemu_opt_get_number(opts, "bus", 0);
1932
    unit_id = qemu_opt_get_number(opts, "unit", -1);
1933
    index   = qemu_opt_get_number(opts, "index", -1);
1934

    
1935
    cyls  = qemu_opt_get_number(opts, "cyls", 0);
1936
    heads = qemu_opt_get_number(opts, "heads", 0);
1937
    secs  = qemu_opt_get_number(opts, "secs", 0);
1938

    
1939
    snapshot = qemu_opt_get_bool(opts, "snapshot", 0);
1940
    ro = qemu_opt_get_bool(opts, "readonly", 0);
1941

    
1942
    file = qemu_opt_get(opts, "file");
1943
    serial = qemu_opt_get(opts, "serial");
1944

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

    
1980
    if (cyls || heads || secs) {
1981
        if (cyls < 1 || (type == IF_IDE && cyls > 16383)) {
1982
            fprintf(stderr, "qemu: '%s' invalid physical cyls number\n", buf);
1983
            return NULL;
1984
        }
1985
        if (heads < 1 || (type == IF_IDE && heads > 16)) {
1986
            fprintf(stderr, "qemu: '%s' invalid physical heads number\n", buf);
1987
            return NULL;
1988
        }
1989
        if (secs < 1 || (type == IF_IDE && secs > 63)) {
1990
            fprintf(stderr, "qemu: '%s' invalid physical secs number\n", buf);
1991
            return NULL;
1992
        }
1993
    }
1994

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

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

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

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

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

    
2070
    on_write_error = BLOCK_ERR_STOP_ENOSPC;
2071
    if ((buf = qemu_opt_get(opts, "werror")) != NULL) {
2072
        if (type != IF_IDE && type != IF_SCSI && type != IF_VIRTIO) {
2073
            fprintf(stderr, "werror is no supported by this format\n");
2074
            return NULL;
2075
        }
2076

    
2077
        on_write_error = parse_block_error_action(buf, 0);
2078
        if (on_write_error < 0) {
2079
            return NULL;
2080
        }
2081
    }
2082

    
2083
    on_read_error = BLOCK_ERR_REPORT;
2084
    if ((buf = qemu_opt_get(opts, "rerror")) != NULL) {
2085
        if (type != IF_IDE && type != IF_VIRTIO) {
2086
            fprintf(stderr, "rerror is no supported by this format\n");
2087
            return NULL;
2088
        }
2089

    
2090
        on_read_error = parse_block_error_action(buf, 1);
2091
        if (on_read_error < 0) {
2092
            return NULL;
2093
        }
2094
    }
2095

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

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

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

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

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

    
2136
    /* check unit id */
2137

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

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

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

    
2153
    /* init */
2154

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

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

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

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

    
2254
    if (bdrv_open2(dinfo->bdrv, file, bdrv_flags, drv) < 0) {
2255
        fprintf(stderr, "qemu: could not open disk image %s: %s\n",
2256
                        file, strerror(errno));
2257
        return NULL;
2258
    }
2259

    
2260
    if (bdrv_key_required(dinfo->bdrv))
2261
        autostart = 0;
2262
    *fatal_error = 0;
2263
    return dinfo;
2264
}
2265

    
2266
static int drive_init_func(QemuOpts *opts, void *opaque)
2267
{
2268
    QEMUMachine *machine = opaque;
2269
    int fatal_error = 0;
2270

    
2271
    if (drive_init(opts, machine, &fatal_error) == NULL) {
2272
        if (fatal_error)
2273
            return 1;
2274
    }
2275
    return 0;
2276
}
2277

    
2278
static int drive_enable_snapshot(QemuOpts *opts, void *opaque)
2279
{
2280
    if (NULL == qemu_opt_get(opts, "snapshot")) {
2281
        qemu_opt_set(opts, "snapshot", "on");
2282
    }
2283
    return 0;
2284
}
2285

    
2286
void qemu_register_boot_set(QEMUBootSetHandler *func, void *opaque)
2287
{
2288
    boot_set_handler = func;
2289
    boot_set_opaque = opaque;
2290
}
2291

    
2292
int qemu_boot_set(const char *boot_devices)
2293
{
2294
    if (!boot_set_handler) {
2295
        return -EINVAL;
2296
    }
2297
    return boot_set_handler(boot_set_opaque, boot_devices);
2298
}
2299

    
2300
static int parse_bootdevices(char *devices)
2301
{
2302
    /* We just do some generic consistency checks */
2303
    const char *p;
2304
    int bitmap = 0;
2305

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

    
2329
static void restore_boot_devices(void *opaque)
2330
{
2331
    char *standard_boot_devices = opaque;
2332

    
2333
    qemu_boot_set(standard_boot_devices);
2334

    
2335
    qemu_unregister_reset(restore_boot_devices, standard_boot_devices);
2336
    qemu_free(standard_boot_devices);
2337
}
2338

    
2339
static void numa_add(const char *optarg)
2340
{
2341
    char option[128];
2342
    char *endptr;
2343
    unsigned long long value, endvalue;
2344
    int nodenr;
2345

    
2346
    optarg = get_opt_name(option, 128, optarg, ',') + 1;
2347
    if (!strcmp(option, "node")) {
2348
        if (get_param_value(option, 128, "nodeid", optarg) == 0) {
2349
            nodenr = nb_numa_nodes;
2350
        } else {
2351
            nodenr = strtoull(option, NULL, 10);
2352
        }
2353

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

    
2395
static void smp_parse(const char *optarg)
2396
{
2397
    int smp, sockets = 0, threads = 0, cores = 0;
2398
    char *endptr;
2399
    char option[128];
2400

    
2401
    smp = strtoul(optarg, &endptr, 10);
2402
    if (endptr != optarg) {
2403
        if (*endptr == ',') {
2404
            endptr++;
2405
        }
2406
    }
2407
    if (get_param_value(option, 128, "sockets", endptr) != 0)
2408
        sockets = strtoull(option, NULL, 10);
2409
    if (get_param_value(option, 128, "cores", endptr) != 0)
2410
        cores = strtoull(option, NULL, 10);
2411
    if (get_param_value(option, 128, "threads", endptr) != 0)
2412
        threads = strtoull(option, NULL, 10);
2413
    if (get_param_value(option, 128, "maxcpus", endptr) != 0)
2414
        max_cpus = strtoull(option, NULL, 10);
2415

    
2416
    /* compute missing values, prefer sockets over cores over threads */
2417
    if (smp == 0 || sockets == 0) {
2418
        sockets = sockets > 0 ? sockets : 1;
2419
        cores = cores > 0 ? cores : 1;
2420
        threads = threads > 0 ? threads : 1;
2421
        if (smp == 0) {
2422
            smp = cores * threads * sockets;
2423
        }
2424
    } else {
2425
        if (cores == 0) {
2426
            threads = threads > 0 ? threads : 1;
2427
            cores = smp / (sockets * threads);
2428
        } else {
2429
            if (sockets) {
2430
                threads = smp / (cores * sockets);
2431
            }
2432
        }
2433
    }
2434
    smp_cpus = smp;
2435
    smp_cores = cores > 0 ? cores : 1;
2436
    smp_threads = threads > 0 ? threads : 1;
2437
    if (max_cpus == 0)
2438
        max_cpus = smp_cpus;
2439
}
2440

    
2441
/***********************************************************/
2442
/* USB devices */
2443

    
2444
static int usb_device_add(const char *devname, int is_hotplug)
2445
{
2446
    const char *p;
2447
    USBDevice *dev = NULL;
2448

    
2449
    if (!usb_enabled)
2450
        return -1;
2451

    
2452
    /* drivers with .usbdevice_name entry in USBDeviceInfo */
2453
    dev = usbdevice_create(devname);
2454
    if (dev)
2455
        goto done;
2456

    
2457
    /* the other ones */
2458
    if (strstart(devname, "host:", &p)) {
2459
        dev = usb_host_device_open(p);
2460
    } else if (!strcmp(devname, "bt") || strstart(devname, "bt:", &p)) {
2461
        dev = usb_bt_init(devname[2] ? hci_init(p) :
2462
                        bt_new_hci(qemu_find_bt_vlan(0)));
2463
    } else {
2464
        return -1;
2465
    }
2466
    if (!dev)
2467
        return -1;
2468

    
2469
done:
2470
    return 0;
2471
}
2472

    
2473
static int usb_device_del(const char *devname)
2474
{
2475
    int bus_num, addr;
2476
    const char *p;
2477

    
2478
    if (strstart(devname, "host:", &p))
2479
        return usb_host_device_close(p);
2480

    
2481
    if (!usb_enabled)
2482
        return -1;
2483

    
2484
    p = strchr(devname, '.');
2485
    if (!p)
2486
        return -1;
2487
    bus_num = strtoul(devname, NULL, 0);
2488
    addr = strtoul(p + 1, NULL, 0);
2489

    
2490
    return usb_device_delete_addr(bus_num, addr);
2491
}
2492

    
2493
static int usb_parse(const char *cmdline)
2494
{
2495
    int r;
2496
    r = usb_device_add(cmdline, 0);
2497
    if (r < 0) {
2498
        fprintf(stderr, "qemu: could not add USB device '%s'\n", cmdline);
2499
    }
2500
    return r;
2501
}
2502

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

    
2511
void do_usb_del(Monitor *mon, const QDict *qdict)
2512
{
2513
    const char *devname = qdict_get_str(qdict, "devname");
2514
    if (usb_device_del(devname) < 0) {
2515
        qemu_error("could not delete USB device '%s'\n", devname);
2516
    }
2517
}
2518

    
2519
/***********************************************************/
2520
/* PCMCIA/Cardbus */
2521

    
2522
static struct pcmcia_socket_entry_s {
2523
    PCMCIASocket *socket;
2524
    struct pcmcia_socket_entry_s *next;
2525
} *pcmcia_sockets = 0;
2526

    
2527
void pcmcia_socket_register(PCMCIASocket *socket)
2528
{
2529
    struct pcmcia_socket_entry_s *entry;
2530

    
2531
    entry = qemu_malloc(sizeof(struct pcmcia_socket_entry_s));
2532
    entry->socket = socket;
2533
    entry->next = pcmcia_sockets;
2534
    pcmcia_sockets = entry;
2535
}
2536

    
2537
void pcmcia_socket_unregister(PCMCIASocket *socket)
2538
{
2539
    struct pcmcia_socket_entry_s *entry, **ptr;
2540

    
2541
    ptr = &pcmcia_sockets;
2542
    for (entry = *ptr; entry; ptr = &entry->next, entry = *ptr)
2543
        if (entry->socket == socket) {
2544
            *ptr = entry->next;
2545
            qemu_free(entry);
2546
        }
2547
}
2548

    
2549
void pcmcia_info(Monitor *mon)
2550
{
2551
    struct pcmcia_socket_entry_s *iter;
2552

    
2553
    if (!pcmcia_sockets)
2554
        monitor_printf(mon, "No PCMCIA sockets\n");
2555

    
2556
    for (iter = pcmcia_sockets; iter; iter = iter->next)
2557
        monitor_printf(mon, "%s: %s\n", iter->socket->slot_string,
2558
                       iter->socket->attached ? iter->socket->card_string :
2559
                       "Empty");
2560
}
2561

    
2562
/***********************************************************/
2563
/* register display */
2564

    
2565
struct DisplayAllocator default_allocator = {
2566
    defaultallocator_create_displaysurface,
2567
    defaultallocator_resize_displaysurface,
2568
    defaultallocator_free_displaysurface
2569
};
2570

    
2571
void register_displaystate(DisplayState *ds)
2572
{
2573
    DisplayState **s;
2574
    s = &display_state;
2575
    while (*s != NULL)
2576
        s = &(*s)->next;
2577
    ds->next = NULL;
2578
    *s = ds;
2579
}
2580

    
2581
DisplayState *get_displaystate(void)
2582
{
2583
    return display_state;
2584
}
2585

    
2586
DisplayAllocator *register_displayallocator(DisplayState *ds, DisplayAllocator *da)
2587
{
2588
    if(ds->allocator ==  &default_allocator) ds->allocator = da;
2589
    return ds->allocator;
2590
}
2591

    
2592
/* dumb display */
2593

    
2594
static void dumb_display_init(void)
2595
{
2596
    DisplayState *ds = qemu_mallocz(sizeof(DisplayState));
2597
    ds->allocator = &default_allocator;
2598
    ds->surface = qemu_create_displaysurface(ds, 640, 480);
2599
    register_displaystate(ds);
2600
}
2601

    
2602
/***********************************************************/
2603
/* I/O handling */
2604

    
2605
typedef struct IOHandlerRecord {
2606
    int fd;
2607
    IOCanRWHandler *fd_read_poll;
2608
    IOHandler *fd_read;
2609
    IOHandler *fd_write;
2610
    int deleted;
2611
    void *opaque;
2612
    /* temporary data */
2613
    struct pollfd *ufd;
2614
    struct IOHandlerRecord *next;
2615
} IOHandlerRecord;
2616

    
2617
static IOHandlerRecord *first_io_handler;
2618

    
2619
/* XXX: fd_read_poll should be suppressed, but an API change is
2620
   necessary in the character devices to suppress fd_can_read(). */
2621
int qemu_set_fd_handler2(int fd,
2622
                         IOCanRWHandler *fd_read_poll,
2623
                         IOHandler *fd_read,
2624
                         IOHandler *fd_write,
2625
                         void *opaque)
2626
{
2627
    IOHandlerRecord **pioh, *ioh;
2628

    
2629
    if (!fd_read && !fd_write) {
2630
        pioh = &first_io_handler;
2631
        for(;;) {
2632
            ioh = *pioh;
2633
            if (ioh == NULL)
2634
                break;
2635
            if (ioh->fd == fd) {
2636
                ioh->deleted = 1;
2637
                break;
2638
            }
2639
            pioh = &ioh->next;
2640
        }
2641
    } else {
2642
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
2643
            if (ioh->fd == fd)
2644
                goto found;
2645
        }
2646
        ioh = qemu_mallocz(sizeof(IOHandlerRecord));
2647
        ioh->next = first_io_handler;
2648
        first_io_handler = ioh;
2649
    found:
2650
        ioh->fd = fd;
2651
        ioh->fd_read_poll = fd_read_poll;
2652
        ioh->fd_read = fd_read;
2653
        ioh->fd_write = fd_write;
2654
        ioh->opaque = opaque;
2655
        ioh->deleted = 0;
2656
    }
2657
    return 0;
2658
}
2659

    
2660
int qemu_set_fd_handler(int fd,
2661
                        IOHandler *fd_read,
2662
                        IOHandler *fd_write,
2663
                        void *opaque)
2664
{
2665
    return qemu_set_fd_handler2(fd, NULL, fd_read, fd_write, opaque);
2666
}
2667

    
2668
#ifdef _WIN32
2669
/***********************************************************/
2670
/* Polling handling */
2671

    
2672
typedef struct PollingEntry {
2673
    PollingFunc *func;
2674
    void *opaque;
2675
    struct PollingEntry *next;
2676
} PollingEntry;
2677

    
2678
static PollingEntry *first_polling_entry;
2679

    
2680
int qemu_add_polling_cb(PollingFunc *func, void *opaque)
2681
{
2682
    PollingEntry **ppe, *pe;
2683
    pe = qemu_mallocz(sizeof(PollingEntry));
2684
    pe->func = func;
2685
    pe->opaque = opaque;
2686
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next);
2687
    *ppe = pe;
2688
    return 0;
2689
}
2690

    
2691
void qemu_del_polling_cb(PollingFunc *func, void *opaque)
2692
{
2693
    PollingEntry **ppe, *pe;
2694
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next) {
2695
        pe = *ppe;
2696
        if (pe->func == func && pe->opaque == opaque) {
2697
            *ppe = pe->next;
2698
            qemu_free(pe);
2699
            break;
2700
        }
2701
    }
2702
}
2703

    
2704
/***********************************************************/
2705
/* Wait objects support */
2706
typedef struct WaitObjects {
2707
    int num;
2708
    HANDLE events[MAXIMUM_WAIT_OBJECTS + 1];
2709
    WaitObjectFunc *func[MAXIMUM_WAIT_OBJECTS + 1];
2710
    void *opaque[MAXIMUM_WAIT_OBJECTS + 1];
2711
} WaitObjects;
2712

    
2713
static WaitObjects wait_objects = {0};
2714

    
2715
int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
2716
{
2717
    WaitObjects *w = &wait_objects;
2718

    
2719
    if (w->num >= MAXIMUM_WAIT_OBJECTS)
2720
        return -1;
2721
    w->events[w->num] = handle;
2722
    w->func[w->num] = func;
2723
    w->opaque[w->num] = opaque;
2724
    w->num++;
2725
    return 0;
2726
}
2727

    
2728
void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
2729
{
2730
    int i, found;
2731
    WaitObjects *w = &wait_objects;
2732

    
2733
    found = 0;
2734
    for (i = 0; i < w->num; i++) {
2735
        if (w->events[i] == handle)
2736
            found = 1;
2737
        if (found) {
2738
            w->events[i] = w->events[i + 1];
2739
            w->func[i] = w->func[i + 1];
2740
            w->opaque[i] = w->opaque[i + 1];
2741
        }
2742
    }
2743
    if (found)
2744
        w->num--;
2745
}
2746
#endif
2747

    
2748
/***********************************************************/
2749
/* ram save/restore */
2750

    
2751
#define RAM_SAVE_FLAG_FULL        0x01 /* Obsolete, not used anymore */
2752
#define RAM_SAVE_FLAG_COMPRESS        0x02
2753
#define RAM_SAVE_FLAG_MEM_SIZE        0x04
2754
#define RAM_SAVE_FLAG_PAGE        0x08
2755
#define RAM_SAVE_FLAG_EOS        0x10
2756

    
2757
static int is_dup_page(uint8_t *page, uint8_t ch)
2758
{
2759
    uint32_t val = ch << 24 | ch << 16 | ch << 8 | ch;
2760
    uint32_t *array = (uint32_t *)page;
2761
    int i;
2762

    
2763
    for (i = 0; i < (TARGET_PAGE_SIZE / 4); i++) {
2764
        if (array[i] != val)
2765
            return 0;
2766
    }
2767

    
2768
    return 1;
2769
}
2770

    
2771
static int ram_save_block(QEMUFile *f)
2772
{
2773
    static ram_addr_t current_addr = 0;
2774
    ram_addr_t saved_addr = current_addr;
2775
    ram_addr_t addr = 0;
2776
    int found = 0;
2777

    
2778
    while (addr < last_ram_offset) {
2779
        if (cpu_physical_memory_get_dirty(current_addr, MIGRATION_DIRTY_FLAG)) {
2780
            uint8_t *p;
2781

    
2782
            cpu_physical_memory_reset_dirty(current_addr,
2783
                                            current_addr + TARGET_PAGE_SIZE,
2784
                                            MIGRATION_DIRTY_FLAG);
2785

    
2786
            p = qemu_get_ram_ptr(current_addr);
2787

    
2788
            if (is_dup_page(p, *p)) {
2789
                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_COMPRESS);
2790
                qemu_put_byte(f, *p);
2791
            } else {
2792
                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_PAGE);
2793
                qemu_put_buffer(f, p, TARGET_PAGE_SIZE);
2794
            }
2795

    
2796
            found = 1;
2797
            break;
2798
        }
2799
        addr += TARGET_PAGE_SIZE;
2800
        current_addr = (saved_addr + addr) % last_ram_offset;
2801
    }
2802

    
2803
    return found;
2804
}
2805

    
2806
static uint64_t bytes_transferred;
2807

    
2808
static ram_addr_t ram_save_remaining(void)
2809
{
2810
    ram_addr_t addr;
2811
    ram_addr_t count = 0;
2812

    
2813
    for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
2814
        if (cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
2815
            count++;
2816
    }
2817

    
2818
    return count;
2819
}
2820

    
2821
uint64_t ram_bytes_remaining(void)
2822
{
2823
    return ram_save_remaining() * TARGET_PAGE_SIZE;
2824
}
2825

    
2826
uint64_t ram_bytes_transferred(void)
2827
{
2828
    return bytes_transferred;
2829
}
2830

    
2831
uint64_t ram_bytes_total(void)
2832
{
2833
    return last_ram_offset;
2834
}
2835

    
2836
static int ram_save_live(Monitor *mon, QEMUFile *f, int stage, void *opaque)
2837
{
2838
    ram_addr_t addr;
2839
    uint64_t bytes_transferred_last;
2840
    double bwidth = 0;
2841
    uint64_t expected_time = 0;
2842

    
2843
    if (stage < 0) {
2844
        cpu_physical_memory_set_dirty_tracking(0);
2845
        return 0;
2846
    }
2847

    
2848
    if (cpu_physical_sync_dirty_bitmap(0, TARGET_PHYS_ADDR_MAX) != 0) {
2849
        qemu_file_set_error(f);
2850
        return 0;
2851
    }
2852

    
2853
    if (stage == 1) {
2854
        bytes_transferred = 0;
2855

    
2856
        /* Make sure all dirty bits are set */
2857
        for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
2858
            if (!cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
2859
                cpu_physical_memory_set_dirty(addr);
2860
        }
2861

    
2862
        /* Enable dirty memory tracking */
2863
        cpu_physical_memory_set_dirty_tracking(1);
2864

    
2865
        qemu_put_be64(f, last_ram_offset | RAM_SAVE_FLAG_MEM_SIZE);
2866
    }
2867

    
2868
    bytes_transferred_last = bytes_transferred;
2869
    bwidth = get_clock();
2870

    
2871
    while (!qemu_file_rate_limit(f)) {
2872
        int ret;
2873

    
2874
        ret = ram_save_block(f);
2875
        bytes_transferred += ret * TARGET_PAGE_SIZE;
2876
        if (ret == 0) /* no more blocks */
2877
            break;
2878
    }
2879

    
2880
    bwidth = get_clock() - bwidth;
2881
    bwidth = (bytes_transferred - bytes_transferred_last) / bwidth;
2882

    
2883
    /* if we haven't transferred anything this round, force expected_time to a
2884
     * a very high value, but without crashing */
2885
    if (bwidth == 0)
2886
        bwidth = 0.000001;
2887

    
2888
    /* try transferring iterative blocks of memory */
2889
    if (stage == 3) {
2890
        /* flush all remaining blocks regardless of rate limiting */
2891
        while (ram_save_block(f) != 0) {
2892
            bytes_transferred += TARGET_PAGE_SIZE;
2893
        }
2894
        cpu_physical_memory_set_dirty_tracking(0);
2895
    }
2896

    
2897
    qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
2898

    
2899
    expected_time = ram_save_remaining() * TARGET_PAGE_SIZE / bwidth;
2900

    
2901
    return (stage == 2) && (expected_time <= migrate_max_downtime());
2902
}
2903

    
2904
static int ram_load(QEMUFile *f, void *opaque, int version_id)
2905
{
2906
    ram_addr_t addr;
2907
    int flags;
2908

    
2909
    if (version_id != 3)
2910
        return -EINVAL;
2911

    
2912
    do {
2913
        addr = qemu_get_be64(f);
2914

    
2915
        flags = addr & ~TARGET_PAGE_MASK;
2916
        addr &= TARGET_PAGE_MASK;
2917

    
2918
        if (flags & RAM_SAVE_FLAG_MEM_SIZE) {
2919
            if (addr != last_ram_offset)
2920
                return -EINVAL;
2921
        }
2922

    
2923
        if (flags & RAM_SAVE_FLAG_COMPRESS) {
2924
            uint8_t ch = qemu_get_byte(f);
2925
            memset(qemu_get_ram_ptr(addr), ch, TARGET_PAGE_SIZE);
2926
#ifndef _WIN32
2927
            if (ch == 0 &&
2928
                (!kvm_enabled() || kvm_has_sync_mmu())) {
2929
                madvise(qemu_get_ram_ptr(addr), TARGET_PAGE_SIZE, MADV_DONTNEED);
2930
            }
2931
#endif
2932
        } else if (flags & RAM_SAVE_FLAG_PAGE) {
2933
            qemu_get_buffer(f, qemu_get_ram_ptr(addr), TARGET_PAGE_SIZE);
2934
        }
2935
        if (qemu_file_has_error(f)) {
2936
            return -EIO;
2937
        }
2938
    } while (!(flags & RAM_SAVE_FLAG_EOS));
2939

    
2940
    return 0;
2941
}
2942

    
2943
void qemu_service_io(void)
2944
{
2945
    qemu_notify_event();
2946
}
2947

    
2948
/***********************************************************/
2949
/* machine registration */
2950

    
2951
static QEMUMachine *first_machine = NULL;
2952
QEMUMachine *current_machine = NULL;
2953

    
2954
int qemu_register_machine(QEMUMachine *m)
2955
{
2956
    QEMUMachine **pm;
2957
    pm = &first_machine;
2958
    while (*pm != NULL)
2959
        pm = &(*pm)->next;
2960
    m->next = NULL;
2961
    *pm = m;
2962
    return 0;
2963
}
2964

    
2965
static QEMUMachine *find_machine(const char *name)
2966
{
2967
    QEMUMachine *m;
2968

    
2969
    for(m = first_machine; m != NULL; m = m->next) {
2970
        if (!strcmp(m->name, name))
2971
            return m;
2972
        if (m->alias && !strcmp(m->alias, name))
2973
            return m;
2974
    }
2975
    return NULL;
2976
}
2977

    
2978
static QEMUMachine *find_default_machine(void)
2979
{
2980
    QEMUMachine *m;
2981

    
2982
    for(m = first_machine; m != NULL; m = m->next) {
2983
        if (m->is_default) {
2984
            return m;
2985
        }
2986
    }
2987
    return NULL;
2988
}
2989

    
2990
/***********************************************************/
2991
/* main execution loop */
2992

    
2993
static void gui_update(void *opaque)
2994
{
2995
    uint64_t interval = GUI_REFRESH_INTERVAL;
2996
    DisplayState *ds = opaque;
2997
    DisplayChangeListener *dcl = ds->listeners;
2998

    
2999
    dpy_refresh(ds);
3000

    
3001
    while (dcl != NULL) {
3002
        if (dcl->gui_timer_interval &&
3003
            dcl->gui_timer_interval < interval)
3004
            interval = dcl->gui_timer_interval;
3005
        dcl = dcl->next;
3006
    }
3007
    qemu_mod_timer(ds->gui_timer, interval + qemu_get_clock(rt_clock));
3008
}
3009

    
3010
static void nographic_update(void *opaque)
3011
{
3012
    uint64_t interval = GUI_REFRESH_INTERVAL;
3013

    
3014
    qemu_mod_timer(nographic_timer, interval + qemu_get_clock(rt_clock));
3015
}
3016

    
3017
struct vm_change_state_entry {
3018
    VMChangeStateHandler *cb;
3019
    void *opaque;
3020
    QLIST_ENTRY (vm_change_state_entry) entries;
3021
};
3022

    
3023
static QLIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head;
3024

    
3025
VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
3026
                                                     void *opaque)
3027
{
3028
    VMChangeStateEntry *e;
3029

    
3030
    e = qemu_mallocz(sizeof (*e));
3031

    
3032
    e->cb = cb;
3033
    e->opaque = opaque;
3034
    QLIST_INSERT_HEAD(&vm_change_state_head, e, entries);
3035
    return e;
3036
}
3037

    
3038
void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
3039
{
3040
    QLIST_REMOVE (e, entries);
3041
    qemu_free (e);
3042
}
3043

    
3044
static void vm_state_notify(int running, int reason)
3045
{
3046
    VMChangeStateEntry *e;
3047

    
3048
    for (e = vm_change_state_head.lh_first; e; e = e->entries.le_next) {
3049
        e->cb(e->opaque, running, reason);
3050
    }
3051
}
3052

    
3053
static void resume_all_vcpus(void);
3054
static void pause_all_vcpus(void);
3055

    
3056
void vm_start(void)
3057
{
3058
    if (!vm_running) {
3059
        cpu_enable_ticks();
3060
        vm_running = 1;
3061
        vm_state_notify(1, 0);
3062
        qemu_rearm_alarm_timer(alarm_timer);
3063
        resume_all_vcpus();
3064
    }
3065
}
3066

    
3067
/* reset/shutdown handler */
3068

    
3069
typedef struct QEMUResetEntry {
3070
    QTAILQ_ENTRY(QEMUResetEntry) entry;
3071
    QEMUResetHandler *func;
3072
    void *opaque;
3073
} QEMUResetEntry;
3074

    
3075
static QTAILQ_HEAD(reset_handlers, QEMUResetEntry) reset_handlers =
3076
    QTAILQ_HEAD_INITIALIZER(reset_handlers);
3077
static int reset_requested;
3078
static int shutdown_requested;
3079
static int powerdown_requested;
3080
static int debug_requested;
3081
static int vmstop_requested;
3082

    
3083
int qemu_shutdown_requested(void)
3084
{
3085
    int r = shutdown_requested;
3086
    shutdown_requested = 0;
3087
    return r;
3088
}
3089

    
3090
int qemu_reset_requested(void)
3091
{
3092
    int r = reset_requested;
3093
    reset_requested = 0;
3094
    return r;
3095
}
3096

    
3097
int qemu_powerdown_requested(void)
3098
{
3099
    int r = powerdown_requested;
3100
    powerdown_requested = 0;
3101
    return r;
3102
}
3103

    
3104
static int qemu_debug_requested(void)
3105
{
3106
    int r = debug_requested;
3107
    debug_requested = 0;
3108
    return r;
3109
}
3110

    
3111
static int qemu_vmstop_requested(void)
3112
{
3113
    int r = vmstop_requested;
3114
    vmstop_requested = 0;
3115
    return r;
3116
}
3117

    
3118
static void do_vm_stop(int reason)
3119
{
3120
    if (vm_running) {
3121
        cpu_disable_ticks();
3122
        vm_running = 0;
3123
        pause_all_vcpus();
3124
        vm_state_notify(0, reason);
3125
    }
3126
}
3127

    
3128
void qemu_register_reset(QEMUResetHandler *func, void *opaque)
3129
{
3130
    QEMUResetEntry *re = qemu_mallocz(sizeof(QEMUResetEntry));
3131

    
3132
    re->func = func;
3133
    re->opaque = opaque;
3134
    QTAILQ_INSERT_TAIL(&reset_handlers, re, entry);
3135
}
3136

    
3137
void qemu_unregister_reset(QEMUResetHandler *func, void *opaque)
3138
{
3139
    QEMUResetEntry *re;
3140

    
3141
    QTAILQ_FOREACH(re, &reset_handlers, entry) {
3142
        if (re->func == func && re->opaque == opaque) {
3143
            QTAILQ_REMOVE(&reset_handlers, re, entry);
3144
            qemu_free(re);
3145
            return;
3146
        }
3147
    }
3148
}
3149

    
3150
void qemu_system_reset(void)
3151
{
3152
    QEMUResetEntry *re, *nre;
3153

    
3154
    /* reset all devices */
3155
    QTAILQ_FOREACH_SAFE(re, &reset_handlers, entry, nre) {
3156
        re->func(re->opaque);
3157
    }
3158
}
3159

    
3160
void qemu_system_reset_request(void)
3161
{
3162
    if (no_reboot) {
3163
        shutdown_requested = 1;
3164
    } else {
3165
        reset_requested = 1;
3166
    }
3167
    qemu_notify_event();
3168
}
3169

    
3170
void qemu_system_shutdown_request(void)
3171
{
3172
    shutdown_requested = 1;
3173
    qemu_notify_event();
3174
}
3175

    
3176
void qemu_system_powerdown_request(void)
3177
{
3178
    powerdown_requested = 1;
3179
    qemu_notify_event();
3180
}
3181

    
3182
#ifdef CONFIG_IOTHREAD
3183
static void qemu_system_vmstop_request(int reason)
3184
{
3185
    vmstop_requested = reason;
3186
    qemu_notify_event();
3187
}
3188
#endif
3189

    
3190
#ifndef _WIN32
3191
static int io_thread_fd = -1;
3192

    
3193
static void qemu_event_increment(void)
3194
{
3195
    static const char byte = 0;
3196
    ssize_t ret;
3197

    
3198
    if (io_thread_fd == -1)
3199
        return;
3200

    
3201
    ret = write(io_thread_fd, &byte, sizeof(byte));
3202
    if (ret < 0 && (errno != EINTR && errno != EAGAIN)) {
3203
        fprintf(stderr, "qemu_event_increment: write() filed: %s\n",
3204
                strerror(errno));
3205
        exit (1);
3206
    }
3207
}
3208

    
3209
static void qemu_event_read(void *opaque)
3210
{
3211
    int fd = (unsigned long)opaque;
3212
    ssize_t len;
3213

    
3214
    /* Drain the notify pipe */
3215
    do {
3216
        char buffer[512];
3217
        len = read(fd, buffer, sizeof(buffer));
3218
    } while ((len == -1 && errno == EINTR) || len > 0);
3219
}
3220

    
3221
static int qemu_event_init(void)
3222
{
3223
    int err;
3224
    int fds[2];
3225

    
3226
    err = qemu_pipe(fds);
3227
    if (err == -1)
3228
        return -errno;
3229

    
3230
    err = fcntl_setfl(fds[0], O_NONBLOCK);
3231
    if (err < 0)
3232
        goto fail;
3233

    
3234
    err = fcntl_setfl(fds[1], O_NONBLOCK);
3235
    if (err < 0)
3236
        goto fail;
3237

    
3238
    qemu_set_fd_handler2(fds[0], NULL, qemu_event_read, NULL,
3239
                         (void *)(unsigned long)fds[0]);
3240

    
3241
    io_thread_fd = fds[1];
3242
    return 0;
3243

    
3244
fail:
3245
    close(fds[0]);
3246
    close(fds[1]);
3247
    return err;
3248
}
3249
#else
3250
HANDLE qemu_event_handle;
3251

    
3252
static void dummy_event_handler(void *opaque)
3253
{
3254
}
3255

    
3256
static int qemu_event_init(void)
3257
{
3258
    qemu_event_handle = CreateEvent(NULL, FALSE, FALSE, NULL);
3259
    if (!qemu_event_handle) {
3260
        fprintf(stderr, "Failed CreateEvent: %ld\n", GetLastError());
3261
        return -1;
3262
    }
3263
    qemu_add_wait_object(qemu_event_handle, dummy_event_handler, NULL);
3264
    return 0;
3265
}
3266

    
3267
static void qemu_event_increment(void)
3268
{
3269
    if (!SetEvent(qemu_event_handle)) {
3270
        fprintf(stderr, "qemu_event_increment: SetEvent failed: %ld\n",
3271
                GetLastError());
3272
        exit (1);
3273
    }
3274
}
3275
#endif
3276

    
3277
static int cpu_can_run(CPUState *env)
3278
{
3279
    if (env->stop)
3280
        return 0;
3281
    if (env->stopped)
3282
        return 0;
3283
    return 1;
3284
}
3285

    
3286
#ifndef CONFIG_IOTHREAD
3287
static int qemu_init_main_loop(void)
3288
{
3289
    return qemu_event_init();
3290
}
3291

    
3292
void qemu_init_vcpu(void *_env)
3293
{
3294
    CPUState *env = _env;
3295

    
3296
    env->nr_cores = smp_cores;
3297
    env->nr_threads = smp_threads;
3298
    if (kvm_enabled())
3299
        kvm_init_vcpu(env);
3300
    return;
3301
}
3302

    
3303
int qemu_cpu_self(void *env)
3304
{
3305
    return 1;
3306
}
3307

    
3308
static void resume_all_vcpus(void)
3309
{
3310
}
3311

    
3312
static void pause_all_vcpus(void)
3313
{
3314
}
3315

    
3316
void qemu_cpu_kick(void *env)
3317
{
3318
    return;
3319
}
3320

    
3321
void qemu_notify_event(void)
3322
{
3323
    CPUState *env = cpu_single_env;
3324

    
3325
    if (env) {
3326
        cpu_exit(env);
3327
    }
3328
}
3329

    
3330
void qemu_mutex_lock_iothread(void) {}
3331
void qemu_mutex_unlock_iothread(void) {}
3332

    
3333
void vm_stop(int reason)
3334
{
3335
    do_vm_stop(reason);
3336
}
3337

    
3338
#else /* CONFIG_IOTHREAD */
3339

    
3340
#include "qemu-thread.h"
3341

    
3342
QemuMutex qemu_global_mutex;
3343
static QemuMutex qemu_fair_mutex;
3344

    
3345
static QemuThread io_thread;
3346

    
3347
static QemuThread *tcg_cpu_thread;
3348
static QemuCond *tcg_halt_cond;
3349

    
3350
static int qemu_system_ready;
3351
/* cpu creation */
3352
static QemuCond qemu_cpu_cond;
3353
/* system init */
3354
static QemuCond qemu_system_cond;
3355
static QemuCond qemu_pause_cond;
3356

    
3357
static void block_io_signals(void);
3358
static void unblock_io_signals(void);
3359
static int tcg_has_work(void);
3360

    
3361
static int qemu_init_main_loop(void)
3362
{
3363
    int ret;
3364

    
3365
    ret = qemu_event_init();
3366
    if (ret)
3367
        return ret;
3368

    
3369
    qemu_cond_init(&qemu_pause_cond);
3370
    qemu_mutex_init(&qemu_fair_mutex);
3371
    qemu_mutex_init(&qemu_global_mutex);
3372
    qemu_mutex_lock(&qemu_global_mutex);
3373

    
3374
    unblock_io_signals();
3375
    qemu_thread_self(&io_thread);
3376

    
3377
    return 0;
3378
}
3379

    
3380
static void qemu_wait_io_event(CPUState *env)
3381
{
3382
    while (!tcg_has_work())
3383
        qemu_cond_timedwait(env->halt_cond, &qemu_global_mutex, 1000);
3384

    
3385
    qemu_mutex_unlock(&qemu_global_mutex);
3386

    
3387
    /*
3388
     * Users of qemu_global_mutex can be starved, having no chance
3389
     * to acquire it since this path will get to it first.
3390
     * So use another lock to provide fairness.
3391
     */
3392
    qemu_mutex_lock(&qemu_fair_mutex);
3393
    qemu_mutex_unlock(&qemu_fair_mutex);
3394

    
3395
    qemu_mutex_lock(&qemu_global_mutex);
3396
    if (env->stop) {
3397
        env->stop = 0;
3398
        env->stopped = 1;
3399
        qemu_cond_signal(&qemu_pause_cond);
3400
    }
3401
}
3402

    
3403
static int qemu_cpu_exec(CPUState *env);
3404

    
3405
static void *kvm_cpu_thread_fn(void *arg)
3406
{
3407
    CPUState *env = arg;
3408

    
3409
    block_io_signals();
3410
    qemu_thread_self(env->thread);
3411
    if (kvm_enabled())
3412
        kvm_init_vcpu(env);
3413

    
3414
    /* signal CPU creation */
3415
    qemu_mutex_lock(&qemu_global_mutex);
3416
    env->created = 1;
3417
    qemu_cond_signal(&qemu_cpu_cond);
3418

    
3419
    /* and wait for machine initialization */
3420
    while (!qemu_system_ready)
3421
        qemu_cond_timedwait(&qemu_system_cond, &qemu_global_mutex, 100);
3422

    
3423
    while (1) {
3424
        if (cpu_can_run(env))
3425
            qemu_cpu_exec(env);
3426
        qemu_wait_io_event(env);
3427
    }
3428

    
3429
    return NULL;
3430
}
3431

    
3432
static void tcg_cpu_exec(void);
3433

    
3434
static void *tcg_cpu_thread_fn(void *arg)
3435
{
3436
    CPUState *env = arg;
3437

    
3438
    block_io_signals();
3439
    qemu_thread_self(env->thread);
3440

    
3441
    /* signal CPU creation */
3442
    qemu_mutex_lock(&qemu_global_mutex);
3443
    for (env = first_cpu; env != NULL; env = env->next_cpu)
3444
        env->created = 1;
3445
    qemu_cond_signal(&qemu_cpu_cond);
3446

    
3447
    /* and wait for machine initialization */
3448
    while (!qemu_system_ready)
3449
        qemu_cond_timedwait(&qemu_system_cond, &qemu_global_mutex, 100);
3450

    
3451
    while (1) {
3452
        tcg_cpu_exec();
3453
        qemu_wait_io_event(cur_cpu);
3454
    }
3455

    
3456
    return NULL;
3457
}
3458

    
3459
void qemu_cpu_kick(void *_env)
3460
{
3461
    CPUState *env = _env;
3462
    qemu_cond_broadcast(env->halt_cond);
3463
    if (kvm_enabled())
3464
        qemu_thread_signal(env->thread, SIGUSR1);
3465
}
3466

    
3467
int qemu_cpu_self(void *_env)
3468
{
3469
    CPUState *env = _env;
3470
    QemuThread this;
3471
 
3472
    qemu_thread_self(&this);
3473
 
3474
    return qemu_thread_equal(&this, env->thread);
3475
}
3476

    
3477
static void cpu_signal(int sig)
3478
{
3479
    if (cpu_single_env)
3480
        cpu_exit(cpu_single_env);
3481
}
3482

    
3483
static void block_io_signals(void)
3484
{
3485
    sigset_t set;
3486
    struct sigaction sigact;
3487

    
3488
    sigemptyset(&set);
3489
    sigaddset(&set, SIGUSR2);
3490
    sigaddset(&set, SIGIO);
3491
    sigaddset(&set, SIGALRM);
3492
    pthread_sigmask(SIG_BLOCK, &set, NULL);
3493

    
3494
    sigemptyset(&set);
3495
    sigaddset(&set, SIGUSR1);
3496
    pthread_sigmask(SIG_UNBLOCK, &set, NULL);
3497

    
3498
    memset(&sigact, 0, sizeof(sigact));
3499
    sigact.sa_handler = cpu_signal;
3500
    sigaction(SIGUSR1, &sigact, NULL);
3501
}
3502

    
3503
static void unblock_io_signals(void)
3504
{
3505
    sigset_t set;
3506

    
3507
    sigemptyset(&set);
3508
    sigaddset(&set, SIGUSR2);
3509
    sigaddset(&set, SIGIO);
3510
    sigaddset(&set, SIGALRM);
3511
    pthread_sigmask(SIG_UNBLOCK, &set, NULL);
3512

    
3513
    sigemptyset(&set);
3514
    sigaddset(&set, SIGUSR1);
3515
    pthread_sigmask(SIG_BLOCK, &set, NULL);
3516
}
3517

    
3518
static void qemu_signal_lock(unsigned int msecs)
3519
{
3520
    qemu_mutex_lock(&qemu_fair_mutex);
3521

    
3522
    while (qemu_mutex_trylock(&qemu_global_mutex)) {
3523
        qemu_thread_signal(tcg_cpu_thread, SIGUSR1);
3524
        if (!qemu_mutex_timedlock(&qemu_global_mutex, msecs))
3525
            break;
3526
    }
3527
    qemu_mutex_unlock(&qemu_fair_mutex);
3528
}
3529

    
3530
void qemu_mutex_lock_iothread(void)
3531
{
3532
    if (kvm_enabled()) {
3533
        qemu_mutex_lock(&qemu_fair_mutex);
3534
        qemu_mutex_lock(&qemu_global_mutex);
3535
        qemu_mutex_unlock(&qemu_fair_mutex);
3536
    } else
3537
        qemu_signal_lock(100);
3538
}
3539

    
3540
void qemu_mutex_unlock_iothread(void)
3541
{
3542
    qemu_mutex_unlock(&qemu_global_mutex);
3543
}
3544

    
3545
static int all_vcpus_paused(void)
3546
{
3547
    CPUState *penv = first_cpu;
3548

    
3549
    while (penv) {
3550
        if (!penv->stopped)
3551
            return 0;
3552
        penv = (CPUState *)penv->next_cpu;
3553
    }
3554

    
3555
    return 1;
3556
}
3557

    
3558
static void pause_all_vcpus(void)
3559
{
3560
    CPUState *penv = first_cpu;
3561

    
3562
    while (penv) {
3563
        penv->stop = 1;
3564
        qemu_thread_signal(penv->thread, SIGUSR1);
3565
        qemu_cpu_kick(penv);
3566
        penv = (CPUState *)penv->next_cpu;
3567
    }
3568

    
3569
    while (!all_vcpus_paused()) {
3570
        qemu_cond_timedwait(&qemu_pause_cond, &qemu_global_mutex, 100);
3571
        penv = first_cpu;
3572
        while (penv) {
3573
            qemu_thread_signal(penv->thread, SIGUSR1);
3574
            penv = (CPUState *)penv->next_cpu;
3575
        }
3576
    }
3577
}
3578

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

    
3583
    while (penv) {
3584
        penv->stop = 0;
3585
        penv->stopped = 0;
3586
        qemu_thread_signal(penv->thread, SIGUSR1);
3587
        qemu_cpu_kick(penv);
3588
        penv = (CPUState *)penv->next_cpu;
3589
    }
3590
}
3591

    
3592
static void tcg_init_vcpu(void *_env)
3593
{
3594
    CPUState *env = _env;
3595
    /* share a single thread for all cpus with TCG */
3596
    if (!tcg_cpu_thread) {
3597
        env->thread = qemu_mallocz(sizeof(QemuThread));
3598
        env->halt_cond = qemu_mallocz(sizeof(QemuCond));
3599
        qemu_cond_init(env->halt_cond);
3600
        qemu_thread_create(env->thread, tcg_cpu_thread_fn, env);
3601
        while (env->created == 0)
3602
            qemu_cond_timedwait(&qemu_cpu_cond, &qemu_global_mutex, 100);
3603
        tcg_cpu_thread = env->thread;
3604
        tcg_halt_cond = env->halt_cond;
3605
    } else {
3606
        env->thread = tcg_cpu_thread;
3607
        env->halt_cond = tcg_halt_cond;
3608
    }
3609
}
3610

    
3611
static void kvm_start_vcpu(CPUState *env)
3612
{
3613
    env->thread = qemu_mallocz(sizeof(QemuThread));
3614
    env->halt_cond = qemu_mallocz(sizeof(QemuCond));
3615
    qemu_cond_init(env->halt_cond);
3616
    qemu_thread_create(env->thread, kvm_cpu_thread_fn, env);
3617
    while (env->created == 0)
3618
        qemu_cond_timedwait(&qemu_cpu_cond, &qemu_global_mutex, 100);
3619
}
3620

    
3621
void qemu_init_vcpu(void *_env)
3622
{
3623
    CPUState *env = _env;
3624

    
3625
    env->nr_cores = smp_cores;
3626
    env->nr_threads = smp_threads;
3627
    if (kvm_enabled())
3628
        kvm_start_vcpu(env);
3629
    else
3630
        tcg_init_vcpu(env);
3631
}
3632

    
3633
void qemu_notify_event(void)
3634
{
3635
    qemu_event_increment();
3636
}
3637

    
3638
void vm_stop(int reason)
3639
{
3640
    QemuThread me;
3641
    qemu_thread_self(&me);
3642

    
3643
    if (!qemu_thread_equal(&me, &io_thread)) {
3644
        qemu_system_vmstop_request(reason);
3645
        /*
3646
         * FIXME: should not return to device code in case
3647
         * vm_stop() has been requested.
3648
         */
3649
        if (cpu_single_env) {
3650
            cpu_exit(cpu_single_env);
3651
            cpu_single_env->stop = 1;
3652
        }
3653
        return;
3654
    }
3655
    do_vm_stop(reason);
3656
}
3657

    
3658
#endif
3659

    
3660

    
3661
#ifdef _WIN32
3662
static void host_main_loop_wait(int *timeout)
3663
{
3664
    int ret, ret2, i;
3665
    PollingEntry *pe;
3666

    
3667

    
3668
    /* XXX: need to suppress polling by better using win32 events */
3669
    ret = 0;
3670
    for(pe = first_polling_entry; pe != NULL; pe = pe->next) {
3671
        ret |= pe->func(pe->opaque);
3672
    }
3673
    if (ret == 0) {
3674
        int err;
3675
        WaitObjects *w = &wait_objects;
3676

    
3677
        ret = WaitForMultipleObjects(w->num, w->events, FALSE, *timeout);
3678
        if (WAIT_OBJECT_0 + 0 <= ret && ret <= WAIT_OBJECT_0 + w->num - 1) {
3679
            if (w->func[ret - WAIT_OBJECT_0])
3680
                w->func[ret - WAIT_OBJECT_0](w->opaque[ret - WAIT_OBJECT_0]);
3681

    
3682
            /* Check for additional signaled events */
3683
            for(i = (ret - WAIT_OBJECT_0 + 1); i < w->num; i++) {
3684

    
3685
                /* Check if event is signaled */
3686
                ret2 = WaitForSingleObject(w->events[i], 0);
3687
                if(ret2 == WAIT_OBJECT_0) {
3688
                    if (w->func[i])
3689
                        w->func[i](w->opaque[i]);
3690
                } else if (ret2 == WAIT_TIMEOUT) {
3691
                } else {
3692
                    err = GetLastError();
3693
                    fprintf(stderr, "WaitForSingleObject error %d %d\n", i, err);
3694
                }
3695
            }
3696
        } else if (ret == WAIT_TIMEOUT) {
3697
        } else {
3698
            err = GetLastError();
3699
            fprintf(stderr, "WaitForMultipleObjects error %d %d\n", ret, err);
3700
        }
3701
    }
3702

    
3703
    *timeout = 0;
3704
}
3705
#else
3706
static void host_main_loop_wait(int *timeout)
3707
{
3708
}
3709
#endif
3710

    
3711
void main_loop_wait(int timeout)
3712
{
3713
    IOHandlerRecord *ioh;
3714
    fd_set rfds, wfds, xfds;
3715
    int ret, nfds;
3716
    struct timeval tv;
3717

    
3718
    qemu_bh_update_timeout(&timeout);
3719

    
3720
    host_main_loop_wait(&timeout);
3721

    
3722
    /* poll any events */
3723
    /* XXX: separate device handlers from system ones */
3724
    nfds = -1;
3725
    FD_ZERO(&rfds);
3726
    FD_ZERO(&wfds);
3727
    FD_ZERO(&xfds);
3728
    for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
3729
        if (ioh->deleted)
3730
            continue;
3731
        if (ioh->fd_read &&
3732
            (!ioh->fd_read_poll ||
3733
             ioh->fd_read_poll(ioh->opaque) != 0)) {
3734
            FD_SET(ioh->fd, &rfds);
3735
            if (ioh->fd > nfds)
3736
                nfds = ioh->fd;
3737
        }
3738
        if (ioh->fd_write) {
3739
            FD_SET(ioh->fd, &wfds);
3740
            if (ioh->fd > nfds)
3741
                nfds = ioh->fd;
3742
        }
3743
    }
3744

    
3745
    tv.tv_sec = timeout / 1000;
3746
    tv.tv_usec = (timeout % 1000) * 1000;
3747

    
3748
    slirp_select_fill(&nfds, &rfds, &wfds, &xfds);
3749

    
3750
    qemu_mutex_unlock_iothread();
3751
    ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv);
3752
    qemu_mutex_lock_iothread();
3753
    if (ret > 0) {
3754
        IOHandlerRecord **pioh;
3755

    
3756
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
3757
            if (!ioh->deleted && ioh->fd_read && FD_ISSET(ioh->fd, &rfds)) {
3758
                ioh->fd_read(ioh->opaque);
3759
            }
3760
            if (!ioh->deleted && ioh->fd_write && FD_ISSET(ioh->fd, &wfds)) {
3761
                ioh->fd_write(ioh->opaque);
3762
            }
3763
        }
3764

    
3765
        /* remove deleted IO handlers */
3766
        pioh = &first_io_handler;
3767
        while (*pioh) {
3768
            ioh = *pioh;
3769
            if (ioh->deleted) {
3770
                *pioh = ioh->next;
3771
                qemu_free(ioh);
3772
            } else
3773
                pioh = &ioh->next;
3774
        }
3775
    }
3776

    
3777
    slirp_select_poll(&rfds, &wfds, &xfds, (ret < 0));
3778

    
3779
    /* rearm timer, if not periodic */
3780
    if (alarm_timer->flags & ALARM_FLAG_EXPIRED) {
3781
        alarm_timer->flags &= ~ALARM_FLAG_EXPIRED;
3782
        qemu_rearm_alarm_timer(alarm_timer);
3783
    }
3784

    
3785
    /* vm time timers */
3786
    if (vm_running) {
3787
        if (!cur_cpu || likely(!(cur_cpu->singlestep_enabled & SSTEP_NOTIMER)))
3788
            qemu_run_timers(&active_timers[QEMU_CLOCK_VIRTUAL],
3789
                            qemu_get_clock(vm_clock));
3790
    }
3791

    
3792
    /* real time timers */
3793
    qemu_run_timers(&active_timers[QEMU_CLOCK_REALTIME],
3794
                    qemu_get_clock(rt_clock));
3795

    
3796
    qemu_run_timers(&active_timers[QEMU_CLOCK_HOST],
3797
                    qemu_get_clock(host_clock));
3798

    
3799
    /* Check bottom-halves last in case any of the earlier events triggered
3800
       them.  */
3801
    qemu_bh_poll();
3802

    
3803
}
3804

    
3805
static int qemu_cpu_exec(CPUState *env)
3806
{
3807
    int ret;
3808
#ifdef CONFIG_PROFILER
3809
    int64_t ti;
3810
#endif
3811

    
3812
#ifdef CONFIG_PROFILER
3813
    ti = profile_getclock();
3814
#endif
3815
    if (use_icount) {
3816
        int64_t count;
3817
        int decr;
3818
        qemu_icount -= (env->icount_decr.u16.low + env->icount_extra);
3819
        env->icount_decr.u16.low = 0;
3820
        env->icount_extra = 0;
3821
        count = qemu_next_deadline();
3822
        count = (count + (1 << icount_time_shift) - 1)
3823
                >> icount_time_shift;
3824
        qemu_icount += count;
3825
        decr = (count > 0xffff) ? 0xffff : count;
3826
        count -= decr;
3827
        env->icount_decr.u16.low = decr;
3828
        env->icount_extra = count;
3829
    }
3830
    ret = cpu_exec(env);
3831
#ifdef CONFIG_PROFILER
3832
    qemu_time += profile_getclock() - ti;
3833
#endif
3834
    if (use_icount) {
3835
        /* Fold pending instructions back into the
3836
           instruction counter, and clear the interrupt flag.  */
3837
        qemu_icount -= (env->icount_decr.u16.low
3838
                        + env->icount_extra);
3839
        env->icount_decr.u32 = 0;
3840
        env->icount_extra = 0;
3841
    }
3842
    return ret;
3843
}
3844

    
3845
static void tcg_cpu_exec(void)
3846
{
3847
    int ret = 0;
3848

    
3849
    if (next_cpu == NULL)
3850
        next_cpu = first_cpu;
3851
    for (; next_cpu != NULL; next_cpu = next_cpu->next_cpu) {
3852
        CPUState *env = cur_cpu = next_cpu;
3853

    
3854
        if (!vm_running)
3855
            break;
3856
        if (timer_alarm_pending) {
3857
            timer_alarm_pending = 0;
3858
            break;
3859
        }
3860
        if (cpu_can_run(env))
3861
            ret = qemu_cpu_exec(env);
3862
        if (ret == EXCP_DEBUG) {
3863
            gdb_set_stop_cpu(env);
3864
            debug_requested = 1;
3865
            break;
3866
        }
3867
    }
3868
}
3869

    
3870
static int cpu_has_work(CPUState *env)
3871
{
3872
    if (env->stop)
3873
        return 1;
3874
    if (env->stopped)
3875
        return 0;
3876
    if (!env->halted)
3877
        return 1;
3878
    if (qemu_cpu_has_work(env))
3879
        return 1;
3880
    return 0;
3881
}
3882

    
3883
static int tcg_has_work(void)
3884
{
3885
    CPUState *env;
3886

    
3887
    for (env = first_cpu; env != NULL; env = env->next_cpu)
3888
        if (cpu_has_work(env))
3889
            return 1;
3890
    return 0;
3891
}
3892

    
3893
static int qemu_calculate_timeout(void)
3894
{
3895
#ifndef CONFIG_IOTHREAD
3896
    int timeout;
3897

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

    
3940
    return timeout;
3941
#else /* CONFIG_IOTHREAD */
3942
    return 1000;
3943
#endif
3944
}
3945

    
3946
static int vm_can_run(void)
3947
{
3948
    if (powerdown_requested)
3949
        return 0;
3950
    if (reset_requested)
3951
        return 0;
3952
    if (shutdown_requested)
3953
        return 0;
3954
    if (debug_requested)
3955
        return 0;
3956
    return 1;
3957
}
3958

    
3959
qemu_irq qemu_system_powerdown;
3960

    
3961
static void main_loop(void)
3962
{
3963
    int r;
3964

    
3965
#ifdef CONFIG_IOTHREAD
3966
    qemu_system_ready = 1;
3967
    qemu_cond_broadcast(&qemu_system_cond);
3968
#endif
3969

    
3970
    for (;;) {
3971
        do {
3972
#ifdef CONFIG_PROFILER
3973
            int64_t ti;
3974
#endif
3975
#ifndef CONFIG_IOTHREAD
3976
            tcg_cpu_exec();
3977
#endif
3978
#ifdef CONFIG_PROFILER
3979
            ti = profile_getclock();
3980
#endif
3981
            main_loop_wait(qemu_calculate_timeout());
3982
#ifdef CONFIG_PROFILER
3983
            dev_time += profile_getclock() - ti;
3984
#endif
3985
        } while (vm_can_run());
3986

    
3987
        if (qemu_debug_requested()) {
3988
            monitor_protocol_event(QEVENT_DEBUG, NULL);
3989
            vm_stop(EXCP_DEBUG);
3990
        }
3991
        if (qemu_shutdown_requested()) {
3992
            monitor_protocol_event(QEVENT_SHUTDOWN, NULL);
3993
            if (no_shutdown) {
3994
                vm_stop(0);
3995
                no_shutdown = 0;
3996
            } else
3997
                break;
3998
        }
3999
        if (qemu_reset_requested()) {
4000
            monitor_protocol_event(QEVENT_RESET, NULL);
4001
            pause_all_vcpus();
4002
            qemu_system_reset();
4003
            resume_all_vcpus();
4004
        }
4005
        if (qemu_powerdown_requested()) {
4006
            monitor_protocol_event(QEVENT_POWERDOWN, NULL);
4007
            qemu_irq_raise(qemu_system_powerdown);
4008
        }
4009
        if ((r = qemu_vmstop_requested())) {
4010
            monitor_protocol_event(QEVENT_STOP, NULL);
4011
            vm_stop(r);
4012
        }
4013
    }
4014
    pause_all_vcpus();
4015
}
4016

    
4017
static void version(void)
4018
{
4019
    printf("QEMU PC emulator version " QEMU_VERSION QEMU_PKGVERSION ", Copyright (c) 2003-2008 Fabrice Bellard\n");
4020
}
4021

    
4022
static void help(int exitcode)
4023
{
4024
    version();
4025
    printf("usage: %s [options] [disk_image]\n"
4026
           "\n"
4027
           "'disk_image' is a raw hard image image for IDE hard disk 0\n"
4028
           "\n"
4029
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4030
           opt_help
4031
#define DEFHEADING(text) stringify(text) "\n"
4032
#include "qemu-options.h"
4033
#undef DEF
4034
#undef DEFHEADING
4035
#undef GEN_DOCS
4036
           "\n"
4037
           "During emulation, the following keys are useful:\n"
4038
           "ctrl-alt-f      toggle full screen\n"
4039
           "ctrl-alt-n      switch to virtual console 'n'\n"
4040
           "ctrl-alt        toggle mouse and keyboard grab\n"
4041
           "\n"
4042
           "When using -nographic, press 'ctrl-a h' to get some help.\n"
4043
           ,
4044
           "qemu",
4045
           DEFAULT_RAM_SIZE,
4046
#ifndef _WIN32
4047
           DEFAULT_NETWORK_SCRIPT,
4048
           DEFAULT_NETWORK_DOWN_SCRIPT,
4049
#endif
4050
           DEFAULT_GDBSTUB_PORT,
4051
           "/tmp/qemu.log");
4052
    exit(exitcode);
4053
}
4054

    
4055
#define HAS_ARG 0x0001
4056

    
4057
enum {
4058
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4059
    opt_enum,
4060
#define DEFHEADING(text)
4061
#include "qemu-options.h"
4062
#undef DEF
4063
#undef DEFHEADING
4064
#undef GEN_DOCS
4065
};
4066

    
4067
typedef struct QEMUOption {
4068
    const char *name;
4069
    int flags;
4070
    int index;
4071
} QEMUOption;
4072

    
4073
static const QEMUOption qemu_options[] = {
4074
    { "h", 0, QEMU_OPTION_h },
4075
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4076
    { option, opt_arg, opt_enum },
4077
#define DEFHEADING(text)
4078
#include "qemu-options.h"
4079
#undef DEF
4080
#undef DEFHEADING
4081
#undef GEN_DOCS
4082
    { NULL },
4083
};
4084

    
4085
#ifdef HAS_AUDIO
4086
struct soundhw soundhw[] = {
4087
#ifdef HAS_AUDIO_CHOICE
4088
#if defined(TARGET_I386) || defined(TARGET_MIPS)
4089
    {
4090
        "pcspk",
4091
        "PC speaker",
4092
        0,
4093
        1,
4094
        { .init_isa = pcspk_audio_init }
4095
    },
4096
#endif
4097

    
4098
#ifdef CONFIG_SB16
4099
    {
4100
        "sb16",
4101
        "Creative Sound Blaster 16",
4102
        0,
4103
        1,
4104
        { .init_isa = SB16_init }
4105
    },
4106
#endif
4107

    
4108
#ifdef CONFIG_CS4231A
4109
    {
4110
        "cs4231a",
4111
        "CS4231A",
4112
        0,
4113
        1,
4114
        { .init_isa = cs4231a_init }
4115
    },
4116
#endif
4117

    
4118
#ifdef CONFIG_ADLIB
4119
    {
4120
        "adlib",
4121
#ifdef HAS_YMF262
4122
        "Yamaha YMF262 (OPL3)",
4123
#else
4124
        "Yamaha YM3812 (OPL2)",
4125
#endif
4126
        0,
4127
        1,
4128
        { .init_isa = Adlib_init }
4129
    },
4130
#endif
4131

    
4132
#ifdef CONFIG_GUS
4133
    {
4134
        "gus",
4135
        "Gravis Ultrasound GF1",
4136
        0,
4137
        1,
4138
        { .init_isa = GUS_init }
4139
    },
4140
#endif
4141

    
4142
#ifdef CONFIG_AC97
4143
    {
4144
        "ac97",
4145
        "Intel 82801AA AC97 Audio",
4146
        0,
4147
        0,
4148
        { .init_pci = ac97_init }
4149
    },
4150
#endif
4151

    
4152
#ifdef CONFIG_ES1370
4153
    {
4154
        "es1370",
4155
        "ENSONIQ AudioPCI ES1370",
4156
        0,
4157
        0,
4158
        { .init_pci = es1370_init }
4159
    },
4160
#endif
4161

    
4162
#endif /* HAS_AUDIO_CHOICE */
4163

    
4164
    { NULL, NULL, 0, 0, { NULL } }
4165
};
4166

    
4167
static void select_soundhw (const char *optarg)
4168
{
4169
    struct soundhw *c;
4170

    
4171
    if (*optarg == '?') {
4172
    show_valid_cards:
4173

    
4174
        printf ("Valid sound card names (comma separated):\n");
4175
        for (c = soundhw; c->name; ++c) {
4176
            printf ("%-11s %s\n", c->name, c->descr);
4177
        }
4178
        printf ("\n-soundhw all will enable all of the above\n");
4179
        exit (*optarg != '?');
4180
    }
4181
    else {
4182
        size_t l;
4183
        const char *p;
4184
        char *e;
4185
        int bad_card = 0;
4186

    
4187
        if (!strcmp (optarg, "all")) {
4188
            for (c = soundhw; c->name; ++c) {
4189
                c->enabled = 1;
4190
            }
4191
            return;
4192
        }
4193

    
4194
        p = optarg;
4195
        while (*p) {
4196
            e = strchr (p, ',');
4197
            l = !e ? strlen (p) : (size_t) (e - p);
4198

    
4199
            for (c = soundhw; c->name; ++c) {
4200
                if (!strncmp (c->name, p, l) && !c->name[l]) {
4201
                    c->enabled = 1;
4202
                    break;
4203
                }
4204
            }
4205

    
4206
            if (!c->name) {
4207
                if (l > 80) {
4208
                    fprintf (stderr,
4209
                             "Unknown sound card name (too big to show)\n");
4210
                }
4211
                else {
4212
                    fprintf (stderr, "Unknown sound card name `%.*s'\n",
4213
                             (int) l, p);
4214
                }
4215
                bad_card = 1;
4216
            }
4217
            p += l + (e != NULL);
4218
        }
4219

    
4220
        if (bad_card)
4221
            goto show_valid_cards;
4222
    }
4223
}
4224
#endif
4225

    
4226
static void select_vgahw (const char *p)
4227
{
4228
    const char *opts;
4229

    
4230
    default_vga = 0;
4231
    vga_interface_type = VGA_NONE;
4232
    if (strstart(p, "std", &opts)) {
4233
        vga_interface_type = VGA_STD;
4234
    } else if (strstart(p, "cirrus", &opts)) {
4235
        vga_interface_type = VGA_CIRRUS;
4236
    } else if (strstart(p, "vmware", &opts)) {
4237
        vga_interface_type = VGA_VMWARE;
4238
    } else if (strstart(p, "xenfb", &opts)) {
4239
        vga_interface_type = VGA_XENFB;
4240
    } else if (!strstart(p, "none", &opts)) {
4241
    invalid_vga:
4242
        fprintf(stderr, "Unknown vga type: %s\n", p);
4243
        exit(1);
4244
    }
4245
    while (*opts) {
4246
        const char *nextopt;
4247

    
4248
        if (strstart(opts, ",retrace=", &nextopt)) {
4249
            opts = nextopt;
4250
            if (strstart(opts, "dumb", &nextopt))
4251
                vga_retrace_method = VGA_RETRACE_DUMB;
4252
            else if (strstart(opts, "precise", &nextopt))
4253
                vga_retrace_method = VGA_RETRACE_PRECISE;
4254
            else goto invalid_vga;
4255
        } else goto invalid_vga;
4256
        opts = nextopt;
4257
    }
4258
}
4259

    
4260
#ifdef TARGET_I386
4261
static int balloon_parse(const char *arg)
4262
{
4263
    QemuOpts *opts;
4264

    
4265
    if (strcmp(arg, "none") == 0) {
4266
        return 0;
4267
    }
4268

    
4269
    if (!strncmp(arg, "virtio", 6)) {
4270
        if (arg[6] == ',') {
4271
            /* have params -> parse them */
4272
            opts = qemu_opts_parse(&qemu_device_opts, arg+7, NULL);
4273
            if (!opts)
4274
                return  -1;
4275
        } else {
4276
            /* create empty opts */
4277
            opts = qemu_opts_create(&qemu_device_opts, NULL, 0);
4278
        }
4279
        qemu_opt_set(opts, "driver", "virtio-balloon-pci");
4280
        return 0;
4281
    }
4282

    
4283
    return -1;
4284
}
4285
#endif
4286

    
4287
#ifdef _WIN32
4288
static BOOL WINAPI qemu_ctrl_handler(DWORD type)
4289
{
4290
    exit(STATUS_CONTROL_C_EXIT);
4291
    return TRUE;
4292
}
4293
#endif
4294

    
4295
int qemu_uuid_parse(const char *str, uint8_t *uuid)
4296
{
4297
    int ret;
4298

    
4299
    if(strlen(str) != 36)
4300
        return -1;
4301

    
4302
    ret = sscanf(str, UUID_FMT, &uuid[0], &uuid[1], &uuid[2], &uuid[3],
4303
            &uuid[4], &uuid[5], &uuid[6], &uuid[7], &uuid[8], &uuid[9],
4304
            &uuid[10], &uuid[11], &uuid[12], &uuid[13], &uuid[14], &uuid[15]);
4305

    
4306
    if(ret != 16)
4307
        return -1;
4308

    
4309
#ifdef TARGET_I386
4310
    smbios_add_field(1, offsetof(struct smbios_type_1, uuid), 16, uuid);
4311
#endif
4312

    
4313
    return 0;
4314
}
4315

    
4316
#ifndef _WIN32
4317

    
4318
static void termsig_handler(int signal)
4319
{
4320
    qemu_system_shutdown_request();
4321
}
4322

    
4323
static void sigchld_handler(int signal)
4324
{
4325
    waitpid(-1, NULL, WNOHANG);
4326
}
4327

    
4328
static void sighandler_setup(void)
4329
{
4330
    struct sigaction act;
4331

    
4332
    memset(&act, 0, sizeof(act));
4333
    act.sa_handler = termsig_handler;
4334
    sigaction(SIGINT,  &act, NULL);
4335
    sigaction(SIGHUP,  &act, NULL);
4336
    sigaction(SIGTERM, &act, NULL);
4337

    
4338
    act.sa_handler = sigchld_handler;
4339
    act.sa_flags = SA_NOCLDSTOP;
4340
    sigaction(SIGCHLD, &act, NULL);
4341
}
4342

    
4343
#endif
4344

    
4345
#ifdef _WIN32
4346
/* Look for support files in the same directory as the executable.  */
4347
static char *find_datadir(const char *argv0)
4348
{
4349
    char *p;
4350
    char buf[MAX_PATH];
4351
    DWORD len;
4352

    
4353
    len = GetModuleFileName(NULL, buf, sizeof(buf) - 1);
4354
    if (len == 0) {
4355
        return NULL;
4356
    }
4357

    
4358
    buf[len] = 0;
4359
    p = buf + len - 1;
4360
    while (p != buf && *p != '\\')
4361
        p--;
4362
    *p = 0;
4363
    if (access(buf, R_OK) == 0) {
4364
        return qemu_strdup(buf);
4365
    }
4366
    return NULL;
4367
}
4368
#else /* !_WIN32 */
4369

    
4370
/* Find a likely location for support files using the location of the binary.
4371
   For installed binaries this will be "$bindir/../share/qemu".  When
4372
   running from the build tree this will be "$bindir/../pc-bios".  */
4373
#define SHARE_SUFFIX "/share/qemu"
4374
#define BUILD_SUFFIX "/pc-bios"
4375
static char *find_datadir(const char *argv0)
4376
{
4377
    char *dir;
4378
    char *p = NULL;
4379
    char *res;
4380
    char buf[PATH_MAX];
4381
    size_t max_len;
4382

    
4383
#if defined(__linux__)
4384
    {
4385
        int len;
4386
        len = readlink("/proc/self/exe", buf, sizeof(buf) - 1);
4387
        if (len > 0) {
4388
            buf[len] = 0;
4389
            p = buf;
4390
        }
4391
    }
4392
#elif defined(__FreeBSD__)
4393
    {
4394
        int len;
4395
        len = readlink("/proc/curproc/file", buf, sizeof(buf) - 1);
4396
        if (len > 0) {
4397
            buf[len] = 0;
4398
            p = buf;
4399
        }
4400
    }
4401
#endif
4402
    /* If we don't have any way of figuring out the actual executable
4403
       location then try argv[0].  */
4404
    if (!p) {
4405
        p = realpath(argv0, buf);
4406
        if (!p) {
4407
            return NULL;
4408
        }
4409
    }
4410
    dir = dirname(p);
4411
    dir = dirname(dir);
4412

    
4413
    max_len = strlen(dir) +
4414
        MAX(strlen(SHARE_SUFFIX), strlen(BUILD_SUFFIX)) + 1;
4415
    res = qemu_mallocz(max_len);
4416
    snprintf(res, max_len, "%s%s", dir, SHARE_SUFFIX);
4417
    if (access(res, R_OK)) {
4418
        snprintf(res, max_len, "%s%s", dir, BUILD_SUFFIX);
4419
        if (access(res, R_OK)) {
4420
            qemu_free(res);
4421
            res = NULL;
4422
        }
4423
    }
4424

    
4425
    return res;
4426
}
4427
#undef SHARE_SUFFIX
4428
#undef BUILD_SUFFIX
4429
#endif
4430

    
4431
char *qemu_find_file(int type, const char *name)
4432
{
4433
    int len;
4434
    const char *subdir;
4435
    char *buf;
4436

    
4437
    /* If name contains path separators then try it as a straight path.  */
4438
    if ((strchr(name, '/') || strchr(name, '\\'))
4439
        && access(name, R_OK) == 0) {
4440
        return qemu_strdup(name);
4441
    }
4442
    switch (type) {
4443
    case QEMU_FILE_TYPE_BIOS:
4444
        subdir = "";
4445
        break;
4446
    case QEMU_FILE_TYPE_KEYMAP:
4447
        subdir = "keymaps/";
4448
        break;
4449
    default:
4450
        abort();
4451
    }
4452
    len = strlen(data_dir) + strlen(name) + strlen(subdir) + 2;
4453
    buf = qemu_mallocz(len);
4454
    snprintf(buf, len, "%s/%s%s", data_dir, subdir, name);
4455
    if (access(buf, R_OK)) {
4456
        qemu_free(buf);
4457
        return NULL;
4458
    }
4459
    return buf;
4460
}
4461

    
4462
static int device_help_func(QemuOpts *opts, void *opaque)
4463
{
4464
    return qdev_device_help(opts);
4465
}
4466

    
4467
static int device_init_func(QemuOpts *opts, void *opaque)
4468
{
4469
    DeviceState *dev;
4470

    
4471
    dev = qdev_device_add(opts);
4472
    if (!dev)
4473
        return -1;
4474
    return 0;
4475
}
4476

    
4477
static int chardev_init_func(QemuOpts *opts, void *opaque)
4478
{
4479
    CharDriverState *chr;
4480

    
4481
    chr = qemu_chr_open_opts(opts, NULL);
4482
    if (!chr)
4483
        return -1;
4484
    return 0;
4485
}
4486

    
4487
static int mon_init_func(QemuOpts *opts, void *opaque)
4488
{
4489
    CharDriverState *chr;
4490
    const char *chardev;
4491
    const char *mode;
4492
    int flags;
4493

    
4494
    mode = qemu_opt_get(opts, "mode");
4495
    if (mode == NULL) {
4496
        mode = "readline";
4497
    }
4498
    if (strcmp(mode, "readline") == 0) {
4499
        flags = MONITOR_USE_READLINE;
4500
    } else if (strcmp(mode, "control") == 0) {
4501
        flags = MONITOR_USE_CONTROL;
4502
    } else {
4503
        fprintf(stderr, "unknown monitor mode \"%s\"\n", mode);
4504
        exit(1);
4505
    }
4506

    
4507
    if (qemu_opt_get_bool(opts, "default", 0))
4508
        flags |= MONITOR_IS_DEFAULT;
4509

    
4510
    chardev = qemu_opt_get(opts, "chardev");
4511
    chr = qemu_chr_find(chardev);
4512
    if (chr == NULL) {
4513
        fprintf(stderr, "chardev \"%s\" not found\n", chardev);
4514
        exit(1);
4515
    }
4516

    
4517
    monitor_init(chr, flags);
4518
    return 0;
4519
}
4520

    
4521
static void monitor_parse(const char *optarg, const char *mode)
4522
{
4523
    static int monitor_device_index = 0;
4524
    QemuOpts *opts;
4525
    const char *p;
4526
    char label[32];
4527
    int def = 0;
4528

    
4529
    if (strstart(optarg, "chardev:", &p)) {
4530
        snprintf(label, sizeof(label), "%s", p);
4531
    } else {
4532
        if (monitor_device_index) {
4533
            snprintf(label, sizeof(label), "monitor%d",
4534
                     monitor_device_index);
4535
        } else {
4536
            snprintf(label, sizeof(label), "monitor");
4537
            def = 1;
4538
        }
4539
        opts = qemu_chr_parse_compat(label, optarg);
4540
        if (!opts) {
4541
            fprintf(stderr, "parse error: %s\n", optarg);
4542
            exit(1);
4543
        }
4544
    }
4545

    
4546
    opts = qemu_opts_create(&qemu_mon_opts, label, 1);
4547
    if (!opts) {
4548
        fprintf(stderr, "duplicate chardev: %s\n", label);
4549
        exit(1);
4550
    }
4551
    qemu_opt_set(opts, "mode", mode);
4552
    qemu_opt_set(opts, "chardev", label);
4553
    if (def)
4554
        qemu_opt_set(opts, "default", "on");
4555
    monitor_device_index++;
4556
}
4557

    
4558
struct device_config {
4559
    enum {
4560
        DEV_USB,       /* -usbdevice     */
4561
        DEV_BT,        /* -bt            */
4562
        DEV_SERIAL,    /* -serial        */
4563
        DEV_PARALLEL,  /* -parallel      */
4564
        DEV_VIRTCON,   /* -virtioconsole */
4565
        DEV_DEBUGCON,  /* -debugcon */
4566
    } type;
4567
    const char *cmdline;
4568
    QTAILQ_ENTRY(device_config) next;
4569
};
4570
QTAILQ_HEAD(, device_config) device_configs = QTAILQ_HEAD_INITIALIZER(device_configs);
4571

    
4572
static void add_device_config(int type, const char *cmdline)
4573
{
4574
    struct device_config *conf;
4575

    
4576
    conf = qemu_mallocz(sizeof(*conf));
4577
    conf->type = type;
4578
    conf->cmdline = cmdline;
4579
    QTAILQ_INSERT_TAIL(&device_configs, conf, next);
4580
}
4581

    
4582
static int foreach_device_config(int type, int (*func)(const char *cmdline))
4583
{
4584
    struct device_config *conf;
4585
    int rc;
4586

    
4587
    QTAILQ_FOREACH(conf, &device_configs, next) {
4588
        if (conf->type != type)
4589
            continue;
4590
        rc = func(conf->cmdline);
4591
        if (0 != rc)
4592
            return rc;
4593
    }
4594
    return 0;
4595
}
4596

    
4597
static int serial_parse(const char *devname)
4598
{
4599
    static int index = 0;
4600
    char label[32];
4601

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

    
4619
static int parallel_parse(const char *devname)
4620
{
4621
    static int index = 0;
4622
    char label[32];
4623

    
4624
    if (strcmp(devname, "none") == 0)
4625
        return 0;
4626
    if (index == MAX_PARALLEL_PORTS) {
4627
        fprintf(stderr, "qemu: too many parallel ports\n");
4628
        exit(1);
4629
    }
4630
    snprintf(label, sizeof(label), "parallel%d", index);
4631
    parallel_hds[index] = qemu_chr_open(label, devname, NULL);
4632
    if (!parallel_hds[index]) {
4633
        fprintf(stderr, "qemu: could not open parallel device '%s': %s\n",
4634
                devname, strerror(errno));
4635
        return -1;
4636
    }
4637
    index++;
4638
    return 0;
4639
}
4640

    
4641
static int virtcon_parse(const char *devname)
4642
{
4643
    static int index = 0;
4644
    char label[32];
4645
    QemuOpts *bus_opts, *dev_opts;
4646

    
4647
    if (strcmp(devname, "none") == 0)
4648
        return 0;
4649
    if (index == MAX_VIRTIO_CONSOLES) {
4650
        fprintf(stderr, "qemu: too many virtio consoles\n");
4651
        exit(1);
4652
    }
4653

    
4654
    bus_opts = qemu_opts_create(&qemu_device_opts, NULL, 0);
4655
    qemu_opt_set(bus_opts, "driver", "virtio-serial");
4656

    
4657
    dev_opts = qemu_opts_create(&qemu_device_opts, NULL, 0);
4658
    qemu_opt_set(dev_opts, "driver", "virtconsole");
4659

    
4660
    snprintf(label, sizeof(label), "virtcon%d", index);
4661
    virtcon_hds[index] = qemu_chr_open(label, devname, NULL);
4662
    if (!virtcon_hds[index]) {
4663
        fprintf(stderr, "qemu: could not open virtio console '%s': %s\n",
4664
                devname, strerror(errno));
4665
        return -1;
4666
    }
4667
    qemu_opt_set(dev_opts, "chardev", label);
4668

    
4669
    index++;
4670
    return 0;
4671
}
4672

    
4673
static int debugcon_parse(const char *devname)
4674
{   
4675
    QemuOpts *opts;
4676

    
4677
    if (!qemu_chr_open("debugcon", devname, NULL)) {
4678
        exit(1);
4679
    }
4680
    opts = qemu_opts_create(&qemu_device_opts, "debugcon", 1);
4681
    if (!opts) {
4682
        fprintf(stderr, "qemu: already have a debugcon device\n");
4683
        exit(1);
4684
    }
4685
    qemu_opt_set(opts, "driver", "isa-debugcon");
4686
    qemu_opt_set(opts, "chardev", "debugcon");
4687
    return 0;
4688
}
4689

    
4690
static const QEMUOption *lookup_opt(int argc, char **argv,
4691
                                    const char **poptarg, int *poptind)
4692
{
4693
    const QEMUOption *popt;
4694
    int optind = *poptind;
4695
    char *r = argv[optind];
4696
    const char *optarg;
4697

    
4698
    optind++;
4699
    /* Treat --foo the same as -foo.  */
4700
    if (r[1] == '-')
4701
        r++;
4702
    popt = qemu_options;
4703
    for(;;) {
4704
        if (!popt->name) {
4705
            fprintf(stderr, "%s: invalid option -- '%s'\n",
4706
                    argv[0], r);
4707
            exit(1);
4708
        }
4709
        if (!strcmp(popt->name, r + 1))
4710
            break;
4711
        popt++;
4712
    }
4713
    if (popt->flags & HAS_ARG) {
4714
        if (optind >= argc) {
4715
            fprintf(stderr, "%s: option '%s' requires an argument\n",
4716
                    argv[0], r);
4717
            exit(1);
4718
        }
4719
        optarg = argv[optind++];
4720
    } else {
4721
        optarg = NULL;
4722
    }
4723

    
4724
    *poptarg = optarg;
4725
    *poptind = optind;
4726

    
4727
    return popt;
4728
}
4729

    
4730
int main(int argc, char **argv, char **envp)
4731
{
4732
    const char *gdbstub_dev = NULL;
4733
    uint32_t boot_devices_bitmap = 0;
4734
    int i;
4735
    int snapshot, linux_boot, net_boot;
4736
    const char *initrd_filename;
4737
    const char *kernel_filename, *kernel_cmdline;
4738
    char boot_devices[33] = "cad"; /* default to HD->floppy->CD-ROM */
4739
    DisplayState *ds;
4740
    DisplayChangeListener *dcl;
4741
    int cyls, heads, secs, translation;
4742
    QemuOpts *hda_opts = NULL, *opts;
4743
    int optind;
4744
    const char *optarg;
4745
    const char *loadvm = NULL;
4746
    QEMUMachine *machine;
4747
    const char *cpu_model;
4748
#ifndef _WIN32
4749
    int fds[2];
4750
#endif
4751
    int tb_size;
4752
    const char *pid_file = NULL;
4753
    const char *incoming = NULL;
4754
#ifndef _WIN32
4755
    int fd = 0;
4756
    struct passwd *pwd = NULL;
4757
    const char *chroot_dir = NULL;
4758
    const char *run_as = NULL;
4759
#endif
4760
    CPUState *env;
4761
    int show_vnc_port = 0;
4762
    int defconfig = 1;
4763

    
4764
    init_clocks();
4765

    
4766
    qemu_errors_to_file(stderr);
4767
    qemu_cache_utils_init(envp);
4768

    
4769
    QLIST_INIT (&vm_change_state_head);
4770
#ifndef _WIN32
4771
    {
4772
        struct sigaction act;
4773
        sigfillset(&act.sa_mask);
4774
        act.sa_flags = 0;
4775
        act.sa_handler = SIG_IGN;
4776
        sigaction(SIGPIPE, &act, NULL);
4777
    }
4778
#else
4779
    SetConsoleCtrlHandler(qemu_ctrl_handler, TRUE);
4780
    /* Note: cpu_interrupt() is currently not SMP safe, so we force
4781
       QEMU to run on a single CPU */
4782
    {
4783
        HANDLE h;
4784
        DWORD mask, smask;
4785
        int i;
4786
        h = GetCurrentProcess();
4787
        if (GetProcessAffinityMask(h, &mask, &smask)) {
4788
            for(i = 0; i < 32; i++) {
4789
                if (mask & (1 << i))
4790
                    break;
4791
            }
4792
            if (i != 32) {
4793
                mask = 1 << i;
4794
                SetProcessAffinityMask(h, mask);
4795
            }
4796
        }
4797
    }
4798
#endif
4799

    
4800
    module_call_init(MODULE_INIT_MACHINE);
4801
    machine = find_default_machine();
4802
    cpu_model = NULL;
4803
    initrd_filename = NULL;
4804
    ram_size = 0;
4805
    snapshot = 0;
4806
    kernel_filename = NULL;
4807
    kernel_cmdline = "";
4808
    cyls = heads = secs = 0;
4809
    translation = BIOS_ATA_TRANSLATION_AUTO;
4810

    
4811
    for (i = 0; i < MAX_NODES; i++) {
4812
        node_mem[i] = 0;
4813
        node_cpumask[i] = 0;
4814
    }
4815

    
4816
    nb_numa_nodes = 0;
4817
    nb_nics = 0;
4818

    
4819
    tb_size = 0;
4820
    autostart= 1;
4821

    
4822
    /* first pass of option parsing */
4823
    optind = 1;
4824
    while (optind < argc) {
4825
        if (argv[optind][0] != '-') {
4826
            /* disk image */
4827
            optind++;
4828
            continue;
4829
        } else {
4830
            const QEMUOption *popt;
4831

    
4832
            popt = lookup_opt(argc, argv, &optarg, &optind);
4833
            switch (popt->index) {
4834
            case QEMU_OPTION_nodefconfig:
4835
                defconfig=0;
4836
                break;
4837
            }
4838
        }
4839
    }
4840

    
4841
    if (defconfig) {
4842
        FILE *fp;
4843
        fp = fopen(CONFIG_QEMU_CONFDIR "/qemu.conf", "r");
4844
        if (fp) {
4845
            if (qemu_config_parse(fp) != 0) {
4846
                exit(1);
4847
            }
4848
            fclose(fp);
4849
        }
4850

    
4851
        fp = fopen(CONFIG_QEMU_CONFDIR "/target-" TARGET_ARCH ".conf", "r");
4852
        if (fp) {
4853
            if (qemu_config_parse(fp) != 0) {
4854
                exit(1);
4855
            }
4856
            fclose(fp);
4857
        }
4858
    }
4859

    
4860
    /* second pass of option parsing */
4861
    optind = 1;
4862
    for(;;) {
4863
        if (optind >= argc)
4864
            break;
4865
        if (argv[optind][0] != '-') {
4866
            hda_opts = drive_add(argv[optind++], HD_ALIAS, 0);
4867
        } else {
4868
            const QEMUOption *popt;
4869

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

    
5028
                    if (!strchr(optarg, '=')) {
5029
                        legacy = 1;
5030
                        pstrcpy(buf, sizeof(buf), optarg);
5031
                    } else if (check_params(buf, sizeof(buf), params, optarg) < 0) {
5032
                        fprintf(stderr,
5033
                                "qemu: unknown boot parameter '%s' in '%s'\n",
5034
                                buf, optarg);
5035
                        exit(1);
5036
                    }
5037

    
5038
                    if (legacy ||
5039
                        get_param_value(buf, sizeof(buf), "order", optarg)) {
5040
                        boot_devices_bitmap = parse_bootdevices(buf);
5041
                        pstrcpy(boot_devices, sizeof(boot_devices), buf);
5042
                    }
5043
                    if (!legacy) {
5044
                        if (get_param_value(buf, sizeof(buf),
5045
                                            "once", optarg)) {
5046
                            boot_devices_bitmap |= parse_bootdevices(buf);
5047
                            standard_boot_devices = qemu_strdup(boot_devices);
5048
                            pstrcpy(boot_devices, sizeof(boot_devices), buf);
5049
                            qemu_register_reset(restore_boot_devices,
5050
                                                standard_boot_devices);
5051
                        }
5052
                        if (get_param_value(buf, sizeof(buf),
5053
                                            "menu", optarg)) {
5054
                            if (!strcmp(buf, "on")) {
5055
                                boot_menu = 1;
5056
                            } else if (!strcmp(buf, "off")) {
5057
                                boot_menu = 0;
5058
                            } else {
5059
                                fprintf(stderr,
5060
                                        "qemu: invalid option value '%s'\n",
5061
                                        buf);
5062
                                exit(1);
5063
                            }
5064
                        }
5065
                    }
5066
                }
5067
                break;
5068
            case QEMU_OPTION_fda:
5069
            case QEMU_OPTION_fdb:
5070
                drive_add(optarg, FD_ALIAS, popt->index - QEMU_OPTION_fda);
5071
                break;
5072
#ifdef TARGET_I386
5073
            case QEMU_OPTION_no_fd_bootchk:
5074
                fd_bootchk = 0;
5075
                break;
5076
#endif
5077
            case QEMU_OPTION_netdev:
5078
                if (net_client_parse(&qemu_netdev_opts, optarg) == -1) {
5079
                    exit(1);
5080
                }
5081
                break;
5082
            case QEMU_OPTION_net:
5083
                if (net_client_parse(&qemu_net_opts, optarg) == -1) {
5084
                    exit(1);
5085
                }
5086
                break;
5087
#ifdef CONFIG_SLIRP
5088
            case QEMU_OPTION_tftp:
5089
                legacy_tftp_prefix = optarg;
5090
                break;
5091
            case QEMU_OPTION_bootp:
5092
                legacy_bootp_filename = optarg;
5093
                break;
5094
#ifndef _WIN32
5095
            case QEMU_OPTION_smb:
5096
                if (net_slirp_smb(optarg) < 0)
5097
                    exit(1);
5098
                break;
5099
#endif
5100
            case QEMU_OPTION_redir:
5101
                if (net_slirp_redir(optarg) < 0)
5102
                    exit(1);
5103
                break;
5104
#endif
5105
            case QEMU_OPTION_bt:
5106
                add_device_config(DEV_BT, optarg);
5107
                break;
5108
#ifdef HAS_AUDIO
5109
            case QEMU_OPTION_audio_help:
5110
                AUD_help ();
5111
                exit (0);
5112
                break;
5113
            case QEMU_OPTION_soundhw:
5114
                select_soundhw (optarg);
5115
                break;
5116
#endif
5117
            case QEMU_OPTION_h:
5118
                help(0);
5119
                break;
5120
            case QEMU_OPTION_version:
5121
                version();
5122
                exit(0);
5123
                break;
5124
            case QEMU_OPTION_m: {
5125
                uint64_t value;
5126
                char *ptr;
5127

    
5128
                value = strtoul(optarg, &ptr, 10);
5129
                switch (*ptr) {
5130
                case 0: case 'M': case 'm':
5131
                    value <<= 20;
5132
                    break;
5133
                case 'G': case 'g':
5134
                    value <<= 30;
5135
                    break;
5136
                default:
5137
                    fprintf(stderr, "qemu: invalid ram size: %s\n", optarg);
5138
                    exit(1);
5139
                }
5140

    
5141
                /* On 32-bit hosts, QEMU is limited by virtual address space */
5142
                if (value > (2047 << 20) && HOST_LONG_BITS == 32) {
5143
                    fprintf(stderr, "qemu: at most 2047 MB RAM can be simulated\n");
5144
                    exit(1);
5145
                }
5146
                if (value != (uint64_t)(ram_addr_t)value) {
5147
                    fprintf(stderr, "qemu: ram size too large\n");
5148
                    exit(1);
5149
                }
5150
                ram_size = value;
5151
                break;
5152
            }
5153
            case QEMU_OPTION_d:
5154
                {
5155
                    int mask;
5156
                    const CPULogItem *item;
5157

    
5158
                    mask = cpu_str_to_log_mask(optarg);
5159
                    if (!mask) {
5160
                        printf("Log items (comma separated):\n");
5161
                    for(item = cpu_log_items; item->mask != 0; item++) {
5162
                        printf("%-10s %s\n", item->name, item->help);
5163
                    }
5164
                    exit(1);
5165
                    }
5166
                    cpu_set_log(mask);
5167
                }
5168
                break;
5169
            case QEMU_OPTION_s:
5170
                gdbstub_dev = "tcp::" DEFAULT_GDBSTUB_PORT;
5171
                break;
5172
            case QEMU_OPTION_gdb:
5173
                gdbstub_dev = optarg;
5174
                break;
5175
            case QEMU_OPTION_L:
5176
                data_dir = optarg;
5177
                break;
5178
            case QEMU_OPTION_bios:
5179
                bios_name = optarg;
5180
                break;
5181
            case QEMU_OPTION_singlestep:
5182
                singlestep = 1;
5183
                break;
5184
            case QEMU_OPTION_S:
5185
                autostart = 0;
5186
                break;
5187
            case QEMU_OPTION_k:
5188
                keyboard_layout = optarg;
5189
                break;
5190
            case QEMU_OPTION_localtime:
5191
                rtc_utc = 0;
5192
                break;
5193
            case QEMU_OPTION_vga:
5194
                select_vgahw (optarg);
5195
                break;
5196
#if defined(TARGET_PPC) || defined(TARGET_SPARC)
5197
            case QEMU_OPTION_g:
5198
                {
5199
                    const char *p;
5200
                    int w, h, depth;
5201
                    p = optarg;
5202
                    w = strtol(p, (char **)&p, 10);
5203
                    if (w <= 0) {
5204
                    graphic_error:
5205
                        fprintf(stderr, "qemu: invalid resolution or depth\n");
5206
                        exit(1);
5207
                    }
5208
                    if (*p != 'x')
5209
                        goto graphic_error;
5210
                    p++;
5211
                    h = strtol(p, (char **)&p, 10);
5212
                    if (h <= 0)
5213
                        goto graphic_error;
5214
                    if (*p == 'x') {
5215
                        p++;
5216
                        depth = strtol(p, (char **)&p, 10);
5217
                        if (depth != 8 && depth != 15 && depth != 16 &&
5218
                            depth != 24 && depth != 32)
5219
                            goto graphic_error;
5220
                    } else if (*p == '\0') {
5221
                        depth = graphic_depth;
5222
                    } else {
5223
                        goto graphic_error;
5224
                    }
5225

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

    
5547
    /* If no data_dir is specified then try to find it relative to the
5548
       executable path.  */
5549
    if (!data_dir) {
5550
        data_dir = find_datadir(argv[0]);
5551
    }
5552
    /* If all else fails use the install patch specified when building.  */
5553
    if (!data_dir) {
5554
        data_dir = CONFIG_QEMU_SHAREDIR;
5555
    }
5556

    
5557
    /*
5558
     * Default to max_cpus = smp_cpus, in case the user doesn't
5559
     * specify a max_cpus value.
5560
     */
5561
    if (!max_cpus)
5562
        max_cpus = smp_cpus;
5563

    
5564
    machine->max_cpus = machine->max_cpus ?: 1; /* Default to UP */
5565
    if (smp_cpus > machine->max_cpus) {
5566
        fprintf(stderr, "Number of SMP cpus requested (%d), exceeds max cpus "
5567
                "supported by machine `%s' (%d)\n", smp_cpus,  machine->name,
5568
                machine->max_cpus);
5569
        exit(1);
5570
    }
5571

    
5572
    qemu_opts_foreach(&qemu_device_opts, default_driver_check, NULL, 0);
5573
    qemu_opts_foreach(&qemu_global_opts, default_driver_check, NULL, 0);
5574

    
5575
    if (machine->no_serial) {
5576
        default_serial = 0;
5577
    }
5578
    if (machine->no_parallel) {
5579
        default_parallel = 0;
5580
    }
5581
    if (!machine->use_virtcon) {
5582
        default_virtcon = 0;
5583
    }
5584
    if (machine->no_vga) {
5585
        default_vga = 0;
5586
    }
5587
    if (machine->no_floppy) {
5588
        default_floppy = 0;
5589
    }
5590
    if (machine->no_cdrom) {
5591
        default_cdrom = 0;
5592
    }
5593
    if (machine->no_sdcard) {
5594
        default_sdcard = 0;
5595
    }
5596

    
5597
    if (display_type == DT_NOGRAPHIC) {
5598
        if (default_parallel)
5599
            add_device_config(DEV_PARALLEL, "null");
5600
        if (default_serial && default_monitor) {
5601
            add_device_config(DEV_SERIAL, "mon:stdio");
5602
        } else if (default_virtcon && default_monitor) {
5603
            add_device_config(DEV_VIRTCON, "mon:stdio");
5604
        } else {
5605
            if (default_serial)
5606
                add_device_config(DEV_SERIAL, "stdio");
5607
            if (default_virtcon)
5608
                add_device_config(DEV_VIRTCON, "stdio");
5609
            if (default_monitor)
5610
                monitor_parse("stdio", "readline");
5611
        }
5612
    } else {
5613
        if (default_serial)
5614
            add_device_config(DEV_SERIAL, "vc:80Cx24C");
5615
        if (default_parallel)
5616
            add_device_config(DEV_PARALLEL, "vc:80Cx24C");
5617
        if (default_monitor)
5618
            monitor_parse("vc:80Cx24C", "readline");
5619
        if (default_virtcon)
5620
            add_device_config(DEV_VIRTCON, "vc:80Cx24C");
5621
    }
5622
    if (default_vga)
5623
        vga_interface_type = VGA_CIRRUS;
5624

    
5625
    if (qemu_opts_foreach(&qemu_chardev_opts, chardev_init_func, NULL, 1) != 0)
5626
        exit(1);
5627

    
5628
#ifndef _WIN32
5629
    if (daemonize) {
5630
        pid_t pid;
5631

    
5632
        if (pipe(fds) == -1)
5633
            exit(1);
5634

    
5635
        pid = fork();
5636
        if (pid > 0) {
5637
            uint8_t status;
5638
            ssize_t len;
5639

    
5640
            close(fds[1]);
5641

    
5642
        again:
5643
            len = read(fds[0], &status, 1);
5644
            if (len == -1 && (errno == EINTR))
5645
                goto again;
5646

    
5647
            if (len != 1)
5648
                exit(1);
5649
            else if (status == 1) {
5650
                fprintf(stderr, "Could not acquire pidfile: %s\n", strerror(errno));
5651
                exit(1);
5652
            } else
5653
                exit(0);
5654
        } else if (pid < 0)
5655
            exit(1);
5656

    
5657
        close(fds[0]);
5658
        qemu_set_cloexec(fds[1]);
5659

    
5660
        setsid();
5661

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

    
5668
        umask(027);
5669

    
5670
        signal(SIGTSTP, SIG_IGN);
5671
        signal(SIGTTOU, SIG_IGN);
5672
        signal(SIGTTIN, SIG_IGN);
5673
    }
5674
#endif
5675

    
5676
    if (pid_file && qemu_create_pidfile(pid_file) != 0) {
5677
#ifndef _WIN32
5678
        if (daemonize) {
5679
            uint8_t status = 1;
5680
            if (write(fds[1], &status, 1) != 1) {
5681
                perror("daemonize. Writing to pipe\n");
5682
            }
5683
        } else
5684
#endif
5685
            fprintf(stderr, "Could not acquire pid file: %s\n", strerror(errno));
5686
        exit(1);
5687
    }
5688

    
5689
    if (kvm_enabled()) {
5690
        int ret;
5691

    
5692
        ret = kvm_init(smp_cpus);
5693
        if (ret < 0) {
5694
            fprintf(stderr, "failed to initialize KVM\n");
5695
            exit(1);
5696
        }
5697
    }
5698

    
5699
    if (qemu_init_main_loop()) {
5700
        fprintf(stderr, "qemu_init_main_loop failed\n");
5701
        exit(1);
5702
    }
5703
    linux_boot = (kernel_filename != NULL);
5704

    
5705
    if (!linux_boot && *kernel_cmdline != '\0') {
5706
        fprintf(stderr, "-append only allowed with -kernel option\n");
5707
        exit(1);
5708
    }
5709

    
5710
    if (!linux_boot && initrd_filename != NULL) {
5711
        fprintf(stderr, "-initrd only allowed with -kernel option\n");
5712
        exit(1);
5713
    }
5714

    
5715
#ifndef _WIN32
5716
    /* Win32 doesn't support line-buffering and requires size >= 2 */
5717
    setvbuf(stdout, NULL, _IOLBF, 0);
5718
#endif
5719

    
5720
    if (init_timer_alarm() < 0) {
5721
        fprintf(stderr, "could not initialize alarm timer\n");
5722
        exit(1);
5723
    }
5724
    if (use_icount && icount_time_shift < 0) {
5725
        use_icount = 2;
5726
        /* 125MIPS seems a reasonable initial guess at the guest speed.
5727
           It will be corrected fairly quickly anyway.  */
5728
        icount_time_shift = 3;
5729
        init_icount_adjust();
5730
    }
5731

    
5732
#ifdef _WIN32
5733
    socket_init();
5734
#endif
5735

    
5736
    if (net_init_clients() < 0) {
5737
        exit(1);
5738
    }
5739

    
5740
    net_boot = (boot_devices_bitmap >> ('n' - 'a')) & 0xF;
5741
    net_set_boot_mask(net_boot);
5742

    
5743
    /* init the bluetooth world */
5744
    if (foreach_device_config(DEV_BT, bt_parse))
5745
        exit(1);
5746

    
5747
    /* init the memory */
5748
    if (ram_size == 0)
5749
        ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
5750

    
5751
    /* init the dynamic translator */
5752
    cpu_exec_init_all(tb_size * 1024 * 1024);
5753

    
5754
    bdrv_init_with_whitelist();
5755

    
5756
    blk_mig_init();
5757

    
5758
    if (default_cdrom) {
5759
        /* we always create the cdrom drive, even if no disk is there */
5760
        drive_add(NULL, CDROM_ALIAS);
5761
    }
5762

    
5763
    if (default_floppy) {
5764
        /* we always create at least one floppy */
5765
        drive_add(NULL, FD_ALIAS, 0);
5766
    }
5767

    
5768
    if (default_sdcard) {
5769
        /* we always create one sd slot, even if no card is in it */
5770
        drive_add(NULL, SD_ALIAS);
5771
    }
5772

    
5773
    /* open the virtual block devices */
5774
    if (snapshot)
5775
        qemu_opts_foreach(&qemu_drive_opts, drive_enable_snapshot, NULL, 0);
5776
    if (qemu_opts_foreach(&qemu_drive_opts, drive_init_func, machine, 1) != 0)
5777
        exit(1);
5778

    
5779
    vmstate_register(0, &vmstate_timers ,&timers_state);
5780
    register_savevm_live("ram", 0, 3, NULL, ram_save_live, NULL, 
5781
                         ram_load, NULL);
5782

    
5783
    if (nb_numa_nodes > 0) {
5784
        int i;
5785

    
5786
        if (nb_numa_nodes > smp_cpus) {
5787
            nb_numa_nodes = smp_cpus;
5788
        }
5789

    
5790
        /* If no memory size if given for any node, assume the default case
5791
         * and distribute the available memory equally across all nodes
5792
         */
5793
        for (i = 0; i < nb_numa_nodes; i++) {
5794
            if (node_mem[i] != 0)
5795
                break;
5796
        }
5797
        if (i == nb_numa_nodes) {
5798
            uint64_t usedmem = 0;
5799

    
5800
            /* On Linux, the each node's border has to be 8MB aligned,
5801
             * the final node gets the rest.
5802
             */
5803
            for (i = 0; i < nb_numa_nodes - 1; i++) {
5804
                node_mem[i] = (ram_size / nb_numa_nodes) & ~((1 << 23UL) - 1);
5805
                usedmem += node_mem[i];
5806
            }
5807
            node_mem[i] = ram_size - usedmem;
5808
        }
5809

    
5810
        for (i = 0; i < nb_numa_nodes; i++) {
5811
            if (node_cpumask[i] != 0)
5812
                break;
5813
        }
5814
        /* assigning the VCPUs round-robin is easier to implement, guest OSes
5815
         * must cope with this anyway, because there are BIOSes out there in
5816
         * real machines which also use this scheme.
5817
         */
5818
        if (i == nb_numa_nodes) {
5819
            for (i = 0; i < smp_cpus; i++) {
5820
                node_cpumask[i % nb_numa_nodes] |= 1 << i;
5821
            }
5822
        }
5823
    }
5824

    
5825
    if (foreach_device_config(DEV_SERIAL, serial_parse) < 0)
5826
        exit(1);
5827
    if (foreach_device_config(DEV_PARALLEL, parallel_parse) < 0)
5828
        exit(1);
5829
    if (foreach_device_config(DEV_VIRTCON, virtcon_parse) < 0)
5830
        exit(1);
5831
    if (foreach_device_config(DEV_DEBUGCON, debugcon_parse) < 0)
5832
        exit(1);
5833

    
5834
    module_call_init(MODULE_INIT_DEVICE);
5835

    
5836
    if (qemu_opts_foreach(&qemu_device_opts, device_help_func, NULL, 0) != 0)
5837
        exit(0);
5838

    
5839
    if (watchdog) {
5840
        i = select_watchdog(watchdog);
5841
        if (i > 0)
5842
            exit (i == 1 ? 1 : 0);
5843
    }
5844

    
5845
    if (machine->compat_props) {
5846
        qdev_prop_register_global_list(machine->compat_props);
5847
    }
5848
    qemu_add_globals();
5849

    
5850
    machine->init(ram_size, boot_devices,
5851
                  kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
5852

    
5853

    
5854
#ifndef _WIN32
5855
    /* must be after terminal init, SDL library changes signal handlers */
5856
    sighandler_setup();
5857
#endif
5858

    
5859
    for (env = first_cpu; env != NULL; env = env->next_cpu) {
5860
        for (i = 0; i < nb_numa_nodes; i++) {
5861
            if (node_cpumask[i] & (1 << env->cpu_index)) {
5862
                env->numa_node = i;
5863
            }
5864
        }
5865
    }
5866

    
5867
    current_machine = machine;
5868

    
5869
    /* init USB devices */
5870
    if (usb_enabled) {
5871
        if (foreach_device_config(DEV_USB, usb_parse) < 0)
5872
            exit(1);
5873
    }
5874

    
5875
    /* init generic devices */
5876
    if (qemu_opts_foreach(&qemu_device_opts, device_init_func, NULL, 1) != 0)
5877
        exit(1);
5878

    
5879
    if (!display_state)
5880
        dumb_display_init();
5881
    /* just use the first displaystate for the moment */
5882
    ds = display_state;
5883

    
5884
    if (display_type == DT_DEFAULT) {
5885
#if defined(CONFIG_SDL) || defined(CONFIG_COCOA)
5886
        display_type = DT_SDL;
5887
#else
5888
        display_type = DT_VNC;
5889
        vnc_display = "localhost:0,to=99";
5890
        show_vnc_port = 1;
5891
#endif
5892
    }
5893
        
5894

    
5895
    switch (display_type) {
5896
    case DT_NOGRAPHIC:
5897
        break;
5898
#if defined(CONFIG_CURSES)
5899
    case DT_CURSES:
5900
        curses_display_init(ds, full_screen);
5901
        break;
5902
#endif
5903
#if defined(CONFIG_SDL)
5904
    case DT_SDL:
5905
        sdl_display_init(ds, full_screen, no_frame);
5906
        break;
5907
#elif defined(CONFIG_COCOA)
5908
    case DT_SDL:
5909
        cocoa_display_init(ds, full_screen);
5910
        break;
5911
#endif
5912
    case DT_VNC:
5913
        vnc_display_init(ds);
5914
        if (vnc_display_open(ds, vnc_display) < 0)
5915
            exit(1);
5916

    
5917
        if (show_vnc_port) {
5918
            printf("VNC server running on `%s'\n", vnc_display_local_addr(ds));
5919
        }
5920
        break;
5921
    default:
5922
        break;
5923
    }
5924
    dpy_resize(ds);
5925

    
5926
    dcl = ds->listeners;
5927
    while (dcl != NULL) {
5928
        if (dcl->dpy_refresh != NULL) {
5929
            ds->gui_timer = qemu_new_timer(rt_clock, gui_update, ds);
5930
            qemu_mod_timer(ds->gui_timer, qemu_get_clock(rt_clock));
5931
        }
5932
        dcl = dcl->next;
5933
    }
5934

    
5935
    if (display_type == DT_NOGRAPHIC || display_type == DT_VNC) {
5936
        nographic_timer = qemu_new_timer(rt_clock, nographic_update, NULL);
5937
        qemu_mod_timer(nographic_timer, qemu_get_clock(rt_clock));
5938
    }
5939

    
5940
    text_consoles_set_display(display_state);
5941

    
5942
    if (qemu_opts_foreach(&qemu_mon_opts, mon_init_func, NULL, 1) != 0)
5943
        exit(1);
5944

    
5945
    if (gdbstub_dev && gdbserver_start(gdbstub_dev) < 0) {
5946
        fprintf(stderr, "qemu: could not open gdbserver on device '%s'\n",
5947
                gdbstub_dev);
5948
        exit(1);
5949
    }
5950

    
5951
    qdev_machine_creation_done();
5952

    
5953
    if (rom_load_all() != 0) {
5954
        fprintf(stderr, "rom loading failed\n");
5955
        exit(1);
5956
    }
5957

    
5958
    qemu_system_reset();
5959
    if (loadvm) {
5960
        if (load_vmstate(cur_mon, loadvm) < 0) {
5961
            autostart = 0;
5962
        }
5963
    }
5964

    
5965
    if (incoming) {
5966
        qemu_start_incoming_migration(incoming);
5967
    } else if (autostart) {
5968
        vm_start();
5969
    }
5970

    
5971
#ifndef _WIN32
5972
    if (daemonize) {
5973
        uint8_t status = 0;
5974
        ssize_t len;
5975

    
5976
    again1:
5977
        len = write(fds[1], &status, 1);
5978
        if (len == -1 && (errno == EINTR))
5979
            goto again1;
5980

    
5981
        if (len != 1)
5982
            exit(1);
5983

    
5984
        if (chdir("/")) {
5985
            perror("not able to chdir to /");
5986
            exit(1);
5987
        }
5988
        TFR(fd = qemu_open("/dev/null", O_RDWR));
5989
        if (fd == -1)
5990
            exit(1);
5991
    }
5992

    
5993
    if (run_as) {
5994
        pwd = getpwnam(run_as);
5995
        if (!pwd) {
5996
            fprintf(stderr, "User \"%s\" doesn't exist\n", run_as);
5997
            exit(1);
5998
        }
5999
    }
6000

    
6001
    if (chroot_dir) {
6002
        if (chroot(chroot_dir) < 0) {
6003
            fprintf(stderr, "chroot failed\n");
6004
            exit(1);
6005
        }
6006
        if (chdir("/")) {
6007
            perror("not able to chdir to /");
6008
            exit(1);
6009
        }
6010
    }
6011

    
6012
    if (run_as) {
6013
        if (setgid(pwd->pw_gid) < 0) {
6014
            fprintf(stderr, "Failed to setgid(%d)\n", pwd->pw_gid);
6015
            exit(1);
6016
        }
6017
        if (setuid(pwd->pw_uid) < 0) {
6018
            fprintf(stderr, "Failed to setuid(%d)\n", pwd->pw_uid);
6019
            exit(1);
6020
        }
6021
        if (setuid(0) != -1) {
6022
            fprintf(stderr, "Dropping privileges failed\n");
6023
            exit(1);
6024
        }
6025
    }
6026

    
6027
    if (daemonize) {
6028
        dup2(fd, 0);
6029
        dup2(fd, 1);
6030
        dup2(fd, 2);
6031

    
6032
        close(fd);
6033
    }
6034
#endif
6035

    
6036
    main_loop();
6037
    quit_timers();
6038
    net_cleanup();
6039

    
6040
    return 0;
6041
}