Statistics
| Branch: | Revision:

root / vl.c @ d9c32310

History | View | Annotate | Download (156 kB)

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

    
32
/* Needed early for CONFIG_BSD etc. */
33
#include "config-host.h"
34
/* Needed early to override system queue definitions on BSD */
35
#include "sys-queue.h"
36

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

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

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

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

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

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

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

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

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

    
162
#include "disas.h"
163

    
164
#include "exec-all.h"
165

    
166
#include "qemu_socket.h"
167

    
168
#include "slirp/libslirp.h"
169

    
170
//#define DEBUG_NET
171
//#define DEBUG_SLIRP
172

    
173
#define DEFAULT_RAM_SIZE 128
174

    
175
static const char *data_dir;
176
const char *bios_name = NULL;
177
/* Note: drives_table[MAX_DRIVES] is a dummy block driver if none available
178
   to store the VM snapshots */
179
struct drivelist drives = TAILQ_HEAD_INITIALIZER(drives);
180
struct driveoptlist driveopts = TAILQ_HEAD_INITIALIZER(driveopts);
181
enum vga_retrace_method vga_retrace_method = VGA_RETRACE_DUMB;
182
static DisplayState *display_state;
183
DisplayType display_type = DT_DEFAULT;
184
const char* keyboard_layout = NULL;
185
int64_t ticks_per_sec;
186
ram_addr_t ram_size;
187
int nb_nics;
188
NICInfo nd_table[MAX_NICS];
189
int vm_running;
190
int autostart;
191
static int rtc_utc = 1;
192
static int rtc_date_offset = -1; /* -1 means no change */
193
int cirrus_vga_enabled = 1;
194
int std_vga_enabled = 0;
195
int vmsvga_enabled = 0;
196
int xenfb_enabled = 0;
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
const char *vnc_display;
223
int acpi_enabled = 1;
224
int no_hpet = 0;
225
int virtio_balloon = 1;
226
const char *virtio_balloon_devaddr;
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
#ifndef _WIN32
233
int daemonize = 0;
234
#endif
235
WatchdogTimerModel *watchdog = NULL;
236
int watchdog_action = WDT_RESET;
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
#if defined(TARGET_SPARC) || defined(TARGET_PPC)
246
unsigned int nb_prom_envs = 0;
247
const char *prom_envs[MAX_PROM_ENVS];
248
#endif
249
int boot_menu;
250

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

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

    
268
uint8_t qemu_uuid[16];
269

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

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

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

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

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

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

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

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

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

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

    
340
/***********************************************************/
341
/* keyboard/mouse */
342

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

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

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

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

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

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

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

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

    
380
    return s;
381
}
382

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

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

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

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

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

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

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

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

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

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

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

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

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

    
457
    return qemu_put_mouse_event_current->qemu_put_mouse_event_absolute;
458
}
459

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

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

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

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

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

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

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

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

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

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

    
530
#define QEMU_TIMER_BASE 1000000000LL
531

    
532
#ifdef WIN32
533

    
534
static int64_t clock_freq;
535

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

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

    
555
#else
556

    
557
static int use_rt_clock;
558

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

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

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

    
607
/***********************************************************/
608
/* guest cycle counter */
609

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

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

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

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

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

    
669
/***********************************************************/
670
/* timers */
671

    
672
#define QEMU_TIMER_REALTIME 0
673
#define QEMU_TIMER_VIRTUAL  1
674

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

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

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

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

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

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

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

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

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

    
717
static struct qemu_alarm_timer *alarm_timer;
718

    
719
#ifdef _WIN32
720

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

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

    
730
#else
731

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

    
735
#ifdef __linux__
736

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

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

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

    
747
#endif /* __linux__ */
748

    
749
#endif /* _WIN32 */
750

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

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

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

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

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

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

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

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

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

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

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

    
859
    arg = strdup(opt);
860

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

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

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

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

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

    
888
    free(arg);
889

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

    
900
QEMUClock *rt_clock;
901
QEMUClock *vm_clock;
902

    
903
static QEMUTimer *active_timers[2];
904

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

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

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

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

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

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

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

    
955
    qemu_del_timer(ts);
956

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
1091
static void qemu_event_increment(void);
1092

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

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

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

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

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

    
1170
    return delta;
1171
}
1172

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

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

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

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

    
1194
    return delta;
1195
}
1196
#endif
1197

    
1198
#ifndef _WIN32
1199

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

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

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

    
1212
    return 0;
1213
}
1214

    
1215
#if defined(__linux__)
1216

    
1217
#define RTC_FREQ 1024
1218

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

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

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

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

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

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

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

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

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

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

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

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

    
1279
    close(fd);
1280
}
1281

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

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

    
1304
    enable_sigio_timer(rtc_fd);
1305

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

    
1308
    return 0;
1309
}
1310

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

    
1315
    close(rtc_fd);
1316
}
1317

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

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

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

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

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

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

    
1345
        return -1;
1346
    }
1347

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

    
1350
    return 0;
1351
}
1352

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

    
1357
    timer_delete(host_timer);
1358
}
1359

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

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

    
1371
    nearest_delta_us = qemu_next_deadline_dyntick();
1372

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

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

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

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

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

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

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

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

    
1419
    return 0;
1420
}
1421

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

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

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

    
1432

    
1433
#ifdef _WIN32
1434

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

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

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

    
1447
    timeBeginPeriod(data->period);
1448

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

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

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

    
1467
    return 0;
1468
}
1469

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

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

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

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

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

    
1490
    timeKillEvent(data->timerId);
1491

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

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

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

    
1506
#endif /* _WIN32 */
1507

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

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

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

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

    
1526
    alarm_timer = t;
1527

    
1528
    return 0;
1529

    
1530
fail:
1531
    return err;
1532
}
1533

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
1679
    return 0;
1680
}
1681

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

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

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

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

    
1704
    hci_table[nb_hcis++] = hci;
1705

    
1706
    return 0;
1707
}
1708

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

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

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

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

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

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

    
1738
    vlan = qemu_find_bt_vlan(vlan_id);
1739

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

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

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

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

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

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

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

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

    
1790
/***********************************************************/
1791
/* QEMU Block devices */
1792

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

    
1800
static QemuOptsList drive_opt_list = {
1801
    .name = "drive",
1802
    .head = TAILQ_HEAD_INITIALIZER(drive_opt_list.head),
1803
    .desc = {
1804
        {
1805
            .name = "bus",
1806
            .type = QEMU_OPT_NUMBER,
1807
            .help = "bus number",
1808
        },{
1809
            .name = "unit",
1810
            .type = QEMU_OPT_NUMBER,
1811
            .help = "unit number (i.e. lun for scsi)",
1812
        },{
1813
            .name = "if",
1814
            .type = QEMU_OPT_STRING,
1815
            .help = "interface (ide, scsi, sd, mtd, floppy, pflash, virtio)",
1816
        },{
1817
            .name = "index",
1818
            .type = QEMU_OPT_NUMBER,
1819
        },{
1820
            .name = "cyls",
1821
            .type = QEMU_OPT_NUMBER,
1822
            .help = "number of cylinders (ide disk geometry)",
1823
        },{
1824
            .name = "heads",
1825
            .type = QEMU_OPT_NUMBER,
1826
            .help = "number of heads (ide disk geometry)",
1827
        },{
1828
            .name = "secs",
1829
            .type = QEMU_OPT_NUMBER,
1830
            .help = "number of sectors (ide disk geometry)",
1831
        },{
1832
            .name = "trans",
1833
            .type = QEMU_OPT_STRING,
1834
            .help = "chs translation (auto, lba. none)",
1835
        },{
1836
            .name = "media",
1837
            .type = QEMU_OPT_STRING,
1838
            .help = "media type (disk, cdrom)",
1839
        },{
1840
            .name = "snapshot",
1841
            .type = QEMU_OPT_BOOL,
1842
        },{
1843
            .name = "file",
1844
            .type = QEMU_OPT_STRING,
1845
            .help = "disk image",
1846
        },{
1847
            .name = "cache",
1848
            .type = QEMU_OPT_STRING,
1849
            .help = "host cache usage (none, writeback, writethrough)",
1850
        },{
1851
            .name = "format",
1852
            .type = QEMU_OPT_STRING,
1853
            .help = "disk format (raw, qcow2, ...)",
1854
        },{
1855
            .name = "serial",
1856
            .type = QEMU_OPT_STRING,
1857
        },{
1858
            .name = "werror",
1859
            .type = QEMU_OPT_STRING,
1860
        },{
1861
            .name = "addr",
1862
            .type = QEMU_OPT_STRING,
1863
            .help = "pci address (virtio only)",
1864
        },
1865
        { /* end if list */ }
1866
    },
1867
};
1868

    
1869
QemuOpts *drive_add(const char *file, const char *fmt, ...)
1870
{
1871
    va_list ap;
1872
    char optstr[1024];
1873
    QemuOpts *opts;
1874

    
1875
    va_start(ap, fmt);
1876
    vsnprintf(optstr, sizeof(optstr), fmt, ap);
1877
    va_end(ap);
1878

    
1879
    opts = qemu_opts_parse(&drive_opt_list, optstr, NULL);
1880
    if (!opts) {
1881
        fprintf(stderr, "%s: huh? duplicate? (%s)\n",
1882
                __FUNCTION__, optstr);
1883
        return NULL;
1884
    }
1885
    if (file)
1886
        qemu_opt_set(opts, "file", file);
1887
    return opts;
1888
}
1889

    
1890
DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit)
1891
{
1892
    DriveInfo *dinfo;
1893

    
1894
    /* seek interface, bus and unit */
1895

    
1896
    TAILQ_FOREACH(dinfo, &drives, next) {
1897
        if (dinfo->type == type &&
1898
            dinfo->bus == bus &&
1899
            dinfo->unit == unit)
1900
            return dinfo;
1901
    }
1902

    
1903
    return NULL;
1904
}
1905

    
1906
DriveInfo *drive_get_by_id(char *id)
1907
{
1908
    DriveInfo *dinfo;
1909

    
1910
    TAILQ_FOREACH(dinfo, &drives, next) {
1911
        if (strcmp(id, dinfo->id))
1912
            continue;
1913
        return dinfo;
1914
    }
1915
    return NULL;
1916
}
1917

    
1918
int drive_get_max_bus(BlockInterfaceType type)
1919
{
1920
    int max_bus;
1921
    DriveInfo *dinfo;
1922

    
1923
    max_bus = -1;
1924
    TAILQ_FOREACH(dinfo, &drives, next) {
1925
        if(dinfo->type == type &&
1926
           dinfo->bus > max_bus)
1927
            max_bus = dinfo->bus;
1928
    }
1929
    return max_bus;
1930
}
1931

    
1932
const char *drive_get_serial(BlockDriverState *bdrv)
1933
{
1934
    DriveInfo *dinfo;
1935

    
1936
    TAILQ_FOREACH(dinfo, &drives, next) {
1937
        if (dinfo->bdrv == bdrv)
1938
            return dinfo->serial;
1939
    }
1940

    
1941
    return "\0";
1942
}
1943

    
1944
BlockInterfaceErrorAction drive_get_onerror(BlockDriverState *bdrv)
1945
{
1946
    DriveInfo *dinfo;
1947

    
1948
    TAILQ_FOREACH(dinfo, &drives, next) {
1949
        if (dinfo->bdrv == bdrv)
1950
            return dinfo->onerror;
1951
    }
1952

    
1953
    return BLOCK_ERR_STOP_ENOSPC;
1954
}
1955

    
1956
static void bdrv_format_print(void *opaque, const char *name)
1957
{
1958
    fprintf(stderr, " %s", name);
1959
}
1960

    
1961
void drive_uninit(BlockDriverState *bdrv)
1962
{
1963
    DriveInfo *dinfo;
1964

    
1965
    TAILQ_FOREACH(dinfo, &drives, next) {
1966
        if (dinfo->bdrv != bdrv)
1967
            continue;
1968
        qemu_opts_del(dinfo->opts);
1969
        TAILQ_REMOVE(&drives, dinfo, next);
1970
        qemu_free(dinfo);
1971
        break;
1972
    }
1973
}
1974

    
1975
DriveInfo *drive_init(QemuOpts *opts, void *opaque,
1976
                      int *fatal_error)
