Statistics
| Branch: | Revision:

root / vl.c @ 9ed415b2

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

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

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

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

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

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

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

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

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

    
160
#include "disas.h"
161

    
162
#include "exec-all.h"
163

    
164
#include "qemu_socket.h"
165

    
166
#if defined(CONFIG_SLIRP)
167
#include "libslirp.h"
168
#endif
169

    
170
//#define DEBUG_UNUSED_IOPORT
171
//#define DEBUG_IOPORT
172
//#define DEBUG_NET
173
//#define DEBUG_SLIRP
174

    
175

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

    
182
#define DEFAULT_RAM_SIZE 128
183

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

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

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

    
193
const char *bios_dir = CONFIG_QEMU_SHAREDIR;
194
const char *bios_name = NULL;
195
static void *ioport_opaque[MAX_IOPORTS];
196
static IOPortReadFunc *ioport_read_table[3][MAX_IOPORTS];
197
static IOPortWriteFunc *ioport_write_table[3][MAX_IOPORTS];
198
/* Note: drives_table[MAX_DRIVES] is a dummy block driver if none available
199
   to store the VM snapshots */
200
DriveInfo drives_table[MAX_DRIVES+1];
201
int nb_drives;
202
enum vga_retrace_method vga_retrace_method = VGA_RETRACE_DUMB;
203
static DisplayState *display_state;
204
int nographic;
205
static int curses;
206
static int sdl;
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
const char *get_opt_name(char *buf, int buf_size, const char *p, char delim)
1815
{
1816
    char *q;
1817

    
1818
    q = buf;
1819
    while (*p != '\0' && *p != delim) {
1820
        if (q && (q - buf) < buf_size - 1)
1821
            *q++ = *p;
1822
        p++;
1823
    }
1824
    if (q)
1825
        *q = '\0';
1826

    
1827
    return p;
1828
}
1829

    
1830
const char *get_opt_value(char *buf, int buf_size, const char *p)
1831
{
1832
    char *q;
1833

    
1834
    q = buf;
1835
    while (*p != '\0') {
1836
        if (*p == ',') {
1837
            if (*(p + 1) != ',')
1838
                break;
1839
            p++;
1840
        }
1841
        if (q && (q - buf) < buf_size - 1)
1842
            *q++ = *p;
1843
        p++;
1844
    }
1845
    if (q)
1846
        *q = '\0';
1847

    
1848
    return p;
1849
}
1850

    
1851
int get_param_value(char *buf, int buf_size,
1852
                    const char *tag, const char *str)
