Statistics
| Branch: | Revision:

root / vl.c @ b319820d

History | View | Annotate | Download (157.8 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

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

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

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

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

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

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

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

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

    
162
#include "disas.h"
163

    
164
#include "exec-all.h"
165

    
166
#include "qemu_socket.h"
167

    
168
#if defined(CONFIG_SLIRP)
169
#include "libslirp.h"
170
#endif
171

    
172
//#define DEBUG_UNUSED_IOPORT
173
//#define DEBUG_IOPORT
174
//#define DEBUG_NET
175
//#define DEBUG_SLIRP
176

    
177

    
178
#ifdef DEBUG_IOPORT
179
#  define LOG_IOPORT(...) qemu_log_mask(CPU_LOG_IOPORT, ## __VA_ARGS__)
180
#else
181
#  define LOG_IOPORT(...) do { } while (0)
182
#endif
183

    
184
#define DEFAULT_RAM_SIZE 128
185

    
186
/* Max number of USB devices that can be specified on the commandline.  */
187
#define MAX_USB_CMDLINE 8
188

    
189
/* Max number of bluetooth switches on the commandline.  */
190
#define MAX_BT_CMDLINE 10
191

    
192
/* XXX: use a two level table to limit memory usage */
193
#define MAX_IOPORTS 65536
194

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

    
272
int nb_numa_nodes;
273
uint64_t node_mem[MAX_NODES];
274
uint64_t node_cpumask[MAX_NODES];
275

    
276
static CPUState *cur_cpu;
277
static CPUState *next_cpu;
278
static int timer_alarm_pending = 1;
279
/* Conversion factor from emulated instructions to virtual clock ticks.  */
280
static int icount_time_shift;
281
/* Arbitrarily pick 1MIPS as the minimum allowable speed.  */
282
#define MAX_ICOUNT_SHIFT 10
283
/* Compensate for varying guest execution speed.  */
284
static int64_t qemu_icount_bias;
285
static QEMUTimer *icount_rt_timer;
286
static QEMUTimer *icount_vm_timer;
287
static QEMUTimer *nographic_timer;
288

    
289
uint8_t qemu_uuid[16];
290

    
291
/***********************************************************/
292
/* x86 ISA bus support */
293

    
294
target_phys_addr_t isa_mem_base = 0;
295
PicState2 *isa_pic;
296

    
297
static IOPortReadFunc default_ioport_readb, default_ioport_readw, default_ioport_readl;
298
static IOPortWriteFunc default_ioport_writeb, default_ioport_writew, default_ioport_writel;
299

    
300
static uint32_t ioport_read(int index, uint32_t address)
301
{
302
    static IOPortReadFunc *default_func[3] = {
303
        default_ioport_readb,
304
        default_ioport_readw,
305
        default_ioport_readl
306
    };
307
    IOPortReadFunc *func = ioport_read_table[index][address];
308
    if (!func)
309
        func = default_func[index];
310
    return func(ioport_opaque[address], address);
311
}
312

    
313
static void ioport_write(int index, uint32_t address, uint32_t data)
314
{
315
    static IOPortWriteFunc *default_func[3] = {
316
        default_ioport_writeb,
317
        default_ioport_writew,
318
        default_ioport_writel
319
    };
320
    IOPortWriteFunc *func = ioport_write_table[index][address];
321
    if (!func)
322
        func = default_func[index];
323
    func(ioport_opaque[address], address, data);
324
}
325

    
326
static uint32_t default_ioport_readb(void *opaque, uint32_t address)
327
{
328
#ifdef DEBUG_UNUSED_IOPORT
329
    fprintf(stderr, "unused inb: port=0x%04x\n", address);
330
#endif
331
    return 0xff;
332
}
333

    
334
static void default_ioport_writeb(void *opaque, uint32_t address, uint32_t data)
335
{
336
#ifdef DEBUG_UNUSED_IOPORT
337
    fprintf(stderr, "unused outb: port=0x%04x data=0x%02x\n", address, data);
338
#endif
339
}
340

    
341
/* default is to make two byte accesses */
342
static uint32_t default_ioport_readw(void *opaque, uint32_t address)
343
{
344
    uint32_t data;
345
    data = ioport_read(0, address);
346
    address = (address + 1) & (MAX_IOPORTS - 1);
347
    data |= ioport_read(0, address) << 8;
348
    return data;
349
}
350

    
351
static void default_ioport_writew(void *opaque, uint32_t address, uint32_t data)
352
{
353
    ioport_write(0, address, data & 0xff);
354
    address = (address + 1) & (MAX_IOPORTS - 1);
355
    ioport_write(0, address, (data >> 8) & 0xff);
356
}
357

    
358
static uint32_t default_ioport_readl(void *opaque, uint32_t address)
359
{
360
#ifdef DEBUG_UNUSED_IOPORT
361
    fprintf(stderr, "unused inl: port=0x%04x\n", address);
362
#endif
363
    return 0xffffffff;
364
}
365

    
366
static void default_ioport_writel(void *opaque, uint32_t address, uint32_t data)
367
{
368
#ifdef DEBUG_UNUSED_IOPORT
369
    fprintf(stderr, "unused outl: port=0x%04x data=0x%02x\n", address, data);
370
#endif
371
}
372

    
373
/* size is the word size in byte */
374
int register_ioport_read(int start, int length, int size,
375
                         IOPortReadFunc *func, void *opaque)
376
{
377
    int i, bsize;
378

    
379
    if (size == 1) {
380
        bsize = 0;
381
    } else if (size == 2) {
382
        bsize = 1;
383
    } else if (size == 4) {
384
        bsize = 2;
385
    } else {
386
        hw_error("register_ioport_read: invalid size");
387
        return -1;
388
    }
389
    for(i = start; i < start + length; i += size) {
390
        ioport_read_table[bsize][i] = func;
391
        if (ioport_opaque[i] != NULL && ioport_opaque[i] != opaque)
392
            hw_error("register_ioport_read: invalid opaque");
393
        ioport_opaque[i] = opaque;
394
    }
395
    return 0;
396
}
397

    
398
/* size is the word size in byte */
399
int register_ioport_write(int start, int length, int size,
400
                          IOPortWriteFunc *func, void *opaque)
401
{
402
    int i, bsize;
403

    
404
    if (size == 1) {
405
        bsize = 0;
406
    } else if (size == 2) {
407
        bsize = 1;
408
    } else if (size == 4) {
409
        bsize = 2;
410
    } else {
411
        hw_error("register_ioport_write: invalid size");
412
        return -1;
413
    }
414
    for(i = start; i < start + length; i += size) {
415
        ioport_write_table[bsize][i] = func;
416
        if (ioport_opaque[i] != NULL && ioport_opaque[i] != opaque)
417
            hw_error("register_ioport_write: invalid opaque");
418
        ioport_opaque[i] = opaque;
419
    }
420
    return 0;
421
}
422

    
423
void isa_unassign_ioport(int start, int length)
424
{
425
    int i;
426

    
427
    for(i = start; i < start + length; i++) {
428
        ioport_read_table[0][i] = default_ioport_readb;
429
        ioport_read_table[1][i] = default_ioport_readw;
430
        ioport_read_table[2][i] = default_ioport_readl;
431

    
432
        ioport_write_table[0][i] = default_ioport_writeb;
433
        ioport_write_table[1][i] = default_ioport_writew;
434
        ioport_write_table[2][i] = default_ioport_writel;
435

    
436
        ioport_opaque[i] = NULL;
437
    }
438
}
439

    
440
/***********************************************************/
441

    
442
void cpu_outb(CPUState *env, int addr, int val)
443
{
444
    LOG_IOPORT("outb: %04x %02x\n", addr, val);
445
    ioport_write(0, addr, val);
446
#ifdef CONFIG_KQEMU
447
    if (env)
448
        env->last_io_time = cpu_get_time_fast();
449
#endif
450
}
451

    
452
void cpu_outw(CPUState *env, int addr, int val)
453
{
454
    LOG_IOPORT("outw: %04x %04x\n", addr, val);
455
    ioport_write(1, addr, val);
456
#ifdef CONFIG_KQEMU
457
    if (env)
458
        env->last_io_time = cpu_get_time_fast();
459
#endif
460
}
461

    
462
void cpu_outl(CPUState *env, int addr, int val)
463
{
464
    LOG_IOPORT("outl: %04x %08x\n", addr, val);
465
    ioport_write(2, addr, val);
466
#ifdef CONFIG_KQEMU
467
    if (env)
468
        env->last_io_time = cpu_get_time_fast();
469
#endif
470
}
471

    
472
int cpu_inb(CPUState *env, int addr)
473
{
474
    int val;
475
    val = ioport_read(0, addr);
476
    LOG_IOPORT("inb : %04x %02x\n", addr, val);
477
#ifdef CONFIG_KQEMU
478
    if (env)
479
        env->last_io_time = cpu_get_time_fast();
480
#endif
481
    return val;
482
}
483

    
484
int cpu_inw(CPUState *env, int addr)
485
{
486
    int val;
487
    val = ioport_read(1, addr);
488
    LOG_IOPORT("inw : %04x %04x\n", addr, val);
489
#ifdef CONFIG_KQEMU
490
    if (env)
491
        env->last_io_time = cpu_get_time_fast();
492
#endif
493
    return val;
494
}
495

    
496
int cpu_inl(CPUState *env, int addr)
497
{
498
    int val;
499
    val = ioport_read(2, addr);
500
    LOG_IOPORT("inl : %04x %08x\n", addr, val);
501
#ifdef CONFIG_KQEMU
502
    if (env)
503
        env->last_io_time = cpu_get_time_fast();
504
#endif
505
    return val;
506
}
507

    
508
/***********************************************************/
509
void hw_error(const char *fmt, ...)
510
{
511
    va_list ap;
512
    CPUState *env;
513

    
514
    va_start(ap, fmt);
515
    fprintf(stderr, "qemu: hardware error: ");
516
    vfprintf(stderr, fmt, ap);
517
    fprintf(stderr, "\n");
518
    for(env = first_cpu; env != NULL; env = env->next_cpu) {
519
        fprintf(stderr, "CPU #%d:\n", env->cpu_index);
520
#ifdef TARGET_I386
521
        cpu_dump_state(env, stderr, fprintf, X86_DUMP_FPU);
522
#else
523
        cpu_dump_state(env, stderr, fprintf, 0);
524
#endif
525
    }
526
    va_end(ap);
527
    abort();
528
}
529
 
530
/***************/
531
/* ballooning */
532

    
533
static QEMUBalloonEvent *qemu_balloon_event;
534
void *qemu_balloon_event_opaque;
535

    
536
void qemu_add_balloon_handler(QEMUBalloonEvent *func, void *opaque)
537
{
538
    qemu_balloon_event = func;
539
    qemu_balloon_event_opaque = opaque;
540
}
541

    
542
void qemu_balloon(ram_addr_t target)
543
{
544
    if (qemu_balloon_event)
545
        qemu_balloon_event(qemu_balloon_event_opaque, target);
546
}
547

    
548
ram_addr_t qemu_balloon_status(void)
549
{
550
    if (qemu_balloon_event)
551
        return qemu_balloon_event(qemu_balloon_event_opaque, 0);
552
    return 0;
553
}
554

    
555
/***********************************************************/
556
/* keyboard/mouse */
557

    
558
static QEMUPutKBDEvent *qemu_put_kbd_event;
559
static void *qemu_put_kbd_event_opaque;
560
static QEMUPutMouseEntry *qemu_put_mouse_event_head;
561
static QEMUPutMouseEntry *qemu_put_mouse_event_current;
562

    
563
void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque)
564
{
565
    qemu_put_kbd_event_opaque = opaque;
566
    qemu_put_kbd_event = func;
567
}
568

    
569
QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
570
                                                void *opaque, int absolute,
571
                                                const char *name)
572
{
573
    QEMUPutMouseEntry *s, *cursor;
574

    
575
    s = qemu_mallocz(sizeof(QEMUPutMouseEntry));
576

    
577
    s->qemu_put_mouse_event = func;
578
    s->qemu_put_mouse_event_opaque = opaque;
579
    s->qemu_put_mouse_event_absolute = absolute;
580
    s->qemu_put_mouse_event_name = qemu_strdup(name);
581
    s->next = NULL;
582

    
583
    if (!qemu_put_mouse_event_head) {
584
        qemu_put_mouse_event_head = qemu_put_mouse_event_current = s;
585
        return s;
586
    }
587

    
588
    cursor = qemu_put_mouse_event_head;
589
    while (cursor->next != NULL)
590
        cursor = cursor->next;
591

    
592
    cursor->next = s;
593
    qemu_put_mouse_event_current = s;
594

    
595
    return s;
596
}
597

    
598
void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry)
599
{
600
    QEMUPutMouseEntry *prev = NULL, *cursor;
601

    
602
    if (!qemu_put_mouse_event_head || entry == NULL)
603
        return;
604

    
605
    cursor = qemu_put_mouse_event_head;
606
    while (cursor != NULL && cursor != entry) {
607
        prev = cursor;
608
        cursor = cursor->next;
609
    }
610

    
611
    if (cursor == NULL) // does not exist or list empty
612
        return;
613
    else if (prev == NULL) { // entry is head
614
        qemu_put_mouse_event_head = cursor->next;
615
        if (qemu_put_mouse_event_current == entry)
616
            qemu_put_mouse_event_current = cursor->next;
617
        qemu_free(entry->qemu_put_mouse_event_name);
618
        qemu_free(entry);
619
        return;
620
    }
621

    
622
    prev->next = entry->next;
623

    
624
    if (qemu_put_mouse_event_current == entry)
625
        qemu_put_mouse_event_current = prev;
626

    
627
    qemu_free(entry->qemu_put_mouse_event_name);
628
    qemu_free(entry);
629
}
630

    
631
void kbd_put_keycode(int keycode)
632
{
633
    if (qemu_put_kbd_event) {
634
        qemu_put_kbd_event(qemu_put_kbd_event_opaque, keycode);
635
    }
636
}
637

    
638
void kbd_mouse_event(int dx, int dy, int dz, int buttons_state)
639
{
640
    QEMUPutMouseEvent *mouse_event;
641
    void *mouse_event_opaque;
642
    int width;
643

    
644
    if (!qemu_put_mouse_event_current) {
645
        return;
646
    }
647

    
648
    mouse_event =
649
        qemu_put_mouse_event_current->qemu_put_mouse_event;
650
    mouse_event_opaque =
651
        qemu_put_mouse_event_current->qemu_put_mouse_event_opaque;
652

    
653
    if (mouse_event) {
654
        if (graphic_rotate) {
655
            if (qemu_put_mouse_event_current->qemu_put_mouse_event_absolute)
656
                width = 0x7fff;
657
            else
658
                width = graphic_width - 1;
659
            mouse_event(mouse_event_opaque,
660
                                 width - dy, dx, dz, buttons_state);
661
        } else
662
            mouse_event(mouse_event_opaque,
663
                                 dx, dy, dz, buttons_state);
664
    }
665
}
666

    
667
int kbd_mouse_is_absolute(void)
668
{
669
    if (!qemu_put_mouse_event_current)
670
        return 0;
671

    
672
    return qemu_put_mouse_event_current->qemu_put_mouse_event_absolute;
673
}
674

    
675
void do_info_mice(Monitor *mon)
676
{
677
    QEMUPutMouseEntry *cursor;
678
    int index = 0;
679

    
680
    if (!qemu_put_mouse_event_head) {
681
        monitor_printf(mon, "No mouse devices connected\n");
682
        return;
683
    }
684

    
685
    monitor_printf(mon, "Mouse devices available:\n");
686
    cursor = qemu_put_mouse_event_head;
687
    while (cursor != NULL) {
688
        monitor_printf(mon, "%c Mouse #%d: %s\n",
689
                       (cursor == qemu_put_mouse_event_current ? '*' : ' '),
690
                       index, cursor->qemu_put_mouse_event_name);
691
        index++;
692
        cursor = cursor->next;
693
    }
694
}
695

    
696
void do_mouse_set(Monitor *mon, int index)
697
{
698
    QEMUPutMouseEntry *cursor;
699
    int i = 0;
700

    
701
    if (!qemu_put_mouse_event_head) {
702
        monitor_printf(mon, "No mouse devices connected\n");
703
        return;
704
    }
705

    
706
    cursor = qemu_put_mouse_event_head;
707
    while (cursor != NULL && index != i) {
708
        i++;
709
        cursor = cursor->next;
710
    }
711

    
712
    if (cursor != NULL)
713
        qemu_put_mouse_event_current = cursor;
714
    else
715
        monitor_printf(mon, "Mouse at given index not found\n");
716
}
717

    
718
/* compute with 96 bit intermediate result: (a*b)/c */
719
uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c)
720
{
721
    union {
722
        uint64_t ll;
723
        struct {
724
#ifdef WORDS_BIGENDIAN
725
            uint32_t high, low;
726
#else
727
            uint32_t low, high;
728
#endif
729
        } l;
730
    } u, res;
731
    uint64_t rl, rh;
732

    
733
    u.ll = a;
734
    rl = (uint64_t)u.l.low * (uint64_t)b;
735
    rh = (uint64_t)u.l.high * (uint64_t)b;
736
    rh += (rl >> 32);
737
    res.l.high = rh / c;
738
    res.l.low = (((rh % c) << 32) + (rl & 0xffffffff)) / c;
739
    return res.ll;
740
}
741

    
742
/***********************************************************/
743
/* real time host monotonic timer */
744

    
745
#define QEMU_TIMER_BASE 1000000000LL
746

    
747
#ifdef WIN32
748

    
749
static int64_t clock_freq;
750

    
751
static void init_get_clock(void)
752
{
753
    LARGE_INTEGER freq;
754
    int ret;
755
    ret = QueryPerformanceFrequency(&freq);
756
    if (ret == 0) {
757
        fprintf(stderr, "Could not calibrate ticks\n");
758
        exit(1);
759
    }
760
    clock_freq = freq.QuadPart;
761
}
762

    
763
static int64_t get_clock(void)
764
{
765
    LARGE_INTEGER ti;
766
    QueryPerformanceCounter(&ti);
767
    return muldiv64(ti.QuadPart, QEMU_TIMER_BASE, clock_freq);
768
}
769

    
770
#else
771

    
772
static int use_rt_clock;
773

    
774
static void init_get_clock(void)
775
{
776
    use_rt_clock = 0;
777
#if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD_version >= 500000) \
778
    || defined(__DragonFly__)
779
    {
780
        struct timespec ts;
781
        if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0) {
782
            use_rt_clock = 1;
783
        }
784
    }
785
#endif
786
}
787

    
788
static int64_t get_clock(void)
789
{
790
#if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD_version >= 500000) \
791
        || defined(__DragonFly__)
792
    if (use_rt_clock) {
793
        struct timespec ts;
794
        clock_gettime(CLOCK_MONOTONIC, &ts);
795
        return ts.tv_sec * 1000000000LL + ts.tv_nsec;
796
    } else
797
#endif
798
    {
799
        /* XXX: using gettimeofday leads to problems if the date
800
           changes, so it should be avoided. */
801
        struct timeval tv;
802
        gettimeofday(&tv, NULL);
803
        return tv.tv_sec * 1000000000LL + (tv.tv_usec * 1000);
804
    }
805
}
806
#endif
807

    
808
/* Return the virtual CPU time, based on the instruction counter.  */
809
static int64_t cpu_get_icount(void)
810
{
811
    int64_t icount;
812
    CPUState *env = cpu_single_env;;
813
    icount = qemu_icount;
814
    if (env) {
815
        if (!can_do_io(env))
816
            fprintf(stderr, "Bad clock read\n");
817
        icount -= (env->icount_decr.u16.low + env->icount_extra);
818
    }
819
    return qemu_icount_bias + (icount << icount_time_shift);
820
}
821

    
822
/***********************************************************/
823
/* guest cycle counter */
824

    
825
static int64_t cpu_ticks_prev;
826
static int64_t cpu_ticks_offset;
827
static int64_t cpu_clock_offset;
828
static int cpu_ticks_enabled;
829

    
830
/* return the host CPU cycle counter and handle stop/restart */
831
int64_t cpu_get_ticks(void)
832
{
833
    if (use_icount) {
834
        return cpu_get_icount();
835
    }
836
    if (!cpu_ticks_enabled) {
837
        return cpu_ticks_offset;
838
    } else {
839
        int64_t ticks;
840
        ticks = cpu_get_real_ticks();
841
        if (cpu_ticks_prev > ticks) {
842
            /* Note: non increasing ticks may happen if the host uses
843
               software suspend */
844
            cpu_ticks_offset += cpu_ticks_prev - ticks;
845
        }
846
        cpu_ticks_prev = ticks;
847
        return ticks + cpu_ticks_offset;
848
    }
849
}
850

    
851
/* return the host CPU monotonic timer and handle stop/restart */
852
static int64_t cpu_get_clock(void)
853
{
854
    int64_t ti;
855
    if (!cpu_ticks_enabled) {
856
        return cpu_clock_offset;
857
    } else {
858
        ti = get_clock();
859
        return ti + cpu_clock_offset;
860
    }
861
}
862

    
863
/* enable cpu_get_ticks() */
864
void cpu_enable_ticks(void)
865
{
866
    if (!cpu_ticks_enabled) {
867
        cpu_ticks_offset -= cpu_get_real_ticks();
868
        cpu_clock_offset -= get_clock();
869
        cpu_ticks_enabled = 1;
870
    }
871
}
872

    
873
/* disable cpu_get_ticks() : the clock is stopped. You must not call
874
   cpu_get_ticks() after that.  */
875
void cpu_disable_ticks(void)
876
{
877
    if (cpu_ticks_enabled) {
878
        cpu_ticks_offset = cpu_get_ticks();
879
        cpu_clock_offset = cpu_get_clock();
880
        cpu_ticks_enabled = 0;
881
    }
882
}
883

    
884
/***********************************************************/
885
/* timers */
886

    
887
#define QEMU_TIMER_REALTIME 0
888
#define QEMU_TIMER_VIRTUAL  1
889

    
890
struct QEMUClock {
891
    int type;
892
    /* XXX: add frequency */
893
};
894

    
895
struct QEMUTimer {
896
    QEMUClock *clock;
897
    int64_t expire_time;
898
    QEMUTimerCB *cb;
899
    void *opaque;
900
    struct QEMUTimer *next;
901
};
902

    
903
struct qemu_alarm_timer {
904
    char const *name;
905
    unsigned int flags;
906

    
907
    int (*start)(struct qemu_alarm_timer *t);
908
    void (*stop)(struct qemu_alarm_timer *t);
909
    void (*rearm)(struct qemu_alarm_timer *t);
910
    void *priv;
911
};
912

    
913
#define ALARM_FLAG_DYNTICKS  0x1
914
#define ALARM_FLAG_EXPIRED   0x2
915

    
916
static inline int alarm_has_dynticks(struct qemu_alarm_timer *t)
917
{
918
    return t && (t->flags & ALARM_FLAG_DYNTICKS);
919
}
920

    
921
static void qemu_rearm_alarm_timer(struct qemu_alarm_timer *t)
922
{
923
    if (!alarm_has_dynticks(t))
924
        return;
925

    
926
    t->rearm(t);
927
}
928

    
929
/* TODO: MIN_TIMER_REARM_US should be optimized */
930
#define MIN_TIMER_REARM_US 250
931

    
932
static struct qemu_alarm_timer *alarm_timer;
933

    
934
#ifdef _WIN32
935

    
936
struct qemu_alarm_win32 {
937
    MMRESULT timerId;
938
    unsigned int period;
939
} alarm_win32_data = {0, -1};
940

    
941
static int win32_start_timer(struct qemu_alarm_timer *t);
942
static void win32_stop_timer(struct qemu_alarm_timer *t);
943
static void win32_rearm_timer(struct qemu_alarm_timer *t);
944

    
945
#else
946

    
947
static int unix_start_timer(struct qemu_alarm_timer *t);
948
static void unix_stop_timer(struct qemu_alarm_timer *t);
949

    
950
#ifdef __linux__
951

    
952
static int dynticks_start_timer(struct qemu_alarm_timer *t);
953
static void dynticks_stop_timer(struct qemu_alarm_timer *t);
954
static void dynticks_rearm_timer(struct qemu_alarm_timer *t);
955

    
956
static int hpet_start_timer(struct qemu_alarm_timer *t);
957
static void hpet_stop_timer(struct qemu_alarm_timer *t);
958

    
959
static int rtc_start_timer(struct qemu_alarm_timer *t);
960
static void rtc_stop_timer(struct qemu_alarm_timer *t);
961

    
962
#endif /* __linux__ */
963

    
964
#endif /* _WIN32 */
965

    
966
/* Correlation between real and virtual time is always going to be
967
   fairly approximate, so ignore small variation.
968
   When the guest is idle real and virtual time will be aligned in
969
   the IO wait loop.  */
