Statistics
| Branch: | Revision:

root / vl.c @ 2e810b36

History | View | Annotate | Download (154.2 kB)

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

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

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

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

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

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

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

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

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

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

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

    
163
#include "disas.h"
164

    
165
#include "exec-all.h"
166

    
167
#include "qemu_socket.h"
168

    
169
#include "slirp/libslirp.h"
170

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

    
174
#define DEFAULT_RAM_SIZE 128
175

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

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

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

    
269
uint8_t qemu_uuid[16];
270

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
381
    return s;
382
}
383

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

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

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

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

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

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

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

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

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

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

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

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

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

    
458
    return qemu_put_mouse_event_current->qemu_put_mouse_event_absolute;
459
}
460

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

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

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

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

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

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

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

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

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

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

    
531
#define QEMU_TIMER_BASE 1000000000LL
532

    
533
#ifdef WIN32
534

    
535
static int64_t clock_freq;
536

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

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

    
556
#else
557

    
558
static int use_rt_clock;
559

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

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

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

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

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

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

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

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

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

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

    
673
#define QEMU_TIMER_REALTIME 0
674
#define QEMU_TIMER_VIRTUAL  1
675

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

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

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

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

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

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

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

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

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

    
718
static struct qemu_alarm_timer *alarm_timer;
719

    
720
#ifdef _WIN32
721

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

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

    
731
#else
732

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

    
736
#ifdef __linux__
737

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

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

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

    
748
#endif /* __linux__ */
749

    
750
#endif /* _WIN32 */
751

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

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

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

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

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

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

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

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

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

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

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

    
860
    arg = strdup(opt);
861

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

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

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

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

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

    
889
    free(arg);
890

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

    
901
QEMUClock *rt_clock;
902
QEMUClock *vm_clock;
903

    
904
static QEMUTimer *active_timers[2];
905

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

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

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

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

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

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

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

    
956
    qemu_del_timer(ts);
957

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
1092
static void qemu_event_increment(void);
1093

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

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

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

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

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

    
1171
    return delta;
1172
}
1173

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

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

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

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

    
1195
    return delta;
1196
}
1197
#endif
1198

    
1199
#ifndef _WIN32
1200

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

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

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

    
1213
    return 0;
1214
}
1215

    
1216
#if defined(__linux__)
1217

    
1218
#define RTC_FREQ 1024
1219

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

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

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

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

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

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

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

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

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

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

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

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

    
1280
    close(fd);
1281
}
1282

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

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

    
1305
    enable_sigio_timer(rtc_fd);
1306

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

    
1309
    return 0;
1310
}
1311

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

    
1316
    close(rtc_fd);
1317
}
1318

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

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

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

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

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

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

    
1346
        return -1;
1347
    }
1348

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

    
1351
    return 0;
1352
}
1353

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

    
1358
    timer_delete(host_timer);
1359
}
1360

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

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

    
1372
    nearest_delta_us = qemu_next_deadline_dyntick();
1373

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

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

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

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

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

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

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

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

    
1420
    return 0;
1421
}
1422

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

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

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

    
1433

    
1434
#ifdef _WIN32
1435

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

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

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

    
1448
    timeBeginPeriod(data->period);
1449

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

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

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

    
1468
    return 0;
1469
}
1470

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

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

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

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

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

    
1491
    timeKillEvent(data->timerId);
1492

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

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

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

    
1507
#endif /* _WIN32 */
1508

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

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

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

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

    
1527
    alarm_timer = t;
1528

    
1529
    return 0;
1530

    
1531
fail:
1532
    return err;
1533
}
1534

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
1680
    return 0;
1681
}
1682

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

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

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

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

    
1705
    hci_table[nb_hcis++] = hci;
1706

    
1707
    return 0;
1708
}
1709

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

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

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

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

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

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

    
1739
    vlan = qemu_find_bt_vlan(vlan_id);
1740

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
1835
    return NULL;
1836
}
1837

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

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

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

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

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

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

    
1873
    return "\0";
1874
}
1875

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

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

    
1885
    return BLOCK_ERR_STOP_ENOSPC;
1886
}
1887

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

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

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

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

    
1929
    *fatal_error = 1;
1930

    
1931
    translation = BIOS_ATA_TRANSLATION_AUTO;
1932
    cache = 1;
1933

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
2128
    /* check unit id */
2129

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

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

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

    
2145
    /* init */
2146

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

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

    
2226
static int drive_init_func(QemuOpts *opts, void *opaque)
2227
{
2228
    QEMUMachine *machine = opaque;
2229
    int fatal_error = 0;
2230

    
2231
    if (drive_init(opts, machine, &fatal_error) == NULL) {
2232
        if (fatal_error)
2233
            return 1;
2234
    }
2235
    return 0;
2236
}
2237

    
2238
static int drive_enable_snapshot(QemuOpts *opts, void *opaque)
2239
{
2240
    if (NULL == qemu_opt_get(opts, "snapshot")) {
2241
        qemu_opt_set(opts, "snapshot", "on");
2242
    }
2243
    return 0;
2244
}
2245

    
2246
void qemu_register_boot_set(QEMUBootSetHandler *func, void *opaque)
2247
{
2248
    boot_set_handler = func;
2249
    boot_set_opaque = opaque;
2250
}
2251

    
2252
int qemu_boot_set(const char *boot_devices)
2253
{
2254
    if (!boot_set_handler) {
2255
        return -EINVAL;
2256
    }
2257
    return boot_set_handler(boot_set_opaque, boot_devices);
2258
}
2259

    
2260
static int parse_bootdevices(char *devices)
2261
{
2262
    /* We just do some generic consistency checks */
2263
    const char *p;
2264
    int bitmap = 0;
2265

    
2266
    for (p = devices; *p != '\0'; p++) {
2267
        /* Allowed boot devices are:
2268
         * a-b: floppy disk drives
2269
         * c-f: IDE disk drives
2270
         * g-m: machine implementation dependant drives
2271
         * n-p: network devices
2272
         * It's up to each machine implementation to check if the given boot
2273
         * devices match the actual hardware implementation and firmware
2274
         * features.
2275
         */
2276
        if (*p < 'a' || *p > 'p') {
2277
            fprintf(stderr, "Invalid boot device '%c'\n", *p);
2278
            exit(1);
2279
        }
2280
        if (bitmap & (1 << (*p - 'a'))) {
2281
            fprintf(stderr, "Boot device '%c' was given twice\n", *p);
2282
            exit(1);
2283
        }
2284
        bitmap |= 1 << (*p - 'a');
2285
    }
2286
    return bitmap;
2287
}
2288

    
2289
static void restore_boot_devices(void *opaque)
2290
{
2291
    char *standard_boot_devices = opaque;
2292

    
2293
    qemu_boot_set(standard_boot_devices);
2294

    
2295
    qemu_unregister_reset(restore_boot_devices, standard_boot_devices);
2296
    qemu_free(standard_boot_devices);
2297
}
2298

    
2299
static void numa_add(const char *optarg)
2300
{
2301
    char option[128];
2302
    char *endptr;
2303
    unsigned long long value, endvalue;
2304
    int nodenr;
2305

    
2306
    optarg = get_opt_name(option, 128, optarg, ',') + 1;
2307
    if (!strcmp(option, "node")) {
2308
        if (get_param_value(option, 128, "nodeid", optarg) == 0) {
2309
            nodenr = nb_numa_nodes;
2310
        } else {
2311
            nodenr = strtoull(option, NULL, 10);
2312
        }
2313

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

    
2355
/***********************************************************/
2356
/* USB devices */
2357

    
2358
static USBPort *used_usb_ports;
2359
static USBPort *free_usb_ports;
2360

    
2361
/* ??? Maybe change this to register a hub to keep track of the topology.  */
2362
void qemu_register_usb_port(USBPort *port, void *opaque, int index,
2363
                            usb_attachfn attach)
2364
{
2365
    port->opaque = opaque;
2366
    port->index = index;
2367
    port->attach = attach;
2368
    port->next = free_usb_ports;
2369
    free_usb_ports = port;
2370
}
2371

    
2372
int usb_device_add_dev(USBDevice *dev)
2373
{
2374
    USBPort *port;
2375

    
2376
    /* Find a USB port to add the device to.  */
2377
    port = free_usb_ports;
2378
    if (!port->next) {
2379
        USBDevice *hub;
2380

    
2381
        /* Create a new hub and chain it on.  */
2382
        free_usb_ports = NULL;
2383
        port->next = used_usb_ports;
2384
        used_usb_ports = port;
2385

    
2386
        hub = usb_hub_init(VM_USB_HUB_SIZE);
2387
        usb_attach(port, hub);
2388
        port = free_usb_ports;
2389
    }
2390

    
2391
    free_usb_ports = port->next;
2392
    port->next = used_usb_ports;
2393
    used_usb_ports = port;
2394
    usb_attach(port, dev);
2395
    return 0;
2396
}
2397

    
2398
static void usb_msd_password_cb(void *opaque, int err)
2399
{
2400
    USBDevice *dev = opaque;
2401

    
2402
    if (!err)
2403
        usb_device_add_dev(dev);
2404
    else
2405
        dev->handle_destroy(dev);
2406
}
2407

    
2408
static int usb_device_add(const char *devname, int is_hotplug)
2409
{
2410
    const char *p;
2411
    USBDevice *dev;
2412

    
2413
    if (!free_usb_ports)
2414
        return -1;
2415

    
2416
    if (strstart(devname, "host:", &p)) {
2417
        dev = usb_host_device_open(p);
2418
    } else if (!strcmp(devname, "mouse")) {
2419
        dev = usb_mouse_init();
2420
    } else if (!strcmp(devname, "tablet")) {
2421
        dev = usb_tablet_init();
2422
    } else if (!strcmp(devname, "keyboard")) {
2423
        dev = usb_keyboard_init();
2424
    } else if (strstart(devname, "disk:", &p)) {
2425
        BlockDriverState *bs;
2426

    
2427
        dev = usb_msd_init(p);
2428
        if (!dev)
2429
            return -1;
2430
        bs = usb_msd_get_bdrv(dev);
2431
        if (bdrv_key_required(bs)) {
2432
            autostart = 0;
2433
            if (is_hotplug) {
2434
                monitor_read_bdrv_key_start(cur_mon, bs, usb_msd_password_cb,
2435
                                            dev);
2436
                return 0;
2437
            }
2438
        }
2439
    } else if (!strcmp(devname, "wacom-tablet")) {
2440
        dev = usb_wacom_init();
2441
    } else if (strstart(devname, "serial:", &p)) {
2442
        dev = usb_serial_init(p);
2443
#ifdef CONFIG_BRLAPI
2444
    } else if (!strcmp(devname, "braille")) {
2445
        dev = usb_baum_init();
2446
#endif
2447
    } else if (strstart(devname, "net:", &p)) {
2448
        int nic = nb_nics;
2449

    
2450
        if (net_client_init(NULL, "nic", p) < 0)
2451
            return -1;
2452
        nd_table[nic].model = "usb";
2453
        dev = usb_net_init(&nd_table[nic]);
2454
    } else if (!strcmp(devname, "bt") || strstart(devname, "bt:", &p)) {
2455
        dev = usb_bt_init(devname[2] ? hci_init(p) :
2456
                        bt_new_hci(qemu_find_bt_vlan(0)));
2457
    } else {
2458
        return -1;
2459
    }
2460
    if (!dev)
2461
        return -1;
2462

    
2463
    return usb_device_add_dev(dev);
2464
}
2465

    
2466
int usb_device_del_addr(int bus_num, int addr)
2467
{
2468
    USBPort *port;
2469
    USBPort **lastp;
2470
    USBDevice *dev;
2471

    
2472
    if (!used_usb_ports)
2473
        return -1;
2474

    
2475
    if (bus_num != 0)
2476
        return -1;
2477

    
2478
    lastp = &used_usb_ports;
2479
    port = used_usb_ports;
2480
    while (port && port->dev->addr != addr) {
2481
        lastp = &port->next;
2482
        port = port->next;
2483
    }
2484

    
2485
    if (!port)
2486
        return -1;
2487

    
2488
    dev = port->dev;
2489
    *lastp = port->next;
2490
    usb_attach(port, NULL);
2491
    dev->handle_destroy(dev);
2492
    port->next = free_usb_ports;
2493
    free_usb_ports = port;
2494
    return 0;
2495
}
2496

    
2497
static int usb_device_del(const char *devname)
2498
{
2499
    int bus_num, addr;
2500
    const char *p;
2501

    
2502
    if (strstart(devname, "host:", &p))
2503
        return usb_host_device_close(p);
2504

    
2505
    if (!used_usb_ports)
2506
        return -1;
2507

    
2508
    p = strchr(devname, '.');
2509
    if (!p)
2510
        return -1;
2511
    bus_num = strtoul(devname, NULL, 0);
2512
    addr = strtoul(p + 1, NULL, 0);
2513

    
2514
    return usb_device_del_addr(bus_num, addr);
2515
}
2516

    
2517
static int usb_parse(const char *cmdline)
2518
{
2519
    return usb_device_add(cmdline, 0);
2520
}
2521

    
2522
void do_usb_add(Monitor *mon, const char *devname)
2523
{
2524
    usb_device_add(devname, 1);
2525
}
2526

    
2527
void do_usb_del(Monitor *mon, const char *devname)
2528
{
2529
    usb_device_del(devname);
2530
}
2531

    
2532
void usb_info(Monitor *mon)
2533
{
2534
    USBDevice *dev;
2535
    USBPort *port;
2536
    const char *speed_str;
2537

    
2538
    if (!usb_enabled) {
2539
        monitor_printf(mon, "USB support not enabled\n");
2540
        return;
2541
    }
2542

    
2543
    for (port = used_usb_ports; port; port = port->next) {
2544
        dev = port->dev;
2545
        if (!dev)
2546
            continue;
2547
        switch(dev->speed) {
2548
        case USB_SPEED_LOW:
2549
            speed_str = "1.5";
2550
            break;
2551
        case USB_SPEED_FULL:
2552
            speed_str = "12";
2553
            break;
2554
        case USB_SPEED_HIGH:
2555
            speed_str = "480";
2556
            break;
2557
        default:
2558
            speed_str = "?";
2559
            break;
2560
        }
2561
        monitor_printf(mon, "  Device %d.%d, Speed %s Mb/s, Product %s\n",
2562
                       0, dev->addr, speed_str, dev->devname);
2563
    }
2564
}
2565

    
2566
/***********************************************************/
2567
/* PCMCIA/Cardbus */
2568

    
2569
static struct pcmcia_socket_entry_s {
2570
    PCMCIASocket *socket;
2571
    struct pcmcia_socket_entry_s *next;
2572
} *pcmcia_sockets = 0;
2573

    
2574
void pcmcia_socket_register(PCMCIASocket *socket)
2575
{
2576
    struct pcmcia_socket_entry_s *entry;
2577

    
2578
    entry = qemu_malloc(sizeof(struct pcmcia_socket_entry_s));
2579
    entry->socket = socket;
2580
    entry->next = pcmcia_sockets;
2581
    pcmcia_sockets = entry;
2582
}
2583

    
2584
void pcmcia_socket_unregister(PCMCIASocket *socket)
2585
{
2586
    struct pcmcia_socket_entry_s *entry, **ptr;
2587

    
2588
    ptr = &pcmcia_sockets;
2589
    for (entry = *ptr; entry; ptr = &entry->next, entry = *ptr)
2590
        if (entry->socket == socket) {
2591
            *ptr = entry->next;
2592
            qemu_free(entry);
2593
        }
2594
}
2595

    
2596
void pcmcia_info(Monitor *mon)
2597
{
2598
    struct pcmcia_socket_entry_s *iter;
2599

    
2600
    if (!pcmcia_sockets)
2601
        monitor_printf(mon, "No PCMCIA sockets\n");
2602

    
2603
    for (iter = pcmcia_sockets; iter; iter = iter->next)
2604
        monitor_printf(mon, "%s: %s\n", iter->socket->slot_string,
2605
                       iter->socket->attached ? iter->socket->card_string :
2606
                       "Empty");
2607
}
2608

    
2609
/***********************************************************/
2610
/* register display */
2611

    
2612
struct DisplayAllocator default_allocator = {
2613
    defaultallocator_create_displaysurface,
2614
    defaultallocator_resize_displaysurface,
2615
    defaultallocator_free_displaysurface
2616
};
2617

    
2618
void register_displaystate(DisplayState *ds)
2619
{
2620
    DisplayState **s;
2621
    s = &display_state;
2622
    while (*s != NULL)
2623
        s = &(*s)->next;
2624
    ds->next = NULL;
2625
    *s = ds;
2626
}
2627

    
2628
DisplayState *get_displaystate(void)
2629
{
2630
    return display_state;
2631
}
2632

    
2633
DisplayAllocator *register_displayallocator(DisplayState *ds, DisplayAllocator *da)
2634
{
2635
    if(ds->allocator ==  &default_allocator) ds->allocator = da;
2636
    return ds->allocator;
2637
}
2638

    
2639
/* dumb display */
2640

    
2641
static void dumb_display_init(void)
2642
{
2643
    DisplayState *ds = qemu_mallocz(sizeof(DisplayState));
2644
    ds->allocator = &default_allocator;
2645
    ds->surface = qemu_create_displaysurface(ds, 640, 480);
2646
    register_displaystate(ds);
2647
}
2648

    
2649
/***********************************************************/
2650
/* I/O handling */
2651

    
2652
typedef struct IOHandlerRecord {
2653
    int fd;
2654
    IOCanRWHandler *fd_read_poll;
2655
    IOHandler *fd_read;
2656
    IOHandler *fd_write;
2657
    int deleted;
2658
    void *opaque;
2659
    /* temporary data */
2660
    struct pollfd *ufd;
2661
    struct IOHandlerRecord *next;
2662
} IOHandlerRecord;
2663

    
2664
static IOHandlerRecord *first_io_handler;
2665

    
2666
/* XXX: fd_read_poll should be suppressed, but an API change is
2667
   necessary in the character devices to suppress fd_can_read(). */
2668
int qemu_set_fd_handler2(int fd,
2669
                         IOCanRWHandler *fd_read_poll,
2670
                         IOHandler *fd_read,
2671
                         IOHandler *fd_write,
2672
                         void *opaque)
2673
{
2674
    IOHandlerRecord **pioh, *ioh;
2675

    
2676
    if (!fd_read && !fd_write) {
2677
        pioh = &first_io_handler;
2678
        for(;;) {
2679
            ioh = *pioh;
2680
            if (ioh == NULL)
2681
                break;
2682
            if (ioh->fd == fd) {
2683
                ioh->deleted = 1;
2684
                break;
2685
            }
2686
            pioh = &ioh->next;
2687
        }
2688
    } else {
2689
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
2690
            if (ioh->fd == fd)
2691
                goto found;
2692
        }
2693
        ioh = qemu_mallocz(sizeof(IOHandlerRecord));
2694
        ioh->next = first_io_handler;
2695
        first_io_handler = ioh;
2696
    found:
2697
        ioh->fd = fd;
2698
        ioh->fd_read_poll = fd_read_poll;
2699
        ioh->fd_read = fd_read;
2700
        ioh->fd_write = fd_write;
2701
        ioh->opaque = opaque;
2702
        ioh->deleted = 0;
2703
    }
2704
    return 0;
2705
}
2706

    
2707
int qemu_set_fd_handler(int fd,
2708
                        IOHandler *fd_read,
2709
                        IOHandler *fd_write,
2710
                        void *opaque)
2711
{
2712
    return qemu_set_fd_handler2(fd, NULL, fd_read, fd_write, opaque);
2713
}
2714

    
2715
#ifdef _WIN32
2716
/***********************************************************/
2717
/* Polling handling */
2718

    
2719
typedef struct PollingEntry {
2720
    PollingFunc *func;
2721
    void *opaque;
2722
    struct PollingEntry *next;
2723
} PollingEntry;
2724

    
2725
static PollingEntry *first_polling_entry;
2726

    
2727
int qemu_add_polling_cb(PollingFunc *func, void *opaque)
2728
{
2729
    PollingEntry **ppe, *pe;
2730
    pe = qemu_mallocz(sizeof(PollingEntry));
2731
    pe->func = func;
2732
    pe->opaque = opaque;
2733
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next);
2734
    *ppe = pe;
2735
    return 0;
2736
}
2737

    
2738
void qemu_del_polling_cb(PollingFunc *func, void *opaque)
2739
{
2740
    PollingEntry **ppe, *pe;
2741
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next) {
2742
        pe = *ppe;
2743
        if (pe->func == func && pe->opaque == opaque) {
2744
            *ppe = pe->next;
2745
            qemu_free(pe);
2746
            break;
2747
        }
2748
    }