1853
{
1854
    const char *p;
1855
    char option[128];
1856

    
1857
    p = str;
1858
    for(;;) {
1859
        p = get_opt_name(option, sizeof(option), p, '=');
1860
        if (*p != '=')
1861
            break;
1862
        p++;
1863
        if (!strcmp(tag, option)) {
1864
            (void)get_opt_value(buf, buf_size, p);
1865
            return strlen(buf);
1866
        } else {
1867
            p = get_opt_value(NULL, 0, p);
1868
        }
1869
        if (*p != ',')
1870
            break;
1871
        p++;
1872
    }
1873
    return 0;
1874
}
1875

    
1876
int check_params(const char * const *params, const char *str)
1877
{
1878
    int name_buf_size = 1;
1879
    const char *p;
1880
    char *name_buf;
1881
    int i, len;
1882
    int ret = 0;
1883

    
1884
    for (i = 0; params[i] != NULL; i++) {
1885
        len = strlen(params[i]) + 1;
1886
        if (len > name_buf_size) {
1887
            name_buf_size = len;
1888
        }
1889
    }
1890
    name_buf = qemu_malloc(name_buf_size);
1891

    
1892
    p = str;
1893
    while (*p != '\0') {
1894
        p = get_opt_name(name_buf, name_buf_size, p, '=');
1895
        if (*p != '=') {
1896
            ret = -1;
1897
            break;
1898
        }
1899
        p++;
1900
        for(i = 0; params[i] != NULL; i++)
1901
            if (!strcmp(params[i], name_buf))
1902
                break;
1903
        if (params[i] == NULL) {
1904
            ret = -1;
1905
            break;
1906
        }
1907
        p = get_opt_value(NULL, 0, p);
1908
        if (*p != ',')
1909
            break;
1910
        p++;
1911
    }
1912

    
1913
    qemu_free(name_buf);
1914
    return ret;
1915
}
1916

    
1917
/***********************************************************/
1918
/* Bluetooth support */
1919
static int nb_hcis;
1920
static int cur_hci;
1921
static struct HCIInfo *hci_table[MAX_NICS];
1922

    
1923
static struct bt_vlan_s {
1924
    struct bt_scatternet_s net;
1925
    int id;
1926
    struct bt_vlan_s *next;
1927
} *first_bt_vlan;
1928

    
1929
/* find or alloc a new bluetooth "VLAN" */
1930
static struct bt_scatternet_s *qemu_find_bt_vlan(int id)
1931
{
1932
    struct bt_vlan_s **pvlan, *vlan;
1933
    for (vlan = first_bt_vlan; vlan != NULL; vlan = vlan->next) {
1934
        if (vlan->id == id)
1935
            return &vlan->net;
1936
    }
1937
    vlan = qemu_mallocz(sizeof(struct bt_vlan_s));
1938
    vlan->id = id;
1939
    pvlan = &first_bt_vlan;
1940
    while (*pvlan != NULL)
1941
        pvlan = &(*pvlan)->next;
1942
    *pvlan = vlan;
1943
    return &vlan->net;
1944
}
1945

    
1946
static void null_hci_send(struct HCIInfo *hci, const uint8_t *data, int len)
1947
{
1948
}
1949

    
1950
static int null_hci_addr_set(struct HCIInfo *hci, const uint8_t *bd_addr)
1951
{
1952
    return -ENOTSUP;
1953
}
1954

    
1955
static struct HCIInfo null_hci = {
1956
    .cmd_send = null_hci_send,
1957
    .sco_send = null_hci_send,
1958
    .acl_send = null_hci_send,
1959
    .bdaddr_set = null_hci_addr_set,
1960
};
1961

    
1962
struct HCIInfo *qemu_next_hci(void)
1963
{
1964
    if (cur_hci == nb_hcis)
1965
        return &null_hci;
1966

    
1967
    return hci_table[cur_hci++];
1968
}
1969

    
1970
static struct HCIInfo *hci_init(const char *str)
1971
{
1972
    char *endp;
1973
    struct bt_scatternet_s *vlan = 0;
1974

    
1975
    if (!strcmp(str, "null"))
1976
        /* null */
1977
        return &null_hci;
1978
    else if (!strncmp(str, "host", 4) && (str[4] == '\0' || str[4] == ':'))
1979
        /* host[:hciN] */
1980
        return bt_host_hci(str[4] ? str + 5 : "hci0");
1981
    else if (!strncmp(str, "hci", 3)) {
1982
        /* hci[,vlan=n] */
1983
        if (str[3]) {
1984
            if (!strncmp(str + 3, ",vlan=", 6)) {
1985
                vlan = qemu_find_bt_vlan(strtol(str + 9, &endp, 0));
1986
                if (*endp)
1987
                    vlan = 0;
1988
            }
1989
        } else
1990
            vlan = qemu_find_bt_vlan(0);
1991
        if (vlan)
1992
           return bt_new_hci(vlan);
1993
    }
1994

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

    
1997
    return 0;
1998
}
1999

    
2000
static int bt_hci_parse(const char *str)
2001
{
2002
    struct HCIInfo *hci;
2003
    bdaddr_t bdaddr;
2004

    
2005
    if (nb_hcis >= MAX_NICS) {
2006
        fprintf(stderr, "qemu: Too many bluetooth HCIs (max %i).\n", MAX_NICS);
2007
        return -1;
2008
    }
2009

    
2010
    hci = hci_init(str);
2011
    if (!hci)
2012
        return -1;
2013

    
2014
    bdaddr.b[0] = 0x52;
2015
    bdaddr.b[1] = 0x54;
2016
    bdaddr.b[2] = 0x00;
2017
    bdaddr.b[3] = 0x12;
2018
    bdaddr.b[4] = 0x34;
2019
    bdaddr.b[5] = 0x56 + nb_hcis;
2020
    hci->bdaddr_set(hci, bdaddr.b);
2021

    
2022
    hci_table[nb_hcis++] = hci;
2023

    
2024
    return 0;
2025
}
2026

    
2027
static void bt_vhci_add(int vlan_id)
2028
{
2029
    struct bt_scatternet_s *vlan = qemu_find_bt_vlan(vlan_id);
2030

    
2031
    if (!vlan->slave)
2032
        fprintf(stderr, "qemu: warning: adding a VHCI to "
2033
                        "an empty scatternet %i\n", vlan_id);
2034

    
2035
    bt_vhci_init(bt_new_hci(vlan));
2036
}
2037

    
2038
static struct bt_device_s *bt_device_add(const char *opt)
2039
{
2040
    struct bt_scatternet_s *vlan;
2041
    int vlan_id = 0;
2042
    char *endp = strstr(opt, ",vlan=");
2043
    int len = (endp ? endp - opt : strlen(opt)) + 1;
2044
    char devname[10];
2045

    
2046
    pstrcpy(devname, MIN(sizeof(devname), len), opt);
2047

    
2048
    if (endp) {
2049
        vlan_id = strtol(endp + 6, &endp, 0);
2050
        if (*endp) {
2051
            fprintf(stderr, "qemu: unrecognised bluetooth vlan Id\n");
2052
            return 0;
2053
        }
2054
    }
2055

    
2056
    vlan = qemu_find_bt_vlan(vlan_id);
2057

    
2058
    if (!vlan->slave)
2059
        fprintf(stderr, "qemu: warning: adding a slave device to "
2060
                        "an empty scatternet %i\n", vlan_id);
2061

    
2062
    if (!strcmp(devname, "keyboard"))
2063
        return bt_keyboard_init(vlan);
2064

    
2065
    fprintf(stderr, "qemu: unsupported bluetooth device `%s'\n", devname);
2066
    return 0;
2067
}
2068

    
2069
static int bt_parse(const char *opt)
2070
{
2071
    const char *endp, *p;
2072
    int vlan;
2073

    
2074
    if (strstart(opt, "hci", &endp)) {
2075
        if (!*endp || *endp == ',') {
2076
            if (*endp)
2077
                if (!strstart(endp, ",vlan=", 0))
2078
                    opt = endp + 1;
2079

    
2080
            return bt_hci_parse(opt);
2081
       }
2082
    } else if (strstart(opt, "vhci", &endp)) {
2083
        if (!*endp || *endp == ',') {
2084
            if (*endp) {
2085
                if (strstart(endp, ",vlan=", &p)) {
2086
                    vlan = strtol(p, (char **) &endp, 0);
2087
                    if (*endp) {
2088
                        fprintf(stderr, "qemu: bad scatternet '%s'\n", p);
2089
                        return 1;
2090
                    }
2091
                } else {
2092
                    fprintf(stderr, "qemu: bad parameter '%s'\n", endp + 1);
2093
                    return 1;
2094
                }
2095
            } else
2096
                vlan = 0;
2097

    
2098
            bt_vhci_add(vlan);
2099
            return 0;
2100
        }
2101
    } else if (strstart(opt, "device:", &endp))
2102
        return !bt_device_add(endp);
2103

    
2104
    fprintf(stderr, "qemu: bad bluetooth parameter '%s'\n", opt);
2105
    return 1;
2106
}
2107

    
2108
/***********************************************************/
2109
/* QEMU Block devices */
2110

    
2111
#define HD_ALIAS "index=%d,media=disk"
2112
#define CDROM_ALIAS "index=2,media=cdrom"
2113
#define FD_ALIAS "index=%d,if=floppy"
2114
#define PFLASH_ALIAS "if=pflash"
2115
#define MTD_ALIAS "if=mtd"
2116
#define SD_ALIAS "index=0,if=sd"
2117

    
2118
static int drive_opt_get_free_idx(void)
2119
{
2120
    int index;
2121

    
2122
    for (index = 0; index < MAX_DRIVES; index++)
2123
        if (!drives_opt[index].used) {
2124
            drives_opt[index].used = 1;
2125
            return index;
2126
        }
2127

    
2128
    return -1;
2129
}
2130

    
2131
static int drive_get_free_idx(void)
2132
{
2133
    int index;
2134

    
2135
    for (index = 0; index < MAX_DRIVES; index++)
2136
        if (!drives_table[index].used) {
2137
            drives_table[index].used = 1;
2138
            return index;
2139
        }
2140

    
2141
    return -1;
2142
}
2143

    
2144
int drive_add(const char *file, const char *fmt, ...)
2145
{
2146
    va_list ap;
2147
    int index = drive_opt_get_free_idx();
2148

    
2149
    if (nb_drives_opt >= MAX_DRIVES || index == -1) {
2150
        fprintf(stderr, "qemu: too many drives\n");
2151
        return -1;
2152
    }
2153

    
2154
    drives_opt[index].file = file;
2155
    va_start(ap, fmt);
2156
    vsnprintf(drives_opt[index].opt,
2157
              sizeof(drives_opt[0].opt), fmt, ap);
2158
    va_end(ap);
2159

    
2160
    nb_drives_opt++;
2161
    return index;
2162
}
2163

    
2164
void drive_remove(int index)
2165
{
2166
    drives_opt[index].used = 0;
2167
    nb_drives_opt--;
2168
}
2169

    
2170
int drive_get_index(BlockInterfaceType type, int bus, int unit)
2171
{
2172
    int index;
2173

    
2174
    /* seek interface, bus and unit */
2175

    
2176
    for (index = 0; index < MAX_DRIVES; index++)
2177
        if (drives_table[index].type == type &&
2178
            drives_table[index].bus == bus &&
2179
            drives_table[index].unit == unit &&
2180
            drives_table[index].used)
2181
        return index;
2182

    
2183
    return -1;
2184
}
2185

    
2186
int drive_get_max_bus(BlockInterfaceType type)
2187
{
2188
    int max_bus;
2189
    int index;
2190

    
2191
    max_bus = -1;
2192
    for (index = 0; index < nb_drives; index++) {
2193
        if(drives_table[index].type == type &&
2194
           drives_table[index].bus > max_bus)
2195
            max_bus = drives_table[index].bus;
2196
    }
2197
    return max_bus;
2198
}
2199

    
2200
const char *drive_get_serial(BlockDriverState *bdrv)
2201
{
2202
    int index;
2203

    
2204
    for (index = 0; index < nb_drives; index++)
2205
        if (drives_table[index].bdrv == bdrv)
2206
            return drives_table[index].serial;
2207

    
2208
    return "\0";
2209
}
2210

    
2211
BlockInterfaceErrorAction drive_get_onerror(BlockDriverState *bdrv)
2212
{
2213
    int index;
2214

    
2215
    for (index = 0; index < nb_drives; index++)
2216
        if (drives_table[index].bdrv == bdrv)
2217
            return drives_table[index].onerror;
2218

    
2219
    return BLOCK_ERR_STOP_ENOSPC;
2220
}
2221

    
2222
static void bdrv_format_print(void *opaque, const char *name)
2223
{
2224
    fprintf(stderr, " %s", name);
2225
}
2226

    
2227
void drive_uninit(BlockDriverState *bdrv)
2228
{
2229
    int i;
2230

    
2231
    for (i = 0; i < MAX_DRIVES; i++)
2232
        if (drives_table[i].bdrv == bdrv) {
2233
            drives_table[i].bdrv = NULL;
2234
            drives_table[i].used = 0;
2235
            drive_remove(drives_table[i].drive_opt_idx);
2236
            nb_drives--;
2237
            break;
2238
        }
2239
}
2240

    
2241
int drive_init(struct drive_opt *arg, int snapshot, void *opaque)
2242
{
2243
    char buf[128];
2244
    char file[1024];
2245
    char devname[128];
2246
    char serial[21];
2247
    const char *mediastr = "";
2248
    BlockInterfaceType type;
2249
    enum { MEDIA_DISK, MEDIA_CDROM } media;
2250
    int bus_id, unit_id;
2251
    int cyls, heads, secs, translation;
2252
    BlockDriverState *bdrv;
2253
    BlockDriver *drv = NULL;
2254
    QEMUMachine *machine = opaque;
2255
    int max_devs;
2256
    int index;
2257
    int cache;
2258
    int bdrv_flags, onerror;
2259
    int drives_table_idx;
2260
    char *str = arg->opt;
2261
    static const char * const params[] = { "bus", "unit", "if", "index",
2262
                                           "cyls", "heads", "secs", "trans",
2263
                                           "media", "snapshot", "file",
2264
                                           "cache", "format", "serial", "werror",
2265
                                           NULL };
2266

    
2267
    if (check_params(params, str) < 0) {
2268
         fprintf(stderr, "qemu: unknown parameter '%s' in '%s'\n",
2269
                         buf, str);
2270
         return -1;
2271
    }
2272

    
2273
    file[0] = 0;
2274
    cyls = heads = secs = 0;
2275
    bus_id = 0;
2276
    unit_id = -1;
2277
    translation = BIOS_ATA_TRANSLATION_AUTO;
2278
    index = -1;
2279
    cache = 3;
2280

    
2281
    if (machine->use_scsi) {
2282
        type = IF_SCSI;
2283
        max_devs = MAX_SCSI_DEVS;
2284
        pstrcpy(devname, sizeof(devname), "scsi");
2285
    } else {
2286
        type = IF_IDE;
2287
        max_devs = MAX_IDE_DEVS;
2288
        pstrcpy(devname, sizeof(devname), "ide");
2289
    }
2290
    media = MEDIA_DISK;
2291

    
2292
    /* extract parameters */
2293

    
2294
    if (get_param_value(buf, sizeof(buf), "bus", str)) {
2295
        bus_id = strtol(buf, NULL, 0);
2296
        if (bus_id < 0) {
2297
            fprintf(stderr, "qemu: '%s' invalid bus id\n", str);
2298
            return -1;
2299
        }
2300
    }
2301

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

    
2310
    if (get_param_value(buf, sizeof(buf), "if", str)) {
2311
        pstrcpy(devname, sizeof(devname), buf);
2312
        if (!strcmp(buf, "ide")) {
2313
            type = IF_IDE;
2314
            max_devs = MAX_IDE_DEVS;
2315
        } else if (!strcmp(buf, "scsi")) {
2316
            type = IF_SCSI;
2317
            max_devs = MAX_SCSI_DEVS;
2318
        } else if (!strcmp(buf, "floppy")) {
2319
            type = IF_FLOPPY;
2320
            max_devs = 0;
2321
        } else if (!strcmp(buf, "pflash")) {
2322
            type = IF_PFLASH;
2323
            max_devs = 0;
2324
        } else if (!strcmp(buf, "mtd")) {
2325
            type = IF_MTD;
2326
            max_devs = 0;
2327
        } else if (!strcmp(buf, "sd")) {
2328
            type = IF_SD;
2329
            max_devs = 0;
2330
        } else if (!strcmp(buf, "virtio")) {
2331
            type = IF_VIRTIO;
2332
            max_devs = 0;
2333
        } else if (!strcmp(buf, "xen")) {
2334
            type = IF_XEN;
2335
            max_devs = 0;
2336
        } else {
2337
            fprintf(stderr, "qemu: '%s' unsupported bus type '%s'\n", str, buf);
2338
            return -1;
2339
        }
2340
    }
2341

    
2342
    if (get_param_value(buf, sizeof(buf), "index", str)) {
2343
        index = strtol(buf, NULL, 0);
2344
        if (index < 0) {
2345
            fprintf(stderr, "qemu: '%s' invalid index\n", str);
2346
            return -1;
2347
        }
2348
    }
2349

    
2350
    if (get_param_value(buf, sizeof(buf), "cyls", str)) {
2351
        cyls = strtol(buf, NULL, 0);
2352
    }
2353

    
2354
    if (get_param_value(buf, sizeof(buf), "heads", str)) {
2355
        heads = strtol(buf, NULL, 0);
2356
    }
2357

    
2358
    if (get_param_value(buf, sizeof(buf), "secs", str)) {
2359
        secs = strtol(buf, NULL, 0);
2360
    }
2361

    
2362
    if (cyls || heads || secs) {
2363
        if (cyls < 1 || cyls > 16383) {
2364
            fprintf(stderr, "qemu: '%s' invalid physical cyls number\n", str);
2365
            return -1;
2366
        }
2367
        if (heads < 1 || heads > 16) {
2368
            fprintf(stderr, "qemu: '%s' invalid physical heads number\n", str);
2369
            return -1;
2370
        }
2371
        if (secs < 1 || secs > 63) {
2372
            fprintf(stderr, "qemu: '%s' invalid physical secs number\n", str);
2373
            return -1;
2374
        }
2375
    }
2376

    
2377
    if (get_param_value(buf, sizeof(buf), "trans", str)) {
2378
        if (!cyls) {
2379
            fprintf(stderr,
2380
                    "qemu: '%s' trans must be used with cyls,heads and secs\n",
2381
                    str);
2382
            return -1;
2383
        }
2384
        if (!strcmp(buf, "none"))
2385
            translation = BIOS_ATA_TRANSLATION_NONE;
2386
        else if (!strcmp(buf, "lba"))
2387
            translation = BIOS_ATA_TRANSLATION_LBA;
2388
        else if (!strcmp(buf, "auto"))
2389
            translation = BIOS_ATA_TRANSLATION_AUTO;
2390
        else {
2391
            fprintf(stderr, "qemu: '%s' invalid translation type\n", str);
2392
            return -1;
2393
        }
2394
    }
2395

    
2396
    if (get_param_value(buf, sizeof(buf), "media", str)) {
2397
        if (!strcmp(buf, "disk")) {
2398
            media = MEDIA_DISK;
2399
        } else if (!strcmp(buf, "cdrom")) {
2400
            if (cyls || secs || heads) {
2401
                fprintf(stderr,
2402
                        "qemu: '%s' invalid physical CHS format\n", str);
2403
                return -1;
2404
            }
2405
            media = MEDIA_CDROM;
2406
        } else {
2407
            fprintf(stderr, "qemu: '%s' invalid media\n", str);
2408
            return -1;
2409
        }
2410
    }
2411

    
2412
    if (get_param_value(buf, sizeof(buf), "snapshot", str)) {
2413
        if (!strcmp(buf, "on"))
2414
            snapshot = 1;
2415
        else if (!strcmp(buf, "off"))
2416
            snapshot = 0;
2417
        else {
2418
            fprintf(stderr, "qemu: '%s' invalid snapshot option\n", str);
2419
            return -1;
2420
        }
2421
    }
2422

    
2423
    if (get_param_value(buf, sizeof(buf), "cache", str)) {
2424
        if (!strcmp(buf, "off") || !strcmp(buf, "none"))
2425
            cache = 0;
2426
        else if (!strcmp(buf, "writethrough"))
2427
            cache = 1;
2428
        else if (!strcmp(buf, "writeback"))
2429
            cache = 2;
2430
        else {
2431
           fprintf(stderr, "qemu: invalid cache option\n");
2432
           return -1;
2433
        }
2434
    }
2435

    
2436
    if (get_param_value(buf, sizeof(buf), "format", str)) {
2437
       if (strcmp(buf, "?") == 0) {
2438
            fprintf(stderr, "qemu: Supported formats:");
2439
            bdrv_iterate_format(bdrv_format_print, NULL);
2440
            fprintf(stderr, "\n");
2441
            return -1;
2442
        }
2443
        drv = bdrv_find_format(buf);
2444
        if (!drv) {
2445
            fprintf(stderr, "qemu: '%s' invalid format\n", buf);
2446
            return -1;
2447
        }
2448
    }
2449

    
2450
    if (arg->file == NULL)
2451
        get_param_value(file, sizeof(file), "file", str);
2452
    else
2453
        pstrcpy(file, sizeof(file), arg->file);
2454

    
2455
    if (!get_param_value(serial, sizeof(serial), "serial", str))
2456
            memset(serial, 0,  sizeof(serial));
2457

    
2458
    onerror = BLOCK_ERR_STOP_ENOSPC;
2459
    if (get_param_value(buf, sizeof(serial), "werror", str)) {
2460
        if (type != IF_IDE && type != IF_SCSI && type != IF_VIRTIO) {
2461
            fprintf(stderr, "werror is no supported by this format\n");
2462
            return -1;
2463
        }
2464
        if (!strcmp(buf, "ignore"))
2465
            onerror = BLOCK_ERR_IGNORE;
2466
        else if (!strcmp(buf, "enospc"))
2467
            onerror = BLOCK_ERR_STOP_ENOSPC;
2468
        else if (!strcmp(buf, "stop"))
2469
            onerror = BLOCK_ERR_STOP_ANY;
2470
        else if (!strcmp(buf, "report"))
2471
            onerror = BLOCK_ERR_REPORT;
2472
        else {
2473
            fprintf(stderr, "qemu: '%s' invalid write error action\n", buf);
2474
            return -1;
2475
        }
2476
    }
2477

    
2478
    /* compute bus and unit according index */
2479

    
2480
    if (index != -1) {
2481
        if (bus_id != 0 || unit_id != -1) {
2482
            fprintf(stderr,
2483
                    "qemu: '%s' index cannot be used with bus and unit\n", str);
2484
            return -1;
2485
        }
2486
        if (max_devs == 0)
2487
        {
2488
            unit_id = index;
2489
            bus_id = 0;
2490
        } else {
2491
            unit_id = index % max_devs;
2492
            bus_id = index / max_devs;
2493
        }
2494
    }
2495

    
2496
    /* if user doesn't specify a unit_id,
2497
     * try to find the first free
2498
     */
2499

    
2500
    if (unit_id == -1) {
2501
       unit_id = 0;
2502
       while (drive_get_index(type, bus_id, unit_id) != -1) {
2503
           unit_id++;
2504
           if (max_devs && unit_id >= max_devs) {
2505
               unit_id -= max_devs;
2506
               bus_id++;
2507
           }
2508
       }
2509
    }
2510

    
2511
    /* check unit id */
2512

    
2513
    if (max_devs && unit_id >= max_devs) {
2514
        fprintf(stderr, "qemu: '%s' unit %d too big (max is %d)\n",
2515
                        str, unit_id, max_devs - 1);
2516
        return -1;
2517
    }
2518

    
2519
    /*
2520
     * ignore multiple definitions
2521
     */
2522

    
2523
    if (drive_get_index(type, bus_id, unit_id) != -1)
2524
        return -2;
2525

    
2526
    /* init */
2527

    
2528
    if (type == IF_IDE || type == IF_SCSI)
2529
        mediastr = (media == MEDIA_CDROM) ? "-cd" : "-hd";
2530
    if (max_devs)
2531
        snprintf(buf, sizeof(buf), "%s%i%s%i",
2532
                 devname, bus_id, mediastr, unit_id);
2533
    else
2534
        snprintf(buf, sizeof(buf), "%s%s%i",
2535
                 devname, mediastr, unit_id);
2536
    bdrv = bdrv_new(buf);
2537
    drives_table_idx = drive_get_free_idx();
2538
    drives_table[drives_table_idx].bdrv = bdrv;
2539
    drives_table[drives_table_idx].type = type;
2540
    drives_table[drives_table_idx].bus = bus_id;
2541
    drives_table[drives_table_idx].unit = unit_id;
2542
    drives_table[drives_table_idx].onerror = onerror;
2543
    drives_table[drives_table_idx].drive_opt_idx = arg - drives_opt;
2544
    strncpy(drives_table[drives_table_idx].serial, serial, sizeof(serial));
2545
    nb_drives++;
2546

    
2547
    switch(type) {
2548
    case IF_IDE:
2549
    case IF_SCSI:
2550
    case IF_XEN:
2551
        switch(media) {
2552
        case MEDIA_DISK:
2553
            if (cyls != 0) {
2554
                bdrv_set_geometry_hint(bdrv, cyls, heads, secs);
2555
                bdrv_set_translation_hint(bdrv, translation);
2556
            }
2557
            break;
2558
        case MEDIA_CDROM:
2559
            bdrv_set_type_hint(bdrv, BDRV_TYPE_CDROM);
2560
            break;
2561
        }
2562
        break;
2563
    case IF_SD:
2564
        /* FIXME: This isn't really a floppy, but it's a reasonable
2565
           approximation.  */
2566
    case IF_FLOPPY:
2567
        bdrv_set_type_hint(bdrv, BDRV_TYPE_FLOPPY);
2568
        break;
2569
    case IF_PFLASH:
2570
    case IF_MTD:
2571
    case IF_VIRTIO:
2572
        break;
2573
    case IF_COUNT:
2574
        abort();
2575
    }
2576
    if (!file[0])
2577
        return -2;
2578
    bdrv_flags = 0;
2579
    if (snapshot) {
2580
        bdrv_flags |= BDRV_O_SNAPSHOT;
2581
        cache = 2; /* always use write-back with snapshot */
2582
    }
2583
    if (cache == 0) /* no caching */
2584
        bdrv_flags |= BDRV_O_NOCACHE;
2585
    else if (cache == 2) /* write-back */
2586
        bdrv_flags |= BDRV_O_CACHE_WB;
2587
    else if (cache == 3) /* not specified */
2588
        bdrv_flags |= BDRV_O_CACHE_DEF;
2589
    if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0) {
2590
        fprintf(stderr, "qemu: could not open disk image %s\n",
2591
                        file);
2592
        return -1;
2593
    }