970
#define ICOUNT_WOBBLE (QEMU_TIMER_BASE / 10)
971

    
972
static void icount_adjust(void)
973
{
974
    int64_t cur_time;
975
    int64_t cur_icount;
976
    int64_t delta;
977
    static int64_t last_delta;
978
    /* If the VM is not running, then do nothing.  */
979
    if (!vm_running)
980
        return;
981

    
982
    cur_time = cpu_get_clock();
983
    cur_icount = qemu_get_clock(vm_clock);
984
    delta = cur_icount - cur_time;
985
    /* FIXME: This is a very crude algorithm, somewhat prone to oscillation.  */
986
    if (delta > 0
987
        && last_delta + ICOUNT_WOBBLE < delta * 2
988
        && icount_time_shift > 0) {
989
        /* The guest is getting too far ahead.  Slow time down.  */
990
        icount_time_shift--;
991
    }
992
    if (delta < 0
993
        && last_delta - ICOUNT_WOBBLE > delta * 2
994
        && icount_time_shift < MAX_ICOUNT_SHIFT) {
995
        /* The guest is getting too far behind.  Speed time up.  */
996
        icount_time_shift++;
997
    }
998
    last_delta = delta;
999
    qemu_icount_bias = cur_icount - (qemu_icount << icount_time_shift);
1000
}
1001

    
1002
static void icount_adjust_rt(void * opaque)
1003
{
1004
    qemu_mod_timer(icount_rt_timer,
1005
                   qemu_get_clock(rt_clock) + 1000);
1006
    icount_adjust();
1007
}
1008

    
1009
static void icount_adjust_vm(void * opaque)
1010
{
1011
    qemu_mod_timer(icount_vm_timer,
1012
                   qemu_get_clock(vm_clock) + QEMU_TIMER_BASE / 10);
1013
    icount_adjust();
1014
}
1015

    
1016
static void init_icount_adjust(void)
1017
{
1018
    /* Have both realtime and virtual time triggers for speed adjustment.
1019
       The realtime trigger catches emulated time passing too slowly,
1020
       the virtual time trigger catches emulated time passing too fast.
1021
       Realtime triggers occur even when idle, so use them less frequently
1022
       than VM triggers.  */
1023
    icount_rt_timer = qemu_new_timer(rt_clock, icount_adjust_rt, NULL);
1024
    qemu_mod_timer(icount_rt_timer,
1025
                   qemu_get_clock(rt_clock) + 1000);
1026
    icount_vm_timer = qemu_new_timer(vm_clock, icount_adjust_vm, NULL);
1027
    qemu_mod_timer(icount_vm_timer,
1028
                   qemu_get_clock(vm_clock) + QEMU_TIMER_BASE / 10);
1029
}
1030

    
1031
static struct qemu_alarm_timer alarm_timers[] = {
1032
#ifndef _WIN32
1033
#ifdef __linux__
1034
    {"dynticks", ALARM_FLAG_DYNTICKS, dynticks_start_timer,
1035
     dynticks_stop_timer, dynticks_rearm_timer, NULL},
1036
    /* HPET - if available - is preferred */
1037
    {"hpet", 0, hpet_start_timer, hpet_stop_timer, NULL, NULL},
1038
    /* ...otherwise try RTC */
1039
    {"rtc", 0, rtc_start_timer, rtc_stop_timer, NULL, NULL},
1040
#endif
1041
    {"unix", 0, unix_start_timer, unix_stop_timer, NULL, NULL},
1042
#else
1043
    {"dynticks", ALARM_FLAG_DYNTICKS, win32_start_timer,
1044
     win32_stop_timer, win32_rearm_timer, &alarm_win32_data},
1045
    {"win32", 0, win32_start_timer,
1046
     win32_stop_timer, NULL, &alarm_win32_data},
1047
#endif
1048
    {NULL, }
1049
};
1050

    
1051
static void show_available_alarms(void)
1052
{
1053
    int i;
1054

    
1055
    printf("Available alarm timers, in order of precedence:\n");
1056
    for (i = 0; alarm_timers[i].name; i++)
1057
        printf("%s\n", alarm_timers[i].name);
1058
}
1059

    
1060
static void configure_alarms(char const *opt)
1061
{
1062
    int i;
1063
    int cur = 0;
1064
    int count = ARRAY_SIZE(alarm_timers) - 1;
1065
    char *arg;
1066
    char *name;
1067
    struct qemu_alarm_timer tmp;
1068

    
1069
    if (!strcmp(opt, "?")) {
1070
        show_available_alarms();
1071
        exit(0);
1072
    }
1073

    
1074
    arg = strdup(opt);
1075

    
1076
    /* Reorder the array */
1077
    name = strtok(arg, ",");
1078
    while (name) {
1079
        for (i = 0; i < count && alarm_timers[i].name; i++) {
1080
            if (!strcmp(alarm_timers[i].name, name))
1081
                break;
1082
        }
1083

    
1084
        if (i == count) {
1085
            fprintf(stderr, "Unknown clock %s\n", name);
1086
            goto next;
1087
        }
1088

    
1089
        if (i < cur)
1090
            /* Ignore */
1091
            goto next;
1092

    
1093
        /* Swap */
1094
        tmp = alarm_timers[i];
1095
        alarm_timers[i] = alarm_timers[cur];
1096
        alarm_timers[cur] = tmp;
1097

    
1098
        cur++;
1099
next:
1100
        name = strtok(NULL, ",");
1101
    }
1102

    
1103
    free(arg);
1104

    
1105
    if (cur) {
1106
        /* Disable remaining timers */
1107
        for (i = cur; i < count; i++)
1108
            alarm_timers[i].name = NULL;
1109
    } else {
1110
        show_available_alarms();
1111
        exit(1);
1112
    }
1113
}
1114

    
1115
QEMUClock *rt_clock;
1116
QEMUClock *vm_clock;
1117

    
1118
static QEMUTimer *active_timers[2];
1119

    
1120
static QEMUClock *qemu_new_clock(int type)
1121
{
1122
    QEMUClock *clock;
1123
    clock = qemu_mallocz(sizeof(QEMUClock));
1124
    clock->type = type;
1125
    return clock;
1126
}
1127

    
1128
QEMUTimer *qemu_new_timer(QEMUClock *clock, QEMUTimerCB *cb, void *opaque)
1129
{
1130
    QEMUTimer *ts;
1131

    
1132
    ts = qemu_mallocz(sizeof(QEMUTimer));
1133
    ts->clock = clock;
1134
    ts->cb = cb;
1135
    ts->opaque = opaque;
1136
    return ts;
1137
}
1138

    
1139
void qemu_free_timer(QEMUTimer *ts)
1140
{
1141
    qemu_free(ts);
1142
}
1143

    
1144
/* stop a timer, but do not dealloc it */
1145
void qemu_del_timer(QEMUTimer *ts)
1146
{
1147
    QEMUTimer **pt, *t;
1148

    
1149
    /* NOTE: this code must be signal safe because
1150
       qemu_timer_expired() can be called from a signal. */
1151
    pt = &active_timers[ts->clock->type];
1152
    for(;;) {
1153
        t = *pt;
1154
        if (!t)
1155
            break;
1156
        if (t == ts) {
1157
            *pt = t->next;
1158
            break;
1159
        }
1160
        pt = &t->next;
1161
    }
1162
}
1163

    
1164
/* modify the current timer so that it will be fired when current_time
1165
   >= expire_time. The corresponding callback will be called. */
1166
void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time)
1167
{
1168
    QEMUTimer **pt, *t;
1169

    
1170
    qemu_del_timer(ts);
1171

    
1172
    /* add the timer in the sorted list */
1173
    /* NOTE: this code must be signal safe because
1174
       qemu_timer_expired() can be called from a signal. */
1175
    pt = &active_timers[ts->clock->type];
1176
    for(;;) {
1177
        t = *pt;
1178
        if (!t)
1179
            break;
1180
        if (t->expire_time > expire_time)
1181
            break;
1182
        pt = &t->next;
1183
    }
1184
    ts->expire_time = expire_time;
1185
    ts->next = *pt;
1186
    *pt = ts;
1187

    
1188
    /* Rearm if necessary  */
1189
    if (pt == &active_timers[ts->clock->type]) {
1190
        if ((alarm_timer->flags & ALARM_FLAG_EXPIRED) == 0) {
1191
            qemu_rearm_alarm_timer(alarm_timer);
1192
        }
1193
        /* Interrupt execution to force deadline recalculation.  */
1194
        if (use_icount)
1195
            qemu_notify_event();
1196
    }
1197
}
1198

    
1199
int qemu_timer_pending(QEMUTimer *ts)
1200
{
1201
    QEMUTimer *t;
1202
    for(t = active_timers[ts->clock->type]; t != NULL; t = t->next) {
1203
        if (t == ts)
1204
            return 1;
1205
    }
1206
    return 0;
1207
}
1208

    
1209
static inline int qemu_timer_expired(QEMUTimer *timer_head, int64_t current_time)
1210
{
1211
    if (!timer_head)
1212
        return 0;
1213
    return (timer_head->expire_time <= current_time);
1214
}
1215

    
1216
static void qemu_run_timers(QEMUTimer **ptimer_head, int64_t current_time)
1217
{
1218
    QEMUTimer *ts;
1219

    
1220
    for(;;) {
1221
        ts = *ptimer_head;
1222
        if (!ts || ts->expire_time > current_time)
1223
            break;
1224
        /* remove timer from the list before calling the callback */
1225
        *ptimer_head = ts->next;
1226
        ts->next = NULL;
1227

    
1228
        /* run the callback (the timer list can be modified) */
1229
        ts->cb(ts->opaque);
1230
    }
1231
}
1232

    
1233
int64_t qemu_get_clock(QEMUClock *clock)
1234
{
1235
    switch(clock->type) {
1236
    case QEMU_TIMER_REALTIME:
1237
        return get_clock() / 1000000;
1238
    default:
1239
    case QEMU_TIMER_VIRTUAL:
1240
        if (use_icount) {
1241
            return cpu_get_icount();
1242
        } else {
1243
            return cpu_get_clock();
1244
        }
1245
    }
1246
}
1247

    
1248
static void init_timers(void)
1249
{
1250
    init_get_clock();
1251
    ticks_per_sec = QEMU_TIMER_BASE;
1252
    rt_clock = qemu_new_clock(QEMU_TIMER_REALTIME);
1253
    vm_clock = qemu_new_clock(QEMU_TIMER_VIRTUAL);
1254
}
1255

    
1256
/* save a timer */
1257
void qemu_put_timer(QEMUFile *f, QEMUTimer *ts)
1258
{
1259
    uint64_t expire_time;
1260

    
1261
    if (qemu_timer_pending(ts)) {
1262
        expire_time = ts->expire_time;
1263
    } else {
1264
        expire_time = -1;
1265
    }
1266
    qemu_put_be64(f, expire_time);
1267
}
1268

    
1269
void qemu_get_timer(QEMUFile *f, QEMUTimer *ts)
1270
{
1271
    uint64_t expire_time;
1272

    
1273
    expire_time = qemu_get_be64(f);
1274
    if (expire_time != -1) {
1275
        qemu_mod_timer(ts, expire_time);
1276
    } else {
1277
        qemu_del_timer(ts);
1278
    }
1279
}
1280

    
1281
static void timer_save(QEMUFile *f, void *opaque)
1282
{
1283
    if (cpu_ticks_enabled) {
1284
        hw_error("cannot save state if virtual timers are running");
1285
    }
1286
    qemu_put_be64(f, cpu_ticks_offset);
1287
    qemu_put_be64(f, ticks_per_sec);
1288
    qemu_put_be64(f, cpu_clock_offset);
1289
}
1290

    
1291
static int timer_load(QEMUFile *f, void *opaque, int version_id)
1292
{
1293
    if (version_id != 1 && version_id != 2)
1294
        return -EINVAL;
1295
    if (cpu_ticks_enabled) {
1296
        return -EINVAL;
1297
    }
1298
    cpu_ticks_offset=qemu_get_be64(f);
1299
    ticks_per_sec=qemu_get_be64(f);
1300
    if (version_id == 2) {
1301
        cpu_clock_offset=qemu_get_be64(f);
1302
    }
1303
    return 0;
1304
}
1305

    
1306
static void qemu_event_increment(void);
1307

    
1308
#ifdef _WIN32
1309
static void CALLBACK host_alarm_handler(UINT uTimerID, UINT uMsg,
1310
                                        DWORD_PTR dwUser, DWORD_PTR dw1,
1311
                                        DWORD_PTR dw2)
1312
#else
1313
static void host_alarm_handler(int host_signum)
1314
#endif
1315
{
1316
#if 0
1317
#define DISP_FREQ 1000
1318
    {
1319
        static int64_t delta_min = INT64_MAX;
1320
        static int64_t delta_max, delta_cum, last_clock, delta, ti;
1321
        static int count;
1322
        ti = qemu_get_clock(vm_clock);
1323
        if (last_clock != 0) {
1324
            delta = ti - last_clock;
1325
            if (delta < delta_min)
1326
                delta_min = delta;
1327
            if (delta > delta_max)
1328
                delta_max = delta;
1329
            delta_cum += delta;
1330
            if (++count == DISP_FREQ) {
1331
                printf("timer: min=%" PRId64 " us max=%" PRId64 " us avg=%" PRId64 " us avg_freq=%0.3f Hz\n",
1332
                       muldiv64(delta_min, 1000000, ticks_per_sec),
1333
                       muldiv64(delta_max, 1000000, ticks_per_sec),
1334
                       muldiv64(delta_cum, 1000000 / DISP_FREQ, ticks_per_sec),
1335
                       (double)ticks_per_sec / ((double)delta_cum / DISP_FREQ));
1336
                count = 0;
1337
                delta_min = INT64_MAX;
1338
                delta_max = 0;
1339
                delta_cum = 0;
1340
            }
1341
        }
1342
        last_clock = ti;
1343
    }
1344
#endif
1345
    if (alarm_has_dynticks(alarm_timer) ||
1346
        (!use_icount &&
1347
            qemu_timer_expired(active_timers[QEMU_TIMER_VIRTUAL],
1348
                               qemu_get_clock(vm_clock))) ||
1349
        qemu_timer_expired(active_timers[QEMU_TIMER_REALTIME],
1350
                           qemu_get_clock(rt_clock))) {
1351
        qemu_event_increment();
1352
        if (alarm_timer) alarm_timer->flags |= ALARM_FLAG_EXPIRED;
1353

    
1354
#ifndef CONFIG_IOTHREAD
1355
        if (next_cpu) {
1356
            /* stop the currently executing cpu because a timer occured */
1357
            cpu_exit(next_cpu);
1358
#ifdef CONFIG_KQEMU
1359
            if (next_cpu->kqemu_enabled) {
1360
                kqemu_cpu_interrupt(next_cpu);
1361
            }
1362
#endif
1363
        }
1364
#endif
1365
        timer_alarm_pending = 1;
1366
        qemu_notify_event();
1367
    }
1368
}
1369

    
1370
static int64_t qemu_next_deadline(void)
1371
{
1372
    int64_t delta;
1373

    
1374
    if (active_timers[QEMU_TIMER_VIRTUAL]) {
1375
        delta = active_timers[QEMU_TIMER_VIRTUAL]->expire_time -
1376
                     qemu_get_clock(vm_clock);
1377
    } else {
1378
        /* To avoid problems with overflow limit this to 2^32.  */
1379
        delta = INT32_MAX;
1380
    }
1381

    
1382
    if (delta < 0)
1383
        delta = 0;
1384

    
1385
    return delta;
1386
}
1387

    
1388
#if defined(__linux__) || defined(_WIN32)
1389
static uint64_t qemu_next_deadline_dyntick(void)
1390
{
1391
    int64_t delta;
1392
    int64_t rtdelta;
1393

    
1394
    if (use_icount)
1395
        delta = INT32_MAX;
1396
    else
1397
        delta = (qemu_next_deadline() + 999) / 1000;
1398

    
1399
    if (active_timers[QEMU_TIMER_REALTIME]) {
1400
        rtdelta = (active_timers[QEMU_TIMER_REALTIME]->expire_time -
1401
                 qemu_get_clock(rt_clock))*1000;
1402
        if (rtdelta < delta)
1403
            delta = rtdelta;
1404
    }
1405

    
1406
    if (delta < MIN_TIMER_REARM_US)
1407
        delta = MIN_TIMER_REARM_US;
1408

    
1409
    return delta;
1410
}
1411
#endif
1412

    
1413
#ifndef _WIN32
1414

    
1415
/* Sets a specific flag */
1416
static int fcntl_setfl(int fd, int flag)
1417
{
1418
    int flags;
1419

    
1420
    flags = fcntl(fd, F_GETFL);
1421
    if (flags == -1)
1422
        return -errno;
1423

    
1424
    if (fcntl(fd, F_SETFL, flags | flag) == -1)
1425
        return -errno;
1426

    
1427
    return 0;
1428
}
1429

    
1430
#if defined(__linux__)
1431

    
1432
#define RTC_FREQ 1024
1433

    
1434
static void enable_sigio_timer(int fd)
1435
{
1436
    struct sigaction act;
1437

    
1438
    /* timer signal */
1439
    sigfillset(&act.sa_mask);
1440
    act.sa_flags = 0;
1441
    act.sa_handler = host_alarm_handler;
1442

    
1443
    sigaction(SIGIO, &act, NULL);
1444
    fcntl_setfl(fd, O_ASYNC);
1445
    fcntl(fd, F_SETOWN, getpid());
1446
}
1447

    
1448
static int hpet_start_timer(struct qemu_alarm_timer *t)
1449
{
1450
    struct hpet_info info;
1451
    int r, fd;
1452

    
1453
    fd = open("/dev/hpet", O_RDONLY);
1454
    if (fd < 0)
1455
        return -1;
1456

    
1457
    /* Set frequency */
1458
    r = ioctl(fd, HPET_IRQFREQ, RTC_FREQ);
1459
    if (r < 0) {
1460
        fprintf(stderr, "Could not configure '/dev/hpet' to have a 1024Hz timer. This is not a fatal\n"
1461
                "error, but for better emulation accuracy type:\n"
1462
                "'echo 1024 > /proc/sys/dev/hpet/max-user-freq' as root.\n");
1463
        goto fail;
1464
    }
1465

    
1466
    /* Check capabilities */
1467
    r = ioctl(fd, HPET_INFO, &info);
1468
    if (r < 0)
1469
        goto fail;
1470

    
1471
    /* Enable periodic mode */
1472
    r = ioctl(fd, HPET_EPI, 0);
1473
    if (info.hi_flags && (r < 0))
1474
        goto fail;
1475

    
1476
    /* Enable interrupt */
1477
    r = ioctl(fd, HPET_IE_ON, 0);
1478
    if (r < 0)
1479
        goto fail;
1480

    
1481
    enable_sigio_timer(fd);
1482
    t->priv = (void *)(long)fd;
1483

    
1484
    return 0;
1485
fail:
1486
    close(fd);
1487
    return -1;
1488
}
1489

    
1490
static void hpet_stop_timer(struct qemu_alarm_timer *t)
1491
{
1492
    int fd = (long)t->priv;
1493

    
1494
    close(fd);
1495
}
1496

    
1497
static int rtc_start_timer(struct qemu_alarm_timer *t)
1498
{
1499
    int rtc_fd;
1500
    unsigned long current_rtc_freq = 0;
1501

    
1502
    TFR(rtc_fd = open("/dev/rtc", O_RDONLY));
1503
    if (rtc_fd < 0)
1504
        return -1;
1505
    ioctl(rtc_fd, RTC_IRQP_READ, &current_rtc_freq);
1506
    if (current_rtc_freq != RTC_FREQ &&
1507
        ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
1508
        fprintf(stderr, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n"
1509
                "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n"
1510
                "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n");
1511
        goto fail;
1512
    }
1513
    if (ioctl(rtc_fd, RTC_PIE_ON, 0) < 0) {
1514
    fail:
1515
        close(rtc_fd);
1516
        return -1;
1517
    }
1518

    
1519
    enable_sigio_timer(rtc_fd);
1520

    
1521
    t->priv = (void *)(long)rtc_fd;
1522

    
1523
    return 0;
1524
}
1525

    
1526
static void rtc_stop_timer(struct qemu_alarm_timer *t)
1527
{
1528
    int rtc_fd = (long)t->priv;
1529

    
1530
    close(rtc_fd);
1531
}
1532

    
1533
static int dynticks_start_timer(struct qemu_alarm_timer *t)
1534
{
1535
    struct sigevent ev;
1536
    timer_t host_timer;
1537
    struct sigaction act;
1538

    
1539
    sigfillset(&act.sa_mask);
1540
    act.sa_flags = 0;
1541
    act.sa_handler = host_alarm_handler;
1542

    
1543
    sigaction(SIGALRM, &act, NULL);
1544

    
1545
    /* 
1546
     * Initialize ev struct to 0 to avoid valgrind complaining
1547
     * about uninitialized data in timer_create call
1548
     */
1549
    memset(&ev, 0, sizeof(ev));
1550
    ev.sigev_value.sival_int = 0;
1551
    ev.sigev_notify = SIGEV_SIGNAL;
1552
    ev.sigev_signo = SIGALRM;
1553

    
1554
    if (timer_create(CLOCK_REALTIME, &ev, &host_timer)) {
1555
        perror("timer_create");
1556

    
1557
        /* disable dynticks */
1558
        fprintf(stderr, "Dynamic Ticks disabled\n");
1559

    
1560
        return -1;
1561
    }
1562

    
1563
    t->priv = (void *)(long)host_timer;
1564

    
1565
    return 0;
1566
}
1567

    
1568
static void dynticks_stop_timer(struct qemu_alarm_timer *t)
1569
{
1570
    timer_t host_timer = (timer_t)(long)t->priv;
1571

    
1572
    timer_delete(host_timer);
1573
}
1574

    
1575
static void dynticks_rearm_timer(struct qemu_alarm_timer *t)
1576
{
1577
    timer_t host_timer = (timer_t)(long)t->priv;
1578
    struct itimerspec timeout;
1579
    int64_t nearest_delta_us = INT64_MAX;
1580
    int64_t current_us;
1581

    
1582
    if (!active_timers[QEMU_TIMER_REALTIME] &&
1583
                !active_timers[QEMU_TIMER_VIRTUAL])
1584
        return;
1585

    
1586
    nearest_delta_us = qemu_next_deadline_dyntick();
1587

    
1588
    /* check whether a timer is already running */
1589
    if (timer_gettime(host_timer, &timeout)) {
1590
        perror("gettime");
1591
        fprintf(stderr, "Internal timer error: aborting\n");
1592
        exit(1);
1593
    }
1594
    current_us = timeout.it_value.tv_sec * 1000000 + timeout.it_value.tv_nsec/1000;
1595
    if (current_us && current_us <= nearest_delta_us)
1596
        return;
1597

    
1598
    timeout.it_interval.tv_sec = 0;
1599
    timeout.it_interval.tv_nsec = 0; /* 0 for one-shot timer */
1600
    timeout.it_value.tv_sec =  nearest_delta_us / 1000000;
1601
    timeout.it_value.tv_nsec = (nearest_delta_us % 1000000) * 1000;
1602
    if (timer_settime(host_timer, 0 /* RELATIVE */, &timeout, NULL)) {
1603
        perror("settime");
1604
        fprintf(stderr, "Internal timer error: aborting\n");
1605
        exit(1);
1606
    }
1607
}
1608

    
1609
#endif /* defined(__linux__) */
1610

    
1611
static int unix_start_timer(struct qemu_alarm_timer *t)
1612
{
1613
    struct sigaction act;
1614
    struct itimerval itv;
1615
    int err;
1616

    
1617
    /* timer signal */
1618
    sigfillset(&act.sa_mask);
1619
    act.sa_flags = 0;
1620
    act.sa_handler = host_alarm_handler;
1621

    
1622
    sigaction(SIGALRM, &act, NULL);
1623

    
1624
    itv.it_interval.tv_sec = 0;
1625
    /* for i386 kernel 2.6 to get 1 ms */
1626
    itv.it_interval.tv_usec = 999;
1627
    itv.it_value.tv_sec = 0;
1628
    itv.it_value.tv_usec = 10 * 1000;
1629

    
1630
    err = setitimer(ITIMER_REAL, &itv, NULL);
1631
    if (err)
1632
        return -1;
1633

    
1634
    return 0;
1635
}
1636

    
1637
static void unix_stop_timer(struct qemu_alarm_timer *t)
1638
{
1639
    struct itimerval itv;
1640

    
1641
    memset(&itv, 0, sizeof(itv));
1642
    setitimer(ITIMER_REAL, &itv, NULL);
1643
}
1644

    
1645
#endif /* !defined(_WIN32) */
1646

    
1647

    
1648
#ifdef _WIN32
1649

    
1650
static int win32_start_timer(struct qemu_alarm_timer *t)
1651
{
1652
    TIMECAPS tc;
1653
    struct qemu_alarm_win32 *data = t->priv;
1654
    UINT flags;
1655

    
1656
    memset(&tc, 0, sizeof(tc));
1657
    timeGetDevCaps(&tc, sizeof(tc));
1658

    
1659
    if (data->period < tc.wPeriodMin)
1660
        data->period = tc.wPeriodMin;
1661

    
1662
    timeBeginPeriod(data->period);
1663

    
1664
    flags = TIME_CALLBACK_FUNCTION;
1665
    if (alarm_has_dynticks(t))
1666
        flags |= TIME_ONESHOT;
1667
    else
1668
        flags |= TIME_PERIODIC;
1669

    
1670
    data->timerId = timeSetEvent(1,         // interval (ms)
1671
                        data->period,       // resolution
1672
                        host_alarm_handler, // function
1673
                        (DWORD)t,           // parameter
1674
                        flags);
1675

    
1676
    if (!data->timerId) {
1677
        perror("Failed to initialize win32 alarm timer");
1678
        timeEndPeriod(data->period);
1679
        return -1;
1680
    }
1681

    
1682
    return 0;
1683
}
1684

    
1685
static void win32_stop_timer(struct qemu_alarm_timer *t)
1686
{
1687
    struct qemu_alarm_win32 *data = t->priv;
1688

    
1689
    timeKillEvent(data->timerId);
1690
    timeEndPeriod(data->period);
1691
}
1692

    
1693
static void win32_rearm_timer(struct qemu_alarm_timer *t)
1694
{
1695
    struct qemu_alarm_win32 *data = t->priv;
1696
    uint64_t nearest_delta_us;
1697

    
1698
    if (!active_timers[QEMU_TIMER_REALTIME] &&
1699
                !active_timers[QEMU_TIMER_VIRTUAL])
1700
        return;
1701

    
1702
    nearest_delta_us = qemu_next_deadline_dyntick();
1703
    nearest_delta_us /= 1000;
1704

    
1705
    timeKillEvent(data->timerId);
1706

    
1707
    data->timerId = timeSetEvent(1,
1708
                        data->period,
1709
                        host_alarm_handler,
1710
                        (DWORD)t,
1711
                        TIME_ONESHOT | TIME_PERIODIC);
1712

    
1713
    if (!data->timerId) {
1714
        perror("Failed to re-arm win32 alarm timer");
1715

    
1716
        timeEndPeriod(data->period);
1717
        exit(1);
1718
    }
1719
}
1720

    
1721
#endif /* _WIN32 */
1722

    
1723
static int init_timer_alarm(void)
1724
{
1725
    struct qemu_alarm_timer *t = NULL;
1726
    int i, err = -1;
1727

    
1728
    for (i = 0; alarm_timers[i].name; i++) {
1729
        t = &alarm_timers[i];
1730

    
1731
        err = t->start(t);
1732
        if (!err)
1733
            break;
1734
    }
1735

    
1736
    if (err) {
1737
        err = -ENOENT;
1738
        goto fail;
1739
    }
1740

    
1741
    alarm_timer = t;
1742

    
1743
    return 0;
1744

    
1745
fail:
1746
    return err;
1747
}
1748

    
1749
static void quit_timers(void)
1750
{
1751
    alarm_timer->stop(alarm_timer);
1752
    alarm_timer = NULL;
1753
}
1754

    
1755
/***********************************************************/
1756
/* host time/date access */
1757
void qemu_get_timedate(struct tm *tm, int offset)
1758
{
1759
    time_t ti;
1760
    struct tm *ret;
1761

    
1762
    time(&ti);
1763
    ti += offset;
1764
    if (rtc_date_offset == -1) {
1765
        if (rtc_utc)
1766
            ret = gmtime(&ti);
1767
        else
1768
            ret = localtime(&ti);
1769
    } else {
1770
        ti -= rtc_date_offset;
1771
        ret = gmtime(&ti);
1772
    }
1773

    
1774
    memcpy(tm, ret, sizeof(struct tm));
1775
}
1776

    
1777
int qemu_timedate_diff(struct tm *tm)
1778
{
1779
    time_t seconds;
1780

    
1781
    if (rtc_date_offset == -1)
1782
        if (rtc_utc)
1783
            seconds = mktimegm(tm);
1784
        else
1785
            seconds = mktime(tm);
1786
    else
1787
        seconds = mktimegm(tm) + rtc_date_offset;
1788

    
1789
    return seconds - time(NULL);
1790
}
1791

    
1792
#ifdef _WIN32
1793
static void socket_cleanup(void)
1794
{
1795
    WSACleanup();
1796
}
1797

    
1798
static int socket_init(void)
1799
{
1800
    WSADATA Data;
1801
    int ret, err;
1802

    
1803
    ret = WSAStartup(MAKEWORD(2,2), &Data);
1804
    if (ret != 0) {
1805
        err = WSAGetLastError();
1806
        fprintf(stderr, "WSAStartup: %d\n", err);
1807
        return -1;
1808
    }
1809
    atexit(socket_cleanup);
1810
    return 0;
1811
}
1812
#endif
1813

    
1814
int get_param_value(char *buf, int buf_size,
1815
                    const char *tag, const char *str)