2749
}
2750

    
2751
/***********************************************************/
2752
/* Wait objects support */
2753
typedef struct WaitObjects {
2754
    int num;
2755
    HANDLE events[MAXIMUM_WAIT_OBJECTS + 1];
2756
    WaitObjectFunc *func[MAXIMUM_WAIT_OBJECTS + 1];
2757
    void *opaque[MAXIMUM_WAIT_OBJECTS + 1];
2758
} WaitObjects;
2759

    
2760
static WaitObjects wait_objects = {0};
2761

    
2762
int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
2763
{
2764
    WaitObjects *w = &wait_objects;
2765

    
2766
    if (w->num >= MAXIMUM_WAIT_OBJECTS)
2767
        return -1;
2768
    w->events[w->num] = handle;
2769
    w->func[w->num] = func;
2770
    w->opaque[w->num] = opaque;
2771
    w->num++;
2772
    return 0;
2773
}
2774

    
2775
void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
2776
{
2777
    int i, found;
2778
    WaitObjects *w = &wait_objects;
2779

    
2780
    found = 0;
2781
    for (i = 0; i < w->num; i++) {
2782
        if (w->events[i] == handle)
2783
            found = 1;
2784
        if (found) {
2785
            w->events[i] = w->events[i + 1];
2786
            w->func[i] = w->func[i + 1];
2787
            w->opaque[i] = w->opaque[i + 1];
2788
        }
2789
    }
2790
    if (found)
2791
        w->num--;
2792
}
2793
#endif
2794

    
2795
/***********************************************************/
2796
/* ram save/restore */
2797

    
2798
static int ram_get_page(QEMUFile *f, uint8_t *buf, int len)
2799
{
2800
    int v;
2801

    
2802
    v = qemu_get_byte(f);
2803
    switch(v) {
2804
    case 0:
2805
        if (qemu_get_buffer(f, buf, len) != len)
2806
            return -EIO;
2807
        break;
2808
    case 1:
2809
        v = qemu_get_byte(f);
2810
        memset(buf, v, len);
2811
        break;
2812
    default:
2813
        return -EINVAL;
2814
    }
2815

    
2816
    if (qemu_file_has_error(f))
2817
        return -EIO;
2818

    
2819
    return 0;
2820
}
2821

    
2822
static int ram_load_v1(QEMUFile *f, void *opaque)
2823
{
2824
    int ret;
2825
    ram_addr_t i;
2826

    
2827
    if (qemu_get_be32(f) != last_ram_offset)
2828
        return -EINVAL;
2829
    for(i = 0; i < last_ram_offset; i+= TARGET_PAGE_SIZE) {
2830
        ret = ram_get_page(f, qemu_get_ram_ptr(i), TARGET_PAGE_SIZE);
2831
        if (ret)
2832
            return ret;
2833
    }
2834
    return 0;
2835
}
2836

    
2837
#define BDRV_HASH_BLOCK_SIZE 1024
2838
#define IOBUF_SIZE 4096
2839
#define RAM_CBLOCK_MAGIC 0xfabe
2840

    
2841
typedef struct RamDecompressState {
2842
    z_stream zstream;
2843
    QEMUFile *f;
2844
    uint8_t buf[IOBUF_SIZE];
2845
} RamDecompressState;
2846

    
2847
static int ram_decompress_open(RamDecompressState *s, QEMUFile *f)
2848
{
2849
    int ret;
2850
    memset(s, 0, sizeof(*s));
2851
    s->f = f;
2852
    ret = inflateInit(&s->zstream);
2853
    if (ret != Z_OK)
2854
        return -1;
2855
    return 0;
2856
}
2857

    
2858
static int ram_decompress_buf(RamDecompressState *s, uint8_t *buf, int len)
2859
{
2860
    int ret, clen;
2861

    
2862
    s->zstream.avail_out = len;
2863
    s->zstream.next_out = buf;
2864
    while (s->zstream.avail_out > 0) {
2865
        if (s->zstream.avail_in == 0) {
2866
            if (qemu_get_be16(s->f) != RAM_CBLOCK_MAGIC)
2867
                return -1;
2868
            clen = qemu_get_be16(s->f);
2869
            if (clen > IOBUF_SIZE)
2870
                return -1;
2871
            qemu_get_buffer(s->f, s->buf, clen);
2872
            s->zstream.avail_in = clen;
2873
            s->zstream.next_in = s->buf;
2874
        }
2875
        ret = inflate(&s->zstream, Z_PARTIAL_FLUSH);
2876
        if (ret != Z_OK && ret != Z_STREAM_END) {
2877
            return -1;
2878
        }
2879
    }
2880
    return 0;
2881
}
2882

    
2883
static void ram_decompress_close(RamDecompressState *s)
2884
{
2885
    inflateEnd(&s->zstream);
2886
}
2887

    
2888
#define RAM_SAVE_FLAG_FULL        0x01
2889
#define RAM_SAVE_FLAG_COMPRESS        0x02
2890
#define RAM_SAVE_FLAG_MEM_SIZE        0x04
2891
#define RAM_SAVE_FLAG_PAGE        0x08
2892
#define RAM_SAVE_FLAG_EOS        0x10
2893

    
2894
static int is_dup_page(uint8_t *page, uint8_t ch)
2895
{
2896
    uint32_t val = ch << 24 | ch << 16 | ch << 8 | ch;
2897
    uint32_t *array = (uint32_t *)page;
2898
    int i;
2899

    
2900
    for (i = 0; i < (TARGET_PAGE_SIZE / 4); i++) {
2901
        if (array[i] != val)
2902
            return 0;
2903
    }
2904

    
2905
    return 1;
2906
}
2907

    
2908
static int ram_save_block(QEMUFile *f)
2909
{
2910
    static ram_addr_t current_addr = 0;
2911
    ram_addr_t saved_addr = current_addr;
2912
    ram_addr_t addr = 0;
2913
    int found = 0;
2914

    
2915
    while (addr < last_ram_offset) {
2916
        if (cpu_physical_memory_get_dirty(current_addr, MIGRATION_DIRTY_FLAG)) {
2917
            uint8_t *p;
2918

    
2919
            cpu_physical_memory_reset_dirty(current_addr,
2920
                                            current_addr + TARGET_PAGE_SIZE,
2921
                                            MIGRATION_DIRTY_FLAG);
2922

    
2923
            p = qemu_get_ram_ptr(current_addr);
2924

    
2925
            if (is_dup_page(p, *p)) {
2926
                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_COMPRESS);
2927
                qemu_put_byte(f, *p);
2928
            } else {
2929
                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_PAGE);
2930
                qemu_put_buffer(f, p, TARGET_PAGE_SIZE);
2931
            }
2932

    
2933
            found = 1;
2934
            break;
2935
        }