2594
    if (bdrv_key_required(bdrv))
2595
        autostart = 0;
2596
    return drives_table_idx;
2597
}
2598

    
2599
static void numa_add(const char *optarg)
2600
{
2601
    char option[128];
2602
    char *endptr;
2603
    unsigned long long value, endvalue;
2604
    int nodenr;
2605

    
2606
    optarg = get_opt_name(option, 128, optarg, ',') + 1;
2607
    if (!strcmp(option, "node")) {
2608
        if (get_param_value(option, 128, "nodeid", optarg) == 0) {
2609
            nodenr = nb_numa_nodes;
2610
        } else {
2611
            nodenr = strtoull(option, NULL, 10);
2612
        }
2613

    
2614
        if (get_param_value(option, 128, "mem", optarg) == 0) {
2615
            node_mem[nodenr] = 0;
2616
        } else {
2617
            value = strtoull(option, &endptr, 0);
2618
            switch (*endptr) {
2619
            case 0: case 'M': case 'm':
2620
                value <<= 20;
2621
                break;
2622
            case 'G': case 'g':
2623
                value <<= 30;
2624
                break;
2625
            }
2626
            node_mem[nodenr] = value;
2627
        }
2628
        if (get_param_value(option, 128, "cpus", optarg) == 0) {
2629
            node_cpumask[nodenr] = 0;
2630
        } else {
2631
            value = strtoull(option, &endptr, 10);
2632
            if (value >= 64) {
2633
                value = 63;
2634
                fprintf(stderr, "only 64 CPUs in NUMA mode supported.\n");
2635
            } else {
2636
                if (*endptr == '-') {
2637
                    endvalue = strtoull(endptr+1, &endptr, 10);
2638
                    if (endvalue >= 63) {
2639
                        endvalue = 62;
2640
                        fprintf(stderr,
2641
                            "only 63 CPUs in NUMA mode supported.\n");
2642
                    }
2643
                    value = (1 << (endvalue + 1)) - (1 << value);
2644
                } else {
2645
                    value = 1 << value;
2646
                }
2647
            }
2648
            node_cpumask[nodenr] = value;
2649
        }
2650
        nb_numa_nodes++;
2651
    }
2652
    return;
2653
}
2654

    
2655
/***********************************************************/
2656
/* USB devices */
2657

    
2658
static USBPort *used_usb_ports;
2659
static USBPort *free_usb_ports;
2660

    
2661
/* ??? Maybe change this to register a hub to keep track of the topology.  */
2662
void qemu_register_usb_port(USBPort *port, void *opaque, int index,
2663
                            usb_attachfn attach)