1816
{
1817
    const char *p;
1818
    char option[128];
1819

    
1820
    p = str;
1821
    for(;;) {
1822
        p = get_opt_name(option, sizeof(option), p, '=');
1823
        if (*p != '=')
1824
            break;
1825
        p++;
1826
        if (!strcmp(tag, option)) {
1827
            (void)get_opt_value(buf, buf_size, p);
1828
            return strlen(buf);
1829
        } else {
1830
            p = get_opt_value(NULL, 0, p);
1831
        }
1832
        if (*p != ',')
1833
            break;
1834
        p++;
1835
    }
1836
    return 0;
1837
}
1838

    
1839
int check_params(const char * const *params, const char *str)
1840
{
1841
    int name_buf_size = 1;
1842
    const char *p;
1843
    char *name_buf;
1844
    int i, len;
1845
    int ret = 0;
1846

    
1847
    for (i = 0; params[i] != NULL; i++) {
1848
        len = strlen(params[i]) + 1;
1849
        if (len > name_buf_size) {
1850
            name_buf_size = len;
1851
        }
1852
    }
1853
    name_buf = qemu_malloc(name_buf_size);
1854

    
1855
    p = str;
1856
    while (*p != '\0') {
1857
        p = get_opt_name(name_buf, name_buf_size, p, '=');
1858
        if (*p != '=') {
1859
            ret = -1;
1860
            break;
1861
        }
1862
        p++;
1863
        for(i = 0; params[i] != NULL; i++)
1864
            if (!strcmp(params[i], name_buf))
1865
                break;
1866
        if (params[i] == NULL) {
1867
            ret = -1;
1868
            break;
1869
        }
1870
        p = get_opt_value(NULL, 0, p);
1871
        if (*p != ',')
1872
            break;
1873
        p++;
1874
    }
1875

    
1876
    qemu_free(name_buf);
1877
    return ret;
1878
}
1879

    
1880
/***********************************************************/
1881
/* Bluetooth support */
1882
static int nb_hcis;
1883
static int cur_hci;
1884
static struct HCIInfo *hci_table[MAX_NICS];
1885

    
1886
static struct bt_vlan_s {
1887
    struct bt_scatternet_s net;
1888
    int id;
1889
    struct bt_vlan_s *next;
1890
} *first_bt_vlan;
1891

    
1892
/* find or alloc a new bluetooth "VLAN" */
1893
static struct bt_scatternet_s *qemu_find_bt_vlan(int id)
1894
{
1895
    struct bt_vlan_s **pvlan, *vlan;
1896
    for (vlan = first_bt_vlan; vlan != NULL; vlan = vlan->next) {
1897
        if (vlan->id == id)
1898
            return &vlan->net;
1899
    }
1900
    vlan = qemu_mallocz(sizeof(struct bt_vlan_s));
1901
    vlan->id = id;
1902
    pvlan = &first_bt_vlan;
1903
    while (*pvlan != NULL)
1904
        pvlan = &(*pvlan)->next;
1905
    *pvlan = vlan;
1906
    return &vlan->net;
1907
}
1908

    
1909
static void null_hci_send(struct HCIInfo *hci, const uint8_t *data, int len)
1910
{
1911
}
1912

    
1913
static int null_hci_addr_set(struct HCIInfo *hci, const uint8_t *bd_addr)
1914
{
1915
    return -ENOTSUP;
1916
}
1917

    
1918
static struct HCIInfo null_hci = {
1919
    .cmd_send = null_hci_send,
1920
    .sco_send = null_hci_send,
1921
    .acl_send = null_hci_send,
1922
    .bdaddr_set = null_hci_addr_set,
1923
};
1924

    
1925
struct HCIInfo *qemu_next_hci(void)
1926
{
1927
    if (cur_hci == nb_hcis)
1928
        return &null_hci;
1929

    
1930
    return hci_table[cur_hci++];
1931
}
1932

    
1933
static struct HCIInfo *hci_init(const char *str)
1934
{
1935
    char *endp;
1936
    struct bt_scatternet_s *vlan = 0;
1937

    
1938
    if (!strcmp(str, "null"))
1939
        /* null */
1940
        return &null_hci;
1941
    else if (!strncmp(str, "host", 4) && (str[4] == '\0' || str[4] == ':'))
1942
        /* host[:hciN] */
1943
        return bt_host_hci(str[4] ? str + 5 : "hci0");
1944
    else if (!strncmp(str, "hci", 3)) {
1945
        /* hci[,vlan=n] */
1946
        if (str[3]) {
1947
            if (!strncmp(str + 3, ",vlan=", 6)) {
1948
                vlan = qemu_find_bt_vlan(strtol(str + 9, &endp, 0));
1949
                if (*endp)
1950
                    vlan = 0;
1951
            }
1952
        } else
1953
            vlan = qemu_find_bt_vlan(0);
1954
        if (vlan)
1955
           return bt_new_hci(vlan);
1956
    }
1957

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

    
1960
    return 0;
1961
}
1962

    
1963
static int bt_hci_parse(const char *str)
1964
{
1965
    struct HCIInfo *hci;
1966
    bdaddr_t bdaddr;
1967

    
1968
    if (nb_hcis >= MAX_NICS) {
1969
        fprintf(stderr, "qemu: Too many bluetooth HCIs (max %i).\n", MAX_NICS);
1970
        return -1;
1971
    }
1972

    
1973
    hci = hci_init(str);
1974
    if (!hci)
1975
        return -1;
1976

    
1977
    bdaddr.b[0] = 0x52;
1978
    bdaddr.b[1] = 0x54;
1979
    bdaddr.b[2] = 0x00;
1980
    bdaddr.b[3] = 0x12;
1981
    bdaddr.b[4] = 0x34;
1982
    bdaddr.b[5] = 0x56 + nb_hcis;
1983
    hci->bdaddr_set(hci, bdaddr.b);
1984

    
1985
    hci_table[nb_hcis++] = hci;
1986

    
1987
    return 0;
1988
}
1989

    
1990
static void bt_vhci_add(int vlan_id)
1991
{
1992
    struct bt_scatternet_s *vlan = qemu_find_bt_vlan(vlan_id);
1993

    
1994
    if (!vlan->slave)
1995
        fprintf(stderr, "qemu: warning: adding a VHCI to "
1996
                        "an empty scatternet %i\n", vlan_id);
1997

    
1998
    bt_vhci_init(bt_new_hci(vlan));
1999
}
2000

    
2001
static struct bt_device_s *bt_device_add(const char *opt)
2002
{
2003
    struct bt_scatternet_s *vlan;
2004
    int vlan_id = 0;
2005
    char *endp = strstr(opt, ",vlan=");
2006
    int len = (endp ? endp - opt : strlen(opt)) + 1;
2007
    char devname[10];
2008

    
2009
    pstrcpy(devname, MIN(sizeof(devname), len), opt);
2010

    
2011
    if (endp) {
2012
        vlan_id = strtol(endp + 6, &endp, 0);
2013
        if (*endp) {
2014
            fprintf(stderr, "qemu: unrecognised bluetooth vlan Id\n");
2015
            return 0;
2016
        }
2017
    }
2018

    
2019
    vlan = qemu_find_bt_vlan(vlan_id);
2020

    
2021
    if (!vlan->slave)
2022
        fprintf(stderr, "qemu: warning: adding a slave device to "
2023
                        "an empty scatternet %i\n", vlan_id);
2024

    
2025
    if (!strcmp(devname, "keyboard"))
2026
        return bt_keyboard_init(vlan);
2027

    
2028
    fprintf(stderr, "qemu: unsupported bluetooth device `%s'\n", devname);
2029
    return 0;
2030
}
2031

    
2032
static int bt_parse(const char *opt)
2033
{
2034
    const char *endp, *p;
2035
    int vlan;
2036

    
2037
    if (strstart(opt, "hci", &endp)) {
2038
        if (!*endp || *endp == ',') {
2039
            if (*endp)
2040
                if (!strstart(endp, ",vlan=", 0))
2041
                    opt = endp + 1;
2042

    
2043
            return bt_hci_parse(opt);
2044
       }
2045
    } else if (strstart(opt, "vhci", &endp)) {
2046
        if (!*endp || *endp == ',') {
2047
            if (*endp) {
2048
                if (strstart(endp, ",vlan=", &p)) {
2049
                    vlan = strtol(p, (char **) &endp, 0);
2050
                    if (*endp) {
2051
                        fprintf(stderr, "qemu: bad scatternet '%s'\n", p);
2052
                        return 1;
2053
                    }
2054
                } else {
2055
                    fprintf(stderr, "qemu: bad parameter '%s'\n", endp + 1);
2056
                    return 1;
2057
                }
2058
            } else
2059
                vlan = 0;
2060

    
2061
            bt_vhci_add(vlan);
2062
            return 0;
2063
        }
2064
    } else if (strstart(opt, "device:", &endp))
2065
        return !bt_device_add(endp);
2066

    
2067
    fprintf(stderr, "qemu: bad bluetooth parameter '%s'\n", opt);
2068
    return 1;
2069
}
2070

    
2071
/***********************************************************/
2072
/* QEMU Block devices */
2073

    
2074
#define HD_ALIAS "index=%d,media=disk"
2075
#define CDROM_ALIAS "index=2,media=cdrom"
2076
#define FD_ALIAS "index=%d,if=floppy"
2077
#define PFLASH_ALIAS "if=pflash"
2078
#define MTD_ALIAS "if=mtd"
2079
#define SD_ALIAS "index=0,if=sd"
2080

    
2081
static int drive_opt_get_free_idx(void)
2082
{
2083
    int index;
2084

    
2085
    for (index = 0; index < MAX_DRIVES; index++)
2086
        if (!drives_opt[index].used) {
2087
            drives_opt[index].used = 1;
2088
            return index;
2089
        }
2090

    
2091
    return -1;
2092
}
2093

    
2094
static int drive_get_free_idx(void)
2095
{
2096
    int index;
2097

    
2098
    for (index = 0; index < MAX_DRIVES; index++)
2099
        if (!drives_table[index].used) {
2100
            drives_table[index].used = 1;
2101
            return index;
2102
        }
2103

    
2104
    return -1;
2105
}
2106

    
2107
int drive_add(const char *file, const char *fmt, ...)
2108
{
2109
    va_list ap;
2110
    int index = drive_opt_get_free_idx();
2111

    
2112
    if (nb_drives_opt >= MAX_DRIVES || index == -1) {
2113
        fprintf(stderr, "qemu: too many drives\n");
2114
        return -1;
2115
    }
2116

    
2117
    drives_opt[index].file = file;
2118
    va_start(ap, fmt);
2119
    vsnprintf(drives_opt[index].opt,
2120
              sizeof(drives_opt[0].opt), fmt, ap);
2121
    va_end(ap);
2122

    
2123
    nb_drives_opt++;
2124
    return index;
2125
}
2126

    
2127
void drive_remove(int index)
2128
{
2129
    drives_opt[index].used = 0;
2130
    nb_drives_opt--;
2131
}
2132

    
2133
int drive_get_index(BlockInterfaceType type, int bus, int unit)
2134
{
2135
    int index;
2136

    
2137
    /* seek interface, bus and unit */
2138

    
2139
    for (index = 0; index < MAX_DRIVES; index++)
2140
        if (drives_table[index].type == type &&
2141
            drives_table[index].bus == bus &&
2142
            drives_table[index].unit == unit &&
2143
            drives_table[index].used)
2144
        return index;
2145

    
2146
    return -1;
2147
}
2148

    
2149
int drive_get_max_bus(BlockInterfaceType type)
2150
{
2151
    int max_bus;
2152
    int index;
2153

    
2154
    max_bus = -1;
2155
    for (index = 0; index < nb_drives; index++) {
2156
        if(drives_table[index].type == type &&
2157
           drives_table[index].bus > max_bus)
2158
            max_bus = drives_table[index].bus;
2159
    }
2160
    return max_bus;
2161
}
2162

    
2163
const char *drive_get_serial(BlockDriverState *bdrv)
2164
{
2165
    int index;
2166

    
2167
    for (index = 0; index < nb_drives; index++)
2168
        if (drives_table[index].bdrv == bdrv)
2169
            return drives_table[index].serial;
2170

    
2171
    return "\0";
2172
}
2173

    
2174
BlockInterfaceErrorAction drive_get_onerror(BlockDriverState *bdrv)
2175
{
2176
    int index;
2177

    
2178
    for (index = 0; index < nb_drives; index++)
2179
        if (drives_table[index].bdrv == bdrv)
2180
            return drives_table[index].onerror;
2181

    
2182
    return BLOCK_ERR_STOP_ENOSPC;
2183
}
2184

    
2185
static void bdrv_format_print(void *opaque, const char *name)
2186
{
2187
    fprintf(stderr, " %s", name);
2188
}
2189

    
2190
void drive_uninit(BlockDriverState *bdrv)
2191
{
2192
    int i;
2193

    
2194
    for (i = 0; i < MAX_DRIVES; i++)
2195
        if (drives_table[i].bdrv == bdrv) {
2196
            drives_table[i].bdrv = NULL;
2197
            drives_table[i].used = 0;
2198
            drive_remove(drives_table[i].drive_opt_idx);
2199
            nb_drives--;
2200
            break;
2201
        }
2202
}
2203

    
2204
int drive_init(struct drive_opt *arg, int snapshot, void *opaque)
2205
{
2206
    char buf[128];
2207
    char file[1024];
2208
    char devname[128];
2209
    char serial[21];
2210
    const char *mediastr = "";
2211
    BlockInterfaceType type;
2212
    enum { MEDIA_DISK, MEDIA_CDROM } media;
2213
    int bus_id, unit_id;
2214
    int cyls, heads, secs, translation;
2215
    BlockDriverState *bdrv;
2216
    BlockDriver *drv = NULL;
2217
    QEMUMachine *machine = opaque;
2218
    int max_devs;
2219
    int index;
2220
    int cache;
2221
    int bdrv_flags, onerror;
2222
    int drives_table_idx;
2223
    char *str = arg->opt;
2224
    static const char * const params[] = { "bus", "unit", "if", "index",
2225
                                           "cyls", "heads", "secs", "trans",
2226
                                           "media", "snapshot", "file",
2227
                                           "cache", "format", "serial", "werror",
2228
                                           NULL };
2229

    
2230
    if (check_params(params, str) < 0) {
2231
         fprintf(stderr, "qemu: unknown parameter in '%s'\n", str);
2232
         return -1;
2233
    }
2234

    
2235
    file[0] = 0;
2236
    cyls = heads = secs = 0;
2237
    bus_id = 0;
2238
    unit_id = -1;
2239
    translation = BIOS_ATA_TRANSLATION_AUTO;
2240
    index = -1;
2241
    cache = 3;
2242

    
2243
    if (machine->use_scsi) {
2244
        type = IF_SCSI;
2245
        max_devs = MAX_SCSI_DEVS;
2246
        pstrcpy(devname, sizeof(devname), "scsi");
2247
    } else {
2248
        type = IF_IDE;
2249
        max_devs = MAX_IDE_DEVS;
2250
        pstrcpy(devname, sizeof(devname), "ide");
2251
    }
2252
    media = MEDIA_DISK;
2253

    
2254
    /* extract parameters */
2255

    
2256
    if (get_param_value(buf, sizeof(buf), "bus", str)) {
2257
        bus_id = strtol(buf, NULL, 0);
2258
        if (bus_id < 0) {
2259
            fprintf(stderr, "qemu: '%s' invalid bus id\n", str);
2260
            return -1;
2261
        }
2262
    }
2263

    
2264
    if (get_param_value(buf, sizeof(buf), "unit", str)) {
2265
        unit_id = strtol(buf, NULL, 0);
2266
        if (unit_id < 0) {
2267
            fprintf(stderr, "qemu: '%s' invalid unit id\n", str);
2268
            return -1;
2269
        }
2270
    }
2271

    
2272
    if (get_param_value(buf, sizeof(buf), "if", str)) {
2273
        pstrcpy(devname, sizeof(devname), buf);
2274
        if (!strcmp(buf, "ide")) {
2275
            type = IF_IDE;
2276
            max_devs = MAX_IDE_DEVS;
2277
        } else if (!strcmp(buf, "scsi")) {
2278
            type = IF_SCSI;
2279
            max_devs = MAX_SCSI_DEVS;
2280
        } else if (!strcmp(buf, "floppy")) {
2281
            type = IF_FLOPPY;
2282
            max_devs = 0;
2283
        } else if (!strcmp(buf, "pflash")) {
2284
            type = IF_PFLASH;
2285
            max_devs = 0;
2286
        } else if (!strcmp(buf, "mtd")) {
2287
            type = IF_MTD;
2288
            max_devs = 0;
2289
        } else if (!strcmp(buf, "sd")) {
2290
            type = IF_SD;
2291
            max_devs = 0;
2292
        } else if (!strcmp(buf, "virtio")) {
2293
            type = IF_VIRTIO;
2294
            max_devs = 0;
2295
        } else if (!strcmp(buf, "xen")) {
2296
            type = IF_XEN;
2297
            max_devs = 0;
2298
        } else {
2299
            fprintf(stderr, "qemu: '%s' unsupported bus type '%s'\n", str, buf);
2300
            return -1;
2301
        }
2302
    }
2303

    
2304
    if (get_param_value(buf, sizeof(buf), "index", str)) {
2305
        index = strtol(buf, NULL, 0);
2306
        if (index < 0) {
2307
            fprintf(stderr, "qemu: '%s' invalid index\n", str);
2308
            return -1;
2309
        }
2310
    }
2311

    
2312
    if (get_param_value(buf, sizeof(buf), "cyls", str)) {
2313
        cyls = strtol(buf, NULL, 0);
2314
    }
2315

    
2316
    if (get_param_value(buf, sizeof(buf), "heads", str)) {
2317
        heads = strtol(buf, NULL, 0);
2318
    }
2319

    
2320
    if (get_param_value(buf, sizeof(buf), "secs", str)) {
2321
        secs = strtol(buf, NULL, 0);
2322
    }
2323

    
2324
    if (cyls || heads || secs) {
2325
        if (cyls < 1 || cyls > 16383) {
2326
            fprintf(stderr, "qemu: '%s' invalid physical cyls number\n", str);
2327
            return -1;
2328
        }
2329
        if (heads < 1 || heads > 16) {
2330
            fprintf(stderr, "qemu: '%s' invalid physical heads number\n", str);
2331
            return -1;
2332
        }
2333
        if (secs < 1 || secs > 63) {
2334
            fprintf(stderr, "qemu: '%s' invalid physical secs number\n", str);
2335
            return -1;
2336
        }
2337
    }
2338

    
2339
    if (get_param_value(buf, sizeof(buf), "trans", str)) {
2340
        if (!cyls) {
2341
            fprintf(stderr,
2342
                    "qemu: '%s' trans must be used with cyls,heads and secs\n",
2343
                    str);
2344
            return -1;
2345
        }
2346
        if (!strcmp(buf, "none"))
2347
            translation = BIOS_ATA_TRANSLATION_NONE;
2348
        else if (!strcmp(buf, "lba"))
2349
            translation = BIOS_ATA_TRANSLATION_LBA;
2350
        else if (!strcmp(buf, "auto"))
2351
            translation = BIOS_ATA_TRANSLATION_AUTO;
2352
        else {
2353
            fprintf(stderr, "qemu: '%s' invalid translation type\n", str);
2354
            return -1;
2355
        }
2356
    }
2357

    
2358
    if (get_param_value(buf, sizeof(buf), "media", str)) {
2359
        if (!strcmp(buf, "disk")) {
2360
            media = MEDIA_DISK;
2361
        } else if (!strcmp(buf, "cdrom")) {
2362
            if (cyls || secs || heads) {
2363
                fprintf(stderr,
2364
                        "qemu: '%s' invalid physical CHS format\n", str);
2365
                return -1;
2366
            }
2367
            media = MEDIA_CDROM;
2368
        } else {
2369
            fprintf(stderr, "qemu: '%s' invalid media\n", str);
2370
            return -1;
2371
        }
2372
    }
2373

    
2374
    if (get_param_value(buf, sizeof(buf), "snapshot", str)) {
2375
        if (!strcmp(buf, "on"))
2376
            snapshot = 1;
2377
        else if (!strcmp(buf, "off"))
2378
            snapshot = 0;
2379
        else {
2380
            fprintf(stderr, "qemu: '%s' invalid snapshot option\n", str);
2381
            return -1;
2382
        }
2383
    }
2384

    
2385
    if (get_param_value(buf, sizeof(buf), "cache", str)) {
2386
        if (!strcmp(buf, "off") || !strcmp(buf, "none"))
2387
            cache = 0;
2388
        else if (!strcmp(buf, "writethrough"))
2389
            cache = 1;
2390
        else if (!strcmp(buf, "writeback"))
2391
            cache = 2;
2392
        else {
2393
           fprintf(stderr, "qemu: invalid cache option\n");
2394
           return -1;
2395
        }
2396
    }
2397

    
2398
    if (get_param_value(buf, sizeof(buf), "format", str)) {
2399
       if (strcmp(buf, "?") == 0) {
2400
            fprintf(stderr, "qemu: Supported formats:");
2401
            bdrv_iterate_format(bdrv_format_print, NULL);
2402
            fprintf(stderr, "\n");
2403
            return -1;
2404
        }
2405
        drv = bdrv_find_format(buf);
2406
        if (!drv) {
2407
            fprintf(stderr, "qemu: '%s' invalid format\n", buf);
2408
            return -1;
2409
        }
2410
    }
2411

    
2412
    if (arg->file == NULL)
2413
        get_param_value(file, sizeof(file), "file", str);
2414
    else
2415
        pstrcpy(file, sizeof(file), arg->file);
2416

    
2417
    if (!get_param_value(serial, sizeof(serial), "serial", str))
2418
            memset(serial, 0,  sizeof(serial));
2419

    
2420
    onerror = BLOCK_ERR_STOP_ENOSPC;
2421
    if (get_param_value(buf, sizeof(serial), "werror", str)) {
2422
        if (type != IF_IDE && type != IF_SCSI && type != IF_VIRTIO) {
2423
            fprintf(stderr, "werror is no supported by this format\n");
2424
            return -1;
2425
        }
2426
        if (!strcmp(buf, "ignore"))
2427
            onerror = BLOCK_ERR_IGNORE;
2428
        else if (!strcmp(buf, "enospc"))
2429
            onerror = BLOCK_ERR_STOP_ENOSPC;
2430
        else if (!strcmp(buf, "stop"))
2431
            onerror = BLOCK_ERR_STOP_ANY;
2432
        else if (!strcmp(buf, "report"))
2433
            onerror = BLOCK_ERR_REPORT;
2434
        else {
2435
            fprintf(stderr, "qemu: '%s' invalid write error action\n", buf);
2436
            return -1;
2437
        }
2438
    }
2439

    
2440
    /* compute bus and unit according index */
2441

    
2442
    if (index != -1) {
2443
        if (bus_id != 0 || unit_id != -1) {
2444
            fprintf(stderr,
2445
                    "qemu: '%s' index cannot be used with bus and unit\n", str);
2446
            return -1;
2447
        }
2448
        if (max_devs == 0)
2449
        {
2450
            unit_id = index;
2451
            bus_id = 0;
2452
        } else {
2453
            unit_id = index % max_devs;
2454
            bus_id = index / max_devs;
2455
        }
2456
    }
2457

    
2458
    /* if user doesn't specify a unit_id,
2459
     * try to find the first free
2460
     */
2461

    
2462
    if (unit_id == -1) {
2463
       unit_id = 0;
2464
       while (drive_get_index(type, bus_id, unit_id) != -1) {
2465
           unit_id++;
2466
           if (max_devs && unit_id >= max_devs) {
2467
               unit_id -= max_devs;
2468
               bus_id++;
2469
           }
2470
       }
2471
    }
2472

    
2473
    /* check unit id */
2474

    
2475
    if (max_devs && unit_id >= max_devs) {
2476
        fprintf(stderr, "qemu: '%s' unit %d too big (max is %d)\n",
2477
                        str, unit_id, max_devs - 1);
2478
        return -1;
2479
    }
2480

    
2481
    /*
2482
     * ignore multiple definitions
2483
     */
2484

    
2485
    if (drive_get_index(type, bus_id, unit_id) != -1)
2486
        return -2;
2487

    
2488
    /* init */
2489

    
2490
    if (type == IF_IDE || type == IF_SCSI)
2491
        mediastr = (media == MEDIA_CDROM) ? "-cd" : "-hd";
2492
    if (max_devs)
2493
        snprintf(buf, sizeof(buf), "%s%i%s%i",
2494
                 devname, bus_id, mediastr, unit_id);
2495
    else
2496
        snprintf(buf, sizeof(buf), "%s%s%i",
2497
                 devname, mediastr, unit_id);
2498
    bdrv = bdrv_new(buf);
2499
    drives_table_idx = drive_get_free_idx();
2500
    drives_table[drives_table_idx].bdrv = bdrv;
2501
    drives_table[drives_table_idx].type = type;
2502
    drives_table[drives_table_idx].bus = bus_id;
2503
    drives_table[drives_table_idx].unit = unit_id;
2504
    drives_table[drives_table_idx].onerror = onerror;
2505
    drives_table[drives_table_idx].drive_opt_idx = arg - drives_opt;
2506
    strncpy(drives_table[drives_table_idx].serial, serial, sizeof(serial));
2507
    nb_drives++;
2508

    
2509
    switch(type) {
2510
    case IF_IDE:
2511
    case IF_SCSI:
2512
    case IF_XEN:
2513
        switch(media) {
2514
        case MEDIA_DISK:
2515
            if (cyls != 0) {
2516
                bdrv_set_geometry_hint(bdrv, cyls, heads, secs);
2517
                bdrv_set_translation_hint(bdrv, translation);
2518
            }
2519
            break;
2520
        case MEDIA_CDROM:
2521
            bdrv_set_type_hint(bdrv, BDRV_TYPE_CDROM);
2522
            break;
2523
        }
2524
        break;
2525
    case IF_SD:
2526
        /* FIXME: This isn't really a floppy, but it's a reasonable
2527
           approximation.  */
2528
    case IF_FLOPPY:
2529
        bdrv_set_type_hint(bdrv, BDRV_TYPE_FLOPPY);
2530
        break;
2531
    case IF_PFLASH:
2532
    case IF_MTD:
2533
    case IF_VIRTIO:
2534
        break;
2535
    case IF_COUNT:
2536
        abort();
2537
    }
2538
    if (!file[0])
2539
        return -2;
2540
    bdrv_flags = 0;
2541
    if (snapshot) {
2542
        bdrv_flags |= BDRV_O_SNAPSHOT;
2543
        cache = 2; /* always use write-back with snapshot */
2544
    }
2545
    if (cache == 0) /* no caching */
2546
        bdrv_flags |= BDRV_O_NOCACHE;
2547
    else if (cache == 2) /* write-back */
2548
        bdrv_flags |= BDRV_O_CACHE_WB;
2549
    else if (cache == 3) /* not specified */
2550
        bdrv_flags |= BDRV_O_CACHE_DEF;
2551
    if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0) {
2552
        fprintf(stderr, "qemu: could not open disk image %s\n",
2553
                        file);
2554
        return -1;
2555
    }
