Statistics
| Branch: | Revision:

root / vl.c @ c5947808

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
    int timeout;
4392

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

    
4435
    return timeout;
4436
}
4437

    
4438
static int vm_can_run(void)
4439
{
4440
    if (powerdown_requested)
4441
        return 0;
4442
    if (reset_requested)
4443
        return 0;
4444
    if (shutdown_requested)
4445
        return 0;
4446
    if (debug_requested)
4447
        return 0;
4448
    return 1;
4449
}
4450

    
4451
static void main_loop(void)
4452
{
4453
    int r;
4454

    
4455
#ifdef CONFIG_IOTHREAD
4456
    qemu_system_ready = 1;
4457
    qemu_cond_broadcast(&qemu_system_cond);
4458
#endif
4459

    
4460
    for (;;) {
4461
        do {
4462
#ifdef CONFIG_PROFILER
4463
            int64_t ti;
4464
#endif
4465
#ifndef CONFIG_IOTHREAD
4466
            tcg_cpu_exec();
4467
#endif
4468
#ifdef CONFIG_PROFILER
4469
            ti = profile_getclock();
4470
#endif
4471
#ifdef CONFIG_IOTHREAD
4472
            main_loop_wait(1000);
4473
#else
4474
            main_loop_wait(qemu_calculate_timeout());
4475
#endif
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

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

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

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

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

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

    
4968
    qemu_cache_utils_init(envp);
4969

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

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

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

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

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

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

    
5032
    usb_devices_index = 0;
5033

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

    
5041
    nb_nics = 0;
5042

    
5043
    tb_size = 0;
5044
    autostart= 1;
5045

    
5046
    register_watchdogs();
5047

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

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

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

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

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

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

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

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

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

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

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

    
5721
#ifndef _WIN32
5722
    if (daemonize) {
5723
        pid_t pid;
5724

    
5725
        if (pipe(fds) == -1)
5726
            exit(1);
5727

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

    
5733
            close(fds[1]);
5734

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

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

    
5750
        setsid();
5751

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

    
5758
        umask(027);
5759

    
5760
        signal(SIGTSTP, SIG_IGN);
5761
        signal(SIGTTOU, SIG_IGN);
5762
        signal(SIGTTIN, SIG_IGN);
5763
    }
5764

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

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

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

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

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

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

    
5815
#ifdef _WIN32
5816
    socket_init();
5817
#endif
5818

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

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

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

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

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

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

    
5890
    /* init the dynamic translator */
5891
    cpu_exec_init_all(tb_size * 1024 * 1024);
5892

    
5893
    bdrv_init();
5894

    
5895
    /* we always create the cdrom drive, even if no disk is there */
5896

    
5897
    if (nb_drives_opt < MAX_DRIVES)
5898
        drive_add(NULL, CDROM_ALIAS);
5899

    
5900
    /* we always create at least one floppy */
5901

    
5902
    if (nb_drives_opt < MAX_DRIVES)
5903
        drive_add(NULL, FD_ALIAS, 0);
5904

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

    
5907
    if (nb_drives_opt < MAX_DRIVES)
5908
        drive_add(NULL, SD_ALIAS);
5909

    
5910
    /* open the virtual block devices */
5911

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

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

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

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

    
5939
    if (nb_numa_nodes > 0) {
5940
        int i;
5941

    
5942
        if (nb_numa_nodes > smp_cpus) {
5943
            nb_numa_nodes = smp_cpus;
5944
        }
5945

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

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

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

    
5981
    if (kvm_enabled()) {
5982
        int ret;
5983

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

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

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

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

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

    
6041
    module_call_init(MODULE_INIT_DEVICE);
6042

    
6043
    machine->init(ram_size, boot_devices,
6044
                  kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
6045

    
6046

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

    
6055
    current_machine = machine;
6056

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

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

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

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

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

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

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

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

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

    
6139
    text_consoles_set_display(display_state);
6140
    qemu_chr_initial_reset();
6141

    
6142
    if (monitor_device && monitor_hd)
6143
        monitor_init(monitor_hd, MONITOR_USE_READLINE | MONITOR_IS_DEFAULT);
6144

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

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

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

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

    
6181
    if (loadvm)
6182
        do_loadvm(cur_mon, loadvm);
6183

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

    
6189
    if (autostart)
6190
        vm_start();
6191

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

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

    
6202
        if (len != 1)
6203
            exit(1);
6204

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

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

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

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

    
6242
    if (daemonize) {
6243
        dup2(fd, 0);
6244
        dup2(fd, 1);
6245
        dup2(fd, 2);
6246

    
6247
        close(fd);
6248
    }
6249
#endif
6250

    
6251
    main_loop();
6252
    quit_timers();
6253
    net_cleanup();
6254

    
6255
    return 0;
6256
}