1977
{
1978
    const char *buf;
1979
    const char *file = NULL;
1980
    char devname[128];
1981
    const char *serial;
1982
    const char *mediastr = "";
1983
    BlockInterfaceType type;
1984
    enum { MEDIA_DISK, MEDIA_CDROM } media;
1985
    int bus_id, unit_id;
1986
    int cyls, heads, secs, translation;
1987
    BlockDriver *drv = NULL;
1988
    QEMUMachine *machine = opaque;
1989
    int max_devs;
1990
    int index;
1991
    int cache;
1992
    int bdrv_flags, onerror;
1993
    const char *devaddr;
1994
    DriveInfo *dinfo;
1995
    int snapshot = 0;
1996

    
1997
    *fatal_error = 1;
1998

    
1999
    translation = BIOS_ATA_TRANSLATION_AUTO;
2000
    cache = 1;
2001

    
2002
    if (machine->use_scsi) {
2003
        type = IF_SCSI;
2004
        max_devs = MAX_SCSI_DEVS;
2005
        pstrcpy(devname, sizeof(devname), "scsi");
2006
    } else {
2007
        type = IF_IDE;
2008
        max_devs = MAX_IDE_DEVS;
2009
        pstrcpy(devname, sizeof(devname), "ide");
2010
    }
2011
    media = MEDIA_DISK;
2012

    
2013
    /* extract parameters */
2014
    bus_id  = qemu_opt_get_number(opts, "bus", 0);
2015
    unit_id = qemu_opt_get_number(opts, "unit", -1);
2016
    index   = qemu_opt_get_number(opts, "index", -1);
2017

    
2018
    cyls  = qemu_opt_get_number(opts, "cyls", 0);
2019
    heads = qemu_opt_get_number(opts, "heads", 0);
2020
    secs  = qemu_opt_get_number(opts, "secs", 0);
2021

    
2022
    snapshot = qemu_opt_get_bool(opts, "snapshot", 0);
2023

    
2024
    file = qemu_opt_get(opts, "file");
2025
    serial = qemu_opt_get(opts, "serial");
2026

    
2027
    if ((buf = qemu_opt_get(opts, "if")) != NULL) {
2028
        pstrcpy(devname, sizeof(devname), buf);
2029
        if (!strcmp(buf, "ide")) {
2030
            type = IF_IDE;
2031
            max_devs = MAX_IDE_DEVS;
2032
        } else if (!strcmp(buf, "scsi")) {
2033
            type = IF_SCSI;
2034
            max_devs = MAX_SCSI_DEVS;
2035
        } else if (!strcmp(buf, "floppy")) {
2036
            type = IF_FLOPPY;
2037
            max_devs = 0;
2038
        } else if (!strcmp(buf, "pflash")) {
2039
            type = IF_PFLASH;
2040
            max_devs = 0;
2041
        } else if (!strcmp(buf, "mtd")) {
2042
            type = IF_MTD;
2043
            max_devs = 0;
2044
        } else if (!strcmp(buf, "sd")) {
2045
            type = IF_SD;
2046
            max_devs = 0;
2047
        } else if (!strcmp(buf, "virtio")) {
2048
            type = IF_VIRTIO;
2049
            max_devs = 0;
2050
        } else if (!strcmp(buf, "xen")) {
2051
            type = IF_XEN;
2052
            max_devs = 0;
2053
        } else {
2054
            fprintf(stderr, "qemu: unsupported bus type '%s'\n", buf);
2055
            return NULL;
2056
        }
2057
    }
2058

    
2059
    if (cyls || heads || secs) {
2060
        if (cyls < 1 || cyls > 16383) {
2061
            fprintf(stderr, "qemu: '%s' invalid physical cyls number\n", buf);
2062
            return NULL;
2063
        }
2064
        if (heads < 1 || heads > 16) {
2065
            fprintf(stderr, "qemu: '%s' invalid physical heads number\n", buf);
2066
            return NULL;
2067
        }
2068
        if (secs < 1 || secs > 63) {
2069
            fprintf(stderr, "qemu: '%s' invalid physical secs number\n", buf);
2070
            return NULL;
2071
        }
2072
    }
2073

    
2074
    if ((buf = qemu_opt_get(opts, "trans")) != NULL) {
2075
        if (!cyls) {
2076
            fprintf(stderr,
2077
                    "qemu: '%s' trans must be used with cyls,heads and secs\n",
2078
                    buf);
2079
            return NULL;
2080
        }
2081
        if (!strcmp(buf, "none"))
2082
            translation = BIOS_ATA_TRANSLATION_NONE;
2083
        else if (!strcmp(buf, "lba"))
2084
            translation = BIOS_ATA_TRANSLATION_LBA;
2085
        else if (!strcmp(buf, "auto"))
2086
            translation = BIOS_ATA_TRANSLATION_AUTO;
2087
        else {
2088
            fprintf(stderr, "qemu: '%s' invalid translation type\n", buf);
2089
            return NULL;
2090
        }
2091
    }
2092

    
2093
    if ((buf = qemu_opt_get(opts, "media")) != NULL) {
2094
        if (!strcmp(buf, "disk")) {
2095
            media = MEDIA_DISK;
2096
        } else if (!strcmp(buf, "cdrom")) {
2097
            if (cyls || secs || heads) {
2098
                fprintf(stderr,
2099
                        "qemu: '%s' invalid physical CHS format\n", buf);
2100
                return NULL;
2101
            }
2102
            media = MEDIA_CDROM;
2103
        } else {
2104
            fprintf(stderr, "qemu: '%s' invalid media\n", buf);
2105
            return NULL;
2106
        }
2107
    }
2108

    
2109
    if ((buf = qemu_opt_get(opts, "cache")) != NULL) {
2110
        if (!strcmp(buf, "off") || !strcmp(buf, "none"))
2111
            cache = 0;
2112
        else if (!strcmp(buf, "writethrough"))
2113
            cache = 1;
2114
        else if (!strcmp(buf, "writeback"))
2115
            cache = 2;
2116
        else {
2117
           fprintf(stderr, "qemu: invalid cache option\n");
2118
           return NULL;
2119
        }
2120
    }
2121

    
2122
    if ((buf = qemu_opt_get(opts, "format")) != NULL) {
2123
       if (strcmp(buf, "?") == 0) {
2124
            fprintf(stderr, "qemu: Supported formats:");
2125
            bdrv_iterate_format(bdrv_format_print, NULL);
2126
            fprintf(stderr, "\n");
2127
            return NULL;
2128
        }
2129
        drv = bdrv_find_format(buf);
2130
        if (!drv) {
2131
            fprintf(stderr, "qemu: '%s' invalid format\n", buf);
2132
            return NULL;
2133
        }
2134
    }
2135

    
2136
    onerror = BLOCK_ERR_STOP_ENOSPC;
2137
    if ((buf = qemu_opt_get(opts, "werror")) != NULL) {
2138
        if (type != IF_IDE && type != IF_SCSI && type != IF_VIRTIO) {
2139
            fprintf(stderr, "werror is no supported by this format\n");
2140
            return NULL;
2141
        }
2142
        if (!strcmp(buf, "ignore"))
2143
            onerror = BLOCK_ERR_IGNORE;
2144
        else if (!strcmp(buf, "enospc"))
2145
            onerror = BLOCK_ERR_STOP_ENOSPC;
2146
        else if (!strcmp(buf, "stop"))
2147
            onerror = BLOCK_ERR_STOP_ANY;
2148
        else if (!strcmp(buf, "report"))
2149
            onerror = BLOCK_ERR_REPORT;
2150
        else {
2151
            fprintf(stderr, "qemu: '%s' invalid write error action\n", buf);
2152
            return NULL;
2153
        }
2154
    }
2155

    
2156
    if ((devaddr = qemu_opt_get(opts, "addr")) != NULL) {
2157
        if (type != IF_VIRTIO) {
2158
            fprintf(stderr, "addr is not supported\n");
2159
            return NULL;
2160
        }
2161
    }
2162

    
2163
    /* compute bus and unit according index */
2164

    
2165
    if (index != -1) {
2166
        if (bus_id != 0 || unit_id != -1) {
2167
            fprintf(stderr,
2168
                    "qemu: index cannot be used with bus and unit\n");
2169
            return NULL;
2170
        }
2171
        if (max_devs == 0)
2172
        {
2173
            unit_id = index;
2174
            bus_id = 0;
2175
        } else {
2176
            unit_id = index % max_devs;
2177
            bus_id = index / max_devs;
2178
        }
2179
    }
2180

    
2181
    /* if user doesn't specify a unit_id,
2182
     * try to find the first free
2183
     */
2184

    
2185
    if (unit_id == -1) {
2186
       unit_id = 0;
2187
       while (drive_get(type, bus_id, unit_id) != NULL) {
2188
           unit_id++;
2189
           if (max_devs && unit_id >= max_devs) {
2190
               unit_id -= max_devs;
2191
               bus_id++;
2192
           }
2193
       }
2194
    }
2195

    
2196
    /* check unit id */
2197

    
2198
    if (max_devs && unit_id >= max_devs) {
2199
        fprintf(stderr, "qemu: unit %d too big (max is %d)\n",
2200
                unit_id, max_devs - 1);
2201
        return NULL;
2202
    }
2203

    
2204
    /*
2205
     * ignore multiple definitions
2206
     */
2207

    
2208
    if (drive_get(type, bus_id, unit_id) != NULL) {
2209
        *fatal_error = 0;
2210
        return NULL;
2211
    }
2212

    
2213
    /* init */
2214

    
2215
    dinfo = qemu_mallocz(sizeof(*dinfo));
2216
    if ((buf = qemu_opt_get(opts, "id")) != NULL) {
2217
        dinfo->id = qemu_strdup(buf);
2218
    } else {
2219
        /* no id supplied -> create one */
2220
        dinfo->id = qemu_mallocz(32);
2221
        if (type == IF_IDE || type == IF_SCSI)
2222
            mediastr = (media == MEDIA_CDROM) ? "-cd" : "-hd";
2223
        if (max_devs)
2224
            snprintf(dinfo->id, 32, "%s%i%s%i",
2225
                     devname, bus_id, mediastr, unit_id);
2226
        else
2227
            snprintf(dinfo->id, 32, "%s%s%i",
2228
                     devname, mediastr, unit_id);
2229
    }
2230
    dinfo->bdrv = bdrv_new(dinfo->id);
2231
    dinfo->devaddr = devaddr;
2232
    dinfo->type = type;
2233
    dinfo->bus = bus_id;
2234
    dinfo->unit = unit_id;
2235
    dinfo->onerror = onerror;
2236
    dinfo->opts = opts;
2237
    if (serial)
2238
        strncpy(dinfo->serial, serial, sizeof(serial));
2239
    TAILQ_INSERT_TAIL(&drives, dinfo, next);
2240

    
2241
    switch(type) {
2242
    case IF_IDE:
2243
    case IF_SCSI:
2244
    case IF_XEN:
2245
        switch(media) {
2246
        case MEDIA_DISK:
2247
            if (cyls != 0) {
2248
                bdrv_set_geometry_hint(dinfo->bdrv, cyls, heads, secs);
2249
                bdrv_set_translation_hint(dinfo->bdrv, translation);
2250
            }
2251
            break;
2252
        case MEDIA_CDROM:
2253
            bdrv_set_type_hint(dinfo->bdrv, BDRV_TYPE_CDROM);
2254
            break;
2255
        }
2256
        break;
2257
    case IF_SD:
2258
        /* FIXME: This isn't really a floppy, but it's a reasonable
2259
           approximation.  */
2260
    case IF_FLOPPY:
2261
        bdrv_set_type_hint(dinfo->bdrv, BDRV_TYPE_FLOPPY);
2262
        break;
2263
    case IF_PFLASH:
2264
    case IF_MTD:
2265
    case IF_VIRTIO:
2266
        break;
2267
    case IF_COUNT:
2268
        abort();
2269
    }
2270
    if (!file) {
2271
        *fatal_error = 0;
2272
        return NULL;
2273
    }
2274
    bdrv_flags = 0;
2275
    if (snapshot) {
2276
        bdrv_flags |= BDRV_O_SNAPSHOT;
2277
        cache = 2; /* always use write-back with snapshot */
2278
    }
2279
    if (cache == 0) /* no caching */
2280
        bdrv_flags |= BDRV_O_NOCACHE;
2281
    else if (cache == 2) /* write-back */
2282
        bdrv_flags |= BDRV_O_CACHE_WB;
2283
    if (bdrv_open2(dinfo->bdrv, file, bdrv_flags, drv) < 0) {
2284
        fprintf(stderr, "qemu: could not open disk image %s\n",
2285
                        file);
2286
        return NULL;
2287
    }
2288
    if (bdrv_key_required(dinfo->bdrv))
2289
        autostart = 0;
2290
    *fatal_error = 0;
2291
    return dinfo;
2292
}
2293

    
2294
static int drive_init_func(QemuOpts *opts, void *opaque)
2295
{
2296
    QEMUMachine *machine = opaque;
2297
    int fatal_error = 0;
2298

    
2299
    if (drive_init(opts, machine, &fatal_error) == NULL) {
2300
        if (fatal_error)
2301
            return 1;
2302
    }
2303
    return 0;
2304
}
2305

    
2306
static int drive_enable_snapshot(QemuOpts *opts, void *opaque)
2307
{
2308
    if (NULL == qemu_opt_get(opts, "snapshot")) {
2309
        qemu_opt_set(opts, "snapshot", "on");
2310
    }
2311
    return 0;
2312
}
2313

    
2314
void qemu_register_boot_set(QEMUBootSetHandler *func, void *opaque)
2315
{
2316
    boot_set_handler = func;
2317
    boot_set_opaque = opaque;
2318
}
2319

    
2320
int qemu_boot_set(const char *boot_devices)
2321
{
2322
    if (!boot_set_handler) {
2323
        return -EINVAL;
2324
    }
2325
    return boot_set_handler(boot_set_opaque, boot_devices);
2326
}
2327

    
2328
static int parse_bootdevices(char *devices)
2329
{
2330
    /* We just do some generic consistency checks */
2331
    const char *p;
2332
    int bitmap = 0;
2333

    
2334
    for (p = devices; *p != '\0'; p++) {
2335
        /* Allowed boot devices are:
2336
         * a-b: floppy disk drives
2337
         * c-f: IDE disk drives
2338
         * g-m: machine implementation dependant drives
2339
         * n-p: network devices
2340
         * It's up to each machine implementation to check if the given boot
2341
         * devices match the actual hardware implementation and firmware
2342
         * features.
2343
         */
2344
        if (*p < 'a' || *p > 'p') {
2345
            fprintf(stderr, "Invalid boot device '%c'\n", *p);
2346
            exit(1);
2347
        }
2348
        if (bitmap & (1 << (*p - 'a'))) {
2349
            fprintf(stderr, "Boot device '%c' was given twice\n", *p);
2350
            exit(1);
2351
        }
2352
        bitmap |= 1 << (*p - 'a');
2353
    }
2354
    return bitmap;
2355
}
2356

    
2357
static void restore_boot_devices(void *opaque)
2358
{
2359
    char *standard_boot_devices = opaque;
2360

    
2361
    qemu_boot_set(standard_boot_devices);
2362

    
2363
    qemu_unregister_reset(restore_boot_devices, standard_boot_devices);
2364
    qemu_free(standard_boot_devices);
2365
}
2366

    
2367
static void numa_add(const char *optarg)
2368
{
2369
    char option[128];
2370
    char *endptr;
2371
    unsigned long long value, endvalue;
2372
    int nodenr;
2373

    
2374
    optarg = get_opt_name(option, 128, optarg, ',') + 1;
2375
    if (!strcmp(option, "node")) {
2376
        if (get_param_value(option, 128, "nodeid", optarg) == 0) {
2377
            nodenr = nb_numa_nodes;
2378
        } else {
2379
            nodenr = strtoull(option, NULL, 10);
2380
        }
2381

    
2382
        if (get_param_value(option, 128, "mem", optarg) == 0) {
2383
            node_mem[nodenr] = 0;
2384
        } else {
2385
            value = strtoull(option, &endptr, 0);
2386
            switch (*endptr) {
2387
            case 0: case 'M': case 'm':
2388
                value <<= 20;
2389
                break;
2390
            case 'G': case 'g':
2391
                value <<= 30;
2392
                break;
2393
            }
2394
            node_mem[nodenr] = value;
2395
        }
2396
        if (get_param_value(option, 128, "cpus", optarg) == 0) {
2397
            node_cpumask[nodenr] = 0;
2398
        } else {
2399
            value = strtoull(option, &endptr, 10);
2400
            if (value >= 64) {
2401
                value = 63;
2402
                fprintf(stderr, "only 64 CPUs in NUMA mode supported.\n");
2403
            } else {
2404
                if (*endptr == '-') {
2405
                    endvalue = strtoull(endptr+1, &endptr, 10);
2406
                    if (endvalue >= 63) {
2407
                        endvalue = 62;
2408
                        fprintf(stderr,
2409
                            "only 63 CPUs in NUMA mode supported.\n");
2410
                    }
2411
                    value = (1 << (endvalue + 1)) - (1 << value);
2412
                } else {
2413
                    value = 1 << value;
2414
                }
2415
            }
2416
            node_cpumask[nodenr] = value;
2417
        }
2418
        nb_numa_nodes++;
2419
    }
2420
    return;
2421
}
2422

    
2423
/***********************************************************/
2424
/* USB devices */
2425

    
2426
static USBPort *used_usb_ports;
2427
static USBPort *free_usb_ports;
2428

    
2429
/* ??? Maybe change this to register a hub to keep track of the topology.  */
2430
void qemu_register_usb_port(USBPort *port, void *opaque, int index,
2431
                            usb_attachfn attach)
2432
{
2433
    port->opaque = opaque;
2434
    port->index = index;
2435
    port->attach = attach;
2436
    port->next = free_usb_ports;
2437
    free_usb_ports = port;
2438
}
2439

    
2440
int usb_device_add_dev(USBDevice *dev)
2441
{
2442
    USBPort *port;
2443

    
2444
    /* Find a USB port to add the device to.  */
2445
    port = free_usb_ports;
2446
    if (!port->next) {
2447
        USBDevice *hub;
2448

    
2449
        /* Create a new hub and chain it on.  */
2450
        free_usb_ports = NULL;
2451
        port->next = used_usb_ports;
2452
        used_usb_ports = port;
2453

    
2454
        hub = usb_hub_init(VM_USB_HUB_SIZE);
2455
        usb_attach(port, hub);
2456
        port = free_usb_ports;
2457
    }
2458

    
2459
    free_usb_ports = port->next;
2460
    port->next = used_usb_ports;
2461
    used_usb_ports = port;
2462
    usb_attach(port, dev);
2463
    return 0;
2464
}
2465

    
2466
static void usb_msd_password_cb(void *opaque, int err)
2467
{
2468
    USBDevice *dev = opaque;
2469

    
2470
    if (!err)
2471
        usb_device_add_dev(dev);
2472
    else
2473
        dev->handle_destroy(dev);
2474
}
2475

    
2476
static int usb_device_add(const char *devname, int is_hotplug)
2477
{
2478
    const char *p;
2479
    USBDevice *dev;
2480

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

    
2484
    if (strstart(devname, "host:", &p)) {
2485
        dev = usb_host_device_open(p);
2486
    } else if (!strcmp(devname, "mouse")) {
2487
        dev = usb_mouse_init();
2488
    } else if (!strcmp(devname, "tablet")) {
2489
        dev = usb_tablet_init();
2490
    } else if (!strcmp(devname, "keyboard")) {
2491
        dev = usb_keyboard_init();
2492
    } else if (strstart(devname, "disk:", &p)) {
2493
        BlockDriverState *bs;
2494

    
2495
        dev = usb_msd_init(p);
2496
        if (!dev)
2497
            return -1;
2498
        bs = usb_msd_get_bdrv(dev);
2499
        if (bdrv_key_required(bs)) {
2500
            autostart = 0;
2501
            if (is_hotplug) {
2502
                monitor_read_bdrv_key_start(cur_mon, bs, usb_msd_password_cb,
2503
                                            dev);
2504
                return 0;
2505
            }
2506
        }
2507
    } else if (!strcmp(devname, "wacom-tablet")) {
2508
        dev = usb_wacom_init();
2509
    } else if (strstart(devname, "serial:", &p)) {
2510
        dev = usb_serial_init(p);
2511
#ifdef CONFIG_BRLAPI
2512
    } else if (!strcmp(devname, "braille")) {
2513
        dev = usb_baum_init();
2514
#endif
2515
    } else if (strstart(devname, "net:", &p)) {
2516
        int nic = nb_nics;
2517

    
2518
        if (net_client_init(NULL, "nic", p) < 0)
2519
            return -1;
2520
        nd_table[nic].model = "usb";
2521
        dev = usb_net_init(&nd_table[nic]);
2522
    } else if (!strcmp(devname, "bt") || strstart(devname, "bt:", &p)) {
2523
        dev = usb_bt_init(devname[2] ? hci_init(p) :
2524
                        bt_new_hci(qemu_find_bt_vlan(0)));
2525
    } else {
2526
        return -1;
2527
    }
2528
    if (!dev)
2529
        return -1;
2530

    
2531
    return usb_device_add_dev(dev);
2532
}
2533

    
2534
int usb_device_del_addr(int bus_num, int addr)
2535
{
2536
    USBPort *port;
2537
    USBPort **lastp;
2538
    USBDevice *dev;
2539

    
2540
    if (!used_usb_ports)
2541
        return -1;
2542

    
2543
    if (bus_num != 0)
2544
        return -1;
2545

    
2546
    lastp = &used_usb_ports;
2547
    port = used_usb_ports;
2548
    while (port && port->dev->addr != addr) {
2549
        lastp = &port->next;
2550
        port = port->next;
2551
    }
2552

    
2553
    if (!port)
2554
        return -1;
2555

    
2556
    dev = port->dev;
2557
    *lastp = port->next;
2558
    usb_attach(port, NULL);
2559
    dev->handle_destroy(dev);
2560
    port->next = free_usb_ports;
2561
    free_usb_ports = port;
2562
    return 0;
2563
}
2564

    
2565
static int usb_device_del(const char *devname)
2566
{
2567
    int bus_num, addr;
2568
    const char *p;
2569

    
2570
    if (strstart(devname, "host:", &p))
2571
        return usb_host_device_close(p);
2572

    
2573
    if (!used_usb_ports)
2574
        return -1;
2575

    
2576
    p = strchr(devname, '.');
2577
    if (!p)
2578
        return -1;
2579
    bus_num = strtoul(devname, NULL, 0);
2580
    addr = strtoul(p + 1, NULL, 0);
2581

    
2582
    return usb_device_del_addr(bus_num, addr);
2583
}
2584

    
2585
static int usb_parse(const char *cmdline)
2586
{
2587
    return usb_device_add(cmdline, 0);
2588
}
2589

    
2590
void do_usb_add(Monitor *mon, const char *devname)
2591
{
2592
    usb_device_add(devname, 1);
2593
}
2594

    
2595
void do_usb_del(Monitor *mon, const char *devname)
2596
{
2597
    usb_device_del(devname);
2598
}
2599

    
2600
void usb_info(Monitor *mon)
2601
{
2602
    USBDevice *dev;
2603
    USBPort *port;
2604
    const char *speed_str;
2605

    
2606
    if (!usb_enabled) {
2607
        monitor_printf(mon, "USB support not enabled\n");
2608
        return;
2609
    }
2610

    
2611
    for (port = used_usb_ports; port; port = port->next) {
2612
        dev = port->dev;
2613
        if (!dev)
2614
            continue;
2615
        switch(dev->speed) {
2616
        case USB_SPEED_LOW:
2617
            speed_str = "1.5";
2618
            break;
2619
        case USB_SPEED_FULL:
2620
            speed_str = "12";
2621
            break;
2622
        case USB_SPEED_HIGH:
2623
            speed_str = "480";
2624
            break;
2625
        default:
2626
            speed_str = "?";
2627
            break;
2628
        }
2629
        monitor_printf(mon, "  Device %d.%d, Speed %s Mb/s, Product %s\n",
2630
                       0, dev->addr, speed_str, dev->devname);
2631
    }
2632
}
2633

    
2634
/***********************************************************/
2635
/* PCMCIA/Cardbus */
2636

    
2637
static struct pcmcia_socket_entry_s {
2638
    PCMCIASocket *socket;
2639
    struct pcmcia_socket_entry_s *next;
2640
} *pcmcia_sockets = 0;
2641

    
2642
void pcmcia_socket_register(PCMCIASocket *socket)
2643
{
2644
    struct pcmcia_socket_entry_s *entry;
2645

    
2646
    entry = qemu_malloc(sizeof(struct pcmcia_socket_entry_s));
2647
    entry->socket = socket;
2648
    entry->next = pcmcia_sockets;
2649
    pcmcia_sockets = entry;
2650
}
2651

    
2652
void pcmcia_socket_unregister(PCMCIASocket *socket)
2653
{
2654
    struct pcmcia_socket_entry_s *entry, **ptr;
2655

    
2656
    ptr = &pcmcia_sockets;
2657
    for (entry = *ptr; entry; ptr = &entry->next, entry = *ptr)
2658
        if (entry->socket == socket) {
2659
            *ptr = entry->next;
2660
            qemu_free(entry);
2661
        }
2662
}
2663

    
2664
void pcmcia_info(Monitor *mon)
2665
{
2666
    struct pcmcia_socket_entry_s *iter;
2667

    
2668
    if (!pcmcia_sockets)
2669
        monitor_printf(mon, "No PCMCIA sockets\n");
2670

    
2671
    for (iter = pcmcia_sockets; iter; iter = iter->next)
2672
        monitor_printf(mon, "%s: %s\n", iter->socket->slot_string,
2673
                       iter->socket->attached ? iter->socket->card_string :
2674
                       "Empty");
2675
}
2676

    
2677
/***********************************************************/
2678
/* register display */
2679

    
2680
struct DisplayAllocator default_allocator = {
2681
    defaultallocator_create_displaysurface,
2682
    defaultallocator_resize_displaysurface,
2683
    defaultallocator_free_displaysurface
2684
};
2685

    
2686
void register_displaystate(DisplayState *ds)
2687
{
2688
    DisplayState **s;
2689
    s = &display_state;
2690
    while (*s != NULL)
2691
        s = &(*s)->next;
2692
    ds->next = NULL;
2693
    *s = ds;
2694
}
2695

    
2696
DisplayState *get_displaystate(void)
2697
{
2698
    return display_state;
2699
}
2700

    
2701
DisplayAllocator *register_displayallocator(DisplayState *ds, DisplayAllocator *da)
2702
{
2703
    if(ds->allocator ==  &default_allocator) ds->allocator = da;
2704
    return ds->allocator;
2705
}
2706

    
2707
/* dumb display */
2708

    
2709
static void dumb_display_init(void)
2710
{
2711
    DisplayState *ds = qemu_mallocz(sizeof(DisplayState));
2712
    ds->allocator = &default_allocator;
2713
    ds->surface = qemu_create_displaysurface(ds, 640, 480);
2714
    register_displaystate(ds);
2715
}
2716

    
2717
/***********************************************************/
2718
/* I/O handling */
2719

    
2720
typedef struct IOHandlerRecord {
2721
    int fd;
2722
    IOCanRWHandler *fd_read_poll;
2723
    IOHandler *fd_read;
2724
    IOHandler *fd_write;
2725
    int deleted;
2726
    void *opaque;
2727
    /* temporary data */
2728
    struct pollfd *ufd;
2729
    struct IOHandlerRecord *next;
2730
} IOHandlerRecord;
2731

    
2732
static IOHandlerRecord *first_io_handler;
2733

    
2734
/* XXX: fd_read_poll should be suppressed, but an API change is
2735
   necessary in the character devices to suppress fd_can_read(). */