2556
    if (bdrv_key_required(bdrv))
2557
        autostart = 0;
2558
    return drives_table_idx;
2559
}
2560

    
2561
static void numa_add(const char *optarg)
2562
{
2563
    char option[128];
2564
    char *endptr;
2565
    unsigned long long value, endvalue;
2566
    int nodenr;
2567

    
2568
    optarg = get_opt_name(option, 128, optarg, ',') + 1;
2569
    if (!strcmp(option, "node")) {
2570
        if (get_param_value(option, 128, "nodeid", optarg) == 0) {
2571
            nodenr = nb_numa_nodes;
2572
        } else {
2573
            nodenr = strtoull(option, NULL, 10);
2574
        }
2575

    
2576
        if (get_param_value(option, 128, "mem", optarg) == 0) {
2577
            node_mem[nodenr] = 0;
2578
        } else {
2579
            value = strtoull(option, &endptr, 0);
2580
            switch (*endptr) {
2581
            case 0: case 'M': case 'm':
2582
                value <<= 20;
2583
                break;
2584
            case 'G': case 'g':
2585
                value <<= 30;
2586
                break;
2587
            }
2588
            node_mem[nodenr] = value;
2589
        }
2590
        if (get_param_value(option, 128, "cpus", optarg) == 0) {
2591
            node_cpumask[nodenr] = 0;
2592
        } else {
2593
            value = strtoull(option, &endptr, 10);
2594
            if (value >= 64) {
2595
                value = 63;
2596
                fprintf(stderr, "only 64 CPUs in NUMA mode supported.\n");
2597
            } else {
2598
                if (*endptr == '-') {
2599
                    endvalue = strtoull(endptr+1, &endptr, 10);
2600
                    if (endvalue >= 63) {
2601
                        endvalue = 62;
2602
                        fprintf(stderr,
2603
                            "only 63 CPUs in NUMA mode supported.\n");
2604
                    }
2605
                    value = (1 << (endvalue + 1)) - (1 << value);
2606
                } else {
2607
                    value = 1 << value;
2608
                }
2609
            }
2610
            node_cpumask[nodenr] = value;
2611
        }
2612
        nb_numa_nodes++;
2613
    }
2614
    return;
2615
}
2616

    
2617
/***********************************************************/
2618
/* USB devices */
2619

    
2620
static USBPort *used_usb_ports;
2621
static USBPort *free_usb_ports;
2622

    
2623
/* ??? Maybe change this to register a hub to keep track of the topology.  */
2624
void qemu_register_usb_port(USBPort *port, void *opaque, int index,
2625
                            usb_attachfn attach)
2626
{
2627
    port->opaque = opaque;
2628
    port->index = index;
2629
    port->attach = attach;
2630
    port->next = free_usb_ports;
2631
    free_usb_ports = port;
2632
}
2633

    
2634
int usb_device_add_dev(USBDevice *dev)
2635
{
2636
    USBPort *port;
2637

    
2638
    /* Find a USB port to add the device to.  */
2639
    port = free_usb_ports;
2640
    if (!port->next) {
2641
        USBDevice *hub;
2642

    
2643
        /* Create a new hub and chain it on.  */
2644
        free_usb_ports = NULL;
2645
        port->next = used_usb_ports;
2646
        used_usb_ports = port;
2647

    
2648
        hub = usb_hub_init(VM_USB_HUB_SIZE);
2649
        usb_attach(port, hub);
2650
        port = free_usb_ports;
2651
    }
2652

    
2653
    free_usb_ports = port->next;
2654
    port->next = used_usb_ports;
2655
    used_usb_ports = port;
2656
    usb_attach(port, dev);
2657
    return 0;
2658
}
2659

    
2660
static void usb_msd_password_cb(void *opaque, int err)
2661
{
2662
    USBDevice *dev = opaque;
2663

    
2664
    if (!err)
2665
        usb_device_add_dev(dev);
2666
    else
2667
        dev->handle_destroy(dev);
2668
}
2669

    
2670
static int usb_device_add(const char *devname, int is_hotplug)
2671
{
2672
    const char *p;
2673
    USBDevice *dev;
2674

    
2675
    if (!free_usb_ports)
2676
        return -1;
2677

    
2678
    if (strstart(devname, "host:", &p)) {
2679
        dev = usb_host_device_open(p);
2680
    } else if (!strcmp(devname, "mouse")) {
2681
        dev = usb_mouse_init();
2682
    } else if (!strcmp(devname, "tablet")) {
2683
        dev = usb_tablet_init();
2684
    } else if (!strcmp(devname, "keyboard")) {
2685
        dev = usb_keyboard_init();
2686
    } else if (strstart(devname, "disk:", &p)) {
2687
        BlockDriverState *bs;
2688

    
2689
        dev = usb_msd_init(p);
2690
        if (!dev)
2691
            return -1;
2692
        bs = usb_msd_get_bdrv(dev);
2693
        if (bdrv_key_required(bs)) {
2694
            autostart = 0;
2695
            if (is_hotplug) {
2696
                monitor_read_bdrv_key_start(cur_mon, bs, usb_msd_password_cb,
2697
                                            dev);
2698
                return 0;
2699
            }
2700
        }
2701
    } else if (!strcmp(devname, "wacom-tablet")) {
2702
        dev = usb_wacom_init();
2703
    } else if (strstart(devname, "serial:", &p)) {
2704
        dev = usb_serial_init(p);
2705
#ifdef CONFIG_BRLAPI
2706
    } else if (!strcmp(devname, "braille")) {
2707
        dev = usb_baum_init();
2708
#endif
2709
    } else if (strstart(devname, "net:", &p)) {
2710
        int nic = nb_nics;
2711

    
2712
        if (net_client_init("nic", p) < 0)
2713
            return -1;
2714
        nd_table[nic].model = "usb";
2715
        dev = usb_net_init(&nd_table[nic]);
2716
    } else if (!strcmp(devname, "bt") || strstart(devname, "bt:", &p)) {
2717
        dev = usb_bt_init(devname[2] ? hci_init(p) :
2718
                        bt_new_hci(qemu_find_bt_vlan(0)));
2719
    } else {
2720
        return -1;
2721
    }
2722
    if (!dev)
2723
        return -1;
2724

    
2725
    return usb_device_add_dev(dev);
2726
}
2727

    
2728
int usb_device_del_addr(int bus_num, int addr)
2729
{
2730
    USBPort *port;
2731
    USBPort **lastp;
2732
    USBDevice *dev;
2733

    
2734
    if (!used_usb_ports)
2735
        return -1;
2736

    
2737
    if (bus_num != 0)
2738
        return -1;
2739

    
2740
    lastp = &used_usb_ports;
2741
    port = used_usb_ports;
2742
    while (port && port->dev->addr != addr) {
2743
        lastp = &port->next;
2744
        port = port->next;
2745
    }
2746

    
2747
    if (!port)
2748
        return -1;
2749

    
2750
    dev = port->dev;
2751
    *lastp = port->next;
2752
    usb_attach(port, NULL);
2753
    dev->handle_destroy(dev);
2754
    port->next = free_usb_ports;
2755
    free_usb_ports = port;
2756
    return 0;
2757
}
2758

    
2759
static int usb_device_del(const char *devname)
2760
{
2761
    int bus_num, addr;
2762
    const char *p;
2763

    
2764
    if (strstart(devname, "host:", &p))
2765
        return usb_host_device_close(p);
2766

    
2767
    if (!used_usb_ports)
2768
        return -1;
2769

    
2770
    p = strchr(devname, '.');
2771
    if (!p)
2772
        return -1;
2773
    bus_num = strtoul(devname, NULL, 0);
2774
    addr = strtoul(p + 1, NULL, 0);
2775

    
2776
    return usb_device_del_addr(bus_num, addr);
2777
}
2778

    
2779
void do_usb_add(Monitor *mon, const char *devname)
2780
{
2781
    usb_device_add(devname, 1);
2782
}
2783

    
2784
void do_usb_del(Monitor *mon, const char *devname)
2785
{
2786
    usb_device_del(devname);
2787
}
2788

    
2789
void usb_info(Monitor *mon)
2790
{
2791
    USBDevice *dev;
2792
    USBPort *port;
2793
    const char *speed_str;
2794

    
2795
    if (!usb_enabled) {
2796
        monitor_printf(mon, "USB support not enabled\n");
2797
        return;
2798
    }
2799

    
2800
    for (port = used_usb_ports; port; port = port->next) {
2801
        dev = port->dev;
2802
        if (!dev)
2803
            continue;
2804
        switch(dev->speed) {
2805
        case USB_SPEED_LOW:
2806
            speed_str = "1.5";
2807
            break;
2808
        case USB_SPEED_FULL:
2809
            speed_str = "12";
2810
            break;
2811
        case USB_SPEED_HIGH:
2812
            speed_str = "480";
2813
            break;
2814
        default:
2815
            speed_str = "?";
2816
            break;
2817
        }
2818
        monitor_printf(mon, "  Device %d.%d, Speed %s Mb/s, Product %s\n",
2819
                       0, dev->addr, speed_str, dev->devname);
2820
    }
2821
}
2822

    
2823
/***********************************************************/
2824
/* PCMCIA/Cardbus */
2825

    
2826
static struct pcmcia_socket_entry_s {
2827
    PCMCIASocket *socket;
2828
    struct pcmcia_socket_entry_s *next;
2829
} *pcmcia_sockets = 0;
2830

    
2831
void pcmcia_socket_register(PCMCIASocket *socket)
2832
{
2833
    struct pcmcia_socket_entry_s *entry;
2834

    
2835
    entry = qemu_malloc(sizeof(struct pcmcia_socket_entry_s));
2836
    entry->socket = socket;
2837
    entry->next = pcmcia_sockets;
2838
    pcmcia_sockets = entry;
2839
}
2840

    
2841
void pcmcia_socket_unregister(PCMCIASocket *socket)
2842
{
2843
    struct pcmcia_socket_entry_s *entry, **ptr;
2844

    
2845
    ptr = &pcmcia_sockets;
2846
    for (entry = *ptr; entry; ptr = &entry->next, entry = *ptr)
2847
        if (entry->socket == socket) {
2848
            *ptr = entry->next;
2849
            qemu_free(entry);
2850
        }
2851
}
2852

    
2853
void pcmcia_info(Monitor *mon)
2854
{
2855
    struct pcmcia_socket_entry_s *iter;
2856

    
2857
    if (!pcmcia_sockets)
2858
        monitor_printf(mon, "No PCMCIA sockets\n");
2859

    
2860
    for (iter = pcmcia_sockets; iter; iter = iter->next)
2861
        monitor_printf(mon, "%s: %s\n", iter->socket->slot_string,
2862
                       iter->socket->attached ? iter->socket->card_string :
2863
                       "Empty");
2864
}
2865

    
2866
/***********************************************************/
2867
/* register display */
2868

    
2869
struct DisplayAllocator default_allocator = {
2870
    defaultallocator_create_displaysurface,
2871
    defaultallocator_resize_displaysurface,
2872
    defaultallocator_free_displaysurface
2873
};
2874

    
2875
void register_displaystate(DisplayState *ds)
2876
{
2877
    DisplayState **s;
2878
    s = &display_state;
2879
    while (*s != NULL)
2880
        s = &(*s)->next;
2881
    ds->next = NULL;
2882
    *s = ds;
2883
}
2884

    
2885
DisplayState *get_displaystate(void)
2886
{
2887
    return display_state;
2888
}
2889

    
2890
DisplayAllocator *register_displayallocator(DisplayState *ds, DisplayAllocator *da)
2891
{
2892
    if(ds->allocator ==  &default_allocator) ds->allocator = da;
2893
    return ds->allocator;
2894
}
2895

    
2896
/* dumb display */
2897

    
2898
static void dumb_display_init(void)
2899
{
2900
    DisplayState *ds = qemu_mallocz(sizeof(DisplayState));
2901
    ds->allocator = &default_allocator;
2902
    ds->surface = qemu_create_displaysurface(ds, 640, 480);
2903
    register_displaystate(ds);
2904
}
2905

    
2906
/***********************************************************/
2907
/* I/O handling */
2908

    
2909
typedef struct IOHandlerRecord {
2910
    int fd;
2911
    IOCanRWHandler *fd_read_poll;
2912
    IOHandler *fd_read;
2913
    IOHandler *fd_write;
2914
    int deleted;
2915
    void *opaque;
2916
    /* temporary data */
2917
    struct pollfd *ufd;
2918
    struct IOHandlerRecord *next;
2919
} IOHandlerRecord;
2920

    
2921
static IOHandlerRecord *first_io_handler;
2922

    
2923
/* XXX: fd_read_poll should be suppressed, but an API change is
2924
   necessary in the character devices to suppress fd_can_read(). */
2925
int qemu_set_fd_handler2(int fd,
2926
                         IOCanRWHandler *fd_read_poll,
2927
                         IOHandler *fd_read,
2928
                         IOHandler *fd_write,
2929
                         void *opaque)
2930
{
2931
    IOHandlerRecord **pioh, *ioh;
2932

    
2933
    if (!fd_read && !fd_write) {
2934
        pioh = &first_io_handler;
2935
        for(;;) {
2936
            ioh = *pioh;
2937
            if (ioh == NULL)
2938
                break;
2939
            if (ioh->fd == fd) {
2940
                ioh->deleted = 1;
2941
                break;
2942
            }
2943
            pioh = &ioh->next;
2944
        }
2945
    } else {
2946
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
2947
            if (ioh->fd == fd)
2948
                goto found;
2949
        }
2950
        ioh = qemu_mallocz(sizeof(IOHandlerRecord));
2951
        ioh->next = first_io_handler;
2952
        first_io_handler = ioh;
2953
    found:
2954
        ioh->fd = fd;
2955
        ioh->fd_read_poll = fd_read_poll;
2956
        ioh->fd_read = fd_read;
2957
        ioh->fd_write = fd_write;
2958
        ioh->opaque = opaque;
2959
        ioh->deleted = 0;
2960
    }
2961
    return 0;
2962
}
2963

    
2964
int qemu_set_fd_handler(int fd,
2965
                        IOHandler *fd_read,
2966
                        IOHandler *fd_write,
2967
                        void *opaque)
2968
{
2969
    return qemu_set_fd_handler2(fd, NULL, fd_read, fd_write, opaque);
2970
}
2971

    
2972
#ifdef _WIN32
2973
/***********************************************************/
2974
/* Polling handling */
2975

    
2976
typedef struct PollingEntry {
2977
    PollingFunc *func;
2978
    void *opaque;
2979
    struct PollingEntry *next;
2980
} PollingEntry;
2981

    
2982
static PollingEntry *first_polling_entry;
2983

    
2984
int qemu_add_polling_cb(PollingFunc *func, void *opaque)
2985
{
2986
    PollingEntry **ppe, *pe;
2987
    pe = qemu_mallocz(sizeof(PollingEntry));
2988
    pe->func = func;
2989
    pe->opaque = opaque;
2990
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next);
2991
    *ppe = pe;
2992
    return 0;
2993
}
2994

    
2995
void qemu_del_polling_cb(PollingFunc *func, void *opaque)
2996
{
2997
    PollingEntry **ppe, *pe;
2998
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next) {
2999
        pe = *ppe;
3000
        if (pe->func == func && pe->opaque == opaque) {
3001
            *ppe = pe->next;
3002
            qemu_free(pe);
3003
            break;
3004
        }
3005
    }
3006
}
3007

    
3008
/***********************************************************/
3009
/* Wait objects support */
3010
typedef struct WaitObjects {
3011
    int num;
3012
    HANDLE events[MAXIMUM_WAIT_OBJECTS + 1];
3013
    WaitObjectFunc *func[MAXIMUM_WAIT_OBJECTS + 1];
3014
    void *opaque[MAXIMUM_WAIT_OBJECTS + 1];
3015
} WaitObjects;
3016

    
3017
static WaitObjects wait_objects = {0};
3018

    
3019
int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
3020
{
3021
    WaitObjects *w = &wait_objects;
3022

    
3023
    if (w->num >= MAXIMUM_WAIT_OBJECTS)
3024
        return -1;
3025
    w->events[w->num] = handle;
3026
    w->func[w->num] = func;
3027
    w->opaque[w->num] = opaque;
3028
    w->num++;
3029
    return 0;
3030
}
3031

    
3032
void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
3033
{
3034
    int i, found;
3035
    WaitObjects *w = &wait_objects;
3036

    
3037
    found = 0;
3038
    for (i = 0; i < w->num; i++) {
3039
        if (w->events[i] == handle)
3040
            found = 1;
3041
        if (found) {
3042
            w->events[i] = w->events[i + 1];
3043
            w->func[i] = w->func[i + 1];
3044
            w->opaque[i] = w->opaque[i + 1];
3045
        }
3046
    }
3047
    if (found)
3048
        w->num--;
3049
}
3050
#endif
3051

    
3052
/***********************************************************/
3053
/* ram save/restore */
3054

    
3055
static int ram_get_page(QEMUFile *f, uint8_t *buf, int len)
3056
{
3057
    int v;
3058

    
3059
    v = qemu_get_byte(f);
3060
    switch(v) {
3061
    case 0:
3062
        if (qemu_get_buffer(f, buf, len) != len)
3063
            return -EIO;
3064
        break;
3065
    case 1:
3066
        v = qemu_get_byte(f);
3067
        memset(buf, v, len);
3068
        break;
3069
    default:
3070
        return -EINVAL;
3071
    }
3072

    
3073
    if (qemu_file_has_error(f))
3074
        return -EIO;
3075

    
3076
    return 0;
3077
}
3078

    
3079
static int ram_load_v1(QEMUFile *f, void *opaque)
3080
{
3081
    int ret;
3082
    ram_addr_t i;
3083

    
3084
    if (qemu_get_be32(f) != last_ram_offset)
3085
        return -EINVAL;
3086
    for(i = 0; i < last_ram_offset; i+= TARGET_PAGE_SIZE) {
3087
        ret = ram_get_page(f, qemu_get_ram_ptr(i), TARGET_PAGE_SIZE);
3088
        if (ret)
3089
            return ret;
3090
    }
3091
    return 0;
3092
}
3093

    
3094
#define BDRV_HASH_BLOCK_SIZE 1024
3095
#define IOBUF_SIZE 4096
3096
#define RAM_CBLOCK_MAGIC 0xfabe
3097

    
3098
typedef struct RamDecompressState {
3099
    z_stream zstream;
3100
    QEMUFile *f;
3101
    uint8_t buf[IOBUF_SIZE];
3102
} RamDecompressState;
3103

    
3104
static int ram_decompress_open(RamDecompressState *s, QEMUFile *f)
3105
{
3106
    int ret;
3107
    memset(s, 0, sizeof(*s));
3108
    s->f = f;
3109
    ret = inflateInit(&s->zstream);
3110
    if (ret != Z_OK)
3111
        return -1;
3112
    return 0;
3113
}
3114

    
3115
static int ram_decompress_buf(RamDecompressState *s, uint8_t *buf, int len)
3116
{
3117
    int ret, clen;
3118

    
3119
    s->zstream.avail_out = len;
3120
    s->zstream.next_out = buf;
3121
    while (s->zstream.avail_out > 0) {
3122
        if (s->zstream.avail_in == 0) {
3123
            if (qemu_get_be16(s->f) != RAM_CBLOCK_MAGIC)
3124
                return -1;
3125
            clen = qemu_get_be16(s->f);
3126
            if (clen > IOBUF_SIZE)
3127
                return -1;
3128
            qemu_get_buffer(s->f, s->buf, clen);
3129
            s->zstream.avail_in = clen;
3130
            s->zstream.next_in = s->buf;
3131
        }
3132
        ret = inflate(&s->zstream, Z_PARTIAL_FLUSH);
3133
        if (ret != Z_OK && ret != Z_STREAM_END) {
3134
            return -1;
3135
        }
3136
    }
3137
    return 0;
3138
}
3139

    
3140
static void ram_decompress_close(RamDecompressState *s)
3141
{
3142
    inflateEnd(&s->zstream);
3143
}
3144

    
3145
#define RAM_SAVE_FLAG_FULL        0x01
3146
#define RAM_SAVE_FLAG_COMPRESS        0x02
3147
#define RAM_SAVE_FLAG_MEM_SIZE        0x04
3148
#define RAM_SAVE_FLAG_PAGE        0x08
3149
#define RAM_SAVE_FLAG_EOS        0x10
3150

    
3151
static int is_dup_page(uint8_t *page, uint8_t ch)
3152
{
3153
    uint32_t val = ch << 24 | ch << 16 | ch << 8 | ch;
3154
    uint32_t *array = (uint32_t *)page;
3155
    int i;
3156

    
3157
    for (i = 0; i < (TARGET_PAGE_SIZE / 4); i++) {
3158
        if (array[i] != val)
3159
            return 0;
3160
    }
3161

    
3162
    return 1;
3163
}
3164

    
3165
static int ram_save_block(QEMUFile *f)
3166
{
3167
    static ram_addr_t current_addr = 0;
3168
    ram_addr_t saved_addr = current_addr;
3169
    ram_addr_t addr = 0;
3170
    int found = 0;
3171

    
3172
    while (addr < last_ram_offset) {
3173
        if (cpu_physical_memory_get_dirty(current_addr, MIGRATION_DIRTY_FLAG)) {
3174
            uint8_t *p;
3175

    
3176
            cpu_physical_memory_reset_dirty(current_addr,
3177
                                            current_addr + TARGET_PAGE_SIZE,
3178
                                            MIGRATION_DIRTY_FLAG);
3179

    
3180
            p = qemu_get_ram_ptr(current_addr);
3181

    
3182
            if (is_dup_page(p, *p)) {
3183
                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_COMPRESS);
3184
                qemu_put_byte(f, *p);
3185
            } else {
3186
                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_PAGE);
3187
                qemu_put_buffer(f, p, TARGET_PAGE_SIZE);
3188
            }
3189

    
3190
            found = 1;
3191
            break;
3192
        }
3193
        addr += TARGET_PAGE_SIZE;
3194
        current_addr = (saved_addr + addr) % last_ram_offset;
3195
    }
3196

    
3197
    return found;
