Statistics
| Branch: | Revision:

root / vl.c @ e0f084bf

History | View | Annotate | Download (154.5 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 HOST_BSD etc. */
33
#include "config-host.h"
34

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

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

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

    
99
#if defined(__OpenBSD__)
100
#include <util.h>
101
#endif
102

    
103
#if defined(CONFIG_VDE)
104
#include <libvdeplug.h>
105
#endif
106

    
107
#ifdef _WIN32
108
#include <windows.h>
109
#include <malloc.h>
110
#include <sys/timeb.h>
111
#include <mmsystem.h>
112
#define getopt_long_only getopt_long
113
#define memalign(align, size) malloc(size)
114
#endif
115

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

    
129
#ifdef CONFIG_COCOA
130
#undef main
131
#define main qemu_main
132
#endif /* CONFIG_COCOA */
133

    
134
#include "hw/hw.h"
135
#include "hw/boards.h"
136
#include "hw/usb.h"
137
#include "hw/pcmcia.h"
138
#include "hw/pc.h"
139
#include "hw/audiodev.h"
140
#include "hw/isa.h"
141
#include "hw/baum.h"
142
#include "hw/bt.h"
143
#include "hw/watchdog.h"
144
#include "hw/smbios.h"
145
#include "hw/xen.h"
146
#include "bt-host.h"
147
#include "net.h"
148
#include "monitor.h"
149
#include "console.h"
150
#include "sysemu.h"
151
#include "gdbstub.h"
152
#include "qemu-timer.h"
153
#include "qemu-char.h"
154
#include "cache-utils.h"
155
#include "block.h"
156
#include "dma.h"
157
#include "audio/audio.h"
158
#include "migration.h"
159
#include "kvm.h"
160
#include "balloon.h"
161
#include "qemu-option.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
/* Max number of USB devices that can be specified on the commandline.  */
177
#define MAX_USB_CMDLINE 8
178

    
179
/* Max number of bluetooth switches on the commandline.  */
180
#define MAX_BT_CMDLINE 10
181

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

    
258
int nb_numa_nodes;
259
uint64_t node_mem[MAX_NODES];
260
uint64_t node_cpumask[MAX_NODES];
261

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

    
275
uint8_t qemu_uuid[16];
276

    
277
static QEMUBootSetHandler *boot_set_handler;
278
static void *boot_set_opaque;
279

    
280
/***********************************************************/
281
/* x86 ISA bus support */
282

    
283
target_phys_addr_t isa_mem_base = 0;
284
PicState2 *isa_pic;
285

    
286
/***********************************************************/
287
void hw_error(const char *fmt, ...)
288
{
289
    va_list ap;
290
    CPUState *env;
291

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

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

    
325
static QEMUBalloonEvent *qemu_balloon_event;
326
void *qemu_balloon_event_opaque;
327

    
328
void qemu_add_balloon_handler(QEMUBalloonEvent *func, void *opaque)
329
{
330
    qemu_balloon_event = func;
331
    qemu_balloon_event_opaque = opaque;
332
}
333

    
334
void qemu_balloon(ram_addr_t target)
335
{
336
    if (qemu_balloon_event)
337
        qemu_balloon_event(qemu_balloon_event_opaque, target);
338
}
339

    
340
ram_addr_t qemu_balloon_status(void)
341
{
342
    if (qemu_balloon_event)
343
        return qemu_balloon_event(qemu_balloon_event_opaque, 0);
344
    return 0;
345
}
346

    
347
/***********************************************************/
348
/* keyboard/mouse */
349

    
350
static QEMUPutKBDEvent *qemu_put_kbd_event;
351
static void *qemu_put_kbd_event_opaque;
352
static QEMUPutMouseEntry *qemu_put_mouse_event_head;
353
static QEMUPutMouseEntry *qemu_put_mouse_event_current;
354

    
355
void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque)
356
{
357
    qemu_put_kbd_event_opaque = opaque;
358
    qemu_put_kbd_event = func;
359
}
360

    
361
QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
362
                                                void *opaque, int absolute,
363
                                                const char *name)
364
{
365
    QEMUPutMouseEntry *s, *cursor;
366

    
367
    s = qemu_mallocz(sizeof(QEMUPutMouseEntry));
368

    
369
    s->qemu_put_mouse_event = func;
370
    s->qemu_put_mouse_event_opaque = opaque;
371
    s->qemu_put_mouse_event_absolute = absolute;
372
    s->qemu_put_mouse_event_name = qemu_strdup(name);
373
    s->next = NULL;
374

    
375
    if (!qemu_put_mouse_event_head) {
376
        qemu_put_mouse_event_head = qemu_put_mouse_event_current = s;
377
        return s;
378
    }
379

    
380
    cursor = qemu_put_mouse_event_head;
381
    while (cursor->next != NULL)
382
        cursor = cursor->next;
383

    
384
    cursor->next = s;
385
    qemu_put_mouse_event_current = s;
386

    
387
    return s;
388
}
389

    
390
void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry)
391
{
392
    QEMUPutMouseEntry *prev = NULL, *cursor;
393

    
394
    if (!qemu_put_mouse_event_head || entry == NULL)
395
        return;
396

    
397
    cursor = qemu_put_mouse_event_head;
398
    while (cursor != NULL && cursor != entry) {
399
        prev = cursor;
400
        cursor = cursor->next;
401
    }
402

    
403
    if (cursor == NULL) // does not exist or list empty
404
        return;
405
    else if (prev == NULL) { // entry is head
406
        qemu_put_mouse_event_head = cursor->next;
407
        if (qemu_put_mouse_event_current == entry)
408
            qemu_put_mouse_event_current = cursor->next;
409
        qemu_free(entry->qemu_put_mouse_event_name);
410
        qemu_free(entry);
411
        return;
412
    }
413

    
414
    prev->next = entry->next;
415

    
416
    if (qemu_put_mouse_event_current == entry)
417
        qemu_put_mouse_event_current = prev;
418

    
419
    qemu_free(entry->qemu_put_mouse_event_name);
420
    qemu_free(entry);
421
}
422

    
423
void kbd_put_keycode(int keycode)
424
{
425
    if (qemu_put_kbd_event) {
426
        qemu_put_kbd_event(qemu_put_kbd_event_opaque, keycode);
427
    }
428
}
429

    
430
void kbd_mouse_event(int dx, int dy, int dz, int buttons_state)
431
{
432
    QEMUPutMouseEvent *mouse_event;
433
    void *mouse_event_opaque;
434
    int width;
435

    
436
    if (!qemu_put_mouse_event_current) {
437
        return;
438
    }
439

    
440
    mouse_event =
441
        qemu_put_mouse_event_current->qemu_put_mouse_event;
442
    mouse_event_opaque =
443
        qemu_put_mouse_event_current->qemu_put_mouse_event_opaque;
444

    
445
    if (mouse_event) {
446
        if (graphic_rotate) {
447
            if (qemu_put_mouse_event_current->qemu_put_mouse_event_absolute)
448
                width = 0x7fff;
449
            else
450
                width = graphic_width - 1;
451
            mouse_event(mouse_event_opaque,
452
                                 width - dy, dx, dz, buttons_state);
453
        } else
454
            mouse_event(mouse_event_opaque,
455
                                 dx, dy, dz, buttons_state);
456
    }
457
}
458

    
459
int kbd_mouse_is_absolute(void)
460
{
461
    if (!qemu_put_mouse_event_current)
462
        return 0;
463

    
464
    return qemu_put_mouse_event_current->qemu_put_mouse_event_absolute;
465
}
466

    
467
void do_info_mice(Monitor *mon)
468
{
469
    QEMUPutMouseEntry *cursor;
470
    int index = 0;
471

    
472
    if (!qemu_put_mouse_event_head) {
473
        monitor_printf(mon, "No mouse devices connected\n");
474
        return;
475
    }
476

    
477
    monitor_printf(mon, "Mouse devices available:\n");
478
    cursor = qemu_put_mouse_event_head;
479
    while (cursor != NULL) {
480
        monitor_printf(mon, "%c Mouse #%d: %s\n",
481
                       (cursor == qemu_put_mouse_event_current ? '*' : ' '),
482
                       index, cursor->qemu_put_mouse_event_name);
483
        index++;
484
        cursor = cursor->next;
485
    }
486
}
487

    
488
void do_mouse_set(Monitor *mon, int index)
489
{
490
    QEMUPutMouseEntry *cursor;
491
    int i = 0;
492

    
493
    if (!qemu_put_mouse_event_head) {
494
        monitor_printf(mon, "No mouse devices connected\n");
495
        return;
496
    }
497

    
498
    cursor = qemu_put_mouse_event_head;
499
    while (cursor != NULL && index != i) {
500
        i++;
501
        cursor = cursor->next;
502
    }
503

    
504
    if (cursor != NULL)
505
        qemu_put_mouse_event_current = cursor;
506
    else
507
        monitor_printf(mon, "Mouse at given index not found\n");
508
}
509

    
510
/* compute with 96 bit intermediate result: (a*b)/c */
511
uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c)
512
{
513
    union {
514
        uint64_t ll;
515
        struct {
516
#ifdef WORDS_BIGENDIAN
517
            uint32_t high, low;
518
#else
519
            uint32_t low, high;
520
#endif
521
        } l;
522
    } u, res;
523
    uint64_t rl, rh;
524

    
525
    u.ll = a;
526
    rl = (uint64_t)u.l.low * (uint64_t)b;
527
    rh = (uint64_t)u.l.high * (uint64_t)b;
528
    rh += (rl >> 32);
529
    res.l.high = rh / c;
530
    res.l.low = (((rh % c) << 32) + (rl & 0xffffffff)) / c;
531
    return res.ll;
532
}
533

    
534
/***********************************************************/
535
/* real time host monotonic timer */
536

    
537
#define QEMU_TIMER_BASE 1000000000LL
538

    
539
#ifdef WIN32
540

    
541
static int64_t clock_freq;
542

    
543
static void init_get_clock(void)
544
{
545
    LARGE_INTEGER freq;
546
    int ret;
547
    ret = QueryPerformanceFrequency(&freq);
548
    if (ret == 0) {
549
        fprintf(stderr, "Could not calibrate ticks\n");
550
        exit(1);
551
    }
552
    clock_freq = freq.QuadPart;
553
}
554

    
555
static int64_t get_clock(void)
556
{
557
    LARGE_INTEGER ti;
558
    QueryPerformanceCounter(&ti);
559
    return muldiv64(ti.QuadPart, QEMU_TIMER_BASE, clock_freq);
560
}
561

    
562
#else
563

    
564
static int use_rt_clock;
565

    
566
static void init_get_clock(void)
567
{
568
    use_rt_clock = 0;
569
#if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD_version >= 500000) \
570
    || defined(__DragonFly__)
571
    {
572
        struct timespec ts;
573
        if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0) {
574
            use_rt_clock = 1;
575
        }
576
    }
577
#endif
578
}
579

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

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

    
614
/***********************************************************/
615
/* guest cycle counter */
616

    
617
static int64_t cpu_ticks_prev;
618
static int64_t cpu_ticks_offset;
619
static int64_t cpu_clock_offset;
620
static int cpu_ticks_enabled;
621

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

    
643
/* return the host CPU monotonic timer and handle stop/restart */
644
static int64_t cpu_get_clock(void)
645
{
646
    int64_t ti;
647
    if (!cpu_ticks_enabled) {
648
        return cpu_clock_offset;
649
    } else {
650
        ti = get_clock();
651
        return ti + cpu_clock_offset;
652
    }
653
}
654

    
655
/* enable cpu_get_ticks() */
656
void cpu_enable_ticks(void)
657
{
658
    if (!cpu_ticks_enabled) {
659
        cpu_ticks_offset -= cpu_get_real_ticks();
660
        cpu_clock_offset -= get_clock();
661
        cpu_ticks_enabled = 1;
662
    }
663
}
664

    
665
/* disable cpu_get_ticks() : the clock is stopped. You must not call
666
   cpu_get_ticks() after that.  */
667
void cpu_disable_ticks(void)
668
{
669
    if (cpu_ticks_enabled) {
670
        cpu_ticks_offset = cpu_get_ticks();
671
        cpu_clock_offset = cpu_get_clock();
672
        cpu_ticks_enabled = 0;
673
    }
674
}
675

    
676
/***********************************************************/
677
/* timers */
678

    
679
#define QEMU_TIMER_REALTIME 0
680
#define QEMU_TIMER_VIRTUAL  1
681

    
682
struct QEMUClock {
683
    int type;
684
    /* XXX: add frequency */
685
};
686

    
687
struct QEMUTimer {
688
    QEMUClock *clock;
689
    int64_t expire_time;
690
    QEMUTimerCB *cb;
691
    void *opaque;
692
    struct QEMUTimer *next;
693
};
694

    
695
struct qemu_alarm_timer {
696
    char const *name;
697
    unsigned int flags;
698

    
699
    int (*start)(struct qemu_alarm_timer *t);
700
    void (*stop)(struct qemu_alarm_timer *t);
701
    void (*rearm)(struct qemu_alarm_timer *t);
702
    void *priv;
703
};
704

    
705
#define ALARM_FLAG_DYNTICKS  0x1
706
#define ALARM_FLAG_EXPIRED   0x2
707

    
708
static inline int alarm_has_dynticks(struct qemu_alarm_timer *t)
709
{
710
    return t && (t->flags & ALARM_FLAG_DYNTICKS);
711
}
712

    
713
static void qemu_rearm_alarm_timer(struct qemu_alarm_timer *t)
714
{
715
    if (!alarm_has_dynticks(t))
716
        return;
717

    
718
    t->rearm(t);
719
}
720

    
721
/* TODO: MIN_TIMER_REARM_US should be optimized */
722
#define MIN_TIMER_REARM_US 250
723

    
724
static struct qemu_alarm_timer *alarm_timer;
725

    
726
#ifdef _WIN32
727

    
728
struct qemu_alarm_win32 {
729
    MMRESULT timerId;
730
    unsigned int period;
731
} alarm_win32_data = {0, -1};
732

    
733
static int win32_start_timer(struct qemu_alarm_timer *t);
734
static void win32_stop_timer(struct qemu_alarm_timer *t);
735
static void win32_rearm_timer(struct qemu_alarm_timer *t);
736

    
737
#else
738

    
739
static int unix_start_timer(struct qemu_alarm_timer *t);
740
static void unix_stop_timer(struct qemu_alarm_timer *t);
741

    
742
#ifdef __linux__
743

    
744
static int dynticks_start_timer(struct qemu_alarm_timer *t);
745
static void dynticks_stop_timer(struct qemu_alarm_timer *t);
746
static void dynticks_rearm_timer(struct qemu_alarm_timer *t);
747

    
748
static int hpet_start_timer(struct qemu_alarm_timer *t);
749
static void hpet_stop_timer(struct qemu_alarm_timer *t);
750

    
751
static int rtc_start_timer(struct qemu_alarm_timer *t);
752
static void rtc_stop_timer(struct qemu_alarm_timer *t);
753

    
754
#endif /* __linux__ */
755

    
756
#endif /* _WIN32 */
757

    
758
/* Correlation between real and virtual time is always going to be
759
   fairly approximate, so ignore small variation.
760
   When the guest is idle real and virtual time will be aligned in
761
   the IO wait loop.  */
762
#define ICOUNT_WOBBLE (QEMU_TIMER_BASE / 10)
763

    
764
static void icount_adjust(void)
765
{
766
    int64_t cur_time;
767
    int64_t cur_icount;
768
    int64_t delta;
769
    static int64_t last_delta;
770
    /* If the VM is not running, then do nothing.  */
771
    if (!vm_running)
772
        return;
773

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

    
794
static void icount_adjust_rt(void * opaque)
795
{
796
    qemu_mod_timer(icount_rt_timer,
797
                   qemu_get_clock(rt_clock) + 1000);
798
    icount_adjust();
799
}
800

    
801
static void icount_adjust_vm(void * opaque)
802
{
803
    qemu_mod_timer(icount_vm_timer,
804
                   qemu_get_clock(vm_clock) + QEMU_TIMER_BASE / 10);
805
    icount_adjust();
806
}
807

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

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

    
843
static void show_available_alarms(void)
844
{
845
    int i;
846

    
847
    printf("Available alarm timers, in order of precedence:\n");
848
    for (i = 0; alarm_timers[i].name; i++)
849
        printf("%s\n", alarm_timers[i].name);
850
}
851

    
852
static void configure_alarms(char const *opt)
853
{
854
    int i;
855
    int cur = 0;
856
    int count = ARRAY_SIZE(alarm_timers) - 1;
857
    char *arg;
858
    char *name;
859
    struct qemu_alarm_timer tmp;
860

    
861
    if (!strcmp(opt, "?")) {
862
        show_available_alarms();
863
        exit(0);
864
    }
865

    
866
    arg = strdup(opt);
867

    
868
    /* Reorder the array */
869
    name = strtok(arg, ",");
870
    while (name) {
871
        for (i = 0; i < count && alarm_timers[i].name; i++) {
872
            if (!strcmp(alarm_timers[i].name, name))
873
                break;
874
        }
875

    
876
        if (i == count) {
877
            fprintf(stderr, "Unknown clock %s\n", name);
878
            goto next;
879
        }
880

    
881
        if (i < cur)
882
            /* Ignore */
883
            goto next;
884

    
885
        /* Swap */
886
        tmp = alarm_timers[i];
887
        alarm_timers[i] = alarm_timers[cur];
888
        alarm_timers[cur] = tmp;
889

    
890
        cur++;
891
next:
892
        name = strtok(NULL, ",");
893
    }
894

    
895
    free(arg);
896

    
897
    if (cur) {
898
        /* Disable remaining timers */
899
        for (i = cur; i < count; i++)
900
            alarm_timers[i].name = NULL;
901
    } else {
902
        show_available_alarms();
903
        exit(1);
904
    }
905
}
906

    
907
QEMUClock *rt_clock;
908
QEMUClock *vm_clock;
909

    
910
static QEMUTimer *active_timers[2];
911

    
912
static QEMUClock *qemu_new_clock(int type)
913
{
914
    QEMUClock *clock;
915
    clock = qemu_mallocz(sizeof(QEMUClock));
916
    clock->type = type;
917
    return clock;
918
}
919

    
920
QEMUTimer *qemu_new_timer(QEMUClock *clock, QEMUTimerCB *cb, void *opaque)
921
{
922
    QEMUTimer *ts;
923

    
924
    ts = qemu_mallocz(sizeof(QEMUTimer));
925
    ts->clock = clock;
926
    ts->cb = cb;
927
    ts->opaque = opaque;
928
    return ts;
929
}
930

    
931
void qemu_free_timer(QEMUTimer *ts)
932
{
933
    qemu_free(ts);
934
}
935

    
936
/* stop a timer, but do not dealloc it */
937
void qemu_del_timer(QEMUTimer *ts)
938
{
939
    QEMUTimer **pt, *t;
940

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

    
956
/* modify the current timer so that it will be fired when current_time
957
   >= expire_time. The corresponding callback will be called. */
958
void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time)
959
{
960
    QEMUTimer **pt, *t;
961

    
962
    qemu_del_timer(ts);
963

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

    
980
    /* Rearm if necessary  */
981
    if (pt == &active_timers[ts->clock->type]) {
982
        if ((alarm_timer->flags & ALARM_FLAG_EXPIRED) == 0) {
983
            qemu_rearm_alarm_timer(alarm_timer);
984
        }
985
        /* Interrupt execution to force deadline recalculation.  */
986
        if (use_icount)
987
            qemu_notify_event();
988
    }
989
}
990

    
991
int qemu_timer_pending(QEMUTimer *ts)
992
{
993
    QEMUTimer *t;
994
    for(t = active_timers[ts->clock->type]; t != NULL; t = t->next) {
995
        if (t == ts)
996
            return 1;
997
    }
998
    return 0;
999
}
1000

    
1001
static inline int qemu_timer_expired(QEMUTimer *timer_head, int64_t current_time)
1002
{
1003
    if (!timer_head)
1004
        return 0;
1005
    return (timer_head->expire_time <= current_time);
1006
}
1007

    
1008
static void qemu_run_timers(QEMUTimer **ptimer_head, int64_t current_time)
1009
{
1010
    QEMUTimer *ts;
1011

    
1012
    for(;;) {
1013
        ts = *ptimer_head;
1014
        if (!ts || ts->expire_time > current_time)
1015
            break;
1016
        /* remove timer from the list before calling the callback */
1017
        *ptimer_head = ts->next;
1018
        ts->next = NULL;
1019

    
1020
        /* run the callback (the timer list can be modified) */
1021
        ts->cb(ts->opaque);
1022
    }
1023
}
1024

    
1025
int64_t qemu_get_clock(QEMUClock *clock)
1026
{
1027
    switch(clock->type) {
1028
    case QEMU_TIMER_REALTIME:
1029
        return get_clock() / 1000000;
1030
    default:
1031
    case QEMU_TIMER_VIRTUAL:
1032
        if (use_icount) {
1033
            return cpu_get_icount();
1034
        } else {
1035
            return cpu_get_clock();
1036
        }
1037
    }
1038
}
1039

    
1040
static void init_timers(void)
1041
{
1042
    init_get_clock();
1043
    ticks_per_sec = QEMU_TIMER_BASE;
1044
    rt_clock = qemu_new_clock(QEMU_TIMER_REALTIME);
1045
    vm_clock = qemu_new_clock(QEMU_TIMER_VIRTUAL);
1046
}
1047

    
1048
/* save a timer */
1049
void qemu_put_timer(QEMUFile *f, QEMUTimer *ts)
1050
{
1051
    uint64_t expire_time;
1052

    
1053
    if (qemu_timer_pending(ts)) {
1054
        expire_time = ts->expire_time;
1055
    } else {
1056
        expire_time = -1;
1057
    }
1058
    qemu_put_be64(f, expire_time);
1059
}
1060

    
1061
void qemu_get_timer(QEMUFile *f, QEMUTimer *ts)
1062
{
1063
    uint64_t expire_time;
1064

    
1065
    expire_time = qemu_get_be64(f);
1066
    if (expire_time != -1) {
1067
        qemu_mod_timer(ts, expire_time);
1068
    } else {
1069
        qemu_del_timer(ts);
1070
    }
1071
}
1072

    
1073
static void timer_save(QEMUFile *f, void *opaque)
1074
{
1075
    if (cpu_ticks_enabled) {
1076
        hw_error("cannot save state if virtual timers are running");
1077
    }
1078
    qemu_put_be64(f, cpu_ticks_offset);
1079
    qemu_put_be64(f, ticks_per_sec);
1080
    qemu_put_be64(f, cpu_clock_offset);
1081
}
1082

    
1083
static int timer_load(QEMUFile *f, void *opaque, int version_id)
1084
{
1085
    if (version_id != 1 && version_id != 2)
1086
        return -EINVAL;
1087
    if (cpu_ticks_enabled) {
1088
        return -EINVAL;
1089
    }
1090
    cpu_ticks_offset=qemu_get_be64(f);
1091
    ticks_per_sec=qemu_get_be64(f);
1092
    if (version_id == 2) {
1093
        cpu_clock_offset=qemu_get_be64(f);
1094
    }
1095
    return 0;
1096
}
1097

    
1098
static void qemu_event_increment(void);
1099

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

    
1146
#ifndef CONFIG_IOTHREAD
1147
        if (next_cpu) {
1148
            /* stop the currently executing cpu because a timer occured */
1149
            cpu_exit(next_cpu);
1150
#ifdef CONFIG_KQEMU
1151
            if (next_cpu->kqemu_enabled) {
1152
                kqemu_cpu_interrupt(next_cpu);
1153
            }
1154
#endif
1155
        }
1156
#endif
1157
        timer_alarm_pending = 1;
1158
        qemu_notify_event();
1159
    }