2936
        addr += TARGET_PAGE_SIZE;
2937
        current_addr = (saved_addr + addr) % last_ram_offset;
2938
    }
2939

    
2940
    return found;
2941
}
2942

    
2943
static uint64_t bytes_transferred = 0;
2944

    
2945
static ram_addr_t ram_save_remaining(void)
2946
{
2947
    ram_addr_t addr;
2948
    ram_addr_t count = 0;
2949

    
2950
    for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
2951
        if (cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
2952
            count++;
2953
    }
2954

    
2955
    return count;
2956
}
2957

    
2958
uint64_t ram_bytes_remaining(void)
2959
{
2960
    return ram_save_remaining() * TARGET_PAGE_SIZE;
2961
}
2962

    
2963
uint64_t ram_bytes_transferred(void)
2964
{
2965
    return bytes_transferred;
2966
}
2967

    
2968
uint64_t ram_bytes_total(void)
2969
{
2970
    return last_ram_offset;
2971
}
2972

    
2973
static int ram_save_live(QEMUFile *f, int stage, void *opaque)
2974
{
2975
    ram_addr_t addr;
2976
    uint64_t bytes_transferred_last;
2977
    double bwidth = 0;
2978
    uint64_t expected_time = 0;
2979

    
2980
    if (cpu_physical_sync_dirty_bitmap(0, TARGET_PHYS_ADDR_MAX) != 0) {
2981
        qemu_file_set_error(f);
2982
        return 0;
2983
    }
2984

    
2985
    if (stage == 1) {
2986
        /* Make sure all dirty bits are set */
2987
        for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
2988
            if (!cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
2989
                cpu_physical_memory_set_dirty(addr);
2990
        }
2991

    
2992
        /* Enable dirty memory tracking */
2993
        cpu_physical_memory_set_dirty_tracking(1);
2994

    
2995
        qemu_put_be64(f, last_ram_offset | RAM_SAVE_FLAG_MEM_SIZE);
2996
    }
2997

    
2998
    bytes_transferred_last = bytes_transferred;
2999
    bwidth = get_clock();
3000

    
3001
    while (!qemu_file_rate_limit(f)) {
3002
        int ret;
3003

    
3004
        ret = ram_save_block(f);
3005
        bytes_transferred += ret * TARGET_PAGE_SIZE;
3006
        if (ret == 0) /* no more blocks */
3007
            break;
3008
    }
3009

    
3010
    bwidth = get_clock() - bwidth;
3011
    bwidth = (bytes_transferred - bytes_transferred_last) / bwidth;
3012

    
3013
    /* if we haven't transferred anything this round, force expected_time to a
3014
     * a very high value, but without crashing */
3015
    if (bwidth == 0)
3016
        bwidth = 0.000001;
3017

    
3018
    /* try transferring iterative blocks of memory */
3019

    
3020
    if (stage == 3) {
3021

    
3022
        /* flush all remaining blocks regardless of rate limiting */
3023
        while (ram_save_block(f) != 0) {
3024
            bytes_transferred += TARGET_PAGE_SIZE;
3025
        }
3026
        cpu_physical_memory_set_dirty_tracking(0);
3027
    }
3028

    
3029
    qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
3030

    
3031
    expected_time = ram_save_remaining() * TARGET_PAGE_SIZE / bwidth;
3032

    
3033
    return (stage == 2) && (expected_time <= migrate_max_downtime());
3034
}
3035

    
3036
static int ram_load_dead(QEMUFile *f, void *opaque)
3037
{
3038
    RamDecompressState s1, *s = &s1;
3039
    uint8_t buf[10];
3040
    ram_addr_t i;
3041

    
3042
    if (ram_decompress_open(s, f) < 0)
3043
        return -EINVAL;
3044
    for(i = 0; i < last_ram_offset; i+= BDRV_HASH_BLOCK_SIZE) {
3045
        if (ram_decompress_buf(s, buf, 1) < 0) {
3046
            fprintf(stderr, "Error while reading ram block header\n");
3047
            goto error;
3048
        }
3049
        if (buf[0] == 0) {
3050
            if (ram_decompress_buf(s, qemu_get_ram_ptr(i),
3051
                                   BDRV_HASH_BLOCK_SIZE) < 0) {
3052
                fprintf(stderr, "Error while reading ram block address=0x%08" PRIx64, (uint64_t)i);
3053
                goto error;
3054
            }
3055
        } else {
3056
        error:
3057
            printf("Error block header\n");
3058
            return -EINVAL;
3059
        }
3060
    }
3061
    ram_decompress_close(s);
3062

    
3063
    return 0;
3064
}
3065

    
3066
static int ram_load(QEMUFile *f, void *opaque, int version_id)
3067
{
3068
    ram_addr_t addr;
3069
    int flags;
3070

    
3071
    if (version_id == 1)
3072
        return ram_load_v1(f, opaque);
3073

    
3074
    if (version_id == 2) {
3075
        if (qemu_get_be32(f) != last_ram_offset)
3076
            return -EINVAL;
3077
        return ram_load_dead(f, opaque);
3078
    }
3079

    
3080
    if (version_id != 3)
3081
        return -EINVAL;
3082

    
3083
    do {
3084
        addr = qemu_get_be64(f);
3085

    
3086
        flags = addr & ~TARGET_PAGE_MASK;
3087
        addr &= TARGET_PAGE_MASK;
3088

    
3089
        if (flags & RAM_SAVE_FLAG_MEM_SIZE) {
3090
            if (addr != last_ram_offset)
3091
                return -EINVAL;
3092
        }
3093

    
3094
        if (flags & RAM_SAVE_FLAG_FULL) {
3095
            if (ram_load_dead(f, opaque) < 0)
3096
                return -EINVAL;
3097
        }
3098
        
3099
        if (flags & RAM_SAVE_FLAG_COMPRESS) {
3100
            uint8_t ch = qemu_get_byte(f);
3101
            memset(qemu_get_ram_ptr(addr), ch, TARGET_PAGE_SIZE);
3102
#ifndef _WIN32
3103
            if (ch == 0 &&
3104
                (!kvm_enabled() || kvm_has_sync_mmu())) {
3105
                madvise(qemu_get_ram_ptr(addr), TARGET_PAGE_SIZE, MADV_DONTNEED);
3106
            }
3107
#endif
3108
        } else if (flags & RAM_SAVE_FLAG_PAGE)
3109
            qemu_get_buffer(f, qemu_get_ram_ptr(addr), TARGET_PAGE_SIZE);
3110
    } while (!(flags & RAM_SAVE_FLAG_EOS));
3111

    
3112
    return 0;
3113
}
3114

    
3115
void qemu_service_io(void)
3116
{
3117
    qemu_notify_event();
3118
}
3119

    
3120
/***********************************************************/
3121
/* bottom halves (can be seen as timers which expire ASAP) */
3122

    
3123
struct QEMUBH {
3124
    QEMUBHFunc *cb;
3125
    void *opaque;
3126
    int scheduled;
3127
    int idle;
3128
    int deleted;
3129
    QEMUBH *next;
3130
};
3131

    
3132
static QEMUBH *first_bh = NULL;
3133

    
3134
QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque)
3135
{
3136
    QEMUBH *bh;
3137
    bh = qemu_mallocz(sizeof(QEMUBH));
3138
    bh->cb = cb;
3139
    bh->opaque = opaque;
3140
    bh->next = first_bh;
3141
    first_bh = bh;
3142
    return bh;
3143
}
3144

    
3145
int qemu_bh_poll(void)
3146
{
3147
    QEMUBH *bh, **bhp;
3148
    int ret;
3149

    
3150
    ret = 0;
3151
    for (bh = first_bh; bh; bh = bh->next) {
3152
        if (!bh->deleted && bh->scheduled) {
3153
            bh->scheduled = 0;
3154
            if (!bh->idle)
3155
                ret = 1;
3156
            bh->idle = 0;
3157
            bh->cb(bh->opaque);
3158
        }
3159
    }
3160

    
3161
    /* remove deleted bhs */
3162
    bhp = &first_bh;
3163
    while (*bhp) {
3164
        bh = *bhp;
3165
        if (bh->deleted) {
3166
            *bhp = bh->next;
3167
            qemu_free(bh);
3168
        } else
3169
            bhp = &bh->next;
3170
    }
3171

    
3172
    return ret;
3173
}
3174

    
3175
void qemu_bh_schedule_idle(QEMUBH *bh)
3176
{
3177
    if (bh->scheduled)
3178
        return;
3179
    bh->scheduled = 1;
3180
    bh->idle = 1;
3181
}
3182

    
3183
void qemu_bh_schedule(QEMUBH *bh)
3184
{
3185
    if (bh->scheduled)
3186
        return;
3187
    bh->scheduled = 1;
3188
    bh->idle = 0;
3189
    /* stop the currently executing CPU to execute the BH ASAP */
3190
    qemu_notify_event();
3191
}
3192

    
3193
void qemu_bh_cancel(QEMUBH *bh)
3194
{
3195
    bh->scheduled = 0;
3196
}
3197

    
3198
void qemu_bh_delete(QEMUBH *bh)
3199
{
3200
    bh->scheduled = 0;
3201
    bh->deleted = 1;
3202
}
3203

    
3204
static void qemu_bh_update_timeout(int *timeout)
3205
{
3206
    QEMUBH *bh;
3207

    
3208
    for (bh = first_bh; bh; bh = bh->next) {
3209
        if (!bh->deleted && bh->scheduled) {
3210
            if (bh->idle) {
3211
                /* idle bottom halves will be polled at least
3212
                 * every 10ms */
3213
                *timeout = MIN(10, *timeout);
3214
            } else {
3215
                /* non-idle bottom halves will be executed
3216
                 * immediately */
3217
                *timeout = 0;
3218
                break;
3219
            }
3220
        }
3221
    }
3222
}
3223

    
3224
/***********************************************************/
3225
/* machine registration */
3226

    
3227
static QEMUMachine *first_machine = NULL;
3228
QEMUMachine *current_machine = NULL;
3229

    
3230
int qemu_register_machine(QEMUMachine *m)
3231
{
3232
    QEMUMachine **pm;
3233
    pm = &first_machine;
3234
    while (*pm != NULL)
3235
        pm = &(*pm)->next;
3236
    m->next = NULL;
3237
    *pm = m;
3238
    return 0;
3239
}
3240

    
3241
static QEMUMachine *find_machine(const char *name)
3242
{
3243
    QEMUMachine *m;
3244

    
3245
    for(m = first_machine; m != NULL; m = m->next) {
3246
        if (!strcmp(m->name, name))
3247
            return m;
3248
        if (m->alias && !strcmp(m->alias, name))
3249
            return m;
3250
    }
3251
    return NULL;
3252
}
3253

    
3254
static QEMUMachine *find_default_machine(void)
3255
{
3256
    QEMUMachine *m;
3257

    
3258
    for(m = first_machine; m != NULL; m = m->next) {
3259
        if (m->is_default) {
3260
            return m;
3261
        }
3262
    }
3263
    return NULL;
3264
}
3265

    
3266
/***********************************************************/
3267
/* main execution loop */
3268

    
3269
static void gui_update(void *opaque)
3270
{
3271
    uint64_t interval = GUI_REFRESH_INTERVAL;
3272
    DisplayState *ds = opaque;
3273
    DisplayChangeListener *dcl = ds->listeners;
3274

    
3275
    dpy_refresh(ds);
3276

    
3277
    while (dcl != NULL) {
3278
        if (dcl->gui_timer_interval &&
3279
            dcl->gui_timer_interval < interval)
3280
            interval = dcl->gui_timer_interval;
3281
        dcl = dcl->next;
3282
    }
3283
    qemu_mod_timer(ds->gui_timer, interval + qemu_get_clock(rt_clock));
3284
}
3285

    
3286
static void nographic_update(void *opaque)
3287
{
3288
    uint64_t interval = GUI_REFRESH_INTERVAL;
3289

    
3290
    qemu_mod_timer(nographic_timer, interval + qemu_get_clock(rt_clock));
3291
}
3292

    
3293
struct vm_change_state_entry {
3294
    VMChangeStateHandler *cb;
3295
    void *opaque;
3296
    LIST_ENTRY (vm_change_state_entry) entries;
3297
};
3298

    
3299
static LIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head;
3300

    
3301
VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
3302
                                                     void *opaque)
3303
{
3304
    VMChangeStateEntry *e;
3305

    
3306
    e = qemu_mallocz(sizeof (*e));
3307

    
3308
    e->cb = cb;
3309
    e->opaque = opaque;
3310
    LIST_INSERT_HEAD(&vm_change_state_head, e, entries);
3311
    return e;
3312
}
3313

    
3314
void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
3315
{
3316
    LIST_REMOVE (e, entries);
3317
    qemu_free (e);
3318
}
3319

    
3320
static void vm_state_notify(int running, int reason)
3321
{
3322
    VMChangeStateEntry *e;
3323

    
3324
    for (e = vm_change_state_head.lh_first; e; e = e->entries.le_next) {
3325
        e->cb(e->opaque, running, reason);
3326
    }
3327
}
3328

    
3329
static void resume_all_vcpus(void);
3330
static void pause_all_vcpus(void);
3331

    
3332
void vm_start(void)
3333
{
3334
    if (!vm_running) {
3335
        cpu_enable_ticks();
3336
        vm_running = 1;
3337
        vm_state_notify(1, 0);
3338
        qemu_rearm_alarm_timer(alarm_timer);
3339
        resume_all_vcpus();
3340
    }
3341
}
3342

    
3343
/* reset/shutdown handler */
3344

    
3345
typedef struct QEMUResetEntry {
3346
    TAILQ_ENTRY(QEMUResetEntry) entry;
3347
    QEMUResetHandler *func;
3348
    void *opaque;
3349
} QEMUResetEntry;
3350

    
3351
static TAILQ_HEAD(reset_handlers, QEMUResetEntry) reset_handlers =
3352
    TAILQ_HEAD_INITIALIZER(reset_handlers);