3198
}
3199

    
3200
static ram_addr_t ram_save_threshold = 10;
3201
static uint64_t bytes_transferred = 0;
3202

    
3203
static ram_addr_t ram_save_remaining(void)
3204
{
3205
    ram_addr_t addr;
3206
    ram_addr_t count = 0;
3207

    
3208
    for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
3209
        if (cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
3210
            count++;
3211
    }
3212

    
3213
    return count;
3214
}
3215

    
3216
uint64_t ram_bytes_remaining(void)
3217
{
3218
    return ram_save_remaining() * TARGET_PAGE_SIZE;
3219
}
3220

    
3221
uint64_t ram_bytes_transferred(void)
3222
{
3223
    return bytes_transferred;
3224
}
3225

    
3226
uint64_t ram_bytes_total(void)
3227
{
3228
    return last_ram_offset;
3229
}
3230

    
3231
static int ram_save_live(QEMUFile *f, int stage, void *opaque)
3232
{
3233
    ram_addr_t addr;
3234

    
3235
    if (cpu_physical_sync_dirty_bitmap(0, TARGET_PHYS_ADDR_MAX) != 0) {
3236
        qemu_file_set_error(f);
3237
        return 0;
3238
    }
3239

    
3240
    if (stage == 1) {
3241
        /* Make sure all dirty bits are set */
3242
        for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
3243
            if (!cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
3244
                cpu_physical_memory_set_dirty(addr);
3245
        }
3246

    
3247
        /* Enable dirty memory tracking */
3248
        cpu_physical_memory_set_dirty_tracking(1);
3249

    
3250
        qemu_put_be64(f, last_ram_offset | RAM_SAVE_FLAG_MEM_SIZE);
3251
    }
3252

    
3253
    while (!qemu_file_rate_limit(f)) {
3254
        int ret;
3255

    
3256
        ret = ram_save_block(f);
3257
        bytes_transferred += ret * TARGET_PAGE_SIZE;
3258
        if (ret == 0) /* no more blocks */
3259
            break;
3260
    }
3261

    
3262
    /* try transferring iterative blocks of memory */
3263

    
3264
    if (stage == 3) {
3265

    
3266
        /* flush all remaining blocks regardless of rate limiting */
3267
        while (ram_save_block(f) != 0) {
3268
            bytes_transferred += TARGET_PAGE_SIZE;
3269
        }
3270
        cpu_physical_memory_set_dirty_tracking(0);
3271
    }
3272

    
3273
    qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
3274

    
3275
    return (stage == 2) && (ram_save_remaining() < ram_save_threshold);
3276
}
3277

    
3278
static int ram_load_dead(QEMUFile *f, void *opaque)
3279
{
3280
    RamDecompressState s1, *s = &s1;
3281
    uint8_t buf[10];
3282
    ram_addr_t i;
3283

    
3284
    if (ram_decompress_open(s, f) < 0)
3285
        return -EINVAL;
3286
    for(i = 0; i < last_ram_offset; i+= BDRV_HASH_BLOCK_SIZE) {
3287
        if (ram_decompress_buf(s, buf, 1) < 0) {
3288
            fprintf(stderr, "Error while reading ram block header\n");
3289
            goto error;
3290
        }
3291
        if (buf[0] == 0) {
3292
            if (ram_decompress_buf(s, qemu_get_ram_ptr(i),
3293
                                   BDRV_HASH_BLOCK_SIZE) < 0) {
3294
                fprintf(stderr, "Error while reading ram block address=0x%08" PRIx64, (uint64_t)i);
3295
                goto error;
3296
            }
3297
        } else {
3298
        error:
3299
            printf("Error block header\n");
3300
            return -EINVAL;
3301
        }
3302
    }
3303
    ram_decompress_close(s);
3304

    
3305
    return 0;
3306
}
3307

    
3308
static int ram_load(QEMUFile *f, void *opaque, int version_id)
3309
{
3310
    ram_addr_t addr;
3311
    int flags;
3312

    
3313
    if (version_id == 1)
3314
        return ram_load_v1(f, opaque);
3315

    
3316
    if (version_id == 2) {
3317
        if (qemu_get_be32(f) != last_ram_offset)
3318
            return -EINVAL;
3319
        return ram_load_dead(f, opaque);
3320
    }
3321

    
3322
    if (version_id != 3)
3323
        return -EINVAL;
3324

    
3325
    do {
3326
        addr = qemu_get_be64(f);
3327

    
3328
        flags = addr & ~TARGET_PAGE_MASK;
3329
        addr &= TARGET_PAGE_MASK;
3330

    
3331
        if (flags & RAM_SAVE_FLAG_MEM_SIZE) {
3332
            if (addr != last_ram_offset)
3333
                return -EINVAL;
3334
        }
3335

    
3336
        if (flags & RAM_SAVE_FLAG_FULL) {
3337
            if (ram_load_dead(f, opaque) < 0)
3338
                return -EINVAL;
3339
        }
3340
        
3341
        if (flags & RAM_SAVE_FLAG_COMPRESS) {
3342
            uint8_t ch = qemu_get_byte(f);
3343
            memset(qemu_get_ram_ptr(addr), ch, TARGET_PAGE_SIZE);
3344
        } else if (flags & RAM_SAVE_FLAG_PAGE)
3345
            qemu_get_buffer(f, qemu_get_ram_ptr(addr), TARGET_PAGE_SIZE);
3346
    } while (!(flags & RAM_SAVE_FLAG_EOS));
3347

    
3348
    return 0;
3349
}
3350

    
3351
void qemu_service_io(void)
3352
{
3353
    qemu_notify_event();
3354
}
3355

    
3356
/***********************************************************/
3357
/* bottom halves (can be seen as timers which expire ASAP) */
3358

    
3359
struct QEMUBH {
3360
    QEMUBHFunc *cb;
3361
    void *opaque;
3362
    int scheduled;
3363
    int idle;
3364
    int deleted;
3365
    QEMUBH *next;
3366
};
3367

    
3368
static QEMUBH *first_bh = NULL;
3369

    
3370
QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque)
3371
{
3372
    QEMUBH *bh;
3373
    bh = qemu_mallocz(sizeof(QEMUBH));
3374
    bh->cb = cb;
3375
    bh->opaque = opaque;
3376
    bh->next = first_bh;
3377
    first_bh = bh;
3378
    return bh;
3379
}
3380

    
3381
int qemu_bh_poll(void)
3382
{
3383
    QEMUBH *bh, **bhp;
3384
    int ret;
3385

    
3386
    ret = 0;
3387
    for (bh = first_bh; bh; bh = bh->next) {
3388
        if (!bh->deleted && bh->scheduled) {
3389
            bh->scheduled = 0;
3390
            if (!bh->idle)
3391
                ret = 1;
3392
            bh->idle = 0;
3393
            bh->cb(bh->opaque);
3394
        }
3395
    }
3396

    
3397
    /* remove deleted bhs */
3398
    bhp = &first_bh;
3399
    while (*bhp) {
3400
        bh = *bhp;
3401
        if (bh->deleted) {
3402
            *bhp = bh->next;
3403
            qemu_free(bh);
3404
        } else
3405
            bhp = &bh->next;
3406
    }
3407

    
3408
    return ret;
3409
}
3410

    
3411
void qemu_bh_schedule_idle(QEMUBH *bh)
3412
{
3413
    if (bh->scheduled)
3414
        return;
3415
    bh->scheduled = 1;
3416
    bh->idle = 1;
3417
}
3418

    
3419
void qemu_bh_schedule(QEMUBH *bh)
3420
{
3421
    if (bh->scheduled)
3422
        return;
3423
    bh->scheduled = 1;
3424
    bh->idle = 0;
3425
    /* stop the currently executing CPU to execute the BH ASAP */
3426
    qemu_notify_event();
3427
}
3428

    
3429
void qemu_bh_cancel(QEMUBH *bh)
3430
{
3431
    bh->scheduled = 0;
3432
}
3433

    
3434
void qemu_bh_delete(QEMUBH *bh)
3435
{
3436
    bh->scheduled = 0;
3437
    bh->deleted = 1;
3438
}
3439

    
3440
static void qemu_bh_update_timeout(int *timeout)
3441
{
3442
    QEMUBH *bh;
3443

    
3444
    for (bh = first_bh; bh; bh = bh->next) {
3445
        if (!bh->deleted && bh->scheduled) {
3446
            if (bh->idle) {
3447
                /* idle bottom halves will be polled at least
3448
                 * every 10ms */
3449
                *timeout = MIN(10, *timeout);
3450
            } else {
3451
                /* non-idle bottom halves will be executed
3452
                 * immediately */
3453
                *timeout = 0;
3454
                break;
3455
            }
3456
        }
3457
    }
3458
}
3459

    
3460
/***********************************************************/
3461
/* machine registration */
3462

    
3463
static QEMUMachine *first_machine = NULL;
3464
QEMUMachine *current_machine = NULL;
3465

    
3466
int qemu_register_machine(QEMUMachine *m)
3467
{
3468
    QEMUMachine **pm;
3469
    pm = &first_machine;
3470
    while (*pm != NULL)
3471
        pm = &(*pm)->next;
3472
    m->next = NULL;
3473
    *pm = m;
3474
    return 0;
3475
}
3476

    
3477
static QEMUMachine *find_machine(const char *name)
3478
{
3479
    QEMUMachine *m;
3480

    
3481
    for(m = first_machine; m != NULL; m = m->next) {
3482
        if (!strcmp(m->name, name))
3483
            return m;
3484
    }
3485
    return NULL;
3486
}
3487

    
3488
static QEMUMachine *find_default_machine(void)
3489
{
3490
    QEMUMachine *m;
3491

    
3492
    for(m = first_machine; m != NULL; m = m->next) {
3493
        if (m->is_default) {
3494
            return m;
3495
        }
3496
    }
3497
    return NULL;
3498
}
3499

    
3500
/***********************************************************/
3501
/* main execution loop */
3502

    
3503
static void gui_update(void *opaque)
3504
{
3505
    uint64_t interval = GUI_REFRESH_INTERVAL;
3506
    DisplayState *ds = opaque;
3507
    DisplayChangeListener *dcl = ds->listeners;
3508

    
3509
    dpy_refresh(ds);
3510

    
3511
    while (dcl != NULL) {
3512
        if (dcl->gui_timer_interval &&
3513
            dcl->gui_timer_interval < interval)
3514
            interval = dcl->gui_timer_interval;
3515
        dcl = dcl->next;
3516
    }
3517
    qemu_mod_timer(ds->gui_timer, interval + qemu_get_clock(rt_clock));
3518
}
3519

    
3520
static void nographic_update(void *opaque)
3521
{
3522
    uint64_t interval = GUI_REFRESH_INTERVAL;
3523

    
3524
    qemu_mod_timer(nographic_timer, interval + qemu_get_clock(rt_clock));
3525
}
3526

    
3527
struct vm_change_state_entry {
3528
    VMChangeStateHandler *cb;
3529
    void *opaque;
3530
    LIST_ENTRY (vm_change_state_entry) entries;
3531
};
3532

    
3533
static LIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head;
3534

    
3535
VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
3536
                                                     void *opaque)
3537
{
3538
    VMChangeStateEntry *e;
3539

    
3540
    e = qemu_mallocz(sizeof (*e));
3541

    
3542
    e->cb = cb;
3543
    e->opaque = opaque;
3544
    LIST_INSERT_HEAD(&vm_change_state_head, e, entries);
3545
    return e;
3546
}
3547

    
3548
void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
3549
{
3550
    LIST_REMOVE (e, entries);
3551
    qemu_free (e);
3552
}
3553

    
3554
static void vm_state_notify(int running, int reason)
3555
{
3556
    VMChangeStateEntry *e;
3557

    
3558
    for (e = vm_change_state_head.lh_first; e; e = e->entries.le_next) {
3559
        e->cb(e->opaque, running, reason);
3560
    }
3561
}
3562

    
3563
static void resume_all_vcpus(void);
3564
static void pause_all_vcpus(void);
3565

    
3566
void vm_start(void)
3567
{
3568
    if (!vm_running) {
3569
        cpu_enable_ticks();
3570
        vm_running = 1;
3571
        vm_state_notify(1, 0);
3572
        qemu_rearm_alarm_timer(alarm_timer);
3573
        resume_all_vcpus();
3574
    }
3575
}
3576

    
3577
/* reset/shutdown handler */
3578

    
3579
typedef struct QEMUResetEntry {
3580
    QEMUResetHandler *func;
3581
    void *opaque;
3582
    int order;
3583
    struct QEMUResetEntry *next;
3584
} QEMUResetEntry;
3585

    
3586
static QEMUResetEntry *first_reset_entry;
3587
static int reset_requested;
3588
static int shutdown_requested;
3589
static int powerdown_requested;
3590
static int debug_requested;
3591
static int vmstop_requested;
3592

    
3593
int qemu_shutdown_requested(void)
3594
{
3595
    int r = shutdown_requested;
3596
    shutdown_requested = 0;
3597
    return r;
3598
}
3599

    
3600
int qemu_reset_requested(void)
3601
{
3602
    int r = reset_requested;
3603
    reset_requested = 0;
3604
    return r;
3605
}
3606

    
3607
int qemu_powerdown_requested(void)
3608
{
3609
    int r = powerdown_requested;
3610
    powerdown_requested = 0;
3611
    return r;
3612
}
3613

    
3614
static int qemu_debug_requested(void)
3615
{
3616
    int r = debug_requested;
3617
    debug_requested = 0;
3618
    return r;
3619
}
3620

    
3621
static int qemu_vmstop_requested(void)
3622
{
3623
    int r = vmstop_requested;
3624
    vmstop_requested = 0;
3625
    return r;
3626
}
3627

    
3628
static void do_vm_stop(int reason)
3629
{
3630
    if (vm_running) {
3631
        cpu_disable_ticks();
3632
        vm_running = 0;
3633
        pause_all_vcpus();
3634
        vm_state_notify(0, reason);
3635
    }
3636
}
3637

    
3638
void qemu_register_reset(QEMUResetHandler *func, int order, void *opaque)
3639
{
3640
    QEMUResetEntry **pre, *re;
3641

    
3642
    pre = &first_reset_entry;
3643
    while (*pre != NULL && (*pre)->order >= order) {
3644
        pre = &(*pre)->next;
3645
    }
3646
    re = qemu_mallocz(sizeof(QEMUResetEntry));
3647
    re->func = func;
3648
    re->opaque = opaque;
3649
    re->order = order;
3650
    re->next = NULL;
3651
    *pre = re;
3652
}
3653

    
3654
void qemu_system_reset(void)
3655
{
3656
    QEMUResetEntry *re;
3657

    
3658
    /* reset all devices */
3659
    for(re = first_reset_entry; re != NULL; re = re->next) {
3660
        re->func(re->opaque);
3661
    }
3662
}
3663

    
3664
void qemu_system_reset_request(void)
3665
{
3666
    if (no_reboot) {
3667
        shutdown_requested = 1;
3668
    } else {
3669
        reset_requested = 1;
3670
    }
3671
    qemu_notify_event();
3672
}
3673

    
3674
void qemu_system_shutdown_request(void)
3675
{
3676
    shutdown_requested = 1;
3677
    qemu_notify_event();
3678
}
3679

    
3680
void qemu_system_powerdown_request(void)
3681
{
3682
    powerdown_requested = 1;
3683
    qemu_notify_event();
3684
}
3685

    
3686
#ifdef CONFIG_IOTHREAD
3687
static void qemu_system_vmstop_request(int reason)
3688
{
3689
    vmstop_requested = reason;
3690
    qemu_notify_event();
3691
}
3692
#endif
3693

    
3694
#ifndef _WIN32
3695
static int io_thread_fd = -1;
3696

    
3697
static void qemu_event_increment(void)
3698
{
3699
    static const char byte = 0;
3700

    
3701
    if (io_thread_fd == -1)
3702
        return;
3703

    
3704
    write(io_thread_fd, &byte, sizeof(byte));
3705
}
3706

    
3707
static void qemu_event_read(void *opaque)
3708
{
3709
    int fd = (unsigned long)opaque;
3710
    ssize_t len;
3711

    
3712
    /* Drain the notify pipe */
3713
    do {
3714
        char buffer[512];
3715
        len = read(fd, buffer, sizeof(buffer));
3716
    } while ((len == -1 && errno == EINTR) || len > 0);
3717
}
3718

    
3719
static int qemu_event_init(void)
3720
{
3721
    int err;
3722
    int fds[2];
3723

    
3724
    err = pipe(fds);
3725
    if (err == -1)
3726
        return -errno;
3727

    
3728
    err = fcntl_setfl(fds[0], O_NONBLOCK);
3729
    if (err < 0)
3730
        goto fail;
3731

    
3732
    err = fcntl_setfl(fds[1], O_NONBLOCK);
3733
    if (err < 0)
3734
        goto fail;
3735

    
3736
    qemu_set_fd_handler2(fds[0], NULL, qemu_event_read, NULL,
3737
                         (void *)(unsigned long)fds[0]);
3738

    
3739
    io_thread_fd = fds[1];
3740
    return 0;
3741

    
3742
fail:
3743
    close(fds[0]);
3744
    close(fds[1]);
3745
    return err;
3746
}
3747
#else
3748
HANDLE qemu_event_handle;
3749

    
3750
static void dummy_event_handler(void *opaque)
3751
{
3752
}
3753

    
3754
static int qemu_event_init(void)
3755
{
3756
    qemu_event_handle = CreateEvent(NULL, FALSE, FALSE, NULL);
3757
    if (!qemu_event_handle) {
3758
        perror("Failed CreateEvent");
3759
        return -1;
3760
    }
3761
    qemu_add_wait_object(qemu_event_handle, dummy_event_handler, NULL);
3762
    return 0;
3763
}
3764

    
3765
static void qemu_event_increment(void)
3766
{
3767
    SetEvent(qemu_event_handle);
3768
}
3769
#endif
3770

    
3771
static int cpu_can_run(CPUState *env)
3772
{
3773
    if (env->stop)
3774
        return 0;
3775
    if (env->stopped)
3776
        return 0;
3777
    return 1;
3778
}
3779

    
3780
#ifndef CONFIG_IOTHREAD
3781
static int qemu_init_main_loop(void)
3782
{
3783
    return qemu_event_init();
3784
}
3785

    
3786
void qemu_init_vcpu(void *_env)
3787
{
3788
    CPUState *env = _env;
3789

    
3790
    if (kvm_enabled())
3791
        kvm_init_vcpu(env);
3792
    return;
3793
}
3794

    
3795
int qemu_cpu_self(void *env)
3796
{
3797
    return 1;
3798
}
3799

    
3800
static void resume_all_vcpus(void)
3801
{
3802
}
3803

    
3804
static void pause_all_vcpus(void)
3805
{
3806
}
3807

    
3808
void qemu_cpu_kick(void *env)
3809
{
3810
    return;
3811
}
3812

    
3813
void qemu_notify_event(void)
3814
{
3815
    CPUState *env = cpu_single_env;
3816

    
3817
    if (env) {
3818
        cpu_exit(env);
3819
#ifdef USE_KQEMU
3820
        if (env->kqemu_enabled)
3821
            kqemu_cpu_interrupt(env);
3822
#endif
3823
     }
3824
}
3825

    
3826
#define qemu_mutex_lock_iothread() do { } while (0)
3827
#define qemu_mutex_unlock_iothread() do { } while (0)
3828

    
3829
void vm_stop(int reason)
3830
{
3831
    do_vm_stop(reason);
3832
}
3833

    
3834
#else /* CONFIG_IOTHREAD */
3835

    
3836
#include "qemu-thread.h"
3837

    
3838
QemuMutex qemu_global_mutex;
3839
static QemuMutex qemu_fair_mutex;
3840

    
3841
static QemuThread io_thread;
3842

    
3843
static QemuThread *tcg_cpu_thread;
3844
static QemuCond *tcg_halt_cond;
3845

    
3846
static int qemu_system_ready;
3847
/* cpu creation */
3848
static QemuCond qemu_cpu_cond;
3849
/* system init */
3850
static QemuCond qemu_system_cond;
3851
static QemuCond qemu_pause_cond;
3852

    
3853
static void block_io_signals(void);
3854
static void unblock_io_signals(void);
3855
static int tcg_has_work(void);
3856

    
3857
static int qemu_init_main_loop(void)
3858
{
3859
    int ret;
3860

    
3861
    ret = qemu_event_init();
3862
    if (ret)
3863
        return ret;
3864

    
3865
    qemu_cond_init(&qemu_pause_cond);
3866
    qemu_mutex_init(&qemu_fair_mutex);
3867
    qemu_mutex_init(&qemu_global_mutex);
3868
    qemu_mutex_lock(&qemu_global_mutex);
3869

    
3870
    unblock_io_signals();
3871
    qemu_thread_self(&io_thread);
3872

    
3873
    return 0;
3874
}
3875

    
3876
static void qemu_wait_io_event(CPUState *env)
3877
{
3878
    while (!tcg_has_work())
3879
        qemu_cond_timedwait(env->halt_cond, &qemu_global_mutex, 1000);
3880

    
3881
    qemu_mutex_unlock(&qemu_global_mutex);
3882

    
3883
    /*
3884
     * Users of qemu_global_mutex can be starved, having no chance
3885
     * to acquire it since this path will get to it first.
3886
     * So use another lock to provide fairness.
3887
     */
3888
    qemu_mutex_lock(&qemu_fair_mutex);
3889
    qemu_mutex_unlock(&qemu_fair_mutex);
3890

    
3891
    qemu_mutex_lock(&qemu_global_mutex);
3892
    if (env->stop) {
3893
        env->stop = 0;
3894
        env->stopped = 1;
3895
        qemu_cond_signal(&qemu_pause_cond);
3896
    }
3897
}
3898

    
3899
static int qemu_cpu_exec(CPUState *env);
3900

    
3901
static void *kvm_cpu_thread_fn(void *arg)
3902
{
3903
    CPUState *env = arg;
3904

    
3905
    block_io_signals();
3906
    qemu_thread_self(env->thread);
3907

    
3908
    /* signal CPU creation */
3909
    qemu_mutex_lock(&qemu_global_mutex);
3910
    env->created = 1;
3911
    qemu_cond_signal(&qemu_cpu_cond);
3912

    
3913
    /* and wait for machine initialization */
3914
    while (!qemu_system_ready)
3915
        qemu_cond_timedwait(&qemu_system_cond, &qemu_global_mutex, 100);
3916

    
3917
    while (1) {
3918
        if (cpu_can_run(env))
3919
            qemu_cpu_exec(env);
3920
        qemu_wait_io_event(env);
3921
    }
3922

    
3923
    return NULL;
3924
}
3925

    
3926
static void tcg_cpu_exec(void);
3927

    
3928
static void *tcg_cpu_thread_fn(void *arg)
3929
{
3930
    CPUState *env = arg;
3931

    
3932
    block_io_signals();
3933
    qemu_thread_self(env->thread);
3934

    
3935
    /* signal CPU creation */
3936
    qemu_mutex_lock(&qemu_global_mutex);
3937
    for (env = first_cpu; env != NULL; env = env->next_cpu)
3938
        env->created = 1;
3939
    qemu_cond_signal(&qemu_cpu_cond);
3940

    
3941
    /* and wait for machine initialization */
3942
    while (!qemu_system_ready)
3943
        qemu_cond_timedwait(&qemu_system_cond, &qemu_global_mutex, 100);
3944

    
3945
    while (1) {
3946
        tcg_cpu_exec();
3947
        qemu_wait_io_event(cur_cpu);
3948
    }
3949

    
3950
    return NULL;
3951
}
3952

    
3953
void qemu_cpu_kick(void *_env)
3954
{
3955
    CPUState *env = _env;
3956
    qemu_cond_broadcast(env->halt_cond);
3957
    if (kvm_enabled())
3958
        qemu_thread_signal(env->thread, SIGUSR1);
3959
}
3960

    
3961
int qemu_cpu_self(void *env)
3962
{
3963
    return (cpu_single_env != NULL);
3964
}
3965

    
3966
static void cpu_signal(int sig)
3967
{
3968
    if (cpu_single_env)
3969
        cpu_exit(cpu_single_env);
3970
}
3971

    
3972
static void block_io_signals(void)
3973
{
3974
    sigset_t set;
3975
    struct sigaction sigact;
3976

    
3977
    sigemptyset(&set);
3978
    sigaddset(&set, SIGUSR2);
3979
    sigaddset(&set, SIGIO);
3980
    sigaddset(&set, SIGALRM);
3981
    pthread_sigmask(SIG_BLOCK, &set, NULL);
3982

    
3983
    sigemptyset(&set);
3984
    sigaddset(&set, SIGUSR1);
3985
    pthread_sigmask(SIG_UNBLOCK, &set, NULL);
3986

    
3987
    memset(&sigact, 0, sizeof(sigact));
3988
    sigact.sa_handler = cpu_signal;
3989
    sigaction(SIGUSR1, &sigact, NULL);
3990
}
3991

    
3992
static void unblock_io_signals(void)
3993
{
3994
    sigset_t set;
3995

    
3996
    sigemptyset(&set);
3997
    sigaddset(&set, SIGUSR2);
3998
    sigaddset(&set, SIGIO);
3999
    sigaddset(&set, SIGALRM);
4000
    pthread_sigmask(SIG_UNBLOCK, &set, NULL);
4001

    
4002
    sigemptyset(&set);
4003
    sigaddset(&set, SIGUSR1);
4004
    pthread_sigmask(SIG_BLOCK, &set, NULL);
4005
}
4006

    
4007
static void qemu_signal_lock(unsigned int msecs)
4008
{
4009
    qemu_mutex_lock(&qemu_fair_mutex);
4010

    
4011
    while (qemu_mutex_trylock(&qemu_global_mutex)) {
4012
        qemu_thread_signal(tcg_cpu_thread, SIGUSR1);
4013
        if (!qemu_mutex_timedlock(&qemu_global_mutex, msecs))
4014
            break;
4015
    }
4016
    qemu_mutex_unlock(&qemu_fair_mutex);
4017
}
4018

    
4019
static void qemu_mutex_lock_iothread(void)
4020
{
4021
    if (kvm_enabled()) {
4022
        qemu_mutex_lock(&qemu_fair_mutex);
4023
        qemu_mutex_lock(&qemu_global_mutex);
4024
        qemu_mutex_unlock(&qemu_fair_mutex);
4025
    } else
4026
        qemu_signal_lock(100);
4027
}
4028

    
4029
static void qemu_mutex_unlock_iothread(void)
4030
{
4031
    qemu_mutex_unlock(&qemu_global_mutex);
4032
}
4033

    
4034
static int all_vcpus_paused(void)
4035
{
4036
    CPUState *penv = first_cpu;
4037

    
4038
    while (penv) {
4039
        if (!penv->stopped)
4040
            return 0;
4041
        penv = (CPUState *)penv->next_cpu;
4042
    }
4043

    
4044
    return 1;
4045
}
4046

    
4047
static void pause_all_vcpus(void)
4048
{
4049
    CPUState *penv = first_cpu;
4050

    
4051
    while (penv) {
4052
        penv->stop = 1;
4053
        qemu_thread_signal(penv->thread, SIGUSR1);
4054
        qemu_cpu_kick(penv);
4055
        penv = (CPUState *)penv->next_cpu;
4056
    }
4057

    
4058
    while (!all_vcpus_paused()) {
4059
        qemu_cond_timedwait(&qemu_pause_cond, &qemu_global_mutex, 100);
4060
        penv = first_cpu;
4061
        while (penv) {
4062
            qemu_thread_signal(penv->thread, SIGUSR1);
4063
            penv = (CPUState *)penv->next_cpu;
4064
        }
4065
    }
4066
}
4067

    
4068
static void resume_all_vcpus(void)
4069
{
4070
    CPUState *penv = first_cpu;
4071

    
4072
    while (penv) {
4073
        penv->stop = 0;
4074
        penv->stopped = 0;
4075
        qemu_thread_signal(penv->thread, SIGUSR1);
4076
        qemu_cpu_kick(penv);
4077
        penv = (CPUState *)penv->next_cpu;
4078
    }
4079
}
4080

    
4081
static void tcg_init_vcpu(void *_env)
4082
{
4083
    CPUState *env = _env;
4084
    /* share a single thread for all cpus with TCG */
4085
    if (!tcg_cpu_thread) {
4086
        env->thread = qemu_mallocz(sizeof(QemuThread));
4087
        env->halt_cond = qemu_mallocz(sizeof(QemuCond));
4088
        qemu_cond_init(env->halt_cond);
4089
        qemu_thread_create(env->thread, tcg_cpu_thread_fn, env);
4090
        while (env->created == 0)
4091
            qemu_cond_timedwait(&qemu_cpu_cond, &qemu_global_mutex, 100);
4092
        tcg_cpu_thread = env->thread;
4093
        tcg_halt_cond = env->halt_cond;
4094
    } else {
4095
        env->thread = tcg_cpu_thread;
4096
        env->halt_cond = tcg_halt_cond;
4097
    }
4098
}
4099

    
4100
static void kvm_start_vcpu(CPUState *env)
4101
{
4102
    kvm_init_vcpu(env);
4103
    env->thread = qemu_mallocz(sizeof(QemuThread));
4104
    env->halt_cond = qemu_mallocz(sizeof(QemuCond));
4105
    qemu_cond_init(env->halt_cond);
4106
    qemu_thread_create(env->thread, kvm_cpu_thread_fn, env);
4107
    while (env->created == 0)
4108
        qemu_cond_timedwait(&qemu_cpu_cond, &qemu_global_mutex, 100);
4109
}
4110

    
4111
void qemu_init_vcpu(void *_env)
4112
{
4113
    CPUState *env = _env;
4114

    
4115
    if (kvm_enabled())
4116
        kvm_start_vcpu(env);
4117
    else
4118
        tcg_init_vcpu(env);
4119
}
4120

    
4121
void qemu_notify_event(void)
4122
{
4123
    qemu_event_increment();
4124
}
4125

    
4126
void vm_stop(int reason)
4127
{
4128
    QemuThread me;
4129
    qemu_thread_self(&me);
4130

    
4131
    if (!qemu_thread_equal(&me, &io_thread)) {
4132
        qemu_system_vmstop_request(reason);
4133
        /*
4134
         * FIXME: should not return to device code in case
4135
         * vm_stop() has been requested.
4136
         */
4137
        if (cpu_single_env) {
4138
            cpu_exit(cpu_single_env);
4139
            cpu_single_env->stop = 1;
4140
        }
4141
        return;
4142
    }
4143
    do_vm_stop(reason);
4144
}
4145

    
4146
#endif
4147

    
4148

    
4149
#ifdef _WIN32
4150
static void host_main_loop_wait(int *timeout)
4151
{
4152
    int ret, ret2, i;
4153
    PollingEntry *pe;
4154

    
4155

    
4156
    /* XXX: need to suppress polling by better using win32 events */
4157
    ret = 0;
4158
    for(pe = first_polling_entry; pe != NULL; pe = pe->next) {
4159
        ret |= pe->func(pe->opaque);
4160
    }
4161
    if (ret == 0) {
4162
        int err;
4163
        WaitObjects *w = &wait_objects;
4164

    
4165
        ret = WaitForMultipleObjects(w->num, w->events, FALSE, *timeout);
4166
        if (WAIT_OBJECT_0 + 0 <= ret && ret <= WAIT_OBJECT_0 + w->num - 1) {
4167
            if (w->func[ret - WAIT_OBJECT_0])
4168
                w->func[ret - WAIT_OBJECT_0](w->opaque[ret - WAIT_OBJECT_0]);
4169

    
4170
            /* Check for additional signaled events */
4171
            for(i = (ret - WAIT_OBJECT_0 + 1); i < w->num; i++) {
4172

    
4173
                /* Check if event is signaled */
4174
                ret2 = WaitForSingleObject(w->events[i], 0);
4175
                if(ret2 == WAIT_OBJECT_0) {
4176
                    if (w->func[i])
4177
                        w->func[i](w->opaque[i]);
4178
                } else if (ret2 == WAIT_TIMEOUT) {
4179
                } else {
4180
                    err = GetLastError();
4181
                    fprintf(stderr, "WaitForSingleObject error %d %d\n", i, err);
4182
                }
4183
            }
4184
        } else if (ret == WAIT_TIMEOUT) {
4185
        } else {
4186
            err = GetLastError();
4187
            fprintf(stderr, "WaitForMultipleObjects error %d %d\n", ret, err);
4188
        }
4189
    }
4190

    
4191
    *timeout = 0;
4192
}
4193
#else
4194
static void host_main_loop_wait(int *timeout)
4195
{
4196
}
4197
#endif
4198

    
4199
void main_loop_wait(int timeout)
4200
{
4201
    IOHandlerRecord *ioh;
4202
    fd_set rfds, wfds, xfds;
4203
    int ret, nfds;
4204
    struct timeval tv;
4205

    
4206
    qemu_bh_update_timeout(&timeout);
4207

    
4208
    host_main_loop_wait(&timeout);
4209

    
4210
    /* poll any events */
4211
    /* XXX: separate device handlers from system ones */
4212
    nfds = -1;
4213
    FD_ZERO(&rfds);
4214
    FD_ZERO(&wfds);
4215
    FD_ZERO(&xfds);
4216
    for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
4217
        if (ioh->deleted)
4218
            continue;
4219
        if (ioh->fd_read &&
4220
            (!ioh->fd_read_poll ||
4221
             ioh->fd_read_poll(ioh->opaque) != 0)) {
4222
            FD_SET(ioh->fd, &rfds);
4223
            if (ioh->fd > nfds)
4224
                nfds = ioh->fd;
4225
        }
4226
        if (ioh->fd_write) {
4227
            FD_SET(ioh->fd, &wfds);
4228
            if (ioh->fd > nfds)
4229
                nfds = ioh->fd;
4230
        }
4231
    }