1160
}
1161

    
1162
static int64_t qemu_next_deadline(void)
1163
{
1164
    int64_t delta;
1165

    
1166
    if (active_timers[QEMU_TIMER_VIRTUAL]) {
1167
        delta = active_timers[QEMU_TIMER_VIRTUAL]->expire_time -
1168
                     qemu_get_clock(vm_clock);
1169
    } else {
1170
        /* To avoid problems with overflow limit this to 2^32.  */
1171
        delta = INT32_MAX;
1172
    }
1173

    
1174
    if (delta < 0)
1175
        delta = 0;
1176

    
1177
    return delta;
1178
}
1179

    
1180
#if defined(__linux__) || defined(_WIN32)
1181
static uint64_t qemu_next_deadline_dyntick(void)
1182
{
1183
    int64_t delta;
1184
    int64_t rtdelta;
1185

    
1186
    if (use_icount)
1187
        delta = INT32_MAX;
1188
    else
1189
        delta = (qemu_next_deadline() + 999) / 1000;
1190

    
1191
    if (active_timers[QEMU_TIMER_REALTIME]) {
1192
        rtdelta = (active_timers[QEMU_TIMER_REALTIME]->expire_time -
1193
                 qemu_get_clock(rt_clock))*1000;
1194
        if (rtdelta < delta)
1195
            delta = rtdelta;
1196
    }
1197

    
1198
    if (delta < MIN_TIMER_REARM_US)
1199
        delta = MIN_TIMER_REARM_US;
1200

    
1201
    return delta;
1202
}
1203
#endif
1204

    
1205
#ifndef _WIN32
1206

    
1207
/* Sets a specific flag */
1208
static int fcntl_setfl(int fd, int flag)
1209
{
1210
    int flags;
1211

    
1212
    flags = fcntl(fd, F_GETFL);
1213
    if (flags == -1)
1214
        return -errno;
1215

    
1216
    if (fcntl(fd, F_SETFL, flags | flag) == -1)
1217
        return -errno;
1218

    
1219
    return 0;
1220
}
1221

    
1222
#if defined(__linux__)
1223

    
1224
#define RTC_FREQ 1024
1225

    
1226
static void enable_sigio_timer(int fd)
1227
{
1228
    struct sigaction act;
1229

    
1230
    /* timer signal */
1231
    sigfillset(&act.sa_mask);
1232
    act.sa_flags = 0;
1233
    act.sa_handler = host_alarm_handler;
1234

    
1235
    sigaction(SIGIO, &act, NULL);
1236
    fcntl_setfl(fd, O_ASYNC);
1237
    fcntl(fd, F_SETOWN, getpid());
1238
}
1239

    
1240
static int hpet_start_timer(struct qemu_alarm_timer *t)
1241
{
1242
    struct hpet_info info;
1243
    int r, fd;
1244

    
1245
    fd = open("/dev/hpet", O_RDONLY);
1246
    if (fd < 0)
1247
        return -1;
1248

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

    
1258
    /* Check capabilities */
1259
    r = ioctl(fd, HPET_INFO, &info);
1260
    if (r < 0)
1261
        goto fail;
1262

    
1263
    /* Enable periodic mode */
1264
    r = ioctl(fd, HPET_EPI, 0);
1265
    if (info.hi_flags && (r < 0))
1266
        goto fail;
1267

    
1268
    /* Enable interrupt */
1269
    r = ioctl(fd, HPET_IE_ON, 0);
1270
    if (r < 0)
1271
        goto fail;
1272

    
1273
    enable_sigio_timer(fd);
1274
    t->priv = (void *)(long)fd;
1275

    
1276
    return 0;
1277
fail:
1278
    close(fd);
1279
    return -1;
1280
}
1281

    
1282
static void hpet_stop_timer(struct qemu_alarm_timer *t)
1283
{
1284
    int fd = (long)t->priv;
1285

    
1286
    close(fd);
1287
}
1288

    
1289
static int rtc_start_timer(struct qemu_alarm_timer *t)
1290
{
1291
    int rtc_fd;
1292
    unsigned long current_rtc_freq = 0;
1293

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

    
1311
    enable_sigio_timer(rtc_fd);
1312

    
1313
    t->priv = (void *)(long)rtc_fd;
1314

    
1315
    return 0;
1316
}
1317

    
1318
static void rtc_stop_timer(struct qemu_alarm_timer *t)
1319
{
1320
    int rtc_fd = (long)t->priv;
1321

    
1322
    close(rtc_fd);
1323
}
1324

    
1325
static int dynticks_start_timer(struct qemu_alarm_timer *t)
1326
{
1327
    struct sigevent ev;
1328
    timer_t host_timer;
1329
    struct sigaction act;
1330

    
1331
    sigfillset(&act.sa_mask);
1332
    act.sa_flags = 0;
1333
    act.sa_handler = host_alarm_handler;
1334

    
1335
    sigaction(SIGALRM, &act, NULL);
1336

    
1337
    /* 
1338
     * Initialize ev struct to 0 to avoid valgrind complaining
1339
     * about uninitialized data in timer_create call
1340
     */
1341
    memset(&ev, 0, sizeof(ev));
1342
    ev.sigev_value.sival_int = 0;
1343
    ev.sigev_notify = SIGEV_SIGNAL;
1344
    ev.sigev_signo = SIGALRM;
1345

    
1346
    if (timer_create(CLOCK_REALTIME, &ev, &host_timer)) {
1347
        perror("timer_create");
1348

    
1349
        /* disable dynticks */
1350
        fprintf(stderr, "Dynamic Ticks disabled\n");
1351

    
1352
        return -1;
1353
    }
1354

    
1355
    t->priv = (void *)(long)host_timer;
1356

    
1357
    return 0;
1358
}
1359

    
1360
static void dynticks_stop_timer(struct qemu_alarm_timer *t)
1361
{
1362
    timer_t host_timer = (timer_t)(long)t->priv;
1363

    
1364
    timer_delete(host_timer);
1365
}
1366

    
1367
static void dynticks_rearm_timer(struct qemu_alarm_timer *t)
1368
{
1369
    timer_t host_timer = (timer_t)(long)t->priv;
1370
    struct itimerspec timeout;
1371
    int64_t nearest_delta_us = INT64_MAX;
1372
    int64_t current_us;
1373

    
1374
    if (!active_timers[QEMU_TIMER_REALTIME] &&
1375
                !active_timers[QEMU_TIMER_VIRTUAL])
1376
        return;
1377

    
1378
    nearest_delta_us = qemu_next_deadline_dyntick();
1379

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

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

    
1401
#endif /* defined(__linux__) */
1402

    
1403
static int unix_start_timer(struct qemu_alarm_timer *t)
1404
{
1405
    struct sigaction act;
1406
    struct itimerval itv;
1407
    int err;
1408

    
1409
    /* timer signal */
1410
    sigfillset(&act.sa_mask);
1411
    act.sa_flags = 0;
1412
    act.sa_handler = host_alarm_handler;
1413

    
1414
    sigaction(SIGALRM, &act, NULL);
1415

    
1416
    itv.it_interval.tv_sec = 0;
1417
    /* for i386 kernel 2.6 to get 1 ms */
1418
    itv.it_interval.tv_usec = 999;
1419
    itv.it_value.tv_sec = 0;
1420
    itv.it_value.tv_usec = 10 * 1000;
1421

    
1422
    err = setitimer(ITIMER_REAL, &itv, NULL);
1423
    if (err)
1424
        return -1;
1425

    
1426
    return 0;
1427
}
1428

    
1429
static void unix_stop_timer(struct qemu_alarm_timer *t)
1430
{
1431
    struct itimerval itv;
1432

    
1433
    memset(&itv, 0, sizeof(itv));
1434
    setitimer(ITIMER_REAL, &itv, NULL);
1435
}
1436

    
1437
#endif /* !defined(_WIN32) */
1438

    
1439

    
1440
#ifdef _WIN32
1441

    
1442
static int win32_start_timer(struct qemu_alarm_timer *t)
1443
{
1444
    TIMECAPS tc;
1445
    struct qemu_alarm_win32 *data = t->priv;
1446
    UINT flags;
1447

    
1448
    memset(&tc, 0, sizeof(tc));
1449
    timeGetDevCaps(&tc, sizeof(tc));
1450

    
1451
    if (data->period < tc.wPeriodMin)
1452
        data->period = tc.wPeriodMin;
1453

    
1454
    timeBeginPeriod(data->period);
1455

    
1456
    flags = TIME_CALLBACK_FUNCTION;
1457
    if (alarm_has_dynticks(t))
1458
        flags |= TIME_ONESHOT;
1459
    else
1460
        flags |= TIME_PERIODIC;
1461

    
1462
    data->timerId = timeSetEvent(1,         // interval (ms)
1463
                        data->period,       // resolution
1464
                        host_alarm_handler, // function
1465
                        (DWORD)t,           // parameter
1466
                        flags);
1467

    
1468
    if (!data->timerId) {
1469
        perror("Failed to initialize win32 alarm timer");
1470
        timeEndPeriod(data->period);
1471
        return -1;
1472
    }
1473

    
1474
    return 0;
1475
}
1476

    
1477
static void win32_stop_timer(struct qemu_alarm_timer *t)
1478
{
1479
    struct qemu_alarm_win32 *data = t->priv;
1480

    
1481
    timeKillEvent(data->timerId);
1482
    timeEndPeriod(data->period);
1483
}
1484

    
1485
static void win32_rearm_timer(struct qemu_alarm_timer *t)
1486
{
1487
    struct qemu_alarm_win32 *data = t->priv;
1488
    uint64_t nearest_delta_us;
1489

    
1490
    if (!active_timers[QEMU_TIMER_REALTIME] &&
1491
                !active_timers[QEMU_TIMER_VIRTUAL])
1492
        return;
1493

    
1494
    nearest_delta_us = qemu_next_deadline_dyntick();
1495
    nearest_delta_us /= 1000;
1496

    
1497
    timeKillEvent(data->timerId);
1498

    
1499
    data->timerId = timeSetEvent(1,
1500
                        data->period,
1501
                        host_alarm_handler,
1502
                        (DWORD)t,
1503
                        TIME_ONESHOT | TIME_PERIODIC);
1504

    
1505
    if (!data->timerId) {
1506
        perror("Failed to re-arm win32 alarm timer");
1507

    
1508
        timeEndPeriod(data->period);
1509
        exit(1);
1510
    }
1511
}
1512

    
1513
#endif /* _WIN32 */
1514

    
1515
static int init_timer_alarm(void)
1516
{
1517
    struct qemu_alarm_timer *t = NULL;
1518
    int i, err = -1;
1519

    
1520
    for (i = 0; alarm_timers[i].name; i++) {
1521
        t = &alarm_timers[i];
1522

    
1523
        err = t->start(t);
1524
        if (!err)
1525
            break;
1526
    }
1527

    
1528
    if (err) {
1529
        err = -ENOENT;
1530
        goto fail;
1531
    }
1532

    
1533
    alarm_timer = t;
1534

    
1535
    return 0;
1536

    
1537
fail:
1538
    return err;
1539
}
1540

    
1541
static void quit_timers(void)
1542
{
1543
    alarm_timer->stop(alarm_timer);
1544
    alarm_timer = NULL;
1545
}
1546

    
1547
/***********************************************************/
1548
/* host time/date access */
1549
void qemu_get_timedate(struct tm *tm, int offset)
1550
{
1551
    time_t ti;
1552
    struct tm *ret;
1553

    
1554
    time(&ti);
1555
    ti += offset;
1556
    if (rtc_date_offset == -1) {
1557
        if (rtc_utc)
1558
            ret = gmtime(&ti);
1559
        else
1560
            ret = localtime(&ti);
1561
    } else {
1562
        ti -= rtc_date_offset;
1563
        ret = gmtime(&ti);
1564
    }
1565

    
1566
    memcpy(tm, ret, sizeof(struct tm));
1567
}
1568

    
1569
int qemu_timedate_diff(struct tm *tm)
1570
{
1571
    time_t seconds;
1572

    
1573
    if (rtc_date_offset == -1)
1574
        if (rtc_utc)
1575
            seconds = mktimegm(tm);
1576
        else
1577
            seconds = mktime(tm);
1578
    else
1579
        seconds = mktimegm(tm) + rtc_date_offset;
1580

    
1581
    return seconds - time(NULL);
1582
}
1583

    
1584
#ifdef _WIN32
1585
static void socket_cleanup(void)
1586
{
1587
    WSACleanup();
1588
}
1589

    
1590
static int socket_init(void)
1591
{
1592
    WSADATA Data;
1593
    int ret, err;
1594

    
1595
    ret = WSAStartup(MAKEWORD(2,2), &Data);
1596
    if (ret != 0) {
1597
        err = WSAGetLastError();
1598
        fprintf(stderr, "WSAStartup: %d\n", err);
1599
        return -1;
1600
    }
1601
    atexit(socket_cleanup);
1602
    return 0;
1603
}
1604
#endif
1605

    
1606
int get_next_param_value(char *buf, int buf_size,
1607
                         const char *tag, const char **pstr)
1608
{
1609
    const char *p;
1610
    char option[128];
1611

    
1612
    p = *pstr;
1613
    for(;;) {
1614
        p = get_opt_name(option, sizeof(option), p, '=');
1615
        if (*p != '=')
1616
            break;
1617
        p++;
1618
        if (!strcmp(tag, option)) {
1619
            *pstr = get_opt_value(buf, buf_size, p);
1620
            if (**pstr == ',') {
1621
                (*pstr)++;
1622
            }
1623
            return strlen(buf);
1624
        } else {
1625
            p = get_opt_value(NULL, 0, p);
1626
        }
1627
        if (*p != ',')
1628
            break;
1629
        p++;
1630
    }
1631
    return 0;
1632
}
1633

    
1634
int get_param_value(char *buf, int buf_size,
1635
                    const char *tag, const char *str)
1636
{
1637
    return get_next_param_value(buf, buf_size, tag, &str);
1638
}
1639

    
1640
int check_params(char *buf, int buf_size,
1641
                 const char * const *params, const char *str)
1642
{
1643
    const char *p;
1644
    int i;
1645

    
1646
    p = str;
1647
    while (*p != '\0') {
1648
        p = get_opt_name(buf, buf_size, p, '=');
1649
        if (*p != '=') {
1650
            return -1;
1651
        }
1652
        p++;
1653
        for (i = 0; params[i] != NULL; i++) {
1654
            if (!strcmp(params[i], buf)) {
1655
                break;
1656
            }
1657
        }
1658
        if (params[i] == NULL) {
1659
            return -1;
1660
        }
1661
        p = get_opt_value(NULL, 0, p);
1662
        if (*p != ',') {
1663
            break;
1664
        }
1665
        p++;
1666
    }
1667
    return 0;
1668
}
1669

    
1670
/***********************************************************/
1671
/* Bluetooth support */
1672
static int nb_hcis;
1673
static int cur_hci;
1674
static struct HCIInfo *hci_table[MAX_NICS];
1675

    
1676
static struct bt_vlan_s {
1677
    struct bt_scatternet_s net;
1678
    int id;
1679
    struct bt_vlan_s *next;
1680
} *first_bt_vlan;
1681

    
1682
/* find or alloc a new bluetooth "VLAN" */
1683
static struct bt_scatternet_s *qemu_find_bt_vlan(int id)
1684
{
1685
    struct bt_vlan_s **pvlan, *vlan;
1686
    for (vlan = first_bt_vlan; vlan != NULL; vlan = vlan->next) {
1687
        if (vlan->id == id)
1688
            return &vlan->net;
1689
    }
1690
    vlan = qemu_mallocz(sizeof(struct bt_vlan_s));
1691
    vlan->id = id;
1692
    pvlan = &first_bt_vlan;
1693
    while (*pvlan != NULL)
1694
        pvlan = &(*pvlan)->next;
1695
    *pvlan = vlan;
1696
    return &vlan->net;
1697
}
1698

    
1699
static void null_hci_send(struct HCIInfo *hci, const uint8_t *data, int len)
1700
{
1701
}
1702

    
1703
static int null_hci_addr_set(struct HCIInfo *hci, const uint8_t *bd_addr)
1704
{
1705
    return -ENOTSUP;
1706
}
1707

    
1708
static struct HCIInfo null_hci = {
1709
    .cmd_send = null_hci_send,
1710
    .sco_send = null_hci_send,
1711
    .acl_send = null_hci_send,
1712
    .bdaddr_set = null_hci_addr_set,
1713
};
1714

    
1715
struct HCIInfo *qemu_next_hci(void)
1716
{
1717
    if (cur_hci == nb_hcis)
1718
        return &null_hci;
1719

    
1720
    return hci_table[cur_hci++];
1721
}
1722

    
1723
static struct HCIInfo *hci_init(const char *str)
1724
{
1725
    char *endp;
1726
    struct bt_scatternet_s *vlan = 0;
1727

    
1728
    if (!strcmp(str, "null"))
1729
        /* null */
1730
        return &null_hci;
1731
    else if (!strncmp(str, "host", 4) && (str[4] == '\0' || str[4] == ':'))
1732
        /* host[:hciN] */
1733
        return bt_host_hci(str[4] ? str + 5 : "hci0");
1734
    else if (!strncmp(str, "hci", 3)) {
1735
        /* hci[,vlan=n] */
1736
        if (str[3]) {
1737
            if (!strncmp(str + 3, ",vlan=", 6)) {
1738
                vlan = qemu_find_bt_vlan(strtol(str + 9, &endp, 0));
1739
                if (*endp)
1740
                    vlan = 0;
1741
            }
1742
        } else
1743
            vlan = qemu_find_bt_vlan(0);
1744
        if (vlan)
1745
           return bt_new_hci(vlan);
1746
    }
1747

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

    
1750
    return 0;
1751
}
1752

    
1753
static int bt_hci_parse(const char *str)
1754
{
1755
    struct HCIInfo *hci;
1756
    bdaddr_t bdaddr;
1757

    
1758
    if (nb_hcis >= MAX_NICS) {
1759
        fprintf(stderr, "qemu: Too many bluetooth HCIs (max %i).\n", MAX_NICS);
1760
        return -1;
1761
    }
1762

    
1763
    hci = hci_init(str);
1764
    if (!hci)
1765
        return -1;
1766

    
1767
    bdaddr.b[0] = 0x52;
1768
    bdaddr.b[1] = 0x54;
1769
    bdaddr.b[2] = 0x00;
1770
    bdaddr.b[3] = 0x12;
1771
    bdaddr.b[4] = 0x34;
1772
    bdaddr.b[5] = 0x56 + nb_hcis;
1773
    hci->bdaddr_set(hci, bdaddr.b);
1774

    
1775
    hci_table[nb_hcis++] = hci;
1776

    
1777
    return 0;
1778
}
1779

    
1780
static void bt_vhci_add(int vlan_id)
1781
{
1782
    struct bt_scatternet_s *vlan = qemu_find_bt_vlan(vlan_id);
1783

    
1784
    if (!vlan->slave)
1785
        fprintf(stderr, "qemu: warning: adding a VHCI to "
1786
                        "an empty scatternet %i\n", vlan_id);
1787

    
1788
    bt_vhci_init(bt_new_hci(vlan));
1789
}
1790

    
1791
static struct bt_device_s *bt_device_add(const char *opt)
1792
{
1793
    struct bt_scatternet_s *vlan;
1794
    int vlan_id = 0;
1795
    char *endp = strstr(opt, ",vlan=");
1796
    int len = (endp ? endp - opt : strlen(opt)) + 1;
1797
    char devname[10];
1798

    
1799
    pstrcpy(devname, MIN(sizeof(devname), len), opt);
1800

    
1801
    if (endp) {
1802
        vlan_id = strtol(endp + 6, &endp, 0);
1803
        if (*endp) {
1804
            fprintf(stderr, "qemu: unrecognised bluetooth vlan Id\n");
1805
            return 0;
1806
        }
1807
    }
1808

    
1809
    vlan = qemu_find_bt_vlan(vlan_id);
1810

    
1811
    if (!vlan->slave)
1812
        fprintf(stderr, "qemu: warning: adding a slave device to "
1813
                        "an empty scatternet %i\n", vlan_id);
1814

    
1815
    if (!strcmp(devname, "keyboard"))
1816
        return bt_keyboard_init(vlan);
1817

    
1818
    fprintf(stderr, "qemu: unsupported bluetooth device `%s'\n", devname);
1819
    return 0;
1820
}
1821

    
1822
static int bt_parse(const char *opt)
1823
{
1824
    const char *endp, *p;
1825
    int vlan;
1826

    
1827
    if (strstart(opt, "hci", &endp)) {
1828
        if (!*endp || *endp == ',') {
1829
            if (*endp)
1830
                if (!strstart(endp, ",vlan=", 0))
1831
                    opt = endp + 1;
1832

    
1833
            return bt_hci_parse(opt);
1834
       }
1835
    } else if (strstart(opt, "vhci", &endp)) {
1836
        if (!*endp || *endp == ',') {
1837
            if (*endp) {
1838
                if (strstart(endp, ",vlan=", &p)) {
1839
                    vlan = strtol(p, (char **) &endp, 0);
1840
                    if (*endp) {
1841
                        fprintf(stderr, "qemu: bad scatternet '%s'\n", p);
1842
                        return 1;
1843
                    }
1844
                } else {
1845
                    fprintf(stderr, "qemu: bad parameter '%s'\n", endp + 1);
1846
                    return 1;
1847
                }
1848
            } else
1849
                vlan = 0;
1850

    
1851
            bt_vhci_add(vlan);
1852
            return 0;
1853
        }
1854
    } else if (strstart(opt, "device:", &endp))
1855
        return !bt_device_add(endp);
1856

    
1857
    fprintf(stderr, "qemu: bad bluetooth parameter '%s'\n", opt);
1858
    return 1;
1859
}
1860

    
1861
/***********************************************************/
1862
/* QEMU Block devices */
1863

    
1864
#define HD_ALIAS "index=%d,media=disk"
1865
#define CDROM_ALIAS "index=2,media=cdrom"
1866
#define FD_ALIAS "index=%d,if=floppy"
1867
#define PFLASH_ALIAS "if=pflash"
1868
#define MTD_ALIAS "if=mtd"
1869
#define SD_ALIAS "index=0,if=sd"
1870

    
1871
static int drive_opt_get_free_idx(void)
1872
{
1873
    int index;
1874

    
1875
    for (index = 0; index < MAX_DRIVES; index++)
1876
        if (!drives_opt[index].used) {
1877
            drives_opt[index].used = 1;
1878
            return index;
1879
        }
1880

    
1881
    return -1;
1882
}
1883

    
1884
static int drive_get_free_idx(void)
1885
{
1886
    int index;
1887

    
1888
    for (index = 0; index < MAX_DRIVES; index++)
1889
        if (!drives_table[index].used) {
1890
            drives_table[index].used = 1;
1891
            return index;
1892
        }
1893

    
1894
    return -1;
1895
}
1896

    
1897
int drive_add(const char *file, const char *fmt, ...)
1898
{
1899
    va_list ap;
1900
    int index = drive_opt_get_free_idx();
1901

    
1902
    if (nb_drives_opt >= MAX_DRIVES || index == -1) {
1903
        fprintf(stderr, "qemu: too many drives\n");
1904
        return -1;
1905
    }
1906

    
1907
    drives_opt[index].file = file;
1908
    va_start(ap, fmt);
1909
    vsnprintf(drives_opt[index].opt,
1910
              sizeof(drives_opt[0].opt), fmt, ap);
1911
    va_end(ap);
1912

    
1913
    nb_drives_opt++;
1914
    return index;
1915
}
1916

    
1917
void drive_remove(int index)
1918
{
1919
    drives_opt[index].used = 0;
1920
    nb_drives_opt--;
1921
}
1922

    
1923
int drive_get_index(BlockInterfaceType type, int bus, int unit)
1924
{
1925
    int index;
1926

    
1927
    /* seek interface, bus and unit */
1928

    
1929
    for (index = 0; index < MAX_DRIVES; index++)
1930
        if (drives_table[index].type == type &&
1931
            drives_table[index].bus == bus &&
1932
            drives_table[index].unit == unit &&
1933
            drives_table[index].used)
1934
        return index;
1935

    
1936
    return -1;
1937
}
1938

    
1939
int drive_get_max_bus(BlockInterfaceType type)
1940
{
1941
    int max_bus;
1942
    int index;
1943

    
1944
    max_bus = -1;
1945
    for (index = 0; index < nb_drives; index++) {
1946
        if(drives_table[index].type == type &&
1947
           drives_table[index].bus > max_bus)
1948
            max_bus = drives_table[index].bus;
1949
    }
1950
    return max_bus;
1951
}
1952

    
1953
const char *drive_get_serial(BlockDriverState *bdrv)
1954
{
1955
    int index;
1956

    
1957
    for (index = 0; index < nb_drives; index++)
1958
        if (drives_table[index].bdrv == bdrv)
1959
            return drives_table[index].serial;
1960

    
1961
    return "\0";
1962
}
1963

    
1964
BlockInterfaceErrorAction drive_get_onerror(BlockDriverState *bdrv)
1965
{
1966
    int index;
1967

    
1968
    for (index = 0; index < nb_drives; index++)
1969
        if (drives_table[index].bdrv == bdrv)
1970
            return drives_table[index].onerror;
1971

    
1972
    return BLOCK_ERR_STOP_ENOSPC;
1973
}
1974

    
1975
static void bdrv_format_print(void *opaque, const char *name)
1976
{
1977
    fprintf(stderr, " %s", name);
1978
}
1979

    
1980
void drive_uninit(BlockDriverState *bdrv)
1981
{
1982
    int i;
1983

    
1984
    for (i = 0; i < MAX_DRIVES; i++)
1985
        if (drives_table[i].bdrv == bdrv) {
1986
            drives_table[i].bdrv = NULL;
1987
            drives_table[i].used = 0;
1988
            drive_remove(drives_table[i].drive_opt_idx);
1989
            nb_drives--;
1990
            break;
1991
        }
1992
}
1993

    
1994
int drive_init(struct drive_opt *arg, int snapshot, void *opaque)
1995
{
1996
    char buf[128];
1997
    char file[1024];
1998
    char devname[128];
1999
    char serial[21];
2000
    const char *mediastr = "";
2001
    BlockInterfaceType type;
2002
    enum { MEDIA_DISK, MEDIA_CDROM } media;
2003
    int bus_id, unit_id;
2004
    int cyls, heads, secs, translation;
2005
    BlockDriverState *bdrv;
2006
    BlockDriver *drv = NULL;
2007
    QEMUMachine *machine = opaque;
2008
    int max_devs;
2009
    int index;
2010
    int cache;
2011
    int bdrv_flags, onerror;
2012
    const char *devaddr;
2013
    int drives_table_idx;
2014
    char *str = arg->opt;
2015
    static const char * const params[] = { "bus", "unit", "if", "index",
2016
                                           "cyls", "heads", "secs", "trans",
2017
                                           "media", "snapshot", "file",
2018
                                           "cache", "format", "serial",
2019
                                           "werror", "addr",
2020
                                           NULL };
2021

    
2022
    if (check_params(buf, sizeof(buf), params, str) < 0) {
2023
         fprintf(stderr, "qemu: unknown parameter '%s' in '%s'\n",
2024
                         buf, str);
2025
         return -1;
2026
    }
2027

    
2028
    file[0] = 0;
2029
    cyls = heads = secs = 0;
2030
    bus_id = 0;
2031
    unit_id = -1;
2032
    translation = BIOS_ATA_TRANSLATION_AUTO;
2033
    index = -1;
2034
    cache = 1;
2035

    
2036
    if (machine->use_scsi) {
2037
        type = IF_SCSI;
2038
        max_devs = MAX_SCSI_DEVS;
2039
        pstrcpy(devname, sizeof(devname), "scsi");
2040
    } else {
2041
        type = IF_IDE;
2042
        max_devs = MAX_IDE_DEVS;
2043
        pstrcpy(devname, sizeof(devname), "ide");
2044
    }
2045
    media = MEDIA_DISK;
2046

    
2047
    /* extract parameters */
2048

    
2049
    if (get_param_value(buf, sizeof(buf), "bus", str)) {
2050
        bus_id = strtol(buf, NULL, 0);
2051
        if (bus_id < 0) {
2052
            fprintf(stderr, "qemu: '%s' invalid bus id\n", str);
2053
            return -1;
2054
        }
2055
    }
2056

    
2057
    if (get_param_value(buf, sizeof(buf), "unit", str)) {
2058
        unit_id = strtol(buf, NULL, 0);
2059
        if (unit_id < 0) {
2060
            fprintf(stderr, "qemu: '%s' invalid unit id\n", str);
2061
            return -1;
2062
        }
2063
    }
2064

    
2065
    if (get_param_value(buf, sizeof(buf), "if", str)) {
2066
        pstrcpy(devname, sizeof(devname), buf);
2067
        if (!strcmp(buf, "ide")) {
2068
            type = IF_IDE;
2069
            max_devs = MAX_IDE_DEVS;
2070
        } else if (!strcmp(buf, "scsi")) {
2071
            type = IF_SCSI;
2072
            max_devs = MAX_SCSI_DEVS;
2073
        } else if (!strcmp(buf, "floppy")) {
2074
            type = IF_FLOPPY;
2075
            max_devs = 0;
2076
        } else if (!strcmp(buf, "pflash")) {
2077
            type = IF_PFLASH;
2078
            max_devs = 0;
2079
        } else if (!strcmp(buf, "mtd")) {
2080
            type = IF_MTD;
2081
            max_devs = 0;
2082
        } else if (!strcmp(buf, "sd")) {
2083
            type = IF_SD;
2084
            max_devs = 0;
2085
        } else if (!strcmp(buf, "virtio")) {
2086
            type = IF_VIRTIO;
2087
            max_devs = 0;
2088
        } else if (!strcmp(buf, "xen")) {
2089
            type = IF_XEN;
2090
            max_devs = 0;
2091
        } else {
2092
            fprintf(stderr, "qemu: '%s' unsupported bus type '%s'\n", str, buf);
2093
            return -1;
2094
        }
2095
    }
2096

    
2097
    if (get_param_value(buf, sizeof(buf), "index", str)) {
2098
        index = strtol(buf, NULL, 0);
2099
        if (index < 0) {
2100
            fprintf(stderr, "qemu: '%s' invalid index\n", str);
2101
            return -1;
2102
        }
2103
    }
2104

    
2105
    if (get_param_value(buf, sizeof(buf), "cyls", str)) {
2106
        cyls = strtol(buf, NULL, 0);
2107
    }
2108

    
2109
    if (get_param_value(buf, sizeof(buf), "heads", str)) {
2110
        heads = strtol(buf, NULL, 0);
2111
    }
2112

    
2113
    if (get_param_value(buf, sizeof(buf), "secs", str)) {
2114
        secs = strtol(buf, NULL, 0);
2115
    }
2116

    
2117
    if (cyls || heads || secs) {
2118
        if (cyls < 1 || cyls > 16383) {
2119
            fprintf(stderr, "qemu: '%s' invalid physical cyls number\n", str);
2120
            return -1;
2121
        }
2122
        if (heads < 1 || heads > 16) {
2123
            fprintf(stderr, "qemu: '%s' invalid physical heads number\n", str);
2124
            return -1;
2125
        }
2126
        if (secs < 1 || secs > 63) {
2127
            fprintf(stderr, "qemu: '%s' invalid physical secs number\n", str);
2128
            return -1;
2129
        }
2130
    }
2131

    
2132
    if (get_param_value(buf, sizeof(buf), "trans", str)) {
2133
        if (!cyls) {
2134
            fprintf(stderr,
2135
                    "qemu: '%s' trans must be used with cyls,heads and secs\n",
2136
                    str);
2137
            return -1;
2138
        }
2139
        if (!strcmp(buf, "none"))
2140
            translation = BIOS_ATA_TRANSLATION_NONE;
2141
        else if (!strcmp(buf, "lba"))
2142
            translation = BIOS_ATA_TRANSLATION_LBA;
2143
        else if (!strcmp(buf, "auto"))
2144
            translation = BIOS_ATA_TRANSLATION_AUTO;
2145
        else {
2146
            fprintf(stderr, "qemu: '%s' invalid translation type\n", str);
2147
            return -1;
2148
        }
2149
    }
2150

    
2151
    if (get_param_value(buf, sizeof(buf), "media", str)) {
2152
        if (!strcmp(buf, "disk")) {
2153
            media = MEDIA_DISK;
2154
        } else if (!strcmp(buf, "cdrom")) {
2155
            if (cyls || secs || heads) {
2156
                fprintf(stderr,
2157
                        "qemu: '%s' invalid physical CHS format\n", str);
2158
                return -1;
2159
            }
2160
            media = MEDIA_CDROM;
2161
        } else {
2162
            fprintf(stderr, "qemu: '%s' invalid media\n", str);
2163
            return -1;
2164
        }
2165
    }
2166

    
2167
    if (get_param_value(buf, sizeof(buf), "snapshot", str)) {
2168
        if (!strcmp(buf, "on"))
2169
            snapshot = 1;
2170
        else if (!strcmp(buf, "off"))
2171
            snapshot = 0;
2172
        else {
2173
            fprintf(stderr, "qemu: '%s' invalid snapshot option\n", str);
2174
            return -1;
2175
        }
2176
    }
2177

    
2178
    if (get_param_value(buf, sizeof(buf), "cache", str)) {
2179
        if (!strcmp(buf, "off") || !strcmp(buf, "none"))
2180
            cache = 0;
2181
        else if (!strcmp(buf, "writethrough"))
2182
            cache = 1;
2183
        else if (!strcmp(buf, "writeback"))
2184
            cache = 2;
2185
        else {
2186
           fprintf(stderr, "qemu: invalid cache option\n");
2187
           return -1;
2188
        }
2189
    }
2190

    
2191
    if (get_param_value(buf, sizeof(buf), "format", str)) {
2192
       if (strcmp(buf, "?") == 0) {
2193
            fprintf(stderr, "qemu: Supported formats:");
2194
            bdrv_iterate_format(bdrv_format_print, NULL);
2195
            fprintf(stderr, "\n");
2196
            return -1;
2197
        }
2198
        drv = bdrv_find_format(buf);
2199
        if (!drv) {
2200
            fprintf(stderr, "qemu: '%s' invalid format\n", buf);
2201
            return -1;
2202
        }
2203
    }
2204

    
2205
    if (arg->file == NULL)
2206
        get_param_value(file, sizeof(file), "file", str);
2207
    else
2208
        pstrcpy(file, sizeof(file), arg->file);
2209

    
2210
    if (!get_param_value(serial, sizeof(serial), "serial", str))
2211
            memset(serial, 0,  sizeof(serial));
2212

    
2213
    onerror = BLOCK_ERR_STOP_ENOSPC;
2214
    if (get_param_value(buf, sizeof(serial), "werror", str)) {
2215
        if (type != IF_IDE && type != IF_SCSI && type != IF_VIRTIO) {
2216
            fprintf(stderr, "werror is no supported by this format\n");
2217
            return -1;
2218
        }
2219
        if (!strcmp(buf, "ignore"))
2220
            onerror = BLOCK_ERR_IGNORE;
2221
        else if (!strcmp(buf, "enospc"))
2222
            onerror = BLOCK_ERR_STOP_ENOSPC;
2223
        else if (!strcmp(buf, "stop"))
2224
            onerror = BLOCK_ERR_STOP_ANY;
2225
        else if (!strcmp(buf, "report"))
2226
            onerror = BLOCK_ERR_REPORT;
2227
        else {
2228
            fprintf(stderr, "qemu: '%s' invalid write error action\n", buf);
2229
            return -1;
2230
        }
2231
    }
2232

    
2233
    devaddr = NULL;
2234
    if (get_param_value(buf, sizeof(buf), "addr", str)) {
2235
        if (type != IF_VIRTIO) {
2236
            fprintf(stderr, "addr is not supported by in '%s'\n", str);
2237
            return -1;
2238
        }
2239
        devaddr = strdup(buf);
2240
    }
2241

    
2242
    /* compute bus and unit according index */
2243

    
2244
    if (index != -1) {
2245
        if (bus_id != 0 || unit_id != -1) {
2246
            fprintf(stderr,
2247
                    "qemu: '%s' index cannot be used with bus and unit\n", str);
2248
            return -1;
2249
        }
2250
        if (max_devs == 0)
2251
        {
2252
            unit_id = index;
2253
            bus_id = 0;
2254
        } else {
2255
            unit_id = index % max_devs;
2256
            bus_id = index / max_devs;
2257
        }
2258
    }
2259

    
2260
    /* if user doesn't specify a unit_id,
2261
     * try to find the first free
2262
     */
2263

    
2264
    if (unit_id == -1) {
2265
       unit_id = 0;
2266
       while (drive_get_index(type, bus_id, unit_id) != -1) {
2267
           unit_id++;
2268
           if (max_devs && unit_id >= max_devs) {
2269
               unit_id -= max_devs;
2270
               bus_id++;
2271
           }
2272
       }
2273
    }
2274

    
2275
    /* check unit id */
2276

    
2277
    if (max_devs && unit_id >= max_devs) {
2278
        fprintf(stderr, "qemu: '%s' unit %d too big (max is %d)\n",
2279
                        str, unit_id, max_devs - 1);
2280
        return -1;
2281
    }
2282

    
2283
    /*
2284
     * ignore multiple definitions
2285
     */
2286

    
2287
    if (drive_get_index(type, bus_id, unit_id) != -1)
2288
        return -2;
2289

    
2290
    /* init */
2291

    
2292
    if (type == IF_IDE || type == IF_SCSI)
2293
        mediastr = (media == MEDIA_CDROM) ? "-cd" : "-hd";
2294
    if (max_devs)
2295
        snprintf(buf, sizeof(buf), "%s%i%s%i",
2296
                 devname, bus_id, mediastr, unit_id);
2297
    else
2298
        snprintf(buf, sizeof(buf), "%s%s%i",
2299
                 devname, mediastr, unit_id);
2300
    bdrv = bdrv_new(buf);
2301
    drives_table_idx = drive_get_free_idx();
2302
    drives_table[drives_table_idx].bdrv = bdrv;
2303
    drives_table[drives_table_idx].devaddr = devaddr;
2304
    drives_table[drives_table_idx].type = type;
2305
    drives_table[drives_table_idx].bus = bus_id;
2306
    drives_table[drives_table_idx].unit = unit_id;
2307
    drives_table[drives_table_idx].onerror = onerror;
2308
    drives_table[drives_table_idx].drive_opt_idx = arg - drives_opt;
2309
    strncpy(drives_table[drives_table_idx].serial, serial, sizeof(serial));
2310
    nb_drives++;
2311

    
2312
    switch(type) {
2313
    case IF_IDE:
2314
    case IF_SCSI:
2315
    case IF_XEN:
2316
        switch(media) {
2317
        case MEDIA_DISK:
2318
            if (cyls != 0) {
2319
                bdrv_set_geometry_hint(bdrv, cyls, heads, secs);
2320
                bdrv_set_translation_hint(bdrv, translation);
2321
            }
2322
            break;
2323
        case MEDIA_CDROM:
2324
            bdrv_set_type_hint(bdrv, BDRV_TYPE_CDROM);
2325
            break;
2326
        }
2327
        break;
2328
    case IF_SD:
2329
        /* FIXME: This isn't really a floppy, but it's a reasonable
2330
           approximation.  */
2331
    case IF_FLOPPY:
2332
        bdrv_set_type_hint(bdrv, BDRV_TYPE_FLOPPY);
2333
        break;
2334
    case IF_PFLASH:
2335
    case IF_MTD:
2336
    case IF_VIRTIO:
2337
        break;
2338
    case IF_COUNT:
2339
        abort();
2340
    }
2341
    if (!file[0])
2342
        return -2;
2343
    bdrv_flags = 0;
2344
    if (snapshot) {
2345
        bdrv_flags |= BDRV_O_SNAPSHOT;
2346
        cache = 2; /* always use write-back with snapshot */
2347
    }
2348
    if (cache == 0) /* no caching */
2349
        bdrv_flags |= BDRV_O_NOCACHE;
2350
    else if (cache == 2) /* write-back */
2351
        bdrv_flags |= BDRV_O_CACHE_WB;
2352
    if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0) {
2353
        fprintf(stderr, "qemu: could not open disk image %s\n",
2354
                        file);
2355
        return -1;
2356
    }
2357
    if (bdrv_key_required(bdrv))
2358
        autostart = 0;
2359
    return drives_table_idx;
2360
}
2361

    
2362
void qemu_register_boot_set(QEMUBootSetHandler *func, void *opaque)
2363
{
2364
    boot_set_handler = func;
2365
    boot_set_opaque = opaque;
2366
}
2367

    
2368
int qemu_boot_set(const char *boot_devices)
2369
{
2370
    if (!boot_set_handler) {
2371
        return -EINVAL;
2372
    }
2373
    return boot_set_handler(boot_set_opaque, boot_devices);
2374
}
2375

    
2376
static int parse_bootdevices(char *devices)
2377
{
2378
    /* We just do some generic consistency checks */
2379
    const char *p;
2380
    int bitmap = 0;
2381

    
2382
    for (p = devices; *p != '\0'; p++) {
2383
        /* Allowed boot devices are:
2384
         * a-b: floppy disk drives
2385
         * c-f: IDE disk drives
2386
         * g-m: machine implementation dependant drives
2387
         * n-p: network devices
2388
         * It's up to each machine implementation to check if the given boot
2389
         * devices match the actual hardware implementation and firmware
2390
         * features.
2391
         */
2392
        if (*p < 'a' || *p > 'p') {
2393
            fprintf(stderr, "Invalid boot device '%c'\n", *p);
2394
            exit(1);
2395
        }
2396
        if (bitmap & (1 << (*p - 'a'))) {
2397
            fprintf(stderr, "Boot device '%c' was given twice\n", *p);
2398
            exit(1);
2399
        }
2400
        bitmap |= 1 << (*p - 'a');
2401
    }
2402
    return bitmap;
2403
}
2404

    
2405
static void restore_boot_devices(void *opaque)
2406
{
2407
    char *standard_boot_devices = opaque;
2408

    
2409
    qemu_boot_set(standard_boot_devices);
2410

    
2411
    qemu_unregister_reset(restore_boot_devices, standard_boot_devices);
2412
    qemu_free(standard_boot_devices);
2413
}
2414

    
2415
static void numa_add(const char *optarg)
2416
{
2417
    char option[128];
2418
    char *endptr;
2419
    unsigned long long value, endvalue;
2420
    int nodenr;
2421

    
2422
    optarg = get_opt_name(option, 128, optarg, ',') + 1;
2423
    if (!strcmp(option, "node")) {
2424
        if (get_param_value(option, 128, "nodeid", optarg) == 0) {
2425
            nodenr = nb_numa_nodes;
2426
        } else {
2427
            nodenr = strtoull(option, NULL, 10);
2428
        }
2429

    
2430
        if (get_param_value(option, 128, "mem", optarg) == 0) {
2431
            node_mem[nodenr] = 0;
2432
        } else {
2433
            value = strtoull(option, &endptr, 0);
2434
            switch (*endptr) {
2435
            case 0: case 'M': case 'm':
2436
                value <<= 20;
2437
                break;
2438
            case 'G': case 'g':
2439
                value <<= 30;
2440
                break;
2441
            }
2442
            node_mem[nodenr] = value;
2443
        }
2444
        if (get_param_value(option, 128, "cpus", optarg) == 0) {
2445
            node_cpumask[nodenr] = 0;
2446
        } else {
2447
            value = strtoull(option, &endptr, 10);
2448
            if (value >= 64) {
2449
                value = 63;
2450
                fprintf(stderr, "only 64 CPUs in NUMA mode supported.\n");
2451
            } else {
2452
                if (*endptr == '-') {
2453
                    endvalue = strtoull(endptr+1, &endptr, 10);
2454
                    if (endvalue >= 63) {
2455
                        endvalue = 62;
2456
                        fprintf(stderr,
2457
                            "only 63 CPUs in NUMA mode supported.\n");
2458
                    }
2459
                    value = (1 << (endvalue + 1)) - (1 << value);
2460
                } else {
2461
                    value = 1 << value;
2462
                }
2463
            }
2464
            node_cpumask[nodenr] = value;
2465
        }
2466
        nb_numa_nodes++;
2467
    }
2468
    return;
2469
}
2470

    
2471
/***********************************************************/
2472
/* USB devices */
2473

    
2474
static USBPort *used_usb_ports;
2475
static USBPort *free_usb_ports;
2476

    
2477
/* ??? Maybe change this to register a hub to keep track of the topology.  */
2478
void qemu_register_usb_port(USBPort *port, void *opaque, int index,
2479
                            usb_attachfn attach)