2736
int qemu_set_fd_handler2(int fd,
2737
                         IOCanRWHandler *fd_read_poll,
2738
                         IOHandler *fd_read,
2739
                         IOHandler *fd_write,
2740
                         void *opaque)
2741
{
2742
    IOHandlerRecord **pioh, *ioh;
2743

    
2744
    if (!fd_read && !fd_write) {
2745
        pioh = &first_io_handler;
2746
        for(;;) {
2747
            ioh = *pioh;
2748
            if (ioh == NULL)
2749
                break;
2750
            if (ioh->fd == fd) {
2751
                ioh->deleted = 1;
2752
                break;
2753
            }
2754
            pioh = &ioh->next;
2755
        }
2756
    } else {
2757
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
2758
            if (ioh->fd == fd)
2759
                goto found;
2760
        }
2761
        ioh = qemu_mallocz(sizeof(IOHandlerRecord));
2762
        ioh->next = first_io_handler;
2763
        first_io_handler = ioh;
2764
    found:
2765
        ioh->fd = fd;
2766
        ioh->fd_read_poll = fd_read_poll;
2767
        ioh->fd_read = fd_read;
2768
        ioh->fd_write = fd_write;
2769
        ioh->opaque = opaque;
2770
        ioh->deleted = 0;
2771
    }
2772
    return 0;
2773
}
2774

    
2775
int qemu_set_fd_handler(int fd,
2776
                        IOHandler *fd_read,
2777
                        IOHandler *fd_write,
2778
                        void *opaque)
2779
{
2780
    return qemu_set_fd_handler2(fd, NULL, fd_read, fd_write, opaque);
2781
}
2782

    
2783
#ifdef _WIN32
2784
/***********************************************************/
2785
/* Polling handling */
2786

    
2787
typedef struct PollingEntry {
2788
    PollingFunc *func;
2789
    void *opaque;
2790
    struct PollingEntry *next;
2791
} PollingEntry;
2792

    
2793
static PollingEntry *first_polling_entry;
2794

    
2795
int qemu_add_polling_cb(PollingFunc *func, void *opaque)
2796
{
2797
    PollingEntry **ppe, *pe;
2798
    pe = qemu_mallocz(sizeof(PollingEntry));
2799
    pe->func = func;
2800
    pe->opaque = opaque;
2801
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next);
2802
    *ppe = pe;
2803
    return 0;
2804
}
2805

    
2806
void qemu_del_polling_cb(PollingFunc *func, void *opaque)
2807
{
2808
    PollingEntry **ppe, *pe;
2809
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next) {
2810
        pe = *ppe;
2811
        if (pe->func == func && pe->opaque == opaque) {
2812
            *ppe = pe->next;
2813
            qemu_free(pe);
2814
            break;
2815
        }
2816
    }
2817
}
2818

    
2819
/***********************************************************/
2820
/* Wait objects support */
2821
typedef struct WaitObjects {
2822
    int num;
2823
    HANDLE events[MAXIMUM_WAIT_OBJECTS + 1];
2824
    WaitObjectFunc *func[MAXIMUM_WAIT_OBJECTS + 1];
2825
    void *opaque[MAXIMUM_WAIT_OBJECTS + 1];
2826
} WaitObjects;
2827

    
2828
static WaitObjects wait_objects = {0};
2829

    
2830
int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
2831
{
2832
    WaitObjects *w = &wait_objects;
2833

    
2834
    if (w->num >= MAXIMUM_WAIT_OBJECTS)
2835
        return -1;
2836
    w->events[w->num] = handle;
2837
    w->func[w->num] = func;
2838
    w->opaque[w->num] = opaque;
2839
    w->num++;
2840
    return 0;
2841
}
2842

    
2843
void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
2844
{
2845
    int i, found;
2846
    WaitObjects *w = &wait_objects;
2847

    
2848
    found = 0;
2849
    for (i = 0; i < w->num; i++) {
2850
        if (w->events[i] == handle)
2851
            found = 1;
2852
        if (found) {
2853
            w->events[i] = w->events[i + 1];
2854
            w->func[i] = w->func[i + 1];
2855
            w->opaque[i] = w->opaque[i + 1];
2856
        }
2857
    }
2858
    if (found)
2859
        w->num--;
2860
}
2861
#endif
2862

    
2863
/***********************************************************/
2864
/* ram save/restore */
2865

    
2866
static int ram_get_page(QEMUFile *f, uint8_t *buf, int len)
2867
{
2868
    int v;
2869

    
2870
    v = qemu_get_byte(f);
2871
    switch(v) {
2872
    case 0:
2873
        if (qemu_get_buffer(f, buf, len) != len)
2874
            return -EIO;
2875
        break;
2876
    case 1:
2877
        v = qemu_get_byte(f);
2878
        memset(buf, v, len);
2879
        break;
2880
    default:
2881
        return -EINVAL;
2882
    }
2883

    
2884
    if (qemu_file_has_error(f))
2885
        return -EIO;
2886

    
2887
    return 0;
2888
}
2889

    
2890
static int ram_load_v1(QEMUFile *f, void *opaque)
2891
{
2892
    int ret;
2893
    ram_addr_t i;
2894

    
2895
    if (qemu_get_be32(f) != last_ram_offset)
2896
        return -EINVAL;
2897
    for(i = 0; i < last_ram_offset; i+= TARGET_PAGE_SIZE) {
2898
        ret = ram_get_page(f, qemu_get_ram_ptr(i), TARGET_PAGE_SIZE);
2899
        if (ret)
2900
            return ret;
2901
    }
2902
    return 0;
2903
}
2904

    
2905
#define BDRV_HASH_BLOCK_SIZE 1024
2906
#define IOBUF_SIZE 4096
2907
#define RAM_CBLOCK_MAGIC 0xfabe
2908

    
2909
typedef struct RamDecompressState {
2910
    z_stream zstream;
2911
    QEMUFile *f;
2912
    uint8_t buf[IOBUF_SIZE];
2913
} RamDecompressState;
2914

    
2915
static int ram_decompress_open(RamDecompressState *s, QEMUFile *f)
2916
{
2917
    int ret;
2918
    memset(s, 0, sizeof(*s));
2919
    s->f = f;
2920
    ret = inflateInit(&s->zstream);
2921
    if (ret != Z_OK)
2922
        return -1;
2923
    return 0;
2924
}
2925

    
2926
static int ram_decompress_buf(RamDecompressState *s, uint8_t *buf, int len)
2927
{
2928
    int ret, clen;
2929

    
2930
    s->zstream.avail_out = len;
2931
    s->zstream.next_out = buf;
2932
    while (s->zstream.avail_out > 0) {
2933
        if (s->zstream.avail_in == 0) {
2934
            if (qemu_get_be16(s->f) != RAM_CBLOCK_MAGIC)
2935
                return -1;
2936
            clen = qemu_get_be16(s->f);
2937
            if (clen > IOBUF_SIZE)
2938
                return -1;
2939
            qemu_get_buffer(s->f, s->buf, clen);
2940
            s->zstream.avail_in = clen;
2941
            s->zstream.next_in = s->buf;
2942
        }
2943
        ret = inflate(&s->zstream, Z_PARTIAL_FLUSH);
2944
        if (ret != Z_OK && ret != Z_STREAM_END) {
2945
            return -1;
2946
        }
2947
    }
2948
    return 0;
2949
}
2950

    
2951
static void ram_decompress_close(RamDecompressState *s)
2952
{
2953
    inflateEnd(&s->zstream);
2954
}
2955

    
2956
#define RAM_SAVE_FLAG_FULL        0x01
2957
#define RAM_SAVE_FLAG_COMPRESS        0x02
2958
#define RAM_SAVE_FLAG_MEM_SIZE        0x04
2959
#define RAM_SAVE_FLAG_PAGE        0x08
2960
#define RAM_SAVE_FLAG_EOS        0x10
2961

    
2962
static int is_dup_page(uint8_t *page, uint8_t ch)
2963
{
2964
    uint32_t val = ch << 24 | ch << 16 | ch << 8 | ch;
2965
    uint32_t *array = (uint32_t *)page;
2966
    int i;
2967

    
2968
    for (i = 0; i < (TARGET_PAGE_SIZE / 4); i++) {
2969
        if (array[i] != val)
2970
            return 0;
2971
    }
2972

    
2973
    return 1;
2974
}
2975

    
2976
static int ram_save_block(QEMUFile *f)
2977
{
2978
    static ram_addr_t current_addr = 0;
2979
    ram_addr_t saved_addr = current_addr;
2980
    ram_addr_t addr = 0;
2981
    int found = 0;
2982

    
2983
    while (addr < last_ram_offset) {
2984
        if (cpu_physical_memory_get_dirty(current_addr, MIGRATION_DIRTY_FLAG)) {
2985
            uint8_t *p;
2986

    
2987
            cpu_physical_memory_reset_dirty(current_addr,
2988
                                            current_addr + TARGET_PAGE_SIZE,
2989
                                            MIGRATION_DIRTY_FLAG);
2990

    
2991
            p = qemu_get_ram_ptr(current_addr);
2992

    
2993
            if (is_dup_page(p, *p)) {
2994
                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_COMPRESS);
2995
                qemu_put_byte(f, *p);
2996
            } else {
2997
                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_PAGE);
2998
                qemu_put_buffer(f, p, TARGET_PAGE_SIZE);
2999
            }
3000

    
3001
            found = 1;
3002
            break;
3003
        }
3004
        addr += TARGET_PAGE_SIZE;
3005
        current_addr = (saved_addr + addr) % last_ram_offset;
3006
    }
3007

    
3008
    return found;
3009
}
3010

    
3011
static uint64_t bytes_transferred = 0;
3012

    
3013
static ram_addr_t ram_save_remaining(void)
3014
{
3015
    ram_addr_t addr;
3016
    ram_addr_t count = 0;
3017

    
3018
    for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
3019
        if (cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
3020
            count++;
3021
    }
3022

    
3023
    return count;
3024
}
3025

    
3026
uint64_t ram_bytes_remaining(void)
3027
{
3028
    return ram_save_remaining() * TARGET_PAGE_SIZE;
3029
}
3030

    
3031
uint64_t ram_bytes_transferred(void)
3032
{
3033
    return bytes_transferred;
3034
}
3035

    
3036
uint64_t ram_bytes_total(void)
3037
{
3038
    return last_ram_offset;
3039
}
3040

    
3041
static int ram_save_live(QEMUFile *f, int stage, void *opaque)
3042
{
3043
    ram_addr_t addr;
3044
    uint64_t bytes_transferred_last;
3045
    double bwidth = 0;
3046
    uint64_t expected_time = 0;
3047

    
3048
    if (cpu_physical_sync_dirty_bitmap(0, TARGET_PHYS_ADDR_MAX) != 0) {
3049
        qemu_file_set_error(f);
3050
        return 0;
3051
    }
3052

    
3053
    if (stage == 1) {
3054
        /* Make sure all dirty bits are set */
3055
        for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
3056
            if (!cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
3057
                cpu_physical_memory_set_dirty(addr);
3058
        }
3059

    
3060
        /* Enable dirty memory tracking */
3061
        cpu_physical_memory_set_dirty_tracking(1);
3062

    
3063
        qemu_put_be64(f, last_ram_offset | RAM_SAVE_FLAG_MEM_SIZE);
3064
    }
3065

    
3066
    bytes_transferred_last = bytes_transferred;
3067
    bwidth = get_clock();
3068

    
3069
    while (!qemu_file_rate_limit(f)) {
3070
        int ret;
3071

    
3072
        ret = ram_save_block(f);
3073
        bytes_transferred += ret * TARGET_PAGE_SIZE;
3074
        if (ret == 0) /* no more blocks */
3075
            break;
3076
    }
3077

    
3078
    bwidth = get_clock() - bwidth;
3079
    bwidth = (bytes_transferred - bytes_transferred_last) / bwidth;
3080

    
3081
    /* if we haven't transferred anything this round, force expected_time to a
3082
     * a very high value, but without crashing */
3083
    if (bwidth == 0)
3084
        bwidth = 0.000001;
3085

    
3086
    /* try transferring iterative blocks of memory */
3087

    
3088
    if (stage == 3) {
3089

    
3090
        /* flush all remaining blocks regardless of rate limiting */
3091
        while (ram_save_block(f) != 0) {
3092
            bytes_transferred += TARGET_PAGE_SIZE;
3093
        }
3094
        cpu_physical_memory_set_dirty_tracking(0);
3095
    }
3096

    
3097
    qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
3098

    
3099
    expected_time = ram_save_remaining() * TARGET_PAGE_SIZE / bwidth;
3100

    
3101
    return (stage == 2) && (expected_time <= migrate_max_downtime());
3102
}
3103

    
3104
static int ram_load_dead(QEMUFile *f, void *opaque)
3105
{
3106
    RamDecompressState s1, *s = &s1;
3107
    uint8_t buf[10];
3108
    ram_addr_t i;
3109

    
3110
    if (ram_decompress_open(s, f) < 0)
3111
        return -EINVAL;
3112
    for(i = 0; i < last_ram_offset; i+= BDRV_HASH_BLOCK_SIZE) {
3113
        if (ram_decompress_buf(s, buf, 1) < 0) {
3114
            fprintf(stderr, "Error while reading ram block header\n");
3115
            goto error;
3116
        }
3117
        if (buf[0] == 0) {
3118
            if (ram_decompress_buf(s, qemu_get_ram_ptr(i),
3119
                                   BDRV_HASH_BLOCK_SIZE) < 0) {
3120
                fprintf(stderr, "Error while reading ram block address=0x%08" PRIx64, (uint64_t)i);
3121
                goto error;
3122
            }
3123
        } else {
3124
        error:
3125
            printf("Error block header\n");
3126
            return -EINVAL;
3127
        }
3128
    }
3129
    ram_decompress_close(s);
3130

    
3131
    return 0;
3132
}
3133

    
3134
static int ram_load(QEMUFile *f, void *opaque, int version_id)
3135
{
3136
    ram_addr_t addr;
3137
    int flags;
3138

    
3139
    if (version_id == 1)
3140
        return ram_load_v1(f, opaque);
3141

    
3142
    if (version_id == 2) {
3143
        if (qemu_get_be32(f) != last_ram_offset)
3144
            return -EINVAL;
3145
        return ram_load_dead(f, opaque);
3146
    }
3147

    
3148
    if (version_id != 3)
3149
        return -EINVAL;
3150

    
3151
    do {
3152
        addr = qemu_get_be64(f);
3153

    
3154
        flags = addr & ~TARGET_PAGE_MASK;
3155
        addr &= TARGET_PAGE_MASK;
3156

    
3157
        if (flags & RAM_SAVE_FLAG_MEM_SIZE) {
3158
            if (addr != last_ram_offset)
3159
                return -EINVAL;
3160
        }
3161

    
3162
        if (flags & RAM_SAVE_FLAG_FULL) {
3163
            if (ram_load_dead(f, opaque) < 0)
3164
                return -EINVAL;
3165
        }
3166
        
3167
        if (flags & RAM_SAVE_FLAG_COMPRESS) {
3168
            uint8_t ch = qemu_get_byte(f);
3169
            memset(qemu_get_ram_ptr(addr), ch, TARGET_PAGE_SIZE);
3170
#ifndef _WIN32
3171
            if (ch == 0 &&
3172
                (!kvm_enabled() || kvm_has_sync_mmu())) {
3173
                madvise(qemu_get_ram_ptr(addr), TARGET_PAGE_SIZE, MADV_DONTNEED);
3174
            }
3175
#endif
3176
        } else if (flags & RAM_SAVE_FLAG_PAGE)
3177
            qemu_get_buffer(f, qemu_get_ram_ptr(addr), TARGET_PAGE_SIZE);
3178
    } while (!(flags & RAM_SAVE_FLAG_EOS));
3179

    
3180
    return 0;
3181
}
3182

    
3183
void qemu_service_io(void)
3184
{
3185
    qemu_notify_event();
3186
}
3187

    
3188
/***********************************************************/
3189
/* bottom halves (can be seen as timers which expire ASAP) */
3190

    
3191
struct QEMUBH {
3192
    QEMUBHFunc *cb;
3193
    void *opaque;
3194
    int scheduled;
3195
    int idle;
3196
    int deleted;
3197
    QEMUBH *next;
3198
};
3199

    
3200
static QEMUBH *first_bh = NULL;
3201

    
3202
QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque)
3203
{
3204
    QEMUBH *bh;
3205
    bh = qemu_mallocz(sizeof(QEMUBH));
3206
    bh->cb = cb;
3207
    bh->opaque = opaque;
3208
    bh->next = first_bh;
3209
    first_bh = bh;
3210
    return bh;
3211
}
3212

    
3213
int qemu_bh_poll(void)
3214
{
3215
    QEMUBH *bh, **bhp;
3216
    int ret;
3217

    
3218
    ret = 0;
3219
    for (bh = first_bh; bh; bh = bh->next) {
3220
        if (!bh->deleted && bh->scheduled) {
3221
            bh->scheduled = 0;
3222
            if (!bh->idle)
3223
                ret = 1;
3224
            bh->idle = 0;
3225
            bh->cb(bh->opaque);
3226
        }
3227
    }
3228

    
3229
    /* remove deleted bhs */
3230
    bhp = &first_bh;
3231
    while (*bhp) {
3232
        bh = *bhp;
3233
        if (bh->deleted) {
3234
            *bhp = bh->next;
3235
            qemu_free(bh);
3236
        } else
3237
            bhp = &bh->next;
3238
    }
3239

    
3240
    return ret;
3241
}
3242

    
3243
void qemu_bh_schedule_idle(QEMUBH *bh)
3244
{
3245
    if (bh->scheduled)
3246
        return;
3247
    bh->scheduled = 1;
3248
    bh->idle = 1;
3249
}
3250

    
3251
void qemu_bh_schedule(QEMUBH *bh)
3252
{
3253
    if (bh->scheduled)
3254
        return;
3255
    bh->scheduled = 1;
3256
    bh->idle = 0;
3257
    /* stop the currently executing CPU to execute the BH ASAP */
3258
    qemu_notify_event();
3259
}
3260

    
3261
void qemu_bh_cancel(QEMUBH *bh)
3262
{
3263
    bh->scheduled = 0;
3264
}
3265

    
3266
void qemu_bh_delete(QEMUBH *bh)
3267
{
3268
    bh->scheduled = 0;
3269
    bh->deleted = 1;
3270
}
3271

    
3272
static void qemu_bh_update_timeout(int *timeout)
3273
{
3274
    QEMUBH *bh;
3275

    
3276
    for (bh = first_bh; bh; bh = bh->next) {
3277
        if (!bh->deleted && bh->scheduled) {
3278
            if (bh->idle) {
3279
                /* idle bottom halves will be polled at least
3280
                 * every 10ms */
3281
                *timeout = MIN(10, *timeout);
3282
            } else {
3283
                /* non-idle bottom halves will be executed
3284
                 * immediately */
3285
                *timeout = 0;
3286
                break;
3287
            }
3288
        }
3289
    }
3290
}
3291

    
3292
/***********************************************************/
3293
/* machine registration */
3294

    
3295
static QEMUMachine *first_machine = NULL;
3296
QEMUMachine *current_machine = NULL;
3297

    
3298
int qemu_register_machine(QEMUMachine *m)
3299
{
3300
    QEMUMachine **pm;
3301
    pm = &first_machine;
3302
    while (*pm != NULL)
3303
        pm = &(*pm)->next;
3304
    m->next = NULL;
3305
    *pm = m;
3306
    return 0;
3307
}
3308

    
3309
static QEMUMachine *find_machine(const char *name)
3310
{
3311
    QEMUMachine *m;
3312

    
3313
    for(m = first_machine; m != NULL; m = m->next) {
3314
        if (!strcmp(m->name, name))
3315
            return m;
3316
        if (m->alias && !strcmp(m->alias, name))
3317
            return m;
3318
    }
3319
    return NULL;
3320
}
3321

    
3322
static QEMUMachine *find_default_machine(void)
3323
{
3324
    QEMUMachine *m;
3325

    
3326
    for(m = first_machine; m != NULL; m = m->next) {
3327
        if (m->is_default) {
3328
            return m;
3329
        }
3330
    }
3331
    return NULL;
3332
}
3333

    
3334
/***********************************************************/
3335
/* main execution loop */
3336

    
3337
static void gui_update(void *opaque)
3338
{
3339
    uint64_t interval = GUI_REFRESH_INTERVAL;
3340
    DisplayState *ds = opaque;
3341
    DisplayChangeListener *dcl = ds->listeners;
3342

    
3343
    dpy_refresh(ds);
3344

    
3345
    while (dcl != NULL) {
3346
        if (dcl->gui_timer_interval &&
3347
            dcl->gui_timer_interval < interval)
3348
            interval = dcl->gui_timer_interval;
3349
        dcl = dcl->next;
3350
    }
3351
    qemu_mod_timer(ds->gui_timer, interval + qemu_get_clock(rt_clock));
3352
}
3353

    
3354
static void nographic_update(void *opaque)
3355
{
3356
    uint64_t interval = GUI_REFRESH_INTERVAL;
3357

    
3358
    qemu_mod_timer(nographic_timer, interval + qemu_get_clock(rt_clock));
3359
}
3360

    
3361
struct vm_change_state_entry {
3362
    VMChangeStateHandler *cb;
3363
    void *opaque;
3364
    LIST_ENTRY (vm_change_state_entry) entries;
3365
};
3366

    
3367
static LIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head;
3368

    
3369
VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
3370
                                                     void *opaque)