3353
static int reset_requested;
3354
static int shutdown_requested;
3355
static int powerdown_requested;
3356
static int debug_requested;
3357
static int vmstop_requested;
3358

    
3359
int qemu_shutdown_requested(void)
3360
{
3361
    int r = shutdown_requested;
3362
    shutdown_requested = 0;
3363
    return r;
3364
}
3365

    
3366
int qemu_reset_requested(void)
3367
{
3368
    int r = reset_requested;
3369
    reset_requested = 0;
3370
    return r;
3371
}
3372

    
3373
int qemu_powerdown_requested(void)
3374
{
3375
    int r = powerdown_requested;
3376
    powerdown_requested = 0;
3377
    return r;
3378
}
3379

    
3380
static int qemu_debug_requested(void)
3381
{
3382
    int r = debug_requested;
3383
    debug_requested = 0;
3384
    return r;
3385
}
3386

    
3387
static int qemu_vmstop_requested(void)
3388
{
3389
    int r = vmstop_requested;
3390
    vmstop_requested = 0;
3391
    return r;
3392
}
3393

    
3394
static void do_vm_stop(int reason)
3395
{
3396
    if (vm_running) {
3397
        cpu_disable_ticks();
3398
        vm_running = 0;
3399
        pause_all_vcpus();
3400
        vm_state_notify(0, reason);
3401
    }
3402
}
3403

    
3404
void qemu_register_reset(QEMUResetHandler *func, void *opaque)
3405
{
3406
    QEMUResetEntry *re = qemu_mallocz(sizeof(QEMUResetEntry));
3407

    
3408
    re->func = func;
3409
    re->opaque = opaque;
3410
    TAILQ_INSERT_TAIL(&reset_handlers, re, entry);
3411
}
3412

    
3413
void qemu_unregister_reset(QEMUResetHandler *func, void *opaque)
3414
{
3415
    QEMUResetEntry *re;
3416

    
3417
    TAILQ_FOREACH(re, &reset_handlers, entry) {
3418
        if (re->func == func && re->opaque == opaque) {
3419
            TAILQ_REMOVE(&reset_handlers, re, entry);
3420
            qemu_free(re);
3421
            return;
3422
        }
3423
    }
3424
}
3425

    
3426
void qemu_system_reset(void)
3427
{
3428
    QEMUResetEntry *re, *nre;
3429

    
3430
    /* reset all devices */
3431
    TAILQ_FOREACH_SAFE(re, &reset_handlers, entry, nre) {
3432
        re->func(re->opaque);
3433
    }
3434
}
3435

    
3436
void qemu_system_reset_request(void)
3437
{
3438
    if (no_reboot) {
3439
        shutdown_requested = 1;
3440
    } else {
3441
        reset_requested = 1;
3442
    }
3443
    qemu_notify_event();
3444
}
3445

    
3446
void qemu_system_shutdown_request(void)
3447
{
3448
    shutdown_requested = 1;
3449
    qemu_notify_event();
3450
}
3451

    
3452
void qemu_system_powerdown_request(void)
3453
{
3454
    powerdown_requested = 1;
3455
    qemu_notify_event();
3456
}
3457

    
3458
#ifdef CONFIG_IOTHREAD
3459
static void qemu_system_vmstop_request(int reason)
3460
{
3461
    vmstop_requested = reason;
3462
    qemu_notify_event();
3463
}
3464
#endif
3465

    
3466
#ifndef _WIN32
3467
static int io_thread_fd = -1;
3468

    
3469
static void qemu_event_increment(void)
3470
{
3471
    static const char byte = 0;
3472

    
3473
    if (io_thread_fd == -1)
3474
        return;
3475

    
3476
    write(io_thread_fd, &byte, sizeof(byte));
3477
}
3478

    
3479
static void qemu_event_read(void *opaque)
3480
{
3481
    int fd = (unsigned long)opaque;
3482
    ssize_t len;
3483

    
3484
    /* Drain the notify pipe */
3485
    do {
3486
        char buffer[512];
3487
        len = read(fd, buffer, sizeof(buffer));
3488
    } while ((len == -1 && errno == EINTR) || len > 0);
3489
}
3490

    
3491
static int qemu_event_init(void)
3492
{
3493
    int err;
3494
    int fds[2];
3495

    
3496
    err = pipe(fds);
3497
    if (err == -1)
3498
        return -errno;
3499

    
3500
    err = fcntl_setfl(fds[0], O_NONBLOCK);
3501
    if (err < 0)
3502
        goto fail;
3503

    
3504
    err = fcntl_setfl(fds[1], O_NONBLOCK);
3505
    if (err < 0)
3506
        goto fail;
3507

    
3508
    qemu_set_fd_handler2(fds[0], NULL, qemu_event_read, NULL,
3509
                         (void *)(unsigned long)fds[0]);
3510

    
3511
    io_thread_fd = fds[1];
3512
    return 0;
3513

    
3514
fail:
3515
    close(fds[0]);
3516
    close(fds[1]);
3517
    return err;
3518
}
3519
#else
3520
HANDLE qemu_event_handle;
3521

    
3522
static void dummy_event_handler(void *opaque)
3523
{
3524
}
3525

    
3526
static int qemu_event_init(void)
3527
{
3528
    qemu_event_handle = CreateEvent(NULL, FALSE, FALSE, NULL);
3529
    if (!qemu_event_handle) {
3530
        perror("Failed CreateEvent");
3531
        return -1;
3532
    }
3533
    qemu_add_wait_object(qemu_event_handle, dummy_event_handler, NULL);
3534
    return 0;
3535
}
3536

    
3537
static void qemu_event_increment(void)
3538
{
3539
    SetEvent(qemu_event_handle);
3540
}
3541
#endif
3542

    
3543
static int cpu_can_run(CPUState *env)
3544
{
3545
    if (env->stop)
3546
        return 0;
3547
    if (env->stopped)
3548
        return 0;
3549
    return 1;
3550
}
3551

    
3552
#ifndef CONFIG_IOTHREAD
3553
static int qemu_init_main_loop(void)
3554
{
3555
    return qemu_event_init();
3556
}
3557

    
3558
void qemu_init_vcpu(void *_env)
3559
{
3560
    CPUState *env = _env;
3561

    
3562
    if (kvm_enabled())
3563
        kvm_init_vcpu(env);
3564
    return;
3565
}
3566

    
3567
int qemu_cpu_self(void *env)
3568
{
3569
    return 1;
3570
}
3571

    
3572
static void resume_all_vcpus(void)
3573
{
3574
}
3575

    
3576
static void pause_all_vcpus(void)
3577
{
3578
}
3579

    
3580
void qemu_cpu_kick(void *env)
3581
{
3582
    return;
3583
}
3584

    
3585
void qemu_notify_event(void)
3586
{
3587
    CPUState *env = cpu_single_env;
3588

    
3589
    if (env) {
3590
        cpu_exit(env);
3591
#ifdef USE_KQEMU
3592
        if (env->kqemu_enabled)
3593
            kqemu_cpu_interrupt(env);
3594
#endif
3595
     }
3596
}
3597

    
3598
#define qemu_mutex_lock_iothread() do { } while (0)
3599
#define qemu_mutex_unlock_iothread() do { } while (0)
3600

    
3601
void vm_stop(int reason)
3602
{
3603
    do_vm_stop(reason);
3604
}
3605

    
3606
#else /* CONFIG_IOTHREAD */
3607

    
3608
#include "qemu-thread.h"
3609

    
3610
QemuMutex qemu_global_mutex;
3611
static QemuMutex qemu_fair_mutex;
3612

    
3613
static QemuThread io_thread;
3614

    
3615
static QemuThread *tcg_cpu_thread;
3616
static QemuCond *tcg_halt_cond;
3617

    
3618
static int qemu_system_ready;
3619
/* cpu creation */
3620
static QemuCond qemu_cpu_cond;
3621
/* system init */
3622
static QemuCond qemu_system_cond;
3623
static QemuCond qemu_pause_cond;
3624

    
3625
static void block_io_signals(void);
3626
static void unblock_io_signals(void);
3627
static int tcg_has_work(void);
3628

    
3629
static int qemu_init_main_loop(void)
3630
{
3631
    int ret;
3632

    
3633
    ret = qemu_event_init();
3634
    if (ret)
3635
        return ret;
3636

    
3637
    qemu_cond_init(&qemu_pause_cond);
3638
    qemu_mutex_init(&qemu_fair_mutex);
3639
    qemu_mutex_init(&qemu_global_mutex);
3640
    qemu_mutex_lock(&qemu_global_mutex);
3641

    
3642
    unblock_io_signals();
3643
    qemu_thread_self(&io_thread);
3644

    
3645
    return 0;
3646
}
3647

    
3648
static void qemu_wait_io_event(CPUState *env)
3649
{
3650
    while (!tcg_has_work())
3651
        qemu_cond_timedwait(env->halt_cond, &qemu_global_mutex, 1000);
3652

    
3653
    qemu_mutex_unlock(&qemu_global_mutex);
3654

    
3655
    /*
3656
     * Users of qemu_global_mutex can be starved, having no chance
3657
     * to acquire it since this path will get to it first.
3658
     * So use another lock to provide fairness.
3659
     */
3660
    qemu_mutex_lock(&qemu_fair_mutex);
3661
    qemu_mutex_unlock(&qemu_fair_mutex);
3662

    
3663
    qemu_mutex_lock(&qemu_global_mutex);
3664
    if (env->stop) {
3665
        env->stop = 0;
3666
        env->stopped = 1;
3667
        qemu_cond_signal(&qemu_pause_cond);
3668
    }
3669
}
3670

    
3671
static int qemu_cpu_exec(CPUState *env);
3672

    
3673
static void *kvm_cpu_thread_fn(void *arg)
3674
{
3675
    CPUState *env = arg;
3676

    
3677
    block_io_signals();
3678
    qemu_thread_self(env->thread);
3679

    
3680
    /* signal CPU creation */
3681
    qemu_mutex_lock(&qemu_global_mutex);
3682
    env->created = 1;
3683
    qemu_cond_signal(&qemu_cpu_cond);
3684

    
3685
    /* and wait for machine initialization */
3686
    while (!qemu_system_ready)
3687
        qemu_cond_timedwait(&qemu_system_cond, &qemu_global_mutex, 100);
3688

    
3689
    while (1) {
3690
        if (cpu_can_run(env))
3691
            qemu_cpu_exec(env);
3692
        qemu_wait_io_event(env);
3693
    }
3694

    
3695
    return NULL;
3696
}
3697

    
3698
static void tcg_cpu_exec(void);
3699

    
3700
static void *tcg_cpu_thread_fn(void *arg)
3701
{
3702
    CPUState *env = arg;
3703

    
3704
    block_io_signals();
3705
    qemu_thread_self(env->thread);
3706

    
3707
    /* signal CPU creation */
3708
    qemu_mutex_lock(&qemu_global_mutex);
3709
    for (env = first_cpu; env != NULL; env = env->next_cpu)
3710
        env->created = 1;
3711
    qemu_cond_signal(&qemu_cpu_cond);
3712

    
3713
    /* and wait for machine initialization */
3714
    while (!qemu_system_ready)
3715
        qemu_cond_timedwait(&qemu_system_cond, &qemu_global_mutex, 100);
3716

    
3717
    while (1) {
3718
        tcg_cpu_exec();
3719
        qemu_wait_io_event(cur_cpu);
3720
    }
3721

    
3722
    return NULL;
3723
}
3724

    
3725
void qemu_cpu_kick(void *_env)
3726
{
3727
    CPUState *env = _env;
3728
    qemu_cond_broadcast(env->halt_cond);
3729
    if (kvm_enabled())
3730
        qemu_thread_signal(env->thread, SIGUSR1);
3731
}
3732

    
3733
int qemu_cpu_self(void *env)
3734
{
3735
    return (cpu_single_env != NULL);
3736
}
3737

    
3738
static void cpu_signal(int sig)
3739
{
3740
    if (cpu_single_env)
3741
        cpu_exit(cpu_single_env);
3742
}
3743

    
3744
static void block_io_signals(void)
3745
{
3746
    sigset_t set;
3747
    struct sigaction sigact;
3748

    
3749
    sigemptyset(&set);
3750
    sigaddset(&set, SIGUSR2);
3751
    sigaddset(&set, SIGIO);
3752
    sigaddset(&set, SIGALRM);
3753
    pthread_sigmask(SIG_BLOCK, &set, NULL);
3754

    
3755
    sigemptyset(&set);
3756
    sigaddset(&set, SIGUSR1);
3757
    pthread_sigmask(SIG_UNBLOCK, &set, NULL);
3758

    
3759
    memset(&sigact, 0, sizeof(sigact));
3760
    sigact.sa_handler = cpu_signal;
3761
    sigaction(SIGUSR1, &sigact, NULL);
3762
}
3763

    
3764
static void unblock_io_signals(void)
3765
{
3766
    sigset_t set;
3767

    
3768
    sigemptyset(&set);
3769
    sigaddset(&set, SIGUSR2);
3770
    sigaddset(&set, SIGIO);
3771
    sigaddset(&set, SIGALRM);
3772
    pthread_sigmask(SIG_UNBLOCK, &set, NULL);
3773

    
3774
    sigemptyset(&set);
3775
    sigaddset(&set, SIGUSR1);
3776
    pthread_sigmask(SIG_BLOCK, &set, NULL);
3777
}
3778

    
3779
static void qemu_signal_lock(unsigned int msecs)
3780
{
3781
    qemu_mutex_lock(&qemu_fair_mutex);
3782

    
3783
    while (qemu_mutex_trylock(&qemu_global_mutex)) {
3784
        qemu_thread_signal(tcg_cpu_thread, SIGUSR1);
3785
        if (!qemu_mutex_timedlock(&qemu_global_mutex, msecs))
3786
            break;
3787
    }
3788
    qemu_mutex_unlock(&qemu_fair_mutex);
3789
}
3790

    
3791
static void qemu_mutex_lock_iothread(void)
3792
{
3793
    if (kvm_enabled()) {
3794
        qemu_mutex_lock(&qemu_fair_mutex);
3795
        qemu_mutex_lock(&qemu_global_mutex);
3796
        qemu_mutex_unlock(&qemu_fair_mutex);
3797
    } else
3798
        qemu_signal_lock(100);
3799
}
3800

    
3801
static void qemu_mutex_unlock_iothread(void)
3802
{
3803
    qemu_mutex_unlock(&qemu_global_mutex);
3804
}
3805

    
3806
static int all_vcpus_paused(void)
3807
{
3808
    CPUState *penv = first_cpu;
3809

    
3810
    while (penv) {
3811
        if (!penv->stopped)
3812
            return 0;
3813
        penv = (CPUState *)penv->next_cpu;
3814
    }
3815

    
3816
    return 1;
3817
}
3818

    
3819
static void pause_all_vcpus(void)
3820
{
3821
    CPUState *penv = first_cpu;
3822

    
3823
    while (penv) {
3824
        penv->stop = 1;
3825
        qemu_thread_signal(penv->thread, SIGUSR1);
3826
        qemu_cpu_kick(penv);
3827
        penv = (CPUState *)penv->next_cpu;
3828
    }
3829

    
3830
    while (!all_vcpus_paused()) {
3831
        qemu_cond_timedwait(&qemu_pause_cond, &qemu_global_mutex, 100);
3832
        penv = first_cpu;
3833
        while (penv) {
3834
            qemu_thread_signal(penv->thread, SIGUSR1);
3835
            penv = (CPUState *)penv->next_cpu;
3836
        }
3837
    }
3838
}
3839

    
3840
static void resume_all_vcpus(void)
3841
{
3842
    CPUState *penv = first_cpu;
3843

    
3844
    while (penv) {
3845
        penv->stop = 0;
3846
        penv->stopped = 0;
3847
        qemu_thread_signal(penv->thread, SIGUSR1);
3848
        qemu_cpu_kick(penv);
3849
        penv = (CPUState *)penv->next_cpu;
3850
    }
3851
}
3852

    
3853
static void tcg_init_vcpu(void *_env)
3854
{
3855
    CPUState *env = _env;
3856
    /* share a single thread for all cpus with TCG */
3857
    if (!tcg_cpu_thread) {
3858
        env->thread = qemu_mallocz(sizeof(QemuThread));
3859
        env->halt_cond = qemu_mallocz(sizeof(QemuCond));
3860
        qemu_cond_init(env->halt_cond);
3861
        qemu_thread_create(env->thread, tcg_cpu_thread_fn, env);
3862
        while (env->created == 0)
3863
            qemu_cond_timedwait(&qemu_cpu_cond, &qemu_global_mutex, 100);
3864
        tcg_cpu_thread = env->thread;
3865
        tcg_halt_cond = env->halt_cond;
3866
    } else {
3867
        env->thread = tcg_cpu_thread;
3868
        env->halt_cond = tcg_halt_cond;
3869
    }
3870
}
3871

    
3872
static void kvm_start_vcpu(CPUState *env)
3873
{
3874
    kvm_init_vcpu(env);
3875
    env->thread = qemu_mallocz(sizeof(QemuThread));
3876
    env->halt_cond = qemu_mallocz(sizeof(QemuCond));
3877
    qemu_cond_init(env->halt_cond);
3878
    qemu_thread_create(env->thread, kvm_cpu_thread_fn, env);
3879
    while (env->created == 0)
3880
        qemu_cond_timedwait(&qemu_cpu_cond, &qemu_global_mutex, 100);
3881
}
3882

    
3883
void qemu_init_vcpu(void *_env)
3884
{
3885
    CPUState *env = _env;
3886

    
3887
    if (kvm_enabled())
3888
        kvm_start_vcpu(env);
3889
    else
3890
        tcg_init_vcpu(env);
3891
}
3892

    
3893
void qemu_notify_event(void)
3894
{
3895
    qemu_event_increment();
3896
}
3897

    
3898
void vm_stop(int reason)
3899
{
3900
    QemuThread me;
3901
    qemu_thread_self(&me);
3902

    
3903
    if (!qemu_thread_equal(&me, &io_thread)) {
3904
        qemu_system_vmstop_request(reason);
3905
        /*
3906
         * FIXME: should not return to device code in case
3907
         * vm_stop() has been requested.
3908
         */
3909
        if (cpu_single_env) {
3910
            cpu_exit(cpu_single_env);
3911
            cpu_single_env->stop = 1;
3912
        }
3913
        return;
3914
    }
3915
    do_vm_stop(reason);
3916
}
3917

    
3918
#endif
3919

    
3920

    
3921
#ifdef _WIN32
3922
static void host_main_loop_wait(int *timeout)
3923
{
3924
    int ret, ret2, i;
3925
    PollingEntry *pe;
3926

    
3927

    
3928
    /* XXX: need to suppress polling by better using win32 events */
3929
    ret = 0;
3930
    for(pe = first_polling_entry; pe != NULL; pe = pe->next) {
3931
        ret |= pe->func(pe->opaque);
3932
    }
3933
    if (ret == 0) {
3934
        int err;
3935
        WaitObjects *w = &wait_objects;
3936

    
3937
        ret = WaitForMultipleObjects(w->num, w->events, FALSE, *timeout);
3938
        if (WAIT_OBJECT_0 + 0 <= ret && ret <= WAIT_OBJECT_0 + w->num - 1) {
3939
            if (w->func[ret - WAIT_OBJECT_0])
3940
                w->func[ret - WAIT_OBJECT_0](w->opaque[ret - WAIT_OBJECT_0]);
3941

    
3942
            /* Check for additional signaled events */
3943
            for(i = (ret - WAIT_OBJECT_0 + 1); i < w->num; i++) {
3944

    
3945
                /* Check if event is signaled */
3946
                ret2 = WaitForSingleObject(w->events[i], 0);
3947
                if(ret2 == WAIT_OBJECT_0) {
3948
                    if (w->func[i])
3949
                        w->func[i](w->opaque[i]);
3950
                } else if (ret2 == WAIT_TIMEOUT) {
3951
                } else {
3952
                    err = GetLastError();
3953
                    fprintf(stderr, "WaitForSingleObject error %d %d\n", i, err);
3954
                }
3955
            }
3956
        } else if (ret == WAIT_TIMEOUT) {
3957
        } else {
3958
            err = GetLastError();
3959
            fprintf(stderr, "WaitForMultipleObjects error %d %d\n", ret, err);
3960
        }
3961
    }
3962

    
3963
    *timeout = 0;
3964
}
3965
#else
3966
static void host_main_loop_wait(int *timeout)
3967
{
3968
}
3969
#endif
3970

    
3971
void main_loop_wait(int timeout)
3972
{
3973
    IOHandlerRecord *ioh;
3974
    fd_set rfds, wfds, xfds;
3975
    int ret, nfds;
3976
    struct timeval tv;
3977

    
3978
    qemu_bh_update_timeout(&timeout);
3979

    
3980
    host_main_loop_wait(&timeout);
3981

    
3982
    /* poll any events */
3983
    /* XXX: separate device handlers from system ones */
3984
    nfds = -1;
3985
    FD_ZERO(&rfds);
3986
    FD_ZERO(&wfds);
3987
    FD_ZERO(&xfds);
3988
    for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
3989
        if (ioh->deleted)
3990
            continue;
3991
        if (ioh->fd_read &&
3992
            (!ioh->fd_read_poll ||
3993
             ioh->fd_read_poll(ioh->opaque) != 0)) {
3994
            FD_SET(ioh->fd, &rfds);
3995
            if (ioh->fd > nfds)
3996
                nfds = ioh->fd;
3997
        }
3998
        if (ioh->fd_write) {
3999
            FD_SET(ioh->fd, &wfds);
4000
            if (ioh->fd > nfds)
4001
                nfds = ioh->fd;
4002
        }
4003
    }