2480
{
2481
    port->opaque = opaque;
2482
    port->index = index;
2483
    port->attach = attach;
2484
    port->next = free_usb_ports;
2485
    free_usb_ports = port;
2486
}
2487

    
2488
int usb_device_add_dev(USBDevice *dev)
2489
{
2490
    USBPort *port;
2491

    
2492
    /* Find a USB port to add the device to.  */
2493
    port = free_usb_ports;
2494
    if (!port->next) {
2495
        USBDevice *hub;
2496

    
2497
        /* Create a new hub and chain it on.  */
2498
        free_usb_ports = NULL;
2499
        port->next = used_usb_ports;
2500
        used_usb_ports = port;
2501

    
2502
        hub = usb_hub_init(VM_USB_HUB_SIZE);
2503
        usb_attach(port, hub);
2504
        port = free_usb_ports;
2505
    }
2506

    
2507
    free_usb_ports = port->next;
2508
    port->next = used_usb_ports;
2509
    used_usb_ports = port;
2510
    usb_attach(port, dev);
2511
    return 0;
2512
}
2513

    
2514
static void usb_msd_password_cb(void *opaque, int err)
2515
{
2516
    USBDevice *dev = opaque;
2517

    
2518
    if (!err)
2519
        usb_device_add_dev(dev);
2520
    else
2521
        dev->handle_destroy(dev);
2522
}
2523

    
2524
static int usb_device_add(const char *devname, int is_hotplug)
2525
{
2526
    const char *p;
2527
    USBDevice *dev;
2528

    
2529
    if (!free_usb_ports)
2530
        return -1;
2531

    
2532
    if (strstart(devname, "host:", &p)) {
2533
        dev = usb_host_device_open(p);
2534
    } else if (!strcmp(devname, "mouse")) {
2535
        dev = usb_mouse_init();
2536
    } else if (!strcmp(devname, "tablet")) {
2537
        dev = usb_tablet_init();
2538
    } else if (!strcmp(devname, "keyboard")) {
2539
        dev = usb_keyboard_init();
2540
    } else if (strstart(devname, "disk:", &p)) {
2541
        BlockDriverState *bs;
2542

    
2543
        dev = usb_msd_init(p);
2544
        if (!dev)
2545
            return -1;
2546
        bs = usb_msd_get_bdrv(dev);
2547
        if (bdrv_key_required(bs)) {
2548
            autostart = 0;
2549
            if (is_hotplug) {
2550
                monitor_read_bdrv_key_start(cur_mon, bs, usb_msd_password_cb,
2551
                                            dev);
2552
                return 0;
2553
            }
2554
        }
2555
    } else if (!strcmp(devname, "wacom-tablet")) {
2556
        dev = usb_wacom_init();
2557
    } else if (strstart(devname, "serial:", &p)) {
2558
        dev = usb_serial_init(p);
2559
#ifdef CONFIG_BRLAPI
2560
    } else if (!strcmp(devname, "braille")) {
2561
        dev = usb_baum_init();
2562
#endif
2563
    } else if (strstart(devname, "net:", &p)) {
2564
        int nic = nb_nics;
2565

    
2566
        if (net_client_init(NULL, "nic", p) < 0)
2567
            return -1;
2568
        nd_table[nic].model = "usb";
2569
        dev = usb_net_init(&nd_table[nic]);
2570
    } else if (!strcmp(devname, "bt") || strstart(devname, "bt:", &p)) {
2571
        dev = usb_bt_init(devname[2] ? hci_init(p) :
2572
                        bt_new_hci(qemu_find_bt_vlan(0)));
2573
    } else {
2574
        return -1;
2575
    }
2576
    if (!dev)
2577
        return -1;
2578

    
2579
    return usb_device_add_dev(dev);
2580
}
2581

    
2582
int usb_device_del_addr(int bus_num, int addr)
2583
{
2584
    USBPort *port;
2585
    USBPort **lastp;
2586
    USBDevice *dev;
2587

    
2588
    if (!used_usb_ports)
2589
        return -1;
2590

    
2591
    if (bus_num != 0)
2592
        return -1;
2593

    
2594
    lastp = &used_usb_ports;
2595
    port = used_usb_ports;
2596
    while (port && port->dev->addr != addr) {
2597
        lastp = &port->next;
2598
        port = port->next;
2599
    }
2600

    
2601
    if (!port)
2602
        return -1;
2603

    
2604
    dev = port->dev;
2605
    *lastp = port->next;
2606
    usb_attach(port, NULL);
2607
    dev->handle_destroy(dev);
2608
    port->next = free_usb_ports;
2609
    free_usb_ports = port;
2610
    return 0;
2611
}
2612

    
2613
static int usb_device_del(const char *devname)
2614
{
2615
    int bus_num, addr;
2616
    const char *p;
2617

    
2618
    if (strstart(devname, "host:", &p))
2619
        return usb_host_device_close(p);
2620

    
2621
    if (!used_usb_ports)
2622
        return -1;
2623

    
2624
    p = strchr(devname, '.');
2625
    if (!p)
2626
        return -1;
2627
    bus_num = strtoul(devname, NULL, 0);
2628
    addr = strtoul(p + 1, NULL, 0);
2629

    
2630
    return usb_device_del_addr(bus_num, addr);
2631
}
2632

    
2633
void do_usb_add(Monitor *mon, const char *devname)
2634
{
2635
    usb_device_add(devname, 1);
2636
}
2637

    
2638
void do_usb_del(Monitor *mon, const char *devname)
2639
{
2640
    usb_device_del(devname);
2641
}
2642

    
2643
void usb_info(Monitor *mon)
2644
{
2645
    USBDevice *dev;
2646
    USBPort *port;
2647
    const char *speed_str;
2648

    
2649
    if (!usb_enabled) {
2650
        monitor_printf(mon, "USB support not enabled\n");
2651
        return;
2652
    }
2653

    
2654
    for (port = used_usb_ports; port; port = port->next) {
2655
        dev = port->dev;
2656
        if (!dev)
2657
            continue;
2658
        switch(dev->speed) {
2659
        case USB_SPEED_LOW:
2660
            speed_str = "1.5";
2661
            break;
2662
        case USB_SPEED_FULL:
2663
            speed_str = "12";
2664
            break;
2665
        case USB_SPEED_HIGH:
2666
            speed_str = "480";
2667
            break;
2668
        default:
2669
            speed_str = "?";
2670
            break;
2671
        }
2672
        monitor_printf(mon, "  Device %d.%d, Speed %s Mb/s, Product %s\n",
2673
                       0, dev->addr, speed_str, dev->devname);
2674
    }
2675
}
2676

    
2677
/***********************************************************/
2678
/* PCMCIA/Cardbus */
2679

    
2680
static struct pcmcia_socket_entry_s {
2681
    PCMCIASocket *socket;
2682
    struct pcmcia_socket_entry_s *next;
2683
} *pcmcia_sockets = 0;
2684

    
2685
void pcmcia_socket_register(PCMCIASocket *socket)
2686
{
2687
    struct pcmcia_socket_entry_s *entry;
2688

    
2689
    entry = qemu_malloc(sizeof(struct pcmcia_socket_entry_s));
2690
    entry->socket = socket;
2691
    entry->next = pcmcia_sockets;
2692
    pcmcia_sockets = entry;
2693
}
2694

    
2695
void pcmcia_socket_unregister(PCMCIASocket *socket)
2696
{
2697
    struct pcmcia_socket_entry_s *entry, **ptr;
2698

    
2699
    ptr = &pcmcia_sockets;
2700
    for (entry = *ptr; entry; ptr = &entry->next, entry = *ptr)
2701
        if (entry->socket == socket) {
2702
            *ptr = entry->next;
2703
            qemu_free(entry);
2704
        }
2705
}
2706

    
2707
void pcmcia_info(Monitor *mon)
2708
{
2709
    struct pcmcia_socket_entry_s *iter;
2710

    
2711
    if (!pcmcia_sockets)
2712
        monitor_printf(mon, "No PCMCIA sockets\n");
2713

    
2714
    for (iter = pcmcia_sockets; iter; iter = iter->next)
2715
        monitor_printf(mon, "%s: %s\n", iter->socket->slot_string,
2716
                       iter->socket->attached ? iter->socket->card_string :
2717
                       "Empty");
2718
}
2719

    
2720
/***********************************************************/
2721
/* register display */
2722

    
2723
struct DisplayAllocator default_allocator = {
2724
    defaultallocator_create_displaysurface,
2725
    defaultallocator_resize_displaysurface,
2726
    defaultallocator_free_displaysurface
2727
};
2728

    
2729
void register_displaystate(DisplayState *ds)
2730
{
2731
    DisplayState **s;
2732
    s = &display_state;
2733
    while (*s != NULL)
2734
        s = &(*s)->next;
2735
    ds->next = NULL;
2736
    *s = ds;
2737
}
2738

    
2739
DisplayState *get_displaystate(void)
2740
{
2741
    return display_state;
2742
}
2743

    
2744
DisplayAllocator *register_displayallocator(DisplayState *ds, DisplayAllocator *da)
2745
{
2746
    if(ds->allocator ==  &default_allocator) ds->allocator = da;
2747
    return ds->allocator;
2748
}
2749

    
2750
/* dumb display */
2751

    
2752
static void dumb_display_init(void)
2753
{
2754
    DisplayState *ds = qemu_mallocz(sizeof(DisplayState));
2755
    ds->allocator = &default_allocator;
2756
    ds->surface = qemu_create_displaysurface(ds, 640, 480);
2757
    register_displaystate(ds);
2758
}
2759

    
2760
/***********************************************************/
2761
/* I/O handling */
2762

    
2763
typedef struct IOHandlerRecord {
2764
    int fd;
2765
    IOCanRWHandler *fd_read_poll;
2766
    IOHandler *fd_read;
2767
    IOHandler *fd_write;
2768
    int deleted;
2769
    void *opaque;
2770
    /* temporary data */
2771
    struct pollfd *ufd;
2772
    struct IOHandlerRecord *next;
2773
} IOHandlerRecord;
2774

    
2775
static IOHandlerRecord *first_io_handler;
2776

    
2777
/* XXX: fd_read_poll should be suppressed, but an API change is
2778
   necessary in the character devices to suppress fd_can_read(). */