2664
{
2665
    port->opaque = opaque;
2666
    port->index = index;
2667
    port->attach = attach;
2668
    port->next = free_usb_ports;
2669
    free_usb_ports = port;
2670
}
2671

    
2672
int usb_device_add_dev(USBDevice *dev)
2673
{
2674
    USBPort *port;
2675

    
2676
    /* Find a USB port to add the device to.  */
2677
    port = free_usb_ports;
2678
    if (!port->next) {
2679
        USBDevice *hub;
2680

    
2681
        /* Create a new hub and chain it on.  */
2682
        free_usb_ports = NULL;
2683
        port->next = used_usb_ports;
2684
        used_usb_ports = port;
2685

    
2686
        hub = usb_hub_init(VM_USB_HUB_SIZE);
2687
        usb_attach(port, hub);
2688
        port = free_usb_ports;
2689
    }
2690

    
2691
    free_usb_ports = port->next;
2692
    port->next = used_usb_ports;
2693
    used_usb_ports = port;
2694
    usb_attach(port, dev);
2695
    return 0;
2696
}
2697

    
2698
static void usb_msd_password_cb(void *opaque, int err)
2699
{
2700
    USBDevice *dev = opaque;
2701

    
2702
    if (!err)
2703
        usb_device_add_dev(dev);
2704
    else
2705
        dev->handle_destroy(dev);
2706
}
2707

    
2708
static int usb_device_add(const char *devname, int is_hotplug)
2709
{
2710
    const char *p;
2711
    USBDevice *dev;
2712

    
2713
    if (!free_usb_ports)
2714
        return -1;
2715

    
2716
    if (strstart(devname, "host:", &p)) {
2717
        dev = usb_host_device_open(p);
2718
    } else if (!strcmp(devname, "mouse")) {
2719
        dev = usb_mouse_init();
2720
    } else if (!strcmp(devname, "tablet")) {
2721
        dev = usb_tablet_init();
2722
    } else if (!strcmp(devname, "keyboard")) {
2723
        dev = usb_keyboard_init();
2724
    } else if (strstart(devname, "disk:", &p)) {
2725
        BlockDriverState *bs;
2726

    
2727
        dev = usb_msd_init(p);
2728
        if (!dev)
2729
            return -1;
2730
        bs = usb_msd_get_bdrv(dev);
2731
        if (bdrv_key_required(bs)) {
2732
            autostart = 0;
2733
            if (is_hotplug) {
2734
                monitor_read_bdrv_key_start(cur_mon, bs, usb_msd_password_cb,
2735
                                            dev);
2736
                return 0;
2737
            }
2738
        }
2739
    } else if (!strcmp(devname, "wacom-tablet")) {
2740
        dev = usb_wacom_init();
2741
    } else if (strstart(devname, "serial:", &p)) {
2742
        dev = usb_serial_init(p);
2743
#ifdef CONFIG_BRLAPI
2744
    } else if (!strcmp(devname, "braille")) {
2745
        dev = usb_baum_init();
2746
#endif
2747
    } else if (strstart(devname, "net:", &p)) {
2748
        int nic = nb_nics;
2749

    
2750
        if (net_client_init("nic", p) < 0)
2751
            return -1;
2752
        nd_table[nic].model = "usb";
2753
        dev = usb_net_init(&nd_table[nic]);
2754
    } else if (!strcmp(devname, "bt") || strstart(devname, "bt:", &p)) {
2755
        dev = usb_bt_init(devname[2] ? hci_init(p) :
2756
                        bt_new_hci(qemu_find_bt_vlan(0)));
2757
    } else {
2758
        return -1;
2759
    }
2760
    if (!dev)
2761
        return -1;
2762

    
2763
    return usb_device_add_dev(dev);
2764
}
2765

    
2766
int usb_device_del_addr(int bus_num, int addr)
2767
{
2768
    USBPort *port;
2769
    USBPort **lastp;
2770
    USBDevice *dev;
2771

    
2772
    if (!used_usb_ports)
2773
        return -1;
2774

    
2775
    if (bus_num != 0)
2776
        return -1;
2777

    
2778
    lastp = &used_usb_ports;
2779
    port = used_usb_ports;
2780
    while (port && port->dev->addr != addr) {
2781
        lastp = &port->next;
2782
        port = port->next;
2783
    }
2784

    
2785
    if (!port)
2786
        return -1;
2787

    
2788
    dev = port->dev;
2789
    *lastp = port->next;
2790
    usb_attach(port, NULL);
2791
    dev->handle_destroy(dev);
2792
    port->next = free_usb_ports;
2793
    free_usb_ports = port;
2794
    return 0;
2795
}
2796

    
2797
static int usb_device_del(const char *devname)
2798
{
2799
    int bus_num, addr;
2800
    const char *p;
2801

    
2802
    if (strstart(devname, "host:", &p))
2803
        return usb_host_device_close(p);
2804

    
2805
    if (!used_usb_ports)
2806
        return -1;
2807

    
2808
    p = strchr(devname, '.');
2809
    if (!p)
2810
        return -1;
2811
    bus_num = strtoul(devname, NULL, 0);
2812
    addr = strtoul(p + 1, NULL, 0);
2813

    
2814
    return usb_device_del_addr(bus_num, addr);
2815
}
2816

    
2817
void do_usb_add(Monitor *mon, const char *devname)
2818
{
2819
    usb_device_add(devname, 1);
2820
}
2821

    
2822
void do_usb_del(Monitor *mon, const char *devname)
2823
{
2824
    usb_device_del(devname);
2825
}
2826

    
2827
void usb_info(Monitor *mon)
2828
{
2829
    USBDevice *dev;
2830
    USBPort *port;
2831
    const char *speed_str;
2832

    
2833
    if (!usb_enabled) {
2834
        monitor_printf(mon, "USB support not enabled\n");
2835
        return;
2836
    }
2837

    
2838
    for (port = used_usb_ports; port; port = port->next) {
2839
        dev = port->dev;
2840
        if (!dev)
2841
            continue;
2842
        switch(dev->speed) {
2843
        case USB_SPEED_LOW:
2844
            speed_str = "1.5";
2845
            break;
2846
        case USB_SPEED_FULL:
2847
            speed_str = "12";
2848
            break;
2849
        case USB_SPEED_HIGH:
2850
            speed_str = "480";
2851
            break;
2852
        default:
2853
            speed_str = "?";
2854
            break;
2855
        }
2856
        monitor_printf(mon, "  Device %d.%d, Speed %s Mb/s, Product %s\n",
2857
                       0, dev->addr, speed_str, dev->devname);
2858
    }
2859
}
2860

    
2861
/***********************************************************/
2862
/* PCMCIA/Cardbus */
2863

    
2864
static struct pcmcia_socket_entry_s {
2865
    PCMCIASocket *socket;
2866
    struct pcmcia_socket_entry_s *next;
2867
} *pcmcia_sockets = 0;
2868

    
2869
void pcmcia_socket_register(PCMCIASocket *socket)
2870
{
2871
    struct pcmcia_socket_entry_s *entry;
2872

    
2873
    entry = qemu_malloc(sizeof(struct pcmcia_socket_entry_s));
2874
    entry->socket = socket;
2875
    entry->next = pcmcia_sockets;
2876
    pcmcia_sockets = entry;
2877
}
2878

    
2879
void pcmcia_socket_unregister(PCMCIASocket *socket)
2880
{
2881
    struct pcmcia_socket_entry_s *entry, **ptr;
2882

    
2883
    ptr = &pcmcia_sockets;
2884
    for (entry = *ptr; entry; ptr = &entry->next, entry = *ptr)
2885
        if (entry->socket == socket) {
2886
            *ptr = entry->next;
2887
            qemu_free(entry);
2888
        }
2889
}
2890

    
2891
void pcmcia_info(Monitor *mon)
2892
{
2893
    struct pcmcia_socket_entry_s *iter;
2894

    
2895
    if (!pcmcia_sockets)
2896
        monitor_printf(mon, "No PCMCIA sockets\n");
2897

    
2898
    for (iter = pcmcia_sockets; iter; iter = iter->next)
2899
        monitor_printf(mon, "%s: %s\n", iter->socket->slot_string,
2900
                       iter->socket->attached ? iter->socket->card_string :
2901
                       "Empty");
2902
}
2903

    
2904
/***********************************************************/
2905
/* register display */
2906

    
2907
struct DisplayAllocator default_allocator = {
2908
    defaultallocator_create_displaysurface,
2909
    defaultallocator_resize_displaysurface,
2910
    defaultallocator_free_displaysurface
2911
};
2912

    
2913
void register_displaystate(DisplayState *ds)
2914
{
2915
    DisplayState **s;
2916
    s = &display_state;
2917
    while (*s != NULL)
2918
        s = &(*s)->next;
2919
    ds->next = NULL;
2920
    *s = ds;
2921
}
2922

    
2923
DisplayState *get_displaystate(void)
2924
{
2925
    return display_state;
2926
}
2927

    
2928
DisplayAllocator *register_displayallocator(DisplayState *ds, DisplayAllocator *da)
2929
{
2930
    if(ds->allocator ==  &default_allocator) ds->allocator = da;
2931
    return ds->allocator;
2932
}
2933

    
2934
/* dumb display */
2935

    
2936
static void dumb_display_init(void)
2937
{
2938
    DisplayState *ds = qemu_mallocz(sizeof(DisplayState));
2939
    ds->allocator = &default_allocator;
2940
    ds->surface = qemu_create_displaysurface(ds, 640, 480);
2941
    register_displaystate(ds);
2942
}
2943

    
2944
/***********************************************************/
2945
/* I/O handling */
2946

    
2947
typedef struct IOHandlerRecord {
2948
    int fd;
2949
    IOCanRWHandler *fd_read_poll;
2950
    IOHandler *fd_read;
2951
    IOHandler *fd_write;
2952
    int deleted;
2953
    void *opaque;
2954
    /* temporary data */
2955
    struct pollfd *ufd;
2956
    struct IOHandlerRecord *next;
2957
} IOHandlerRecord;
2958

    
2959
static IOHandlerRecord *first_io_handler;
2960

    
2961
/* XXX: fd_read_poll should be suppressed, but an API change is
2962
   necessary in the character devices to suppress fd_can_read(). */
2963
int qemu_set_fd_handler2(int fd,
2964
                         IOCanRWHandler *fd_read_poll,
2965
                         IOHandler *fd_read,
2966
                         IOHandler *fd_write,
2967
                         void *opaque)
2968
{
2969
    IOHandlerRecord **pioh, *ioh;
2970

    
2971
    if (!fd_read && !fd_write) {
2972
        pioh = &first_io_handler;
2973
        for(;;) {
2974
            ioh = *pioh;
2975
            if (ioh == NULL)
2976
                break;
2977
            if (ioh->fd == fd) {
2978
                ioh->deleted = 1;
2979
                break;
2980
            }
2981
            pioh = &ioh->next;
2982
        }
2983
    } else {
2984
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
2985
            if (ioh->fd == fd)
2986
                goto found;
2987
        }
2988
        ioh = qemu_mallocz(sizeof(IOHandlerRecord));
2989
        ioh->next = first_io_handler;
2990
        first_io_handler = ioh;
2991
    found:
2992
        ioh->fd = fd;
2993
        ioh->fd_read_poll = fd_read_poll;
2994
        ioh->fd_read = fd_read;
2995
        ioh->fd_write = fd_write;
2996
        ioh->opaque = opaque;
2997
        ioh->deleted = 0;
2998
    }
2999
    return 0;
3000
}
3001

    
3002
int qemu_set_fd_handler(int fd,
3003
                        IOHandler *fd_read,
3004
                        IOHandler *fd_write,
3005
                        void *opaque)
3006
{
3007
    return qemu_set_fd_handler2(fd, NULL, fd_read, fd_write, opaque);
3008
}
3009

    
3010
#ifdef _WIN32
3011
/***********************************************************/
3012
/* Polling handling */
3013

    
3014
typedef struct PollingEntry {
3015
    PollingFunc *func;
3016
    void *opaque;
3017
    struct PollingEntry *next;
3018
} PollingEntry;
3019

    
3020
static PollingEntry *first_polling_entry;
3021

    
3022
int qemu_add_polling_cb(PollingFunc *func, void *opaque)
3023
{
3024
    PollingEntry **ppe, *pe;
3025
    pe = qemu_mallocz(sizeof(PollingEntry));
3026
    pe->func = func;
3027
    pe->opaque = opaque;
3028
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next);
3029
    *ppe = pe;
3030
    return 0;
3031
}
3032

    
3033
void qemu_del_polling_cb(PollingFunc *func, void *opaque)
3034
{
3035
    PollingEntry **ppe, *pe;
3036
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next) {
3037
        pe = *ppe;
3038
        if (pe->func == func && pe->opaque == opaque) {
3039
            *ppe = pe->next;
3040
            qemu_free(pe);
3041
            break;
3042
        }
3043
    }