4004

    
4005
    tv.tv_sec = timeout / 1000;
4006
    tv.tv_usec = (timeout % 1000) * 1000;
4007

    
4008
    slirp_select_fill(&nfds, &rfds, &wfds, &xfds);
4009

    
4010
    qemu_mutex_unlock_iothread();
4011
    ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv);
4012
    qemu_mutex_lock_iothread();
4013
    if (ret > 0) {
4014
        IOHandlerRecord **pioh;
4015

    
4016
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
4017
            if (!ioh->deleted && ioh->fd_read && FD_ISSET(ioh->fd, &rfds)) {
4018
                ioh->fd_read(ioh->opaque);
4019
            }
4020
            if (!ioh->deleted && ioh->fd_write && FD_ISSET(ioh->fd, &wfds)) {
4021
                ioh->fd_write(ioh->opaque);
4022
            }
4023
        }
4024

    
4025
        /* remove deleted IO handlers */
4026
        pioh = &first_io_handler;
4027
        while (*pioh) {
4028
            ioh = *pioh;
4029
            if (ioh->deleted) {
4030
                *pioh = ioh->next;
4031
                qemu_free(ioh);
4032
            } else
4033
                pioh = &ioh->next;
4034
        }
4035
    }
4036

    
4037
    slirp_select_poll(&rfds, &wfds, &xfds, (ret < 0));
4038

    
4039
    /* rearm timer, if not periodic */
4040
    if (alarm_timer->flags & ALARM_FLAG_EXPIRED) {
4041
        alarm_timer->flags &= ~ALARM_FLAG_EXPIRED;
4042
        qemu_rearm_alarm_timer(alarm_timer);
4043
    }
4044

    
4045
    /* vm time timers */
4046
    if (vm_running) {
4047
        if (!cur_cpu || likely(!(cur_cpu->singlestep_enabled & SSTEP_NOTIMER)))
4048
            qemu_run_timers(&active_timers[QEMU_TIMER_VIRTUAL],
4049
                qemu_get_clock(vm_clock));
4050
    }
4051

    
4052
    /* real time timers */
4053
    qemu_run_timers(&active_timers[QEMU_TIMER_REALTIME],
4054
                    qemu_get_clock(rt_clock));
4055

    
4056
    /* Check bottom-halves last in case any of the earlier events triggered
4057
       them.  */
4058
    qemu_bh_poll();