2779
int qemu_set_fd_handler2(int fd,
2780
                         IOCanRWHandler *fd_read_poll,
2781
                         IOHandler *fd_read,
2782
                         IOHandler *fd_write,
2783
                         void *opaque)
2784
{
2785
    IOHandlerRecord **pioh, *ioh;
2786

    
2787
    if (!fd_read && !fd_write) {
2788
        pioh = &first_io_handler;
2789
        for(;;) {
2790
            ioh = *pioh;
2791
            if (ioh == NULL)
2792
                break;
2793
            if (ioh->fd == fd) {
2794
                ioh->deleted = 1;
2795
                break;
2796
            }
2797
            pioh = &ioh->next;
2798
        }
2799
    } else {
2800
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
2801
            if (ioh->fd == fd)
2802
                goto found;
2803
        }
2804
        ioh = qemu_mallocz(sizeof(IOHandlerRecord));
2805
        ioh->next = first_io_handler;
2806
        first_io_handler = ioh;
2807
    found:
2808
        ioh->fd = fd;
2809
        ioh->fd_read_poll = fd_read_poll;
2810
        ioh->fd_read = fd_read;
2811
        ioh->fd_write = fd_write;
2812
        ioh->opaque = opaque;
2813
        ioh->deleted = 0;
2814
    }
2815
    return 0;
2816
}
2817

    
2818
int qemu_set_fd_handler(int fd,
2819
                        IOHandler *fd_read,
2820
                        IOHandler *fd_write,
2821
                        void *opaque)
2822
{
2823
    return qemu_set_fd_handler2(fd, NULL, fd_read, fd_write, opaque);
2824
}
2825

    
2826
#ifdef _WIN32
2827
/***********************************************************/
2828
/* Polling handling */
2829

    
2830
typedef struct PollingEntry {
2831
    PollingFunc *func;
2832
    void *opaque;
2833
    struct PollingEntry *next;
2834
} PollingEntry;
2835

    
2836
static PollingEntry *first_polling_entry;
2837

    
2838
int qemu_add_polling_cb(PollingFunc *func, void *opaque)
2839
{
2840
    PollingEntry **ppe, *pe;
2841
    pe = qemu_mallocz(sizeof(PollingEntry));
2842
    pe->func = func;
2843
    pe->opaque = opaque;
2844
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next);
2845
    *ppe = pe;
2846
    return 0;
2847
}
2848

    
2849
void qemu_del_polling_cb(PollingFunc *func, void *opaque)
2850
{
2851
    PollingEntry **ppe, *pe;
2852
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next) {
2853
        pe = *ppe;
2854
        if (pe->func == func && pe->opaque == opaque) {
2855
            *ppe = pe->next;
2856
            qemu_free(pe);
2857
            break;
2858
        }
2859
    }