4232

    
4233
    tv.tv_sec = timeout / 1000;
4234
    tv.tv_usec = (timeout % 1000) * 1000;
4235

    
4236
#if defined(CONFIG_SLIRP)
4237
    if (slirp_is_inited()) {
4238
        slirp_select_fill(&nfds, &rfds, &wfds, &xfds);
4239
    }
4240
#endif
4241
    qemu_mutex_unlock_iothread();
4242
    ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv);
4243
    qemu_mutex_lock_iothread();
4244
    if (ret > 0) {
4245
        IOHandlerRecord **pioh;
4246

    
4247
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
4248
            if (!ioh->deleted && ioh->fd_read && FD_ISSET(ioh->fd, &rfds)) {
4249
                ioh->fd_read(ioh->opaque);
4250
            }
4251
            if (!ioh->deleted && ioh->fd_write && FD_ISSET(ioh->fd, &wfds)) {
4252
                ioh->fd_write(ioh->opaque);
4253
            }
4254
        }
4255

    
4256
        /* remove deleted IO handlers */
4257
        pioh = &first_io_handler;
4258
        while (*pioh) {
4259
            ioh = *pioh;
4260
            if (ioh->deleted) {
4261
                *pioh = ioh->next;
4262
                qemu_free(ioh);
4263
            } else
4264
                pioh = &ioh->next;
4265
        }
4266
    }
4267
#if defined(CONFIG_SLIRP)
4268
    if (slirp_is_inited()) {
4269
        if (ret < 0) {
4270
            FD_ZERO(&rfds);
4271
            FD_ZERO(&wfds);
4272
            FD_ZERO(&xfds);
4273
        }
4274
        slirp_select_poll(&rfds, &wfds, &xfds);
4275
    }
4276
#endif
4277

    
4278
    /* rearm timer, if not periodic */
4279
    if (alarm_timer->flags & ALARM_FLAG_EXPIRED) {
4280
        alarm_timer->flags &= ~ALARM_FLAG_EXPIRED;
4281
        qemu_rearm_alarm_timer(alarm_timer);
4282
    }
4283

    
4284
    /* vm time timers */
4285
    if (vm_running) {
4286
        if (!cur_cpu || likely(!(cur_cpu->singlestep_enabled & SSTEP_NOTIMER)))
4287
            qemu_run_timers(&active_timers[QEMU_TIMER_VIRTUAL],
4288
                qemu_get_clock(vm_clock));
4289
    }
4290

    
4291
    /* real time timers */
4292
    qemu_run_timers(&active_timers[QEMU_TIMER_REALTIME],
4293
                    qemu_get_clock(rt_clock));
4294

    
4295
    /* Check bottom-halves last in case any of the earlier events triggered
4296
       them.  */
4297
    qemu_bh_poll();
4298

    
4299
}
4300

    
4301
static int qemu_cpu_exec(CPUState *env)
4302
{
4303
    int ret;
4304
#ifdef CONFIG_PROFILER
4305
    int64_t ti;
4306
#endif
4307

    
4308
#ifdef CONFIG_PROFILER
4309
    ti = profile_getclock();
4310
#endif
4311
    if (use_icount) {
4312
        int64_t count;
4313
        int decr;
4314
        qemu_icount -= (env->icount_decr.u16.low + env->icount_extra);
4315
        env->icount_decr.u16.low = 0;
4316
        env->icount_extra = 0;
4317
        count = qemu_next_deadline();
4318
        count = (count + (1 << icount_time_shift) - 1)
4319
                >> icount_time_shift;
4320
        qemu_icount += count;
4321
        decr = (count > 0xffff) ? 0xffff : count;
4322
        count -= decr;
4323
        env->icount_decr.u16.low = decr;
4324
        env->icount_extra = count;
4325
    }
4326
    ret = cpu_exec(env);
4327
#ifdef CONFIG_PROFILER
4328
    qemu_time += profile_getclock() - ti;
4329
#endif
4330
    if (use_icount) {
4331
        /* Fold pending instructions back into the
4332
           instruction counter, and clear the interrupt flag.  */
4333
        qemu_icount -= (env->icount_decr.u16.low
4334
                        + env->icount_extra);
4335
        env->icount_decr.u32 = 0;
4336
        env->icount_extra = 0;
4337
    }
4338
    return ret;
4339
}
4340

    
4341
static void tcg_cpu_exec(void)
4342
{
4343
    int ret = 0;
4344

    
4345
    if (next_cpu == NULL)
4346
        next_cpu = first_cpu;
4347
    for (; next_cpu != NULL; next_cpu = next_cpu->next_cpu) {
4348
        CPUState *env = cur_cpu = next_cpu;
4349

    
4350
        if (!vm_running)
4351
            break;
4352
        if (timer_alarm_pending) {
4353
            timer_alarm_pending = 0;
4354
            break;
4355
        }
4356
        if (cpu_can_run(env))
4357
            ret = qemu_cpu_exec(env);
4358
        if (ret == EXCP_DEBUG) {
4359
            gdb_set_stop_cpu(env);
4360
            debug_requested = 1;
4361
            break;
4362
        }
4363
    }
4364
}
4365

    
4366
static int cpu_has_work(CPUState *env)
4367
{
4368
    if (env->stop)
4369
        return 1;
4370
    if (env->stopped)
4371
        return 0;
4372
    if (!env->halted)
4373
        return 1;
4374
    if (qemu_cpu_has_work(env))
4375
        return 1;
4376
    return 0;
4377
}
4378

    
4379
static int tcg_has_work(void)
4380
{
4381
    CPUState *env;
4382

    
4383
    for (env = first_cpu; env != NULL; env = env->next_cpu)
4384
        if (cpu_has_work(env))
4385
            return 1;
4386
    return 0;
4387
}
4388

    
4389
static int qemu_calculate_timeout(void)
4390
{
4391
#ifndef CONFIG_IOTHREAD
4392
    int timeout;
4393

    
4394
    if (!vm_running)
4395
        timeout = 5000;
4396
    else if (tcg_has_work())
4397
        timeout = 0;
4398
    else if (!use_icount)
4399
        timeout = 5000;
4400
    else {
4401
     /* XXX: use timeout computed from timers */
4402
        int64_t add;
4403
        int64_t delta;
4404
        /* Advance virtual time to the next event.  */
4405
        if (use_icount == 1) {
4406
            /* When not using an adaptive execution frequency
4407
               we tend to get badly out of sync with real time,
4408
               so just delay for a reasonable amount of time.  */
4409
            delta = 0;
4410
        } else {
4411
            delta = cpu_get_icount() - cpu_get_clock();
4412
        }
4413
        if (delta > 0) {
4414
            /* If virtual time is ahead of real time then just
4415
               wait for IO.  */
4416
            timeout = (delta / 1000000) + 1;
4417
        } else {
4418
            /* Wait for either IO to occur or the next
4419
               timer event.  */
4420
            add = qemu_next_deadline();
4421
            /* We advance the timer before checking for IO.
4422
               Limit the amount we advance so that early IO
4423
               activity won't get the guest too far ahead.  */
4424
            if (add > 10000000)
4425
                add = 10000000;
4426
            delta += add;
4427
            add = (add + (1 << icount_time_shift) - 1)
4428
                  >> icount_time_shift;
4429
            qemu_icount += add;
4430
            timeout = delta / 1000000;
4431
            if (timeout < 0)
4432
                timeout = 0;
4433
        }
4434
    }
4435

    
4436
    return timeout;
4437
#else /* CONFIG_IOTHREAD */
4438
    return 1000;
4439
#endif
4440
}
4441

    
4442
static int vm_can_run(void)
4443
{
4444
    if (powerdown_requested)
4445
        return 0;
4446
    if (reset_requested)
4447
        return 0;
4448
    if (shutdown_requested)
4449
        return 0;
4450
    if (debug_requested)
4451
        return 0;
4452
    return 1;
4453
}
4454

    
4455
static void main_loop(void)
4456
{
4457
    int r;
4458

    
4459
#ifdef CONFIG_IOTHREAD
4460
    qemu_system_ready = 1;
4461
    qemu_cond_broadcast(&qemu_system_cond);
4462
#endif
4463

    
4464
    for (;;) {
4465
        do {
4466
#ifdef CONFIG_PROFILER
4467
            int64_t ti;
4468
#endif
4469
#ifndef CONFIG_IOTHREAD
4470
            tcg_cpu_exec();
4471
#endif
4472
#ifdef CONFIG_PROFILER
4473
            ti = profile_getclock();
4474
#endif
4475
            main_loop_wait(qemu_calculate_timeout());
4476
#ifdef CONFIG_PROFILER
4477
            dev_time += profile_getclock() - ti;
4478
#endif
4479
        } while (vm_can_run());
4480

    
4481
        if (qemu_debug_requested())
4482
            vm_stop(EXCP_DEBUG);
4483
        if (qemu_shutdown_requested()) {
4484
            if (no_shutdown) {
4485
                vm_stop(0);
4486
                no_shutdown = 0;
4487
            } else
4488
                break;
4489
        }
4490
        if (qemu_reset_requested()) {
4491
            pause_all_vcpus();
4492
            qemu_system_reset();
4493
            resume_all_vcpus();
4494
        }
4495
        if (qemu_powerdown_requested())
4496
            qemu_system_powerdown();
4497
        if ((r = qemu_vmstop_requested()))
4498
            vm_stop(r);
4499
    }
4500
    pause_all_vcpus();
4501
}
4502

    
4503
static void version(void)
4504
{
4505
    printf("QEMU PC emulator version " QEMU_VERSION QEMU_PKGVERSION ", Copyright (c) 2003-2008 Fabrice Bellard\n");
4506
}
4507

    
4508
static void help(int exitcode)
4509
{
4510
    version();
4511
    printf("usage: %s [options] [disk_image]\n"
4512
           "\n"
4513
           "'disk_image' is a raw hard image image for IDE hard disk 0\n"
4514
           "\n"
4515
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4516
           opt_help
4517
#define DEFHEADING(text) stringify(text) "\n"
4518
#include "qemu-options.h"
4519
#undef DEF
4520
#undef DEFHEADING
4521
#undef GEN_DOCS
4522
           "\n"
4523
           "During emulation, the following keys are useful:\n"
4524
           "ctrl-alt-f      toggle full screen\n"
4525
           "ctrl-alt-n      switch to virtual console 'n'\n"
4526
           "ctrl-alt        toggle mouse and keyboard grab\n"
4527
           "\n"
4528
           "When using -nographic, press 'ctrl-a h' to get some help.\n"
4529
           ,
4530
           "qemu",
4531
           DEFAULT_RAM_SIZE,
4532
#ifndef _WIN32
4533
           DEFAULT_NETWORK_SCRIPT,
4534
           DEFAULT_NETWORK_DOWN_SCRIPT,
4535
#endif
4536
           DEFAULT_GDBSTUB_PORT,
4537
           "/tmp/qemu.log");
4538
    exit(exitcode);
4539
}
4540

    
4541
#define HAS_ARG 0x0001
4542

    
4543
enum {
4544
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4545
    opt_enum,
4546
#define DEFHEADING(text)
4547
#include "qemu-options.h"
4548
#undef DEF
4549
#undef DEFHEADING
4550
#undef GEN_DOCS
4551
};
4552

    
4553
typedef struct QEMUOption {
4554
    const char *name;
4555
    int flags;
4556
    int index;
4557
} QEMUOption;
4558

    
4559
static const QEMUOption qemu_options[] = {
4560
    { "h", 0, QEMU_OPTION_h },
4561
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4562
    { option, opt_arg, opt_enum },
4563
#define DEFHEADING(text)
4564
#include "qemu-options.h"
4565
#undef DEF
4566
#undef DEFHEADING
4567
#undef GEN_DOCS
4568
    { NULL },
4569
};
4570

    
4571
#ifdef HAS_AUDIO
4572
struct soundhw soundhw[] = {
4573
#ifdef HAS_AUDIO_CHOICE
4574
#if defined(TARGET_I386) || defined(TARGET_MIPS)
4575
    {
4576
        "pcspk",
4577
        "PC speaker",
4578
        0,
4579
        1,
4580
        { .init_isa = pcspk_audio_init }
4581
    },
4582
#endif
4583

    
4584
#ifdef CONFIG_SB16
4585
    {
4586
        "sb16",
4587
        "Creative Sound Blaster 16",
4588
        0,
4589
        1,
4590
        { .init_isa = SB16_init }
4591
    },
4592
#endif
4593

    
4594
#ifdef CONFIG_CS4231A
4595
    {
4596
        "cs4231a",
4597
        "CS4231A",
4598
        0,
4599
        1,
4600
        { .init_isa = cs4231a_init }
4601
    },
4602
#endif
4603

    
4604
#ifdef CONFIG_ADLIB
4605
    {
4606
        "adlib",
4607
#ifdef HAS_YMF262
4608
        "Yamaha YMF262 (OPL3)",
4609
#else
4610
        "Yamaha YM3812 (OPL2)",
4611
#endif
4612
        0,
4613
        1,
4614
        { .init_isa = Adlib_init }
4615
    },
4616
#endif
4617

    
4618
#ifdef CONFIG_GUS
4619
    {
4620
        "gus",
4621
        "Gravis Ultrasound GF1",
4622
        0,
4623
        1,
4624
        { .init_isa = GUS_init }
4625
    },
4626
#endif
4627

    
4628
#ifdef CONFIG_AC97
4629
    {
4630
        "ac97",
4631
        "Intel 82801AA AC97 Audio",
4632
        0,
4633
        0,
4634
        { .init_pci = ac97_init }
4635
    },
4636
#endif
4637

    
4638
#ifdef CONFIG_ES1370
4639
    {
4640
        "es1370",
4641
        "ENSONIQ AudioPCI ES1370",
4642
        0,
4643
        0,
4644
        { .init_pci = es1370_init }
4645
    },
4646
#endif
4647

    
4648
#endif /* HAS_AUDIO_CHOICE */
4649

    
4650
    { NULL, NULL, 0, 0, { NULL } }
4651
};
4652

    
4653
static void select_soundhw (const char *optarg)
4654
{
4655
    struct soundhw *c;
4656

    
4657
    if (*optarg == '?') {
4658
    show_valid_cards:
4659

    
4660
        printf ("Valid sound card names (comma separated):\n");
4661
        for (c = soundhw; c->name; ++c) {
4662
            printf ("%-11s %s\n", c->name, c->descr);
4663
        }
4664
        printf ("\n-soundhw all will enable all of the above\n");
4665
        exit (*optarg != '?');
4666
    }
4667
    else {
4668
        size_t l;
4669
        const char *p;
4670
        char *e;
4671
        int bad_card = 0;
4672

    
4673
        if (!strcmp (optarg, "all")) {
4674
            for (c = soundhw; c->name; ++c) {
4675
                c->enabled = 1;
4676
            }
4677
            return;
4678
        }
4679

    
4680
        p = optarg;
4681
        while (*p) {
4682
            e = strchr (p, ',');
4683
            l = !e ? strlen (p) : (size_t) (e - p);
4684

    
4685
            for (c = soundhw; c->name; ++c) {
4686
                if (!strncmp (c->name, p, l)) {
4687
                    c->enabled = 1;
4688
                    break;
4689
                }
4690
            }
4691

    
4692
            if (!c->name) {
4693
                if (l > 80) {
4694
                    fprintf (stderr,
4695
                             "Unknown sound card name (too big to show)\n");
4696
                }
4697
                else {
4698
                    fprintf (stderr, "Unknown sound card name `%.*s'\n",
4699
                             (int) l, p);
4700
                }
4701
                bad_card = 1;
4702
            }
4703
            p += l + (e != NULL);
4704
        }
4705

    
4706
        if (bad_card)
4707
            goto show_valid_cards;
4708
    }
4709
}
4710
#endif
4711

    
4712
static void select_vgahw (const char *p)
4713
{
4714
    const char *opts;
4715

    
4716
    cirrus_vga_enabled = 0;
4717
    std_vga_enabled = 0;
4718
    vmsvga_enabled = 0;
4719
    xenfb_enabled = 0;
4720
    if (strstart(p, "std", &opts)) {
4721
        std_vga_enabled = 1;
4722
    } else if (strstart(p, "cirrus", &opts)) {
4723
        cirrus_vga_enabled = 1;
4724
    } else if (strstart(p, "vmware", &opts)) {
4725
        vmsvga_enabled = 1;
4726
    } else if (strstart(p, "xenfb", &opts)) {
4727
        xenfb_enabled = 1;
4728
    } else if (!strstart(p, "none", &opts)) {
4729
    invalid_vga:
4730
        fprintf(stderr, "Unknown vga type: %s\n", p);
4731
        exit(1);
4732
    }
4733
    while (*opts) {
4734
        const char *nextopt;
4735

    
4736
        if (strstart(opts, ",retrace=", &nextopt)) {
4737
            opts = nextopt;
4738
            if (strstart(opts, "dumb", &nextopt))
4739
                vga_retrace_method = VGA_RETRACE_DUMB;
4740
            else if (strstart(opts, "precise", &nextopt))
4741
                vga_retrace_method = VGA_RETRACE_PRECISE;
4742
            else goto invalid_vga;
4743
        } else goto invalid_vga;
4744
        opts = nextopt;
4745
    }
4746
}
4747

    
4748
#ifdef _WIN32
4749
static BOOL WINAPI qemu_ctrl_handler(DWORD type)
4750
{
4751
    exit(STATUS_CONTROL_C_EXIT);
4752
    return TRUE;
4753
}
4754
#endif
4755

    
4756
int qemu_uuid_parse(const char *str, uint8_t *uuid)
4757
{
4758
    int ret;
4759

    
4760
    if(strlen(str) != 36)
4761
        return -1;
4762

    
4763
    ret = sscanf(str, UUID_FMT, &uuid[0], &uuid[1], &uuid[2], &uuid[3],
4764
            &uuid[4], &uuid[5], &uuid[6], &uuid[7], &uuid[8], &uuid[9],
4765
            &uuid[10], &uuid[11], &uuid[12], &uuid[13], &uuid[14], &uuid[15]);
4766

    
4767
    if(ret != 16)
4768
        return -1;
4769

    
4770
#ifdef TARGET_I386
4771
    smbios_add_field(1, offsetof(struct smbios_type_1, uuid), 16, uuid);
4772
#endif
4773

    
4774
    return 0;
4775
}
4776

    
4777
#define MAX_NET_CLIENTS 32
4778

    
4779
#ifndef _WIN32
4780

    
4781
static void termsig_handler(int signal)
4782
{
4783
    qemu_system_shutdown_request();
4784
}
4785

    
4786
static void termsig_setup(void)
4787
{
4788
    struct sigaction act;
4789

    
4790
    memset(&act, 0, sizeof(act));
4791
    act.sa_handler = termsig_handler;
4792
    sigaction(SIGINT,  &act, NULL);
4793
    sigaction(SIGHUP,  &act, NULL);
4794
    sigaction(SIGTERM, &act, NULL);
4795
}
4796

    
4797
#endif
4798

    
4799
#ifdef _WIN32
4800
/* Look for support files in the same directory as the executable.  */
4801
static char *find_datadir(const char *argv0)
4802
{
4803
    char *p;
4804
    char buf[MAX_PATH];
4805
    DWORD len;
4806

    
4807
    len = GetModuleFileName(NULL, buf, sizeof(buf) - 1);
4808
    if (len == 0) {
4809
        return NULL;
4810
    }
4811

    
4812
    buf[len] = 0;
4813
    p = buf + len - 1;
4814
    while (p != buf && *p != '\\')
4815
        p--;
4816
    *p = 0;
4817
    if (access(buf, R_OK) == 0) {
4818
        return qemu_strdup(buf);
4819
    }
4820
    return NULL;
4821
}
4822
#else /* !_WIN32 */
4823

    
4824
/* Find a likely location for support files using the location of the binary.
4825
   For installed binaries this will be "$bindir/../share/qemu".  When
4826
   running from the build tree this will be "$bindir/../pc-bios".  */
