Statistics
| Branch: | Revision:

root / vl.c @ fbe1b595

History | View | Annotate | Download (154 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->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
        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
    ev.sigev_value.sival_int = 0;
1546
    ev.sigev_notify = SIGEV_SIGNAL;
1547
    ev.sigev_signo = SIGALRM;
1548

    
1549
    if (timer_create(CLOCK_REALTIME, &ev, &host_timer)) {
1550
        perror("timer_create");
1551

    
1552
        /* disable dynticks */
1553
        fprintf(stderr, "Dynamic Ticks disabled\n");
1554

    
1555
        return -1;
1556
    }
1557

    
1558
    t->priv = (void *)(long)host_timer;
1559

    
1560
    return 0;
1561
}
1562

    
1563
static void dynticks_stop_timer(struct qemu_alarm_timer *t)
1564
{
1565
    timer_t host_timer = (timer_t)(long)t->priv;
1566

    
1567
    timer_delete(host_timer);
1568
}
1569

    
1570
static void dynticks_rearm_timer(struct qemu_alarm_timer *t)
1571
{
1572
    timer_t host_timer = (timer_t)(long)t->priv;
1573
    struct itimerspec timeout;
1574
    int64_t nearest_delta_us = INT64_MAX;
1575
    int64_t current_us;
1576

    
1577
    if (!active_timers[QEMU_TIMER_REALTIME] &&
1578
                !active_timers[QEMU_TIMER_VIRTUAL])
1579
        return;
1580

    
1581
    nearest_delta_us = qemu_next_deadline_dyntick();
1582

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

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

    
1604
#endif /* defined(__linux__) */
1605

    
1606
static int unix_start_timer(struct qemu_alarm_timer *t)
1607
{
1608
    struct sigaction act;
1609
    struct itimerval itv;
1610
    int err;
1611

    
1612
    /* timer signal */
1613
    sigfillset(&act.sa_mask);
1614
    act.sa_flags = 0;
1615
    act.sa_handler = host_alarm_handler;
1616

    
1617
    sigaction(SIGALRM, &act, NULL);
1618

    
1619
    itv.it_interval.tv_sec = 0;
1620
    /* for i386 kernel 2.6 to get 1 ms */
1621
    itv.it_interval.tv_usec = 999;
1622
    itv.it_value.tv_sec = 0;
1623
    itv.it_value.tv_usec = 10 * 1000;
1624

    
1625
    err = setitimer(ITIMER_REAL, &itv, NULL);
1626
    if (err)
1627
        return -1;
1628

    
1629
    return 0;
1630
}
1631

    
1632
static void unix_stop_timer(struct qemu_alarm_timer *t)
1633
{
1634
    struct itimerval itv;
1635

    
1636
    memset(&itv, 0, sizeof(itv));
1637
    setitimer(ITIMER_REAL, &itv, NULL);
1638
}
1639

    
1640
#endif /* !defined(_WIN32) */
1641

    
1642

    
1643
#ifdef _WIN32
1644

    
1645
static int win32_start_timer(struct qemu_alarm_timer *t)
1646
{
1647
    TIMECAPS tc;
1648
    struct qemu_alarm_win32 *data = t->priv;
1649
    UINT flags;
1650

    
1651
    memset(&tc, 0, sizeof(tc));
1652
    timeGetDevCaps(&tc, sizeof(tc));
1653

    
1654
    if (data->period < tc.wPeriodMin)
1655
        data->period = tc.wPeriodMin;
1656

    
1657
    timeBeginPeriod(data->period);
1658

    
1659
    flags = TIME_CALLBACK_FUNCTION;
1660
    if (alarm_has_dynticks(t))
1661
        flags |= TIME_ONESHOT;
1662
    else
1663
        flags |= TIME_PERIODIC;
1664

    
1665
    data->timerId = timeSetEvent(1,         // interval (ms)
1666
                        data->period,       // resolution
1667
                        host_alarm_handler, // function
1668
                        (DWORD)t,           // parameter
1669
                        flags);
1670

    
1671
    if (!data->timerId) {
1672
        perror("Failed to initialize win32 alarm timer");
1673
        timeEndPeriod(data->period);
1674
        return -1;
1675
    }
1676

    
1677
    return 0;
1678
}
1679

    
1680
static void win32_stop_timer(struct qemu_alarm_timer *t)
1681
{
1682
    struct qemu_alarm_win32 *data = t->priv;
1683

    
1684
    timeKillEvent(data->timerId);
1685
    timeEndPeriod(data->period);
1686
}
1687

    
1688
static void win32_rearm_timer(struct qemu_alarm_timer *t)
1689
{
1690
    struct qemu_alarm_win32 *data = t->priv;
1691
    uint64_t nearest_delta_us;
1692

    
1693
    if (!active_timers[QEMU_TIMER_REALTIME] &&
1694
                !active_timers[QEMU_TIMER_VIRTUAL])
1695
        return;
1696

    
1697
    nearest_delta_us = qemu_next_deadline_dyntick();
1698
    nearest_delta_us /= 1000;
1699

    
1700
    timeKillEvent(data->timerId);
1701

    
1702
    data->timerId = timeSetEvent(1,
1703
                        data->period,
1704
                        host_alarm_handler,
1705
                        (DWORD)t,
1706
                        TIME_ONESHOT | TIME_PERIODIC);
1707

    
1708
    if (!data->timerId) {
1709
        perror("Failed to re-arm win32 alarm timer");
1710

    
1711
        timeEndPeriod(data->period);
1712
        exit(1);
1713
    }
1714
}
1715

    
1716
#endif /* _WIN32 */
1717

    
1718
static int init_timer_alarm(void)
1719
{
1720
    struct qemu_alarm_timer *t = NULL;
1721
    int i, err = -1;
1722

    
1723
    for (i = 0; alarm_timers[i].name; i++) {
1724
        t = &alarm_timers[i];
1725

    
1726
        err = t->start(t);
1727
        if (!err)
1728
            break;
1729
    }
1730

    
1731
    if (err) {
1732
        err = -ENOENT;
1733
        goto fail;
1734
    }
1735

    
1736
    alarm_timer = t;
1737

    
1738
    return 0;
1739

    
1740
fail:
1741
    return err;
1742
}
1743

    
1744
static void quit_timers(void)
1745
{
1746
    alarm_timer->stop(alarm_timer);
1747
    alarm_timer = NULL;
1748
}
1749

    
1750
/***********************************************************/
1751
/* host time/date access */
1752
void qemu_get_timedate(struct tm *tm, int offset)
1753
{
1754
    time_t ti;
1755
    struct tm *ret;
1756

    
1757
    time(&ti);
1758
    ti += offset;
1759
    if (rtc_date_offset == -1) {
1760
        if (rtc_utc)
1761
            ret = gmtime(&ti);
1762
        else
1763
            ret = localtime(&ti);
1764
    } else {
1765
        ti -= rtc_date_offset;
1766
        ret = gmtime(&ti);
1767
    }
1768

    
1769
    memcpy(tm, ret, sizeof(struct tm));
1770
}
1771

    
1772
int qemu_timedate_diff(struct tm *tm)
1773
{
1774
    time_t seconds;
1775

    
1776
    if (rtc_date_offset == -1)
1777
        if (rtc_utc)
1778
            seconds = mktimegm(tm);
1779
        else
1780
            seconds = mktime(tm);
1781
    else
1782
        seconds = mktimegm(tm) + rtc_date_offset;
1783

    
1784
    return seconds - time(NULL);
1785
}
1786

    
1787
#ifdef _WIN32
1788
static void socket_cleanup(void)
1789
{
1790
    WSACleanup();
1791
}
1792

    
1793
static int socket_init(void)
1794
{
1795
    WSADATA Data;
1796
    int ret, err;
1797

    
1798
    ret = WSAStartup(MAKEWORD(2,2), &Data);
1799
    if (ret != 0) {
1800
        err = WSAGetLastError();
1801
        fprintf(stderr, "WSAStartup: %d\n", err);
1802
        return -1;
1803
    }
1804
    atexit(socket_cleanup);
1805
    return 0;
1806
}
1807
#endif
1808

    
1809
const char *get_opt_name(char *buf, int buf_size, const char *p, char delim)
1810
{
1811
    char *q;
1812

    
1813
    q = buf;
1814
    while (*p != '\0' && *p != delim) {
1815
        if (q && (q - buf) < buf_size - 1)
1816
            *q++ = *p;
1817
        p++;
1818
    }
1819
    if (q)
1820
        *q = '\0';
1821

    
1822
    return p;
1823
}
1824

    
1825
const char *get_opt_value(char *buf, int buf_size, const char *p)
1826
{
1827
    char *q;
1828

    
1829
    q = buf;
1830
    while (*p != '\0') {
1831
        if (*p == ',') {
1832
            if (*(p + 1) != ',')
1833
                break;
1834
            p++;
1835
        }
1836
        if (q && (q - buf) < buf_size - 1)
1837
            *q++ = *p;
1838
        p++;
1839
    }
1840
    if (q)
1841
        *q = '\0';
1842

    
1843
    return p;
1844
}
1845

    
1846
int get_param_value(char *buf, int buf_size,
1847
                    const char *tag, const char *str)
1848
{
1849
    const char *p;
1850
    char option[128];
1851

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

    
1871
int check_params(const char * const *params, const char *str)
1872
{
1873
    int name_buf_size = 1;
1874
    const char *p;
1875
    char *name_buf;
1876
    int i, len;
1877
    int ret = 0;
1878

    
1879
    for (i = 0; params[i] != NULL; i++) {
1880
        len = strlen(params[i]) + 1;
1881
        if (len > name_buf_size) {
1882
            name_buf_size = len;
1883
        }
1884
    }
1885
    name_buf = qemu_malloc(name_buf_size);
1886

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

    
1908
    qemu_free(name_buf);
1909
    return ret;
1910
}
1911

    
1912
/***********************************************************/
1913
/* Bluetooth support */
1914
static int nb_hcis;
1915
static int cur_hci;
1916
static struct HCIInfo *hci_table[MAX_NICS];
1917

    
1918
static struct bt_vlan_s {
1919
    struct bt_scatternet_s net;
1920
    int id;
1921
    struct bt_vlan_s *next;
1922
} *first_bt_vlan;
1923

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

    
1941
static void null_hci_send(struct HCIInfo *hci, const uint8_t *data, int len)
1942
{
1943
}
1944

    
1945
static int null_hci_addr_set(struct HCIInfo *hci, const uint8_t *bd_addr)
1946
{
1947
    return -ENOTSUP;
1948
}
1949

    
1950
static struct HCIInfo null_hci = {
1951
    .cmd_send = null_hci_send,
1952
    .sco_send = null_hci_send,
1953
    .acl_send = null_hci_send,
1954
    .bdaddr_set = null_hci_addr_set,
1955
};
1956

    
1957
struct HCIInfo *qemu_next_hci(void)
1958
{
1959
    if (cur_hci == nb_hcis)
1960
        return &null_hci;
1961

    
1962
    return hci_table[cur_hci++];
1963
}
1964

    
1965
static struct HCIInfo *hci_init(const char *str)
1966
{
1967
    char *endp;
1968
    struct bt_scatternet_s *vlan = 0;
1969

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

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

    
1992
    return 0;
1993
}
1994

    
1995
static int bt_hci_parse(const char *str)
1996
{
1997
    struct HCIInfo *hci;
1998
    bdaddr_t bdaddr;
1999

    
2000
    if (nb_hcis >= MAX_NICS) {
2001
        fprintf(stderr, "qemu: Too many bluetooth HCIs (max %i).\n", MAX_NICS);
2002
        return -1;
2003
    }
2004

    
2005
    hci = hci_init(str);
2006
    if (!hci)
2007
        return -1;
2008

    
2009
    bdaddr.b[0] = 0x52;
2010
    bdaddr.b[1] = 0x54;
2011
    bdaddr.b[2] = 0x00;
2012
    bdaddr.b[3] = 0x12;
2013
    bdaddr.b[4] = 0x34;
2014
    bdaddr.b[5] = 0x56 + nb_hcis;
2015
    hci->bdaddr_set(hci, bdaddr.b);
2016

    
2017
    hci_table[nb_hcis++] = hci;
2018

    
2019
    return 0;
2020
}
2021

    
2022
static void bt_vhci_add(int vlan_id)
2023
{
2024
    struct bt_scatternet_s *vlan = qemu_find_bt_vlan(vlan_id);
2025

    
2026
    if (!vlan->slave)
2027
        fprintf(stderr, "qemu: warning: adding a VHCI to "
2028
                        "an empty scatternet %i\n", vlan_id);
2029

    
2030
    bt_vhci_init(bt_new_hci(vlan));
2031
}
2032

    
2033
static struct bt_device_s *bt_device_add(const char *opt)
2034
{
2035
    struct bt_scatternet_s *vlan;
2036
    int vlan_id = 0;
2037
    char *endp = strstr(opt, ",vlan=");
2038
    int len = (endp ? endp - opt : strlen(opt)) + 1;
2039
    char devname[10];
2040

    
2041
    pstrcpy(devname, MIN(sizeof(devname), len), opt);
2042

    
2043
    if (endp) {
2044
        vlan_id = strtol(endp + 6, &endp, 0);
2045
        if (*endp) {
2046
            fprintf(stderr, "qemu: unrecognised bluetooth vlan Id\n");
2047
            return 0;
2048
        }
2049
    }
2050

    
2051
    vlan = qemu_find_bt_vlan(vlan_id);
2052

    
2053
    if (!vlan->slave)
2054
        fprintf(stderr, "qemu: warning: adding a slave device to "
2055
                        "an empty scatternet %i\n", vlan_id);
2056

    
2057
    if (!strcmp(devname, "keyboard"))
2058
        return bt_keyboard_init(vlan);
2059

    
2060
    fprintf(stderr, "qemu: unsupported bluetooth device `%s'\n", devname);
2061
    return 0;
2062
}
2063

    
2064
static int bt_parse(const char *opt)
2065
{
2066
    const char *endp, *p;
2067
    int vlan;
2068

    
2069
    if (strstart(opt, "hci", &endp)) {
2070
        if (!*endp || *endp == ',') {
2071
            if (*endp)
2072
                if (!strstart(endp, ",vlan=", 0))
2073
                    opt = endp + 1;
2074

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

    
2093
            bt_vhci_add(vlan);
2094
            return 0;
2095
        }
2096
    } else if (strstart(opt, "device:", &endp))
2097
        return !bt_device_add(endp);
2098

    
2099
    fprintf(stderr, "qemu: bad bluetooth parameter '%s'\n", opt);
2100
    return 1;
2101
}
2102

    
2103
/***********************************************************/
2104
/* QEMU Block devices */
2105

    
2106
#define HD_ALIAS "index=%d,media=disk"
2107
#define CDROM_ALIAS "index=2,media=cdrom"
2108
#define FD_ALIAS "index=%d,if=floppy"
2109
#define PFLASH_ALIAS "if=pflash"
2110
#define MTD_ALIAS "if=mtd"
2111
#define SD_ALIAS "index=0,if=sd"
2112

    
2113
static int drive_opt_get_free_idx(void)
2114
{
2115
    int index;
2116

    
2117
    for (index = 0; index < MAX_DRIVES; index++)
2118
        if (!drives_opt[index].used) {
2119
            drives_opt[index].used = 1;
2120
            return index;
2121
        }
2122

    
2123
    return -1;
2124
}
2125

    
2126
static int drive_get_free_idx(void)
2127
{
2128
    int index;
2129

    
2130
    for (index = 0; index < MAX_DRIVES; index++)
2131
        if (!drives_table[index].used) {
2132
            drives_table[index].used = 1;
2133
            return index;
2134
        }
2135

    
2136
    return -1;
2137
}
2138

    
2139
int drive_add(const char *file, const char *fmt, ...)
2140
{
2141
    va_list ap;
2142
    int index = drive_opt_get_free_idx();
2143

    
2144
    if (nb_drives_opt >= MAX_DRIVES || index == -1) {
2145
        fprintf(stderr, "qemu: too many drives\n");
2146
        return -1;
2147
    }
2148

    
2149
    drives_opt[index].file = file;
2150
    va_start(ap, fmt);
2151
    vsnprintf(drives_opt[index].opt,
2152
              sizeof(drives_opt[0].opt), fmt, ap);
2153
    va_end(ap);
2154

    
2155
    nb_drives_opt++;
2156
    return index;
2157
}
2158

    
2159
void drive_remove(int index)
2160
{
2161
    drives_opt[index].used = 0;
2162
    nb_drives_opt--;
2163
}
2164

    
2165
int drive_get_index(BlockInterfaceType type, int bus, int unit)
2166
{
2167
    int index;
2168

    
2169
    /* seek interface, bus and unit */
2170

    
2171
    for (index = 0; index < MAX_DRIVES; index++)
2172
        if (drives_table[index].type == type &&
2173
            drives_table[index].bus == bus &&
2174
            drives_table[index].unit == unit &&
2175
            drives_table[index].used)
2176
        return index;
2177

    
2178
    return -1;
2179
}
2180

    
2181
int drive_get_max_bus(BlockInterfaceType type)
2182
{
2183
    int max_bus;
2184
    int index;
2185

    
2186
    max_bus = -1;
2187
    for (index = 0; index < nb_drives; index++) {
2188
        if(drives_table[index].type == type &&
2189
           drives_table[index].bus > max_bus)
2190
            max_bus = drives_table[index].bus;
2191
    }
2192
    return max_bus;
2193
}
2194

    
2195
const char *drive_get_serial(BlockDriverState *bdrv)
2196
{
2197
    int index;
2198

    
2199
    for (index = 0; index < nb_drives; index++)
2200
        if (drives_table[index].bdrv == bdrv)
2201
            return drives_table[index].serial;
2202

    
2203
    return "\0";
2204
}
2205

    
2206
BlockInterfaceErrorAction drive_get_onerror(BlockDriverState *bdrv)
2207
{
2208
    int index;
2209

    
2210
    for (index = 0; index < nb_drives; index++)
2211
        if (drives_table[index].bdrv == bdrv)
2212
            return drives_table[index].onerror;
2213

    
2214
    return BLOCK_ERR_STOP_ENOSPC;
2215
}
2216

    
2217
static void bdrv_format_print(void *opaque, const char *name)
2218
{
2219
    fprintf(stderr, " %s", name);
2220
}
2221

    
2222
void drive_uninit(BlockDriverState *bdrv)
2223
{
2224
    int i;
2225

    
2226
    for (i = 0; i < MAX_DRIVES; i++)
2227
        if (drives_table[i].bdrv == bdrv) {
2228
            drives_table[i].bdrv = NULL;
2229
            drives_table[i].used = 0;
2230
            drive_remove(drives_table[i].drive_opt_idx);
2231
            nb_drives--;
2232
            break;
2233
        }
2234
}
2235

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

    
2262
    if (check_params(params, str) < 0) {
2263
         fprintf(stderr, "qemu: unknown parameter '%s' in '%s'\n",
2264
                         buf, str);
2265
         return -1;
2266
    }
2267

    
2268
    file[0] = 0;
2269
    cyls = heads = secs = 0;
2270
    bus_id = 0;
2271
    unit_id = -1;
2272
    translation = BIOS_ATA_TRANSLATION_AUTO;
2273
    index = -1;
2274
    cache = 3;
2275

    
2276
    if (machine->use_scsi) {
2277
        type = IF_SCSI;
2278
        max_devs = MAX_SCSI_DEVS;
2279
        pstrcpy(devname, sizeof(devname), "scsi");
2280
    } else {
2281
        type = IF_IDE;
2282
        max_devs = MAX_IDE_DEVS;
2283
        pstrcpy(devname, sizeof(devname), "ide");
2284
    }
2285
    media = MEDIA_DISK;
2286

    
2287
    /* extract parameters */
2288

    
2289
    if (get_param_value(buf, sizeof(buf), "bus", str)) {
2290
        bus_id = strtol(buf, NULL, 0);
2291
        if (bus_id < 0) {
2292
            fprintf(stderr, "qemu: '%s' invalid bus id\n", str);
2293
            return -1;
2294
        }
2295
    }
2296

    
2297
    if (get_param_value(buf, sizeof(buf), "unit", str)) {
2298
        unit_id = strtol(buf, NULL, 0);
2299
        if (unit_id < 0) {
2300
            fprintf(stderr, "qemu: '%s' invalid unit id\n", str);
2301
            return -1;
2302
        }
2303
    }
2304

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

    
2337
    if (get_param_value(buf, sizeof(buf), "index", str)) {
2338
        index = strtol(buf, NULL, 0);
2339
        if (index < 0) {
2340
            fprintf(stderr, "qemu: '%s' invalid index\n", str);
2341
            return -1;
2342
        }
2343
    }
2344

    
2345
    if (get_param_value(buf, sizeof(buf), "cyls", str)) {
2346
        cyls = strtol(buf, NULL, 0);
2347
    }
2348

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

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

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

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

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

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

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

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

    
2445
    if (arg->file == NULL)
2446
        get_param_value(file, sizeof(file), "file", str);
2447
    else
2448
        pstrcpy(file, sizeof(file), arg->file);
2449

    
2450
    if (!get_param_value(serial, sizeof(serial), "serial", str))
2451
            memset(serial, 0,  sizeof(serial));
2452

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

    
2473
    /* compute bus and unit according index */
2474

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

    
2491
    /* if user doesn't specify a unit_id,
2492
     * try to find the first free
2493
     */
2494

    
2495
    if (unit_id == -1) {
2496
       unit_id = 0;
2497
       while (drive_get_index(type, bus_id, unit_id) != -1) {
2498
           unit_id++;
2499
           if (max_devs && unit_id >= max_devs) {
2500
               unit_id -= max_devs;
2501
               bus_id++;
2502
           }
2503
       }
2504
    }
2505

    
2506
    /* check unit id */
2507

    
2508
    if (max_devs && unit_id >= max_devs) {
2509
        fprintf(stderr, "qemu: '%s' unit %d too big (max is %d)\n",
2510
                        str, unit_id, max_devs - 1);
2511
        return -1;
2512
    }
2513

    
2514
    /*
2515
     * ignore multiple definitions
2516
     */
2517

    
2518
    if (drive_get_index(type, bus_id, unit_id) != -1)
2519
        return -2;
2520

    
2521
    /* init */
2522

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

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

    
2592
static void numa_add(const char *optarg)
2593
{
2594
    char option[128];
2595
    char *endptr;
2596
    unsigned long long value, endvalue;
2597
    int nodenr;
2598

    
2599
    optarg = get_opt_name(option, 128, optarg, ',') + 1;
2600
    if (!strcmp(option, "node")) {
2601
        if (get_param_value(option, 128, "nodeid", optarg) == 0) {
2602
            nodenr = nb_numa_nodes;
2603
        } else {
2604
            nodenr = strtoull(option, NULL, 10);
2605
        }
2606

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

    
2648
/***********************************************************/
2649
/* USB devices */
2650

    
2651
static USBPort *used_usb_ports;
2652
static USBPort *free_usb_ports;
2653

    
2654
/* ??? Maybe change this to register a hub to keep track of the topology.  */
2655
void qemu_register_usb_port(USBPort *port, void *opaque, int index,
2656
                            usb_attachfn attach)
2657
{
2658
    port->opaque = opaque;
2659
    port->index = index;
2660
    port->attach = attach;
2661
    port->next = free_usb_ports;
2662
    free_usb_ports = port;
2663
}
2664

    
2665
int usb_device_add_dev(USBDevice *dev)
2666
{
2667
    USBPort *port;
2668

    
2669
    /* Find a USB port to add the device to.  */
2670
    port = free_usb_ports;
2671
    if (!port->next) {
2672
        USBDevice *hub;
2673

    
2674
        /* Create a new hub and chain it on.  */
2675
        free_usb_ports = NULL;
2676
        port->next = used_usb_ports;
2677
        used_usb_ports = port;
2678

    
2679
        hub = usb_hub_init(VM_USB_HUB_SIZE);
2680
        usb_attach(port, hub);
2681
        port = free_usb_ports;
2682
    }
2683

    
2684
    free_usb_ports = port->next;
2685
    port->next = used_usb_ports;
2686
    used_usb_ports = port;
2687
    usb_attach(port, dev);
2688
    return 0;
2689
}
2690

    
2691
static void usb_msd_password_cb(void *opaque, int err)
2692
{
2693
    USBDevice *dev = opaque;
2694

    
2695
    if (!err)
2696
        usb_device_add_dev(dev);
2697
    else
2698
        dev->handle_destroy(dev);
2699
}
2700

    
2701
static int usb_device_add(const char *devname, int is_hotplug)
2702
{
2703
    const char *p;
2704
    USBDevice *dev;
2705

    
2706
    if (!free_usb_ports)
2707
        return -1;
2708

    
2709
    if (strstart(devname, "host:", &p)) {
2710
        dev = usb_host_device_open(p);
2711
    } else if (!strcmp(devname, "mouse")) {
2712
        dev = usb_mouse_init();
2713
    } else if (!strcmp(devname, "tablet")) {
2714
        dev = usb_tablet_init();
2715
    } else if (!strcmp(devname, "keyboard")) {
2716
        dev = usb_keyboard_init();
2717
    } else if (strstart(devname, "disk:", &p)) {
2718
        BlockDriverState *bs;
2719

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

    
2743
        if (net_client_init("nic", p) < 0)
2744
            return -1;
2745
        nd_table[nic].model = "usb";
2746
        dev = usb_net_init(&nd_table[nic]);
2747
    } else if (!strcmp(devname, "bt") || strstart(devname, "bt:", &p)) {
2748
        dev = usb_bt_init(devname[2] ? hci_init(p) :
2749
                        bt_new_hci(qemu_find_bt_vlan(0)));
2750
    } else {
2751
        return -1;
2752
    }
2753
    if (!dev)
2754
        return -1;
2755

    
2756
    return usb_device_add_dev(dev);
2757
}
2758

    
2759
int usb_device_del_addr(int bus_num, int addr)
2760
{
2761
    USBPort *port;
2762
    USBPort **lastp;
2763
    USBDevice *dev;
2764

    
2765
    if (!used_usb_ports)
2766
        return -1;
2767

    
2768
    if (bus_num != 0)
2769
        return -1;
2770

    
2771
    lastp = &used_usb_ports;
2772
    port = used_usb_ports;
2773
    while (port && port->dev->addr != addr) {
2774
        lastp = &port->next;
2775
        port = port->next;
2776
    }
2777

    
2778
    if (!port)
2779
        return -1;
2780

    
2781
    dev = port->dev;
2782
    *lastp = port->next;
2783
    usb_attach(port, NULL);
2784
    dev->handle_destroy(dev);
2785
    port->next = free_usb_ports;
2786
    free_usb_ports = port;
2787
    return 0;
2788
}
2789

    
2790
static int usb_device_del(const char *devname)
2791
{
2792
    int bus_num, addr;
2793
    const char *p;
2794

    
2795
    if (strstart(devname, "host:", &p))
2796
        return usb_host_device_close(p);
2797

    
2798
    if (!used_usb_ports)
2799
        return -1;
2800

    
2801
    p = strchr(devname, '.');
2802
    if (!p)
2803
        return -1;
2804
    bus_num = strtoul(devname, NULL, 0);
2805
    addr = strtoul(p + 1, NULL, 0);
2806

    
2807
    return usb_device_del_addr(bus_num, addr);
2808
}
2809

    
2810
void do_usb_add(Monitor *mon, const char *devname)
2811
{
2812
    usb_device_add(devname, 1);
2813
}
2814

    
2815
void do_usb_del(Monitor *mon, const char *devname)
2816
{
2817
    usb_device_del(devname);
2818
}
2819

    
2820
void usb_info(Monitor *mon)
2821
{
2822
    USBDevice *dev;
2823
    USBPort *port;
2824
    const char *speed_str;
2825

    
2826
    if (!usb_enabled) {
2827
        monitor_printf(mon, "USB support not enabled\n");
2828
        return;
2829
    }
2830

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

    
2854
/***********************************************************/
2855
/* PCMCIA/Cardbus */
2856

    
2857
static struct pcmcia_socket_entry_s {
2858
    PCMCIASocket *socket;
2859
    struct pcmcia_socket_entry_s *next;
2860
} *pcmcia_sockets = 0;
2861

    
2862
void pcmcia_socket_register(PCMCIASocket *socket)
2863
{
2864
    struct pcmcia_socket_entry_s *entry;
2865

    
2866
    entry = qemu_malloc(sizeof(struct pcmcia_socket_entry_s));
2867
    entry->socket = socket;
2868
    entry->next = pcmcia_sockets;
2869
    pcmcia_sockets = entry;
2870
}
2871

    
2872
void pcmcia_socket_unregister(PCMCIASocket *socket)
2873
{
2874
    struct pcmcia_socket_entry_s *entry, **ptr;
2875

    
2876
    ptr = &pcmcia_sockets;
2877
    for (entry = *ptr; entry; ptr = &entry->next, entry = *ptr)
2878
        if (entry->socket == socket) {
2879
            *ptr = entry->next;
2880
            qemu_free(entry);
2881
        }
2882
}
2883

    
2884
void pcmcia_info(Monitor *mon)
2885
{
2886
    struct pcmcia_socket_entry_s *iter;
2887

    
2888
    if (!pcmcia_sockets)
2889
        monitor_printf(mon, "No PCMCIA sockets\n");
2890

    
2891
    for (iter = pcmcia_sockets; iter; iter = iter->next)
2892
        monitor_printf(mon, "%s: %s\n", iter->socket->slot_string,
2893
                       iter->socket->attached ? iter->socket->card_string :
2894
                       "Empty");
2895
}
2896

    
2897
/***********************************************************/
2898
/* register display */
2899

    
2900
struct DisplayAllocator default_allocator = {
2901
    defaultallocator_create_displaysurface,
2902
    defaultallocator_resize_displaysurface,
2903
    defaultallocator_free_displaysurface
2904
};
2905

    
2906
void register_displaystate(DisplayState *ds)
2907
{
2908
    DisplayState **s;
2909
    s = &display_state;
2910
    while (*s != NULL)
2911
        s = &(*s)->next;
2912
    ds->next = NULL;
2913
    *s = ds;
2914
}
2915

    
2916
DisplayState *get_displaystate(void)
2917
{
2918
    return display_state;
2919
}
2920

    
2921
DisplayAllocator *register_displayallocator(DisplayState *ds, DisplayAllocator *da)
2922
{
2923
    if(ds->allocator ==  &default_allocator) ds->allocator = da;
2924
    return ds->allocator;
2925
}
2926

    
2927
/* dumb display */
2928

    
2929
static void dumb_display_init(void)
2930
{
2931
    DisplayState *ds = qemu_mallocz(sizeof(DisplayState));
2932
    ds->allocator = &default_allocator;
2933
    ds->surface = qemu_create_displaysurface(ds, 640, 480);
2934
    register_displaystate(ds);
2935
}
2936

    
2937
/***********************************************************/
2938
/* I/O handling */
2939

    
2940
typedef struct IOHandlerRecord {
2941
    int fd;
2942
    IOCanRWHandler *fd_read_poll;
2943
    IOHandler *fd_read;
2944
    IOHandler *fd_write;
2945
    int deleted;
2946
    void *opaque;
2947
    /* temporary data */
2948
    struct pollfd *ufd;
2949
    struct IOHandlerRecord *next;
2950
} IOHandlerRecord;
2951

    
2952
static IOHandlerRecord *first_io_handler;
2953

    
2954
/* XXX: fd_read_poll should be suppressed, but an API change is
2955
   necessary in the character devices to suppress fd_can_read(). */
2956
int qemu_set_fd_handler2(int fd,
2957
                         IOCanRWHandler *fd_read_poll,
2958
                         IOHandler *fd_read,
2959
                         IOHandler *fd_write,
2960
                         void *opaque)
2961
{
2962
    IOHandlerRecord **pioh, *ioh;
2963

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

    
2995
int qemu_set_fd_handler(int fd,
2996
                        IOHandler *fd_read,
2997
                        IOHandler *fd_write,
2998
                        void *opaque)
2999
{
3000
    return qemu_set_fd_handler2(fd, NULL, fd_read, fd_write, opaque);
3001
}
3002

    
3003
#ifdef _WIN32
3004
/***********************************************************/
3005
/* Polling handling */
3006

    
3007
typedef struct PollingEntry {
3008
    PollingFunc *func;
3009
    void *opaque;
3010
    struct PollingEntry *next;
3011
} PollingEntry;
3012

    
3013
static PollingEntry *first_polling_entry;
3014

    
3015
int qemu_add_polling_cb(PollingFunc *func, void *opaque)
3016
{
3017
    PollingEntry **ppe, *pe;
3018
    pe = qemu_mallocz(sizeof(PollingEntry));
3019
    pe->func = func;
3020
    pe->opaque = opaque;
3021
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next);
3022
    *ppe = pe;
3023
    return 0;
3024
}
3025

    
3026
void qemu_del_polling_cb(PollingFunc *func, void *opaque)
3027
{
3028
    PollingEntry **ppe, *pe;
3029
    for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next) {
3030
        pe = *ppe;
3031
        if (pe->func == func && pe->opaque == opaque) {
3032
            *ppe = pe->next;
3033
            qemu_free(pe);
3034
            break;
3035
        }
3036
    }
3037
}
3038

    
3039
/***********************************************************/
3040
/* Wait objects support */
3041
typedef struct WaitObjects {
3042
    int num;
3043
    HANDLE events[MAXIMUM_WAIT_OBJECTS + 1];
3044
    WaitObjectFunc *func[MAXIMUM_WAIT_OBJECTS + 1];
3045
    void *opaque[MAXIMUM_WAIT_OBJECTS + 1];
3046
} WaitObjects;
3047

    
3048
static WaitObjects wait_objects = {0};
3049

    
3050
int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
3051
{
3052
    WaitObjects *w = &wait_objects;
3053

    
3054
    if (w->num >= MAXIMUM_WAIT_OBJECTS)
3055
        return -1;
3056
    w->events[w->num] = handle;
3057
    w->func[w->num] = func;
3058
    w->opaque[w->num] = opaque;
3059
    w->num++;
3060
    return 0;
3061
}
3062

    
3063
void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
3064
{
3065
    int i, found;
3066
    WaitObjects *w = &wait_objects;
3067

    
3068
    found = 0;
3069
    for (i = 0; i < w->num; i++) {
3070
        if (w->events[i] == handle)
3071
            found = 1;
3072
        if (found) {
3073
            w->events[i] = w->events[i + 1];
3074
            w->func[i] = w->func[i + 1];
3075
            w->opaque[i] = w->opaque[i + 1];
3076
        }
3077
    }
3078
    if (found)
3079
        w->num--;
3080
}
3081
#endif
3082

    
3083
/***********************************************************/
3084
/* ram save/restore */
3085

    
3086
static int ram_get_page(QEMUFile *f, uint8_t *buf, int len)
3087
{
3088
    int v;
3089

    
3090
    v = qemu_get_byte(f);
3091
    switch(v) {
3092
    case 0:
3093
        if (qemu_get_buffer(f, buf, len) != len)
3094
            return -EIO;
3095
        break;
3096
    case 1:
3097
        v = qemu_get_byte(f);
3098
        memset(buf, v, len);
3099
        break;
3100
    default:
3101
        return -EINVAL;
3102
    }
3103

    
3104
    if (qemu_file_has_error(f))
3105
        return -EIO;
3106

    
3107
    return 0;
3108
}
3109

    
3110
static int ram_load_v1(QEMUFile *f, void *opaque)
3111
{
3112
    int ret;
3113
    ram_addr_t i;
3114

    
3115
    if (qemu_get_be32(f) != last_ram_offset)
3116
        return -EINVAL;
3117
    for(i = 0; i < last_ram_offset; i+= TARGET_PAGE_SIZE) {
3118
        ret = ram_get_page(f, qemu_get_ram_ptr(i), TARGET_PAGE_SIZE);
3119
        if (ret)
3120
            return ret;
3121
    }
3122
    return 0;
3123
}
3124

    
3125
#define BDRV_HASH_BLOCK_SIZE 1024
3126
#define IOBUF_SIZE 4096
3127
#define RAM_CBLOCK_MAGIC 0xfabe
3128

    
3129
typedef struct RamDecompressState {
3130
    z_stream zstream;
3131
    QEMUFile *f;
3132
    uint8_t buf[IOBUF_SIZE];
3133
} RamDecompressState;
3134

    
3135
static int ram_decompress_open(RamDecompressState *s, QEMUFile *f)
3136
{
3137
    int ret;
3138
    memset(s, 0, sizeof(*s));
3139
    s->f = f;
3140
    ret = inflateInit(&s->zstream);
3141
    if (ret != Z_OK)
3142
        return -1;
3143
    return 0;
3144
}
3145

    
3146
static int ram_decompress_buf(RamDecompressState *s, uint8_t *buf, int len)
3147
{
3148
    int ret, clen;
3149

    
3150
    s->zstream.avail_out = len;
3151
    s->zstream.next_out = buf;
3152
    while (s->zstream.avail_out > 0) {
3153
        if (s->zstream.avail_in == 0) {
3154
            if (qemu_get_be16(s->f) != RAM_CBLOCK_MAGIC)
3155
                return -1;
3156
            clen = qemu_get_be16(s->f);
3157
            if (clen > IOBUF_SIZE)
3158
                return -1;
3159
            qemu_get_buffer(s->f, s->buf, clen);
3160
            s->zstream.avail_in = clen;
3161
            s->zstream.next_in = s->buf;
3162
        }
3163
        ret = inflate(&s->zstream, Z_PARTIAL_FLUSH);
3164
        if (ret != Z_OK && ret != Z_STREAM_END) {
3165
            return -1;
3166
        }
3167
    }
3168
    return 0;
3169
}
3170

    
3171
static void ram_decompress_close(RamDecompressState *s)
3172
{
3173
    inflateEnd(&s->zstream);
3174
}
3175

    
3176
#define RAM_SAVE_FLAG_FULL        0x01
3177
#define RAM_SAVE_FLAG_COMPRESS        0x02
3178
#define RAM_SAVE_FLAG_MEM_SIZE        0x04
3179
#define RAM_SAVE_FLAG_PAGE        0x08
3180
#define RAM_SAVE_FLAG_EOS        0x10
3181

    
3182
static int is_dup_page(uint8_t *page, uint8_t ch)
3183
{
3184
    uint32_t val = ch << 24 | ch << 16 | ch << 8 | ch;
3185
    uint32_t *array = (uint32_t *)page;
3186
    int i;
3187

    
3188
    for (i = 0; i < (TARGET_PAGE_SIZE / 4); i++) {
3189
        if (array[i] != val)
3190
            return 0;
3191
    }
3192

    
3193
    return 1;
3194
}
3195

    
3196
static int ram_save_block(QEMUFile *f)
3197
{
3198
    static ram_addr_t current_addr = 0;
3199
    ram_addr_t saved_addr = current_addr;
3200
    ram_addr_t addr = 0;
3201
    int found = 0;
3202

    
3203
    while (addr < last_ram_offset) {
3204
        if (cpu_physical_memory_get_dirty(current_addr, MIGRATION_DIRTY_FLAG)) {
3205
            uint8_t *p;
3206

    
3207
            cpu_physical_memory_reset_dirty(current_addr,
3208
                                            current_addr + TARGET_PAGE_SIZE,
3209
                                            MIGRATION_DIRTY_FLAG);
3210

    
3211
            p = qemu_get_ram_ptr(current_addr);
3212

    
3213
            if (is_dup_page(p, *p)) {
3214
                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_COMPRESS);
3215
                qemu_put_byte(f, *p);
3216
            } else {
3217
                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_PAGE);
3218
                qemu_put_buffer(f, p, TARGET_PAGE_SIZE);
3219
            }
3220

    
3221
            found = 1;
3222
            break;
3223
        }
3224
        addr += TARGET_PAGE_SIZE;
3225
        current_addr = (saved_addr + addr) % last_ram_offset;
3226
    }
3227

    
3228
    return found;
3229
}
3230

    
3231
static ram_addr_t ram_save_threshold = 10;
3232

    
3233
static ram_addr_t ram_save_remaining(void)
3234
{
3235
    ram_addr_t addr;
3236
    ram_addr_t count = 0;
3237

    
3238
    for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
3239
        if (cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
3240
            count++;
3241
    }
3242

    
3243
    return count;
3244
}
3245

    
3246
static int ram_save_live(QEMUFile *f, int stage, void *opaque)
3247
{
3248
    ram_addr_t addr;
3249

    
3250
    if (stage == 1) {
3251
        /* Make sure all dirty bits are set */
3252
        for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
3253
            if (!cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
3254
                cpu_physical_memory_set_dirty(addr);
3255
        }
3256
        
3257
        /* Enable dirty memory tracking */
3258
        cpu_physical_memory_set_dirty_tracking(1);
3259

    
3260
        qemu_put_be64(f, last_ram_offset | RAM_SAVE_FLAG_MEM_SIZE);
3261
    }
3262

    
3263
    while (!qemu_file_rate_limit(f)) {
3264
        int ret;
3265

    
3266
        ret = ram_save_block(f);
3267
        if (ret == 0) /* no more blocks */
3268
            break;
3269
    }
3270

    
3271
    /* try transferring iterative blocks of memory */
3272

    
3273
    if (stage == 3) {
3274

    
3275
        /* flush all remaining blocks regardless of rate limiting */
3276
        while (ram_save_block(f) != 0);
3277
        cpu_physical_memory_set_dirty_tracking(0);
3278
    }
3279

    
3280
    qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
3281

    
3282
    return (stage == 2) && (ram_save_remaining() < ram_save_threshold);
3283
}
3284

    
3285
static int ram_load_dead(QEMUFile *f, void *opaque)
3286
{
3287
    RamDecompressState s1, *s = &s1;
3288
    uint8_t buf[10];
3289
    ram_addr_t i;
3290

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

    
3312
    return 0;
3313
}
3314

    
3315
static int ram_load(QEMUFile *f, void *opaque, int version_id)
3316
{
3317
    ram_addr_t addr;
3318
    int flags;
3319

    
3320
    if (version_id == 1)
3321
        return ram_load_v1(f, opaque);
3322

    
3323
    if (version_id == 2) {
3324
        if (qemu_get_be32(f) != last_ram_offset)
3325
            return -EINVAL;
3326
        return ram_load_dead(f, opaque);
3327
    }
3328

    
3329
    if (version_id != 3)
3330
        return -EINVAL;
3331

    
3332
    do {
3333
        addr = qemu_get_be64(f);
3334

    
3335
        flags = addr & ~TARGET_PAGE_MASK;
3336
        addr &= TARGET_PAGE_MASK;
3337

    
3338
        if (flags & RAM_SAVE_FLAG_MEM_SIZE) {
3339
            if (addr != last_ram_offset)
3340
                return -EINVAL;
3341
        }
3342

    
3343
        if (flags & RAM_SAVE_FLAG_FULL) {
3344
            if (ram_load_dead(f, opaque) < 0)
3345
                return -EINVAL;
3346
        }
3347
        
3348
        if (flags & RAM_SAVE_FLAG_COMPRESS) {
3349
            uint8_t ch = qemu_get_byte(f);
3350
            memset(qemu_get_ram_ptr(addr), ch, TARGET_PAGE_SIZE);
3351
        } else if (flags & RAM_SAVE_FLAG_PAGE)
3352
            qemu_get_buffer(f, qemu_get_ram_ptr(addr), TARGET_PAGE_SIZE);
3353
    } while (!(flags & RAM_SAVE_FLAG_EOS));
3354

    
3355
    return 0;
3356
}
3357

    
3358
void qemu_service_io(void)
3359
{
3360
    qemu_notify_event();
3361
}
3362

    
3363
/***********************************************************/
3364
/* bottom halves (can be seen as timers which expire ASAP) */
3365

    
3366
struct QEMUBH {
3367
    QEMUBHFunc *cb;
3368
    void *opaque;
3369
    int scheduled;
3370
    int idle;
3371
    int deleted;
3372
    QEMUBH *next;
3373
};
3374

    
3375
static QEMUBH *first_bh = NULL;
3376

    
3377
QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque)
3378
{
3379
    QEMUBH *bh;
3380
    bh = qemu_mallocz(sizeof(QEMUBH));
3381
    bh->cb = cb;
3382
    bh->opaque = opaque;
3383
    bh->next = first_bh;
3384
    first_bh = bh;
3385
    return bh;
3386
}
3387

    
3388
int qemu_bh_poll(void)
3389
{
3390
    QEMUBH *bh, **bhp;
3391
    int ret;
3392

    
3393
    ret = 0;
3394
    for (bh = first_bh; bh; bh = bh->next) {
3395
        if (!bh->deleted && bh->scheduled) {
3396
            bh->scheduled = 0;
3397
            if (!bh->idle)
3398
                ret = 1;
3399
            bh->idle = 0;
3400
            bh->cb(bh->opaque);
3401
        }
3402
    }
3403

    
3404
    /* remove deleted bhs */
3405
    bhp = &first_bh;
3406
    while (*bhp) {
3407
        bh = *bhp;
3408
        if (bh->deleted) {
3409
            *bhp = bh->next;
3410
            qemu_free(bh);
3411
        } else
3412
            bhp = &bh->next;
3413
    }
3414

    
3415
    return ret;
3416
}
3417

    
3418
void qemu_bh_schedule_idle(QEMUBH *bh)
3419
{
3420
    if (bh->scheduled)
3421
        return;
3422
    bh->scheduled = 1;
3423
    bh->idle = 1;
3424
}
3425

    
3426
void qemu_bh_schedule(QEMUBH *bh)
3427
{
3428
    if (bh->scheduled)
3429
        return;
3430
    bh->scheduled = 1;
3431
    bh->idle = 0;
3432
    /* stop the currently executing CPU to execute the BH ASAP */
3433
    qemu_notify_event();
3434
}
3435

    
3436
void qemu_bh_cancel(QEMUBH *bh)
3437
{
3438
    bh->scheduled = 0;
3439
}
3440

    
3441
void qemu_bh_delete(QEMUBH *bh)
3442
{
3443
    bh->scheduled = 0;
3444
    bh->deleted = 1;
3445
}
3446

    
3447
static void qemu_bh_update_timeout(int *timeout)
3448
{
3449
    QEMUBH *bh;
3450

    
3451
    for (bh = first_bh; bh; bh = bh->next) {
3452
        if (!bh->deleted && bh->scheduled) {
3453
            if (bh->idle) {
3454
                /* idle bottom halves will be polled at least
3455
                 * every 10ms */
3456
                *timeout = MIN(10, *timeout);
3457
            } else {
3458
                /* non-idle bottom halves will be executed
3459
                 * immediately */
3460
                *timeout = 0;
3461
                break;
3462
            }
3463
        }
3464
    }
3465
}
3466

    
3467
/***********************************************************/
3468
/* machine registration */
3469

    
3470
static QEMUMachine *first_machine = NULL;
3471
QEMUMachine *current_machine = NULL;
3472

    
3473
int qemu_register_machine(QEMUMachine *m)
3474
{
3475
    QEMUMachine **pm;
3476
    pm = &first_machine;
3477
    while (*pm != NULL)
3478
        pm = &(*pm)->next;
3479
    m->next = NULL;
3480
    *pm = m;
3481
    return 0;
3482
}
3483

    
3484
static QEMUMachine *find_machine(const char *name)
3485
{
3486
    QEMUMachine *m;
3487

    
3488
    for(m = first_machine; m != NULL; m = m->next) {
3489
        if (!strcmp(m->name, name))
3490
            return m;
3491
    }
3492
    return NULL;
3493
}
3494

    
3495
/***********************************************************/
3496
/* main execution loop */
3497

    
3498
static void gui_update(void *opaque)
3499
{
3500
    uint64_t interval = GUI_REFRESH_INTERVAL;
3501
    DisplayState *ds = opaque;
3502
    DisplayChangeListener *dcl = ds->listeners;
3503

    
3504
    dpy_refresh(ds);
3505

    
3506
    while (dcl != NULL) {
3507
        if (dcl->gui_timer_interval &&
3508
            dcl->gui_timer_interval < interval)
3509
            interval = dcl->gui_timer_interval;
3510
        dcl = dcl->next;
3511
    }
3512
    qemu_mod_timer(ds->gui_timer, interval + qemu_get_clock(rt_clock));
3513
}
3514

    
3515
static void nographic_update(void *opaque)
3516
{
3517
    uint64_t interval = GUI_REFRESH_INTERVAL;
3518

    
3519
    qemu_mod_timer(nographic_timer, interval + qemu_get_clock(rt_clock));
3520
}
3521

    
3522
struct vm_change_state_entry {
3523
    VMChangeStateHandler *cb;
3524
    void *opaque;
3525
    LIST_ENTRY (vm_change_state_entry) entries;
3526
};
3527

    
3528
static LIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head;
3529

    
3530
VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
3531
                                                     void *opaque)