2860
}
2861

    
2862
/***********************************************************/
2863
/* Wait objects support */
2864
typedef struct WaitObjects {
2865
    int num;
2866
    HANDLE events[MAXIMUM_WAIT_OBJECTS + 1];
2867
    WaitObjectFunc *func[MAXIMUM_WAIT_OBJECTS + 1];
2868
    void *opaque[MAXIMUM_WAIT_OBJECTS + 1];
2869
} WaitObjects;
2870

    
2871
static WaitObjects wait_objects = {0};
2872

    
2873
int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
2874
{
2875
    WaitObjects *w = &wait_objects;
2876

    
2877
    if (w->num >= MAXIMUM_WAIT_OBJECTS)
2878
        return -1;
2879
    w->events[w->num] = handle;
2880
    w->func[w->num] = func;
2881
    w->opaque[w->num] = opaque;
2882
    w->num++;
2883
    return 0;
2884
}
2885

    
2886
void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
2887
{
2888
    int i, found;
2889
    WaitObjects *w = &wait_objects;
2890

    
2891
    found = 0;
2892
    for (i = 0; i < w->num; i++) {
2893
        if (w->events[i] == handle)
2894
            found = 1;
2895
        if (found) {
2896
            w->events[i] = w->events[i + 1];
2897
            w->func[i] = w->func[i + 1];
2898
            w->opaque[i] = w->opaque[i + 1];
2899
        }
2900
    }
2901
    if (found)
2902
        w->num--;
2903
}
2904
#endif
2905

    
2906
/***********************************************************/
2907
/* ram save/restore */
2908

    
2909
static int ram_get_page(QEMUFile *f, uint8_t *buf, int len)
2910
{
2911
    int v;
2912

    
2913
    v = qemu_get_byte(f);
2914
    switch(v) {
2915
    case 0:
2916
        if (qemu_get_buffer(f, buf, len) != len)
2917
            return -EIO;
2918
        break;
2919
    case 1:
2920
        v = qemu_get_byte(f);
2921
        memset(buf, v, len);
2922
        break;
2923
    default:
2924
        return -EINVAL;
2925
    }
2926

    
2927
    if (qemu_file_has_error(f))
2928
        return -EIO;
2929

    
2930
    return 0;
2931
}
2932

    
2933
static int ram_load_v1(QEMUFile *f, void *opaque)
2934
{
2935
    int ret;
2936
    ram_addr_t i;
2937

    
2938
    if (qemu_get_be32(f) != last_ram_offset)
2939
        return -EINVAL;
2940
    for(i = 0; i < last_ram_offset; i+= TARGET_PAGE_SIZE) {
2941
        ret = ram_get_page(f, qemu_get_ram_ptr(i), TARGET_PAGE_SIZE);
2942
        if (ret)
2943
            return ret;
2944
    }
2945
    return 0;
2946
}
2947

    
2948
#define BDRV_HASH_BLOCK_SIZE 1024
2949
#define IOBUF_SIZE 4096
2950
#define RAM_CBLOCK_MAGIC 0xfabe
2951

    
2952
typedef struct RamDecompressState {
2953
    z_stream zstream;
2954
    QEMUFile *f;
2955
    uint8_t buf[IOBUF_SIZE];
2956
} RamDecompressState;
2957

    
2958
static int ram_decompress_open(RamDecompressState *s, QEMUFile *f)
2959
{
2960
    int ret;
2961
    memset(s, 0, sizeof(*s));
2962
    s->f = f;
2963
    ret = inflateInit(&s->zstream);
2964
    if (ret != Z_OK)
2965
        return -1;
2966
    return 0;
2967
}
2968

    
2969
static int ram_decompress_buf(RamDecompressState *s, uint8_t *buf, int len)
2970
{
2971
    int ret, clen;
2972

    
2973
    s->zstream.avail_out = len;
2974
    s->zstream.next_out = buf;
2975
    while (s->zstream.avail_out > 0) {
2976
        if (s->zstream.avail_in == 0) {
2977
            if (qemu_get_be16(s->f) != RAM_CBLOCK_MAGIC)
2978
                return -1;
2979
            clen = qemu_get_be16(s->f);
2980
            if (clen > IOBUF_SIZE)
2981
                return -1;
2982
            qemu_get_buffer(s->f, s->buf, clen);
2983
            s->zstream.avail_in = clen;
2984
            s->zstream.next_in = s->buf;
2985
        }
2986
        ret = inflate(&s->zstream, Z_PARTIAL_FLUSH);
2987
        if (ret != Z_OK && ret != Z_STREAM_END) {
2988
            return -1;
2989
        }
2990
    }
2991
    return 0;
2992
}
2993

    
2994
static void ram_decompress_close(RamDecompressState *s)
2995
{
2996
    inflateEnd(&s->zstream);
2997
}
2998

    
2999
#define RAM_SAVE_FLAG_FULL        0x01
3000
#define RAM_SAVE_FLAG_COMPRESS        0x02
3001
#define RAM_SAVE_FLAG_MEM_SIZE        0x04
3002
#define RAM_SAVE_FLAG_PAGE        0x08
3003
#define RAM_SAVE_FLAG_EOS        0x10
3004

    
3005
static int is_dup_page(uint8_t *page, uint8_t ch)
3006
{
3007
    uint32_t val = ch << 24 | ch << 16 | ch << 8 | ch;
3008
    uint32_t *array = (uint32_t *)page;
3009
    int i;
3010

    
3011
    for (i = 0; i < (TARGET_PAGE_SIZE / 4); i++) {
3012
        if (array[i] != val)
3013
            return 0;
3014
    }
3015

    
3016
    return 1;
3017
}
3018

    
3019
static int ram_save_block(QEMUFile *f)
3020
{
3021
    static ram_addr_t current_addr = 0;
3022
    ram_addr_t saved_addr = current_addr;
3023
    ram_addr_t addr = 0;
3024
    int found = 0;
3025

    
3026
    while (addr < last_ram_offset) {
3027
        if (cpu_physical_memory_get_dirty(current_addr, MIGRATION_DIRTY_FLAG)) {
3028
            uint8_t *p;
3029

    
3030
            cpu_physical_memory_reset_dirty(current_addr,
3031
                                            current_addr + TARGET_PAGE_SIZE,
3032
                                            MIGRATION_DIRTY_FLAG);
3033

    
3034
            p = qemu_get_ram_ptr(current_addr);
3035

    
3036
            if (is_dup_page(p, *p)) {
3037
                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_COMPRESS);
3038
                qemu_put_byte(f, *p);
3039
            } else {
3040
                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_PAGE);
3041
                qemu_put_buffer(f, p, TARGET_PAGE_SIZE);
3042
            }
3043

    
3044
            found = 1;
3045
            break;
3046
        }
3047
        addr += TARGET_PAGE_SIZE;
3048
        current_addr = (saved_addr + addr) % last_ram_offset;
3049
    }
3050

    
3051
    return found;
3052
}
3053

    
3054
static uint64_t bytes_transferred = 0;
3055

    
3056
static ram_addr_t ram_save_remaining(void)
3057
{
3058
    ram_addr_t addr;
3059
    ram_addr_t count = 0;
3060

    
3061
    for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
3062
        if (cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
3063
            count++;
3064
    }
3065

    
3066
    return count;
3067
}
3068

    
3069
uint64_t ram_bytes_remaining(void)
3070
{
3071
    return ram_save_remaining() * TARGET_PAGE_SIZE;
3072
}
3073

    
3074
uint64_t ram_bytes_transferred(void)
3075
{
3076
    return bytes_transferred;
3077
}
3078

    
3079
uint64_t ram_bytes_total(void)
3080
{
3081
    return last_ram_offset;
3082
}
3083

    
3084
static int ram_save_live(QEMUFile *f, int stage, void *opaque)
3085
{
3086
    ram_addr_t addr;
3087
    uint64_t bytes_transferred_last;
3088
    double bwidth = 0;
3089
    uint64_t expected_time = 0;
3090

    
3091
    if (cpu_physical_sync_dirty_bitmap(0, TARGET_PHYS_ADDR_MAX) != 0) {
3092
        qemu_file_set_error(f);
3093
        return 0;
3094
    }
3095

    
3096
    if (stage == 1) {
3097
        /* Make sure all dirty bits are set */
3098
        for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
3099
            if (!cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
3100
                cpu_physical_memory_set_dirty(addr);
3101
        }
3102

    
3103
        /* Enable dirty memory tracking */
3104
        cpu_physical_memory_set_dirty_tracking(1);
3105

    
3106
        qemu_put_be64(f, last_ram_offset | RAM_SAVE_FLAG_MEM_SIZE);
3107
    }
3108

    
3109
    bytes_transferred_last = bytes_transferred;
3110
    bwidth = get_clock();
3111

    
3112
    while (!qemu_file_rate_limit(f)) {
3113
        int ret;
3114

    
3115
        ret = ram_save_block(f);
3116
        bytes_transferred += ret * TARGET_PAGE_SIZE;
3117
        if (ret == 0) /* no more blocks */
3118
            break;
3119
    }
3120

    
3121
    bwidth = get_clock() - bwidth;
3122
    bwidth = (bytes_transferred - bytes_transferred_last) / bwidth;
3123

    
3124
    /* if we haven't transferred anything this round, force expected_time to a
3125
     * a very high value, but without crashing */
3126
    if (bwidth == 0)
3127
        bwidth = 0.000001;
3128

    
3129
    /* try transferring iterative blocks of memory */
3130

    
3131
    if (stage == 3) {
3132

    
3133
        /* flush all remaining blocks regardless of rate limiting */
3134
        while (ram_save_block(f) != 0) {
3135
            bytes_transferred += TARGET_PAGE_SIZE;
3136
        }
3137
        cpu_physical_memory_set_dirty_tracking(0);
3138
    }
3139

    
3140
    qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
3141

    
3142
    expected_time = ram_save_remaining() * TARGET_PAGE_SIZE / bwidth;
3143

    
3144
    return (stage == 2) && (expected_time <= migrate_max_downtime());
3145
}
3146

    
3147
static int ram_load_dead(QEMUFile *f, void *opaque)
3148
{
3149
    RamDecompressState s1, *s = &s1;
3150
    uint8_t buf[10];
3151
    ram_addr_t i;
3152

    
3153
    if (ram_decompress_open(s, f) < 0)
3154
        return -EINVAL;
3155
    for(i = 0; i < last_ram_offset; i+= BDRV_HASH_BLOCK_SIZE) {
3156
        if (ram_decompress_buf(s, buf, 1) < 0) {
3157
            fprintf(stderr, "Error while reading ram block header\n");
3158
            goto error;
3159
        }
3160
        if (buf[0] == 0) {
3161
            if (ram_decompress_buf(s, qemu_get_ram_ptr(i),
3162
                                   BDRV_HASH_BLOCK_SIZE) < 0) {
3163
                fprintf(stderr, "Error while reading ram block address=0x%08" PRIx64, (uint64_t)i);
3164
                goto error;
3165
            }
3166
        } else {
3167
        error:
3168
            printf("Error block header\n");
3169
            return -EINVAL;
3170
        }
3171
    }
3172
    ram_decompress_close(s);
3173

    
3174
    return 0;
3175
}
3176

    
3177
static int ram_load(QEMUFile *f, void *opaque, int version_id)
3178
{
3179
    ram_addr_t addr;
3180
    int flags;
3181

    
3182
    if (version_id == 1)
3183
        return ram_load_v1(f, opaque);
3184

    
3185
    if (version_id == 2) {
3186
        if (qemu_get_be32(f) != last_ram_offset)
3187
            return -EINVAL;
3188
        return ram_load_dead(f, opaque);
3189
    }
3190

    
3191
    if (version_id != 3)
3192
        return -EINVAL;
3193

    
3194
    do {
3195
        addr = qemu_get_be64(f);
3196

    
3197
        flags = addr & ~TARGET_PAGE_MASK;
3198
        addr &= TARGET_PAGE_MASK;
3199

    
3200
        if (flags & RAM_SAVE_FLAG_MEM_SIZE) {
3201
            if (addr != last_ram_offset)
3202
                return -EINVAL;
3203
        }
3204

    
3205
        if (flags & RAM_SAVE_FLAG_FULL) {
3206
            if (ram_load_dead(f, opaque) < 0)
3207
                return -EINVAL;
3208
        }
3209
        
3210
        if (flags & RAM_SAVE_FLAG_COMPRESS) {
3211
            uint8_t ch = qemu_get_byte(f);
3212
            memset(qemu_get_ram_ptr(addr), ch, TARGET_PAGE_SIZE);
3213
#ifndef _WIN32
3214
            if (ch == 0 &&
3215
                (!kvm_enabled() || kvm_has_sync_mmu())) {
3216
                madvise(qemu_get_ram_ptr(addr), TARGET_PAGE_SIZE, MADV_DONTNEED);
3217
            }
3218
#endif
3219
        } else if (flags & RAM_SAVE_FLAG_PAGE)
3220
            qemu_get_buffer(f, qemu_get_ram_ptr(addr), TARGET_PAGE_SIZE);
3221
    } while (!(flags & RAM_SAVE_FLAG_EOS));
3222

    
3223
    return 0;
3224
}
3225

    
3226
void qemu_service_io(void)
3227
{
3228
    qemu_notify_event();
3229
}
3230

    
3231
/***********************************************************/
3232
/* bottom halves (can be seen as timers which expire ASAP) */
3233

    
3234
struct QEMUBH {
3235
    QEMUBHFunc *cb;
3236
    void *opaque;
3237
    int scheduled;
3238
    int idle;
3239
    int deleted;
3240
    QEMUBH *next;
3241
};
3242

    
3243
static QEMUBH *first_bh = NULL;
3244

    
3245
QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque)
3246
{
3247
    QEMUBH *bh;
3248
    bh = qemu_mallocz(sizeof(QEMUBH));
3249
    bh->cb = cb;
3250
    bh->opaque = opaque;
3251
    bh->next = first_bh;
3252
    first_bh = bh;
3253
    return bh;
3254
}
3255

    
3256
int qemu_bh_poll(void)
3257
{
3258
    QEMUBH *bh, **bhp;
3259
    int ret;
3260

    
3261
    ret = 0;
3262
    for (bh = first_bh; bh; bh = bh->next) {
3263
        if (!bh->deleted && bh->scheduled) {
3264
            bh->scheduled = 0;
3265
            if (!bh->idle)
3266
                ret = 1;
3267
            bh->idle = 0;
3268
            bh->cb(bh->opaque);
3269
        }
3270
    }
3271

    
3272
    /* remove deleted bhs */
3273
    bhp = &first_bh;
3274
    while (*bhp) {
3275
        bh = *bhp;
3276
        if (bh->deleted) {
3277
            *bhp = bh->next;
3278
            qemu_free(bh);
3279
        } else
3280
            bhp = &bh->next;
3281
    }
3282

    
3283
    return ret;
3284
}
3285

    
3286
void qemu_bh_schedule_idle(QEMUBH *bh)
3287
{
3288
    if (bh->scheduled)
3289
        return;
3290
    bh->scheduled = 1;
3291
    bh->idle = 1;
3292
}
3293

    
3294
void qemu_bh_schedule(QEMUBH *bh)
3295
{
3296
    if (bh->scheduled)
3297
        return;
3298
    bh->scheduled = 1;
3299
    bh->idle = 0;
3300
    /* stop the currently executing CPU to execute the BH ASAP */
3301
    qemu_notify_event();
3302
}
3303

    
3304
void qemu_bh_cancel(QEMUBH *bh)
3305
{
3306
    bh->scheduled = 0;
3307
}
3308

    
3309
void qemu_bh_delete(QEMUBH *bh)
3310
{
3311
    bh->scheduled = 0;
3312
    bh->deleted = 1;
3313
}
3314

    
3315
static void qemu_bh_update_timeout(int *timeout)
3316
{
3317
    QEMUBH *bh;
3318

    
3319
    for (bh = first_bh; bh; bh = bh->next) {
3320
        if (!bh->deleted && bh->scheduled) {
3321
            if (bh->idle) {
3322
                /* idle bottom halves will be polled at least
3323
                 * every 10ms */
3324
                *timeout = MIN(10, *timeout);
3325
            } else {
3326
                /* non-idle bottom halves will be executed
3327
                 * immediately */
3328
                *timeout = 0;
3329
                break;
3330
            }
3331
        }
3332
    }
3333
}
3334

    
3335
/***********************************************************/
3336
/* machine registration */
3337

    
3338
static QEMUMachine *first_machine = NULL;
3339
QEMUMachine *current_machine = NULL;
3340

    
3341
int qemu_register_machine(QEMUMachine *m)
3342
{
3343
    QEMUMachine **pm;
3344
    pm = &first_machine;
3345
    while (*pm != NULL)
3346
        pm = &(*pm)->next;
3347
    m->next = NULL;
3348
    *pm = m;
3349
    return 0;
3350
}
3351

    
3352
static QEMUMachine *find_machine(const char *name)
3353
{
3354
    QEMUMachine *m;
3355

    
3356
    for(m = first_machine; m != NULL; m = m->next) {
3357
        if (!strcmp(m->name, name))
3358
            return m;
3359
    }
3360
    return NULL;
3361
}
3362

    
3363
static QEMUMachine *find_default_machine(void)
3364
{
3365
    QEMUMachine *m;
3366

    
3367
    for(m = first_machine; m != NULL; m = m->next) {
3368
        if (m->is_default) {
3369
            return m;
3370
        }
3371
    }
3372
    return NULL;
3373
}
3374

    
3375
/***********************************************************/
3376
/* main execution loop */
3377

    
3378
static void gui_update(void *opaque)
3379
{
3380
    uint64_t interval = GUI_REFRESH_INTERVAL;
3381
    DisplayState *ds = opaque;
3382
    DisplayChangeListener *dcl = ds->listeners;
3383

    
3384
    dpy_refresh(ds);
3385

    
3386
    while (dcl != NULL) {
3387
        if (dcl->gui_timer_interval &&
3388
            dcl->gui_timer_interval < interval)
3389
            interval = dcl->gui_timer_interval;
3390
        dcl = dcl->next;
3391
    }
3392
    qemu_mod_timer(ds->gui_timer, interval + qemu_get_clock(rt_clock));
3393
}
3394

    
3395
static void nographic_update(void *opaque)
3396
{
3397
    uint64_t interval = GUI_REFRESH_INTERVAL;
3398

    
3399
    qemu_mod_timer(nographic_timer, interval + qemu_get_clock(rt_clock));
3400
}
3401

    
3402
struct vm_change_state_entry {
3403
    VMChangeStateHandler *cb;
3404
    void *opaque;
3405
    LIST_ENTRY (vm_change_state_entry) entries;
3406
};
3407

    
3408
static LIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head;
3409

    
3410
VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
3411
                                                     void *opaque)
3412
{
3413
    VMChangeStateEntry *e;
3414

    
3415
    e = qemu_mallocz(sizeof (*e));
3416

    
3417
    e->cb = cb;
3418
    e->opaque = opaque;
3419
    LIST_INSERT_HEAD(&vm_change_state_head, e, entries);
3420
    return e;
3421
}
3422

    
3423
void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
3424
{
3425
    LIST_REMOVE (e, entries);
3426
    qemu_free (e);
3427
}
3428

    
3429
static void vm_state_notify(int running, int reason)
3430
{
3431
    VMChangeStateEntry *e;
3432

    
3433
    for (e = vm_change_state_head.lh_first; e; e = e->entries.le_next) {
3434
        e->cb(e->opaque, running, reason);
3435
    }
3436
}
3437

    
3438
static void resume_all_vcpus(void);
3439
static void pause_all_vcpus(void);
3440

    
3441
void vm_start(void)
3442
{
3443
    if (!vm_running) {
3444
        cpu_enable_ticks();
3445
        vm_running = 1;
3446
        vm_state_notify(1, 0);
3447
        qemu_rearm_alarm_timer(alarm_timer);
3448
        resume_all_vcpus();
3449
    }
3450
}
3451

    
3452
/* reset/shutdown handler */
3453

    
3454
typedef struct QEMUResetEntry {
3455
    TAILQ_ENTRY(QEMUResetEntry) entry;
3456
    QEMUResetHandler *func;
3457
    void *opaque;
3458
} QEMUResetEntry;
3459

    
3460
static TAILQ_HEAD(reset_handlers, QEMUResetEntry) reset_handlers =
3461
    TAILQ_HEAD_INITIALIZER(reset_handlers);