4827
#define SHARE_SUFFIX "/share/qemu"
4828
#define BUILD_SUFFIX "/pc-bios"
4829
static char *find_datadir(const char *argv0)
4830
{
4831
    char *dir;
4832
    char *p = NULL;
4833
    char *res;
4834
#ifdef PATH_MAX
4835
    char buf[PATH_MAX];
4836
#endif
4837
    size_t max_len;
4838

    
4839
#if defined(__linux__)
4840
    {
4841
        int len;
4842
        len = readlink("/proc/self/exe", buf, sizeof(buf) - 1);
4843
        if (len > 0) {
4844
            buf[len] = 0;
4845
            p = buf;
4846
        }
4847
    }
4848
#elif defined(__FreeBSD__)
4849
    {
4850
        int len;
4851
        len = readlink("/proc/curproc/file", buf, sizeof(buf) - 1);
4852
        if (len > 0) {
4853
            buf[len] = 0;
4854
            p = buf;
4855
        }
4856
    }
4857
#endif
4858
    /* If we don't have any way of figuring out the actual executable
4859
       location then try argv[0].  */
4860
    if (!p) {
4861
#ifdef PATH_MAX
4862
        p = buf;
4863
#endif
4864
        p = realpath(argv0, p);
4865
        if (!p) {
4866
            return NULL;
4867
        }
4868
    }
4869
    dir = dirname(p);
4870
    dir = dirname(dir);
4871

    
4872
    max_len = strlen(dir) +
4873
        MAX(strlen(SHARE_SUFFIX), strlen(BUILD_SUFFIX)) + 1;
4874
    res = qemu_mallocz(max_len);
4875
    snprintf(res, max_len, "%s%s", dir, SHARE_SUFFIX);
4876
    if (access(res, R_OK)) {
4877
        snprintf(res, max_len, "%s%s", dir, BUILD_SUFFIX);
4878
        if (access(res, R_OK)) {
4879
            qemu_free(res);
4880
            res = NULL;
4881
        }
4882
    }
4883
#ifndef PATH_MAX
4884
    free(p);
4885
#endif
4886
    return res;
4887
}
4888
#undef SHARE_SUFFIX
4889
#undef BUILD_SUFFIX
4890
#endif
4891

    
4892
char *qemu_find_file(int type, const char *name)
4893
{
4894
    int len;
4895
    const char *subdir;
4896
    char *buf;
4897

    
4898
    /* If name contains path separators then try it as a straight path.  */
4899
    if ((strchr(name, '/') || strchr(name, '\\'))
4900
        && access(name, R_OK) == 0) {
4901
        return strdup(name);
4902
    }
4903
    switch (type) {
4904
    case QEMU_FILE_TYPE_BIOS:
4905
        subdir = "";
4906
        break;
4907
    case QEMU_FILE_TYPE_KEYMAP:
4908
        subdir = "keymaps/";
4909
        break;
4910
    default:
4911
        abort();
4912
    }
4913
    len = strlen(data_dir) + strlen(name) + strlen(subdir) + 2;
4914
    buf = qemu_mallocz(len);
4915
    snprintf(buf, len, "%s/%s%s", data_dir, subdir, name);
4916
    if (access(buf, R_OK)) {
4917
        qemu_free(buf);
4918
        return NULL;
4919
    }
4920
    return buf;
4921
}
4922

    
4923
int main(int argc, char **argv, char **envp)
4924
{
4925
    const char *gdbstub_dev = NULL;
4926
    uint32_t boot_devices_bitmap = 0;
4927
    int i;
4928
    int snapshot, linux_boot, net_boot;
4929
    const char *initrd_filename;
4930
    const char *kernel_filename, *kernel_cmdline;
4931
    const char *boot_devices = "";
4932
    DisplayState *ds;
4933
    DisplayChangeListener *dcl;
4934
    int cyls, heads, secs, translation;
4935
    const char *net_clients[MAX_NET_CLIENTS];
4936
    int nb_net_clients;
4937
    const char *bt_opts[MAX_BT_CMDLINE];
4938
    int nb_bt_opts;
4939
    int hda_index;
4940
    int optind;
4941
    const char *r, *optarg;
4942
    CharDriverState *monitor_hd = NULL;
4943
    const char *monitor_device;
4944
    const char *serial_devices[MAX_SERIAL_PORTS];
4945
    int serial_device_index;
4946
    const char *parallel_devices[MAX_PARALLEL_PORTS];
4947
    int parallel_device_index;
4948
    const char *virtio_consoles[MAX_VIRTIO_CONSOLES];
4949
    int virtio_console_index;
4950
    const char *loadvm = NULL;
4951
    QEMUMachine *machine;
4952
    const char *cpu_model;
4953
    const char *usb_devices[MAX_USB_CMDLINE];
4954
    int usb_devices_index;
4955
#ifndef _WIN32
4956
    int fds[2];
4957
#endif
4958
    int tb_size;
4959
    const char *pid_file = NULL;
4960
    const char *incoming = NULL;
4961
#ifndef _WIN32
4962
    int fd = 0;
4963
    struct passwd *pwd = NULL;
4964
    const char *chroot_dir = NULL;
4965
    const char *run_as = NULL;
4966
#endif
4967
    CPUState *env;
4968
    int show_vnc_port = 0;
4969

    
4970
    qemu_cache_utils_init(envp);
4971

    
4972
    LIST_INIT (&vm_change_state_head);
4973
#ifndef _WIN32
4974
    {
4975
        struct sigaction act;
4976
        sigfillset(&act.sa_mask);
4977
        act.sa_flags = 0;
4978
        act.sa_handler = SIG_IGN;
4979
        sigaction(SIGPIPE, &act, NULL);
4980
    }
4981
#else
4982
    SetConsoleCtrlHandler(qemu_ctrl_handler, TRUE);
4983
    /* Note: cpu_interrupt() is currently not SMP safe, so we force
4984
       QEMU to run on a single CPU */
4985
    {
4986
        HANDLE h;
4987
        DWORD mask, smask;
4988
        int i;
4989
        h = GetCurrentProcess();
4990
        if (GetProcessAffinityMask(h, &mask, &smask)) {
4991
            for(i = 0; i < 32; i++) {
4992
                if (mask & (1 << i))
4993
                    break;
4994
            }
4995
            if (i != 32) {
4996
                mask = 1 << i;
4997
                SetProcessAffinityMask(h, mask);
4998
            }
4999
        }
5000
    }
5001
#endif
5002

    
5003
    module_call_init(MODULE_INIT_MACHINE);
5004
    machine = find_default_machine();
5005
    cpu_model = NULL;
5006
    initrd_filename = NULL;
5007
    ram_size = 0;
5008
    snapshot = 0;
5009
    kernel_filename = NULL;
5010
    kernel_cmdline = "";
5011
    cyls = heads = secs = 0;
5012
    translation = BIOS_ATA_TRANSLATION_AUTO;
5013
    monitor_device = "vc:80Cx24C";
5014

    
5015
    serial_devices[0] = "vc:80Cx24C";
5016
    for(i = 1; i < MAX_SERIAL_PORTS; i++)
5017
        serial_devices[i] = NULL;
5018
    serial_device_index = 0;
5019

    
5020
    parallel_devices[0] = "vc:80Cx24C";
5021
    for(i = 1; i < MAX_PARALLEL_PORTS; i++)
5022
        parallel_devices[i] = NULL;
5023
    parallel_device_index = 0;
5024

    
5025
    for(i = 0; i < MAX_VIRTIO_CONSOLES; i++)
5026
        virtio_consoles[i] = NULL;
5027
    virtio_console_index = 0;
5028

    
5029
    for (i = 0; i < MAX_NODES; i++) {
5030
        node_mem[i] = 0;
5031
        node_cpumask[i] = 0;
5032
    }
5033

    
5034
    usb_devices_index = 0;
5035

    
5036
    nb_net_clients = 0;
5037
    nb_bt_opts = 0;
5038
    nb_drives = 0;
5039
    nb_drives_opt = 0;
5040
    nb_numa_nodes = 0;
5041
    hda_index = -1;
5042

    
5043
    nb_nics = 0;
5044

    
5045
    tb_size = 0;
5046
    autostart= 1;
5047

    
5048
    register_watchdogs();
5049

    
5050
    optind = 1;
5051
    for(;;) {
5052
        if (optind >= argc)
5053
            break;
5054
        r = argv[optind];
5055
        if (r[0] != '-') {
5056
            hda_index = drive_add(argv[optind++], HD_ALIAS, 0);
5057
        } else {
5058
            const QEMUOption *popt;
5059

    
5060
            optind++;
5061
            /* Treat --foo the same as -foo.  */
5062
            if (r[1] == '-')
5063
                r++;
5064
            popt = qemu_options;
5065
            for(;;) {
5066
                if (!popt->name) {
5067
                    fprintf(stderr, "%s: invalid option -- '%s'\n",
5068
                            argv[0], r);
5069
                    exit(1);
5070
                }
5071
                if (!strcmp(popt->name, r + 1))
5072
                    break;
5073
                popt++;
5074
            }
5075
            if (popt->flags & HAS_ARG) {
5076
                if (optind >= argc) {
5077
                    fprintf(stderr, "%s: option '%s' requires an argument\n",
5078
                            argv[0], r);
5079
                    exit(1);
5080
                }
5081
                optarg = argv[optind++];
5082
            } else {
5083
                optarg = NULL;
5084
            }
5085

    
5086
            switch(popt->index) {
5087
            case QEMU_OPTION_M:
5088
                machine = find_machine(optarg);
5089
                if (!machine) {
5090
                    QEMUMachine *m;
5091
                    printf("Supported machines are:\n");
5092
                    for(m = first_machine; m != NULL; m = m->next) {
5093
                        printf("%-10s %s%s\n",
5094
                               m->name, m->desc,
5095
                               m->is_default ? " (default)" : "");
5096
                    }
5097
                    exit(*optarg != '?');
5098
                }
5099
                break;
5100
            case QEMU_OPTION_cpu:
5101
                /* hw initialization will check this */
5102
                if (*optarg == '?') {
5103
/* XXX: implement xxx_cpu_list for targets that still miss it */
5104
#if defined(cpu_list)
5105
                    cpu_list(stdout, &fprintf);
5106
#endif
5107
                    exit(0);
5108
                } else {
5109
                    cpu_model = optarg;
5110
                }
5111
                break;
5112
            case QEMU_OPTION_initrd:
5113
                initrd_filename = optarg;
5114
                break;
5115
            case QEMU_OPTION_hda:
5116
                if (cyls == 0)
5117
                    hda_index = drive_add(optarg, HD_ALIAS, 0);
5118
                else
5119
                    hda_index = drive_add(optarg, HD_ALIAS
5120
                             ",cyls=%d,heads=%d,secs=%d%s",
5121
                             0, cyls, heads, secs,
5122
                             translation == BIOS_ATA_TRANSLATION_LBA ?
5123
                                 ",trans=lba" :
5124
                             translation == BIOS_ATA_TRANSLATION_NONE ?
5125
                                 ",trans=none" : "");
5126
                 break;
5127
            case QEMU_OPTION_hdb:
5128
            case QEMU_OPTION_hdc:
5129
            case QEMU_OPTION_hdd:
5130
                drive_add(optarg, HD_ALIAS, popt->index - QEMU_OPTION_hda);
5131
                break;
5132
            case QEMU_OPTION_drive:
5133
                drive_add(NULL, "%s", optarg);
5134
                break;
5135
            case QEMU_OPTION_mtdblock:
5136
                drive_add(optarg, MTD_ALIAS);
5137
                break;
5138
            case QEMU_OPTION_sd:
5139
                drive_add(optarg, SD_ALIAS);
5140
                break;
5141
            case QEMU_OPTION_pflash:
5142
                drive_add(optarg, PFLASH_ALIAS);
5143
                break;
5144
            case QEMU_OPTION_snapshot:
5145
                snapshot = 1;
5146
                break;
5147
            case QEMU_OPTION_hdachs:
5148
                {
5149
                    const char *p;
5150
                    p = optarg;
5151
                    cyls = strtol(p, (char **)&p, 0);
5152
                    if (cyls < 1 || cyls > 16383)
5153
                        goto chs_fail;
5154
                    if (*p != ',')
5155
                        goto chs_fail;
5156
                    p++;
5157
                    heads = strtol(p, (char **)&p, 0);
5158
                    if (heads < 1 || heads > 16)
5159
                        goto chs_fail;
5160
                    if (*p != ',')
5161
                        goto chs_fail;
5162
                    p++;
5163
                    secs = strtol(p, (char **)&p, 0);
5164
                    if (secs < 1 || secs > 63)
5165
                        goto chs_fail;
5166
                    if (*p == ',') {
5167
                        p++;
5168
                        if (!strcmp(p, "none"))
5169
                            translation = BIOS_ATA_TRANSLATION_NONE;
5170
                        else if (!strcmp(p, "lba"))
5171
                            translation = BIOS_ATA_TRANSLATION_LBA;
5172
                        else if (!strcmp(p, "auto"))
5173
                            translation = BIOS_ATA_TRANSLATION_AUTO;
5174
                        else
5175
                            goto chs_fail;
5176
                    } else if (*p != '\0') {
5177
                    chs_fail:
5178
                        fprintf(stderr, "qemu: invalid physical CHS format\n");
5179
                        exit(1);
5180
                    }
5181
                    if (hda_index != -1)
5182
                        snprintf(drives_opt[hda_index].opt,
5183
                                 sizeof(drives_opt[hda_index].opt),
5184
                                 HD_ALIAS ",cyls=%d,heads=%d,secs=%d%s",
5185
                                 0, cyls, heads, secs,
5186
                                 translation == BIOS_ATA_TRANSLATION_LBA ?
5187
                                         ",trans=lba" :
5188
                                 translation == BIOS_ATA_TRANSLATION_NONE ?
5189
                                     ",trans=none" : "");
5190
                }
5191
                break;
5192
            case QEMU_OPTION_numa:
5193
                if (nb_numa_nodes >= MAX_NODES) {
5194
                    fprintf(stderr, "qemu: too many NUMA nodes\n");
5195
                    exit(1);
5196
                }
5197
                numa_add(optarg);
5198
                break;
5199
            case QEMU_OPTION_nographic:
5200
                display_type = DT_NOGRAPHIC;
5201
                break;
5202
#ifdef CONFIG_CURSES
5203
            case QEMU_OPTION_curses:
5204
                display_type = DT_CURSES;
5205
                break;
5206
#endif
5207
            case QEMU_OPTION_portrait:
5208
                graphic_rotate = 1;
5209
                break;
5210
            case QEMU_OPTION_kernel:
5211
                kernel_filename = optarg;
5212
                break;
5213
            case QEMU_OPTION_append:
5214
                kernel_cmdline = optarg;
5215
                break;
5216
            case QEMU_OPTION_cdrom:
5217
                drive_add(optarg, CDROM_ALIAS);
5218
                break;
5219
            case QEMU_OPTION_boot:
5220
                boot_devices = optarg;
5221
                /* We just do some generic consistency checks */
5222
                {
5223
                    /* Could easily be extended to 64 devices if needed */
5224
                    const char *p;
5225
                    
5226
                    boot_devices_bitmap = 0;
5227
                    for (p = boot_devices; *p != '\0'; p++) {
5228
                        /* Allowed boot devices are:
5229
                         * a b     : floppy disk drives
5230
                         * c ... f : IDE disk drives
5231
                         * g ... m : machine implementation dependant drives
5232
                         * n ... p : network devices
5233
                         * It's up to each machine implementation to check
5234
                         * if the given boot devices match the actual hardware
5235
                         * implementation and firmware features.
5236
                         */
5237
                        if (*p < 'a' || *p > 'q') {
5238
                            fprintf(stderr, "Invalid boot device '%c'\n", *p);
5239
                            exit(1);
5240
                        }
5241
                        if (boot_devices_bitmap & (1 << (*p - 'a'))) {
5242
                            fprintf(stderr,
5243
                                    "Boot device '%c' was given twice\n",*p);
5244
                            exit(1);
5245
                        }
5246
                        boot_devices_bitmap |= 1 << (*p - 'a');
5247
                    }
5248
                }
5249
                break;
5250
            case QEMU_OPTION_fda:
5251
            case QEMU_OPTION_fdb:
5252
                drive_add(optarg, FD_ALIAS, popt->index - QEMU_OPTION_fda);
5253
                break;
5254
#ifdef TARGET_I386
5255
            case QEMU_OPTION_no_fd_bootchk:
5256
                fd_bootchk = 0;
5257
                break;
5258
#endif
5259
            case QEMU_OPTION_net:
5260
                if (nb_net_clients >= MAX_NET_CLIENTS) {
5261
                    fprintf(stderr, "qemu: too many network clients\n");
5262
                    exit(1);
5263
                }
5264
                net_clients[nb_net_clients] = optarg;
5265
                nb_net_clients++;
5266
                break;
5267
#ifdef CONFIG_SLIRP
5268
            case QEMU_OPTION_tftp:
5269
                tftp_prefix = optarg;
5270
                break;
5271
            case QEMU_OPTION_bootp:
5272
                bootp_filename = optarg;
5273
                break;
5274
#ifndef _WIN32
5275
            case QEMU_OPTION_smb:
5276
                net_slirp_smb(optarg);
5277
                break;
5278
#endif
5279
            case QEMU_OPTION_redir:
5280
                net_slirp_redir(NULL, optarg, NULL);
5281
                break;
5282
#endif
5283
            case QEMU_OPTION_bt:
5284
                if (nb_bt_opts >= MAX_BT_CMDLINE) {
5285
                    fprintf(stderr, "qemu: too many bluetooth options\n");
5286
                    exit(1);
5287
                }
5288
                bt_opts[nb_bt_opts++] = optarg;
5289
                break;
5290
#ifdef HAS_AUDIO
5291
            case QEMU_OPTION_audio_help:
5292
                AUD_help ();
5293
                exit (0);
5294
                break;
5295
            case QEMU_OPTION_soundhw:
5296
                select_soundhw (optarg);
5297
                break;
5298
#endif
5299
            case QEMU_OPTION_h:
5300
                help(0);
5301
                break;
5302
            case QEMU_OPTION_version:
5303
                version();
5304
                exit(0);
5305
                break;
5306
            case QEMU_OPTION_m: {
5307
                uint64_t value;
5308
                char *ptr;
5309

    
5310
                value = strtoul(optarg, &ptr, 10);
5311
                switch (*ptr) {
5312
                case 0: case 'M': case 'm':
5313
                    value <<= 20;
5314
                    break;
5315
                case 'G': case 'g':
5316
                    value <<= 30;
5317
                    break;
5318
                default:
5319
                    fprintf(stderr, "qemu: invalid ram size: %s\n", optarg);
5320
                    exit(1);
5321
                }
5322

    
5323
                /* On 32-bit hosts, QEMU is limited by virtual address space */
5324
                if (value > (2047 << 20)
5325
#ifndef CONFIG_KQEMU
5326
                    && HOST_LONG_BITS == 32
5327
#endif
5328
                    ) {
5329
                    fprintf(stderr, "qemu: at most 2047 MB RAM can be simulated\n");
5330
                    exit(1);
5331
                }
5332
                if (value != (uint64_t)(ram_addr_t)value) {
5333
                    fprintf(stderr, "qemu: ram size too large\n");
5334
                    exit(1);
5335
                }
5336
                ram_size = value;
5337
                break;
5338
            }
5339
            case QEMU_OPTION_d:
5340
                {
5341
                    int mask;
5342
                    const CPULogItem *item;
5343

    
5344
                    mask = cpu_str_to_log_mask(optarg);
5345
                    if (!mask) {
5346
                        printf("Log items (comma separated):\n");
5347
                    for(item = cpu_log_items; item->mask != 0; item++) {
5348
                        printf("%-10s %s\n", item->name, item->help);
5349
                    }
5350
                    exit(1);
5351
                    }
5352
                    cpu_set_log(mask);
5353
                }
5354
                break;
5355
            case QEMU_OPTION_s:
5356
                gdbstub_dev = "tcp::" DEFAULT_GDBSTUB_PORT;
5357
                break;
5358
            case QEMU_OPTION_gdb:
5359
                gdbstub_dev = optarg;
5360
                break;
5361
            case QEMU_OPTION_L:
5362
                data_dir = optarg;
5363
                break;
5364
            case QEMU_OPTION_bios:
5365
                bios_name = optarg;
5366
                break;
5367
            case QEMU_OPTION_singlestep:
5368
                singlestep = 1;
5369
                break;
5370
            case QEMU_OPTION_S:
5371
                autostart = 0;
5372
                break;
5373
#ifndef _WIN32
5374
            case QEMU_OPTION_k:
5375
                keyboard_layout = optarg;
5376
                break;
5377
#endif
5378
            case QEMU_OPTION_localtime:
5379
                rtc_utc = 0;
5380
                break;
5381
            case QEMU_OPTION_vga:
5382
                select_vgahw (optarg);
5383
                break;
5384
#if defined(TARGET_PPC) || defined(TARGET_SPARC)
5385
            case QEMU_OPTION_g:
5386
                {
5387
                    const char *p;
5388
                    int w, h, depth;
5389
                    p = optarg;
5390
                    w = strtol(p, (char **)&p, 10);
5391
                    if (w <= 0) {
5392
                    graphic_error:
5393
                        fprintf(stderr, "qemu: invalid resolution or depth\n");
5394
                        exit(1);
5395
                    }
5396
                    if (*p != 'x')
5397
                        goto graphic_error;
5398
                    p++;
5399
                    h = strtol(p, (char **)&p, 10);
5400
                    if (h <= 0)
5401
                        goto graphic_error;
5402
                    if (*p == 'x') {
5403
                        p++;
5404
                        depth = strtol(p, (char **)&p, 10);
5405
                        if (depth != 8 && depth != 15 && depth != 16 &&
5406
                            depth != 24 && depth != 32)
5407
                            goto graphic_error;
5408
                    } else if (*p == '\0') {
5409
                        depth = graphic_depth;
5410
                    } else {
5411
                        goto graphic_error;
5412
                    }
5413

    
5414
                    graphic_width = w;
5415
                    graphic_height = h;
5416
                    graphic_depth = depth;
5417
                }
5418
                break;
5419
#endif
5420
            case QEMU_OPTION_echr:
5421
                {
5422
                    char *r;
5423
                    term_escape_char = strtol(optarg, &r, 0);
5424
                    if (r == optarg)
5425
                        printf("Bad argument to echr\n");
5426
                    break;
5427
                }
5428
            case QEMU_OPTION_monitor:
5429
                monitor_device = optarg;
5430
                break;
5431
            case QEMU_OPTION_serial:
5432
                if (serial_device_index >= MAX_SERIAL_PORTS) {
5433
                    fprintf(stderr, "qemu: too many serial ports\n");
5434
                    exit(1);
5435
                }
5436
                serial_devices[serial_device_index] = optarg;
5437
                serial_device_index++;
5438
                break;
5439
            case QEMU_OPTION_watchdog:
5440
                i = select_watchdog(optarg);
5441
                if (i > 0)
5442
                    exit (i == 1 ? 1 : 0);
5443
                break;
5444
            case QEMU_OPTION_watchdog_action:
5445
                if (select_watchdog_action(optarg) == -1) {
5446
                    fprintf(stderr, "Unknown -watchdog-action parameter\n");
5447
                    exit(1);
5448
                }
5449
                break;
5450
            case QEMU_OPTION_virtiocon:
5451
                if (virtio_console_index >= MAX_VIRTIO_CONSOLES) {
5452
                    fprintf(stderr, "qemu: too many virtio consoles\n");
5453
                    exit(1);
5454
                }
5455
                virtio_consoles[virtio_console_index] = optarg;
5456
                virtio_console_index++;
5457
                break;
5458
            case QEMU_OPTION_parallel:
5459
                if (parallel_device_index >= MAX_PARALLEL_PORTS) {
5460
                    fprintf(stderr, "qemu: too many parallel ports\n");
5461
                    exit(1);
5462
                }
5463
                parallel_devices[parallel_device_index] = optarg;
5464
                parallel_device_index++;
5465
                break;
5466
            case QEMU_OPTION_loadvm:
5467
                loadvm = optarg;
5468
                break;
5469
            case QEMU_OPTION_full_screen:
5470
                full_screen = 1;
5471
                break;
5472
#ifdef CONFIG_SDL
5473
            case QEMU_OPTION_no_frame:
5474
                no_frame = 1;
5475
                break;
5476
            case QEMU_OPTION_alt_grab:
5477
                alt_grab = 1;
5478
                break;
5479
            case QEMU_OPTION_no_quit:
5480
                no_quit = 1;
5481
                break;
5482
            case QEMU_OPTION_sdl:
5483
                display_type = DT_SDL;
5484
                break;
5485
#endif
5486
            case QEMU_OPTION_pidfile:
5487
                pid_file = optarg;
5488
                break;
5489
#ifdef TARGET_I386
5490
            case QEMU_OPTION_win2k_hack:
5491
                win2k_install_hack = 1;
5492
                break;
5493
            case QEMU_OPTION_rtc_td_hack:
5494
                rtc_td_hack = 1;
5495
                break;
5496
            case QEMU_OPTION_acpitable:
5497
                if(acpi_table_add(optarg) < 0) {
5498
                    fprintf(stderr, "Wrong acpi table provided\n");
5499
                    exit(1);
5500
                }
5501
                break;
5502
            case QEMU_OPTION_smbios:
5503
                if(smbios_entry_add(optarg) < 0) {
5504
                    fprintf(stderr, "Wrong smbios provided\n");
5505
                    exit(1);
5506
                }
5507
                break;
5508
#endif
5509
#ifdef CONFIG_KQEMU
5510
            case QEMU_OPTION_no_kqemu:
5511
                kqemu_allowed = 0;
5512
                break;
5513
            case QEMU_OPTION_kernel_kqemu:
5514
                kqemu_allowed = 2;
5515
                break;
5516
#endif
5517
#ifdef CONFIG_KVM
5518
            case QEMU_OPTION_enable_kvm:
5519
                kvm_allowed = 1;
5520
#ifdef CONFIG_KQEMU
5521
                kqemu_allowed = 0;
5522
#endif
5523
                break;
5524
#endif
5525
            case QEMU_OPTION_usb:
5526
                usb_enabled = 1;
5527
                break;
5528
            case QEMU_OPTION_usbdevice:
5529
                usb_enabled = 1;
5530
                if (usb_devices_index >= MAX_USB_CMDLINE) {
5531
                    fprintf(stderr, "Too many USB devices\n");
5532
                    exit(1);
5533
                }
5534
                usb_devices[usb_devices_index] = optarg;
5535
                usb_devices_index++;
5536
                break;
5537
            case QEMU_OPTION_smp:
5538
                smp_cpus = atoi(optarg);
5539
                if (smp_cpus < 1) {
5540
                    fprintf(stderr, "Invalid number of CPUs\n");
5541
                    exit(1);
5542
                }
5543
                break;
5544
            case QEMU_OPTION_vnc:
5545
                display_type = DT_VNC;
5546
                vnc_display = optarg;
5547
                break;
5548
#ifdef TARGET_I386
5549
            case QEMU_OPTION_no_acpi:
5550
                acpi_enabled = 0;
5551
                break;
5552
            case QEMU_OPTION_no_hpet:
5553
                no_hpet = 1;
5554
                break;
5555
#endif
5556
            case QEMU_OPTION_no_reboot:
5557
                no_reboot = 1;
5558
                break;
5559
            case QEMU_OPTION_no_shutdown:
5560
                no_shutdown = 1;
5561
                break;
5562
            case QEMU_OPTION_show_cursor:
5563
                cursor_hide = 0;
5564
                break;
5565
            case QEMU_OPTION_uuid:
5566
                if(qemu_uuid_parse(optarg, qemu_uuid) < 0) {
5567
                    fprintf(stderr, "Fail to parse UUID string."
5568
                            " Wrong format.\n");
5569
                    exit(1);
5570
                }
5571
                break;
5572
#ifndef _WIN32
5573
            case QEMU_OPTION_daemonize:
5574
                daemonize = 1;
5575
                break;
5576
#endif
5577
            case QEMU_OPTION_option_rom:
5578
                if (nb_option_roms >= MAX_OPTION_ROMS) {
5579
                    fprintf(stderr, "Too many option ROMs\n");
5580
                    exit(1);
5581
                }
5582
                option_rom[nb_option_roms] = optarg;
5583
                nb_option_roms++;
5584
                break;
5585
#if defined(TARGET_ARM) || defined(TARGET_M68K)
5586
            case QEMU_OPTION_semihosting:
5587
                semihosting_enabled = 1;
5588
                break;
5589
#endif
5590
            case QEMU_OPTION_name:
5591
                qemu_name = optarg;
5592
                break;
5593
#if defined(TARGET_SPARC) || defined(TARGET_PPC)
5594
            case QEMU_OPTION_prom_env:
5595
                if (nb_prom_envs >= MAX_PROM_ENVS) {
5596
                    fprintf(stderr, "Too many prom variables\n");
5597
                    exit(1);
5598
                }
5599
                prom_envs[nb_prom_envs] = optarg;
5600
                nb_prom_envs++;
5601
                break;
5602
#endif
5603
#ifdef TARGET_ARM
5604
            case QEMU_OPTION_old_param:
5605
                old_param = 1;
5606
                break;
5607
#endif
5608
            case QEMU_OPTION_clock:
5609
                configure_alarms(optarg);
5610
                break;
5611
            case QEMU_OPTION_startdate:
5612
                {
5613
                    struct tm tm;
5614
                    time_t rtc_start_date;
5615
                    if (!strcmp(optarg, "now")) {
5616
                        rtc_date_offset = -1;
5617
                    } else {
5618
                        if (sscanf(optarg, "%d-%d-%dT%d:%d:%d",
5619
                               &tm.tm_year,
5620
                               &tm.tm_mon,
5621
                               &tm.tm_mday,
5622
                               &tm.tm_hour,
5623
                               &tm.tm_min,
5624
                               &tm.tm_sec) == 6) {
5625
                            /* OK */
5626
                        } else if (sscanf(optarg, "%d-%d-%d",
5627
                                          &tm.tm_year,
5628
                                          &tm.tm_mon,
5629
                                          &tm.tm_mday) == 3) {
5630
                            tm.tm_hour = 0;
5631
                            tm.tm_min = 0;
5632
                            tm.tm_sec = 0;
5633
                        } else {
5634
                            goto date_fail;
5635
                        }
5636
                        tm.tm_year -= 1900;
5637
                        tm.tm_mon--;
5638
                        rtc_start_date = mktimegm(&tm);
5639
                        if (rtc_start_date == -1) {
5640
                        date_fail:
5641
                            fprintf(stderr, "Invalid date format. Valid format are:\n"
5642
                                    "'now' or '2006-06-17T16:01:21' or '2006-06-17'\n");
5643
                            exit(1);
5644
                        }
5645
                        rtc_date_offset = time(NULL) - rtc_start_date;
5646
                    }
5647
                }
5648
                break;
5649
            case QEMU_OPTION_tb_size:
5650
                tb_size = strtol(optarg, NULL, 0);
5651
                if (tb_size < 0)
5652
                    tb_size = 0;
5653
                break;
5654
            case QEMU_OPTION_icount:
5655
                use_icount = 1;
5656
                if (strcmp(optarg, "auto") == 0) {
5657
                    icount_time_shift = -1;
5658
                } else {
5659
                    icount_time_shift = strtol(optarg, NULL, 0);
5660
                }
5661
                break;
5662
            case QEMU_OPTION_incoming:
5663
                incoming = optarg;
5664
                break;
5665
#ifndef _WIN32
5666
            case QEMU_OPTION_chroot:
5667
                chroot_dir = optarg;
5668
                break;
5669
            case QEMU_OPTION_runas:
5670
                run_as = optarg;
5671
                break;
5672
#endif
5673
#ifdef CONFIG_XEN
5674
            case QEMU_OPTION_xen_domid:
5675
                xen_domid = atoi(optarg);
5676
                break;
5677
            case QEMU_OPTION_xen_create:
5678
                xen_mode = XEN_CREATE;
5679
                break;
5680
            case QEMU_OPTION_xen_attach:
5681
                xen_mode = XEN_ATTACH;
5682
                break;
5683
#endif
5684
            }
5685
        }
5686
    }
5687

    
5688
    /* If no data_dir is specified then try to find it relative to the
5689
       executable path.  */
5690
    if (!data_dir) {
5691
        data_dir = find_datadir(argv[0]);
5692
    }
5693
    /* If all else fails use the install patch specified when building.  */
5694
    if (!data_dir) {
5695
        data_dir = CONFIG_QEMU_SHAREDIR;
5696
    }
5697

    
5698
#if defined(CONFIG_KVM) && defined(CONFIG_KQEMU)
5699
    if (kvm_allowed && kqemu_allowed) {
5700
        fprintf(stderr,
5701
                "You can not enable both KVM and kqemu at the same time\n");
5702
        exit(1);
5703
    }
5704
#endif
5705

    
5706
    machine->max_cpus = machine->max_cpus ?: 1; /* Default to UP */
5707
    if (smp_cpus > machine->max_cpus) {
5708
        fprintf(stderr, "Number of SMP cpus requested (%d), exceeds max cpus "
5709
                "supported by machine `%s' (%d)\n", smp_cpus,  machine->name,
5710
                machine->max_cpus);
5711
        exit(1);
5712
    }
5713

    
5714
    if (display_type == DT_NOGRAPHIC) {
5715
       if (serial_device_index == 0)
5716
           serial_devices[0] = "stdio";
5717
       if (parallel_device_index == 0)
5718
           parallel_devices[0] = "null";
5719
       if (strncmp(monitor_device, "vc", 2) == 0)
5720
           monitor_device = "stdio";
5721
    }
5722

    
5723
#ifndef _WIN32
5724
    if (daemonize) {
5725
        pid_t pid;
5726

    
5727
        if (pipe(fds) == -1)
5728
            exit(1);
5729

    
5730
        pid = fork();
5731
        if (pid > 0) {
5732
            uint8_t status;
5733
            ssize_t len;
5734

    
5735
            close(fds[1]);
5736

    
5737
        again:
5738
            len = read(fds[0], &status, 1);
5739
            if (len == -1 && (errno == EINTR))
5740
                goto again;
5741

    
5742
            if (len != 1)
5743
                exit(1);
5744
            else if (status == 1) {
5745
                fprintf(stderr, "Could not acquire pidfile\n");
5746
                exit(1);
5747
            } else
5748
                exit(0);
5749
        } else if (pid < 0)
5750
            exit(1);
5751

    
5752
        setsid();
5753

    
5754
        pid = fork();
5755
        if (pid > 0)
5756
            exit(0);
5757
        else if (pid < 0)
5758
            exit(1);
5759

    
5760
        umask(027);
5761

    
5762
        signal(SIGTSTP, SIG_IGN);
5763
        signal(SIGTTOU, SIG_IGN);
5764
        signal(SIGTTIN, SIG_IGN);
5765
    }
5766

    
5767
    if (pid_file && qemu_create_pidfile(pid_file) != 0) {
5768
        if (daemonize) {
5769
            uint8_t status = 1;
5770
            write(fds[1], &status, 1);
5771
        } else
5772
            fprintf(stderr, "Could not acquire pid file\n");
5773
        exit(1);
5774
    }
5775
#endif
5776

    
5777
#ifdef CONFIG_KQEMU
5778
    if (smp_cpus > 1)
5779
        kqemu_allowed = 0;
5780
#endif
5781
    if (qemu_init_main_loop()) {
5782
        fprintf(stderr, "qemu_init_main_loop failed\n");
5783
        exit(1);
5784
    }
5785
    linux_boot = (kernel_filename != NULL);
5786
    net_boot = (boot_devices_bitmap >> ('n' - 'a')) & 0xF;
5787

    
5788
    if (!linux_boot && *kernel_cmdline != '\0') {
5789
        fprintf(stderr, "-append only allowed with -kernel option\n");
5790
        exit(1);
5791
    }
5792

    
5793
    if (!linux_boot && initrd_filename != NULL) {
5794
        fprintf(stderr, "-initrd only allowed with -kernel option\n");
5795
        exit(1);
5796
    }
5797

    
5798
    /* boot to floppy or the default cd if no hard disk defined yet */
5799
    if (!boot_devices[0]) {
5800
        boot_devices = "cad";
5801
    }
5802
    setvbuf(stdout, NULL, _IOLBF, 0);
5803

    
5804
    init_timers();
5805
    if (init_timer_alarm() < 0) {
5806
        fprintf(stderr, "could not initialize alarm timer\n");
5807
        exit(1);
5808
    }
5809
    if (use_icount && icount_time_shift < 0) {
5810
        use_icount = 2;
5811
        /* 125MIPS seems a reasonable initial guess at the guest speed.
5812
           It will be corrected fairly quickly anyway.  */
5813
        icount_time_shift = 3;
5814
        init_icount_adjust();
5815
    }
5816

    
5817
#ifdef _WIN32
5818
    socket_init();
5819
#endif
5820

    
5821
    /* init network clients */
5822
    if (nb_net_clients == 0) {
5823
        /* if no clients, we use a default config */
5824
        net_clients[nb_net_clients++] = "nic";
5825
#ifdef CONFIG_SLIRP
5826
        net_clients[nb_net_clients++] = "user";
5827
#endif
5828
    }
5829

    
5830
    for(i = 0;i < nb_net_clients; i++) {
5831
        if (net_client_parse(net_clients[i]) < 0)
5832
            exit(1);
5833
    }
5834
    net_client_check();
5835

    
5836
#ifdef TARGET_I386
5837
    /* XXX: this should be moved in the PC machine instantiation code */
5838
    if (net_boot != 0) {
5839
        int netroms = 0;
5840
        for (i = 0; i < nb_nics && i < 4; i++) {
5841
            const char *model = nd_table[i].model;
5842
            char buf[1024];
5843
            char *filename;
5844
            if (net_boot & (1 << i)) {
5845
                if (model == NULL)
5846
                    model = "ne2k_pci";
5847
                snprintf(buf, sizeof(buf), "pxe-%s.bin", model);
5848
                filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, buf);
5849
                if (filename && get_image_size(filename) > 0) {
5850
                    if (nb_option_roms >= MAX_OPTION_ROMS) {
5851
                        fprintf(stderr, "Too many option ROMs\n");
5852
                        exit(1);
5853
                    }
5854
                    option_rom[nb_option_roms] = qemu_strdup(buf);
5855
                    nb_option_roms++;
5856
                    netroms++;
5857
                }
5858
                if (filename) {
5859
                    qemu_free(filename);
5860
                }
5861
            }
5862
        }
5863
        if (netroms == 0) {
5864
            fprintf(stderr, "No valid PXE rom found for network device\n");
5865
            exit(1);
5866
        }
5867
    }