4059

    
4060
}
4061

    
4062
static int qemu_cpu_exec(CPUState *env)
4063
{
4064
    int ret;
4065
#ifdef CONFIG_PROFILER
4066
    int64_t ti;
4067
#endif
4068

    
4069
#ifdef CONFIG_PROFILER
4070
    ti = profile_getclock();
4071
#endif
4072
    if (use_icount) {
4073
        int64_t count;
4074
        int decr;
4075
        qemu_icount -= (env->icount_decr.u16.low + env->icount_extra);
4076
        env->icount_decr.u16.low = 0;
4077
        env->icount_extra = 0;
4078
        count = qemu_next_deadline();
4079
        count = (count + (1 << icount_time_shift) - 1)
4080
                >> icount_time_shift;
4081
        qemu_icount += count;
4082
        decr = (count > 0xffff) ? 0xffff : count;
4083
        count -= decr;
4084
        env->icount_decr.u16.low = decr;
4085
        env->icount_extra = count;
4086
    }
4087
    ret = cpu_exec(env);
4088
#ifdef CONFIG_PROFILER
4089
    qemu_time += profile_getclock() - ti;
4090
#endif
4091
    if (use_icount) {
4092
        /* Fold pending instructions back into the
4093
           instruction counter, and clear the interrupt flag.  */
4094
        qemu_icount -= (env->icount_decr.u16.low
4095
                        + env->icount_extra);
4096
        env->icount_decr.u32 = 0;
4097
        env->icount_extra = 0;
4098
    }
4099
    return ret;
4100
}
4101

    
4102
static void tcg_cpu_exec(void)
4103
{
4104
    int ret = 0;
4105

    
4106
    if (next_cpu == NULL)
4107
        next_cpu = first_cpu;
4108
    for (; next_cpu != NULL; next_cpu = next_cpu->next_cpu) {
4109
        CPUState *env = cur_cpu = next_cpu;
4110

    
4111
        if (!vm_running)
4112
            break;
4113
        if (timer_alarm_pending) {
4114
            timer_alarm_pending = 0;
4115
            break;
4116
        }
4117
        if (cpu_can_run(env))
4118
            ret = qemu_cpu_exec(env);
4119
        if (ret == EXCP_DEBUG) {
4120
            gdb_set_stop_cpu(env);
4121
            debug_requested = 1;
4122
            break;
4123
        }
4124
    }
4125
}
4126

    
4127
static int cpu_has_work(CPUState *env)
4128
{
4129
    if (env->stop)
4130
        return 1;
4131
    if (env->stopped)
4132
        return 0;
4133
    if (!env->halted)
4134
        return 1;
4135
    if (qemu_cpu_has_work(env))
4136
        return 1;
4137
    return 0;
4138
}
4139

    
4140
static int tcg_has_work(void)
4141
{
4142
    CPUState *env;
4143

    
4144
    for (env = first_cpu; env != NULL; env = env->next_cpu)
4145
        if (cpu_has_work(env))
4146
            return 1;
4147
    return 0;
4148
}
4149

    
4150
static int qemu_calculate_timeout(void)
4151
{
4152
#ifndef CONFIG_IOTHREAD
4153
    int timeout;
4154

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

    
4197
    return timeout;
4198
#else /* CONFIG_IOTHREAD */
4199
    return 1000;
4200
#endif
4201
}
4202

    
4203
static int vm_can_run(void)
4204
{
4205
    if (powerdown_requested)
4206
        return 0;
4207
    if (reset_requested)
4208
        return 0;
4209
    if (shutdown_requested)
4210
        return 0;
4211
    if (debug_requested)
4212
        return 0;
4213
    return 1;
4214
}
4215

    
4216
qemu_irq qemu_system_powerdown;
4217

    
4218
static void main_loop(void)
4219
{
4220
    int r;
4221

    
4222
#ifdef CONFIG_IOTHREAD
4223
    qemu_system_ready = 1;
4224
    qemu_cond_broadcast(&qemu_system_cond);
4225
#endif
4226

    
4227
    for (;;) {
4228
        do {
4229
#ifdef CONFIG_PROFILER
4230
            int64_t ti;
4231
#endif
4232
#ifndef CONFIG_IOTHREAD
4233
            tcg_cpu_exec();
4234
#endif
4235
#ifdef CONFIG_PROFILER
4236
            ti = profile_getclock();
4237
#endif
4238
            main_loop_wait(qemu_calculate_timeout());
4239
#ifdef CONFIG_PROFILER
4240
            dev_time += profile_getclock() - ti;
4241
#endif
4242
        } while (vm_can_run());
4243

    
4244
        if (qemu_debug_requested())
4245
            vm_stop(EXCP_DEBUG);
4246
        if (qemu_shutdown_requested()) {
4247
            if (no_shutdown) {
4248
                vm_stop(0);
4249
                no_shutdown = 0;
4250
            } else
4251
                break;
4252
        }
4253
        if (qemu_reset_requested()) {
4254
            pause_all_vcpus();
4255
            qemu_system_reset();
4256
            resume_all_vcpus();
4257
        }
4258
        if (qemu_powerdown_requested()) {
4259
            qemu_irq_raise(qemu_system_powerdown);
4260
        }
4261
        if ((r = qemu_vmstop_requested()))
4262
            vm_stop(r);
4263
    }
4264
    pause_all_vcpus();
4265
}
4266

    
4267
static void version(void)
4268
{
4269
    printf("QEMU PC emulator version " QEMU_VERSION QEMU_PKGVERSION ", Copyright (c) 2003-2008 Fabrice Bellard\n");
4270
}
4271

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

    
4305
#define HAS_ARG 0x0001
4306

    
4307
enum {
4308
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4309
    opt_enum,
4310
#define DEFHEADING(text)
4311
#include "qemu-options.h"
4312
#undef DEF
4313
#undef DEFHEADING
4314
#undef GEN_DOCS
4315
};
4316

    
4317
typedef struct QEMUOption {
4318
    const char *name;
4319
    int flags;
4320
    int index;
4321
} QEMUOption;
4322

    
4323
static const QEMUOption qemu_options[] = {
4324
    { "h", 0, QEMU_OPTION_h },
4325
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4326
    { option, opt_arg, opt_enum },
4327
#define DEFHEADING(text)
4328
#include "qemu-options.h"
4329
#undef DEF
4330
#undef DEFHEADING
4331
#undef GEN_DOCS
4332
    { NULL },
4333
};
4334

    
4335
#ifdef HAS_AUDIO
4336
struct soundhw soundhw[] = {
4337
#ifdef HAS_AUDIO_CHOICE
4338
#if defined(TARGET_I386) || defined(TARGET_MIPS)
4339
    {
4340
        "pcspk",
4341
        "PC speaker",
4342
        0,
4343
        1,
4344
        { .init_isa = pcspk_audio_init }
4345
    },
4346
#endif
4347

    
4348
#ifdef CONFIG_SB16
4349
    {
4350
        "sb16",
4351
        "Creative Sound Blaster 16",
4352
        0,
4353
        1,
4354
        { .init_isa = SB16_init }
4355
    },
4356
#endif
4357

    
4358
#ifdef CONFIG_CS4231A
4359
    {
4360
        "cs4231a",
4361
        "CS4231A",
4362
        0,
4363
        1,
4364
        { .init_isa = cs4231a_init }
4365
    },
4366
#endif
4367

    
4368
#ifdef CONFIG_ADLIB
4369
    {
4370
        "adlib",
4371
#ifdef HAS_YMF262
4372
        "Yamaha YMF262 (OPL3)",
4373
#else
4374
        "Yamaha YM3812 (OPL2)",
4375
#endif
4376
        0,
4377
        1,
4378
        { .init_isa = Adlib_init }
4379
    },
4380
#endif
4381

    
4382
#ifdef CONFIG_GUS
4383
    {
4384
        "gus",
4385
        "Gravis Ultrasound GF1",
4386
        0,
4387
        1,
4388
        { .init_isa = GUS_init }
4389
    },
4390
#endif
4391

    
4392
#ifdef CONFIG_AC97
4393
    {
4394
        "ac97",
4395
        "Intel 82801AA AC97 Audio",
4396
        0,
4397
        0,
4398
        { .init_pci = ac97_init }
4399
    },
4400
#endif
4401

    
4402
#ifdef CONFIG_ES1370
4403
    {
4404
        "es1370",
4405
        "ENSONIQ AudioPCI ES1370",
4406
        0,
4407
        0,
4408
        { .init_pci = es1370_init }
4409
    },
4410
#endif
4411

    
4412
#endif /* HAS_AUDIO_CHOICE */
4413

    
4414
    { NULL, NULL, 0, 0, { NULL } }
4415
};
4416

    
4417
static void select_soundhw (const char *optarg)
4418
{
4419
    struct soundhw *c;
4420

    
4421
    if (*optarg == '?') {
4422
    show_valid_cards:
4423

    
4424
        printf ("Valid sound card names (comma separated):\n");
4425
        for (c = soundhw; c->name; ++c) {
4426
            printf ("%-11s %s\n", c->name, c->descr);
4427
        }
4428
        printf ("\n-soundhw all will enable all of the above\n");
4429
        exit (*optarg != '?');
4430
    }
4431
    else {
4432
        size_t l;
4433
        const char *p;
4434
        char *e;
4435
        int bad_card = 0;
4436

    
4437
        if (!strcmp (optarg, "all")) {
4438
            for (c = soundhw; c->name; ++c) {
4439
                c->enabled = 1;
4440
            }
4441
            return;
4442
        }
4443

    
4444
        p = optarg;
4445
        while (*p) {
4446
            e = strchr (p, ',');
4447
            l = !e ? strlen (p) : (size_t) (e - p);
4448

    
4449
            for (c = soundhw; c->name; ++c) {
4450
                if (!strncmp (c->name, p, l)) {
4451
                    c->enabled = 1;
4452
                    break;
4453
                }
4454
            }
4455

    
4456
            if (!c->name) {
4457
                if (l > 80) {
4458
                    fprintf (stderr,
4459
                             "Unknown sound card name (too big to show)\n");
4460
                }
4461
                else {
4462
                    fprintf (stderr, "Unknown sound card name `%.*s'\n",
4463
                             (int) l, p);
4464
                }
4465
                bad_card = 1;
4466
            }
4467
            p += l + (e != NULL);
4468
        }
4469

    
4470
        if (bad_card)
4471
            goto show_valid_cards;
4472
    }
4473
}
4474
#endif
4475

    
4476
static void select_vgahw (const char *p)
4477
{
4478
    const char *opts;
4479

    
4480
    cirrus_vga_enabled = 0;
4481
    std_vga_enabled = 0;
4482
    vmsvga_enabled = 0;
4483
    xenfb_enabled = 0;
4484
    if (strstart(p, "std", &opts)) {
4485
        std_vga_enabled = 1;
4486
    } else if (strstart(p, "cirrus", &opts)) {
4487
        cirrus_vga_enabled = 1;
4488
    } else if (strstart(p, "vmware", &opts)) {
4489
        vmsvga_enabled = 1;
4490
    } else if (strstart(p, "xenfb", &opts)) {
4491
        xenfb_enabled = 1;
4492
    } else if (!strstart(p, "none", &opts)) {
4493
    invalid_vga:
4494
        fprintf(stderr, "Unknown vga type: %s\n", p);
4495
        exit(1);
4496
    }
4497
    while (*opts) {
4498
        const char *nextopt;
4499

    
4500
        if (strstart(opts, ",retrace=", &nextopt)) {
4501
            opts = nextopt;
4502
            if (strstart(opts, "dumb", &nextopt))
4503
                vga_retrace_method = VGA_RETRACE_DUMB;
4504
            else if (strstart(opts, "precise", &nextopt))
4505
                vga_retrace_method = VGA_RETRACE_PRECISE;
4506
            else goto invalid_vga;
4507
        } else goto invalid_vga;
4508
        opts = nextopt;
4509
    }
4510
}
4511

    
4512
#ifdef TARGET_I386
4513
static int balloon_parse(const char *arg)
4514
{
4515
    char buf[128];
4516
    const char *p;
4517

    
4518
    if (!strcmp(arg, "none")) {
4519
        virtio_balloon = 0;
4520
    } else if (!strncmp(arg, "virtio", 6)) {
4521
        virtio_balloon = 1;
4522
        if (arg[6] == ',')  {
4523
            p = arg + 7;
4524
            if (get_param_value(buf, sizeof(buf), "addr", p)) {
4525
                virtio_balloon_devaddr = strdup(buf);
4526
            }
4527
        }
4528
    } else {
4529
        return -1;
4530
    }
4531
    return 0;
4532
}
4533
#endif
4534

    
4535
#ifdef _WIN32
4536
static BOOL WINAPI qemu_ctrl_handler(DWORD type)
4537
{
4538
    exit(STATUS_CONTROL_C_EXIT);
4539
    return TRUE;
4540
}
4541
#endif
4542

    
4543
int qemu_uuid_parse(const char *str, uint8_t *uuid)
4544
{
4545
    int ret;
4546

    
4547
    if(strlen(str) != 36)
4548
        return -1;
4549

    
4550
    ret = sscanf(str, UUID_FMT, &uuid[0], &uuid[1], &uuid[2], &uuid[3],
4551
            &uuid[4], &uuid[5], &uuid[6], &uuid[7], &uuid[8], &uuid[9],
4552
            &uuid[10], &uuid[11], &uuid[12], &uuid[13], &uuid[14], &uuid[15]);
4553

    
4554
    if(ret != 16)
4555
        return -1;
4556

    
4557
#ifdef TARGET_I386
4558
    smbios_add_field(1, offsetof(struct smbios_type_1, uuid), 16, uuid);
4559
#endif
4560

    
4561
    return 0;
4562
}
4563

    
4564
#define MAX_NET_CLIENTS 32
4565

    
4566
#ifndef _WIN32
4567

    
4568
static void termsig_handler(int signal)
4569
{
4570
    qemu_system_shutdown_request();
4571
}
4572

    
4573
static void sigchld_handler(int signal)
4574
{
4575
    waitpid(-1, NULL, WNOHANG);
4576
}
4577

    
4578
static void sighandler_setup(void)
4579
{
4580
    struct sigaction act;
4581

    
4582
    memset(&act, 0, sizeof(act));
4583
    act.sa_handler = termsig_handler;
4584
    sigaction(SIGINT,  &act, NULL);
4585
    sigaction(SIGHUP,  &act, NULL);
4586
    sigaction(SIGTERM, &act, NULL);
4587

    
4588
    act.sa_handler = sigchld_handler;
4589
    act.sa_flags = SA_NOCLDSTOP;
4590
    sigaction(SIGCHLD, &act, NULL);
4591
}
4592

    
4593
#endif
4594

    
4595
#ifdef _WIN32
4596
/* Look for support files in the same directory as the executable.  */
4597
static char *find_datadir(const char *argv0)
4598
{
4599
    char *p;
4600
    char buf[MAX_PATH];
4601
    DWORD len;
4602

    
4603
    len = GetModuleFileName(NULL, buf, sizeof(buf) - 1);
4604
    if (len == 0) {
4605
        return NULL;
4606
    }
4607

    
4608
    buf[len] = 0;
4609
    p = buf + len - 1;
4610
    while (p != buf && *p != '\\')
4611
        p--;
4612
    *p = 0;
4613
    if (access(buf, R_OK) == 0) {
4614
        return qemu_strdup(buf);
4615
    }
4616
    return NULL;
4617
}
4618
#else /* !_WIN32 */
4619

    
4620
/* Find a likely location for support files using the location of the binary.
4621
   For installed binaries this will be "$bindir/../share/qemu".  When
4622
   running from the build tree this will be "$bindir/../pc-bios".  */