3371
{
3372
    VMChangeStateEntry *e;
3373

    
3374
    e = qemu_mallocz(sizeof (*e));
3375

    
3376
    e->cb = cb;
3377
    e->opaque = opaque;
3378
    LIST_INSERT_HEAD(&vm_change_state_head, e, entries);
3379
    return e;
3380
}
3381

    
3382
void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
3383
{
3384
    LIST_REMOVE (e, entries);
3385
    qemu_free (e);
3386
}
3387

    
3388
static void vm_state_notify(int running, int reason)
3389
{
3390
    VMChangeStateEntry *e;
3391

    
3392
    for (e = vm_change_state_head.lh_first; e; e = e->entries.le_next) {
3393
        e->cb(e->opaque, running, reason);
3394
    }
3395
}
3396

    
3397
static void resume_all_vcpus(void);
3398
static void pause_all_vcpus(void);
3399

    
3400
void vm_start(void)
3401
{
3402
    if (!vm_running) {
3403
        cpu_enable_ticks();
3404
        vm_running = 1;
3405
        vm_state_notify(1, 0);
3406
        qemu_rearm_alarm_timer(alarm_timer);
3407
        resume_all_vcpus();
3408
    }
3409
}
3410

    
3411
/* reset/shutdown handler */
3412

    
3413
typedef struct QEMUResetEntry {
3414
    TAILQ_ENTRY(QEMUResetEntry) entry;
3415
    QEMUResetHandler *func;
3416
    void *opaque;
3417
} QEMUResetEntry;
3418

    
3419
static TAILQ_HEAD(reset_handlers, QEMUResetEntry) reset_handlers =
3420
    TAILQ_HEAD_INITIALIZER(reset_handlers);
3421
static int reset_requested;
3422
static int shutdown_requested;
3423
static int powerdown_requested;
3424
static int debug_requested;
3425
static int vmstop_requested;
3426

    
3427
int qemu_shutdown_requested(void)
3428
{
3429
    int r = shutdown_requested;
3430
    shutdown_requested = 0;
3431
    return r;
3432
}
3433

    
3434
int qemu_reset_requested(void)
3435
{
3436
    int r = reset_requested;
3437
    reset_requested = 0;
3438
    return r;
3439
}
3440

    
3441
int qemu_powerdown_requested(void)
3442
{
3443
    int r = powerdown_requested;
3444
    powerdown_requested = 0;
3445
    return r;
3446
}
3447

    
3448
static int qemu_debug_requested(void)
3449
{
3450
    int r = debug_requested;
3451
    debug_requested = 0;
3452
    return r;
3453
}
3454

    
3455
static int qemu_vmstop_requested(void)
3456
{
3457
    int r = vmstop_requested;
3458
    vmstop_requested = 0;
3459
    return r;
3460
}
3461

    
3462
static void do_vm_stop(int reason)
3463
{
3464
    if (vm_running) {
3465
        cpu_disable_ticks();
3466
        vm_running = 0;
3467
        pause_all_vcpus();
3468
        vm_state_notify(0, reason);
3469
    }
3470
}
3471

    
3472
void qemu_register_reset(QEMUResetHandler *func, void *opaque)
3473
{
3474
    QEMUResetEntry *re = qemu_mallocz(sizeof(QEMUResetEntry));
3475

    
3476
    re->func = func;
3477
    re->opaque = opaque;
3478
    TAILQ_INSERT_TAIL(&reset_handlers, re, entry);
3479
}
3480

    
3481
void qemu_unregister_reset(QEMUResetHandler *func, void *opaque)
3482
{
3483
    QEMUResetEntry *re;
3484

    
3485
    TAILQ_FOREACH(re, &reset_handlers, entry) {
3486
        if (re->func == func && re->opaque == opaque) {
3487
            TAILQ_REMOVE(&reset_handlers, re, entry);
3488
            qemu_free(re);
3489
            return;
3490
        }
3491
    }
3492
}
3493

    
3494
void qemu_system_reset(void)
3495
{
3496
    QEMUResetEntry *re, *nre;
3497

    
3498
    /* reset all devices */
3499
    TAILQ_FOREACH_SAFE(re, &reset_handlers, entry, nre) {
3500
        re->func(re->opaque);
3501
    }
3502
}
3503

    
3504
void qemu_system_reset_request(void)
3505
{
3506
    if (no_reboot) {
3507
        shutdown_requested = 1;
3508
    } else {
3509
        reset_requested = 1;
3510
    }
3511
    qemu_notify_event();
3512
}
3513

    
3514
void qemu_system_shutdown_request(void)
3515
{
3516
    shutdown_requested = 1;
3517
    qemu_notify_event();
3518
}
3519

    
3520
void qemu_system_powerdown_request(void)
3521
{
3522
    powerdown_requested = 1;
3523
    qemu_notify_event();
3524
}
3525

    
3526
#ifdef CONFIG_IOTHREAD
3527
static void qemu_system_vmstop_request(int reason)
3528
{
3529
    vmstop_requested = reason;
3530
    qemu_notify_event();
3531
}
3532
#endif
3533

    
3534
#ifndef _WIN32
3535
static int io_thread_fd = -1;
3536

    
3537
static void qemu_event_increment(void)
3538
{
3539
    static const char byte = 0;
3540

    
3541
    if (io_thread_fd == -1)
3542
        return;
3543

    
3544
    write(io_thread_fd, &byte, sizeof(byte));
3545
}
3546

    
3547
static void qemu_event_read(void *opaque)
3548
{
3549
    int fd = (unsigned long)opaque;
3550
    ssize_t len;
3551

    
3552
    /* Drain the notify pipe */
3553
    do {
3554
        char buffer[512];
3555
        len = read(fd, buffer, sizeof(buffer));
3556
    } while ((len == -1 && errno == EINTR) || len > 0);
3557
}
3558

    
3559
static int qemu_event_init(void)
3560
{
3561
    int err;
3562
    int fds[2];
3563

    
3564
    err = pipe(fds);
3565
    if (err == -1)
3566
        return -errno;
3567

    
3568
    err = fcntl_setfl(fds[0], O_NONBLOCK);
3569
    if (err < 0)
3570
        goto fail;
3571

    
3572
    err = fcntl_setfl(fds[1], O_NONBLOCK);
3573
    if (err < 0)
3574
        goto fail;
3575

    
3576
    qemu_set_fd_handler2(fds[0], NULL, qemu_event_read, NULL,
3577
                         (void *)(unsigned long)fds[0]);
3578

    
3579
    io_thread_fd = fds[1];
3580
    return 0;
3581

    
3582
fail:
3583
    close(fds[0]);
3584
    close(fds[1]);
3585
    return err;
3586
}
3587
#else
3588
HANDLE qemu_event_handle;
3589

    
3590
static void dummy_event_handler(void *opaque)
3591
{
3592
}
3593

    
3594
static int qemu_event_init(void)
3595
{
3596
    qemu_event_handle = CreateEvent(NULL, FALSE, FALSE, NULL);
3597
    if (!qemu_event_handle) {
3598
        perror("Failed CreateEvent");
3599
        return -1;
3600
    }
3601
    qemu_add_wait_object(qemu_event_handle, dummy_event_handler, NULL);
3602
    return 0;
3603
}
3604

    
3605
static void qemu_event_increment(void)
3606
{
3607
    SetEvent(qemu_event_handle);
3608
}
3609
#endif
3610

    
3611
static int cpu_can_run(CPUState *env)
3612
{
3613
    if (env->stop)
3614
        return 0;
3615
    if (env->stopped)
3616
        return 0;
3617
    return 1;
3618
}
3619

    
3620
#ifndef CONFIG_IOTHREAD
3621
static int qemu_init_main_loop(void)
3622
{
3623
    return qemu_event_init();
3624
}
3625

    
3626
void qemu_init_vcpu(void *_env)
3627
{
3628
    CPUState *env = _env;
3629

    
3630
    if (kvm_enabled())
3631
        kvm_init_vcpu(env);
3632
    return;
3633
}
3634

    
3635
int qemu_cpu_self(void *env)
3636
{
3637
    return 1;
3638
}
3639

    
3640
static void resume_all_vcpus(void)
3641
{
3642
}
3643

    
3644
static void pause_all_vcpus(void)
3645
{
3646
}
3647

    
3648
void qemu_cpu_kick(void *env)
3649
{
3650
    return;
3651
}
3652

    
3653
void qemu_notify_event(void)
3654
{
3655
    CPUState *env = cpu_single_env;
3656

    
3657
    if (env) {
3658
        cpu_exit(env);
3659
#ifdef USE_KQEMU
3660
        if (env->kqemu_enabled)
3661
            kqemu_cpu_interrupt(env);
3662
#endif
3663
     }
3664
}
3665

    
3666
#define qemu_mutex_lock_iothread() do { } while (0)
3667
#define qemu_mutex_unlock_iothread() do { } while (0)
3668

    
3669
void vm_stop(int reason)
3670
{
3671
    do_vm_stop(reason);
3672
}
3673

    
3674
#else /* CONFIG_IOTHREAD */
3675

    
3676
#include "qemu-thread.h"
3677

    
3678
QemuMutex qemu_global_mutex;
3679
static QemuMutex qemu_fair_mutex;
3680

    
3681
static QemuThread io_thread;
3682

    
3683
static QemuThread *tcg_cpu_thread;
3684
static QemuCond *tcg_halt_cond;
3685

    
3686
static int qemu_system_ready;
3687
/* cpu creation */
3688
static QemuCond qemu_cpu_cond;
3689
/* system init */
3690
static QemuCond qemu_system_cond;
3691
static QemuCond qemu_pause_cond;
3692

    
3693
static void block_io_signals(void);
3694
static void unblock_io_signals(void);
3695
static int tcg_has_work(void);
3696

    
3697
static int qemu_init_main_loop(void)
3698
{
3699
    int ret;
3700

    
3701
    ret = qemu_event_init();
3702
    if (ret)
3703
        return ret;
3704

    
3705
    qemu_cond_init(&qemu_pause_cond);
3706
    qemu_mutex_init(&qemu_fair_mutex);
3707
    qemu_mutex_init(&qemu_global_mutex);
3708
    qemu_mutex_lock(&qemu_global_mutex);
3709

    
3710
    unblock_io_signals();
3711
    qemu_thread_self(&io_thread);
3712

    
3713
    return 0;
3714
}
3715

    
3716
static void qemu_wait_io_event(CPUState *env)
3717
{
3718
    while (!tcg_has_work())
3719
        qemu_cond_timedwait(env->halt_cond, &qemu_global_mutex, 1000);
3720

    
3721
    qemu_mutex_unlock(&qemu_global_mutex);
3722

    
3723
    /*
3724
     * Users of qemu_global_mutex can be starved, having no chance
3725
     * to acquire it since this path will get to it first.
3726
     * So use another lock to provide fairness.
3727
     */
3728
    qemu_mutex_lock(&qemu_fair_mutex);
3729
    qemu_mutex_unlock(&qemu_fair_mutex);
3730

    
3731
    qemu_mutex_lock(&qemu_global_mutex);
3732
    if (env->stop) {
3733
        env->stop = 0;
3734
        env->stopped = 1;
3735
        qemu_cond_signal(&qemu_pause_cond);
3736
    }
3737
}
3738

    
3739
static int qemu_cpu_exec(CPUState *env);
3740

    
3741
static void *kvm_cpu_thread_fn(void *arg)
3742
{
3743
    CPUState *env = arg;
3744

    
3745
    block_io_signals();
3746
    qemu_thread_self(env->thread);
3747

    
3748
    /* signal CPU creation */
3749
    qemu_mutex_lock(&qemu_global_mutex);
3750
    env->created = 1;
3751
    qemu_cond_signal(&qemu_cpu_cond);
3752

    
3753
    /* and wait for machine initialization */
3754
    while (!qemu_system_ready)
3755
        qemu_cond_timedwait(&qemu_system_cond, &qemu_global_mutex, 100);
3756

    
3757
    while (1) {
3758
        if (cpu_can_run(env))
3759
            qemu_cpu_exec(env);
3760
        qemu_wait_io_event(env);
3761
    }
3762

    
3763
    return NULL;
3764
}
3765

    
3766
static void tcg_cpu_exec(void);
3767

    
3768
static void *tcg_cpu_thread_fn(void *arg)
3769
{
3770
    CPUState *env = arg;
3771

    
3772
    block_io_signals();
3773
    qemu_thread_self(env->thread);
3774

    
3775
    /* signal CPU creation */
3776
    qemu_mutex_lock(&qemu_global_mutex);
3777
    for (env = first_cpu; env != NULL; env = env->next_cpu)
3778
        env->created = 1;
3779
    qemu_cond_signal(&qemu_cpu_cond);
3780

    
3781
    /* and wait for machine initialization */
3782
    while (!qemu_system_ready)
3783
        qemu_cond_timedwait(&qemu_system_cond, &qemu_global_mutex, 100);
3784

    
3785
    while (1) {
3786
        tcg_cpu_exec();
3787
        qemu_wait_io_event(cur_cpu);
3788
    }
3789

    
3790
    return NULL;
3791
}
3792

    
3793
void qemu_cpu_kick(void *_env)
3794
{
3795
    CPUState *env = _env;
3796
    qemu_cond_broadcast(env->halt_cond);
3797
    if (kvm_enabled())
3798
        qemu_thread_signal(env->thread, SIGUSR1);
3799
}
3800

    
3801
int qemu_cpu_self(void *env)
3802
{
3803
    return (cpu_single_env != NULL);
3804
}
3805

    
3806
static void cpu_signal(int sig)
3807
{
3808
    if (cpu_single_env)
3809
        cpu_exit(cpu_single_env);
3810
}
3811

    
3812
static void block_io_signals(void)
3813
{
3814
    sigset_t set;
3815
    struct sigaction sigact;
3816

    
3817
    sigemptyset(&set);
3818
    sigaddset(&set, SIGUSR2);
3819
    sigaddset(&set, SIGIO);
3820
    sigaddset(&set, SIGALRM);
3821
    pthread_sigmask(SIG_BLOCK, &set, NULL);
3822

    
3823
    sigemptyset(&set);
3824
    sigaddset(&set, SIGUSR1);
3825
    pthread_sigmask(SIG_UNBLOCK, &set, NULL);
3826

    
3827
    memset(&sigact, 0, sizeof(sigact));
3828
    sigact.sa_handler = cpu_signal;
3829
    sigaction(SIGUSR1, &sigact, NULL);
3830
}
3831

    
3832
static void unblock_io_signals(void)
3833
{
3834
    sigset_t set;
3835

    
3836
    sigemptyset(&set);
3837
    sigaddset(&set, SIGUSR2);
3838
    sigaddset(&set, SIGIO);
3839
    sigaddset(&set, SIGALRM);
3840
    pthread_sigmask(SIG_UNBLOCK, &set, NULL);
3841

    
3842
    sigemptyset(&set);
3843
    sigaddset(&set, SIGUSR1);
3844
    pthread_sigmask(SIG_BLOCK, &set, NULL);
3845
}
3846

    
3847
static void qemu_signal_lock(unsigned int msecs)
3848
{
3849
    qemu_mutex_lock(&qemu_fair_mutex);
3850

    
3851
    while (qemu_mutex_trylock(&qemu_global_mutex)) {
3852
        qemu_thread_signal(tcg_cpu_thread, SIGUSR1);
3853
        if (!qemu_mutex_timedlock(&qemu_global_mutex, msecs))
3854
            break;
3855
    }
3856
    qemu_mutex_unlock(&qemu_fair_mutex);
3857
}
3858

    
3859
static void qemu_mutex_lock_iothread(void)
3860
{
3861
    if (kvm_enabled()) {
3862
        qemu_mutex_lock(&qemu_fair_mutex);
3863
        qemu_mutex_lock(&qemu_global_mutex);
3864
        qemu_mutex_unlock(&qemu_fair_mutex);
3865
    } else
3866
        qemu_signal_lock(100);
3867
}
3868

    
3869
static void qemu_mutex_unlock_iothread(void)
3870
{
3871
    qemu_mutex_unlock(&qemu_global_mutex);
3872
}
3873

    
3874
static int all_vcpus_paused(void)
3875
{
3876
    CPUState *penv = first_cpu;
3877

    
3878
    while (penv) {
3879
        if (!penv->stopped)
3880
            return 0;
3881
        penv = (CPUState *)penv->next_cpu;
3882
    }
3883

    
3884
    return 1;
3885
}
3886

    
3887
static void pause_all_vcpus(void)
3888
{
3889
    CPUState *penv = first_cpu;
3890

    
3891
    while (penv) {
3892
        penv->stop = 1;
3893
        qemu_thread_signal(penv->thread, SIGUSR1);
3894
        qemu_cpu_kick(penv);
3895
        penv = (CPUState *)penv->next_cpu;
3896
    }
3897

    
3898
    while (!all_vcpus_paused()) {
3899
        qemu_cond_timedwait(&qemu_pause_cond, &qemu_global_mutex, 100);
3900
        penv = first_cpu;
3901
        while (penv) {
3902
            qemu_thread_signal(penv->thread, SIGUSR1);
3903
            penv = (CPUState *)penv->next_cpu;
3904
        }
3905
    }
3906
}
3907

    
3908
static void resume_all_vcpus(void)
3909
{
3910
    CPUState *penv = first_cpu;
3911

    
3912
    while (penv) {
3913
        penv->stop = 0;
3914
        penv->stopped = 0;
3915
        qemu_thread_signal(penv->thread, SIGUSR1);
3916
        qemu_cpu_kick(penv);
3917
        penv = (CPUState *)penv->next_cpu;
3918
    }
3919
}
3920

    
3921
static void tcg_init_vcpu(void *_env)
3922
{
3923
    CPUState *env = _env;
3924
    /* share a single thread for all cpus with TCG */
3925
    if (!tcg_cpu_thread) {
3926
        env->thread = qemu_mallocz(sizeof(QemuThread));
3927
        env->halt_cond = qemu_mallocz(sizeof(QemuCond));
3928
        qemu_cond_init(env->halt_cond);
3929
        qemu_thread_create(env->thread, tcg_cpu_thread_fn, env);
3930
        while (env->created == 0)
3931
            qemu_cond_timedwait(&qemu_cpu_cond, &qemu_global_mutex, 100);
3932
        tcg_cpu_thread = env->thread;
3933
        tcg_halt_cond = env->halt_cond;
3934
    } else {
3935
        env->thread = tcg_cpu_thread;
3936
        env->halt_cond = tcg_halt_cond;
3937
    }
3938
}
3939

    
3940
static void kvm_start_vcpu(CPUState *env)
3941
{
3942
    kvm_init_vcpu(env);
3943
    env->thread = qemu_mallocz(sizeof(QemuThread));
3944
    env->halt_cond = qemu_mallocz(sizeof(QemuCond));
3945
    qemu_cond_init(env->halt_cond);
3946
    qemu_thread_create(env->thread, kvm_cpu_thread_fn, env);
3947
    while (env->created == 0)
3948
        qemu_cond_timedwait(&qemu_cpu_cond, &qemu_global_mutex, 100);
3949
}
3950

    
3951
void qemu_init_vcpu(void *_env)
3952
{
3953
    CPUState *env = _env;
3954

    
3955
    if (kvm_enabled())
3956
        kvm_start_vcpu(env);
3957
    else
3958
        tcg_init_vcpu(env);
3959
}
3960

    
3961
void qemu_notify_event(void)
3962
{
3963
    qemu_event_increment();
3964
}
3965

    
3966
void vm_stop(int reason)
3967
{
3968
    QemuThread me;
3969
    qemu_thread_self(&me);
3970

    
3971
    if (!qemu_thread_equal(&me, &io_thread)) {
3972
        qemu_system_vmstop_request(reason);
3973
        /*
3974
         * FIXME: should not return to device code in case
3975
         * vm_stop() has been requested.
3976
         */
3977
        if (cpu_single_env) {
3978
            cpu_exit(cpu_single_env);
3979
            cpu_single_env->stop = 1;
3980
        }
3981
        return;
3982
    }
3983
    do_vm_stop(reason);
3984
}
3985

    
3986
#endif
3987

    
3988

    
3989
#ifdef _WIN32
3990
static void host_main_loop_wait(int *timeout)
3991
{
3992
    int ret, ret2, i;
3993
    PollingEntry *pe;
3994

    
3995

    
3996
    /* XXX: need to suppress polling by better using win32 events */
3997
    ret = 0;
3998
    for(pe = first_polling_entry; pe != NULL; pe = pe->next) {
3999
        ret |= pe->func(pe->opaque);
4000
    }
4001
    if (ret == 0) {
4002
        int err;
4003
        WaitObjects *w = &wait_objects;
4004

    
4005
        ret = WaitForMultipleObjects(w->num, w->events, FALSE, *timeout);
4006
        if (WAIT_OBJECT_0 + 0 <= ret && ret <= WAIT_OBJECT_0 + w->num - 1) {
4007
            if (w->func[ret - WAIT_OBJECT_0])
4008
                w->func[ret - WAIT_OBJECT_0](w->opaque[ret - WAIT_OBJECT_0]);
4009

    
4010
            /* Check for additional signaled events */
4011
            for(i = (ret - WAIT_OBJECT_0 + 1); i < w->num; i++) {
4012

    
4013
                /* Check if event is signaled */
4014
                ret2 = WaitForSingleObject(w->events[i], 0);
4015
                if(ret2 == WAIT_OBJECT_0) {
4016
                    if (w->func[i])
4017
                        w->func[i](w->opaque[i]);
4018
                } else if (ret2 == WAIT_TIMEOUT) {
4019
                } else {
4020
                    err = GetLastError();
4021
                    fprintf(stderr, "WaitForSingleObject error %d %d\n", i, err);
4022
                }
4023
            }
4024
        } else if (ret == WAIT_TIMEOUT) {
4025
        } else {
4026
            err = GetLastError();
4027
            fprintf(stderr, "WaitForMultipleObjects error %d %d\n", ret, err);
4028
        }
4029
    }
4030

    
4031
    *timeout = 0;
4032
}
4033
#else
4034
static void host_main_loop_wait(int *timeout)
4035
{
4036
}
4037
#endif
4038

    
4039
void main_loop_wait(int timeout)
4040
{
4041
    IOHandlerRecord *ioh;
4042
    fd_set rfds, wfds, xfds;
4043
    int ret, nfds;
4044
    struct timeval tv;
4045

    
4046
    qemu_bh_update_timeout(&timeout);
4047

    
4048
    host_main_loop_wait(&timeout);
4049

    
4050
    /* poll any events */
4051
    /* XXX: separate device handlers from system ones */
4052
    nfds = -1;
4053
    FD_ZERO(&rfds);
4054
    FD_ZERO(&wfds);
4055
    FD_ZERO(&xfds);
4056
    for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
4057
        if (ioh->deleted)
4058
            continue;
4059
        if (ioh->fd_read &&
4060
            (!ioh->fd_read_poll ||
4061
             ioh->fd_read_poll(ioh->opaque) != 0)) {
4062
            FD_SET(ioh->fd, &rfds);
4063
            if (ioh->fd > nfds)
4064
                nfds = ioh->fd;
4065
        }
4066
        if (ioh->fd_write) {
4067
            FD_SET(ioh->fd, &wfds);
4068
            if (ioh->fd > nfds)
4069
                nfds = ioh->fd;
4070
        }
4071
    }