3462
static int reset_requested;
3463
static int shutdown_requested;
3464
static int powerdown_requested;
3465
static int debug_requested;
3466
static int vmstop_requested;
3467

    
3468
int qemu_shutdown_requested(void)
3469
{
3470
    int r = shutdown_requested;
3471
    shutdown_requested = 0;
3472
    return r;
3473
}
3474

    
3475
int qemu_reset_requested(void)
3476
{
3477
    int r = reset_requested;
3478
    reset_requested = 0;
3479
    return r;
3480
}
3481

    
3482
int qemu_powerdown_requested(void)
3483
{
3484
    int r = powerdown_requested;
3485
    powerdown_requested = 0;
3486
    return r;
3487
}
3488

    
3489
static int qemu_debug_requested(void)
3490
{
3491
    int r = debug_requested;
3492
    debug_requested = 0;
3493
    return r;
3494
}
3495

    
3496
static int qemu_vmstop_requested(void)
3497
{
3498
    int r = vmstop_requested;
3499
    vmstop_requested = 0;
3500
    return r;
3501
}
3502

    
3503
static void do_vm_stop(int reason)
3504
{
3505
    if (vm_running) {
3506
        cpu_disable_ticks();
3507
        vm_running = 0;
3508
        pause_all_vcpus();
3509
        vm_state_notify(0, reason);
3510
    }
3511
}
3512

    
3513
void qemu_register_reset(QEMUResetHandler *func, void *opaque)
3514
{
3515
    QEMUResetEntry *re = qemu_mallocz(sizeof(QEMUResetEntry));
3516

    
3517
    re->func = func;
3518
    re->opaque = opaque;
3519
    TAILQ_INSERT_TAIL(&reset_handlers, re, entry);
3520
}
3521

    
3522
void qemu_unregister_reset(QEMUResetHandler *func, void *opaque)
3523
{
3524
    QEMUResetEntry *re;
3525

    
3526
    TAILQ_FOREACH(re, &reset_handlers, entry) {
3527
        if (re->func == func && re->opaque == opaque) {
3528
            TAILQ_REMOVE(&reset_handlers, re, entry);
3529
            qemu_free(re);
3530
            return;
3531
        }
3532
    }
3533
}
3534

    
3535
void qemu_system_reset(void)
3536
{
3537
    QEMUResetEntry *re, *nre;
3538

    
3539
    /* reset all devices */
3540
    TAILQ_FOREACH_SAFE(re, &reset_handlers, entry, nre) {
3541
        re->func(re->opaque);
3542
    }
3543
}
3544

    
3545
void qemu_system_reset_request(void)
3546
{
3547
    if (no_reboot) {
3548
        shutdown_requested = 1;
3549
    } else {
3550
        reset_requested = 1;
3551
    }
3552
    qemu_notify_event();
3553
}
3554

    
3555
void qemu_system_shutdown_request(void)
3556
{
3557
    shutdown_requested = 1;
3558
    qemu_notify_event();
3559
}
3560

    
3561
void qemu_system_powerdown_request(void)
3562
{
3563
    powerdown_requested = 1;
3564
    qemu_notify_event();
3565
}
3566

    
3567
#ifdef CONFIG_IOTHREAD
3568
static void qemu_system_vmstop_request(int reason)
3569
{
3570
    vmstop_requested = reason;
3571
    qemu_notify_event();
3572
}
3573
#endif
3574

    
3575
#ifndef _WIN32
3576
static int io_thread_fd = -1;
3577

    
3578
static void qemu_event_increment(void)
3579
{
3580
    static const char byte = 0;
3581

    
3582
    if (io_thread_fd == -1)
3583
        return;
3584

    
3585
    write(io_thread_fd, &byte, sizeof(byte));
3586
}
3587

    
3588
static void qemu_event_read(void *opaque)
3589
{
3590
    int fd = (unsigned long)opaque;
3591
    ssize_t len;
3592

    
3593
    /* Drain the notify pipe */
3594
    do {
3595
        char buffer[512];
3596
        len = read(fd, buffer, sizeof(buffer));
3597
    } while ((len == -1 && errno == EINTR) || len > 0);
3598
}
3599

    
3600
static int qemu_event_init(void)
3601
{
3602
    int err;
3603
    int fds[2];
3604

    
3605
    err = pipe(fds);
3606
    if (err == -1)
3607
        return -errno;
3608

    
3609
    err = fcntl_setfl(fds[0], O_NONBLOCK);
3610
    if (err < 0)
3611
        goto fail;
3612

    
3613
    err = fcntl_setfl(fds[1], O_NONBLOCK);
3614
    if (err < 0)
3615
        goto fail;
3616

    
3617
    qemu_set_fd_handler2(fds[0], NULL, qemu_event_read, NULL,
3618
                         (void *)(unsigned long)fds[0]);
3619

    
3620
    io_thread_fd = fds[1];
3621
    return 0;
3622

    
3623
fail:
3624
    close(fds[0]);
3625
    close(fds[1]);
3626
    return err;
3627
}
3628
#else
3629
HANDLE qemu_event_handle;
3630

    
3631
static void dummy_event_handler(void *opaque)
3632
{
3633
}
3634

    
3635
static int qemu_event_init(void)
3636
{
3637
    qemu_event_handle = CreateEvent(NULL, FALSE, FALSE, NULL);
3638
    if (!qemu_event_handle) {
3639
        perror("Failed CreateEvent");
3640
        return -1;
3641
    }
3642
    qemu_add_wait_object(qemu_event_handle, dummy_event_handler, NULL);
3643
    return 0;
3644
}
3645

    
3646
static void qemu_event_increment(void)
3647
{
3648
    SetEvent(qemu_event_handle);
3649
}
3650
#endif
3651

    
3652
static int cpu_can_run(CPUState *env)
3653
{
3654
    if (env->stop)
3655
        return 0;
3656
    if (env->stopped)
3657
        return 0;
3658
    return 1;
3659
}
3660

    
3661
#ifndef CONFIG_IOTHREAD
3662
static int qemu_init_main_loop(void)
3663
{
3664
    return qemu_event_init();
3665
}
3666

    
3667
void qemu_init_vcpu(void *_env)
3668
{
3669
    CPUState *env = _env;
3670

    
3671
    if (kvm_enabled())
3672
        kvm_init_vcpu(env);
3673
    return;
3674
}
3675

    
3676
int qemu_cpu_self(void *env)
3677
{
3678
    return 1;
3679
}
3680

    
3681
static void resume_all_vcpus(void)
3682
{
3683
}
3684

    
3685
static void pause_all_vcpus(void)
3686
{
3687
}
3688

    
3689
void qemu_cpu_kick(void *env)
3690
{
3691
    return;
3692
}
3693

    
3694
void qemu_notify_event(void)
3695
{
3696
    CPUState *env = cpu_single_env;
3697

    
3698
    if (env) {
3699
        cpu_exit(env);
3700
#ifdef USE_KQEMU
3701
        if (env->kqemu_enabled)
3702
            kqemu_cpu_interrupt(env);
3703
#endif
3704
     }
3705
}
3706

    
3707
#define qemu_mutex_lock_iothread() do { } while (0)
3708
#define qemu_mutex_unlock_iothread() do { } while (0)
3709

    
3710
void vm_stop(int reason)
3711
{
3712
    do_vm_stop(reason);
3713
}
3714

    
3715
#else /* CONFIG_IOTHREAD */
3716

    
3717
#include "qemu-thread.h"
3718

    
3719
QemuMutex qemu_global_mutex;
3720
static QemuMutex qemu_fair_mutex;
3721

    
3722
static QemuThread io_thread;
3723

    
3724
static QemuThread *tcg_cpu_thread;
3725
static QemuCond *tcg_halt_cond;
3726

    
3727
static int qemu_system_ready;
3728
/* cpu creation */
3729
static QemuCond qemu_cpu_cond;
3730
/* system init */
3731
static QemuCond qemu_system_cond;
3732
static QemuCond qemu_pause_cond;
3733

    
3734
static void block_io_signals(void);
3735
static void unblock_io_signals(void);
3736
static int tcg_has_work(void);
3737

    
3738
static int qemu_init_main_loop(void)
3739
{
3740
    int ret;
3741

    
3742
    ret = qemu_event_init();
3743
    if (ret)
3744
        return ret;
3745

    
3746
    qemu_cond_init(&qemu_pause_cond);
3747
    qemu_mutex_init(&qemu_fair_mutex);
3748
    qemu_mutex_init(&qemu_global_mutex);
3749
    qemu_mutex_lock(&qemu_global_mutex);
3750

    
3751
    unblock_io_signals();
3752
    qemu_thread_self(&io_thread);
3753

    
3754
    return 0;
3755
}
3756

    
3757
static void qemu_wait_io_event(CPUState *env)
3758
{
3759
    while (!tcg_has_work())
3760
        qemu_cond_timedwait(env->halt_cond, &qemu_global_mutex, 1000);
3761

    
3762
    qemu_mutex_unlock(&qemu_global_mutex);
3763

    
3764
    /*
3765
     * Users of qemu_global_mutex can be starved, having no chance
3766
     * to acquire it since this path will get to it first.
3767
     * So use another lock to provide fairness.
3768
     */
3769
    qemu_mutex_lock(&qemu_fair_mutex);
3770
    qemu_mutex_unlock(&qemu_fair_mutex);
3771

    
3772
    qemu_mutex_lock(&qemu_global_mutex);
3773
    if (env->stop) {
3774
        env->stop = 0;
3775
        env->stopped = 1;
3776
        qemu_cond_signal(&qemu_pause_cond);
3777
    }
3778
}
3779

    
3780
static int qemu_cpu_exec(CPUState *env);
3781

    
3782
static void *kvm_cpu_thread_fn(void *arg)
3783
{
3784
    CPUState *env = arg;
3785

    
3786
    block_io_signals();
3787
    qemu_thread_self(env->thread);
3788

    
3789
    /* signal CPU creation */
3790
    qemu_mutex_lock(&qemu_global_mutex);
3791
    env->created = 1;
3792
    qemu_cond_signal(&qemu_cpu_cond);
3793

    
3794
    /* and wait for machine initialization */
3795
    while (!qemu_system_ready)
3796
        qemu_cond_timedwait(&qemu_system_cond, &qemu_global_mutex, 100);
3797

    
3798
    while (1) {
3799
        if (cpu_can_run(env))
3800
            qemu_cpu_exec(env);
3801
        qemu_wait_io_event(env);
3802
    }
3803

    
3804
    return NULL;
3805
}
3806

    
3807
static void tcg_cpu_exec(void);
3808

    
3809
static void *tcg_cpu_thread_fn(void *arg)
3810
{
3811
    CPUState *env = arg;
3812

    
3813
    block_io_signals();
3814
    qemu_thread_self(env->thread);
3815

    
3816
    /* signal CPU creation */
3817
    qemu_mutex_lock(&qemu_global_mutex);
3818
    for (env = first_cpu; env != NULL; env = env->next_cpu)
3819
        env->created = 1;
3820
    qemu_cond_signal(&qemu_cpu_cond);
3821

    
3822
    /* and wait for machine initialization */
3823
    while (!qemu_system_ready)
3824
        qemu_cond_timedwait(&qemu_system_cond, &qemu_global_mutex, 100);
3825

    
3826
    while (1) {
3827
        tcg_cpu_exec();
3828
        qemu_wait_io_event(cur_cpu);
3829
    }
3830

    
3831
    return NULL;
3832
}
3833

    
3834
void qemu_cpu_kick(void *_env)
3835
{
3836
    CPUState *env = _env;
3837
    qemu_cond_broadcast(env->halt_cond);
3838
    if (kvm_enabled())
3839
        qemu_thread_signal(env->thread, SIGUSR1);
3840
}
3841

    
3842
int qemu_cpu_self(void *env)
3843
{
3844
    return (cpu_single_env != NULL);
3845
}
3846

    
3847
static void cpu_signal(int sig)
3848
{
3849
    if (cpu_single_env)
3850
        cpu_exit(cpu_single_env);
3851
}
3852

    
3853
static void block_io_signals(void)
3854
{
3855
    sigset_t set;
3856
    struct sigaction sigact;
3857

    
3858
    sigemptyset(&set);
3859
    sigaddset(&set, SIGUSR2);
3860
    sigaddset(&set, SIGIO);
3861
    sigaddset(&set, SIGALRM);
3862
    pthread_sigmask(SIG_BLOCK, &set, NULL);
3863

    
3864
    sigemptyset(&set);
3865
    sigaddset(&set, SIGUSR1);
3866
    pthread_sigmask(SIG_UNBLOCK, &set, NULL);
3867

    
3868
    memset(&sigact, 0, sizeof(sigact));
3869
    sigact.sa_handler = cpu_signal;
3870
    sigaction(SIGUSR1, &sigact, NULL);
3871
}
3872

    
3873
static void unblock_io_signals(void)
3874
{
3875
    sigset_t set;
3876

    
3877
    sigemptyset(&set);
3878
    sigaddset(&set, SIGUSR2);
3879
    sigaddset(&set, SIGIO);
3880
    sigaddset(&set, SIGALRM);
3881
    pthread_sigmask(SIG_UNBLOCK, &set, NULL);
3882

    
3883
    sigemptyset(&set);
3884
    sigaddset(&set, SIGUSR1);
3885
    pthread_sigmask(SIG_BLOCK, &set, NULL);
3886
}
3887

    
3888
static void qemu_signal_lock(unsigned int msecs)
3889
{
3890
    qemu_mutex_lock(&qemu_fair_mutex);
3891

    
3892
    while (qemu_mutex_trylock(&qemu_global_mutex)) {
3893
        qemu_thread_signal(tcg_cpu_thread, SIGUSR1);
3894
        if (!qemu_mutex_timedlock(&qemu_global_mutex, msecs))
3895
            break;
3896
    }
3897
    qemu_mutex_unlock(&qemu_fair_mutex);
3898
}
3899

    
3900
static void qemu_mutex_lock_iothread(void)
3901
{
3902
    if (kvm_enabled()) {
3903
        qemu_mutex_lock(&qemu_fair_mutex);
3904
        qemu_mutex_lock(&qemu_global_mutex);
3905
        qemu_mutex_unlock(&qemu_fair_mutex);
3906
    } else
3907
        qemu_signal_lock(100);
3908
}
3909

    
3910
static void qemu_mutex_unlock_iothread(void)
3911
{
3912
    qemu_mutex_unlock(&qemu_global_mutex);
3913
}
3914

    
3915
static int all_vcpus_paused(void)
3916
{
3917
    CPUState *penv = first_cpu;
3918

    
3919
    while (penv) {
3920
        if (!penv->stopped)
3921
            return 0;
3922
        penv = (CPUState *)penv->next_cpu;
3923
    }
3924

    
3925
    return 1;
3926
}
3927

    
3928
static void pause_all_vcpus(void)
3929
{
3930
    CPUState *penv = first_cpu;
3931

    
3932
    while (penv) {
3933
        penv->stop = 1;
3934
        qemu_thread_signal(penv->thread, SIGUSR1);
3935
        qemu_cpu_kick(penv);
3936
        penv = (CPUState *)penv->next_cpu;
3937
    }
3938

    
3939
    while (!all_vcpus_paused()) {
3940
        qemu_cond_timedwait(&qemu_pause_cond, &qemu_global_mutex, 100);
3941
        penv = first_cpu;
3942
        while (penv) {
3943
            qemu_thread_signal(penv->thread, SIGUSR1);
3944
            penv = (CPUState *)penv->next_cpu;
3945
        }
3946
    }
3947
}
3948

    
3949
static void resume_all_vcpus(void)
3950
{
3951
    CPUState *penv = first_cpu;
3952

    
3953
    while (penv) {
3954
        penv->stop = 0;
3955
        penv->stopped = 0;
3956
        qemu_thread_signal(penv->thread, SIGUSR1);
3957
        qemu_cpu_kick(penv);
3958
        penv = (CPUState *)penv->next_cpu;
3959
    }
3960
}
3961

    
3962
static void tcg_init_vcpu(void *_env)
3963
{
3964
    CPUState *env = _env;
3965
    /* share a single thread for all cpus with TCG */
3966
    if (!tcg_cpu_thread) {
3967
        env->thread = qemu_mallocz(sizeof(QemuThread));
3968
        env->halt_cond = qemu_mallocz(sizeof(QemuCond));
3969
        qemu_cond_init(env->halt_cond);
3970
        qemu_thread_create(env->thread, tcg_cpu_thread_fn, env);
3971
        while (env->created == 0)
3972
            qemu_cond_timedwait(&qemu_cpu_cond, &qemu_global_mutex, 100);
3973
        tcg_cpu_thread = env->thread;
3974
        tcg_halt_cond = env->halt_cond;
3975
    } else {
3976
        env->thread = tcg_cpu_thread;
3977
        env->halt_cond = tcg_halt_cond;
3978
    }
3979
}
3980

    
3981
static void kvm_start_vcpu(CPUState *env)
3982
{
3983
    kvm_init_vcpu(env);
3984
    env->thread = qemu_mallocz(sizeof(QemuThread));
3985
    env->halt_cond = qemu_mallocz(sizeof(QemuCond));
3986
    qemu_cond_init(env->halt_cond);
3987
    qemu_thread_create(env->thread, kvm_cpu_thread_fn, env);
3988
    while (env->created == 0)
3989
        qemu_cond_timedwait(&qemu_cpu_cond, &qemu_global_mutex, 100);
3990
}
3991

    
3992
void qemu_init_vcpu(void *_env)
3993
{
3994
    CPUState *env = _env;
3995

    
3996
    if (kvm_enabled())
3997
        kvm_start_vcpu(env);
3998
    else
3999
        tcg_init_vcpu(env);
4000
}
4001

    
4002
void qemu_notify_event(void)
4003
{
4004
    qemu_event_increment();
4005
}
4006

    
4007
void vm_stop(int reason)
4008
{
4009
    QemuThread me;
4010
    qemu_thread_self(&me);
4011

    
4012
    if (!qemu_thread_equal(&me, &io_thread)) {
4013
        qemu_system_vmstop_request(reason);
4014
        /*
4015
         * FIXME: should not return to device code in case
4016
         * vm_stop() has been requested.
4017
         */
4018
        if (cpu_single_env) {
4019
            cpu_exit(cpu_single_env);
4020
            cpu_single_env->stop = 1;
4021
        }
4022
        return;
4023
    }
4024
    do_vm_stop(reason);
4025
}
4026

    
4027
#endif
4028

    
4029

    
4030
#ifdef _WIN32
4031
static void host_main_loop_wait(int *timeout)
4032
{
4033
    int ret, ret2, i;
4034
    PollingEntry *pe;
4035

    
4036

    
4037
    /* XXX: need to suppress polling by better using win32 events */
4038
    ret = 0;
4039
    for(pe = first_polling_entry; pe != NULL; pe = pe->next) {
4040
        ret |= pe->func(pe->opaque);
4041
    }
4042
    if (ret == 0) {
4043
        int err;
4044
        WaitObjects *w = &wait_objects;
4045

    
4046
        ret = WaitForMultipleObjects(w->num, w->events, FALSE, *timeout);
4047
        if (WAIT_OBJECT_0 + 0 <= ret && ret <= WAIT_OBJECT_0 + w->num - 1) {
4048
            if (w->func[ret - WAIT_OBJECT_0])
4049
                w->func[ret - WAIT_OBJECT_0](w->opaque[ret - WAIT_OBJECT_0]);
4050

    
4051
            /* Check for additional signaled events */
4052
            for(i = (ret - WAIT_OBJECT_0 + 1); i < w->num; i++) {
4053

    
4054
                /* Check if event is signaled */
4055
                ret2 = WaitForSingleObject(w->events[i], 0);
4056
                if(ret2 == WAIT_OBJECT_0) {
4057
                    if (w->func[i])
4058
                        w->func[i](w->opaque[i]);
4059
                } else if (ret2 == WAIT_TIMEOUT) {
4060
                } else {
4061
                    err = GetLastError();
4062
                    fprintf(stderr, "WaitForSingleObject error %d %d\n", i, err);
4063
                }
4064
            }
4065
        } else if (ret == WAIT_TIMEOUT) {
4066
        } else {
4067
            err = GetLastError();
4068
            fprintf(stderr, "WaitForMultipleObjects error %d %d\n", ret, err);
4069
        }
4070
    }
4071

    
4072
    *timeout = 0;
4073
}
4074
#else
4075
static void host_main_loop_wait(int *timeout)
4076
{
4077
}
4078
#endif
4079

    
4080
void main_loop_wait(int timeout)
4081
{
4082
    IOHandlerRecord *ioh;
4083
    fd_set rfds, wfds, xfds;
4084
    int ret, nfds;
4085
    struct timeval tv;
4086

    
4087
    qemu_bh_update_timeout(&timeout);
4088

    
4089
    host_main_loop_wait(&timeout);
4090

    
4091
    /* poll any events */
4092
    /* XXX: separate device handlers from system ones */
4093
    nfds = -1;
4094
    FD_ZERO(&rfds);
4095
    FD_ZERO(&wfds);
4096
    FD_ZERO(&xfds);
4097
    for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
4098
        if (ioh->deleted)
4099
            continue;
4100
        if (ioh->fd_read &&
4101
            (!ioh->fd_read_poll ||
4102
             ioh->fd_read_poll(ioh->opaque) != 0)) {
4103
            FD_SET(ioh->fd, &rfds);
4104
            if (ioh->fd > nfds)
4105
                nfds = ioh->fd;
4106
        }
4107
        if (ioh->fd_write) {
4108
            FD_SET(ioh->fd, &wfds);
4109
            if (ioh->fd > nfds)
4110
                nfds = ioh->fd;
4111
        }
4112
    }
4113

    
4114
    tv.tv_sec = timeout / 1000;
4115
    tv.tv_usec = (timeout % 1000) * 1000;
4116

    
4117
    slirp_select_fill(&nfds, &rfds, &wfds, &xfds);
4118

    
4119
    qemu_mutex_unlock_iothread();
4120
    ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv);
4121
    qemu_mutex_lock_iothread();
4122
    if (ret > 0) {
4123
        IOHandlerRecord **pioh;
4124

    
4125
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
4126
            if (!ioh->deleted && ioh->fd_read && FD_ISSET(ioh->fd, &rfds)) {
4127
                ioh->fd_read(ioh->opaque);
4128
            }
4129
            if (!ioh->deleted && ioh->fd_write && FD_ISSET(ioh->fd, &wfds)) {
4130
                ioh->fd_write(ioh->opaque);
4131
            }
4132
        }
4133

    
4134
        /* remove deleted IO handlers */
4135
        pioh = &first_io_handler;
4136
        while (*pioh) {
4137
            ioh = *pioh;
4138
            if (ioh->deleted) {
4139
                *pioh = ioh->next;
4140
                qemu_free(ioh);
4141
            } else
4142
                pioh = &ioh->next;
4143
        }
4144
    }
4145

    
4146
    slirp_select_poll(&rfds, &wfds, &xfds, (ret < 0));
4147

    
4148
    /* rearm timer, if not periodic */
4149
    if (alarm_timer->flags & ALARM_FLAG_EXPIRED) {
4150
        alarm_timer->flags &= ~ALARM_FLAG_EXPIRED;
4151
        qemu_rearm_alarm_timer(alarm_timer);
4152
    }
4153

    
4154
    /* vm time timers */
4155
    if (vm_running) {
4156
        if (!cur_cpu || likely(!(cur_cpu->singlestep_enabled & SSTEP_NOTIMER)))
4157
            qemu_run_timers(&active_timers[QEMU_TIMER_VIRTUAL],
4158
                qemu_get_clock(vm_clock));
4159
    }
4160

    
4161
    /* real time timers */
4162
    qemu_run_timers(&active_timers[QEMU_TIMER_REALTIME],
4163
                    qemu_get_clock(rt_clock));
4164

    
4165
    /* Check bottom-halves last in case any of the earlier events triggered
4166
       them.  */
4167
    qemu_bh_poll();