3532
{
3533
    VMChangeStateEntry *e;
3534

    
3535
    e = qemu_mallocz(sizeof (*e));
3536

    
3537
    e->cb = cb;
3538
    e->opaque = opaque;
3539
    LIST_INSERT_HEAD(&vm_change_state_head, e, entries);
3540
    return e;
3541
}
3542

    
3543
void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
3544
{
3545
    LIST_REMOVE (e, entries);
3546
    qemu_free (e);
3547
}
3548

    
3549
static void vm_state_notify(int running, int reason)
3550
{
3551
    VMChangeStateEntry *e;
3552

    
3553
    for (e = vm_change_state_head.lh_first; e; e = e->entries.le_next) {
3554
        e->cb(e->opaque, running, reason);
3555
    }
3556
}
3557

    
3558
static void resume_all_vcpus(void);
3559
static void pause_all_vcpus(void);
3560

    
3561
void vm_start(void)
3562
{
3563
    if (!vm_running) {
3564
        cpu_enable_ticks();
3565
        vm_running = 1;
3566
        vm_state_notify(1, 0);
3567
        qemu_rearm_alarm_timer(alarm_timer);
3568
        resume_all_vcpus();
3569
    }
3570
}
3571

    
3572
/* reset/shutdown handler */
3573

    
3574
typedef struct QEMUResetEntry {
3575
    QEMUResetHandler *func;
3576
    void *opaque;
3577
    struct QEMUResetEntry *next;
3578
} QEMUResetEntry;
3579

    
3580
static QEMUResetEntry *first_reset_entry;
3581
static int reset_requested;
3582
static int shutdown_requested;
3583
static int powerdown_requested;
3584
static int debug_requested;
3585
static int vmstop_requested;
3586

    
3587
int qemu_shutdown_requested(void)
3588
{
3589
    int r = shutdown_requested;
3590
    shutdown_requested = 0;
3591
    return r;
3592
}
3593

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

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

    
3608
static int qemu_debug_requested(void)
3609
{
3610
    int r = debug_requested;
3611
    debug_requested = 0;
3612
    return r;
3613
}
3614

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

    
3622
static void do_vm_stop(int reason)
3623
{
3624
    if (vm_running) {
3625
        cpu_disable_ticks();
3626
        vm_running = 0;
3627
        pause_all_vcpus();
3628
        vm_state_notify(0, reason);
3629
    }
3630
}
3631

    
3632
void qemu_register_reset(QEMUResetHandler *func, void *opaque)
3633
{
3634
    QEMUResetEntry **pre, *re;
3635

    
3636
    pre = &first_reset_entry;
3637
    while (*pre != NULL)
3638
        pre = &(*pre)->next;
3639
    re = qemu_mallocz(sizeof(QEMUResetEntry));
3640
    re->func = func;
3641
    re->opaque = opaque;
3642
    re->next = NULL;
3643
    *pre = re;
3644
}
3645

    
3646
void qemu_system_reset(void)
3647
{
3648
    QEMUResetEntry *re;
3649

    
3650
    /* reset all devices */
3651
    for(re = first_reset_entry; re != NULL; re = re->next) {
3652
        re->func(re->opaque);
3653
    }
3654
    if (kvm_enabled())
3655
        kvm_sync_vcpus();
3656
}
3657

    
3658
void qemu_system_reset_request(void)
3659
{
3660
    if (no_reboot) {
3661
        shutdown_requested = 1;
3662
    } else {
3663
        reset_requested = 1;
3664
    }
3665
    qemu_notify_event();
3666
}
3667

    
3668
void qemu_system_shutdown_request(void)
3669
{
3670
    shutdown_requested = 1;
3671
    qemu_notify_event();
3672
}
3673

    
3674
void qemu_system_powerdown_request(void)
3675
{
3676
    powerdown_requested = 1;
3677
    qemu_notify_event();
3678
}
3679

    
3680
#ifdef CONFIG_IOTHREAD
3681
static void qemu_system_vmstop_request(int reason)
3682
{
3683
    vmstop_requested = reason;
3684
    qemu_notify_event();
3685
}
3686
#endif
3687

    
3688
#ifndef _WIN32
3689
static int io_thread_fd = -1;
3690

    
3691
static void qemu_event_increment(void)
3692
{
3693
    static const char byte = 0;
3694

    
3695
    if (io_thread_fd == -1)
3696
        return;
3697

    
3698
    write(io_thread_fd, &byte, sizeof(byte));
3699
}
3700

    
3701
static void qemu_event_read(void *opaque)
3702
{
3703
    int fd = (unsigned long)opaque;
3704
    ssize_t len;
3705

    
3706
    /* Drain the notify pipe */
3707
    do {
3708
        char buffer[512];
3709
        len = read(fd, buffer, sizeof(buffer));
3710
    } while ((len == -1 && errno == EINTR) || len > 0);
3711
}
3712

    
3713
static int qemu_event_init(void)
3714
{
3715
    int err;
3716
    int fds[2];
3717

    
3718
    err = pipe(fds);
3719
    if (err == -1)
3720
        return -errno;
3721

    
3722
    err = fcntl_setfl(fds[0], O_NONBLOCK);
3723
    if (err < 0)
3724
        goto fail;
3725

    
3726
    err = fcntl_setfl(fds[1], O_NONBLOCK);
3727
    if (err < 0)
3728
        goto fail;
3729

    
3730
    qemu_set_fd_handler2(fds[0], NULL, qemu_event_read, NULL,
3731
                         (void *)(unsigned long)fds[0]);
3732

    
3733
    io_thread_fd = fds[1];
3734
    return 0;
3735

    
3736
fail:
3737
    close(fds[0]);
3738
    close(fds[1]);
3739
    return err;
3740
}
3741
#else
3742
HANDLE qemu_event_handle;
3743

    
3744
static void dummy_event_handler(void *opaque)
3745
{
3746
}
3747

    
3748
static int qemu_event_init(void)
3749
{
3750
    qemu_event_handle = CreateEvent(NULL, FALSE, FALSE, NULL);
3751
    if (!qemu_event_handle) {
3752
        perror("Failed CreateEvent");
3753
        return -1;
3754
    }
3755
    qemu_add_wait_object(qemu_event_handle, dummy_event_handler, NULL);
3756
    return 0;
3757
}
3758

    
3759
static void qemu_event_increment(void)
3760
{
3761
    SetEvent(qemu_event_handle);
3762
}
3763
#endif
3764

    
3765
static int cpu_can_run(CPUState *env)
3766
{
3767
    if (env->stop)
3768
        return 0;
3769
    if (env->stopped)
3770
        return 0;
3771
    return 1;
3772
}
3773

    
3774
#ifndef CONFIG_IOTHREAD
3775
static int qemu_init_main_loop(void)
3776
{
3777
    return qemu_event_init();
3778
}
3779

    
3780
void qemu_init_vcpu(void *_env)
3781
{
3782
    CPUState *env = _env;
3783

    
3784
    if (kvm_enabled())
3785
        kvm_init_vcpu(env);
3786
    return;
3787
}
3788

    
3789
int qemu_cpu_self(void *env)
3790
{
3791
    return 1;
3792
}
3793

    
3794
static void resume_all_vcpus(void)
3795
{
3796
}
3797

    
3798
static void pause_all_vcpus(void)
3799
{
3800
}
3801

    
3802
void qemu_cpu_kick(void *env)
3803
{
3804
    return;
3805
}
3806

    
3807
void qemu_notify_event(void)
3808
{
3809
    CPUState *env = cpu_single_env;
3810

    
3811
    if (env) {
3812
        cpu_exit(env);
3813
#ifdef USE_KQEMU
3814
        if (env->kqemu_enabled)
3815
            kqemu_cpu_interrupt(env);
3816
#endif
3817
     }
3818
}
3819

    
3820
#define qemu_mutex_lock_iothread() do { } while (0)
3821
#define qemu_mutex_unlock_iothread() do { } while (0)
3822

    
3823
void vm_stop(int reason)
3824
{
3825
    do_vm_stop(reason);
3826
}
3827

    
3828
#else /* CONFIG_IOTHREAD */
3829

    
3830
#include "qemu-thread.h"
3831

    
3832
QemuMutex qemu_global_mutex;
3833
static QemuMutex qemu_fair_mutex;
3834

    
3835
static QemuThread io_thread;
3836

    
3837
static QemuThread *tcg_cpu_thread;
3838
static QemuCond *tcg_halt_cond;
3839

    
3840
static int qemu_system_ready;
3841
/* cpu creation */
3842
static QemuCond qemu_cpu_cond;
3843
/* system init */
3844
static QemuCond qemu_system_cond;
3845
static QemuCond qemu_pause_cond;
3846

    
3847
static void block_io_signals(void);
3848
static void unblock_io_signals(void);
3849
static int tcg_has_work(void);
3850

    
3851
static int qemu_init_main_loop(void)
3852
{
3853
    int ret;
3854

    
3855
    ret = qemu_event_init();
3856
    if (ret)
3857
        return ret;
3858

    
3859
    qemu_cond_init(&qemu_pause_cond);
3860
    qemu_mutex_init(&qemu_fair_mutex);
3861
    qemu_mutex_init(&qemu_global_mutex);
3862
    qemu_mutex_lock(&qemu_global_mutex);
3863

    
3864
    unblock_io_signals();
3865
    qemu_thread_self(&io_thread);
3866

    
3867
    return 0;
3868
}
3869

    
3870
static void qemu_wait_io_event(CPUState *env)
3871
{
3872
    while (!tcg_has_work())
3873
        qemu_cond_timedwait(env->halt_cond, &qemu_global_mutex, 1000);
3874

    
3875
    qemu_mutex_unlock(&qemu_global_mutex);
3876

    
3877
    /*
3878
     * Users of qemu_global_mutex can be starved, having no chance
3879
     * to acquire it since this path will get to it first.
3880
     * So use another lock to provide fairness.
3881
     */
3882
    qemu_mutex_lock(&qemu_fair_mutex);
3883
    qemu_mutex_unlock(&qemu_fair_mutex);
3884

    
3885
    qemu_mutex_lock(&qemu_global_mutex);
3886
    if (env->stop) {
3887
        env->stop = 0;
3888
        env->stopped = 1;
3889
        qemu_cond_signal(&qemu_pause_cond);
3890
    }
3891
}
3892

    
3893
static int qemu_cpu_exec(CPUState *env);
3894

    
3895
static void *kvm_cpu_thread_fn(void *arg)
3896
{
3897
    CPUState *env = arg;
3898

    
3899
    block_io_signals();
3900
    qemu_thread_self(env->thread);
3901

    
3902
    /* signal CPU creation */
3903
    qemu_mutex_lock(&qemu_global_mutex);
3904
    env->created = 1;
3905
    qemu_cond_signal(&qemu_cpu_cond);
3906

    
3907
    /* and wait for machine initialization */
3908
    while (!qemu_system_ready)
3909
        qemu_cond_timedwait(&qemu_system_cond, &qemu_global_mutex, 100);
3910

    
3911
    while (1) {
3912
        if (cpu_can_run(env))
3913
            qemu_cpu_exec(env);
3914
        qemu_wait_io_event(env);
3915
    }
3916

    
3917
    return NULL;
3918
}
3919

    
3920
static void tcg_cpu_exec(void);
3921

    
3922
static void *tcg_cpu_thread_fn(void *arg)
3923
{
3924
    CPUState *env = arg;
3925

    
3926
    block_io_signals();
3927
    qemu_thread_self(env->thread);
3928

    
3929
    /* signal CPU creation */
3930
    qemu_mutex_lock(&qemu_global_mutex);
3931
    for (env = first_cpu; env != NULL; env = env->next_cpu)
3932
        env->created = 1;
3933
    qemu_cond_signal(&qemu_cpu_cond);
3934

    
3935
    /* and wait for machine initialization */
3936
    while (!qemu_system_ready)
3937
        qemu_cond_timedwait(&qemu_system_cond, &qemu_global_mutex, 100);
3938

    
3939
    while (1) {
3940
        tcg_cpu_exec();
3941
        qemu_wait_io_event(cur_cpu);
3942
    }
3943

    
3944
    return NULL;
3945
}
3946

    
3947
void qemu_cpu_kick(void *_env)
3948
{
3949
    CPUState *env = _env;
3950
    qemu_cond_broadcast(env->halt_cond);
3951
    if (kvm_enabled())
3952
        qemu_thread_signal(env->thread, SIGUSR1);
3953
}
3954

    
3955
int qemu_cpu_self(void *env)
3956
{
3957
    return (cpu_single_env != NULL);
3958
}
3959

    
3960
static void cpu_signal(int sig)
3961
{
3962
    if (cpu_single_env)
3963
        cpu_exit(cpu_single_env);
3964
}
3965

    
3966
static void block_io_signals(void)
3967
{
3968
    sigset_t set;
3969
    struct sigaction sigact;
3970

    
3971
    sigemptyset(&set);
3972
    sigaddset(&set, SIGUSR2);
3973
    sigaddset(&set, SIGIO);
3974
    sigaddset(&set, SIGALRM);
3975
    pthread_sigmask(SIG_BLOCK, &set, NULL);
3976

    
3977
    sigemptyset(&set);
3978
    sigaddset(&set, SIGUSR1);
3979
    pthread_sigmask(SIG_UNBLOCK, &set, NULL);
3980

    
3981
    memset(&sigact, 0, sizeof(sigact));
3982
    sigact.sa_handler = cpu_signal;
3983
    sigaction(SIGUSR1, &sigact, NULL);
3984
}
3985

    
3986
static void unblock_io_signals(void)
3987
{
3988
    sigset_t set;
3989

    
3990
    sigemptyset(&set);
3991
    sigaddset(&set, SIGUSR2);
3992
    sigaddset(&set, SIGIO);
3993
    sigaddset(&set, SIGALRM);
3994
    pthread_sigmask(SIG_UNBLOCK, &set, NULL);
3995

    
3996
    sigemptyset(&set);
3997
    sigaddset(&set, SIGUSR1);
3998
    pthread_sigmask(SIG_BLOCK, &set, NULL);
3999
}
4000

    
4001
static void qemu_signal_lock(unsigned int msecs)
4002
{
4003
    qemu_mutex_lock(&qemu_fair_mutex);
4004

    
4005
    while (qemu_mutex_trylock(&qemu_global_mutex)) {
4006
        qemu_thread_signal(tcg_cpu_thread, SIGUSR1);
4007
        if (!qemu_mutex_timedlock(&qemu_global_mutex, msecs))
4008
            break;
4009
    }
4010
    qemu_mutex_unlock(&qemu_fair_mutex);
4011
}
4012

    
4013
static void qemu_mutex_lock_iothread(void)
4014
{
4015
    if (kvm_enabled()) {
4016
        qemu_mutex_lock(&qemu_fair_mutex);
4017
        qemu_mutex_lock(&qemu_global_mutex);
4018
        qemu_mutex_unlock(&qemu_fair_mutex);
4019
    } else
4020
        qemu_signal_lock(100);
4021
}
4022

    
4023
static void qemu_mutex_unlock_iothread(void)
4024
{
4025
    qemu_mutex_unlock(&qemu_global_mutex);
4026
}
4027

    
4028
static int all_vcpus_paused(void)
4029
{
4030
    CPUState *penv = first_cpu;
4031

    
4032
    while (penv) {
4033
        if (!penv->stopped)
4034
            return 0;
4035
        penv = (CPUState *)penv->next_cpu;
4036
    }
4037

    
4038
    return 1;
4039
}
4040

    
4041
static void pause_all_vcpus(void)
4042
{
4043
    CPUState *penv = first_cpu;
4044

    
4045
    while (penv) {
4046
        penv->stop = 1;
4047
        qemu_thread_signal(penv->thread, SIGUSR1);
4048
        qemu_cpu_kick(penv);
4049
        penv = (CPUState *)penv->next_cpu;
4050
    }
4051

    
4052
    while (!all_vcpus_paused()) {
4053
        qemu_cond_timedwait(&qemu_pause_cond, &qemu_global_mutex, 100);
4054
        penv = first_cpu;
4055
        while (penv) {
4056
            qemu_thread_signal(penv->thread, SIGUSR1);
4057
            penv = (CPUState *)penv->next_cpu;
4058
        }
4059
    }
4060
}
4061

    
4062
static void resume_all_vcpus(void)
4063
{
4064
    CPUState *penv = first_cpu;
4065

    
4066
    while (penv) {
4067
        penv->stop = 0;
4068
        penv->stopped = 0;
4069
        qemu_thread_signal(penv->thread, SIGUSR1);
4070
        qemu_cpu_kick(penv);
4071
        penv = (CPUState *)penv->next_cpu;
4072
    }
4073
}
4074

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

    
4094
static void kvm_start_vcpu(CPUState *env)
4095
{
4096
    kvm_init_vcpu(env);
4097
    env->thread = qemu_mallocz(sizeof(QemuThread));
4098
    env->halt_cond = qemu_mallocz(sizeof(QemuCond));
4099
    qemu_cond_init(env->halt_cond);
4100
    qemu_thread_create(env->thread, kvm_cpu_thread_fn, env);
4101
    while (env->created == 0)
4102
        qemu_cond_timedwait(&qemu_cpu_cond, &qemu_global_mutex, 100);
4103
}
4104

    
4105
void qemu_init_vcpu(void *_env)
4106
{
4107
    CPUState *env = _env;
4108

    
4109
    if (kvm_enabled())
4110
        kvm_start_vcpu(env);
4111
    else
4112
        tcg_init_vcpu(env);
4113
}
4114

    
4115
void qemu_notify_event(void)
4116
{
4117
    qemu_event_increment();
4118
}
4119

    
4120
void vm_stop(int reason)
4121
{
4122
    QemuThread me;
4123
    qemu_thread_self(&me);
4124

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

    
4140
#endif
4141

    
4142

    
4143
#ifdef _WIN32
4144
static void host_main_loop_wait(int *timeout)
4145
{
4146
    int ret, ret2, i;
4147
    PollingEntry *pe;
4148

    
4149

    
4150
    /* XXX: need to suppress polling by better using win32 events */
4151
    ret = 0;
4152
    for(pe = first_polling_entry; pe != NULL; pe = pe->next) {
4153
        ret |= pe->func(pe->opaque);
4154
    }
4155
    if (ret == 0) {
4156
        int err;
4157
        WaitObjects *w = &wait_objects;
4158

    
4159
        ret = WaitForMultipleObjects(w->num, w->events, FALSE, *timeout);
4160
        if (WAIT_OBJECT_0 + 0 <= ret && ret <= WAIT_OBJECT_0 + w->num - 1) {
4161
            if (w->func[ret - WAIT_OBJECT_0])
4162
                w->func[ret - WAIT_OBJECT_0](w->opaque[ret - WAIT_OBJECT_0]);
4163

    
4164
            /* Check for additional signaled events */
4165
            for(i = (ret - WAIT_OBJECT_0 + 1); i < w->num; i++) {
4166

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

    
4185
    *timeout = 0;
4186
}
4187
#else
4188
static void host_main_loop_wait(int *timeout)
4189
{
4190
}
4191
#endif
4192

    
4193
void main_loop_wait(int timeout)
4194
{
4195
    IOHandlerRecord *ioh;
4196
    fd_set rfds, wfds, xfds;
4197
    int ret, nfds;
4198
    struct timeval tv;
4199

    
4200
    qemu_bh_update_timeout(&timeout);
4201

    
4202
    host_main_loop_wait(&timeout);
4203

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

    
4227
    tv.tv_sec = timeout / 1000;
4228
    tv.tv_usec = (timeout % 1000) * 1000;
4229

    
4230
#if defined(CONFIG_SLIRP)
4231
    if (slirp_is_inited()) {
4232
        slirp_select_fill(&nfds, &rfds, &wfds, &xfds);
4233
    }
4234
#endif
4235
    qemu_mutex_unlock_iothread();
4236
    ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv);
4237
    qemu_mutex_lock_iothread();
4238
    if (ret > 0) {
4239
        IOHandlerRecord **pioh;
4240

    
4241
        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
4242
            if (!ioh->deleted && ioh->fd_read && FD_ISSET(ioh->fd, &rfds)) {
4243
                ioh->fd_read(ioh->opaque);
4244
            }
4245
            if (!ioh->deleted && ioh->fd_write && FD_ISSET(ioh->fd, &wfds)) {
4246
                ioh->fd_write(ioh->opaque);
4247
            }
4248
        }
4249

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

    
4272
    /* rearm timer, if not periodic */
4273
    if (alarm_timer->flags & ALARM_FLAG_EXPIRED) {
4274
        alarm_timer->flags &= ~ALARM_FLAG_EXPIRED;
4275
        qemu_rearm_alarm_timer(alarm_timer);
4276
    }
4277

    
4278
    /* vm time timers */
4279
    if (vm_running) {
4280
        if (!cur_cpu || likely(!(cur_cpu->singlestep_enabled & SSTEP_NOTIMER)))
4281
            qemu_run_timers(&active_timers[QEMU_TIMER_VIRTUAL],
4282
                qemu_get_clock(vm_clock));
4283
    }
4284

    
4285
    /* real time timers */
4286
    qemu_run_timers(&active_timers[QEMU_TIMER_REALTIME],
4287
                    qemu_get_clock(rt_clock));
4288

    
4289
    /* Check bottom-halves last in case any of the earlier events triggered
4290
       them.  */
4291
    qemu_bh_poll();
4292

    
4293
}
4294

    
4295
static int qemu_cpu_exec(CPUState *env)
4296
{
4297
    int ret;
4298
#ifdef CONFIG_PROFILER
4299
    int64_t ti;
4300
#endif
4301

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

    
4335
static void tcg_cpu_exec(void)
4336
{
4337
    int ret = 0;
4338

    
4339
    if (next_cpu == NULL)
4340
        next_cpu = first_cpu;
4341
    for (; next_cpu != NULL; next_cpu = next_cpu->next_cpu) {
4342
        CPUState *env = cur_cpu = next_cpu;
4343

    
4344
        if (!vm_running)
4345
            break;
4346
        if (timer_alarm_pending) {
4347
            timer_alarm_pending = 0;
4348
            break;
4349
        }
4350
        if (cpu_can_run(env))
4351
            ret = qemu_cpu_exec(env);
4352
        if (ret == EXCP_DEBUG) {
4353
            gdb_set_stop_cpu(env);
4354
            debug_requested = 1;
4355
            break;
4356
        }
4357
    }
4358
}
4359

    
4360
static int cpu_has_work(CPUState *env)
4361
{
4362
    if (env->stop)
4363
        return 1;
4364
    if (env->stopped)
4365
        return 0;
4366
    if (!env->halted)
4367
        return 1;
4368
    if (qemu_cpu_has_work(env))
4369
        return 1;
4370
    return 0;
4371
}
4372

    
4373
static int tcg_has_work(void)
4374
{
4375
    CPUState *env;
4376

    
4377
    for (env = first_cpu; env != NULL; env = env->next_cpu)
4378
        if (cpu_has_work(env))
4379
            return 1;
4380
    return 0;
4381
}
4382

    
4383
static int qemu_calculate_timeout(void)
4384
{
4385
    int timeout;
4386

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

    
4429
    return timeout;
4430
}
4431

    
4432
static int vm_can_run(void)
4433
{
4434
    if (powerdown_requested)
4435
        return 0;
4436
    if (reset_requested)
4437
        return 0;
4438
    if (shutdown_requested)
4439
        return 0;
4440
    if (debug_requested)
4441
        return 0;
4442
    return 1;
4443
}
4444

    
4445
static void main_loop(void)
4446
{
4447
    int r;
4448

    
4449
#ifdef CONFIG_IOTHREAD
4450
    qemu_system_ready = 1;
4451
    qemu_cond_broadcast(&qemu_system_cond);
4452
#endif
4453

    
4454
    for (;;) {
4455
        do {
4456
#ifdef CONFIG_PROFILER
4457
            int64_t ti;
4458
#endif
4459
#ifndef CONFIG_IOTHREAD
4460
            tcg_cpu_exec();
4461
#endif
4462
#ifdef CONFIG_PROFILER
4463
            ti = profile_getclock();
4464
#endif
4465
#ifdef CONFIG_IOTHREAD
4466
            main_loop_wait(1000);
4467
#else
4468
            main_loop_wait(qemu_calculate_timeout());
4469
#endif
4470
#ifdef CONFIG_PROFILER
4471
            dev_time += profile_getclock() - ti;
4472
#endif
4473
        } while (vm_can_run());
4474

    
4475
        if (qemu_debug_requested())
4476
            vm_stop(EXCP_DEBUG);
4477
        if (qemu_shutdown_requested()) {
4478
            if (no_shutdown) {
4479
                vm_stop(0);
4480
                no_shutdown = 0;
4481
            } else
4482
                break;
4483
        }
4484
        if (qemu_reset_requested()) {
4485
            pause_all_vcpus();
4486
            qemu_system_reset();
4487
            resume_all_vcpus();
4488
        }
4489
        if (qemu_powerdown_requested())
4490
            qemu_system_powerdown();
4491
        if ((r = qemu_vmstop_requested()))
4492
            vm_stop(r);
4493
    }
4494
    pause_all_vcpus();
4495
}
4496

    
4497
static void version(void)
4498
{
4499
    printf("QEMU PC emulator version " QEMU_VERSION QEMU_PKGVERSION ", Copyright (c) 2003-2008 Fabrice Bellard\n");
4500
}
4501

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

    
4535
#define HAS_ARG 0x0001
4536

    
4537
enum {
4538
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4539
    opt_enum,
4540
#define DEFHEADING(text)
4541
#include "qemu-options.h"
4542
#undef DEF
4543
#undef DEFHEADING
4544
#undef GEN_DOCS
4545
};
4546

    
4547
typedef struct QEMUOption {
4548
    const char *name;
4549
    int flags;
4550
    int index;
4551
} QEMUOption;
4552

    
4553
static const QEMUOption qemu_options[] = {
4554
    { "h", 0, QEMU_OPTION_h },
4555
#define DEF(option, opt_arg, opt_enum, opt_help)        \
4556
    { option, opt_arg, opt_enum },
4557
#define DEFHEADING(text)
4558
#include "qemu-options.h"
4559
#undef DEF
4560
#undef DEFHEADING
4561
#undef GEN_DOCS
4562
    { NULL },
4563
};
4564

    
4565
#ifdef HAS_AUDIO
4566
struct soundhw soundhw[] = {
4567
#ifdef HAS_AUDIO_CHOICE
4568
#if defined(TARGET_I386) || defined(TARGET_MIPS)
4569
    {
4570
        "pcspk",
4571
        "PC speaker",
4572
        0,
4573
        1,
4574
        { .init_isa = pcspk_audio_init }
4575
    },
4576
#endif
4577

    
4578
#ifdef CONFIG_SB16
4579
    {
4580
        "sb16",
4581
        "Creative Sound Blaster 16",
4582
        0,
4583
        1,
4584
        { .init_isa = SB16_init }
4585
    },
4586
#endif
4587

    
4588
#ifdef CONFIG_CS4231A
4589
    {
4590
        "cs4231a",
4591
        "CS4231A",
4592
        0,
4593
        1,
4594
        { .init_isa = cs4231a_init }
4595
    },
4596
#endif
4597

    
4598
#ifdef CONFIG_ADLIB
4599
    {
4600
        "adlib",
4601
#ifdef HAS_YMF262
4602
        "Yamaha YMF262 (OPL3)",
4603
#else
4604
        "Yamaha YM3812 (OPL2)",
4605
#endif
4606
        0,
4607
        1,
4608
        { .init_isa = Adlib_init }
4609
    },
4610
#endif
4611

    
4612
#ifdef CONFIG_GUS
4613
    {
4614
        "gus",
4615
        "Gravis Ultrasound GF1",
4616
        0,
4617
        1,
4618
        { .init_isa = GUS_init }
4619
    },
4620
#endif
4621

    
4622
#ifdef CONFIG_AC97
4623
    {
4624
        "ac97",
4625
        "Intel 82801AA AC97 Audio",
4626
        0,
4627
        0,
4628
        { .init_pci = ac97_init }
4629
    },
4630
#endif
4631

    
4632
#ifdef CONFIG_ES1370
4633
    {
4634
        "es1370",
4635
        "ENSONIQ AudioPCI ES1370",
4636
        0,
4637
        0,
4638
        { .init_pci = es1370_init }
4639
    },
4640
#endif
4641

    
4642
#endif /* HAS_AUDIO_CHOICE */
4643

    
4644
    { NULL, NULL, 0, 0, { NULL } }
4645
};
4646

    
4647
static void select_soundhw (const char *optarg)
4648
{
4649
    struct soundhw *c;
4650

    
4651
    if (*optarg == '?') {
4652
    show_valid_cards:
4653

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

    
4667
        if (!strcmp (optarg, "all")) {
4668
            for (c = soundhw; c->name; ++c) {
4669
                c->enabled = 1;
4670
            }
4671
            return;
4672
        }
4673

    
4674
        p = optarg;
4675
        while (*p) {
4676
            e = strchr (p, ',');
4677
            l = !e ? strlen (p) : (size_t) (e - p);
4678

    
4679
            for (c = soundhw; c->name; ++c) {
4680
                if (!strncmp (c->name, p, l)) {
4681
                    c->enabled = 1;
4682
                    break;
4683
                }
4684
            }
4685

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

    
4700
        if (bad_card)
4701
            goto show_valid_cards;
4702
    }
4703
}
4704
#endif
4705

    
4706
static void select_vgahw (const char *p)
4707
{
4708
    const char *opts;
4709

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

    
4730
        if (strstart(opts, ",retrace=", &nextopt)) {
4731
            opts = nextopt;
4732
            if (strstart(opts, "dumb", &nextopt))
4733
                vga_retrace_method = VGA_RETRACE_DUMB;
4734
            else if (strstart(opts, "precise", &nextopt))
4735
                vga_retrace_method = VGA_RETRACE_PRECISE;
4736
            else goto invalid_vga;
4737
        } else goto invalid_vga;
4738
        opts = nextopt;
4739
    }
4740
}
4741

    
4742
#ifdef _WIN32
4743
static BOOL WINAPI qemu_ctrl_handler(DWORD type)
4744
{
4745
    exit(STATUS_CONTROL_C_EXIT);
4746
    return TRUE;
4747
}
4748
#endif
4749

    
4750
int qemu_uuid_parse(const char *str, uint8_t *uuid)
4751
{
4752
    int ret;
4753

    
4754
    if(strlen(str) != 36)
4755
        return -1;
4756

    
4757
    ret = sscanf(str, UUID_FMT, &uuid[0], &uuid[1], &uuid[2], &uuid[3],
4758
            &uuid[4], &uuid[5], &uuid[6], &uuid[7], &uuid[8], &uuid[9],
4759
            &uuid[10], &uuid[11], &uuid[12], &uuid[13], &uuid[14], &uuid[15]);
4760

    
4761
    if(ret != 16)
4762
        return -1;
4763

    
4764
#ifdef TARGET_I386
4765
    smbios_add_field(1, offsetof(struct smbios_type_1, uuid), 16, uuid);
4766
#endif
4767

    
4768
    return 0;
4769
}
4770

    
4771
#define MAX_NET_CLIENTS 32
4772

    
4773
#ifndef _WIN32
4774

    
4775
static void termsig_handler(int signal)
4776
{
4777
    qemu_system_shutdown_request();
4778
}
4779

    
4780
static void termsig_setup(void)
4781
{
4782
    struct sigaction act;
4783

    
4784
    memset(&act, 0, sizeof(act));
4785
    act.sa_handler = termsig_handler;
4786
    sigaction(SIGINT,  &act, NULL);
4787
    sigaction(SIGHUP,  &act, NULL);
4788
    sigaction(SIGTERM, &act, NULL);
4789
}
4790

    
4791
#endif
4792

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

    
4839
    qemu_cache_utils_init(envp);
4840

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

    
4872
    register_machines();
4873
    machine = first_machine;
4874
    cpu_model = NULL;
4875
    initrd_filename = NULL;
4876
    ram_size = 0;
4877
    snapshot = 0;
4878
    nographic = 0;
4879
    curses = 0;
4880
    kernel_filename = NULL;
4881
    kernel_cmdline = "";
4882
    cyls = heads = secs = 0;
4883
    translation = BIOS_ATA_TRANSLATION_AUTO;
4884
    monitor_device = "vc:80Cx24C";
4885

    
4886
    serial_devices[0] = "vc:80Cx24C";
4887
    for(i = 1; i < MAX_SERIAL_PORTS; i++)
4888
        serial_devices[i] = NULL;
4889
    serial_device_index = 0;
4890

    
4891
    parallel_devices[0] = "vc:80Cx24C";
4892
    for(i = 1; i < MAX_PARALLEL_PORTS; i++)
4893
        parallel_devices[i] = NULL;
4894
    parallel_device_index = 0;
4895

    
4896
    for(i = 0; i < MAX_VIRTIO_CONSOLES; i++)
4897
        virtio_consoles[i] = NULL;
4898
    virtio_console_index = 0;
4899

    
4900
    for (i = 0; i < MAX_NODES; i++) {
4901
        node_mem[i] = 0;
4902
        node_cpumask[i] = 0;
4903
    }
4904

    
4905
    usb_devices_index = 0;
4906

    
4907
    nb_net_clients = 0;
4908
    nb_bt_opts = 0;
4909
    nb_drives = 0;
4910
    nb_drives_opt = 0;
4911
    nb_numa_nodes = 0;
4912
    hda_index = -1;
4913

    
4914
    nb_nics = 0;
4915

    
4916
    tb_size = 0;
4917
    autostart= 1;
4918

    
4919
    register_watchdogs();
4920

    
4921
    optind = 1;
4922
    for(;;) {
4923
        if (optind >= argc)
4924
            break;
4925
        r = argv[optind];
4926
        if (r[0] != '-') {
4927
            hda_index = drive_add(argv[optind++], HD_ALIAS, 0);
4928
        } else {
4929
            const QEMUOption *popt;
4930

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

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

    
5181
                value = strtoul(optarg, &ptr, 10);
5182
                switch (*ptr) {
5183
                case 0: case 'M': case 'm':
5184
                    value <<= 20;
5185
                    break;
5186
                case 'G': case 'g':
5187
                    value <<= 30;
5188
                    break;
5189
                default:
5190
                    fprintf(stderr, "qemu: invalid ram size: %s\n", optarg);
5191
                    exit(1);
5192
                }
5193

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

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

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

    
5558
#if defined(CONFIG_KVM) && defined(CONFIG_KQEMU)
5559
    if (kvm_allowed && kqemu_allowed) {
5560
        fprintf(stderr,
5561
                "You can not enable both KVM and kqemu at the same time\n");
5562
        exit(1);
5563
    }
5564
#endif
5565

    
5566
    machine->max_cpus = machine->max_cpus ?: 1; /* Default to UP */
5567
    if (smp_cpus > machine->max_cpus) {
5568
        fprintf(stderr, "Number of SMP cpus requested (%d), exceeds max cpus "
5569
                "supported by machine `%s' (%d)\n", smp_cpus,  machine->name,
5570
                machine->max_cpus);
5571
        exit(1);
5572
    }
5573

    
5574
    if (nographic) {
5575
       if (serial_device_index == 0)
5576
           serial_devices[0] = "stdio";
5577
       if (parallel_device_index == 0)
5578
           parallel_devices[0] = "null";
5579
       if (strncmp(monitor_device, "vc", 2) == 0)
5580
           monitor_device = "stdio";
5581
    }
5582

    
5583
#ifndef _WIN32
5584
    if (daemonize) {
5585
        pid_t pid;
5586

    
5587
        if (pipe(fds) == -1)
5588
            exit(1);
5589

    
5590
        pid = fork();
5591
        if (pid > 0) {
5592
            uint8_t status;
5593
            ssize_t len;
5594

    
5595
            close(fds[1]);
5596

    
5597
        again:
5598
            len = read(fds[0], &status, 1);
5599
            if (len == -1 && (errno == EINTR))
5600
                goto again;
5601

    
5602
            if (len != 1)
5603
                exit(1);
5604
            else if (status == 1) {
5605
                fprintf(stderr, "Could not acquire pidfile\n");
5606
                exit(1);
5607
            } else
5608
                exit(0);
5609
        } else if (pid < 0)
5610
            exit(1);
5611

    
5612
        setsid();
5613

    
5614
        pid = fork();
5615
        if (pid > 0)
5616
            exit(0);
5617
        else if (pid < 0)
5618
            exit(1);
5619

    
5620
        umask(027);
5621

    
5622
        signal(SIGTSTP, SIG_IGN);
5623
        signal(SIGTTOU, SIG_IGN);
5624
        signal(SIGTTIN, SIG_IGN);
5625
    }
5626

    
5627
    if (pid_file && qemu_create_pidfile(pid_file) != 0) {
5628
        if (daemonize) {
5629
            uint8_t status = 1;
5630
            write(fds[1], &status, 1);
5631
        } else
5632
            fprintf(stderr, "Could not acquire pid file\n");
5633
        exit(1);
5634
    }
5635
#endif
5636

    
5637
#ifdef CONFIG_KQEMU
5638
    if (smp_cpus > 1)
5639
        kqemu_allowed = 0;
5640
#endif
5641
    if (qemu_init_main_loop()) {
5642
        fprintf(stderr, "qemu_init_main_loop failed\n");
5643
        exit(1);
5644
    }
5645
    linux_boot = (kernel_filename != NULL);
5646
    net_boot = (boot_devices_bitmap >> ('n' - 'a')) & 0xF;
5647

    
5648
    if (!linux_boot && *kernel_cmdline != '\0') {
5649
        fprintf(stderr, "-append only allowed with -kernel option\n");
5650
        exit(1);
5651
    }
5652

    
5653
    if (!linux_boot && initrd_filename != NULL) {
5654
        fprintf(stderr, "-initrd only allowed with -kernel option\n");
5655
        exit(1);
5656
    }
5657

    
5658
    /* boot to floppy or the default cd if no hard disk defined yet */
5659
    if (!boot_devices[0]) {
5660
        boot_devices = "cad";
5661
    }
5662
    setvbuf(stdout, NULL, _IOLBF, 0);
5663

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

    
5677
#ifdef _WIN32
5678
    socket_init();
5679
#endif
5680

    
5681
    /* init network clients */
5682
    if (nb_net_clients == 0) {
5683
        /* if no clients, we use a default config */
5684
        net_clients[nb_net_clients++] = "nic";
5685
#ifdef CONFIG_SLIRP
5686
        net_clients[nb_net_clients++] = "user";
5687
#endif
5688
    }
5689

    
5690
    for(i = 0;i < nb_net_clients; i++) {
5691
        if (net_client_parse(net_clients[i]) < 0)
5692
            exit(1);
5693
    }
5694
    net_client_check();
5695

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

    
5725
    /* init the bluetooth world */
5726
    for (i = 0; i < nb_bt_opts; i++)
5727
        if (bt_parse(bt_opts[i]))
5728
            exit(1);
5729

    
5730
    /* init the memory */
5731
    if (ram_size == 0)
5732
        ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
5733

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

    
5747
    /* init the dynamic translator */
5748
    cpu_exec_init_all(tb_size * 1024 * 1024);
5749

    
5750
    bdrv_init();
5751
    dma_helper_init();
5752

    
5753
    /* we always create the cdrom drive, even if no disk is there */
5754

    
5755
    if (nb_drives_opt < MAX_DRIVES)
5756
        drive_add(NULL, CDROM_ALIAS);
5757

    
5758
    /* we always create at least one floppy */
5759

    
5760
    if (nb_drives_opt < MAX_DRIVES)
5761
        drive_add(NULL, FD_ALIAS, 0);
5762

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

    
5765
    if (nb_drives_opt < MAX_DRIVES)
5766
        drive_add(NULL, SD_ALIAS);
5767

    
5768
    /* open the virtual block devices */
5769

    
5770
    for(i = 0; i < nb_drives_opt; i++)
5771
        if (drive_init(&drives_opt[i], snapshot, machine) == -1)
5772
            exit(1);
5773

    
5774
    register_savevm("timer", 0, 2, timer_save, timer_load, NULL);
5775
    register_savevm_live("ram", 0, 3, ram_save_live, NULL, ram_load, NULL);
5776

    
5777
#ifndef _WIN32
5778
    /* must be after terminal init, SDL library changes signal handlers */
5779
    termsig_setup();
5780
#endif
5781

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

    
5797
    if (nb_numa_nodes > 0) {
5798
        int i;
5799

    
5800
        if (nb_numa_nodes > smp_cpus) {
5801
            nb_numa_nodes = smp_cpus;
5802
        }
5803

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

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

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

    
5839
    if (kvm_enabled()) {
5840
        int ret;
5841

    
5842
        ret = kvm_init(smp_cpus);
5843
        if (ret < 0) {
5844
            fprintf(stderr, "failed to initialize KVM\n");
5845
            exit(1);
5846
        }
5847
    }
5848

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

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

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

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

    
5899
    machine->init(ram_size, boot_devices,
5900
                  kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
5901

    
5902

    
5903
    for (env = first_cpu; env != NULL; env = env->next_cpu) {
5904
        for (i = 0; i < nb_numa_nodes; i++) {
5905
            if (node_cpumask[i] & (1 << env->cpu_index)) {
5906
                env->numa_node = i;
5907
            }
5908
        }
5909
    }
5910

    
5911
    current_machine = machine;
5912

    
5913
    /* Set KVM's vcpu state to qemu's initial CPUState. */
5914
    if (kvm_enabled()) {
5915
        int ret;
5916

    
5917
        ret = kvm_sync_vcpus();
5918
        if (ret < 0) {
5919
            fprintf(stderr, "failed to initialize vcpus\n");
5920
            exit(1);
5921
        }
5922
    }
5923

    
5924
    /* init USB devices */
5925
    if (usb_enabled) {
5926
        for(i = 0; i < usb_devices_index; i++) {
5927
            if (usb_device_add(usb_devices[i], 0) < 0) {
5928
                fprintf(stderr, "Warning: could not add USB device %s\n",
5929
                        usb_devices[i]);
5930
            }
5931
        }
5932
    }
5933

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

    
5968
    dcl = ds->listeners;
5969
    while (dcl != NULL) {
5970
        if (dcl->dpy_refresh != NULL) {
5971
            ds->gui_timer = qemu_new_timer(rt_clock, gui_update, ds);
5972
            qemu_mod_timer(ds->gui_timer, qemu_get_clock(rt_clock));
5973
        }
5974
        dcl = dcl->next;
5975
    }
5976

    
5977
    if (nographic || (vnc_display && !sdl)) {
5978
        nographic_timer = qemu_new_timer(rt_clock, nographic_update, NULL);
5979
        qemu_mod_timer(nographic_timer, qemu_get_clock(rt_clock));
5980
    }
5981

    
5982
    text_consoles_set_display(display_state);
5983
    qemu_chr_initial_reset();
5984

    
5985
    if (monitor_device && monitor_hd)
5986
        monitor_init(monitor_hd, MONITOR_USE_READLINE | MONITOR_IS_DEFAULT);
5987

    
5988
    for(i = 0; i < MAX_SERIAL_PORTS; i++) {
5989
        const char *devname = serial_devices[i];
5990
        if (devname && strcmp(devname, "none")) {
5991
            char label[32];
5992
            snprintf(label, sizeof(label), "serial%d", i);
5993
            if (strstart(devname, "vc", 0))
5994
                qemu_chr_printf(serial_hds[i], "serial%d console\r\n", i);
5995
        }
5996
    }
5997

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

    
6008
    for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
6009
        const char *devname = virtio_consoles[i];
6010
        if (virtcon_hds[i] && devname) {
6011
            char label[32];
6012
            snprintf(label, sizeof(label), "virtcon%d", i);
6013
            if (strstart(devname, "vc", 0))
6014
                qemu_chr_printf(virtcon_hds[i], "virtio console%d\r\n", i);
6015
        }
6016
    }
6017

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

    
6024
    if (loadvm)
6025
        do_loadvm(cur_mon, loadvm);
6026

    
6027
    if (incoming) {
6028
        autostart = 0; /* fixme how to deal with -daemonize */
6029
        qemu_start_incoming_migration(incoming);
6030
    }
6031

    
6032
    if (autostart)
6033
        vm_start();
6034

    
6035
#ifndef _WIN32
6036
    if (daemonize) {
6037
        uint8_t status = 0;
6038
        ssize_t len;
6039

    
6040
    again1:
6041
        len = write(fds[1], &status, 1);
6042
        if (len == -1 && (errno == EINTR))
6043
            goto again1;
6044

    
6045
        if (len != 1)
6046
            exit(1);
6047

    
6048
        chdir("/");
6049
        TFR(fd = open("/dev/null", O_RDWR));
6050
        if (fd == -1)
6051
            exit(1);
6052
    }
6053

    
6054
    if (run_as) {
6055
        pwd = getpwnam(run_as);
6056
        if (!pwd) {
6057
            fprintf(stderr, "User \"%s\" doesn't exist\n", run_as);
6058
            exit(1);
6059
        }
6060
    }
6061

    
6062
    if (chroot_dir) {
6063
        if (chroot(chroot_dir) < 0) {
6064
            fprintf(stderr, "chroot failed\n");
6065
            exit(1);
6066
        }
6067
        chdir("/");
6068
    }
6069

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

    
6085
    if (daemonize) {
6086
        dup2(fd, 0);
6087
        dup2(fd, 1);
6088
        dup2(fd, 2);
6089

    
6090
        close(fd);
6091
    }
6092
#endif
6093

    
6094
    main_loop();
6095
    quit_timers();
6096
    net_cleanup();
6097

    
6098
    return 0;
6099
}