4072

    
4073
    tv.tv_sec = timeout / 1000;
4074
    tv.tv_usec = (timeout % 1000) * 1000;
4075

    
4076
    slirp_select_fill(&nfds, &rfds, &wfds, &xfds);
4077

    
4078
    qemu_mutex_unlock_iothread();
4079
    ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv);
4080
    qemu_mutex_lock_iothread();
4081
    if (ret > 0) {
4082
        IOHandlerRecord **pioh;
4083

    
4084
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
4085
            if (!ioh->deleted && ioh->fd_read && FD_ISSET(ioh->fd, &rfds)) {
4086
                ioh->fd_read(ioh->opaque);
4087
            }
4088
            if (!ioh->deleted && ioh->fd_write && FD_ISSET(ioh->fd, &wfds)) {
4089
                ioh->fd_write(ioh->opaque);
4090
            }
4091
        }
4092

    
4093
        /* remove deleted IO handlers */
4094
        pioh = &first_io_handler;
4095
        while (*pioh) {
4096
            ioh = *pioh;
4097
            if (ioh->deleted) {
4098
                *pioh = ioh->next;
4099
                qemu_free(ioh);
4100
            } else
4101
                pioh = &ioh->next;
4102
        }
4103
    }
4104

    
4105
    slirp_select_poll(&rfds, &wfds, &xfds, (ret < 0));
4106

    
4107
    /* rearm timer, if not periodic */
4108
    if (alarm_timer->flags & ALARM_FLAG_EXPIRED) {
4109
        alarm_timer->flags &= ~ALARM_FLAG_EXPIRED;
4110
        qemu_rearm_alarm_timer(alarm_timer);
4111
    }
4112

    
4113
    /* vm time timers */
4114
    if (vm_running) {
4115
        if (!cur_cpu || likely(!(cur_cpu->singlestep_enabled & SSTEP_NOTIMER)))
4116
            qemu_run_timers(&active_timers[QEMU_TIMER_VIRTUAL],
4117
                qemu_get_clock(vm_clock));
4118
    }
4119

    
4120
    /* real time timers */
4121
    qemu_run_timers(&active_timers[QEMU_TIMER_REALTIME],
4122
                    qemu_get_clock(rt_clock));
4123

    
4124
    /* Check bottom-halves last in case any of the earlier events triggered
4125
       them.  */
4126
    qemu_bh_poll();