4623
#define SHARE_SUFFIX "/share/qemu"
4624
#define BUILD_SUFFIX "/pc-bios"
4625
static char *find_datadir(const char *argv0)
4626
{
4627
    char *dir;
4628
    char *p = NULL;
4629
    char *res;
4630
#ifdef PATH_MAX
4631
    char buf[PATH_MAX];
4632
#endif
4633
    size_t max_len;
4634

    
4635
#if defined(__linux__)
4636
    {
4637
        int len;
4638
        len = readlink("/proc/self/exe", buf, sizeof(buf) - 1);
4639
        if (len > 0) {
4640
            buf[len] = 0;
4641
            p = buf;
4642
        }
4643
    }
4644
#elif defined(__FreeBSD__)
4645
    {
4646
        int len;
4647
        len = readlink("/proc/curproc/file", buf, sizeof(buf) - 1);
4648
        if (len > 0) {
4649
            buf[len] = 0;
4650
            p = buf;
4651
        }
4652
    }
4653
#endif
4654
    /* If we don't have any way of figuring out the actual executable
4655
       location then try argv[0].  */
4656
    if (!p) {
4657
#ifdef PATH_MAX
4658
        p = buf;
4659
#endif
4660
        p = realpath(argv0, p);
4661
        if (!p) {
4662
            return NULL;
4663
        }
4664
    }
4665
    dir = dirname(p);
4666
    dir = dirname(dir);
4667

    
4668
    max_len = strlen(dir) +
4669
        MAX(strlen(SHARE_SUFFIX), strlen(BUILD_SUFFIX)) + 1;
4670
    res = qemu_mallocz(max_len);
4671
    snprintf(res, max_len, "%s%s", dir, SHARE_SUFFIX);
4672
    if (access(res, R_OK)) {
4673
        snprintf(res, max_len, "%s%s", dir, BUILD_SUFFIX);
4674
        if (access(res, R_OK)) {
4675
            qemu_free(res);
4676
            res = NULL;
4677
        }
4678
    }
4679
#ifndef PATH_MAX
4680
    free(p);
4681
#endif
4682
    return res;
4683
}
4684
#undef SHARE_SUFFIX
4685
#undef BUILD_SUFFIX
4686
#endif
4687

    
4688
char *qemu_find_file(int type, const char *name)
4689
{
4690
    int len;
4691
    const char *subdir;
4692
    char *buf;
4693

    
4694
    /* If name contains path separators then try it as a straight path.  */
4695
    if ((strchr(name, '/') || strchr(name, '\\'))
4696
        && access(name, R_OK) == 0) {
4697
        return strdup(name);
4698
    }
4699
    switch (type) {
4700
    case QEMU_FILE_TYPE_BIOS:
4701
        subdir = "";
4702
        break;
4703
    case QEMU_FILE_TYPE_KEYMAP:
4704
        subdir = "keymaps/";
4705
        break;
4706
    default:
4707
        abort();
4708
    }
4709
    len = strlen(data_dir) + strlen(name) + strlen(subdir) + 2;
4710
    buf = qemu_mallocz(len);
4711
    snprintf(buf, len, "%s/%s%s", data_dir, subdir, name);
4712
    if (access(buf, R_OK)) {
4713
        qemu_free(buf);
4714
        return NULL;
4715
    }
4716
    return buf;
4717
}
4718

    
4719
static int device_init_func(QemuOpts *opts, void *opaque)
4720
{
4721
    DeviceState *dev;
4722

    
4723
    dev = qdev_device_add(opts);
4724
    if (!dev)
4725
        return -1;
4726
    return 0;
4727
}
4728

    
4729
struct device_config {
4730
    enum {
4731
        DEV_USB,       /* -usbdevice   */
4732
        DEV_BT,        /* -bt          */
4733
    } type;
4734
    const char *cmdline;
4735
    TAILQ_ENTRY(device_config) next;
4736
};
4737
TAILQ_HEAD(, device_config) device_configs = TAILQ_HEAD_INITIALIZER(device_configs);
4738

    
4739
static void add_device_config(int type, const char *cmdline)
4740
{
4741
    struct device_config *conf;
4742

    
4743
    conf = qemu_mallocz(sizeof(*conf));
4744
    conf->type = type;
4745
    conf->cmdline = cmdline;
4746
    TAILQ_INSERT_TAIL(&device_configs, conf, next);
4747
}
4748

    
4749
static int foreach_device_config(int type, int (*func)(const char *cmdline))
4750
{
4751
    struct device_config *conf;
4752
    int rc;
4753

    
4754
    TAILQ_FOREACH(conf, &device_configs, next) {
4755
        if (conf->type != type)
4756
            continue;
4757
        rc = func(conf->cmdline);
4758
        if (0 != rc)
4759
            return rc;
4760
    }
4761
    return 0;
4762
}
4763

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

    
4807
    qemu_cache_utils_init(envp);
4808

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

    
4840
    module_call_init(MODULE_INIT_MACHINE);
4841
    machine = find_default_machine();
4842
    cpu_model = NULL;
4843
    initrd_filename = NULL;
4844
    ram_size = 0;
4845
    snapshot = 0;
4846
    kernel_filename = NULL;
4847
    kernel_cmdline = "";
4848
    cyls = heads = secs = 0;
4849
    translation = BIOS_ATA_TRANSLATION_AUTO;
4850
    monitor_device = "vc:80Cx24C";
4851

    
4852
    serial_devices[0] = "vc:80Cx24C";
4853
    for(i = 1; i < MAX_SERIAL_PORTS; i++)
4854
        serial_devices[i] = NULL;
4855
    serial_device_index = 0;
4856

    
4857
    parallel_devices[0] = "vc:80Cx24C";
4858
    for(i = 1; i < MAX_PARALLEL_PORTS; i++)
4859
        parallel_devices[i] = NULL;
4860
    parallel_device_index = 0;
4861

    
4862
    for(i = 0; i < MAX_VIRTIO_CONSOLES; i++)
4863
        virtio_consoles[i] = NULL;
4864
    virtio_console_index = 0;
4865

    
4866
    for (i = 0; i < MAX_NODES; i++) {
4867
        node_mem[i] = 0;
4868
        node_cpumask[i] = 0;
4869
    }
4870

    
4871
    nb_net_clients = 0;
4872
    nb_numa_nodes = 0;
4873
    nb_nics = 0;
4874

    
4875
    tb_size = 0;
4876
    autostart= 1;
4877

    
4878
    register_watchdogs();
4879

    
4880
    optind = 1;