5868
#endif
5869

    
5870
    /* init the bluetooth world */
5871
    for (i = 0; i < nb_bt_opts; i++)
5872
        if (bt_parse(bt_opts[i]))
5873
            exit(1);
5874

    
5875
    /* init the memory */
5876
    if (ram_size == 0)
5877
        ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
5878

    
5879
#ifdef CONFIG_KQEMU
5880
    /* FIXME: This is a nasty hack because kqemu can't cope with dynamic
5881
       guest ram allocation.  It needs to go away.  */
5882
    if (kqemu_allowed) {
5883
        kqemu_phys_ram_size = ram_size + 8 * 1024 * 1024 + 4 * 1024 * 1024;
5884
        kqemu_phys_ram_base = qemu_vmalloc(kqemu_phys_ram_size);
5885
        if (!kqemu_phys_ram_base) {
5886
            fprintf(stderr, "Could not allocate physical memory\n");
5887
            exit(1);
5888
        }
5889
    }
5890
#endif
5891

    
5892
    /* init the dynamic translator */
5893
    cpu_exec_init_all(tb_size * 1024 * 1024);
5894

    
5895
    bdrv_init();
5896

    
5897
    /* we always create the cdrom drive, even if no disk is there */
5898

    
5899
    if (nb_drives_opt < MAX_DRIVES)
5900
        drive_add(NULL, CDROM_ALIAS);
5901

    
5902
    /* we always create at least one floppy */
5903

    
5904
    if (nb_drives_opt < MAX_DRIVES)
5905
        drive_add(NULL, FD_ALIAS, 0);
5906

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

    
5909
    if (nb_drives_opt < MAX_DRIVES)
5910
        drive_add(NULL, SD_ALIAS);
5911

    
5912
    /* open the virtual block devices */
5913

    
5914
    for(i = 0; i < nb_drives_opt; i++)
5915
        if (drive_init(&drives_opt[i], snapshot, machine) == -1)
5916
            exit(1);
5917

    
5918
    register_savevm("timer", 0, 2, timer_save, timer_load, NULL);
5919
    register_savevm_live("ram", 0, 3, ram_save_live, NULL, ram_load, NULL);
5920

    
5921
#ifndef _WIN32
5922
    /* must be after terminal init, SDL library changes signal handlers */
5923
    termsig_setup();
5924
#endif
5925

    
5926
    /* Maintain compatibility with multiple stdio monitors */
5927
    if (!strcmp(monitor_device,"stdio")) {
5928
        for (i = 0; i < MAX_SERIAL_PORTS; i++) {
5929
            const char *devname = serial_devices[i];
5930
            if (devname && !strcmp(devname,"mon:stdio")) {
5931
                monitor_device = NULL;
5932
                break;
5933
            } else if (devname && !strcmp(devname,"stdio")) {
5934
                monitor_device = NULL;
5935
                serial_devices[i] = "mon:stdio";
5936
                break;
5937
            }
5938
        }
5939
    }
5940

    
5941
    if (nb_numa_nodes > 0) {
5942
        int i;
5943

    
5944
        if (nb_numa_nodes > smp_cpus) {
5945
            nb_numa_nodes = smp_cpus;
5946
        }
5947

    
5948
        /* If no memory size if given for any node, assume the default case
5949
         * and distribute the available memory equally across all nodes
5950
         */
5951
        for (i = 0; i < nb_numa_nodes; i++) {
5952
            if (node_mem[i] != 0)
5953
                break;
5954
        }
5955
        if (i == nb_numa_nodes) {
5956
            uint64_t usedmem = 0;
5957

    
5958
            /* On Linux, the each node's border has to be 8MB aligned,
5959
             * the final node gets the rest.
5960
             */
5961
            for (i = 0; i < nb_numa_nodes - 1; i++) {
5962
                node_mem[i] = (ram_size / nb_numa_nodes) & ~((1 << 23UL) - 1);
5963
                usedmem += node_mem[i];
5964
            }
5965
            node_mem[i] = ram_size - usedmem;
5966
        }
5967

    
5968
        for (i = 0; i < nb_numa_nodes; i++) {
5969
            if (node_cpumask[i] != 0)
5970
                break;
5971
        }
5972
        /* assigning the VCPUs round-robin is easier to implement, guest OSes
5973
         * must cope with this anyway, because there are BIOSes out there in
5974
         * real machines which also use this scheme.
5975
         */
5976
        if (i == nb_numa_nodes) {
5977
            for (i = 0; i < smp_cpus; i++) {
5978
                node_cpumask[i % nb_numa_nodes] |= 1 << i;
5979
            }
5980
        }
5981
    }
5982

    
5983
    if (kvm_enabled()) {
5984
        int ret;
5985

    
5986
        ret = kvm_init(smp_cpus);
5987
        if (ret < 0) {
5988
            fprintf(stderr, "failed to initialize KVM\n");
5989
            exit(1);
5990
        }
5991
    }
5992

    
5993
    if (monitor_device) {
5994
        monitor_hd = qemu_chr_open("monitor", monitor_device, NULL);
5995
        if (!monitor_hd) {
5996
            fprintf(stderr, "qemu: could not open monitor device '%s'\n", monitor_device);
5997
            exit(1);
5998
        }
5999
    }
6000

    
6001
    for(i = 0; i < MAX_SERIAL_PORTS; i++) {
6002
        const char *devname = serial_devices[i];
6003
        if (devname && strcmp(devname, "none")) {
6004
            char label[32];
6005
            snprintf(label, sizeof(label), "serial%d", i);
6006
            serial_hds[i] = qemu_chr_open(label, devname, NULL);
6007
            if (!serial_hds[i]) {
6008
                fprintf(stderr, "qemu: could not open serial device '%s'\n",
6009
                        devname);
6010
                exit(1);
6011
            }
6012
        }
6013
    }
6014

    
6015
    for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
6016
        const char *devname = parallel_devices[i];
6017
        if (devname && strcmp(devname, "none")) {
6018
            char label[32];
6019
            snprintf(label, sizeof(label), "parallel%d", i);
6020
            parallel_hds[i] = qemu_chr_open(label, devname, NULL);
6021
            if (!parallel_hds[i]) {
6022
                fprintf(stderr, "qemu: could not open parallel device '%s'\n",
6023
                        devname);
6024
                exit(1);
6025
            }
6026
        }
6027
    }
6028

    
6029
    for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
6030
        const char *devname = virtio_consoles[i];
6031
        if (devname && strcmp(devname, "none")) {
6032
            char label[32];
6033
            snprintf(label, sizeof(label), "virtcon%d", i);
6034
            virtcon_hds[i] = qemu_chr_open(label, devname, NULL);
6035
            if (!virtcon_hds[i]) {
6036
                fprintf(stderr, "qemu: could not open virtio console '%s'\n",
6037
                        devname);
6038
                exit(1);
6039
            }
6040
        }
6041
    }
6042

    
6043
    module_call_init(MODULE_INIT_DEVICE);
6044

    
6045
    machine->init(ram_size, boot_devices,
6046
                  kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
6047

    
6048

    
6049
    for (env = first_cpu; env != NULL; env = env->next_cpu) {
6050
        for (i = 0; i < nb_numa_nodes; i++) {
6051
            if (node_cpumask[i] & (1 << env->cpu_index)) {
6052
                env->numa_node = i;
6053
            }
6054
        }
6055
    }
6056

    
6057
    current_machine = machine;
6058

    
6059
    /* Set KVM's vcpu state to qemu's initial CPUState. */
6060
    if (kvm_enabled()) {
6061
        int ret;
6062

    
6063
        ret = kvm_sync_vcpus();
6064
        if (ret < 0) {
6065
            fprintf(stderr, "failed to initialize vcpus\n");
6066
            exit(1);
6067
        }
6068
    }
6069

    
6070
    /* init USB devices */
6071
    if (usb_enabled) {
6072
        for(i = 0; i < usb_devices_index; i++) {
6073
            if (usb_device_add(usb_devices[i], 0) < 0) {
6074
                fprintf(stderr, "Warning: could not add USB device %s\n",
6075
                        usb_devices[i]);
6076
            }
6077
        }
6078
    }
6079

    
6080
    if (!display_state)
6081
        dumb_display_init();
6082
    /* just use the first displaystate for the moment */
6083
    ds = display_state;
6084

    
6085
    if (display_type == DT_DEFAULT) {
6086
#if defined(CONFIG_SDL) || defined(CONFIG_COCOA)
6087
        display_type = DT_SDL;
6088
#else
6089
        display_type = DT_VNC;
6090
        vnc_display = "localhost:0,to=99";
6091
        show_vnc_port = 1;
6092
#endif
6093
    }
6094
        
6095

    
6096
    switch (display_type) {
6097
    case DT_NOGRAPHIC:
6098
        break;
6099
#if defined(CONFIG_CURSES)
6100
    case DT_CURSES:
6101
        curses_display_init(ds, full_screen);
6102
        break;
6103
#endif
6104
#if defined(CONFIG_SDL)
6105
    case DT_SDL:
6106
        sdl_display_init(ds, full_screen, no_frame);
6107
        break;
6108
#elif defined(CONFIG_COCOA)
6109
    case DT_SDL:
6110
        cocoa_display_init(ds, full_screen);
6111
        break;
6112
#endif
6113
    case DT_VNC:
6114
        vnc_display_init(ds);
6115
        if (vnc_display_open(ds, vnc_display) < 0)
6116
            exit(1);
6117

    
6118
        if (show_vnc_port) {
6119
            printf("VNC server running on `%s'\n", vnc_display_local_addr(ds));
6120
        }
6121
        break;
6122
    default:
6123
        break;
6124
    }
6125
    dpy_resize(ds);
6126

    
6127
    dcl = ds->listeners;
6128
    while (dcl != NULL) {
6129
        if (dcl->dpy_refresh != NULL) {
6130
            ds->gui_timer = qemu_new_timer(rt_clock, gui_update, ds);
6131
            qemu_mod_timer(ds->gui_timer, qemu_get_clock(rt_clock));
6132
        }
6133
        dcl = dcl->next;
6134
    }
6135

    
6136
    if (display_type == DT_NOGRAPHIC || display_type == DT_VNC) {
6137
        nographic_timer = qemu_new_timer(rt_clock, nographic_update, NULL);
6138
        qemu_mod_timer(nographic_timer, qemu_get_clock(rt_clock));
6139
    }
6140

    
6141
    text_consoles_set_display(display_state);
6142
    qemu_chr_initial_reset();
6143

    
6144
    if (monitor_device && monitor_hd)
6145
        monitor_init(monitor_hd, MONITOR_USE_READLINE | MONITOR_IS_DEFAULT);
6146

    
6147
    for(i = 0; i < MAX_SERIAL_PORTS; i++) {
6148
        const char *devname = serial_devices[i];
6149
        if (devname && strcmp(devname, "none")) {
6150
            char label[32];
6151
            snprintf(label, sizeof(label), "serial%d", i);
6152
            if (strstart(devname, "vc", 0))
6153
                qemu_chr_printf(serial_hds[i], "serial%d console\r\n", i);
6154
        }
6155
    }
6156

    
6157
    for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
6158
        const char *devname = parallel_devices[i];
6159
        if (devname && strcmp(devname, "none")) {
6160
            char label[32];
6161
            snprintf(label, sizeof(label), "parallel%d", i);
6162
            if (strstart(devname, "vc", 0))
6163
                qemu_chr_printf(parallel_hds[i], "parallel%d console\r\n", i);
6164
        }
6165
    }
6166

    
6167
    for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
6168
        const char *devname = virtio_consoles[i];
6169
        if (virtcon_hds[i] && devname) {
6170
            char label[32];
6171
            snprintf(label, sizeof(label), "virtcon%d", i);
6172
            if (strstart(devname, "vc", 0))
6173
                qemu_chr_printf(virtcon_hds[i], "virtio console%d\r\n", i);
6174
        }
6175
    }
6176

    
6177
    if (gdbstub_dev && gdbserver_start(gdbstub_dev) < 0) {
6178
        fprintf(stderr, "qemu: could not open gdbserver on device '%s'\n",
6179
                gdbstub_dev);
6180
        exit(1);
6181
    }
6182

    
6183
    if (loadvm)
6184
        do_loadvm(cur_mon, loadvm);
6185

    
6186
    if (incoming) {
6187
        autostart = 0; /* fixme how to deal with -daemonize */
6188
        qemu_start_incoming_migration(incoming);
6189
    }
6190

    
6191
    if (autostart)
6192
        vm_start();
6193

    
6194
#ifndef _WIN32
6195
    if (daemonize) {
6196
        uint8_t status = 0;
6197
        ssize_t len;
6198

    
6199
    again1:
6200
        len = write(fds[1], &status, 1);
6201
        if (len == -1 && (errno == EINTR))
6202
            goto again1;
6203

    
6204
        if (len != 1)
6205
            exit(1);
6206

    
6207
        chdir("/");
6208
        TFR(fd = open("/dev/null", O_RDWR));
6209
        if (fd == -1)
6210
            exit(1);
6211
    }
6212

    
6213
    if (run_as) {
6214
        pwd = getpwnam(run_as);
6215
        if (!pwd) {
6216
            fprintf(stderr, "User \"%s\" doesn't exist\n", run_as);
6217
            exit(1);
6218
        }
6219
    }
6220

    
6221
    if (chroot_dir) {
6222
        if (chroot(chroot_dir) < 0) {
6223
            fprintf(stderr, "chroot failed\n");
6224
            exit(1);
6225
        }
6226
        chdir("/");
6227
    }
6228

    
6229
    if (run_as) {
6230
        if (setgid(pwd->pw_gid) < 0) {
6231
            fprintf(stderr, "Failed to setgid(%d)\n", pwd->pw_gid);
6232
            exit(1);
6233
        }
6234
        if (setuid(pwd->pw_uid) < 0) {
6235
            fprintf(stderr, "Failed to setuid(%d)\n", pwd->pw_uid);
6236
            exit(1);
6237
        }
6238
        if (setuid(0) != -1) {
6239
            fprintf(stderr, "Dropping privileges failed\n");
6240
            exit(1);
6241
        }
6242
    }
6243

    
6244
    if (daemonize) {
6245
        dup2(fd, 0);
6246
        dup2(fd, 1);
6247
        dup2(fd, 2);
6248

    
6249
        close(fd);
6250
    }
6251
#endif
6252

    
6253
    main_loop();
6254
    quit_timers();
6255
    net_cleanup();
6256

    
6257
    return 0;
6258
}