3044
}
3045

    
3046
/***********************************************************/
3047
/* Wait objects support */
3048
typedef struct WaitObjects {
3049
    int num;
3050
    HANDLE events[MAXIMUM_WAIT_OBJECTS + 1];
3051
    WaitObjectFunc *func[MAXIMUM_WAIT_OBJECTS + 1];
3052
    void *opaque[MAXIMUM_WAIT_OBJECTS + 1];
3053
} WaitObjects;
3054

    
3055
static WaitObjects wait_objects = {0};
3056

    
3057
int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
3058
{
3059
    WaitObjects *w = &wait_objects;
3060

    
3061
    if (w->num >= MAXIMUM_WAIT_OBJECTS)
3062
        return -1;
3063
    w->events[w->num] = handle;
3064
    w->func[w->num] = func;
3065
    w->opaque[w->num] = opaque;
3066
    w->num++;
3067
    return 0;
3068
}
3069

    
3070
void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
3071
{
3072
    int i, found;
3073
    WaitObjects *w = &wait_objects;
3074

    
3075
    found = 0;
3076
    for (i = 0; i < w->num; i++) {
3077
        if (w->events[i] == handle)
3078
            found = 1;
3079
        if (found) {
3080
            w->events[i] = w->events[i + 1];
3081
            w->func[i] = w->func[i + 1];
3082
            w->opaque[i] = w->opaque[i + 1];
3083
        }
3084
    }
3085
    if (found)
3086
        w->num--;
3087
}
3088
#endif
3089

    
3090
/***********************************************************/
3091
/* ram save/restore */
3092

    
3093
static int ram_get_page(QEMUFile *f, uint8_t *buf, int len)
3094
{
3095
    int v;
3096

    
3097
    v = qemu_get_byte(f);
3098
    switch(v) {
3099
    case 0:
3100
        if (qemu_get_buffer(f, buf, len) != len)
3101
            return -EIO;
3102
        break;
3103
    case 1:
3104
        v = qemu_get_byte(f);
3105
        memset(buf, v, len);
3106
        break;
3107
    default:
3108
        return -EINVAL;
3109
    }
3110

    
3111
    if (qemu_file_has_error(f))
3112
        return -EIO;
3113

    
3114
    return 0;
3115
}
3116

    
3117
static int ram_load_v1(QEMUFile *f, void *opaque)
3118
{
3119
    int ret;
3120
    ram_addr_t i;
3121

    
3122
    if (qemu_get_be32(f) != last_ram_offset)
3123
        return -EINVAL;
3124
    for(i = 0; i < last_ram_offset; i+= TARGET_PAGE_SIZE) {
3125
        ret = ram_get_page(f, qemu_get_ram_ptr(i), TARGET_PAGE_SIZE);
3126
        if (ret)
3127
            return ret;
3128
    }
3129
    return 0;
3130
}
3131

    
3132
#define BDRV_HASH_BLOCK_SIZE 1024
3133
#define IOBUF_SIZE 4096
3134
#define RAM_CBLOCK_MAGIC 0xfabe
3135

    
3136
typedef struct RamDecompressState {
3137
    z_stream zstream;
3138
    QEMUFile *f;
3139
    uint8_t buf[IOBUF_SIZE];
3140
} RamDecompressState;
3141

    
3142
static int ram_decompress_open(RamDecompressState *s, QEMUFile *f)
3143
{
3144
    int ret;
3145
    memset(s, 0, sizeof(*s));
3146
    s->f = f;
3147
    ret = inflateInit(&s->zstream);
3148
    if (ret != Z_OK)
3149
        return -1;
3150
    return 0;
3151
}
3152

    
3153
static int ram_decompress_buf(RamDecompressState *s, uint8_t *buf, int len)
3154
{
3155
    int ret, clen;
3156

    
3157
    s->zstream.avail_out = len;
3158
    s->zstream.next_out = buf;
3159
    while (s->zstream.avail_out > 0) {
3160
        if (s->zstream.avail_in == 0) {
3161
            if (qemu_get_be16(s->f) != RAM_CBLOCK_MAGIC)
3162
                return -1;
3163
            clen = qemu_get_be16(s->f);
3164
            if (clen > IOBUF_SIZE)
3165
                return -1;
3166
            qemu_get_buffer(s->f, s->buf, clen);
3167
            s->zstream.avail_in = clen;
3168
            s->zstream.next_in = s->buf;
3169
        }
3170
        ret = inflate(&s->zstream, Z_PARTIAL_FLUSH);
3171
        if (ret != Z_OK && ret != Z_STREAM_END) {
3172
            return -1;
3173
        }
3174
    }
3175
    return 0;
3176
}
3177

    
3178
static void ram_decompress_close(RamDecompressState *s)
3179
{
3180
    inflateEnd(&s->zstream);
3181
}
3182

    
3183
#define RAM_SAVE_FLAG_FULL        0x01
3184
#define RAM_SAVE_FLAG_COMPRESS        0x02
3185
#define RAM_SAVE_FLAG_MEM_SIZE        0x04
3186
#define RAM_SAVE_FLAG_PAGE        0x08
3187
#define RAM_SAVE_FLAG_EOS        0x10
3188

    
3189
static int is_dup_page(uint8_t *page, uint8_t ch)
3190
{
3191
    uint32_t val = ch << 24 | ch << 16 | ch << 8 | ch;
3192
    uint32_t *array = (uint32_t *)page;
3193
    int i;
3194

    
3195
    for (i = 0; i < (TARGET_PAGE_SIZE / 4); i++) {
3196
        if (array[i] != val)
3197
            return 0;
3198
    }
3199

    
3200
    return 1;
3201
}
3202

    
3203
static int ram_save_block(QEMUFile *f)
3204
{
3205
    static ram_addr_t current_addr = 0;
3206
    ram_addr_t saved_addr = current_addr;
3207
    ram_addr_t addr = 0;
3208
    int found = 0;
3209

    
3210
    while (addr < last_ram_offset) {
3211
        if (cpu_physical_memory_get_dirty(current_addr, MIGRATION_DIRTY_FLAG)) {
3212
            uint8_t *p;
3213

    
3214
            cpu_physical_memory_reset_dirty(current_addr,
3215
                                            current_addr + TARGET_PAGE_SIZE,
3216
                                            MIGRATION_DIRTY_FLAG);
3217

    
3218
            p = qemu_get_ram_ptr(current_addr);
3219

    
3220
            if (is_dup_page(p, *p)) {
3221
                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_COMPRESS);
3222
                qemu_put_byte(f, *p);
3223
            } else {
3224
                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_PAGE);
3225
                qemu_put_buffer(f, p, TARGET_PAGE_SIZE);
3226
            }
3227

    
3228
            found = 1;
3229
            break;
3230
        }
3231
        addr += TARGET_PAGE_SIZE;
3232
        current_addr = (saved_addr + addr) % last_ram_offset;
3233
    }
3234

    
3235
    return found;
3236
}
3237

    
3238
static ram_addr_t ram_save_threshold = 10;
3239

    
3240
static ram_addr_t ram_save_remaining(void)
3241
{
3242
    ram_addr_t addr;
3243
    ram_addr_t count = 0;
3244

    
3245
    for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
3246
        if (cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
3247
            count++;
3248
    }
3249

    
3250
    return count;
3251
}
3252

    
3253
static int ram_save_live(QEMUFile *f, int stage, void *opaque)
3254
{
3255
    ram_addr_t addr;
3256

    
3257
    if (stage == 1) {
3258
        /* Make sure all dirty bits are set */
3259
        for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
3260
            if (!cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
3261
                cpu_physical_memory_set_dirty(addr);
3262
        }
3263
        
3264
        /* Enable dirty memory tracking */
3265
        cpu_physical_memory_set_dirty_tracking(1);
3266

    
3267
        qemu_put_be64(f, last_ram_offset | RAM_SAVE_FLAG_MEM_SIZE);
3268
    }
3269

    
3270
    while (!qemu_file_rate_limit(f)) {
3271
        int ret;
3272

    
3273
        ret = ram_save_block(f);
3274
        if (ret == 0) /* no more blocks */
3275
            break;
3276
    }
3277

    
3278
    /* try transferring iterative blocks of memory */
3279

    
3280
    if (stage == 3) {
3281

    
3282
        /* flush all remaining blocks regardless of rate limiting */
3283
        while (ram_save_block(f) != 0);
3284
        cpu_physical_memory_set_dirty_tracking(0);
3285
    }
3286

    
3287
    qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
3288

    
3289
    return (stage == 2) && (ram_save_remaining() < ram_save_threshold);
3290
}
3291

    
3292
static int ram_load_dead(QEMUFile *f, void *opaque)
3293
{
3294
    RamDecompressState s1, *s = &s1;
3295
    uint8_t buf[10];
3296
    ram_addr_t i;
3297

    
3298
    if (ram_decompress_open(s, f) < 0)
3299
        return -EINVAL;
3300
    for(i = 0; i < last_ram_offset; i+= BDRV_HASH_BLOCK_SIZE) {
3301
        if (ram_decompress_buf(s, buf, 1) < 0) {
3302
            fprintf(stderr, "Error while reading ram block header\n");
3303
            goto error;
3304
        }
3305
        if (buf[0] == 0) {
3306
            if (ram_decompress_buf(s, qemu_get_ram_ptr(i),
3307
                                   BDRV_HASH_BLOCK_SIZE) < 0) {
3308
                fprintf(stderr, "Error while reading ram block address=0x%08" PRIx64, (uint64_t)i);
3309
                goto error;
3310
            }
3311
        } else {
3312
        error:
3313
            printf("Error block header\n");
3314
            return -EINVAL;
3315
        }
3316
    }
3317
    ram_decompress_close(s);
3318

    
3319
    return 0;
3320
}
3321

    
3322
static int ram_load(QEMUFile *f, void *opaque, int version_id)
3323
{
3324
    ram_addr_t addr;
3325
    int flags;
3326

    
3327
    if (version_id == 1)
3328
        return ram_load_v1(f, opaque);
3329

    
3330
    if (version_id == 2) {
3331
        if (qemu_get_be32(f) != last_ram_offset)
3332
            return -EINVAL;
3333
        return ram_load_dead(f, opaque);
3334
    }
3335

    
3336
    if (version_id != 3)
3337
        return -EINVAL;
3338

    
3339
    do {
3340
        addr = qemu_get_be64(f);
3341

    
3342
        flags = addr & ~TARGET_PAGE_MASK;
3343
        addr &= TARGET_PAGE_MASK;
3344

    
3345
        if (flags & RAM_SAVE_FLAG_MEM_SIZE) {
3346
            if (addr != last_ram_offset)
3347
                return -EINVAL;
3348
        }
3349

    
3350
        if (flags & RAM_SAVE_FLAG_FULL) {
3351
            if (ram_load_dead(f, opaque) < 0)
3352
                return -EINVAL;
3353
        }
3354
        
3355
        if (flags & RAM_SAVE_FLAG_COMPRESS) {
3356
            uint8_t ch = qemu_get_byte(f);
3357
            memset(qemu_get_ram_ptr(addr), ch, TARGET_PAGE_SIZE);
3358
        } else if (flags & RAM_SAVE_FLAG_PAGE)
3359
            qemu_get_buffer(f, qemu_get_ram_ptr(addr), TARGET_PAGE_SIZE);
3360
    } while (!(flags & RAM_SAVE_FLAG_EOS));
3361

    
3362
    return 0;
3363
}
3364

    
3365
void qemu_service_io(void)
3366
{
3367
    qemu_notify_event();
3368
}
3369

    
3370
/***********************************************************/
3371
/* bottom halves (can be seen as timers which expire ASAP) */
3372

    
3373
struct QEMUBH {
3374
    QEMUBHFunc *cb;
3375
    void *opaque;
3376
    int scheduled;
3377
    int idle;
3378
    int deleted;
3379
    QEMUBH *next;
3380
};
3381

    
3382
static QEMUBH *first_bh = NULL;
3383

    
3384
QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque)
3385
{
3386
    QEMUBH *bh;
3387
    bh = qemu_mallocz(sizeof(QEMUBH));
3388
    bh->cb = cb;
3389
    bh->opaque = opaque;
3390
    bh->next = first_bh;
3391
    first_bh = bh;
3392
    return bh;
3393
}
3394

    
3395
int qemu_bh_poll(void)
3396
{
3397
    QEMUBH *bh, **bhp;
3398
    int ret;
3399

    
3400
    ret = 0;
3401
    for (bh = first_bh; bh; bh = bh->next) {
3402
        if (!bh->deleted && bh->scheduled) {
3403
            bh->scheduled = 0;
3404
            if (!bh->idle)
3405
                ret = 1;
3406
            bh->idle = 0;
3407
            bh->cb(bh->opaque);
3408
        }
3409
    }
3410

    
3411
    /* remove deleted bhs */
3412
    bhp = &first_bh;
3413
    while (*bhp) {
3414
        bh = *bhp;
3415
        if (bh->deleted) {
3416
            *bhp = bh->next;
3417
            qemu_free(bh);
3418
        } else
3419
            bhp = &bh->next;
3420
    }
3421

    
3422
    return ret;
3423
}
3424

    
3425
void qemu_bh_schedule_idle(QEMUBH *bh)
3426
{
3427
    if (bh->scheduled)
3428
        return;
3429
    bh->scheduled = 1;
3430
    bh->idle = 1;
3431
}
3432

    
3433
void qemu_bh_schedule(QEMUBH *bh)
3434
{
3435
    if (bh->scheduled)
3436
        return;
3437
    bh->scheduled = 1;
3438
    bh->idle = 0;
3439
    /* stop the currently executing CPU to execute the BH ASAP */
3440
    qemu_notify_event();
3441
}
3442

    
3443
void qemu_bh_cancel(QEMUBH *bh)
3444
{
3445
    bh->scheduled = 0;
3446
}
3447

    
3448
void qemu_bh_delete(QEMUBH *bh)
3449
{
3450
    bh->scheduled = 0;
3451
    bh->deleted = 1;
3452
}
3453

    
3454
static void qemu_bh_update_timeout(int *timeout)
3455
{
3456
    QEMUBH *bh;
3457

    
3458
    for (bh = first_bh; bh; bh = bh->next) {
3459
        if (!bh->deleted && bh->scheduled) {
3460
            if (bh->idle) {
3461
                /* idle bottom halves will be polled at least
3462
                 * every 10ms */
3463
                *timeout = MIN(10, *timeout);
3464
            } else {
3465
                /* non-idle bottom halves will be executed
3466
                 * immediately */
3467
                *timeout = 0;
3468
                break;
3469
            }
3470
        }
3471
    }
3472
}
3473

    
3474
/***********************************************************/
3475
/* machine registration */
3476

    
3477
static QEMUMachine *first_machine = NULL;
3478
QEMUMachine *current_machine = NULL;
3479

    
3480
int qemu_register_machine(QEMUMachine *m)
3481
{
3482
    QEMUMachine **pm;
3483
    pm = &first_machine;
3484
    while (*pm != NULL)
3485
        pm = &(*pm)->next;
3486
    m->next = NULL;
3487
    *pm = m;
3488
    return 0;
3489
}
3490

    
3491
static QEMUMachine *find_machine(const char *name)
3492
{
3493
    QEMUMachine *m;
3494

    
3495
    for(m = first_machine; m != NULL; m = m->next) {
3496
        if (!strcmp(m->name, name))
3497
            return m;
3498
    }
3499
    return NULL;
3500
}
3501

    
3502
/***********************************************************/
3503
/* main execution loop */
3504

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

    
3511
    dpy_refresh(ds);