4127

    
4128
}
4129

    
4130
static int qemu_cpu_exec(CPUState *env)
4131
{
4132
    int ret;
4133
#ifdef CONFIG_PROFILER
4134
    int64_t ti;
4135
#endif
4136

    
4137
#ifdef CONFIG_PROFILER
4138
    ti = profile_getclock();
4139
#endif
4140
    if (use_icount) {
4141
        int64_t count;
4142
        int decr;
4143
        qemu_icount -= (env->icount_decr.u16.low + env->icount_extra);
4144
        env->icount_decr.u16.low = 0;
4145
        env->icount_extra = 0;
4146
        count = qemu_next_deadline();
4147
        count = (count + (1 << icount_time_shift) - 1)
4148
                >> icount_time_shift;
4149
        qemu_icount += count;
4150
        decr = (count > 0xffff) ? 0xffff : count;
4151
        count -= decr;
4152
        env->icount_decr.u16.low = decr;
4153
        env->icount_extra = count;
4154
    }
4155
    ret = cpu_exec(env);
4156
#ifdef CONFIG_PROFILER
4157
    qemu_time += profile_getclock() - ti;
4158
#endif
4159
    if (use_icount) {
4160
        /* Fold pending instructions back into the
4161
           instruction counter, and clear the interrupt flag.  */
4162
        qemu_icount -= (env->icount_decr.u16.low
4163
                        + env->icount_extra);
4164
        env->icount_decr.u32 = 0;
4165
        env->icount_extra = 0;
4166
    }
4167
    return ret;
4168
}
4169

    
4170
static void tcg_cpu_exec(void)
4171
{
4172
    int ret = 0;
4173

    
4174
    if (next_cpu == NULL)
4175
        next_cpu = first_cpu;
4176
    for (; next_cpu != NULL; next_cpu = next_cpu->next_cpu) {
4177
        CPUState *env = cur_cpu = next_cpu;
4178

    
4179
        if (!vm_running)
4180
            break;
4181
        if (timer_alarm_pending) {
4182
            timer_alarm_pending = 0;
4183
            break;
4184
        }
4185
        if (cpu_can_run(env))
4186
            ret = qemu_cpu_exec(env);
4187
        if (ret == EXCP_DEBUG) {
4188
            gdb_set_stop_cpu(env);
4189
            debug_requested = 1;
4190
            break;
4191
        }
4192
    }
4193
}
4194

    
4195
static int cpu_has_work(CPUState *env)
4196
{
4197
    if (env->stop)
4198
        return 1;
4199
    if (env->stopped)
4200
        return 0;
4201
    if (!env->halted)
4202
        return 1;
4203
    if (qemu_cpu_has_work(env))
4204
        return 1;
4205
    return 0;
4206
}
4207

    
4208
static int tcg_has_work(void)
4209
{
4210
    CPUState *env;
4211

    
4212
    for (env = first_cpu; env != NULL; env = env->next_cpu)
4213
        if (cpu_has_work(env))
4214
            return 1;
4215
    return 0;
4216
}
4217

    
4218
static int qemu_calculate_timeout(void)
4219
{
4220
#ifndef CONFIG_IOTHREAD
4221
    int timeout;
4222

    
4223
    if (!vm_running)
4224
        timeout = 5000;
4225
    else if (tcg_has_work())
4226
        timeout = 0;
4227
    else if (!use_icount)
4228
        timeout = 5000;
4229
    else {
4230
     /* XXX: use timeout computed from timers */
4231
        int64_t add;
4232
        int64_t delta;
4233
        /* Advance virtual time to the next event.  */
4234
        if (use_icount == 1) {
4235
            /* When not using an adaptive execution frequency
4236
               we tend to get badly out of sync with real time,
4237
               so just delay for a reasonable amount of time.  */
4238
            delta = 0;
4239
        } else {
4240
            delta = cpu_get_icount() - cpu_get_clock();
4241
        }
4242
        if (delta > 0) {
4243
            /* If virtual time is ahead of real time then just
4244
               wait for IO.  */
4245
            timeout = (delta / 1000000) + 1;
4246
        } else {
4247
            /* Wait for either IO to occur or the next
4248
               timer event.  */
4249
            add = qemu_next_deadline();
4250
            /* We advance the timer before checking for IO.
4251
               Limit the amount we advance so that early IO
4252
               activity won't get the guest too far ahead.  */
4253
            if (add > 10000000)
4254
                add = 10000000;
4255
            delta += add;
4256
            add = (add + (1 << icount_time_shift) - 1)
4257
                  >> icount_time_shift;
4258
            qemu_icount += add;
4259
            timeout = delta / 1000000;
4260
            if (timeout < 0)
4261
                timeout = 0;
4262
        }
4263
    }
4264

    
4265
    return timeout;
4266
#else /* CONFIG_IOTHREAD */
4267
    return 1000;
4268
#endif
4269
}
4270

    
4271
static int vm_can_run(void)
4272
{
4273
    if (powerdown_requested)
4274
        return 0;
4275
    if (reset_requested)
4276
        return 0;
4277
    if (shutdown_requested)
4278
        return 0;
4279
    if (debug_requested)
4280
        return 0;
4281
    return 1;
4282
}
4283

    
4284
qemu_irq qemu_system_powerdown;
4285

    
4286
static void main_loop(void)
4287
{
4288
    int r;
4289

    
4290
#ifdef CONFIG_IOTHREAD
4291
    qemu_system_ready = 1;
4292
    qemu_cond_broadcast(&qemu_system_cond);
4293
#endif
4294

    
4295
    for (;;) {
4296
        do {
4297
#ifdef CONFIG_PROFILER
4298
            int64_t ti;
4299
#endif
4300
#ifndef CONFIG_IOTHREAD
4301
            tcg_cpu_exec();
4302
#endif
4303
#ifdef CONFIG_PROFILER
4304
            ti = profile_getclock();
4305
#endif
4306
            main_loop_wait(qemu_calculate_timeout());
4307
#ifdef CONFIG_PROFILER
4308
            dev_time += profile_getclock() - ti;
4309
#endif
4310
        } while (vm_can_run());
4311

    
4312
        if (qemu_debug_requested())
4313
            vm_stop(EXCP_DEBUG);
4314
        if (qemu_shutdown_requested()) {
4315
            if (no_shutdown) {
4316
                vm_stop(0);
4317
                no_shutdown = 0;
4318
            } else
4319
                break;
4320
        }
4321
        if (qemu_reset_requested()) {
4322
            pause_all_vcpus();
4323
            qemu_system_reset();
4324
            resume_all_vcpus();
4325
        }
4326
        if (qemu_powerdown_requested()) {
4327
            qemu_irq_raise(qemu_system_powerdown);
4328
        }
4329
        if ((r = qemu_vmstop_requested()))
4330
            vm_stop(r);
4331
    }
4332
    pause_all_vcpus();
4333
}
4334

    
4335
static void version(void)
4336
{
4337
    printf("QEMU PC emulator version " QEMU_VERSION QEMU_PKGVERSION ", Copyright (c) 2003-2008 Fabrice Bellard\n");
4338
}
4339

    
4340
static void help(int exitcode)
4341
{
4342
    version();
4343
    printf("usage: %s [options] [disk_image]\n"
4344
           "\n"
4345
           "'disk_image' is a raw hard image image for IDE hard disk 0\n"
4346
           "\n"
4347
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4348
           opt_help
4349
#define DEFHEADING(text) stringify(text) "\n"
4350
#include "qemu-options.h"
4351
#undef DEF
4352
#undef DEFHEADING
4353
#undef GEN_DOCS
4354
           "\n"
4355
           "During emulation, the following keys are useful:\n"
4356
           "ctrl-alt-f      toggle full screen\n"
4357
           "ctrl-alt-n      switch to virtual console 'n'\n"
4358
           "ctrl-alt        toggle mouse and keyboard grab\n"
4359
           "\n"
4360
           "When using -nographic, press 'ctrl-a h' to get some help.\n"
4361
           ,
4362
           "qemu",
4363
           DEFAULT_RAM_SIZE,
4364
#ifndef _WIN32
4365
           DEFAULT_NETWORK_SCRIPT,
4366
           DEFAULT_NETWORK_DOWN_SCRIPT,
4367
#endif
4368
           DEFAULT_GDBSTUB_PORT,
4369
           "/tmp/qemu.log");
4370
    exit(exitcode);
4371
}
4372

    
4373
#define HAS_ARG 0x0001
4374

    
4375
enum {
4376
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4377
    opt_enum,
4378
#define DEFHEADING(text)
4379
#include "qemu-options.h"
4380
#undef DEF
4381
#undef DEFHEADING
4382
#undef GEN_DOCS
4383
};
4384

    
4385
typedef struct QEMUOption {
4386
    const char *name;
4387
    int flags;
4388
    int index;
4389
} QEMUOption;
4390

    
4391
static const QEMUOption qemu_options[] = {
4392
    { "h", 0, QEMU_OPTION_h },
4393
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4394
    { option, opt_arg, opt_enum },
4395
#define DEFHEADING(text)
4396
#include "qemu-options.h"
4397
#undef DEF
4398
#undef DEFHEADING
4399
#undef GEN_DOCS
4400
    { NULL },
4401
};
4402

    
4403
#ifdef HAS_AUDIO
4404
struct soundhw soundhw[] = {
4405
#ifdef HAS_AUDIO_CHOICE
4406
#if defined(TARGET_I386) || defined(TARGET_MIPS)
4407
    {
4408
        "pcspk",
4409
        "PC speaker",
4410
        0,
4411
        1,
4412
        { .init_isa = pcspk_audio_init }
4413
    },
4414
#endif
4415

    
4416
#ifdef CONFIG_SB16
4417
    {
4418
        "sb16",
4419
        "Creative Sound Blaster 16",
4420
        0,
4421
        1,
4422
        { .init_isa = SB16_init }
4423
    },
4424
#endif
4425

    
4426
#ifdef CONFIG_CS4231A
4427
    {
4428
        "cs4231a",
4429
        "CS4231A",
4430
        0,
4431
        1,
4432
        { .init_isa = cs4231a_init }
4433
    },
4434
#endif
4435

    
4436
#ifdef CONFIG_ADLIB
4437
    {
4438
        "adlib",
4439
#ifdef HAS_YMF262
4440
        "Yamaha YMF262 (OPL3)",
4441
#else
4442
        "Yamaha YM3812 (OPL2)",
4443
#endif
4444
        0,
4445
        1,
4446
        { .init_isa = Adlib_init }
4447
    },
4448
#endif
4449

    
4450
#ifdef CONFIG_GUS
4451
    {
4452
        "gus",
4453
        "Gravis Ultrasound GF1",
4454
        0,
4455
        1,
4456
        { .init_isa = GUS_init }
4457
    },
4458
#endif
4459

    
4460
#ifdef CONFIG_AC97
4461
    {
4462
        "ac97",
4463
        "Intel 82801AA AC97 Audio",
4464
        0,
4465
        0,
4466
        { .init_pci = ac97_init }
4467
    },
4468
#endif
4469

    
4470
#ifdef CONFIG_ES1370
4471
    {
4472
        "es1370",
4473
        "ENSONIQ AudioPCI ES1370",
4474
        0,
4475
        0,
4476
        { .init_pci = es1370_init }
4477
    },
4478
#endif
4479

    
4480
#endif /* HAS_AUDIO_CHOICE */
4481

    
4482
    { NULL, NULL, 0, 0, { NULL } }
4483
};
4484

    
4485
static void select_soundhw (const char *optarg)
4486
{
4487
    struct soundhw *c;
4488

    
4489
    if (*optarg == '?') {
4490
    show_valid_cards:
4491

    
4492
        printf ("Valid sound card names (comma separated):\n");
4493
        for (c = soundhw; c->name; ++c) {
4494
            printf ("%-11s %s\n", c->name, c->descr);
4495
        }
4496
        printf ("\n-soundhw all will enable all of the above\n");
4497
        exit (*optarg != '?');
4498
    }
4499
    else {
4500
        size_t l;
4501
        const char *p;
4502
        char *e;
4503
        int bad_card = 0;
4504

    
4505
        if (!strcmp (optarg, "all")) {
4506
            for (c = soundhw; c->name; ++c) {
4507
                c->enabled = 1;
4508
            }
4509
            return;
4510
        }
4511

    
4512
        p = optarg;
4513
        while (*p) {
4514
            e = strchr (p, ',');
4515
            l = !e ? strlen (p) : (size_t) (e - p);
4516

    
4517
            for (c = soundhw; c->name; ++c) {
4518
                if (!strncmp (c->name, p, l)) {
4519
                    c->enabled = 1;
4520
                    break;
4521
                }
4522
            }
4523

    
4524
            if (!c->name) {
4525
                if (l > 80) {
4526
                    fprintf (stderr,
4527
                             "Unknown sound card name (too big to show)\n");
4528
                }
4529
                else {
4530
                    fprintf (stderr, "Unknown sound card name `%.*s'\n",
4531
                             (int) l, p);
4532
                }
4533
                bad_card = 1;
4534
            }
4535
            p += l + (e != NULL);
4536
        }
4537

    
4538
        if (bad_card)
4539
            goto show_valid_cards;
4540
    }
4541
}
4542
#endif
4543

    
4544
static void select_vgahw (const char *p)
4545
{
4546
    const char *opts;
4547

    
4548
    cirrus_vga_enabled = 0;
4549
    std_vga_enabled = 0;
4550
    vmsvga_enabled = 0;
4551
    xenfb_enabled = 0;
4552
    if (strstart(p, "std", &opts)) {
4553
        std_vga_enabled = 1;
4554
    } else if (strstart(p, "cirrus", &opts)) {
4555
        cirrus_vga_enabled = 1;
4556
    } else if (strstart(p, "vmware", &opts)) {
4557
        vmsvga_enabled = 1;
4558
    } else if (strstart(p, "xenfb", &opts)) {
4559
        xenfb_enabled = 1;
4560
    } else if (!strstart(p, "none", &opts)) {
4561
    invalid_vga:
4562
        fprintf(stderr, "Unknown vga type: %s\n", p);
4563
        exit(1);
4564
    }
4565
    while (*opts) {
4566
        const char *nextopt;
4567

    
4568
        if (strstart(opts, ",retrace=", &nextopt)) {
4569
            opts = nextopt;
4570
            if (strstart(opts, "dumb", &nextopt))
4571
                vga_retrace_method = VGA_RETRACE_DUMB;
4572
            else if (strstart(opts, "precise", &nextopt))
4573
                vga_retrace_method = VGA_RETRACE_PRECISE;
4574
            else goto invalid_vga;
4575
        } else goto invalid_vga;
4576
        opts = nextopt;
4577
    }
4578
}
4579

    
4580
#ifdef TARGET_I386
4581
static int balloon_parse(const char *arg)
4582
{
4583
    char buf[128];
4584
    const char *p;
4585

    
4586
    if (!strcmp(arg, "none")) {
4587
        virtio_balloon = 0;
4588
    } else if (!strncmp(arg, "virtio", 6)) {
4589
        virtio_balloon = 1;
4590
        if (arg[6] == ',')  {
4591
            p = arg + 7;
4592
            if (get_param_value(buf, sizeof(buf), "addr", p)) {
4593
                virtio_balloon_devaddr = strdup(buf);
4594
            }
4595
        }
4596
    } else {
4597
        return -1;
4598
    }
4599
    return 0;
4600
}
4601
#endif
4602

    
4603
#ifdef _WIN32
4604
static BOOL WINAPI qemu_ctrl_handler(DWORD type)
4605
{
4606
    exit(STATUS_CONTROL_C_EXIT);
4607
    return TRUE;
4608
}
4609
#endif
4610

    
4611
int qemu_uuid_parse(const char *str, uint8_t *uuid)
4612
{
4613
    int ret;
4614

    
4615
    if(strlen(str) != 36)
4616
        return -1;
4617

    
4618
    ret = sscanf(str, UUID_FMT, &uuid[0], &uuid[1], &uuid[2], &uuid[3],
4619
            &uuid[4], &uuid[5], &uuid[6], &uuid[7], &uuid[8], &uuid[9],
4620
            &uuid[10], &uuid[11], &uuid[12], &uuid[13], &uuid[14], &uuid[15]);
4621

    
4622
    if(ret != 16)
4623
        return -1;
4624

    
4625
#ifdef TARGET_I386
4626
    smbios_add_field(1, offsetof(struct smbios_type_1, uuid), 16, uuid);
4627
#endif
4628

    
4629
    return 0;
4630
}
4631

    
4632
#define MAX_NET_CLIENTS 32
4633

    
4634
#ifndef _WIN32
4635

    
4636
static void termsig_handler(int signal)
4637
{
4638
    qemu_system_shutdown_request();
4639
}
4640

    
4641
static void sigchld_handler(int signal)
4642
{
4643
    waitpid(-1, NULL, WNOHANG);
4644
}
4645

    
4646
static void sighandler_setup(void)
4647
{
4648
    struct sigaction act;
4649

    
4650
    memset(&act, 0, sizeof(act));
4651
    act.sa_handler = termsig_handler;
4652
    sigaction(SIGINT,  &act, NULL);
4653
    sigaction(SIGHUP,  &act, NULL);
4654
    sigaction(SIGTERM, &act, NULL);
4655

    
4656
    act.sa_handler = sigchld_handler;
4657
    act.sa_flags = SA_NOCLDSTOP;
4658
    sigaction(SIGCHLD, &act, NULL);
4659
}
4660

    
4661
#endif
4662

    
4663
#ifdef _WIN32
4664
/* Look for support files in the same directory as the executable.  */
4665
static char *find_datadir(const char *argv0)
4666
{
4667
    char *p;
4668
    char buf[MAX_PATH];
4669
    DWORD len;
4670

    
4671
    len = GetModuleFileName(NULL, buf, sizeof(buf) - 1);
4672
    if (len == 0) {
4673
        return NULL;
4674
    }
4675

    
4676
    buf[len] = 0;
4677
    p = buf + len - 1;
4678
    while (p != buf && *p != '\\')
4679
        p--;
4680
    *p = 0;
4681
    if (access(buf, R_OK) == 0) {
4682
        return qemu_strdup(buf);
4683
    }
4684
    return NULL;
4685
}
4686
#else /* !_WIN32 */
4687

    
4688
/* Find a likely location for support files using the location of the binary.
4689
   For installed binaries this will be "$bindir/../share/qemu".  When
4690
   running from the build tree this will be "$bindir/../pc-bios".  */