4168

    
4169
}
4170

    
4171
static int qemu_cpu_exec(CPUState *env)
4172
{
4173
    int ret;
4174
#ifdef CONFIG_PROFILER
4175
    int64_t ti;
4176
#endif
4177

    
4178
#ifdef CONFIG_PROFILER
4179
    ti = profile_getclock();
4180
#endif
4181
    if (use_icount) {
4182
        int64_t count;
4183
        int decr;
4184
        qemu_icount -= (env->icount_decr.u16.low + env->icount_extra);
4185
        env->icount_decr.u16.low = 0;
4186
        env->icount_extra = 0;
4187
        count = qemu_next_deadline();
4188
        count = (count + (1 << icount_time_shift) - 1)
4189
                >> icount_time_shift;
4190
        qemu_icount += count;
4191
        decr = (count > 0xffff) ? 0xffff : count;
4192
        count -= decr;
4193
        env->icount_decr.u16.low = decr;
4194
        env->icount_extra = count;
4195
    }
4196
    ret = cpu_exec(env);
4197
#ifdef CONFIG_PROFILER
4198
    qemu_time += profile_getclock() - ti;
4199
#endif
4200
    if (use_icount) {
4201
        /* Fold pending instructions back into the
4202
           instruction counter, and clear the interrupt flag.  */
4203
        qemu_icount -= (env->icount_decr.u16.low
4204
                        + env->icount_extra);
4205
        env->icount_decr.u32 = 0;
4206
        env->icount_extra = 0;
4207
    }
4208
    return ret;
4209
}
4210

    
4211
static void tcg_cpu_exec(void)
4212
{
4213
    int ret = 0;
4214

    
4215
    if (next_cpu == NULL)
4216
        next_cpu = first_cpu;
4217
    for (; next_cpu != NULL; next_cpu = next_cpu->next_cpu) {
4218
        CPUState *env = cur_cpu = next_cpu;
4219

    
4220
        if (!vm_running)
4221
            break;
4222
        if (timer_alarm_pending) {
4223
            timer_alarm_pending = 0;
4224
            break;
4225
        }
4226
        if (cpu_can_run(env))
4227
            ret = qemu_cpu_exec(env);
4228
        if (ret == EXCP_DEBUG) {
4229
            gdb_set_stop_cpu(env);
4230
            debug_requested = 1;
4231
            break;
4232
        }
4233
    }
4234
}
4235

    
4236
static int cpu_has_work(CPUState *env)
4237
{
4238
    if (env->stop)
4239
        return 1;
4240
    if (env->stopped)
4241
        return 0;
4242
    if (!env->halted)
4243
        return 1;
4244
    if (qemu_cpu_has_work(env))
4245
        return 1;
4246
    return 0;
4247
}
4248

    
4249
static int tcg_has_work(void)
4250
{
4251
    CPUState *env;
4252

    
4253
    for (env = first_cpu; env != NULL; env = env->next_cpu)
4254
        if (cpu_has_work(env))
4255
            return 1;
4256
    return 0;
4257
}
4258

    
4259
static int qemu_calculate_timeout(void)
4260
{
4261
#ifndef CONFIG_IOTHREAD
4262
    int timeout;
4263

    
4264
    if (!vm_running)
4265
        timeout = 5000;
4266
    else if (tcg_has_work())
4267
        timeout = 0;
4268
    else if (!use_icount)
4269
        timeout = 5000;
4270
    else {
4271
     /* XXX: use timeout computed from timers */
4272
        int64_t add;
4273
        int64_t delta;
4274
        /* Advance virtual time to the next event.  */
4275
        if (use_icount == 1) {
4276
            /* When not using an adaptive execution frequency
4277
               we tend to get badly out of sync with real time,
4278
               so just delay for a reasonable amount of time.  */
4279
            delta = 0;
4280
        } else {
4281
            delta = cpu_get_icount() - cpu_get_clock();
4282
        }
4283
        if (delta > 0) {
4284
            /* If virtual time is ahead of real time then just
4285
               wait for IO.  */
4286
            timeout = (delta / 1000000) + 1;
4287
        } else {
4288
            /* Wait for either IO to occur or the next
4289
               timer event.  */
4290
            add = qemu_next_deadline();
4291
            /* We advance the timer before checking for IO.
4292
               Limit the amount we advance so that early IO
4293
               activity won't get the guest too far ahead.  */
4294
            if (add > 10000000)
4295
                add = 10000000;
4296
            delta += add;
4297
            add = (add + (1 << icount_time_shift) - 1)
4298
                  >> icount_time_shift;
4299
            qemu_icount += add;
4300
            timeout = delta / 1000000;
4301
            if (timeout < 0)
4302
                timeout = 0;
4303
        }
4304
    }
4305

    
4306
    return timeout;
4307
#else /* CONFIG_IOTHREAD */
4308
    return 1000;
4309
#endif
4310
}
4311

    
4312
static int vm_can_run(void)
4313
{
4314
    if (powerdown_requested)
4315
        return 0;
4316
    if (reset_requested)
4317
        return 0;
4318
    if (shutdown_requested)
4319
        return 0;
4320
    if (debug_requested)
4321
        return 0;
4322
    return 1;
4323
}
4324

    
4325
static void main_loop(void)
4326
{
4327
    int r;
4328

    
4329
#ifdef CONFIG_IOTHREAD
4330
    qemu_system_ready = 1;
4331
    qemu_cond_broadcast(&qemu_system_cond);
4332
#endif
4333

    
4334
    for (;;) {
4335
        do {
4336
#ifdef CONFIG_PROFILER
4337
            int64_t ti;
4338
#endif
4339
#ifndef CONFIG_IOTHREAD
4340
            tcg_cpu_exec();
4341
#endif
4342
#ifdef CONFIG_PROFILER
4343
            ti = profile_getclock();
4344
#endif
4345
            main_loop_wait(qemu_calculate_timeout());
4346
#ifdef CONFIG_PROFILER
4347
            dev_time += profile_getclock() - ti;
4348
#endif
4349
        } while (vm_can_run());
4350

    
4351
        if (qemu_debug_requested())
4352
            vm_stop(EXCP_DEBUG);
4353
        if (qemu_shutdown_requested()) {
4354
            if (no_shutdown) {
4355
                vm_stop(0);
4356
                no_shutdown = 0;
4357
            } else
4358
                break;
4359
        }
4360
        if (qemu_reset_requested()) {
4361
            pause_all_vcpus();
4362
            qemu_system_reset();
4363
            resume_all_vcpus();
4364
        }
4365
        if (qemu_powerdown_requested())
4366
            qemu_system_powerdown();
4367
        if ((r = qemu_vmstop_requested()))
4368
            vm_stop(r);
4369
    }
4370
    pause_all_vcpus();
4371
}
4372

    
4373
static void version(void)
4374
{
4375
    printf("QEMU PC emulator version " QEMU_VERSION QEMU_PKGVERSION ", Copyright (c) 2003-2008 Fabrice Bellard\n");
4376
}
4377

    
4378
static void help(int exitcode)
4379
{
4380
    version();
4381
    printf("usage: %s [options] [disk_image]\n"
4382
           "\n"
4383
           "'disk_image' is a raw hard image image for IDE hard disk 0\n"
4384
           "\n"
4385
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4386
           opt_help
4387
#define DEFHEADING(text) stringify(text) "\n"
4388
#include "qemu-options.h"
4389
#undef DEF
4390
#undef DEFHEADING
4391
#undef GEN_DOCS
4392
           "\n"
4393
           "During emulation, the following keys are useful:\n"
4394
           "ctrl-alt-f      toggle full screen\n"
4395
           "ctrl-alt-n      switch to virtual console 'n'\n"
4396
           "ctrl-alt        toggle mouse and keyboard grab\n"
4397
           "\n"
4398
           "When using -nographic, press 'ctrl-a h' to get some help.\n"
4399
           ,
4400
           "qemu",
4401
           DEFAULT_RAM_SIZE,
4402
#ifndef _WIN32
4403
           DEFAULT_NETWORK_SCRIPT,
4404
           DEFAULT_NETWORK_DOWN_SCRIPT,
4405
#endif
4406
           DEFAULT_GDBSTUB_PORT,
4407
           "/tmp/qemu.log");
4408
    exit(exitcode);
4409
}
4410

    
4411
#define HAS_ARG 0x0001
4412

    
4413
enum {
4414
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4415
    opt_enum,
4416
#define DEFHEADING(text)
4417
#include "qemu-options.h"
4418
#undef DEF
4419
#undef DEFHEADING
4420
#undef GEN_DOCS
4421
};
4422

    
4423
typedef struct QEMUOption {
4424
    const char *name;
4425
    int flags;
4426
    int index;
4427
} QEMUOption;
4428

    
4429
static const QEMUOption qemu_options[] = {
4430
    { "h", 0, QEMU_OPTION_h },
4431
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4432
    { option, opt_arg, opt_enum },
4433
#define DEFHEADING(text)
4434
#include "qemu-options.h"
4435
#undef DEF
4436
#undef DEFHEADING
4437
#undef GEN_DOCS
4438
    { NULL },
4439
};
4440

    
4441
#ifdef HAS_AUDIO
4442
struct soundhw soundhw[] = {
4443
#ifdef HAS_AUDIO_CHOICE
4444
#if defined(TARGET_I386) || defined(TARGET_MIPS)
4445
    {
4446
        "pcspk",
4447
        "PC speaker",
4448
        0,
4449
        1,
4450
        { .init_isa = pcspk_audio_init }
4451
    },
4452
#endif
4453

    
4454
#ifdef CONFIG_SB16
4455
    {
4456
        "sb16",
4457
        "Creative Sound Blaster 16",
4458
        0,
4459
        1,
4460
        { .init_isa = SB16_init }
4461
    },
4462
#endif
4463

    
4464
#ifdef CONFIG_CS4231A
4465
    {
4466
        "cs4231a",
4467
        "CS4231A",
4468
        0,
4469
        1,
4470
        { .init_isa = cs4231a_init }
4471
    },
4472
#endif
4473

    
4474
#ifdef CONFIG_ADLIB
4475
    {
4476
        "adlib",
4477
#ifdef HAS_YMF262
4478
        "Yamaha YMF262 (OPL3)",
4479
#else
4480
        "Yamaha YM3812 (OPL2)",
4481
#endif
4482
        0,
4483
        1,
4484
        { .init_isa = Adlib_init }
4485
    },
4486
#endif
4487

    
4488
#ifdef CONFIG_GUS
4489
    {
4490
        "gus",
4491
        "Gravis Ultrasound GF1",
4492
        0,
4493
        1,
4494
        { .init_isa = GUS_init }
4495
    },
4496
#endif
4497

    
4498
#ifdef CONFIG_AC97
4499
    {
4500
        "ac97",
4501
        "Intel 82801AA AC97 Audio",
4502
        0,
4503
        0,
4504
        { .init_pci = ac97_init }
4505
    },
4506
#endif
4507

    
4508
#ifdef CONFIG_ES1370
4509
    {
4510
        "es1370",
4511
        "ENSONIQ AudioPCI ES1370",
4512
        0,
4513
        0,
4514
        { .init_pci = es1370_init }
4515
    },
4516
#endif
4517

    
4518
#endif /* HAS_AUDIO_CHOICE */
4519

    
4520
    { NULL, NULL, 0, 0, { NULL } }
4521
};
4522

    
4523
static void select_soundhw (const char *optarg)
4524
{
4525
    struct soundhw *c;
4526

    
4527
    if (*optarg == '?') {
4528
    show_valid_cards:
4529

    
4530
        printf ("Valid sound card names (comma separated):\n");
4531
        for (c = soundhw; c->name; ++c) {
4532
            printf ("%-11s %s\n", c->name, c->descr);
4533
        }
4534
        printf ("\n-soundhw all will enable all of the above\n");
4535
        exit (*optarg != '?');
4536
    }
4537
    else {
4538
        size_t l;
4539
        const char *p;
4540
        char *e;
4541
        int bad_card = 0;
4542

    
4543
        if (!strcmp (optarg, "all")) {
4544
            for (c = soundhw; c->name; ++c) {
4545
                c->enabled = 1;
4546
            }
4547
            return;
4548
        }
4549

    
4550
        p = optarg;
4551
        while (*p) {
4552
            e = strchr (p, ',');
4553
            l = !e ? strlen (p) : (size_t) (e - p);
4554

    
4555
            for (c = soundhw; c->name; ++c) {
4556
                if (!strncmp (c->name, p, l)) {
4557
                    c->enabled = 1;
4558
                    break;
4559
                }
4560
            }
4561

    
4562
            if (!c->name) {
4563
                if (l > 80) {
4564
                    fprintf (stderr,
4565
                             "Unknown sound card name (too big to show)\n");
4566
                }
4567
                else {
4568
                    fprintf (stderr, "Unknown sound card name `%.*s'\n",
4569
                             (int) l, p);
4570
                }
4571
                bad_card = 1;
4572
            }
4573
            p += l + (e != NULL);
4574
        }
4575

    
4576
        if (bad_card)
4577
            goto show_valid_cards;
4578
    }
4579
}
4580
#endif
4581

    
4582
static void select_vgahw (const char *p)
4583
{
4584
    const char *opts;
4585

    
4586
    cirrus_vga_enabled = 0;
4587
    std_vga_enabled = 0;
4588
    vmsvga_enabled = 0;
4589
    xenfb_enabled = 0;
4590
    if (strstart(p, "std", &opts)) {
4591
        std_vga_enabled = 1;
4592
    } else if (strstart(p, "cirrus", &opts)) {
4593
        cirrus_vga_enabled = 1;
4594
    } else if (strstart(p, "vmware", &opts)) {
4595
        vmsvga_enabled = 1;
4596
    } else if (strstart(p, "xenfb", &opts)) {
4597
        xenfb_enabled = 1;
4598
    } else if (!strstart(p, "none", &opts)) {
4599
    invalid_vga:
4600
        fprintf(stderr, "Unknown vga type: %s\n", p);
4601
        exit(1);
4602
    }
4603
    while (*opts) {
4604
        const char *nextopt;
4605

    
4606
        if (strstart(opts, ",retrace=", &nextopt)) {
4607
            opts = nextopt;
4608
            if (strstart(opts, "dumb", &nextopt))
4609
                vga_retrace_method = VGA_RETRACE_DUMB;
4610
            else if (strstart(opts, "precise", &nextopt))
4611
                vga_retrace_method = VGA_RETRACE_PRECISE;
4612
            else goto invalid_vga;
4613
        } else goto invalid_vga;
4614
        opts = nextopt;
4615
    }
4616
}
4617

    
4618
#ifdef TARGET_I386
4619
static int balloon_parse(const char *arg)
4620
{
4621
    char buf[128];
4622
    const char *p;
4623

    
4624
    if (!strcmp(arg, "none")) {
4625
        virtio_balloon = 0;
4626
    } else if (!strncmp(arg, "virtio", 6)) {
4627
        virtio_balloon = 1;
4628
        if (arg[6] == ',')  {
4629
            p = arg + 7;
4630
            if (get_param_value(buf, sizeof(buf), "addr", p)) {
4631
                virtio_balloon_devaddr = strdup(buf);
4632
            }
4633
        }
4634
    } else {
4635
        return -1;
4636
    }
4637
    return 0;
4638
}
4639
#endif
4640

    
4641
#ifdef _WIN32
4642
static BOOL WINAPI qemu_ctrl_handler(DWORD type)
4643
{
4644
    exit(STATUS_CONTROL_C_EXIT);
4645
    return TRUE;
4646
}
4647
#endif
4648

    
4649
int qemu_uuid_parse(const char *str, uint8_t *uuid)
4650
{
4651
    int ret;
4652

    
4653
    if(strlen(str) != 36)
4654
        return -1;
4655

    
4656
    ret = sscanf(str, UUID_FMT, &uuid[0], &uuid[1], &uuid[2], &uuid[3],
4657
            &uuid[4], &uuid[5], &uuid[6], &uuid[7], &uuid[8], &uuid[9],
4658
            &uuid[10], &uuid[11], &uuid[12], &uuid[13], &uuid[14], &uuid[15]);
4659

    
4660
    if(ret != 16)
4661
        return -1;
4662

    
4663
#ifdef TARGET_I386
4664
    smbios_add_field(1, offsetof(struct smbios_type_1, uuid), 16, uuid);
4665
#endif
4666

    
4667
    return 0;
4668
}
4669

    
4670
#define MAX_NET_CLIENTS 32
4671

    
4672
#ifndef _WIN32
4673

    
4674
static void termsig_handler(int signal)
4675
{
4676
    qemu_system_shutdown_request();
4677
}
4678

    
4679
static void sigchld_handler(int signal)
4680
{
4681
    waitpid(-1, NULL, WNOHANG);
4682
}
4683

    
4684
static void sighandler_setup(void)
4685
{
4686
    struct sigaction act;
4687

    
4688
    memset(&act, 0, sizeof(act));
4689
    act.sa_handler = termsig_handler;
4690
    sigaction(SIGINT,  &act, NULL);
4691
    sigaction(SIGHUP,  &act, NULL);
4692
    sigaction(SIGTERM, &act, NULL);
4693

    
4694
    act.sa_handler = sigchld_handler;
4695
    act.sa_flags = SA_NOCLDSTOP;
4696
    sigaction(SIGCHLD, &act, NULL);
4697
}
4698

    
4699
#endif
4700

    
4701
#ifdef _WIN32
4702
/* Look for support files in the same directory as the executable.  */
4703
static char *find_datadir(const char *argv0)
4704
{
4705
    char *p;
4706
    char buf[MAX_PATH];
4707
    DWORD len;
4708

    
4709
    len = GetModuleFileName(NULL, buf, sizeof(buf) - 1);
4710
    if (len == 0) {
4711
        return NULL;
4712
    }
4713

    
4714
    buf[len] = 0;
4715
    p = buf + len - 1;
4716
    while (p != buf && *p != '\\')
4717
        p--;
4718
    *p = 0;
4719
    if (access(buf, R_OK) == 0) {
4720
        return qemu_strdup(buf);
4721
    }
4722
    return NULL;
4723
}
4724
#else /* !_WIN32 */
4725

    
4726
/* Find a likely location for support files using the location of the binary.
4727
   For installed binaries this will be "$bindir/../share/qemu".  When
4728
   running from the build tree this will be "$bindir/../pc-bios".  */
4729
#define SHARE_SUFFIX "/share/qemu"
4730
#define BUILD_SUFFIX "/pc-bios"
4731
static char *find_datadir(const char *argv0)
4732
{
4733
    char *dir;
4734
    char *p = NULL;
4735
    char *res;
4736
#ifdef PATH_MAX
4737
    char buf[PATH_MAX];
4738
#endif
4739
    size_t max_len;
4740

    
4741
#if defined(__linux__)
4742
    {
4743
        int len;
4744
        len = readlink("/proc/self/exe", buf, sizeof(buf) - 1);
4745
        if (len > 0) {
4746
            buf[len] = 0;
4747
            p = buf;
4748
        }
4749
    }
4750
#elif defined(__FreeBSD__)
4751
    {
4752
        int len;
4753
        len = readlink("/proc/curproc/file", buf, sizeof(buf) - 1);
4754
        if (len > 0) {
4755
            buf[len] = 0;
4756
            p = buf;
4757
        }
4758
    }
4759
#endif
4760
    /* If we don't have any way of figuring out the actual executable
4761
       location then try argv[0].  */
4762
    if (!p) {
4763
#ifdef PATH_MAX
4764
        p = buf;
4765
#endif
4766
        p = realpath(argv0, p);
4767
        if (!p) {
4768
            return NULL;
4769
        }
4770
    }
4771
    dir = dirname(p);
4772
    dir = dirname(dir);
4773

    
4774
    max_len = strlen(dir) +
4775
        MAX(strlen(SHARE_SUFFIX), strlen(BUILD_SUFFIX)) + 1;
4776
    res = qemu_mallocz(max_len);
4777
    snprintf(res, max_len, "%s%s", dir, SHARE_SUFFIX);
4778
    if (access(res, R_OK)) {
4779
        snprintf(res, max_len, "%s%s", dir, BUILD_SUFFIX);
4780
        if (access(res, R_OK)) {
4781
            qemu_free(res);
4782
            res = NULL;
4783
        }
4784
    }
4785
#ifndef PATH_MAX
4786
    free(p);
4787
#endif
4788
    return res;
4789
}
4790
#undef SHARE_SUFFIX
4791
#undef BUILD_SUFFIX
4792
#endif
4793

    
4794
char *qemu_find_file(int type, const char *name)
4795
{
4796
    int len;
4797
    const char *subdir;
4798
    char *buf;
4799

    
4800
    /* If name contains path separators then try it as a straight path.  */
4801
    if ((strchr(name, '/') || strchr(name, '\\'))
4802
        && access(name, R_OK) == 0) {
4803
        return strdup(name);
4804
    }
4805
    switch (type) {
4806
    case QEMU_FILE_TYPE_BIOS:
4807
        subdir = "";
4808
        break;
4809
    case QEMU_FILE_TYPE_KEYMAP:
4810
        subdir = "keymaps/";
4811
        break;
4812
    default:
4813
        abort();
4814
    }
4815
    len = strlen(data_dir) + strlen(name) + strlen(subdir) + 2;
4816
    buf = qemu_mallocz(len);
4817
    snprintf(buf, len, "%s/%s%s", data_dir, subdir, name);
4818
    if (access(buf, R_OK)) {
4819
        qemu_free(buf);
4820
        return NULL;
4821
    }
4822
    return buf;
4823
}
4824

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

    
4872
    qemu_cache_utils_init(envp);