3512

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

    
3522
static void nographic_update(void *opaque)
3523
{
3524
    uint64_t interval = GUI_REFRESH_INTERVAL;
3525

    
3526
    qemu_mod_timer(nographic_timer, interval + qemu_get_clock(rt_clock));
3527
}
3528

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

    
3535
static LIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head;
3536

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

    
3542
    e = qemu_mallocz(sizeof (*e));
3543

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

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

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

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

    
3565
static void resume_all_vcpus(void);
3566
static void pause_all_vcpus(void);
3567

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

    
3579
/* reset/shutdown handler */
3580

    
3581
typedef struct QEMUResetEntry {
3582
    QEMUResetHandler *func;
3583
    void *opaque;
3584
    struct QEMUResetEntry *next;
3585
} QEMUResetEntry;
3586

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
3835
#else /* CONFIG_IOTHREAD */
3836

    
3837
#include "qemu-thread.h"
3838

    
3839
QemuMutex qemu_global_mutex;
3840
static QemuMutex qemu_fair_mutex;
3841

    
3842
static QemuThread io_thread;
3843

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

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

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

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

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

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

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

    
3874
    return 0;
3875
}
3876

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

    
3882
    qemu_mutex_unlock(&qemu_global_mutex);
3883

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

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

    
3900
static int qemu_cpu_exec(CPUState *env);
3901

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

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

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

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

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

    
3924
    return NULL;
3925
}
3926

    
3927
static void tcg_cpu_exec(void);
3928

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

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

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

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

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

    
3951
    return NULL;
3952
}
3953

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
4045
    return 1;
4046
}
4047

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

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

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

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

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

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

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

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

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

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

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

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

    
4147
#endif
4148

    
4149

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

    
4156

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

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

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

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

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

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

    
4207
    qemu_bh_update_timeout(&timeout);
4208

    
4209
    host_main_loop_wait(&timeout);
4210

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

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

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

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

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

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

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

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

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

    
4300
}
4301

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

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

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

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

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

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

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

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

    
4390
static int qemu_calculate_timeout(void)
4391
{
4392
    int timeout;
4393

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

    
4436
    return timeout;
4437
}
4438

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

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

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

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

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

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

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

    
4542
#define HAS_ARG 0x0001
4543

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

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

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

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

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

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

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

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

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

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

    
4649
#endif /* HAS_AUDIO_CHOICE */
4650

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
4775
    return 0;