4691
#define SHARE_SUFFIX "/share/qemu"
4692
#define BUILD_SUFFIX "/pc-bios"
4693
static char *find_datadir(const char *argv0)
4694
{
4695
    char *dir;
4696
    char *p = NULL;
4697
    char *res;
4698
#ifdef PATH_MAX
4699
    char buf[PATH_MAX];
4700
#endif
4701
    size_t max_len;
4702

    
4703
#if defined(__linux__)
4704
    {
4705
        int len;
4706
        len = readlink("/proc/self/exe", buf, sizeof(buf) - 1);
4707
        if (len > 0) {
4708
            buf[len] = 0;
4709
            p = buf;
4710
        }
4711
    }
4712
#elif defined(__FreeBSD__)
4713
    {
4714
        int len;
4715
        len = readlink("/proc/curproc/file", buf, sizeof(buf) - 1);
4716
        if (len > 0) {
4717
            buf[len] = 0;
4718
            p = buf;
4719
        }
4720
    }
4721
#endif
4722
    /* If we don't have any way of figuring out the actual executable
4723
       location then try argv[0].  */
4724
    if (!p) {
4725
#ifdef PATH_MAX
4726
        p = buf;
4727
#endif
4728
        p = realpath(argv0, p);
4729
        if (!p) {
4730
            return NULL;
4731
        }
4732
    }
4733
    dir = dirname(p);
4734
    dir = dirname(dir);
4735

    
4736
    max_len = strlen(dir) +
4737
        MAX(strlen(SHARE_SUFFIX), strlen(BUILD_SUFFIX)) + 1;
4738
    res = qemu_mallocz(max_len);
4739
    snprintf(res, max_len, "%s%s", dir, SHARE_SUFFIX);
4740
    if (access(res, R_OK)) {
4741
        snprintf(res, max_len, "%s%s", dir, BUILD_SUFFIX);
4742
        if (access(res, R_OK)) {
4743
            qemu_free(res);
4744
            res = NULL;
4745
        }
4746
    }
4747
#ifndef PATH_MAX
4748
    free(p);
4749
#endif
4750
    return res;
4751
}
4752
#undef SHARE_SUFFIX
4753
#undef BUILD_SUFFIX
4754
#endif
4755

    
4756
char *qemu_find_file(int type, const char *name)
4757
{
4758
    int len;
4759
    const char *subdir;
4760
    char *buf;
4761

    
4762
    /* If name contains path separators then try it as a straight path.  */
4763
    if ((strchr(name, '/') || strchr(name, '\\'))
4764
        && access(name, R_OK) == 0) {
4765
        return strdup(name);
4766
    }
4767
    switch (type) {
4768
    case QEMU_FILE_TYPE_BIOS:
4769
        subdir = "";
4770
        break;
4771
    case QEMU_FILE_TYPE_KEYMAP:
4772
        subdir = "keymaps/";
4773
        break;
4774
    default:
4775
        abort();
4776
    }
4777
    len = strlen(data_dir) + strlen(name) + strlen(subdir) + 2;
4778
    buf = qemu_mallocz(len);
4779
    snprintf(buf, len, "%s/%s%s", data_dir, subdir, name);
4780
    if (access(buf, R_OK)) {
4781
        qemu_free(buf);
4782
        return NULL;
4783
    }
4784
    return buf;
4785
}
4786

    
4787
struct device_config {
4788
    enum {
4789
        DEV_GENERIC,   /* -device      */
4790
        DEV_USB,       /* -usbdevice   */
4791
        DEV_BT,        /* -bt          */
4792
    } type;
4793
    const char *cmdline;
4794
    TAILQ_ENTRY(device_config) next;
4795
};
4796
TAILQ_HEAD(, device_config) device_configs = TAILQ_HEAD_INITIALIZER(device_configs);
4797

    
4798
static void add_device_config(int type, const char *cmdline)
4799
{
4800
    struct device_config *conf;
4801

    
4802
    conf = qemu_mallocz(sizeof(*conf));
4803
    conf->type = type;
4804
    conf->cmdline = cmdline;
4805
    TAILQ_INSERT_TAIL(&device_configs, conf, next);
4806
}
4807

    
4808
static int foreach_device_config(int type, int (*func)(const char *cmdline))
4809
{
4810
    struct device_config *conf;
4811
    int rc;
4812

    
4813
    TAILQ_FOREACH(conf, &device_configs, next) {
4814
        if (conf->type != type)
4815
            continue;
4816
        rc = func(conf->cmdline);
4817
        if (0 != rc)
4818
            return rc;
4819
    }
4820
    return 0;
4821
}
4822

    
4823
static int generic_parse(const char *cmdline)
4824
{
4825
    DeviceState *dev;
4826

    
4827
    dev = qdev_device_add(cmdline);
4828
    if (!dev)
4829
        return -1;
4830
    return 0;
4831
}
4832

    
4833
int main(int argc, char **argv, char **envp)
4834
{
4835
    const char *gdbstub_dev = NULL;
4836
    uint32_t boot_devices_bitmap = 0;
4837
    int i;
4838
    int snapshot, linux_boot, net_boot;
4839
    const char *initrd_filename;
4840
    const char *kernel_filename, *kernel_cmdline;
4841
    char boot_devices[33] = "cad"; /* default to HD->floppy->CD-ROM */
4842
    DisplayState *ds;
4843
    DisplayChangeListener *dcl;
4844
    int cyls, heads, secs, translation;
4845
    const char *net_clients[MAX_NET_CLIENTS];
4846
    int nb_net_clients;
4847
    QemuOpts *hda_opts = NULL;
4848
    int optind;
4849
    const char *r, *optarg;
4850
    CharDriverState *monitor_hd = NULL;
4851
    const char *monitor_device;
4852
    const char *serial_devices[MAX_SERIAL_PORTS];
4853
    int serial_device_index;
4854
    const char *parallel_devices[MAX_PARALLEL_PORTS];
4855
    int parallel_device_index;
4856
    const char *virtio_consoles[MAX_VIRTIO_CONSOLES];
4857
    int virtio_console_index;
4858
    const char *loadvm = NULL;
4859
    QEMUMachine *machine;
4860
    const char *cpu_model;
4861
#ifndef _WIN32
4862
    int fds[2];
4863
#endif
4864
    int tb_size;
4865
    const char *pid_file = NULL;
4866
    const char *incoming = NULL;
4867
#ifndef _WIN32
4868
    int fd = 0;
4869
    struct passwd *pwd = NULL;
4870
    const char *chroot_dir = NULL;
4871
    const char *run_as = NULL;
4872
#endif
4873
    CPUState *env;
4874
    int show_vnc_port = 0;
4875

    
4876
    qemu_cache_utils_init(envp);
4877

    
4878
    LIST_INIT (&vm_change_state_head);
4879
#ifndef _WIN32
4880
    {
4881
        struct sigaction act;
4882
        sigfillset(&act.sa_mask);
4883
        act.sa_flags = 0;
4884
        act.sa_handler = SIG_IGN;
4885
        sigaction(SIGPIPE, &act, NULL);
4886
    }
4887
#else
4888
    SetConsoleCtrlHandler(qemu_ctrl_handler, TRUE);
4889
    /* Note: cpu_interrupt() is currently not SMP safe, so we force
4890
       QEMU to run on a single CPU */
4891
    {
4892
        HANDLE h;
4893
        DWORD mask, smask;
4894
        int i;
4895
        h = GetCurrentProcess();
4896
        if (GetProcessAffinityMask(h, &mask, &smask)) {
4897
            for(i = 0; i < 32; i++) {
4898
                if (mask & (1 << i))
4899
                    break;
4900
            }
4901
            if (i != 32) {
4902
                mask = 1 << i;
4903
                SetProcessAffinityMask(h, mask);
4904
            }
4905
        }
4906
    }
4907
#endif
4908

    
4909
    module_call_init(MODULE_INIT_MACHINE);
4910
    machine = find_default_machine();
4911
    cpu_model = NULL;
4912
    initrd_filename = NULL;
4913
    ram_size = 0;
4914
    snapshot = 0;
4915
    kernel_filename = NULL;
4916
    kernel_cmdline = "";
4917
    cyls = heads = secs = 0;
4918
    translation = BIOS_ATA_TRANSLATION_AUTO;
4919
    monitor_device = "vc:80Cx24C";
4920

    
4921
    serial_devices[0] = "vc:80Cx24C";
4922
    for(i = 1; i < MAX_SERIAL_PORTS; i++)
4923
        serial_devices[i] = NULL;
4924
    serial_device_index = 0;
4925

    
4926
    parallel_devices[0] = "vc:80Cx24C";
4927
    for(i = 1; i < MAX_PARALLEL_PORTS; i++)
4928
        parallel_devices[i] = NULL;
4929
    parallel_device_index = 0;
4930

    
4931
    for(i = 0; i < MAX_VIRTIO_CONSOLES; i++)
4932
        virtio_consoles[i] = NULL;
4933
    virtio_console_index = 0;
4934

    
4935
    for (i = 0; i < MAX_NODES; i++) {
4936
        node_mem[i] = 0;
4937
        node_cpumask[i] = 0;
4938
    }
4939

    
4940
    nb_net_clients = 0;
4941
    nb_numa_nodes = 0;
4942
    nb_nics = 0;
4943

    
4944
    tb_size = 0;
4945
    autostart= 1;
4946

    
4947
    register_watchdogs();
4948

    
4949
    optind = 1;
4950
    for(;;) {
4951
        if (optind >= argc)
4952
            break;
4953
        r = argv[optind];
4954
        if (r[0] != '-') {
4955
            hda_opts = drive_add(argv[optind++], HD_ALIAS, 0);
4956
        } else {
4957
            const QEMUOption *popt;
4958

    
4959
            optind++;
4960
            /* Treat --foo the same as -foo.  */
4961
            if (r[1] == '-')
4962
                r++;
4963
            popt = qemu_options;
4964
            for(;;) {
4965
                if (!popt->name) {
4966
                    fprintf(stderr, "%s: invalid option -- '%s'\n",
4967
                            argv[0], r);
4968
                    exit(1);
4969
                }
4970
                if (!strcmp(popt->name, r + 1))
4971
                    break;
4972
                popt++;
4973
            }
4974
            if (popt->flags & HAS_ARG) {
4975
                if (optind >= argc) {
4976
                    fprintf(stderr, "%s: option '%s' requires an argument\n",
4977
                            argv[0], r);
4978
                    exit(1);
4979
                }
4980
                optarg = argv[optind++];
4981
            } else {
4982
                optarg = NULL;
4983
            }
4984

    
4985
            switch(popt->index) {
4986
            case QEMU_OPTION_M:
4987
                machine = find_machine(optarg);
4988
                if (!machine) {
4989
                    QEMUMachine *m;
4990
                    printf("Supported machines are:\n");
4991
                    for(m = first_machine; m != NULL; m = m->next) {
4992
                        if (m->alias)
4993
                            printf("%-10s %s (alias of %s)\n",
4994
                                   m->alias, m->desc, m->name);
4995
                        printf("%-10s %s%s\n",
4996
                               m->name, m->desc,
4997
                               m->is_default ? " (default)" : "");
4998
                    }
4999
                    exit(*optarg != '?');
5000
                }
5001
                break;
5002
            case QEMU_OPTION_cpu:
5003
                /* hw initialization will check this */
5004
                if (*optarg == '?') {
5005
/* XXX: implement xxx_cpu_list for targets that still miss it */
5006
#if defined(cpu_list)
5007
                    cpu_list(stdout, &fprintf);
5008
#endif
5009
                    exit(0);
5010
                } else {
5011
                    cpu_model = optarg;
5012
                }
5013
                break;
5014
            case QEMU_OPTION_initrd:
5015
                initrd_filename = optarg;
5016
                break;
5017
            case QEMU_OPTION_hda:
5018
                if (cyls == 0)
5019
                    hda_opts = drive_add(optarg, HD_ALIAS, 0);
5020
                else
5021
                    hda_opts = drive_add(optarg, HD_ALIAS
5022
                             ",cyls=%d,heads=%d,secs=%d%s",
5023
                             0, cyls, heads, secs,
5024
                             translation == BIOS_ATA_TRANSLATION_LBA ?
5025
                                 ",trans=lba" :
5026
                             translation == BIOS_ATA_TRANSLATION_NONE ?
5027
                                 ",trans=none" : "");
5028
                 break;
5029
            case QEMU_OPTION_hdb:
5030
            case QEMU_OPTION_hdc:
5031
            case QEMU_OPTION_hdd:
5032
                drive_add(optarg, HD_ALIAS, popt->index - QEMU_OPTION_hda);
5033
                break;
5034
            case QEMU_OPTION_drive:
5035
                drive_add(NULL, "%s", optarg);
5036
                break;
5037
            case QEMU_OPTION_mtdblock:
5038
                drive_add(optarg, MTD_ALIAS);
5039
                break;
5040
            case QEMU_OPTION_sd:
5041
                drive_add(optarg, SD_ALIAS);
5042
                break;
5043
            case QEMU_OPTION_pflash:
5044
                drive_add(optarg, PFLASH_ALIAS);
5045
                break;
5046
            case QEMU_OPTION_snapshot:
5047
                snapshot = 1;
5048
                break;
5049
            case QEMU_OPTION_hdachs:
5050
                {
5051
                    const char *p;
5052
                    p = optarg;
5053
                    cyls = strtol(p, (char **)&p, 0);
5054
                    if (cyls < 1 || cyls > 16383)
5055
                        goto chs_fail;
5056
                    if (*p != ',')
5057
                        goto chs_fail;
5058
                    p++;
5059
                    heads = strtol(p, (char **)&p, 0);
5060
                    if (heads < 1 || heads > 16)
5061
                        goto chs_fail;
5062
                    if (*p != ',')
5063
                        goto chs_fail;
5064
                    p++;
5065
                    secs = strtol(p, (char **)&p, 0);
5066
                    if (secs < 1 || secs > 63)
5067
                        goto chs_fail;
5068
                    if (*p == ',') {
5069
                        p++;
5070
                        if (!strcmp(p, "none"))
5071
                            translation = BIOS_ATA_TRANSLATION_NONE;
5072
                        else if (!strcmp(p, "lba"))
5073
                            translation = BIOS_ATA_TRANSLATION_LBA;
5074
                        else if (!strcmp(p, "auto"))
5075
                            translation = BIOS_ATA_TRANSLATION_AUTO;
5076
                        else
5077
                            goto chs_fail;
5078
                    } else if (*p != '\0') {
5079
                    chs_fail:
5080
                        fprintf(stderr, "qemu: invalid physical CHS format\n");
5081
                        exit(1);
5082
                    }
5083
                    if (hda_opts != NULL) {
5084
                        char num[16];
5085
                        snprintf(num, sizeof(num), "%d", cyls);
5086
                        qemu_opt_set(hda_opts, "cyls", num);
5087
                        snprintf(num, sizeof(num), "%d", heads);
5088
                        qemu_opt_set(hda_opts, "heads", num);
5089
                        snprintf(num, sizeof(num), "%d", secs);
5090
                        qemu_opt_set(hda_opts, "secs", num);
5091
                        if (translation == BIOS_ATA_TRANSLATION_LBA)
5092
                            qemu_opt_set(hda_opts, "trans", "lba");
5093
                        if (translation == BIOS_ATA_TRANSLATION_NONE)
5094
                            qemu_opt_set(hda_opts, "trans", "none");
5095
                    }
5096
                }
5097
                break;
5098
            case QEMU_OPTION_numa:
5099
                if (nb_numa_nodes >= MAX_NODES) {
5100
                    fprintf(stderr, "qemu: too many NUMA nodes\n");
5101
                    exit(1);
5102
                }
5103
                numa_add(optarg);
5104
                break;
5105
            case QEMU_OPTION_nographic:
5106
                display_type = DT_NOGRAPHIC;
5107
                break;
5108
#ifdef CONFIG_CURSES
5109
            case QEMU_OPTION_curses:
5110
                display_type = DT_CURSES;
5111
                break;
5112
#endif
5113
            case QEMU_OPTION_portrait:
5114
                graphic_rotate = 1;
5115
                break;
5116
            case QEMU_OPTION_kernel:
5117
                kernel_filename = optarg;
5118
                break;
5119
            case QEMU_OPTION_append:
5120
                kernel_cmdline = optarg;
5121
                break;
5122
            case QEMU_OPTION_cdrom:
5123
                drive_add(optarg, CDROM_ALIAS);
5124
                break;
5125
            case QEMU_OPTION_boot:
5126
                {
5127
                    static const char * const params[] = {
5128
                        "order", "once", "menu", NULL
5129
                    };
5130
                    char buf[sizeof(boot_devices)];
5131
                    char *standard_boot_devices;
5132
                    int legacy = 0;
5133

    
5134
                    if (!strchr(optarg, '=')) {
5135
                        legacy = 1;
5136
                        pstrcpy(buf, sizeof(buf), optarg);
5137
                    } else if (check_params(buf, sizeof(buf), params, optarg) < 0) {
5138
                        fprintf(stderr,
5139
                                "qemu: unknown boot parameter '%s' in '%s'\n",
5140
                                buf, optarg);
5141
                        exit(1);
5142
                    }
5143

    
5144
                    if (legacy ||
5145
                        get_param_value(buf, sizeof(buf), "order", optarg)) {
5146
                        boot_devices_bitmap = parse_bootdevices(buf);
5147
                        pstrcpy(boot_devices, sizeof(boot_devices), buf);
5148
                    }
5149
                    if (!legacy) {
5150
                        if (get_param_value(buf, sizeof(buf),
5151
                                            "once", optarg)) {
5152
                            boot_devices_bitmap |= parse_bootdevices(buf);
5153
                            standard_boot_devices = qemu_strdup(boot_devices);
5154
                            pstrcpy(boot_devices, sizeof(boot_devices), buf);
5155
                            qemu_register_reset(restore_boot_devices,
5156
                                                standard_boot_devices);
5157
                        }
5158
                        if (get_param_value(buf, sizeof(buf),
5159
                                            "menu", optarg)) {
5160
                            if (!strcmp(buf, "on")) {
5161
                                boot_menu = 1;
5162
                            } else if (!strcmp(buf, "off")) {
5163
                                boot_menu = 0;
5164
                            } else {
5165
                                fprintf(stderr,
5166
                                        "qemu: invalid option value '%s'\n",
5167
                                        buf);
5168
                                exit(1);
5169
                            }
5170
                        }
5171
                    }
5172
                }
5173
                break;
5174
            case QEMU_OPTION_fda:
5175
            case QEMU_OPTION_fdb:
5176
                drive_add(optarg, FD_ALIAS, popt->index - QEMU_OPTION_fda);
5177
                break;
5178
#ifdef TARGET_I386
5179
            case QEMU_OPTION_no_fd_bootchk:
5180
                fd_bootchk = 0;
5181
                break;
5182
#endif
5183
            case QEMU_OPTION_net:
5184
                if (nb_net_clients >= MAX_NET_CLIENTS) {
5185
                    fprintf(stderr, "qemu: too many network clients\n");
5186
                    exit(1);
5187
                }
5188
                net_clients[nb_net_clients] = optarg;
5189
                nb_net_clients++;
5190
                break;
5191
#ifdef CONFIG_SLIRP
5192
            case QEMU_OPTION_tftp:
5193
                legacy_tftp_prefix = optarg;
5194
                break;
5195
            case QEMU_OPTION_bootp:
5196
                legacy_bootp_filename = optarg;
5197
                break;
5198
#ifndef _WIN32
5199
            case QEMU_OPTION_smb:
5200
                net_slirp_smb(optarg);
5201
                break;
5202
#endif
5203
            case QEMU_OPTION_redir:
5204
                net_slirp_redir(optarg);
5205
                break;
5206
#endif
5207
            case QEMU_OPTION_bt:
5208
                add_device_config(DEV_BT, optarg);
5209
                break;
5210
#ifdef HAS_AUDIO
5211
            case QEMU_OPTION_audio_help:
5212
                AUD_help ();
5213
                exit (0);
5214
                break;
5215
            case QEMU_OPTION_soundhw:
5216
                select_soundhw (optarg);
5217
                break;
5218
#endif
5219
            case QEMU_OPTION_h:
5220
                help(0);
5221
                break;
5222
            case QEMU_OPTION_version:
5223
                version();
5224
                exit(0);
5225
                break;
5226
            case QEMU_OPTION_m: {
5227
                uint64_t value;
5228
                char *ptr;
5229

    
5230
                value = strtoul(optarg, &ptr, 10);
5231
                switch (*ptr) {
5232
                case 0: case 'M': case 'm':
5233
                    value <<= 20;
5234
                    break;
5235
                case 'G': case 'g':
5236
                    value <<= 30;
5237
                    break;
5238
                default:
5239
                    fprintf(stderr, "qemu: invalid ram size: %s\n", optarg);
5240
                    exit(1);
5241
                }
5242

    
5243
                /* On 32-bit hosts, QEMU is limited by virtual address space */
5244
                if (value > (2047 << 20)
5245
#ifndef CONFIG_KQEMU
5246
                    && HOST_LONG_BITS == 32
5247
#endif
5248
                    ) {
5249
                    fprintf(stderr, "qemu: at most 2047 MB RAM can be simulated\n");
5250
                    exit(1);
5251
                }
5252
                if (value != (uint64_t)(ram_addr_t)value) {
5253
                    fprintf(stderr, "qemu: ram size too large\n");
5254
                    exit(1);
5255
                }
5256
                ram_size = value;
5257
                break;
5258
            }
5259
            case QEMU_OPTION_d:
5260
                {
5261
                    int mask;
5262
                    const CPULogItem *item;
5263

    
5264
                    mask = cpu_str_to_log_mask(optarg);
5265
                    if (!mask) {
5266
                        printf("Log items (comma separated):\n");
5267
                    for(item = cpu_log_items; item->mask != 0; item++) {
5268
                        printf("%-10s %s\n", item->name, item->help);
5269
                    }
5270
                    exit(1);
5271
                    }
5272
                    cpu_set_log(mask);
5273
                }
5274
                break;
5275
            case QEMU_OPTION_s:
5276
                gdbstub_dev = "tcp::" DEFAULT_GDBSTUB_PORT;
5277
                break;
5278
            case QEMU_OPTION_gdb:
5279
                gdbstub_dev = optarg;
5280
                break;
5281
            case QEMU_OPTION_L:
5282
                data_dir = optarg;
5283
                break;
5284
            case QEMU_OPTION_bios:
5285
                bios_name = optarg;
5286
                break;
5287
            case QEMU_OPTION_singlestep:
5288
                singlestep = 1;
5289
                break;
5290
            case QEMU_OPTION_S:
5291
                autostart = 0;
5292
                break;
5293
#ifndef _WIN32
5294
            case QEMU_OPTION_k:
5295
                keyboard_layout = optarg;
5296
                break;
5297
#endif
5298
            case QEMU_OPTION_localtime:
5299
                rtc_utc = 0;
5300
                break;
5301
            case QEMU_OPTION_vga:
5302
                select_vgahw (optarg);
5303
                break;
5304
#if defined(TARGET_PPC) || defined(TARGET_SPARC)
5305
            case QEMU_OPTION_g:
5306
                {
5307
                    const char *p;
5308
                    int w, h, depth;
5309
                    p = optarg;
5310
                    w = strtol(p, (char **)&p, 10);
5311
                    if (w <= 0) {
5312
                    graphic_error:
5313
                        fprintf(stderr, "qemu: invalid resolution or depth\n");
5314
                        exit(1);
5315
                    }
5316
                    if (*p != 'x')
5317
                        goto graphic_error;
5318
                    p++;
5319
                    h = strtol(p, (char **)&p, 10);
5320
                    if (h <= 0)
5321
                        goto graphic_error;
5322
                    if (*p == 'x') {
5323
                        p++;
5324
                        depth = strtol(p, (char **)&p, 10);
5325
                        if (depth != 8 && depth != 15 && depth != 16 &&
5326
                            depth != 24 && depth != 32)
5327
                            goto graphic_error;
5328
                    } else if (*p == '\0') {
5329
                        depth = graphic_depth;
5330
                    } else {
5331
                        goto graphic_error;
5332
                    }
5333

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

    
5641
    /* If no data_dir is specified then try to find it relative to the
5642
       executable path.  */
5643
    if (!data_dir) {
5644
        data_dir = find_datadir(argv[0]);
5645
    }
5646
    /* If all else fails use the install patch specified when building.  */
5647
    if (!data_dir) {
5648
        data_dir = CONFIG_QEMU_SHAREDIR;
5649
    }
5650

    
5651
#if defined(CONFIG_KVM) && defined(CONFIG_KQEMU)
5652
    if (kvm_allowed && kqemu_allowed) {
5653
        fprintf(stderr,
5654
                "You can not enable both KVM and kqemu at the same time\n");
5655
        exit(1);
5656
    }
5657
#endif
5658

    
5659
    /*
5660
     * Default to max_cpus = smp_cpus, in case the user doesn't
5661
     * specify a max_cpus value.
5662
     */
5663
    if (!max_cpus)
5664
        max_cpus = smp_cpus;
5665

    
5666
    machine->max_cpus = machine->max_cpus ?: 1; /* Default to UP */
5667
    if (smp_cpus > machine->max_cpus) {
5668
        fprintf(stderr, "Number of SMP cpus requested (%d), exceeds max cpus "
5669
                "supported by machine `%s' (%d)\n", smp_cpus,  machine->name,
5670
                machine->max_cpus);
5671
        exit(1);
5672
    }
5673

    
5674
    if (display_type == DT_NOGRAPHIC) {
5675
       if (serial_device_index == 0)
5676
           serial_devices[0] = "stdio";
5677
       if (parallel_device_index == 0)
5678
           parallel_devices[0] = "null";
5679
       if (strncmp(monitor_device, "vc", 2) == 0)
5680
           monitor_device = "stdio";
5681
    }
5682

    
5683
#ifndef _WIN32
5684
    if (daemonize) {
5685
        pid_t pid;
5686

    
5687
        if (pipe(fds) == -1)
5688
            exit(1);
5689

    
5690
        pid = fork();
5691
        if (pid > 0) {
5692
            uint8_t status;
5693
            ssize_t len;
5694

    
5695
            close(fds[1]);
5696

    
5697
        again:
5698
            len = read(fds[0], &status, 1);
5699
            if (len == -1 && (errno == EINTR))
5700
                goto again;
5701

    
5702
            if (len != 1)
5703
                exit(1);
5704
            else if (status == 1) {
5705
                fprintf(stderr, "Could not acquire pidfile\n");
5706
                exit(1);
5707
            } else
5708
                exit(0);
5709
        } else if (pid < 0)
5710
            exit(1);
5711

    
5712
        setsid();
5713

    
5714
        pid = fork();
5715
        if (pid > 0)
5716
            exit(0);
5717
        else if (pid < 0)
5718
            exit(1);
5719

    
5720
        umask(027);
5721

    
5722
        signal(SIGTSTP, SIG_IGN);
5723
        signal(SIGTTOU, SIG_IGN);
5724
        signal(SIGTTIN, SIG_IGN);
5725
    }
5726

    
5727
    if (pid_file && qemu_create_pidfile(pid_file) != 0) {
5728
        if (daemonize) {
5729
            uint8_t status = 1;
5730
            write(fds[1], &status, 1);
5731
        } else
5732
            fprintf(stderr, "Could not acquire pid file\n");
5733
        exit(1);
5734
    }
5735
#endif
5736

    
5737
#ifdef CONFIG_KQEMU
5738
    if (smp_cpus > 1)
5739
        kqemu_allowed = 0;
5740
#endif
5741
    if (qemu_init_main_loop()) {
5742
        fprintf(stderr, "qemu_init_main_loop failed\n");
5743
        exit(1);
5744
    }
5745
    linux_boot = (kernel_filename != NULL);
5746

    
5747
    if (!linux_boot && *kernel_cmdline != '\0') {
5748
        fprintf(stderr, "-append only allowed with -kernel option\n");
5749
        exit(1);
5750
    }
5751

    
5752
    if (!linux_boot && initrd_filename != NULL) {
5753
        fprintf(stderr, "-initrd only allowed with -kernel option\n");
5754
        exit(1);
5755
    }
5756

    
5757
#ifndef _WIN32
5758
    /* Win32 doesn't support line-buffering and requires size >= 2 */
5759
    setvbuf(stdout, NULL, _IOLBF, 0);
5760
#endif
5761

    
5762
    init_timers();
5763
    if (init_timer_alarm() < 0) {
5764
        fprintf(stderr, "could not initialize alarm timer\n");
5765
        exit(1);
5766
    }
5767
    if (use_icount && icount_time_shift < 0) {
5768
        use_icount = 2;
5769
        /* 125MIPS seems a reasonable initial guess at the guest speed.
5770
           It will be corrected fairly quickly anyway.  */
5771
        icount_time_shift = 3;
5772
        init_icount_adjust();
5773
    }
5774

    
5775
#ifdef _WIN32
5776
    socket_init();
5777
#endif
5778

    
5779
    /* init network clients */
5780
    if (nb_net_clients == 0) {
5781
        /* if no clients, we use a default config */
5782
        net_clients[nb_net_clients++] = "nic";
5783
#ifdef CONFIG_SLIRP
5784
        net_clients[nb_net_clients++] = "user";
5785
#endif
5786
    }
5787

    
5788
    for(i = 0;i < nb_net_clients; i++) {
5789
        if (net_client_parse(net_clients[i]) < 0)
5790
            exit(1);
5791
    }
5792

    
5793
    net_boot = (boot_devices_bitmap >> ('n' - 'a')) & 0xF;
5794
    net_set_boot_mask(net_boot);
5795

    
5796
    net_client_check();
5797

    
5798
    /* init the bluetooth world */
5799
    if (foreach_device_config(DEV_BT, bt_parse))
5800
        exit(1);
5801

    
5802
    /* init the memory */
5803
    if (ram_size == 0)
5804
        ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
5805

    
5806
#ifdef CONFIG_KQEMU
5807
    /* FIXME: This is a nasty hack because kqemu can't cope with dynamic
5808
       guest ram allocation.  It needs to go away.  */
5809
    if (kqemu_allowed) {
5810
        kqemu_phys_ram_size = ram_size + 8 * 1024 * 1024 + 4 * 1024 * 1024;
5811
        kqemu_phys_ram_base = qemu_vmalloc(kqemu_phys_ram_size);
5812
        if (!kqemu_phys_ram_base) {
5813
            fprintf(stderr, "Could not allocate physical memory\n");
5814
            exit(1);
5815
        }
5816
    }
5817
#endif
5818

    
5819
    /* init the dynamic translator */
5820
    cpu_exec_init_all(tb_size * 1024 * 1024);
5821

    
5822
    bdrv_init();
5823

    
5824
    /* we always create the cdrom drive, even if no disk is there */
5825
    drive_add(NULL, CDROM_ALIAS);
5826

    
5827
    /* we always create at least one floppy */
5828
    drive_add(NULL, FD_ALIAS, 0);
5829

    
5830
    /* we always create one sd slot, even if no card is in it */
5831
    drive_add(NULL, SD_ALIAS);
5832

    
5833
    /* open the virtual block devices */
5834
    if (snapshot)
5835
        qemu_opts_foreach(&drive_opt_list, drive_enable_snapshot, NULL, 0);
5836
    if (qemu_opts_foreach(&drive_opt_list, drive_init_func, machine, 1) != 0)
5837
        exit(1);
5838

    
5839
    register_savevm("timer", 0, 2, timer_save, timer_load, NULL);
5840
    register_savevm_live("ram", 0, 3, ram_save_live, NULL, ram_load, NULL);
5841

    
5842
#ifndef _WIN32
5843
    /* must be after terminal init, SDL library changes signal handlers */
5844
    sighandler_setup();
5845
#endif
5846

    
5847
    /* Maintain compatibility with multiple stdio monitors */
5848
    if (!strcmp(monitor_device,"stdio")) {
5849
        for (i = 0; i < MAX_SERIAL_PORTS; i++) {
5850
            const char *devname = serial_devices[i];
5851
            if (devname && !strcmp(devname,"mon:stdio")) {
5852
                monitor_device = NULL;
5853
                break;
5854
            } else if (devname && !strcmp(devname,"stdio")) {
5855
                monitor_device = NULL;
5856
                serial_devices[i] = "mon:stdio";
5857
                break;
5858
            }
5859
        }
5860
    }
5861

    
5862
    if (nb_numa_nodes > 0) {
5863
        int i;
5864

    
5865
        if (nb_numa_nodes > smp_cpus) {
5866
            nb_numa_nodes = smp_cpus;
5867
        }
5868

    
5869
        /* If no memory size if given for any node, assume the default case
5870
         * and distribute the available memory equally across all nodes
5871
         */
5872
        for (i = 0; i < nb_numa_nodes; i++) {
5873
            if (node_mem[i] != 0)
5874
                break;
5875
        }
5876
        if (i == nb_numa_nodes) {
5877
            uint64_t usedmem = 0;
5878

    
5879
            /* On Linux, the each node's border has to be 8MB aligned,
5880
             * the final node gets the rest.
5881
             */
5882
            for (i = 0; i < nb_numa_nodes - 1; i++) {
5883
                node_mem[i] = (ram_size / nb_numa_nodes) & ~((1 << 23UL) - 1);
5884
                usedmem += node_mem[i];
5885
            }
5886
            node_mem[i] = ram_size - usedmem;
5887
        }
5888

    
5889
        for (i = 0; i < nb_numa_nodes; i++) {
5890
            if (node_cpumask[i] != 0)
5891
                break;
5892
        }
5893
        /* assigning the VCPUs round-robin is easier to implement, guest OSes
5894
         * must cope with this anyway, because there are BIOSes out there in
5895
         * real machines which also use this scheme.
5896
         */
5897
        if (i == nb_numa_nodes) {
5898
            for (i = 0; i < smp_cpus; i++) {
5899
                node_cpumask[i % nb_numa_nodes] |= 1 << i;
5900
            }
5901
        }
5902
    }
5903

    
5904
    if (kvm_enabled()) {
5905
        int ret;
5906

    
5907
        ret = kvm_init(smp_cpus);
5908
        if (ret < 0) {
5909
            fprintf(stderr, "failed to initialize KVM\n");
5910
            exit(1);
5911
        }
5912
    }
5913

    
5914
    if (monitor_device) {
5915
        monitor_hd = qemu_chr_open("monitor", monitor_device, NULL);
5916
        if (!monitor_hd) {
5917
            fprintf(stderr, "qemu: could not open monitor device '%s'\n", monitor_device);
5918
            exit(1);
5919
        }
5920
    }
5921

    
5922
    for(i = 0; i < MAX_SERIAL_PORTS; i++) {
5923
        const char *devname = serial_devices[i];
5924
        if (devname && strcmp(devname, "none")) {
5925
            char label[32];
5926
            snprintf(label, sizeof(label), "serial%d", i);
5927
            serial_hds[i] = qemu_chr_open(label, devname, NULL);
5928
            if (!serial_hds[i]) {
5929
                fprintf(stderr, "qemu: could not open serial device '%s'\n",
5930
                        devname);
5931
                exit(1);
5932
            }
5933
        }
5934
    }
5935

    
5936
    for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
5937
        const char *devname = parallel_devices[i];
5938
        if (devname && strcmp(devname, "none")) {
5939
            char label[32];
5940
            snprintf(label, sizeof(label), "parallel%d", i);
5941
            parallel_hds[i] = qemu_chr_open(label, devname, NULL);
5942
            if (!parallel_hds[i]) {
5943
                fprintf(stderr, "qemu: could not open parallel device '%s'\n",
5944
                        devname);
5945
                exit(1);
5946
            }
5947
        }
5948
    }
5949

    
5950
    for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
5951
        const char *devname = virtio_consoles[i];
5952
        if (devname && strcmp(devname, "none")) {
5953
            char label[32];
5954
            snprintf(label, sizeof(label), "virtcon%d", i);
5955
            virtcon_hds[i] = qemu_chr_open(label, devname, NULL);
5956
            if (!virtcon_hds[i]) {
5957
                fprintf(stderr, "qemu: could not open virtio console '%s'\n",
5958
                        devname);
5959
                exit(1);
5960
            }
5961
        }
5962
    }
5963

    
5964
    module_call_init(MODULE_INIT_DEVICE);
5965

    
5966
    if (machine->compat_props) {
5967
        qdev_prop_register_compat(machine->compat_props);
5968
    }
5969
    machine->init(ram_size, boot_devices,
5970
                  kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
5971

    
5972

    
5973
    for (env = first_cpu; env != NULL; env = env->next_cpu) {
5974
        for (i = 0; i < nb_numa_nodes; i++) {
5975
            if (node_cpumask[i] & (1 << env->cpu_index)) {
5976
                env->numa_node = i;
5977
            }
5978
        }
5979
    }
5980

    
5981
    current_machine = machine;
5982

    
5983
    /* init USB devices */
5984
    if (usb_enabled) {
5985
        foreach_device_config(DEV_USB, usb_parse);
5986
    }
5987

    
5988
    /* init generic devices */
5989
    if (foreach_device_config(DEV_GENERIC, generic_parse))
5990
        exit(1);
5991

    
5992
    if (!display_state)
5993
        dumb_display_init();
5994
    /* just use the first displaystate for the moment */
5995
    ds = display_state;
5996

    
5997
    if (display_type == DT_DEFAULT) {
5998
#if defined(CONFIG_SDL) || defined(CONFIG_COCOA)
5999
        display_type = DT_SDL;
6000
#else
6001
        display_type = DT_VNC;
6002
        vnc_display = "localhost:0,to=99";
6003
        show_vnc_port = 1;
6004
#endif
6005
    }
6006
        
6007

    
6008
    switch (display_type) {
6009
    case DT_NOGRAPHIC:
6010
        break;
6011
#if defined(CONFIG_CURSES)
6012
    case DT_CURSES:
6013
        curses_display_init(ds, full_screen);
6014
        break;
6015
#endif
6016
#if defined(CONFIG_SDL)
6017
    case DT_SDL:
6018
        sdl_display_init(ds, full_screen, no_frame);
6019
        break;
6020
#elif defined(CONFIG_COCOA)
6021
    case DT_SDL:
6022
        cocoa_display_init(ds, full_screen);
6023
        break;
6024
#endif
6025
    case DT_VNC:
6026
        vnc_display_init(ds);
6027
        if (vnc_display_open(ds, vnc_display) < 0)
6028
            exit(1);
6029

    
6030
        if (show_vnc_port) {
6031
            printf("VNC server running on `%s'\n", vnc_display_local_addr(ds));
6032
        }
6033
        break;
6034
    default:
6035
        break;
6036
    }
6037
    dpy_resize(ds);
6038

    
6039
    dcl = ds->listeners;
6040
    while (dcl != NULL) {
6041
        if (dcl->dpy_refresh != NULL) {
6042
            ds->gui_timer = qemu_new_timer(rt_clock, gui_update, ds);
6043
            qemu_mod_timer(ds->gui_timer, qemu_get_clock(rt_clock));
6044
        }
6045
        dcl = dcl->next;
6046
    }
6047

    
6048
    if (display_type == DT_NOGRAPHIC || display_type == DT_VNC) {
6049
        nographic_timer = qemu_new_timer(rt_clock, nographic_update, NULL);
6050
        qemu_mod_timer(nographic_timer, qemu_get_clock(rt_clock));
6051
    }
6052

    
6053
    text_consoles_set_display(display_state);
6054
    qemu_chr_initial_reset();
6055

    
6056
    if (monitor_device && monitor_hd)
6057
        monitor_init(monitor_hd, MONITOR_USE_READLINE | MONITOR_IS_DEFAULT);
6058

    
6059
    for(i = 0; i < MAX_SERIAL_PORTS; i++) {
6060
        const char *devname = serial_devices[i];
6061
        if (devname && strcmp(devname, "none")) {
6062
            if (strstart(devname, "vc", 0))
6063
                qemu_chr_printf(serial_hds[i], "serial%d console\r\n", i);
6064
        }
6065
    }
6066

    
6067
    for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
6068
        const char *devname = parallel_devices[i];
6069
        if (devname && strcmp(devname, "none")) {
6070
            if (strstart(devname, "vc", 0))
6071
                qemu_chr_printf(parallel_hds[i], "parallel%d console\r\n", i);
6072
        }
6073
    }
6074

    
6075
    for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
6076
        const char *devname = virtio_consoles[i];
6077
        if (virtcon_hds[i] && devname) {
6078
            if (strstart(devname, "vc", 0))
6079
                qemu_chr_printf(virtcon_hds[i], "virtio console%d\r\n", i);
6080
        }
6081
    }
6082

    
6083
    if (gdbstub_dev && gdbserver_start(gdbstub_dev) < 0) {
6084
        fprintf(stderr, "qemu: could not open gdbserver on device '%s'\n",
6085
                gdbstub_dev);
6086
        exit(1);
6087
    }
6088

    
6089
    if (loadvm)
6090
        do_loadvm(cur_mon, loadvm);
6091

    
6092
    if (incoming) {
6093
        autostart = 0;
6094
        qemu_start_incoming_migration(incoming);
6095
    }
6096

    
6097
    else if (autostart)
6098
        vm_start();
6099

    
6100
#ifndef _WIN32
6101
    if (daemonize) {
6102
        uint8_t status = 0;
6103
        ssize_t len;
6104

    
6105
    again1:
6106
        len = write(fds[1], &status, 1);
6107
        if (len == -1 && (errno == EINTR))
6108
            goto again1;
6109

    
6110
        if (len != 1)
6111
            exit(1);
6112

    
6113
        chdir("/");
6114
        TFR(fd = open("/dev/null", O_RDWR));
6115
        if (fd == -1)
6116
            exit(1);
6117
    }
6118

    
6119
    if (run_as) {
6120
        pwd = getpwnam(run_as);
6121
        if (!pwd) {
6122
            fprintf(stderr, "User \"%s\" doesn't exist\n", run_as);
6123
            exit(1);
6124
        }
6125
    }
6126

    
6127
    if (chroot_dir) {
6128
        if (chroot(chroot_dir) < 0) {
6129
            fprintf(stderr, "chroot failed\n");
6130
            exit(1);
6131
        }
6132
        chdir("/");
6133
    }
6134

    
6135
    if (run_as) {
6136
        if (setgid(pwd->pw_gid) < 0) {
6137
            fprintf(stderr, "Failed to setgid(%d)\n", pwd->pw_gid);
6138
            exit(1);
6139
        }
6140
        if (setuid(pwd->pw_uid) < 0) {
6141
            fprintf(stderr, "Failed to setuid(%d)\n", pwd->pw_uid);
6142
            exit(1);
6143
        }
6144
        if (setuid(0) != -1) {
6145
            fprintf(stderr, "Dropping privileges failed\n");
6146
            exit(1);
6147
        }
6148
    }
6149

    
6150
    if (daemonize) {
6151
        dup2(fd, 0);
6152
        dup2(fd, 1);
6153
        dup2(fd, 2);
6154

    
6155
        close(fd);
6156
    }
6157
#endif
6158

    
6159
    main_loop();
6160
    quit_timers();
6161
    net_cleanup();
6162

    
6163
    return 0;
6164
}