4881
    for(;;) {
4882
        if (optind >= argc)
4883
            break;
4884
        r = argv[optind];
4885
        if (r[0] != '-') {
4886
            hda_opts = drive_add(argv[optind++], HD_ALIAS, 0);
4887
        } else {
4888
            const QEMUOption *popt;
4889

    
4890
            optind++;
4891
            /* Treat --foo the same as -foo.  */
4892
            if (r[1] == '-')
4893
                r++;
4894
            popt = qemu_options;
4895
            for(;;) {
4896
                if (!popt->name) {
4897
                    fprintf(stderr, "%s: invalid option -- '%s'\n",
4898
                            argv[0], r);
4899
                    exit(1);
4900
                }
4901
                if (!strcmp(popt->name, r + 1))
4902
                    break;
4903
                popt++;
4904
            }
4905
            if (popt->flags & HAS_ARG) {
4906
                if (optind >= argc) {
4907
                    fprintf(stderr, "%s: option '%s' requires an argument\n",
4908
                            argv[0], r);
4909
                    exit(1);
4910
                }
4911
                optarg = argv[optind++];
4912
            } else {
4913
                optarg = NULL;
4914
            }
4915

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

    
5069
                    if (!strchr(optarg, '=')) {
5070
                        legacy = 1;
5071
                        pstrcpy(buf, sizeof(buf), optarg);
5072
                    } else if (check_params(buf, sizeof(buf), params, optarg) < 0) {
5073
                        fprintf(stderr,
5074
                                "qemu: unknown boot parameter '%s' in '%s'\n",
5075
                                buf, optarg);
5076
                        exit(1);
5077
                    }
5078

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

    
5165
                value = strtoul(optarg, &ptr, 10);
5166
                switch (*ptr) {
5167
                case 0: case 'M': case 'm':
5168
                    value <<= 20;
5169
                    break;
5170
                case 'G': case 'g':
5171
                    value <<= 30;
5172
                    break;
5173
                default:
5174
                    fprintf(stderr, "qemu: invalid ram size: %s\n", optarg);
5175
                    exit(1);
5176
                }
5177

    
5178
                /* On 32-bit hosts, QEMU is limited by virtual address space */
5179
                if (value > (2047 << 20)
5180
#ifndef CONFIG_KQEMU
5181
                    && HOST_LONG_BITS == 32
5182
#endif
5183
                    ) {
5184
                    fprintf(stderr, "qemu: at most 2047 MB RAM can be simulated\n");
5185
                    exit(1);
5186
                }
5187
                if (value != (uint64_t)(ram_addr_t)value) {
5188
                    fprintf(stderr, "qemu: ram size too large\n");
5189
                    exit(1);
5190
                }
5191
                ram_size = value;
5192
                break;
5193
            }
5194
            case QEMU_OPTION_d:
5195
                {
5196
                    int mask;
5197
                    const CPULogItem *item;
5198

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

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

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

    
5590
#if defined(CONFIG_KVM) && defined(CONFIG_KQEMU)
5591
    if (kvm_allowed && kqemu_allowed) {
5592
        fprintf(stderr,
5593
                "You can not enable both KVM and kqemu at the same time\n");
5594
        exit(1);
5595
    }
5596
#endif
5597

    
5598
    /*
5599
     * Default to max_cpus = smp_cpus, in case the user doesn't
5600
     * specify a max_cpus value.
5601
     */
5602
    if (!max_cpus)
5603
        max_cpus = smp_cpus;
5604

    
5605
    machine->max_cpus = machine->max_cpus ?: 1; /* Default to UP */
5606
    if (smp_cpus > machine->max_cpus) {
5607
        fprintf(stderr, "Number of SMP cpus requested (%d), exceeds max cpus "
5608
                "supported by machine `%s' (%d)\n", smp_cpus,  machine->name,
5609
                machine->max_cpus);
5610
        exit(1);
5611
    }
5612

    
5613
    if (display_type == DT_NOGRAPHIC) {
5614
       if (serial_device_index == 0)
5615
           serial_devices[0] = "stdio";
5616
       if (parallel_device_index == 0)
5617
           parallel_devices[0] = "null";
5618
       if (strncmp(monitor_device, "vc", 2) == 0)
5619
           monitor_device = "stdio";
5620
    }
5621

    
5622
#ifndef _WIN32
5623
    if (daemonize) {
5624
        pid_t pid;
5625

    
5626
        if (pipe(fds) == -1)
5627
            exit(1);
5628

    
5629
        pid = fork();
5630
        if (pid > 0) {
5631
            uint8_t status;
5632
            ssize_t len;
5633

    
5634
            close(fds[1]);
5635

    
5636
        again:
5637
            len = read(fds[0], &status, 1);
5638
            if (len == -1 && (errno == EINTR))
5639
                goto again;
5640

    
5641
            if (len != 1)
5642
                exit(1);
5643
            else if (status == 1) {
5644
                fprintf(stderr, "Could not acquire pidfile\n");
5645
                exit(1);
5646
            } else
5647
                exit(0);
5648
        } else if (pid < 0)
5649
            exit(1);
5650

    
5651
        setsid();
5652

    
5653
        pid = fork();
5654
        if (pid > 0)
5655
            exit(0);
5656
        else if (pid < 0)
5657
            exit(1);
5658

    
5659
        umask(027);
5660

    
5661
        signal(SIGTSTP, SIG_IGN);
5662
        signal(SIGTTOU, SIG_IGN);
5663
        signal(SIGTTIN, SIG_IGN);
5664
    }
5665

    
5666
    if (pid_file && qemu_create_pidfile(pid_file) != 0) {
5667
        if (daemonize) {
5668
            uint8_t status = 1;
5669
            write(fds[1], &status, 1);
5670
        } else
5671
            fprintf(stderr, "Could not acquire pid file\n");
5672
        exit(1);
5673
    }
5674
#endif
5675

    
5676
#ifdef CONFIG_KQEMU
5677
    if (smp_cpus > 1)
5678
        kqemu_allowed = 0;
5679
#endif
5680
    if (qemu_init_main_loop()) {
5681
        fprintf(stderr, "qemu_init_main_loop failed\n");
5682
        exit(1);
5683
    }
5684
    linux_boot = (kernel_filename != NULL);
5685

    
5686
    if (!linux_boot && *kernel_cmdline != '\0') {
5687
        fprintf(stderr, "-append only allowed with -kernel option\n");
5688
        exit(1);
5689
    }
5690

    
5691
    if (!linux_boot && initrd_filename != NULL) {
5692
        fprintf(stderr, "-initrd only allowed with -kernel option\n");
5693
        exit(1);
5694
    }
5695

    
5696
#ifndef _WIN32
5697
    /* Win32 doesn't support line-buffering and requires size >= 2 */
5698
    setvbuf(stdout, NULL, _IOLBF, 0);
5699
#endif
5700

    
5701
    init_timers();
5702
    if (init_timer_alarm() < 0) {
5703
        fprintf(stderr, "could not initialize alarm timer\n");
5704
        exit(1);
5705
    }
5706
    if (use_icount && icount_time_shift < 0) {
5707
        use_icount = 2;
5708
        /* 125MIPS seems a reasonable initial guess at the guest speed.
5709
           It will be corrected fairly quickly anyway.  */
5710
        icount_time_shift = 3;
5711
        init_icount_adjust();
5712
    }
5713

    
5714
#ifdef _WIN32
5715
    socket_init();
5716
#endif
5717

    
5718
    /* init network clients */
5719
    if (nb_net_clients == 0) {
5720
        /* if no clients, we use a default config */
5721
        net_clients[nb_net_clients++] = "nic";
5722
#ifdef CONFIG_SLIRP
5723
        net_clients[nb_net_clients++] = "user";
5724
#endif
5725
    }
5726

    
5727
    for(i = 0;i < nb_net_clients; i++) {
5728
        if (net_client_parse(net_clients[i]) < 0)
5729
            exit(1);
5730
    }
5731

    
5732
    net_boot = (boot_devices_bitmap >> ('n' - 'a')) & 0xF;
5733
    net_set_boot_mask(net_boot);
5734

    
5735
    net_client_check();
5736

    
5737
    /* init the bluetooth world */
5738
    if (foreach_device_config(DEV_BT, bt_parse))
5739
        exit(1);
5740

    
5741
    /* init the memory */
5742
    if (ram_size == 0)
5743
        ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
5744

    
5745
#ifdef CONFIG_KQEMU
5746
    /* FIXME: This is a nasty hack because kqemu can't cope with dynamic
5747
       guest ram allocation.  It needs to go away.  */
5748
    if (kqemu_allowed) {
5749
        kqemu_phys_ram_size = ram_size + 8 * 1024 * 1024 + 4 * 1024 * 1024;
5750
        kqemu_phys_ram_base = qemu_vmalloc(kqemu_phys_ram_size);
5751
        if (!kqemu_phys_ram_base) {
5752
            fprintf(stderr, "Could not allocate physical memory\n");
5753
            exit(1);
5754
        }
5755
    }
5756
#endif
5757

    
5758
    /* init the dynamic translator */
5759
    cpu_exec_init_all(tb_size * 1024 * 1024);
5760

    
5761
    bdrv_init();
5762

    
5763
    /* we always create the cdrom drive, even if no disk is there */
5764
    drive_add(NULL, CDROM_ALIAS);
5765

    
5766
    /* we always create at least one floppy */
5767
    drive_add(NULL, FD_ALIAS, 0);
5768

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

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

    
5778
    register_savevm("timer", 0, 2, timer_save, timer_load, NULL);
5779
    register_savevm_live("ram", 0, 3, ram_save_live, NULL, ram_load, NULL);
5780

    
5781
#ifndef _WIN32
5782
    /* must be after terminal init, SDL library changes signal handlers */
5783
    sighandler_setup();
5784
#endif
5785

    
5786
    /* Maintain compatibility with multiple stdio monitors */
5787
    if (!strcmp(monitor_device,"stdio")) {
5788
        for (i = 0; i < MAX_SERIAL_PORTS; i++) {
5789
            const char *devname = serial_devices[i];
5790
            if (devname && !strcmp(devname,"mon:stdio")) {
5791
                monitor_device = NULL;
5792
                break;
5793
            } else if (devname && !strcmp(devname,"stdio")) {
5794
                monitor_device = NULL;
5795
                serial_devices[i] = "mon:stdio";
5796
                break;
5797
            }
5798
        }
5799
    }
5800

    
5801
    if (nb_numa_nodes > 0) {
5802
        int i;
5803

    
5804
        if (nb_numa_nodes > smp_cpus) {
5805
            nb_numa_nodes = smp_cpus;
5806
        }
5807

    
5808
        /* If no memory size if given for any node, assume the default case
5809
         * and distribute the available memory equally across all nodes
5810
         */
5811
        for (i = 0; i < nb_numa_nodes; i++) {
5812
            if (node_mem[i] != 0)
5813
                break;
5814
        }
5815
        if (i == nb_numa_nodes) {
5816
            uint64_t usedmem = 0;
5817

    
5818
            /* On Linux, the each node's border has to be 8MB aligned,
5819
             * the final node gets the rest.
5820
             */
5821
            for (i = 0; i < nb_numa_nodes - 1; i++) {
5822
                node_mem[i] = (ram_size / nb_numa_nodes) & ~((1 << 23UL) - 1);
5823
                usedmem += node_mem[i];
5824
            }
5825
            node_mem[i] = ram_size - usedmem;
5826
        }
5827

    
5828
        for (i = 0; i < nb_numa_nodes; i++) {
5829
            if (node_cpumask[i] != 0)
5830
                break;
5831
        }
5832
        /* assigning the VCPUs round-robin is easier to implement, guest OSes
5833
         * must cope with this anyway, because there are BIOSes out there in
5834
         * real machines which also use this scheme.
5835
         */
5836
        if (i == nb_numa_nodes) {
5837
            for (i = 0; i < smp_cpus; i++) {
5838
                node_cpumask[i % nb_numa_nodes] |= 1 << i;
5839
            }
5840
        }
5841
    }
5842

    
5843
    if (kvm_enabled()) {
5844
        int ret;
5845

    
5846
        ret = kvm_init(smp_cpus);
5847
        if (ret < 0) {
5848
            fprintf(stderr, "failed to initialize KVM\n");
5849
            exit(1);
5850
        }
5851
    }
5852

    
5853
    if (monitor_device) {
5854
        monitor_hd = qemu_chr_open("monitor", monitor_device, NULL);
5855
        if (!monitor_hd) {
5856
            fprintf(stderr, "qemu: could not open monitor device '%s'\n", monitor_device);
5857
            exit(1);
5858
        }
5859
    }
5860

    
5861
    for(i = 0; i < MAX_SERIAL_PORTS; i++) {
5862
        const char *devname = serial_devices[i];
5863
        if (devname && strcmp(devname, "none")) {
5864
            char label[32];
5865
            snprintf(label, sizeof(label), "serial%d", i);
5866
            serial_hds[i] = qemu_chr_open(label, devname, NULL);
5867
            if (!serial_hds[i]) {
5868
                fprintf(stderr, "qemu: could not open serial device '%s'\n",
5869
                        devname);
5870
                exit(1);
5871
            }
5872
        }
5873
    }
5874

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

    
5889
    for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
5890
        const char *devname = virtio_consoles[i];
5891
        if (devname && strcmp(devname, "none")) {
5892
            char label[32];
5893
            snprintf(label, sizeof(label), "virtcon%d", i);
5894
            virtcon_hds[i] = qemu_chr_open(label, devname, NULL);
5895
            if (!virtcon_hds[i]) {
5896
                fprintf(stderr, "qemu: could not open virtio console '%s'\n",
5897
                        devname);
5898
                exit(1);
5899
            }
5900
        }
5901
    }
5902

    
5903
    module_call_init(MODULE_INIT_DEVICE);
5904

    
5905
    if (machine->compat_props) {
5906
        qdev_prop_register_compat(machine->compat_props);
5907
    }
5908
    machine->init(ram_size, boot_devices,
5909
                  kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
5910

    
5911

    
5912
    for (env = first_cpu; env != NULL; env = env->next_cpu) {
5913
        for (i = 0; i < nb_numa_nodes; i++) {
5914
            if (node_cpumask[i] & (1 << env->cpu_index)) {
5915
                env->numa_node = i;
5916
            }
5917
        }
5918
    }
5919

    
5920
    current_machine = machine;
5921

    
5922
    /* init USB devices */
5923
    if (usb_enabled) {
5924
        foreach_device_config(DEV_USB, usb_parse);
5925
    }
5926

    
5927
    /* init generic devices */
5928
    if (qemu_opts_foreach(&qemu_device_opts, device_init_func, NULL, 1) != 0)
5929
        exit(1);
5930

    
5931
    if (!display_state)
5932
        dumb_display_init();
5933
    /* just use the first displaystate for the moment */
5934
    ds = display_state;
5935

    
5936
    if (display_type == DT_DEFAULT) {
5937
#if defined(CONFIG_SDL) || defined(CONFIG_COCOA)
5938
        display_type = DT_SDL;
5939
#else
5940
        display_type = DT_VNC;
5941
        vnc_display = "localhost:0,to=99";
5942
        show_vnc_port = 1;
5943
#endif
5944
    }
5945
        
5946

    
5947
    switch (display_type) {
5948
    case DT_NOGRAPHIC:
5949
        break;
5950
#if defined(CONFIG_CURSES)
5951
    case DT_CURSES:
5952
        curses_display_init(ds, full_screen);
5953
        break;
5954
#endif
5955
#if defined(CONFIG_SDL)
5956
    case DT_SDL:
5957
        sdl_display_init(ds, full_screen, no_frame);
5958
        break;
5959
#elif defined(CONFIG_COCOA)
5960
    case DT_SDL:
5961
        cocoa_display_init(ds, full_screen);
5962
        break;
5963
#endif
5964
    case DT_VNC:
5965
        vnc_display_init(ds);
5966
        if (vnc_display_open(ds, vnc_display) < 0)
5967
            exit(1);
5968

    
5969
        if (show_vnc_port) {
5970
            printf("VNC server running on `%s'\n", vnc_display_local_addr(ds));
5971
        }
5972
        break;
5973
    default:
5974
        break;
5975
    }
5976
    dpy_resize(ds);
5977

    
5978
    dcl = ds->listeners;
5979
    while (dcl != NULL) {
5980
        if (dcl->dpy_refresh != NULL) {
5981
            ds->gui_timer = qemu_new_timer(rt_clock, gui_update, ds);
5982
            qemu_mod_timer(ds->gui_timer, qemu_get_clock(rt_clock));
5983
        }
5984
        dcl = dcl->next;
5985
    }
5986

    
5987
    if (display_type == DT_NOGRAPHIC || display_type == DT_VNC) {
5988
        nographic_timer = qemu_new_timer(rt_clock, nographic_update, NULL);
5989
        qemu_mod_timer(nographic_timer, qemu_get_clock(rt_clock));
5990
    }
5991

    
5992
    text_consoles_set_display(display_state);
5993
    qemu_chr_initial_reset();
5994

    
5995
    if (monitor_device && monitor_hd)
5996
        monitor_init(monitor_hd, MONITOR_USE_READLINE | MONITOR_IS_DEFAULT);
5997

    
5998
    for(i = 0; i < MAX_SERIAL_PORTS; i++) {
5999
        const char *devname = serial_devices[i];
6000
        if (devname && strcmp(devname, "none")) {
6001
            if (strstart(devname, "vc", 0))
6002
                qemu_chr_printf(serial_hds[i], "serial%d console\r\n", i);
6003
        }
6004
    }
6005

    
6006
    for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
6007
        const char *devname = parallel_devices[i];
6008
        if (devname && strcmp(devname, "none")) {
6009
            if (strstart(devname, "vc", 0))
6010
                qemu_chr_printf(parallel_hds[i], "parallel%d console\r\n", i);
6011
        }
6012
    }
6013

    
6014
    for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
6015
        const char *devname = virtio_consoles[i];
6016
        if (virtcon_hds[i] && devname) {
6017
            if (strstart(devname, "vc", 0))
6018
                qemu_chr_printf(virtcon_hds[i], "virtio console%d\r\n", i);
6019
        }
6020
    }
6021

    
6022
    if (gdbstub_dev && gdbserver_start(gdbstub_dev) < 0) {
6023
        fprintf(stderr, "qemu: could not open gdbserver on device '%s'\n",
6024
                gdbstub_dev);
6025
        exit(1);
6026
    }
6027

    
6028
    if (loadvm)
6029
        do_loadvm(cur_mon, loadvm);
6030

    
6031
    if (incoming) {
6032
        autostart = 0;
6033
        qemu_start_incoming_migration(incoming);
6034
    }
6035

    
6036
    else if (autostart)
6037
        vm_start();
6038

    
6039
#ifndef _WIN32
6040
    if (daemonize) {
6041
        uint8_t status = 0;
6042
        ssize_t len;
6043

    
6044
    again1:
6045
        len = write(fds[1], &status, 1);
6046
        if (len == -1 && (errno == EINTR))
6047
            goto again1;
6048

    
6049
        if (len != 1)
6050
            exit(1);
6051

    
6052
        chdir("/");
6053
        TFR(fd = open("/dev/null", O_RDWR));
6054
        if (fd == -1)
6055
            exit(1);
6056
    }
6057

    
6058
    if (run_as) {
6059
        pwd = getpwnam(run_as);
6060
        if (!pwd) {
6061
            fprintf(stderr, "User \"%s\" doesn't exist\n", run_as);
6062
            exit(1);
6063
        }
6064
    }
6065

    
6066
    if (chroot_dir) {
6067
        if (chroot(chroot_dir) < 0) {
6068
            fprintf(stderr, "chroot failed\n");
6069
            exit(1);
6070
        }
6071
        chdir("/");
6072
    }
6073

    
6074
    if (run_as) {
6075
        if (setgid(pwd->pw_gid) < 0) {
6076
            fprintf(stderr, "Failed to setgid(%d)\n", pwd->pw_gid);
6077
            exit(1);
6078
        }
6079
        if (setuid(pwd->pw_uid) < 0) {
6080
            fprintf(stderr, "Failed to setuid(%d)\n", pwd->pw_uid);
6081
            exit(1);
6082
        }
6083
        if (setuid(0) != -1) {
6084
            fprintf(stderr, "Dropping privileges failed\n");
6085
            exit(1);
6086
        }
6087
    }
6088

    
6089
    if (daemonize) {
6090
        dup2(fd, 0);
6091
        dup2(fd, 1);
6092
        dup2(fd, 2);
6093

    
6094
        close(fd);
6095
    }
6096
#endif
6097

    
6098
    main_loop();
6099
    quit_timers();
6100
    net_cleanup();
6101

    
6102
    return 0;
6103
}