4776
}
4777

    
4778
#define MAX_NET_CLIENTS 32
4779

    
4780
#ifndef _WIN32
4781

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

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

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

    
4798
#endif
4799

    
4800
int main(int argc, char **argv, char **envp)
4801
{
4802
    const char *gdbstub_dev = NULL;
4803
    uint32_t boot_devices_bitmap = 0;
4804
    int i;
4805
    int snapshot, linux_boot, net_boot;
4806
    const char *initrd_filename;
4807
    const char *kernel_filename, *kernel_cmdline;
4808
    const char *boot_devices = "";
4809
    DisplayState *ds;
4810
    DisplayChangeListener *dcl;
4811
    int cyls, heads, secs, translation;
4812
    const char *net_clients[MAX_NET_CLIENTS];
4813
    int nb_net_clients;
4814
    const char *bt_opts[MAX_BT_CMDLINE];
4815
    int nb_bt_opts;
4816
    int hda_index;
4817
    int optind;
4818
    const char *r, *optarg;
4819
    CharDriverState *monitor_hd = NULL;
4820
    const char *monitor_device;
4821
    const char *serial_devices[MAX_SERIAL_PORTS];
4822
    int serial_device_index;
4823
    const char *parallel_devices[MAX_PARALLEL_PORTS];
4824
    int parallel_device_index;
4825
    const char *virtio_consoles[MAX_VIRTIO_CONSOLES];
4826
    int virtio_console_index;
4827
    const char *loadvm = NULL;
4828
    QEMUMachine *machine;
4829
    const char *cpu_model;
4830
    const char *usb_devices[MAX_USB_CMDLINE];
4831
    int usb_devices_index;
4832
#ifndef _WIN32
4833
    int fds[2];
4834
#endif
4835
    int tb_size;
4836
    const char *pid_file = NULL;
4837
    const char *incoming = NULL;
4838
#ifndef _WIN32
4839
    int fd = 0;
4840
    struct passwd *pwd = NULL;
4841
    const char *chroot_dir = NULL;
4842
    const char *run_as = NULL;
4843
#endif
4844
    CPUState *env;
4845

    
4846
    qemu_cache_utils_init(envp);
4847

    
4848
    LIST_INIT (&vm_change_state_head);
4849
#ifndef _WIN32
4850
    {
4851
        struct sigaction act;
4852
        sigfillset(&act.sa_mask);
4853
        act.sa_flags = 0;
4854
        act.sa_handler = SIG_IGN;
4855
        sigaction(SIGPIPE, &act, NULL);
4856
    }
4857
#else
4858
    SetConsoleCtrlHandler(qemu_ctrl_handler, TRUE);
4859
    /* Note: cpu_interrupt() is currently not SMP safe, so we force
4860
       QEMU to run on a single CPU */
4861
    {
4862
        HANDLE h;
4863
        DWORD mask, smask;
4864
        int i;
4865
        h = GetCurrentProcess();
4866
        if (GetProcessAffinityMask(h, &mask, &smask)) {
4867
            for(i = 0; i < 32; i++) {
4868
                if (mask & (1 << i))
4869
                    break;
4870
            }
4871
            if (i != 32) {
4872
                mask = 1 << i;
4873
                SetProcessAffinityMask(h, mask);
4874
            }
4875
        }
4876
    }
4877
#endif
4878

    
4879
    register_machines();
4880
    machine = first_machine;
4881
    cpu_model = NULL;
4882
    initrd_filename = NULL;
4883
    ram_size = 0;
4884
    snapshot = 0;
4885
    nographic = 0;
4886
    curses = 0;
4887
    kernel_filename = NULL;
4888
    kernel_cmdline = "";
4889
    cyls = heads = secs = 0;
4890
    translation = BIOS_ATA_TRANSLATION_AUTO;
4891
    monitor_device = "vc:80Cx24C";
4892

    
4893
    serial_devices[0] = "vc:80Cx24C";
4894
    for(i = 1; i < MAX_SERIAL_PORTS; i++)
4895
        serial_devices[i] = NULL;
4896
    serial_device_index = 0;
4897

    
4898
    parallel_devices[0] = "vc:80Cx24C";
4899
    for(i = 1; i < MAX_PARALLEL_PORTS; i++)
4900
        parallel_devices[i] = NULL;
4901
    parallel_device_index = 0;
4902

    
4903
    for(i = 0; i < MAX_VIRTIO_CONSOLES; i++)
4904
        virtio_consoles[i] = NULL;
4905
    virtio_console_index = 0;
4906

    
4907
    for (i = 0; i < MAX_NODES; i++) {
4908
        node_mem[i] = 0;
4909
        node_cpumask[i] = 0;
4910
    }
4911

    
4912
    usb_devices_index = 0;
4913

    
4914
    nb_net_clients = 0;
4915
    nb_bt_opts = 0;
4916
    nb_drives = 0;
4917
    nb_drives_opt = 0;
4918
    nb_numa_nodes = 0;
4919
    hda_index = -1;
4920

    
4921
    nb_nics = 0;
4922

    
4923
    tb_size = 0;
4924
    autostart= 1;
4925

    
4926
    register_watchdogs();
4927

    
4928
    optind = 1;
4929
    for(;;) {
4930
        if (optind >= argc)
4931
            break;
4932
        r = argv[optind];
4933
        if (r[0] != '-') {
4934
            hda_index = drive_add(argv[optind++], HD_ALIAS, 0);
4935
        } else {
4936
            const QEMUOption *popt;
4937

    
4938
            optind++;
4939
            /* Treat --foo the same as -foo.  */
4940
            if (r[1] == '-')
4941
                r++;
4942
            popt = qemu_options;
4943
            for(;;) {
4944
                if (!popt->name) {
4945
                    fprintf(stderr, "%s: invalid option -- '%s'\n",
4946
                            argv[0], r);
4947
                    exit(1);
4948
                }
4949
                if (!strcmp(popt->name, r + 1))
4950
                    break;
4951
                popt++;
4952
            }
4953
            if (popt->flags & HAS_ARG) {
4954
                if (optind >= argc) {
4955
                    fprintf(stderr, "%s: option '%s' requires an argument\n",
4956
                            argv[0], r);
4957
                    exit(1);
4958
                }
4959
                optarg = argv[optind++];
4960
            } else {
4961
                optarg = NULL;
4962
            }
4963

    
4964
            switch(popt->index) {
4965
            case QEMU_OPTION_M:
4966
                machine = find_machine(optarg);
4967
                if (!machine) {
4968
                    QEMUMachine *m;
4969
                    printf("Supported machines are:\n");
4970
                    for(m = first_machine; m != NULL; m = m->next) {
4971
                        printf("%-10s %s%s\n",
4972
                               m->name, m->desc,
4973
                               m == first_machine ? " (default)" : "");
4974
                    }
4975
                    exit(*optarg != '?');
4976
                }
4977
                break;
4978
            case QEMU_OPTION_cpu:
4979
                /* hw initialization will check this */
4980
                if (*optarg == '?') {
4981
/* XXX: implement xxx_cpu_list for targets that still miss it */
4982
#if defined(cpu_list)
4983
                    cpu_list(stdout, &fprintf);
4984
#endif
4985
                    exit(0);
4986
                } else {
4987
                    cpu_model = optarg;
4988
                }
4989
                break;
4990
            case QEMU_OPTION_initrd:
4991
                initrd_filename = optarg;
4992
                break;
4993
            case QEMU_OPTION_hda:
4994
                if (cyls == 0)
4995
                    hda_index = drive_add(optarg, HD_ALIAS, 0);
4996
                else
4997
                    hda_index = drive_add(optarg, HD_ALIAS
4998
                             ",cyls=%d,heads=%d,secs=%d%s",
4999
                             0, cyls, heads, secs,
5000
                             translation == BIOS_ATA_TRANSLATION_LBA ?
5001
                                 ",trans=lba" :
5002
                             translation == BIOS_ATA_TRANSLATION_NONE ?
5003
                                 ",trans=none" : "");
5004
                 break;
5005
            case QEMU_OPTION_hdb:
5006
            case QEMU_OPTION_hdc:
5007
            case QEMU_OPTION_hdd:
5008
                drive_add(optarg, HD_ALIAS, popt->index - QEMU_OPTION_hda);
5009
                break;
5010
            case QEMU_OPTION_drive:
5011
                drive_add(NULL, "%s", optarg);
5012
                break;
5013
            case QEMU_OPTION_mtdblock:
5014
                drive_add(optarg, MTD_ALIAS);
5015
                break;
5016
            case QEMU_OPTION_sd:
5017
                drive_add(optarg, SD_ALIAS);
5018
                break;
5019
            case QEMU_OPTION_pflash:
5020
                drive_add(optarg, PFLASH_ALIAS);
5021
                break;
5022
            case QEMU_OPTION_snapshot:
5023
                snapshot = 1;
5024
                break;
5025
            case QEMU_OPTION_hdachs:
5026
                {
5027
                    const char *p;
5028
                    p = optarg;
5029
                    cyls = strtol(p, (char **)&p, 0);
5030
                    if (cyls < 1 || cyls > 16383)
5031
                        goto chs_fail;
5032
                    if (*p != ',')
5033
                        goto chs_fail;
5034
                    p++;
5035
                    heads = strtol(p, (char **)&p, 0);
5036
                    if (heads < 1 || heads > 16)
5037
                        goto chs_fail;
5038
                    if (*p != ',')
5039
                        goto chs_fail;
5040
                    p++;
5041
                    secs = strtol(p, (char **)&p, 0);
5042
                    if (secs < 1 || secs > 63)
5043
                        goto chs_fail;
5044
                    if (*p == ',') {
5045
                        p++;
5046
                        if (!strcmp(p, "none"))
5047
                            translation = BIOS_ATA_TRANSLATION_NONE;
5048
                        else if (!strcmp(p, "lba"))
5049
                            translation = BIOS_ATA_TRANSLATION_LBA;
5050
                        else if (!strcmp(p, "auto"))
5051
                            translation = BIOS_ATA_TRANSLATION_AUTO;
5052
                        else
5053
                            goto chs_fail;
5054
                    } else if (*p != '\0') {
5055
                    chs_fail:
5056
                        fprintf(stderr, "qemu: invalid physical CHS format\n");
5057
                        exit(1);
5058
                    }
5059
                    if (hda_index != -1)
5060
                        snprintf(drives_opt[hda_index].opt,
5061
                                 sizeof(drives_opt[hda_index].opt),
5062
                                 HD_ALIAS ",cyls=%d,heads=%d,secs=%d%s",
5063
                                 0, cyls, heads, secs,
5064
                                 translation == BIOS_ATA_TRANSLATION_LBA ?
5065
                                         ",trans=lba" :
5066
                                 translation == BIOS_ATA_TRANSLATION_NONE ?
5067
                                     ",trans=none" : "");
5068
                }
5069
                break;
5070
            case QEMU_OPTION_numa:
5071
                if (nb_numa_nodes >= MAX_NODES) {
5072
                    fprintf(stderr, "qemu: too many NUMA nodes\n");
5073
                    exit(1);
5074
                }
5075
                numa_add(optarg);
5076
                break;
5077
            case QEMU_OPTION_nographic:
5078
                nographic = 1;
5079
                break;
5080
#ifdef CONFIG_CURSES
5081
            case QEMU_OPTION_curses:
5082
                curses = 1;
5083
                break;
5084
#endif
5085
            case QEMU_OPTION_portrait:
5086
                graphic_rotate = 1;
5087
                break;
5088
            case QEMU_OPTION_kernel:
5089
                kernel_filename = optarg;
5090
                break;
5091
            case QEMU_OPTION_append:
5092
                kernel_cmdline = optarg;
5093
                break;
5094
            case QEMU_OPTION_cdrom:
5095
                drive_add(optarg, CDROM_ALIAS);
5096
                break;
5097
            case QEMU_OPTION_boot:
5098
                boot_devices = optarg;
5099
                /* We just do some generic consistency checks */
5100
                {
5101
                    /* Could easily be extended to 64 devices if needed */
5102
                    const char *p;
5103
                    
5104
                    boot_devices_bitmap = 0;
5105
                    for (p = boot_devices; *p != '\0'; p++) {
5106
                        /* Allowed boot devices are:
5107
                         * a b     : floppy disk drives
5108
                         * c ... f : IDE disk drives
5109
                         * g ... m : machine implementation dependant drives
5110
                         * n ... p : network devices
5111
                         * It's up to each machine implementation to check
5112
                         * if the given boot devices match the actual hardware
5113
                         * implementation and firmware features.
5114
                         */
5115
                        if (*p < 'a' || *p > 'q') {
5116
                            fprintf(stderr, "Invalid boot device '%c'\n", *p);
5117
                            exit(1);
5118
                        }
5119
                        if (boot_devices_bitmap & (1 << (*p - 'a'))) {
5120
                            fprintf(stderr,
5121
                                    "Boot device '%c' was given twice\n",*p);
5122
                            exit(1);
5123
                        }
5124
                        boot_devices_bitmap |= 1 << (*p - 'a');
5125
                    }
5126
                }
5127
                break;
5128
            case QEMU_OPTION_fda:
5129
            case QEMU_OPTION_fdb:
5130
                drive_add(optarg, FD_ALIAS, popt->index - QEMU_OPTION_fda);
5131
                break;
5132
#ifdef TARGET_I386
5133
            case QEMU_OPTION_no_fd_bootchk:
5134
                fd_bootchk = 0;
5135
                break;
5136
#endif
5137
            case QEMU_OPTION_net:
5138
                if (nb_net_clients >= MAX_NET_CLIENTS) {
5139
                    fprintf(stderr, "qemu: too many network clients\n");
5140
                    exit(1);
5141
                }
5142
                net_clients[nb_net_clients] = optarg;
5143
                nb_net_clients++;
5144
                break;
5145
#ifdef CONFIG_SLIRP
5146
            case QEMU_OPTION_tftp:
5147
                tftp_prefix = optarg;
5148
                break;
5149
            case QEMU_OPTION_bootp:
5150
                bootp_filename = optarg;
5151
                break;
5152
#ifndef _WIN32
5153
            case QEMU_OPTION_smb:
5154
                net_slirp_smb(optarg);
5155
                break;
5156
#endif
5157
            case QEMU_OPTION_redir:
5158
                net_slirp_redir(NULL, optarg);
5159
                break;
5160
#endif
5161
            case QEMU_OPTION_bt:
5162
                if (nb_bt_opts >= MAX_BT_CMDLINE) {
5163
                    fprintf(stderr, "qemu: too many bluetooth options\n");
5164
                    exit(1);
5165
                }
5166
                bt_opts[nb_bt_opts++] = optarg;
5167
                break;
5168
#ifdef HAS_AUDIO
5169
            case QEMU_OPTION_audio_help:
5170
                AUD_help ();
5171
                exit (0);
5172
                break;
5173
            case QEMU_OPTION_soundhw:
5174
                select_soundhw (optarg);
5175
                break;
5176
#endif
5177
            case QEMU_OPTION_h:
5178
                help(0);
5179
                break;
5180
            case QEMU_OPTION_version:
5181
                version();
5182
                exit(0);
5183
                break;
5184
            case QEMU_OPTION_m: {
5185
                uint64_t value;
5186
                char *ptr;
5187

    
5188
                value = strtoul(optarg, &ptr, 10);
5189
                switch (*ptr) {
5190
                case 0: case 'M': case 'm':
5191
                    value <<= 20;
5192
                    break;
5193
                case 'G': case 'g':
5194
                    value <<= 30;
5195
                    break;
5196
                default:
5197
                    fprintf(stderr, "qemu: invalid ram size: %s\n", optarg);
5198
                    exit(1);
5199
                }
5200

    
5201
                /* On 32-bit hosts, QEMU is limited by virtual address space */
5202
                if (value > (2047 << 20)
5203
#ifndef CONFIG_KQEMU
5204
                    && HOST_LONG_BITS == 32
5205
#endif
5206
                    ) {
5207
                    fprintf(stderr, "qemu: at most 2047 MB RAM can be simulated\n");
5208
                    exit(1);
5209
                }
5210
                if (value != (uint64_t)(ram_addr_t)value) {
5211
                    fprintf(stderr, "qemu: ram size too large\n");
5212
                    exit(1);
5213
                }
5214
                ram_size = value;
5215
                break;
5216
            }
5217
            case QEMU_OPTION_d:
5218
                {
5219
                    int mask;
5220
                    const CPULogItem *item;
5221

    
5222
                    mask = cpu_str_to_log_mask(optarg);
5223
                    if (!mask) {
5224
                        printf("Log items (comma separated):\n");
5225
                    for(item = cpu_log_items; item->mask != 0; item++) {
5226
                        printf("%-10s %s\n", item->name, item->help);
5227
                    }
5228
                    exit(1);
5229
                    }
5230
                    cpu_set_log(mask);
5231
                }
5232
                break;
5233
            case QEMU_OPTION_s:
5234
                gdbstub_dev = "tcp::" DEFAULT_GDBSTUB_PORT;
5235
                break;
5236
            case QEMU_OPTION_gdb:
5237
                gdbstub_dev = optarg;
5238
                break;
5239
            case QEMU_OPTION_L:
5240
                bios_dir = optarg;
5241
                break;
5242
            case QEMU_OPTION_bios:
5243
                bios_name = optarg;
5244
                break;
5245
            case QEMU_OPTION_singlestep:
5246
                singlestep = 1;
5247
                break;
5248
            case QEMU_OPTION_S:
5249
                autostart = 0;
5250
                break;
5251
#ifndef _WIN32
5252
            case QEMU_OPTION_k:
5253
                keyboard_layout = optarg;
5254
                break;
5255
#endif
5256
            case QEMU_OPTION_localtime:
5257
                rtc_utc = 0;
5258
                break;
5259
            case QEMU_OPTION_vga:
5260
                select_vgahw (optarg);
5261
                break;
5262
#if defined(TARGET_PPC) || defined(TARGET_SPARC)
5263
            case QEMU_OPTION_g:
5264
                {
5265
                    const char *p;
5266
                    int w, h, depth;
5267
                    p = optarg;
5268
                    w = strtol(p, (char **)&p, 10);
5269
                    if (w <= 0) {
5270
                    graphic_error:
5271
                        fprintf(stderr, "qemu: invalid resolution or depth\n");
5272
                        exit(1);
5273
                    }
5274
                    if (*p != 'x')
5275
                        goto graphic_error;
5276
                    p++;
5277
                    h = strtol(p, (char **)&p, 10);
5278
                    if (h <= 0)
5279
                        goto graphic_error;
5280
                    if (*p == 'x') {
5281
                        p++;
5282
                        depth = strtol(p, (char **)&p, 10);
5283
                        if (depth != 8 && depth != 15 && depth != 16 &&
5284
                            depth != 24 && depth != 32)
5285
                            goto graphic_error;
5286
                    } else if (*p == '\0') {
5287
                        depth = graphic_depth;
5288
                    } else {
5289
                        goto graphic_error;
5290
                    }
5291

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

    
5565
#if defined(CONFIG_KVM) && defined(CONFIG_KQEMU)
5566
    if (kvm_allowed && kqemu_allowed) {
5567
        fprintf(stderr,
5568
                "You can not enable both KVM and kqemu at the same time\n");
5569
        exit(1);
5570
    }
5571
#endif
5572

    
5573
    machine->max_cpus = machine->max_cpus ?: 1; /* Default to UP */
5574
    if (smp_cpus > machine->max_cpus) {
5575
        fprintf(stderr, "Number of SMP cpus requested (%d), exceeds max cpus "
5576
                "supported by machine `%s' (%d)\n", smp_cpus,  machine->name,
5577
                machine->max_cpus);
5578
        exit(1);
5579
    }
5580

    
5581
    if (nographic) {
5582
       if (serial_device_index == 0)
5583
           serial_devices[0] = "stdio";
5584
       if (parallel_device_index == 0)
5585
           parallel_devices[0] = "null";
5586
       if (strncmp(monitor_device, "vc", 2) == 0)
5587
           monitor_device = "stdio";
5588
    }
5589

    
5590
#ifndef _WIN32
5591
    if (daemonize) {
5592
        pid_t pid;
5593

    
5594
        if (pipe(fds) == -1)
5595
            exit(1);
5596

    
5597
        pid = fork();
5598
        if (pid > 0) {
5599
            uint8_t status;
5600
            ssize_t len;
5601

    
5602
            close(fds[1]);
5603

    
5604
        again:
5605
            len = read(fds[0], &status, 1);
5606
            if (len == -1 && (errno == EINTR))
5607
                goto again;
5608

    
5609
            if (len != 1)
5610
                exit(1);
5611
            else if (status == 1) {
5612
                fprintf(stderr, "Could not acquire pidfile\n");
5613
                exit(1);
5614
            } else
5615
                exit(0);
5616
        } else if (pid < 0)
5617
            exit(1);
5618

    
5619
        setsid();
5620

    
5621
        pid = fork();
5622
        if (pid > 0)
5623
            exit(0);
5624
        else if (pid < 0)
5625
            exit(1);
5626

    
5627
        umask(027);
5628

    
5629
        signal(SIGTSTP, SIG_IGN);
5630
        signal(SIGTTOU, SIG_IGN);
5631
        signal(SIGTTIN, SIG_IGN);
5632
    }
5633

    
5634
    if (pid_file && qemu_create_pidfile(pid_file) != 0) {
5635
        if (daemonize) {
5636
            uint8_t status = 1;
5637
            write(fds[1], &status, 1);
5638
        } else
5639
            fprintf(stderr, "Could not acquire pid file\n");
5640
        exit(1);
5641
    }
5642
#endif
5643

    
5644
#ifdef CONFIG_KQEMU
5645
    if (smp_cpus > 1)
5646
        kqemu_allowed = 0;
5647
#endif
5648
    if (qemu_init_main_loop()) {
5649
        fprintf(stderr, "qemu_init_main_loop failed\n");
5650
        exit(1);
5651
    }
5652
    linux_boot = (kernel_filename != NULL);
5653
    net_boot = (boot_devices_bitmap >> ('n' - 'a')) & 0xF;
5654

    
5655
    if (!linux_boot && *kernel_cmdline != '\0') {
5656
        fprintf(stderr, "-append only allowed with -kernel option\n");
5657
        exit(1);
5658
    }
5659

    
5660
    if (!linux_boot && initrd_filename != NULL) {
5661
        fprintf(stderr, "-initrd only allowed with -kernel option\n");
5662
        exit(1);
5663
    }
5664

    
5665
    /* boot to floppy or the default cd if no hard disk defined yet */
5666
    if (!boot_devices[0]) {
5667
        boot_devices = "cad";
5668
    }
5669
    setvbuf(stdout, NULL, _IOLBF, 0);
5670

    
5671
    init_timers();
5672
    if (init_timer_alarm() < 0) {
5673
        fprintf(stderr, "could not initialize alarm timer\n");
5674
        exit(1);
5675
    }
5676
    if (use_icount && icount_time_shift < 0) {
5677
        use_icount = 2;
5678
        /* 125MIPS seems a reasonable initial guess at the guest speed.
5679
           It will be corrected fairly quickly anyway.  */
5680
        icount_time_shift = 3;
5681
        init_icount_adjust();
5682
    }
5683

    
5684
#ifdef _WIN32
5685
    socket_init();
5686
#endif
5687

    
5688
    /* init network clients */
5689
    if (nb_net_clients == 0) {
5690
        /* if no clients, we use a default config */
5691
        net_clients[nb_net_clients++] = "nic";
5692
#ifdef CONFIG_SLIRP
5693
        net_clients[nb_net_clients++] = "user";
5694
#endif
5695
    }
5696

    
5697
    for(i = 0;i < nb_net_clients; i++) {
5698
        if (net_client_parse(net_clients[i]) < 0)
5699
            exit(1);
5700
    }
5701
    net_client_check();
5702

    
5703
#ifdef TARGET_I386
5704
    /* XXX: this should be moved in the PC machine instantiation code */
5705
    if (net_boot != 0) {
5706
        int netroms = 0;
5707
        for (i = 0; i < nb_nics && i < 4; i++) {
5708
            const char *model = nd_table[i].model;
5709
            char buf[1024];
5710
            if (net_boot & (1 << i)) {
5711
                if (model == NULL)
5712
                    model = "ne2k_pci";
5713
                snprintf(buf, sizeof(buf), "%s/pxe-%s.bin", bios_dir, model);
5714
                if (get_image_size(buf) > 0) {
5715
                    if (nb_option_roms >= MAX_OPTION_ROMS) {
5716
                        fprintf(stderr, "Too many option ROMs\n");
5717
                        exit(1);
5718
                    }
5719
                    option_rom[nb_option_roms] = strdup(buf);
5720
                    nb_option_roms++;
5721
                    netroms++;
5722
                }
5723
            }
5724
        }
5725
        if (netroms == 0) {
5726
            fprintf(stderr, "No valid PXE rom found for network device\n");
5727
            exit(1);
5728
        }
5729
    }
5730
#endif
5731

    
5732
    /* init the bluetooth world */
5733
    for (i = 0; i < nb_bt_opts; i++)
5734
        if (bt_parse(bt_opts[i]))
5735
            exit(1);
5736

    
5737
    /* init the memory */
5738
    if (ram_size == 0)
5739
        ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
5740

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

    
5754
    /* init the dynamic translator */
5755
    cpu_exec_init_all(tb_size * 1024 * 1024);
5756

    
5757
    bdrv_init();
5758
    dma_helper_init();
5759

    
5760
    /* we always create the cdrom drive, even if no disk is there */
5761

    
5762
    if (nb_drives_opt < MAX_DRIVES)
5763
        drive_add(NULL, CDROM_ALIAS);
5764

    
5765
    /* we always create at least one floppy */
5766

    
5767
    if (nb_drives_opt < MAX_DRIVES)
5768
        drive_add(NULL, FD_ALIAS, 0);
5769

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

    
5772
    if (nb_drives_opt < MAX_DRIVES)
5773
        drive_add(NULL, SD_ALIAS);
5774

    
5775
    /* open the virtual block devices */
5776

    
5777
    for(i = 0; i < nb_drives_opt; i++)
5778
        if (drive_init(&drives_opt[i], snapshot, machine) == -1)
5779
            exit(1);
5780

    
5781
    register_savevm("timer", 0, 2, timer_save, timer_load, NULL);
5782
    register_savevm_live("ram", 0, 3, ram_save_live, NULL, ram_load, NULL);
5783

    
5784
#ifndef _WIN32
5785
    /* must be after terminal init, SDL library changes signal handlers */
5786
    termsig_setup();
5787
#endif
5788

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

    
5804
    if (nb_numa_nodes > 0) {
5805
        int i;
5806

    
5807
        if (nb_numa_nodes > smp_cpus) {
5808
            nb_numa_nodes = smp_cpus;
5809
        }
5810

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

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

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

    
5846
    if (kvm_enabled()) {
5847
        int ret;
5848

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

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

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

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

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

    
5906
    module_call_init(MODULE_INIT_DEVICE);
5907

    
5908
    machine->init(ram_size, boot_devices,
5909
                  kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
5910

    
5911

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

    
5920
    current_machine = machine;
5921

    
5922
    /* Set KVM's vcpu state to qemu's initial CPUState. */
5923
    if (kvm_enabled()) {
5924
        int ret;
5925

    
5926
        ret = kvm_sync_vcpus();
5927
        if (ret < 0) {
5928
            fprintf(stderr, "failed to initialize vcpus\n");
5929
            exit(1);
5930
        }
5931
    }
5932

    
5933
    /* init USB devices */
5934
    if (usb_enabled) {
5935
        for(i = 0; i < usb_devices_index; i++) {
5936
            if (usb_device_add(usb_devices[i], 0) < 0) {
5937
                fprintf(stderr, "Warning: could not add USB device %s\n",
5938
                        usb_devices[i]);
5939
            }
5940
        }
5941
    }
5942

    
5943
    if (!display_state)
5944
        dumb_display_init();
5945
    /* just use the first displaystate for the moment */
5946
    ds = display_state;
5947
    /* terminal init */
5948
    if (nographic) {
5949
        if (curses) {
5950
            fprintf(stderr, "fatal: -nographic can't be used with -curses\n");
5951
            exit(1);
5952
        }
5953
    } else { 
5954
#if defined(CONFIG_CURSES)
5955
            if (curses) {
5956
                /* At the moment curses cannot be used with other displays */
5957
                curses_display_init(ds, full_screen);
5958
            } else
5959
#endif
5960
            {
5961
                if (vnc_display != NULL) {
5962
                    vnc_display_init(ds);
5963
                    if (vnc_display_open(ds, vnc_display) < 0)
5964
                        exit(1);
5965
                }
5966
#if defined(CONFIG_SDL)
5967
                if (sdl || !vnc_display)
5968
                    sdl_display_init(ds, full_screen, no_frame);
5969
#elif defined(CONFIG_COCOA)
5970
                if (sdl || !vnc_display)
5971
                    cocoa_display_init(ds, full_screen);
5972
#endif
5973
            }
5974
    }
5975
    dpy_resize(ds);
5976

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

    
5986
    if (nographic || (vnc_display && !sdl)) {
5987
        nographic_timer = qemu_new_timer(rt_clock, nographic_update, NULL);
5988
        qemu_mod_timer(nographic_timer, qemu_get_clock(rt_clock));
5989
    }
5990

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

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

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

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

    
6017
    for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
6018
        const char *devname = virtio_consoles[i];
6019
        if (virtcon_hds[i] && devname) {
6020
            char label[32];
6021
            snprintf(label, sizeof(label), "virtcon%d", i);
6022
            if (strstart(devname, "vc", 0))
6023
                qemu_chr_printf(virtcon_hds[i], "virtio console%d\r\n", i);
6024
        }
6025
    }
6026

    
6027
    if (gdbstub_dev && gdbserver_start(gdbstub_dev) < 0) {
6028
        fprintf(stderr, "qemu: could not open gdbserver on device '%s'\n",
6029
                gdbstub_dev);
6030
        exit(1);
6031
    }
6032

    
6033
    if (loadvm)
6034
        do_loadvm(cur_mon, loadvm);
6035

    
6036
    if (incoming) {
6037
        autostart = 0; /* fixme how to deal with -daemonize */
6038
        qemu_start_incoming_migration(incoming);
6039
    }
6040

    
6041
    if (autostart)
6042
        vm_start();
6043

    
6044
#ifndef _WIN32
6045
    if (daemonize) {
6046
        uint8_t status = 0;
6047
        ssize_t len;
6048

    
6049
    again1:
6050
        len = write(fds[1], &status, 1);
6051
        if (len == -1 && (errno == EINTR))
6052
            goto again1;
6053

    
6054
        if (len != 1)
6055
            exit(1);
6056

    
6057
        chdir("/");
6058
        TFR(fd = open("/dev/null", O_RDWR));
6059
        if (fd == -1)
6060
            exit(1);
6061
    }
6062

    
6063
    if (run_as) {
6064
        pwd = getpwnam(run_as);
6065
        if (!pwd) {
6066
            fprintf(stderr, "User \"%s\" doesn't exist\n", run_as);
6067
            exit(1);
6068
        }
6069
    }
6070

    
6071
    if (chroot_dir) {
6072
        if (chroot(chroot_dir) < 0) {
6073
            fprintf(stderr, "chroot failed\n");
6074
            exit(1);
6075
        }
6076
        chdir("/");
6077
    }
6078

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

    
6094
    if (daemonize) {
6095
        dup2(fd, 0);
6096
        dup2(fd, 1);
6097
        dup2(fd, 2);
6098

    
6099
        close(fd);
6100
    }
6101
#endif
6102

    
6103
    main_loop();
6104
    quit_timers();
6105
    net_cleanup();
6106

    
6107
    return 0;
6108
}