4873

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

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

    
4917
    serial_devices[0] = "vc:80Cx24C";
4918
    for(i = 1; i < MAX_SERIAL_PORTS; i++)
4919
        serial_devices[i] = NULL;
4920
    serial_device_index = 0;
4921

    
4922
    parallel_devices[0] = "vc:80Cx24C";
4923
    for(i = 1; i < MAX_PARALLEL_PORTS; i++)
4924
        parallel_devices[i] = NULL;
4925
    parallel_device_index = 0;
4926

    
4927
    for(i = 0; i < MAX_VIRTIO_CONSOLES; i++)
4928
        virtio_consoles[i] = NULL;
4929
    virtio_console_index = 0;
4930

    
4931
    for (i = 0; i < MAX_NODES; i++) {
4932
        node_mem[i] = 0;
4933
        node_cpumask[i] = 0;
4934
    }
4935

    
4936
    usb_devices_index = 0;
4937

    
4938
    nb_net_clients = 0;
4939
    nb_bt_opts = 0;
4940
    nb_drives = 0;
4941
    nb_drives_opt = 0;
4942
    nb_numa_nodes = 0;
4943
    hda_index = -1;
4944

    
4945
    nb_nics = 0;
4946

    
4947
    tb_size = 0;
4948
    autostart= 1;
4949

    
4950
    register_watchdogs();
4951

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

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

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

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

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

    
5217
                value = strtoul(optarg, &ptr, 10);
5218
                switch (*ptr) {
5219
                case 0: case 'M': case 'm':
5220
                    value <<= 20;
5221
                    break;
5222
                case 'G': case 'g':
5223
                    value <<= 30;
5224
                    break;
5225
                default:
5226
                    fprintf(stderr, "qemu: invalid ram size: %s\n", optarg);
5227
                    exit(1);
5228
                }
5229

    
5230
                /* On 32-bit hosts, QEMU is limited by virtual address space */
5231
                if (value > (2047 << 20)
5232
#ifndef CONFIG_KQEMU
5233
                    && HOST_LONG_BITS == 32
5234
#endif
5235
                    ) {
5236
                    fprintf(stderr, "qemu: at most 2047 MB RAM can be simulated\n");
5237
                    exit(1);
5238
                }
5239
                if (value != (uint64_t)(ram_addr_t)value) {
5240
                    fprintf(stderr, "qemu: ram size too large\n");
5241
                    exit(1);
5242
                }
5243
                ram_size = value;
5244
                break;
5245
            }
5246
            case QEMU_OPTION_d:
5247
                {
5248
                    int mask;
5249
                    const CPULogItem *item;
5250

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

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

    
5613
    /* If no data_dir is specified then try to find it relative to the
5614
       executable path.  */
5615
    if (!data_dir) {
5616
        data_dir = find_datadir(argv[0]);
5617
    }
5618
    /* If all else fails use the install patch specified when building.  */
5619
    if (!data_dir) {
5620
        data_dir = CONFIG_QEMU_SHAREDIR;
5621
    }
5622

    
5623
#if defined(CONFIG_KVM) && defined(CONFIG_KQEMU)
5624
    if (kvm_allowed && kqemu_allowed) {
5625
        fprintf(stderr,
5626
                "You can not enable both KVM and kqemu at the same time\n");
5627
        exit(1);
5628
    }
5629
#endif
5630

    
5631
    machine->max_cpus = machine->max_cpus ?: 1; /* Default to UP */
5632
    if (smp_cpus > machine->max_cpus) {
5633
        fprintf(stderr, "Number of SMP cpus requested (%d), exceeds max cpus "
5634
                "supported by machine `%s' (%d)\n", smp_cpus,  machine->name,
5635
                machine->max_cpus);
5636
        exit(1);
5637
    }
5638

    
5639
    if (display_type == DT_NOGRAPHIC) {
5640
       if (serial_device_index == 0)
5641
           serial_devices[0] = "stdio";
5642
       if (parallel_device_index == 0)
5643
           parallel_devices[0] = "null";
5644
       if (strncmp(monitor_device, "vc", 2) == 0)
5645
           monitor_device = "stdio";
5646
    }
5647

    
5648
#ifndef _WIN32
5649
    if (daemonize) {
5650
        pid_t pid;
5651

    
5652
        if (pipe(fds) == -1)
5653
            exit(1);
5654

    
5655
        pid = fork();
5656
        if (pid > 0) {
5657
            uint8_t status;
5658
            ssize_t len;
5659

    
5660
            close(fds[1]);
5661

    
5662
        again:
5663
            len = read(fds[0], &status, 1);
5664
            if (len == -1 && (errno == EINTR))
5665
                goto again;
5666

    
5667
            if (len != 1)
5668
                exit(1);
5669
            else if (status == 1) {
5670
                fprintf(stderr, "Could not acquire pidfile\n");
5671
                exit(1);
5672
            } else
5673
                exit(0);
5674
        } else if (pid < 0)
5675
            exit(1);
5676

    
5677
        setsid();
5678

    
5679
        pid = fork();
5680
        if (pid > 0)
5681
            exit(0);
5682
        else if (pid < 0)
5683
            exit(1);
5684

    
5685
        umask(027);
5686

    
5687
        signal(SIGTSTP, SIG_IGN);
5688
        signal(SIGTTOU, SIG_IGN);
5689
        signal(SIGTTIN, SIG_IGN);
5690
    }
5691

    
5692
    if (pid_file && qemu_create_pidfile(pid_file) != 0) {
5693
        if (daemonize) {
5694
            uint8_t status = 1;
5695
            write(fds[1], &status, 1);
5696
        } else
5697
            fprintf(stderr, "Could not acquire pid file\n");
5698
        exit(1);
5699
    }
5700
#endif
5701

    
5702
#ifdef CONFIG_KQEMU
5703
    if (smp_cpus > 1)
5704
        kqemu_allowed = 0;
5705
#endif
5706
    if (qemu_init_main_loop()) {
5707
        fprintf(stderr, "qemu_init_main_loop failed\n");
5708
        exit(1);
5709
    }
5710
    linux_boot = (kernel_filename != NULL);
5711

    
5712
    if (!linux_boot && *kernel_cmdline != '\0') {
5713
        fprintf(stderr, "-append only allowed with -kernel option\n");
5714
        exit(1);
5715
    }
5716

    
5717
    if (!linux_boot && initrd_filename != NULL) {
5718
        fprintf(stderr, "-initrd only allowed with -kernel option\n");
5719
        exit(1);
5720
    }
5721

    
5722
    setvbuf(stdout, NULL, _IOLBF, 0);
5723

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

    
5737
#ifdef _WIN32
5738
    socket_init();
5739
#endif
5740

    
5741
    /* init network clients */
5742
    if (nb_net_clients == 0) {
5743
        /* if no clients, we use a default config */
5744
        net_clients[nb_net_clients++] = "nic";
5745
#ifdef CONFIG_SLIRP
5746
        net_clients[nb_net_clients++] = "user";
5747
#endif
5748
    }
5749

    
5750
    for(i = 0;i < nb_net_clients; i++) {
5751
        if (net_client_parse(net_clients[i]) < 0)
5752
            exit(1);
5753
    }
5754

    
5755
    net_boot = (boot_devices_bitmap >> ('n' - 'a')) & 0xF;
5756
    net_set_boot_mask(net_boot);
5757

    
5758
    net_client_check();
5759

    
5760
    /* init the bluetooth world */
5761
    for (i = 0; i < nb_bt_opts; i++)
5762
        if (bt_parse(bt_opts[i]))
5763
            exit(1);
5764

    
5765
    /* init the memory */
5766
    if (ram_size == 0)
5767
        ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
5768

    
5769
#ifdef CONFIG_KQEMU
5770
    /* FIXME: This is a nasty hack because kqemu can't cope with dynamic
5771
       guest ram allocation.  It needs to go away.  */
5772
    if (kqemu_allowed) {
5773
        kqemu_phys_ram_size = ram_size + 8 * 1024 * 1024 + 4 * 1024 * 1024;
5774
        kqemu_phys_ram_base = qemu_vmalloc(kqemu_phys_ram_size);
5775
        if (!kqemu_phys_ram_base) {
5776
            fprintf(stderr, "Could not allocate physical memory\n");
5777
            exit(1);
5778
        }
5779
    }
5780
#endif
5781

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

    
5785
    bdrv_init();
5786

    
5787
    /* we always create the cdrom drive, even if no disk is there */
5788

    
5789
    if (nb_drives_opt < MAX_DRIVES)
5790
        drive_add(NULL, CDROM_ALIAS);
5791

    
5792
    /* we always create at least one floppy */
5793

    
5794
    if (nb_drives_opt < MAX_DRIVES)
5795
        drive_add(NULL, FD_ALIAS, 0);
5796

    
5797
    /* we always create one sd slot, even if no card is in it */
5798

    
5799
    if (nb_drives_opt < MAX_DRIVES)
5800
        drive_add(NULL, SD_ALIAS);
5801

    
5802
    /* open the virtual block devices */
5803

    
5804
    for(i = 0; i < nb_drives_opt; i++)
5805
        if (drive_init(&drives_opt[i], snapshot, machine) == -1)
5806
            exit(1);
5807

    
5808
    register_savevm("timer", 0, 2, timer_save, timer_load, NULL);
5809
    register_savevm_live("ram", 0, 3, ram_save_live, NULL, ram_load, NULL);
5810

    
5811
#ifndef _WIN32
5812
    /* must be after terminal init, SDL library changes signal handlers */
5813
    sighandler_setup();
5814
#endif
5815

    
5816
    /* Maintain compatibility with multiple stdio monitors */
5817
    if (!strcmp(monitor_device,"stdio")) {
5818
        for (i = 0; i < MAX_SERIAL_PORTS; i++) {
5819
            const char *devname = serial_devices[i];
5820
            if (devname && !strcmp(devname,"mon:stdio")) {
5821
                monitor_device = NULL;
5822
                break;
5823
            } else if (devname && !strcmp(devname,"stdio")) {
5824
                monitor_device = NULL;
5825
                serial_devices[i] = "mon:stdio";
5826
                break;
5827
            }
5828
        }
5829
    }
5830

    
5831
    if (nb_numa_nodes > 0) {
5832
        int i;
5833

    
5834
        if (nb_numa_nodes > smp_cpus) {
5835
            nb_numa_nodes = smp_cpus;
5836
        }
5837

    
5838
        /* If no memory size if given for any node, assume the default case
5839
         * and distribute the available memory equally across all nodes
5840
         */
5841
        for (i = 0; i < nb_numa_nodes; i++) {
5842
            if (node_mem[i] != 0)
5843
                break;
5844
        }
5845
        if (i == nb_numa_nodes) {
5846
            uint64_t usedmem = 0;
5847

    
5848
            /* On Linux, the each node's border has to be 8MB aligned,
5849
             * the final node gets the rest.
5850
             */
5851
            for (i = 0; i < nb_numa_nodes - 1; i++) {
5852
                node_mem[i] = (ram_size / nb_numa_nodes) & ~((1 << 23UL) - 1);
5853
                usedmem += node_mem[i];
5854
            }
5855
            node_mem[i] = ram_size - usedmem;
5856
        }
5857

    
5858
        for (i = 0; i < nb_numa_nodes; i++) {
5859
            if (node_cpumask[i] != 0)
5860
                break;
5861
        }
5862
        /* assigning the VCPUs round-robin is easier to implement, guest OSes
5863
         * must cope with this anyway, because there are BIOSes out there in
5864
         * real machines which also use this scheme.
5865
         */
5866
        if (i == nb_numa_nodes) {
5867
            for (i = 0; i < smp_cpus; i++) {
5868
                node_cpumask[i % nb_numa_nodes] |= 1 << i;
5869
            }
5870
        }
5871
    }
5872

    
5873
    if (kvm_enabled()) {
5874
        int ret;
5875

    
5876
        ret = kvm_init(smp_cpus);
5877
        if (ret < 0) {
5878
            fprintf(stderr, "failed to initialize KVM\n");
5879
            exit(1);
5880
        }
5881
    }
5882

    
5883
    if (monitor_device) {
5884
        monitor_hd = qemu_chr_open("monitor", monitor_device, NULL);
5885
        if (!monitor_hd) {
5886
            fprintf(stderr, "qemu: could not open monitor device '%s'\n", monitor_device);
5887
            exit(1);
5888
        }
5889
    }
5890

    
5891
    for(i = 0; i < MAX_SERIAL_PORTS; i++) {
5892
        const char *devname = serial_devices[i];
5893
        if (devname && strcmp(devname, "none")) {
5894
            char label[32];
5895
            snprintf(label, sizeof(label), "serial%d", i);
5896
            serial_hds[i] = qemu_chr_open(label, devname, NULL);
5897
            if (!serial_hds[i]) {
5898
                fprintf(stderr, "qemu: could not open serial device '%s'\n",
5899
                        devname);
5900
                exit(1);
5901
            }
5902
        }
5903
    }
5904

    
5905
    for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
5906
        const char *devname = parallel_devices[i];
5907
        if (devname && strcmp(devname, "none")) {
5908
            char label[32];
5909
            snprintf(label, sizeof(label), "parallel%d", i);
5910
            parallel_hds[i] = qemu_chr_open(label, devname, NULL);
5911
            if (!parallel_hds[i]) {
5912
                fprintf(stderr, "qemu: could not open parallel device '%s'\n",
5913
                        devname);
5914
                exit(1);
5915
            }
5916
        }
5917
    }
5918

    
5919
    for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
5920
        const char *devname = virtio_consoles[i];
5921
        if (devname && strcmp(devname, "none")) {
5922
            char label[32];
5923
            snprintf(label, sizeof(label), "virtcon%d", i);
5924
            virtcon_hds[i] = qemu_chr_open(label, devname, NULL);
5925
            if (!virtcon_hds[i]) {
5926
                fprintf(stderr, "qemu: could not open virtio console '%s'\n",
5927
                        devname);
5928
                exit(1);
5929
            }
5930
        }
5931
    }
5932

    
5933
    module_call_init(MODULE_INIT_DEVICE);
5934

    
5935
    machine->init(ram_size, boot_devices,
5936
                  kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
5937

    
5938

    
5939
    for (env = first_cpu; env != NULL; env = env->next_cpu) {
5940
        for (i = 0; i < nb_numa_nodes; i++) {
5941
            if (node_cpumask[i] & (1 << env->cpu_index)) {
5942
                env->numa_node = i;
5943
            }
5944
        }
5945
    }
5946

    
5947
    current_machine = machine;
5948

    
5949
    /* init USB devices */
5950
    if (usb_enabled) {
5951
        for(i = 0; i < usb_devices_index; i++) {
5952
            if (usb_device_add(usb_devices[i], 0) < 0) {
5953
                fprintf(stderr, "Warning: could not add USB device %s\n",
5954
                        usb_devices[i]);
5955
            }
5956
        }
5957
    }
5958

    
5959
    if (!display_state)
5960
        dumb_display_init();
5961
    /* just use the first displaystate for the moment */
5962
    ds = display_state;
5963

    
5964
    if (display_type == DT_DEFAULT) {
5965
#if defined(CONFIG_SDL) || defined(CONFIG_COCOA)
5966
        display_type = DT_SDL;
5967
#else
5968
        display_type = DT_VNC;
5969
        vnc_display = "localhost:0,to=99";
5970
        show_vnc_port = 1;
5971
#endif
5972
    }
5973
        
5974

    
5975
    switch (display_type) {
5976
    case DT_NOGRAPHIC:
5977
        break;
5978
#if defined(CONFIG_CURSES)
5979
    case DT_CURSES:
5980
        curses_display_init(ds, full_screen);
5981
        break;
5982
#endif
5983
#if defined(CONFIG_SDL)
5984
    case DT_SDL:
5985
        sdl_display_init(ds, full_screen, no_frame);
5986
        break;
5987
#elif defined(CONFIG_COCOA)
5988
    case DT_SDL:
5989
        cocoa_display_init(ds, full_screen);
5990
        break;
5991
#endif
5992
    case DT_VNC:
5993
        vnc_display_init(ds);
5994
        if (vnc_display_open(ds, vnc_display) < 0)
5995
            exit(1);
5996

    
5997
        if (show_vnc_port) {
5998
            printf("VNC server running on `%s'\n", vnc_display_local_addr(ds));
5999
        }
6000
        break;
6001
    default:
6002
        break;
6003
    }
6004
    dpy_resize(ds);
6005

    
6006
    dcl = ds->listeners;
6007
    while (dcl != NULL) {
6008
        if (dcl->dpy_refresh != NULL) {
6009
            ds->gui_timer = qemu_new_timer(rt_clock, gui_update, ds);
6010
            qemu_mod_timer(ds->gui_timer, qemu_get_clock(rt_clock));
6011
        }
6012
        dcl = dcl->next;
6013
    }
6014

    
6015
    if (display_type == DT_NOGRAPHIC || display_type == DT_VNC) {
6016
        nographic_timer = qemu_new_timer(rt_clock, nographic_update, NULL);
6017
        qemu_mod_timer(nographic_timer, qemu_get_clock(rt_clock));
6018
    }
6019

    
6020
    text_consoles_set_display(display_state);
6021
    qemu_chr_initial_reset();
6022

    
6023
    if (monitor_device && monitor_hd)
6024
        monitor_init(monitor_hd, MONITOR_USE_READLINE | MONITOR_IS_DEFAULT);
6025

    
6026
    for(i = 0; i < MAX_SERIAL_PORTS; i++) {
6027
        const char *devname = serial_devices[i];
6028
        if (devname && strcmp(devname, "none")) {
6029
            if (strstart(devname, "vc", 0))
6030
                qemu_chr_printf(serial_hds[i], "serial%d console\r\n", i);
6031
        }
6032
    }
6033

    
6034
    for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
6035
        const char *devname = parallel_devices[i];
6036
        if (devname && strcmp(devname, "none")) {
6037
            if (strstart(devname, "vc", 0))
6038
                qemu_chr_printf(parallel_hds[i], "parallel%d console\r\n", i);
6039
        }
6040
    }
6041

    
6042
    for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
6043
        const char *devname = virtio_consoles[i];
6044
        if (virtcon_hds[i] && devname) {
6045
            if (strstart(devname, "vc", 0))
6046
                qemu_chr_printf(virtcon_hds[i], "virtio console%d\r\n", i);
6047
        }
6048
    }
6049

    
6050
    if (gdbstub_dev && gdbserver_start(gdbstub_dev) < 0) {
6051
        fprintf(stderr, "qemu: could not open gdbserver on device '%s'\n",
6052
                gdbstub_dev);
6053
        exit(1);
6054
    }
6055

    
6056
    if (loadvm)
6057
        do_loadvm(cur_mon, loadvm);
6058

    
6059
    if (incoming) {
6060
        autostart = 0; /* fixme how to deal with -daemonize */
6061
        qemu_start_incoming_migration(incoming);
6062
    }
6063

    
6064
    if (autostart)
6065
        vm_start();
6066

    
6067
#ifndef _WIN32
6068
    if (daemonize) {
6069
        uint8_t status = 0;
6070
        ssize_t len;
6071

    
6072
    again1:
6073
        len = write(fds[1], &status, 1);
6074
        if (len == -1 && (errno == EINTR))
6075
            goto again1;
6076

    
6077
        if (len != 1)
6078
            exit(1);
6079

    
6080
        chdir("/");
6081
        TFR(fd = open("/dev/null", O_RDWR));
6082
        if (fd == -1)
6083
            exit(1);
6084
    }
6085

    
6086
    if (run_as) {
6087
        pwd = getpwnam(run_as);
6088
        if (!pwd) {
6089
            fprintf(stderr, "User \"%s\" doesn't exist\n", run_as);
6090
            exit(1);
6091
        }
6092
    }
6093

    
6094
    if (chroot_dir) {
6095
        if (chroot(chroot_dir) < 0) {
6096
            fprintf(stderr, "chroot failed\n");
6097
            exit(1);
6098
        }
6099
        chdir("/");
6100
    }
6101

    
6102
    if (run_as) {
6103
        if (setgid(pwd->pw_gid) < 0) {
6104
            fprintf(stderr, "Failed to setgid(%d)\n", pwd->pw_gid);
6105
            exit(1);
6106
        }
6107
        if (setuid(pwd->pw_uid) < 0) {
6108
            fprintf(stderr, "Failed to setuid(%d)\n", pwd->pw_uid);
6109
            exit(1);
6110
        }
6111
        if (setuid(0) != -1) {
6112
            fprintf(stderr, "Dropping privileges failed\n");
6113
            exit(1);
6114
        }
6115
    }
6116

    
6117
    if (daemonize) {
6118
        dup2(fd, 0);
6119
        dup2(fd, 1);
6120
        dup2(fd, 2);
6121

    
6122
        close(fd);
6123
    }
6124
#endif
6125

    
6126
    main_loop();
6127
    quit_timers();
6128
    net_cleanup();
6129

    
6130
    return 0;
6131
}